Commit Graph

6958 Commits

Author SHA1 Message Date
can1357 4ddc2d2cd4 chore: rewrite changelogs + fix stale tests 2026-08-03 15:32:19 +02:00
can1357 39bc9de52f style: applied biome import order and formatting 2026-08-03 15:26:20 +02:00
can1357 9fb082bf14 refactor(utils): consolidated file locking into pi-utils file-lock
- Moved the coding-agent lock-directory primitive to @oh-my-pi/pi-utils/file-lock
  and migrated settings, MCP config-writer, and security store imports.
- Replaced the stats aggregator's parallel ~200-line token/breaker lock protocol
  with the shared primitive: dead owners reclaimed immediately, live-but-wedged
  owners after STATS_SYNC_LOCK_STALE_MS, unstamped acquisitions after the new
  acquireStaleMs grace (10s).
- Shared primitive now treats EPERM kill probes as live owners.
- Rewrote the stats lock-reclamation regressions against the shared protocol
  and moved the file-lock contract test into pi-utils.
2026-08-03 15:25:03 +02:00
can1357 c53a47f97d Merge PR #7287: fix(coding-agent): prune archived session stats (@alphastorm)
# Conflicts:
#	packages/coding-agent/src/session/session-manager.ts
2026-08-03 15:15:36 +02:00
can1357 267856deb8 Merge PR #7475: fix(session): prevent stale /btw branch promotion (@roboomp) 2026-08-03 15:12:03 +02:00
can1357 6a44844c57 Merge PR #7377: fix(hub): wake owners when supervised processes exit (@paralin) 2026-08-03 15:12:03 +02:00
can1357 1b5148ed84 Merge PR #7368: fix(browser): guard cmux guest rejections (@roboomp) 2026-08-03 14:46:24 +02:00
can1357 b1d75bb55b fix(session): preserve title on first-turn branches 2026-08-03 14:46:24 +02:00
can1357 14a03d4579 Merge PR #7477: fix(session): preserve title when branching (@lemonleks) 2026-08-03 14:46:24 +02:00
can1357 d46c58b5c8 fix(tui): clear extension command image drafts 2026-08-03 14:46:24 +02:00
Aleksandr Khaustov 276ff92afe fix(tui): consume extension slash commands locally 2026-08-03 14:02:05 +04:00
roboomp a54a2f79cb fix(tui): preserved b before /btw completion
Reserve the plain b shortcut only after /btw has a completed answer or a branch is already pending. Running, empty, aborted, and failed panels now leave the key for the composer, while completed-but-refused branches still consume it with an explanation.

Fixes #7474
2026-08-03 09:33:07 +00:00
Aleksandr Khaustov efe640a161 fix(session): preserve title when branching 2026-08-03 13:27:01 +04:00
roboomp 98f484bd2f fix(session): validated session identity for /btw branch
Branched session files preserve entry ids, so leaf-id equality alone let a stale /btw answer promote into a different loaded session. Capture the originating session id at /btw start and require it to match at both the controller gate and every branchFromBtw checkpoint.

Fixes #7474
2026-08-03 09:22:32 +00:00
roboomp 7a1183da91 fix(session): prevented stale /btw branch promotion
- Passed the authorized leaf through the branch executor and revalidated it before rewriting history.
- Refused promotion during active turns and bounded post-prompt drains.
- Consumed unavailable branch keys while showing pending and refusal state in the panel.

Fixes #7474
2026-08-03 09:07:12 +00:00
Christian Stewart 302148523f fix(hub): wake owners when supervised processes exit
Publish terminal daemon completions to the session that started the
process so idle agents can resume without polling hub status.

Persist every unacknowledged generation with a stable completion ID and
immutable snapshot. Replay the collection after reconnect or broker
recovery, and clear each event only after the owning client acknowledges
it.

Signed-off-by: Christian Stewart <christian@aperture.us>
2026-08-03 01:31:39 -07:00
can1357 f41f3f3ee1 test(read): deraced shared PDF extraction abort tests
- Aborting a caller while it was the sole extraction waiter tore the shared
  extraction down and deadlocked against the blocked conversion mock, hanging
  the CI chunk until SIGKILL.
- Sequenced owner/joiner starts and added an untilAborted spy barrier that
  waits for both waiters to attach before aborting.
2026-08-03 06:43:54 +02:00
can1357 63b07f8ec0 chore: rewrite changelogs 2026-08-03 05:52:53 +02:00
can1357 5ad263f0a6 fix(tui): hid stripped-tool-call placeholder with tool activity
- The 'N tool calls elided' replay placeholder leaked tool activity while
  display.hideToolActivity was on; it is now a visibility-aware component
  wired into both the hotkey and /settings toggle paths.
- Added replay + live-reveal regression coverage.
2026-08-03 05:42:07 +02:00
can1357 0244e18e43 fix(extensions): refreshed formerly synchronous sources on reload walks
- A reload that drops a module's last require() edge leaves the permanent
  hooks serving it from the synchronous snapshot map, which was only
  refreshed while the path stayed flagged; an edit after the downgrade
  replayed stale bytes. Ensure now re-rewrites and refreshes the snapshot
  for every ever-synchronous path on each graph walk.
