Commit Graph

8669 Commits

Author SHA1 Message Date
can1357 05fc11394e Merge PR #4457: fix(session): drop content-less provider-rejection turns from persisted history (@mattwilkinsonn) 2026-07-05 13:10:26 +02:00
can1357 535e8256b0 fix(lsp): avoid watched-file side effects 2026-07-05 13:10:26 +02:00
can1357 9a319b8a89 Merge PR #4462: fix(lsp): notify servers about harness file writes (@roboomp) 2026-07-05 13:10:26 +02:00
can1357 d29dfc869d Merge PR #4473: fix(session): guard legacy snapcompact frames on resume (@cexll) 2026-07-05 13:10:26 +02:00
can1357 caa0878c9b Merge PR #4423: fix(task): respect deferred task model role selectors (@roboomp) 2026-07-05 13:10:25 +02:00
can1357 af146b1118 Merge PR #4439: fix(task): preserve isolated commits on transfer failure (@roboomp) 2026-07-05 13:10:25 +02:00
can1357 8af66b0ade fix(test): dropped removed stripTrailingHeadTail setting from regex guidance test 2026-07-05 13:05:42 +02:00
can1357 4d543bba49 chore: normalized changelog placement after merges 2026-07-05 13:04:16 +02:00
can1357 f6bae12794 Merge PR #4464: fix(build): emit NodeNext-consumable .d.ts (@mattwilkinsonn) 2026-07-05 13:03:08 +02:00
can1357 a868a7d2d5 Merge PR #4471: fix(ai): separate Codex orchestration usage (@roboomp) 2026-07-05 13:03:08 +02:00
can1357 7f3832a263 Merge PR #4489: fix(snapcompact): select silver shape for CJK-heavy auto text (@roboomp) 2026-07-05 13:03:08 +02:00
can1357 c7cb3ab742 Merge PR #4494: docs(coding-agent): align workflowz recursion wording (@roboomp) 2026-07-05 13:03:08 +02:00
can1357 d1a29be3a8 Merge PR #4496: fix(models): accept list-valued model role entries (@roboomp) 2026-07-05 13:03:08 +02:00
can1357 d70c7237ca Merge PR #4514: fix(coding-agent): handle inline image PDF delimiters (@roboomp) 2026-07-05 13:03:07 +02:00
can1357 063a04cd04 Merge PR #4518: fix(tool): reject root glob paths (@roboomp) 2026-07-05 13:03:07 +02:00
can1357 5681eeede2 Merge PR #4523: fix(tts): stop queued TTS playback on Esc after stream end (@roboomp) 2026-07-05 13:03:07 +02:00
can1357 2e86e655c8 Merge PR #4524: fix(coding-agent): scoped /model search to the active provider tab (@roboomp) 2026-07-05 13:03:07 +02:00
can1357 661a8794ef Merge PR #4529: fix(tui): handle invalid path render args (@roboomp) 2026-07-05 13:03:06 +02:00
can1357 d082c5ee0c Merge PR #4534: fix(tui): suppress empty assistant token badges (@roboomp) 2026-07-05 13:03:06 +02:00
can1357 7101527e60 fix(providers): skip borrowed xai env after oauth fallback 2026-07-05 13:03:06 +02:00
can1357 942ca7ce06 Merge PR #4539: fix(providers): prefer xAI OAuth for web search (@roboomp) 2026-07-05 13:03:06 +02:00
can1357 7c14740fa5 chore(changelog): move xAI web_search entry to Unreleased 2026-07-05 13:03:05 +02:00
can1357 1dcab092d3 Merge PR #4538: fix(providers): remove xAI web_search search_parameters (@roboomp) 2026-07-05 13:03:05 +02:00
can1357 b84e18cafb fix(tool): tighten regex guidance coverage 2026-07-05 13:03:05 +02:00
can1357 759fe6b503 Merge PR #4543: fix(tool): clarify grep alternation and pipe guidance (@roboomp) 2026-07-05 13:03:05 +02:00
can1357 d803b6b541 style: formatted evaluator test additions with biome 2026-07-05 12:45:42 +02:00
can1357 da1a90ed84 chore: normalized changelog placement after merges 2026-07-05 12:44:35 +02:00
can1357 686008b056 Merge PR #4544: fix(tui): avoid auto-linked token rate format (@roboomp) 2026-07-05 12:44:17 +02:00
can1357 9d4ce0af68 Merge PR #4563: fix(tool): preserve bash pipeline output (@roboomp) 2026-07-05 12:44:17 +02:00
can1357 3e1808e2b5 fix(agent): handle installed legacy dependency reloads 2026-07-05 12:44:17 +02:00
can1357 b3ee269e4e Merge PR #4568: fix(agent): reload edited legacy Pi modules (@roboomp) 2026-07-05 12:44:17 +02:00
can1357 4225f4bc44 fix legacy resource loader forwarding 2026-07-05 12:44:16 +02:00
can1357 dec882a766 Merge PR #4569: fix(agent): restore legacy DefaultResourceLoader shim (@roboomp) 2026-07-05 12:44:16 +02:00
can1357 2eb5995bc5 fix(coding-agent): complete legacy pi-ai catalog re-exports 2026-07-05 12:44:16 +02:00
can1357 3a584fec88 Merge PR #4585: fix(coding-agent): re-export calculateCost + siblings from legacy pi-ai shim (@roboomp) 2026-07-05 12:44:16 +02:00
can1357 1f4fde556f Merge PR #4581: fix(advisor): clamp default thinking against the resolved model (@roboomp) 2026-07-05 12:44:16 +02:00
can1357 d4283d242c fix(session): preserve explicit sessions with consumed drafts 2026-07-05 12:44:15 +02:00
can1357 ecded0afe5 Merge PR #4572: fix(session): drop empty session file on close when no messages and no draft (@roboomp) 2026-07-05 12:44:15 +02:00
can1357 cb05bd1455 Merge PR #4602: fix(tui): scope autocomplete in slash command arguments (@roboomp) 2026-07-05 12:44:15 +02:00
roboomp 1fcdc4f882 fix(tui): preserved autocomplete for no-arg slash prompts
- Propagated builtin allowArgs metadata into TUI autocomplete entries.

