Commit Graph

15949 Commits

Author SHA1 Message Date
can1357 f464c9b168 Merge PR #6829: fix(cli): purge completed async jobs on /new (@roboomp) 2026-07-28 10:59:36 +02:00
can1357 0e556ee32a docs(marketplace): document plugin mcpServers manifest pointer and correct stale extensions note 2026-07-28 10:59:35 +02:00
can1357 d1de4658aa fix(discovery): warn when a plugin mcpServers pointer names a missing file 2026-07-28 10:59:35 +02:00
can1357 b6bd241943 Merge PR #6873: fix(discovery): honor plugin MCP manifest pointers (@roboomp) 2026-07-28 10:59:35 +02:00
can1357 04fad069aa Merge PR #6853: fix(launch): treat restarting daemon as settled in broker #settle (@roboomp) 2026-07-28 10:59:35 +02:00
can1357 a0e53f73c0 Merge PR #6848: fix(coding-agent): restore isRetryableAssistantError in legacy pi-ai shim (@roboomp) 2026-07-28 10:59:35 +02:00
can1357 f6438eb2a5 Merge PR #6862: fix(coding-agent): bridge isContextOverflow in legacy pi-ai shim (@roboomp) 2026-07-28 10:59:34 +02:00
can1357 6269e0a53d Merge PR #6874: fix(acp): hide internal Hub messages (@roboomp) 2026-07-28 10:59:34 +02:00
can1357 5f24d8e670 Merge PR #6861: fix(settings): hide excluded web search providers (@roboomp) 2026-07-28 10:59:34 +02:00
can1357 6596e68236 Merge PR #6605: fix(tui): restore GitHub refs in slash arguments (@roboomp) 2026-07-28 10:59:34 +02:00
can1357 44a12a250f docs: move padding/list-wrap changelog entries to Unreleased
Both entries were filed under the already-released 17.1.7 section.
2026-07-28 10:59:34 +02:00
can1357 a4f4b3766f fix(coding-agent): budget Ask markdown against padded block width
The symmetric-padding change shrank the framed-block content width to
outputBlockContentWidth(width); the Ask renderer still pre-rendered its
question/result Markdown at the old width-2 budget, so maximal-width rows
re-wrapped inside the block and spilled a trailing fragment row.
2026-07-28 10:59:33 +02:00
can1357 05e98891f0 Merge PR #6833: fix(tui): wrapped Markdown list and output block layout (@usr-bin-roygbiv) 2026-07-28 10:59:33 +02:00
can1357 6a84575f2a Merge PR #6812: fix(tui): balance keyboard frames on emergency exit (@roboomp)
# Conflicts:
#	packages/tui/src/terminal.ts
2026-07-28 10:59:21 +02:00
can1357 c1276a8509 style(bazel): separate maudio-sys annotation with a blank line
Matches the one-blank-line separation used between every other
crate.annotation block in MODULE.bazel.
2026-07-28 10:58:59 +02:00
can1357 9be7520a4f Merge PR #6849: fix(natives): restore macOS CoreAudio capture bindings (@roboomp) 2026-07-28 10:58:59 +02:00
can1357 f0db9aa816 fix(utils): base child-shell filtering on real launcher values
Compiled Bun binaries autoload project dotenv files, so snapshotting Bun.env inside one captured the secrets as launcher-owned and forwarded them to every shell. Drop that branch and record launcher values, restoring an empty launcher value that Bun overwrote with a dotenv secret.
2026-07-28 10:58:59 +02:00
can1357 532e4c318c fix(utils): filter NODE_ENV dotenv files and keep escaped quotes in dotenv values
- filterChildShellEnv now also filters Bun-autoloaded .env.{NODE_ENV||development}
  entries, closing the .env.production/.env.development leak into child shells.
- parseEnvLine skips backslash-escaped quotes when locating the closing
  delimiter, restoring baseline/Bun-literal handling of values like JSON="{\"a\":1}"
  that the new parser truncated.
