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
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,22 @@ See [docs/releases/v0.25.0.md](docs/releases/v0.25.0.md) for full notes and [doc
### Added

- Add project icon file picker.
- Add file-content search to workspace results.
- Add hot tamale theme fonts and tokens.
- Add Claude Opus 4.7 model support.

### Changed

- Clarify OpenClaw gateway auth terminology.
- Extract provider status refresh button.
- Allow unsigned Windows artifacts when signing is unavailable.
- Dock terminal below the right panel on desktop.
- Remove stitch border setting from settings UI.

### Fixed

- Fix transport state snapshots in React hooks.
- Fix settings deep-link for projects section.

## [0.24.0] - 2026-04-14

Expand Down
6 changes: 6 additions & 0 deletions apps/web/src/components/ChatView.logic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ export function findLatestRevertableUserMessageId(
return null;
}

/**
* Extension point for injecting hidden provider-level input alongside user
* messages. Currently returns `undefined` — no hidden guidance is added.
* The function signature is kept so the call sites and tests stay wired up;
* future prompt-enhancement features will implement the body.
*/
export function buildHiddenProviderInput(options: {
prompt: string;
terminalContexts: ReadonlyArray<TerminalContextDraft>;
Expand Down
11 changes: 7 additions & 4 deletions apps/web/src/hooks/useProjectIconFilePicker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ import { useCallback, useRef, type ChangeEvent } from "react";

import { readFileAsDataUrl } from "~/lib/fileData";

export function useProjectIconFilePicker(options: { onFileSelected: (dataUrl: string) => void }) {
export function useProjectIconFilePicker(options: {
onFileSelected: (dataUrl: string) => void;
onError?: (error: unknown) => void;
}) {
const fileInputRef = useRef<HTMLInputElement>(null);
const { onFileSelected } = options;
const { onFileSelected, onError } = options;

const openFilePicker = useCallback(() => {
fileInputRef.current?.click();
Expand All @@ -22,10 +25,10 @@ export function useProjectIconFilePicker(options: { onFileSelected: (dataUrl: st
const dataUrl = await readFileAsDataUrl(file);
onFileSelected(dataUrl);
} catch (error) {
console.error("Failed to read project icon image:", error);
onError?.(error);
}
},
[onFileSelected],
[onFileSelected, onError],
);

return {
Expand Down
1 change: 1 addition & 0 deletions apps/web/src/routes/_chat.settings.index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2142,6 +2142,7 @@ export const Route = createFileRoute("/_chat/settings/")({
section === "authentication" ||
section === "hotkeys" ||
section === "environment" ||
section === "projects" ||
section === "git" ||
section === "models" ||
section === "mobile" ||
Expand Down
Loading