1- import { Show , createEffect , createMemo , onCleanup } from "solid-js"
1+ import { Show , createEffect , createMemo , createResource , onCleanup } from "solid-js"
22import { createStore } from "solid-js/store"
33import { useNavigate , useSearchParams } from "@solidjs/router"
44import { useSpring } from "@opencode-ai/ui/motion-spring"
@@ -25,11 +25,12 @@ import { pathKey } from "@/utils/path-key"
2525import { useLocal } from "@/context/local"
2626import { useProviders } from "@/hooks/use-providers"
2727import { useSettings } from "@/context/settings"
28- import { useServer } from "@/context/server"
29- import { useTabs } from "@/context/tabs"
28+ import { ServerConnection , useServer } from "@/context/server"
29+ import { type DraftTab , useTabs } from "@/context/tabs"
3030import { useDirectoryPicker } from "@/components/directory-picker"
3131import { base64Encode } from "@opencode-ai/core/util/encode"
3232import { legacySessionHref , requireServerKey , sessionHref } from "@/utils/session-route"
33+ import { useGlobal } from "@/context/global"
3334
3435export function SessionComposerRegion ( props : {
3536 state : SessionComposerState
@@ -73,26 +74,52 @@ export function SessionComposerRegion(props: {
7374 const settings = useSettings ( )
7475 const server = useServer ( )
7576 const tabs = useTabs ( )
77+ const global = useGlobal ( )
7678 const pickDirectory = useDirectoryPicker ( )
7779 const [ search ] = useSearchParams < { draftId ?: string } > ( )
7880 const view = layout . view ( route . sessionKey )
7981
82+ const draft = createMemo ( ( ) => {
83+ if ( ! search . draftId ) return
84+ return tabs . store . find ( ( tab ) : tab is DraftTab => tab . type === "draft" && tab . draftID === search . draftId )
85+ } )
86+ const projectServer = createMemo ( ( ) => {
87+ if ( ! search . draftId ) return server . current
88+ const target = draft ( ) ?. server
89+ if ( ! target ) return
90+ return server . list . find ( ( conn ) => ServerConnection . key ( conn ) === target )
91+ } )
92+ const projectServerCtx = createMemo ( ( ) => {
93+ const conn = projectServer ( )
94+ if ( conn ) return global . createServerCtx ( conn )
95+ } )
96+ const projects = createMemo ( ( ) =>
97+ search . draftId ? ( projectServerCtx ( ) ?. projects . list ( ) ?? [ ] ) : layout . projects . list ( ) ,
98+ )
99+
80100 const agentsQuery = createQuery ( ( ) => queryOptions ( ) . agents ( pathKey ( sdk ( ) . directory ) ) )
81101 const globalProvidersQuery = createQuery ( ( ) => queryOptions ( ) . providers ( null ) )
82102 const providersQuery = createQuery ( ( ) => queryOptions ( ) . providers ( pathKey ( sdk ( ) . directory ) ) )
83103 const selectProject = ( worktree : string ) => {
84- layout . projects . open ( worktree )
85- server . projects . touch ( worktree )
104+ const conn = projectServer ( )
105+ const target = projectServerCtx ( )
86106 if ( search . draftId ) {
87- tabs . updateDraft ( search . draftId , { server : server . key , directory : worktree } )
107+ if ( ! conn || ! target ) return
108+ target . projects . open ( worktree )
109+ target . projects . touch ( worktree )
110+ tabs . updateDraft ( search . draftId , { server : ServerConnection . key ( conn ) , directory : worktree } )
88111 return
89112 }
113+
114+ layout . projects . open ( worktree )
115+ server . projects . touch ( worktree )
90116 navigate ( `/${ base64Encode ( worktree ) } /session` )
91117 }
92118 const addProject = ( title : string ) => {
93- if ( ! server . current ) return
119+ const conn = projectServer ( )
120+ if ( ! conn ) return
94121 pickDirectory ( {
95- server : server . current ,
122+ server : conn ,
96123 title,
97124 onSelect : ( result ) => {
98125 const directory = Array . isArray ( result ) ? result [ 0 ] : result
@@ -115,7 +142,7 @@ export function SessionComposerRegion(props: {
115142 loading : agentsQuery . isLoading || providersQuery . isLoading || globalProvidersQuery . isLoading ,
116143 } ,
117144 projects : {
118- available : layout . projects . list ( ) ,
145+ available : projects ( ) ,
119146 directory : sdk ( ) . directory ,
120147 select : selectProject ,
121148 add : addProject ,
@@ -216,6 +243,12 @@ export function SessionComposerRegion(props: {
216243 update ( )
217244 } )
218245
246+ const ready = Promise . resolve ( )
247+ const [ promptReadyResource ] = createResource (
248+ ( ) => prompt . ready . promise ?? ready ,
249+ ( promise ) => promise . then ( ( ) => true ) ,
250+ )
251+
219252 return (
220253 < div
221254 ref = { props . setPromptDockRef }
@@ -258,7 +291,7 @@ export function SessionComposerRegion(props: {
258291
259292 < Show when = { showComposer ( ) } >
260293 < Show
261- when = { prompt . ready ( ) }
294+ when = { promptReadyResource ( ) }
262295 fallback = {
263296 < >
264297 < Show when = { rolled ( ) } keyed >
0 commit comments