opencode-navigator 0.19.3 → 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 +7 -0
- package/README.md +101 -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 +248 -267
- 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
|
}
|
|
@@ -915,13 +917,13 @@ return _el$
|
|
|
915
917
|
|
|
916
918
|
|
|
917
919
|
|
|
918
|
-
function
|
|
920
|
+
function SelectionMenu(props){const icons=useIcons()
|
|
919
921
|
const dialogs=useDialogs(props.api)
|
|
920
922
|
const scroll=useDialogScroll()
|
|
921
923
|
const [active,setActive]=useDialogState("selection",0)
|
|
922
924
|
const theme=()=>props.api.theme.current
|
|
923
925
|
let body
|
|
924
|
-
const prefix=`${PLUGIN_ID}.
|
|
926
|
+
const prefix=`${PLUGIN_ID}.selection-menu`
|
|
925
927
|
createEffect3(()=>{if(active()>=props.options.length)
|
|
926
928
|
setActive(Math.max(0,props.options.length-1))
|
|
927
929
|
})
|
|
@@ -1016,6 +1018,19 @@ return _el$7
|
|
|
1016
1018
|
}
|
|
1017
1019
|
|
|
1018
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
|
+
|
|
1019
1034
|
|
|
1020
1035
|
|
|
1021
1036
|
|
|
@@ -1061,7 +1076,7 @@ return _p$
|
|
|
1061
1076
|
return _el$
|
|
1062
1077
|
}}))
|
|
1063
1078
|
}
|
|
1064
|
-
function McpErrorDialog(props){return _$createComponent(
|
|
1079
|
+
function McpErrorDialog(props){return _$createComponent(SelectionMenu,{get api(){return props.api
|
|
1065
1080
|
},get title(){return `MCP error \xB7 ${props.name}`
|
|
1066
1081
|
},height:12,get options(){return [{title:`Status \xB7 ${props.status}`,value:"error",description:props.error,icon:"error"
|
|
1067
1082
|
}]
|
|
@@ -1222,6 +1237,11 @@ return server.trim()&&group?[[server,group]]:[]
|
|
|
1222
1237
|
}))
|
|
1223
1238
|
}
|
|
1224
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}}}
|
|
1225
1245
|
function parseWorkspaceProfiles(value){return Object.fromEntries(Object.entries(record(value)??{}).flatMap(([layout,rawMcp])=>{const layoutName=layout.trim().slice(0,64)
|
|
1226
1246
|
const mcpName=typeof rawMcp==="string"?rawMcp.trim().slice(0,64):""
|
|
1227
1247
|
return layoutName&&mcpName?[[layoutName,mcpName]]:[]
|
|
@@ -1256,11 +1276,13 @@ const recentSkills=parseRecentSkills(userInput?.recentSkills)
|
|
|
1256
1276
|
const recentQuickActions=parseRecentQuickActions(userInput?.recentQuickActions)
|
|
1257
1277
|
const mcpServerGroups=parseMcpServerGroups(userInput?.mcpServerGroups)
|
|
1258
1278
|
const skillGroups=parseSkillGroups(userInput?.skillGroups)
|
|
1279
|
+
const codexAccountBindings=parseCodexAccountBindings(userInput?.codexAccountBindings)
|
|
1280
|
+
const pendingResetAttempt=parsePendingResetAttempt(userInput?.pendingResetAttempt)
|
|
1259
1281
|
const workspaceProfiles=parseWorkspaceProfiles(userInput?.workspaceProfiles)
|
|
1260
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
|
|
1261
1283
|
},...typeof userInput?.lastNavigatorVersion==="string"&&{lastNavigatorVersion:userInput.lastNavigatorVersion
|
|
1262
1284
|
},...typeof userInput?.previousNavigatorVersion==="string"&&{previousNavigatorVersion:userInput.previousNavigatorVersion
|
|
1263
|
-
},...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
|
|
1264
1286
|
},...Object.keys(workspaceProfiles).length>0&&{workspaceProfiles}}}}
|
|
1265
1287
|
function parseValues(value){if(!value)
|
|
1266
1288
|
return{}
|
|
@@ -1408,6 +1430,15 @@ const recentSkills=parseRecentSkills([...update.user?.recentSkill?[update.user.r
|
|
|
1408
1430
|
const recentQuickActions=parseRecentQuickActions([...update.user?.recentQuickAction?[update.user.recentQuickAction]:[],...current.user.recentQuickActions??[]])
|
|
1409
1431
|
const mcpServerGroups=assignGroup(current.user.mcpServerGroups,update.user?.mcpServerGroup?.name,update.user?.mcpServerGroup?.group)
|
|
1410
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
|
|
1411
1442
|
const favoriteSkills=update.user?.favoriteSkills?parseSkillConfirmations(update.user.favoriteSkills):[...current.user.favoriteSkills??[]]
|
|
1412
1443
|
const favoriteSkill=update.user?.favoriteSkill
|
|
1413
1444
|
if(favoriteSkill?.location){const index=favoriteSkills.indexOf(favoriteSkill.location)
|
|
@@ -1423,7 +1454,8 @@ return{global:target.kind==="global"?scope:current.global,worktrees,user:{...ski
|
|
|
1423
1454
|
},...(update.user?.previousNavigatorVersion??current.user.previousNavigatorVersion)&&{previousNavigatorVersion:update.user?.previousNavigatorVersion??current.user.previousNavigatorVersion
|
|
1424
1455
|
},...Object.keys(parsedLayoutPresets).length>0&&{layoutPresets:parsedLayoutPresets},...Object.keys(parsedMcpPresets).length>0&&{mcpPresets:parsedMcpPresets},...Object.keys(workspaceProfiles).length>0&&{workspaceProfiles:parseWorkspaceProfiles(workspaceProfiles)
|
|
1425
1456
|
},...favoriteSkills.length>0&&{favoriteSkills},...favoriteMcpServers.size>0&&{favoriteMcpServers:[...favoriteMcpServers].sort()},...favoriteQuickActions.size>0&&{favoriteQuickActions:parseFavoriteQuickActions([...favoriteQuickActions])
|
|
1426
|
-
},...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
|
|
1427
1459
|
}}}}
|
|
1428
1460
|
function targetForLegacyScope(scope){return scope==="global"?{kind:"global"}:{kind:"worktree",key:scope}}
|
|
1429
1461
|
function createPreferencesStore(stateDirectory){const directory=join(stateDirectory,LEGACY_PLUGIN_ID)
|
|
@@ -1594,6 +1626,8 @@ const [recentQuickActions,setRecentQuickActions]=createSignal4([])
|
|
|
1594
1626
|
const [mcpServerGroups,setMcpServerGroups]=createSignal4(configured.mcpServerGroups??{})
|
|
1595
1627
|
const [skillGroups,setSkillGroups]=createSignal4({})
|
|
1596
1628
|
const [autoApprovePermissions,setAutoApprovePermissions]=createSignal4()
|
|
1629
|
+
const [codexAccountBindings,setCodexAccountBindings]=createSignal4({})
|
|
1630
|
+
const [pendingResetAttempt,setPendingResetAttempt]=createSignal4()
|
|
1597
1631
|
const [ready,setReady]=createSignal4(false)
|
|
1598
1632
|
const [revision,setRevision]=createSignal4(0)
|
|
1599
1633
|
const sessionLayouts=new Map
|
|
@@ -1663,6 +1697,8 @@ setRecentQuickActions(value.user.recentQuickActions??[])
|
|
|
1663
1697
|
setMcpServerGroups({...configured.mcpServerGroups,...value.user.mcpServerGroups})
|
|
1664
1698
|
setSkillGroups(value.user.skillGroups??{})
|
|
1665
1699
|
setAutoApprovePermissions(value.user.autoApprovePermissions)
|
|
1700
|
+
setCodexAccountBindings(value.user.codexAccountBindings??{})
|
|
1701
|
+
setPendingResetAttempt(value.user.pendingResetAttempt)
|
|
1666
1702
|
setReady(true)
|
|
1667
1703
|
refreshResolved()
|
|
1668
1704
|
}
|
|
@@ -1783,6 +1819,21 @@ return
|
|
|
1783
1819
|
setAutoApprovePermissions(value)
|
|
1784
1820
|
update({user:{autoApprovePermissions:value}})
|
|
1785
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
|
+
}
|
|
1786
1837
|
function toggleFavoriteMcpServer(name){if(!isHydrated){load().then(()=>toggleFavoriteMcpServer(name))
|
|
1787
1838
|
return
|
|
1788
1839
|
}
|
|
@@ -1853,7 +1904,13 @@ throw new Error("MCP preset no longer exists")
|
|
|
1853
1904
|
update({user:{workspaceProfile:{layout,mcp}}})
|
|
1854
1905
|
},favoriteSkills,favoriteMcpServers,favoriteQuickActions,toggleFavoriteMcpServer,toggleFavoriteQuickAction,recentSkills,recentQuickActions,mcpServerGroups,setMcpServerGroup(name,value){setMcpServerGroups(assignGroup(mcpServerGroups(),name,value))
|
|
1855
1906
|
update({user:{mcpServerGroup:{name,group:value}}})
|
|
1856
|
-
},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()
|
|
1857
1914
|
if(!skill.location)
|
|
1858
1915
|
return
|
|
1859
1916
|
setRecentSkills(parseRecentSkills([skill.location,...recentSkills()]))
|
|
@@ -2643,7 +2700,7 @@ value=`${Math.floor(seconds / 60)}m ${String(seconds % 60).padStart(2, "0")}s`
|
|
|
2643
2700
|
return value
|
|
2644
2701
|
}
|
|
2645
2702
|
function createSubagentClock(key){const [now,setNow]=createSignal9(Date.now())
|
|
2646
|
-
|
|
2703
|
+
createEffect5(()=>{if(key()===undefined)
|
|
2647
2704
|
return
|
|
2648
2705
|
setNow(Date.now())
|
|
2649
2706
|
const timer=setInterval(()=>setNow(Date.now()),1000)
|
|
@@ -3101,7 +3158,7 @@ unregister()
|
|
|
3101
3158
|
onMount(()=>{input?.focus()
|
|
3102
3159
|
refresh().catch(report)
|
|
3103
3160
|
})
|
|
3104
|
-
|
|
3161
|
+
createEffect6(()=>{if(!sameContext())
|
|
3105
3162
|
dialogs.close()
|
|
3106
3163
|
})
|
|
3107
3164
|
return{active,activeTab,activate,allErrors,byID,dialogs,errors,icons,loading,matches,prefix,query,queryScope,resultColors,results,selectTab,setBody(node){body=node
|
|
@@ -3338,7 +3395,7 @@ timers.add(timer)
|
|
|
3338
3395
|
}},{name:`${LEGACY_PLUGIN_ID}.search`,run(){props.api.keymap.dispatchCommand(SEARCH_COMMAND)
|
|
3339
3396
|
}}]
|
|
3340
3397
|
})
|
|
3341
|
-
|
|
3398
|
+
createEffect7(()=>{const key=props.preferences.searchKey()
|
|
3342
3399
|
const remove=props.api.keymap.registerLayer({mode:"base",bindings:[{key,cmd:SEARCH_COMMAND
|
|
3343
3400
|
}]
|
|
3344
3401
|
})
|
|
@@ -3352,18 +3409,6 @@ clearTimeout(timer)
|
|
|
3352
3409
|
return _$createElement("box")
|
|
3353
3410
|
}
|
|
3354
3411
|
|
|
3355
|
-
function createLayoutPresetPreview(preferences,name){const scope=preferences.selectedScopeKey()
|
|
3356
|
-
const valid=()=>preferences.selectedScopeKey()===scope
|
|
3357
|
-
const preset=createMemo2(()=>preferences.layoutPresets()[name])
|
|
3358
|
-
const preview=createMemo2(()=>{const value=preset()
|
|
3359
|
-
return value?preferences.previewLayoutPreset(value):undefined
|
|
3360
|
-
})
|
|
3361
|
-
return{valid,preview,scope:preferences.preferenceScopeLabel,blocked:()=>preset()?"":"Preset no longer exists.",apply(){const value=preset()
|
|
3362
|
-
if(!valid()||!value)
|
|
3363
|
-
return false
|
|
3364
|
-
preferences.applyLayoutPreset(value)
|
|
3365
|
-
return true
|
|
3366
|
-
}}}
|
|
3367
3412
|
function createMcpPresetPreview(controller,preferences,name){const target=controller.target()
|
|
3368
3413
|
const valid=()=>{const current=controller.target()
|
|
3369
3414
|
return current.key===target.key&¤t.scope===target.scope
|
|
@@ -3409,8 +3454,8 @@ function supportsTitleVisibility(api){return hostCapabilities(api).titleVisibili
|
|
|
3409
3454
|
function supportsPermissionMode(api){return hostCapabilities(api).permissionMode!==false
|
|
3410
3455
|
}
|
|
3411
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."}]
|
|
3412
|
-
},{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."
|
|
3413
|
-
},{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."
|
|
3414
3459
|
}]
|
|
3415
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."
|
|
3416
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."
|
|
@@ -3806,7 +3851,7 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
|
|
|
3806
3851
|
}]
|
|
3807
3852
|
})
|
|
3808
3853
|
onCleanup9(unregister)
|
|
3809
|
-
|
|
3854
|
+
createEffect8(()=>{if(!props.valid())
|
|
3810
3855
|
dialogs.close()
|
|
3811
3856
|
})
|
|
3812
3857
|
return _$createComponent(DialogSurface,{get api(){return props.api
|
|
@@ -3980,55 +4025,6 @@ const description=row.desired?{missing:`Not available in this workspace \xB7 tar
|
|
|
3980
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"
|
|
3981
4026
|
}}).sort((a,b)=>Number(b.changed)-Number(a.changed)||Number(b.skipped)-Number(a.skipped))
|
|
3982
4027
|
}
|
|
3983
|
-
function LayoutPresetPreview(props){const dialogs=useDialogs(props.api)
|
|
3984
|
-
const icons=useIcons()
|
|
3985
|
-
const model=createLayoutPresetPreview(props.preferences,props.name)
|
|
3986
|
-
const linked=props.preferences.workspaceProfiles?.()[props.name]
|
|
3987
|
-
const mcpModel=props.controller&&linked?createMcpPresetPreview(props.controller,props.preferences,linked):undefined
|
|
3988
|
-
const rows=createMemo4(()=>model.preview()?.rows.map((row)=>{const changes=[]
|
|
3989
|
-
if(row.visibility[0]!==row.visibility[1])
|
|
3990
|
-
changes.push(`${row.visibility[0] ? "visible" : "hidden"} -> ${row.visibility[1] ? "visible" : "hidden"}`)
|
|
3991
|
-
if(row.expansion[0]!==row.expansion[1])
|
|
3992
|
-
changes.push(`${row.expansion[0] ? "expanded" : "collapsed"} -> ${row.expansion[1] ? "expanded" : "collapsed"}`)
|
|
3993
|
-
if(row.position[0]!==row.position[1])
|
|
3994
|
-
changes.push(`position ${row.position[0]} -> ${row.position[1]}`)
|
|
3995
|
-
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"
|
|
3996
|
-
}}).sort((a,b)=>Number(b.changed)-Number(a.changed))??[])
|
|
3997
|
-
const mcpRows=createMemo4(()=>mcpModel?mcpPreviewRows(mcpModel,icons):[])
|
|
3998
|
-
const changed=()=>rows().filter((row)=>row.changed).length
|
|
3999
|
-
onMount3(()=>mcpModel?.refresh())
|
|
4000
|
-
return _$createComponent(PresetPreviewFrame,{get api(){return props.api
|
|
4001
|
-
},get title(){return `${mcpModel ? "Workspace profile" : "Layout preview"}: ${props.name}`
|
|
4002
|
-
},get scope(){return mcpModel?`${model.scope()} \xB7 MCP ${mcpModel.scope}`:model.scope()
|
|
4003
|
-
},get stats(){return [{icon:"edit",label:`${changed()} layout changed`,tone:"accent"
|
|
4004
|
-
},{icon:"done",label:`${rows().length - changed()} layout unchanged`,tone:"muted"
|
|
4005
|
-
}]
|
|
4006
|
-
},get rowCount(){return rows().length + mcpRows().length
|
|
4007
|
-
},valid:()=>model.valid()&&(!mcpModel||mcpModel.valid()),get blocked(){return model.blocked()||mcpModel?.blocked()
|
|
4008
|
-
},get onRefresh(){return mcpModel?.refresh
|
|
4009
|
-
},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()
|
|
4010
|
-
if(mcpModel&&!request)
|
|
4011
|
-
return
|
|
4012
|
-
if(!model.apply())
|
|
4013
|
-
return
|
|
4014
|
-
if(mcpModel)
|
|
4015
|
-
dialogs.close()
|
|
4016
|
-
else{dialogs.back()
|
|
4017
|
-
dialogs.back()
|
|
4018
|
-
}
|
|
4019
|
-
props.api.ui.toast({variant:"success",title:mcpModel?"Workspace profile":"Layout presets",message:`${props.name} applied to ${model.scope()}`,duration:3000
|
|
4020
|
-
})
|
|
4021
|
-
if(request)
|
|
4022
|
-
reportMcpApplyError(props.api,request)
|
|
4023
|
-
},get children(){return [_$createComponent(For8,{get each(){return rows()
|
|
4024
|
-
},children:(row)=>_$createComponent(PresetPreviewRow,_$mergeProps({get api(){return props.api
|
|
4025
|
-
}},row))
|
|
4026
|
-
}),_$createComponent(For8,{get each(){return mcpRows()
|
|
4027
|
-
},children:(row)=>_$createComponent(PresetPreviewRow,_$mergeProps({get api(){return props.api
|
|
4028
|
-
}},row))
|
|
4029
|
-
})]
|
|
4030
|
-
}})
|
|
4031
|
-
}
|
|
4032
4028
|
|
|
4033
4029
|
|
|
4034
4030
|
|
|
@@ -4058,7 +4054,7 @@ if(renameFrom)
|
|
|
4058
4054
|
dialogs.back()
|
|
4059
4055
|
}})
|
|
4060
4056
|
}
|
|
4061
|
-
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"
|
|
4062
4058
|
},{title:"Update from current",value:"update",description:"replace the saved states",icon:"save"
|
|
4063
4059
|
},{title:"Rename",value:"rename",description:"change the preset name",icon:"edit"
|
|
4064
4060
|
},{title:"Delete",value:"delete",description:"remove this preset",icon:"delete"
|
|
@@ -4090,7 +4086,7 @@ notify(`Deleted ${name}`)
|
|
|
4090
4086
|
dialogs.back()
|
|
4091
4087
|
}}))
|
|
4092
4088
|
}
|
|
4093
|
-
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"
|
|
4094
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`
|
|
4095
4091
|
}))]
|
|
4096
4092
|
},onSelect:(option)=>option.value==="save"?prompt():actions(option.value.slice("preset:".length))
|
|
@@ -4123,61 +4119,6 @@ dialogs.open(()=>_$createComponent(PresetMenu,{api,title:"MCP presets",get optio
|
|
|
4123
4119
|
|
|
4124
4120
|
|
|
4125
4121
|
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
|
|
4132
|
-
function createLayoutPresetActions(input){function prompt(value="",renameFrom){input.dialogs.prompt({title:renameFrom?"Rename layout preset":"Save layout preset",description:()=>(()=>{var _el$=_$createElement("text")
|
|
4133
|
-
_$insertNode(_el$,_$createTextNode(`Save the current visible, expanded, and ordered sections.`))
|
|
4134
|
-
_$effect((_$p)=>_$setProp(_el$,"fg",input.api.theme.current.textMuted,_$p))
|
|
4135
|
-
return _el$
|
|
4136
|
-
})(),placeholder:"Preset name",value,onConfirm(nameInput){const name=renameFrom?input.preferences.renameLayoutPreset(renameFrom,nameInput):input.preferences.saveLayoutPreset(nameInput)
|
|
4137
|
-
input.dialogs.back()
|
|
4138
|
-
if(renameFrom)
|
|
4139
|
-
input.dialogs.back()
|
|
4140
|
-
input.api.ui.toast({variant:"success",title:"Layout presets",message:renameFrom?`Renamed to ${name}`:`Saved ${name}`,duration:3000
|
|
4141
|
-
})
|
|
4142
|
-
}})
|
|
4143
|
-
}
|
|
4144
|
-
function open(name){const linked=input.preferences.workspaceProfiles?.()[name]
|
|
4145
|
-
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)
|
|
4146
|
-
input.dialogs.back()
|
|
4147
|
-
input.dialogs.back()
|
|
4148
|
-
}})
|
|
4149
|
-
input.dialogs.open(()=>_$createComponent(PresetMenu,{get api(){return input.api
|
|
4150
|
-
},title:name,get options(){return [{title:"Preview & apply",value:"apply",icon:"info",description:linked?`profile \xB7 ${linked}`:"review layout changes"
|
|
4151
|
-
},{title:"Update from current",value:"update",icon:"save",description:"replace saved layout"
|
|
4152
|
-
},{title:"Rename\u2026",value:"rename",description:"change preset name",icon:"edit"
|
|
4153
|
-
},...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"
|
|
4154
|
-
}]:[],{title:"Delete",value:"delete",description:"remove preset",icon:"delete"
|
|
4155
|
-
}]
|
|
4156
|
-
},onSelect:(option)=>{switch(option.value){case "apply":{input.dialogs.open(()=>_$createComponent(LayoutPresetPreview,{get api(){return input.api
|
|
4157
|
-
},get preferences(){return input.preferences
|
|
4158
|
-
},get controller(){return input.mcp
|
|
4159
|
-
},name
|
|
4160
|
-
}),"large")
|
|
4161
|
-
break
|
|
4162
|
-
}
|
|
4163
|
-
case "update":{input.preferences.updateLayoutPreset(name)
|
|
4164
|
-
input.dialogs.back()
|
|
4165
|
-
input.api.ui.toast({variant:"success",title:"Layout presets",message:`Updated ${name}`,duration:3000
|
|
4166
|
-
})
|
|
4167
|
-
break
|
|
4168
|
-
}
|
|
4169
|
-
case "rename":{prompt(name,name)
|
|
4170
|
-
break
|
|
4171
|
-
}
|
|
4172
|
-
case "link":{link()
|
|
4173
|
-
break
|
|
4174
|
-
}
|
|
4175
|
-
default:{input.preferences.deleteLayoutPreset(name)
|
|
4176
|
-
input.dialogs.back()
|
|
4177
|
-
}}}}))
|
|
4178
|
-
}
|
|
4179
|
-
return{open,prompt
|
|
4180
|
-
}}
|
|
4181
4122
|
|
|
4182
4123
|
function titleVisibilityOptions(api,preferences,icons){if(!supportsTitleVisibility(api))
|
|
4183
4124
|
return []
|
|
@@ -4246,25 +4187,6 @@ input.openLimitPrompt(section)
|
|
|
4246
4187
|
|
|
4247
4188
|
|
|
4248
4189
|
|
|
4249
|
-
|
|
4250
|
-
|
|
4251
|
-
var RESET_ALL="__reset_all__"
|
|
4252
|
-
function TrustedSkillsDialog(props){const options=createMemo8(()=>{const locations=props.preferences.trustedSkillLocations()
|
|
4253
|
-
if(locations.length===0)
|
|
4254
|
-
return [{title:"Every skill requires confirmation",value:"empty",description:"No trusted skills",icon:"info"
|
|
4255
|
-
}]
|
|
4256
|
-
return [{title:"Require confirmation for all",value:RESET_ALL,description:`Revoke trust for ${locations.length} skill${locations.length === 1 ? "" : "s"}`,icon:"reset"
|
|
4257
|
-
},...locations.map((location)=>({title:location.split("/").at(-2)??location,value:location,description:location,icon:"checked"
|
|
4258
|
-
}))]
|
|
4259
|
-
})
|
|
4260
|
-
return _$createComponent(PresetMenu,{get api(){return props.api
|
|
4261
|
-
},title:"Trusted skills",get options(){return options()
|
|
4262
|
-
},onSelect:(option)=>{if(option.value===RESET_ALL)
|
|
4263
|
-
props.preferences.resetSkillConfirmations()
|
|
4264
|
-
else if(option.value!=="empty")
|
|
4265
|
-
props.preferences.revokeSkillConfirmation(option.value)
|
|
4266
|
-
}})
|
|
4267
|
-
}
|
|
4268
4190
|
function createSettingsSelection(input){const dialogClosed=()=>("open" in input.api.ui.dialog)&&!input.api.ui.dialog.open
|
|
4269
4191
|
function openLimitPrompt(section){const index=input.options().findIndex((option)=>option.value===section)
|
|
4270
4192
|
if(index!==-1)
|
|
@@ -4300,36 +4222,11 @@ function exportSettings(){const copied=input.api.renderer.copyToClipboardOSC52(i
|
|
|
4300
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
|
|
4301
4223
|
})
|
|
4302
4224
|
}
|
|
4303
|
-
function importSettings(){
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
})
|
|
4308
|
-
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"
|
|
4309
|
-
}]:[],...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"
|
|
4310
|
-
}]:[],...preview.unsupported.map((path)=>({title:"Unsupported field \xB7 SKIPPED",value:"status",description:path,icon:"error"
|
|
4311
|
-
})),...preview.layoutChanged||preview.mcpChanged?[{title:"Apply imported settings",value:"apply",description:preview.target,icon:"done"
|
|
4312
|
-
}]:[],{title:"Cancel",value:"cancel",description:"return without changes",icon:"close"
|
|
4313
|
-
}]
|
|
4314
|
-
let applying=false
|
|
4315
|
-
async function apply(){applying=true
|
|
4316
|
-
try{await input.preferences.applyPortableSettings(preview)
|
|
4317
|
-
input.api.ui.toast({variant:"success",title:"Portable settings",message:"Layout and MCP settings imported",duration:3000
|
|
4318
|
-
})
|
|
4319
|
-
input.dialogs.back()
|
|
4320
|
-
} catch(error){applying=false
|
|
4321
|
-
input.api.ui.toast({variant:"error",title:"Portable settings",message:error instanceof Error?error.message:"Could not import settings",duration:5000
|
|
4322
|
-
})
|
|
4323
|
-
}}
|
|
4324
|
-
input.dialogs.replace(()=>_$createComponent(PresetMenu,{get api(){return input.api
|
|
4325
|
-
},title:"Settings import preview",options,get height(){return Math.min(options.length*3,18)
|
|
4326
|
-
},onSelect:(option)=>{if(option.value==="cancel")
|
|
4327
|
-
input.dialogs.back()
|
|
4328
|
-
if(option.value!=="apply"||applying)
|
|
4329
|
-
return
|
|
4330
|
-
apply()
|
|
4331
|
-
}}))
|
|
4332
|
-
}})
|
|
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
|
+
}))
|
|
4333
4230
|
}
|
|
4334
4231
|
function select(value=input.options()[input.active()]?.value){if(!value)
|
|
4335
4232
|
return
|
|
@@ -4400,9 +4297,16 @@ break
|
|
|
4400
4297
|
case "reset_mcp":{input.preferences.resetMcpStates()
|
|
4401
4298
|
break
|
|
4402
4299
|
}
|
|
4403
|
-
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
|
|
4404
4306
|
},get preferences(){return input.preferences
|
|
4405
4307
|
}}))
|
|
4308
|
+
}).catch((error)=>input.api.ui.toast({variant:"error",title:"Trusted skills",message:String(error)
|
|
4309
|
+
}))
|
|
4406
4310
|
break
|
|
4407
4311
|
}
|
|
4408
4312
|
case "wizard":{input.dialogs.open(()=>_$createComponent(FirstRunWizard,{get api(){return input.api
|
|
@@ -4465,19 +4369,19 @@ const icons=useIcons()
|
|
|
4465
4369
|
const dialogs=useDialogs(props.api)
|
|
4466
4370
|
const scroll=useDialogScroll()
|
|
4467
4371
|
const dimensions=useTerminalDimensions6()
|
|
4468
|
-
const bodyHeight=
|
|
4372
|
+
const bodyHeight=createMemo8(()=>Math.max(4,Math.floor(dimensions().height*0.75)-10))
|
|
4469
4373
|
const orderedGroups=createSettingsGroups(props.api,props.preferences,icons)
|
|
4470
4374
|
const initialGroup=orderedGroups().find((group)=>group.options.some((option)=>option.value===props.activeValue))
|
|
4471
4375
|
const [activeGroup,setActiveGroup]=useDialogState("tab",initialGroup?.id??orderedGroups()[0].id)
|
|
4472
|
-
const options=
|
|
4376
|
+
const options=createMemo8(()=>orderedGroups().find((group)=>group.id===activeGroup())?.options??[])
|
|
4473
4377
|
const optionId=(value)=>`${PLUGIN_ID}.settings.${value}`
|
|
4474
4378
|
const initialActive=options().findIndex((option)=>option.value===props.activeValue)
|
|
4475
4379
|
const [active,setActive]=useDialogState("selection",Math.max(0,initialActive))
|
|
4476
|
-
|
|
4380
|
+
createEffect11(()=>{if(active()>=options().length)
|
|
4477
4381
|
setActive(Math.max(0,options().length-1))
|
|
4478
4382
|
})
|
|
4479
|
-
const contentHeight=
|
|
4480
|
-
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`
|
|
4481
4385
|
if(activeGroup()==="sections")
|
|
4482
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`
|
|
4483
4387
|
if(activeGroup()==="presets")
|
|
@@ -4518,9 +4422,20 @@ setActive(next)
|
|
|
4518
4422
|
body?.scrollChildIntoView(optionId(value))
|
|
4519
4423
|
})
|
|
4520
4424
|
}
|
|
4521
|
-
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
|
|
4522
4430
|
})
|
|
4523
|
-
|
|
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")
|
|
4524
4439
|
})
|
|
4525
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
|
|
4526
4441
|
})
|
|
@@ -4715,7 +4630,7 @@ return title.startsWith("Enable auto-approve permissions")?false:undefined
|
|
|
4715
4630
|
}
|
|
4716
4631
|
function PermissionModeBinding(props){let applying=false
|
|
4717
4632
|
let observed
|
|
4718
|
-
|
|
4633
|
+
createEffect12(()=>{if(!props.preferences.ready())
|
|
4719
4634
|
return
|
|
4720
4635
|
const preferred=props.preferences.autoApprovePermissions()
|
|
4721
4636
|
const current=currentPermissionMode(props.api)
|
|
@@ -4751,6 +4666,8 @@ return _$createComponent(IconControl,{id:`${PLUGIN_ID}.settings.footer`,get icon
|
|
|
4751
4666
|
},onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),onMouseUp:()=>openSettings(props.api,props.preferences,undefined,props.mcp,props.skills)
|
|
4752
4667
|
})
|
|
4753
4668
|
}
|
|
4669
|
+
|
|
4670
|
+
|
|
4754
4671
|
import {realpathSync} from "fs"
|
|
4755
4672
|
function routeKey(api){const route=api.route.current
|
|
4756
4673
|
return `${route.name}:${"params" in route ? route.params?.sessionID ?? "" : ""}`
|
|
@@ -4814,7 +4731,7 @@ queueMicrotask(()=>void props.controller.start())
|
|
|
4814
4731
|
})
|
|
4815
4732
|
onCleanup14(unregister)
|
|
4816
4733
|
} else
|
|
4817
|
-
|
|
4734
|
+
createEffect13(()=>{if(!props.controller.enabled())
|
|
4818
4735
|
return
|
|
4819
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()
|
|
4820
4737
|
}]
|
|
@@ -5112,7 +5029,7 @@ return !needle||values.some((value)=>value?.toLocaleLowerCase().includes(needle)
|
|
|
5112
5029
|
|
|
5113
5030
|
function position(descriptor){return typeof descriptor.position==="function"?descriptor.position():descriptor.position
|
|
5114
5031
|
}
|
|
5115
|
-
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"}]
|
|
5116
5033
|
function belongsTo(renderable,ancestor){if(!renderable||!ancestor)
|
|
5117
5034
|
return false
|
|
5118
5035
|
for(let current=renderable;current; current=current.parent){if(current===ancestor)
|
|
@@ -5551,7 +5468,7 @@ const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`sect
|
|
|
5551
5468
|
const action=props.headerAction?useSidebarItem(props.api,props.interaction,{id:props.headerAction.id,position:()=>({section:props.navigationSection??0,row:0,column:1
|
|
5552
5469
|
}),disabled:props.headerAction.disabled,activate:props.headerAction.onActivate
|
|
5553
5470
|
},()=>theme().accent,"control"):undefined
|
|
5554
|
-
|
|
5471
|
+
createEffect14(()=>{props.headerAction?.label()
|
|
5555
5472
|
setActionWidth(undefined)
|
|
5556
5473
|
})
|
|
5557
5474
|
const actionLabel=()=>{const label=props.headerAction?.label()??""
|
|
@@ -6194,11 +6111,44 @@ return _$createComponent(SectionWithHeaderAction,{get api(){return props.api
|
|
|
6194
6111
|
|
|
6195
6112
|
|
|
6196
6113
|
|
|
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
|
+
|
|
6197
6147
|
function QuickActionRow(props){const{api,interaction
|
|
6198
6148
|
}=useSidebarList()
|
|
6199
6149
|
const icons=useIcons()
|
|
6200
6150
|
const theme=()=>api.theme.current
|
|
6201
|
-
const [width,setWidth]=
|
|
6151
|
+
const [width,setWidth]=createSignal28(0)
|
|
6202
6152
|
const shortcut=createMemo14(()=>{const bindings=api.keymap.getCommandBindings({visibility:"registered",commands:[props.action.command]
|
|
6203
6153
|
})
|
|
6204
6154
|
return api.keys.formatBindings(bindings.get(props.action.command))
|
|
@@ -6242,7 +6192,7 @@ _$insert(_el$2,()=>props.action.label)
|
|
|
6242
6192
|
_$effect((_$p)=>_$setProp(_el$2,"fg",row.foregroundColor(),_$p))
|
|
6243
6193
|
return _el$2
|
|
6244
6194
|
})()
|
|
6245
|
-
},get metadata(){return _$createComponent(
|
|
6195
|
+
},get metadata(){return _$createComponent(Show17,{get when(){return visibleShortcut()
|
|
6246
6196
|
},children:(value)=>(()=>{var _el$3=_$createElement("text")
|
|
6247
6197
|
_$setProp(_el$3,"flexShrink",0)
|
|
6248
6198
|
_$setProp(_el$3,"wrapMode","none")
|
|
@@ -6251,7 +6201,7 @@ _$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme()
|
|
|
6251
6201
|
return _el$3
|
|
6252
6202
|
})()
|
|
6253
6203
|
})
|
|
6254
|
-
},get details(){return _$createComponent(
|
|
6204
|
+
},get details(){return _$createComponent(Show17,{get when(){return props.disabled
|
|
6255
6205
|
},children:(reason)=>(()=>{var _el$4=_$createElement("text")
|
|
6256
6206
|
_$setProp(_el$4,"wrapMode","word")
|
|
6257
6207
|
_$insert(_el$4,reason)
|
|
@@ -6279,12 +6229,12 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6279
6229
|
},onToggle:()=>props.preferences.toggleSectionExpanded("quick_actions"),get children(){return [_$createComponent(SidebarRowList,{get api(){return props.api
|
|
6280
6230
|
},get interaction(){return props.interaction
|
|
6281
6231
|
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6282
|
-
},get children(){return [_$createComponent(
|
|
6232
|
+
},get children(){return [_$createComponent(Show18,{get when(){return actions().length===0
|
|
6283
6233
|
},get children(){var _el$=_$createElement("text")
|
|
6284
6234
|
_$insertNode(_el$,_$createTextNode(`No quick actions selected`))
|
|
6285
6235
|
_$effect((_$p)=>_$setProp(_el$,"fg",props.api.theme.current.textMuted,_$p))
|
|
6286
6236
|
return _el$
|
|
6287
|
-
}}),_$createComponent(
|
|
6237
|
+
}}),_$createComponent(For15,{get each(){return visibility.visible()
|
|
6288
6238
|
},children:(action,index)=>_$createComponent(QuickActionRow,{get onNewSession(){return props.onNewSession
|
|
6289
6239
|
},action,get disabled(){return action.disabled
|
|
6290
6240
|
},get favorite(){return props.preferences.favoriteQuickActions?.().has(action.command)??false
|
|
@@ -6394,7 +6344,7 @@ unregisterBinding=undefined
|
|
|
6394
6344
|
unregisterCommands()
|
|
6395
6345
|
}}}
|
|
6396
6346
|
function SidebarToggleBinding(props){const shortcuts=createSidebarShortcutMode(props.api)
|
|
6397
|
-
|
|
6347
|
+
createEffect16(()=>shortcuts.bind(props.preferences.toggleKey()))
|
|
6398
6348
|
onCleanup18(shortcuts.dispose)
|
|
6399
6349
|
return _$createElement("box")
|
|
6400
6350
|
}
|
|
@@ -6404,7 +6354,7 @@ const unregisterCommands=props.api.keymap.registerLayer({commands:[...commands,.
|
|
|
6404
6354
|
}))]
|
|
6405
6355
|
})
|
|
6406
6356
|
onCleanup18(unregisterCommands)
|
|
6407
|
-
|
|
6357
|
+
createEffect16(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
|
|
6408
6358
|
}]
|
|
6409
6359
|
})
|
|
6410
6360
|
onCleanup18(unregister)
|
|
@@ -6438,10 +6388,10 @@ const filtered=createMemo16(()=>list().filter((item)=>matchesFilter(query(),item
|
|
|
6438
6388
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("skills")??0,resetKey:()=>JSON.stringify([target().key,query()])
|
|
6439
6389
|
})
|
|
6440
6390
|
const state=createMemo16(()=>props.controller.state(target()))
|
|
6441
|
-
|
|
6442
|
-
const deactivate=
|
|
6391
|
+
createEffect17(()=>{const current=target()
|
|
6392
|
+
const deactivate=untrack6(()=>props.controller.activate?.(current)??(()=>{}))
|
|
6443
6393
|
onCleanup19(deactivate)
|
|
6444
|
-
|
|
6394
|
+
untrack6(()=>void props.controller.refresh(current).catch(()=>{}))
|
|
6445
6395
|
})
|
|
6446
6396
|
async function useSkill(item){try{const isInserted=await props.controller.use(target(),item.name)
|
|
6447
6397
|
if(isInserted)
|
|
@@ -6493,7 +6443,7 @@ return _el$
|
|
|
6493
6443
|
}})
|
|
6494
6444
|
}
|
|
6495
6445
|
function SkillsSection(props){const dialogs=useDialogs(props.api)
|
|
6496
|
-
const [query,setQuery]=
|
|
6446
|
+
const [query,setQuery]=createSignal29("")
|
|
6497
6447
|
const model=createSkillSectionModel(props,query)
|
|
6498
6448
|
const navigationSection=()=>props.navigationSection??3
|
|
6499
6449
|
function selectSkill(item){if(!props.preferences.shouldConfirmSkill(item)){model.useSkill(item)
|
|
@@ -6526,7 +6476,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
6526
6476
|
}},get query(){return query()
|
|
6527
6477
|
},placeholder:"Filter skills...",onInput:setQuery
|
|
6528
6478
|
}),null)
|
|
6529
|
-
_$insert(_el$,_$createComponent(
|
|
6479
|
+
_$insert(_el$,_$createComponent(Show19,{get when(){return model.filtered().length>0
|
|
6530
6480
|
},get fallback(){return(()=>{var _el$2=_$createElement("text")
|
|
6531
6481
|
_$insertNode(_el$2,_$createTextNode(`No matching skills`))
|
|
6532
6482
|
_$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -6536,8 +6486,8 @@ return _el$2
|
|
|
6536
6486
|
},get interaction(){return props.interaction
|
|
6537
6487
|
},get grouped(){return model.grouped
|
|
6538
6488
|
},get density(){return props.preferences.rowDensity?.()??"compact"
|
|
6539
|
-
},get children(){return _$createComponent(
|
|
6540
|
-
},children:(item,index)=>[_$createComponent(
|
|
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)
|
|
6541
6491
|
},get children(){var _el$4=_$createElement("text")
|
|
6542
6492
|
_$setProp(_el$4,"height",1)
|
|
6543
6493
|
_$setProp(_el$4,"wrapMode","none")
|
|
@@ -6582,18 +6532,18 @@ return _el$
|
|
|
6582
6532
|
function createSubagentSectionModel(props){const list=createMemo17(()=>props.controller.list(props.sessionID))
|
|
6583
6533
|
const recent=createMemo17(()=>props.controller.recent?.(props.sessionID)??[])
|
|
6584
6534
|
const rows=createMemo17(()=>buildSubagentView(list(),recent()))
|
|
6585
|
-
const [query,setQuery]=
|
|
6586
|
-
const [mode,setMode]=
|
|
6535
|
+
const [query,setQuery]=createSignal30("")
|
|
6536
|
+
const [mode,setMode]=createSignal30("all")
|
|
6587
6537
|
const counts=createMemo17(()=>countSubagentView(rows(),query()))
|
|
6588
6538
|
const tabs=createMemo17(()=>["all","active","recent",...counts().errors>0?["errors"]:[]])
|
|
6589
6539
|
const filtered=createMemo17(()=>filterSubagentView(rows(),mode(),query()))
|
|
6590
6540
|
const parentID=createMemo17(()=>props.api.state?.session?.get(props.sessionID)?.parentID)
|
|
6591
6541
|
const targetKey=createMemo17(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6592
|
-
|
|
6542
|
+
createEffect18(()=>{targetKey()
|
|
6593
6543
|
setQuery("")
|
|
6594
6544
|
setMode("all")
|
|
6595
6545
|
})
|
|
6596
|
-
|
|
6546
|
+
createEffect18(()=>{if(mode()!=="all"&&counts()[mode()]===0)
|
|
6597
6547
|
setMode("all")
|
|
6598
6548
|
})
|
|
6599
6549
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("subagents")??0,resetKey:()=>JSON.stringify([targetKey(),query(),mode()])
|
|
@@ -6603,11 +6553,11 @@ const now=createSubagentClock(clockKey)
|
|
|
6603
6553
|
const byId=createMemo17(()=>new Map(visibility.visible().map((item)=>[item.session.id,item])))
|
|
6604
6554
|
const ids=createMemo17(()=>visibility.visible().map((item)=>item.session.id))
|
|
6605
6555
|
const state=createMemo17(()=>props.controller.state(props.sessionID))
|
|
6606
|
-
|
|
6556
|
+
createEffect18(()=>{const sessionID=props.sessionID
|
|
6607
6557
|
targetKey()
|
|
6608
|
-
const deactivate=
|
|
6558
|
+
const deactivate=untrack7(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6609
6559
|
onCleanup20(deactivate)
|
|
6610
|
-
|
|
6560
|
+
untrack7(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6611
6561
|
})
|
|
6612
6562
|
return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentID,visibility,now,byId,ids,state
|
|
6613
6563
|
}}
|
|
@@ -6664,7 +6614,7 @@ return()=>_c$()?`${props.item.run.startedBeforeObservation ? `${icons.icon("rece
|
|
|
6664
6614
|
_$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme().textMuted,_$p))
|
|
6665
6615
|
return _el$3
|
|
6666
6616
|
})()
|
|
6667
|
-
},get details(){return [_$createComponent(
|
|
6617
|
+
},get details(){return [_$createComponent(Show20,{get when(){return props.item.run?.errorMessage
|
|
6668
6618
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createTextNode(`: `)
|
|
6669
6619
|
_$insertNode(_el$4,_el$5)
|
|
6670
6620
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -6672,12 +6622,12 @@ _$insert(_el$4,()=>cancelled()?"Cancelled":"Error",_el$5)
|
|
|
6672
6622
|
_$insert(_el$4,()=>props.item.run?.errorMessage,null)
|
|
6673
6623
|
_$effect((_$p)=>_$setProp(_el$4,"fg",row.focused()?row.foregroundColor():failed()?theme().error:theme().textMuted,_$p))
|
|
6674
6624
|
return _el$4
|
|
6675
|
-
}}),_$createComponent(
|
|
6625
|
+
}}),_$createComponent(Show20,{get when(){return props.item.unavailable
|
|
6676
6626
|
},get children(){var _el$6=_$createElement("text")
|
|
6677
6627
|
_$insertNode(_el$6,_$createTextNode(`Worker status unavailable`))
|
|
6678
6628
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().warning,_$p))
|
|
6679
6629
|
return _el$6
|
|
6680
|
-
}}),_$createComponent(
|
|
6630
|
+
}}),_$createComponent(Show20,{get when(){return _$memo(()=>props.item.status.type==="retry")()?props.item.status:undefined
|
|
6681
6631
|
},children:(status)=>(()=>{var _el$0=_$createElement("text"),_el$1=_$createTextNode(`Retry #`),_el$10=_$createTextNode(` \xB7 `),_el$11=_$createTextNode(`s \xB7 `)
|
|
6682
6632
|
_$insertNode(_el$0,_el$1)
|
|
6683
6633
|
_$insertNode(_el$0,_el$10)
|
|
@@ -6689,7 +6639,7 @@ _$insert(_el$0,()=>status().message,null)
|
|
|
6689
6639
|
_$effect((_$p)=>_$setProp(_el$0,"fg",row.focused()?row.foregroundColor():theme().warning,_$p))
|
|
6690
6640
|
return _el$0
|
|
6691
6641
|
})()
|
|
6692
|
-
}),_$createComponent(
|
|
6642
|
+
}),_$createComponent(Show20,{get when(){return _$memo(()=>!!idle())()&&!props.item.run?.errorMessage
|
|
6693
6643
|
},get children(){var _el$8=_$createElement("text")
|
|
6694
6644
|
_$insertNode(_el$8,_$createTextNode(`Finished`))
|
|
6695
6645
|
_$effect((_$p)=>_$setProp(_el$8,"fg",theme().textMuted,_$p))
|
|
@@ -6700,12 +6650,12 @@ return _el$8
|
|
|
6700
6650
|
function SubagentList(props){return _$createComponent(SidebarRowList,{get api(){return props.api
|
|
6701
6651
|
},get interaction(){return props.interaction
|
|
6702
6652
|
},get density(){return props.density
|
|
6703
|
-
},get children(){return _$createComponent(
|
|
6653
|
+
},get children(){return _$createComponent(For17,{get each(){return props.ids
|
|
6704
6654
|
},children:(id,index)=>{const initial=props.itemById(id)
|
|
6705
6655
|
const item=()=>props.itemById(id)??initial
|
|
6706
6656
|
const startsGroup=()=>index()===0||props.visible[index()-1]?.group!==item().group
|
|
6707
6657
|
return(()=>{var _el$=_$createElement("box")
|
|
6708
|
-
_$insert(_el$,_$createComponent(
|
|
6658
|
+
_$insert(_el$,_$createComponent(Show21,{get when(){return startsGroup()
|
|
6709
6659
|
},get children(){var _el$2=_$createElement("text"),_el$3=_$createElement("b")
|
|
6710
6660
|
_$insertNode(_el$2,_el$3)
|
|
6711
6661
|
_$insert(_el$3,()=>item().group)
|
|
@@ -6731,7 +6681,7 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6731
6681
|
},sectionId:`${PLUGIN_ID}.section.subagents`,get navigationSection(){return navigationSection()
|
|
6732
6682
|
},title:"SUBAGENTS",section:"subagents",get summary(){return `${model.list().length} active \xB7 ${model.recent().length} recent`
|
|
6733
6683
|
},get open(){return props.preferences.expanded().subagents
|
|
6734
|
-
},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()
|
|
6735
6685
|
},children:(id)=>_$createComponent(McpBulkAction,{get api(){return props.api
|
|
6736
6686
|
},get interaction(){return props.interaction
|
|
6737
6687
|
},id:`${PLUGIN_ID}.subagents.parent`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -6754,7 +6704,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
|
|
|
6754
6704
|
}}),_el$2)
|
|
6755
6705
|
_$setProp(_el$2,"flexDirection","row")
|
|
6756
6706
|
_$setProp(_el$2,"flexWrap","wrap")
|
|
6757
|
-
_$insert(_el$2,_$createComponent(
|
|
6707
|
+
_$insert(_el$2,_$createComponent(For18,{get each(){return model.tabs()
|
|
6758
6708
|
},children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
|
|
6759
6709
|
},get interaction(){return props.interaction
|
|
6760
6710
|
},id:`${PLUGIN_ID}.subagents.filter.${value}`,get position(){return{section:navigationSection(),row:4,column:index()
|
|
@@ -6765,7 +6715,7 @@ _$insert(_el$2,_$createComponent(For17,{get each(){return model.tabs()
|
|
|
6765
6715
|
},onActivate:()=>model.setMode(value)
|
|
6766
6716
|
})
|
|
6767
6717
|
}))
|
|
6768
|
-
_$insert(_el$,_$createComponent(
|
|
6718
|
+
_$insert(_el$,_$createComponent(Show22,{get when(){return model.filtered().length===0
|
|
6769
6719
|
},get children(){var _el$3=_$createElement("text")
|
|
6770
6720
|
_$insertNode(_el$3,_$createTextNode(`No matching subagents`))
|
|
6771
6721
|
_$effect((_$p)=>_$setProp(_el$3,"fg",props.api.theme.current.textMuted,_$p))
|
|
@@ -6849,7 +6799,7 @@ _$insert(_el$2,()=>icons.icon(done()?"done":active()?"busy":cancelled()?"close":
|
|
|
6849
6799
|
_$setProp(_el$3,"flexGrow",1)
|
|
6850
6800
|
_$setProp(_el$3,"wrapMode","word")
|
|
6851
6801
|
_$insert(_el$3,()=>props.item.content)
|
|
6852
|
-
_$insert(_el$,_$createComponent(
|
|
6802
|
+
_$insert(_el$,_$createComponent(Show23,{get when(){return props.item.priority==="high"||props.item.priority==="medium"||props.item.priority==="low"
|
|
6853
6803
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b"),_el$6=_$createTextNode(` `)
|
|
6854
6804
|
_$insertNode(_el$4,_el$5)
|
|
6855
6805
|
_$setProp(_el$4,"width",2)
|
|
@@ -6876,7 +6826,7 @@ _$insertNode(_el$,_el$2)
|
|
|
6876
6826
|
_$setProp(_el$,"gap",1)
|
|
6877
6827
|
_$setProp(_el$2,"flexDirection","row")
|
|
6878
6828
|
_$setProp(_el$2,"flexWrap","wrap")
|
|
6879
|
-
_$insert(_el$2,_$createComponent(
|
|
6829
|
+
_$insert(_el$2,_$createComponent(For19,{each:["all","active","finished"],children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
|
|
6880
6830
|
},get interaction(){return props.interaction
|
|
6881
6831
|
},id:`${PLUGIN_ID}.todo.filter.${value}`,get position(){return{section:navigationSection(),row:tabsRow(),column:index()
|
|
6882
6832
|
}},get label(){return value[0].toUpperCase() + value.slice(1)
|
|
@@ -6885,17 +6835,17 @@ _$insert(_el$2,_$createComponent(For18,{each:["all","active","finished"],childre
|
|
|
6885
6835
|
},onActivate:()=>props.setMode(value)
|
|
6886
6836
|
})
|
|
6887
6837
|
}))
|
|
6888
|
-
_$insert(_el$,_$createComponent(
|
|
6838
|
+
_$insert(_el$,_$createComponent(Show24,{get when(){return props.view.rows.length>0
|
|
6889
6839
|
},get fallback(){return _$createComponent(EmptyTodo,{get api(){return props.api
|
|
6890
6840
|
},get mode(){return props.mode
|
|
6891
6841
|
}})
|
|
6892
6842
|
},get children(){return _$createComponent(SidebarRowList,{get api(){return props.api
|
|
6893
6843
|
},get interaction(){return props.interaction
|
|
6894
6844
|
},get density(){return props.density
|
|
6895
|
-
},get children(){return _$createComponent(
|
|
6845
|
+
},get children(){return _$createComponent(For19,{get each(){return props.visibility.visible()
|
|
6896
6846
|
},children:(row,index)=>{const startsGroup=()=>index()===0||props.visibility.visible()[index()-1].group!==row.group
|
|
6897
6847
|
return(()=>{var _el$3=_$createElement("box")
|
|
6898
|
-
_$insert(_el$3,_$createComponent(
|
|
6848
|
+
_$insert(_el$3,_$createComponent(Show24,{get when(){return startsGroup()
|
|
6899
6849
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
6900
6850
|
_$insertNode(_el$4,_el$5)
|
|
6901
6851
|
_$insert(_el$5,()=>row.group)
|
|
@@ -6932,7 +6882,7 @@ return _el$6
|
|
|
6932
6882
|
|
|
6933
6883
|
|
|
6934
6884
|
function TodoGuidanceControl(props){const state=()=>props.controller.guidance(props.sessionID)
|
|
6935
|
-
return _$createComponent(
|
|
6885
|
+
return _$createComponent(Show25,{get when(){return state().available
|
|
6936
6886
|
},get children(){var _el$=_$createElement("box")
|
|
6937
6887
|
_$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
6938
6888
|
},get interaction(){return props.interaction
|
|
@@ -6942,7 +6892,7 @@ _$insert(_el$,_$createComponent(SectionTab,{get api(){return props.api
|
|
|
6942
6892
|
},get disabled(){return state().saving
|
|
6943
6893
|
},onActivate:()=>void props.controller.setGuidance(props.sessionID,!state().enabled)
|
|
6944
6894
|
}),null)
|
|
6945
|
-
_$insert(_el$,_$createComponent(
|
|
6895
|
+
_$insert(_el$,_$createComponent(Show25,{get when(){return state().error
|
|
6946
6896
|
},children:(message)=>(()=>{var _el$2=_$createElement("text")
|
|
6947
6897
|
_$setProp(_el$2,"wrapMode","word")
|
|
6948
6898
|
_$insert(_el$2,message)
|
|
@@ -6957,22 +6907,22 @@ function TodoSection(props){const list=createMemo18(()=>props.controller.list(pr
|
|
|
6957
6907
|
const icons=useIcons()
|
|
6958
6908
|
const unavailable=()=>hostCapabilityUnavailable(props.api,"todo")
|
|
6959
6909
|
const managed=()=>("guidance" in props.controller)?props.controller:undefined
|
|
6960
|
-
const [mode,setMode]=
|
|
6910
|
+
const [mode,setMode]=createSignal31("all")
|
|
6961
6911
|
const targetKey=createMemo18(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6962
|
-
|
|
6912
|
+
createEffect19(()=>{targetKey()
|
|
6963
6913
|
setMode("all")
|
|
6964
6914
|
})
|
|
6965
6915
|
const view=createMemo18(()=>buildTodoView(list(),mode()))
|
|
6966
6916
|
const visibility=createListVisibility({items:()=>view().rows,limit:()=>props.preferences.sectionItemLimit?.("todo")??0,resetKey:()=>JSON.stringify([targetKey(),mode()])
|
|
6967
6917
|
})
|
|
6968
6918
|
const state=createMemo18(()=>props.controller.state(props.sessionID))
|
|
6969
|
-
|
|
6919
|
+
createEffect19(()=>{const sessionID=props.sessionID
|
|
6970
6920
|
targetKey()
|
|
6971
6921
|
if(unavailable())
|
|
6972
6922
|
return
|
|
6973
|
-
const deactivate=
|
|
6923
|
+
const deactivate=untrack8(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6974
6924
|
onCleanup21(deactivate)
|
|
6975
|
-
|
|
6925
|
+
untrack8(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6976
6926
|
})
|
|
6977
6927
|
const navigationSection=()=>props.navigationSection??1
|
|
6978
6928
|
return _$createComponent(Section,{get api(){return props.api
|
|
@@ -6980,10 +6930,10 @@ return _$createComponent(Section,{get api(){return props.api
|
|
|
6980
6930
|
},sectionId:`${PLUGIN_ID}.section.todo`,get navigationSection(){return navigationSection()
|
|
6981
6931
|
},title:"TODO",section:"todo",get summary(){return _$memo(()=>!!(unavailable()||managed()?.missing(props.sessionID)))()?"\u2014":`${view().counts.completed}/${list().length}`
|
|
6982
6932
|
},get open(){return props.preferences.expanded().todo
|
|
6983
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(
|
|
6933
|
+
},onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(Show26,{get when(){return unavailable()
|
|
6984
6934
|
},get fallback(){return(()=>{var _el$=_$createElement("box")
|
|
6985
6935
|
_$setProp(_el$,"gap",1)
|
|
6986
|
-
_$insert(_el$,_$createComponent(
|
|
6936
|
+
_$insert(_el$,_$createComponent(Show26,{get when(){return managed()?.guidance(props.sessionID).available
|
|
6987
6937
|
},get children(){return _$createComponent(TodoGuidanceControl,{get api(){return props.api
|
|
6988
6938
|
},get controller(){return managed()
|
|
6989
6939
|
},get sessionID(){return props.sessionID
|
|
@@ -6991,7 +6941,7 @@ _$insert(_el$,_$createComponent(Show24,{get when(){return managed()?.guidance(pr
|
|
|
6991
6941
|
},get navigationSection(){return navigationSection()
|
|
6992
6942
|
}})
|
|
6993
6943
|
}}),null)
|
|
6994
|
-
_$insert(_el$,_$createComponent(
|
|
6944
|
+
_$insert(_el$,_$createComponent(Show26,{get when(){return managed()?.missing(props.sessionID)
|
|
6995
6945
|
},get fallback(){return _$createComponent(SectionRequestBody,{get api(){return props.api
|
|
6996
6946
|
},get interaction(){return props.interaction
|
|
6997
6947
|
},id:`${PLUGIN_ID}.retry.todo`,get position(){return{section:navigationSection(),row:1,column:0
|
|
@@ -7040,10 +6990,11 @@ event.preventDefault()
|
|
|
7040
6990
|
event.stopPropagation()
|
|
7041
6991
|
props.interaction.leave()
|
|
7042
6992
|
})
|
|
7043
|
-
_$insert(_el$,_$createComponent(
|
|
6993
|
+
_$insert(_el$,_$createComponent(For20,{get each(){return visibleSections()
|
|
7044
6994
|
},children:(section,index)=>_$createComponent(SectionBoundary,{get api(){return props.api
|
|
7045
6995
|
},get divided(){return index()<visibleSections().length-1
|
|
7046
|
-
},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
|
|
7047
6998
|
},get controller(){return props.todo
|
|
7048
6999
|
}}))
|
|
7049
7000
|
}}),_$createComponent(Match,{when:section==="subagents",get children(){return _$createComponent(SubagentSection,_$mergeProps(props,{get navigationSection(){return index() + 1
|
|
@@ -7075,7 +7026,7 @@ return _el$
|
|
|
7075
7026
|
|
|
7076
7027
|
|
|
7077
7028
|
function McpPersistence(props){const persist=createMemo20(()=>props.controller.persist())
|
|
7078
|
-
|
|
7029
|
+
createEffect20(()=>{if(!props.api.state.ready)
|
|
7079
7030
|
return
|
|
7080
7031
|
persist()
|
|
7081
7032
|
const route=props.api.route.current
|
|
@@ -7084,19 +7035,19 @@ if(typeof params?.sessionID!=="string")
|
|
|
7084
7035
|
return
|
|
7085
7036
|
const current=props.controller.target()
|
|
7086
7037
|
onCleanup23(()=>props.controller.deactivate(current))
|
|
7087
|
-
|
|
7038
|
+
untrack9(()=>void props.controller.activate(current).catch(()=>{}))
|
|
7088
7039
|
})
|
|
7089
7040
|
return _$createElement("box")
|
|
7090
7041
|
}
|
|
7091
|
-
function PreferencesPersistence(props){
|
|
7092
|
-
|
|
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
|
|
7093
7044
|
})))
|
|
7094
7045
|
props.controller.load()
|
|
7095
7046
|
})
|
|
7096
7047
|
return _$createElement("box")
|
|
7097
7048
|
}
|
|
7098
7049
|
function FirstRunWizardPersistence(props){let isChecked=false
|
|
7099
|
-
|
|
7050
|
+
createEffect20(()=>{if(isChecked)
|
|
7100
7051
|
return
|
|
7101
7052
|
isChecked=true
|
|
7102
7053
|
showFirstRunWizard(props.api,props.preferences).catch(()=>{})
|
|
@@ -7134,7 +7085,7 @@ _$setProp(_el$2,"flexDirection","row")
|
|
|
7134
7085
|
_$setProp(_el$2,"justifyContent","space-between")
|
|
7135
7086
|
_$setProp(_el$2,"gap",1)
|
|
7136
7087
|
_$setProp(_el$3,"flexGrow",1)
|
|
7137
|
-
_$insert(_el$3,_$createComponent(
|
|
7088
|
+
_$insert(_el$3,_$createComponent(Show27,{get when(){return props.preferences.showSessionTitle()
|
|
7138
7089
|
},get children(){var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
7139
7090
|
_$insertNode(_el$4,_el$5)
|
|
7140
7091
|
_$setProp(_el$4,"wrapMode","word")
|
|
@@ -7142,7 +7093,7 @@ _$insert(_el$5,()=>props.title)
|
|
|
7142
7093
|
_$effect((_$p)=>_$setProp(_el$4,"fg",theme().text,_$p))
|
|
7143
7094
|
return _el$4
|
|
7144
7095
|
}}),null)
|
|
7145
|
-
_$insert(_el$3,_$createComponent(
|
|
7096
|
+
_$insert(_el$3,_$createComponent(Show27,{get when(){return _$memo(()=>!!props.preferences.showSessionDate())()&&created()
|
|
7146
7097
|
},children:(value)=>(()=>{var _el$6=_$createElement("text")
|
|
7147
7098
|
_$insert(_el$6,value)
|
|
7148
7099
|
_$effect((_$p)=>_$setProp(_el$6,"fg",theme().textMuted,_$p))
|
|
@@ -7182,6 +7133,17 @@ return
|
|
|
7182
7133
|
const [user,project]=await Promise.all([safe(userPath?readSource(userPath,()=>readFile2(userPath,"utf8")):undefined),safe(readProject?readSource(".opencode/navigator.json",readProject):undefined)])
|
|
7183
7134
|
return mergeConfiguredDefaults(configuredDefaultsFromPluginOptions(options),user,project)
|
|
7184
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
|
+
}
|
|
7185
7147
|
import {homedir,homedir as homedir2} from "os"
|
|
7186
7148
|
|
|
7187
7149
|
function location(input){return input.directory?{location:{directory:input.directory}}:{}}
|
|
@@ -7275,7 +7237,7 @@ return false
|
|
|
7275
7237
|
}
|
|
7276
7238
|
function enabled(value){return typeof value==="function"?value():value!==false
|
|
7277
7239
|
}
|
|
7278
|
-
function createV2Keymap(context){const [revision,setRevision]=
|
|
7240
|
+
function createV2Keymap(context){const [revision,setRevision]=createSignal32(0)
|
|
7279
7241
|
const layers=new Map
|
|
7280
7242
|
let sequence=0
|
|
7281
7243
|
function layerActive(layer){const mode=layer.mode??"base"
|
|
@@ -7386,7 +7348,7 @@ function legacyTheme(theme){return{primary:theme.hue.interactive[200],secondary:
|
|
|
7386
7348
|
|
|
7387
7349
|
function createV2UI(context){let dialogOpen=false
|
|
7388
7350
|
function DialogPrompt(props){let active=true
|
|
7389
|
-
|
|
7351
|
+
onCleanup26(()=>{active=false
|
|
7390
7352
|
})
|
|
7391
7353
|
onMount7(async ()=>{const value=await context.ui.dialog.prompt({title:props.title,placeholder:props.placeholder,value:props.value
|
|
7392
7354
|
})
|
|
@@ -7400,7 +7362,7 @@ props.onConfirm?.(value)
|
|
|
7400
7362
|
return _$createElement("box")
|
|
7401
7363
|
}
|
|
7402
7364
|
function DialogConfirm(props){let active=true
|
|
7403
|
-
|
|
7365
|
+
onCleanup26(()=>{active=false
|
|
7404
7366
|
})
|
|
7405
7367
|
onMount7(async ()=>{const confirmed=await context.ui.dialog.confirm({title:props.title,message:props.message
|
|
7406
7368
|
})
|
|
@@ -7472,6 +7434,11 @@ for(let index=disposers.length-1;index>=0; index--)
|
|
|
7472
7434
|
await disposers[index]()
|
|
7473
7435
|
disposers.length=0
|
|
7474
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}}}
|
|
7475
7442
|
|
|
7476
7443
|
|
|
7477
7444
|
import {fileURLToPath} from "url"
|
|
@@ -7538,16 +7505,28 @@ if(item.source.target.startsWith("."))
|
|
|
7538
7505
|
throw new Error("Unrecognized local Navigator source")
|
|
7539
7506
|
await context.client.plugin.update({location:response.location,targets:[item.source.target]})
|
|
7540
7507
|
}}}
|
|
7541
|
-
async function setupNavigator(api,options,readProject,managedTodo){const config=pluginConfig(undefined)
|
|
7508
|
+
async function setupNavigator(api,options,readProject,managedTodo,selectedModel){const config=pluginConfig(undefined)
|
|
7542
7509
|
const configured=await loadConfiguredDefaults(api,options,readProject)
|
|
7543
7510
|
const todo=managedTodo??createTodoController(api)
|
|
7544
7511
|
const subagents=createSubagentController(api)
|
|
7545
7512
|
const skills=createSkillController(api)
|
|
7546
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)
|
|
7547
7525
|
const mcp=createMcpController(api,preferences.persistMcp,preferences)
|
|
7548
7526
|
const interaction=createSidebarInteraction(api,()=>openKeyboardHelp(api,preferences.lspIconStyle,preferences.cornerFont))
|
|
7549
7527
|
const startup=createStartupSessionController(api,preferences)
|
|
7550
7528
|
api.lifecycle.onDispose(()=>preferences.flush())
|
|
7529
|
+
api.lifecycle.onDispose(()=>limits.dispose())
|
|
7551
7530
|
api.lifecycle.onDispose(()=>interaction.dispose())
|
|
7552
7531
|
const unsubscribeMcp=api.event.on("mcp.tools.changed",()=>{mcp.refresh().catch(()=>{})
|
|
7553
7532
|
})
|
|
@@ -7560,6 +7539,7 @@ api.lifecycle.onDispose(unsubscribeConnected)
|
|
|
7560
7539
|
api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7561
7540
|
},get multilineCorners(){return preferences.cornerFont
|
|
7562
7541
|
},get children(){return [_$createComponent(PreferencesPersistence,{api,controller:preferences
|
|
7542
|
+
}),_$createComponent(LimitsPersistence,{controller:limits
|
|
7563
7543
|
}),_$memo(()=>_$memo(()=>!!supportsPermissionMode(api))()&&_$createComponent(PermissionModeBinding,{api,preferences
|
|
7564
7544
|
})),_$createComponent(SettingsBinding,{api,preferences,mcp,skills
|
|
7565
7545
|
}),_$createComponent(SidebarToggleBinding,{api,preferences
|
|
@@ -7568,7 +7548,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
|
|
|
7568
7548
|
},interaction,skills,subagents,mcp
|
|
7569
7549
|
}),_$createComponent(FirstRunWizardPersistence,{api,preferences
|
|
7570
7550
|
}),_$createComponent(StartupSessionBinding,{api,controller:startup
|
|
7571
|
-
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.
|
|
7551
|
+
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.20.0"
|
|
7572
7552
|
}),_$createComponent(McpPersistence,{api,controller:mcp
|
|
7573
7553
|
})]
|
|
7574
7554
|
}})
|
|
@@ -7581,7 +7561,8 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
|
|
|
7581
7561
|
},sidebar_content(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7582
7562
|
},get multilineCorners(){return preferences.cornerFont
|
|
7583
7563
|
},get children(){return _$createComponent(SidebarContent,{api,get onNewSession(){return startup.handleNewSession
|
|
7584
|
-
},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
|
|
7585
7566
|
}})
|
|
7586
7567
|
}})
|
|
7587
7568
|
}}})
|
|
@@ -7598,12 +7579,12 @@ throw result.error
|
|
|
7598
7579
|
}
|
|
7599
7580
|
return result.data?.type==="text"?result.data.content:undefined
|
|
7600
7581
|
})
|
|
7601
|
-
const versionStatus=createVersionStatus(api,"0.
|
|
7602
|
-
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"))
|
|
7603
7584
|
api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7604
7585
|
},get multilineCorners(){return preferences.cornerFont
|
|
7605
7586
|
},get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
|
|
7606
|
-
},navigatorVersion:"0.
|
|
7587
|
+
},navigatorVersion:"0.20.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7607
7588
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7608
7589
|
}})
|
|
7609
7590
|
}})
|
|
@@ -7616,16 +7597,16 @@ const{mcp,skills,preferences
|
|
|
7616
7597
|
return
|
|
7617
7598
|
return new TextDecoder().decode(await context.client.file.read({location:context.location,path:".opencode/navigator.json"
|
|
7618
7599
|
}))
|
|
7619
|
-
},todo)
|
|
7620
|
-
const versionStatus=createVersionStatus(adapter.api,"0.
|
|
7621
|
-
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"))
|
|
7622
7603
|
const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7623
7604
|
},get multilineCorners(){return preferences.cornerFont
|
|
7624
7605
|
},get children(){var _el$=_$createElement("box")
|
|
7625
7606
|
_$setProp(_el$,"flexDirection","row")
|
|
7626
7607
|
_$setProp(_el$,"justifyContent","space-between")
|
|
7627
7608
|
_$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
|
|
7628
|
-
},navigatorVersion:"0.
|
|
7609
|
+
},navigatorVersion:"0.20.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7629
7610
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7630
7611
|
}}),null)
|
|
7631
7612
|
_$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api
|
|
@@ -7640,5 +7621,5 @@ await adapter.dispose()
|
|
|
7640
7621
|
var plugin={id:PLUGIN_ID,tui:setupOpenCodeV1,setup:setupOpenCodeV2
|
|
7641
7622
|
}
|
|
7642
7623
|
var plugin_default=plugin
|
|
7643
|
-
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
|
|
7644
7625
|
}
|