Commit Graph

1386 Commits

Author SHA1 Message Date
can1357 316722397a Merge pull request #1896: fix(coding-agent): respect user shell for ! shortcuts 2026-06-10 09:52:28 +02:00
can1357 9f7e8551ee fix(coding-agent): guard RPC subagent registry against stale and cross-owner updates 2026-06-10 09:51:47 +02:00
can1357 c67dd4c034 fix(coding-agent): claim MCP OAuth manual input atomically and clear only the owned claim 2026-06-10 09:51:47 +02:00
can1357 280f8be352 fix(coding-agent): cache status-line branch by cwd instead of re-resolving HEAD per render 2026-06-10 09:51:46 +02:00
can1357 da9088964c fix(acp): drain extension prompts before end_turn and fail queued prompts on closed sessions 2026-06-10 09:51:46 +02:00
can1357 ffe3b6afd4 fix(coding-agent): rehome TITLE_SYSTEM.md discovery and reload it on cwd change 2026-06-10 09:51:46 +02:00
can1357 1696047d8e fix(coding-agent): reserve all builtin slash-command names against extension commands 2026-06-10 09:51:46 +02:00
handlecusion 8b9c4fa1b9 fix(coding-agent): respect user shell for shortcuts 2026-06-10 16:07:59 +09:00
can1357 7205289ece Merge pull request #2201: feat(coding-agent): add title system prompt override 2026-06-10 08:32:10 +02:00
can1357 719875ac9a Merge pull request #2163: fix(tui): omit hidden thinking placeholder 2026-06-10 08:32:10 +02:00
danzaio d16b49efdf fix(tui): omit hidden thinking placeholder 2026-06-10 08:31:35 +02:00
Adryel Dearo 10a7bd0b6d refactor(interactive-mode): use MCPManager type import in signatures 2026-06-10 08:31:32 +02:00
Adryel Dearo ecbc2a3c15 feat(coding-agent): add configurable title system prompt for sessions
- add discovery of `TITLE_SYSTEM.md` and pass it through interactive startup context
- route custom title prompts to online and local tiny title generators via protocol
- update session-title docs and changelog with override behavior
- add tests for prompt discovery, forwarding, and fallback to bundled title prompts
2026-06-10 08:31:32 +02:00
can1357 37a5e8a53e Merge pull request #2214: feat: add RPC subagent subscriptions 2026-06-10 08:27:00 +02:00
can1357 1c69483241 Merge pull request #2186: fix(acp): auto-cancel in-flight turn when new prompt arrives mid-flight 2026-06-10 08:26:59 +02:00
can1357 7916c7b909 Merge pull request #2164: fix(plan): skip confirm for empty plan exit 2026-06-10 08:26:58 +02:00
can1357 9fae4fb64d Merge pull request #2160: fix(mcp): accept manual OAuth redirect input 2026-06-10 08:26:58 +02:00
can1357 4c71da5ebc Merge pull request #2094: fix(coding-agent): cache status line context usage 2026-06-10 08:26:57 +02:00
can1357 26c6326f52 Merge pull request #2052: fix(acp): emit extension-registered commands in available_commands_update 2026-06-10 08:26:57 +02:00
can1357 af01abef32 Merge pull request #2019: feat(coding-agent): add provider setup command 2026-06-10 08:26:57 +02:00
can1357 5187dc1a7b fix(acp): skip colon-namespaced extension commands shadowed by builtins
parseSlashCommand treats ':' as a name/args separator, so an extension
command like 'model:foo' was advertised in available_commands_update but
dispatched to the '/model' builtin. Filter such names via
isAcpBuiltinShadowedName, and fix the FakeAgentSession prompt stubs in
acp-agent.test.ts to return true now that AgentSession.prompt() reports
whether the agent was invoked (6 tests were failing against the new
early-finish path).

Addresses review feedback on #2052.
2026-06-10 08:26:08 +02:00
Theo Mathieu 416c9947bd fix(acp): finish prompt turn when extension/custom command is handled locally
Extension commands (e.g. /sonnet) and TypeScript custom commands that
consume the input without calling the LLM return early from
session.prompt() with no agent turn. In ACP mode this left the pending
prompt promise unresolved, hanging the client forever.

