Commit Graph
2131 Commits
Author SHA1 Message Date
Joshua ChristmanandCursor b9cda5bbd4 fix(coding-agent): use valid JSON schema for submit_result when no output schema specified
Replace Type.Any() with Type.Object({}, { additionalProperties: true }) in the
submit_result tool's fallback data schema. Type.Any() serializes to
{"description": "..."} which lacks the required 'type' field for valid
JSON Schema. Strict providers (e.g. MiniMax, Cloud Code Assist) reject this
with 400 Unrecognized schema errors.

The fix produces {"type": "object", "additionalProperties": true, ...}
which conforms to JSON Schema draft 2020-12 while preserving the same
permissive acceptance of arbitrary structured output.

Fixes schema rejection observed with:
- MiniMax API (via zuccaro/bryce proxy)
- Cloud Code Assist (Claude) - related to #45

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 23:24:44 -06:00
can1357 42a00ba425 refactor(session): restructured byte truncation to unified windowed function reducing duplication
- Refactored byte truncation to use unified `truncateBytesWindowed` function supporting both head and tail modes, reducing code duplication.
- Optimized `truncateHead` and `truncateTail` to avoid full Buffer allocation by processing content incrementally with character-level scanning.
- Improved `TailBuffer.append()` to handle large incoming chunks more efficiently by detecting when a single chunk dominates the tail budget.
- Enhanced `OutputSink.push()` to avoid creating giant intermediate strings when spilling to files by windowing large chunks before concatenation.
- Refactored newline counting to use a constant `NL` for consistency across the module.
2026-02-22 01:59:18 +01:00
can1357 b2bbc80ee8 refactor: consolidated shared auth and utilities
- Migrated AuthCredentialStore and AuthStorage to shared modules, standardizing credential management and soft deletion.
- Consolidated Anthropic authentication and various other formatting/utility helpers into shared modules.
- Improved unicode normalization in patch logic with regex for efficiency and correctness.
- Enhanced JTD type guards for robust schema validation.
2026-02-22 01:58:04 +01:00
can1357 5acdf950fd docs(coding-agent): emphasized Task tool use for subagents
- Highlighted critical instructions for parallelization using the Task tool.
- Reinforced the necessity to always use subagents for independent work streams.
- Simplified wording for conditions requiring task decomposition.
2026-02-22 01:44:19 +01:00
can1357 888a3b3307 refactor(coding-agent): migrated credential and utility logic to shared modules
- Extracted credential storage to shared @oh-my-pi/pi-ai package with AuthCredentialStore and AuthStorage classes.
- Consolidated UI formatting logic from ToolUIKit class into standalone utility functions across render-utils and output-meta modules.
- Moved utility functions (parseCommandArgs, substituteArgs, expandPath, normalizeUnicode) to dedicated modules for improved code reuse.
- Extracted JTD type definitions and type guards to jtd-utils module for shared use across schema conversion tools.
- Updated Claude model pricing and added cache read costs in models.json for accurate billing calculations.
- Refactored agent-storage to delegate credential management to AuthCredentialStore instead of direct SQLite operations.
2026-02-22 01:35:32 +01:00
can1357 6a7914b41f feat(ai): introduced GitLab Duo provider with OAuth and 16 models
- Added GitLab Duo provider with support for Claude, GPT-5, and Duo Chat models via GitLab AI Gateway.
- Added OAuth authentication for GitLab Duo with automatic token refresh, PKCE security, and 25-minute token caching.
- Added 16 new GitLab Duo models including Claude Opus/Sonnet/Haiku and GPT-5 variants with reasoning and multimodal support.
- Added `isOAuth` option to Anthropic provider for OAuth bearer token authentication mode.
- Exported `streamGitLabDuo`, `getGitLabDuoModels`, and `clearGitLabDuoDirectAccessCache` functions for GitLab Duo integration.
2026-02-22 01:02:26 +01:00
can1357 e4225d6829 refactor(coding-agent): consolidated output utilities into streaming-output module
- Consolidated truncation and output utilities from tools/truncate.ts and tools/output-utils.ts into session/streaming-output.ts with improved UTF-8 boundary handling.
- Renamed formatSize() to formatBytes() across codebase for consistency and clarity in byte-level formatting.
- Refactored OutputSink to use windowed byte truncation instead of full-buffer encoding, improving memory efficiency on large outputs.
- Migrated from Buffer to Uint8Array in web scrapers for better cross-platform compatibility and native browser support.
- Added getArtifactManager() lazy-initialization method to ToolSession for deferred artifact manager instantiation.
- Simplified API surface with wildcard exports from tools and session modules, reducing import complexity.
2026-02-22 01:02:26 +01:00
can1357 bd26404088 chore: bump version to 12.18.3 2026-02-21 23:15:03 +01:00
can1357 ff16257c27 chore: bump version to 12.18.1 2026-02-21 22:59:17 +01:00
can1357 1932e175f5 feat(coding-agent): added Buffer.toBase64() polyfill for Bun compatibility
- Added Buffer.toBase64() polyfill for Bun compatibility to enable base64 encoding of buffers.
- Added test coverage for Buffer.toBase64() polyfill to verify base64 encoding functionality.
2026-02-21 22:59:04 +01:00
can1357 401b4f48d9 chore: bump version to 12.18.0 2026-02-21 22:54:57 +01:00
can1357 0b1514da61 feat(coding-agent): added overlay UI option and fixed viewport sync race conditions
- Added overlay option to custom UI hooks for bottom-centered component display.
- Added automatic chat transcript rebuild when returning from custom or debug UI modes.
- Fixed race condition in bash interactive component preventing output append after closure.
- Extracted environment variable configuration into reusable NO_PAGER_ENV constant for bash execution.
- Fixed viewport synchronization issue in TUI causing terminal desync during full re-renders.
2026-02-21 22:52:59 +01:00
can1357 93e28a8029 refactor: consolidated timing instrumentation to centralized logger methods
- Migrated timing instrumentation from custom utils/timings module to centralized logger.time() and logger.timeAsync() methods across coding-agent and natives packages.
- Removed PI_DEBUG_STARTUP environment variable and debugStartup() function, consolidating debug output to logger.debug() for conditional logging.
- Replaced custom TextDecoder buffer decoding with native toString('utf-8') method in natives package for simplified string conversion.
- Added RingBuffer<T> circular buffer implementation to pi-utils with comprehensive test coverage for efficient queue operations.
- Enhanced logger interface with time() and timeAsync() methods providing unified operation timing and performance tracking across packages.
2026-02-21 22:42:18 +01:00
can1357 30a5475593 refactor(ai): standardized Google API headers and user agents
- Consolidated Gemini CLI and Antigravity headers into central definitions.
- Split Antigravity headers into distinct authentication and streaming sets.
- Enabled User-Agent configuration via environment variables.
- Ensured consistent header usage across relevant services.
2026-02-21 21:56:48 +01:00
can1357 f0b2029867 refactor(coding-agent): use centralized getAntigravityHeaders() for full header blocks
Export getAntigravityHeaders() from pi-ai and replace duplicated
ANTIGRAVITY_HEADERS constants in gemini-image tool and Gemini search
provider with calls to the centralized function.

