OpenCockpitOpenCockpit

更新日志

从 GitHub Releases 拉取的版本说明。

  1. v1.0.235

    2026年7月3日 · v1.0.235

    🐛 Fix: mobile chat no longer renders half off-screen

    Opening a chat on the /m mobile view could leave the page shifted half off-screen with a dead black right half — browser DevTools device emulation hit it every time. A scrollIntoView racing the page-slide animation injected a phantom horizontal scroll into the swipe track, and it never recovered. The track container is now overflow: clip — a clipped box cannot be scrolled at all — with a scroll-reset guard as backup. Separately, tablet-width viewports (768–809 px) no longer nest the mobile UI inside the desktop shell's project frame: the mobile redirect now applies only to the top-level window.

    🐛 Fix: chat stream edge cases

    Sending the same prompt repeatedly (say, "继续" three times in a row) could suppress a new turn's user bubble — or cut earlier identical messages from the transcript — because the live stream deduped by prompt text. It now dedups by turn identity and timestamps, so identical prompts are safe.

    Jumping to a session from the scheduled-tasks, recent, or pinned panels now refreshes its messages even when the target tab is already active. Previously, messages appended by a scheduled run stayed invisible until you switched away and back.

    🐛 Fix: notes

    Drag-moving a todo (or bullet item) inside a note left an empty checkbox shell behind at the source. The drop now cleans up the emptied item — verified-empty only, so todos you intentionally left blank elsewhere are untouched.

    🌐 Site: repositioned as an IDE-like workbench

    README, npm, and opencockpit.dev now tell the same story: an IDE-like Claude Code workbench you self-host for a whole team. The homepage gained a three-way Compare section (vs the official Claude Code Desktop app, vs Opcode), and a new blog post — "Self-Host a Claude Code GUI for Your Whole Team" (en/zh) — walks through COCKPIT_HOST/--token, a systemd unit, and the trust model. The GUI-comparison post was refreshed to include the redesigned official Desktop app.

    在 GitHub 查看
  2. v1.0.234

    2026年7月2日 · v1.0.234

    ✨ New: remote access is no longer slow

    Three stacked changes make cockpit over a tunnel (ngrok / Tailscale / LAN) feel local.

    API JSON now gzips through the custom server — Next's built-in compression only runs under next start, so a 264 KB session payload used to cross the wire uncompressed; it travels as 71 KB now (SSE, HTML and statics untouched).

    Reopening a session paints instantly: the first page of history is served from a per-session stale-while-revalidate cache, then revalidated by fingerprint — an unchanged session confirms with a ~62-byte { notModified } instead of re-downloading hundreds of KB of messages.

    And the /m mobile session list no longer waits for JS download + hydration + the WebSocket handshake (~3.5 s over a tunnel) before showing anything — the list is server-rendered into the initial HTML from local file reads, and the first live WS frame takes over incrementally.

    📦 Misc: ~130 KB lighter first load

    shiki and its grammars no longer ride in the first-load bundle. The highlighter is code-split behind a dynamic import and fetched on first highlight — first-load JS drops ~130 KB (gzip).

    🌐 Site: PostHog analytics

    opencockpit.dev now reports pageviews to PostHog — production builds only, so dev and preview runs stay clean.

    在 GitHub 查看
  3. v1.0.233

    2026年7月2日 · v1.0.233

    ✨ New: /skillify — turn a conversation into a skill

    A new builtin slash command that distills the current conversation into a reusable SKILL.md. Type /skillify in any chat: it first scans the conversation for knowledge actually worth keeping — and stops honestly if nothing passes the bar — then extracts and saves it, only asking where to put the file at the final step. Add trailing text to aim it at a specific topic:

    /skillify 目标:the tarball smoke-test procedure we just worked out
    

    🐛 Fix: background tasks in execution (PTY) mode

    run_in_background shells finally behave in execution mode. The PTY driver used to kill claude at the end of the launching turn, so a background task's completion never reached the chat. Now the driver tracks in-flight background tasks and stays resident until they drain — the completion event shows up live and claude auto-runs the follow-up turn, same as SDK mode. Also fixed: a prior run's background-continuation bubbles no longer vanish the moment you send the next message.

    🐛 Fix: compaction banner is a system row

    The "This session is being continued from a previous conversation…" line after a context compaction rendered as a big right-aligned user bubble. It's now the muted system-event row it should be, and it no longer seeds session titles.

    📚 Docs: the access token gate

    The CLI reference (en + zh) now documents --token / COCKPIT_TOKEN: the loopback exemption and the three ways to present the token (cookie, Bearer header, ?token=). There's a short blog post on pairing it with COCKPIT_HOST=0.0.0.0.

    🌐 Site: dark-only redesign + mobile

    opencockpit.dev got a visual overhaul on the Teal+Slate brand — dark-only now, with browser-frame screenshots, tinted section bands, and scroll-in reveals. /docs/, the top nav, and /changelog/ are finally mobile-responsive (off-canvas sidebar, hamburger menu, no more horizontal overflow), and the changelog page shows the latest 10 releases.

    在 GitHub 查看
  4. v1.0.232

    2026年7月1日 · v1.0.232

    This release makes background work in cockpit actually reliable: long-running run_in_background commands now survive across turns, finish on their own, and wake the agent when they're done — instead of being quietly killed the moment the turn ended.

    ✨ New: Background tasks that finish on their own

    Previously, anything an agent launched with run_in_background was tied to that single turn. The moment the turn produced its answer the underlying process was torn down, so the task never really finished — the next turn just inherited a "stopped / previous process exited" post-mortem, and the agent had to give up and re-run things in the foreground.

    Now the claude process stays resident while a background task is still in flight. When the task completes, cockpit receives a real completion notification, renders it as a live system-event row, and the agent automatically resumes — reads the output, reports the result — with no manual nudge. It's on-demand: a normal turn with no background task closes out exactly as before.

    🐛 Fix: Injected messages no longer masquerade as your chat

    Skill loads, image annotations, background-task notifications, and context-compaction notices were being rendered as if you had typed them — big right-aligned "user" bubbles full of machine text. They now show as muted system-event rows (click one for the full detail), and a loaded skill's body folds into its Skill tool call instead of dumping a wall of text into the conversation. Fixed for both live streaming and reloaded history.

    ✨ New: Console browser hints

    The Console's browser bubbles now surface a hint when a page can't be embedded (iframe blocked by the site) or when a session needs a cookie re-login — a blank frame is no longer a silent mystery.

    🐛 Fix: Notes stop growing phantom checkboxes

    The global Note no longer accumulates junk empty-checkbox lines ([ ]) across saves. Round-tripping note content through markdown was regenerating and duplicating empty task-list items on every edit; that's fixed.

    📦 Misc: Dependency security sweep

    Patched a batch of vulnerable transitive dependencies (ws, hono, linkify-it, qs, markdown-it, and the e2b demo's undici), clearing the outstanding high/medium Dependabot advisories. Lockfile-only — no API changes.

    在 GitHub 查看
  5. v1.0.231

    2026年6月27日 · v1.0.231

    ✨ New: optional token auth for remote access

    Exposing cockpit beyond your own machine — a tunnel, a LAN, a reverse proxy — used to mean anyone with the URL was in. You can now require a token for any non-local request, while local access stays frictionless.

    cockpit --token <your-secret>     # off by default — omit it and nothing changes
    
    • Local stays open. Requests from localhost — your browser on the host, the cock CLI, /cg curls, the self-probe — are exempt and never need a token.
    • Remote must present the token, in any of three ways: an Authorization: Bearer <token> header, a cockpit_token cookie, or ?token=<token> on first visit (which sets the cookie and redirects to strip the param back out of the URL).
    • Tunnel-aware. A forwarding header (X-Forwarded-For / X-Real-IP / Forwarded) drops local trust, so a same-host tunnel or proxy — ngrok, Caddy, nginx — can't pose as localhost. HTTP, WebSocket, and the share server are all gated.

    Set it with the flag, or the COCKPIT_TOKEN environment variable.

    🐛 Fix: session search finds the right session

    Searching the Recent Sessions and session-list modals now matches a session's summary/title and its full message text. Before, the summary line (kept only on disk) was never part of the search, and message text was truncated to 50 characters and sampled (first 5 + last 5 messages) — so long tails and mid-conversation matches silently fell through. Both modals now search the complete text.

    📦 Misc: clearer tool-call titles

    The tool-call modal now shows the query for ToolSearch and the subject for TaskCreate as its title line, the way Grep already shows its pattern.

    在 GitHub 查看
  6. v1.0.230

    2026年6月27日 · v1.0.230

    ✨ New: In-place HTML preview

    Open a single-file .html / .htm and Cockpit now renders it, the same way it already does for Markdown — no need to round-trip through a browser tab.

    • Explorer: HTML files open in preview by default, rendered in a sandboxed srcDoc iframe. Blame / Edit and the Code Map are hidden in preview mode; toggle back to source whenever you want.
    • Agent chat: when a tool call touches an .html/.htm file, it now shows up in the document list (with its own glyph) alongside .md. Single-click opens it in an iframe modal.

    Self-contained single-file pages only — the iframe is sandboxed, so nothing in the page can reach your session.

    🐛 Fix: softer light theme

    Reverted the recent light-mode layering changes back to the prior palette, and dropped the accent from slate-4 to slate-3 so light-mode chat bubbles read softer. Dark theme is unchanged.

    在 GitHub 查看
  7. v1.0.229

    2026年6月26日 · v1.0.229

    ✨ New: Skills panel as a card grid

    The Skills sidebar is now a responsive multi-column card grid (the same shell as the recent-sessions and open-project modals) instead of a cramped vertical list. Each card shows the skill icon, name, full path with a copy button, and the complete description. Search is inline in the header next to a bordered Add Skill button. The skill preview now renders through the same InteractiveMarkdownPreview as the chat stream, so you get a TOC sidebar and consistent styling.

    ✨ New: Searchable recent sessions

    Cockpit now keeps up to 100 recent sessions (week-bounded, minimum 15) instead of a hard 15-session cap, so anything from the past week is recoverable. The sidebar dropdown still streams its top-15 view, and a new expand button opens a searchable, cross-project grid of every persisted session — card layout, absolute timestamps, and first/last message previews, aligned with the project-sessions view.

    ✨ New: Markdown opens in preview

    Opening a markdown file now defaults to the rendered preview; the toggle reads Exit Preview while you're previewing. Leading YAML frontmatter (--- blocks) that used to render as a garbled paragraph is now parsed into a clean key/value table as part of the document. This lives in the shared renderer, so chat, the explorer, and skill previews all benefit, and it degrades gracefully on empty or invalid frontmatter.

    ✨ New: Console empty state + New PTY

    When the console has no bubbles, it now shows a short guide to the supported bubble types and how to trigger each (command / interactive PTY / browser / database / notebook), plus a New PTY button that launches an interactive zsh terminal.

    🐛 Fix: Closing a PTY bubble actually kills it

    Closing or deleting a running PTY bubble used to only drop the history entry and frontend state — the backend process kept running and the bubble reappeared on refresh. PTY bubbles now have a single authoritative destroy path, so closing or clearing one really ends the backend process and it stays gone.

    🐛 Fix: Light-mode contrast

    The light palette had collapsed background, card, and muted surfaces into a narrow lightness band with near-invisible borders. The semantic tokens are re-tiered into a distinct ladder so surfaces and borders read clearly again (AA-verified: 16:1 foreground, ≥4.9:1 muted text, 5:1 focus ring). The dark theme is untouched.

    在 GitHub 查看
  8. v1.0.228

    2026年6月25日 · v1.0.228

    🐛 Fix: Duplicate reply bubble when refreshing mid-generation

    Refreshing the page while the agent was still generating could leave you with two copies of the same reply — the in-progress turn was rendered once from on-disk history and again from the live stream, side by side.

    The cause was a race when a tab re-joins a running session: a Claude turn writes its "text + tool_use" message to disk before the run ends, so the just-loaded history already contained the in-flight turn, and the live snapshot replayed it a second time. The snapshot reconciliation now fingerprints the in-flight turn (by message and tool-call ids) and drops its disk copy before replaying, while leaving real prior history untouched. One turn, one bubble.

    在 GitHub 查看
  9. v1.0.227

    2026年6月25日 · v1.0.227

    ✨ New: Project sessions, one click from the tab bar

    The project-sessions entry moved out of the top bar and into the tab bar — it now sits right after the new-tab + as a chat-bubble button, shown whenever a project is open. The old, ambiguous document-icon entry is gone.

    The session-list modals (Session Browser and Project Sessions) are also wider, growing to ~1280px on large screens so you can scan more history at once. Phones and iPad keep their existing full-width layout.

    ✨ New: Clearer active states

    The active chat tab is now unmistakable — a 1.5px brand-color top accent, a stronger fill, and bold text, with softer inactive hover to remove the hover-vs-active ambiguity. The current project's name in the sidebar is brand-colored too, so it matches its active number icon and status dot.

    ✨ New: Inline bubble-title editing

    Renaming a console bubble no longer pops a full-screen modal. It's now an inline popover anchored under the ✎ trigger, so the rest of the UI stays visible and interactive. It flips above when there's no room below, click-outside cancels, and Enter/Esc, the 64-char cap, and IME handling all carry over.

    🐛 Fix: Scheduled-task unread badge

    Jumping to a session from the recent- or pinned-sessions lists now clears its scheduled-task unread badge, not just the session-level unread. Previously the badge only decremented when you opened the scheduled-tasks panel directly.

    ⚙️ Internal: /cg runs over loopback

    The /cg code-graph commands now always reach the server at http://localhost:<port> and no longer honor COCKPIT_HOST — the CLI is always co-located with the server, so the host is always loopback. If you were overriding the host, use the port-only override instead.

    在 GitHub 查看
  10. v1.0.226

    2026年6月25日 · v1.0.226

    ✨ New: Console stays in sync across tabs

    Open the same project in two browser tabs and the Console now keeps both in lockstep — bubbles you add, rerun, reorder, rename, or clear in one tab appear in the other in real time (over the existing global-state channel, last-writer-wins). Live PTY output still streams per-command; only bubble membership and metadata cross tabs, and each tab ignores its own echo so nothing double-renders.

    Two long-standing PTY rendering gaps got fixed along the way:

    • Finished terminal bubbles were blank after a refresh — scrollback is now rewritten once per mounted terminal.
    • Dragging a PTY bubble to a later slot blanked it — the terminal now refits and repaints from its buffer after a reorder.

    ✨ New: Drill into Workflow runs

    Workflow and Skill tool calls used to render as a bare name with an empty info slot. They now show the Skill / Workflow name and args right in the tool header. For Workflows you also get a run details drill-in: run stats plus the agents grouped by phase, and clicking an agent opens its full transcript.

    ✨ New: Isolate a second instance with COCKPIT_HOME

    You can now run a fully separate cockpit against its own data dir. Point COCKPIT_HOME at a directory to isolate sessions, settings, and scheduled tasks; one instance per data dir is enforced via a health probe (use COCKPIT_FORCE to override).

    COCKPIT_HOME=~/.cockpit-work cockpit
    

    Scheduled tasks are now owned by the data dir rather than a port, so they fire in-process and can't mis-target a sibling dev/prod instance. See the expanded Environment variables docs for the full list (COCKPIT_HOST, COCKPIT_NO_OPEN, COCKPIT_LOG_LEVEL, …).

    🐛 Fix: Mobile list ↔ chat swipe

    The /m route now swipes between the session list and chat as a finger-following, side-by-side carousel. The OS back gesture no longer closes the tab, both screens stay mounted so chat history doesn't blank-and-refetch on swipe, and the system Back button returns to the list. Verified on Android Chrome, desktop, and the installed PWA.

    🐛 Fix: Console & terminal robustness

    • Terminal bubbles survive a server restart. Running PTY bubbles used to vanish on restart; a graceful restart now restores them with scrollback, and a hard kill restores them empty instead of dropping them.
    • Plan-mode plans actually save. Writing the plan markdown under .claude/plans/ is now allowed in plan mode, so the plan file lands instead of silently failing on a permission prompt.
    • Bubble scrolling no longer leaks. Wheel-scrolling inside a console bubble stops at its own boundary instead of chaining to the outer bubble list.

    🐛 Fix: Touch UI

    • The sidebar collapse/expand button is now always visible on touch devices (it was hover-gated, so touch users could get stuck collapsed).
    • The schedule-task popover is wider with a scrollable body, and its message input grew to 5 resizable rows for editing longer prompts.
    在 GitHub 查看