chore(vendor): import pi 1.3.0

Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
2026-10-15 17:58:48 -04:00
parent 719370c8f7
commit 6081e3e325
1743 changed files with 205460 additions and 131705 deletions

View File

@@ -0,0 +1,393 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://pi.dev/schemas/keybindings.schema.json",
"$comment": "This file is generated from TypeScript source. Do not edit it manually; run npm run generate:schemas.",
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"tui.editor.cursorUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move cursor up"
},
"tui.editor.cursorDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move cursor down"
},
"tui.editor.historyPrevious": {
"$ref": "#/$defs/KeybindingValue",
"description": "Select previous prompt history entry"
},
"tui.editor.historyNext": {
"$ref": "#/$defs/KeybindingValue",
"description": "Select next prompt history entry"
},
"tui.editor.cursorLeft": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move cursor left"
},
"tui.editor.cursorRight": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move cursor right"
},
"tui.editor.cursorWordLeft": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move cursor word left"
},
"tui.editor.cursorWordRight": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move cursor word right"
},
"tui.editor.cursorLineStart": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move to line start"
},
"tui.editor.cursorLineEnd": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move to line end"
},
"tui.editor.jumpForward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Jump forward to character"
},
"tui.editor.jumpBackward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Jump backward to character"
},
"tui.editor.pageUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Page up"
},
"tui.editor.pageDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Page down"
},
"tui.editor.deleteCharBackward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete character backward"
},
"tui.editor.deleteCharForward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete character forward"
},
"tui.editor.deleteWordBackward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete word backward"
},
"tui.editor.deleteWordForward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete word forward"
},
"tui.editor.deleteToLineStart": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete to line start"
},
"tui.editor.deleteToLineEnd": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete to line end"
},
"tui.editor.yank": {
"$ref": "#/$defs/KeybindingValue",
"description": "Yank"
},
"tui.editor.yankPop": {
"$ref": "#/$defs/KeybindingValue",
"description": "Yank pop"
},
"tui.editor.undo": {
"$ref": "#/$defs/KeybindingValue",
"description": "Undo"
},
"tui.input.newLine": {
"$ref": "#/$defs/KeybindingValue",
"description": "Insert newline"
},
"tui.input.submit": {
"$ref": "#/$defs/KeybindingValue",
"description": "Submit input"
},
"tui.input.tab": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tab / autocomplete"
},
"tui.input.copy": {
"$ref": "#/$defs/KeybindingValue",
"description": "Copy selection"
},
"tui.select.up": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move selection up"
},
"tui.select.down": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move selection down"
},
"tui.select.pageUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Selection page up"
},
"tui.select.pageDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Selection page down"
},
"tui.select.confirm": {
"$ref": "#/$defs/KeybindingValue",
"description": "Confirm selection"
},
"tui.select.cancel": {
"$ref": "#/$defs/KeybindingValue",
"description": "Cancel selection"
},
"tui.altScreen.pageUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport up one page"
},
"tui.altScreen.pageDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport down one page"
},
"tui.altScreen.halfPageUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport up half a page"
},
"tui.altScreen.halfPageDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport down half a page"
},
"tui.altScreen.lineUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport up one line"
},
"tui.altScreen.lineDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport down one line"
},
"tui.altScreen.previousPrompt": {
"$ref": "#/$defs/KeybindingValue",
"description": "Jump to previous semantic prompt"
},
"tui.altScreen.nextPrompt": {
"$ref": "#/$defs/KeybindingValue",
"description": "Jump to next semantic prompt"
},
"tui.altScreen.search": {
"$ref": "#/$defs/KeybindingValue",
"description": "Search the primary scroll view"
},
"tui.altScreen.searchNext": {
"$ref": "#/$defs/KeybindingValue",
"description": "Select the next search match"
},
"tui.altScreen.searchPrevious": {
"$ref": "#/$defs/KeybindingValue",
"description": "Select the previous search match"
},
"tui.altScreen.searchClose": {
"$ref": "#/$defs/KeybindingValue",
"description": "Close transcript search"
},
"tui.altScreen.top": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport to top"
},
"tui.altScreen.bottom": {
"$ref": "#/$defs/KeybindingValue",
"description": "Scroll viewport to bottom"
},
"app.interrupt": {
"$ref": "#/$defs/KeybindingValue",
"description": "Cancel or abort"
},
"app.clear": {
"$ref": "#/$defs/KeybindingValue",
"description": "Clear editor"
},
"app.exit": {
"$ref": "#/$defs/KeybindingValue",
"description": "Exit when editor is empty"
},
"app.suspend": {
"$ref": "#/$defs/KeybindingValue",
"description": "Suspend to background"
},
"app.thinking.cycle": {
"$ref": "#/$defs/KeybindingValue",
"description": "Cycle thinking level"
},
"app.thinking.save": {
"$ref": "#/$defs/KeybindingValue",
"description": "Save thinking level"
},
"app.model.cycleForward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Cycle to next model"
},
"app.model.cycleBackward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Cycle to previous model"
},
"app.model.select": {
"$ref": "#/$defs/KeybindingValue",
"description": "Open model selector"
},
"app.tools.expand": {
"$ref": "#/$defs/KeybindingValue",
"description": "Toggle tool output"
},
"app.thinking.toggle": {
"$ref": "#/$defs/KeybindingValue",
"description": "Toggle thinking blocks"
},
"app.session.toggleNamedFilter": {
"$ref": "#/$defs/KeybindingValue",
"description": "Toggle named session filter"
},
"app.editor.external": {
"$ref": "#/$defs/KeybindingValue",
"description": "Open external editor"
},
"app.message.copy": {
"$ref": "#/$defs/KeybindingValue",
"description": "Copy selection or last assistant message"
},
"app.message.followUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Queue follow-up message"
},
"app.message.dequeue": {
"$ref": "#/$defs/KeybindingValue",
"description": "Restore queued messages"
},
"app.clipboard.pasteImage": {
"$ref": "#/$defs/KeybindingValue",
"description": "Paste files on macOS, images, or text from clipboard"
},
"app.session.new": {
"$ref": "#/$defs/KeybindingValue",
"description": "Start a new session"
},
"app.session.tree": {
"$ref": "#/$defs/KeybindingValue",
"description": "Open session tree"
},
"app.session.fork": {
"$ref": "#/$defs/KeybindingValue",
"description": "Fork current session"
},
"app.session.resume": {
"$ref": "#/$defs/KeybindingValue",
"description": "Resume a session"
},
"app.tree.foldOrUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Fold tree branch or move up"
},
"app.tree.unfoldOrDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Unfold tree branch or move down"
},
"app.tree.editLabel": {
"$ref": "#/$defs/KeybindingValue",
"description": "Edit tree label"
},
"app.tree.toggleLabelTimestamp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Toggle tree label timestamps"
},
"app.session.togglePath": {
"$ref": "#/$defs/KeybindingValue",
"description": "Toggle session path display"
},
"app.session.toggleSort": {
"$ref": "#/$defs/KeybindingValue",
"description": "Toggle session sort mode"
},
"app.session.rename": {
"$ref": "#/$defs/KeybindingValue",
"description": "Rename session"
},
"app.session.delete": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete session"
},
"app.session.deleteNoninvasive": {
"$ref": "#/$defs/KeybindingValue",
"description": "Delete session when query is empty"
},
"app.models.save": {
"$ref": "#/$defs/KeybindingValue",
"description": "Save model selection"
},
"app.models.enableAll": {
"$ref": "#/$defs/KeybindingValue",
"description": "Enable all models"
},
"app.models.clearAll": {
"$ref": "#/$defs/KeybindingValue",
"description": "Clear all models"
},
"app.models.toggleProvider": {
"$ref": "#/$defs/KeybindingValue",
"description": "Toggle all models for provider"
},
"app.models.reorderUp": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move model up in order"
},
"app.models.reorderDown": {
"$ref": "#/$defs/KeybindingValue",
"description": "Move model down in order"
},
"app.tree.filter.default": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tree filter: default view"
},
"app.tree.filter.noTools": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tree filter: hide tool results"
},
"app.tree.filter.userOnly": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tree filter: user messages only"
},
"app.tree.filter.labeledOnly": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tree filter: labeled entries only"
},
"app.tree.filter.all": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tree filter: show all entries"
},
"app.tree.filter.cycleForward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tree filter: cycle forward"
},
"app.tree.filter.cycleBackward": {
"$ref": "#/$defs/KeybindingValue",
"description": "Tree filter: cycle backward"
}
},
"additionalProperties": {
"$ref": "#/$defs/KeybindingValue"
},
"$defs": {
"KeybindingValue": {
"anyOf": [
{
"type": "string",
"pattern": "^(?!.*(?:ctrl\\+.*ctrl\\+|shift\\+.*shift\\+|alt\\+.*alt\\+|super\\+.*super\\+))(?:(?:ctrl|shift|alt|super)\\+){0,4}(?:[a-z0-9]|escape|esc|enter|return|tab|space|backspace|delete|insert|clear|home|end|pageUp|pageDown|up|down|left|right|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|`|-|=|\\[|\\]|\\\\|;|'|,|\\.|/|!|@|#|\\$|%|\\^|&|\\*|\\(|\\)|_|\\+|\\||~|\\{|\\}|:|<|>|\\?)$",
"description": "Key identifier with optional ctrl, shift, alt, or super modifiers."
},
{
"type": "array",
"items": {
"type": "string",
"pattern": "^(?!.*(?:ctrl\\+.*ctrl\\+|shift\\+.*shift\\+|alt\\+.*alt\\+|super\\+.*super\\+))(?:(?:ctrl|shift|alt|super)\\+){0,4}(?:[a-z0-9]|escape|esc|enter|return|tab|space|backspace|delete|insert|clear|home|end|pageUp|pageDown|up|down|left|right|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|`|-|=|\\[|\\]|\\\\|;|'|,|\\.|/|!|@|#|\\$|%|\\^|&|\\*|\\(|\\)|_|\\+|\\||~|\\{|\\}|:|<|>|\\?)$",
"description": "Key identifier with optional ctrl, shift, alt, or super modifiers."
}
}
]
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,783 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://pi.dev/schemas/settings.schema.json",
"$comment": "This file is generated from TypeScript source. Do not edit it manually; run npm run generate:schemas.",
"type": "object",
"properties": {
"$schema": {
"type": "string",
"description": "JSON Schema reference."
},
"lastChangelogVersion": {
"type": "string"
},
"defaultProvider": {
"type": "string"
},
"defaultModel": {
"type": "string"
},
"defaultThinkingLevel": {
"$ref": "#/$defs/ModelThinkingLevel"
},
"modelThinkingLevels": {
"type": "object",
"patternProperties": {
"^.*$": {
"$ref": "#/$defs/ModelThinkingLevel"
}
},
"description": "Per-model default thinking level overrides keyed by \"provider/modelId\"."
},
"transport": {
"anyOf": [
{
"type": "string",
"const": "auto"
},
{
"type": "string",
"const": "sse"
},
{
"type": "string",
"const": "websocket"
},
{
"type": "string",
"const": "websocket-cached"
}
],
"default": "auto"
},
"sessionShareDestination": {
"anyOf": [
{
"type": "string",
"const": "auto"
},
{
"type": "string",
"const": "gist"
},
{
"type": "string",
"const": "radius"
}
],
"description": "Destination used by /share. \"auto\" uses Radius when authenticated and otherwise creates a GitHub gist.",
"default": "auto"
},
"steeringMode": {
"anyOf": [
{
"type": "string",
"const": "all"
},
{
"type": "string",
"const": "one-at-a-time"
}
],
"default": "one-at-a-time"
},
"followUpMode": {
"anyOf": [
{
"type": "string",
"const": "all"
},
{
"type": "string",
"const": "one-at-a-time"
}
],
"default": "one-at-a-time"
},
"theme": {
"type": "string"
},
"compaction": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"reserveTokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"default": 16384
},
"keepRecentTokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"default": 20000
},
"modelOverrides": {
"type": "object",
"patternProperties": {
"^.*$": {
"type": "object",
"properties": {
"reserveTokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"keepRecentTokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
}
}
},
"description": "Per-model overrides keyed by exact \"provider/modelId\" strings."
}
}
},
"branchSummary": {
"type": "object",
"properties": {
"reserveTokens": {
"type": "number",
"description": "Tokens reserved for the prompt and LLM response.",
"default": 16384
},
"skipPrompt": {
"type": "boolean",
"description": "When true, skips the \"Summarize branch?\" prompt and defaults to no summary.",
"default": false
}
}
},
"retry": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"maxRetries": {
"type": "number",
"default": 3
},
"baseDelayMs": {
"type": "number",
"description": "Exponential backoff base delay in milliseconds: 2s, 4s, 8s.",
"default": 2000
},
"maxAgentDelayMs": {
"type": "number",
"default": 60000
},
"provider": {
"type": "object",
"properties": {
"timeoutMs": {
"type": "number",
"description": "SDK or provider request timeout in milliseconds."
},
"maxRetries": {
"type": "number",
"description": "SDK or provider retry attempts."
},
"maxRetryDelayMs": {
"type": "number",
"description": "Maximum server-requested delay before failing.",
"default": 60000
}
}
},
"maxDelayMs": {
"type": "number",
"description": "Legacy retry delay setting. Use provider.maxRetryDelayMs instead.",
"deprecated": true
}
}
},
"hideThinkingBlock": {
"type": "boolean",
"default": false
},
"showCacheMissNotices": {
"type": "boolean",
"description": "Show cache cost and provider recovery notices.",
"default": false
},
"externalEditor": {
"type": "string",
"description": "Command for Ctrl+G external editor; takes precedence over VISUAL and EDITOR."
},
"shellPath": {
"type": "string",
"description": "Custom shell path, for example for Cygwin on Windows, with support for leading ~ expansion."
},
"quietStartup": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": "header"
}
],
"description": "When true, hide all startup output. When \"header\", keep only the startup header.",
"default": false
},
"defaultProjectTrust": {
"anyOf": [
{
"type": "string",
"const": "ask"
},
{
"type": "string",
"const": "always"
},
{
"type": "string",
"const": "never"
}
],
"description": "Global setting only.",
"default": "ask"
},
"shellCommandPrefix": {
"type": "string",
"description": "Prefix prepended to every bash command, for example to enable shell aliases."
},
"npmCommand": {
"type": "array",
"items": {
"type": "string"
},
"description": "Command used for npm package lookup and installation, in argv form such as [\"mise\", \"exec\", \"node@20\", \"--\", \"npm\"]."
},
"collapseChangelog": {
"type": "boolean",
"description": "Show the condensed changelog after update; use /changelog for the full changelog.",
"default": false
},
"enableInstallTelemetry": {
"type": "boolean",
"description": "Send an anonymous version and update ping after changelog-detected updates.",
"default": true
},
"enableAnalytics": {
"type": "boolean",
"description": "Opt in to analytics data sharing.",
"default": false
},
"trackingId": {
"type": "string",
"description": "Analytics tracking identifier, generated when analytics is enabled."
},
"packages": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"description": "Load all resources from the package."
},
{
"type": "object",
"required": [
"source"
],
"properties": {
"source": {
"type": "string"
},
"autoload": {
"type": "boolean",
"description": "When false, start empty and only apply explicit resource patterns."
},
"extensions": {
"type": "array",
"items": {
"type": "string"
}
},
"skills": {
"type": "array",
"items": {
"type": "string"
}
},
"prompts": {
"type": "array",
"items": {
"type": "string"
}
},
"themes": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
],
"description": "Package source for npm or git packages. Use the string form to load all resources or the object form to filter resources."
},
"description": "npm or git package sources, as strings or objects with resource filtering."
},
"extensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Local extension file paths or directories."
},
"deviceId": {
"type": "string",
"description": "Stable installation UUID, generated when authentication first needs it. Global only."
},
"skills": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "object",
"properties": {
"enableSkillCommands": {
"type": "boolean"
},
"customDirectories": {
"type": "array",
"items": {
"type": "string"
}
}
},
"deprecated": true
}
],
"description": "Local skill file paths or directories."
},
"prompts": {
"type": "array",
"items": {
"type": "string"
},
"description": "Local prompt template file paths or directories."
},
"themes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Local theme file paths or directories."
},
"enableSkillCommands": {
"type": "boolean",
"description": "Register skills as /skill:name commands.",
"default": true
},
"terminal": {
"type": "object",
"properties": {
"showImages": {
"type": "boolean",
"description": "Show images when the terminal supports them.",
"default": true
},
"imageWidthCells": {
"type": "number",
"description": "Preferred inline image width in terminal cells.",
"default": 60
},
"clearOnShrink": {
"type": "boolean",
"description": "Clear empty rows when content shrinks.",
"default": false
},
"showTerminalProgress": {
"type": "boolean",
"description": "Show OSC 9;4 terminal progress indicators.",
"default": false
},
"hyperlinks": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": "auto"
}
]
},
"images": {
"anyOf": [
{
"type": "string",
"const": "kitty"
},
{
"type": "string",
"const": "iterm2"
},
{
"type": "string",
"const": "auto"
},
{
"type": "boolean",
"const": false
}
]
},
"trueColor": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": "auto"
}
]
}
}
},
"images": {
"type": "object",
"properties": {
"autoResize": {
"type": "boolean",
"description": "Resize images to 2000x2000 maximum for better model compatibility.",
"default": true
},
"blockImages": {
"type": "boolean",
"description": "When true, prevents all images from being sent to LLM providers.",
"default": false
}
}
},
"enabledModels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Model patterns for cycling, in the same format as the --models CLI flag."
},
"defaultTools": {
"type": "array",
"items": {
"type": "string"
},
"description": "Initial tool selection. Plain names replace the inherited selection; +name and -name entries add or remove tools."
},
"doubleEscapeAction": {
"anyOf": [
{
"type": "string",
"const": "fork"
},
{
"type": "string",
"const": "tree"
},
{
"type": "string",
"const": "none"
}
],
"description": "Action for double-escape with an empty editor.",
"default": "tree"
},
"treeFilterMode": {
"anyOf": [
{
"type": "string",
"const": "default"
},
{
"type": "string",
"const": "no-tools"
},
{
"type": "string",
"const": "user-only"
},
{
"type": "string",
"const": "labeled-only"
},
{
"type": "string",
"const": "all"
}
],
"description": "Default filter when opening /tree.",
"default": "default"
},
"thinkingBudgets": {
"type": "object",
"properties": {
"minimal": {
"type": "number"
},
"low": {
"type": "number"
},
"medium": {
"type": "number"
},
"high": {
"type": "number"
}
},
"description": "Custom token budgets for thinking levels."
},
"editorPaddingX": {
"type": "number",
"description": "Horizontal padding for the input editor.",
"default": 0
},
"outputPad": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
}
],
"description": "Horizontal padding for transcript content.",
"default": 1
},
"autocompleteMaxVisible": {
"type": "number",
"description": "Maximum visible items in the autocomplete dropdown.",
"default": 5
},
"showHardwareCursor": {
"type": "boolean",
"description": "Show the terminal cursor while still positioning it for IME."
},
"markdown": {
"type": "object",
"properties": {
"codeBlockIndent": {
"type": "string",
"default": " "
},
"mermaid": {
"anyOf": [
{
"type": "string",
"const": "off"
},
{
"type": "string",
"const": "final"
},
{
"type": "string",
"const": "streaming"
}
],
"default": "streaming"
}
}
},
"warnings": {
"type": "object",
"properties": {
"anthropicExtraUsage": {
"type": "boolean",
"default": true
}
}
},
"codemode": {
"type": "object",
"properties": {
"mode": {
"anyOf": [
{
"type": "string",
"const": "on"
},
{
"type": "string",
"const": "only"
}
],
"description": "How codemode presents tools. \"on\" keeps direct tools declared and annotates tools callable from scripts; codemode lists only tools without direct exposure. \"only\" lists every script-callable tool in codemode and does not declare active direct tools.",
"default": "on"
},
"inlineBudget": {
"type": "number",
"minimum": 0,
"description": "Estimated tokens available for inline codemode tool declarations.",
"default": 3000
}
}
},
"sessionDir": {
"type": "string",
"description": "Custom session storage directory, in the same format as the --session-dir CLI flag."
},
"httpProxy": {
"type": "string",
"description": "Proxy URL applied as HTTP_PROXY and HTTPS_PROXY for Pi-managed HTTP clients."
},
"httpIdleTimeoutMs": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "string",
"const": "disabled"
}
],
"description": "HTTP header or body idle timeout in milliseconds; 0 or \"disabled\" disables it."
},
"cacheWarming": {
"anyOf": [
{
"type": "string",
"const": "off"
},
{
"type": "string",
"const": "streaming"
},
{
"type": "string",
"const": "idle"
}
],
"description": "Cache-warming profile. \"idle\" also warms between agent runs. Global only because each refresh costs money.",
"default": "streaming"
},
"websocketConnectTimeoutMs": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "string",
"const": "disabled"
}
],
"description": "WebSocket connect or open handshake timeout in milliseconds; 0 or \"disabled\" disables it."
},
"tuiMode": {
"anyOf": [
{
"type": "string",
"const": "regular"
},
{
"type": "string",
"const": "fullscreen"
}
],
"default": "fullscreen"
},
"fullscreenExitOutput": {
"anyOf": [
{
"type": "string",
"const": "transcript"
},
{
"type": "string",
"const": "resume-hint"
}
],
"description": "No effect in regular TUI mode.",
"default": "transcript"
},
"fullscreenScrollbar": {
"anyOf": [
{
"type": "string",
"const": "auto"
},
{
"type": "string",
"const": "always"
},
{
"type": "string",
"const": "hidden"
}
],
"description": "No effect in regular TUI mode.",
"default": "auto"
},
"fullscreenCopyOnSelect": {
"type": "boolean",
"description": "No effect in regular TUI mode.",
"default": true
},
"fullscreenWheelScrollLines": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": "auto"
}
],
"description": "Lines scrolled per wheel event in fullscreen mode; numeric values are clamped from 1 to 100.",
"default": "auto"
},
"queueMode": {
"anyOf": [
{
"type": "string",
"const": "all"
},
{
"type": "string",
"const": "one-at-a-time"
}
],
"description": "Legacy setting migrated to steeringMode.",
"deprecated": true
},
"websockets": {
"type": "boolean",
"description": "Legacy setting migrated to transport.",
"deprecated": true
}
},
"additionalProperties": true,
"$defs": {
"ModelThinkingLevel": {
"enum": [
"off",
"minimal",
"low",
"medium",
"high",
"xhigh",
"max"
]
}
}
}

