@pstdio/workbench 0.41.0 → 0.43.0-nightly.20261011183426

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 { Ct as PreferenceRegistry, Dt as PreferenceValue, Fi as CommandParamDescriptor, Fr as TreeAction, Gt as KeybindingSequence, I as WorkbenchModuleContribution, Ii as CommandParamOption, Jr as MenuPath, K as ThemePreferenceOption$1, Kr as WorkbenchPanelRenderInput, Li as CommandParamSchema, M as WorkbenchCore, N as WorkbenchCoreContributionContext, Ni as Command, Qr as WorkbenchFocusRegionId, Qt as WorkbenchTerminalController, St as PreferencePropertySchema, Tt as PreferenceScope, Xr as RegisteredMenuItem, Z as WorkbenchStatusRegistry, bi as WorkbenchRegion$1, ei as RegisteredPlaceholderContribution, er as RegisteredDataTableRendererContribution, ga as WorkbenchStore, ha as Disposable, hi as WorkbenchWidgetPlacement, ii as WorkbenchPanelInstance, qi as ResourceRef$1, ti as RegisteredWidgetContribution, zi as WorkbenchCommandExecutionContext } from "./index-dbYXNnIr.js";
2
+ import { a as ReactResourceContextAction, i as ReactKanbanRendererContribution, n as ReactAttributesSource, r as ReactBoardColumnConfig, t as ReactAttributeDescriptor } from "./kanban-presentation-DnZgAsZo.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
@@ -50,6 +51,10 @@ interface CommandParamFieldProps {
50
51
  context?: WorkbenchCommandExecutionContext;
51
52
  disabled: boolean;
52
53
  onChange: (value: CommandParamValue) => void;
54
+ /** Updates a compound field using its latest stored value. */
55
+ onUpdateValue?: (update: (current: CommandParamValue) => CommandParamValue) => void;
56
+ /** Reports host field validation to the containing command form. */
57
+ onValidationChange?: (error: string | undefined) => void;
53
58
  }
54
59
  type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;
55
60
  export declare const CommandParamField: (props: Omit<CommandParamFieldProps, "context">) => import("react/jsx-runtime").JSX.Element;
