diff --git a/bun.lock b/bun.lock index b9d3519ac..05568cbae 100644 --- a/bun.lock +++ b/bun.lock @@ -3,7 +3,7 @@ "configVersion": 1, "workspaces": { "": { - "name": "pi-monorepo", + "name": "omp-monorepo", "dependencies": { "@sinclair/typebox": "^0.34.46", "get-east-asian-width": "^1.4.0", @@ -20,7 +20,7 @@ }, "packages/agent": { "name": "@oh-my-pi/pi-agent-core", - "version": "2.3.1337", + "version": "3.0.1337", "dependencies": { "@oh-my-pi/pi-ai": "workspace:*", "@oh-my-pi/pi-tui": "workspace:*", @@ -32,7 +32,7 @@ }, "packages/ai": { "name": "@oh-my-pi/pi-ai", - "version": "2.3.1337", + "version": "3.0.1337", "bin": { "pi-ai": "./src/cli.ts", }, @@ -56,7 +56,7 @@ }, "packages/coding-agent": { "name": "@oh-my-pi/pi-coding-agent", - "version": "2.3.1337", + "version": "3.0.1337", "bin": { "omp": "src/cli.ts", }, @@ -89,7 +89,7 @@ }, "packages/mom": { "name": "@oh-my-pi/pi-mom", - "version": "2.3.1337", + "version": "3.0.1337", "bin": { "mom": "src/main.ts", }, @@ -113,7 +113,7 @@ }, "packages/tui": { "name": "@oh-my-pi/pi-tui", - "version": "2.3.1337", + "version": "3.0.1337", "dependencies": { "@types/mime-types": "^2.1.4", "chalk": "^5.5.0", @@ -128,7 +128,7 @@ }, "packages/web-ui": { "name": "@oh-my-pi/pi-web-ui", - "version": "2.3.1337", + "version": "3.0.1337", "dependencies": { "@lmstudio/sdk": "^1.5.0", "@oh-my-pi/pi-agent-core": "workspace:*", @@ -561,7 +561,7 @@ "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], + "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], @@ -1179,12 +1179,16 @@ "concurrently/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "ecdsa-sig-formatter/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], "jszip/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "jwa/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "jws/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "katex/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -1207,6 +1211,8 @@ "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "tunnel-agent/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], diff --git a/packages/agent/CHANGELOG.md b/packages/agent/CHANGELOG.md index 8fdfcd5f8..f9f44eaa6 100644 --- a/packages/agent/CHANGELOG.md +++ b/packages/agent/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [3.0.1337] - 2026-01-03 + ## [2.3.1337] - 2026-01-03 ## [2.2.1337] - 2026-01-03 diff --git a/packages/agent/package.json b/packages/agent/package.json index 046bf0d6d..706500623 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@oh-my-pi/pi-agent-core", - "version": "2.3.1337", + "version": "3.0.1337", "description": "General-purpose agent with transport abstraction, state management, and attachment support", "type": "module", "main": "./src/index.ts", diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index c8535ad8b..617f5a395 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [3.0.1337] - 2026-01-03 + ## [2.3.1337] - 2026-01-03 ## [2.2.1337] - 2026-01-03 diff --git a/packages/ai/package.json b/packages/ai/package.json index 12b9cc822..f9b7a09f5 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@oh-my-pi/pi-ai", - "version": "2.3.1337", + "version": "3.0.1337", "description": "Unified LLM API with automatic model discovery and provider configuration", "type": "module", "main": "./src/index.ts", diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index e59de7cf5..8c50e0462 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [3.0.1337] - 2026-01-03 + ### Added - Added unified capability-based discovery system for loading configuration from multiple AI coding tools (Claude Code, Cursor, Windsurf, Gemini, Codex, Cline, GitHub Copilot, VS Code) diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index 731d7ab56..78b9ec8f9 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -1,6 +1,6 @@ { "name": "@oh-my-pi/pi-coding-agent", - "version": "2.3.1337", + "version": "3.0.1337", "description": "Coding agent CLI with read, bash, edit, write tools and session management", "type": "module", "ompConfig": { diff --git a/packages/coding-agent/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index 164e69982..c50f792ab 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -2401,30 +2401,23 @@ export class InteractiveMode { const capitalize = (value: string): string => value.charAt(0).toUpperCase() + value.slice(1); - const renderSource = (source: StatusSource): { plain: string; rendered: string } => { - if (source === "builtin") { - return { plain: "builtin", rendered: theme.fg("dim", "builtin") }; - } - if (source === "unknown") { - return { plain: "unknown", rendered: theme.fg("dim", "unknown") }; - } + const resolveSourceText = (source: StatusSource): string => { + if (source === "builtin") return "builtin"; + if (source === "unknown") return "unknown"; if ("mcpServer" in source) { - if (!source.provider) { - const label = `mcp:${source.mcpServer}`; - return { plain: label, rendered: label }; - } - const label = `${source.mcpServer} via ${source.provider}`; - return { - plain: label, - rendered: `${source.mcpServer} ${theme.italic("via")} ${source.provider}`, - }; + if (!source.provider) return `mcp:${source.mcpServer}`; + return `${source.mcpServer} via ${source.provider}`; } const levelLabel = capitalize(source.level); - const label = `via ${source.provider} (${levelLabel})`; - return { - plain: label, - rendered: `${theme.italic("via")} ${source.provider} (${levelLabel})`, - }; + return `via ${source.provider} (${levelLabel})`; + }; + + const renderSourceText = (text: string): string => text.replace(/\bvia\b/, theme.italic("via")); + + const truncateText = (text: string, maxLen: number): string => { + if (text.length <= maxLen) return text; + if (maxLen <= 3) return text.slice(0, Math.max(0, maxLen)); + return `${text.slice(0, maxLen - 3)}...`; }; // Helper to format a section with consistent column alignment @@ -2437,26 +2430,37 @@ export class InteractiveMode { ): string => { if (items.length === 0) return ""; - const lines = items.map((item) => { + const lineItems = items.map((item) => { const name = getName(item); const desc = getDesc(item); - const source = renderSource(getSource(item)); - const nameWithSource = source.plain ? `${name} ${source.plain}` : name; - return { - name, - nameWithSource, - nameRendered: source.plain ? `${theme.bold(name)} ${source.rendered}` : theme.bold(name), - desc, - }; + const sourceText = resolveSourceText(getSource(item)); + const nameWithSource = sourceText ? `${name} ${sourceText}` : name; + return { name, sourceText, nameWithSource, desc }; }); - const maxNameWidth = Math.min(50, Math.max(...lines.map((line) => line.nameWithSource.length))); - const formattedLines = lines.map((line) => { - const pad = Math.max(0, maxNameWidth - line.nameWithSource.length); - const paddedName = line.nameRendered + " ".repeat(pad); + const maxNameWidth = Math.min(60, Math.max(...lineItems.map((line) => line.nameWithSource.length))); + const formattedLines = lineItems.map((line) => { + let nameText = line.name; + let sourceText = line.sourceText; + + if (sourceText) { + let availableForName = maxNameWidth - sourceText.length - 1; + if (availableForName < 1) { + sourceText = truncateText(sourceText, Math.max(0, maxNameWidth - 4)); + availableForName = maxNameWidth - sourceText.length - 1; + } + nameText = truncateText(nameText, Math.max(1, availableForName)); + } else { + nameText = truncateText(nameText, maxNameWidth); + } + + const nameWithSourcePlain = sourceText ? `${nameText} ${sourceText}` : nameText; + const sourceRendered = sourceText ? renderSourceText(sourceText) : ""; + const nameRendered = sourceText ? `${theme.bold(nameText)} ${sourceRendered}` : theme.bold(nameText); + const pad = Math.max(0, maxNameWidth - nameWithSourcePlain.length); const desc = line.desc?.trim(); - const descPart = desc ? ` ${theme.fg("dim", desc.slice(0, 50) + (desc.length > 50 ? "…" : ""))}` : ""; - return ` ${paddedName}${descPart}`; + const descPart = desc ? ` ${theme.fg("dim", desc.slice(0, 50) + (desc.length > 50 ? "..." : ""))}` : ""; + return ` ${nameRendered}${" ".repeat(pad)}${descPart}`; }); return `${theme.bold(theme.fg("accent", title))}\n${formattedLines.join("\n")}`; diff --git a/packages/mom/CHANGELOG.md b/packages/mom/CHANGELOG.md index 24f9c5483..ed130492c 100644 --- a/packages/mom/CHANGELOG.md +++ b/packages/mom/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] + +## [3.0.1337] - 2026-01-03 ### Changed - Updated configuration directory from `~/.pi/mom/` to `~/.omp/mom/` for auth and custom tools diff --git a/packages/mom/package.json b/packages/mom/package.json index ae2f32264..0b6d52b89 100644 --- a/packages/mom/package.json +++ b/packages/mom/package.json @@ -1,6 +1,6 @@ { "name": "@oh-my-pi/pi-mom", - "version": "2.3.1337", + "version": "3.0.1337", "description": "Slack bot that delegates messages to the omp coding agent", "type": "module", "bin": { diff --git a/packages/tui/CHANGELOG.md b/packages/tui/CHANGELOG.md index ff5cd09d7..8575e0f37 100644 --- a/packages/tui/CHANGELOG.md +++ b/packages/tui/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [3.0.1337] - 2026-01-03 + ## [2.3.1337] - 2026-01-03 ## [2.2.1337] - 2026-01-03 diff --git a/packages/tui/package.json b/packages/tui/package.json index 0cd4a9dd7..26e190285 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,6 +1,6 @@ { "name": "@oh-my-pi/pi-tui", - "version": "2.3.1337", + "version": "3.0.1337", "description": "Terminal User Interface library with differential rendering for efficient text-based applications", "type": "module", "main": "src/index.ts", diff --git a/packages/web-ui/CHANGELOG.md b/packages/web-ui/CHANGELOG.md index 8dda9e0c9..da19c9617 100644 --- a/packages/web-ui/CHANGELOG.md +++ b/packages/web-ui/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [3.0.1337] - 2026-01-03 + ## [2.3.1337] - 2026-01-03 ## [2.2.1337] - 2026-01-03 diff --git a/packages/web-ui/package.json b/packages/web-ui/package.json index ba33950e9..06f8b7a94 100644 --- a/packages/web-ui/package.json +++ b/packages/web-ui/package.json @@ -1,6 +1,6 @@ { "name": "@oh-my-pi/pi-web-ui", - "version": "2.3.1337", + "version": "3.0.1337", "description": "Reusable web UI components for AI chat interfaces powered by @oh-my-pi/pi-ai", "type": "module", "main": "src/index.ts",