Commit Graph

356 Commits

Author SHA1 Message Date
can1357 b0dc5f6869 fix(coding-agent): corrected TTSR violations aborting subagent runs
- Fixed TTSR violations during subagent execution aborting the entire subagent run; `#waitForPostPromptRecovery()` now awaits agent idle after TTSR/retry gates resolve, preventing `prompt()` from returning while fire-and-forget `agent.continue()` is still streaming.
- Added comprehensive test case verifying `prompt()` blocks until TTSR continuation with tool calls completes, preventing premature session disposal.
2026-02-28 05:27:45 +01:00
can1357 e4f787306e chore: rename intent field to _i 2026-02-28 05:27:44 +01:00
can1357 c0af47d841 fix(coding-agent): corrected TTSR resume gate to prevent prompt race conditions
- Implemented TTSR resume gate to ensure `prompt()` blocks until TTSR interrupt continuations complete, preventing race conditions between TTSR injections and subsequent prompts.
- Replaced `#waitForRetry()` with `#waitForPostPromptRecovery()` to handle both retry and TTSR resume gates, ensuring prompt completion waits for all post-prompt recovery operations.
- Added comprehensive test coverage for TTSR resume gate behavior under interrupt and deferred injection modes.
2026-02-28 05:27:44 +01:00
can1357 af3e559a72 feat(agent): introduced cleaner intent field naming in tool schemas
- Renamed intent field from `agent__intent` to `intent` in tool schemas for cleaner API contracts.
- Refined intent parameter guidance to require concise 2-6 word present participle sentences.
- Updated intentTracing documentation and test fixtures to reflect the new field naming convention.
2026-02-28 05:27:44 +01:00
can1357 445baf703b test(coding-agent): restructured ANSI stripping to apply once to all lines
- Refactored ANSI escape code stripping logic to apply once to all lines instead of per-line.
2026-02-27 13:34:43 +01:00
can1357 a2193a2d05 feat(coding-agent): added lenient argument validation with circular reference detection
- Added lenientArgValidation option to tools for graceful handling of argument validation errors.
- Refactored schema reference resolution to inline all $ref definitions instead of preserving them at root level.
- Added circular reference detection during schema resolution to prevent infinite loops.
- Added AJV compilation verification to catch unresolved $ref references before tool execution.
2026-02-27 13:31:18 +01:00
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 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
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 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 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 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 d0f04d4417 fix: align missing skill directory test behavior 2026-02-26 10:53:42 +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 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 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
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
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 d4469b3eb7 fix(coding-agent): updated edit rules and recovery instructions
Fixes #158.
2026-02-24 03:25:13 +01:00
can1357 289258d590 fix: minimax login must override
Fixes #156.
2026-02-24 03:01:30 +01:00
can1357 fb150a9e39 fix(coding-agent): redirect ssh stdin to avoid mux fd errors
Fixes #154.
2026-02-24 02:59:42 +01:00
can1357 86f3d1b42f test(coding-agent): add Handlebars coverage for system prompt templates
Fixes #147.
2026-02-24 02:59:12 +01:00
can1357 e116b87bed fix(model-selector): show commit role badge in /model
Fixes #157.
2026-02-24 02:58:35 +01:00
can1357 76a921f284 fix: apply non-interactive env to all bash execution paths
The non-interactive environment variables (pager, editor, and prompt
suppression) were only applied in the PTY (interactive) bash path.
The non-PTY executeBash path had no such defaults, so commands could
block on pagers or credential prompts.

- Extract NO_PAGER_ENV from bash-interactive.ts into shared
  non-interactive-env.ts module (renamed to NON_INTERACTIVE_ENV)
- Apply it in executeBash (non-PTY) with user overrides taking
  precedence
- Fix ordering in interactive PTY path so user env overrides
  the defaults (was reversed)
