diff --git a/.config/pi/models.json b/.config/pi/models.json new file mode 100644 index 0000000..df30de3 --- /dev/null +++ b/.config/pi/models.json @@ -0,0 +1,190 @@ +{ + "providers": { + "duskadiy": { + "baseUrl": "https://llm.duskadiy.com/api/v1", + "api": "openai-completions", + "apiKey": "no-key-required", + "compat": { + "supportsDeveloperRole": false, + "supportsReasoningEffort": false, + "maxTokensField": "max_tokens" + }, + "models": [ + { + "id": "DeepSeek-Coder-V2-Lite-Instruct-Q8_0", + "name": "DeepSeek Coder V2", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "gemma-4-E4B-it-UD-Q8_K_XL", + "name": "Gemma 4 E4B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "gemma-4-26B-A4B-it-UD-IQ4_XS", + "name": "Gemma 4 26B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3-Coder-30B-Instruct-IQ4_XS", + "name": "Qwen3 Coder A3B", + "reasoning": false, + "input": ["text"], + "contextWindow": 8192, + "maxTokens": 4096, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.6-27B-UD-IQ3_XXS", + "name": "Qwen3.6 27B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.5-27B-UD-Q3_K_XL", + "name": "Qwen3.5 27B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.5-9B-Q8_0", + "name": "Qwen3.5 9B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ3_M", + "name": "Qwen3.6 27B Uncensored", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "GLM-4.7-Flash-UD-Q3_K_XL", + "name": "GLM-4.7 Flash", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + } + ] + }, + "localcpp": { + "baseUrl": "http://192.168.0.204:11343/v1", + "api": "openai-completions", + "apiKey": "no-key-required", + "compat": { + "supportsDeveloperRole": false, + "supportsReasoningEffort": false, + "maxTokensField": "max_tokens" + }, + "models": [ + { + "id": "DeepSeek-Coder-V2-Lite-Instruct-Q8_0", + "name": "DeepSeek Coder V2", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "gemma-4-E4B-it-UD-Q8_K_XL", + "name": "Gemma 4 E4B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "gemma-4-26B-A4B-it-UD-IQ4_XS", + "name": "Gemma 4 26B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3-Coder-30B-Instruct-IQ4_XS", + "name": "Qwen3 Coder A3B", + "reasoning": false, + "input": ["text"], + "contextWindow": 8192, + "maxTokens": 4096, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.6-27B-UD-IQ3_XXS", + "name": "Qwen3.6 27B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.5-27B-UD-Q3_K_XL", + "name": "Qwen3.5 27B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.5-9B-Q8_0", + "name": "Qwen3.5 9B", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ3_M", + "name": "Qwen3.6 27B Uncensored", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + }, + { + "id": "GLM-4.7-Flash-UD-Q3_K_XL", + "name": "GLM-4.7 Flash", + "reasoning": false, + "input": ["text"], + "contextWindow": 81920, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } + } + ] + } + } +} diff --git a/.config/pi/prompts/commit.md b/.config/pi/prompts/commit.md new file mode 100644 index 0000000..4734d38 --- /dev/null +++ b/.config/pi/prompts/commit.md @@ -0,0 +1,11 @@ +--- +description: Write a Conventional Commits message for the staged changes +argument-hint: "[extra context]" +--- +Inspect the staged changes with `git diff --cached` (and `git status` for context). Then write a single Conventional Commits message: + +- A `(): ` summary line, imperative mood, ≤72 chars (types: feat, fix, refactor, docs, chore, test, perf, build). +- An optional short body explaining the *why* only when it isn't obvious from the diff. +- Do NOT run `git commit`. Output only the message inside a code block so I can review it. + +Extra context to incorporate: ${1:-none} diff --git a/.config/pi/prompts/review.md b/.config/pi/prompts/review.md new file mode 100644 index 0000000..b8ad575 --- /dev/null +++ b/.config/pi/prompts/review.md @@ -0,0 +1,14 @@ +--- +description: Review the current diff for bugs and issues +argument-hint: "[focus area]" +--- +Review the current changes. Check both `git diff` (unstaged) and `git diff --cached` (staged). Focus on: + +- Correctness and logic bugs +- Error handling and missing edge cases +- Security issues (injection, secrets, unsafe input) +- Anything that doesn't match the surrounding code's conventions + +List concrete findings as `file:line — issue — suggested fix`, ordered by severity. Be concise; skip praise. If nothing is wrong, say so. + +Extra focus this round: ${1:-general correctness} diff --git a/.config/pi/settings.json b/.config/pi/settings.json new file mode 100644 index 0000000..acabbbc --- /dev/null +++ b/.config/pi/settings.json @@ -0,0 +1,30 @@ +{ + "defaultProvider": "localcpp", + "defaultModel": "gemma-4-26B-A4B-it-UD-IQ4_XS", + "defaultThinkingLevel": "off", + "theme": "catppuccin-mocha", + "quietStartup": false, + "defaultProjectTrust": "ask", + "enableInstallTelemetry": false, + "enabledModels": [ + "localcpp/*", + "duskadiy/*" + ], + "compaction": { + "enabled": true, + "reserveTokens": 16384, + "keepRecentTokens": 20000 + }, + "retry": { + "enabled": true, + "maxRetries": 3, + "baseDelayMs": 2000, + "provider": { + "timeoutMs": 3600000 + } + }, + "httpIdleTimeoutMs": 600000, + "npmCommand": ["fnm", "exec", "--using=22", "--", "npm"], + "showHardwareCursor": true, + "lastChangelogVersion": "0.80.1" +} \ No newline at end of file diff --git a/.config/pi/themes/catppuccin-mocha.json b/.config/pi/themes/catppuccin-mocha.json new file mode 100644 index 0000000..ade4e41 --- /dev/null +++ b/.config/pi/themes/catppuccin-mocha.json @@ -0,0 +1,90 @@ +{ + "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json", + "name": "catppuccin-mocha", + "vars": { + "rosewater": "#f5e0dc", + "flamingo": "#f2cdcd", + "pink": "#f5c2e7", + "mauve": "#cba6f7", + "red": "#f38ba8", + "maroon": "#eba0ac", + "peach": "#fab387", + "yellow": "#f9e2af", + "green": "#a6e3a1", + "teal": "#94e2d5", + "sky": "#89dceb", + "sapphire": "#74c7ec", + "blue": "#89b4fa", + "lavender": "#b4befe", + "fg": "#cdd6f4", + "subtext1": "#bac2de", + "subtext0": "#a6adc8", + "overlay2": "#9399b2", + "overlay1": "#7f849c", + "overlay0": "#6c7086", + "surface2": "#585b70", + "surface1": "#45475a", + "surface0": "#313244", + "base": "#1e1e2e", + "mantle": "#181825", + "crust": "#11111b" + }, + "colors": { + "accent": "mauve", + "border": "surface1", + "borderAccent": "mauve", + "borderMuted": "surface0", + "success": "green", + "error": "red", + "warning": "yellow", + "muted": "subtext0", + "dim": "overlay0", + "text": "fg", + "thinkingText": "overlay1", + "selectedBg": "surface0", + "userMessageBg": "surface0", + "userMessageText": "fg", + "customMessageBg": "surface0", + "customMessageText": "fg", + "customMessageLabel": "mauve", + "toolPendingBg": "mantle", + "toolSuccessBg": "#1e2b22", + "toolErrorBg": "#2b1e22", + "toolTitle": "mauve", + "toolOutput": "fg", + "mdHeading": "mauve", + "mdLink": "blue", + "mdLinkUrl": "sapphire", + "mdCode": "green", + "mdCodeBlock": "fg", + "mdCodeBlockBorder": "surface1", + "mdQuote": "subtext0", + "mdQuoteBorder": "surface2", + "mdHr": "surface1", + "mdListBullet": "mauve", + "toolDiffAdded": "green", + "toolDiffRemoved": "red", + "toolDiffContext": "overlay0", + "syntaxComment": "overlay0", + "syntaxKeyword": "mauve", + "syntaxFunction": "blue", + "syntaxVariable": "fg", + "syntaxString": "green", + "syntaxNumber": "peach", + "syntaxType": "yellow", + "syntaxOperator": "sky", + "syntaxPunctuation": "overlay2", + "thinkingOff": "surface1", + "thinkingMinimal": "overlay0", + "thinkingLow": "blue", + "thinkingMedium": "teal", + "thinkingHigh": "peach", + "thinkingXhigh": "red", + "bashMode": "peach" + }, + "export": { + "pageBg": "#11111b", + "cardBg": "#1e1e2e", + "infoBg": "#313244" + } +}