- Added the mirror reload regression (require edge dropped + source edited).
2026-08-03 05:42:07 +02:00
can1357 03c07f89ec Merge PR #7342: feat(tui): add hidden tool activity mode (@dannyboy-ai) 2026-08-03 05:34:17 +02:00
can1357 e1ac59e5df fix(extensions): served sync-upgraded modules from earlier async load hooks
- A reload that adds a require() edge to an already-hooked ESM module never
  re-registers hooks, and the original async onLoad filter keeps matching;
  require() rejects async onLoad results, so the async hook now serves the
  pre-rewritten synchronous source inline when one exists.
- Added a same-process reload regression covering the async-to-sync upgrade.
2026-08-03 05:33:06 +02:00
can1357 c83bff390d Merge PR #7406: fix(coding-agent): restore legacy compaction exports (@roboomp) 2026-08-03 05:26:10 +02:00
can1357 ed7ea77a6b Merge PR #7405: fix(extensions): resolve compiled dependency graphs (@roboomp) 2026-08-03 05:26:10 +02:00
Daniel Anderson-Little 4471a3f26d fix(tui): purge hidden tool images 2026-08-02 23:21:17 -04:00
roboomp 8f7c7f7415 fix(coding-agent): honor vision role thinking effort in inspect_image
inspect_image resolved @vision with resolveModelFromString, which dropped the
:high thinking selector, and passed no reasoning to the oneshot. The
google-gemini-cli mapper then emitted thinkingBudget: 0, which thinking-only
Gemini models reject with HTTP 400. Resolve the role's explicit thinking
selector, clamp it to the model's supported efforts, and forward it as the
oneshot reasoning.

Fixes #7448
2026-08-03 05:16:14 +02:00
can1357 4b8c19366d Merge PR #7437: fix(edit): prevent fuzzy replace-all self-matching (@roboomp) 2026-08-03 05:15:03 +02:00
can1357 a95476bad6 Merge PR #7441: fix(mcp): expand env vars in reauth OAuth credentials and reject empty tokens (@roboomp) 2026-08-03 05:15:03 +02:00
can1357 b8c81e195f Merge PR #7444: fix(coding-agent): keep completed session entries durable across crashes (@olegpulatov) 2026-08-03 05:15:02 +02:00
can1357 a58584ff3c feat: implemented shared serialization utilities and standardized inventories
- Added shared Python call and literal serialization utilities with multiline verbatim support.
- Standardized tool inventories to format as an OpenAI-Harmony functions namespace using TypeScript declarations.
- Updated tool normalization and rendering functions to accept options objects and default to Python-syntax examples.
- Refactored Gemini dialect rendering to leverage shared serialization functions directly.
2026-08-03 05:06:49 +02:00
Daniel Anderson-Little a20690a40b feat(tui): add hidden tool activity mode 2026-08-02 22:59:48 -04:00
Oleg Pulatov 6c84a8bb99 fix(coding-agent): keep completed session entries durable across crashes
Completed transcript entries now write through to the OS page cache on
append instead of microtask-batching, supersede in-flight atomic rewrites
with a synchronous full-body publish, and land on the live moveTo path
(source pre-rename, destination post-rename) so a software crash no longer
drops finished user/assistant/tool events. Streaming text remains durable
only at message_end; no fsync/power-loss guarantee is claimed.
2026-08-03 04:14:58 +02:00
roboomp 4d74fabe70 test(mcp): restored OAuth env after reauth coverage
Preserved pre-existing MCP_OAUTH_CLIENT_ID and MCP_OAUTH_CLIENT_SECRET values
instead of deleting them after the env-expansion regression test, preventing
later tests in the same Bun process from observing mutated caller state.

Fixes #7440
2026-08-03 00:37:55 +00:00
roboomp c6a057073b fix(mcp): expand env vars in reauth oauth credentials and reject empty tokens
/mcp reauth read OAuth clientId/clientSecret from the raw, unexpanded config
while URL and resource used expandEnvVarsDeep, so `${VAR}` placeholders were
sent literally to the token exchange. MCPOAuthFlow.exchangeToken() also accepted
any HTTP-success body, storing an empty access token when a provider signals
failure with HTTP 200 (e.g. Slack `{ ok: false, error }`), surfacing only later
as invalid_token.

- Select flow client credentials from runtimeBaseConfig / expanded auth block;
  keep the raw placeholder for the persisted config file.
- Reject token responses without a non-empty access_token, including the
  sanitized provider error when present.
- Add regression tests for env-expanded reauth credentials and HTTP-200 token
  error bodies.

Fixes #7440
2026-08-03 00:33:36 +00:00
roboomp aad12ab2f7 fix(edit): prevented fuzzy replace-all self-matching
Matched fuzzy candidates against immutable source text while excluding ranges already selected for replacement. Inserted replacement content can no longer become a later exact or fuzzy candidate.