- Adds a parseEnvFile regression test for escaped quotes.
2026-07-28 10:58:59 +02:00
can1357 0a5727670f Merge PR #6814: fix(cli): stop forwarding project dotenv to shells (@roboomp) 2026-07-28 10:58:59 +02:00
can1357 30512418c1 test(launch): restore kernel comm after in-process broker test
startDaemonBrokerFromEnvironment now sets the kernel-visible name via
prctl, so restoring only process.title left the test runner's
/proc/self/comm as "omp daemon brok" for the rest of the Linux run.
2026-07-28 10:58:59 +02:00
can1357 c307f7361a fix: fall back to musl libc soname when loading prctl 2026-07-28 10:58:58 +02:00
can1357 315fb784e5 Merge PR #6818: fix(cli): set kernel process name via prctl on linux (@roboomp) 2026-07-28 10:58:58 +02:00
pr-eval 3f9d930617 fix(catalog): bill cache-write tokens the ttl breakdown omits
applyAnthropicUsageExtras writes usage.cttl from cache_creation while
usage.cacheWrite is written from cache_creation_input_tokens; the two
are independent wire fields, so a partial or stale breakdown made the
unattributed remainder cost $0. Price the remainder at the flat 5m
rate so the ttl split can only re-price write tokens, never drop them.
2026-07-28 10:58:58 +02:00
can1357 4385632bcd Merge PR #6878: fix(catalog): price cache writes by ttl breakdown (@roboomp) 2026-07-28 10:58:58 +02:00
pr-eval 9f5fb4d8ed test(ai): assert close() releases the SQLite connection 2026-07-28 10:58:58 +02:00
can1357 3fcebdfa7a Merge PR #6762: fix(ai): finalize all prepared statements in SqliteAuthCredentialStore.close() (@ajdiyassin) 2026-07-28 10:58:58 +02:00
can1357 c15f598df5 Merge PR #6821: fix: google-vertex support multi-region endpoints (@bryanster) 2026-07-28 10:58:57 +02:00
can1357 5bcbca1948 Merge PR #6824: fix(ai): preserve reasoning IDs for computer replay (@lyc-aon) 2026-07-28 10:58:57 +02:00
can1357 7b0780028f style(scripts): quoted the empty CDPATH assignment in link-omp.sh
`CDPATH=` already cleared the variable for the `cd` subshell, so this is
a readability-only change: `CDPATH=''` is the identical POSIX assignment
written with explicit empty quotes. No behavior change, and there was no
CDPATH leak to fix.
2026-07-28 10:22:57 +02:00
can1357 e74a70cf96 chore(infra): updated runner reload script to use heredoc for remote directory
- Updated ssh execution in infra/reload-runner.sh to use a heredoc for creating the remote context directory.
2026-07-28 10:22:57 +02:00
can1357 92ac96ef9b refactor(vendor/brush-core): improved shell execution parameters and code cleanup
- Update job spawning functions to accept immutable shell references.
- Replace vector pop with index removal in word expansion.
2026-07-28 10:22:23 +02:00
can1357 56ea3bf8ee feat(coding-agent/cleanse): implemented cleanse command and workflow execution
- Add `omp cleanse` command and workflow execution infrastructure.
- Implement project file discovery, automatic checker execution, and multi-format diagnostic parsing.
- Provide subagent dispatch, session runtime, and task balancing with bin packing.
- Include comprehensive tests for diagnostic parsing and orchestration loops.
2026-07-28 10:22:17 +02:00
usr-bin-roygbiv c217d43ab5 test(coding-agent): allow cold validator probes 2026-07-28 08:17:24 +00:00
usr-bin-roygbiv 6737ee9e24 test(ai): allow cold OAuth barrel imports 2026-07-28 08:15:53 +00:00
can1357 34e88b344b refactor: adopted idiomatic combinators and updated the rust toolchain
- Updated the nightly rust toolchain channel in rust-toolchain.toml to nightly-2026-07-28.
- Adopted slice chunking and multiple-of helper methods across native and vendor crates.
- Replaced option map adapters and conditional patterns with idiomatic combinators.
2026-07-28 10:01:56 +02:00
roboomp 3693db87a9 fix(catalog): price cache writes by ttl breakdown
calculateCost priced every cache-write token at model.cost.cacheWrite,
which the catalog populates with Anthropic's 5-minute write rate
(1.25x base input). omp defaults to 1-hour cache retention on
first-party Anthropic, and Anthropic bills 1h writes at 2x base input,
so every default-path cost was understated by a factor of 1.6.

