Commit Graph
1080 Commits
Author SHA1 Message Date
can1357 e4b801590d refactor(coding-agent): tightened custom editor factory typing in interactive mode
- Updated ExtensionUIContext, InteractiveModeContext, and InteractiveMode to require editor factories to return CustomEditor instances.
- Removed the runtime compatibility guard and warning for non-CustomEditor implementations in setEditorComponent.
- Removed the test that verified rejection of non-CustomEditor factories in interactive-mode editor-component tests.
2026-05-09 07:03:37 +02:00
Can BölükandGitHub f9cc082ef2 Merge pull request #909 from quickserve-ai/fix/pi-vim-editor-component-hook
Fix ExtensionUIContext.setEditorComponent in interactive mode
2026-05-09 06:58:14 +02:00
Can BölükandGitHub abf13a8450 Merge pull request #964 from rburketaylor/fix-sync-slash-autocomplete
Fix sync slash autocomplete submission
2026-05-09 06:50:20 +02:00
can1357 c267f04c00 feat(coding-agent): added cache-based hashline stale-anchor recovery fallback
- Implemented hashline stale-anchor recovery using cached reads and a 3-way merge fallback.
- Updated hashline execution and preflight checks to retry mismatched anchors through cache recovery.
- Added file-read cache support with per-session LRU snapshots and contiguous/sparse record APIs.
- Integrated read and search tools with the shared cache to record candidate lines for recovery.
- Added tests for stale-anchor recovery flows and FileReadCache session, null, overlap, and eviction behavior.
2026-05-09 05:50:09 +02:00
can1357 7223b800b0 fix(coding-agent/tools): expanded read ranges with three-line anchor context
- Expanded read tool range calculations to include optional leading and trailing context lines around user-requested offsets and limits.
- Added shared context range expansion logic so line-slice and streaming reads return anchor-safe windows while preserving existing truncation behavior.
- Updated read-tool tests to assert boundary-offset, limit, and combined offset-limit reads now include the expected ±3 lines of context.
2026-05-09 05:22:23 +02:00
can1357 78b795ad80 feat(session-stats): added Python session-stats analyze/sync commands
- Added a Python `analyze.py` CLI with `tools`, `edits`, and `followups` session-stats subcommands.
- Added `sync.py` ingestion with `~/.omp/stats.db`, migration SQL, and incremental JSONL resume logic.
- Replaced `stats:run` in `package.json` with `stats:sync` and new `stats:edits`, `stats:tools`, and `stats:followups` scripts.
- Removed the Rust session-stats crate files (`Cargo.toml`, `main.rs`, `common.rs`, `cmd_*.rs`) and their old command logic.
- Removed `.gitignore` ignores for `scripts/session-stats/Cargo.lock` and `scripts/session-stats/edit-analysis.csv`.
- Updated eval tool guidance to show Python `asyncio.run(...)` usage.
2026-05-09 04:41:41 +02:00
can1357 05274585d8 feat(coding-agent): support legacy pi extension imports
Some extensions/plugins still import the legacy @mariozechner/pi-* package names (pi-agent-core, pi-ai, pi-coding-agent, pi-tui) instead of @oh-my-pi/pi-*. Register a single Bun.plugin on first plugin/extension load that rewrites those specifiers to the current @oh-my-pi/pi-* equivalents, including the @mariozechner/pi-coding-agent/extensibility/{extensions,hooks} sub-exports. No filesystem mutation, no symlinks, no proxy files.

Fixes #973
2026-05-09 04:02:20 +02:00
can1357 1068612495 feat(ai): generic openai-compatible model discovery for custom providers
Add an explicit openai-models-list discovery type for custom providers while keeping lm-studio as a compatible alias. Custom providers can now point baseUrl at an OpenAI-compatible /v1 endpoint, provide an api key, and auto-populate models via GET {baseUrl}/models.

Discovered models merge cleanly with user-defined models from models.yml/models.json, so YAML entries still win for display name and token limits. The provider picker now explains when discovery succeeds but returns zero models, and when the configured /models endpoint responds with 404.

Fixes #970
2026-05-09 04:02:20 +02:00
can1357 7272907c33 fix(coding-agent): /mcp test enumerates connected servers
Interactive /mcp test only consulted getMCPConfigPath("user"|"project")
configs and missed servers defined in standalone .mcp.json. /mcp reauth
already resolved through #findConfiguredServer, which includes that
fallback path. Route /mcp test through the same resolver so both
commands enumerate the same set of servers.