- Let no-arg slash-looking prompts fall through to prompt-composer completions while keeping argument-capable commands scoped.

- Added regressions for /settings @ and /settings #copy.
2026-07-05 09:05:45 +00:00
roboomp ed63b62889 fix(tui): scoped autocomplete to slash command arguments
- Stopped prompt-composer # actions and @ file references from claiming submitted slash-command argument text without explicit argument completions.

- Added provider regression tests for /rename title arguments and explicit command argument completions.

Fixes #4600
2026-07-05 08:52:32 +00:00
roboomp 4f8b0394ca fix(agent): restored legacy DefaultResourceLoader shim
Added a DefaultResourceLoader compatibility adapter for legacy pi package-root imports and translated resourceLoader into OMP session discovery options so noExtensions/noSkills are preserved for subagents.

Added a regression test covering the loader snapshot and createAgentSession translation path.

Fixes #4567
2026-07-05 02:57:52 +00:00
roboomp 45deb2098d fix(agent): reloaded legacy bare dependency children
Included ESM extension-local bare dependency entries in the legacy extension graph so their relative children receive the same mtime cache-bust rewrite as extension source modules.

Skipped CommonJS dependency entries to preserve native Bun CJS default import behavior.

Added a regression test for a local node_modules ESM dependency whose unchanged entry re-exports an edited helper.

Fixes #4565
2026-07-05 02:53:28 +00:00
roboomp 5203fce696 fix(coding-agent): re-exported relocated catalog symbols from legacy pi-ai shim
`calculateCost`, `modelsAreEqual`, and `getBundledProviders` moved from the
`@oh-my-pi/pi-ai` barrel to `@oh-my-pi/pi-catalog/models` in the catalog
split (1b9d9d0851). The legacy-extension pi-ai root shim already bridged
`getBundledModel`/`getBundledModels` back under their old `getModel`/
`getModels` names but never re-exported the other relocated symbols, so any
legacy extension importing `calculateCost` from `@oh-my-pi/pi-ai` failed
plugin validation at install time with `Export named 'calculateCost' not
found in module '.../legacy-pi-ai-shim.ts'`.

Bridge all three symbols through the shim so pre-split legacy extensions
load again. Add regression tests that load fixtures importing
`calculateCost`, `modelsAreEqual`, and `getBundledProviders` from
`@oh-my-pi/pi-ai` and assert identity against the catalog implementations.

