Commit Graph
5648 Commits
Author SHA1 Message Date
Can BölükandGitHub 8448a67602 Merge pull request #1374 from superhedge22/fix-review-enter-submit
Fix /review custom instructions submission
2026-05-26 21:40:15 +03:00
can1357 1d8ee5a891 refactor(yield): migrated to scheduler.wait with abort support and gate
- Replaced Bun.sleep with scheduler.wait for Node-compatible cancellable sleeps.
- Added module-level timestamp gate to skip yields within 50ms of the last one.
- Threaded AbortSignal through ExponentialYield.sleep to cancel losing timers in race.
- Added tests covering gate behaviour and stray-timer cancellation.
2026-05-26 20:37:39 +02:00
oldschoolaandcan1357 29d5392d3e feat(ai): add Fireworks Fire Pass support + AI provider review fixes
Fire Pass support:
- New provider with login command 'omp /login firepass'
- Hand-seeded kimi-k2.6-turbo model with Fire Pass router wire id
- pi-ai CLI --help lists firepass

AI provider fixes surfaced during the Fire Pass review:
- service_tier whitelist restored for openai/openai-codex only (was leaking to
  Fireworks, Firepass, OpenRouter, Azure OpenAI Responses)
- Anthropic tool schema normalizer collapses {} -> true for additionalProperties
- anthropic.prepareParams fires onPayload after drop helpers so callers see the
  real wire body
- isServiceTier type guard narrowed to ResolvedServiceTier
- transformMessages stops dropping orphan tool_result when all pending tool
  calls have already resolved
- zodToWireSchema preserves null for non-scalar nullable() inner schemas
- isEmptyObject / isJsonObjectEmpty use Object.keys().length === 0 instead of
  prototype-walking for...in
- Telemetry records resolved service_tier (priority) instead of scoped
  placeholder (openai-only/claude-only)