Fixes #956
2026-05-09 03:11:19 +02:00
can1357 4cf6d9a274 fix(coding-agent): correct cache write/read icons
The custom status line rendered cache_read with the input icon and
cache_write with the output icon — backwards relative to Anthropic's
cache_creation_input_tokens (write) / cache_read_input_tokens (read)
semantics. Swap the icon pairings in status-line/segments.ts and the
labels in status-line-segment-editor.ts to match.

Fixes #953
2026-05-09 03:11:19 +02:00
can1357 f641938344 fix(coding-agent): split commit with new files
runSplitCommit reset the index and then re-staged each split via
git.stage.hunks, but stage.hunks builds its file map from the current
diff. After the reset, newly created files were untracked again and
absent from that map, throwing "No diff found for <path>" mid-split.
Preserve the original staged diff so new files remain locatable
through every split iteration.

Fixes #966
2026-05-09 03:11:18 +02:00
can1357 9fb6a14fb8 test(coding-agent): align subagent reminder assertion with current text 2026-05-08 21:00:59 +02:00
can1357 b97f9557a8 fix(coding-agent): added git-backed workspace tree listing with fallback
- BuildWorkspaceTree now attempts to list files via `git ls-files` and builds a child index for tree rendering, avoiding native recursion when git output is available.
- `buildDirectoryTree` gained an optional `childIndex` path map, `tryListGitFiles` now applies a 3s timeout and falls back to existing native scan on failure or timeout.
- Added a workspace-tree test that verifies git-backed listing skips gitignored entries while including tracked workspace files.
2026-05-08 20:21:54 +02:00
can1357 1e96e715e8 feat(coding-agent/eval): added a static-import rewriter that converts
- Added a static-import rewriter that converts common import clauses into dynamic `await import(...)` expressions before VM wrapping.
- Provided `require` and `createRequire` globals in the JS VM context using a cwd-based resolver.
- Added executor tests confirming rewritten imports run correctly and that `require`/`createRequire` are exposed with expected behavior.
2026-05-08 06:23:16 +02:00
can1357 c4353a9bd6 test(coding-agent): align URL line selectors with new bare-number format 2026-05-08 06:19:44 +02:00
Burke T eec0449997 Fix sync slash autocomplete submission 2026-05-07 15:06:39 -03:00
can1357 9943a280db feat(coding-agent): added /loop count/duration arg parsing and budgeting
- Added optional `/loop` `count|duration` command arguments and wired `command.args` into loop handling.
- Implemented `loop-limit` parsing and runtime types/helpers for iteration and duration budget limits with validation.
- Updated interactive mode to enforce loop limits per iteration, check duration expiry, and clear budget state on disable.
- Added loop-limit parse/runtime tests and fixed `/loop` arg errors plus macOS `MallocStackLogging` environment leakage.
2026-05-07 15:40:45 +02:00
can1357 2740ef65a0 fix(tests): removing useless tests 2026-05-07 09:33:50 +02:00
can1357 bba2243a85 fix(coding-agent): moved colored diff before hidden lines indicator
- Rendered diff content before the truncation notice instead of after.
- Updated hidden lines label to show count with "+" prefix.
- Added fallback label when no lines are hidden.
2026-05-07 09:26:42 +02:00
can1357 052a8bd10c feat(coding-agent): added hashline section-diff API for external use
- Exported hashline section interfaces and helpers, including a new section-diff API for external callers.
- Refactored `computeHashlineDiff` to split input sections, propagate split errors, and delegate each section via helper.
- Added context-highlight caching and batched highlighting for unchanged lines, with `replaceTabs` fallback on unknown files.
- Fixed hashline streaming preview so completed sections stay visible when a new `@PATH` header appears mid-stream.
- Added hashline streaming tests for section persistence, malformed trailing `+ 7`, and dual sections.
2026-05-07 05:03:49 +02:00
can1357 cbfdc0a212 feat(coding-agent): added notebook-aware .ipynb edit/read path helpers
- Added `.ipynb` detection and editable-cell conversion utilities, including merge/serialize helpers in `edit/notebook`.
- Rerouted hashline, patch, and replace edit flows, plus read/write paths, through notebook-aware helpers before persistence.
- Removed the dedicated `notebook` tool, its schema flags, renderer, and built-in registration/settings checks.
- Updated notebook read behavior, docs, and tests so `.ipynb` reads return editable `# %%` cells and edits reserialize to JSON.
2026-05-07 04:16:11 +02:00
can1357 0988ad2763 fix(ai): removed streaming throttles for immediate assistant delta delivery
- Removed delta-event throttling and merge logic so AssistantMessageEventStream now enqueues assistant deltas without batching.
- Stopped debouncing preview-diff generation in ToolExecutionComponent so apply_patch argument updates trigger immediate preview refresh.
- Added tests covering immediate delta queueing and confirming streaming arg updates no longer schedule setTimeout callbacks.
2026-05-06 21:42:10 +02:00
can1357 071f15895a fix: enable ollama cloud cache metadata
fixes #937
2026-05-06 20:32:17 +02:00
can1357 f4732522cd fix(interactive-mode): cleared spinner when extension command skips model turn
- Stopped the loading animation and cleared optimistic state in `finishPendingSubmission` when no streaming session was started. Fixes #927.
2026-05-06 20:32:07 +02:00
can1357 9b7843821a fix(coding-agent): honor authHeader provider overrides
Fixes #929
2026-05-06 20:31:47 +02:00
can1357 2f871b6d23 feat(coding-agent): added loadMode and summary to AgentTool discovery
- Added optional `loadMode` and `summary` fields to `AgentTool` and related type declarations.
- Added `loadMode` and `summary` metadata to built-in tool classes for discoverable/essential behavior.
- Replaced `BUILTIN_TOOL_METADATA` with per-tool fields in discovery code paths.
- Updated `search_tool_bm25` and discovery indexing to use each tool's `summary` text.
- Updated discovery tests to validate tool `loadMode` and summary completeness.
2026-05-06 19:14:39 +02:00
can1357 a2d3821ee6 test(coding-agent): avoid global discovery mock 2026-05-06 19:01:21 +02:00
Can BölükandGitHub 60126c9318 Merge pull request #916 from HabibPro1999/feat/tool-discovery
feat(coding-agent): tools.discoveryMode with built-in tool discovery
2026-05-06 18:54:36 +02:00
Can BölükandGitHub 26829c780a Merge pull request #934 from phanthh/feat/plan-mode-enabled-setting
feat: add plan.enabled setting to toggle plan mode
2026-05-06 18:54:32 +02:00
Can BölükandGitHub dd6a9b4e54 Merge pull request #933 from Parsifa1/fix-python-gateway
fix(coding-agent): fix share lib error for python gateway
2026-05-06 18:54:28 +02:00
Can BölükandGitHub 935e5b9a29 Merge pull request #923 from hansihe/add-retry-slash-command
feat(coding-agent/slash-commands): add /retry command
2026-05-06 18:54:25 +02:00
Can BölükandGitHub 9d9f9d4dc6 Merge pull request #921 from tycronk20/codex/fix-extension-dashboard-toggle
fix extension dashboard toggles
2026-05-06 18:54:22 +02:00
can1357 094040e957 fix(coding-agent): wire builtin discovery prompt gating 2026-05-06 18:17:38 +02:00
can1357 5aea7ee9e7 Fix extension dashboard shadowed toggle state 2026-05-06 18:16:02 +02:00
can1357 f2684b7a18 fix: harden plan enabled toggle 2026-05-06 18:16:01 +02:00
can1357 fb02729b74 test(coding-agent): cover manual retry slash command 2026-05-06 18:15:48 +02:00
can1357 3f40cb0570 fix(coding-agent): isolate python gateway state 2026-05-06 18:14:00 +02:00
HabibPro1999andcan1357 9c89b2f22b fix(coding-agent): preserve BUILTIN_TOOLS factory map and legacy MCP discovery shapes
Restore BUILTIN_TOOLS to Record<string, ToolFactory> so external SDK callers can
still invoke BUILTIN_TOOLS.read(session) directly, and move per-tool discovery
metadata (loadMode, summary) into a dedicated BUILTIN_TOOL_METADATA map. All
internal callers (computeEssentialBuiltinNames, getBuiltinDiscoverableEntries,
createTools, sdk.ts initial-tool filter, agent-session built-in collection) now
read metadata through the new map.

