opencode-navigator 0.23.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/HOST_API.md +24 -5
- package/PROVIDERS.md +2 -2
- package/README.md +66 -3
- package/dist/chunk-fd7394y1.js +17 -0
- package/dist/chunk-pwa1wzer.js +22 -0
- package/dist/navigator-updates.js +63 -25
- package/dist/provider-limits.js +14 -7
- package/dist/runtime-dependencies.json +5 -5
- package/dist/server.js +2 -2
- package/dist/sidebar-settings.js +1051 -308
- package/dist/toolbar-settings.js +143 -34
- package/dist/tui.js +481 -370
- package/dist/upgrade-notes.js +87 -0
- package/package.json +14 -14
package/dist/tui.js
CHANGED
|
@@ -3,7 +3,7 @@ import {insert as _$insert,setProp as _$setProp,createElement as _$createElement
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
import {createSignal as createSignal2,createSignal,createEffect,onCleanup,createContext,useContext,createContext as createContext2,createSignal as createSignal3,onCleanup as onCleanup2,useContext as useContext2,createEffect as createEffect2,splitProps,untrack,splitProps as splitProps2,For,createEffect as createEffect3,onCleanup as onCleanup3,createEffect as createEffect4,Show,splitProps as splitProps3,Suspense,lazy,createSignal as
|
|
6
|
+
import {createSignal as createSignal2,createSignal,createEffect,onCleanup,createContext,useContext,createContext as createContext2,createSignal as createSignal3,onCleanup as onCleanup2,useContext as useContext2,createEffect as createEffect2,splitProps,untrack,splitProps as splitProps2,For,createEffect as createEffect3,onCleanup as onCleanup3,Show,createEffect as createEffect4,Show as Show2,splitProps as splitProps3,createEffect as createEffect5,createSignal as createSignal4,onCleanup as onCleanup4,onMount,Suspense,lazy,createSignal as createSignal5,createSignal as createSignal6,onCleanup as onCleanup5,Show as Show3,batch,createSignal as createSignal8,createSignal as createSignal7,createEffect as createEffect6,createSignal as createSignal9,onCleanup as onCleanup6,createSignal as createSignal10,createSignal as createSignal11,Suspense as Suspense2,lazy as lazy2,Index,onCleanup as onCleanup7,createSignal as createSignal12,onCleanup as onCleanup8,createEffect as createEffect8,onCleanup as onCleanup10,batch as batch2,createEffect as createEffect7,createMemo,createSignal as createSignal13,onCleanup as onCleanup9,onMount as onMount2,For as For2,For as For3,Show as Show4,createMemo as createMemo2,Show as Show5,createSignal as createSignal14,onCleanup as onCleanup11,For as For4,For as For5,For as For8,createMemo as createMemo4,onMount as onMount4,For as For7,createMemo as createMemo3,onMount as onMount3,Show as Show7,createEffect as createEffect9,createSignal as createSignal15,onCleanup as onCleanup12,Show as Show6,For as For6,For as For9,createEffect as createEffect10,createMemo as createMemo5,onCleanup as onCleanup13,createEffect as createEffect11,createMemo as createMemo6,untrack as untrack2,Suspense as Suspense3,lazy as lazy3,onCleanup as onCleanup14,createEffect as createEffect12,onCleanup as onCleanup15,createSignal as createSignal16,createMemo as createMemo7,createSignal as createSignal17,createSignal as createSignal18,lazy as lazy4,Show as Show10,For as For10,Show as Show9,Show as Show8,createEffect as createEffect13,onCleanup as onCleanup16,onMount as onMount5,onCleanup as onCleanup17,onMount as onMount6,For as For11,createSignal as createSignal19,createSignal as createSignal20,onCleanup as onCleanup18,createSignal as createSignal21,Show as Show11,createSignal as createSignal23,createSignal as createSignal22,onCleanup as onCleanup19,For as For12,Show as Show14,createMemo as createMemo9,createComputed,createMemo as createMemo8,createSignal as createSignal24,untrack as untrack3,Show as Show12,createComputed as createComputed2,untrack as untrack4,Show as Show13,createSignal as createSignal26,createEffect as createEffect14,createSignal as createSignal25,on,createMemo as createMemo11,createSignal as createSignal29,createMemo as createMemo10,For as For13,Show as Show18,Show as Show15,Show as Show16,createSignal as createSignal27,createContext as createContext3,useContext as useContext3,Show as Show17,createSignal as createSignal28,onCleanup as onCleanup20,Show as Show24,createSignal as createSignal30,untrack as untrack5,createSignal as createSignal31,createSignal as createSignal32,createEffect as createEffect15,For as For15,Show as Show19,For as For14,createSignal as createSignal33,Show as Show20,Show as Show21,Show as Show22,Show as Show23,For as For16,Show as Show26,createMemo as createMemo13,Show as Show25,createMemo as createMemo12,createSignal as createSignal34,createContext as createContext4,useContext as useContext4,Show as Show27,Suspense as Suspense4,createEffect as createEffect16,onCleanup as onCleanup21,untrack as untrack6,For as For22,Match,Switch,createMemo as createMemo19,onCleanup as onCleanup27,For as For17,Show as Show29,createMemo as createMemo15,createSignal as createSignal36,createEffect as createEffect17,createMemo as createMemo14,onCleanup as onCleanup22,untrack as untrack7,Show as Show28,createEffect as createEffect18,createSignal as createSignal35,onCleanup as onCleanup23,For as For18,Show as Show31,createSignal as createSignal37,createEffect as createEffect19,createMemo as createMemo16,onCleanup as onCleanup24,untrack as untrack8,Show as Show30,For as For20,Show as Show34,createEffect as createEffect20,createMemo as createMemo17,createSignal as createSignal38,onCleanup as onCleanup25,untrack as untrack9,For as For19,Show as Show33,Show as Show32,Show as Show38,createEffect as createEffect21,createMemo as createMemo18,createSignal as createSignal39,onCleanup as onCleanup26,untrack as untrack10,For as For21,Show as Show36,Show as Show35,Show as Show37,createEffect as createEffect22,createMemo as createMemo20,onCleanup as onCleanup28,untrack as untrack11,Show as Show39,createMemo as createMemo21,onCleanup as onCleanup29,createEffect as createEffect23,createMemo as createMemo22,on as on2,onCleanup as onCleanup30,createRoot,createSignal as createSignal40,getOwner,createSignal as createSignal41,onCleanup as onCleanup31,onMount as onMount7} from "solid-js"
|
|
7
7
|
var SIDEBAR_SECTIONS=["limits","todo","subagents","skills","quick_actions","lsp","mcp"]
|
|
8
8
|
var QUICK_ACTION_IDS=["session.rename","session.timeline","session.copy","session.export","session.compact","session.list","session.new","session.fork","messages.copy","session.first","session.last","session.messages_last_user","session.message.next","session.message.previous","permission.mode"]
|
|
9
9
|
function preferencesScope(path){return path.worktree||path.directory||"global"
|
|
@@ -500,7 +500,7 @@ return changeMany({action:state.action,...state.preset&&{preset:state.preset},..
|
|
|
500
500
|
|
|
501
501
|
|
|
502
502
|
|
|
503
|
-
var ICONS={limits:["\uDB80\uDE9A","%"],todo:["\uEAB3","[T]"],subagents:["\uEA7E","[A]"],skills:["\uEAA4","[S]"],actions:["\uEB9E","[Q]"],lsp:["\uEAC4","{}"],mcp:["\uEB2D","[M]"],sections:["\uEBEB","[]"],scope:["\uEB01","@"],presets:["\uEBD2","#"],settings:["\uEAF8","[=]"],reset:["\uEB37","R"],save:["\uEB4B","S"],add:["\uEA60","+"],edit:["\uEA73","[R]"],history:["\uEA82","[T]"],copy:["\uEBCC","[C]"],export:["\uEBAC","[E]"],compact:["\uEAF5","[-]"],checked:["\uEBB3","[x]"],unchecked:["\uEBB5","[ ]"],selected:["\uEAB6",">"],expanded:["\uEAB4","v"],collapsed:["\uEAB6",">"],radioOn:["\uEA71","(*)"],radioOff:["\uEABC","( )"],done:["\uEAB2","v"],busy:["\uEA71","*"],idle:["\uEABC","-"],close:["\uEA76","x"],error:["\uEA87","!"],retry:["\uEA77","~"],pending:["\uDB86\uDD78","..."],connected:["\uDB81\uDC3E","(*)"],disconnected:["\uDB81\uDC3D","( )"],favorite:["\uEB59","*"],favoriteEmpty:["\uEA6A","+"],bookmark:["\uDB80\uDCC0","*"],bookmarkEmpty:["\uDB80\uDCC3","+"],mcpFavorite:["\uDB80\uDCC0","*"],mcpFavoriteEmpty:["\uDB80\uDCC3","+"],recent:["\uEA82","~"],info:["\uEA74","i"],search:["\uEA6D","/"],update:["\uDB80\uDC5F","^"],up:["\uEAA1","^"],down:["\uEA9A","v"],left:["\uEA9B","<"],right:["\uEA9C",">"],keyEnter:["\uEBEA","enter"],keyTab:["\uDB80\uDF12","tab"],keyEscape:["\uDB84\uDEB7","esc"],keySpace:["\uDB84\uDC50","space"],delete:["\uEA81","del"],priorityMedium:["\uEA71","-"],help:["\uEB32","?"],selectionLeft:["\uE0B6"," "],selectionRight:["\uE0B4"," "],selectionTopLeft:["\uDBFC\uDC04"," "],selectionTopRight:["\uDBFC\uDC05"," "],selectionBottomLeft:["\uDBFC\uDC06"," "],selectionBottomRight:["\uDBFC\uDC07"," "]
|
|
503
|
+
var ICONS={limits:["\uDB80\uDE9A","%"],todo:["\uEAB3","[T]"],subagents:["\uEA7E","[A]"],skills:["\uEAA4","[S]"],actions:["\uEB9E","[Q]"],lsp:["\uEAC4","{}"],mcp:["\uEB2D","[M]"],sections:["\uEBEB","[]"],scope:["\uEB01","@"],presets:["\uEBD2","#"],settings:["\uEAF8","[=]"],reset:["\uEB37","R"],save:["\uEB4B","S"],add:["\uEA60","+"],edit:["\uEA73","[R]"],history:["\uEA82","[T]"],copy:["\uEBCC","[C]"],export:["\uEBAC","[E]"],compact:["\uEAF5","[-]"],checked:["\uEBB3","[x]"],unchecked:["\uEBB5","[ ]"],selected:["\uEAB6",">"],expanded:["\uEAB4","v"],collapsed:["\uEAB6",">"],radioOn:["\uEA71","(*)"],radioOff:["\uEABC","( )"],done:["\uEAB2","v"],busy:["\uEA71","*"],idle:["\uEABC","-"],close:["\uEA76","x"],error:["\uEA87","!"],retry:["\uEA77","~"],pending:["\uDB86\uDD78","..."],connected:["\uDB81\uDC3E","(*)"],disconnected:["\uDB81\uDC3D","( )"],favorite:["\uEB59","*"],favoriteEmpty:["\uEA6A","+"],bookmark:["\uDB80\uDCC0","*"],bookmarkEmpty:["\uDB80\uDCC3","+"],mcpFavorite:["\uDB80\uDCC0","*"],mcpFavoriteEmpty:["\uDB80\uDCC3","+"],recent:["\uEA82","~"],info:["\uEA74","i"],bug:["\uEAAF","b"],search:["\uEA6D","/"],update:["\uDB80\uDC5F","^"],up:["\uEAA1","^"],down:["\uEA9A","v"],left:["\uEA9B","<"],right:["\uEA9C",">"],keyEnter:["\uEBEA","enter"],keyTab:["\uDB80\uDF12","tab"],keyEscape:["\uDB84\uDEB7","esc"],keySpace:["\uDB84\uDC50","space"],delete:["\uEA81","del"],priorityMedium:["\uEA71","-"],help:["\uEB32","?"],selectionLeft:["\uE0B6"," "],selectionRight:["\uE0B4"," "],selectionTopLeft:["\uDBFC\uDC04"," "],selectionTopRight:["\uDBFC\uDC05"," "],selectionBottomLeft:["\uDBFC\uDC06"," "],selectionBottomRight:["\uDBFC\uDC07"," "]
|
|
504
504
|
}
|
|
505
505
|
function uiIcon(name,style="nerd"){return ICONS[name][style==="text"?1:0]
|
|
506
506
|
}
|
|
@@ -514,7 +514,7 @@ return icon?uiIcon(icon,style):key
|
|
|
514
514
|
}
|
|
515
515
|
function sectionIcon(section,style="nerd"){return uiIcon(section==="quick_actions"?"actions":section,style)
|
|
516
516
|
}
|
|
517
|
-
var SETTINGS_ICONS={sections:"sections",scope:"scope",presets:"presets",behavior:"settings",defaults:"reset"
|
|
517
|
+
var SETTINGS_ICONS={sections:"sections",scope:"scope",presets:"presets",behavior:"settings",defaults:"reset",about:"info"
|
|
518
518
|
}
|
|
519
519
|
function settingsTabIcon(tab,style="nerd"){return uiIcon(SETTINGS_ICONS[tab],style)
|
|
520
520
|
}
|
|
@@ -738,40 +738,36 @@ renderer.requestRender()
|
|
|
738
738
|
|
|
739
739
|
|
|
740
740
|
|
|
741
|
-
import {
|
|
741
|
+
import {RGBA,TextAttributes,TextAttributes as TextAttributes2,TextAttributes as TextAttributes3,RGBA as RGBA2,parseColor,TextAttributes as TextAttributes4,TextAttributes as TextAttributes5,TextAttributes as TextAttributes6,TextAttributes as TextAttributes7,RGBA as RGBA3,parseColor as parseColor2,TextAttributes as TextAttributes8,TextAttributes as TextAttributes9,TextAttributes as TextAttributes12,TextAttributes as TextAttributes10,TextAttributes as TextAttributes11,TextAttributes as TextAttributes13,TextAttributes as TextAttributes14,TextAttributes as TextAttributes16,TextAttributes as TextAttributes15,TextAttributes as TextAttributes17,ScrollBoxRenderable,TextAttributes as TextAttributes18} from "@opentui/core"
|
|
742
742
|
|
|
743
|
-
|
|
743
|
+
var transparent=RGBA.fromInts(0,0,0,0)
|
|
744
|
+
function selectionBackdrop(node){for(let parent=node.parent;parent; parent=parent.parent){if("backgroundColor" in parent&&parent.backgroundColor instanceof RGBA&&parent.backgroundColor.a>0&&(!("shouldFill" in parent)||parent.shouldFill!==false))
|
|
744
745
|
return parent.backgroundColor
|
|
745
746
|
}
|
|
746
|
-
return
|
|
747
|
+
return transparent
|
|
747
748
|
}
|
|
749
|
+
function paintCorners(node,buffer,icons){const backdrop=selectionBackdrop(node)
|
|
750
|
+
if(node.backgroundColor.equals(backdrop))
|
|
751
|
+
return
|
|
752
|
+
const left=node.screenX
|
|
753
|
+
const right=left + node.width-1
|
|
754
|
+
const top=node.screenY
|
|
755
|
+
const bottom=top + node.height-1
|
|
756
|
+
const multiline=node.height>1
|
|
757
|
+
const positions=multiline?[[left,top,"selectionTopLeft"],[right,top,"selectionTopRight"],[left,bottom,"selectionBottomLeft"],[right,bottom,"selectionBottomRight"]]:[[left,top,"selectionLeft"],[right,top,"selectionRight"]]
|
|
758
|
+
for(const [x,y,icon] of positions){if(x<0||y<0||x>=buffer.width||y>=buffer.height)
|
|
759
|
+
continue
|
|
760
|
+
buffer.setCell(x,y,icons.icon(icon),multiline?backdrop:node.backgroundColor,multiline?node.backgroundColor:backdrop)
|
|
761
|
+
}}
|
|
748
762
|
function SelectionBox(props){const icons=useIcons()
|
|
749
763
|
const [local,boxProps]=splitProps(props,["ref","iconOnly"])
|
|
750
764
|
let node
|
|
751
|
-
let corners=[]
|
|
752
765
|
createEffect2(()=>{icons.style()
|
|
753
766
|
icons.multilineCorners()
|
|
754
767
|
node?.requestRender()
|
|
755
768
|
})
|
|
756
|
-
function
|
|
757
|
-
|
|
758
|
-
if(this.buffered||this.width<3||this.height<1||this.backgroundColor.a===0||this.height>1&&!icons.multilineCorners())
|
|
759
|
-
return
|
|
760
|
-
const left=this.screenX
|
|
761
|
-
const right=left + this.width-1
|
|
762
|
-
const top=this.screenY
|
|
763
|
-
const bottom=top + this.height-1
|
|
764
|
-
const positions=this.height===1?[[left,top,"selectionLeft"],[right,top,"selectionRight"]]:[[left,top,"selectionTopLeft"],[right,top,"selectionTopRight"],[left,bottom,"selectionBottomLeft"],[right,bottom,"selectionBottomRight"]]
|
|
765
|
-
const backdrop=selectionBackdrop(this)
|
|
766
|
-
for(const [x,y,icon] of positions){if(x<0||y<0||x>=buffer.width||y>=buffer.height)
|
|
767
|
-
continue
|
|
768
|
-
if(!this.backgroundColor.equals(backdrop))
|
|
769
|
-
corners.push({x,y,icon,backdrop
|
|
770
|
-
})
|
|
771
|
-
}}
|
|
772
|
-
function after(buffer,delta){for(const corner of corners){const multiline=this.height>1
|
|
773
|
-
buffer.setCell(corner.x,corner.y,icons.icon(corner.icon),multiline?corner.backdrop:this.backgroundColor,multiline?this.backgroundColor:corner.backdrop)
|
|
774
|
-
}
|
|
769
|
+
function after(buffer,delta){if(!this.buffered&&this.width>=3&&this.height>=1&&this.backgroundColor.a>0&&(this.height===1||icons.multilineCorners()))
|
|
770
|
+
paintCorners(this,buffer,icons)
|
|
775
771
|
props.renderAfter?.call(this,buffer,delta)
|
|
776
772
|
}
|
|
777
773
|
return(()=>{var _el$=_$createElement("box")
|
|
@@ -782,7 +778,6 @@ local.ref(value)
|
|
|
782
778
|
},_el$)
|
|
783
779
|
_$spread(_el$,_$mergeProps(boxProps,{get paddingLeft(){return props.paddingLeft??props.padding??(local.iconOnly&&icons.style()==="text"?0:1)
|
|
784
780
|
},get paddingRight(){return props.paddingRight??props.padding??(local.iconOnly&&icons.style()==="text"?0:1)
|
|
785
|
-
},get renderBefore(){return _$memo(()=>icons.style()==="nerd")()?before:props.renderBefore
|
|
786
781
|
},get renderAfter(){return _$memo(()=>icons.style()==="nerd")()?after:props.renderAfter
|
|
787
782
|
}}),false)
|
|
788
783
|
return _el$
|
|
@@ -823,7 +818,7 @@ _$setProp(_el$2,"wrapMode","none")
|
|
|
823
818
|
_$setProp(_el$2,"truncate",true)
|
|
824
819
|
_$setProp(_el$2,"height",1)
|
|
825
820
|
_$setProp(_el$2,"flexGrow",1)
|
|
826
|
-
_$insert(_el$2,()=>icons.icon("presets"),_el$3)
|
|
821
|
+
_$insert(_el$2,()=>icons.icon(props.icon??"presets"),_el$3)
|
|
827
822
|
_$insert(_el$2,()=>props.title,null)
|
|
828
823
|
_$setProp(_el$4,"flexShrink",0)
|
|
829
824
|
_$setProp(_el$4,"onMouseUp",(event)=>{event.stopPropagation()
|
|
@@ -1040,12 +1035,17 @@ function GuardedConfirmation(props){const dialogs=useDialogs(props.api)
|
|
|
1040
1035
|
createEffect4(()=>{if(!props.current())
|
|
1041
1036
|
dialogs.close()
|
|
1042
1037
|
})
|
|
1043
|
-
|
|
1044
|
-
},get message(){return props.message
|
|
1045
|
-
},onConfirm:()=>{if(props.current())
|
|
1038
|
+
const confirm=()=>{if(props.current())
|
|
1046
1039
|
props.onConfirm()
|
|
1047
|
-
}
|
|
1040
|
+
}
|
|
1041
|
+
return _$createComponent(Show,{get when(){return props.render
|
|
1042
|
+
},get fallback(){return _$createComponent(props.api.ui.DialogConfirm,{get title(){return props.title
|
|
1043
|
+
},get message(){return props.message
|
|
1044
|
+
},onConfirm:confirm,get onCancel(){return dialogs.back
|
|
1048
1045
|
}})
|
|
1046
|
+
},children:(render)=>render()({confirm,cancel:dialogs.back
|
|
1047
|
+
})
|
|
1048
|
+
})
|
|
1049
1049
|
}
|
|
1050
1050
|
|
|
1051
1051
|
|
|
@@ -1071,7 +1071,7 @@ _$setProp(_el$2,"wrapMode","none")
|
|
|
1071
1071
|
_$setProp(_el$2,"truncate",true)
|
|
1072
1072
|
_$setProp(_el$2,"height",1)
|
|
1073
1073
|
_$insert(_el$2,()=>local.children)
|
|
1074
|
-
_$insert(_el$,_$createComponent(
|
|
1074
|
+
_$insert(_el$,_$createComponent(Show2,{get when(){return local.count!==undefined
|
|
1075
1075
|
},get children(){var _el$3=_$createElement("text")
|
|
1076
1076
|
_$setProp(_el$3,"flexShrink",0)
|
|
1077
1077
|
_$setProp(_el$3,"wrapMode","none")
|
|
@@ -1095,6 +1095,85 @@ return _el$
|
|
|
1095
1095
|
}}))
|
|
1096
1096
|
}
|
|
1097
1097
|
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
|
|
1101
|
+
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
|
|
1105
|
+
function SingleLinePrompt(props){const theme=()=>props.api.theme.current
|
|
1106
|
+
const [value,setValue]=useDialogState("prompt-value",props.value??"")
|
|
1107
|
+
const [active,setActive]=useDialogState("prompt-control",0)
|
|
1108
|
+
const [hovered,setHovered]=createSignal4()
|
|
1109
|
+
let input
|
|
1110
|
+
let actions
|
|
1111
|
+
const confirm=()=>props.onConfirm?.(value())
|
|
1112
|
+
const cancel=()=>props.onCancel?.()
|
|
1113
|
+
const focus=(index)=>{setActive(index)
|
|
1114
|
+
setHovered(undefined)
|
|
1115
|
+
if(index===0)
|
|
1116
|
+
input?.focus()
|
|
1117
|
+
else
|
|
1118
|
+
actions?.focus()
|
|
1119
|
+
}
|
|
1120
|
+
const prefix="opencode-navigator.prompt"
|
|
1121
|
+
createEffect5(()=>{const actionsFocused=active()>0
|
|
1122
|
+
const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1100,commands:[{name:`${prefix}.next`,run:()=>focus((active() + 1)%3)
|
|
1123
|
+
},{name:`${prefix}.previous`,run:()=>focus((active() + 2)%3)
|
|
1124
|
+
},{name:`${prefix}.activate`,run:()=>active()===2?cancel():confirm()
|
|
1125
|
+
},{name:`${prefix}.horizontal`,enabled:()=>active()>0,run:()=>focus(active()===1?2:1)
|
|
1126
|
+
}],bindings:[{key:"tab",cmd:`${prefix}.next`
|
|
1127
|
+
},{key:"shift+tab",cmd:`${prefix}.previous`
|
|
1128
|
+
},{key:"return",cmd:`${prefix}.activate`
|
|
1129
|
+
},...actionsFocused?[{key:"left",cmd:`${prefix}.horizontal`
|
|
1130
|
+
},{key:"right",cmd:`${prefix}.horizontal`
|
|
1131
|
+
}]:[]]
|
|
1132
|
+
})
|
|
1133
|
+
onCleanup4(unregister)
|
|
1134
|
+
})
|
|
1135
|
+
onMount(()=>queueMicrotask(()=>input?.focus()))
|
|
1136
|
+
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
1137
|
+
},get children(){return [_$createComponent(DialogHeader,{get api(){return props.api
|
|
1138
|
+
},get title(){return props.title
|
|
1139
|
+
},onBack:cancel
|
|
1140
|
+
}),_$memo(()=>props.description?.()),(()=>{var _el$=_$createElement("input")
|
|
1141
|
+
_$use((node)=>{input=node
|
|
1142
|
+
},_el$)
|
|
1143
|
+
_$setProp(_el$,"onInput",setValue)
|
|
1144
|
+
_$setProp(_el$,"on:focused",()=>setActive(0))
|
|
1145
|
+
_$effect((_p$)=>{var _v$=value(),_v$2=props.placeholder,_v$3=theme().text,_v$4=theme().text,_v$5=theme().backgroundPanel,_v$6=theme().backgroundElement,_v$7=theme().primary,_v$8=theme().textMuted
|
|
1146
|
+
_v$!==_p$.e&&(_p$.e=_$setProp(_el$,"value",_v$,_p$.e))
|
|
1147
|
+
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$,"placeholder",_v$2,_p$.t))
|
|
1148
|
+
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$,"textColor",_v$3,_p$.a))
|
|
1149
|
+
_v$4!==_p$.o&&(_p$.o=_$setProp(_el$,"focusedTextColor",_v$4,_p$.o))
|
|
1150
|
+
_v$5!==_p$.i&&(_p$.i=_$setProp(_el$,"backgroundColor",_v$5,_p$.i))
|
|
1151
|
+
_v$6!==_p$.n&&(_p$.n=_$setProp(_el$,"focusedBackgroundColor",_v$6,_p$.n))
|
|
1152
|
+
_v$7!==_p$.s&&(_p$.s=_$setProp(_el$,"cursorColor",_v$7,_p$.s))
|
|
1153
|
+
_v$8!==_p$.h&&(_p$.h=_$setProp(_el$,"placeholderColor",_v$8,_p$.h))
|
|
1154
|
+
return _p$
|
|
1155
|
+
},{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined,n:undefined,s:undefined,h:undefined
|
|
1156
|
+
})
|
|
1157
|
+
return _el$
|
|
1158
|
+
})(),(()=>{var _el$2=_$createElement("box")
|
|
1159
|
+
_$use((node)=>{actions=node
|
|
1160
|
+
},_el$2)
|
|
1161
|
+
_$setProp(_el$2,"flexDirection","row")
|
|
1162
|
+
_$setProp(_el$2,"gap",1)
|
|
1163
|
+
_$setProp(_el$2,"focusable",true)
|
|
1164
|
+
_$insert(_el$2,_$createComponent(DialogAction,{get api(){return props.api
|
|
1165
|
+
},id:`${prefix}.save`,label:"Save",icon:"save",get selected(){return(hovered()??active())===1
|
|
1166
|
+
},onSelect:()=>setHovered(1),onActivate:confirm
|
|
1167
|
+
}),null)
|
|
1168
|
+
_$insert(_el$2,_$createComponent(DialogAction,{get api(){return props.api
|
|
1169
|
+
},id:`${prefix}.cancel`,label:"Cancel",icon:"close",get selected(){return(hovered()??active())===2
|
|
1170
|
+
},onSelect:()=>setHovered(2),onActivate:cancel
|
|
1171
|
+
}),null)
|
|
1172
|
+
return _el$2
|
|
1173
|
+
})()]
|
|
1174
|
+
}})
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1098
1177
|
function subtleLineColor(background,border){const from=parseColor(background)
|
|
1099
1178
|
const to=parseColor(border)
|
|
1100
1179
|
return RGBA2.fromValues(from.r + (to.r-from.r)*0.45,from.g + (to.g-from.g)*0.45,from.b + (to.b-from.b)*0.45)
|
|
@@ -1255,13 +1334,34 @@ function toolbarPinKey(pin){return pin.kind==="action"?`action:${pin.id}`:`skill
|
|
|
1255
1334
|
}
|
|
1256
1335
|
function identifier(value){return typeof value==="string"&&/^[a-z][a-z\d-]{0,47}$/u.test(value)
|
|
1257
1336
|
}
|
|
1337
|
+
function iconList(value){return Array.isArray(value)&&value.length<=3&&value.every((item)=>identifier(item))
|
|
1338
|
+
}
|
|
1339
|
+
function validToolbarPinText(text){return text.length<=128&&[...text].every((character)=>{const point=character.codePointAt(0)??0
|
|
1340
|
+
return point>=32&&point!==127&&point!==8232&&point!==8233
|
|
1341
|
+
})
|
|
1342
|
+
}
|
|
1343
|
+
function toolbarPinIcons(pin,state){if(state&&pin.stateIconLists?.[state])
|
|
1344
|
+
return pin.stateIconLists[state]
|
|
1345
|
+
if(state&&pin.stateIcons?.[state])
|
|
1346
|
+
return [pin.stateIcons[state]]
|
|
1347
|
+
return pin.icons??[pin.icon]
|
|
1348
|
+
}
|
|
1258
1349
|
function parsePin(value){if(!value||typeof value!=="object")
|
|
1259
1350
|
return
|
|
1260
1351
|
const input=value
|
|
1261
1352
|
if(!identifier(input.icon))
|
|
1262
1353
|
return
|
|
1354
|
+
if(input.icons!==undefined&&!iconList(input.icons))
|
|
1355
|
+
return
|
|
1356
|
+
const text=typeof input.text==="string"?input.text.trim():""
|
|
1357
|
+
if(!validToolbarPinText(text))
|
|
1358
|
+
return
|
|
1263
1359
|
const stateIcons=Object.fromEntries(Object.entries(input.stateIcons&&typeof input.stateIcons==="object"?input.stateIcons:{}).filter(([key,icon])=>identifier(key)&&identifier(icon)))
|
|
1264
|
-
const
|
|
1360
|
+
const stateIconLists=Object.fromEntries(Object.entries(input.stateIconLists&&typeof input.stateIconLists==="object"?input.stateIconLists:{}).filter(([key,entry])=>identifier(key)&&iconList(entry)))
|
|
1361
|
+
const base=input.icons
|
|
1362
|
+
if(!text&&(base?.length===0||Object.values(stateIconLists).some((list)=>list.length===0)))
|
|
1363
|
+
return
|
|
1364
|
+
const icons={icon:input.icon,...base&&{icons:[...base]},...text&&{text},...Object.keys(stateIcons).length>0&&{stateIcons},...Object.keys(stateIconLists).length>0&&{stateIconLists}}
|
|
1265
1365
|
if(input.kind==="action"&&QUICK_ACTION_IDS.includes(input.id))
|
|
1266
1366
|
return{kind:"action",id:input.id,...icons}
|
|
1267
1367
|
if(input.kind==="skill"&&typeof input.location==="string"&&input.location.trim()&&typeof input.name==="string"&&input.name.trim())
|
|
@@ -1278,6 +1378,31 @@ keys.add(toolbarPinKey(pin))
|
|
|
1278
1378
|
return [pin]
|
|
1279
1379
|
})
|
|
1280
1380
|
}
|
|
1381
|
+
function configurePin(current,change){if(change.expected&&change.expected!==JSON.stringify(current))
|
|
1382
|
+
throw new Error("Pin changed; reopen its configuration")
|
|
1383
|
+
const stateIcons={...current.stateIcons}
|
|
1384
|
+
const stateIconLists={...current.stateIconLists}
|
|
1385
|
+
const lists=Object.entries(change.stateIconLists??{})
|
|
1386
|
+
for(const [state,values] of lists){if(!identifier(state)||values!==null&&!iconList(values))
|
|
1387
|
+
throw new Error("Choose zero to three state icons")
|
|
1388
|
+
if(values===null)
|
|
1389
|
+
delete stateIconLists[state]
|
|
1390
|
+
else
|
|
1391
|
+
stateIconLists[state]=[...values]
|
|
1392
|
+
}
|
|
1393
|
+
const changes=Object.entries(change.stateIcons??{})
|
|
1394
|
+
for(const [state,icon] of changes){if(!identifier(state)||icon!==null&&!identifier(icon))
|
|
1395
|
+
throw new Error("Invalid state icon")
|
|
1396
|
+
if(icon===null)
|
|
1397
|
+
delete stateIcons[state]
|
|
1398
|
+
else
|
|
1399
|
+
stateIcons[state]=icon
|
|
1400
|
+
}
|
|
1401
|
+
const pin=parsePin({...current,icon:change.icon,stateIcons,stateIconLists,...change.icons!==undefined&&{icons:change.icons??undefined},...change.text!==undefined&&{text:change.text??undefined}})
|
|
1402
|
+
if(!pin)
|
|
1403
|
+
throw new Error("Choose up to three icons and a single-line label")
|
|
1404
|
+
return pin
|
|
1405
|
+
}
|
|
1281
1406
|
function changeToolbarPins(current=[],change){const pins=parseToolbarPins(current)
|
|
1282
1407
|
if(change.operation==="pin"){const pin=parsePin(change.pin)
|
|
1283
1408
|
if(!pin)
|
|
@@ -1293,21 +1418,7 @@ if(index===-1){if(change.operation==="configure")
|
|
|
1293
1418
|
throw new Error("Pin no longer exists; reopen the toolbar manager")
|
|
1294
1419
|
return pins
|
|
1295
1420
|
}
|
|
1296
|
-
if(change.operation==="configure"){
|
|
1297
|
-
throw new Error("Pin changed; reopen its configuration")
|
|
1298
|
-
const stateIcons={...pins[index].stateIcons}
|
|
1299
|
-
const changes=Object.entries(change.stateIcons??{})
|
|
1300
|
-
for(const [state,icon] of changes){if(!identifier(state)||icon!==null&&!identifier(icon))
|
|
1301
|
-
throw new Error("Invalid state icon")
|
|
1302
|
-
if(icon===null)
|
|
1303
|
-
delete stateIcons[state]
|
|
1304
|
-
else
|
|
1305
|
-
stateIcons[state]=icon
|
|
1306
|
-
}
|
|
1307
|
-
const pin=parsePin({...pins[index],icon:change.icon,stateIcons})
|
|
1308
|
-
if(!pin)
|
|
1309
|
-
throw new Error("Invalid toolbar icon")
|
|
1310
|
-
pins[index]=pin
|
|
1421
|
+
if(change.operation==="configure"){pins[index]=configurePin(pins[index],change)
|
|
1311
1422
|
return pins
|
|
1312
1423
|
}
|
|
1313
1424
|
const [pin]=pins.splice(index,1)
|
|
@@ -1762,25 +1873,25 @@ return{sections:{...base?.sections,...session.sections},expanded:{...base?.expan
|
|
|
1762
1873
|
function createPreferencesController(api,defaults,store,configured={}){const builtIns={behavior:{toggleKey:defaults.toggleKey,focusKey:defaults.focusKey,searchKey:defaults.searchKey,persistMcp:defaults.persistMcp,limitsRefreshMinutes:defaults.limitsRefreshMinutes,startInChat:defaults.startInChat,showSessionTitle:defaults.showSessionTitle,showSessionDate:defaults.showSessionDate,cornerFont:defaults.cornerFont,lspIconStyle:defaults.lspIconStyle,rowDensity:defaults.rowDensity,toolbarOverflow:defaults.toolbarOverflow,sectionItemLimits:defaults.sectionItemLimits,quickActionOrder:defaults.quickActionOrder,quickActionVisibility:defaults.quickActionVisibility
|
|
1763
1874
|
},layout:{sections:defaults.sections,expanded:DEFAULT_SECTION_EXPANSION,order:defaults.sectionOrder??[...SIDEBAR_SECTIONS]
|
|
1764
1875
|
},desiredMcpStates:{}}
|
|
1765
|
-
const [resolved,setResolved]=
|
|
1766
|
-
const [skippedSkills,setSkippedSkills]=
|
|
1767
|
-
const [onboardingCompleted,setOnboardingCompleted]=
|
|
1768
|
-
const [activeTarget,setActiveTarget]=
|
|
1769
|
-
const [preferenceScope,setPreferenceScope]=
|
|
1770
|
-
const [layoutPresets,setLayoutPresets]=
|
|
1771
|
-
const [mcpPresets,setMcpPresets]=
|
|
1772
|
-
const [favoriteSkills,setFavoriteSkills]=
|
|
1773
|
-
const [favoriteMcpServers,setFavoriteMcpServers]=
|
|
1774
|
-
const [favoriteQuickActions,setFavoriteQuickActions]=
|
|
1775
|
-
const [recentSkills,setRecentSkills]=
|
|
1776
|
-
const [recentQuickActions,setRecentQuickActions]=
|
|
1777
|
-
const [mcpServerGroups,setMcpServerGroups]=
|
|
1778
|
-
const [skillGroups,setSkillGroups]=
|
|
1779
|
-
const [autoApprovePermissions,setAutoApprovePermissions]=
|
|
1780
|
-
const [codexAccountBindings,setCodexAccountBindings]=
|
|
1781
|
-
const [pendingResetAttempt,setPendingResetAttempt]=
|
|
1782
|
-
const [ready,setReady]=
|
|
1783
|
-
const [revision,setRevision]=
|
|
1876
|
+
const [resolved,setResolved]=createSignal5(resolvePreferences({builtIns,pluginOptions:configured}))
|
|
1877
|
+
const [skippedSkills,setSkippedSkills]=createSignal5(new Set)
|
|
1878
|
+
const [onboardingCompleted,setOnboardingCompleted]=createSignal5(false)
|
|
1879
|
+
const [activeTarget,setActiveTarget]=createSignal5({kind:"global"})
|
|
1880
|
+
const [preferenceScope,setPreferenceScope]=createSignal5("global")
|
|
1881
|
+
const [layoutPresets,setLayoutPresets]=createSignal5(configured.layoutPresets??{})
|
|
1882
|
+
const [mcpPresets,setMcpPresets]=createSignal5(configured.mcpPresets??{})
|
|
1883
|
+
const [favoriteSkills,setFavoriteSkills]=createSignal5(new Set)
|
|
1884
|
+
const [favoriteMcpServers,setFavoriteMcpServers]=createSignal5(new Set)
|
|
1885
|
+
const [favoriteQuickActions,setFavoriteQuickActions]=createSignal5(new Set)
|
|
1886
|
+
const [recentSkills,setRecentSkills]=createSignal5([])
|
|
1887
|
+
const [recentQuickActions,setRecentQuickActions]=createSignal5([])
|
|
1888
|
+
const [mcpServerGroups,setMcpServerGroups]=createSignal5(configured.mcpServerGroups??{})
|
|
1889
|
+
const [skillGroups,setSkillGroups]=createSignal5({})
|
|
1890
|
+
const [autoApprovePermissions,setAutoApprovePermissions]=createSignal5()
|
|
1891
|
+
const [codexAccountBindings,setCodexAccountBindings]=createSignal5({})
|
|
1892
|
+
const [pendingResetAttempt,setPendingResetAttempt]=createSignal5()
|
|
1893
|
+
const [ready,setReady]=createSignal5(false)
|
|
1894
|
+
const [revision,setRevision]=createSignal5(0)
|
|
1784
1895
|
const sessionLayouts=new Map
|
|
1785
1896
|
const pendingUpdates=[]
|
|
1786
1897
|
let document=emptyPreferencesDocument()
|
|
@@ -2291,7 +2402,7 @@ return{behavior,layout:{sections,expanded:{},...sectionOrder&&{order:sectionOrde
|
|
|
2291
2402
|
function configuredDefaultsFromPluginOptions(options){return mergeConfiguredDefaults(legacyDefaults(pluginConfig(options)),parseConfiguredDefaults(options??{}))
|
|
2292
2403
|
}
|
|
2293
2404
|
|
|
2294
|
-
function createSkillController(api,source){const [skills,setSkills]=
|
|
2405
|
+
function createSkillController(api,source){const [skills,setSkills]=createSignal6({})
|
|
2295
2406
|
const refreshing=new Map
|
|
2296
2407
|
const targets=new Map
|
|
2297
2408
|
const requests=createRequestState(api.lifecycle.signal)
|
|
@@ -2513,7 +2624,7 @@ _$insertNode(_el$4,_el$5)
|
|
|
2513
2624
|
_$setProp(_el$4,"flexDirection","row")
|
|
2514
2625
|
_$setProp(_el$4,"gap",1)
|
|
2515
2626
|
_$setProp(_el$4,"alignItems","center")
|
|
2516
|
-
_$insert(_el$4,_$createComponent(
|
|
2627
|
+
_$insert(_el$4,_$createComponent(Show3,{get when(){return props.onConfigure
|
|
2517
2628
|
},get children(){return _$createComponent(IconControl,{get icon(){return terminalIcon("pin",icons.style())
|
|
2518
2629
|
},get foregroundColor(){return _$memo(()=>props.active==="configure")()?theme().selectedListItemText:theme().textMuted
|
|
2519
2630
|
},get backgroundColor(){return _$memo(()=>props.active==="configure")()?theme().primary:undefined
|
|
@@ -2586,7 +2697,7 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
2586
2697
|
},{key:"return",cmd:`${PLUGIN_ID}.skill-dialog.submit`
|
|
2587
2698
|
}]
|
|
2588
2699
|
})
|
|
2589
|
-
|
|
2700
|
+
onCleanup5(unregister)
|
|
2590
2701
|
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
2591
2702
|
},get children(){return [_$createComponent(SkillDialogHeader,{get api(){return props.api
|
|
2592
2703
|
},get name(){return props.skill.name
|
|
@@ -2656,7 +2767,7 @@ input.dialogs.open(()=>_$createComponent(SkillDialog,{get api(){return input.api
|
|
|
2656
2767
|
|
|
2657
2768
|
|
|
2658
2769
|
function createSubagentHistory({now=Date.now}={}){const targets=new Map
|
|
2659
|
-
const [revision,setRevision]=
|
|
2770
|
+
const [revision,setRevision]=createSignal7(0)
|
|
2660
2771
|
function state(key){let value=targets.get(key)
|
|
2661
2772
|
if(!value){value={known:new Set,active:new Map,recent:[]}
|
|
2662
2773
|
targets.set(key,value)
|
|
@@ -2714,11 +2825,11 @@ function activeStatus(status){return status?.type==="busy"||status?.type==="retr
|
|
|
2714
2825
|
function createSubagentController(api,options={}){const source=options.source
|
|
2715
2826
|
const now=options.now??Date.now
|
|
2716
2827
|
const history=createSubagentHistory({now})
|
|
2717
|
-
const [children,setChildren]=
|
|
2718
|
-
const [statuses,setStatuses]=
|
|
2828
|
+
const [children,setChildren]=createSignal8({})
|
|
2829
|
+
const [statuses,setStatuses]=createSignal8({})
|
|
2719
2830
|
const refreshing=new Map
|
|
2720
2831
|
const journals=new Set
|
|
2721
|
-
const [unavailable,setUnavailable]=
|
|
2832
|
+
const [unavailable,setUnavailable]=createSignal8({})
|
|
2722
2833
|
const targets=new Map
|
|
2723
2834
|
const remoteFailures=new Map
|
|
2724
2835
|
const remoteRetryAt=new Map
|
|
@@ -2943,17 +3054,17 @@ else if(seconds>=60)
|
|
|
2943
3054
|
value=`${Math.floor(seconds / 60)}m ${String(seconds % 60).padStart(2, "0")}s`
|
|
2944
3055
|
return value
|
|
2945
3056
|
}
|
|
2946
|
-
function createSubagentClock(key){const [now,setNow]=
|
|
2947
|
-
|
|
3057
|
+
function createSubagentClock(key){const [now,setNow]=createSignal9(Date.now())
|
|
3058
|
+
createEffect6(()=>{if(key()===undefined)
|
|
2948
3059
|
return
|
|
2949
3060
|
setNow(Date.now())
|
|
2950
3061
|
const timer=setInterval(()=>setNow(Date.now()),1000)
|
|
2951
|
-
|
|
3062
|
+
onCleanup6(()=>clearInterval(timer))
|
|
2952
3063
|
})
|
|
2953
3064
|
return now
|
|
2954
3065
|
}
|
|
2955
3066
|
|
|
2956
|
-
function createTodoController(api){const [sessions,setSessions]=
|
|
3067
|
+
function createTodoController(api){const [sessions,setSessions]=createSignal10({})
|
|
2957
3068
|
const refreshing=new Map
|
|
2958
3069
|
const revisions=new Map
|
|
2959
3070
|
const requests=createRequestState(api.lifecycle.signal)
|
|
@@ -3070,10 +3181,10 @@ return action.label
|
|
|
3070
3181
|
const command=api.keymap.getCommands?.({visibility:"registered"}).find((candidate)=>candidate.name===action.command)
|
|
3071
3182
|
return typeof command?.title==="string"?command.title:action.label
|
|
3072
3183
|
}
|
|
3073
|
-
function createQuickActionRevision(api){const [revision,setRevision]=
|
|
3184
|
+
function createQuickActionRevision(api){const [revision,setRevision]=createSignal12(0)
|
|
3074
3185
|
const unsubscribe=api.keymap.on?.("state",()=>setRevision((value)=>value + 1))
|
|
3075
3186
|
if(unsubscribe)
|
|
3076
|
-
|
|
3187
|
+
onCleanup8(unsubscribe)
|
|
3077
3188
|
return revision
|
|
3078
3189
|
}
|
|
3079
3190
|
function orderQuickActionIds(order,favorites){return [...order.filter((id)=>favorites.has(id)),...order.filter((id)=>!favorites.has(id))]
|
|
@@ -3189,7 +3300,7 @@ const [selectedID,setSelectedID]=useDialogState("selection",undefined)
|
|
|
3189
3300
|
const [views]=useDialogState("tab-views",new Map)
|
|
3190
3301
|
const tabViews=views()
|
|
3191
3302
|
const [scrollTop,setScrollTop]=useDialogState("scroll",0)
|
|
3192
|
-
const [refreshing,setRefreshing]=
|
|
3303
|
+
const [refreshing,setRefreshing]=createSignal13(false)
|
|
3193
3304
|
const theme=()=>props.api.theme.current
|
|
3194
3305
|
const icons=useIcons()
|
|
3195
3306
|
const commandRevision=createQuickActionRevision(props.api)
|
|
@@ -3216,7 +3327,7 @@ body.scrollChildIntoView(`${prefix}.${position}`)
|
|
|
3216
3327
|
setScrollTop(body.scrollTop)
|
|
3217
3328
|
}
|
|
3218
3329
|
renderer.on("frame",onFrame)
|
|
3219
|
-
|
|
3330
|
+
onCleanup9(()=>renderer.off("frame",onFrame))
|
|
3220
3331
|
const sameContext=()=>searchContext(props.api).key===context.key
|
|
3221
3332
|
const candidates=createMemo(()=>{commandRevision()
|
|
3222
3333
|
return buildSearchCandidates({skills:props.skills.list(skillTarget),subagents:context.sessionID?buildSubagentView(props.subagents.list(context.sessionID),props.subagents.recent(context.sessionID)):[],mcp:props.mcp.list(mcpTarget),actionOrder:props.preferences.quickActionOrder?.()??QUICK_ACTION_IDS,favoriteQuickActions:props.preferences.favoriteQuickActions?.()??new Set,favoriteSkills:props.preferences.favoriteSkills(),skillGroups:props.preferences.skillGroups?.()??{},recentSkills:props.preferences.recentSkills(),favoriteMcp:props.preferences.favoriteMcpServers(),mcpGroups:props.preferences.mcpServerGroups?.()??{},hasSession:Boolean(context.sessionID),mcpBusy:props.mcp.mutating(mcpTarget)||props.mcp.bulkState(mcpTarget).status==="running",actionDisabledReason:(action)=>quickActionDisabledReason(props.api,action),actionLabel:(action)=>quickActionLabel(props.api,action)
|
|
@@ -3322,14 +3433,14 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
3322
3433
|
},{key:"ctrl+r",cmd:`${prefix}.retry`
|
|
3323
3434
|
}]
|
|
3324
3435
|
})
|
|
3325
|
-
|
|
3436
|
+
onCleanup9(()=>{isDisposed=true
|
|
3326
3437
|
unregister()
|
|
3327
3438
|
})
|
|
3328
|
-
|
|
3329
|
-
|
|
3439
|
+
onCleanup9(props.skills.activate?.(skillTarget)??(()=>{}))
|
|
3440
|
+
onMount2(()=>{input?.focus()
|
|
3330
3441
|
refresh().catch(report)
|
|
3331
3442
|
})
|
|
3332
|
-
|
|
3443
|
+
createEffect7(()=>{if(!sameContext())
|
|
3333
3444
|
dialogs.close()
|
|
3334
3445
|
})
|
|
3335
3446
|
return{active,activeTab,activate,allErrors,byID,dialogs,errors,icons,loading,matches,prefix,query,queryScope,resultColors,results,selectTab,setBody(node){body=node
|
|
@@ -3492,7 +3603,7 @@ _$effect((_$p)=>_$setProp(_el$2,"fg",model.theme().error,_$p))
|
|
|
3492
3603
|
return _el$2
|
|
3493
3604
|
})()
|
|
3494
3605
|
}),null)
|
|
3495
|
-
_$insert(_el$,_$createComponent(
|
|
3606
|
+
_$insert(_el$,_$createComponent(Show4,{get when(){return model.results().length
|
|
3496
3607
|
},get fallback(){return(()=>{var _el$8=_$createElement("text"),_el$9=_$createTextNode(` `)
|
|
3497
3608
|
_$insertNode(_el$8,_el$9)
|
|
3498
3609
|
_$insert(_el$8,()=>model.icons.icon(model.loading()?"pending":"search"),_el$9)
|
|
@@ -3500,7 +3611,7 @@ _$insert(_el$8,()=>model.loading()?"Loading sources\u2026":"No matching results"
|
|
|
3500
3611
|
_$effect((_$p)=>_$setProp(_el$8,"fg",model.theme().textMuted,_$p))
|
|
3501
3612
|
return _el$8
|
|
3502
3613
|
})()
|
|
3503
|
-
},get children(){return _$createComponent(
|
|
3614
|
+
},get children(){return _$createComponent(Show4,{keyed:true,get when(){return model.queryScope()
|
|
3504
3615
|
},children:(_scope)=>_$createComponent(For3,{get each(){return model.results().map((item)=>item.id)
|
|
3505
3616
|
},children:(id)=>_$createComponent(SearchResultRow,{model,id
|
|
3506
3617
|
})
|
|
@@ -3554,13 +3665,13 @@ timers.add(timer)
|
|
|
3554
3665
|
}},{name:`${LEGACY_PLUGIN_ID}.search`,run(){props.api.keymap.dispatchCommand(SEARCH_COMMAND)
|
|
3555
3666
|
}}]
|
|
3556
3667
|
})
|
|
3557
|
-
|
|
3668
|
+
createEffect8(()=>{const key=props.preferences.searchKey()
|
|
3558
3669
|
const remove=props.api.keymap.registerLayer({mode:"base",bindings:[{key,cmd:SEARCH_COMMAND
|
|
3559
3670
|
}]
|
|
3560
3671
|
})
|
|
3561
|
-
|
|
3672
|
+
onCleanup10(remove)
|
|
3562
3673
|
})
|
|
3563
|
-
|
|
3674
|
+
onCleanup10(()=>{isDisposed=true
|
|
3564
3675
|
unregister()
|
|
3565
3676
|
for(const timer of timers)
|
|
3566
3677
|
clearTimeout(timer)
|
|
@@ -3776,8 +3887,8 @@ return _el$
|
|
|
3776
3887
|
}
|
|
3777
3888
|
function FirstRunWizard(props){const icons=useIcons()
|
|
3778
3889
|
const dialogs=useDialogs(props.api)
|
|
3779
|
-
const [active,setActive]=
|
|
3780
|
-
const [step,setStep]=
|
|
3890
|
+
const [active,setActive]=createSignal14(0)
|
|
3891
|
+
const [step,setStep]=createSignal14(0)
|
|
3781
3892
|
const theme=()=>props.api.theme.current
|
|
3782
3893
|
const sections=SECTION_DEFINITIONS.filter((section)=>supportsSidebarSection(props.api,section.name))
|
|
3783
3894
|
const finishIndex=sections.length
|
|
@@ -3818,7 +3929,7 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
3818
3929
|
},{key:"return",cmd:`${PLUGIN_ID}.wizard.select`
|
|
3819
3930
|
}]
|
|
3820
3931
|
})
|
|
3821
|
-
|
|
3932
|
+
onCleanup11(unregister)
|
|
3822
3933
|
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
3823
3934
|
},get children(){return [(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` Navigator setup`),_el$4=_$createElement("text"),_el$5=_$createTextNode(`Step `),_el$6=_$createTextNode(`/`),_el$7=_$createTextNode(` \xB7 `)
|
|
3824
3935
|
_$insertNode(_el$,_el$2)
|
|
@@ -3845,7 +3956,7 @@ return _p$
|
|
|
3845
3956
|
},{e:undefined,t:undefined,a:undefined
|
|
3846
3957
|
})
|
|
3847
3958
|
return _el$
|
|
3848
|
-
})(),_$createComponent(
|
|
3959
|
+
})(),_$createComponent(Show5,{get when(){return configuring()
|
|
3849
3960
|
},get fallback(){return _$createComponent(OnboardingStep,{get api(){return props.api
|
|
3850
3961
|
},get preferences(){return props.preferences
|
|
3851
3962
|
},get step(){return ONBOARDING_STEPS[step()]
|
|
@@ -3902,7 +4013,7 @@ _$insertNode(_el$,_el$6)
|
|
|
3902
4013
|
_$setProp(_el$,"flexDirection","row")
|
|
3903
4014
|
_$setProp(_el$,"justifyContent","space-between")
|
|
3904
4015
|
_$setProp(_el$2,"flexGrow",1)
|
|
3905
|
-
_$insert(_el$2,_$createComponent(
|
|
4016
|
+
_$insert(_el$2,_$createComponent(Show6,{get when(){return props.onRefresh
|
|
3906
4017
|
},get children(){var _el$3=_$createElement("text"),_el$4=_$createTextNode(` Refresh (`),_el$5=_$createTextNode(`)`)
|
|
3907
4018
|
_$insertNode(_el$3,_el$4)
|
|
3908
4019
|
_$insertNode(_el$3,_el$5)
|
|
@@ -3965,7 +4076,7 @@ const dialogs=useDialogs(props.api)
|
|
|
3965
4076
|
const theme=()=>props.api.theme.current
|
|
3966
4077
|
const dimensions=useTerminalDimensions6()
|
|
3967
4078
|
const scroll=useDialogScroll()
|
|
3968
|
-
const [active,setActive]=
|
|
4079
|
+
const [active,setActive]=createSignal15("apply")
|
|
3969
4080
|
let body
|
|
3970
4081
|
const prefix=`${PLUGIN_ID}.preset-preview`
|
|
3971
4082
|
function activate(action){if(!props.valid()){dialogs.close()
|
|
@@ -3994,8 +4105,8 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
3994
4105
|
},{key:"ctrl+r",cmd:`${prefix}.refresh`
|
|
3995
4106
|
}]
|
|
3996
4107
|
})
|
|
3997
|
-
|
|
3998
|
-
|
|
4108
|
+
onCleanup12(unregister)
|
|
4109
|
+
createEffect9(()=>{if(!props.valid())
|
|
3999
4110
|
dialogs.close()
|
|
4000
4111
|
})
|
|
4001
4112
|
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
@@ -4036,7 +4147,7 @@ _$setProp(_el$6,"gap",1)
|
|
|
4036
4147
|
_$insert(_el$6,()=>props.children)
|
|
4037
4148
|
_$effect((_$p)=>_$setProp(_el$5,"height",Math.min(Math.max(2,Math.floor(dimensions().height*0.75)-14),Math.max(1,props.rowCount*3-1)),_$p))
|
|
4038
4149
|
return _el$5
|
|
4039
|
-
})(),_$createComponent(
|
|
4150
|
+
})(),_$createComponent(Show7,{get when(){return props.blocked||props.notice
|
|
4040
4151
|
},get children(){var _el$7=_$createElement("box"),_el$8=_$createElement("text"),_el$9=_$createElement("text")
|
|
4041
4152
|
_$insertNode(_el$7,_el$8)
|
|
4042
4153
|
_$insertNode(_el$7,_el$9)
|
|
@@ -4127,7 +4238,7 @@ return _el$6
|
|
|
4127
4238
|
function McpPresetPreview(props){const dialogs=useDialogs(props.api)
|
|
4128
4239
|
const icons=useIcons()
|
|
4129
4240
|
const model=createMcpPresetPreview(props.controller,props.preferences,props.name)
|
|
4130
|
-
|
|
4241
|
+
onMount3(model.refresh)
|
|
4131
4242
|
const rows=createMemo3(()=>mcpPreviewRows(model,icons))
|
|
4132
4243
|
const count=(change)=>model.preview().rows.filter((row)=>row.change===change).length
|
|
4133
4244
|
return _$createComponent(PresetPreviewFrame,{get api(){return props.api
|
|
@@ -4288,14 +4399,14 @@ function SettingsBinding(props){const unregister=props.api.keymap.registerLayer(
|
|
|
4288
4399
|
},cmd:`${PLUGIN_ID}.settings`
|
|
4289
4400
|
}]
|
|
4290
4401
|
})
|
|
4291
|
-
|
|
4402
|
+
onCleanup14(unregister)
|
|
4292
4403
|
return _$createElement("box")
|
|
4293
4404
|
}
|
|
4294
4405
|
|
|
4295
4406
|
|
|
4296
4407
|
function PermissionModeBinding(props){let applying=false
|
|
4297
4408
|
let observed
|
|
4298
|
-
|
|
4409
|
+
createEffect12(()=>{if(!props.preferences.ready())
|
|
4299
4410
|
return
|
|
4300
4411
|
const preferred=props.preferences.autoApprovePermissions()
|
|
4301
4412
|
const current=currentPermissionMode(props.api)
|
|
@@ -4316,14 +4427,14 @@ observed=current
|
|
|
4316
4427
|
props.preferences.setAutoApprovePermissions(current)
|
|
4317
4428
|
})
|
|
4318
4429
|
if(unsubscribe)
|
|
4319
|
-
|
|
4430
|
+
onCleanup15(unsubscribe)
|
|
4320
4431
|
return _$createElement("box")
|
|
4321
4432
|
}
|
|
4322
4433
|
|
|
4323
4434
|
|
|
4324
4435
|
|
|
4325
4436
|
function SettingsFooterButton(props){const icons=useIcons()
|
|
4326
|
-
const [hovered,setHovered]=
|
|
4437
|
+
const [hovered,setHovered]=createSignal16(false)
|
|
4327
4438
|
const theme=()=>props.api.theme.current
|
|
4328
4439
|
return _$createComponent(IconControl,{id:`${PLUGIN_ID}.settings.footer`,get icon(){return icons.icon("settings")
|
|
4329
4440
|
},get foregroundColor(){return _$memo(()=>!!hovered())()?theme().text:theme().textMuted
|
|
@@ -4334,6 +4445,23 @@ return _$createComponent(IconControl,{id:`${PLUGIN_ID}.settings.footer`,get icon
|
|
|
4334
4445
|
|
|
4335
4446
|
|
|
4336
4447
|
|
|
4448
|
+
var services=new WeakMap
|
|
4449
|
+
function createSlot(){const [read,write]=createSignal17()
|
|
4450
|
+
return{read,write}}
|
|
4451
|
+
function slot(api){let entry=services.get(api)
|
|
4452
|
+
if(!entry){entry=createSlot()
|
|
4453
|
+
services.set(api,entry)
|
|
4454
|
+
}
|
|
4455
|
+
return entry
|
|
4456
|
+
}
|
|
4457
|
+
function registerNavigatorAboutServices(api,value){const entry=slot(api)
|
|
4458
|
+
entry.write(value)
|
|
4459
|
+
return()=>{if(entry.read()===value)
|
|
4460
|
+
entry.write(undefined)
|
|
4461
|
+
}}
|
|
4462
|
+
function getNavigatorAboutServices(api){return slot(api).read()
|
|
4463
|
+
}
|
|
4464
|
+
|
|
4337
4465
|
var ACTIONS=[{key:"h",label:"Toggle sidebar",icon:"sections",group:"navigate",command:"session.sidebar.toggle",section:undefined
|
|
4338
4466
|
},{key:"t",label:"Todo",icon:"todo",group:"navigate",command:`${PLUGIN_ID}.focus.todo`,section:"todo"},{key:"a",label:"Subagents",icon:"subagents",group:"navigate",command:`${PLUGIN_ID}.focus.subagents`,section:"subagents"
|
|
4339
4467
|
},{key:"s",label:"Skills",icon:"skills",group:"navigate",command:`${PLUGIN_ID}.focus.skills`,section:"skills"
|
|
@@ -4348,7 +4476,7 @@ var CANCEL_COMMAND=`${PLUGIN_ID}.sidebar-shortcuts.cancel`
|
|
|
4348
4476
|
var MODE=`${PLUGIN_ID}.sidebar-shortcuts`
|
|
4349
4477
|
var DEFAULT_TIMEOUT_MS=5000
|
|
4350
4478
|
function createSidebarShortcutMode(api,options={}){const actions=sidebarShortcutActions(api)
|
|
4351
|
-
const [active,setActive]=
|
|
4479
|
+
const [active,setActive]=createSignal18(false)
|
|
4352
4480
|
const timeoutMs=options.timeoutMs??DEFAULT_TIMEOUT_MS
|
|
4353
4481
|
let shortcutKey=""
|
|
4354
4482
|
let unregisterBinding
|
|
@@ -4488,133 +4616,25 @@ function StartupSessionBinding(props){if(props.api.keymap.on){const unregister=p
|
|
|
4488
4616
|
return
|
|
4489
4617
|
queueMicrotask(()=>void props.controller.start())
|
|
4490
4618
|
})
|
|
4491
|
-
|
|
4619
|
+
onCleanup16(unregister)
|
|
4492
4620
|
} else
|
|
4493
|
-
|
|
4621
|
+
createEffect13(()=>{if(!props.controller.enabled())
|
|
4494
4622
|
return
|
|
4495
4623
|
const unregister=props.api.keymap.registerLayer({mode:"global",priority:2001,commands:[{name:"session.new",title:"New session",category:"Session",namespace:"palette",enabled:props.controller.enabled,run:()=>void props.controller.start()
|
|
4496
4624
|
}]
|
|
4497
4625
|
})
|
|
4498
|
-
|
|
4626
|
+
onCleanup16(unregister)
|
|
4499
4627
|
})
|
|
4500
|
-
|
|
4501
|
-
|
|
4628
|
+
onMount5(()=>void props.controller.initialize())
|
|
4629
|
+
onCleanup16(props.controller.dispose)
|
|
4502
4630
|
return _$createElement("box")
|
|
4503
4631
|
}
|
|
4504
|
-
function versionParts(value){const match=/^v?(\d+)\.(\d+)\.(\d+)(?:-([^+]+))?/.exec(value)
|
|
4505
|
-
return match?{numbers:match.slice(1,4).map(Number),prerelease:match[4]||undefined}:undefined
|
|
4506
|
-
}
|
|
4507
|
-
function isNewerVersion(latest,current){const next=versionParts(latest)
|
|
4508
|
-
const installed=versionParts(current)
|
|
4509
|
-
if(!next||!installed)
|
|
4510
|
-
return false
|
|
4511
|
-
for(let index=0;index<3; index++){if(next.numbers[index]!==installed.numbers[index])
|
|
4512
|
-
return next.numbers[index]>installed.numbers[index]
|
|
4513
|
-
}
|
|
4514
|
-
return installed.prerelease!==undefined&&next.prerelease===undefined
|
|
4515
|
-
}
|
|
4516
|
-
function changesSince(source,previous,current){const entries=[]
|
|
4517
|
-
let entry
|
|
4518
|
-
for(const line of source.split(/\r?\n/)){const heading=/^## \[(\d+\.\d+\.\d+(?:-[\w.-]+)?)\]/.exec(line)
|
|
4519
|
-
if(heading){entry=isNewerVersion(heading[1],previous)&&!isNewerVersion(heading[1],current)?{version:heading[1],changes:[]}:undefined
|
|
4520
|
-
if(entry)
|
|
4521
|
-
entries.push(entry)
|
|
4522
|
-
continue
|
|
4523
|
-
}
|
|
4524
|
-
if(entry&&line.startsWith("- "))
|
|
4525
|
-
entry.changes.push(line.slice(2))
|
|
4526
|
-
}
|
|
4527
|
-
return entries.filter((candidate)=>candidate.changes.length>0)
|
|
4528
|
-
}
|
|
4529
|
-
async function readBundledChangelog(){const packaged=Bun.file(new URL("../CHANGELOG.md",import.meta.url))
|
|
4530
|
-
if(await packaged.exists())
|
|
4531
|
-
return packaged.text()
|
|
4532
|
-
return Bun.file(new URL("../../../../CHANGELOG.md",import.meta.url)).text()
|
|
4533
|
-
}
|
|
4534
|
-
|
|
4535
|
-
|
|
4536
|
-
|
|
4537
4632
|
|
|
4538
4633
|
|
|
4539
4634
|
|
|
4540
|
-
|
|
4541
|
-
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
function UpgradeNotesDialog(props){const dimensions=useTerminalDimensions9()
|
|
4548
|
-
const dialogs=useDialogs(props.api)
|
|
4549
|
-
const icons=useIcons()
|
|
4550
|
-
const theme=()=>props.api.theme.current
|
|
4551
|
-
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
4552
|
-
},lift:true,get children(){return [(()=>{var _el$=_$createElement("text"),_el$2=_$createTextNode(` Navigator updated`)
|
|
4553
|
-
_$insertNode(_el$,_el$2)
|
|
4554
|
-
_$insert(_el$,()=>icons.icon("update"),_el$2)
|
|
4555
|
-
_$effect((_p$)=>{var _v$=theme().text,_v$2=TextAttributes17.BOLD
|
|
4556
|
-
_v$!==_p$.e&&(_p$.e=_$setProp(_el$,"fg",_v$,_p$.e))
|
|
4557
|
-
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$,"attributes",_v$2,_p$.t))
|
|
4558
|
-
return _p$
|
|
4559
|
-
},{e:undefined,t:undefined
|
|
4560
|
-
})
|
|
4561
|
-
return _el$
|
|
4562
|
-
})(),(()=>{var _el$3=_$createElement("text"),_el$4=_$createTextNode(`Changes from `),_el$5=_$createTextNode(` to `)
|
|
4563
|
-
_$insertNode(_el$3,_el$4)
|
|
4564
|
-
_$insertNode(_el$3,_el$5)
|
|
4565
|
-
_$insert(_el$3,()=>props.previous,_el$5)
|
|
4566
|
-
_$insert(_el$3,()=>props.current,null)
|
|
4567
|
-
_$effect((_$p)=>_$setProp(_el$3,"fg",theme().textMuted,_$p))
|
|
4568
|
-
return _el$3
|
|
4569
|
-
})(),(()=>{var _el$6=_$createElement("scrollbox"),_el$7=_$createElement("box")
|
|
4570
|
-
_$insertNode(_el$6,_el$7)
|
|
4571
|
-
_$setProp(_el$6,"scrollX",false)
|
|
4572
|
-
_$setProp(_el$6,"horizontalScrollbarOptions",{visible:false
|
|
4573
|
-
})
|
|
4574
|
-
_$setProp(_el$6,"verticalScrollbarOptions",{visible:true
|
|
4575
|
-
})
|
|
4576
|
-
_$setProp(_el$7,"gap",1)
|
|
4577
|
-
_$setProp(_el$7,"paddingRight",1)
|
|
4578
|
-
_$insert(_el$7,_$createComponent(For11,{get each(){return props.entries
|
|
4579
|
-
},children:(entry)=>(()=>{var _el$0=_$createElement("box"),_el$1=_$createElement("text"),_el$10=_$createTextNode(`Navigator `)
|
|
4580
|
-
_$insertNode(_el$0,_el$1)
|
|
4581
|
-
_$setProp(_el$0,"gap",1)
|
|
4582
|
-
_$insertNode(_el$1,_el$10)
|
|
4583
|
-
_$insert(_el$1,()=>entry.version,null)
|
|
4584
|
-
_$insert(_el$0,_$createComponent(For11,{get each(){return entry.changes
|
|
4585
|
-
},children:(change)=>(()=>{var _el$11=_$createElement("text"),_el$12=_$createTextNode(` `)
|
|
4586
|
-
_$insertNode(_el$11,_el$12)
|
|
4587
|
-
_$setProp(_el$11,"wrapMode","word")
|
|
4588
|
-
_$insert(_el$11,()=>icons.icon("selected"),_el$12)
|
|
4589
|
-
_$insert(_el$11,change,null)
|
|
4590
|
-
_$effect((_$p)=>_$setProp(_el$11,"fg",theme().text,_$p))
|
|
4591
|
-
return _el$11
|
|
4592
|
-
})()
|
|
4593
|
-
}),null)
|
|
4594
|
-
_$effect((_p$)=>{var _v$3=theme().accent,_v$4=TextAttributes17.BOLD
|
|
4595
|
-
_v$3!==_p$.e&&(_p$.e=_$setProp(_el$1,"fg",_v$3,_p$.e))
|
|
4596
|
-
_v$4!==_p$.t&&(_p$.t=_$setProp(_el$1,"attributes",_v$4,_p$.t))
|
|
4597
|
-
return _p$
|
|
4598
|
-
},{e:undefined,t:undefined
|
|
4599
|
-
})
|
|
4600
|
-
return _el$0
|
|
4601
|
-
})()
|
|
4602
|
-
}))
|
|
4603
|
-
_$effect((_$p)=>_$setProp(_el$6,"height",Math.max(4,Math.min(16,Math.floor(dimensions().height / 2))),_$p))
|
|
4604
|
-
return _el$6
|
|
4605
|
-
})(),_$createComponent(SelectionBox,{get backgroundColor(){return theme().primary
|
|
4606
|
-
},paddingLeft:1,paddingRight:1,onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
4607
|
-
dialogs.back()
|
|
4608
|
-
},get children(){var _el$8=_$createElement("text")
|
|
4609
|
-
_$insertNode(_el$8,_$createTextNode(`Continue`))
|
|
4610
|
-
_$effect((_$p)=>_$setProp(_el$8,"fg",theme().selectedListItemText,_$p))
|
|
4611
|
-
return _el$8
|
|
4612
|
-
}})]
|
|
4613
|
-
}})
|
|
4614
|
-
}
|
|
4615
4635
|
function UpgradeNotesBinding(props){let pending
|
|
4616
4636
|
let disposed=false
|
|
4617
|
-
|
|
4637
|
+
onMount6(async ()=>{const previous=await props.preferences.claimNavigatorUpgrade(props.version)
|
|
4618
4638
|
if(!previous||disposed)
|
|
4619
4639
|
return
|
|
4620
4640
|
try{let show=function(){if(disposed||props.api.lifecycle.signal?.aborted)
|
|
@@ -4627,12 +4647,15 @@ createDialogStack(props.api,props.preferences.lspIconStyle,()=>true,props.prefer
|
|
|
4627
4647
|
},entries
|
|
4628
4648
|
}),"large")
|
|
4629
4649
|
}
|
|
4650
|
+
const path=import.meta.url.includes("/dist/")?"./upgrade-notes.js":"./upgrade-notes-content"
|
|
4651
|
+
const{changesSince,readBundledChangelog,UpgradeNotesDialog
|
|
4652
|
+
}=await import(path)
|
|
4630
4653
|
const entries=changesSince(await (props.read??readBundledChangelog)(),previous,props.version)
|
|
4631
4654
|
if(entries.length===0||disposed)
|
|
4632
4655
|
return
|
|
4633
4656
|
show()
|
|
4634
4657
|
} catch{}})
|
|
4635
|
-
|
|
4658
|
+
onCleanup17(()=>{disposed=true
|
|
4636
4659
|
clearTimeout(pending)
|
|
4637
4660
|
})
|
|
4638
4661
|
return _$createElement("box")
|
|
@@ -4647,6 +4670,16 @@ return _$createElement("box")
|
|
|
4647
4670
|
|
|
4648
4671
|
|
|
4649
4672
|
|
|
4673
|
+
|
|
4674
|
+
|
|
4675
|
+
|
|
4676
|
+
|
|
4677
|
+
|
|
4678
|
+
|
|
4679
|
+
|
|
4680
|
+
|
|
4681
|
+
|
|
4682
|
+
|
|
4650
4683
|
|
|
4651
4684
|
|
|
4652
4685
|
|
|
@@ -4727,6 +4760,9 @@ return _el$
|
|
|
4727
4760
|
})()
|
|
4728
4761
|
}
|
|
4729
4762
|
|
|
4763
|
+
|
|
4764
|
+
|
|
4765
|
+
|
|
4730
4766
|
function matchesFilter(query,...values){const needle=query.trim().toLocaleLowerCase()
|
|
4731
4767
|
return !needle||values.some((value)=>value?.toLocaleLowerCase().includes(needle))
|
|
4732
4768
|
}
|
|
@@ -4750,9 +4786,9 @@ return false
|
|
|
4750
4786
|
return true
|
|
4751
4787
|
}
|
|
4752
4788
|
function createSidebarInteraction(api,showHelp=()=>openKeyboardHelp(api)){const descriptors=new Map
|
|
4753
|
-
const [selectedId,setSelectedId]=
|
|
4754
|
-
const [focusWithin,setFocusWithin]=
|
|
4755
|
-
const [revision,setRevision]=
|
|
4789
|
+
const [selectedId,setSelectedId]=createSignal21()
|
|
4790
|
+
const [focusWithin,setFocusWithin]=createSignal21(false)
|
|
4791
|
+
const [revision,setRevision]=createSignal21(0)
|
|
4756
4792
|
let titleRoot
|
|
4757
4793
|
let contentRoot
|
|
4758
4794
|
let targetedRoot
|
|
@@ -5021,14 +5057,14 @@ else if(highlighted)
|
|
|
5021
5057
|
foregroundColor=theme.selectedListItemText
|
|
5022
5058
|
return{backgroundColor,foregroundColor}}
|
|
5023
5059
|
function useSidebarItem(api,interaction,descriptor,normalColor=()=>api.theme.current.text,mode="row"){let unregister
|
|
5024
|
-
const [hovered,setHovered]=
|
|
5060
|
+
const [hovered,setHovered]=createSignal22(false)
|
|
5025
5061
|
const disabled=()=>descriptor.disabled?.()===true
|
|
5026
5062
|
const focused=()=>Boolean(interaction?.ownsFocus()&&interaction.isSelected(descriptor.id))
|
|
5027
5063
|
const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),hovered:hovered(),disabled:disabled()},normalColor(),mode)
|
|
5028
5064
|
const ref=(renderable)=>{unregister?.()
|
|
5029
5065
|
unregister=interaction?.register({...descriptor,renderable})
|
|
5030
5066
|
}
|
|
5031
|
-
|
|
5067
|
+
onCleanup19(()=>unregister?.())
|
|
5032
5068
|
return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
|
|
5033
5069
|
},activate(event){if(interaction)
|
|
5034
5070
|
return interaction.mouseActivate(descriptor.id,event)
|
|
@@ -5039,7 +5075,7 @@ return true
|
|
|
5039
5075
|
}}}
|
|
5040
5076
|
function LspBadge(props){const icons=useIcons()
|
|
5041
5077
|
const isKnown=lspIconName(props.id)!==undefined
|
|
5042
|
-
const [showName,setShowName]=
|
|
5078
|
+
const [showName,setShowName]=createSignal23(false)
|
|
5043
5079
|
const statusColor=()=>props.status==="connected"?props.api.theme.current.success:props.api.theme.current.error
|
|
5044
5080
|
if(!isKnown){return(()=>{var _el$=_$createElement("text")
|
|
5045
5081
|
_$setProp(_el$,"flexShrink",1)
|
|
@@ -5064,7 +5100,7 @@ _$setProp(_el$2,"flexShrink",0)
|
|
|
5064
5100
|
_$insert(_el$2,()=>lspIcon(props.id,props.iconStyle??icons.style()))
|
|
5065
5101
|
_$effect((_$p)=>_$setProp(_el$2,"fg",item.foregroundColor(),_$p))
|
|
5066
5102
|
return _el$2
|
|
5067
|
-
})(),_$createComponent(
|
|
5103
|
+
})(),_$createComponent(Show11,{get when(){return showName()
|
|
5068
5104
|
},get children(){var _el$3=_$createElement("text")
|
|
5069
5105
|
_$setProp(_el$3,"flexShrink",0)
|
|
5070
5106
|
_$setProp(_el$3,"wrapMode","none")
|
|
@@ -5082,7 +5118,7 @@ return _el$3
|
|
|
5082
5118
|
|
|
5083
5119
|
|
|
5084
5120
|
|
|
5085
|
-
function createListVisibility(options){const [expanded,setExpanded]=
|
|
5121
|
+
function createListVisibility(options){const [expanded,setExpanded]=createSignal24(false)
|
|
5086
5122
|
let previousKey
|
|
5087
5123
|
let previousLimit
|
|
5088
5124
|
const canToggle=createMemo8(()=>options.limit()>0&&options.items().length>options.limit())
|
|
@@ -5119,7 +5155,7 @@ else
|
|
|
5119
5155
|
props.visibility.showAll()
|
|
5120
5156
|
queueMicrotask(()=>props.interaction?.select(id))
|
|
5121
5157
|
}})
|
|
5122
|
-
return _$createComponent(
|
|
5158
|
+
return _$createComponent(Show12,{get when(){return props.visibility.canToggle()
|
|
5123
5159
|
},get children(){return _$createComponent(SelectionBox,{ref(r$){var _ref$=item.ref
|
|
5124
5160
|
typeof _ref$==="function"?_ref$(r$):item.ref=r$
|
|
5125
5161
|
},id,paddingLeft:1,paddingRight:1,get backgroundColor(){return item.backgroundColor()
|
|
@@ -5169,10 +5205,10 @@ result += segment
|
|
|
5169
5205
|
}
|
|
5170
5206
|
return result + ellipsis
|
|
5171
5207
|
}
|
|
5172
|
-
function SectionHeaderControl(props){const [width,setWidth]=
|
|
5208
|
+
function SectionHeaderControl(props){const [width,setWidth]=createSignal25()
|
|
5173
5209
|
const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,position:()=>props.position,disabled:props.action.disabled,activate:props.action.onActivate
|
|
5174
5210
|
},()=>props.api.theme.current.accent,"control")
|
|
5175
|
-
|
|
5211
|
+
createEffect14(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
|
|
5176
5212
|
const label=()=>width()===undefined||props.iconOnly?props.action.label():truncateEnd(props.action.label(),width()-2)
|
|
5177
5213
|
return _$createComponent(SelectionBox,{ref:(node)=>control.ref(node),get id(){return props.action.id
|
|
5178
5214
|
},get iconOnly(){return props.iconOnly
|
|
@@ -5194,7 +5230,7 @@ return _el$
|
|
|
5194
5230
|
}})
|
|
5195
5231
|
}
|
|
5196
5232
|
function Section(props){const icons=useIcons()
|
|
5197
|
-
const [headerWidth,setHeaderWidth]=
|
|
5233
|
+
const [headerWidth,setHeaderWidth]=createSignal26(0)
|
|
5198
5234
|
const icon=()=>props.section?icons.section(props.section):props.icon
|
|
5199
5235
|
const theme=()=>props.api.theme.current
|
|
5200
5236
|
const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
|
|
@@ -5236,7 +5272,7 @@ _$setProp(_el$7,"flexGrow",1)
|
|
|
5236
5272
|
_$setProp(_el$7,"minWidth",0)
|
|
5237
5273
|
_$setProp(_el$7,"justifyContent","flex-end")
|
|
5238
5274
|
_$insert(_el$7,()=>props.headerControls,null)
|
|
5239
|
-
_$insert(_el$7,_$createComponent(
|
|
5275
|
+
_$insert(_el$7,_$createComponent(Show13,{get when(){return props.headerAction
|
|
5240
5276
|
},children:(action)=>_$createComponent(SectionHeaderControl,{get api(){return props.api
|
|
5241
5277
|
},get interaction(){return props.interaction
|
|
5242
5278
|
},get action(){return action()
|
|
@@ -5244,7 +5280,7 @@ _$insert(_el$7,_$createComponent(Show12,{get when(){return props.headerAction
|
|
|
5244
5280
|
},get position(){return{section:props.navigationSection??0,row:0,column:1
|
|
5245
5281
|
}}})
|
|
5246
5282
|
}),null)
|
|
5247
|
-
_$insert(_el$7,_$createComponent(
|
|
5283
|
+
_$insert(_el$7,_$createComponent(Show13,{get when(){return props.summary
|
|
5248
5284
|
},get children(){var _el$8=_$createElement("text")
|
|
5249
5285
|
_$setProp(_el$8,"wrapMode","none")
|
|
5250
5286
|
_$setProp(_el$8,"truncate",true)
|
|
@@ -5261,7 +5297,7 @@ return _el$8
|
|
|
5261
5297
|
return _el$7
|
|
5262
5298
|
})()]
|
|
5263
5299
|
}}),null)
|
|
5264
|
-
_$insert(_el$,_$createComponent(
|
|
5300
|
+
_$insert(_el$,_$createComponent(Show13,{get when(){return props.open
|
|
5265
5301
|
},get children(){return props.children
|
|
5266
5302
|
}}),null)
|
|
5267
5303
|
return _el$
|
|
@@ -5279,7 +5315,7 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
5279
5315
|
},sectionId:`${PLUGIN_ID}.section.lsp`,get navigationSection(){return navigationSection()
|
|
5280
5316
|
},title:"LSP",section:"lsp",get summary(){return `${connected()}/${list().length}`
|
|
5281
5317
|
},get open(){return props.preferences.expanded().lsp
|
|
5282
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("lsp"),get children(){return [_$createComponent(
|
|
5318
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("lsp"),get children(){return [_$createComponent(Show14,{get when(){return list().length>0
|
|
5283
5319
|
},get fallback(){return(()=>{var _el$2=_$createElement("text")
|
|
5284
5320
|
_$insert(_el$2,()=>disabled()?"LSP is disabled":"Activates as files are read")
|
|
5285
5321
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -5404,7 +5440,7 @@ _$insert(_el$,_$createComponent(McpBulkAction,{get api(){return props.api
|
|
|
5404
5440
|
}),null)
|
|
5405
5441
|
_$effect((_$p)=>_$setProp(_el$,"paddingBottom",model.bulkRunning()||model.bulk().status==="error"?1:0,_$p))
|
|
5406
5442
|
return _el$
|
|
5407
|
-
})(),_$createComponent(
|
|
5443
|
+
})(),_$createComponent(Show15,{get when(){return model.bulkRunning()
|
|
5408
5444
|
},get children(){var _el$2=_$createElement("text"),_el$3=_$createTextNode(` `),_el$4=_$createTextNode(`/`),_el$5=_$createTextNode(`\u2026`)
|
|
5409
5445
|
_$insertNode(_el$2,_el$3)
|
|
5410
5446
|
_$insertNode(_el$2,_el$4)
|
|
@@ -5414,7 +5450,7 @@ _$insert(_el$2,()=>model.bulk().completed,_el$4)
|
|
|
5414
5450
|
_$insert(_el$2,()=>model.bulk().total,_el$5)
|
|
5415
5451
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
5416
5452
|
return _el$2
|
|
5417
|
-
}}),_$createComponent(
|
|
5453
|
+
}}),_$createComponent(Show15,{get when(){return model.bulk().status==="error"
|
|
5418
5454
|
},get children(){return _$createComponent(McpBulkAction,{get api(){return props.api
|
|
5419
5455
|
},get interaction(){return props.interaction
|
|
5420
5456
|
},id:`${PLUGIN_ID}.mcp.retry-all`,get position(){return{section:props.navigationSection,row:3,column:0
|
|
@@ -5494,7 +5530,7 @@ return _el$4
|
|
|
5494
5530
|
function RequestErrorRow(props){const icons=useIcons()
|
|
5495
5531
|
const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>props.position,disabled:()=>!props.state.error?.retryable||props.state.status==="loading"||props.state.status==="refreshing",activate:props.onRetry
|
|
5496
5532
|
})
|
|
5497
|
-
return _$createComponent(
|
|
5533
|
+
return _$createComponent(Show16,{get when(){return props.state.error
|
|
5498
5534
|
},children:(error)=>_$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
|
|
5499
5535
|
},flexDirection:"row",gap:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return item.backgroundColor()
|
|
5500
5536
|
},get onMouseOver(){return item.onMouseOver
|
|
@@ -5509,7 +5545,7 @@ _$insert(_el$,()=>icons.icon("error"),_el$2)
|
|
|
5509
5545
|
_$insert(_el$,()=>error().message,null)
|
|
5510
5546
|
_$effect((_$p)=>_$setProp(_el$,"fg",item.focused()?item.foregroundColor():props.api.theme.current.error,_$p))
|
|
5511
5547
|
return _el$
|
|
5512
|
-
})(),_$createComponent(
|
|
5548
|
+
})(),_$createComponent(Show16,{get when(){return error().retryable
|
|
5513
5549
|
},get children(){var _el$3=_$createElement("text"),_el$4=_$createTextNode(` Retry`)
|
|
5514
5550
|
_$insertNode(_el$3,_el$4)
|
|
5515
5551
|
_$setProp(_el$3,"flexShrink",0)
|
|
@@ -5524,7 +5560,7 @@ function SectionRequestBody(props){const icons=useIcons()
|
|
|
5524
5560
|
const pending=()=>props.state.status==="loading"
|
|
5525
5561
|
return(()=>{var _el$5=_$createElement("box")
|
|
5526
5562
|
_$insert(_el$5,_$createComponent(RequestErrorRow,props),null)
|
|
5527
|
-
_$insert(_el$5,_$createComponent(
|
|
5563
|
+
_$insert(_el$5,_$createComponent(Show16,{get when(){return _$memo(()=>!!pending())()&&!props.hasItems
|
|
5528
5564
|
},get children(){var _el$6=_$createElement("text"),_el$7=_$createTextNode(` `)
|
|
5529
5565
|
_$insertNode(_el$6,_el$7)
|
|
5530
5566
|
_$insert(_el$6,()=>icons.icon("pending"),_el$7)
|
|
@@ -5532,10 +5568,10 @@ _$insert(_el$6,()=>props.loading,null)
|
|
|
5532
5568
|
_$effect((_$p)=>_$setProp(_el$6,"fg",props.api.theme.current.textMuted,_$p))
|
|
5533
5569
|
return _el$6
|
|
5534
5570
|
}}),null)
|
|
5535
|
-
_$insert(_el$5,_$createComponent(
|
|
5571
|
+
_$insert(_el$5,_$createComponent(Show16,{get when(){return props.hasItems
|
|
5536
5572
|
},get children(){return props.children
|
|
5537
5573
|
}}),null)
|
|
5538
|
-
_$insert(_el$5,_$createComponent(
|
|
5574
|
+
_$insert(_el$5,_$createComponent(Show16,{get when(){return _$memo(()=>!!((props.state.status==="ready"||props.state.status==="refreshing")&&!props.hasItems))()&&!props.state.error
|
|
5539
5575
|
},get children(){var _el$8=_$createElement("text"),_el$9=_$createTextNode(` `)
|
|
5540
5576
|
_$insertNode(_el$8,_el$9)
|
|
5541
5577
|
_$insert(_el$8,()=>icons.icon("info"),_el$9)
|
|
@@ -5552,8 +5588,8 @@ return _el$5
|
|
|
5552
5588
|
function createSidebarBookmark(input){const{api,interaction,row,position,favorite,disabled,onToggle
|
|
5553
5589
|
}=input
|
|
5554
5590
|
const id=`${input.id}.favorite`
|
|
5555
|
-
const [rowHovered,setRowHovered]=
|
|
5556
|
-
const [controlHovered,setControlHovered]=
|
|
5591
|
+
const [rowHovered,setRowHovered]=createSignal27(false)
|
|
5592
|
+
const [controlHovered,setControlHovered]=createSignal27(false)
|
|
5557
5593
|
const control=useSidebarItem(api,interaction,{id,position:()=>({...position(),column:0
|
|
5558
5594
|
}),disabled,activate:()=>{onToggle()
|
|
5559
5595
|
queueMicrotask(()=>interaction?.select(id))
|
|
@@ -5669,7 +5705,7 @@ return _el$2
|
|
|
5669
5705
|
function SectionFilter(props){const icons=useIcons()
|
|
5670
5706
|
let input
|
|
5671
5707
|
let unregisterInput
|
|
5672
|
-
const [inputFocused,setInputFocused]=
|
|
5708
|
+
const [inputFocused,setInputFocused]=createSignal28(false)
|
|
5673
5709
|
const theme=()=>props.api.theme.current
|
|
5674
5710
|
const item=useSidebarItem(props.api,props.interaction,{id:props.id??`filter.${props.placeholder}`,position:()=>props.position??{section:0,row:0,column:0
|
|
5675
5711
|
},activate:()=>{if(!input)
|
|
@@ -5690,7 +5726,7 @@ props.interaction.leaveFilter(input)
|
|
|
5690
5726
|
else
|
|
5691
5727
|
input?.blur()
|
|
5692
5728
|
}
|
|
5693
|
-
|
|
5729
|
+
onCleanup20(()=>unregisterInput?.())
|
|
5694
5730
|
return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
|
|
5695
5731
|
},flexDirection:"row",gap:1,marginTop:1,marginBottom:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return _$memo(()=>!!highlighted())()?theme().primary:item.backgroundColor()
|
|
5696
5732
|
},get onMouseOver(){return item.onMouseOver
|
|
@@ -5728,7 +5764,7 @@ return _p$
|
|
|
5728
5764
|
},{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined,n:undefined,s:undefined,h:undefined
|
|
5729
5765
|
})
|
|
5730
5766
|
return _el$2
|
|
5731
|
-
})(),_$createComponent(
|
|
5767
|
+
})(),_$createComponent(Show17,{get when(){return props.query
|
|
5732
5768
|
},get children(){var _el$3=_$createElement("text")
|
|
5733
5769
|
_$setProp(_el$3,"flexShrink",0)
|
|
5734
5770
|
_$setProp(_el$3,"onMouseDown",()=>props.onInput(""))
|
|
@@ -5757,7 +5793,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
5757
5793
|
}},get query(){return props.query
|
|
5758
5794
|
},placeholder:"Filter MCP...",get onInput(){return props.onQuery
|
|
5759
5795
|
}}),null)
|
|
5760
|
-
_$insert(_el$,_$createComponent(
|
|
5796
|
+
_$insert(_el$,_$createComponent(Show18,{get when(){return model.filtered().length>0
|
|
5761
5797
|
},get fallback(){return(()=>{var _el$2=_$createElement("text")
|
|
5762
5798
|
_$insertNode(_el$2,_$createTextNode(`No matching MCP servers`))
|
|
5763
5799
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -5768,7 +5804,7 @@ return _el$2
|
|
|
5768
5804
|
},get grouped(){return model.grouped
|
|
5769
5805
|
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
5770
5806
|
},get children(){return _$createComponent(For13,{get each(){return model.visibility.visible()
|
|
5771
|
-
},children:(item,index)=>[_$createComponent(
|
|
5807
|
+
},children:(item,index)=>[_$createComponent(Show18,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
|
|
5772
5808
|
},get children(){return _$createComponent(McpGroupHeader,{get api(){return props.api
|
|
5773
5809
|
},get interaction(){return props.interaction
|
|
5774
5810
|
},get bucket(){return item.bucket
|
|
@@ -5799,7 +5835,7 @@ return _el$
|
|
|
5799
5835
|
}})
|
|
5800
5836
|
}
|
|
5801
5837
|
function McpSection(props){const icons=useIcons()
|
|
5802
|
-
const [query,setQuery]=
|
|
5838
|
+
const [query,setQuery]=createSignal29("")
|
|
5803
5839
|
const model=createMcpSectionModel(props,query)
|
|
5804
5840
|
const navigationSection=()=>props.navigationSection??6
|
|
5805
5841
|
const summary=createMemo11(()=>`${model.active()}/${model.list().length}${model.errors() ? ` \xB7 ${model.errors()} ${icons.icon("error")}` : ""}`)
|
|
@@ -5939,7 +5975,7 @@ function QuickActionRow(props){const{api,interaction
|
|
|
5939
5975
|
const icons=useIcons()
|
|
5940
5976
|
const toolbar=useToolbar()
|
|
5941
5977
|
const theme=()=>api.theme.current
|
|
5942
|
-
const [width,setWidth]=
|
|
5978
|
+
const [width,setWidth]=createSignal34(0)
|
|
5943
5979
|
const shortcut=createMemo12(()=>{const bindings=api.keymap.getCommandBindings({visibility:"registered",commands:[props.action.command]
|
|
5944
5980
|
})
|
|
5945
5981
|
return api.keys.formatBindings(bindings.get(props.action.command))
|
|
@@ -5983,7 +6019,7 @@ _$insert(_el$2,()=>props.action.label)
|
|
|
5983
6019
|
_$effect((_$p)=>_$setProp(_el$2,"fg",row.foregroundColor(),_$p))
|
|
5984
6020
|
return _el$2
|
|
5985
6021
|
})()
|
|
5986
|
-
},get metadata(){return _$createComponent(
|
|
6022
|
+
},get metadata(){return _$createComponent(Show25,{get when(){return visibleShortcut()
|
|
5987
6023
|
},children:(value)=>(()=>{var _el$3=_$createElement("text")
|
|
5988
6024
|
_$setProp(_el$3,"flexShrink",0)
|
|
5989
6025
|
_$setProp(_el$3,"wrapMode","none")
|
|
@@ -5992,12 +6028,12 @@ _$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme()
|
|
|
5992
6028
|
return _el$3
|
|
5993
6029
|
})()
|
|
5994
6030
|
})
|
|
5995
|
-
},get trailing(){return _$createComponent(
|
|
6031
|
+
},get trailing(){return _$createComponent(Show25,{when:toolbar,get children(){return _$createComponent(SidebarPinControl,{get id(){return id()
|
|
5996
6032
|
},get position(){return props.position
|
|
5997
6033
|
},get pin(){return{kind:"action",id:props.action.command,icon:"bolt"
|
|
5998
6034
|
}}})
|
|
5999
6035
|
}})
|
|
6000
|
-
},get details(){return _$createComponent(
|
|
6036
|
+
},get details(){return _$createComponent(Show25,{get when(){return props.disabled
|
|
6001
6037
|
},children:(reason)=>(()=>{var _el$4=_$createElement("text")
|
|
6002
6038
|
_$setProp(_el$4,"wrapMode","word")
|
|
6003
6039
|
_$insert(_el$4,reason)
|
|
@@ -6025,18 +6061,19 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6025
6061
|
},onToggle:()=>props.preferences.toggleSectionExpanded("quick_actions"),get children(){return [_$createComponent(SidebarRowList,{get api(){return props.api
|
|
6026
6062
|
},get interaction(){return props.interaction
|
|
6027
6063
|
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6028
|
-
},get children(){return [_$createComponent(
|
|
6064
|
+
},get children(){return [_$createComponent(Show26,{get when(){return actions().length===0
|
|
6029
6065
|
},get children(){var _el$=_$createElement("text")
|
|
6030
6066
|
_$insertNode(_el$,_$createTextNode(`No quick actions selected`))
|
|
6031
6067
|
_$effect((_$p)=>_$setProp(_el$,"fg",props.api.theme.current.textMuted,_$p))
|
|
6032
6068
|
return _el$
|
|
6033
|
-
}}),_$createComponent(For16,{get each(){return visibility.visible()
|
|
6034
|
-
},children:(
|
|
6035
|
-
},
|
|
6036
|
-
},get
|
|
6069
|
+
}}),_$createComponent(For16,{get each(){return visibility.visible().map((action)=>action.command)
|
|
6070
|
+
},children:(id,index)=>_$createComponent(QuickActionRow,{get onNewSession(){return props.onNewSession
|
|
6071
|
+
},get action(){return visibility.visible()[index()]
|
|
6072
|
+
},get disabled(){return visibility.visible()[index()].disabled
|
|
6073
|
+
},get favorite(){return props.preferences.favoriteQuickActions?.().has(id)??false
|
|
6037
6074
|
},get favoriteDisabled(){return _$memo(()=>!!props.preferences.ready)()?!props.preferences.ready():false
|
|
6038
|
-
},get separator(){return _$memo(()=>!!(index()>0&&(props.preferences.favoriteQuickActions?.().has(visibility.visible()[index()-1].command)??false)))()&&!(props.preferences.favoriteQuickActions?.().has(
|
|
6039
|
-
},onToggleFavorite:()=>props.preferences.toggleFavoriteQuickAction?.(
|
|
6075
|
+
},get separator(){return _$memo(()=>!!(index()>0&&(props.preferences.favoriteQuickActions?.().has(visibility.visible()[index()-1].command)??false)))()&&!(props.preferences.favoriteQuickActions?.().has(id)??false)
|
|
6076
|
+
},onToggleFavorite:()=>props.preferences.toggleFavoriteQuickAction?.(id),get position(){return{section:navigationSection(),row:10 + index(),column:0
|
|
6040
6077
|
}}})
|
|
6041
6078
|
})]
|
|
6042
6079
|
}}),_$createComponent(ListVisibilityControl,{get api(){return props.api
|
|
@@ -6091,20 +6128,20 @@ item.activate(event)
|
|
|
6091
6128
|
|
|
6092
6129
|
|
|
6093
6130
|
function SidebarToggleBinding(props){const shortcuts=createSidebarShortcutMode(props.api)
|
|
6094
|
-
|
|
6131
|
+
createEffect16(()=>{const key=props.preferences.toggleKey()
|
|
6095
6132
|
untrack6(()=>shortcuts.bind(key))
|
|
6096
6133
|
})
|
|
6097
|
-
|
|
6134
|
+
createEffect16(()=>{if(shortcuts.active()&&(props.api.route.current.name!=="session"||props.api.ui.dialog.open||props.api.mode.current()==="modal"))
|
|
6098
6135
|
untrack6(shortcuts.cancel)
|
|
6099
6136
|
})
|
|
6100
|
-
|
|
6137
|
+
onCleanup21(shortcuts.dispose)
|
|
6101
6138
|
return(()=>{var _el$=_$createElement("box")
|
|
6102
6139
|
_$setProp(_el$,"position","absolute")
|
|
6103
6140
|
_$setProp(_el$,"top",0)
|
|
6104
6141
|
_$setProp(_el$,"left",0)
|
|
6105
6142
|
_$setProp(_el$,"width","100%")
|
|
6106
6143
|
_$setProp(_el$,"height","100%")
|
|
6107
|
-
_$insert(_el$,_$createComponent(
|
|
6144
|
+
_$insert(_el$,_$createComponent(Show27,{get when(){return shortcuts.active()
|
|
6108
6145
|
},get children(){return _$createComponent(Suspense4,{get children(){return _$createComponent(SidebarShortcutHint,{get api(){return props.api
|
|
6109
6146
|
},get actions(){return shortcuts.actions
|
|
6110
6147
|
}})
|
|
@@ -6119,11 +6156,11 @@ const unregisterCommands=props.api.keymap.registerLayer({commands:[...commands,.
|
|
|
6119
6156
|
})=>({name:name.replace(PLUGIN_ID,()=>LEGACY_PLUGIN_ID),run,enabled
|
|
6120
6157
|
}))]
|
|
6121
6158
|
})
|
|
6122
|
-
|
|
6123
|
-
|
|
6159
|
+
onCleanup21(unregisterCommands)
|
|
6160
|
+
createEffect16(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
|
|
6124
6161
|
}]
|
|
6125
6162
|
})
|
|
6126
|
-
|
|
6163
|
+
onCleanup21(unregister)
|
|
6127
6164
|
})
|
|
6128
6165
|
return _$createElement("box")
|
|
6129
6166
|
}
|
|
@@ -6143,24 +6180,53 @@ return _$createElement("box")
|
|
|
6143
6180
|
|
|
6144
6181
|
|
|
6145
6182
|
|
|
6146
|
-
function toolbarLayout(keys,width,mode){const
|
|
6147
|
-
const
|
|
6148
|
-
const
|
|
6149
|
-
const
|
|
6150
|
-
const
|
|
6151
|
-
|
|
6152
|
-
|
|
6183
|
+
function toolbarLayout(keys,width,mode,widths){const capacity=Math.max(3,Math.floor(width))
|
|
6184
|
+
const columns=Math.max(1,Math.floor((capacity + 1) / 4))
|
|
6185
|
+
const sizes={}
|
|
6186
|
+
const size=(key)=>Math.max(3,Math.min(capacity,widths?.get(key)??3))
|
|
6187
|
+
const rows=[]
|
|
6188
|
+
let overflow=[]
|
|
6189
|
+
if(mode==="wrap"){let used=0
|
|
6190
|
+
for(const key of keys){const value=size(key)
|
|
6191
|
+
if(rows.length===0||used>0&&used + 1 + value>capacity){rows.push([])
|
|
6192
|
+
used=0
|
|
6193
|
+
}
|
|
6194
|
+
rows.at(-1).push(key)
|
|
6195
|
+
sizes[key]=value
|
|
6196
|
+
used += (used?1:0) + value
|
|
6197
|
+
}} else if(keys.length>0){const fits=keys.reduce((total,key)=>total + size(key),0) + keys.length-1<=capacity
|
|
6198
|
+
const visible=[]
|
|
6199
|
+
let used=0
|
|
6200
|
+
for(const key of keys){const remaining=(fits?capacity:capacity-4)-used-(visible.length>0?1:0)
|
|
6201
|
+
if(remaining<3)
|
|
6202
|
+
break
|
|
6203
|
+
sizes[key]=Math.min(size(key),remaining)
|
|
6204
|
+
used += (visible.length>0?1:0) + sizes[key]
|
|
6205
|
+
visible.push(key)
|
|
6206
|
+
}
|
|
6207
|
+
overflow=keys.slice(visible.length)
|
|
6208
|
+
if(overflow.length>0){visible.push("toolbar:more")
|
|
6209
|
+
sizes["toolbar:more"]=3
|
|
6210
|
+
}
|
|
6211
|
+
rows.push(visible)
|
|
6212
|
+
}
|
|
6213
|
+
return{columns,overflow,rows,...widths&&{sizes}}}
|
|
6153
6214
|
|
|
6215
|
+
function toolbarPinWidth(pin){const states=Object.keys({...pin.stateIcons,...pin.stateIconLists})
|
|
6216
|
+
const count=Math.max(toolbarPinIcons(pin).length,...states.map((state)=>toolbarPinIcons(pin,state).length))
|
|
6217
|
+
const iconsWidth=Math.max(0,count*2-1)
|
|
6218
|
+
return 2 + Math.max(1,iconsWidth + (count&&pin.text?1:0) + Bun.stringWidth(pin.text??""))
|
|
6219
|
+
}
|
|
6154
6220
|
function createToolbarModel(props){const icons=useIcons()
|
|
6155
6221
|
const revision=createQuickActionRevision(props.api)
|
|
6156
6222
|
const pins=()=>props.preferences.toolbarPins?.()??[]
|
|
6157
6223
|
const needsSkills=createMemo14(()=>pins().some((pin)=>pin.kind==="skill"))
|
|
6158
6224
|
const target=createMemo14(()=>props.skills.target())
|
|
6159
|
-
|
|
6225
|
+
createEffect17(()=>{if(!needsSkills())
|
|
6160
6226
|
return
|
|
6161
6227
|
const current=target()
|
|
6162
6228
|
const release=untrack7(()=>props.skills.activate(current))
|
|
6163
|
-
|
|
6229
|
+
onCleanup22(release)
|
|
6164
6230
|
untrack7(()=>{props.skills.refresh(current).catch(()=>{})
|
|
6165
6231
|
})
|
|
6166
6232
|
})
|
|
@@ -6168,12 +6234,12 @@ function view(pin){revision()
|
|
|
6168
6234
|
if(pin.kind==="action"){const action=QUICK_ACTIONS.find((item)=>item.command===pin.id)
|
|
6169
6235
|
const state=quickActionState(props.api,pin.id)
|
|
6170
6236
|
const stateLabel=quickActionStates(props.api,pin.id).find((item)=>item.id===state)?.label
|
|
6171
|
-
return{label:quickActionLabel(props.api,action),stateLabel,
|
|
6237
|
+
return{label:quickActionLabel(props.api,action),stateLabel,icons:toolbarPinIcons(pin,state),text:pin.text,reason:quickActionDisabledReason(props.api,action)
|
|
6172
6238
|
}}
|
|
6173
6239
|
const skill=props.skills.list(target()).find((item)=>item.location===pin.location&&item.name===pin.name)
|
|
6174
6240
|
const request=props.skills.state(target())
|
|
6175
6241
|
const unavailable=request.status==="loading"?"Loading Skills":"Skill is unavailable in this workspace"
|
|
6176
|
-
return{label:pin.name,
|
|
6242
|
+
return{label:pin.name,icons:toolbarPinIcons(pin),text:pin.text,stateLabel:undefined,reason:request.error?.message??(skill?skillUnavailable(props.skills,skill):unavailable)
|
|
6177
6243
|
}}
|
|
6178
6244
|
function run(key){const pin=pins().find((item)=>toolbarPinKey(item)===key)
|
|
6179
6245
|
if(!pin)
|
|
@@ -6196,36 +6262,68 @@ const route=JSON.stringify(props.api.route.current)
|
|
|
6196
6262
|
const dialogs=createDialogStack(props.api,icons.style,()=>route===JSON.stringify(props.api.route.current),icons.multilineCorners)
|
|
6197
6263
|
activateSkill({api:props.api,controller:props.skills,access:props.preferences,skill,dialogs})
|
|
6198
6264
|
}
|
|
6199
|
-
return{pins,view,run}}
|
|
6265
|
+
return{pins,view,run,width:toolbarPinWidth}}
|
|
6266
|
+
|
|
6267
|
+
|
|
6268
|
+
|
|
6269
|
+
|
|
6200
6270
|
|
|
6201
6271
|
|
|
6202
6272
|
|
|
6203
6273
|
function ToolbarButton(props){const icons=useIcons()
|
|
6204
|
-
const
|
|
6274
|
+
const foreground=()=>props.reason?props.api.theme.current.textMuted:item.foregroundColor()
|
|
6275
|
+
const [hovered,setHovered]=createSignal35(false)
|
|
6205
6276
|
const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>({section:0,row:props.row + 1,column:props.column
|
|
6206
6277
|
}),activate:props.onRun
|
|
6207
6278
|
},()=>props.reason?props.api.theme.current.textMuted:props.api.theme.current.accent,"control")
|
|
6208
|
-
|
|
6209
|
-
|
|
6210
|
-
|
|
6279
|
+
const content=()=>[props.icons.map((icon)=>terminalIcon(icon,icons.style())).join(" "),props.text].filter(Boolean).join(" ")
|
|
6280
|
+
createEffect18(()=>props.onDetails(props.id,item.focused()||hovered()))
|
|
6281
|
+
onCleanup23(()=>props.onDetails(props.id,false))
|
|
6282
|
+
return _$createComponent(Show28,{get when(){return _$memo(()=>!!(props.width===3&&props.icons.length===1))()&&!props.text
|
|
6283
|
+
},get fallback(){return _$createComponent(SelectionBox,{get id(){return props.id
|
|
6284
|
+
},ref(r$){var _ref$2=item.ref
|
|
6285
|
+
typeof _ref$2==="function"?_ref$2(r$):item.ref=r$
|
|
6286
|
+
},get width(){return props.width
|
|
6287
|
+
},height:1,flexShrink:0,alignItems:"center",justifyContent:"center",get backgroundColor(){return item.backgroundColor()
|
|
6288
|
+
},onMouseOver:(event)=>{event.stopPropagation()
|
|
6289
|
+
item.onMouseOver()
|
|
6290
|
+
setHovered(true)
|
|
6291
|
+
},onMouseOut:(event)=>{event.stopPropagation()
|
|
6292
|
+
item.onMouseOut()
|
|
6293
|
+
setHovered(false)
|
|
6294
|
+
},onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
6295
|
+
item.activate(event)
|
|
6296
|
+
},get children(){var _el$=_$createElement("text")
|
|
6297
|
+
_$setProp(_el$,"height",1)
|
|
6298
|
+
_$setProp(_el$,"minWidth",0)
|
|
6299
|
+
_$setProp(_el$,"maxWidth","100%")
|
|
6300
|
+
_$setProp(_el$,"truncate",true)
|
|
6301
|
+
_$setProp(_el$,"wrapMode","none")
|
|
6302
|
+
_$insert(_el$,content)
|
|
6303
|
+
_$effect((_$p)=>_$setProp(_el$,"fg",foreground(),_$p))
|
|
6304
|
+
return _el$
|
|
6305
|
+
}})
|
|
6306
|
+
},get children(){return _$createComponent(IconControl,{get id(){return props.id
|
|
6211
6307
|
},ref(r$){var _ref$=item.ref
|
|
6212
6308
|
typeof _ref$==="function"?_ref$(r$):item.ref=r$
|
|
6213
|
-
},get icon(){return terminalIcon(props.
|
|
6309
|
+
},get icon(){return terminalIcon(props.icons[0]??"bolt",icons.style())
|
|
6214
6310
|
},get backgroundColor(){return item.backgroundColor()
|
|
6215
|
-
},get foregroundColor(){return
|
|
6311
|
+
},get foregroundColor(){return foreground()
|
|
6216
6312
|
},onMouseOver:()=>{item.onMouseOver()
|
|
6217
6313
|
setHovered(true)
|
|
6218
6314
|
},onMouseOut:()=>{item.onMouseOut()
|
|
6219
6315
|
setHovered(false)
|
|
6220
6316
|
},onMouseUp:(event)=>item.activate(event)
|
|
6221
6317
|
})
|
|
6318
|
+
}})
|
|
6222
6319
|
}
|
|
6223
6320
|
function SidebarToolbar(props){const model=createToolbarModel(props)
|
|
6224
6321
|
const icons=useIcons()
|
|
6225
|
-
const [width,setWidth]=
|
|
6226
|
-
const [detail,setDetail]=
|
|
6322
|
+
const [width,setWidth]=createSignal36(3)
|
|
6323
|
+
const [detail,setDetail]=createSignal36()
|
|
6227
6324
|
const keys=createMemo15(()=>model.pins().map((pin)=>toolbarPinKey(pin)))
|
|
6228
|
-
const
|
|
6325
|
+
const widths=createMemo15(()=>new Map(model.pins().map((pin)=>[toolbarPinKey(pin),model.width(pin)])))
|
|
6326
|
+
const layout=createMemo15(()=>toolbarLayout(keys(),width(),props.preferences.toolbarOverflow?.()??"menu",widths()))
|
|
6229
6327
|
const rows=createMemo15(()=>layout().rows.map((_,index)=>index))
|
|
6230
6328
|
const byKey=createMemo15(()=>new Map(model.pins().map((pin)=>[toolbarPinKey(pin),pin])))
|
|
6231
6329
|
const view=(key)=>{const pin=byKey().get(key)
|
|
@@ -6250,9 +6348,10 @@ dialogs.close()
|
|
|
6250
6348
|
model.run(option.value)
|
|
6251
6349
|
}}))
|
|
6252
6350
|
}
|
|
6253
|
-
return _$createComponent(
|
|
6351
|
+
return _$createComponent(Show29,{get when(){return keys().length>0
|
|
6254
6352
|
},get children(){var _el$=_$createElement("box")
|
|
6255
6353
|
_$setProp(_el$,"id","opencode-navigator.toolbar")
|
|
6354
|
+
_$setProp(_el$,"overflow","visible")
|
|
6256
6355
|
_$setProp(_el$,"onSizeChange",function(){setWidth(this.width)
|
|
6257
6356
|
})
|
|
6258
6357
|
_$insert(_el$,_$createComponent(For17,{get each(){return rows()
|
|
@@ -6262,7 +6361,9 @@ _$setProp(_el$2,"gap",1)
|
|
|
6262
6361
|
_$insert(_el$2,_$createComponent(For17,{get each(){return layout().rows[row]
|
|
6263
6362
|
},children:(key,column)=>_$createComponent(ToolbarButton,_$mergeProps(props,{id:`opencode-navigator.toolbar.${key}`,row,get column(){return column()
|
|
6264
6363
|
},get label(){return view(key)?.label??"More"
|
|
6265
|
-
},get
|
|
6364
|
+
},get icons(){return key==="toolbar:more"?["list"]:view(key)?.icons??["bolt"]
|
|
6365
|
+
},get text(){return view(key)?.text
|
|
6366
|
+
},get width(){return layout().sizes?.[key]??3
|
|
6266
6367
|
},get reason(){return view(key)?.reason
|
|
6267
6368
|
},onRun:()=>key==="toolbar:more"?showMore():model.run(key),onDetails:(_id,active)=>setDetail((current)=>active?key:current===key?undefined:current)
|
|
6268
6369
|
}))
|
|
@@ -6270,13 +6371,21 @@ _$insert(_el$2,_$createComponent(For17,{get each(){return layout().rows[row]
|
|
|
6270
6371
|
return _el$2
|
|
6271
6372
|
})()
|
|
6272
6373
|
}),null)
|
|
6273
|
-
_$insert(_el$,_$createComponent(
|
|
6374
|
+
_$insert(_el$,_$createComponent(Show29,{get when(){return details()
|
|
6274
6375
|
},children:(text)=>(()=>{var _el$3=_$createElement("text")
|
|
6376
|
+
_$setProp(_el$3,"position","absolute")
|
|
6377
|
+
_$setProp(_el$3,"left",0)
|
|
6378
|
+
_$setProp(_el$3,"width","100%")
|
|
6275
6379
|
_$setProp(_el$3,"height",1)
|
|
6276
6380
|
_$setProp(_el$3,"truncate",true)
|
|
6277
6381
|
_$setProp(_el$3,"wrapMode","none")
|
|
6278
6382
|
_$insert(_el$3,text)
|
|
6279
|
-
_$effect((
|
|
6383
|
+
_$effect((_p$)=>{var _v$=rows().length,_v$2=props.api.theme.current.textMuted
|
|
6384
|
+
_v$!==_p$.e&&(_p$.e=_$setProp(_el$3,"top",_v$,_p$.e))
|
|
6385
|
+
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"fg",_v$2,_p$.t))
|
|
6386
|
+
return _p$
|
|
6387
|
+
},{e:undefined,t:undefined
|
|
6388
|
+
})
|
|
6280
6389
|
return _el$3
|
|
6281
6390
|
})()
|
|
6282
6391
|
}),null)
|
|
@@ -6302,9 +6411,9 @@ const filtered=createMemo16(()=>list().filter((item)=>matchesFilter(query(),item
|
|
|
6302
6411
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("skills")??0,resetKey:()=>JSON.stringify([target().key,query()])
|
|
6303
6412
|
})
|
|
6304
6413
|
const state=createMemo16(()=>props.controller.state(target()))
|
|
6305
|
-
|
|
6414
|
+
createEffect19(()=>{const current=target()
|
|
6306
6415
|
const deactivate=untrack8(()=>props.controller.activate?.(current)??(()=>{}))
|
|
6307
|
-
|
|
6416
|
+
onCleanup24(deactivate)
|
|
6308
6417
|
untrack8(()=>void props.controller.refresh(current).catch(()=>{}))
|
|
6309
6418
|
})
|
|
6310
6419
|
async function useSkill(item){try{const isInserted=await props.controller.use(target(),item.name)
|
|
@@ -6356,7 +6465,7 @@ _$insert(_el$,()=>props.item.name,null)
|
|
|
6356
6465
|
_$effect((_$p)=>_$setProp(_el$,"fg",row.foregroundColor(),_$p))
|
|
6357
6466
|
return _el$
|
|
6358
6467
|
})()
|
|
6359
|
-
},get trailing(){return _$createComponent(
|
|
6468
|
+
},get trailing(){return _$createComponent(Show30,{when:toolbar,get children(){return _$createComponent(SidebarPinControl,{get id(){return id()
|
|
6360
6469
|
},get position(){return props.position
|
|
6361
6470
|
},get pin(){return{kind:"skill",name:props.item.name,location:props.item.location,icon:"book"
|
|
6362
6471
|
}}})
|
|
@@ -6365,7 +6474,7 @@ return _el$
|
|
|
6365
6474
|
}
|
|
6366
6475
|
function SkillsSection(props){const dialogs=useDialogs(props.api)
|
|
6367
6476
|
const toolbar=useToolbar()
|
|
6368
|
-
const [query,setQuery]=
|
|
6477
|
+
const [query,setQuery]=createSignal37("")
|
|
6369
6478
|
const model=createSkillSectionModel(props,query)
|
|
6370
6479
|
const navigationSection=()=>props.navigationSection??3
|
|
6371
6480
|
function selectSkill(item){activateSkill({api:props.api,controller:props.controller,access:props.preferences,dialogs,skill:item,onConfigure:toolbar?(navigation)=>toolbar.configure({kind:"skill",name:item.name,location:item.location,icon:"book"
|
|
@@ -6389,7 +6498,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
6389
6498
|
}},get query(){return query()
|
|
6390
6499
|
},placeholder:"Filter skills...",onInput:setQuery
|
|
6391
6500
|
}),null)
|
|
6392
|
-
_$insert(_el$,_$createComponent(
|
|
6501
|
+
_$insert(_el$,_$createComponent(Show31,{get when(){return model.filtered().length>0
|
|
6393
6502
|
},get fallback(){return(()=>{var _el$2=_$createElement("text")
|
|
6394
6503
|
_$insertNode(_el$2,_$createTextNode(`No matching skills`))
|
|
6395
6504
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -6400,7 +6509,7 @@ return _el$2
|
|
|
6400
6509
|
},get grouped(){return model.grouped
|
|
6401
6510
|
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6402
6511
|
},get children(){return _$createComponent(For18,{get each(){return model.visibility.visible()
|
|
6403
|
-
},children:(item,index)=>[_$createComponent(
|
|
6512
|
+
},children:(item,index)=>[_$createComponent(Show31,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
|
|
6404
6513
|
},get children(){var _el$4=_$createElement("text")
|
|
6405
6514
|
_$setProp(_el$4,"height",1)
|
|
6406
6515
|
_$setProp(_el$4,"wrapMode","none")
|
|
@@ -6445,18 +6554,18 @@ return _el$
|
|
|
6445
6554
|
function createSubagentSectionModel(props){const list=createMemo17(()=>props.controller.list(props.sessionID))
|
|
6446
6555
|
const recent=createMemo17(()=>props.controller.recent?.(props.sessionID)??[])
|
|
6447
6556
|
const rows=createMemo17(()=>buildSubagentView(list(),recent()))
|
|
6448
|
-
const [query,setQuery]=
|
|
6449
|
-
const [mode,setMode]=
|
|
6557
|
+
const [query,setQuery]=createSignal38("")
|
|
6558
|
+
const [mode,setMode]=createSignal38("all")
|
|
6450
6559
|
const counts=createMemo17(()=>countSubagentView(rows(),query()))
|
|
6451
6560
|
const tabs=createMemo17(()=>["all","active","recent",...counts().errors>0?["errors"]:[]])
|
|
6452
6561
|
const filtered=createMemo17(()=>filterSubagentView(rows(),mode(),query()))
|
|
6453
6562
|
const parentID=createMemo17(()=>props.api.state?.session?.get(props.sessionID)?.parentID)
|
|
6454
6563
|
const targetKey=createMemo17(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6455
|
-
|
|
6564
|
+
createEffect20(()=>{targetKey()
|
|
6456
6565
|
setQuery("")
|
|
6457
6566
|
setMode("all")
|
|
6458
6567
|
})
|
|
6459
|
-
|
|
6568
|
+
createEffect20(()=>{if(mode()!=="all"&&counts()[mode()]===0)
|
|
6460
6569
|
setMode("all")
|
|
6461
6570
|
})
|
|
6462
6571
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("subagents")??0,resetKey:()=>JSON.stringify([targetKey(),query(),mode()])
|
|
@@ -6466,10 +6575,10 @@ const now=createSubagentClock(clockKey)
|
|
|
6466
6575
|
const byId=createMemo17(()=>new Map(visibility.visible().map((item)=>[item.session.id,item])))
|
|
6467
6576
|
const ids=createMemo17(()=>visibility.visible().map((item)=>item.session.id))
|
|
6468
6577
|
const state=createMemo17(()=>props.controller.state(props.sessionID))
|
|
6469
|
-
|
|
6578
|
+
createEffect20(()=>{const sessionID=props.sessionID
|
|
6470
6579
|
targetKey()
|
|
6471
6580
|
const deactivate=untrack9(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6472
|
-
|
|
6581
|
+
onCleanup25(deactivate)
|
|
6473
6582
|
untrack9(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6474
6583
|
})
|
|
6475
6584
|
return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentID,visibility,now,byId,ids,state
|
|
@@ -6527,7 +6636,7 @@ return()=>_c$()?`${props.item.run.startedBeforeObservation ? `${icons.icon("rece
|
|
|
6527
6636
|
_$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme().textMuted,_$p))
|
|
6528
6637
|
return _el$3
|
|
6529
6638
|
})()
|
|
6530
|
-
},get details(){return [_$createComponent(
|
|
6639
|
+
},get details(){return [_$createComponent(Show32,{get when(){return props.item.run?.errorMessage
|
|
6531
6640
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createTextNode(`: `)
|
|
6532
6641
|
_$insertNode(_el$4,_el$5)
|
|
6533
6642
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -6535,12 +6644,12 @@ _$insert(_el$4,()=>cancelled()?"Cancelled":"Error",_el$5)
|
|
|
6535
6644
|
_$insert(_el$4,()=>props.item.run?.errorMessage,null)
|
|
6536
6645
|
_$effect((_$p)=>_$setProp(_el$4,"fg",row.focused()?row.foregroundColor():failed()?theme().error:theme().textMuted,_$p))
|
|
6537
6646
|
return _el$4
|
|
6538
|
-
}}),_$createComponent(
|
|
6647
|
+
}}),_$createComponent(Show32,{get when(){return props.item.unavailable
|
|
6539
6648
|
},get children(){var _el$6=_$createElement("text")
|
|
6540
6649
|
_$insertNode(_el$6,_$createTextNode(`Worker status unavailable`))
|
|
6541
6650
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().warning,_$p))
|
|
6542
6651
|
return _el$6
|
|
6543
|
-
}}),_$createComponent(
|
|
6652
|
+
}}),_$createComponent(Show32,{get when(){return _$memo(()=>props.item.status.type==="retry")()?props.item.status:undefined
|
|
6544
6653
|
},children:(status)=>(()=>{var _el$0=_$createElement("text"),_el$1=_$createTextNode(`Retry #`),_el$10=_$createTextNode(` \xB7 `),_el$11=_$createTextNode(`s \xB7 `)
|
|
6545
6654
|
_$insertNode(_el$0,_el$1)
|
|
6546
6655
|
_$insertNode(_el$0,_el$10)
|
|
@@ -6552,7 +6661,7 @@ _$insert(_el$0,()=>status().message,null)
|
|
|
6552
6661
|
_$effect((_$p)=>_$setProp(_el$0,"fg",row.focused()?row.foregroundColor():theme().warning,_$p))
|
|
6553
6662
|
return _el$0
|
|
6554
6663
|
})()
|
|
6555
|
-
}),_$createComponent(
|
|
6664
|
+
}),_$createComponent(Show32,{get when(){return _$memo(()=>!!idle())()&&!props.item.run?.errorMessage
|
|
6556
6665
|
},get children(){var _el$8=_$createElement("text")
|
|
6557
6666
|
_$insertNode(_el$8,_$createTextNode(`Finished`))
|
|
6558
6667
|
_$effect((_$p)=>_$setProp(_el$8,"fg",theme().textMuted,_$p))
|
|
@@ -6568,7 +6677,7 @@ function SubagentList(props){return _$createComponent(SidebarRowList,{get api(){
|
|
|
6568
6677
|
const item=()=>props.itemById(id)??initial
|
|
6569
6678
|
const startsGroup=()=>index()===0||props.visible[index()-1]?.group!==item().group
|
|
6570
6679
|
return(()=>{var _el$=_$createElement("box")
|
|
6571
|
-
_$insert(_el$,_$createComponent(
|
|
6680
|
+
_$insert(_el$,_$createComponent(Show33,{get when(){return startsGroup()
|
|
6572
6681
|
},get children(){var _el$2=_$createElement("text"),_el$3=_$createElement("b")
|
|
6573
6682
|
_$insertNode(_el$2,_el$3)
|
|
6574
6683
|
_$insert(_el$3,()=>item().group)
|
|
@@ -6594,7 +6703,7 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6594
6703
|
},sectionId:`${PLUGIN_ID}.section.subagents`,get navigationSection(){return navigationSection()
|
|
6595
6704
|
},title:"SUBAGENTS",section:"subagents",get summary(){return `${model.list().length} active \xB7 ${model.recent().length} recent`
|
|
6596
6705
|
},get open(){return props.preferences.expanded().subagents
|
|
6597
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(
|
|
6706
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(Show34,{get when(){return model.parentID()
|
|
6598
6707
|
},children:(id)=>_$createComponent(McpBulkAction,{get api(){return props.api
|
|
6599
6708
|
},get interaction(){return props.interaction
|
|
6600
6709
|
},id:`${PLUGIN_ID}.subagents.parent`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -6628,7 +6737,7 @@ _$insert(_el$2,_$createComponent(For20,{get each(){return model.tabs()
|
|
|
6628
6737
|
},onActivate:()=>model.setMode(value)
|
|
6629
6738
|
})
|
|
6630
6739
|
}))
|
|
6631
|
-
_$insert(_el$,_$createComponent(
|
|
6740
|
+
_$insert(_el$,_$createComponent(Show34,{get when(){return model.filtered().length===0
|
|
6632
6741
|
},get children(){var _el$3=_$createElement("text")
|
|
6633
6742
|
_$insertNode(_el$3,_$createTextNode(`No matching subagents`))
|
|
6634
6743
|
_$effect((_$p)=>_$setProp(_el$3,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -6729,7 +6838,7 @@ _$insert(_el$2,()=>icons.icon(done()?"done":active()?"busy":cancelled()?"close":
|
|
|
6729
6838
|
_$setProp(_el$3,"flexGrow",1)
|
|
6730
6839
|
_$setProp(_el$3,"wrapMode","word")
|
|
6731
6840
|
_$insert(_el$3,()=>props.item.content)
|
|
6732
|
-
_$insert(_el$,_$createComponent(
|
|
6841
|
+
_$insert(_el$,_$createComponent(Show35,{get when(){return props.item.priority==="high"||props.item.priority==="medium"||props.item.priority==="low"
|
|
6733
6842
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b"),_el$6=_$createTextNode(` `)
|
|
6734
6843
|
_$insertNode(_el$4,_el$5)
|
|
6735
6844
|
_$setProp(_el$4,"width",2)
|
|
@@ -6765,7 +6874,7 @@ _$insert(_el$2,_$createComponent(For21,{each:["all","active","finished"],childre
|
|
|
6765
6874
|
},onActivate:()=>props.setMode(value)
|
|
6766
6875
|
})
|
|
6767
6876
|
}))
|
|
6768
|
-
_$insert(_el$,_$createComponent(
|
|
6877
|
+
_$insert(_el$,_$createComponent(Show36,{get when(){return props.view.rows.length>0
|
|
6769
6878
|
},get fallback(){return _$createComponent(EmptyTodo,{get api(){return props.api
|
|
6770
6879
|
},get mode(){return props.mode
|
|
6771
6880
|
}})
|
|
@@ -6775,7 +6884,7 @@ _$insert(_el$,_$createComponent(Show34,{get when(){return props.view.rows.length
|
|
|
6775
6884
|
},get children(){return _$createComponent(For21,{get each(){return props.visibility.visible()
|
|
6776
6885
|
},children:(row,index)=>{const startsGroup=()=>index()===0||props.visibility.visible()[index()-1].group!==row.group
|
|
6777
6886
|
return(()=>{var _el$3=_$createElement("box")
|
|
6778
|
-
_$insert(_el$3,_$createComponent(
|
|
6887
|
+
_$insert(_el$3,_$createComponent(Show36,{get when(){return startsGroup()
|
|
6779
6888
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
6780
6889
|
_$insertNode(_el$4,_el$5)
|
|
6781
6890
|
_$insert(_el$5,()=>row.group)
|
|
@@ -6812,7 +6921,7 @@ return _el$6
|
|
|
6812
6921
|
|
|
6813
6922
|
|
|
6814
6923
|
function TodoGuidanceControl(props){const state=()=>props.controller.guidance(props.sessionID)
|
|
6815
|
-
return _$createComponent(
|
|
6924
|
+
return _$createComponent(Show37,{get when(){return state().available
|
|
6816
6925
|
},get children(){var _el$=_$createElement("box")
|
|
6817
6926
|
_$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
6818
6927
|
},get interaction(){return props.interaction
|
|
@@ -6822,7 +6931,7 @@ _$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
|
6822
6931
|
},get disabled(){return state().saving
|
|
6823
6932
|
},onActivate:()=>void props.controller.setGuidance(props.sessionID,!state().enabled)
|
|
6824
6933
|
}),null)
|
|
6825
|
-
_$insert(_el$,_$createComponent(
|
|
6934
|
+
_$insert(_el$,_$createComponent(Show37,{get when(){return state().error
|
|
6826
6935
|
},children:(message)=>(()=>{var _el$2=_$createElement("text")
|
|
6827
6936
|
_$setProp(_el$2,"wrapMode","word")
|
|
6828
6937
|
_$insert(_el$2,message)
|
|
@@ -6838,21 +6947,21 @@ const icons=useIcons()
|
|
|
6838
6947
|
const unavailable=()=>hostCapabilityUnavailable(props.api,"todo")
|
|
6839
6948
|
const managed=()=>("guidance" in props.controller)?props.controller:undefined
|
|
6840
6949
|
const native=()=>("source" in props.controller)&&props.controller.source==="native"
|
|
6841
|
-
const [mode,setMode]=
|
|
6950
|
+
const [mode,setMode]=createSignal39("all")
|
|
6842
6951
|
const targetKey=createMemo18(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6843
|
-
|
|
6952
|
+
createEffect21(()=>{targetKey()
|
|
6844
6953
|
setMode("all")
|
|
6845
6954
|
})
|
|
6846
6955
|
const view=createMemo18(()=>buildTodoView(list(),mode()))
|
|
6847
6956
|
const visibility=createListVisibility({items:()=>view().rows,limit:()=>props.preferences.sectionItemLimit?.("todo")??0,resetKey:()=>JSON.stringify([targetKey(),mode()])
|
|
6848
6957
|
})
|
|
6849
6958
|
const state=createMemo18(()=>props.controller.state(props.sessionID))
|
|
6850
|
-
|
|
6959
|
+
createEffect21(()=>{const sessionID=props.sessionID
|
|
6851
6960
|
targetKey()
|
|
6852
6961
|
if(unavailable())
|
|
6853
6962
|
return
|
|
6854
6963
|
const deactivate=untrack10(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6855
|
-
|
|
6964
|
+
onCleanup26(deactivate)
|
|
6856
6965
|
untrack10(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6857
6966
|
})
|
|
6858
6967
|
const navigationSection=()=>props.navigationSection??1
|
|
@@ -6863,15 +6972,15 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6863
6972
|
},get headerAction(){return native()?{id:`${PLUGIN_ID}.todo.refresh`,label:()=>`${icons.icon("retry")} Refresh`,disabled:()=>state().status==="loading"||state().status==="refreshing",onActivate:()=>{props.controller.refresh(props.sessionID).catch(()=>{})
|
|
6864
6973
|
}}:undefined
|
|
6865
6974
|
},get open(){return props.preferences.expanded().todo
|
|
6866
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(
|
|
6975
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(Show38,{get when(){return unavailable()
|
|
6867
6976
|
},get fallback(){return(()=>{var _el$=_$createElement("box")
|
|
6868
6977
|
_$setProp(_el$,"gap",1)
|
|
6869
|
-
_$insert(_el$,_$createComponent(
|
|
6978
|
+
_$insert(_el$,_$createComponent(Show38,{get when(){return native()
|
|
6870
6979
|
},get children(){return _$createComponent(NativeTodoNotice,{get api(){return props.api
|
|
6871
6980
|
},get empty(){return list().length===0
|
|
6872
6981
|
}})
|
|
6873
6982
|
}}),null)
|
|
6874
|
-
_$insert(_el$,_$createComponent(
|
|
6983
|
+
_$insert(_el$,_$createComponent(Show38,{get when(){return managed()?.guidance(props.sessionID).available
|
|
6875
6984
|
},get children(){return _$createComponent(TodoGuidanceControl,{get api(){return props.api
|
|
6876
6985
|
},get controller(){return managed()
|
|
6877
6986
|
},get sessionID(){return props.sessionID
|
|
@@ -6879,7 +6988,7 @@ _$insert(_el$,_$createComponent(Show36,{get when(){return managed()?.guidance(pr
|
|
|
6879
6988
|
},get navigationSection(){return navigationSection()
|
|
6880
6989
|
}})
|
|
6881
6990
|
}}),null)
|
|
6882
|
-
_$insert(_el$,_$createComponent(
|
|
6991
|
+
_$insert(_el$,_$createComponent(Show38,{get when(){return managed()?.missing(props.sessionID)
|
|
6883
6992
|
},get fallback(){return _$createComponent(SectionRequestBody,{get api(){return props.api
|
|
6884
6993
|
},get interaction(){return props.interaction
|
|
6885
6994
|
},id:`${PLUGIN_ID}.retry.todo`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -6916,7 +7025,7 @@ return _el$4
|
|
|
6916
7025
|
}
|
|
6917
7026
|
function SidebarContent(props){const sections=props.preferences.sections
|
|
6918
7027
|
const visibleSections=createMemo19(()=>props.preferences.sectionOrder().filter((section)=>sections()[section]&&supportsSidebarSection(props.api,section)))
|
|
6919
|
-
|
|
7028
|
+
onCleanup27(()=>props.interaction.setContentRoot(undefined))
|
|
6920
7029
|
return _$createComponent(ToolbarProvider,{get api(){return props.api
|
|
6921
7030
|
},get preferences(){return props.preferences
|
|
6922
7031
|
},get skills(){return props.skills
|
|
@@ -6968,7 +7077,7 @@ return _el$
|
|
|
6968
7077
|
|
|
6969
7078
|
|
|
6970
7079
|
function McpPersistence(props){const persist=createMemo20(()=>props.controller.persist())
|
|
6971
|
-
|
|
7080
|
+
createEffect22(()=>{if(!props.api.state.ready)
|
|
6972
7081
|
return
|
|
6973
7082
|
persist()
|
|
6974
7083
|
const route=props.api.route.current
|
|
@@ -6976,12 +7085,12 @@ const params="params" in route?route.params:undefined
|
|
|
6976
7085
|
if(typeof params?.sessionID!=="string")
|
|
6977
7086
|
return
|
|
6978
7087
|
const current=props.controller.target()
|
|
6979
|
-
|
|
7088
|
+
onCleanup28(()=>props.controller.deactivate(current))
|
|
6980
7089
|
untrack11(()=>void props.controller.activate(current).catch(()=>{}))
|
|
6981
7090
|
})
|
|
6982
7091
|
return _$createElement("box")
|
|
6983
7092
|
}
|
|
6984
|
-
function PreferencesPersistence(props){
|
|
7093
|
+
function PreferencesPersistence(props){createEffect22(()=>{const location=currentLocation(props.api)
|
|
6985
7094
|
untrack11(()=>props.controller.setActiveScope(preferencesScope({directory:location.routing.directory,worktree:props.api.state.path.worktree
|
|
6986
7095
|
})))
|
|
6987
7096
|
props.controller.load()
|
|
@@ -6989,7 +7098,7 @@ props.controller.load()
|
|
|
6989
7098
|
return _$createElement("box")
|
|
6990
7099
|
}
|
|
6991
7100
|
function FirstRunWizardPersistence(props){let isChecked=false
|
|
6992
|
-
|
|
7101
|
+
createEffect22(()=>{if(isChecked)
|
|
6993
7102
|
return
|
|
6994
7103
|
isChecked=true
|
|
6995
7104
|
showFirstRunWizard(props.api,props.preferences).catch(()=>{})
|
|
@@ -7016,7 +7125,7 @@ const settingsId=`${PLUGIN_ID}.settings`
|
|
|
7016
7125
|
const settings=useSidebarItem(props.api,props.interaction,{id:settingsId,position:{section:0,row:0,column:0
|
|
7017
7126
|
},activate:()=>openSettings(props.api,props.preferences,undefined,props.mcp,props.skills)
|
|
7018
7127
|
},()=>theme().textMuted,"control")
|
|
7019
|
-
|
|
7128
|
+
onCleanup29(()=>props.interaction.setTitleRoot(undefined))
|
|
7020
7129
|
return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("box"),_el$3=_$createElement("box")
|
|
7021
7130
|
_$insertNode(_el$,_el$2)
|
|
7022
7131
|
_$use((node)=>props.interaction.setTitleRoot(node),_el$)
|
|
@@ -7027,7 +7136,7 @@ _$setProp(_el$2,"flexDirection","row")
|
|
|
7027
7136
|
_$setProp(_el$2,"justifyContent","space-between")
|
|
7028
7137
|
_$setProp(_el$2,"gap",1)
|
|
7029
7138
|
_$setProp(_el$3,"flexGrow",1)
|
|
7030
|
-
_$insert(_el$3,_$createComponent(
|
|
7139
|
+
_$insert(_el$3,_$createComponent(Show39,{get when(){return props.preferences.showSessionTitle()
|
|
7031
7140
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
7032
7141
|
_$insertNode(_el$4,_el$5)
|
|
7033
7142
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -7035,7 +7144,7 @@ _$insert(_el$5,()=>props.title)
|
|
|
7035
7144
|
_$effect((_$p)=>_$setProp(_el$4,"fg",theme().text,_$p))
|
|
7036
7145
|
return _el$4
|
|
7037
7146
|
}}),null)
|
|
7038
|
-
_$insert(_el$3,_$createComponent(
|
|
7147
|
+
_$insert(_el$3,_$createComponent(Show39,{get when(){return _$memo(()=>!!props.preferences.showSessionDate())()&&created()
|
|
7039
7148
|
},children:(value)=>(()=>{var _el$6=_$createElement("text")
|
|
7040
7149
|
_$insert(_el$6,value)
|
|
7041
7150
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().textMuted,_$p))
|
|
@@ -7084,11 +7193,11 @@ function createLimitsRefresh(options,schedule=scheduleInterval){let disposed=fal
|
|
|
7084
7193
|
const selectedKey=createMemo22(()=>JSON.stringify(options.selectedModel?.()))
|
|
7085
7194
|
const targetKey=createMemo22(()=>JSON.stringify(options.controller.current().model))
|
|
7086
7195
|
const interval=createMemo22(()=>(parseLimitsRefreshMinutes(options.refreshMinutes?.())??DEFAULT_LIMITS_REFRESH_MINUTES)*60000)
|
|
7087
|
-
|
|
7196
|
+
createEffect23(on2(selectedKey,()=>{const model=options.selectedModel?.()
|
|
7088
7197
|
if(model&&options.accountSource)
|
|
7089
7198
|
options.accountSource.refresh(model).catch(()=>{})
|
|
7090
7199
|
}))
|
|
7091
|
-
|
|
7200
|
+
createEffect23(on2(targetKey,()=>{const{model,adapter}=options.controller.current()
|
|
7092
7201
|
if(model&&adapter)
|
|
7093
7202
|
options.controller.refresh()
|
|
7094
7203
|
}))
|
|
@@ -7101,14 +7210,21 @@ await options.accountSource.refresh(model)
|
|
|
7101
7210
|
if(!disposed&&target===targetKey())
|
|
7102
7211
|
await options.controller.refresh()
|
|
7103
7212
|
}
|
|
7104
|
-
|
|
7213
|
+
createEffect23(on2(interval,(milliseconds)=>{onCleanup30(schedule(()=>void refresh().catch(()=>{}),milliseconds))
|
|
7105
7214
|
}))
|
|
7106
|
-
|
|
7215
|
+
onCleanup30(()=>{disposed=true
|
|
7107
7216
|
})
|
|
7108
7217
|
}
|
|
7109
7218
|
function LimitsPersistence(props){createLimitsRefresh(props)
|
|
7110
7219
|
return _$createElement("box")
|
|
7111
7220
|
}
|
|
7221
|
+
function bindNavigatorAbout(api,status,updates,notes){const dispose=registerNavigatorAboutServices(api,{navigatorVersion:"0.24.0",openCodeVersion:api.app.version,checkState:()=>status.navigatorCheckState?.()??{status:"idle"},checking:()=>status.navigatorCheckState?.().status==="checking",updating:updates.navigatorUpdating,installed:updates.navigatorInstalled,check:()=>status.refreshNavigator?.()??Promise.resolve("unavailable"),update(dialogs){const target=status.navigatorUpdate()
|
|
7222
|
+
if(target)
|
|
7223
|
+
updates.navigator(target,dialogs)
|
|
7224
|
+
},changelog:async ()=>notes.parseChangelog(await notes.readBundledChangelog())
|
|
7225
|
+
})
|
|
7226
|
+
api.lifecycle.onDispose(dispose)
|
|
7227
|
+
}
|
|
7112
7228
|
import {homedir} from "os"
|
|
7113
7229
|
|
|
7114
7230
|
function location(input){return input.directory?{location:{directory:input.directory}}:{}}
|
|
@@ -7238,7 +7354,7 @@ context.keymap.dispatch(command.id)
|
|
|
7238
7354
|
context.renderer.keyInput.on("keypress",onKeypress)
|
|
7239
7355
|
const keymap={registerLayer(layer){const id=++sequence
|
|
7240
7356
|
const owner=getOwner()
|
|
7241
|
-
const [active,setActive]=
|
|
7357
|
+
const [active,setActive]=createSignal40(true)
|
|
7242
7358
|
const install=()=>{context.keymap.layer(()=>({mode:typeof layer.mode==="string"?layer.mode:"base",priority:layer.priority,enabled:()=>active()&&enabled(layer.enabled),target:layer.target?()=>layer.target:undefined,commands:v2LayerCommands(id,layer,()=>true,run,context.keymap.dispatch)
|
|
7243
7359
|
}))
|
|
7244
7360
|
}
|
|
@@ -7283,7 +7399,7 @@ cleanups.clear()
|
|
|
7283
7399
|
context.renderer.keyInput.off("keypress",onKeypress)
|
|
7284
7400
|
}}}
|
|
7285
7401
|
|
|
7286
|
-
function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=
|
|
7402
|
+
function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=createSignal41({})
|
|
7287
7403
|
const projections=new WeakMap
|
|
7288
7404
|
function normalize(info){const directory=info.location.directory
|
|
7289
7405
|
const workspaceID=context.location?.directory===directory?context.location.workspaceID:undefined
|
|
@@ -7346,25 +7462,16 @@ return context.data.session.message.list(route.sessionID).some((message)=>(!reve
|
|
|
7346
7462
|
}
|
|
7347
7463
|
|
|
7348
7464
|
|
|
7349
|
-
|
|
7350
|
-
|
|
7351
|
-
|
|
7352
|
-
|
|
7353
|
-
|
|
7354
|
-
})
|
|
7355
|
-
if(!active)
|
|
7356
|
-
return
|
|
7357
|
-
if(value===undefined)
|
|
7358
|
-
props.onCancel?.()
|
|
7359
|
-
else
|
|
7360
|
-
props.onConfirm?.(value)
|
|
7361
|
-
})
|
|
7362
|
-
return _$createElement("box")
|
|
7465
|
+
|
|
7466
|
+
|
|
7467
|
+
function createV2UI(context,api){let dialogOpen=false
|
|
7468
|
+
function DialogPrompt(props){return _$createComponent(SingleLinePrompt,_$mergeProps({get api(){return api()
|
|
7469
|
+
}},props))
|
|
7363
7470
|
}
|
|
7364
7471
|
function DialogConfirm(props){let active=true
|
|
7365
|
-
|
|
7472
|
+
onCleanup31(()=>{active=false
|
|
7366
7473
|
})
|
|
7367
|
-
|
|
7474
|
+
onMount7(async ()=>{const confirmed=await context.ui.dialog.confirm({title:props.title,message:props.message
|
|
7368
7475
|
})
|
|
7369
7476
|
if(!active)
|
|
7370
7477
|
return
|
|
@@ -7404,7 +7511,7 @@ const keymap=createV2Keymap(context)
|
|
|
7404
7511
|
disposers.push(keymap.dispose)
|
|
7405
7512
|
const sessions=createV2SessionAdapter(context)
|
|
7406
7513
|
const remote=createV2ClientAdapter(context)
|
|
7407
|
-
const ui=createV2UI(context)
|
|
7514
|
+
const ui=createV2UI(context,()=>api)
|
|
7408
7515
|
const onDispose=(dispose)=>{disposers.push(dispose)
|
|
7409
7516
|
return()=>{const index=disposers.indexOf(dispose)
|
|
7410
7517
|
if(index!==-1)
|
|
@@ -7572,7 +7679,7 @@ const limitsPath=import.meta.url.includes("/dist/tui.js")?"./provider-limits.js"
|
|
|
7572
7679
|
const limitsModule=await import(limitsPath)
|
|
7573
7680
|
const LimitsSection=limitsModule.ProviderLimitsSection
|
|
7574
7681
|
const{controller:limits,codex,accountSource,selectModel,modelSelection
|
|
7575
|
-
}=limitsModule.createProviderQuotaIntegration(api,preferences,"0.
|
|
7682
|
+
}=limitsModule.createProviderQuotaIntegration(api,preferences,"0.24.0",hostContext)
|
|
7576
7683
|
const mcp=createMcpController(api,preferences.persistMcp,preferences,nativeSources?.mcp)
|
|
7577
7684
|
const interaction=createSidebarInteraction(api,()=>openKeyboardHelp(api,preferences.lspIconStyle,preferences.cornerFont,sidebarShortcutActions(api)))
|
|
7578
7685
|
const startup=createStartupSessionController(api,preferences)
|
|
@@ -7601,7 +7708,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
|
|
|
7601
7708
|
},interaction,skills,subagents,mcp
|
|
7602
7709
|
}),_$createComponent(FirstRunWizardPersistence,{api,preferences
|
|
7603
7710
|
}),_$createComponent(StartupSessionBinding,{api,controller:startup
|
|
7604
|
-
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.
|
|
7711
|
+
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.24.0"
|
|
7605
7712
|
}),_$createComponent(McpPersistence,{api,controller:mcp
|
|
7606
7713
|
})]
|
|
7607
7714
|
}})
|
|
@@ -7632,14 +7739,16 @@ throw result.error
|
|
|
7632
7739
|
}
|
|
7633
7740
|
return result.data?.type==="text"?result.data.content:undefined
|
|
7634
7741
|
})
|
|
7742
|
+
const updateServices=await loadNavigatorUpdates()
|
|
7635
7743
|
const{createVersionStatus,createVersionUpdateActions,createOpenCodeV1VersionUpdater
|
|
7636
|
-
}=
|
|
7637
|
-
const versionStatus=createVersionStatus(api,"0.
|
|
7638
|
-
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.
|
|
7744
|
+
}=updateServices
|
|
7745
|
+
const versionStatus=createVersionStatus(api,"0.24.0")
|
|
7746
|
+
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.24.0"))
|
|
7747
|
+
bindNavigatorAbout(api,versionStatus,versionUpdates,updateServices)
|
|
7639
7748
|
api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7640
7749
|
},get multilineCorners(){return preferences.cornerFont
|
|
7641
7750
|
},get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
|
|
7642
|
-
},navigatorVersion:"0.
|
|
7751
|
+
},navigatorVersion:"0.24.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7643
7752
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7644
7753
|
}})
|
|
7645
7754
|
}})
|
|
@@ -7653,17 +7762,19 @@ return
|
|
|
7653
7762
|
return new TextDecoder().decode(await context.client.file.read({location:context.location,path:".opencode/navigator.json"
|
|
7654
7763
|
}))
|
|
7655
7764
|
},todo,context)
|
|
7765
|
+
const updateServices=await loadNavigatorUpdates()
|
|
7656
7766
|
const{createVersionStatus,createVersionUpdateActions,createOpenCodeV2VersionUpdater
|
|
7657
|
-
}=
|
|
7658
|
-
const versionStatus=createVersionStatus(adapter.api,"0.
|
|
7659
|
-
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.
|
|
7767
|
+
}=updateServices
|
|
7768
|
+
const versionStatus=createVersionStatus(adapter.api,"0.24.0")
|
|
7769
|
+
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.24.0"))
|
|
7770
|
+
bindNavigatorAbout(adapter.api,versionStatus,versionUpdates,updateServices)
|
|
7660
7771
|
const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7661
7772
|
},get multilineCorners(){return preferences.cornerFont
|
|
7662
7773
|
},get children(){var _el$=_$createElement("box")
|
|
7663
7774
|
_$setProp(_el$,"flexDirection","row")
|
|
7664
7775
|
_$setProp(_el$,"justifyContent","space-between")
|
|
7665
7776
|
_$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
|
|
7666
|
-
},navigatorVersion:"0.
|
|
7777
|
+
},navigatorVersion:"0.24.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7667
7778
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7668
7779
|
}}),null)
|
|
7669
7780
|
_$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api
|
|
@@ -7678,5 +7789,5 @@ await adapter.dispose()
|
|
|
7678
7789
|
var plugin={id:PLUGIN_ID,tui:setupOpenCodeV1,setup:setupOpenCodeV2
|
|
7679
7790
|
}
|
|
7680
7791
|
var plugin_default=plugin
|
|
7681
|
-
export{DEFAULT_SECTION_EXPANSION,DialogAction,DialogHeader,DialogSurface,FOCUS_COMMAND,FirstRunWizard,GuardedConfirmation,IconControl,IconPicker,KeyboardHelpDialog,LspBadge,McpSection,SelectionMenu as PresetMenu,QUICK_ACTIONS,QUICK_ACTION_IDS,Section,SectionFilter,SelectionBox,SelectionMenu,SettingsDialog,SidebarFocusBinding,SidebarToggleBinding,SkillsSection,Tab,TodoSection,createDialogStack,createMcpController,createNativeTodoController,createPreferencesController,createQuickActionRevision,createSidebarInteraction,createSkillController,createSubagentController,createTodoController,currentPermissionMode,plugin_default as default,hostCapabilities,hostCapabilityUnavailable,isEffectivelyVisible,lspIcon,matchesFilter,openFirstRunWizard,openKeyboardHelp,openSettings,orderQuickActionIds,parseQuickActionOrder,parseQuickActionVisibility,quickActionDisabledReason,quickActionLabel,quickActionRequiresSession,quickActionState,quickActionStates,setHostCapabilities,setQuickActionStateSource,showFirstRunWizard,subtleLineColor,supportsPermissionMode,supportsSidebarSection,supportsTitleVisibility,terminalIcon,terminalIconIDs,terminalIconLabel,useDialogScroll,useDialogState,useDialogs,useIcons
|
|
7792
|
+
export{DEFAULT_SECTION_EXPANSION,DialogAction,DialogHeader,DialogSurface,FOCUS_COMMAND,FirstRunWizard,GuardedConfirmation,IconControl,IconPicker,KeyboardHelpDialog,LspBadge,McpSection,SelectionMenu as PresetMenu,QUICK_ACTIONS,QUICK_ACTION_IDS,Section,SectionFilter,SelectionBox,SelectionMenu,SettingsDialog,SidebarFocusBinding,SidebarToggleBinding,SkillsSection,Tab,TodoSection,createDialogStack,createMcpController,createNativeTodoController,createPreferencesController,createQuickActionRevision,createSidebarInteraction,createSkillController,createSubagentController,createTodoController,currentPermissionMode,plugin_default as default,getNavigatorAboutServices,hostCapabilities,hostCapabilityUnavailable,isEffectivelyVisible,lspIcon,matchesFilter,openFirstRunWizard,openKeyboardHelp,openSettings,orderQuickActionIds,parseQuickActionOrder,parseQuickActionVisibility,quickActionDisabledReason,quickActionLabel,quickActionRequiresSession,quickActionState,quickActionStates,registerNavigatorAboutServices,setHostCapabilities,setQuickActionStateSource,showFirstRunWizard,subtleLineColor,supportsPermissionMode,supportsSidebarSection,supportsTitleVisibility,terminalIcon,terminalIconIDs,terminalIconLabel,useDialogScroll,useDialogState,useDialogs,useIcons
|
|
7682
7793
|
}
|