- Robomp dirty-state reminder no longer asserts a formatter-failure premise
2026-05-26 20:36:15 +02:00
Can BölükandGitHub 1595c4c766 Merge pull request #1396 from hezhiyang2000/fix/bash-busy-wait-yield
fix: prevent busy-wait in agent loop and bash executor
2026-05-26 21:34:37 +03:00
can1357 015501a5dc refactor(tui): replaced DA1 sentinel counter with typed owner queue
- Replaced `#pendingDa1Sentinels` integer with `#da1SentinelOwners` FIFO array tracking `"keyboard" | "osc11"` ownership.
- Keyboard and OSC 11 probes now own separate sentinel slots, preventing cross-contamination of DA1 replies.
- Simplified kitty detection to use `\x1b[?u` query-only (dropped `\x1b[>31u` push) so shutdown's single `\x1b[
2026-05-26 20:31:09 +02:00
Can BölükandGitHub 129fa47fb9 Merge pull request #1406 from nikzasel/fix/zellij-progressive-enhancement-keyboard
fix(tui): progressive enhancement keyboard negotiation for Zellij
2026-05-26 21:30:32 +03:00
can1357 f8764aed7c fix(tui): gated jamo width correction to darwin only
- Restricted Hangul Compatibility Jamo 1-cell override to macOS in both TS and Rust paths.
- Linux terminals (WezTerm, etc.) honor UAX#11 and render jamo as 2 cells, causing layout corruption with the unconditional correction.
- Updated tests to skip darwin-only jamo assertions off-darwin and parameterize expected widths via JAMO_CELLS.
2026-05-26 20:30:11 +02:00
can1357 bc9833d422 feat(mcp): added validation and warning for invalid OMP_MCP_TIMEOUT_MS
- Rejected negative values in addition to non-numeric ones, falling back to per-server config or default 30s.
- Emitted a logger warning when an invalid env value is ignored.
- Added tests covering negative and non-numeric rejection cases.
2026-05-26 20:30:02 +02:00
Can BölükandGitHub 170b6e535e Merge pull request #1410 from hanbinnoh/fix/jamo-width-platform-conditional
fix(tui): apply Hangul jamo width correction only on macOS
2026-05-26 21:29:34 +03:00
Can BölükandGitHub a2f4c70299 Merge pull request #1415 from omsrisrieternalradhakrsna/mcp-timeout-env-override
Allow disabling MCP client timeouts
2026-05-26 21:29:19 +03:00
Can BölükandGitHub 70480e9875 Merge branch 'main' into fix/coding-agent-misc 2026-05-26 21:27:39 +03:00
Can BölükandGitHub e1b52714be Merge pull request #1398 from justadudewithtime/feat/resolved-model-badge
feat(coding-agent): surface resolved subagent model badge in task widget
2026-05-26 21:25:57 +03:00
Can BölükandGitHub 6ef05f42a7 Merge pull request #1389 from oldschoola/fix/lsp-edits-and-identifiers
fix(coding-agent/lsp): accept $-prefixed identifiers; apply documentChanges in declared order
2026-05-26 21:25:35 +03:00
Can BölükandGitHub 7d7c87d65a Merge pull request #1405 from hanbinnoh/fix/cca-strip-multipleof
fix(ai): strip multipleOf from Cloud Code Assist tool schemas
2026-05-26 21:25:24 +03:00
can1357 7f27627a90 feat(mcp/oauth): added RFC 8414 path-ful issuer form to OAuth discovery
- Extended `buildWellKnownUrls` and `#resolveRegistrationEndpoint` to try `/.well-known//` as a third candidate after origin-root and path-prefixed forms.
- Fixed single-segment path handling so `/my-service` is treated as the gateway prefix rather than dropped.
- Fixed missing `await` on `#tryWellKnownForRegistration` that caused path-prefixed fallback to return an unresolved Promise.
- Added tests for single-segment prefix discovery and RFC 8414 path-ful issuer fallback.
2026-05-26 20:22:25 +02:00
can1357 ab74ef3cac fix(edit): rendered inline op payloads in streaming edit preview
- Adjusted hashline natural-order preview handling so op-insert and op-replace tokens now emit inline body content as payload when available.
- Added an inline-body presence check so those op tokens are skipped only if path or payload is missing for that line.
2026-05-26 20:22:25 +02:00
can1357 c31daf0805 feat(coding-agent): expanded find tool to return matching directories with slash markers
- Dropped the `fileType: natives.FileType.File` restriction so glob searches can return directories as well as files.
- Updated the find tool prompt to document directory results and trailing-slash output.
- Added tests verifying directory matches are included and emitted with a trailing `/`.
2026-05-26 20:22:25 +02:00
can1357 8a32eceb53 fix(utils): clamped usage durations to suppress stale negative reset countdowns
- Clamped `formatDuration` to return `0ms` for non-positive, NaN, or infinite inputs.
- Updated usage report rendering to suppress reset countdowns when `resetsAt` is absent or no longer in the future.
- Added unit tests for `formatDuration` covering clamped values and standard duration formatting.
2026-05-26 20:22:25 +02:00
can1357 c936620c63 fix(ai): resolved OAuth refresh failures by disabling creds
- Replaced inline definitive-failure checks with shared isDefinitiveOAuthFailure in auth-storage and refresher.
- Disabled credentials during definitive OAuth refresh failures and captured the disabling cause on the credential row.
- Wrote null usage-cache entries with expiresAt set to 0 when credentials were disabled to prevent stale reports.
- Added tests for invalid_grant and transient OAuth refresh outcomes, including cache and credential-state assertions.
- Updated Unreleased changelog notes to document OAuth refresh fixes and stale usage-cache clearing behavior.
2026-05-26 20:22:25 +02:00
Can BölükandGitHub 69798a4f3b Merge pull request #1325 from oldschoola/fix/heredoc-deadlock-windows-macos
fix(pi-shell): unblock bash heredocs >4 KiB on Windows and >64 KiB on macOS
2026-05-26 21:22:07 +03:00
Can BölükandGitHub 0e1807a49c Merge pull request #1407 from faizhasim/oauth-path-prefix-fix
feat(coding-agent): support OAuth discovery for path-prefixed auth servers behind gateways
2026-05-26 21:20:29 +03:00
oldschoolaandcan1357 b48cf6d255 fix(pi-shell): preserve heredocs on no-thread targets 2026-05-26 20:12:39 +02:00
oldschoolaandcan1357 ae927b6f81 fix(pi-shell): unblock bash heredocs >4 KiB on Windows and >64 KiB on macOS
brush_core::interp::setup_open_file_with_contents wrote the entire heredoc/here-string body into an anonymous pipe synchronously before handing the reader to the downstream command. Bodies that exceed the OS pipe buffer (~4 KiB on Windows, 16-64 KiB on macOS) deadlocked the writer forever, and the bash tool tripped its 305 s hard timeout without ever launching the consumer. The Linux fast path still uses F_SETPIPE_SZ to grow the pipe inline; every other platform (and Linux bodies that overflow pipe-max-size) now decouples the write onto a fire-and-forget thread that terminates on drain or BrokenPipe.