Fixes #132
2026-02-21 21:28:18 +01:00
can1357 f33e2eef54 fix(coding-agent): use centralized getAntigravityUserAgent() for User-Agent headers
Replace hardcoded "antigravity/1.11.5 darwin/arm64" User-Agent strings with
the centralized getAntigravityUserAgent() function from @oh-my-pi/pi-ai in
gemini-image tool and Gemini search provider.

Fixes #132
2026-02-21 21:25:34 +01:00
can1357 643eb12df6 fix(coding-agent): correct omp-stats subpath imports for tarball installs 2026-02-21 16:59:37 +01:00
can1357 737fc46d65 chore: bump version to 12.17.2 2026-02-21 16:53:05 +01:00
can1357 fc2c3c2c7c fix(coding-agent): corrected shell session state reset and hard timeout handling for command execution
- Fixed persistent shell session state not being reset after command abort or hard timeout.
- Fixed hard timeout handling to properly interrupt long-running commands exceeding grace period.
- Introduced hard timeout mechanism with Promise.race() to enforce absolute timeout limit and prevent command hangs.
- Replaced shell command execution with explicit timeout and SIGKILL signal handling in shell-snapshot.
- Simplified bash command normalization to use only explicit head/tail parameters from tool input.
- Exported getAntigravityUserAgent() function for centralized User-Agent header construction.
2026-02-21 16:52:37 +01:00
can1357 efa20a0038 chore: bump version to 12.17.1 2026-02-21 16:35:51 +01:00
can1357 82c0d9bb4b fix(bash): corrected concurrent subagent interference via sessionKey parameter
- Added sessionKey parameter to bash execution to prevent concurrent subagent interference.
2026-02-21 16:33:26 +01:00
can1357 d5b28d6d3b feat(mcp): added browser MCP server filtering to prevent conflicts with builtin tool
- Added filterBrowser configuration option to disable MCP browser servers when builtin browser tool is enabled.
- Added isBrowserMCPServer() function to detect browser automation MCP servers by name, URL, or command patterns.
- Added filterBrowserMCPServers() function to remove browser MCP servers from loaded configurations.
- Added BrowserFilterResult type for browser MCP server filtering results.
2026-02-21 16:30:14 +01:00
can1357 a117b35f9f chore: organized package.json exports across 11 packages with sync-exports script
- Added sync-exports.ts script to enforce canonical package.json field ordering and auto-generate exports from filesystem structure.
- Expanded subpath exports across 11 packages (ai, agent, coding-agent, natives, stats, utils, tui, swarm-extension) to enable flexible module imports.
- Reorganized package.json field ordering to follow standard conventions with metadata before main/exports and files/exports at end.
- Consolidated wildcard export patterns to simplify import paths while maintaining backward compatibility with explicit subpath exports.
2026-02-21 16:21:57 +01:00
can1357 17e9a8bff1 fix(coding-agent): correct import path for untilAborted 2026-02-21 16:10:58 +01:00
can1357 ecc1d22808 chore: bump version to 12.17.0 2026-02-21 16:05:33 +01:00
can1357 94b4f4dcfd feat(coding-agent): parallelized system prompt preparation with timeout protection
- Added timeout protection (5 seconds) for system prompt preparation with graceful fallback to minimal context on timeout.
- Replaced glob-based AGENTS.md discovery with depth-limited directory traversal (depth 1-4) for improved performance and control.
- Refactored system prompt preparation to parallelize file loading operations with a 5-second timeout to prevent startup hangs.
- Parallelized context file, skills, git, and AGENTS.md discovery to reduce startup latency.

