Skip to content

Feat/UI plugin port - #56

Merged
loadchange merged 6 commits into
mainfrom
feat/ui-plugin-port
Oct 1, 2026
Merged

loadchange merged 6 commits into
mainfrom
feat/ui-plugin-port

Conversation

@loadchange

Copy link
Copy Markdown
Collaborator

No description provided.

MCP Apps plugin pages, Gen UI and the bundled visualize plugin on top of
the v3.14.3 base, with CCbuddy identity and data rules kept: no official
MCP auth wiring, no cloud help config, no CDN icon, output under
~/.ccbuddy. Re-pins runtime-manifest hashes for the rebranded assets.
Skips upstream screenshots, README/notices edits and an unreferenced
patch. Adds docs/specs/plugin-ui-and-gen-ui.md and docs/ui-plugin.md.
Footer logo tile and pill share one radius (the 2xl left corners were for
the upstream round avatar). Model settings show an empty state with an
add action instead of an endless loading card when no provider exists.
The add-provider list is one vendor-neutral list: DeepSeek, Alibaba
Model Studio, Zhipu first, the rest in template order, custom last.
…Cbuddy

The history catalog now includes CCbuddy's own agent sessions (one entry
per row of ~/.ccbuddy/cli/db/db.sqlite via a verified snapshot), scans
CLAUDE_CONFIG_DIR and detected Claude profile directories, and accepts
user-added read-only roots stored as historyExtraRoots; the snapshot
reports every root with origin and availability.

"Continue in CCbuddy" imports any external session into a new CCbuddy
session through the agent's importedHistory contract (new
externalHistory variant): tool calls fold into assistant turns with
bounded payloads, control blocks and reasoning are dropped, same-role
turns merge, and re-importing reopens the existing task. CCbuddy's own
sessions open their task directly.

List: date groups, source chips with counts, project filter, sort,
relative time, duration and model per row. Reader: facts header with the
continue/open action, role accents, tool-call previews. Timeline: source
colors, legend, today marker, hover card. Partial scan failures show as
a status note instead of a failure banner. Specs and docs updated.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

MCP tool refresh can retain stale schemas, imported task IDs can collide across workspace identities, and plugin derivation state is unbounded.

Review effort: Balanced
Findings: 1 High severity · 2 Medium severity

Open (3)
What changed in this PR

Adds MCP plugin UI and Gen UI sandbox support across protocol, services, desktop, and shared UI, alongside history import and provider-setting improvements.

Changes:

  • Introduces sandboxed MCP App/Gen UI rendering, messaging, sampling, and side-pane integration.
  • Extends protocol/runtime support for plugin events, progress, generated UI, and history imports.
  • Adds history roots, provider empty states/template ordering, tests, docs, and build assets.
