diff --git a/packages/agent/CHANGELOG.md b/packages/agent/CHANGELOG.md index dc2329cef..1a5ebb2a2 100644 --- a/packages/agent/CHANGELOG.md +++ b/packages/agent/CHANGELOG.md @@ -7,7 +7,6 @@ - Added support for V2 streaming remote compaction for compatible AI models - Added infrastructure for provider-native tool history replay during V2 remote compaction - Added session routing and prompt-cache support to V2 remote compaction requests - - Added support for V2 streaming remote compaction for eligible OpenAI-compatible models - Included sessionId and promptCacheKey support in remote compaction requests - Added Responses-stream remote compaction V2 with Codex-style `compaction_trigger` streaming, retained-history replacement, and transient retries. @@ -16,7 +15,6 @@ - Updated remote compaction to forward full conversation history to the provider instead of local trimming - Enabled V2 streaming remote compaction by default for compatible models - - Updated remote compaction to forward full conversation history to the provider instead of local trimming - Enabled V2 streaming remote compaction by default for compatible models @@ -25,7 +23,6 @@ - Resolved issue where assistant responses and encrypted reasoning were lost during local history trimming before remote compaction - Improved reliability of remote compaction using transient error retries and configurable timeouts - Fixed potential hangs by ensuring user-initiated aborts terminate remote compaction immediately - - Resolved issue where assistant responses and encrypted reasoning were lost during local history trimming before remote compaction - Added `title_change` session metadata to the compaction entry type union so hosts with title audit entries remain type-compatible. diff --git a/packages/catalog/CHANGELOG.md b/packages/catalog/CHANGELOG.md index 9e15389cb..65437551b 100644 --- a/packages/catalog/CHANGELOG.md +++ b/packages/catalog/CHANGELOG.md @@ -5,7 +5,6 @@ ### Added - Added V2 streaming compaction configuration parameters to RemoteCompactionConfig - - Added support for V2 streaming compaction configuration in catalog types - Added remote compaction V2 streaming metadata fields for model and provider configuration. @@ -13,7 +12,6 @@ - Updated pricing and context window limits for several catalog models - Disabled reasoning capability for multiple providers in the catalog - - Updated pricing and context window limits for several catalog models - Disabled reasoning capability for multiple providers in the catalog diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 48a995750..b85c71eea 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -5,7 +5,6 @@ ### Added - Added support for tracking reasoning tokens in session and advisor statistics - - Added `compaction.remoteStreamingV2Enabled` setting to toggle V2 streaming for remote compaction - Added `compaction.v2RetainedMessageBudget` setting to control token budget for V2 compaction - Added Remote Compaction V2 streaming configuration settings @@ -22,29 +21,13 @@ - Fixed resumed OpenAI / OpenAI-Codex sessions losing encrypted reasoning and native assistant turns: rehydration only strips Responses replay metadata for GitHub Copilot now (the sole provider that 401s on warmed-session replay), so remote compaction rebuilds faithful native history instead of sending tool-call-only context with no reasoning. - Fixed the ask tool's `Other (type your own)` editor dropping the original question and option list while the user types a custom answer. ([#3660](https://github.com/can1357/oh-my-pi/issues/3660)) - Fixed auto-snapcompact on text-only active models by downgrading automatic maintenance to context-full compaction instead of failing the session when the active model cannot read snapcompact frames. ([#3659](https://github.com/can1357/oh-my-pi/issues/3659)) -### Fixed - - Fixed autoresearch's `before_agent_start` handler crashing when `event.systemPrompt` was undefined. The handler now coerces a missing system prompt to an empty string so the autoresearch block still renders. ([#3665](https://github.com/can1357/oh-my-pi/issues/3665)) -### Fixed - - Fixed OMP exiting silently during startup when `~/.codex/hooks/*.{ts,js}` contained standalone Codex hook scripts: untyped scripts are no longer treated as OMP hooks, and dynamic imports of extension/hook modules are wrapped in a `process.exit` guard so a top-level exit raises a recoverable load error instead of terminating the host. ([#3680](https://github.com/can1357/oh-my-pi/issues/3680)) -### Fixed - - Fixed the HTML session export's "toggle thinking" and "toggle tools" keyboard shortcuts being unreachable in a web browser: `Ctrl+T` and `Ctrl+O` are reserved by every major browser (new tab / open file), so the page never saw the keystroke. The shortcuts are now bare `T` / `O` (suppressed while focus is in the search input) and the in-page help bar reads `T toggle thinking · O toggle tools` ([#3670](https://github.com/can1357/oh-my-pi/issues/3670)). -### Fixed - - Fixed user-invoked `/skill:` prompts reaching model providers as developer turns instead of user turns. ([#3698](https://github.com/can1357/oh-my-pi/issues/3698)) -### Fixed - - Fixed `/skill:` prompts submitted during compaction so they are re-invoked as user-attributed skill prompts instead of being dropped or treated as plain text. -### Fixed - - Fixed Ctrl+T staying locked off for OpenAI-compatible providers that stream reasoning content without advertising reasoning support in model metadata. ([#3669](https://github.com/can1357/oh-my-pi/issues/3669)) -### Fixed - - Fixed `/shake` (and other mid-stream chat rebuilds) erasing the live LLM output by preserving the in-flight `streamingComponent` and `pendingTools` across `rebuildChatFromMessages` so subsequent `message_update`/`message_end` events keep updating on-screen components. ([#3656](https://github.com/can1357/oh-my-pi/issues/3656)) -### Fixed - - Fixed the `time_spent` status-line segment ticking on wall-clock since session start, so an idle session displayed hours of "time spent" while the agent did nothing. The segment now accumulates only the union of `agent_start`→`agent_end` windows, ticking live during a turn and freezing the instant the agent yields; `/clear` and fresh-session flows zero the meter via the renamed `resetActiveTime` boundary hook. Meters are kept per-session (WeakMap keyed on `AgentSession`) so the focus-controller's mid-turn synthesized `agent_start` cannot leak into the main session's meter on unfocus, a re-focus onto a now-idle subagent drops the stale window rather than crediting the detached gap, and an in-place `switchSession` file swap (`/resume`, `/move`, ACP fork/load, RPC `switch_session`, extension `switchSession`) starts the meter fresh so the resumed conversation does not inherit the previous one's accumulated time. Collab guests also close the meter from the host-idle state reconciler so a reconnect that dropped the host's `agent_end` cannot leave `time_spent` ticking. ([#3681](https://github.com/can1357/oh-my-pi/issues/3681)) - Fixed auto-snapcompact failing the session on any local blocker (text-only active model, high non-ASCII transcript, kept history exceeding the context budget, or post-render overflow) by downgrading automatic maintenance to context-full compaction. Manual `/compact snapcompact` keeps the local-only failure contract. ([#3659](https://github.com/can1357/oh-my-pi/issues/3659)) diff --git a/packages/coding-agent/src/session/agent-session.ts b/packages/coding-agent/src/session/agent-session.ts index 3c97480fc..c5c531877 100644 --- a/packages/coding-agent/src/session/agent-session.ts +++ b/packages/coding-agent/src/session/agent-session.ts @@ -1258,7 +1258,6 @@ export class AgentSession { readonly settings: Settings; readonly yieldQueue: YieldQueue; fileSnapshotStore?: InMemorySnapshotStore; - citationSourceStore?: CitationSourceStore; #autoApprove: boolean; #powerAssertion: MacOSPowerAssertion | undefined; diff --git a/packages/coding-agent/test/export-html-keyboard-shortcuts.test.ts b/packages/coding-agent/test/export-html-keyboard-shortcuts.test.ts index dafbca529..b141e4c8d 100644 --- a/packages/coding-agent/test/export-html-keyboard-shortcuts.test.ts +++ b/packages/coding-agent/test/export-html-keyboard-shortcuts.test.ts @@ -81,8 +81,15 @@ describe("HTML export keyboard shortcuts", () => { }); it("leaves editable targets alone", () => { - expect(exerciseShortcut(keydownBody, { key: "t", target: { tagName: "INPUT", isContentEditable: false } })).toEqual({ calls: [], prevented: false }); - expect(exerciseShortcut(keydownBody, { key: "o", target: { tagName: "TEXTAREA", isContentEditable: false } })).toEqual({ calls: [], prevented: false }); - expect(exerciseShortcut(keydownBody, { key: "T", target: { tagName: "DIV", isContentEditable: true } })).toEqual({ calls: [], prevented: false }); + expect( + exerciseShortcut(keydownBody, { key: "t", target: { tagName: "INPUT", isContentEditable: false } }), + ).toEqual({ calls: [], prevented: false }); + expect( + exerciseShortcut(keydownBody, { key: "o", target: { tagName: "TEXTAREA", isContentEditable: false } }), + ).toEqual({ calls: [], prevented: false }); + expect(exerciseShortcut(keydownBody, { key: "T", target: { tagName: "DIV", isContentEditable: true } })).toEqual({ + calls: [], + prevented: false, + }); }); }); diff --git a/packages/coding-agent/test/session-messages.test.ts b/packages/coding-agent/test/session-messages.test.ts index 22d78eed5..f2ad3f361 100644 --- a/packages/coding-agent/test/session-messages.test.ts +++ b/packages/coding-agent/test/session-messages.test.ts @@ -2,7 +2,11 @@ import { describe, expect, it } from "bun:test"; import { type AgentMessage, filterProviderReplayMessages } from "@oh-my-pi/pi-agent-core"; import type { ImageContent, Message, TextContent } from "@oh-my-pi/pi-ai"; import { inferCopilotInitiator } from "@oh-my-pi/pi-ai/providers/github-copilot-headers"; -import { convertToLlm, SKILL_PROMPT_MESSAGE_TYPE, wrapSteeringForModel } from "@oh-my-pi/pi-coding-agent/session/messages"; +import { + convertToLlm, + SKILL_PROMPT_MESSAGE_TYPE, + wrapSteeringForModel, +} from "@oh-my-pi/pi-coding-agent/session/messages"; function expectAttribution(message: Message | undefined, expected: "user" | "agent" | undefined): void { expect(message).toBeDefined(); @@ -334,7 +338,7 @@ describe("convertToLlm custom message mapping", () => { if (converted[1]?.role !== "user" || !Array.isArray(converted[1].content)) { throw new Error("Expected user custom images"); } - expect(converted[1].content.filter(content => content.type === "image")).toEqual([image]) + expect(converted[1].content.filter(content => content.type === "image")).toEqual([image]); }); }); diff --git a/packages/coding-agent/test/session/session-manager-fork.test.ts b/packages/coding-agent/test/session/session-manager-fork.test.ts index d1b44b1bc..ed99247fd 100644 --- a/packages/coding-agent/test/session/session-manager-fork.test.ts +++ b/packages/coding-agent/test/session/session-manager-fork.test.ts @@ -72,9 +72,7 @@ describe("SessionManager.forkFrom", () => { const cloneEntries = await loadEntriesFromFile(cloneFile); const cloneHeader = cloneEntries.find((entry): entry is SessionHeader => entry.type === "session"); - const cloneMessage = cloneEntries.find( - (entry): entry is SessionMessageEntry => entry.type === "message", - ); + const cloneMessage = cloneEntries.find((entry): entry is SessionMessageEntry => entry.type === "message"); expect(cloneHeader?.id).not.toBe(sourceHeader.id); expect(cloneHeader?.parentSession).toBe(sourceHeader.id); expect(cloneHeader?.cwd).toBe(cwd); diff --git a/packages/tui/CHANGELOG.md b/packages/tui/CHANGELOG.md index ff9ff3fc4..7bcc78c76 100644 --- a/packages/tui/CHANGELOG.md +++ b/packages/tui/CHANGELOG.md @@ -5,6 +5,7 @@ ### Added - Added a freedesktop D-Bus desktop-notification fallback for BEL-protocol terminals on Linux: `TERMINAL.sendNotification` now fans out completion/ask toasts through `notify-send` (libnotify) — or `gdbus call ... org.freedesktop.Notifications.Notify` when libnotify is absent — whenever `DBUS_SESSION_BUS_ADDRESS` is set, so VTE-family hosts (Ptyxis, GNOME Terminal, Tilix, …) plus Alacritty and bare xterm finally surface toasts they cannot deliver in-band ([#3685](https://github.com/can1357/oh-my-pi/issues/3685)). Skipped for terminals with their own notification UI (VS Code, Warp) to avoid duplicate toasts, gated by a `PI_NO_DESKTOP_NOTIFY=1` opt-out, and kept fire-and-forget so the BEL still fires for tmux `monitor-bell`, X11 urgency hints, and audible-bell handlers. + ### Fixed - Fixed slash skill autocomplete staying closed after existing prompt text; mid-prompt `/...` lookup now shows only `/skill:` commands and accepting one replaces the draft with that skill command ([#3654](https://github.com/can1357/oh-my-pi/issues/3654)).