Commit Graph
9963 Commits
Author SHA1 Message Date
can1357 282963ee2f feat(coding-agent): supported omitting thinking summaries
- Added `omitThinking` setting to allow instruction of upstream providers to omit thinking summaries.
- Decoupled UI-level thinking block visibility from backend data retrieval.
- Updated session creation to use `omitThinking` for configuring provider-side summaries.
2026-06-20 08:14:54 +02:00
can1357 571eb5c4db fix(tui): cleaned up markdown rendering of inline tags and entities
- Stripped `<span>` and `<text>` tags from rendered markdown while preserving their contents.
- Updated HTML entity normalization to handle common special characters and numeric codes within the TUI.
- Ensured whitespace surrounding stripped inline tags is preserved, preventing content merging.
2026-06-20 08:11:31 +02:00
can1357 62756efb8f chore: bump version to 16.1.7 2026-06-20 05:40:49 +02:00
can1357 1d406e369f chore: bump models 2026-06-20 05:38:06 +02:00
can1357 1bc53adceb Merge remote-tracking branch 'origin/farm/5c684d99/minimax-code-m3-1m-context' 2026-06-20 05:37:01 +02:00
can1357 a0bec08577 Merge remote-tracking branch 'origin/farm/5b9f035b/slash-command-leading-whitespace' 2026-06-20 05:36:54 +02:00
can1357 5b329aa937 Merge remote-tracking branch 'origin/farm/2037e562/fix-user-skills-slash-menu' 2026-06-20 05:36:14 +02:00
can1357 bd239d630c Merge remote-tracking branch 'origin/farm/ec123cac/fix-responses-pi-snapcompact-400' 2026-06-20 05:36:03 +02:00
roboomp 02bd026d5e fix(catalog): pinned MiniMax-M3 contextWindow to 1M on minimax-code(-cn) providers
The MiniMax-M3 long-context policy in generated-policies.ts only
covered the anthropic-messages providers `minimax` and `minimax-cn`.
The MiniMax Coding/Token Plan (international and China) endpoints
serve the same model through `minimax-code` and `minimax-code-cn`
on openai-completions, and shipped with the upstream 512K pricing
boundary baked into models.json. Switching to MiniMax-M3 under the
Coding Plan therefore still showed a 512K context window in the
status bar.

Broadens the policy carve-out to all four providers, re-bakes both
affected entries in the bundled models.json, and extends the
generated-policies / bundled-catalog tests to assert 1M for the two
newly covered providers.

Fixes #3097
2026-06-20 03:07:50 +00:00
roboomp ec47aca355 fix(tui): wired editor enter handlers to leading-space slash detection
Preserved the leading whitespace in the suggestion prefix and routed both Enter paths in editor.ts through findLeadingSlashCommandStart so the popup apply and sync fallback no longer bail out on '  /sk'.

Fixes #3095
2026-06-20 02:57:01 +00:00
roboomp 8d10bed12f fix(tui): completed slash autocomplete after spaces
Handled slash commands when / is the first non-whitespace token so suggestions, inline hints, and synchronous Enter completion all share the same trigger.

Fixes #3095
2026-06-20 02:47:32 +00:00
roboomp 8907b65c9d Revert "fix(tui): completed indented slash commands"
This reverts commit 02f009b9c1.
2026-06-20 02:44:57 +00:00
roboomp 02f009b9c1 fix(tui): completed indented slash commands
Handled leading whitespace before slash command autocomplete, inline hints, and synchronous Enter completion.

Added regression coverage for indented slash command suggestions, argument hints, Tab acceptance, and sync submission.

Fixes #2875
2026-06-20 02:43:49 +00:00
roboomp 48d64210f9 fix(config): allowed responses image detail compat
Added the missing models.yml schema field for compat.supportsImageDetailOriginal so custom Responses-compatible proxies can opt out of snapcompact's native-resolution image hint.

Covered the CC Switch-style custom provider override and the Codex Responses wire clamp from original to auto.

