@pstdio/workbench 0.41.0 → 0.42.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.
package/dist/react.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { $r as RegisteredWidgetContribution, A as WorkbenchCore, Ct as PreferenceScope, Fi as CommandParamSchema, Gi as ResourceRef, Jr as RegisteredMenuItem, Kr as MenuPath, Li as WorkbenchCommandExecutionContext, Ni as CommandParamDescriptor, Nr as TreeAction, P as WorkbenchModuleContribution, Pi as CommandParamOption, Qn as RegisteredDataTableRendererContribution, Qr as RegisteredPlaceholderContribution, Tt as PreferenceValue, Ut as KeybindingSequence, W as ThemePreferenceOption$1, Wr as WorkbenchPanelRenderInput, Xr as WorkbenchFocusRegionId, Xt as WorkbenchTerminalController, Y as WorkbenchStatusRegistry, bt as PreferencePropertySchema, j as WorkbenchCoreContributionContext, ji as Command, ma as Disposable, ni as WorkbenchPanelInstance, pa as WorkbenchStore, pi as WorkbenchWidgetPlacement, vi as WorkbenchRegion$1, xt as PreferenceRegistry } from "./index-Dh0tRr9k.js";
2
- import { a as ReactResourceContextAction, i as ReactKanbanRendererContribution, n as ReactAttributesSource, r as ReactBoardColumnConfig, t as ReactAttributeDescriptor } from "./kanban-presentation-C21WIlnn.js";
1
+ import { $n as RegisteredDataTableRendererContribution, $r as RegisteredPlaceholderContribution, Et as PreferenceValue, F as WorkbenchModuleContribution, Fi as CommandParamOption, G as ThemePreferenceOption$1, Gr as WorkbenchPanelRenderInput, Ii as CommandParamSchema, Ki as ResourceRef$1, M as WorkbenchCoreContributionContext, Mi as Command, Pi as CommandParamDescriptor, Pr as TreeAction, Ri as WorkbenchCommandExecutionContext, St as PreferenceRegistry, Wt as KeybindingSequence, X as WorkbenchStatusRegistry, Yr as RegisteredMenuItem, Zr as WorkbenchFocusRegionId, Zt as WorkbenchTerminalController, ei as RegisteredWidgetContribution, ha as WorkbenchStore, j as WorkbenchCore, ma as Disposable, mi as WorkbenchWidgetPlacement, qr as MenuPath, ri as WorkbenchPanelInstance, wt as PreferenceScope, xt as PreferencePropertySchema, yi as WorkbenchRegion$1 } from "./index-BUtrxfUl.js";
2
+ import { a as ReactResourceContextAction, i as ReactKanbanRendererContribution, n as ReactAttributesSource, r as ReactBoardColumnConfig, t as ReactAttributeDescriptor } from "./kanban-presentation-Wc433DQF.js";
3
+ import { ResourceAnchor, ResourceAnchorPage, ResourceAnchorQuery, ResourceRef } from "@pstdio/sdk/extensions";
3
4
  import { ReactNode } from "react";
4
- import { FileUploadValue, ParamEditorProps, ParamValue } from "@pstdio/ui/param-editor";
5
5
  import { FileIconThemePreferenceOption, ResourceContextAction, ThemePreference, ThemePreferenceOption, ThemePreferenceStorage } from "@pstdio/ui";
6
+ import { FileUploadValue, ParamEditorProps, ParamValue } from "@pstdio/ui/param-editor";
6
7
  import { BoxProps, IconProps } from "@chakra-ui/react";
7
8
  import { TerminalBridge } from "@pstdio/ui/terminal";
8
9
  //#region src/react/breadcrumb/breadcrumb-view.d.ts