Restore the legacy MCP discovery API on AgentSession: getDiscoverableMCPTools()
returns DiscoverableMCPTool[] with description, and getDiscoverableMCPSearchIndex()
returns the legacy DiscoverableMCPSearchIndex whose documents expose
tool.description while remaining usable by searchDiscoverableTools (summary is
populated from description so the BM25 corpus still scores correctly). Generic
discovery via getDiscoverableTools / getDiscoverableToolSearchIndex is unchanged.

Centralize discovery cache invalidation in #invalidateDiscoveryCaches and call it
from #applyActiveToolsByName, refreshMCPTools, and refreshRpcHostTools so the
generic search index can no longer return tools that have already been activated
or registry entries that have been replaced.

Restrict #collectDiscoverableBuiltinTools to entries whose
BUILTIN_TOOL_METADATA[name].loadMode === "discoverable", which keeps hidden
tools (resolve, yield, exit_plan_mode, report_finding, report_tool_issue) and
unknown extension/custom registry entries out of the discovery corpus.

Tests: add coverage for callable BUILTIN_TOOLS factories, legacy MCP description
shape on getDiscoverableMCPTools / getDiscoverableMCPSearchIndex, stale-index
invalidation on setActiveToolsByName, and hidden-tool exclusion from
getDiscoverableTools({ source: "builtin" }).
2026-05-06 18:10:54 +02:00
HabibPro1999andcan1357 2f4c44fe83 feat(coding-agent): generalized search_tool_bm25 to discover any tool source
The internal class is now SearchToolsTool but the wire name stays
"search_tool_bm25" so persisted MCP selections in user session files
continue to resolve correctly.

