blade-code 0.10.21 → 0.10.23
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-72ztan96.js → chunk-0affe05f.js} +3 -3
- package/dist/{chunk-2c3zavy2.js → chunk-18n15nn8.js} +1 -1
- package/dist/chunk-1ejj4jvg.js +1 -0
- package/dist/{chunk-g7p165yz.js → chunk-2j3d4ykq.js} +2 -2
- package/dist/{chunk-wc1ee4tc.js → chunk-2kpynwxa.js} +1 -1
- package/dist/chunk-2vs6ff2m.js +1 -0
- package/dist/{chunk-e9xv0yyr.js → chunk-33wheqb0.js} +1 -1
- package/dist/{chunk-73jh6fz9.js → chunk-3d2f82yb.js} +2 -2
- package/dist/{chunk-ryhk5qmv.js → chunk-46nbyp0r.js} +459 -369
- package/dist/{chunk-bdn1tkyz.js → chunk-48w87cah.js} +1 -1
- package/dist/{chunk-095x2ykj.js → chunk-4dnvydyv.js} +1 -1
- package/dist/{chunk-6sb7cg95.js → chunk-5sw8j9ae.js} +1 -1
- package/dist/{chunk-r1jxbx1h.js → chunk-5xph8r1k.js} +1 -1
- package/dist/{chunk-jahf977w.js → chunk-698qsvyb.js} +2 -2
- package/dist/{chunk-kfqj54ax.js → chunk-6bywhrm9.js} +2 -2
- package/dist/{chunk-ns5015tn.js → chunk-6g2tsx64.js} +1 -1
- package/dist/{chunk-4tkn9bky.js → chunk-70jrd752.js} +1 -1
- package/dist/chunk-73shq329.js +1 -0
- package/dist/{chunk-w5m418w5.js → chunk-8472vz3s.js} +2 -2
- package/dist/{chunk-edphxwj1.js → chunk-8efpk2z9.js} +2 -2
- package/dist/{chunk-r561wfcz.js → chunk-9ka0bdry.js} +1 -1
- package/dist/{chunk-65kbckpt.js → chunk-9m80tr4t.js} +2 -2
- package/dist/chunk-9wdg2mqh.js +1 -0
- package/dist/{chunk-jhzk287k.js → chunk-abtq0kjb.js} +1 -1
- package/dist/chunk-afk22y4r.js +10 -0
- package/dist/{chunk-jdsr22s2.js → chunk-afv2grka.js} +1 -1
- package/dist/chunk-ak7v70sy.js +100 -0
- package/dist/chunk-b183w6w0.js +1 -0
- package/dist/{chunk-q4fjec99.js → chunk-c7va41dk.js} +2 -2
- package/dist/{chunk-fasxw5bb.js → chunk-c7zk9zj2.js} +1 -1
- package/dist/{chunk-033vmd74.js → chunk-cjyrr1c0.js} +2 -2
- package/dist/chunk-cwyktf92.js +1 -0
- package/dist/{chunk-kmeccj99.js → chunk-czjbz0fp.js} +2 -2
- package/dist/chunk-ddj5f5cz.js +1 -0
- package/dist/{chunk-77z6x1zb.js → chunk-djh79rde.js} +2 -2
- package/dist/{chunk-9wqr1sbq.js → chunk-f9tahtz6.js} +1 -1
- package/dist/{chunk-ah8hky46.js → chunk-gcsygn5a.js} +1 -1
- package/dist/{chunk-1y52h772.js → chunk-h0q03x9f.js} +1 -1
- package/dist/{chunk-k106g2p6.js → chunk-hjvdsrzb.js} +2 -2
- package/dist/{chunk-17jpjcvb.js → chunk-hpgee5s3.js} +3 -3
- package/dist/{chunk-bjf7ecgy.js → chunk-hvp9kt76.js} +1 -1
- package/dist/chunk-k7p4qwdr.js +1 -0
- package/dist/{chunk-2wp6h1p8.js → chunk-kaa0np37.js} +2 -2
- package/dist/chunk-kky5ydtw.js +2 -0
- package/dist/{chunk-afhdpen9.js → chunk-ksm02qjh.js} +2 -2
- package/dist/{chunk-dbb20rxh.js → chunk-kvd5nexw.js} +1 -1
- package/dist/{chunk-5chec8rs.js → chunk-m27w377p.js} +1 -1
- package/dist/{chunk-4v8nxcxp.js → chunk-n7hnp8yj.js} +1 -1
- package/dist/chunk-nbwvc4v4.js +1 -0
- package/dist/{chunk-mvc0tad6.js → chunk-nfm5j63c.js} +2 -2
- package/dist/{chunk-vzgy95tp.js → chunk-nv59nazz.js} +1 -1
- package/dist/chunk-p29w4zfc.js +1 -0
- package/dist/{chunk-whftbz4b.js → chunk-q8f1k8ns.js} +2 -2
- package/dist/chunk-qjzt9pna.js +1 -0
- package/dist/chunk-rbwntemj.js +1 -0
- package/dist/{chunk-sj2w24fe.js → chunk-rxfmqnf7.js} +2 -2
- package/dist/chunk-s1310gqw.js +1 -0
- package/dist/{chunk-jyeas4p9.js → chunk-sr2stcda.js} +1 -1
- package/dist/{chunk-wxqkpvqw.js → chunk-tffagd03.js} +2 -2
- package/dist/{chunk-a1ztrwjb.js → chunk-tw0eh910.js} +1 -1
- package/dist/chunk-txqccp76.js +1 -0
- package/dist/{chunk-y68sxcgk.js → chunk-vannpbp0.js} +1 -1
- package/dist/chunk-vc2c8wkx.js +2 -0
- package/dist/{chunk-vprpk6q1.js → chunk-vypake1a.js} +2 -2
- package/dist/{chunk-5hhfv1w1.js → chunk-wax3nm7t.js} +1 -1
- package/dist/{chunk-pmw9pn3v.js → chunk-x0g7y97q.js} +1 -1
- package/dist/{chunk-yz2bsntj.js → chunk-xjqcc0nt.js} +1 -1
- package/dist/{chunk-4ypy5bk8.js → chunk-yann89nx.js} +2 -2
- package/dist/{chunk-7mpa4esh.js → chunk-yqk501wp.js} +1 -1
- package/dist/{chunk-2ygqbd1z.js → chunk-zj651nrm.js} +1 -1
- package/dist/web/assets/ChatView-CCxjYDmJ.js +7 -0
- package/dist/web/assets/{CodeBlockHighlighter-DYuOTwXS.js → CodeBlockHighlighter-D9MqsrZP.js} +1 -1
- package/dist/web/assets/{FilePreview-CWOBOnzz.js → FilePreview-Cn5HOlPw.js} +1 -1
- package/dist/web/assets/{MarkdownRenderer-YiYvkN2w.js → MarkdownRenderer-ALTOCdfi.js} +3 -3
- package/dist/web/assets/{SettingsModal-BT-oFKGN.js → SettingsModal-Dk69F1bS.js} +1 -1
- package/dist/web/assets/{TaskSwitcher-D5Gd6FN9.js → TaskSwitcher-DRZZocE1.js} +1 -1
- package/dist/web/assets/{TerminalPanel-C1hLHq_K.js → TerminalPanel-ByAqKZ47.js} +1 -1
- package/dist/web/assets/{index-DuYx6fkN.js → index-CRCirUK7.js} +5 -5
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/chunk-0et4h9p3.js +0 -1
- package/dist/chunk-0qayfsc9.js +0 -2
- package/dist/chunk-1p5822w7.js +0 -100
- package/dist/chunk-303cba4k.js +0 -1
- package/dist/chunk-51vnya3v.js +0 -1
- package/dist/chunk-6f3rp67k.js +0 -1
- package/dist/chunk-6v4dwkw7.js +0 -1
- package/dist/chunk-7p4qvftj.js +0 -1
- package/dist/chunk-9snsxf18.js +0 -1
- package/dist/chunk-c23c1vn6.js +0 -1
- package/dist/chunk-cb0rb9ss.js +0 -1
- package/dist/chunk-cysaxtfp.js +0 -10
- package/dist/chunk-efkqwhff.js +0 -1
- package/dist/chunk-ktbe458z.js +0 -2
- package/dist/chunk-r73fanrm.js +0 -1
- package/dist/chunk-smh39yy2.js +0 -1
- package/dist/chunk-w9tnd1q2.js +0 -1
- package/dist/chunk-zz9rax72.js +0 -1
- package/dist/web/assets/ChatView-YFotW0KS.js +0 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{gd as D}from"./chunk-5hhfv1w1.js";import{hd as G0}from"./chunk-yz2bsntj.js";import{Xe as U0,me as H0}from"./chunk-mvc0tad6.js";import{nf as $0}from"./chunk-dbb20rxh.js";import{sf as A}from"./chunk-w5m418w5.js";import{nanoid as J0}from"nanoid";import{devtools as v0,subscribeWithSelector as k0}from"zustand/middleware";import{createStore as f0}from"zustand/vanilla";var _0={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)"}},K0={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)"}},W0={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)"}},q0={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)"}},O0={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)"}},w0={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)"}},B0={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)"}},D0={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)"}},x0={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)"}},E0={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)"}},L0={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)"}},A0={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)"}},P0={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)"}},l=[{id:"ayu-dark",label:"Ayu Dark",theme:_0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:K0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:W0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:q0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:O0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:w0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:B0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:D0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:x0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:E0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:L0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:A0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:P0,tags:["dark","japanese"]}];var i={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"}},v={name:"default",colors:i,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)"}},N0={...v,name:"dark",colors:{...i,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 n{currentTheme=v;themes=new Map;constructor(){this.themes.set("default",v),this.themes.set("dark",N0);for(let X of l)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 n;var R0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,reasoningEffort:"off",serviceTier:"auto",responseVerbosity:"auto",communicationStyle:"auto",subagentProgress:null,subagentProgresses:{}},k=(X)=>({...R0,actions:{setInitializationStatus:(Z)=>{X((Y)=>({app:{...Y.app,initializationStatus:Z}}))},setInitializationError:(Z)=>{X((Y)=>({app:{...Y.app,initializationError:Z}}))},setActiveModal:(Z)=>{X((Y)=>({app:{...Y.app,activeModal:Z}}))},showSessionSelector:(Z,Y="resume")=>{X((Q)=>({app:{...Q.app,activeModal:"sessionSelector",sessionSelectorData:{intent:Y,sessions:Z}}}))},showModelEditWizard:(Z)=>{X((Y)=>({app:{...Y.app,activeModal:"modelEditWizard",modelEditorTarget:Z}}))},closeModal:()=>{X((Z)=>({app:{...Z.app,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null}}))},setTasks:(Z)=>{X((Y)=>({app:{...Y.app,tasks:Z}}))},updateTask:(Z)=>{X((Y)=>({app:{...Y.app,tasks:Y.app.tasks.map((Q)=>Q.id===Z.id?Z:Q)}}))},setAwaitingSecondCtrlC:(Z)=>{X((Y)=>({app:{...Y.app,awaitingSecondCtrlC:Z}}))},setReasoningEffort:(Z)=>{X((Y)=>({app:{...Y.app,reasoningEffort:Z,thinkingModeEnabled:Z!=="off"}}))},setServiceTier:(Z)=>{X((Y)=>({app:{...Y.app,serviceTier:Z}}))},setResponseVerbosity:(Z)=>{X((Y)=>({app:{...Y.app,responseVerbosity:Z}}))},setCommunicationStyle:(Z)=>{X((Y)=>({app:{...Y.app,communicationStyle:Z}}))},setThinkingModeEnabled:(Z)=>{X((Y)=>({app:{...Y.app,thinkingModeEnabled:Z,reasoningEffort:Z?"auto":"off"}}))},toggleThinkingMode:()=>{X((Z)=>({app:{...Z.app,thinkingModeEnabled:!Z.app.thinkingModeEnabled,reasoningEffort:Z.app.thinkingModeEnabled?"off":"auto"}}))},startSubagentProgress:(Z,Y,Q)=>{X(($)=>({app:{...$.app,subagentProgresses:{...$.app.subagentProgresses,[Z]:{id:Z,type:Y,description:Q,status:"running",startTime:Date.now()}},subagentProgress:{id:Z,type:Y,description:Q,status:"running",startTime:Date.now()}}}))},updateSubagentTool:(Z,Y)=>{X((Q)=>{let $=Q.app.subagentProgresses[Z];if(!$)return Q;let G={...$,currentTool:Y};return{app:{...Q.app,subagentProgresses:{...Q.app.subagentProgresses,[Z]:G},subagentProgress:Q.app.subagentProgress?.id===Z?G:Q.app.subagentProgress}}})},completeSubagentProgress:(Z,Y)=>{X((Q)=>{let $=Q.app.subagentProgresses[Z];if(!$)return Q;let G={...$,status:Y?"completed":"failed",currentTool:void 0};return{app:{...Q.app,subagentProgresses:{...Q.app.subagentProgresses,[Z]:G},subagentProgress:Q.app.subagentProgress?.id===Z?G:Q.app.subagentProgress}}}),setTimeout(()=>{X((Q)=>{let $=Q.app.subagentProgresses[Z];if(!$||$.status==="running")return Q;let G={...Q.app.subagentProgresses};delete G[Z];let V=Object.values(G);return{app:{...Q.app,subagentProgresses:G,subagentProgress:Q.app.subagentProgress?.id===Z?V[V.length-1]??null:Q.app.subagentProgress}}})},1500)}}});var y0={isProcessing:!1,abortController:null,pendingCommands:[],recoveredSteeringCount:0},f=(X,Z)=>({...y0,actions:{setProcessing:(Y)=>{X((Q)=>({command:{...Q.command,isProcessing:Y},...!Y?{session:{...Q.session,providerRetry:null,providerStall:null}}:{}}))},createAbortController:()=>{let Y=Z().command.abortController;if(Y&&!Y.signal.aborted)Y.abort("interrupted-by-new-command");let Q=new AbortController;return X(($)=>({command:{...$.command,abortController:Q}})),Q},getAbortController:()=>{return Z().command.abortController},clearAbortController:(Y)=>{let Q=Z().command.abortController;if(Y!==void 0&&Q!==Y)return;X(($)=>({command:{...$.command,abortController:null}}))},abort:(Y)=>{let{abortController:Q}=Z().command;if(Q&&!Q.signal.aborted)Q.abort(Y??"user-cancel");X(($)=>({command:{...$.command,isProcessing:!1,pendingCommands:[]},session:{...$.session,providerRetry:null,providerStall:null}}))},enqueueCommand:(Y)=>{X((Q)=>({command:{...Q.command,pendingCommands:[...Q.command.pendingCommands,Y]}}))},dequeueCommand:()=>{let{pendingCommands:Y}=Z().command;if(Y.length===0)return;let[Q,...$]=Y;return X((G)=>({command:{...G.command,pendingCommands:$}})),Q},clearQueue:()=>{X((Y)=>({command:{...Y.command,pendingCommands:[]}}))},setRecoveredSteeringCount:(Y)=>{X((Q)=>({command:{...Q.command,recoveredSteeringCount:Math.max(0,Y)}}))}}});var T0={config:null},u=(X,Z)=>({...T0,actions:{setConfig:(Y)=>{A().configureModelProviders(Y.modelProviders,Y.models),X((Q)=>({config:{...Q.config,config:Y}}))},updateConfig:(Y)=>{let Q=Z().config.config;if(!Q)throw Error(`[ConfigSlice] Config not initialized. Cannot update: ${JSON.stringify(Y)}`);let $={...Q,...Y};if(Y.modelProviders||Y.models)A().configureModelProviders($.modelProviders,$.models);X((G)=>({config:{...G.config,config:$}}))}}});var S0={currentFocus:"main-input",previousFocus:null},p=(X)=>({...S0,actions:{setFocus:(Z)=>{X((Y)=>({focus:{...Y.focus,currentFocus:Z,previousFocus:Y.focus.currentFocus}}))},restorePreviousFocus:()=>{X((Z)=>({focus:{...Z.focus,currentFocus:Z.focus.previousFocus||"main-input",previousFocus:null}}))}}});function m(X,Z,Y,Q){let $=X.messages.find((V)=>V.id===Z);if($)return $;let G={id:Z,role:Y,content:"",timestamp:Q};return X.messages.push(G),G}function a(X,Z){let Y=Date.parse(Z.timestamp)||Date.now();switch(Z.type){case"message_created":return m(X,Z.data.messageId,Z.data.role,Y),X;case"part_created":case"part_updated":{let{messageId:Q,partType:$,payload:G,partId:V}=Z.data,J=X.messages.find((F)=>F.id===Q)??m(X,Q,"assistant",Y);if($==="text"){let F=G.text??"";X.streamingText.delete(V),J.content=F}else if($==="image")J.content=J.content?`${J.content}
|
|
1
|
+
import{kd as D}from"./chunk-wax3nm7t.js";import{ld as G0}from"./chunk-xjqcc0nt.js";import{$e as U0,qe as H0}from"./chunk-nfm5j63c.js";import{rf as $0}from"./chunk-kvd5nexw.js";import{wf as A}from"./chunk-8472vz3s.js";import{nanoid as J0}from"nanoid";import{devtools as v0,subscribeWithSelector as k0}from"zustand/middleware";import{createStore as f0}from"zustand/vanilla";var _0={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)"}},K0={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)"}},W0={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)"}},q0={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)"}},O0={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)"}},w0={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)"}},B0={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)"}},D0={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)"}},x0={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)"}},E0={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)"}},L0={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)"}},A0={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)"}},P0={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)"}},l=[{id:"ayu-dark",label:"Ayu Dark",theme:_0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:K0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:W0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:q0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:O0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:w0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:B0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:D0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:x0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:E0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:L0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:A0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:P0,tags:["dark","japanese"]}];var i={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"}},v={name:"default",colors:i,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)"}},N0={...v,name:"dark",colors:{...i,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 n{currentTheme=v;themes=new Map;constructor(){this.themes.set("default",v),this.themes.set("dark",N0);for(let X of l)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 n;var R0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,reasoningEffort:"off",serviceTier:"auto",responseVerbosity:"auto",communicationStyle:"auto",subagentProgress:null,subagentProgresses:{}},k=(X)=>({...R0,actions:{setInitializationStatus:(Z)=>{X((Y)=>({app:{...Y.app,initializationStatus:Z}}))},setInitializationError:(Z)=>{X((Y)=>({app:{...Y.app,initializationError:Z}}))},setActiveModal:(Z)=>{X((Y)=>({app:{...Y.app,activeModal:Z}}))},showSessionSelector:(Z,Y="resume")=>{X((Q)=>({app:{...Q.app,activeModal:"sessionSelector",sessionSelectorData:{intent:Y,sessions:Z}}}))},showModelEditWizard:(Z)=>{X((Y)=>({app:{...Y.app,activeModal:"modelEditWizard",modelEditorTarget:Z}}))},closeModal:()=>{X((Z)=>({app:{...Z.app,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null}}))},setTasks:(Z)=>{X((Y)=>({app:{...Y.app,tasks:Z}}))},updateTask:(Z)=>{X((Y)=>({app:{...Y.app,tasks:Y.app.tasks.map((Q)=>Q.id===Z.id?Z:Q)}}))},setAwaitingSecondCtrlC:(Z)=>{X((Y)=>({app:{...Y.app,awaitingSecondCtrlC:Z}}))},setReasoningEffort:(Z)=>{X((Y)=>({app:{...Y.app,reasoningEffort:Z,thinkingModeEnabled:Z!=="off"}}))},setServiceTier:(Z)=>{X((Y)=>({app:{...Y.app,serviceTier:Z}}))},setResponseVerbosity:(Z)=>{X((Y)=>({app:{...Y.app,responseVerbosity:Z}}))},setCommunicationStyle:(Z)=>{X((Y)=>({app:{...Y.app,communicationStyle:Z}}))},setThinkingModeEnabled:(Z)=>{X((Y)=>({app:{...Y.app,thinkingModeEnabled:Z,reasoningEffort:Z?"auto":"off"}}))},toggleThinkingMode:()=>{X((Z)=>({app:{...Z.app,thinkingModeEnabled:!Z.app.thinkingModeEnabled,reasoningEffort:Z.app.thinkingModeEnabled?"off":"auto"}}))},startSubagentProgress:(Z,Y,Q)=>{X(($)=>({app:{...$.app,subagentProgresses:{...$.app.subagentProgresses,[Z]:{id:Z,type:Y,description:Q,status:"running",startTime:Date.now()}},subagentProgress:{id:Z,type:Y,description:Q,status:"running",startTime:Date.now()}}}))},updateSubagentTool:(Z,Y)=>{X((Q)=>{let $=Q.app.subagentProgresses[Z];if(!$)return Q;let G={...$,currentTool:Y};return{app:{...Q.app,subagentProgresses:{...Q.app.subagentProgresses,[Z]:G},subagentProgress:Q.app.subagentProgress?.id===Z?G:Q.app.subagentProgress}}})},completeSubagentProgress:(Z,Y)=>{X((Q)=>{let $=Q.app.subagentProgresses[Z];if(!$)return Q;let G={...$,status:Y?"completed":"failed",currentTool:void 0};return{app:{...Q.app,subagentProgresses:{...Q.app.subagentProgresses,[Z]:G},subagentProgress:Q.app.subagentProgress?.id===Z?G:Q.app.subagentProgress}}}),setTimeout(()=>{X((Q)=>{let $=Q.app.subagentProgresses[Z];if(!$||$.status==="running")return Q;let G={...Q.app.subagentProgresses};delete G[Z];let V=Object.values(G);return{app:{...Q.app,subagentProgresses:G,subagentProgress:Q.app.subagentProgress?.id===Z?V[V.length-1]??null:Q.app.subagentProgress}}})},1500)}}});var y0={isProcessing:!1,abortController:null,pendingCommands:[],recoveredSteeringCount:0},f=(X,Z)=>({...y0,actions:{setProcessing:(Y)=>{X((Q)=>({command:{...Q.command,isProcessing:Y},...!Y?{session:{...Q.session,providerRetry:null,providerStall:null}}:{}}))},createAbortController:()=>{let Y=Z().command.abortController;if(Y&&!Y.signal.aborted)Y.abort("interrupted-by-new-command");let Q=new AbortController;return X(($)=>({command:{...$.command,abortController:Q}})),Q},getAbortController:()=>{return Z().command.abortController},clearAbortController:(Y)=>{let Q=Z().command.abortController;if(Y!==void 0&&Q!==Y)return;X(($)=>({command:{...$.command,abortController:null}}))},abort:(Y)=>{let{abortController:Q}=Z().command;if(Q&&!Q.signal.aborted)Q.abort(Y??"user-cancel");X(($)=>({command:{...$.command,isProcessing:!1,pendingCommands:[]},session:{...$.session,providerRetry:null,providerStall:null}}))},enqueueCommand:(Y)=>{X((Q)=>({command:{...Q.command,pendingCommands:[...Q.command.pendingCommands,Y]}}))},dequeueCommand:()=>{let{pendingCommands:Y}=Z().command;if(Y.length===0)return;let[Q,...$]=Y;return X((G)=>({command:{...G.command,pendingCommands:$}})),Q},clearQueue:()=>{X((Y)=>({command:{...Y.command,pendingCommands:[]}}))},setRecoveredSteeringCount:(Y)=>{X((Q)=>({command:{...Q.command,recoveredSteeringCount:Math.max(0,Y)}}))}}});var T0={config:null},u=(X,Z)=>({...T0,actions:{setConfig:(Y)=>{A().configureModelProviders(Y.modelProviders,Y.models),X((Q)=>({config:{...Q.config,config:Y}}))},updateConfig:(Y)=>{let Q=Z().config.config;if(!Q)throw Error(`[ConfigSlice] Config not initialized. Cannot update: ${JSON.stringify(Y)}`);let $={...Q,...Y};if(Y.modelProviders||Y.models)A().configureModelProviders($.modelProviders,$.models);X((G)=>({config:{...G.config,config:$}}))}}});var S0={currentFocus:"main-input",previousFocus:null},p=(X)=>({...S0,actions:{setFocus:(Z)=>{X((Y)=>({focus:{...Y.focus,currentFocus:Z,previousFocus:Y.focus.currentFocus}}))},restorePreviousFocus:()=>{X((Z)=>({focus:{...Z.focus,currentFocus:Z.focus.previousFocus||"main-input",previousFocus:null}}))}}});function m(X,Z,Y,Q){let $=X.messages.find((V)=>V.id===Z);if($)return $;let G={id:Z,role:Y,content:"",timestamp:Q};return X.messages.push(G),G}function a(X,Z){let Y=Date.parse(Z.timestamp)||Date.now();switch(Z.type){case"message_created":return m(X,Z.data.messageId,Z.data.role,Y),X;case"part_created":case"part_updated":{let{messageId:Q,partType:$,payload:G,partId:V}=Z.data,J=X.messages.find((F)=>F.id===Q)??m(X,Q,"assistant",Y);if($==="text"){let F=G.text??"";X.streamingText.delete(V),J.content=F}else if($==="image")J.content=J.content?`${J.content}
|
|
2
2
|
[Image]`:"[Image]";return X}default:return X}}function s(X,Z){if(Z.channel!=="content")return X;let Y=X.messages.find((G)=>G.id===Z.messageId)??m(X,Z.messageId,"assistant",Date.now()),$=(X.streamingText.get(Z.partId)?.text??"")+Z.delta;return X.streamingText.set(Z.partId,{messageId:Z.messageId,text:$}),Y.content=$,X}function t(X,Z,Y,Q=0,$=0,G){let V=A(),J=G?V.models.getModel(G,X):V.models.getModels().find((K)=>K.id===X);if(!J)return 0;let F=J.cost,z=Z/1e6*F.input+Y/1e6*F.output+Q/1e6*F.cacheRead+$/1e6*F.cacheWrite;return Math.round(z*1e6)/1e6}var W={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 t0(X){let Z=[],Y=X.split(/\r?\n/),Q=!1,$=[],G=null,V=0,J=!1,F=[],z=[],K=!1,w=[],E=!1,j=[],H=0,U=!0;for(let O=0;O<Y.length;O++){let q=Y[O];if(K){if(q.match(W.diffEnd)){try{let B=JSON.parse(w.join(`
|
|
3
3
|
`));Z.push({type:"diff",content:"",diffData:{patch:B.patch,startLine:B.startLine,matchLine:B.matchLine}})}catch(B){Z.push({type:"text",content:w.join(`
|
|
4
4
|
`)})}K=!1,w=[],U=!1;continue}w.push(q);continue}if(q.match(W.diffStart)){K=!0,w=[],U=!1;continue}if(Q){let B=q.match(W.codeBlock),L=q.trim()==="```";if(B&&B[1])V++,$.push(q);else if(L)if(V>0)V--,$.push(q);else{let j0=$.join(`
|
|
@@ -22,4 +22,4 @@ import{gd as D}from"./chunk-5hhfv1w1.js";import{hd as G0}from"./chunk-yz2bsntj.j
|
|
|
22
22
|
`+`1. 配置文件格式正确 (~/.blade/config.json)
|
|
23
23
|
`+`2. 运行 blade 进行首次配置
|
|
24
24
|
`+"3. 配置文件权限正确")}finally{R=null}})(),R}var C1=()=>_().config.config?.models??[],b1=()=>{let X=x();if(!X)return;let Z=X.currentModelId;return X.models.find((Q)=>Q.id===Z)??X.models[0]},h1=(X)=>{let Z=x();if(!Z)return;return Z.models.find((Y)=>Y.id===X)},M1=()=>_().config.config?.mcpServers??{},v1=()=>_().app.thinkingModeEnabled,k1=()=>_().app.reasoningEffort,f1=()=>_().app.serviceTier,u1=()=>_().app.responseVerbosity,p1=()=>_().app.communicationStyle,F0=()=>({setPermissionMode:async(X)=>{_().config.actions.updateConfig({permissionMode:X})},setTheme:async(X,Z={})=>{try{o.setTheme(X)}catch{return}_().config.actions.updateConfig({theme:X}),await D().save({theme:X},{scope:"global",...Z})},setLanguage:async(X,Z={})=>{_().config.actions.updateConfig({language:X}),await D().save({language:X},{scope:"global",...Z})},setDebug:async(X,Z={})=>{_().config.actions.updateConfig({debug:X}),await D().save({debug:X},{scope:"global",...Z})},setTemperature:async(X,Z={})=>{_().config.actions.updateConfig({temperature:X}),await D().save({temperature:X},{scope:"global",...Z})},updateConfig:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");let Q={...Y};_().config.actions.updateConfig(X);try{await D().save(X,Z)}catch($){throw _().config.actions.setConfig(Q),$}},flush:async()=>{await D().flush()},appendPermissionAllowRule:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");let Q=Y.permissions?.allow||[];if(!Q.includes(X)){let $=[...Q,X];_().config.actions.updateConfig({permissions:{...Y.permissions,allow:$}})}await D().appendPermissionRule(X,Z)},appendLocalPermissionAllowRule:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");let Q=Y.permissions?.allow||[];if(!Q.includes(X)){let $=[...Q,X];_().config.actions.updateConfig({permissions:{...Y.permissions,allow:$}})}await D().appendLocalPermissionRule(X,Z)},setCurrentModel:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");if(!Y.models.find(($)=>$.id===X))throw Error(`Model not found: ${X}`);_().config.actions.updateConfig({currentModelId:X}),await D().save({currentModelId:X},{scope:"global",...Z})},addModel:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");let Q="id"in X?X:{id:J0(),...X};if(Y.models.find((J)=>J.provider===Q.provider&&J.model===Q.model))throw Error(`Model already configured: ${Q.provider}/${Q.model}`);let V={models:[...Y.models,Q]};if(Y.models.length===0)V.currentModelId=Q.id;return _().config.actions.updateConfig(V),await D().save(V,{scope:"global",...Z}),Q},addModelWithProvider:async(X,Z,Y={})=>{let Q=x();if(!Q)throw Error("Config not initialized");let $=X.provider;if(Q.modelProviders[$])throw Error(`Model provider already configured: ${$}`);let G="id"in X?X:{id:J0(),...X};if(Q.models.find((K)=>K.provider===$&&K.model===G.model))throw Error(`Model already configured: ${$}/${G.model}`);let J=Q,F=[...Q.models,G],z={modelProviders:{...Q.modelProviders,[$]:Z},models:F};if(Q.models.length===0)z.currentModelId=G.id;A().registerModelProvider($,Z,[G.model]),_().config.actions.updateConfig(z);try{return await D().save(z,{scope:"global",...Y}),G}catch(K){throw _().config.actions.setConfig(J),A().configureModelProviders(J.modelProviders,J.models),K}},updateModelWithProvider:async(X,Z,Y,Q={})=>{let $=x();if(!$)throw Error("Config not initialized");let G=Z.provider;if(!G)throw Error("Model provider is required");if($.modelProviders[G])throw Error(`Model provider already configured: ${G}`);let V=$.models.findIndex((w)=>w.id===X);if(V===-1)throw Error(`Model not found: ${X}`);let J={...$.models[V],...Z};if(!J.model)throw Error("Model ID is required");let F=$,z=[...$.models];z[V]=J;let K={modelProviders:{...$.modelProviders,[G]:Y},models:z};A().registerModelProvider(G,Y,[J.model]),_().config.actions.updateConfig(K);try{await D().save(K,{scope:"global",...Q})}catch(w){throw _().config.actions.setConfig(F),A().configureModelProviders(F.modelProviders,F.models),w}},updateModelProvider:async(X,Z,Y={})=>{let Q=x();if(!Q)throw Error("Config not initialized");if(!Q.modelProviders[X])throw Error(`Model provider not found: ${X}`);let $=Q.models.filter((G)=>G.provider===X).map((G)=>G.model);A().registerModelProvider(X,Z,$),await F0().updateConfig({modelProviders:{...Q.modelProviders,[X]:Z}},{scope:"global",immediate:!0,...Y})},removeModelProvider:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");if(!Y.modelProviders[X])throw Error(`Model provider not found: ${X}`);let Q=Y.models.filter((j)=>j.provider===X),$=Y.models.filter((j)=>j.fallbackModels?.some((H)=>H.provider===X));if(!Z.removeModels&&(Q.length>0||$.length>0))throw Error(`Model provider is still referenced by ${Q.length} model(s) and ${$.length} fallback configuration(s)`);let G=Q.map((j)=>j.id),V=Y.models.filter((j)=>j.provider!==X).map((j)=>{let H=j.fallbackModels?.filter((q)=>q.provider!==X),{fallbackModels:U,...O}=j;return H?.length?{...O,fallbackModels:H}:O});if(V.length===0)throw Error("Cannot remove the provider that owns the only model");let J={...Y.modelProviders};delete J[X];let F={modelProviders:J,models:V};if(G.includes(Y.currentModelId))F.currentModelId=V[0].id;let z=A(),K=await z.credentials.read(X);await z.credentials.delete(X);let{removeModels:w,...E}=Z;try{return await F0().updateConfig(F,{scope:"global",immediate:!0,...E}),{removedModelIds:G}}catch(j){if(K)await z.credentials.modify(X,async()=>K);throw j}},updateModel:async(X,Z,Y={})=>{let Q=x();if(!Q)throw Error("Config not initialized");let $=Q.models.findIndex((V)=>V.id===X);if($===-1)throw Error(`Model not found: ${X}`);let G=[...Q.models];G[$]={...G[$],...Z},_().config.actions.updateConfig({models:G}),await D().save({models:G},{scope:"global",...Y})},removeModel:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");if(Y.models.length===1)throw Error("Cannot remove the only model");let Q=Y.models.filter((G)=>G.id!==X),$={models:Q};if(Y.currentModelId===X)$.currentModelId=Q[0].id;_().config.actions.updateConfig($),await D().save($,{scope:"global",...Z})},addMcpServer:async(X,Z,Y={})=>{let Q=x();if(!Q)throw Error("Config not initialized");let $=Q.mcpServers??{},G=H0(Z),V={...Z,...G?{oauth:G}:{}},J={...$,[X]:V};_().config.actions.updateConfig({mcpServers:J}),await D().save({mcpServers:J},{scope:"project",...Y})},removeMcpServer:async(X,Z={})=>{let Y=x();if(!Y)throw Error("Config not initialized");let $={...Y.mcpServers??{}};delete $[X],_().config.actions.updateConfig({mcpServers:$}),await D().save({mcpServers:$},{scope:"project",...Z})}});
|
|
25
|
-
export{l as
|
|
25
|
+
export{l as Lc,o as Mc,W as Nc,t0 as Oc,X1 as Pc,Y1 as Qc,Z1 as Rc,$1 as Sc,G1 as Tc,V1 as Uc,u0 as Vc,_ as Wc,y1 as Xc,T1 as Yc,S1 as Zc,x as _c,I1 as $c,C1 as ad,b1 as bd,h1 as cd,M1 as dd,v1 as ed,k1 as fd,f1 as gd,u1 as hd,p1 as id,F0 as jd};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ac as a,Bc as b,Cc as c}from"./chunk-kaa0np37.js";import"./chunk-hjvdsrzb.js";import"./chunk-q8f1k8ns.js";import"./chunk-wax3nm7t.js";import"./chunk-xjqcc0nt.js";import"./chunk-18n15nn8.js";import"./chunk-djh79rde.js";import"./chunk-nfm5j63c.js";import"./chunk-gcsygn5a.js";import"./chunk-9ka0bdry.js";import"./chunk-vc2c8wkx.js";import"./chunk-kvd5nexw.js";import"./chunk-8472vz3s.js";import"./chunk-f9tahtz6.js";import"./chunk-tffagd03.js";import"./chunk-698qsvyb.js";import"./chunk-h0q03x9f.js";import"./chunk-czjbz0fp.js";import"./chunk-c7zk9zj2.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ad as c,yd as a,zd as b}from"./chunk-yann89nx.js";import"./chunk-nfm5j63c.js";import"./chunk-gcsygn5a.js";import"./chunk-9ka0bdry.js";import"./chunk-vc2c8wkx.js";import"./chunk-kvd5nexw.js";import"./chunk-8472vz3s.js";import"./chunk-f9tahtz6.js";import"./chunk-tffagd03.js";import"./chunk-698qsvyb.js";import"./chunk-h0q03x9f.js";import"./chunk-czjbz0fp.js";import"./chunk-c7zk9zj2.js";export{c as snapshotWorkspaceModelResources,b as resolveWorkspaceModelResources,a as cloneWorkspaceModelConfig};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ne as R}from"./chunk-djh79rde.js";import{uf as q,wf as _}from"./chunk-8472vz3s.js";import{zf as K}from"./chunk-f9tahtz6.js";var ie={openrouter:{"HTTP-Referer":"https://github.com/echoVic/blade-code","X-Title":"Blade"},cerebras:{"X-Cerebras-3rd-Party-Integration":"blade"}},N=(e)=>ie[e]||{};var se=new Set(["user-cancel","interrupt","sibling-error","timeout"]);function A(e){return typeof e==="string"&&se.has(e)}function Ne(e){if(!e.aborted)return;if(A(e.reason))return e.reason;return"user-cancel"}function je(e){if(A(e))return!0;if(!(e instanceof Error))return!1;if(e.name==="AbortError")return!0;if(e instanceof DOMException&&e.name==="AbortError")return!0;if(e.message.includes("aborted"))return!0;return!1}function U(...e){let t=e.filter(Boolean);if(t.length===0)return new AbortController().signal;if(t.length===1)return t[0];let o=AbortSignal;if(typeof o.any==="function")return o.any(t);for(let i of t)if(i.aborted)return i;let r=new AbortController,n=new Map;for(let i of t){let a=()=>{r.abort(i.reason);for(let[u,s]of n)u.removeEventListener("abort",s)};n.set(i,a)}for(let[i,a]of n)i.addEventListener("abort",a,{once:!0});return r.signal}function P(e,t,o){let r=o?.throwOnAbort??!1;if(t?.aborted){if(r)return Promise.reject(new DOMException("Aborted","AbortError"));return Promise.resolve()}return new Promise((n,i)=>{let a,u=setTimeout(()=>{if(t&&a)t.removeEventListener("abort",a);n()},e);if(t)a=()=>{if(clearTimeout(u),r)i(new DOMException("Aborted","AbortError"));else n()},t.addEventListener("abort",a,{once:!0})})}var ae=R("Chat"),ue={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function E(e){if(typeof e==="string")return e;return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
|
|
2
2
|
`)}function de(e){if(!e)return{};try{let t=JSON.parse(e);return t&&typeof t==="object"&&!Array.isArray(t)?t:{}}catch{return ae.warn("[PiAIChatService] Invalid historical tool arguments",{value:e}),{}}}function ce(e){let t=e.match(/^data:([^;,]+);base64,(.+)$/s);return t?{mimeType:t[1],data:t[2]}:void 0}async function le(e,t){let o=ce(e);if(o)return{type:"image",...o};if(!/^https?:\/\//i.test(e))return{type:"text",text:`[Unsupported image source: ${e}]`};let r=await fetch(e,{signal:t});if(!r.ok)throw Error(`Failed to load image ${e}: HTTP ${r.status}`);return{type:"image",mimeType:r.headers.get("content-type")?.split(";")[0]??"image/png",data:Buffer.from(await r.arrayBuffer()).toString("base64")}}async function j(e,t,o,r,n){let i=e.filter((s)=>s.role==="system").map((s)=>E(s.content)).filter(Boolean).join(`
|
|
3
3
|
|
|
4
4
|
`),a=[];for(let s of e){if(s.role==="system")continue;if(s.role==="user"){let c=t.input.includes("image"),d=typeof s.content==="string"?s.content:await Promise.all(s.content.map((l)=>l.type==="text"?Promise.resolve({type:"text",text:l.text}):c?le(l.image_url.url,r):Promise.resolve({type:"text",text:"[Image omitted: current model does not support image input]"})));a.push({role:"user",content:d,timestamp:Date.now()});continue}if(s.role==="assistant"){let c=[];if(s.reasoningContent?.trim())c.push({type:"thinking",thinking:s.reasoningContent});let d=E(s.content);if(d)c.push({type:"text",text:d});for(let l of s.tool_calls??[]){if(!("function"in l))continue;c.push({type:"toolCall",id:l.id,name:l.function.name,arguments:de(l.function.arguments)})}a.push({role:"assistant",content:c,api:t.api,provider:t.provider,model:t.id,usage:ue,stopReason:s.tool_calls?.length?"toolUse":"stop",timestamp:Date.now()});continue}a.push({role:"toolResult",toolCallId:s.tool_call_id??"",toolName:s.name??"unknown",content:[{type:"text",text:E(s.content)}],isError:!1,timestamp:Date.now()})}let u=o?.filter((s)=>!n||s.name===n).map((s)=>({name:s.name,description:s.description,parameters:s.parameters,constrainedSampling:s.constrainedSampling}));return{...i?{systemPrompt:i}:{},messages:a,...u?.length?{tools:u}:{}}}function B(e){let t=[];for(let o=0;o<e.length;o++){let r=e[o];if(r.role==="tool")continue;let n=r.role==="assistant"&&r.tool_calls?.length?r.tool_calls:void 0;if(!n){t.push(r);continue}let i=[],a=o+1;while(a<e.length&&e[a].role==="tool")i.push(e[a++]);let u=new Set(n.map((d)=>d.id)),s=i.filter((d)=>d.tool_call_id&&u.has(d.tool_call_id)),c=new Set(s.map((d)=>d.tool_call_id));if(u.size===n.length&&s.length===u.size&&c.size===u.size)t.push(r,...s);o=a-1}return t}function F(e){return e.some((t)=>t.role==="assistant"&&Boolean(t.tool_calls?.length)&&!t.reasoningContent?.trim())}function z(e,t){return{...e,...t.baseUrl?{baseUrl:q(e.api,t.baseUrl)}:{},...t.maxOutputTokens?{maxTokens:t.maxOutputTokens}:{}}}function S(e){let t=e.modelCatalog??_();return{models:t.models,model:z(t.getModel(e.provider,e.model),e)}}function V(e,t){let o=e.modelCatalog??_();return z(o.getModel(t.provider,t.model),e)}var Y=new WeakSet,me=["gousagelimiterror","freeusagelimiterror","monthly usage limit reached","available balance","insufficient_quota","out of budget","quota exceeded","billing"],pe=["prompt_too_long","prompt is too long","maximum context length","context length exceeded","context_length_exceeded","request too large"],fe=["econnreset","econnrefused","enotfound","eai_again","etimedout","fetch failed","network error","connection error","connection refused","connection lost","other side closed","socket hang up","socket connection was closed","upstream connect","reset before headers","websocket closed","websocket error","http2 request did not get a response"];function H(e){return(e instanceof Error?e.message:String(e)).toLowerCase()}function he(e){let t=H(e);return pe.some((o)=>t.includes(o))}function X(e){if(e!==null&&typeof e==="object")Y.add(e)}function Xe(e){return e!==null&&typeof e==="object"&&Y.has(e)}function ye(e){return e!==null&&typeof e==="object"&&"code"in e?e.code:void 0}function ge(e){if(e===null||typeof e!=="object")return;let t=e;for(let o of["status","statusCode"]){let r=t[o];if(typeof r==="number"&&Number.isInteger(r))return r}return}function be(e){let t=e.match(/^(?:error:\s*)?(\d{3})\b/),o=e.match(/\b(?:status(?:\s+code)?|http)[:\s]+(\d{3})\b/),r=Number(t?.[1]??o?.[1]);return Number.isInteger(r)?r:void 0}function T(e,t){let o=H(e),r=ye(e);if(r==="STREAM_IDLE_TIMEOUT"||e instanceof Error&&e.name==="AbortError"||o.includes("request aborted")||o==="aborted")return{retryable:!1};if(me.some((i)=>o.includes(i))||he(e))return{retryable:!1};if(t?.shouldRetry==="false")return{retryable:!1,statusCode:t.statusCode};let n=t?.statusCode??ge(e)??be(o);if(t?.shouldRetry==="true")return{retryable:!0,reason:n===429?"rate_limit":n===408||n===409?"timeout":"server_error",statusCode:n};if(n===429)return{retryable:!0,reason:"rate_limit",statusCode:n};if(n===408||n===409)return{retryable:!0,reason:"timeout",statusCode:n};if(n!==void 0&&n>=500&&n<=599)return{retryable:!0,reason:"server_error",statusCode:n};if(r==="PROVIDER_STREAM_CLOSED"||o.includes("stream closed before completion")||o.includes("ended without")||o.includes("stream ended before"))return{retryable:!0,reason:"stream_closed",statusCode:n};if(fe.some((i)=>o.includes(i)))return{retryable:!0,reason:"transport",statusCode:n};if(o.includes("timeout")||o.includes("timed out")||o.includes("temporarily unavailable")||o.includes("upstream_error")||o.includes("overloaded")||o.includes("rate limit")||o.includes("too many requests")||o.includes("service unavailable")||o.includes("server error")||o.includes("internal error")||o.includes("please retry")||o.includes("try your request again"))return{retryable:!0,reason:o.includes("rate")||o.includes("too many")?"rate_limit":o.includes("timeout")||o.includes("timed out")?"timeout":"server_error",statusCode:n};return{retryable:!1,statusCode:n}}function Ce(e,t){if(!e)return;if(e.retryAfterMs!==void 0){let n=Number.parseFloat(e.retryAfterMs);if(Number.isFinite(n))return Math.max(0,n)}if(e.retryAfter===void 0)return;let o=Number.parseFloat(e.retryAfter);if(Number.isFinite(o))return Math.max(0,o*1000);let r=Date.parse(e.retryAfter);return Number.isFinite(r)?Math.max(0,r-t):void 0}function G(e,t,o={}){let r=o.now??Date.now(),n=o.maxDelayMs??60000,i=Ce(t,r);if(i!==void 0)return Math.min(Math.ceil(i),n);let a=Math.max(0,e-1),u=Math.min(500*2**a,8000),s=Math.max(0,Math.min(1,o.random??Math.random())),c=u*(0.75+s*0.25);return Math.min(Math.round(c),n)}function J(e,t){let o=e.onPayload;e.onPayload=async(r,n)=>{let i=o?await o(r,n):r;return t(i===void 0?r:i,n)}}function Me(e){if(!e.reasoningEnabled)return;return e.reasoningEffort??e.reasoningLevel??"high"}function Re(e){switch(e){case"minimal":return"MINIMAL";case"low":return"LOW";case"medium":return"MEDIUM";default:return"HIGH"}}function xe(e,t,o,r){let n=r?void 0:Me(o);if(!n){if(t.api==="anthropic-messages")e.thinkingEnabled=!1;if(t.api==="google-generative-ai"||t.api==="google-vertex")e.thinking={enabled:!1};return}switch(t.api){case"anthropic-messages":e.thinkingEnabled=!0,e.effort=n;break;case"google-generative-ai":case"google-vertex":e.thinking={enabled:!0,level:Re(n)};break;case"mistral-conversations":e.reasoningEffort="high";break;case"bedrock-converse-stream":case"pi-messages":e.reasoning=n;break;default:e.reasoningEffort=n}}function ve(e,t,o){if(!o)return;switch(t){case"anthropic-messages":case"bedrock-converse-stream":e.toolChoice={type:"tool",name:o};break;case"openai-completions":case"mistral-conversations":case"pi-messages":e.toolChoice={type:"function",function:{name:o}};break;case"openai-responses":case"openai-codex-responses":case"azure-openai-responses":e.toolChoice={type:"function",name:o};break;case"google-generative-ai":case"google-vertex":e.toolChoice="any";break}}function Te(e,t,o){let r=o.serviceTier;if(!r)return;if(t.api==="openai-responses"||t.api==="openai-codex-responses"||t.api==="azure-openai-responses"){e.serviceTier=r;return}if(t.api!=="openai-completions"&&!(t.api==="anthropic-messages"&&r==="fast"))return;J(e,(n)=>{if(!n||typeof n!=="object"||Array.isArray(n))return n;return t.api==="anthropic-messages"?{...n,speed:"fast"}:{...n,service_tier:r}})}function ke(e,t,o){let r=o.responseVerbosity;if(!r)return;if(K(t,r),t.api==="openai-codex-responses"){e.textVerbosity=r;return}J(e,(n)=>{if(!n||typeof n!=="object"||Array.isArray(n))return n;if(t.api==="openai-completions")return{...n,verbosity:r};let i="text"in n&&n.text&&typeof n.text==="object"&&!Array.isArray(n.text)?n.text:{};return{...n,text:{...i,verbosity:r}}})}function Z(e,t,o,r,n=!1){let i={apiKey:e.apiKey,headers:e.customHeaders,signal:o,temperature:r?.temperature??e.temperature??0,maxTokens:r?.maxOutputTokens??e.maxOutputTokens,timeoutMs:e.timeout,maxRetries:0,cacheRetention:e.enablePromptCaching?"short":"none"};if(xe(i,t,e,n),ve(i,t.api,r?.toolChoice?.toolName),Te(i,t,e),ke(i,t,e),t.api==="azure-openai-responses")i.azureBaseUrl=e.baseUrl,i.azureApiVersion=e.apiVersion,i.azureDeploymentName=t.id;return i}function $(e,t){let o=t.get("x-should-retry");return{statusCode:e,...t.get("retry-after")!==null?{retryAfter:t.get("retry-after")??void 0}:{},...t.get("retry-after-ms")!==null?{retryAfterMs:t.get("retry-after-ms")??void 0}:{},...o==="true"||o==="false"?{shouldRetry:o}:{}}}var we=new Set(["anthropic-messages","openai-completions","openai-responses","openai-codex-responses","azure-openai-responses","pi-messages"]);function Q(e,t,o){let r=e.onResponse;if(e.onResponse=async(i,a)=>{let u=new Headers(i.headers);o($(i.status,u)),await r?.(i,a)},!we.has(t.api)||typeof globalThis.fetch!=="function")return;let n=typeof e.fetch==="function"?e.fetch:globalThis.fetch.bind(globalThis);e.fetch=async(i,a)=>{let u=await n(i,a);return o($(u.status,u.headers)),u}}function ee(e){return{promptTokens:e.input+e.cacheRead+e.cacheWrite,completionTokens:e.output,totalTokens:e.totalTokens,costUsd:e.cost.total,...e.reasoning!==void 0?{reasoningTokens:e.reasoning}:{},...e.cacheWrite>0?{cacheCreationInputTokens:e.cacheWrite}:{},...e.cacheRead>0?{cacheReadInputTokens:e.cacheRead}:{}}}var O=300000,Ae=30000;class te extends Error{timeoutMs;code="STREAM_IDLE_TIMEOUT";constructor(e){super(`Provider stream idle timeout after ${e}ms without an event`);this.timeoutMs=e;this.name="StreamIdleTimeoutError"}}class oe extends Error{code="PROVIDER_STREAM_CLOSED";constructor(){super("Provider stream closed before completion");this.name="ProviderStreamClosedError"}}function I(e){return e.reason instanceof Error?e.reason:new DOMException("Aborted","AbortError")}function Pe(e){return e.idleTimeoutMs&&e.idleTimeoutMs>0?e.idleTimeoutMs:O}function Ee(e,t){if(t===0)return;let o=t!==void 0&&t>0?t:Ae;return Math.max(1,Math.min(o,Math.floor(e/2)))}function _e(e,t,o){if(o?.aborted)return Promise.reject(I(o));return new Promise((r,n)=>{let i=!1,a=()=>{clearTimeout(d),o?.removeEventListener("abort",c)},u=(l)=>{if(i)return;i=!0,a(),r(l)},s=(l)=>{if(i)return;i=!0,a(),n(l instanceof Error?l:Error(String(l)))},c=()=>{if(o)s(I(o))},d=setTimeout(()=>u({kind:"timer"}),Math.max(0,t));if(o?.addEventListener("abort",c,{once:!0}),o?.aborted){c();return}e.then((l)=>u({kind:"next",result:l}),s)})}async function*Se(e,t,o){let r=Pe(t),n=Ee(r,t.stallWarningMs);if(t.signal?.aborted)throw I(t.signal);let i=Date.now(),a=Promise.resolve().then(()=>e.next()),u;for(;;){let c=await _e(a,(u?r:n??r)-(Date.now()-i),t.signal);if(c.kind==="next"){if(u)yield{...u,phase:"recovered",durationMs:Math.max(u.durationMs,Date.now()-i)};return c.result}if(!u&&n!==void 0){o.stallCount++,u={phase:"detected",stallCount:o.stallCount,durationMs:n,warningAfterMs:n,timeoutMs:r,outputStarted:o.outputStarted},yield u;continue}let d=new te(r);throw t.abort?.(d),d}}async function*ne(e,t,o,r,n={}){let a=e.stream(t,o,r)[Symbol.asyncIterator](),u=0,s=!1,c={stallCount:0,outputStarted:!1};try{while(!0){let d=Se(a,n,c),l=await d.next();while(!l.done)yield{providerStall:l.value},l=await d.next();let x=l.value;if(x.done)throw new oe;let f=x.value;switch(f.type){case"text_delta":c.outputStarted=!0,yield{content:f.delta};break;case"thinking_delta":c.outputStarted=!0,yield{reasoningContent:f.delta};break;case"toolcall_end":c.outputStarted=!0,yield{toolCalls:[{index:u++,id:f.toolCall.id,type:"function",function:{name:f.toolCall.name,arguments:JSON.stringify(f.toolCall.arguments)}}]};break;case"done":s=!0,yield{finishReason:f.reason,usage:ee(f.message.usage)};return;case"error":throw Error(f.error.errorMessage??`Request ${f.reason==="aborted"?"aborted":"failed"}`)}}}finally{if(!s)Promise.resolve(a.return?.()).catch(()=>{return})}}var re=R("Chat");function Ie(e){return Boolean(e&&e.role==="user"&&Array.isArray(e.content)&&e.content.some((t)=>t.type==="image_url"))}class D{config;models;model;constructor(e){let t=S(e);this.config={...e,maxContextTokens:t.model.contextWindow,maxOutputTokens:e.maxOutputTokens??t.model.maxTokens},this.models=t.models,this.model=t.model,re.debug("[PiAIChatService] Initialized",{provider:this.model.provider,model:this.model.id,api:this.model.api})}async chat(e,t,o,r){let n="",i="",a=[],u,s;for await(let c of this.streamChat(e,t,o,r)){n+=c.content??"",i+=c.reasoningContent??"";for(let d of c.toolCalls??[])if(d.id&&d.type==="function"&&d.function?.name)a.push(d);u=c.usage??u,s=c.finishReason??s}return{content:n,...i?{reasoningContent:i}:{},...a.length>0?{toolCalls:a}:{},usage:u,finishReason:s}}async*streamChat(e,t,o,r){let n=r?.toolChoice?.toolName;if(n&&!t?.some((m)=>m.name===n))throw Error(`Required tool is unavailable: ${n}`);let i=B(e);if(i.some((m)=>Ie(m))&&!this.model.input.includes("image"))throw Error(`${this.model.name} does not support image input`);let a=Boolean(n)||F(i),u=await j(i,this.model,t,o,n),s,c=(m)=>{s=void 0;let C=new AbortController,h=o?U(o,C.signal):C.signal,M=Z(this.config,m,h,r,a);return Q(M,m,(y)=>{s=y}),ne(this.models,m,u,M,{idleTimeoutMs:this.config.streamIdleTimeout??O,signal:h,abort:(y)=>C.abort(y)})},d=this.config.maxRetries??2,l=this,x=async function*(m,C){let h,M=!1,y,v;for(let g=0;g<=d;g++)try{let b=!1;for await(let p of c(m)){if(p.providerStall){yield p;continue}if(g>0&&y&&!b)b=!0,yield{providerRetry:{phase:"recovered",attempt:g,maxRetries:d,reason:y,...v!==void 0?{statusCode:v}:{}}};M=!0,C(),yield p}return}catch(b){h=b,l.logIdleTimeout(b,M,m),await l.handleAbort(o);let p=T(b,s);if(M)throw X(b),b;if(!p.retryable||!p.reason){if(g>0&&y)yield{providerRetry:{phase:"exhausted",attempt:g,maxRetries:d,reason:y,...v!==void 0?{statusCode:v}:{}}};throw b}if(y=p.reason,v=p.statusCode,g<d){let k=g+1,w=G(k,s);yield{providerRetry:{phase:"scheduled",attempt:k,maxRetries:d,reason:p.reason,...p.statusCode!==void 0?{statusCode:p.statusCode}:{},delayMs:w,nextRetryAt:Date.now()+w}},await P(w,o,{throwOnAbort:!0}),yield{providerRetry:{phase:"attempt",attempt:k,maxRetries:d,reason:p.reason,...p.statusCode!==void 0?{statusCode:p.statusCode}:{}}}}else yield{providerRetry:{phase:"exhausted",attempt:g,maxRetries:d,reason:p.reason,...p.statusCode!==void 0?{statusCode:p.statusCode}:{}}}}throw h},f,L=!1;try{for await(let m of x(this.model,()=>{L=!0}))yield m;return}catch(m){if(f=m,L||!T(m,s).retryable)throw m}for(let m of this.config.fallbackModels??[]){yield{modelFallback:!0};let C=!1;try{let h=V(this.config,m);for await(let M of x(h,()=>{C=!0}))yield M;return}catch(h){if(f=h,C||!T(h,s).retryable)throw h}}throw f}async handleAbort(e){if(e?.aborted)await P(0,e,{throwOnAbort:!0})}logIdleTimeout(e,t,o){if(e===null||typeof e!=="object"||!("code"in e)||e.code!=="STREAM_IDLE_TIMEOUT"||!("timeoutMs"in e)||typeof e.timeoutMs!=="number")return;re.warn("[PiAIChatService] Provider stream idle timeout",{provider:o.provider,model:o.id,timeoutMs:e.timeoutMs,replayBoundaryCrossed:t})}getConfig(){return{...this.config}}updateConfig(e){let t={...this.config,...e},o=S(t);this.config={...t,maxContextTokens:o.model.contextWindow,maxOutputTokens:t.maxOutputTokens??o.model.maxTokens},this.models=o.models,this.model=o.model}}var Oe=R("Service");async function mt(e){let t=e;if(t.provider){let o=N(t.provider);if(Object.keys(o).length>0)t={...t,customHeaders:{...o,...t.customHeaders}},Oe.debug(`Injected ${t.provider} specific headers:`,Object.keys(o))}return De(t)}function De(e){return new D(e)}
|
|
5
|
-
export{Ne as
|
|
5
|
+
export{Ne as md,je as nd,U as od,he as pd,Xe as qd,D as rd,mt as sd};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Jf as a}from"./chunk-698qsvyb.js";import"./chunk-h0q03x9f.js";import"./chunk-czjbz0fp.js";import"./chunk-c7zk9zj2.js";export{a as WorkspaceTrustService};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{spawn as b}from"node:child_process";var I=500;function X(j){return new Promise((q)=>setTimeout(q,j))}function Y(j){return j&&typeof j==="object"&&"code"in j?String(j.code):void 0}function x(j,q){return new Promise((y)=>{let z=["/PID",String(j),"/T"];if(q)z.push("/F");let B=b("taskkill",z,{stdio:"ignore",windowsHide:!0}),J=!1,K=(H)=>{if(J)return;J=!0,y(H)};B.once("error",()=>K(!1)),B.once("close",(H)=>K(H===0))})}async function N(j,q={}){if(!Number.isInteger(j)||j<=1||j===process.pid)return{success:!1,alreadyExited:!1,forced:!1};let y=q.platform??process.platform,z=q.gracePeriodMs??I,B=q.killProcess??process.kill.bind(process),J=q.taskkill??x,K=q.wait??X,H=q.validatePidOwnership??(()=>!0);if(!H())return{success:!1,alreadyExited:!1,forced:!1};if(y==="win32"){let Q=await J(j,!1);if(await K(z),!H())return{success:Q,alreadyExited:!1,forced:!1};let V=await J(j,!0);return{success:Q||V,alreadyExited:!Q&&!V,forced:V}}let W=(Q,V)=>{try{return B(Q,V)}catch(G){return Y(G)==="ESRCH"}},Z=W(-j,"SIGTERM")||W(j,"SIGTERM");if(await K(z),!H())return{success:Z,alreadyExited:!1,forced:!1};let $=W(-j,"SIGKILL")||W(j,"SIGKILL");return{success:Z||$,alreadyExited:!1,forced:$}}class D{child;state="owned";terminationPromise;terminationResult;platform;gracePeriodMs;killProcess;taskkill;wait;constructor(j,q={}){this.child=j;if(this.platform=q.platform??process.platform,this.gracePeriodMs=q.gracePeriodMs??I,this.killProcess=q.killProcess??process.kill.bind(process),this.taskkill=q.taskkill??x,this.wait=q.wait??X,q.releaseOnExit!==!1){let y=()=>{if(this.state==="owned")this.state="released"};j.once("close",y),j.once("error",y)}}release(){if(this.state==="owned")this.state="released"}terminate(){if(this.terminationPromise)return this.terminationPromise;if(this.terminationResult)return Promise.resolve(this.terminationResult);if(this.state==="released")return this.terminationResult={success:!0,alreadyExited:!0,forced:!1},Promise.resolve(this.terminationResult);return this.state="terminating",this.terminationPromise=this.terminateOwnedTree().then((j)=>{return this.state="released",this.terminationResult=j,j}),this.terminationPromise}async terminateOwnedTree(){let j=this.child.pid;if(!j)return{success:!1,alreadyExited:!0,forced:!1};if(this.platform==="win32"){let z=await this.taskkill(j,!1);await this.wait(this.gracePeriodMs);let B=await this.taskkill(j,!0);if(!z&&!B)return{success:this.signalDirectChild("SIGKILL"),alreadyExited:!1,forced:!0};return{success:!0,alreadyExited:!1,forced:!0}}let q=this.signalPosixTree(j,"SIGTERM");await this.wait(this.gracePeriodMs);let y=this.signalPosixTree(j,"SIGKILL");return{success:q||y,alreadyExited:!1,forced:y}}signalPosixTree(j,q){if(j<=1||j===process.pid)return this.signalDirectChild(q);try{return this.killProcess(-j,q)}catch(y){if(Y(y)==="ESRCH")return!0;return this.signalDirectChild(q)}}signalDirectChild(j){try{return this.child.kill(j)}catch(q){return Y(q)==="ESRCH"}}}function U(j,q,y={},z={}){let B=b(j,q,{...y,detached:process.platform==="win32"?y.detached:!0,windowsHide:y.windowsHide??!0});return{child:B,processTree:new D(B,z)}}
|
|
2
|
-
export{N as
|
|
2
|
+
export{N as ie,U as je};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e={name:"blade-code",version:"0.10.
|
|
2
|
-
export{i as
|
|
1
|
+
var e={name:"blade-code",version:"0.10.23",private:!1,description:"🗡️ Blade Code - 智能代码助手命令行工具",type:"module",bin:{blade:"dist/blade.js"},files:["dist","vendor/ripgrep/**","README.md"],scripts:{dev:"node scripts/run-bun.js --watch src/blade.tsx","dev:serve":"node scripts/run-bun.js --watch src/blade.tsx serve --port 4097",build:"rm -rf dist && node scripts/run-bun.js run scripts/build.ts",start:"node scripts/run-bun.js run dist/blade.js",test:"node scripts/test.js","test:all":"vitest run --config vitest.config.ts --project='!performance' && vitest run --config vitest.config.ts --project=performance","test:unit":"node scripts/test.js unit","test:integration":"node scripts/test.js integration","test:real-api":"node scripts/test.js realApi","test:real-api:qualification":"node scripts/test.js realApiQualification","test:cli":"node scripts/test.js cli","test:headless-core":"node scripts/test.js headlessCore","test:e2e":"node scripts/test.js e2e","test:performance":"node scripts/test.js performance","test:snapshot":"node scripts/test.js snapshot","test:security":"node scripts/test.js security","test:coverage":"node scripts/test.js all --coverage","test:watch":"vitest --watch --config vitest.config.ts","qualify:local":"node scripts/run-bun.js run scripts/qualify.ts local","qualify:production":"node scripts/run-bun.js run scripts/qualify.ts production","benchmark:repo":"node scripts/run-bun.js run scripts/run-real-repo-benchmark.ts","test:update-snapshots":"node scripts/test.js snapshot --update",lint:"biome lint src tests","lint:fix":"biome lint --write src tests","type-check":"tsc --noEmit","format:check":"biome format src tests",ready:"node scripts/run-bun.js run scripts/qualify.ts production","detect-unused":"node scripts/run-bun.js run scripts/detect-unused.ts",release:"node scripts/release.js","release:dry":"node scripts/release.js --dry-run","release:major":"node scripts/release.js --major","release:minor":"node scripts/release.js --minor","release:patch":"node scripts/release.js --patch"},keywords:["cli","blade","ai","assistant","agent","llm"],author:"echoVic",license:"MIT",engines:{node:">=22.19.0"},optionalDependencies:{"@vscode/ripgrep":"^1.18.0","better-sqlite3":"^11.8.1","bun-pty":"^0.4.8","node-pty":"1.1.0"},dependencies:{"@agentclientprotocol/sdk":"^1.3.0","@anthropic-ai/sandbox-runtime":"0.0.67","@earendil-works/pi-ai":"0.83.0","@inkjs/ui":"^2.0.0","@modelcontextprotocol/sdk":"^1.30.0",ahooks:"^3.9.7","ansi-escapes":"^7.3.0",ajv:"^8.17.1","async-mutex":"^0.5.0",axios:"^1.19.0",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.5.0","gray-matter":"^4.0.3",hono:"^4.13.0",ink:"npm:@jrichman/ink@6.4.10","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-select-input":"^6.2.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","js-tiktoken":"^1.0.21","lodash-es":"^4.18.1",lowlight:"^3.3.0","lru-cache":"^11.5.2",nanoid:"^5.1.6",open:"^10.1.2",picomatch:"^4.0.5",react:"19.2.4","react-dom":"19.2.4",semver:"^7.8.5","string-width":"^8.2.2",typebox:"1.3.10",undici:"^7.16.0","vscode-jsonrpc":"8.2.1","vscode-languageserver-protocol":"3.17.5","vscode-languageserver-types":"3.17.5","write-file-atomic":"^7.0.0",ws:"^8.21.2",yaml:"^2.9.0",yargs:"^18.1.0",zustand:"^5.0.14"},devDependencies:{"@biomejs/biome":"^2.5.7","@types/bun":"^1.3.14","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/node":"^22.15.24","@types/picomatch":"^4.0.3","@types/react":"19.2.10","@types/react-dom":"19.2.3","@types/semver":"^7.8.0","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.18.1","@types/yargs":"^17.0.35","@vitest/coverage-v8":"^4.1.10",jsdom:"^26.0.0",typescript:"^5.9.2",vitest:"^4.1.10"}};function i(){return{name:e.name,version:e.version,description:e.description}}function n(){return e.version}function o(){return e.name}function c(){return e.description}function a(){return`v${e.version}`}function d(){return`v${e.version} © 2025 Blade Code`}
|
|
2
|
+
export{i as Df,n as Ef,o as Ff,c as Gf,a as Hf,d as If};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{G as P}from"./chunk-
|
|
1
|
+
import{G as P}from"./chunk-46nbyp0r.js";import{Oa as K}from"./chunk-0affe05f.js";import{Ib as G,Jb as N,Kb as S,Lb as O,Mb as s,fc as B}from"./chunk-ak7v70sy.js";import{kc as j}from"./chunk-vypake1a.js";import{ld as q}from"./chunk-xjqcc0nt.js";import{Dd as v}from"./chunk-2j3d4ykq.js";import{Pf as z}from"./chunk-czjbz0fp.js";import R from"node:path";import{nanoid as cf}from"nanoid";import{execFile as I}from"node:child_process";import{createHash as p}from"node:crypto";import{lstat as o,readFile as ff,realpath as V}from"node:fs/promises";import A from"node:path";import{promisify as af}from"node:util";var tf=af(I),L=8388608,U=500,Y=200;async function y(n,a){try{return(await tf("git",["-c","core.pager=cat",...a],{cwd:n,encoding:"utf8",timeout:30000,maxBuffer:L+1024,env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",GIT_PAGER:"cat",GIT_OPTIONAL_LOCKS:"0"}})).stdout}catch(f){let t=f instanceof Error&&f.message.includes("maxBuffer")?`Review target exceeds the ${L} byte limit`:f instanceof Error?f.message:String(f);throw Error(`Git review target failed: ${t}`)}}function Q(n,a){let f=n?.trim();if(!f||f.length>Y||f.includes("\x00")||f.includes(`
|
|
2
2
|
`)||f.includes("\r"))throw Error(`${a} must contain 1-${Y} characters`);return f}function W(n){return n.split("\x00").filter(Boolean)}async function _(n,a){return(await y(n,["rev-parse","--verify",`${a}^{commit}`])).trim()}async function nf(n,a,f,t,g){let w=g,c=await V(n);for(let e of a){let $=A.resolve(c,e),l=A.relative(c,$);if(!l||l.startsWith("..")||A.isAbsolute(l))throw Error(`Untracked review path escapes the workspace: ${e}`);let i=await o($);if(!i.isFile()||i.isSymbolicLink())throw Error(`Untracked review target must be a regular file: ${e}`);if(w+=i.size,w>L)throw Error(`Review target exceeds ${L} bytes`);f.update("\x00untracked\x00"),f.update(l.replaceAll(A.sep,"/")),f.update("\x00");let b=await ff($);f.update(b);let m=Math.max(1,b.toString("utf8").split(`
|
|
3
3
|
`).length);t.set(l.replaceAll(A.sep,"/"),[{start:1,end:m}])}}function M(n,a){let f=new Map,t,g,w,c,e=!1,$=(l,i)=>{let b=f.get(l)??[],m=b.at(-1);if(m&&i<=m.end+1)m.end=Math.max(m.end,i);else b.push({start:i,end:i});f.set(l,b)};for(let l of n.split(`
|
|
4
4
|
`)){if(l.startsWith("--- ")){let i=l.slice(4).split("\t")[0]?.trim();t=i&&i!=="/dev/null"?i.replace(/^a\//,"").replaceAll("\\","/"):void 0;continue}if(l.startsWith("+++ ")){let i=l.slice(4).split("\t")[0]?.trim();e=i==="/dev/null",g=e?t:i?i.replace(/^b\//,"").replaceAll("\\","/"):void 0,w=void 0,c=void 0;continue}if(l.startsWith("@@ ")){let i=/-(\d+)(?:,\d+)? \+(\d+)(?:,\d+)?/.exec(l);w=i?Math.max(1,Number(i[1])):void 0,c=i?Math.max(1,Number(i[2])):void 0;continue}if(!g||w===void 0||c===void 0)continue;if(l.startsWith("+")&&!l.startsWith("+++"))$(g,c),c++;else if(l.startsWith("-")&&!l.startsWith("---"))$(g,e?w:c),w++;else if(!l.startsWith("\\"))w++,c++}for(let l of a)if(!f.has(l))f.set(l,[{start:1,end:1}]);return f}function D(n){if(n.length>U)throw Error(`Review target exceeds the ${U} file limit`)}class d{static async resolve(n,a){let f=await V(n);await y(f,["rev-parse","--is-inside-work-tree"]);let t=await _(f,"HEAD"),g=p("sha256");g.update(`kind\x00${a.kind}\x00head\x00${t}\x00`);let w="",c=[],e,$,l,i,b=new Map;switch(a.kind){case"uncommitted":{w=await y(f,["diff","--binary","--no-ext-diff","--relative","HEAD","--","."]);let m=W(await y(f,["diff","--name-only","-z","--relative","HEAD","--","."])),h=W(await y(f,["ls-files","--others","--exclude-standard","-z","--","."]));if(c=[...new Set([...m,...h])].sort(),D(c),c.length===0)throw Error("No uncommitted changes to review");g.update(w),b=M(w,m),await nf(f,h,g,b,Buffer.byteLength(w)),l="uncommitted changes",i=["Review the uncommitted working tree against HEAD.","Use git status --short, git diff --cached, and git diff, then inspect","every relevant untracked file listed by git status."].join(" ");break}case"base":{let m=Q(a.ref,"Base ref");e=await _(f,m);let h=(await y(f,["merge-base",e,t])).trim();if(w=await y(f,["diff","--binary","--no-ext-diff","--relative",`${h}..${t}`,"--","."]),c=W(await y(f,["diff","--name-only","-z","--relative",`${h}..${t}`,"--","."])),D(c),c.length===0)throw Error(`No changes between ${m} and HEAD`);g.update(w),g.update(`\x00merge-base\x00${h}`),b=M(w,c),l=`changes against ${m}`,i=`Review changes introduced by ${h}..${t}.`;break}case"commit":{let m=Q(a.ref,"Commit ref");if($=await _(f,m),w=await y(f,["show","--format=","--binary","--no-ext-diff","--relative",$,"--","."]),c=W(await y(f,["diff-tree","--root","--no-commit-id","--name-only","-r","-z",$,"--","."])),D(c),c.length===0)throw Error(`Commit has no changes in this workspace: ${m}`);g.update(w),g.update(`\x00commit\x00${$}`),b=M(w,c),l=`commit ${m}`,i=`Review only the changes introduced by commit ${$}.`;break}}if(Buffer.byteLength(w)>L)throw Error(`Review diff exceeds ${L} bytes`);return{info:{kind:a.kind,label:l,headSha:t,...e?{baseSha:e}:{},...$?{commitSha:$}:{},digest:g.digest("hex"),fileCount:c.length},instruction:i,changedLines:b}}}var wf=131072,X=50,E=new Set;function Z(n,a){return`${R.resolve(n)}\x00${a}`}function J(n){return`/review ${n.kind}${n.kind==="uncommitted"?"":` ${n.ref?.trim()??""}`}`}function C(n,a,f,t=!1){if(typeof n!=="string")throw Error(`${a} must be a string`);let g=n.trim();if(!t&&!g||g.length>f)throw Error(`${a} exceeds its allowed length`);return g}function lf(n,a,f){if(!n||typeof n!=="object"||Array.isArray(n))throw Error("Review finding must be an object");let t=n,g=typeof t.line==="number"&&Number.isInteger(t.line)?t.line:void 0,w=t.code_location??(typeof t.file==="string"&&g!==void 0?{path:t.file,line_start:g,line_end:g}:void 0);if(!w||typeof w!=="object"||Array.isArray(w))throw Error("Review finding has no code_location");let c=w,e=C(c.path,"Finding path",1000),$=R.posix.normalize(e.replaceAll("\\","/"));if(R.posix.isAbsolute($)||$===".."||$.startsWith("../"))throw Error("Review finding path must be workspace-relative");let l=R.resolve(a,$),i=R.relative(R.resolve(a),l);if(i.startsWith("..")||R.isAbsolute(i))throw Error("Review finding path escapes the workspace");let b=typeof t.severity==="string"?t.severity.toLowerCase():"",m=b==="critical"?0:b==="high"?1:b==="medium"?2:b==="low"?3:void 0,h=t.priority??m;if(h!==0&&h!==1&&h!==2&&h!==3)throw Error("Review finding priority must be 0-3");let x=t.confidence_score??t.confidence??0.8;if(typeof x!=="number"||!Number.isFinite(x)||x<0||x>1)throw Error("Review finding confidence_score must be between 0 and 1");let{line_start:r,line_end:u}=c;if(!Number.isInteger(r)||!Number.isInteger(u)||r<1||u<r||u-r>=10)throw Error("Review finding line range is invalid");let F=f.changedLines.get($);if(!F)throw Error("Review finding path is outside the review target");if(!F.some((T)=>r<=T.end&&u>=T.start))throw Error("Review finding line range does not overlap the changed lines");let k=C(t.title??`[P${h}] ${String(t.type??"Review finding").replaceAll("-"," ").replace(/\b\w/g,(T)=>T.toUpperCase())}`,"Finding title",120);if(!k.startsWith(`[P${h}] `))throw Error("Review finding title priority does not match priority");return{title:k,body:C(t.body??t.description,"Finding body",4000),priority:h,confidenceScore:x,codeLocation:{path:$,lineStart:r,lineEnd:u}}}function mf(n,a,f){if(Buffer.byteLength(n)>wf)throw Error("Review output exceeds the 128 KiB limit");let t=n.indexOf("{"),g=n.lastIndexOf("}");if(t<0||g<=t)throw Error("Reviewer did not return a JSON object");let w;try{w=JSON.parse(n.slice(t,g+1))}catch{throw Error("Reviewer returned invalid JSON")}if(!w||typeof w!=="object"||Array.isArray(w))throw Error("Reviewer output must be an object");let c=w;if(!Array.isArray(c.findings))throw Error("Reviewer output must contain findings");if(c.findings.length>X)throw Error(`Reviewer returned more than ${X} findings`);return{overallExplanation:C(c.overall_explanation??c.summary,"Review explanation",1e4,!0),findings:c.findings.map((e)=>lf(e,a,f))}}async function H(n,a){return new j(z(n,a)).readAll()}class gf{static async start(n){let{sessionId:a,projectPath:f,runtime:t,request:g,onEvent:w}=n;if(t.sessionId!==a||R.resolve(t.workspaceRoot)!==R.resolve(f))throw Error("Review runtime does not own the requested Session");if(t.hasTurnOwner())throw Error("Cannot start a review during an active turn");await B.assertSessionWritable(a,f);let c=Z(f,a);if(E.has(c))throw Error("Session already has an active review");let e=await H(f,a);if(N(e))throw Error("Session has an interrupted review that must be recovered");let $=g.instructions?.trim();if($&&$.length>4000)throw Error("Review instructions exceed 4,000 characters");let l=await d.resolve(f,g),i=cf(16),b=q("review"),m=new Date().toISOString(),h={reviewId:i,reviewerSessionId:b,target:l.info,startedAt:m},x=new K(f);await x.saveReviewStart(a,h),await x.saveMessage(a,"user",J(g),null,{codeReview:{reviewId:i,phase:"started",targetKind:l.info.kind,targetDigest:l.info.digest}}),await B.updateSessionMetadata(a,f,{taskStatus:"running",taskStatusReason:`Reviewing ${l.info.label}`,taskPromptSummary:J(g),taskStartedAt:m,taskCompletedAt:null,taskFailure:null}),E.add(c);let r=this.execute({...n,target:l,reviewId:i,reviewerSessionId:b,instructions:$,store:x,onEvent:w}).finally(()=>{E.delete(c)});return{reviewId:i,completion:r}}static async execute(n){let{sessionId:a,projectPath:f,runtime:t,request:g,signal:w,onEvent:c,target:e,reviewId:$,reviewerSessionId:l,instructions:i,store:b}=n,m;try{let x=[e.instruction,"Bash already starts in the review workspace. Never prefix a command with cd.",`Authoritative target digest: ${e.info.digest}`,`Changed file count: ${e.info.fileCount}`,i?`Additional review instructions:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{sd as a}from"./chunk-rxfmqnf7.js";import"./chunk-djh79rde.js";import"./chunk-8472vz3s.js";import"./chunk-f9tahtz6.js";import"./chunk-czjbz0fp.js";import"./chunk-c7zk9zj2.js";export{a as createChatServiceAsync};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-
|
|
1
|
+
import"./chunk-c7zk9zj2.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{ne as n}from"./chunk-djh79rde.js";import{Lf as l,Nf as C,Pf as N,Tf as L,Uf as o}from"./chunk-czjbz0fp.js";import{Vf as f}from"./chunk-c7zk9zj2.js";import{stat as i}from"node:fs/promises";import B from"node:path";import*as U from"node:path";var a=50,s=100,t=/^[A-Za-z0-9_-]+$/,e=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/;function __(_){return typeof _==="string"&&e.test(_)&&Number.isFinite(Date.parse(_))}function p(_){return typeof _==="string"&&U.isAbsolute(_)}function E_(_){return Buffer.from(JSON.stringify(_),"utf8").toString("base64url")}function R_(_){try{if(!t.test(_))throw Error("invalid");let E=Buffer.from(_,"base64url").toString("utf8");if(Buffer.from(E,"utf8").toString("base64url")!==_)throw Error("invalid");let R=JSON.parse(E);if(R.version!==1||typeof R.includeSubagents!=="boolean"||R.archived!==void 0&&typeof R.archived!=="boolean"||!(R.cwd===null||p(R.cwd))||!__(R.lastMessageTime)||!p(R.projectPath)||!C(R.sessionId))throw Error("invalid");return{version:1,cwd:R.cwd===null?null:U.resolve(R.cwd),includeSubagents:R.includeSubagents,archived:R.archived??!1,lastMessageTime:R.lastMessageTime,projectPath:U.resolve(R.projectPath),sessionId:R.sessionId}}catch{throw Error("Invalid session cursor")}}function q(_){let E="";for(let R=0;R<_.length;R+=1)E+=_.charCodeAt(R).toString(16).padStart(4,"0");return E}function W_(_){if(!_.cursor)return;let E=R_(_.cursor);if(E.cwd!==_.cwd||E.includeSubagents!==_.includeSubagents||(E.archived??!1)!==_.archived)throw Error("Session cursor scope does not match this query");return E}function w_(_={}){let{cwd:E,cursor:R,limit:W,includeSubagents:$=!1,archived:H=!1}=_;if(E!==void 0&&!U.isAbsolute(E))throw Error("Session catalog cwd must be absolute");let k=W===void 0?a:W;if(!Number.isInteger(k)||k<1||k>s)throw Error("Session catalog limit must be an integer from 1 to 100");return{cwd:E===void 0?null:U.resolve(E),cursor:R??void 0,limit:k,includeSubagents:$,archived:H}}function $_(_,E){if(_.lastMessageTime>E.lastMessageTime)return-1;if(_.lastMessageTime<E.lastMessageTime)return 1;if(_.projectPath<E.projectPath)return-1;if(_.projectPath>E.projectPath)return 1;if(_.sessionId<E.sessionId)return-1;if(_.sessionId>E.sessionId)return 1;return 0}function x_(_,E){let R=[..._],W=W_(E);if(W)R=R.filter((k)=>$_(k,{sessionId:W.sessionId,projectPath:W.projectPath,lastMessageTime:W.lastMessageTime})>0);let $=R.slice(0,E.limit);if($.length===0||R.length<=$.length)return{sessions:$};let H=$[$.length-1];return{sessions:$,nextCursor:E_({version:1,cwd:E.cwd,includeSubagents:E.includeSubagents,archived:E.archived,lastMessageTime:H.lastMessageTime,projectPath:H.projectPath,sessionId:H.sessionId})}}function k_(_){return _.type==="message_created"||_.type==="part_created"||_.type==="part_updated"||_.type==="turn_started"||_.type==="turn_completed"||_.type==="turn_aborted"||_.type==="interaction_requested"||_.type==="interaction_responded"||_.type==="interaction_recovered"||_.type==="review_started"||_.type==="review_completed"}function J(_){return _.type==="message_created"&&_.data.role==="user"&&(_.data.inboxMessageId!==void 0||_.data.parentMessageId===void 0)}function u(_,E){let R=_.find((W)=>J(W)&&W.data.messageId===E);if(!R)throw Error(`Rewind checkpoint not found: ${E}`);return{messageId:E,preview:P(_,E),createdAt:R.data.createdAt}}function P(_,E){let R=_.flatMap((W)=>{if(W.type!=="part_created"||W.data.messageId!==E)return[];if(W.data.partType==="text"){let $=W.data.payload;return typeof $.text==="string"?[$.text]:[]}if(W.data.partType==="image")return["[Image]"];return[]}).join("").trim();if(R.length<=160)return R;return`${R.slice(0,160)}...`}function c(_,E){u(_,E);let R=_.findIndex((k)=>k.type==="message_created"&&k.data.messageId===E),W=_[R],$=W?.type==="message_created"?W.data.inboxMessageId:void 0,H=new Set(_.flatMap((k)=>k.type==="turn_started"&&$&&k.data.inputMessageIds?.includes($)?[k.data.turnId]:[]));return _.filter((k,M)=>{if((k.type==="turn_started"||k.type==="turn_completed"||k.type==="turn_aborted")&&H.has(k.data.turnId))return!1;return M<R||!k_(k)})}function z(_){let E=[];for(let R of _){if(R.type!=="session_rewound"){E.push(R);continue}if(u(E,R.data.targetMessageId),R.data.mode!=="code")E=c(E,R.data.targetMessageId)}return E}function I_(_){let E=z(_);return E.filter(J).map((R)=>({messageId:R.data.messageId,preview:P(E,R.data.messageId),createdAt:R.data.createdAt})).reverse()}function q_(_,E){let R=z(_),W=u(R,E),$=R.findIndex((k)=>k.type==="message_created"&&k.data.messageId===E),H=R.slice($);return{checkpoint:W,projectedEntries:c(R,E),removedTurns:H.filter(J).length,snapshotMessageIds:H.flatMap((k)=>k.type==="part_created"&&k.data.partType==="tool_call"?[k.data.partId]:[])}}import*as x from"node:fs";import{createReadStream as H_}from"node:fs";import*as X from"node:fs/promises";import*as y from"node:path";import{createInterface as M_}from"node:readline";var S=65536;function Q_(_,E,R){let W=_.trim();if(!W)return;try{return JSON.parse(W)}catch($){throw Error(`Invalid session JSONL in ${R} at line ${E}`,{cause:$})}}function w(_,E="session transcript"){let R=_.split(`
|
|
2
2
|
`),W=!_.endsWith(`
|
|
3
3
|
`),$=[];for(let[H,k]of R.entries())try{let M=Q_(k,H+1,E);if(M){if(typeof M.seq!=="number")M.seq=$.length+1;$.push(M)}}catch(M){if(W&&H===R.length-1)break;throw M}return $}class Y{static appendQueues=new Map;filePath;constructor(_){this.filePath=_}static maxSeq(_){let E=0;for(let R of _)if(typeof R.seq==="number"&&R.seq>E)E=R.seq;return E}static stampSeqFrom(_,E){let R=E;return _.map((W)=>{if(typeof W.seq==="number"){if(W.seq>R)R=W.seq;return W}return R+=1,{...W,seq:R}})}static stampSeq(_,E){return Y.stampSeqFrom(_,Y.maxSeq(E))}async append(_){try{let[E]=await this.appendEntries([_]);return E}catch(E){throw console.error(`[JSONLStore] 追加写入失败: ${this.filePath}`,E),E}}async appendBatch(_){try{return await this.appendEntries(_)}catch(E){throw console.error(`[JSONLStore] 批量追加写入失败: ${this.filePath}`,E),E}}async appendEntries(_){if(_.length===0)return[];return this.enqueue(async()=>{await X.mkdir(y.dirname(this.filePath),{recursive:!0,mode:493});let E=await X.open(this.filePath,"a+",384);try{let R=await this.repairIncompleteTail(E),W=await this.readTailSeq(E),$=Y.stampSeqFrom(_,W),H=`${$.map((k)=>JSON.stringify(k)).join(`
|
|
4
4
|
`)}
|
|
@@ -113,4 +113,4 @@ CREATE VIRTUAL TABLE IF NOT EXISTS parts_fts USING fts5(
|
|
|
113
113
|
ORDER BY timestamp DESC LIMIT ?`:`SELECT session_id, role, timestamp, text FROM parts_fts
|
|
114
114
|
WHERE parts_fts MATCH ?
|
|
115
115
|
ORDER BY timestamp DESC LIMIT ?`,M=_.prepare(k);return R?M.all(H,R,W):M.all(H,W)}
|
|
116
|
-
export{z as
|
|
116
|
+
export{z as gc,I_ as hc,q_ as ic,w as jc,Y as kc,q as lc,W_ as mc,w_ as nc,$_ as oc,x_ as pc,d as qc,Z_ as rc,K_ as sc,D_ as tc,B_ as uc,o_ as vc,n_ as wc,i_ as xc};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{je as F}from"./chunk-77z6x1zb.js";import{nf as G}from"./chunk-dbb20rxh.js";import{promises as $}from"node:fs";import b from"node:os";import W from"node:path";import{Mutex as j}from"async-mutex";import{merge as N}from"lodash-es";import A from"write-file-atomic";var B=F("Service"),Z={models:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},modelProviders:{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},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},communicationStyle:{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},enabledPlugins:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},pluginSourcePolicy:{target:"settings",defaultScope:"global",mergeStrategy:"replace",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},maxConcurrentTasks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},maxQueuedTasks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},mcpServers:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},lspServers:{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}},S=new Set(Object.entries(Z).filter(([q,z])=>z.persistable).map(([q])=>q)),m=new Set(Object.entries(Z).filter(([q,z])=>!z.persistable).map(([q])=>q));class V{static instance=null;pendingUpdates=new Map;timers=new Map;fileLocks=new Map;lastSaveError=null;debounceDelay=300;constructor(){}static getInstance(){if(!V.instance)V.instance=new V;return V.instance}static resetInstance(){if(V.instance)for(let q of V.instance.timers.values())clearTimeout(q);V.instance=null}async save(q,z={}){this.validatePersistableFields(q);let H=this.groupUpdatesByTarget(q,z.scope,z.projectDir);if(z.immediate)await Promise.all(Array.from(H.entries()).map(([J,K])=>this.flushTarget(J,K)));else for(let[J,K]of H)this.scheduleSave(J,K)}async flush(){for(let z of this.timers.values())clearTimeout(z);this.timers.clear();let q=Array.from(this.pendingUpdates.entries()).map(([z,H])=>this.flushTarget(z,H));this.pendingUpdates.clear(),await Promise.all(q)}getLastSaveError(){return this.lastSaveError}clearLastSaveError(){this.lastSaveError=null}async appendPermissionRule(q,z={}){await this.appendPermissionRuleForDecision(q,"allow",z)}async appendPermissionDenyRule(q,z={}){await this.appendPermissionRuleForDecision(q,"deny",z)}async appendPermissionRuleForDecision(q,z,H){let J=H.scope??"local",K=this.resolveFilePath("settings",J,H.projectDir);await this.flushTargetWithModifier(K,(M)=>{let Q=M.permissions??{allow:[],ask:[],deny:[]},X={allow:z==="allow"?this.dedupeArray([...Q.allow||[],q]):Q.allow||[],ask:Q.ask||[],deny:z==="deny"?this.dedupeArray([...Q.deny||[],q]):Q.deny||[]};return{...M,permissions:X}})}async appendLocalPermissionRule(q,z={}){await this.appendPermissionRule(q,{...z,scope:"local"})}async appendLocalPermissionDenyRule(q,z={}){await this.appendPermissionDenyRule(q,{...z,scope:"local"})}async removePluginSetting(q,z={}){let H=z.scope??"local",J=this.resolveFilePath("settings",H,z.projectDir);await this.flushTargetWithModifier(J,(K)=>{let M={...K.enabledPlugins??{}};delete M[q];let Q={...K};if(Object.keys(M).length>0)Q.enabledPlugins=M;else delete Q.enabledPlugins;return Q})}validatePersistableFields(q){for(let z of Object.keys(q)){let H=Z[z];if(!H)throw Error(`Unknown config field: ${z}`);if(!H.persistable)throw Error(`Field "${z}" is non-persistable and cannot be saved to config files. Non-persistable fields are runtime-only and only valid for the current session.`)}}groupUpdatesByTarget(q,z,H){let J=new Map;for(let[K,M]of Object.entries(q)){let Q=Z[K];if(!Q)continue;let X=z??Q.defaultScope,Y=this.resolveFilePath(Q.target,X,H);if(!J.has(Y))J.set(Y,{});J.get(Y)[K]=M}return J}resolveFilePath(q,z,H){let J=H??G();if(q==="config")return z==="global"?W.join(b.homedir(),".blade","config.json"):W.join(J,".blade","config.json");switch(z){case"local":return W.join(J,".blade","settings.local.json");case"project":return W.join(J,".blade","settings.json");case"global":return W.join(b.homedir(),".blade","settings.json");default:return W.join(J,".blade","settings.local.json")}}scheduleSave(q,z){let H=this.pendingUpdates.get(q)??{},J=this.mergePendingUpdates(H,z);this.pendingUpdates.set(q,J);let K=this.timers.get(q);if(K)clearTimeout(K);let M=setTimeout(async()=>{let Q=this.pendingUpdates.get(q);if(Q){this.pendingUpdates.delete(q),this.timers.delete(q);try{await this.flushTarget(q,Q),this.lastSaveError=null}catch(X){let Y=X instanceof Error?X:Error(String(X));this.lastSaveError=Y,B.error(`Failed to save config to ${q}:`,Y.message),B.error("Stack trace:",Y.stack)}}},this.debounceDelay);this.timers.set(q,M)}mergePendingUpdates(q,z){let H={...q};for(let[J,K]of Object.entries(z)){let M=Z[J];if(!M){H[J]=K;continue}switch(M.mergeStrategy){case"replace":H[J]=K;break;case"append-dedupe":this.applyAppendDedupe(H,J,K);break;case"deep-merge":this.applyDeepMerge(H,J,K);break}}return H}async flushTarget(q,z){let H=this.fileLocks.get(q);if(!H)H=new j,this.fileLocks.set(q,H);await H.runExclusive(async()=>{await this.performWrite(q,z)})}async flushTargetWithModifier(q,z){let H=this.fileLocks.get(q);if(!H)H=new j,this.fileLocks.set(q,H);await H.runExclusive(async()=>{await $.mkdir(W.dirname(q),{recursive:!0,mode:493});let J={};try{let M=await $.readFile(q,"utf-8");J=JSON.parse(M)}catch{J={}}let K=z(J);await this.atomicWrite(q,K)})}async performWrite(q,z){await $.mkdir(W.dirname(q),{recursive:!0,mode:493});let H={};try{let K=await $.readFile(q,"utf-8");H=JSON.parse(K)}catch{H={}}let J={...H};for(let[K,M]of Object.entries(z)){let Q=Z[K];if(!Q){J[K]=M;continue}switch(Q.mergeStrategy){case"replace":J[K]=M;break;case"append-dedupe":this.applyAppendDedupe(J,K,M);break;case"deep-merge":this.applyDeepMerge(J,K,M);break}}await this.atomicWrite(q,J)}applyAppendDedupe(q,z,H){if(z==="permissions"&&typeof H==="object"&&H!==null){let J=q[z]??{allow:[],ask:[],deny:[]},K=H;q[z]={allow:this.dedupeArray([...J.allow||[],...K.allow||[]]),ask:this.dedupeArray([...J.ask||[],...K.ask||[]]),deny:this.dedupeArray([...J.deny||[],...K.deny||[]])}}else if(Array.isArray(H)){let J=Array.isArray(q[z])?q[z]:[];q[z]=this.dedupeArray([...J,...H])}else q[z]=H}applyDeepMerge(q,z,H){if(typeof H==="object"&&H!==null&&!Array.isArray(H)){let J=typeof q[z]==="object"&&q[z]!==null?q[z]:{};q[z]=N({},J,H)}else q[z]=H}dedupeArray(q){return Array.from(new Set(q))}async atomicWrite(q,z){await A(q,JSON.stringify(z,null,2),{mode:384,encoding:"utf-8"})}}function O(){return V.getInstance()}export{O as gd};
|
|
1
|
+
import{ne as F}from"./chunk-djh79rde.js";import{rf as G}from"./chunk-kvd5nexw.js";import{promises as $}from"node:fs";import b from"node:os";import W from"node:path";import{Mutex as j}from"async-mutex";import{merge as N}from"lodash-es";import A from"write-file-atomic";var B=F("Service"),Z={models:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},modelProviders:{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},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},communicationStyle:{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},enabledPlugins:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},pluginSourcePolicy:{target:"settings",defaultScope:"global",mergeStrategy:"replace",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},maxConcurrentTasks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},maxQueuedTasks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},mcpServers:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},lspServers:{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}},S=new Set(Object.entries(Z).filter(([q,z])=>z.persistable).map(([q])=>q)),m=new Set(Object.entries(Z).filter(([q,z])=>!z.persistable).map(([q])=>q));class V{static instance=null;pendingUpdates=new Map;timers=new Map;fileLocks=new Map;lastSaveError=null;debounceDelay=300;constructor(){}static getInstance(){if(!V.instance)V.instance=new V;return V.instance}static resetInstance(){if(V.instance)for(let q of V.instance.timers.values())clearTimeout(q);V.instance=null}async save(q,z={}){this.validatePersistableFields(q);let H=this.groupUpdatesByTarget(q,z.scope,z.projectDir);if(z.immediate)await Promise.all(Array.from(H.entries()).map(([J,K])=>this.flushTarget(J,K)));else for(let[J,K]of H)this.scheduleSave(J,K)}async flush(){for(let z of this.timers.values())clearTimeout(z);this.timers.clear();let q=Array.from(this.pendingUpdates.entries()).map(([z,H])=>this.flushTarget(z,H));this.pendingUpdates.clear(),await Promise.all(q)}getLastSaveError(){return this.lastSaveError}clearLastSaveError(){this.lastSaveError=null}async appendPermissionRule(q,z={}){await this.appendPermissionRuleForDecision(q,"allow",z)}async appendPermissionDenyRule(q,z={}){await this.appendPermissionRuleForDecision(q,"deny",z)}async appendPermissionRuleForDecision(q,z,H){let J=H.scope??"local",K=this.resolveFilePath("settings",J,H.projectDir);await this.flushTargetWithModifier(K,(M)=>{let Q=M.permissions??{allow:[],ask:[],deny:[]},X={allow:z==="allow"?this.dedupeArray([...Q.allow||[],q]):Q.allow||[],ask:Q.ask||[],deny:z==="deny"?this.dedupeArray([...Q.deny||[],q]):Q.deny||[]};return{...M,permissions:X}})}async appendLocalPermissionRule(q,z={}){await this.appendPermissionRule(q,{...z,scope:"local"})}async appendLocalPermissionDenyRule(q,z={}){await this.appendPermissionDenyRule(q,{...z,scope:"local"})}async removePluginSetting(q,z={}){let H=z.scope??"local",J=this.resolveFilePath("settings",H,z.projectDir);await this.flushTargetWithModifier(J,(K)=>{let M={...K.enabledPlugins??{}};delete M[q];let Q={...K};if(Object.keys(M).length>0)Q.enabledPlugins=M;else delete Q.enabledPlugins;return Q})}validatePersistableFields(q){for(let z of Object.keys(q)){let H=Z[z];if(!H)throw Error(`Unknown config field: ${z}`);if(!H.persistable)throw Error(`Field "${z}" is non-persistable and cannot be saved to config files. Non-persistable fields are runtime-only and only valid for the current session.`)}}groupUpdatesByTarget(q,z,H){let J=new Map;for(let[K,M]of Object.entries(q)){let Q=Z[K];if(!Q)continue;let X=z??Q.defaultScope,Y=this.resolveFilePath(Q.target,X,H);if(!J.has(Y))J.set(Y,{});J.get(Y)[K]=M}return J}resolveFilePath(q,z,H){let J=H??G();if(q==="config")return z==="global"?W.join(b.homedir(),".blade","config.json"):W.join(J,".blade","config.json");switch(z){case"local":return W.join(J,".blade","settings.local.json");case"project":return W.join(J,".blade","settings.json");case"global":return W.join(b.homedir(),".blade","settings.json");default:return W.join(J,".blade","settings.local.json")}}scheduleSave(q,z){let H=this.pendingUpdates.get(q)??{},J=this.mergePendingUpdates(H,z);this.pendingUpdates.set(q,J);let K=this.timers.get(q);if(K)clearTimeout(K);let M=setTimeout(async()=>{let Q=this.pendingUpdates.get(q);if(Q){this.pendingUpdates.delete(q),this.timers.delete(q);try{await this.flushTarget(q,Q),this.lastSaveError=null}catch(X){let Y=X instanceof Error?X:Error(String(X));this.lastSaveError=Y,B.error(`Failed to save config to ${q}:`,Y.message),B.error("Stack trace:",Y.stack)}}},this.debounceDelay);this.timers.set(q,M)}mergePendingUpdates(q,z){let H={...q};for(let[J,K]of Object.entries(z)){let M=Z[J];if(!M){H[J]=K;continue}switch(M.mergeStrategy){case"replace":H[J]=K;break;case"append-dedupe":this.applyAppendDedupe(H,J,K);break;case"deep-merge":this.applyDeepMerge(H,J,K);break}}return H}async flushTarget(q,z){let H=this.fileLocks.get(q);if(!H)H=new j,this.fileLocks.set(q,H);await H.runExclusive(async()=>{await this.performWrite(q,z)})}async flushTargetWithModifier(q,z){let H=this.fileLocks.get(q);if(!H)H=new j,this.fileLocks.set(q,H);await H.runExclusive(async()=>{await $.mkdir(W.dirname(q),{recursive:!0,mode:493});let J={};try{let M=await $.readFile(q,"utf-8");J=JSON.parse(M)}catch{J={}}let K=z(J);await this.atomicWrite(q,K)})}async performWrite(q,z){await $.mkdir(W.dirname(q),{recursive:!0,mode:493});let H={};try{let K=await $.readFile(q,"utf-8");H=JSON.parse(K)}catch{H={}}let J={...H};for(let[K,M]of Object.entries(z)){let Q=Z[K];if(!Q){J[K]=M;continue}switch(Q.mergeStrategy){case"replace":J[K]=M;break;case"append-dedupe":this.applyAppendDedupe(J,K,M);break;case"deep-merge":this.applyDeepMerge(J,K,M);break}}await this.atomicWrite(q,J)}applyAppendDedupe(q,z,H){if(z==="permissions"&&typeof H==="object"&&H!==null){let J=q[z]??{allow:[],ask:[],deny:[]},K=H;q[z]={allow:this.dedupeArray([...J.allow||[],...K.allow||[]]),ask:this.dedupeArray([...J.ask||[],...K.ask||[]]),deny:this.dedupeArray([...J.deny||[],...K.deny||[]])}}else if(Array.isArray(H)){let J=Array.isArray(q[z])?q[z]:[];q[z]=this.dedupeArray([...J,...H])}else q[z]=H}applyDeepMerge(q,z,H){if(typeof H==="object"&&H!==null&&!Array.isArray(H)){let J=typeof q[z]==="object"&&q[z]!==null?q[z]:{};q[z]=N({},J,H)}else q[z]=H}dedupeArray(q){return Array.from(new Set(q))}async atomicWrite(q,z){await A(q,JSON.stringify(z,null,2),{mode:384,encoding:"utf-8"})}}function O(){return V.getInstance()}export{O as kd};
|