Fixes #129.
2026-02-21 16:05:07 +01:00
can1357 bdf37ccde2 refactor(coding-agent): simplified git timeout handling with AbortSignal
- Simplified git command timeout handling by replacing manual Promise.race with AbortSignal.timeout and untilAborted utility.
- Consolidated timeout logic to single 3000ms value and unified git command invocation pattern.
2026-02-21 15:57:05 +01:00
can1357andCan Bölük 39190cbe37 refactor(coding-agent): remove unused RenderCallOptions type 2026-02-21 15:50:31 +01:00
DeprecatedLukeandCan Bölük faf90b274b refactor(coding-agent)!: standardize renderCall signatures to (args, options, theme) 2026-02-21 15:50:31 +01:00
can1357 b67c048a49 chore: bump version to 12.16.0 2026-02-21 14:45:10 +01:00
can1357 f0fb643117 feat(ai): implemented configurable model refresh strategies with global fallback resolution
- Added configurable model refresh strategies (online, online-if-uncached) to control model discovery behavior.
- Implemented global model.dev fallback resolution with context window and token prioritization for improved model attribute consistency.
- Incremented model cache schema version to support improved global model fallback resolution.
- Enhanced model generation script with dedicated functions for building model reference maps and applying fallback attributes.
2026-02-21 14:44:46 +01:00
can1357 78b6881830 chore: updated ai models & reformatted dev. 2026-02-21 14:44:33 +01:00
can1357 c01e895ec6 docs(coding-agent): documented architecture and development patterns for coding-agent
- Restructured DEVELOPMENT.md with comprehensive architecture documentation covering boot sequence, mode implementations, session lifecycle, tool infrastructure, capability discovery, execution backends, task orchestration, and development workflow.
- Added detailed ASCII diagrams and subsystem boundaries for CLI entry, mode dispatch, session persistence, tool output metadata, MCP/LSP integration, and RPC protocol.
- Documented tool registration patterns, streaming result flow, OutputSink/TailBuffer/ToolResultBuilder infrastructure, and standard patterns for streaming vs non-streaming tools.
- Added comprehensive playbooks for adding built-in tools, RPC commands, and hook events with canonical file references and current behavior notes.
2026-02-21 14:37:54 +01:00
can1357 3b7e7ba805 feat(coding-agent): enabled high-level thinking by default for reasoning
- Changed default thinking level from 'off' to 'high' for improved reasoning and planning.
2026-02-21 14:31:06 +01:00
Miroslav Drbal 8be261cd29 fix(mcp): strip $schema and nullable from MCP tool schemas before AJV validation
MCP servers using JSON Schema draft 2020-12 (e.g. servers built with Rust rmcp/schemars)
emit "$schema": "https://json-schema.org/draft/2020-12/schema" and "nullable": true in
tool inputSchemas. AJV (configured for draft-07) throws:

  Error: no schema with key or ref "https://json-schema.org/draft/2020-12/schema"

