opencode-navigator 0.19.1 → 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 +5 -0
- package/README.md +3 -1
- package/dist/tui.js +37 -31
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
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
|
+
|
|
5
9
|
## [0.19.1] - 2026-10-02
|
|
6
10
|
|
|
7
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.
|
|
@@ -55,6 +59,7 @@
|
|
|
55
59
|
|
|
56
60
|
Earlier release notes are available on [GitHub Releases](https://github.com/St1ggy/opencode-navigator/releases).
|
|
57
61
|
|
|
62
|
+
[0.19.2]: https://github.com/St1ggy/opencode-navigator/compare/v0.19.1...v0.19.2
|
|
58
63
|
[0.19.1]: https://github.com/St1ggy/opencode-navigator/compare/v0.19.0...v0.19.1
|
|
59
64
|
[0.19.0]: https://github.com/St1ggy/opencode-navigator/compare/v0.18.2...v0.19.0
|
|
60
65
|
[0.18.2]: https://github.com/St1ggy/opencode-navigator/compare/v0.18.1...v0.18.2
|
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
|
|
package/dist/tui.js
CHANGED
|
@@ -195,6 +195,12 @@ function mcpGroupToggleAction(items){if(items.some((item)=>mcpToggleAction2(item
|
|
|
195
195
|
return "connect"
|
|
196
196
|
return items.some((item)=>mcpToggleAction2(item.status)==="disconnect")?"disconnect":undefined
|
|
197
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
|
+
}
|
|
198
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"
|
|
199
205
|
})).sort((left,right)=>{const leftRank=BUCKET_RANK[left.bucket]??1
|
|
200
206
|
const rightRank=BUCKET_RANK[right.bucket]??1
|
|
@@ -5687,7 +5693,10 @@ const selected=props.controller.selectedPreset?.(target())
|
|
|
5687
5693
|
return selected&&Object.hasOwn(presets,selected)?selected:matchingMcpPreset(list(),presets)
|
|
5688
5694
|
})
|
|
5689
5695
|
return{target,favorites,groups,grouped,list,groupNames(bucket){return groupItems(bucket).map((item)=>item.name)
|
|
5690
|
-
},
|
|
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)
|
|
5691
5700
|
},filtered,visibility,active,state,bulk,bulkRunning,mutationRunning,connectable,disconnectable,errors,presetName
|
|
5692
5701
|
}}
|
|
5693
5702
|
|
|
@@ -5780,11 +5789,22 @@ return _el$2
|
|
|
5780
5789
|
|
|
5781
5790
|
|
|
5782
5791
|
|
|
5783
|
-
|
|
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
|
+
}
|
|
5784
5805
|
function McpGroupHeader(props){const icons=useIcons()
|
|
5785
|
-
const theme=()=>props.api.theme.current
|
|
5786
5806
|
const id=()=>`${PLUGIN_ID}.mcp.group.${props.bucket}`
|
|
5787
|
-
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
|
|
5788
5808
|
})
|
|
5789
5809
|
return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return id()
|
|
5790
5810
|
},height:1,get marginTop(){return props.marginTop
|
|
@@ -5802,15 +5822,14 @@ _$setProp(_el$,"wrapMode","none")
|
|
|
5802
5822
|
_$setProp(_el$,"truncate",true)
|
|
5803
5823
|
_$insert(_el$,()=>props.bucket,_el$2)
|
|
5804
5824
|
_$insert(_el$,()=>props.count,_el$3)
|
|
5805
|
-
_$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))
|
|
5806
5826
|
return _el$
|
|
5807
|
-
})(),(()=>{var _el$4=_$createElement("text")
|
|
5827
|
+
})(),(()=>{var _el$4=_$createElement("text"),_el$5=_$createElement("b")
|
|
5828
|
+
_$insertNode(_el$4,_el$5)
|
|
5808
5829
|
_$setProp(_el$4,"flexShrink",0)
|
|
5809
5830
|
_$setProp(_el$4,"wrapMode","none")
|
|
5810
|
-
_$insert(_el$
|
|
5811
|
-
|
|
5812
|
-
})())
|
|
5813
|
-
_$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))
|
|
5814
5833
|
return _el$4
|
|
5815
5834
|
})()]
|
|
5816
5835
|
}})
|
|
@@ -5822,19 +5841,6 @@ return _el$4
|
|
|
5822
5841
|
|
|
5823
5842
|
|
|
5824
5843
|
|
|
5825
|
-
function mcpColor(api,status){const theme=api.theme.current
|
|
5826
|
-
if(status==="connected")
|
|
5827
|
-
return theme.success
|
|
5828
|
-
if(status==="failed"||status==="needs_client_registration")
|
|
5829
|
-
return theme.error
|
|
5830
|
-
if(status==="needs_auth")
|
|
5831
|
-
return theme.warning
|
|
5832
|
-
return theme.textMuted
|
|
5833
|
-
}
|
|
5834
|
-
function mcpToggle(status,busy){if(busy||status==="pending")
|
|
5835
|
-
return "pending"
|
|
5836
|
-
return status==="connected"?"connected":"disconnected"
|
|
5837
|
-
}
|
|
5838
5844
|
|
|
5839
5845
|
|
|
5840
5846
|
|
|
@@ -6096,7 +6102,7 @@ return _el$2
|
|
|
6096
6102
|
},get interaction(){return props.interaction
|
|
6097
6103
|
},get bucket(){return item.bucket
|
|
6098
6104
|
},get count(){return model.groupNames(item.bucket).length
|
|
6099
|
-
},get
|
|
6105
|
+
},get status(){return model.groupStatus(item.bucket)
|
|
6100
6106
|
},get disabled(){return model.bulkRunning()||model.mutationRunning()
|
|
6101
6107
|
},get marginTop(){return index()>0?1:0
|
|
6102
6108
|
},get position(){return{section:props.navigationSection,row:9 + index()*3,column:0
|
|
@@ -7549,7 +7555,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
|
|
|
7549
7555
|
},interaction,skills,subagents,mcp
|
|
7550
7556
|
}),_$createComponent(FirstRunWizardPersistence,{api,preferences
|
|
7551
7557
|
}),_$createComponent(StartupSessionBinding,{api,controller:startup
|
|
7552
|
-
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.19.
|
|
7558
|
+
}),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.19.2"
|
|
7553
7559
|
}),_$createComponent(McpPersistence,{api,controller:mcp
|
|
7554
7560
|
})]
|
|
7555
7561
|
}})
|
|
@@ -7579,12 +7585,12 @@ throw result.error
|
|
|
7579
7585
|
}
|
|
7580
7586
|
return result.data?.type==="text"?result.data.content:undefined
|
|
7581
7587
|
})
|
|
7582
|
-
const versionStatus=createVersionStatus(api,"0.19.
|
|
7583
|
-
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"))
|
|
7584
7590
|
api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7585
7591
|
},get multilineCorners(){return preferences.cornerFont
|
|
7586
7592
|
},get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
|
|
7587
|
-
},navigatorVersion:"0.19.
|
|
7593
|
+
},navigatorVersion:"0.19.2",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7588
7594
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7589
7595
|
}})
|
|
7590
7596
|
}})
|
|
@@ -7598,15 +7604,15 @@ return
|
|
|
7598
7604
|
return new TextDecoder().decode(await context.client.file.read({location:context.location,path:".opencode/navigator.json"
|
|
7599
7605
|
}))
|
|
7600
7606
|
},todo)
|
|
7601
|
-
const versionStatus=createVersionStatus(adapter.api,"0.19.
|
|
7602
|
-
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"))
|
|
7603
7609
|
const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
|
|
7604
7610
|
},get multilineCorners(){return preferences.cornerFont
|
|
7605
7611
|
},get children(){var _el$=_$createElement("box")
|
|
7606
7612
|
_$setProp(_el$,"flexDirection","row")
|
|
7607
7613
|
_$setProp(_el$,"justifyContent","space-between")
|
|
7608
7614
|
_$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
|
|
7609
|
-
},navigatorVersion:"0.19.
|
|
7615
|
+
},navigatorVersion:"0.19.2",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
|
|
7610
7616
|
},get onNavigatorUpdate(){return versionUpdates.navigator
|
|
7611
7617
|
}}),null)
|
|
7612
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",
|