Commit graph

443 commits

Author SHA1 Message Date
Gerard-Devlin
e652c694f8 feat: enhance message handling to sanitize stored user prompts and improve context display 2026-06-11 01:10:04 +08:00
Gerard-Devlin
140ec1c5bb feat: implement cleanup for temporary files in chat composer and event hooks 2026-06-11 01:03:36 +08:00
Gerard-Devlin
b57a0b0d23 fix: disable global webview zoom shortcuts
Disable Tauri zoom hotkeys for normal and debug windows.

Reset stale persisted app zoom on startup and consume Ctrl/Cmd zoom shortcuts without changing the whole webview scale.
2026-06-11 00:48:37 +08:00
Gerard-Devlin
671e3227e1 feat: add multi-select file tree actions
Preserve app context menus while suppressing the browser menu elsewhere.

Support Ctrl/Cmd multi-select, batch drag moves, Delete/Backspace deletion, and a themed confirmation dialog for file tree items.
2026-06-11 00:48:08 +08:00
Gerard-Devlin
a22860e589 fix: guard unsupported proxy image payloads
Send Anthropic image blocks as OpenAI image_url parts with high detail.

Detect endpoints known to reject OpenAI-style image parts and fail early with a clear provider error.
2026-06-11 00:47:29 +08:00
Gerard-Devlin
3eac6be0a8 feat: add provider model capability metadata
Return OpenAI-compatible model metadata from the backend and preserve provider model ordering.

Add chat/vision capability badges, metadata-driven model filtering, Qwen vision fallbacks, and tests.

Keep pasted chat images as temporary context and block image sends for text-only provider models.
2026-06-11 00:46:47 +08:00
Gerard-Devlin
8b1593ff20 feat(messages): enhance handling of tool result images in OpenAI requests 2026-06-10 18:04:53 +08:00
Gerard-Devlin
04a18f6cc5 fix(chat): interrupt active runs for guided follow-ups
Terminate the current Claude process on Windows when a guided follow-up is selected so queued guidance can take effect immediately instead of waiting for the active run to finish naturally.

Handle forced queued guidance before snapshot and file refresh work in the completion event, then resume the same tab with the preserved provider context.
2026-06-10 16:44:04 +08:00
Gerard-Devlin
717c572b41 fix(chat): allow multiple guided follow-ups
Keep guided follow-ups additive when users select multiple queued items during an active run instead of replacing the previously displayed guidance.

Prefer already-displayed guidance when continuing the next turn, preserve the first forced guidance item, and keep the forced queue state consistent when entries are removed or interrupted.

Add store coverage for displaying multiple guidance entries and consuming displayed guidance before ordinary queued items.
2026-06-10 16:33:46 +08:00
Gerard-Devlin
15d9576ba1 feat(chat): support queued guidance during active runs
Extract Claude CLI process lifecycle management into a dedicated claude_process module and expose an interrupt command for guided continuations.

Add per-tab queued guidance state so users can type follow-up direction while a response is streaming, force a selected guidance item into the next turn, and preserve the tab's provider when resuming.

Render pending guidance inline in the conversation, keep the composer send/stop behavior ergonomic during streaming, allow individual guidance removal, and polish the compact guidance row spacing and hover states.

Cover the queue, display, consume, and forced-guidance flows with store tests.
2026-06-10 16:21:22 +08:00
Gerard-Devlin
159195da90 chore: bump version to 1.3.0 across all relevant files 2026-06-10 13:18:58 +08:00
Gerard-Devlin
41e34b13e6 feat: align compatible proxy with Claude Code Router
Keep OpenAI-compatible providers on the native Claude Code pipeline while moving proxy transforms into dedicated modules. Add CCR-style message, provider, stream, and tool handling for thinking signatures, ExitTool fallback, streamed tool argument repair, cache cleanup, stream usage, and provider token compatibility.
2026-06-10 13:06:07 +08:00
Gerard-Devlin
f542be58ff feat: stream compatible providers through Claude proxy
Stream OpenAI-compatible provider responses through the local Anthropic proxy instead of buffering full responses. Map reasoning and tool-call deltas into Claude Code-compatible SSE events, and cache generated session titles so opening history does not regenerate them.
2026-06-10 12:15:21 +08:00
Gerard-Devlin
e5b66cdd48 Merge upstream main and resolve release conflicts 2026-06-10 11:44:41 +08:00
Hanjin Bae
1939030e9a
Merge pull request #200 from delibae/chore/bump-v1.2.0
Some checks failed
Lint / lint (push) Has been cancelled
chore: bump version to 1.2.0
2026-06-10 01:46:49 +09:00
Hanjin Bae
f8d5b2a20a chore: bump version to 1.2.0
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-10 01:46:43 +09:00
Hanjin Bae
a5e33b6cc1
Merge pull request #199 from delibae/chore/bump-v1.1.8
chore: bump version to 1.1.8
2026-06-10 00:50:46 +09:00
Hanjin Bae
846ef90e16 chore: bump version to 1.1.8
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-10 00:50:40 +09:00
Hanjin Bae
d5337a5007
Merge pull request #198 from delibae/fix/linux-pkgconfig-semistatic
fix: Linux build via pkg-config + semi-static (matches tectonic CI)
2026-06-10 00:29:37 +09:00
Hanjin Bae
a81e0e06a9 fix: use pkg-config + semi-static for Linux (matches tectonic CI)
Switch Linux build from vcpkg to pkg-config, matching tectonic's
own CI approach. vcpkg on Linux had unsolvable issues:
- graphite2 hidden symbol visibility
- ICU .so files missing symbols
- Incompatible with rust-lld, ld.bfd, and mold

