opencode-navigator 0.18.0 → 0.18.1

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 CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.18.1] - 2026-10-01
6
+
7
+ - Show calm Todo setup guidance in OpenCode 2.x when Navigator's server plugin is absent, without a request error or Retry control. Actual server failures still offer Retry.
8
+ - Keep Quick Action names readable in narrow sidebars by placing unavailable reasons below them and showing shortcuts only when they fit.
9
+
5
10
  ## [0.18.0] - 2026-10-01
6
11
 
7
12
  - Add durable per-session Todo lists to OpenCode 2.x through a separately configured Navigator server plugin and an agent Todo tool.
@@ -36,6 +41,7 @@
36
41
 
37
42
  Earlier release notes are available on [GitHub Releases](https://github.com/St1ggy/opencode-navigator/releases).
38
43
 
44
+ [0.18.1]: https://github.com/St1ggy/opencode-navigator/compare/v0.18.0...v0.18.1
39
45
  [0.18.0]: https://github.com/St1ggy/opencode-navigator/compare/v0.17.3...v0.18.0
40
46
  [0.17.3]: https://github.com/St1ggy/opencode-navigator/compare/v0.17.2...v0.17.3
41
47
  [0.17.2]: https://github.com/St1ggy/opencode-navigator/compare/v0.17.1...v0.17.2
package/README.md CHANGED
@@ -189,6 +189,12 @@ and update in the sidebar when the agent calls `navigator_todo_write`. The
189
189
  starts **Off**: tasks and the agent tool work without adding Todo instructions
190
190
  to the model's context. OpenCode 1.x continues to show the host's Todo list.
191
191
 
192
+ If you use both OpenCode 1.x and 2.x with the same global `opencode.json`, keep
193
+ that shared server config compatible with 1.x. Place the server-plugin entry
194
+ in a separate JSON file and set `OPENCODE_CONFIG` to its path **only when
195
+ launching OpenCode 2.x**. The TUI configuration in `cli.json` remains separate;
196
+ the OpenCode 1.x launch must not load Navigator's 2.x server plugin.
197
+
192
198
  ### Install the corner font
193
199
 
194
200
  **Required for rounded multiline selections in Nerd Font mode.** Run the font
package/dist/tui.js CHANGED
@@ -2,7 +2,7 @@ import {insert as _$insert,setProp as _$setProp,createElement as _$createElement
2
2
 
3
3
 
4
4
 
5
- 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,For as For10,createEffect as createEffect9,createMemo as createMemo8,onCleanup as onCleanup11,onMount as onMount4,createMemo as createMemo6,createMemo as createMemo7,Show as Show6,onCleanup as onCleanup12,createSignal as createSignal16,createEffect as createEffect10,onCleanup as onCleanup13,onMount as onMount5,onCleanup as onCleanup14,onMount as onMount6,For as For11,createSignal as createSignal17,createSignal as createSignal18,Show as Show7,createSignal as createSignal20,createSignal as createSignal19,onCleanup as onCleanup15,For as For12,Show as Show10,createMemo as createMemo10,createComputed,createMemo as createMemo9,createSignal as createSignal21,untrack as untrack2,Show as Show8,createComputed as createComputed2,untrack as untrack3,Show as Show9,createEffect as createEffect11,createSignal as createSignal22,createMemo as createMemo12,createSignal as createSignal24,createMemo as createMemo11,For as For13,Show as Show13,Show as Show11,Show as Show12,createSignal as createSignal23,onCleanup as onCleanup16,For as For14,Show as Show15,createMemo as createMemo14,Show as Show14,createMemo as createMemo13,createEffect as createEffect12,onCleanup as onCleanup17,For as For19,Match,Switch,createMemo as createMemo18,onCleanup as onCleanup21,For as For15,Show as Show16,createSignal as createSignal25,createEffect as createEffect13,createMemo as createMemo15,onCleanup as onCleanup18,untrack as untrack4,For as For17,Show as Show19,createEffect as createEffect14,createMemo as createMemo16,createSignal as createSignal26,onCleanup as onCleanup19,untrack as untrack5,For as For16,Show as Show18,Show as Show17,Show as Show23,createEffect as createEffect15,createMemo as createMemo17,createSignal as createSignal27,onCleanup as onCleanup20,untrack as untrack6,For as For18,Show as Show21,Show as Show20,Show as Show22,createEffect as createEffect16,createMemo as createMemo19,onCleanup as onCleanup22,untrack as untrack7,Show as Show24,createMemo as createMemo20,onCleanup as onCleanup23,createSignal as createSignal28,onCleanup as onCleanup24,onMount as onMount7} from "solid-js"
5
+ 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,For as For10,createEffect as createEffect9,createMemo as createMemo8,onCleanup as onCleanup11,onMount as onMount4,createMemo as createMemo6,createMemo as createMemo7,Show as Show6,onCleanup as onCleanup12,createSignal as createSignal16,createEffect as createEffect10,onCleanup as onCleanup13,onMount as onMount5,onCleanup as onCleanup14,onMount as onMount6,For as For11,createSignal as createSignal17,createSignal as createSignal18,Show as Show7,createSignal as createSignal20,createSignal as createSignal19,onCleanup as onCleanup15,For as For12,Show as Show10,createMemo as createMemo10,createComputed,createMemo as createMemo9,createSignal as createSignal21,untrack as untrack2,Show as Show8,createComputed as createComputed2,untrack as untrack3,Show as Show9,createEffect as createEffect11,createSignal as createSignal22,createMemo as createMemo12,createSignal as createSignal24,createMemo as createMemo11,For as For13,Show as Show13,Show as Show11,Show as Show12,createSignal as createSignal23,onCleanup as onCleanup16,For as For14,Show as Show15,createMemo as createMemo14,Show as Show14,createMemo as createMemo13,createSignal as createSignal25,createEffect as createEffect12,onCleanup as onCleanup17,For as For19,Match,Switch,createMemo as createMemo18,onCleanup as onCleanup21,For as For15,Show as Show16,createSignal as createSignal26,createEffect as createEffect13,createMemo as createMemo15,onCleanup as onCleanup18,untrack as untrack4,For as For17,Show as Show19,createEffect as createEffect14,createMemo as createMemo16,createSignal as createSignal27,onCleanup as onCleanup19,untrack as untrack5,For as For16,Show as Show18,Show as Show17,Show as Show23,createEffect as createEffect15,createMemo as createMemo17,createSignal as createSignal28,onCleanup as onCleanup20,untrack as untrack6,For as For18,Show as Show21,Show as Show20,Show as Show22,createEffect as createEffect16,createMemo as createMemo19,onCleanup as onCleanup22,untrack as untrack7,Show as Show24,createMemo as createMemo20,onCleanup as onCleanup23,createSignal as createSignal29,onCleanup as onCleanup24,onMount as onMount7} from "solid-js"
6
6
  var SIDEBAR_SECTIONS=["todo","subagents","skills","quick_actions","lsp","mcp"]
