Commit Graph
3085 Commits
Author SHA1 Message Date
can1357 e710d97d74 fix(coding-agent): corrected config display to render arrays and objects as JSON
- Improved config display formatting to properly render arrays and objects as JSON instead of `[object Object]`.
- Enhanced type display in config list output to show correct type indicators for number, array, and record settings.
- Added test coverage for record settings rendering in config list output.
2026-02-26 12:38:57 +01:00
can1357 944d7f8d8d feat(coding-agent): increased async max jobs limit to 100 for concurrency
- Increased default async max jobs limit from 15 to 100 for improved concurrent task handling.
- Updated fallback default in SDK initialization to match schema configuration.
2026-02-26 12:34:29 +01:00
can1357 5e17dbd994 chore: bump version to 13.3.4 2026-02-26 11:54:40 +01:00
can1357 334b47094f fix: ssh conn to not trigger mux/channel-open failures
Fixes #154
2026-02-26 11:54:08 +01:00
Nathan OwensandGitHub b20a874904 fix: improve Gemini tool selection with substitution table and read reinforcement (#144)
Add explicit WRONG→CORRECT substitution table to bash.md and read-over-bash
critical section to read.md. These concrete examples help models like
Gemini 3.1 Pro select specialized tools (read, grep, find, write, edit)
instead of defaulting to bash for file operations.

Changes:
- bash.md: Add 9-row substitution table inside <critical> showing exact
  tool calls to use instead of common bash patterns; add 2>/dev/null
  to the banned stderr patterns
- read.md: Add <critical> section emphasizing read over cat/head/tail/ls
  and requiring the path parameter (prevents empty {} calls)

Validated via GEPA optimization + live A/B testing with Gemini 3.1 Pro:

v13.2.1 (latest): Baseline avg 0.694 → PR avg 0.894 (+0.200)
  grep_pattern:       0.000 → 0.938 (+0.938)
  multi_tool_workflow: 0.000 → 0.955 (+0.955)
  find_files:         0.795 → 0.983 (+0.188)
  grep_and_read:      0.618 → 0.858 (+0.240)
  Wins 4 / Ties 3 / Losses 3

v13.1.1: Baseline avg 0.799 → PR avg 0.884 (+0.085)
  Wins 5 / Ties 3 / Losses 2
2026-02-26 11:47:53 +01:00
can1357 35565a2b7d chore: update models.json 2026-02-26 11:46:32 +01:00
can1357 5faaf7ad4f chore: bump version to 13.3.3 2026-02-26 11:44:10 +01:00
can1357 ba43c3e7ce wip: harden against issue #182. 2026-02-26 11:43:28 +01:00
can1357 9bcd1310d9 feat(ai/providers): added MCP resource and computer use message types to cursor provider
- Added support for four new exec message types: listMcpResources, readMcpResource, recordScreen, and computerUse.
- Imported four new result schemas to handle responses for MCP resource operations and computer use capabilities.
- Updated bash execution handler to use standardized 'cwd' parameter name instead of 'workdir'.
2026-02-26 11:25:02 +01:00
can1357 68a9d68dd9 chore(ai): disabled store support for MiniMax coding plan models
- Added supportsStore: false flag to MiniMax coding plan model descriptors.
2026-02-26 11:22:59 +01:00
can1357 6c42ad43b7 feat(coding-agent): no warning necessary for move
- Modified no-op detection logic to allow move-only operations with unchanged content.
2026-02-26 11:04:42 +01:00
can1357 4bf357ec44 chore: bump version to 13.3.2 2026-02-26 11:02:34 +01:00
can1357 8f78e50f1b Move poimandres themes into builtin defaults 2026-02-26 11:02:17 +01:00
can1357 d0f04d4417 fix: align missing skill directory test behavior 2026-02-26 10:53:42 +01:00
can1357 4b20bdad27 chore: bump version to 13.3.1 2026-02-26 10:45:26 +01:00
can1357 21c00550b9 fix(discovery): corrected skill discovery to handle missing user skills directory
- Fixed skill discovery to continue loading project skills when user skills directory is missing.
- Added error handling in scanSkillsFromDir to gracefully handle ENOENT and log other read failures.
- Added test case verifying project skills load successfully despite missing user skills directory.
2026-02-26 10:41:54 +01:00
can1357 17a61f5f0a feat(ai): add sampling controls across providers
Fixes #176
2026-02-26 10:23:45 +01:00
can1357 0d87031f1b feat: added sampling control parameters (topP, topK, minP, penalties) to agent options
- Added topP, topK, minP, presencePenalty, and repetitionPenalty sampling control options to StreamOptions and AgentOptions interfaces.
- Implemented getter and setter properties on Agent class for runtime configuration of model sampling parameters.
- Added UI configuration and preset value providers for five new sampling parameters in coding-agent settings schema and components.
- Integrated sampling control parameters through proxy layer and agent session configuration for end-to-end provider support.
2026-02-26 10:20:41 +01:00
can1357 50d392a3ba fix(coding-agent): source config CLI settings from schema 2026-02-26 10:14:14 +01:00
can1357 130b646d1d fix(coding-agent): guard report_finding extraction and rendering
Validate report_finding details before extraction and normalize findings before task rendering to avoid crashes when tool errors emit empty details.

Fixes #173
2026-02-26 10:07:02 +01:00
can1357 ad1229f9d3 fix(coding-agent): strip hallucinated hashline prefixes
Fixes #163
2026-02-26 10:02:47 +01:00
can1357 bddc39a49e fix(tui): keep wrapped markdown links clickable
Fixes #165
2026-02-26 09:57:58 +01:00
can1357 383e8a29d3 chore: bump version to 13.3.0 2026-02-26 09:48:11 +01:00
can1357 0e668a25ed fix: persist approved plan file to new session local directory
After plan approval, handleClearCommand() creates a new session with a
fresh artifacts directory. The local:// URL is session-scoped, so the
renamed plan file in the old session local dir was unreachable from
the execution session.

Write the plan content to the new session local dir after the session
switch so the titled plan artifact resolves correctly.
2026-02-26 09:45:23 +01:00
can1357 a90b282277 fix(coding-agent): harden hashline range-end duplicate handling
Clarify inclusive end semantics in the hashline prompt with bad/good examples.
Add range-replace duplicate-boundary auto-correction with a safety guard so correction only triggers for off-by-one ends.
Expand hashline heuristics tests to cover brace/); correction, blank-line guard, and boundary-already-in-range false-positive prevention.
2026-02-26 09:45:23 +01:00
can1357 7fc477679b fix(ai): harden OpenAI tool-call params for minimax compatibility
Fixes #181
2026-02-26 09:45:22 +01:00
can1357 da2f3a2143 fix(coding-agent): keep Claude user skills when project skills dir is missing
Fixes #177
2026-02-26 09:45:22 +01:00
can1357 f5ec1fd09e test(system-prompts): validate templates with Handlebars compile 2026-02-26 09:22:50 +01:00
can1357 049a5a8a2c Merge PR #148 2026-02-26 09:16:56 +01:00
can1357 ccbcb682df fix(submit-result): enforce data-or-error union contract 2026-02-26 09:02:09 +01:00
can1357 9da1b441a8 style(prompts): reformat 2026-02-26 08:56:47 +01:00
can1357 6dd384120c Merge branch 'pr-172' 2026-02-26 08:56:02 +01:00
can1357 1c8b3f8cb3 Merge PR #155 and fix isolation merge regressions 2026-02-26 08:53:25 +01:00
can1357 d7ee2e6210 Merge branch 'pr-171' 2026-02-26 08:50:46 +01:00
can1357 9a884b0655 style(keys): simplified match guards in parse_key_id using if guards
- Simplified match guards in parse_key_id by using if guards instead of nested conditionals.
2026-02-26 08:47:25 +01:00
lukeandGitHub bac30de126 feat: add PERPLEXITY_COOKIES env var for session cookie auth (#178)
Support Perplexity web search via session cookies extracted from
the desktop app (Electron/AppImage). Accepts either a raw cookie
string or a bare session token value.

Auth resolution order: PERPLEXITY_COOKIES > agent.db OAuth > PERPLEXITY_API_KEY
2026-02-26 08:42:53 +01:00
53d22a2508 fix(ai): coerce string-to-number for Optional<number> tool parameters (#179)
* fix(ai): coerce string-to-number for Optional<number> parameters

When a tool schema uses Type.Optional(Type.Number()), TypeBox generates
an anyOf:[{type:"number"},{type:"null"}] schema. AJV reports validation
failures against this as keyword:"anyOf" errors rather than
keyword:"type" errors.

coerceArgsFromErrors only processes keyword:"type" errors, so Optional
numeric fields were invisible to the coercion loop. normalizeOptionalNullsForSchema
traverses anyOf branches recursively but returned early at primitive-type
branches (type !== "object") without attempting string coercion, so the
anyOf traversal produced no change and the string was left uncoerced.

Fix: add a string-to-number coercion guard in normalizeOptionalNullsForSchema
before the early return, covering schema branches that declare
type:"number" or type:"integer". This allows the existing anyOf
traversal to coerce "1.0" -> 1.0 when the schema is Optional<number>.

Required numeric fields (Type.Number()) were unaffected as they produce
keyword:"type" errors handled by the existing path.

Reproducer: any MCP tool with an optional float parameter (e.g. tick_size:
Option<f64> in Rust/schemars) receives the value as a string from the
LLM and fails deserialization despite the coercion infrastructure being
designed to handle exactly this case.

* style: biome format validation.ts and coercion test

---------

Co-authored-by: Miroslav Drbal <miroslav.drbal@gendigital.com>
2026-02-26 08:42:44 +01:00
Kevin LoftisandGitHub bb9f899638 fix: prevent thundering herd of git status processes in status line (#180)
The #getGitStatus() method fires an async `git status --porcelain` but
only updates the TTL timestamp after the async completes. In large repos
where git status takes seconds, every TUI render cycle during that window
spawns a new process — cascading into hundreds of concurrent git processes,
exhausting file descriptors and creating .git/index.lock contention.

Add a #gitStatusInFlight boolean guard that ensures exactly one git status
process runs at a time. Use a finally block to unconditionally reset the
guard and refresh the TTL to completion time.
2026-02-26 08:41:56 +01:00
Muhammad Zahid MasruriandGitHub fa7b962e51 fix(exa): synthesize answer from per-result summaries (#169)
Request contents.summary from Exa /search API and combine up to
3 non-empty summaries into SearchResponse.answer, replacing the
previous 'No answer text returned' output.

Changes:
- Add contents.summary to every Exa search request body
- Add summary field to ExaSearchResult interface
- Export synthesizeAnswer() to build combined answer from summaries
- Export buildExaRequestBody() for testability
- Export normalizeSearchType() (was private)
- Prefer summary over text/highlights for snippet field (falsy check)
- Only synthesize answer from results that have a URL (mirrors sources filter)

Tests: 37 new tests covering normalizeSearchType, buildExaRequestBody,
synthesizeAnswer (pure unit tests) and searchExa (mocked fetch)
2026-02-25 19:45:34 +01:00
71de1413b0 Add Poimandres themes for Oh My Pi (#161)
- dark-poimandres: Deep blue-gray background with mint/turquoise accents
- light-poimandres: Light blue-gray background with same accent palette
- Complete omp color token mappings
- Symbol presets included
- Adapted from original Poimandres color scheme

Co-authored-by: papa <papa@example.com>
2026-02-25 19:44:38 +01:00
Chay ChoongandGitHub b29b06d73a fix(mcp): make disabledServers work on user-level third-party servers (#175)
The disabledServers mechanism introduced in 4bfa3b0c (Merge branch
'pr-82', 2026-02-16) was defeated by a level guard added after merge:
servers with _source.level === "user" were exempt from the disabled
check. This meant servers discovered from ~/.claude.json (which the
Claude provider tags as level "user") were never actually filtered out,
even when present in disabledServers.

Remove the level guard so disabledServers applies unconditionally. This
is safe because the /mcp disable command already uses updateMCPServer
(setting enabled: false inline) for servers defined in omp own configs;
the disabledServers path only fires for third-party discovered servers.

Also fix the /mcp list display to cross-filter discovered servers
against the disabled list, preventing a server from appearing both as
"connected" and "disabled" when the MCP manager has stale state.
2026-02-25 19:43:42 +01:00
Joshua ChristmanandCursor 7e85f2a299 fix(submit-result): make data required in schema to prevent submit loop
The submit_result tool marked 'data' as optional (Type.Optional) in its
JSON schema, but runtime validation requires it when status is 'success'.
Models that follow the schema literally omit the data parameter, causing
every call to fail with 'data is required when status is success (got
null/undefined)'. The agent then retries indefinitely.

Change data from Type.Optional(dataSchema) to dataSchema so the schema
matches runtime requirements. Models are now forced to include the data
object when calling submit_result with success, resolving the loop.

For aborted status, models can pass data: {}; validation is skipped.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 20:12:05 -06:00
Scott Hyndman 7172d0b573 fix(tui): preserve aspect ratio for height-capped images
Image previews were sized from max width first and then height-limited, which could stretch renders when maxHeightCells was the actual limiting bound. Compute a proportional fit within both bounds and forward maxHeightCells through the Image component.
2026-02-24 16:22:55 -05:00
can1357 2bf90e5a94 fix: align task-template test expectations with trimmed prompt output
optimizePromptLayout trims the rendered template, stripping the leading
newlines from sectionSeparator. Tests now account for this.
2026-02-24 03:37:47 +01:00
can1357 5b867435e6 chore: bump version to 13.2.1 2026-02-24 03:35:13 +01:00
2ff8f25d31 fix(coding-agent/commit): Hardened changelog schemas and shared categories (#149)
- Added a shared CHANGELOG_CATEGORIES constant and reused it across changelog tooling.
- Validated changelog entry and deletion payloads to require arrays and flag invalid categories.
- Exported the changelog tool schema for generator validation and referenced it during parsing.

Co-authored-by: Can Bölük <can1357@users.noreply.github.com>
2026-02-24 03:30:34 +01:00
Zakhar KoganandCan Bölük bb7f288489 fix(extensions): guard wrapTextWithAnsi with width validation
- Guard Container.render() to ensure width >= 1 for ALL components
- Guard TwoColumnBody.rightWidth with Math.max(0, ...)
- Validate description type before passing to native function
- Fall back to truncation when width <= 2

Fixes crash when opening extensions in narrow terminals.
2026-02-24 03:29:06 +01:00
can1357 d4469b3eb7 fix(coding-agent): updated edit rules and recovery instructions
Fixes #158.
2026-02-24 03:25:13 +01:00
can1357 523dca5bbc fix: extended exa search types
Fixes #159.
2026-02-24 03:15:43 +01:00
Zahidandcan1357 c37bd1553b fix(coding-agent): use supported Exa search type for deep wrapper 2026-02-24 03:14:13 +01:00