The usage.cttl breakdown needed for correct pricing is already parsed
and stored but calculateCost never read it. Now each component is
priced at its own rate: 5m at cost.cacheWrite, 1h at input*2
(Anthropic's published, model-independent multiplier). Providers that
omit cttl keep the flat-rate calculation.

Fixes #6876
2026-07-28 07:58:47 +00:00
usr-bin-roygbiv a28ca5a268 fix(tui): honor padded markdown width budgets 2026-07-28 07:41:59 +00:00
roboomp 0c04e86efd fix(acp): kept hub job-wait results visible
Only a peer-scoped wait (from, no ids) is internal messaging; bare and ids waits settle on background-job delivery whose snapshot is the job result.

Fixes #6872
2026-07-28 07:34:49 +00:00
roboomp b38472b111 fix(acp): hid internal hub messages
Prevented internal Hub send, inbox, list, and non-process wait calls from crossing ACP, including xd:// routing and replayed sessions.
Preserved Hub process-control calls.

Fixes #6872
2026-07-28 07:26:52 +00:00
roboomp 4f63e4e521 fix(discovery): honored inline plugin MCP manifest maps
Treated an object-valued mcpServers manifest field as the server map, rooting relative stdio paths at the plugin root, so plugins declaring servers inline no longer fell through to .mcp.json.

Fixes #6871
2026-07-28 07:24:49 +00:00
roboomp 8f31a123d6 fix(discovery): honored plugin MCP manifest pointers
Resolved mcpServers file pointers from OMP and Claude plugin manifests before the conventional root config fallback.

Updated marketplace installer documentation for runtime symlink and lockfile registration.

Fixes #6871
2026-07-28 07:12:46 +00:00
usr_bin_roygbiv f32dd6eff4 Fix wrapped Markdown list and output block layout 2026-07-28 07:06:31 +00:00
can1357 169a1b81c7 feat(coding-agent/goals): replaced guided goal modal workflow with interview brief
- Reworked the `/guided-goal` command to send a hidden interview brief instead of a modal popup flow.
- Removed the deprecated `guided-setup.ts` module and system prompt template.
- Updated goal tool availability and activation logic to support goal creation during the interview.
- Replaced existing tests and added new verification for the updated guided-goal workflow.
2026-07-28 08:55:49 +02:00
roboomp 846cd36d92 fix(coding-agent): bridge isContextOverflow in legacy pi-ai shim
Upstream @earendil-works/pi-ai re-exported isContextOverflow from its
package root, but omp's @oh-my-pi/pi-ai barrel forwards only
./error/rate-limit, so the shim's `export * from "@oh-my-pi/pi-ai"` left
it off the surface. Plugins importing it (pi-blackhole) tripped Bun's
static named-export check during validation, both on disk and through the
omp-legacy-pi-bundled: virtual namespace.

Audited the upstream root surface rather than fix one symbol at a time:
of its runtime exports only isContextOverflow (now under
@oh-my-pi/pi-ai/error) and parseJsonWithRepair/parseStreamingJson/
repairJson (relocated to @oh-my-pi/pi-utils) still exist in omp. Bridge
exactly that set through the shim and pin it with a regression test that
exercises each helper's behavior.

Fixes #6859
2026-07-28 05:34:20 +00:00
roboomp 9cf1d28258 fix(settings): hid excluded web search providers
Filtered the provider-order submenu against the configured web search exclusions and covered the rendered settings contract.

Fixes #6860
2026-07-28 05:22:27 +00:00
can1357 e7009452b4 feat(coding-agent/tools): simplified browser screenshot persistence and return paths
- Remove the per-call `save` option from `tab.screenshot()` to simplify usage.
- Update `tab.screenshot()` to return the saved file path as a promise string.
- Configure screenshot persistence to use daemon path or custom `browser.screenshotDir`.
- Add comprehensive tests verifying temp path return and custom directory saving.
2026-07-28 06:40:31 +02:00
roboomp fc4fb70232 fix(natives): restore macos coreaudio capture bindings
The 17.1.6 Bazel migration dropped maudio's generate-bindings feature, so
the darwin addon shipped maudio-sys's Linux-shaped pregenerated miniaudio
bindings. Those bindings omit the MA_SUPPORT_COREAUDIO backend-state union
members that the macOS build of miniaudio.c actually contains, producing a
Rust/C ABI mismatch: capture callbacks saw zero channels and yielded no PCM.

Re-enable generate-bindings for apple targets only. Patch maudio-sys's build
script to branch on Cargo's TARGET rather than the build-script host, so a
macOS-hosted Linux/Windows cross-build keeps target-family pregenerated
bindings instead of incorrectly running Darwin bindgen. Repin the Bazel graph
to apply the patch and gate bindgen behind the apple target selects.

Fixes #6846
2026-07-28 04:40:17 +00:00
roboomp a0f353c561 fix(launch): rechecked daemon state after output read
A recovered detached daemon has no in-memory process handle, so two
concurrent refreshes can both enter settle for the same dead pid. The
initial guard runs before detached output is read; both continuations
could therefore pass it and then double-settle the generation.

Recheck generation and settled states after the awaited output read,
and cover concurrent refreshes against a recovered daemon. Without the
post-read guard the regression test observes restartCount 2 instead of
1.

Fixes #6852
2026-07-28 04:16:24 +00:00
roboomp 9d6eac0cb8 fix(launch): treat restarting daemon as settled in broker #settle
A detached restart:"always" daemon that exits quickly parks in the
`restarting` state with process/pid cleared and a restartTimer armed.
Every subsequent op ran #refreshDetached, which only skips terminal
states, so it fell through to a re-entrant #settle. #settle's guard
only checked generation and terminalState, so re-entry proceeded:
restartCount++ and record.restartTimer was overwritten without clearing
the previously armed timer, orphaning it.

Consequences: stop cleared only the last timer, so an orphaned timer
later fired #launch (resetting stopRequested) and resurrected the
daemon; and restartCount phantom-inflated on every list/logs poll.

Add `restarting` to #settle's entry guard: it is a settled state
(child exited, relaunch timer pending) and no legitimate caller settles
while in it. Closes both the timer leak and the count inflation.

Fixes #6852
2026-07-28 04:04:52 +00:00
roboomp d4956e6de2 fix(coding-agent): restore isRetryableAssistantError in legacy pi-ai shim
Historical @earendil-works/pi-ai exports isRetryableAssistantError from its
package root (utils/retry.ts), but OMP's legacy-pi-ai-shim re-exports
@oh-my-pi/pi-ai, whose root never carried the symbol. Plugins importing it
(e.g. @router-for-me/pi-cliproxyapi-provider >= 1.4.9) failed Bun's static
named-export validation, rolling back install.

Port the upstream transient-error classifier into the shim, preserving the
provider-error wording tables so legacy retry semantics match.

Fixes #6847
2026-07-28 03:35:46 +00:00