The BM25 corpus is now drawn from the generic DiscoverableTool list
(built-ins, MCP, extension, custom) rather than only MCP tools.
createIf fires when either tools.discoveryMode !== "off" or the
legacy mcp.discoveryMode is true.

AgentSession gains generic discovery methods (isToolDiscoveryEnabled,
getDiscoverableTools, getDiscoverableToolSearchIndex,
getSelectedDiscoveredToolNames, activateDiscoveredTools). The existing
MCP-named methods are kept as thin shims that filter by
source === "mcp" so existing callers continue to work.

Updated the tool's prompt copy to advertise discovery across all
sources rather than MCP only. Tests extended for the new shape.
2026-05-06 18:09:52 +02:00
HabibPro1999andcan1357 b7e4cb614f feat(coding-agent): added tool-discovery settings and built-in tool metadata
Added two settings:
- tools.discoveryMode ("off" | "mcp-only" | "all", default "off")
- tools.essentialOverride (string[], default empty)

Converted BUILTIN_TOOLS from Record<string, ToolFactory> to
Record<string, BuiltinEntry> with a per-tool loadMode ("essential"
or "discoverable") and an optional summary used as the BM25 corpus
entry when discovery hides the tool.

Marked read, bash, edit as essential. Marked the remaining 24 built-in
tools as discoverable with hand-written summaries. search_tool_bm25
stays essential (always loaded when discovery is on; gated separately
by isToolAllowed).

Added DEFAULT_ESSENTIAL_TOOL_NAMES, computeEssentialBuiltinNames
(reads tools.essentialOverride with a default fallback), and
getBuiltinDiscoverableEntries (used by the search tool to build the
BM25 corpus).

mcp.discoveryMode is preserved as a back-compat alias for "mcp-only".
2026-05-06 18:09:52 +02:00
phanthhandcan1357 d9f028e9b6 fix? 2026-05-06 18:09:09 +02:00
phanthhandcan1357 3ef31830e3 fix tests 2026-05-06 18:09:09 +02:00
HabibPro1999andcan1357 941683cd66 refactor(coding-agent): extracted generic tool discovery module
Moved the BM25 discovery index out of mcp/discoverable-tool-metadata.ts
into tool-discovery/tool-index.ts and generalized it to work over any
AgentTool source (built-in, MCP, extension, custom) instead of only MCP.

Added DiscoverableTool with explicit source and summary fields. Kept
the MCP-typed helpers (collectDiscoverableMCPTools, searchDiscoverable
MCPTools, etc.) as thin re-exports from the original path so existing
callers continue to work unchanged.

Tests cover the generic index, source filtering, summary fallback, and
back-compat with the legacy MCP-only API.
2026-05-06 18:08:48 +02:00
某亚瑟andcan1357 2626b09310 fix(coding-agent/web): validate SearXNG Basic auth credentials 2026-05-06 18:08:37 +02:00
can1357 f55b315165 fix(stats): simplify React version pinning fix
Fixes #938
2026-05-06 17:18:03 +02:00
can1357 f74695052a fix(coding-agent): return defined dap flush result
Fixes #942
2026-05-06 17:13:11 +02:00
can1357 d6de71942e fix(coding-agent): allow async slash handlers to return void
Fixes #943
2026-05-06 17:13:11 +02:00
can1357 d6cb0cc56e fix(coding-agent): load project config yml overrides
Fixes #946
2026-05-06 17:13:11 +02:00
can1357 d438c4e8a0 feat(coding-agent): support path-scoped model config
Fixes #947
2026-05-06 17:13:11 +02:00
can1357 4e3ff73d89 feat(coding-agent): add approve and keep context plan option
Fixes #948
2026-05-06 17:13:11 +02:00