Commit Graph

12419 Commits

Author SHA1 Message Date
Ethan Cawse 8be57a0ce6 fix(coding-agent): normalize native WebP replay 2026-08-12 11:27:27 -04:00
Ethan Cawse 54965de624 fix(coding-agent): guard malformed image data 2026-08-12 10:54:39 -04:00
Ethan Cawse 76b1169858 fix(coding-agent): drop stale native image replay 2026-08-12 09:16:57 -04:00
Ethan Cawse 4c71e92e3e fix(coding-agent): tolerate legacy image metadata 2026-08-12 09:13:03 -04:00
Ethan Cawse f43467f048 fix(coding-agent): preserve image normalization slots 2026-08-12 08:51:16 -04:00
Ethan Cawse 001460ee8a fix(coding-agent): normalize WebP on provider path 2026-08-12 08:36:28 -04:00
Ethan Cawse 2cd25fb4ee fix(coding-agent): normalize WebP for custom STB models 2026-08-11 23:07:21 -04:00
can1357 06aecdd51f test(read): aligned markdown preview expectation with addressable line split
- displayContent mirrors addressable rows since 21a7693dd7, so the terminal newline is no longer part of the preview text.
2026-08-12 03:48:34 +02:00
can1357 5481d8b9b0 chore: bump version to 17.2.15 2026-08-12 03:26:12 +02:00
can1357 92098d60ec chore: rewrote changelog 2026-08-12 03:25:42 +02:00
can1357 e49f8f4fb2 test(coding-agent): added shared auth storage and model registry to tests
- Added shared auth storage and model registry for concurrent and eager compaction tests.
- Replaced per-test auth storage creation and cleanup routines with shared lifecycle management.
- Removed local auth storage variables and individual cleanup hooks from test harness instances.
2026-08-12 03:25:31 +02:00
can1357 21a7693dd7 fix(hashline): prevented exposing terminal newline as an addressable row
- Added `splitAddressableFileLines` to strip terminal newlines from line addressability without removing genuine blank lines.
- Updated coding-agent read tool context parsing to use addressable file lines.
2026-08-12 03:22:01 +02:00
can1357 b6dc98eb63 test(coding-agent): updated test suites and assertions for coding agent
- Updated eager compaction and plan reference tests to track call indices and task delegation markers instead of text strings.
- Removed obsolete context message marker checks, vibe mode assertions, and prompt gating test cases.
- Simplified prewalk, workflow, and Gemini instruction test expectations across agent modules.
- Removed the system prompt personality test suite entirely.
2026-08-12 03:12:15 +02:00
can1357 63b39b7040 feat(coding-agent/utils): expanded tar extraction and validation logic
- Added archive and member size assertion limits along with path byte-length checks for PAX and GNU metadata targets.
- Added support for global PAX attributes, old-GNU name records, and signed GNU base-256 numeric header fields.
- Updated archive reading in WriteTool to accept a filesystem path instead of buffered bytes.
- Added test coverage for signed GNU base-256 values, PAX extensions, overlong path rejections, and oversized archives.
2026-08-12 03:04:17 +02:00
can1357 94a76a8f27 feat: hardened tar parser and optimize prompt handling
- Bound PAX sparse record memory overhead by caching sparse markers and specific keys.
- Update system prompt phrasing and tests for tool inventory and date displays.
2026-08-12 03:04:07 +02:00
can1357 a4d8860a6c feat: added google reasoning controls mcp stream resumption and tar support
- Added Google provider thinking configuration parameters and force-reasoning-off controls.
- Implemented MCP SSE stream resumption using Last-Event-ID and `SSEResumeError`.
- Added support for TAR old-GNU sparse extension blocks, path length checks, and archive entry overrides.
- Restricted external thinking support to specific models and added semver fallback parsing.
2026-08-12 02:32:45 +02:00
can1357 19c0afcc0d feat: implemented external thinking flags and transport reasoning controls
- Added the `--external-thinking` CLI flag alongside model capability checks to gate external thinking tool availability.
- Updated Anthropic and Google transports to honor `forceReasoningOff` for native thinking-off controls.
- Renamed the `thoughts` property and parameter to `notes` across think fixtures, tools, and tests.
- Updated system prompt instructions and test suites to verify transport-specific thinking and tool activation.
2026-08-12 02:23:17 +02:00
can1357 7e2663360f fix(read): bounded tar directory-alias resolution and resolved aliased link targets
- Capped directory-alias rewrites per lookup (ELOOP-style, 40) so a directory
  symlink targeting its own subtree (a -> a/b) throws a catchable ToolError
  instead of looping forever growing the path.
