opencode-navigator 0.19.2 → 0.20.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 +13 -0
- package/README.md +107 -3
- package/dist/{chunk-r37n7w97.js → chunk-c1kw6ktv.js} +3 -4
- package/dist/chunk-cmmnfes2.js +7 -0
- package/dist/layout-preset-actions.js +438 -0
- package/dist/mcp-groups.js +4 -4
- package/dist/project-profile.js +280 -0
- package/dist/provider-limits.js +739 -0
- package/dist/quick-actions-settings.js +2 -5
- package/dist/settings-import.js +40 -0
- package/dist/skill-groups.js +4 -4
- package/dist/trusted-skills.js +22 -0
- package/dist/tui.js +389 -395
- package/package.json +4 -2
- package/scripts/save-project-profile.mjs +41 -0
package/dist/tui.js
CHANGED
|
@@ -3,14 +3,14 @@ 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,useContext as useContext2,createEffect as createEffect2,splitProps,untrack,splitProps as splitProps2,For,createEffect as createEffect3,onCleanup as onCleanup2,Show,splitProps as splitProps3,createSignal as createSignal4,createSignal as createSignal5,createSignal as createSignal6,onCleanup as onCleanup3,batch,createSignal as createSignal8,createSignal as createSignal7,createEffect as
|
|
7
|
-
var SIDEBAR_SECTIONS=["todo","subagents","skills","quick_actions","lsp","mcp"]
|
|
6
|
+
import {createSignal as createSignal2,createSignal,createEffect,onCleanup,createContext,useContext,createContext as createContext2,createSignal as createSignal3,useContext as useContext2,createEffect as createEffect2,splitProps,untrack,splitProps as splitProps2,For,createEffect as createEffect3,onCleanup as onCleanup2,createEffect as createEffect4,Show,splitProps as splitProps3,createSignal as createSignal4,createSignal as createSignal5,createSignal as createSignal6,onCleanup as onCleanup3,batch,createSignal as createSignal8,createSignal as createSignal7,createEffect as createEffect5,createSignal as createSignal9,onCleanup as onCleanup4,createSignal as createSignal10,createSignal as createSignal11,Index,createSignal as createSignal12,onCleanup as onCleanup5,createEffect as createEffect7,onCleanup as onCleanup7,batch as batch2,createEffect as createEffect6,createMemo,createSignal as createSignal13,onCleanup as onCleanup6,onMount,For as For2,For as For3,Show as Show2,createMemo as createMemo2,Show as Show3,createSignal as createSignal14,onCleanup as onCleanup8,For as For4,For as For5,For as For8,createMemo as createMemo4,onMount as onMount3,For as For7,createMemo as createMemo3,onMount as onMount2,Show as Show5,createEffect as createEffect8,createSignal as createSignal15,onCleanup as onCleanup9,Show as Show4,For as For6,For as For9,createEffect as createEffect9,createMemo as createMemo5,onCleanup as onCleanup10,createEffect as createEffect10,createMemo as createMemo6,untrack as untrack2,For as For10,createEffect as createEffect11,createMemo as createMemo8,onCleanup as onCleanup11,onMount as onMount4,createMemo as createMemo7,Show as Show6,onCleanup as onCleanup12,createEffect as createEffect12,onCleanup as onCleanup13,createSignal as createSignal16,createMemo as createMemo9,createEffect as createEffect13,onCleanup as onCleanup14,onMount as onMount5,onCleanup as onCleanup15,onMount as onMount6,For as For11,createSignal as createSignal17,createSignal as createSignal18,Show as Show7,createSignal as createSignal20,createSignal as createSignal19,onCleanup as onCleanup16,For as For12,Show as Show10,createMemo as createMemo11,createComputed,createMemo as createMemo10,createSignal as createSignal21,untrack as untrack3,Show as Show8,createComputed as createComputed2,untrack as untrack4,Show as Show9,createEffect as createEffect14,createSignal as createSignal22,createMemo as createMemo13,createSignal as createSignal25,createMemo as createMemo12,For as For13,Show as Show14,Show as Show11,Show as Show12,createSignal as createSignal23,createContext as createContext3,useContext as useContext3,Show as Show13,createSignal as createSignal24,onCleanup as onCleanup17,For as For14,Show as Show16,createSignal as createSignal26,untrack as untrack5,createSignal as createSignal27,createEffect as createEffect15,Show as Show15,For as For15,Show as Show18,createMemo as createMemo15,Show as Show17,createMemo as createMemo14,createSignal as createSignal28,createEffect as createEffect16,onCleanup as onCleanup18,For as For20,Match,Switch,createMemo as createMemo19,onCleanup as onCleanup22,For as For16,Show as Show19,createSignal as createSignal29,createEffect as createEffect17,createMemo as createMemo16,onCleanup as onCleanup19,untrack as untrack6,For as For18,Show as Show22,createEffect as createEffect18,createMemo as createMemo17,createSignal as createSignal30,onCleanup as onCleanup20,untrack as untrack7,For as For17,Show as Show21,Show as Show20,Show as Show26,createEffect as createEffect19,createMemo as createMemo18,createSignal as createSignal31,onCleanup as onCleanup21,untrack as untrack8,For as For19,Show as Show24,Show as Show23,Show as Show25,createEffect as createEffect20,createMemo as createMemo20,onCleanup as onCleanup23,untrack as untrack9,Show as Show27,createMemo as createMemo21,onCleanup as onCleanup24,createEffect as createEffect21,onCleanup as onCleanup25,untrack as untrack10,createSignal as createSignal32,onCleanup as onCleanup26,onMount as onMount7} from "solid-js"
|
|
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
|
-
var DEFAULT_SECTION_EXPANSION={todo:true,subagents:false,skills:false,quick_actions:false,lsp:false,mcp:false
|
|
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:"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"}]
|
|
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
14
|
function parseQuickActionOrder(value){if(!Array.isArray(value))
|
|
15
15
|
return
|
|
16
16
|
const order=[...new Set(value.filter((id)=>QUICK_ACTION_IDS.includes(id)))]
|
|
@@ -30,9 +30,11 @@ continue
|
|
|
30
30
|
seen.add(candidate)
|
|
31
31
|
order.push(candidate)
|
|
32
32
|
}
|
|
33
|
-
for(const section of SIDEBAR_SECTIONS){if(!seen.has(section))
|
|
33
|
+
for(const section of SIDEBAR_SECTIONS){if(!seen.has(section)){if(section==="limits")
|
|
34
|
+
order.unshift(section)
|
|
35
|
+
else
|
|
34
36
|
order.push(section)
|
|
35
|
-
}
|
|
37
|
+
}}
|
|
36
38
|
return order
|
|
37
39
|
}
|
|
38
40
|
function parseSectionPreferences(value){if(!value||typeof value!=="object"||Array.isArray(value))
|
|
@@ -61,7 +63,7 @@ return defaults
|
|
|
61
63
|
const input=value
|
|
62
64
|
return Object.fromEntries(Object.entries(defaults).map(([name,visible])=>[name,typeof input[name]==="boolean"?input[name]:visible]))
|
|
63
65
|
}
|
|
64
|
-
function parseSectionVisibility(value){return resolveSectionVisibility({todo:true,subagents:true,skills:true,quick_actions:true,lsp:true,mcp:true
|
|
66
|
+
function parseSectionVisibility(value){return resolveSectionVisibility({limits:true,todo:true,subagents:true,skills:true,quick_actions:true,lsp:true,mcp:true
|
|
65
67
|
},value)
|
|
66
68
|
}
|
|
67
69
|
var PLUGIN_ID="opencode-navigator"
|
|
@@ -495,7 +497,7 @@ return changeMany({action:state.action,...state.preset&&{preset:state.preset},..
|
|
|
495
497
|
|
|
496
498
|
|
|
497
499
|
|
|
498
|
-
var ICONS={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"," "]
|
|
500
|
+
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"," "]
|
|
499
501
|
}
|
|
500
502
|
function uiIcon(name,style="nerd"){return ICONS[name][style==="text"?1:0]
|
|
501
503
|
}
|
|
@@ -846,6 +848,7 @@ return _el$
|
|
|
846
848
|
|
|
847
849
|
|
|
848
850
|
|
|
851
|
+
|
|
849
852
|
function IconControl(props){function mouseOver(event){props.onMouseOver?.()
|
|
850
853
|
event.stopPropagation()
|
|
851
854
|
}
|
|
@@ -873,7 +876,7 @@ function BookmarkControl(props){const icons=useIcons()
|
|
|
873
876
|
return _$createComponent(IconControl,{ref(r$){var _ref$=props.ref
|
|
874
877
|
typeof _ref$==="function"?_ref$(r$):props.ref=r$
|
|
875
878
|
},get id(){return props.id
|
|
876
|
-
},get icon(){return icons.icon(props.bookmarked?"bookmark":"bookmarkEmpty")
|
|
879
|
+
},get icon(){return _$memo(()=>props.visible?.()===false)()?" ":icons.icon(props.bookmarked?"bookmark":"bookmarkEmpty")
|
|
877
880
|
},get backgroundColor(){return props.backgroundColor
|
|
878
881
|
},get foregroundColor(){return props.foregroundColor
|
|
879
882
|
},get onMouseOver(){return props.onMouseOver
|
|
@@ -914,13 +917,13 @@ return _el$
|
|
|
914
917
|
|
|
915
918
|
|
|
916
919
|
|
|
917
|
-
function
|
|
920
|
+
function SelectionMenu(props){const icons=useIcons()
|
|
918
921
|
const dialogs=useDialogs(props.api)
|
|
919
922
|
const scroll=useDialogScroll()
|
|
920
923
|
const [active,setActive]=useDialogState("selection",0)
|
|
921
924
|
const theme=()=>props.api.theme.current
|
|
922
925
|
let body
|
|
923
|
-
const prefix=`${PLUGIN_ID}.
|
|
926
|
+
const prefix=`${PLUGIN_ID}.selection-menu`
|
|
924
927
|
createEffect3(()=>{if(active()>=props.options.length)
|
|
925
928
|
setActive(Math.max(0,props.options.length-1))
|
|
926
929
|
})
|
|
@@ -1015,6 +1018,19 @@ return _el$7
|
|
|
1015
1018
|
}
|
|
1016
1019
|
|
|
1017
1020
|
|
|
1021
|
+
function GuardedConfirmation(props){const dialogs=useDialogs(props.api)
|
|
1022
|
+
createEffect4(()=>{if(!props.current())
|
|
1023
|
+
dialogs.close()
|
|
1024
|
+
})
|
|
1025
|
+
return _$createComponent(props.api.ui.DialogConfirm,{get title(){return props.title
|
|
1026
|
+
},get message(){return props.message
|
|
1027
|
+
},onConfirm:()=>{if(props.current())
|
|
1028
|
+
props.onConfirm()
|
|
1029
|
+
},get onCancel(){return dialogs.back
|
|
1030
|
+
}})
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
|
|
1018
1034
|
|
|
1019
1035
|
|
|
1020
1036
|
|
|
@@ -1060,7 +1076,7 @@ return _p$
|
|
|
1060
1076
|
return _el$
|
|
1061
1077
|
}}))
|
|
1062
1078
|
}
|
|
1063
|
-
function McpErrorDialog(props){return _$createComponent(
|
|
1079
|
+
function McpErrorDialog(props){return _$createComponent(SelectionMenu,{get api(){return props.api
|
|
1064
1080
|
},get title(){return `MCP error \xB7 ${props.name}`
|
|
1065
1081
|
},height:12,get options(){return [{title:`Status \xB7 ${props.status}`,value:"error",description:props.error,icon:"error"
|
|
1066
1082
|
}]
|
|
@@ -1221,6 +1237,11 @@ return server.trim()&&group?[[server,group]]:[]
|
|
|
1221
1237
|
}))
|
|
1222
1238
|
}
|
|
1223
1239
|
var parseSkillGroups=parseMcpServerGroups
|
|
1240
|
+
var parseCodexAccountBindings=parseMcpServerGroups
|
|
1241
|
+
function parsePendingResetAttempt(value){const input=record(value)
|
|
1242
|
+
if(!input||typeof input.providerID!=="string"||typeof input.modelID!=="string"||typeof input.accountID!=="string"||typeof input.idempotencyKey!=="string"||!/^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/iu.test(input.idempotencyKey)||typeof input.createdAt!=="number"||!Number.isFinite(input.createdAt)||input.creditID!==undefined&&typeof input.creditID!=="string")
|
|
1243
|
+
return
|
|
1244
|
+
return{providerID:input.providerID,modelID:input.modelID,accountID:input.accountID,idempotencyKey:input.idempotencyKey,createdAt:input.createdAt,...input.creditID&&{creditID:input.creditID}}}
|
|
1224
1245
|
function parseWorkspaceProfiles(value){return Object.fromEntries(Object.entries(record(value)??{}).flatMap(([layout,rawMcp])=>{const layoutName=layout.trim().slice(0,64)
|
|
1225
1246
|
const mcpName=typeof rawMcp==="string"?rawMcp.trim().slice(0,64):""
|
|
1226
1247
|
return layoutName&&mcpName?[[layoutName,mcpName]]:[]
|
|
@@ -1255,11 +1276,13 @@ const recentSkills=parseRecentSkills(userInput?.recentSkills)
|
|
|
1255
1276
|
const recentQuickActions=parseRecentQuickActions(userInput?.recentQuickActions)
|
|
1256
1277
|
const mcpServerGroups=parseMcpServerGroups(userInput?.mcpServerGroups)
|
|
1257
1278
|
const skillGroups=parseSkillGroups(userInput?.skillGroups)
|
|
1279
|
+
const codexAccountBindings=parseCodexAccountBindings(userInput?.codexAccountBindings)
|
|
1280
|
+
const pendingResetAttempt=parsePendingResetAttempt(userInput?.pendingResetAttempt)
|
|
1258
1281
|
const workspaceProfiles=parseWorkspaceProfiles(userInput?.workspaceProfiles)
|
|
1259
1282
|
return{global:{...Object.keys(behavior).length>0&&{behavior},...layout&&{layout},...Object.keys(globalMcp).length>0&&{mcp:globalMcp}},worktrees,user:{...skippedSkillConfirmations&&{skippedSkillConfirmations},...typeof userInput?.onboardingCompleted==="boolean"&&{onboardingCompleted:userInput.onboardingCompleted
|
|
1260
1283
|
},...typeof userInput?.lastNavigatorVersion==="string"&&{lastNavigatorVersion:userInput.lastNavigatorVersion
|
|
1261
1284
|
},...typeof userInput?.previousNavigatorVersion==="string"&&{previousNavigatorVersion:userInput.previousNavigatorVersion
|
|
1262
|
-
},...Object.keys(layoutPresets).length>0&&{layoutPresets},...Object.keys(mcpPresets).length>0&&{mcpPresets},...favoriteSkills&&{favoriteSkills},...favoriteMcpServers?.length&&{favoriteMcpServers},...favoriteQuickActions.length>0&&{favoriteQuickActions},...recentSkills.length>0&&{recentSkills},...recentQuickActions.length>0&&{recentQuickActions},...Object.keys(mcpServerGroups).length>0&&{mcpServerGroups},...Object.keys(skillGroups).length>0&&{skillGroups},...typeof userInput?.autoApprovePermissions==="boolean"&&{autoApprovePermissions:userInput.autoApprovePermissions
|
|
1285
|
+
},...Object.keys(layoutPresets).length>0&&{layoutPresets},...Object.keys(mcpPresets).length>0&&{mcpPresets},...favoriteSkills&&{favoriteSkills},...favoriteMcpServers?.length&&{favoriteMcpServers},...favoriteQuickActions.length>0&&{favoriteQuickActions},...recentSkills.length>0&&{recentSkills},...recentQuickActions.length>0&&{recentQuickActions},...Object.keys(mcpServerGroups).length>0&&{mcpServerGroups},...Object.keys(skillGroups).length>0&&{skillGroups},...Object.keys(codexAccountBindings).length>0&&{codexAccountBindings},...pendingResetAttempt&&{pendingResetAttempt},...typeof userInput?.autoApprovePermissions==="boolean"&&{autoApprovePermissions:userInput.autoApprovePermissions
|
|
1263
1286
|
},...Object.keys(workspaceProfiles).length>0&&{workspaceProfiles}}}}
|
|
1264
1287
|
function parseValues(value){if(!value)
|
|
1265
1288
|
return{}
|
|
@@ -1407,6 +1430,15 @@ const recentSkills=parseRecentSkills([...update.user?.recentSkill?[update.user.r
|
|
|
1407
1430
|
const recentQuickActions=parseRecentQuickActions([...update.user?.recentQuickAction?[update.user.recentQuickAction]:[],...current.user.recentQuickActions??[]])
|
|
1408
1431
|
const mcpServerGroups=assignGroup(current.user.mcpServerGroups,update.user?.mcpServerGroup?.name,update.user?.mcpServerGroup?.group)
|
|
1409
1432
|
const skillGroups=assignGroup(current.user.skillGroups,update.user?.skillGroup?.location,update.user?.skillGroup?.group)
|
|
1433
|
+
const binding=update.user?.codexAccountBinding
|
|
1434
|
+
const codexAccountBindings=assignGroup(current.user.codexAccountBindings,binding?.providerID&&binding.modelID?JSON.stringify([binding.providerID,binding.modelID]):undefined,binding?.accountID)
|
|
1435
|
+
const pendingUpdate=update.user?.pendingResetAttempt
|
|
1436
|
+
const currentAttempt=current.user.pendingResetAttempt
|
|
1437
|
+
if(pendingUpdate&¤tAttempt&¤tAttempt.idempotencyKey!==pendingUpdate.idempotencyKey){throw new Error("Another reset attempt is still unresolved")
|
|
1438
|
+
}
|
|
1439
|
+
if(update.user?.clearPendingResetAttempt&¤tAttempt?.idempotencyKey!==update.user.clearPendingResetAttempt){throw new Error("Reset attempt changed; refresh before retrying")
|
|
1440
|
+
}
|
|
1441
|
+
const pendingResetAttempt=update.user?.clearPendingResetAttempt?undefined:pendingUpdate??currentAttempt
|
|
1410
1442
|
const favoriteSkills=update.user?.favoriteSkills?parseSkillConfirmations(update.user.favoriteSkills):[...current.user.favoriteSkills??[]]
|
|
1411
1443
|
const favoriteSkill=update.user?.favoriteSkill
|
|
1412
1444
|
if(favoriteSkill?.location){const index=favoriteSkills.indexOf(favoriteSkill.location)
|
|
@@ -1422,7 +1454,8 @@ return{global:target.kind==="global"?scope:current.global,worktrees,user:{...ski
|
|
|
1422
1454
|
},...(update.user?.previousNavigatorVersion??current.user.previousNavigatorVersion)&&{previousNavigatorVersion:update.user?.previousNavigatorVersion??current.user.previousNavigatorVersion
|
|
1423
1455
|
},...Object.keys(parsedLayoutPresets).length>0&&{layoutPresets:parsedLayoutPresets},...Object.keys(parsedMcpPresets).length>0&&{mcpPresets:parsedMcpPresets},...Object.keys(workspaceProfiles).length>0&&{workspaceProfiles:parseWorkspaceProfiles(workspaceProfiles)
|
|
1424
1456
|
},...favoriteSkills.length>0&&{favoriteSkills},...favoriteMcpServers.size>0&&{favoriteMcpServers:[...favoriteMcpServers].sort()},...favoriteQuickActions.size>0&&{favoriteQuickActions:parseFavoriteQuickActions([...favoriteQuickActions])
|
|
1425
|
-
},...recentSkills.length>0&&{recentSkills},...recentQuickActions.length>0&&{recentQuickActions},...Object.keys(mcpServerGroups).length>0&&{mcpServerGroups:parseMcpServerGroups(mcpServerGroups)},...Object.keys(skillGroups).length>0&&{skillGroups:parseSkillGroups(skillGroups)},...
|
|
1457
|
+
},...recentSkills.length>0&&{recentSkills},...recentQuickActions.length>0&&{recentQuickActions},...Object.keys(mcpServerGroups).length>0&&{mcpServerGroups:parseMcpServerGroups(mcpServerGroups)},...Object.keys(skillGroups).length>0&&{skillGroups:parseSkillGroups(skillGroups)},...Object.keys(codexAccountBindings).length>0&&{codexAccountBindings:parseCodexAccountBindings(codexAccountBindings)
|
|
1458
|
+
},...pendingResetAttempt&&{pendingResetAttempt},...typeof (update.user?.autoApprovePermissions??current.user.autoApprovePermissions)==="boolean"&&{autoApprovePermissions:update.user?.autoApprovePermissions??current.user.autoApprovePermissions
|
|
1426
1459
|
}}}}
|
|
1427
1460
|
function targetForLegacyScope(scope){return scope==="global"?{kind:"global"}:{kind:"worktree",key:scope}}
|
|
1428
1461
|
function createPreferencesStore(stateDirectory){const directory=join(stateDirectory,LEGACY_PLUGIN_ID)
|
|
@@ -1593,6 +1626,8 @@ const [recentQuickActions,setRecentQuickActions]=createSignal4([])
|
|
|
1593
1626
|
const [mcpServerGroups,setMcpServerGroups]=createSignal4(configured.mcpServerGroups??{})
|
|
1594
1627
|
const [skillGroups,setSkillGroups]=createSignal4({})
|
|
1595
1628
|
const [autoApprovePermissions,setAutoApprovePermissions]=createSignal4()
|
|
1629
|
+
const [codexAccountBindings,setCodexAccountBindings]=createSignal4({})
|
|
1630
|
+
const [pendingResetAttempt,setPendingResetAttempt]=createSignal4()
|
|
1596
1631
|
const [ready,setReady]=createSignal4(false)
|
|
1597
1632
|
const [revision,setRevision]=createSignal4(0)
|
|
1598
1633
|
const sessionLayouts=new Map
|
|
@@ -1662,6 +1697,8 @@ setRecentQuickActions(value.user.recentQuickActions??[])
|
|
|
1662
1697
|
setMcpServerGroups({...configured.mcpServerGroups,...value.user.mcpServerGroups})
|
|
1663
1698
|
setSkillGroups(value.user.skillGroups??{})
|
|
1664
1699
|
setAutoApprovePermissions(value.user.autoApprovePermissions)
|
|
1700
|
+
setCodexAccountBindings(value.user.codexAccountBindings??{})
|
|
1701
|
+
setPendingResetAttempt(value.user.pendingResetAttempt)
|
|
1665
1702
|
setReady(true)
|
|
1666
1703
|
refreshResolved()
|
|
1667
1704
|
}
|
|
@@ -1782,6 +1819,21 @@ return
|
|
|
1782
1819
|
setAutoApprovePermissions(value)
|
|
1783
1820
|
update({user:{autoApprovePermissions:value}})
|
|
1784
1821
|
}
|
|
1822
|
+
function changeCodexAccountBinding(providerID,modelID,accountID){if(!isHydrated){load().then(()=>changeCodexAccountBinding(providerID,modelID,accountID))
|
|
1823
|
+
return
|
|
1824
|
+
}
|
|
1825
|
+
if(!providerID||!modelID)
|
|
1826
|
+
return
|
|
1827
|
+
const key=JSON.stringify([providerID,modelID])
|
|
1828
|
+
setCodexAccountBindings((currentBindings)=>{const next={...currentBindings}
|
|
1829
|
+
if(accountID)
|
|
1830
|
+
next[key]=accountID
|
|
1831
|
+
else
|
|
1832
|
+
delete next[key]
|
|
1833
|
+
return next
|
|
1834
|
+
})
|
|
1835
|
+
update({user:{codexAccountBinding:{providerID,modelID,accountID}}})
|
|
1836
|
+
}
|
|
1785
1837
|
function toggleFavoriteMcpServer(name){if(!isHydrated){load().then(()=>toggleFavoriteMcpServer(name))
|
|
1786
1838
|
return
|
|
1787
1839
|
}
|
|
@@ -1852,7 +1904,13 @@ throw new Error("MCP preset no longer exists")
|
|
|
1852
1904
|
update({user:{workspaceProfile:{layout,mcp}}})
|
|
1853
1905
|
},favoriteSkills,favoriteMcpServers,favoriteQuickActions,toggleFavoriteMcpServer,toggleFavoriteQuickAction,recentSkills,recentQuickActions,mcpServerGroups,setMcpServerGroup(name,value){setMcpServerGroups(assignGroup(mcpServerGroups(),name,value))
|
|
1854
1906
|
update({user:{mcpServerGroup:{name,group:value}}})
|
|
1855
|
-
},skillGroups,setSkillGroup:changeSkillGroup,autoApprovePermissions,setAutoApprovePermissions:changeAutoApprovePermissions,async
|
|
1907
|
+
},skillGroups,setSkillGroup:changeSkillGroup,autoApprovePermissions,setAutoApprovePermissions:changeAutoApprovePermissions,codexAccountForModel:(providerID,modelID)=>codexAccountBindings()[JSON.stringify([providerID,modelID])],setCodexAccountBinding:changeCodexAccountBinding,pendingResetAttempt,async beginResetAttempt(attempt){await load()
|
|
1908
|
+
await store.update({user:{pendingResetAttempt:attempt}})
|
|
1909
|
+
const current=await store.load()
|
|
1910
|
+
setPendingResetAttempt(current.user.pendingResetAttempt)
|
|
1911
|
+
},async finishResetAttempt(idempotencyKey){await store.update({user:{clearPendingResetAttempt:idempotencyKey}})
|
|
1912
|
+
setPendingResetAttempt(undefined)
|
|
1913
|
+
},async recordSkillUse(skill){await load()
|
|
1856
1914
|
if(!skill.location)
|
|
1857
1915
|
return
|
|
1858
1916
|
setRecentSkills(parseRecentSkills([skill.location,...recentSkills()]))
|
|
@@ -2642,7 +2700,7 @@ value=`${Math.floor(seconds / 60)}m ${String(seconds % 60).padStart(2, "0")}s`
|
|
|
2642
2700
|
return value
|
|
2643
2701
|
}
|
|
2644
2702
|
function createSubagentClock(key){const [now,setNow]=createSignal9(Date.now())
|
|
2645
|
-
|
|
2703
|
+
createEffect5(()=>{if(key()===undefined)
|
|
2646
2704
|
return
|
|
2647
2705
|
setNow(Date.now())
|
|
2648
2706
|
const timer=setInterval(()=>setNow(Date.now()),1000)
|
|
@@ -3100,7 +3158,7 @@ unregister()
|
|
|
3100
3158
|
onMount(()=>{input?.focus()
|
|
3101
3159
|
refresh().catch(report)
|
|
3102
3160
|
})
|
|
3103
|
-
|
|
3161
|
+
createEffect6(()=>{if(!sameContext())
|
|
3104
3162
|
dialogs.close()
|
|
3105
3163
|
})
|
|
3106
3164
|
return{active,activeTab,activate,allErrors,byID,dialogs,errors,icons,loading,matches,prefix,query,queryScope,resultColors,results,selectTab,setBody(node){body=node
|
|
@@ -3337,7 +3395,7 @@ timers.add(timer)
|
|
|
3337
3395
|
}},{name:`${LEGACY_PLUGIN_ID}.search`,run(){props.api.keymap.dispatchCommand(SEARCH_COMMAND)
|
|
3338
3396
|
}}]
|
|
3339
3397
|
})
|
|
3340
|
-
|
|
3398
|
+
createEffect7(()=>{const key=props.preferences.searchKey()
|
|
3341
3399
|
const remove=props.api.keymap.registerLayer({mode:"base",bindings:[{key,cmd:SEARCH_COMMAND
|
|
3342
3400
|
}]
|
|
3343
3401
|
})
|
|
@@ -3351,18 +3409,6 @@ clearTimeout(timer)
|
|
|
3351
3409
|
return _$createElement("box")
|
|
3352
3410
|
}
|
|
3353
3411
|
|
|
3354
|
-
function createLayoutPresetPreview(preferences,name){const scope=preferences.selectedScopeKey()
|
|
3355
|
-
const valid=()=>preferences.selectedScopeKey()===scope
|
|
3356
|
-
const preset=createMemo2(()=>preferences.layoutPresets()[name])
|
|
3357
|
-
const preview=createMemo2(()=>{const value=preset()
|
|
3358
|
-
return value?preferences.previewLayoutPreset(value):undefined
|
|
3359
|
-
})
|
|
3360
|
-
return{valid,preview,scope:preferences.preferenceScopeLabel,blocked:()=>preset()?"":"Preset no longer exists.",apply(){const value=preset()
|
|
3361
|
-
if(!valid()||!value)
|
|
3362
|
-
return false
|
|
3363
|
-
preferences.applyLayoutPreset(value)
|
|
3364
|
-
return true
|
|
3365
|
-
}}}
|
|
3366
3412
|
function createMcpPresetPreview(controller,preferences,name){const target=controller.target()
|
|
3367
3413
|
const valid=()=>{const current=controller.target()
|
|
3368
3414
|
return current.key===target.key&¤t.scope===target.scope
|
|
@@ -3408,8 +3454,8 @@ function supportsTitleVisibility(api){return hostCapabilities(api).titleVisibili
|
|
|
3408
3454
|
function supportsPermissionMode(api){return hostCapabilities(api).permissionMode!==false
|
|
3409
3455
|
}
|
|
3410
3456
|
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."}]
|
|
3411
|
-
},{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."
|
|
3412
|
-
},{icon:"
|
|
3457
|
+
},{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."
|
|
3458
|
+
},{icon:"info",title:"Provider limits",description:"Link a matching Codex account for model quotas and confirmed banked resets."
|
|
3413
3459
|
}]
|
|
3414
3460
|
},{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."
|
|
3415
3461
|
},{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."
|
|
@@ -3805,7 +3851,7 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
3805
3851
|
}]
|
|
3806
3852
|
})
|
|
3807
3853
|
onCleanup9(unregister)
|
|
3808
|
-
|
|
3854
|
+
createEffect8(()=>{if(!props.valid())
|
|
3809
3855
|
dialogs.close()
|
|
3810
3856
|
})
|
|
3811
3857
|
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
@@ -3979,55 +4025,6 @@ const description=row.desired?{missing:`Not available in this workspace \xB7 tar
|
|
|
3979
4025
|
return{icon:icons.icon("mcp"),title:row.name,description,changed:row.change==="connect"||row.change==="disconnect",skipped:row.change==="missing"||row.change==="unavailable",status:row.change==="connect"||row.change==="disconnect"?"changed":row.change==="missing"||row.change==="unavailable"?"skipped":"unchanged",statusIcon:row.change==="connect"?"connected":row.change==="disconnect"?"disconnected":row.change==="missing"||row.change==="unavailable"?"pending":"done",statusLabel:row.change==="connect"?"CONNECT":row.change==="disconnect"?"DISCONNECT":row.change==="missing"||row.change==="unavailable"?"SKIPPED":"UNCHANGED"
|
|
3980
4026
|
}}).sort((a,b)=>Number(b.changed)-Number(a.changed)||Number(b.skipped)-Number(a.skipped))
|
|
3981
4027
|
}
|
|
3982
|
-
function LayoutPresetPreview(props){const dialogs=useDialogs(props.api)
|
|
3983
|
-
const icons=useIcons()
|
|
3984
|
-
const model=createLayoutPresetPreview(props.preferences,props.name)
|
|
3985
|
-
const linked=props.preferences.workspaceProfiles?.()[props.name]
|
|
3986
|
-
const mcpModel=props.controller&&linked?createMcpPresetPreview(props.controller,props.preferences,linked):undefined
|
|
3987
|
-
const rows=createMemo4(()=>model.preview()?.rows.map((row)=>{const changes=[]
|
|
3988
|
-
if(row.visibility[0]!==row.visibility[1])
|
|
3989
|
-
changes.push(`${row.visibility[0] ? "visible" : "hidden"} -> ${row.visibility[1] ? "visible" : "hidden"}`)
|
|
3990
|
-
if(row.expansion[0]!==row.expansion[1])
|
|
3991
|
-
changes.push(`${row.expansion[0] ? "expanded" : "collapsed"} -> ${row.expansion[1] ? "expanded" : "collapsed"}`)
|
|
3992
|
-
if(row.position[0]!==row.position[1])
|
|
3993
|
-
changes.push(`position ${row.position[0]} -> ${row.position[1]}`)
|
|
3994
|
-
return{icon:icons.section(row.section),title:`${row.position[1]}. ${SECTION_DEFINITIONS.find((section) => section.name === row.section).label}`,description:changes.join(" \xB7 ")||"No changes",changed:changes.length>0,status:changes.length>0?"changed":"unchanged",statusIcon:changes.length>0?"edit":"done",statusLabel:changes.length>0?"CHANGED":"UNCHANGED"
|
|
3995
|
-
}}).sort((a,b)=>Number(b.changed)-Number(a.changed))??[])
|
|
3996
|
-
const mcpRows=createMemo4(()=>mcpModel?mcpPreviewRows(mcpModel,icons):[])
|
|
3997
|
-
const changed=()=>rows().filter((row)=>row.changed).length
|
|
3998
|
-
onMount3(()=>mcpModel?.refresh())
|
|
3999
|
-
return _$createComponent(PresetPreviewFrame,{get api(){return props.api
|
|
4000
|
-
},get title(){return `${mcpModel ? "Workspace profile" : "Layout preview"}: ${props.name}`
|
|
4001
|
-
},get scope(){return mcpModel?`${model.scope()} \xB7 MCP ${mcpModel.scope}`:model.scope()
|
|
4002
|
-
},get stats(){return [{icon:"edit",label:`${changed()} layout changed`,tone:"accent"
|
|
4003
|
-
},{icon:"done",label:`${rows().length - changed()} layout unchanged`,tone:"muted"
|
|
4004
|
-
}]
|
|
4005
|
-
},get rowCount(){return rows().length + mcpRows().length
|
|
4006
|
-
},valid:()=>model.valid()&&(!mcpModel||mcpModel.valid()),get blocked(){return model.blocked()||mcpModel?.blocked()
|
|
4007
|
-
},get onRefresh(){return mcpModel?.refresh
|
|
4008
|
-
},notice:mcpModel?"Applies both presets; layout stays session-only.":"Applies layout changes. Save current layout as default to persist them.",onApply:()=>{const request=mcpModel?.apply()
|
|
4009
|
-
if(mcpModel&&!request)
|
|
4010
|
-
return
|
|
4011
|
-
if(!model.apply())
|
|
4012
|
-
return
|
|
4013
|
-
if(mcpModel)
|
|
4014
|
-
dialogs.close()
|
|
4015
|
-
else{dialogs.back()
|
|
4016
|
-
dialogs.back()
|
|
4017
|
-
}
|
|
4018
|
-
props.api.ui.toast({variant:"success",title:mcpModel?"Workspace profile":"Layout presets",message:`${props.name} applied to ${model.scope()}`,duration:3000
|
|
4019
|
-
})
|
|
4020
|
-
if(request)
|
|
4021
|
-
reportMcpApplyError(props.api,request)
|
|
4022
|
-
},get children(){return [_$createComponent(For8,{get each(){return rows()
|
|
4023
|
-
},children:(row)=>_$createComponent(PresetPreviewRow,_$mergeProps({get api(){return props.api
|
|
4024
|
-
}},row))
|
|
4025
|
-
}),_$createComponent(For8,{get each(){return mcpRows()
|
|
4026
|
-
},children:(row)=>_$createComponent(PresetPreviewRow,_$mergeProps({get api(){return props.api
|
|
4027
|
-
}},row))
|
|
4028
|
-
})]
|
|
4029
|
-
}})
|
|
4030
|
-
}
|
|
4031
4028
|
|
|
4032
4029
|
|
|
4033
4030
|
|
|
@@ -4057,7 +4054,7 @@ if(renameFrom)
|
|
|
4057
4054
|
dialogs.back()
|
|
4058
4055
|
}})
|
|
4059
4056
|
}
|
|
4060
|
-
function actions(name){dialogs.open(()=>_$createComponent(
|
|
4057
|
+
function actions(name){dialogs.open(()=>_$createComponent(SelectionMenu,{api,title:name,options:[{title:"Preview & apply",value:"apply",description:"review server changes before applying",icon:"info"
|
|
4061
4058
|
},{title:"Update from current",value:"update",description:"replace the saved states",icon:"save"
|
|
4062
4059
|
},{title:"Rename",value:"rename",description:"change the preset name",icon:"edit"
|
|
4063
4060
|
},{title:"Delete",value:"delete",description:"remove this preset",icon:"delete"
|
|
@@ -4089,7 +4086,7 @@ notify(`Deleted ${name}`)
|
|
|
4089
4086
|
dialogs.back()
|
|
4090
4087
|
}}))
|
|
4091
4088
|
}
|
|
4092
|
-
dialogs.open(()=>_$createComponent(
|
|
4089
|
+
dialogs.open(()=>_$createComponent(SelectionMenu,{api,title:"MCP presets",get options(){return [{title:"Save current",value:"save",description:"Create a preset from the current server states",icon:"save"
|
|
4093
4090
|
},...Object.entries(preferences.mcpPresets()).map(([name,states])=>({title:name,value:`preset:${name}`,icon:"presets",description:`${Object.values(states).filter((state) => state === "enabled").length}/${Object.keys(states).length} enabled`
|
|
4094
4091
|
}))]
|
|
4095
4092
|
},onSelect:(option)=>option.value==="save"?prompt():actions(option.value.slice("preset:".length))
|
|
@@ -4122,61 +4119,6 @@ dialogs.open(()=>_$createComponent(PresetMenu,{api,title:"MCP presets",get optio
|
|
|
4122
4119
|
|
|
4123
4120
|
|
|
4124
4121
|
|
|
4125
|
-
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
function createLayoutPresetActions(input){function prompt(value="",renameFrom){input.dialogs.prompt({title:renameFrom?"Rename layout preset":"Save layout preset",description:()=>(()=>{var _el$=_$createElement("text")
|
|
4132
|
-
_$insertNode(_el$,_$createTextNode(`Save the current visible, expanded, and ordered sections.`))
|
|
4133
|
-
_$effect((_$p)=>_$setProp(_el$,"fg",input.api.theme.current.textMuted,_$p))
|
|
4134
|
-
return _el$
|
|
4135
|
-
})(),placeholder:"Preset name",value,onConfirm(nameInput){const name=renameFrom?input.preferences.renameLayoutPreset(renameFrom,nameInput):input.preferences.saveLayoutPreset(nameInput)
|
|
4136
|
-
input.dialogs.back()
|
|
4137
|
-
if(renameFrom)
|
|
4138
|
-
input.dialogs.back()
|
|
4139
|
-
input.api.ui.toast({variant:"success",title:"Layout presets",message:renameFrom?`Renamed to ${name}`:`Saved ${name}`,duration:3000
|
|
4140
|
-
})
|
|
4141
|
-
}})
|
|
4142
|
-
}
|
|
4143
|
-
function open(name){const linked=input.preferences.workspaceProfiles?.()[name]
|
|
4144
|
-
const link=()=>input.dialogs.prompt({title:`Link MCP \xB7 ${name}`,placeholder:"Preset; empty unlinks",value:linked??"",onConfirm(value){input.preferences.linkWorkspaceProfile?.(name,value.trim()||undefined)
|
|
4145
|
-
input.dialogs.back()
|
|
4146
|
-
input.dialogs.back()
|
|
4147
|
-
}})
|
|
4148
|
-
input.dialogs.open(()=>_$createComponent(PresetMenu,{get api(){return input.api
|
|
4149
|
-
},title:name,get options(){return [{title:"Preview & apply",value:"apply",icon:"info",description:linked?`profile \xB7 ${linked}`:"review layout changes"
|
|
4150
|
-
},{title:"Update from current",value:"update",icon:"save",description:"replace saved layout"
|
|
4151
|
-
},{title:"Rename\u2026",value:"rename",description:"change preset name",icon:"edit"
|
|
4152
|
-
},...input.mcp?[{title:linked?"Change MCP link\u2026":"Link MCP preset\u2026",value:"link",icon:"mcp",description:linked?`${linked} \xB7 empty unlinks`:"pair layout and MCP"
|
|
4153
|
-
}]:[],{title:"Delete",value:"delete",description:"remove preset",icon:"delete"
|
|
4154
|
-
}]
|
|
4155
|
-
},onSelect:(option)=>{switch(option.value){case "apply":{input.dialogs.open(()=>_$createComponent(LayoutPresetPreview,{get api(){return input.api
|
|
4156
|
-
},get preferences(){return input.preferences
|
|
4157
|
-
},get controller(){return input.mcp
|
|
4158
|
-
},name
|
|
4159
|
-
}),"large")
|
|
4160
|
-
break
|
|
4161
|
-
}
|
|
4162
|
-
case "update":{input.preferences.updateLayoutPreset(name)
|
|
4163
|
-
input.dialogs.back()
|
|
4164
|
-
input.api.ui.toast({variant:"success",title:"Layout presets",message:`Updated ${name}`,duration:3000
|
|
4165
|
-
})
|
|
4166
|
-
break
|
|
4167
|
-
}
|
|
4168
|
-
case "rename":{prompt(name,name)
|
|
4169
|
-
break
|
|
4170
|
-
}
|
|
4171
|
-
case "link":{link()
|
|
4172
|
-
break
|
|
4173
|
-
}
|
|
4174
|
-
default:{input.preferences.deleteLayoutPreset(name)
|
|
4175
|
-
input.dialogs.back()
|
|
4176
|
-
}}}}))
|
|
4177
|
-
}
|
|
4178
|
-
return{open,prompt
|
|
4179
|
-
}}
|
|
4180
4122
|
|
|
4181
4123
|
function titleVisibilityOptions(api,preferences,icons){if(!supportsTitleVisibility(api))
|
|
4182
4124
|
return []
|
|
@@ -4245,25 +4187,6 @@ input.openLimitPrompt(section)
|
|
|
4245
4187
|
|
|
4246
4188
|
|
|
4247
4189
|
|
|
4248
|
-
|
|
4249
|
-
|
|
4250
|
-
var RESET_ALL="__reset_all__"
|
|
4251
|
-
function TrustedSkillsDialog(props){const options=createMemo8(()=>{const locations=props.preferences.trustedSkillLocations()
|
|
4252
|
-
if(locations.length===0)
|
|
4253
|
-
return [{title:"Every skill requires confirmation",value:"empty",description:"No trusted skills",icon:"info"
|
|
4254
|
-
}]
|
|
4255
|
-
return [{title:"Require confirmation for all",value:RESET_ALL,description:`Revoke trust for ${locations.length} skill${locations.length === 1 ? "" : "s"}`,icon:"reset"
|
|
4256
|
-
},...locations.map((location)=>({title:location.split("/").at(-2)??location,value:location,description:location,icon:"checked"
|
|
4257
|
-
}))]
|
|
4258
|
-
})
|
|
4259
|
-
return _$createComponent(PresetMenu,{get api(){return props.api
|
|
4260
|
-
},title:"Trusted skills",get options(){return options()
|
|
4261
|
-
},onSelect:(option)=>{if(option.value===RESET_ALL)
|
|
4262
|
-
props.preferences.resetSkillConfirmations()
|
|
4263
|
-
else if(option.value!=="empty")
|
|
4264
|
-
props.preferences.revokeSkillConfirmation(option.value)
|
|
4265
|
-
}})
|
|
4266
|
-
}
|
|
4267
4190
|
function createSettingsSelection(input){const dialogClosed=()=>("open" in input.api.ui.dialog)&&!input.api.ui.dialog.open
|
|
4268
4191
|
function openLimitPrompt(section){const index=input.options().findIndex((option)=>option.value===section)
|
|
4269
4192
|
if(index!==-1)
|
|
@@ -4299,36 +4222,11 @@ function exportSettings(){const copied=input.api.renderer.copyToClipboardOSC52(i
|
|
|
4299
4222
|
input.api.ui.toast({variant:copied?"success":"warning",title:"Portable settings",message:copied?"Layout and MCP settings copied as JSON":"Terminal clipboard is unavailable",duration:4000
|
|
4300
4223
|
})
|
|
4301
4224
|
}
|
|
4302
|
-
function importSettings(){
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
})
|
|
4307
|
-
const options=[...preview.settings.layout?[{title:`Layout \xB7 ${preview.layoutChanged ? "CHANGED" : "UNCHANGED"}`,value:"status",description:`${Object.keys(preview.settings.layout.sections).length} visibility \xB7 ${Object.keys(preview.settings.layout.expanded).length} expansion values`,icon:preview.layoutChanged?"edit":"done"
|
|
4308
|
-
}]:[],...preview.settings.mcp?[{title:`MCP \xB7 ${preview.mcpChanged ? "CHANGED" : "UNCHANGED"}`,value:"status",description:`${Object.keys(preview.settings.mcp).length} remembered server states`,icon:preview.mcpChanged?"edit":"done"
|
|
4309
|
-
}]:[],...preview.unsupported.map((path)=>({title:"Unsupported field \xB7 SKIPPED",value:"status",description:path,icon:"error"
|
|
4310
|
-
})),...preview.layoutChanged||preview.mcpChanged?[{title:"Apply imported settings",value:"apply",description:preview.target,icon:"done"
|
|
4311
|
-
}]:[],{title:"Cancel",value:"cancel",description:"return without changes",icon:"close"
|
|
4312
|
-
}]
|
|
4313
|
-
let applying=false
|
|
4314
|
-
async function apply(){applying=true
|
|
4315
|
-
try{await input.preferences.applyPortableSettings(preview)
|
|
4316
|
-
input.api.ui.toast({variant:"success",title:"Portable settings",message:"Layout and MCP settings imported",duration:3000
|
|
4317
|
-
})
|
|
4318
|
-
input.dialogs.back()
|
|
4319
|
-
} catch(error){applying=false
|
|
4320
|
-
input.api.ui.toast({variant:"error",title:"Portable settings",message:error instanceof Error?error.message:"Could not import settings",duration:5000
|
|
4321
|
-
})
|
|
4322
|
-
}}
|
|
4323
|
-
input.dialogs.replace(()=>_$createComponent(PresetMenu,{get api(){return input.api
|
|
4324
|
-
},title:"Settings import preview",options,get height(){return Math.min(options.length*3,18)
|
|
4325
|
-
},onSelect:(option)=>{if(option.value==="cancel")
|
|
4326
|
-
input.dialogs.back()
|
|
4327
|
-
if(option.value!=="apply"||applying)
|
|
4328
|
-
return
|
|
4329
|
-
apply()
|
|
4330
|
-
}}))
|
|
4331
|
-
}})
|
|
4225
|
+
function importSettings(){const path=import.meta.url.includes("/dist/tui.js")?"./settings-import.js":"../ui/settings-import-dialog"
|
|
4226
|
+
import(path).then((module)=>{if(!dialogClosed())
|
|
4227
|
+
module.openSettingsImport(input)
|
|
4228
|
+
}).catch((error)=>input.api.ui.toast({variant:"error",title:"Portable settings",message:String(error)
|
|
4229
|
+
}))
|
|
4332
4230
|
}
|
|
4333
4231
|
function select(value=input.options()[input.active()]?.value){if(!value)
|
|
4334
4232
|
return
|
|
@@ -4399,9 +4297,16 @@ break
|
|
|
4399
4297
|
case "reset_mcp":{input.preferences.resetMcpStates()
|
|
4400
4298
|
break
|
|
4401
4299
|
}
|
|
4402
|
-
case "trusted_skills":{
|
|
4300
|
+
case "trusted_skills":{const path=import.meta.url.includes("/dist/tui.js")?"./trusted-skills.js":"../ui/trusted-skills-dialog"
|
|
4301
|
+
import(path).then((module)=>{if(dialogClosed())
|
|
4302
|
+
return
|
|
4303
|
+
const{TrustedSkillsDialog
|
|
4304
|
+
}=module
|
|
4305
|
+
input.dialogs.open(()=>_$createComponent(TrustedSkillsDialog,{get api(){return input.api
|
|
4403
4306
|
},get preferences(){return input.preferences
|
|
4404
4307
|
}}))
|
|
4308
|
+
}).catch((error)=>input.api.ui.toast({variant:"error",title:"Trusted skills",message:String(error)
|
|
4309
|
+
}))
|
|
4405
4310
|
break
|
|
4406
4311
|
}
|
|
4407
4312
|
case "wizard":{input.dialogs.open(()=>_$createComponent(FirstRunWizard,{get api(){return input.api
|
|
@@ -4464,19 +4369,19 @@ const icons=useIcons()
|
|
|
4464
4369
|
const dialogs=useDialogs(props.api)
|
|
4465
4370
|
const scroll=useDialogScroll()
|
|
4466
4371
|
const dimensions=useTerminalDimensions6()
|
|
4467
|
-
const bodyHeight=
|
|
4372
|
+
const bodyHeight=createMemo8(()=>Math.max(4,Math.floor(dimensions().height*0.75)-10))
|
|
4468
4373
|
const orderedGroups=createSettingsGroups(props.api,props.preferences,icons)
|
|
4469
4374
|
const initialGroup=orderedGroups().find((group)=>group.options.some((option)=>option.value===props.activeValue))
|
|
4470
4375
|
const [activeGroup,setActiveGroup]=useDialogState("tab",initialGroup?.id??orderedGroups()[0].id)
|
|
4471
|
-
const options=
|
|
4376
|
+
const options=createMemo8(()=>orderedGroups().find((group)=>group.id===activeGroup())?.options??[])
|
|
4472
4377
|
const optionId=(value)=>`${PLUGIN_ID}.settings.${value}`
|
|
4473
4378
|
const initialActive=options().findIndex((option)=>option.value===props.activeValue)
|
|
4474
4379
|
const [active,setActive]=useDialogState("selection",Math.max(0,initialActive))
|
|
4475
|
-
|
|
4380
|
+
createEffect11(()=>{if(active()>=options().length)
|
|
4476
4381
|
setActive(Math.max(0,options().length-1))
|
|
4477
4382
|
})
|
|
4478
|
-
const contentHeight=
|
|
4479
|
-
const footerHint=
|
|
4383
|
+
const contentHeight=createMemo8(()=>Math.min(bodyHeight(),Math.max(1,options().length*2-1)))
|
|
4384
|
+
const footerHint=createMemo8(()=>{const common=`${icons.key("tab")} switch \xB7 ${icons.key("up/down")} navigate`
|
|
4480
4385
|
if(activeGroup()==="sections")
|
|
4481
4386
|
return `${common} \xB7 ${icons.key("enter")} toggle \xB7 l item limit${options()[active()]?.value === "quick_actions" ? " \xB7 a actions" : ""}${["mcp", "skills"].includes(options()[active()]?.value ?? "") ? " \xB7 g groups" : ""} \xB7 ${icons.key("left/right")} or ${icons.key("shift+up/down")} reorder`
|
|
4482
4387
|
if(activeGroup()==="presets")
|
|
@@ -4517,9 +4422,20 @@ setActive(next)
|
|
|
4517
4422
|
body?.scrollChildIntoView(optionId(value))
|
|
4518
4423
|
})
|
|
4519
4424
|
}
|
|
4520
|
-
const
|
|
4425
|
+
function runPresetAction(action,name){const path=import.meta.url.includes("/dist/tui.js")?"./layout-preset-actions.js":"./layout-preset-actions"
|
|
4426
|
+
import(path).then((module)=>{if("open" in props.api.ui.dialog&&!props.api.ui.dialog.open)
|
|
4427
|
+
return
|
|
4428
|
+
const factory=module.createLayoutPresetActions
|
|
4429
|
+
const actions=factory({api:props.api,preferences:props.preferences,mcp:props.mcp,dialogs
|
|
4521
4430
|
})
|
|
4522
|
-
|
|
4431
|
+
if(action==="open"&&name)
|
|
4432
|
+
actions.open(name)
|
|
4433
|
+
else
|
|
4434
|
+
actions.prompt()
|
|
4435
|
+
}).catch((error)=>props.api.ui.toast({variant:"error",title:"Layout presets",message:String(error)
|
|
4436
|
+
}))
|
|
4437
|
+
}
|
|
4438
|
+
const selection=createSettingsSelection({api:props.api,preferences:props.preferences,mcp:props.mcp,skills:props.skills,dialogs,options,active,setActive,openPreset:(name)=>runPresetAction("open",name),promptPreset:()=>runPresetAction("prompt")
|
|
4523
4439
|
})
|
|
4524
4440
|
const unregister=registerSettingsKeymap({api:props.api,active,activeGroup,options,move,switchGroup,reorder,select:selection.select,openQuickActions:selection.openQuickActions,openMcpGroups:selection.openMcpGroups,openSkillGroups:selection.openSkillGroups,openLimitPrompt:selection.openLimitPrompt
|
|
4525
4441
|
})
|
|
@@ -4714,7 +4630,7 @@ return title.startsWith("Enable auto-approve permissions")?false:undefined
|
|
|
4714
4630
|
}
|
|
4715
4631
|
function PermissionModeBinding(props){let applying=false
|
|
4716
4632
|
let observed
|
|
4717
|
-
|
|
4633
|
+
createEffect12(()=>{if(!props.preferences.ready())
|
|
4718
4634
|
return
|
|
4719
4635
|
const preferred=props.preferences.autoApprovePermissions()
|
|
4720
4636
|
const current=currentPermissionMode(props.api)
|
|
@@ -4750,6 +4666,8 @@ return _$createComponent(IconControl,{id:`${PLUGIN_ID}.settings.footer`,get icon
|
|
|
4750
4666
|
},onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),onMouseUp:()=>openSettings(props.api,props.preferences,undefined,props.mcp,props.skills)
|
|
4751
4667
|
})
|
|
4752
4668
|
}
|
|
4669
|
+
|
|
4670
|
+
|
|
4753
4671
|
import {realpathSync} from "fs"
|
|
4754
4672
|
function routeKey(api){const route=api.route.current
|
|
4755
4673
|
return `${route.name}:${"params" in route ? route.params?.sessionID ?? "" : ""}`
|
|
@@ -4813,7 +4731,7 @@ queueMicrotask(()=>void props.controller.start())
|
|
|
4813
4731
|
})
|
|
4814
4732
|
onCleanup14(unregister)
|
|
4815
4733
|
} else
|
|
4816
|
-
|
|
4734
|
+
createEffect13(()=>{if(!props.controller.enabled())
|
|
4817
4735
|
return
|
|
4818
4736
|
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()
|
|
4819
4737
|
}]
|
|
@@ -5111,7 +5029,7 @@ return !needle||values.some((value)=>value?.toLocaleLowerCase().includes(needle)
|
|
|
5111
5029
|
|
|
5112
5030
|
function position(descriptor){return typeof descriptor.position==="function"?descriptor.position():descriptor.position
|
|
5113
5031
|
}
|
|
5114
|
-
var SECTION_COMMANDS=[{section:"todo",title:"Focus Todo"},{section:"subagents",title:"Focus Subagents"},{section:"skills",title:"Focus Skills"},{section:"quick_actions",title:"Focus Quick Actions"},{section:"lsp",title:"Focus LSP"},{section:"mcp",title:"Focus MCP"}]
|
|
5032
|
+
var SECTION_COMMANDS=[{section:"limits",title:"Focus Limits"},{section:"todo",title:"Focus Todo"},{section:"subagents",title:"Focus Subagents"},{section:"skills",title:"Focus Skills"},{section:"quick_actions",title:"Focus Quick Actions"},{section:"lsp",title:"Focus LSP"},{section:"mcp",title:"Focus MCP"}]
|
|
5115
5033
|
function belongsTo(renderable,ancestor){if(!renderable||!ancestor)
|
|
5116
5034
|
return false
|
|
5117
5035
|
for(let current=renderable;current; current=current.parent){if(current===ancestor)
|
|
@@ -5550,7 +5468,7 @@ const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`sect
|
|
|
5550
5468
|
const action=props.headerAction?useSidebarItem(props.api,props.interaction,{id:props.headerAction.id,position:()=>({section:props.navigationSection??0,row:0,column:1
|
|
5551
5469
|
}),disabled:props.headerAction.disabled,activate:props.headerAction.onActivate
|
|
5552
5470
|
},()=>theme().accent,"control"):undefined
|
|
5553
|
-
|
|
5471
|
+
createEffect14(()=>{props.headerAction?.label()
|
|
5554
5472
|
setActionWidth(undefined)
|
|
5555
5473
|
})
|
|
5556
5474
|
const actionLabel=()=>{const label=props.headerAction?.label()??""
|
|
@@ -5808,7 +5726,7 @@ const item=useSidebarItem(props.api,props.interaction,{id:id(),position:()=>prop
|
|
|
5808
5726
|
})
|
|
5809
5727
|
return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return id()
|
|
5810
5728
|
},height:1,get marginTop(){return props.marginTop
|
|
5811
|
-
},flexDirection:"row",justifyContent:"space-between",gap:1,get backgroundColor(){return item.backgroundColor()
|
|
5729
|
+
},flexDirection:"row",justifyContent:"space-between",gap:1,paddingRight:1,get backgroundColor(){return item.backgroundColor()
|
|
5812
5730
|
},get onMouseOver(){return item.onMouseOver
|
|
5813
5731
|
},get onMouseOut(){return item.onMouseOut
|
|
5814
5732
|
},onMouseUp:(event)=>{event.stopPropagation()
|
|
@@ -5905,25 +5823,70 @@ return _el$8
|
|
|
5905
5823
|
return _el$5
|
|
5906
5824
|
})()
|
|
5907
5825
|
}
|
|
5908
|
-
|
|
5909
|
-
|
|
5910
|
-
|
|
5826
|
+
|
|
5827
|
+
|
|
5828
|
+
|
|
5829
|
+
function createSidebarBookmark(input){const{api,interaction,row,position,favorite,disabled,onToggle
|
|
5830
|
+
}=input
|
|
5831
|
+
const id=`${input.id}.favorite`
|
|
5832
|
+
const [rowHovered,setRowHovered]=createSignal23(false)
|
|
5833
|
+
const [controlHovered,setControlHovered]=createSignal23(false)
|
|
5834
|
+
const control=useSidebarItem(api,interaction,{id,position:()=>({...position(),column:0
|
|
5835
|
+
}),disabled,activate:()=>{onToggle()
|
|
5836
|
+
queueMicrotask(()=>interaction?.select(id))
|
|
5837
|
+
}},()=>api.theme.current.warning,"control")
|
|
5838
|
+
const visible=()=>favorite()||row.focused()||control.focused()||rowHovered()||controlHovered()
|
|
5839
|
+
return{onRowOver:()=>{row.onMouseOver()
|
|
5840
|
+
setRowHovered(true)
|
|
5841
|
+
},onRowOut:()=>{row.onMouseOut()
|
|
5842
|
+
setRowHovered(false)
|
|
5843
|
+
},render:()=>_$createComponent(BookmarkControl,{ref:(node)=>control.ref(node),id,get bookmarked(){return favorite()
|
|
5844
|
+
},visible,get backgroundColor(){return _$memo(()=>control.backgroundColor()==="transparent")()?row.backgroundColor():control.backgroundColor()
|
|
5845
|
+
},get foregroundColor(){return _$memo(()=>!!row.focused())()?row.foregroundColor():control.foregroundColor()
|
|
5846
|
+
},onMouseOver:()=>{control.onMouseOver()
|
|
5847
|
+
setControlHovered(true)
|
|
5848
|
+
},onMouseOut:()=>{control.onMouseOut()
|
|
5849
|
+
setControlHovered(false)
|
|
5850
|
+
},onMouseUp:(event)=>control.activate(event)
|
|
5851
|
+
})
|
|
5852
|
+
}}
|
|
5853
|
+
|
|
5854
|
+
|
|
5855
|
+
|
|
5856
|
+
|
|
5857
|
+
|
|
5858
|
+
|
|
5859
|
+
var Context=createContext3()
|
|
5860
|
+
function useSidebarList(){const value=useContext3(Context)
|
|
5861
|
+
if(!value)
|
|
5862
|
+
throw new Error("No sidebar list")
|
|
5863
|
+
return value
|
|
5864
|
+
}
|
|
5865
|
+
function SidebarRowList(props){return _$createComponent(Context.Provider,{get value(){return{api:props.api,interaction:props.interaction,grouped:props.grouped??(()=>false)
|
|
5866
|
+
}},get children(){var _el$=_$createElement("box")
|
|
5867
|
+
_$insert(_el$,()=>props.children)
|
|
5868
|
+
_$effect((_$p)=>_$setProp(_el$,"gap",props.density==="comfortable"?1:0,_$p))
|
|
5869
|
+
return _el$
|
|
5870
|
+
}})
|
|
5871
|
+
}
|
|
5872
|
+
function McpRow(props){const{api,interaction,grouped
|
|
5873
|
+
}=useSidebarList()
|
|
5874
|
+
const icons=useIcons()
|
|
5875
|
+
const dialogs=useDialogs(api)
|
|
5876
|
+
const theme=()=>api.theme.current
|
|
5911
5877
|
const busy=()=>props.state.status==="loading"||props.state.status==="refreshing"
|
|
5912
5878
|
const error=()=>props.state.error
|
|
5913
5879
|
const disabled=()=>props.disabled||busy()
|
|
5914
5880
|
const id=()=>`${PLUGIN_ID}.mcp.${props.item.name}`
|
|
5915
|
-
const row=useSidebarItem(
|
|
5881
|
+
const row=useSidebarItem(api,interaction,{id:id(),position:()=>({...props.position,column:1
|
|
5916
5882
|
}),disabled,activate:props.onToggle
|
|
5917
5883
|
})
|
|
5918
|
-
const bookmark=
|
|
5919
|
-
})
|
|
5920
|
-
|
|
5921
|
-
}},()=>theme().warning,"control")
|
|
5922
|
-
const info=useSidebarItem(props.api,props.interaction,{id:`${id()}.info`,position:()=>({...props.position,column:1
|
|
5884
|
+
const bookmark=createSidebarBookmark({api,interaction,id:id(),position:()=>props.position,row,favorite:()=>props.favorite,disabled:()=>props.favoriteDisabled,onToggle:props.onToggleFavorite
|
|
5885
|
+
})
|
|
5886
|
+
const info=useSidebarItem(api,interaction,{id:`${id()}.info`,position:()=>({...props.position,column:2
|
|
5923
5887
|
}),activate:()=>{if(!props.item.error)
|
|
5924
5888
|
return
|
|
5925
|
-
dialogs.open(()=>_$createComponent(McpErrorDialog,{get
|
|
5926
|
-
},get name(){return props.item.name
|
|
5889
|
+
dialogs.open(()=>_$createComponent(McpErrorDialog,{api,get name(){return props.item.name
|
|
5927
5890
|
},get status(){return props.item.status
|
|
5928
5891
|
},get error(){return props.item.error
|
|
5929
5892
|
}}),"medium")
|
|
@@ -5931,12 +5894,14 @@ dialogs.open(()=>_$createComponent(McpErrorDialog,{get api(){return props.api
|
|
|
5931
5894
|
const nestedBackground=(background)=>background==="transparent"?row.backgroundColor():background
|
|
5932
5895
|
return _$createComponent(ListRow,{ref:(node)=>row.ref(node),get id(){return id()
|
|
5933
5896
|
},get backgroundColor(){return row.backgroundColor()
|
|
5934
|
-
},
|
|
5897
|
+
},get paddingLeft(){return grouped()?0:1
|
|
5898
|
+
},paddingRight:1,contentGap:0,get paddingTop(){return error()?1:0
|
|
5935
5899
|
},get paddingBottom(){return error()?1:0
|
|
5936
5900
|
},get marginTop(){return props.separator?1:0
|
|
5937
|
-
},get onMouseOver(){return
|
|
5938
|
-
},get onMouseOut(){return
|
|
5939
|
-
},onMouseDown:(event)=>row.activate(event),get
|
|
5901
|
+
},get onMouseOver(){return bookmark.onRowOver
|
|
5902
|
+
},get onMouseOut(){return bookmark.onRowOut
|
|
5903
|
+
},onMouseDown:(event)=>row.activate(event),get leading(){return bookmark.render()
|
|
5904
|
+
},get content(){return(()=>{var _el$=_$createElement("text")
|
|
5940
5905
|
_$setProp(_el$,"flexGrow",1)
|
|
5941
5906
|
_$setProp(_el$,"wrapMode","none")
|
|
5942
5907
|
_$insert(_el$,()=>props.item.name)
|
|
@@ -5948,8 +5913,6 @@ _$insertNode(_el$2,_el$3)
|
|
|
5948
5913
|
_$setProp(_el$2,"flexDirection","row")
|
|
5949
5914
|
_$setProp(_el$2,"flexShrink",0)
|
|
5950
5915
|
_$setProp(_el$2,"gap",1)
|
|
5951
|
-
_$insertNode(_el$3,_el$4)
|
|
5952
|
-
_$insert(_el$4,()=>icons.icon(mcpToggle(props.item.status,busy())))
|
|
5953
5916
|
_$insert(_el$2,(()=>{var _c$=_$memo(()=>!!props.item.error)
|
|
5954
5917
|
return()=>_c$()?_$createComponent(IconControl,{ref:(node)=>info.ref(node),get id(){return `${id()}.info`
|
|
5955
5918
|
},get icon(){return icons.icon("info")
|
|
@@ -5959,21 +5922,13 @@ return()=>_c$()?_$createComponent(IconControl,{ref:(node)=>info.ref(node),get id
|
|
|
5959
5922
|
},get onMouseOut(){return info.onMouseOut
|
|
5960
5923
|
},onMouseUp:(event)=>info.activate(event)
|
|
5961
5924
|
}):null
|
|
5962
|
-
})(),
|
|
5963
|
-
_$
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
},get foregroundColor(){return _$memo(()=>!!row.focused())()?row.foregroundColor():bookmark.foregroundColor()
|
|
5967
|
-
},get onMouseOver(){return bookmark.onMouseOver
|
|
5968
|
-
},get onMouseOut(){return bookmark.onMouseOut
|
|
5969
|
-
},onMouseUp:(event)=>bookmark.activate(event)
|
|
5970
|
-
}),null)
|
|
5971
|
-
_$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():mcpColor(props.api,props.item.status),_$p))
|
|
5925
|
+
})(),_el$3)
|
|
5926
|
+
_$insertNode(_el$3,_el$4)
|
|
5927
|
+
_$insert(_el$4,()=>icons.icon(mcpToggle(props.item.status,busy())))
|
|
5928
|
+
_$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():mcpColor(api,props.item.status),_$p))
|
|
5972
5929
|
return _el$2
|
|
5973
5930
|
})()
|
|
5974
|
-
},get details(){return _$createComponent(RequestErrorRow,{get
|
|
5975
|
-
},get interaction(){return props.interaction
|
|
5976
|
-
},get id(){return `${id()}.retry`
|
|
5931
|
+
},get details(){return _$createComponent(RequestErrorRow,{api,interaction,get id(){return `${id()}.retry`
|
|
5977
5932
|
},get position(){return{...props.position,row:props.position.row + 1,column:0
|
|
5978
5933
|
}},get state(){return props.state
|
|
5979
5934
|
},get onRetry(){return props.onRetry
|
|
@@ -5991,7 +5946,7 @@ return _el$2
|
|
|
5991
5946
|
function SectionFilter(props){const icons=useIcons()
|
|
5992
5947
|
let input
|
|
5993
5948
|
let unregisterInput
|
|
5994
|
-
const [inputFocused,setInputFocused]=
|
|
5949
|
+
const [inputFocused,setInputFocused]=createSignal24(false)
|
|
5995
5950
|
const theme=()=>props.api.theme.current
|
|
5996
5951
|
const item=useSidebarItem(props.api,props.interaction,{id:props.id??`filter.${props.placeholder}`,position:()=>props.position??{section:0,row:0,column:0
|
|
5997
5952
|
},activate:()=>{if(!input)
|
|
@@ -6060,16 +6015,6 @@ return _el$3
|
|
|
6060
6015
|
}})]
|
|
6061
6016
|
}})
|
|
6062
6017
|
}
|
|
6063
|
-
|
|
6064
|
-
|
|
6065
|
-
|
|
6066
|
-
|
|
6067
|
-
function SidebarRowList(props){return(()=>{var _el$=_$createElement("box")
|
|
6068
|
-
_$insert(_el$,()=>props.children)
|
|
6069
|
-
_$effect((_$p)=>_$setProp(_el$,"gap",props.density==="comfortable"?1:0,_$p))
|
|
6070
|
-
return _el$
|
|
6071
|
-
})()
|
|
6072
|
-
}
|
|
6073
6018
|
function McpSectionContent(props){const model=props.model
|
|
6074
6019
|
return _$createComponent(SectionRequestBody,{get api(){return props.api
|
|
6075
6020
|
},get interaction(){return props.interaction
|
|
@@ -6095,7 +6040,10 @@ _$insertNode(_el$2,_$createTextNode(`No matching MCP servers`))
|
|
|
6095
6040
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
6096
6041
|
return _el$2
|
|
6097
6042
|
})()
|
|
6098
|
-
},get children(){return [_$createComponent(SidebarRowList,{get
|
|
6043
|
+
},get children(){return [_$createComponent(SidebarRowList,{get api(){return props.api
|
|
6044
|
+
},get interaction(){return props.interaction
|
|
6045
|
+
},get grouped(){return model.grouped
|
|
6046
|
+
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6099
6047
|
},get children(){return _$createComponent(For13,{get each(){return model.visibility.visible()
|
|
6100
6048
|
},children:(item,index)=>[_$createComponent(Show14,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
|
|
6101
6049
|
},get children(){return _$createComponent(McpGroupHeader,{get api(){return props.api
|
|
@@ -6108,9 +6056,7 @@ return _el$2
|
|
|
6108
6056
|
},get position(){return{section:props.navigationSection,row:9 + index()*3,column:0
|
|
6109
6057
|
}},onToggle:()=>void props.controller.toggleGroup(item.bucket,model.groupNames(item.bucket),model.target())
|
|
6110
6058
|
})
|
|
6111
|
-
}}),_$createComponent(McpRow,{get
|
|
6112
|
-
},get interaction(){return props.interaction
|
|
6113
|
-
},item,get position(){return{section:props.navigationSection,row:10 + index()*3,column:0
|
|
6059
|
+
}}),_$createComponent(McpRow,{item,get position(){return{section:props.navigationSection,row:10 + index()*3,column:0
|
|
6114
6060
|
}},get state(){return props.controller.serverState(item.name,model.target())
|
|
6115
6061
|
},get disabled(){return model.bulkRunning()
|
|
6116
6062
|
},onToggle:()=>void props.controller.toggle(item.name).catch(()=>{}),onRetry:()=>void props.controller.retryServer(item.name,model.target())?.catch(()=>{}),get favorite(){return model.favorites().has(item.name)
|
|
@@ -6130,7 +6076,7 @@ return _el$
|
|
|
6130
6076
|
}})
|
|
6131
6077
|
}
|
|
6132
6078
|
function McpSection(props){const icons=useIcons()
|
|
6133
|
-
const [query,setQuery]=
|
|
6079
|
+
const [query,setQuery]=createSignal25("")
|
|
6134
6080
|
const model=createMcpSectionModel(props,query)
|
|
6135
6081
|
const navigationSection=()=>props.navigationSection??6
|
|
6136
6082
|
const summary=createMemo13(()=>`${model.active()}/${model.list().length}${model.errors() ? ` \xB7 ${model.errors()} ${icons.icon("error")}` : ""}`)
|
|
@@ -6165,48 +6111,79 @@ return _$createComponent(SectionWithHeaderAction,{get api(){return props.api
|
|
|
6165
6111
|
|
|
6166
6112
|
|
|
6167
6113
|
|
|
6168
|
-
|
|
6169
|
-
|
|
6170
|
-
|
|
6171
|
-
|
|
6114
|
+
|
|
6115
|
+
|
|
6116
|
+
|
|
6117
|
+
|
|
6118
|
+
|
|
6119
|
+
|
|
6120
|
+
|
|
6121
|
+
|
|
6122
|
+
|
|
6123
|
+
|
|
6124
|
+
|
|
6125
|
+
|
|
6126
|
+
|
|
6127
|
+
|
|
6128
|
+
|
|
6129
|
+
|
|
6130
|
+
|
|
6131
|
+
|
|
6132
|
+
|
|
6133
|
+
|
|
6134
|
+
|
|
6135
|
+
|
|
6136
|
+
|
|
6137
|
+
|
|
6138
|
+
|
|
6139
|
+
|
|
6140
|
+
|
|
6141
|
+
|
|
6142
|
+
|
|
6143
|
+
|
|
6144
|
+
|
|
6145
|
+
|
|
6146
|
+
|
|
6147
|
+
function QuickActionRow(props){const{api,interaction
|
|
6148
|
+
}=useSidebarList()
|
|
6149
|
+
const icons=useIcons()
|
|
6150
|
+
const theme=()=>api.theme.current
|
|
6151
|
+
const [width,setWidth]=createSignal28(0)
|
|
6152
|
+
const shortcut=createMemo14(()=>{const bindings=api.keymap.getCommandBindings({visibility:"registered",commands:[props.action.command]
|
|
6172
6153
|
})
|
|
6173
|
-
return
|
|
6154
|
+
return api.keys.formatBindings(bindings.get(props.action.command))
|
|
6174
6155
|
})
|
|
6175
6156
|
const visibleShortcut=createMemo14(()=>{const value=shortcut()
|
|
6176
|
-
return value&&width()>=Bun.stringWidth(props.action.label) + Bun.stringWidth(value) +
|
|
6157
|
+
return value&&width()>=Bun.stringWidth(props.action.label) + Bun.stringWidth(value) + 8?value:undefined
|
|
6177
6158
|
})
|
|
6178
6159
|
function run(){if(props.action.command==="session.new"&&props.onNewSession?.())
|
|
6179
6160
|
return
|
|
6180
|
-
const result=
|
|
6161
|
+
const result=interaction?interaction.dispatchFromReturnTarget(props.action.command):api.keymap.dispatchCommand(props.action.command)
|
|
6181
6162
|
if(result.ok)
|
|
6182
6163
|
return
|
|
6183
|
-
|
|
6164
|
+
api.ui.toast({variant:"warning",title:props.action.label,message:`Command is ${result.reason}`,duration:3000
|
|
6184
6165
|
})
|
|
6185
6166
|
}
|
|
6186
6167
|
const id=()=>`${PLUGIN_ID}.quick-action.${props.action.command}`
|
|
6187
|
-
const row=useSidebarItem(
|
|
6168
|
+
const row=useSidebarItem(api,interaction,{id:id(),position:()=>({...props.position,column:1
|
|
6169
|
+
}),activate:run,disabled:()=>Boolean(props.disabled)
|
|
6170
|
+
})
|
|
6171
|
+
const bookmark=createSidebarBookmark({api,interaction,id:id(),position:()=>props.position,row,favorite:()=>props.favorite,disabled:()=>props.favoriteDisabled,onToggle:props.onToggleFavorite
|
|
6188
6172
|
})
|
|
6189
|
-
const favorite=useSidebarItem(props.api,props.interaction,{id:`${id()}.favorite`,position:()=>({...props.position,column:1
|
|
6190
|
-
}),disabled:()=>props.favoriteDisabled,activate:()=>{props.onToggleFavorite()
|
|
6191
|
-
queueMicrotask(()=>props.interaction?.select(`${id()}.favorite`))
|
|
6192
|
-
}},()=>theme().warning,"control")
|
|
6193
|
-
const controlBackground=()=>{const background=favorite.backgroundColor()
|
|
6194
|
-
return background==="transparent"?row.backgroundColor():background
|
|
6195
|
-
}
|
|
6196
6173
|
return _$createComponent(ListRow,{ref:(node)=>row.ref(node),get id(){return id()
|
|
6197
6174
|
},paddingLeft:1,paddingRight:1,get marginTop(){return props.separator?1:0
|
|
6198
6175
|
},onSizeChange:function(){setWidth(this.width)
|
|
6199
6176
|
},get backgroundColor(){return row.backgroundColor()
|
|
6200
|
-
},get onMouseOver(){return
|
|
6201
|
-
},get onMouseOut(){return
|
|
6177
|
+
},get onMouseOver(){return bookmark.onRowOver
|
|
6178
|
+
},get onMouseOut(){return bookmark.onRowOut
|
|
6202
6179
|
},onMouseUp:(event)=>{event.stopPropagation()
|
|
6203
6180
|
row.activate(event)
|
|
6204
|
-
},get leading(){return(()=>{var _el$=_$createElement("text")
|
|
6181
|
+
},get leading(){return [_$memo(()=>bookmark.render()),(()=>{var _el$=_$createElement("text")
|
|
6205
6182
|
_$setProp(_el$,"flexShrink",0)
|
|
6206
6183
|
_$insert(_el$,()=>icons.action(props.action.command))
|
|
6207
6184
|
_$effect((_$p)=>_$setProp(_el$,"fg",props.disabled?theme().textMuted:row.focused()?row.foregroundColor():theme().accent,_$p))
|
|
6208
6185
|
return _el$
|
|
6209
|
-
})()
|
|
6186
|
+
})()]
|
|
6210
6187
|
},get content(){return(()=>{var _el$2=_$createElement("text")
|
|
6211
6188
|
_$setProp(_el$2,"flexGrow",1)
|
|
6212
6189
|
_$setProp(_el$2,"wrapMode","none")
|
|
@@ -6215,7 +6192,7 @@ _$insert(_el$2,()=>props.action.label)
|
|
|
6215
6192
|
_$effect((_$p)=>_$setProp(_el$2,"fg",row.foregroundColor(),_$p))
|
|
6216
6193
|
return _el$2
|
|
6217
6194
|
})()
|
|
6218
|
-
},get metadata(){return _$createComponent(
|
|
6195
|
+
},get metadata(){return _$createComponent(Show17,{get when(){return visibleShortcut()
|
|
6219
6196
|
},children:(value)=>(()=>{var _el$3=_$createElement("text")
|
|
6220
6197
|
_$setProp(_el$3,"flexShrink",0)
|
|
6221
6198
|
_$setProp(_el$3,"wrapMode","none")
|
|
@@ -6224,7 +6201,7 @@ _$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme()
|
|
|
6224
6201
|
return _el$3
|
|
6225
6202
|
})()
|
|
6226
6203
|
})
|
|
6227
|
-
},get details(){return _$createComponent(
|
|
6204
|
+
},get details(){return _$createComponent(Show17,{get when(){return props.disabled
|
|
6228
6205
|
},children:(reason)=>(()=>{var _el$4=_$createElement("text")
|
|
6229
6206
|
_$setProp(_el$4,"wrapMode","word")
|
|
6230
6207
|
_$insert(_el$4,reason)
|
|
@@ -6232,14 +6209,6 @@ _$effect((_$p)=>_$setProp(_el$4,"fg",row.focused()?row.foregroundColor():theme()
|
|
|
6232
6209
|
return _el$4
|
|
6233
6210
|
})()
|
|
6234
6211
|
})
|
|
6235
|
-
},get trailing(){return _$createComponent(BookmarkControl,{ref:(node)=>favorite.ref(node),get id(){return `${id()}.favorite`
|
|
6236
|
-
},get bookmarked(){return props.favorite
|
|
6237
|
-
},get backgroundColor(){return controlBackground()
|
|
6238
|
-
},get foregroundColor(){return _$memo(()=>!!row.focused())()?row.foregroundColor():favorite.foregroundColor()
|
|
6239
|
-
},get onMouseOver(){return favorite.onMouseOver
|
|
6240
|
-
},get onMouseOut(){return favorite.onMouseOut
|
|
6241
|
-
},onMouseUp:(event)=>favorite.activate(event)
|
|
6242
|
-
})
|
|
6243
6212
|
}})
|
|
6244
6213
|
}
|
|
6245
6214
|
function QuickActionsSection(props){const commandRevision=createQuickActionRevision(props.api)
|
|
@@ -6257,16 +6226,16 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6257
6226
|
},sectionId:`${PLUGIN_ID}.section.quick_actions`,get navigationSection(){return navigationSection()
|
|
6258
6227
|
},title:"QUICK ACTIONS",section:"quick_actions",get summary(){return String(actions().length)
|
|
6259
6228
|
},get open(){return props.preferences.expanded().quick_actions
|
|
6260
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("quick_actions"),get children(){return [_$createComponent(SidebarRowList,{get
|
|
6261
|
-
},get
|
|
6229
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("quick_actions"),get children(){return [_$createComponent(SidebarRowList,{get api(){return props.api
|
|
6230
|
+
},get interaction(){return props.interaction
|
|
6231
|
+
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6232
|
+
},get children(){return [_$createComponent(Show18,{get when(){return actions().length===0
|
|
6262
6233
|
},get children(){var _el$=_$createElement("text")
|
|
6263
6234
|
_$insertNode(_el$,_$createTextNode(`No quick actions selected`))
|
|
6264
6235
|
_$effect((_$p)=>_$setProp(_el$,"fg",props.api.theme.current.textMuted,_$p))
|
|
6265
6236
|
return _el$
|
|
6266
|
-
}}),_$createComponent(
|
|
6267
|
-
},children:(action,index)=>_$createComponent(QuickActionRow,{get
|
|
6268
|
-
},get interaction(){return props.interaction
|
|
6269
|
-
},get onNewSession(){return props.onNewSession
|
|
6237
|
+
}}),_$createComponent(For15,{get each(){return visibility.visible()
|
|
6238
|
+
},children:(action,index)=>_$createComponent(QuickActionRow,{get onNewSession(){return props.onNewSession
|
|
6270
6239
|
},action,get disabled(){return action.disabled
|
|
6271
6240
|
},get favorite(){return props.preferences.favoriteQuickActions?.().has(action.command)??false
|
|
6272
6241
|
},get favoriteDisabled(){return _$memo(()=>!!props.preferences.ready)()?!props.preferences.ready():false
|
|
@@ -6375,7 +6344,7 @@ unregisterBinding=undefined
|
|
|
6375
6344
|
unregisterCommands()
|
|
6376
6345
|
}}}
|
|
6377
6346
|
function SidebarToggleBinding(props){const shortcuts=createSidebarShortcutMode(props.api)
|
|
6378
|
-
|
|
6347
|
+
createEffect16(()=>shortcuts.bind(props.preferences.toggleKey()))
|
|
6379
6348
|
onCleanup18(shortcuts.dispose)
|
|
6380
6349
|
return _$createElement("box")
|
|
6381
6350
|
}
|
|
@@ -6385,7 +6354,7 @@ const unregisterCommands=props.api.keymap.registerLayer({commands:[...commands,.
|
|
|
6385
6354
|
}))]
|
|
6386
6355
|
})
|
|
6387
6356
|
onCleanup18(unregisterCommands)
|
|
6388
|
-
|
|
6357
|
+
createEffect16(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
|
|
6389
6358
|
}]
|
|
6390
6359
|
})
|
|
6391
6360
|
onCleanup18(unregister)
|
|
@@ -6419,10 +6388,10 @@ const filtered=createMemo16(()=>list().filter((item)=>matchesFilter(query(),item
|
|
|
6419
6388
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("skills")??0,resetKey:()=>JSON.stringify([target().key,query()])
|
|
6420
6389
|
})
|
|
6421
6390
|
const state=createMemo16(()=>props.controller.state(target()))
|
|
6422
|
-
|
|
6423
|
-
const deactivate=
|
|
6391
|
+
createEffect17(()=>{const current=target()
|
|
6392
|
+
const deactivate=untrack6(()=>props.controller.activate?.(current)??(()=>{}))
|
|
6424
6393
|
onCleanup19(deactivate)
|
|
6425
|
-
|
|
6394
|
+
untrack6(()=>void props.controller.refresh(current).catch(()=>{}))
|
|
6426
6395
|
})
|
|
6427
6396
|
async function useSkill(item){try{const isInserted=await props.controller.use(target(),item.name)
|
|
6428
6397
|
if(isInserted)
|
|
@@ -6445,49 +6414,36 @@ return{target,recent,grouped,list,filtered,visibility,state,useSkill,skillGroup}
|
|
|
6445
6414
|
|
|
6446
6415
|
|
|
6447
6416
|
|
|
6448
|
-
function SkillRow(props){const
|
|
6449
|
-
|
|
6417
|
+
function SkillRow(props){const{api,interaction,grouped
|
|
6418
|
+
}=useSidebarList()
|
|
6419
|
+
const icons=useIcons()
|
|
6450
6420
|
const id=()=>`${PLUGIN_ID}.skill.${props.item.location || props.item.name}`
|
|
6451
|
-
const row=useSidebarItem(
|
|
6421
|
+
const row=useSidebarItem(api,interaction,{id:id(),position:()=>({...props.position,column:1
|
|
6452
6422
|
}),activate:props.onUse
|
|
6453
6423
|
})
|
|
6454
|
-
const
|
|
6455
|
-
})
|
|
6456
|
-
queueMicrotask(()=>props.interaction?.select(`${id()}.favorite`))
|
|
6457
|
-
}},()=>theme().warning,"control")
|
|
6458
|
-
const controlBackground=()=>{const background=favorite.backgroundColor()
|
|
6459
|
-
return background==="transparent"?row.backgroundColor():background
|
|
6460
|
-
}
|
|
6424
|
+
const bookmark=createSidebarBookmark({api,interaction,id:id(),position:()=>props.position,row,favorite:()=>props.favorite,disabled:()=>props.favoriteDisabled,onToggle:props.onToggleFavorite
|
|
6425
|
+
})
|
|
6461
6426
|
return _$createComponent(ListRow,{ref:(node)=>row.ref(node),get id(){return id()
|
|
6462
|
-
},
|
|
6427
|
+
},get paddingLeft(){return grouped()?0:1
|
|
6428
|
+
},paddingRight:1,contentGap:0,get marginTop(){return props.separator?1:0
|
|
6463
6429
|
},get backgroundColor(){return row.backgroundColor()
|
|
6464
|
-
},get onMouseOver(){return
|
|
6465
|
-
},get onMouseOut(){return
|
|
6466
|
-
},onMouseUp:(event)=>row.activate(event),get leading(){return
|
|
6467
|
-
_$
|
|
6468
|
-
_$
|
|
6469
|
-
_$
|
|
6430
|
+
},get onMouseOver(){return bookmark.onRowOver
|
|
6431
|
+
},get onMouseOut(){return bookmark.onRowOut
|
|
6432
|
+
},onMouseUp:(event)=>row.activate(event),get leading(){return bookmark.render()
|
|
6433
|
+
},get content(){return(()=>{var _el$=_$createElement("text")
|
|
6434
|
+
_$setProp(_el$,"flexGrow",1)
|
|
6435
|
+
_$setProp(_el$,"wrapMode","word")
|
|
6436
|
+
_$insert(_el$,(()=>{var _c$=_$memo(()=>!!props.recent)
|
|
6437
|
+
return()=>_c$()?`${icons.icon("recent")} `:""
|
|
6438
|
+
})(),null)
|
|
6439
|
+
_$insert(_el$,()=>props.item.name,null)
|
|
6440
|
+
_$effect((_$p)=>_$setProp(_el$,"fg",row.foregroundColor(),_$p))
|
|
6470
6441
|
return _el$
|
|
6471
6442
|
})()
|
|
6472
|
-
},get content(){return(()=>{var _el$2=_$createElement("text")
|
|
6473
|
-
_$setProp(_el$2,"flexGrow",1)
|
|
6474
|
-
_$setProp(_el$2,"wrapMode","word")
|
|
6475
|
-
_$insert(_el$2,()=>props.item.name)
|
|
6476
|
-
_$effect((_$p)=>_$setProp(_el$2,"fg",row.foregroundColor(),_$p))
|
|
6477
|
-
return _el$2
|
|
6478
|
-
})()
|
|
6479
|
-
},get trailing(){return _$createComponent(BookmarkControl,{ref:(node)=>favorite.ref(node),get id(){return `${id()}.favorite`
|
|
6480
|
-
},get bookmarked(){return props.favorite
|
|
6481
|
-
},get backgroundColor(){return controlBackground()
|
|
6482
|
-
},get foregroundColor(){return _$memo(()=>!!row.focused())()?row.foregroundColor():favorite.foregroundColor()
|
|
6483
|
-
},get onMouseOver(){return favorite.onMouseOver
|
|
6484
|
-
},get onMouseOut(){return favorite.onMouseOut
|
|
6485
|
-
},onMouseUp:(event)=>favorite.activate(event)
|
|
6486
|
-
})
|
|
6487
6443
|
}})
|
|
6488
6444
|
}
|
|
6489
6445
|
function SkillsSection(props){const dialogs=useDialogs(props.api)
|
|
6490
|
-
const [query,setQuery]=
|
|
6446
|
+
const [query,setQuery]=createSignal29("")
|
|
6491
6447
|
const model=createSkillSectionModel(props,query)
|
|
6492
6448
|
const navigationSection=()=>props.navigationSection??3
|
|
6493
6449
|
function selectSkill(item){if(!props.preferences.shouldConfirmSkill(item)){model.useSkill(item)
|
|
@@ -6520,15 +6476,18 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
6520
6476
|
}},get query(){return query()
|
|
6521
6477
|
},placeholder:"Filter skills...",onInput:setQuery
|
|
6522
6478
|
}),null)
|
|
6523
|
-
_$insert(_el$,_$createComponent(
|
|
6479
|
+
_$insert(_el$,_$createComponent(Show19,{get when(){return model.filtered().length>0
|
|
6524
6480
|
},get fallback(){return(()=>{var _el$2=_$createElement("text")
|
|
6525
6481
|
_$insertNode(_el$2,_$createTextNode(`No matching skills`))
|
|
6526
6482
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
6527
6483
|
return _el$2
|
|
6528
6484
|
})()
|
|
6529
|
-
},get children(){return [_$createComponent(SidebarRowList,{get
|
|
6530
|
-
},get
|
|
6531
|
-
},
|
|
6485
|
+
},get children(){return [_$createComponent(SidebarRowList,{get api(){return props.api
|
|
6486
|
+
},get interaction(){return props.interaction
|
|
6487
|
+
},get grouped(){return model.grouped
|
|
6488
|
+
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6489
|
+
},get children(){return _$createComponent(For16,{get each(){return model.visibility.visible()
|
|
6490
|
+
},children:(item,index)=>[_$createComponent(Show19,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
|
|
6532
6491
|
},get children(){var _el$4=_$createElement("text")
|
|
6533
6492
|
_$setProp(_el$4,"height",1)
|
|
6534
6493
|
_$setProp(_el$4,"wrapMode","none")
|
|
@@ -6541,9 +6500,7 @@ return _p$
|
|
|
6541
6500
|
},{e:undefined,t:undefined
|
|
6542
6501
|
})
|
|
6543
6502
|
return _el$4
|
|
6544
|
-
}}),_$createComponent(SkillRow,{get
|
|
6545
|
-
},get interaction(){return props.interaction
|
|
6546
|
-
},item,get position(){return{section:navigationSection(),row:10 + index()*(model.grouped()?2:1),column:0
|
|
6503
|
+
}}),_$createComponent(SkillRow,{item,get position(){return{section:navigationSection(),row:10 + index()*(model.grouped()?2:1),column:0
|
|
6547
6504
|
}},onUse:()=>selectSkill(item),get recent(){return model.recent().has(item.location)
|
|
6548
6505
|
},get favorite(){return props.preferences.isFavoriteSkill?.(item)??false
|
|
6549
6506
|
},get favoriteDisabled(){return props.preferences.ready?.()===false
|
|
@@ -6575,18 +6532,18 @@ return _el$
|
|
|
6575
6532
|
function createSubagentSectionModel(props){const list=createMemo17(()=>props.controller.list(props.sessionID))
|
|
6576
6533
|
const recent=createMemo17(()=>props.controller.recent?.(props.sessionID)??[])
|
|
6577
6534
|
const rows=createMemo17(()=>buildSubagentView(list(),recent()))
|
|
6578
|
-
const [query,setQuery]=
|
|
6579
|
-
const [mode,setMode]=
|
|
6535
|
+
const [query,setQuery]=createSignal30("")
|
|
6536
|
+
const [mode,setMode]=createSignal30("all")
|
|
6580
6537
|
const counts=createMemo17(()=>countSubagentView(rows(),query()))
|
|
6581
6538
|
const tabs=createMemo17(()=>["all","active","recent",...counts().errors>0?["errors"]:[]])
|
|
6582
6539
|
const filtered=createMemo17(()=>filterSubagentView(rows(),mode(),query()))
|
|
6583
6540
|
const parentID=createMemo17(()=>props.api.state?.session?.get(props.sessionID)?.parentID)
|
|
6584
6541
|
const targetKey=createMemo17(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6585
|
-
|
|
6542
|
+
createEffect18(()=>{targetKey()
|
|
6586
6543
|
setQuery("")
|
|
6587
6544
|
setMode("all")
|
|
6588
6545
|
})
|
|
6589
|
-
|
|
6546
|
+
createEffect18(()=>{if(mode()!=="all"&&counts()[mode()]===0)
|
|
6590
6547
|
setMode("all")
|
|
6591
6548
|
})
|
|
6592
6549
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("subagents")??0,resetKey:()=>JSON.stringify([targetKey(),query(),mode()])
|
|
@@ -6596,11 +6553,11 @@ const now=createSubagentClock(clockKey)
|
|
|
6596
6553
|
const byId=createMemo17(()=>new Map(visibility.visible().map((item)=>[item.session.id,item])))
|
|
6597
6554
|
const ids=createMemo17(()=>visibility.visible().map((item)=>item.session.id))
|
|
6598
6555
|
const state=createMemo17(()=>props.controller.state(props.sessionID))
|
|
6599
|
-
|
|
6556
|
+
createEffect18(()=>{const sessionID=props.sessionID
|
|
6600
6557
|
targetKey()
|
|
6601
|
-
const deactivate=
|
|
6558
|
+
const deactivate=untrack7(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6602
6559
|
onCleanup20(deactivate)
|
|
6603
|
-
|
|
6560
|
+
untrack7(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6604
6561
|
})
|
|
6605
6562
|
return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentID,visibility,now,byId,ids,state
|
|
6606
6563
|
}}
|
|
@@ -6620,18 +6577,20 @@ return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentI
|
|
|
6620
6577
|
|
|
6621
6578
|
|
|
6622
6579
|
|
|
6623
|
-
function SubagentRow(props){const
|
|
6624
|
-
|
|
6580
|
+
function SubagentRow(props){const{api,interaction
|
|
6581
|
+
}=useSidebarList()
|
|
6582
|
+
const icons=useIcons()
|
|
6583
|
+
const theme=()=>api.theme.current
|
|
6625
6584
|
const retrying=()=>props.item.status.type==="retry"
|
|
6626
6585
|
const idle=()=>props.item.status.type==="idle"
|
|
6627
6586
|
const failed=()=>props.item.run?.outcome==="error"
|
|
6628
6587
|
const cancelled=()=>props.item.run?.outcome==="cancelled"
|
|
6629
6588
|
const id=()=>`${PLUGIN_ID}.subagent.${props.item.session.id}`
|
|
6630
|
-
const row=useSidebarItem(
|
|
6589
|
+
const row=useSidebarItem(api,interaction,{id:id(),position:()=>props.position,activate:props.onOpen
|
|
6631
6590
|
})
|
|
6632
6591
|
const leadingColor=()=>row.focused()?row.foregroundColor():failed()?theme().error:retrying()||props.item.unavailable?theme().warning:idle()?theme().textMuted:theme().primary
|
|
6633
6592
|
return _$createComponent(ListRow,{ref:(node)=>row.ref(node),get id(){return id()
|
|
6634
|
-
},paddingLeft:
|
|
6593
|
+
},paddingLeft:2,paddingRight:1,get backgroundColor(){return row.backgroundColor()
|
|
6635
6594
|
},get onMouseOver(){return row.onMouseOver
|
|
6636
6595
|
},get onMouseOut(){return row.onMouseOut
|
|
6637
6596
|
},onMouseDown:(event)=>row.activate(event),get leading(){return(()=>{var _el$=_$createElement("text")
|
|
@@ -6655,7 +6614,7 @@ return()=>_c$()?`${props.item.run.startedBeforeObservation ? `${icons.icon("rece
|
|
|
6655
6614
|
_$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme().textMuted,_$p))
|
|
6656
6615
|
return _el$3
|
|
6657
6616
|
})()
|
|
6658
|
-
},get details(){return [_$createComponent(
|
|
6617
|
+
},get details(){return [_$createComponent(Show20,{get when(){return props.item.run?.errorMessage
|
|
6659
6618
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createTextNode(`: `)
|
|
6660
6619
|
_$insertNode(_el$4,_el$5)
|
|
6661
6620
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -6663,12 +6622,12 @@ _$insert(_el$4,()=>cancelled()?"Cancelled":"Error",_el$5)
|
|
|
6663
6622
|
_$insert(_el$4,()=>props.item.run?.errorMessage,null)
|
|
6664
6623
|
_$effect((_$p)=>_$setProp(_el$4,"fg",row.focused()?row.foregroundColor():failed()?theme().error:theme().textMuted,_$p))
|
|
6665
6624
|
return _el$4
|
|
6666
|
-
}}),_$createComponent(
|
|
6625
|
+
}}),_$createComponent(Show20,{get when(){return props.item.unavailable
|
|
6667
6626
|
},get children(){var _el$6=_$createElement("text")
|
|
6668
6627
|
_$insertNode(_el$6,_$createTextNode(`Worker status unavailable`))
|
|
6669
6628
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().warning,_$p))
|
|
6670
6629
|
return _el$6
|
|
6671
|
-
}}),_$createComponent(
|
|
6630
|
+
}}),_$createComponent(Show20,{get when(){return _$memo(()=>props.item.status.type==="retry")()?props.item.status:undefined
|
|
6672
6631
|
},children:(status)=>(()=>{var _el$0=_$createElement("text"),_el$1=_$createTextNode(`Retry #`),_el$10=_$createTextNode(` \xB7 `),_el$11=_$createTextNode(`s \xB7 `)
|
|
6673
6632
|
_$insertNode(_el$0,_el$1)
|
|
6674
6633
|
_$insertNode(_el$0,_el$10)
|
|
@@ -6680,7 +6639,7 @@ _$insert(_el$0,()=>status().message,null)
|
|
|
6680
6639
|
_$effect((_$p)=>_$setProp(_el$0,"fg",row.focused()?row.foregroundColor():theme().warning,_$p))
|
|
6681
6640
|
return _el$0
|
|
6682
6641
|
})()
|
|
6683
|
-
}),_$createComponent(
|
|
6642
|
+
}),_$createComponent(Show20,{get when(){return _$memo(()=>!!idle())()&&!props.item.run?.errorMessage
|
|
6684
6643
|
},get children(){var _el$8=_$createElement("text")
|
|
6685
6644
|
_$insertNode(_el$8,_$createTextNode(`Finished`))
|
|
6686
6645
|
_$effect((_$p)=>_$setProp(_el$8,"fg",theme().textMuted,_$p))
|
|
@@ -6688,22 +6647,22 @@ return _el$8
|
|
|
6688
6647
|
}})]
|
|
6689
6648
|
}})
|
|
6690
6649
|
}
|
|
6691
|
-
function SubagentList(props){return _$createComponent(SidebarRowList,{get
|
|
6692
|
-
},get
|
|
6650
|
+
function SubagentList(props){return _$createComponent(SidebarRowList,{get api(){return props.api
|
|
6651
|
+
},get interaction(){return props.interaction
|
|
6652
|
+
},get density(){return props.density
|
|
6653
|
+
},get children(){return _$createComponent(For17,{get each(){return props.ids
|
|
6693
6654
|
},children:(id,index)=>{const initial=props.itemById(id)
|
|
6694
6655
|
const item=()=>props.itemById(id)??initial
|
|
6695
6656
|
const startsGroup=()=>index()===0||props.visible[index()-1]?.group!==item().group
|
|
6696
6657
|
return(()=>{var _el$=_$createElement("box")
|
|
6697
|
-
_$insert(_el$,_$createComponent(
|
|
6658
|
+
_$insert(_el$,_$createComponent(Show21,{get when(){return startsGroup()
|
|
6698
6659
|
},get children(){var _el$2=_$createElement("text"),_el$3=_$createElement("b")
|
|
6699
6660
|
_$insertNode(_el$2,_el$3)
|
|
6700
6661
|
_$insert(_el$3,()=>item().group)
|
|
6701
6662
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
6702
6663
|
return _el$2
|
|
6703
6664
|
}}),null)
|
|
6704
|
-
_$insert(_el$,_$createComponent(SubagentRow,{get
|
|
6705
|
-
},get interaction(){return props.interaction
|
|
6706
|
-
},get item(){return item()
|
|
6665
|
+
_$insert(_el$,_$createComponent(SubagentRow,{get item(){return item()
|
|
6707
6666
|
},get now(){return props.now
|
|
6708
6667
|
},get position(){return{section:props.navigationSection,row:10 + index(),column:0
|
|
6709
6668
|
}},onOpen:()=>props.controller.open(id)
|
|
@@ -6722,7 +6681,7 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6722
6681
|
},sectionId:`${PLUGIN_ID}.section.subagents`,get navigationSection(){return navigationSection()
|
|
6723
6682
|
},title:"SUBAGENTS",section:"subagents",get summary(){return `${model.list().length} active \xB7 ${model.recent().length} recent`
|
|
6724
6683
|
},get open(){return props.preferences.expanded().subagents
|
|
6725
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(
|
|
6684
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(Show22,{get when(){return model.parentID()
|
|
6726
6685
|
},children:(id)=>_$createComponent(McpBulkAction,{get api(){return props.api
|
|
6727
6686
|
},get interaction(){return props.interaction
|
|
6728
6687
|
},id:`${PLUGIN_ID}.subagents.parent`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -6745,7 +6704,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
6745
6704
|
}}),_el$2)
|
|
6746
6705
|
_$setProp(_el$2,"flexDirection","row")
|
|
6747
6706
|
_$setProp(_el$2,"flexWrap","wrap")
|
|
6748
|
-
_$insert(_el$2,_$createComponent(
|
|
6707
|
+
_$insert(_el$2,_$createComponent(For18,{get each(){return model.tabs()
|
|
6749
6708
|
},children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
|
|
6750
6709
|
},get interaction(){return props.interaction
|
|
6751
6710
|
},id:`${PLUGIN_ID}.subagents.filter.${value}`,get position(){return{section:navigationSection(),row:4,column:index()
|
|
@@ -6756,7 +6715,7 @@ _$insert(_el$2,_$createComponent(For17,{get each(){return model.tabs()
|
|
|
6756
6715
|
},onActivate:()=>model.setMode(value)
|
|
6757
6716
|
})
|
|
6758
6717
|
}))
|
|
6759
|
-
_$insert(_el$,_$createComponent(
|
|
6718
|
+
_$insert(_el$,_$createComponent(Show22,{get when(){return model.filtered().length===0
|
|
6760
6719
|
},get children(){var _el$3=_$createElement("text")
|
|
6761
6720
|
_$insertNode(_el$3,_$createTextNode(`No matching subagents`))
|
|
6762
6721
|
_$effect((_$p)=>_$setProp(_el$3,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -6808,8 +6767,10 @@ return _el$
|
|
|
6808
6767
|
|
|
6809
6768
|
|
|
6810
6769
|
|
|
6811
|
-
function TodoRow(props){const
|
|
6812
|
-
|
|
6770
|
+
function TodoRow(props){const{api
|
|
6771
|
+
}=useSidebarList()
|
|
6772
|
+
const icons=useIcons()
|
|
6773
|
+
const theme=()=>api.theme.current
|
|
6813
6774
|
const done=()=>props.item.status==="completed"
|
|
6814
6775
|
const active=()=>props.item.status==="in_progress"
|
|
6815
6776
|
const cancelled=()=>props.item.status==="cancelled"
|
|
@@ -6832,12 +6793,13 @@ _$insertNode(_el$,_el$2)
|
|
|
6832
6793
|
_$insertNode(_el$,_el$3)
|
|
6833
6794
|
_$setProp(_el$,"flexDirection","row")
|
|
6834
6795
|
_$setProp(_el$,"gap",1)
|
|
6796
|
+
_$setProp(_el$,"paddingLeft",2)
|
|
6835
6797
|
_$setProp(_el$2,"flexShrink",0)
|
|
6836
6798
|
_$insert(_el$2,()=>icons.icon(done()?"done":active()?"busy":cancelled()?"close":"idle"))
|
|
6837
6799
|
_$setProp(_el$3,"flexGrow",1)
|
|
6838
6800
|
_$setProp(_el$3,"wrapMode","word")
|
|
6839
6801
|
_$insert(_el$3,()=>props.item.content)
|
|
6840
|
-
_$insert(_el$,_$createComponent(
|
|
6802
|
+
_$insert(_el$,_$createComponent(Show23,{get when(){return props.item.priority==="high"||props.item.priority==="medium"||props.item.priority==="low"
|
|
6841
6803
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b"),_el$6=_$createTextNode(` `)
|
|
6842
6804
|
_$insertNode(_el$4,_el$5)
|
|
6843
6805
|
_$setProp(_el$4,"width",2)
|
|
@@ -6864,7 +6826,7 @@ _$insertNode(_el$,_el$2)
|
|
|
6864
6826
|
_$setProp(_el$,"gap",1)
|
|
6865
6827
|
_$setProp(_el$2,"flexDirection","row")
|
|
6866
6828
|
_$setProp(_el$2,"flexWrap","wrap")
|
|
6867
|
-
_$insert(_el$2,_$createComponent(
|
|
6829
|
+
_$insert(_el$2,_$createComponent(For19,{each:["all","active","finished"],children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
|
|
6868
6830
|
},get interaction(){return props.interaction
|
|
6869
6831
|
},id:`${PLUGIN_ID}.todo.filter.${value}`,get position(){return{section:navigationSection(),row:tabsRow(),column:index()
|
|
6870
6832
|
}},get label(){return value[0].toUpperCase() + value.slice(1)
|
|
@@ -6873,23 +6835,24 @@ _$insert(_el$2,_$createComponent(For18,{each:["all","active","finished"],childre
|
|
|
6873
6835
|
},onActivate:()=>props.setMode(value)
|
|
6874
6836
|
})
|
|
6875
6837
|
}))
|
|
6876
|
-
_$insert(_el$,_$createComponent(
|
|
6838
|
+
_$insert(_el$,_$createComponent(Show24,{get when(){return props.view.rows.length>0
|
|
6877
6839
|
},get fallback(){return _$createComponent(EmptyTodo,{get api(){return props.api
|
|
6878
6840
|
},get mode(){return props.mode
|
|
6879
6841
|
}})
|
|
6880
|
-
},get children(){return _$createComponent(SidebarRowList,{get
|
|
6881
|
-
},get
|
|
6842
|
+
},get children(){return _$createComponent(SidebarRowList,{get api(){return props.api
|
|
6843
|
+
},get interaction(){return props.interaction
|
|
6844
|
+
},get density(){return props.density
|
|
6845
|
+
},get children(){return _$createComponent(For19,{get each(){return props.visibility.visible()
|
|
6882
6846
|
},children:(row,index)=>{const startsGroup=()=>index()===0||props.visibility.visible()[index()-1].group!==row.group
|
|
6883
6847
|
return(()=>{var _el$3=_$createElement("box")
|
|
6884
|
-
_$insert(_el$3,_$createComponent(
|
|
6848
|
+
_$insert(_el$3,_$createComponent(Show24,{get when(){return startsGroup()
|
|
6885
6849
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
6886
6850
|
_$insertNode(_el$4,_el$5)
|
|
6887
6851
|
_$insert(_el$5,()=>row.group)
|
|
6888
6852
|
_$effect((_$p)=>_$setProp(_el$4,"fg",props.api.theme.current.textMuted,_$p))
|
|
6889
6853
|
return _el$4
|
|
6890
6854
|
}}),null)
|
|
6891
|
-
_$insert(_el$3,_$createComponent(TodoRow,{get
|
|
6892
|
-
},get item(){return row.item
|
|
6855
|
+
_$insert(_el$3,_$createComponent(TodoRow,{get item(){return row.item
|
|
6893
6856
|
}}),null)
|
|
6894
6857
|
_$effect((_$p)=>_$setProp(_el$3,"marginTop",index()>0&&startsGroup()?1:0,_$p))
|
|
6895
6858
|
return _el$3
|
|
@@ -6919,7 +6882,7 @@ return _el$6
|
|
|
6919
6882
|
|
|
6920
6883
|
|
|
6921
6884
|
function TodoGuidanceControl(props){const state=()=>props.controller.guidance(props.sessionID)
|
|
6922
|
-
return _$createComponent(
|
|
6885
|
+
return _$createComponent(Show25,{get when(){return state().available
|
|
6923
6886
|
},get children(){var _el$=_$createElement("box")
|
|
6924
6887
|
_$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
6925
6888
|
},get interaction(){return props.interaction
|
|
@@ -6929,7 +6892,7 @@ _$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
|
6929
6892
|
},get disabled(){return state().saving
|
|
6930
6893
|
},onActivate:()=>void props.controller.setGuidance(props.sessionID,!state().enabled)
|
|
6931
6894
|
}),null)
|
|
6932
|
-
_$insert(_el$,_$createComponent(
|
|
6895
|
+
_$insert(_el$,_$createComponent(Show25,{get when(){return state().error
|
|
6933
6896
|
},children:(message)=>(()=>{var _el$2=_$createElement("text")
|
|
6934
6897
|
_$setProp(_el$2,"wrapMode","word")
|
|
6935
6898
|
_$insert(_el$2,message)
|
|
@@ -6944,22 +6907,22 @@ function TodoSection(props){const list=createMemo18(()=>props.controller.list(pr
|
|
|
6944
6907
|
const icons=useIcons()
|
|
6945
6908
|
const unavailable=()=>hostCapabilityUnavailable(props.api,"todo")
|
|
6946
6909
|
const managed=()=>("guidance" in props.controller)?props.controller:undefined
|
|
6947
|
-
const [mode,setMode]=
|
|
6910
|
+
const [mode,setMode]=createSignal31("all")
|
|
6948
6911
|
const targetKey=createMemo18(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6949
|
-
|
|
6912
|
+
createEffect19(()=>{targetKey()
|
|
6950
6913
|
setMode("all")
|
|
6951
6914
|
})
|
|
6952
6915
|
const view=createMemo18(()=>buildTodoView(list(),mode()))
|
|
6953
6916
|
const visibility=createListVisibility({items:()=>view().rows,limit:()=>props.preferences.sectionItemLimit?.("todo")??0,resetKey:()=>JSON.stringify([targetKey(),mode()])
|
|
6954
6917
|
})
|
|
6955
6918
|
const state=createMemo18(()=>props.controller.state(props.sessionID))
|
|
6956
|
-
|
|
6919
|
+
createEffect19(()=>{const sessionID=props.sessionID
|
|
6957
6920
|
targetKey()
|
|
6958
6921
|
if(unavailable())
|
|
6959
6922
|
return
|
|
6960
|
-
const deactivate=
|
|
6923
|
+
const deactivate=untrack8(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6961
6924
|
onCleanup21(deactivate)
|
|
6962
|
-
|
|
6925
|
+
untrack8(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6963
6926
|
})
|
|
6964
6927
|
const navigationSection=()=>props.navigationSection??1
|
|
6965
6928
|
return _$createComponent(Section,{get api(){return props.api
|
|
@@ -6967,10 +6930,10 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6967
6930
|
},sectionId:`${PLUGIN_ID}.section.todo`,get navigationSection(){return navigationSection()
|
|
6968
6931
|
},title:"TODO",section:"todo",get summary(){return _$memo(()=>!!(unavailable()||managed()?.missing(props.sessionID)))()?"\u2014":`${view().counts.completed}/${list().length}`
|
|
6969
6932
|
},get open(){return props.preferences.expanded().todo
|
|
6970
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(
|
|
6933
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(Show26,{get when(){return unavailable()
|
|
6971
6934
|
},get fallback(){return(()=>{var _el$=_$createElement("box")
|
|
6972
6935
|
_$setProp(_el$,"gap",1)
|
|
6973
|
-
_$insert(_el$,_$createComponent(
|
|
6936
|
+
_$insert(_el$,_$createComponent(Show26,{get when(){return managed()?.guidance(props.sessionID).available
|
|
6974
6937
|
},get children(){return _$createComponent(TodoGuidanceControl,{get api(){return props.api
|
|
6975
6938
|
},get controller(){return managed()
|
|
6976
6939
|
},get sessionID(){return props.sessionID
|
|
@@ -6978,7 +6941,7 @@ _$insert(_el$,_$createComponent(Show24,{get when(){return managed()?.guidance(pr
|
|
|
6978
6941
|
},get navigationSection(){return navigationSection()
|
|
6979
6942
|
}})
|
|
6980
6943
|
}}),null)
|
|
6981
|
-
_$insert(_el$,_$createComponent(
|
|
6944
|
+
_$insert(_el$,_$createComponent(Show26,{get when(){return managed()?.missing(props.sessionID)
|
|
6982
6945
|
},get fallback(){return _$createComponent(SectionRequestBody,{get api(){return props.api
|
|
6983
6946
|
},get interaction(){return props.interaction
|
|
6984
6947
|
},id:`${PLUGIN_ID}.retry.todo`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -7027,10 +6990,11 @@ event.preventDefault()
|
|
|
7027
6990
|
event.stopPropagation()
|
|
7028
6991
|
props.interaction.leave()
|
|
7029
6992
|
})
|
|
7030
|
-
_$insert(_el$,_$createComponent(
|
|
6993
|
+
_$insert(_el$,_$createComponent(For20,{get each(){return visibleSections()
|
|
7031
6994
|
},children:(section,index)=>_$createComponent(SectionBoundary,{get api(){return props.api
|
|
7032
6995
|
},get divided(){return index()<visibleSections().length-1
|
|
7033
|
-
},get children(){return _$createComponent(Switch,{get children(){return [_$createComponent(Match,{when:section==="
|
|
6996
|
+
},get children(){return _$createComponent(Switch,{get children(){return [_$createComponent(Match,{when:section==="limits",get children(){return props.limitsSection(index() + 1)
|
|
6997
|
+
}}),_$createComponent(Match,{when:section==="todo",get children(){return _$createComponent(TodoSection,_$mergeProps(props,{get navigationSection(){return index() + 1
|
|
7034
6998
|
},get controller(){return props.todo
|
|
7035
6999
|
}}))
|
|
7036
7000
|
}}),_$createComponent(Match,{when:section==="subagents",get children(){return _$createComponent(SubagentSection,_$mergeProps(props,{get navigationSection(){return index() + 1
|
|
@@ -7062,7 +7026,7 @@ return _el$
|
|
|
7062
7026
|
|
|
7063
7027
|
|
|
7064
7028
|
function McpPersistence(props){const persist=createMemo20(()=>props.controller.persist())
|
|
7065
|
-
|
|
7029
|
+
createEffect20(()=>{if(!props.api.state.ready)
|
|
7066
7030
|
return
|
|
7067
7031
|
persist()
|
|
7068
7032
|
const route=props.api.route.current
|
|
@@ -7071,19 +7035,19 @@ if(typeof params?.sessionID!=="string")
|
|
|
7071
7035
|
return
|
|
7072
7036
|
const current=props.controller.target()
|
|
7073
7037
|
onCleanup23(()=>props.controller.deactivate(current))
|
|
7074
|
-
|
|
7038
|
+
untrack9(()=>void props.controller.activate(current).catch(()=>{}))
|
|
7075
7039
|
})
|
|
7076
7040
|
return _$createElement("box")
|
|
7077
7041
|
}
|
|
7078
|
-
function PreferencesPersistence(props){
|
|
7079
|
-
|
|
7042
|
+
function PreferencesPersistence(props){createEffect20(()=>{const location=currentLocation(props.api)
|
|
7043
|
+
untrack9(()=>props.controller.setActiveScope(preferencesScope({directory:location.routing.directory,worktree:props.api.state.path.worktree
|
|
7080
7044
|
})))
|
|
7081
7045
|
props.controller.load()
|
|
7082
7046
|
})
|
|
7083
7047
|
return _$createElement("box")
|
|
7084
7048
|
}
|
|
7085
7049
|
function FirstRunWizardPersistence(props){let isChecked=false
|
|
7086
|
-
|
|
7050
|
+
createEffect20(()=>{if(isChecked)
|
|
7087
7051
|
return
|
|
7088
7052
|
isChecked=true
|
|
7089
7053
|
showFirstRunWizard(props.api,props.preferences).catch(()=>{})
|
|
@@ -7121,7 +7085,7 @@ _$setProp(_el$2,"flexDirection","row")
|
|
|
7121
7085
|
_$setProp(_el$2,"justifyContent","space-between")
|
|
7122
7086
|
_$setProp(_el$2,"gap",1)
|
|
7123
7087
|
_$setProp(_el$3,"flexGrow",1)
|
|
7124
|
-
_$insert(_el$3,_$createComponent(
|
|
7088
|
+
_$insert(_el$3,_$createComponent(Show27,{get when(){return props.preferences.showSessionTitle()
|
|
7125
7089
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
7126
7090
|
_$insertNode(_el$4,_el$5)
|
|
7127
7091
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -7129,7 +7093,7 @@ _$insert(_el$5,()=>props.title)
|
|
|
7129
7093
|
_$effect((_$p)=>_$setProp(_el$4,"fg",theme().text,_$p))
|
|
7130
7094
|
return _el$4
|
|
7131
7095
|
}}),null)
|
|
7132
|
-
_$insert(_el$3,_$createComponent(
|
|
7096
|
+
_$insert(_el$3,_$createComponent(Show27,{get when(){return _$memo(()=>!!props.preferences.showSessionDate())()&&created()
|
|
7133
7097
|
},children:(value)=>(()=>{var _el$6=_$createElement("text")
|
|
7134
7098
|
_$insert(_el$6,value)
|
|
7135
7099
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().textMuted,_$p))
|
|
@@ -7169,6 +7133,17 @@ return
|
|
|
7169
7133
|
const [user,project]=await Promise.all([safe(userPath?readSource(userPath,()=>readFile2(userPath,"utf8")):undefined),safe(readProject?readSource(".opencode/navigator.json",readProject):undefined)])
|
|
7170
7134
|
return mergeConfiguredDefaults(configuredDefaultsFromPluginOptions(options),user,project)
|
|
7171
7135
|
}
|
|
7136
|
+
|
|
7137
|
+
|
|
7138
|
+
function LimitsPersistence(props){createEffect21(()=>{const{model,adapter
|
|
7139
|
+
}=props.controller.current()
|
|
7140
|
+
if(model&&adapter)
|
|
7141
|
+
untrack10(()=>void props.controller.refresh(true))
|
|
7142
|
+
})
|
|
7143
|
+
const timer=setInterval(()=>void props.controller.refresh(),5000)
|
|
7144
|
+
onCleanup25(()=>clearInterval(timer))
|
|
7145
|
+
return _$createElement("box")
|
|
7146
|
+
}
|
|
7172
7147
|
import {homedir,homedir as homedir2} from "os"
|
|
7173
7148
|
|
|
7174
7149
|
function location(input){return input.directory?{location:{directory:input.directory}}:{}}
|
|
@@ -7262,7 +7237,7 @@ return false
|
|
|
7262
7237
|
}
|
|
7263
7238
|
function enabled(value){return typeof value==="function"?value():value!==false
|
|
7264
7239
|
}
|
|
7265
|
-
function createV2Keymap(context){const [revision,setRevision]=
|
|
7240
|
+
function createV2Keymap(context){const [revision,setRevision]=createSignal32(0)
|
|
7266
7241
|
const layers=new Map
|
|
7267
7242
|
let sequence=0
|
|
7268
7243
|
function layerActive(layer){const mode=layer.mode??"base"
|
|
@@ -7373,7 +7348,7 @@ function legacyTheme(theme){return{primary:theme.hue.interactive[200],secondary:
|
|
|
7373
7348
|
|
|
7374
7349
|
function createV2UI(context){let dialogOpen=false
|
|
7375
7350
|
function DialogPrompt(props){let active=true
|
|
7376
|
-
|
|
7351
|
+
onCleanup26(()=>{active=false
|
|
7377
7352
|
})
|
|
7378
7353
|
onMount7(async ()=>{const value=await context.ui.dialog.prompt({title:props.title,placeholder:props.placeholder,value:props.value
|
|
7379
7354
|
})
|
|
@@ -7387,7 +7362,7 @@ props.onConfirm?.(value)
|
|
|
7387
7362
|
return _$createElement("box")
|
|
7388
7363
|
}
|
|
7389
7364
|
function DialogConfirm(props){let active=true
|
|
7390
|
-
|
|
7365
|
+
onCleanup26(()=>{active=false
|
|
7391
7366
|
})
|
|
7392
7367
|
onMount7(async ()=>{const confirmed=await context.ui.dialog.confirm({title:props.title,message:props.message
|
|
7393
7368
|
})
|
|
@@ -7459,6 +7434,11 @@ for(let index=disposers.length-1;index>=0; index--)
|
|
|
7459
7434
|
await disposers[index]()
|
|
7460
7435
|
disposers.length=0
|
|
7461
7436
|
}}}
|
|
7437
|
+
function selectedV2Model(context){const route=context.ui.router.current()
|
|
7438
|
+
const model=context.ui.model.current()
|
|
7439
|
+
if(route.type!=="session"||!model)
|
|
7440
|
+
return
|
|
7441
|
+
return{sessionID:route.sessionID,providerID:model.providerID,modelID:model.modelID,...model.variant&&{variant:model.variant}}}
|
|
7462
7442
|
|
|
7463
7443
|
|
|
7464
7444
|
import {fileURLToPath} from "url"
|
|
@@ -7525,16 +7505,28 @@ if(item.source.target.startsWith("."))
|
|
|
7525
7505
|
throw new Error("Unrecognized local Navigator source")
|
|
7526
7506
|
await context.client.plugin.update({location:response.location,targets:[item.source.target]})
|
|
7527
7507
|
}}}
|
|
7528
|
-
async function setupNavigator(api,options,readProject,managedTodo){const config=pluginConfig(undefined)
|
|
7508
|
+
async function setupNavigator(api,options,readProject,managedTodo,selectedModel){const config=pluginConfig(undefined)
|
|
7529
7509
|
const configured=await loadConfiguredDefaults(api,options,readProject)
|
|
7530
7510
|
const todo=managedTodo??createTodoController(api)
|
|
7531
7511
|
const subagents=createSubagentController(api)
|
|
7532
7512
|
const skills=createSkillController(api)
|
|
7533
7513
|
const preferences=createPreferencesController(api,config,createPreferencesStore(api.state.path.state),configured)
|
|
7514
|
+
const limitsPath=import.meta.url.includes("/dist/tui.js")?"./provider-limits.js":"../provider-limits"
|
|
7515
|
+
const limitsModule=await import(limitsPath)
|
|
7516
|
+
const codex=limitsModule.createCodexQuotaAdapter(limitsModule.createCodexAppServerClient({version:"0.20.0"
|
|
7517
|
+
}))
|
|
7518
|
+
const LimitsSection=limitsModule.ProviderLimitsSection
|
|
7519
|
+
const limits=limitsModule.createProviderLimitsController([codex],()=>{const model=selectedModel?.()??limitsModule.selectedV1Model(api)
|
|
7520
|
+
if(!model)
|
|
7521
|
+
return
|
|
7522
|
+
const accountID=preferences.codexAccountForModel(model.providerID,model.modelID)
|
|
7523
|
+
return{...model,...accountID&&{accountID
|
|
7524
|
+
}}},api.lifecycle.signal)
|
|
7534
7525
|
const mcp=createMcpController(api,preferences.persistMcp,preferences)
|
|
7535
7526
|
const interaction=createSidebarInteraction(api,()=>openKeyboardHelp(api,preferences.lspIconStyle,preferences.cornerFont))
|
|
7536
7527
|
const startup=createStartupSessionController(api,preferences)
|
|
7537
7528
|
api.lifecycle.onDispose(()=>preferences.flush())
|
|
7529
|
+
api.lifecycle.onDispose(()=>limits.dispose())
|
|
7538
7530
|
api.lifecycle.onDispose(()=>interaction.dispose())
|
|
7539
7531
|
const unsubscribeMcp=api.event.on("mcp.tools.changed",()=>{mcp.refresh().catch(()=>{})
|
|
7540
7532
|
})
|
|
@@ -7547,6 +7539,7 @@ api.lifecycle.onDispose(unsubscribeConnected)
|
|
|
7547
7539
|
api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7548
7540
|
},get multilineCorners(){return preferences.cornerFont
|
|
7549
7541
|
},get children(){return [_$createComponent(PreferencesPersistence,{api,controller:preferences
|
|
7542
|
+
}),_$createComponent(LimitsPersistence,{controller:limits
|
|
7550
7543
|
}),_$memo(()=>_$memo(()=>!!supportsPermissionMode(api))()&&_$createComponent(PermissionModeBinding,{api,preferences
|
|
7551
7544
|
})),_$createComponent(SettingsBinding,{api,preferences,mcp,skills
|
|
7552
7545
|
}),_$createComponent(SidebarToggleBinding,{api,preferences
|
|
@@ -7555,7 +7548,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
|
|
|
7555
7548
|
},interaction,skills,subagents,mcp
|
|
7556
7549
|
}),_$createComponent(FirstRunWizardPersistence,{api,preferences
|
|
7557
7550
|
}),_$createComponent(StartupSessionBinding,{api,controller:startup
|
|
7558
|
-
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.
|
|
7551
|
+
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.20.0"
|
|
7559
7552
|
}),_$createComponent(McpPersistence,{api,controller:mcp
|
|
7560
7553
|
})]
|
|
7561
7554
|
}})
|
|
@@ -7568,7 +7561,8 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
|
|
|
7568
7561
|
},sidebar_content(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7569
7562
|
},get multilineCorners(){return preferences.cornerFont
|
|
7570
7563
|
},get children(){return _$createComponent(SidebarContent,{api,get onNewSession(){return startup.handleNewSession
|
|
7571
|
-
},mcp,
|
|
7564
|
+
},mcp,limitsSection:(navigationSection)=>_$createComponent(LimitsSection,{api,preferences,interaction,controller:limits,codex,navigationSection
|
|
7565
|
+
}),todo,subagents,skills,preferences,interaction,get sessionID(){return props.session_id
|
|
7572
7566
|
}})
|
|
7573
7567
|
}})
|
|
7574
7568
|
}}})
|
|
@@ -7585,12 +7579,12 @@ throw result.error
|
|
|
7585
7579
|
}
|
|
7586
7580
|
return result.data?.type==="text"?result.data.content:undefined
|
|
7587
7581
|
})
|
|
7588
|
-
const versionStatus=createVersionStatus(api,"0.
|
|
7589
|
-
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.
|
|
7582
|
+
const versionStatus=createVersionStatus(api,"0.20.0")
|
|
7583
|
+
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.20.0"))
|
|
7590
7584
|
api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7591
7585
|
},get multilineCorners(){return preferences.cornerFont
|
|
7592
7586
|
},get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
|
|
7593
|
-
},navigatorVersion:"0.
|
|
7587
|
+
},navigatorVersion:"0.20.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7594
7588
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7595
7589
|
}})
|
|
7596
7590
|
}})
|
|
@@ -7603,16 +7597,16 @@ const{mcp,skills,preferences
|
|
|
7603
7597
|
return
|
|
7604
7598
|
return new TextDecoder().decode(await context.client.file.read({location:context.location,path:".opencode/navigator.json"
|
|
7605
7599
|
}))
|
|
7606
|
-
},todo)
|
|
7607
|
-
const versionStatus=createVersionStatus(adapter.api,"0.
|
|
7608
|
-
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.
|
|
7600
|
+
},todo,()=>selectedV2Model(context))
|
|
7601
|
+
const versionStatus=createVersionStatus(adapter.api,"0.20.0")
|
|
7602
|
+
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.20.0"))
|
|
7609
7603
|
const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7610
7604
|
},get multilineCorners(){return preferences.cornerFont
|
|
7611
7605
|
},get children(){var _el$=_$createElement("box")
|
|
7612
7606
|
_$setProp(_el$,"flexDirection","row")
|
|
7613
7607
|
_$setProp(_el$,"justifyContent","space-between")
|
|
7614
7608
|
_$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
|
|
7615
|
-
},navigatorVersion:"0.
|
|
7609
|
+
},navigatorVersion:"0.20.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7616
7610
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7617
7611
|
}}),null)
|
|
7618
7612
|
_$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api
|
|
@@ -7627,5 +7621,5 @@ await adapter.dispose()
|
|
|
7627
7621
|
var plugin={id:PLUGIN_ID,tui:setupOpenCodeV1,setup:setupOpenCodeV2
|
|
7628
7622
|
}
|
|
7629
7623
|
var plugin_default=plugin
|
|
7630
|
-
export{DEFAULT_SECTION_EXPANSION,DialogSurface,FOCUS_COMMAND,FirstRunWizard,KeyboardHelpDialog,LspBadge,McpSection,PresetMenu,QUICK_ACTIONS,Section,SectionFilter,SelectionBox,SettingsDialog,SidebarFocusBinding,SidebarToggleBinding,SkillsSection,createDialogStack,createMcpController,createPreferencesController,createSidebarInteraction,createSkillController,createSubagentController,createTodoController,plugin_default as default,isEffectivelyVisible,lspIcon,matchesFilter,openFirstRunWizard,openKeyboardHelp,openSettings,showFirstRunWizard,useDialogScroll,useDialogState,useDialogs,useIcons
|
|
7624
|
+
export{DEFAULT_SECTION_EXPANSION,DialogAction,DialogHeader,DialogSurface,FOCUS_COMMAND,FirstRunWizard,GuardedConfirmation,KeyboardHelpDialog,LspBadge,McpSection,SelectionMenu as PresetMenu,QUICK_ACTIONS,Section,SectionFilter,SelectionBox,SelectionMenu,SettingsDialog,SidebarFocusBinding,SidebarToggleBinding,SkillsSection,createDialogStack,createMcpController,createPreferencesController,createSidebarInteraction,createSkillController,createSubagentController,createTodoController,plugin_default as default,isEffectivelyVisible,lspIcon,matchesFilter,openFirstRunWizard,openKeyboardHelp,openSettings,showFirstRunWizard,useDialogScroll,useDialogState,useDialogs,useIcons
|
|
7631
7625
|
}
|