- Add test verifying defaults are applied alongside user env
2026-02-24 02:57:43 +01:00
can1357 8a3699bff4 refactor(prompts): harmonized prompt templates and bolded keywords
- Standardized prompt structures, replacing custom XML-like tags with Markdown.
- Implemented automatic bolding for RFC 2119 keywords (e.g., MUST, SHOULD) in prompt content.
- Simplified environment information provided to agents, removing desktop environment details.
- Updated image generation tool parameters for improved clarity and capacity.
2026-02-23 21:19:26 +01:00
can1357 a83175c94c refactor: migrated imports to unified package root and consolidated skill discovery logic
- Consolidated @oh-my-pi/pi-utils subpath imports into single package root import across 100+ files.
- Moved tryParseJson utility from local web scrapers module to @oh-my-pi/pi-utils package for centralized JSON parsing.
- Renamed loadSkillsFromDir to scanSkillsFromDir and refactored skill discovery to use fs.promises.readdir instead of glob-based approach.
- Replaced custom parseJSON with tryParseJson across discovery modules for consistent error handling.
- Removed emitCustomToolSessionEvent method and cleanupSshResources function, consolidating shutdown logic into dispose method.
- Updated glob pattern construction to use GlobBuilder with literal_separator(true) for improved path handling.
2026-02-23 20:59:17 +01:00
can1357 d3575c752d feat(async): added job delivery acknowledgment
- Introduced mechanism to suppress future delivery attempts for acknowledged jobs.
- The AwaitTool acknowledges deliveries for jobs it finished awaiting.
- Prevents unnecessary retries and clears delivery queue for handled jobs.
2026-02-23 15:00:11 +01:00
can1357 4b60af5c47 feat(text-display): implemented configurable tab width
- Added a `display.tabWidth` setting to control default tab rendering.
- Integrated `.editorconfig` resolution for c ontext-aware tab indentation.
- Updated native text processing to use the resolved tab width for calculations.
- Improved tab visualization in diffs and other UI elements for consistency.
2026-02-23 15:00:06 +01:00
julia 85219821ff feat(oauth): Enabled manual OAuth callbacks via slash command input
- Introduced OAuthManualInputManager and routed callback-server logins to await pasted redirect URLs with a visible tip.
- Extended /login slash command to submit redirect URLs, block overlapping logins, and covered manual callbacks in tests.
- Propagated onManualCodeInput through OAuth provider login helpers with a default authorization prompt.
- Resolved docs index generation paths using path.resolve relative to the script directory.
2026-02-23 06:21:32 +00:00
can1357 90f68431bf Fix local URL resolution for bash destinations 2026-02-23 01:51:54 +01:00
can1357 a96178494a refactor(coding-agent): restructured tool schemas for consistency and clarity
- Renamed `file` parameter to `path` in edit tool schemas and all test cases for consistency.
- Removed `file` property fallback from EditRenderArgs interface and path resolution methods.
- Refactored browser viewport schema to use snake_case `device_scale_factor` with explicit camelCase mapping for Puppeteer API.
- Added hashline edit rule requiring `end` tag to include closing braces/brackets when replacing blocks.
- Refactored INTENT_FIELD injection logic to conditionally reorder schema properties and update required array.
2026-02-23 00:23:53 +01:00
can1357 0e1a4ef15a feat: strict mode + simplified hashline edit operations
- Consolidated `replace` operations and removed `insert`.
- Improved line hash collision resistance for symbol-only text.
2026-02-22 23:45:01 +01:00
can1357 0d628857c1 refactor(patch): consolidated edits into replace op 2026-02-22 19:24:55 +01:00
can1357 0298a88601 feat(coding-agent): added in-memory todo phase management to ToolSession API
- Added getTodoPhases() and setTodoPhases() methods to ToolSession API for in-memory todo phase management.
- Added getLatestTodoPhasesFromEntries() export to retrieve todo phases from session history entries.
- Changed todo state management from file-based (todos.json) to in-memory session cache with automatic persistence.
- Changed todo phases to sync from session branch history during branching and rewriting operations.
- Removed file-based todo loading logic and replaced with session-based todo phase retrieval throughout codebase.
2026-02-22 19:11:24 +01:00
can1357 dfcc0958c7 fix: update abort handling / compaction tests 2026-02-22 18:44:25 +01:00
can1357 4a72bd659e feat(grep): improve grouped output and round-robin limiting 2026-02-22 18:35:19 +01:00
can1357 2574d4c977 feat(todo): add phased todo ops and task statuses 2026-02-22 18:35:06 +01:00
can1357 5f75455b91 feat: add blocking flag to bundled agents 2026-02-22 18:34:54 +01:00
can1357 cd5c9655aa refactor: renamed notes protocol to local
- Renamed the `notes://` protocol to `local://` for better clarity.
- Updated all internal references, prompts, and tool documentation.
- Migrated plan storage paths to use the new `local://` scheme.
2026-02-22 18:05:22 +01:00
can1357 4e8a3773c9 refactor(coding-agent): restructured XML tags to kebab-case format
- Renamed XML tags from underscore to kebab-case format for consistency across prompts and system messages.
- Updated context tag from `swarm_context` to `context` in render logic and test assertions.
- Consolidated conditional logic in subagent user prompt by removing duplicate assignment blocks.
- Updated system prompt documentation to reflect kebab-case naming convention for XML tags.
2026-02-22 17:57:52 +01:00