- Deferred pending tar link resolution while any directory on the target path
  is itself an unresolved link, and rewrote targets through established
  directory aliases before the exact-path lookup, so file symlinks routed
  through directory aliases materialize instead of dangling.
- Regression tests reproduce both shapes: pre-fix the aliased symlink read
  failed with 'cannot be materialized' and the self-cycle read hung.
2026-08-12 02:02:33 +02:00
can1357 5ffafec146 chore: normalized changelog 2026-08-12 01:57:33 +02:00
can1357 20732b5355 Merge PR #8273: fix(tui): hide remaining activity in hidden-tool mode (@dannyboy-ai) 2026-08-12 01:53:53 +02:00
can1357 c63b475f47 Merge PR #8260: fix(read): avoid libarchive for tar reads (@roboomp) 2026-08-12 01:53:49 +02:00
can1357 ce13985746 Merge PR #8276: fix(coding-agent): stop print mode hanging on plan.defaultOnStartup (@roboomp) 2026-08-12 01:53:44 +02:00
can1357 fe837038e9 Merge PR #8262: fix(coding-agent): copy local artifacts across handoff session boundary (@roboomp) 2026-08-12 01:53:44 +02:00
can1357 037bfc5204 Merge PR #8268: fix(mcp): send MCP-Protocol-Version header and negotiate 2025-11-25 (@roboomp) 2026-08-12 01:53:44 +02:00
can1357 c101452bb5 refactor: restructured and condensed agent prompts and system instructions
- Refactored and condensed numerous system prompts, agent instructions, and tool documentation files across packages.
- Streamlined workflow rules, formatting constraints, and execution guidelines for improved clarity and brevity.
- Updated discovery rules, recommendation criteria, and syntax standards in prompt templates.
2026-08-12 01:48:14 +02:00
can1357 bc4404203c feat(coding-agent/cleanse): updated ty parser regex and test cases
- Update the ty parser regex to correctly match file path and position before the severity and error code.
- Adjust discovery prompt documentation and test cases to match the revised ty output format.
2026-08-12 01:16:11 +02:00
can1357 93fed035f6 feat(coding-agent/cleanse): introduced discovery subagent and tui flows
- Added discovery subagent and custom checker specifications for alternative toolings across multiple languages.
- Implemented interactive TUI flows for target picking and free-form request discovery.
- Added output parsers for popular static analysis and linting tools.
- Increased default maximum subagents cap and documented the new capabilities.
2026-08-12 00:58:12 +02:00
can1357 1217ee1317 feat(coding-agent/compress): implemented semantic compression command and protocol
- Implemented the `omp compress` command with batch processing, file resolution, and concurrency support.
- Added the semantic compression protocol, session factory, and rewrite-approve evaluation loop.
- Included prompt templates, tool descriptions, and comprehensive test coverage for compression targets.
- Generalized the progress reporter module for shared use across CLI commands.
2026-08-12 00:46:08 +02:00
Daniel Anderson-Little e951d85c1b docs(coding-agent): move activity fix to unreleased 2026-08-11 18:22:20 -04:00
roboomp f30a60b797 fix(read): resolved archive-root symlink targets
Symlink targets that normalize to the archive root (current -> ., dir/up -> ..) now resolve as directory aliases to the root instead of being treated as dangling links. The lookup normalizer distinguishes an empty root target from an escaping target, and ArchiveReader treats a resolved-empty path as the root directory.