7
7
  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
8
  function preferencesScope(path){return path.worktree||path.directory||"global"
@@ -2640,10 +2640,13 @@ var NavigatorTodoRpc={id:"opencode-navigator.todo",methods:{list:{input:{type:"o
2640
2640
  },output
2641
2641
  }},events:{updated:{schema:{type:"object",properties:{sessionID,todos,guidance:{type:"boolean"}},required:["sessionID","todos","guidance"],additionalProperties:false
2642
2642
  }}}};
2643
+ function isMissingServer(error){return typeof error==="object"&&error!==null&&"type" in error&&error.type==="rpc.unavailable"
2644
+ }
2643
2645
  function createNavigatorTodoController(context,api){const rpc=context.client.rpc(NavigatorTodoRpc)
2644
2646
  const [sessions,setSessions]=createSignal11({})
2645
2647
  const [saving,setSaving]=createSignal11({})
2646
2648
  const [errors,setErrors]=createSignal11({})
2649
+ const [missing,setMissing]=createSignal11({})
2647
2650
  const requests=createRequestState(api.lifecycle.signal)
2648
2651
  const refreshing=new Map
2649
2652
  const revisions=new Map
@@ -2663,11 +2666,15 @@ const requestState=requests.start(current.key,"refresh Navigator todos",current.
2663
2666
  if(!requestState)
2664
2667
  return pending
2665
2668
  const request=rpc.list({sessionID},{location:current.routing,signal:requestState.signal}).then((value)=>{const state=normalizeTodoState(value)
2666
- if(requestState.isCurrent()&&(revisions.get(current.key)??0)===revision)
2669
+ if(requestState.isCurrent()){setMissing((values)=>({...values,[current.key]:false}))
2670
+ if((revisions.get(current.key)??0)===revision)
2667
2671
  set(current.key,state)
2672
+ }
2668
2673
  requestState.succeed()
2669
2674
  return state
2670
- }).catch((error)=>{requestState.fail(error)
2675
+ }).catch((error)=>{if(requestState.isCurrent()&&!requestState.signal.aborted)
2676
+ setMissing((values)=>({...values,[current.key]:isMissingServer(error)}))
2677
+ requestState.fail(error)
2671
2678
  throw error
2672
2679
  }).finally(()=>{requestState.finish()
2673
2680
  if(refreshing.get(current.key)===request)
@@ -2688,6 +2695,7 @@ set(current.key,normalizeTodoState(event.data))
2688
2695
  api.lifecycle.onDispose(unsubscribe)
2689
2696
  return{target,list(sessionID){return sessions()[target(sessionID).key]?.todos??[]
2690
2697
  },refresh,state(sessionID){return requests.state(target(sessionID).key)
2698
+ },missing(sessionID){return missing()[target(sessionID).key]??false
2691
2699
  },retry(sessionID){return refresh(sessionID,true)
2692
2700
  },guidance(sessionID){const key=target(sessionID).key
2693
2701
  return{enabled:sessions()[key]?.guidance??false,saving:saving()[key]??false,error:errors()[key],available:key in sessions()
@@ -6083,10 +6091,14 @@ return _$createComponent(SectionWithHeaderAction,{get api(){return props.api
6083
6091
 
6084
6092
  function QuickActionRow(props){const icons=useIcons()
6085
6093
  const theme=()=>props.api.theme.current
6094
+ const [width,setWidth]=createSignal25(0)
6086
6095
  const shortcut=createMemo13(()=>{const bindings=props.api.keymap.getCommandBindings({visibility:"registered",commands:[props.action.command]
6087
6096
  })
6088
6097
  return props.api.keys.formatBindings(bindings.get(props.action.command))
6089
6098
  })
6099
+ const visibleShortcut=createMemo13(()=>{const value=shortcut()
6100
+ return value&&width()>=Bun.stringWidth(props.action.label) + Bun.stringWidth(value) + 9?value:undefined
6101
+ })
6090
6102
  function run(){if(props.action.command==="session.new"&&props.onNewSession?.())
6091
6103
  return
6092
6104
  const result=props.interaction?props.interaction.dispatchFromReturnTarget(props.action.command):props.api.keymap.dispatchCommand(props.action.command)
@@ -6107,6 +6119,7 @@ return background==="transparent"?row.backgroundColor():background
6107
6119
  }
6108
6120
  return _$createComponent(ListRow,{ref:(node)=>row.ref(node),get id(){return id()
6109
6121
  },paddingLeft:1,paddingRight:1,get marginTop(){return props.separator?1:0
6122
+ },onSizeChange:function(){setWidth(this.width)
6110
6123
  },get backgroundColor(){return row.backgroundColor()
6111
6124
  },get onMouseOver(){return row.onMouseOver
6112
6125
  },get onMouseOut(){return row.onMouseOut
@@ -6120,14 +6133,11 @@ return _el$
6120
6133
  _$setProp(_el$2,"flexGrow",1)
6121
6134
  _$setProp(_el$2,"wrapMode","none")
6122
6135
  _$setProp(_el$2,"truncate",true)
6123
- _$insert(_el$2,()=>props.action.label,null)
6124
- _$insert(_el$2,(()=>{var _c$=_$memo(()=>!!props.disabled)
6125
- return()=>_c$()?` \xB7 ${props.disabled}`:""
6126
- })(),null)
6136
+ _$insert(_el$2,()=>props.action.label)
6127
6137
  _$effect((_$p)=>_$setProp(_el$2,"fg",row.foregroundColor(),_$p))
6128
6138
  return _el$2
6129
6139
  })()
6130
- },get metadata(){return _$createComponent(Show14,{get when(){return shortcut()
6140
+ },get metadata(){return _$createComponent(Show14,{get when(){return visibleShortcut()
6131
6141
  },children:(value)=>(()=>{var _el$3=_$createElement("text")
6132
6142
  _$setProp(_el$3,"flexShrink",0)
6133
6143
  _$setProp(_el$3,"wrapMode","none")
@@ -6136,6 +6146,14 @@ _$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme()
6136
6146
  return _el$3
6137
6147
  })()
6138
6148
  })
6149
+ },get details(){return _$createComponent(Show14,{get when(){return props.disabled
6150
+ },children:(reason)=>(()=>{var _el$4=_$createElement("text")
6151
+ _$setProp(_el$4,"wrapMode","word")
6152
+ _$insert(_el$4,reason)
6153
+ _$effect((_$p)=>_$setProp(_el$4,"fg",row.focused()?row.foregroundColor():theme().textMuted,_$p))
6154
+ return _el$4
6155
+ })()
6156
+ })
6139
6157
  },get trailing(){return _$createComponent(BookmarkControl,{ref:(node)=>favorite.ref(node),get id(){return `${id()}.favorite`
6140
6158
  },get bookmarked(){return props.favorite
6141
6159
  },get backgroundColor(){return controlBackground()
@@ -6392,7 +6410,7 @@ return _el$2
6392
6410
  }})
6393
6411
  }
6394
6412
  function SkillsSection(props){const dialogs=useDialogs(props.api)
6395
- const [query,setQuery]=createSignal25("")
6413
+ const [query,setQuery]=createSignal26("")
6396
6414
  const model=createSkillSectionModel(props,query)
6397
6415
  const navigationSection=()=>props.navigationSection??3
6398
6416
  function selectSkill(item){if(!props.preferences.shouldConfirmSkill(item)){model.useSkill(item)
@@ -6467,8 +6485,8 @@ return _el$
6467
6485
  function createSubagentSectionModel(props){const list=createMemo16(()=>props.controller.list(props.sessionID))
6468
6486
  const recent=createMemo16(()=>props.controller.recent?.(props.sessionID)??[])
6469
6487
  const rows=createMemo16(()=>buildSubagentView(list(),recent()))
6470
- const [query,setQuery]=createSignal26("")
6471
- const [mode,setMode]=createSignal26("all")
6488
+ const [query,setQuery]=createSignal27("")
6489
+ const [mode,setMode]=createSignal27("all")
6472
6490
  const counts=createMemo16(()=>countSubagentView(rows(),query()))
6473
6491
  const tabs=createMemo16(()=>["all","active","recent",...counts().errors>0?["errors"]:[]])
6474
6492
  const filtered=createMemo16(()=>filterSubagentView(rows(),mode(),query()))
@@ -6836,7 +6854,7 @@ function TodoSection(props){const list=createMemo17(()=>props.controller.list(pr
6836
6854
  const icons=useIcons()
6837
6855
  const unavailable=()=>hostCapabilityUnavailable(props.api,"todo")
6838
6856
  const managed=()=>("guidance" in props.controller)?props.controller:undefined
6839
- const [mode,setMode]=createSignal27("all")
6857
+ const [mode,setMode]=createSignal28("all")
6840
6858
  const targetKey=createMemo17(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
6841
6859
  createEffect15(()=>{targetKey()
6842
6860
  setMode("all")
@@ -6857,7 +6875,7 @@ const navigationSection=()=>props.navigationSection??1
6857
6875
  return _$createComponent(Section,{get api(){return props.api
6858
6876
  },get interaction(){return props.interaction
6859
6877
  },sectionId:`${PLUGIN_ID}.section.todo`,get navigationSection(){return navigationSection()
6860
- },title:"TODO",section:"todo",get summary(){return _$memo(()=>!!unavailable())()?"\u2014":`${view().counts.completed}/${list().length}`
6878
+ },title:"TODO",section:"todo",get summary(){return _$memo(()=>!!(unavailable()||managed()?.missing(props.sessionID)))()?"\u2014":`${view().counts.completed}/${list().length}`
6861
6879
  },get open(){return props.preferences.expanded().todo
6862
6880
  },onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(Show23,{get when(){return unavailable()
6863
6881
  },get fallback(){return(()=>{var _el$=_$createElement("box")
@@ -6870,14 +6888,8 @@ _$insert(_el$,_$createComponent(Show23,{get when(){return managed()?.guidance(pr
6870
6888
  },get navigationSection(){return navigationSection()
6871
6889
  }})
6872
6890
  }}),null)
6873
- _$insert(_el$,_$createComponent(Show23,{get when(){return _$memo(()=>!!(managed()&&state().error))()&&!managed()?.guidance(props.sessionID).available
6874
- },get children(){var _el$2=_$createElement("text")
6875
- _$insertNode(_el$2,_$createTextNode(`Add Navigator's server plugin to opencode.json; restart OpenCode to enable Todo.`))
6876
- _$setProp(_el$2,"wrapMode","word")
6877
- _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
6878
- return _el$2
6879
- }}),null)
6880
- _$insert(_el$,_$createComponent(SectionRequestBody,{get api(){return props.api
6891
+ _$insert(_el$,_$createComponent(Show23,{get when(){return managed()?.missing(props.sessionID)
6892
+ },get fallback(){return _$createComponent(SectionRequestBody,{get api(){return props.api
6881
6893
  },get interaction(){return props.interaction
6882
6894
  },id:`${PLUGIN_ID}.retry.todo`,get position(){return{section:navigationSection(),row:1,column:0
6883
6895
  }},get state(){return state()
@@ -6890,6 +6902,13 @@ _$insert(_el$,_$createComponent(SectionRequestBody,{get api(){return props.api
6890
6902
  },visibility,get density(){return props.preferences.rowDensity?.()??"compact"
6891
6903
  },get managed(){return Boolean(managed())
6892
6904
  }})
6905
+ }})
6906
+ },get children(){var _el$2=_$createElement("text"),_el$3=_$createTextNode(` Navigator Todo needs a separate OpenCode 2 server plugin. See the README setup steps and restart OpenCode.`)
6907
+ _$insertNode(_el$2,_el$3)
6908
+ _$setProp(_el$2,"wrapMode","word")
6909
+ _$insert(_el$2,()=>icons.icon("info"),_el$3)
6910
+ _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
6911
+ return _el$2
6893
6912
  }}),null)
6894
6913
  return _el$
6895
6914
  })()
@@ -7151,7 +7170,7 @@ return false
7151
7170
  }
7152
7171
  function enabled(value){return typeof value==="function"?value():value!==false
7153
7172
  }
7154
- function createV2Keymap(context){const [revision,setRevision]=createSignal28(0)
7173
+ function createV2Keymap(context){const [revision,setRevision]=createSignal29(0)
7155
7174
  const layers=new Map
7156
7175
  let sequence=0
7157
7176
  function layerActive(layer){const mode=layer.mode??"base"
@@ -7437,7 +7456,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
7437
7456
  },interaction,skills,subagents,mcp
7438
7457
  }),_$createComponent(FirstRunWizardPersistence,{api,preferences
7439
7458
  }),_$createComponent(StartupSessionBinding,{api,controller:startup
7440
- }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.18.0"
7459
+ }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.18.1"
7441
7460
  }),_$createComponent(McpPersistence,{api,controller:mcp
7442
7461
  })]
7443
7462
  }})
@@ -7467,12 +7486,12 @@ throw result.error
7467
7486
  }
7468
7487
  return result.data?.type==="text"?result.data.content:undefined
7469
7488
  })
7470
- const versionStatus=createVersionStatus(api,"0.18.0")
7471
- const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.18.0"))
7489
+ const versionStatus=createVersionStatus(api,"0.18.1")
7490
+ const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.18.1"))
7472
7491
  api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7473
7492
  },get multilineCorners(){return preferences.cornerFont
7474
7493
  },get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
7475
- },navigatorVersion:"0.18.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7494
+ },navigatorVersion:"0.18.1",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7476
7495
  },get onNavigatorUpdate(){return versionUpdates.navigator
7477
7496
  }})
7478
7497
  }})
@@ -7486,15 +7505,15 @@ return
7486
7505
  return new TextDecoder().decode(await context.client.file.read({location:context.location,path:".opencode/navigator.json"
7487
7506
  }))
7488
7507
  },todo)
7489
- const versionStatus=createVersionStatus(adapter.api,"0.18.0")
7490
- const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.18.0"))
7508
+ const versionStatus=createVersionStatus(adapter.api,"0.18.1")
7509
+ const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.18.1"))
7491
7510
  const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7492
7511
  },get multilineCorners(){return preferences.cornerFont
7493
7512
  },get children(){var _el$=_$createElement("box")
7494
7513
  _$setProp(_el$,"flexDirection","row")
7495
7514
  _$setProp(_el$,"justifyContent","space-between")
7496
7515
  _$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
7497
- },navigatorVersion:"0.18.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7516
+ },navigatorVersion:"0.18.1",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7498
7517
  },get onNavigatorUpdate(){return versionUpdates.navigator
7499
7518
  }}),null)
7500
7519
  _$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.18.0",
4
+ "version": "0.18.1",
5
5
  "description": "Search, navigate, and manage OpenCode sessions from the TUI",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.4.2",
@@ -102,9 +102,9 @@
102
102
  }
103
103
  },
104
104
  "devDependencies": {
105
- "@opencode-ai/plugin": "1.18.32",
106
- "@opencode-ai/sdk": "1.18.32",
107
- "@opencode/plugin": "2.0.16",
105
+ "@opencode-ai/plugin": "1.18.34",
106
+ "@opencode-ai/sdk": "1.18.34",
107
+ "@opencode/plugin": "2.0.21",
108
108
  "@opentui/core": "0.5.12",
109
109
  "@opentui/keymap": "0.5.12",
110
110
  "@opentui/solid": "0.5.12",