@@ -57,7 +58,7 @@ export declare const CommandParamField: (props: Omit<CommandParamFieldProps, "co
57
58
  //#region src/react/command-palette/command-params-dialog.d.ts
58
59
  interface CommandParamsRequest {
59
60
  record: {
60
- command: Pick<Command, "id" | "label" | "description" | "params">;
61
+ command: Pick<Command, "id" | "label" | "description" | "params" | "resourceMutation">;
61
62
  };
62
63
  action?: RegisteredMenuItem;
63
64
  label: string;
@@ -151,13 +152,13 @@ interface WorkbenchMenuItem {
151
152
  readOnly?: true;
152
153
  }
153
154
  interface WorkbenchMenuItemContext {
154
- resource?: ResourceRef | undefined;
155
+ resource?: ResourceRef$1 | undefined;
155
156
  }
156
157
  export declare const listWorkbenchMenuItems: (workbench: WorkbenchCore, menuPath: MenuPath, context?: WorkbenchMenuItemContext) => WorkbenchMenuItem[];
157
158
  //#endregion
158
159
  //#region src/react/menus/resource-actions.d.ts
159
- export declare const createWorkbenchResourceActions: (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) => ResourceContextAction[];
160
- export declare const useWorkbenchResourceActionResolver: (workbench: WorkbenchCoreContributionContext) => (resource: ResourceRef) => ResourceContextAction[];
160
+ export declare const createWorkbenchResourceActions: (workbench: WorkbenchCoreContributionContext, resource: ResourceRef$1) => ResourceContextAction[];
161
+ export declare const useWorkbenchResourceActionResolver: (workbench: WorkbenchCoreContributionContext) => (resource: ResourceRef$1) => ResourceContextAction[];
161
162
  //#endregion
162
163
  //#region src/react/notifications/notification-host.d.ts
163
164
  interface WorkbenchNotificationHostProps {
@@ -249,7 +250,7 @@ interface WorkbenchTreeViewProps {
249
250
  workbench: WorkbenchCore;
250
251
  treeViewId: string;
251
252
  activeNodeId?: string | null;
252
- resource?: ResourceRef;
253
+ resource?: ResourceRef$1;
253
254
  viewId?: string;
254
255
  renderParamField?: CommandParamFieldRenderer;
255
256
  onOpenResourceError?: (error: unknown) => void;
@@ -264,6 +265,42 @@ interface WorkbenchConnectionProviderProps {
264
265
  }
265
266
  export declare const WorkbenchConnectionProvider: (props: WorkbenchConnectionProviderProps) => import("react/jsx-runtime").JSX.Element;
266
267
  //#endregion
268
+ //#region src/react/resource-links/resource-links-types.d.ts
269
+ interface ResourceLinkCandidate {
270
+ resource: ResourceRef;
271
+ description?: string;
272
+ open?: () => void | Promise<void>;
273
+ }
274
+ interface ResourceLinksService {
275
+ list(input: ResourceAnchorQuery): Promise<ResourceAnchorPage>;
276
+ add(source: ResourceRef, targets: ResourceAnchor[]): Promise<void>;
277
+ remove(source: ResourceRef, targets: ResourceRef[]): Promise<void>;
278
+ search(query: string, signal?: AbortSignal): Promise<ResourceLinkCandidate[]>;
279
+ resolve(resources: ResourceRef[], signal?: AbortSignal): Promise<ResourceLinkCandidate[]>;
280
+ subscribe(listener: () => void): () => void;
281
+ }
282
+ //#endregion
283
+ //#region src/react/resource-links/related-resources.d.ts
284
+ interface RelatedResourcesProps {
285
+ resource: ResourceRef;
286
+ service: ResourceLinksService;
287
+ onClose(): void;
288
+ }
289
+ export declare const RelatedResources: (props: RelatedResourcesProps) => import("react/jsx-runtime").JSX.Element;
290
+ //#endregion
291
+ //#region src/react/resource-links/resource-links-module.d.ts
292
+ interface WorkbenchResourceLinksOptions {
293
+ canonicalize(resource: ResourceRef): ResourceRef | undefined;
294
+ createService(resource: ResourceRef): ResourceLinksService;
295
+ }
296
+ export declare const resourceLinksCommandId = "workbench.resources.links";
297
+ export declare const createWorkbenchResourceLinksModule: (options: WorkbenchResourceLinksOptions) => {
298
+ id: string;
299
+ activate(ctx: WorkbenchCoreContributionContext): {
300
+ dispose: () => void;
301
+ };
302
+ };
303
+ //#endregion
267
304
  //#region src/react/settings/settings-resources.d.ts
268
305
  export declare const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = "workbench.settings.open";
269
306
  //#endregion
@@ -321,7 +358,7 @@ export declare const WORKBENCH_TERMINAL_PANEL_SIZE: {
321
358
  minPx: number;
322
359
  };
323
360
  interface OpenWorkbenchTerminalOptions {
324
- resource?: ResourceRef;
361
+ resource?: ResourceRef$1;
325
362
  reveal?: boolean;
326
363
  }
327
364
  export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalOptions) => WorkbenchPanelInstance;
@@ -338,7 +375,7 @@ export declare const createWorkbenchTerminalModule: () => WorkbenchModuleContrib
338
375
  //#region src/react/terminal/workbench-terminal-panel.d.ts
339
376
  interface ControllerTerminalBridgeOptions {
340
377
  getBindingId?: () => string | undefined;
341
- getResource?: () => ResourceRef | undefined;
378
+ getResource?: () => ResourceRef$1 | undefined;
342
379
  getTitle?: () => string | undefined;
343
380
  }
344
381
  export declare const createControllerTerminalBridge: (terminal: WorkbenchTerminalController, options?: ControllerTerminalBridgeOptions) => TerminalBridge;
@@ -434,5 +471,5 @@ export declare const disposeWorkbenchModuleHostRegistrations: (registrations: Ma
434
471
  export declare const syncWorkbenchModuleHostRegistrations: (workbench: WorkbenchCore, registrations: Map<string, WorkbenchModuleHostRegistration>, modules: readonly WorkbenchModuleContribution[]) => void;
435
472
  export declare const WorkbenchModuleHost: (props: WorkbenchModuleHostProps) => null;
436
473
  //#endregion
437
- export type { CommandFilesParamValue, CommandOptionState, CommandParamEntry, CommandParamFieldProps, CommandParamFieldRenderer, CommandParamValue, ExecuteOptionCommand, PreferenceParamEntry, ReactAttributeDescriptor, ReactAttributesSource, ReactBoardColumnConfig, ReactKanbanRendererContribution, ReactResourceContextAction, TreeActionParamsRequest, WorkbenchHotkeyRegistration, WorkbenchMenuItem, WorkbenchModuleHostProps, WorkbenchModuleHostRegistration, WorkbenchOverlayWidgetConfig, WorkbenchPanelRenderInput, WorkbenchPreferencesFormProps, WorkbenchSettingsModuleOptions };
474
+ export type { CommandFilesParamValue, CommandOptionState, CommandParamEntry, CommandParamFieldProps, CommandParamFieldRenderer, CommandParamValue, ExecuteOptionCommand, PreferenceParamEntry, ReactAttributeDescriptor, ReactAttributesSource, ReactBoardColumnConfig, ReactKanbanRendererContribution, ReactResourceContextAction, ResourceLinkCandidate, ResourceLinksService, TreeActionParamsRequest, WorkbenchHotkeyRegistration, WorkbenchMenuItem, WorkbenchModuleHostProps, WorkbenchModuleHostRegistration, WorkbenchOverlayWidgetConfig, WorkbenchPanelRenderInput, WorkbenchPreferencesFormProps, WorkbenchResourceLinksOptions, WorkbenchSettingsModuleOptions };
438
475
  export {};
package/dist/react.js CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as e, A as t, B as n, C as r, D as i, E as a, F as o, G as s, H as c, I as l, J as u, K as d, L as f, M as p, N as m, O as h, P as g, Q as _, R as v, S as y, T as b, U as x, V as S, W as C, X as w, Y as T, Z as E, _ as D, at as O, b as k, ct as A, d as j, et as M, f as N, g as P, h as F, i as I, it as L, j as R, k as z, m as B, n as V, nt as H, ot as U, p as W, q as G, r as K, rt as q, st as J, t as Y, tt as X, v as Z, w as Q, x as $, y as ee, z as te } from "./react-B-rd34kK.js";
2
- export { O as CommandOptionStatus, E as CommandParamField, b as WORKBENCH_SETTINGS_NAV_WIDGET_ID, z as WORKBENCH_SETTINGS_OPEN_COMMAND_ID, a as WORKBENCH_SETTINGS_PANEL_WIDGET_ID, i as WORKBENCH_SETTINGS_WIDGET_ID, F as WORKBENCH_TERMINAL_OPEN_COMMAND_ID, P as WORKBENCH_TERMINAL_PANEL_SIZE, D as WORKBENCH_TERMINAL_WIDGET_ID, I as Workbench, r as WorkbenchAttachedSidePanel, U as WorkbenchBreadcrumbView, T as WorkbenchCommandPalette, o as WorkbenchConnectionProvider, g as WorkbenchDataTableView, Q as WorkbenchFloatingSidePanel, u as WorkbenchFocusRegion, d as WorkbenchHeaderActions, A as WorkbenchIcon, x as WorkbenchKeybindingDispatcher, Y as WorkbenchModuleHost, te as WorkbenchNotificationHost, j as WorkbenchOverlayLayer, R as WorkbenchPreferencesForm, f as WorkbenchRegion, l as WorkbenchRegionTabs, k as WorkbenchTerminalPanel, W as WorkbenchThemeProvider, N as WorkbenchThemeScope, t as WorkbenchTreeView, v as WorkbenchWidgetHost, y as WorkflowStatusSettings, M as buildCommandParamInitialValues, _ as commandParamName, X as createCommandFilesParamValue, $ as createControllerTerminalBridge, c as createTreeContextMenuItems, C as createWorkbenchHotkeyRegistrations, n as createWorkbenchResourceActions, h as createWorkbenchSettingsModule, Z as createWorkbenchTerminalModule, V as disposeWorkbenchModuleHostRegistrations, H as isCommandFilesParamValue, q as listCommandParamEntries, G as listWorkbenchMenuItems, L as normalizeCommandParamValues, s as normalizeWorkbenchKeybinding, ee as openWorkbenchTerminal, p as paramValueToPreference, m as preferenceSchemaToParams, e as readCommandParamValue, K as syncWorkbenchModuleHostRegistrations, w as useCommandOptions, S as useWorkbenchResourceActionResolver, J as useWorkbenchStore, B as useWorkbenchThemePreferences };
1
+ import { $ as e, A as t, B as n, C as r, D as i, E as a, F as o, G as s, H as c, I as l, J as u, K as d, L as f, M as p, N as m, O as h, P as g, Q as _, R as v, S as y, T as b, U as x, V as S, W as C, X as w, Y as T, Z as E, _ as D, at as O, b as k, ct as A, d as j, dt as M, et as N, f as P, g as F, h as I, i as L, it as R, j as z, k as B, lt as V, m as H, n as U, nt as W, ot as G, p as K, q, r as J, rt as Y, st as X, t as Z, tt as Q, ut as $, v as ee, w as te, x as ne, y as re, z as ie } from "./react-Buqbh5XD.js";
2
+ export { Y as CommandOptionStatus, N as CommandParamField, p as RelatedResources, b as WORKBENCH_SETTINGS_NAV_WIDGET_ID, B as WORKBENCH_SETTINGS_OPEN_COMMAND_ID, a as WORKBENCH_SETTINGS_PANEL_WIDGET_ID, i as WORKBENCH_SETTINGS_WIDGET_ID, I as WORKBENCH_TERMINAL_OPEN_COMMAND_ID, F as WORKBENCH_TERMINAL_PANEL_SIZE, D as WORKBENCH_TERMINAL_WIDGET_ID, L as Workbench, r as WorkbenchAttachedSidePanel, R as WorkbenchBreadcrumbView, _ as WorkbenchCommandPalette, v as WorkbenchConnectionProvider, f as WorkbenchDataTableView, te as WorkbenchFloatingSidePanel, E as WorkbenchFocusRegion, T as WorkbenchHeaderActions, M as WorkbenchIcon, d as WorkbenchKeybindingDispatcher, Z as WorkbenchModuleHost, c as WorkbenchNotificationHost, j as WorkbenchOverlayLayer, g as WorkbenchPreferencesForm, n as WorkbenchRegion, ie as WorkbenchRegionTabs, k as WorkbenchTerminalPanel, K as WorkbenchThemeProvider, P as WorkbenchThemeScope, m as WorkbenchTreeView, S as WorkbenchWidgetHost, y as WorkflowStatusSettings, G as buildCommandParamInitialValues, Q as commandParamName, X as createCommandFilesParamValue, ne as createControllerTerminalBridge, s as createTreeContextMenuItems, q as createWorkbenchHotkeyRegistrations, x as createWorkbenchResourceActions, t as createWorkbenchResourceLinksModule, h as createWorkbenchSettingsModule, ee as createWorkbenchTerminalModule, U as disposeWorkbenchModuleHostRegistrations, A as isCommandFilesParamValue, V as listCommandParamEntries, w as listWorkbenchMenuItems, $ as normalizeCommandParamValues, u as normalizeWorkbenchKeybinding, re as openWorkbenchTerminal, o as paramValueToPreference, l as preferenceSchemaToParams, W as readCommandParamValue, z as resourceLinksCommandId, J as syncWorkbenchModuleHostRegistrations, e as useCommandOptions, C as useWorkbenchResourceActionResolver, O as useWorkbenchStore, H as useWorkbenchThemePreferences };
package/dist/storage.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { R as WorkbenchPersistenceAdapter, Vr as TreeRendererPersistenceAdapter, Zr as LayoutPersistenceAdapter, gn as WorkbenchPageLocationPersistence, nt as WorkbenchStatusBarPersistenceAdapter, un as WorkbenchPanelMenuStatePersistenceAdapter } from "./index-Dh0tRr9k.js";
1
+ import { Hr as TreeRendererPersistenceAdapter, Qr as LayoutPersistenceAdapter, _n as WorkbenchPageLocationPersistence, dn as WorkbenchPanelMenuStatePersistenceAdapter, rt as WorkbenchStatusBarPersistenceAdapter, z as WorkbenchPersistenceAdapter } from "./index-BUtrxfUl.js";
2
2
  //#region src/storage/local-storage-persistence-helpers.d.ts
3
3
  interface WorkbenchStorageLike {
4
4
  readonly length?: number;
@@ -27,7 +27,7 @@ var e = "pstdio-extension-mount", t = (e) => e.replaceAll("&", "&amp;").replaceA
27
27
  ${t}
28
28
  </body>
29
29
  </html>
30
- `, i = (e) => r(`<script src="${t(e)}"><\/script>`), a = (e) => r(`<script>${n(e)}<\/script>`), o = () => "// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction te(){let e=globalThis;if(e.window!==void 0&&e.document!==void 0)return\"browser\";if(e.WorkerGlobalScope!==void 0&&e.self!==void 0&&e.self instanceof e.WorkerGlobalScope||e.window===void 0&&e.self!==void 0&&typeof e.importScripts==\"function\")return\"worker\";let t=e.process;if(t&&typeof t==\"object\"){let n=t.versions??{},s=t.release?.name;if(n.bun||s===\"bun\"||e.Bun!==void 0)return\"bun\";if(n.node&&s===\"node\")return\"node\"}return e.Bun===void 0?\"browser\":\"bun\"}function M(){return te()}function B(){return M()===\"worker\"}function z(){let e=M();return e===\"node\"||e===\"bun\"}function ne(){return window.self!==window.top}function re(e){let t={};return function n(s,i=\"\"){Object.keys(s).forEach((r)=>{let o=i?`${i}.${r}`:r;s[r]===Object(s[r])&&n(s[r],o),typeof s[r]==\"function\"&&(t[o]=s[r],delete s[r])})}(e),t}function se(e){return!e||e===\"null\"?\"*\":e}function oe(e,t,n){if(!e||typeof e!=\"object\")return e;let s=Array.isArray(t)?t:t.split(\".\").map((r)=>r.match(/^\\d+$/)?Number(r):r),i=e;for(let r=0;r<s.length;r++){let o=s[r];r===s.length-1?i[o]=n:((!i[o]||typeof i[o]!=\"object\")&&(i[o]=typeof s[r+1]==\"number\"?[]:{}),i=i[o])}return e}function ie(e=10){let t=\"\";for(let n=0;n<e;n++)t+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(Math.random()*62));return t}var V=M(),P=null;if(V===\"node\"||V===\"bun\")try{let e=globalThis.require;P=e?.(\"node:worker_threads\")?.parentPort??null}catch{}function ae(){if(z())return P;if(B())return self;if(ne())return window.parent;throw Error(\"No valid target found for postMessage\")}function C(e,t,n,s){if(!e)throw Error(\"Rimless Error: No target specified for postMessage\");if(z()&&e===P){e.postMessage(t,{transfer:s});return}if(B()){e.postMessage(t,{transfer:s});return}if(e.postMessage){e.postMessage(t,{targetOrigin:se(n),transfer:s});return}throw Error(\"Rimless Error: Invalid target for postMessage\")}function G(e){return P!==null&&e===P}function L(e,t,n){G(e)?e.on(t,n):(\"addEventListener\"in e)&&e.addEventListener(t,n)}function O(e,t,n){G(e)?e.off(t,n):(\"removeEventListener\"in e)&&e.removeEventListener(t,n)}function N(e){return e.data||e}var S=function(e){return e.MESSAGE=\"message\",e}({}),y=function(e){return e.HANDSHAKE_REQUEST=\"RIMLESS/HANDSHAKE_REQUEST\",e.HANDSHAKE_REPLY=\"RIMLESS/HANDSHAKE_REPLY\",e.RPC_REQUEST=\"RIMLESS/RPC_REQUEST\",e.RPC_RESOLVE=\"RIMLESS/RPC_RESOLVE\",e.RPC_REJECT=\"RIMLESS/RPC_REJECT\",e}({}),b=Symbol();function ce(e={},t,n,s,i){let r=[];for(let[o,d]of Object.entries(e)){async function a(p){let{action:E,callID:m,connectionID:f,callName:w,args:v=[]}=N(p);if(E!==y.RPC_REQUEST||!m||!w||w!==o||f!==t)return;let g={action:y.RPC_RESOLVE,callID:m,callName:w,connectionID:f,error:null,result:null},R;try{g.result=await d(...v,i),g.result?.[b]&&(R=g.result[b]??[],delete g.result[b])}catch(A){g.action=y.RPC_REJECT,g.error=JSON.parse(JSON.stringify(A,Object.getOwnPropertyNames(A)))}C(s,g,p?.origin,R)}L(n,S.MESSAGE,a),r.push(()=>O(n,S.MESSAGE,a))}return()=>r.forEach((o)=>o())}function de(e,t,n,s=[],i,r){return(...o)=>new Promise((d,a)=>{let p=ie();function E(w){let{callID:v,connectionID:g,callName:R,result:A,error:ee,action:W}=N(w);if(!(!v||!R)&&R===e&&v===p&&g===t){if(W===y.RPC_RESOLVE)return d(A);if(W===y.RPC_REJECT)return a(ee)}}let m={action:y.RPC_REQUEST,args:o,callID:p,callName:e,connectionID:t},f=o.reduce((w,v)=>v[b]?.length?w.concat(v[b]):w,o[b]??[]);L(i,S.MESSAGE,E),s.push(()=>O(i,S.MESSAGE,E)),C(r,m,n?.origin,f)})}function le(e={},t=[],n,s,i,r){let o={...e},d=[];for(let a of t)oe(o,a,de(a,n,s,d,i,r));return{remote:o,unregisterRemote:()=>d.forEach((a)=>a())}}function fe(e={},t){return new Promise(async(n)=>{let s=re(e),i=ae(),r=self||window;async function o(d){let a=N(d);if(a?.action!==y.HANDSHAKE_REPLY)return;let{remote:p,unregisterRemote:E}=le(a.schema,a.methodNames,a.connectionID,d,r,i),m=ce(s,a.connectionID,r,i,p);return await t?.onConnectionSetup?.(p),C(i,{action:y.HANDSHAKE_REPLY,connectionID:a.connectionID},d?.origin),n({remote:p,close:()=>{O(r,S.MESSAGE,o),E(),m()},id:a.connectionID})}L(r,S.MESSAGE,o),C(i,{action:y.HANDSHAKE_REQUEST,methodNames:Object.keys(s),schema:e})})}var F={connect:fe};var ue=(e)=>typeof e===\"object\"&&e!==null,J=(e)=>{try{let t=JSON.stringify(e);if(typeof t===\"string\"&&t.length>0)return t}catch{}try{return String(e)}catch{return\"Unknown error\"}},T=(e)=>{if(e instanceof Error)return{message:e.message,stack:e.stack};if(typeof e===\"string\")return{message:e};if(ue(e)){let t=typeof e.message===\"string\"?e.message:null,n=typeof e.stack===\"string\"?e.stack:void 0;if(t)return n?{message:t,stack:n}:{message:t};return{message:J(e)}}if(e===null||e===void 0)return{message:\"Unknown error\"};return{message:J(e)}};var H=\"(?:0|[1-9]\\\\d*)\",xe=new RegExp(`^\\\\^(${H}\\\\.${H}\\\\.${H})$`);var _=[\"sidenav\",\"main\",\"secondary\",\"side\"];var u=(e,t)=>({extensionId:\"pstdio\",kind:e,id:t}),h={project:u(\"mode\",\"project\"),sessions:u(\"mode\",\"sessions\"),settings:u(\"mode\",\"settings\")},Ae={project:{ref:h.project,regions:_},sessions:{ref:h.sessions,regions:_},settings:{ref:h.settings,regions:_}},U=(e,t,n)=>({id:e,ref:u(\"resource-kind\",e),label:t,menuSlots:n}),D=[{id:\"headerPrimary\",placement:\"header-primary\",access:\"public\"},{id:\"headerOverflow\",placement:\"header-overflow\",access:\"public\"}],K={project:U(\"project\",\"Extension\",D),session:U(\"session\",\"Session\",D),workspace:U(\"workspace\",\"Workspace\",D)},k={project:K.project.ref,session:K.session.ref,workspace:K.workspace.ref},x={start:u(\"page\",\"start\"),sessions:u(\"page\",\"sessions\"),session:u(\"page\",\"session\"),workspaces:u(\"page\",\"workspaces\"),workspace:u(\"page\",\"workspace\")},Ce={start:{ref:x.start,mode:h.project,path:\"\",primary:{cardinality:\"one\",resourceKinds:[]}},sessions:{ref:x.sessions,mode:h.sessions,path:\"sessions\",primary:{cardinality:\"one\",resourceKinds:[]}},session:{ref:x.session,mode:h.sessions,path:\"session\",primary:{cardinality:\"one\",resourceKinds:[\"session\",\"session-draft\"]}},workspaces:{ref:x.workspaces,mode:h.project,path:\"workspaces\",primary:{cardinality:\"one\",resourceKinds:[]}},workspace:{ref:x.workspace,mode:h.project,path:\"workspace\",primary:{cardinality:\"many\",resourceKinds:[\"workspace\"]}}},pe={projectSession:u(\"placement\",\"project-session\")},Te={projectSession:{ref:pe.projectSession,mode:h.project,cardinality:\"many\",resourceKinds:[\"session\",\"session-draft\"]}},je={projectSettings:u(\"settings-panel\",\"project.settings\"),statusBarLeading:u(\"status-bar-item\",\"status-bar.leading\"),statusBarTrailing:u(\"status-bar-item\",\"status-bar.trailing\")};var q=(e)=>({...e,kind:\"command\"}),Me=Object.assign(q,{forExtension:(e)=>(t)=>q({extensionId:`${e.publisher}.${e.name}`,id:t})}),me=(e)=>({...e,kind:\"event\"}),j=(e,t)=>({id:e,kind:t.kind,label:t.label,description:t.description,metadata:t.metadata}),l=(e)=>me({extensionId:\"pstdio\",id:e}),I=(e,t)=>j(`${e.id}.${t}`,{kind:\"menu\"}),Le={sidenav:j(\"project.sidenav\",{kind:\"panel\"}),headerPrimary:I(k.project,\"headerPrimary\"),headerOverflow:I(k.project,\"headerOverflow\"),settingsPanels:j(\"project.settingsPanels\",{kind:\"settings\"})},Oe={headerPrimary:I(k.session,\"headerPrimary\"),headerOverflow:I(k.session,\"headerOverflow\")},Ne={headerPrimary:I(k.workspace,\"headerPrimary\"),headerOverflow:I(k.workspace,\"headerOverflow\"),sidenav:j(\"workspace.sidenav\",{kind:\"panel\"})},$e={opened:l(\"project.opened\")},He={sessionsChanged:l(\"view.sessions.changed\"),workspacesChanged:l(\"view.workspaces.changed\"),repositoriesChanged:l(\"view.repositories.changed\")},_e={started:l(\"session.started\"),resumed:l(\"session.resumed\"),awaitingInput:l(\"session.awaitingInput\"),succeeded:l(\"session.succeeded\"),failed:l(\"session.failed\"),completed:l(\"session.completed\")},Ue={created:l(\"workspace.created\"),provision:l(\"workspace.provision\"),ready:l(\"workspace.ready\"),archived:l(\"workspace.archived\"),deleted:l(\"workspace.deleted\")},De={removed:l(\"worktree.removed\")},Ke={committed:l(\"git.committed\"),rebased:l(\"git.rebased\"),merged:l(\"git.merged\"),conflicted:l(\"git.conflicted\")};var ge=[\"clipboard.write\",\"commands.execute\",\"navigation.open\",\"placement.close\",\"notification.show\",\"notification.action\",\"notification.resolve\",\"notification.dismiss\",\"preferences.get\",\"preferences.set\",\"extension.settings.all\",\"extension.settings.get\",\"extension.settings.set\",\"extension.settings.delete\",\"terminal.session\",\"files.upload\",\"files.list\",\"files.delete\"],ye=[\"artifacts.read\"],he=[\"host.dispatchKeyboardEvent\"],We=[...ge.filter((e)=>e!==\"clipboard.write\"),...ye,...he];var c=(e)=>(t)=>({...t,ref:{kind:e,id:t.id}}),Ve=c(\"view\"),Be=c(\"view-menu\"),ze=c(\"placement\"),Ge=c(\"resource-kind\");var Fe=c(\"navigation-item\"),Je=c(\"navigation-tree\"),qe=c(\"mode\");var Ye=c(\"status-bar-item\"),Qe=c(\"status\"),Xe=c(\"settings-panel\"),Ze=c(\"activity-item\"),et=c(\"settings-section\"),tt=c(\"command-palette-resource\"),nt=c(\"keybinding\"),rt=c(\"schedule\"),st=c(\"artifact-mount\"),ot=c(\"template-type\"),it=c(\"template\"),at=c(\"skill\"),ct=c(\"theme\"),dt=c(\"file-icon-theme\"),lt=c(\"workspace-type\"),ft=c(\"harness\"),ut=c(\"connection\");var Y=(e,t,n)=>({call:async(s,...i)=>{try{return await e({method:s,params:i[0]})}catch(r){if(r instanceof Error)throw r;throw Error(T(r).message)}},onEvent:t,extensionId:n}),Q=(e)=>{let t=e,n=new Set;return{get:()=>t,subscribe:(s)=>(n.add(s),()=>n.delete(s)),set:(s)=>{t=s;for(let i of n)i(t)}}};var X=\"pstdio-extension-mount\",Ee=()=>{let e=new Map;return{get length(){return e.size},clear:()=>e.clear(),getItem:(t)=>e.get(t)??null,key:(t)=>Array.from(e.keys())[t]??null,removeItem:(t)=>e.delete(t),setItem:(t,n)=>e.set(t,n)}},we=()=>{for(let e of[\"localStorage\",\"sessionStorage\"])try{window[e]}catch{Object.defineProperty(window,e,{configurable:!0,value:Ee()})}},Z=(e,t)=>{let n=document.documentElement,s=e===\"dark\"?\"light\":\"dark\";n.classList.remove(s),n.classList.add(e),n.setAttribute(\"data-theme\",e),n.style.colorScheme=e;for(let[i,r]of Object.entries(t))if(i.startsWith(\"--\"))n.style.setProperty(i,r)},ve=(e)=>{for(let t of e){let n=document.createElement(\"link\");n.rel=\"stylesheet\",n.href=t,document.head.appendChild(n)}},be=()=>{let e=document.getElementById(X);if(!e)e=document.createElement(\"div\"),e.id=X,e.style.height=\"100%\",e.style.width=\"100%\",document.body.appendChild(e);return e},Se=()=>{window.addEventListener(\"message\",(e)=>{let t=e.data?.action;if(typeof t!==\"string\"||!t.startsWith(\"RIMLESS/\"))return;if(e.source!==window.parent)e.stopImmediatePropagation()},{capture:!0})},ke=(e)=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLElement&&e.isContentEditable,Ie=async()=>{we(),Se();let e=Q(void 0),t=new Map,n=(o,d)=>{let a=t.get(o)??new Set;return a.add(d),t.set(o,a),()=>{a.delete(d)}},s,i=!1,r=await F.connect({init:async(o)=>{try{Z(o.theme,o.themeVariables),ve(o.styles),e.set(o.props);let d=be(),a=await import(o.moduleUrl),p=a.default??(a.mount?a:void 0);if(!p?.mount)throw Error(\"Extension module does not export a default view (defineExtensionView).\");let E=Y((f)=>r.remote.call(f),n,o.extensionId),m=await p.mount(d,E,e);if(s=typeof m===\"function\"?m:void 0,!i)i=!0,document.addEventListener(\"keydown\",(f)=>{if(!f.ctrlKey&&!f.metaKey&&!f.altKey)return;if(ke(f.target)&&!f.shiftKey)return;r.remote.call({method:\"host.dispatchKeyboardEvent\",params:{key:f.key,code:f.code,ctrlKey:f.ctrlKey,metaKey:f.metaKey,altKey:f.altKey,shiftKey:f.shiftKey,repeat:f.repeat}}).catch(()=>{})},!0)}catch(d){let a=T(d);throw r.remote.runtimeError(a),d instanceof Error?d:Error(a.message)}},themeUpdate:(o)=>{Z(o.theme,o.variables)},propsUpdate:(o)=>{e.set(o.props)},hostEvent:(o)=>{for(let d of t.get(o.scope)??[])d(o.payload)}});r.remote.ready({}),window.addEventListener(\"beforeunload\",()=>{s?.()})};Ie();\n";
30
+ `, i = (e) => r(`<script src="${t(e)}"><\/script>`), a = (e) => r(`<script>${n(e)}<\/script>`), o = () => "// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction ne(){let e=globalThis;if(e.window!==void 0&&e.document!==void 0)return\"browser\";if(e.WorkerGlobalScope!==void 0&&e.self!==void 0&&e.self instanceof e.WorkerGlobalScope||e.window===void 0&&e.self!==void 0&&typeof e.importScripts==\"function\")return\"worker\";let t=e.process;if(t&&typeof t==\"object\"){let n=t.versions??{},r=t.release?.name;if(n.bun||r===\"bun\"||e.Bun!==void 0)return\"bun\";if(n.node&&r===\"node\")return\"node\"}return e.Bun===void 0?\"browser\":\"bun\"}function M(){return ne()}function B(){return M()===\"worker\"}function z(){let e=M();return e===\"node\"||e===\"bun\"}function re(){return window.self!==window.top}function se(e){let t={};return function n(r,i=\"\"){Object.keys(r).forEach((s)=>{let o=i?`${i}.${s}`:s;r[s]===Object(r[s])&&n(r[s],o),typeof r[s]==\"function\"&&(t[o]=r[s],delete r[s])})}(e),t}function oe(e){return!e||e===\"null\"?\"*\":e}function ie(e,t,n){if(!e||typeof e!=\"object\")return e;let r=Array.isArray(t)?t:t.split(\".\").map((s)=>s.match(/^\\d+$/)?Number(s):s),i=e;for(let s=0;s<r.length;s++){let o=r[s];s===r.length-1?i[o]=n:((!i[o]||typeof i[o]!=\"object\")&&(i[o]=typeof r[s+1]==\"number\"?[]:{}),i=i[o])}return e}function ae(e=10){let t=\"\";for(let n=0;n<e;n++)t+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(Math.random()*62));return t}var V=M(),R=null;if(V===\"node\"||V===\"bun\")try{let e=globalThis.require;R=e?.(\"node:worker_threads\")?.parentPort??null}catch{}function ce(){if(z())return R;if(B())return self;if(re())return window.parent;throw Error(\"No valid target found for postMessage\")}function A(e,t,n,r){if(!e)throw Error(\"Rimless Error: No target specified for postMessage\");if(z()&&e===R){e.postMessage(t,{transfer:r});return}if(B()){e.postMessage(t,{transfer:r});return}if(e.postMessage){e.postMessage(t,{targetOrigin:oe(n),transfer:r});return}throw Error(\"Rimless Error: Invalid target for postMessage\")}function G(e){return R!==null&&e===R}function L(e,t,n){G(e)?e.on(t,n):(\"addEventListener\"in e)&&e.addEventListener(t,n)}function O(e,t,n){G(e)?e.off(t,n):(\"removeEventListener\"in e)&&e.removeEventListener(t,n)}function _(e){return e.data||e}var b=function(e){return e.MESSAGE=\"message\",e}({}),h=function(e){return e.HANDSHAKE_REQUEST=\"RIMLESS/HANDSHAKE_REQUEST\",e.HANDSHAKE_REPLY=\"RIMLESS/HANDSHAKE_REPLY\",e.RPC_REQUEST=\"RIMLESS/RPC_REQUEST\",e.RPC_RESOLVE=\"RIMLESS/RPC_RESOLVE\",e.RPC_REJECT=\"RIMLESS/RPC_REJECT\",e}({}),E=Symbol();function de(e={},t,n,r,i){let s=[];for(let[o,l]of Object.entries(e)){async function a(m){let{action:g,callID:y,connectionID:f,callName:I,args:v=[]}=_(m);if(g!==h.RPC_REQUEST||!y||!I||I!==o||f!==t)return;let u={action:h.RPC_RESOLVE,callID:y,callName:I,connectionID:f,error:null,result:null},C;try{u.result=await l(...v,i),u.result?.[E]&&(C=u.result[E]??[],delete u.result[E])}catch(P){u.action=h.RPC_REJECT,u.error=JSON.parse(JSON.stringify(P,Object.getOwnPropertyNames(P)))}A(r,u,m?.origin,C)}L(n,b.MESSAGE,a),s.push(()=>O(n,b.MESSAGE,a))}return()=>s.forEach((o)=>o())}function le(e,t,n,r=new Set,i,s){return(...o)=>new Promise((l,a)=>{let m=ae();function g(){O(i,b.MESSAGE,y),r.delete(g)}function y(v){let{callID:u,connectionID:C,callName:P,result:ee,error:te,action:W}=_(v);if(!(!u||!P)&&P===e&&u===m&&C===t){if(W===h.RPC_RESOLVE)return g(),l(ee);if(W===h.RPC_REJECT)return g(),a(te)}}let f={action:h.RPC_REQUEST,args:o,callID:m,callName:e,connectionID:t},I=o.reduce((v,u)=>u[E]?.length?v.concat(u[E]):v,o[E]??[]);L(i,b.MESSAGE,y),r.add(g),A(s,f,n?.origin,I)})}function fe(e={},t=[],n,r,i,s){let o={...e},l=new Set;for(let a of t)ie(o,a,le(a,n,r,l,i,s));return{remote:o,unregisterRemote:()=>l.forEach((a)=>a())}}function ue(e={},t){return new Promise(async(n)=>{let r=se(e),i=ce(),s=self||window;async function o(l){let a=_(l);if(a?.action!==h.HANDSHAKE_REPLY)return;let{remote:m,unregisterRemote:g}=fe(a.schema,a.methodNames,a.connectionID,l,s,i),y=de(r,a.connectionID,s,i,m);return await t?.onConnectionSetup?.(m),A(i,{action:h.HANDSHAKE_REPLY,connectionID:a.connectionID},l?.origin),n({remote:m,close:()=>{O(s,b.MESSAGE,o),g(),y()},id:a.connectionID})}L(s,b.MESSAGE,o),A(i,{action:h.HANDSHAKE_REQUEST,methodNames:Object.keys(r),schema:e})})}var J={connect:ue};var pe=(e)=>typeof e===\"object\"&&e!==null,q=(e)=>{try{let t=JSON.stringify(e);if(typeof t===\"string\"&&t.length>0)return t}catch{}try{return String(e)}catch{return\"Unknown error\"}},j=(e)=>{if(e instanceof Error)return{message:e.message,stack:e.stack};if(typeof e===\"string\")return{message:e};if(pe(e)){let t=typeof e.message===\"string\"?e.message:null,n=typeof e.stack===\"string\"?e.stack:void 0;if(t)return n?{message:t,stack:n}:{message:t};return{message:q(e)}}if(e===null||e===void 0)return{message:\"Unknown error\"};return{message:q(e)}};var N=\"(?:0|[1-9]\\\\d*)\",Ce=new RegExp(`^\\\\^(${N}\\\\.${N}\\\\.${N})$`);var H=[\"sidenav\",\"main\",\"secondary\",\"side\"];var p=(e,t)=>({extensionId:\"pstdio\",kind:e,id:t}),w={project:p(\"mode\",\"project\"),sessions:p(\"mode\",\"sessions\"),settings:p(\"mode\",\"settings\")},Ae={project:{ref:w.project,regions:H},sessions:{ref:w.sessions,regions:H},settings:{ref:w.settings,regions:H}},U=(e,t,n)=>({id:e,ref:p(\"resource-kind\",e),label:t,menuSlots:n}),D=[{id:\"headerPrimary\",placement:\"header-primary\",access:\"public\"},{id:\"headerOverflow\",placement:\"header-overflow\",access:\"public\"}],K={project:U(\"project\",\"Extension\",D),session:U(\"session\",\"Session\",D),workspace:U(\"workspace\",\"Workspace\",D)},S={project:K.project.ref,session:K.session.ref,workspace:K.workspace.ref},x={start:p(\"page\",\"start\"),sessions:p(\"page\",\"sessions\"),session:p(\"page\",\"session\"),workspaces:p(\"page\",\"workspaces\"),workspace:p(\"page\",\"workspace\")},je={start:{ref:x.start,mode:w.project,path:\"\",primary:{cardinality:\"one\",resourceKinds:[]}},sessions:{ref:x.sessions,mode:w.sessions,path:\"sessions\",primary:{cardinality:\"one\",resourceKinds:[]}},session:{ref:x.session,mode:w.sessions,path:\"session\",primary:{cardinality:\"one\",resourceKinds:[\"session\",\"session-draft\"]}},workspaces:{ref:x.workspaces,mode:w.project,path:\"workspaces\",primary:{cardinality:\"one\",resourceKinds:[]}},workspace:{ref:x.workspace,mode:w.project,path:\"workspace\",primary:{cardinality:\"many\",resourceKinds:[\"workspace\"]}}},me={projectSession:p(\"placement\",\"project-session\")},Te={projectSession:{ref:me.projectSession,mode:w.project,cardinality:\"many\",resourceKinds:[\"session\",\"session-draft\"]}},Me={projectSettings:p(\"settings-panel\",\"project.settings\"),statusBarLeading:p(\"status-bar-item\",\"status-bar.leading\"),statusBarTrailing:p(\"status-bar-item\",\"status-bar.trailing\")};var F=(e)=>({...e,kind:\"command\"}),Le=Object.assign(F,{forExtension:(e)=>(t)=>F({extensionId:`${e.publisher}.${e.name}`,id:t})}),ge=(e)=>({...e,kind:\"event\"}),T=(e,t)=>({id:e,kind:t.kind,label:t.label,description:t.description,metadata:t.metadata}),d=(e)=>ge({extensionId:\"pstdio\",id:e}),k=(e,t)=>T(`${e.id}.${t}`,{kind:\"menu\"}),Oe={sidenav:T(\"project.sidenav\",{kind:\"panel\"}),headerPrimary:k(S.project,\"headerPrimary\"),headerOverflow:k(S.project,\"headerOverflow\"),settingsPanels:T(\"project.settingsPanels\",{kind:\"settings\"})},_e={headerPrimary:k(S.session,\"headerPrimary\"),headerOverflow:k(S.session,\"headerOverflow\")},$e={headerPrimary:k(S.workspace,\"headerPrimary\"),headerOverflow:k(S.workspace,\"headerOverflow\"),sidenav:T(\"workspace.sidenav\",{kind:\"panel\"})},Ne={opened:d(\"project.opened\")},He={boardViewsChanged:d(\"view.board-views.changed\"),resourceAnchorsChanged:d(\"view.resource-anchors.changed\"),sessionsChanged:d(\"view.sessions.changed\"),workspacesChanged:d(\"view.workspaces.changed\"),repositoriesChanged:d(\"view.repositories.changed\")},Ue={started:d(\"session.started\"),resumed:d(\"session.resumed\"),awaitingInput:d(\"session.awaitingInput\"),succeeded:d(\"session.succeeded\"),failed:d(\"session.failed\"),completed:d(\"session.completed\")},De={created:d(\"workspace.created\"),provision:d(\"workspace.provision\"),ready:d(\"workspace.ready\"),archived:d(\"workspace.archived\"),deleted:d(\"workspace.deleted\")},Ke={removed:d(\"worktree.removed\")},We={committed:d(\"git.committed\"),rebased:d(\"git.rebased\"),merged:d(\"git.merged\"),conflicted:d(\"git.conflicted\")};var ye=[\"clipboard.write\",\"commands.execute\",\"commands.stream\",\"navigation.open\",\"placement.close\",\"notification.show\",\"notification.action\",\"notification.resolve\",\"notification.dismiss\",\"preferences.get\",\"preferences.set\",\"extension.settings.all\",\"extension.settings.get\",\"extension.settings.set\",\"extension.settings.delete\",\"terminal.session\",\"files.upload\",\"files.list\",\"files.delete\"],he=[\"artifacts.read\"],we=[\"host.dispatchKeyboardEvent\"],Ve=[...ye.filter((e)=>e!==\"clipboard.write\"),...he,...we];var c=(e)=>(t)=>({...t,ref:{kind:e,id:t.id}}),Be=c(\"view\"),ze=c(\"view-menu\"),Ge=c(\"placement\"),Je=c(\"resource-kind\");var qe=c(\"navigation-item\"),Fe=c(\"navigation-tree\"),Ye=c(\"mode\");var Qe=c(\"status-bar-item\"),Xe=c(\"status\"),Ze=c(\"settings-panel\"),et=c(\"activity-item\"),tt=c(\"settings-section\"),nt=c(\"command-palette-resource\"),rt=c(\"keybinding\"),st=c(\"schedule\"),ot=c(\"artifact-mount\"),it=c(\"template-type\"),at=c(\"template\"),ct=c(\"skill\"),dt=c(\"theme\"),lt=c(\"file-icon-theme\"),ft=c(\"workspace-type\"),ut=c(\"harness\"),pt=c(\"connection\");var Y=(e,t,n)=>({call:async(r,...i)=>{try{return await e({method:r,params:i[0]})}catch(s){if(s instanceof Error)throw s;throw Error(j(s).message)}},onEvent:t,extensionId:n}),Q=(e)=>{let t=e,n=new Set;return{get:()=>t,subscribe:(r)=>(n.add(r),()=>n.delete(r)),set:(r)=>{t=r;for(let i of n)i(t)}}};var X=\"pstdio-extension-mount\",ve=()=>{let e=new Map;return{get length(){return e.size},clear:()=>e.clear(),getItem:(t)=>e.get(t)??null,key:(t)=>Array.from(e.keys())[t]??null,removeItem:(t)=>e.delete(t),setItem:(t,n)=>e.set(t,n)}},Ee=()=>{for(let e of[\"localStorage\",\"sessionStorage\"])try{window[e]}catch{Object.defineProperty(window,e,{configurable:!0,value:ve()})}},Z=(e,t)=>{let n=document.documentElement,r=e===\"dark\"?\"light\":\"dark\";n.classList.remove(r),n.classList.add(e),n.setAttribute(\"data-theme\",e),n.style.colorScheme=e;for(let[i,s]of Object.entries(t))if(i.startsWith(\"--\"))n.style.setProperty(i,s)},be=(e)=>{for(let t of e){let n=document.createElement(\"link\");n.rel=\"stylesheet\",n.href=t,document.head.appendChild(n)}},Se=()=>{let e=document.getElementById(X);if(!e)e=document.createElement(\"div\"),e.id=X,e.style.height=\"100%\",e.style.width=\"100%\",document.body.appendChild(e);return e},ke=()=>{window.addEventListener(\"message\",(e)=>{let t=e.data?.action;if(typeof t!==\"string\"||!t.startsWith(\"RIMLESS/\"))return;if(e.source!==window.parent)e.stopImmediatePropagation()},{capture:!0})},Ie=(e)=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLElement&&e.isContentEditable,Pe=async()=>{Ee(),ke();let e=Q(void 0),t=new Map,n=(o,l)=>{let a=t.get(o)??new Set;return a.add(l),t.set(o,a),()=>{a.delete(l)}},r,i=!1,s=await J.connect({init:async(o)=>{try{Z(o.theme,o.themeVariables),be(o.styles),e.set(o.props);let l=Se(),a=await import(o.moduleUrl),m=a.default??(a.mount?a:void 0);if(!m?.mount)throw Error(\"Extension module does not export a default view (defineExtensionView).\");let g=Y((f)=>s.remote.call(f),n,o.extensionId),y=await m.mount(l,g,e);if(r=typeof y===\"function\"?y:void 0,!i)i=!0,document.addEventListener(\"keydown\",(f)=>{if(!f.ctrlKey&&!f.metaKey&&!f.altKey)return;if(Ie(f.target)&&!f.shiftKey)return;s.remote.call({method:\"host.dispatchKeyboardEvent\",params:{key:f.key,code:f.code,ctrlKey:f.ctrlKey,metaKey:f.metaKey,altKey:f.altKey,shiftKey:f.shiftKey,repeat:f.repeat}}).catch(()=>{})},!0)}catch(l){let a=j(l);throw s.remote.runtimeError(a),l instanceof Error?l:Error(a.message)}},themeUpdate:(o)=>{Z(o.theme,o.variables)},propsUpdate:(o)=>{e.set(o.props)},hostEvent:(o)=>{for(let l of t.get(o.scope)??[])l(o.payload)}});s.remote.ready({}),window.addEventListener(\"beforeunload\",()=>{r?.()})};Pe();\n";
31
31
  //#endregion
32
32
  export { o as getExtensionRuntimeScript, i as renderExtensionRuntimeHtml, a as renderInlineExtensionRuntimeHtml };
33
33
 
@@ -635,51 +635,104 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
635
635
  "resource",
636
636
  e,
637
637
  "context"
638
- ], Ke = {
638
+ ], H = (e) => Array.isArray(e) ? e.map(H) : e && typeof e == "object" ? Object.fromEntries(Object.entries(e).sort(([e], [t]) => e.localeCompare(t)).map(([e, t]) => [e, H(t)])) : e, Ke = (e) => {
639
+ if (e.kind === "command" && e.args && typeof e.args == "object" && !Array.isArray(e.args) && Object.keys(e.args).length === 0) {
640
+ let { args: t, ...n } = e;
641
+ return JSON.stringify(H(n));
642
+ }
643
+ return JSON.stringify(H(e));
644
+ }, U = /* @__PURE__ */ new WeakMap(), qe = (e, t) => {
645
+ U.set(e, t);
646
+ }, Je = (e, t) => {
647
+ let n = U.get(e);
648
+ return t && n?.registryToken !== t ? void 0 : n;
649
+ }, Ye = {
639
650
  project: "folder-root",
640
651
  workspace: "computer",
641
652
  worktree: "git-pull-request-draft",
642
653
  settings: "settings",
643
654
  kanbanRenderer: "table-properties"
644
- }, H = (e) => "viewId" in e && e.type === "view", U = "resource_hierarchy_cycle", W = (e) => [...e].sort((e, t) => t.priority - e.priority || e.id.localeCompare(t.id)), qe = (t, n, r) => {
645
- let i = W(t), a = [n], o = /* @__PURE__ */ new Set([`resource:${e(n)}`]), s = n;
655
+ }, W = (t, n) => {
656
+ let r = t;
657
+ for (let i of n.values()) e(i.resource) === e(t) && (r = "removed" in i.change ? void 0 : {
658
+ ...t,
659
+ label: i.change.label
660
+ });
661
+ return r;
662
+ }, Xe = () => {
663
+ let t = u({
664
+ name: "workbench.resource-preview",
665
+ initialState: { changes: /* @__PURE__ */ new Map() }
666
+ }), n = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), a = (e) => {
667
+ let n = new Map(t.getState().changes);
668
+ n.delete(e), t.setState({ changes: n });
669
+ };
670
+ return {
671
+ store: t,
672
+ resolve(e) {
673
+ return W(e, t.getState().changes);
674
+ },
675
+ persist(t, r) {
676
+ let i = e(t), a = (n.get(i) ?? Promise.resolve()).catch(() => void 0).then(r);
677
+ return n.set(i, a), a.finally(() => {
678
+ n.get(i) === a && n.delete(i);
679
+ }).catch(() => void 0), a;
680
+ },
681
+ subscribeRefresh(e) {
682
+ return i.add(e), r(() => i.delete(e));
683
+ },
684
+ begin(e, n) {
685
+ let r = Symbol("resource mutation");
686
+ return t.setState({ changes: new Map([...t.getState().changes, [r, {
687
+ resource: e,
688
+ change: n
689
+ }]]) }), {
690
+ rollback: () => a(r),
691
+ async commit() {
692
+ await Promise.allSettled([...i].map((t) => t(e))), a(r);
693
+ }
694
+ };
695
+ }
696
+ };
697
+ }, G = (e) => "viewId" in e && e.type === "view", K = "resource_hierarchy_cycle", q = (e) => [...e].sort((e, t) => t.priority - e.priority || e.id.localeCompare(t.id)), Ze = (t, n, r) => {
698
+ let i = q(t), a = [n], o = /* @__PURE__ */ new Set([`resource:${e(n)}`]), s = n;
646
699
  for (;;) {
647
700
  let t = i.find((e) => e.canResolve(s))?.getParent(s);
648
701
  if (!t) break;
649
- let n = H(t) ? `view:${t.viewId}` : `resource:${e(t)}`;
702
+ let n = G(t) ? `view:${t.viewId}` : `resource:${e(t)}`;
650
703
  if (o.has(n)) {
651
704
  r({
652
- code: U,
705
+ code: K,
653
706
  path: [...a],
654
- repeatedUri: H(t) ? n : e(t)
707
+ repeatedUri: G(t) ? n : e(t)
655
708
  });
656
709
  break;
657
710
  }
658
- if (a.unshift(t), o.add(n), H(t)) break;
711
+ if (a.unshift(t), o.add(n), G(t)) break;
659
712
  s = t;
660
713
  }
661
714
  return a;
662
- }, G = "workbench.resource.type", K = "workbench.resource.extensionId", q = "workbench.resource.id", J = (e) => `workbench.resource.metadata.${e}`, Y = "workbench.selectionResourceKey", Je = (e) => typeof e == "string" || typeof e == "number" || typeof e == "boolean", X = (e) => {
715
+ }, J = "workbench.resource.type", Y = "workbench.resource.extensionId", X = "workbench.resource.id", Z = (e) => `workbench.resource.metadata.${e}`, Q = "workbench.selectionResourceKey", Qe = (e) => typeof e == "string" || typeof e == "number" || typeof e == "boolean", $ = (e) => {
663
716
  if (!e) return {};
664
717
  let t = {
665
- [G]: e.type,
666
- [q]: e.id,
667
- [K]: e.extensionId
718
+ [J]: e.type,
719
+ [X]: e.id,
720
+ [Y]: e.extensionId
668
721
  };
669
- for (let [n, r] of Object.entries(e.metadata ?? {})) Je(r) && (t[J(n)] = r);
722
+ for (let [n, r] of Object.entries(e.metadata ?? {})) Qe(r) && (t[Z(n)] = r);
670
723
  return t;
671
- }, Ye = (e) => e === "workbench.resource.type" || e === "workbench.resource.extensionId" || e === "workbench.resource.id" || e.startsWith(J("")), Xe = (e, t) => {
724
+ }, $e = (e) => e === "workbench.resource.type" || e === "workbench.resource.extensionId" || e === "workbench.resource.id" || e.startsWith(Z("")), et = (e, t) => {
672
725
  let n = {};
673
- for (let [t, r] of Object.entries(e)) Ye(t) || (n[t] = r);
726
+ for (let [t, r] of Object.entries(e)) $e(t) || (n[t] = r);
674
727
  return {
675
728
  ...n,
676
- ...X(t)
729
+ ...$(t)
677
730
  };
678
- }, Ze = (t) => ({ [Y]: e(t) }), Qe = (t) => {
731
+ }, tt = (t) => ({ [Q]: e(t) }), nt = (t) => {
679
732
  if (!t) return [];
680
- let n = t.metadata?.[Y];
733
+ let n = t.metadata?.[Q];
681
734
  return typeof n != "string" || n === e(t) ? [e(t)] : [e(t), n];
682
- }, $e = (e = {}) => {
735
+ }, rt = (e = {}) => {
683
736
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), i = u({
684
737
  name: "workbench.resources",
685
738
  initialState: {
@@ -690,6 +743,7 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
690
743
  });
691
744
  return {
692
745
  store: i,
746
+ preview: Xe(),
693
747
  removed(n) {
694
748
  e.remove?.(n, [...t].flatMap((e) => e(n)));
695
749
  },
@@ -776,13 +830,13 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
776
830
  });
777
831
  },
778
832
  listHierarchyProviders() {
779
- return W(Object.values(i.getState().hierarchyProviders));
833
+ return q(Object.values(i.getState().hierarchyProviders));
780
834
  },
781
835
  walkHierarchy(t) {
782
- return t ? qe(Object.values(i.getState().hierarchyProviders), t, (e) => {
836
+ return t ? Ze(Object.values(i.getState().hierarchyProviders), t, (e) => {
783
837
  for (let t of n) t(e);
784
838
  }).map((t) => {
785
- if (!H(t)) return t;
839
+ if (!G(t)) return t;
786
840
  let n = e.resolveView?.(t.viewId);
787
841
  return n ? {
788
842
  ...t,
@@ -797,7 +851,7 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
797
851
  });
798
852
  }
799
853
  };
800
- }, et = (e, t = "view") => JSON.stringify([t, e.placementIdentity ? M(e.placementIdentity) : e.instanceId]), tt = async (e, t) => {
854
+ }, it = (e, t = "view") => JSON.stringify([t, e.placementIdentity ? M(e.placementIdentity) : e.instanceId]), at = async (e, t) => {
801
855
  let n = new AbortController(), r = () => n.abort(t?.reason);
802
856
  t?.aborted ? r() : t?.addEventListener("abort", r, { once: !0 });
803
857
  let i;
@@ -817,16 +871,16 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
817
871
  } finally {
818
872
  t?.removeEventListener("abort", r);
819
873
  }
820
- }, nt = (e) => e.replace(/^['"]|['"]$/g, ""), rt = (e, t) => {
874
+ }, ot = (e) => e.replace(/^['"]|['"]$/g, ""), st = (e, t) => {
821
875
  let n = t.trim();
822
876
  if (n.length === 0) return !0;
823
877
  let r = n.match(/^([A-Za-z0-9_.-]+)\s*(==|!=)\s*(.+)$/);
824
878
  if (r) {
825
- let [, t, n, i] = r, a = e[t ?? ""], o = nt(i ?? "");
879
+ let [, t, n, i] = r, a = e[t ?? ""], o = ot(i ?? "");
826
880
  return n === "==" ? String(a) === o : String(a) !== o;
827
881
  }
828
882
  return n.startsWith("!") ? !e[n.slice(1)] : !!e[n];
829
- }, Z = (e, t) => !t || t.split("||").some((t) => t.split("&&").every((t) => rt(e, t))), it = () => {
883
+ }, ct = (e, t) => !t || t.split("||").some((t) => t.split("&&").every((t) => st(e, t))), lt = () => {
830
884
  let e = u({
831
885
  name: "workbench.context",
832
886
  initialState: { values: {} }
@@ -890,29 +944,29 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
890
944
  return { ...e.getState().values };
891
945
  },
892
946
  matches(t) {
893
- return Z(e.getState().values, t);
947
+ return ct(e.getState().values, t);
894
948
  }
895
949
  };
896
- }, Q = (e, t, n) => {
950
+ }, ut = (e, t, n) => {
897
951
  e.notifications.show({
898
952
  level: "error",
899
953
  title: `${t} failed`,
900
954
  message: n instanceof Error ? n.message : String(n)
901
955
  });
902
- }, at = async (e, t, n) => {
956
+ }, dt = async (e, t, n) => {
903
957
  try {
904
958
  await n();
905
959
  } catch (n) {
906
- Q(e, t, n);
960
+ ut(e, t, n);
907
961
  }
908
- }, $ = /* @__PURE__ */ new WeakMap(), ot = (e, t) => {
909
- $.set(e, t);
910
- }, st = (e) => {
911
- let t = $.get(e);
962
+ }, ft = /* @__PURE__ */ new WeakMap(), pt = (e, t) => {
963
+ ft.set(e, t);
964
+ }, mt = (e) => {
965
+ let t = ft.get(e);
912
966
  if (!t) throw Error("Workbench renderers are not initialized");
913
967
  return t;
914
968
  };
915
969
  //#endregion
916
- export { x as $, Re as A, xe as B, V as C, r as Ct, Be as D, Ve as E, je as F, ve as G, E as H, M as I, C as J, be as K, Ne as L, z as M, Fe as N, Ue as O, F as P, he as Q, k as R, B as S, i as St, He as T, Ee as U, Se as V, we as W, pe as X, S as Y, fe as Z, G as _, f as _t, it as a, m as at, U as b, c as bt, et as c, h as ct, Ze as d, oe as dt, ge as et, Qe as f, ue as ft, K as g, ee as gt, J as h, ne as ht, at as i, re as it, ze as j, We as k, $e as l, y as lt, q as m, p as mt, ot as n, ce as nt, Z as o, ie as ot, Xe as p, v as pt, ye as q, Q as r, ae as rt, tt as s, b as st, st as t, le as tt, X as u, se as ut, Y as v, d as vt, Ge as w, Ke as x, s as xt, H as y, u as yt, Te as z };
970
+ export { S as $, Ve as A, M as B, Je as C, u as Ct, V as D, r as Dt, B as E, i as Et, ze as F, Se as G, k as H, z as I, we as J, E as K, Fe as L, Ue as M, We as N, Ge as O, Re as P, C as Q, F as R, Ye as S, d as St, Ke as T, s as Tt, Te as U, Ne as V, xe as W, be as X, ve as Y, ye as Z, J as _, v as _t, lt as a, le as at, K as b, ee as bt, it as c, re as ct, tt as d, b as dt, pe as et, nt as f, h as ft, Y as g, ue as gt, Z as h, oe as ht, dt as i, ge as it, Be as j, He as k, rt as l, m as lt, X as m, se as mt, pt as n, he as nt, ct as o, ce as ot, et as p, y as pt, Ee as q, ut as r, x as rt, at as s, ae as st, mt as t, fe as tt, $ as u, ie as ut, Q as v, p as vt, qe as w, c as wt, W as x, f as xt, G as y, ne as yt, je as z };
917
971
 
918
- //# sourceMappingURL=workbench-renderers-CUHzLWMx.js.map
972
+ //# sourceMappingURL=workbench-renderers-BGXfLY9a.js.map