@@ -57,7 +62,7 @@ export declare const CommandParamField: (props: Omit<CommandParamFieldProps, "co
57
62
  //#region src/react/command-palette/command-params-dialog.d.ts
58
63
  interface CommandParamsRequest {
59
64
  record: {
60
- command: Pick<Command, "id" | "label" | "description" | "params">;
65
+ command: Pick<Command, "id" | "label" | "description" | "params" | "resourceMutation">;
61
66
  };
62
67
  action?: RegisteredMenuItem;
63
68
  label: string;
@@ -83,7 +88,7 @@ export declare const commandParamName: (entry: CommandParamEntry) => string;
83
88
  export declare const readCommandParamValue: (value: ParamValue, entry?: CommandParamEntry) => CommandParamValue;
84
89
  //#endregion
85
90
  //#region src/react/command-palette/use-command-options.d.ts
86
- export declare const useCommandOptions: (schema: CommandParamSchema, values: Record<string, CommandParamValue>, execute: ExecuteOptionCommand | undefined, onChange: (key: string, value: CommandParamValue) => void) => {
91
+ export declare const useCommandOptions: (schema: CommandParamSchema, values: Record<string, CommandParamValue>, execute: ExecuteOptionCommand | undefined, onChange: (key: string, value: CommandParamValue) => void, resolved?: Record<string, unknown>) => {
87
92
  states: Record<string, CommandOptionState>;
88
93
  validate: (next: {
89
94
  [x: string]: CommandParamValue;
@@ -151,13 +156,13 @@ interface WorkbenchMenuItem {
151
156
  readOnly?: true;
152
157
  }
153
158
  interface WorkbenchMenuItemContext {
154
- resource?: ResourceRef | undefined;
159
+ resource?: ResourceRef$1 | undefined;
155
160
  }
156
161
  export declare const listWorkbenchMenuItems: (workbench: WorkbenchCore, menuPath: MenuPath, context?: WorkbenchMenuItemContext) => WorkbenchMenuItem[];
157
162
  //#endregion
158
163
  //#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[];
164
+ export declare const createWorkbenchResourceActions: (workbench: WorkbenchCoreContributionContext, resource: ResourceRef$1) => ResourceContextAction[];
165
+ export declare const useWorkbenchResourceActionResolver: (workbench: WorkbenchCoreContributionContext) => (resource: ResourceRef$1) => ResourceContextAction[];
161
166
  //#endregion
162
167
  //#region src/react/notifications/notification-host.d.ts
163
168
  interface WorkbenchNotificationHostProps {
@@ -249,7 +254,7 @@ interface WorkbenchTreeViewProps {
249
254
  workbench: WorkbenchCore;
250
255
  treeViewId: string;
251
256
  activeNodeId?: string | null;
252
- resource?: ResourceRef;
257
+ resource?: ResourceRef$1;
253
258
  viewId?: string;
254
259
  renderParamField?: CommandParamFieldRenderer;
255
260
  onOpenResourceError?: (error: unknown) => void;
@@ -264,6 +269,42 @@ interface WorkbenchConnectionProviderProps {
264
269
  }
265
270
  export declare const WorkbenchConnectionProvider: (props: WorkbenchConnectionProviderProps) => import("react/jsx-runtime").JSX.Element;
266
271
  //#endregion
272
+ //#region src/react/resource-links/resource-links-types.d.ts
273
+ interface ResourceLinkCandidate {
274
+ resource: ResourceRef;
275
+ description?: string;
276
+ open?: () => void | Promise<void>;
277
+ }
278
+ interface ResourceLinksService {
279
+ list(input: ResourceAnchorQuery): Promise<ResourceAnchorPage>;
280
+ add(source: ResourceRef, targets: ResourceAnchor[]): Promise<void>;
281
+ remove(source: ResourceRef, targets: ResourceRef[]): Promise<void>;
282
+ search(query: string, signal?: AbortSignal): Promise<ResourceLinkCandidate[]>;
283
+ resolve(resources: ResourceRef[], signal?: AbortSignal): Promise<ResourceLinkCandidate[]>;
284
+ subscribe(listener: () => void): () => void;
285
+ }
286
+ //#endregion
287
+ //#region src/react/resource-links/related-resources.d.ts
288
+ interface RelatedResourcesProps {
289
+ resource: ResourceRef;
290
+ service: ResourceLinksService;
291
+ onClose(): void;
292
+ }
293
+ export declare const RelatedResources: (props: RelatedResourcesProps) => import("react/jsx-runtime").JSX.Element;
294
+ //#endregion
295
+ //#region src/react/resource-links/resource-links-module.d.ts
296
+ interface WorkbenchResourceLinksOptions {
297
+ canonicalize(resource: ResourceRef): ResourceRef | undefined;
298
+ createService(resource: ResourceRef): ResourceLinksService;
299
+ }
300
+ export declare const resourceLinksCommandId = "workbench.resources.links";
301
+ export declare const createWorkbenchResourceLinksModule: (options: WorkbenchResourceLinksOptions) => {
302
+ id: string;
303
+ activate(ctx: WorkbenchCoreContributionContext): {
304
+ dispose: () => void;
305
+ };
306
+ };
307
+ //#endregion
267
308
  //#region src/react/settings/settings-resources.d.ts
268
309
  export declare const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = "workbench.settings.open";
269
310
  //#endregion
@@ -321,7 +362,7 @@ export declare const WORKBENCH_TERMINAL_PANEL_SIZE: {
321
362
  minPx: number;
322
363
  };
323
364
  interface OpenWorkbenchTerminalOptions {
324
- resource?: ResourceRef;
365
+ resource?: ResourceRef$1;
325
366
  reveal?: boolean;
326
367
  }
327
368
  export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalOptions) => WorkbenchPanelInstance;
@@ -338,7 +379,7 @@ export declare const createWorkbenchTerminalModule: () => WorkbenchModuleContrib
338
379
  //#region src/react/terminal/workbench-terminal-panel.d.ts
339
380
  interface ControllerTerminalBridgeOptions {
340
381
  getBindingId?: () => string | undefined;
341
- getResource?: () => ResourceRef | undefined;
382
+ getResource?: () => ResourceRef$1 | undefined;
342
383
  getTitle?: () => string | undefined;
343
384
  }
344
385
  export declare const createControllerTerminalBridge: (terminal: WorkbenchTerminalController, options?: ControllerTerminalBridgeOptions) => TerminalBridge;
@@ -434,5 +475,5 @@ export declare const disposeWorkbenchModuleHostRegistrations: (registrations: Ma
434
475
  export declare const syncWorkbenchModuleHostRegistrations: (workbench: WorkbenchCore, registrations: Map<string, WorkbenchModuleHostRegistration>, modules: readonly WorkbenchModuleContribution[]) => void;
435
476
  export declare const WorkbenchModuleHost: (props: WorkbenchModuleHostProps) => null;
436
477
  //#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 };
478
+ 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
479
  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-vsxj0hQ2.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 { $r as LayoutPersistenceAdapter, B as WorkbenchPersistenceAdapter, Ur as TreeRendererPersistenceAdapter, fn as WorkbenchPanelMenuStatePersistenceAdapter, it as WorkbenchStatusBarPersistenceAdapter, vn as WorkbenchPageLocationPersistence } from "./index-dbYXNnIr.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 re(){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 re()}function z(){return M()===\"worker\"}function B(){let e=M();return e===\"node\"||e===\"bun\"}function se(){return window.self!==window.top}function oe(e){let t={};return function n(r,a=\"\"){Object.keys(r).forEach((s)=>{let o=a?`${a}.${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 ie(e){return!e||e===\"null\"?\"*\":e}function ae(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),a=e;for(let s=0;s<r.length;s++){let o=r[s];s===r.length-1?a[o]=n:((!a[o]||typeof a[o]!=\"object\")&&(a[o]=typeof r[s+1]==\"number\"?[]:{}),a=a[o])}return e}function ce(e=10){let t=\"\";for(let n=0;n<e;n++)t+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(Math.random()*62));return t}var V=M(),x=null;if(V===\"node\"||V===\"bun\")try{let e=globalThis.require;x=e?.(\"node:worker_threads\")?.parentPort??null}catch{}function de(){if(B())return x;if(z())return self;if(se())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(B()&&e===x){e.postMessage(t,{transfer:r});return}if(z()){e.postMessage(t,{transfer:r});return}if(e.postMessage){e.postMessage(t,{targetOrigin:ie(n),transfer:r});return}throw Error(\"Rimless Error: Invalid target for postMessage\")}function G(e){return x!==null&&e===x}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 E=function(e){return e.MESSAGE=\"message\",e}({}),g=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}({}),v=Symbol();function le(e={},t,n,r,a){let s=[];for(let[o,i]of Object.entries(e)){async function c(p){let{action:m,callID:h,connectionID:R,callName:I,args:w=[]}=_(p);if(m!==g.RPC_REQUEST||!h||!I||I!==o||R!==t)return;let f={action:g.RPC_RESOLVE,callID:h,callName:I,connectionID:R,error:null,result:null},C;try{f.result=await i(...w,a),f.result?.[v]&&(C=f.result[v]??[],delete f.result[v])}catch(k){f.action=g.RPC_REJECT,f.error=JSON.parse(JSON.stringify(k,Object.getOwnPropertyNames(k)))}A(r,f,p?.origin,C)}L(n,E.MESSAGE,c),s.push(()=>O(n,E.MESSAGE,c))}return()=>s.forEach((o)=>o())}function fe(e,t,n,r=new Set,a,s){return(...o)=>new Promise((i,c)=>{let p=ce();function m(){O(a,E.MESSAGE,h),r.delete(m)}function h(w){let{callID:f,connectionID:C,callName:k,result:te,error:ne,action:W}=_(w);if(!(!f||!k)&&k===e&&f===p&&C===t){if(W===g.RPC_RESOLVE)return m(),i(te);if(W===g.RPC_REJECT)return m(),c(ne)}}let R={action:g.RPC_REQUEST,args:o,callID:p,callName:e,connectionID:t},I=o.reduce((w,f)=>f[v]?.length?w.concat(f[v]):w,o[v]??[]);L(a,E.MESSAGE,h),r.add(m),A(s,R,n?.origin,I)})}function ue(e={},t=[],n,r,a,s){let o={...e},i=new Set;for(let c of t)ae(o,c,fe(c,n,r,i,a,s));return{remote:o,unregisterRemote:()=>i.forEach((c)=>c())}}function pe(e={},t){return new Promise(async(n)=>{let r=oe(e),a=de(),s=self||window;async function o(i){let c=_(i);if(c?.action!==g.HANDSHAKE_REPLY)return;let{remote:p,unregisterRemote:m}=ue(c.schema,c.methodNames,c.connectionID,i,s,a),h=le(r,c.connectionID,s,a,p);return await t?.onConnectionSetup?.(p),A(a,{action:g.HANDSHAKE_REPLY,connectionID:c.connectionID},i?.origin),n({remote:p,close:()=>{O(s,E.MESSAGE,o),m(),h()},id:c.connectionID})}L(s,E.MESSAGE,o),A(a,{action:g.HANDSHAKE_REQUEST,methodNames:Object.keys(r),schema:e})})}var J={connect:pe};var me=(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\"}},T=(e)=>{if(e instanceof Error)return{message:e.message,stack:e.stack};if(typeof e===\"string\")return{message:e};if(me(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*)\",Ae=new RegExp(`^\\\\^(${N}\\\\.${N}\\\\.${N})$`);var H=[\"sidenav\",\"main\",\"secondary\",\"side\"];var u=(e,t)=>({extensionId:\"pstdio\",kind:e,id:t}),y={project:u(\"mode\",\"project\"),sessions:u(\"mode\",\"sessions\"),settings:u(\"mode\",\"settings\")},Te={project:{ref:y.project,regions:H},sessions:{ref:y.sessions,regions:H},settings:{ref:y.settings,regions:H}},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)},b={project:K.project.ref,session:K.session.ref,workspace:K.workspace.ref},P={start:u(\"page\",\"start\"),sessions:u(\"page\",\"sessions\"),session:u(\"page\",\"session\"),workspaces:u(\"page\",\"workspaces\"),workspace:u(\"page\",\"workspace\")},je={start:{ref:P.start,mode:y.project,path:\"\",primary:{cardinality:\"one\",resourceKinds:[]}},sessions:{ref:P.sessions,mode:y.sessions,path:\"sessions\",primary:{cardinality:\"one\",resourceKinds:[]}},session:{ref:P.session,mode:y.sessions,path:\"session\",primary:{cardinality:\"one\",resourceKinds:[\"session\",\"session-draft\"]}},workspaces:{ref:P.workspaces,mode:y.project,path:\"workspaces\",primary:{cardinality:\"one\",resourceKinds:[]}},workspace:{ref:P.workspace,mode:y.project,path:\"workspace\",primary:{cardinality:\"many\",resourceKinds:[\"workspace\"]}}},ge={projectSession:u(\"placement\",\"project-session\")},Me={projectSession:{ref:ge.projectSession,mode:y.project,cardinality:\"many\",resourceKinds:[\"session\",\"session-draft\"]}},Le={projectSettings:u(\"settings-panel\",\"project.settings\"),statusBarLeading:u(\"status-bar-item\",\"status-bar.leading\"),statusBarTrailing:u(\"status-bar-item\",\"status-bar.trailing\")};var F=(e)=>({...e,kind:\"command\"}),Oe=Object.assign(F,{forExtension:(e)=>(t)=>F({extensionId:`${e.publisher}.${e.name}`,id:t})}),ye=(e)=>({...e,kind:\"event\"}),j=(e,t)=>({id:e,kind:t.kind,label:t.label,description:t.description,metadata:t.metadata}),l=(e)=>ye({extensionId:\"pstdio\",id:e}),S=(e,t)=>j(`${e.id}.${t}`,{kind:\"menu\"}),$e={sidenav:j(\"project.sidenav\",{kind:\"panel\"}),headerPrimary:S(b.project,\"headerPrimary\"),headerOverflow:S(b.project,\"headerOverflow\"),settingsPanels:j(\"project.settingsPanels\",{kind:\"settings\"})},_e={headerPrimary:S(b.session,\"headerPrimary\"),headerOverflow:S(b.session,\"headerOverflow\")},Ne={headerPrimary:S(b.workspace,\"headerPrimary\"),headerOverflow:S(b.workspace,\"headerOverflow\"),sidenav:j(\"workspace.sidenav\",{kind:\"panel\"})},He={opened:l(\"project.opened\")},Ue={boardViewsChanged:l(\"view.board-views.changed\"),resourceAnchorsChanged:l(\"view.resource-anchors.changed\"),sessionsChanged:l(\"view.sessions.changed\"),workspacesChanged:l(\"view.workspaces.changed\"),repositoriesChanged:l(\"view.repositories.changed\")},De={started:l(\"session.started\"),resumed:l(\"session.resumed\"),awaitingInput:l(\"session.awaitingInput\"),succeeded:l(\"session.succeeded\"),failed:l(\"session.failed\"),completed:l(\"session.completed\")},Ke={created:l(\"workspace.created\"),provision:l(\"workspace.provision\"),ready:l(\"workspace.ready\"),archived:l(\"workspace.archived\"),deleted:l(\"workspace.deleted\")},We={removed:l(\"worktree.removed\")},Ve={committed:l(\"git.committed\"),rebased:l(\"git.rebased\"),merged:l(\"git.merged\"),conflicted:l(\"git.conflicted\")};var he=[\"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\"],we=[\"artifacts.read\"],ve=[\"host.dispatchKeyboardEvent\"],ze=[...he.filter((e)=>e!==\"clipboard.write\"),...we,...ve];var d=(e)=>(t)=>({...t,ref:{kind:e,id:t.id}}),Be=d(\"view\"),Ge=d(\"view-menu\"),Je=d(\"placement\"),qe=d(\"resource-kind\");var Fe=d(\"navigation-item\"),Ye=d(\"navigation-tree\"),Qe=d(\"mode\");var Xe=d(\"status-bar-item\"),Ze=d(\"status\"),et=d(\"settings-panel\"),tt=d(\"activity-item\"),nt=d(\"settings-section\"),rt=d(\"command-palette-resource\"),st=d(\"keybinding\"),ot=d(\"schedule\"),it=d(\"artifact-mount\"),at=d(\"template-type\"),ct=d(\"template\"),dt=d(\"skill\"),lt=d(\"theme\"),ft=d(\"file-icon-theme\"),ut=d(\"workspace-type\"),pt=d(\"harness\"),mt=d(\"connection\");var Y=(e,t,n)=>({call:async(r,...a)=>{try{return await e({method:r,params:a[0]})}catch(s){if(s instanceof Error)throw s;throw Error(T(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 a of n)a(t)}}};var X=(e)=>{let t,n,r=!1;return{initialize:(a)=>{if(r)return Promise.resolve();return t??=e(a).then((s)=>{if(typeof s!==\"function\")return;if(r)s();else n=s}),t},dispose:()=>{r=!0,n?.(),n=void 0}}};var Z=\"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)}},be=()=>{for(let e of[\"localStorage\",\"sessionStorage\"])try{window[e]}catch{Object.defineProperty(window,e,{configurable:!0,value:Ee()})}},ee=(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[a,s]of Object.entries(t))if(a.startsWith(\"--\"))n.style.setProperty(a,s)},Se=(e)=>{for(let t of e){let n=document.createElement(\"link\");n.rel=\"stylesheet\",n.href=t,document.head.appendChild(n)}},Ie=()=>{let e=document.getElementById(Z);if(!e)e=document.createElement(\"div\"),e.id=Z,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})},xe=(e)=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLElement&&e.isContentEditable,Pe=async()=>{be(),ke();let e=Q(void 0),t=new Map,n=(o,i)=>{let c=t.get(o)??new Set;return c.add(i),t.set(o,c),()=>{c.delete(i)}},r=X(async(o)=>{Se(o.styles);let i=await import(o.moduleUrl),c=i.default??(i.mount?i:void 0);if(!c?.mount)throw Error(\"Extension module does not export a default view (defineExtensionView).\");let p=Y((m)=>s.remote.call(m),n,o.extensionId);return await c.mount(Ie(),p,e)}),a=!1,s=await J.connect({init:async(o)=>{try{if(ee(o.theme,o.themeVariables),e.set(o.props),await r.initialize(o),!a)a=!0,document.addEventListener(\"keydown\",(i)=>{if(!i.ctrlKey&&!i.metaKey&&!i.altKey)return;if(xe(i.target)&&!i.shiftKey)return;s.remote.call({method:\"host.dispatchKeyboardEvent\",params:{key:i.key,code:i.code,ctrlKey:i.ctrlKey,metaKey:i.metaKey,altKey:i.altKey,shiftKey:i.shiftKey,repeat:i.repeat}}).catch(()=>{})},!0)}catch(i){let c=T(i);throw s.remote.runtimeError(c),i instanceof Error?i:Error(c.message)}},themeUpdate:(o)=>{ee(o.theme,o.variables)},propsUpdate:(o)=>{e.set(o.props)},hostEvent:(o)=>{for(let i of t.get(o.scope)??[])i(o.payload)}});s.remote.ready({}),window.addEventListener(\"beforeunload\",()=>{r.dispose()})};Pe();\n";
31
31
  //#endregion
32
32
  export { o as getExtensionRuntimeScript, i as renderExtensionRuntimeHtml, a as renderInlineExtensionRuntimeHtml };
33
33
 
@@ -630,56 +630,113 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
630
630
  "regionTabs",
631
631
  e,
632
632
  "add"
633
- ], He = ["workbench", "commandPalette"], Ue = B("nav"), We = V("nav"), Ge = (e) => [
633
+ ], He = ["workbench", "commandPalette"], Ue = B("nav"), We = V("nav"), Ge = [
634
+ "workbench",
635
+ "breadcrumb",
636
+ "location"
637
+ ], Ke = (e) => [
634
638
  "workbench",
635
639
  "resource",
636
640
  e,
637
641
  "context"
638
- ], Ke = {
642
+ ], 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, qe = (e) => {
643
+ if (e.kind === "command" && e.args && typeof e.args == "object" && !Array.isArray(e.args) && Object.keys(e.args).length === 0) {
644
+ let { args: t, ...n } = e;
645
+ return JSON.stringify(H(n));
646
+ }
647
+ return JSON.stringify(H(e));
648
+ }, U = /* @__PURE__ */ new WeakMap(), Je = (e, t) => {
649
+ U.set(e, t);
650
+ }, Ye = (e, t) => {
651
+ let n = U.get(e);
652
+ return t && n?.registryToken !== t ? void 0 : n;
653
+ }, Xe = {
639
654
  project: "folder-root",
640
655
  workspace: "computer",
641
656
  worktree: "git-pull-request-draft",
642
657
  settings: "settings",
643
658
  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;
659
+ }, W = (t, n) => {
660
+ let r = t;
661
+ for (let i of n.values()) e(i.resource) === e(t) && (r = "removed" in i.change ? void 0 : {
662
+ ...t,
663
+ label: i.change.label
664
+ });
665
+ return r;
666
+ }, Ze = () => {
667
+ let t = u({
668
+ name: "workbench.resource-preview",
669
+ initialState: { changes: /* @__PURE__ */ new Map() }
670
+ }), n = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), a = (e) => {
671
+ let n = new Map(t.getState().changes);
672
+ n.delete(e), t.setState({ changes: n });
673
+ };
674
+ return {
675
+ store: t,
676
+ resolve(e) {
677
+ return W(e, t.getState().changes);
678
+ },
679
+ persist(t, r) {
680
+ let i = e(t), a = (n.get(i) ?? Promise.resolve()).catch(() => void 0).then(r);
681
+ return n.set(i, a), a.finally(() => {
682
+ n.get(i) === a && n.delete(i);
683
+ }).catch(() => void 0), a;
684
+ },
685
+ subscribeRefresh(e) {
686
+ return i.add(e), r(() => i.delete(e));
687
+ },
688
+ begin(e, n) {
689
+ let r = Symbol("resource mutation");
690
+ return t.setState({ changes: new Map([...t.getState().changes, [r, {
691
+ resource: e,
692
+ change: n
693
+ }]]) }), {
694
+ rollback: () => a(r),
695
+ async commit() {
696
+ await Promise.allSettled([...i].map((t) => t(e))), a(r);
697
+ }
698
+ };
699
+ }
700
+ };
701
+ }, 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)), Qe = (t, n, r) => {
702
+ let i = q(t), a = [n], o = /* @__PURE__ */ new Set([`resource:${e(n)}`]), s = n;
646
703
  for (;;) {
647
704
  let t = i.find((e) => e.canResolve(s))?.getParent(s);
648
705
  if (!t) break;
649
- let n = H(t) ? `view:${t.viewId}` : `resource:${e(t)}`;
706
+ let n = G(t) ? `view:${t.viewId}` : `resource:${e(t)}`;
650
707
  if (o.has(n)) {
651
708
  r({
652
- code: U,
709
+ code: K,
653
710
  path: [...a],
654
- repeatedUri: H(t) ? n : e(t)
711
+ repeatedUri: G(t) ? n : e(t)
655
712
  });
656
713
  break;
657
714
  }
658
- if (a.unshift(t), o.add(n), H(t)) break;
715
+ if (a.unshift(t), o.add(n), G(t)) break;
659
716
  s = t;
660
717
  }
661
718
  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) => {
719
+ }, J = "workbench.resource.type", Y = "workbench.resource.extensionId", X = "workbench.resource.id", Z = (e) => `workbench.resource.metadata.${e}`, Q = "workbench.selectionResourceKey", $e = (e) => typeof e == "string" || typeof e == "number" || typeof e == "boolean", $ = (e) => {
663
720
  if (!e) return {};
664
721
  let t = {
665
- [G]: e.type,
666
- [q]: e.id,
667
- [K]: e.extensionId
722
+ [J]: e.type,
723
+ [X]: e.id,
724
+ [Y]: e.extensionId
668
725
  };
669
- for (let [n, r] of Object.entries(e.metadata ?? {})) Je(r) && (t[J(n)] = r);
726
+ for (let [n, r] of Object.entries(e.metadata ?? {})) $e(r) && (t[Z(n)] = r);
670
727
  return t;
671
- }, Ye = (e) => e === "workbench.resource.type" || e === "workbench.resource.extensionId" || e === "workbench.resource.id" || e.startsWith(J("")), Xe = (e, t) => {
728
+ }, et = (e) => e === "workbench.resource.type" || e === "workbench.resource.extensionId" || e === "workbench.resource.id" || e.startsWith(Z("")), tt = (e, t) => {
672
729
  let n = {};
673
- for (let [t, r] of Object.entries(e)) Ye(t) || (n[t] = r);
730
+ for (let [t, r] of Object.entries(e)) et(t) || (n[t] = r);
674
731
  return {
675
732
  ...n,
676
- ...X(t)
733
+ ...$(t)
677
734
  };
678
- }, Ze = (t) => ({ [Y]: e(t) }), Qe = (t) => {
735
+ }, nt = (t) => ({ [Q]: e(t) }), rt = (t) => {
679
736
  if (!t) return [];
680
- let n = t.metadata?.[Y];
737
+ let n = t.metadata?.[Q];
681
738
  return typeof n != "string" || n === e(t) ? [e(t)] : [e(t), n];
682
- }, $e = (e = {}) => {
739
+ }, it = (e = {}) => {
683
740
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), i = u({
684
741
  name: "workbench.resources",
685
742
  initialState: {
@@ -690,6 +747,7 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
690
747
  });
691
748
  return {
692
749
  store: i,
750
+ preview: Ze(),
693
751
  removed(n) {
694
752
  e.remove?.(n, [...t].flatMap((e) => e(n)));
695
753
  },
@@ -776,13 +834,13 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
776
834
  });
777
835
  },
778
836
  listHierarchyProviders() {
779
- return W(Object.values(i.getState().hierarchyProviders));
837
+ return q(Object.values(i.getState().hierarchyProviders));
780
838
  },
781
839
  walkHierarchy(t) {
782
- return t ? qe(Object.values(i.getState().hierarchyProviders), t, (e) => {
840
+ return t ? Qe(Object.values(i.getState().hierarchyProviders), t, (e) => {
783
841
  for (let t of n) t(e);
784
842
  }).map((t) => {
785
- if (!H(t)) return t;
843
+ if (!G(t)) return t;
786
844
  let n = e.resolveView?.(t.viewId);
787
845
  return n ? {
788
846
  ...t,
@@ -797,7 +855,7 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
797
855
  });
798
856
  }
799
857
  };
800
- }, et = (e, t = "view") => JSON.stringify([t, e.placementIdentity ? M(e.placementIdentity) : e.instanceId]), tt = async (e, t) => {
858
+ }, at = (e, t = "view") => JSON.stringify([t, e.placementIdentity ? M(e.placementIdentity) : e.instanceId]), ot = async (e, t) => {
801
859
  let n = new AbortController(), r = () => n.abort(t?.reason);
802
860
  t?.aborted ? r() : t?.addEventListener("abort", r, { once: !0 });
803
861
  let i;
@@ -817,16 +875,16 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
817
875
  } finally {
818
876
  t?.removeEventListener("abort", r);
819
877
  }
820
- }, nt = (e) => e.replace(/^['"]|['"]$/g, ""), rt = (e, t) => {
878
+ }, st = (e) => e.replace(/^['"]|['"]$/g, ""), ct = (e, t) => {
821
879
  let n = t.trim();
822
880
  if (n.length === 0) return !0;
823
881
  let r = n.match(/^([A-Za-z0-9_.-]+)\s*(==|!=)\s*(.+)$/);
824
882
  if (r) {
825
- let [, t, n, i] = r, a = e[t ?? ""], o = nt(i ?? "");
883
+ let [, t, n, i] = r, a = e[t ?? ""], o = st(i ?? "");
826
884
  return n === "==" ? String(a) === o : String(a) !== o;
827
885
  }
828
886
  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 = () => {
887
+ }, lt = (e, t) => !t || t.split("||").some((t) => t.split("&&").every((t) => ct(e, t))), ut = () => {
830
888
  let e = u({
831
889
  name: "workbench.context",
832
890
  initialState: { values: {} }
@@ -890,29 +948,29 @@ var a = 0, o = /* @__PURE__ */ new Map(), s = (e, t) => {
890
948
  return { ...e.getState().values };
891
949
  },
892
950
  matches(t) {
893
- return Z(e.getState().values, t);
951
+ return lt(e.getState().values, t);
894
952
  }
895
953
  };
896
- }, Q = (e, t, n) => {
954
+ }, dt = (e, t, n) => {
897
955
  e.notifications.show({
898
956
  level: "error",
899
957
  title: `${t} failed`,
900
958
  message: n instanceof Error ? n.message : String(n)
901
959
  });
902
- }, at = async (e, t, n) => {
960
+ }, ft = async (e, t, n) => {
903
961
  try {
904
962
  await n();
905
963
  } catch (n) {
906
- Q(e, t, n);
964
+ dt(e, t, n);
907
965
  }
908
- }, $ = /* @__PURE__ */ new WeakMap(), ot = (e, t) => {
909
- $.set(e, t);
910
- }, st = (e) => {
911
- let t = $.get(e);
966
+ }, pt = /* @__PURE__ */ new WeakMap(), mt = (e, t) => {
967
+ pt.set(e, t);
968
+ }, ht = (e) => {
969
+ let t = pt.get(e);
912
970
  if (!t) throw Error("Workbench renderers are not initialized");
913
971
  return t;
914
972
  };
915
973
  //#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 };
974
+ export { C as $, He as A, je as B, Ye as C, d as Ct, V as D, i as Dt, B as E, s as Et, Re as F, xe as G, Ne as H, ze as I, Ee as J, Se as K, z as L, Be as M, Ue as N, Ke as O, r as Ot, We as P, ye as Q, Fe as R, Xe as S, f as St, qe as T, c as Tt, k as U, M as V, Te as W, ve as X, we as Y, be as Z, J as _, ue as _t, ut as a, ge as at, K as b, ne as bt, at as c, ae as ct, nt as d, ie as dt, S as et, rt as f, b as ft, Y as g, oe as gt, Z as h, se as ht, ft as i, x as it, Ve as j, Ge as k, it as l, re as lt, X as m, y as mt, mt as n, fe as nt, lt as o, le as ot, tt as p, h as pt, E as q, dt as r, he as rt, ot as s, ce as st, ht as t, pe as tt, $ as u, m as ut, Q as v, v as vt, Je as w, u as wt, W as x, ee as xt, G as y, p as yt, F as z };
917
975
 
918
- //# sourceMappingURL=workbench-renderers-CUHzLWMx.js.map
976
+ //# sourceMappingURL=workbench-renderers-Bj4sazP5.js.map