Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 0 additions & 16 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,6 @@ file is the human-readable summary of what changed and why.

## Unreleased

### Branding

- **`codev --mini` splashes carry the CoDev mark** — the compact badge on the
entry and exit banners is now the `c` of the CoDev wordmark instead of the
inherited `o`, and it is drawn in the brand secondary (teal in dark, purple
in light) so it matches the home-screen banner rather than the muted detail
text beside it. The background pulse's `go` wordmark is unchanged.

### Sessions

- **`Ctrl+C` interrupts a running turn** — while the agent is working, `Ctrl+C`
Expand Down Expand Up @@ -101,14 +93,6 @@ file is the human-readable summary of what changed and why.

### Prompt

- **`cwd:branch` in the prompt footer** — the prompt footer shows the abbreviated
working directory with a `:branch` suffix (updating live on branch switches),
left of the open-file label. The last path segment and branch render in the text
color with the parent path muted, matching the sidebar footer; long paths are
middle-truncated so narrow terminals never overflow. Hidden while the sidebar
is visible, since the sidebar footer already shows the same `cwd:branch`.
([#65](https://github.com/quickbeard/codev-code/pull/65),
[#70](https://github.com/quickbeard/codev-code/pull/70))
- **Files first in `@` autocomplete** — `@` mention results list files and
directories before references, agents, and MCP resources in the TUI, the web
app, and the `codev run` footer. A few rows stay reserved for non-file results
Expand Down
1 change: 0 additions & 1 deletion DIVERGENCES.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ from the squash message first, or use a plain merge.
| `packages/tui/src/component/dialog-provider.tsx`, `packages/tui/src/component/dialog-model.tsx`, `packages/opencode/src/cli/cmd/providers.ts` | Filter `opencode`/`opencode-go` out of provider pickers and the `/model` dialog (model list + Favorites/Recent; the model dialog's opencode-first sort became a plain name sort) | Upstream's hosted offerings (Zen/Go) are detours for gateway users. | Keep our filters. |
| `packages/tui/src/component/dialog-provider.tsx` | The "Other" custom-provider option routes into the fork-only `runCustomProviderFlow` (component/dialog-custom-provider.tsx, new file) — id → API key → optional base URL → model discovery via `/v1/models` → `provider.<id>` block PATCHed into global codev.json (key stays in auth.json) — instead of upstream's credential-only `ApiMethod`; the local `promptCustomProviderID` helper moved into that flow (upstream's "only stores a credential" description no longer holds). `ApiMethod`'s `custom` prop is now unreferenced but left in place. | An empty base URL keeps upstream's credential-only behavior; with one, the provider is usable without hand-editing codev.json. The configure gate's "Custom provider" option shares the same flow. | Keep our `onSelect` + import and the helper deletion; take upstream's changes to `ApiMethod`/other methods (the flow only wraps the entry point). |
| `packages/tui/src/component/prompt/index.tsx` | Gated the prompt footer's model/provider indicator on `useConnected()` (the shared "a real provider is configured" predicate) | Don't advertise the free hosted Zen default (e.g. "Big Pickle · OpenCode Zen") in the footer while nothing is configured — same rationale and predicate as `app.tsx`'s startup gate and the provider/model filters. A configured gateway/real provider, or a deliberately-authenticated opencode/opencode-go, still shows its model. | Keep the extra `Show` condition; take upstream's surrounding changes. |
| `packages/tui/src/component/prompt/index.tsx` | Added a `directoryLabel` memo (abbreviated cwd, `:branch` suffix when known, middle-truncated; last path segment + branch in text color, parent path muted, matching the sidebar footer) rendered as the first item of the prompt footer's right-side group, left of the editor open-file label. The memo delegates to `directoryFooterLabel(...)` and the render goes through a `<DirectoryLabel ... hidden={props.sidebarVisible}>` component — both in the fork-only `./directory-label.tsx`. `Prompt` takes a `sidebarVisible?: boolean` prop that `routes/session/index.tsx` passes from its `sidebarVisible()` memo. | Keep the working directory and branch visible at a glance from the prompt (the home-footer `Directory` only shows once a destination is selected, and the sidebar — the other place showing the branch — is hidden by default), but suppress the label while the sidebar is visible since the sidebar footer already shows the same `cwd:branch`. | Keep the `directoryLabel` memo, the `directoryFooterLabel`/`DirectoryLabel` imports from the fork-only `./directory-label.tsx`, the `sidebarVisible` prop + the `hidden={props.sidebarVisible}` gate on `<DirectoryLabel>`, and the `sidebarVisible={sidebarVisible()}` prop on `<Prompt>`; take upstream's surrounding footer changes. |
| `packages/tui/src/component/prompt/index.tsx` | The busy-state footer arm (`status().type !== "idle"`) also renders `props.hint` after the `esc interrupt` text, gated on `status().type !== "retry"` | The hidden-sidebar hint (see the `routes/session/index.tsx` hint row) only rendered in the footer `Switch`'s idle fallback arm, so it vanished for the whole duration of a running turn — exactly when todos are being created. Retry keeps its `space-between` error row uncluttered. | Keep the `<Show when={status().type !== "retry"}>{props.hint}</Show>` line in the busy `Match` arm (additive); take upstream's surrounding changes. |
| `packages/tui/src/component/prompt/index.tsx` | Removed the editor open-file label from the footer's right-side group and lifted the state behind it out of `Prompt`: the local `dismissedEditorSelectionKey` signal and the `editorContext`/`editorPath`/`editorSelectionLabel`/`editorFileLabel`/`editorFileLabelDisplay`/`editorContextLabelState` memos are gone, replaced by `useEditorLabel()` (fork-only `src/context/editor-label.tsx`) — `selection()` feeds the `prompt.editor_context.clear` `enabled` predicate and the submit-time editor part, `state()` replaces `editor.labelState()` there, and `dismiss()` replaces the local `dismissEditorContext`. The pure helpers `hasEditorRangeSelection`/`getEditorRangeLabel` moved to that context module and are imported back for `formatEditorContext`. | The label now lives in the sidebar footer (see its row above). The dismissal state had to move with it: the sidebar must label the *effective* selection — the one this file actually attaches on submit — or it would advertise context the prompt has dismissed and won't send. | Keep the deletions, the `useEditorLabel` import + its three call sites, and the helper import from `../../context/editor-label`; take upstream's surrounding changes. If upstream reworks the editor-context label, apply the change to `editorContextFileLabel` in the fork-only sidebar module rather than restoring the footer render. |
| `packages/tui/src/app.tsx` | Mounted `<EditorLabelProvider>` (fork-only `./context/editor-label`) immediately inside `<EditorContextProvider>` | The effective-editor-selection state is shared by the prompt and the sidebar footer, so it has to be provided above both. | Keep the import and the wrapper; take upstream's surrounding provider changes. If upstream moves `EditorContextProvider`, keep ours directly inside it. |
Expand Down
44 changes: 0 additions & 44 deletions packages/tui/src/component/prompt/directory-label.tsx

This file was deleted.

19 changes: 0 additions & 19 deletions packages/tui/src/component/prompt/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import { Flag } from "@opencode-ai/core/flag/flag"
import { tint, useTheme } from "../../context/theme"
import { EmptyBorder, SplitBorder } from "../../ui/border"
import { useTuiPaths, useTuiTerminalEnvironment } from "../../context/runtime"
import { directoryFooterLabel, DirectoryLabel } from "./directory-label"
import { useClipboard } from "../../context/clipboard"
import { Spinner } from "../spinner"
import { useSDK } from "../../context/sdk"
Expand Down Expand Up @@ -71,10 +70,6 @@ export type PromptProps = {
ref?: (ref: PromptRef | undefined) => void
hint?: JSX.Element
right?: JSX.Element
// When the sidebar is visible it already shows the cwd:branch in its
// footer, so the prompt footer suppresses its own directory label to
// avoid the duplicate.
sidebarVisible?: boolean
showPlaceholder?: boolean
placeholders?: {
normal?: string[]
Expand Down Expand Up @@ -177,14 +172,6 @@ export function Prompt(props: PromptProps) {
// Fork: the effective selection lives in EditorLabel — the sidebar footer
// labels the same one this attaches on submit.
const editorLabel = useEditorLabel()
const directoryLabel = createMemo(() =>
directoryFooterLabel({
directory: project.instance.directory() || paths.cwd,
home: paths.home,
branch: sync.data.vcs?.branch,
width: dimensions().width,
}),
)
const [auto, setAuto] = createSignal<AutocompleteRef>()
const workspace = usePromptWorkspace(props.sessionID)
const move = usePromptMove({ projectID: project.project, sessionID: () => props.sessionID })
Expand Down Expand Up @@ -1661,12 +1648,6 @@ export function Prompt(props: PromptProps) {
</Switch>
<Show when={status().type !== "retry"}>
<box gap={2} flexDirection="row">
<DirectoryLabel
value={directoryLabel()}
text={theme.text}
muted={theme.textMuted}
hidden={props.sidebarVisible}
/>
<Switch>
<Match when={store.mode === "normal"}>
<Switch>
Expand Down
1 change: 0 additions & 1 deletion packages/tui/src/routes/session/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1363,7 +1363,6 @@ export function Session() {
}}
placeholders={messages().length === 0 ? placeholder : undefined}
sessionID={route.sessionID}
sidebarVisible={sidebarVisible()}
right={<pluginRuntime.Slot name="session_prompt_right" session_id={route.sessionID} />}
hint={
<Show when={sidebarHint()} fallback={<text />}>
Expand Down
38 changes: 0 additions & 38 deletions packages/tui/test/directory-label-view.test.tsx

This file was deleted.

56 changes: 0 additions & 56 deletions packages/tui/test/directory-label.test.ts

This file was deleted.

96 changes: 0 additions & 96 deletions packages/tui/test/prompt-footer-directory.test.tsx

This file was deleted.

Loading