Fixes #3092
2026-06-20 02:27:57 +00:00
can1357 9aa4484079 chore: prompt reorder 2026-06-20 03:19:13 +02:00
can1357 73065ea431 chore: bump version to 16.1.6 2026-06-20 02:47:39 +02:00
can1357 9cd5c77c5a feat(coding-agent/prompts): improved parallel task delegation instructions
- Add a dedicated `<parallel-reflex>` section to the system prompt to discourage serial work habits and enforce parallelization by default.
- Refine task-spawning guidance to emphasize intentional delegation, agent specialization, and clear assignment criteria.
- Update `task.md` parallelization heuristics and rule definitions to clarify when subagents should be deployed concurrently versus sequentially.
2026-06-20 02:47:04 +02:00
can1357 52843e4fb9 feat(coding-agent): added inline prompt and compound duration support to /loop
- Enabled inline prompt execution by allowing /loop to accept a trailing follow-up message.
- Added support for compound duration formats (e.g., 1h30m) within limit specifications.
- Updated logic to distinguish between limit tokens and prose to maintain backwards compatibility for unbounded loops.
- Refactored loop argument parsing to return both duration/count limits and optional string prompts.
2026-06-19 23:50:06 +02:00
can1357 1a92b3f854 chore: bump version to 16.1.5 2026-06-19 22:27:50 +02:00
roboompandcan1357 47cc464962 fix(catalog): retired stale Claude 4.6 wire ids and healed the bundled Sonnet route
Follow-up to #3071 review (codex + @PGupta-Git): the family rewrite alone
did not heal users running off the bundled catalog or stale SQLite cache
rows, which still routed Sonnet 4.6 thinking efforts to the 404
`claude-sonnet-4-6-thinking` wire id. `collapseEffortVariants` treats
those collapsed snapshots as authoritative and `refreshCollapsedThinking`
exits early for families without `effortBudgets` (Claude pairs), so the
new empty routing in the hand table never reached the snapshot.

- Declared the dead wire ids as `retiredMembers` on the Claude 4.6
  families (`claude-sonnet-4-6-thinking` on the Sonnet family,
  `claude-opus-4-6` on the Opus family). This triggers
  `reconcileRetiredRouting` to rewrite every `effortRouting` entry that
  targets a retired id to a live wire id (Sonnet falls back to the bare
  member; Opus falls back to `-thinking`).
- Refreshed the bundled `packages/catalog/src/models.json` Sonnet 4.6
  entry so fresh installs do not boot with the dangling routing — the
  surgical diff matches what the generator would emit; the rest of the
  catalog is left untouched to keep the bug-fix PR scoped.
- Added regression tests in `variant-collapse.test.ts` for both
  reconciliation paths and a bundled-catalog test
  (`issue-3067-repro.test.ts`) that pins the live-wire-id resolution end
  to end through `buildModel` for every effort tier.

Fixes #3067
2026-06-19 22:25:48 +02:00
can1357 692c37a406 Merge remote-tracking branch 'origin/farm/a8fdfedc/fix-normalize-tools-omit-intent-wire-schema' 2026-06-19 22:25:00 +02:00
can1357 f8f8136021 refactor(coding-agent): privatized the legacy nextToolChoice method to
- Privatized the legacy `nextToolChoice` method to `#nextHardToolChoice` to ensure all tool-choice directives flow through the unified `nextToolChoiceDirective` entry point.
- Eliminated redundant dual entry points for fetching tool choices, which previously bypassed the soft pending-preview lifecycle.
- Updated test suites to consume `nextToolChoiceDirective` where appropriate to maintain consistency with internal agent-loop logic.
2026-06-19 22:24:12 +02:00
roboomp 48a78f278c fix(agent): wire-encode normalizeTools parameters for omit-intent tools
normalizeTools only ran toolWireSchema/zodToWireSchema/arkToWireSchema
inside the if (doInjectIntent) branch, so any tool whose intentMode
resolved to "omit" (function intent, or intent: "omit" like the
builtin eval/resolve) had its live arktype/zod schema object left in
parameters. The pruneDescriptions branch already wire-encoded
unconditionally, so the two branches disagreed; first-party providers
re-encoded with toolWireSchema themselves and never noticed, but any
downstream consumer that serialized parameters as-is ended up with an
invalid schema (arktype AST: object-valued required, domain instead of
type, no properties).

Hoist toolWireSchema(t) out of the inject-intent branch so it always
runs and inject intent on top, mirroring the pruneDescriptions shape.
Drop the now-redundant isZodSchema/isArkSchema/zodToWireSchema/
arkToWireSchema imports.

Fixes #3074
2026-06-19 19:43:45 +00:00
can1357 ee2b000bdc chore: bump version to 16.1.4 2026-06-19 20:45:56 +02:00
can1357 5be9d3171a chore: update changelogs 2026-06-19 20:42:26 +02:00
can1357 6203fadc6d Merge remote-tracking branch 'origin/farm/a3965b14/refresh-git-plugin-lockfile-on-reinstall' 2026-06-19 20:42:07 +02:00
can1357 747d502315 Merge remote-tracking branch 'origin/farm/1eb5b57f/fix-antigravity-claude-thinking-and-max-tokens' 2026-06-19 20:42:03 +02:00
can1357 3cc269e698 Merge remote-tracking branch 'origin/farm/867a4231/image-paste-placeholder-crash' 2026-06-19 20:41:59 +02:00
can1357 94403914ec Merge remote-tracking branch 'origin/farm/75a2f333/startup-usage-fetch-nonblocking' 2026-06-19 20:41:41 +02:00
can1357 6d5c5a110d Merge remote-tracking branch 'origin/farm/9ebbf0ee/resolve-phantom-pending-preview' 2026-06-19 20:41:37 +02:00
roboomp cbb9c96c64 fix(providers): aligned Antigravity Claude 4.6 routing with the live backend
The daily Cloud Code Assist backend (`daily-cloudcode-pa`) exposes Claude 4.6
asymmetrically: `claude-sonnet-4-6` has no `-thinking` twin and
`claude-opus-4-6` has only the `-thinking` twin. The shared
`thinkingPair("claude-sonnet-4-6", …)` family (with `preserveAbsentEffortRoutes`)
kept every effort routed to `claude-sonnet-4-6-thinking` even when discovery
only returned the bare id, so any reasoning-on request 404'd with
`Requested entity was not found`. Claude on Antigravity also caps
`maxOutputTokens` at 64000, while `ANTIGRAVITY_MODEL_WIRE_PROFILES` had no
Claude entries — discovery's 65536 propagated to the wire and 400'd with
`Request contains an invalid argument`.

