opencode-navigator 0.23.0 → 0.25.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 +16 -0
- package/HOST_API.md +25 -5
- package/LINT_COVERAGE.md +201 -0
- package/PROVIDERS.md +2 -2
- package/README.md +100 -9
- package/dist/chunk-fd7394y1.js +17 -0
- package/dist/chunk-pwa1wzer.js +22 -0
- package/dist/native-todo-setup.js +1156 -0
- package/dist/navigator-updates.js +63 -25
- package/dist/onboarding.js +379 -0
- 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 +901 -420
- package/dist/toolbar-settings.js +143 -34
- package/dist/tui.js +512 -625
- package/dist/upgrade-notes.js +87 -0
- package/package.json +20 -15
package/dist/tui.js
CHANGED
|
@@ -3,14 +3,13 @@ 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,Suspense as Suspense3,lazy as lazy3,For as For6,createMemo as createMemo4,onMount as onMount4,For as For5,createMemo as createMemo3,onMount as onMount3,Show as Show6,createEffect as createEffect9,createSignal as createSignal14,onCleanup as onCleanup11,Show as Show5,For as For4,For as For7,createEffect as createEffect10,createMemo as createMemo5,onCleanup as onCleanup12,createEffect as createEffect11,createMemo as createMemo6,untrack as untrack2,Suspense as Suspense4,lazy as lazy4,onCleanup as onCleanup13,createEffect as createEffect12,onCleanup as onCleanup14,createSignal as createSignal15,createMemo as createMemo7,createSignal as createSignal16,createSignal as createSignal17,lazy as lazy5,Show as Show9,For as For8,Show as Show8,Show as Show7,createEffect as createEffect13,onCleanup as onCleanup15,onMount as onMount5,onCleanup as onCleanup16,onMount as onMount6,For as For9,createSignal as createSignal18,createSignal as createSignal19,onCleanup as onCleanup17,createSignal as createSignal20,Show as Show10,createSignal as createSignal22,createSignal as createSignal21,onCleanup as onCleanup18,For as For10,Show as Show13,createMemo as createMemo9,createComputed,createMemo as createMemo8,createSignal as createSignal23,untrack as untrack3,Show as Show11,createComputed as createComputed2,untrack as untrack4,Show as Show12,createSignal as createSignal25,createEffect as createEffect14,createSignal as createSignal24,on,createMemo as createMemo11,createSignal as createSignal28,createMemo as createMemo10,For as For11,Show as Show17,Show as Show14,Show as Show15,createSignal as createSignal26,createContext as createContext3,useContext as useContext3,Show as Show16,createSignal as createSignal27,onCleanup as onCleanup19,Show as Show23,createSignal as createSignal29,untrack as untrack5,createSignal as createSignal30,createSignal as createSignal31,createEffect as createEffect15,For as For13,Show as Show18,For as For12,createSignal as createSignal32,Show as Show19,Show as Show20,Show as Show21,Show as Show22,For as For14,Show as Show25,createMemo as createMemo13,Show as Show24,createMemo as createMemo12,createSignal as createSignal33,createContext as createContext4,useContext as useContext4,Show as Show26,Suspense as Suspense5,createEffect as createEffect16,onCleanup as onCleanup20,untrack as untrack6,For as For20,Match,Switch,createMemo as createMemo19,onCleanup as onCleanup26,For as For15,Show as Show28,createMemo as createMemo15,createSignal as createSignal35,createEffect as createEffect17,createMemo as createMemo14,onCleanup as onCleanup21,untrack as untrack7,Show as Show27,createEffect as createEffect18,createSignal as createSignal34,onCleanup as onCleanup22,For as For16,Show as Show30,createSignal as createSignal36,createEffect as createEffect19,createMemo as createMemo16,onCleanup as onCleanup23,untrack as untrack8,Show as Show29,For as For18,Show as Show33,createEffect as createEffect20,createMemo as createMemo17,createSignal as createSignal37,onCleanup as onCleanup24,untrack as untrack9,For as For17,Show as Show32,Show as Show31,Show as Show38,createEffect as createEffect21,createMemo as createMemo18,createSignal as createSignal38,onCleanup as onCleanup25,untrack as untrack10,Show as Show34,For as For19,Show as Show36,Show as Show35,Show as Show37,createEffect as createEffect22,createMemo as createMemo20,onCleanup as onCleanup27,untrack as untrack11,Show as Show39,createMemo as createMemo21,onCleanup as onCleanup28,createEffect as createEffect23,createMemo as createMemo22,on as on2,onCleanup as onCleanup29,createRoot,createSignal as createSignal39,getOwner,createSignal as createSignal40,onCleanup as onCleanup30,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"
|
|
10
10
|
}
|
|
11
11
|
var DEFAULT_SECTION_EXPANSION={limits:true,todo:true,subagents:false,skills:false,quick_actions:false,lsp:false,mcp:false
|
|
12
12
|
}
|
|
13
|
-
var SECTION_DEFINITIONS=[{name:"limits",label:"Limits"},{name:"todo",label:"Todo"},{name:"subagents",label:"Subagents"},{name:"skills",label:"Skills"},{name:"quick_actions",label:"Quick actions"},{name:"lsp",label:"LSP"},{name:"mcp",label:"MCP"}]
|
|
14
13
|
function parseQuickActionOrder(value){if(!Array.isArray(value))
|
|
15
14
|
return
|
|
16
15
|
const order=[...new Set(value.filter((id)=>QUICK_ACTION_IDS.includes(id)))]
|
|
@@ -500,7 +499,7 @@ return changeMany({action:state.action,...state.preset&&{preset:state.preset},..
|
|
|
500
499
|
|
|
501
500
|
|
|
502
501
|
|
|
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"," "]
|
|
502
|
+
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
503
|
}
|
|
505
504
|
function uiIcon(name,style="nerd"){return ICONS[name][style==="text"?1:0]
|
|
506
505
|
}
|
|
@@ -514,7 +513,7 @@ return icon?uiIcon(icon,style):key
|
|
|
514
513
|
}
|
|
515
514
|
function sectionIcon(section,style="nerd"){return uiIcon(section==="quick_actions"?"actions":section,style)
|
|
516
515
|
}
|
|
517
|
-
var SETTINGS_ICONS={sections:"sections",scope:"scope",presets:"presets",behavior:"settings",defaults:"reset"
|
|
516
|
+
var SETTINGS_ICONS={sections:"sections",scope:"scope",presets:"presets",behavior:"settings",defaults:"reset",about:"info"
|
|
518
517
|
}
|
|
519
518
|
function settingsTabIcon(tab,style="nerd"){return uiIcon(SETTINGS_ICONS[tab],style)
|
|
520
519
|
}
|
|
@@ -738,40 +737,36 @@ renderer.requestRender()
|
|
|
738
737
|
|
|
739
738
|
|
|
740
739
|
|
|
741
|
-
import {
|
|
740
|
+
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 TextAttributes10,TextAttributes as TextAttributes11,TextAttributes as TextAttributes13,TextAttributes as TextAttributes12,TextAttributes as TextAttributes14,ScrollBoxRenderable,TextAttributes as TextAttributes15} from "@opentui/core"
|
|
742
741
|
|
|
743
|
-
|
|
742
|
+
var transparent=RGBA.fromInts(0,0,0,0)
|
|
743
|
+
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
744
|
return parent.backgroundColor
|
|
745
745
|
}
|
|
746
|
-
return
|
|
746
|
+
return transparent
|
|
747
747
|
}
|
|
748
|
+
function paintCorners(node,buffer,icons){const backdrop=selectionBackdrop(node)
|
|
749
|
+
if(node.backgroundColor.equals(backdrop))
|
|
750
|
+
return
|
|
751
|
+
const left=node.screenX
|
|
752
|
+
const right=left + node.width-1
|
|
753
|
+
const top=node.screenY
|
|
754
|
+
const bottom=top + node.height-1
|
|
755
|
+
const multiline=node.height>1
|
|
756
|
+
const positions=multiline?[[left,top,"selectionTopLeft"],[right,top,"selectionTopRight"],[left,bottom,"selectionBottomLeft"],[right,bottom,"selectionBottomRight"]]:[[left,top,"selectionLeft"],[right,top,"selectionRight"]]
|
|
757
|
+
for(const [x,y,icon] of positions){if(x<0||y<0||x>=buffer.width||y>=buffer.height)
|
|
758
|
+
continue
|
|
759
|
+
buffer.setCell(x,y,icons.icon(icon),multiline?backdrop:node.backgroundColor,multiline?node.backgroundColor:backdrop)
|
|
760
|
+
}}
|
|
748
761
|
function SelectionBox(props){const icons=useIcons()
|
|
749
762
|
const [local,boxProps]=splitProps(props,["ref","iconOnly"])
|
|
750
763
|
let node
|
|
751
|
-
let corners=[]
|
|
752
764
|
createEffect2(()=>{icons.style()
|
|
753
765
|
icons.multilineCorners()
|
|
754
766
|
node?.requestRender()
|
|
755
767
|
})
|
|
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
|
-
}
|
|
768
|
+
function after(buffer,delta){if(!this.buffered&&this.width>=3&&this.height>=1&&this.backgroundColor.a>0&&(this.height===1||icons.multilineCorners()))
|
|
769
|
+
paintCorners(this,buffer,icons)
|
|
775
770
|
props.renderAfter?.call(this,buffer,delta)
|
|
776
771
|
}
|
|
777
772
|
return(()=>{var _el$=_$createElement("box")
|
|
@@ -782,7 +777,6 @@ local.ref(value)
|
|
|
782
777
|
},_el$)
|
|
783
778
|
_$spread(_el$,_$mergeProps(boxProps,{get paddingLeft(){return props.paddingLeft??props.padding??(local.iconOnly&&icons.style()==="text"?0:1)
|
|
784
779
|
},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
780
|
},get renderAfter(){return _$memo(()=>icons.style()==="nerd")()?after:props.renderAfter
|
|
787
781
|
}}),false)
|
|
788
782
|
return _el$
|
|
@@ -823,7 +817,7 @@ _$setProp(_el$2,"wrapMode","none")
|
|
|
823
817
|
_$setProp(_el$2,"truncate",true)
|
|
824
818
|
_$setProp(_el$2,"height",1)
|
|
825
819
|
_$setProp(_el$2,"flexGrow",1)
|
|
826
|
-
_$insert(_el$2,()=>icons.icon("presets"),_el$3)
|
|
820
|
+
_$insert(_el$2,()=>icons.icon(props.icon??"presets"),_el$3)
|
|
827
821
|
_$insert(_el$2,()=>props.title,null)
|
|
828
822
|
_$setProp(_el$4,"flexShrink",0)
|
|
829
823
|
_$setProp(_el$4,"onMouseUp",(event)=>{event.stopPropagation()
|
|
@@ -1040,12 +1034,17 @@ function GuardedConfirmation(props){const dialogs=useDialogs(props.api)
|
|
|
1040
1034
|
createEffect4(()=>{if(!props.current())
|
|
1041
1035
|
dialogs.close()
|
|
1042
1036
|
})
|
|
1043
|
-
|
|
1044
|
-
},get message(){return props.message
|
|
1045
|
-
},onConfirm:()=>{if(props.current())
|
|
1037
|
+
const confirm=()=>{if(props.current())
|
|
1046
1038
|
props.onConfirm()
|
|
1047
|
-
}
|
|
1039
|
+
}
|
|
1040
|
+
return _$createComponent(Show,{get when(){return props.render
|
|
1041
|
+
},get fallback(){return _$createComponent(props.api.ui.DialogConfirm,{get title(){return props.title
|
|
1042
|
+
},get message(){return props.message
|
|
1043
|
+
},onConfirm:confirm,get onCancel(){return dialogs.back
|
|
1048
1044
|
}})
|
|
1045
|
+
},children:(render)=>render()({confirm,cancel:dialogs.back
|
|
1046
|
+
})
|
|
1047
|
+
})
|
|
1049
1048
|
}
|
|
1050
1049
|
|
|
1051
1050
|
|
|
@@ -1071,7 +1070,7 @@ _$setProp(_el$2,"wrapMode","none")
|
|
|
1071
1070
|
_$setProp(_el$2,"truncate",true)
|
|
1072
1071
|
_$setProp(_el$2,"height",1)
|
|
1073
1072
|
_$insert(_el$2,()=>local.children)
|
|
1074
|
-
_$insert(_el$,_$createComponent(
|
|
1073
|
+
_$insert(_el$,_$createComponent(Show2,{get when(){return local.count!==undefined
|
|
1075
1074
|
},get children(){var _el$3=_$createElement("text")
|
|
1076
1075
|
_$setProp(_el$3,"flexShrink",0)
|
|
1077
1076
|
_$setProp(_el$3,"wrapMode","none")
|
|
@@ -1095,6 +1094,85 @@ return _el$
|
|
|
1095
1094
|
}}))
|
|
1096
1095
|
}
|
|
1097
1096
|
|
|
1097
|
+
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
|
|
1101
|
+
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
function SingleLinePrompt(props){const theme=()=>props.api.theme.current
|
|
1105
|
+
const [value,setValue]=useDialogState("prompt-value",props.value??"")
|
|
1106
|
+
const [active,setActive]=useDialogState("prompt-control",0)
|
|
1107
|
+
const [hovered,setHovered]=createSignal4()
|
|
1108
|
+
let input
|
|
1109
|
+
let actions
|
|
1110
|
+
const confirm=()=>props.onConfirm?.(value())
|
|
1111
|
+
const cancel=()=>props.onCancel?.()
|
|
1112
|
+
const focus=(index)=>{setActive(index)
|
|
1113
|
+
setHovered(undefined)
|
|
1114
|
+
if(index===0)
|
|
1115
|
+
input?.focus()
|
|
1116
|
+
else
|
|
1117
|
+
actions?.focus()
|
|
1118
|
+
}
|
|
1119
|
+
const prefix="opencode-navigator.prompt"
|
|
1120
|
+
createEffect5(()=>{const actionsFocused=active()>0
|
|
1121
|
+
const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1100,commands:[{name:`${prefix}.next`,run:()=>focus((active() + 1)%3)
|
|
1122
|
+
},{name:`${prefix}.previous`,run:()=>focus((active() + 2)%3)
|
|
1123
|
+
},{name:`${prefix}.activate`,run:()=>active()===2?cancel():confirm()
|
|
1124
|
+
},{name:`${prefix}.horizontal`,enabled:()=>active()>0,run:()=>focus(active()===1?2:1)
|
|
1125
|
+
}],bindings:[{key:"tab",cmd:`${prefix}.next`
|
|
1126
|
+
},{key:"shift+tab",cmd:`${prefix}.previous`
|
|
1127
|
+
},{key:"return",cmd:`${prefix}.activate`
|
|
1128
|
+
},...actionsFocused?[{key:"left",cmd:`${prefix}.horizontal`
|
|
1129
|
+
},{key:"right",cmd:`${prefix}.horizontal`
|
|
1130
|
+
}]:[]]
|
|
1131
|
+
})
|
|
1132
|
+
onCleanup4(unregister)
|
|
1133
|
+
})
|
|
1134
|
+
onMount(()=>queueMicrotask(()=>input?.focus()))
|
|
1135
|
+
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
1136
|
+
},get children(){return [_$createComponent(DialogHeader,{get api(){return props.api
|
|
1137
|
+
},get title(){return props.title
|
|
1138
|
+
},onBack:cancel
|
|
1139
|
+
}),_$memo(()=>props.description?.()),(()=>{var _el$=_$createElement("input")
|
|
1140
|
+
_$use((node)=>{input=node
|
|
1141
|
+
},_el$)
|
|
1142
|
+
_$setProp(_el$,"onInput",setValue)
|
|
1143
|
+
_$setProp(_el$,"on:focused",()=>setActive(0))
|
|
1144
|
+
_$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
|
|
1145
|
+
_v$!==_p$.e&&(_p$.e=_$setProp(_el$,"value",_v$,_p$.e))
|
|
1146
|
+
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$,"placeholder",_v$2,_p$.t))
|
|
1147
|
+
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$,"textColor",_v$3,_p$.a))
|
|
1148
|
+
_v$4!==_p$.o&&(_p$.o=_$setProp(_el$,"focusedTextColor",_v$4,_p$.o))
|
|
1149
|
+
_v$5!==_p$.i&&(_p$.i=_$setProp(_el$,"backgroundColor",_v$5,_p$.i))
|
|
1150
|
+
_v$6!==_p$.n&&(_p$.n=_$setProp(_el$,"focusedBackgroundColor",_v$6,_p$.n))
|
|
1151
|
+
_v$7!==_p$.s&&(_p$.s=_$setProp(_el$,"cursorColor",_v$7,_p$.s))
|
|
1152
|
+
_v$8!==_p$.h&&(_p$.h=_$setProp(_el$,"placeholderColor",_v$8,_p$.h))
|
|
1153
|
+
return _p$
|
|
1154
|
+
},{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined,n:undefined,s:undefined,h:undefined
|
|
1155
|
+
})
|
|
1156
|
+
return _el$
|
|
1157
|
+
})(),(()=>{var _el$2=_$createElement("box")
|
|
1158
|
+
_$use((node)=>{actions=node
|
|
1159
|
+
},_el$2)
|
|
1160
|
+
_$setProp(_el$2,"flexDirection","row")
|
|
1161
|
+
_$setProp(_el$2,"gap",1)
|
|
1162
|
+
_$setProp(_el$2,"focusable",true)
|
|
1163
|
+
_$insert(_el$2,_$createComponent(DialogAction,{get api(){return props.api
|
|
1164
|
+
},id:`${prefix}.save`,label:"Save",icon:"save",get selected(){return(hovered()??active())===1
|
|
1165
|
+
},onSelect:()=>setHovered(1),onActivate:confirm
|
|
1166
|
+
}),null)
|
|
1167
|
+
_$insert(_el$2,_$createComponent(DialogAction,{get api(){return props.api
|
|
1168
|
+
},id:`${prefix}.cancel`,label:"Cancel",icon:"close",get selected(){return(hovered()??active())===2
|
|
1169
|
+
},onSelect:()=>setHovered(2),onActivate:cancel
|
|
1170
|
+
}),null)
|
|
1171
|
+
return _el$2
|
|
1172
|
+
})()]
|
|
1173
|
+
}})
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1098
1176
|
function subtleLineColor(background,border){const from=parseColor(background)
|
|
1099
1177
|
const to=parseColor(border)
|
|
1100
1178
|
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 +1333,34 @@ function toolbarPinKey(pin){return pin.kind==="action"?`action:${pin.id}`:`skill
|
|
|
1255
1333
|
}
|
|
1256
1334
|
function identifier(value){return typeof value==="string"&&/^[a-z][a-z\d-]{0,47}$/u.test(value)
|
|
1257
1335
|
}
|
|
1336
|
+
function iconList(value){return Array.isArray(value)&&value.length<=3&&value.every((item)=>identifier(item))
|
|
1337
|
+
}
|
|
1338
|
+
function validToolbarPinText(text){return text.length<=128&&[...text].every((character)=>{const point=character.codePointAt(0)??0
|
|
1339
|
+
return point>=32&&point!==127&&point!==8232&&point!==8233
|
|
1340
|
+
})
|
|
1341
|
+
}
|
|
1342
|
+
function toolbarPinIcons(pin,state){if(state&&pin.stateIconLists?.[state])
|
|
1343
|
+
return pin.stateIconLists[state]
|
|
1344
|
+
if(state&&pin.stateIcons?.[state])
|
|
1345
|
+
return [pin.stateIcons[state]]
|
|
1346
|
+
return pin.icons??[pin.icon]
|
|
1347
|
+
}
|
|
1258
1348
|
function parsePin(value){if(!value||typeof value!=="object")
|
|
1259
1349
|
return
|
|
1260
1350
|
const input=value
|
|
1261
1351
|
if(!identifier(input.icon))
|
|
1262
1352
|
return
|
|
1353
|
+
if(input.icons!==undefined&&!iconList(input.icons))
|
|
1354
|
+
return
|
|
1355
|
+
const text=typeof input.text==="string"?input.text.trim():""
|
|
1356
|
+
if(!validToolbarPinText(text))
|
|
1357
|
+
return
|
|
1263
1358
|
const stateIcons=Object.fromEntries(Object.entries(input.stateIcons&&typeof input.stateIcons==="object"?input.stateIcons:{}).filter(([key,icon])=>identifier(key)&&identifier(icon)))
|
|
1264
|
-
const
|
|
1359
|
+
const stateIconLists=Object.fromEntries(Object.entries(input.stateIconLists&&typeof input.stateIconLists==="object"?input.stateIconLists:{}).filter(([key,entry])=>identifier(key)&&iconList(entry)))
|
|
1360
|
+
const base=input.icons
|
|
1361
|
+
if(!text&&(base?.length===0||Object.values(stateIconLists).some((list)=>list.length===0)))
|
|
1362
|
+
return
|
|
1363
|
+
const icons={icon:input.icon,...base&&{icons:[...base]},...text&&{text},...Object.keys(stateIcons).length>0&&{stateIcons},...Object.keys(stateIconLists).length>0&&{stateIconLists}}
|
|
1265
1364
|
if(input.kind==="action"&&QUICK_ACTION_IDS.includes(input.id))
|
|
1266
1365
|
return{kind:"action",id:input.id,...icons}
|
|
1267
1366
|
if(input.kind==="skill"&&typeof input.location==="string"&&input.location.trim()&&typeof input.name==="string"&&input.name.trim())
|
|
@@ -1278,6 +1377,31 @@ keys.add(toolbarPinKey(pin))
|
|
|
1278
1377
|
return [pin]
|
|
1279
1378
|
})
|
|
1280
1379
|
}
|
|
1380
|
+
function configurePin(current,change){if(change.expected&&change.expected!==JSON.stringify(current))
|
|
1381
|
+
throw new Error("Pin changed; reopen its configuration")
|
|
1382
|
+
const stateIcons={...current.stateIcons}
|
|
1383
|
+
const stateIconLists={...current.stateIconLists}
|
|
1384
|
+
const lists=Object.entries(change.stateIconLists??{})
|
|
1385
|
+
for(const [state,values] of lists){if(!identifier(state)||values!==null&&!iconList(values))
|
|
1386
|
+
throw new Error("Choose zero to three state icons")
|
|
1387
|
+
if(values===null)
|
|
1388
|
+
delete stateIconLists[state]
|
|
1389
|
+
else
|
|
1390
|
+
stateIconLists[state]=[...values]
|
|
1391
|
+
}
|
|
1392
|
+
const changes=Object.entries(change.stateIcons??{})
|
|
1393
|
+
for(const [state,icon] of changes){if(!identifier(state)||icon!==null&&!identifier(icon))
|
|
1394
|
+
throw new Error("Invalid state icon")
|
|
1395
|
+
if(icon===null)
|
|
1396
|
+
delete stateIcons[state]
|
|
1397
|
+
else
|
|
1398
|
+
stateIcons[state]=icon
|
|
1399
|
+
}
|
|
1400
|
+
const pin=parsePin({...current,icon:change.icon,stateIcons,stateIconLists,...change.icons!==undefined&&{icons:change.icons??undefined},...change.text!==undefined&&{text:change.text??undefined}})
|
|
1401
|
+
if(!pin)
|
|
1402
|
+
throw new Error("Choose up to three icons and a single-line label")
|
|
1403
|
+
return pin
|
|
1404
|
+
}
|
|
1281
1405
|
function changeToolbarPins(current=[],change){const pins=parseToolbarPins(current)
|
|
1282
1406
|
if(change.operation==="pin"){const pin=parsePin(change.pin)
|
|
1283
1407
|
if(!pin)
|
|
@@ -1293,21 +1417,7 @@ if(index===-1){if(change.operation==="configure")
|
|
|
1293
1417
|
throw new Error("Pin no longer exists; reopen the toolbar manager")
|
|
1294
1418
|
return pins
|
|
1295
1419
|
}
|
|
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
|
|
1420
|
+
if(change.operation==="configure"){pins[index]=configurePin(pins[index],change)
|
|
1311
1421
|
return pins
|
|
1312
1422
|
}
|
|
1313
1423
|
const [pin]=pins.splice(index,1)
|
|
@@ -1762,25 +1872,25 @@ return{sections:{...base?.sections,...session.sections},expanded:{...base?.expan
|
|
|
1762
1872
|
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
1873
|
},layout:{sections:defaults.sections,expanded:DEFAULT_SECTION_EXPANSION,order:defaults.sectionOrder??[...SIDEBAR_SECTIONS]
|
|
1764
1874
|
},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]=
|
|
1875
|
+
const [resolved,setResolved]=createSignal5(resolvePreferences({builtIns,pluginOptions:configured}))
|
|
1876
|
+
const [skippedSkills,setSkippedSkills]=createSignal5(new Set)
|
|
1877
|
+
const [onboardingCompleted,setOnboardingCompleted]=createSignal5(false)
|
|
1878
|
+
const [activeTarget,setActiveTarget]=createSignal5({kind:"global"})
|
|
1879
|
+
const [preferenceScope,setPreferenceScope]=createSignal5("global")
|
|
1880
|
+
const [layoutPresets,setLayoutPresets]=createSignal5(configured.layoutPresets??{})
|
|
1881
|
+
const [mcpPresets,setMcpPresets]=createSignal5(configured.mcpPresets??{})
|
|
1882
|
+
const [favoriteSkills,setFavoriteSkills]=createSignal5(new Set)
|
|
1883
|
+
const [favoriteMcpServers,setFavoriteMcpServers]=createSignal5(new Set)
|
|
1884
|
+
const [favoriteQuickActions,setFavoriteQuickActions]=createSignal5(new Set)
|
|
1885
|
+
const [recentSkills,setRecentSkills]=createSignal5([])
|
|
1886
|
+
const [recentQuickActions,setRecentQuickActions]=createSignal5([])
|
|
1887
|
+
const [mcpServerGroups,setMcpServerGroups]=createSignal5(configured.mcpServerGroups??{})
|
|
1888
|
+
const [skillGroups,setSkillGroups]=createSignal5({})
|
|
1889
|
+
const [autoApprovePermissions,setAutoApprovePermissions]=createSignal5()
|
|
1890
|
+
const [codexAccountBindings,setCodexAccountBindings]=createSignal5({})
|
|
1891
|
+
const [pendingResetAttempt,setPendingResetAttempt]=createSignal5()
|
|
1892
|
+
const [ready,setReady]=createSignal5(false)
|
|
1893
|
+
const [revision,setRevision]=createSignal5(0)
|
|
1784
1894
|
const sessionLayouts=new Map
|
|
1785
1895
|
const pendingUpdates=[]
|
|
1786
1896
|
let document=emptyPreferencesDocument()
|
|
@@ -2291,7 +2401,7 @@ return{behavior,layout:{sections,expanded:{},...sectionOrder&&{order:sectionOrde
|
|
|
2291
2401
|
function configuredDefaultsFromPluginOptions(options){return mergeConfiguredDefaults(legacyDefaults(pluginConfig(options)),parseConfiguredDefaults(options??{}))
|
|
2292
2402
|
}
|
|
2293
2403
|
|
|
2294
|
-
function createSkillController(api,source){const [skills,setSkills]=
|
|
2404
|
+
function createSkillController(api,source){const [skills,setSkills]=createSignal6({})
|
|
2295
2405
|
const refreshing=new Map
|
|
2296
2406
|
const targets=new Map
|
|
2297
2407
|
const requests=createRequestState(api.lifecycle.signal)
|
|
@@ -2513,7 +2623,7 @@ _$insertNode(_el$4,_el$5)
|
|
|
2513
2623
|
_$setProp(_el$4,"flexDirection","row")
|
|
2514
2624
|
_$setProp(_el$4,"gap",1)
|
|
2515
2625
|
_$setProp(_el$4,"alignItems","center")
|
|
2516
|
-
_$insert(_el$4,_$createComponent(
|
|
2626
|
+
_$insert(_el$4,_$createComponent(Show3,{get when(){return props.onConfigure
|
|
2517
2627
|
},get children(){return _$createComponent(IconControl,{get icon(){return terminalIcon("pin",icons.style())
|
|
2518
2628
|
},get foregroundColor(){return _$memo(()=>props.active==="configure")()?theme().selectedListItemText:theme().textMuted
|
|
2519
2629
|
},get backgroundColor(){return _$memo(()=>props.active==="configure")()?theme().primary:undefined
|
|
@@ -2586,7 +2696,7 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
2586
2696
|
},{key:"return",cmd:`${PLUGIN_ID}.skill-dialog.submit`
|
|
2587
2697
|
}]
|
|
2588
2698
|
})
|
|
2589
|
-
|
|
2699
|
+
onCleanup5(unregister)
|
|
2590
2700
|
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
2591
2701
|
},get children(){return [_$createComponent(SkillDialogHeader,{get api(){return props.api
|
|
2592
2702
|
},get name(){return props.skill.name
|
|
@@ -2656,7 +2766,7 @@ input.dialogs.open(()=>_$createComponent(SkillDialog,{get api(){return input.api
|
|
|
2656
2766
|
|
|
2657
2767
|
|
|
2658
2768
|
function createSubagentHistory({now=Date.now}={}){const targets=new Map
|
|
2659
|
-
const [revision,setRevision]=
|
|
2769
|
+
const [revision,setRevision]=createSignal7(0)
|
|
2660
2770
|
function state(key){let value=targets.get(key)
|
|
2661
2771
|
if(!value){value={known:new Set,active:new Map,recent:[]}
|
|
2662
2772
|
targets.set(key,value)
|
|
@@ -2714,11 +2824,11 @@ function activeStatus(status){return status?.type==="busy"||status?.type==="retr
|
|
|
2714
2824
|
function createSubagentController(api,options={}){const source=options.source
|
|
2715
2825
|
const now=options.now??Date.now
|
|
2716
2826
|
const history=createSubagentHistory({now})
|
|
2717
|
-
const [children,setChildren]=
|
|
2718
|
-
const [statuses,setStatuses]=
|
|
2827
|
+
const [children,setChildren]=createSignal8({})
|
|
2828
|
+
const [statuses,setStatuses]=createSignal8({})
|
|
2719
2829
|
const refreshing=new Map
|
|
2720
2830
|
const journals=new Set
|
|
2721
|
-
const [unavailable,setUnavailable]=
|
|
2831
|
+
const [unavailable,setUnavailable]=createSignal8({})
|
|
2722
2832
|
const targets=new Map
|
|
2723
2833
|
const remoteFailures=new Map
|
|
2724
2834
|
const remoteRetryAt=new Map
|
|
@@ -2943,17 +3053,17 @@ else if(seconds>=60)
|
|
|
2943
3053
|
value=`${Math.floor(seconds / 60)}m ${String(seconds % 60).padStart(2, "0")}s`
|
|
2944
3054
|
return value
|
|
2945
3055
|
}
|
|
2946
|
-
function createSubagentClock(key){const [now,setNow]=
|
|
2947
|
-
|
|
3056
|
+
function createSubagentClock(key){const [now,setNow]=createSignal9(Date.now())
|
|
3057
|
+
createEffect6(()=>{if(key()===undefined)
|
|
2948
3058
|
return
|
|
2949
3059
|
setNow(Date.now())
|
|
2950
3060
|
const timer=setInterval(()=>setNow(Date.now()),1000)
|
|
2951
|
-
|
|
3061
|
+
onCleanup6(()=>clearInterval(timer))
|
|
2952
3062
|
})
|
|
2953
3063
|
return now
|
|
2954
3064
|
}
|
|
2955
3065
|
|
|
2956
|
-
function createTodoController(api){const [sessions,setSessions]=
|
|
3066
|
+
function createTodoController(api){const [sessions,setSessions]=createSignal10({})
|
|
2957
3067
|
const refreshing=new Map
|
|
2958
3068
|
const revisions=new Map
|
|
2959
3069
|
const requests=createRequestState(api.lifecycle.signal)
|
|
@@ -3070,10 +3180,10 @@ return action.label
|
|
|
3070
3180
|
const command=api.keymap.getCommands?.({visibility:"registered"}).find((candidate)=>candidate.name===action.command)
|
|
3071
3181
|
return typeof command?.title==="string"?command.title:action.label
|
|
3072
3182
|
}
|
|
3073
|
-
function createQuickActionRevision(api){const [revision,setRevision]=
|
|
3183
|
+
function createQuickActionRevision(api){const [revision,setRevision]=createSignal12(0)
|
|
3074
3184
|
const unsubscribe=api.keymap.on?.("state",()=>setRevision((value)=>value + 1))
|
|
3075
3185
|
if(unsubscribe)
|
|
3076
|
-
|
|
3186
|
+
onCleanup8(unsubscribe)
|
|
3077
3187
|
return revision
|
|
3078
3188
|
}
|
|
3079
3189
|
function orderQuickActionIds(order,favorites){return [...order.filter((id)=>favorites.has(id)),...order.filter((id)=>!favorites.has(id))]
|
|
@@ -3189,7 +3299,7 @@ const [selectedID,setSelectedID]=useDialogState("selection",undefined)
|
|
|
3189
3299
|
const [views]=useDialogState("tab-views",new Map)
|
|
3190
3300
|
const tabViews=views()
|
|
3191
3301
|
const [scrollTop,setScrollTop]=useDialogState("scroll",0)
|
|
3192
|
-
const [refreshing,setRefreshing]=
|
|
3302
|
+
const [refreshing,setRefreshing]=createSignal13(false)
|
|
3193
3303
|
const theme=()=>props.api.theme.current
|
|
3194
3304
|
const icons=useIcons()
|
|
3195
3305
|
const commandRevision=createQuickActionRevision(props.api)
|
|
@@ -3216,7 +3326,7 @@ body.scrollChildIntoView(`${prefix}.${position}`)
|
|
|
3216
3326
|
setScrollTop(body.scrollTop)
|
|
3217
3327
|
}
|
|
3218
3328
|
renderer.on("frame",onFrame)
|
|
3219
|
-
|
|
3329
|
+
onCleanup9(()=>renderer.off("frame",onFrame))
|
|
3220
3330
|
const sameContext=()=>searchContext(props.api).key===context.key
|
|
3221
3331
|
const candidates=createMemo(()=>{commandRevision()
|
|
3222
3332
|
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 +3432,14 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
3322
3432
|
},{key:"ctrl+r",cmd:`${prefix}.retry`
|
|
3323
3433
|
}]
|
|
3324
3434
|
})
|
|
3325
|
-
|
|
3435
|
+
onCleanup9(()=>{isDisposed=true
|
|
3326
3436
|
unregister()
|
|
3327
3437
|
})
|
|
3328
|
-
|
|
3329
|
-
|
|
3438
|
+
onCleanup9(props.skills.activate?.(skillTarget)??(()=>{}))
|
|
3439
|
+
onMount2(()=>{input?.focus()
|
|
3330
3440
|
refresh().catch(report)
|
|
3331
3441
|
})
|
|
3332
|
-
|
|
3442
|
+
createEffect7(()=>{if(!sameContext())
|
|
3333
3443
|
dialogs.close()
|
|
3334
3444
|
})
|
|
3335
3445
|
return{active,activeTab,activate,allErrors,byID,dialogs,errors,icons,loading,matches,prefix,query,queryScope,resultColors,results,selectTab,setBody(node){body=node
|
|
@@ -3492,7 +3602,7 @@ _$effect((_$p)=>_$setProp(_el$2,"fg",model.theme().error,_$p))
|
|
|
3492
3602
|
return _el$2
|
|
3493
3603
|
})()
|
|
3494
3604
|
}),null)
|
|
3495
|
-
_$insert(_el$,_$createComponent(
|
|
3605
|
+
_$insert(_el$,_$createComponent(Show4,{get when(){return model.results().length
|
|
3496
3606
|
},get fallback(){return(()=>{var _el$8=_$createElement("text"),_el$9=_$createTextNode(` `)
|
|
3497
3607
|
_$insertNode(_el$8,_el$9)
|
|
3498
3608
|
_$insert(_el$8,()=>model.icons.icon(model.loading()?"pending":"search"),_el$9)
|
|
@@ -3500,7 +3610,7 @@ _$insert(_el$8,()=>model.loading()?"Loading sources\u2026":"No matching results"
|
|
|
3500
3610
|
_$effect((_$p)=>_$setProp(_el$8,"fg",model.theme().textMuted,_$p))
|
|
3501
3611
|
return _el$8
|
|
3502
3612
|
})()
|
|
3503
|
-
},get children(){return _$createComponent(
|
|
3613
|
+
},get children(){return _$createComponent(Show4,{keyed:true,get when(){return model.queryScope()
|
|
3504
3614
|
},children:(_scope)=>_$createComponent(For3,{get each(){return model.results().map((item)=>item.id)
|
|
3505
3615
|
},children:(id)=>_$createComponent(SearchResultRow,{model,id
|
|
3506
3616
|
})
|
|
@@ -3554,13 +3664,13 @@ timers.add(timer)
|
|
|
3554
3664
|
}},{name:`${LEGACY_PLUGIN_ID}.search`,run(){props.api.keymap.dispatchCommand(SEARCH_COMMAND)
|
|
3555
3665
|
}}]
|
|
3556
3666
|
})
|
|
3557
|
-
|
|
3667
|
+
createEffect8(()=>{const key=props.preferences.searchKey()
|
|
3558
3668
|
const remove=props.api.keymap.registerLayer({mode:"base",bindings:[{key,cmd:SEARCH_COMMAND
|
|
3559
3669
|
}]
|
|
3560
3670
|
})
|
|
3561
|
-
|
|
3671
|
+
onCleanup10(remove)
|
|
3562
3672
|
})
|
|
3563
|
-
|
|
3673
|
+
onCleanup10(()=>{isDisposed=true
|
|
3564
3674
|
unregister()
|
|
3565
3675
|
for(const timer of timers)
|
|
3566
3676
|
clearTimeout(timer)
|
|
@@ -3592,274 +3702,16 @@ return value&&valid()&&!blocked()?controller.applyPreset(name,value,target):unde
|
|
|
3592
3702
|
|
|
3593
3703
|
|
|
3594
3704
|
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
var ONBOARDING_STEPS=[{title:"A control center that stays compact",summary:"Navigator brings session state, search, and controls into OpenCode's existing sidebar.",icon:"help",features:[{icon:"sections",title:"Progressive disclosure",description:"Expand only the context you need right now."},{icon:"scope",title:"Current context",description:"Follow the active session, workspace, and worktree."},{icon:"actions",title:"Mouse and keyboard",description:"Use the same controls with either input method."}]
|
|
3601
|
-
},{title:"Stay oriented while agents work",summary:"Keep current work visible without turning the sidebar into another dashboard.",icon:"todo",features:[{icon:"todo",title:"Todo filters",description:"Separate active, finished, and cancelled work."},{icon:"subagents",title:"Live subagents",description:"See running, retrying, recent, and failed child sessions; open them directly."
|
|
3602
|
-
},{icon:"info",title:"Provider limits",description:"Link a matching Codex account for model quotas and confirmed banked resets."
|
|
3603
|
-
}]
|
|
3604
|
-
},{title:"Find anything and launch Skills safely",summary:"Search complete source lists without expanding every sidebar section.",icon:"search",features:[{icon:"search",title:"Search Everything",description:"Search Skills, Subagents, MCP, and Actions in shared tabs."
|
|
3605
|
-
},{icon:"search",title:"Full source lists",description:"Search beyond sidebar visibility and item limits."},{icon:"skills",title:"Skill confirmation",description:"Review a skill and its source before inserting its command."
|
|
3606
|
-
}]
|
|
3607
|
-
},{title:"Run actions and check language tools",summary:"Keep frequent OpenCode commands and LSP health within one compact section.",icon:"actions",features:[{icon:"actions",title:"Quick Actions",description:"Rename, inspect timelines, copy, export, or compact the session."
|
|
3608
|
-
},{icon:"lsp",title:"Compact LSP status",description:"Spot connected and failed language servers at a glance."
|
|
3609
|
-
},{icon:"settings",title:"Configurable commands",description:"Choose action visibility, order, and shortcuts."
|
|
3610
|
-
}]
|
|
3611
|
-
},{title:"Control MCP without losing context",summary:"Manage individual servers or entire working sets directly from Navigator.",icon:"mcp",features:[{icon:"mcp",title:"Live server controls",description:"Connect, disconnect, filter, and favorite servers."},{icon:"actions",title:"Bulk operations",description:"Change eligible servers together and retry failures."
|
|
3612
|
-
},{icon:"presets",title:"Safe presets",description:"Preview connections and disconnections before Apply."}]
|
|
3613
|
-
},{title:"Make Navigator fit each workspace",summary:"Use the same controls with mouse or keyboard and keep only the context you need.",icon:"settings",features:[{icon:"sections",title:"Flexible layout",description:"Choose section visibility, order, expansion, and item limits."
|
|
3614
|
-
},{icon:"presets",title:"Scoped presets",description:"Save layouts globally or for the current worktree."},{icon:"settings",title:"Accessible controls",description:"Change shortcuts or use Text fallback without a restart."
|
|
3615
|
-
}]
|
|
3616
|
-
}];
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
function OnboardingStep(props){const icons=useIcons()
|
|
3628
|
-
const theme=()=>props.api.theme.current
|
|
3629
|
-
return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` `),_el$4=_$createElement("text"),_el$5=_$createElement("box"),_el$6=_$createElement("text"),_el$7=_$createTextNode(`Toggle: `),_el$8=_$createTextNode(` \xB7 Focus: `),_el$9=_$createTextNode(` \xB7 Icons: `),_el$1=_$createElement("box")
|
|
3630
|
-
_$insertNode(_el$,_el$2)
|
|
3631
|
-
_$insertNode(_el$,_el$4)
|
|
3632
|
-
_$insertNode(_el$,_el$5)
|
|
3633
|
-
_$insertNode(_el$,_el$6)
|
|
3634
|
-
_$insertNode(_el$,_el$1)
|
|
3635
|
-
_$setProp(_el$,"gap",1)
|
|
3636
|
-
_$insertNode(_el$2,_el$3)
|
|
3637
|
-
_$insert(_el$2,()=>icons.icon(props.step.icon),_el$3)
|
|
3638
|
-
_$insert(_el$2,()=>props.step.title,null)
|
|
3639
|
-
_$setProp(_el$4,"wrapMode","word")
|
|
3640
|
-
_$insert(_el$4,()=>props.step.summary)
|
|
3641
|
-
_$setProp(_el$5,"border",["top","bottom"])
|
|
3642
|
-
_$setProp(_el$5,"paddingTop",1)
|
|
3643
|
-
_$setProp(_el$5,"paddingBottom",1)
|
|
3644
|
-
_$setProp(_el$5,"gap",1)
|
|
3645
|
-
_$insert(_el$5,_$createComponent(For4,{get each(){return props.step.features
|
|
3646
|
-
},children:(feature)=>(()=>{var _el$14=_$createElement("box"),_el$15=_$createElement("text"),_el$16=_$createElement("text"),_el$17=_$createElement("b"),_el$18=_$createTextNode(` \xB7 `)
|
|
3647
|
-
_$insertNode(_el$14,_el$15)
|
|
3648
|
-
_$insertNode(_el$14,_el$16)
|
|
3649
|
-
_$setProp(_el$14,"flexDirection","row")
|
|
3650
|
-
_$setProp(_el$14,"gap",1)
|
|
3651
|
-
_$setProp(_el$15,"flexShrink",0)
|
|
3652
|
-
_$insert(_el$15,()=>icons.icon(feature.icon))
|
|
3653
|
-
_$insertNode(_el$16,_el$17)
|
|
3654
|
-
_$insertNode(_el$16,_el$18)
|
|
3655
|
-
_$setProp(_el$16,"flexGrow",1)
|
|
3656
|
-
_$setProp(_el$16,"minWidth",0)
|
|
3657
|
-
_$setProp(_el$16,"wrapMode","word")
|
|
3658
|
-
_$insert(_el$17,()=>feature.title)
|
|
3659
|
-
_$insert(_el$16,()=>feature.description,null)
|
|
3660
|
-
_$effect((_p$)=>{var _v$6=theme().accent,_v$7=theme().textMuted
|
|
3661
|
-
_v$6!==_p$.e&&(_p$.e=_$setProp(_el$15,"fg",_v$6,_p$.e))
|
|
3662
|
-
_v$7!==_p$.t&&(_p$.t=_$setProp(_el$16,"fg",_v$7,_p$.t))
|
|
3663
|
-
return _p$
|
|
3664
|
-
},{e:undefined,t:undefined
|
|
3665
|
-
})
|
|
3666
|
-
return _el$14
|
|
3667
|
-
})()
|
|
3668
|
-
}))
|
|
3669
|
-
_$insertNode(_el$6,_el$7)
|
|
3670
|
-
_$insertNode(_el$6,_el$8)
|
|
3671
|
-
_$insertNode(_el$6,_el$9)
|
|
3672
|
-
_$setProp(_el$6,"wrapMode","word")
|
|
3673
|
-
_$insert(_el$6,()=>props.preferences.toggleKey(),_el$8)
|
|
3674
|
-
_$insert(_el$6,()=>props.preferences.focusKey(),_el$9)
|
|
3675
|
-
_$insert(_el$6,()=>icons.style()==="text"?"Text fallback":"Nerd Font",null)
|
|
3676
|
-
_$setProp(_el$1,"flexDirection","row")
|
|
3677
|
-
_$setProp(_el$1,"justifyContent","space-between")
|
|
3678
|
-
_$insert(_el$1,_$createComponent(SelectionBox,{paddingLeft:1,paddingRight:1,onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
3679
|
-
props.onBack()
|
|
3680
|
-
},get children(){var _el$10=_$createElement("text"),_el$11=_$createTextNode(` Back`)
|
|
3681
|
-
_$insertNode(_el$10,_el$11)
|
|
3682
|
-
_$insert(_el$10,()=>icons.icon("left"),_el$11)
|
|
3683
|
-
_$effect((_$p)=>_$setProp(_el$10,"fg",theme().textMuted,_$p))
|
|
3684
|
-
return _el$10
|
|
3685
|
-
}}),null)
|
|
3686
|
-
_$insert(_el$1,_$createComponent(SelectionBox,{paddingLeft:1,paddingRight:1,get backgroundColor(){return theme().primary
|
|
3687
|
-
},onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
3688
|
-
props.onAdvance()
|
|
3689
|
-
},get children(){var _el$12=_$createElement("text"),_el$13=_$createTextNode(` `)
|
|
3690
|
-
_$insertNode(_el$12,_el$13)
|
|
3691
|
-
_$insert(_el$12,()=>props.final?"Configure sidebar":"Next",_el$13)
|
|
3692
|
-
_$insert(_el$12,()=>icons.icon("right"),null)
|
|
3693
|
-
_$effect((_$p)=>_$setProp(_el$12,"fg",theme().selectedListItemText,_$p))
|
|
3694
|
-
return _el$12
|
|
3695
|
-
}}),null)
|
|
3696
|
-
_$effect((_p$)=>{var _v$=theme().accent,_v$2=TextAttributes10.BOLD,_v$3=theme().textMuted,_v$4=theme().borderSubtle,_v$5=theme().textMuted
|
|
3697
|
-
_v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
|
|
3698
|
-
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$2,"attributes",_v$2,_p$.t))
|
|
3699
|
-
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$4,"fg",_v$3,_p$.a))
|
|
3700
|
-
_v$4!==_p$.o&&(_p$.o=_$setProp(_el$5,"borderColor",_v$4,_p$.o))
|
|
3701
|
-
_v$5!==_p$.i&&(_p$.i=_$setProp(_el$6,"fg",_v$5,_p$.i))
|
|
3702
|
-
return _p$
|
|
3703
|
-
},{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined
|
|
3704
|
-
})
|
|
3705
|
-
return _el$
|
|
3706
|
-
})()
|
|
3707
|
-
}
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3717
|
-
|
|
3718
|
-
function SectionConfig(props){const icons=useIcons()
|
|
3719
|
-
const theme=()=>props.api.theme.current
|
|
3720
|
-
const sections=SECTION_DEFINITIONS.filter((section)=>supportsSidebarSection(props.api,section.name))
|
|
3721
|
-
const finishIndex=sections.length
|
|
3722
|
-
return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` Choose your sidebar sections`),_el$4=_$createElement("text"),_el$6=_$createElement("box")
|
|
3723
|
-
_$insertNode(_el$,_el$2)
|
|
3724
|
-
_$insertNode(_el$,_el$4)
|
|
3725
|
-
_$insertNode(_el$,_el$6)
|
|
3726
|
-
_$setProp(_el$,"gap",1)
|
|
3727
|
-
_$insertNode(_el$2,_el$3)
|
|
3728
|
-
_$insert(_el$2,()=>icons.icon("sections"),_el$3)
|
|
3729
|
-
_$insertNode(_el$4,_$createTextNode(`Select what appears now. You can change visibility, order, limits, scope, and presets later with the gear button.`))
|
|
3730
|
-
_$setProp(_el$4,"wrapMode","word")
|
|
3731
|
-
_$insert(_el$,_$createComponent(For5,{each:sections,children:(section,index)=>_$createComponent(SelectionBox,{flexDirection:"row",gap:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return _$memo(()=>props.active===index())()?theme().backgroundElement:undefined
|
|
3732
|
-
},onMouseOver:()=>props.onActive(index()),onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
3733
|
-
props.preferences.toggleSection(section.name)
|
|
3734
|
-
},get children(){return [(()=>{var _el$1=_$createElement("text")
|
|
3735
|
-
_$setProp(_el$1,"flexShrink",0)
|
|
3736
|
-
_$insert(_el$1,()=>icons.icon(props.preferences.sections()[section.name]?"checked":"unchecked"))
|
|
3737
|
-
_$effect((_$p)=>_$setProp(_el$1,"fg",props.preferences.sections()[section.name]?theme().accent:theme().textMuted,_$p))
|
|
3738
|
-
return _el$1
|
|
3739
|
-
})(),(()=>{var _el$10=_$createElement("text"),_el$11=_$createTextNode(` `)
|
|
3740
|
-
_$insertNode(_el$10,_el$11)
|
|
3741
|
-
_$insert(_el$10,()=>icons.section(section.name),_el$11)
|
|
3742
|
-
_$insert(_el$10,()=>section.label,null)
|
|
3743
|
-
_$effect((_$p)=>_$setProp(_el$10,"fg",props.active===index()?theme().text:theme().textMuted,_$p))
|
|
3744
|
-
return _el$10
|
|
3745
|
-
})()]
|
|
3705
|
+
var Content=lazy3(async ()=>{const path=import.meta.url.includes("/dist/")?"./onboarding.js":"./first-run-wizard-content"
|
|
3706
|
+
const module=await import(path)
|
|
3707
|
+
return{default:module.FirstRunWizard
|
|
3746
3708
|
}})
|
|
3747
|
-
|
|
3748
|
-
_$
|
|
3749
|
-
|
|
3750
|
-
_$insert(_el$6,_$createComponent(SelectionBox,{paddingLeft:1,paddingRight:1,onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
3751
|
-
props.onBack()
|
|
3752
|
-
},get children(){var _el$7=_$createElement("text"),_el$8=_$createTextNode(` Back`)
|
|
3753
|
-
_$insertNode(_el$7,_el$8)
|
|
3754
|
-
_$insert(_el$7,()=>icons.icon("left"),_el$8)
|
|
3755
|
-
_$effect((_$p)=>_$setProp(_el$7,"fg",theme().textMuted,_$p))
|
|
3756
|
-
return _el$7
|
|
3757
|
-
}}),null)
|
|
3758
|
-
_$insert(_el$6,_$createComponent(SelectionBox,{paddingLeft:2,paddingRight:2,get backgroundColor(){return _$memo(()=>props.active===finishIndex)()?theme().primary:undefined
|
|
3759
|
-
},onMouseOver:()=>props.onActive(finishIndex),onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
3760
|
-
props.onFinish()
|
|
3761
|
-
},get children(){var _el$9=_$createElement("text"),_el$0=_$createTextNode(` Finish`)
|
|
3762
|
-
_$insertNode(_el$9,_el$0)
|
|
3763
|
-
_$insert(_el$9,()=>icons.icon("done"),_el$0)
|
|
3764
|
-
_$effect((_$p)=>_$setProp(_el$9,"fg",props.active===finishIndex?theme().selectedListItemText:theme().textMuted,_$p))
|
|
3765
|
-
return _el$9
|
|
3766
|
-
}}),null)
|
|
3767
|
-
_$effect((_p$)=>{var _v$=theme().accent,_v$2=TextAttributes11.BOLD,_v$3=theme().textMuted
|
|
3768
|
-
_v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
|
|
3769
|
-
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$2,"attributes",_v$2,_p$.t))
|
|
3770
|
-
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$4,"fg",_v$3,_p$.a))
|
|
3771
|
-
return _p$
|
|
3772
|
-
},{e:undefined,t:undefined,a:undefined
|
|
3773
|
-
})
|
|
3709
|
+
function FirstRunWizard(props){return(()=>{var _el$=_$createElement("box")
|
|
3710
|
+
_$insert(_el$,_$createComponent(Suspense3,{get children(){return _$createComponent(Content,props)
|
|
3711
|
+
}}))
|
|
3774
3712
|
return _el$
|
|
3775
3713
|
})()
|
|
3776
3714
|
}
|
|
3777
|
-
function FirstRunWizard(props){const icons=useIcons()
|
|
3778
|
-
const dialogs=useDialogs(props.api)
|
|
3779
|
-
const [active,setActive]=createSignal13(0)
|
|
3780
|
-
const [step,setStep]=createSignal13(0)
|
|
3781
|
-
const theme=()=>props.api.theme.current
|
|
3782
|
-
const sections=SECTION_DEFINITIONS.filter((section)=>supportsSidebarSection(props.api,section.name))
|
|
3783
|
-
const finishIndex=sections.length
|
|
3784
|
-
const stepCount=ONBOARDING_STEPS.length + 1
|
|
3785
|
-
const configuring=()=>step()===ONBOARDING_STEPS.length
|
|
3786
|
-
function finish(){dialogs.back()
|
|
3787
|
-
}
|
|
3788
|
-
function move(offset){if(configuring())
|
|
3789
|
-
setActive((value)=>(value + offset + finishIndex + 1)%(finishIndex + 1))
|
|
3790
|
-
else
|
|
3791
|
-
setStep((value)=>Math.max(0,Math.min(ONBOARDING_STEPS.length,value + offset)))
|
|
3792
|
-
}
|
|
3793
|
-
function back(){setStep((value)=>Math.max(0,value-1))
|
|
3794
|
-
}
|
|
3795
|
-
function advance(){if(!configuring())
|
|
3796
|
-
setStep((value)=>Math.min(ONBOARDING_STEPS.length,value + 1))
|
|
3797
|
-
}
|
|
3798
|
-
function select(){if(!configuring()){advance()
|
|
3799
|
-
return
|
|
3800
|
-
}
|
|
3801
|
-
const index=active()
|
|
3802
|
-
if(index===finishIndex)
|
|
3803
|
-
finish()
|
|
3804
|
-
else
|
|
3805
|
-
props.preferences.toggleSection(sections[index].name)
|
|
3806
|
-
}
|
|
3807
|
-
const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,commands:[{name:`${PLUGIN_ID}.wizard.previous`,run(){move(-1)
|
|
3808
|
-
}},{name:`${PLUGIN_ID}.wizard.next`,run(){move(1)
|
|
3809
|
-
}},{name:`${PLUGIN_ID}.wizard.select`,run:select
|
|
3810
|
-
},{name:`${PLUGIN_ID}.wizard.back`,run:back
|
|
3811
|
-
},{name:`${PLUGIN_ID}.wizard.forward`,run:advance
|
|
3812
|
-
}],bindings:[{key:"up",cmd:`${PLUGIN_ID}.wizard.previous`
|
|
3813
|
-
},{key:"down",cmd:`${PLUGIN_ID}.wizard.next`
|
|
3814
|
-
},{key:"tab",cmd:`${PLUGIN_ID}.wizard.next`
|
|
3815
|
-
},{key:"left",cmd:`${PLUGIN_ID}.wizard.back`
|
|
3816
|
-
},{key:"right",cmd:`${PLUGIN_ID}.wizard.forward`
|
|
3817
|
-
},{key:"space",cmd:`${PLUGIN_ID}.wizard.select`
|
|
3818
|
-
},{key:"return",cmd:`${PLUGIN_ID}.wizard.select`
|
|
3819
|
-
}]
|
|
3820
|
-
})
|
|
3821
|
-
onCleanup10(unregister)
|
|
3822
|
-
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
3823
|
-
},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
|
-
_$insertNode(_el$,_el$2)
|
|
3825
|
-
_$insertNode(_el$,_el$4)
|
|
3826
|
-
_$setProp(_el$,"flexDirection","row")
|
|
3827
|
-
_$setProp(_el$,"justifyContent","space-between")
|
|
3828
|
-
_$insertNode(_el$2,_el$3)
|
|
3829
|
-
_$insert(_el$2,()=>icons.icon("help"),_el$3)
|
|
3830
|
-
_$insertNode(_el$4,_el$5)
|
|
3831
|
-
_$insertNode(_el$4,_el$6)
|
|
3832
|
-
_$insertNode(_el$4,_el$7)
|
|
3833
|
-
_$setProp(_el$4,"onMouseDown",(event)=>event.stopPropagation())
|
|
3834
|
-
_$setProp(_el$4,"onMouseUp",(event)=>{event.stopPropagation()
|
|
3835
|
-
finish()
|
|
3836
|
-
})
|
|
3837
|
-
_$insert(_el$4,()=>step() + 1,_el$6)
|
|
3838
|
-
_$insert(_el$4,stepCount,_el$7)
|
|
3839
|
-
_$insert(_el$4,()=>icons.key("esc"),null)
|
|
3840
|
-
_$effect((_p$)=>{var _v$=TextAttributes12.BOLD,_v$2=theme().text,_v$3=theme().textMuted
|
|
3841
|
-
_v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"attributes",_v$,_p$.e))
|
|
3842
|
-
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$2,"fg",_v$2,_p$.t))
|
|
3843
|
-
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$4,"fg",_v$3,_p$.a))
|
|
3844
|
-
return _p$
|
|
3845
|
-
},{e:undefined,t:undefined,a:undefined
|
|
3846
|
-
})
|
|
3847
|
-
return _el$
|
|
3848
|
-
})(),_$createComponent(Show4,{get when(){return configuring()
|
|
3849
|
-
},get fallback(){return _$createComponent(OnboardingStep,{get api(){return props.api
|
|
3850
|
-
},get preferences(){return props.preferences
|
|
3851
|
-
},get step(){return ONBOARDING_STEPS[step()]
|
|
3852
|
-
},get final(){return step()===ONBOARDING_STEPS.length-1
|
|
3853
|
-
},onBack:back,onAdvance:advance
|
|
3854
|
-
})
|
|
3855
|
-
},get children(){return _$createComponent(SectionConfig,{get api(){return props.api
|
|
3856
|
-
},get preferences(){return props.preferences
|
|
3857
|
-
},get active(){return active()
|
|
3858
|
-
},onActive:setActive,onBack:back,onFinish:finish
|
|
3859
|
-
})
|
|
3860
|
-
}})]
|
|
3861
|
-
}})
|
|
3862
|
-
}
|
|
3863
3715
|
function openFirstRunWizard(api,preferences){createDialogStack(api,preferences.lspIconStyle,()=>true,preferences.cornerFont).open(()=>_$createComponent(FirstRunWizard,{api,preferences
|
|
3864
3716
|
}))
|
|
3865
3717
|
}
|
|
@@ -3945,7 +3797,7 @@ return(()=>{var _el$=_$createElement("box")
|
|
|
3945
3797
|
_$setProp(_el$,"flexDirection","row")
|
|
3946
3798
|
_$setProp(_el$,"flexWrap","wrap")
|
|
3947
3799
|
_$setProp(_el$,"gap",1)
|
|
3948
|
-
_$insert(_el$,_$createComponent(
|
|
3800
|
+
_$insert(_el$,_$createComponent(For4,{get each(){return props.stats
|
|
3949
3801
|
},children:(stat)=>_$createComponent(SelectionBox,{height:1,get backgroundColor(){return theme().backgroundElement
|
|
3950
3802
|
},paddingLeft:1,paddingRight:1,get children(){var _el$2=_$createElement("text"),_el$3=_$createTextNode(` `)
|
|
3951
3803
|
_$insertNode(_el$2,_el$3)
|
|
@@ -3995,7 +3847,7 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
3995
3847
|
}]
|
|
3996
3848
|
})
|
|
3997
3849
|
onCleanup11(unregister)
|
|
3998
|
-
|
|
3850
|
+
createEffect9(()=>{if(!props.valid())
|
|
3999
3851
|
dialogs.close()
|
|
4000
3852
|
})
|
|
4001
3853
|
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
@@ -4102,7 +3954,7 @@ _$insertNode(_el$4,_el$5)
|
|
|
4102
3954
|
_$setProp(_el$4,"flexShrink",0)
|
|
4103
3955
|
_$insert(_el$4,()=>icons.icon(props.statusIcon),_el$5)
|
|
4104
3956
|
_$insert(_el$4,()=>props.statusLabel,null)
|
|
4105
|
-
_$effect((_p$)=>{var _v$=statusColor(),_v$2=emphasized()?theme().text:theme().textMuted,_v$3=emphasized()?
|
|
3957
|
+
_$effect((_p$)=>{var _v$=statusColor(),_v$2=emphasized()?theme().text:theme().textMuted,_v$3=emphasized()?TextAttributes10.BOLD:undefined,_v$4=statusColor(),_v$5=emphasized()?TextAttributes10.BOLD:undefined
|
|
4106
3958
|
_v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
|
|
4107
3959
|
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"fg",_v$2,_p$.t))
|
|
4108
3960
|
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$3,"attributes",_v$3,_p$.a))
|
|
@@ -4127,7 +3979,7 @@ return _el$6
|
|
|
4127
3979
|
function McpPresetPreview(props){const dialogs=useDialogs(props.api)
|
|
4128
3980
|
const icons=useIcons()
|
|
4129
3981
|
const model=createMcpPresetPreview(props.controller,props.preferences,props.name)
|
|
4130
|
-
|
|
3982
|
+
onMount3(model.refresh)
|
|
4131
3983
|
const rows=createMemo3(()=>mcpPreviewRows(model,icons))
|
|
4132
3984
|
const count=(change)=>model.preview().rows.filter((row)=>row.change===change).length
|
|
4133
3985
|
return _$createComponent(PresetPreviewFrame,{get api(){return props.api
|
|
@@ -4148,7 +4000,7 @@ if(!request)
|
|
|
4148
4000
|
return
|
|
4149
4001
|
dialogs.close()
|
|
4150
4002
|
reportMcpApplyError(props.api,request)
|
|
4151
|
-
},get children(){return _$createComponent(
|
|
4003
|
+
},get children(){return _$createComponent(For5,{get each(){return rows()
|
|
4152
4004
|
},children:(row)=>_$createComponent(PresetPreviewRow,_$mergeProps({get api(){return props.api
|
|
4153
4005
|
}},row))
|
|
4154
4006
|
})
|
|
@@ -4248,12 +4100,12 @@ dialogs.open(()=>_$createComponent(SelectionMenu,{api,title:"MCP presets",get op
|
|
|
4248
4100
|
|
|
4249
4101
|
|
|
4250
4102
|
|
|
4251
|
-
var
|
|
4103
|
+
var Content2=lazy4(async ()=>{const path=import.meta.url.includes("/dist/")?"./sidebar-settings.js":"./settings-dialog-content"
|
|
4252
4104
|
const module=await import(path)
|
|
4253
4105
|
return{default:module.SettingsDialog
|
|
4254
4106
|
}})
|
|
4255
4107
|
function SettingsDialog(props){return(()=>{var _el$=_$createElement("box")
|
|
4256
|
-
_$insert(_el$,_$createComponent(
|
|
4108
|
+
_$insert(_el$,_$createComponent(Suspense4,{get children(){return _$createComponent(Content2,props)
|
|
4257
4109
|
}}))
|
|
4258
4110
|
return _el$
|
|
4259
4111
|
})()
|
|
@@ -4295,7 +4147,7 @@ return _$createElement("box")
|
|
|
4295
4147
|
|
|
4296
4148
|
function PermissionModeBinding(props){let applying=false
|
|
4297
4149
|
let observed
|
|
4298
|
-
|
|
4150
|
+
createEffect12(()=>{if(!props.preferences.ready())
|
|
4299
4151
|
return
|
|
4300
4152
|
const preferred=props.preferences.autoApprovePermissions()
|
|
4301
4153
|
const current=currentPermissionMode(props.api)
|
|
@@ -4334,6 +4186,23 @@ return _$createComponent(IconControl,{id:`${PLUGIN_ID}.settings.footer`,get icon
|
|
|
4334
4186
|
|
|
4335
4187
|
|
|
4336
4188
|
|
|
4189
|
+
var services=new WeakMap
|
|
4190
|
+
function createSlot(){const [read,write]=createSignal16()
|
|
4191
|
+
return{read,write}}
|
|
4192
|
+
function slot(api){let entry=services.get(api)
|
|
4193
|
+
if(!entry){entry=createSlot()
|
|
4194
|
+
services.set(api,entry)
|
|
4195
|
+
}
|
|
4196
|
+
return entry
|
|
4197
|
+
}
|
|
4198
|
+
function registerNavigatorAboutServices(api,value){const entry=slot(api)
|
|
4199
|
+
entry.write(value)
|
|
4200
|
+
return()=>{if(entry.read()===value)
|
|
4201
|
+
entry.write(undefined)
|
|
4202
|
+
}}
|
|
4203
|
+
function getNavigatorAboutServices(api){return slot(api).read()
|
|
4204
|
+
}
|
|
4205
|
+
|
|
4337
4206
|
var ACTIONS=[{key:"h",label:"Toggle sidebar",icon:"sections",group:"navigate",command:"session.sidebar.toggle",section:undefined
|
|
4338
4207
|
},{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
4208
|
},{key:"s",label:"Skills",icon:"skills",group:"navigate",command:`${PLUGIN_ID}.focus.skills`,section:"skills"
|
|
@@ -4348,7 +4217,7 @@ var CANCEL_COMMAND=`${PLUGIN_ID}.sidebar-shortcuts.cancel`
|
|
|
4348
4217
|
var MODE=`${PLUGIN_ID}.sidebar-shortcuts`
|
|
4349
4218
|
var DEFAULT_TIMEOUT_MS=5000
|
|
4350
4219
|
function createSidebarShortcutMode(api,options={}){const actions=sidebarShortcutActions(api)
|
|
4351
|
-
const [active,setActive]=
|
|
4220
|
+
const [active,setActive]=createSignal17(false)
|
|
4352
4221
|
const timeoutMs=options.timeoutMs??DEFAULT_TIMEOUT_MS
|
|
4353
4222
|
let shortcutKey=""
|
|
4354
4223
|
let unregisterBinding
|
|
@@ -4398,7 +4267,7 @@ unregisterBinding=undefined
|
|
|
4398
4267
|
unregisterCommands()
|
|
4399
4268
|
}}}
|
|
4400
4269
|
|
|
4401
|
-
var SidebarShortcutHint=
|
|
4270
|
+
var SidebarShortcutHint=lazy5(()=>{const path=import.meta.url.includes("/dist/tui.js")?"./sidebar-shortcuts.js":"../../../sidebar-shortcuts"
|
|
4402
4271
|
return import(path)
|
|
4403
4272
|
});
|
|
4404
4273
|
|
|
@@ -4490,131 +4359,23 @@ queueMicrotask(()=>void props.controller.start())
|
|
|
4490
4359
|
})
|
|
4491
4360
|
onCleanup15(unregister)
|
|
4492
4361
|
} else
|
|
4493
|
-
|
|
4362
|
+
createEffect13(()=>{if(!props.controller.enabled())
|
|
4494
4363
|
return
|
|
4495
4364
|
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
4365
|
}]
|
|
4497
4366
|
})
|
|
4498
4367
|
onCleanup15(unregister)
|
|
4499
4368
|
})
|
|
4500
|
-
|
|
4369
|
+
onMount5(()=>void props.controller.initialize())
|
|
4501
4370
|
onCleanup15(props.controller.dispose)
|
|
4502
4371
|
return _$createElement("box")
|
|
4503
4372
|
}
|
|
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
4373
|
|
|
4538
4374
|
|
|
4539
4375
|
|
|
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
4376
|
function UpgradeNotesBinding(props){let pending
|
|
4616
4377
|
let disposed=false
|
|
4617
|
-
|
|
4378
|
+
onMount6(async ()=>{const previous=await props.preferences.claimNavigatorUpgrade(props.version)
|
|
4618
4379
|
if(!previous||disposed)
|
|
4619
4380
|
return
|
|
4620
4381
|
try{let show=function(){if(disposed||props.api.lifecycle.signal?.aborted)
|
|
@@ -4627,6 +4388,9 @@ createDialogStack(props.api,props.preferences.lspIconStyle,()=>true,props.prefer
|
|
|
4627
4388
|
},entries
|
|
4628
4389
|
}),"large")
|
|
4629
4390
|
}
|
|
4391
|
+
const path=import.meta.url.includes("/dist/")?"./upgrade-notes.js":"./upgrade-notes-content"
|
|
4392
|
+
const{changesSince,readBundledChangelog,UpgradeNotesDialog
|
|
4393
|
+
}=await import(path)
|
|
4630
4394
|
const entries=changesSince(await (props.read??readBundledChangelog)(),previous,props.version)
|
|
4631
4395
|
if(entries.length===0||disposed)
|
|
4632
4396
|
return
|
|
@@ -4647,6 +4411,16 @@ return _$createElement("box")
|
|
|
4647
4411
|
|
|
4648
4412
|
|
|
4649
4413
|
|
|
4414
|
+
|
|
4415
|
+
|
|
4416
|
+
|
|
4417
|
+
|
|
4418
|
+
|
|
4419
|
+
|
|
4420
|
+
|
|
4421
|
+
|
|
4422
|
+
|
|
4423
|
+
|
|
4650
4424
|
|
|
4651
4425
|
|
|
4652
4426
|
|
|
@@ -4727,6 +4501,9 @@ return _el$
|
|
|
4727
4501
|
})()
|
|
4728
4502
|
}
|
|
4729
4503
|
|
|
4504
|
+
|
|
4505
|
+
|
|
4506
|
+
|
|
4730
4507
|
function matchesFilter(query,...values){const needle=query.trim().toLocaleLowerCase()
|
|
4731
4508
|
return !needle||values.some((value)=>value?.toLocaleLowerCase().includes(needle))
|
|
4732
4509
|
}
|
|
@@ -4750,9 +4527,9 @@ return false
|
|
|
4750
4527
|
return true
|
|
4751
4528
|
}
|
|
4752
4529
|
function createSidebarInteraction(api,showHelp=()=>openKeyboardHelp(api)){const descriptors=new Map
|
|
4753
|
-
const [selectedId,setSelectedId]=
|
|
4754
|
-
const [focusWithin,setFocusWithin]=
|
|
4755
|
-
const [revision,setRevision]=
|
|
4530
|
+
const [selectedId,setSelectedId]=createSignal20()
|
|
4531
|
+
const [focusWithin,setFocusWithin]=createSignal20(false)
|
|
4532
|
+
const [revision,setRevision]=createSignal20(0)
|
|
4756
4533
|
let titleRoot
|
|
4757
4534
|
let contentRoot
|
|
4758
4535
|
let targetedRoot
|
|
@@ -5021,14 +4798,14 @@ else if(highlighted)
|
|
|
5021
4798
|
foregroundColor=theme.selectedListItemText
|
|
5022
4799
|
return{backgroundColor,foregroundColor}}
|
|
5023
4800
|
function useSidebarItem(api,interaction,descriptor,normalColor=()=>api.theme.current.text,mode="row"){let unregister
|
|
5024
|
-
const [hovered,setHovered]=
|
|
4801
|
+
const [hovered,setHovered]=createSignal21(false)
|
|
5025
4802
|
const disabled=()=>descriptor.disabled?.()===true
|
|
5026
4803
|
const focused=()=>Boolean(interaction?.ownsFocus()&&interaction.isSelected(descriptor.id))
|
|
5027
4804
|
const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),hovered:hovered(),disabled:disabled()},normalColor(),mode)
|
|
5028
4805
|
const ref=(renderable)=>{unregister?.()
|
|
5029
4806
|
unregister=interaction?.register({...descriptor,renderable})
|
|
5030
4807
|
}
|
|
5031
|
-
|
|
4808
|
+
onCleanup18(()=>unregister?.())
|
|
5032
4809
|
return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
|
|
5033
4810
|
},activate(event){if(interaction)
|
|
5034
4811
|
return interaction.mouseActivate(descriptor.id,event)
|
|
@@ -5039,7 +4816,7 @@ return true
|
|
|
5039
4816
|
}}}
|
|
5040
4817
|
function LspBadge(props){const icons=useIcons()
|
|
5041
4818
|
const isKnown=lspIconName(props.id)!==undefined
|
|
5042
|
-
const [showName,setShowName]=
|
|
4819
|
+
const [showName,setShowName]=createSignal22(false)
|
|
5043
4820
|
const statusColor=()=>props.status==="connected"?props.api.theme.current.success:props.api.theme.current.error
|
|
5044
4821
|
if(!isKnown){return(()=>{var _el$=_$createElement("text")
|
|
5045
4822
|
_$setProp(_el$,"flexShrink",1)
|
|
@@ -5082,7 +4859,7 @@ return _el$3
|
|
|
5082
4859
|
|
|
5083
4860
|
|
|
5084
4861
|
|
|
5085
|
-
function createListVisibility(options){const [expanded,setExpanded]=
|
|
4862
|
+
function createListVisibility(options){const [expanded,setExpanded]=createSignal23(false)
|
|
5086
4863
|
let previousKey
|
|
5087
4864
|
let previousLimit
|
|
5088
4865
|
const canToggle=createMemo8(()=>options.limit()>0&&options.items().length>options.limit())
|
|
@@ -5169,10 +4946,10 @@ result += segment
|
|
|
5169
4946
|
}
|
|
5170
4947
|
return result + ellipsis
|
|
5171
4948
|
}
|
|
5172
|
-
function SectionHeaderControl(props){const [width,setWidth]=
|
|
4949
|
+
function SectionHeaderControl(props){const [width,setWidth]=createSignal24()
|
|
5173
4950
|
const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,position:()=>props.position,disabled:props.action.disabled,activate:props.action.onActivate
|
|
5174
4951
|
},()=>props.api.theme.current.accent,"control")
|
|
5175
|
-
|
|
4952
|
+
createEffect14(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
|
|
5176
4953
|
const label=()=>width()===undefined||props.iconOnly?props.action.label():truncateEnd(props.action.label(),width()-2)
|
|
5177
4954
|
return _$createComponent(SelectionBox,{ref:(node)=>control.ref(node),get id(){return props.action.id
|
|
5178
4955
|
},get iconOnly(){return props.iconOnly
|
|
@@ -5194,7 +4971,7 @@ return _el$
|
|
|
5194
4971
|
}})
|
|
5195
4972
|
}
|
|
5196
4973
|
function Section(props){const icons=useIcons()
|
|
5197
|
-
const [headerWidth,setHeaderWidth]=
|
|
4974
|
+
const [headerWidth,setHeaderWidth]=createSignal25(0)
|
|
5198
4975
|
const icon=()=>props.section?icons.section(props.section):props.icon
|
|
5199
4976
|
const theme=()=>props.api.theme.current
|
|
5200
4977
|
const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
|
|
@@ -5291,7 +5068,7 @@ _$setProp(_el$,"flexWrap","wrap")
|
|
|
5291
5068
|
_$setProp(_el$,"gap",1)
|
|
5292
5069
|
_$setProp(_el$,"paddingLeft",1)
|
|
5293
5070
|
_$setProp(_el$,"paddingRight",1)
|
|
5294
|
-
_$insert(_el$,_$createComponent(
|
|
5071
|
+
_$insert(_el$,_$createComponent(For10,{get each(){return visibility.visible()
|
|
5295
5072
|
},children:(item,index)=>_$createComponent(LspBadge,{get api(){return props.api
|
|
5296
5073
|
},get interaction(){return props.interaction
|
|
5297
5074
|
},get id(){return item.id
|
|
@@ -5552,8 +5329,8 @@ return _el$5
|
|
|
5552
5329
|
function createSidebarBookmark(input){const{api,interaction,row,position,favorite,disabled,onToggle
|
|
5553
5330
|
}=input
|
|
5554
5331
|
const id=`${input.id}.favorite`
|
|
5555
|
-
const [rowHovered,setRowHovered]=
|
|
5556
|
-
const [controlHovered,setControlHovered]=
|
|
5332
|
+
const [rowHovered,setRowHovered]=createSignal26(false)
|
|
5333
|
+
const [controlHovered,setControlHovered]=createSignal26(false)
|
|
5557
5334
|
const control=useSidebarItem(api,interaction,{id,position:()=>({...position(),column:0
|
|
5558
5335
|
}),disabled,activate:()=>{onToggle()
|
|
5559
5336
|
queueMicrotask(()=>interaction?.select(id))
|
|
@@ -5669,7 +5446,7 @@ return _el$2
|
|
|
5669
5446
|
function SectionFilter(props){const icons=useIcons()
|
|
5670
5447
|
let input
|
|
5671
5448
|
let unregisterInput
|
|
5672
|
-
const [inputFocused,setInputFocused]=
|
|
5449
|
+
const [inputFocused,setInputFocused]=createSignal27(false)
|
|
5673
5450
|
const theme=()=>props.api.theme.current
|
|
5674
5451
|
const item=useSidebarItem(props.api,props.interaction,{id:props.id??`filter.${props.placeholder}`,position:()=>props.position??{section:0,row:0,column:0
|
|
5675
5452
|
},activate:()=>{if(!input)
|
|
@@ -5690,7 +5467,7 @@ props.interaction.leaveFilter(input)
|
|
|
5690
5467
|
else
|
|
5691
5468
|
input?.blur()
|
|
5692
5469
|
}
|
|
5693
|
-
|
|
5470
|
+
onCleanup19(()=>unregisterInput?.())
|
|
5694
5471
|
return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
|
|
5695
5472
|
},flexDirection:"row",gap:1,marginTop:1,marginBottom:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return _$memo(()=>!!highlighted())()?theme().primary:item.backgroundColor()
|
|
5696
5473
|
},get onMouseOver(){return item.onMouseOver
|
|
@@ -5767,7 +5544,7 @@ return _el$2
|
|
|
5767
5544
|
},get interaction(){return props.interaction
|
|
5768
5545
|
},get grouped(){return model.grouped
|
|
5769
5546
|
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
5770
|
-
},get children(){return _$createComponent(
|
|
5547
|
+
},get children(){return _$createComponent(For11,{get each(){return model.visibility.visible()
|
|
5771
5548
|
},children:(item,index)=>[_$createComponent(Show17,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
|
|
5772
5549
|
},get children(){return _$createComponent(McpGroupHeader,{get api(){return props.api
|
|
5773
5550
|
},get interaction(){return props.interaction
|
|
@@ -5799,7 +5576,7 @@ return _el$
|
|
|
5799
5576
|
}})
|
|
5800
5577
|
}
|
|
5801
5578
|
function McpSection(props){const icons=useIcons()
|
|
5802
|
-
const [query,setQuery]=
|
|
5579
|
+
const [query,setQuery]=createSignal28("")
|
|
5803
5580
|
const model=createMcpSectionModel(props,query)
|
|
5804
5581
|
const navigationSection=()=>props.navigationSection??6
|
|
5805
5582
|
const summary=createMemo11(()=>`${model.active()}/${model.list().length}${model.errors() ? ` \xB7 ${model.errors()} ${icons.icon("error")}` : ""}`)
|
|
@@ -5939,7 +5716,7 @@ function QuickActionRow(props){const{api,interaction
|
|
|
5939
5716
|
const icons=useIcons()
|
|
5940
5717
|
const toolbar=useToolbar()
|
|
5941
5718
|
const theme=()=>api.theme.current
|
|
5942
|
-
const [width,setWidth]=
|
|
5719
|
+
const [width,setWidth]=createSignal33(0)
|
|
5943
5720
|
const shortcut=createMemo12(()=>{const bindings=api.keymap.getCommandBindings({visibility:"registered",commands:[props.action.command]
|
|
5944
5721
|
})
|
|
5945
5722
|
return api.keys.formatBindings(bindings.get(props.action.command))
|
|
@@ -6030,13 +5807,14 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6030
5807
|
_$insertNode(_el$,_$createTextNode(`No quick actions selected`))
|
|
6031
5808
|
_$effect((_$p)=>_$setProp(_el$,"fg",props.api.theme.current.textMuted,_$p))
|
|
6032
5809
|
return _el$
|
|
6033
|
-
}}),_$createComponent(
|
|
6034
|
-
},children:(
|
|
6035
|
-
},
|
|
6036
|
-
},get
|
|
5810
|
+
}}),_$createComponent(For14,{get each(){return visibility.visible().map((action)=>action.command)
|
|
5811
|
+
},children:(id,index)=>_$createComponent(QuickActionRow,{get onNewSession(){return props.onNewSession
|
|
5812
|
+
},get action(){return visibility.visible()[index()]
|
|
5813
|
+
},get disabled(){return visibility.visible()[index()].disabled
|
|
5814
|
+
},get favorite(){return props.preferences.favoriteQuickActions?.().has(id)??false
|
|
6037
5815
|
},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?.(
|
|
5816
|
+
},get separator(){return _$memo(()=>!!(index()>0&&(props.preferences.favoriteQuickActions?.().has(visibility.visible()[index()-1].command)??false)))()&&!(props.preferences.favoriteQuickActions?.().has(id)??false)
|
|
5817
|
+
},onToggleFavorite:()=>props.preferences.toggleFavoriteQuickAction?.(id),get position(){return{section:navigationSection(),row:10 + index(),column:0
|
|
6040
5818
|
}}})
|
|
6041
5819
|
})]
|
|
6042
5820
|
}}),_$createComponent(ListVisibilityControl,{get api(){return props.api
|
|
@@ -6091,13 +5869,13 @@ item.activate(event)
|
|
|
6091
5869
|
|
|
6092
5870
|
|
|
6093
5871
|
function SidebarToggleBinding(props){const shortcuts=createSidebarShortcutMode(props.api)
|
|
6094
|
-
|
|
5872
|
+
createEffect16(()=>{const key=props.preferences.toggleKey()
|
|
6095
5873
|
untrack6(()=>shortcuts.bind(key))
|
|
6096
5874
|
})
|
|
6097
|
-
|
|
5875
|
+
createEffect16(()=>{if(shortcuts.active()&&(props.api.route.current.name!=="session"||props.api.ui.dialog.open||props.api.mode.current()==="modal"))
|
|
6098
5876
|
untrack6(shortcuts.cancel)
|
|
6099
5877
|
})
|
|
6100
|
-
|
|
5878
|
+
onCleanup20(shortcuts.dispose)
|
|
6101
5879
|
return(()=>{var _el$=_$createElement("box")
|
|
6102
5880
|
_$setProp(_el$,"position","absolute")
|
|
6103
5881
|
_$setProp(_el$,"top",0)
|
|
@@ -6105,7 +5883,7 @@ _$setProp(_el$,"left",0)
|
|
|
6105
5883
|
_$setProp(_el$,"width","100%")
|
|
6106
5884
|
_$setProp(_el$,"height","100%")
|
|
6107
5885
|
_$insert(_el$,_$createComponent(Show26,{get when(){return shortcuts.active()
|
|
6108
|
-
},get children(){return _$createComponent(
|
|
5886
|
+
},get children(){return _$createComponent(Suspense5,{get children(){return _$createComponent(SidebarShortcutHint,{get api(){return props.api
|
|
6109
5887
|
},get actions(){return shortcuts.actions
|
|
6110
5888
|
}})
|
|
6111
5889
|
}})
|
|
@@ -6119,11 +5897,11 @@ const unregisterCommands=props.api.keymap.registerLayer({commands:[...commands,.
|
|
|
6119
5897
|
})=>({name:name.replace(PLUGIN_ID,()=>LEGACY_PLUGIN_ID),run,enabled
|
|
6120
5898
|
}))]
|
|
6121
5899
|
})
|
|
6122
|
-
|
|
6123
|
-
|
|
5900
|
+
onCleanup20(unregisterCommands)
|
|
5901
|
+
createEffect16(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
|
|
6124
5902
|
}]
|
|
6125
5903
|
})
|
|
6126
|
-
|
|
5904
|
+
onCleanup20(unregister)
|
|
6127
5905
|
})
|
|
6128
5906
|
return _$createElement("box")
|
|
6129
5907
|
}
|
|
@@ -6143,24 +5921,53 @@ return _$createElement("box")
|
|
|
6143
5921
|
|
|
6144
5922
|
|
|
6145
5923
|
|
|
6146
|
-
function toolbarLayout(keys,width,mode){const
|
|
6147
|
-
const
|
|
6148
|
-
const
|
|
6149
|
-
const
|
|
6150
|
-
const
|
|
6151
|
-
|
|
6152
|
-
|
|
5924
|
+
function toolbarLayout(keys,width,mode,widths){const capacity=Math.max(3,Math.floor(width))
|
|
5925
|
+
const columns=Math.max(1,Math.floor((capacity + 1) / 4))
|
|
5926
|
+
const sizes={}
|
|
5927
|
+
const size=(key)=>Math.max(3,Math.min(capacity,widths?.get(key)??3))
|
|
5928
|
+
const rows=[]
|
|
5929
|
+
let overflow=[]
|
|
5930
|
+
if(mode==="wrap"){let used=0
|
|
5931
|
+
for(const key of keys){const value=size(key)
|
|
5932
|
+
if(rows.length===0||used>0&&used + 1 + value>capacity){rows.push([])
|
|
5933
|
+
used=0
|
|
5934
|
+
}
|
|
5935
|
+
rows.at(-1).push(key)
|
|
5936
|
+
sizes[key]=value
|
|
5937
|
+
used += (used?1:0) + value
|
|
5938
|
+
}} else if(keys.length>0){const fits=keys.reduce((total,key)=>total + size(key),0) + keys.length-1<=capacity
|
|
5939
|
+
const visible=[]
|
|
5940
|
+
let used=0
|
|
5941
|
+
for(const key of keys){const remaining=(fits?capacity:capacity-4)-used-(visible.length>0?1:0)
|
|
5942
|
+
if(remaining<3)
|
|
5943
|
+
break
|
|
5944
|
+
sizes[key]=Math.min(size(key),remaining)
|
|
5945
|
+
used += (visible.length>0?1:0) + sizes[key]
|
|
5946
|
+
visible.push(key)
|
|
5947
|
+
}
|
|
5948
|
+
overflow=keys.slice(visible.length)
|
|
5949
|
+
if(overflow.length>0){visible.push("toolbar:more")
|
|
5950
|
+
sizes["toolbar:more"]=3
|
|
5951
|
+
}
|
|
5952
|
+
rows.push(visible)
|
|
5953
|
+
}
|
|
5954
|
+
return{columns,overflow,rows,...widths&&{sizes}}}
|
|
6153
5955
|
|
|
5956
|
+
function toolbarPinWidth(pin){const states=Object.keys({...pin.stateIcons,...pin.stateIconLists})
|
|
5957
|
+
const count=Math.max(toolbarPinIcons(pin).length,...states.map((state)=>toolbarPinIcons(pin,state).length))
|
|
5958
|
+
const iconsWidth=Math.max(0,count*2-1)
|
|
5959
|
+
return 2 + Math.max(1,iconsWidth + (count&&pin.text?1:0) + Bun.stringWidth(pin.text??""))
|
|
5960
|
+
}
|
|
6154
5961
|
function createToolbarModel(props){const icons=useIcons()
|
|
6155
5962
|
const revision=createQuickActionRevision(props.api)
|
|
6156
5963
|
const pins=()=>props.preferences.toolbarPins?.()??[]
|
|
6157
5964
|
const needsSkills=createMemo14(()=>pins().some((pin)=>pin.kind==="skill"))
|
|
6158
5965
|
const target=createMemo14(()=>props.skills.target())
|
|
6159
|
-
|
|
5966
|
+
createEffect17(()=>{if(!needsSkills())
|
|
6160
5967
|
return
|
|
6161
5968
|
const current=target()
|
|
6162
5969
|
const release=untrack7(()=>props.skills.activate(current))
|
|
6163
|
-
|
|
5970
|
+
onCleanup21(release)
|
|
6164
5971
|
untrack7(()=>{props.skills.refresh(current).catch(()=>{})
|
|
6165
5972
|
})
|
|
6166
5973
|
})
|
|
@@ -6168,12 +5975,12 @@ function view(pin){revision()
|
|
|
6168
5975
|
if(pin.kind==="action"){const action=QUICK_ACTIONS.find((item)=>item.command===pin.id)
|
|
6169
5976
|
const state=quickActionState(props.api,pin.id)
|
|
6170
5977
|
const stateLabel=quickActionStates(props.api,pin.id).find((item)=>item.id===state)?.label
|
|
6171
|
-
return{label:quickActionLabel(props.api,action),stateLabel,
|
|
5978
|
+
return{label:quickActionLabel(props.api,action),stateLabel,icons:toolbarPinIcons(pin,state),text:pin.text,reason:quickActionDisabledReason(props.api,action)
|
|
6172
5979
|
}}
|
|
6173
5980
|
const skill=props.skills.list(target()).find((item)=>item.location===pin.location&&item.name===pin.name)
|
|
6174
5981
|
const request=props.skills.state(target())
|
|
6175
5982
|
const unavailable=request.status==="loading"?"Loading Skills":"Skill is unavailable in this workspace"
|
|
6176
|
-
return{label:pin.name,
|
|
5983
|
+
return{label:pin.name,icons:toolbarPinIcons(pin),text:pin.text,stateLabel:undefined,reason:request.error?.message??(skill?skillUnavailable(props.skills,skill):unavailable)
|
|
6177
5984
|
}}
|
|
6178
5985
|
function run(key){const pin=pins().find((item)=>toolbarPinKey(item)===key)
|
|
6179
5986
|
if(!pin)
|
|
@@ -6196,36 +6003,68 @@ const route=JSON.stringify(props.api.route.current)
|
|
|
6196
6003
|
const dialogs=createDialogStack(props.api,icons.style,()=>route===JSON.stringify(props.api.route.current),icons.multilineCorners)
|
|
6197
6004
|
activateSkill({api:props.api,controller:props.skills,access:props.preferences,skill,dialogs})
|
|
6198
6005
|
}
|
|
6199
|
-
return{pins,view,run}}
|
|
6006
|
+
return{pins,view,run,width:toolbarPinWidth}}
|
|
6007
|
+
|
|
6008
|
+
|
|
6009
|
+
|
|
6010
|
+
|
|
6200
6011
|
|
|
6201
6012
|
|
|
6202
6013
|
|
|
6203
6014
|
function ToolbarButton(props){const icons=useIcons()
|
|
6204
|
-
const
|
|
6015
|
+
const foreground=()=>props.reason?props.api.theme.current.textMuted:item.foregroundColor()
|
|
6016
|
+
const [hovered,setHovered]=createSignal34(false)
|
|
6205
6017
|
const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>({section:0,row:props.row + 1,column:props.column
|
|
6206
6018
|
}),activate:props.onRun
|
|
6207
6019
|
},()=>props.reason?props.api.theme.current.textMuted:props.api.theme.current.accent,"control")
|
|
6208
|
-
|
|
6209
|
-
|
|
6210
|
-
|
|
6020
|
+
const content=()=>[props.icons.map((icon)=>terminalIcon(icon,icons.style())).join(" "),props.text].filter(Boolean).join(" ")
|
|
6021
|
+
createEffect18(()=>props.onDetails(props.id,item.focused()||hovered()))
|
|
6022
|
+
onCleanup22(()=>props.onDetails(props.id,false))
|
|
6023
|
+
return _$createComponent(Show27,{get when(){return _$memo(()=>!!(props.width===3&&props.icons.length===1))()&&!props.text
|
|
6024
|
+
},get fallback(){return _$createComponent(SelectionBox,{get id(){return props.id
|
|
6025
|
+
},ref(r$){var _ref$2=item.ref
|
|
6026
|
+
typeof _ref$2==="function"?_ref$2(r$):item.ref=r$
|
|
6027
|
+
},get width(){return props.width
|
|
6028
|
+
},height:1,flexShrink:0,alignItems:"center",justifyContent:"center",get backgroundColor(){return item.backgroundColor()
|
|
6029
|
+
},onMouseOver:(event)=>{event.stopPropagation()
|
|
6030
|
+
item.onMouseOver()
|
|
6031
|
+
setHovered(true)
|
|
6032
|
+
},onMouseOut:(event)=>{event.stopPropagation()
|
|
6033
|
+
item.onMouseOut()
|
|
6034
|
+
setHovered(false)
|
|
6035
|
+
},onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
6036
|
+
item.activate(event)
|
|
6037
|
+
},get children(){var _el$=_$createElement("text")
|
|
6038
|
+
_$setProp(_el$,"height",1)
|
|
6039
|
+
_$setProp(_el$,"minWidth",0)
|
|
6040
|
+
_$setProp(_el$,"maxWidth","100%")
|
|
6041
|
+
_$setProp(_el$,"truncate",true)
|
|
6042
|
+
_$setProp(_el$,"wrapMode","none")
|
|
6043
|
+
_$insert(_el$,content)
|
|
6044
|
+
_$effect((_$p)=>_$setProp(_el$,"fg",foreground(),_$p))
|
|
6045
|
+
return _el$
|
|
6046
|
+
}})
|
|
6047
|
+
},get children(){return _$createComponent(IconControl,{get id(){return props.id
|
|
6211
6048
|
},ref(r$){var _ref$=item.ref
|
|
6212
6049
|
typeof _ref$==="function"?_ref$(r$):item.ref=r$
|
|
6213
|
-
},get icon(){return terminalIcon(props.
|
|
6050
|
+
},get icon(){return terminalIcon(props.icons[0]??"bolt",icons.style())
|
|
6214
6051
|
},get backgroundColor(){return item.backgroundColor()
|
|
6215
|
-
},get foregroundColor(){return
|
|
6052
|
+
},get foregroundColor(){return foreground()
|
|
6216
6053
|
},onMouseOver:()=>{item.onMouseOver()
|
|
6217
6054
|
setHovered(true)
|
|
6218
6055
|
},onMouseOut:()=>{item.onMouseOut()
|
|
6219
6056
|
setHovered(false)
|
|
6220
6057
|
},onMouseUp:(event)=>item.activate(event)
|
|
6221
6058
|
})
|
|
6059
|
+
}})
|
|
6222
6060
|
}
|
|
6223
6061
|
function SidebarToolbar(props){const model=createToolbarModel(props)
|
|
6224
6062
|
const icons=useIcons()
|
|
6225
|
-
const [width,setWidth]=
|
|
6226
|
-
const [detail,setDetail]=
|
|
6063
|
+
const [width,setWidth]=createSignal35(3)
|
|
6064
|
+
const [detail,setDetail]=createSignal35()
|
|
6227
6065
|
const keys=createMemo15(()=>model.pins().map((pin)=>toolbarPinKey(pin)))
|
|
6228
|
-
const
|
|
6066
|
+
const widths=createMemo15(()=>new Map(model.pins().map((pin)=>[toolbarPinKey(pin),model.width(pin)])))
|
|
6067
|
+
const layout=createMemo15(()=>toolbarLayout(keys(),width(),props.preferences.toolbarOverflow?.()??"menu",widths()))
|
|
6229
6068
|
const rows=createMemo15(()=>layout().rows.map((_,index)=>index))
|
|
6230
6069
|
const byKey=createMemo15(()=>new Map(model.pins().map((pin)=>[toolbarPinKey(pin),pin])))
|
|
6231
6070
|
const view=(key)=>{const pin=byKey().get(key)
|
|
@@ -6250,19 +6089,22 @@ dialogs.close()
|
|
|
6250
6089
|
model.run(option.value)
|
|
6251
6090
|
}}))
|
|
6252
6091
|
}
|
|
6253
|
-
return _$createComponent(
|
|
6092
|
+
return _$createComponent(Show28,{get when(){return keys().length>0
|
|
6254
6093
|
},get children(){var _el$=_$createElement("box")
|
|
6255
6094
|
_$setProp(_el$,"id","opencode-navigator.toolbar")
|
|
6095
|
+
_$setProp(_el$,"overflow","visible")
|
|
6256
6096
|
_$setProp(_el$,"onSizeChange",function(){setWidth(this.width)
|
|
6257
6097
|
})
|
|
6258
|
-
_$insert(_el$,_$createComponent(
|
|
6098
|
+
_$insert(_el$,_$createComponent(For15,{get each(){return rows()
|
|
6259
6099
|
},children:(row)=>(()=>{var _el$2=_$createElement("box")
|
|
6260
6100
|
_$setProp(_el$2,"flexDirection","row")
|
|
6261
6101
|
_$setProp(_el$2,"gap",1)
|
|
6262
|
-
_$insert(_el$2,_$createComponent(
|
|
6102
|
+
_$insert(_el$2,_$createComponent(For15,{get each(){return layout().rows[row]
|
|
6263
6103
|
},children:(key,column)=>_$createComponent(ToolbarButton,_$mergeProps(props,{id:`opencode-navigator.toolbar.${key}`,row,get column(){return column()
|
|
6264
6104
|
},get label(){return view(key)?.label??"More"
|
|
6265
|
-
},get
|
|
6105
|
+
},get icons(){return key==="toolbar:more"?["list"]:view(key)?.icons??["bolt"]
|
|
6106
|
+
},get text(){return view(key)?.text
|
|
6107
|
+
},get width(){return layout().sizes?.[key]??3
|
|
6266
6108
|
},get reason(){return view(key)?.reason
|
|
6267
6109
|
},onRun:()=>key==="toolbar:more"?showMore():model.run(key),onDetails:(_id,active)=>setDetail((current)=>active?key:current===key?undefined:current)
|
|
6268
6110
|
}))
|
|
@@ -6270,13 +6112,21 @@ _$insert(_el$2,_$createComponent(For17,{get each(){return layout().rows[row]
|
|
|
6270
6112
|
return _el$2
|
|
6271
6113
|
})()
|
|
6272
6114
|
}),null)
|
|
6273
|
-
_$insert(_el$,_$createComponent(
|
|
6115
|
+
_$insert(_el$,_$createComponent(Show28,{get when(){return details()
|
|
6274
6116
|
},children:(text)=>(()=>{var _el$3=_$createElement("text")
|
|
6117
|
+
_$setProp(_el$3,"position","absolute")
|
|
6118
|
+
_$setProp(_el$3,"left",0)
|
|
6119
|
+
_$setProp(_el$3,"width","100%")
|
|
6275
6120
|
_$setProp(_el$3,"height",1)
|
|
6276
6121
|
_$setProp(_el$3,"truncate",true)
|
|
6277
6122
|
_$setProp(_el$3,"wrapMode","none")
|
|
6278
6123
|
_$insert(_el$3,text)
|
|
6279
|
-
_$effect((
|
|
6124
|
+
_$effect((_p$)=>{var _v$=rows().length,_v$2=props.api.theme.current.textMuted
|
|
6125
|
+
_v$!==_p$.e&&(_p$.e=_$setProp(_el$3,"top",_v$,_p$.e))
|
|
6126
|
+
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"fg",_v$2,_p$.t))
|
|
6127
|
+
return _p$
|
|
6128
|
+
},{e:undefined,t:undefined
|
|
6129
|
+
})
|
|
6280
6130
|
return _el$3
|
|
6281
6131
|
})()
|
|
6282
6132
|
}),null)
|
|
@@ -6302,9 +6152,9 @@ const filtered=createMemo16(()=>list().filter((item)=>matchesFilter(query(),item
|
|
|
6302
6152
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("skills")??0,resetKey:()=>JSON.stringify([target().key,query()])
|
|
6303
6153
|
})
|
|
6304
6154
|
const state=createMemo16(()=>props.controller.state(target()))
|
|
6305
|
-
|
|
6155
|
+
createEffect19(()=>{const current=target()
|
|
6306
6156
|
const deactivate=untrack8(()=>props.controller.activate?.(current)??(()=>{}))
|
|
6307
|
-
|
|
6157
|
+
onCleanup23(deactivate)
|
|
6308
6158
|
untrack8(()=>void props.controller.refresh(current).catch(()=>{}))
|
|
6309
6159
|
})
|
|
6310
6160
|
async function useSkill(item){try{const isInserted=await props.controller.use(target(),item.name)
|
|
@@ -6356,7 +6206,7 @@ _$insert(_el$,()=>props.item.name,null)
|
|
|
6356
6206
|
_$effect((_$p)=>_$setProp(_el$,"fg",row.foregroundColor(),_$p))
|
|
6357
6207
|
return _el$
|
|
6358
6208
|
})()
|
|
6359
|
-
},get trailing(){return _$createComponent(
|
|
6209
|
+
},get trailing(){return _$createComponent(Show29,{when:toolbar,get children(){return _$createComponent(SidebarPinControl,{get id(){return id()
|
|
6360
6210
|
},get position(){return props.position
|
|
6361
6211
|
},get pin(){return{kind:"skill",name:props.item.name,location:props.item.location,icon:"book"
|
|
6362
6212
|
}}})
|
|
@@ -6365,7 +6215,7 @@ return _el$
|
|
|
6365
6215
|
}
|
|
6366
6216
|
function SkillsSection(props){const dialogs=useDialogs(props.api)
|
|
6367
6217
|
const toolbar=useToolbar()
|
|
6368
|
-
const [query,setQuery]=
|
|
6218
|
+
const [query,setQuery]=createSignal36("")
|
|
6369
6219
|
const model=createSkillSectionModel(props,query)
|
|
6370
6220
|
const navigationSection=()=>props.navigationSection??3
|
|
6371
6221
|
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 +6239,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
6389
6239
|
}},get query(){return query()
|
|
6390
6240
|
},placeholder:"Filter skills...",onInput:setQuery
|
|
6391
6241
|
}),null)
|
|
6392
|
-
_$insert(_el$,_$createComponent(
|
|
6242
|
+
_$insert(_el$,_$createComponent(Show30,{get when(){return model.filtered().length>0
|
|
6393
6243
|
},get fallback(){return(()=>{var _el$2=_$createElement("text")
|
|
6394
6244
|
_$insertNode(_el$2,_$createTextNode(`No matching skills`))
|
|
6395
6245
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -6399,8 +6249,8 @@ return _el$2
|
|
|
6399
6249
|
},get interaction(){return props.interaction
|
|
6400
6250
|
},get grouped(){return model.grouped
|
|
6401
6251
|
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6402
|
-
},get children(){return _$createComponent(
|
|
6403
|
-
},children:(item,index)=>[_$createComponent(
|
|
6252
|
+
},get children(){return _$createComponent(For16,{get each(){return model.visibility.visible()
|
|
6253
|
+
},children:(item,index)=>[_$createComponent(Show30,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
|
|
6404
6254
|
},get children(){var _el$4=_$createElement("text")
|
|
6405
6255
|
_$setProp(_el$4,"height",1)
|
|
6406
6256
|
_$setProp(_el$4,"wrapMode","none")
|
|
@@ -6445,18 +6295,18 @@ return _el$
|
|
|
6445
6295
|
function createSubagentSectionModel(props){const list=createMemo17(()=>props.controller.list(props.sessionID))
|
|
6446
6296
|
const recent=createMemo17(()=>props.controller.recent?.(props.sessionID)??[])
|
|
6447
6297
|
const rows=createMemo17(()=>buildSubagentView(list(),recent()))
|
|
6448
|
-
const [query,setQuery]=
|
|
6449
|
-
const [mode,setMode]=
|
|
6298
|
+
const [query,setQuery]=createSignal37("")
|
|
6299
|
+
const [mode,setMode]=createSignal37("all")
|
|
6450
6300
|
const counts=createMemo17(()=>countSubagentView(rows(),query()))
|
|
6451
6301
|
const tabs=createMemo17(()=>["all","active","recent",...counts().errors>0?["errors"]:[]])
|
|
6452
6302
|
const filtered=createMemo17(()=>filterSubagentView(rows(),mode(),query()))
|
|
6453
6303
|
const parentID=createMemo17(()=>props.api.state?.session?.get(props.sessionID)?.parentID)
|
|
6454
6304
|
const targetKey=createMemo17(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6455
|
-
|
|
6305
|
+
createEffect20(()=>{targetKey()
|
|
6456
6306
|
setQuery("")
|
|
6457
6307
|
setMode("all")
|
|
6458
6308
|
})
|
|
6459
|
-
|
|
6309
|
+
createEffect20(()=>{if(mode()!=="all"&&counts()[mode()]===0)
|
|
6460
6310
|
setMode("all")
|
|
6461
6311
|
})
|
|
6462
6312
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("subagents")??0,resetKey:()=>JSON.stringify([targetKey(),query(),mode()])
|
|
@@ -6466,10 +6316,10 @@ const now=createSubagentClock(clockKey)
|
|
|
6466
6316
|
const byId=createMemo17(()=>new Map(visibility.visible().map((item)=>[item.session.id,item])))
|
|
6467
6317
|
const ids=createMemo17(()=>visibility.visible().map((item)=>item.session.id))
|
|
6468
6318
|
const state=createMemo17(()=>props.controller.state(props.sessionID))
|
|
6469
|
-
|
|
6319
|
+
createEffect20(()=>{const sessionID=props.sessionID
|
|
6470
6320
|
targetKey()
|
|
6471
6321
|
const deactivate=untrack9(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6472
|
-
|
|
6322
|
+
onCleanup24(deactivate)
|
|
6473
6323
|
untrack9(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6474
6324
|
})
|
|
6475
6325
|
return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentID,visibility,now,byId,ids,state
|
|
@@ -6527,7 +6377,7 @@ return()=>_c$()?`${props.item.run.startedBeforeObservation ? `${icons.icon("rece
|
|
|
6527
6377
|
_$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme().textMuted,_$p))
|
|
6528
6378
|
return _el$3
|
|
6529
6379
|
})()
|
|
6530
|
-
},get details(){return [_$createComponent(
|
|
6380
|
+
},get details(){return [_$createComponent(Show31,{get when(){return props.item.run?.errorMessage
|
|
6531
6381
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createTextNode(`: `)
|
|
6532
6382
|
_$insertNode(_el$4,_el$5)
|
|
6533
6383
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -6535,12 +6385,12 @@ _$insert(_el$4,()=>cancelled()?"Cancelled":"Error",_el$5)
|
|
|
6535
6385
|
_$insert(_el$4,()=>props.item.run?.errorMessage,null)
|
|
6536
6386
|
_$effect((_$p)=>_$setProp(_el$4,"fg",row.focused()?row.foregroundColor():failed()?theme().error:theme().textMuted,_$p))
|
|
6537
6387
|
return _el$4
|
|
6538
|
-
}}),_$createComponent(
|
|
6388
|
+
}}),_$createComponent(Show31,{get when(){return props.item.unavailable
|
|
6539
6389
|
},get children(){var _el$6=_$createElement("text")
|
|
6540
6390
|
_$insertNode(_el$6,_$createTextNode(`Worker status unavailable`))
|
|
6541
6391
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().warning,_$p))
|
|
6542
6392
|
return _el$6
|
|
6543
|
-
}}),_$createComponent(
|
|
6393
|
+
}}),_$createComponent(Show31,{get when(){return _$memo(()=>props.item.status.type==="retry")()?props.item.status:undefined
|
|
6544
6394
|
},children:(status)=>(()=>{var _el$0=_$createElement("text"),_el$1=_$createTextNode(`Retry #`),_el$10=_$createTextNode(` \xB7 `),_el$11=_$createTextNode(`s \xB7 `)
|
|
6545
6395
|
_$insertNode(_el$0,_el$1)
|
|
6546
6396
|
_$insertNode(_el$0,_el$10)
|
|
@@ -6552,7 +6402,7 @@ _$insert(_el$0,()=>status().message,null)
|
|
|
6552
6402
|
_$effect((_$p)=>_$setProp(_el$0,"fg",row.focused()?row.foregroundColor():theme().warning,_$p))
|
|
6553
6403
|
return _el$0
|
|
6554
6404
|
})()
|
|
6555
|
-
}),_$createComponent(
|
|
6405
|
+
}),_$createComponent(Show31,{get when(){return _$memo(()=>!!idle())()&&!props.item.run?.errorMessage
|
|
6556
6406
|
},get children(){var _el$8=_$createElement("text")
|
|
6557
6407
|
_$insertNode(_el$8,_$createTextNode(`Finished`))
|
|
6558
6408
|
_$effect((_$p)=>_$setProp(_el$8,"fg",theme().textMuted,_$p))
|
|
@@ -6563,12 +6413,12 @@ return _el$8
|
|
|
6563
6413
|
function SubagentList(props){return _$createComponent(SidebarRowList,{get api(){return props.api
|
|
6564
6414
|
},get interaction(){return props.interaction
|
|
6565
6415
|
},get density(){return props.density
|
|
6566
|
-
},get children(){return _$createComponent(
|
|
6416
|
+
},get children(){return _$createComponent(For17,{get each(){return props.ids
|
|
6567
6417
|
},children:(id,index)=>{const initial=props.itemById(id)
|
|
6568
6418
|
const item=()=>props.itemById(id)??initial
|
|
6569
6419
|
const startsGroup=()=>index()===0||props.visible[index()-1]?.group!==item().group
|
|
6570
6420
|
return(()=>{var _el$=_$createElement("box")
|
|
6571
|
-
_$insert(_el$,_$createComponent(
|
|
6421
|
+
_$insert(_el$,_$createComponent(Show32,{get when(){return startsGroup()
|
|
6572
6422
|
},get children(){var _el$2=_$createElement("text"),_el$3=_$createElement("b")
|
|
6573
6423
|
_$insertNode(_el$2,_el$3)
|
|
6574
6424
|
_$insert(_el$3,()=>item().group)
|
|
@@ -6594,7 +6444,7 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6594
6444
|
},sectionId:`${PLUGIN_ID}.section.subagents`,get navigationSection(){return navigationSection()
|
|
6595
6445
|
},title:"SUBAGENTS",section:"subagents",get summary(){return `${model.list().length} active \xB7 ${model.recent().length} recent`
|
|
6596
6446
|
},get open(){return props.preferences.expanded().subagents
|
|
6597
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(
|
|
6447
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(Show33,{get when(){return model.parentID()
|
|
6598
6448
|
},children:(id)=>_$createComponent(McpBulkAction,{get api(){return props.api
|
|
6599
6449
|
},get interaction(){return props.interaction
|
|
6600
6450
|
},id:`${PLUGIN_ID}.subagents.parent`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -6617,7 +6467,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
6617
6467
|
}}),_el$2)
|
|
6618
6468
|
_$setProp(_el$2,"flexDirection","row")
|
|
6619
6469
|
_$setProp(_el$2,"flexWrap","wrap")
|
|
6620
|
-
_$insert(_el$2,_$createComponent(
|
|
6470
|
+
_$insert(_el$2,_$createComponent(For18,{get each(){return model.tabs()
|
|
6621
6471
|
},children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
|
|
6622
6472
|
},get interaction(){return props.interaction
|
|
6623
6473
|
},id:`${PLUGIN_ID}.subagents.filter.${value}`,get position(){return{section:navigationSection(),row:4,column:index()
|
|
@@ -6628,7 +6478,7 @@ _$insert(_el$2,_$createComponent(For20,{get each(){return model.tabs()
|
|
|
6628
6478
|
},onActivate:()=>model.setMode(value)
|
|
6629
6479
|
})
|
|
6630
6480
|
}))
|
|
6631
|
-
_$insert(_el$,_$createComponent(
|
|
6481
|
+
_$insert(_el$,_$createComponent(Show33,{get when(){return model.filtered().length===0
|
|
6632
6482
|
},get children(){var _el$3=_$createElement("text")
|
|
6633
6483
|
_$insertNode(_el$3,_$createTextNode(`No matching subagents`))
|
|
6634
6484
|
_$effect((_$p)=>_$setProp(_el$3,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -6669,13 +6519,36 @@ return _el$
|
|
|
6669
6519
|
|
|
6670
6520
|
|
|
6671
6521
|
|
|
6522
|
+
|
|
6523
|
+
|
|
6672
6524
|
function NativeTodoNotice(props){const icons=useIcons()
|
|
6673
|
-
|
|
6525
|
+
const state=()=>props.setup?.state(props.sessionID)
|
|
6526
|
+
const failed=()=>state()?.status==="error"
|
|
6527
|
+
const disabled=()=>state()?.enabled===false
|
|
6528
|
+
const message=()=>{if(failed())
|
|
6529
|
+
return state()?.error
|
|
6530
|
+
if(state()?.status==="loading"&&state()?.enabled===undefined)
|
|
6531
|
+
return "Checking native Todo configuration\u2026"
|
|
6532
|
+
if(disabled())
|
|
6533
|
+
return "Native OpenCode Todo is disabled. Enable it to let the built-in todowrite tool manage tasks."
|
|
6534
|
+
return "Native OpenCode Todo. Edit tasks through chat and todowrite."
|
|
6535
|
+
}
|
|
6536
|
+
return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` `)
|
|
6674
6537
|
_$insertNode(_el$,_el$2)
|
|
6675
|
-
_$
|
|
6676
|
-
_$
|
|
6677
|
-
_$insert(_el
|
|
6678
|
-
_$
|
|
6538
|
+
_$insertNode(_el$2,_el$3)
|
|
6539
|
+
_$setProp(_el$2,"wrapMode","word")
|
|
6540
|
+
_$insert(_el$2,()=>icons.icon("info"),_el$3)
|
|
6541
|
+
_$insert(_el$2,message,null)
|
|
6542
|
+
_$insert(_el$,_$createComponent(Show34,{get when(){return _$memo(()=>!!props.setup)()&&(disabled()||failed())
|
|
6543
|
+
},get children(){return _$createComponent(SectionTab,{get api(){return props.api
|
|
6544
|
+
},get interaction(){return props.interaction
|
|
6545
|
+
},id:"opencode-navigator.todo.setup",get position(){return{section:props.navigationSection,row:2,column:0
|
|
6546
|
+
}},get label(){return failed()?"Retry Todo configuration":"Enable Todo\u2026"
|
|
6547
|
+
},selected:false,get disabled(){return state()?.status==="saving"
|
|
6548
|
+
},onActivate:()=>failed()?void props.setup?.refresh(props.sessionID):props.setup?.configure(props.sessionID)
|
|
6549
|
+
})
|
|
6550
|
+
}}),null)
|
|
6551
|
+
_$effect((_$p)=>_$setProp(_el$2,"fg",failed()?props.api.theme.current.warning:props.api.theme.current.textMuted,_$p))
|
|
6679
6552
|
return _el$
|
|
6680
6553
|
})()
|
|
6681
6554
|
}
|
|
@@ -6729,7 +6602,7 @@ _$insert(_el$2,()=>icons.icon(done()?"done":active()?"busy":cancelled()?"close":
|
|
|
6729
6602
|
_$setProp(_el$3,"flexGrow",1)
|
|
6730
6603
|
_$setProp(_el$3,"wrapMode","word")
|
|
6731
6604
|
_$insert(_el$3,()=>props.item.content)
|
|
6732
|
-
_$insert(_el$,_$createComponent(
|
|
6605
|
+
_$insert(_el$,_$createComponent(Show35,{get when(){return props.item.priority==="high"||props.item.priority==="medium"||props.item.priority==="low"
|
|
6733
6606
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b"),_el$6=_$createTextNode(` `)
|
|
6734
6607
|
_$insertNode(_el$4,_el$5)
|
|
6735
6608
|
_$setProp(_el$4,"width",2)
|
|
@@ -6739,7 +6612,7 @@ _$insert(_el$5,priorityLabel,null)
|
|
|
6739
6612
|
_$effect((_$p)=>_$setProp(_el$4,"fg",priorityColor(),_$p))
|
|
6740
6613
|
return _el$4
|
|
6741
6614
|
}}),null)
|
|
6742
|
-
_$effect((_p$)=>{var _v$=active()?theme().warning:done()?theme().success:cancelled()?theme().error:theme().textMuted,_v$2=active()?theme().primary:theme().textMuted,_v$3=done()?
|
|
6615
|
+
_$effect((_p$)=>{var _v$=active()?theme().warning:done()?theme().success:cancelled()?theme().error:theme().textMuted,_v$2=active()?theme().primary:theme().textMuted,_v$3=done()?TextAttributes15.STRIKETHROUGH:active()?TextAttributes15.BOLD:undefined
|
|
6743
6616
|
_v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
|
|
6744
6617
|
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"fg",_v$2,_p$.t))
|
|
6745
6618
|
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$3,"attributes",_v$3,_p$.a))
|
|
@@ -6750,13 +6623,13 @@ return _el$
|
|
|
6750
6623
|
})()
|
|
6751
6624
|
}
|
|
6752
6625
|
function TodoContents(props){const navigationSection=()=>props.navigationSection??1
|
|
6753
|
-
const tabsRow=()=>props.managed?3:2
|
|
6626
|
+
const tabsRow=()=>(props.managed?3:2) + (props.navigationOffset??0)
|
|
6754
6627
|
return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("box")
|
|
6755
6628
|
_$insertNode(_el$,_el$2)
|
|
6756
6629
|
_$setProp(_el$,"gap",1)
|
|
6757
6630
|
_$setProp(_el$2,"flexDirection","row")
|
|
6758
6631
|
_$setProp(_el$2,"flexWrap","wrap")
|
|
6759
|
-
_$insert(_el$2,_$createComponent(
|
|
6632
|
+
_$insert(_el$2,_$createComponent(For19,{each:["all","active","finished"],children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
|
|
6760
6633
|
},get interaction(){return props.interaction
|
|
6761
6634
|
},id:`${PLUGIN_ID}.todo.filter.${value}`,get position(){return{section:navigationSection(),row:tabsRow(),column:index()
|
|
6762
6635
|
}},get label(){return value[0].toUpperCase() + value.slice(1)
|
|
@@ -6765,17 +6638,17 @@ _$insert(_el$2,_$createComponent(For21,{each:["all","active","finished"],childre
|
|
|
6765
6638
|
},onActivate:()=>props.setMode(value)
|
|
6766
6639
|
})
|
|
6767
6640
|
}))
|
|
6768
|
-
_$insert(_el$,_$createComponent(
|
|
6641
|
+
_$insert(_el$,_$createComponent(Show36,{get when(){return props.view.rows.length>0
|
|
6769
6642
|
},get fallback(){return _$createComponent(EmptyTodo,{get api(){return props.api
|
|
6770
6643
|
},get mode(){return props.mode
|
|
6771
6644
|
}})
|
|
6772
6645
|
},get children(){return _$createComponent(SidebarRowList,{get api(){return props.api
|
|
6773
6646
|
},get interaction(){return props.interaction
|
|
6774
6647
|
},get density(){return props.density
|
|
6775
|
-
},get children(){return _$createComponent(
|
|
6648
|
+
},get children(){return _$createComponent(For19,{get each(){return props.visibility.visible()
|
|
6776
6649
|
},children:(row,index)=>{const startsGroup=()=>index()===0||props.visibility.visible()[index()-1].group!==row.group
|
|
6777
6650
|
return(()=>{var _el$3=_$createElement("box")
|
|
6778
|
-
_$insert(_el$3,_$createComponent(
|
|
6651
|
+
_$insert(_el$3,_$createComponent(Show36,{get when(){return startsGroup()
|
|
6779
6652
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
6780
6653
|
_$insertNode(_el$4,_el$5)
|
|
6781
6654
|
_$insert(_el$5,()=>row.group)
|
|
@@ -6812,7 +6685,7 @@ return _el$6
|
|
|
6812
6685
|
|
|
6813
6686
|
|
|
6814
6687
|
function TodoGuidanceControl(props){const state=()=>props.controller.guidance(props.sessionID)
|
|
6815
|
-
return _$createComponent(
|
|
6688
|
+
return _$createComponent(Show37,{get when(){return state().available
|
|
6816
6689
|
},get children(){var _el$=_$createElement("box")
|
|
6817
6690
|
_$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
6818
6691
|
},get interaction(){return props.interaction
|
|
@@ -6822,7 +6695,7 @@ _$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
|
6822
6695
|
},get disabled(){return state().saving
|
|
6823
6696
|
},onActivate:()=>void props.controller.setGuidance(props.sessionID,!state().enabled)
|
|
6824
6697
|
}),null)
|
|
6825
|
-
_$insert(_el$,_$createComponent(
|
|
6698
|
+
_$insert(_el$,_$createComponent(Show37,{get when(){return state().error
|
|
6826
6699
|
},children:(message)=>(()=>{var _el$2=_$createElement("text")
|
|
6827
6700
|
_$setProp(_el$2,"wrapMode","word")
|
|
6828
6701
|
_$insert(_el$2,message)
|
|
@@ -6838,22 +6711,25 @@ const icons=useIcons()
|
|
|
6838
6711
|
const unavailable=()=>hostCapabilityUnavailable(props.api,"todo")
|
|
6839
6712
|
const managed=()=>("guidance" in props.controller)?props.controller:undefined
|
|
6840
6713
|
const native=()=>("source" in props.controller)&&props.controller.source==="native"
|
|
6841
|
-
const
|
|
6714
|
+
const setup=()=>("setup" in props.controller)?props.controller.setup:undefined
|
|
6715
|
+
const setupState=()=>setup()?.state(props.sessionID)
|
|
6716
|
+
const [mode,setMode]=createSignal38("all")
|
|
6842
6717
|
const targetKey=createMemo18(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6843
|
-
|
|
6718
|
+
createEffect21(()=>{targetKey()
|
|
6844
6719
|
setMode("all")
|
|
6845
6720
|
})
|
|
6846
6721
|
const view=createMemo18(()=>buildTodoView(list(),mode()))
|
|
6847
6722
|
const visibility=createListVisibility({items:()=>view().rows,limit:()=>props.preferences.sectionItemLimit?.("todo")??0,resetKey:()=>JSON.stringify([targetKey(),mode()])
|
|
6848
6723
|
})
|
|
6849
6724
|
const state=createMemo18(()=>props.controller.state(props.sessionID))
|
|
6850
|
-
|
|
6725
|
+
createEffect21(()=>{const sessionID=props.sessionID
|
|
6851
6726
|
targetKey()
|
|
6852
6727
|
if(unavailable())
|
|
6853
6728
|
return
|
|
6854
6729
|
const deactivate=untrack10(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6855
|
-
|
|
6730
|
+
onCleanup25(deactivate)
|
|
6856
6731
|
untrack10(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6732
|
+
untrack10(()=>void setup()?.refresh(sessionID).catch(()=>{}))
|
|
6857
6733
|
})
|
|
6858
6734
|
const navigationSection=()=>props.navigationSection??1
|
|
6859
6735
|
return _$createComponent(Section,{get api(){return props.api
|
|
@@ -6861,17 +6737,21 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6861
6737
|
},sectionId:`${PLUGIN_ID}.section.todo`,get navigationSection(){return navigationSection()
|
|
6862
6738
|
},title:"TODO",section:"todo",get summary(){return _$memo(()=>!!(unavailable()||managed()?.missing(props.sessionID)))()?"\u2014":`${view().counts.completed}/${list().length}`
|
|
6863
6739
|
},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(()=>{})
|
|
6740
|
+
setup()?.refresh(props.sessionID).catch(()=>{})
|
|
6864
6741
|
}}:undefined
|
|
6865
6742
|
},get open(){return props.preferences.expanded().todo
|
|
6866
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(
|
|
6743
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(Show38,{get when(){return unavailable()
|
|
6867
6744
|
},get fallback(){return(()=>{var _el$=_$createElement("box")
|
|
6868
6745
|
_$setProp(_el$,"gap",1)
|
|
6869
|
-
_$insert(_el$,_$createComponent(
|
|
6746
|
+
_$insert(_el$,_$createComponent(Show38,{get when(){return native()
|
|
6870
6747
|
},get children(){return _$createComponent(NativeTodoNotice,{get api(){return props.api
|
|
6871
|
-
},get
|
|
6748
|
+
},get setup(){return setup()
|
|
6749
|
+
},get sessionID(){return props.sessionID
|
|
6750
|
+
},get interaction(){return props.interaction
|
|
6751
|
+
},get navigationSection(){return navigationSection()
|
|
6872
6752
|
}})
|
|
6873
6753
|
}}),null)
|
|
6874
|
-
_$insert(_el$,_$createComponent(
|
|
6754
|
+
_$insert(_el$,_$createComponent(Show38,{get when(){return managed()?.guidance(props.sessionID).available
|
|
6875
6755
|
},get children(){return _$createComponent(TodoGuidanceControl,{get api(){return props.api
|
|
6876
6756
|
},get controller(){return managed()
|
|
6877
6757
|
},get sessionID(){return props.sessionID
|
|
@@ -6879,7 +6759,7 @@ _$insert(_el$,_$createComponent(Show36,{get when(){return managed()?.guidance(pr
|
|
|
6879
6759
|
},get navigationSection(){return navigationSection()
|
|
6880
6760
|
}})
|
|
6881
6761
|
}}),null)
|
|
6882
|
-
_$insert(_el$,_$createComponent(
|
|
6762
|
+
_$insert(_el$,_$createComponent(Show38,{get when(){return managed()?.missing(props.sessionID)
|
|
6883
6763
|
},get fallback(){return _$createComponent(SectionRequestBody,{get api(){return props.api
|
|
6884
6764
|
},get interaction(){return props.interaction
|
|
6885
6765
|
},id:`${PLUGIN_ID}.retry.todo`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -6892,6 +6772,7 @@ _$insert(_el$,_$createComponent(Show36,{get when(){return managed()?.missing(pro
|
|
|
6892
6772
|
},setMode,get view(){return view()
|
|
6893
6773
|
},visibility,get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6894
6774
|
},get managed(){return Boolean(managed())
|
|
6775
|
+
},get navigationOffset(){return setupState()?.enabled===false||setupState()?.status==="error"?1:0
|
|
6895
6776
|
}})
|
|
6896
6777
|
}})
|
|
6897
6778
|
},get children(){var _el$2=_$createElement("text"),_el$3=_$createTextNode(` Navigator Todo needs a separate OpenCode 2 server plugin. See the README setup steps and restart OpenCode.`)
|
|
@@ -6916,7 +6797,7 @@ return _el$4
|
|
|
6916
6797
|
}
|
|
6917
6798
|
function SidebarContent(props){const sections=props.preferences.sections
|
|
6918
6799
|
const visibleSections=createMemo19(()=>props.preferences.sectionOrder().filter((section)=>sections()[section]&&supportsSidebarSection(props.api,section)))
|
|
6919
|
-
|
|
6800
|
+
onCleanup26(()=>props.interaction.setContentRoot(undefined))
|
|
6920
6801
|
return _$createComponent(ToolbarProvider,{get api(){return props.api
|
|
6921
6802
|
},get preferences(){return props.preferences
|
|
6922
6803
|
},get skills(){return props.skills
|
|
@@ -6932,7 +6813,7 @@ event.stopPropagation()
|
|
|
6932
6813
|
props.interaction.leave()
|
|
6933
6814
|
})
|
|
6934
6815
|
_$insert(_el$,_$createComponent(SidebarToolbar,props),null)
|
|
6935
|
-
_$insert(_el$,_$createComponent(
|
|
6816
|
+
_$insert(_el$,_$createComponent(For20,{get each(){return visibleSections()
|
|
6936
6817
|
},children:(section,index)=>_$createComponent(SectionBoundary,{get api(){return props.api
|
|
6937
6818
|
},get divided(){return index()<visibleSections().length-1
|
|
6938
6819
|
},get children(){return _$createComponent(Switch,{get children(){return [_$createComponent(Match,{when:section==="limits",get children(){return props.limitsSection(index() + 1)
|
|
@@ -6968,7 +6849,7 @@ return _el$
|
|
|
6968
6849
|
|
|
6969
6850
|
|
|
6970
6851
|
function McpPersistence(props){const persist=createMemo20(()=>props.controller.persist())
|
|
6971
|
-
|
|
6852
|
+
createEffect22(()=>{if(!props.api.state.ready)
|
|
6972
6853
|
return
|
|
6973
6854
|
persist()
|
|
6974
6855
|
const route=props.api.route.current
|
|
@@ -6976,12 +6857,12 @@ const params="params" in route?route.params:undefined
|
|
|
6976
6857
|
if(typeof params?.sessionID!=="string")
|
|
6977
6858
|
return
|
|
6978
6859
|
const current=props.controller.target()
|
|
6979
|
-
|
|
6860
|
+
onCleanup27(()=>props.controller.deactivate(current))
|
|
6980
6861
|
untrack11(()=>void props.controller.activate(current).catch(()=>{}))
|
|
6981
6862
|
})
|
|
6982
6863
|
return _$createElement("box")
|
|
6983
6864
|
}
|
|
6984
|
-
function PreferencesPersistence(props){
|
|
6865
|
+
function PreferencesPersistence(props){createEffect22(()=>{const location=currentLocation(props.api)
|
|
6985
6866
|
untrack11(()=>props.controller.setActiveScope(preferencesScope({directory:location.routing.directory,worktree:props.api.state.path.worktree
|
|
6986
6867
|
})))
|
|
6987
6868
|
props.controller.load()
|
|
@@ -6989,7 +6870,7 @@ props.controller.load()
|
|
|
6989
6870
|
return _$createElement("box")
|
|
6990
6871
|
}
|
|
6991
6872
|
function FirstRunWizardPersistence(props){let isChecked=false
|
|
6992
|
-
|
|
6873
|
+
createEffect22(()=>{if(isChecked)
|
|
6993
6874
|
return
|
|
6994
6875
|
isChecked=true
|
|
6995
6876
|
showFirstRunWizard(props.api,props.preferences).catch(()=>{})
|
|
@@ -7016,7 +6897,7 @@ const settingsId=`${PLUGIN_ID}.settings`
|
|
|
7016
6897
|
const settings=useSidebarItem(props.api,props.interaction,{id:settingsId,position:{section:0,row:0,column:0
|
|
7017
6898
|
},activate:()=>openSettings(props.api,props.preferences,undefined,props.mcp,props.skills)
|
|
7018
6899
|
},()=>theme().textMuted,"control")
|
|
7019
|
-
|
|
6900
|
+
onCleanup28(()=>props.interaction.setTitleRoot(undefined))
|
|
7020
6901
|
return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("box"),_el$3=_$createElement("box")
|
|
7021
6902
|
_$insertNode(_el$,_el$2)
|
|
7022
6903
|
_$use((node)=>props.interaction.setTitleRoot(node),_el$)
|
|
@@ -7027,7 +6908,7 @@ _$setProp(_el$2,"flexDirection","row")
|
|
|
7027
6908
|
_$setProp(_el$2,"justifyContent","space-between")
|
|
7028
6909
|
_$setProp(_el$2,"gap",1)
|
|
7029
6910
|
_$setProp(_el$3,"flexGrow",1)
|
|
7030
|
-
_$insert(_el$3,_$createComponent(
|
|
6911
|
+
_$insert(_el$3,_$createComponent(Show39,{get when(){return props.preferences.showSessionTitle()
|
|
7031
6912
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
7032
6913
|
_$insertNode(_el$4,_el$5)
|
|
7033
6914
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -7035,7 +6916,7 @@ _$insert(_el$5,()=>props.title)
|
|
|
7035
6916
|
_$effect((_$p)=>_$setProp(_el$4,"fg",theme().text,_$p))
|
|
7036
6917
|
return _el$4
|
|
7037
6918
|
}}),null)
|
|
7038
|
-
_$insert(_el$3,_$createComponent(
|
|
6919
|
+
_$insert(_el$3,_$createComponent(Show39,{get when(){return _$memo(()=>!!props.preferences.showSessionDate())()&&created()
|
|
7039
6920
|
},children:(value)=>(()=>{var _el$6=_$createElement("text")
|
|
7040
6921
|
_$insert(_el$6,value)
|
|
7041
6922
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().textMuted,_$p))
|
|
@@ -7084,11 +6965,11 @@ function createLimitsRefresh(options,schedule=scheduleInterval){let disposed=fal
|
|
|
7084
6965
|
const selectedKey=createMemo22(()=>JSON.stringify(options.selectedModel?.()))
|
|
7085
6966
|
const targetKey=createMemo22(()=>JSON.stringify(options.controller.current().model))
|
|
7086
6967
|
const interval=createMemo22(()=>(parseLimitsRefreshMinutes(options.refreshMinutes?.())??DEFAULT_LIMITS_REFRESH_MINUTES)*60000)
|
|
7087
|
-
|
|
6968
|
+
createEffect23(on2(selectedKey,()=>{const model=options.selectedModel?.()
|
|
7088
6969
|
if(model&&options.accountSource)
|
|
7089
6970
|
options.accountSource.refresh(model).catch(()=>{})
|
|
7090
6971
|
}))
|
|
7091
|
-
|
|
6972
|
+
createEffect23(on2(targetKey,()=>{const{model,adapter}=options.controller.current()
|
|
7092
6973
|
if(model&&adapter)
|
|
7093
6974
|
options.controller.refresh()
|
|
7094
6975
|
}))
|
|
@@ -7101,14 +6982,21 @@ await options.accountSource.refresh(model)
|
|
|
7101
6982
|
if(!disposed&&target===targetKey())
|
|
7102
6983
|
await options.controller.refresh()
|
|
7103
6984
|
}
|
|
7104
|
-
|
|
6985
|
+
createEffect23(on2(interval,(milliseconds)=>{onCleanup29(schedule(()=>void refresh().catch(()=>{}),milliseconds))
|
|
7105
6986
|
}))
|
|
7106
|
-
|
|
6987
|
+
onCleanup29(()=>{disposed=true
|
|
7107
6988
|
})
|
|
7108
6989
|
}
|
|
7109
6990
|
function LimitsPersistence(props){createLimitsRefresh(props)
|
|
7110
6991
|
return _$createElement("box")
|
|
7111
6992
|
}
|
|
6993
|
+
function bindNavigatorAbout(api,status,updates,notes){const dispose=registerNavigatorAboutServices(api,{navigatorVersion:"0.25.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()
|
|
6994
|
+
if(target)
|
|
6995
|
+
updates.navigator(target,dialogs)
|
|
6996
|
+
},changelog:async ()=>notes.parseChangelog(await notes.readBundledChangelog())
|
|
6997
|
+
})
|
|
6998
|
+
api.lifecycle.onDispose(dispose)
|
|
6999
|
+
}
|
|
7112
7000
|
import {homedir} from "os"
|
|
7113
7001
|
|
|
7114
7002
|
function location(input){return input.directory?{location:{directory:input.directory}}:{}}
|
|
@@ -7238,7 +7126,7 @@ context.keymap.dispatch(command.id)
|
|
|
7238
7126
|
context.renderer.keyInput.on("keypress",onKeypress)
|
|
7239
7127
|
const keymap={registerLayer(layer){const id=++sequence
|
|
7240
7128
|
const owner=getOwner()
|
|
7241
|
-
const [active,setActive]=
|
|
7129
|
+
const [active,setActive]=createSignal39(true)
|
|
7242
7130
|
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
7131
|
}))
|
|
7244
7132
|
}
|
|
@@ -7283,7 +7171,7 @@ cleanups.clear()
|
|
|
7283
7171
|
context.renderer.keyInput.off("keypress",onKeypress)
|
|
7284
7172
|
}}}
|
|
7285
7173
|
|
|
7286
|
-
function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=
|
|
7174
|
+
function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=createSignal40({})
|
|
7287
7175
|
const projections=new WeakMap
|
|
7288
7176
|
function normalize(info){const directory=info.location.directory
|
|
7289
7177
|
const workspaceID=context.location?.directory===directory?context.location.workspaceID:undefined
|
|
@@ -7346,25 +7234,16 @@ return context.data.session.message.list(route.sessionID).some((message)=>(!reve
|
|
|
7346
7234
|
}
|
|
7347
7235
|
|
|
7348
7236
|
|
|
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")
|
|
7237
|
+
|
|
7238
|
+
|
|
7239
|
+
function createV2UI(context,api){let dialogOpen=false
|
|
7240
|
+
function DialogPrompt(props){return _$createComponent(SingleLinePrompt,_$mergeProps({get api(){return api()
|
|
7241
|
+
}},props))
|
|
7363
7242
|
}
|
|
7364
7243
|
function DialogConfirm(props){let active=true
|
|
7365
|
-
|
|
7244
|
+
onCleanup30(()=>{active=false
|
|
7366
7245
|
})
|
|
7367
|
-
|
|
7246
|
+
onMount7(async ()=>{const confirmed=await context.ui.dialog.confirm({title:props.title,message:props.message
|
|
7368
7247
|
})
|
|
7369
7248
|
if(!active)
|
|
7370
7249
|
return
|
|
@@ -7404,7 +7283,7 @@ const keymap=createV2Keymap(context)
|
|
|
7404
7283
|
disposers.push(keymap.dispose)
|
|
7405
7284
|
const sessions=createV2SessionAdapter(context)
|
|
7406
7285
|
const remote=createV2ClientAdapter(context)
|
|
7407
|
-
const ui=createV2UI(context)
|
|
7286
|
+
const ui=createV2UI(context,()=>api)
|
|
7408
7287
|
const onDispose=(dispose)=>{disposers.push(dispose)
|
|
7409
7288
|
return()=>{const index=disposers.indexOf(dispose)
|
|
7410
7289
|
if(index!==-1)
|
|
@@ -7427,7 +7306,7 @@ context.ui.router.navigate({type:"plugin",name,data:params})
|
|
|
7427
7306
|
},attention:context.attention,lifecycle:{signal:controller.signal,onDispose},slots:createV2Slots(context,(dispose)=>{onDispose(dispose)
|
|
7428
7307
|
})
|
|
7429
7308
|
}
|
|
7430
|
-
setHostCapabilities(api,{todo:true,lsp:false,titleVisibility:false,permissionMode:false,commandsReachableOnly:true
|
|
7309
|
+
setHostCapabilities(api,{todo:true,lsp:false,titleVisibility:false,permissionMode:false,commandsReachableOnly:true,nativeTodo:true
|
|
7431
7310
|
})
|
|
7432
7311
|
bindToolbarActionState(context,api)
|
|
7433
7312
|
return{api,async dispose(){controller.abort()
|
|
@@ -7568,11 +7447,15 @@ const subagents=createSubagentController(api,{source:nativeSources?.subagents
|
|
|
7568
7447
|
})
|
|
7569
7448
|
const skills=createSkillController(api,nativeSources?.skills)
|
|
7570
7449
|
const preferences=createPreferencesController(api,config,createPreferencesStore(api.state.path.state),configured)
|
|
7450
|
+
if(hostContext){const setupPath=import.meta.url.includes("/dist/tui.js")?"./native-todo-setup.js":"../native-todo-setup"
|
|
7451
|
+
const setup=await import(setupPath)
|
|
7452
|
+
todo.setup=setup.createOpenCodeV2TodoSetup(hostContext,api,preferences,todo.target)
|
|
7453
|
+
}
|
|
7571
7454
|
const limitsPath=import.meta.url.includes("/dist/tui.js")?"./provider-limits.js":"../provider-limits"
|
|
7572
7455
|
const limitsModule=await import(limitsPath)
|
|
7573
7456
|
const LimitsSection=limitsModule.ProviderLimitsSection
|
|
7574
7457
|
const{controller:limits,codex,accountSource,selectModel,modelSelection
|
|
7575
|
-
}=limitsModule.createProviderQuotaIntegration(api,preferences,"0.
|
|
7458
|
+
}=limitsModule.createProviderQuotaIntegration(api,preferences,"0.25.0",hostContext)
|
|
7576
7459
|
const mcp=createMcpController(api,preferences.persistMcp,preferences,nativeSources?.mcp)
|
|
7577
7460
|
const interaction=createSidebarInteraction(api,()=>openKeyboardHelp(api,preferences.lspIconStyle,preferences.cornerFont,sidebarShortcutActions(api)))
|
|
7578
7461
|
const startup=createStartupSessionController(api,preferences)
|
|
@@ -7601,7 +7484,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
|
|
|
7601
7484
|
},interaction,skills,subagents,mcp
|
|
7602
7485
|
}),_$createComponent(FirstRunWizardPersistence,{api,preferences
|
|
7603
7486
|
}),_$createComponent(StartupSessionBinding,{api,controller:startup
|
|
7604
|
-
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.
|
|
7487
|
+
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.25.0"
|
|
7605
7488
|
}),_$createComponent(McpPersistence,{api,controller:mcp
|
|
7606
7489
|
})]
|
|
7607
7490
|
}})
|
|
@@ -7632,14 +7515,16 @@ throw result.error
|
|
|
7632
7515
|
}
|
|
7633
7516
|
return result.data?.type==="text"?result.data.content:undefined
|
|
7634
7517
|
})
|
|
7518
|
+
const updateServices=await loadNavigatorUpdates()
|
|
7635
7519
|
const{createVersionStatus,createVersionUpdateActions,createOpenCodeV1VersionUpdater
|
|
7636
|
-
}=
|
|
7637
|
-
const versionStatus=createVersionStatus(api,"0.
|
|
7638
|
-
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.
|
|
7520
|
+
}=updateServices
|
|
7521
|
+
const versionStatus=createVersionStatus(api,"0.25.0")
|
|
7522
|
+
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.25.0"))
|
|
7523
|
+
bindNavigatorAbout(api,versionStatus,versionUpdates,updateServices)
|
|
7639
7524
|
api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7640
7525
|
},get multilineCorners(){return preferences.cornerFont
|
|
7641
7526
|
},get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
|
|
7642
|
-
},navigatorVersion:"0.
|
|
7527
|
+
},navigatorVersion:"0.25.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7643
7528
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7644
7529
|
}})
|
|
7645
7530
|
}})
|
|
@@ -7653,17 +7538,19 @@ return
|
|
|
7653
7538
|
return new TextDecoder().decode(await context.client.file.read({location:context.location,path:".opencode/navigator.json"
|
|
7654
7539
|
}))
|
|
7655
7540
|
},todo,context)
|
|
7541
|
+
const updateServices=await loadNavigatorUpdates()
|
|
7656
7542
|
const{createVersionStatus,createVersionUpdateActions,createOpenCodeV2VersionUpdater
|
|
7657
|
-
}=
|
|
7658
|
-
const versionStatus=createVersionStatus(adapter.api,"0.
|
|
7659
|
-
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.
|
|
7543
|
+
}=updateServices
|
|
7544
|
+
const versionStatus=createVersionStatus(adapter.api,"0.25.0")
|
|
7545
|
+
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.25.0"))
|
|
7546
|
+
bindNavigatorAbout(adapter.api,versionStatus,versionUpdates,updateServices)
|
|
7660
7547
|
const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7661
7548
|
},get multilineCorners(){return preferences.cornerFont
|
|
7662
7549
|
},get children(){var _el$=_$createElement("box")
|
|
7663
7550
|
_$setProp(_el$,"flexDirection","row")
|
|
7664
7551
|
_$setProp(_el$,"justifyContent","space-between")
|
|
7665
7552
|
_$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
|
|
7666
|
-
},navigatorVersion:"0.
|
|
7553
|
+
},navigatorVersion:"0.25.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7667
7554
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7668
7555
|
}}),null)
|
|
7669
7556
|
_$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api
|
|
@@ -7678,5 +7565,5 @@ await adapter.dispose()
|
|
|
7678
7565
|
var plugin={id:PLUGIN_ID,tui:setupOpenCodeV1,setup:setupOpenCodeV2
|
|
7679
7566
|
}
|
|
7680
7567
|
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
|
|
7568
|
+
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
7569
|
}
|