Added regression coverage for multiple fuzzy source matches when the replacement contains the original search text.

Fixes #7432
2026-08-03 00:00:58 +00:00
can1357 cc2265f681 feat: use simple form replace when replace is the edit mode 2026-08-03 01:00:51 +02:00
can1357 aa014717dc refactor(coding-agent): restored static computer worker start hook
- The pi-utils/mime subpath fix made the computer worker graph lazy-safe,
  so the dynamic-import dispatch added for laziness is no longer needed;
  cli.ts and the bundled-host fixture statically import
  startComputerWorker() per the no-inline-import rule.
- worker-entry keeps the selector-guarded direct-source auto-start; the
  worker-selector test now pins the exported hook contract. Verified
  --no-addons CLI startup stays addon-free and the bundled/compiled
  worker-host tests pass.
2026-08-03 00:19:58 +02:00
roboomp b53b1d1e65 fix(extensions): rewalked sync-upgraded ESM graphs
Requeued already-processed ESM modules when a later CommonJS require upgraded them to synchronous loading, propagating the sync marker through their descendants.

Added an end-to-end regression covering normal discovery before a lazy CommonJS require of the same ESM graph.

Fixes #7402
2026-08-02 22:17:59 +00:00
roboomp 326fee3387 fix(coding-agent): preserved legacy simple stream options
- Routed streamSimpleOpenAIResponses through the central simple-stream dispatcher.
- Added wire-level coverage for hidden reasoning summary translation.

Fixes #7403
2026-08-02 22:15:12 +00:00
roboomp fb62feeecf fix(extensions): retained lazy ESM sources
Kept pre-rewritten synchronous ESM sources available to permanent load hooks after the initial extension import settles, while refreshing them on reload.

Added an end-to-end regression for a CommonJS dependency that lazily requires a nested ESM cluster.

Fixes #7402
2026-08-02 22:09:44 +00:00
roboomp c34c2830ce fix(coding-agent): restored legacy compaction shims
- Re-exported serializeConversation from the legacy coding-agent package root.
- Aliased the upstream simple OpenAI Responses stream name to OMPs equivalent.
- Added regression coverage for both compatibility exports.

Fixes #7403
2026-08-02 22:03:20 +00:00
roboomp e682e25b24 fix(extensions): resolved compiled dependency graphs
Resolved nested ESM imports required by CommonJS packages, deterministic dual-package graph convergence, and package-main directory requires in compiled binaries.

Added focused graph-rewrite regressions and documented the fix.

Fixes #7402
2026-08-02 22:02:44 +00:00
can1357 0156ddcbe1 fix(coding-agent): kept computer worker graph off CLI startup
- The PR #7205 merge left cli.ts statically importing startComputerWorker,
  dragging the computer worker graph (and pi_natives via the pi-utils
  barrel) into normal CLI startup; --version died under --no-addons and
  dotenv loaded before profile bootstrap. worker-entry is now a
  self-starting side-effect module dispatched via dynamic import like
  every other worker selector, and utils/clipboard.ts imports the mime
  constant from its submodule instead of the barrel.
- Repointed the clipboard test spy at @oh-my-pi/pi-natives/clipboard —
  spying the barrel never intercepted the subpath the code imports, so
  the real native bridge ran (X11 timeouts on headless CI).
- Refreshed the pinned HTML export template digest and the scout gate
  phrase the system-prompt rewrite changed.
2026-08-03 00:02:29 +02:00
can1357 10625d2e9a Merge PR #7376: feat(coding-agent): add OpenAI service tier override (@paralin)
# Conflicts:
#	packages/coding-agent/src/commands/launch.ts
2026-08-02 21:22:41 +02:00
can1357 9b3e9a5d0e Merge PR #7126: feat(omp): navigate conversation turns in tree (@oleksoleksoleks) 2026-08-02 21:21:37 +02:00
can1357 3dd4b6b226 Merge PR #7197: feat(coding-agent): configure web search timeout (@will-bogusz) 2026-08-02 21:21:37 +02:00
can1357 05af20a9f2 fix(coding-agent): prevented recursive argument placeholder expansion in substituteArgs
Extracted the coding-agent scope of PR #7077 (@santhreal): single-pass
placeholder matcher so positional values containing literal $@ or
$ARGUMENTS are never re-expanded. The unrelated utils formatting changes
in that PR were not taken.
2026-08-02 21:19:45 +02:00
can1357 73b834dcbc style: applied biome formatting to merged evaluator fixes 2026-08-02 21:01:20 +02:00
can1357 f1c7eda7de Merge PR #7205: perf(cli): keep root help off runtime graph (@eggpeat)
# Conflicts:
#	packages/coding-agent/src/cli-commands.ts
#	packages/coding-agent/src/cli/args.ts
2026-08-02 20:59:12 +02:00
can1357 f7480294b4 fix(agent): track rewritten xdev approval tiers 2026-08-02 20:57:06 +02:00