- Replaced the two `thinkingPair` calls for Claude 4.6 in `SHARED_CCA_FAMILIES`
  with bespoke single-wire families. Sonnet collapses to the bare wire id,
  Opus collapses to the `-thinking` wire id, and per-effort thinking is
  carried by the request body's `thinkingBudget` on the single shared wire id.
  Listing both candidate ids in `members` (priority order) keeps the collapse
  correct if the backend mix ever rebalances.
- Added `claude-sonnet-4-6` and `claude-opus-4-6-thinking` entries to
  `ANTIGRAVITY_MODEL_WIRE_PROFILES` capping `maxOutputTokens` at 64000.
- Made `AntigravityModelWireProfile.modelEnum` optional — Anthropic-backed
  wire ids are accepted without a captured `labels.model_enum` token. The
  request builder now emits the label only when the profile defines one.
- Regression tests in `variant-collapse.test.ts` (routing/wire-id resolution
  for both 4.6 families across all three discovery permutations) and
  `google-gemini-cli-alignment.test.ts` (request builder caps Claude
  `maxOutputTokens` at 64000 and omits the unset `model_enum` label).

Fixes #3067
2026-06-19 18:33:57 +00:00
roboomp a63da8a3a3 fix(coding-agent): made plugin install transaction atomic on validation failure
The #3063 fix introduced a second mutating step — `bun update <name>` —
that rewrites bun.lock before extension validation runs. Three failure
paths could still leave the rejected commit pinned in the lockfile or
active tree:

- Extension validation throwing after `bun update` had refreshed
  bun.lock — rollback restored package.json and node_modules/<name>
  but never touched bun.lock.
- Feature validation (`omp plugin install pkg[ghost]`) throwing
  outside the rollback block entirely.
- Runtime-config save failing after a successful install with no
  rollback path.

Snapshot bun.lock alongside package.json before `bun install` runs and
route every post-install step (resolution, update, package.json read,
feature validation, extension validation, runtime-config save) through
one outer catch that restores all three (package.json + bun.lock +
node_modules/<name> from snapshot). `#rollbackFailedInstall` now
tolerates an unresolved `actualName` for failures that throw before
the dep key is known.

Three regression tests in plugin-install-validation.test.ts pin the
new contract: bun.lock restoration after a git reinstall fails
validation, bun.lock removal when it didn't exist pre-install, and
rollback on an unknown feature request.

Addresses review feedback on #3069.
2026-06-19 18:33:33 +00:00
roboomp 0ada5fe168 fix(coding-agent): refreshed github plugin lockfile pin on re-install
bun install <spec> respects the existing bun.lock pin when the spec is
unchanged and never re-resolves the remote ref, so re-running
`omp plugin install github:owner/repo` on an already-installed plugin
reported success while silently keeping the user on the original
resolved commit (1ms no-op, no network).

PluginManager.install now follows a git re-install with
`bun update <name>` to force re-resolution of the ref against the
upstream. First-time installs (no prior dep entry) skip the update —
the initial bun install already fetches HEAD. bun update failures
trigger the same rollback path as validation failures.

Fixes #3063
2026-06-19 18:22:57 +00:00
roboomp 37d7430b4d test(tui): covered linked placeholder preinit render
Exercise CustomEditor with imageLinks set so the issue reproduction is guarded at the editor boundary.

Fixes #3064
2026-06-19 18:17:25 +00:00
roboomp d99a6489dd fix(tui): guarded hyperlinks before settings init
Return plain text from hyperlink helpers until Settings.init() has completed so image paste placeholders cannot crash early editor renders.

Fixes #3064
2026-06-19 18:14:40 +00:00
roboomp 1873bcaaf4 fix(agent): forwarded pending preview invoker and drain hooks
Forwarded peekPendingInvoker and clearPendingInvokers from the production toolSession literal so the resolve tool can dispatch staged previews and drain stale gates in real CLI sessions, not only in unit tests.

