Download packages/app/src/pages/new-session/new-session-draft-controller.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.26 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/pages/new-session/new-session-draft-controller.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/app/src/pages/new-session/new-session-draft-controller.ts
-
curl -L -o new-session-draft-controller.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/pages/new-session/new-session-draft-controller.ts
2.26 kB
| import { useSearchParams } from "@solidjs/router" | |
| import { createEffect, untrack } from "solid-js" | |
| import { usePromptInputV2Controller } from "@/components/prompt-input-v2" | |
| import { useComments } from "@/context/comments" | |
| import { useLocal } from "@/context/local" | |
| import { usePrompt } from "@/context/prompt" | |
| import { useServerSync } from "@/context/server-sync" | |
| import { createPromptInputController, createPromptProjectControls } from "@/pages/session/composer" | |
| import { createPromptModelSelection } from "@/pages/session/composer/prompt-model-selection" | |
| import { useSessionKey } from "@/pages/session/session-layout" | |
| import { useComposerCommands } from "@/pages/session/use-composer-commands" | |
| export function createNewSessionDraftController(workspace: { worktree: () => string; resetWorktree: () => void }) { | |
| const prompt = usePrompt() | |
| const serverSync = useServerSync() | |
| const comments = useComments() | |
| const local = useLocal() | |
| const route = useSessionKey() | |
| const [searchParams, setSearchParams] = useSearchParams<{ draftId?: string; prompt?: string }>() | |
| const model = createPromptModelSelection({ agent: () => local.agent.current() }) | |
| useComposerCommands({ model }) | |
| const controls = createPromptInputController({ | |
| sessionKey: route.sessionKey, | |
| sessionID: () => route.params.id, | |
| queryOptions: serverSync().queryOptions, | |
| model, | |
| }) | |
| const projectControls = createPromptProjectControls() | |
| const input = usePromptInputV2Controller({ | |
| get controls() { | |
| return controls() | |
| }, | |
| get newSessionWorktree() { | |
| return workspace.worktree() | |
| }, | |
| onNewSessionWorktreeReset: workspace.resetWorktree, | |
| onSubmit: comments.clear, | |
| }) | |
| createEffect(() => { | |
| if (!prompt.ready()) return | |
| untrack(() => { | |
| const text = searchParams.prompt | |
| if (!text) return | |
| prompt.set([{ type: "text", content: text, start: 0, end: text.length }], text.length) | |
| setSearchParams({ ...searchParams, prompt: undefined }) | |
| }) | |
| }) | |
| return { | |
| input, | |
| prompt: { | |
| ready: prompt.ready, | |
| readyPromise: () => prompt.ready.promise, | |
| }, | |
| project: { | |
| controls: projectControls, | |
| }, | |
| } | |
| } | |
| export type NewSessionDraftController = ReturnType<typeof createNewSessionDraftController> | |