pkg-config + system packages is the tectonic-recommended approach.
Semi-static linking maximizes portability. AppImage bundles .so files
automatically for distribution across distros.

Removes vcpkg overlay ports (no longer needed).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-10 00:29:30 +09:00
Hanjin Bae
42f20163f1
Merge pull request #197 from delibae/fix/linux-icu-disable-renaming
fix: add U_DISABLE_RENAMING + ICU diagnostic on Linux
2026-06-10 00:12:05 +09:00
Hanjin Bae
6e34b8660f fix: add U_DISABLE_RENAMING for ICU compat + ICU symbol diagnostic
vcpkg ICU may be built with --disable-renaming, exporting plain
symbols (ucnv_fromUChars) while tectonic C++ code references
versioned symbols (ucnv_fromUChars_78). Pass -DU_DISABLE_RENAMING=1
to match. Also add nm diagnostic to verify.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-10 00:11:58 +09:00
Hanjin Bae
4f50c1a4b2
Merge pull request #196 from delibae/fix/commit-cargo-lock
fix: commit Cargo.lock with pinned versions
2026-06-09 23:54:57 +09:00
Hanjin Bae
b0126b26bf fix: commit Cargo.lock with pinned dependency versions
Remove Cargo.lock from .gitignore and commit lockfile with:
- tectonic sub-crates pinned to v1.1.6 build versions
- tauri 2.11.1 + plugins matching NPM packages

Without Cargo.lock, CI resolves latest sub-crate versions which
have breaking API changes, and tauri plugins may not match NPM.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 23:54:51 +09:00
Hanjin Bae
715753c8d3
Merge pull request #195 from delibae/fix/linux-build-mold-vcpkg
fix: Linux build with mold linker + graphite2 overlay
2026-06-09 23:43:41 +09:00
Hanjin Bae
c2e8e83081 fix: Linux build with mold linker + graphite2 overlay + vcpkg ICU
Three issues prevented Linux builds with Rust 1.95+ and vcpkg:

1. graphite2 hidden symbols: vcpkg builds with -fvisibility=hidden,
   rust-lld errors on STV_HIDDEN refs. Fix: overlay port that adds
   GRAPHITE2_EXPORTING and removes -fvisibility=hidden.

2. Rust version scripts: ld.bfd can't mix anonymous + named version
   tags. Fix: use mold linker which handles both correctly.

3. ICU version mismatch: system ICU (v70/74) found before vcpkg ICU
   (v78), causing _78 suffix undefined symbols. Fix: move system ICU
   .so out of linker path during build.

