diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ca1468..7c4389d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ # Changelog -## 0.0.10-beta.10 — 2026-05-09 +## 0.0.10-beta.10 — 2026-05-10 ### Fixes +- `scripts/launch.ts`: drop the dashboard-startup ASCII wordmark entirely. Every iteration (the original 10-row pixel-block banner, the 6-row trim, and the colored half-block render of the brand PNG) read poorly in standard terminals — too tall, vertically stretched, or just visual noise. Replace with a plain-text `failproof ai` title and a `📦 Version: ` line padded to the same column as the existing `⭐ Star us:` / `📖 Docs:` / `💬 Slack:` lines, so version and URLs form one cleanly-aligned block. Removes `scripts/generate-banner.ts`, `scripts/banner.generated.ts`, `assets/wordmark/source.png`, the `pngjs` + `@types/pngjs` devDeps, and `__tests__/scripts/banner.test.ts` that were added earlier in this branch's history (#338). - Read full session UUID from each Gemini JSONL's metadata header at project-page session-listing time (`lib/gemini-projects.ts`), so links route to a valid `[sessionId]` segment instead of the 8-hex filename prefix that the session detail route's `UUID_RE` check rejects (404). Hooks-section links were already correct because hook stdin carries the full UUID; this aligns the projects-section with that path (#336). - Canonicalize OpenCode and Pi tool-input arg keys so the path-checking builtin policies actually fire on `read` / `write` / `edit` tool calls. OpenCode delivers args as `filePath` / `oldString` / `newString` / `replaceAll`; Pi delivers `path`. The failproofai builtins read `ctx.toolInput.file_path`, so the shape mismatch silently no-op'd `block-read-outside-cwd` (OpenCode), `block-env-files`, and `block-secrets-write` for both CLIs — letting an OpenCode session read paths outside its CWD without any deny, and letting Pi sessions write to `.env` / SSH-key paths unchecked. Note: `block-read-outside-cwd` already worked on Pi via an existing `tool_input.path` fallback at `src/hooks/builtin-policies.ts:796`, so only `block-env-files` and `block-secrets-write` were affected on Pi. Mirrors the `OPENCODE_TOOL_MAP` / `PI_TOOL_MAP` pattern from PR #293 with two new per-tool maps keyed by canonical PascalCase tool name: `OPENCODE_TOOL_INPUT_MAP` (Read / Write / Edit) and `PI_TOOL_INPUT_MAP` (Read / Write / Edit, top-level `path` only — Pi's nested `edits[{oldText,newText}]` array isn't a flat key rename). Both maps are mirrored inline in their respective shims so `.opencode/plugins/failproofai.mjs` and `pi-extension/index.ts` stay self-contained; MCP `mcp_*` and any unmapped tool pass through unchanged. Existing OpenCode users must regenerate their shim via `failproofai policies --install --cli opencode` to pick up the fix; Pi users must reinstall via `failproofai policies --install --cli pi` (#337). - Route OpenCode project pages by encoded cwd (`encodeFolderName(worktree)`) instead of opencode's project name / basename, fixing the dashboard `/project/` 404 for OpenCode-only sessions and merging same-cwd OpenCode + other-CLI rows on the Projects page (#335). diff --git a/package.json b/package.json index 0e57a40..a25d296 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "access": "public" }, "devDependencies": { + "@anthropic-ai/sdk": "^0.93.0", "@tailwindcss/postcss": "^4.1.18", "@tanstack/react-virtual": "^3.13.18", "@testing-library/jest-dom": "^6.9.1", @@ -91,7 +92,6 @@ "tailwind-merge": "^3.4.0", "tailwindcss": "^4.1.18", "typescript": "^6.0.2", - "@anthropic-ai/sdk": "^0.93.0", "vitest": "^4.0.18" }, "dependencies": { diff --git a/scripts/launch.ts b/scripts/launch.ts index d09d897..afe082d 100644 --- a/scripts/launch.ts +++ b/scripts/launch.ts @@ -12,35 +12,11 @@ import { version } from "../package.json"; export function launch(mode: "dev" | "start"): void { const { loggingLevel, disableTelemetry, allowedDevOrigins, remainingArgs } = parseScriptArgs(process.argv.slice(2)); - // Hand-crafted pixel-block wordmark mirroring the hosted PNG logo at - // https://d2wq11aau0arks.cloudfront.net/failproof/logo-wordmark.png — - // chunky lowercase "failproof ai" compressed with Unicode 2x2 quadrant - // block characters (▖▗▘▙▚▛▜▝▞▟ + ▀ ▄ █ ▌ ▐) and then horizontally - // scaled 4:3 (every 4th source-pixel column dropped) so the full - // wordmark fits in ~75 cols × ~10 rows — clean on any standard ≥80-col - // terminal. - const bannerLines = [ - " ███ ▐███ ▐█", - " ▐█▛▀▀ ▟█▖ ▟█▛▀▀ ▝▀", - " ██████ ▗████▌ ▝██▛ ██ ███ ▐██▙ ▗███ ▐██▙ ▗█████▙ ████▌ ▐█", - " ▀▜█▛▀▀ ▝▀▀▀▀█▙ ▄▙ ██ ▗▟▀▀▜▄▖ ▄▟▀▀▘ ▄▟▛▀▜▙▖ ▄█▀▀█▄▖▝▀██▛▀▀ ▀▀▀▀▙▄ ▐█", - " ▐█▌ ▗██████ ███ ██ ▐█ ▐█▌ ██ ██▌ ▐█▌ ██ ██▌ ██▌ ██████ ▐█", - " ▐█▌ ▐█▛▀▀██ ██▀ ██ ▐█ ▐█▌ ██ ██▌ ▐█▌ ██ ██▌ ██▌ █▛▀▀██ ▐█", - " ▐█▌ ▝▀█████ ██▄▄██ ▐████▀▘ ██ ▀▜███▀▘ ▀▜███▀▘ ██▌ ▀█████ ▐█", - " ▝▀▘ ▀▀▀▀▀ ▀▀▀▀▀▀ ▐█▀▀▀ ▀▀ ▝▀▀▀ ▝▀▀▀ ▀▀▘ ▀▀▀▀▀ ▝▀", - " ▐█", - " ▝▀", - ]; - // Fall back to plain text on narrow terminals so the wide pixel-block art - // doesn't wrap and shred itself. process.stdout.columns is undefined when - // stdout isn't a TTY (piped, captured, redirected to a file), in which case - // there's no width to compare against and we keep the full art as-is. - const bannerWidth = bannerLines.reduce((w, l) => Math.max(w, l.length), 0); - const cols = process.stdout.columns; - const banner = cols !== undefined && cols < bannerWidth - ? " failproof ai" - : bannerLines.join("\n"); - console.log(`\n${banner}\n\n v${version}\n`); + // Plain-text title + a labeled `Version` line that lines up with the + // `Star us` / `Docs` / `Slack` lines below (all four labels pad to the + // same column so the values form a clean right-hand column). + console.log(`\n failproof ai\n`); + console.log(` 📦 Version: ${version}`); console.log(` ⭐ Star us: https://github.com/exospherehost/failproofai`); console.log(` 📖 Docs: https://befailproof.ai`); console.log(` 💬 Slack: https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ\n`);