Fixes #4774
2026-08-11 22:06:41 +00:00
roboomp 1df67cc667 fix(read): honored GNU sparse PAX member names
GNU 1.0 sparse PAX entries now list under GNU.sparse.name with GNU.sparse.realsize as the displayed size, so root listings no longer expose the internal GNUSparseFile path and reads of the real name reject as sparse instead of reporting the member missing. The on-disk header size still drives offset advance and truncation.

Fixes #4774
2026-08-11 21:57:06 +00:00
Daniel Anderson-Little e4dc5c9637 refactor(coding-agent): clarify warning activity policy 2026-08-11 17:52:05 -04:00
roboomp 40ce90866e fix(read): resolved tar directory symlinks lazily
Kept directory symlinks as one alias node and rewrote requested paths through aliases in ArchiveReader instead of cloning every target descendant during indexing.

Full archive materialization now fails explicitly on directory aliases rather than expanding them without a bound.

Fixes #4774
2026-08-11 21:47:45 +00:00
roboomp e1360bbb9d fix(read): preserved symlinks and rejected partial tar indexes
Resolved safe file and directory symlinks against indexed members, while retaining dangling links as listed nodes that fail explicitly when read or materialized.

Required fully buffered tar inputs to reach an end-of-archive zero block so truncated downloads cannot expose partial listings.

Fixes #4774
2026-08-11 21:37:18 +00:00
Daniel Anderson-Little d50e47d2af fix(coding-agent): align activity visibility contract 2026-08-11 17:26:33 -04:00
Daniel Anderson-Little cbd7dc2e70 fix(coding-agent): centralize hidden activity state 2026-08-11 17:07:20 -04:00
Daniel Anderson-Little 3a4ea6a376 fix(coding-agent): hide internal tool activity blocks 2026-08-11 16:59:53 -04:00
roboomp 3ebe60d8b3 fix(coding-agent): stopped print mode hanging on plan.defaultOnStartup
Headless `omp -p` armed an interactive plan-review flow whenever
plan.defaultOnStartup was set. Its only headless exit was a watcher that
fired on a successful `xd://propose` execute-dispatch, so any turn where
the model did not emit exactly that dispatch stranded until --max-time,
printing nothing. --plan-yolo could not rescue it because print mode's
arming clashed with the prewalk coordinator's plan-yolo handoff.

Print mode no longer honors the startup default: headless has no surface
to review, approve, or exit a plan. It writes a one-line stderr note and
runs the prompt normally. --plan-yolo remains the deterministic headless
plan flow and no longer clashes.

Fixes #8272
2026-08-11 19:39:40 +00:00
can1357 052095e156 test(coding-agent): fixed think-tool CI failures in gallery and activation tests
- Added a curated think gallery fixture; the generic fallback carries no
  thoughts field, so the streaming state rendered zero lines.
- Seeded the shared test registry with a runtime openai key: the prompt
  preflight validates through the registry, not the per-request getApiKey
  override, so keyless CI runners threw before reaching the mock server.
- Expected reasoning effort "none" — the only disable level the Responses
  wire accepts; "off" is not a wire value.
2026-08-11 21:16:13 +02:00
can1357 eb5e167abb test(coding-agent): included think tool in HIDDEN_TOOLS expectation 2026-08-11 21:01:02 +02:00
can1357 e5ebb2aee0 chore: bump version to 17.2.14 2026-08-11 20:43:02 +02:00
can1357 10fd42289c feat: introduced external thinking support and private scratchpad think tool
- Added support for external thinking and forced reasoning disablement across AI provider options and request transformers.
- Implemented the private scratchpad think tool along with its renderer, system prompt rules, and schema configuration.
- Updated agent session management and SDK tools to support dynamic runtime activation of the think tool via the externalThinking setting.
- Added comprehensive unit tests covering reasoning fallbacks, tool activation, and rendering behavior.
2026-08-11 20:39:57 +02:00
roboomp eaa5f46d32 fix(mcp): resumed interrupted HTTP response streams
Implemented 2025-11-25 Streamable HTTP polling semantics for POST SSE responses: retain event IDs and retry intervals, wait as instructed, and reconnect with GET plus Last-Event-ID until the originating JSON-RPC response arrives.

