119 lines
10 KiB
Markdown
119 lines
10 KiB
Markdown
---
|
|
status: resolved
|
|
claimed-by: "019fba91-eabf-76ae-b086-a37ac061d6e8"
|
|
claimed-at: "2026-08-01T00:30:00-04:00"
|
|
parent: "[[082-pi-ui-bottom-anchored-editor-research]]"
|
|
blocked-by: []
|
|
resolved-at: "2026-08-01T00:36:00-04:00"
|
|
tags:
|
|
- ticket/research
|
|
---
|
|
|
|
# Existing Pi extension layout survey
|
|
|
|
## Question
|
|
|
|
Do existing Pi extensions or public examples already implement bottom-anchored prompt/editor layout, above-editor autocomplete overlays, footer replacement, or compact prompt-area status patterns that should change the Pi UI customization plan?
|
|
|
|
## Scope
|
|
|
|
Survey the bundled Pi examples, known local research clones, and public repositories discoverable without authenticated code search.
|
|
Distinguish official extension APIs from private implementation hooks.
|
|
Record whether any candidate is durable enough for dotfiles-managed use or only useful as a throwaway spike.
|
|
|
|
## Findings
|
|
|
|
The most relevant public extension is `nicobailon/pi-powerline-footer`.
|
|
It implements a polished powerline-style status surface, replaces the footer with an empty renderer, uses above/below editor widgets for primary and secondary rows, and replaces the editor component with a custom `BashModeEditor` that wraps the default editor behavior.
|
|
It has configurable placement for the primary row, but placement is still limited to Pi's widget slots above or below the editor.
|
|
Sources: `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/README.md`; `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/index.ts`.
|
|
|
|
`pi-powerline-footer` is useful prior art for our compact status design.
|
|
It covers model, thinking, path, git, context usage, token/cost information, custom status items, welcome overlays, and editor rendering tweaks.
|
|
It does not implement a bottom-docked editor slot through extension APIs.
|
|
Its README explicitly describes that Pi owns native layout and the extension supplies widgets and custom editor integrations.
|
|
Sources: `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/README.md`; `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/index.ts`.
|
|
|
|
`pi-powerline-footer` includes a custom editor that modifies prompt rendering and shell-mode behavior, but not autocomplete placement above the editor.
|
|
Its `BashModeEditor.render()` calls `super.render(width)` and then injects ghost-text suggestions into the editor content line for shell completion.
|
|
It also wraps Pi's autocomplete provider to compose shell-aware suggestions with Pi's default provider, but it does not move Pi's dropdown to an overlay above the prompt.
|
|
Sources: `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/bash-mode/editor.ts`; `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/editor-composition.ts`; `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/index.ts`.
|
|
|
|
The most relevant non-extension prior art is `0x-rya/pi-local-mods`.
|
|
Its README says the useful changes are intentionally not Pi extensions because they patch internals not exposed to extensions, including transcript scrolling and selection.
|
|
Its patch introduces `FixedBottomScrollLayout`, separates scroll children from pinned children, replaces Pi's normal child stack with that fixed layout, and pins pending messages, terminal logs, status, widgets, editor, below-editor widgets, and footer while the header/resources/chat area scrolls above them.
|
|
That is structurally close to the desired bottom-anchored editor model.
|
|
Sources: `/tmp/pi-existing-extension-survey/repos/0x-rya__pi-local-mods/README.md`; `/tmp/pi-existing-extension-survey/repos/0x-rya__pi-local-mods/scripts/apply.py`.
|
|
|
|
`pi-local-mods` also patches Pi's custom editor internals to support border providers.
|
|
It adds `setTopBorderProvider()` and `setBottomBorderProvider()`, frames the editor with rounded borders, and lets interactive mode put main footer/status content into editor borders.
|
|
This is directly relevant to the idea of making status visually attached to the prompt without spending separate rows, but it confirms the mechanism is currently a private Pi patch rather than a supported extension API.
|
|
Source: `/tmp/pi-existing-extension-survey/repos/0x-rya__pi-local-mods/scripts/apply.py`.
|
|
|
|
Several public extensions implement footer replacement or status surfaces, but they stay inside the documented extension API.
|
|
Examples include `@fgladisch/pi-footer`, `luongnv89/statusline-pi`, and `tomsej/pi-ext`'s custom footer.
|
|
They use `ctx.ui.setFooter()`, `ctx.ui.setWidget()`, or `ctx.ui.setEditorComponent()` for prompt prefixes and compact lines, but none of the inspected implementations create a true bottom-docked editor layout.
|
|
Sources: `/tmp/pi-existing-extension-survey/repos/fgladisch__pi-extensions/packages/pi-footer/extensions/index.ts`; `/tmp/pi-existing-extension-survey/repos/fgladisch__pi-extensions/packages/pi-footer/README.md`; `/tmp/pi-existing-extension-survey/repos/luongnv89__pi-extensions/extensions/statusline-pi/src/index.ts`; `/tmp/pi-existing-extension-survey/repos/tomsej__pi-ext/extensions/custom-footer/custom-footer.ts`.
|
|
|
|
Several public extensions use overlays, including floating terminals and git-change viewers.
|
|
They demonstrate that overlays can be centered or otherwise positioned for temporary UI, and `nicobailon/pi-interactive-shell` exposes configurable overlay anchors.
|
|
They do not replace the main prompt with a durable bottom overlay, and they do not solve autocomplete placement for the built-in editor.
|
|
Sources: `/tmp/pi-existing-extension-survey/repos/joyanhui__pi-extension/pi-ext-float-term/float-term.ts`; `/tmp/pi-existing-extension-survey/repos/joyanhui__pi-extension/pi-ext-git-changes/git-changes.ts`; `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-interactive-shell/config.ts`.
|
|
|
|
Several custom editor extensions alter editor rendering, but they do not change the editor slot position.
|
|
`@fgladisch/pi-footer` adds a prompt prefix by wrapping `CustomEditor.render()`.
|
|
`joyanhui/pi-ext-bar-cursor` strips the fake block cursor so the hardware bar cursor can show.
|
|
These are useful examples of safe-ish render wrappers, but they still live inside Pi's existing editor container.
|
|
Sources: `/tmp/pi-existing-extension-survey/repos/fgladisch__pi-extensions/packages/pi-footer/extensions/index.ts`; `/tmp/pi-existing-extension-survey/repos/joyanhui__pi-extension/pi-ext-bar-cursor/bar-cursor.ts`.
|
|
|
|
Unauthenticated GitHub repository search and npm metadata found many Pi extension repositories, but the layout-related ones above were the relevant hits for this question.
|
|
GitHub code search requires authentication, so the survey used repository search, cloned likely candidates, bundled Pi examples, and local research clones.
|
|
Sources: `/tmp/pi-existing-extension-survey/github-repos-earendil-pi-coding-agent.json`; `/tmp/pi-existing-extension-survey/github-repos-pi-coding-agent.json`; `/tmp/pi-existing-extension-survey/npm-earendil-pi-coding-agent.json`; `/tmp/pi-existing-extension-survey/repos/BubblePtr__awesome-pi/README.en.md`.
|
|
|
|
## Answer
|
|
|
|
Existing extensions do not appear to provide a durable extension-only solution for a bottom-anchored prompt editor with above-editor autocomplete overlay.
|
|
They do provide two useful pieces of prior art:
|
|
|
|
1. `pi-powerline-footer` shows how far a polished compact prompt/status surface can go with public extension APIs.
|
|
2. `pi-local-mods` shows that the desired bottom-pinned layout is feasible as a Pi internals patch, specifically by replacing the top-flow child stack with a fixed-bottom scroll layout and by adding editor border status providers.
|
|
|
|
This changes the plan from “maybe patch Pi” to “there is already public prior art for exactly the kind of Pi patch needed.”
|
|
The permanent design should avoid fake spacer widgets and should either:
|
|
|
|
- keep the compact status as an extension-only improvement while accepting current Pi layout limits, or
|
|
- build a local/upstream Pi patch inspired by `FixedBottomScrollLayout` and editor border providers.
|
|
|
|
## Implications
|
|
|
|
For an extension-only implementation, reuse the `pi-powerline-footer` pattern rather than inventing all layout machinery from scratch.
|
|
That means widgets, hidden footer, custom editor rendering, and careful autocomplete-provider composition if needed.
|
|
|
|
For the preferred bottom-anchored behavior, write a separate Pi layout patch/spec.
|
|
The patch should split scrollable transcript content from pinned input-area content and should treat autocomplete as part of the editor/input area rather than as a normal line appended below the prompt.
|
|
|
|
## Limitations
|
|
|
|
GitHub code search was unavailable without authentication, so this was not an exhaustive public-code search.
|
|
The survey cloned and inspected likely repositories from unauthenticated repository search, npm metadata, an awesome list, bundled Pi examples, and existing local research clones.
|
|
|
|
No private or unlisted extensions were inspected.
|
|
|
|
## Citations
|
|
|
|
- `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/README.md`.
|
|
- `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/index.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/bash-mode/editor.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-powerline-footer/editor-composition.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/0x-rya__pi-local-mods/README.md`.
|
|
- `/tmp/pi-existing-extension-survey/repos/0x-rya__pi-local-mods/scripts/apply.py`.
|
|
- `/tmp/pi-existing-extension-survey/repos/fgladisch__pi-extensions/packages/pi-footer/README.md`.
|
|
- `/tmp/pi-existing-extension-survey/repos/fgladisch__pi-extensions/packages/pi-footer/extensions/index.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/luongnv89__pi-extensions/extensions/statusline-pi/src/index.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/tomsej__pi-ext/extensions/custom-footer/custom-footer.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/joyanhui__pi-extension/pi-ext-bar-cursor/bar-cursor.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/joyanhui__pi-extension/pi-ext-float-term/float-term.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/joyanhui__pi-extension/pi-ext-git-changes/git-changes.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/nicobailon__pi-interactive-shell/config.ts`.
|
|
- `/tmp/pi-existing-extension-survey/repos/BubblePtr__awesome-pi/README.en.md`.
|