Commit Graph
4202 Commits
Author SHA1 Message Date
can1357 60e2befb35 chore: bump version to 15.1.6 2026-05-19 07:17:26 +02:00
can1357 2e40fb250b fix(coding-agent/tools): fixed internal URL selector splitting in read path resolution
- Added splitInternalUrlSel to iteratively peel internal-URL selector chunks while preserving unsupported schemes like mcp://.
- Updated ReadTool to use the internal splitter before routing so selector parsing is handled via parseSel.
- Added unit tests covering malformed selectors, namespaced skill hosts, and unchanged behavior for non-URLs or unsupported schemes.
2026-05-19 07:12:56 +02:00
Can BölükandGitHub 6f8c70db2f Merge branch 'main' into farm/07737278/qwen3-6-35b-a3b-mtp-still-not-able-to-en 2026-05-19 06:59:33 +02:00
roboomp bcf05e3ea6 revert(plan-mode): restore original prompt wording for resolve/extra.title
The schema-level fix (normalizing {} to true in open schema positions)
makes the prompts correct-by-construction: models that follow the schema
grammar now emit string values for extra.title without needing softer
prompt language. Revert the SHOULD/optional hedging to the original MUST
wording per maintainer review.

Fixes #1179
2026-05-19 04:42:16 +00:00
Can BölükandGitHub e54767b57d Merge pull request #1151 from can1357/farm/26a1d36a/omp-stats-crashes-modulenotfound-resolvi
fix(release): list worker --compile entrypoints in CI release script
2026-05-19 06:38:31 +02:00
Can BölükandGitHub aa2980c69c Merge pull request #1091 from can1357/farm/a0b5d6b7/edit-tool-hashline-mode-produces-line-du
fix(coding-agent): drop hashline anchor echo inserts
2026-05-19 06:37:01 +02:00
roboomp 14198e2ed3 fix(plan): derive plan title when resolve.extra.title is not a string
Grammar-constrained models (e.g. Qwen3.6-35B-MTP via llama.cpp) emit
`extra: { title: {} }` instead of `extra: { title: "<string>" }` because
the resolve schema declares `extra` as Record<string, unknown> with an
open value schema, leaving the model free to drop in an empty object.
The apply guard then threw 'Plan approval requires extra: { title: ... }'
on every retry, looping the model indefinitely (issue #1179).

Plan approval now uses a layered title resolution:
  1. `extra.title` if it is a non-empty string (and sanitizes to non-empty)
  2. First `# Heading` in the plan content
  3. Filename stem of `planFilePath` (`'/data/workspaces/can1357__oh-my-pi__1179/.omp-session/2026-05-19T03-59-21-254Z_019e3e63-62a6-7000-be63-371f2cd6d67d/local/PLAN.md'` → `PLAN`)
  4. Literal `plan` as a final safety net
Each candidate is run through `normalizePlanTitle`; rejected ones fall
through. Extracted as `resolvePlanTitle` in plan-mode/approved-plan.ts
so it's unit-testable.

Prompt language relaxed from MUST to SHOULD for `extra.title` in
plan-mode-active.md and plan-mode-tool-decision-reminder.md, noting the
fallback so models don't waste turns on a now-optional field.

Fixes #1179
2026-05-19 04:06:04 +00:00
can1357 7a63c5a621 chore: bump version to 15.1.5 2026-05-19 05:34:02 +02:00
can1357 c39295eaac feat(coding-agent/prompts): added oracle advisory agent prompt and embedded registration
- Added a new `oracle.md` prompt defining a read-only diagnostic, architecture, and debugging advisor.
- Imported `oracle.md` into the agent prompt loader in `packages/coding-agent/src/task/agents.ts`.
- Included `oracle.md` in `EMBEDDED_AGENT_DEFS` so the new agent is available at runtime.
2026-05-19 05:33:43 +02:00
can1357 aa8fa00c4e fix(coding-agent/tools): capped AST parse errors and preserved total counts
- Added capParseErrors in shared render utilities and updated ast_grep and ast_edit to return capped parseErrors plus parseErrorsTotal.
- Threaded the preserved totals into parse-error formatting and renderer output so labels and overflow counts report the full number of issues.
- Added an ast_grep test asserting parse errors are capped at PARSE_ERRORS_LIMIT while parseErrorsTotal retains the original count.
2026-05-19 05:30:59 +02:00
can1357 3976e31ffd chore: bump version to 15.1.4 2026-05-19 04:48:55 +02:00
can1357 226fe87345 fix(coding-agent/eval): hardened image display value coercion to strict base64
- Implemented strict base64 validation and normalization for image `displayValue` payloads in the JS runtime, supporting strict strings, `Uint8Array`, `Buffer`, `ArrayBuffer`, typed-array views, and JSON `Buffer` objects.
- Dropped unrecognized image payloads while emitting a warning and fallback text instead of forwarding malformed data.
- Added tests covering successful coercions and invalid image data rejection paths.
2026-05-19 04:36:30 +02:00
Can BölükandGitHub 072914981a Merge pull request #1169 from can1357/farm/c975bb5a/move-does-not-change-working-directory
fix(agent): update tool cwd after /move
2026-05-19 04:29:43 +02:00
roboomp ee442cedea fix(ask,plan): fix renderer crash and plan-mode exit loop for Qwen3 and similar models
- Guard renderInlineMarkdown against non-string input: partial JSON during
  streaming can leave option label fields as undefined, causing marked.lexer
  to throw 'undefined is not an object (evaluating e.replace)'. The ask tool
  renderer now silently falls back to an empty string or baseColor output.

- Sanitize normalizePlanTitle instead of hard-rejecting: models that produce
  natural-language plan titles like 'My Improvement Plan' were getting a
  ToolError on every resolve call, causing an infinite retry loop. Spaces are
  now converted to hyphens, remaining invalid chars are dropped, and only
  truly unresolvable titles (empty after sanitization, path separators) throw.

- Fix ask.md prompt example: the example showed the legacy single-question
  format (question/options/recommended at the top level) while the schema
  requires questions: [{id, question, options}]. Models that follow examples
  closely (Qwen3) generated calls that always failed schema validation.

Fixes #1176
2026-05-19 02:09:47 +00:00
Can Bölük 4024fbe7e2 fix(ai): decontaminate leaked Zod schema instances to valid JSON Schema
Rewrites JSON-roundtripped Zod 4 schema objects that leak Zod internals as
JSON Schema keywords (e.g., `type:"enum"`, `enum:{...}`) into valid
JSON Schema 2020-12. This prevents validation failures when such schemas
are used as tool input schemas (e.g., from MCP servers).

Updates `isZodSchema` to reject deserialized Zod impostors that retain
`_zod` but lose their prototype.

Wires `toJSON` methods onto TypeBox shim schemas to ensure `JSON.stringify`
produces clean JSON Schema, preventing future leaks.

Fixes #1101
2026-05-19 10:16:40 +09:00
roboomp 0c010cb0f3 fix(agent): updated tool cwd after move
Use the live session manager cwd for tool sessions so /move updates existing tools without recreating the agent session.

Fixes #1168
2026-05-18 13:33:25 +00:00
roboomp 9d0826266c fix(release): listed worker --compile entrypoints in CI release script
- Added stats sync, browser tab, and JS eval workers as explicit --compile
  entrypoints in scripts/ci-release-build-binaries.ts so Bun emits them
  into bunfs in published binaries, matching the dev build script and the
  AGENTS.md worker spawn contract.
- Switched the release-binary smoke step in .github/workflows/ci.yml to
  invoke --smoke-test (in addition to --version) so this regression
  cannot ship again.
- Added packages/coding-agent/test/issue-1150-repro.test.ts pinning the
  symmetric contract: both build scripts must list every worker entry.

Fixes #1150
2026-05-17 11:52:01 +00:00
Vilmos Nebehajandcan1357 98405e16de fix(utils): ignore unsafe dotenv entries 2026-05-17 13:43:00 +02:00
can1357 a2e276cc43 test(coding-agent): set GIT_CONFIG_* and GIT_TERMINAL_PROMPT
- Set GIT_CONFIG_* and GIT_TERMINAL_PROMPT environment variables to prevent test interference from user gitconfig, LFS filters, signing, and credential helpers.
- Enhanced git error messages to include stdout when stderr is empty, providing better diagnostics for test failures.
- Replaced symlink-resolving pathIsWithin with lexical path containment check to prevent test isolation bypass via symlinked extensions.
2026-05-17 13:36:12 +02:00
can1357 bfae4d46c3 fix(coding-agent): tracked acp tool args by session for replay
- Tracked ACP tool-call inputs per session and replayed them via `toolArgsById`/`getToolArgs` plumbing.
- Merged ACP tool execution end content from start and result events so command output replay preserves original args.
- Scoped ACP async-job draining by session `ownerId` and `agentId` with in-flight tracking and permission-gated deferred turns.
- Refactored compaction telemetry and async tests with per-test telemetry setup and asynchronous teardown resets.
2026-05-17 13:15:07 +02:00
Can BölükandGitHub 6331953dc8 Merge branch 'main' into acp-todo-plan-sync 2026-05-17 13:12:36 +02:00
Can BölükandGitHub 34ce96e42f Merge pull request #1138 from jiwangyihao/acp-autonomous-continuation
fix(coding-agent): keep ACP async continuations owned
2026-05-17 13:12:15 +02:00
Can BölükandGitHub b39c8c8460 Merge pull request #1134 from jiwangyihao/fix/acp-zed-permission-gate
fix(coding-agent): repair ACP permission flow for file edits
2026-05-17 13:12:07 +02:00
Can BölükandGitHub 1e66bf8bf3 Merge pull request #1132 from jiwangyihao/acp-tool-call-details-pr-d
ACP: keep command details stable across updates and replay
2026-05-17 13:11:59 +02:00
can1357 cab5138c5d style(coding-agent/cli): simplified formatting of reinstall warning output
- Collapsed a multi-line reinstall-warning `console.log` statement into a single line.
- Preserved the existing warning message text and only simplified its formatting.
2026-05-17 12:13:53 +02:00
Can BölükandGitHub 3038318ed9 Merge pull request #1125 from jiwangyihao/acp-initialize-startup
fix(coding-agent): defer ACP session startup
2026-05-17 11:26:27 +02:00
Can BölükandGitHub ae3a977a80 Merge pull request #1145 from can1357/farm/6901cca0/session-tree-horizontally-overflows-view
fix(tui): compress deep session tree gutters
2026-05-17 11:24:06 +02:00
Can BölükandGitHub 1fb5b897bf Merge pull request #1135 from MikeeI/fix/omp-update-install-url-path
fix(coding-agent): correct install.sh fallback URL in omp update warning
2026-05-17 11:23:12 +02:00
Can BölükandGitHub d62e7f4698 chore: update installation command in update-cli.ts 2026-05-17 11:23:02 +02:00
jiwangyihao 6e53286ce7 fix(coding-agent): scope async delivery drains 2026-05-17 15:40:04 +08:00
jiwangyihao 05e1e702dd fix(coding-agent): keep ACP async continuations owned 2026-05-17 15:30:09 +08:00
roboomp 9ede82deba fix(tui): compressed deep session tree gutters
Capped the session tree selector gutter width so deeply branched histories preserve space for the selected entry text.

Added regression coverage for heavily branched trees at wide and narrow viewport widths.

Fixes #1144
2026-05-17 06:55:59 +00:00
can1357 8f204539b8 fix(coding-agent): deferred agent_end emission until prompt unwinds
- Held wire-level agent_end until #promptInFlightCount drops to 0, preventing AgentBusyError when subscribers fire the next prompt synchronously from agent_end.
- Added #pendingAgentEndEmit field and #flushPendingAgentEnd(), called from #endInFlight and #resetInFlight.
- Added regression test covering re-entrant prompt() from agent_end listener.
2026-05-17 08:53:41 +02:00
jiwangyihao 6b22479c31 Merge branch 'acp-tool-call-details-pr-a' into acp-tool-call-details-pr-d
# Conflicts:
#	packages/coding-agent/test/acp-event-mapper.test.ts
2026-05-17 13:16:57 +08:00
jiwangyihao 1fbdb7662b fix(acp): 将 shell 和 exec 归类为执行工具 2026-05-17 13:14:40 +08:00
jiwangyihao 6137c0fbcf Merge remote-tracking branch 'origin/main' into acp-tool-call-details-pr-d 2026-05-17 11:55:31 +08:00
jiwangyihao c2d4e97cd8 Merge remote-tracking branch 'origin/main' into acp-tool-call-details-pr-a 2026-05-17 11:55:07 +08:00
jiwangyihao adde02c42c Merge remote-tracking branch 'origin/main' into acp-initialize-startup 2026-05-17 11:55:03 +08:00
jiwangyihao dbd959a6eb Merge remote-tracking branch 'origin/main' into acp-todo-plan-sync 2026-05-17 11:55:01 +08:00
Bonobo 8a7f7d75c5 fix(coding-agent): correct install.sh fallback URL in omp update warning
The fallback reinstall hint printed when omp update can't verify the new
binary pointed at https://raw.githubusercontent.com/can1357/oh-my-pi/main/install.sh,
which returns 404. The installer actually lives at scripts/install.sh
(consistent with the README install instructions).
2026-05-17 05:54:08 +02:00
jiwangyihao 9ff833e526 Merge remote-tracking branch 'origin/main' into fix/acp-zed-permission-gate 2026-05-17 11:53:44 +08:00
jiwangyihao 1e5276e2d6 Merge remote-tracking branch 'origin/main' into acp-initialize-startup
# Conflicts:
#	packages/coding-agent/src/main.ts
2026-05-17 11:53:04 +08:00
jiwangyihao ec76a04d8f Merge remote-tracking branch 'origin/main' into acp-tool-call-details-pr-d 2026-05-17 11:47:54 +08:00
jiwangyihao 0aca488267 Merge remote-tracking branch 'origin/main' into acp-todo-plan-sync 2026-05-17 11:47:14 +08:00
can1357 407f9319d5 chore: bump version to 15.1.3 2026-05-17 05:45:51 +02:00
jiwangyihao 80a3aea679 Merge remote-tracking branch 'origin/main' into acp-tool-call-details-pr-a 2026-05-17 11:45:32 +08:00
can1357 9155df2bf0 fix(coding-agent): scoped report_tool_issue enum to active built-in tools
- Built a dynamic enum from constructed built-in/hidden tools so MCP and extension tools are excluded from QA reports.
- Added allowlist guard to silently drop reports targeting non-built-in tools at runtime.
- Stripped `proxy_` prefix before allowlist check so passthrough-wrapped tools resolve correctly.
2026-05-17 05:45:25 +02:00
jiwangyihao cb7d30a437 Merge remote-tracking branch 'origin/main' into fix/acp-zed-permission-gate 2026-05-17 11:44:41 +08:00
can1357 7b20915e20 refactor(coding-agent): replaced console.warn with logger.warn calls
- Migrated warning output from raw console.warn+chalk to the shared logger utility.
- Removed unused chalk import as a result.
2026-05-17 05:31:58 +02:00
can1357 f4b1cc084b fix: guarded terminal control sequences behind isTTY checks
- Skipped thinking-line writes and clears when stdout is not a TTY.
- Prevented terminal title (set/push/pop) from emitting OSC/xterm escape sequences to piped or non-interactive output.
- Suppressed all ProcessTerminal control writes when stdout isn't a TTY.
2026-05-17 05:29:56 +02:00