This causes all tool calls from these servers to fail argument validation silently.

Add sanitizeSchema() in convertSchema() — the single chokepoint for all MCP tool schemas
(MCPTool and DeferredMCPTool) — that recursively strips before schemas reach AJV or any
LLM provider:

- $schema: meta-schema declaration, not a validation keyword. AJV rejects unknown URIs.
- nullable: OpenAPI 3.0 extension, not standard JSON Schema. AJV rejects unknown keywords
  in strict mode.

This approach keeps AJV on draft-07 with no version switch. Switching to Ajv2020 was
considered but rejected: it would introduce the symmetric failure for servers that still
emit draft-07 $schema URIs.
2026-02-21 09:42:58 +01:00
can1357 baf381e78c feat(ai): added SQLite-backed model cache with peekApiKey support
- Exported readModelCache and writeModelCache functions for SQLite-backed model cache access.
- Migrated model cache storage from per-provider JSON files to unified SQLite database (models.db).
- Renamed cachePath option to cacheDbPath in ModelManagerOptions for database-backed storage.
- Improved non-authoritative cache handling with 5-minute retry backoff instead of per-startup retries.
- Added peekApiKey method to AuthStorage for non-blocking API key retrieval during model discovery.
- Added <turn_aborted> guidance marker as synthetic user message for aborted/errored assistant messages.
2026-02-20 23:35:53 +01:00
can1357 5d32f93c0d fix(ai): improved error handling and provider robustness
- Added raw HTTP request dumps to error messages for 400 status codes.
- Implemented client-side retry for Anthropic streaming on transient errors.
- Preserved context by converting aborted assistant tool calls to text.
- Optimized model registry refresh in coding agent sessions.
2026-02-20 22:22:04 +01:00
can1357 119e07c793 refactor(ai): centralized message transformation logic
- Centralized and generalized message transformation logic.
- Implemented provider-specific tool call ID normalization.
- Ensured API compatibility by generating synthetic tool results for orphaned calls.
- Simplified Anthropic client and request parameter construction.

