@DylanBohlender's follow-up caught that MCPAuthorizationLinkPrompt.render still ignored `width` and emitted `Copy URL: <full URL>` as one composed row. On any viewport narrower than the row (~272 columns for a Linear-shaped authorize URL), TUI#prepareLine's `truncateToWidth(..., Ellipsis.Omit)` silently clipped the trailing `code_challenge_method=S256` — the exact #4418 fingerprint reappearing inside the remote-safety fix. A remote user on a narrow terminal copying the rendered line would lose the S256 method again; the local shortcut below cannot help them (localhost isn't reachable), and the OSC 52 clipboard staged full URL isn't visible in their local browser. Component-level fix: honor `width` in render. - New `wrapUrlRows(label, url, width)` helper. - When `label + " " + url` fits in `width`, emit one inline row. - Otherwise emit the label on its own row and slice the URL into chunks of `width - indent`, each on its own row. - Floors the effective width at 16 columns so degenerately narrow terminals still emit every character; browsers strip whitespace when a multi-row selection is pasted into the address bar, so the reassembled URL is byte-identical. - `render(width)` now uses the helper for both the primary `Copy URL:` row and the additive `Local shortcut (this machine only):` row. Regression tests in `packages/coding-agent/test/modes/controllers/mcp-authorization-link.test.ts`: - Wide viewport (1000 cols): inline `Copy URL: <url>` layout preserved. - Narrow viewport (80 cols) + Linear-shaped URL: every row's visible width ≤ 80, and the chunks reassemble byte-for-byte to the URL — explicitly asserting the trailing `code_challenge_method=S256` survives. - Launch shortcut also wrapped at 80 cols; every row fits. - Degenerate viewport (4 cols): URL still reconstructs exactly; the 16-col floor governs chunk width. - Full URL remains the primary target even when a launch URL is present, and the shortcut row is omitted when launchUrl is absent or identical to the full URL.
@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:
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.