@mrclrchtr/supi-core
v4.6.0
Published
Shared settings, configuration, reporting, and session infrastructure
Maintainers
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
registerDeclarativeSettings(pi, options)— contribute a config-backed declarative settings section with source-aware scoped persistenceregisterSettingsCommand(pi)— register/supi-settings(used by@mrclrchtr/supi-settings)openSettingsOverlay(pi, ctx)— open the shared settings UI directlycreateInputSubmenu()— helper for simple text-entry submenuscreateModelPickerSubmenu()— helper for scoped model selection submenus, with optional host-owned choices anddisabledcontrol
The built-in settings UI supports:
- project/global scope toggle
- source badges for project, global, and default values
- Inherit/Reset actions that delete scoped config keys
- 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 type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import { loadSupiConfig, registerDeclarativeSettings, wrapExtensionContext } from "@mrclrchtr/supi-core/api";
export default function myExtension(pi: ExtensionAPI) {
const defaults = { enabled: true };
const config = loadSupiConfig("my-extension", process.cwd(), defaults);
registerDeclarativeSettings(pi, {
id: "my-extension",
label: "My Extension",
section: "my-extension",
defaults,
fields: [
{
kind: "boolean" as const,
key: "enabled",
label: "Enabled",
},
],
});
const message = wrapExtensionContext("my-extension", "hello", {
enabled: config.enabled,
});
void message;
}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