Change session.prompt() to return Promise<boolean>: true when the LLM
was invoked, false when the command was fully handled locally.
#runPromptOrCommand calls #finishPrompt immediately on a false return so
the ACP turn completes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 08:26:07 +02:00
Theo Mathieu b0063a08f0 fix(acp): include builtin aliases in reserved-command filter for extensions
ACP_BUILTIN_SLASH_COMMANDS only carries primary names; the reserved set
passed to getRegisteredCommands was therefore missing aliases like
"models" (/model) and "force:" (/force). An extension registering one
of these aliases would appear in the palette but the builtin would win
at dispatch time (lookupBuiltinSlashCommand searches aliases too).

Export ACP_BUILTIN_RESERVED_NAMES from acp-builtins — the union of all
primary names and aliases for ACP-surfaced builtins — and use it as the
reserved set. Widen getRegisteredCommands parameter to ReadonlySet since
it only calls .has().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 08:26:07 +02:00
Theo Mathieu d8db20cb0d fix(acp): advertise extension commands before custom TS commands
Dispatch in AgentSession runs #tryExecuteExtensionCommand before
#tryExecuteCustomCommand, so the palette must reflect the same order.
Moving the extension-runner block before session.customCommands ensures
that on a name collision the advertised command matches what will
actually execute.

Update the test to assert the extension description wins over the
colliding custom TS description.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 08:26:07 +02:00
Theo Mathieu 0d67407773 fix(acp): address review comments on extension-commands PR
- Update ordering comment in #buildAvailableCommands to document the
  extension tier and explain why skills/custom TS commands intentionally
  shadow extension commands (unlike interactive mode)
- Add CHANGELOG entry under [Unreleased]
- Add regression test: verifies extension commands surface in
  available_commands_update and that a builtin-colliding extension
  command is excluded via the reserved-set, with no duplicates

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 08:26:07 +02:00
Theo Mathieu f6ff54bb75 fix(acp): emit extension-registered commands in available_commands_update
`#buildAvailableCommands` was omitting commands registered by extensions
via `extensionRunner.getRegisteredCommands()`. ACP clients (e.g. Zed)
never saw these in the `available_commands_update` notification, so they
couldn't forward the corresponding slash commands to the agent.

Mirrors the interactive-mode pattern: pass ACP builtin names as the
reserved set so extensions cannot shadow core commands.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 08:26:07 +02:00
danzaio 87df755cdc fix(plan): check slug drafts before exit 2026-06-10 08:26:03 +02:00
danzaio 929e0a82c0 fix(plan): skip confirm for empty plan exit 2026-06-10 08:26:03 +02:00
can1357 bbd93437ca fix(acp): close session when implicit cancel cleanup times out
The implicit-cancel overlap path dropped the cleanup promise, so an
abort() that hung past the cleanup timeout left the managed session
registered with a still-streaming AgentSession — the explicit cancel()
path closes it in that case. Mirror that handling and cover it with a
regression test.

Addresses review feedback on #2186.
2026-06-10 08:26:01 +02:00
danzaio 7db4d143e1 fix(mcp): wire manual OAuth abort signal 2026-06-10 08:26:01 +02:00
Matt Anger 5f084acbdc feat(coding-agent): watch reftable directory instead of tables.list to survive atomic renames 2026-06-10 08:26:01 +02:00
Kormákur 61d6b351fc fix: handle missing rpc subagent transcripts 2026-06-10 08:26:01 +02:00
Kormákur 6f75b34efd fix: address rpc subagent review feedback 2026-06-10 08:26:01 +02:00
Theo Mathieu 094c6e5fdc fix(acp): auto-cancel in-flight turn when new prompt arrives mid-flight
When the user presses Stop in Zed and immediately types a new message,
the new session/prompt RPC can arrive before (or without) a preceding
session/cancel notification. The previous guard threw an error in that
case, leaving the session stuck and blocking further interaction.

Replace the throw with an implicit cancel: call #beginCancelCleanup on
the unsettled turn so it resolves with stopReason:"cancelled", then let
#queuePrompt serialize the new prompt behind the abort cleanup as it
already does when session/cancel is called explicitly. #beginCancelCleanup
is idempotent so a concurrent explicit cancel notification is a no-op.

