summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-11-14 12:38:52 -0600
committeropencode <[email protected]>2025-11-18 17:07:34 +0000
commit4069999b782cc00d4e707f5eca32082bdfad45bc (patch)
treed5c13cdd361fc79b14250b4b426a0a1195f7a01c /packages/desktop/src/context
parent5ba9b47b3c87dfb044c30857e56959c8eff0c8c1 (diff)
downloadopencode-4069999b782cc00d4e707f5eca32082bdfad45bc.tar.gz
opencode-4069999b782cc00d4e707f5eca32082bdfad45bc.zip
wip(desktop): new layout work
Diffstat (limited to 'packages/desktop/src/context')
-rw-r--r--packages/desktop/src/context/layout.tsx52
-rw-r--r--packages/desktop/src/context/local.tsx47
-rw-r--r--packages/desktop/src/context/sdk.tsx15
-rw-r--r--packages/desktop/src/context/session.tsx6
-rw-r--r--packages/desktop/src/context/sync.tsx2
5 files changed, 64 insertions, 58 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx
new file mode 100644
index 000000000..9e4af90aa
--- /dev/null
+++ b/packages/desktop/src/context/layout.tsx
@@ -0,0 +1,52 @@
+import { createStore } from "solid-js/store"
+import { createMemo } from "solid-js"
+import { createSimpleContext } from "./helper"
+import { makePersisted } from "@solid-primitives/storage"
+
+export const { use: useLayout, provider: LayoutProvider } = createSimpleContext({
+ name: "Layout",
+ init: () => {
+ const [store, setStore] = makePersisted(
+ createStore({
+ sidebar: {
+ opened: true,
+ width: 280,
+ },
+ review: {
+ state: "pane" as "pane" | "tab",
+ },
+ }),
+ {
+ name: "__default-layout",
+ },
+ )
+
+ return {
+ sidebar: {
+ opened: createMemo(() => store.sidebar.opened),
+ open() {
+ setStore("sidebar", "opened", true)
+ },
+ close() {
+ setStore("sidebar", "opened", false)
+ },
+ toggle() {
+ setStore("sidebar", "opened", (x) => !x)
+ },
+ width: createMemo(() => store.sidebar.width),
+ resize(width: number) {
+ setStore("sidebar", "width", width)
+ },
+ },
+ review: {
+ state: createMemo(() => store.review?.state ?? "closed"),
+ pane() {
+ setStore("review", "state", "pane")
+ },
+ tab() {
+ setStore("review", "state", "tab")
+ },
+ },
+ }
+ },
+})
diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx
index 1cef1c9f1..cef6c5555 100644
--- a/packages/desktop/src/context/local.tsx
+++ b/packages/desktop/src/context/local.tsx
@@ -5,7 +5,6 @@ import type { FileContent, FileNode, Model, Provider, File as FileStatus } from
import { createSimpleContext } from "./helper"
import { useSDK } from "./sdk"
import { useSync } from "./sync"
-import { makePersisted } from "@solid-primitives/storage"
export type LocalFile = FileNode &
Partial<{
@@ -457,57 +456,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
}
})()
- const layout = (() => {
- const [store, setStore] = makePersisted(
- createStore({
- sidebar: {
- opened: true,
- width: 240,
- },
- review: {
- state: "pane" as "pane" | "tab",
- },
- }),
- {
- name: "_default-layout",
- },
- )
-
- return {
- sidebar: {
- opened: createMemo(() => store.sidebar.opened),
- open() {
- setStore("sidebar", "opened", true)
- },
- close() {
- setStore("sidebar", "opened", false)
- },
- toggle() {
- setStore("sidebar", "opened", (x) => !x)
- },
- width: createMemo(() => store.sidebar.width),
- resize(width: number) {
- setStore("sidebar", "width", width)
- },
- },
- review: {
- state: createMemo(() => store.review?.state ?? "closed"),
- pane() {
- setStore("review", "state", "pane")
- },
- tab() {
- setStore("review", "state", "tab")
- },
- },
- }
- })()
-
const result = {
model,
agent,
file,
context,
- layout,
}
return result
},
diff --git a/packages/desktop/src/context/sdk.tsx b/packages/desktop/src/context/sdk.tsx
index 8d0cace65..b7b753dbc 100644
--- a/packages/desktop/src/context/sdk.tsx
+++ b/packages/desktop/src/context/sdk.tsx
@@ -5,12 +5,15 @@ import { onCleanup } from "solid-js"
export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
name: "SDK",
- init: (props: { url: string }) => {
+ init: (props: { url: string; directory?: string }) => {
const abort = new AbortController()
- const sdk = createOpencodeClient({
- baseUrl: props.url,
- signal: abort.signal,
- })
+ const sdk = createOpencodeClient(
+ {
+ baseUrl: props.url,
+ signal: abort.signal,
+ },
+ { directory: props.directory },
+ )
const emitter = createGlobalEmitter<{
[key in Event["type"]]: Extract<Event, { type: key }>
@@ -27,6 +30,6 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
abort.abort()
})
- return { client: sdk, event: emitter }
+ return { url: props.url, directory: props.directory, client: sdk, event: emitter }
},
})
diff --git a/packages/desktop/src/context/session.tsx b/packages/desktop/src/context/session.tsx
index b2e15a42c..a468f4673 100644
--- a/packages/desktop/src/context/session.tsx
+++ b/packages/desktop/src/context/session.tsx
@@ -3,7 +3,7 @@ import { createSimpleContext } from "./helper"
import { batch, createEffect, createMemo } from "solid-js"
import { useSync } from "./sync"
import { makePersisted } from "@solid-primitives/storage"
-import { TextSelection, useLocal } from "./local"
+import { TextSelection } from "./local"
import { pipe, sumBy } from "remeda"
import { AssistantMessage } from "@opencode-ai/sdk"
@@ -11,7 +11,6 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex
name: "Session",
init: (props: { sessionId?: string }) => {
const sync = useSync()
- const local = useLocal()
const [store, setStore] = makePersisted(
createStore<{
@@ -140,9 +139,6 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex
setStore("tabs", "active", undefined)
return
}
- if (tab.startsWith("file://")) {
- await local.file.open(tab.replace("file://", ""))
- }
if (tab !== "review") {
if (!store.tabs.opened.includes(tab)) {
setStore("tabs", "opened", [...store.tabs.opened, tab])
diff --git a/packages/desktop/src/context/sync.tsx b/packages/desktop/src/context/sync.tsx
index 3626cf54f..11b2c36b8 100644
--- a/packages/desktop/src/context/sync.tsx
+++ b/packages/desktop/src/context/sync.tsx
@@ -63,6 +63,8 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const sdk = useSDK()
sdk.event.listen((e) => {
+ // fetch the child store
+ // make a set store function that always rights to the child store
const event = e.details
switch (event.type) {
case "session.updated": {