feat(output): add Output panel with ctx.log API and grouped channel selector#142
Merged
Merged
Conversation
…elector Introduces the core.output dock panel and the ctx.log logging API so extensions can write structured, per-channel output visible in the UI. **Output panel (core.output)** - New `OutputPanel` dock panel with channel selector, level filter, text search, clear button, and auto-scroll toggle - Channel dropdown groups entries into three sections: host channels (Notifications, Application — no header), Built-in Extensions (first-party silo.* extensions, trusted), and Extensions (third-party) - Grouping is driven by a `builtin` flag threaded from `registerChannel` through `OutputChannelState`; key-prefix alone is insufficient because runtime-loaded silo.* extensions from the external repo share the same `ext:silo.*` prefix **ctx.log / LogService SDK API** - New `LogService` type (`packages/sdk/src/output-service.ts`) with `debug/info/warn/error/show/clear`; exported from the SDK barrel - `createContext` wires `ctx.log` for every extension: `core.*` share the `silo:application` channel; all others get a per-extension `ext:<id>` channel that is auto-removed on deactivation - `registerChannel` now accepts an optional `builtin` flag so the panel can correctly group first-party vs third-party channels **Host / extension loader logging** - `extHostLog` (`silo:extension-host` channel) replaces all `console.*` calls in `builtins-registry.ts` and `extension-loader.ts` - Activation, deactivation, enable/disable, load/unload, and dispose errors now appear in the Extension Host output channel **Notifications mirrored to Output** - `ctx.ui.notify` now also writes to the `silo:notifications` channel so users can review dismissed toasts in the Output panel **Application channel lifecycle events** - `core.workspaces` subscribes to workspace state and logs activated, created, closed, and reopened events to the Application channel - `core.themes` logs theme-change events to the Application channel **Git command logging (silo.git)** - Read-only git commands (status, log, diff, show) log at `debug`; write commands log at `info`; non-zero stderr logs at `error` **openSingletonPanel layout API** - New `LayoutService.openSingletonPanel` creates at most one panel per kindId (focuses existing if present); used by `ctx.log.show()` **Status bar ordering fix** - Right-side status items now sort descending so lower priority anchors to the right edge (mirrors the left-side ascending convention) - Corrected priorities: updates (-2), theme (-5), settings (-10), panel-toggles (-20); documented the convention in SDK types Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This was referenced Jun 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
core.output) — new dock panel with channel selector (grouped into host channels, Built-in Extensions, and Extensions), level filter, text search, clear, and auto-scrollctx.log/LogService— structured per-extension logging API wired into every extension context;core.*share thesilo:applicationchannel, others get their ownext:<id>channel that is auto-created and auto-removed with the extension lifecyclebuiltinflag threaded fromregisterChannelthroughOutputChannelState; key prefix alone is insufficient because runtime-loadedsilo.*extensions from the external repo share the same prefix as bundled onescore.workspaceslogs workspace activated/created/closed/reopened;core.themeslogs theme changesctx.ui.notifynow also writes tosilo:notificationsso dismissed toasts are reviewablesilo.git) — read-only commands atdebug, write commands atinfo, non-zero stderr aterrorconsole.*calls inbuiltins-registryandextension-loaderreplaced withextHostLog.*(thesilo:extension-hostOutput channel)openSingletonPanellayout API — focuses an existing panel instead of opening a duplicate; used byctx.log.show()Test plan
ctx.log.show(); confirm channel dropdown shows host channels at top (no header), then Built-in Extensions group, then Extensions grouppnpm testgreen🤖 Generated with Claude Code