1fbc2cbd79
Follow-up to #1503. When an extension registered a flag whose name collides with a value-taking built-in — e.g. plan-mode's boolean `--plan` vs the built-in `--plan <plan-model>` selector — the extension-aware reparse still took the built-in branch. `omp --extension plan-mode --plan "review the diff"` consumed "review the diff" as the plan-model value, leaving parsed.messages empty and overwriting result.plan with the prompt text. recoverFlagValue only patched the extension flag value, not the corrupted parsed object that applyExtensionFlags returns as initialArgs. Fix at the source: parseArgs now checks the registered extension-flag set BEFORE the built-in branches, so a registered flag is parsed with the extension's semantics (boolean toggle / string value) and surfaces in unknownFlags without consuming the following token or touching the built-in field. This makes recoverFlagValue dead, so applyExtensionFlags is simplified to read resolved values straight from unknownFlags. Tests: parseArgs-level shadowing guard (boolean --plan keeps the message and leaves result.plan unset); applyExtensionFlags message/built-in-field preservation for colliding boolean (--plan) and string (--model) flags; non-colliding flag-looking-value rule retained. Verified the new guards fail without the shadowing fix.
@oh-my-pi/pi-coding-agent
Core implementation package for the omp coding agent in the oh-my-pi monorepo.
For installation, setup, provider configuration, model roles, slash commands, and full CLI reference, see:
Package-specific references:
- CHANGELOG
- MCP configuration guide
- MCP runtime lifecycle
- MCP server/tool authoring
- DEVELOPMENT
- RenderMermaid guide
Memory backends
The agent supports three mutually-exclusive memory backends, selected via the memory.backend setting (Settings → Memory tab, or ~/.omp/config.yml):
off(default) — no memory subsystem runs.local— existing rollout-summarisation pipeline; writesmemory_summary.mdand consolidated artifacts under the agent dir.hindsight— talks to a Hindsight server (Cloud or self-hosted Docker), retains transcripts every Nth user turn, recalls memories on the first turn of a session, and exposesretain,recall, andreflect.
Hindsight quickstart
- Run a Hindsight server (Cloud or
docker run -p 8888:8888 ghcr.io/vectorize-io/hindsight:latest). - Set
memory.backend = "hindsight"andhindsight.apiUrl = "http://localhost:8888"(or your Cloud URL). - Optional environment overrides (env wins over settings):
HINDSIGHT_API_URL,HINDSIGHT_API_TOKEN— connectionHINDSIGHT_BANK_ID,HINDSIGHT_DYNAMIC_BANK_ID,HINDSIGHT_AGENT_NAME— bank addressingHINDSIGHT_AUTO_RECALL,HINDSIGHT_AUTO_RETAIN,HINDSIGHT_RETAIN_MODE— lifecycleHINDSIGHT_RECALL_BUDGET,HINDSIGHT_RECALL_MAX_TOKENS— recall sizingHINDSIGHT_BANK_MISSION,HINDSIGHT_DEBUG
Switching backends mid-session is honoured on the next system-prompt rebuild and the next /memory slash command. Existing users with memories.enabled = true|false are migrated to memory.backend = "local"|"off" exactly once on first launch.