Fixes #120
2026-02-20 20:35:04 +01:00
can1357 c199779a05 fix(task): corrected submit_result to terminate only on success
- Fixed submit_result tool to only terminate on successful execution instead of always terminating.
- Removed deferred termination logic and simplified abort behavior to call requestAbort immediately.
- Added submitResultCalled flag tracking to properly manage tool execution state.
- Added test coverage for submit_result tool retry behavior after execution errors.
2026-02-20 20:03:37 +01:00
can1357 a15c39ae7d feat(coding-agent/task): added subprocess output finalization with submit_result validation
- Exported `finalizeSubprocessOutput()` function and `SubmitResultItem` interface for subprocess output finalization with submit_result validation.
- Added automatic reminders (up to 3) when subagent stops without calling submit_result tool, aborting with exit code 1 after final reminder.
- Extracted subprocess output finalization logic into dedicated `finalizeSubprocessOutput()` function for improved testability and reusability.
- Added comprehensive test coverage for subagent warning injection, reminder behavior, and abort handling in executor module.
2026-02-20 17:15:02 +01:00
can1357 83e914d075 fix(submit-result): corrected submit_result validation to prevent false completion flags
- Added validation to submit_result tool to ensure status field is present and correctly typed as 'success' or 'aborted'.
- Fixed executor to only mark submitResultCalled when submit_result tool succeeds or aborts, preventing false positives on validation failures.
- Added type guards and error state checks to prevent setting completion flags on malformed tool execution results.
- Added comprehensive test coverage for submit_result extraction with valid and malformed payload validation.
2026-02-20 15:23:33 +01:00
can1357 4abfa1ec91 chore: bump version to 12.15.1 2026-02-20 14:05:10 +01:00
can1357 7caef79598 docs(coding-agent): clarified system prompt to emphasize action-driven workflow and verification
- Updated system prompt guidance to emphasize action-driven workflow and verification of behavioral changes.
2026-02-20 14:01:57 +01:00
Can BölükandGitHub fca00fc8fa Merge branch 'main' into feat/cosmetic-fixes 2026-02-20 14:00:56 +01:00
can1357 8a743de7a6 feat(coding-agent): bias browser tool towards observe over screenshot 2026-02-20 12:30:47 +01:00
can1357 94ee2f99ac fix(coding-agent): use ready-signal protocol for RPC client startup
Replace flaky time-based heuristic (sleep + 500ms race) with a proper
ready-signal protocol. The RPC server now emits {"type":"ready"} on
stdout when initialized, and the client waits for that signal instead
of guessing based on timing.

Fixes CI failure where the process took longer than 600ms to reach
provider validation (due to auth discovery + model registry refresh),
causing start() to resolve even when the process was about to exit.
2026-02-20 12:28:25 +01:00
can1357 35c90ed859 chore: bump version to 12.15.0 2026-02-20 12:01:52 +01:00
can1357 b09ded42a0 feat(coding-agent): render traced intent in task progress/output 2026-02-20 11:05:19 +01:00
can1357 c8230be4a7 fix(coding-agent): fail fast when RPC startup exits early 2026-02-20 11:01:37 +01:00
can1357 55cf4de4b2 fix(ai): corrected OAuth token refresh error handling with provider details
- Improved OAuth token refresh error messages to include provider-specific error details from API responses.
- Separated rate limit and usage limit error handling in OpenAI response handler with distinct error messages and retry timing.
- Enhanced error message propagation in OAuth refresh flow to preserve original error reasons for better debugging.
- Fixed regex pattern in auth storage to use word boundaries for accurate HTTP status code matching.
2026-02-20 10:51:03 +01:00