diff --git a/packages/tui/src/app.tsx b/packages/tui/src/app.tsx index ce15272d83d..1d4152b5a4c 100644 --- a/packages/tui/src/app.tsx +++ b/packages/tui/src/app.tsx @@ -614,7 +614,7 @@ function App(props: { pair?: DialogPairCredentials }) { return } - renderer.setTerminalTitle(`OC | ${title.length > 40 ? title.slice(0, 37) + "..." : title}`) + renderer.setTerminalTitle(`OC | ${title.length > 40 ? title.slice(0, 37) + "…" : title}`) return } @@ -971,7 +971,7 @@ function App(props: { pair?: DialogPairCredentials }) { const restart = client.restart if (!restart) return dialog.clear() - toast.show({ variant: "info", message: "Restarting service...", duration: 30000 }) + toast.show({ variant: "info", message: "Restarting service…", duration: 30000 }) // restart resolves once the replacement service is healthy; the // event stream reattaches through the reconnect loop. await restart() diff --git a/packages/tui/src/component/devtools-bar.tsx b/packages/tui/src/component/devtools-bar.tsx index 2702db1b06f..45f3bb0d41d 100644 --- a/packages/tui/src/component/devtools-bar.tsx +++ b/packages/tui/src/component/devtools-bar.tsx @@ -360,7 +360,7 @@ export function DevToolsBar() { Tools void dump()} disabled={dumping()} hoverBackground> - {dumping() ? "Writing debug snapshot..." : "Write debug snapshot"} + {dumping() ? "Writing debug snapshot…" : "Write debug snapshot"} {(file) => ( diff --git a/packages/tui/src/component/dialog-integration.tsx b/packages/tui/src/component/dialog-integration.tsx index b476d3006d0..245be7d05ac 100644 --- a/packages/tui/src/component/dialog-integration.tsx +++ b/packages/tui/src/component/dialog-integration.tsx @@ -352,7 +352,7 @@ function CommandStarting(props: { if (!handedOff) closed = true }) - return + return } function CommandPending(props: { @@ -412,7 +412,7 @@ function CommandPending(props: { }) }) - return + return } function CommandView(props: { title: string; output: string; message: string }) { @@ -541,7 +541,7 @@ function OAuthStarting(props: { }) }) - return + return } function OAuthAuto(props: { @@ -629,7 +629,7 @@ function OAuthAuto(props: { title={props.title} url={props.attempt.url} instructions={props.attempt.instructions} - message="Waiting for authorization..." + message="Waiting for authorization…" copy open /> @@ -953,7 +953,7 @@ async function externalAnswer( if (choice === true) return true const result = await new Promise((resolve) => { dialog.replace( - () => , + () => , () => resolve(CANCELLED), ) void open(field.url).then( diff --git a/packages/tui/src/component/error-component.tsx b/packages/tui/src/component/error-component.tsx index 0949e1f9047..48ad4b107d7 100644 --- a/packages/tui/src/component/error-component.tsx +++ b/packages/tui/src/component/error-component.tsx @@ -237,7 +237,7 @@ function buildIssueURL(message: string, stack: string, version: string) { // clipped trace is obvious. searchParams.set handles encoding without throwing, // so measuring url.toString() is both correct and safe on any input. const MAX_URL_LENGTH = 6000 - const marker = "\n... (truncated)" + const marker = "\n… (truncated)" const head = `The OpenCode TUI crashed with an unexpected error.\n\n**Error:** ${message}\n\n**Stack trace:**\n` const setBody = (body: string) => url.searchParams.set("description", head + "```\n" + body + "\n```") diff --git a/packages/tui/src/component/prompt/index.tsx b/packages/tui/src/component/prompt/index.tsx index d5efd847c7b..882e95d0538 100644 --- a/packages/tui/src/component/prompt/index.tsx +++ b/packages/tui/src/component/prompt/index.tsx @@ -1641,10 +1641,10 @@ export function Prompt(props: PromptProps) { const value = (() => { if (store.mode === "shell") { if (!shell().length) return undefined - return `Run a command... "${shell()[store.placeholder % shell().length]}"` + return `Run a command… "${shell()[store.placeholder % shell().length]}"` } if (!list().length) return undefined - return `Ask anything... "${list()[store.placeholder % list().length]}"` + return `Ask anything… "${list()[store.placeholder % list().length]}"` })() if (!value) return undefined const width = dimensions().width < 44 ? dimensions().width - 5 : Math.min(75, dimensions().width - 4) - 5 diff --git a/packages/tui/src/component/reconnecting.tsx b/packages/tui/src/component/reconnecting.tsx index 2f27df584f1..bb7423e00eb 100644 --- a/packages/tui/src/component/reconnecting.tsx +++ b/packages/tui/src/component/reconnecting.tsx @@ -28,7 +28,7 @@ export function Reconnecting(props: { managed?: boolean }) { paddingRight={2} gap={1} > - {props.managed ? "Restarting service..." : "Connection lost..."} + {props.managed ? "Restarting service…" : "Connection lost…"} {props.managed ? "Your session will resume automatically." diff --git a/packages/tui/src/component/startup-loading.tsx b/packages/tui/src/component/startup-loading.tsx index 04804b3ad48..22823d22443 100644 --- a/packages/tui/src/component/startup-loading.tsx +++ b/packages/tui/src/component/startup-loading.tsx @@ -5,7 +5,7 @@ import { Spinner } from "./spinner" export function StartupLoading(props: { ready: () => boolean }) { const theme = useTheme("elevated") const [show, setShow] = createSignal(false) - const text = createMemo(() => (props.ready() ? "Finishing startup..." : "Loading plugins...")) + const text = createMemo(() => (props.ready() ? "Finishing startup…" : "Loading plugins…")) let wait: NodeJS.Timeout | undefined let hold: NodeJS.Timeout | undefined let stamp = 0 diff --git a/packages/tui/src/routes/session/dialog-fork.tsx b/packages/tui/src/routes/session/dialog-fork.tsx index b99584d9842..d511ee8c918 100644 --- a/packages/tui/src/routes/session/dialog-fork.tsx +++ b/packages/tui/src/routes/session/dialog-fork.tsx @@ -75,7 +75,7 @@ export function DialogFork(props: { sessionID: string; messageID?: string; onMov when={!pending()} fallback={ - Forking session... + Forking session… } > diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index 564ab55be6b..273f9ed06f7 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -3134,9 +3134,9 @@ function Shell(props: ToolProps) { when={command()} fallback={ isRunning() || props.part.state.status === "streaming" ? ( - Writing command... + Writing command… ) : ( - Writing command... + Writing command… ) } > @@ -3183,7 +3183,7 @@ function Write(props: ToolProps) { - + Write {pathFormatter.format(stringValue(props.input.path))} @@ -3194,7 +3194,7 @@ function Write(props: ToolProps) { function Glob(props: ToolProps) { const pathFormatter = usePathFormatter() return ( - + Glob "{stringValue(props.input.pattern)}"{" "} in {pathFormatter.format(stringValue(props.input.path))} @@ -3218,7 +3218,7 @@ function Read(props: ToolProps) { <> + Grep "{stringValue(props.input.pattern)}"{" "} in {pathFormatter.format(stringValue(props.input.path))} @@ -3253,7 +3253,7 @@ function Grep(props: ToolProps) { function WebFetch(props: ToolProps) { return ( - + WebFetch {stringValue(props.input.url)} ) @@ -3261,7 +3261,7 @@ function WebFetch(props: ToolProps) { function WebSearch(props: ToolProps) { return ( - + {webSearchProviderLabel(props.metadata.provider)} "{stringValue(props.input.query)}" ) @@ -3283,7 +3283,7 @@ function Subagent(props: ToolProps) { icon={continuation() ? "↳" : isRunning() ? "│" : props.part.state.status === "completed" ? "✓" : "│"} spinner={!continuation() && isRunning()} complete={description()} - pending="Delegating..." + pending="Delegating…" part={props.part} onClick={() => { const id = sessionID() @@ -3474,7 +3474,7 @@ function Edit(props: ToolProps) { ? { label: "← Edit", value: pathFormatter.format(stringValue(props.input.path)) } : undefined } - title={stringValue(props.input.path) ? undefined : "# Preparing edit..."} + title={stringValue(props.input.path) ? undefined : "# Preparing edit…"} part={props.part} spinner={props.part.state.status === "streaming"} /> @@ -3629,7 +3629,7 @@ function Question(props: ToolProps) { - + Asked {count()} question{count() !== 1 ? "s" : ""} @@ -3640,7 +3640,7 @@ function Question(props: ToolProps) { function Skill(props: ToolProps) { const name = createMemo(() => stringValue(props.metadata.name) ?? stringValue(props.input.id)) return ( - + Skill "{name()}" ) diff --git a/packages/tui/src/ui/dialog-prompt.tsx b/packages/tui/src/ui/dialog-prompt.tsx index 1e1c8cb9cf7..e4855695a6c 100644 --- a/packages/tui/src/ui/dialog-prompt.tsx +++ b/packages/tui/src/ui/dialog-prompt.tsx @@ -100,11 +100,11 @@ export function DialogPrompt(props: DialogPromptProps) { cursorStyle={config.cursor} /> - {props.busyText ?? "Working..."} + {props.busyText ?? "Working…"} - processing...}> + processing…}> {shortcuts.get("dialog.prompt.submit")} submit diff --git a/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx b/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx index cd5baccceca..29d4f7efc4d 100644 --- a/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx +++ b/packages/tui/test/cli/tui/diff-viewer-file-tree.test.tsx @@ -59,7 +59,7 @@ describe("DiffViewerFileTree", () => { )) - expect(loading).not.toContain("Loading diff...") + expect(loading).not.toContain("Loading diff…") expect(loading).not.toContain("No files") expect(failed).not.toContain("Failed to load diff") expect(failed).not.toContain("No files") diff --git a/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx b/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx index 997c627ac0e..e405ec7c7fa 100644 --- a/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx +++ b/packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx @@ -73,7 +73,7 @@ function Fixture(props: { errorExpanded?: boolean }) { function FailedPendingToolFixture() { return ( - + Patch ) @@ -81,7 +81,7 @@ function FailedPendingToolFixture() { function FailedCompleteToolFixture() { return ( - + Read src/index.ts )