vcpkg dynamic libs remain for portable distribution (issue #91).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 23:43:35 +09:00
Gerard-Devlin
871f78c642 feat(MarkdownRenderer): enhance table and horizontal rule rendering 2026-06-09 21:37:00 +08:00
Gerard-Devlin
e4d02600d0 fix(BashWidget): update styles for terminal and result display 2026-06-09 21:27:48 +08:00
Gerard-Devlin
24c1602b87 chore: update version to 1.2.0 in package.json and Cargo files 2026-06-09 21:10:48 +08:00
Gerard-Devlin
0b6947320e feat(provider): add Ollama local model support 2026-06-09 21:07:25 +08:00
Gerard-Devlin
6dd567c7d9 feat(provider): add Ollama local model support 2026-06-09 21:06:58 +08:00
Gerard-Devlin
39c2b4d000 fix(chat): enforce minimum composer drawer height 2026-06-09 20:49:26 +08:00
Gerard-Devlin
80957d066d feat(provider): run OpenAI-compatible models through Claude Code proxy
Replace the hand-written direct-provider runtime with a local Anthropic-to-OpenAI-compatible proxy so Qwen, DeepSeek, GLM, Gemini, and other compatible providers use the Claude Code CLI tool/session experience.

Normalize strict OpenAI tool_call/tool_result pairing to avoid provider 400 errors, keep session titles stable and synced, allow switching sessions while another chat is streaming, show running indicators, add provider deletion with confirmation, and auto-refresh the file sidebar with refresh feedback.
2026-06-09 20:42:51 +08:00
Gerard-Devlin
07c8acaeb6 feat(provider): run OpenAI-compatible models through Claude Code proxy
Replace the hand-written direct-provider runtime with a local Anthropic-to-OpenAI-compatible proxy so Qwen, DeepSeek, GLM, Gemini, and other compatible providers use the Claude Code CLI tool/session experience.

Normalize strict OpenAI tool_call/tool_result pairing to avoid provider 400 errors, keep session titles stable and synced, allow switching sessions while another chat is streaming, show running indicators, add provider deletion with confirmation, and auto-refresh the file sidebar with refresh feedback.
2026-06-09 20:41:20 +08:00
Gerard-Devlin
1b8ec314e5 Improve direct provider parity and session UX
Add Claude Code-style context compaction for OpenAI-compatible direct providers, including no-tools summaries and retry handling.

Generate cached model-backed session titles and auto-resume the latest project chat without delaying on title generation.

Polish editor search theming and keyboard navigation.
2026-06-09 16:16:04 +08:00
Gerard-Devlin
e9dda90604 Improve chat session recovery and titles 2026-06-09 15:11:40 +08:00
Gerard-Devlin
c0573db89a Polish workspace toolbar alignment 2026-06-09 01:46:10 +08:00
Gerard-Devlin
4946bafc27 Merge upstream main and resolve PR conflicts 2026-06-09 01:19:55 +08:00
Gerard-Devlin
00ad21e388 Address provider security review and desktop UX regressions 2026-06-09 01:12:22 +08:00
Hanjin Bae
8004b08a0b
Merge pull request #172 from delibae/fix/linux-use-bfd-linker
fix: use ld.bfd linker for Linux to resolve hidden graphite2 symbols
2026-06-09 02:10:35 +09:00
Hanjin Bae
803ea5f054 fix: use ld.bfd instead of lld for Linux build
rust-lld treats hidden symbol references as hard errors, but ld.bfd
resolves them. vcpkg's graphite2 has STV_HIDDEN on gr_* symbols which
lld refuses to link. Switch to ld.bfd via RUSTFLAGS.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 02:10:29 +09:00
Hanjin Bae
a325a78963
Merge pull request #171 from delibae/fix/linux-grep-exit-code
fix: handle grep no-match exit code in objcopy script
2026-06-09 02:02:02 +09:00
Hanjin Bae
d3be1f0281 fix: prevent grep exit code 1 from aborting objcopy script
grep returns exit 1 when no match found, which aborts the script
under set -e. Wrap with { ... || true; } to prevent this.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 02:01:56 +09:00
Hanjin Bae
5d9264a393
Merge pull request #170 from delibae/fix/linux-objcopy-no-procsubst
fix: use temp file instead of process substitution for objcopy
2026-06-09 01:59:25 +09:00
Hanjin Bae
84bf979885 fix: avoid process substitution in objcopy graphite2 fix
Use a temp file for symbol list instead of <() process substitution,
which fails in GitHub Actions shell. Also add explicit shell: bash.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 01:59:19 +09:00
Hanjin Bae
8e92a1e750
Merge pull request #169 from delibae/fix/linux-objcopy-archive-members
fix: extract archive members before objcopy for graphite2
2026-06-09 01:57:24 +09:00
Hanjin Bae
dd4454d5e1 fix: extract .a archive before objcopy to fix graphite2 symbols
objcopy cannot modify symbols inside .a archives directly. Extract
individual .o files with ar, globalize gr_* symbols in each, then
repack the archive.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 01:57:18 +09:00
Hanjin Bae
56a1981f6f
Merge pull request #168 from delibae/fix/linux-objcopy-graphite2
fix: globalize hidden graphite2 symbols with objcopy on Linux
2026-06-09 01:48:11 +09:00
Hanjin Bae
e1954b6050 fix: use objcopy to globalize hidden graphite2 symbols on Linux
vcpkg builds graphite2 with -fvisibility=hidden, making gr_* API
symbols invisible to the linker. Use objcopy --globalize-symbol to
make them visible again before the Tauri build.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 01:48:05 +09:00
Hanjin Bae
fa9f7b3794
Merge pull request #167 from delibae/fix/linux-graphite2-symlink
fix: symlink system graphite2 into vcpkg path on Linux
2026-06-09 01:42:33 +09:00