From 0da4a67356dbf6d935c5cfce27888d3b0111a564 Mon Sep 17 00:00:00 2001 From: 0xzoz Date: Wed, 5 Aug 2026 20:18:36 +0000 Subject: [PATCH] feat(desktop): add PFTerminal as a tier-2 preset harness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PFTerminal is an open-source, multi-provider coding terminal built on the Codex CLI. It exposes the Codex app-server protocol rather than ACP, so it reaches Buzz through `pfterminal-acp` — a launcher that ships with PFTerminal and points the codex-acp bridge at the PFTerminal binary. That indirection is why `underlying_cli` is set to "pfterminal": the CLI and the adapter install separately, so a user who has PFTerminal but not the bridge should see AdapterMissing rather than NotInstalled. Includes the catalog copy entry, since every other preset carries one and its absence would render PFTerminal as the only description-less runtime in the gallery. The logo is the square Post Fiat glyph extracted from PFTerminal's wordmark; provenance and the exact modifications are recorded in CREDITS.md. It brings its own dark plate, so it needs no per-id background class in RuntimeIcon. Signed-off-by: 0xzoz --- desktop/public/harness-logos/CREDITS.md | 1 + desktop/public/harness-logos/pfterminal.svg | 12 ++++++++++++ .../src/managed_agents/discovery/presets.rs | 9 +++++++++ desktop/src/features/onboarding/ui/RuntimeIcon.tsx | 1 + .../src/features/settings/ui/harnessCatalogCopy.ts | 4 ++++ 5 files changed, 27 insertions(+) create mode 100644 desktop/public/harness-logos/pfterminal.svg diff --git a/desktop/public/harness-logos/CREDITS.md b/desktop/public/harness-logos/CREDITS.md index 716c43e1ae..c6ac2c17db 100644 --- a/desktop/public/harness-logos/CREDITS.md +++ b/desktop/public/harness-logos/CREDITS.md @@ -15,6 +15,7 @@ license permits redistribution. | `omp.svg` | [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) | `667111575ebba136dadfd6989379e7f67e0d40d9` | MIT © 2025 Mario Zechner; © 2025–2026 Can Bölük | `assets/icon.svg` | None | | `kimi.png` | [MoonshotAI/kimi-cli](https://github.com/MoonshotAI/kimi-cli) | `4a550effdfcb29a25a5d325bf935296cc50cd417` | Apache-2.0; NOTICE: Kimi Code CLI © 2025 Moonshot AI | `web/public/logo.png` | None | | `grok.svg` | [SpaceXAI brand guidelines](https://x.ai/legal/brand-guidelines) | Retrieved 2026-07-25 | xAI Brand Guidelines: marks may be used to accurately refer to xAI or its services; logos must be used exactly as provided | `SpaceXAI_Grok_Assets.zip` → `Grok_Logomark_Dark.svg` | None | +| `pfterminal.svg` | [agtico/PfTerminal](https://github.com/agtico/PfTerminal) | `5731f16` | Apache-2.0 | `docs/assets/images/pfterminal-logo.svg` | Extracted the square Post Fiat glyph from the wide wordmark (the full lockup is 720×220 and would letterbox to nothing in a 32px square); dropped the outer frame and both text runs, retargeted the viewBox to the glyph's own 136×136 box, and renamed the glow filter id to avoid collisions when inlined. Colours unchanged; the mark carries its own dark plate so it stays legible in both app themes | ## Inline SVG marks (`RUNTIME_MARKS`) diff --git a/desktop/public/harness-logos/pfterminal.svg b/desktop/public/harness-logos/pfterminal.svg new file mode 100644 index 0000000000..d53ba2e38f --- /dev/null +++ b/desktop/public/harness-logos/pfterminal.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/desktop/src-tauri/src/managed_agents/discovery/presets.rs b/desktop/src-tauri/src/managed_agents/discovery/presets.rs index d86e5f33f0..601240f497 100644 --- a/desktop/src-tauri/src/managed_agents/discovery/presets.rs +++ b/desktop/src-tauri/src/managed_agents/discovery/presets.rs @@ -178,6 +178,15 @@ pub(super) const PRESET_HARNESSES: &[PresetHarness] = &[ Gateway's own environment separately.", underlying_cli: None, }, + PresetHarness { + id: "pfterminal", + label: "PFTerminal", + command: "pfterminal-acp", + args: &[], + install_instructions_url: "https://github.com/agtico/PfTerminal", + install_hint: "Buzz talks to PFTerminal through the pfterminal-acp adapter, which ships with PFTerminal and relies on the codex-acp bridge. Install PFTerminal, then install the bridge with `npm install -g @agentclientprotocol/codex-acp`, so the pfterminal-acp command is on your PATH.", + underlying_cli: Some("pfterminal"), + }, ]; /// Return preset definitions for the spawn/readiness registry. diff --git a/desktop/src/features/onboarding/ui/RuntimeIcon.tsx b/desktop/src/features/onboarding/ui/RuntimeIcon.tsx index 5b247c31f7..d60c516894 100644 --- a/desktop/src/features/onboarding/ui/RuntimeIcon.tsx +++ b/desktop/src/features/onboarding/ui/RuntimeIcon.tsx @@ -25,6 +25,7 @@ export const PRESET_LOGOS: Record = { amp: "/harness-logos/amp.png", hermes: "/harness-logos/hermes.png", openclaw: "/harness-logos/openclaw.svg", + pfterminal: "/harness-logos/pfterminal.svg", }; function isBuzzRuntime(runtime: AcpRuntimeCatalogEntry): boolean { diff --git a/desktop/src/features/settings/ui/harnessCatalogCopy.ts b/desktop/src/features/settings/ui/harnessCatalogCopy.ts index 9a71ff70f9..d7741bef15 100644 --- a/desktop/src/features/settings/ui/harnessCatalogCopy.ts +++ b/desktop/src/features/settings/ui/harnessCatalogCopy.ts @@ -43,6 +43,10 @@ const HARNESS_DESCRIPTIONS: Record = { // Sources: https://github.com/openclaw/openclaw, // https://docs.openclaw.ai/start/getting-started openclaw: "A personal AI assistant that runs on your own devices.", + // Source: https://github.com/agtico/PfTerminal — "an open-source, + // multi-provider coding terminal built on the Codex CLI". + pfterminal: + "An open-source, multi-provider coding terminal built on the Codex CLI.", }; /**