opencode-navigator 0.19.0 → 0.19.2
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 +10 -0
- package/README.md +12 -1
- package/dist/tui.js +136 -69
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## [0.19.2] - 2026-10-02
|
|
6
|
+
|
|
7
|
+
- Show MCP group connection states with the same radio-style indicators as individual servers, without Connect/Disconnect labels on group headings.
|
|
8
|
+
|
|
9
|
+
## [0.19.1] - 2026-10-02
|
|
10
|
+
|
|
11
|
+
- Remember the OpenCode 1.x auto-approve mode as a user-wide default for new sessions, including changes made through the host's permission toggle.
|
|
12
|
+
|
|
5
13
|
## [0.19.0] - 2026-10-02
|
|
6
14
|
|
|
7
15
|
- Connect or disconnect all eligible MCP servers in a group from its heading, including filtered-out items, with keyboard access and failed-only retry.
|
|
@@ -51,6 +59,8 @@
|
|
|
51
59
|
|
|
52
60
|
Earlier release notes are available on [GitHub Releases](https://github.com/St1ggy/opencode-navigator/releases).
|
|
53
61
|
|
|
62
|
+
[0.19.2]: https://github.com/St1ggy/opencode-navigator/compare/v0.19.1...v0.19.2
|
|
63
|
+
[0.19.1]: https://github.com/St1ggy/opencode-navigator/compare/v0.19.0...v0.19.1
|
|
54
64
|
[0.19.0]: https://github.com/St1ggy/opencode-navigator/compare/v0.18.2...v0.19.0
|
|
55
65
|
[0.18.2]: https://github.com/St1ggy/opencode-navigator/compare/v0.18.1...v0.18.2
|
|
56
66
|
[0.18.1]: https://github.com/St1ggy/opencode-navigator/compare/v0.18.0...v0.18.1
|
package/README.md
CHANGED
|
@@ -89,7 +89,9 @@ Click a group heading (including Favorites or Ungrouped), or focus it and press
|
|
|
89
89
|
`Enter`, to connect its remaining eligible servers. Once none need connecting,
|
|
90
90
|
the same control disconnects its connected servers. This affects the full group
|
|
91
91
|
even when a filter or item limit hides some rows; failed operations retain the
|
|
92
|
-
usual retry control.
|
|
92
|
+
usual retry control. The heading has no action label: its radio-style icon is
|
|
93
|
+
filled only when every server in the group is connected, empty if any still
|
|
94
|
+
needs connecting, and pending while the group changes.
|
|
93
95
|
|
|
94
96
|

|
|
95
97
|
|
|
@@ -338,6 +340,15 @@ Search Everything. Usage never changes the order. Visibility remains independent
|
|
|
338
340
|
so any action, including a bookmarked one, can be hidden from the sidebar while it
|
|
339
341
|
remains searchable. Unavailable actions stay visible with a route- or host-specific reason.
|
|
340
342
|
|
|
343
|
+
In OpenCode 1.x, Navigator saves changes to the auto-approve mode as a user-wide
|
|
344
|
+
default, including changes made through OpenCode's own command palette. Set the
|
|
345
|
+
default under **Navigator Settings → Behavior → Default auto-approve permissions**;
|
|
346
|
+
new sessions restore it. Until you set a Navigator default, an explicit OpenCode
|
|
347
|
+
startup mode is respected. OpenCode 2.x owns this setting: use the host Settings
|
|
348
|
+
dialog for the current session and `session.permissions` in the user-wide
|
|
349
|
+
`cli.json` (`"prompt"` or `"autoaccept"`) for its startup default. Restart
|
|
350
|
+
OpenCode after changing `cli.json`.
|
|
351
|
+
|
|
341
352
|
## Configuration sources
|
|
342
353
|
|
|
343
354
|
Navigator validates and deep-merges three simultaneous sources in this order:
|
package/dist/tui.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {insert as _$insert,setProp as _$setProp,createElement as _$createElement,createComponent as _$createComponent,mergeProps as _$mergeProps,effect as _$effect,createTextNode as _$createTextNode,insertNode as _$insertNode,
|
|
1
|
+
import {insert as _$insert,setProp as _$setProp,createElement as _$createElement,memo as _$memo,createComponent as _$createComponent,mergeProps as _$mergeProps,effect as _$effect,createTextNode as _$createTextNode,insertNode as _$insertNode,use as _$use,spread as _$spread,useTerminalDimensions,useTerminalDimensions as useTerminalDimensions2,useTerminalDimensions as useTerminalDimensions3,useTerminalDimensions as useTerminalDimensions4,useTerminalDimensions as useTerminalDimensions5,useTerminalDimensions as useTerminalDimensions6,useTerminalDimensions as useTerminalDimensions7} from "@opentui/solid"
|
|
2
2
|
|
|
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 createEffect4,createSignal as createSignal9,onCleanup as onCleanup4,createSignal as createSignal10,createSignal as createSignal11,Index,createSignal as createSignal12,onCleanup as onCleanup5,createEffect as createEffect6,onCleanup as onCleanup7,batch as batch2,createEffect as createEffect5,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 createEffect7,createSignal as createSignal15,onCleanup as onCleanup9,Show as Show4,For as For6,For as For9,createEffect as createEffect8,createMemo as createMemo5,onCleanup as onCleanup10,createEffect as createEffect9,createMemo as createMemo6,untrack as untrack2,For as For10,createEffect as createEffect10,createMemo as createMemo9,onCleanup as onCleanup11,onMount as onMount4,createMemo as createMemo7,createMemo as createMemo8,Show as Show6,onCleanup as onCleanup12,createEffect as createEffect11,onCleanup as onCleanup13,createSignal as createSignal16,createEffect as createEffect12,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 createEffect13,createSignal as createSignal22,createMemo as createMemo13,createSignal as createSignal24,createMemo as createMemo12,For as For13,Show as Show14,Show as Show11,Show as Show12,Show as Show13,createSignal as createSignal23,onCleanup as onCleanup17,For as For14,Show as Show16,createMemo as createMemo15,Show as Show15,createMemo as createMemo14,createSignal as createSignal25,createEffect as createEffect14,onCleanup as onCleanup18,For as For19,Match,Switch,createMemo as createMemo19,onCleanup as onCleanup22,For as For15,Show as Show17,createSignal as createSignal26,createEffect as createEffect15,createMemo as createMemo16,onCleanup as onCleanup19,untrack as untrack5,For as For17,Show as Show20,createEffect as createEffect16,createMemo as createMemo17,createSignal as createSignal27,onCleanup as onCleanup20,untrack as untrack6,For as For16,Show as Show19,Show as Show18,Show as Show24,createEffect as createEffect17,createMemo as createMemo18,createSignal as createSignal28,onCleanup as onCleanup21,untrack as untrack7,For as For18,Show as Show22,Show as Show21,Show as Show23,createEffect as createEffect18,createMemo as createMemo20,onCleanup as onCleanup23,untrack as untrack8,Show as Show25,createMemo as createMemo21,onCleanup as onCleanup24,createSignal as createSignal29,onCleanup as onCleanup25,onMount as onMount7} from "solid-js"
|
|
6
7
|
var SIDEBAR_SECTIONS=["todo","subagents","skills","quick_actions","lsp","mcp"]
|
|
7
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"]
|
|
8
9
|
function preferencesScope(path){return path.worktree||path.directory||"global"
|
|
@@ -194,6 +195,12 @@ function mcpGroupToggleAction(items){if(items.some((item)=>mcpToggleAction2(item
|
|
|
194
195
|
return "connect"
|
|
195
196
|
return items.some((item)=>mcpToggleAction2(item.status)==="disconnect")?"disconnect":undefined
|
|
196
197
|
}
|
|
198
|
+
function mcpGroupStatus(items,busy=false){if(busy)
|
|
199
|
+
return "pending"
|
|
200
|
+
if(items.length>0&&items.every((item)=>item.status==="connected"))
|
|
201
|
+
return "connected"
|
|
202
|
+
return items.find((item)=>item.status!=="connected"&&item.status!=="disabled")?.status??"disabled"
|
|
203
|
+
}
|
|
197
204
|
function buildMcpGroupedView(items,favorites,assignments){return items.map((item)=>({...item,assignedGroup:assignments[item.name],bucket:favorites.has(item.name)?"Favorites":assignments[item.name]??"Ungrouped"
|
|
198
205
|
})).sort((left,right)=>{const leftRank=BUCKET_RANK[left.bucket]??1
|
|
199
206
|
const rightRank=BUCKET_RANK[right.bucket]??1
|
|
@@ -1252,7 +1259,8 @@ const workspaceProfiles=parseWorkspaceProfiles(userInput?.workspaceProfiles)
|
|
|
1252
1259
|
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
|
|
1253
1260
|
},...typeof userInput?.lastNavigatorVersion==="string"&&{lastNavigatorVersion:userInput.lastNavigatorVersion
|
|
1254
1261
|
},...typeof userInput?.previousNavigatorVersion==="string"&&{previousNavigatorVersion:userInput.previousNavigatorVersion
|
|
1255
|
-
},...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},...
|
|
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
|
|
1263
|
+
},...Object.keys(workspaceProfiles).length>0&&{workspaceProfiles}}}}
|
|
1256
1264
|
function parseValues(value){if(!value)
|
|
1257
1265
|
return{}
|
|
1258
1266
|
return{behavior:parsePluginSettings(value.behavior),layout:{sections:parseSectionPreferences(value.layout?.sections),expanded:parseSectionPreferences(value.layout?.expanded),...parseSectionOrder(value.layout?.order)&&{order:parseSectionOrder(value.layout?.order)}},desiredMcpStates:parseDesiredMcpStates(value.desiredMcpStates)
|
|
@@ -1414,7 +1422,8 @@ return{global:target.kind==="global"?scope:current.global,worktrees,user:{...ski
|
|
|
1414
1422
|
},...(update.user?.previousNavigatorVersion??current.user.previousNavigatorVersion)&&{previousNavigatorVersion:update.user?.previousNavigatorVersion??current.user.previousNavigatorVersion
|
|
1415
1423
|
},...Object.keys(parsedLayoutPresets).length>0&&{layoutPresets:parsedLayoutPresets},...Object.keys(parsedMcpPresets).length>0&&{mcpPresets:parsedMcpPresets},...Object.keys(workspaceProfiles).length>0&&{workspaceProfiles:parseWorkspaceProfiles(workspaceProfiles)
|
|
1416
1424
|
},...favoriteSkills.length>0&&{favoriteSkills},...favoriteMcpServers.size>0&&{favoriteMcpServers:[...favoriteMcpServers].sort()},...favoriteQuickActions.size>0&&{favoriteQuickActions:parseFavoriteQuickActions([...favoriteQuickActions])
|
|
1417
|
-
},...recentSkills.length>0&&{recentSkills},...recentQuickActions.length>0&&{recentQuickActions},...Object.keys(mcpServerGroups).length>0&&{mcpServerGroups:parseMcpServerGroups(mcpServerGroups)},...Object.keys(skillGroups).length>0&&{skillGroups:parseSkillGroups(skillGroups)}
|
|
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)},...typeof (update.user?.autoApprovePermissions??current.user.autoApprovePermissions)==="boolean"&&{autoApprovePermissions:update.user?.autoApprovePermissions??current.user.autoApprovePermissions
|
|
1426
|
+
}}}}
|
|
1418
1427
|
function targetForLegacyScope(scope){return scope==="global"?{kind:"global"}:{kind:"worktree",key:scope}}
|
|
1419
1428
|
function createPreferencesStore(stateDirectory){const directory=join(stateDirectory,LEGACY_PLUGIN_ID)
|
|
1420
1429
|
const file=join(directory,"preferences.json")
|
|
@@ -1583,6 +1592,7 @@ const [recentSkills,setRecentSkills]=createSignal4([])
|
|
|
1583
1592
|
const [recentQuickActions,setRecentQuickActions]=createSignal4([])
|
|
1584
1593
|
const [mcpServerGroups,setMcpServerGroups]=createSignal4(configured.mcpServerGroups??{})
|
|
1585
1594
|
const [skillGroups,setSkillGroups]=createSignal4({})
|
|
1595
|
+
const [autoApprovePermissions,setAutoApprovePermissions]=createSignal4()
|
|
1586
1596
|
const [ready,setReady]=createSignal4(false)
|
|
1587
1597
|
const [revision,setRevision]=createSignal4(0)
|
|
1588
1598
|
const sessionLayouts=new Map
|
|
@@ -1651,6 +1661,7 @@ setRecentSkills(value.user.recentSkills??[])
|
|
|
1651
1661
|
setRecentQuickActions(value.user.recentQuickActions??[])
|
|
1652
1662
|
setMcpServerGroups({...configured.mcpServerGroups,...value.user.mcpServerGroups})
|
|
1653
1663
|
setSkillGroups(value.user.skillGroups??{})
|
|
1664
|
+
setAutoApprovePermissions(value.user.autoApprovePermissions)
|
|
1654
1665
|
setReady(true)
|
|
1655
1666
|
refreshResolved()
|
|
1656
1667
|
}
|
|
@@ -1763,6 +1774,14 @@ return
|
|
|
1763
1774
|
setSkillGroups(assignGroup(skillGroups(),location,value))
|
|
1764
1775
|
update({user:{skillGroup:{location,group:value}}})
|
|
1765
1776
|
}
|
|
1777
|
+
function changeAutoApprovePermissions(value){if(!isHydrated){load().then(()=>changeAutoApprovePermissions(value))
|
|
1778
|
+
return
|
|
1779
|
+
}
|
|
1780
|
+
if(autoApprovePermissions()===value)
|
|
1781
|
+
return
|
|
1782
|
+
setAutoApprovePermissions(value)
|
|
1783
|
+
update({user:{autoApprovePermissions:value}})
|
|
1784
|
+
}
|
|
1766
1785
|
function toggleFavoriteMcpServer(name){if(!isHydrated){load().then(()=>toggleFavoriteMcpServer(name))
|
|
1767
1786
|
return
|
|
1768
1787
|
}
|
|
@@ -1833,7 +1852,7 @@ throw new Error("MCP preset no longer exists")
|
|
|
1833
1852
|
update({user:{workspaceProfile:{layout,mcp}}})
|
|
1834
1853
|
},favoriteSkills,favoriteMcpServers,favoriteQuickActions,toggleFavoriteMcpServer,toggleFavoriteQuickAction,recentSkills,recentQuickActions,mcpServerGroups,setMcpServerGroup(name,value){setMcpServerGroups(assignGroup(mcpServerGroups(),name,value))
|
|
1835
1854
|
update({user:{mcpServerGroup:{name,group:value}}})
|
|
1836
|
-
},skillGroups,setSkillGroup:changeSkillGroup,async recordSkillUse(skill){await load()
|
|
1855
|
+
},skillGroups,setSkillGroup:changeSkillGroup,autoApprovePermissions,setAutoApprovePermissions:changeAutoApprovePermissions,async recordSkillUse(skill){await load()
|
|
1837
1856
|
if(!skill.location)
|
|
1838
1857
|
return
|
|
1839
1858
|
setRecentSkills(parseRecentSkills([skill.location,...recentSkills()]))
|
|
@@ -3386,6 +3405,8 @@ return section!=="todo"&§ion!=="lsp"?true:current[section]
|
|
|
3386
3405
|
}
|
|
3387
3406
|
function supportsTitleVisibility(api){return hostCapabilities(api).titleVisibility!==false
|
|
3388
3407
|
}
|
|
3408
|
+
function supportsPermissionMode(api){return hostCapabilities(api).permissionMode!==false
|
|
3409
|
+
}
|
|
3389
3410
|
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."}]
|
|
3390
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."
|
|
3391
3412
|
},{icon:"history",title:"Direct navigation",description:"Open a child session without leaving your workflow."
|
|
@@ -4166,6 +4187,11 @@ return [{title:`${icons.icon(title ? "checked" : "unchecked")} Session title`,va
|
|
|
4166
4187
|
}]
|
|
4167
4188
|
}
|
|
4168
4189
|
function createSettingsGroups(api,preferences,icons){const supportedSections=()=>SIDEBAR_SECTIONS.filter((name)=>supportsSidebarSection(api,name))
|
|
4190
|
+
const permissionDefaultDescription=()=>{const value=preferences.autoApprovePermissions()
|
|
4191
|
+
if(value===undefined)
|
|
4192
|
+
return "follow OpenCode startup mode"
|
|
4193
|
+
return value?"on for new sessions":"off for new sessions"
|
|
4194
|
+
}
|
|
4169
4195
|
const groups=createMemo7(()=>[{id:"scope",tab:"Scope",title:"Preference scope",options:[{title:`${icons.icon(preferences.preferenceScope() === "global" ? "radioOn" : "radioOff")} Global`,value:"scope:global",description:"applies to every worktree"
|
|
4170
4196
|
},{title:`${icons.icon(preferences.preferenceScope() === "worktree" ? "radioOn" : "radioOff")} Current worktree`,value:"scope:worktree",description:preferences.canUseWorktreeScope()?preferences.preferenceScopeLabel():"unavailable outside a worktree"
|
|
4171
4197
|
}]
|
|
@@ -4175,7 +4201,8 @@ const groups=createMemo7(()=>[{id:"scope",tab:"Scope",title:"Preference scope",o
|
|
|
4175
4201
|
},{id:"sections",tab:"Sections",title:"Sections & order",options:[...titleVisibilityOptions(api,preferences,icons),...preferences.selectedSectionOrder().filter((name)=>supportsSidebarSection(api,name)).map((name,index)=>{const section=SECTION_DEFINITIONS.find((candidate)=>candidate.name===name)
|
|
4176
4202
|
return{title:`${icons.icon(preferences.selectedSections()[section.name] ? "checked" : "unchecked")} ${index + 1}. ${icons.section(section.name)} ${section.label}`,value:section.name,description:preferences.selectedSections()[section.name]?"visible":"hidden"
|
|
4177
4203
|
}})]
|
|
4178
|
-
},{id:"behavior",tab:"Behavior",title:"Behavior",options:[{title:`${icons.icon(preferences.
|
|
4204
|
+
},{id:"behavior",tab:"Behavior",title:"Behavior",options:[...supportsPermissionMode(api)?[{title:`${icons.icon(preferences.autoApprovePermissions() === true ? "checked" : "unchecked")} Default auto-approve permissions`,value:"auto_approve_permissions",description:permissionDefaultDescription()
|
|
4205
|
+
}]:[],{title:`${icons.icon(preferences.selectedStartInChat() ? "checked" : "unchecked")} Start new sessions in chat`,value:"start_in_chat",description:preferences.selectedStartInChat()?"skip Home \xB7 on":"show Home \xB7 off"
|
|
4179
4206
|
},{title:`${icons.icon(preferences.selectedPersistMcp() ? "checked" : "unchecked")} Remember MCP states`,value:"persist_mcp",description:preferences.selectedPersistMcp()?"on":"off"
|
|
4180
4207
|
},{title:`${icons.icon("settings")} Icon style`,value:"lsp_icon_style",description:preferences.selectedLspIconStyle()==="nerd"?"Nerd Font":"Text fallback"
|
|
4181
4208
|
},{title:`${icons.icon(preferences.selectedCornerFont() ? "checked" : "unchecked")} Multiline corner font`,value:"corner_font",description:preferences.selectedCornerFont()?"Installed":"Not installed \xB7 rectangular highlights"
|
|
@@ -4345,6 +4372,9 @@ break
|
|
|
4345
4372
|
case "start_in_chat":{input.preferences.toggleStartInChat()
|
|
4346
4373
|
break
|
|
4347
4374
|
}
|
|
4375
|
+
case "auto_approve_permissions":{input.preferences.setAutoApprovePermissions(input.preferences.autoApprovePermissions()!==true)
|
|
4376
|
+
break
|
|
4377
|
+
}
|
|
4348
4378
|
case "lsp_icon_style":{input.preferences.toggleLspIconStyle()
|
|
4349
4379
|
break
|
|
4350
4380
|
}
|
|
@@ -4674,6 +4704,42 @@ return _$createElement("box")
|
|
|
4674
4704
|
}
|
|
4675
4705
|
|
|
4676
4706
|
|
|
4707
|
+
function currentPermissionMode(api){const title=api.keymap.getCommands?.({visibility:"registered"
|
|
4708
|
+
}).find((command)=>command.name==="permission.mode")?.title
|
|
4709
|
+
if(typeof title!=="string")
|
|
4710
|
+
return
|
|
4711
|
+
if(title.startsWith("Disable auto-approve permissions"))
|
|
4712
|
+
return true
|
|
4713
|
+
return title.startsWith("Enable auto-approve permissions")?false:undefined
|
|
4714
|
+
}
|
|
4715
|
+
function PermissionModeBinding(props){let applying=false
|
|
4716
|
+
let observed
|
|
4717
|
+
createEffect11(()=>{if(!props.preferences.ready())
|
|
4718
|
+
return
|
|
4719
|
+
const preferred=props.preferences.autoApprovePermissions()
|
|
4720
|
+
const current=currentPermissionMode(props.api)
|
|
4721
|
+
observed=current
|
|
4722
|
+
if(preferred===undefined||current===undefined||current===preferred)
|
|
4723
|
+
return
|
|
4724
|
+
applying=true
|
|
4725
|
+
try{props.api.keymap.dispatchCommand("permission.mode")
|
|
4726
|
+
observed=currentPermissionMode(props.api)
|
|
4727
|
+
} finally{applying=false
|
|
4728
|
+
}})
|
|
4729
|
+
const unsubscribe=props.api.keymap.on?.("state",()=>{if(applying||!props.preferences.ready())
|
|
4730
|
+
return
|
|
4731
|
+
const current=currentPermissionMode(props.api)
|
|
4732
|
+
if(current===undefined||current===observed)
|
|
4733
|
+
return
|
|
4734
|
+
observed=current
|
|
4735
|
+
props.preferences.setAutoApprovePermissions(current)
|
|
4736
|
+
})
|
|
4737
|
+
if(unsubscribe)
|
|
4738
|
+
onCleanup13(unsubscribe)
|
|
4739
|
+
return _$createElement("box")
|
|
4740
|
+
}
|
|
4741
|
+
|
|
4742
|
+
|
|
4677
4743
|
|
|
4678
4744
|
function SettingsFooterButton(props){const icons=useIcons()
|
|
4679
4745
|
const [hovered,setHovered]=createSignal16(false)
|
|
@@ -4745,17 +4811,17 @@ function StartupSessionBinding(props){if(props.api.keymap.on){const unregister=p
|
|
|
4745
4811
|
return
|
|
4746
4812
|
queueMicrotask(()=>void props.controller.start())
|
|
4747
4813
|
})
|
|
4748
|
-
|
|
4814
|
+
onCleanup14(unregister)
|
|
4749
4815
|
} else
|
|
4750
|
-
|
|
4816
|
+
createEffect12(()=>{if(!props.controller.enabled())
|
|
4751
4817
|
return
|
|
4752
4818
|
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()
|
|
4753
4819
|
}]
|
|
4754
4820
|
})
|
|
4755
|
-
|
|
4821
|
+
onCleanup14(unregister)
|
|
4756
4822
|
})
|
|
4757
4823
|
onMount5(()=>void props.controller.initialize())
|
|
4758
|
-
|
|
4824
|
+
onCleanup14(props.controller.dispose)
|
|
4759
4825
|
return _$createElement("box")
|
|
4760
4826
|
}
|
|
4761
4827
|
function versionParts(value){const match=/^v?(\d+)\.(\d+)\.(\d+)(?:-([^+]+))?/.exec(value)
|
|
@@ -4889,7 +4955,7 @@ if(entries.length===0||disposed)
|
|
|
4889
4955
|
return
|
|
4890
4956
|
show()
|
|
4891
4957
|
} catch{}})
|
|
4892
|
-
|
|
4958
|
+
onCleanup15(()=>{disposed=true
|
|
4893
4959
|
clearTimeout(pending)
|
|
4894
4960
|
})
|
|
4895
4961
|
return _$createElement("box")
|
|
@@ -5339,7 +5405,7 @@ const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),h
|
|
|
5339
5405
|
const ref=(renderable)=>{unregister?.()
|
|
5340
5406
|
unregister=interaction?.register({...descriptor,renderable})
|
|
5341
5407
|
}
|
|
5342
|
-
|
|
5408
|
+
onCleanup16(()=>unregister?.())
|
|
5343
5409
|
return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
|
|
5344
5410
|
},activate(event){if(interaction)
|
|
5345
5411
|
return interaction.mouseActivate(descriptor.id,event)
|
|
@@ -5484,7 +5550,7 @@ const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`sect
|
|
|
5484
5550
|
const action=props.headerAction?useSidebarItem(props.api,props.interaction,{id:props.headerAction.id,position:()=>({section:props.navigationSection??0,row:0,column:1
|
|
5485
5551
|
}),disabled:props.headerAction.disabled,activate:props.headerAction.onActivate
|
|
5486
5552
|
},()=>theme().accent,"control"):undefined
|
|
5487
|
-
|
|
5553
|
+
createEffect13(()=>{props.headerAction?.label()
|
|
5488
5554
|
setActionWidth(undefined)
|
|
5489
5555
|
})
|
|
5490
5556
|
const actionLabel=()=>{const label=props.headerAction?.label()??""
|
|
@@ -5627,7 +5693,10 @@ const selected=props.controller.selectedPreset?.(target())
|
|
|
5627
5693
|
return selected&&Object.hasOwn(presets,selected)?selected:matchingMcpPreset(list(),presets)
|
|
5628
5694
|
})
|
|
5629
5695
|
return{target,favorites,groups,grouped,list,groupNames(bucket){return groupItems(bucket).map((item)=>item.name)
|
|
5630
|
-
},
|
|
5696
|
+
},groupStatus(bucket){const items=groupItems(bucket)
|
|
5697
|
+
const operation=bulk()
|
|
5698
|
+
const busy=operation.status==="running"&&"group" in operation&&operation.group===bucket||items.some((item)=>["loading","refreshing"].includes(props.controller.serverState(item.name,target()).status))
|
|
5699
|
+
return mcpGroupStatus(items,busy)
|
|
5631
5700
|
},filtered,visibility,active,state,bulk,bulkRunning,mutationRunning,connectable,disconnectable,errors,presetName
|
|
5632
5701
|
}}
|
|
5633
5702
|
|
|
@@ -5720,11 +5789,22 @@ return _el$2
|
|
|
5720
5789
|
|
|
5721
5790
|
|
|
5722
5791
|
|
|
5723
|
-
|
|
5792
|
+
function mcpColor(api,status){const theme=api.theme.current
|
|
5793
|
+
if(status==="connected")
|
|
5794
|
+
return theme.success
|
|
5795
|
+
if(status==="failed"||status==="needs_client_registration")
|
|
5796
|
+
return theme.error
|
|
5797
|
+
if(status==="needs_auth")
|
|
5798
|
+
return theme.warning
|
|
5799
|
+
return theme.textMuted
|
|
5800
|
+
}
|
|
5801
|
+
function mcpToggle(status,busy){if(busy||status==="pending")
|
|
5802
|
+
return "pending"
|
|
5803
|
+
return status==="connected"?"connected":"disconnected"
|
|
5804
|
+
}
|
|
5724
5805
|
function McpGroupHeader(props){const icons=useIcons()
|
|
5725
|
-
const theme=()=>props.api.theme.current
|
|
5726
5806
|
const id=()=>`${PLUGIN_ID}.mcp.group.${props.bucket}`
|
|
5727
|
-
const item=useSidebarItem(props.api,props.interaction,{id:id(),position:()=>props.position,disabled:()=>props.disabled
|
|
5807
|
+
const item=useSidebarItem(props.api,props.interaction,{id:id(),position:()=>props.position,disabled:()=>props.disabled,activate:props.onToggle
|
|
5728
5808
|
})
|
|
5729
5809
|
return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return id()
|
|
5730
5810
|
},height:1,get marginTop(){return props.marginTop
|
|
@@ -5742,15 +5822,14 @@ _$setProp(_el$,"wrapMode","none")
|
|
|
5742
5822
|
_$setProp(_el$,"truncate",true)
|
|
5743
5823
|
_$insert(_el$,()=>props.bucket,_el$2)
|
|
5744
5824
|
_$insert(_el$,()=>props.count,_el$3)
|
|
5745
|
-
_$effect((_$p)=>_$setProp(_el$,"fg",item.focused()?item.foregroundColor():theme
|
|
5825
|
+
_$effect((_$p)=>_$setProp(_el$,"fg",item.focused()?item.foregroundColor():props.api.theme.current.textMuted,_$p))
|
|
5746
5826
|
return _el$
|
|
5747
|
-
})(),(()=>{var _el$4=_$createElement("text")
|
|
5827
|
+
})(),(()=>{var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
5828
|
+
_$insertNode(_el$4,_el$5)
|
|
5748
5829
|
_$setProp(_el$4,"flexShrink",0)
|
|
5749
5830
|
_$setProp(_el$4,"wrapMode","none")
|
|
5750
|
-
_$insert(_el$
|
|
5751
|
-
|
|
5752
|
-
})())
|
|
5753
|
-
_$effect((_$p)=>_$setProp(_el$4,"fg",item.focused()?item.foregroundColor():props.disabled?theme().textMuted:theme().accent,_$p))
|
|
5831
|
+
_$insert(_el$5,()=>icons.icon(mcpToggle(props.status,false)))
|
|
5832
|
+
_$effect((_$p)=>_$setProp(_el$4,"fg",item.focused()?item.foregroundColor():mcpColor(props.api,props.status),_$p))
|
|
5754
5833
|
return _el$4
|
|
5755
5834
|
})()]
|
|
5756
5835
|
}})
|
|
@@ -5762,19 +5841,6 @@ return _el$4
|
|
|
5762
5841
|
|
|
5763
5842
|
|
|
5764
5843
|
|
|
5765
|
-
function mcpColor(api,status){const theme=api.theme.current
|
|
5766
|
-
if(status==="connected")
|
|
5767
|
-
return theme.success
|
|
5768
|
-
if(status==="failed"||status==="needs_client_registration")
|
|
5769
|
-
return theme.error
|
|
5770
|
-
if(status==="needs_auth")
|
|
5771
|
-
return theme.warning
|
|
5772
|
-
return theme.textMuted
|
|
5773
|
-
}
|
|
5774
|
-
function mcpToggle(status,busy){if(busy||status==="pending")
|
|
5775
|
-
return "pending"
|
|
5776
|
-
return status==="connected"?"connected":"disconnected"
|
|
5777
|
-
}
|
|
5778
5844
|
|
|
5779
5845
|
|
|
5780
5846
|
|
|
@@ -5946,7 +6012,7 @@ props.interaction.leaveFilter(input)
|
|
|
5946
6012
|
else
|
|
5947
6013
|
input?.blur()
|
|
5948
6014
|
}
|
|
5949
|
-
|
|
6015
|
+
onCleanup17(()=>unregisterInput?.())
|
|
5950
6016
|
return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
|
|
5951
6017
|
},flexDirection:"row",gap:1,marginTop:1,marginBottom:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return _$memo(()=>!!highlighted())()?theme().primary:item.backgroundColor()
|
|
5952
6018
|
},get onMouseOver(){return item.onMouseOver
|
|
@@ -6036,7 +6102,7 @@ return _el$2
|
|
|
6036
6102
|
},get interaction(){return props.interaction
|
|
6037
6103
|
},get bucket(){return item.bucket
|
|
6038
6104
|
},get count(){return model.groupNames(item.bucket).length
|
|
6039
|
-
},get
|
|
6105
|
+
},get status(){return model.groupStatus(item.bucket)
|
|
6040
6106
|
},get disabled(){return model.bulkRunning()||model.mutationRunning()
|
|
6041
6107
|
},get marginTop(){return index()>0?1:0
|
|
6042
6108
|
},get position(){return{section:props.navigationSection,row:9 + index()*3,column:0
|
|
@@ -6309,8 +6375,8 @@ unregisterBinding=undefined
|
|
|
6309
6375
|
unregisterCommands()
|
|
6310
6376
|
}}}
|
|
6311
6377
|
function SidebarToggleBinding(props){const shortcuts=createSidebarShortcutMode(props.api)
|
|
6312
|
-
|
|
6313
|
-
|
|
6378
|
+
createEffect14(()=>shortcuts.bind(props.preferences.toggleKey()))
|
|
6379
|
+
onCleanup18(shortcuts.dispose)
|
|
6314
6380
|
return _$createElement("box")
|
|
6315
6381
|
}
|
|
6316
6382
|
function SidebarFocusBinding(props){const commands=props.interaction.baseCommands()
|
|
@@ -6318,11 +6384,11 @@ const unregisterCommands=props.api.keymap.registerLayer({commands:[...commands,.
|
|
|
6318
6384
|
})=>({name:name.replace(PLUGIN_ID,()=>LEGACY_PLUGIN_ID),run,enabled
|
|
6319
6385
|
}))]
|
|
6320
6386
|
})
|
|
6321
|
-
|
|
6322
|
-
|
|
6387
|
+
onCleanup18(unregisterCommands)
|
|
6388
|
+
createEffect14(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
|
|
6323
6389
|
}]
|
|
6324
6390
|
})
|
|
6325
|
-
|
|
6391
|
+
onCleanup18(unregister)
|
|
6326
6392
|
})
|
|
6327
6393
|
return _$createElement("box")
|
|
6328
6394
|
}
|
|
@@ -6353,9 +6419,9 @@ const filtered=createMemo16(()=>list().filter((item)=>matchesFilter(query(),item
|
|
|
6353
6419
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("skills")??0,resetKey:()=>JSON.stringify([target().key,query()])
|
|
6354
6420
|
})
|
|
6355
6421
|
const state=createMemo16(()=>props.controller.state(target()))
|
|
6356
|
-
|
|
6422
|
+
createEffect15(()=>{const current=target()
|
|
6357
6423
|
const deactivate=untrack5(()=>props.controller.activate?.(current)??(()=>{}))
|
|
6358
|
-
|
|
6424
|
+
onCleanup19(deactivate)
|
|
6359
6425
|
untrack5(()=>void props.controller.refresh(current).catch(()=>{}))
|
|
6360
6426
|
})
|
|
6361
6427
|
async function useSkill(item){try{const isInserted=await props.controller.use(target(),item.name)
|
|
@@ -6516,11 +6582,11 @@ const tabs=createMemo17(()=>["all","active","recent",...counts().errors>0?["erro
|
|
|
6516
6582
|
const filtered=createMemo17(()=>filterSubagentView(rows(),mode(),query()))
|
|
6517
6583
|
const parentID=createMemo17(()=>props.api.state?.session?.get(props.sessionID)?.parentID)
|
|
6518
6584
|
const targetKey=createMemo17(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6519
|
-
|
|
6585
|
+
createEffect16(()=>{targetKey()
|
|
6520
6586
|
setQuery("")
|
|
6521
6587
|
setMode("all")
|
|
6522
6588
|
})
|
|
6523
|
-
|
|
6589
|
+
createEffect16(()=>{if(mode()!=="all"&&counts()[mode()]===0)
|
|
6524
6590
|
setMode("all")
|
|
6525
6591
|
})
|
|
6526
6592
|
const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("subagents")??0,resetKey:()=>JSON.stringify([targetKey(),query(),mode()])
|
|
@@ -6530,10 +6596,10 @@ const now=createSubagentClock(clockKey)
|
|
|
6530
6596
|
const byId=createMemo17(()=>new Map(visibility.visible().map((item)=>[item.session.id,item])))
|
|
6531
6597
|
const ids=createMemo17(()=>visibility.visible().map((item)=>item.session.id))
|
|
6532
6598
|
const state=createMemo17(()=>props.controller.state(props.sessionID))
|
|
6533
|
-
|
|
6599
|
+
createEffect16(()=>{const sessionID=props.sessionID
|
|
6534
6600
|
targetKey()
|
|
6535
6601
|
const deactivate=untrack6(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6536
|
-
|
|
6602
|
+
onCleanup20(deactivate)
|
|
6537
6603
|
untrack6(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6538
6604
|
})
|
|
6539
6605
|
return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentID,visibility,now,byId,ids,state
|
|
@@ -6880,19 +6946,19 @@ const unavailable=()=>hostCapabilityUnavailable(props.api,"todo")
|
|
|
6880
6946
|
const managed=()=>("guidance" in props.controller)?props.controller:undefined
|
|
6881
6947
|
const [mode,setMode]=createSignal28("all")
|
|
6882
6948
|
const targetKey=createMemo18(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
|
|
6883
|
-
|
|
6949
|
+
createEffect17(()=>{targetKey()
|
|
6884
6950
|
setMode("all")
|
|
6885
6951
|
})
|
|
6886
6952
|
const view=createMemo18(()=>buildTodoView(list(),mode()))
|
|
6887
6953
|
const visibility=createListVisibility({items:()=>view().rows,limit:()=>props.preferences.sectionItemLimit?.("todo")??0,resetKey:()=>JSON.stringify([targetKey(),mode()])
|
|
6888
6954
|
})
|
|
6889
6955
|
const state=createMemo18(()=>props.controller.state(props.sessionID))
|
|
6890
|
-
|
|
6956
|
+
createEffect17(()=>{const sessionID=props.sessionID
|
|
6891
6957
|
targetKey()
|
|
6892
6958
|
if(unavailable())
|
|
6893
6959
|
return
|
|
6894
6960
|
const deactivate=untrack7(()=>props.controller.activate?.(sessionID)??(()=>{}))
|
|
6895
|
-
|
|
6961
|
+
onCleanup21(deactivate)
|
|
6896
6962
|
untrack7(()=>void props.controller.refresh(sessionID).catch(()=>{}))
|
|
6897
6963
|
})
|
|
6898
6964
|
const navigationSection=()=>props.navigationSection??1
|
|
@@ -6949,7 +7015,7 @@ return _el$4
|
|
|
6949
7015
|
}
|
|
6950
7016
|
function SidebarContent(props){const sections=props.preferences.sections
|
|
6951
7017
|
const visibleSections=createMemo19(()=>props.preferences.sectionOrder().filter((section)=>sections()[section]&&supportsSidebarSection(props.api,section)))
|
|
6952
|
-
|
|
7018
|
+
onCleanup22(()=>props.interaction.setContentRoot(undefined))
|
|
6953
7019
|
return(()=>{var _el$=_$createElement("box")
|
|
6954
7020
|
_$use((node)=>props.interaction.setContentRoot(node),_el$)
|
|
6955
7021
|
_$setProp(_el$,"id",`${PLUGIN_ID}.root`)
|
|
@@ -6996,7 +7062,7 @@ return _el$
|
|
|
6996
7062
|
|
|
6997
7063
|
|
|
6998
7064
|
function McpPersistence(props){const persist=createMemo20(()=>props.controller.persist())
|
|
6999
|
-
|
|
7065
|
+
createEffect18(()=>{if(!props.api.state.ready)
|
|
7000
7066
|
return
|
|
7001
7067
|
persist()
|
|
7002
7068
|
const route=props.api.route.current
|
|
@@ -7004,12 +7070,12 @@ const params="params" in route?route.params:undefined
|
|
|
7004
7070
|
if(typeof params?.sessionID!=="string")
|
|
7005
7071
|
return
|
|
7006
7072
|
const current=props.controller.target()
|
|
7007
|
-
|
|
7073
|
+
onCleanup23(()=>props.controller.deactivate(current))
|
|
7008
7074
|
untrack8(()=>void props.controller.activate(current).catch(()=>{}))
|
|
7009
7075
|
})
|
|
7010
7076
|
return _$createElement("box")
|
|
7011
7077
|
}
|
|
7012
|
-
function PreferencesPersistence(props){
|
|
7078
|
+
function PreferencesPersistence(props){createEffect18(()=>{const location=currentLocation(props.api)
|
|
7013
7079
|
untrack8(()=>props.controller.setActiveScope(preferencesScope({directory:location.routing.directory,worktree:props.api.state.path.worktree
|
|
7014
7080
|
})))
|
|
7015
7081
|
props.controller.load()
|
|
@@ -7017,7 +7083,7 @@ props.controller.load()
|
|
|
7017
7083
|
return _$createElement("box")
|
|
7018
7084
|
}
|
|
7019
7085
|
function FirstRunWizardPersistence(props){let isChecked=false
|
|
7020
|
-
|
|
7086
|
+
createEffect18(()=>{if(isChecked)
|
|
7021
7087
|
return
|
|
7022
7088
|
isChecked=true
|
|
7023
7089
|
showFirstRunWizard(props.api,props.preferences).catch(()=>{})
|
|
@@ -7044,7 +7110,7 @@ const settingsId=`${PLUGIN_ID}.settings`
|
|
|
7044
7110
|
const settings=useSidebarItem(props.api,props.interaction,{id:settingsId,position:{section:0,row:0,column:0
|
|
7045
7111
|
},activate:()=>openSettings(props.api,props.preferences,undefined,props.mcp,props.skills)
|
|
7046
7112
|
},()=>theme().textMuted,"control")
|
|
7047
|
-
|
|
7113
|
+
onCleanup24(()=>props.interaction.setTitleRoot(undefined))
|
|
7048
7114
|
return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("box"),_el$3=_$createElement("box")
|
|
7049
7115
|
_$insertNode(_el$,_el$2)
|
|
7050
7116
|
_$use((node)=>props.interaction.setTitleRoot(node),_el$)
|
|
@@ -7307,7 +7373,7 @@ function legacyTheme(theme){return{primary:theme.hue.interactive[200],secondary:
|
|
|
7307
7373
|
|
|
7308
7374
|
function createV2UI(context){let dialogOpen=false
|
|
7309
7375
|
function DialogPrompt(props){let active=true
|
|
7310
|
-
|
|
7376
|
+
onCleanup25(()=>{active=false
|
|
7311
7377
|
})
|
|
7312
7378
|
onMount7(async ()=>{const value=await context.ui.dialog.prompt({title:props.title,placeholder:props.placeholder,value:props.value
|
|
7313
7379
|
})
|
|
@@ -7321,7 +7387,7 @@ props.onConfirm?.(value)
|
|
|
7321
7387
|
return _$createElement("box")
|
|
7322
7388
|
}
|
|
7323
7389
|
function DialogConfirm(props){let active=true
|
|
7324
|
-
|
|
7390
|
+
onCleanup25(()=>{active=false
|
|
7325
7391
|
})
|
|
7326
7392
|
onMount7(async ()=>{const confirmed=await context.ui.dialog.confirm({title:props.title,message:props.message
|
|
7327
7393
|
})
|
|
@@ -7386,7 +7452,7 @@ context.ui.router.navigate({type:"plugin",name,data:params})
|
|
|
7386
7452
|
},attention:context.attention,lifecycle:{signal:controller.signal,onDispose}}
|
|
7387
7453
|
api.slots=createV2Slots(context,keymap,(dispose)=>{onDispose(dispose)
|
|
7388
7454
|
})
|
|
7389
|
-
setHostCapabilities(api,{todo:true,lsp:false,titleVisibility:false
|
|
7455
|
+
setHostCapabilities(api,{todo:true,lsp:false,titleVisibility:false,permissionMode:false
|
|
7390
7456
|
})
|
|
7391
7457
|
return{api,async dispose(){controller.abort()
|
|
7392
7458
|
for(let index=disposers.length-1;index>=0; index--)
|
|
@@ -7481,14 +7547,15 @@ api.lifecycle.onDispose(unsubscribeConnected)
|
|
|
7481
7547
|
api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7482
7548
|
},get multilineCorners(){return preferences.cornerFont
|
|
7483
7549
|
},get children(){return [_$createComponent(PreferencesPersistence,{api,controller:preferences
|
|
7484
|
-
}),_$createComponent(
|
|
7550
|
+
}),_$memo(()=>_$memo(()=>!!supportsPermissionMode(api))()&&_$createComponent(PermissionModeBinding,{api,preferences
|
|
7551
|
+
})),_$createComponent(SettingsBinding,{api,preferences,mcp,skills
|
|
7485
7552
|
}),_$createComponent(SidebarToggleBinding,{api,preferences
|
|
7486
7553
|
}),_$createComponent(SidebarFocusBinding,{api,preferences,interaction
|
|
7487
7554
|
}),_$createComponent(SearchBinding,{api,preferences,get onNewSession(){return startup.handleNewSession
|
|
7488
7555
|
},interaction,skills,subagents,mcp
|
|
7489
7556
|
}),_$createComponent(FirstRunWizardPersistence,{api,preferences
|
|
7490
7557
|
}),_$createComponent(StartupSessionBinding,{api,controller:startup
|
|
7491
|
-
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.19.
|
|
7558
|
+
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.19.2"
|
|
7492
7559
|
}),_$createComponent(McpPersistence,{api,controller:mcp
|
|
7493
7560
|
})]
|
|
7494
7561
|
}})
|
|
@@ -7518,12 +7585,12 @@ throw result.error
|
|
|
7518
7585
|
}
|
|
7519
7586
|
return result.data?.type==="text"?result.data.content:undefined
|
|
7520
7587
|
})
|
|
7521
|
-
const versionStatus=createVersionStatus(api,"0.19.
|
|
7522
|
-
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.19.
|
|
7588
|
+
const versionStatus=createVersionStatus(api,"0.19.2")
|
|
7589
|
+
const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.19.2"))
|
|
7523
7590
|
api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7524
7591
|
},get multilineCorners(){return preferences.cornerFont
|
|
7525
7592
|
},get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
|
|
7526
|
-
},navigatorVersion:"0.19.
|
|
7593
|
+
},navigatorVersion:"0.19.2",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7527
7594
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7528
7595
|
}})
|
|
7529
7596
|
}})
|
|
@@ -7537,15 +7604,15 @@ return
|
|
|
7537
7604
|
return new TextDecoder().decode(await context.client.file.read({location:context.location,path:".opencode/navigator.json"
|
|
7538
7605
|
}))
|
|
7539
7606
|
},todo)
|
|
7540
|
-
const versionStatus=createVersionStatus(adapter.api,"0.19.
|
|
7541
|
-
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.19.
|
|
7607
|
+
const versionStatus=createVersionStatus(adapter.api,"0.19.2")
|
|
7608
|
+
const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.19.2"))
|
|
7542
7609
|
const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7543
7610
|
},get multilineCorners(){return preferences.cornerFont
|
|
7544
7611
|
},get children(){var _el$=_$createElement("box")
|
|
7545
7612
|
_$setProp(_el$,"flexDirection","row")
|
|
7546
7613
|
_$setProp(_el$,"justifyContent","space-between")
|
|
7547
7614
|
_$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
|
|
7548
|
-
},navigatorVersion:"0.19.
|
|
7615
|
+
},navigatorVersion:"0.19.2",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7549
7616
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7550
7617
|
}}),null)
|
|
7551
7618
|
_$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "opencode-navigator",
|
|
4
|
-
"version": "0.19.
|
|
4
|
+
"version": "0.19.2",
|
|
5
5
|
"description": "Search, navigate, and manage OpenCode sessions from the TUI",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"packageManager": "bun@1.4.2",
|