@pstdio/workbench 0.45.0-nightly.20261021143541 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","names":["workbenchMenuTargets","const","workbenchTreeTargets","workbenchRegions","workbenchViewTargets","workbenchSettingsTargets","workbenchSettingsScopes","workbenchModeLayoutTargets","WorkbenchMenuTarget","WorkbenchTreeTarget","WorkbenchViewTarget","WorkbenchSettingsTarget","WorkbenchAttachmentTarget","z","workbenchMenuTargets","workbenchModeLayoutTargets","workbenchRegions","workbenchSettingsScopes","workbenchSettingsTargets","workbenchTreeTargets","workbenchViewTargets","workbenchMenuTargetSchema","enum","workbenchTreeTargetSchema","workbenchRegionSchema","workbenchViewTargetSchema","workbenchSettingsTargetSchema","workbenchModeLayoutTargetSchema","workbenchAttachmentTargetSchema","union","workbenchSettingsScopeSchema","Localizable","CommandRef","ExtensionContextBase","ContributionDefinition","ResourceKindRef","MaybePromise","ResourceRef","ViewHierarchyParent","dockedWorkbenchRegions","const","DockedWorkbenchRegion","extensionPanelRegions","ExtensionPanelRegion","RegionSize","defaultPx","minPx","maxPx","ResourceMenuSlotDefinition","id","placement","label","access","order","ResourceKindDefinition","prefix","$prefix","icon","menuSlots","resolve","resolveMany","paths","validateAnchors","relatedOpenings","ResourceHierarchyProvider","resourceKind","parent","ctx","resource","isNavigationHref","href","protocol","URL","z","validatePageParamDefinitions","pageParamValueSchema","union","string","number","boolean","array","pageParamDefinitionsSchema","record","discriminatedUnion","object","type","literal","default","optional","values","readonly","strict","superRefine","value","ctx","error","addIssue","code","message","String","z","serializableJsonObjectSchema","contributionRefSchema","kind","Kind","object","extensionId","string","literal","id","pageRefSchema","placementRefSchema","modeRefSchema","viewRefSchema","resourceKindRefSchema","pageSlotRefSchema","page","panelRefSchema","union","commandTargetSchema","command","params","optional","z","isNavigationHref","isFileSourcePosition","FileSourcePosition","PageParams","pageParamValueSchema","extensionResourceRefSchema","commandTargetSchema","pageRefSchema","panelRefSchema","sourcePositionSchema","object","line","number","int","positive","column","optional","endLine","endColumn","refine","sectionSchema","anchors","array","id","string","heading","occurrence","nonnegative","MetadataPageTarget","kind","page","infer","resource","open","section","position","params","parent","pageTargetSchema","ZodType","lazy","literal","enum","record","value","meta","navigationOperationSchema","union","panel","navigationTargetSchema","target","href","targets","min","isFileSourcePosition","z","CommandOutcome","JsonValue","NavigationTarget","serializableJsonObjectSchema","navigationTargetSchema","notice","object","type","enum","title","string","optional","message","metadata","diagnostic","code","severity","extensionId","commandId","createCommandOutcomeSchema","jsonValue","ZodType","error","name","stack","cause","annotations","notices","array","diagnostics","failure","ok","literal","reason","data","navigation","outcome","discriminatedUnion","status","value","unknown","navigationRequests","transform","validatedCommandOutcomeSchema","json","z","JsonValue","NavigationTarget","Struct","createCommandOutcomeSchema","validatedCommandOutcomeSchema","commandSourceSchema","extensionSlotKindSchema","jsonObjectSchema","navigationTargetSchema","pageParamValueSchema","extensionResourceRefSchema","workbenchAttachmentTargetSchema","extensionSlotInvocationSchema","object","id","string","kind","context","extensionAttachmentInvocationSchema","target","mode","optional","projectId","resource","extensionRendererContextSchema","rendererId","pageParams","record","modeId","invocation","placement","enum","commandExecuteRequestSchema","min","workspaceId","params","attachment","slot","source","metadata","commandExecuteBodySchema","dispatchExtensionEventBodySchema","eventId","payload","strict","responseNavigationTargetSchema","ZodType","commandOutcomeSchema","ok","boolean","status","value","unknown","navigationRequests","array","code","reason","data","error","name","message","stack","notices","type","title","diagnostics","severity","extensionId","commandId","responseFields","eventIds","commandExecuteResponseSchema","outcome","createCommandExecutionResultSchema","jsonValue","commandExecutionResultSchema","json","CommandExecuteRequest","infer","CommandExecuteBody","CommandExecuteResponse","CommandExecutionResult","ExtensionRendererContext","DispatchExtensionEventInput","ViewFilterCondition","ViewFilterRule","attributeId","condition","value","ViewFilterGroup","conjunction","rules","groups","ViewSortDirection","ViewSort","direction","ViewFieldKind","optionConditions","VIEW_FILTER_CONDITIONS","Record","boolean","string","number","date","enum","status","user","z","VIEW_FILTER_CONDITIONS","ViewFieldKind","ViewFilterCondition","ViewFilterGroup","ViewFilterRule","ViewSort","EMPTY_VIEW_FILTER","conjunction","rules","VIEW_DAY_PATTERN","conditionIds","Set","Object","values","flat","viewFilterConditionSchema","enum","viewFilterRuleSchema","object","attributeId","string","min","condition","value","union","boolean","number","array","optional","advancedFilterGroupSchema","strictObject","viewFilterGroupSchema","extend","groups","refine","filter","length","message","viewSortSchema","direction","viewSortsSchema","max","viewFilterValueKind","kind","const","valueNeeds","none","day","text","options","valueFits","ReturnType","undefined","Number","isFinite","test","Array","isArray","ViewRuleField","id","filterable","sortable","canSortViewField","field","Pick","ruleProblem","rule","fields","find","map","join","conditions","legacyList","includes","valueKind","unknown","some","option","findViewFilterProblem","flatMap","group","problem","findViewSortsProblem","sorts","sort","Localizable","ViewFilterGroup","ViewSort","CommandRef","RendererCallback","JsonValue","Struct","RendererContributionBase","RendererContext","ResourceRef","ViewToolbarAction","DataTableRendererResourceRef","DataTableRendererSettings","grouping","rowNumbers","wrapRows","showStats","hiddenColumns","columnOrder","DEFAULT_DATA_TABLE_SETTINGS","DataTableRendererSavedView","id","title","settings","Partial","filter","sorts","DataTableRendererQueryParams","renderer","DataTableRendererThemeColor","light","dark","foreground","DataTableRendererColumnStat","type","bins","limit","DataTableRendererColumnRenderer","stops","Array","value","color","categories","DataTableRendererColumn","label","groupable","filterable","description","icon","hidden","stat","DataTableRendererRow","values","Record","resource","DataTableRendererQueryResult","rows","columns","DataTableRendererRowAction","destructive","command","TParams","DataTableRendererSelectionAction","DataTableRendererRowActivationHandler","row","DataTableRendererContribution","toolbarActions","query","selectionMode","selectionActions","rowActions","onRowActivate","initialPageSize","pageSizeOptions","defaultSettings","defaultFilter","defaultSorts","defaultViews","defaultActiveViewId","Localizable","DataTableRendererSettings","KanbanRendererViewSettings","ViewFilterGroup","ViewSort","DEFAULT_DATA_TABLE_SETTINGS","EMPTY_VIEW_FILTER","KanbanViewSettings","DEFAULT_KANBAN_VIEW_SETTINGS","viewMode","columnGrouping","rowGrouping","displayProperties","DeclaredView","id","title","settings","Partial","TSettings","filter","sorts","DeclaredViews","defaultSettings","defaultFilter","defaultSorts","defaultViews","builtInViews","base","record","length","views","builtIn","map","view","kanbanBuiltInViews","attributes","type","kind","dataTableBuiltInViews","z","extensionPanelRegions","extensionResourceRefSchema","relatedResourceOpeningSchema","object","resource","autoOpen","boolean","optional","region","enum","open","LocalizedString","$l10n","default","Localizable","T","l10n","key","defaultValue","undefined","isLocalizedString","value","isLocalizedString","isNavigationHref","isFileSourcePosition","NavigationTarget","ResourceRef","isRecord","value","Record","Boolean","Array","isArray","isContributionRef","kind","id","isResource","type","isOpenIntent","undefined","isPageTarget","ancestors","Set","page","has","resource","section","position","open","parent","next","add","isPanelTarget","panel","validPanel","isItemTarget","Exclude","href","target","command","params","isNavigationTarget","targets","length","every","withExtensionOwner","extensionId","ref","Ref","toPageTarget","Extract","projectId","qualifyResource","qualifyNavigationTarget","Error","map","item","isRecord","isFileSourcePosition","isNavigationTarget","SerializedError","serializeCommandError","error","ancestors","shape","value","Error","name","message","stack","cause","undefined","shapes","WeakMap","ReturnType","errorShape","existing","get","result","set","source","String","JSON","parse","stringify","this","_key","normalized","length","at","pop","includes","push","AgentInfo","AgentModel","HarnessParamsInfo","TerminalSessionOperation","TerminalSessionResult","CreateNotificationInput","Notification","NotificationStatus","CommandNotice","CommandOutcome","ExtensionBlobRef","JsonObject","JsonValue","NavigationTarget","PageLocation","PageParamValue","ResourceRef","ExtensionHarnessInput","WEBVIEW_HOST_CAPABILITY_VERSION","WEBVIEW_DECLARABLE_CAPABILITIES","const","WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES","ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES","WEBVIEW_HOST_CAPABILITIES","filter","capability","WebviewHostCapability","WebviewDeclarableCapability","WebviewScopedDeclarableCapability","VersionedWebviewCapabilityDeclaration","WebviewCapabilityDeclaration","WebviewCommandsExecuteParams","commandId","params","workspaceId","resource","metadata","WebviewCommandsStreamParams","operation","streamId","bytes","WebviewCommandStreamEvent","type","data","outcome","WebviewNavigationOpenParams","target","WebviewNotificationShowParams","level","title","message","WebviewNotificationActionParams","Omit","WebviewNotificationResolveParams","id","dedupeKey","status","Extract","WebviewNotificationDismissParams","Pick","WebviewPreferencesGetParams","name","scope","scopeId","WebviewPreferencesSetParams","value","Record","WebviewPageParamsUpdateParams","Readonly","WebviewExtensionSettingKeyParams","key","WebviewExtensionSettingSetParams","WebviewFileScope","WebviewFilesUploadParams","Uint8Array","ArrayBuffer","mimeType","WebviewFilesListParams","WebviewFilesDeleteParams","WebviewArtifactsReadParams","op","mount","prefix","path","WebviewArtifactFile","size","mediaType","WebviewKeyboardEventParams","code","ctrlKey","metaKey","altKey","shiftKey","repeat","WebviewHostCapabilityParams","harnessId","model","WebviewHostCapabilityResults","harnesses","models","schema","defaults","selection","WebviewResourceAction","accepted","location","resolved","notifications","files","label","icon","iconSrc","description","isDisabled","separatorBefore","group","WebviewHostCapabilityResult","Capability","Params","Exclude","EXTENSION_EVENTS_SCOPE","RESOURCE_ACTIONS_EVENTS_SCOPE","artifactMountId","mount","id","WebviewHostCapability","WebviewScopedDeclarableCapability","WEBVIEW_DECLARABLE_CAPABILITIES","WEBVIEW_HOST_CAPABILITIES","WEBVIEW_HOST_CAPABILITY_VERSION","WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES","HostCapabilityRequest","ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES","WebviewDeclarableCapability","WebviewCapabilityDiagnosticCode","WebviewCapabilityDiagnostic","capability","code","message","severity","HostCapability","params","TParams","Promise","TResult","HostCapabilityRegistry","Partial","Record","CreateHostCapabilityGateInput","capabilities","declaredCapabilities","onDiagnostic","diagnostic","publicCapabilityNames","Set","scopedCapabilityNames","isPublicCapability","name","has","isScopedCapability","parseWebviewCapabilityDeclaration","nameAndScope","versionText","split","scopeIndex","indexOf","slice","scope","undefined","version","Number","validateDeclarationShape","parsed","ReturnType","Boolean","unsupportedCapability","unsupportedVersion","toString","undeclaredCapability","validateWebviewCapabilityDeclarations","diagnostics","allowed","allowedScopes","Map","declaration","push","add","scopes","get","set","validateWebviewCapabilityNames","requestScope","request","mount","length","createHostCapabilityGate","input","emit","deny","Object","assign","Error","data","call","method","handler","WebviewHostProps","createWebviewHostProps","props","Partial","Record","locale","projectId","themePreference","resource","pageLocation","pageParams","translations","defaultLocale","bundle","defaultBundle","RuntimeErrorPayload","isRecord","value","Record","safeStringify","json","JSON","stringify","length","String","normalizeRuntimeError","Error","message","stack","undefined","isRecord","HostCapabilityReply","normalizeRuntimeError","capabilityReply","run","ok","value","error","details","code","message","data","extensionIframeAllow","capabilities","some","capability","ThemePreference","collectChakraThemeVariables","document","computed","getComputedStyle","documentElement","variables","Record","index","length","name","item","startsWith","getPropertyValue","trim","resolveActiveTheme","fallback","value","getAttribute","colorMode","postThemeToFrame","iframe","HTMLIFrameElement","theme","contentWindow","postMessage","type","WebviewHostProps","CSSProperties","useEffect","useRef","useState","host","ExtensionViewDescriptor","GuestApi","HostApi","HostCapabilityRegistry","HostCapabilityRequest","ThemePreference","WebviewCapabilityDiagnostic","WebviewPointerEvent","createHostCapabilityGate","createWebviewHostProps","normalizeRuntimeError","capabilityReply","HostEventPublisher","extensionIframeAllow","collectChakraThemeVariables","resolveActiveTheme","ExtensionFrameProps","sizing","view","props","Partial","Record","theme","capabilities","onKeyboardEvent","event","WebviewKeyboardEventParams","hostEvents","onReady","onError","error","message","stack","onDiagnostics","diagnostics","title","GuestRemote","Pick","hostEvent","iframeStyle","border","display","flex","height","minHeight","width","frameShellStyle","position","EXTENSION_IFRAME_SANDBOX","ExtensionFrame","extensionProps","iframeRef","HTMLIFrameElement","remoteRef","initializedRef","connectedWindowRef","Window","propsRef","themeRef","capabilitiesRef","onKeyboardEventRef","hostEventsRef","declaredCapabilitiesRef","webview","onReadyRef","onErrorRef","onDiagnosticsRef","frameEpoch","setFrameEpoch","contentWidth","setContentWidth","current","iframe","onFrameLoad","contentWindow","epoch","addEventListener","removeLoadListener","removeEventListener","stylesAtConnect","styles","moduleUrlAtConnect","moduleUrl","reportDiagnostics","length","createCapabilityGate","declaredCapabilities","onDiagnostic","diagnostic","hostApi","dispatchPointerEvent","isConnected","type","bounds","getBoundingClientRect","dispatchEvent","PointerEvent","bubbles","composed","cancelable","clientX","left","clientWidth","clientY","top","clientHeight","contentWidthChanged","Number","isFinite","dispatchKeyboardEvent","document","KeyboardEvent","ready","runtimeError","payload","call","request","connect","connection","location","replace","runtimeUrl","then","conn","remote","bind","init","themeVariables","extensionId","catch","unbind","propsUpdate","themeUpdate","variables","window","MutationObserver","frame","schedule","cancelAnimationFrame","requestAnimationFrame","observer","options","attributeFilter","attributes","observe","documentElement","body","disconnect","label","colorScheme","WebviewCapabilityDiagnostic","EXTENSION_HOST_LOG_PREFIX","ExtensionHostDiagnostic","event","extensionId","contributionId","projectId","code","capability","message","stack","logExtensionHostDiagnostic","diagnostic","write","console","info","JSON","stringify","createWebviewDiagnostics","view","id","log","onReady","onError","error","onDiagnostics","diagnostics","HostEventMessage","HostEventPublisher","emit","message","bind","sink","onDisconnect","listener","unbind","createHostEventPublisher","pending","disconnectListeners","Set","push","next","length","shift","add","delete","Box","Center","Stack","Text","resolvePageParams","createWebviewDiagnostics","ExtensionFrame","ExtensionFrameProps","useEffect","useState","WorkbenchCore","BridgeWebviewFrameProps","Omit","workbench","BridgeWebviewFrame","props","$","_c","frameProps","view","pageState","setPageState","pages","store","getState","t0","subscribe","state","t1","t2","t3","activePageId","location","page","getPage","undefined","params","t4","pageLocation","pageParams","pageProps","error","setError","t5","diagnostics","t6","sizing","t7","t8","t9","onReady","t10","nextError","onError","message","t11","onDiagnostics","t12","_c","TerminalHostEvent","TerminalSessionOperation","TerminalSessionResult","HostCapability","HostEventPublisher","WorkbenchTerminalController","TERMINAL_SESSION_EVENT_SCOPE","CreateTerminalSessionCapabilityInput","terminal","hostEvents","createTerminalSessionCapability","input","emit","payload","scope","params","operation","sessionId","open","request","write","data","accepted","resize","cols","rows","kill","signal","unsubscribeTerminal","unsubscribeDisconnect","closed","close","subscribe","onData","chunk","kind","onExit","exit","code","onDisconnect","extensionResourceRefSchema","jsonObjectSchema","isNavigationTarget","NavigationTarget","z","action","discriminatedUnion","object","kind","literal","id","string","label","target","custom","primary","boolean","optional","command","params","destructive","href","webviewNotificationActionParamsSchema","title","min","body","enum","priority","related","array","actions","dedupeKey","expiresAt","snoozedUntil","metadata","isNavigationTarget","extensionResourceRefSchema","jsonObjectSchema","pageParamValueSchema","WebviewHostCapability","WebviewHostCapabilityParams","isNavigationTarget","NavigationTarget","z","webviewNotificationActionParamsSchema","WebviewHostCapabilityError","Error","constructor","code","message","data","Record","name","identifier","string","min","empty","object","strict","optional","command","commandId","params","workspaceId","resource","metadata","streamId","scope","enum","scopeId","preference","notificationIdentity","id","dedupeKey","status","refine","input","undefined","binary","union","instanceof","Uint8Array","ArrayBuffer","fileScope","type","terminalId","sessionId","terminalRequest","cols","number","int","positive","rows","array","cwd","env","record","schemas","harnessId","model","discriminatedUnion","operation","literal","key","extend","bytes","target","custom","nullable","title","level","value","boolean","unknown","request","signal","mimeType","op","mount","prefix","path","ZodType","parseWebviewCapabilityParams","capability","Capability","result","safeParse","success","issues","error","map","issue","String","isNavigationTarget","CommandExecutionResult","CommandStreamClientEvent","CommandOutcome","WebviewCommandsExecuteParams","WebviewCommandsStreamParams","commandExecutionResultSchema","serializeCommandError","HostEventPublisher","errorOutcome","code","reason","ok","status","failureOutcome","error","serialized","message","cause","undefined","fail","Object","assign","Error","MAX_STREAMS","MAX_UNREAD_BYTES","withFrameSignal","hostEvents","run","signal","AbortSignal","Promise","T","controller","AbortController","unsubscribe","onDisconnect","abort","StreamCapabilityDeps","stream","input","AsyncIterable","publish","response","createWebviewCommandStreamHandler","streams","Map","unread","stop","emit","deps","streamId","operation","get","state","Number","isSafeInteger","bytes","has","size","ended","payload","scope","finish","outcome","notify","delete","type","set","_","_streamId","commandId","body","receive","event","parse","TextEncoder","encode","JSON","stringify","data","byteLength","accepted","const","CommandOutcomeError","validatedCommandOutcomeSchema","MaybePromise","WebviewHostCapability","WebviewHostCapabilityParams","HostCapability","HostEventPublisher","z","ExtensionWebviewHostAdapters","createTerminalSessionCapability","parseWebviewCapabilityParams","WebviewHostCapabilityError","createWebviewCommandStreamHandler","withFrameSignal","commandResponse","object","outcome","passthrough","streamHandlers","WeakMap","ReturnType","streamHandler","events","handler","get","set","after","result","T","done","Promise","then","capability","name","Name","run","params","input","commandExecution","adapters","executeCommand","hostEvents","undefined","request","response","signal","resolve","parse","error","commandStreaming","streamCommand","stream","publish","commandCompleted","createExtensionWebviewHostCapabilities","navigation","pageParams","placement","notifications","settings","preferences","files","artifacts","terminal","terminalCapability","readHarnesses","harnesses","read","bind","resourceActions","open","target","location","update","value","close","show","type","level","title","message","create","status","scope","all","key","delete","upload","list","Record","NavigationTarget","ExtensionNavigationTarget","isNavigationTarget","qualifyNavigationTarget","NavigationTargetCommand","WorkbenchPanelRegion","ToWorkbenchNavigationTargetInput","commandIdOf","command","Extract","kind","commandTargetOf","target","extensionId","projectId","region","toCommandTarget","input","override","commandId","id","args","params","NavigationOperation","toWorkbenchNavigationTarget","Error","targets","map","item","PreferenceScopeRef","PreferenceValue","WorkbenchCore","WebviewOwnedPreferences","get","name","scope","Promise","set","value","createWebviewPreferencesAdapter","input","workbench","extensionId","ownedPreferences","warn","message","registry","preferences","owner","Error","registered","schema","getSchema","ownerId","console","Boolean","getValue","getOwnedValue","setValue","setOwnedValue","WebviewHostCapabilityParams","RESOURCE_ACTIONS_EVENTS_SCOPE","HostEventPublisher","WorkbenchCore","orderMenuEntries","resolveMenuEntries","resolveResourceActionMenu","subscribeResourceActionChanges","createChangeNotifier","workbench","hostEvents","stop","pending","emit","queueMicrotask","scope","payload","type","unsubscribe","stopOnDisconnect","onDisconnect","undefined","createWebviewResourceActions","projectId","watchChanges","input","menu","resource","entries","operation","entry","find","id","key","run","disabled","Error","map","label","commandId","icon","iconSrc","description","isDisabled","separatorBefore","group","HostEventPublisher","WorkbenchCore","WorkbenchPanelInstance","toWorkbenchNavigationTarget","ExtensionWebviewHostAdapters","createExtensionWebviewHostCapabilities","createWebviewPreferencesAdapter","WebviewOwnedPreferences","createWebviewResourceActions","CreateWorkbenchWebviewHostAdaptersInput","workbench","placement","extensionId","projectId","ownedPreferences","warn","message","hostEvents","createWorkbenchWebviewHostAdapters","input","resourceActions","executeCommand","request","signal","outcome","ok","status","value","commands","commandId","params","resource","placementIdentity","close","closePlacement","undefined","pageParams","update","patch","state","pages","store","getState","location","Error","page","pageLocations","updateParams","navigation","open","target","openTarget","notifications","show","notice","type","captureActionError","title","instanceId","level","metadata","preferences","terminal","createWorkbenchWebviewHostCapabilities","WebviewHostProps","ThemePreference","createHostEventPublisher","HostEventPublisher","WorkbenchCore","WorkbenchPanelInstance","WorkbenchPanelRenderInput","WorkbenchRendererRegistration","BridgeWebviewFrame","ExtensionWebviewHostAdapters","createExtensionWebviewHostCapabilities","createWorkbenchWebviewHostAdapters","BridgeWebviewRenderContext","workbench","webviewId","extensionId","placement","hostEvents","CreateBridgeWebviewHostAdapters","context","CreateBridgeWebviewProps","Partial","Record","CreateBridgeWebviewTheme","CreateBridgeWebviewRendererInput","createHostAdapters","createProps","createTheme","BRIDGE_WEBVIEW_RENDERER_ID","BridgeWebviewConfig","title","runtimeUrl","moduleUrl","styles","capabilities","isBridgeWebviewConfig","value","Array","isArray","config","createPlacementProps","resource","createLightTheme","hostEventPublishersByWorkbench","WeakMap","Map","getBridgeWebviewHostEventPublisher","instance","hostEventsByWidget","get","set","key","instanceId","renderBridgeWebviewFrame","input","sizing","ownerId","webview","id","label","renderBridgeWebview","panel","region","undefined","panelId","createBridgeWebviewRenderer","render","renderInput","LocalizableString","isLocalizedString","Localizable","text","value","fallback","undefined","default","$l10n","text","isLocalizedString","CommandExecutionResult","getCommandValue","unwrapCommandValue","result","response","Partial","outcome","WorkbenchExtensionMetadata","text","WorkbenchCommandExecutionContext","WorkbenchExtensionCommandContext","runResourceMutation","context","command","params","Record","execution","persist","Promise","mutation","resourceMutation","id","idParam","resource","type","resourceType","extensionId","projectId","kind","workbench","commandPalette","requestConfirmation","title","rawLabel","labelParam","undefined","trim","preview","resources","begin","removed","label","result","commit","error","rollback","text","CommandExecuteRequest","CommandExecutionResult","WorkbenchExtensionMetadata","ResourceRef","WorkbenchCommandExecutionContext","WorkbenchModuleContext","WorkbenchPanelRegion","resolveCommandResourceParams","unwrapCommandValue","toWorkbenchNavigationTarget","runResourceMutation","WorkbenchExtensionCommandContext","metadata","Pick","executeCommand","commandId","body","signal","AbortSignal","Promise","prepareCommandArgs","args","context","onArgsChange","projectId","workbench","ExecuteWorkbenchExtensionCommandInput","region","workspaceId","Record","params","resource","slot","createExtensionSlot","input","id","kind","NonNullable","executeWorkbenchExtensionCommandResponse","reportNavigationError","notifications","captureActionError","response","source","outcome","Partial","status","target","navigationRequests","navigation","openTarget","error","executeWorkbenchExtensionCommand","command","commands","find","candidate","persist","WorkbenchExtensionCommandPaletteResourceRecord","NavigationTarget","ResourceRef","text","CommandPaletteResourceResult","Disposable","toWorkbenchNavigationTarget","WorkbenchExtensionCommandContext","executeWorkbenchExtensionCommand","ResourceItem","id","label","description","icon","keywords","target","ProviderQueryResult","items","isProviderQueryResult","value","Array","isArray","commandIdOf","command","Extract","kind","extensionId","activateTarget","context","record","item","params","workbench","commandPaletteResources","refresh","navigation","openTarget","targetResource","resource","targets","find","step","undefined","toResult","groupLabel","projectId","group","activate","registerWorkbenchExtensionCommandPaletteResources","records","disposables","title","push","registerProvider","refreshEventIds","query","limit","signal","activeResource","getActiveResource","queryHandlerId","modeId","modes","getActiveModeId","providerId","map","dispose","index","length","text","WorkbenchExtensionControlsRendererRecord","controlsQueryResultSchema","text","Disposable","ResourceRef","WorkbenchExtensionCommandContext","createExtensionSlot","executeWorkbenchExtensionCommand","localize","value","fallback","Parameters","WorkbenchExtensionControlsAdapter","resolveResource","record","registerControlsRenderer","context","adapter","slot","id","kind","projectId","controlsRendererId","run","commandId","params","Record","resource","signal","AbortSignal","pageParams","PageParams","renderer","rendererId","invocation","placement","metadata","Promise","resolve","undefined","workbench","views","registerView","title","icon","body","emptyTitle","emptyDescription","defaultValues","executeQuery","queryHandlerId","result","safeParse","success","fields","error","issues","map","issue","path","join","message","Error","extensionId","data","updateValue","valueChangeHandlerId","controlId","values","then","apply","applyHandlerId","reset","resetHandlerId","controlIds","registerWorkbenchExtensionControlsRenderers","records","disposables","push","dispose","index","length","localize","text","Localizable","commandRefId","CommandParamSchema","LocalizableText","ParamLocalizer","value","fallback","ContributedParamSchema","Record","type","label","description","options","localizeParamSchema","params","localize","ownerExtensionId","undefined","Object","fromEntries","entries","map","id","descriptor","Array","isArray","localizeOptionSource","source","command","extensionId","valueField","labelField","commandId","WorkbenchExtensionDataTableRendererRecord","text","localizeParamSchema","mapViewToolbarActions","record","Pick","toolbarActions","map","action","id","label","icon","presentation","commandId","args","params","input","extensionId","submitLabel","disabled","when","text","DataTableRendererSettings","dataTableBuiltInViews","WorkbenchExtensionDataTableRendererRecord","text","createElement","CollectionViewsProvider","DataTableRendererColumn","DataTableRendererQueryResult","DataTableRendererRow","Disposable","ResourceRef","WorkbenchIcon","WorkbenchExtensionCommandContext","createExtensionSlot","executeWorkbenchExtensionCommand","mapViewToolbarActions","localize","value","fallback","Parameters","WorkbenchExtensionDataTableRendererAdapter","resolveRowResource","record","row","id","values","Record","resource","createViewsProvider","WireColumn","NonNullable","toColumn","column","label","description","undefined","icon","name","size","isQueryResult","rows","Array","columns","Boolean","isArray","toRow","registerRenderer","context","adapter","builtIns","originalRows","WeakMap","slot","kind","projectId","dataTableRendererId","run","commandId","params","modeId","signal","AbortSignal","pageParams","PageParams","renderer","rendererId","invocation","placement","metadata","workbench","views","registerView","title","body","resourceKind","toolbarActions","map","initialPageSize","pageSizeOptions","defaultSettings","settings","defaultFilter","defaultSorts","defaultViews","view","defaultActiveViewId","viewsProvider","selectionMode","selectionActions","action","destructive","rowIds","then","emptyTitle","emptyDescription","executeQuery","filter","sorts","queryHandlerId","mapped","set","rowActions","rowId","refreshView","onRowActivate","rowActivationHandlerId","get","registerWorkbenchExtensionDataTableRenderers","records","disposables","dispose","index","length","text","isQueryResult","ExtensionCommandPaletteContribution","ExtensionMenuContribution","WorkbenchExtensionMetadata","isLocalizedString","Localizable","Command","MenuItem","MenuPath","localizeParamSchema","placementOrder","first","default","last","Record","NonNullable","ExtensionContributionPlacement","WorkbenchExtensionMenuSlotConfig","menuPath","group","overflowLabel","resourceGroup","id","label","WorkbenchExtensionMenuWhenBuilder","contribution","WorkbenchExtensionStringResolver","value","extensionId","WorkbenchExtensionMenuRegistration","command","menuItem","targetCommandId","WorkbenchExtensionCommandPaletteRegistration","UnresolvedWorkbenchExtensionMenuContribution","targetId","emptyWorkbenchExtensionMetadata","commands","commandPaletteContributions","diagnostics","extensions","menuContributions","modes","pages","views","viewMenus","placements","resourceKinds","navigationItems","navigationTrees","statusBarItems","settingsPanels","settingsDefinitions","CommandContributionMetadata","Pick","defaultWorkbenchExtensionCommandId","defaultWorkbenchExtensionPaletteCommandId","contributionOrder","placement","index","text","undefined","$l10n","createMenuItem","input","commandId","slot","when","disabledWhen","resolveString","sourceCommandId","icon","args","params","order","disabledReason","createPaletteItem","buildWorkbenchExtensionMenuRegistrations","metadata","menuSlotsById","ReadonlyMap","menuTargetsById","createCommandId","createWhenExpression","registrations","unresolved","forEach","target","get","slotId","push","find","candidate","category","resourceMutation","description","buildWorkbenchExtensionCommandPaletteRegistrations","CommandExecuteRequest","CommandExecutionResult","resourceKey","text","Disposable","FileRendererContent","FileRendererRefreshEnvelope","FileRendererRefreshOrigin","ResourceRef","WorkbenchModuleContext","unwrapCommandValue","InternalWorkbenchExtensionMetadata","WorkbenchExtensionMetadata","executeWorkbenchExtensionCommandResponse","attachFileStorageVersions","fileStorageVersions","FileRendererRecord","NonNullable","RegisterWorkbenchExtensionFileRenderersInput","executeCommand","commandId","body","signal","AbortSignal","Promise","metadata","projectId","workbench","slotContext","input","rendererId","resource","id","kind","const","context","resourceType","type","resourceId","executeFileCommand","extra","Record","pageParams","PageParams","ext","params","renderer","invocation","placement","slot","revisionFromValue","value","undefined","revision","fileRendererRefreshEnvelopeFromCommand","response","origin","fileRendererOrigin","candidate","Partial","instanceId","operationId","fileRendererResourceKey","outcome","ok","registerFileRenderer","record","views","registerView","title","icon","resourceKind","load","result","loadHandlerId","save","saveHandlerId","content","loaded","registerWorkbenchExtensionFileRenderers","disposables","fileRenderers","push","dispose","index","length","slotContext","text","CollectionBadgeItem","KanbanRendererRow","toWorkbenchNavigationTarget","collectionBadgeTarget","row","itemsAttributeId","itemId","extensionId","projectId","items","attributes","item","find","id","target","undefined","KanbanRendererBoardColumnConfig","WireBoardColumnConfig","createElement","WorkbenchIcon","ReactKanbanRendererContribution","KanbanRendererContribution","Localizer","BoardColumnConfig","ReturnType","NonNullable","createBoardActionIcon","icon","BoardActionIcon","props","size","name","toWorkbenchBoardColumnConfig","config","localize","color","canDragIn","canDragOut","canCreate","actions","map","action","id","label","KanbanRendererBoardColumnConfig","WireBoardColumnConfig","WorkbenchExtensionKanbanRendererRecord","KanbanRendererCreateField","KanbanRendererCreateFieldType","ResourceRef","ReactAttributeDescriptor","AttributeDescriptor","ReactKanbanRendererContribution","KanbanRendererContribution","WorkbenchExtensionCommandContext","createExtensionSlot","executeWorkbenchExtensionCommand","KanbanRendererRow","Awaited","ReturnType","RowAction","NonNullable","QueryResult","attributes","boardColumnConfigs","Record","rows","Localizer","value","fallback","MutableAttributeSource","source","set","UnknownDisplayReporter","attributeId","kind","isQueryResult","Array","isArray","localizeAttributes","record","localize","decorate","attribute","reportUnknownDisplay","map","display","knownDisplay","itemsAttributeId","const","undefined","id","resolveType","type","options","option","label","base","createMutableAttributeSource","initial","snapshot","listeners","Set","signature","JSON","stringify","getSnapshot","subscribe","listener","add","delete","nextSignature","isExtensionResource","resource","Boolean","defaultResolveRowResource","_","row","defaultResolveRowActionResource","fromRow","resourceKind","title","toWorkbenchRow","resolveResource","candidate","mergeParams","items","Object","assign","filter","item","asParams","hasCommandParameters","params","keys","length","CREATE_FIELD_TYPES","ReadonlySet","toCreateField","descriptor","has","icon","optional","placeholder","multiple","accept","description","required","defaultValue","toCreateFields","entries","createRow","flatMap","field","createKanbanRendererSlot","context","projectId","kanbanRendererId","executeKanbanRendererCommand","commandId","signal","AbortSignal","pageParams","PageParams","commandResource","workbench","getPrimaryResource","renderer","rendererId","invocation","placement","slot","metadata","kanbanRendererRowActionCommandId","action","registerRowActionCommands","rowActions","target","commands","getCommand","command","registerCommand","execute","args","executionContext","runDefaultRowAction","rowId","commandPalette","requestParams","Promise","resolve","executeCommand","then","asParams","KanbanRendererBoardColumnConfig","WireBoardColumnConfig","KanbanRendererRow","WireRow","renderBadgeListDisplay","kanbanBuiltInViews","WorkbenchExtensionKanbanRendererRecord","text","createElement","Disposable","KanbanRendererCreateSubmission","KanbanRendererQueryState","ResourceRef","WorkbenchIcon","ReactAttributeDescriptor","AttributeDescriptor","toWorkbenchNavigationTarget","WorkbenchExtensionCommandContext","collectionBadgeTarget","WorkbenchExtensionKanbanRendererAdapter","toWorkbenchBoardColumnConfig","createMutableAttributeSource","defaultResolveRowActionResource","defaultResolveRowResource","executeKanbanRendererCommand","isQueryResult","Localizer","mergeParams","registerRowActionCommands","runDefaultRowAction","toCreateFields","toWorkbenchRow","mapViewToolbarActions","ColumnConfigRecord","Record","createRowActionIcon","icon","name","size","undefined","toCreateRowConfig","record","localize","createRow","title","submitLabel","fields","labels","cancel","properties","submitError","removeFile","submitWithoutOpening","toRowClick","context","adapter","resolveRowResource","row","toActivatedRow","rowActivationHandlerId","resource","onRowClick","toCreateRowHandler","runMutation","commandId","params","Promise","activateCreatedRow","contribution","submission","values","columnParam","columnId","attributesParam","attributeValues","created","onAfterCreate","openCreatedRow","Partial","id","attributes","toRowContextMenuActions","resolveRowActionResource","actions","rowActions","length","map","action","runDefault","key","label","onClick","executeRowAction","registerWorkbenchExtensionKanbanRenderers","records","disposables","resolveLabel","value","fallback","Parameters","decorate","attribute","withBuiltInDisplay","display","kind","render","target","itemsAttributeId","extensionId","projectId","workbench","navigation","openTarget","decorateAttribute","afterMutation","onAfterMutation","then","result","reportUnknownDisplay","attributeId","notifications","show","level","message","wireAttributes","builtIns","originalRows","WeakMap","columnConfigs","latestQueryId","rowCache","Map","signature","rowResource","get","onRowActivate","push","views","registerView","body","resourceKind","toolbarActions","listRowActions","storageScope","source","defaultSettings","settings","defaultFilter","defaultSorts","viewsProvider","createViewsProvider","defaultViews","view","defaultActiveViewId","emptyTitle","emptyDescription","hideToolbar","getBoardColumnConfig","groupKey","executeQuery","state","signal","queryId","queryHandlerId","filter","sorts","pageParams","mapRows","rows","nextCache","candidate","JSON","stringify","cached","mapped","set","Array","isArray","nextAttributes","boardColumnConfigs","onAttributeChange","attributeChangeHandlerId","rowId","onMove","moveHandlerId","move","onCreateRow","onColumnAction","columnActionHandlerId","actionId","getRowContextMenuActions","dispose","index","text","TreeContext","executeWorkbenchExtensionCommand","ExtensionTreeNode","ExtensionTreeRendererRecord","ExtensionTreeResource","RegisterWorkbenchExtensionTreeRenderersInput","slotContext","input","modeId","projectId","resource","treeId","id","kind","const","context","resourceType","type","resourceId","createQueryParams","record","ctx","node","workbench","modes","getActiveModeId","renderer","rendererId","pageParams","invocation","placement","state","filter","executeCallback","commandId","params","Record","signal","AbortSignal","slot","executeTreeActionCommand","rendererParams","metadata","TreeContext","TreeNode","InternalWorkbenchExtensionMetadata","WorkbenchExtensionMetadata","ExtensionTreeRendererRecord","ExtensionTreeViewRecord","HostTreeDefaultNodesInput","ctx","record","panel","HostTreeDefaultNodesResolver","input","Promise","ResolveHostTreeDefaultInput","treeViews","ResolveHostTreeHeaderInput","getHostTreeHeaderNodes","ResolveHostTreeFooterInput","getHostTreeFooterNodes","treeViewsFor","metadata","panels","flatMap","panelMenus","filter","renderer","kind","id","resolveTreeView","viewId","find","length","undefined","resolveHostTreeHeaderNodes","hostTreeHeader","resolveHostTreeFooterNodes","hostTreeFooter","text","ResourceRef","ExtensionTreeRendererRecord","extensionTreeStructure","record","resource","structure","map","section","id","label","collapsible","hiddenByDefault","canHide","loading","resourceNode","nodes","type","icon","selected","text","CommandExecuteRequest","commandRefId","text","Disposable","NavigationTarget","ResourceRef","TreeAction","TreeContext","TreeNode","TreeViewSection","WorkbenchModuleContext","toWorkbenchNavigationTarget","InternalWorkbenchExtensionMetadata","WorkbenchExtensionMetadata","localizeParamSchema","createQueryParams","executeCallback","executeTreeActionCommand","ExtensionTreeAction","ExtensionTreeNode","ExtensionTreeRendererRecord","ExtensionTreeResource","ExtensionTreeSection","ExtensionTreeTarget","TargetCommandArgs","HostTreeDefaultNodesResolver","resolveHostTreeFooterNodes","resolveHostTreeHeaderNodes","treeViewsFor","extensionTreeStructure","RegisterWorkbenchExtensionTreeRenderersInput","executeCommand","commandId","body","Promise","getHostTreeFooterNodes","getHostTreeHeaderNodes","metadata","projectId","resolveNodeResource","resource","workbench","toActionParams","params","fallback","Record","Array","isArray","toRecordParams","undefined","createTreeMapper","input","record","originalNodes","WeakMap","runnerCommandId","id","resolveResource","resolved","mapEmptyState","section","emptyState","title","description","icon","mapTarget","target","node","ctx","commandTargetOf","commandTarget","Extract","kind","const","args","command","extensionId","nodeId","treeId","mapAction","action","resourceMutation","commands","find","label","submitLabel","when","disabled","run","actionParams","refresh","mapNode","mapped","selected","iconColor","badge","iconTooltip","tooltip","rowVariant","actions","map","contextMenuActions","collapsible","children","child","contextValue","hiddenByDefault","canHide","canDrag","canDrop","set","mapSections","sections","nodes","mapNodes","isTreeSectionArray","value","every","isTreeNodeArray","hostNodeSection","length","canReorder","registerTree","mapper","treeViews","commandDisposable","registerCommand","execute","rawArgs","result","view","views","listViews","refreshView","treeDisposable","registerView","getStructure","structure","searchable","searchPlaceholder","defaultExpandedNodeIds","defaultExpandedSectionIds","getHeader","hostHeader","headerHandlerId","signal","extensionHeader","getBody","bodyHandlerId","getFooter","hostFooter","footerHandlerId","extensionFooter","moveNode","moveHandlerId","source","originalSource","get","originalTarget","position","getChildren","childrenHandlerId","originalNode","dispose","registerWorkbenchExtensionTreeRenderers","disposables","treeRenderers","push","index","text","WorkbenchExtensionMetadata","NavigationTarget","ExtensionNavigationTarget","contributionRefId","text","Disposable","NavigationTreeOwner","NavigationTreeSlot","TreeNode","TreeViewSection","WorkbenchModuleContext","navigationSlotRootSectionId","toWorkbenchNavigationTarget","NavigationItem","NavigationTree","RegisterWorkbenchExtensionNavigationItemsInput","createWhenExpression","when","metadata","Pick","workbench","toOwner","ref","kind","id","extensionId","isVisible","item","expression","context","matches","toNode","label","icon","canHide","canReorder","target","action","toSections","items","sections","Map","group","undefined","slot","section","get","collapsible","Boolean","nodes","push","set","values","groupItems","groups","owner","key","defaultExpandedGroupIds","Set","flatMap","registerItems","input","navigationItems","map","first","resourceDependent","some","resourceType","length","navigationTrees","registerContribution","sourceExtensionId","declarationIndex","indexOf","defaultExpandedSectionIds","resolveResource","getSections","listActions","category","registerTrees","tree","viewId","view","idScope","resourceScope","registerWorkbenchExtensionNavigationItems","text","relatedResourceOpeningSchema","text","unwrapCommandValue","InternalRegisterWorkbenchExtensionContributionsInput","registerResourceKinds","input","metadata","resourceKinds","map","kind","workbench","resources","registerKind","id","extensionId","label","icon","relatedOpenings","relatedOpeningsCommand","resource","signal","response","executeCommand","projectId","source","throwIfAborted","openings","array","parse","opening","undefined","text","NavigationTarget","ExtensionNavigationTarget","commandRefId","ExtensionKeybindingRecord","WorkbenchModuleContext","toWorkbenchNavigationTarget","KeybindingPlatform","NonNullable","currentPlatform","navigator","undefined","platform","userAgent","toLowerCase","includes","resolveExtensionKeybindingChord","binding","platformOverrides","key","registerWorkbenchExtensionKeybindings","input","bindings","createWhenExpression","when","workbench","map","keybindings","registerKeybinding","sourceExtensionId","extensionId","action","commandIdOf","command","id","keybinding","WorkbenchExtensionMetadata","ContributionKind","contributionRefId","MetadataRef","extensionId","kind","id","toWorkbenchWhenExpression","when","undefined","ids","value","Array","isArray","map","ref","mode","source","viewId","view","resourceType","metadata","WorkbenchExtensionMetadata","contributionRefId","WorkbenchPageMain","WorkbenchPageSlot","InternalWorkbenchExtensionMetadata","WorkbenchExtensionTabMetadata","MetadataPage","PagePresentationInput","extensionId","placementId","createTab","metadata","pageSlot","slot","input","tab","undefined","pageMain","main","kind","toInternalWorkbenchPages","pages","map","page","id","ref","localId","title","path","document","params","modeId","mode","resource","slots","icon","parent","parentId","WorkbenchExtensionMetadata","commandRefId","contributionRefId","ParamObjectSchema","InternalWorkbenchExtensionMetadata","toWorkbenchWhenExpression","toInternalWorkbenchPages","WorkbenchExtensionTabMetadata","MetadataView","resourceKindForView","metadata","viewId","bindings","pages","flatMap","page","main","kind","resource","view","slots","slot","item","binding","push","placements","placement","find","kinds","id","viewBody","body","webview","renderer","panelMenus","owner","viewMenus","menu","views","candidate","extensionId","ownerPanelId","title","side","group","hostTreeHeader","hostTreeFooter","panels","map","menus","icon","length","undefined","commandActions","command","actions","T","action","commandId","kanbanRenderers","resourceKind","createRow","submitLabel","columnParam","params","attributesParam","labels","attachments","resourceParam","fileParam","rowActions","toolbarActions","dataTableRenderers","selectionActions","treeRenderers","fileRenderers","controlsRenderers","modes","mode","modeId","label","panelRegions","regions","regionSettings","floatingPanels","defaultTheme","chrome","Object","fromEntries","entries","region","toInternalWorkbenchExtensionMetadata","input","createTab","adaptedPanels","extensions","commands","menuContributions","commandPaletteContributions","ref","localId","order","movableTo","mountStrategy","hiddenByDefault","headerBorderBottom","tab","placementId","resourceKinds","relatedOpeningsCommand","menuSlots","external","access","resourceHierarchyProviders","record","settingsSections","settingsPanels","panel","slotId","scope","includes","const","section","commandPaletteResources","keybindings","settingsDefinitions","statusBarItems","endsWith","when","diagnostics","WorkbenchExtensionMetadata","Disposable","FileRendererRefreshEnvelope","WorkbenchModuleContext","WorkbenchExtensionRendererKind","RendererRefreshTarget","id","kind","WorkbenchExtensionRefreshEvent","RegisterWorkbenchExtensionRendererRefreshEventsInput","metadata","subscribe","listener","event","workbench","refreshWorkbenchExtensionRenderer","target","envelope","views","refreshView","undefined","rendererRefreshTargets","targets","Map","add","renderer","refreshEventIds","eventId","Set","eventTargets","get","some","push","set","view","body","registerWorkbenchExtensionRendererRefreshEvents","input","refreshOpenWorkbenchExtensionWebviews","getView","CommandExecuteRequest","WebviewArtifactsReadParams","WebviewHostCapabilityResults","createExtensionSlot","executeWorkbenchExtensionCommandResponse","CreateBridgeWebviewHostAdapters","ExtensionWebviewFilesAdapter","createWorkbenchWebviewHostAdapters","ExtensionWebviewSlotKind","NonNullable","ExtensionWebviewFileCapabilities","ExtensionWebviewArtifactCapabilities","read","params","context","webviewId","Promise","CreateWorkbenchExtensionWebviewAdaptersInput","artifacts","executeCommand","commandId","body","signal","AbortSignal","extensionIdForWebview","files","projectId","slotKind","createWorkbenchExtensionWebviewAdapters","input","extensionId","request","resource","placement","workbench","workspaceId","metadata","slot","id","kind","panelId","undefined","WorkbenchExtensionMetadata","text","BridgeWebviewConfig","WorkbenchWebview","Extract","kind","toBridgeWebviewConfig","webview","title","undefined","runtimeUrl","moduleUrl","styles","capabilities","text","CommandExecuteRequest","text","Disposable","PreferencePropertySchema","PreferenceScope","PreferenceValue","CreateBridgeWebviewHostAdapters","getBridgeWebviewHostEventPublisher","renderBridgeWebviewFrame","createWorkbenchExtensionWebviewAdapters","toBridgeWebviewConfig","InternalRegisterWorkbenchExtensionContributionsInput","settingsSectionIdDefault","extensionSettingsOrderBase","asPreferenceValue","value","undefined","preferenceScope","scope","createExtensionHostAdapters","input","slotKind","NonNullable","createBase","artifacts","webviewArtifacts","executeCommand","extensionIdForWebview","webviewId","metadata","panels","find","panel","id","extensionId","files","webviewFiles","projectId","context","createWebviewHostAdapters","registerWebviewPanels","flatMap","webview","workbench","views","registerView","title","icon","body","kind","render","renderInput","settingsPanels","some","settingsPanel","instance","panelId","viewId","renderWebview","sizing","region","placement","hostEvents","createHostAdapters","createProps","createWebviewProps","resource","createTheme","createWebviewTheme","ownerId","viewMenuPlacementPriority","first","default","last","const","registerViewMenus","panelMenus","map","menu","index","viewMenus","registerViewMenu","ownerViewId","ownerPanelId","side","priority","registerSettings","disposables","sectionId","settingsSectionId","settings","getSection","push","registerSection","settingsSectionTitle","sections","settingsSections","sort","left","right","order","localeCompare","section","definitions","Map","settingsDefinitions","setting","key","propertiesByOwner","Record","values","properties","get","Object","create","type","enum","description","set","preferences","registerSchema","entries","slotId","registerPanel","text","WorkbenchExtensionMetadata","isNavigationTarget","resourceKey","text","Disposable","WorkbenchPanelTab","WorkbenchTabSnapshot","toWorkbenchNavigationTarget","executeWorkbenchExtensionCommand","RegisterWorkbenchExtensionContributionsInput","WorkbenchExtensionRefreshEvent","MetadataPlacement","MetadataPageSlot","WorkbenchExtensionTabMetadata","NonNullable","extensionId","placementId","isRecord","value","Record","Boolean","Array","isArray","navigationAction","projectId","undefined","toRows","flatMap","row","id","target","action","label","Parameters","icon","iconColor","selected","disabled","kind","const","toSnapshot","indicator","String","color","menu","candidate","rows","createWorkbenchExtensionTabPresentation","input","metadata","snapshots","Map","instances","loading","Promise","listeners","Set","refreshEvents","refreshEventIds","revision","load","instance","set","instanceId","pending","get","resource","currentRevision","pendingLoad","resolve","queryHandlerId","params","renderer","rendererId","invocation","placement","then","delete","listener","finally","getSnapshot","has","catch","subscribe","add","resourceSubscription","workbench","resources","preview","subscribeRefresh","affected","values","filter","length","all","map","refreshSubscription","subscribeRefreshEvents","event","disposable","dispose","text","WorkbenchExtensionMetadata","matchesResourceWhen","text","Disposable","WorkbenchCommandExecutionContext","workbenchCommandPaletteMenuPath","registerWorkbenchExtensionCommandPaletteResources","registerWorkbenchExtensionControlsRenderers","registerWorkbenchExtensionDataTableRenderers","buildWorkbenchExtensionCommandPaletteRegistrations","buildWorkbenchExtensionMenuRegistrations","registerWorkbenchExtensionFileRenderers","registerWorkbenchExtensionKanbanRenderers","registerWorkbenchExtensionNavigationItems","localizeParamSchema","registerWorkbenchExtensionTreeRenderers","registerResourceKinds","createExtensionSlot","executeWorkbenchExtensionCommand","WorkbenchExtensionCommandContext","InternalRegisterWorkbenchExtensionContributionsInput","RegisterWorkbenchExtensionContributionsInput","registerWorkbenchExtensionKeybindings","toInternalWorkbenchExtensionMetadata","registerWorkbenchExtensionRendererRefreshEvents","registerSettings","registerViewMenus","registerWebviewPanels","createWorkbenchExtensionTabPresentation","disposeAll","disposables","index","length","dispose","asParams","value","Record","Array","isArray","undefined","prepareCommandArgs","context","commandId","args","executionContext","onArgsChange","registerCommands","metadata","Pick","commands","map","command","workbench","registerCommand","id","label","title","description","params","extensionId","resourceMutation","prepareArgs","execute","resource","signal","region","menuCommandResource","input","getPrimaryResource","registerMenus","menuSlotsById","registrations","menuTargetsById","createWhenExpression","createMenuWhenExpression","defaultRegistrations","menuItem","menuPath","registration","menuItems","resolvedRegistrations","menuRegistrations","flatMap","targetCommandId","contribution","slot","slotId","kind","projectId","panelId","layout","registerMenuItem","registerCommandPaletteContributions","isVisible","when","type","matchesActiveMode","mode","modes","active","getActiveModeId","includes","registerStatusBarItems","statusBarItems","item","statusBar","registerItem","viewId","order","registerPages","pages","page","registerPage","registerModes","registerMode","modeId","panels","panelRegions","regionSettings","panelHeaders","floatingPanels","defaultTheme","chrome","activate","registerModePlacements","placements","placement","modePlacements","registerPlacement","registerWorkbenchExtensionContributions","sourceInput","createTab","push","bindings","keybindings","createKeybindingWhenExpression","resolveNodeResource","resolveTreeNodeResource","controlsRenderers","kanbanRenderers","kanbanAdapter","dataTableRenderers","dataTableAdapter","commandPaletteResources","createNavigationWhenExpression","subscribeRefreshEvents","subscribe","error","text","commandSourceSchema","attachFileStorageVersions","orderMenuEntries","serializableJsonObjectSchema","resolveCommandResourceParams","extensionResourceRefSchema","controlsQueryResultSchema","subscribeResourceActionChanges","fileStorageVersions","resolveMenuEntries","WorkbenchIcon","resolveResourceActionMenu","extensionSlotKindSchema","jsonObjectSchema","navigationSlotRootSectionId","isFileSourcePosition$1","workbenchCommandPaletteMenuPath","validatePageParamDefinitions","resolvePageParams","workbenchMenuTargets","workbenchTreeTargets","workbenchRegions","workbenchViewTargets","workbenchSettingsTargets","workbenchSettingsScopes","workbenchModeLayoutTargets","workbenchMenuTargetSchema","z","workbenchTreeTargetSchema","workbenchViewTargetSchema","workbenchSettingsTargetSchema","workbenchAttachmentTargetSchema","extensionPanelRegions","isNavigationHref","href","protocol","pageParamValueSchema","value","error","contributionRefSchema","kind","pageRefSchema","placementRefSchema","pageSlotRefSchema","panelRefSchema","commandTargetSchema","sourcePositionSchema","sectionSchema","pageTargetSchema","navigationOperationSchema","navigationTargetSchema","notice","diagnostic","createCommandOutcomeSchema","jsonValue","annotations","failure","navigation","outcome","validatedCommandOutcomeSchema","extensionSlotInvocationSchema","extensionAttachmentInvocationSchema","responseNavigationTargetSchema","commandOutcomeSchema","responseFields","commandExecutionResultSchema","optionConditions","VIEW_FILTER_CONDITIONS","EMPTY_VIEW_FILTER","conditionIds","viewFilterConditionSchema","viewFilterRuleSchema","advancedFilterGroupSchema","filter","viewSortSchema","DEFAULT_DATA_TABLE_SETTINGS","DEFAULT_KANBAN_VIEW_SETTINGS","builtInViews","settings","base","record","view","kanbanBuiltInViews","dataTableBuiltInViews","relatedResourceOpeningSchema","isLocalizedString$1","isRecord$2","isContributionRef","isResource","isOpenIntent","isPageTarget","ancestors","next","isPanelTarget","panel","isItemTarget","isNavigationTarget$1","target","withExtensionOwner","ref","extensionId","toPageTarget","qualifyResource","projectId","resource","qualifyNavigationTarget","item","serializeCommandError","shape","shapes","errorShape","existing","result","source","normalized","WEBVIEW_DECLARABLE_CAPABILITIES","WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES","WEBVIEW_HOST_CAPABILITIES","capability","RESOURCE_ACTIONS_EVENTS_SCOPE","publicCapabilityNames","scopedCapabilityNames","isPublicCapability","name","isScopedCapability","parseWebviewCapabilityDeclaration","nameAndScope","versionText","scopeIndex","validateDeclarationShape","parsed","unsupportedCapability","unsupportedVersion","version","undeclaredCapability","validateWebviewCapabilityDeclarations","diagnostics","allowed","allowedScopes","declaration","declaredCapabilities","capabilities","scopes","requestScope","params","request","createHostCapabilityGate","input","emit","deny","scope","handler","createWebviewHostProps","locale","props","isRecord$1","safeStringify","json","normalizeRuntimeError","message","stack","capabilityReply","run","details","extensionIframeAllow","collectChakraThemeVariables","computed","variables","index","resolveActiveTheme","fallback","colorMode","iframeStyle","frameShellStyle","EXTENSION_IFRAME_SANDBOX","ExtensionFrame","extensionProps","iframeRef","useRef","remoteRef","initializedRef","connectedWindowRef","propsRef","themeRef","theme","capabilitiesRef","onKeyboardEventRef","onKeyboardEvent","hostEventsRef","hostEvents","declaredCapabilitiesRef","onReadyRef","onReady","onErrorRef","onError","onDiagnosticsRef","onDiagnostics","frameEpoch","setFrameEpoch","useState","contentWidth","setContentWidth","useEffect","iframe","onFrameLoad","epoch","removeLoadListener","stylesAtConnect","moduleUrlAtConnect","reportDiagnostics","createCapabilityGate","hostApi","event","bounds","sizing","width","event_0","payload","connection","host","remote","conn","remote_0","message_0","frame","observer","options","title","EXTENSION_HOST_LOG_PREFIX","logExtensionHostDiagnostic","createWebviewDiagnostics","log","write","createHostEventPublisher","sink","pending","disconnectListeners","listener","BridgeWebviewFrame","$","c","frameProps","workbench","pageState","setPageState","t0","state","t1","t2","t3","page","t4","pageProps","setError","t5","t6","t7","Center","Stack","Text","t8","t9","t10","nextError","t11","t12","Box","TERMINAL_SESSION_EVENT_SCOPE","createTerminalSessionCapability","operation","terminal","unsubscribeTerminal","unsubscribeDisconnect","closed","close","sessionId","exit","action","webviewNotificationActionParamsSchema","WebviewHostCapabilityError","code","data","identifier","empty","command","streamId","preference","notificationIdentity","binary","fileScope","terminalId","terminalRequest","schemas","parseWebviewCapabilityParams","issue","errorOutcome","failureOutcome","serialized","fail","MAX_STREAMS","MAX_UNREAD_BYTES","withFrameSignal","controller","unsubscribe","createWebviewCommandStreamHandler","streams","ended","finish","notify","_","_streamId","body","receive","response","deps","commandResponse","streamHandlers","streamHandler","events","after","done","commandExecution","adapters","executeCommand","signal","CommandOutcomeError","commandStreaming","streamCommand","createExtensionWebviewHostCapabilities","terminalCapability","readHarnesses","pageParams","location","placement","notifications","preferences","files","artifacts","toCommandTarget","override","toWorkbenchNavigationTarget","isNavigationTarget","createWebviewPreferencesAdapter","registry","owner","registered","schema","createChangeNotifier","stop","stopOnDisconnect","createWebviewResourceActions","watchChanges","menu","entries","entry","id","createWorkbenchWebviewHostAdapters","patch","createWorkbenchWebviewHostCapabilities","createLightTheme","hostEventPublishersByWorkbench","getBridgeWebviewHostEventPublisher","hostEventsByWidget","key","instance","renderBridgeWebviewFrame","ownerId","context","webview","createProps","createTheme","createHostAdapters","text$1","unwrapCommandValue","getCommandValue","runResourceMutation","mutation","persist","execution","rawLabel","preview","createExtensionSlot","executeWorkbenchExtensionCommandResponse","reportNavigationError","commandId","executeWorkbenchExtensionCommand","candidate","isProviderQueryResult","commandIdOf","activateTarget","targetResource","step","toResult","groupLabel","registerWorkbenchExtensionCommandPaletteResources","disposables","records","activeResource","localize$1","registerControlsRenderer","slot","adapter","fields","registerWorkbenchExtensionControlsRenderers","localizeParamSchema","descriptor","localizeOptionSource","ownerExtensionId","localize","commandRefId","mapViewToolbarActions","toColumn","column","createElement","isQueryResult$1","toRow","row","registerRenderer","builtIns","originalRows","modeId","rows","mapped","registerWorkbenchExtensionDataTableRenderers","placementOrder","emptyWorkbenchExtensionMetadata","defaultWorkbenchExtensionCommandId","contribution","defaultWorkbenchExtensionPaletteCommandId","contributionOrder","text","isLocalizedString","createMenuItem","resolveString","createPaletteItem","buildWorkbenchExtensionMenuRegistrations","registrations","unresolved","metadata","menuTargetsById","menuSlotsById","createCommandId","createWhenExpression","buildWorkbenchExtensionCommandPaletteRegistrations","slotContext$1","executeFileCommand","ext","extra","revisionFromValue","revision","fileRendererRefreshEnvelopeFromCommand","origin","resourceKey","registerFileRenderer","loaded","registerWorkbenchExtensionFileRenderers","collectionBadgeTarget","itemsAttributeId","itemId","createBoardActionIcon","icon","toWorkbenchBoardColumnConfig","config","isQueryResult","localizeAttributes","attributes","display","attribute","knownDisplay","reportUnknownDisplay","resolveType","type","option","decorate","createMutableAttributeSource","snapshot","initial","listeners","signature","nextSignature","isExtensionResource","defaultResolveRowResource","defaultResolveRowActionResource","fromRow","toWorkbenchRow","resolveResource","mergeParams","items","asParams$1","hasCommandParameters","CREATE_FIELD_TYPES","toCreateField","optional","toCreateFields","field","createKanbanRendererSlot","executeKanbanRendererCommand","commandResource","kanbanRendererRowActionCommandId","registerRowActionCommands","args","executionContext","runDefaultRowAction","label","createRowActionIcon","toCreateRowConfig","toRowClick","resolveRowResource","toActivatedRow","toCreateRowHandler","submission","created","runMutation","activateCreatedRow","toRowContextMenuActions","actions","resolveRowActionResource","runDefault","registerWorkbenchExtensionKanbanRenderers","withBuiltInDisplay","renderBadgeListDisplay","afterMutation","attributeId","wireAttributes","columnConfigs","latestQueryId","rowCache","rowResource","onRowActivate","groupKey","queryId","mapRows","nextCache","cached","nextAttributes","move","slotContext","createQueryParams","ctx","node","executeCallback","renderer","executeTreeActionCommand","treeViewsFor","resolveTreeView","panels","resolveHostTreeHeaderNodes","treeViews","getHostTreeHeaderNodes","resolveHostTreeFooterNodes","getHostTreeFooterNodes","extensionTreeStructure","section","toActionParams","toRecordParams","createTreeMapper","originalNodes","runnerCommandId","mapEmptyState","mapTarget","commandTarget","mapAction","actionParams","mapNode","child","nodes","sections","isTreeSectionArray","isTreeNodeArray","hostNodeSection","registerTree","mapper","commandDisposable","rawArgs","treeDisposable","hostHeader","extensionHeader","hostFooter","originalSource","originalTarget","originalNode","registerWorkbenchExtensionTreeRenderers","toOwner","contributionRefId","isVisible","expression","toNode","toSections","groupItems","groups","defaultExpandedGroupIds","registerItems","first","resourceDependent","registerTrees","viewId","tree","declarationIndex","registerWorkbenchExtensionNavigationItems","registerResourceKinds","opening","currentPlatform","platform","resolveExtensionKeybindingChord","binding","registerWorkbenchExtensionKeybindings","toWorkbenchWhenExpression","when","ids","pageSlot","pageMain","main","toInternalWorkbenchPages","resourceKindForView","bindings","viewBody","panelMenus","menus","commandActions","kanbanRenderers","dataTableRenderers","treeRenderers","fileRenderers","controlsRenderers","modes","mode","region","toInternalWorkbenchExtensionMetadata","adaptedPanels","refreshWorkbenchExtensionRenderer","envelope","rendererRefreshTargets","targets","add","eventId","eventTargets","registerWorkbenchExtensionRendererRefreshEvents","refreshOpenWorkbenchExtensionWebviews","createWorkbenchExtensionWebviewAdapters","toBridgeWebviewConfig","settingsSectionIdDefault","extensionSettingsOrderBase","asPreferenceValue","preferenceScope","createExtensionHostAdapters","createBase","webviewId","registerWebviewPanels","slotKind","settingsPanel","renderInput","viewMenuPlacementPriority","registerViewMenus","registerSettings","sectionId","left","right","definitions","setting","propertiesByOwner","properties","isRecord","navigationAction","toRows","toSnapshot","indicator","createWorkbenchExtensionTabPresentation","snapshots","instances","loading","refreshEvents","load","currentRevision","pendingLoad","resourceSubscription","affected","refreshSubscription","disposeAll","asParams","prepareCommandArgs","onArgsChange","registerCommands","menuCommandResource","registerMenus","defaultRegistrations","registration","menuPath","menuItem","registerCommandPaletteContributions","matchesResourceWhen","matchesActiveMode","active","registerStatusBarItems","registerPages","registerModes","registerModePlacements","registerWorkbenchExtensionContributions","sourceInput"],"sources":["../../pstdio-api-contracts/src/extension-kernel/workbench-targets.ts","../../pstdio-api-contracts/src/extensions/targets.ts","../../pstdio-api-contracts/src/extension-kernel/types/composition.ts","../../pstdio-api-contracts/src/extension-kernel/navigation-href.ts","../../pstdio-api-contracts/src/extensions/page-params-schema.ts","../../pstdio-api-contracts/src/extensions/workbench-refs-metadata.ts","../../pstdio-api-contracts/src/extensions/navigation-target-metadata.ts","../../pstdio-api-contracts/src/extensions/command-outcome.ts","../../pstdio-api-contracts/src/extensions/execute.ts","../../pstdio-api-contracts/src/extension-kernel/types/collection-view.ts","../../pstdio-api-contracts/src/extensions/collection-view.ts","../../pstdio-api-contracts/src/extension-kernel/types/data-table-renderer.ts","../../pstdio-api-contracts/src/extensions/collection-view-builtins.ts","../../pstdio-api-contracts/src/extensions/related-resource-opening.ts","../../pstdio-api-contracts/src/extension-kernel/l10n.ts","../../pstdio-api-contracts/src/extension-kernel/navigation.ts","../../pstdio-api-contracts/src/extension-kernel/serialize-error.ts","../../pstdio-api-contracts/src/extension-kernel/types/webview-capabilities.ts","../../pstdio-api-contracts/src/extension-kernel/webview-protocol.ts","../../pstdio-extensions/src/bridge/contract/capabilities.ts","../../pstdio-extensions/src/bridge/contract/host-props.ts","../../pstdio-extensions/src/bridge/normalize-error.ts","../../pstdio-extensions/src/bridge/host/capability-reply.ts","../../pstdio-extensions/src/bridge/host/iframe-permissions.ts","../../pstdio-extensions/src/bridge/host/theme.ts","../../pstdio-extensions/src/bridge/host/extension-frame.tsx","../../pstdio-extensions/src/bridge/host/host-diagnostics.ts","../../pstdio-extensions/src/bridge/host/host-event-publisher.ts","../src/extensions/bridge/bridge-webview-frame.tsx","../src/extensions/bridge/terminal-session-capability.ts","../src/extensions/bridge/webview-notification-params.ts","../src/extensions/bridge/webview-capability-params.ts","../src/extensions/bridge/webview-command-streams.ts","../src/extensions/bridge/extension-webview-host-capabilities.ts","../src/extensions/host/extension-navigation-target.ts","../src/extensions/bridge/webview-preferences-capability.ts","../src/extensions/bridge/webview-resource-actions.ts","../src/extensions/bridge/webview-host-capabilities.ts","../src/extensions/bridge/bridge-webview-renderer.tsx","../../pstdio-extensions/src/workbench/shared/localization.ts","../src/extensions/host/command-response.ts","../src/extensions/host/workbench-resource-mutation.ts","../src/extensions/host/workbench-extension-command.ts","../src/extensions/contributions/command-palette-resource-contributions.ts","../src/extensions/contributions/controls-renderer-contributions.ts","../src/extensions/contributions/param-schema-localization.ts","../src/extensions/contributions/view-toolbar-actions.ts","../src/extensions/contributions/data-table-renderer-contributions.ts","../src/extensions/contributions/extension-contributions.ts","../src/extensions/contributions/file-renderer-contributions.ts","../src/extensions/contributions/collection-badge-navigation.ts","../src/extensions/contributions/kanban-renderer-board-config.ts","../src/extensions/contributions/kanban-renderer-contribution-helpers.ts","../src/extensions/contributions/kanban-renderer-contributions.ts","../src/extensions/contributions/tree-renderer-callbacks.ts","../src/extensions/contributions/tree-renderer-host-defaults.ts","../src/extensions/contributions/tree-renderer-structure.ts","../src/extensions/contributions/tree-renderer-contributions.ts","../src/extensions/contributions/navigation-item-contributions.ts","../src/extensions/host/resource-kind-contributions.ts","../src/extensions/host/workbench-extension-keybindings.ts","../src/extensions/host/workbench-extension-metadata-ref.ts","../src/extensions/host/workbench-extension-page-metadata.ts","../src/extensions/host/workbench-extension-metadata-adapter.ts","../src/extensions/host/workbench-extension-refresh.ts","../src/extensions/bridge/webview-command-capabilities.ts","../src/extensions/bridge/webview-contribution-config.ts","../src/extensions/host/workbench-extension-surfaces.ts","../src/extensions/host/workbench-extension-tab-presentation.ts","../src/extensions/host/workbench-extension-host.ts"],"sourcesContent":["export const workbenchMenuTargets = [\"workbench.nav.actions\", \"workbench.nav.overflow\"] as const;\n\nexport const workbenchTreeTargets = [\n \"workbench.left.tree\",\n \"workbench.main.left.tree\",\n \"workbench.main.right.tree\",\n] as const;\n\nexport const workbenchRegions = [\n \"nav\",\n \"activity\",\n \"sidenav\",\n \"main-header\",\n \"main\",\n \"secondary-header\",\n \"secondary\",\n \"side-header\",\n \"side\",\n \"status\",\n \"overlay\",\n] as const;\n\nexport const workbenchViewTargets = [\n \"workbench.main\",\n \"workbench.main.left\",\n \"workbench.main.right\",\n \"workbench.secondary\",\n] as const;\n\nexport const workbenchSettingsTargets = [\"workbench.settings\"] as const;\n\nexport const workbenchSettingsScopes = [\"project\", \"global\"] as const;\n\nexport const workbenchModeLayoutTargets = [\n \"workbench.left\",\n \"workbench.main.left\",\n \"workbench.main\",\n \"workbench.main.right\",\n \"workbench.secondary\",\n] as const;\n\nexport type WorkbenchMenuTarget = (typeof workbenchMenuTargets)[number];\nexport type WorkbenchTreeTarget = (typeof workbenchTreeTargets)[number];\nexport type WorkbenchViewTarget = (typeof workbenchViewTargets)[number];\nexport type WorkbenchSettingsTarget = (typeof workbenchSettingsTargets)[number];\n\nexport type WorkbenchAttachmentTarget =\n | WorkbenchMenuTarget\n | WorkbenchTreeTarget\n | WorkbenchViewTarget\n | WorkbenchSettingsTarget;\n","import { z } from \"zod\";\nimport {\n workbenchMenuTargets,\n workbenchModeLayoutTargets,\n workbenchRegions,\n workbenchSettingsScopes,\n workbenchSettingsTargets,\n workbenchTreeTargets,\n workbenchViewTargets,\n} from \"../extension-kernel/workbench-targets\";\n\nexport const workbenchMenuTargetSchema = z.enum(workbenchMenuTargets);\nexport const workbenchTreeTargetSchema = z.enum(workbenchTreeTargets);\nexport const workbenchRegionSchema = z.enum(workbenchRegions);\nexport const workbenchViewTargetSchema = z.enum(workbenchViewTargets);\nexport const workbenchSettingsTargetSchema = z.enum(workbenchSettingsTargets);\nexport const workbenchModeLayoutTargetSchema = z.enum(workbenchModeLayoutTargets);\nexport const workbenchAttachmentTargetSchema = z.union([\n workbenchMenuTargetSchema,\n workbenchTreeTargetSchema,\n workbenchViewTargetSchema,\n workbenchSettingsTargetSchema,\n]);\nexport const workbenchSettingsScopeSchema = z.enum(workbenchSettingsScopes);\n","import type { Localizable } from \"../l10n\";\nimport type { CommandRef } from \"./commands\";\nimport type { ExtensionContextBase } from \"./context\";\nimport type { ContributionDefinition, ResourceKindRef } from \"./contribution-identity\";\nimport type { MaybePromise } from \"./json\";\nimport type { ResourceRef, ViewHierarchyParent } from \"./resources\";\n\nexport const dockedWorkbenchRegions = [\"sidenav\", \"main\", \"secondary\", \"side\"] as const;\nexport type DockedWorkbenchRegion = (typeof dockedWorkbenchRegions)[number];\nexport const extensionPanelRegions = [\"main\", \"secondary\", \"side\"] as const;\nexport type ExtensionPanelRegion = (typeof extensionPanelRegions)[number];\n\nexport interface RegionSize {\n readonly defaultPx?: number;\n readonly minPx?: number;\n readonly maxPx?: number;\n}\n\nexport interface ResourceMenuSlotDefinition {\n readonly id: string;\n readonly placement: \"header-primary\" | \"header-overflow\" | \"context-menu\";\n readonly label?: Localizable<string>;\n readonly access: \"owner\" | \"public\";\n readonly order?: number;\n}\n\nexport interface ResourceKindDefinition extends ContributionDefinition<\"resource-kind\"> {\n readonly prefix?: string | { readonly $prefix: \"project\" };\n readonly label?: Localizable<string>;\n readonly icon?: string;\n readonly menuSlots?: readonly ResourceMenuSlotDefinition[];\n /**\n * A command of this extension that returns the current reference for an open\n * resource, or null. The host runs it with `ctx.resource` set to the open\n * resource when the page opens and after the extension emits an event, and\n * shows the returned label, icon, and metadata. Keep metadata the page owns,\n * such as a selected document, from `ctx.resource`.\n */\n readonly resolve?: CommandRef;\n /** Resolve params.resources as a bounded ResourceRef[] batch. Return ResourceResolution[] with owner navigation; omit missing resources. */\n readonly resolveMany?: CommandRef;\n /** Claim workspace-relative path prefixes. The owner command receives params.path and params.workspaceId and returns ResourceResolution or null. Longest matching prefix wins. */\n readonly paths?: readonly { readonly prefix: string; readonly resolve: CommandRef }[];\n /** Validate an explicit anchor change. Return ResourceAnchorValidationResult. Must not mutate links. */\n readonly validateAnchors?: CommandRef;\n /** Select related resources for an explicit source open. Return RelatedResourceOpenings using ctx.resource. */\n readonly relatedOpenings?: CommandRef;\n}\n\nexport interface ResourceHierarchyProvider extends ContributionDefinition<\"resource-hierarchy-provider\"> {\n resourceKind: ResourceKindRef;\n parent(ctx: ExtensionContextBase, resource: ResourceRef): MaybePromise<ResourceRef | ViewHierarchyParent | null>;\n}\n","export const isNavigationHref = (href: unknown) => {\n if (typeof href !== \"string\") return false;\n try {\n const { protocol } = new URL(href);\n return protocol === \"https:\" || protocol === \"http:\";\n } catch {\n return false;\n }\n};\n","import { z } from \"zod\";\nimport { validatePageParamDefinitions } from \"../extension-kernel/page-params\";\n\nexport const pageParamValueSchema = z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]);\nexport const pageParamDefinitionsSchema = z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"string\"),\n default: z.string().optional(),\n values: z.array(z.string()).readonly().optional(),\n })\n .strict(),\n z.object({ type: z.literal(\"number\"), default: z.number().optional() }).strict(),\n z.object({ type: z.literal(\"boolean\"), default: z.boolean().optional() }).strict(),\n z.object({ type: z.literal(\"string[]\"), default: z.array(z.string()).readonly().optional() }).strict(),\n ]),\n )\n .superRefine((value, ctx) => {\n try {\n validatePageParamDefinitions(value);\n } catch (error) {\n ctx.addIssue({ code: \"custom\", message: String(error) });\n }\n });\n","import { z } from \"zod\";\nimport { serializableJsonObjectSchema } from \"./common\";\n\nexport const contributionRefSchema = <Kind extends string>(kind: Kind) =>\n z.object({ extensionId: z.string(), kind: z.literal(kind), id: z.string() });\n\nexport const pageRefSchema = contributionRefSchema(\"page\");\nexport const placementRefSchema = contributionRefSchema(\"placement\");\nexport const modeRefSchema = contributionRefSchema(\"mode\");\nexport const viewRefSchema = contributionRefSchema(\"view\");\nexport const resourceKindRefSchema = contributionRefSchema(\"resource-kind\");\n\nexport const pageSlotRefSchema = z.object({\n kind: z.literal(\"page-slot\"),\n page: pageRefSchema,\n id: z.string(),\n});\n\nexport const panelRefSchema = z.union([placementRefSchema, pageSlotRefSchema]);\n\nexport const commandTargetSchema = z.object({\n command: contributionRefSchema(\"command\"),\n params: serializableJsonObjectSchema.optional(),\n});\n","import { z } from \"zod\";\nimport { isNavigationHref } from \"../extension-kernel/navigation-href\";\nimport { isFileSourcePosition } from \"../extension-kernel/source-position\";\nimport type { FileSourcePosition, PageParams } from \"../extension-kernel/types/pages\";\nimport { pageParamValueSchema } from \"./page-params-schema\";\nimport { extensionResourceRefSchema } from \"./resource-ref\";\nimport { commandTargetSchema, pageRefSchema, panelRefSchema } from \"./workbench-refs-metadata\";\n\nconst sourcePositionSchema = z\n .object({\n line: z.number().int().positive(),\n column: z.number().int().positive().optional(),\n endLine: z.number().int().positive().optional(),\n endColumn: z.number().int().positive().optional(),\n })\n .refine(isFileSourcePosition, \"Expected ordered source coordinates\");\n\nconst sectionSchema = z.object({\n anchors: z.array(\n z.object({ id: z.string(), heading: z.string(), occurrence: z.number().int().nonnegative().optional() }),\n ),\n});\n\nexport interface MetadataPageTarget {\n kind: \"page\";\n page: z.infer<typeof pageRefSchema>;\n resource?: z.infer<typeof extensionResourceRefSchema>;\n open?: \"preview\" | \"pin\";\n section?: z.infer<typeof sectionSchema>;\n position?: FileSourcePosition;\n params?: PageParams;\n parent?: MetadataPageTarget;\n}\n\nconst pageTargetSchema: z.ZodType<MetadataPageTarget> = z\n .lazy(() =>\n z\n .object({\n kind: z.literal(\"page\"),\n page: pageRefSchema,\n resource: extensionResourceRefSchema.optional(),\n open: z.enum([\"preview\", \"pin\"]).optional(),\n section: sectionSchema.optional(),\n position: sourcePositionSchema.optional(),\n params: z.record(z.string(), pageParamValueSchema).optional(),\n parent: pageTargetSchema.optional(),\n })\n .refine((value) => !(value.position && value.section), \"Choose a source position or a heading section\"),\n )\n .meta({ id: \"WorkbenchMetadataPageTarget\" });\n\nconst navigationOperationSchema = z.union([\n pageTargetSchema,\n z.object({\n kind: z.literal(\"panel\"),\n panel: panelRefSchema,\n resource: extensionResourceRefSchema.optional(),\n open: z.enum([\"preview\", \"pin\"]).optional(),\n }),\n]);\n\nexport const navigationTargetSchema = z.union([\n navigationOperationSchema,\n z.object({ kind: z.literal(\"command\"), target: commandTargetSchema }),\n z.object({ kind: z.literal(\"href\"), href: z.string().refine(isNavigationHref, \"Expected an HTTP or HTTPS URL\") }),\n z.object({ kind: z.literal(\"compound\"), targets: z.array(navigationOperationSchema).min(1) }),\n]);\n","import { z } from \"zod\";\nimport type { CommandOutcome, JsonValue, NavigationTarget } from \"../extension-kernel\";\nimport { serializableJsonObjectSchema } from \"./common\";\nimport { navigationTargetSchema } from \"./navigation-target-metadata\";\n\nconst notice = z.object({\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string(),\n metadata: serializableJsonObjectSchema.optional(),\n});\nconst diagnostic = z.object({\n code: z.string(),\n message: z.string(),\n severity: z.enum([\"info\", \"warning\", \"error\"]),\n extensionId: z.string().optional(),\n commandId: z.string().optional(),\n metadata: serializableJsonObjectSchema.optional(),\n});\nexport const createCommandOutcomeSchema = (jsonValue: z.ZodType<JsonValue>) => {\n const error = z.object({\n name: z.string().optional(),\n message: z.string(),\n stack: z.string().optional(),\n cause: jsonValue.optional(),\n });\n const annotations = {\n notices: z.array(notice).optional(),\n diagnostics: z.array(diagnostic).optional(),\n };\n const failure = {\n ...annotations,\n ok: z.literal(false),\n code: z.string().optional(),\n reason: z.string(),\n data: serializableJsonObjectSchema.optional(),\n cause: jsonValue.optional(),\n error: error.optional(),\n };\n const navigation: z.ZodType<NavigationTarget> = navigationTargetSchema;\n\n const outcome: z.ZodType<CommandOutcome> = z.discriminatedUnion(\"status\", [\n z\n .object({\n ...annotations,\n ok: z.literal(true),\n status: z.literal(\"success\"),\n value: z.unknown().optional(),\n navigationRequests: z.array(navigation).optional(),\n })\n .transform((outcome) => ({ ...outcome, value: outcome.value })),\n z.object({ ...failure, status: z.literal(\"rejected\") }),\n z.object({ ...failure, status: z.literal(\"error\") }),\n ]);\n\n return outcome;\n};\n\nexport const validatedCommandOutcomeSchema = createCommandOutcomeSchema(z.json());\n","import { z } from \"zod\";\nimport type { JsonValue, NavigationTarget, Struct } from \"../extension-kernel\";\nimport { createCommandOutcomeSchema, validatedCommandOutcomeSchema } from \"./command-outcome\";\nimport { commandSourceSchema, extensionSlotKindSchema, jsonObjectSchema } from \"./common\";\nimport { navigationTargetSchema } from \"./navigation-target-metadata\";\nimport { pageParamValueSchema } from \"./page-params-schema\";\nimport { extensionResourceRefSchema } from \"./resource-ref\";\nimport { workbenchAttachmentTargetSchema } from \"./targets\";\n\nexport { extensionResourceRefSchema } from \"./resource-ref\";\n\nexport const extensionSlotInvocationSchema = z.object({\n id: z.string(),\n kind: extensionSlotKindSchema,\n context: jsonObjectSchema,\n});\n\nexport const extensionAttachmentInvocationSchema = z.object({\n target: workbenchAttachmentTargetSchema,\n mode: z.string().optional(),\n projectId: z.string().optional(),\n resource: extensionResourceRefSchema.optional(),\n});\n\nexport const extensionRendererContextSchema = z.object({\n rendererId: z.string(),\n pageParams: z.record(z.string(), pageParamValueSchema).optional(),\n projectId: z.string().optional(),\n modeId: z.string().optional(),\n resource: extensionResourceRefSchema.optional(),\n invocation: z.object({ placement: z.enum([\"visible\", \"background\"]) }).optional(),\n});\n\nexport const commandExecuteRequestSchema = z.object({\n projectId: z.string().min(1),\n workspaceId: z.string().optional(),\n params: jsonObjectSchema.optional(),\n resource: extensionResourceRefSchema.optional(),\n attachment: extensionAttachmentInvocationSchema.optional(),\n slot: extensionSlotInvocationSchema.optional(),\n source: commandSourceSchema.optional(),\n metadata: jsonObjectSchema.optional(),\n});\n\nexport const commandExecuteBodySchema = z.object({\n workspaceId: z.string().optional(),\n params: jsonObjectSchema.optional(),\n resource: extensionResourceRefSchema.optional(),\n attachment: extensionAttachmentInvocationSchema.optional(),\n slot: extensionSlotInvocationSchema.optional(),\n source: commandSourceSchema.optional(),\n metadata: jsonObjectSchema.optional(),\n});\n\nexport const dispatchExtensionEventBodySchema = z\n .object({\n eventId: z.string().min(1),\n payload: jsonObjectSchema,\n })\n .strict();\n\nexport { validatedCommandOutcomeSchema };\n\nconst responseNavigationTargetSchema: z.ZodType<NavigationTarget> = navigationTargetSchema;\n/** @deprecated Use validatedCommandOutcomeSchema. */\nexport const commandOutcomeSchema = z.object({\n ok: z.boolean(),\n status: z.enum([\"success\", \"rejected\", \"error\"]),\n value: z.unknown().optional(),\n navigationRequests: z.array(responseNavigationTargetSchema).optional(),\n code: z.string().optional(),\n reason: z.string().optional(),\n data: jsonObjectSchema.optional(),\n error: z.object({ name: z.string().optional(), message: z.string(), stack: z.string().optional() }).optional(),\n notices: z\n .array(\n z.object({\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string(),\n metadata: jsonObjectSchema.optional(),\n }),\n )\n .optional(),\n diagnostics: z\n .array(\n z.object({\n code: z.string(),\n message: z.string(),\n severity: z.enum([\"info\", \"warning\", \"error\"]),\n extensionId: z.string().optional(),\n commandId: z.string().optional(),\n metadata: jsonObjectSchema.optional(),\n }),\n )\n .optional(),\n});\n\nconst responseFields = {\n commandId: z.string(),\n extensionId: z.string(),\n eventIds: z.array(z.string()).optional(),\n};\n/** @deprecated Use commandExecutionResultSchema. */\nexport const commandExecuteResponseSchema = z.object({\n ...responseFields,\n outcome: commandOutcomeSchema,\n});\nexport const createCommandExecutionResultSchema = (jsonValue: z.ZodType<JsonValue>) =>\n z.object({ ...responseFields, outcome: createCommandOutcomeSchema(jsonValue) });\n\nexport const commandExecutionResultSchema = createCommandExecutionResultSchema(z.json());\n\nexport type CommandExecuteRequest = z.infer<typeof commandExecuteRequestSchema>;\nexport type CommandExecuteBody = z.infer<typeof commandExecuteBodySchema>;\n/** @deprecated Use CommandExecutionResult. */\nexport type CommandExecuteResponse = z.infer<typeof commandExecuteResponseSchema>;\nexport type CommandExecutionResult = z.infer<typeof commandExecutionResultSchema>;\nexport type ExtensionRendererContext = z.infer<typeof extensionRendererContextSchema>;\nexport type DispatchExtensionEventInput = {\n eventId: string;\n payload: Struct;\n};\n","/** A condition that a filter rule applies to one field. Each field kind accepts a fixed list. */\nexport type ViewFilterCondition =\n | \"contains\"\n | \"does-not-contain\"\n | \"is\"\n | \"is-not\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"is-before\"\n | \"is-after\"\n | \"is-on-or-before\"\n | \"is-on-or-after\"\n | \"is-any-of\"\n | \"is-none-of\"\n | \"has-any-of\"\n | \"has-all-of\"\n | \"has-none-of\"\n | \"is-empty\"\n | \"is-not-empty\";\n\n// Views travel through command params, so these are type aliases: they stay assignable to JSON values.\nexport type ViewFilterRule = {\n attributeId: string;\n condition: ViewFilterCondition;\n /**\n * Text, a number, a day (\"2026-10-02\", \"today\", \"today-7\", \"today+7\"),\n * or option values. Absent for is-empty and is-not-empty.\n */\n value?: boolean | string | number | string[];\n};\n\nexport type ViewFilterGroup = {\n conjunction: \"and\" | \"or\";\n /** Normal rules share this conjunction. */\n rules: ViewFilterRule[];\n /** Advanced groups have one level and combine with the normal rules using AND. */\n groups?: { conjunction: \"and\" | \"or\"; rules: ViewFilterRule[] }[];\n};\n\nexport type ViewSortDirection = \"asc\" | \"desc\";\n\nexport type ViewSort = {\n attributeId: string;\n direction: ViewSortDirection;\n};\n\nexport type ViewFieldKind = \"string\" | \"number\" | \"boolean\" | \"date\" | \"enum\" | \"status\" | \"enum-multi\" | \"user\";\n\nconst optionConditions: readonly ViewFilterCondition[] = [\"is-any-of\", \"is-none-of\", \"is-empty\", \"is-not-empty\"];\n\n/** The only list of conditions. The UI, the views API, and the CLI all read it. */\nexport const VIEW_FILTER_CONDITIONS: Record<ViewFieldKind, readonly ViewFilterCondition[]> = {\n boolean: [\"is\", \"is-not\", \"is-empty\", \"is-not-empty\"],\n string: [\"contains\", \"does-not-contain\", \"is\", \"is-not\", \"is-empty\", \"is-not-empty\"],\n number: [\"is\", \"is-not\", \"gt\", \"gte\", \"lt\", \"lte\", \"is-empty\", \"is-not-empty\"],\n date: [\"is\", \"is-before\", \"is-after\", \"is-on-or-before\", \"is-on-or-after\", \"is-empty\", \"is-not-empty\"],\n enum: optionConditions,\n status: optionConditions,\n user: optionConditions,\n \"enum-multi\": [\"has-any-of\", \"has-all-of\", \"has-none-of\", \"is-empty\", \"is-not-empty\"],\n};\n","import { z } from \"zod\";\nimport {\n VIEW_FILTER_CONDITIONS,\n type ViewFieldKind,\n type ViewFilterCondition,\n type ViewFilterGroup,\n type ViewFilterRule,\n type ViewSort,\n} from \"../extension-kernel/types/collection-view\";\n\nexport const EMPTY_VIEW_FILTER: ViewFilterGroup = { conjunction: \"and\", rules: [] };\nexport const VIEW_DAY_PATTERN = /^(\\d{4}-\\d{2}-\\d{2}|today([+-]\\d+)?)$/;\n\nconst conditionIds = [...new Set(Object.values(VIEW_FILTER_CONDITIONS).flat())] as [\n ViewFilterCondition,\n ...ViewFilterCondition[],\n];\n\nexport const viewFilterConditionSchema = z.enum(conditionIds);\n\nexport const viewFilterRuleSchema = z.object({\n attributeId: z.string().min(1),\n condition: viewFilterConditionSchema,\n value: z.union([z.boolean(), z.string(), z.number(), z.array(z.string())]).optional(),\n});\nconst advancedFilterGroupSchema = z.strictObject({\n conjunction: z.enum([\"and\", \"or\"]),\n rules: z.array(viewFilterRuleSchema),\n});\nexport const viewFilterGroupSchema = advancedFilterGroupSchema\n .extend({\n groups: z.array(advancedFilterGroupSchema).optional(),\n })\n .refine((filter) => !filter.groups?.length || filter.conjunction === \"and\", {\n message: \"Normal rules and advanced groups combine using AND\",\n });\n\nconst viewSortSchema = z.object({ attributeId: z.string().min(1), direction: z.enum([\"asc\", \"desc\"]) });\nexport const viewSortsSchema = z.array(viewSortSchema).max(1, \"A view allows only one sort\");\n\n/** What a rule's value must be for a condition the field kind accepts. */\nexport const viewFilterValueKind = (kind: ViewFieldKind, condition: ViewFilterCondition) => {\n if (condition === \"is-empty\" || condition === \"is-not-empty\") return \"none\" as const;\n if (condition === \"is-any-of\" || condition === \"is-none-of\") return \"options\" as const;\n if (kind === \"boolean\") return \"boolean\" as const;\n if (kind === \"number\") return \"number\" as const;\n if (kind === \"date\") return \"day\" as const;\n if (kind === \"string\") return \"text\" as const;\n return \"options\" as const;\n};\n\nconst valueNeeds = {\n none: \"takes no value\",\n boolean: \"needs a boolean\",\n number: \"needs a number\",\n day: \"needs a day such as 2026-10-02, today, or today-7\",\n text: \"needs text\",\n options: \"needs a list of option values\",\n};\n\n/** A missing value marks a rule that is still being built. The renderer ignores it. */\nconst valueFits = (value: ViewFilterRule[\"value\"], kind: ReturnType<typeof viewFilterValueKind>) => {\n if (value === undefined) return true;\n if (kind === \"none\") return false;\n if (kind === \"boolean\") return typeof value === \"boolean\";\n if (kind === \"number\") return typeof value === \"number\" && Number.isFinite(value);\n if (kind === \"day\") return typeof value === \"string\" && VIEW_DAY_PATTERN.test(value);\n if (kind === \"text\") return typeof value === \"string\";\n return Array.isArray(value);\n};\n\nexport interface ViewRuleField {\n id: string;\n kind: ViewFieldKind;\n filterable: boolean;\n sortable: boolean;\n options?: { value: string }[];\n}\n\n/** enum-multi fields hold several values, so one order does not exist. */\nexport const canSortViewField = (field: Pick<ViewRuleField, \"kind\" | \"sortable\">) =>\n field.sortable && field.kind !== \"enum-multi\";\n\nconst ruleProblem = (rule: ViewFilterRule, fields: ViewRuleField[]) => {\n const filterable = fields.filter((field) => field.filterable);\n const field = filterable.find((field) => field.id === rule.attributeId);\n if (!field)\n return `Invalid filter field \"${rule.attributeId}\". Valid IDs: ${filterable.map((field) => field.id).join(\", \")}`;\n const conditions = VIEW_FILTER_CONDITIONS[field.kind];\n // Deprecated filter maps used exact value lists on scalar fields too. Keep them editable.\n const legacyList =\n [\"is-any-of\", \"is-none-of\"].includes(rule.condition) && [\"string\", \"number\", \"date\"].includes(field.kind);\n if (!conditions.includes(rule.condition) && !legacyList)\n return `Field \"${field.id}\" does not accept \"${rule.condition}\". Valid conditions: ${conditions.join(\", \")}`;\n const valueKind = viewFilterValueKind(field.kind, rule.condition);\n if (!valueFits(rule.value, valueKind))\n return `Condition \"${rule.condition}\" on \"${field.id}\" ${valueNeeds[valueKind]}`;\n const options = field.options;\n const values = Array.isArray(rule.value) ? rule.value : [];\n const unknown = options ? values.find((value) => !options.some((option) => option.value === value)) : undefined;\n if (options && unknown !== undefined)\n return `Invalid filter value \"${unknown}\" for \"${field.id}\". Valid values: ${options.map((option) => option.value).join(\", \")}`;\n return undefined;\n};\n\n/** The first reason the filter does not fit the fields, or undefined. */\nexport const findViewFilterProblem = (filter: ViewFilterGroup, fields: ViewRuleField[]) => {\n for (const rule of [...filter.rules, ...(filter.groups ?? []).flatMap((group) => group.rules)]) {\n const problem = ruleProblem(rule, fields);\n if (problem) return problem;\n }\n return undefined;\n};\n\n/** The first reason the sorts do not fit the fields, or undefined. */\nexport const findViewSortsProblem = (sorts: ViewSort[], fields: ViewRuleField[]) => {\n if (sorts.length > 1) return \"A view allows only one sort\";\n const sortable = fields.filter(canSortViewField).map((field) => field.id);\n for (const sort of sorts) {\n if (!sortable.includes(sort.attributeId))\n return `Invalid sort field \"${sort.attributeId}\". Valid IDs: ${sortable.join(\", \")}`;\n }\n return undefined;\n};\n","import type { Localizable } from \"../l10n\";\nimport type { ViewFilterGroup, ViewSort } from \"./collection-view\";\nimport type { CommandRef } from \"./commands\";\nimport type { RendererCallback } from \"./context\";\nimport type { JsonValue, Struct } from \"./json\";\nimport type { RendererContributionBase } from \"./renderer-base\";\nimport type { RendererContext, ResourceRef } from \"./resources\";\nimport type { ViewToolbarAction } from \"./view-toolbar-action\";\n\nexport type DataTableRendererResourceRef = ResourceRef;\n\n/** Display settings stored in a data table view. */\nexport interface DataTableRendererSettings {\n /** A groupable column id, or \"none\". */\n grouping: string;\n rowNumbers: boolean;\n wrapRows: boolean;\n showStats: boolean;\n hiddenColumns: string[];\n /** Column ids in display order. An empty list means the declared order. */\n columnOrder: string[];\n}\n\n/** What a data table view shows until a contribution or a saved view says otherwise. */\nexport const DEFAULT_DATA_TABLE_SETTINGS: DataTableRendererSettings = {\n grouping: \"none\",\n rowNumbers: true,\n wrapRows: false,\n showStats: true,\n hiddenColumns: [],\n columnOrder: [],\n};\n\nexport interface DataTableRendererSavedView {\n id: string;\n title: Localizable<string>;\n settings?: Partial<DataTableRendererSettings>;\n filter?: ViewFilterGroup;\n sorts?: ViewSort[];\n}\n\nexport interface DataTableRendererQueryParams {\n renderer: RendererContext;\n /** The view's full filter. Use it only to narrow what you load; the renderer applies it to the rows you return. */\n filter: ViewFilterGroup;\n /** The view's sorts, first level first. The renderer applies them to the rows you return. */\n sorts: ViewSort[];\n settings: DataTableRendererSettings;\n}\n\nexport interface DataTableRendererThemeColor {\n light: string;\n dark: string;\n foreground?: { light: string; dark: string };\n}\n\nexport type DataTableRendererColumnStat =\n | { type: \"unique\" }\n | { type: \"histogram\"; bins?: number }\n | { type: \"top-values\"; limit?: number };\n\nexport type DataTableRendererColumnRenderer =\n | { type: \"json\" }\n | { type: \"color-scale\"; stops: Array<{ value: number; color: DataTableRendererThemeColor }> }\n | {\n type: \"categorical-color\";\n categories: Array<{\n value: string | number | boolean | null;\n color: DataTableRendererThemeColor;\n }>;\n };\n\nexport interface DataTableRendererColumn {\n id: string;\n label?: Localizable<string>;\n /** How filters and sorts compare the column. Without it, the type is inferred from the values. */\n type?: \"string\" | \"number\" | \"boolean\" | \"date\";\n /** Offers the column under Grouping in the table's Display menu. */\n groupable?: boolean;\n /** Whether this column can be filtered. Defaults to true. */\n filterable?: boolean;\n description?: Localizable<string>;\n icon?: string;\n hidden?: boolean;\n stat?: DataTableRendererColumnStat;\n renderer?: DataTableRendererColumnRenderer;\n}\n\nexport interface DataTableRendererRow {\n id: string;\n values: Record<string, JsonValue>;\n resource?: DataTableRendererResourceRef;\n}\n\nexport interface DataTableRendererQueryResult {\n rows: DataTableRendererRow[];\n columns?: DataTableRendererColumn[];\n}\n\nexport interface DataTableRendererRowAction<TParams extends Struct = Struct> {\n id: string;\n label: Localizable<string>;\n icon?: string;\n destructive?: boolean;\n command: CommandRef<TParams, unknown>;\n}\n\nexport interface DataTableRendererSelectionAction<TParams extends Struct = Struct> {\n id: string;\n label: Localizable<string>;\n icon?: string;\n destructive?: boolean;\n command: CommandRef<TParams, unknown>;\n}\n\nexport type DataTableRendererRowActivationHandler = RendererCallback<{ row: DataTableRendererRow }, void>;\n\nexport interface DataTableRendererContribution extends RendererContributionBase {\n toolbarActions?: ViewToolbarAction[];\n columns?: DataTableRendererColumn[];\n query: RendererCallback<DataTableRendererQueryParams, DataTableRendererQueryResult>;\n selectionMode?: \"none\" | \"multiple\";\n selectionActions?: DataTableRendererSelectionAction[];\n rowActions?: DataTableRendererRowAction[];\n onRowActivate?: DataTableRendererRowActivationHandler;\n initialPageSize?: number;\n pageSizeOptions?: number[];\n defaultSettings?: Partial<DataTableRendererSettings>;\n defaultFilter?: ViewFilterGroup;\n defaultSorts?: ViewSort[];\n defaultViews?: DataTableRendererSavedView[];\n defaultActiveViewId?: string;\n}\n","import type { Localizable } from \"../extension-kernel/l10n\";\nimport type {\n DataTableRendererSettings,\n KanbanRendererViewSettings,\n ViewFilterGroup,\n ViewSort,\n} from \"../extension-kernel/types\";\nimport { DEFAULT_DATA_TABLE_SETTINGS } from \"../extension-kernel/types/data-table-renderer\";\nimport { EMPTY_VIEW_FILTER } from \"./collection-view\";\n\nexport type KanbanViewSettings = KanbanRendererViewSettings;\n\nexport const DEFAULT_KANBAN_VIEW_SETTINGS: KanbanViewSettings = {\n viewMode: \"board\",\n columnGrouping: \"none\",\n rowGrouping: \"none\",\n displayProperties: [],\n};\n\ninterface DeclaredView<TSettings> {\n id: string;\n title: Localizable<string>;\n settings?: Partial<TSettings>;\n filter?: ViewFilterGroup;\n sorts?: ViewSort[];\n}\n\ninterface DeclaredViews<TSettings> {\n defaultSettings?: Partial<TSettings>;\n defaultFilter?: ViewFilterGroup;\n defaultSorts?: ViewSort[];\n defaultViews?: DeclaredView<TSettings>[];\n}\n\nconst builtInViews = <TSettings>(base: TSettings, record: DeclaredViews<TSettings>) => {\n const settings: TSettings = { ...base, ...record.defaultSettings };\n if (!record.defaultViews?.length)\n return {\n settings,\n views: [\n {\n id: \"default\",\n title: \"All\" as Localizable<string>,\n settings,\n filter: record.defaultFilter ?? EMPTY_VIEW_FILTER,\n sorts: record.defaultSorts ?? [],\n builtIn: true,\n },\n ],\n };\n return {\n settings,\n views: record.defaultViews.map((view) => ({\n ...view,\n settings: { ...settings, ...view.settings } as TSettings,\n filter: view.filter ?? EMPTY_VIEW_FILTER,\n sorts: view.sorts ?? [],\n builtIn: true,\n })),\n };\n};\n\n/** The views a board offers before anyone saves one. Titles are returned unlocalized. */\nexport const kanbanBuiltInViews = (\n record: DeclaredViews<KanbanViewSettings> & { attributes?: { id: string; type: { kind: string } }[] },\n) => {\n return builtInViews(DEFAULT_KANBAN_VIEW_SETTINGS, record);\n};\n\n/** The views a data table offers before anyone saves one. Titles are returned unlocalized. */\nexport const dataTableBuiltInViews = (record: DeclaredViews<DataTableRendererSettings>) =>\n builtInViews(DEFAULT_DATA_TABLE_SETTINGS, record);\n","import { z } from \"zod\";\nimport { extensionPanelRegions } from \"../extension-kernel/types/composition\";\nimport { extensionResourceRefSchema } from \"./resource-ref\";\n\nexport const relatedResourceOpeningSchema = z.object({\n resource: extensionResourceRefSchema,\n autoOpen: z.boolean().optional(),\n region: z.enum(extensionPanelRegions),\n open: z.enum([\"preview\", \"pin\"]).optional(),\n});\n","export interface LocalizedString {\n readonly $l10n: string;\n readonly default?: string;\n}\n\nexport type Localizable<T extends string = string> = T | LocalizedString;\n\nexport const l10n = (key: string, defaultValue?: string) => ({\n $l10n: key,\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n});\n\nexport const isLocalizedString = (value: unknown): value is LocalizedString =>\n typeof value === \"object\" &&\n value !== null &&\n \"$l10n\" in value &&\n typeof (value as { $l10n?: unknown }).$l10n === \"string\";\n","import { isNavigationHref } from \"./navigation-href\";\nimport { isFileSourcePosition } from \"./source-position\";\nimport type { NavigationTarget } from \"./types/navigation-target\";\nimport type { ResourceRef } from \"./types/resources\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n\nconst isContributionRef = (value: unknown, kind: string) =>\n isRecord(value) && value.kind === kind && typeof value.id === \"string\";\n\nconst isResource = (value: unknown) =>\n isRecord(value) && typeof value.type === \"string\" && typeof value.id === \"string\";\n\nconst isOpenIntent = (value: unknown) => value === undefined || value === \"preview\" || value === \"pin\";\n\nconst isPageTarget = (value: unknown, ancestors = new Set<unknown>()): boolean => {\n if (!isRecord(value) || value.kind !== \"page\" || !isContributionRef(value.page, \"page\")) return false;\n if (ancestors.has(value)) return false;\n if (value.resource !== undefined && !isResource(value.resource)) return false;\n if (value.section !== undefined && !isRecord(value.section)) return false;\n if (value.position !== undefined && (!isFileSourcePosition(value.position) || value.section !== undefined))\n return false;\n if (!isOpenIntent(value.open)) return false;\n if (value.parent === undefined) return true;\n const next = new Set(ancestors);\n next.add(value);\n return isPageTarget(value.parent, next);\n};\n\nconst isPanelTarget = (value: unknown) => {\n if (!isRecord(value) || value.kind !== \"panel\" || !isRecord(value.panel)) return false;\n const panel = value.panel;\n const validPanel =\n isContributionRef(panel, \"placement\") ||\n (panel.kind === \"page-slot\" && isContributionRef(panel.page, \"page\") && typeof panel.id === \"string\");\n return validPanel && (value.resource === undefined || isResource(value.resource)) && isOpenIntent(value.open);\n};\n\nconst isItemTarget = (value: unknown): value is Exclude<NavigationTarget, { kind: \"compound\" }> => {\n if (!isRecord(value)) return false;\n if (value.kind === \"page\") return isPageTarget(value);\n if (value.kind === \"panel\") return isPanelTarget(value);\n if (value.kind === \"href\") return isNavigationHref(value.href);\n return (\n value.kind === \"command\" &&\n isRecord(value.target) &&\n isContributionRef(value.target.command, \"command\") &&\n (value.target.params === undefined || isRecord(value.target.params))\n );\n};\n\nexport const isNavigationTarget = (value: unknown): value is NavigationTarget => {\n if (isItemTarget(value)) return true;\n if (!isRecord(value) || value.kind !== \"compound\" || !Array.isArray(value.targets) || value.targets.length === 0) {\n return false;\n }\n return value.targets.every((target) => isPageTarget(target) || isPanelTarget(target));\n};\n\nconst withExtensionOwner = <Ref extends { extensionId?: string }>(ref: Ref, extensionId: string | undefined): Ref =>\n ref.extensionId !== undefined || extensionId === undefined ? ref : ({ ...ref, extensionId } as Ref);\n\nconst toPageTarget = (\n target: Extract<NavigationTarget, { kind: \"page\" }>,\n extensionId: string | undefined,\n projectId?: string,\n): Extract<NavigationTarget, { kind: \"page\" }> => ({\n ...target,\n page: withExtensionOwner(target.page, extensionId),\n ...(target.resource ? { resource: qualifyResource(target.resource, extensionId, projectId) } : {}),\n ...(target.parent ? { parent: toPageTarget(target.parent, extensionId, projectId) } : {}),\n});\n\nconst qualifyResource = (resource: ResourceRef, extensionId?: string, projectId?: string) => ({\n ...resource,\n extensionId: resource.extensionId ?? extensionId,\n projectId: resource.projectId ?? projectId,\n});\n\nexport const qualifyNavigationTarget = (\n target: NavigationTarget,\n extensionId: string,\n projectId?: string,\n): NavigationTarget => {\n if (!isNavigationTarget(target)) throw new Error(\"Invalid navigation target.\");\n if (target.kind === \"page\") return toPageTarget(target, extensionId, projectId);\n if (target.kind === \"panel\")\n return {\n ...target,\n panel:\n target.panel.kind === \"page-slot\"\n ? { ...target.panel, page: withExtensionOwner(target.panel.page, extensionId) }\n : withExtensionOwner(target.panel, extensionId),\n ...(target.resource ? { resource: qualifyResource(target.resource, extensionId, projectId) } : {}),\n };\n if (target.kind === \"command\")\n return { ...target, target: { ...target.target, command: withExtensionOwner(target.target.command, extensionId) } };\n if (target.kind === \"href\") return target;\n return {\n ...target,\n targets: target.targets.map(\n (item) =>\n qualifyNavigationTarget(item, extensionId, projectId) as Extract<NavigationTarget, { kind: \"page\" | \"panel\" }>,\n ),\n };\n};\n","import type { SerializedError } from \"./types/commands\";\n\nexport const serializeCommandError = (error: unknown) => {\n const ancestors: object[] = [];\n const shape = (value: Error) => ({\n ...value,\n name: value.name,\n message: value.message,\n ...(value.stack ? { stack: value.stack } : {}),\n ...(value.cause !== undefined ? { cause: value.cause } : {}),\n });\n const shapes = new WeakMap<Error, ReturnType<typeof shape>>();\n const errorShape = (value: Error) => {\n const existing = shapes.get(value);\n if (existing) return existing;\n const result = shape(value);\n shapes.set(value, result);\n return result;\n };\n const source = error instanceof Error ? errorShape(error) : { message: String(error) };\n const result: SerializedError = JSON.parse(\n JSON.stringify(source, function (this: unknown, _key, value: unknown) {\n const normalized = value instanceof Error ? errorShape(value) : value;\n if (typeof normalized === \"bigint\") return String(normalized);\n if (normalized && typeof normalized === \"object\") {\n while (ancestors.length && ancestors.at(-1) !== this) ancestors.pop();\n if (ancestors.includes(normalized)) return \"[Circular]\";\n ancestors.push(normalized);\n }\n return normalized;\n }),\n );\n return result;\n};\n","import type { AgentInfo, AgentModel, HarnessParamsInfo } from \"../../agents\";\nimport type { TerminalSessionOperation, TerminalSessionResult } from \"../../extensions.terminal\";\nimport type { CreateNotificationInput, Notification, NotificationStatus } from \"../../notifications/types\";\nimport type { CommandNotice, CommandOutcome } from \"./commands\";\nimport type { ExtensionBlobRef } from \"./context\";\nimport type { JsonObject, JsonValue } from \"./json\";\nimport type { NavigationTarget } from \"./navigation-target\";\nimport type { PageLocation, PageParamValue } from \"./pages\";\nimport type { ResourceRef } from \"./resources\";\nimport type { ExtensionHarnessInput } from \"./sessions\";\n\nexport type { ExtensionBlobRef } from \"./context\";\n\nexport const WEBVIEW_HOST_CAPABILITY_VERSION = 1;\n\n// Capabilities a webview must declare in its manifest before the bridge will route them.\nexport const WEBVIEW_DECLARABLE_CAPABILITIES = [\n \"clipboard.write\",\n \"commands.execute\",\n \"commands.stream\",\n \"harnesses.read\",\n \"resources.actions\",\n \"navigation.open\",\n \"page.params.update\",\n \"placement.close\",\n \"notification.show\",\n \"notification.action\",\n \"notification.resolve\",\n \"notification.dismiss\",\n \"preferences.get\",\n \"preferences.set\",\n \"extension.settings.all\",\n \"extension.settings.get\",\n \"extension.settings.set\",\n \"extension.settings.delete\",\n \"terminal.session\",\n \"files.upload\",\n \"files.list\",\n \"files.delete\",\n] as const;\n\n// Capabilities that must be declared with a scope suffix (`name:scope`). Each\n// declaration grants one scope; a bare declaration is invalid.\nexport const WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES = [\"artifacts.read\"] as const;\n\n// Runtime plumbing the guest invokes on its own (e.g. keyboard forwarding). Enabled\n// wherever the host implements them, with no manifest declaration required.\nexport const ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES = [\"host.dispatchKeyboardEvent\"] as const;\n\nexport const WEBVIEW_HOST_CAPABILITIES = [\n ...WEBVIEW_DECLARABLE_CAPABILITIES.filter((capability) => capability !== \"clipboard.write\"),\n ...WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES,\n] as const;\n\nexport type WebviewHostCapability = (typeof WEBVIEW_HOST_CAPABILITIES)[number];\nexport type WebviewDeclarableCapability = (typeof WEBVIEW_DECLARABLE_CAPABILITIES)[number];\nexport type WebviewScopedDeclarableCapability = (typeof WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES)[number];\n/** @deprecated Use bare capability names. Versions will be removed in 0.45. */\nexport type VersionedWebviewCapabilityDeclaration =\n `${WebviewDeclarableCapability}@${typeof WEBVIEW_HOST_CAPABILITY_VERSION}`;\n\nexport type WebviewCapabilityDeclaration =\n | WebviewDeclarableCapability\n | VersionedWebviewCapabilityDeclaration\n | `${WebviewScopedDeclarableCapability}:${string}`;\n\nexport interface WebviewCommandsExecuteParams {\n commandId: string;\n params?: JsonObject;\n workspaceId?: string;\n resource?: ResourceRef;\n metadata?: JsonObject;\n}\n\nexport type WebviewCommandsStreamParams =\n | ({ operation: \"start\"; streamId: string } & WebviewCommandsExecuteParams)\n | { operation: \"cancel\"; streamId: string }\n | { operation: \"ack\"; streamId: string; bytes: number };\n\nexport type WebviewCommandStreamEvent =\n | { streamId: string; type: \"data\"; data: JsonValue }\n | { streamId: string; type: \"end\"; outcome: CommandOutcome };\n\nexport interface WebviewNavigationOpenParams {\n target: NavigationTarget;\n}\n\n/** @deprecated Use CommandNotice with type and message. */\nexport interface WebviewNotificationShowParams {\n level: \"info\" | \"success\" | \"warning\" | \"error\";\n title: string;\n message?: string;\n}\n\n/** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\nexport type WebviewNotificationActionParams = Omit<CreateNotificationInput, \"projectId\">;\n/** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\nexport interface WebviewNotificationResolveParams {\n id?: string;\n dedupeKey?: string;\n status?: Extract<NotificationStatus, \"done\" | \"dismissed\" | \"expired\">;\n}\n/** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\nexport type WebviewNotificationDismissParams = Pick<WebviewNotificationResolveParams, \"id\" | \"dedupeKey\">;\n\nexport interface WebviewPreferencesGetParams {\n /** Access to another extension's registered names is deprecated. Use names owned by the caller. */\n name: string;\n scope?: {\n scope: \"default\" | \"user\" | \"project\" | \"workspace\" | \"extension\" | \"session\";\n scopeId?: string;\n };\n}\n\nexport interface WebviewPreferencesSetParams extends WebviewPreferencesGetParams {\n value: boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;\n}\n\nexport interface WebviewPageParamsUpdateParams {\n /** Merge overrides into the active page. Null resets a name to its declared default. */\n params: Readonly<Record<string, PageParamValue | null>>;\n}\n\nexport interface WebviewExtensionSettingKeyParams {\n key: string;\n}\n\nexport interface WebviewExtensionSettingSetParams extends WebviewExtensionSettingKeyParams {\n value: unknown;\n}\n\nexport type WebviewFileScope = { type: \"project\" } | { type: \"resource\"; id: string } | { type: string; id?: string };\n\nexport interface WebviewFilesUploadParams {\n name: string;\n data: Uint8Array | ArrayBuffer;\n mimeType?: string;\n scope?: WebviewFileScope;\n}\n\nexport interface WebviewFilesListParams {\n scope?: WebviewFileScope;\n}\n\nexport interface WebviewFilesDeleteParams {\n id: string;\n}\n\n// One bridge method covers every artifact read; the operation is in the params,\n// mirroring terminal.session. The mount is always the mount's local id.\nexport type WebviewArtifactsReadParams =\n | { op: \"list\"; mount: string; prefix?: string }\n | { op: \"readText\"; mount: string; path: string }\n | { op: \"imageUrl\"; mount: string; path: string };\n\nexport interface WebviewArtifactFile {\n path: string;\n size: number;\n mediaType: string;\n}\n\nexport interface WebviewKeyboardEventParams {\n key?: string;\n code?: string;\n ctrlKey?: boolean;\n metaKey?: boolean;\n altKey?: boolean;\n shiftKey?: boolean;\n repeat?: boolean;\n}\n\nexport interface WebviewHostCapabilityParams {\n \"harnesses.read\": { harnessId?: string; model?: string };\n \"resources.actions\":\n | { operation: \"list\"; resource: ResourceRef }\n | { operation: \"execute\"; resource: ResourceRef; key: string };\n \"commands.execute\": WebviewCommandsExecuteParams;\n \"commands.stream\": WebviewCommandsStreamParams;\n \"page.params.update\": WebviewPageParamsUpdateParams;\n \"navigation.open\": WebviewNavigationOpenParams;\n \"placement.close\": Record<string, never>;\n \"notification.show\": CommandNotice | WebviewNotificationShowParams;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.action\": WebviewNotificationActionParams;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.resolve\": WebviewNotificationResolveParams;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.dismiss\": WebviewNotificationDismissParams;\n \"preferences.get\": WebviewPreferencesGetParams;\n \"preferences.set\": WebviewPreferencesSetParams;\n \"extension.settings.all\": Record<string, never>;\n \"extension.settings.get\": WebviewExtensionSettingKeyParams;\n \"extension.settings.set\": WebviewExtensionSettingSetParams;\n \"extension.settings.delete\": WebviewExtensionSettingKeyParams;\n /** @deprecated Use the host terminal surface. */\n \"terminal.session\": TerminalSessionOperation;\n \"files.upload\": WebviewFilesUploadParams;\n /** @deprecated Use extension commands and owned storage. */\n \"files.list\": WebviewFilesListParams;\n /** @deprecated Use extension commands and owned storage. */\n \"files.delete\": WebviewFilesDeleteParams;\n \"artifacts.read\": WebviewArtifactsReadParams;\n \"host.dispatchKeyboardEvent\": WebviewKeyboardEventParams;\n}\n\nexport interface WebviewHostCapabilityResults {\n \"harnesses.read\": {\n harnesses: AgentInfo[];\n models: AgentModel[];\n schema?: HarnessParamsInfo;\n defaults?: Record<string, string | boolean>;\n selection?: ExtensionHarnessInput;\n };\n \"resources.actions\": WebviewResourceAction[];\n \"commands.execute\": { outcome: CommandOutcome };\n \"commands.stream\": { operation: \"start\" | \"cancel\" | \"ack\"; accepted: true };\n \"page.params.update\": { location: PageLocation };\n \"navigation.open\": void;\n \"placement.close\": void;\n \"notification.show\": void;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.action\": Notification;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.resolve\": Notification | { resolved: number; notifications: Notification[] };\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.dismiss\": Notification | { resolved: number; notifications: Notification[] };\n \"preferences.get\": WebviewPreferencesSetParams[\"value\"] | undefined;\n \"preferences.set\": { name: string; value: WebviewPreferencesSetParams[\"value\"] };\n \"extension.settings.all\": Record<string, unknown>;\n \"extension.settings.get\": unknown;\n \"extension.settings.set\": { key: string; value: unknown };\n \"extension.settings.delete\": void;\n /** @deprecated Use the host terminal surface. */\n \"terminal.session\": TerminalSessionResult;\n \"files.upload\": ExtensionBlobRef;\n /** @deprecated Use extension commands and owned storage. */\n \"files.list\": { files: ExtensionBlobRef[] };\n /** @deprecated Use extension commands and owned storage. */\n \"files.delete\": void;\n \"artifacts.read\": WebviewArtifactFile[] | string;\n \"host.dispatchKeyboardEvent\": void;\n}\n\nexport interface WebviewResourceAction {\n key: string;\n label: string;\n commandId?: string;\n /** Workbench icon name. */\n icon?: string;\n /** Image URL that replaces `icon` when present. */\n iconSrc?: string;\n /** Help text, or the reason the action is disabled. */\n description?: string;\n isDisabled?: boolean;\n separatorBefore?: boolean;\n group?: { id: string; label?: string };\n}\n\nexport type WebviewHostCapabilityResult<\n Capability extends WebviewHostCapability,\n Params extends WebviewHostCapabilityParams[Capability] = WebviewHostCapabilityParams[Capability],\n> = Capability extends \"artifacts.read\"\n ? Params extends { op: \"list\" }\n ? WebviewArtifactFile[]\n : Params extends { op: \"readText\" | \"imageUrl\" }\n ? string\n : WebviewHostCapabilityResults[Capability]\n : Capability extends \"terminal.session\"\n ? Params extends { operation: \"open\" }\n ? Extract<TerminalSessionResult, { operation: \"open\" }>\n : Params extends { operation: \"write\" | \"resize\" | \"kill\" | \"subscribe\" }\n ? Exclude<TerminalSessionResult, { operation: \"open\" }>\n : TerminalSessionResult\n : WebviewHostCapabilityResults[Capability];\n","export const EXTENSION_EVENTS_SCOPE = \"extension.events\";\n/** Host event sent with `{ type: \"changed\" }` after a listed resource's actions may have changed. */\nexport const RESOURCE_ACTIONS_EVENTS_SCOPE = \"resources.actions\";\n\nexport const artifactMountId = (mount: string | { id: string }) => (typeof mount === \"string\" ? mount : mount.id);\n","import type { WebviewHostCapability, WebviewScopedDeclarableCapability } from \"pstdio-api-contracts\";\nimport {\n WEBVIEW_DECLARABLE_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITY_VERSION,\n WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES,\n} from \"pstdio-api-contracts\";\nimport type { HostCapabilityRequest } from \"./index\";\n\nexport {\n ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES,\n WEBVIEW_DECLARABLE_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITY_VERSION,\n WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES,\n type WebviewDeclarableCapability,\n type WebviewHostCapability,\n type WebviewScopedDeclarableCapability,\n} from \"pstdio-api-contracts\";\n\nexport type WebviewCapabilityDiagnosticCode =\n | \"undeclared_webview_capability\"\n | \"unsupported_webview_capability\"\n | \"unsupported_webview_capability_version\";\n\nexport interface WebviewCapabilityDiagnostic {\n capability: string;\n code: WebviewCapabilityDiagnosticCode;\n message: string;\n severity: \"error\";\n}\n\nexport type HostCapability<TParams = unknown, TResult = unknown> = (params: TParams) => Promise<TResult> | TResult;\nexport type HostCapabilityRegistry = Partial<Record<WebviewHostCapability, HostCapability>>;\n\ninterface CreateHostCapabilityGateInput {\n capabilities: HostCapabilityRegistry;\n declaredCapabilities?: readonly string[];\n onDiagnostic?: (diagnostic: WebviewCapabilityDiagnostic) => void;\n}\n\nconst publicCapabilityNames = new Set<string>([...WEBVIEW_HOST_CAPABILITIES, ...WEBVIEW_DECLARABLE_CAPABILITIES]);\nconst scopedCapabilityNames = new Set<string>(WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES);\n\nconst isPublicCapability = (name: string): name is WebviewHostCapability | \"clipboard.write\" =>\n publicCapabilityNames.has(name);\n\nconst isScopedCapability = (name: string): name is WebviewScopedDeclarableCapability => scopedCapabilityNames.has(name);\n\nexport const parseWebviewCapabilityDeclaration = (capability: string) => {\n const [nameAndScope = \"\", versionText] = capability.split(\"@\");\n const scopeIndex = nameAndScope.indexOf(\":\");\n const name = scopeIndex === -1 ? nameAndScope : nameAndScope.slice(0, scopeIndex);\n const scope = scopeIndex === -1 ? undefined : nameAndScope.slice(scopeIndex + 1);\n const version = versionText === undefined ? WEBVIEW_HOST_CAPABILITY_VERSION : Number(versionText);\n\n return { capability, name, scope, version };\n};\n\n// A scoped capability needs `name:scope`; every other capability must stay bare.\nconst validateDeclarationShape = (parsed: ReturnType<typeof parseWebviewCapabilityDeclaration>) => {\n if (isScopedCapability(parsed.name)) return Boolean(parsed.scope);\n return parsed.scope === undefined;\n};\n\nconst unsupportedCapability = (capability: string): WebviewCapabilityDiagnostic => ({\n capability,\n code: \"unsupported_webview_capability\",\n message: `Unsupported webview capability: ${capability}`,\n severity: \"error\",\n});\n\nconst unsupportedVersion = (capability: string, name: string, version: number): WebviewCapabilityDiagnostic => ({\n capability,\n code: \"unsupported_webview_capability_version\",\n message: `Unsupported webview capability version: ${name}@${version.toString()} (supported: ${WEBVIEW_HOST_CAPABILITY_VERSION.toString()})`,\n severity: \"error\",\n});\n\nconst undeclaredCapability = (capability: string): WebviewCapabilityDiagnostic => ({\n capability,\n code: \"undeclared_webview_capability\",\n message: `Webview did not declare host capability: ${capability}`,\n severity: \"error\",\n});\n\nexport const validateWebviewCapabilityDeclarations = (\n declaredCapabilities: readonly string[] | undefined,\n capabilities: HostCapabilityRegistry = {},\n) => {\n const diagnostics: WebviewCapabilityDiagnostic[] = [];\n const allowed = new Set<WebviewHostCapability>();\n const allowedScopes = new Map<WebviewHostCapability, Set<string>>();\n\n for (const declaration of declaredCapabilities ?? []) {\n const parsed = parseWebviewCapabilityDeclaration(declaration);\n if (!isPublicCapability(parsed.name) || !validateDeclarationShape(parsed)) {\n diagnostics.push(unsupportedCapability(declaration));\n continue;\n }\n if (parsed.version !== WEBVIEW_HOST_CAPABILITY_VERSION) {\n diagnostics.push(unsupportedVersion(declaration, parsed.name, parsed.version));\n continue;\n }\n // Browser permissions are delegated by the iframe, not routed through the bridge.\n if (parsed.name === \"clipboard.write\") continue;\n if (!capabilities[parsed.name as WebviewHostCapability]) {\n diagnostics.push(unsupportedCapability(declaration));\n continue;\n }\n if (parsed.scope === undefined) {\n allowed.add(parsed.name as WebviewHostCapability);\n continue;\n }\n const scopes = allowedScopes.get(parsed.name) ?? new Set<string>();\n scopes.add(parsed.scope);\n allowedScopes.set(parsed.name, scopes);\n }\n\n return { allowed, allowedScopes, diagnostics };\n};\n\nexport const validateWebviewCapabilityNames = (declaredCapabilities: readonly string[] | undefined) => {\n const diagnostics: WebviewCapabilityDiagnostic[] = [];\n\n for (const declaration of declaredCapabilities ?? []) {\n const parsed = parseWebviewCapabilityDeclaration(declaration);\n if (!isPublicCapability(parsed.name) || !validateDeclarationShape(parsed)) {\n diagnostics.push(unsupportedCapability(declaration));\n continue;\n }\n if (parsed.version !== WEBVIEW_HOST_CAPABILITY_VERSION) {\n diagnostics.push(unsupportedVersion(declaration, parsed.name, parsed.version));\n }\n }\n\n return diagnostics;\n};\n\n// Scoped capabilities carry their grant in the params: artifacts.read names the\n// mount it reads. The gate compares that value against the declared scopes.\nconst requestScope = (request: HostCapabilityRequest) => {\n const params = request.params as { mount?: unknown } | undefined;\n return typeof params?.mount === \"string\" && params.mount.length > 0 ? params.mount : undefined;\n};\n\nexport const createHostCapabilityGate = (input: CreateHostCapabilityGateInput) => {\n const { allowed, allowedScopes, diagnostics } = validateWebviewCapabilityDeclarations(\n input.declaredCapabilities,\n input.capabilities,\n );\n\n const emit = (diagnostic: WebviewCapabilityDiagnostic) => {\n input.onDiagnostic?.(diagnostic);\n };\n\n const deny = (diagnostic: WebviewCapabilityDiagnostic) => {\n emit(diagnostic);\n return Object.assign(new Error(diagnostic.message), {\n code: diagnostic.code,\n data: { capability: diagnostic.capability },\n });\n };\n\n return {\n diagnostics,\n\n async call(request: HostCapabilityRequest) {\n if (!isPublicCapability(request.method) || request.method === \"clipboard.write\")\n throw deny(unsupportedCapability(request.method));\n\n if (isScopedCapability(request.method)) {\n const scope = requestScope(request);\n if (!scope) throw deny(unsupportedCapability(request.method));\n // The denial names the exact declaration the webview is missing.\n if (!allowedScopes.get(request.method)?.has(scope)) {\n throw deny(undeclaredCapability(`${request.method}:${scope}`));\n }\n } else if (!allowed.has(request.method)) {\n throw deny(undeclaredCapability(request.method));\n }\n\n const handler = input.capabilities[request.method];\n if (!handler) throw deny(unsupportedCapability(request.method));\n\n return await handler(request.params);\n },\n };\n};\n","import type { WebviewHostProps } from \"pstdio-api-contracts/extension-kernel\";\n\nexport const createWebviewHostProps = (props: Partial<WebviewHostProps> & Record<string, unknown> = {}) => {\n const locale = props.locale ?? \"en\";\n return {\n ...props,\n projectId: props.projectId,\n themePreference: props.themePreference ?? \"system\",\n locale,\n resource: props.resource,\n pageLocation: props.pageLocation,\n pageParams: props.pageParams ?? {},\n translations: props.translations ?? { locale, defaultLocale: locale, bundle: {}, defaultBundle: {} },\n } satisfies WebviewHostProps;\n};\n","import type { RuntimeErrorPayload } from \"./contract\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\n\nconst safeStringify = (value: unknown) => {\n try {\n const json = JSON.stringify(value);\n if (typeof json === \"string\" && json.length > 0) return json;\n } catch {\n // Circular or non-serializable — fall through.\n }\n try {\n return String(value);\n } catch {\n return \"Unknown error\";\n }\n};\n\nexport const normalizeRuntimeError = (value: unknown): RuntimeErrorPayload => {\n if (value instanceof Error) return { message: value.message, stack: value.stack };\n\n if (typeof value === \"string\") return { message: value };\n\n if (isRecord(value)) {\n const message = typeof value.message === \"string\" ? value.message : null;\n const stack = typeof value.stack === \"string\" ? value.stack : undefined;\n if (message) return stack ? { message, stack } : { message };\n return { message: safeStringify(value) };\n }\n\n if (value === null || value === undefined) return { message: \"Unknown error\" };\n\n return { message: safeStringify(value) };\n};\n","import type { HostCapabilityReply } from \"../contract\";\nimport { normalizeRuntimeError } from \"../normalize-error\";\n\n/** Keep error details in an ordinary RPC value so nested data survives serialization. */\nexport const capabilityReply = async (run: () => unknown) => {\n try {\n return { ok: true, value: await run() } satisfies HostCapabilityReply;\n } catch (error) {\n const details = error !== null && typeof error === \"object\" ? error : {};\n return {\n ok: false,\n error: {\n code: \"code\" in details && typeof details.code === \"string\" ? details.code : \"webview_capability_failed\",\n message: normalizeRuntimeError(error).message,\n ...(\"data\" in details ? { data: details.data } : {}),\n },\n } satisfies HostCapabilityReply;\n }\n};\n","export const extensionIframeAllow = (capabilities: readonly string[] = []) =>\n capabilities.some((capability) => capability === \"clipboard.write\" || capability === \"clipboard.write@1\")\n ? \"fullscreen; clipboard-write\"\n : \"fullscreen\";\n","import type { ThemePreference } from \"../contract\";\n\nexport const collectChakraThemeVariables = () => {\n if (typeof document === \"undefined\") return {};\n\n const computed = getComputedStyle(document.documentElement);\n const variables: Record<string, string> = {};\n for (let index = 0; index < computed.length; index += 1) {\n const name = computed.item(index);\n if (name.startsWith(\"--chakra-\")) {\n variables[name] = computed.getPropertyValue(name).trim();\n }\n }\n return variables;\n};\n\nexport const resolveActiveTheme = (fallback: ThemePreference): ThemePreference => {\n if (typeof document === \"undefined\") return fallback;\n const value = document.documentElement.getAttribute(\"data-theme\");\n if (value === \"dark\" || value === \"light\") return value;\n\n const colorMode = document.documentElement.getAttribute(\"data-color-mode\");\n return colorMode === \"dark\" || colorMode === \"light\" ? colorMode : fallback;\n};\n\nexport const postThemeToFrame = (\n iframe: HTMLIFrameElement | null,\n theme: ThemePreference,\n variables: Record<string, string>,\n) => {\n iframe?.contentWindow?.postMessage({ type: \"pstdio.theme\", theme, variables }, \"*\");\n};\n","import type { WebviewHostProps } from \"pstdio-api-contracts/extension-kernel\";\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { host } from \"rimless\";\nimport type {\n ExtensionViewDescriptor,\n GuestApi,\n HostApi,\n HostCapabilityRegistry,\n HostCapabilityRequest,\n ThemePreference,\n WebviewCapabilityDiagnostic,\n WebviewPointerEvent,\n} from \"../contract\";\nimport { createHostCapabilityGate } from \"../contract\";\nimport { createWebviewHostProps } from \"../contract/host-props\";\nimport { normalizeRuntimeError } from \"../normalize-error\";\nimport { capabilityReply } from \"./capability-reply\";\nimport type { HostEventPublisher } from \"./host-event-publisher\";\nimport { extensionIframeAllow } from \"./iframe-permissions\";\nimport { collectChakraThemeVariables, resolveActiveTheme } from \"./theme\";\n\nexport interface ExtensionFrameProps {\n sizing?: \"content-width\";\n view: ExtensionViewDescriptor;\n props: Partial<WebviewHostProps> & Record<string, unknown>;\n theme: ThemePreference;\n capabilities?: HostCapabilityRegistry;\n /** Private guest shortcut forwarding, outside extension capability grants. */\n onKeyboardEvent?: (event: import(\"pstdio-api-contracts\").WebviewKeyboardEventParams) => void;\n /** Publisher whose emitted events are forwarded into the guest once connected. */\n hostEvents?: HostEventPublisher;\n onReady?: () => void;\n /** Reports a load or runtime failure. The frame draws no error UI; the caller shows the failure once. */\n onError?: (error: { message: string; stack?: string }) => void;\n onDiagnostics?: (diagnostics: WebviewCapabilityDiagnostic[]) => void;\n title?: string;\n}\n\ntype GuestRemote = Pick<HostApi, \"init\" | \"themeUpdate\" | \"propsUpdate\"> & {\n hostEvent?: HostApi[\"hostEvent\"];\n};\n\nconst iframeStyle: CSSProperties = {\n border: 0,\n display: \"block\",\n flex: \"1 1 0%\",\n height: \"100%\",\n minHeight: 0,\n width: \"100%\",\n};\n\nconst frameShellStyle: CSSProperties = {\n display: \"flex\",\n height: \"100%\",\n minHeight: 0,\n position: \"relative\",\n width: \"100%\",\n};\n\nexport const EXTENSION_IFRAME_SANDBOX = \"allow-scripts allow-forms allow-popups\";\n\nexport const ExtensionFrame = (props: ExtensionFrameProps) => {\n const {\n view,\n props: extensionProps,\n theme,\n capabilities,\n onKeyboardEvent,\n hostEvents,\n onReady,\n onError,\n onDiagnostics,\n title,\n sizing,\n } = props;\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const remoteRef = useRef<GuestRemote | null>(null);\n const initializedRef = useRef(false);\n // The connection belongs to one browsing context. Navigation keeps the iframe's\n // WindowProxy, so a different contentWindow means the runtime document is gone.\n const connectedWindowRef = useRef<Window | null>(null);\n const propsRef = useRef(createWebviewHostProps(extensionProps));\n const themeRef = useRef(theme);\n const capabilitiesRef = useRef(capabilities);\n const onKeyboardEventRef = useRef(onKeyboardEvent);\n const hostEventsRef = useRef(hostEvents);\n const declaredCapabilitiesRef = useRef(view.webview.capabilities);\n const onReadyRef = useRef(onReady);\n const onErrorRef = useRef(onError);\n const onDiagnosticsRef = useRef(onDiagnostics);\n // Bumped when the browser reloads the iframe (e.g. a DOM reparent while the Side\n // Panel floats). The bump remounts a fresh iframe so a single clean connection\n // owns the new browsing context.\n const [frameEpoch, setFrameEpoch] = useState(0);\n const [contentWidth, setContentWidth] = useState(0);\n\n propsRef.current = createWebviewHostProps(extensionProps);\n themeRef.current = theme;\n capabilitiesRef.current = capabilities;\n onKeyboardEventRef.current = onKeyboardEvent;\n hostEventsRef.current = hostEvents;\n declaredCapabilitiesRef.current = view.webview.capabilities;\n onReadyRef.current = onReady;\n onErrorRef.current = onError;\n onDiagnosticsRef.current = onDiagnostics;\n\n // Connect once per browsing context. React StrictMode dev double-mount and parent\n // re-renders with unstable prop references (e.g. `webview.styles` rebuilt by `.map`)\n // would otherwise tear down the live connection while the iframe keeps its state,\n // leaving guest-to-host RPCs with no listener.\n // biome-ignore lint/correctness/useExhaustiveDependencies: frameEpoch remounts the iframe this effect reads through iframeRef.\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n // Reinserting the iframe (a DOM move without moveBefore, or StrictMode's dev-only\n // remount of a moved host) replaces its browsing context with about:blank because\n // the src attribute is empty. This can happen before the runtime finishes loading,\n // so compare browsing contexts instead of counting loads. Remount a fresh iframe\n // and connection when the context changed.\n const onFrameLoad = () => {\n if (iframe.contentWindow !== connectedWindowRef.current) setFrameEpoch((epoch) => epoch + 1);\n };\n iframe.addEventListener(\"load\", onFrameLoad);\n const removeLoadListener = () => iframe.removeEventListener(\"load\", onFrameLoad);\n\n if (iframe.contentWindow === connectedWindowRef.current) return removeLoadListener;\n connectedWindowRef.current = iframe.contentWindow;\n\n // Snapshot styles at connect time so subsequent parent re-renders that produce a\n // new array reference don't affect what we send in init.\n const stylesAtConnect = view.webview.styles;\n const moduleUrlAtConnect = view.webview.moduleUrl;\n\n const reportDiagnostics = (diagnostics: WebviewCapabilityDiagnostic[]) => {\n if (diagnostics.length > 0) onDiagnosticsRef.current?.(diagnostics);\n };\n\n const createCapabilityGate = () =>\n createHostCapabilityGate({\n capabilities: capabilitiesRef.current ?? {},\n declaredCapabilities: declaredCapabilitiesRef.current,\n onDiagnostic: (diagnostic) => reportDiagnostics([diagnostic]),\n });\n\n reportDiagnostics(createCapabilityGate().diagnostics);\n\n const hostApi = {\n dispatchPointerEvent: (event: WebviewPointerEvent) => {\n if (iframeRef.current !== iframe || !iframe.isConnected) return;\n if (event.type !== \"pointerdown\" && event.type !== \"click\") return;\n const bounds = iframe.getBoundingClientRect();\n if (!bounds.width || !bounds.height) return;\n // Outside-interaction layers need the host iframe as their target, including\n // when the iframe belongs to the menu itself. Guest DOM stays sandboxed.\n iframe.dispatchEvent(\n new PointerEvent(event.type, {\n ...event,\n bubbles: true,\n composed: true,\n cancelable: true,\n clientX: bounds.left + event.clientX * (bounds.width / iframe.clientWidth),\n clientY: bounds.top + event.clientY * (bounds.height / iframe.clientHeight),\n }),\n );\n },\n contentWidthChanged: (width: number) => {\n if (sizing === \"content-width\" && Number.isFinite(width) && width >= 0) setContentWidth(width);\n },\n dispatchKeyboardEvent: async (event: import(\"pstdio-api-contracts\").WebviewKeyboardEventParams) => {\n if (onKeyboardEventRef.current) return onKeyboardEventRef.current(event);\n document.dispatchEvent(new KeyboardEvent(\"keydown\", { ...event, bubbles: true, cancelable: true }));\n },\n ready: () => {\n // no-op; init fires from host.connect().then() below.\n },\n runtimeError: (payload: { message: string; stack?: string }) => {\n onErrorRef.current?.(payload);\n },\n call: async (request: HostCapabilityRequest) => {\n return await capabilityReply(() => createCapabilityGate().call(request));\n },\n } satisfies GuestApi;\n\n const connect = () => {\n initializedRef.current = false;\n remoteRef.current = null;\n\n const connection = host.connect(iframe, hostApi);\n // A sandboxed iframe without allow-same-origin posts messages with origin \"null\".\n // Leaving the iframe src attribute empty lets rimless validate the guest by\n // contentWindow identity while still loading the API-owned runtime document.\n iframe.contentWindow?.location.replace(view.webview.runtimeUrl);\n\n connection\n .then(async (conn) => {\n if (iframeRef.current !== iframe) return;\n const remote = conn.remote as GuestRemote;\n remoteRef.current = remote;\n hostEventsRef.current?.bind((message) => remote.hostEvent?.(message));\n\n await remote.init({\n sizing,\n moduleUrl: moduleUrlAtConnect,\n styles: stylesAtConnect,\n props: propsRef.current,\n theme: resolveActiveTheme(themeRef.current),\n themeVariables: collectChakraThemeVariables(),\n extensionId: view.extensionId,\n });\n if (iframeRef.current !== iframe) return;\n initializedRef.current = true;\n onReadyRef.current?.();\n })\n .catch((error) => {\n if (iframeRef.current !== iframe) return;\n onErrorRef.current?.(normalizeRuntimeError(error));\n });\n };\n\n connect();\n\n // Intentionally no connection.close() in cleanup. The iframe runtime handshakes once\n // at iframe load and binds to that connection ID. Closing during React StrictMode's\n // dev-only cleanup would leave the live iframe with no host listener.\n return removeLoadListener;\n }, [frameEpoch, sizing, view.extensionId, view.webview.runtimeUrl, view.webview.moduleUrl, view.webview.styles]);\n\n // Re-renders may hand the frame a fresh publisher (renderers rebuild their\n // capability context per render); route it to the live connection.\n useEffect(() => {\n const remote = remoteRef.current;\n if (!remote || !hostEvents) return;\n hostEvents.bind((message) => remote.hostEvent?.(message));\n // Release the sink so a replaced publisher stops referencing this remote\n // and returns to buffering.\n return () => hostEvents.unbind();\n }, [hostEvents]);\n\n useEffect(() => {\n if (!initializedRef.current) return;\n remoteRef.current?.propsUpdate({ props: createWebviewHostProps(extensionProps) });\n }, [extensionProps]);\n\n useEffect(() => {\n if (!initializedRef.current) return;\n remoteRef.current?.themeUpdate({\n theme: resolveActiveTheme(theme),\n variables: collectChakraThemeVariables(),\n });\n }, [theme]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof MutationObserver === \"undefined\") return;\n\n let frame: number | null = null;\n const schedule = () => {\n if (frame !== null) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n frame = null;\n if (!initializedRef.current) return;\n remoteRef.current?.themeUpdate({\n theme: resolveActiveTheme(themeRef.current),\n variables: collectChakraThemeVariables(),\n });\n });\n };\n\n const observer = new MutationObserver(schedule);\n const options = { attributeFilter: [\"class\", \"data-color-mode\", \"data-theme\", \"style\"], attributes: true };\n observer.observe(document.documentElement, options);\n observer.observe(document.body, options);\n\n return () => {\n observer.disconnect();\n if (frame !== null) cancelAnimationFrame(frame);\n };\n }, []);\n\n return (\n <div style={{ ...frameShellStyle, width: sizing === \"content-width\" ? contentWidth : \"100%\" }}>\n <iframe\n // A new runtime or module needs its own browsing context and bridge handshake.\n key={`${frameEpoch}\\n${view.webview.runtimeUrl}\\n${view.webview.moduleUrl}`}\n ref={iframeRef}\n title={title ?? view.label}\n allow={extensionIframeAllow(view.webview.capabilities)}\n sandbox={EXTENSION_IFRAME_SANDBOX}\n // Match the host theme so the empty/loading iframe paints the right canvas\n // instead of flashing the default light background while the guest connects.\n style={{ ...iframeStyle, colorScheme: theme }}\n onError={() => {\n onErrorRef.current?.({ message: `Failed to load extension runtime at ${view.webview.runtimeUrl}` });\n }}\n />\n </div>\n );\n};\n","import type { WebviewCapabilityDiagnostic } from \"../contract\";\n\nexport const EXTENSION_HOST_LOG_PREFIX = \"[pstdio.extension-host] \";\n\nexport interface ExtensionHostDiagnostic {\n event: \"webview-ready\" | \"webview-error\" | \"webview-diagnostic\" | \"registration-ready\" | \"registration-error\";\n extensionId?: string;\n contributionId?: string;\n projectId?: string;\n code?: string;\n capability?: string;\n message?: string;\n stack?: string;\n}\n\nexport const logExtensionHostDiagnostic = (diagnostic: ExtensionHostDiagnostic, write = console.info) => {\n write(`${EXTENSION_HOST_LOG_PREFIX}${JSON.stringify(diagnostic)}`);\n};\n\nexport const createWebviewDiagnostics = (\n view: { extensionId: string; id: string },\n write?: (message: string) => void,\n) => {\n const log = (diagnostic: ExtensionHostDiagnostic) =>\n logExtensionHostDiagnostic({ extensionId: view.extensionId, contributionId: view.id, ...diagnostic }, write);\n return {\n onReady: () => log({ event: \"webview-ready\" }),\n onError: (error: { message: string; stack?: string }) => log({ event: \"webview-error\", ...error }),\n onDiagnostics: (diagnostics: WebviewCapabilityDiagnostic[]) => {\n for (const diagnostic of diagnostics) log({ event: \"webview-diagnostic\", ...diagnostic });\n },\n };\n};\n","import type { HostEventMessage } from \"../contract\";\n\n/**\n * Host-side fan-in for events pushed into one guest webview. Capability\n * implementations `emit` while the frame owns the transport: events emitted\n * before the guest connection is up are buffered and flushed on `bind`.\n */\nexport interface HostEventPublisher {\n emit(message: HostEventMessage): void;\n bind(sink: (message: HostEventMessage) => void): void;\n onDisconnect(listener: () => void): () => void;\n /** Drop the current sink and return to buffering until the next bind. */\n unbind(): void;\n}\n\nexport const createHostEventPublisher = (): HostEventPublisher => {\n let sink: ((message: HostEventMessage) => void) | null = null;\n const pending: HostEventMessage[] = [];\n const disconnectListeners = new Set<() => void>();\n\n return {\n emit(message) {\n if (sink) sink(message);\n else pending.push(message);\n },\n bind(next) {\n sink = next;\n while (pending.length > 0) next(pending.shift() as HostEventMessage);\n },\n onDisconnect(listener) {\n disconnectListeners.add(listener);\n return () => disconnectListeners.delete(listener);\n },\n unbind() {\n sink = null;\n for (const listener of disconnectListeners) listener();\n },\n };\n};\n","import { Box, Center, Stack, Text } from \"@chakra-ui/react\";\nimport { resolvePageParams } from \"pstdio-api-contracts\";\nimport { createWebviewDiagnostics, ExtensionFrame, type ExtensionFrameProps } from \"pstdio-extensions/bridge/host\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\n\ntype BridgeWebviewFrameProps = Omit<ExtensionFrameProps, \"onDiagnostics\" | \"onError\" | \"onReady\"> & {\n workbench: WorkbenchCore;\n};\n\n/** A bridged webview that shows one failure message, in theme colors, when it cannot load. */\nexport const BridgeWebviewFrame = (props: BridgeWebviewFrameProps) => {\n const { view, workbench, ...frameProps } = props;\n const [pageState, setPageState] = useState(workbench.pages.store.getState);\n useEffect(() => workbench.pages.store.subscribe((state) => setPageState(state)), [workbench]);\n const page = pageState.activePageId ? workbench.pages.getPage(pageState.activePageId) : undefined;\n const pageProps = {\n pageLocation: pageState.location,\n pageParams: resolvePageParams(page?.params, pageState.location?.params),\n };\n const [error, setError] = useState<string | null>(null);\n const diagnostics = createWebviewDiagnostics(view);\n\n return (\n <Box\n position=\"relative\"\n width={props.sizing ? \"max-content\" : \"full\"}\n height=\"full\"\n minH=\"0\"\n display=\"flex\"\n flexDirection=\"column\"\n >\n {error ? (\n <Center position=\"absolute\" inset=\"0\" px=\"md\" zIndex={1} bg=\"bg\">\n <Stack gap=\"xs\" maxW=\"md\" textAlign=\"center\">\n <Text textStyle=\"paragraph/S/medium\" color=\"fg.error\">\n Extension view failed to load.\n </Text>\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\">\n {error}\n </Text>\n </Stack>\n </Center>\n ) : null}\n <ExtensionFrame\n view={view}\n {...frameProps}\n props={{ ...frameProps.props, ...pageProps }}\n onReady={() => {\n diagnostics.onReady();\n setError(null);\n }}\n onDiagnostics={diagnostics.onDiagnostics}\n onError={(nextError) => {\n diagnostics.onError(nextError);\n setError(nextError.message);\n }}\n />\n </Box>\n );\n};\n","import type { TerminalHostEvent, TerminalSessionOperation, TerminalSessionResult } from \"@pstdio/sdk/api\";\nimport type { HostCapability } from \"pstdio-extensions/bridge/contract\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type { WorkbenchTerminalController } from \"../../core\";\n\nexport const TERMINAL_SESSION_EVENT_SCOPE = \"terminal.session\";\n\ninterface CreateTerminalSessionCapabilityInput {\n terminal: WorkbenchTerminalController;\n hostEvents: HostEventPublisher;\n}\n\n/**\n * Host side of the `terminal.session` webview capability. Sessions live in the\n * workbench terminal controller; only serializable operation payloads and session\n * ids cross the webview boundary. Output/exit events flow through the host event\n * publisher under the `terminal.session` scope.\n */\nexport const createTerminalSessionCapability = (input: CreateTerminalSessionCapabilityInput): HostCapability => {\n const { terminal, hostEvents } = input;\n\n const emit = (payload: TerminalHostEvent) => {\n hostEvents.emit({ scope: TERMINAL_SESSION_EVENT_SCOPE, payload });\n };\n\n return async (params) => {\n const operation = params as TerminalSessionOperation;\n\n switch (operation.operation) {\n case \"open\": {\n const { sessionId } = await terminal.open({ request: operation.request });\n return { operation: \"open\", sessionId } satisfies TerminalSessionResult;\n }\n case \"write\":\n terminal.write({ sessionId: operation.sessionId, data: operation.data });\n return { operation: \"write\", accepted: true } satisfies TerminalSessionResult;\n case \"resize\":\n terminal.resize({ sessionId: operation.sessionId, cols: operation.cols, rows: operation.rows });\n return { operation: \"resize\", accepted: true } satisfies TerminalSessionResult;\n case \"kill\":\n await terminal.kill({ sessionId: operation.sessionId, signal: operation.signal });\n return { operation: \"kill\", accepted: true } satisfies TerminalSessionResult;\n case \"subscribe\": {\n const { sessionId } = operation;\n let unsubscribeTerminal = () => {};\n let unsubscribeDisconnect = () => {};\n let closed = false;\n const close = () => {\n if (closed) return;\n closed = true;\n unsubscribeTerminal();\n unsubscribeDisconnect();\n };\n\n unsubscribeTerminal = terminal.subscribe(sessionId, {\n onData: (chunk) => emit({ sessionId, kind: \"data\", chunk }),\n onExit: (exit) => {\n emit({ sessionId, kind: \"exit\", code: exit.code, signal: exit.signal });\n close();\n },\n });\n unsubscribeDisconnect = hostEvents.onDisconnect(close);\n return { operation: \"subscribe\", accepted: true } satisfies TerminalSessionResult;\n }\n }\n };\n};\n","import { extensionResourceRefSchema, jsonObjectSchema } from \"pstdio-api-contracts\";\nimport { isNavigationTarget, type NavigationTarget } from \"pstdio-api-contracts/extension-kernel\";\nimport { z } from \"zod\";\n\nconst action = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"navigate\"),\n id: z.string(),\n label: z.string(),\n target: z.custom<NavigationTarget>(isNavigationTarget, \"Invalid navigation target.\"),\n primary: z.boolean().optional(),\n }),\n z.object({\n kind: z.literal(\"command\"),\n id: z.string(),\n label: z.string(),\n command: z.string(),\n params: jsonObjectSchema.optional(),\n primary: z.boolean().optional(),\n destructive: z.boolean().optional(),\n }),\n z.object({\n kind: z.literal(\"url\"),\n id: z.string(),\n label: z.string(),\n href: z.string(),\n primary: z.boolean().optional(),\n }),\n]);\n\nexport const webviewNotificationActionParamsSchema = z.object({\n title: z.string().min(1),\n body: z.string().optional(),\n kind: z.enum([\"needs_review\", \"ready_to_merge\", \"blocked\", \"approval_required\", \"failed\", \"info\"]),\n priority: z.enum([\"low\", \"normal\", \"high\", \"urgent\"]).optional(),\n target: extensionResourceRefSchema.optional(),\n related: z.array(extensionResourceRefSchema).optional(),\n actions: z.array(action).optional(),\n dedupeKey: z.string().optional(),\n expiresAt: z.string().optional(),\n snoozedUntil: z.string().optional(),\n metadata: jsonObjectSchema.optional(),\n});\n","import { extensionResourceRefSchema, jsonObjectSchema, pageParamValueSchema } from \"pstdio-api-contracts\";\nimport type { WebviewHostCapability, WebviewHostCapabilityParams } from \"pstdio-api-contracts/extension-kernel\";\nimport { isNavigationTarget, type NavigationTarget } from \"pstdio-api-contracts/extension-kernel\";\nimport { z } from \"zod\";\nimport { webviewNotificationActionParamsSchema } from \"./webview-notification-params\";\n\nexport class WebviewHostCapabilityError extends Error {\n constructor(\n public code: string,\n message: string,\n public data: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"WebviewHostCapabilityError\";\n }\n}\n\nconst identifier = z.string().min(1);\nconst empty = z.object({}).strict().optional();\nconst command = z.object({\n commandId: identifier,\n params: jsonObjectSchema.optional(),\n workspaceId: identifier.optional(),\n resource: extensionResourceRefSchema.optional(),\n metadata: jsonObjectSchema.optional(),\n});\nconst streamId = { streamId: identifier };\nconst scope = z.object({\n scope: z.enum([\"default\", \"user\", \"project\", \"workspace\", \"extension\", \"session\"]),\n scopeId: z.string().optional(),\n});\nconst preference = z.object({ name: identifier, scope: scope.optional() });\nconst notificationIdentity = z\n .object({\n id: identifier.optional(),\n dedupeKey: z.string().optional(),\n status: z.enum([\"done\", \"dismissed\", \"expired\"]).optional(),\n })\n .refine(\n (input) => input.id !== undefined || input.dedupeKey !== undefined,\n \"Provide a notification ID or dedupe key.\",\n );\nconst binary = z.union([z.instanceof(Uint8Array), z.instanceof(ArrayBuffer)]);\nconst fileScope = z.object({ type: identifier, id: z.string().optional() });\nconst terminalId = { sessionId: identifier };\nconst terminalRequest = z.object({\n cols: z.number().int().positive(),\n rows: z.number().int().positive(),\n command: z.array(z.string()).optional(),\n cwd: z.string().optional(),\n env: z.record(z.string(), z.string()).optional(),\n});\n\nconst schemas = {\n \"harnesses.read\": z.object({ harnessId: identifier.optional(), model: z.string().optional() }),\n \"resources.actions\": z.discriminatedUnion(\"operation\", [\n z.object({ operation: z.literal(\"list\"), resource: extensionResourceRefSchema }),\n z.object({ operation: z.literal(\"execute\"), resource: extensionResourceRefSchema, key: identifier }),\n ]),\n \"commands.execute\": command,\n \"commands.stream\": z.discriminatedUnion(\"operation\", [\n command.extend({ ...streamId, operation: z.literal(\"start\") }),\n z.object({ ...streamId, operation: z.literal(\"cancel\") }),\n z.object({ ...streamId, operation: z.literal(\"ack\"), bytes: z.number().int().positive() }),\n ]),\n \"navigation.open\": z.object({ target: z.custom<NavigationTarget>(isNavigationTarget, \"Invalid navigation target.\") }),\n \"page.params.update\": z.object({ params: z.record(z.string(), pageParamValueSchema.nullable()) }),\n \"placement.close\": empty,\n \"notification.show\": z.union([\n z.object({\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string(),\n metadata: jsonObjectSchema.optional(),\n }),\n z.object({\n level: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string().optional(),\n }),\n ]),\n \"notification.action\": webviewNotificationActionParamsSchema,\n \"notification.resolve\": notificationIdentity,\n \"notification.dismiss\": notificationIdentity,\n \"preferences.get\": preference,\n \"preferences.set\": preference.extend({\n value: z.union([\n z.boolean(),\n z.number(),\n z.string(),\n z.array(z.string()),\n z.array(z.number()),\n z.array(z.boolean()),\n jsonObjectSchema,\n ]),\n }),\n \"extension.settings.all\": empty,\n \"extension.settings.get\": z.object({ key: identifier }),\n \"extension.settings.set\": z.object({ key: identifier, value: z.unknown() }),\n \"extension.settings.delete\": z.object({ key: identifier }),\n \"terminal.session\": z.discriminatedUnion(\"operation\", [\n z.object({ operation: z.literal(\"open\"), request: terminalRequest }),\n z.object({ ...terminalId, operation: z.literal(\"write\"), data: z.union([z.string(), z.instanceof(Uint8Array)]) }),\n z.object({\n ...terminalId,\n operation: z.literal(\"resize\"),\n cols: z.number().int().positive(),\n rows: z.number().int().positive(),\n }),\n z.object({ ...terminalId, operation: z.literal(\"kill\"), signal: z.string().optional() }),\n z.object({ ...terminalId, operation: z.literal(\"subscribe\") }),\n ]),\n \"files.upload\": z.object({\n name: identifier,\n data: binary,\n mimeType: z.string().optional(),\n scope: fileScope.optional(),\n }),\n \"files.list\": z.object({ scope: fileScope.optional() }),\n \"files.delete\": z.object({ id: identifier }),\n \"artifacts.read\": z.discriminatedUnion(\"op\", [\n z.object({ op: z.literal(\"list\"), mount: identifier, prefix: z.string().optional() }),\n z.object({ op: z.literal(\"readText\"), mount: identifier, path: z.string() }),\n z.object({ op: z.literal(\"imageUrl\"), mount: identifier, path: z.string() }),\n ]),\n} satisfies Record<WebviewHostCapability, z.ZodType>;\n\nexport const parseWebviewCapabilityParams = <Capability extends WebviewHostCapability>(\n capability: Capability,\n input: unknown,\n) => {\n const result = schemas[capability].safeParse(input);\n if (!result.success)\n throw new WebviewHostCapabilityError(\"invalid_params\", `Invalid parameters for ${capability}.`, {\n capability,\n issues: result.error.issues.map((issue) => ({ path: issue.path.map(String), message: issue.message })),\n });\n return result.data as WebviewHostCapabilityParams[Capability];\n};\n","import type { CommandExecutionResult } from \"@pstdio/sdk/api\";\nimport type { CommandStreamClientEvent } from \"@pstdio/sdk/client\";\nimport type { CommandOutcome, WebviewCommandsExecuteParams, WebviewCommandsStreamParams } from \"@pstdio/sdk/extensions\";\nimport { commandExecutionResultSchema } from \"pstdio-api-contracts\";\nimport { serializeCommandError } from \"pstdio-api-contracts/extension-kernel\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\n\nconst errorOutcome = (code: string, reason = code): CommandOutcome => ({ ok: false, status: \"error\", code, reason });\nconst failureOutcome = (error: unknown) => {\n const serialized = serializeCommandError(error);\n return {\n ok: false,\n status: \"error\",\n code: (error as { code?: string })?.code ?? \"command_stream_disconnected\",\n reason: serialized.message,\n error: serialized,\n ...(serialized.cause !== undefined ? { cause: serialized.cause } : {}),\n } satisfies CommandOutcome;\n};\nconst fail = (code: string) => Object.assign(new Error(code), { code });\nconst MAX_STREAMS = 16;\nconst MAX_UNREAD_BYTES = 8 * 1024 * 1024;\n\nexport const withFrameSignal = async <T>(hostEvents: HostEventPublisher, run: (signal: AbortSignal) => Promise<T>) => {\n const controller = new AbortController();\n const unsubscribe = hostEvents.onDisconnect(() => controller.abort());\n try {\n return await run(controller.signal);\n } finally {\n unsubscribe();\n }\n};\n\ninterface StreamCapabilityDeps {\n stream(input: WebviewCommandsExecuteParams, signal: AbortSignal): AsyncIterable<CommandStreamClientEvent>;\n publish?(response: CommandExecutionResult): void;\n}\n\n/** State belongs to a frame, across React renders and bridge reconnects. */\nexport const createWebviewCommandStreamHandler = (hostEvents: HostEventPublisher) => {\n const streams = new Map<string, { unread: number; stop: (code: string, emit?: boolean) => void }>();\n return async (input: WebviewCommandsStreamParams, deps: StreamCapabilityDeps) => {\n const { streamId } = input;\n if (input.operation === \"cancel\") streams.get(streamId)?.stop(\"command_stream_cancelled\");\n else if (input.operation === \"ack\") {\n const state = streams.get(streamId);\n if (state && Number.isSafeInteger(input.bytes) && input.bytes > 0 && input.bytes <= state.unread)\n state.unread -= input.bytes;\n } else {\n if (streams.has(streamId)) throw fail(\"command_stream_duplicate\");\n if (streams.size >= MAX_STREAMS) throw fail(\"command_stream_limit\");\n const controller = new AbortController();\n let ended = false;\n let unsubscribe = () => {};\n const emit = (payload: object) =>\n hostEvents.emit({ scope: \"commands.stream\", payload: { streamId, ...payload } });\n const finish = (outcome: CommandOutcome, notify = true) => {\n if (ended) return;\n ended = true;\n streams.delete(streamId);\n unsubscribe();\n controller.abort();\n if (notify) emit({ type: \"end\", outcome });\n };\n const state = { unread: 0, stop: (code: string, notify = true) => finish(errorOutcome(code), notify) };\n streams.set(streamId, state);\n unsubscribe = hostEvents.onDisconnect(() => state.stop(\"command_stream_cancelled\", false));\n const { operation: _, streamId: _streamId, commandId, ...body } = input;\n const receive = (event: CommandStreamClientEvent) => {\n if (event.type === \"end\") {\n const response = commandExecutionResultSchema.parse(event.response);\n deps.publish?.(response);\n finish(response.outcome);\n return;\n }\n state.unread += new TextEncoder().encode(JSON.stringify(event.data)).byteLength;\n if (state.unread > MAX_UNREAD_BYTES) state.stop(\"command_stream_overflow\");\n else emit(event);\n };\n const run = async () => {\n try {\n for await (const event of deps.stream({ commandId, ...body }, controller.signal)) {\n if (ended) break;\n receive(event);\n }\n if (!ended) state.stop(\"command_stream_disconnected\");\n } catch (error) {\n finish(failureOutcome(error));\n }\n };\n void run();\n }\n return { operation: input.operation, accepted: true as const };\n };\n};\n","import { CommandOutcomeError } from \"@pstdio/sdk/extensions\";\nimport { validatedCommandOutcomeSchema } from \"pstdio-api-contracts\";\nimport type {\n MaybePromise,\n WebviewHostCapability,\n WebviewHostCapabilityParams,\n} from \"pstdio-api-contracts/extension-kernel\";\nimport type { HostCapability } from \"pstdio-extensions/bridge/contract\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport { z } from \"zod\";\nimport type { ExtensionWebviewHostAdapters } from \"./extension-webview-host-adapters\";\nimport { createTerminalSessionCapability } from \"./terminal-session-capability\";\nimport { parseWebviewCapabilityParams, WebviewHostCapabilityError } from \"./webview-capability-params\";\nimport { createWebviewCommandStreamHandler, withFrameSignal } from \"./webview-command-streams\";\n\nconst commandResponse = z.object({ outcome: validatedCommandOutcomeSchema }).passthrough();\nconst streamHandlers = new WeakMap<HostEventPublisher, ReturnType<typeof createWebviewCommandStreamHandler>>();\nconst streamHandler = (events: HostEventPublisher) => {\n let handler = streamHandlers.get(events);\n if (!handler) {\n handler = createWebviewCommandStreamHandler(events);\n streamHandlers.set(events, handler);\n }\n return handler;\n};\nconst after = <T>(result: MaybePromise<T>, done: () => unknown) =>\n result instanceof Promise ? result.then(done) : done();\n\nconst capability =\n <Name extends WebviewHostCapability>(\n name: Name,\n run: ((params: WebviewHostCapabilityParams[Name]) => unknown) | undefined,\n ) =>\n (input: unknown) => {\n if (!run)\n throw new WebviewHostCapabilityError(\"unsupported\", `The host does not support ${name}.`, { capability: name });\n return run(parseWebviewCapabilityParams(name, input));\n };\n\nconst commandExecution = (adapters: ExtensionWebviewHostAdapters) => {\n const { executeCommand, hostEvents } = adapters;\n if (!executeCommand) return undefined;\n return async (request: WebviewHostCapabilityParams[\"commands.execute\"]) => {\n try {\n const response = hostEvents\n ? await withFrameSignal(hostEvents, (signal) => Promise.resolve(executeCommand(request, signal)))\n : await executeCommand(request);\n return commandResponse.parse(response);\n } catch (error) {\n if (error instanceof CommandOutcomeError) return commandResponse.parse({ outcome: error.outcome });\n throw error;\n }\n };\n};\nconst commandStreaming = (adapters: ExtensionWebviewHostAdapters) => {\n const { streamCommand, hostEvents } = adapters;\n if (!streamCommand || !hostEvents) return undefined;\n return (request: WebviewHostCapabilityParams[\"commands.stream\"]) =>\n streamHandler(hostEvents)(request, { stream: streamCommand, publish: adapters.commandCompleted });\n};\n\nexport const createExtensionWebviewHostCapabilities = (adapters: ExtensionWebviewHostAdapters) => {\n const {\n hostEvents,\n navigation,\n pageParams,\n placement,\n notifications,\n settings,\n preferences,\n files,\n artifacts,\n terminal,\n } = adapters;\n const terminalCapability =\n terminal && hostEvents ? createTerminalSessionCapability({ terminal, hostEvents }) : undefined;\n const readHarnesses = adapters.harnesses?.read.bind(adapters.harnesses);\n return {\n \"harnesses.read\": capability(\"harnesses.read\", readHarnesses),\n \"resources.actions\": capability(\"resources.actions\", adapters.resourceActions),\n \"commands.execute\": capability(\"commands.execute\", commandExecution(adapters)),\n \"commands.stream\": capability(\"commands.stream\", commandStreaming(adapters)),\n \"navigation.open\": capability(\n \"navigation.open\",\n navigation && ((request) => after(navigation.open(request.target), () => undefined)),\n ),\n \"page.params.update\": capability(\n \"page.params.update\",\n pageParams &&\n ((request) => {\n const location = pageParams.update(request.params);\n return location instanceof Promise ? location.then((value) => ({ location: value })) : { location };\n }),\n ),\n \"placement.close\": capability(\"placement.close\", placement && (() => placement.close())),\n \"notification.show\": capability(\n \"notification.show\",\n notifications?.show &&\n ((request) =>\n after(\n notifications.show!(\n \"type\" in request\n ? request\n : {\n type: request.level,\n ...(request.title === undefined ? {} : { title: request.title }),\n message: request.message ?? \"\",\n },\n ),\n () => undefined,\n )),\n ),\n \"notification.action\": capability(\n \"notification.action\",\n notifications?.create && ((request) => notifications.create!(request)),\n ),\n \"notification.resolve\": capability(\n \"notification.resolve\",\n notifications?.resolve && ((request) => notifications.resolve!({ ...request, status: request.status ?? \"done\" })),\n ),\n \"notification.dismiss\": capability(\n \"notification.dismiss\",\n notifications?.resolve && ((request) => notifications.resolve!({ ...request, status: \"dismissed\" })),\n ),\n \"preferences.get\": capability(\n \"preferences.get\",\n preferences && ((request) => preferences.get(request.name, request.scope)),\n ),\n \"preferences.set\": capability(\n \"preferences.set\",\n preferences &&\n ((request) => {\n const scope = request.scope ?? { scope: \"user\" };\n if (scope.scope === \"default\")\n throw new WebviewHostCapabilityError(\n \"preference_scope_read_only\",\n \"Default preferences are read-only.\",\n {},\n );\n return after(preferences.set(request.name, request.value, scope), () => ({\n name: request.name,\n value: request.value,\n }));\n }),\n ),\n \"extension.settings.all\": capability(\"extension.settings.all\", settings && (() => settings.all())),\n \"extension.settings.get\": capability(\n \"extension.settings.get\",\n settings && ((request) => settings.get(request.key)),\n ),\n \"extension.settings.set\": capability(\n \"extension.settings.set\",\n settings &&\n (async (request) => ({ key: request.key, value: (await settings.set(request.key, request.value)).value })),\n ),\n \"extension.settings.delete\": capability(\n \"extension.settings.delete\",\n settings && ((request) => settings.delete(request.key)),\n ),\n \"terminal.session\": capability(\n \"terminal.session\",\n terminalCapability && ((request) => terminalCapability(request)),\n ),\n \"files.upload\": capability(\"files.upload\", files && ((request) => files.upload(request))),\n \"files.list\": capability(\"files.list\", files && ((request) => files.list(request))),\n \"files.delete\": capability(\"files.delete\", files && ((request) => files.delete(request))),\n \"artifacts.read\": capability(\"artifacts.read\", artifacts && ((request) => artifacts.read(request))),\n } satisfies Record<WebviewHostCapability, HostCapability>;\n};\n","import { type NavigationTarget as ExtensionNavigationTarget, isNavigationTarget } from \"@pstdio/sdk/extensions\";\nimport { qualifyNavigationTarget } from \"pstdio-api-contracts\";\nimport type { NavigationTarget, NavigationTargetCommand, WorkbenchPanelRegion } from \"../../core\";\n\nexport interface ToWorkbenchNavigationTargetInput {\n commandIdOf?(\n command: Extract<ExtensionNavigationTarget, { kind: \"command\" }>[\"target\"][\"command\"],\n ): string | undefined;\n commandTargetOf?(target: Extract<ExtensionNavigationTarget, { kind: \"command\" }>): NavigationTargetCommand;\n extensionId?: string;\n projectId?: string;\n region?: WorkbenchPanelRegion;\n}\n\nconst toCommandTarget = (\n target: Extract<ExtensionNavigationTarget, { kind: \"command\" }>,\n input: ToWorkbenchNavigationTargetInput,\n) => {\n const override = input.commandTargetOf?.(target);\n if (override) return { ...override, ...(input.region ? { region: input.region } : {}) };\n const command = target.target.command;\n const extensionId = command.extensionId ?? input.extensionId;\n const commandId =\n input.commandIdOf?.(command) ??\n (extensionId && extensionId !== \"pstdio\" ? `${extensionId}.command.${command.id}` : command.id);\n return {\n kind: \"command\",\n commandId,\n args: target.target.params,\n ...(input.region ? { region: input.region } : {}),\n } satisfies NavigationTargetCommand;\n};\n\n// The return type stays explicit: the compound branch recurses, and TypeScript\n// cannot infer the return type of a self-referencing function.\ntype NavigationOperation = Extract<ExtensionNavigationTarget, { kind: \"page\" | \"panel\" }>;\nexport function toWorkbenchNavigationTarget(\n target: NavigationOperation,\n input?: ToWorkbenchNavigationTargetInput,\n): NavigationOperation;\nexport function toWorkbenchNavigationTarget(\n target: ExtensionNavigationTarget,\n input?: ToWorkbenchNavigationTargetInput,\n): NavigationTarget;\nexport function toWorkbenchNavigationTarget(\n target: ExtensionNavigationTarget,\n input: ToWorkbenchNavigationTargetInput = {},\n): NavigationTarget {\n if (!isNavigationTarget(target)) throw new Error(\"Invalid navigation target.\");\n if (input.extensionId) target = qualifyNavigationTarget(target, input.extensionId, input.projectId);\n if (target.kind === \"command\") return toCommandTarget(target, input);\n if (target.kind === \"href\") return target;\n if (target.kind === \"page\") return target;\n if (target.kind === \"panel\") return { ...target, ...(input.region ? { region: input.region } : {}) };\n return {\n kind: \"compound\",\n targets: target.targets.map((item) => toWorkbenchNavigationTarget(item, input)),\n };\n}\n","import type { PreferenceScopeRef, PreferenceValue, WorkbenchCore } from \"../../core\";\n\nexport interface WebviewOwnedPreferences {\n get(name: string, scope?: PreferenceScopeRef): Promise<PreferenceValue | undefined> | PreferenceValue | undefined;\n set(name: string, value: PreferenceValue, scope: PreferenceScopeRef): Promise<void> | void;\n}\n\nexport const createWebviewPreferencesAdapter = (input: {\n workbench: WorkbenchCore;\n extensionId?: string;\n ownedPreferences?: WebviewOwnedPreferences;\n warn?: (message: string) => void;\n}) => {\n const registry = input.workbench.preferences;\n const owner = () => {\n if (!input.extensionId) throw new Error(\"Preferences require the calling extension identity\");\n return input.extensionId;\n };\n const registered = (name: string) => {\n const schema = registry.getSchema(name);\n if (schema && input.extensionId && schema.ownerId !== \"workbench.core\" && schema.ownerId !== input.extensionId)\n (input.warn ?? console.warn)(\n `Cross-extension preference access to ${name} is deprecated. Use preferences owned by ${input.extensionId}.`,\n );\n return Boolean(schema);\n };\n return {\n get: (name: string, scope?: PreferenceScopeRef) => {\n if (registered(name)) return registry.getValue(name, scope);\n owner();\n return input.ownedPreferences?.get(name, scope) ?? registry.getOwnedValue(owner(), name, scope);\n },\n set: (name: string, value: PreferenceValue, scope: PreferenceScopeRef) => {\n if (scope.scope === \"default\") throw new Error(\"preference_scope_read_only\");\n if (registered(name)) {\n return registry.setValue(name, value, scope);\n }\n owner();\n return input.ownedPreferences\n ? input.ownedPreferences.set(name, value, scope)\n : registry.setOwnedValue(owner(), name, value, scope);\n },\n };\n};\n","import type { WebviewHostCapabilityParams } from \"pstdio-api-contracts/extension-kernel\";\nimport { RESOURCE_ACTIONS_EVENTS_SCOPE } from \"pstdio-api-contracts/extension-kernel\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { orderMenuEntries, resolveMenuEntries } from \"../../react/menus/menu-entries\";\nimport { resolveResourceActionMenu, subscribeResourceActionChanges } from \"../../react/menus/resource-action-menu\";\n\n// Tells a frame to list again once actions may have changed. The subscription\n// starts on the first list and ends when the frame disconnects.\nconst createChangeNotifier = (workbench: WorkbenchCore, hostEvents: HostEventPublisher | undefined) => {\n let stop: (() => void) | undefined;\n let pending = false;\n const emit = () => {\n if (pending) return;\n pending = true;\n queueMicrotask(() => {\n pending = false;\n hostEvents?.emit({ scope: RESOURCE_ACTIONS_EVENTS_SCOPE, payload: { type: \"changed\" } });\n });\n };\n return () => {\n if (!hostEvents || stop) return;\n const unsubscribe = subscribeResourceActionChanges(workbench, emit);\n const stopOnDisconnect = hostEvents.onDisconnect(() => stop?.());\n stop = () => {\n unsubscribe();\n stopOnDisconnect();\n stop = undefined;\n };\n };\n};\n\nexport const createWebviewResourceActions = (\n workbench: WorkbenchCore,\n projectId: string | undefined,\n hostEvents: HostEventPublisher | undefined,\n) => {\n const watchChanges = createChangeNotifier(workbench, hostEvents);\n return async (input: WebviewHostCapabilityParams[\"resources.actions\"]) => {\n // The host owns the project scope; webviews cannot reach another project's resources.\n const menu = resolveResourceActionMenu(workbench, projectId ? { ...input.resource, projectId } : input.resource);\n const entries = menu ? orderMenuEntries(resolveMenuEntries(menu)) : [];\n if (input.operation === \"execute\") {\n const entry = entries.find(({ id }) => id === input.key);\n if (!entry?.run || entry.disabled) throw new Error(\"This resource action is no longer available.\");\n await entry.run();\n return [];\n }\n watchChanges();\n return entries.map((entry) => ({\n key: entry.id,\n label: entry.label,\n commandId: entry.commandId,\n icon: entry.icon,\n iconSrc: entry.iconSrc,\n description: entry.description,\n isDisabled: entry.disabled,\n separatorBefore: entry.separatorBefore,\n group: entry.group ?? menu?.group,\n }));\n };\n};\n","import type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type { WorkbenchCore, WorkbenchPanelInstance } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { ExtensionWebviewHostAdapters } from \"./extension-webview-host-adapters\";\nimport { createExtensionWebviewHostCapabilities } from \"./extension-webview-host-capabilities\";\nimport { createWebviewPreferencesAdapter, type WebviewOwnedPreferences } from \"./webview-preferences-capability\";\nimport { createWebviewResourceActions } from \"./webview-resource-actions\";\n\ninterface CreateWorkbenchWebviewHostAdaptersInput {\n workbench: WorkbenchCore;\n placement?: WorkbenchPanelInstance;\n extensionId?: string;\n projectId?: string;\n ownedPreferences?: WebviewOwnedPreferences;\n warn?: (message: string) => void;\n hostEvents?: HostEventPublisher;\n}\n\nexport const createWorkbenchWebviewHostAdapters = (input: CreateWorkbenchWebviewHostAdaptersInput) => {\n const { workbench, placement, extensionId, projectId, hostEvents } = input;\n return {\n resourceActions: createWebviewResourceActions(workbench, projectId, hostEvents),\n hostEvents,\n executeCommand: async (request, signal) => ({\n outcome: {\n ok: true,\n status: \"success\",\n value: await workbench.commands.executeCommand(request.commandId, request.params, {\n resource: request.resource,\n signal,\n }),\n },\n }),\n placement: placement?.placementIdentity\n ? { close: () => workbench.closePlacement(placement.placementIdentity!) }\n : undefined,\n pageParams: {\n update: (patch) => {\n const state = workbench.pages.store.getState();\n if (!state.location) throw new Error(\"page_params_no_page\");\n if (!extensionId || extensionId !== state.location.page.extensionId) throw new Error(\"page_params_not_owner\");\n return workbench.pageLocations.updateParams(patch);\n },\n },\n navigation: {\n open: (target) =>\n workbench.navigation.openTarget(toWorkbenchNavigationTarget(target, { extensionId, projectId })),\n },\n notifications: {\n show: (notice) => {\n if (notice.type === \"error\") {\n workbench.notifications.captureActionError(\n notice.title ?? \"Extension action\",\n placement?.instanceId,\n )(new Error(notice.message));\n return;\n }\n workbench.notifications.show({\n level: notice.type,\n metadata: notice.metadata,\n title: notice.title ?? notice.message,\n message: notice.title === undefined ? undefined : notice.message,\n });\n },\n },\n preferences: createWebviewPreferencesAdapter(input),\n terminal: workbench.terminal,\n } satisfies ExtensionWebviewHostAdapters;\n};\n\nexport const createWorkbenchWebviewHostCapabilities = (input: CreateWorkbenchWebviewHostAdaptersInput) =>\n createExtensionWebviewHostCapabilities(createWorkbenchWebviewHostAdapters(input));\n","import type { WebviewHostProps } from \"pstdio-api-contracts/extension-kernel\";\nimport type { ThemePreference } from \"pstdio-extensions/bridge/contract\";\nimport { createHostEventPublisher, type HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type {\n WorkbenchCore,\n WorkbenchPanelInstance,\n WorkbenchPanelRenderInput,\n WorkbenchRendererRegistration,\n} from \"../../core\";\nimport { BridgeWebviewFrame } from \"./bridge-webview-frame\";\nimport type { ExtensionWebviewHostAdapters } from \"./extension-webview-host-adapters\";\nimport { createExtensionWebviewHostCapabilities } from \"./extension-webview-host-capabilities\";\nimport { createWorkbenchWebviewHostAdapters } from \"./webview-host-capabilities\";\n\nexport interface BridgeWebviewRenderContext {\n workbench: WorkbenchCore;\n webviewId: string;\n extensionId?: string;\n placement: WorkbenchPanelInstance;\n /** Channel for pushing host events (e.g. terminal output) into this webview. */\n hostEvents: HostEventPublisher;\n}\n\n// Hosts supply services. The shared factory owns capability routing, validation and results.\nexport type CreateBridgeWebviewHostAdapters = (context: BridgeWebviewRenderContext) => ExtensionWebviewHostAdapters;\n\n// What the host pushes into the guest's props store. Hosts inject this to forward dynamic\n// data — e.g. the dashboard forwards extension command outcomes and theme preference.\nexport type CreateBridgeWebviewProps = (\n context: BridgeWebviewRenderContext,\n) => Partial<WebviewHostProps> & Record<string, unknown>;\nexport type CreateBridgeWebviewTheme = (context: BridgeWebviewRenderContext) => ThemePreference;\n\ninterface CreateBridgeWebviewRendererInput {\n createHostAdapters?: CreateBridgeWebviewHostAdapters;\n createProps?: CreateBridgeWebviewProps;\n createTheme?: CreateBridgeWebviewTheme;\n}\n\nexport const BRIDGE_WEBVIEW_RENDERER_ID = \"webview:bridge\";\n\nexport interface BridgeWebviewConfig {\n title?: string;\n runtimeUrl: string;\n moduleUrl: string;\n styles?: string[];\n capabilities?: string[];\n}\n\nconst isBridgeWebviewConfig = (value: unknown): value is BridgeWebviewConfig => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const config = value as Partial<BridgeWebviewConfig>;\n return typeof config.runtimeUrl === \"string\" && typeof config.moduleUrl === \"string\";\n};\n\nconst createPlacementProps: CreateBridgeWebviewProps = ({ placement }) => ({\n placement,\n resource: placement.resource,\n});\n\nconst createLightTheme: CreateBridgeWebviewTheme = () => \"light\";\n\nconst hostEventPublishersByWorkbench = new WeakMap<WorkbenchCore, Map<string, HostEventPublisher>>();\n\nexport const getBridgeWebviewHostEventPublisher = (workbench: WorkbenchCore, instance: WorkbenchPanelInstance) => {\n let hostEventsByWidget = hostEventPublishersByWorkbench.get(workbench);\n if (!hostEventsByWidget) {\n hostEventsByWidget = new Map();\n hostEventPublishersByWorkbench.set(workbench, hostEventsByWidget);\n }\n\n const key = instance.instanceId;\n let hostEvents = hostEventsByWidget.get(key);\n if (!hostEvents) {\n hostEvents = createHostEventPublisher();\n hostEventsByWidget.set(key, hostEvents);\n }\n\n return hostEvents;\n};\n\nexport const renderBridgeWebviewFrame = (input: {\n sizing?: \"content-width\";\n context: BridgeWebviewRenderContext;\n createHostAdapters: CreateBridgeWebviewHostAdapters;\n createProps: CreateBridgeWebviewProps;\n createTheme?: CreateBridgeWebviewTheme;\n ownerId?: string;\n title: string;\n webview: BridgeWebviewConfig;\n}) => {\n const { context, createHostAdapters, createProps, createTheme = createLightTheme, ownerId, title, webview } = input;\n return (\n <BridgeWebviewFrame\n sizing={input.sizing}\n view={{\n extensionId: ownerId ?? \"workbench\",\n id: context.webviewId,\n label: webview.title ?? title,\n webview: {\n capabilities: webview.capabilities,\n moduleUrl: webview.moduleUrl,\n runtimeUrl: webview.runtimeUrl,\n styles: webview.styles ?? [],\n },\n }}\n props={createProps(context)}\n workbench={context.workbench}\n theme={createTheme(context)}\n capabilities={createExtensionWebviewHostCapabilities(\n createHostAdapters({ ...context, extensionId: ownerId ?? context.extensionId }),\n )}\n hostEvents={context.hostEvents}\n />\n );\n};\n\nconst renderBridgeWebview = (\n input: WorkbenchPanelRenderInput,\n createHostAdapters: CreateBridgeWebviewHostAdapters,\n createProps: CreateBridgeWebviewProps,\n createTheme: CreateBridgeWebviewTheme,\n) => {\n const { workbench, panel, instance } = input;\n const webview = isBridgeWebviewConfig(panel.config) ? panel.config : null;\n if (!webview) return null;\n\n return renderBridgeWebviewFrame({\n sizing: panel.region === \"status\" ? \"content-width\" : undefined,\n context: {\n workbench,\n webviewId: instance.panelId,\n placement: instance,\n hostEvents: getBridgeWebviewHostEventPublisher(workbench, instance),\n },\n createHostAdapters,\n createProps,\n createTheme,\n ownerId: \"ownerId\" in panel ? panel.ownerId : undefined,\n title: panel.title,\n webview,\n });\n};\n\nexport const createBridgeWebviewRenderer = (input: CreateBridgeWebviewRendererInput = {}) => {\n const createHostAdapters = input.createHostAdapters ?? createWorkbenchWebviewHostAdapters;\n const createProps = input.createProps ?? createPlacementProps;\n const createTheme = input.createTheme ?? createLightTheme;\n\n return {\n id: BRIDGE_WEBVIEW_RENDERER_ID,\n render: (renderInput) => renderBridgeWebview(renderInput, createHostAdapters, createProps, createTheme),\n } satisfies WorkbenchRendererRegistration;\n};\n","import type { LocalizableString } from \"pstdio-api-contracts\";\nimport { isLocalizedString, type Localizable } from \"pstdio-api-contracts/extension-kernel\";\n\nexport const text = (value: Localizable<string> | LocalizableString | undefined, fallback = \"\") => {\n if (value === undefined) return fallback;\n if (!isLocalizedString(value)) return value;\n return value.default ?? value.$l10n;\n};\n","import type { CommandExecutionResult } from \"@pstdio/sdk/api\";\nimport { getCommandValue } from \"@pstdio/sdk/extensions\";\n\nexport const unwrapCommandValue = (result: unknown) => {\n const response = result as Partial<CommandExecutionResult> | undefined;\n if (!response?.outcome) return result;\n return getCommandValue(response.outcome);\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport type { WorkbenchExtensionCommandContext } from \"./workbench-extension-command\";\n\nexport const runResourceMutation = async (\n context: WorkbenchExtensionCommandContext,\n command: WorkbenchExtensionMetadata[\"commands\"][number],\n params: Record<string, unknown> | undefined,\n execution: WorkbenchCommandExecutionContext | undefined,\n persist: () => Promise<unknown>,\n) => {\n const mutation = command.resourceMutation;\n if (!mutation) return persist();\n const id = params?.[mutation.idParam] ?? execution?.resource?.id;\n if (typeof id !== \"string\") return persist();\n const resource = { type: mutation.resourceType, id, extensionId: command.extensionId, projectId: context.projectId };\n if (mutation.kind === \"remove\") {\n if (!(await context.workbench.commandPalette.requestConfirmation(text(command.title, \"Delete\")))) return;\n }\n const rawLabel = mutation.kind === \"rename\" ? params?.[mutation.labelParam] : undefined;\n // Leave invalid input to the command; never display a title that it cannot save.\n if (mutation.kind === \"rename\" && (typeof rawLabel !== \"string\" || !rawLabel.trim())) return persist();\n const preview = context.workbench.resources.preview.begin(\n resource,\n mutation.kind === \"remove\" ? { removed: true } : { label: (rawLabel as string).trim() },\n );\n try {\n const result = await context.workbench.resources.preview.persist(resource, persist);\n await preview.commit();\n return result;\n } catch (error) {\n preview.rollback();\n throw error;\n }\n};\n","import type { CommandExecuteRequest, CommandExecutionResult, WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport type {\n ResourceRef,\n WorkbenchCommandExecutionContext,\n WorkbenchModuleContext,\n WorkbenchPanelRegion,\n} from \"../../core\";\nimport { resolveCommandResourceParams } from \"../../core/registries/commands/command-resource-params\";\nimport { unwrapCommandValue } from \"./command-response\";\nimport { toWorkbenchNavigationTarget } from \"./extension-navigation-target\";\nimport { runResourceMutation } from \"./workbench-resource-mutation\";\nexport interface WorkbenchExtensionCommandContext {\n metadata?: Pick<WorkbenchExtensionMetadata, \"commands\">;\n executeCommand(commandId: string, body: CommandExecuteRequest, signal?: AbortSignal): Promise<unknown> | unknown;\n prepareCommandArgs?(\n commandId: string,\n args: unknown,\n context?: WorkbenchCommandExecutionContext,\n onArgsChange?: (args: unknown) => void,\n ): Promise<unknown> | unknown;\n projectId: string;\n workbench: WorkbenchModuleContext;\n}\nexport interface ExecuteWorkbenchExtensionCommandInput {\n region?: WorkbenchPanelRegion;\n workspaceId?: string;\n signal?: AbortSignal;\n metadata?: Record<string, unknown>;\n params?: Record<string, unknown>;\n resource?: ResourceRef;\n slot?: CommandExecuteRequest[\"slot\"];\n}\nexport const createExtensionSlot = (input: {\n context?: Record<string, unknown>;\n id: string;\n kind: NonNullable<CommandExecuteRequest[\"slot\"]>[\"kind\"];\n projectId: string;\n}) => ({\n id: input.id,\n kind: input.kind,\n context: { projectId: input.projectId, ...(input.context ?? {}) },\n});\nexport const executeWorkbenchExtensionCommandResponse = async (\n context: Pick<WorkbenchExtensionCommandContext, \"executeCommand\" | \"projectId\"> & {\n workbench: Pick<WorkbenchModuleContext, \"navigation\" | \"notifications\">;\n },\n commandId: string,\n input: ExecuteWorkbenchExtensionCommandInput = {},\n) => {\n const resource = input.resource;\n const reportNavigationError = context.workbench.notifications.captureActionError(\"Open command result\");\n const response = await context.executeCommand(\n commandId,\n {\n projectId: context.projectId,\n ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),\n ...(input.params ? { params: input.params } : {}),\n ...(resource ? { resource } : {}),\n ...(input.slot ? { slot: input.slot } : {}),\n source: \"dashboard\",\n ...(input.metadata ? { metadata: input.metadata } : {}),\n },\n input.signal,\n );\n const outcome = (response as Partial<CommandExecutionResult> | undefined)?.outcome;\n if (outcome?.status === \"success\") {\n for (const target of outcome.navigationRequests ?? []) {\n try {\n await context.workbench.navigation.openTarget(toWorkbenchNavigationTarget(target, { region: input.region }));\n } catch (error) {\n reportNavigationError(error);\n }\n }\n }\n return response;\n};\nexport const executeWorkbenchExtensionCommand = async (\n context: WorkbenchExtensionCommandContext,\n commandId: string,\n input: ExecuteWorkbenchExtensionCommandInput = {},\n) => {\n const command = context.metadata?.commands.find((candidate) => candidate.id === commandId);\n const params = command\n ? { ...resolveCommandResourceParams(command.params, input.params, { resource: input.resource }), ...input.params }\n : input.params;\n const persist = async () =>\n unwrapCommandValue(await executeWorkbenchExtensionCommandResponse(context, commandId, { ...input, params }));\n return command ? runResourceMutation(context, command, params, { resource: input.resource }, persist) : persist();\n};\n","import type { WorkbenchExtensionCommandPaletteResourceRecord } from \"@pstdio/sdk/api\";\nimport type { NavigationTarget, ResourceRef } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { CommandPaletteResourceResult, Disposable } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\n\ninterface ResourceItem {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n keywords?: string[];\n target: NavigationTarget;\n}\ninterface ProviderQueryResult {\n items?: ResourceItem[];\n}\nconst isProviderQueryResult = (value: unknown): value is ProviderQueryResult =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst commandIdOf = (\n command: Extract<\n NavigationTarget,\n {\n kind: \"command\";\n }\n >[\"target\"][\"command\"],\n extensionId: string,\n) => `${command.extensionId ?? extensionId}.command.${command.id}`;\nconst activateTarget = async (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionCommandPaletteResourceRecord,\n item: ResourceItem,\n) => {\n const { target } = item;\n if (target.kind === \"command\") {\n await executeWorkbenchExtensionCommand(context, commandIdOf(target.target.command, record.extensionId), {\n params: target.target.params,\n });\n // A selected command may mutate extension data; refresh providers so a reopened\n // palette reflects the change without an app reload.\n context.workbench.commandPaletteResources.refresh();\n return;\n }\n await context.workbench.navigation.openTarget(\n toWorkbenchNavigationTarget(target, {\n extensionId: record.extensionId,\n }),\n );\n};\nconst targetResource = (target: NavigationTarget): ResourceRef | undefined => {\n if (target.kind === \"page\" || target.kind === \"panel\") return target.resource;\n if (target.kind === \"compound\") return target.targets.find((step) => step.resource)?.resource;\n return undefined;\n};\nconst toResult = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionCommandPaletteResourceRecord,\n groupLabel: string,\n item: ResourceItem,\n): CommandPaletteResourceResult => ({\n id: `${record.id}:${item.id}`,\n resource: (() => {\n const resource = targetResource(item.target);\n return resource\n ? {\n ...resource,\n projectId: resource.projectId ?? context.projectId,\n extensionId: resource.extensionId ?? record.extensionId,\n }\n : undefined;\n })(),\n label: item.label,\n description: item.description,\n icon: item.icon,\n keywords: item.keywords,\n group: groupLabel,\n activate: () => activateTarget(context, record, item),\n});\nexport const registerWorkbenchExtensionCommandPaletteResources = (\n context: WorkbenchExtensionCommandContext,\n records: readonly WorkbenchExtensionCommandPaletteResourceRecord[],\n) => {\n const disposables: Disposable[] = [];\n for (const record of records) {\n const groupLabel = text(record.title, record.id);\n disposables.push(\n context.workbench.commandPaletteResources.registerProvider({\n id: record.id,\n title: groupLabel,\n refreshEventIds: record.refreshEventIds,\n query: async ({ query, limit, signal }) => {\n const activeResource = context.workbench.getActiveResource();\n const value = await executeWorkbenchExtensionCommand(context, record.queryHandlerId, {\n signal,\n params: {\n projectId: context.projectId,\n modeId: context.workbench.modes.getActiveModeId(),\n activeResource: activeResource,\n providerId: record.id,\n query,\n limit,\n },\n });\n if (!isProviderQueryResult(value)) return [];\n return (value.items ?? []).map((item) => toResult(context, record, groupLabel, item));\n },\n }),\n );\n }\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { WorkbenchExtensionControlsRendererRecord } from \"pstdio-api-contracts\";\nimport { controlsQueryResultSchema } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, ResourceRef } from \"../../core\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\n\nconst localize = (value: unknown, fallback = \"\") => text(value as Parameters<typeof text>[0], fallback);\nexport interface WorkbenchExtensionControlsAdapter {\n /** Supply a fallback resource when the widget placement carries none. */\n resolveResource?: (record: WorkbenchExtensionControlsRendererRecord) => ResourceRef | undefined;\n}\nconst registerControlsRenderer = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionControlsRendererRecord,\n adapter: WorkbenchExtensionControlsAdapter,\n) => {\n const slot = createExtensionSlot({\n id: record.id,\n kind: \"renderer\",\n projectId: context.projectId,\n context: { controlsRendererId: record.id },\n });\n const run = (\n commandId: string | undefined,\n params: Record<string, unknown>,\n resource?: ResourceRef,\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n ) =>\n commandId\n ? executeWorkbenchExtensionCommand(context, commandId, {\n params: {\n renderer: {\n rendererId: record.id,\n ...(pageParams ? { pageParams } : {}),\n projectId: context.projectId,\n ...(resource ? { resource: resource } : {}),\n invocation: { placement: \"visible\" },\n },\n ...params,\n },\n resource,\n signal,\n slot,\n metadata: { controlsRendererId: record.id },\n })\n : Promise.resolve(undefined);\n return context.workbench.views.registerView({\n id: record.id,\n title: localize(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"controls\",\n emptyTitle: localize(record.emptyTitle, \"\"),\n emptyDescription: localize(record.emptyDescription, \"\"),\n defaultValues: record.defaultValues,\n executeQuery: async (resource, signal, pageParams) => {\n const value = await run(\n record.queryHandlerId,\n {},\n resource ?? adapter.resolveResource?.(record),\n signal,\n pageParams,\n );\n const result = controlsQueryResultSchema.safeParse(value);\n if (!result.success) {\n const fields = result.error.issues\n .map((issue) => `body.query.${issue.path.join(\".\")}: ${issue.message}`)\n .join(\"; \");\n throw new Error(\n `Extension \"${record.extensionId}\" view \"${record.id}\" has invalid controls. Expected serializable control declarations. ${fields}`,\n );\n }\n return result.data;\n },\n updateValue: record.valueChangeHandlerId\n ? ({ controlId, value, values, resource }) =>\n run(record.valueChangeHandlerId, { controlId, value, values }, resource).then(() => undefined)\n : undefined,\n apply: record.applyHandlerId\n ? ({ values, resource }) => run(record.applyHandlerId, { values }, resource).then(() => undefined)\n : undefined,\n reset: record.resetHandlerId\n ? ({ controlIds, resource }) => run(record.resetHandlerId, { controlIds }, resource).then(() => undefined)\n : undefined,\n },\n });\n};\n// Bridges serializable controls renderer metadata into live workbench controls renderers\n// (wiring each query/update/apply/reset command id to command execution), and registers a\n// panel widget for every panel that places one.\nexport const registerWorkbenchExtensionControlsRenderers = (\n context: WorkbenchExtensionCommandContext,\n records: WorkbenchExtensionControlsRendererRecord[],\n adapter: WorkbenchExtensionControlsAdapter = {},\n): Disposable => {\n const disposables: Disposable[] = [];\n for (const record of records) disposables.push(registerControlsRenderer(context, record, adapter));\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { Localizable } from \"@pstdio/sdk/extensions\";\nimport { commandRefId } from \"@pstdio/sdk/extensions\";\nimport type { CommandParamSchema } from \"../../core\";\n\ntype LocalizableText = Localizable<string> | undefined;\ntype ParamLocalizer = (value: LocalizableText, fallback?: string) => string;\n\ntype ContributedParamSchema =\n | Record<string, { type: string; label?: LocalizableText; description?: LocalizableText; options?: unknown }>\n | undefined;\n\n/**\n * Contribution params carry `Localizable` labels; the workbench's command\n * surfaces render plain strings. Resolve at the boundary so no l10n object\n * reaches a renderer and gets stringified as \"[object Object]\".\n */\nexport const localizeParamSchema = (\n params: ContributedParamSchema,\n localize: ParamLocalizer,\n ownerExtensionId?: string,\n) => {\n if (!params) return undefined;\n\n return Object.fromEntries(\n Object.entries(params).map(([id, descriptor]) => [\n id,\n {\n ...descriptor,\n ...(descriptor.options && !Array.isArray(descriptor.options)\n ? { options: localizeOptionSource(descriptor.options, ownerExtensionId) }\n : {}),\n label: descriptor.label === undefined ? undefined : localize(descriptor.label, id),\n description: descriptor.description === undefined ? undefined : localize(descriptor.description),\n },\n ]),\n ) as CommandParamSchema;\n};\n\nconst localizeOptionSource = (value: unknown, ownerExtensionId?: string) => {\n const source = value as {\n command: { id: string; extensionId?: string };\n valueField: string;\n labelField: string;\n params?: Record<string, unknown>;\n };\n return {\n valueField: source.valueField,\n labelField: source.labelField,\n params: source.params,\n commandId: commandRefId({\n id: source.command.id,\n extensionId: source.command.extensionId ?? ownerExtensionId ?? \"pstdio\",\n }),\n };\n};\n","import type { WorkbenchExtensionDataTableRendererRecord } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { localizeParamSchema } from \"./param-schema-localization\";\n\nexport const mapViewToolbarActions = (\n record: Pick<WorkbenchExtensionDataTableRendererRecord, \"toolbarActions\" | \"extensionId\">,\n) =>\n record.toolbarActions?.map((action) => ({\n id: action.id,\n label: text(action.label, action.id),\n icon: action.icon,\n presentation: action.presentation,\n commandId: action.commandId,\n args: action.params,\n params: localizeParamSchema(action.input, text, record.extensionId),\n submitLabel: action.submitLabel,\n disabled: action.disabled,\n when: action.when,\n }));\n","import type { DataTableRendererSettings } from \"@pstdio/sdk/extensions\";\nimport { dataTableBuiltInViews, type WorkbenchExtensionDataTableRendererRecord } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { createElement } from \"react\";\nimport type {\n CollectionViewsProvider,\n DataTableRendererColumn,\n DataTableRendererQueryResult,\n DataTableRendererRow,\n Disposable,\n ResourceRef,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../../react\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\nimport { mapViewToolbarActions } from \"./view-toolbar-actions\";\n\nconst localize = (value: unknown, fallback = \"\") => text(value as Parameters<typeof text>[0], fallback);\n\nexport interface WorkbenchExtensionDataTableRendererAdapter {\n resolveRowResource?: (\n record: WorkbenchExtensionDataTableRendererRecord,\n row: { id: string; values: Record<string, unknown>; resource?: ResourceRef },\n ) => ResourceRef | undefined;\n /** Shared saved views for the table, such as the dashboard's project views. */\n createViewsProvider?: (\n record: WorkbenchExtensionDataTableRendererRecord,\n ) => CollectionViewsProvider<DataTableRendererSettings>;\n}\ntype WireColumn = NonNullable<WorkbenchExtensionDataTableRendererRecord[\"columns\"]>[number];\nconst toColumn = (column: WireColumn): DataTableRendererColumn => ({\n ...column,\n label: localize(column.label, column.id),\n description: column.description ? localize(column.description) : undefined,\n icon: column.icon ? createElement(WorkbenchIcon, { name: column.icon, size: 14 }) : undefined,\n});\nconst isQueryResult = (\n value: unknown,\n): value is {\n rows: Array<{\n id: string;\n values: Record<string, unknown>;\n resource?: ResourceRef;\n }>;\n columns?: WorkbenchExtensionDataTableRendererRecord[\"columns\"];\n} =>\n Boolean(\n value &&\n typeof value === \"object\" &&\n Array.isArray(\n (\n value as {\n rows?: unknown;\n }\n ).rows,\n ),\n );\nconst toRow = (row: { id: string; values: Record<string, unknown>; resource?: ResourceRef }): DataTableRendererRow => ({\n id: row.id,\n values: row.values,\n resource: row.resource ? row.resource : undefined,\n});\nconst registerRenderer = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionDataTableRendererRecord,\n adapter: WorkbenchExtensionDataTableRendererAdapter,\n) => {\n const builtIns = dataTableBuiltInViews(record);\n const originalRows = new WeakMap<DataTableRendererRow, Parameters<typeof toRow>[0]>();\n const slot = createExtensionSlot({\n id: record.id,\n kind: \"dataTableRenderer\",\n projectId: context.projectId,\n context: { dataTableRendererId: record.id },\n });\n const run = (\n commandId: string,\n params: Record<string, unknown>,\n resource?: ResourceRef,\n modeId?: string,\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n ) =>\n executeWorkbenchExtensionCommand(context, commandId, {\n params: {\n renderer: {\n rendererId: record.id,\n ...(pageParams ? { pageParams } : {}),\n projectId: context.projectId,\n ...(modeId ? { modeId } : {}),\n ...(resource ? { resource: resource } : {}),\n invocation: { placement: \"visible\" },\n },\n ...params,\n },\n resource,\n signal,\n slot,\n metadata: { dataTableRendererId: record.id },\n });\n return context.workbench.views.registerView({\n id: record.id,\n title: localize(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"dataTable\",\n resourceKind: record.resourceKind,\n toolbarActions: mapViewToolbarActions(record),\n columns: record.columns?.map(toColumn),\n initialPageSize: record.initialPageSize,\n pageSizeOptions: record.pageSizeOptions,\n defaultSettings: builtIns.settings,\n defaultFilter: record.defaultFilter,\n defaultSorts: record.defaultSorts,\n defaultViews: builtIns.views.map((view) => ({ ...view, title: localize(view.title, view.id) })),\n defaultActiveViewId: record.defaultActiveViewId,\n viewsProvider: adapter.createViewsProvider?.(record),\n selectionMode: record.selectionMode,\n selectionActions: record.selectionActions?.map((action) => ({\n id: action.id,\n commandId: action.commandId,\n label: localize(action.label, action.id),\n icon: action.icon ? createElement(WorkbenchIcon, { name: action.icon, size: 16 }) : undefined,\n destructive: action.destructive,\n run: (rows) => run(action.commandId, { rowIds: rows.map((row) => row.id) }).then(() => undefined),\n })),\n emptyTitle: record.emptyTitle ? localize(record.emptyTitle) : undefined,\n emptyDescription: record.emptyDescription ? localize(record.emptyDescription) : undefined,\n executeQuery: async ({ resource, modeId, filter, sorts, settings, pageParams }, signal) => {\n const value = await run(\n record.queryHandlerId,\n { filter, sorts, settings },\n resource,\n modeId,\n signal,\n pageParams,\n );\n if (!isQueryResult(value)) return { rows: [] };\n const rows = value.rows.map((row) => {\n const mapped = toRow(row);\n if (adapter.resolveRowResource) mapped.resource = adapter.resolveRowResource(record, row);\n originalRows.set(mapped, row);\n return mapped;\n });\n return {\n rows,\n columns: value.columns?.map(toColumn),\n } satisfies DataTableRendererQueryResult;\n },\n rowActions: record.rowActions?.map((action) => ({\n id: action.id,\n commandId: action.commandId,\n label: localize(action.label, action.id),\n icon: action.icon ? createElement(WorkbenchIcon, { name: action.icon, size: 16 }) : undefined,\n destructive: action.destructive,\n run: async (row) => {\n await run(action.commandId, { rowId: row.id }, row.resource);\n context.workbench.views.refreshView(record.id);\n },\n })),\n onRowActivate: record.rowActivationHandlerId\n ? async (row) => {\n await run(record.rowActivationHandlerId!, { row: originalRows.get(row) ?? row }, row.resource);\n }\n : undefined,\n },\n });\n};\nexport const registerWorkbenchExtensionDataTableRenderers = (\n context: WorkbenchExtensionCommandContext,\n records: WorkbenchExtensionDataTableRendererRecord[],\n adapter: WorkbenchExtensionDataTableRendererAdapter = {},\n): Disposable => {\n const disposables: Disposable[] = records.map((record) => registerRenderer(context, record, adapter));\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type {\n ExtensionCommandPaletteContribution,\n ExtensionMenuContribution,\n WorkbenchExtensionMetadata,\n} from \"@pstdio/sdk/api\";\nimport { isLocalizedString, type Localizable } from \"@pstdio/sdk/extensions\";\nimport type { Command, MenuItem, MenuPath } from \"../../core\";\nimport { localizeParamSchema } from \"./param-schema-localization\";\n\nexport type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\n\nconst placementOrder = { first: 0, default: 1, last: 2 } satisfies Record<\n NonNullable<ExtensionMenuContribution[\"placement\"] | ExtensionCommandPaletteContribution[\"placement\"]>,\n number\n>;\ntype ExtensionContributionPlacement = keyof typeof placementOrder;\n\nexport interface WorkbenchExtensionMenuSlotConfig {\n menuPath: MenuPath;\n group?: string;\n overflowLabel?: string;\n resourceGroup?: { id: string; label: string };\n}\n\nexport type WorkbenchExtensionMenuWhenBuilder = (contribution: ExtensionMenuContribution) => string | undefined;\nexport type WorkbenchExtensionStringResolver = (value: Localizable<string> | undefined, extensionId: string) => string;\n\nexport interface WorkbenchExtensionMenuRegistration {\n command: Command;\n contribution: ExtensionMenuContribution;\n menuItem: MenuItem;\n menuPath: MenuPath;\n targetCommandId: string;\n}\n\nexport interface WorkbenchExtensionCommandPaletteRegistration {\n command: Command;\n contribution: ExtensionCommandPaletteContribution;\n menuItem: MenuItem;\n targetCommandId: string;\n}\n\nexport interface UnresolvedWorkbenchExtensionMenuContribution {\n contribution: ExtensionMenuContribution;\n targetId: string;\n}\n\nexport const emptyWorkbenchExtensionMetadata = {\n commands: [],\n commandPaletteContributions: [],\n diagnostics: [],\n extensions: [],\n menuContributions: [],\n modes: [],\n pages: [],\n views: [],\n viewMenus: [],\n placements: [],\n resourceKinds: [],\n navigationItems: [],\n navigationTrees: [],\n statusBarItems: [],\n settingsPanels: [],\n settingsDefinitions: [],\n} satisfies WorkbenchExtensionMetadata;\n\ntype CommandContributionMetadata = Pick<\n WorkbenchExtensionMetadata,\n \"commands\" | \"commandPaletteContributions\" | \"menuContributions\"\n>;\n\nconst defaultWorkbenchExtensionCommandId = (contribution: ExtensionMenuContribution) =>\n `workbench.extension.menu.${contribution.id}`;\n\nconst defaultWorkbenchExtensionPaletteCommandId = (contribution: ExtensionCommandPaletteContribution) =>\n `workbench.extension.palette.${contribution.id}`;\n\nconst contributionOrder = (contribution: { placement?: ExtensionContributionPlacement }, index: number) =>\n placementOrder[contribution.placement ?? \"default\"] * 1000 + index;\n\nconst text: WorkbenchExtensionStringResolver = (value) => {\n if (value === undefined) return \"\";\n if (!isLocalizedString(value)) return value;\n return value.default ?? value.$l10n;\n};\n\nconst createMenuItem = (input: {\n contribution: ExtensionMenuContribution;\n commandId: string;\n index: number;\n slot: WorkbenchExtensionMenuSlotConfig;\n when?: string;\n disabledWhen?: string;\n resolveString: WorkbenchExtensionStringResolver;\n}) => {\n const { commandId, contribution, index, resolveString, slot, when, disabledWhen } = input;\n\n return {\n commandId,\n id: contribution.id,\n sourceCommandId: contribution.commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n icon: contribution.icon,\n group: slot.group ?? contribution.group,\n resourceGroup: slot.resourceGroup,\n args: contribution.params,\n overflowLabel: slot.overflowLabel,\n order: contributionOrder(contribution, index),\n when,\n disabledWhen,\n disabledReason: resolveString(contribution.disabledReason, contribution.extensionId),\n } satisfies MenuItem;\n};\n\nconst createPaletteItem = (input: {\n contribution: ExtensionCommandPaletteContribution;\n commandId: string;\n index: number;\n resolveString: WorkbenchExtensionStringResolver;\n}) => {\n const { commandId, contribution, index, resolveString } = input;\n\n return {\n commandId,\n sourceCommandId: contribution.commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n icon: contribution.icon,\n group: contribution.group,\n args: contribution.params,\n order: contributionOrder(contribution, index),\n } satisfies MenuItem;\n};\n\nexport const buildWorkbenchExtensionMenuRegistrations = (input: {\n metadata: CommandContributionMetadata;\n menuSlotsById: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;\n menuTargetsById?: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;\n createCommandId?: (contribution: ExtensionMenuContribution) => string;\n createWhenExpression?: WorkbenchExtensionMenuWhenBuilder;\n resolveString?: WorkbenchExtensionStringResolver;\n}) => {\n const {\n createCommandId = defaultWorkbenchExtensionCommandId,\n createWhenExpression,\n menuSlotsById,\n menuTargetsById,\n metadata,\n resolveString = text,\n } = input;\n const registrations: WorkbenchExtensionMenuRegistration[] = [];\n const unresolved: UnresolvedWorkbenchExtensionMenuContribution[] = [];\n\n metadata.menuContributions.forEach((contribution, index) => {\n const slot = contribution.target\n ? menuTargetsById?.get(contribution.target)\n : menuSlotsById.get(contribution.slotId);\n if (!slot) {\n unresolved.push({ contribution, targetId: contribution.target ?? contribution.slotId });\n return;\n }\n\n const commandId = createCommandId(contribution);\n const command = metadata.commands.find((candidate) => candidate.id === contribution.commandId);\n\n registrations.push({\n command: {\n id: commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n category: contribution.group,\n resourceMutation: command?.resourceMutation,\n description: command ? resolveString(command.description, command.extensionId) : undefined,\n icon: contribution.icon,\n params: localizeParamSchema(\n command?.params,\n (value) => resolveString(value, command?.extensionId ?? contribution.extensionId),\n command?.extensionId,\n ),\n },\n contribution,\n menuItem: createMenuItem({\n commandId,\n contribution,\n index,\n resolveString,\n slot,\n when: createWhenExpression?.(contribution),\n disabledWhen: contribution.disabledWhen\n ? createWhenExpression?.({ ...contribution, when: contribution.disabledWhen })\n : undefined,\n }),\n menuPath: slot.menuPath,\n targetCommandId: contribution.commandId,\n });\n });\n\n return { registrations, unresolved };\n};\n\nexport const buildWorkbenchExtensionCommandPaletteRegistrations = (input: {\n metadata: CommandContributionMetadata;\n createCommandId?: (contribution: ExtensionCommandPaletteContribution) => string;\n resolveString?: WorkbenchExtensionStringResolver;\n}) => {\n const { createCommandId = defaultWorkbenchExtensionPaletteCommandId, metadata, resolveString = text } = input;\n const registrations: WorkbenchExtensionCommandPaletteRegistration[] = [];\n\n (metadata.commandPaletteContributions ?? []).forEach((contribution, index) => {\n const commandId = createCommandId(contribution);\n const command = metadata.commands.find((candidate) => candidate.id === contribution.commandId);\n\n registrations.push({\n command: {\n id: commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n category: contribution.group,\n description: command ? resolveString(command.description, command.extensionId) : undefined,\n icon: contribution.icon,\n params: localizeParamSchema(\n command?.params,\n (value) => resolveString(value, command?.extensionId ?? contribution.extensionId),\n command?.extensionId,\n ),\n },\n contribution,\n menuItem: createPaletteItem({ commandId, contribution, index, resolveString }),\n targetCommandId: contribution.commandId,\n });\n });\n\n return registrations;\n};\n","import type { CommandExecuteRequest, CommandExecutionResult } from \"@pstdio/sdk/api\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type {\n Disposable,\n FileRendererContent,\n FileRendererRefreshEnvelope,\n FileRendererRefreshOrigin,\n ResourceRef,\n WorkbenchModuleContext,\n} from \"../../core\";\nimport { unwrapCommandValue } from \"../host/command-response\";\nimport type { InternalWorkbenchExtensionMetadata as WorkbenchExtensionMetadata } from \"../host/internal-workbench-extension-metadata\";\nimport { executeWorkbenchExtensionCommandResponse } from \"../host/workbench-extension-command\";\nimport { attachFileStorageVersions, fileStorageVersions } from \"./file-storage-versions\";\n\ntype FileRendererRecord = NonNullable<WorkbenchExtensionMetadata[\"fileRenderers\"]>[number];\nexport interface RegisterWorkbenchExtensionFileRenderersInput {\n executeCommand(commandId: string, body: CommandExecuteRequest, signal?: AbortSignal): Promise<unknown> | unknown;\n metadata: WorkbenchExtensionMetadata;\n projectId: string;\n workbench: WorkbenchModuleContext;\n}\n\nconst slotContext = (input: { projectId: string; rendererId: string; resource?: ResourceRef }) => ({\n id: input.rendererId,\n kind: \"renderer\" as const,\n context: {\n projectId: input.projectId,\n ...(input.resource ? { resourceType: input.resource.type, resourceId: input.resource.id } : {}),\n },\n});\nconst executeFileCommand = async (\n input: RegisterWorkbenchExtensionFileRenderersInput,\n rendererId: string,\n commandId: string,\n resource: ResourceRef | undefined,\n extra: Record<string, unknown> = {},\n metadata?: CommandExecuteRequest[\"metadata\"],\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n) => {\n const ext = resource;\n return executeWorkbenchExtensionCommandResponse(input, commandId, {\n params: {\n renderer: {\n rendererId,\n ...(pageParams ? { pageParams } : {}),\n projectId: input.projectId,\n ...(ext ? { resource: ext } : {}),\n invocation: { placement: \"visible\" },\n },\n ...extra,\n },\n resource: ext,\n signal,\n slot: slotContext({ projectId: input.projectId, rendererId, resource: ext }),\n ...(metadata ? { metadata } : {}),\n });\n};\nconst revisionFromValue = (value: unknown) => {\n if (!value || typeof value !== \"object\") return undefined;\n const revision = (\n value as {\n revision?: unknown;\n }\n ).revision;\n return typeof revision === \"string\" ? revision : undefined;\n};\nexport const fileRendererRefreshEnvelopeFromCommand = (\n body: CommandExecuteRequest,\n response: CommandExecutionResult,\n): FileRendererRefreshEnvelope | undefined => {\n const metadata = body.metadata;\n const origin = metadata?.fileRendererOrigin;\n if (!origin || typeof origin !== \"object\") return undefined;\n const candidate = origin as Partial<FileRendererRefreshOrigin>;\n if (\n typeof candidate.rendererId !== \"string\" ||\n typeof candidate.instanceId !== \"string\" ||\n typeof candidate.operationId !== \"string\"\n ) {\n return undefined;\n }\n const resourceKey = metadata?.fileRendererResourceKey;\n const revision = response.outcome.ok ? revisionFromValue(response.outcome.value) : undefined;\n return {\n origin: {\n rendererId: candidate.rendererId,\n instanceId: candidate.instanceId,\n operationId: candidate.operationId,\n },\n ...(typeof resourceKey === \"string\" ? { resourceKey } : {}),\n ...(revision ? { revision } : {}),\n };\n};\nconst registerFileRenderer = (input: RegisterWorkbenchExtensionFileRenderersInput, record: FileRendererRecord) =>\n input.workbench.views.registerView({\n id: record.id,\n title: text(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"file\",\n resourceKind: record.resourceKind,\n load: async (resource, signal, pageParams) => {\n const result = await executeFileCommand(\n input,\n record.id,\n record.loadHandlerId,\n resource,\n {},\n { fileStorageVersions: {} },\n signal,\n pageParams,\n );\n return attachFileStorageVersions((unwrapCommandValue(result) ?? {}) as FileRendererContent, result);\n },\n save: record.saveHandlerId\n ? async (resource, content, origin, loaded) => {\n const result = await executeFileCommand(\n input,\n record.id,\n record.saveHandlerId as string,\n resource,\n { content },\n {\n fileStorageVersions: fileStorageVersions(loaded),\n ...(origin ? { fileRendererOrigin: origin } : {}),\n ...(resourceKey(resource) ? { fileRendererResourceKey: resourceKey(resource) } : {}),\n },\n );\n const revision = revisionFromValue(unwrapCommandValue(result));\n return attachFileStorageVersions(revision ? { revision } : {}, result);\n }\n : undefined,\n },\n });\nexport const registerWorkbenchExtensionFileRenderers = (input: RegisterWorkbenchExtensionFileRenderersInput) => {\n const disposables: Disposable[] = [];\n for (const record of input.metadata.fileRenderers ?? []) {\n disposables.push(registerFileRenderer(input, record));\n }\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { CollectionBadgeItem } from \"@pstdio/sdk/extensions\";\nimport type { KanbanRendererRow } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\n\nexport const collectionBadgeTarget = (\n row: KanbanRendererRow,\n itemsAttributeId: string,\n itemId: string,\n extensionId: string,\n projectId: string,\n) => {\n const items = row.attributes[itemsAttributeId] as CollectionBadgeItem[] | undefined;\n const item = items?.find((item) => item.id === itemId);\n return item?.target ? toWorkbenchNavigationTarget(item.target, { extensionId, projectId }) : undefined;\n};\n","import type { KanbanRendererBoardColumnConfig as WireBoardColumnConfig } from \"@pstdio/sdk/extensions\";\nimport { createElement } from \"react\";\nimport { WorkbenchIcon } from \"../../react\";\nimport type { ReactKanbanRendererContribution as KanbanRendererContribution } from \"../../react/renderers/kanban/kanban-presentation\";\nimport type { Localizer } from \"./kanban-renderer-contribution-helpers\";\n\ntype BoardColumnConfig = ReturnType<NonNullable<KanbanRendererContribution[\"getBoardColumnConfig\"]>>;\n\nconst createBoardActionIcon = (icon: string | undefined) => {\n const BoardActionIcon = (props: { size?: number | string }) =>\n createElement(WorkbenchIcon, { name: icon ?? \"MoreHorizontal\", ...props });\n return BoardActionIcon;\n};\n\nexport const toWorkbenchBoardColumnConfig = (config: WireBoardColumnConfig | undefined, localize: Localizer) =>\n ({\n color: config?.color,\n canDragIn: config?.canDragIn,\n canDragOut: config?.canDragOut,\n canCreate: config?.canCreate,\n actions: config?.actions?.map((action) => ({\n id: action.id,\n label: localize(action.label, action.id),\n icon: createBoardActionIcon(action.icon),\n })),\n }) satisfies BoardColumnConfig;\n","import type { KanbanRendererBoardColumnConfig as WireBoardColumnConfig } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchExtensionKanbanRendererRecord } from \"pstdio-api-contracts\";\nimport type { KanbanRendererCreateField, KanbanRendererCreateFieldType, ResourceRef } from \"../../core\";\nimport type {\n ReactAttributeDescriptor as AttributeDescriptor,\n ReactKanbanRendererContribution as KanbanRendererContribution,\n} from \"../../react/renderers/kanban/kanban-presentation\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\nexport type KanbanRendererRow = Awaited<ReturnType<KanbanRendererContribution[\"executeQuery\"]>>[number];\nexport type RowAction = NonNullable<WorkbenchExtensionKanbanRendererRecord[\"rowActions\"]>[number];\nexport type QueryResult = {\n attributes?: WorkbenchExtensionKanbanRendererRecord[\"attributes\"];\n boardColumnConfigs?: Record<string, WireBoardColumnConfig>;\n rows?: unknown[];\n};\nexport type Localizer = (value: unknown, fallback?: string) => string;\nexport interface MutableAttributeSource {\n source: KanbanRendererContribution[\"attributes\"];\n set(attributes: WorkbenchExtensionKanbanRendererRecord[\"attributes\"] | undefined): void;\n}\ntype UnknownDisplayReporter = (attributeId: string, kind: string) => void;\nexport const isQueryResult = (value: unknown): value is QueryResult =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst localizeAttributes = (\n record: WorkbenchExtensionKanbanRendererRecord,\n attributes: WorkbenchExtensionKanbanRendererRecord[\"attributes\"] | undefined,\n localize: Localizer,\n decorate: (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor,\n reportUnknownDisplay?: UnknownDisplayReporter,\n): AttributeDescriptor[] =>\n (attributes ?? []).map((attribute) => {\n const display = attribute.display;\n const knownDisplay =\n display?.kind === \"badge-list\" && typeof display.itemsAttributeId === \"string\"\n ? { kind: \"badge-list\" as const, itemsAttributeId: display.itemsAttributeId }\n : undefined;\n if (display && !knownDisplay) reportUnknownDisplay?.(attribute.id, display.kind);\n const resolveType = () => {\n const { type } = attribute;\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return type;\n return {\n ...type,\n options: Array.isArray(type.options)\n ? type.options.map((option) => ({ ...option, label: localize(option.label, option.value) }))\n : type.options,\n };\n };\n const base: AttributeDescriptor = {\n ...attribute,\n label: localize(attribute.label, attribute.id),\n type: resolveType(),\n display: knownDisplay,\n };\n return decorate(record, base);\n });\nexport const createMutableAttributeSource = (\n record: WorkbenchExtensionKanbanRendererRecord,\n initial: WorkbenchExtensionKanbanRendererRecord[\"attributes\"] | undefined,\n localize: Localizer,\n decorate: (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor,\n reportUnknownDisplay?: UnknownDisplayReporter,\n): MutableAttributeSource => {\n let snapshot = localizeAttributes(record, initial, localize, decorate, reportUnknownDisplay);\n const listeners = new Set<() => void>();\n let signature = JSON.stringify(initial);\n return {\n source: {\n getSnapshot: () => snapshot,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n },\n set(attributes) {\n const nextSignature = JSON.stringify(attributes);\n if (nextSignature === signature) return;\n signature = nextSignature;\n snapshot = localizeAttributes(record, attributes, localize, decorate, reportUnknownDisplay);\n for (const listener of listeners) listener();\n },\n };\n};\nconst isExtensionResource = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n typeof (\n resource as {\n type?: unknown;\n }\n ).type === \"string\" &&\n typeof (\n resource as {\n id?: unknown;\n }\n ).id === \"string\",\n );\nexport const defaultResolveRowResource = (_: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow) => {\n const { resource } = row;\n if (isExtensionResource(resource)) return resource;\n return undefined;\n};\nexport const defaultResolveRowActionResource = (\n record: WorkbenchExtensionKanbanRendererRecord,\n row: KanbanRendererRow,\n) => {\n const fromRow = defaultResolveRowResource(record, row);\n if (fromRow) return fromRow;\n if (!record.resourceKind) return undefined;\n return {\n type: record.resourceKind,\n id: row.id,\n label: row.title,\n };\n};\nexport const toWorkbenchRow = (row: unknown, resolveResource: (row: KanbanRendererRow) => ResourceRef | undefined) => {\n const candidate = row as KanbanRendererRow;\n const resource = resolveResource(candidate);\n return resource === undefined ? candidate : ({ ...candidate, resource } as KanbanRendererRow);\n};\nexport const mergeParams = (...items: Array<Record<string, unknown> | undefined>) =>\n Object.assign({}, ...items.filter((item): item is Record<string, unknown> => Boolean(item)));\nconst asParams = (value: unknown): Record<string, unknown> | undefined =>\n value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\nconst hasCommandParameters = (params: Record<string, unknown> | undefined) => Object.keys(params ?? {}).length > 0;\nconst CREATE_FIELD_TYPES: ReadonlySet<string> = new Set<KanbanRendererCreateFieldType>([\n \"text\",\n \"longtext\",\n \"markdown\",\n \"number\",\n \"boolean\",\n \"select\",\n \"multi-select\",\n \"files\",\n]);\nconst toCreateField = (\n id: string,\n descriptor: NonNullable<NonNullable<WorkbenchExtensionKanbanRendererRecord[\"createRow\"]>[\"params\"]>[string],\n localize: Localizer,\n): KanbanRendererCreateField | undefined => {\n if (!CREATE_FIELD_TYPES.has(descriptor.type)) return undefined;\n const options =\n \"options\" in descriptor && Array.isArray(descriptor.options)\n ? (descriptor.options as Array<{\n value: string;\n label: string;\n icon?: string;\n }>)\n : [];\n const optional = descriptor as {\n placeholder?: unknown;\n multiple?: unknown;\n accept?: unknown;\n };\n return {\n id,\n label: localize(descriptor.label, id),\n description: descriptor.description === undefined ? undefined : localize(descriptor.description),\n placeholder: optional.placeholder === undefined ? undefined : localize(optional.placeholder),\n type: descriptor.type as KanbanRendererCreateFieldType,\n required: descriptor.required === true,\n defaultValue: descriptor.defaultValue,\n options:\n descriptor.type === \"select\" || descriptor.type === \"multi-select\"\n ? options.map((option) => ({\n value: option.value,\n label: localize(option.label, option.value),\n icon: option.icon,\n }))\n : undefined,\n multiple: descriptor.type === \"files\" ? optional.multiple !== false : undefined,\n accept: descriptor.type === \"files\" && typeof optional.accept === \"string\" ? optional.accept : undefined,\n };\n};\nexport const toCreateFields = (record: WorkbenchExtensionKanbanRendererRecord, localize: Localizer) =>\n Object.entries(record.createRow?.params ?? {}).flatMap(([id, descriptor]) => {\n const field = toCreateField(id, descriptor, localize);\n return field ? [field] : [];\n });\nconst createKanbanRendererSlot = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n) =>\n createExtensionSlot({\n id: record.id,\n kind: \"kanbanRenderer\",\n projectId: context.projectId,\n context: { kanbanRendererId: record.id },\n });\nexport const executeKanbanRendererCommand = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n resource?: ResourceRef,\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n) => {\n const commandResource = resource ?? context.workbench.getPrimaryResource();\n return executeWorkbenchExtensionCommand(context, commandId, {\n params: {\n renderer: {\n rendererId: record.id,\n ...(pageParams ? { pageParams } : {}),\n projectId: context.projectId,\n ...(commandResource ? { resource: commandResource } : {}),\n invocation: { placement: \"visible\" },\n },\n ...params,\n },\n resource: commandResource,\n signal,\n slot: createKanbanRendererSlot(context, record),\n metadata: { kanbanRendererId: record.id },\n });\n};\nconst kanbanRendererRowActionCommandId = (record: WorkbenchExtensionKanbanRendererRecord, action: RowAction) =>\n `workbench.extension.kanbanRenderer.${record.id}.rowAction.${action.id}`;\nexport const registerRowActionCommands = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n localize: Localizer,\n) =>\n (record.rowActions ?? []).map((action) => {\n const target = context.workbench.commands.getCommand(action.commandId)?.command;\n return context.workbench.commands.registerCommand(\n {\n id: kanbanRendererRowActionCommandId(record, action),\n label: localize(action.label, action.id),\n icon: action.icon,\n params: target?.params,\n },\n {\n execute: (args, executionContext) =>\n executeKanbanRendererCommand(\n context,\n record,\n action.commandId,\n mergeParams(asParams(args)),\n executionContext?.resource,\n ),\n },\n );\n });\nexport const runDefaultRowAction = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n action: RowAction,\n row: KanbanRendererRow,\n resource: ResourceRef | undefined,\n localize: Localizer,\n) => {\n const commandId = kanbanRendererRowActionCommandId(record, action);\n const command = context.workbench.commands.getCommand(commandId);\n const args = { rowId: row.id };\n const executionContext = resource ? { resource } : undefined;\n const label = localize(action.label, action.id);\n if (command && hasCommandParameters(command.command.params)) {\n context.workbench.commandPalette.requestParams({ record: command, label, args, context: executionContext });\n return Promise.resolve();\n }\n if (command)\n return context.workbench.commands.executeCommand(command.command.id, args, executionContext).then(() => undefined);\n return executeKanbanRendererCommand(context, record, action.commandId, args, resource).then(() => undefined);\n};\n","import type {\n KanbanRendererBoardColumnConfig as WireBoardColumnConfig,\n KanbanRendererRow as WireRow,\n} from \"@pstdio/sdk/extensions\";\nimport { renderBadgeListDisplay } from \"@pstdio/ui/kanban-renderer\";\nimport { kanbanBuiltInViews, type WorkbenchExtensionKanbanRendererRecord } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { createElement } from \"react\";\nimport type { Disposable, KanbanRendererCreateSubmission, KanbanRendererQueryState, ResourceRef } from \"../../core\";\nimport { WorkbenchIcon } from \"../../react\";\nimport type { ReactAttributeDescriptor as AttributeDescriptor } from \"../../react/renderers/kanban/kanban-presentation\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { collectionBadgeTarget } from \"./collection-badge-navigation\";\nimport type { WorkbenchExtensionKanbanRendererAdapter } from \"./kanban-renderer-adapter\";\nimport { toWorkbenchBoardColumnConfig } from \"./kanban-renderer-board-config\";\nimport {\n createMutableAttributeSource,\n defaultResolveRowActionResource,\n defaultResolveRowResource,\n executeKanbanRendererCommand,\n isQueryResult,\n type KanbanRendererRow,\n type Localizer,\n mergeParams,\n registerRowActionCommands,\n runDefaultRowAction,\n toCreateFields,\n toWorkbenchRow,\n} from \"./kanban-renderer-contribution-helpers\";\nimport { mapViewToolbarActions } from \"./view-toolbar-actions\";\n\ntype ColumnConfigRecord = Record<string, WireBoardColumnConfig>;\n\nconst createRowActionIcon = (icon: string | undefined) =>\n icon ? createElement(WorkbenchIcon, { name: icon, size: 16 }) : undefined;\n\nconst toCreateRowConfig = (record: WorkbenchExtensionKanbanRendererRecord, localize: Localizer) => {\n if (!record.createRow) return undefined;\n return {\n title: localize(record.createRow.title, \"Create row\"),\n submitLabel: localize(record.createRow.submitLabel, \"Create\"),\n fields: toCreateFields(record, localize),\n labels: {\n cancel: localize(record.createRow.labels?.cancel, \"Cancel\"),\n properties: localize(record.createRow.labels?.properties, \"Properties\"),\n submitError: localize(record.createRow.labels?.submitError, \"Could not create resource.\"),\n removeFile: localize(record.createRow.labels?.removeFile, \"Remove file\"),\n submitWithoutOpening: localize(undefined, \"Create without opening\"),\n },\n };\n};\n\nconst toRowClick = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n adapter: WorkbenchExtensionKanbanRendererAdapter,\n resolveRowResource: (\n record: WorkbenchExtensionKanbanRendererRecord,\n row: KanbanRendererRow,\n ) => ResourceRef | undefined,\n toActivatedRow: (row: KanbanRendererRow) => KanbanRendererRow,\n) => {\n if (record.rowActivationHandlerId) {\n return async (row: KanbanRendererRow) => {\n const resource = resolveRowResource(record, row);\n await executeKanbanRendererCommand(\n context,\n record,\n record.rowActivationHandlerId!,\n { row: toActivatedRow(row) },\n resource,\n );\n };\n }\n if (!adapter.onRowClick) return undefined;\n return (row: KanbanRendererRow) => adapter.onRowClick?.({ record, row, resource: resolveRowResource(record, row) });\n};\n\nconst toCreateRowHandler = (\n record: WorkbenchExtensionKanbanRendererRecord,\n adapter: WorkbenchExtensionKanbanRendererAdapter,\n runMutation: (\n record: WorkbenchExtensionKanbanRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n ) => Promise<unknown>,\n activateCreatedRow: ((row: KanbanRendererRow) => Promise<void> | void) | undefined,\n) => {\n const contribution = record.createRow;\n if (!contribution) return undefined;\n return async (submission: KanbanRendererCreateSubmission) => {\n const params = mergeParams(\n submission.values,\n contribution.columnParam ? { [contribution.columnParam]: submission.columnId } : undefined,\n contribution.attributesParam ? { [contribution.attributesParam]: submission.attributeValues } : undefined,\n );\n const created = await runMutation(record, contribution.commandId, params);\n await adapter.onAfterCreate?.({ record, created, submission });\n if (submission.openCreatedRow === false || !activateCreatedRow || typeof created !== \"object\" || created === null)\n return;\n const row = created as Partial<KanbanRendererRow>;\n if (typeof row.id !== \"string\" || typeof row.title !== \"string\") return;\n await activateCreatedRow({ ...row, id: row.id, title: row.title, attributes: row.attributes ?? {} });\n };\n};\n\nconst toRowContextMenuActions = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n adapter: WorkbenchExtensionKanbanRendererAdapter,\n localize: Localizer,\n resolveRowActionResource: (\n record: WorkbenchExtensionKanbanRendererRecord,\n row: KanbanRendererRow,\n ) => ResourceRef | undefined,\n) => {\n const actions = record.rowActions;\n if (!actions?.length) return undefined;\n return (row: KanbanRendererRow) =>\n actions.map((action) => {\n const resource = resolveRowActionResource(record, row);\n const runDefault = () => runDefaultRowAction(context, record, action, row, resource, localize);\n return {\n key: action.id,\n label: localize(action.label, action.id),\n commandId: action.commandId,\n icon: createRowActionIcon(action.icon),\n onClick: () =>\n adapter.executeRowAction\n ? adapter.executeRowAction({ record, action, row, resource, runDefault })\n : runDefault(),\n };\n });\n};\n\nexport const registerWorkbenchExtensionKanbanRenderers = (\n context: WorkbenchExtensionCommandContext,\n records: readonly WorkbenchExtensionKanbanRendererRecord[],\n adapter: WorkbenchExtensionKanbanRendererAdapter = {},\n) => {\n const disposables: Disposable[] = [];\n const localize: Localizer =\n adapter.resolveLabel ?? ((value, fallback) => text(value as Parameters<typeof text>[0], fallback));\n const decorate = (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => {\n const withBuiltInDisplay =\n attribute.display?.kind === \"badge-list\"\n ? {\n ...attribute,\n render: (value: unknown, row: KanbanRendererRow) =>\n renderBadgeListDisplay(attribute, value, row, undefined, (id) => {\n if (attribute.display?.kind !== \"badge-list\") return;\n const target = collectionBadgeTarget(\n row,\n attribute.display.itemsAttributeId,\n id,\n record.extensionId,\n context.projectId,\n );\n return target\n ? () => {\n void context.workbench.navigation.openTarget(target);\n }\n : undefined;\n }),\n }\n : attribute;\n return adapter.decorateAttribute?.(record, withBuiltInDisplay) ?? withBuiltInDisplay;\n };\n const resolveRowResource = adapter.resolveRowResource ?? defaultResolveRowResource;\n const resolveRowActionResource = adapter.resolveRowActionResource ?? defaultResolveRowActionResource;\n const afterMutation = adapter.onAfterMutation ?? (() => {});\n\n const runMutation = (\n record: WorkbenchExtensionKanbanRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n ) =>\n executeKanbanRendererCommand(context, record, commandId, params).then((result) => {\n afterMutation(record);\n return result;\n });\n\n for (const record of records) {\n const reportUnknownDisplay = (attributeId: string, kind: string) =>\n context.workbench.notifications.show({\n id: `workbench.extension.${record.extensionId}.kanban.${record.id}.display.${attributeId}`,\n level: \"error\",\n title: \"Extension display is not available\",\n message: `Attribute \"${attributeId}\" in renderer \"${record.id}\" uses unknown display kind \"${kind}\".`,\n });\n const attributes = createMutableAttributeSource(\n record,\n record.attributes,\n localize,\n decorate,\n reportUnknownDisplay,\n );\n let wireAttributes = record.attributes;\n const builtIns = kanbanBuiltInViews(record);\n const originalRows = new WeakMap<KanbanRendererRow, KanbanRendererRow>();\n let columnConfigs: ColumnConfigRecord | undefined;\n let latestQueryId = 0;\n let rowCache = new Map<string, { signature: string; row: KanbanRendererRow }>();\n const rowResource = (row: KanbanRendererRow) => resolveRowResource(record, row);\n const toActivatedRow = (row: KanbanRendererRow) => originalRows.get(row) ?? row;\n const onRowActivate = toRowClick(context, record, adapter, resolveRowResource, toActivatedRow);\n\n disposables.push(...registerRowActionCommands(context, record, localize));\n disposables.push(\n context.workbench.views.registerView({\n id: record.id,\n title: localize(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"kanban\",\n resourceKind: record.resourceKind,\n toolbarActions: mapViewToolbarActions(record),\n listRowActions: () =>\n (record.rowActions ?? []).map((action) => ({\n commandId: action.commandId,\n label: localize(action.label, action.id),\n })),\n storageScope: context.projectId,\n attributes: attributes.source,\n defaultSettings: builtIns.settings,\n defaultFilter: record.defaultFilter,\n defaultSorts: record.defaultSorts,\n viewsProvider: adapter.createViewsProvider?.(record),\n defaultViews: builtIns.views.map((view) => ({ ...view, title: localize(view.title, view.id) })),\n defaultActiveViewId: record.defaultActiveViewId,\n emptyTitle: localize(record.emptyTitle, \"\"),\n emptyDescription: localize(record.emptyDescription, \"\"),\n hideToolbar: record.hideToolbar,\n createRow: toCreateRowConfig(record, localize),\n getBoardColumnConfig: (groupKey) => toWorkbenchBoardColumnConfig(columnConfigs?.[groupKey], localize),\n onRowActivate,\n executeQuery: async (state: KanbanRendererQueryState, signal) => {\n latestQueryId += 1;\n const queryId = latestQueryId;\n const value = await executeKanbanRendererCommand(\n context,\n record,\n record.queryHandlerId,\n {\n settings: state.settings,\n filter: state.filter,\n sorts: state.sorts,\n },\n undefined,\n signal,\n state.pageParams,\n );\n const mapRows = (rows: unknown[]) => {\n const nextCache = new Map<string, { signature: string; row: KanbanRendererRow }>();\n const result = rows.map((row) => {\n const candidate = row as KanbanRendererRow;\n const signature = JSON.stringify(row);\n const cached = rowCache.get(candidate.id);\n const target = (row as WireRow).target;\n const mapped =\n cached?.signature === signature\n ? cached.row\n : {\n ...toWorkbenchRow(row, rowResource),\n ...(target\n ? {\n target: toWorkbenchNavigationTarget(target, {\n extensionId: record.extensionId,\n projectId: context.projectId,\n }),\n }\n : {}),\n };\n originalRows.set(mapped, candidate);\n nextCache.set(mapped.id, { signature, row: mapped });\n return mapped;\n });\n if (queryId === latestQueryId) rowCache = nextCache;\n return result;\n };\n if (queryId !== latestQueryId) {\n if (Array.isArray(value)) return mapRows(value);\n return isQueryResult(value) ? mapRows(value.rows ?? []) : [];\n }\n\n if (Array.isArray(value)) return mapRows(value);\n if (!isQueryResult(value)) return [];\n const nextAttributes = value.attributes ?? wireAttributes;\n wireAttributes = nextAttributes;\n attributes.set(nextAttributes);\n columnConfigs = value.boardColumnConfigs;\n return mapRows(value.rows ?? []);\n },\n onAttributeChange: record.attributeChangeHandlerId\n ? (rowId, attributeId, value) =>\n runMutation(record, record.attributeChangeHandlerId!, {\n rowId,\n attributeId,\n value,\n }).then(() => undefined)\n : undefined,\n onMove: record.moveHandlerId\n ? (move) => runMutation(record, record.moveHandlerId!, { ...move }).then(() => undefined)\n : undefined,\n onCreateRow: toCreateRowHandler(\n record,\n adapter,\n runMutation,\n record.rowActivationHandlerId ? onRowActivate : undefined,\n ),\n onColumnAction: record.columnActionHandlerId\n ? async (columnId, actionId) => {\n await runMutation(record, record.columnActionHandlerId!, { columnId, actionId });\n }\n : undefined,\n getRowContextMenuActions: toRowContextMenuActions(\n context,\n record,\n adapter,\n localize,\n resolveRowActionResource,\n ),\n },\n }),\n );\n }\n\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { TreeContext } from \"../../core\";\nimport { executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\nimport type {\n ExtensionTreeNode,\n ExtensionTreeRendererRecord,\n ExtensionTreeResource,\n} from \"./tree-renderer-contribution-types\";\nimport type { RegisterWorkbenchExtensionTreeRenderersInput } from \"./tree-renderer-contributions\";\n\nconst slotContext = (input: {\n modeId?: string;\n projectId: string;\n resource?: ExtensionTreeResource;\n treeId: string;\n}) => ({\n id: input.treeId,\n kind: \"renderer\" as const,\n context: {\n projectId: input.projectId,\n treeId: input.treeId,\n ...(input.modeId ? { modeId: input.modeId } : {}),\n ...(input.resource ? { resourceType: input.resource.type, resourceId: input.resource.id } : {}),\n },\n});\nexport const createQueryParams = (\n input: RegisterWorkbenchExtensionTreeRenderersInput,\n record: ExtensionTreeRendererRecord,\n ctx: TreeContext,\n node?: ExtensionTreeNode,\n) => {\n const resource = ctx.resource;\n const modeId = input.workbench.modes.getActiveModeId();\n return {\n renderer: {\n rendererId: record.id,\n ...(ctx.pageParams ? { pageParams: ctx.pageParams } : {}),\n projectId: input.projectId,\n ...(modeId ? { modeId } : {}),\n ...(resource ? { resource } : {}),\n invocation: { placement: \"visible\" },\n },\n state: ctx.state,\n ...(ctx.filter ? { filter: ctx.filter } : {}),\n ...(node ? { node } : {}),\n };\n};\nexport const executeCallback = async (\n input: RegisterWorkbenchExtensionTreeRenderersInput,\n record: ExtensionTreeRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n signal?: AbortSignal,\n) => {\n const renderer = params.renderer as\n | {\n modeId?: string;\n resource?: ExtensionTreeResource;\n }\n | undefined;\n const resource = renderer?.resource;\n return executeWorkbenchExtensionCommand(input, commandId, {\n params,\n signal,\n resource,\n slot: slotContext({\n modeId: renderer?.modeId,\n projectId: input.projectId,\n resource,\n treeId: record.id,\n }),\n });\n};\nexport const executeTreeActionCommand = async (\n input: RegisterWorkbenchExtensionTreeRenderersInput,\n record: ExtensionTreeRendererRecord,\n commandId: string,\n params: Record<string, unknown> | undefined,\n resource: ExtensionTreeResource | undefined,\n) => {\n const modeId = input.workbench.modes.getActiveModeId();\n const rendererParams = {\n ...(params ?? {}),\n renderer: {\n rendererId: record.id,\n projectId: input.projectId,\n ...(modeId ? { modeId } : {}),\n ...(resource ? { resource } : {}),\n invocation: { placement: \"visible\" },\n },\n };\n return executeWorkbenchExtensionCommand(input, commandId, {\n params: rendererParams,\n resource,\n slot: slotContext({ modeId, projectId: input.projectId, resource, treeId: record.id }),\n metadata: { treeId: record.id },\n });\n};\n","import type { TreeContext, TreeNode } from \"../../core\";\nimport type { InternalWorkbenchExtensionMetadata as WorkbenchExtensionMetadata } from \"../host/internal-workbench-extension-metadata\";\nimport type { ExtensionTreeRendererRecord, ExtensionTreeViewRecord } from \"./tree-renderer-contribution-types\";\n\nexport interface HostTreeDefaultNodesInput {\n ctx: TreeContext;\n record: ExtensionTreeRendererRecord;\n panel: ExtensionTreeViewRecord;\n}\n\nexport type HostTreeDefaultNodesResolver = (input: HostTreeDefaultNodesInput) => Promise<TreeNode[]> | TreeNode[];\n\ninterface ResolveHostTreeDefaultInput {\n ctx: TreeContext;\n record: ExtensionTreeRendererRecord;\n treeViews: ExtensionTreeViewRecord[];\n}\n\ninterface ResolveHostTreeHeaderInput extends ResolveHostTreeDefaultInput {\n getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;\n}\n\ninterface ResolveHostTreeFooterInput extends ResolveHostTreeDefaultInput {\n getHostTreeFooterNodes?: HostTreeDefaultNodesResolver;\n}\n\nexport const treeViewsFor = (\n metadata: WorkbenchExtensionMetadata,\n record: ExtensionTreeRendererRecord,\n): ExtensionTreeViewRecord[] =>\n metadata.panels\n .flatMap((panel) => [panel, ...(panel.panelMenus ?? [])])\n .filter((panel) => panel.renderer?.kind === \"tree\" && panel.renderer.id === record.id);\n\nconst resolveTreeView = (panels: ExtensionTreeViewRecord[], ctx: TreeContext) => {\n if (ctx.viewId) return panels.find((panel) => panel.id === ctx.viewId);\n return panels.length === 1 ? panels[0] : undefined;\n};\n\nexport const resolveHostTreeHeaderNodes = async (input: ResolveHostTreeHeaderInput) => {\n const { ctx, getHostTreeHeaderNodes, record, treeViews } = input;\n const panel = resolveTreeView(treeViews, ctx);\n if (!panel || !(\"hostTreeHeader\" in panel) || panel.hostTreeHeader !== \"default\") return [];\n return (await getHostTreeHeaderNodes?.({ ctx, record, panel })) ?? [];\n};\n\nexport const resolveHostTreeFooterNodes = async (input: ResolveHostTreeFooterInput) => {\n const { ctx, getHostTreeFooterNodes, record, treeViews } = input;\n const panel = resolveTreeView(treeViews, ctx);\n if (!panel || !(\"hostTreeFooter\" in panel) || panel.hostTreeFooter !== \"default\") return [];\n return (await getHostTreeFooterNodes?.({ ctx, record, panel })) ?? [];\n};\n","import { text } from \"pstdio-extensions/workbench\";\nimport type { ResourceRef } from \"../../core\";\nimport type { ExtensionTreeRendererRecord } from \"./tree-renderer-contribution-types\";\n\nexport const extensionTreeStructure = (record: ExtensionTreeRendererRecord, resource?: ResourceRef) =>\n (record.structure ?? []).map((section) => ({\n id: section.id,\n label: text(section.label),\n collapsible: section.collapsible,\n hiddenByDefault: section.hiddenByDefault,\n canHide: section.canHide,\n loading: !section.resourceNode,\n nodes:\n section.resourceNode && resource\n ? [\n {\n id: section.resourceNode.id,\n label: resource.label ?? resource.id ?? resource.type,\n icon: section.resourceNode.icon,\n resource,\n selected: true,\n },\n ]\n : [],\n }));\n","import type { CommandExecuteRequest } from \"@pstdio/sdk/api\";\nimport { commandRefId } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type {\n Disposable,\n NavigationTarget,\n ResourceRef,\n TreeAction,\n TreeContext,\n TreeNode,\n TreeViewSection,\n WorkbenchModuleContext,\n} from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { InternalWorkbenchExtensionMetadata as WorkbenchExtensionMetadata } from \"../host/internal-workbench-extension-metadata\";\n\nimport { localizeParamSchema } from \"./param-schema-localization\";\nimport { createQueryParams, executeCallback, executeTreeActionCommand } from \"./tree-renderer-callbacks\";\nimport type {\n ExtensionTreeAction,\n ExtensionTreeNode,\n ExtensionTreeRendererRecord,\n ExtensionTreeResource,\n ExtensionTreeSection,\n ExtensionTreeTarget,\n TargetCommandArgs,\n} from \"./tree-renderer-contribution-types\";\nimport {\n type HostTreeDefaultNodesResolver,\n resolveHostTreeFooterNodes,\n resolveHostTreeHeaderNodes,\n treeViewsFor,\n} from \"./tree-renderer-host-defaults\";\nimport { extensionTreeStructure } from \"./tree-renderer-structure\";\nexport interface RegisterWorkbenchExtensionTreeRenderersInput {\n executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;\n getHostTreeFooterNodes?: HostTreeDefaultNodesResolver;\n getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;\n metadata: WorkbenchExtensionMetadata;\n projectId: string;\n /**\n * Host canonicalization for node resources. A host that gives extension\n * resources its own URIs (layout scopes, history, and hierarchy key on the\n * URI) must convert tree node resources the same way, or the same resource\n * gets a second identity when opened from a tree.\n */\n resolveNodeResource?: (resource: ExtensionTreeResource) => ResourceRef;\n workbench: WorkbenchModuleContext;\n}\nconst toActionParams = (params: unknown, fallback: Record<string, unknown> | undefined) => {\n if (params && typeof params === \"object\" && !Array.isArray(params)) return params as Record<string, unknown>;\n return fallback;\n};\nconst toRecordParams = (params: object | undefined) =>\n params && !Array.isArray(params) ? (params as Record<string, unknown>) : undefined;\nconst createTreeMapper = (input: RegisterWorkbenchExtensionTreeRenderersInput, record: ExtensionTreeRendererRecord) => {\n const originalNodes = new WeakMap<TreeNode, ExtensionTreeNode>();\n const runnerCommandId = `workbench.extensionTreeRenderer.${record.id}.command`;\n const resolveResource: (resource: ExtensionTreeResource) => ResourceRef = (resource) => {\n const resolved = input.resolveNodeResource?.(resource);\n return resolved ?? resource;\n };\n const mapEmptyState = (section: ExtensionTreeSection): TreeViewSection[\"emptyState\"] => {\n if (!section.emptyState) return undefined;\n return {\n title: text(section.emptyState.title),\n description: text(section.emptyState.description),\n icon: section.emptyState.icon,\n };\n };\n const mapTarget = (\n target: ExtensionTreeTarget | undefined,\n node: ExtensionTreeNode | undefined,\n ctx: TreeContext,\n ): NavigationTarget | undefined => {\n if (!target) return undefined;\n const commandTargetOf = (\n commandTarget: Extract<\n ExtensionTreeTarget,\n {\n kind: \"command\";\n }\n >,\n ) => ({\n kind: \"command\" as const,\n commandId: runnerCommandId,\n args: {\n commandId: `${commandTarget.target.command.extensionId ?? record.extensionId}.command.${commandTarget.target.command.id}`,\n ...(node ? { nodeId: node.id } : {}),\n params: commandTarget.target.params,\n resource: node?.resource ?? ctx.resource,\n treeId: record.id,\n } satisfies TargetCommandArgs,\n });\n return toWorkbenchNavigationTarget(target, {\n commandTargetOf,\n extensionId: record.extensionId,\n projectId: input.projectId,\n });\n };\n const mapAction = (\n action: ExtensionTreeAction,\n node: ExtensionTreeNode | undefined,\n ctx: TreeContext,\n ): TreeAction => {\n const commandId = action.command\n ? commandRefId({ ...action.command, extensionId: action.command.extensionId ?? record.extensionId })\n : undefined;\n return {\n id: action.id,\n resourceMutation: input.metadata.commands.find((command) => command.id === commandId)?.resourceMutation,\n label: text(action.label),\n icon: action.icon,\n args: toRecordParams(action.params),\n params: localizeParamSchema(action.input, text, record.extensionId),\n submitLabel: action.submitLabel,\n when: action.when,\n disabled: action.disabled,\n // Actions mutate tree data (create/delete/...), so refresh afterwards. Plain\n // node-target navigation runs through the runner command and must not refetch.\n run: commandId\n ? async (params) => {\n const actionParams = toActionParams(params, toRecordParams(action.params));\n if (action.command?.extensionId === \"pstdio\") {\n await input.workbench.commands.executeCommand(commandId, actionParams, {\n resource: node?.resource ?? ctx.resource,\n });\n return;\n }\n await executeTreeActionCommand(input, record, commandId, actionParams, node?.resource ?? ctx.resource);\n ctx.refresh();\n }\n : undefined,\n };\n };\n const mapNode = (node: ExtensionTreeNode, ctx: TreeContext): TreeNode => {\n const mapped: TreeNode = {\n id: node.id,\n selected: node.selected,\n label: text(node.label),\n icon: node.icon,\n iconColor: node.iconColor,\n badge: node.badge,\n iconTooltip: node.iconTooltip,\n tooltip: node.tooltip,\n resource: node.resource ? resolveResource(node.resource) : undefined,\n target: mapTarget(node.target, node, ctx),\n rowVariant: node.rowVariant,\n actions: node.actions?.map((action) => mapAction(action, node, ctx)),\n contextMenuActions: node.contextMenuActions?.map((action) => mapAction(action, node, ctx)),\n collapsible: node.collapsible,\n disabled: node.disabled,\n children: node.children?.map((child) => mapNode(child, ctx)),\n description: node.description,\n contextValue: node.contextValue,\n hiddenByDefault: node.hiddenByDefault,\n canHide: node.canHide,\n canDrag: node.canDrag,\n canDrop: node.canDrop,\n };\n originalNodes.set(mapped, node);\n return mapped;\n };\n const mapSections = (sections: ExtensionTreeSection[], ctx: TreeContext): TreeViewSection[] =>\n sections.map((section) => ({\n id: section.id,\n label: text(section.label),\n actions: section.actions?.map((action) => mapAction(action, undefined, ctx)),\n collapsible: section.collapsible,\n emptyState: mapEmptyState(section),\n nodes: section.nodes.map((node) => mapNode(node, ctx)),\n hiddenByDefault: section.hiddenByDefault,\n canHide: section.canHide,\n }));\n const mapNodes = (nodes: ExtensionTreeNode[], ctx: TreeContext): TreeNode[] =>\n nodes.map((node) => mapNode(node, ctx));\n return { mapNodes, mapSections, originalNodes, runnerCommandId };\n};\nconst isTreeSectionArray = (value: unknown): value is ExtensionTreeSection[] =>\n Array.isArray(value) && value.every((section) => section && typeof section === \"object\" && \"nodes\" in section);\nconst isTreeNodeArray = (value: unknown): value is ExtensionTreeNode[] =>\n Array.isArray(value) && value.every((node) => node && typeof node === \"object\" && \"id\" in node);\nconst hostNodeSection = (id: string, nodes: TreeNode[]): TreeViewSection[] =>\n nodes.length > 0 ? [{ id, nodes, canReorder: false }] : [];\nconst registerTree = (input: RegisterWorkbenchExtensionTreeRenderersInput, record: ExtensionTreeRendererRecord) => {\n const mapper = createTreeMapper(input, record);\n const treeViews = treeViewsFor(input.metadata, record);\n const commandDisposable = input.workbench.commands.registerCommand(\n { id: mapper.runnerCommandId, label: `${text(record.title, record.id)} tree command` },\n {\n execute: async (rawArgs) => {\n const args = rawArgs as TargetCommandArgs;\n const result = await executeTreeActionCommand(input, record, args.commandId, args.params, args.resource);\n for (const view of input.workbench.views.listViews()) {\n if (view.body.kind === \"file\") input.workbench.views.refreshView(view.id);\n }\n return result;\n },\n },\n );\n const treeDisposable = input.workbench.views.registerView({\n id: record.id,\n title: text(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"tree\",\n getStructure: record.structure ? (ctx) => extensionTreeStructure(record, ctx.resource) : undefined,\n searchable: record.searchable,\n searchPlaceholder: text(record.searchPlaceholder, \"Search files\"),\n defaultExpandedNodeIds: record.defaultExpandedNodeIds,\n defaultExpandedSectionIds: record.defaultExpandedSectionIds,\n getHeader: async (ctx) => {\n const hostHeader = await resolveHostTreeHeaderNodes({\n ctx,\n getHostTreeHeaderNodes: input.getHostTreeHeaderNodes,\n record,\n treeViews,\n });\n if (!record.headerHandlerId) return hostNodeSection(`${record.id}:host-header`, hostHeader);\n const result = await executeCallback(\n input,\n record,\n record.headerHandlerId,\n createQueryParams(input, record, ctx),\n ctx.signal,\n );\n const extensionHeader = isTreeSectionArray(result) ? mapper.mapSections(result, ctx) : [];\n return [...hostNodeSection(`${record.id}:host-header`, hostHeader), ...extensionHeader];\n },\n getBody: async (ctx) => {\n const result = await executeCallback(\n input,\n record,\n record.bodyHandlerId,\n createQueryParams(input, record, ctx),\n ctx.signal,\n );\n if (!isTreeSectionArray(result)) return [];\n return mapper.mapSections(result, ctx);\n },\n getFooter: async (ctx) => {\n const hostFooter = await resolveHostTreeFooterNodes({\n ctx,\n getHostTreeFooterNodes: input.getHostTreeFooterNodes,\n record,\n treeViews,\n });\n if (!record.footerHandlerId) return hostNodeSection(`${record.id}:host-footer`, hostFooter);\n const result = await executeCallback(\n input,\n record,\n record.footerHandlerId,\n createQueryParams(input, record, ctx),\n ctx.signal,\n );\n const extensionFooter = isTreeSectionArray(result) ? mapper.mapSections(result, ctx) : [];\n return [...extensionFooter, ...hostNodeSection(`${record.id}:host-footer`, hostFooter)];\n },\n moveNode: record.moveHandlerId\n ? async (source, target, ctx) => {\n const originalSource = mapper.originalNodes.get(source);\n const originalTarget = target ? mapper.originalNodes.get(target) : undefined;\n if (!originalSource?.canDrag || (target && !originalTarget?.canDrop)) return;\n await executeCallback(input, record, record.moveHandlerId!, {\n ...createQueryParams(input, record, ctx),\n source: originalSource,\n target: originalTarget,\n position: ctx.position ?? \"inside\",\n });\n ctx.refresh();\n }\n : undefined,\n getChildren: async (node, ctx) => {\n if (!record.childrenHandlerId) return node.children ?? [];\n const originalNode = mapper.originalNodes.get(node);\n if (!originalNode) return node.children ?? [];\n const result = await executeCallback(\n input,\n record,\n record.childrenHandlerId,\n createQueryParams(input, record, ctx, originalNode),\n ctx.signal,\n );\n return isTreeNodeArray(result) ? mapper.mapNodes(result, ctx) : [];\n },\n },\n });\n return {\n dispose() {\n treeDisposable.dispose();\n commandDisposable.dispose();\n },\n };\n};\nexport const registerWorkbenchExtensionTreeRenderers = (input: RegisterWorkbenchExtensionTreeRenderersInput) => {\n const disposables: Disposable[] = [];\n for (const record of input.metadata.treeRenderers ?? []) {\n disposables.push(registerTree(input, record));\n }\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport type { NavigationTarget as ExtensionNavigationTarget } from \"@pstdio/sdk/extensions\";\nimport { contributionRefId } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type {\n Disposable,\n NavigationTreeOwner,\n NavigationTreeSlot,\n TreeNode,\n TreeViewSection,\n WorkbenchModuleContext,\n} from \"../../core\";\nimport { navigationSlotRootSectionId } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\n\ntype NavigationItem = WorkbenchExtensionMetadata[\"navigationItems\"][number];\ntype NavigationTree = WorkbenchExtensionMetadata[\"navigationTrees\"][number];\n\nexport interface RegisterWorkbenchExtensionNavigationItemsInput {\n createWhenExpression?: (when: NavigationItem[\"when\"]) => string | undefined;\n metadata: Pick<WorkbenchExtensionMetadata, \"navigationItems\" | \"navigationTrees\">;\n workbench: WorkbenchModuleContext;\n}\n\nconst toOwner = (ref: NavigationItem[\"owner\"] | NavigationTree[\"owner\"]): NavigationTreeOwner => ({\n kind: ref.kind,\n id: contributionRefId(ref),\n extensionId: ref.extensionId,\n});\n\nconst isVisible = (\n workbench: WorkbenchModuleContext,\n item: NavigationItem,\n createWhenExpression: RegisterWorkbenchExtensionNavigationItemsInput[\"createWhenExpression\"],\n) => {\n const expression = createWhenExpression?.(item.when);\n if (!expression) return true;\n return workbench.context.matches(expression);\n};\n\nconst toNode = (item: NavigationItem): TreeNode => ({\n id: item.id,\n label: text(item.label, item.id),\n icon: item.icon,\n canHide: true,\n canReorder: true,\n target: toWorkbenchNavigationTarget(item.action as ExtensionNavigationTarget, { extensionId: item.extensionId }),\n});\n\nconst toSections = (\n workbench: WorkbenchModuleContext,\n items: NavigationItem[],\n createWhenExpression: RegisterWorkbenchExtensionNavigationItemsInput[\"createWhenExpression\"],\n) => {\n const sections = new Map<string, TreeViewSection>();\n for (const item of items) {\n if (!isVisible(workbench, item, createWhenExpression)) continue;\n const label = item.group || undefined;\n const id = label ? `${item.extensionId}:${label}` : navigationSlotRootSectionId(item.slot as NavigationTreeSlot);\n const section = sections.get(id) ?? {\n id,\n label,\n collapsible: Boolean(label),\n canHide: true,\n canReorder: true,\n nodes: [],\n };\n section.nodes.push(toNode(item));\n sections.set(id, section);\n }\n return [...sections.values()];\n};\n\nconst groupItems = (items: NavigationItem[]) => {\n const groups = new Map<string, NavigationItem[]>();\n for (const item of items) {\n const owner = toOwner(item.owner);\n const key = `${item.extensionId}:${owner.kind}:${owner.id}:${item.slot}`;\n groups.set(key, [...(groups.get(key) ?? []), item]);\n }\n return [...groups.values()];\n};\n\nconst defaultExpandedGroupIds = (items: NavigationItem[]) => [\n ...new Set(items.flatMap((item) => (item.group ? [`${item.extensionId}:${item.group}`] : []))),\n];\n\nconst registerItems = (input: RegisterWorkbenchExtensionNavigationItemsInput) =>\n groupItems(input.metadata.navigationItems).map((items) => {\n const first = items[0]!;\n const resourceDependent = items.some((item) => item.when?.resourceType?.length || item.when?.metadata);\n return input.workbench.navigationTrees.registerContribution({\n id: `${first.extensionId}.navigation-items.${first.owner.kind}.${contributionRefId(first.owner)}.${first.slot}`,\n owner: toOwner(first.owner),\n sourceExtensionId: first.extensionId,\n declarationIndex: input.metadata.navigationItems.indexOf(first),\n slot: first.slot,\n defaultExpandedSectionIds: defaultExpandedGroupIds(items),\n ...(!resourceDependent ? { resolveResource: () => undefined } : {}),\n getSections: () => toSections(input.workbench, items, input.createWhenExpression),\n listActions: () =>\n items.map((item) => ({\n label: text(item.label, item.id),\n category: item.group || undefined,\n action: toWorkbenchNavigationTarget(item.action as ExtensionNavigationTarget, {\n extensionId: item.extensionId,\n }),\n })),\n });\n });\n\nconst registerTrees = (input: RegisterWorkbenchExtensionNavigationItemsInput) =>\n input.metadata.navigationTrees.map((tree, declarationIndex) => {\n const viewId = contributionRefId(tree.view);\n return input.workbench.navigationTrees.registerContribution({\n id: tree.id,\n idScope: tree.id,\n owner: toOwner(tree.owner),\n sourceExtensionId: tree.extensionId,\n declarationIndex: input.metadata.navigationItems.length + declarationIndex,\n slot: tree.slot as NavigationTreeSlot,\n viewId,\n ...(tree.resourceScope === \"project\" ? { resolveResource: () => undefined } : {}),\n });\n });\n\nexport const registerWorkbenchExtensionNavigationItems = (input: RegisterWorkbenchExtensionNavigationItemsInput) =>\n [...registerItems(input), ...registerTrees(input)] satisfies Disposable[];\n","import { relatedResourceOpeningSchema } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { unwrapCommandValue } from \"./command-response\";\nimport type { InternalRegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\n\nexport const registerResourceKinds = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.resourceKinds.map((kind) =>\n input.workbench.resources.registerKind({\n kind: kind.id,\n extensionId: kind.extensionId,\n label: text(kind.label, kind.id),\n icon: kind.icon ?? \"FileText\",\n relatedOpenings: kind.relatedOpeningsCommand\n ? async (resource, signal) => {\n const response = await input.executeCommand(\n kind.relatedOpeningsCommand!,\n { projectId: input.projectId, resource, source: \"dashboard\" },\n signal,\n );\n signal.throwIfAborted();\n // Selection commands return data. Their navigation requests cannot steal source focus.\n const openings = relatedResourceOpeningSchema.array().parse(unwrapCommandValue(response));\n return openings.map((opening) => ({\n ...opening,\n resource: {\n ...opening.resource,\n projectId: opening.resource.projectId ?? input.projectId,\n extensionId: opening.resource.extensionId ?? kind.extensionId,\n },\n }));\n }\n : undefined,\n }),\n );\n","import type { NavigationTarget as ExtensionNavigationTarget } from \"@pstdio/sdk/extensions\";\nimport { commandRefId } from \"@pstdio/sdk/extensions\";\nimport type { ExtensionKeybindingRecord } from \"pstdio-api-contracts\";\nimport type { WorkbenchModuleContext } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"./extension-navigation-target\";\n\ntype KeybindingPlatform = keyof NonNullable<ExtensionKeybindingRecord[\"platformOverrides\"]>;\n\nconst currentPlatform = (): KeybindingPlatform | undefined => {\n if (typeof navigator === \"undefined\") return undefined;\n const platform = `${navigator.platform} ${navigator.userAgent}`.toLowerCase();\n if (platform.includes(\"mac\")) return \"mac\";\n if (platform.includes(\"win\")) return \"win\";\n if (platform.includes(\"linux\")) return \"linux\";\n return undefined;\n};\n\nexport const resolveExtensionKeybindingChord = (binding: ExtensionKeybindingRecord, platform = currentPlatform()) =>\n (platform ? binding.platformOverrides?.[platform] : undefined) ?? binding.key;\n\nexport const registerWorkbenchExtensionKeybindings = (input: {\n bindings: ExtensionKeybindingRecord[];\n createWhenExpression?: (when: ExtensionKeybindingRecord[\"when\"]) => string | undefined;\n workbench: WorkbenchModuleContext;\n}) =>\n input.bindings.map((binding) =>\n input.workbench.keybindings.registerKeybinding({\n sourceExtensionId: binding.extensionId,\n action: toWorkbenchNavigationTarget(binding.action as ExtensionNavigationTarget, {\n commandIdOf: (command) =>\n command.extensionId ? commandRefId({ extensionId: command.extensionId, id: command.id }) : undefined,\n }),\n keybinding: resolveExtensionKeybindingChord(binding),\n when: input.createWhenExpression?.(binding.when),\n }),\n );\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { type ContributionKind, contributionRefId } from \"@pstdio/sdk/extensions\";\n\nexport type MetadataRef = { extensionId: string; kind: ContributionKind; id: string };\n\nexport const toWorkbenchWhenExpression = (\n when:\n | WorkbenchExtensionMetadata[\"navigationItems\"][number][\"when\"]\n | WorkbenchExtensionMetadata[\"statusBarItems\"][number][\"when\"],\n) => {\n if (!when) return undefined;\n const ids = (value: MetadataRef | MetadataRef[] | undefined) => {\n if (!value) return undefined;\n return Array.isArray(value) ? value.map((ref) => contributionRefId(ref)) : contributionRefId(value);\n };\n return {\n mode: ids(when.mode as MetadataRef | MetadataRef[] | undefined),\n source: when.source,\n viewId: ids(when.view as MetadataRef | MetadataRef[] | undefined),\n resourceType: when.resourceType?.map((ref) => ref.id),\n metadata: when.metadata,\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { contributionRefId } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchPageMain, WorkbenchPageSlot } from \"../../core\";\nimport type { InternalWorkbenchExtensionMetadata } from \"./internal-workbench-extension-metadata\";\n\nimport type { WorkbenchExtensionTabMetadata } from \"./workbench-extension-tab-presentation\";\n\ntype MetadataPage = WorkbenchExtensionMetadata[\"pages\"][number];\ninterface PagePresentationInput {\n extensionId: string;\n placementId: string;\n createTab?(metadata: WorkbenchExtensionTabMetadata): WorkbenchPageSlot[\"tab\"];\n}\nconst pageSlot = (slot: MetadataPage[\"slots\"][number], input: PagePresentationInput): WorkbenchPageSlot => ({\n ...slot,\n tab:\n slot.tab && input.createTab\n ? input.createTab({ ...slot.tab, extensionId: input.extensionId, placementId: input.placementId })\n : undefined,\n});\nconst pageMain = (main: MetadataPage[\"main\"], input: PagePresentationInput): WorkbenchPageMain => {\n if (main.kind === \"panels\") return main;\n return {\n ...main,\n tab:\n main.tab && input.createTab\n ? input.createTab({ ...main.tab, extensionId: input.extensionId, placementId: input.placementId })\n : undefined,\n };\n};\nexport const toInternalWorkbenchPages = (\n metadata: WorkbenchExtensionMetadata,\n createTab?: PagePresentationInput[\"createTab\"],\n): InternalWorkbenchExtensionMetadata[\"pages\"] =>\n metadata.pages.map((page) => ({\n id: page.id,\n ref: { extensionId: page.extensionId, kind: \"page\", id: page.localId },\n title: page.title,\n path: page.path,\n document: page.document,\n params: page.params,\n modeId: contributionRefId(page.mode),\n resource: page.resource,\n main: pageMain(page.main, { extensionId: page.extensionId, placementId: `${page.id}.$main`, createTab }),\n slots: page.slots.map((slot) =>\n pageSlot(slot, { extensionId: page.extensionId, placementId: `${page.id}.${slot.id}`, createTab }),\n ),\n ...(page.icon ? { icon: page.icon } : {}),\n ...(page.parent ? { parentId: contributionRefId(page.parent) } : {}),\n }));\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { commandRefId, contributionRefId } from \"@pstdio/sdk/extensions\";\nimport type { ParamObjectSchema } from \"pstdio-api-contracts\";\nimport type { InternalWorkbenchExtensionMetadata } from \"./internal-workbench-extension-metadata\";\nimport { toWorkbenchWhenExpression } from \"./workbench-extension-metadata-ref\";\nimport { toInternalWorkbenchPages } from \"./workbench-extension-page-metadata\";\nimport type { WorkbenchExtensionTabMetadata } from \"./workbench-extension-tab-presentation\";\n\ntype MetadataView = WorkbenchExtensionMetadata[\"views\"][number];\nconst resourceKindForView = (metadata: WorkbenchExtensionMetadata, viewId: string) => {\n const bindings = metadata.pages.flatMap((page) => [\n ...(page.main.kind === \"view\" && page.resource ? [{ ...page.resource, view: page.main.view }] : []),\n ...page.slots.flatMap((slot) => (slot.item.kind === \"binding\" ? [slot.item.binding] : [])),\n ]);\n bindings.push(\n ...metadata.placements.flatMap((placement) => (placement.item.kind === \"binding\" ? [placement.item.binding] : [])),\n );\n return bindings.find((binding) => contributionRefId(binding.view) === viewId)?.kinds[0]?.id;\n};\nconst viewBody = (view: MetadataView) =>\n view.body.kind === \"webview\" ? { webview: view.body.webview } : { renderer: { kind: view.body.kind, id: view.id } };\nconst panelMenus = (metadata: WorkbenchExtensionMetadata, owner: MetadataView) =>\n metadata.viewMenus.flatMap((menu) => {\n if (contributionRefId(menu.owner) !== owner.id) return [];\n const view = metadata.views.find((candidate) => candidate.id === contributionRefId(menu.view));\n if (!view) return [];\n return [\n {\n id: menu.id,\n extensionId: menu.extensionId,\n ownerPanelId: owner.id,\n viewId: view.id,\n title: view.title,\n side: menu.side,\n group: menu.group,\n placement: menu.placement,\n hostTreeHeader: menu.hostTreeHeader,\n hostTreeFooter: menu.hostTreeFooter,\n ...viewBody(view),\n },\n ];\n });\nconst panels = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"panels\"] =>\n metadata.views.map((view) => {\n const menus = panelMenus(metadata, view);\n return {\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n panelMenus: menus.length > 0 ? menus : undefined,\n ...viewBody(view),\n };\n });\nconst commandActions = <\n T extends {\n command: {\n extensionId: string;\n id: string;\n };\n },\n>(\n actions: T[] | undefined,\n) => actions?.map(({ command, ...action }) => ({ ...action, commandId: commandRefId(command) }));\nconst kanbanRenderers = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"kanbanRenderers\"] =>\n metadata.views.flatMap((view) => {\n const body = view.body;\n if (body.kind !== \"kanban\") return [];\n return [\n {\n ...body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: body.resourceKind ?? resourceKindForView(metadata, view.id),\n createRow: body.createRow\n ? {\n title: body.createRow.title,\n submitLabel: body.createRow.submitLabel,\n columnParam: body.createRow.columnParam,\n params: body.createRow.params as ParamObjectSchema | undefined,\n attributesParam: body.createRow.attributesParam,\n labels: body.createRow.labels,\n commandId: commandRefId(body.createRow.command),\n attachments: body.createRow.attachments\n ? {\n resourceParam: body.createRow.attachments.resourceParam,\n fileParam: body.createRow.attachments.fileParam,\n commandId: commandRefId(body.createRow.attachments.command),\n }\n : undefined,\n }\n : undefined,\n rowActions: commandActions(body.rowActions),\n toolbarActions: commandActions(body.toolbarActions),\n },\n ];\n });\nconst dataTableRenderers = (\n metadata: WorkbenchExtensionMetadata,\n): InternalWorkbenchExtensionMetadata[\"dataTableRenderers\"] =>\n metadata.views.flatMap((view) => {\n const body = view.body;\n if (body.kind !== \"dataTable\") return [];\n return [\n {\n ...body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: body.resourceKind ?? resourceKindForView(metadata, view.id),\n selectionActions: commandActions(body.selectionActions),\n rowActions: commandActions(body.rowActions),\n toolbarActions: commandActions(body.toolbarActions),\n },\n ];\n });\nconst treeRenderers = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"treeRenderers\"] =>\n metadata.views.flatMap((view) =>\n view.body.kind === \"tree\"\n ? [\n {\n ...view.body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: view.body.resourceKind ?? resourceKindForView(metadata, view.id),\n },\n ]\n : [],\n );\nconst fileRenderers = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"fileRenderers\"] =>\n metadata.views.flatMap((view) =>\n view.body.kind === \"file\"\n ? [\n {\n ...view.body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: view.body.resourceKind ?? resourceKindForView(metadata, view.id),\n },\n ]\n : [],\n );\nconst controlsRenderers = (\n metadata: WorkbenchExtensionMetadata,\n): InternalWorkbenchExtensionMetadata[\"controlsRenderers\"] =>\n metadata.views.flatMap((view) =>\n view.body.kind === \"controls\"\n ? [\n {\n ...view.body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: view.body.resourceKind ?? resourceKindForView(metadata, view.id),\n },\n ]\n : [],\n );\nconst modes = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"modes\"] =>\n metadata.modes.map((mode) => ({\n id: mode.id,\n extensionId: mode.extensionId,\n modeId: mode.id,\n label: mode.label,\n icon: mode.icon,\n panelRegions: mode.regions,\n regionSettings: mode.regionSettings,\n floatingPanels: mode.floatingPanels,\n ...(mode.defaultTheme ? { defaultTheme: contributionRefId(mode.defaultTheme) } : {}),\n ...(mode.chrome\n ? {\n chrome: Object.fromEntries(\n Object.entries(mode.chrome).map(([region, view]) => [\n region,\n view === false ? false : contributionRefId(view),\n ]),\n ),\n }\n : {}),\n }));\nexport const toInternalWorkbenchExtensionMetadata = (\n metadata: WorkbenchExtensionMetadata,\n input: {\n createTab?(\n metadata: WorkbenchExtensionTabMetadata,\n ): InternalWorkbenchExtensionMetadata[\"placements\"][number][\"tab\"];\n } = {},\n): InternalWorkbenchExtensionMetadata => {\n const adaptedPanels = panels(metadata);\n return {\n extensions: metadata.extensions,\n commands: metadata.commands,\n menuContributions: metadata.menuContributions,\n commandPaletteContributions: metadata.commandPaletteContributions,\n modes: modes(metadata),\n pages: toInternalWorkbenchPages(metadata, input.createTab),\n placements: metadata.placements.map((placement) => ({\n id: placement.id,\n ref: { extensionId: placement.extensionId, kind: \"placement\", id: placement.localId },\n modeId: contributionRefId(placement.mode),\n item: placement.item,\n region: placement.region,\n order: placement.order,\n movableTo: placement.movableTo,\n mountStrategy: placement.mountStrategy,\n hiddenByDefault: placement.hiddenByDefault,\n headerBorderBottom: placement.headerBorderBottom,\n tab:\n placement.tab && input.createTab\n ? input.createTab({\n ...placement.tab,\n extensionId: placement.extensionId,\n placementId: placement.id,\n })\n : undefined,\n })),\n panels: adaptedPanels,\n resourceKinds: metadata.resourceKinds.map((kind) => ({\n id: kind.id,\n relatedOpeningsCommand: kind.relatedOpeningsCommand,\n extensionId: kind.extensionId,\n label: kind.label,\n icon: kind.icon,\n menuSlots: Object.fromEntries(\n (kind.menuSlots ?? []).map((slot) => [\n slot.id,\n {\n placement: slot.placement,\n label: slot.label,\n external: slot.access === \"public\",\n order: slot.order,\n },\n ]),\n ),\n })),\n resourceHierarchyProviders: (metadata.resourceHierarchyProviders ?? []).map((record) => ({\n id: record.id,\n extensionId: record.extensionId,\n resourceKind: record.resourceKind.id,\n })),\n settingsSections: metadata.settingsSections ?? [],\n settingsPanels: metadata.settingsPanels.flatMap((panel) => {\n const view = metadata.views.find((candidate) => candidate.id === contributionRefId(panel.view));\n if (!view) return [];\n return [\n {\n id: panel.id,\n viewId: view.id,\n extensionId: panel.extensionId,\n slotId: panel.slot.id,\n scope: panel.slot.id.includes(\"global\") ? (\"global\" as const) : (\"project\" as const),\n title: view.title,\n icon: view.icon,\n section: panel.section ? contributionRefId(panel.section) : undefined,\n },\n ];\n }),\n kanbanRenderers: kanbanRenderers(metadata),\n dataTableRenderers: dataTableRenderers(metadata),\n commandPaletteResources: metadata.commandPaletteResources ?? [],\n treeRenderers: treeRenderers(metadata),\n fileRenderers: fileRenderers(metadata),\n controlsRenderers: controlsRenderers(metadata),\n keybindings: metadata.keybindings ?? [],\n settingsDefinitions: metadata.settingsDefinitions ?? [],\n statusBarItems: metadata.statusBarItems.map((item) => ({\n id: item.id,\n extensionId: item.extensionId,\n viewId: contributionRefId(item.view),\n slot: item.slot.id.endsWith(\"leading\") ? \"leading\" : \"trailing\",\n order: item.order,\n when: toWorkbenchWhenExpression(item.when),\n })),\n diagnostics: metadata.diagnostics,\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport type { Disposable, FileRendererRefreshEnvelope, WorkbenchModuleContext } from \"../../core\";\n\nexport type WorkbenchExtensionRendererKind = \"tree\" | \"file\" | \"controls\" | \"dataTable\" | \"kanban\";\n\ninterface RendererRefreshTarget {\n id: string;\n kind: WorkbenchExtensionRendererKind;\n}\n\nexport interface WorkbenchExtensionRefreshEvent extends FileRendererRefreshEnvelope {\n id: string;\n}\n\nexport interface RegisterWorkbenchExtensionRendererRefreshEventsInput {\n metadata: WorkbenchExtensionMetadata;\n subscribe: (listener: (event: WorkbenchExtensionRefreshEvent) => void) => Disposable;\n workbench: WorkbenchModuleContext;\n}\n\nexport const refreshWorkbenchExtensionRenderer = (\n workbench: WorkbenchModuleContext,\n target: RendererRefreshTarget,\n envelope: FileRendererRefreshEnvelope = {},\n) => {\n workbench.views.refreshView(target.id, target.kind === \"file\" ? envelope : undefined);\n};\n\nconst rendererRefreshTargets = (metadata: WorkbenchExtensionMetadata) => {\n const targets = new Map<string, RendererRefreshTarget[]>();\n const add = (kind: WorkbenchExtensionRendererKind, renderer: { id: string; refreshEventIds?: string[] }) => {\n for (const eventId of new Set(renderer.refreshEventIds ?? [])) {\n const eventTargets = targets.get(eventId) ?? [];\n if (!eventTargets.some((target) => target.kind === kind && target.id === renderer.id)) {\n eventTargets.push({ id: renderer.id, kind });\n }\n targets.set(eventId, eventTargets);\n }\n };\n\n for (const view of metadata.views) {\n if (view.body.kind === \"webview\") continue;\n add(view.body.kind, { id: view.id, refreshEventIds: view.body.refreshEventIds });\n }\n return targets;\n};\n\nexport const registerWorkbenchExtensionRendererRefreshEvents = (\n input: RegisterWorkbenchExtensionRendererRefreshEventsInput,\n) => {\n const targets = rendererRefreshTargets(input.metadata);\n return input.subscribe((event) => {\n const { id, ...envelope } = event;\n for (const target of targets.get(id) ?? []) refreshWorkbenchExtensionRenderer(input.workbench, target, envelope);\n });\n};\n\nexport const refreshOpenWorkbenchExtensionWebviews = (\n workbench: WorkbenchModuleContext,\n metadata: WorkbenchExtensionMetadata,\n) => {\n for (const view of metadata.views) {\n if (view.body.kind !== \"webview\") continue;\n if (workbench.views.getView(view.id)) workbench.views.refreshView(view.id);\n }\n};\n","import type { CommandExecuteRequest } from \"@pstdio/sdk/api\";\nimport type { WebviewArtifactsReadParams, WebviewHostCapabilityResults } from \"pstdio-api-contracts/extension-kernel\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommandResponse } from \"../host/workbench-extension-command\";\nimport type { CreateBridgeWebviewHostAdapters } from \"./bridge-webview-renderer\";\nimport type { ExtensionWebviewFilesAdapter } from \"./extension-webview-host-adapters\";\nimport { createWorkbenchWebviewHostAdapters } from \"./webview-host-capabilities\";\n\ntype ExtensionWebviewSlotKind = NonNullable<CommandExecuteRequest[\"slot\"]>[\"kind\"];\nexport type ExtensionWebviewFileCapabilities = ExtensionWebviewFilesAdapter;\nexport interface ExtensionWebviewArtifactCapabilities {\n read(\n params: WebviewArtifactsReadParams,\n context: { webviewId: string },\n ): Promise<WebviewHostCapabilityResults[\"artifacts.read\"]> | WebviewHostCapabilityResults[\"artifacts.read\"];\n}\ninterface CreateWorkbenchExtensionWebviewAdaptersInput {\n artifacts?: ExtensionWebviewArtifactCapabilities;\n executeCommand(commandId: string, body: CommandExecuteRequest, signal?: AbortSignal): Promise<unknown> | unknown;\n extensionIdForWebview(webviewId: string): string | undefined;\n files?: ExtensionWebviewFileCapabilities;\n projectId: string;\n slotKind: ExtensionWebviewSlotKind;\n}\n\nexport const createWorkbenchExtensionWebviewAdapters =\n (input: CreateWorkbenchExtensionWebviewAdaptersInput): CreateBridgeWebviewHostAdapters =>\n (context) => {\n const extensionId = context.extensionId ?? input.extensionIdForWebview(context.webviewId);\n return {\n ...createWorkbenchWebviewHostAdapters({ ...context, extensionId, projectId: input.projectId }),\n executeCommand: (request, signal) => {\n const resource = request.resource ?? context.placement.resource;\n return executeWorkbenchExtensionCommandResponse({ ...input, workbench: context.workbench }, request.commandId, {\n params: request.params,\n workspaceId: request.workspaceId,\n metadata: request.metadata,\n resource,\n signal,\n slot: createExtensionSlot({\n id: context.webviewId,\n kind: input.slotKind,\n projectId: input.projectId,\n context: { panelId: context.webviewId },\n }),\n });\n },\n files: input.files,\n artifacts: input.artifacts\n ? { read: (params) => input.artifacts!.read(params, { webviewId: context.webviewId }) }\n : undefined,\n };\n };\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { BridgeWebviewConfig } from \"./bridge-webview-renderer\";\n\ntype WorkbenchWebview = Extract<WorkbenchExtensionMetadata[\"views\"][number][\"body\"], { kind: \"webview\" }>[\"webview\"];\n\nexport const toBridgeWebviewConfig = (webview: WorkbenchWebview): BridgeWebviewConfig => {\n const title = text(webview.title);\n return {\n title: title || undefined,\n runtimeUrl: webview.runtimeUrl,\n moduleUrl: webview.moduleUrl,\n styles: webview.styles,\n capabilities: webview.capabilities,\n };\n};\n","import type { CommandExecuteRequest } from \"@pstdio/sdk/api\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, PreferencePropertySchema, PreferenceScope, PreferenceValue } from \"../../core\";\nimport {\n type CreateBridgeWebviewHostAdapters,\n getBridgeWebviewHostEventPublisher,\n renderBridgeWebviewFrame,\n} from \"../bridge/bridge-webview-renderer\";\nimport { createWorkbenchExtensionWebviewAdapters } from \"../bridge/webview-command-capabilities\";\nimport { toBridgeWebviewConfig } from \"../bridge/webview-contribution-config\";\nimport type { InternalRegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\n\nconst settingsSectionIdDefault = \"extensions\";\nconst extensionSettingsOrderBase = 1_000;\n\nconst asPreferenceValue = (value: unknown): PreferenceValue | undefined =>\n value === undefined ? undefined : (value as PreferenceValue);\n\nconst preferenceScope = (scope: \"global\" | \"project\"): PreferenceScope => (scope === \"global\" ? \"user\" : \"project\");\n\nconst createExtensionHostAdapters = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n slotKind: NonNullable<CommandExecuteRequest[\"slot\"]>[\"kind\"],\n): CreateBridgeWebviewHostAdapters => {\n const createBase = createWorkbenchExtensionWebviewAdapters({\n artifacts: input.webviewArtifacts,\n executeCommand: input.executeCommand,\n extensionIdForWebview: (webviewId) => input.metadata.panels.find((panel) => panel.id === webviewId)?.extensionId,\n files: input.webviewFiles,\n projectId: input.projectId,\n slotKind,\n });\n return (context) => ({ ...createBase(context), ...input.createWebviewHostAdapters?.(context) });\n};\n\nexport const registerWebviewPanels = (input: InternalRegisterWorkbenchExtensionContributionsInput) => {\n return input.metadata.panels.flatMap((panel) => {\n if (!panel.webview) return [];\n const webview = toBridgeWebviewConfig(panel.webview);\n return [\n input.workbench.views.registerView({\n id: panel.id,\n title: text(panel.title, panel.id),\n icon: panel.icon,\n body: {\n kind: \"react\",\n render: (renderInput) => {\n const slotKind = input.metadata.settingsPanels.some(\n (settingsPanel) => settingsPanel.id === renderInput.instance.panelId && settingsPanel.viewId === panel.id,\n )\n ? \"settings\"\n : \"panel\";\n return (\n input.renderWebview?.(renderInput) ??\n renderBridgeWebviewFrame({\n sizing: renderInput.panel.region === \"status\" ? \"content-width\" : undefined,\n context: {\n workbench: renderInput.workbench,\n webviewId: panel.id,\n placement: renderInput.instance,\n hostEvents: getBridgeWebviewHostEventPublisher(renderInput.workbench, renderInput.instance),\n },\n createHostAdapters: createExtensionHostAdapters(input, slotKind),\n createProps:\n input.createWebviewProps ?? (({ placement }) => ({ placement, resource: placement.resource })),\n createTheme: input.createWebviewTheme,\n ownerId: panel.extensionId,\n title: text(panel.title, panel.id),\n webview,\n })\n );\n },\n },\n }),\n ];\n });\n};\n\nconst viewMenuPlacementPriority = { first: 1_000_000, default: 0, last: -1_000_000 } as const;\n\nexport const registerViewMenus = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.panels\n .flatMap((panel) => panel.panelMenus ?? [])\n .map((menu, index) =>\n input.workbench.viewMenus.registerViewMenu({\n id: menu.id,\n ownerViewId: menu.ownerPanelId,\n viewId: menu.viewId,\n side: menu.side,\n priority: viewMenuPlacementPriority[menu.placement ?? \"default\"] - index,\n }),\n );\n\nexport const registerSettings = (input: InternalRegisterWorkbenchExtensionContributionsInput) => {\n const disposables: Disposable[] = [];\n const sectionId = input.settingsSectionId ?? settingsSectionIdDefault;\n\n if (!input.workbench.settings.getSection(sectionId)) {\n disposables.push(\n input.workbench.settings.registerSection({ id: sectionId, title: input.settingsSectionTitle ?? \"Extensions\" }),\n );\n }\n\n const sections = [...input.metadata.settingsSections].sort(\n (left, right) =>\n (left.order ?? 0) - (right.order ?? 0) ||\n left.extensionId.localeCompare(right.extensionId) ||\n left.id.localeCompare(right.id),\n );\n for (const section of sections) {\n disposables.push(\n input.workbench.settings.registerSection({\n id: section.id,\n title: text(section.title, section.id),\n order: section.order,\n scope: section.scope,\n }),\n );\n }\n\n // Keep the existing last-definition-wins rule for shared legacy names.\n const definitions = new Map(input.metadata.settingsDefinitions.map((setting) => [setting.key, setting]));\n const propertiesByOwner = new Map<string, Record<string, PreferencePropertySchema>>();\n for (const setting of definitions.values()) {\n const properties = propertiesByOwner.get(setting.extensionId) ?? Object.create(null);\n properties[setting.key] = {\n type: setting.type,\n scope: preferenceScope(setting.scope),\n default: asPreferenceValue(setting.default),\n enum: setting.enum as PreferenceValue[] | undefined,\n description: text(setting.description),\n } satisfies PreferencePropertySchema;\n propertiesByOwner.set(setting.extensionId, properties);\n }\n for (const [ownerId, properties] of propertiesByOwner) {\n disposables.push(input.workbench.preferences.registerSchema({ properties }, { ownerId }));\n }\n\n const panels = [...input.metadata.settingsPanels].sort(\n (left, right) => left.extensionId.localeCompare(right.extensionId) || left.id.localeCompare(right.id),\n );\n for (const [index, panel] of panels.entries()) {\n if (panel.slotId === \"extension.settings\") continue;\n disposables.push(\n input.workbench.settings.registerPanel({\n id: panel.id,\n title: text(panel.title, panel.id),\n icon: panel.icon,\n kind: \"view\",\n order: extensionSettingsOrderBase + index,\n section: panel.section ?? sectionId,\n scope: panel.scope,\n viewId: panel.viewId,\n }),\n );\n }\n\n return disposables;\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { isNavigationTarget, resourceKey } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, WorkbenchPanelTab, WorkbenchTabSnapshot } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"./extension-navigation-target\";\nimport { executeWorkbenchExtensionCommand } from \"./workbench-extension-command\";\nimport type { RegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\nimport type { WorkbenchExtensionRefreshEvent } from \"./workbench-extension-refresh\";\n\ntype MetadataPlacement = WorkbenchExtensionMetadata[\"placements\"][number];\ntype MetadataPageSlot = WorkbenchExtensionMetadata[\"pages\"][number][\"slots\"][number];\nexport type WorkbenchExtensionTabMetadata = NonNullable<MetadataPlacement[\"tab\"] | MetadataPageSlot[\"tab\"]> & {\n extensionId: string;\n placementId: string;\n};\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value && typeof value === \"object\" && !Array.isArray(value));\nconst navigationAction = (value: unknown, extensionId: string, projectId: string) =>\n isNavigationTarget(value) ? toWorkbenchNavigationTarget(value, { extensionId, projectId }) : undefined;\nconst toRows = (value: unknown, extensionId: string, projectId: string) =>\n Array.isArray(value)\n ? value.flatMap((row) => {\n if (!isRecord(row) || typeof row.id !== \"string\") return [];\n const target = navigationAction(row.action, extensionId, projectId);\n return [\n {\n id: row.id,\n label: text(row.label as Parameters<typeof text>[0], row.id),\n icon: typeof row.icon === \"string\" ? row.icon : undefined,\n iconColor: typeof row.iconColor === \"string\" ? row.iconColor : undefined,\n selected: row.selected === true,\n disabled: row.disabled === true,\n action: target ? { kind: \"navigation\" as const, target } : undefined,\n },\n ];\n })\n : [];\nconst toSnapshot = (value: unknown, extensionId: string, projectId: string): WorkbenchTabSnapshot => {\n if (!isRecord(value)) return {};\n const indicator = isRecord(value.indicator)\n ? {\n icon: String(value.indicator.icon ?? \"\"),\n color: typeof value.indicator.color === \"string\" ? value.indicator.color : undefined,\n label: text(value.indicator.label as Parameters<typeof text>[0]),\n }\n : undefined;\n const menu = Array.isArray(value.menu)\n ? value.menu.flatMap((candidate) => {\n if (!isRecord(candidate) || typeof candidate.id !== \"string\" || !Array.isArray(candidate.rows)) return [];\n return [\n {\n id: candidate.id,\n label: text(candidate.label as Parameters<typeof text>[0]),\n rows: toRows(candidate.rows, extensionId, projectId),\n },\n ];\n })\n : undefined;\n return {\n label: text(value.label as Parameters<typeof text>[0]),\n icon: typeof value.icon === \"string\" ? value.icon : undefined,\n indicator: indicator?.icon ? indicator : undefined,\n menu,\n };\n};\nexport const createWorkbenchExtensionTabPresentation = (\n input: RegisterWorkbenchExtensionContributionsInput,\n metadata: WorkbenchExtensionTabMetadata,\n): WorkbenchPanelTab => {\n const snapshots = new Map<string, WorkbenchTabSnapshot>();\n const instances = new Map<string, Parameters<WorkbenchPanelTab[\"getSnapshot\"]>[0]>();\n const loading = new Map<string, Promise<void>>();\n const listeners = new Set<() => void>();\n const refreshEvents = new Set(metadata.refreshEventIds ?? []);\n let revision = 0;\n const load = (instance: Parameters<WorkbenchPanelTab[\"getSnapshot\"]>[0]): Promise<void> => {\n instances.set(instance.instanceId, instance);\n const pending = loading.get(instance.instanceId);\n if (pending) return pending;\n const resource = instance.resource;\n const currentRevision = revision;\n const pendingLoad = Promise.resolve(\n executeWorkbenchExtensionCommand(input, metadata.queryHandlerId, {\n resource,\n params: {\n renderer: {\n rendererId: metadata.placementId,\n projectId: input.projectId,\n ...(resource ? { resource } : {}),\n invocation: { placement: \"visible\" },\n },\n },\n }),\n )\n .then(async (value) => {\n if (currentRevision !== revision) {\n loading.delete(instance.instanceId);\n await load(instance);\n return;\n }\n snapshots.set(instance.instanceId, toSnapshot(value, metadata.extensionId, input.projectId));\n for (const listener of listeners) listener();\n })\n .finally(() => {\n if (loading.get(instance.instanceId) === pendingLoad) loading.delete(instance.instanceId);\n });\n loading.set(instance.instanceId, pendingLoad);\n return pendingLoad;\n };\n return {\n refreshEvents: metadata.refreshEventIds,\n getSnapshot(instance) {\n if (!snapshots.has(instance.instanceId)) void load(instance).catch(() => undefined);\n return snapshots.get(instance.instanceId) ?? {};\n },\n subscribe(listener) {\n listeners.add(listener);\n const resourceSubscription = input.workbench.resources.preview.subscribeRefresh(async (resource) => {\n const affected = [...instances.values()].filter(\n (instance) => instance.resource && resourceKey(instance.resource) === resourceKey(resource),\n );\n if (!affected.length) return;\n revision++;\n await Promise.all(affected.map(load));\n });\n const refreshSubscription = input.subscribeRefreshEvents?.((event: WorkbenchExtensionRefreshEvent) => {\n if (!refreshEvents.has(event.id)) return;\n revision++;\n for (const instance of instances.values()) void load(instance).catch(() => undefined);\n });\n const disposable: Disposable = {\n dispose() {\n listeners.delete(listener);\n refreshSubscription?.dispose();\n resourceSubscription.dispose();\n },\n };\n return disposable;\n },\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { matchesResourceWhen } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, WorkbenchCommandExecutionContext } from \"../../core\";\nimport { workbenchCommandPaletteMenuPath } from \"../../core\";\nimport { registerWorkbenchExtensionCommandPaletteResources } from \"../contributions/command-palette-resource-contributions\";\nimport { registerWorkbenchExtensionControlsRenderers } from \"../contributions/controls-renderer-contributions\";\nimport { registerWorkbenchExtensionDataTableRenderers } from \"../contributions/data-table-renderer-contributions\";\nimport {\n buildWorkbenchExtensionCommandPaletteRegistrations,\n buildWorkbenchExtensionMenuRegistrations,\n} from \"../contributions/extension-contributions\";\nimport { registerWorkbenchExtensionFileRenderers } from \"../contributions/file-renderer-contributions\";\nimport { registerWorkbenchExtensionKanbanRenderers } from \"../contributions/kanban-renderer-contributions\";\nimport { registerWorkbenchExtensionNavigationItems } from \"../contributions/navigation-item-contributions\";\nimport { localizeParamSchema } from \"../contributions/param-schema-localization\";\nimport { registerWorkbenchExtensionTreeRenderers } from \"../contributions/tree-renderer-contributions\";\nimport { registerResourceKinds } from \"./resource-kind-contributions\";\nimport {\n createExtensionSlot,\n executeWorkbenchExtensionCommand,\n type WorkbenchExtensionCommandContext,\n} from \"./workbench-extension-command\";\nimport type {\n InternalRegisterWorkbenchExtensionContributionsInput,\n RegisterWorkbenchExtensionContributionsInput,\n} from \"./workbench-extension-host-types\";\nimport { registerWorkbenchExtensionKeybindings } from \"./workbench-extension-keybindings\";\n\nexport type { RegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\n\nimport { toInternalWorkbenchExtensionMetadata } from \"./workbench-extension-metadata-adapter\";\nimport { registerWorkbenchExtensionRendererRefreshEvents } from \"./workbench-extension-refresh\";\nimport { registerSettings, registerViewMenus, registerWebviewPanels } from \"./workbench-extension-surfaces\";\nimport { createWorkbenchExtensionTabPresentation } from \"./workbench-extension-tab-presentation\";\n\nconst disposeAll = (disposables: Disposable[]) => {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n};\nconst asParams = (value: unknown): Record<string, unknown> | undefined =>\n value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\nconst prepareCommandArgs = (\n context: WorkbenchExtensionCommandContext,\n commandId: string,\n args: unknown,\n executionContext?: WorkbenchCommandExecutionContext,\n onArgsChange?: (args: unknown) => void,\n) => context.prepareCommandArgs?.(commandId, args, executionContext, onArgsChange) ?? args;\nconst registerCommands = (\n context: WorkbenchExtensionCommandContext,\n metadata: Pick<WorkbenchExtensionMetadata, \"commands\">,\n) =>\n metadata.commands.map((command) =>\n context.workbench.commands.registerCommand(\n {\n id: command.id,\n label: text(command.title, command.id),\n description: text(command.description),\n params: localizeParamSchema(command.params, text, command.extensionId),\n resourceMutation: command.resourceMutation,\n },\n {\n prepareArgs: (args, executionContext, onArgsChange) =>\n prepareCommandArgs(context, command.id, args, executionContext, onArgsChange),\n execute: (args, executionContext) =>\n executeWorkbenchExtensionCommand(context, command.id, {\n params: asParams(args),\n resource: executionContext?.resource,\n signal: executionContext?.signal,\n region: executionContext?.region,\n }),\n },\n ),\n );\nconst menuCommandResource = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n executionContext: WorkbenchCommandExecutionContext | undefined,\n) => executionContext?.resource ?? input.workbench.getPrimaryResource();\nconst registerMenus = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n context: WorkbenchExtensionCommandContext,\n) => {\n if (!input.menuSlotsById) return [] as Disposable[];\n const { registrations } = buildWorkbenchExtensionMenuRegistrations({\n metadata: input.metadata,\n menuSlotsById: input.menuSlotsById,\n menuTargetsById: input.menuTargetsById,\n createWhenExpression: input.createMenuWhenExpression,\n });\n const defaultRegistrations = registrations.map(({ menuItem, menuPath, ...registration }) => ({\n ...registration,\n menuItems: [{ menuItem, menuPath }],\n }));\n const resolvedRegistrations = input.menuRegistrations ?? defaultRegistrations;\n return resolvedRegistrations.flatMap((registration) => [\n input.workbench.commands.registerCommand(registration.command, {\n prepareArgs: (args, executionContext, onArgsChange) =>\n prepareCommandArgs(context, registration.targetCommandId, args, executionContext, onArgsChange),\n execute: (args, executionContext) =>\n executeWorkbenchExtensionCommand(context, registration.targetCommandId, {\n params: { ...(registration.contribution.params ?? {}), ...(asParams(args) ?? {}) },\n resource: menuCommandResource(input, executionContext),\n slot: createExtensionSlot({\n id: registration.contribution.slotId,\n kind: \"menu\",\n projectId: input.projectId,\n context: { panelId: registration.contribution.id },\n }),\n }),\n }),\n ...registration.menuItems.map(({ menuPath, menuItem }) =>\n input.workbench.layout.registerMenuItem(menuPath, menuItem),\n ),\n ]);\n};\nconst registerCommandPaletteContributions = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n context: WorkbenchExtensionCommandContext,\n) => {\n const registrations = buildWorkbenchExtensionCommandPaletteRegistrations({ metadata: input.metadata });\n return registrations.flatMap((registration) => [\n input.workbench.commands.registerCommand(registration.command, {\n prepareArgs: (args, executionContext, onArgsChange) =>\n prepareCommandArgs(context, registration.targetCommandId, args, executionContext, onArgsChange),\n execute: (args, executionContext) =>\n executeWorkbenchExtensionCommand(context, registration.targetCommandId, {\n params: { ...(registration.contribution.params ?? {}), ...(asParams(args) ?? {}) },\n resource: menuCommandResource(input, executionContext),\n slot: createExtensionSlot({\n id: \"workbench.commandPalette\",\n kind: \"menu\",\n projectId: input.projectId,\n context: { panelId: registration.contribution.id },\n }),\n }),\n isVisible: () => matchesResourceWhen(registration.contribution.when, input.workbench.getPrimaryResource()?.type),\n }),\n input.workbench.layout.registerMenuItem(workbenchCommandPaletteMenuPath, registration.menuItem),\n ]);\n};\nconst matchesActiveMode = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n when:\n | {\n mode?: string | string[];\n }\n | undefined,\n) => {\n const modes = when?.mode;\n if (!modes) return true;\n const active = input.workbench.modes.getActiveModeId() ?? \"\";\n return Array.isArray(modes) ? modes.includes(active) : modes === active;\n};\nconst registerStatusBarItems = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n (input.metadata.statusBarItems ?? []).map((item) =>\n input.workbench.statusBar.registerItem({\n id: item.id,\n viewId: item.viewId,\n slot: item.slot,\n order: item.order,\n isVisible: () =>\n matchesActiveMode(\n input,\n item.when as\n | {\n mode?: string | string[];\n }\n | undefined,\n ),\n }),\n );\nconst registerPages = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.pages.map((page) => input.workbench.pages.registerPage(page));\nconst registerModes = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.modes.map((mode) =>\n input.workbench.modes.registerMode({\n id: mode.modeId,\n label: text(mode.label, mode.modeId),\n panels: mode.panelRegions,\n regionSettings: mode.regionSettings,\n panelHeaders: \"legacy\",\n floatingPanels: mode.floatingPanels,\n defaultTheme: mode.defaultTheme,\n chrome: mode.chrome,\n activate: () => undefined,\n }),\n );\nconst registerModePlacements = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.placements.map((placement) => input.workbench.modePlacements.registerPlacement(placement));\nexport const registerWorkbenchExtensionContributions = (sourceInput: RegisterWorkbenchExtensionContributionsInput) => {\n const input: InternalRegisterWorkbenchExtensionContributionsInput = {\n ...sourceInput,\n metadata: toInternalWorkbenchExtensionMetadata(sourceInput.metadata, {\n createTab: (metadata) => createWorkbenchExtensionTabPresentation(sourceInput, metadata),\n }),\n };\n const disposables: Disposable[] = [];\n const context: WorkbenchExtensionCommandContext = input;\n try {\n disposables.push(...registerCommands(context, input.metadata));\n disposables.push(\n ...registerWorkbenchExtensionKeybindings({\n bindings: input.metadata.keybindings,\n createWhenExpression: input.createKeybindingWhenExpression,\n workbench: input.workbench,\n }),\n );\n disposables.push(...registerMenus(input, context));\n disposables.push(...registerCommandPaletteContributions(input, context));\n disposables.push(\n registerWorkbenchExtensionTreeRenderers({ ...input, resolveNodeResource: input.resolveTreeNodeResource }),\n );\n disposables.push(registerWorkbenchExtensionFileRenderers(input));\n disposables.push(registerWorkbenchExtensionControlsRenderers(context, input.metadata.controlsRenderers ?? []));\n disposables.push(...registerWebviewPanels(input));\n disposables.push(...registerSettings(input));\n // Status-backed renderers query their provider while they register. Providers\n // must exist first so the renderer's live option source can load immediately.\n disposables.push(\n registerWorkbenchExtensionKanbanRenderers(context, input.metadata.kanbanRenderers ?? [], input.kanbanAdapter),\n );\n disposables.push(\n registerWorkbenchExtensionDataTableRenderers(\n context,\n input.metadata.dataTableRenderers ?? [],\n input.dataTableAdapter,\n ),\n );\n disposables.push(...registerViewMenus(input));\n disposables.push(\n registerWorkbenchExtensionCommandPaletteResources(context, input.metadata.commandPaletteResources ?? []),\n );\n disposables.push(\n ...registerWorkbenchExtensionNavigationItems({\n createWhenExpression: sourceInput.createNavigationWhenExpression,\n metadata: sourceInput.metadata,\n workbench: sourceInput.workbench,\n }),\n );\n if (sourceInput.subscribeRefreshEvents) {\n disposables.push(\n registerWorkbenchExtensionRendererRefreshEvents({\n metadata: sourceInput.metadata,\n subscribe: sourceInput.subscribeRefreshEvents,\n workbench: sourceInput.workbench,\n }),\n );\n }\n disposables.push(...registerStatusBarItems(input));\n disposables.push(...registerResourceKinds(input));\n disposables.push(...registerPages(input));\n disposables.push(...registerModes(input));\n disposables.push(...registerModePlacements(input));\n return {\n dispose() {\n disposeAll(disposables);\n },\n };\n } catch (error) {\n disposeAll(disposables);\n throw error;\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"extensions.js","names":["workbenchMenuTargets","const","workbenchTreeTargets","workbenchRegions","workbenchViewTargets","workbenchSettingsTargets","workbenchSettingsScopes","workbenchModeLayoutTargets","WorkbenchMenuTarget","WorkbenchTreeTarget","WorkbenchViewTarget","WorkbenchSettingsTarget","WorkbenchAttachmentTarget","z","workbenchMenuTargets","workbenchModeLayoutTargets","workbenchRegions","workbenchSettingsScopes","workbenchSettingsTargets","workbenchTreeTargets","workbenchViewTargets","workbenchMenuTargetSchema","enum","workbenchTreeTargetSchema","workbenchRegionSchema","workbenchViewTargetSchema","workbenchSettingsTargetSchema","workbenchModeLayoutTargetSchema","workbenchAttachmentTargetSchema","union","workbenchSettingsScopeSchema","Localizable","CommandRef","ExtensionContextBase","ContributionDefinition","ResourceKindRef","MaybePromise","ResourceRef","ViewHierarchyParent","dockedWorkbenchRegions","const","DockedWorkbenchRegion","extensionPanelRegions","ExtensionPanelRegion","RegionSize","defaultPx","minPx","maxPx","ResourceMenuSlotDefinition","id","placement","label","access","order","ResourceKindDefinition","prefix","$prefix","icon","menuSlots","resolve","resolveMany","paths","validateAnchors","relatedOpenings","ResourceHierarchyProvider","resourceKind","parent","ctx","resource","isNavigationHref","href","protocol","URL","z","validatePageParamDefinitions","pageParamValueSchema","union","string","number","boolean","array","pageParamDefinitionsSchema","record","discriminatedUnion","object","type","literal","default","optional","values","readonly","strict","superRefine","value","ctx","error","addIssue","code","message","String","z","serializableJsonObjectSchema","contributionRefSchema","kind","Kind","object","extensionId","string","literal","id","pageRefSchema","placementRefSchema","modeRefSchema","viewRefSchema","resourceKindRefSchema","pageSlotRefSchema","page","panelRefSchema","union","commandTargetSchema","command","params","optional","z","isNavigationHref","isFileSourcePosition","FileSourcePosition","PageParams","pageParamValueSchema","extensionResourceRefSchema","commandTargetSchema","pageRefSchema","panelRefSchema","sourcePositionSchema","object","line","number","int","positive","column","optional","endLine","endColumn","refine","sectionSchema","anchors","array","id","string","heading","occurrence","nonnegative","MetadataPageTarget","kind","page","infer","resource","open","section","position","params","parent","pageTargetSchema","ZodType","lazy","literal","enum","record","value","meta","navigationOperationSchema","union","panel","navigationTargetSchema","target","href","targets","min","isFileSourcePosition","z","CommandOutcome","JsonValue","NavigationTarget","serializableJsonObjectSchema","navigationTargetSchema","notice","object","type","enum","title","string","optional","message","metadata","diagnostic","code","severity","extensionId","commandId","createCommandOutcomeSchema","jsonValue","ZodType","error","name","stack","cause","annotations","notices","array","diagnostics","failure","ok","literal","reason","data","navigation","outcome","discriminatedUnion","status","value","unknown","navigationRequests","transform","validatedCommandOutcomeSchema","json","z","JsonValue","NavigationTarget","Struct","createCommandOutcomeSchema","validatedCommandOutcomeSchema","commandSourceSchema","extensionSlotKindSchema","jsonObjectSchema","navigationTargetSchema","pageParamValueSchema","extensionResourceRefSchema","workbenchAttachmentTargetSchema","extensionSlotInvocationSchema","object","id","string","kind","context","extensionAttachmentInvocationSchema","target","mode","optional","projectId","resource","extensionRendererContextSchema","rendererId","pageParams","record","modeId","invocation","placement","enum","commandExecuteRequestSchema","min","workspaceId","params","attachment","slot","source","metadata","commandExecuteBodySchema","dispatchExtensionEventBodySchema","eventId","payload","strict","responseNavigationTargetSchema","ZodType","commandOutcomeSchema","ok","boolean","status","value","unknown","navigationRequests","array","code","reason","data","error","name","message","stack","notices","type","title","diagnostics","severity","extensionId","commandId","responseFields","eventIds","commandExecuteResponseSchema","outcome","createCommandExecutionResultSchema","jsonValue","commandExecutionResultSchema","json","CommandExecuteRequest","infer","CommandExecuteBody","CommandExecuteResponse","CommandExecutionResult","ExtensionRendererContext","DispatchExtensionEventInput","ViewFilterCondition","ViewFilterRule","attributeId","condition","value","ViewFilterGroup","conjunction","rules","groups","ViewSortDirection","ViewSort","direction","ViewFieldKind","optionConditions","VIEW_FILTER_CONDITIONS","Record","boolean","string","number","date","enum","status","user","z","VIEW_FILTER_CONDITIONS","ViewFieldKind","ViewFilterCondition","ViewFilterGroup","ViewFilterRule","ViewSort","EMPTY_VIEW_FILTER","conjunction","rules","VIEW_DAY_PATTERN","conditionIds","Set","Object","values","flat","viewFilterConditionSchema","enum","viewFilterRuleSchema","object","attributeId","string","min","condition","value","union","boolean","number","array","optional","advancedFilterGroupSchema","strictObject","viewFilterGroupSchema","extend","groups","refine","filter","length","message","viewSortSchema","direction","viewSortsSchema","max","viewFilterValueKind","kind","const","valueNeeds","none","day","text","options","valueFits","ReturnType","undefined","Number","isFinite","test","Array","isArray","ViewRuleField","id","filterable","sortable","canSortViewField","field","Pick","ruleProblem","rule","fields","find","map","join","conditions","legacyList","includes","valueKind","unknown","some","option","findViewFilterProblem","flatMap","group","problem","findViewSortsProblem","sorts","sort","Localizable","ViewFilterGroup","ViewSort","CommandRef","RendererCallback","JsonValue","Struct","RendererContributionBase","RendererContext","ResourceRef","ViewToolbarAction","DataTableRendererResourceRef","DataTableRendererSettings","grouping","rowNumbers","wrapRows","showStats","hiddenColumns","columnOrder","DEFAULT_DATA_TABLE_SETTINGS","DataTableRendererSavedView","id","title","settings","Partial","filter","sorts","DataTableRendererQueryParams","renderer","DataTableRendererThemeColor","light","dark","foreground","DataTableRendererColumnStat","type","bins","limit","DataTableRendererColumnRenderer","stops","Array","value","color","categories","DataTableRendererColumn","label","groupable","filterable","description","icon","hidden","stat","DataTableRendererRow","values","Record","resource","DataTableRendererQueryResult","rows","columns","DataTableRendererRowAction","destructive","command","TParams","DataTableRendererSelectionAction","DataTableRendererRowActivationHandler","row","DataTableRendererContribution","toolbarActions","query","selectionMode","selectionActions","rowActions","onRowActivate","initialPageSize","pageSizeOptions","defaultSettings","defaultFilter","defaultSorts","defaultViews","defaultActiveViewId","Localizable","DataTableRendererSettings","KanbanRendererViewSettings","ViewFilterGroup","ViewSort","DEFAULT_DATA_TABLE_SETTINGS","EMPTY_VIEW_FILTER","KanbanViewSettings","DEFAULT_KANBAN_VIEW_SETTINGS","viewMode","columnGrouping","rowGrouping","displayProperties","DeclaredView","id","title","settings","Partial","TSettings","filter","sorts","DeclaredViews","defaultSettings","defaultFilter","defaultSorts","defaultViews","builtInViews","base","record","length","views","builtIn","map","view","kanbanBuiltInViews","attributes","type","kind","dataTableBuiltInViews","z","extensionPanelRegions","extensionResourceRefSchema","relatedResourceOpeningSchema","object","resource","autoOpen","boolean","optional","region","enum","open","JsonObject","JsonValue","WebviewEditingChange","record","value","Array","isArray","diffEditingState","before","after","path","changes","Object","keys","some","key","hasOwn","entries","previous","Record","JSON","stringify","nextPath","undefined","push","applyEditingChanges","state","State","next","structuredClone","change","includes","Error","length","target","slice","at","rebaseEditingChanges","drafts","Map","Key","applicable","set","LocalizedString","$l10n","default","Localizable","T","l10n","key","defaultValue","undefined","isLocalizedString","value","isLocalizedString","isNavigationHref","isFileSourcePosition","NavigationTarget","ResourceRef","isRecord","value","Record","Boolean","Array","isArray","isContributionRef","kind","id","isResource","type","isOpenIntent","undefined","isPageTarget","ancestors","Set","page","has","resource","section","position","open","parent","next","add","isPanelTarget","panel","validPanel","isItemTarget","Exclude","href","target","command","params","isNavigationTarget","targets","length","every","withExtensionOwner","extensionId","ref","Ref","toPageTarget","Extract","projectId","qualifyResource","qualifyNavigationTarget","Error","map","item","isRecord","isFileSourcePosition","isNavigationTarget","SerializedError","serializeCommandError","error","ancestors","shape","value","Error","name","message","stack","cause","undefined","shapes","WeakMap","ReturnType","errorShape","existing","get","result","set","source","String","JSON","parse","stringify","this","_key","normalized","length","at","pop","includes","push","AgentInfo","AgentModel","HarnessParamsInfo","TerminalSessionOperation","TerminalSessionResult","CreateNotificationInput","Notification","NotificationStatus","ExtensionAccountApi","CommandNotice","CommandOutcome","ExtensionBlobRef","JsonObject","JsonValue","NavigationTarget","PageLocation","PageParamValue","ResourceRef","ExtensionHarnessInput","WebviewEditingSessionParams","WebviewEditingSnapshot","WEBVIEW_HOST_CAPABILITY_VERSION","WEBVIEW_DECLARABLE_CAPABILITIES","const","WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES","ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES","WEBVIEW_HOST_CAPABILITIES","filter","capability","WebviewHostCapability","WebviewDeclarableCapability","WebviewScopedDeclarableCapability","VersionedWebviewCapabilityDeclaration","WebviewCapabilityDeclaration","WebviewCommandsExecuteParams","commandId","params","workspaceId","resource","metadata","WebviewCommandsStreamParams","operation","streamId","bytes","WebviewCommandStreamEvent","type","data","outcome","WebviewNavigationOpenParams","target","WebviewNotificationShowParams","level","title","message","WebviewNotificationActionParams","Omit","WebviewNotificationResolveParams","id","dedupeKey","status","Extract","WebviewNotificationDismissParams","Pick","WebviewPreferencesGetParams","name","scope","scopeId","WebviewPreferencesSetParams","value","Record","WebviewPageParamsUpdateParams","Readonly","WebviewExtensionSettingKeyParams","key","WebviewExtensionSettingSetParams","WebviewFileScope","WebviewFilesUploadParams","Uint8Array","ArrayBuffer","mimeType","WebviewFilesListParams","WebviewFilesDeleteParams","WebviewArtifactsReadParams","op","mount","prefix","path","WebviewArtifactFile","size","mediaType","WebviewAccountReadParams","projectId","WebviewAccountManageParams","managerOrigin","WebviewAccountResult","Awaited","ReturnType","Params","WebviewKeyboardEventParams","code","ctrlKey","metaKey","altKey","shiftKey","repeat","WebviewHostCapabilityParams","harnessId","model","WebviewHostCapabilityResults","harnesses","models","schema","defaults","selection","WebviewResourceAction","accepted","location","resolved","notifications","files","label","icon","iconSrc","description","isDisabled","separatorBefore","group","WebviewHostCapabilityResult","Capability","Exclude","EXTENSION_EVENTS_SCOPE","RESOURCE_ACTIONS_EVENTS_SCOPE","artifactMountId","mount","id","WebviewHostCapability","WebviewScopedDeclarableCapability","WEBVIEW_DECLARABLE_CAPABILITIES","WEBVIEW_HOST_CAPABILITIES","WEBVIEW_HOST_CAPABILITY_VERSION","WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES","HostCapabilityRequest","ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES","WebviewDeclarableCapability","WebviewCapabilityDiagnosticCode","WebviewCapabilityDiagnostic","capability","code","message","severity","HostCapability","params","TParams","Promise","TResult","HostCapabilityRegistry","Partial","Record","CreateHostCapabilityGateInput","capabilities","declaredCapabilities","onDiagnostic","diagnostic","publicCapabilityNames","Set","scopedCapabilityNames","isPublicCapability","name","has","isScopedCapability","parseWebviewCapabilityDeclaration","nameAndScope","versionText","split","scopeIndex","indexOf","slice","scope","undefined","version","Number","validateDeclarationShape","parsed","ReturnType","Boolean","unsupportedCapability","unsupportedVersion","toString","undeclaredCapability","validateWebviewCapabilityDeclarations","diagnostics","allowed","allowedScopes","Map","declaration","push","add","scopes","get","set","validateWebviewCapabilityNames","requestScope","request","mount","length","createHostCapabilityGate","input","emit","deny","Object","assign","Error","data","call","method","handler","WebviewHostProps","createWebviewHostProps","props","Partial","Record","locale","projectId","themePreference","resource","pageLocation","pageParams","translations","defaultLocale","bundle","defaultBundle","RuntimeErrorPayload","isRecord","value","Record","safeStringify","json","JSON","stringify","length","String","normalizeRuntimeError","Error","message","stack","undefined","isRecord","HostCapabilityReply","normalizeRuntimeError","capabilityReply","run","ok","value","error","details","code","message","data","extensionIframeAllow","capabilities","some","capability","ThemePreference","collectChakraThemeVariables","document","computed","getComputedStyle","documentElement","variables","Record","index","length","name","item","startsWith","getPropertyValue","trim","resolveActiveTheme","fallback","value","getAttribute","colorMode","postThemeToFrame","iframe","HTMLIFrameElement","theme","contentWindow","postMessage","type","WebviewHostProps","CSSProperties","useEffect","useRef","useState","host","ExtensionViewDescriptor","GuestApi","HostApi","HostCapabilityRegistry","HostCapabilityRequest","ThemePreference","WebviewCapabilityDiagnostic","WebviewPointerEvent","createHostCapabilityGate","createWebviewHostProps","normalizeRuntimeError","capabilityReply","HostEventPublisher","extensionIframeAllow","collectChakraThemeVariables","resolveActiveTheme","ExtensionFrameProps","sizing","view","props","Partial","Record","theme","capabilities","onKeyboardEvent","event","WebviewKeyboardEventParams","hostEvents","onReady","onError","error","message","stack","onDiagnostics","diagnostics","title","GuestRemote","Pick","hostEvent","iframeStyle","border","display","flex","height","minHeight","width","frameShellStyle","position","EXTENSION_IFRAME_SANDBOX","ExtensionFrame","extensionProps","iframeRef","HTMLIFrameElement","remoteRef","initializedRef","connectedWindowRef","Window","propsRef","themeRef","capabilitiesRef","onKeyboardEventRef","hostEventsRef","declaredCapabilitiesRef","webview","onReadyRef","onErrorRef","onDiagnosticsRef","frameEpoch","setFrameEpoch","contentWidth","setContentWidth","current","iframe","onFrameLoad","contentWindow","epoch","addEventListener","removeLoadListener","removeEventListener","stylesAtConnect","styles","moduleUrlAtConnect","moduleUrl","reportDiagnostics","length","createCapabilityGate","declaredCapabilities","onDiagnostic","diagnostic","hostApi","dispatchPointerEvent","isConnected","type","bounds","getBoundingClientRect","dispatchEvent","PointerEvent","bubbles","composed","cancelable","clientX","left","clientWidth","clientY","top","clientHeight","contentWidthChanged","Number","isFinite","dispatchKeyboardEvent","document","KeyboardEvent","ready","runtimeError","payload","call","request","connect","connection","location","replace","runtimeUrl","then","conn","remote","bind","init","themeVariables","extensionId","catch","unbind","propsUpdate","themeUpdate","variables","window","MutationObserver","frame","schedule","cancelAnimationFrame","requestAnimationFrame","observer","options","attributeFilter","attributes","observe","documentElement","body","disconnect","label","colorScheme","WebviewCapabilityDiagnostic","EXTENSION_HOST_LOG_PREFIX","ExtensionHostDiagnostic","event","extensionId","contributionId","projectId","code","capability","message","stack","logExtensionHostDiagnostic","diagnostic","write","console","info","JSON","stringify","createWebviewDiagnostics","view","id","log","onReady","onError","error","onDiagnostics","diagnostics","HostEventMessage","HostEventPublisher","emit","message","bind","sink","onDisconnect","listener","unbind","createHostEventPublisher","pending","disconnectListeners","Set","push","next","length","shift","add","delete","Box","Center","Stack","Text","resolvePageParams","createWebviewDiagnostics","ExtensionFrame","ExtensionFrameProps","useEffect","useState","WorkbenchCore","BridgeWebviewFrameProps","Omit","workbench","BridgeWebviewFrame","props","$","_c","frameProps","view","pageState","setPageState","pages","store","getState","t0","subscribe","state","t1","t2","t3","activePageId","location","page","getPage","undefined","params","t4","pageLocation","pageParams","pageProps","error","setError","t5","diagnostics","t6","sizing","t7","t8","t9","onReady","t10","nextError","onError","message","t11","onDiagnostics","t12","_c","ExtensionAccountApi","WebviewAccountManageParams","WebviewAccountReadParams","runAccountOperation","account","request","op","status","loginStatus","id","devices","projectSyncStatus","projectId","login","managerOrigin","cancelLogin","logout","renameDevice","name","removeDevice","syncProject","stopProjectSync","createAccountCapability","TerminalHostEvent","TerminalSessionOperation","TerminalSessionResult","HostCapability","HostEventPublisher","WorkbenchTerminalController","TERMINAL_SESSION_EVENT_SCOPE","CreateTerminalSessionCapabilityInput","terminal","hostEvents","createTerminalSessionCapability","input","emit","payload","scope","params","operation","sessionId","open","request","write","data","accepted","resize","cols","rows","kill","signal","unsubscribeTerminal","unsubscribeDisconnect","closed","close","subscribe","onData","chunk","kind","onExit","exit","code","onDisconnect","serializableJsonObjectSchema","jsonObjectSchema","z","id","string","min","session","sessionId","changes","array","object","path","value","json","edit","sequence","number","int","positive","webviewEditingSessionParamsSchema","discriminatedUnion","operation","literal","key","initial","save","commandId","params","optional","strict","expectedVersion","nonnegative","jsonObjectSchema","extensionResourceRefSchema","jsonObjectSchema","isNavigationTarget","NavigationTarget","z","action","discriminatedUnion","object","kind","literal","id","string","label","target","custom","primary","boolean","optional","command","params","destructive","href","webviewNotificationActionParamsSchema","title","min","body","enum","priority","related","array","actions","dedupeKey","expiresAt","snoozedUntil","metadata","isNavigationTarget","extensionResourceRefSchema","jsonObjectSchema","pageParamValueSchema","WebviewHostCapability","WebviewHostCapabilityParams","isNavigationTarget","NavigationTarget","z","webviewEditingSessionParamsSchema","webviewNotificationActionParamsSchema","WebviewHostCapabilityError","Error","constructor","code","message","data","Record","name","identifier","string","min","empty","object","strict","optional","command","commandId","params","workspaceId","resource","metadata","streamId","scope","enum","scopeId","preference","notificationIdentity","id","dedupeKey","status","refine","input","undefined","binary","union","instanceof","Uint8Array","ArrayBuffer","fileScope","type","terminalId","sessionId","terminalRequest","cols","number","int","positive","rows","array","cwd","env","record","projectId","schemas","harnessId","model","discriminatedUnion","operation","literal","key","extend","bytes","target","custom","nullable","title","level","value","boolean","unknown","request","signal","mimeType","op","mount","prefix","path","managerOrigin","ZodType","parseWebviewCapabilityParams","capability","Capability","result","safeParse","success","issues","error","map","issue","String","isNavigationTarget","CommandExecutionResult","CommandStreamClientEvent","CommandOutcome","WebviewCommandsExecuteParams","WebviewCommandsStreamParams","commandExecutionResultSchema","serializeCommandError","HostEventPublisher","errorOutcome","code","reason","ok","status","failureOutcome","error","serialized","message","cause","undefined","fail","Object","assign","Error","MAX_STREAMS","MAX_UNREAD_BYTES","withFrameSignal","hostEvents","run","signal","AbortSignal","Promise","T","controller","AbortController","unsubscribe","onDisconnect","abort","StreamCapabilityDeps","stream","input","AsyncIterable","publish","response","createWebviewCommandStreamHandler","streams","Map","unread","stop","emit","deps","streamId","operation","get","state","Number","isSafeInteger","bytes","has","size","ended","payload","scope","finish","outcome","notify","delete","type","set","_","_streamId","commandId","body","receive","event","parse","TextEncoder","encode","JSON","stringify","data","byteLength","accepted","const","fail","CommandOutcomeError","getCommandValue","validatedCommandOutcomeSchema","MaybePromise","WebviewHostCapability","WebviewHostCapabilityParams","HostCapability","HostEventPublisher","z","createAccountCapability","ExtensionWebviewHostAdapters","createTerminalSessionCapability","parseWebviewCapabilityParams","WebviewHostCapabilityError","createWebviewCommandStreamHandler","withFrameSignal","commandResponse","object","outcome","passthrough","streamHandlers","WeakMap","ReturnType","streamHandler","events","handler","get","set","after","result","T","done","Promise","then","capability","name","Name","run","params","input","commandExecution","adapters","executeCommand","hostEvents","undefined","request","response","signal","resolve","parse","error","commandStreaming","streamCommand","stream","publish","commandCompleted","editingSession","editing","createExtensionWebviewHostCapabilities","navigation","pageParams","placement","notifications","settings","preferences","files","artifacts","terminal","terminalCapability","readHarnesses","harnesses","read","bind","account","resourceActions","open","target","location","update","value","close","show","type","level","title","message","create","status","scope","all","key","delete","upload","list","Record","NavigationTarget","ExtensionNavigationTarget","isNavigationTarget","qualifyNavigationTarget","NavigationTargetCommand","WorkbenchPanelRegion","ToWorkbenchNavigationTargetInput","commandIdOf","command","Extract","kind","commandTargetOf","target","extensionId","projectId","region","toCommandTarget","input","override","commandId","id","args","params","NavigationOperation","toWorkbenchNavigationTarget","Error","targets","map","item","applyEditingChanges","diffEditingState","JsonObject","rebaseEditingChanges","WebviewCommandsExecuteParams","WebviewEditingChange","WebviewEditingSessionParams","WebviewEditingSnapshot","HostEventPublisher","WorkbenchCore","Member","id","events","document","EditingDocument","key","scope","value","saved","version","revision","savedRevision","save","execute","input","Promise","members","Set","previews","Map","writing","Owner","projectId","extensionId","OpenRequest","Extract","operation","fail","code","Object","assign","Error","ownerScope","owner","JSON","stringify","snapshot","values","flat","publish","accepted","member","sequence","current","emit","payload","sessionId","appliedSequence","preview","changes","draft","get","next","delete","set","commit","rebased","drafts","length","cancel","has","refresh","expectedVersion","structuredClone","createDocument","initial","createSessions","documents","connections","WeakMap","clean","size","close","flush","resolve","then","params","map","path","finally","connection","existing","onDisconnect","open","commandId","startsWith","joined","add","request","sessions","ReturnType","createWorkbenchEditingSessionAdapter","workbench","hostEvents","PreferenceScopeRef","PreferenceValue","WorkbenchCore","WebviewOwnedPreferences","get","name","scope","Promise","set","value","createWebviewPreferencesAdapter","input","workbench","extensionId","ownedPreferences","warn","message","registry","preferences","owner","Error","registered","schema","getSchema","ownerId","console","Boolean","getValue","getOwnedValue","setValue","setOwnedValue","WebviewHostCapabilityParams","RESOURCE_ACTIONS_EVENTS_SCOPE","HostEventPublisher","WorkbenchCore","orderMenuEntries","resolveMenuEntries","resolveResourceActionMenu","subscribeResourceActionChanges","createChangeNotifier","workbench","hostEvents","stop","pending","emit","queueMicrotask","scope","payload","type","unsubscribe","stopOnDisconnect","onDisconnect","undefined","createWebviewResourceActions","projectId","watchChanges","input","menu","resource","entries","operation","entry","find","id","key","run","disabled","Error","map","label","commandId","icon","iconSrc","description","isDisabled","separatorBefore","group","HostEventPublisher","WorkbenchCore","WorkbenchPanelInstance","toWorkbenchNavigationTarget","ExtensionWebviewHostAdapters","createExtensionWebviewHostCapabilities","createWorkbenchEditingSessionAdapter","createWebviewPreferencesAdapter","WebviewOwnedPreferences","createWebviewResourceActions","CreateWorkbenchWebviewHostAdaptersInput","workbench","placement","extensionId","projectId","ownedPreferences","warn","message","hostEvents","createWorkbenchWebviewHostAdapters","input","resourceActions","editing","executeCommand","request","signal","outcome","ok","status","value","commands","commandId","params","resource","placementIdentity","close","closePlacement","undefined","pageParams","update","patch","state","pages","store","getState","location","Error","page","pageLocations","updateParams","navigation","open","target","openTarget","notifications","show","notice","type","captureActionError","title","instanceId","level","metadata","preferences","terminal","createWorkbenchWebviewHostCapabilities","WebviewHostProps","ThemePreference","createHostEventPublisher","HostEventPublisher","WorkbenchCore","WorkbenchPanelInstance","WorkbenchPanelRenderInput","WorkbenchRendererRegistration","BridgeWebviewFrame","ExtensionWebviewHostAdapters","createExtensionWebviewHostCapabilities","createWorkbenchWebviewHostAdapters","BridgeWebviewRenderContext","workbench","webviewId","extensionId","placement","hostEvents","CreateBridgeWebviewHostAdapters","context","CreateBridgeWebviewProps","Partial","Record","CreateBridgeWebviewTheme","CreateBridgeWebviewRendererInput","createHostAdapters","createProps","createTheme","BRIDGE_WEBVIEW_RENDERER_ID","BridgeWebviewConfig","title","runtimeUrl","moduleUrl","styles","capabilities","isBridgeWebviewConfig","value","Array","isArray","config","createPlacementProps","resource","createLightTheme","hostEventPublishersByWorkbench","WeakMap","Map","getBridgeWebviewHostEventPublisher","instance","hostEventsByWidget","get","set","key","instanceId","renderBridgeWebviewFrame","input","sizing","ownerId","webview","id","label","renderBridgeWebview","panel","region","undefined","panelId","createBridgeWebviewRenderer","render","renderInput","LocalizableString","isLocalizedString","Localizable","text","value","fallback","undefined","default","$l10n","text","isLocalizedString","CommandExecutionResult","getCommandValue","unwrapCommandValue","result","response","Partial","outcome","WorkbenchExtensionMetadata","text","WorkbenchCommandExecutionContext","WorkbenchExtensionCommandContext","runResourceMutation","context","command","params","Record","execution","persist","Promise","mutation","resourceMutation","id","idParam","resource","type","resourceType","extensionId","projectId","kind","workbench","commandPalette","requestConfirmation","title","rawLabel","labelParam","undefined","trim","preview","resources","begin","removed","label","result","commit","error","rollback","text","CommandExecuteRequest","CommandExecutionResult","WorkbenchExtensionMetadata","ResourceRef","WorkbenchCommandExecutionContext","WorkbenchModuleContext","WorkbenchPanelRegion","resolveCommandResourceParams","unwrapCommandValue","toWorkbenchNavigationTarget","runResourceMutation","WorkbenchExtensionCommandContext","metadata","Pick","executeCommand","commandId","body","signal","AbortSignal","Promise","prepareCommandArgs","args","context","onArgsChange","projectId","workbench","ExecuteWorkbenchExtensionCommandInput","region","workspaceId","Record","params","resource","slot","createExtensionSlot","input","id","kind","NonNullable","executeWorkbenchExtensionCommandResponse","reportNavigationError","notifications","captureActionError","response","source","outcome","Partial","status","target","navigationRequests","navigation","openTarget","error","executeWorkbenchExtensionCommand","command","commands","find","candidate","persist","WorkbenchExtensionCommandPaletteResourceRecord","NavigationTarget","ResourceRef","text","CommandPaletteResourceResult","Disposable","toWorkbenchNavigationTarget","WorkbenchExtensionCommandContext","executeWorkbenchExtensionCommand","ResourceItem","id","label","description","icon","keywords","target","ProviderQueryResult","items","isProviderQueryResult","value","Array","isArray","commandIdOf","command","Extract","kind","extensionId","activateTarget","context","record","item","params","workbench","commandPaletteResources","refresh","navigation","openTarget","targetResource","resource","targets","find","step","undefined","toResult","groupLabel","projectId","group","activate","registerWorkbenchExtensionCommandPaletteResources","records","disposables","title","push","registerProvider","refreshEventIds","query","limit","signal","activeResource","getActiveResource","queryHandlerId","modeId","modes","getActiveModeId","providerId","map","dispose","index","length","text","WorkbenchExtensionControlsRendererRecord","controlsQueryResultSchema","text","Disposable","ResourceRef","WorkbenchExtensionCommandContext","createExtensionSlot","executeWorkbenchExtensionCommand","localize","value","fallback","Parameters","WorkbenchExtensionControlsAdapter","resolveResource","record","registerControlsRenderer","context","adapter","slot","id","kind","projectId","controlsRendererId","run","commandId","params","Record","resource","signal","AbortSignal","pageParams","PageParams","renderer","rendererId","invocation","placement","metadata","Promise","resolve","undefined","workbench","views","registerView","title","icon","body","emptyTitle","emptyDescription","defaultValues","executeQuery","queryHandlerId","result","safeParse","success","fields","error","issues","map","issue","path","join","message","Error","extensionId","data","updateValue","valueChangeHandlerId","controlId","values","then","apply","applyHandlerId","reset","resetHandlerId","controlIds","registerWorkbenchExtensionControlsRenderers","records","disposables","push","dispose","index","length","localize","text","Localizable","commandRefId","CommandParamSchema","LocalizableText","ParamLocalizer","value","fallback","ContributedParamSchema","Record","type","label","description","options","localizeParamSchema","params","localize","ownerExtensionId","undefined","Object","fromEntries","entries","map","id","descriptor","Array","isArray","localizeOptionSource","source","command","extensionId","valueField","labelField","commandId","WorkbenchExtensionDataTableRendererRecord","text","localizeParamSchema","mapViewToolbarActions","record","Pick","toolbarActions","map","action","id","label","icon","presentation","commandId","args","params","input","extensionId","submitLabel","disabled","when","text","DataTableRendererSettings","dataTableBuiltInViews","WorkbenchExtensionDataTableRendererRecord","text","createElement","CollectionViewsProvider","DataTableRendererColumn","DataTableRendererQueryResult","DataTableRendererRow","Disposable","ResourceRef","WorkbenchIcon","WorkbenchExtensionCommandContext","createExtensionSlot","executeWorkbenchExtensionCommand","mapViewToolbarActions","localize","value","fallback","Parameters","WorkbenchExtensionDataTableRendererAdapter","resolveRowResource","record","row","id","values","Record","resource","createViewsProvider","WireColumn","NonNullable","toColumn","column","label","description","undefined","icon","name","size","isQueryResult","rows","Array","columns","Boolean","isArray","toRow","registerRenderer","context","adapter","builtIns","originalRows","WeakMap","slot","kind","projectId","dataTableRendererId","run","commandId","params","modeId","signal","AbortSignal","pageParams","PageParams","renderer","rendererId","invocation","placement","metadata","workbench","views","registerView","title","body","resourceKind","toolbarActions","map","initialPageSize","pageSizeOptions","defaultSettings","settings","defaultFilter","defaultSorts","defaultViews","view","defaultActiveViewId","viewsProvider","selectionMode","selectionActions","action","destructive","rowIds","then","emptyTitle","emptyDescription","executeQuery","filter","sorts","queryHandlerId","mapped","set","rowActions","rowId","refreshView","onRowActivate","rowActivationHandlerId","get","registerWorkbenchExtensionDataTableRenderers","records","disposables","dispose","index","length","text","isQueryResult","ExtensionCommandPaletteContribution","ExtensionMenuContribution","WorkbenchExtensionMetadata","isLocalizedString","Localizable","Command","MenuItem","MenuPath","localizeParamSchema","placementOrder","first","default","last","Record","NonNullable","ExtensionContributionPlacement","WorkbenchExtensionMenuSlotConfig","menuPath","group","overflowLabel","resourceGroup","id","label","WorkbenchExtensionMenuWhenBuilder","contribution","WorkbenchExtensionStringResolver","value","extensionId","WorkbenchExtensionMenuRegistration","command","menuItem","targetCommandId","WorkbenchExtensionCommandPaletteRegistration","UnresolvedWorkbenchExtensionMenuContribution","targetId","emptyWorkbenchExtensionMetadata","commands","commandPaletteContributions","diagnostics","extensions","menuContributions","modes","pages","views","viewMenus","placements","resourceKinds","navigationItems","navigationTrees","statusBarItems","settingsPanels","settingsDefinitions","CommandContributionMetadata","Pick","defaultWorkbenchExtensionCommandId","defaultWorkbenchExtensionPaletteCommandId","contributionOrder","placement","index","text","undefined","$l10n","createMenuItem","input","commandId","slot","when","disabledWhen","resolveString","sourceCommandId","icon","args","params","order","disabledReason","createPaletteItem","buildWorkbenchExtensionMenuRegistrations","metadata","menuSlotsById","ReadonlyMap","menuTargetsById","createCommandId","createWhenExpression","registrations","unresolved","forEach","target","get","slotId","push","find","candidate","category","resourceMutation","description","buildWorkbenchExtensionCommandPaletteRegistrations","CommandExecuteRequest","CommandExecutionResult","resourceKey","text","Disposable","FileRendererContent","FileRendererRefreshEnvelope","FileRendererRefreshOrigin","ResourceRef","WorkbenchModuleContext","unwrapCommandValue","InternalWorkbenchExtensionMetadata","WorkbenchExtensionMetadata","executeWorkbenchExtensionCommandResponse","attachFileStorageVersions","fileStorageVersions","FileRendererRecord","NonNullable","RegisterWorkbenchExtensionFileRenderersInput","executeCommand","commandId","body","signal","AbortSignal","Promise","metadata","projectId","workbench","slotContext","input","rendererId","resource","id","kind","const","context","resourceType","type","resourceId","executeFileCommand","extra","Record","pageParams","PageParams","ext","params","renderer","invocation","placement","slot","revisionFromValue","value","undefined","revision","fileRendererRefreshEnvelopeFromCommand","response","origin","fileRendererOrigin","candidate","Partial","instanceId","operationId","fileRendererResourceKey","outcome","ok","registerFileRenderer","record","views","registerView","title","icon","resourceKind","load","result","loadHandlerId","save","saveHandlerId","content","loaded","registerWorkbenchExtensionFileRenderers","disposables","fileRenderers","push","dispose","index","length","slotContext","text","CollectionBadgeItem","KanbanRendererRow","toWorkbenchNavigationTarget","collectionBadgeTarget","row","itemsAttributeId","itemId","extensionId","projectId","items","attributes","item","find","id","target","undefined","KanbanRendererBoardColumnConfig","WireBoardColumnConfig","createElement","WorkbenchIcon","ReactKanbanRendererContribution","KanbanRendererContribution","Localizer","BoardColumnConfig","ReturnType","NonNullable","createBoardActionIcon","icon","BoardActionIcon","props","size","name","toWorkbenchBoardColumnConfig","config","localize","color","canDragIn","canDragOut","canCreate","actions","map","action","id","label","KanbanRendererBoardColumnConfig","WireBoardColumnConfig","WorkbenchExtensionKanbanRendererRecord","KanbanRendererCreateField","KanbanRendererCreateFieldType","ResourceRef","ReactAttributeDescriptor","AttributeDescriptor","ReactKanbanRendererContribution","KanbanRendererContribution","WorkbenchExtensionCommandContext","createExtensionSlot","executeWorkbenchExtensionCommand","KanbanRendererRow","Awaited","ReturnType","RowAction","NonNullable","QueryResult","attributes","boardColumnConfigs","Record","rows","Localizer","value","fallback","MutableAttributeSource","source","set","UnknownDisplayReporter","attributeId","kind","isQueryResult","Array","isArray","localizeAttributes","record","localize","decorate","attribute","reportUnknownDisplay","map","display","knownDisplay","itemsAttributeId","const","undefined","id","resolveType","type","options","option","label","base","createMutableAttributeSource","initial","snapshot","listeners","Set","signature","JSON","stringify","getSnapshot","subscribe","listener","add","delete","nextSignature","isExtensionResource","resource","Boolean","defaultResolveRowResource","_","row","defaultResolveRowActionResource","fromRow","resourceKind","title","toWorkbenchRow","resolveResource","candidate","mergeParams","items","Object","assign","filter","item","asParams","hasCommandParameters","params","keys","length","CREATE_FIELD_TYPES","ReadonlySet","toCreateField","descriptor","has","icon","optional","placeholder","multiple","accept","description","required","defaultValue","toCreateFields","entries","createRow","flatMap","field","createKanbanRendererSlot","context","projectId","kanbanRendererId","executeKanbanRendererCommand","commandId","signal","AbortSignal","pageParams","PageParams","commandResource","workbench","getPrimaryResource","renderer","rendererId","invocation","placement","slot","metadata","kanbanRendererRowActionCommandId","action","registerRowActionCommands","rowActions","target","commands","getCommand","command","registerCommand","execute","args","executionContext","runDefaultRowAction","rowId","commandPalette","requestParams","Promise","resolve","executeCommand","then","asParams","KanbanRendererBoardColumnConfig","WireBoardColumnConfig","KanbanRendererRow","WireRow","renderBadgeListDisplay","kanbanBuiltInViews","WorkbenchExtensionKanbanRendererRecord","text","createElement","Disposable","KanbanRendererCreateSubmission","KanbanRendererQueryState","ResourceRef","WorkbenchIcon","ReactAttributeDescriptor","AttributeDescriptor","toWorkbenchNavigationTarget","WorkbenchExtensionCommandContext","collectionBadgeTarget","WorkbenchExtensionKanbanRendererAdapter","toWorkbenchBoardColumnConfig","createMutableAttributeSource","defaultResolveRowActionResource","defaultResolveRowResource","executeKanbanRendererCommand","isQueryResult","Localizer","mergeParams","registerRowActionCommands","runDefaultRowAction","toCreateFields","toWorkbenchRow","mapViewToolbarActions","ColumnConfigRecord","Record","createRowActionIcon","icon","name","size","undefined","toCreateRowConfig","record","localize","createRow","title","submitLabel","fields","labels","cancel","properties","submitError","removeFile","submitWithoutOpening","toRowClick","context","adapter","resolveRowResource","row","toActivatedRow","rowActivationHandlerId","resource","onRowClick","toCreateRowHandler","runMutation","commandId","params","Promise","activateCreatedRow","contribution","submission","values","columnParam","columnId","attributesParam","attributeValues","created","onAfterCreate","openCreatedRow","Partial","id","attributes","toRowContextMenuActions","resolveRowActionResource","actions","rowActions","length","map","action","runDefault","key","label","onClick","executeRowAction","registerWorkbenchExtensionKanbanRenderers","records","disposables","resolveLabel","value","fallback","Parameters","decorate","attribute","withBuiltInDisplay","display","kind","render","target","itemsAttributeId","extensionId","projectId","workbench","navigation","openTarget","decorateAttribute","afterMutation","onAfterMutation","then","result","reportUnknownDisplay","attributeId","notifications","show","level","message","wireAttributes","builtIns","originalRows","WeakMap","columnConfigs","latestQueryId","rowCache","Map","signature","rowResource","get","onRowActivate","push","views","registerView","body","resourceKind","toolbarActions","listRowActions","storageScope","source","defaultSettings","settings","defaultFilter","defaultSorts","viewsProvider","createViewsProvider","defaultViews","view","defaultActiveViewId","emptyTitle","emptyDescription","hideToolbar","getBoardColumnConfig","groupKey","executeQuery","state","signal","queryId","queryHandlerId","filter","sorts","pageParams","mapRows","rows","nextCache","candidate","JSON","stringify","cached","mapped","set","Array","isArray","nextAttributes","boardColumnConfigs","onAttributeChange","attributeChangeHandlerId","rowId","onMove","moveHandlerId","move","onCreateRow","onColumnAction","columnActionHandlerId","actionId","getRowContextMenuActions","dispose","index","text","TreeContext","executeWorkbenchExtensionCommand","ExtensionTreeNode","ExtensionTreeRendererRecord","ExtensionTreeResource","RegisterWorkbenchExtensionTreeRenderersInput","slotContext","input","modeId","projectId","resource","treeId","id","kind","const","context","resourceType","type","resourceId","createQueryParams","record","ctx","node","workbench","modes","getActiveModeId","renderer","rendererId","pageParams","invocation","placement","state","filter","executeCallback","commandId","params","Record","signal","AbortSignal","slot","executeTreeActionCommand","rendererParams","metadata","TreeContext","TreeNode","InternalWorkbenchExtensionMetadata","WorkbenchExtensionMetadata","ExtensionTreeRendererRecord","ExtensionTreeViewRecord","HostTreeDefaultNodesInput","ctx","record","panel","HostTreeDefaultNodesResolver","input","Promise","ResolveHostTreeDefaultInput","treeViews","ResolveHostTreeHeaderInput","getHostTreeHeaderNodes","ResolveHostTreeFooterInput","getHostTreeFooterNodes","treeViewsFor","metadata","panels","flatMap","panelMenus","filter","renderer","kind","id","resolveTreeView","viewId","find","length","undefined","resolveHostTreeHeaderNodes","hostTreeHeader","resolveHostTreeFooterNodes","hostTreeFooter","text","ResourceRef","ExtensionTreeRendererRecord","extensionTreeStructure","record","resource","structure","map","section","id","label","collapsible","hiddenByDefault","canHide","loading","resourceNode","nodes","type","icon","selected","text","CommandExecuteRequest","commandRefId","text","Disposable","NavigationTarget","ResourceRef","TreeAction","TreeContext","TreeNode","TreeViewSection","WorkbenchModuleContext","toWorkbenchNavigationTarget","InternalWorkbenchExtensionMetadata","WorkbenchExtensionMetadata","localizeParamSchema","createQueryParams","executeCallback","executeTreeActionCommand","ExtensionTreeAction","ExtensionTreeNode","ExtensionTreeRendererRecord","ExtensionTreeResource","ExtensionTreeSection","ExtensionTreeTarget","TargetCommandArgs","HostTreeDefaultNodesResolver","resolveHostTreeFooterNodes","resolveHostTreeHeaderNodes","treeViewsFor","extensionTreeStructure","RegisterWorkbenchExtensionTreeRenderersInput","executeCommand","commandId","body","Promise","getHostTreeFooterNodes","getHostTreeHeaderNodes","metadata","projectId","resolveNodeResource","resource","workbench","toActionParams","params","fallback","Record","Array","isArray","toRecordParams","undefined","createTreeMapper","input","record","originalNodes","WeakMap","runnerCommandId","id","resolveResource","resolved","mapEmptyState","section","emptyState","title","description","icon","mapTarget","target","node","ctx","commandTargetOf","commandTarget","Extract","kind","const","args","command","extensionId","nodeId","treeId","mapAction","action","resourceMutation","commands","find","label","submitLabel","when","disabled","run","actionParams","refresh","mapNode","mapped","selected","iconColor","badge","iconTooltip","tooltip","rowVariant","actions","map","contextMenuActions","collapsible","children","child","contextValue","hiddenByDefault","canHide","canDrag","canDrop","set","mapSections","sections","nodes","mapNodes","isTreeSectionArray","value","every","isTreeNodeArray","hostNodeSection","length","canReorder","registerTree","mapper","treeViews","commandDisposable","registerCommand","execute","rawArgs","result","view","views","listViews","refreshView","treeDisposable","registerView","getStructure","structure","searchable","searchPlaceholder","defaultExpandedNodeIds","defaultExpandedSectionIds","getHeader","hostHeader","headerHandlerId","signal","extensionHeader","getBody","bodyHandlerId","getFooter","hostFooter","footerHandlerId","extensionFooter","moveNode","moveHandlerId","source","originalSource","get","originalTarget","position","getChildren","childrenHandlerId","originalNode","dispose","registerWorkbenchExtensionTreeRenderers","disposables","treeRenderers","push","index","text","WorkbenchExtensionMetadata","NavigationTarget","ExtensionNavigationTarget","contributionRefId","text","Disposable","NavigationTreeOwner","NavigationTreeSlot","TreeNode","TreeViewSection","WorkbenchModuleContext","navigationSlotRootSectionId","toWorkbenchNavigationTarget","NavigationItem","NavigationTree","RegisterWorkbenchExtensionNavigationItemsInput","createWhenExpression","when","metadata","Pick","workbench","toOwner","ref","kind","id","extensionId","isVisible","item","expression","context","matches","toNode","label","icon","canHide","canReorder","target","action","toSections","items","sections","Map","group","undefined","slot","section","get","collapsible","Boolean","nodes","push","set","values","groupItems","groups","owner","key","defaultExpandedGroupIds","Set","flatMap","registerItems","input","navigationItems","map","first","resourceDependent","some","resourceType","length","navigationTrees","registerContribution","sourceExtensionId","declarationIndex","indexOf","defaultExpandedSectionIds","resolveResource","getSections","listActions","category","registerTrees","tree","viewId","view","idScope","resourceScope","registerWorkbenchExtensionNavigationItems","text","relatedResourceOpeningSchema","text","unwrapCommandValue","InternalRegisterWorkbenchExtensionContributionsInput","registerResourceKinds","input","metadata","resourceKinds","map","kind","workbench","resources","registerKind","id","extensionId","label","icon","relatedOpenings","relatedOpeningsCommand","resource","signal","response","executeCommand","projectId","source","throwIfAborted","openings","array","parse","opening","undefined","text","NavigationTarget","ExtensionNavigationTarget","commandRefId","ExtensionKeybindingRecord","WorkbenchModuleContext","toWorkbenchNavigationTarget","KeybindingPlatform","NonNullable","currentPlatform","navigator","undefined","platform","userAgent","toLowerCase","includes","resolveExtensionKeybindingChord","binding","platformOverrides","key","registerWorkbenchExtensionKeybindings","input","bindings","createWhenExpression","when","workbench","map","keybindings","registerKeybinding","sourceExtensionId","extensionId","action","commandIdOf","command","id","keybinding","WorkbenchExtensionMetadata","ContributionKind","contributionRefId","MetadataRef","extensionId","kind","id","toWorkbenchWhenExpression","when","undefined","ids","value","Array","isArray","map","ref","mode","source","viewId","view","resourceType","metadata","WorkbenchExtensionMetadata","contributionRefId","WorkbenchPageMain","WorkbenchPageSlot","InternalWorkbenchExtensionMetadata","WorkbenchExtensionTabMetadata","MetadataPage","PagePresentationInput","extensionId","placementId","createTab","metadata","pageSlot","slot","input","tab","undefined","pageMain","main","kind","toInternalWorkbenchPages","pages","map","page","id","ref","localId","title","path","document","params","modeId","mode","resource","slots","icon","parent","parentId","WorkbenchExtensionMetadata","commandRefId","contributionRefId","ParamObjectSchema","InternalWorkbenchExtensionMetadata","toWorkbenchWhenExpression","toInternalWorkbenchPages","WorkbenchExtensionTabMetadata","MetadataView","resourceKindForView","metadata","viewId","bindings","pages","flatMap","page","main","kind","resource","view","slots","slot","item","binding","push","placements","placement","find","kinds","id","viewBody","body","webview","renderer","panelMenus","owner","viewMenus","menu","views","candidate","extensionId","ownerPanelId","title","side","group","hostTreeHeader","hostTreeFooter","panels","map","menus","icon","length","undefined","commandActions","command","actions","T","action","commandId","kanbanRenderers","resourceKind","createRow","submitLabel","columnParam","params","attributesParam","labels","attachments","resourceParam","fileParam","rowActions","toolbarActions","dataTableRenderers","selectionActions","treeRenderers","fileRenderers","controlsRenderers","modes","mode","modeId","label","panelRegions","regions","regionSettings","floatingPanels","defaultTheme","chrome","Object","fromEntries","entries","region","toInternalWorkbenchExtensionMetadata","input","createTab","adaptedPanels","extensions","commands","menuContributions","commandPaletteContributions","ref","localId","order","movableTo","mountStrategy","hiddenByDefault","headerBorderBottom","tab","placementId","resourceKinds","relatedOpeningsCommand","menuSlots","external","access","resourceHierarchyProviders","record","settingsSections","settingsPanels","panel","slotId","scope","includes","const","section","commandPaletteResources","keybindings","settingsDefinitions","statusBarItems","endsWith","when","diagnostics","WorkbenchExtensionMetadata","Disposable","FileRendererRefreshEnvelope","WorkbenchModuleContext","WorkbenchExtensionRendererKind","RendererRefreshTarget","id","kind","WorkbenchExtensionRefreshEvent","RegisterWorkbenchExtensionRendererRefreshEventsInput","metadata","subscribe","listener","event","workbench","refreshWorkbenchExtensionRenderer","target","envelope","views","refreshView","undefined","rendererRefreshTargets","targets","Map","add","renderer","refreshEventIds","eventId","Set","eventTargets","get","some","push","set","view","body","registerWorkbenchExtensionRendererRefreshEvents","input","refreshOpenWorkbenchExtensionWebviews","getView","CommandExecuteRequest","WebviewArtifactsReadParams","WebviewHostCapabilityResults","createExtensionSlot","executeWorkbenchExtensionCommandResponse","CreateBridgeWebviewHostAdapters","ExtensionWebviewFilesAdapter","createWorkbenchWebviewHostAdapters","ExtensionWebviewSlotKind","NonNullable","ExtensionWebviewFileCapabilities","ExtensionWebviewArtifactCapabilities","read","params","context","webviewId","Promise","CreateWorkbenchExtensionWebviewAdaptersInput","artifacts","executeCommand","commandId","body","signal","AbortSignal","extensionIdForWebview","files","projectId","slotKind","createWorkbenchExtensionWebviewAdapters","input","extensionId","request","resource","placement","workbench","workspaceId","metadata","slot","id","kind","panelId","undefined","WorkbenchExtensionMetadata","text","BridgeWebviewConfig","WorkbenchWebview","Extract","kind","toBridgeWebviewConfig","webview","title","undefined","runtimeUrl","moduleUrl","styles","capabilities","text","CommandExecuteRequest","text","Disposable","PreferencePropertySchema","PreferenceScope","PreferenceValue","CreateBridgeWebviewHostAdapters","getBridgeWebviewHostEventPublisher","renderBridgeWebviewFrame","createWorkbenchExtensionWebviewAdapters","toBridgeWebviewConfig","InternalRegisterWorkbenchExtensionContributionsInput","settingsSectionIdDefault","extensionSettingsOrderBase","asPreferenceValue","value","undefined","preferenceScope","scope","createExtensionHostAdapters","input","slotKind","NonNullable","createBase","artifacts","webviewArtifacts","executeCommand","extensionIdForWebview","webviewId","metadata","panels","find","panel","id","extensionId","files","webviewFiles","projectId","context","createWebviewHostAdapters","registerWebviewPanels","flatMap","webview","workbench","views","registerView","title","icon","body","kind","render","renderInput","settingsPanels","some","settingsPanel","instance","panelId","viewId","renderWebview","sizing","region","placement","hostEvents","createHostAdapters","createProps","createWebviewProps","resource","createTheme","createWebviewTheme","ownerId","viewMenuPlacementPriority","first","default","last","const","registerViewMenus","panelMenus","map","menu","index","viewMenus","registerViewMenu","ownerViewId","ownerPanelId","side","priority","registerSettings","disposables","sectionId","settingsSectionId","settings","getSection","push","registerSection","settingsSectionTitle","sections","settingsSections","sort","left","right","order","localeCompare","section","definitions","Map","settingsDefinitions","setting","key","propertiesByOwner","Record","values","properties","get","Object","create","type","enum","description","set","preferences","registerSchema","entries","slotId","registerPanel","text","WorkbenchExtensionMetadata","isNavigationTarget","resourceKey","text","Disposable","WorkbenchPanelTab","WorkbenchTabSnapshot","toWorkbenchNavigationTarget","executeWorkbenchExtensionCommand","RegisterWorkbenchExtensionContributionsInput","WorkbenchExtensionRefreshEvent","MetadataPlacement","MetadataPageSlot","WorkbenchExtensionTabMetadata","NonNullable","extensionId","placementId","isRecord","value","Record","Boolean","Array","isArray","navigationAction","projectId","undefined","toRows","flatMap","row","id","target","action","label","Parameters","icon","iconColor","selected","disabled","kind","const","toSnapshot","indicator","String","color","menu","candidate","rows","createWorkbenchExtensionTabPresentation","input","metadata","snapshots","Map","instances","loading","Promise","listeners","Set","refreshEvents","refreshEventIds","revision","load","instance","set","instanceId","pending","get","resource","currentRevision","pendingLoad","resolve","queryHandlerId","params","renderer","rendererId","invocation","placement","then","delete","listener","finally","getSnapshot","has","catch","subscribe","add","resourceSubscription","workbench","resources","preview","subscribeRefresh","affected","values","filter","length","all","map","refreshSubscription","subscribeRefreshEvents","event","disposable","dispose","text","WorkbenchExtensionMetadata","matchesResourceWhen","text","Disposable","WorkbenchCommandExecutionContext","workbenchCommandPaletteMenuPath","registerWorkbenchExtensionCommandPaletteResources","registerWorkbenchExtensionControlsRenderers","registerWorkbenchExtensionDataTableRenderers","buildWorkbenchExtensionCommandPaletteRegistrations","buildWorkbenchExtensionMenuRegistrations","registerWorkbenchExtensionFileRenderers","registerWorkbenchExtensionKanbanRenderers","registerWorkbenchExtensionNavigationItems","localizeParamSchema","registerWorkbenchExtensionTreeRenderers","registerResourceKinds","createExtensionSlot","executeWorkbenchExtensionCommand","WorkbenchExtensionCommandContext","InternalRegisterWorkbenchExtensionContributionsInput","RegisterWorkbenchExtensionContributionsInput","registerWorkbenchExtensionKeybindings","toInternalWorkbenchExtensionMetadata","registerWorkbenchExtensionRendererRefreshEvents","registerSettings","registerViewMenus","registerWebviewPanels","createWorkbenchExtensionTabPresentation","disposeAll","disposables","index","length","dispose","asParams","value","Record","Array","isArray","undefined","prepareCommandArgs","context","commandId","args","executionContext","onArgsChange","registerCommands","metadata","Pick","commands","map","command","workbench","registerCommand","id","label","title","description","params","extensionId","resourceMutation","prepareArgs","execute","resource","signal","region","menuCommandResource","input","getPrimaryResource","registerMenus","menuSlotsById","registrations","menuTargetsById","createWhenExpression","createMenuWhenExpression","defaultRegistrations","menuItem","menuPath","registration","menuItems","resolvedRegistrations","menuRegistrations","flatMap","targetCommandId","contribution","slot","slotId","kind","projectId","panelId","layout","registerMenuItem","registerCommandPaletteContributions","isVisible","when","type","matchesActiveMode","mode","modes","active","getActiveModeId","includes","registerStatusBarItems","statusBarItems","item","statusBar","registerItem","viewId","order","registerPages","pages","page","registerPage","registerModes","registerMode","modeId","panels","panelRegions","regionSettings","panelHeaders","floatingPanels","defaultTheme","chrome","activate","registerModePlacements","placements","placement","modePlacements","registerPlacement","registerWorkbenchExtensionContributions","sourceInput","createTab","push","bindings","keybindings","createKeybindingWhenExpression","resolveNodeResource","resolveTreeNodeResource","controlsRenderers","kanbanRenderers","kanbanAdapter","dataTableRenderers","dataTableAdapter","commandPaletteResources","createNavigationWhenExpression","subscribeRefreshEvents","subscribe","error","text","extensionResourceRefSchema","attachFileStorageVersions","subscribeResourceActionChanges","jsonObjectSchema","controlsQueryResultSchema","resolveResourceActionMenu","WorkbenchIcon","fileStorageVersions","orderMenuEntries","resolveCommandResourceParams","resolveMenuEntries","commandSourceSchema","serializableJsonObjectSchema","extensionSlotKindSchema","navigationSlotRootSectionId","isFileSourcePosition$1","workbenchCommandPaletteMenuPath","validatePageParamDefinitions","resolvePageParams","workbenchMenuTargets","workbenchTreeTargets","workbenchRegions","workbenchViewTargets","workbenchSettingsTargets","workbenchSettingsScopes","workbenchModeLayoutTargets","workbenchMenuTargetSchema","z","workbenchTreeTargetSchema","workbenchViewTargetSchema","workbenchSettingsTargetSchema","workbenchAttachmentTargetSchema","extensionPanelRegions","isNavigationHref","href","protocol","pageParamValueSchema","value","error","contributionRefSchema","kind","pageRefSchema","placementRefSchema","pageSlotRefSchema","panelRefSchema","commandTargetSchema","sourcePositionSchema","sectionSchema","pageTargetSchema","navigationOperationSchema","navigationTargetSchema","notice","diagnostic","createCommandOutcomeSchema","jsonValue","annotations","failure","navigation","outcome","validatedCommandOutcomeSchema","extensionSlotInvocationSchema","extensionAttachmentInvocationSchema","responseNavigationTargetSchema","commandOutcomeSchema","responseFields","commandExecutionResultSchema","optionConditions","VIEW_FILTER_CONDITIONS","EMPTY_VIEW_FILTER","conditionIds","viewFilterConditionSchema","viewFilterRuleSchema","advancedFilterGroupSchema","filter","viewSortSchema","DEFAULT_DATA_TABLE_SETTINGS","DEFAULT_KANBAN_VIEW_SETTINGS","builtInViews","settings","base","record","view","kanbanBuiltInViews","dataTableBuiltInViews","relatedResourceOpeningSchema","diffEditingState","changes","before","after","key","previous","nextPath","path","applyEditingChanges","next","state","change","target","rebaseEditingChanges","applicable","drafts","isLocalizedString$1","isRecord$2","isContributionRef","isResource","isOpenIntent","isPageTarget","ancestors","isPanelTarget","panel","isItemTarget","isNavigationTarget$1","withExtensionOwner","ref","extensionId","toPageTarget","qualifyResource","projectId","resource","qualifyNavigationTarget","item","serializeCommandError","shape","shapes","errorShape","existing","result","source","normalized","WEBVIEW_DECLARABLE_CAPABILITIES","WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES","WEBVIEW_HOST_CAPABILITIES","capability","RESOURCE_ACTIONS_EVENTS_SCOPE","publicCapabilityNames","scopedCapabilityNames","isPublicCapability","name","isScopedCapability","parseWebviewCapabilityDeclaration","nameAndScope","versionText","scopeIndex","validateDeclarationShape","parsed","unsupportedCapability","unsupportedVersion","version","undeclaredCapability","validateWebviewCapabilityDeclarations","diagnostics","allowed","allowedScopes","declaration","declaredCapabilities","capabilities","scopes","requestScope","params","request","createHostCapabilityGate","input","emit","deny","scope","handler","createWebviewHostProps","locale","props","isRecord$1","safeStringify","json","normalizeRuntimeError","message","stack","capabilityReply","run","details","extensionIframeAllow","collectChakraThemeVariables","computed","variables","index","resolveActiveTheme","fallback","colorMode","iframeStyle","frameShellStyle","EXTENSION_IFRAME_SANDBOX","ExtensionFrame","extensionProps","iframeRef","useRef","remoteRef","initializedRef","connectedWindowRef","propsRef","themeRef","theme","capabilitiesRef","onKeyboardEventRef","onKeyboardEvent","hostEventsRef","hostEvents","declaredCapabilitiesRef","onReadyRef","onReady","onErrorRef","onError","onDiagnosticsRef","onDiagnostics","frameEpoch","setFrameEpoch","useState","contentWidth","setContentWidth","useEffect","iframe","onFrameLoad","epoch","removeLoadListener","stylesAtConnect","moduleUrlAtConnect","reportDiagnostics","createCapabilityGate","hostApi","event","bounds","sizing","width","event_0","payload","connection","host","remote","conn","remote_0","message_0","frame","observer","options","title","EXTENSION_HOST_LOG_PREFIX","logExtensionHostDiagnostic","createWebviewDiagnostics","log","write","createHostEventPublisher","sink","pending","disconnectListeners","listener","BridgeWebviewFrame","$","c","frameProps","workbench","pageState","setPageState","t0","t1","t2","t3","page","t4","pageProps","setError","t5","t6","t7","Center","Stack","Text","t8","t9","t10","nextError","t11","t12","Box","runAccountOperation","account","createAccountCapability","TERMINAL_SESSION_EVENT_SCOPE","createTerminalSessionCapability","operation","terminal","unsubscribeTerminal","unsubscribeDisconnect","closed","close","sessionId","exit","id","session","edit","webviewEditingSessionParamsSchema","action","webviewNotificationActionParamsSchema","WebviewHostCapabilityError","code","data","identifier","empty","command","streamId","preference","notificationIdentity","binary","fileScope","terminalId","terminalRequest","schemas","parseWebviewCapabilityParams","issue","errorOutcome","failureOutcome","serialized","fail$1","MAX_STREAMS","MAX_UNREAD_BYTES","withFrameSignal","controller","unsubscribe","createWebviewCommandStreamHandler","streams","ended","finish","notify","_","_streamId","body","receive","response","deps","commandResponse","streamHandlers","streamHandler","events","done","commandExecution","adapters","executeCommand","signal","CommandOutcomeError","commandStreaming","streamCommand","editingSession","editing","getCommandValue","createExtensionWebviewHostCapabilities","terminalCapability","readHarnesses","pageParams","location","placement","notifications","preferences","files","artifacts","toCommandTarget","override","toWorkbenchNavigationTarget","isNavigationTarget","fail","ownerScope","owner","snapshot","document","publish","current","member","accepted","preview","previews","commit","rebased","cancel","refresh","createDocument","createSessions","documents","connections","clean","flush","revision","members","open","execute","joined","sessions","createWorkbenchEditingSessionAdapter","createWebviewPreferencesAdapter","registry","registered","schema","createChangeNotifier","stop","stopOnDisconnect","createWebviewResourceActions","watchChanges","menu","entries","entry","createWorkbenchWebviewHostAdapters","patch","createWorkbenchWebviewHostCapabilities","createLightTheme","hostEventPublishersByWorkbench","getBridgeWebviewHostEventPublisher","hostEventsByWidget","instance","renderBridgeWebviewFrame","ownerId","context","webview","createProps","createTheme","createHostAdapters","text$1","unwrapCommandValue","runResourceMutation","mutation","persist","execution","rawLabel","createExtensionSlot","executeWorkbenchExtensionCommandResponse","reportNavigationError","commandId","executeWorkbenchExtensionCommand","candidate","isProviderQueryResult","commandIdOf","activateTarget","targetResource","step","toResult","groupLabel","registerWorkbenchExtensionCommandPaletteResources","disposables","records","activeResource","localize$1","registerControlsRenderer","slot","adapter","fields","registerWorkbenchExtensionControlsRenderers","localizeParamSchema","descriptor","localizeOptionSource","ownerExtensionId","localize","commandRefId","mapViewToolbarActions","toColumn","column","createElement","isQueryResult$1","toRow","row","registerRenderer","builtIns","originalRows","modeId","rows","mapped","registerWorkbenchExtensionDataTableRenderers","placementOrder","emptyWorkbenchExtensionMetadata","defaultWorkbenchExtensionCommandId","contribution","defaultWorkbenchExtensionPaletteCommandId","contributionOrder","text","isLocalizedString","createMenuItem","resolveString","createPaletteItem","buildWorkbenchExtensionMenuRegistrations","registrations","unresolved","metadata","menuTargetsById","menuSlotsById","createCommandId","createWhenExpression","buildWorkbenchExtensionCommandPaletteRegistrations","slotContext$1","executeFileCommand","ext","extra","revisionFromValue","fileRendererRefreshEnvelopeFromCommand","origin","resourceKey","registerFileRenderer","loaded","registerWorkbenchExtensionFileRenderers","collectionBadgeTarget","itemsAttributeId","itemId","createBoardActionIcon","icon","toWorkbenchBoardColumnConfig","config","isQueryResult","localizeAttributes","attributes","display","attribute","knownDisplay","reportUnknownDisplay","resolveType","type","option","decorate","createMutableAttributeSource","initial","listeners","signature","nextSignature","isExtensionResource","defaultResolveRowResource","defaultResolveRowActionResource","fromRow","toWorkbenchRow","resolveResource","mergeParams","items","asParams$1","hasCommandParameters","CREATE_FIELD_TYPES","toCreateField","optional","toCreateFields","field","createKanbanRendererSlot","executeKanbanRendererCommand","commandResource","kanbanRendererRowActionCommandId","registerRowActionCommands","args","executionContext","runDefaultRowAction","label","createRowActionIcon","toCreateRowConfig","toRowClick","resolveRowResource","toActivatedRow","toCreateRowHandler","submission","created","runMutation","activateCreatedRow","toRowContextMenuActions","actions","resolveRowActionResource","runDefault","registerWorkbenchExtensionKanbanRenderers","withBuiltInDisplay","renderBadgeListDisplay","afterMutation","attributeId","wireAttributes","columnConfigs","latestQueryId","rowCache","rowResource","onRowActivate","groupKey","queryId","mapRows","nextCache","cached","nextAttributes","move","slotContext","createQueryParams","ctx","node","executeCallback","renderer","executeTreeActionCommand","treeViewsFor","resolveTreeView","panels","resolveHostTreeHeaderNodes","treeViews","getHostTreeHeaderNodes","resolveHostTreeFooterNodes","getHostTreeFooterNodes","extensionTreeStructure","section","toActionParams","toRecordParams","createTreeMapper","originalNodes","runnerCommandId","mapEmptyState","mapTarget","commandTarget","mapAction","actionParams","mapNode","child","nodes","sections","isTreeSectionArray","isTreeNodeArray","hostNodeSection","registerTree","mapper","commandDisposable","rawArgs","treeDisposable","hostHeader","extensionHeader","hostFooter","originalSource","originalTarget","originalNode","registerWorkbenchExtensionTreeRenderers","toOwner","contributionRefId","isVisible","expression","toNode","toSections","groupItems","groups","defaultExpandedGroupIds","registerItems","first","resourceDependent","registerTrees","viewId","tree","declarationIndex","registerWorkbenchExtensionNavigationItems","registerResourceKinds","opening","currentPlatform","platform","resolveExtensionKeybindingChord","binding","registerWorkbenchExtensionKeybindings","toWorkbenchWhenExpression","when","ids","pageSlot","pageMain","main","toInternalWorkbenchPages","resourceKindForView","bindings","viewBody","panelMenus","menus","commandActions","kanbanRenderers","dataTableRenderers","treeRenderers","fileRenderers","controlsRenderers","modes","mode","region","toInternalWorkbenchExtensionMetadata","adaptedPanels","refreshWorkbenchExtensionRenderer","envelope","rendererRefreshTargets","targets","add","eventId","eventTargets","registerWorkbenchExtensionRendererRefreshEvents","refreshOpenWorkbenchExtensionWebviews","createWorkbenchExtensionWebviewAdapters","toBridgeWebviewConfig","settingsSectionIdDefault","extensionSettingsOrderBase","asPreferenceValue","preferenceScope","createExtensionHostAdapters","createBase","webviewId","registerWebviewPanels","slotKind","settingsPanel","renderInput","viewMenuPlacementPriority","registerViewMenus","registerSettings","sectionId","left","right","definitions","setting","propertiesByOwner","properties","isRecord","navigationAction","toRows","toSnapshot","indicator","createWorkbenchExtensionTabPresentation","snapshots","instances","loading","refreshEvents","load","currentRevision","pendingLoad","resourceSubscription","affected","refreshSubscription","disposeAll","asParams","prepareCommandArgs","onArgsChange","registerCommands","menuCommandResource","registerMenus","defaultRegistrations","registration","menuPath","menuItem","registerCommandPaletteContributions","matchesResourceWhen","matchesActiveMode","active","registerStatusBarItems","registerPages","registerModes","registerModePlacements","registerWorkbenchExtensionContributions","sourceInput"],"sources":["../../pstdio-api-contracts/src/extension-kernel/workbench-targets.ts","../../pstdio-api-contracts/src/extensions/targets.ts","../../pstdio-api-contracts/src/extension-kernel/types/composition.ts","../../pstdio-api-contracts/src/extension-kernel/navigation-href.ts","../../pstdio-api-contracts/src/extensions/page-params-schema.ts","../../pstdio-api-contracts/src/extensions/workbench-refs-metadata.ts","../../pstdio-api-contracts/src/extensions/navigation-target-metadata.ts","../../pstdio-api-contracts/src/extensions/command-outcome.ts","../../pstdio-api-contracts/src/extensions/execute.ts","../../pstdio-api-contracts/src/extension-kernel/types/collection-view.ts","../../pstdio-api-contracts/src/extensions/collection-view.ts","../../pstdio-api-contracts/src/extension-kernel/types/data-table-renderer.ts","../../pstdio-api-contracts/src/extensions/collection-view-builtins.ts","../../pstdio-api-contracts/src/extensions/related-resource-opening.ts","../../pstdio-api-contracts/src/extension-kernel/editing-state.ts","../../pstdio-api-contracts/src/extension-kernel/l10n.ts","../../pstdio-api-contracts/src/extension-kernel/navigation.ts","../../pstdio-api-contracts/src/extension-kernel/serialize-error.ts","../../pstdio-api-contracts/src/extension-kernel/types/webview-capabilities.ts","../../pstdio-api-contracts/src/extension-kernel/webview-protocol.ts","../../pstdio-extensions/src/bridge/contract/capabilities.ts","../../pstdio-extensions/src/bridge/contract/host-props.ts","../../pstdio-extensions/src/bridge/normalize-error.ts","../../pstdio-extensions/src/bridge/host/capability-reply.ts","../../pstdio-extensions/src/bridge/host/iframe-permissions.ts","../../pstdio-extensions/src/bridge/host/theme.ts","../../pstdio-extensions/src/bridge/host/extension-frame.tsx","../../pstdio-extensions/src/bridge/host/host-diagnostics.ts","../../pstdio-extensions/src/bridge/host/host-event-publisher.ts","../src/extensions/bridge/bridge-webview-frame.tsx","../src/extensions/bridge/account-capability.ts","../src/extensions/bridge/terminal-session-capability.ts","../src/extensions/bridge/webview-editing-params.ts","../src/extensions/bridge/webview-notification-params.ts","../src/extensions/bridge/webview-capability-params.ts","../src/extensions/bridge/webview-command-streams.ts","../src/extensions/bridge/extension-webview-host-capabilities.ts","../src/extensions/host/extension-navigation-target.ts","../src/extensions/bridge/webview-editing-session.ts","../src/extensions/bridge/webview-preferences-capability.ts","../src/extensions/bridge/webview-resource-actions.ts","../src/extensions/bridge/webview-host-capabilities.ts","../src/extensions/bridge/bridge-webview-renderer.tsx","../../pstdio-extensions/src/workbench/shared/localization.ts","../src/extensions/host/command-response.ts","../src/extensions/host/workbench-resource-mutation.ts","../src/extensions/host/workbench-extension-command.ts","../src/extensions/contributions/command-palette-resource-contributions.ts","../src/extensions/contributions/controls-renderer-contributions.ts","../src/extensions/contributions/param-schema-localization.ts","../src/extensions/contributions/view-toolbar-actions.ts","../src/extensions/contributions/data-table-renderer-contributions.ts","../src/extensions/contributions/extension-contributions.ts","../src/extensions/contributions/file-renderer-contributions.ts","../src/extensions/contributions/collection-badge-navigation.ts","../src/extensions/contributions/kanban-renderer-board-config.ts","../src/extensions/contributions/kanban-renderer-contribution-helpers.ts","../src/extensions/contributions/kanban-renderer-contributions.ts","../src/extensions/contributions/tree-renderer-callbacks.ts","../src/extensions/contributions/tree-renderer-host-defaults.ts","../src/extensions/contributions/tree-renderer-structure.ts","../src/extensions/contributions/tree-renderer-contributions.ts","../src/extensions/contributions/navigation-item-contributions.ts","../src/extensions/host/resource-kind-contributions.ts","../src/extensions/host/workbench-extension-keybindings.ts","../src/extensions/host/workbench-extension-metadata-ref.ts","../src/extensions/host/workbench-extension-page-metadata.ts","../src/extensions/host/workbench-extension-metadata-adapter.ts","../src/extensions/host/workbench-extension-refresh.ts","../src/extensions/bridge/webview-command-capabilities.ts","../src/extensions/bridge/webview-contribution-config.ts","../src/extensions/host/workbench-extension-surfaces.ts","../src/extensions/host/workbench-extension-tab-presentation.ts","../src/extensions/host/workbench-extension-host.ts"],"sourcesContent":["export const workbenchMenuTargets = [\"workbench.nav.actions\", \"workbench.nav.overflow\"] as const;\n\nexport const workbenchTreeTargets = [\n \"workbench.left.tree\",\n \"workbench.main.left.tree\",\n \"workbench.main.right.tree\",\n] as const;\n\nexport const workbenchRegions = [\n \"nav\",\n \"activity\",\n \"sidenav\",\n \"main-header\",\n \"main\",\n \"secondary-header\",\n \"secondary\",\n \"side-header\",\n \"side\",\n \"status\",\n \"overlay\",\n] as const;\n\nexport const workbenchViewTargets = [\n \"workbench.main\",\n \"workbench.main.left\",\n \"workbench.main.right\",\n \"workbench.secondary\",\n] as const;\n\nexport const workbenchSettingsTargets = [\"workbench.settings\"] as const;\n\nexport const workbenchSettingsScopes = [\"project\", \"global\"] as const;\n\nexport const workbenchModeLayoutTargets = [\n \"workbench.left\",\n \"workbench.main.left\",\n \"workbench.main\",\n \"workbench.main.right\",\n \"workbench.secondary\",\n] as const;\n\nexport type WorkbenchMenuTarget = (typeof workbenchMenuTargets)[number];\nexport type WorkbenchTreeTarget = (typeof workbenchTreeTargets)[number];\nexport type WorkbenchViewTarget = (typeof workbenchViewTargets)[number];\nexport type WorkbenchSettingsTarget = (typeof workbenchSettingsTargets)[number];\n\nexport type WorkbenchAttachmentTarget =\n | WorkbenchMenuTarget\n | WorkbenchTreeTarget\n | WorkbenchViewTarget\n | WorkbenchSettingsTarget;\n","import { z } from \"zod\";\nimport {\n workbenchMenuTargets,\n workbenchModeLayoutTargets,\n workbenchRegions,\n workbenchSettingsScopes,\n workbenchSettingsTargets,\n workbenchTreeTargets,\n workbenchViewTargets,\n} from \"../extension-kernel/workbench-targets\";\n\nexport const workbenchMenuTargetSchema = z.enum(workbenchMenuTargets);\nexport const workbenchTreeTargetSchema = z.enum(workbenchTreeTargets);\nexport const workbenchRegionSchema = z.enum(workbenchRegions);\nexport const workbenchViewTargetSchema = z.enum(workbenchViewTargets);\nexport const workbenchSettingsTargetSchema = z.enum(workbenchSettingsTargets);\nexport const workbenchModeLayoutTargetSchema = z.enum(workbenchModeLayoutTargets);\nexport const workbenchAttachmentTargetSchema = z.union([\n workbenchMenuTargetSchema,\n workbenchTreeTargetSchema,\n workbenchViewTargetSchema,\n workbenchSettingsTargetSchema,\n]);\nexport const workbenchSettingsScopeSchema = z.enum(workbenchSettingsScopes);\n","import type { Localizable } from \"../l10n\";\nimport type { CommandRef } from \"./commands\";\nimport type { ExtensionContextBase } from \"./context\";\nimport type { ContributionDefinition, ResourceKindRef } from \"./contribution-identity\";\nimport type { MaybePromise } from \"./json\";\nimport type { ResourceRef, ViewHierarchyParent } from \"./resources\";\n\nexport const dockedWorkbenchRegions = [\"sidenav\", \"main\", \"secondary\", \"side\"] as const;\nexport type DockedWorkbenchRegion = (typeof dockedWorkbenchRegions)[number];\nexport const extensionPanelRegions = [\"main\", \"secondary\", \"side\"] as const;\nexport type ExtensionPanelRegion = (typeof extensionPanelRegions)[number];\n\nexport interface RegionSize {\n readonly defaultPx?: number;\n readonly minPx?: number;\n readonly maxPx?: number;\n}\n\nexport interface ResourceMenuSlotDefinition {\n readonly id: string;\n readonly placement: \"header-primary\" | \"header-overflow\" | \"context-menu\";\n readonly label?: Localizable<string>;\n readonly access: \"owner\" | \"public\";\n readonly order?: number;\n}\n\nexport interface ResourceKindDefinition extends ContributionDefinition<\"resource-kind\"> {\n readonly prefix?: string | { readonly $prefix: \"project\" };\n readonly label?: Localizable<string>;\n readonly icon?: string;\n readonly menuSlots?: readonly ResourceMenuSlotDefinition[];\n /**\n * A command of this extension that returns the current reference for an open\n * resource, or null. The host runs it with `ctx.resource` set to the open\n * resource when the page opens and after the extension emits an event, and\n * shows the returned label, icon, and metadata. Keep metadata the page owns,\n * such as a selected document, from `ctx.resource`.\n */\n readonly resolve?: CommandRef;\n /** Resolve params.resources as a bounded ResourceRef[] batch. Return ResourceResolution[] with owner navigation; omit missing resources. */\n readonly resolveMany?: CommandRef;\n /** Claim workspace-relative path prefixes. The owner command receives params.path and params.workspaceId and returns ResourceResolution or null. Longest matching prefix wins. */\n readonly paths?: readonly { readonly prefix: string; readonly resolve: CommandRef }[];\n /** Validate an explicit anchor change. Return ResourceAnchorValidationResult. Must not mutate links. */\n readonly validateAnchors?: CommandRef;\n /** Select related resources for an explicit source open. Return RelatedResourceOpenings using ctx.resource. */\n readonly relatedOpenings?: CommandRef;\n}\n\nexport interface ResourceHierarchyProvider extends ContributionDefinition<\"resource-hierarchy-provider\"> {\n resourceKind: ResourceKindRef;\n parent(ctx: ExtensionContextBase, resource: ResourceRef): MaybePromise<ResourceRef | ViewHierarchyParent | null>;\n}\n","export const isNavigationHref = (href: unknown) => {\n if (typeof href !== \"string\") return false;\n try {\n const { protocol } = new URL(href);\n return protocol === \"https:\" || protocol === \"http:\";\n } catch {\n return false;\n }\n};\n","import { z } from \"zod\";\nimport { validatePageParamDefinitions } from \"../extension-kernel/page-params\";\n\nexport const pageParamValueSchema = z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]);\nexport const pageParamDefinitionsSchema = z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"string\"),\n default: z.string().optional(),\n values: z.array(z.string()).readonly().optional(),\n })\n .strict(),\n z.object({ type: z.literal(\"number\"), default: z.number().optional() }).strict(),\n z.object({ type: z.literal(\"boolean\"), default: z.boolean().optional() }).strict(),\n z.object({ type: z.literal(\"string[]\"), default: z.array(z.string()).readonly().optional() }).strict(),\n ]),\n )\n .superRefine((value, ctx) => {\n try {\n validatePageParamDefinitions(value);\n } catch (error) {\n ctx.addIssue({ code: \"custom\", message: String(error) });\n }\n });\n","import { z } from \"zod\";\nimport { serializableJsonObjectSchema } from \"./common\";\n\nexport const contributionRefSchema = <Kind extends string>(kind: Kind) =>\n z.object({ extensionId: z.string(), kind: z.literal(kind), id: z.string() });\n\nexport const pageRefSchema = contributionRefSchema(\"page\");\nexport const placementRefSchema = contributionRefSchema(\"placement\");\nexport const modeRefSchema = contributionRefSchema(\"mode\");\nexport const viewRefSchema = contributionRefSchema(\"view\");\nexport const resourceKindRefSchema = contributionRefSchema(\"resource-kind\");\n\nexport const pageSlotRefSchema = z.object({\n kind: z.literal(\"page-slot\"),\n page: pageRefSchema,\n id: z.string(),\n});\n\nexport const panelRefSchema = z.union([placementRefSchema, pageSlotRefSchema]);\n\nexport const commandTargetSchema = z.object({\n command: contributionRefSchema(\"command\"),\n params: serializableJsonObjectSchema.optional(),\n});\n","import { z } from \"zod\";\nimport { isNavigationHref } from \"../extension-kernel/navigation-href\";\nimport { isFileSourcePosition } from \"../extension-kernel/source-position\";\nimport type { FileSourcePosition, PageParams } from \"../extension-kernel/types/pages\";\nimport { pageParamValueSchema } from \"./page-params-schema\";\nimport { extensionResourceRefSchema } from \"./resource-ref\";\nimport { commandTargetSchema, pageRefSchema, panelRefSchema } from \"./workbench-refs-metadata\";\n\nconst sourcePositionSchema = z\n .object({\n line: z.number().int().positive(),\n column: z.number().int().positive().optional(),\n endLine: z.number().int().positive().optional(),\n endColumn: z.number().int().positive().optional(),\n })\n .refine(isFileSourcePosition, \"Expected ordered source coordinates\");\n\nconst sectionSchema = z.object({\n anchors: z.array(\n z.object({ id: z.string(), heading: z.string(), occurrence: z.number().int().nonnegative().optional() }),\n ),\n});\n\nexport interface MetadataPageTarget {\n kind: \"page\";\n page: z.infer<typeof pageRefSchema>;\n resource?: z.infer<typeof extensionResourceRefSchema>;\n open?: \"preview\" | \"pin\";\n section?: z.infer<typeof sectionSchema>;\n position?: FileSourcePosition;\n params?: PageParams;\n parent?: MetadataPageTarget;\n}\n\nconst pageTargetSchema: z.ZodType<MetadataPageTarget> = z\n .lazy(() =>\n z\n .object({\n kind: z.literal(\"page\"),\n page: pageRefSchema,\n resource: extensionResourceRefSchema.optional(),\n open: z.enum([\"preview\", \"pin\"]).optional(),\n section: sectionSchema.optional(),\n position: sourcePositionSchema.optional(),\n params: z.record(z.string(), pageParamValueSchema).optional(),\n parent: pageTargetSchema.optional(),\n })\n .refine((value) => !(value.position && value.section), \"Choose a source position or a heading section\"),\n )\n .meta({ id: \"WorkbenchMetadataPageTarget\" });\n\nconst navigationOperationSchema = z.union([\n pageTargetSchema,\n z.object({\n kind: z.literal(\"panel\"),\n panel: panelRefSchema,\n resource: extensionResourceRefSchema.optional(),\n open: z.enum([\"preview\", \"pin\"]).optional(),\n }),\n]);\n\nexport const navigationTargetSchema = z.union([\n navigationOperationSchema,\n z.object({ kind: z.literal(\"command\"), target: commandTargetSchema }),\n z.object({ kind: z.literal(\"href\"), href: z.string().refine(isNavigationHref, \"Expected an HTTP or HTTPS URL\") }),\n z.object({ kind: z.literal(\"compound\"), targets: z.array(navigationOperationSchema).min(1) }),\n]);\n","import { z } from \"zod\";\nimport type { CommandOutcome, JsonValue, NavigationTarget } from \"../extension-kernel\";\nimport { serializableJsonObjectSchema } from \"./common\";\nimport { navigationTargetSchema } from \"./navigation-target-metadata\";\n\nconst notice = z.object({\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string(),\n metadata: serializableJsonObjectSchema.optional(),\n});\nconst diagnostic = z.object({\n code: z.string(),\n message: z.string(),\n severity: z.enum([\"info\", \"warning\", \"error\"]),\n extensionId: z.string().optional(),\n commandId: z.string().optional(),\n metadata: serializableJsonObjectSchema.optional(),\n});\nexport const createCommandOutcomeSchema = (jsonValue: z.ZodType<JsonValue>) => {\n const error = z.object({\n name: z.string().optional(),\n message: z.string(),\n stack: z.string().optional(),\n cause: jsonValue.optional(),\n });\n const annotations = {\n notices: z.array(notice).optional(),\n diagnostics: z.array(diagnostic).optional(),\n };\n const failure = {\n ...annotations,\n ok: z.literal(false),\n code: z.string().optional(),\n reason: z.string(),\n data: serializableJsonObjectSchema.optional(),\n cause: jsonValue.optional(),\n error: error.optional(),\n };\n const navigation: z.ZodType<NavigationTarget> = navigationTargetSchema;\n\n const outcome: z.ZodType<CommandOutcome> = z.discriminatedUnion(\"status\", [\n z\n .object({\n ...annotations,\n ok: z.literal(true),\n status: z.literal(\"success\"),\n value: z.unknown().optional(),\n navigationRequests: z.array(navigation).optional(),\n })\n .transform((outcome) => ({ ...outcome, value: outcome.value })),\n z.object({ ...failure, status: z.literal(\"rejected\") }),\n z.object({ ...failure, status: z.literal(\"error\") }),\n ]);\n\n return outcome;\n};\n\nexport const validatedCommandOutcomeSchema = createCommandOutcomeSchema(z.json());\n","import { z } from \"zod\";\nimport type { JsonValue, NavigationTarget, Struct } from \"../extension-kernel\";\nimport { createCommandOutcomeSchema, validatedCommandOutcomeSchema } from \"./command-outcome\";\nimport { commandSourceSchema, extensionSlotKindSchema, jsonObjectSchema } from \"./common\";\nimport { navigationTargetSchema } from \"./navigation-target-metadata\";\nimport { pageParamValueSchema } from \"./page-params-schema\";\nimport { extensionResourceRefSchema } from \"./resource-ref\";\nimport { workbenchAttachmentTargetSchema } from \"./targets\";\n\nexport { extensionResourceRefSchema } from \"./resource-ref\";\n\nexport const extensionSlotInvocationSchema = z.object({\n id: z.string(),\n kind: extensionSlotKindSchema,\n context: jsonObjectSchema,\n});\n\nexport const extensionAttachmentInvocationSchema = z.object({\n target: workbenchAttachmentTargetSchema,\n mode: z.string().optional(),\n projectId: z.string().optional(),\n resource: extensionResourceRefSchema.optional(),\n});\n\nexport const extensionRendererContextSchema = z.object({\n rendererId: z.string(),\n pageParams: z.record(z.string(), pageParamValueSchema).optional(),\n projectId: z.string().optional(),\n modeId: z.string().optional(),\n resource: extensionResourceRefSchema.optional(),\n invocation: z.object({ placement: z.enum([\"visible\", \"background\"]) }).optional(),\n});\n\nexport const commandExecuteRequestSchema = z.object({\n projectId: z.string().min(1),\n workspaceId: z.string().optional(),\n params: jsonObjectSchema.optional(),\n resource: extensionResourceRefSchema.optional(),\n attachment: extensionAttachmentInvocationSchema.optional(),\n slot: extensionSlotInvocationSchema.optional(),\n source: commandSourceSchema.optional(),\n metadata: jsonObjectSchema.optional(),\n});\n\nexport const commandExecuteBodySchema = z.object({\n workspaceId: z.string().optional(),\n params: jsonObjectSchema.optional(),\n resource: extensionResourceRefSchema.optional(),\n attachment: extensionAttachmentInvocationSchema.optional(),\n slot: extensionSlotInvocationSchema.optional(),\n source: commandSourceSchema.optional(),\n metadata: jsonObjectSchema.optional(),\n});\n\nexport const dispatchExtensionEventBodySchema = z\n .object({\n eventId: z.string().min(1),\n payload: jsonObjectSchema,\n })\n .strict();\n\nexport { validatedCommandOutcomeSchema };\n\nconst responseNavigationTargetSchema: z.ZodType<NavigationTarget> = navigationTargetSchema;\n/** @deprecated Use validatedCommandOutcomeSchema. */\nexport const commandOutcomeSchema = z.object({\n ok: z.boolean(),\n status: z.enum([\"success\", \"rejected\", \"error\"]),\n value: z.unknown().optional(),\n navigationRequests: z.array(responseNavigationTargetSchema).optional(),\n code: z.string().optional(),\n reason: z.string().optional(),\n data: jsonObjectSchema.optional(),\n error: z.object({ name: z.string().optional(), message: z.string(), stack: z.string().optional() }).optional(),\n notices: z\n .array(\n z.object({\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string(),\n metadata: jsonObjectSchema.optional(),\n }),\n )\n .optional(),\n diagnostics: z\n .array(\n z.object({\n code: z.string(),\n message: z.string(),\n severity: z.enum([\"info\", \"warning\", \"error\"]),\n extensionId: z.string().optional(),\n commandId: z.string().optional(),\n metadata: jsonObjectSchema.optional(),\n }),\n )\n .optional(),\n});\n\nconst responseFields = {\n commandId: z.string(),\n extensionId: z.string(),\n eventIds: z.array(z.string()).optional(),\n};\n/** @deprecated Use commandExecutionResultSchema. */\nexport const commandExecuteResponseSchema = z.object({\n ...responseFields,\n outcome: commandOutcomeSchema,\n});\nexport const createCommandExecutionResultSchema = (jsonValue: z.ZodType<JsonValue>) =>\n z.object({ ...responseFields, outcome: createCommandOutcomeSchema(jsonValue) });\n\nexport const commandExecutionResultSchema = createCommandExecutionResultSchema(z.json());\n\nexport type CommandExecuteRequest = z.infer<typeof commandExecuteRequestSchema>;\nexport type CommandExecuteBody = z.infer<typeof commandExecuteBodySchema>;\n/** @deprecated Use CommandExecutionResult. */\nexport type CommandExecuteResponse = z.infer<typeof commandExecuteResponseSchema>;\nexport type CommandExecutionResult = z.infer<typeof commandExecutionResultSchema>;\nexport type ExtensionRendererContext = z.infer<typeof extensionRendererContextSchema>;\nexport type DispatchExtensionEventInput = {\n eventId: string;\n payload: Struct;\n};\n","/** A condition that a filter rule applies to one field. Each field kind accepts a fixed list. */\nexport type ViewFilterCondition =\n | \"contains\"\n | \"does-not-contain\"\n | \"is\"\n | \"is-not\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"is-before\"\n | \"is-after\"\n | \"is-on-or-before\"\n | \"is-on-or-after\"\n | \"is-any-of\"\n | \"is-none-of\"\n | \"has-any-of\"\n | \"has-all-of\"\n | \"has-none-of\"\n | \"is-empty\"\n | \"is-not-empty\";\n\n// Views travel through command params, so these are type aliases: they stay assignable to JSON values.\nexport type ViewFilterRule = {\n attributeId: string;\n condition: ViewFilterCondition;\n /**\n * Text, a number, a day (\"2026-10-02\", \"today\", \"today-7\", \"today+7\"),\n * or option values. Absent for is-empty and is-not-empty.\n */\n value?: boolean | string | number | string[];\n};\n\nexport type ViewFilterGroup = {\n conjunction: \"and\" | \"or\";\n /** Normal rules share this conjunction. */\n rules: ViewFilterRule[];\n /** Advanced groups have one level and combine with the normal rules using AND. */\n groups?: { conjunction: \"and\" | \"or\"; rules: ViewFilterRule[] }[];\n};\n\nexport type ViewSortDirection = \"asc\" | \"desc\";\n\nexport type ViewSort = {\n attributeId: string;\n direction: ViewSortDirection;\n};\n\nexport type ViewFieldKind = \"string\" | \"number\" | \"boolean\" | \"date\" | \"enum\" | \"status\" | \"enum-multi\" | \"user\";\n\nconst optionConditions: readonly ViewFilterCondition[] = [\"is-any-of\", \"is-none-of\", \"is-empty\", \"is-not-empty\"];\n\n/** The only list of conditions. The UI, the views API, and the CLI all read it. */\nexport const VIEW_FILTER_CONDITIONS: Record<ViewFieldKind, readonly ViewFilterCondition[]> = {\n boolean: [\"is\", \"is-not\", \"is-empty\", \"is-not-empty\"],\n string: [\"contains\", \"does-not-contain\", \"is\", \"is-not\", \"is-empty\", \"is-not-empty\"],\n number: [\"is\", \"is-not\", \"gt\", \"gte\", \"lt\", \"lte\", \"is-empty\", \"is-not-empty\"],\n date: [\"is\", \"is-before\", \"is-after\", \"is-on-or-before\", \"is-on-or-after\", \"is-empty\", \"is-not-empty\"],\n enum: optionConditions,\n status: optionConditions,\n user: optionConditions,\n \"enum-multi\": [\"has-any-of\", \"has-all-of\", \"has-none-of\", \"is-empty\", \"is-not-empty\"],\n};\n","import { z } from \"zod\";\nimport {\n VIEW_FILTER_CONDITIONS,\n type ViewFieldKind,\n type ViewFilterCondition,\n type ViewFilterGroup,\n type ViewFilterRule,\n type ViewSort,\n} from \"../extension-kernel/types/collection-view\";\n\nexport const EMPTY_VIEW_FILTER: ViewFilterGroup = { conjunction: \"and\", rules: [] };\nexport const VIEW_DAY_PATTERN = /^(\\d{4}-\\d{2}-\\d{2}|today([+-]\\d+)?)$/;\n\nconst conditionIds = [...new Set(Object.values(VIEW_FILTER_CONDITIONS).flat())] as [\n ViewFilterCondition,\n ...ViewFilterCondition[],\n];\n\nexport const viewFilterConditionSchema = z.enum(conditionIds);\n\nexport const viewFilterRuleSchema = z.object({\n attributeId: z.string().min(1),\n condition: viewFilterConditionSchema,\n value: z.union([z.boolean(), z.string(), z.number(), z.array(z.string())]).optional(),\n});\nconst advancedFilterGroupSchema = z.strictObject({\n conjunction: z.enum([\"and\", \"or\"]),\n rules: z.array(viewFilterRuleSchema),\n});\nexport const viewFilterGroupSchema = advancedFilterGroupSchema\n .extend({\n groups: z.array(advancedFilterGroupSchema).optional(),\n })\n .refine((filter) => !filter.groups?.length || filter.conjunction === \"and\", {\n message: \"Normal rules and advanced groups combine using AND\",\n });\n\nconst viewSortSchema = z.object({ attributeId: z.string().min(1), direction: z.enum([\"asc\", \"desc\"]) });\nexport const viewSortsSchema = z.array(viewSortSchema).max(1, \"A view allows only one sort\");\n\n/** What a rule's value must be for a condition the field kind accepts. */\nexport const viewFilterValueKind = (kind: ViewFieldKind, condition: ViewFilterCondition) => {\n if (condition === \"is-empty\" || condition === \"is-not-empty\") return \"none\" as const;\n if (condition === \"is-any-of\" || condition === \"is-none-of\") return \"options\" as const;\n if (kind === \"boolean\") return \"boolean\" as const;\n if (kind === \"number\") return \"number\" as const;\n if (kind === \"date\") return \"day\" as const;\n if (kind === \"string\") return \"text\" as const;\n return \"options\" as const;\n};\n\nconst valueNeeds = {\n none: \"takes no value\",\n boolean: \"needs a boolean\",\n number: \"needs a number\",\n day: \"needs a day such as 2026-10-02, today, or today-7\",\n text: \"needs text\",\n options: \"needs a list of option values\",\n};\n\n/** A missing value marks a rule that is still being built. The renderer ignores it. */\nconst valueFits = (value: ViewFilterRule[\"value\"], kind: ReturnType<typeof viewFilterValueKind>) => {\n if (value === undefined) return true;\n if (kind === \"none\") return false;\n if (kind === \"boolean\") return typeof value === \"boolean\";\n if (kind === \"number\") return typeof value === \"number\" && Number.isFinite(value);\n if (kind === \"day\") return typeof value === \"string\" && VIEW_DAY_PATTERN.test(value);\n if (kind === \"text\") return typeof value === \"string\";\n return Array.isArray(value);\n};\n\nexport interface ViewRuleField {\n id: string;\n kind: ViewFieldKind;\n filterable: boolean;\n sortable: boolean;\n options?: { value: string }[];\n}\n\n/** enum-multi fields hold several values, so one order does not exist. */\nexport const canSortViewField = (field: Pick<ViewRuleField, \"kind\" | \"sortable\">) =>\n field.sortable && field.kind !== \"enum-multi\";\n\nconst ruleProblem = (rule: ViewFilterRule, fields: ViewRuleField[]) => {\n const filterable = fields.filter((field) => field.filterable);\n const field = filterable.find((field) => field.id === rule.attributeId);\n if (!field)\n return `Invalid filter field \"${rule.attributeId}\". Valid IDs: ${filterable.map((field) => field.id).join(\", \")}`;\n const conditions = VIEW_FILTER_CONDITIONS[field.kind];\n // Deprecated filter maps used exact value lists on scalar fields too. Keep them editable.\n const legacyList =\n [\"is-any-of\", \"is-none-of\"].includes(rule.condition) && [\"string\", \"number\", \"date\"].includes(field.kind);\n if (!conditions.includes(rule.condition) && !legacyList)\n return `Field \"${field.id}\" does not accept \"${rule.condition}\". Valid conditions: ${conditions.join(\", \")}`;\n const valueKind = viewFilterValueKind(field.kind, rule.condition);\n if (!valueFits(rule.value, valueKind))\n return `Condition \"${rule.condition}\" on \"${field.id}\" ${valueNeeds[valueKind]}`;\n const options = field.options;\n const values = Array.isArray(rule.value) ? rule.value : [];\n const unknown = options ? values.find((value) => !options.some((option) => option.value === value)) : undefined;\n if (options && unknown !== undefined)\n return `Invalid filter value \"${unknown}\" for \"${field.id}\". Valid values: ${options.map((option) => option.value).join(\", \")}`;\n return undefined;\n};\n\n/** The first reason the filter does not fit the fields, or undefined. */\nexport const findViewFilterProblem = (filter: ViewFilterGroup, fields: ViewRuleField[]) => {\n for (const rule of [...filter.rules, ...(filter.groups ?? []).flatMap((group) => group.rules)]) {\n const problem = ruleProblem(rule, fields);\n if (problem) return problem;\n }\n return undefined;\n};\n\n/** The first reason the sorts do not fit the fields, or undefined. */\nexport const findViewSortsProblem = (sorts: ViewSort[], fields: ViewRuleField[]) => {\n if (sorts.length > 1) return \"A view allows only one sort\";\n const sortable = fields.filter(canSortViewField).map((field) => field.id);\n for (const sort of sorts) {\n if (!sortable.includes(sort.attributeId))\n return `Invalid sort field \"${sort.attributeId}\". Valid IDs: ${sortable.join(\", \")}`;\n }\n return undefined;\n};\n","import type { Localizable } from \"../l10n\";\nimport type { ViewFilterGroup, ViewSort } from \"./collection-view\";\nimport type { CommandRef } from \"./commands\";\nimport type { RendererCallback } from \"./context\";\nimport type { JsonValue, Struct } from \"./json\";\nimport type { RendererContributionBase } from \"./renderer-base\";\nimport type { RendererContext, ResourceRef } from \"./resources\";\nimport type { ViewToolbarAction } from \"./view-toolbar-action\";\n\nexport type DataTableRendererResourceRef = ResourceRef;\n\n/** Display settings stored in a data table view. */\nexport interface DataTableRendererSettings {\n /** A groupable column id, or \"none\". */\n grouping: string;\n rowNumbers: boolean;\n wrapRows: boolean;\n showStats: boolean;\n hiddenColumns: string[];\n /** Column ids in display order. An empty list means the declared order. */\n columnOrder: string[];\n}\n\n/** What a data table view shows until a contribution or a saved view says otherwise. */\nexport const DEFAULT_DATA_TABLE_SETTINGS: DataTableRendererSettings = {\n grouping: \"none\",\n rowNumbers: true,\n wrapRows: false,\n showStats: true,\n hiddenColumns: [],\n columnOrder: [],\n};\n\nexport interface DataTableRendererSavedView {\n id: string;\n title: Localizable<string>;\n settings?: Partial<DataTableRendererSettings>;\n filter?: ViewFilterGroup;\n sorts?: ViewSort[];\n}\n\nexport interface DataTableRendererQueryParams {\n renderer: RendererContext;\n /** The view's full filter. Use it only to narrow what you load; the renderer applies it to the rows you return. */\n filter: ViewFilterGroup;\n /** The view's sorts, first level first. The renderer applies them to the rows you return. */\n sorts: ViewSort[];\n settings: DataTableRendererSettings;\n}\n\nexport interface DataTableRendererThemeColor {\n light: string;\n dark: string;\n foreground?: { light: string; dark: string };\n}\n\nexport type DataTableRendererColumnStat =\n | { type: \"unique\" }\n | { type: \"histogram\"; bins?: number }\n | { type: \"top-values\"; limit?: number };\n\nexport type DataTableRendererColumnRenderer =\n | { type: \"json\" }\n | { type: \"color-scale\"; stops: Array<{ value: number; color: DataTableRendererThemeColor }> }\n | {\n type: \"categorical-color\";\n categories: Array<{\n value: string | number | boolean | null;\n color: DataTableRendererThemeColor;\n }>;\n };\n\nexport interface DataTableRendererColumn {\n id: string;\n label?: Localizable<string>;\n /** How filters and sorts compare the column. Without it, the type is inferred from the values. */\n type?: \"string\" | \"number\" | \"boolean\" | \"date\";\n /** Offers the column under Grouping in the table's Display menu. */\n groupable?: boolean;\n /** Whether this column can be filtered. Defaults to true. */\n filterable?: boolean;\n description?: Localizable<string>;\n icon?: string;\n hidden?: boolean;\n stat?: DataTableRendererColumnStat;\n renderer?: DataTableRendererColumnRenderer;\n}\n\nexport interface DataTableRendererRow {\n id: string;\n values: Record<string, JsonValue>;\n resource?: DataTableRendererResourceRef;\n}\n\nexport interface DataTableRendererQueryResult {\n rows: DataTableRendererRow[];\n columns?: DataTableRendererColumn[];\n}\n\nexport interface DataTableRendererRowAction<TParams extends Struct = Struct> {\n id: string;\n label: Localizable<string>;\n icon?: string;\n destructive?: boolean;\n command: CommandRef<TParams, unknown>;\n}\n\nexport interface DataTableRendererSelectionAction<TParams extends Struct = Struct> {\n id: string;\n label: Localizable<string>;\n icon?: string;\n destructive?: boolean;\n command: CommandRef<TParams, unknown>;\n}\n\nexport type DataTableRendererRowActivationHandler = RendererCallback<{ row: DataTableRendererRow }, void>;\n\nexport interface DataTableRendererContribution extends RendererContributionBase {\n toolbarActions?: ViewToolbarAction[];\n columns?: DataTableRendererColumn[];\n query: RendererCallback<DataTableRendererQueryParams, DataTableRendererQueryResult>;\n selectionMode?: \"none\" | \"multiple\";\n selectionActions?: DataTableRendererSelectionAction[];\n rowActions?: DataTableRendererRowAction[];\n onRowActivate?: DataTableRendererRowActivationHandler;\n initialPageSize?: number;\n pageSizeOptions?: number[];\n defaultSettings?: Partial<DataTableRendererSettings>;\n defaultFilter?: ViewFilterGroup;\n defaultSorts?: ViewSort[];\n defaultViews?: DataTableRendererSavedView[];\n defaultActiveViewId?: string;\n}\n","import type { Localizable } from \"../extension-kernel/l10n\";\nimport type {\n DataTableRendererSettings,\n KanbanRendererViewSettings,\n ViewFilterGroup,\n ViewSort,\n} from \"../extension-kernel/types\";\nimport { DEFAULT_DATA_TABLE_SETTINGS } from \"../extension-kernel/types/data-table-renderer\";\nimport { EMPTY_VIEW_FILTER } from \"./collection-view\";\n\nexport type KanbanViewSettings = KanbanRendererViewSettings;\n\nexport const DEFAULT_KANBAN_VIEW_SETTINGS: KanbanViewSettings = {\n viewMode: \"board\",\n columnGrouping: \"none\",\n rowGrouping: \"none\",\n displayProperties: [],\n};\n\ninterface DeclaredView<TSettings> {\n id: string;\n title: Localizable<string>;\n settings?: Partial<TSettings>;\n filter?: ViewFilterGroup;\n sorts?: ViewSort[];\n}\n\ninterface DeclaredViews<TSettings> {\n defaultSettings?: Partial<TSettings>;\n defaultFilter?: ViewFilterGroup;\n defaultSorts?: ViewSort[];\n defaultViews?: DeclaredView<TSettings>[];\n}\n\nconst builtInViews = <TSettings>(base: TSettings, record: DeclaredViews<TSettings>) => {\n const settings: TSettings = { ...base, ...record.defaultSettings };\n if (!record.defaultViews?.length)\n return {\n settings,\n views: [\n {\n id: \"default\",\n title: \"All\" as Localizable<string>,\n settings,\n filter: record.defaultFilter ?? EMPTY_VIEW_FILTER,\n sorts: record.defaultSorts ?? [],\n builtIn: true,\n },\n ],\n };\n return {\n settings,\n views: record.defaultViews.map((view) => ({\n ...view,\n settings: { ...settings, ...view.settings } as TSettings,\n filter: view.filter ?? EMPTY_VIEW_FILTER,\n sorts: view.sorts ?? [],\n builtIn: true,\n })),\n };\n};\n\n/** The views a board offers before anyone saves one. Titles are returned unlocalized. */\nexport const kanbanBuiltInViews = (\n record: DeclaredViews<KanbanViewSettings> & { attributes?: { id: string; type: { kind: string } }[] },\n) => {\n return builtInViews(DEFAULT_KANBAN_VIEW_SETTINGS, record);\n};\n\n/** The views a data table offers before anyone saves one. Titles are returned unlocalized. */\nexport const dataTableBuiltInViews = (record: DeclaredViews<DataTableRendererSettings>) =>\n builtInViews(DEFAULT_DATA_TABLE_SETTINGS, record);\n","import { z } from \"zod\";\nimport { extensionPanelRegions } from \"../extension-kernel/types/composition\";\nimport { extensionResourceRefSchema } from \"./resource-ref\";\n\nexport const relatedResourceOpeningSchema = z.object({\n resource: extensionResourceRefSchema,\n autoOpen: z.boolean().optional(),\n region: z.enum(extensionPanelRegions),\n open: z.enum([\"preview\", \"pin\"]).optional(),\n});\n","import type { JsonObject, JsonValue } from \"./types/json\";\nimport type { WebviewEditingChange } from \"./types/webview-editing\";\n\nconst record = (value: unknown): value is JsonObject =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\n\nexport const diffEditingState = (before: object, after: object, path: string[] = []) => {\n const changes: WebviewEditingChange[] = [];\n if (Object.keys(before).some((key) => !Object.hasOwn(after, key))) return [{ path, value: after as JsonObject }];\n for (const [key, value] of Object.entries(after)) {\n const previous = (before as Record<string, unknown>)[key];\n if (JSON.stringify(previous) === JSON.stringify(value)) continue;\n const nextPath = [...path, key];\n if (previous !== undefined && record(previous) && record(value))\n changes.push(...diffEditingState(previous, value, nextPath));\n else changes.push({ path: nextPath, value: value as JsonValue });\n }\n return changes;\n};\n\nexport const applyEditingChanges = <State extends object>(state: State, changes: WebviewEditingChange[]) => {\n let next = structuredClone(state) as JsonObject;\n for (const change of changes) {\n if (change.path.some((key) => [\"__proto__\", \"constructor\", \"prototype\"].includes(key)))\n throw new Error(\"Invalid editing path\");\n if (change.path.length === 0) {\n if (!record(change.value)) throw new Error(\"The editing state root must be an object\");\n next = structuredClone(change.value);\n continue;\n }\n let target = next;\n for (const key of change.path.slice(0, -1)) {\n if (target[key] === undefined) target[key] = {};\n if (!record(target[key])) throw new Error(\"Editing paths must traverse objects\");\n target = target[key] as JsonObject;\n }\n target[change.path.at(-1)!] = structuredClone(change.value);\n }\n return next as State;\n};\n\n/** Rebase independent drafts, dropping whole drafts whose paths no longer apply. */\nexport const rebaseEditingChanges = <State extends object, Key>(\n state: State,\n drafts: Map<Key, WebviewEditingChange[]>,\n) => {\n let value = state;\n const applicable = new Map<Key, WebviewEditingChange[]>();\n for (const [key, changes] of drafts) {\n try {\n value = applyEditingChanges(value, changes);\n applicable.set(key, changes);\n } catch {\n // A structural edit can remove the object a pending gesture was editing.\n }\n }\n return { value, drafts: applicable };\n};\n","export interface LocalizedString {\n readonly $l10n: string;\n readonly default?: string;\n}\n\nexport type Localizable<T extends string = string> = T | LocalizedString;\n\nexport const l10n = (key: string, defaultValue?: string) => ({\n $l10n: key,\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n});\n\nexport const isLocalizedString = (value: unknown): value is LocalizedString =>\n typeof value === \"object\" &&\n value !== null &&\n \"$l10n\" in value &&\n typeof (value as { $l10n?: unknown }).$l10n === \"string\";\n","import { isNavigationHref } from \"./navigation-href\";\nimport { isFileSourcePosition } from \"./source-position\";\nimport type { NavigationTarget } from \"./types/navigation-target\";\nimport type { ResourceRef } from \"./types/resources\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n\nconst isContributionRef = (value: unknown, kind: string) =>\n isRecord(value) && value.kind === kind && typeof value.id === \"string\";\n\nconst isResource = (value: unknown) =>\n isRecord(value) && typeof value.type === \"string\" && typeof value.id === \"string\";\n\nconst isOpenIntent = (value: unknown) => value === undefined || value === \"preview\" || value === \"pin\";\n\nconst isPageTarget = (value: unknown, ancestors = new Set<unknown>()): boolean => {\n if (!isRecord(value) || value.kind !== \"page\" || !isContributionRef(value.page, \"page\")) return false;\n if (ancestors.has(value)) return false;\n if (value.resource !== undefined && !isResource(value.resource)) return false;\n if (value.section !== undefined && !isRecord(value.section)) return false;\n if (value.position !== undefined && (!isFileSourcePosition(value.position) || value.section !== undefined))\n return false;\n if (!isOpenIntent(value.open)) return false;\n if (value.parent === undefined) return true;\n const next = new Set(ancestors);\n next.add(value);\n return isPageTarget(value.parent, next);\n};\n\nconst isPanelTarget = (value: unknown) => {\n if (!isRecord(value) || value.kind !== \"panel\" || !isRecord(value.panel)) return false;\n const panel = value.panel;\n const validPanel =\n isContributionRef(panel, \"placement\") ||\n (panel.kind === \"page-slot\" && isContributionRef(panel.page, \"page\") && typeof panel.id === \"string\");\n return validPanel && (value.resource === undefined || isResource(value.resource)) && isOpenIntent(value.open);\n};\n\nconst isItemTarget = (value: unknown): value is Exclude<NavigationTarget, { kind: \"compound\" }> => {\n if (!isRecord(value)) return false;\n if (value.kind === \"page\") return isPageTarget(value);\n if (value.kind === \"panel\") return isPanelTarget(value);\n if (value.kind === \"href\") return isNavigationHref(value.href);\n return (\n value.kind === \"command\" &&\n isRecord(value.target) &&\n isContributionRef(value.target.command, \"command\") &&\n (value.target.params === undefined || isRecord(value.target.params))\n );\n};\n\nexport const isNavigationTarget = (value: unknown): value is NavigationTarget => {\n if (isItemTarget(value)) return true;\n if (!isRecord(value) || value.kind !== \"compound\" || !Array.isArray(value.targets) || value.targets.length === 0) {\n return false;\n }\n return value.targets.every((target) => isPageTarget(target) || isPanelTarget(target));\n};\n\nconst withExtensionOwner = <Ref extends { extensionId?: string }>(ref: Ref, extensionId: string | undefined): Ref =>\n ref.extensionId !== undefined || extensionId === undefined ? ref : ({ ...ref, extensionId } as Ref);\n\nconst toPageTarget = (\n target: Extract<NavigationTarget, { kind: \"page\" }>,\n extensionId: string | undefined,\n projectId?: string,\n): Extract<NavigationTarget, { kind: \"page\" }> => ({\n ...target,\n page: withExtensionOwner(target.page, extensionId),\n ...(target.resource ? { resource: qualifyResource(target.resource, extensionId, projectId) } : {}),\n ...(target.parent ? { parent: toPageTarget(target.parent, extensionId, projectId) } : {}),\n});\n\nconst qualifyResource = (resource: ResourceRef, extensionId?: string, projectId?: string) => ({\n ...resource,\n extensionId: resource.extensionId ?? extensionId,\n projectId: resource.projectId ?? projectId,\n});\n\nexport const qualifyNavigationTarget = (\n target: NavigationTarget,\n extensionId: string,\n projectId?: string,\n): NavigationTarget => {\n if (!isNavigationTarget(target)) throw new Error(\"Invalid navigation target.\");\n if (target.kind === \"page\") return toPageTarget(target, extensionId, projectId);\n if (target.kind === \"panel\")\n return {\n ...target,\n panel:\n target.panel.kind === \"page-slot\"\n ? { ...target.panel, page: withExtensionOwner(target.panel.page, extensionId) }\n : withExtensionOwner(target.panel, extensionId),\n ...(target.resource ? { resource: qualifyResource(target.resource, extensionId, projectId) } : {}),\n };\n if (target.kind === \"command\")\n return { ...target, target: { ...target.target, command: withExtensionOwner(target.target.command, extensionId) } };\n if (target.kind === \"href\") return target;\n return {\n ...target,\n targets: target.targets.map(\n (item) =>\n qualifyNavigationTarget(item, extensionId, projectId) as Extract<NavigationTarget, { kind: \"page\" | \"panel\" }>,\n ),\n };\n};\n","import type { SerializedError } from \"./types/commands\";\n\nexport const serializeCommandError = (error: unknown) => {\n const ancestors: object[] = [];\n const shape = (value: Error) => ({\n ...value,\n name: value.name,\n message: value.message,\n ...(value.stack ? { stack: value.stack } : {}),\n ...(value.cause !== undefined ? { cause: value.cause } : {}),\n });\n const shapes = new WeakMap<Error, ReturnType<typeof shape>>();\n const errorShape = (value: Error) => {\n const existing = shapes.get(value);\n if (existing) return existing;\n const result = shape(value);\n shapes.set(value, result);\n return result;\n };\n const source = error instanceof Error ? errorShape(error) : { message: String(error) };\n const result: SerializedError = JSON.parse(\n JSON.stringify(source, function (this: unknown, _key, value: unknown) {\n const normalized = value instanceof Error ? errorShape(value) : value;\n if (typeof normalized === \"bigint\") return String(normalized);\n if (normalized && typeof normalized === \"object\") {\n while (ancestors.length && ancestors.at(-1) !== this) ancestors.pop();\n if (ancestors.includes(normalized)) return \"[Circular]\";\n ancestors.push(normalized);\n }\n return normalized;\n }),\n );\n return result;\n};\n","import type { AgentInfo, AgentModel, HarnessParamsInfo } from \"../../agents\";\nimport type { TerminalSessionOperation, TerminalSessionResult } from \"../../extensions.terminal\";\nimport type { CreateNotificationInput, Notification, NotificationStatus } from \"../../notifications/types\";\nimport type { ExtensionAccountApi } from \"./account\";\nimport type { CommandNotice, CommandOutcome } from \"./commands\";\nimport type { ExtensionBlobRef } from \"./context\";\nimport type { JsonObject, JsonValue } from \"./json\";\nimport type { NavigationTarget } from \"./navigation-target\";\nimport type { PageLocation, PageParamValue } from \"./pages\";\nimport type { ResourceRef } from \"./resources\";\nimport type { ExtensionHarnessInput } from \"./sessions\";\nimport type { WebviewEditingSessionParams, WebviewEditingSnapshot } from \"./webview-editing\";\n\nexport type { ExtensionBlobRef } from \"./context\";\n\nexport const WEBVIEW_HOST_CAPABILITY_VERSION = 1;\n\n// Capabilities a webview must declare in its manifest before the bridge will route them.\nexport const WEBVIEW_DECLARABLE_CAPABILITIES = [\n \"clipboard.write\",\n \"commands.execute\",\n \"commands.stream\",\n \"editing.session\",\n \"harnesses.read\",\n \"resources.actions\",\n \"navigation.open\",\n \"page.params.update\",\n \"placement.close\",\n \"notification.show\",\n \"notification.action\",\n \"notification.resolve\",\n \"notification.dismiss\",\n \"preferences.get\",\n \"preferences.set\",\n \"extension.settings.all\",\n \"extension.settings.get\",\n \"extension.settings.set\",\n \"extension.settings.delete\",\n \"terminal.session\",\n \"files.upload\",\n \"files.list\",\n \"files.delete\",\n \"account.read\",\n \"account.manage\",\n] as const;\n\n// Capabilities that must be declared with a scope suffix (`name:scope`). Each\n// declaration grants one scope; a bare declaration is invalid.\nexport const WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES = [\"artifacts.read\"] as const;\n\n// Runtime plumbing the guest invokes on its own (e.g. keyboard forwarding). Enabled\n// wherever the host implements them, with no manifest declaration required.\nexport const ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES = [\"host.dispatchKeyboardEvent\"] as const;\n\nexport const WEBVIEW_HOST_CAPABILITIES = [\n ...WEBVIEW_DECLARABLE_CAPABILITIES.filter((capability) => capability !== \"clipboard.write\"),\n ...WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES,\n] as const;\n\nexport type WebviewHostCapability = (typeof WEBVIEW_HOST_CAPABILITIES)[number];\nexport type WebviewDeclarableCapability = (typeof WEBVIEW_DECLARABLE_CAPABILITIES)[number];\nexport type WebviewScopedDeclarableCapability = (typeof WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES)[number];\n/** @deprecated Use bare capability names. Versions will be removed in 0.45. */\nexport type VersionedWebviewCapabilityDeclaration =\n `${WebviewDeclarableCapability}@${typeof WEBVIEW_HOST_CAPABILITY_VERSION}`;\n\nexport type WebviewCapabilityDeclaration =\n | WebviewDeclarableCapability\n | VersionedWebviewCapabilityDeclaration\n | `${WebviewScopedDeclarableCapability}:${string}`;\n\nexport interface WebviewCommandsExecuteParams {\n commandId: string;\n params?: JsonObject;\n workspaceId?: string;\n resource?: ResourceRef;\n metadata?: JsonObject;\n}\n\nexport type WebviewCommandsStreamParams =\n | ({ operation: \"start\"; streamId: string } & WebviewCommandsExecuteParams)\n | { operation: \"cancel\"; streamId: string }\n | { operation: \"ack\"; streamId: string; bytes: number };\n\nexport type WebviewCommandStreamEvent =\n | { streamId: string; type: \"data\"; data: JsonValue }\n | { streamId: string; type: \"end\"; outcome: CommandOutcome };\n\nexport interface WebviewNavigationOpenParams {\n target: NavigationTarget;\n}\n\n/** @deprecated Use CommandNotice with type and message. */\nexport interface WebviewNotificationShowParams {\n level: \"info\" | \"success\" | \"warning\" | \"error\";\n title: string;\n message?: string;\n}\n\n/** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\nexport type WebviewNotificationActionParams = Omit<CreateNotificationInput, \"projectId\">;\n/** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\nexport interface WebviewNotificationResolveParams {\n id?: string;\n dedupeKey?: string;\n status?: Extract<NotificationStatus, \"done\" | \"dismissed\" | \"expired\">;\n}\n/** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\nexport type WebviewNotificationDismissParams = Pick<WebviewNotificationResolveParams, \"id\" | \"dedupeKey\">;\n\nexport interface WebviewPreferencesGetParams {\n /** Access to another extension's registered names is deprecated. Use names owned by the caller. */\n name: string;\n scope?: {\n scope: \"default\" | \"user\" | \"project\" | \"workspace\" | \"extension\" | \"session\";\n scopeId?: string;\n };\n}\n\nexport interface WebviewPreferencesSetParams extends WebviewPreferencesGetParams {\n value: boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;\n}\n\nexport interface WebviewPageParamsUpdateParams {\n /** Merge overrides into the active page. Null resets a name to its declared default. */\n params: Readonly<Record<string, PageParamValue | null>>;\n}\n\nexport interface WebviewExtensionSettingKeyParams {\n key: string;\n}\n\nexport interface WebviewExtensionSettingSetParams extends WebviewExtensionSettingKeyParams {\n value: unknown;\n}\n\nexport type WebviewFileScope = { type: \"project\" } | { type: \"resource\"; id: string } | { type: string; id?: string };\n\nexport interface WebviewFilesUploadParams {\n name: string;\n data: Uint8Array | ArrayBuffer;\n mimeType?: string;\n scope?: WebviewFileScope;\n}\n\nexport interface WebviewFilesListParams {\n scope?: WebviewFileScope;\n}\n\nexport interface WebviewFilesDeleteParams {\n id: string;\n}\n\n// One bridge method covers every artifact read; the operation is in the params,\n// mirroring terminal.session. The mount is always the mount's local id.\nexport type WebviewArtifactsReadParams =\n | { op: \"list\"; mount: string; prefix?: string }\n | { op: \"readText\"; mount: string; path: string }\n | { op: \"imageUrl\"; mount: string; path: string };\n\nexport interface WebviewArtifactFile {\n path: string;\n size: number;\n mediaType: string;\n}\n\n/** Reads mirror `ctx.account`. A missing project id means the webview's project. */\nexport type WebviewAccountReadParams =\n | { op: \"status\" }\n | { op: \"loginStatus\"; id: string }\n | { op: \"devices\" }\n | { op: \"projectSyncStatus\"; projectId?: string };\n\n/** Changes mirror `ctx.account`. A missing project id means the webview's project. */\nexport type WebviewAccountManageParams =\n | { op: \"login\"; managerOrigin: string }\n | { op: \"cancelLogin\"; id: string }\n | { op: \"logout\" }\n | { op: \"renameDevice\"; id: string; name: string }\n | { op: \"removeDevice\"; id: string }\n | { op: \"syncProject\"; projectId?: string }\n | { op: \"stopProjectSync\"; projectId?: string };\n\nexport type WebviewAccountResult<Params extends { op: keyof ExtensionAccountApi }> = Awaited<\n ReturnType<ExtensionAccountApi[Params[\"op\"]]>\n>;\n\nexport interface WebviewKeyboardEventParams {\n key?: string;\n code?: string;\n ctrlKey?: boolean;\n metaKey?: boolean;\n altKey?: boolean;\n shiftKey?: boolean;\n repeat?: boolean;\n}\n\nexport interface WebviewHostCapabilityParams {\n \"harnesses.read\": { harnessId?: string; model?: string };\n \"resources.actions\":\n | { operation: \"list\"; resource: ResourceRef }\n | { operation: \"execute\"; resource: ResourceRef; key: string };\n \"commands.execute\": WebviewCommandsExecuteParams;\n \"commands.stream\": WebviewCommandsStreamParams;\n \"editing.session\": WebviewEditingSessionParams;\n \"page.params.update\": WebviewPageParamsUpdateParams;\n \"navigation.open\": WebviewNavigationOpenParams;\n \"placement.close\": Record<string, never>;\n \"notification.show\": CommandNotice | WebviewNotificationShowParams;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.action\": WebviewNotificationActionParams;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.resolve\": WebviewNotificationResolveParams;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.dismiss\": WebviewNotificationDismissParams;\n \"preferences.get\": WebviewPreferencesGetParams;\n \"preferences.set\": WebviewPreferencesSetParams;\n \"extension.settings.all\": Record<string, never>;\n \"extension.settings.get\": WebviewExtensionSettingKeyParams;\n \"extension.settings.set\": WebviewExtensionSettingSetParams;\n \"extension.settings.delete\": WebviewExtensionSettingKeyParams;\n /** @deprecated Use the host terminal surface. */\n \"terminal.session\": TerminalSessionOperation;\n \"files.upload\": WebviewFilesUploadParams;\n /** @deprecated Use extension commands and owned storage. */\n \"files.list\": WebviewFilesListParams;\n /** @deprecated Use extension commands and owned storage. */\n \"files.delete\": WebviewFilesDeleteParams;\n \"artifacts.read\": WebviewArtifactsReadParams;\n \"account.read\": WebviewAccountReadParams;\n \"account.manage\": WebviewAccountManageParams;\n \"host.dispatchKeyboardEvent\": WebviewKeyboardEventParams;\n}\n\nexport interface WebviewHostCapabilityResults {\n \"harnesses.read\": {\n harnesses: AgentInfo[];\n models: AgentModel[];\n schema?: HarnessParamsInfo;\n defaults?: Record<string, string | boolean>;\n selection?: ExtensionHarnessInput;\n };\n \"resources.actions\": WebviewResourceAction[];\n \"commands.execute\": { outcome: CommandOutcome };\n \"commands.stream\": { operation: \"start\" | \"cancel\" | \"ack\"; accepted: true };\n \"editing.session\": WebviewEditingSnapshot | undefined;\n \"page.params.update\": { location: PageLocation };\n \"navigation.open\": void;\n \"placement.close\": void;\n \"notification.show\": void;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.action\": Notification;\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.resolve\": Notification | { resolved: number; notifications: Notification[] };\n /** @deprecated Invoke a command using ctx.notify.setStatus or setStatusByKey. */\n \"notification.dismiss\": Notification | { resolved: number; notifications: Notification[] };\n \"preferences.get\": WebviewPreferencesSetParams[\"value\"] | undefined;\n \"preferences.set\": { name: string; value: WebviewPreferencesSetParams[\"value\"] };\n \"extension.settings.all\": Record<string, unknown>;\n \"extension.settings.get\": unknown;\n \"extension.settings.set\": { key: string; value: unknown };\n \"extension.settings.delete\": void;\n /** @deprecated Use the host terminal surface. */\n \"terminal.session\": TerminalSessionResult;\n \"files.upload\": ExtensionBlobRef;\n /** @deprecated Use extension commands and owned storage. */\n \"files.list\": { files: ExtensionBlobRef[] };\n /** @deprecated Use extension commands and owned storage. */\n \"files.delete\": void;\n \"artifacts.read\": WebviewArtifactFile[] | string;\n \"account.read\": WebviewAccountResult<WebviewAccountReadParams>;\n \"account.manage\": WebviewAccountResult<WebviewAccountManageParams>;\n \"host.dispatchKeyboardEvent\": void;\n}\n\nexport interface WebviewResourceAction {\n key: string;\n label: string;\n commandId?: string;\n /** Workbench icon name. */\n icon?: string;\n /** Image URL that replaces `icon` when present. */\n iconSrc?: string;\n /** Help text, or the reason the action is disabled. */\n description?: string;\n isDisabled?: boolean;\n separatorBefore?: boolean;\n group?: { id: string; label?: string };\n}\n\nexport type WebviewHostCapabilityResult<\n Capability extends WebviewHostCapability,\n Params extends WebviewHostCapabilityParams[Capability] = WebviewHostCapabilityParams[Capability],\n> = Capability extends \"account.read\" | \"account.manage\"\n ? Params extends { op: keyof ExtensionAccountApi }\n ? WebviewAccountResult<Params>\n : WebviewHostCapabilityResults[Capability]\n : Capability extends \"artifacts.read\"\n ? Params extends { op: \"list\" }\n ? WebviewArtifactFile[]\n : Params extends { op: \"readText\" | \"imageUrl\" }\n ? string\n : WebviewHostCapabilityResults[Capability]\n : Capability extends \"terminal.session\"\n ? Params extends { operation: \"open\" }\n ? Extract<TerminalSessionResult, { operation: \"open\" }>\n : Params extends { operation: \"write\" | \"resize\" | \"kill\" | \"subscribe\" }\n ? Exclude<TerminalSessionResult, { operation: \"open\" }>\n : TerminalSessionResult\n : WebviewHostCapabilityResults[Capability];\n","export const EXTENSION_EVENTS_SCOPE = \"extension.events\";\n/** Host event sent with `{ type: \"changed\" }` after a listed resource's actions may have changed. */\nexport const RESOURCE_ACTIONS_EVENTS_SCOPE = \"resources.actions\";\n\nexport const artifactMountId = (mount: string | { id: string }) => (typeof mount === \"string\" ? mount : mount.id);\n","import type { WebviewHostCapability, WebviewScopedDeclarableCapability } from \"pstdio-api-contracts\";\nimport {\n WEBVIEW_DECLARABLE_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITY_VERSION,\n WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES,\n} from \"pstdio-api-contracts\";\nimport type { HostCapabilityRequest } from \"./index\";\n\nexport {\n ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES,\n WEBVIEW_DECLARABLE_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITIES,\n WEBVIEW_HOST_CAPABILITY_VERSION,\n WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES,\n type WebviewDeclarableCapability,\n type WebviewHostCapability,\n type WebviewScopedDeclarableCapability,\n} from \"pstdio-api-contracts\";\n\nexport type WebviewCapabilityDiagnosticCode =\n | \"undeclared_webview_capability\"\n | \"unsupported_webview_capability\"\n | \"unsupported_webview_capability_version\";\n\nexport interface WebviewCapabilityDiagnostic {\n capability: string;\n code: WebviewCapabilityDiagnosticCode;\n message: string;\n severity: \"error\";\n}\n\nexport type HostCapability<TParams = unknown, TResult = unknown> = (params: TParams) => Promise<TResult> | TResult;\nexport type HostCapabilityRegistry = Partial<Record<WebviewHostCapability, HostCapability>>;\n\ninterface CreateHostCapabilityGateInput {\n capabilities: HostCapabilityRegistry;\n declaredCapabilities?: readonly string[];\n onDiagnostic?: (diagnostic: WebviewCapabilityDiagnostic) => void;\n}\n\nconst publicCapabilityNames = new Set<string>([...WEBVIEW_HOST_CAPABILITIES, ...WEBVIEW_DECLARABLE_CAPABILITIES]);\nconst scopedCapabilityNames = new Set<string>(WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES);\n\nconst isPublicCapability = (name: string): name is WebviewHostCapability | \"clipboard.write\" =>\n publicCapabilityNames.has(name);\n\nconst isScopedCapability = (name: string): name is WebviewScopedDeclarableCapability => scopedCapabilityNames.has(name);\n\nexport const parseWebviewCapabilityDeclaration = (capability: string) => {\n const [nameAndScope = \"\", versionText] = capability.split(\"@\");\n const scopeIndex = nameAndScope.indexOf(\":\");\n const name = scopeIndex === -1 ? nameAndScope : nameAndScope.slice(0, scopeIndex);\n const scope = scopeIndex === -1 ? undefined : nameAndScope.slice(scopeIndex + 1);\n const version = versionText === undefined ? WEBVIEW_HOST_CAPABILITY_VERSION : Number(versionText);\n\n return { capability, name, scope, version };\n};\n\n// A scoped capability needs `name:scope`; every other capability must stay bare.\nconst validateDeclarationShape = (parsed: ReturnType<typeof parseWebviewCapabilityDeclaration>) => {\n if (isScopedCapability(parsed.name)) return Boolean(parsed.scope);\n return parsed.scope === undefined;\n};\n\nconst unsupportedCapability = (capability: string): WebviewCapabilityDiagnostic => ({\n capability,\n code: \"unsupported_webview_capability\",\n message: `Unsupported webview capability: ${capability}`,\n severity: \"error\",\n});\n\nconst unsupportedVersion = (capability: string, name: string, version: number): WebviewCapabilityDiagnostic => ({\n capability,\n code: \"unsupported_webview_capability_version\",\n message: `Unsupported webview capability version: ${name}@${version.toString()} (supported: ${WEBVIEW_HOST_CAPABILITY_VERSION.toString()})`,\n severity: \"error\",\n});\n\nconst undeclaredCapability = (capability: string): WebviewCapabilityDiagnostic => ({\n capability,\n code: \"undeclared_webview_capability\",\n message: `Webview did not declare host capability: ${capability}`,\n severity: \"error\",\n});\n\nexport const validateWebviewCapabilityDeclarations = (\n declaredCapabilities: readonly string[] | undefined,\n capabilities: HostCapabilityRegistry = {},\n) => {\n const diagnostics: WebviewCapabilityDiagnostic[] = [];\n const allowed = new Set<WebviewHostCapability>();\n const allowedScopes = new Map<WebviewHostCapability, Set<string>>();\n\n for (const declaration of declaredCapabilities ?? []) {\n const parsed = parseWebviewCapabilityDeclaration(declaration);\n if (!isPublicCapability(parsed.name) || !validateDeclarationShape(parsed)) {\n diagnostics.push(unsupportedCapability(declaration));\n continue;\n }\n if (parsed.version !== WEBVIEW_HOST_CAPABILITY_VERSION) {\n diagnostics.push(unsupportedVersion(declaration, parsed.name, parsed.version));\n continue;\n }\n // Browser permissions are delegated by the iframe, not routed through the bridge.\n if (parsed.name === \"clipboard.write\") continue;\n if (!capabilities[parsed.name as WebviewHostCapability]) {\n diagnostics.push(unsupportedCapability(declaration));\n continue;\n }\n if (parsed.scope === undefined) {\n allowed.add(parsed.name as WebviewHostCapability);\n continue;\n }\n const scopes = allowedScopes.get(parsed.name) ?? new Set<string>();\n scopes.add(parsed.scope);\n allowedScopes.set(parsed.name, scopes);\n }\n\n return { allowed, allowedScopes, diagnostics };\n};\n\nexport const validateWebviewCapabilityNames = (declaredCapabilities: readonly string[] | undefined) => {\n const diagnostics: WebviewCapabilityDiagnostic[] = [];\n\n for (const declaration of declaredCapabilities ?? []) {\n const parsed = parseWebviewCapabilityDeclaration(declaration);\n if (!isPublicCapability(parsed.name) || !validateDeclarationShape(parsed)) {\n diagnostics.push(unsupportedCapability(declaration));\n continue;\n }\n if (parsed.version !== WEBVIEW_HOST_CAPABILITY_VERSION) {\n diagnostics.push(unsupportedVersion(declaration, parsed.name, parsed.version));\n }\n }\n\n return diagnostics;\n};\n\n// Scoped capabilities carry their grant in the params: artifacts.read names the\n// mount it reads. The gate compares that value against the declared scopes.\nconst requestScope = (request: HostCapabilityRequest) => {\n const params = request.params as { mount?: unknown } | undefined;\n return typeof params?.mount === \"string\" && params.mount.length > 0 ? params.mount : undefined;\n};\n\nexport const createHostCapabilityGate = (input: CreateHostCapabilityGateInput) => {\n const { allowed, allowedScopes, diagnostics } = validateWebviewCapabilityDeclarations(\n input.declaredCapabilities,\n input.capabilities,\n );\n\n const emit = (diagnostic: WebviewCapabilityDiagnostic) => {\n input.onDiagnostic?.(diagnostic);\n };\n\n const deny = (diagnostic: WebviewCapabilityDiagnostic) => {\n emit(diagnostic);\n return Object.assign(new Error(diagnostic.message), {\n code: diagnostic.code,\n data: { capability: diagnostic.capability },\n });\n };\n\n return {\n diagnostics,\n\n async call(request: HostCapabilityRequest) {\n if (!isPublicCapability(request.method) || request.method === \"clipboard.write\")\n throw deny(unsupportedCapability(request.method));\n\n if (isScopedCapability(request.method)) {\n const scope = requestScope(request);\n if (!scope) throw deny(unsupportedCapability(request.method));\n // The denial names the exact declaration the webview is missing.\n if (!allowedScopes.get(request.method)?.has(scope)) {\n throw deny(undeclaredCapability(`${request.method}:${scope}`));\n }\n } else if (!allowed.has(request.method)) {\n throw deny(undeclaredCapability(request.method));\n }\n\n const handler = input.capabilities[request.method];\n if (!handler) throw deny(unsupportedCapability(request.method));\n\n return await handler(request.params);\n },\n };\n};\n","import type { WebviewHostProps } from \"pstdio-api-contracts/extension-kernel\";\n\nexport const createWebviewHostProps = (props: Partial<WebviewHostProps> & Record<string, unknown> = {}) => {\n const locale = props.locale ?? \"en\";\n return {\n ...props,\n projectId: props.projectId,\n themePreference: props.themePreference ?? \"system\",\n locale,\n resource: props.resource,\n pageLocation: props.pageLocation,\n pageParams: props.pageParams ?? {},\n translations: props.translations ?? { locale, defaultLocale: locale, bundle: {}, defaultBundle: {} },\n } satisfies WebviewHostProps;\n};\n","import type { RuntimeErrorPayload } from \"./contract\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\n\nconst safeStringify = (value: unknown) => {\n try {\n const json = JSON.stringify(value);\n if (typeof json === \"string\" && json.length > 0) return json;\n } catch {\n // Circular or non-serializable — fall through.\n }\n try {\n return String(value);\n } catch {\n return \"Unknown error\";\n }\n};\n\nexport const normalizeRuntimeError = (value: unknown): RuntimeErrorPayload => {\n if (value instanceof Error) return { message: value.message, stack: value.stack };\n\n if (typeof value === \"string\") return { message: value };\n\n if (isRecord(value)) {\n const message = typeof value.message === \"string\" ? value.message : null;\n const stack = typeof value.stack === \"string\" ? value.stack : undefined;\n if (message) return stack ? { message, stack } : { message };\n return { message: safeStringify(value) };\n }\n\n if (value === null || value === undefined) return { message: \"Unknown error\" };\n\n return { message: safeStringify(value) };\n};\n","import type { HostCapabilityReply } from \"../contract\";\nimport { normalizeRuntimeError } from \"../normalize-error\";\n\n/** Keep error details in an ordinary RPC value so nested data survives serialization. */\nexport const capabilityReply = async (run: () => unknown) => {\n try {\n return { ok: true, value: await run() } satisfies HostCapabilityReply;\n } catch (error) {\n const details = error !== null && typeof error === \"object\" ? error : {};\n return {\n ok: false,\n error: {\n code: \"code\" in details && typeof details.code === \"string\" ? details.code : \"webview_capability_failed\",\n message: normalizeRuntimeError(error).message,\n ...(\"data\" in details ? { data: details.data } : {}),\n },\n } satisfies HostCapabilityReply;\n }\n};\n","export const extensionIframeAllow = (capabilities: readonly string[] = []) =>\n capabilities.some((capability) => capability === \"clipboard.write\" || capability === \"clipboard.write@1\")\n ? \"fullscreen; clipboard-write\"\n : \"fullscreen\";\n","import type { ThemePreference } from \"../contract\";\n\nexport const collectChakraThemeVariables = () => {\n if (typeof document === \"undefined\") return {};\n\n const computed = getComputedStyle(document.documentElement);\n const variables: Record<string, string> = {};\n for (let index = 0; index < computed.length; index += 1) {\n const name = computed.item(index);\n if (name.startsWith(\"--chakra-\")) {\n variables[name] = computed.getPropertyValue(name).trim();\n }\n }\n return variables;\n};\n\nexport const resolveActiveTheme = (fallback: ThemePreference): ThemePreference => {\n if (typeof document === \"undefined\") return fallback;\n const value = document.documentElement.getAttribute(\"data-theme\");\n if (value === \"dark\" || value === \"light\") return value;\n\n const colorMode = document.documentElement.getAttribute(\"data-color-mode\");\n return colorMode === \"dark\" || colorMode === \"light\" ? colorMode : fallback;\n};\n\nexport const postThemeToFrame = (\n iframe: HTMLIFrameElement | null,\n theme: ThemePreference,\n variables: Record<string, string>,\n) => {\n iframe?.contentWindow?.postMessage({ type: \"pstdio.theme\", theme, variables }, \"*\");\n};\n","import type { WebviewHostProps } from \"pstdio-api-contracts/extension-kernel\";\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { host } from \"rimless\";\nimport type {\n ExtensionViewDescriptor,\n GuestApi,\n HostApi,\n HostCapabilityRegistry,\n HostCapabilityRequest,\n ThemePreference,\n WebviewCapabilityDiagnostic,\n WebviewPointerEvent,\n} from \"../contract\";\nimport { createHostCapabilityGate } from \"../contract\";\nimport { createWebviewHostProps } from \"../contract/host-props\";\nimport { normalizeRuntimeError } from \"../normalize-error\";\nimport { capabilityReply } from \"./capability-reply\";\nimport type { HostEventPublisher } from \"./host-event-publisher\";\nimport { extensionIframeAllow } from \"./iframe-permissions\";\nimport { collectChakraThemeVariables, resolveActiveTheme } from \"./theme\";\n\nexport interface ExtensionFrameProps {\n sizing?: \"content-width\";\n view: ExtensionViewDescriptor;\n props: Partial<WebviewHostProps> & Record<string, unknown>;\n theme: ThemePreference;\n capabilities?: HostCapabilityRegistry;\n /** Private guest shortcut forwarding, outside extension capability grants. */\n onKeyboardEvent?: (event: import(\"pstdio-api-contracts\").WebviewKeyboardEventParams) => void;\n /** Publisher whose emitted events are forwarded into the guest once connected. */\n hostEvents?: HostEventPublisher;\n onReady?: () => void;\n /** Reports a load or runtime failure. The frame draws no error UI; the caller shows the failure once. */\n onError?: (error: { message: string; stack?: string }) => void;\n onDiagnostics?: (diagnostics: WebviewCapabilityDiagnostic[]) => void;\n title?: string;\n}\n\ntype GuestRemote = Pick<HostApi, \"init\" | \"themeUpdate\" | \"propsUpdate\"> & {\n hostEvent?: HostApi[\"hostEvent\"];\n};\n\nconst iframeStyle: CSSProperties = {\n border: 0,\n display: \"block\",\n flex: \"1 1 0%\",\n height: \"100%\",\n minHeight: 0,\n width: \"100%\",\n};\n\nconst frameShellStyle: CSSProperties = {\n display: \"flex\",\n height: \"100%\",\n minHeight: 0,\n position: \"relative\",\n width: \"100%\",\n};\n\nexport const EXTENSION_IFRAME_SANDBOX = \"allow-scripts allow-forms allow-popups\";\n\nexport const ExtensionFrame = (props: ExtensionFrameProps) => {\n const {\n view,\n props: extensionProps,\n theme,\n capabilities,\n onKeyboardEvent,\n hostEvents,\n onReady,\n onError,\n onDiagnostics,\n title,\n sizing,\n } = props;\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const remoteRef = useRef<GuestRemote | null>(null);\n const initializedRef = useRef(false);\n // The connection belongs to one browsing context. Navigation keeps the iframe's\n // WindowProxy, so a different contentWindow means the runtime document is gone.\n const connectedWindowRef = useRef<Window | null>(null);\n const propsRef = useRef(createWebviewHostProps(extensionProps));\n const themeRef = useRef(theme);\n const capabilitiesRef = useRef(capabilities);\n const onKeyboardEventRef = useRef(onKeyboardEvent);\n const hostEventsRef = useRef(hostEvents);\n const declaredCapabilitiesRef = useRef(view.webview.capabilities);\n const onReadyRef = useRef(onReady);\n const onErrorRef = useRef(onError);\n const onDiagnosticsRef = useRef(onDiagnostics);\n // Bumped when the browser reloads the iframe (e.g. a DOM reparent while the Side\n // Panel floats). The bump remounts a fresh iframe so a single clean connection\n // owns the new browsing context.\n const [frameEpoch, setFrameEpoch] = useState(0);\n const [contentWidth, setContentWidth] = useState(0);\n\n propsRef.current = createWebviewHostProps(extensionProps);\n themeRef.current = theme;\n capabilitiesRef.current = capabilities;\n onKeyboardEventRef.current = onKeyboardEvent;\n hostEventsRef.current = hostEvents;\n declaredCapabilitiesRef.current = view.webview.capabilities;\n onReadyRef.current = onReady;\n onErrorRef.current = onError;\n onDiagnosticsRef.current = onDiagnostics;\n\n // Connect once per browsing context. React StrictMode dev double-mount and parent\n // re-renders with unstable prop references (e.g. `webview.styles` rebuilt by `.map`)\n // would otherwise tear down the live connection while the iframe keeps its state,\n // leaving guest-to-host RPCs with no listener.\n // biome-ignore lint/correctness/useExhaustiveDependencies: frameEpoch remounts the iframe this effect reads through iframeRef.\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n // Reinserting the iframe (a DOM move without moveBefore, or StrictMode's dev-only\n // remount of a moved host) replaces its browsing context with about:blank because\n // the src attribute is empty. This can happen before the runtime finishes loading,\n // so compare browsing contexts instead of counting loads. Remount a fresh iframe\n // and connection when the context changed.\n const onFrameLoad = () => {\n if (iframe.contentWindow !== connectedWindowRef.current) setFrameEpoch((epoch) => epoch + 1);\n };\n iframe.addEventListener(\"load\", onFrameLoad);\n const removeLoadListener = () => iframe.removeEventListener(\"load\", onFrameLoad);\n\n if (iframe.contentWindow === connectedWindowRef.current) return removeLoadListener;\n connectedWindowRef.current = iframe.contentWindow;\n\n // Snapshot styles at connect time so subsequent parent re-renders that produce a\n // new array reference don't affect what we send in init.\n const stylesAtConnect = view.webview.styles;\n const moduleUrlAtConnect = view.webview.moduleUrl;\n\n const reportDiagnostics = (diagnostics: WebviewCapabilityDiagnostic[]) => {\n if (diagnostics.length > 0) onDiagnosticsRef.current?.(diagnostics);\n };\n\n const createCapabilityGate = () =>\n createHostCapabilityGate({\n capabilities: capabilitiesRef.current ?? {},\n declaredCapabilities: declaredCapabilitiesRef.current,\n onDiagnostic: (diagnostic) => reportDiagnostics([diagnostic]),\n });\n\n reportDiagnostics(createCapabilityGate().diagnostics);\n\n const hostApi = {\n dispatchPointerEvent: (event: WebviewPointerEvent) => {\n if (iframeRef.current !== iframe || !iframe.isConnected) return;\n if (event.type !== \"pointerdown\" && event.type !== \"click\") return;\n const bounds = iframe.getBoundingClientRect();\n if (!bounds.width || !bounds.height) return;\n // Outside-interaction layers need the host iframe as their target, including\n // when the iframe belongs to the menu itself. Guest DOM stays sandboxed.\n iframe.dispatchEvent(\n new PointerEvent(event.type, {\n ...event,\n bubbles: true,\n composed: true,\n cancelable: true,\n clientX: bounds.left + event.clientX * (bounds.width / iframe.clientWidth),\n clientY: bounds.top + event.clientY * (bounds.height / iframe.clientHeight),\n }),\n );\n },\n contentWidthChanged: (width: number) => {\n if (sizing === \"content-width\" && Number.isFinite(width) && width >= 0) setContentWidth(width);\n },\n dispatchKeyboardEvent: async (event: import(\"pstdio-api-contracts\").WebviewKeyboardEventParams) => {\n if (onKeyboardEventRef.current) return onKeyboardEventRef.current(event);\n document.dispatchEvent(new KeyboardEvent(\"keydown\", { ...event, bubbles: true, cancelable: true }));\n },\n ready: () => {\n // no-op; init fires from host.connect().then() below.\n },\n runtimeError: (payload: { message: string; stack?: string }) => {\n onErrorRef.current?.(payload);\n },\n call: async (request: HostCapabilityRequest) => {\n return await capabilityReply(() => createCapabilityGate().call(request));\n },\n } satisfies GuestApi;\n\n const connect = () => {\n initializedRef.current = false;\n remoteRef.current = null;\n\n const connection = host.connect(iframe, hostApi);\n // A sandboxed iframe without allow-same-origin posts messages with origin \"null\".\n // Leaving the iframe src attribute empty lets rimless validate the guest by\n // contentWindow identity while still loading the API-owned runtime document.\n iframe.contentWindow?.location.replace(view.webview.runtimeUrl);\n\n connection\n .then(async (conn) => {\n if (iframeRef.current !== iframe) return;\n const remote = conn.remote as GuestRemote;\n remoteRef.current = remote;\n hostEventsRef.current?.bind((message) => remote.hostEvent?.(message));\n\n await remote.init({\n sizing,\n moduleUrl: moduleUrlAtConnect,\n styles: stylesAtConnect,\n props: propsRef.current,\n theme: resolveActiveTheme(themeRef.current),\n themeVariables: collectChakraThemeVariables(),\n extensionId: view.extensionId,\n });\n if (iframeRef.current !== iframe) return;\n initializedRef.current = true;\n onReadyRef.current?.();\n })\n .catch((error) => {\n if (iframeRef.current !== iframe) return;\n onErrorRef.current?.(normalizeRuntimeError(error));\n });\n };\n\n connect();\n\n // Intentionally no connection.close() in cleanup. The iframe runtime handshakes once\n // at iframe load and binds to that connection ID. Closing during React StrictMode's\n // dev-only cleanup would leave the live iframe with no host listener.\n return removeLoadListener;\n }, [frameEpoch, sizing, view.extensionId, view.webview.runtimeUrl, view.webview.moduleUrl, view.webview.styles]);\n\n // Re-renders may hand the frame a fresh publisher (renderers rebuild their\n // capability context per render); route it to the live connection.\n useEffect(() => {\n const remote = remoteRef.current;\n if (!remote || !hostEvents) return;\n hostEvents.bind((message) => remote.hostEvent?.(message));\n // Release the sink so a replaced publisher stops referencing this remote\n // and returns to buffering.\n return () => hostEvents.unbind();\n }, [hostEvents]);\n\n useEffect(() => {\n if (!initializedRef.current) return;\n remoteRef.current?.propsUpdate({ props: createWebviewHostProps(extensionProps) });\n }, [extensionProps]);\n\n useEffect(() => {\n if (!initializedRef.current) return;\n remoteRef.current?.themeUpdate({\n theme: resolveActiveTheme(theme),\n variables: collectChakraThemeVariables(),\n });\n }, [theme]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof MutationObserver === \"undefined\") return;\n\n let frame: number | null = null;\n const schedule = () => {\n if (frame !== null) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n frame = null;\n if (!initializedRef.current) return;\n remoteRef.current?.themeUpdate({\n theme: resolveActiveTheme(themeRef.current),\n variables: collectChakraThemeVariables(),\n });\n });\n };\n\n const observer = new MutationObserver(schedule);\n const options = { attributeFilter: [\"class\", \"data-color-mode\", \"data-theme\", \"style\"], attributes: true };\n observer.observe(document.documentElement, options);\n observer.observe(document.body, options);\n\n return () => {\n observer.disconnect();\n if (frame !== null) cancelAnimationFrame(frame);\n };\n }, []);\n\n return (\n <div style={{ ...frameShellStyle, width: sizing === \"content-width\" ? contentWidth : \"100%\" }}>\n <iframe\n // A new runtime or module needs its own browsing context and bridge handshake.\n key={`${frameEpoch}\\n${view.webview.runtimeUrl}\\n${view.webview.moduleUrl}`}\n ref={iframeRef}\n title={title ?? view.label}\n allow={extensionIframeAllow(view.webview.capabilities)}\n sandbox={EXTENSION_IFRAME_SANDBOX}\n // Match the host theme so the empty/loading iframe paints the right canvas\n // instead of flashing the default light background while the guest connects.\n style={{ ...iframeStyle, colorScheme: theme }}\n onError={() => {\n onErrorRef.current?.({ message: `Failed to load extension runtime at ${view.webview.runtimeUrl}` });\n }}\n />\n </div>\n );\n};\n","import type { WebviewCapabilityDiagnostic } from \"../contract\";\n\nexport const EXTENSION_HOST_LOG_PREFIX = \"[pstdio.extension-host] \";\n\nexport interface ExtensionHostDiagnostic {\n event: \"webview-ready\" | \"webview-error\" | \"webview-diagnostic\" | \"registration-ready\" | \"registration-error\";\n extensionId?: string;\n contributionId?: string;\n projectId?: string;\n code?: string;\n capability?: string;\n message?: string;\n stack?: string;\n}\n\nexport const logExtensionHostDiagnostic = (diagnostic: ExtensionHostDiagnostic, write = console.info) => {\n write(`${EXTENSION_HOST_LOG_PREFIX}${JSON.stringify(diagnostic)}`);\n};\n\nexport const createWebviewDiagnostics = (\n view: { extensionId: string; id: string },\n write?: (message: string) => void,\n) => {\n const log = (diagnostic: ExtensionHostDiagnostic) =>\n logExtensionHostDiagnostic({ extensionId: view.extensionId, contributionId: view.id, ...diagnostic }, write);\n return {\n onReady: () => log({ event: \"webview-ready\" }),\n onError: (error: { message: string; stack?: string }) => log({ event: \"webview-error\", ...error }),\n onDiagnostics: (diagnostics: WebviewCapabilityDiagnostic[]) => {\n for (const diagnostic of diagnostics) log({ event: \"webview-diagnostic\", ...diagnostic });\n },\n };\n};\n","import type { HostEventMessage } from \"../contract\";\n\n/**\n * Host-side fan-in for events pushed into one guest webview. Capability\n * implementations `emit` while the frame owns the transport: events emitted\n * before the guest connection is up are buffered and flushed on `bind`.\n */\nexport interface HostEventPublisher {\n emit(message: HostEventMessage): void;\n bind(sink: (message: HostEventMessage) => void): void;\n onDisconnect(listener: () => void): () => void;\n /** Drop the current sink and return to buffering until the next bind. */\n unbind(): void;\n}\n\nexport const createHostEventPublisher = (): HostEventPublisher => {\n let sink: ((message: HostEventMessage) => void) | null = null;\n const pending: HostEventMessage[] = [];\n const disconnectListeners = new Set<() => void>();\n\n return {\n emit(message) {\n if (sink) sink(message);\n else pending.push(message);\n },\n bind(next) {\n sink = next;\n while (pending.length > 0) next(pending.shift() as HostEventMessage);\n },\n onDisconnect(listener) {\n disconnectListeners.add(listener);\n return () => disconnectListeners.delete(listener);\n },\n unbind() {\n sink = null;\n for (const listener of disconnectListeners) listener();\n },\n };\n};\n","import { Box, Center, Stack, Text } from \"@chakra-ui/react\";\nimport { resolvePageParams } from \"pstdio-api-contracts\";\nimport { createWebviewDiagnostics, ExtensionFrame, type ExtensionFrameProps } from \"pstdio-extensions/bridge/host\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\n\ntype BridgeWebviewFrameProps = Omit<ExtensionFrameProps, \"onDiagnostics\" | \"onError\" | \"onReady\"> & {\n workbench: WorkbenchCore;\n};\n\n/** A bridged webview that shows one failure message, in theme colors, when it cannot load. */\nexport const BridgeWebviewFrame = (props: BridgeWebviewFrameProps) => {\n const { view, workbench, ...frameProps } = props;\n const [pageState, setPageState] = useState(workbench.pages.store.getState);\n useEffect(() => workbench.pages.store.subscribe((state) => setPageState(state)), [workbench]);\n const page = pageState.activePageId ? workbench.pages.getPage(pageState.activePageId) : undefined;\n const pageProps = {\n pageLocation: pageState.location,\n pageParams: resolvePageParams(page?.params, pageState.location?.params),\n };\n const [error, setError] = useState<string | null>(null);\n const diagnostics = createWebviewDiagnostics(view);\n\n return (\n <Box\n position=\"relative\"\n width={props.sizing ? \"max-content\" : \"full\"}\n height=\"full\"\n minH=\"0\"\n display=\"flex\"\n flexDirection=\"column\"\n >\n {error ? (\n <Center position=\"absolute\" inset=\"0\" px=\"md\" zIndex={1} bg=\"bg\">\n <Stack gap=\"xs\" maxW=\"md\" textAlign=\"center\">\n <Text textStyle=\"paragraph/S/medium\" color=\"fg.error\">\n Extension view failed to load.\n </Text>\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\">\n {error}\n </Text>\n </Stack>\n </Center>\n ) : null}\n <ExtensionFrame\n view={view}\n {...frameProps}\n props={{ ...frameProps.props, ...pageProps }}\n onReady={() => {\n diagnostics.onReady();\n setError(null);\n }}\n onDiagnostics={diagnostics.onDiagnostics}\n onError={(nextError) => {\n diagnostics.onError(nextError);\n setError(nextError.message);\n }}\n />\n </Box>\n );\n};\n","import type {\n ExtensionAccountApi,\n WebviewAccountManageParams,\n WebviewAccountReadParams,\n} from \"pstdio-api-contracts/extension-kernel\";\n\n// One bridge method per permission. The operation names the `ctx.account` method to run.\nconst runAccountOperation = (\n account: ExtensionAccountApi,\n request: WebviewAccountReadParams | WebviewAccountManageParams,\n) => {\n switch (request.op) {\n case \"status\":\n return account.status();\n case \"loginStatus\":\n return account.loginStatus(request.id);\n case \"devices\":\n return account.devices();\n case \"projectSyncStatus\":\n return account.projectSyncStatus(request.projectId);\n case \"login\":\n return account.login(request.managerOrigin);\n case \"cancelLogin\":\n return account.cancelLogin(request.id);\n case \"logout\":\n return account.logout();\n case \"renameDevice\":\n return account.renameDevice(request.id, request.name);\n case \"removeDevice\":\n return account.removeDevice(request.id);\n case \"syncProject\":\n return account.syncProject(request.projectId);\n case \"stopProjectSync\":\n return account.stopProjectSync(request.projectId);\n }\n};\n\nexport const createAccountCapability = (account: ExtensionAccountApi | undefined) =>\n account &&\n ((request: WebviewAccountReadParams | WebviewAccountManageParams) => runAccountOperation(account, request));\n","import type { TerminalHostEvent, TerminalSessionOperation, TerminalSessionResult } from \"@pstdio/sdk/api\";\nimport type { HostCapability } from \"pstdio-extensions/bridge/contract\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type { WorkbenchTerminalController } from \"../../core\";\n\nexport const TERMINAL_SESSION_EVENT_SCOPE = \"terminal.session\";\n\ninterface CreateTerminalSessionCapabilityInput {\n terminal: WorkbenchTerminalController;\n hostEvents: HostEventPublisher;\n}\n\n/**\n * Host side of the `terminal.session` webview capability. Sessions live in the\n * workbench terminal controller; only serializable operation payloads and session\n * ids cross the webview boundary. Output/exit events flow through the host event\n * publisher under the `terminal.session` scope.\n */\nexport const createTerminalSessionCapability = (input: CreateTerminalSessionCapabilityInput): HostCapability => {\n const { terminal, hostEvents } = input;\n\n const emit = (payload: TerminalHostEvent) => {\n hostEvents.emit({ scope: TERMINAL_SESSION_EVENT_SCOPE, payload });\n };\n\n return async (params) => {\n const operation = params as TerminalSessionOperation;\n\n switch (operation.operation) {\n case \"open\": {\n const { sessionId } = await terminal.open({ request: operation.request });\n return { operation: \"open\", sessionId } satisfies TerminalSessionResult;\n }\n case \"write\":\n terminal.write({ sessionId: operation.sessionId, data: operation.data });\n return { operation: \"write\", accepted: true } satisfies TerminalSessionResult;\n case \"resize\":\n terminal.resize({ sessionId: operation.sessionId, cols: operation.cols, rows: operation.rows });\n return { operation: \"resize\", accepted: true } satisfies TerminalSessionResult;\n case \"kill\":\n await terminal.kill({ sessionId: operation.sessionId, signal: operation.signal });\n return { operation: \"kill\", accepted: true } satisfies TerminalSessionResult;\n case \"subscribe\": {\n const { sessionId } = operation;\n let unsubscribeTerminal = () => {};\n let unsubscribeDisconnect = () => {};\n let closed = false;\n const close = () => {\n if (closed) return;\n closed = true;\n unsubscribeTerminal();\n unsubscribeDisconnect();\n };\n\n unsubscribeTerminal = terminal.subscribe(sessionId, {\n onData: (chunk) => emit({ sessionId, kind: \"data\", chunk }),\n onExit: (exit) => {\n emit({ sessionId, kind: \"exit\", code: exit.code, signal: exit.signal });\n close();\n },\n });\n unsubscribeDisconnect = hostEvents.onDisconnect(close);\n return { operation: \"subscribe\", accepted: true } satisfies TerminalSessionResult;\n }\n }\n };\n};\n","import { serializableJsonObjectSchema as jsonObjectSchema } from \"pstdio-api-contracts\";\nimport { z } from \"zod\";\n\nconst id = z.string().min(1);\nconst session = { sessionId: id };\nconst changes = z.array(z.object({ path: z.array(z.string()), value: z.json() }));\nconst edit = { ...session, sequence: z.number().int().positive(), changes };\n\nexport const webviewEditingSessionParamsSchema = z.discriminatedUnion(\"operation\", [\n z.object({\n ...session,\n operation: z.literal(\"open\"),\n key: id,\n initial: jsonObjectSchema,\n save: z\n .object({\n commandId: id,\n params: jsonObjectSchema.optional(),\n })\n .strict(),\n }),\n z.object({ ...edit, operation: z.literal(\"commit\") }),\n z.object({ ...edit, operation: z.literal(\"preview\") }),\n z.object({ ...session, operation: z.literal(\"cancel\") }),\n z.object({ ...session, operation: z.literal(\"close\") }),\n z.object({ ...session, operation: z.literal(\"save\") }),\n z.object({\n ...session,\n operation: z.literal(\"refresh\"),\n value: jsonObjectSchema,\n expectedVersion: z.number().int().nonnegative(),\n }),\n]);\n","import { extensionResourceRefSchema, jsonObjectSchema } from \"pstdio-api-contracts\";\nimport { isNavigationTarget, type NavigationTarget } from \"pstdio-api-contracts/extension-kernel\";\nimport { z } from \"zod\";\n\nconst action = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"navigate\"),\n id: z.string(),\n label: z.string(),\n target: z.custom<NavigationTarget>(isNavigationTarget, \"Invalid navigation target.\"),\n primary: z.boolean().optional(),\n }),\n z.object({\n kind: z.literal(\"command\"),\n id: z.string(),\n label: z.string(),\n command: z.string(),\n params: jsonObjectSchema.optional(),\n primary: z.boolean().optional(),\n destructive: z.boolean().optional(),\n }),\n z.object({\n kind: z.literal(\"url\"),\n id: z.string(),\n label: z.string(),\n href: z.string(),\n primary: z.boolean().optional(),\n }),\n]);\n\nexport const webviewNotificationActionParamsSchema = z.object({\n title: z.string().min(1),\n body: z.string().optional(),\n kind: z.enum([\"needs_review\", \"ready_to_merge\", \"blocked\", \"approval_required\", \"failed\", \"info\"]),\n priority: z.enum([\"low\", \"normal\", \"high\", \"urgent\"]).optional(),\n target: extensionResourceRefSchema.optional(),\n related: z.array(extensionResourceRefSchema).optional(),\n actions: z.array(action).optional(),\n dedupeKey: z.string().optional(),\n expiresAt: z.string().optional(),\n snoozedUntil: z.string().optional(),\n metadata: jsonObjectSchema.optional(),\n});\n","import { extensionResourceRefSchema, jsonObjectSchema, pageParamValueSchema } from \"pstdio-api-contracts\";\nimport type { WebviewHostCapability, WebviewHostCapabilityParams } from \"pstdio-api-contracts/extension-kernel\";\nimport { isNavigationTarget, type NavigationTarget } from \"pstdio-api-contracts/extension-kernel\";\nimport { z } from \"zod\";\nimport { webviewEditingSessionParamsSchema } from \"./webview-editing-params\";\nimport { webviewNotificationActionParamsSchema } from \"./webview-notification-params\";\n\nexport class WebviewHostCapabilityError extends Error {\n constructor(\n public code: string,\n message: string,\n public data: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"WebviewHostCapabilityError\";\n }\n}\n\nconst identifier = z.string().min(1);\nconst empty = z.object({}).strict().optional();\nconst command = z.object({\n commandId: identifier,\n params: jsonObjectSchema.optional(),\n workspaceId: identifier.optional(),\n resource: extensionResourceRefSchema.optional(),\n metadata: jsonObjectSchema.optional(),\n});\nconst streamId = { streamId: identifier };\nconst scope = z.object({\n scope: z.enum([\"default\", \"user\", \"project\", \"workspace\", \"extension\", \"session\"]),\n scopeId: z.string().optional(),\n});\nconst preference = z.object({ name: identifier, scope: scope.optional() });\nconst notificationIdentity = z\n .object({\n id: identifier.optional(),\n dedupeKey: z.string().optional(),\n status: z.enum([\"done\", \"dismissed\", \"expired\"]).optional(),\n })\n .refine(\n (input) => input.id !== undefined || input.dedupeKey !== undefined,\n \"Provide a notification ID or dedupe key.\",\n );\nconst binary = z.union([z.instanceof(Uint8Array), z.instanceof(ArrayBuffer)]);\nconst fileScope = z.object({ type: identifier, id: z.string().optional() });\nconst terminalId = { sessionId: identifier };\nconst terminalRequest = z.object({\n cols: z.number().int().positive(),\n rows: z.number().int().positive(),\n command: z.array(z.string()).optional(),\n cwd: z.string().optional(),\n env: z.record(z.string(), z.string()).optional(),\n});\n\nconst projectId = { projectId: identifier.optional() };\n\nconst schemas = {\n \"harnesses.read\": z.object({ harnessId: identifier.optional(), model: z.string().optional() }),\n \"resources.actions\": z.discriminatedUnion(\"operation\", [\n z.object({ operation: z.literal(\"list\"), resource: extensionResourceRefSchema }),\n z.object({ operation: z.literal(\"execute\"), resource: extensionResourceRefSchema, key: identifier }),\n ]),\n \"commands.execute\": command,\n \"editing.session\": webviewEditingSessionParamsSchema,\n \"commands.stream\": z.discriminatedUnion(\"operation\", [\n command.extend({ ...streamId, operation: z.literal(\"start\") }),\n z.object({ ...streamId, operation: z.literal(\"cancel\") }),\n z.object({ ...streamId, operation: z.literal(\"ack\"), bytes: z.number().int().positive() }),\n ]),\n \"navigation.open\": z.object({ target: z.custom<NavigationTarget>(isNavigationTarget, \"Invalid navigation target.\") }),\n \"page.params.update\": z.object({ params: z.record(z.string(), pageParamValueSchema.nullable()) }),\n \"placement.close\": empty,\n \"notification.show\": z.union([\n z.object({\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string(),\n metadata: jsonObjectSchema.optional(),\n }),\n z.object({\n level: z.enum([\"info\", \"success\", \"warning\", \"error\"]),\n title: z.string().optional(),\n message: z.string().optional(),\n }),\n ]),\n \"notification.action\": webviewNotificationActionParamsSchema,\n \"notification.resolve\": notificationIdentity,\n \"notification.dismiss\": notificationIdentity,\n \"preferences.get\": preference,\n \"preferences.set\": preference.extend({\n value: z.union([\n z.boolean(),\n z.number(),\n z.string(),\n z.array(z.string()),\n z.array(z.number()),\n z.array(z.boolean()),\n jsonObjectSchema,\n ]),\n }),\n \"extension.settings.all\": empty,\n \"extension.settings.get\": z.object({ key: identifier }),\n \"extension.settings.set\": z.object({ key: identifier, value: z.unknown() }),\n \"extension.settings.delete\": z.object({ key: identifier }),\n \"terminal.session\": z.discriminatedUnion(\"operation\", [\n z.object({ operation: z.literal(\"open\"), request: terminalRequest }),\n z.object({ ...terminalId, operation: z.literal(\"write\"), data: z.union([z.string(), z.instanceof(Uint8Array)]) }),\n z.object({\n ...terminalId,\n operation: z.literal(\"resize\"),\n cols: z.number().int().positive(),\n rows: z.number().int().positive(),\n }),\n z.object({ ...terminalId, operation: z.literal(\"kill\"), signal: z.string().optional() }),\n z.object({ ...terminalId, operation: z.literal(\"subscribe\") }),\n ]),\n \"files.upload\": z.object({\n name: identifier,\n data: binary,\n mimeType: z.string().optional(),\n scope: fileScope.optional(),\n }),\n \"files.list\": z.object({ scope: fileScope.optional() }),\n \"files.delete\": z.object({ id: identifier }),\n \"artifacts.read\": z.discriminatedUnion(\"op\", [\n z.object({ op: z.literal(\"list\"), mount: identifier, prefix: z.string().optional() }),\n z.object({ op: z.literal(\"readText\"), mount: identifier, path: z.string() }),\n z.object({ op: z.literal(\"imageUrl\"), mount: identifier, path: z.string() }),\n ]),\n \"account.read\": z.discriminatedUnion(\"op\", [\n z.object({ op: z.literal(\"status\") }),\n z.object({ op: z.literal(\"loginStatus\"), id: identifier }),\n z.object({ op: z.literal(\"devices\") }),\n z.object({ op: z.literal(\"projectSyncStatus\"), ...projectId }),\n ]),\n \"account.manage\": z.discriminatedUnion(\"op\", [\n z.object({ op: z.literal(\"login\"), managerOrigin: identifier }),\n z.object({ op: z.literal(\"cancelLogin\"), id: identifier }),\n z.object({ op: z.literal(\"logout\") }),\n z.object({ op: z.literal(\"renameDevice\"), id: identifier, name: z.string() }),\n z.object({ op: z.literal(\"removeDevice\"), id: identifier }),\n z.object({ op: z.literal(\"syncProject\"), ...projectId }),\n z.object({ op: z.literal(\"stopProjectSync\"), ...projectId }),\n ]),\n} satisfies Record<WebviewHostCapability, z.ZodType>;\n\nexport const parseWebviewCapabilityParams = <Capability extends WebviewHostCapability>(\n capability: Capability,\n input: unknown,\n) => {\n const result = schemas[capability].safeParse(input);\n if (!result.success)\n throw new WebviewHostCapabilityError(\"invalid_params\", `Invalid parameters for ${capability}.`, {\n capability,\n issues: result.error.issues.map((issue) => ({ path: issue.path.map(String), message: issue.message })),\n });\n return result.data as WebviewHostCapabilityParams[Capability];\n};\n","import type { CommandExecutionResult } from \"@pstdio/sdk/api\";\nimport type { CommandStreamClientEvent } from \"@pstdio/sdk/client\";\nimport type { CommandOutcome, WebviewCommandsExecuteParams, WebviewCommandsStreamParams } from \"@pstdio/sdk/extensions\";\nimport { commandExecutionResultSchema } from \"pstdio-api-contracts\";\nimport { serializeCommandError } from \"pstdio-api-contracts/extension-kernel\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\n\nconst errorOutcome = (code: string, reason = code): CommandOutcome => ({ ok: false, status: \"error\", code, reason });\nconst failureOutcome = (error: unknown) => {\n const serialized = serializeCommandError(error);\n return {\n ok: false,\n status: \"error\",\n code: (error as { code?: string })?.code ?? \"command_stream_disconnected\",\n reason: serialized.message,\n error: serialized,\n ...(serialized.cause !== undefined ? { cause: serialized.cause } : {}),\n } satisfies CommandOutcome;\n};\nconst fail = (code: string) => Object.assign(new Error(code), { code });\nconst MAX_STREAMS = 16;\nconst MAX_UNREAD_BYTES = 8 * 1024 * 1024;\n\nexport const withFrameSignal = async <T>(hostEvents: HostEventPublisher, run: (signal: AbortSignal) => Promise<T>) => {\n const controller = new AbortController();\n const unsubscribe = hostEvents.onDisconnect(() => controller.abort());\n try {\n return await run(controller.signal);\n } finally {\n unsubscribe();\n }\n};\n\ninterface StreamCapabilityDeps {\n stream(input: WebviewCommandsExecuteParams, signal: AbortSignal): AsyncIterable<CommandStreamClientEvent>;\n publish?(response: CommandExecutionResult): void;\n}\n\n/** State belongs to a frame, across React renders and bridge reconnects. */\nexport const createWebviewCommandStreamHandler = (hostEvents: HostEventPublisher) => {\n const streams = new Map<string, { unread: number; stop: (code: string, emit?: boolean) => void }>();\n return async (input: WebviewCommandsStreamParams, deps: StreamCapabilityDeps) => {\n const { streamId } = input;\n if (input.operation === \"cancel\") streams.get(streamId)?.stop(\"command_stream_cancelled\");\n else if (input.operation === \"ack\") {\n const state = streams.get(streamId);\n if (state && Number.isSafeInteger(input.bytes) && input.bytes > 0 && input.bytes <= state.unread)\n state.unread -= input.bytes;\n } else {\n if (streams.has(streamId)) throw fail(\"command_stream_duplicate\");\n if (streams.size >= MAX_STREAMS) throw fail(\"command_stream_limit\");\n const controller = new AbortController();\n let ended = false;\n let unsubscribe = () => {};\n const emit = (payload: object) =>\n hostEvents.emit({ scope: \"commands.stream\", payload: { streamId, ...payload } });\n const finish = (outcome: CommandOutcome, notify = true) => {\n if (ended) return;\n ended = true;\n streams.delete(streamId);\n unsubscribe();\n controller.abort();\n if (notify) emit({ type: \"end\", outcome });\n };\n const state = { unread: 0, stop: (code: string, notify = true) => finish(errorOutcome(code), notify) };\n streams.set(streamId, state);\n unsubscribe = hostEvents.onDisconnect(() => state.stop(\"command_stream_cancelled\", false));\n const { operation: _, streamId: _streamId, commandId, ...body } = input;\n const receive = (event: CommandStreamClientEvent) => {\n if (event.type === \"end\") {\n const response = commandExecutionResultSchema.parse(event.response);\n deps.publish?.(response);\n finish(response.outcome);\n return;\n }\n state.unread += new TextEncoder().encode(JSON.stringify(event.data)).byteLength;\n if (state.unread > MAX_UNREAD_BYTES) state.stop(\"command_stream_overflow\");\n else emit(event);\n };\n const run = async () => {\n try {\n for await (const event of deps.stream({ commandId, ...body }, controller.signal)) {\n if (ended) break;\n receive(event);\n }\n if (!ended) state.stop(\"command_stream_disconnected\");\n } catch (error) {\n finish(failureOutcome(error));\n }\n };\n void run();\n }\n return { operation: input.operation, accepted: true as const };\n };\n};\n","import { CommandOutcomeError, getCommandValue } from \"@pstdio/sdk/extensions\";\nimport { validatedCommandOutcomeSchema } from \"pstdio-api-contracts\";\nimport type {\n MaybePromise,\n WebviewHostCapability,\n WebviewHostCapabilityParams,\n} from \"pstdio-api-contracts/extension-kernel\";\nimport type { HostCapability } from \"pstdio-extensions/bridge/contract\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport { z } from \"zod\";\nimport { createAccountCapability } from \"./account-capability\";\nimport type { ExtensionWebviewHostAdapters } from \"./extension-webview-host-adapters\";\nimport { createTerminalSessionCapability } from \"./terminal-session-capability\";\nimport { parseWebviewCapabilityParams, WebviewHostCapabilityError } from \"./webview-capability-params\";\nimport { createWebviewCommandStreamHandler, withFrameSignal } from \"./webview-command-streams\";\n\nconst commandResponse = z.object({ outcome: validatedCommandOutcomeSchema }).passthrough();\nconst streamHandlers = new WeakMap<HostEventPublisher, ReturnType<typeof createWebviewCommandStreamHandler>>();\nconst streamHandler = (events: HostEventPublisher) => {\n let handler = streamHandlers.get(events);\n if (!handler) {\n handler = createWebviewCommandStreamHandler(events);\n streamHandlers.set(events, handler);\n }\n return handler;\n};\nconst after = <T>(result: MaybePromise<T>, done: () => unknown) =>\n result instanceof Promise ? result.then(done) : done();\n\nconst capability =\n <Name extends WebviewHostCapability>(\n name: Name,\n run: ((params: WebviewHostCapabilityParams[Name]) => unknown) | undefined,\n ) =>\n (input: unknown) => {\n if (!run)\n throw new WebviewHostCapabilityError(\"unsupported\", `The host does not support ${name}.`, { capability: name });\n return run(parseWebviewCapabilityParams(name, input));\n };\n\nconst commandExecution = (adapters: ExtensionWebviewHostAdapters) => {\n const { executeCommand, hostEvents } = adapters;\n if (!executeCommand) return undefined;\n return async (request: WebviewHostCapabilityParams[\"commands.execute\"]) => {\n try {\n const response = hostEvents\n ? await withFrameSignal(hostEvents, (signal) => Promise.resolve(executeCommand(request, signal)))\n : await executeCommand(request);\n return commandResponse.parse(response);\n } catch (error) {\n if (error instanceof CommandOutcomeError) return commandResponse.parse({ outcome: error.outcome });\n throw error;\n }\n };\n};\nconst commandStreaming = (adapters: ExtensionWebviewHostAdapters) => {\n const { streamCommand, hostEvents } = adapters;\n if (!streamCommand || !hostEvents) return undefined;\n return (request: WebviewHostCapabilityParams[\"commands.stream\"]) =>\n streamHandler(hostEvents)(request, { stream: streamCommand, publish: adapters.commandCompleted });\n};\n\nconst editingSession = (adapters: ExtensionWebviewHostAdapters) => {\n const { editing, executeCommand } = adapters;\n if (!editing || !executeCommand) return;\n return (request: WebviewHostCapabilityParams[\"editing.session\"]) =>\n editing.request(request, async (input) => {\n const response = commandResponse.parse(await executeCommand(input));\n return getCommandValue(response.outcome);\n });\n};\n\nexport const createExtensionWebviewHostCapabilities = (adapters: ExtensionWebviewHostAdapters) => {\n const {\n hostEvents,\n navigation,\n pageParams,\n placement,\n notifications,\n settings,\n preferences,\n files,\n artifacts,\n terminal,\n } = adapters;\n const terminalCapability =\n terminal && hostEvents ? createTerminalSessionCapability({ terminal, hostEvents }) : undefined;\n const readHarnesses = adapters.harnesses?.read.bind(adapters.harnesses);\n const account = createAccountCapability(adapters.account);\n return {\n \"harnesses.read\": capability(\"harnesses.read\", readHarnesses),\n \"resources.actions\": capability(\"resources.actions\", adapters.resourceActions),\n \"commands.execute\": capability(\"commands.execute\", commandExecution(adapters)),\n \"commands.stream\": capability(\"commands.stream\", commandStreaming(adapters)),\n \"editing.session\": capability(\"editing.session\", editingSession(adapters)),\n \"navigation.open\": capability(\n \"navigation.open\",\n navigation && ((request) => after(navigation.open(request.target), () => undefined)),\n ),\n \"page.params.update\": capability(\n \"page.params.update\",\n pageParams &&\n ((request) => {\n const location = pageParams.update(request.params);\n return location instanceof Promise ? location.then((value) => ({ location: value })) : { location };\n }),\n ),\n \"placement.close\": capability(\"placement.close\", placement && (() => placement.close())),\n \"notification.show\": capability(\n \"notification.show\",\n notifications?.show &&\n ((request) =>\n after(\n notifications.show!(\n \"type\" in request\n ? request\n : {\n type: request.level,\n ...(request.title === undefined ? {} : { title: request.title }),\n message: request.message ?? \"\",\n },\n ),\n () => undefined,\n )),\n ),\n \"notification.action\": capability(\n \"notification.action\",\n notifications?.create && ((request) => notifications.create!(request)),\n ),\n \"notification.resolve\": capability(\n \"notification.resolve\",\n notifications?.resolve && ((request) => notifications.resolve!({ ...request, status: request.status ?? \"done\" })),\n ),\n \"notification.dismiss\": capability(\n \"notification.dismiss\",\n notifications?.resolve && ((request) => notifications.resolve!({ ...request, status: \"dismissed\" })),\n ),\n \"preferences.get\": capability(\n \"preferences.get\",\n preferences && ((request) => preferences.get(request.name, request.scope)),\n ),\n \"preferences.set\": capability(\n \"preferences.set\",\n preferences &&\n ((request) => {\n const scope = request.scope ?? { scope: \"user\" };\n if (scope.scope === \"default\")\n throw new WebviewHostCapabilityError(\n \"preference_scope_read_only\",\n \"Default preferences are read-only.\",\n {},\n );\n return after(preferences.set(request.name, request.value, scope), () => ({\n name: request.name,\n value: request.value,\n }));\n }),\n ),\n \"extension.settings.all\": capability(\"extension.settings.all\", settings && (() => settings.all())),\n \"extension.settings.get\": capability(\n \"extension.settings.get\",\n settings && ((request) => settings.get(request.key)),\n ),\n \"extension.settings.set\": capability(\n \"extension.settings.set\",\n settings &&\n (async (request) => ({ key: request.key, value: (await settings.set(request.key, request.value)).value })),\n ),\n \"extension.settings.delete\": capability(\n \"extension.settings.delete\",\n settings && ((request) => settings.delete(request.key)),\n ),\n \"terminal.session\": capability(\n \"terminal.session\",\n terminalCapability && ((request) => terminalCapability(request)),\n ),\n \"files.upload\": capability(\"files.upload\", files && ((request) => files.upload(request))),\n \"files.list\": capability(\"files.list\", files && ((request) => files.list(request))),\n \"files.delete\": capability(\"files.delete\", files && ((request) => files.delete(request))),\n \"artifacts.read\": capability(\"artifacts.read\", artifacts && ((request) => artifacts.read(request))),\n \"account.read\": capability(\"account.read\", account),\n \"account.manage\": capability(\"account.manage\", account),\n } satisfies Record<WebviewHostCapability, HostCapability>;\n};\n","import { type NavigationTarget as ExtensionNavigationTarget, isNavigationTarget } from \"@pstdio/sdk/extensions\";\nimport { qualifyNavigationTarget } from \"pstdio-api-contracts\";\nimport type { NavigationTarget, NavigationTargetCommand, WorkbenchPanelRegion } from \"../../core\";\n\nexport interface ToWorkbenchNavigationTargetInput {\n commandIdOf?(\n command: Extract<ExtensionNavigationTarget, { kind: \"command\" }>[\"target\"][\"command\"],\n ): string | undefined;\n commandTargetOf?(target: Extract<ExtensionNavigationTarget, { kind: \"command\" }>): NavigationTargetCommand;\n extensionId?: string;\n projectId?: string;\n region?: WorkbenchPanelRegion;\n}\n\nconst toCommandTarget = (\n target: Extract<ExtensionNavigationTarget, { kind: \"command\" }>,\n input: ToWorkbenchNavigationTargetInput,\n) => {\n const override = input.commandTargetOf?.(target);\n if (override) return { ...override, ...(input.region ? { region: input.region } : {}) };\n const command = target.target.command;\n const extensionId = command.extensionId ?? input.extensionId;\n const commandId =\n input.commandIdOf?.(command) ??\n (extensionId && extensionId !== \"pstdio\" ? `${extensionId}.command.${command.id}` : command.id);\n return {\n kind: \"command\",\n commandId,\n args: target.target.params,\n ...(input.region ? { region: input.region } : {}),\n } satisfies NavigationTargetCommand;\n};\n\n// The return type stays explicit: the compound branch recurses, and TypeScript\n// cannot infer the return type of a self-referencing function.\ntype NavigationOperation = Extract<ExtensionNavigationTarget, { kind: \"page\" | \"panel\" }>;\nexport function toWorkbenchNavigationTarget(\n target: NavigationOperation,\n input?: ToWorkbenchNavigationTargetInput,\n): NavigationOperation;\nexport function toWorkbenchNavigationTarget(\n target: ExtensionNavigationTarget,\n input?: ToWorkbenchNavigationTargetInput,\n): NavigationTarget;\nexport function toWorkbenchNavigationTarget(\n target: ExtensionNavigationTarget,\n input: ToWorkbenchNavigationTargetInput = {},\n): NavigationTarget {\n if (!isNavigationTarget(target)) throw new Error(\"Invalid navigation target.\");\n if (input.extensionId) target = qualifyNavigationTarget(target, input.extensionId, input.projectId);\n if (target.kind === \"command\") return toCommandTarget(target, input);\n if (target.kind === \"href\") return target;\n if (target.kind === \"page\") return target;\n if (target.kind === \"panel\") return { ...target, ...(input.region ? { region: input.region } : {}) };\n return {\n kind: \"compound\",\n targets: target.targets.map((item) => toWorkbenchNavigationTarget(item, input)),\n };\n}\n","import {\n applyEditingChanges,\n diffEditingState,\n type JsonObject,\n rebaseEditingChanges,\n type WebviewCommandsExecuteParams,\n type WebviewEditingChange,\n type WebviewEditingSessionParams,\n type WebviewEditingSnapshot,\n} from \"pstdio-api-contracts/extension-kernel\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type { WorkbenchCore } from \"../../core\";\n\ninterface Member {\n id: string;\n events: HostEventPublisher;\n document: EditingDocument;\n}\ninterface EditingDocument {\n key: string;\n scope: string;\n value: JsonObject;\n saved: JsonObject;\n version: number;\n revision: number;\n savedRevision: number;\n save: WebviewCommandsExecuteParams;\n execute: (input: WebviewCommandsExecuteParams) => Promise<unknown>;\n members: Set<Member>;\n previews: Map<Member, WebviewEditingChange[]>;\n writing: Promise<void> | null;\n}\ninterface Owner {\n projectId: string;\n extensionId: string;\n events: HostEventPublisher;\n}\ntype OpenRequest = Extract<WebviewEditingSessionParams, { operation: \"open\" }>;\nconst fail = (code: string) => Object.assign(new Error(code), { code });\nconst ownerScope = (owner: Owner) => JSON.stringify([owner.projectId, owner.extensionId]);\n\nconst snapshot = (document: EditingDocument) =>\n ({\n value: applyEditingChanges(document.value, [...document.previews.values()].flat()),\n version: document.version,\n revision: document.revision,\n savedRevision: document.savedRevision,\n }) satisfies WebviewEditingSnapshot;\nconst publish = (document: EditingDocument, accepted?: { member: Member; sequence: number }) => {\n document.version++;\n const current = snapshot(document);\n for (const member of document.members)\n member.events.emit({\n scope: \"editing.session\",\n payload: {\n sessionId: member.id,\n snapshot: current,\n ...(accepted?.member === member ? { appliedSequence: accepted.sequence } : {}),\n },\n });\n};\n\nconst preview = (member: Member, input: Extract<WebviewEditingSessionParams, { changes: unknown }>) => {\n const document = member.document;\n const draft = applyEditingChanges(document.value, document.previews.get(member) ?? []);\n const next = applyEditingChanges(draft, input.changes);\n const previews = new Map(document.previews);\n previews.delete(member);\n previews.set(member, diffEditingState(document.value, next));\n applyEditingChanges(document.value, [...previews.values()].flat());\n document.previews = previews;\n publish(document, { member, sequence: input.sequence });\n};\nconst commit = (member: Member, input: Extract<WebviewEditingSessionParams, { changes: unknown }>) => {\n const document = member.document;\n const changes = [...(document.previews.get(member) ?? []), ...input.changes];\n const value = applyEditingChanges(document.value, changes);\n const previews = new Map(document.previews);\n previews.delete(member);\n const rebased = rebaseEditingChanges(value, previews);\n document.value = value;\n document.previews = rebased.drafts;\n if (changes.length) document.revision++;\n publish(document, { member, sequence: input.sequence });\n};\nconst cancel = (member: Member) => {\n const document = member.document;\n if (!document.previews.has(member)) return;\n const previews = new Map(document.previews);\n previews.delete(member);\n document.previews = rebaseEditingChanges(document.value, previews).drafts;\n publish(document);\n};\nconst refresh = (document: EditingDocument, input: Extract<WebviewEditingSessionParams, { operation: \"refresh\" }>) => {\n if (input.expectedVersion !== document.version || document.savedRevision !== document.revision) return;\n const value = structuredClone(input.value);\n const rebased = rebaseEditingChanges(value, document.previews);\n document.value = value;\n document.saved = structuredClone(value);\n document.previews = rebased.drafts;\n publish(document);\n return snapshot(document);\n};\nconst createDocument = (owner: Owner, key: string, input: OpenRequest, execute: EditingDocument[\"execute\"]) => {\n const document: EditingDocument = {\n key,\n scope: ownerScope(owner),\n value: structuredClone(input.initial),\n saved: structuredClone(input.initial),\n version: 0,\n revision: 0,\n savedRevision: 0,\n save: structuredClone(input.save),\n execute,\n members: new Set(),\n previews: new Map(),\n writing: null,\n };\n return document;\n};\n\nconst createSessions = () => {\n const documents = new Map<string, EditingDocument>();\n const connections = new WeakMap<HostEventPublisher, Map<string, Member>>();\n const clean = (document: EditingDocument) => {\n if (!document.members.size && !document.writing && document.savedRevision === document.revision)\n documents.delete(document.key);\n };\n const close = (member: Member) => {\n const document = member.document;\n document.members.delete(member);\n connections.get(member.events)?.delete(member.id);\n cancel(member);\n clean(document);\n };\n const flush = (document: EditingDocument) => {\n if (!document.writing) {\n document.writing = Promise.resolve()\n .then(async () => {\n while (document.savedRevision < document.revision) {\n const value = structuredClone(document.value);\n const revision = document.revision;\n const changes = diffEditingState(document.saved, value);\n if (changes.length)\n await document.execute({\n ...document.save,\n params: {\n ...document.save.params,\n changes: changes.map(({ path, value }) => ({ path, value })),\n },\n });\n document.saved = value;\n document.savedRevision = revision;\n publish(document);\n }\n })\n .finally(() => {\n document.writing = null;\n clean(document);\n });\n }\n return document.writing;\n };\n const connection = (events: HostEventPublisher) => {\n const existing = connections.get(events);\n if (existing) return existing;\n const members = new Map<string, Member>();\n connections.set(events, members);\n events.onDisconnect(() => {\n for (const member of members.values()) close(member);\n });\n return members;\n };\n const open = (owner: Owner, input: OpenRequest, execute: EditingDocument[\"execute\"]) => {\n if (!input.save.commandId.startsWith(`${owner.extensionId}.command.`)) throw fail(\"editing_save_not_owner\");\n const key = JSON.stringify([owner.projectId, owner.extensionId, input.key]);\n let document = documents.get(key);\n if (\n document &&\n (document.save.commandId !== input.save.commandId ||\n diffEditingState(document.save.params ?? {}, input.save.params ?? {}).length)\n )\n throw fail(\"editing_save_mismatch\");\n const members = connection(owner.events);\n const member = members.get(input.sessionId);\n if (member && member.document !== document) throw fail(\"editing_session_duplicate\");\n if (!document) {\n document = createDocument(owner, key, input, execute);\n documents.set(key, document);\n }\n if (!member) {\n const joined = { id: input.sessionId, events: owner.events, document };\n members.set(input.sessionId, joined);\n document.members.add(joined);\n }\n return snapshot(document);\n };\n return (owner: Owner) => ({\n async request(input: WebviewEditingSessionParams, execute: EditingDocument[\"execute\"]) {\n if (input.operation === \"open\") return open(owner, input, execute);\n const member = connection(owner.events).get(input.sessionId);\n if (!member && input.operation === \"close\") return;\n if (!member) throw fail(\"editing_session_closed\");\n if (member.document.scope !== ownerScope(owner)) throw fail(\"editing_session_closed\");\n const document = member.document;\n if (input.operation === \"close\") {\n close(member);\n return;\n }\n switch (input.operation) {\n case \"preview\":\n preview(member, input);\n break;\n case \"cancel\":\n cancel(member);\n break;\n case \"refresh\":\n return refresh(document, input);\n case \"commit\":\n commit(member, input);\n await flush(document);\n break;\n case \"save\":\n await flush(document);\n break;\n }\n return snapshot(document);\n },\n });\n};\n\nconst sessions = new WeakMap<WorkbenchCore, ReturnType<typeof createSessions>>();\nexport const createWorkbenchEditingSessionAdapter = (input: {\n workbench: WorkbenchCore;\n extensionId?: string;\n projectId?: string;\n hostEvents?: HostEventPublisher;\n}) => {\n const { workbench, extensionId, projectId, hostEvents } = input;\n if (!extensionId || !projectId || !hostEvents) return;\n let owner = sessions.get(workbench);\n if (!owner) {\n owner = createSessions();\n sessions.set(workbench, owner);\n }\n return owner({ extensionId, projectId, events: hostEvents });\n};\n","import type { PreferenceScopeRef, PreferenceValue, WorkbenchCore } from \"../../core\";\n\nexport interface WebviewOwnedPreferences {\n get(name: string, scope?: PreferenceScopeRef): Promise<PreferenceValue | undefined> | PreferenceValue | undefined;\n set(name: string, value: PreferenceValue, scope: PreferenceScopeRef): Promise<void> | void;\n}\n\nexport const createWebviewPreferencesAdapter = (input: {\n workbench: WorkbenchCore;\n extensionId?: string;\n ownedPreferences?: WebviewOwnedPreferences;\n warn?: (message: string) => void;\n}) => {\n const registry = input.workbench.preferences;\n const owner = () => {\n if (!input.extensionId) throw new Error(\"Preferences require the calling extension identity\");\n return input.extensionId;\n };\n const registered = (name: string) => {\n const schema = registry.getSchema(name);\n if (schema && input.extensionId && schema.ownerId !== \"workbench.core\" && schema.ownerId !== input.extensionId)\n (input.warn ?? console.warn)(\n `Cross-extension preference access to ${name} is deprecated. Use preferences owned by ${input.extensionId}.`,\n );\n return Boolean(schema);\n };\n return {\n get: (name: string, scope?: PreferenceScopeRef) => {\n if (registered(name)) return registry.getValue(name, scope);\n owner();\n return input.ownedPreferences?.get(name, scope) ?? registry.getOwnedValue(owner(), name, scope);\n },\n set: (name: string, value: PreferenceValue, scope: PreferenceScopeRef) => {\n if (scope.scope === \"default\") throw new Error(\"preference_scope_read_only\");\n if (registered(name)) {\n return registry.setValue(name, value, scope);\n }\n owner();\n return input.ownedPreferences\n ? input.ownedPreferences.set(name, value, scope)\n : registry.setOwnedValue(owner(), name, value, scope);\n },\n };\n};\n","import type { WebviewHostCapabilityParams } from \"pstdio-api-contracts/extension-kernel\";\nimport { RESOURCE_ACTIONS_EVENTS_SCOPE } from \"pstdio-api-contracts/extension-kernel\";\nimport type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { orderMenuEntries, resolveMenuEntries } from \"../../react/menus/menu-entries\";\nimport { resolveResourceActionMenu, subscribeResourceActionChanges } from \"../../react/menus/resource-action-menu\";\n\n// Tells a frame to list again once actions may have changed. The subscription\n// starts on the first list and ends when the frame disconnects.\nconst createChangeNotifier = (workbench: WorkbenchCore, hostEvents: HostEventPublisher | undefined) => {\n let stop: (() => void) | undefined;\n let pending = false;\n const emit = () => {\n if (pending) return;\n pending = true;\n queueMicrotask(() => {\n pending = false;\n hostEvents?.emit({ scope: RESOURCE_ACTIONS_EVENTS_SCOPE, payload: { type: \"changed\" } });\n });\n };\n return () => {\n if (!hostEvents || stop) return;\n const unsubscribe = subscribeResourceActionChanges(workbench, emit);\n const stopOnDisconnect = hostEvents.onDisconnect(() => stop?.());\n stop = () => {\n unsubscribe();\n stopOnDisconnect();\n stop = undefined;\n };\n };\n};\n\nexport const createWebviewResourceActions = (\n workbench: WorkbenchCore,\n projectId: string | undefined,\n hostEvents: HostEventPublisher | undefined,\n) => {\n const watchChanges = createChangeNotifier(workbench, hostEvents);\n return async (input: WebviewHostCapabilityParams[\"resources.actions\"]) => {\n // The host owns the project scope; webviews cannot reach another project's resources.\n const menu = resolveResourceActionMenu(workbench, projectId ? { ...input.resource, projectId } : input.resource);\n const entries = menu ? orderMenuEntries(resolveMenuEntries(menu)) : [];\n if (input.operation === \"execute\") {\n const entry = entries.find(({ id }) => id === input.key);\n if (!entry?.run || entry.disabled) throw new Error(\"This resource action is no longer available.\");\n await entry.run();\n return [];\n }\n watchChanges();\n return entries.map((entry) => ({\n key: entry.id,\n label: entry.label,\n commandId: entry.commandId,\n icon: entry.icon,\n iconSrc: entry.iconSrc,\n description: entry.description,\n isDisabled: entry.disabled,\n separatorBefore: entry.separatorBefore,\n group: entry.group ?? menu?.group,\n }));\n };\n};\n","import type { HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type { WorkbenchCore, WorkbenchPanelInstance } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { ExtensionWebviewHostAdapters } from \"./extension-webview-host-adapters\";\nimport { createExtensionWebviewHostCapabilities } from \"./extension-webview-host-capabilities\";\nimport { createWorkbenchEditingSessionAdapter } from \"./webview-editing-session\";\nimport { createWebviewPreferencesAdapter, type WebviewOwnedPreferences } from \"./webview-preferences-capability\";\nimport { createWebviewResourceActions } from \"./webview-resource-actions\";\n\ninterface CreateWorkbenchWebviewHostAdaptersInput {\n workbench: WorkbenchCore;\n placement?: WorkbenchPanelInstance;\n extensionId?: string;\n projectId?: string;\n ownedPreferences?: WebviewOwnedPreferences;\n warn?: (message: string) => void;\n hostEvents?: HostEventPublisher;\n}\n\nexport const createWorkbenchWebviewHostAdapters = (input: CreateWorkbenchWebviewHostAdaptersInput) => {\n const { workbench, placement, extensionId, projectId, hostEvents } = input;\n return {\n resourceActions: createWebviewResourceActions(workbench, projectId, hostEvents),\n hostEvents,\n editing: createWorkbenchEditingSessionAdapter(input),\n executeCommand: async (request, signal) => ({\n outcome: {\n ok: true,\n status: \"success\",\n value: await workbench.commands.executeCommand(request.commandId, request.params, {\n resource: request.resource,\n signal,\n }),\n },\n }),\n placement: placement?.placementIdentity\n ? { close: () => workbench.closePlacement(placement.placementIdentity!) }\n : undefined,\n pageParams: {\n update: (patch) => {\n const state = workbench.pages.store.getState();\n if (!state.location) throw new Error(\"page_params_no_page\");\n if (!extensionId || extensionId !== state.location.page.extensionId) throw new Error(\"page_params_not_owner\");\n return workbench.pageLocations.updateParams(patch);\n },\n },\n navigation: {\n open: (target) =>\n workbench.navigation.openTarget(toWorkbenchNavigationTarget(target, { extensionId, projectId })),\n },\n notifications: {\n show: (notice) => {\n if (notice.type === \"error\") {\n workbench.notifications.captureActionError(\n notice.title ?? \"Extension action\",\n placement?.instanceId,\n )(new Error(notice.message));\n return;\n }\n workbench.notifications.show({\n level: notice.type,\n metadata: notice.metadata,\n title: notice.title ?? notice.message,\n message: notice.title === undefined ? undefined : notice.message,\n });\n },\n },\n preferences: createWebviewPreferencesAdapter(input),\n terminal: workbench.terminal,\n } satisfies ExtensionWebviewHostAdapters;\n};\n\nexport const createWorkbenchWebviewHostCapabilities = (input: CreateWorkbenchWebviewHostAdaptersInput) =>\n createExtensionWebviewHostCapabilities(createWorkbenchWebviewHostAdapters(input));\n","import type { WebviewHostProps } from \"pstdio-api-contracts/extension-kernel\";\nimport type { ThemePreference } from \"pstdio-extensions/bridge/contract\";\nimport { createHostEventPublisher, type HostEventPublisher } from \"pstdio-extensions/bridge/host\";\nimport type {\n WorkbenchCore,\n WorkbenchPanelInstance,\n WorkbenchPanelRenderInput,\n WorkbenchRendererRegistration,\n} from \"../../core\";\nimport { BridgeWebviewFrame } from \"./bridge-webview-frame\";\nimport type { ExtensionWebviewHostAdapters } from \"./extension-webview-host-adapters\";\nimport { createExtensionWebviewHostCapabilities } from \"./extension-webview-host-capabilities\";\nimport { createWorkbenchWebviewHostAdapters } from \"./webview-host-capabilities\";\n\nexport interface BridgeWebviewRenderContext {\n workbench: WorkbenchCore;\n webviewId: string;\n extensionId?: string;\n placement: WorkbenchPanelInstance;\n /** Channel for pushing host events (e.g. terminal output) into this webview. */\n hostEvents: HostEventPublisher;\n}\n\n// Hosts supply services. The shared factory owns capability routing, validation and results.\nexport type CreateBridgeWebviewHostAdapters = (context: BridgeWebviewRenderContext) => ExtensionWebviewHostAdapters;\n\n// What the host pushes into the guest's props store. Hosts inject this to forward dynamic\n// data — e.g. the dashboard forwards extension command outcomes and theme preference.\nexport type CreateBridgeWebviewProps = (\n context: BridgeWebviewRenderContext,\n) => Partial<WebviewHostProps> & Record<string, unknown>;\nexport type CreateBridgeWebviewTheme = (context: BridgeWebviewRenderContext) => ThemePreference;\n\ninterface CreateBridgeWebviewRendererInput {\n createHostAdapters?: CreateBridgeWebviewHostAdapters;\n createProps?: CreateBridgeWebviewProps;\n createTheme?: CreateBridgeWebviewTheme;\n}\n\nexport const BRIDGE_WEBVIEW_RENDERER_ID = \"webview:bridge\";\n\nexport interface BridgeWebviewConfig {\n title?: string;\n runtimeUrl: string;\n moduleUrl: string;\n styles?: string[];\n capabilities?: string[];\n}\n\nconst isBridgeWebviewConfig = (value: unknown): value is BridgeWebviewConfig => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const config = value as Partial<BridgeWebviewConfig>;\n return typeof config.runtimeUrl === \"string\" && typeof config.moduleUrl === \"string\";\n};\n\nconst createPlacementProps: CreateBridgeWebviewProps = ({ placement }) => ({\n placement,\n resource: placement.resource,\n});\n\nconst createLightTheme: CreateBridgeWebviewTheme = () => \"light\";\n\nconst hostEventPublishersByWorkbench = new WeakMap<WorkbenchCore, Map<string, HostEventPublisher>>();\n\nexport const getBridgeWebviewHostEventPublisher = (workbench: WorkbenchCore, instance: WorkbenchPanelInstance) => {\n let hostEventsByWidget = hostEventPublishersByWorkbench.get(workbench);\n if (!hostEventsByWidget) {\n hostEventsByWidget = new Map();\n hostEventPublishersByWorkbench.set(workbench, hostEventsByWidget);\n }\n\n const key = instance.instanceId;\n let hostEvents = hostEventsByWidget.get(key);\n if (!hostEvents) {\n hostEvents = createHostEventPublisher();\n hostEventsByWidget.set(key, hostEvents);\n }\n\n return hostEvents;\n};\n\nexport const renderBridgeWebviewFrame = (input: {\n sizing?: \"content-width\";\n context: BridgeWebviewRenderContext;\n createHostAdapters: CreateBridgeWebviewHostAdapters;\n createProps: CreateBridgeWebviewProps;\n createTheme?: CreateBridgeWebviewTheme;\n ownerId?: string;\n title: string;\n webview: BridgeWebviewConfig;\n}) => {\n const { context, createHostAdapters, createProps, createTheme = createLightTheme, ownerId, title, webview } = input;\n return (\n <BridgeWebviewFrame\n sizing={input.sizing}\n view={{\n extensionId: ownerId ?? \"workbench\",\n id: context.webviewId,\n label: webview.title ?? title,\n webview: {\n capabilities: webview.capabilities,\n moduleUrl: webview.moduleUrl,\n runtimeUrl: webview.runtimeUrl,\n styles: webview.styles ?? [],\n },\n }}\n props={createProps(context)}\n workbench={context.workbench}\n theme={createTheme(context)}\n capabilities={createExtensionWebviewHostCapabilities(\n createHostAdapters({ ...context, extensionId: ownerId ?? context.extensionId }),\n )}\n hostEvents={context.hostEvents}\n />\n );\n};\n\nconst renderBridgeWebview = (\n input: WorkbenchPanelRenderInput,\n createHostAdapters: CreateBridgeWebviewHostAdapters,\n createProps: CreateBridgeWebviewProps,\n createTheme: CreateBridgeWebviewTheme,\n) => {\n const { workbench, panel, instance } = input;\n const webview = isBridgeWebviewConfig(panel.config) ? panel.config : null;\n if (!webview) return null;\n\n return renderBridgeWebviewFrame({\n sizing: panel.region === \"status\" ? \"content-width\" : undefined,\n context: {\n workbench,\n webviewId: instance.panelId,\n placement: instance,\n hostEvents: getBridgeWebviewHostEventPublisher(workbench, instance),\n },\n createHostAdapters,\n createProps,\n createTheme,\n ownerId: \"ownerId\" in panel ? panel.ownerId : undefined,\n title: panel.title,\n webview,\n });\n};\n\nexport const createBridgeWebviewRenderer = (input: CreateBridgeWebviewRendererInput = {}) => {\n const createHostAdapters = input.createHostAdapters ?? createWorkbenchWebviewHostAdapters;\n const createProps = input.createProps ?? createPlacementProps;\n const createTheme = input.createTheme ?? createLightTheme;\n\n return {\n id: BRIDGE_WEBVIEW_RENDERER_ID,\n render: (renderInput) => renderBridgeWebview(renderInput, createHostAdapters, createProps, createTheme),\n } satisfies WorkbenchRendererRegistration;\n};\n","import type { LocalizableString } from \"pstdio-api-contracts\";\nimport { isLocalizedString, type Localizable } from \"pstdio-api-contracts/extension-kernel\";\n\nexport const text = (value: Localizable<string> | LocalizableString | undefined, fallback = \"\") => {\n if (value === undefined) return fallback;\n if (!isLocalizedString(value)) return value;\n return value.default ?? value.$l10n;\n};\n","import type { CommandExecutionResult } from \"@pstdio/sdk/api\";\nimport { getCommandValue } from \"@pstdio/sdk/extensions\";\n\nexport const unwrapCommandValue = (result: unknown) => {\n const response = result as Partial<CommandExecutionResult> | undefined;\n if (!response?.outcome) return result;\n return getCommandValue(response.outcome);\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport type { WorkbenchExtensionCommandContext } from \"./workbench-extension-command\";\n\nexport const runResourceMutation = async (\n context: WorkbenchExtensionCommandContext,\n command: WorkbenchExtensionMetadata[\"commands\"][number],\n params: Record<string, unknown> | undefined,\n execution: WorkbenchCommandExecutionContext | undefined,\n persist: () => Promise<unknown>,\n) => {\n const mutation = command.resourceMutation;\n if (!mutation) return persist();\n const id = params?.[mutation.idParam] ?? execution?.resource?.id;\n if (typeof id !== \"string\") return persist();\n const resource = { type: mutation.resourceType, id, extensionId: command.extensionId, projectId: context.projectId };\n if (mutation.kind === \"remove\") {\n if (!(await context.workbench.commandPalette.requestConfirmation(text(command.title, \"Delete\")))) return;\n }\n const rawLabel = mutation.kind === \"rename\" ? params?.[mutation.labelParam] : undefined;\n // Leave invalid input to the command; never display a title that it cannot save.\n if (mutation.kind === \"rename\" && (typeof rawLabel !== \"string\" || !rawLabel.trim())) return persist();\n const preview = context.workbench.resources.preview.begin(\n resource,\n mutation.kind === \"remove\" ? { removed: true } : { label: (rawLabel as string).trim() },\n );\n try {\n const result = await context.workbench.resources.preview.persist(resource, persist);\n await preview.commit();\n return result;\n } catch (error) {\n preview.rollback();\n throw error;\n }\n};\n","import type { CommandExecuteRequest, CommandExecutionResult, WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport type {\n ResourceRef,\n WorkbenchCommandExecutionContext,\n WorkbenchModuleContext,\n WorkbenchPanelRegion,\n} from \"../../core\";\nimport { resolveCommandResourceParams } from \"../../core/registries/commands/command-resource-params\";\nimport { unwrapCommandValue } from \"./command-response\";\nimport { toWorkbenchNavigationTarget } from \"./extension-navigation-target\";\nimport { runResourceMutation } from \"./workbench-resource-mutation\";\nexport interface WorkbenchExtensionCommandContext {\n metadata?: Pick<WorkbenchExtensionMetadata, \"commands\">;\n executeCommand(commandId: string, body: CommandExecuteRequest, signal?: AbortSignal): Promise<unknown> | unknown;\n prepareCommandArgs?(\n commandId: string,\n args: unknown,\n context?: WorkbenchCommandExecutionContext,\n onArgsChange?: (args: unknown) => void,\n ): Promise<unknown> | unknown;\n projectId: string;\n workbench: WorkbenchModuleContext;\n}\nexport interface ExecuteWorkbenchExtensionCommandInput {\n region?: WorkbenchPanelRegion;\n workspaceId?: string;\n signal?: AbortSignal;\n metadata?: Record<string, unknown>;\n params?: Record<string, unknown>;\n resource?: ResourceRef;\n slot?: CommandExecuteRequest[\"slot\"];\n}\nexport const createExtensionSlot = (input: {\n context?: Record<string, unknown>;\n id: string;\n kind: NonNullable<CommandExecuteRequest[\"slot\"]>[\"kind\"];\n projectId: string;\n}) => ({\n id: input.id,\n kind: input.kind,\n context: { projectId: input.projectId, ...(input.context ?? {}) },\n});\nexport const executeWorkbenchExtensionCommandResponse = async (\n context: Pick<WorkbenchExtensionCommandContext, \"executeCommand\" | \"projectId\"> & {\n workbench: Pick<WorkbenchModuleContext, \"navigation\" | \"notifications\">;\n },\n commandId: string,\n input: ExecuteWorkbenchExtensionCommandInput = {},\n) => {\n const resource = input.resource;\n const reportNavigationError = context.workbench.notifications.captureActionError(\"Open command result\");\n const response = await context.executeCommand(\n commandId,\n {\n projectId: context.projectId,\n ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),\n ...(input.params ? { params: input.params } : {}),\n ...(resource ? { resource } : {}),\n ...(input.slot ? { slot: input.slot } : {}),\n source: \"dashboard\",\n ...(input.metadata ? { metadata: input.metadata } : {}),\n },\n input.signal,\n );\n const outcome = (response as Partial<CommandExecutionResult> | undefined)?.outcome;\n if (outcome?.status === \"success\") {\n for (const target of outcome.navigationRequests ?? []) {\n try {\n await context.workbench.navigation.openTarget(toWorkbenchNavigationTarget(target, { region: input.region }));\n } catch (error) {\n reportNavigationError(error);\n }\n }\n }\n return response;\n};\nexport const executeWorkbenchExtensionCommand = async (\n context: WorkbenchExtensionCommandContext,\n commandId: string,\n input: ExecuteWorkbenchExtensionCommandInput = {},\n) => {\n const command = context.metadata?.commands.find((candidate) => candidate.id === commandId);\n const params = command\n ? { ...resolveCommandResourceParams(command.params, input.params, { resource: input.resource }), ...input.params }\n : input.params;\n const persist = async () =>\n unwrapCommandValue(await executeWorkbenchExtensionCommandResponse(context, commandId, { ...input, params }));\n return command ? runResourceMutation(context, command, params, { resource: input.resource }, persist) : persist();\n};\n","import type { WorkbenchExtensionCommandPaletteResourceRecord } from \"@pstdio/sdk/api\";\nimport type { NavigationTarget, ResourceRef } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { CommandPaletteResourceResult, Disposable } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\n\ninterface ResourceItem {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n keywords?: string[];\n target: NavigationTarget;\n}\ninterface ProviderQueryResult {\n items?: ResourceItem[];\n}\nconst isProviderQueryResult = (value: unknown): value is ProviderQueryResult =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst commandIdOf = (\n command: Extract<\n NavigationTarget,\n {\n kind: \"command\";\n }\n >[\"target\"][\"command\"],\n extensionId: string,\n) => `${command.extensionId ?? extensionId}.command.${command.id}`;\nconst activateTarget = async (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionCommandPaletteResourceRecord,\n item: ResourceItem,\n) => {\n const { target } = item;\n if (target.kind === \"command\") {\n await executeWorkbenchExtensionCommand(context, commandIdOf(target.target.command, record.extensionId), {\n params: target.target.params,\n });\n // A selected command may mutate extension data; refresh providers so a reopened\n // palette reflects the change without an app reload.\n context.workbench.commandPaletteResources.refresh();\n return;\n }\n await context.workbench.navigation.openTarget(\n toWorkbenchNavigationTarget(target, {\n extensionId: record.extensionId,\n }),\n );\n};\nconst targetResource = (target: NavigationTarget): ResourceRef | undefined => {\n if (target.kind === \"page\" || target.kind === \"panel\") return target.resource;\n if (target.kind === \"compound\") return target.targets.find((step) => step.resource)?.resource;\n return undefined;\n};\nconst toResult = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionCommandPaletteResourceRecord,\n groupLabel: string,\n item: ResourceItem,\n): CommandPaletteResourceResult => ({\n id: `${record.id}:${item.id}`,\n resource: (() => {\n const resource = targetResource(item.target);\n return resource\n ? {\n ...resource,\n projectId: resource.projectId ?? context.projectId,\n extensionId: resource.extensionId ?? record.extensionId,\n }\n : undefined;\n })(),\n label: item.label,\n description: item.description,\n icon: item.icon,\n keywords: item.keywords,\n group: groupLabel,\n activate: () => activateTarget(context, record, item),\n});\nexport const registerWorkbenchExtensionCommandPaletteResources = (\n context: WorkbenchExtensionCommandContext,\n records: readonly WorkbenchExtensionCommandPaletteResourceRecord[],\n) => {\n const disposables: Disposable[] = [];\n for (const record of records) {\n const groupLabel = text(record.title, record.id);\n disposables.push(\n context.workbench.commandPaletteResources.registerProvider({\n id: record.id,\n title: groupLabel,\n refreshEventIds: record.refreshEventIds,\n query: async ({ query, limit, signal }) => {\n const activeResource = context.workbench.getActiveResource();\n const value = await executeWorkbenchExtensionCommand(context, record.queryHandlerId, {\n signal,\n params: {\n projectId: context.projectId,\n modeId: context.workbench.modes.getActiveModeId(),\n activeResource: activeResource,\n providerId: record.id,\n query,\n limit,\n },\n });\n if (!isProviderQueryResult(value)) return [];\n return (value.items ?? []).map((item) => toResult(context, record, groupLabel, item));\n },\n }),\n );\n }\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { WorkbenchExtensionControlsRendererRecord } from \"pstdio-api-contracts\";\nimport { controlsQueryResultSchema } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, ResourceRef } from \"../../core\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\n\nconst localize = (value: unknown, fallback = \"\") => text(value as Parameters<typeof text>[0], fallback);\nexport interface WorkbenchExtensionControlsAdapter {\n /** Supply a fallback resource when the widget placement carries none. */\n resolveResource?: (record: WorkbenchExtensionControlsRendererRecord) => ResourceRef | undefined;\n}\nconst registerControlsRenderer = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionControlsRendererRecord,\n adapter: WorkbenchExtensionControlsAdapter,\n) => {\n const slot = createExtensionSlot({\n id: record.id,\n kind: \"renderer\",\n projectId: context.projectId,\n context: { controlsRendererId: record.id },\n });\n const run = (\n commandId: string | undefined,\n params: Record<string, unknown>,\n resource?: ResourceRef,\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n ) =>\n commandId\n ? executeWorkbenchExtensionCommand(context, commandId, {\n params: {\n renderer: {\n rendererId: record.id,\n ...(pageParams ? { pageParams } : {}),\n projectId: context.projectId,\n ...(resource ? { resource: resource } : {}),\n invocation: { placement: \"visible\" },\n },\n ...params,\n },\n resource,\n signal,\n slot,\n metadata: { controlsRendererId: record.id },\n })\n : Promise.resolve(undefined);\n return context.workbench.views.registerView({\n id: record.id,\n title: localize(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"controls\",\n emptyTitle: localize(record.emptyTitle, \"\"),\n emptyDescription: localize(record.emptyDescription, \"\"),\n defaultValues: record.defaultValues,\n executeQuery: async (resource, signal, pageParams) => {\n const value = await run(\n record.queryHandlerId,\n {},\n resource ?? adapter.resolveResource?.(record),\n signal,\n pageParams,\n );\n const result = controlsQueryResultSchema.safeParse(value);\n if (!result.success) {\n const fields = result.error.issues\n .map((issue) => `body.query.${issue.path.join(\".\")}: ${issue.message}`)\n .join(\"; \");\n throw new Error(\n `Extension \"${record.extensionId}\" view \"${record.id}\" has invalid controls. Expected serializable control declarations. ${fields}`,\n );\n }\n return result.data;\n },\n updateValue: record.valueChangeHandlerId\n ? ({ controlId, value, values, resource }) =>\n run(record.valueChangeHandlerId, { controlId, value, values }, resource).then(() => undefined)\n : undefined,\n apply: record.applyHandlerId\n ? ({ values, resource }) => run(record.applyHandlerId, { values }, resource).then(() => undefined)\n : undefined,\n reset: record.resetHandlerId\n ? ({ controlIds, resource }) => run(record.resetHandlerId, { controlIds }, resource).then(() => undefined)\n : undefined,\n },\n });\n};\n// Bridges serializable controls renderer metadata into live workbench controls renderers\n// (wiring each query/update/apply/reset command id to command execution), and registers a\n// panel widget for every panel that places one.\nexport const registerWorkbenchExtensionControlsRenderers = (\n context: WorkbenchExtensionCommandContext,\n records: WorkbenchExtensionControlsRendererRecord[],\n adapter: WorkbenchExtensionControlsAdapter = {},\n): Disposable => {\n const disposables: Disposable[] = [];\n for (const record of records) disposables.push(registerControlsRenderer(context, record, adapter));\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { Localizable } from \"@pstdio/sdk/extensions\";\nimport { commandRefId } from \"@pstdio/sdk/extensions\";\nimport type { CommandParamSchema } from \"../../core\";\n\ntype LocalizableText = Localizable<string> | undefined;\ntype ParamLocalizer = (value: LocalizableText, fallback?: string) => string;\n\ntype ContributedParamSchema =\n | Record<string, { type: string; label?: LocalizableText; description?: LocalizableText; options?: unknown }>\n | undefined;\n\n/**\n * Contribution params carry `Localizable` labels; the workbench's command\n * surfaces render plain strings. Resolve at the boundary so no l10n object\n * reaches a renderer and gets stringified as \"[object Object]\".\n */\nexport const localizeParamSchema = (\n params: ContributedParamSchema,\n localize: ParamLocalizer,\n ownerExtensionId?: string,\n) => {\n if (!params) return undefined;\n\n return Object.fromEntries(\n Object.entries(params).map(([id, descriptor]) => [\n id,\n {\n ...descriptor,\n ...(descriptor.options && !Array.isArray(descriptor.options)\n ? { options: localizeOptionSource(descriptor.options, ownerExtensionId) }\n : {}),\n label: descriptor.label === undefined ? undefined : localize(descriptor.label, id),\n description: descriptor.description === undefined ? undefined : localize(descriptor.description),\n },\n ]),\n ) as CommandParamSchema;\n};\n\nconst localizeOptionSource = (value: unknown, ownerExtensionId?: string) => {\n const source = value as {\n command: { id: string; extensionId?: string };\n valueField: string;\n labelField: string;\n params?: Record<string, unknown>;\n };\n return {\n valueField: source.valueField,\n labelField: source.labelField,\n params: source.params,\n commandId: commandRefId({\n id: source.command.id,\n extensionId: source.command.extensionId ?? ownerExtensionId ?? \"pstdio\",\n }),\n };\n};\n","import type { WorkbenchExtensionDataTableRendererRecord } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { localizeParamSchema } from \"./param-schema-localization\";\n\nexport const mapViewToolbarActions = (\n record: Pick<WorkbenchExtensionDataTableRendererRecord, \"toolbarActions\" | \"extensionId\">,\n) =>\n record.toolbarActions?.map((action) => ({\n id: action.id,\n label: text(action.label, action.id),\n icon: action.icon,\n presentation: action.presentation,\n commandId: action.commandId,\n args: action.params,\n params: localizeParamSchema(action.input, text, record.extensionId),\n submitLabel: action.submitLabel,\n disabled: action.disabled,\n when: action.when,\n }));\n","import type { DataTableRendererSettings } from \"@pstdio/sdk/extensions\";\nimport { dataTableBuiltInViews, type WorkbenchExtensionDataTableRendererRecord } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { createElement } from \"react\";\nimport type {\n CollectionViewsProvider,\n DataTableRendererColumn,\n DataTableRendererQueryResult,\n DataTableRendererRow,\n Disposable,\n ResourceRef,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../../react\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\nimport { mapViewToolbarActions } from \"./view-toolbar-actions\";\n\nconst localize = (value: unknown, fallback = \"\") => text(value as Parameters<typeof text>[0], fallback);\n\nexport interface WorkbenchExtensionDataTableRendererAdapter {\n resolveRowResource?: (\n record: WorkbenchExtensionDataTableRendererRecord,\n row: { id: string; values: Record<string, unknown>; resource?: ResourceRef },\n ) => ResourceRef | undefined;\n /** Shared saved views for the table, such as the dashboard's project views. */\n createViewsProvider?: (\n record: WorkbenchExtensionDataTableRendererRecord,\n ) => CollectionViewsProvider<DataTableRendererSettings>;\n}\ntype WireColumn = NonNullable<WorkbenchExtensionDataTableRendererRecord[\"columns\"]>[number];\nconst toColumn = (column: WireColumn): DataTableRendererColumn => ({\n ...column,\n label: localize(column.label, column.id),\n description: column.description ? localize(column.description) : undefined,\n icon: column.icon ? createElement(WorkbenchIcon, { name: column.icon, size: 14 }) : undefined,\n});\nconst isQueryResult = (\n value: unknown,\n): value is {\n rows: Array<{\n id: string;\n values: Record<string, unknown>;\n resource?: ResourceRef;\n }>;\n columns?: WorkbenchExtensionDataTableRendererRecord[\"columns\"];\n} =>\n Boolean(\n value &&\n typeof value === \"object\" &&\n Array.isArray(\n (\n value as {\n rows?: unknown;\n }\n ).rows,\n ),\n );\nconst toRow = (row: { id: string; values: Record<string, unknown>; resource?: ResourceRef }): DataTableRendererRow => ({\n id: row.id,\n values: row.values,\n resource: row.resource ? row.resource : undefined,\n});\nconst registerRenderer = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionDataTableRendererRecord,\n adapter: WorkbenchExtensionDataTableRendererAdapter,\n) => {\n const builtIns = dataTableBuiltInViews(record);\n const originalRows = new WeakMap<DataTableRendererRow, Parameters<typeof toRow>[0]>();\n const slot = createExtensionSlot({\n id: record.id,\n kind: \"dataTableRenderer\",\n projectId: context.projectId,\n context: { dataTableRendererId: record.id },\n });\n const run = (\n commandId: string,\n params: Record<string, unknown>,\n resource?: ResourceRef,\n modeId?: string,\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n ) =>\n executeWorkbenchExtensionCommand(context, commandId, {\n params: {\n renderer: {\n rendererId: record.id,\n ...(pageParams ? { pageParams } : {}),\n projectId: context.projectId,\n ...(modeId ? { modeId } : {}),\n ...(resource ? { resource: resource } : {}),\n invocation: { placement: \"visible\" },\n },\n ...params,\n },\n resource,\n signal,\n slot,\n metadata: { dataTableRendererId: record.id },\n });\n return context.workbench.views.registerView({\n id: record.id,\n title: localize(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"dataTable\",\n resourceKind: record.resourceKind,\n toolbarActions: mapViewToolbarActions(record),\n columns: record.columns?.map(toColumn),\n initialPageSize: record.initialPageSize,\n pageSizeOptions: record.pageSizeOptions,\n defaultSettings: builtIns.settings,\n defaultFilter: record.defaultFilter,\n defaultSorts: record.defaultSorts,\n defaultViews: builtIns.views.map((view) => ({ ...view, title: localize(view.title, view.id) })),\n defaultActiveViewId: record.defaultActiveViewId,\n viewsProvider: adapter.createViewsProvider?.(record),\n selectionMode: record.selectionMode,\n selectionActions: record.selectionActions?.map((action) => ({\n id: action.id,\n commandId: action.commandId,\n label: localize(action.label, action.id),\n icon: action.icon ? createElement(WorkbenchIcon, { name: action.icon, size: 16 }) : undefined,\n destructive: action.destructive,\n run: (rows) => run(action.commandId, { rowIds: rows.map((row) => row.id) }).then(() => undefined),\n })),\n emptyTitle: record.emptyTitle ? localize(record.emptyTitle) : undefined,\n emptyDescription: record.emptyDescription ? localize(record.emptyDescription) : undefined,\n executeQuery: async ({ resource, modeId, filter, sorts, settings, pageParams }, signal) => {\n const value = await run(\n record.queryHandlerId,\n { filter, sorts, settings },\n resource,\n modeId,\n signal,\n pageParams,\n );\n if (!isQueryResult(value)) return { rows: [] };\n const rows = value.rows.map((row) => {\n const mapped = toRow(row);\n if (adapter.resolveRowResource) mapped.resource = adapter.resolveRowResource(record, row);\n originalRows.set(mapped, row);\n return mapped;\n });\n return {\n rows,\n columns: value.columns?.map(toColumn),\n } satisfies DataTableRendererQueryResult;\n },\n rowActions: record.rowActions?.map((action) => ({\n id: action.id,\n commandId: action.commandId,\n label: localize(action.label, action.id),\n icon: action.icon ? createElement(WorkbenchIcon, { name: action.icon, size: 16 }) : undefined,\n destructive: action.destructive,\n run: async (row) => {\n await run(action.commandId, { rowId: row.id }, row.resource);\n context.workbench.views.refreshView(record.id);\n },\n })),\n onRowActivate: record.rowActivationHandlerId\n ? async (row) => {\n await run(record.rowActivationHandlerId!, { row: originalRows.get(row) ?? row }, row.resource);\n }\n : undefined,\n },\n });\n};\nexport const registerWorkbenchExtensionDataTableRenderers = (\n context: WorkbenchExtensionCommandContext,\n records: WorkbenchExtensionDataTableRendererRecord[],\n adapter: WorkbenchExtensionDataTableRendererAdapter = {},\n): Disposable => {\n const disposables: Disposable[] = records.map((record) => registerRenderer(context, record, adapter));\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type {\n ExtensionCommandPaletteContribution,\n ExtensionMenuContribution,\n WorkbenchExtensionMetadata,\n} from \"@pstdio/sdk/api\";\nimport { isLocalizedString, type Localizable } from \"@pstdio/sdk/extensions\";\nimport type { Command, MenuItem, MenuPath } from \"../../core\";\nimport { localizeParamSchema } from \"./param-schema-localization\";\n\nexport type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\n\nconst placementOrder = { first: 0, default: 1, last: 2 } satisfies Record<\n NonNullable<ExtensionMenuContribution[\"placement\"] | ExtensionCommandPaletteContribution[\"placement\"]>,\n number\n>;\ntype ExtensionContributionPlacement = keyof typeof placementOrder;\n\nexport interface WorkbenchExtensionMenuSlotConfig {\n menuPath: MenuPath;\n group?: string;\n overflowLabel?: string;\n resourceGroup?: { id: string; label: string };\n}\n\nexport type WorkbenchExtensionMenuWhenBuilder = (contribution: ExtensionMenuContribution) => string | undefined;\nexport type WorkbenchExtensionStringResolver = (value: Localizable<string> | undefined, extensionId: string) => string;\n\nexport interface WorkbenchExtensionMenuRegistration {\n command: Command;\n contribution: ExtensionMenuContribution;\n menuItem: MenuItem;\n menuPath: MenuPath;\n targetCommandId: string;\n}\n\nexport interface WorkbenchExtensionCommandPaletteRegistration {\n command: Command;\n contribution: ExtensionCommandPaletteContribution;\n menuItem: MenuItem;\n targetCommandId: string;\n}\n\nexport interface UnresolvedWorkbenchExtensionMenuContribution {\n contribution: ExtensionMenuContribution;\n targetId: string;\n}\n\nexport const emptyWorkbenchExtensionMetadata = {\n commands: [],\n commandPaletteContributions: [],\n diagnostics: [],\n extensions: [],\n menuContributions: [],\n modes: [],\n pages: [],\n views: [],\n viewMenus: [],\n placements: [],\n resourceKinds: [],\n navigationItems: [],\n navigationTrees: [],\n statusBarItems: [],\n settingsPanels: [],\n settingsDefinitions: [],\n} satisfies WorkbenchExtensionMetadata;\n\ntype CommandContributionMetadata = Pick<\n WorkbenchExtensionMetadata,\n \"commands\" | \"commandPaletteContributions\" | \"menuContributions\"\n>;\n\nconst defaultWorkbenchExtensionCommandId = (contribution: ExtensionMenuContribution) =>\n `workbench.extension.menu.${contribution.id}`;\n\nconst defaultWorkbenchExtensionPaletteCommandId = (contribution: ExtensionCommandPaletteContribution) =>\n `workbench.extension.palette.${contribution.id}`;\n\nconst contributionOrder = (contribution: { placement?: ExtensionContributionPlacement }, index: number) =>\n placementOrder[contribution.placement ?? \"default\"] * 1000 + index;\n\nconst text: WorkbenchExtensionStringResolver = (value) => {\n if (value === undefined) return \"\";\n if (!isLocalizedString(value)) return value;\n return value.default ?? value.$l10n;\n};\n\nconst createMenuItem = (input: {\n contribution: ExtensionMenuContribution;\n commandId: string;\n index: number;\n slot: WorkbenchExtensionMenuSlotConfig;\n when?: string;\n disabledWhen?: string;\n resolveString: WorkbenchExtensionStringResolver;\n}) => {\n const { commandId, contribution, index, resolveString, slot, when, disabledWhen } = input;\n\n return {\n commandId,\n id: contribution.id,\n sourceCommandId: contribution.commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n icon: contribution.icon,\n group: slot.group ?? contribution.group,\n resourceGroup: slot.resourceGroup,\n args: contribution.params,\n overflowLabel: slot.overflowLabel,\n order: contributionOrder(contribution, index),\n when,\n disabledWhen,\n disabledReason: resolveString(contribution.disabledReason, contribution.extensionId),\n } satisfies MenuItem;\n};\n\nconst createPaletteItem = (input: {\n contribution: ExtensionCommandPaletteContribution;\n commandId: string;\n index: number;\n resolveString: WorkbenchExtensionStringResolver;\n}) => {\n const { commandId, contribution, index, resolveString } = input;\n\n return {\n commandId,\n sourceCommandId: contribution.commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n icon: contribution.icon,\n group: contribution.group,\n args: contribution.params,\n order: contributionOrder(contribution, index),\n } satisfies MenuItem;\n};\n\nexport const buildWorkbenchExtensionMenuRegistrations = (input: {\n metadata: CommandContributionMetadata;\n menuSlotsById: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;\n menuTargetsById?: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;\n createCommandId?: (contribution: ExtensionMenuContribution) => string;\n createWhenExpression?: WorkbenchExtensionMenuWhenBuilder;\n resolveString?: WorkbenchExtensionStringResolver;\n}) => {\n const {\n createCommandId = defaultWorkbenchExtensionCommandId,\n createWhenExpression,\n menuSlotsById,\n menuTargetsById,\n metadata,\n resolveString = text,\n } = input;\n const registrations: WorkbenchExtensionMenuRegistration[] = [];\n const unresolved: UnresolvedWorkbenchExtensionMenuContribution[] = [];\n\n metadata.menuContributions.forEach((contribution, index) => {\n const slot = contribution.target\n ? menuTargetsById?.get(contribution.target)\n : menuSlotsById.get(contribution.slotId);\n if (!slot) {\n unresolved.push({ contribution, targetId: contribution.target ?? contribution.slotId });\n return;\n }\n\n const commandId = createCommandId(contribution);\n const command = metadata.commands.find((candidate) => candidate.id === contribution.commandId);\n\n registrations.push({\n command: {\n id: commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n category: contribution.group,\n resourceMutation: command?.resourceMutation,\n description: command ? resolveString(command.description, command.extensionId) : undefined,\n icon: contribution.icon,\n params: localizeParamSchema(\n command?.params,\n (value) => resolveString(value, command?.extensionId ?? contribution.extensionId),\n command?.extensionId,\n ),\n },\n contribution,\n menuItem: createMenuItem({\n commandId,\n contribution,\n index,\n resolveString,\n slot,\n when: createWhenExpression?.(contribution),\n disabledWhen: contribution.disabledWhen\n ? createWhenExpression?.({ ...contribution, when: contribution.disabledWhen })\n : undefined,\n }),\n menuPath: slot.menuPath,\n targetCommandId: contribution.commandId,\n });\n });\n\n return { registrations, unresolved };\n};\n\nexport const buildWorkbenchExtensionCommandPaletteRegistrations = (input: {\n metadata: CommandContributionMetadata;\n createCommandId?: (contribution: ExtensionCommandPaletteContribution) => string;\n resolveString?: WorkbenchExtensionStringResolver;\n}) => {\n const { createCommandId = defaultWorkbenchExtensionPaletteCommandId, metadata, resolveString = text } = input;\n const registrations: WorkbenchExtensionCommandPaletteRegistration[] = [];\n\n (metadata.commandPaletteContributions ?? []).forEach((contribution, index) => {\n const commandId = createCommandId(contribution);\n const command = metadata.commands.find((candidate) => candidate.id === contribution.commandId);\n\n registrations.push({\n command: {\n id: commandId,\n label: resolveString(contribution.label, contribution.extensionId),\n category: contribution.group,\n description: command ? resolveString(command.description, command.extensionId) : undefined,\n icon: contribution.icon,\n params: localizeParamSchema(\n command?.params,\n (value) => resolveString(value, command?.extensionId ?? contribution.extensionId),\n command?.extensionId,\n ),\n },\n contribution,\n menuItem: createPaletteItem({ commandId, contribution, index, resolveString }),\n targetCommandId: contribution.commandId,\n });\n });\n\n return registrations;\n};\n","import type { CommandExecuteRequest, CommandExecutionResult } from \"@pstdio/sdk/api\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type {\n Disposable,\n FileRendererContent,\n FileRendererRefreshEnvelope,\n FileRendererRefreshOrigin,\n ResourceRef,\n WorkbenchModuleContext,\n} from \"../../core\";\nimport { unwrapCommandValue } from \"../host/command-response\";\nimport type { InternalWorkbenchExtensionMetadata as WorkbenchExtensionMetadata } from \"../host/internal-workbench-extension-metadata\";\nimport { executeWorkbenchExtensionCommandResponse } from \"../host/workbench-extension-command\";\nimport { attachFileStorageVersions, fileStorageVersions } from \"./file-storage-versions\";\n\ntype FileRendererRecord = NonNullable<WorkbenchExtensionMetadata[\"fileRenderers\"]>[number];\nexport interface RegisterWorkbenchExtensionFileRenderersInput {\n executeCommand(commandId: string, body: CommandExecuteRequest, signal?: AbortSignal): Promise<unknown> | unknown;\n metadata: WorkbenchExtensionMetadata;\n projectId: string;\n workbench: WorkbenchModuleContext;\n}\n\nconst slotContext = (input: { projectId: string; rendererId: string; resource?: ResourceRef }) => ({\n id: input.rendererId,\n kind: \"renderer\" as const,\n context: {\n projectId: input.projectId,\n ...(input.resource ? { resourceType: input.resource.type, resourceId: input.resource.id } : {}),\n },\n});\nconst executeFileCommand = async (\n input: RegisterWorkbenchExtensionFileRenderersInput,\n rendererId: string,\n commandId: string,\n resource: ResourceRef | undefined,\n extra: Record<string, unknown> = {},\n metadata?: CommandExecuteRequest[\"metadata\"],\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n) => {\n const ext = resource;\n return executeWorkbenchExtensionCommandResponse(input, commandId, {\n params: {\n renderer: {\n rendererId,\n ...(pageParams ? { pageParams } : {}),\n projectId: input.projectId,\n ...(ext ? { resource: ext } : {}),\n invocation: { placement: \"visible\" },\n },\n ...extra,\n },\n resource: ext,\n signal,\n slot: slotContext({ projectId: input.projectId, rendererId, resource: ext }),\n ...(metadata ? { metadata } : {}),\n });\n};\nconst revisionFromValue = (value: unknown) => {\n if (!value || typeof value !== \"object\") return undefined;\n const revision = (\n value as {\n revision?: unknown;\n }\n ).revision;\n return typeof revision === \"string\" ? revision : undefined;\n};\nexport const fileRendererRefreshEnvelopeFromCommand = (\n body: CommandExecuteRequest,\n response: CommandExecutionResult,\n): FileRendererRefreshEnvelope | undefined => {\n const metadata = body.metadata;\n const origin = metadata?.fileRendererOrigin;\n if (!origin || typeof origin !== \"object\") return undefined;\n const candidate = origin as Partial<FileRendererRefreshOrigin>;\n if (\n typeof candidate.rendererId !== \"string\" ||\n typeof candidate.instanceId !== \"string\" ||\n typeof candidate.operationId !== \"string\"\n ) {\n return undefined;\n }\n const resourceKey = metadata?.fileRendererResourceKey;\n const revision = response.outcome.ok ? revisionFromValue(response.outcome.value) : undefined;\n return {\n origin: {\n rendererId: candidate.rendererId,\n instanceId: candidate.instanceId,\n operationId: candidate.operationId,\n },\n ...(typeof resourceKey === \"string\" ? { resourceKey } : {}),\n ...(revision ? { revision } : {}),\n };\n};\nconst registerFileRenderer = (input: RegisterWorkbenchExtensionFileRenderersInput, record: FileRendererRecord) =>\n input.workbench.views.registerView({\n id: record.id,\n title: text(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"file\",\n resourceKind: record.resourceKind,\n load: async (resource, signal, pageParams) => {\n const result = await executeFileCommand(\n input,\n record.id,\n record.loadHandlerId,\n resource,\n {},\n { fileStorageVersions: {} },\n signal,\n pageParams,\n );\n return attachFileStorageVersions((unwrapCommandValue(result) ?? {}) as FileRendererContent, result);\n },\n save: record.saveHandlerId\n ? async (resource, content, origin, loaded) => {\n const result = await executeFileCommand(\n input,\n record.id,\n record.saveHandlerId as string,\n resource,\n { content },\n {\n fileStorageVersions: fileStorageVersions(loaded),\n ...(origin ? { fileRendererOrigin: origin } : {}),\n ...(resourceKey(resource) ? { fileRendererResourceKey: resourceKey(resource) } : {}),\n },\n );\n const revision = revisionFromValue(unwrapCommandValue(result));\n return attachFileStorageVersions(revision ? { revision } : {}, result);\n }\n : undefined,\n },\n });\nexport const registerWorkbenchExtensionFileRenderers = (input: RegisterWorkbenchExtensionFileRenderersInput) => {\n const disposables: Disposable[] = [];\n for (const record of input.metadata.fileRenderers ?? []) {\n disposables.push(registerFileRenderer(input, record));\n }\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { CollectionBadgeItem } from \"@pstdio/sdk/extensions\";\nimport type { KanbanRendererRow } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\n\nexport const collectionBadgeTarget = (\n row: KanbanRendererRow,\n itemsAttributeId: string,\n itemId: string,\n extensionId: string,\n projectId: string,\n) => {\n const items = row.attributes[itemsAttributeId] as CollectionBadgeItem[] | undefined;\n const item = items?.find((item) => item.id === itemId);\n return item?.target ? toWorkbenchNavigationTarget(item.target, { extensionId, projectId }) : undefined;\n};\n","import type { KanbanRendererBoardColumnConfig as WireBoardColumnConfig } from \"@pstdio/sdk/extensions\";\nimport { createElement } from \"react\";\nimport { WorkbenchIcon } from \"../../react\";\nimport type { ReactKanbanRendererContribution as KanbanRendererContribution } from \"../../react/renderers/kanban/kanban-presentation\";\nimport type { Localizer } from \"./kanban-renderer-contribution-helpers\";\n\ntype BoardColumnConfig = ReturnType<NonNullable<KanbanRendererContribution[\"getBoardColumnConfig\"]>>;\n\nconst createBoardActionIcon = (icon: string | undefined) => {\n const BoardActionIcon = (props: { size?: number | string }) =>\n createElement(WorkbenchIcon, { name: icon ?? \"MoreHorizontal\", ...props });\n return BoardActionIcon;\n};\n\nexport const toWorkbenchBoardColumnConfig = (config: WireBoardColumnConfig | undefined, localize: Localizer) =>\n ({\n color: config?.color,\n canDragIn: config?.canDragIn,\n canDragOut: config?.canDragOut,\n canCreate: config?.canCreate,\n actions: config?.actions?.map((action) => ({\n id: action.id,\n label: localize(action.label, action.id),\n icon: createBoardActionIcon(action.icon),\n })),\n }) satisfies BoardColumnConfig;\n","import type { KanbanRendererBoardColumnConfig as WireBoardColumnConfig } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchExtensionKanbanRendererRecord } from \"pstdio-api-contracts\";\nimport type { KanbanRendererCreateField, KanbanRendererCreateFieldType, ResourceRef } from \"../../core\";\nimport type {\n ReactAttributeDescriptor as AttributeDescriptor,\n ReactKanbanRendererContribution as KanbanRendererContribution,\n} from \"../../react/renderers/kanban/kanban-presentation\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\nexport type KanbanRendererRow = Awaited<ReturnType<KanbanRendererContribution[\"executeQuery\"]>>[number];\nexport type RowAction = NonNullable<WorkbenchExtensionKanbanRendererRecord[\"rowActions\"]>[number];\nexport type QueryResult = {\n attributes?: WorkbenchExtensionKanbanRendererRecord[\"attributes\"];\n boardColumnConfigs?: Record<string, WireBoardColumnConfig>;\n rows?: unknown[];\n};\nexport type Localizer = (value: unknown, fallback?: string) => string;\nexport interface MutableAttributeSource {\n source: KanbanRendererContribution[\"attributes\"];\n set(attributes: WorkbenchExtensionKanbanRendererRecord[\"attributes\"] | undefined): void;\n}\ntype UnknownDisplayReporter = (attributeId: string, kind: string) => void;\nexport const isQueryResult = (value: unknown): value is QueryResult =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst localizeAttributes = (\n record: WorkbenchExtensionKanbanRendererRecord,\n attributes: WorkbenchExtensionKanbanRendererRecord[\"attributes\"] | undefined,\n localize: Localizer,\n decorate: (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor,\n reportUnknownDisplay?: UnknownDisplayReporter,\n): AttributeDescriptor[] =>\n (attributes ?? []).map((attribute) => {\n const display = attribute.display;\n const knownDisplay =\n display?.kind === \"badge-list\" && typeof display.itemsAttributeId === \"string\"\n ? { kind: \"badge-list\" as const, itemsAttributeId: display.itemsAttributeId }\n : undefined;\n if (display && !knownDisplay) reportUnknownDisplay?.(attribute.id, display.kind);\n const resolveType = () => {\n const { type } = attribute;\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return type;\n return {\n ...type,\n options: Array.isArray(type.options)\n ? type.options.map((option) => ({ ...option, label: localize(option.label, option.value) }))\n : type.options,\n };\n };\n const base: AttributeDescriptor = {\n ...attribute,\n label: localize(attribute.label, attribute.id),\n type: resolveType(),\n display: knownDisplay,\n };\n return decorate(record, base);\n });\nexport const createMutableAttributeSource = (\n record: WorkbenchExtensionKanbanRendererRecord,\n initial: WorkbenchExtensionKanbanRendererRecord[\"attributes\"] | undefined,\n localize: Localizer,\n decorate: (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor,\n reportUnknownDisplay?: UnknownDisplayReporter,\n): MutableAttributeSource => {\n let snapshot = localizeAttributes(record, initial, localize, decorate, reportUnknownDisplay);\n const listeners = new Set<() => void>();\n let signature = JSON.stringify(initial);\n return {\n source: {\n getSnapshot: () => snapshot,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n },\n set(attributes) {\n const nextSignature = JSON.stringify(attributes);\n if (nextSignature === signature) return;\n signature = nextSignature;\n snapshot = localizeAttributes(record, attributes, localize, decorate, reportUnknownDisplay);\n for (const listener of listeners) listener();\n },\n };\n};\nconst isExtensionResource = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n typeof (\n resource as {\n type?: unknown;\n }\n ).type === \"string\" &&\n typeof (\n resource as {\n id?: unknown;\n }\n ).id === \"string\",\n );\nexport const defaultResolveRowResource = (_: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow) => {\n const { resource } = row;\n if (isExtensionResource(resource)) return resource;\n return undefined;\n};\nexport const defaultResolveRowActionResource = (\n record: WorkbenchExtensionKanbanRendererRecord,\n row: KanbanRendererRow,\n) => {\n const fromRow = defaultResolveRowResource(record, row);\n if (fromRow) return fromRow;\n if (!record.resourceKind) return undefined;\n return {\n type: record.resourceKind,\n id: row.id,\n label: row.title,\n };\n};\nexport const toWorkbenchRow = (row: unknown, resolveResource: (row: KanbanRendererRow) => ResourceRef | undefined) => {\n const candidate = row as KanbanRendererRow;\n const resource = resolveResource(candidate);\n return resource === undefined ? candidate : ({ ...candidate, resource } as KanbanRendererRow);\n};\nexport const mergeParams = (...items: Array<Record<string, unknown> | undefined>) =>\n Object.assign({}, ...items.filter((item): item is Record<string, unknown> => Boolean(item)));\nconst asParams = (value: unknown): Record<string, unknown> | undefined =>\n value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\nconst hasCommandParameters = (params: Record<string, unknown> | undefined) => Object.keys(params ?? {}).length > 0;\nconst CREATE_FIELD_TYPES: ReadonlySet<string> = new Set<KanbanRendererCreateFieldType>([\n \"text\",\n \"longtext\",\n \"markdown\",\n \"number\",\n \"boolean\",\n \"select\",\n \"multi-select\",\n \"files\",\n]);\nconst toCreateField = (\n id: string,\n descriptor: NonNullable<NonNullable<WorkbenchExtensionKanbanRendererRecord[\"createRow\"]>[\"params\"]>[string],\n localize: Localizer,\n): KanbanRendererCreateField | undefined => {\n if (!CREATE_FIELD_TYPES.has(descriptor.type)) return undefined;\n const options =\n \"options\" in descriptor && Array.isArray(descriptor.options)\n ? (descriptor.options as Array<{\n value: string;\n label: string;\n icon?: string;\n }>)\n : [];\n const optional = descriptor as {\n placeholder?: unknown;\n multiple?: unknown;\n accept?: unknown;\n };\n return {\n id,\n label: localize(descriptor.label, id),\n description: descriptor.description === undefined ? undefined : localize(descriptor.description),\n placeholder: optional.placeholder === undefined ? undefined : localize(optional.placeholder),\n type: descriptor.type as KanbanRendererCreateFieldType,\n required: descriptor.required === true,\n defaultValue: descriptor.defaultValue,\n options:\n descriptor.type === \"select\" || descriptor.type === \"multi-select\"\n ? options.map((option) => ({\n value: option.value,\n label: localize(option.label, option.value),\n icon: option.icon,\n }))\n : undefined,\n multiple: descriptor.type === \"files\" ? optional.multiple !== false : undefined,\n accept: descriptor.type === \"files\" && typeof optional.accept === \"string\" ? optional.accept : undefined,\n };\n};\nexport const toCreateFields = (record: WorkbenchExtensionKanbanRendererRecord, localize: Localizer) =>\n Object.entries(record.createRow?.params ?? {}).flatMap(([id, descriptor]) => {\n const field = toCreateField(id, descriptor, localize);\n return field ? [field] : [];\n });\nconst createKanbanRendererSlot = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n) =>\n createExtensionSlot({\n id: record.id,\n kind: \"kanbanRenderer\",\n projectId: context.projectId,\n context: { kanbanRendererId: record.id },\n });\nexport const executeKanbanRendererCommand = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n resource?: ResourceRef,\n signal?: AbortSignal,\n pageParams?: import(\"@pstdio/sdk/extensions\").PageParams,\n) => {\n const commandResource = resource ?? context.workbench.getPrimaryResource();\n return executeWorkbenchExtensionCommand(context, commandId, {\n params: {\n renderer: {\n rendererId: record.id,\n ...(pageParams ? { pageParams } : {}),\n projectId: context.projectId,\n ...(commandResource ? { resource: commandResource } : {}),\n invocation: { placement: \"visible\" },\n },\n ...params,\n },\n resource: commandResource,\n signal,\n slot: createKanbanRendererSlot(context, record),\n metadata: { kanbanRendererId: record.id },\n });\n};\nconst kanbanRendererRowActionCommandId = (record: WorkbenchExtensionKanbanRendererRecord, action: RowAction) =>\n `workbench.extension.kanbanRenderer.${record.id}.rowAction.${action.id}`;\nexport const registerRowActionCommands = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n localize: Localizer,\n) =>\n (record.rowActions ?? []).map((action) => {\n const target = context.workbench.commands.getCommand(action.commandId)?.command;\n return context.workbench.commands.registerCommand(\n {\n id: kanbanRendererRowActionCommandId(record, action),\n label: localize(action.label, action.id),\n icon: action.icon,\n params: target?.params,\n },\n {\n execute: (args, executionContext) =>\n executeKanbanRendererCommand(\n context,\n record,\n action.commandId,\n mergeParams(asParams(args)),\n executionContext?.resource,\n ),\n },\n );\n });\nexport const runDefaultRowAction = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n action: RowAction,\n row: KanbanRendererRow,\n resource: ResourceRef | undefined,\n localize: Localizer,\n) => {\n const commandId = kanbanRendererRowActionCommandId(record, action);\n const command = context.workbench.commands.getCommand(commandId);\n const args = { rowId: row.id };\n const executionContext = resource ? { resource } : undefined;\n const label = localize(action.label, action.id);\n if (command && hasCommandParameters(command.command.params)) {\n context.workbench.commandPalette.requestParams({ record: command, label, args, context: executionContext });\n return Promise.resolve();\n }\n if (command)\n return context.workbench.commands.executeCommand(command.command.id, args, executionContext).then(() => undefined);\n return executeKanbanRendererCommand(context, record, action.commandId, args, resource).then(() => undefined);\n};\n","import type {\n KanbanRendererBoardColumnConfig as WireBoardColumnConfig,\n KanbanRendererRow as WireRow,\n} from \"@pstdio/sdk/extensions\";\nimport { renderBadgeListDisplay } from \"@pstdio/ui/kanban-renderer\";\nimport { kanbanBuiltInViews, type WorkbenchExtensionKanbanRendererRecord } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { createElement } from \"react\";\nimport type { Disposable, KanbanRendererCreateSubmission, KanbanRendererQueryState, ResourceRef } from \"../../core\";\nimport { WorkbenchIcon } from \"../../react\";\nimport type { ReactAttributeDescriptor as AttributeDescriptor } from \"../../react/renderers/kanban/kanban-presentation\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { WorkbenchExtensionCommandContext } from \"../host/workbench-extension-command\";\nimport { collectionBadgeTarget } from \"./collection-badge-navigation\";\nimport type { WorkbenchExtensionKanbanRendererAdapter } from \"./kanban-renderer-adapter\";\nimport { toWorkbenchBoardColumnConfig } from \"./kanban-renderer-board-config\";\nimport {\n createMutableAttributeSource,\n defaultResolveRowActionResource,\n defaultResolveRowResource,\n executeKanbanRendererCommand,\n isQueryResult,\n type KanbanRendererRow,\n type Localizer,\n mergeParams,\n registerRowActionCommands,\n runDefaultRowAction,\n toCreateFields,\n toWorkbenchRow,\n} from \"./kanban-renderer-contribution-helpers\";\nimport { mapViewToolbarActions } from \"./view-toolbar-actions\";\n\ntype ColumnConfigRecord = Record<string, WireBoardColumnConfig>;\n\nconst createRowActionIcon = (icon: string | undefined) =>\n icon ? createElement(WorkbenchIcon, { name: icon, size: 16 }) : undefined;\n\nconst toCreateRowConfig = (record: WorkbenchExtensionKanbanRendererRecord, localize: Localizer) => {\n if (!record.createRow) return undefined;\n return {\n title: localize(record.createRow.title, \"Create row\"),\n submitLabel: localize(record.createRow.submitLabel, \"Create\"),\n fields: toCreateFields(record, localize),\n labels: {\n cancel: localize(record.createRow.labels?.cancel, \"Cancel\"),\n properties: localize(record.createRow.labels?.properties, \"Properties\"),\n submitError: localize(record.createRow.labels?.submitError, \"Could not create resource.\"),\n removeFile: localize(record.createRow.labels?.removeFile, \"Remove file\"),\n submitWithoutOpening: localize(undefined, \"Create without opening\"),\n },\n };\n};\n\nconst toRowClick = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n adapter: WorkbenchExtensionKanbanRendererAdapter,\n resolveRowResource: (\n record: WorkbenchExtensionKanbanRendererRecord,\n row: KanbanRendererRow,\n ) => ResourceRef | undefined,\n toActivatedRow: (row: KanbanRendererRow) => KanbanRendererRow,\n) => {\n if (record.rowActivationHandlerId) {\n return async (row: KanbanRendererRow) => {\n const resource = resolveRowResource(record, row);\n await executeKanbanRendererCommand(\n context,\n record,\n record.rowActivationHandlerId!,\n { row: toActivatedRow(row) },\n resource,\n );\n };\n }\n if (!adapter.onRowClick) return undefined;\n return (row: KanbanRendererRow) => adapter.onRowClick?.({ record, row, resource: resolveRowResource(record, row) });\n};\n\nconst toCreateRowHandler = (\n record: WorkbenchExtensionKanbanRendererRecord,\n adapter: WorkbenchExtensionKanbanRendererAdapter,\n runMutation: (\n record: WorkbenchExtensionKanbanRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n ) => Promise<unknown>,\n activateCreatedRow: ((row: KanbanRendererRow) => Promise<void> | void) | undefined,\n) => {\n const contribution = record.createRow;\n if (!contribution) return undefined;\n return async (submission: KanbanRendererCreateSubmission) => {\n const params = mergeParams(\n submission.values,\n contribution.columnParam ? { [contribution.columnParam]: submission.columnId } : undefined,\n contribution.attributesParam ? { [contribution.attributesParam]: submission.attributeValues } : undefined,\n );\n const created = await runMutation(record, contribution.commandId, params);\n await adapter.onAfterCreate?.({ record, created, submission });\n if (submission.openCreatedRow === false || !activateCreatedRow || typeof created !== \"object\" || created === null)\n return;\n const row = created as Partial<KanbanRendererRow>;\n if (typeof row.id !== \"string\" || typeof row.title !== \"string\") return;\n await activateCreatedRow({ ...row, id: row.id, title: row.title, attributes: row.attributes ?? {} });\n };\n};\n\nconst toRowContextMenuActions = (\n context: WorkbenchExtensionCommandContext,\n record: WorkbenchExtensionKanbanRendererRecord,\n adapter: WorkbenchExtensionKanbanRendererAdapter,\n localize: Localizer,\n resolveRowActionResource: (\n record: WorkbenchExtensionKanbanRendererRecord,\n row: KanbanRendererRow,\n ) => ResourceRef | undefined,\n) => {\n const actions = record.rowActions;\n if (!actions?.length) return undefined;\n return (row: KanbanRendererRow) =>\n actions.map((action) => {\n const resource = resolveRowActionResource(record, row);\n const runDefault = () => runDefaultRowAction(context, record, action, row, resource, localize);\n return {\n key: action.id,\n label: localize(action.label, action.id),\n commandId: action.commandId,\n icon: createRowActionIcon(action.icon),\n onClick: () =>\n adapter.executeRowAction\n ? adapter.executeRowAction({ record, action, row, resource, runDefault })\n : runDefault(),\n };\n });\n};\n\nexport const registerWorkbenchExtensionKanbanRenderers = (\n context: WorkbenchExtensionCommandContext,\n records: readonly WorkbenchExtensionKanbanRendererRecord[],\n adapter: WorkbenchExtensionKanbanRendererAdapter = {},\n) => {\n const disposables: Disposable[] = [];\n const localize: Localizer =\n adapter.resolveLabel ?? ((value, fallback) => text(value as Parameters<typeof text>[0], fallback));\n const decorate = (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => {\n const withBuiltInDisplay =\n attribute.display?.kind === \"badge-list\"\n ? {\n ...attribute,\n render: (value: unknown, row: KanbanRendererRow) =>\n renderBadgeListDisplay(attribute, value, row, undefined, (id) => {\n if (attribute.display?.kind !== \"badge-list\") return;\n const target = collectionBadgeTarget(\n row,\n attribute.display.itemsAttributeId,\n id,\n record.extensionId,\n context.projectId,\n );\n return target\n ? () => {\n void context.workbench.navigation.openTarget(target);\n }\n : undefined;\n }),\n }\n : attribute;\n return adapter.decorateAttribute?.(record, withBuiltInDisplay) ?? withBuiltInDisplay;\n };\n const resolveRowResource = adapter.resolveRowResource ?? defaultResolveRowResource;\n const resolveRowActionResource = adapter.resolveRowActionResource ?? defaultResolveRowActionResource;\n const afterMutation = adapter.onAfterMutation ?? (() => {});\n\n const runMutation = (\n record: WorkbenchExtensionKanbanRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n ) =>\n executeKanbanRendererCommand(context, record, commandId, params).then((result) => {\n afterMutation(record);\n return result;\n });\n\n for (const record of records) {\n const reportUnknownDisplay = (attributeId: string, kind: string) =>\n context.workbench.notifications.show({\n id: `workbench.extension.${record.extensionId}.kanban.${record.id}.display.${attributeId}`,\n level: \"error\",\n title: \"Extension display is not available\",\n message: `Attribute \"${attributeId}\" in renderer \"${record.id}\" uses unknown display kind \"${kind}\".`,\n });\n const attributes = createMutableAttributeSource(\n record,\n record.attributes,\n localize,\n decorate,\n reportUnknownDisplay,\n );\n let wireAttributes = record.attributes;\n const builtIns = kanbanBuiltInViews(record);\n const originalRows = new WeakMap<KanbanRendererRow, KanbanRendererRow>();\n let columnConfigs: ColumnConfigRecord | undefined;\n let latestQueryId = 0;\n let rowCache = new Map<string, { signature: string; row: KanbanRendererRow }>();\n const rowResource = (row: KanbanRendererRow) => resolveRowResource(record, row);\n const toActivatedRow = (row: KanbanRendererRow) => originalRows.get(row) ?? row;\n const onRowActivate = toRowClick(context, record, adapter, resolveRowResource, toActivatedRow);\n\n disposables.push(...registerRowActionCommands(context, record, localize));\n disposables.push(\n context.workbench.views.registerView({\n id: record.id,\n title: localize(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"kanban\",\n resourceKind: record.resourceKind,\n toolbarActions: mapViewToolbarActions(record),\n listRowActions: () =>\n (record.rowActions ?? []).map((action) => ({\n commandId: action.commandId,\n label: localize(action.label, action.id),\n })),\n storageScope: context.projectId,\n attributes: attributes.source,\n defaultSettings: builtIns.settings,\n defaultFilter: record.defaultFilter,\n defaultSorts: record.defaultSorts,\n viewsProvider: adapter.createViewsProvider?.(record),\n defaultViews: builtIns.views.map((view) => ({ ...view, title: localize(view.title, view.id) })),\n defaultActiveViewId: record.defaultActiveViewId,\n emptyTitle: localize(record.emptyTitle, \"\"),\n emptyDescription: localize(record.emptyDescription, \"\"),\n hideToolbar: record.hideToolbar,\n createRow: toCreateRowConfig(record, localize),\n getBoardColumnConfig: (groupKey) => toWorkbenchBoardColumnConfig(columnConfigs?.[groupKey], localize),\n onRowActivate,\n executeQuery: async (state: KanbanRendererQueryState, signal) => {\n latestQueryId += 1;\n const queryId = latestQueryId;\n const value = await executeKanbanRendererCommand(\n context,\n record,\n record.queryHandlerId,\n {\n settings: state.settings,\n filter: state.filter,\n sorts: state.sorts,\n },\n undefined,\n signal,\n state.pageParams,\n );\n const mapRows = (rows: unknown[]) => {\n const nextCache = new Map<string, { signature: string; row: KanbanRendererRow }>();\n const result = rows.map((row) => {\n const candidate = row as KanbanRendererRow;\n const signature = JSON.stringify(row);\n const cached = rowCache.get(candidate.id);\n const target = (row as WireRow).target;\n const mapped =\n cached?.signature === signature\n ? cached.row\n : {\n ...toWorkbenchRow(row, rowResource),\n ...(target\n ? {\n target: toWorkbenchNavigationTarget(target, {\n extensionId: record.extensionId,\n projectId: context.projectId,\n }),\n }\n : {}),\n };\n originalRows.set(mapped, candidate);\n nextCache.set(mapped.id, { signature, row: mapped });\n return mapped;\n });\n if (queryId === latestQueryId) rowCache = nextCache;\n return result;\n };\n if (queryId !== latestQueryId) {\n if (Array.isArray(value)) return mapRows(value);\n return isQueryResult(value) ? mapRows(value.rows ?? []) : [];\n }\n\n if (Array.isArray(value)) return mapRows(value);\n if (!isQueryResult(value)) return [];\n const nextAttributes = value.attributes ?? wireAttributes;\n wireAttributes = nextAttributes;\n attributes.set(nextAttributes);\n columnConfigs = value.boardColumnConfigs;\n return mapRows(value.rows ?? []);\n },\n onAttributeChange: record.attributeChangeHandlerId\n ? (rowId, attributeId, value) =>\n runMutation(record, record.attributeChangeHandlerId!, {\n rowId,\n attributeId,\n value,\n }).then(() => undefined)\n : undefined,\n onMove: record.moveHandlerId\n ? (move) => runMutation(record, record.moveHandlerId!, { ...move }).then(() => undefined)\n : undefined,\n onCreateRow: toCreateRowHandler(\n record,\n adapter,\n runMutation,\n record.rowActivationHandlerId ? onRowActivate : undefined,\n ),\n onColumnAction: record.columnActionHandlerId\n ? async (columnId, actionId) => {\n await runMutation(record, record.columnActionHandlerId!, { columnId, actionId });\n }\n : undefined,\n getRowContextMenuActions: toRowContextMenuActions(\n context,\n record,\n adapter,\n localize,\n resolveRowActionResource,\n ),\n },\n }),\n );\n }\n\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { TreeContext } from \"../../core\";\nimport { executeWorkbenchExtensionCommand } from \"../host/workbench-extension-command\";\nimport type {\n ExtensionTreeNode,\n ExtensionTreeRendererRecord,\n ExtensionTreeResource,\n} from \"./tree-renderer-contribution-types\";\nimport type { RegisterWorkbenchExtensionTreeRenderersInput } from \"./tree-renderer-contributions\";\n\nconst slotContext = (input: {\n modeId?: string;\n projectId: string;\n resource?: ExtensionTreeResource;\n treeId: string;\n}) => ({\n id: input.treeId,\n kind: \"renderer\" as const,\n context: {\n projectId: input.projectId,\n treeId: input.treeId,\n ...(input.modeId ? { modeId: input.modeId } : {}),\n ...(input.resource ? { resourceType: input.resource.type, resourceId: input.resource.id } : {}),\n },\n});\nexport const createQueryParams = (\n input: RegisterWorkbenchExtensionTreeRenderersInput,\n record: ExtensionTreeRendererRecord,\n ctx: TreeContext,\n node?: ExtensionTreeNode,\n) => {\n const resource = ctx.resource;\n const modeId = input.workbench.modes.getActiveModeId();\n return {\n renderer: {\n rendererId: record.id,\n ...(ctx.pageParams ? { pageParams: ctx.pageParams } : {}),\n projectId: input.projectId,\n ...(modeId ? { modeId } : {}),\n ...(resource ? { resource } : {}),\n invocation: { placement: \"visible\" },\n },\n state: ctx.state,\n ...(ctx.filter ? { filter: ctx.filter } : {}),\n ...(node ? { node } : {}),\n };\n};\nexport const executeCallback = async (\n input: RegisterWorkbenchExtensionTreeRenderersInput,\n record: ExtensionTreeRendererRecord,\n commandId: string,\n params: Record<string, unknown>,\n signal?: AbortSignal,\n) => {\n const renderer = params.renderer as\n | {\n modeId?: string;\n resource?: ExtensionTreeResource;\n }\n | undefined;\n const resource = renderer?.resource;\n return executeWorkbenchExtensionCommand(input, commandId, {\n params,\n signal,\n resource,\n slot: slotContext({\n modeId: renderer?.modeId,\n projectId: input.projectId,\n resource,\n treeId: record.id,\n }),\n });\n};\nexport const executeTreeActionCommand = async (\n input: RegisterWorkbenchExtensionTreeRenderersInput,\n record: ExtensionTreeRendererRecord,\n commandId: string,\n params: Record<string, unknown> | undefined,\n resource: ExtensionTreeResource | undefined,\n) => {\n const modeId = input.workbench.modes.getActiveModeId();\n const rendererParams = {\n ...(params ?? {}),\n renderer: {\n rendererId: record.id,\n projectId: input.projectId,\n ...(modeId ? { modeId } : {}),\n ...(resource ? { resource } : {}),\n invocation: { placement: \"visible\" },\n },\n };\n return executeWorkbenchExtensionCommand(input, commandId, {\n params: rendererParams,\n resource,\n slot: slotContext({ modeId, projectId: input.projectId, resource, treeId: record.id }),\n metadata: { treeId: record.id },\n });\n};\n","import type { TreeContext, TreeNode } from \"../../core\";\nimport type { InternalWorkbenchExtensionMetadata as WorkbenchExtensionMetadata } from \"../host/internal-workbench-extension-metadata\";\nimport type { ExtensionTreeRendererRecord, ExtensionTreeViewRecord } from \"./tree-renderer-contribution-types\";\n\nexport interface HostTreeDefaultNodesInput {\n ctx: TreeContext;\n record: ExtensionTreeRendererRecord;\n panel: ExtensionTreeViewRecord;\n}\n\nexport type HostTreeDefaultNodesResolver = (input: HostTreeDefaultNodesInput) => Promise<TreeNode[]> | TreeNode[];\n\ninterface ResolveHostTreeDefaultInput {\n ctx: TreeContext;\n record: ExtensionTreeRendererRecord;\n treeViews: ExtensionTreeViewRecord[];\n}\n\ninterface ResolveHostTreeHeaderInput extends ResolveHostTreeDefaultInput {\n getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;\n}\n\ninterface ResolveHostTreeFooterInput extends ResolveHostTreeDefaultInput {\n getHostTreeFooterNodes?: HostTreeDefaultNodesResolver;\n}\n\nexport const treeViewsFor = (\n metadata: WorkbenchExtensionMetadata,\n record: ExtensionTreeRendererRecord,\n): ExtensionTreeViewRecord[] =>\n metadata.panels\n .flatMap((panel) => [panel, ...(panel.panelMenus ?? [])])\n .filter((panel) => panel.renderer?.kind === \"tree\" && panel.renderer.id === record.id);\n\nconst resolveTreeView = (panels: ExtensionTreeViewRecord[], ctx: TreeContext) => {\n if (ctx.viewId) return panels.find((panel) => panel.id === ctx.viewId);\n return panels.length === 1 ? panels[0] : undefined;\n};\n\nexport const resolveHostTreeHeaderNodes = async (input: ResolveHostTreeHeaderInput) => {\n const { ctx, getHostTreeHeaderNodes, record, treeViews } = input;\n const panel = resolveTreeView(treeViews, ctx);\n if (!panel || !(\"hostTreeHeader\" in panel) || panel.hostTreeHeader !== \"default\") return [];\n return (await getHostTreeHeaderNodes?.({ ctx, record, panel })) ?? [];\n};\n\nexport const resolveHostTreeFooterNodes = async (input: ResolveHostTreeFooterInput) => {\n const { ctx, getHostTreeFooterNodes, record, treeViews } = input;\n const panel = resolveTreeView(treeViews, ctx);\n if (!panel || !(\"hostTreeFooter\" in panel) || panel.hostTreeFooter !== \"default\") return [];\n return (await getHostTreeFooterNodes?.({ ctx, record, panel })) ?? [];\n};\n","import { text } from \"pstdio-extensions/workbench\";\nimport type { ResourceRef } from \"../../core\";\nimport type { ExtensionTreeRendererRecord } from \"./tree-renderer-contribution-types\";\n\nexport const extensionTreeStructure = (record: ExtensionTreeRendererRecord, resource?: ResourceRef) =>\n (record.structure ?? []).map((section) => ({\n id: section.id,\n label: text(section.label),\n collapsible: section.collapsible,\n hiddenByDefault: section.hiddenByDefault,\n canHide: section.canHide,\n loading: !section.resourceNode,\n nodes:\n section.resourceNode && resource\n ? [\n {\n id: section.resourceNode.id,\n label: resource.label ?? resource.id ?? resource.type,\n icon: section.resourceNode.icon,\n resource,\n selected: true,\n },\n ]\n : [],\n }));\n","import type { CommandExecuteRequest } from \"@pstdio/sdk/api\";\nimport { commandRefId } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type {\n Disposable,\n NavigationTarget,\n ResourceRef,\n TreeAction,\n TreeContext,\n TreeNode,\n TreeViewSection,\n WorkbenchModuleContext,\n} from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\nimport type { InternalWorkbenchExtensionMetadata as WorkbenchExtensionMetadata } from \"../host/internal-workbench-extension-metadata\";\n\nimport { localizeParamSchema } from \"./param-schema-localization\";\nimport { createQueryParams, executeCallback, executeTreeActionCommand } from \"./tree-renderer-callbacks\";\nimport type {\n ExtensionTreeAction,\n ExtensionTreeNode,\n ExtensionTreeRendererRecord,\n ExtensionTreeResource,\n ExtensionTreeSection,\n ExtensionTreeTarget,\n TargetCommandArgs,\n} from \"./tree-renderer-contribution-types\";\nimport {\n type HostTreeDefaultNodesResolver,\n resolveHostTreeFooterNodes,\n resolveHostTreeHeaderNodes,\n treeViewsFor,\n} from \"./tree-renderer-host-defaults\";\nimport { extensionTreeStructure } from \"./tree-renderer-structure\";\nexport interface RegisterWorkbenchExtensionTreeRenderersInput {\n executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;\n getHostTreeFooterNodes?: HostTreeDefaultNodesResolver;\n getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;\n metadata: WorkbenchExtensionMetadata;\n projectId: string;\n /**\n * Host canonicalization for node resources. A host that gives extension\n * resources its own URIs (layout scopes, history, and hierarchy key on the\n * URI) must convert tree node resources the same way, or the same resource\n * gets a second identity when opened from a tree.\n */\n resolveNodeResource?: (resource: ExtensionTreeResource) => ResourceRef;\n workbench: WorkbenchModuleContext;\n}\nconst toActionParams = (params: unknown, fallback: Record<string, unknown> | undefined) => {\n if (params && typeof params === \"object\" && !Array.isArray(params)) return params as Record<string, unknown>;\n return fallback;\n};\nconst toRecordParams = (params: object | undefined) =>\n params && !Array.isArray(params) ? (params as Record<string, unknown>) : undefined;\nconst createTreeMapper = (input: RegisterWorkbenchExtensionTreeRenderersInput, record: ExtensionTreeRendererRecord) => {\n const originalNodes = new WeakMap<TreeNode, ExtensionTreeNode>();\n const runnerCommandId = `workbench.extensionTreeRenderer.${record.id}.command`;\n const resolveResource: (resource: ExtensionTreeResource) => ResourceRef = (resource) => {\n const resolved = input.resolveNodeResource?.(resource);\n return resolved ?? resource;\n };\n const mapEmptyState = (section: ExtensionTreeSection): TreeViewSection[\"emptyState\"] => {\n if (!section.emptyState) return undefined;\n return {\n title: text(section.emptyState.title),\n description: text(section.emptyState.description),\n icon: section.emptyState.icon,\n };\n };\n const mapTarget = (\n target: ExtensionTreeTarget | undefined,\n node: ExtensionTreeNode | undefined,\n ctx: TreeContext,\n ): NavigationTarget | undefined => {\n if (!target) return undefined;\n const commandTargetOf = (\n commandTarget: Extract<\n ExtensionTreeTarget,\n {\n kind: \"command\";\n }\n >,\n ) => ({\n kind: \"command\" as const,\n commandId: runnerCommandId,\n args: {\n commandId: `${commandTarget.target.command.extensionId ?? record.extensionId}.command.${commandTarget.target.command.id}`,\n ...(node ? { nodeId: node.id } : {}),\n params: commandTarget.target.params,\n resource: node?.resource ?? ctx.resource,\n treeId: record.id,\n } satisfies TargetCommandArgs,\n });\n return toWorkbenchNavigationTarget(target, {\n commandTargetOf,\n extensionId: record.extensionId,\n projectId: input.projectId,\n });\n };\n const mapAction = (\n action: ExtensionTreeAction,\n node: ExtensionTreeNode | undefined,\n ctx: TreeContext,\n ): TreeAction => {\n const commandId = action.command\n ? commandRefId({ ...action.command, extensionId: action.command.extensionId ?? record.extensionId })\n : undefined;\n return {\n id: action.id,\n resourceMutation: input.metadata.commands.find((command) => command.id === commandId)?.resourceMutation,\n label: text(action.label),\n icon: action.icon,\n args: toRecordParams(action.params),\n params: localizeParamSchema(action.input, text, record.extensionId),\n submitLabel: action.submitLabel,\n when: action.when,\n disabled: action.disabled,\n // Actions mutate tree data (create/delete/...), so refresh afterwards. Plain\n // node-target navigation runs through the runner command and must not refetch.\n run: commandId\n ? async (params) => {\n const actionParams = toActionParams(params, toRecordParams(action.params));\n if (action.command?.extensionId === \"pstdio\") {\n await input.workbench.commands.executeCommand(commandId, actionParams, {\n resource: node?.resource ?? ctx.resource,\n });\n return;\n }\n await executeTreeActionCommand(input, record, commandId, actionParams, node?.resource ?? ctx.resource);\n ctx.refresh();\n }\n : undefined,\n };\n };\n const mapNode = (node: ExtensionTreeNode, ctx: TreeContext): TreeNode => {\n const mapped: TreeNode = {\n id: node.id,\n selected: node.selected,\n label: text(node.label),\n icon: node.icon,\n iconColor: node.iconColor,\n badge: node.badge,\n iconTooltip: node.iconTooltip,\n tooltip: node.tooltip,\n resource: node.resource ? resolveResource(node.resource) : undefined,\n target: mapTarget(node.target, node, ctx),\n rowVariant: node.rowVariant,\n actions: node.actions?.map((action) => mapAction(action, node, ctx)),\n contextMenuActions: node.contextMenuActions?.map((action) => mapAction(action, node, ctx)),\n collapsible: node.collapsible,\n disabled: node.disabled,\n children: node.children?.map((child) => mapNode(child, ctx)),\n description: node.description,\n contextValue: node.contextValue,\n hiddenByDefault: node.hiddenByDefault,\n canHide: node.canHide,\n canDrag: node.canDrag,\n canDrop: node.canDrop,\n };\n originalNodes.set(mapped, node);\n return mapped;\n };\n const mapSections = (sections: ExtensionTreeSection[], ctx: TreeContext): TreeViewSection[] =>\n sections.map((section) => ({\n id: section.id,\n label: text(section.label),\n actions: section.actions?.map((action) => mapAction(action, undefined, ctx)),\n collapsible: section.collapsible,\n emptyState: mapEmptyState(section),\n nodes: section.nodes.map((node) => mapNode(node, ctx)),\n hiddenByDefault: section.hiddenByDefault,\n canHide: section.canHide,\n }));\n const mapNodes = (nodes: ExtensionTreeNode[], ctx: TreeContext): TreeNode[] =>\n nodes.map((node) => mapNode(node, ctx));\n return { mapNodes, mapSections, originalNodes, runnerCommandId };\n};\nconst isTreeSectionArray = (value: unknown): value is ExtensionTreeSection[] =>\n Array.isArray(value) && value.every((section) => section && typeof section === \"object\" && \"nodes\" in section);\nconst isTreeNodeArray = (value: unknown): value is ExtensionTreeNode[] =>\n Array.isArray(value) && value.every((node) => node && typeof node === \"object\" && \"id\" in node);\nconst hostNodeSection = (id: string, nodes: TreeNode[]): TreeViewSection[] =>\n nodes.length > 0 ? [{ id, nodes, canReorder: false }] : [];\nconst registerTree = (input: RegisterWorkbenchExtensionTreeRenderersInput, record: ExtensionTreeRendererRecord) => {\n const mapper = createTreeMapper(input, record);\n const treeViews = treeViewsFor(input.metadata, record);\n const commandDisposable = input.workbench.commands.registerCommand(\n { id: mapper.runnerCommandId, label: `${text(record.title, record.id)} tree command` },\n {\n execute: async (rawArgs) => {\n const args = rawArgs as TargetCommandArgs;\n const result = await executeTreeActionCommand(input, record, args.commandId, args.params, args.resource);\n for (const view of input.workbench.views.listViews()) {\n if (view.body.kind === \"file\") input.workbench.views.refreshView(view.id);\n }\n return result;\n },\n },\n );\n const treeDisposable = input.workbench.views.registerView({\n id: record.id,\n title: text(record.title, record.id),\n icon: record.icon,\n body: {\n kind: \"tree\",\n getStructure: record.structure ? (ctx) => extensionTreeStructure(record, ctx.resource) : undefined,\n searchable: record.searchable,\n searchPlaceholder: text(record.searchPlaceholder, \"Search files\"),\n defaultExpandedNodeIds: record.defaultExpandedNodeIds,\n defaultExpandedSectionIds: record.defaultExpandedSectionIds,\n getHeader: async (ctx) => {\n const hostHeader = await resolveHostTreeHeaderNodes({\n ctx,\n getHostTreeHeaderNodes: input.getHostTreeHeaderNodes,\n record,\n treeViews,\n });\n if (!record.headerHandlerId) return hostNodeSection(`${record.id}:host-header`, hostHeader);\n const result = await executeCallback(\n input,\n record,\n record.headerHandlerId,\n createQueryParams(input, record, ctx),\n ctx.signal,\n );\n const extensionHeader = isTreeSectionArray(result) ? mapper.mapSections(result, ctx) : [];\n return [...hostNodeSection(`${record.id}:host-header`, hostHeader), ...extensionHeader];\n },\n getBody: async (ctx) => {\n const result = await executeCallback(\n input,\n record,\n record.bodyHandlerId,\n createQueryParams(input, record, ctx),\n ctx.signal,\n );\n if (!isTreeSectionArray(result)) return [];\n return mapper.mapSections(result, ctx);\n },\n getFooter: async (ctx) => {\n const hostFooter = await resolveHostTreeFooterNodes({\n ctx,\n getHostTreeFooterNodes: input.getHostTreeFooterNodes,\n record,\n treeViews,\n });\n if (!record.footerHandlerId) return hostNodeSection(`${record.id}:host-footer`, hostFooter);\n const result = await executeCallback(\n input,\n record,\n record.footerHandlerId,\n createQueryParams(input, record, ctx),\n ctx.signal,\n );\n const extensionFooter = isTreeSectionArray(result) ? mapper.mapSections(result, ctx) : [];\n return [...extensionFooter, ...hostNodeSection(`${record.id}:host-footer`, hostFooter)];\n },\n moveNode: record.moveHandlerId\n ? async (source, target, ctx) => {\n const originalSource = mapper.originalNodes.get(source);\n const originalTarget = target ? mapper.originalNodes.get(target) : undefined;\n if (!originalSource?.canDrag || (target && !originalTarget?.canDrop)) return;\n await executeCallback(input, record, record.moveHandlerId!, {\n ...createQueryParams(input, record, ctx),\n source: originalSource,\n target: originalTarget,\n position: ctx.position ?? \"inside\",\n });\n ctx.refresh();\n }\n : undefined,\n getChildren: async (node, ctx) => {\n if (!record.childrenHandlerId) return node.children ?? [];\n const originalNode = mapper.originalNodes.get(node);\n if (!originalNode) return node.children ?? [];\n const result = await executeCallback(\n input,\n record,\n record.childrenHandlerId,\n createQueryParams(input, record, ctx, originalNode),\n ctx.signal,\n );\n return isTreeNodeArray(result) ? mapper.mapNodes(result, ctx) : [];\n },\n },\n });\n return {\n dispose() {\n treeDisposable.dispose();\n commandDisposable.dispose();\n },\n };\n};\nexport const registerWorkbenchExtensionTreeRenderers = (input: RegisterWorkbenchExtensionTreeRenderersInput) => {\n const disposables: Disposable[] = [];\n for (const record of input.metadata.treeRenderers ?? []) {\n disposables.push(registerTree(input, record));\n }\n return {\n dispose() {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n },\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport type { NavigationTarget as ExtensionNavigationTarget } from \"@pstdio/sdk/extensions\";\nimport { contributionRefId } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type {\n Disposable,\n NavigationTreeOwner,\n NavigationTreeSlot,\n TreeNode,\n TreeViewSection,\n WorkbenchModuleContext,\n} from \"../../core\";\nimport { navigationSlotRootSectionId } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"../host/extension-navigation-target\";\n\ntype NavigationItem = WorkbenchExtensionMetadata[\"navigationItems\"][number];\ntype NavigationTree = WorkbenchExtensionMetadata[\"navigationTrees\"][number];\n\nexport interface RegisterWorkbenchExtensionNavigationItemsInput {\n createWhenExpression?: (when: NavigationItem[\"when\"]) => string | undefined;\n metadata: Pick<WorkbenchExtensionMetadata, \"navigationItems\" | \"navigationTrees\">;\n workbench: WorkbenchModuleContext;\n}\n\nconst toOwner = (ref: NavigationItem[\"owner\"] | NavigationTree[\"owner\"]): NavigationTreeOwner => ({\n kind: ref.kind,\n id: contributionRefId(ref),\n extensionId: ref.extensionId,\n});\n\nconst isVisible = (\n workbench: WorkbenchModuleContext,\n item: NavigationItem,\n createWhenExpression: RegisterWorkbenchExtensionNavigationItemsInput[\"createWhenExpression\"],\n) => {\n const expression = createWhenExpression?.(item.when);\n if (!expression) return true;\n return workbench.context.matches(expression);\n};\n\nconst toNode = (item: NavigationItem): TreeNode => ({\n id: item.id,\n label: text(item.label, item.id),\n icon: item.icon,\n canHide: true,\n canReorder: true,\n target: toWorkbenchNavigationTarget(item.action as ExtensionNavigationTarget, { extensionId: item.extensionId }),\n});\n\nconst toSections = (\n workbench: WorkbenchModuleContext,\n items: NavigationItem[],\n createWhenExpression: RegisterWorkbenchExtensionNavigationItemsInput[\"createWhenExpression\"],\n) => {\n const sections = new Map<string, TreeViewSection>();\n for (const item of items) {\n if (!isVisible(workbench, item, createWhenExpression)) continue;\n const label = item.group || undefined;\n const id = label ? `${item.extensionId}:${label}` : navigationSlotRootSectionId(item.slot as NavigationTreeSlot);\n const section = sections.get(id) ?? {\n id,\n label,\n collapsible: Boolean(label),\n canHide: true,\n canReorder: true,\n nodes: [],\n };\n section.nodes.push(toNode(item));\n sections.set(id, section);\n }\n return [...sections.values()];\n};\n\nconst groupItems = (items: NavigationItem[]) => {\n const groups = new Map<string, NavigationItem[]>();\n for (const item of items) {\n const owner = toOwner(item.owner);\n const key = `${item.extensionId}:${owner.kind}:${owner.id}:${item.slot}`;\n groups.set(key, [...(groups.get(key) ?? []), item]);\n }\n return [...groups.values()];\n};\n\nconst defaultExpandedGroupIds = (items: NavigationItem[]) => [\n ...new Set(items.flatMap((item) => (item.group ? [`${item.extensionId}:${item.group}`] : []))),\n];\n\nconst registerItems = (input: RegisterWorkbenchExtensionNavigationItemsInput) =>\n groupItems(input.metadata.navigationItems).map((items) => {\n const first = items[0]!;\n const resourceDependent = items.some((item) => item.when?.resourceType?.length || item.when?.metadata);\n return input.workbench.navigationTrees.registerContribution({\n id: `${first.extensionId}.navigation-items.${first.owner.kind}.${contributionRefId(first.owner)}.${first.slot}`,\n owner: toOwner(first.owner),\n sourceExtensionId: first.extensionId,\n declarationIndex: input.metadata.navigationItems.indexOf(first),\n slot: first.slot,\n defaultExpandedSectionIds: defaultExpandedGroupIds(items),\n ...(!resourceDependent ? { resolveResource: () => undefined } : {}),\n getSections: () => toSections(input.workbench, items, input.createWhenExpression),\n listActions: () =>\n items.map((item) => ({\n label: text(item.label, item.id),\n category: item.group || undefined,\n action: toWorkbenchNavigationTarget(item.action as ExtensionNavigationTarget, {\n extensionId: item.extensionId,\n }),\n })),\n });\n });\n\nconst registerTrees = (input: RegisterWorkbenchExtensionNavigationItemsInput) =>\n input.metadata.navigationTrees.map((tree, declarationIndex) => {\n const viewId = contributionRefId(tree.view);\n return input.workbench.navigationTrees.registerContribution({\n id: tree.id,\n idScope: tree.id,\n owner: toOwner(tree.owner),\n sourceExtensionId: tree.extensionId,\n declarationIndex: input.metadata.navigationItems.length + declarationIndex,\n slot: tree.slot as NavigationTreeSlot,\n viewId,\n ...(tree.resourceScope === \"project\" ? { resolveResource: () => undefined } : {}),\n });\n });\n\nexport const registerWorkbenchExtensionNavigationItems = (input: RegisterWorkbenchExtensionNavigationItemsInput) =>\n [...registerItems(input), ...registerTrees(input)] satisfies Disposable[];\n","import { relatedResourceOpeningSchema } from \"pstdio-api-contracts\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport { unwrapCommandValue } from \"./command-response\";\nimport type { InternalRegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\n\nexport const registerResourceKinds = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.resourceKinds.map((kind) =>\n input.workbench.resources.registerKind({\n kind: kind.id,\n extensionId: kind.extensionId,\n label: text(kind.label, kind.id),\n icon: kind.icon ?? \"FileText\",\n relatedOpenings: kind.relatedOpeningsCommand\n ? async (resource, signal) => {\n const response = await input.executeCommand(\n kind.relatedOpeningsCommand!,\n { projectId: input.projectId, resource, source: \"dashboard\" },\n signal,\n );\n signal.throwIfAborted();\n // Selection commands return data. Their navigation requests cannot steal source focus.\n const openings = relatedResourceOpeningSchema.array().parse(unwrapCommandValue(response));\n return openings.map((opening) => ({\n ...opening,\n resource: {\n ...opening.resource,\n projectId: opening.resource.projectId ?? input.projectId,\n extensionId: opening.resource.extensionId ?? kind.extensionId,\n },\n }));\n }\n : undefined,\n }),\n );\n","import type { NavigationTarget as ExtensionNavigationTarget } from \"@pstdio/sdk/extensions\";\nimport { commandRefId } from \"@pstdio/sdk/extensions\";\nimport type { ExtensionKeybindingRecord } from \"pstdio-api-contracts\";\nimport type { WorkbenchModuleContext } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"./extension-navigation-target\";\n\ntype KeybindingPlatform = keyof NonNullable<ExtensionKeybindingRecord[\"platformOverrides\"]>;\n\nconst currentPlatform = (): KeybindingPlatform | undefined => {\n if (typeof navigator === \"undefined\") return undefined;\n const platform = `${navigator.platform} ${navigator.userAgent}`.toLowerCase();\n if (platform.includes(\"mac\")) return \"mac\";\n if (platform.includes(\"win\")) return \"win\";\n if (platform.includes(\"linux\")) return \"linux\";\n return undefined;\n};\n\nexport const resolveExtensionKeybindingChord = (binding: ExtensionKeybindingRecord, platform = currentPlatform()) =>\n (platform ? binding.platformOverrides?.[platform] : undefined) ?? binding.key;\n\nexport const registerWorkbenchExtensionKeybindings = (input: {\n bindings: ExtensionKeybindingRecord[];\n createWhenExpression?: (when: ExtensionKeybindingRecord[\"when\"]) => string | undefined;\n workbench: WorkbenchModuleContext;\n}) =>\n input.bindings.map((binding) =>\n input.workbench.keybindings.registerKeybinding({\n sourceExtensionId: binding.extensionId,\n action: toWorkbenchNavigationTarget(binding.action as ExtensionNavigationTarget, {\n commandIdOf: (command) =>\n command.extensionId ? commandRefId({ extensionId: command.extensionId, id: command.id }) : undefined,\n }),\n keybinding: resolveExtensionKeybindingChord(binding),\n when: input.createWhenExpression?.(binding.when),\n }),\n );\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { type ContributionKind, contributionRefId } from \"@pstdio/sdk/extensions\";\n\nexport type MetadataRef = { extensionId: string; kind: ContributionKind; id: string };\n\nexport const toWorkbenchWhenExpression = (\n when:\n | WorkbenchExtensionMetadata[\"navigationItems\"][number][\"when\"]\n | WorkbenchExtensionMetadata[\"statusBarItems\"][number][\"when\"],\n) => {\n if (!when) return undefined;\n const ids = (value: MetadataRef | MetadataRef[] | undefined) => {\n if (!value) return undefined;\n return Array.isArray(value) ? value.map((ref) => contributionRefId(ref)) : contributionRefId(value);\n };\n return {\n mode: ids(when.mode as MetadataRef | MetadataRef[] | undefined),\n source: when.source,\n viewId: ids(when.view as MetadataRef | MetadataRef[] | undefined),\n resourceType: when.resourceType?.map((ref) => ref.id),\n metadata: when.metadata,\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { contributionRefId } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchPageMain, WorkbenchPageSlot } from \"../../core\";\nimport type { InternalWorkbenchExtensionMetadata } from \"./internal-workbench-extension-metadata\";\n\nimport type { WorkbenchExtensionTabMetadata } from \"./workbench-extension-tab-presentation\";\n\ntype MetadataPage = WorkbenchExtensionMetadata[\"pages\"][number];\ninterface PagePresentationInput {\n extensionId: string;\n placementId: string;\n createTab?(metadata: WorkbenchExtensionTabMetadata): WorkbenchPageSlot[\"tab\"];\n}\nconst pageSlot = (slot: MetadataPage[\"slots\"][number], input: PagePresentationInput): WorkbenchPageSlot => ({\n ...slot,\n tab:\n slot.tab && input.createTab\n ? input.createTab({ ...slot.tab, extensionId: input.extensionId, placementId: input.placementId })\n : undefined,\n});\nconst pageMain = (main: MetadataPage[\"main\"], input: PagePresentationInput): WorkbenchPageMain => {\n if (main.kind === \"panels\") return main;\n return {\n ...main,\n tab:\n main.tab && input.createTab\n ? input.createTab({ ...main.tab, extensionId: input.extensionId, placementId: input.placementId })\n : undefined,\n };\n};\nexport const toInternalWorkbenchPages = (\n metadata: WorkbenchExtensionMetadata,\n createTab?: PagePresentationInput[\"createTab\"],\n): InternalWorkbenchExtensionMetadata[\"pages\"] =>\n metadata.pages.map((page) => ({\n id: page.id,\n ref: { extensionId: page.extensionId, kind: \"page\", id: page.localId },\n title: page.title,\n path: page.path,\n document: page.document,\n params: page.params,\n modeId: contributionRefId(page.mode),\n resource: page.resource,\n main: pageMain(page.main, { extensionId: page.extensionId, placementId: `${page.id}.$main`, createTab }),\n slots: page.slots.map((slot) =>\n pageSlot(slot, { extensionId: page.extensionId, placementId: `${page.id}.${slot.id}`, createTab }),\n ),\n ...(page.icon ? { icon: page.icon } : {}),\n ...(page.parent ? { parentId: contributionRefId(page.parent) } : {}),\n }));\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { commandRefId, contributionRefId } from \"@pstdio/sdk/extensions\";\nimport type { ParamObjectSchema } from \"pstdio-api-contracts\";\nimport type { InternalWorkbenchExtensionMetadata } from \"./internal-workbench-extension-metadata\";\nimport { toWorkbenchWhenExpression } from \"./workbench-extension-metadata-ref\";\nimport { toInternalWorkbenchPages } from \"./workbench-extension-page-metadata\";\nimport type { WorkbenchExtensionTabMetadata } from \"./workbench-extension-tab-presentation\";\n\ntype MetadataView = WorkbenchExtensionMetadata[\"views\"][number];\nconst resourceKindForView = (metadata: WorkbenchExtensionMetadata, viewId: string) => {\n const bindings = metadata.pages.flatMap((page) => [\n ...(page.main.kind === \"view\" && page.resource ? [{ ...page.resource, view: page.main.view }] : []),\n ...page.slots.flatMap((slot) => (slot.item.kind === \"binding\" ? [slot.item.binding] : [])),\n ]);\n bindings.push(\n ...metadata.placements.flatMap((placement) => (placement.item.kind === \"binding\" ? [placement.item.binding] : [])),\n );\n return bindings.find((binding) => contributionRefId(binding.view) === viewId)?.kinds[0]?.id;\n};\nconst viewBody = (view: MetadataView) =>\n view.body.kind === \"webview\" ? { webview: view.body.webview } : { renderer: { kind: view.body.kind, id: view.id } };\nconst panelMenus = (metadata: WorkbenchExtensionMetadata, owner: MetadataView) =>\n metadata.viewMenus.flatMap((menu) => {\n if (contributionRefId(menu.owner) !== owner.id) return [];\n const view = metadata.views.find((candidate) => candidate.id === contributionRefId(menu.view));\n if (!view) return [];\n return [\n {\n id: menu.id,\n extensionId: menu.extensionId,\n ownerPanelId: owner.id,\n viewId: view.id,\n title: view.title,\n side: menu.side,\n group: menu.group,\n placement: menu.placement,\n hostTreeHeader: menu.hostTreeHeader,\n hostTreeFooter: menu.hostTreeFooter,\n ...viewBody(view),\n },\n ];\n });\nconst panels = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"panels\"] =>\n metadata.views.map((view) => {\n const menus = panelMenus(metadata, view);\n return {\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n panelMenus: menus.length > 0 ? menus : undefined,\n ...viewBody(view),\n };\n });\nconst commandActions = <\n T extends {\n command: {\n extensionId: string;\n id: string;\n };\n },\n>(\n actions: T[] | undefined,\n) => actions?.map(({ command, ...action }) => ({ ...action, commandId: commandRefId(command) }));\nconst kanbanRenderers = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"kanbanRenderers\"] =>\n metadata.views.flatMap((view) => {\n const body = view.body;\n if (body.kind !== \"kanban\") return [];\n return [\n {\n ...body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: body.resourceKind ?? resourceKindForView(metadata, view.id),\n createRow: body.createRow\n ? {\n title: body.createRow.title,\n submitLabel: body.createRow.submitLabel,\n columnParam: body.createRow.columnParam,\n params: body.createRow.params as ParamObjectSchema | undefined,\n attributesParam: body.createRow.attributesParam,\n labels: body.createRow.labels,\n commandId: commandRefId(body.createRow.command),\n attachments: body.createRow.attachments\n ? {\n resourceParam: body.createRow.attachments.resourceParam,\n fileParam: body.createRow.attachments.fileParam,\n commandId: commandRefId(body.createRow.attachments.command),\n }\n : undefined,\n }\n : undefined,\n rowActions: commandActions(body.rowActions),\n toolbarActions: commandActions(body.toolbarActions),\n },\n ];\n });\nconst dataTableRenderers = (\n metadata: WorkbenchExtensionMetadata,\n): InternalWorkbenchExtensionMetadata[\"dataTableRenderers\"] =>\n metadata.views.flatMap((view) => {\n const body = view.body;\n if (body.kind !== \"dataTable\") return [];\n return [\n {\n ...body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: body.resourceKind ?? resourceKindForView(metadata, view.id),\n selectionActions: commandActions(body.selectionActions),\n rowActions: commandActions(body.rowActions),\n toolbarActions: commandActions(body.toolbarActions),\n },\n ];\n });\nconst treeRenderers = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"treeRenderers\"] =>\n metadata.views.flatMap((view) =>\n view.body.kind === \"tree\"\n ? [\n {\n ...view.body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: view.body.resourceKind ?? resourceKindForView(metadata, view.id),\n },\n ]\n : [],\n );\nconst fileRenderers = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"fileRenderers\"] =>\n metadata.views.flatMap((view) =>\n view.body.kind === \"file\"\n ? [\n {\n ...view.body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: view.body.resourceKind ?? resourceKindForView(metadata, view.id),\n },\n ]\n : [],\n );\nconst controlsRenderers = (\n metadata: WorkbenchExtensionMetadata,\n): InternalWorkbenchExtensionMetadata[\"controlsRenderers\"] =>\n metadata.views.flatMap((view) =>\n view.body.kind === \"controls\"\n ? [\n {\n ...view.body,\n id: view.id,\n extensionId: view.extensionId,\n title: view.title,\n icon: view.icon,\n resourceKind: view.body.resourceKind ?? resourceKindForView(metadata, view.id),\n },\n ]\n : [],\n );\nconst modes = (metadata: WorkbenchExtensionMetadata): InternalWorkbenchExtensionMetadata[\"modes\"] =>\n metadata.modes.map((mode) => ({\n id: mode.id,\n extensionId: mode.extensionId,\n modeId: mode.id,\n label: mode.label,\n icon: mode.icon,\n panelRegions: mode.regions,\n regionSettings: mode.regionSettings,\n floatingPanels: mode.floatingPanels,\n ...(mode.defaultTheme ? { defaultTheme: contributionRefId(mode.defaultTheme) } : {}),\n ...(mode.chrome\n ? {\n chrome: Object.fromEntries(\n Object.entries(mode.chrome).map(([region, view]) => [\n region,\n view === false ? false : contributionRefId(view),\n ]),\n ),\n }\n : {}),\n }));\nexport const toInternalWorkbenchExtensionMetadata = (\n metadata: WorkbenchExtensionMetadata,\n input: {\n createTab?(\n metadata: WorkbenchExtensionTabMetadata,\n ): InternalWorkbenchExtensionMetadata[\"placements\"][number][\"tab\"];\n } = {},\n): InternalWorkbenchExtensionMetadata => {\n const adaptedPanels = panels(metadata);\n return {\n extensions: metadata.extensions,\n commands: metadata.commands,\n menuContributions: metadata.menuContributions,\n commandPaletteContributions: metadata.commandPaletteContributions,\n modes: modes(metadata),\n pages: toInternalWorkbenchPages(metadata, input.createTab),\n placements: metadata.placements.map((placement) => ({\n id: placement.id,\n ref: { extensionId: placement.extensionId, kind: \"placement\", id: placement.localId },\n modeId: contributionRefId(placement.mode),\n item: placement.item,\n region: placement.region,\n order: placement.order,\n movableTo: placement.movableTo,\n mountStrategy: placement.mountStrategy,\n hiddenByDefault: placement.hiddenByDefault,\n headerBorderBottom: placement.headerBorderBottom,\n tab:\n placement.tab && input.createTab\n ? input.createTab({\n ...placement.tab,\n extensionId: placement.extensionId,\n placementId: placement.id,\n })\n : undefined,\n })),\n panels: adaptedPanels,\n resourceKinds: metadata.resourceKinds.map((kind) => ({\n id: kind.id,\n relatedOpeningsCommand: kind.relatedOpeningsCommand,\n extensionId: kind.extensionId,\n label: kind.label,\n icon: kind.icon,\n menuSlots: Object.fromEntries(\n (kind.menuSlots ?? []).map((slot) => [\n slot.id,\n {\n placement: slot.placement,\n label: slot.label,\n external: slot.access === \"public\",\n order: slot.order,\n },\n ]),\n ),\n })),\n resourceHierarchyProviders: (metadata.resourceHierarchyProviders ?? []).map((record) => ({\n id: record.id,\n extensionId: record.extensionId,\n resourceKind: record.resourceKind.id,\n })),\n settingsSections: metadata.settingsSections ?? [],\n settingsPanels: metadata.settingsPanels.flatMap((panel) => {\n const view = metadata.views.find((candidate) => candidate.id === contributionRefId(panel.view));\n if (!view) return [];\n return [\n {\n id: panel.id,\n viewId: view.id,\n extensionId: panel.extensionId,\n slotId: panel.slot.id,\n scope: panel.slot.id.includes(\"global\") ? (\"global\" as const) : (\"project\" as const),\n title: view.title,\n icon: view.icon,\n section: panel.section ? contributionRefId(panel.section) : undefined,\n },\n ];\n }),\n kanbanRenderers: kanbanRenderers(metadata),\n dataTableRenderers: dataTableRenderers(metadata),\n commandPaletteResources: metadata.commandPaletteResources ?? [],\n treeRenderers: treeRenderers(metadata),\n fileRenderers: fileRenderers(metadata),\n controlsRenderers: controlsRenderers(metadata),\n keybindings: metadata.keybindings ?? [],\n settingsDefinitions: metadata.settingsDefinitions ?? [],\n statusBarItems: metadata.statusBarItems.map((item) => ({\n id: item.id,\n extensionId: item.extensionId,\n viewId: contributionRefId(item.view),\n slot: item.slot.id.endsWith(\"leading\") ? \"leading\" : \"trailing\",\n order: item.order,\n when: toWorkbenchWhenExpression(item.when),\n })),\n diagnostics: metadata.diagnostics,\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport type { Disposable, FileRendererRefreshEnvelope, WorkbenchModuleContext } from \"../../core\";\n\nexport type WorkbenchExtensionRendererKind = \"tree\" | \"file\" | \"controls\" | \"dataTable\" | \"kanban\";\n\ninterface RendererRefreshTarget {\n id: string;\n kind: WorkbenchExtensionRendererKind;\n}\n\nexport interface WorkbenchExtensionRefreshEvent extends FileRendererRefreshEnvelope {\n id: string;\n}\n\nexport interface RegisterWorkbenchExtensionRendererRefreshEventsInput {\n metadata: WorkbenchExtensionMetadata;\n subscribe: (listener: (event: WorkbenchExtensionRefreshEvent) => void) => Disposable;\n workbench: WorkbenchModuleContext;\n}\n\nexport const refreshWorkbenchExtensionRenderer = (\n workbench: WorkbenchModuleContext,\n target: RendererRefreshTarget,\n envelope: FileRendererRefreshEnvelope = {},\n) => {\n workbench.views.refreshView(target.id, target.kind === \"file\" ? envelope : undefined);\n};\n\nconst rendererRefreshTargets = (metadata: WorkbenchExtensionMetadata) => {\n const targets = new Map<string, RendererRefreshTarget[]>();\n const add = (kind: WorkbenchExtensionRendererKind, renderer: { id: string; refreshEventIds?: string[] }) => {\n for (const eventId of new Set(renderer.refreshEventIds ?? [])) {\n const eventTargets = targets.get(eventId) ?? [];\n if (!eventTargets.some((target) => target.kind === kind && target.id === renderer.id)) {\n eventTargets.push({ id: renderer.id, kind });\n }\n targets.set(eventId, eventTargets);\n }\n };\n\n for (const view of metadata.views) {\n if (view.body.kind === \"webview\") continue;\n add(view.body.kind, { id: view.id, refreshEventIds: view.body.refreshEventIds });\n }\n return targets;\n};\n\nexport const registerWorkbenchExtensionRendererRefreshEvents = (\n input: RegisterWorkbenchExtensionRendererRefreshEventsInput,\n) => {\n const targets = rendererRefreshTargets(input.metadata);\n return input.subscribe((event) => {\n const { id, ...envelope } = event;\n for (const target of targets.get(id) ?? []) refreshWorkbenchExtensionRenderer(input.workbench, target, envelope);\n });\n};\n\nexport const refreshOpenWorkbenchExtensionWebviews = (\n workbench: WorkbenchModuleContext,\n metadata: WorkbenchExtensionMetadata,\n) => {\n for (const view of metadata.views) {\n if (view.body.kind !== \"webview\") continue;\n if (workbench.views.getView(view.id)) workbench.views.refreshView(view.id);\n }\n};\n","import type { CommandExecuteRequest } from \"@pstdio/sdk/api\";\nimport type { WebviewArtifactsReadParams, WebviewHostCapabilityResults } from \"pstdio-api-contracts/extension-kernel\";\nimport { createExtensionSlot, executeWorkbenchExtensionCommandResponse } from \"../host/workbench-extension-command\";\nimport type { CreateBridgeWebviewHostAdapters } from \"./bridge-webview-renderer\";\nimport type { ExtensionWebviewFilesAdapter } from \"./extension-webview-host-adapters\";\nimport { createWorkbenchWebviewHostAdapters } from \"./webview-host-capabilities\";\n\ntype ExtensionWebviewSlotKind = NonNullable<CommandExecuteRequest[\"slot\"]>[\"kind\"];\nexport type ExtensionWebviewFileCapabilities = ExtensionWebviewFilesAdapter;\nexport interface ExtensionWebviewArtifactCapabilities {\n read(\n params: WebviewArtifactsReadParams,\n context: { webviewId: string },\n ): Promise<WebviewHostCapabilityResults[\"artifacts.read\"]> | WebviewHostCapabilityResults[\"artifacts.read\"];\n}\ninterface CreateWorkbenchExtensionWebviewAdaptersInput {\n artifacts?: ExtensionWebviewArtifactCapabilities;\n executeCommand(commandId: string, body: CommandExecuteRequest, signal?: AbortSignal): Promise<unknown> | unknown;\n extensionIdForWebview(webviewId: string): string | undefined;\n files?: ExtensionWebviewFileCapabilities;\n projectId: string;\n slotKind: ExtensionWebviewSlotKind;\n}\n\nexport const createWorkbenchExtensionWebviewAdapters =\n (input: CreateWorkbenchExtensionWebviewAdaptersInput): CreateBridgeWebviewHostAdapters =>\n (context) => {\n const extensionId = context.extensionId ?? input.extensionIdForWebview(context.webviewId);\n return {\n ...createWorkbenchWebviewHostAdapters({ ...context, extensionId, projectId: input.projectId }),\n executeCommand: (request, signal) => {\n const resource = request.resource ?? context.placement.resource;\n return executeWorkbenchExtensionCommandResponse({ ...input, workbench: context.workbench }, request.commandId, {\n params: request.params,\n workspaceId: request.workspaceId,\n metadata: request.metadata,\n resource,\n signal,\n slot: createExtensionSlot({\n id: context.webviewId,\n kind: input.slotKind,\n projectId: input.projectId,\n context: { panelId: context.webviewId },\n }),\n });\n },\n files: input.files,\n artifacts: input.artifacts\n ? { read: (params) => input.artifacts!.read(params, { webviewId: context.webviewId }) }\n : undefined,\n };\n };\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { BridgeWebviewConfig } from \"./bridge-webview-renderer\";\n\ntype WorkbenchWebview = Extract<WorkbenchExtensionMetadata[\"views\"][number][\"body\"], { kind: \"webview\" }>[\"webview\"];\n\nexport const toBridgeWebviewConfig = (webview: WorkbenchWebview): BridgeWebviewConfig => {\n const title = text(webview.title);\n return {\n title: title || undefined,\n runtimeUrl: webview.runtimeUrl,\n moduleUrl: webview.moduleUrl,\n styles: webview.styles,\n capabilities: webview.capabilities,\n };\n};\n","import type { CommandExecuteRequest } from \"@pstdio/sdk/api\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, PreferencePropertySchema, PreferenceScope, PreferenceValue } from \"../../core\";\nimport {\n type CreateBridgeWebviewHostAdapters,\n getBridgeWebviewHostEventPublisher,\n renderBridgeWebviewFrame,\n} from \"../bridge/bridge-webview-renderer\";\nimport { createWorkbenchExtensionWebviewAdapters } from \"../bridge/webview-command-capabilities\";\nimport { toBridgeWebviewConfig } from \"../bridge/webview-contribution-config\";\nimport type { InternalRegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\n\nconst settingsSectionIdDefault = \"extensions\";\nconst extensionSettingsOrderBase = 1_000;\n\nconst asPreferenceValue = (value: unknown): PreferenceValue | undefined =>\n value === undefined ? undefined : (value as PreferenceValue);\n\nconst preferenceScope = (scope: \"global\" | \"project\"): PreferenceScope => (scope === \"global\" ? \"user\" : \"project\");\n\nconst createExtensionHostAdapters = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n slotKind: NonNullable<CommandExecuteRequest[\"slot\"]>[\"kind\"],\n): CreateBridgeWebviewHostAdapters => {\n const createBase = createWorkbenchExtensionWebviewAdapters({\n artifacts: input.webviewArtifacts,\n executeCommand: input.executeCommand,\n extensionIdForWebview: (webviewId) => input.metadata.panels.find((panel) => panel.id === webviewId)?.extensionId,\n files: input.webviewFiles,\n projectId: input.projectId,\n slotKind,\n });\n return (context) => ({ ...createBase(context), ...input.createWebviewHostAdapters?.(context) });\n};\n\nexport const registerWebviewPanels = (input: InternalRegisterWorkbenchExtensionContributionsInput) => {\n return input.metadata.panels.flatMap((panel) => {\n if (!panel.webview) return [];\n const webview = toBridgeWebviewConfig(panel.webview);\n return [\n input.workbench.views.registerView({\n id: panel.id,\n title: text(panel.title, panel.id),\n icon: panel.icon,\n body: {\n kind: \"react\",\n render: (renderInput) => {\n const slotKind = input.metadata.settingsPanels.some(\n (settingsPanel) => settingsPanel.id === renderInput.instance.panelId && settingsPanel.viewId === panel.id,\n )\n ? \"settings\"\n : \"panel\";\n return (\n input.renderWebview?.(renderInput) ??\n renderBridgeWebviewFrame({\n sizing: renderInput.panel.region === \"status\" ? \"content-width\" : undefined,\n context: {\n workbench: renderInput.workbench,\n webviewId: panel.id,\n placement: renderInput.instance,\n hostEvents: getBridgeWebviewHostEventPublisher(renderInput.workbench, renderInput.instance),\n },\n createHostAdapters: createExtensionHostAdapters(input, slotKind),\n createProps:\n input.createWebviewProps ?? (({ placement }) => ({ placement, resource: placement.resource })),\n createTheme: input.createWebviewTheme,\n ownerId: panel.extensionId,\n title: text(panel.title, panel.id),\n webview,\n })\n );\n },\n },\n }),\n ];\n });\n};\n\nconst viewMenuPlacementPriority = { first: 1_000_000, default: 0, last: -1_000_000 } as const;\n\nexport const registerViewMenus = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.panels\n .flatMap((panel) => panel.panelMenus ?? [])\n .map((menu, index) =>\n input.workbench.viewMenus.registerViewMenu({\n id: menu.id,\n ownerViewId: menu.ownerPanelId,\n viewId: menu.viewId,\n side: menu.side,\n priority: viewMenuPlacementPriority[menu.placement ?? \"default\"] - index,\n }),\n );\n\nexport const registerSettings = (input: InternalRegisterWorkbenchExtensionContributionsInput) => {\n const disposables: Disposable[] = [];\n const sectionId = input.settingsSectionId ?? settingsSectionIdDefault;\n\n if (!input.workbench.settings.getSection(sectionId)) {\n disposables.push(\n input.workbench.settings.registerSection({ id: sectionId, title: input.settingsSectionTitle ?? \"Extensions\" }),\n );\n }\n\n const sections = [...input.metadata.settingsSections].sort(\n (left, right) =>\n (left.order ?? 0) - (right.order ?? 0) ||\n left.extensionId.localeCompare(right.extensionId) ||\n left.id.localeCompare(right.id),\n );\n for (const section of sections) {\n disposables.push(\n input.workbench.settings.registerSection({\n id: section.id,\n title: text(section.title, section.id),\n order: section.order,\n scope: section.scope,\n }),\n );\n }\n\n // Keep the existing last-definition-wins rule for shared legacy names.\n const definitions = new Map(input.metadata.settingsDefinitions.map((setting) => [setting.key, setting]));\n const propertiesByOwner = new Map<string, Record<string, PreferencePropertySchema>>();\n for (const setting of definitions.values()) {\n const properties = propertiesByOwner.get(setting.extensionId) ?? Object.create(null);\n properties[setting.key] = {\n type: setting.type,\n scope: preferenceScope(setting.scope),\n default: asPreferenceValue(setting.default),\n enum: setting.enum as PreferenceValue[] | undefined,\n description: text(setting.description),\n } satisfies PreferencePropertySchema;\n propertiesByOwner.set(setting.extensionId, properties);\n }\n for (const [ownerId, properties] of propertiesByOwner) {\n disposables.push(input.workbench.preferences.registerSchema({ properties }, { ownerId }));\n }\n\n const panels = [...input.metadata.settingsPanels].sort(\n (left, right) => left.extensionId.localeCompare(right.extensionId) || left.id.localeCompare(right.id),\n );\n for (const [index, panel] of panels.entries()) {\n if (panel.slotId === \"extension.settings\") continue;\n disposables.push(\n input.workbench.settings.registerPanel({\n id: panel.id,\n title: text(panel.title, panel.id),\n icon: panel.icon,\n kind: \"view\",\n order: extensionSettingsOrderBase + index,\n section: panel.section ?? sectionId,\n scope: panel.scope,\n viewId: panel.viewId,\n }),\n );\n }\n\n return disposables;\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { isNavigationTarget, resourceKey } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, WorkbenchPanelTab, WorkbenchTabSnapshot } from \"../../core\";\nimport { toWorkbenchNavigationTarget } from \"./extension-navigation-target\";\nimport { executeWorkbenchExtensionCommand } from \"./workbench-extension-command\";\nimport type { RegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\nimport type { WorkbenchExtensionRefreshEvent } from \"./workbench-extension-refresh\";\n\ntype MetadataPlacement = WorkbenchExtensionMetadata[\"placements\"][number];\ntype MetadataPageSlot = WorkbenchExtensionMetadata[\"pages\"][number][\"slots\"][number];\nexport type WorkbenchExtensionTabMetadata = NonNullable<MetadataPlacement[\"tab\"] | MetadataPageSlot[\"tab\"]> & {\n extensionId: string;\n placementId: string;\n};\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value && typeof value === \"object\" && !Array.isArray(value));\nconst navigationAction = (value: unknown, extensionId: string, projectId: string) =>\n isNavigationTarget(value) ? toWorkbenchNavigationTarget(value, { extensionId, projectId }) : undefined;\nconst toRows = (value: unknown, extensionId: string, projectId: string) =>\n Array.isArray(value)\n ? value.flatMap((row) => {\n if (!isRecord(row) || typeof row.id !== \"string\") return [];\n const target = navigationAction(row.action, extensionId, projectId);\n return [\n {\n id: row.id,\n label: text(row.label as Parameters<typeof text>[0], row.id),\n icon: typeof row.icon === \"string\" ? row.icon : undefined,\n iconColor: typeof row.iconColor === \"string\" ? row.iconColor : undefined,\n selected: row.selected === true,\n disabled: row.disabled === true,\n action: target ? { kind: \"navigation\" as const, target } : undefined,\n },\n ];\n })\n : [];\nconst toSnapshot = (value: unknown, extensionId: string, projectId: string): WorkbenchTabSnapshot => {\n if (!isRecord(value)) return {};\n const indicator = isRecord(value.indicator)\n ? {\n icon: String(value.indicator.icon ?? \"\"),\n color: typeof value.indicator.color === \"string\" ? value.indicator.color : undefined,\n label: text(value.indicator.label as Parameters<typeof text>[0]),\n }\n : undefined;\n const menu = Array.isArray(value.menu)\n ? value.menu.flatMap((candidate) => {\n if (!isRecord(candidate) || typeof candidate.id !== \"string\" || !Array.isArray(candidate.rows)) return [];\n return [\n {\n id: candidate.id,\n label: text(candidate.label as Parameters<typeof text>[0]),\n rows: toRows(candidate.rows, extensionId, projectId),\n },\n ];\n })\n : undefined;\n return {\n label: text(value.label as Parameters<typeof text>[0]),\n icon: typeof value.icon === \"string\" ? value.icon : undefined,\n indicator: indicator?.icon ? indicator : undefined,\n menu,\n };\n};\nexport const createWorkbenchExtensionTabPresentation = (\n input: RegisterWorkbenchExtensionContributionsInput,\n metadata: WorkbenchExtensionTabMetadata,\n): WorkbenchPanelTab => {\n const snapshots = new Map<string, WorkbenchTabSnapshot>();\n const instances = new Map<string, Parameters<WorkbenchPanelTab[\"getSnapshot\"]>[0]>();\n const loading = new Map<string, Promise<void>>();\n const listeners = new Set<() => void>();\n const refreshEvents = new Set(metadata.refreshEventIds ?? []);\n let revision = 0;\n const load = (instance: Parameters<WorkbenchPanelTab[\"getSnapshot\"]>[0]): Promise<void> => {\n instances.set(instance.instanceId, instance);\n const pending = loading.get(instance.instanceId);\n if (pending) return pending;\n const resource = instance.resource;\n const currentRevision = revision;\n const pendingLoad = Promise.resolve(\n executeWorkbenchExtensionCommand(input, metadata.queryHandlerId, {\n resource,\n params: {\n renderer: {\n rendererId: metadata.placementId,\n projectId: input.projectId,\n ...(resource ? { resource } : {}),\n invocation: { placement: \"visible\" },\n },\n },\n }),\n )\n .then(async (value) => {\n if (currentRevision !== revision) {\n loading.delete(instance.instanceId);\n await load(instance);\n return;\n }\n snapshots.set(instance.instanceId, toSnapshot(value, metadata.extensionId, input.projectId));\n for (const listener of listeners) listener();\n })\n .finally(() => {\n if (loading.get(instance.instanceId) === pendingLoad) loading.delete(instance.instanceId);\n });\n loading.set(instance.instanceId, pendingLoad);\n return pendingLoad;\n };\n return {\n refreshEvents: metadata.refreshEventIds,\n getSnapshot(instance) {\n if (!snapshots.has(instance.instanceId)) void load(instance).catch(() => undefined);\n return snapshots.get(instance.instanceId) ?? {};\n },\n subscribe(listener) {\n listeners.add(listener);\n const resourceSubscription = input.workbench.resources.preview.subscribeRefresh(async (resource) => {\n const affected = [...instances.values()].filter(\n (instance) => instance.resource && resourceKey(instance.resource) === resourceKey(resource),\n );\n if (!affected.length) return;\n revision++;\n await Promise.all(affected.map(load));\n });\n const refreshSubscription = input.subscribeRefreshEvents?.((event: WorkbenchExtensionRefreshEvent) => {\n if (!refreshEvents.has(event.id)) return;\n revision++;\n for (const instance of instances.values()) void load(instance).catch(() => undefined);\n });\n const disposable: Disposable = {\n dispose() {\n listeners.delete(listener);\n refreshSubscription?.dispose();\n resourceSubscription.dispose();\n },\n };\n return disposable;\n },\n };\n};\n","import type { WorkbenchExtensionMetadata } from \"@pstdio/sdk/api\";\nimport { matchesResourceWhen } from \"@pstdio/sdk/extensions\";\nimport { text } from \"pstdio-extensions/workbench\";\nimport type { Disposable, WorkbenchCommandExecutionContext } from \"../../core\";\nimport { workbenchCommandPaletteMenuPath } from \"../../core\";\nimport { registerWorkbenchExtensionCommandPaletteResources } from \"../contributions/command-palette-resource-contributions\";\nimport { registerWorkbenchExtensionControlsRenderers } from \"../contributions/controls-renderer-contributions\";\nimport { registerWorkbenchExtensionDataTableRenderers } from \"../contributions/data-table-renderer-contributions\";\nimport {\n buildWorkbenchExtensionCommandPaletteRegistrations,\n buildWorkbenchExtensionMenuRegistrations,\n} from \"../contributions/extension-contributions\";\nimport { registerWorkbenchExtensionFileRenderers } from \"../contributions/file-renderer-contributions\";\nimport { registerWorkbenchExtensionKanbanRenderers } from \"../contributions/kanban-renderer-contributions\";\nimport { registerWorkbenchExtensionNavigationItems } from \"../contributions/navigation-item-contributions\";\nimport { localizeParamSchema } from \"../contributions/param-schema-localization\";\nimport { registerWorkbenchExtensionTreeRenderers } from \"../contributions/tree-renderer-contributions\";\nimport { registerResourceKinds } from \"./resource-kind-contributions\";\nimport {\n createExtensionSlot,\n executeWorkbenchExtensionCommand,\n type WorkbenchExtensionCommandContext,\n} from \"./workbench-extension-command\";\nimport type {\n InternalRegisterWorkbenchExtensionContributionsInput,\n RegisterWorkbenchExtensionContributionsInput,\n} from \"./workbench-extension-host-types\";\nimport { registerWorkbenchExtensionKeybindings } from \"./workbench-extension-keybindings\";\n\nexport type { RegisterWorkbenchExtensionContributionsInput } from \"./workbench-extension-host-types\";\n\nimport { toInternalWorkbenchExtensionMetadata } from \"./workbench-extension-metadata-adapter\";\nimport { registerWorkbenchExtensionRendererRefreshEvents } from \"./workbench-extension-refresh\";\nimport { registerSettings, registerViewMenus, registerWebviewPanels } from \"./workbench-extension-surfaces\";\nimport { createWorkbenchExtensionTabPresentation } from \"./workbench-extension-tab-presentation\";\n\nconst disposeAll = (disposables: Disposable[]) => {\n for (let index = disposables.length - 1; index >= 0; index -= 1) disposables[index]?.dispose();\n};\nconst asParams = (value: unknown): Record<string, unknown> | undefined =>\n value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\nconst prepareCommandArgs = (\n context: WorkbenchExtensionCommandContext,\n commandId: string,\n args: unknown,\n executionContext?: WorkbenchCommandExecutionContext,\n onArgsChange?: (args: unknown) => void,\n) => context.prepareCommandArgs?.(commandId, args, executionContext, onArgsChange) ?? args;\nconst registerCommands = (\n context: WorkbenchExtensionCommandContext,\n metadata: Pick<WorkbenchExtensionMetadata, \"commands\">,\n) =>\n metadata.commands.map((command) =>\n context.workbench.commands.registerCommand(\n {\n id: command.id,\n label: text(command.title, command.id),\n description: text(command.description),\n params: localizeParamSchema(command.params, text, command.extensionId),\n resourceMutation: command.resourceMutation,\n },\n {\n prepareArgs: (args, executionContext, onArgsChange) =>\n prepareCommandArgs(context, command.id, args, executionContext, onArgsChange),\n execute: (args, executionContext) =>\n executeWorkbenchExtensionCommand(context, command.id, {\n params: asParams(args),\n resource: executionContext?.resource,\n signal: executionContext?.signal,\n region: executionContext?.region,\n }),\n },\n ),\n );\nconst menuCommandResource = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n executionContext: WorkbenchCommandExecutionContext | undefined,\n) => executionContext?.resource ?? input.workbench.getPrimaryResource();\nconst registerMenus = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n context: WorkbenchExtensionCommandContext,\n) => {\n if (!input.menuSlotsById) return [] as Disposable[];\n const { registrations } = buildWorkbenchExtensionMenuRegistrations({\n metadata: input.metadata,\n menuSlotsById: input.menuSlotsById,\n menuTargetsById: input.menuTargetsById,\n createWhenExpression: input.createMenuWhenExpression,\n });\n const defaultRegistrations = registrations.map(({ menuItem, menuPath, ...registration }) => ({\n ...registration,\n menuItems: [{ menuItem, menuPath }],\n }));\n const resolvedRegistrations = input.menuRegistrations ?? defaultRegistrations;\n return resolvedRegistrations.flatMap((registration) => [\n input.workbench.commands.registerCommand(registration.command, {\n prepareArgs: (args, executionContext, onArgsChange) =>\n prepareCommandArgs(context, registration.targetCommandId, args, executionContext, onArgsChange),\n execute: (args, executionContext) =>\n executeWorkbenchExtensionCommand(context, registration.targetCommandId, {\n params: { ...(registration.contribution.params ?? {}), ...(asParams(args) ?? {}) },\n resource: menuCommandResource(input, executionContext),\n slot: createExtensionSlot({\n id: registration.contribution.slotId,\n kind: \"menu\",\n projectId: input.projectId,\n context: { panelId: registration.contribution.id },\n }),\n }),\n }),\n ...registration.menuItems.map(({ menuPath, menuItem }) =>\n input.workbench.layout.registerMenuItem(menuPath, menuItem),\n ),\n ]);\n};\nconst registerCommandPaletteContributions = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n context: WorkbenchExtensionCommandContext,\n) => {\n const registrations = buildWorkbenchExtensionCommandPaletteRegistrations({ metadata: input.metadata });\n return registrations.flatMap((registration) => [\n input.workbench.commands.registerCommand(registration.command, {\n prepareArgs: (args, executionContext, onArgsChange) =>\n prepareCommandArgs(context, registration.targetCommandId, args, executionContext, onArgsChange),\n execute: (args, executionContext) =>\n executeWorkbenchExtensionCommand(context, registration.targetCommandId, {\n params: { ...(registration.contribution.params ?? {}), ...(asParams(args) ?? {}) },\n resource: menuCommandResource(input, executionContext),\n slot: createExtensionSlot({\n id: \"workbench.commandPalette\",\n kind: \"menu\",\n projectId: input.projectId,\n context: { panelId: registration.contribution.id },\n }),\n }),\n isVisible: () => matchesResourceWhen(registration.contribution.when, input.workbench.getPrimaryResource()?.type),\n }),\n input.workbench.layout.registerMenuItem(workbenchCommandPaletteMenuPath, registration.menuItem),\n ]);\n};\nconst matchesActiveMode = (\n input: InternalRegisterWorkbenchExtensionContributionsInput,\n when:\n | {\n mode?: string | string[];\n }\n | undefined,\n) => {\n const modes = when?.mode;\n if (!modes) return true;\n const active = input.workbench.modes.getActiveModeId() ?? \"\";\n return Array.isArray(modes) ? modes.includes(active) : modes === active;\n};\nconst registerStatusBarItems = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n (input.metadata.statusBarItems ?? []).map((item) =>\n input.workbench.statusBar.registerItem({\n id: item.id,\n viewId: item.viewId,\n slot: item.slot,\n order: item.order,\n isVisible: () =>\n matchesActiveMode(\n input,\n item.when as\n | {\n mode?: string | string[];\n }\n | undefined,\n ),\n }),\n );\nconst registerPages = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.pages.map((page) => input.workbench.pages.registerPage(page));\nconst registerModes = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.modes.map((mode) =>\n input.workbench.modes.registerMode({\n id: mode.modeId,\n label: text(mode.label, mode.modeId),\n panels: mode.panelRegions,\n regionSettings: mode.regionSettings,\n panelHeaders: \"legacy\",\n floatingPanels: mode.floatingPanels,\n defaultTheme: mode.defaultTheme,\n chrome: mode.chrome,\n activate: () => undefined,\n }),\n );\nconst registerModePlacements = (input: InternalRegisterWorkbenchExtensionContributionsInput) =>\n input.metadata.placements.map((placement) => input.workbench.modePlacements.registerPlacement(placement));\nexport const registerWorkbenchExtensionContributions = (sourceInput: RegisterWorkbenchExtensionContributionsInput) => {\n const input: InternalRegisterWorkbenchExtensionContributionsInput = {\n ...sourceInput,\n metadata: toInternalWorkbenchExtensionMetadata(sourceInput.metadata, {\n createTab: (metadata) => createWorkbenchExtensionTabPresentation(sourceInput, metadata),\n }),\n };\n const disposables: Disposable[] = [];\n const context: WorkbenchExtensionCommandContext = input;\n try {\n disposables.push(...registerCommands(context, input.metadata));\n disposables.push(\n ...registerWorkbenchExtensionKeybindings({\n bindings: input.metadata.keybindings,\n createWhenExpression: input.createKeybindingWhenExpression,\n workbench: input.workbench,\n }),\n );\n disposables.push(...registerMenus(input, context));\n disposables.push(...registerCommandPaletteContributions(input, context));\n disposables.push(\n registerWorkbenchExtensionTreeRenderers({ ...input, resolveNodeResource: input.resolveTreeNodeResource }),\n );\n disposables.push(registerWorkbenchExtensionFileRenderers(input));\n disposables.push(registerWorkbenchExtensionControlsRenderers(context, input.metadata.controlsRenderers ?? []));\n disposables.push(...registerWebviewPanels(input));\n disposables.push(...registerSettings(input));\n // Status-backed renderers query their provider while they register. Providers\n // must exist first so the renderer's live option source can load immediately.\n disposables.push(\n registerWorkbenchExtensionKanbanRenderers(context, input.metadata.kanbanRenderers ?? [], input.kanbanAdapter),\n );\n disposables.push(\n registerWorkbenchExtensionDataTableRenderers(\n context,\n input.metadata.dataTableRenderers ?? [],\n input.dataTableAdapter,\n ),\n );\n disposables.push(...registerViewMenus(input));\n disposables.push(\n registerWorkbenchExtensionCommandPaletteResources(context, input.metadata.commandPaletteResources ?? []),\n );\n disposables.push(\n ...registerWorkbenchExtensionNavigationItems({\n createWhenExpression: sourceInput.createNavigationWhenExpression,\n metadata: sourceInput.metadata,\n workbench: sourceInput.workbench,\n }),\n );\n if (sourceInput.subscribeRefreshEvents) {\n disposables.push(\n registerWorkbenchExtensionRendererRefreshEvents({\n metadata: sourceInput.metadata,\n subscribe: sourceInput.subscribeRefreshEvents,\n workbench: sourceInput.workbench,\n }),\n );\n }\n disposables.push(...registerStatusBarItems(input));\n disposables.push(...registerResourceKinds(input));\n disposables.push(...registerPages(input));\n disposables.push(...registerModes(input));\n disposables.push(...registerModePlacements(input));\n return {\n dispose() {\n disposeAll(disposables);\n },\n };\n } catch (error) {\n disposeAll(disposables);\n throw error;\n }\n};\n"],"mappings":"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"}