Adds a 256 KiB regression test that exercises the worst-case shape (: builtin, which never drains stdin), guarded by tokio::time::timeout(10s) so a regression fails CI fast instead of hanging.
2026-05-26 20:12:39 +02:00
can1357 7b3ae2ad92 fix(tui): list immediate dir for @ mentions outside cwd
Recursive fuzzyFind walks rooted at `@../`, `@~/`, or `@/abs` can
visit thousands of files in unrelated sibling projects and stall the
editor for seconds before the popup appears. CombinedAutocompleteProvider
now lexically classifies the @ prefix and, when it resolves outside the
project root, short-circuits to plain prefix listing of the immediate
directory — matching Claude Code's behavior. Inside-cwd queries keep
the existing fuzzy-then-prefix flow.

Fixes #1395
2026-05-26 19:57:00 +02:00
can1357 07d13ba15e refactor(auth-broker): migrated OAuth flow from pi-ai CLI to AuthStorage
- Migrated OAuth provider authentication from standalone `pi-ai` CLI to in-process `AuthStorage.login()` flow in coding-agent.
- Made provider argument optional for `login` and `logout` commands with interactive provider picker when omitted.
- Added `list` command to enumerate registered OAuth providers with optional `--json` output format.
- Removed `pi-ai` CLI binary and `bin` entry from @oh-my-pi/ai package; library API remains unchanged.
- Updated documentation and examples to reflect new `omp auth-broker` command interface and in-process OAuth flow.
2026-05-26 19:56:43 +02:00
can1357 664a47dba9 Merge remote-tracking branch 'origin/farm/2867ed83/google-vertex-model-list' 2026-05-26 19:51:58 +02:00
can1357 181304c724 fix(coding-agent/session): reduced default grep match column limit
- Reduced DEFAULT_MAX_COLUMN from 1024 to 512 in streaming-output handling, lowering the default max characters retained per grep match line.
2026-05-26 19:51:53 +02:00
roboomp 016adfbee9 fix(model-registry): gated bundled vertex drop on fresh authoritative cache
Threaded cache freshness/authoritativeness through #loadCachedStandardProviderModels so dropProviderModels only fires when the cached Vertex project-catalog row is both fresh and authoritative. A stale or non-authoritative snapshot (e.g. after ADC discovery failure rewrote the row with authoritative=0) now keeps the bundled Gemini fallback in place, which would otherwise be the last working catalog in API-key-only environments.

Refs #1412
2026-05-26 17:00:48 +00:00
can1357 6899e0aaed chore: bump version to 15.4.3 2026-05-26 18:55:58 +02:00
can1357 5519b67c70 chore: bump models 2026-05-26 18:55:29 +02:00
can1357 15820c1a2f Merge remote-tracking branch 'origin/farm/2867ed83/google-vertex-model-list' 2026-05-26 18:54:43 +02:00
can1357 eb97859995 fix(coding-agent): improved run lookup and made test temp directories unique
- Updated `TempDirGuard` creation in grep tests to include PID and an atomic sequence, preventing temp path collisions.
- Removed the `branch` filter from GitHub action run queries so results are matched by `head_sha` only.
- Adjusted run-watch calls to the simplified `fetchRunsForCommit` interface without the branch argument.
2026-05-26 18:54:22 +02:00
roboomp c4f4144e8b fix(providers): kept vertex api key catalog fallback
Preferred the Google Vertex API-key static catalog whenever an API key is configured, even if project and location are also present, so failed or unavailable ADC discovery cannot hide usable Vertex Gemini entries.

Refs #1412
2026-05-26 16:51:58 +00:00
roboomp bd982af3ec fix(providers): dropped bundled vertex models when adc env unset
Returned an empty static catalog from the Google Vertex model manager when no ADC project, location, or API key is detected so the bundled Gemini fallback cannot mix into /models alongside an authoritative cached Vertex project catalog on later refreshes.

Refs #1412
2026-05-26 16:43:22 +00:00
SUPREME e415adecd5 Allow disabling MCP client timeouts 2026-05-26 22:05:41 +05:30
roboomp 2561636fda style: bun run fix 2026-05-26 16:35:11 +00:00
roboomp 8fc200f6e8 fix(providers): discovered vertex project models
Added Google Vertex OpenAI-compatible model discovery with ADC auth and treated authoritative Vertex project catalogs as replacements for bundled Gemini fallbacks in the model registry.