Added a regression test exercising the production wiring through AgentSession and a phantom-gate drain via a no-invoker facade.

Fixes #3061
2026-06-19 18:02:02 +00:00
roboomp 49317a0f1c fix(agent): cleared stale pending preview gates
Cleared pending-preview markers when resolve has no runnable handler so a stale gate cannot keep forcing resolve after the invoker is gone.

Added regression coverage for apply and discard draining stale pending markers.

Fixes #3061
2026-06-19 17:54:37 +00:00
can1357 a24934d7b4 feat(ai): implemented bounded retries for empty assistant completions
- Introduced `withEmptyCompletionRetry` utility to manage bounded retries with exponential backoff for empty streaming responses.
- Integrated completion validation across Anthropic and OpenAI providers to ensure robust handling of intermittent empty outputs.
- Updated `omp bench` and `omp dry-balance` to correctly resolve extension-contributed providers and report content-less runs as failures.
- Added comprehensive unit and regression tests to validate retry logic, provider resolution, and failure reporting metrics.
2026-06-19 19:41:49 +02:00
can1357 d10a5356ca feat(coding-agent): added provider extension support to CLI tools
- Enable shared extension provider loading in bench and dry-balance CLI commands to ensure custom providers are registered.
- Surface benchmark failures for empty streams that return no content and zero usage tokens instead of treating them as successful.
2026-06-19 19:23:46 +02:00
roboomp b1453e7c77 fix(coding-agent): preserved late usage refreshes
Kept observing a status-line usage fetch after the startup timeout so late successful reports still refresh the quota segment instead of being hidden behind the timeout backoff.\n\nFixes #3057
2026-06-19 17:16:04 +00:00
roboomp 31122d2409 fix(coding-agent): timeboxed status usage refresh
Deferred the status-line quota refresh off the render path and raced it against a short startup timeout so slow Anthropic usage lookups cannot pin interactive startup. Added regression coverage for non-synchronous refresh startup and timeout backoff.\n\nFixes #3057
2026-06-19 17:06:47 +00:00
can1357 eb784d7ae6 feat(coding-agent): refined cache invalidation to require prior warm read
- Tighten invalidation logic to only trigger when a demonstrably warm cache (previously read) goes cold.
- Ignore cold transitions following write-only turns to prevent spurious markers during initial cache warming or after natural TTL expiry.
- Update test suite to verify that consecutive cold turns following an initial write do not trigger invalidation alerts.
2026-06-19 18:58:49 +02:00
can1357 259bb004e1 chore: bump version to 16.1.3 2026-06-19 17:52:38 +02:00
can1357 b2dc706ee7 feat: enabled auto-retry for AI thinking loops
- Improved thinking loop detection logic by refining text normalization and treating stalls as retryable errors.
- Instrumented the agent session to recognize thinking loop markers within retryable error conditions.
- Automated the clearing of stale error banners upon successful auto-retry execution.
- Added comprehensive test coverage for chunked thinking loop errors and banner management.
2026-06-19 17:51:53 +02:00
can1357 8351536641 refactor(coding-agent): consolidated and prioritize perplexity authentication
- Moved authentication logic to `perplexity-auth.ts` to share logic between search providers and CLI commands.
- Updated authentication priority to prefer browser cookies over OAuth tokens during search operations.
- Modified the `token` CLI command to display active OAuth tokens when both an OAuth token and an API key are configured.
- Added comprehensive unit tests in `perplexity.test.ts` to verify authentication priority and precedence.
2026-06-19 17:44:59 +02:00
can1357 339bd6c62a chore: added user to vouched list
- Added korri123 to the VOUCHED contributors list.
2026-06-19 17:39:38 +02:00
can1357 9478e3cc5c refactor: replaced ReturnType<typeof setTimeout> with Timer type
- Replaced usage of `ReturnType<typeof setTimeout>` and `ReturnType<typeof setInterval>` with the explicit `Timer` type across the codebase.
- Updated several type definitions and function signatures to use concrete types instead of inferred return types for improved clarity and maintainability.
2026-06-19 17:38:07 +02:00
can1357 81d9e17881 fix(coding-agent/commands): ensured auth storage connection is closed
- Wrapped the token command logic in a try-finally block to ensure the authentication storage is closed after execution.
2026-06-19 17:27:02 +02:00
can1357 ff3a1d8863 Merge remote-tracking branch 'origin/farm/f56ccf5e/mnemopi-local-embeddings-macos' 2026-06-19 17:24:56 +02:00
can1357 14603e9b32 docs(changelog): normalize [Unreleased] after PR integration
Promote union-merged entries into [Unreleased], drop a duplicated
Removed block, and add the missing #3006 entry.
2026-06-19 17:24:17 +02:00