@pstdio/workbench 0.7.1 → 0.8.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/storage.d.ts CHANGED
@@ -93,7 +93,7 @@ declare interface PersistedTreeRendererStates {
93
93
  }
94
94
 
95
95
  declare interface PersistedWorkbenchHistory extends Omit<HistoryStoreState, "hydrating"> {
96
- version: 1;
96
+ version: 1 | 2;
97
97
  }
98
98
 
99
99
  declare interface PersistedWorkbenchPanels {
@@ -165,6 +165,7 @@ declare interface WorkbenchLayout_2 {
165
165
  declare interface WorkbenchLocationRef {
166
166
  key: string;
167
167
  modeId?: string;
168
+ viewId?: string;
168
169
  resource?: ResourceRef;
169
170
  contributionId?: string;
170
171
  instanceKey?: string;
@@ -176,9 +177,10 @@ declare interface WorkbenchNavigationEntry {
176
177
  recordedAt: number;
177
178
  location: WorkbenchLocationRef;
178
179
  selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
179
- kind: "resource" | "widget" | "mode";
180
+ kind: "resource" | "view" | "widget" | "mode";
180
181
  modeId?: string;
181
182
  resource?: ResourceRef;
183
+ viewId?: string;
182
184
  widgetId?: string;
183
185
  contributionId?: string;
184
186
  title?: string;
@@ -265,6 +267,7 @@ declare type WorkbenchTabRetention_2 = "preview" | "persistent";
265
267
  declare interface WorkbenchWidgetPlacement {
266
268
  widgetId: string;
267
269
  contributionId: string;
270
+ viewId?: string;
268
271
  ownerId?: string;
269
272
  source?: ContributionSource;
270
273
  resource?: ResourceRef;
@@ -283,6 +286,7 @@ declare interface WorkbenchWidgetPlacement {
283
286
  declare interface WorkbenchWidgetPlacement_2 {
284
287
  widgetId: string;
285
288
  contributionId: string;
289
+ viewId?: string;
286
290
  ownerId?: string;
287
291
  source?: ContributionSource_2;
288
292
  resource?: ResourceRef_2;
package/dist/testing.d.ts CHANGED
@@ -151,6 +151,7 @@ declare interface CommandParamDescriptor {
151
151
  accept?: string;
152
152
  multiple?: boolean;
153
153
  metadata?: Record<string, unknown>;
154
+ resolvedFrom?: "resource";
154
155
  }
155
156
 
156
157
  declare interface CommandParamOption {
@@ -557,6 +558,7 @@ declare interface HistoryController {
557
558
  restore(): HistoryEntry | undefined;
558
559
  flush(): void;
559
560
  clear(): void;
561
+ migrateState(transform: (state: HistoryStoreState) => HistoryStoreState): void;
560
562
  }
561
563
 
562
564
  declare type HistoryEntry = WorkbenchNavigationEntry;
@@ -890,7 +892,12 @@ declare interface NavigationTargetCompound {
890
892
  targets: readonly NavigationTargetItem[];
891
893
  }
892
894
 
893
- declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
895
+ declare interface NavigationTargetHref {
896
+ kind: "href";
897
+ href: string;
898
+ }
899
+
900
+ declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetPanel | NavigationTargetCommand | NavigationTargetHref;
894
901
 
895
902
  declare interface NavigationTargetPanel {
896
903
  kind: "panel";
@@ -904,6 +911,12 @@ declare interface NavigationTargetResource {
904
911
  input?: OpenResourceInput;
905
912
  }
906
913
 
914
+ declare interface NavigationTargetView {
915
+ kind: "view";
916
+ viewId: string;
917
+ input?: OpenWorkbenchViewInput;
918
+ }
919
+
907
920
  declare const NO_GROUPING = "none";
908
921
 
909
922
  declare interface NotificationRegistry {
@@ -920,7 +933,8 @@ declare interface OpenResourceInput {
920
933
  }
921
934
 
922
935
  declare interface OpenWidgetInput {
923
- resource?: ResourceRef;
936
+ viewId?: string | null;
937
+ resource?: ResourceRef | null;
924
938
  title?: string;
925
939
  region?: WorkbenchRegion;
926
940
  role?: WorkbenchWidgetRole;
@@ -938,7 +952,10 @@ declare interface OpenWidgetInput {
938
952
  }
939
953
 
940
954
  declare interface OpenWorkbenchPanelInput {
941
- resource?: ResourceRef;
955
+ /** Set by the view registry. Low-level layout callers should leave this undefined. */
956
+ viewId?: string | null;
957
+ /** `null` explicitly clears an existing singleton placement's resource binding. */
958
+ resource?: ResourceRef | null;
942
959
  title?: string;
943
960
  region?: WorkbenchRegion;
944
961
  role?: WorkbenchWidgetRole;
@@ -950,6 +967,8 @@ declare interface OpenWorkbenchPanelInput {
950
967
  strategy?: WorkbenchPanelOpenStrategy;
951
968
  }
952
969
 
970
+ declare type OpenWorkbenchViewInput = Omit<OpenWorkbenchPanelInput, "viewId">;
971
+
953
972
  declare interface PlaceholderContribution {
954
973
  id: string;
955
974
  title: string;
@@ -1070,6 +1089,10 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
1070
1089
  metadata?: Record<string, unknown>;
1071
1090
  }
1072
1091
 
1092
+ declare type RegisteredWorkbenchStatusSet = WorkbenchStatusSetContribution & RegisteredContributionMetadata;
1093
+
1094
+ declare type RegisteredWorkbenchView = WorkbenchViewContribution & RegisteredContributionMetadata;
1095
+
1073
1096
  declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1074
1097
 
1075
1098
  declare type ResolvedResourcePresenter = Omit<ResourcePresenter, "priority"> & {
@@ -1098,7 +1121,7 @@ declare interface ResourceContextAction {
1098
1121
 
1099
1122
  declare interface ResourceHierarchyCycle {
1100
1123
  code: typeof resourceHierarchyCycleCode;
1101
- path: ResourceRef[];
1124
+ path: WorkbenchHierarchyNode[];
1102
1125
  repeatedUri: string;
1103
1126
  }
1104
1127
 
@@ -1108,7 +1131,7 @@ declare interface ResourceHierarchyProvider {
1108
1131
  id: string;
1109
1132
  priority?: number;
1110
1133
  canResolve(resource: ResourceRef): boolean;
1111
- getParent(resource: ResourceRef): ResourceRef | undefined;
1134
+ getParent(resource: ResourceRef): WorkbenchHierarchyNode | undefined;
1112
1135
  }
1113
1136
 
1114
1137
  declare interface ResourceKindContribution {
@@ -1176,7 +1199,7 @@ declare interface ResourceRegistry {
1176
1199
  listResources(query: string): readonly ResourceBrowseEntry[];
1177
1200
  registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1178
1201
  listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1179
- walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1202
+ walkHierarchy(resource: ResourceRef | undefined): WorkbenchHierarchyNode[];
1180
1203
  onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
1181
1204
  isOpeningResource(): boolean;
1182
1205
  openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
@@ -1598,6 +1621,7 @@ declare interface WorkbenchCompositionRegionPanels {
1598
1621
 
1599
1622
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1600
1623
  host: WorkbenchHost;
1624
+ layout: WorkbenchLayoutModel;
1601
1625
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1602
1626
  unregisterModule(moduleId: string): void;
1603
1627
  }
@@ -1613,7 +1637,7 @@ declare interface WorkbenchCoreContributionContext {
1613
1637
  history: HistoryController;
1614
1638
  keybindings: KeybindingRegistry;
1615
1639
  lastResource: WorkbenchLastResourceController;
1616
- layout: WorkbenchLayoutModel;
1640
+ layout: WorkbenchModuleLayoutModel;
1617
1641
  modes: WorkbenchModeRegistry;
1618
1642
  navigation: NavigationRegistry;
1619
1643
  navigator: WorkbenchNavigator;
@@ -1622,7 +1646,10 @@ declare interface WorkbenchCoreContributionContext {
1622
1646
  preferences: PreferenceRegistry;
1623
1647
  renderers: WorkbenchRenderers;
1624
1648
  resources: ResourceRegistry;
1649
+ views: WorkbenchViewRegistry;
1625
1650
  settings: SettingsRegistry;
1651
+ statusBar: WorkbenchStatusBarRegistry;
1652
+ statuses: WorkbenchStatusRegistry;
1626
1653
  shell: WorkbenchShellController;
1627
1654
  sidePanel: WorkbenchSidePanelController;
1628
1655
  terminal: WorkbenchTerminalController;
@@ -1658,6 +1685,8 @@ declare interface WorkbenchFocusState {
1658
1685
  activeRegion: WorkbenchFocusRegionId | undefined;
1659
1686
  }
1660
1687
 
1688
+ declare type WorkbenchHierarchyNode = ResourceRef | WorkbenchViewHierarchyNode;
1689
+
1661
1690
  declare interface WorkbenchHost {
1662
1691
  getSnapshot(): WorkbenchSnapshot;
1663
1692
  restoreSnapshot(snapshot: WorkbenchSnapshot): void;
@@ -1696,11 +1725,16 @@ declare interface WorkbenchLocationEligibility {
1696
1725
  resourceKinds?: string[];
1697
1726
  resourceIds?: string[];
1698
1727
  canOpen?(resource: ResourceRef): boolean;
1728
+ canOpenLocation?(location: {
1729
+ resource?: ResourceRef;
1730
+ viewId?: string;
1731
+ }): boolean;
1699
1732
  }
1700
1733
 
1701
1734
  declare interface WorkbenchLocationRef {
1702
1735
  key: string;
1703
1736
  modeId?: string;
1737
+ viewId?: string;
1704
1738
  resource?: ResourceRef;
1705
1739
  contributionId?: string;
1706
1740
  instanceKey?: string;
@@ -1771,6 +1805,8 @@ declare interface WorkbenchModuleContribution {
1771
1805
 
1772
1806
  declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1773
1807
 
1808
+ declare type WorkbenchModuleLayoutModel = Omit<WorkbenchLayoutModel, "registerWidget">;
1809
+
1774
1810
  declare interface WorkbenchNavigationCommit {
1775
1811
  modeId: string | undefined;
1776
1812
  resource: ResourceRef | undefined;
@@ -1784,9 +1820,10 @@ declare interface WorkbenchNavigationEntry {
1784
1820
  recordedAt: number;
1785
1821
  location: WorkbenchLocationRef;
1786
1822
  selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1787
- kind: "resource" | "widget" | "mode";
1823
+ kind: "resource" | "view" | "widget" | "mode";
1788
1824
  modeId?: string;
1789
1825
  resource?: ResourceRef;
1826
+ viewId?: string;
1790
1827
  widgetId?: string;
1791
1828
  contributionId?: string;
1792
1829
  title?: string;
@@ -1905,6 +1942,7 @@ declare interface WorkbenchPanelContribution {
1905
1942
  declare interface WorkbenchPanelInstance {
1906
1943
  instanceId: string;
1907
1944
  panelId: string;
1945
+ viewId?: string;
1908
1946
  ownerId?: string;
1909
1947
  source?: ContributionSource;
1910
1948
  resource?: ResourceRef;
@@ -1922,6 +1960,7 @@ declare interface WorkbenchPanelInstance {
1922
1960
  declare interface WorkbenchPanelInstance_2 {
1923
1961
  instanceId: string;
1924
1962
  panelId: string;
1963
+ viewId?: string;
1925
1964
  ownerId?: string;
1926
1965
  source?: ContributionSource_2;
1927
1966
  resource?: ResourceRef_2;
@@ -2126,6 +2165,52 @@ declare interface WorkbenchSnapshot {
2126
2165
  layout: WorkbenchLayout;
2127
2166
  }
2128
2167
 
2168
+ declare interface WorkbenchStatusBarItem {
2169
+ id: string;
2170
+ viewId: string;
2171
+ slot: WorkbenchStatusBarSlot;
2172
+ order?: number;
2173
+ isVisible?(): boolean;
2174
+ }
2175
+
2176
+ declare interface WorkbenchStatusBarRegistry {
2177
+ store: WorkbenchStore<WorkbenchStatusBarRegistryState>;
2178
+ registerItem(item: WorkbenchStatusBarItem): Disposable_2;
2179
+ getItem(id: string): WorkbenchStatusBarItem | undefined;
2180
+ listItems(): WorkbenchStatusBarItem[];
2181
+ listVisibleItems(slot?: WorkbenchStatusBarSlot): WorkbenchStatusBarItem[];
2182
+ }
2183
+
2184
+ declare interface WorkbenchStatusBarRegistryState {
2185
+ items: Record<string, WorkbenchStatusBarItem>;
2186
+ }
2187
+
2188
+ declare type WorkbenchStatusBarSlot = "leading" | "trailing";
2189
+
2190
+ declare interface WorkbenchStatusRegistry {
2191
+ store: WorkbenchStore<WorkbenchStatusRegistryState>;
2192
+ registerStatusSet(contribution: WorkbenchStatusSetContribution, metadata?: ContributionMetadata): Disposable_2;
2193
+ getStatusSet(id: string): RegisteredWorkbenchStatusSet | undefined;
2194
+ listStatusSets(): RegisteredWorkbenchStatusSet[];
2195
+ getStatuses(id: string): readonly WorkflowStatus[] | undefined;
2196
+ load(id: string): Promise<readonly WorkflowStatus[]>;
2197
+ query(id: string): Promise<readonly WorkflowStatus[]>;
2198
+ save(id: string, statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]>;
2199
+ }
2200
+
2201
+ declare interface WorkbenchStatusRegistryState {
2202
+ statusSets: Record<string, RegisteredWorkbenchStatusSet>;
2203
+ values: Record<string, readonly WorkflowStatus[]>;
2204
+ }
2205
+
2206
+ declare interface WorkbenchStatusSetContribution {
2207
+ id: string;
2208
+ title: string;
2209
+ actions?: readonly WorkflowStatusAction[];
2210
+ query(): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2211
+ save?(statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2212
+ }
2213
+
2129
2214
  declare interface WorkbenchStore<TState> {
2130
2215
  getState(): TState;
2131
2216
  getInitialState(): TState;
@@ -2170,6 +2255,7 @@ declare interface WorkbenchTerminalController {
2170
2255
  setSessionOpener(opener: WorkbenchTerminalSessionOpener | null): void;
2171
2256
  /** Opens a session; the live adapter stays host-side and only the id is returned. */
2172
2257
  open(input: {
2258
+ bindingId?: string;
2173
2259
  request: WorkbenchTerminalSessionRequest;
2174
2260
  title?: string;
2175
2261
  }): Promise<{
@@ -2188,6 +2274,7 @@ declare interface WorkbenchTerminalController {
2188
2274
  sessionId: string;
2189
2275
  signal?: string;
2190
2276
  }): Promise<void>;
2277
+ killBinding(bindingId: string): Promise<void>;
2191
2278
  subscribe(sessionId: string, sink: WorkbenchTerminalSessionSink): () => void;
2192
2279
  getSession(sessionId: string): WorkbenchTerminalSessionModel | undefined;
2193
2280
  listSessions(): WorkbenchTerminalSessionModel[];
@@ -2249,9 +2336,58 @@ declare interface WorkbenchThemeStoreState {
2249
2336
  themes: readonly ThemePreferenceOption[];
2250
2337
  }
2251
2338
 
2339
+ declare interface WorkbenchViewContribution {
2340
+ id: string;
2341
+ panelId: string;
2342
+ title?: string;
2343
+ icon?: string;
2344
+ path?: string;
2345
+ pathAliases?: readonly string[];
2346
+ aliases?: readonly string[];
2347
+ resource?: ResourceRef;
2348
+ canResolve?(): boolean;
2349
+ resolveInput?(input: OpenWorkbenchViewInput): OpenWorkbenchPanelInput;
2350
+ }
2351
+
2352
+ declare interface WorkbenchViewHierarchyNode {
2353
+ type: "view";
2354
+ viewId: string;
2355
+ label?: string;
2356
+ icon?: string;
2357
+ }
2358
+
2359
+ declare interface WorkbenchViewOpenEvent {
2360
+ viewId: string;
2361
+ input: OpenWorkbenchViewInput;
2362
+ instance: WorkbenchPanelInstance;
2363
+ }
2364
+
2365
+ declare interface WorkbenchViewRegistry {
2366
+ store: WorkbenchStore<WorkbenchViewRegistryStoreState>;
2367
+ registerView(view: WorkbenchViewContribution, metadata?: ContributionMetadata): Disposable_2;
2368
+ getView(viewId: string): RegisteredWorkbenchView | undefined;
2369
+ listViews(): RegisteredWorkbenchView[];
2370
+ resolveViewId(viewId: string): string | undefined;
2371
+ resolvePath(path: string): {
2372
+ kind: "view";
2373
+ viewId: string;
2374
+ } | undefined;
2375
+ canResolveView(viewId: string): boolean;
2376
+ isOpeningView(): boolean;
2377
+ openView(viewId: string, input?: OpenWorkbenchViewInput): Promise<WorkbenchPanelInstance>;
2378
+ onDidOpenView(listener: (event: WorkbenchViewOpenEvent) => void): Disposable_2;
2379
+ }
2380
+
2381
+ declare interface WorkbenchViewRegistryStoreState {
2382
+ views: Record<string, RegisteredWorkbenchView>;
2383
+ aliases: Record<string, string>;
2384
+ paths: Record<string, string>;
2385
+ }
2386
+
2252
2387
  declare interface WorkbenchWidgetPlacement {
2253
2388
  widgetId: string;
2254
2389
  contributionId: string;
2390
+ viewId?: string;
2255
2391
  ownerId?: string;
2256
2392
  source?: ContributionSource;
2257
2393
  resource?: ResourceRef;
@@ -2281,4 +2417,27 @@ declare interface WorkbenchWidgetTab_2 {
2281
2417
  customMenuRendererId?: string;
2282
2418
  }
2283
2419
 
2420
+ declare interface WorkflowStatus {
2421
+ id: string;
2422
+ label: string;
2423
+ color: string;
2424
+ icon?: string | null;
2425
+ sortOrder: number;
2426
+ isDefault?: boolean;
2427
+ board?: WorkflowStatusBoardRules;
2428
+ }
2429
+
2430
+ declare interface WorkflowStatusAction {
2431
+ id: string;
2432
+ label: string;
2433
+ icon?: string;
2434
+ }
2435
+
2436
+ declare interface WorkflowStatusBoardRules {
2437
+ canCreate?: boolean;
2438
+ canDragIn?: boolean;
2439
+ canDragOut?: boolean;
2440
+ actions?: readonly string[];
2441
+ }
2442
+
2284
2443
  export { }
@@ -1,4 +1,4 @@
1
- const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction u(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return"browser";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts=="function")return"worker";let G=P.process;if(G&&typeof G=="object"){let R=G.versions??{},J=G.release?.name;if(R.bun||J==="bun"||P.Bun!==void 0)return"bun";if(R.node&&J==="node")return"node"}return P.Bun===void 0?"browser":"bun"}function j(){return u()}function b(){return j()==="worker"}function x(){let P=j();return P==="node"||P==="bun"}function d(){return window.self!==window.top}function p(P){let G={};return function R(J,Y=""){Object.keys(J).forEach((X)=>{let Q=Y?`${Y}.${X}`:X;J[X]===Object(J[X])&&R(J[X],Q),typeof J[X]=="function"&&(G[Q]=J[X],delete J[X])})}(P),G}function i(P){return!P||P==="null"?"*":P}function l(P,G,R){if(!P||typeof P!="object")return P;let J=Array.isArray(G)?G:G.split(".").map((X)=>X.match(/^\\d+$/)?Number(X):X),Y=P;for(let X=0;X<J.length;X++){let Q=J[X];X===J.length-1?Y[Q]=R:((!Y[Q]||typeof Y[Q]!="object")&&(Y[Q]=typeof J[X+1]=="number"?[]:{}),Y=Y[Q])}return P}function r(P=10){let G="";for(let R=0;R<P;R++)G+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*62));return G}var E=j(),D=null;if(E==="node"||E==="bun")try{let P=globalThis.require;D=P?.("node:worker_threads")?.parentPort??null}catch{}function s(){if(x())return D;if(b())return self;if(d())return window.parent;throw Error("No valid target found for postMessage")}function V(P,G,R,J){if(!P)throw Error("Rimless Error: No target specified for postMessage");if(x()&&P===D){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error("Rimless Error: Invalid target for postMessage")}function S(P){return D!==null&&P===D}function C(P,G,R){S(P)?P.on(G,R):("addEventListener"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):("removeEventListener"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var T=function(P){return P.MESSAGE="message",P}({}),N=function(P){return P.HANDSHAKE_REQUEST="RIMLESS/HANDSHAKE_REQUEST",P.HANDSHAKE_REPLY="RIMLESS/HANDSHAKE_REPLY",P.RPC_REQUEST="RIMLESS/RPC_REQUEST",P.RPC_RESOLVE="RIMLESS/RPC_RESOLVE",P.RPC_REJECT="RIMLESS/RPC_REJECT",P}({}),L=Symbol();function o(P={},G,R,J,Y){let X=[];for(let[Q,$]of Object.entries(P)){async function Z(W){let{action:O,callID:F,connectionID:z,callName:U,args:A=[]}=w(W);if(O!==N.RPC_REQUEST||!F||!U||U!==Q||z!==G)return;let M={action:N.RPC_RESOLVE,callID:F,callName:U,connectionID:z,error:null,result:null},_;try{M.result=await $(...A,Y),M.result?.[L]&&(_=M.result[L]??[],delete M.result[L])}catch(K){M.action=N.RPC_REJECT,M.error=JSON.parse(JSON.stringify(K,Object.getOwnPropertyNames(K)))}V(J,M,W?.origin,_)}C(R,T.MESSAGE,Z),X.push(()=>H(R,T.MESSAGE,Z))}return()=>X.forEach((Q)=>Q())}function t(P,G,R,J=[],Y,X){return(...Q)=>new Promise(($,Z)=>{let W=r();function O(U){let{callID:A,connectionID:M,callName:_,result:K,error:v,action:I}=w(U);if(!(!A||!_)&&_===P&&A===W&&M===G){if(I===N.RPC_RESOLVE)return $(K);if(I===N.RPC_REJECT)return Z(v)}}let F={action:N.RPC_REQUEST,args:Q,callID:W,callName:P,connectionID:G},z=Q.reduce((U,A)=>A[L]?.length?U.concat(A[L]):U,Q[L]??[]);C(Y,T.MESSAGE,O),J.push(()=>H(Y,T.MESSAGE,O)),V(X,F,R?.origin,z)})}function a(P={},G=[],R,J,Y,X){let Q={...P},$=[];for(let Z of G)l(Q,Z,t(Z,R,J,$,Y,X));return{remote:Q,unregisterRemote:()=>$.forEach((Z)=>Z())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),Y=s(),X=self||window;async function Q($){let Z=w($);if(Z?.action!==N.HANDSHAKE_REPLY)return;let{remote:W,unregisterRemote:O}=a(Z.schema,Z.methodNames,Z.connectionID,$,X,Y),F=o(J,Z.connectionID,X,Y,W);return await G?.onConnectionSetup?.(W),V(Y,{action:N.HANDSHAKE_REPLY,connectionID:Z.connectionID},$?.origin),R({remote:W,close:()=>{H(X,T.MESSAGE,Q),O(),F()},id:Z.connectionID})}C(X,T.MESSAGE,Q),V(Y,{action:N.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P==="object"&&P!==null,k=(P)=>{try{let G=JSON.stringify(P);if(typeof G==="string"&&G.length>0)return G}catch{}try{return String(P)}catch{return"Unknown error"}},y=(P)=>{if(P instanceof Error)return{message:P.message,stack:P.stack};if(typeof P==="string")return{message:P};if(e(P)){let G=typeof P.message==="string"?P.message:null,R=typeof P.stack==="string"?P.stack:void 0;if(G)return R?{message:G,stack:R}:{message:G};return{message:k(P)}}if(P===null||P===void 0)return{message:"Unknown error"};return{message:k(P)}};var B=(P)=>({id:P}),q=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),BP={sidenav:q("project.sidenav",{kind:"panel"}),headerPrimary:q("project.headerPrimary",{kind:"menu"}),headerOverflow:q("project.headerOverflow",{kind:"menu"}),settingsPanels:q("project.settingsPanels",{kind:"settings"})},WP={headerPrimary:q("session.headerPrimary",{kind:"menu"}),headerOverflow:q("session.headerOverflow",{kind:"menu"}),transcriptActions:q("session.transcriptActions",{kind:"menu"})},qP={headerPrimary:q("workspace.headerPrimary",{kind:"menu"}),headerOverflow:q("workspace.headerOverflow",{kind:"menu"}),sidenav:q("workspace.sidenav",{kind:"panel"})},FP={opened:B("project.opened")},MP={started:B("session.started"),resumed:B("session.resumed"),awaitingInput:B("session.awaitingInput"),succeeded:B("session.succeeded"),failed:B("session.failed"),completed:B("session.completed")},NP={created:B("workspace.created"),provision:B("workspace.provision"),ready:B("workspace.ready"),archived:B("workspace.archived"),deleted:B("workspace.deleted")},OP={removed:B("worktree.removed")},UP={committed:B("git.committed"),rebased:B("git.rebased"),merged:B("git.merged"),conflicted:B("git.conflicted")};var PP=["commands.execute","resource.open","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"],GP=["host.dispatchKeyboardEvent"],AP=[...PP,...GP];var c=(P,G,R)=>({call:async(J,Y)=>await P({method:J,params:Y}),onEvent:G,extensionId:R}),g=(P)=>{let G=P,R=new Set;return{get:()=>G,subscribe:(J)=>{return R.add(J),()=>R.delete(J)},set:(J)=>{G=J;for(let Y of R)Y(G)}}};var h="pstdio-extension-mount",RP=()=>{let P=new Map;return{get length(){return P.size},clear:()=>P.clear(),getItem:(G)=>P.get(G)??null,key:(G)=>Array.from(P.keys())[G]??null,removeItem:(G)=>P.delete(G),setItem:(G,R)=>P.set(G,R)}},JP=()=>{for(let P of["localStorage","sessionStorage"])try{window[P]}catch{Object.defineProperty(window,P,{configurable:!0,value:RP()})}},m=(P,G)=>{let R=document.documentElement,J=P==="dark"?"light":"dark";R.classList.remove(J),R.classList.add(P),R.setAttribute("data-theme",P),R.style.colorScheme=P;for(let[Y,X]of Object.entries(G))if(Y.startsWith("--"))R.style.setProperty(Y,X)},QP=(P)=>{for(let G of P){let R=document.createElement("link");R.rel="stylesheet",R.href=G,document.head.appendChild(R)}},XP=()=>{let P=document.getElementById(h);if(!P)P=document.createElement("div"),P.id=h,P.style.height="100%",P.style.width="100%",document.body.appendChild(P);return P},YP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,ZP=async()=>{JP();let P=g(void 0),G=new Map,R=(Q,$)=>{let Z=G.get(Q)??new Set;return Z.add($),G.set(Q,Z),()=>{Z.delete($)}},J,Y=!1,X=await f.connect({init:async(Q)=>{try{m(Q.theme,Q.themeVariables),QP(Q.styles),P.set(Q.props);let $=XP(),Z=await import(Q.moduleUrl),W=Z.default??(Z.mount?Z:void 0);if(!W?.mount)throw Error("Extension module does not export a default view (defineExtensionView).");let O=c((z)=>X.remote.call(z),R,Q.extensionId),F=await W.mount($,O,P);if(J=typeof F==="function"?F:void 0,!Y)Y=!0,document.addEventListener("keydown",(z)=>{if(!z.ctrlKey&&!z.metaKey&&!z.altKey)return;if(YP(z.target)&&!z.shiftKey)return;X.remote.call({method:"host.dispatchKeyboardEvent",params:{key:z.key,code:z.code,ctrlKey:z.ctrlKey,metaKey:z.metaKey,altKey:z.altKey,shiftKey:z.shiftKey,repeat:z.repeat}}).catch(()=>{})},!0)}catch($){let Z=y($);throw X.remote.runtimeError(Z),$ instanceof Error?$:Error(Z.message)}},themeUpdate:(Q)=>{m(Q.theme,Q.variables)},propsUpdate:(Q)=>{P.set(Q.props)},hostEvent:(Q)=>{for(let $ of G.get(Q.scope)??[])$(Q.payload)}});X.remote.ready({}),window.addEventListener("beforeunload",()=>{J?.()})};ZP();\n', t = "pstdio-extension-mount", o = (e) => e.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;"), i = (e) => e.replaceAll("<\/script", "<\\/script").replaceAll("<!--", "<\\!--"), n = (e) => `<!doctype html>
1
+ const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction a(){let G=globalThis;if(G.window!==void 0&&G.document!==void 0)return"browser";if(G.WorkerGlobalScope!==void 0&&G.self!==void 0&&G.self instanceof G.WorkerGlobalScope||G.window===void 0&&G.self!==void 0&&typeof G.importScripts=="function")return"worker";let J=G.process;if(J&&typeof J=="object"){let P=J.versions??{},Q=J.release?.name;if(P.bun||Q==="bun"||G.Bun!==void 0)return"bun";if(P.node&&Q==="node")return"node"}return G.Bun===void 0?"browser":"bun"}function K(){return a()}function h(){return K()==="worker"}function m(){let G=K();return G==="node"||G==="bun"}function t(){return window.self!==window.top}function n(G){let J={};return function P(Q,$=""){Object.keys(Q).forEach((Z)=>{let Y=$?`${$}.${Z}`:Z;Q[Z]===Object(Q[Z])&&P(Q[Z],Y),typeof Q[Z]=="function"&&(J[Y]=Q[Z],delete Q[Z])})}(G),J}function e(G){return!G||G==="null"?"*":G}function GG(G,J,P){if(!G||typeof G!="object")return G;let Q=Array.isArray(J)?J:J.split(".").map((Z)=>Z.match(/^\\d+$/)?Number(Z):Z),$=G;for(let Z=0;Z<Q.length;Z++){let Y=Q[Z];Z===Q.length-1?$[Y]=P:((!$[Y]||typeof $[Y]!="object")&&($[Y]=typeof Q[Z+1]=="number"?[]:{}),$=$[Y])}return G}function JG(G=10){let J="";for(let P=0;P<G;P++)J+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*62));return J}var g=K(),A=null;if(g==="node"||g==="bun")try{let G=globalThis.require;A=G?.("node:worker_threads")?.parentPort??null}catch{}function PG(){if(m())return A;if(h())return self;if(t())return window.parent;throw Error("No valid target found for postMessage")}function x(G,J,P,Q){if(!G)throw Error("Rimless Error: No target specified for postMessage");if(m()&&G===A){G.postMessage(J,{transfer:Q});return}if(h()){G.postMessage(J,{transfer:Q});return}if(G.postMessage){G.postMessage(J,{targetOrigin:e(P),transfer:Q});return}throw Error("Rimless Error: Invalid target for postMessage")}function v(G){return A!==null&&G===A}function w(G,J,P){v(G)?G.on(J,P):("addEventListener"in G)&&G.addEventListener(J,P)}function E(G,J,P){v(G)?G.off(J,P):("removeEventListener"in G)&&G.removeEventListener(J,P)}function b(G){return G.data||G}var V=function(G){return G.MESSAGE="message",G}({}),B=function(G){return G.HANDSHAKE_REQUEST="RIMLESS/HANDSHAKE_REQUEST",G.HANDSHAKE_REPLY="RIMLESS/HANDSHAKE_REPLY",G.RPC_REQUEST="RIMLESS/RPC_REQUEST",G.RPC_RESOLVE="RIMLESS/RPC_RESOLVE",G.RPC_REJECT="RIMLESS/RPC_REJECT",G}({}),T=Symbol();function QG(G={},J,P,Q,$){let Z=[];for(let[Y,q]of Object.entries(G)){async function z(M){let{action:H,callID:O,connectionID:U,callName:W,args:L=[]}=b(M);if(H!==B.RPC_REQUEST||!O||!W||W!==Y||U!==J)return;let N={action:B.RPC_RESOLVE,callID:O,callName:W,connectionID:U,error:null,result:null},_;try{N.result=await q(...L,$),N.result?.[T]&&(_=N.result[T]??[],delete N.result[T])}catch(R){N.action=B.RPC_REJECT,N.error=JSON.parse(JSON.stringify(R,Object.getOwnPropertyNames(R)))}x(Q,N,M?.origin,_)}w(P,V.MESSAGE,z),Z.push(()=>E(P,V.MESSAGE,z))}return()=>Z.forEach((Y)=>Y())}function YG(G,J,P,Q=[],$,Z){return(...Y)=>new Promise((q,z)=>{let M=JG();function H(W){let{callID:L,connectionID:N,callName:_,result:R,error:o,action:f}=b(W);if(!(!L||!_)&&_===G&&L===M&&N===J){if(f===B.RPC_RESOLVE)return q(R);if(f===B.RPC_REJECT)return z(o)}}let O={action:B.RPC_REQUEST,args:Y,callID:M,callName:G,connectionID:J},U=Y.reduce((W,L)=>L[T]?.length?W.concat(L[T]):W,Y[T]??[]);w($,V.MESSAGE,H),Q.push(()=>E($,V.MESSAGE,H)),x(Z,O,P?.origin,U)})}function ZG(G={},J=[],P,Q,$,Z){let Y={...G},q=[];for(let z of J)GG(Y,z,YG(z,P,Q,q,$,Z));return{remote:Y,unregisterRemote:()=>q.forEach((z)=>z())}}function $G(G={},J){return new Promise(async(P)=>{let Q=n(G),$=PG(),Z=self||window;async function Y(q){let z=b(q);if(z?.action!==B.HANDSHAKE_REPLY)return;let{remote:M,unregisterRemote:H}=ZG(z.schema,z.methodNames,z.connectionID,q,Z,$),O=QG(Q,z.connectionID,Z,$,M);return await J?.onConnectionSetup?.(M),x($,{action:B.HANDSHAKE_REPLY,connectionID:z.connectionID},q?.origin),P({remote:M,close:()=>{E(Z,V.MESSAGE,Y),H(),O()},id:z.connectionID})}w(Z,V.MESSAGE,Y),x($,{action:B.HANDSHAKE_REQUEST,methodNames:Object.keys(Q),schema:G})})}var c={connect:$G};var zG=(G)=>typeof G==="object"&&G!==null,p=(G)=>{try{let J=JSON.stringify(G);if(typeof J==="string"&&J.length>0)return J}catch{}try{return String(G)}catch{return"Unknown error"}},u=(G)=>{if(G instanceof Error)return{message:G.message,stack:G.stack};if(typeof G==="string")return{message:G};if(zG(G)){let J=typeof G.message==="string"?G.message:null,P=typeof G.stack==="string"?G.stack:void 0;if(J)return P?{message:J,stack:P}:{message:J};return{message:p(G)}}if(G===null||G===void 0)return{message:"Unknown error"};return{message:p(G)}};var j=(G,J)=>({extensionId:"pstdio",kind:G,id:J}),LG={switchMode:j("command","workbench.action.switchMode")},TG={project:j("mode","project"),settings:j("mode","settings")},y=(G,J,P)=>({id:G,ref:j("resource-kind",G),surface:"primary",label:J,menuSlots:P}),S=[{id:"headerPrimary",placement:"header-primary",access:"public"},{id:"headerOverflow",placement:"header-overflow",access:"public"}],k={project:y("project","Extension",S),session:y("session","Session",S),workspace:y("workspace","Workspace",S)},D={project:k.project.ref,session:k.session.ref,workspace:k.workspace.ref},VG={projectNavigation:j("navigation-item","project.navigation"),projectSettings:j("settings-panel","project.settings"),statusBarLeading:j("status-bar-item","status-bar.leading"),statusBarTrailing:j("status-bar-item","status-bar.trailing")},d=(G)=>({...G,kind:"command"}),DG=Object.assign(d,{forExtension:(G)=>(J)=>d({extensionId:`${G.publisher}.${G.name}`,id:J})}),XG=(G)=>({...G,kind:"event"}),I=(G,J)=>({id:G,kind:J.kind,label:J.label,description:J.description,metadata:J.metadata}),F=(G)=>XG({extensionId:"pstdio",id:G}),C=(G,J)=>I(`${G.id}.${J}`,{kind:"menu"}),CG={sidenav:I("project.sidenav",{kind:"panel"}),headerPrimary:C(D.project,"headerPrimary"),headerOverflow:C(D.project,"headerOverflow"),settingsPanels:I("project.settingsPanels",{kind:"settings"})},_G={headerPrimary:C(D.session,"headerPrimary"),headerOverflow:C(D.session,"headerOverflow")},AG={headerPrimary:C(D.workspace,"headerPrimary"),headerOverflow:C(D.workspace,"headerOverflow"),sidenav:I("workspace.sidenav",{kind:"panel"})},RG={opened:F("project.opened")},xG={started:F("session.started"),resumed:F("session.resumed"),awaitingInput:F("session.awaitingInput"),succeeded:F("session.succeeded"),failed:F("session.failed"),completed:F("session.completed")},IG={created:F("workspace.created"),provision:F("workspace.provision"),ready:F("workspace.ready"),archived:F("workspace.archived"),deleted:F("workspace.deleted")},KG={removed:F("worktree.removed")},wG={committed:F("git.committed"),rebased:F("git.rebased"),merged:F("git.merged"),conflicted:F("git.conflicted")};var qG=["commands.execute","resource.open","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"],UG=["host.dispatchKeyboardEvent"],EG=[...qG,...UG];var X=(G)=>(J)=>({...J,ref:{kind:G,id:J.id}}),bG=X("view"),yG=X("view-menu"),SG=X("placement"),kG=X("resource-kind");var fG=X("resource-view"),gG=X("navigation-item"),hG=X("mode"),mG=X("status-bar-item"),vG=X("status"),cG=X("settings-panel"),pG=X("activity-item"),uG=X("settings-section"),dG=X("command-palette-resource"),lG=X("keybinding"),rG=X("schedule"),sG=X("artifact-mount"),iG=X("template-type"),oG=X("template"),aG=X("skill"),tG=X("theme"),nG=X("file-icon-theme"),eG=X("workspace-type"),GJ=X("harness"),JJ=X("connection");var l=(G,J,P)=>({call:async(Q,$)=>await G({method:Q,params:$}),onEvent:J,extensionId:P}),r=(G)=>{let J=G,P=new Set;return{get:()=>J,subscribe:(Q)=>{return P.add(Q),()=>P.delete(Q)},set:(Q)=>{J=Q;for(let $ of P)$(J)}}};var s="pstdio-extension-mount",FG=()=>{let G=new Map;return{get length(){return G.size},clear:()=>G.clear(),getItem:(J)=>G.get(J)??null,key:(J)=>Array.from(G.keys())[J]??null,removeItem:(J)=>G.delete(J),setItem:(J,P)=>G.set(J,P)}},MG=()=>{for(let G of["localStorage","sessionStorage"])try{window[G]}catch{Object.defineProperty(window,G,{configurable:!0,value:FG()})}},i=(G,J)=>{let P=document.documentElement,Q=G==="dark"?"light":"dark";P.classList.remove(Q),P.classList.add(G),P.setAttribute("data-theme",G),P.style.colorScheme=G;for(let[$,Z]of Object.entries(J))if($.startsWith("--"))P.style.setProperty($,Z)},OG=(G)=>{for(let J of G){let P=document.createElement("link");P.rel="stylesheet",P.href=J,document.head.appendChild(P)}},NG=()=>{let G=document.getElementById(s);if(!G)G=document.createElement("div"),G.id=s,G.style.height="100%",G.style.width="100%",document.body.appendChild(G);return G},BG=(G)=>G instanceof HTMLInputElement||G instanceof HTMLTextAreaElement||G instanceof HTMLSelectElement||G instanceof HTMLElement&&G.isContentEditable,HG=async()=>{MG();let G=r(void 0),J=new Map,P=(Y,q)=>{let z=J.get(Y)??new Set;return z.add(q),J.set(Y,z),()=>{z.delete(q)}},Q,$=!1,Z=await c.connect({init:async(Y)=>{try{i(Y.theme,Y.themeVariables),OG(Y.styles),G.set(Y.props);let q=NG(),z=await import(Y.moduleUrl),M=z.default??(z.mount?z:void 0);if(!M?.mount)throw Error("Extension module does not export a default view (defineExtensionView).");let H=l((U)=>Z.remote.call(U),P,Y.extensionId),O=await M.mount(q,H,G);if(Q=typeof O==="function"?O:void 0,!$)$=!0,document.addEventListener("keydown",(U)=>{if(!U.ctrlKey&&!U.metaKey&&!U.altKey)return;if(BG(U.target)&&!U.shiftKey)return;Z.remote.call({method:"host.dispatchKeyboardEvent",params:{key:U.key,code:U.code,ctrlKey:U.ctrlKey,metaKey:U.metaKey,altKey:U.altKey,shiftKey:U.shiftKey,repeat:U.repeat}}).catch(()=>{})},!0)}catch(q){let z=u(q);throw Z.remote.runtimeError(z),q instanceof Error?q:Error(z.message)}},themeUpdate:(Y)=>{i(Y.theme,Y.variables)},propsUpdate:(Y)=>{G.set(Y.props)},hostEvent:(Y)=>{for(let q of J.get(Y.scope)??[])q(Y.payload)}});Z.remote.ready({}),window.addEventListener("beforeunload",()=>{Q?.()})};HG();\n', t = "pstdio-extension-mount", o = (e) => e.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;"), i = (e) => e.replaceAll("<\/script", "<\\/script").replaceAll("<!--", "<\\!--"), n = (e) => `<!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
@@ -1 +1 @@
1
- {"version":3,"file":"webview-runtime.js","sources":["../../pstdio-extensions/src/bridge/webview-runtime/runtime.bundle.js?raw","../../pstdio-extensions/src/bridge/webview-runtime/runtime-html.ts","../src/webview-runtime/index.ts"],"sourcesContent":["export default \"// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\\nfunction u(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return\\\"browser\\\";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts==\\\"function\\\")return\\\"worker\\\";let G=P.process;if(G&&typeof G==\\\"object\\\"){let R=G.versions??{},J=G.release?.name;if(R.bun||J===\\\"bun\\\"||P.Bun!==void 0)return\\\"bun\\\";if(R.node&&J===\\\"node\\\")return\\\"node\\\"}return P.Bun===void 0?\\\"browser\\\":\\\"bun\\\"}function j(){return u()}function b(){return j()===\\\"worker\\\"}function x(){let P=j();return P===\\\"node\\\"||P===\\\"bun\\\"}function d(){return window.self!==window.top}function p(P){let G={};return function R(J,Y=\\\"\\\"){Object.keys(J).forEach((X)=>{let Q=Y?`${Y}.${X}`:X;J[X]===Object(J[X])&&R(J[X],Q),typeof J[X]==\\\"function\\\"&&(G[Q]=J[X],delete J[X])})}(P),G}function i(P){return!P||P===\\\"null\\\"?\\\"*\\\":P}function l(P,G,R){if(!P||typeof P!=\\\"object\\\")return P;let J=Array.isArray(G)?G:G.split(\\\".\\\").map((X)=>X.match(/^\\\\d+$/)?Number(X):X),Y=P;for(let X=0;X<J.length;X++){let Q=J[X];X===J.length-1?Y[Q]=R:((!Y[Q]||typeof Y[Q]!=\\\"object\\\")&&(Y[Q]=typeof J[X+1]==\\\"number\\\"?[]:{}),Y=Y[Q])}return P}function r(P=10){let G=\\\"\\\";for(let R=0;R<P;R++)G+=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\\".charAt(Math.floor(Math.random()*62));return G}var E=j(),D=null;if(E===\\\"node\\\"||E===\\\"bun\\\")try{let P=globalThis.require;D=P?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function s(){if(x())return D;if(b())return self;if(d())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function V(P,G,R,J){if(!P)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(x()&&P===D){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error(\\\"Rimless Error: Invalid target for postMessage\\\")}function S(P){return D!==null&&P===D}function C(P,G,R){S(P)?P.on(G,R):(\\\"addEventListener\\\"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):(\\\"removeEventListener\\\"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var T=function(P){return P.MESSAGE=\\\"message\\\",P}({}),N=function(P){return P.HANDSHAKE_REQUEST=\\\"RIMLESS/HANDSHAKE_REQUEST\\\",P.HANDSHAKE_REPLY=\\\"RIMLESS/HANDSHAKE_REPLY\\\",P.RPC_REQUEST=\\\"RIMLESS/RPC_REQUEST\\\",P.RPC_RESOLVE=\\\"RIMLESS/RPC_RESOLVE\\\",P.RPC_REJECT=\\\"RIMLESS/RPC_REJECT\\\",P}({}),L=Symbol();function o(P={},G,R,J,Y){let X=[];for(let[Q,$]of Object.entries(P)){async function Z(W){let{action:O,callID:F,connectionID:z,callName:U,args:A=[]}=w(W);if(O!==N.RPC_REQUEST||!F||!U||U!==Q||z!==G)return;let M={action:N.RPC_RESOLVE,callID:F,callName:U,connectionID:z,error:null,result:null},_;try{M.result=await $(...A,Y),M.result?.[L]&&(_=M.result[L]??[],delete M.result[L])}catch(K){M.action=N.RPC_REJECT,M.error=JSON.parse(JSON.stringify(K,Object.getOwnPropertyNames(K)))}V(J,M,W?.origin,_)}C(R,T.MESSAGE,Z),X.push(()=>H(R,T.MESSAGE,Z))}return()=>X.forEach((Q)=>Q())}function t(P,G,R,J=[],Y,X){return(...Q)=>new Promise(($,Z)=>{let W=r();function O(U){let{callID:A,connectionID:M,callName:_,result:K,error:v,action:I}=w(U);if(!(!A||!_)&&_===P&&A===W&&M===G){if(I===N.RPC_RESOLVE)return $(K);if(I===N.RPC_REJECT)return Z(v)}}let F={action:N.RPC_REQUEST,args:Q,callID:W,callName:P,connectionID:G},z=Q.reduce((U,A)=>A[L]?.length?U.concat(A[L]):U,Q[L]??[]);C(Y,T.MESSAGE,O),J.push(()=>H(Y,T.MESSAGE,O)),V(X,F,R?.origin,z)})}function a(P={},G=[],R,J,Y,X){let Q={...P},$=[];for(let Z of G)l(Q,Z,t(Z,R,J,$,Y,X));return{remote:Q,unregisterRemote:()=>$.forEach((Z)=>Z())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),Y=s(),X=self||window;async function Q($){let Z=w($);if(Z?.action!==N.HANDSHAKE_REPLY)return;let{remote:W,unregisterRemote:O}=a(Z.schema,Z.methodNames,Z.connectionID,$,X,Y),F=o(J,Z.connectionID,X,Y,W);return await G?.onConnectionSetup?.(W),V(Y,{action:N.HANDSHAKE_REPLY,connectionID:Z.connectionID},$?.origin),R({remote:W,close:()=>{H(X,T.MESSAGE,Q),O(),F()},id:Z.connectionID})}C(X,T.MESSAGE,Q),V(Y,{action:N.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P===\\\"object\\\"&&P!==null,k=(P)=>{try{let G=JSON.stringify(P);if(typeof G===\\\"string\\\"&&G.length>0)return G}catch{}try{return String(P)}catch{return\\\"Unknown error\\\"}},y=(P)=>{if(P instanceof Error)return{message:P.message,stack:P.stack};if(typeof P===\\\"string\\\")return{message:P};if(e(P)){let G=typeof P.message===\\\"string\\\"?P.message:null,R=typeof P.stack===\\\"string\\\"?P.stack:void 0;if(G)return R?{message:G,stack:R}:{message:G};return{message:k(P)}}if(P===null||P===void 0)return{message:\\\"Unknown error\\\"};return{message:k(P)}};var B=(P)=>({id:P}),q=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),BP={sidenav:q(\\\"project.sidenav\\\",{kind:\\\"panel\\\"}),headerPrimary:q(\\\"project.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:q(\\\"project.headerOverflow\\\",{kind:\\\"menu\\\"}),settingsPanels:q(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},WP={headerPrimary:q(\\\"session.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:q(\\\"session.headerOverflow\\\",{kind:\\\"menu\\\"}),transcriptActions:q(\\\"session.transcriptActions\\\",{kind:\\\"menu\\\"})},qP={headerPrimary:q(\\\"workspace.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:q(\\\"workspace.headerOverflow\\\",{kind:\\\"menu\\\"}),sidenav:q(\\\"workspace.sidenav\\\",{kind:\\\"panel\\\"})},FP={opened:B(\\\"project.opened\\\")},MP={started:B(\\\"session.started\\\"),resumed:B(\\\"session.resumed\\\"),awaitingInput:B(\\\"session.awaitingInput\\\"),succeeded:B(\\\"session.succeeded\\\"),failed:B(\\\"session.failed\\\"),completed:B(\\\"session.completed\\\")},NP={created:B(\\\"workspace.created\\\"),provision:B(\\\"workspace.provision\\\"),ready:B(\\\"workspace.ready\\\"),archived:B(\\\"workspace.archived\\\"),deleted:B(\\\"workspace.deleted\\\")},OP={removed:B(\\\"worktree.removed\\\")},UP={committed:B(\\\"git.committed\\\"),rebased:B(\\\"git.rebased\\\"),merged:B(\\\"git.merged\\\"),conflicted:B(\\\"git.conflicted\\\")};var PP=[\\\"commands.execute\\\",\\\"resource.open\\\",\\\"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\\\"],GP=[\\\"host.dispatchKeyboardEvent\\\"],AP=[...PP,...GP];var c=(P,G,R)=>({call:async(J,Y)=>await P({method:J,params:Y}),onEvent:G,extensionId:R}),g=(P)=>{let G=P,R=new Set;return{get:()=>G,subscribe:(J)=>{return R.add(J),()=>R.delete(J)},set:(J)=>{G=J;for(let Y of R)Y(G)}}};var h=\\\"pstdio-extension-mount\\\",RP=()=>{let P=new Map;return{get length(){return P.size},clear:()=>P.clear(),getItem:(G)=>P.get(G)??null,key:(G)=>Array.from(P.keys())[G]??null,removeItem:(G)=>P.delete(G),setItem:(G,R)=>P.set(G,R)}},JP=()=>{for(let P of[\\\"localStorage\\\",\\\"sessionStorage\\\"])try{window[P]}catch{Object.defineProperty(window,P,{configurable:!0,value:RP()})}},m=(P,G)=>{let R=document.documentElement,J=P===\\\"dark\\\"?\\\"light\\\":\\\"dark\\\";R.classList.remove(J),R.classList.add(P),R.setAttribute(\\\"data-theme\\\",P),R.style.colorScheme=P;for(let[Y,X]of Object.entries(G))if(Y.startsWith(\\\"--\\\"))R.style.setProperty(Y,X)},QP=(P)=>{for(let G of P){let R=document.createElement(\\\"link\\\");R.rel=\\\"stylesheet\\\",R.href=G,document.head.appendChild(R)}},XP=()=>{let P=document.getElementById(h);if(!P)P=document.createElement(\\\"div\\\"),P.id=h,P.style.height=\\\"100%\\\",P.style.width=\\\"100%\\\",document.body.appendChild(P);return P},YP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,ZP=async()=>{JP();let P=g(void 0),G=new Map,R=(Q,$)=>{let Z=G.get(Q)??new Set;return Z.add($),G.set(Q,Z),()=>{Z.delete($)}},J,Y=!1,X=await f.connect({init:async(Q)=>{try{m(Q.theme,Q.themeVariables),QP(Q.styles),P.set(Q.props);let $=XP(),Z=await import(Q.moduleUrl),W=Z.default??(Z.mount?Z:void 0);if(!W?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let O=c((z)=>X.remote.call(z),R,Q.extensionId),F=await W.mount($,O,P);if(J=typeof F===\\\"function\\\"?F:void 0,!Y)Y=!0,document.addEventListener(\\\"keydown\\\",(z)=>{if(!z.ctrlKey&&!z.metaKey&&!z.altKey)return;if(YP(z.target)&&!z.shiftKey)return;X.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:z.key,code:z.code,ctrlKey:z.ctrlKey,metaKey:z.metaKey,altKey:z.altKey,shiftKey:z.shiftKey,repeat:z.repeat}}).catch(()=>{})},!0)}catch($){let Z=y($);throw X.remote.runtimeError(Z),$ instanceof Error?$:Error(Z.message)}},themeUpdate:(Q)=>{m(Q.theme,Q.variables)},propsUpdate:(Q)=>{P.set(Q.props)},hostEvent:(Q)=>{for(let $ of G.get(Q.scope)??[])$(Q.payload)}});X.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{J?.()})};ZP();\\n\"","const MOUNT_ID = \"pstdio-extension-mount\";\n\nconst escapeAttribute = (value: string) =>\n value.replaceAll(\"&\", \"&amp;\").replaceAll('\"', \"&quot;\").replaceAll(\"<\", \"&lt;\");\n\nconst escapeScriptContent = (value: string) => value.replaceAll(\"</script\", \"<\\\\/script\").replaceAll(\"<!--\", \"<\\\\!--\");\n\nconst renderRuntimeHostDocument = (scriptTag: string) => `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style>\n html, body {\n height: 100%;\n margin: 0;\n background: transparent;\n }\n body {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n }\n #${MOUNT_ID} {\n height: 100%;\n width: 100%;\n display: block;\n min-height: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"${MOUNT_ID}\"></div>\n ${scriptTag}\n </body>\n</html>\n`;\n\nexport const getExtensionRuntimeScriptUrl = () => new URL(\"./runtime.bundle.js\", import.meta.url).href;\n\nexport const renderExtensionRuntimeHtml = (scriptUrl: string) =>\n renderRuntimeHostDocument(`<script src=\"${escapeAttribute(scriptUrl)}\"></script>`);\n\nexport const renderInlineExtensionRuntimeHtml = (runtimeScript: string) =>\n renderRuntimeHostDocument(`<script>${escapeScriptContent(runtimeScript)}</script>`);\n","import runtimeScript from \"pstdio-extensions/bridge/webview-runtime.bundle.js?raw\";\n\nexport {\n renderExtensionRuntimeHtml,\n renderInlineExtensionRuntimeHtml,\n} from \"pstdio-extensions/bridge/webview-runtime-html\";\n\n// The guest runtime bundle is inlined here so a host app can serve it without\n// depending on the private pstdio-extensions package.\nexport const getExtensionRuntimeScript = () => runtimeScript;\n"],"names":["runtimeScript","MOUNT_ID","escapeAttribute","value","replaceAll","escapeScriptContent","renderRuntimeHostDocument","scriptTag","renderExtensionRuntimeHtml","scriptUrl","renderInlineExtensionRuntimeHtml","getExtensionRuntimeScript"],"mappings":"AAAA,MAAAA,IAAe,mhRCATC,IAAW,0BAEXC,IAAkBA,CAACC,MACvBA,EAAMC,WAAW,KAAK,OAAO,EAAEA,WAAW,KAAK,QAAQ,EAAEA,WAAW,KAAK,MAAM,GAE3EC,IAAsBA,CAACF,MAAkBA,EAAMC,WAAW,aAAY,YAAY,EAAEA,WAAW,QAAQ,QAAQ,GAE/GE,IAA4BA,CAACC,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAehDN,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASFA,CAAQ;AAAA,MACjBM,CAAS;AAAA;AAAA;AAAA,GAOFC,IAA6BA,CAACC,MACzCH,EAA0B,gBAAgBJ,EAAgBO,CAAS,CAAC,cAAa,GAEtEC,IAAmCA,CAACV,MAC/CM,EAA0B,WAAWD,EAAoBL,CAAa,CAAC,YAAW,GClCvEW,IAA4BA,MAAMX;"}
1
+ {"version":3,"file":"webview-runtime.js","sources":["../../pstdio-extensions/src/bridge/webview-runtime/runtime.bundle.js?raw","../../pstdio-extensions/src/bridge/webview-runtime/runtime-html.ts","../src/webview-runtime/index.ts"],"sourcesContent":["export default \"// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\\nfunction a(){let G=globalThis;if(G.window!==void 0&&G.document!==void 0)return\\\"browser\\\";if(G.WorkerGlobalScope!==void 0&&G.self!==void 0&&G.self instanceof G.WorkerGlobalScope||G.window===void 0&&G.self!==void 0&&typeof G.importScripts==\\\"function\\\")return\\\"worker\\\";let J=G.process;if(J&&typeof J==\\\"object\\\"){let P=J.versions??{},Q=J.release?.name;if(P.bun||Q===\\\"bun\\\"||G.Bun!==void 0)return\\\"bun\\\";if(P.node&&Q===\\\"node\\\")return\\\"node\\\"}return G.Bun===void 0?\\\"browser\\\":\\\"bun\\\"}function K(){return a()}function h(){return K()===\\\"worker\\\"}function m(){let G=K();return G===\\\"node\\\"||G===\\\"bun\\\"}function t(){return window.self!==window.top}function n(G){let J={};return function P(Q,$=\\\"\\\"){Object.keys(Q).forEach((Z)=>{let Y=$?`${$}.${Z}`:Z;Q[Z]===Object(Q[Z])&&P(Q[Z],Y),typeof Q[Z]==\\\"function\\\"&&(J[Y]=Q[Z],delete Q[Z])})}(G),J}function e(G){return!G||G===\\\"null\\\"?\\\"*\\\":G}function GG(G,J,P){if(!G||typeof G!=\\\"object\\\")return G;let Q=Array.isArray(J)?J:J.split(\\\".\\\").map((Z)=>Z.match(/^\\\\d+$/)?Number(Z):Z),$=G;for(let Z=0;Z<Q.length;Z++){let Y=Q[Z];Z===Q.length-1?$[Y]=P:((!$[Y]||typeof $[Y]!=\\\"object\\\")&&($[Y]=typeof Q[Z+1]==\\\"number\\\"?[]:{}),$=$[Y])}return G}function JG(G=10){let J=\\\"\\\";for(let P=0;P<G;P++)J+=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\\".charAt(Math.floor(Math.random()*62));return J}var g=K(),A=null;if(g===\\\"node\\\"||g===\\\"bun\\\")try{let G=globalThis.require;A=G?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function PG(){if(m())return A;if(h())return self;if(t())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function x(G,J,P,Q){if(!G)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(m()&&G===A){G.postMessage(J,{transfer:Q});return}if(h()){G.postMessage(J,{transfer:Q});return}if(G.postMessage){G.postMessage(J,{targetOrigin:e(P),transfer:Q});return}throw Error(\\\"Rimless Error: Invalid target for postMessage\\\")}function v(G){return A!==null&&G===A}function w(G,J,P){v(G)?G.on(J,P):(\\\"addEventListener\\\"in G)&&G.addEventListener(J,P)}function E(G,J,P){v(G)?G.off(J,P):(\\\"removeEventListener\\\"in G)&&G.removeEventListener(J,P)}function b(G){return G.data||G}var V=function(G){return G.MESSAGE=\\\"message\\\",G}({}),B=function(G){return G.HANDSHAKE_REQUEST=\\\"RIMLESS/HANDSHAKE_REQUEST\\\",G.HANDSHAKE_REPLY=\\\"RIMLESS/HANDSHAKE_REPLY\\\",G.RPC_REQUEST=\\\"RIMLESS/RPC_REQUEST\\\",G.RPC_RESOLVE=\\\"RIMLESS/RPC_RESOLVE\\\",G.RPC_REJECT=\\\"RIMLESS/RPC_REJECT\\\",G}({}),T=Symbol();function QG(G={},J,P,Q,$){let Z=[];for(let[Y,q]of Object.entries(G)){async function z(M){let{action:H,callID:O,connectionID:U,callName:W,args:L=[]}=b(M);if(H!==B.RPC_REQUEST||!O||!W||W!==Y||U!==J)return;let N={action:B.RPC_RESOLVE,callID:O,callName:W,connectionID:U,error:null,result:null},_;try{N.result=await q(...L,$),N.result?.[T]&&(_=N.result[T]??[],delete N.result[T])}catch(R){N.action=B.RPC_REJECT,N.error=JSON.parse(JSON.stringify(R,Object.getOwnPropertyNames(R)))}x(Q,N,M?.origin,_)}w(P,V.MESSAGE,z),Z.push(()=>E(P,V.MESSAGE,z))}return()=>Z.forEach((Y)=>Y())}function YG(G,J,P,Q=[],$,Z){return(...Y)=>new Promise((q,z)=>{let M=JG();function H(W){let{callID:L,connectionID:N,callName:_,result:R,error:o,action:f}=b(W);if(!(!L||!_)&&_===G&&L===M&&N===J){if(f===B.RPC_RESOLVE)return q(R);if(f===B.RPC_REJECT)return z(o)}}let O={action:B.RPC_REQUEST,args:Y,callID:M,callName:G,connectionID:J},U=Y.reduce((W,L)=>L[T]?.length?W.concat(L[T]):W,Y[T]??[]);w($,V.MESSAGE,H),Q.push(()=>E($,V.MESSAGE,H)),x(Z,O,P?.origin,U)})}function ZG(G={},J=[],P,Q,$,Z){let Y={...G},q=[];for(let z of J)GG(Y,z,YG(z,P,Q,q,$,Z));return{remote:Y,unregisterRemote:()=>q.forEach((z)=>z())}}function $G(G={},J){return new Promise(async(P)=>{let Q=n(G),$=PG(),Z=self||window;async function Y(q){let z=b(q);if(z?.action!==B.HANDSHAKE_REPLY)return;let{remote:M,unregisterRemote:H}=ZG(z.schema,z.methodNames,z.connectionID,q,Z,$),O=QG(Q,z.connectionID,Z,$,M);return await J?.onConnectionSetup?.(M),x($,{action:B.HANDSHAKE_REPLY,connectionID:z.connectionID},q?.origin),P({remote:M,close:()=>{E(Z,V.MESSAGE,Y),H(),O()},id:z.connectionID})}w(Z,V.MESSAGE,Y),x($,{action:B.HANDSHAKE_REQUEST,methodNames:Object.keys(Q),schema:G})})}var c={connect:$G};var zG=(G)=>typeof G===\\\"object\\\"&&G!==null,p=(G)=>{try{let J=JSON.stringify(G);if(typeof J===\\\"string\\\"&&J.length>0)return J}catch{}try{return String(G)}catch{return\\\"Unknown error\\\"}},u=(G)=>{if(G instanceof Error)return{message:G.message,stack:G.stack};if(typeof G===\\\"string\\\")return{message:G};if(zG(G)){let J=typeof G.message===\\\"string\\\"?G.message:null,P=typeof G.stack===\\\"string\\\"?G.stack:void 0;if(J)return P?{message:J,stack:P}:{message:J};return{message:p(G)}}if(G===null||G===void 0)return{message:\\\"Unknown error\\\"};return{message:p(G)}};var j=(G,J)=>({extensionId:\\\"pstdio\\\",kind:G,id:J}),LG={switchMode:j(\\\"command\\\",\\\"workbench.action.switchMode\\\")},TG={project:j(\\\"mode\\\",\\\"project\\\"),settings:j(\\\"mode\\\",\\\"settings\\\")},y=(G,J,P)=>({id:G,ref:j(\\\"resource-kind\\\",G),surface:\\\"primary\\\",label:J,menuSlots:P}),S=[{id:\\\"headerPrimary\\\",placement:\\\"header-primary\\\",access:\\\"public\\\"},{id:\\\"headerOverflow\\\",placement:\\\"header-overflow\\\",access:\\\"public\\\"}],k={project:y(\\\"project\\\",\\\"Extension\\\",S),session:y(\\\"session\\\",\\\"Session\\\",S),workspace:y(\\\"workspace\\\",\\\"Workspace\\\",S)},D={project:k.project.ref,session:k.session.ref,workspace:k.workspace.ref},VG={projectNavigation:j(\\\"navigation-item\\\",\\\"project.navigation\\\"),projectSettings:j(\\\"settings-panel\\\",\\\"project.settings\\\"),statusBarLeading:j(\\\"status-bar-item\\\",\\\"status-bar.leading\\\"),statusBarTrailing:j(\\\"status-bar-item\\\",\\\"status-bar.trailing\\\")},d=(G)=>({...G,kind:\\\"command\\\"}),DG=Object.assign(d,{forExtension:(G)=>(J)=>d({extensionId:`${G.publisher}.${G.name}`,id:J})}),XG=(G)=>({...G,kind:\\\"event\\\"}),I=(G,J)=>({id:G,kind:J.kind,label:J.label,description:J.description,metadata:J.metadata}),F=(G)=>XG({extensionId:\\\"pstdio\\\",id:G}),C=(G,J)=>I(`${G.id}.${J}`,{kind:\\\"menu\\\"}),CG={sidenav:I(\\\"project.sidenav\\\",{kind:\\\"panel\\\"}),headerPrimary:C(D.project,\\\"headerPrimary\\\"),headerOverflow:C(D.project,\\\"headerOverflow\\\"),settingsPanels:I(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},_G={headerPrimary:C(D.session,\\\"headerPrimary\\\"),headerOverflow:C(D.session,\\\"headerOverflow\\\")},AG={headerPrimary:C(D.workspace,\\\"headerPrimary\\\"),headerOverflow:C(D.workspace,\\\"headerOverflow\\\"),sidenav:I(\\\"workspace.sidenav\\\",{kind:\\\"panel\\\"})},RG={opened:F(\\\"project.opened\\\")},xG={started:F(\\\"session.started\\\"),resumed:F(\\\"session.resumed\\\"),awaitingInput:F(\\\"session.awaitingInput\\\"),succeeded:F(\\\"session.succeeded\\\"),failed:F(\\\"session.failed\\\"),completed:F(\\\"session.completed\\\")},IG={created:F(\\\"workspace.created\\\"),provision:F(\\\"workspace.provision\\\"),ready:F(\\\"workspace.ready\\\"),archived:F(\\\"workspace.archived\\\"),deleted:F(\\\"workspace.deleted\\\")},KG={removed:F(\\\"worktree.removed\\\")},wG={committed:F(\\\"git.committed\\\"),rebased:F(\\\"git.rebased\\\"),merged:F(\\\"git.merged\\\"),conflicted:F(\\\"git.conflicted\\\")};var qG=[\\\"commands.execute\\\",\\\"resource.open\\\",\\\"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\\\"],UG=[\\\"host.dispatchKeyboardEvent\\\"],EG=[...qG,...UG];var X=(G)=>(J)=>({...J,ref:{kind:G,id:J.id}}),bG=X(\\\"view\\\"),yG=X(\\\"view-menu\\\"),SG=X(\\\"placement\\\"),kG=X(\\\"resource-kind\\\");var fG=X(\\\"resource-view\\\"),gG=X(\\\"navigation-item\\\"),hG=X(\\\"mode\\\"),mG=X(\\\"status-bar-item\\\"),vG=X(\\\"status\\\"),cG=X(\\\"settings-panel\\\"),pG=X(\\\"activity-item\\\"),uG=X(\\\"settings-section\\\"),dG=X(\\\"command-palette-resource\\\"),lG=X(\\\"keybinding\\\"),rG=X(\\\"schedule\\\"),sG=X(\\\"artifact-mount\\\"),iG=X(\\\"template-type\\\"),oG=X(\\\"template\\\"),aG=X(\\\"skill\\\"),tG=X(\\\"theme\\\"),nG=X(\\\"file-icon-theme\\\"),eG=X(\\\"workspace-type\\\"),GJ=X(\\\"harness\\\"),JJ=X(\\\"connection\\\");var l=(G,J,P)=>({call:async(Q,$)=>await G({method:Q,params:$}),onEvent:J,extensionId:P}),r=(G)=>{let J=G,P=new Set;return{get:()=>J,subscribe:(Q)=>{return P.add(Q),()=>P.delete(Q)},set:(Q)=>{J=Q;for(let $ of P)$(J)}}};var s=\\\"pstdio-extension-mount\\\",FG=()=>{let G=new Map;return{get length(){return G.size},clear:()=>G.clear(),getItem:(J)=>G.get(J)??null,key:(J)=>Array.from(G.keys())[J]??null,removeItem:(J)=>G.delete(J),setItem:(J,P)=>G.set(J,P)}},MG=()=>{for(let G of[\\\"localStorage\\\",\\\"sessionStorage\\\"])try{window[G]}catch{Object.defineProperty(window,G,{configurable:!0,value:FG()})}},i=(G,J)=>{let P=document.documentElement,Q=G===\\\"dark\\\"?\\\"light\\\":\\\"dark\\\";P.classList.remove(Q),P.classList.add(G),P.setAttribute(\\\"data-theme\\\",G),P.style.colorScheme=G;for(let[$,Z]of Object.entries(J))if($.startsWith(\\\"--\\\"))P.style.setProperty($,Z)},OG=(G)=>{for(let J of G){let P=document.createElement(\\\"link\\\");P.rel=\\\"stylesheet\\\",P.href=J,document.head.appendChild(P)}},NG=()=>{let G=document.getElementById(s);if(!G)G=document.createElement(\\\"div\\\"),G.id=s,G.style.height=\\\"100%\\\",G.style.width=\\\"100%\\\",document.body.appendChild(G);return G},BG=(G)=>G instanceof HTMLInputElement||G instanceof HTMLTextAreaElement||G instanceof HTMLSelectElement||G instanceof HTMLElement&&G.isContentEditable,HG=async()=>{MG();let G=r(void 0),J=new Map,P=(Y,q)=>{let z=J.get(Y)??new Set;return z.add(q),J.set(Y,z),()=>{z.delete(q)}},Q,$=!1,Z=await c.connect({init:async(Y)=>{try{i(Y.theme,Y.themeVariables),OG(Y.styles),G.set(Y.props);let q=NG(),z=await import(Y.moduleUrl),M=z.default??(z.mount?z:void 0);if(!M?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let H=l((U)=>Z.remote.call(U),P,Y.extensionId),O=await M.mount(q,H,G);if(Q=typeof O===\\\"function\\\"?O:void 0,!$)$=!0,document.addEventListener(\\\"keydown\\\",(U)=>{if(!U.ctrlKey&&!U.metaKey&&!U.altKey)return;if(BG(U.target)&&!U.shiftKey)return;Z.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:U.key,code:U.code,ctrlKey:U.ctrlKey,metaKey:U.metaKey,altKey:U.altKey,shiftKey:U.shiftKey,repeat:U.repeat}}).catch(()=>{})},!0)}catch(q){let z=u(q);throw Z.remote.runtimeError(z),q instanceof Error?q:Error(z.message)}},themeUpdate:(Y)=>{i(Y.theme,Y.variables)},propsUpdate:(Y)=>{G.set(Y.props)},hostEvent:(Y)=>{for(let q of J.get(Y.scope)??[])q(Y.payload)}});Z.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{Q?.()})};HG();\\n\"","const MOUNT_ID = \"pstdio-extension-mount\";\n\nconst escapeAttribute = (value: string) =>\n value.replaceAll(\"&\", \"&amp;\").replaceAll('\"', \"&quot;\").replaceAll(\"<\", \"&lt;\");\n\nconst escapeScriptContent = (value: string) => value.replaceAll(\"</script\", \"<\\\\/script\").replaceAll(\"<!--\", \"<\\\\!--\");\n\nconst renderRuntimeHostDocument = (scriptTag: string) => `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style>\n html, body {\n height: 100%;\n margin: 0;\n background: transparent;\n }\n body {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n }\n #${MOUNT_ID} {\n height: 100%;\n width: 100%;\n display: block;\n min-height: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"${MOUNT_ID}\"></div>\n ${scriptTag}\n </body>\n</html>\n`;\n\nexport const getExtensionRuntimeScriptUrl = () => new URL(\"./runtime.bundle.js\", import.meta.url).href;\n\nexport const renderExtensionRuntimeHtml = (scriptUrl: string) =>\n renderRuntimeHostDocument(`<script src=\"${escapeAttribute(scriptUrl)}\"></script>`);\n\nexport const renderInlineExtensionRuntimeHtml = (runtimeScript: string) =>\n renderRuntimeHostDocument(`<script>${escapeScriptContent(runtimeScript)}</script>`);\n","import runtimeScript from \"pstdio-extensions/bridge/webview-runtime.bundle.js?raw\";\n\nexport {\n renderExtensionRuntimeHtml,\n renderInlineExtensionRuntimeHtml,\n} from \"pstdio-extensions/bridge/webview-runtime-html\";\n\n// The guest runtime bundle is inlined here so a host app can serve it without\n// depending on the private pstdio-extensions package.\nexport const getExtensionRuntimeScript = () => runtimeScript;\n"],"names":["runtimeScript","MOUNT_ID","escapeAttribute","value","replaceAll","escapeScriptContent","renderRuntimeHostDocument","scriptTag","renderExtensionRuntimeHtml","scriptUrl","renderInlineExtensionRuntimeHtml","getExtensionRuntimeScript"],"mappings":"AAAA,MAAAA,IAAe,m7TCATC,IAAW,0BAEXC,IAAkBA,CAACC,MACvBA,EAAMC,WAAW,KAAK,OAAO,EAAEA,WAAW,KAAK,QAAQ,EAAEA,WAAW,KAAK,MAAM,GAE3EC,IAAsBA,CAACF,MAAkBA,EAAMC,WAAW,aAAY,YAAY,EAAEA,WAAW,QAAQ,QAAQ,GAE/GE,IAA4BA,CAACC,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAehDN,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASFA,CAAQ;AAAA,MACjBM,CAAS;AAAA;AAAA;AAAA,GAOFC,IAA6BA,CAACC,MACzCH,EAA0B,gBAAgBJ,EAAgBO,CAAS,CAAC,cAAa,GAEtEC,IAAmCA,CAACV,MAC/CM,EAA0B,WAAWD,EAAoBL,CAAa,CAAC,YAAW,GClCvEW,IAA4BA,MAAMX;"}