File Description
README.md Links plugin UI documentation.
README.en.md Links plugin UI specification.
packages/​ui/​vitest.config.ts Adds UI test alias configuration.
packages/​ui/​src/​WorkspaceSidebarFooter.tsx Adjusts profile logo styling.
packages/​ui/​src/​v4/​WorkbenchPane.tsx Documents workflow/plugin routing.
packages/​ui/​src/​v4/​toolCallRowAdapter.ts Projects tool progress.
packages/​ui/​src/​v4/​conversationTurnWorkSegments.ts Keeps pinned plugin rows visible.
packages/​ui/​src/​v4/​conversationTurnRenderUnits.ts Propagates plugin pin policy.
packages/​ui/​src/​v4/​conversationRowContext.ts Documents plugin side-pane callback.
packages/​ui/​src/​v4/​conversationProjectionStore.ts Exposes live-only deltas.
packages/​ui/​src/​ToolCallBlocks/​ToolCallProgressIndicator.tsx Adds MCP progress indicator.
packages/​ui/​src/​ToolCallBlocks/​resolveRenderer.ts Selects plugin UI renderer.
packages/​ui/​src/​ToolCallBlocks/​renderers/​mcp.tsx Displays MCP progress.
packages/​ui/​src/​ToolCallBlocks/​fileSummaryTypes.ts Adds plugin binding context.
packages/​ui/​src/​ToolCallBlocks.tsx Injects plugin bindings.
packages/​ui/​src/​styles.css Adds progress animation.
packages/​ui/​src/​settings/​ModelProviderSection.tsx Wires add-provider action.
packages/​ui/​src/​settings/​model-provider-section/​StatusCards.tsx Adds provider empty state.
packages/​ui/​src/​settings/​model-provider-section/​providerTemplateOrder.ts Orders preferred templates.
packages/​ui/​src/​settings/​model-provider-section/​providerTemplateOrder.test.ts Tests template ordering.
packages/​ui/​src/​settings/​model-provider-section/​Detail.tsx Shows provider empty state.
packages/​ui/​src/​root/​RootShell.tsx Mounts plugin follow-up dialog.
packages/​ui/​src/​plugin-ui/​sidePane/​pluginUiSidePaneTab.ts Creates plugin side-pane tabs.
packages/​ui/​src/​plugin-ui/​PluginUiToolCallBlock.tsx Adds plugin tool renderer.
packages/​ui/​src/​plugin-ui/​PluginUiSidePane.tsx Connects side-pane model and view.
packages/​ui/​src/​plugin-ui/​module.ts Declares plugin UI module.
packages/​ui/​src/​plugin-ui/​index.ts Exposes plugin UI API.
packages/​ui/​src/​plugin-ui/​hostPrimitives.ts Exposes host primitives.
packages/​ui/​src/​plugin-ui/​domain/​readPluginUiPresentation.ts Parses plugin presentation metadata.
packages/​ui/​src/​plugin-ui/​domain/​pluginUiRowPolicy.ts Defines row pinning policy.
packages/​ui/​src/​plugin-ui/​domain/​pluginUiLogicalScope.ts Resolves shared widget scope.
packages/​ui/​src/​plugin-ui/​domain/​pluginUiLogicalScope.test.ts Tests scope isolation.
packages/​ui/​src/​plugin-ui/​domain/​pluginUiFollowUp.ts Builds bounded follow-up prompts.
packages/​ui/​src/​plugin-ui/​domain/​pluginDisplayName.ts Formats plugin names.
packages/​ui/​src/​plugin-ui/​contract.example.ts Demonstrates plugin contracts.
packages/​ui/​src/​plugin-ui/​components/​PluginUiSidePane.tsx Renders side-pane card.
packages/​ui/​src/​plugin-ui/​app/​pluginUiWidgetStateStore.ts Stores widget state.
packages/​ui/​src/​plugin-ui/​app/​pluginUiSurfaceStore.ts Tracks active surfaces.
packages/​ui/​src/​plugin-ui/​app/​pluginUiSurfaceFeedStore.ts Retains surface result feeds.
packages/​ui/​src/​plugin-ui/​app/​pluginUiInstanceStore.ts Stores timeline derivations.
packages/​ui/​src/​plugin-ui/​app/​pluginUiHostTeardown.ts Coordinates host teardown.
packages/​ui/​src/​plugin-ui/​app/​pluginUiFollowUpDialogStore.ts Queues follow-up confirmations.
packages/​ui/​src/​plugin-ui/​app/​pluginUiDisclosureStore.ts Stores manual disclosure state.
packages/​ui/​src/​plugin-ui/​adapters/​sandboxPageOwners.ts Shares sandbox page capacity.
packages/​ui/​src/​plugin-ui/​adapters/​sandboxPageOwners.test.ts Tests page capacity.
packages/​ui/​src/​plugin-ui/​adapters/​readPluginUiStyleVariables.ts Reads host theme variables.
packages/​ui/​src/​plugin-ui/​adapters/​pluginUiSessionBinding.ts Adapts session commands.
packages/​ui/​src/​plugin-ui/​adapters/​pluginUiSessionActions.ts Registers session actions.
packages/​ui/​src/​plugin-ui/​adapters/​pluginUiResourceDeltaFeed.ts Routes live plugin deltas.
packages/​ui/​src/​plugin-ui/​adapters/​messagePortTransport.ts Implements MessagePort transport.
packages/​ui/​src/​lib/​workspaceSidePane.ts Adds plugin tab support.
packages/​ui/​src/​lib/​taskSidePaneMemory.ts Remembers plugin auto-open state.
packages/​ui/​src/​lib/​taskSidePaneMemory.test.ts Tests auto-open isolation.
packages/​ui/​src/​lib/​assistantDirectiveParser.ts Supports custom parameter prefixes.
packages/​ui/​src/​hooks/​useAppPanels.ts Opens plugin side panes.
packages/​ui/​src/​history/​index.ts Exposes expanded history APIs.
packages/​ui/​src/​history/​HistoryReview.test.tsx Updates history fixture.
packages/​ui/​src/​history/​contract.ts Adds roots and session actions.
packages/​ui/​src/​gen-ui/​module.ts Declares Gen UI module.
packages/​ui/​src/​gen-ui/​index.ts Exposes Gen UI UI API.
packages/​ui/​src/​gen-ui/​host.ts Exposes Gen UI host API.
packages/​ui/​src/​gen-ui/​contract.ts Defines page contracts.
packages/​ui/​src/​gen-ui/​CONTRACT.md Documents Gen UI behavior.
packages/​ui/​src/​gen-ui/​contract.example.ts Adds contract example.
packages/​ui/​src/​gen-ui/​adapters/​theme.ts Maps Gen UI theme variables.
packages/​ui/​src/​app-shell/​WorkspaceShellLayout.tsx Enables opening history tasks.
packages/​ui/​src/​app-shell/​SidePaneTabTrigger.tsx Presents plugin tabs.
packages/​ui/​src/​app-shell/​sidePaneTabPresentation.ts Adds plugin tab search metadata.
packages/​ui/​package.json Adds MCP UI dependencies.
packages/​shared/​src/​validationAppSettings.ts Validates history roots.
packages/​shared/​src/​test-ids.ts Adds plugin UI test IDs.
packages/​shared/​src/​task-realtime-core.ts Adds external-history migration source.
packages/​shared/​src/​protocol.ts Adds history-root settings types.
packages/​shared/​src/​platform.ts Adds sandbox platform port.
packages/​shared/​src/​node/​genUiPaths.ts Derives isolated Gen UI paths.
packages/​shared/​src/​node/​genUiPaths.test.ts Tests path isolation.
packages/​shared/​src/​node.ts Exports Gen UI paths.
packages/​shared/​src/​mcp-apps/​module.ts Declares MCP Apps protocol module.
packages/​shared/​src/​mcp-apps/​instance.ts Defines instance credentials.
packages/​shared/​src/​mcp-apps/​index.ts Exposes MCP Apps contracts.
packages/​shared/​src/​mcp-apps/​hostContract.ts Defines host payloads and limits.
packages/​shared/​src/​mcp-apps/​content.ts Concatenates text content.
packages/​shared/​src/​gen-ui/​module.ts Declares Gen UI protocol module.
packages/​shared/​src/​gen-ui/​index.ts Exposes Gen UI contracts.
packages/​shared/​src/​gen-ui/​CONTRACT.md Documents Gen UI protocol.
packages/​shared/​src/​gen-ui/​contract.example.ts Adds protocol examples.
packages/​shared/​src/​ccbuddy-task-types.ts Defines history import DTOs.
packages/​shared/​src/​ccbuddy-task-types-core.ts Adds external history source.
packages/​shared/​src/​ccbuddy-protocol-v4/​toolDisplay.ts Adds UI metadata and progress.
packages/​shared/​src/​ccbuddy-protocol-v4/​snapshot.ts Documents removed widget state.
packages/​shared/​src/​ccbuddy-protocol-v4/​rows.ts Projects input source and progress.
packages/​shared/​src/​ccbuddy-protocol-v4/​input-intent.ts Defines structured input sources.
packages/​shared/​src/​ccbuddy-protocol-v4/​command.ts Accepts input source metadata.
packages/​shared/​src/​ccbuddy-protocol-v4/​apply.ts Handles live plugin deltas.
packages/​shared/​package.json Exposes new protocol subpaths.
packages/​services/​src/​session/​history-import/​historyImportTaskId.ts Derives imported task IDs.
packages/​services/​src/​session/​ccbuddyTaskService.ts Adds history import service.
packages/​services/​src/​plugin-ui-bridge/​samplingContract.ts Defines sampling service.
packages/​services/​src/​plugin-ui-bridge/​sampling.test.ts Tests sampling boundary.
packages/​services/​src/​plugin-ui-bridge/​pluginUiSamplingService.ts Implements sampling forwarding.
packages/​services/​src/​plugin-ui-bridge/​pluginUiAppToolsService.ts Implements app-tool forwarding.
packages/​services/​src/​plugin-ui-bridge/​module.ts Declares bridge module.
packages/​services/​src/​plugin-ui-bridge/​instanceAccounts.ts Binds instances to accounts.
packages/​services/​src/​plugin-ui-bridge/​instanceAccounts.test.ts Tests account invalidation.
packages/​services/​src/​plugin-ui-bridge/​index.ts Exposes bridge services.
packages/​services/​src/​plugin-ui-bridge/​CONTRACT.md Documents bridge boundaries.
packages/​services/​src/​plugin-ui-bridge/​contract.example.ts Adds bridge examples.
packages/​services/​src/​index.ts Exports new services.
packages/​services/​src/​gen-ui/​node.ts Exposes Node service factory.
packages/​services/​src/​gen-ui/​module.ts Declares Gen UI service module.
packages/​services/​src/​gen-ui/​index.ts Exposes Gen UI service.
packages/​services/​src/​gen-ui/​contract.ts Defines Gen UI service contract.
packages/​services/​src/​gen-ui/​CONTRACT.md Documents service ownership.
packages/​services/​src/​gen-ui/​contract.example.ts Adds service example.
packages/​services/​src/​gen-ui/​app/​ports.ts Defines state storage port.
packages/​services/​src/​ccbuddy-agent/​genUiOutputEnv.test.ts Tests Agent output environment.
packages/​services/​src/​ccbuddy-agent/​ccbuddyAgentProcessManager.ts Supplies Gen UI output root.
packages/​services/​src/​accessor.ts Adds optional service accessors.
packages/​history/​test/​history-library.test.ts Updates discovery fixtures.
packages/​history/​src/​module.ts Resolves dynamic history roots.
packages/​history/​src/​domain/​value.ts Filters control blocks.
packages/​history/​src/​domain/​candidate.ts Supports database sessions.
packages/​history/​src/​app/​source-adapter.ts Returns root statuses.
packages/​history/​src/​app/​history-library.ts Refreshes dynamic roots.
packages/​history/​src/​adapters/​history-source-repository.ts Reads CCbuddy history.
packages/​history/​src/​adapters/​antigravity.ts Reuses SQLite snapshot helper.
packages/​desktop/​vite.config.ts Adds sandbox renderer entry.
packages/​desktop/​src/​renderer/​src/​plugin-sandbox/​openaiAlias.ts Adds OpenAI compatibility alias.
packages/​desktop/​src/​renderer/​src/​plugin-sandbox/​genUiTweakRuntime.d.ts Types tweak runtime.
packages/​desktop/​src/​renderer/​src/​desktopPlatform.ts Installs sandbox platform.
packages/​desktop/​src/​renderer/​plugin-sandbox.html Adds trusted sandbox shell.
packages/​desktop/​src/​preload/​pluginSandbox/​retainedMoves.ts Preserves moved webviews.
packages/​desktop/​src/​preload/​pluginSandbox/​retainedMoves.test.ts Tests retained moves.
packages/​desktop/​src/​preload/​pluginSandbox/​index.ts Transfers guest ports.
packages/​desktop/​src/​preload/​pluginSandbox/​hostBridge.ts Exposes sandbox operations.
packages/​desktop/​src/​preload/​index.ts Installs sandbox bridge.
packages/​desktop/​src/​main/​pluginSandbox/​module.ts Declares sandbox module.
packages/​desktop/​src/​main/​pluginSandbox/​index.ts Exposes sandbox API.
packages/​desktop/​src/​main/​pluginSandbox/​genUiVendor.ts Resolves bundled vendor assets.
packages/​desktop/​src/​main/​pluginSandbox/​contract.test.ts Tests sandbox identity.
packages/​desktop/​src/​main/​pluginSandbox/​contract.example.ts Adds registration example.
packages/​desktop/​src/​main/​pluginSandbox/​capture.ts Validates image capture.
packages/​desktop/​src/​main/​pluginSandbox/​capture.test.ts Tests capture scaling.
packages/​desktop/​src/​main/​localMediaPreviewProtocol.ts Registers additional schemes.
packages/​desktop/​src/​main/​historyReviewIpc.ts Configures history roots.
packages/​desktop/​src/​main/​desktopCommandHandlers.ts Clears sandbox browser data.
packages/​desktop/​src/​host/​pluginSandbox/​contract.ts Defines registration bridge.
packages/​desktop/​scripts/​run-production-build.mjs Cleans sandbox output.
packages/​desktop/​scripts/​prepare-agent-node-bundle.mjs Bundles visualize plugin.
packages/​desktop/​scripts/​mcp-apps-host-fixture/​sampling-database.mjs Verifies sampling persistence.
packages/​desktop/​scripts/​mcp-apps-host-fixture/​preload.ts Exposes fixture bridge.
packages/​desktop/​scripts/​mcp-apps-host-fixture/​guest-evaluation.ts Evaluates fixture guests safely.
packages/​desktop/​scripts/​gen-ui-runtime-assets.mjs Copies pinned Gen UI assets.
packages/​desktop/​scripts/​gen-ui-fixture/​preload.ts Exposes Gen UI fixture bridge.
packages/​desktop/​scripts/​gen-ui-fixture/​output-files.ts Prepares isolated fixture output.
packages/​desktop/​package.json Adds MCP dependencies.
packages/​client/​src/​remoteServiceAccess.ts Proxies new services.
packages/​client/​src/​remoteServiceAccess.sampling.test.ts Tests sampling proxy.
packages/​client/​src/​globals.d.ts Types sandbox preload API.
package.json Adds root Vitest dependency.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​skills/​visualize/​references/​styles.md Documents runtime styles.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​skills/​visualize/​LICENSE.md Documents asset licensing.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​skills/​visualize/​examples/​calendar.html Adds calendar example.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​skills/​visualize/​assets/​vendor/​floating-ui-dom-1.7.4.min.js.LICENSE Adds Floating UI DOM license.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​skills/​visualize/​assets/​vendor/​floating-ui-core-1.7.3.min.js.LICENSE Adds Floating UI Core license.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​skills/​visualize/​assets/​vendor/​d3-7.9.0.min.js.LICENSE Adds D3 license.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​skills/​visualize/​assets/​runtime-manifest.json Pins runtime asset hashes.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​package.json Defines visualize package.
apps/​ccbuddy-cli/​packages/​visualize-plugin/​.ccbuddy-plugin/​plugin.json Defines visualize plugin.
apps/​ccbuddy-cli/​packages/​core/​src/​tool/​executor/​types.ts Adds app-tool authorization hook.
apps/​ccbuddy-cli/​packages/​core/​src/​system-reminder/​source.ts Documents removed plugin state.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​types.ts Adds Gen UI output root.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​methods/​turn-loop.ts Refreshes MCP tools per turn.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​methods/​session-persistence-concurrency.test.ts Tests concurrent persistence.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​methods/​model-status.ts Supports non-persisted status.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​methods/​input-intent-persistence.ts Persists input source.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​methods/​index.ts Installs new runtime methods.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​methods/​events.ts Coalesces session persistence.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​methods/​context.ts Initializes Gen UI output.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​internal.ts Tracks MCP tool revisions.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​internal-turn-methods.ts Extends status options.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​internal-methods.ts Declares MCP refresh method.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​helpers/​gen-ui-output.ts Creates Gen UI directories.
apps/​ccbuddy-cli/​packages/​core/​src/​runtime/​agent-runtime.ts Adds sampling runtime API.
apps/​ccbuddy-cli/​packages/​core/​src/​plugin-reference/​catalog.ts Includes plugin UI surfaces.
apps/​ccbuddy-cli/​packages/​core/​src/​context/​types.ts Adds visualization directory context.
apps/​ccbuddy-cli/​packages/​core/​src/​context/​sections/​desktop.ts Advertises Gen UI support.
apps/​ccbuddy-cli/​packages/​core/​src/​context/​builder.ts Passes Gen UI directory.
apps/​ccbuddy-cli/​packages/​contracts/​src/​plugins/​index.ts Defines plugin surfaces.
apps/​ccbuddy-cli/​packages/​contracts/​src/​interfaces/​session.port.ts Adds input source metadata.
apps/​ccbuddy-cli/​packages/​cli/​scripts/​build.mjs Adds MCP Apps build alias.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol/​transport.ts Allows concurrent MCP UI calls.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol/​plugin-ui-surfaces.ts Lists plugin surfaces.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol/​mcp-ui/​module.ts Declares MCP UI module.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol/​mcp-ui/​index.ts Exposes MCP UI handlers.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol/​mcp-ui/​contract.test.ts Tests server scoping.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol/​mcp-ui/​contract.example.ts Adds MCP UI example.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol/​mcp-ui/​appToolsContract.ts Defines app-tool protocol.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol-v4/​transcript-hydration.ts Restores input source metadata.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol-v4/​projection-state.ts Exempts live plugin deltas.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol-v4/​event-normalizer.ts Normalizes input source.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol-v4/​commands/​input-intent.ts Propagates input source.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol-v4/​commands/​handlers/​session-flow.ts Sends source metadata.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol-v4/​cold-event-merge.ts Drops live-only cold events.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​ccbuddy-protocol-entrypoint.ts Routes MCP notifications.
apps/​ccbuddy-cli/​packages/​bootstrap/​src/​app/​runtime-config.ts Reads Gen UI output environment.
apps/​ccbuddy-cli/​.gitignore Includes visualize vendor assets.
.oxfmtrc.json Excludes generated/runtime assets.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +8 to +16
export function buildImportedHistoryTaskId(params: {
producer: CCbuddyHistoryImportProducer;
producerSessionId: string;
workspacePath: string;
}): string {
const digest = createHash("sha256")
.update(`history:${params.producer}:${params.producerSessionId}:${params.workspacePath}`)
.digest("hex")
.slice(0, 24);
Comment on lines +191 to +196
function mcpToolsSignature(descriptors: readonly McpToolDescriptor[]): string {
return descriptors
.map((tool) => `${tool.serverName}\u0001${tool.toolName}\u0001${tool.description ?? ""}`)
.sort()
.join("\n");
}
Comment on lines +11 to +14
const derivations = new Map<string, PluginUiInstanceDerivation>();
const listeners = new Set<() => void>();

export function setPluginUiInstanceDerivation(
Derive import task IDs from the canonical workspace key while preserving existing local IDs. Add adapter-level coverage for idempotent imports and independent model routing across workspaces.
Compare canonical descriptor content at the existing turn boundary so schema, visibility, timeout and UI changes refresh registrations and provider caches. Preserve object-order equivalence and schema array semantics, with 13 regression cases.
Keep row derivations and disclosure pins in one workspace-scoped cache with mounted leases and at most 30 inactive sessions. Defer page-owner cleanup until the last view releases, preserving current projections and sandbox retention. Cover eviction, stale cleanup and real Electron row and retention flows.
@loadchange
loadchange merged commit 861c05b into main Oct 1, 2026
2 checks passed
@loadchange
loadchange deleted the feat/ui-plugin-port branch October 1, 2026 12:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants