Commit Graph
7696 Commits
Author SHA1 Message Date
can1357 e183efbc84 feat(packages/mnemopi): added runtime debug switch for verbose diagnostics
- Added `debug` to `MnemopiRuntimeOptions` and resolved runtime options.
- Added `mnemopiDebugEnabled()` to expose runtime-scope verbose diagnostic checks.
2026-06-12 03:46:03 +02:00
can1357 d5b12494e8 test(packages/coding-agent): updated tests for declared effort filters
- Adjusted model-registry runtime-provider test expectations for effort-map filtering.
- Updated model-registry lookup test assertion to require declared effort levels only.
2026-06-12 03:46:03 +02:00
can1357 1f3b79078f test(packages/coding-agent): updated terminal frame and accent checks
- Updated settings selector tests to parse framed rows and sidebar columns accurately.
- Updated status-line tests to compare rendered accents using lazy ANSI setup.
2026-06-12 03:46:03 +02:00
can1357 8bad18563d feat(agent): updated steering tests and clarified task batching guidance
- Updated run-summary test mocks to track tool completion and only surface steering messages after the first task finishes.
- Reworked steering message retrieval from call counts to completion-and-drain state so pre-chat polls no longer block tool execution.
- Revised task prompt guidance to require batching multiple `tasks[]` in one call when subagents share context.
2026-06-12 03:31:40 +02:00
can1357 51208e5de1 feat(coding-agent): added boundary-aware steering and idle steer-queue handling
- Added optional `hasSteeringMessages` config hook and limited steering checks to boundaries.
- Fixed interrupted tool-batch steering by keeping queued messages until boundary handling.
- Added idle text and image submissions to steer queueing when no input waiter exists.
- Auto-continued resumable sessions after queued steering and preserved submit metadata.
2026-06-12 03:30:51 +02:00
can1357 f4ab3dab0e chore: bump models 2026-06-12 03:28:18 +02:00
can1357 5ecda78819 fix(hashline): fixed deep insert-after-block inward landing behavior
- Fixed deep insert-after-block landing by retreating inward corrections across trailing closers.
- Added blockStart tracking and warning diagnostics for inward correction of block inserts.
- Clarified insert-after-block prompt and changelog guidance to require opener-based landing rules.
- Added regression tests for nested, empty, and conflicted inward landing scenarios.
2026-06-12 03:27:51 +02:00
can1357 b54fa1fd22 feat(coding-agent): added configurable system prompt personalities with markdown presets
- Added a `personality` enum to `settings-schema.ts` and new `Personality` type alias.
- Replaced inline reply guidelines with a templated `<personality>` block in `system-prompt.md`.
- Added markdown personality specs and wired them into `system-prompt.ts` rendering.
- Updated `sdk.ts` and `selector-controller.ts` to apply personality changes and refresh prompts.
- Set sub-agent sessions to use `personality: none` to suppress personality rendering.
2026-06-12 03:27:51 +02:00
can1357 b69a2024d3 fix: revert read-repeat
This reverts commit 9613076e96.
2026-06-12 03:27:50 +02:00
can1357 3fd0dc3b58 feat(tui): added bounded holding for split escape partials in StdinBuffer
- Added `partialHoldTimeout` to `StdinBufferOptions` to configure extra wait for dangling partial escapes.
- Reworked `StdinBuffer` flush scheduling to defer emits and avoid stale partials merging with new escapes.
- Held SGR mouse and kitty partial escapes until cap expiry to prevent tail bytes leaking as typed text.
2026-06-12 03:27:50 +02:00
can1357 2e0ffcca46 feat(tui): added section-focus navigation support for settings interfaces
- Added `SettingsList` section-focus state with `sectionFocused`, `hasSectionFocusTargets`, and `toggleSectionFocus()`.
- Implemented section-heading navigation with Tab/Shift+Tab, Up/Down focus jumps, and Enter/Escape exits.
- Updated `/settings` input hints and fallback routing to tab-bar keys when section focus is unavailable.
- Added tests for section-focus navigation, mouse parsing, and tab-bar behavior coverage.
2026-06-12 03:27:50 +02:00
can1357 c35b41ed41 feat(coding-agent): added mouse-driven /settings overlay navigation across tabs and sections
- Added mouse hover, wheel, and click routing for `/settings` rows and tabs.
- Changed `/settings` to open as a fullscreen alternate-screen overlay.
- Added hover, hit-testing, and wheel APIs across TabBar, SelectList, and SettingsList.
- Added SGR mouse parsing plus `routeMouse` dispatch and exported it from the `tui` entrypoint.
2026-06-12 03:27:50 +02:00
can1357 6b1ca33bf7 refactor(snapcompact): dropped the snapcompact qualifier from every export
- Renamed all functions, types, and constants in @oh-my-pi/snapcompact to namespace-relative names (`snapcompactCompact` → `compact`, `renderSnapcompactFrames` → `renderMany`, `snapcompactFrameCount` → `frames`, `SnapcompactShape` → `Shape`, `SNAPCOMPACT_SHAPES` → `SHAPES`, …).
- Converted every consumer to `import * as snapcompact` member access: `agent/compaction.ts`, `coding-agent` `agent-session.ts`/`session-manager.ts`/`snapcompact-inline.ts`, and all affected tests.
- Renamed internal `geometry` locals to `geo` in `snapcompact.ts` to avoid TDZ collisions with the new `geometry` export.
- Updated `docs/compaction.md` prose and added a Breaking Changes entry to the snapcompact changelog documenting the full rename map.
2026-06-12 03:27:50 +02:00
can1357 a82d68ef49 feat(coding-agent): added experimental snapcompact inline imaging for system prompt and tool results
- Added `renderSnapcompactFrames()` and `snapcompactFrameCount()` to @oh-my-pi/snapcompact for paging arbitrary text into PNG image blocks without dim-marker bookkeeping.
- Widened the agent loop's `transformProviderContext` hook to `(context, model) => Context` so per-request transforms can gate on the dispatch model's capabilities.
- Added `SnapcompactInlineTransformer` rendering the system prompt and large historical tool results as snapcompact frames on vision models: vision gate, per-provider image budgets, 3k-token floor, savings-margin gate, skip-last rule, and hash-keyed render caches swept to live tool calls.
- Added default-off `snapcompact.systemPrompt` and `snapcompact.toolResults` settings under a new Context → Experimental group, composed after secret obfuscation in `sdk.ts` so frames are built per-request and never persisted to session.jsonl.
- Added prompt stubs (`snapcompact-system-stub.md`, `snapcompact-system-frames-note.md`, `snapcompact-toolresult-note.md`) and unit tests covering frame paging, no-mutate guarantees, budget caps, gates, and render caching.
2026-06-12 03:27:50 +02:00
Can BölükandGitHub 92a4ab4ad4 Merge branch 'main' into fix/local-memory-consolidation-instructions 2026-06-12 03:26:50 +02:00
Can BölükandGitHub dba99e3eb7 Merge pull request #2339 from blingdivinity/fix/edit-block-resolver-shell-rc
fix(natives): resolve bash for extensionless shell rc files (zshrc/.bashrc)
2026-06-12 03:26:13 +02:00
Can BölükandGitHub b2e859e691 Merge branch 'main' into farm/7d4f8a78/fix-minimax-gpt-oss-reasoning-effort-clamp 2026-06-12 02:45:25 +02:00
roboomp 4618d8d797 refactor(ai): inlined effort lookups instead of building a new map
Dropped `mapReasoningEffort` and `resolveActiveEffortMap` in both
`openai-completions.ts` and `openai-responses.ts`. Each callsite now chains
two ?? lookups: `compat.reasoningEffortMap?.[k] ?? model.thinking?.effortMap?.[k] ?? k`.
No `Object.keys`, no spread-merged object per request — same precedence
(post-`whenThinking` compat overrides win over catalog-baked thinking map).

Fixes #2315
2026-06-12 00:40:33 +00:00
bling 79fe2134e9 fix(natives): resolved bash for extensionless shell rc files
blockRangeAt inferred no language for files like `zshrc`/`.zshrc`/`.bashrc`
because `Path::extension` returns `None` for bare and dotfile names alike,
so the edit tool's `replace block` / `insert after block` ops were
permanently unresolvable on them — an agent retrying the block op would
loop on the same "could not resolve a syntactic block" error.

from_extension now maps known shell rc/profile basenames (zshrc, zshenv,
zprofile, zlogin, zlogout, zsh_aliases, bashrc, bash_profile, bash_login,
bash_logout, bash_aliases, profile, kshrc, mkshrc, shrc; with or without a
leading dot) to the bash grammar, alongside the existing Makefile/Dockerfile
basename handling. Adds a block-resolution regression test over a zsh
`if [[ … ]]; then … fi` block in `zshrc`/`.zshrc`/`.bashrc`.
2026-06-11 20:36:54 -04:00
Can BölükandGitHub 5a2a33658a Merge pull request #2256 from H4vC/accent-colors
session accent: derive from theme mode with collision avoidance
2026-06-12 02:36:45 +02:00
can1357 dd202786b2 test(coding-agent): aligned the settings search Escape test with the global search banner
- Updated `settings-selector-memory-refresh.test.ts` to assert the cross-tab search banner's cursor rendering (`b▌`) instead of the old `Search: b` label when verifying Escape clears the search before closing the selector.
2026-06-12 02:33:49 +02:00
can1357 8fd5171768 ux(coding-agent): capped collapsed bash, ssh, and eval previews to a viewport tail window
- Replaced the fixed `CALL_PREVIEW_MAX_LINES` cap in `render-utils.ts` with a dynamic `previewWindowRows()` (terminal rows minus a chrome reserve); `capPreviewLines` now returns lines untouched when expanded and windows them otherwise.
- Applied the cap in every render state for bash and ssh command previews — streaming and final render identically instead of snapping fully open on completion — and included the preview window in bash's render cache key so terminal resizes invalidate it.
- Capped eval cell code previews via the same window; previously cell code was never capped at all, with `ctrl+o` remaining the only way to uncap.
- Added stream-vs-final parity coverage in `bash-sixel-render.test.ts`, `ssh-render.test.ts`, and the new `eval-code-preview.test.ts`, and a changelog entry.
2026-06-12 02:33:49 +02:00
can1357 7c3407ac65 fix(coding-agent): converted Zod tool-parameter schemas to wire schema in five consumers
- Fixed `/dump` output (`session-dump-format.ts`) and the RPC `get_state` `dumpTools` payload (`rpc-mode.ts`) serializing Zod schema instances — leaking `def`/`shape` internals and stringified methods — by converting parameters through `zodToWireSchema` like providers receive.
- Fixed context-usage token estimation stringifying the Zod `def` tree, which overcounted tool schema tokens in the status line.
- Fixed tool-discovery indexing (`tool-index.ts`) returning empty `schemaKeys` for Zod tools, weakening BM25 ranking; keys are now recovered via wire conversion.
- Fixed the extension inspector panel rendering "(no arguments)" for Zod tools by reading properties off the converted wire schema.
- Added coverage in `tool-index.test.ts` plus new `context-usage.test.ts` and `session-dump-format.test.ts`, and a changelog entry.
2026-06-12 02:33:49 +02:00
can1357 4ad797d274 feat(coding-agent): added global type-to-search across /settings tabs
- Added a `SettingsSearchHeader` banner to `SettingsSelectorComponent`, permanently mounted under the top border and rendering only while a cross-tab search is active.
- Typing now filters settings across every tab via `getSettingItemFilterText` + `fuzzyFilter`, with per-tab first-match ids so Tab jumps between tabs that have matches; non-matching tabs render muted and the pre-search tab is restored on exit.
- Moved the tab bar below the tab content, disabled `SettingsList`'s own type-to-search in favor of the selector-owned global search, and only advertised PgUp/PgDn in the hint when multiple sections exist.
- Wired the new `mutedTab` style into `getTabBarTheme` in `modes/shared.ts`.
2026-06-12 02:33:48 +02:00
can1357 a7cb9c17f8 feat(tui): added selection tracking, layout options, and muted tabs to settings components
- Added `SettingsListOptions` to `SettingsList` with a `layout` override ("auto" sidebar vs "flat" inline headings) and a `typeToSearch: false` switch for hosts that own filtering globally.
- Added `getSelectedItem()` and an `onSelectionChange` callback to `SettingsList`, replaced index-based submenu selection restore with id-based item resolution, and exported `getSettingItemFilterText` for external filtering.
- Padded short section panes to the full viewport in `SettingsList` so the panel height stays constant across sections.
- Added `muted` tabs to `TabBar` (skipped during keyboard navigation, styled via the new `TabBarTheme.mutedTab`), a `setTabs()` replace API that preserves the active tab by id without firing `onTabChange`, a `showHint` toggle for the trailing "(tab to cycle)" hint, and omission of the label prefix when the label is empty.
2026-06-12 02:33:48 +02:00
can1357 870f69b98c docs(ai): added changelog entry for OAuth preflight refresh failure logging 2026-06-12 02:33:48 +02:00
can1357 c276cd6eff feat(coding-agent): reorganized /settings into titled sections with a sidebar layout
Also normalizes setting labels/descriptions and carries the package changelog entries for this batch (adjacent unreleased bullets are not splittable per commit), restoring section placement disturbed by the two prior changelog hunks.
2026-06-12 02:33:48 +02:00
can1357 23a1e244ba fix(coding-agent): froze detached task shimmer once blocks leave the transcript live region 2026-06-12 02:33:48 +02:00
can1357 0325aa25e9 feat(tui): added section headings, split layout, and section paging to SettingsList 2026-06-12 02:33:48 +02:00
can1357 49ad75709b fix(coding-agent): reset Responses provider session on stale replay errors before retrying 2026-06-12 02:33:47 +02:00
can1357 9360d24793 fix(coding-agent): resolved image-generation credentials through the model registry with typed errors 2026-06-12 02:33:47 +02:00
can1357 49cdf56993 fix(coding-agent): resolved Kagi, TTS, and model-discovery bearers through withAuth 2026-06-12 02:33:47 +02:00
can1357 503b2b7156 fix(coding-agent): routed web-search OAuth bearers through withOAuthAccess 2026-06-12 02:33:47 +02:00
can1357 98fddec509 fix(mnemopi): resolved API keys per request through withAuth and typed HTTP errors 2026-06-12 02:33:47 +02:00
can1357 c234d00def fix(coding-agent): handed compaction and summarization per-candidate API-key resolvers 2026-06-12 02:33:47 +02:00
can1357 9629842f33 feat(coding-agent): accepted a model directly in ModelRegistry.resolver 2026-06-12 02:33:46 +02:00
can1357 35e7d2d9d5 fix(agent): accepted ApiKey resolvers in compaction helpers and typed remote-compaction errors 2026-06-12 02:33:46 +02:00
can1357 8c3c68a048 feat(ai): added stateful previous_response_id chaining to the platform Responses provider 2026-06-12 02:33:46 +02:00
can1357 344ac680df feat(ai): added stateful SSE turn chaining to the Codex provider 2026-06-12 02:33:46 +02:00
can1357 c192692971 feat(catalog): added requiresJuiceZeroHack Responses compat flag for GPT-5-family models 2026-06-12 02:33:46 +02:00
can1357 f4504a41cd feat(ai): added withOAuthAccess auth-retry driver for OAuth-access consumers 2026-06-12 02:33:46 +02:00
can1357 e31927eae9 feat(ai): added typed ProviderHttpError with per-provider subclasses 2026-06-12 02:33:45 +02:00
can1357 f27f885eae fix(coding-agent/modes): handled plugin settings failures and Escape close during loading
- Caught and logged npm `PluginManager.list()` rejections in `PluginSettingsComponent`, returning an empty plugin list so the settings tab no longer stays blank when plugin listing fails.
- Added tests covering Escape handling while lists are loading and marketplace rendering when npm listing rejects.
2026-06-12 02:33:45 +02:00
can1357 ad276e931c feat(ai): added Codex Lite options and improved response stream resilience
- Added `responsesLite`, `reasoningContext`, `clientMetadata`, and `onModerationMetadata` options.
- Changed Lite request transformation to default `reasoning.context` to `all_turns`.
- Changed request shaping to strip image `detail` fields and force `parallel_tool_calls` off in Lite mode.
- Fixed streaming behavior by excluding `client_metadata` from websocket append diffs and swallowing moderation metadata errors.
2026-06-12 02:33:45 +02:00
can1357 d7f8c79dd0 fix(ai): synced OAuth credentials with latest SQLite rows before use
- AuthStorage now synchronizes the selected OAuth row from SQLite before returning or force-refreshing credentials.
- Credential preparation was updated to resync the selected credential after invoking `prepareForRequest`, so peer-updated tokens are observed.
- Added an OAuth refresh race test that confirmed peer-updated SQLite rows are returned without extra refresh calls.
2026-06-12 02:33:45 +02:00
can1357 eb966cc6dc fix: handled non-terminal pause_turn stops by resampling interrupted turns
- Mapped Codex `end_turn:false` terminal events to `pause_turn` stop details in response stream parsing.
- Updated `agent-loop` to re-sample `pause_turn` turns, reset on tool calls, and cap continuations at 8.
- Added coverage for pause-turn mapping and continuation-capping in agent and AI stream tests.
2026-06-12 02:33:45 +02:00
can1357 15bddcea80 Merge branch 'main' into farm/92afd68d/fix-lsp-format-tabsize-default 2026-06-12 02:33:19 +02:00
roboomp 0104393fae docs(catalog): removed duplicate changelog note
Removed the #2315 changelog entry from the already-released 15.11.3 section so the fix remains recorded only under Unreleased.

Fixes #2315
2026-06-11 23:42:46 +00:00
roboomp 2a399950fb style: bun run fix 2026-06-11 23:37:54 +00:00
roboomp 2d44d7ff71 fix(ai): overlay compat.reasoningEffortMap onto thinking.effortMap
After PR #2317 moved detected effort maps into model.thinking.effortMap,
the request builders stopped reading the active compat's reasoningEffortMap
at all. That dropped two surfaces:

  1) compat.whenThinking variants whose reasoningEffortMap was applied at
     buildModel time were silently ignored on thinking turns.
  2) Custom raw Model configs that author reasoningEffortMap on compat (no
     buildModel pass) had no path onto the wire.

Introduce a single resolveActiveEffortMap helper in both openai-completions
and openai-responses that overlays the active compat's reasoningEffortMap on
top of model.thinking.effortMap. Default catalog path is unchanged because
the resolved compat.reasoningEffortMap is empty.

Fixes #2315
2026-06-11 23:37:49 +00:00