@zkov/pi-md-viewer
Local loopback Markdown viewer tool for pi with configurable browser launchers
Package details
Install @zkov/pi-md-viewer from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@zkov/pi-md-viewer- Package
@zkov/pi-md-viewer- Version
0.1.3- Published
- Aug 30, 2026
- Downloads
- 678/mo · 27/wk
- Author
- zkov
- License
- MIT
- Types
- extension
- Size
- 93.5 KB
- Dependencies
- 4 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./dist/extensions/show-markdown.js"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-md-viewer
Local loopback Markdown viewer and pi agent tool. mdview открывает один или
несколько локальных Markdown-файлов в тёмном адаптивном browser UI. Повторный
вызов использует тот же 127.0.0.1 server и обновляет уже открытую страницу.
Runtime реализован на TypeScript/Node.js.
Требования
- Node.js 22 или новее;
- npm dependencies из
package.json; - Linux desktop system opener:
xdg-open; - macOS system opener:
open— экспериментальная поддержка до проверки на macOS; - для Playwright viewer: manual
npm install playwrightи установленный browser binary; - для Termux system opener:
termux-open-urlиз Termux:API package.
Server слушает только 127.0.0.1. Viewer не создаёт runtime HTML, PID, lock,
socket, log, cache или bytecode files. Markdown raw HTML отключён.
Быстрый старт
Из корня checkout:
npm install
npm run build
node bin/mdview.js README.md
После npm/global install можно использовать console command:
mdview README.md
Использование
mdview README.md
mdview README.md docs/design.md notes.markdown
mdview --no-open README.md
mdview --json README.md
mdview --status
mdview --close
Поддерживаются .md, .markdown, .mdown и .mkd. Paths разрешаются
относительно текущего каталога, canonical paths дедуплицируются. Неверные paths
показываются отдельно; корректная часть одного вызова всё равно открывается.
Первый вызов запускает detached Node.js server на первом свободном порту из
127.0.0.1:18765–18774. Последующие вызовы находят его по fingerprint и
protocol version, а затем добавляют документы через локальный control API.
Локальные control requests не используют proxy environment. Для изолированных
тестов range можно переопределить переменной PI_MD_VIEWER_PORT_RANGE, например
19000-19009.
Browser UI позволяет переключать, обновлять и выгружать документы, копировать code blocks и закрывать всю viewer session. Выгрузка последнего документа завершает viewer и закрывает его вкладки. Markdown перечитывается и безопасно рендерится в памяти при каждом запросе.
Viewer configuration
Standalone CLI priority:
CLI args > .md-viewer.json > user config > built-in default
Pi-extension priority:
CLI args passed by extension > pi tool input > .pi/pi-md-viewer.json > .md-viewer.json > user config > built-in default
Standalone CLI игнорирует .pi/pi-md-viewer.json. Pi extension читает
.pi/pi-md-viewer.json только в trusted project.
Built-in default:
{
"defaultViewer": "system",
"playwright": { "browser": "chromium" },
"viewers": {}
}
User config lookup:
PI_MD_VIEWER_CONFIG, если задан;- Windows:
%APPDATA%\\pi-md-viewer\\config.json; - macOS:
~/Library/Application Support/pi-md-viewer/config.json; - POSIX:
$XDG_CONFIG_HOME/pi-md-viewer/config.json; - fallback для всех платформ:
~/.config/pi-md-viewer/config.json.
Example .md-viewer.json:
{
"defaultViewer": "chrome",
"viewers": {
"chrome": {
"command": [
"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
"--new-window",
"{url}"
]
}
}
}
Viewer selection
mdview --viewer system README.md
mdview --viewer playwright README.md
mdview --viewer chrome README.md
mdview --viewer-command "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" README.md
mdview --viewer-command '["firefox","--new-window","{url}"]' README.md
--viewer accepts built-ins (system, playwright) or a named custom viewer
from config. --viewer-command is an ad-hoc command and has higher priority than
--viewer.
Custom commands are argv arrays, never shell command strings. {url} is replaced
inside argv elements. If no argv element contains the final URL, URL is appended
as the last argument.
Playwright viewer
Playwright opens the viewer in a headed browser when explicitly selected:
npm install playwright
npx playwright install chromium
mdview --viewer playwright README.md
Playwright is not installed automatically by pi-md-viewer. Install it manually
only on platforms where you explicitly want the headed Playwright viewer.
The Playwright viewer uses the real browser window viewport so the Markdown UI resizes with the window instead of being locked to Playwright's default fixed viewport. Chromium also starts maximized where the browser supports that flag.
Supported platforms: Windows, Linux desktop with DISPLAY or
WAYLAND_DISPLAY, and experimental macOS support. On Linux Wayland-only sessions, Chromium is launched with
Ozone/Wayland flags. Termux/Android is not a Playwright platform; --viewer playwright reports that the viewer is not available on that platform and does
not attempt to import Playwright. Use the default system viewer on Termux,
which opens URLs through termux-open-url.
If Playwright is selected on a supported desktop platform but the package or
browser binary is missing, the viewer returns install commands and does not
silently fall back to system.
Lifecycle
Browser page отправляет heartbeat и держит SSE connection. После закрытия
последней страницы server даёт 5 секунд на refresh/reconnect, очищает in-memory
registry и завершается. Если browser ни разу не подключился, startup instance
завершается через 30 секунд. mdview --close завершает его явно.
Pi Package Catalog
Package подготовлен для публикации в Pi Package Catalog через npm:
pi install npm:@zkov/pi-md-viewer
Catalog metadata находится в package.json:
{
"keywords": ["pi-package"],
"pi": {
"extensions": ["./dist/extensions/show-markdown.js"]
}
}
Package регистрирует tool:
show_markdown(paths: string[], open?: boolean, viewer?: string, viewerCommand?: string)
Публикационный tarball собирается из TypeScript build output и runtime assets.
Playwright не устанавливается автоматически; пользователи desktop-платформ
устанавливают его вручную, только если нужен --viewer playwright.
Подключение к pi из checkout
Установите trusted local checkout как pi package:
pi install /absolute/path/to/package
pi list
Для приватного git repository:
pi install git:https://github.com/zkov96/ai-md-shower
Example pi tool input:
{
"paths": ["README.md"],
"viewer": "playwright"
}
Relative paths разрешаются от текущего рабочего каталога pi. open: false
добавляет --no-open; иначе browser открывается только при отсутствии активной
viewer page. Tool передаёт каждый path отдельным argv element, не использует
shell и никогда не устанавливает dependencies автоматически.
Pi extensions выполняются с полными правами пользователя. Устанавливайте package только из checkout/repository, исходникам которого доверяете. Viewer ограничивает HTTP bind loopback-интерфейсом и не позволяет browser API регистрировать произвольные filesystem paths.
Удаление package из user settings:
pi remove /absolute/path/to/package
Публикация package
Проверить состав tarball:
npm run build
npm pack --dry-run
Разработка
Архитектура и пошаговый implementation plan находятся в
docs/superpowers/specs/ и docs/superpowers/plans/.