Commit Graph

1284 Commits

Author SHA1 Message Date
can1357 a5284fb381 fix(ask): preserved empty multi-select answers 2026-08-16 02:13:40 +02:00
can1357 f83111c8d4 Merge PR #8265: fix(tui): multi-select ask dialog submits on Enter instead of dead-ending (@zhang17-24) 2026-08-16 02:13:40 +02:00
can1357 92ce5db781 Merge PR #8651: fix(browser): clarify close release semantics (@koopmannleon19977-cmyk) 2026-08-16 02:13:38 +02:00
can1357 47195e57b4 Merge PR #8662: perf(coding-agent): bound streaming diff previews (@lemonleks) 2026-08-16 02:13:37 +02:00
Aleksandr Khaustov 006c5371ea perf(coding-agent): bound completed diff rendering 2026-08-15 20:39:36 +04:00
Aleksandr Khaustov c6e38c880b perf(coding-agent): bound streaming diff previews 2026-08-15 20:08:00 +04:00
koopmannleon19977-cmyk 7b6029277a fix(browser): clarify close release semantics 2026-08-15 15:11:49 +02:00
can1357 a3c15d2dec feat(coding-agent/tools): implemented pdf page screenshot rendering
- Add `renderPdfPageScreenshot` to render PDF pages via headless Chromium.
- Update `ReadTool` to intercept legacy PDF image paths and return page screenshots.
- Ensure daemon clients are closed on read command exit.
2026-08-14 14:37:56 +02:00
can1357 04fab5ecb4 feat: replaced custom mupdf wasm pipeline with native function
- Replaced the custom MuPDF-WASM PDF extraction and rendering pipeline with the new `pdfToMarkdown` native function from `@oh-my-pi/pi-natives`.
- Removed legacy MuPDF extraction modules, WASM embedding scripts, and PDF image extraction tools.
- Added OCR warnings and browser/text redirection for unsupported PDF image reads.
- Updated native package definitions, documentation, and test suites for the new PDF inspection capability.
2026-08-14 14:08:28 +02:00
can1357 15981329d6 refactor(coding-agent): migrated external editor and removed obsolete tests
- Replaced child_process spawn with Bun.spawn in packages/coding-agent/src/utils/external-editor.ts.
- Removed the browser tab evaluation test suite from packages/coding-agent/test/tools/browser-tab-evaluate.test.ts.
2026-08-14 00:14:29 +02:00
can1357 0d6a7146a3 feat(coding-agent): supported allSettled and any promise combinators in browser scope
- Added `allSettled` and `any` to tracked promise combinators in run scope.
- Updated browser cancellation tests to cover new promise combinators.
2026-08-14 00:11:04 +02:00
can1357 b279db1790 test: refactored test suites to eliminate time-based sleeps and polling loops
- Replaced time-based sleeps and polling loops with event-driven promise resolvers and fake timers across agent and tool tests.
- Migrated test suites to share in-memory auth storage and fixtures using lifecycle hooks.
- Updated catalog model definitions, metadata, and configurations.
2026-08-13 19:32:22 +02:00
can1357 778dfaccca test(coding-agent): align browser probes with linux scope 2026-08-13 18:46:18 +02:00
roboomp cf1ff14f5f fix(coding-agent): confine browser executable probe to linux
The executable version probe added in ecb22957 ("validate Linux browser
executables") replaced the file-only check in resolveSystemChromium with
isChromiumExecutable, which spawns the candidate `--version` for every
platform. On Windows chrome.exe is a GUI-subsystem binary: `--version`
does not print to a detached stdout and can hand off to a running
instance, opening/activating the user's normal browser window, after
which the probe rejects the candidate and falls back to cached Chrome
for Testing.

Gate the spawn probe on process.platform === "linux" (its intended
platform, where non-Chromium PATH wrappers are the real risk) and trust
the executable-file check on Windows and macOS.

Fixes #8445
2026-08-13 16:28:57 +00:00
can1357 6b4823181b test: cleaned test suites and documented filtering guidelines
- Remove redundant definedness, null, and type checks across test suites in multiple packages.
- Clean up unused assertions, metadata tests, and obsolete test cases.
- Add good versus bad test filter guidelines and requirements to project documentation.
2026-08-13 08:28:42 +02:00
roboomp 04a0b44d6a fix(tests): align test fixtures with low/high/max ladder for deepseek-v4-pro (#8405)
Updates test assertions and fixtures to reflect that V4 Pro now exposes the full [low, high, max] effort ladder, switches the incompatible-fallback test to the openrouter deepseek-v4-pro entry, and adds a shared browser lease in the evaluation suite to avoid relaunching Chromium per test under load.
2026-08-13 08:28:42 +02:00
can1357 006ea27fbd fix(hashline): replaced delimiter heuristics with tree-sitter validation
- Replaced heuristic delimiter-balance boundary repairs with tree-sitter guided variants.
- Added combinatorial search over replacement boundary keep/drop variants and syntax-essential row validation.
- Removed obsolete `CloserSpareAmbiguityError` along with custom JSX parsing and delimiter counting helpers.
- Updated warning and error messages to include unified boundary diagnostics.
2026-08-13 06:47:29 +02:00
can1357 cd72f22552 fix(lsp): restored overwritten rename target when move fails
- Displace overwritten destination into a temporary sibling directory during workspace renames.
- Restore the displaced file and clean up the temp directory if the main rename operation fails.
2026-08-13 06:05:20 +02:00
can1357 74f5f610c6 fix(lsp): reconciled executed prefix when workspace edit fails partway
- applyWorkspaceEdit takes an onExecuted callback fired after each
  filesystem mutation, so callers hold the executed prefix even when a
  later op throws.
- applyWorkspaceEditWithLsp reconciles overlays/watchers for that prefix
  best-effort before rethrowing the original apply error.
2026-08-13 05:58:40 +02:00
can1357 f52891fb82 fix(lsp): reconciled overlays from executed workspace-edit ops
- applyWorkspaceEdit now returns { applied, executed }; ops skipped via
  ignoreIfExists/ignoreIfNotExists are excluded from executed.
- applyWorkspaceEditWithLsp derives didClose/refresh/watched-file
  notifications from executed ops, so a skipped rename no longer closes
  the old URI overlay or emits phantom Deleted/Created events.
2026-08-13 05:54:28 +02:00
can1357 d8924d055b Merge PR #8399: fix(lsp): synchronize applied workspace edits (@roboomp) 2026-08-13 05:48:27 +02:00
can1357 e3771992a7 Merge PR #8396: fix(lsp): abort rename_file when willRenameFiles fails on a supporting server (@roboomp) 2026-08-13 05:47:21 +02:00
can1357 3bc181d042 Merge PR #8393: fix(lsp): preserve workspace resource options (@roboomp) 2026-08-13 05:46:42 +02:00
can1357 926228a821 Merge PR #8394: fix(lsp): reject unsupported rust-analyzer snippet edits (@roboomp) 2026-08-13 05:46:37 +02:00
can1357 c4bc106486 Merge PR #8397: fix(lsp): fail diagnostics when every applicable server fails (@roboomp) 2026-08-13 05:46:31 +02:00
can1357 3d9649fbfa Merge PR #8391: fix(lsp): correct workspace edit failure handling (@roboomp) 2026-08-13 05:46:26 +02:00
roboomp fb5c852384 fix(lsp): synchronized applied workspace edits
Reconciled open document overlays and watched files after committed WorkspaceEdits so later semantic requests observe disk state.

Fixes #8372
2026-08-13 03:13:00 +00:00
roboomp a776d9570b fix(lsp): guarded same-file rename against target removal
Skipped destination removal when an overwrite rename resolves both paths to the same inode (case-only rename on case-insensitive filesystems), so the source is no longer deleted before fs.rename runs.

Fixes #8373
2026-08-13 03:10:38 +00:00
roboomp 6381a1daad fix(lsp): pre-validated rename buckets before writing
Reject snippet-formatted or overlapping rename edits across all accepted URIs before applying any, so a later snippet edit cannot leave earlier files half-applied.

Fixes #8376
2026-08-13 03:09:11 +00:00
roboomp fc37f20dea fix(lsp): abort rename_file when willRenameFiles fails on a supporting server
The willRenameFiles loop caught every non-abort, non-method-not-found
error into serverNotes and fell through to fs.rename, so a genuine
failure from a server that supports the request moved the path without
its semantic edits, leaving references dangling. Split client acquisition
from the request, track hard failures, and abort before any mutation when
a supporting server errors. Servers replying method-not-found are still
skipped without blocking.

Fixes #8380
2026-08-13 03:07:16 +00:00
roboomp dce0216bcb fix(lsp): fail diagnostics when every applicable server fails
The direct diagnostics loop caught non-abort server errors without recording them, so a file whose every applicable server failed produced an empty aggregate rendered as OK with success: true — a false-negative hiding a total diagnostics failure.

Track per-file and global success/failure counts: zero successful server responses now yields success: false with an explicit failure line, while partial success still surfaces diagnostics and names the servers that failed.

Fixes #8377
2026-08-13 03:07:07 +00:00
roboomp ec7b6ed85c fix(lsp): rejected unsupported snippet text edits
Stopped advertising rust-analyzer snippet edit support and reject unexpected snippet-formatted edits before source is written.

Fixes #8376
2026-08-13 03:04:35 +00:00
roboomp f6e2b6c2e1 fix(lsp): preserved workspace resource options
Propagated CreateFile, RenameFile, and DeleteFile options through workspace edit planning and enforced their overwrite, ignore, and recursive semantics during execution.

Fixes #8373
2026-08-13 03:04:31 +00:00
roboomp 448cff19bc fix(lsp): corrected workspace edit failure handling
Advertised abort semantics because multi-file text edits are applied sequentially and cannot satisfy textOnlyTransactional.

Added initialization capability coverage and documented the fix.

Fixes #8375
2026-08-13 03:01:45 +00:00
can1357 b70bb7aced Merge PR #8186: feat(lsp): add Astral ty as built-in Python primary LSP server (@FNDEVVE) 2026-08-13 02:00:50 +02:00
left-to-right b245be11c5 fix(ask): address review comments on multi-select Enter submit
- Multi-question dialogs now advance on Enter in multi-select mode
  instead of submitting every question at once (roboomp blocking)
- Ask tool accepts an empty multi-select submission as a "select none"
  answer instead of aborting as a cancellation (codex P2)
- Footer hint reflects advance vs submit for multi-question dialogs
- Move the #8252 changelog entry to Unreleased (codex P2)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-12 22:58:02 +08:00
can1357 19c0afcc0d feat: implemented external thinking flags and transport reasoning controls
- Added the `--external-thinking` CLI flag alongside model capability checks to gate external thinking tool availability.
- Updated Anthropic and Google transports to honor `forceReasoningOff` for native thinking-off controls.
- Renamed the `thoughts` property and parameter to `notes` across think fixtures, tools, and tests.
- Updated system prompt instructions and test suites to verify transport-specific thinking and tool activation.
2026-08-12 02:23:17 +02:00
can1357 eb5e167abb test(coding-agent): included think tool in HIDDEN_TOOLS expectation 2026-08-11 21:01:02 +02:00
can1357 10fd42289c feat: introduced external thinking support and private scratchpad think tool
- Added support for external thinking and forced reasoning disablement across AI provider options and request transformers.
- Implemented the private scratchpad think tool along with its renderer, system prompt rules, and schema configuration.
- Updated agent session management and SDK tools to support dynamic runtime activation of the think tool via the externalThinking setting.
- Added comprehensive unit tests covering reasoning fallbacks, tool activation, and rendering behavior.
2026-08-11 20:39:57 +02:00
can1357 b524dfe36f refactor: standardized outbound User-Agent headers on shared utility constant
- Define a centralized `USER_AGENT` constant in `@oh-my-pi/pi-utils` formatted as `omp/<version>`.
- Replace hardcoded and platform-specific user agent strings across AI providers, catalog scrapers, tools, and search providers with the unified `USER_AGENT`.
- Add unit tests for update-cli binary release distribution gating.
2026-08-11 15:38:32 +02:00
can1357 b807d67e1d Merge PR #8238: fix(tui): render platform-aware modifier labels on macOS (@roboomp) 2026-08-11 15:15:45 +02:00
can1357 64baa7c1bd chore(format): applied biome formatting and removed dead code from merged prs 2026-08-11 15:14:15 +02:00
can1357 e56777e138 fix(lsp): rearmed cached idle checker after shutdown 2026-08-11 15:06:16 +02:00
can1357 7b3bd4781b Merge PR #8154: fix(lsp): stop idle checker during shutdown (@MikeeI) 2026-08-11 15:06:16 +02:00
can1357 046fdeab00 Merge PR #8153: fix(lsp): cancel requests after client timeout (@MikeeI) 2026-08-11 15:06:15 +02:00
can1357 19edecaa48 fix: kept out-of-order todo completions visible 2026-08-11 15:06:12 +02:00
can1357 f6d4f1e38b Merge PR #7965: fix(coding-agent): surface todo progress in the collapsed panel (@z80dev) 2026-08-11 15:06:12 +02:00
can1357 00d90809fc test: removed redundant policy-key suite 2026-08-11 15:06:11 +02:00
can1357 8504e4865f Merge PR #7945: fix(coding-agent): resolve xd:// device dispatches against device user policy first (@re2zero) 2026-08-11 15:06:11 +02:00
roboomp 097845bff0 fix(tui): render platform-aware modifier labels on macOS
Key hints resolved modifier tokens through a static, platform-agnostic label map with no `super` entry, so on macOS the shipped `super+v` paste default rendered 'Super+V' (no such key on a Mac) and `alt` always rendered 'Alt' instead of 'Option'. The static /hotkeys navigation rows were hardcoded with macOS 'Option'/'Cmd' names on every platform, so Linux/Windows users saw 'Cmd+Left'.

Modifier labels are now platform-aware: on darwin `alt` renders 'Option' and `super` renders 'Cmd'; every other platform keeps 'Alt'/'Super'. The platform is resolved through a single seam (setKeyHintPlatform/keyHintPlatform) mirroring the TUI's setKittyProtocolActive, keeping hint output deterministic in tests without mutating process.platform. The static /hotkeys rows use the same convention and drop the macOS-only Cmd line-start/end fragments (which map to no binding) off darwin.

Fixes #8235
2026-08-11 09:28:52 +00:00