@mrclrchtr/supi-core
v1.14.1
Published
SuPi core — shared infrastructure for SuPi extensions (XML context tags, config system)
Readme
@mrclrchtr/supi-core
Shared infrastructure for SuPi extensions.
This is a pure library — it does not register any pi commands or tools. The /supi-settings command is now available through @mrclrchtr/supi-settings.
Install
pnpm add @mrclrchtr/supi-corePackage surfaces
@mrclrchtr/supi-core/api— reusable helpers for other packages and extensions@mrclrchtr/supi-core/report— shared text/report rendering helpers for TUI and plain-text summaries
What you get from the API
Config helpers
loadSupiConfig()— merged config with resolution orderdefaults <- global <- projectloadSupiConfigForScope()— load one scope at a time for settings UIswriteSupiConfig()— persist valuesremoveSupiConfigKey()— remove a key or override
Config file locations:
- global:
~/.pi/agent/supi/config.json - project:
.pi/supi/config.json
Settings helpers
registerSettings()— register an arbitrary settings sectionregisterConfigSettings()— register a config-backed settings section with scoped persistence helpersregisterSettingsCommand()— register/supi-settingsopenSettingsOverlay()— open the shared settings UI directlycreateInputSubmenu()— helper for simple text-entry submenus
The built-in settings UI supports:
- project/global scope toggle
- grouped extension sections
- searchable setting lists
Context helpers
wrapExtensionContext()— wrap injected text in SuPi's<extension-context>tagfindLastUserMessageIndex()getContextToken()getPromptContent()pruneAndReorderContextMessages()restorePromptContent()
Shared registries
- context-provider registry for
/supi-context - debug-event registry for producers that want shared debug capture
- settings registry used by
/supi-settings
Project and session helpers
- project-root detection and directory walking helpers such as
findProjectRoot()andwalkProject() - active-branch session helper:
getActiveBranchEntries() - terminal helpers such as
formatTitle(),signalWaiting(), andsignalDone()
Report helpers
clampReportWidth()— enforce a minimum readable report widthformatReportTitle()/formatSectionHeader()— shared themed headersformatDimLine()/formatKeyValueLine()— common summary rowsformatOverflowHint()— consistent preview-overflow hintswrapReportText()— ANSI-aware wrapped report blocks with optional indentation
Example
import { loadSupiConfig, registerConfigSettings, wrapExtensionContext } from "@mrclrchtr/supi-core/api";
const config = loadSupiConfig("my-extension", process.cwd(), {
enabled: true,
});
registerConfigSettings({
id: "my-extension",
label: "My Extension",
section: "my-extension",
defaults: { enabled: true },
buildItems: () => [],
persistChange: () => {},
});
const message = wrapExtensionContext("my-extension", "hello", {
file: "CLAUDE.md",
turn: 1,
});Source
src/api.ts— exported library surfacesrc/config.ts— shared config loading and writingsrc/config-settings.ts— config-backed settings registration helpersrc/settings-ui.ts— shared settings overlaysrc/report.ts— shared text/report rendering helpers
