From c6a51691c2ade0d5e1a0badf239a8c7142fee88c Mon Sep 17 00:00:00 2001 From: Evan Klem Date: Sun, 28 Jun 2026 23:06:46 -0400 Subject: [PATCH 1/2] Remove duplicate chat plugin from the install registry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The chat plugin ships as a built-in under plugins/chat/, but an identical copy was also sitting in .polypore/plugins/polypore.chat/ — the registry for user-installed plugins. Built-ins are bundled, not installed, so the registry copy is redundant and creates a duplicate polypore.chat id. Drop it; the built-in remains the sole source. Co-Authored-By: Claude Opus 4.8 --- .polypore/plugins/polypore.chat/MANUAL.md | 42 ------------------ .polypore/plugins/polypore.chat/index.ts | 44 ------------------- .polypore/plugins/polypore.chat/polypore.json | 12 ----- 3 files changed, 98 deletions(-) delete mode 100644 .polypore/plugins/polypore.chat/MANUAL.md delete mode 100644 .polypore/plugins/polypore.chat/index.ts delete mode 100644 .polypore/plugins/polypore.chat/polypore.json diff --git a/.polypore/plugins/polypore.chat/MANUAL.md b/.polypore/plugins/polypore.chat/MANUAL.md deleted file mode 100644 index bbf2436..0000000 --- a/.polypore/plugins/polypore.chat/MANUAL.md +++ /dev/null @@ -1,42 +0,0 @@ -# chat - -The chat panel is an agent terminal surface. Each agent — codex, claude — runs -its real CLI in a pty-backed terminal, so what you see is the genuine agent -session, not a re-rendering of it. - -Codex and Claude chat panels are specialized terminal panels. They use the same -xterm-backed pty as the Terminal panel, but start with the agent command already -running and show agent-specific slash-command shortcuts. - -## driving a session - -- **It starts itself.** When the panel mounts, the agent CLI launches - automatically; you can begin typing immediately. -- **Keystrokes go to the process.** Input is forwarded straight to the CLI, so - every shortcut and prompt the agent supports works as it does in a terminal. -- **Slash commands are remembered per agent.** Common commands such as `/clear` - and `/help` appear as quick chips, ranked separately for Claude and Codex. -- **Run agents in parallel.** The **+** opens another independent agent terminal. - Two agents can work side by side without sharing a session. -- **If the CLI exits,** the panel falls back to a shell so you can inspect what - happened without losing the terminal. - -## what the agent can reach - -Inside a chat session the agent can use Polypore MCP tools when its CLI is -configured with the Polypore MCP server: opening panels, running verify -commands, using mediated secret handles, reading this manual, and writing memory -notes. See [the polypore mcp server](agent-mcp/mcp) for the model, and [secrets & safety](agent-mcp/secrets) for the -limits of the secret policy in pty sessions. - -## memory context - -Documents queued from Memory are attached when you send the next message. The -terminal inserts them as `@path` mentions at the start of that prompt and then -removes them from the queue for that chat. - -## tips - -- Context you drag in from the Memory panel is scoped to this chat, not every - open agent. -- Closing the panel ends that agent's session; reopening starts a fresh one. diff --git a/.polypore/plugins/polypore.chat/index.ts b/.polypore/plugins/polypore.chat/index.ts deleted file mode 100644 index 8203251..0000000 --- a/.polypore/plugins/polypore.chat/index.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { PanelManifest } from '../../packages/sdk/src'; -import { lazyBuiltinPanel, type BuiltinPlugin } from '../shared'; -import manifestJson from './polypore.json'; - -type ChatAgent = 'codex' | 'claude'; - -const AgentTerminalPanel = lazyBuiltinPanel(() => import('../terminal/component'), 'TerminalPanel'); - -const AGENT_META: Record = { - codex: { icon: 'cd', label: 'codex', order: 10 }, - claude: { icon: 'cl', label: 'claude', order: 20 }, -}; - -function buildAgentTerminalPlugin(agent: ChatAgent): BuiltinPlugin { - const meta = AGENT_META[agent]; - const manifest = { - ...(manifestJson as PanelManifest), - id: `polypore.chat.${agent}`, - title: meta.label, - icon: meta.icon, - } as PanelManifest; - - return { - manifest, - slot: agent, - meta: { icon: meta.icon, label: meta.label }, - defaultOrder: meta.order, - buildContext: () => ({ - initialCommand: agent, - title: meta.label, - /* surface the per-agent slash-command chip strip — same UI as the - standalone terminal but ranked from the user's claude/codex - slash-command history (/clear, /compact, custom skills, …). */ - quickLaunch: true, - fallbackToShellOnExit: true, - }), - Component: AgentTerminalPanel, - }; -} - -export const codexChatPlugin = buildAgentTerminalPlugin('codex'); -export const claudeChatPlugin = buildAgentTerminalPlugin('claude'); - -export default [codexChatPlugin, claudeChatPlugin]; diff --git a/.polypore/plugins/polypore.chat/polypore.json b/.polypore/plugins/polypore.chat/polypore.json deleted file mode 100644 index 14ae2c8..0000000 --- a/.polypore/plugins/polypore.chat/polypore.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "schemaVersion": 1, - "id": "polypore.chat", - "title": "chat", - "icon": "/>", - "version": "0.1.0", - "entry": "index.html", - "permissions": ["state.read", "terminal.spawn", "terminal.stop", "terminal.write"], - "capabilities": [], - "category": "agent", - "defaultArea": "left" -} From c017177e12c61200591a336d4e4eb90ef1cc5e15 Mon Sep 17 00:00:00 2001 From: Evan Klem Date: Sun, 28 Jun 2026 23:14:46 -0400 Subject: [PATCH 2/2] Ignore the .polypore/plugins install registry Built-in plugins ship in plugins/; the .polypore/plugins/ registry only holds installed copies, which the mcp:pipeline-smoke run recreates on every invocation. Tracking it is what let a duplicate polypore.chat get committed. Ignore the whole registry so smoke runs no longer dirty the working tree. Co-Authored-By: Claude Opus 4.8 --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6a75430..ee501f3 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,6 @@ yarn-error.log* # polypore runtime state /.polypore/mcp-state.json +# installed-plugin registry; built-ins ship in plugins/, and smoke runs +# install into here, so it should never be tracked +/.polypore/plugins/