Commit Graph

2274 Commits

Author SHA1 Message Date
can1357 e64013f76e feat(coding-agent): added graceful schema validation fallback for AI providers
- Added graceful schema validation fallback mechanism that degrades to unconstrained schemas on repeated validation failures.
- Enhanced schema enforcement across AI providers to use try-catch pattern with automatic fallback to non-strict mode on validation errors.
- Improved handling of circular, deeply nested, and non-object output schemas with stack overflow prevention and type conversion fallbacks.
- Added `tryEnforceStrictSchema()` utility function providing error-resilient schema validation with strict mode flag tracking.
2026-02-27 13:12:32 +01:00
can1357 9b22401bdd feat(ai): add Kilo Gateway provider and OAuth device login
Fixes #193
2026-02-27 12:43:46 +01:00
can1357 b716c9743d fix(coding-agent): emit user shortcut extension hooks
Fixes #185
2026-02-27 12:28:54 +01:00
can1357 1b4fd9cbae feat(tools): added normalizeMixedSchemaNode() to handle JTD and JSON Schema
- Added normalizeMixedSchemaNode() function to recursively convert mixed JTD and JSON Schema definitions into valid JSON Schema.
- Changed output schema validation to gracefully fall back to unconstrained JSON objects when schema is invalid instead of throwing errors.
- Fixed handling of mixed JTD and JSON Schema output definitions by normalizing them during schema conversion.
- Added comprehensive test coverage for JTD-to-JSON Schema conversion and output schema validation edge cases.
2026-02-27 12:17:03 +01:00
Kevin Loftis 5af63f755d fix: use --no-optional-locks for background git status calls (#188)
* fix: use --no-optional-locks for background git status calls

Prevent index.lock contention by adding --no-optional-locks to all
git status --porcelain calls. This is the same approach VSCode uses
in its built-in git extension (GIT_OPTIONAL_LOCKS=0).

The status-line component polls git status every ~1s to show
staged/unstaged/untracked counts. Without --no-optional-locks,
each call acquires index.lock for an opportunistic index refresh,
which blocks concurrent git operations (pull, rebase, commit) run
by the user or by omp's own tool execution.

The git-status documentation explicitly recommends this:
  'Scripts running status in the background should consider
   using git --no-optional-locks status'

References:
- git docs: https://git-scm.com/docs/git-status (BACKGROUND REFRESH)
- git commit adding the flag: https://github.com/git/git/commit/27344d6
- VSCode's fix: GIT_OPTIONAL_LOCKS=0 in extensions/git/src/git.ts:2716
- Claude Code same issue: https://github.com/anthropics/claude-code/issues/11005
- GitExtensions same issue: https://github.com/gitextensions/gitextensions/issues/5066
- VSCode issue #31069: https://github.com/microsoft/vscode/issues/31069

* style: fix biome formatting for long lines in worktree.ts
2026-02-27 11:59:39 +01:00
Kevin Loftis 6c5b3739a4 feat: support explicit OAuth clientId and callbackPort in MCP server config (#189)
Add an optional `oauth` config block on MCP server entries in mcp.json,
allowing explicit `clientId` and `callbackPort` values for servers that
don't expose these through auto-discovery (e.g. Slack).

The `oauth.clientId` is used as a fallback — if the server's error
response or well-known metadata includes a client_id, that takes
precedence. The `callbackPort` defaults to 3000 when not specified.
2026-02-27 11:58:48 +01:00
can1357 d357298b4e feat(ai): added schema sanitization for strict mode validation
- Added `sanitizeSchemaForStrictMode` function to normalize JSON schemas by removing non-structural keys for strict mode compatibility.
- Enhanced `enforceStrictSchema` to handle union types with object variants and type arrays containing object.
- Fixed `enforceStrictSchema` to properly handle malformed object schemas with required keys.
- Integrated schema sanitization in coding-agent submit-result tool with fallback to non-strict mode on validation errors.
2026-02-26 21:19:43 +01:00
can1357 2e20d87151 feat(coding-agent): simplified skill management by removing per-task pinning
- Removed per-task skill pinning feature; subagents now inherit session skill set instead of per-task selection.
- Removed `preloadedSkills` option from `CreateAgentSessionOptions` interface and related system prompt plumbing.
- Removed `skills` field from Task schema; task execution now passes available session skills directly to subagents.
- Simplified task execution pipeline by removing skill resolution logic and preloaded skills handling from system prompt templates.
2026-02-26 20:47:54 +01:00
can1357 beff11a584 chore: bump version to 13.3.6 2026-02-26 16:58:14 +01:00
can1357 5329a5b9c6 refactor(coding-agent): updated default JSON schema definition
- Replaced `Type.Object` with `Type.Record` for more accurate representation of arbitrary JSON output when no specific schema is provided.
- Improved config CLI test assertions for model roles to strip ANSI escape codes, enhancing test robustness.
2026-02-26 16:57:54 +01:00
can1357 bdb980c478 feat(coding-agent): restructured submit_result tool to nest data and error in result object
- Restructured submit_result tool parameter schema to wrap data and error fields in a nested result object.
- Updated all prompt documentation to reference the new result.data and result.error parameter paths.
- Added validation logic to ensure result is an object containing exactly one of data or error.
- Updated test cases to reflect the new nested result object parameter structure.
2026-02-26 16:56:06 +01:00
can1357 09fe20e231 chore: bump version to 13.3.5 2026-02-26 12:43:21 +01:00
can1357 2174277ef0 feat(coding-agent): added JSON syntax support for array and record config values
- Added support for setting array and record configuration values using JSON syntax.
- Implemented JSON parsing and validation for array and record types in config CLI.
- Added 2 integration tests covering array and record configuration workflows.
- Enhanced test setup with temporary directory management and settings reset for isolation.
2026-02-26 12:43:08 +01:00
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 Owens 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 5faaf7ad4f chore: bump version to 13.3.3 2026-02-26 11:44:10 +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 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 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 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 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
luke 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
Kevin Loftis 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 Masruri 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
Chay Choong 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 Christman 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
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
Julia 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 Kogan 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