Extended the shared SSE parser to expose valid id/retry fields and control-only events so reconnecting consumers do not need to reparse raw lines.

Fixes #8264
2026-08-11 18:21:12 +00:00
roboomp b65ac59653 fix(mcp): reserve MCP-Protocol-Version from configured headers
The header is transport-owned. Strip any user-configured MCP-Protocol-Version so it cannot leak onto the initialize request before negotiation, nor override the negotiated value afterwards.

Fixes #8264
2026-08-11 18:10:59 +00:00
roboomp 004821342c fix(mcp): defer MCP-Protocol-Version header until after negotiation
A server supporting only an older MCP revision may reject an initialize request that already carries a newer MCP-Protocol-Version header. The spec requires the header only on requests after initialize. Hold it back until the initialize response is negotiated (setProtocolVersion), then echo the negotiated value.

Fixes #8264
2026-08-11 18:04:39 +00:00
roboomp 10bce6900b fix(mcp): send MCP-Protocol-Version header and negotiate 2025-11-25
The Streamable HTTP transport never emitted the MCP-Protocol-Version header and the client pinned the stale 2025-03-26 revision. Spec-current servers (e.g. AWS Bedrock AgentCore Gateway with an outbound per-user OAuth target) discard the negotiated version and deny every tools/call with a generic internal error.

Bump the negotiated version to the current stable 2025-11-25 (MCP_PROTOCOL_VERSION) and echo the negotiated version in the MCP-Protocol-Version header at the transport's single #fetch choke point, so it rides GET/POST/DELETE requests uniformly.

Fixes #8264
2026-08-11 17:57:41 +00:00
roboomp dbc199d2db fix(coding-agent): copy local artifacts across handoff session boundary
/handoff mints a fresh session via newSession(), producing a new
artifactsDir and an empty local/ root. The handoff document routinely
references plans and scratch files under '/data/workspaces/can1357__oh-my-pi__8261/.omp-session/2026-08-11T16-39-09-489Z_019ff1b1-31b1-7000-81f5-c540f4ebf43d/local/,' so every reference
became a dangling pointer in the new session. The plan approve-and-execute
path already copies artifacts across the boundary; handoff did not.

Extracted the plan-approve copy helper into a shared copyLocalArtifacts()
in local-protocol.ts and invoke it across the handoff session switch
(best-effort, since the switch is already committed).

Fixes #8261
2026-08-11 16:45:15 +00:00
roboomp 861d5f5909 fix(read): preserved tar hard-link members
Resolved hard-link targets after indexing so forward links and chains reuse the referenced member's storage and size. Missing, directory, or cyclic targets now surface catchable archive errors instead of silently dropping paths.

Fixes #4774
2026-08-11 16:11:16 +00:00
roboomp b49e41fc7a fix(read): rejected non-tar gzip payloads while indexing
A gzip stream whose decompressed payload never presents a complete tar header or terminating zero block (a plain .txt.gz, or a tar truncated before the first header) now raises a catchable ToolError instead of returning an empty index rendered as '(empty archive directory)'. fetch falls back to binary rendering.

Fixes #4774
2026-08-11 16:02:00 +00:00
roboomp 1588f79ecf fix(read): rejected truncated tar members while indexing
A member header declaring more bytes than remain in the buffer now throws a ToolError during indexing instead of being listed as a valid entry that only fails on read.

Fixes #4774
2026-08-11 15:52:07 +00:00