Fixes #4584
2026-07-05 02:03:41 +00:00
Jagrav Naik 27d2109ca3 fix(session-selector): Backspace on empty search deletes session
macOS laptops have no dedicated Forward Delete key. Fn+Backspace is the
only way to send \e[3~, and many macOS terminals (Terminal.app, some
iTerm2 profiles) deliver \x7f for that combo instead — so the keystroke
landed in the search box, not the delete handler, making session deletion
unreachable for those users.

Add a Backspace-on-empty-search handler alongside the existing Delete
check. With a typed query, Backspace stays bound to the search Input so
users can still edit their filter text. The existing confirmation dialog
guards against accidents.

Footer hint updated: [Del delete] -> [Del/⌫ delete].
2026-07-04 21:16:40 -04:00
roboomp a1f60f6584 fix(advisor): clamped advisor default thinking against the resolved model
`#resolveAdvisorRuntimeDescriptors` hardcoded `ThinkingLevel.Medium` when
no thinking suffix was configured. For reasoning models with no
controllable effort surface (`devin-agent`: `reasoning: true`,
`thinking: undefined` — Cascade selects effort by routing to sibling
model ids, not a wire param), that default tripped
`requireSupportedEffort` on the first advisor prompt with an empty
`Supported efforts:` list, disabling the advisor session-wide.

Route the default through `resolveThinkingLevelForModel(model, level)`
which preserves explicit `off`, clamps a concrete effort into the
model's supported range, and returns `undefined` for reasoning models
without controllable efforts — falling back to `Inherit` so no effort is
sent while reasoning stays enabled. Matches the `auto`-path fix
(`clampAutoThinkingEffort`) and the Autonomous Memory clamp
(`clampThinkingLevelForModel`).

Fixes #4579
2026-07-05 00:46:01 +00:00
roboomp 170cf59cf7 fix(session): treated mode_change as draft-only metadata
`plan.defaultOnStartup` records a `mode_change` before the composer restores its draft; without this the draft-cleanup arm check treats the file as durable and the metadata-only JSONL leak reappears for default-plan sessions.

Added a regression case that drives a model_change + mode_change + draft-clear cycle and asserts the session file is dropped on close().

Fixes #4571
2026-07-04 23:18:28 +00:00
roboomp a3557222f1 fix(session): kept explicit empty sessions on close
Limit empty-session close cleanup to files whose draft sidecar lifecycle
materialized an otherwise startup-metadata-only session. Direct
ensureOnDisk() callers now remain discoverable even when they have no
user/assistant messages yet, and handoff custom_message entries survive
close before the next user turn.

Added regression coverage for resumed draft cleanup, ACP-style explicit
ensureOnDisk() records, and handoff custom messages.

Fixes #4571
2026-07-04 22:38:15 +00:00
roboomp 903900edc9 fix(session): dropped empty session file on close when no messages and no draft
`SessionManager.saveDraft(text)` calls `ensureOnDisk()` so the draft
sidecar has a parent JSONL. A follow-up `saveDraft("")` only unlinks
the sidecar — the session file was left behind, and `#shouldHaveSessionFile()`
could not prune it once the load path latched `#fileIsCurrent` and
`#forceFileCreation` to true. Each draft-then-clear-then-exit cycle
leaked a ~500–750 B zombie into `~/.omp/agent/sessions/<cwd>/`
containing only the title slot, session header, and a handful of
`model_change`/`mode_change`/`thinking_level_change` entries.

`close()` now calls `#dropIfEmptyAndNoDraft()` after draining the
writer: when the file exists, holds no user/assistant messages, and
no draft sidecar is present, it removes the session file and its
artifacts directory via `deleteSessionWithArtifacts`. Real conversations,
sessions with a saved draft still on disk (needed for `--resume`), and
never-materialized sessions are untouched.

Fixes #4571
2026-07-04 22:25:56 +00:00
roboomp 65cd063d90 fix(agent): refreshed legacy pi graph hooks
Collected the current extension graph on every load and registered supplemental Bun hooks for modules added after the first import.

Preserved exact-path filters by tracking covered realpaths per entry instead of widening hooks to unrelated files.

Added a regression test for an entry-only extension that later adds helper and leaf modules, then reloads an edited leaf.

Fixes #4565
2026-07-04 20:56:38 +00:00