Download packages/app/src/pages/new-session/new-session-workspace-controller.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.51 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/pages/new-session/new-session-workspace-controller.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/app/src/pages/new-session/new-session-workspace-controller.ts
-
curl -L -o new-session-workspace-controller.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/pages/new-session/new-session-workspace-controller.ts
2.51 kB
| import { createMemo, createSignal } from "solid-js" | |
| import { useSDK } from "@/context/sdk" | |
| import { useServerSync } from "@/context/server-sync" | |
| import { useSync } from "@/context/sync" | |
| const workspaceBarEnabled = import.meta.env.VITE_OPENCODE_CHANNEL !== "prod" | |
| export function resolveNewSessionWorktree(input: { | |
| enabled: boolean | |
| selected?: string | |
| directory: string | |
| projectWorktree?: string | |
| }) { | |
| if (!input.enabled) return "main" | |
| if (input.selected) return input.selected | |
| if (input.projectWorktree && input.directory !== input.projectWorktree) return input.directory | |
| return "main" | |
| } | |
| export function normalizeNewSessionWorktree(value: string, directory: string, projectWorktree?: string) { | |
| if (value === "main" && projectWorktree !== directory) return projectWorktree | |
| return value | |
| } | |
| export function resolveNewSessionBranch(input: { | |
| worktree: string | |
| local?: string | |
| worktreeBranch: (worktree: string) => string | undefined | |
| }) { | |
| if (input.worktree === "main" || input.worktree === "create") return input.local | |
| return input.worktreeBranch(input.worktree) ?? input.local | |
| } | |
| export function createNewSessionWorkspaceController() { | |
| const sdk = useSDK() | |
| const sync = useSync() | |
| const serverSync = useServerSync() | |
| const [worktree, setWorktree] = createSignal<string>() | |
| const visible = createMemo(() => workspaceBarEnabled && sync().project?.vcs === "git") | |
| const value = createMemo(() => | |
| resolveNewSessionWorktree({ | |
| enabled: visible(), | |
| selected: worktree(), | |
| directory: sdk().directory, | |
| projectWorktree: sync().project?.worktree, | |
| }), | |
| ) | |
| const projectRoot = createMemo(() => sync().project?.worktree ?? sdk().directory) | |
| const localBranch = createMemo(() => serverSync().child(projectRoot())[0].vcs?.branch) | |
| const branch = createMemo(() => | |
| resolveNewSessionBranch({ | |
| worktree: value(), | |
| local: localBranch(), | |
| worktreeBranch: (worktree) => serverSync().child(worktree)[0].vcs?.branch, | |
| }), | |
| ) | |
| return { | |
| selection: { | |
| value, | |
| reset: () => setWorktree(), | |
| set: (worktree: string) => | |
| setWorktree(normalizeNewSessionWorktree(worktree, sdk().directory, sync().project?.worktree)), | |
| }, | |
| project: { | |
| root: projectRoot, | |
| workspaces: () => sync().project?.sandboxes ?? [], | |
| git: () => sync().project?.vcs === "git", | |
| }, | |
| bar: { | |
| visible, | |
| branch, | |
| }, | |
| } | |
| } | |
| export type NewSessionWorkspaceController = ReturnType<typeof createNewSessionWorkspaceController> | |