Fixes #1412
2026-05-26 16:34:53 +00:00
can1357 38b7966894 chore: bump version to 15.4.2 2026-05-26 17:51:35 +02:00
can1357 97eb81e4ca fix(ai): handled OpenCode Zen big-pickle as DeepSeek for toolcall replay
- Added detection for OpenCode Zen's big-pickle alias to DeepSeek family checks in OpenAI completions compatibility.
- Mapped big-pickle tool-call handling to require exact reasoning_content replay instead of synthetic content.
- Added a regression test asserting assistant tool-call messages carry empty `reasoning_content` and empty `content` output.
2026-05-26 17:51:02 +02:00
can1357 633cb1e98a Merge remote-tracking branch 'origin/farm/be687d0f/fix-planmode-subagent-missing-yield' 2026-05-26 17:48:28 +02:00
Brit 884980bafa feat(settings): highlighted changed settings 2026-05-26 17:40:19 +02:00
Hanbin Lee 79103dbc4e fix(tui): apply Hangul jamo width correction only on macOS
The Hangul Compatibility Jamo width correction (U+3131..=U+318E → 1 cell)
was applied unconditionally, but macOS terminals (Ghostty, Terminal.app,
iTerm2) are the only ones that render jamo as 1 cell. WezTerm and most
Linux terminals follow UAX#11 and render them as 2 cells.

The unconditional correction caused a width mismatch between the TUI's
calculated column positions and the terminal's actual rendering, resulting
in corrupted layout and broken Korean input on non-macOS platforms.

- Rust: gate the correction with cfg!(target_os = "macos")
- TS: gate the correction with process.platform === "darwin"
- On non-macOS, use UnicodeWidthStr for multi-char graphemes (perf)

Constraint: macOS terminals render jamo as 1 cell despite UAX#11.
Rejected: removing the correction entirely — would break macOS.
Tested: native build succeeds, typecheck passes.
Not-tested: visual verification on macOS terminals.
Scope-risk: narrow
2026-05-27 00:16:59 +09:00
roboomp 5955eb13f7 style: bun run fix 2026-05-26 15:14:48 +00:00
roboomp 7487eb330b fix(task): activate yield tool when subagent has explicit tool list
Plan-mode subagents (and any subagent with an explicit `agent.tools` array)
were given the `yield` tool in the registry but not in
`agent.state.tools`. The session prompts and idle reminders still
demanded a `yield` call to terminate, so the model would reason
"there doesn't seem to be a yield tool available" and the turn went
nowhere.

`createTools` correctly appends `yield` to the registry when
`requireYieldTool: true`, but `createAgentSession` then derived the
active tool list from `options.toolNames` directly, dropping `yield`
again. Mirror the invariant already enforced in
`parseAgentFields` (discovery/helpers.ts): when `requireYieldTool` is
set and the caller passes an explicit list, append `yield` to it
before normalization.

Fixes #1408
2026-05-26 15:14:27 +00:00
can1357 774d32cc3f chore: bump version to 15.4.1 2026-05-26 16:53:12 +02:00
Mohd Faiz Hasim 96d4a4ce3b Merge branch 'main' of github.com:can1357/oh-my-pi into oauth-path-prefix-fix 2026-05-26 22:53:11 +08:00
Mohd Faiz Hasim 5be0f01a91 feat(coding-agent): support OAuth discovery for path-prefixed auth servers behind gateways
- Extract resource_metadata URL from WWW-Authenticate and follow RFC 9728 chain
- Add buildWellKnownUrls with path-prefixed well-known fallback for gateways
- Fix resolveRegistrationEndpoint to try path-prefixed well-known (was missing await)
- Support relative Mcp-Auth-Server URL resolution against server URL
- Pass resourceMetadataUrl through all discoverOAuthEndpoints call sites
- Add comprehensive tests for path-prefixed, resource_metadata, and relative URL flows
2026-05-26 22:50:32 +08:00
can1357 796c437dc1 feat: overhauled stream timeout and eval session management
- Replaced external watchdog timers with per-request SDK timeouts for first-event budget across OpenAI, Anthropic, and Azure providers.
- Keyed Python shared kernels by (sessionId, cwd) to prevent cross-directory state bleed.
- Deduplicated concurrent cold-start session acquisition for JS and Python executors.
- Moved `isOpenAIResponsesProgressEvent` to shared module and scoped display output routing per run for interleaved async cells.
2026-05-26 16:49:11 +02:00
Nick 7acb6987bf fix(tui): progressive enhancement keyboard negotiation for Zellij 2026-05-26 17:47:31 +04:00
can1357 8da054f4cc Merge remote-tracking branch 'origin/farm/6a360fa4/fix-local-pdf-reading' 2026-05-26 15:29:04 +02:00