Updated the test to assert the new contract: overlapping prompt
auto-cancels the first turn and the second is processed normally.
2026-06-10 08:26:01 +02:00
Kormákur 23cce69f4b Add RPC subagent subscriptions 2026-06-10 08:26:01 +02:00
Matt Anger d26bb4e331 feat(coding-agent): watch linked worktree reftable stack for HEAD switches 2026-06-10 08:26:01 +02:00
danzaio 314cea633a fix(mcp): preserve existing manual login waits 2026-06-10 08:26:00 +02:00
Matt Anger 2e31abcc16 feat(coding-agent): address PR comments and improve reftable support 2026-06-10 08:26:00 +02:00
ben af98154b9e fix(coding-agent): cache status line context usage 2026-06-10 08:26:00 +02:00
handlecusion 8b6c1f97af fix: address setup command review 2026-06-10 08:26:00 +02:00
danzaio 8e6f6c13e5 fix(mcp): cancel manual OAuth waits on timeout 2026-06-10 08:26:00 +02:00
handlecusion f61cd7aad0 feat(coding-agent): add provider setup command 2026-06-10 08:26:00 +02:00
danzaio 3b47ee93e9 fix(mcp): accept manual OAuth redirect input 2026-06-10 08:26:00 +02:00
can1357 61a57c1d21 fix(coding-agent): stabilized streaming TUI rendering with readonly rows and memoized reuse
- Changed render methods to return component-owned `readonly string[]` rows.
- Added `RenderStablePrefix` row reuse to avoid repainting unchanged streaming content.
- Stabilized streaming gutters and spinner placement to reduce preview jitter and flicker.
- Finalized commit-safe transcript behavior for tool-call previews and added streaming edge-case tests.
2026-06-10 07:26:02 +02:00
can1357 53b8950072 fix(coding-agent/edit): stopped stacking adjacent diff gap markers
- Separated non-contiguous diff regions with a single blank gap row, normalized after block-context insertion.
- Rendered gap rows as one dim ellipsis in the TUI and HTML export.
- Applied the same blank-separator dedupe and edge-trimming to hashline's compact diff preview.
2026-06-10 07:23:29 +02:00
can1357 b0fec42218 feat(coding-agent): surfaced lazy LSP servers as available in welcome screen
- Added "available" status so recognized servers show under lazy mode without warmup.
- Rendered full welcome box as pre-TUI splash with fixed slot heights to avoid layout shift.
- Reported lazy servers as available in /status instead of omitting the section.
2026-06-10 07:22:22 +02:00
can1357 037aa6b345 fix(coding-agent): routed non-bracketed paste payloads to hook components
- Added a `pasteText` handler to `HookEditorComponent` to forward non-bracketed OSC 5522 paste text into its inner editor.
- Added a `pasteText` handler to `HookInputComponent` that forwards text to the input and resets the interaction timeout.
- Extended hook editor and timeout tests to cover enhanced-paste payload absorption and behavior retention.
2026-06-10 04:25:08 +02:00
can1357 a707e2daf9 feat(tui-components): added searchable filtering and focus retention for settings lists
- Added type-to-search filtering across setting labels, IDs, values, and descriptions.
- Preserved selected item focus by ID when replacing settings during an active filter.
- Displayed search status, empty-filter hints, and no-match messaging while searching.
- Updated Escape handling to clear an active query before cancelling the list.
- Applied selection and navigation to filtered items to keep behavior consistent under search.
2026-06-10 04:24:54 +02:00
can1357 b22694e406 Merge remote-tracking branch 'origin/farm/81cee2f1/project-tagged-mental-model-seeds' 2026-06-10 04:07:07 +02:00
can1357 1b9d9d0851 refactor(catalog)!: split model catalog from pi-ai
Move bundled models, model cache/manager, thinking metadata, effort helpers,
provider descriptors/discovery, wire constants, and model identity utilities
into the new @oh-my-pi/pi-catalog package.

Update pi-ai to keep provider runtime/auth concerns, move catalog provider
metadata into CATALOG_PROVIDERS, and migrate coding-agent, agent, stats, docs,
and tests to import catalog values from pi-catalog.

Split coding-agent model registry helpers into discovery, roles, and models
config modules while preserving registry orchestration.

BREAKING CHANGE: @oh-my-pi/pi-ai no longer exports catalog subpaths such as
/models, /model-cache, /model-manager, /model-thinking, /effort,
/provider-models*, discovery helpers, and provider wire constants; use the
matching @oh-my-pi/pi-catalog subpaths instead.
2026-06-10 04:06:57 +02:00