summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-12 07:26:43 -0500
committerGitHub <[email protected]>2026-03-12 12:26:43 +0000
commitd4107d51f163b74c96895b50d653828c698d937e (patch)
tree070ae9ad38ebd230d75517d485fc0c86f2263c6b /packages/app/src/pages/session
parentd8fbe0af0151c662008d8a2dbbb7c76ff5db88d4 (diff)
downloadopencode-d4107d51f163b74c96895b50d653828c698d937e.tar.gz
opencode-d4107d51f163b74c96895b50d653828c698d937e.zip
chore: cleanup (#17115)
Diffstat (limited to 'packages/app/src/pages/session')
-rw-r--r--packages/app/src/pages/session/composer/index.ts3
-rw-r--r--packages/app/src/pages/session/composer/session-composer-helpers.ts10
-rw-r--r--packages/app/src/pages/session/composer/session-composer-state.test.ts2
-rw-r--r--packages/app/src/pages/session/composer/session-composer-state.ts31
-rw-r--r--packages/app/src/pages/session/helpers.ts56
-rw-r--r--packages/app/src/pages/session/session-command-helpers.ts10
-rw-r--r--packages/app/src/pages/session/session-prompt-dock.test.ts22
-rw-r--r--packages/app/src/pages/session/session-prompt-helpers.ts4
-rw-r--r--packages/app/src/pages/session/use-session-commands.test.ts44
-rw-r--r--packages/app/src/pages/session/use-session-commands.tsx15
-rw-r--r--packages/app/src/pages/session/use-session-hash-scroll.ts2
11 files changed, 23 insertions, 176 deletions
diff --git a/packages/app/src/pages/session/composer/index.ts b/packages/app/src/pages/session/composer/index.ts
index e244a1536..b0069de53 100644
--- a/packages/app/src/pages/session/composer/index.ts
+++ b/packages/app/src/pages/session/composer/index.ts
@@ -1,3 +1,2 @@
export { SessionComposerRegion } from "./session-composer-region"
-export { createSessionComposerBlocked, createSessionComposerState } from "./session-composer-state"
-export type { SessionComposerState } from "./session-composer-state"
+export { createSessionComposerState } from "./session-composer-state"
diff --git a/packages/app/src/pages/session/composer/session-composer-helpers.ts b/packages/app/src/pages/session/composer/session-composer-helpers.ts
deleted file mode 100644
index 90c238af4..000000000
--- a/packages/app/src/pages/session/composer/session-composer-helpers.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export const todoState = (input: {
- count: number
- done: boolean
- live: boolean
-}): "hide" | "clear" | "open" | "close" => {
- if (input.count === 0) return "hide"
- if (!input.live) return "clear"
- if (!input.done) return "open"
- return "close"
-}
diff --git a/packages/app/src/pages/session/composer/session-composer-state.test.ts b/packages/app/src/pages/session/composer/session-composer-state.test.ts
index f7c11715c..c27454f7e 100644
--- a/packages/app/src/pages/session/composer/session-composer-state.test.ts
+++ b/packages/app/src/pages/session/composer/session-composer-state.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test } from "bun:test"
import type { PermissionRequest, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client"
-import { todoState } from "./session-composer-helpers"
+import { todoState } from "./session-composer-state"
import { sessionPermissionRequest, sessionQuestionRequest } from "./session-request-tree"
const session = (input: { id: string; parentID?: string }) =>
diff --git a/packages/app/src/pages/session/composer/session-composer-state.ts b/packages/app/src/pages/session/composer/session-composer-state.ts
index a007e4c84..525766dcf 100644
--- a/packages/app/src/pages/session/composer/session-composer-state.ts
+++ b/packages/app/src/pages/session/composer/session-composer-state.ts
@@ -8,30 +8,21 @@ import { useLanguage } from "@/context/language"
import { usePermission } from "@/context/permission"
import { useSDK } from "@/context/sdk"
import { useSync } from "@/context/sync"
-import { todoState } from "./session-composer-helpers"
import { sessionPermissionRequest, sessionQuestionRequest } from "./session-request-tree"
-const idle = { type: "idle" as const }
-
-export function createSessionComposerBlocked() {
- const params = useParams()
- const permission = usePermission()
- const sdk = useSDK()
- const sync = useSync()
- const permissionRequest = createMemo(() =>
- sessionPermissionRequest(sync.data.session, sync.data.permission, params.id, (item) => {
- return !permission.autoResponds(item, sdk.directory)
- }),
- )
- const questionRequest = createMemo(() => sessionQuestionRequest(sync.data.session, sync.data.question, params.id))
-
- return createMemo(() => {
- const id = params.id
- if (!id) return false
- return !!permissionRequest() || !!questionRequest()
- })
+export const todoState = (input: {
+ count: number
+ done: boolean
+ live: boolean
+}): "hide" | "clear" | "open" | "close" => {
+ if (input.count === 0) return "hide"
+ if (!input.live) return "clear"
+ if (!input.done) return "open"
+ return "close"
}
+const idle = { type: "idle" as const }
+
export function createSessionComposerState(options?: { closeMs?: number | (() => number) }) {
const params = useParams()
const sdk = useSDK()
diff --git a/packages/app/src/pages/session/helpers.ts b/packages/app/src/pages/session/helpers.ts
index be9656900..2da5ce6b8 100644
--- a/packages/app/src/pages/session/helpers.ts
+++ b/packages/app/src/pages/session/helpers.ts
@@ -1,4 +1,4 @@
-import { batch, createEffect, on, onCleanup, onMount, type Accessor } from "solid-js"
+import { batch, onCleanup, onMount } from "solid-js"
import { createStore } from "solid-js/store"
export const focusTerminalById = (id: string) => {
@@ -117,57 +117,3 @@ export const createSizing = () => {
}
export type Sizing = ReturnType<typeof createSizing>
-
-export const createPresence = (open: Accessor<boolean>, wait = 200) => {
- const [state, setState] = createStore({
- show: open(),
- open: open(),
- })
- let frame: number | undefined
- let t: number | undefined
-
- const clear = () => {
- if (frame !== undefined) {
- cancelAnimationFrame(frame)
- frame = undefined
- }
- if (t !== undefined) {
- clearTimeout(t)
- t = undefined
- }
- }
-
- createEffect(
- on(open, (next) => {
- clear()
-
- if (next) {
- if (state.show) {
- setState("open", true)
- return
- }
-
- setState({ show: true, open: false })
- frame = requestAnimationFrame(() => {
- frame = undefined
- setState("open", true)
- })
- return
- }
-
- if (!state.show) return
- setState("open", false)
- t = window.setTimeout(() => {
- t = undefined
- setState("show", false)
- }, wait)
- }),
- )
-
- onCleanup(clear)
-
- return {
- show: () => state.show,
- open: () => state.open,
- }
-}
diff --git a/packages/app/src/pages/session/session-command-helpers.ts b/packages/app/src/pages/session/session-command-helpers.ts
deleted file mode 100644
index b71a7b768..000000000
--- a/packages/app/src/pages/session/session-command-helpers.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export const canAddSelectionContext = (input: {
- active?: string
- pathFromTab: (tab: string) => string | undefined
- selectedLines: (path: string) => unknown
-}) => {
- if (!input.active) return false
- const path = input.pathFromTab(input.active)
- if (!path) return false
- return input.selectedLines(path) != null
-}
diff --git a/packages/app/src/pages/session/session-prompt-dock.test.ts b/packages/app/src/pages/session/session-prompt-dock.test.ts
deleted file mode 100644
index b3a9945d6..000000000
--- a/packages/app/src/pages/session/session-prompt-dock.test.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { describe, expect, test } from "bun:test"
-import { questionSubtitle } from "./session-prompt-helpers"
-
-describe("questionSubtitle", () => {
- const t = (key: string) => {
- if (key === "ui.common.question.one") return "question"
- if (key === "ui.common.question.other") return "questions"
- return key
- }
-
- test("returns empty for zero", () => {
- expect(questionSubtitle(0, t)).toBe("")
- })
-
- test("uses singular label", () => {
- expect(questionSubtitle(1, t)).toBe("1 question")
- })
-
- test("uses plural label", () => {
- expect(questionSubtitle(3, t)).toBe("3 questions")
- })
-})
diff --git a/packages/app/src/pages/session/session-prompt-helpers.ts b/packages/app/src/pages/session/session-prompt-helpers.ts
deleted file mode 100644
index ac3234c93..000000000
--- a/packages/app/src/pages/session/session-prompt-helpers.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export const questionSubtitle = (count: number, t: (key: string) => string) => {
- if (count === 0) return ""
- return `${count} ${t(count > 1 ? "ui.common.question.other" : "ui.common.question.one")}`
-}
diff --git a/packages/app/src/pages/session/use-session-commands.test.ts b/packages/app/src/pages/session/use-session-commands.test.ts
deleted file mode 100644
index ada1871e1..000000000
--- a/packages/app/src/pages/session/use-session-commands.test.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { describe, expect, test } from "bun:test"
-import { canAddSelectionContext } from "./session-command-helpers"
-
-describe("canAddSelectionContext", () => {
- test("returns false without active tab", () => {
- expect(
- canAddSelectionContext({
- active: undefined,
- pathFromTab: () => "src/a.ts",
- selectedLines: () => ({ start: 1, end: 1 }),
- }),
- ).toBe(false)
- })
-
- test("returns false when active tab is not a file", () => {
- expect(
- canAddSelectionContext({
- active: "context",
- pathFromTab: () => undefined,
- selectedLines: () => ({ start: 1, end: 1 }),
- }),
- ).toBe(false)
- })
-
- test("returns false without selected lines", () => {
- expect(
- canAddSelectionContext({
- active: "file://src/a.ts",
- pathFromTab: () => "src/a.ts",
- selectedLines: () => null,
- }),
- ).toBe(false)
- })
-
- test("returns true when file and selection exist", () => {
- expect(
- canAddSelectionContext({
- active: "file://src/a.ts",
- pathFromTab: () => "src/a.ts",
- selectedLines: () => ({ start: 1, end: 2 }),
- }),
- ).toBe(true)
- })
-})
diff --git a/packages/app/src/pages/session/use-session-commands.tsx b/packages/app/src/pages/session/use-session-commands.tsx
index b8ddeda82..ea3b5ec57 100644
--- a/packages/app/src/pages/session/use-session-commands.tsx
+++ b/packages/app/src/pages/session/use-session-commands.tsx
@@ -19,7 +19,6 @@ import { showToast } from "@opencode-ai/ui/toast"
import { findLast } from "@opencode-ai/util/array"
import { extractPromptFromParts } from "@/utils/prompt"
import { UserMessage } from "@opencode-ai/sdk/v2"
-import { canAddSelectionContext } from "@/pages/session/session-command-helpers"
export type SessionCommandContext = {
navigateMessageByOffset: (offset: number) => void
@@ -84,6 +83,14 @@ export const useSessionCommands = (actions: SessionCommandContext) => {
prompt.context.add({ type: "file", path, selection, preview })
}
+ const canAddSelectionContext = () => {
+ const active = tabs().active()
+ if (!active) return false
+ const path = file.pathFromTab(active)
+ if (!path) return false
+ return file.selectedLines(path) != null
+ }
+
const navigateMessageByOffset = actions.navigateMessageByOffset
const setActiveMessage = actions.setActiveMessage
const focusInput = actions.focusInput
@@ -136,11 +143,7 @@ export const useSessionCommands = (actions: SessionCommandContext) => {
title: language.t("command.context.addSelection"),
description: language.t("command.context.addSelection.description"),
keybind: "mod+shift+l",
- disabled: !canAddSelectionContext({
- active: tabs().active(),
- pathFromTab: file.pathFromTab,
- selectedLines: file.selectedLines,
- }),
+ disabled: !canAddSelectionContext(),
onSelect: () => {
const active = tabs().active()
if (!active) return
diff --git a/packages/app/src/pages/session/use-session-hash-scroll.ts b/packages/app/src/pages/session/use-session-hash-scroll.ts
index 1ea6a302b..5fadb1f22 100644
--- a/packages/app/src/pages/session/use-session-hash-scroll.ts
+++ b/packages/app/src/pages/session/use-session-hash-scroll.ts
@@ -3,8 +3,6 @@ import { useLocation, useNavigate } from "@solidjs/router"
import { createEffect, createMemo, onCleanup, onMount } from "solid-js"
import { messageIdFromHash } from "./message-id-from-hash"
-export { messageIdFromHash } from "./message-id-from-hash"
-
export const useSessionHashScroll = (input: {
sessionKey: () => string
sessionID: () => string | undefined