View File

@@ -0,0 +1,365 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://pi.dev/schemas/theme.schema.json",
"$comment": "This file is generated from TypeScript source. Do not edit it manually; run npm run generate:schemas.",
"type": "object",
"required": [
"name",
"colors"
],
"properties": {
"$schema": {
"type": "string",
"description": "JSON schema reference"
},
"name": {
"type": "string",
"pattern": "^[^/]+$",
"description": "Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings."
},
"appearance": {
"anyOf": [
{
"type": "string",
"const": "dark"
},
{
"type": "string",
"const": "light"
}
],
"description": "Background the theme is designed for. Detected from the theme colors when omitted."
},
"vars": {
"type": "object",
"patternProperties": {
"^.*$": {
"$ref": "#/$defs/ColorValue"
}
},
"description": "Reusable color variables"
},
"colors": {
"type": "object",
"required": [
"accent",
"border",
"borderAccent",
"borderMuted",
"success",
"error",
"warning",
"muted",
"dim",
"text",
"thinkingText",
"selectedBg",
"userMessageBg",
"userMessageText",
"customMessageBg",
"customMessageText",
"customMessageLabel",
"toolPendingBg",
"toolSuccessBg",
"toolErrorBg",
"toolTitle",
"toolOutput",
"mdHeading",
"mdLink",
"mdLinkUrl",
"mdCode",
"mdCodeBlock",
"mdCodeBlockBorder",
"mdQuote",
"mdQuoteBorder",
"mdHr",
"mdListBullet",
"toolDiffAdded",
"toolDiffRemoved",
"toolDiffContext",
"syntaxComment",
"syntaxKeyword",
"syntaxFunction",
"syntaxVariable",
"syntaxString",
"syntaxNumber",
"syntaxType",
"syntaxOperator",
"syntaxPunctuation",
"thinkingOff",
"thinkingMinimal",
"thinkingLow",
"thinkingMedium",
"thinkingHigh",
"thinkingXhigh",
"bashMode"
],
"properties": {
"accent": {
"$ref": "#/$defs/ColorValue",
"description": "Primary accent color (logo, selected items, cursor)"
},
"border": {
"$ref": "#/$defs/ColorValue",
"description": "Normal borders"
},
"borderAccent": {
"$ref": "#/$defs/ColorValue",
"description": "Highlighted borders"
},
"borderMuted": {
"$ref": "#/$defs/ColorValue",
"description": "Subtle borders"
},
"success": {
"$ref": "#/$defs/ColorValue",
"description": "Success states"
},
"error": {
"$ref": "#/$defs/ColorValue",
"description": "Error states"
},
"warning": {
"$ref": "#/$defs/ColorValue",
"description": "Warning states"
},
"muted": {
"$ref": "#/$defs/ColorValue",
"description": "Secondary/dimmed text"
},
"dim": {
"$ref": "#/$defs/ColorValue",
"description": "Very dimmed text (more subtle than muted)"
},
"text": {
"$ref": "#/$defs/ColorValue",
"description": "Default text color (usually empty string)"
},
"thinkingText": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking block text color"
},
"scrollbarTrack": {
"$ref": "#/$defs/ColorValue",
"description": "Fullscreen scrollbar track foreground (falls back to muted when omitted)"
},
"scrollbarThumb": {
"$ref": "#/$defs/ColorValue",
"description": "Fullscreen scrollbar thumb foreground (falls back to text when omitted)"
},
"selectedBg": {
"$ref": "#/$defs/ColorValue",
"description": "Selected item background"
},
"searchMatchBg": {
"$ref": "#/$defs/ColorValue",
"description": "Transcript search match background and current-match text (falls back to selectedBg when omitted)"
},
"searchMatchText": {
"$ref": "#/$defs/ColorValue",
"description": "Transcript search match text and current-match background (falls back to text when omitted)"
},
"userMessageBg": {
"$ref": "#/$defs/ColorValue",
"description": "User message background"
},
"userMessageText": {
"$ref": "#/$defs/ColorValue",
"description": "User message text color"
},
"customMessageBg": {
"$ref": "#/$defs/ColorValue",
"description": "Custom message background (hook-injected messages)"
},
"customMessageText": {
"$ref": "#/$defs/ColorValue",
"description": "Custom message text color"
},
"customMessageLabel": {
"$ref": "#/$defs/ColorValue",
"description": "Custom message type label color"
},
"toolPendingBg": {
"$ref": "#/$defs/ColorValue",
"description": "Tool execution box (pending state)"
},
"toolSuccessBg": {
"$ref": "#/$defs/ColorValue",
"description": "Tool execution box (success state)"
},
"toolErrorBg": {
"$ref": "#/$defs/ColorValue",
"description": "Tool execution box (error state)"
},
"toolTitle": {
"$ref": "#/$defs/ColorValue",
"description": "Tool execution box title color"
},
"toolOutput": {
"$ref": "#/$defs/ColorValue",
"description": "Tool execution box output text color"
},
"mdHeading": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown heading text"
},
"mdLink": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown link text"
},
"mdLinkUrl": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown link URL"
},
"mdCode": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown inline code"
},
"mdCodeBlock": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown code block content"
},
"mdCodeBlockBorder": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown code block fences"
},
"mdQuote": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown blockquote text"
},
"mdQuoteBorder": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown blockquote border"
},
"mdHr": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown horizontal rule"
},
"mdListBullet": {
"$ref": "#/$defs/ColorValue",
"description": "Markdown list bullets/numbers"
},
"toolDiffAdded": {
"$ref": "#/$defs/ColorValue",
"description": "Added lines in tool diffs"
},
"toolDiffRemoved": {
"$ref": "#/$defs/ColorValue",
"description": "Removed lines in tool diffs"
},
"toolDiffContext": {
"$ref": "#/$defs/ColorValue",
"description": "Context lines in tool diffs"
},
"syntaxComment": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: comments"
},
"syntaxKeyword": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: keywords"
},
"syntaxFunction": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: function names"
},
"syntaxVariable": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: variable names"
},
"syntaxString": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: string literals"
},
"syntaxNumber": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: number literals"
},
"syntaxType": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: type names"
},
"syntaxOperator": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: operators"
},
"syntaxPunctuation": {
"$ref": "#/$defs/ColorValue",
"description": "Syntax highlighting: punctuation"
},
"thinkingOff": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking level border: off"
},
"thinkingMinimal": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking level border: minimal"
},
"thinkingLow": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking level border: low"
},
"thinkingMedium": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking level border: medium"
},
"thinkingHigh": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking level border: high"
},
"thinkingXhigh": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking level border: xhigh"
},
"thinkingMax": {
"$ref": "#/$defs/ColorValue",
"description": "Thinking level border: max (falls back to thinkingXhigh when omitted)"
},
"bashMode": {
"$ref": "#/$defs/ColorValue",
"description": "Editor border color in bash mode"
}
},
"description": "Theme color definitions (scrollbar, thinkingMax, and search highlight colors are optional and use compatible fallbacks)",
"additionalProperties": false
},
"export": {
"type": "object",
"properties": {
"pageBg": {
"$ref": "#/$defs/ColorValue",
"description": "Page background color"
},
"cardBg": {
"$ref": "#/$defs/ColorValue",
"description": "Card/container background color"
},
"infoBg": {
"$ref": "#/$defs/ColorValue",
"description": "Info sections background (system prompt, notices)"
}
},
"description": "Optional colors for HTML export (defaults derived from userMessageBg if not specified)",
"additionalProperties": false
}
},
"title": "Pi Coding Agent Theme",
"description": "Theme schema for Pi coding agent",
"additionalProperties": false,
"$defs": {
"ColorValue": {
"anyOf": [
{
"type": "string",
"description": "Hex color (#RGB or #RRGGBB), OKLCH or OKHSL color, variable reference, or empty string for terminal default"
},
{
"type": "integer",
"minimum": 0,
"maximum": 255,
"description": "256-color palette index (0-255)"
}
]
}
}
}