@pstdio/workbench 0.6.0 → 0.7.1

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/testing.d.ts CHANGED
@@ -91,6 +91,7 @@ declare interface Command {
91
91
  }
92
92
 
93
93
  declare interface CommandHandler<TArgs = unknown, TResult = unknown> {
94
+ prepareArgs?(args: TArgs, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: TArgs) => void): TArgs | Promise<TArgs>;
94
95
  execute(args: TArgs, context?: WorkbenchCommandExecutionContext): TResult | Promise<TResult>;
95
96
  isEnabled?(args: TArgs): boolean;
96
97
  isVisible?(args: TArgs): boolean;
@@ -147,6 +148,8 @@ declare interface CommandParamDescriptor {
147
148
  options?: CommandParamOption[];
148
149
  templateType?: string;
149
150
  resourceType?: string;
151
+ accept?: string;
152
+ multiple?: boolean;
150
153
  metadata?: Record<string, unknown>;
151
154
  }
152
155
 
@@ -166,6 +169,7 @@ declare interface CommandRegistry {
166
169
  isCommandEnabled(id: string, args?: unknown): boolean;
167
170
  isCommandVisible(id: string, args?: unknown): boolean;
168
171
  isCommandToggled(id: string, args?: unknown): boolean;
172
+ prepareCommandArgs(id: string, args: unknown, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: unknown) => void): Promise<unknown>;
169
173
  executeCommand(id: string, args?: unknown, context?: WorkbenchCommandExecutionContext): Promise<unknown>;
170
174
  onDidExecuteError(listener: WorkbenchCommandExecutionErrorListener): Disposable_2;
171
175
  }
@@ -470,10 +474,21 @@ declare interface FileIconThemeRegistry {
470
474
 
471
475
  declare interface FileRendererContent {
472
476
  fileName?: string;
477
+ /** Workspace-relative path shown above the file preview. */
478
+ filePath?: string;
473
479
  mimeType?: string;
474
480
  content?: string;
475
481
  dataUrl?: string;
476
482
  placeholder?: string;
483
+ /** Override contribution-level save support for one loaded file. */
484
+ editable?: boolean;
485
+ /** Request Monaco for text that automatic dispatch would open as markdown. */
486
+ textRenderer?: "automatic" | "monaco";
487
+ /** Represent a deliberate no-file selection without an editable blank document. */
488
+ emptyState?: {
489
+ title: string;
490
+ description?: string;
491
+ };
477
492
  /** Ordered backing-store revision when one is available. */
478
493
  revision?: string;
479
494
  }
@@ -1057,7 +1072,9 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
1057
1072
 
1058
1073
  declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1059
1074
 
1060
- declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
1075
+ declare type ResolvedResourcePresenter = Omit<ResourcePresenter, "priority"> & {
1076
+ priority: number;
1077
+ };
1061
1078
 
1062
1079
  declare interface ResourceBrowseEntry {
1063
1080
  resource: ResourceRef;
@@ -1119,6 +1136,7 @@ declare interface ResourcePresenter {
1119
1136
  priority?: number;
1120
1137
  canOpen(resource: ResourceRef): boolean;
1121
1138
  open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1139
+ afterOpen?(resource: ResourceRef, instance: WorkbenchPanelInstance, input: OpenResourceInput): void;
1122
1140
  }
1123
1141
 
1124
1142
  declare interface ResourceProvider {
@@ -1324,11 +1342,13 @@ declare interface TreeNode {
1324
1342
  target?: NavigationTarget;
1325
1343
  /** Visual row variant for non-data rows such as placeholders. */
1326
1344
  rowVariant?: TreeNodeRowVariant;
1345
+ inlineInput?: TreeNodeInlineInput;
1327
1346
  actions?: TreeAction[];
1328
1347
  contextMenuActions?: TreeAction[];
1329
1348
  contextMenuPath?: MenuPath;
1330
1349
  menuPath?: MenuPath;
1331
1350
  menuPlacement?: "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "left-start";
1351
+ showContextMenuTrigger?: boolean;
1332
1352
  collapsible?: boolean;
1333
1353
  disabled?: boolean;
1334
1354
  children?: TreeNode[];
@@ -1339,6 +1359,18 @@ declare interface TreeNode {
1339
1359
  canHide?: boolean;
1340
1360
  /** When false, the node stays fixed within its Sidenav group. */
1341
1361
  canReorder?: boolean;
1362
+ /** Allow this node to be moved to another tree location. */
1363
+ canDrag?: boolean;
1364
+ /** Allow movable nodes to be dropped on this node. */
1365
+ canDrop?: boolean;
1366
+ }
1367
+
1368
+ declare interface TreeNodeInlineInput {
1369
+ ariaLabel: string;
1370
+ defaultValue?: string;
1371
+ placeholder?: string;
1372
+ onCommit(value: string): Promise<void> | void;
1373
+ onCancel?(): void;
1342
1374
  }
1343
1375
 
1344
1376
  declare type TreeNodeRowVariant = "empty-state";
@@ -1347,6 +1379,8 @@ declare interface TreeRendererContribution {
1347
1379
  id: string;
1348
1380
  title: string;
1349
1381
  icon?: string;
1382
+ searchable?: boolean;
1383
+ searchPlaceholder?: string;
1350
1384
  when?: string;
1351
1385
  defaultExpandedSectionIds?: string[];
1352
1386
  defaultExpandedNodeIds?: string[];
@@ -1354,6 +1388,7 @@ declare interface TreeRendererContribution {
1354
1388
  getHeader?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1355
1389
  getFooter?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1356
1390
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1391
+ moveNode?(source: TreeNode, target: TreeNode | undefined, ctx: TreeContext): Promise<void> | void;
1357
1392
  }
1358
1393
 
1359
1394
  declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
@@ -1,4 +1,4 @@
1
- const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction d(){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 V(){return d()}function b(){return V()==="worker"}function x(){let P=V();return P==="node"||P==="bun"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=""){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]=="function"&&(G[K]=J[Q],delete J[Q])})}(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((Q)=>Q.match(/^\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!="object")&&(X[K]=typeof J[Q+1]=="number"?[]:{}),X=X[K])}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=V(),_=null;if(E==="node"||E==="bun")try{let P=globalThis.require;_=P?.("node:worker_threads")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error("No valid target found for postMessage")}function D(P,G,R,J){if(!P)throw Error("Rimless Error: No target specified for postMessage");if(x()&&P===_){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 _!==null&&P===_}function j(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 L=function(P){return P.MESSAGE="message",P}({}),M=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}({}),A=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:N,callID:q,connectionID:$,callName:O,args:U=[]}=w(B);if(N!==M.RPC_REQUEST||!q||!O||O!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:O,connectionID:$,error:null,result:null},T;try{F.result=await Z(...U,X),F.result?.[A]&&(T=F.result[A]??[],delete F.result[A])}catch(C){F.action=M.RPC_REJECT,F.error=JSON.parse(JSON.stringify(C,Object.getOwnPropertyNames(C)))}D(J,F,B?.origin,T)}j(R,L.MESSAGE,Y),Q.push(()=>H(R,L.MESSAGE,Y))}return()=>Q.forEach((K)=>K())}function t(P,G,R,J=[],X,Q){return(...K)=>new Promise((Z,Y)=>{let B=r();function N(O){let{callID:U,connectionID:F,callName:T,result:C,error:v,action:I}=w(O);if(!(!U||!T)&&T===P&&U===B&&F===G){if(I===M.RPC_RESOLVE)return Z(C);if(I===M.RPC_REJECT)return Y(v)}}let q={action:M.RPC_REQUEST,args:K,callID:B,callName:P,connectionID:G},$=K.reduce((O,U)=>U[A]?.length?O.concat(U[A]):O,K[A]??[]);j(X,L.MESSAGE,N),J.push(()=>H(X,L.MESSAGE,N)),D(Q,q,R?.origin,$)})}function a(P={},G=[],R,J,X,Q){let K={...P},Z=[];for(let Y of G)l(K,Y,t(Y,R,J,Z,X,Q));return{remote:K,unregisterRemote:()=>Z.forEach((Y)=>Y())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),X=s(),Q=self||window;async function K(Z){let Y=w(Z);if(Y?.action!==M.HANDSHAKE_REPLY)return;let{remote:B,unregisterRemote:N}=a(Y.schema,Y.methodNames,Y.connectionID,Z,Q,X),q=o(J,Y.connectionID,Q,X,B);return await G?.onConnectionSetup?.(B),D(X,{action:M.HANDSHAKE_REPLY,connectionID:Y.connectionID},Z?.origin),R({remote:B,close:()=>{H(Q,L.MESSAGE,K),N(),q()},id:Y.connectionID})}j(Q,L.MESSAGE,K),D(X,{action:M.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P==="object"&&P!==null,y=(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"}},k=(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:y(P)}}if(P===null||P===void 0)return{message:"Unknown error"};return{message:y(P)}};var z=(P)=>({id:P}),W=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),zP={sidenav:W("project.sidenav",{kind:"panel"}),headerPrimary:W("project.headerPrimary",{kind:"menu"}),headerOverflow:W("project.headerOverflow",{kind:"menu"}),settingsPanels:W("project.settingsPanels",{kind:"settings"})},BP={headerPrimary:W("session.headerPrimary",{kind:"menu"}),headerOverflow:W("session.headerOverflow",{kind:"menu"}),transcriptActions:W("session.transcriptActions",{kind:"menu"})},WP={headerPrimary:W("workspace.headerPrimary",{kind:"menu"}),headerOverflow:W("workspace.headerOverflow",{kind:"menu"}),sidenav:W("workspace.sidenav",{kind:"panel"})},qP={opened:z("project.opened")},FP={started:z("session.started"),resumed:z("session.resumed"),awaitingInput:z("session.awaitingInput"),succeeded:z("session.succeeded"),failed:z("session.failed"),completed:z("session.completed")},MP={created:z("workspace.created"),provision:z("workspace.provision"),ready:z("workspace.ready"),archived:z("workspace.archived"),deleted:z("workspace.deleted")},NP={removed:z("worktree.removed")},OP={committed:z("git.committed"),rebased:z("git.rebased"),merged:z("git.merged"),conflicted:z("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"],UP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),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 X of R)X(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[X,Q]of Object.entries(G))if(X.startsWith("--"))R.style.setProperty(X,Q)},KP=(P)=>{for(let G of P){let R=document.createElement("link");R.rel="stylesheet",R.href=G,document.head.appendChild(R)}},QP=()=>{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},XP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,YP=async()=>{JP();let P=g(void 0),G=new Map,R=(K,Z)=>{let Y=G.get(K)??new Set;return Y.add(Z),G.set(K,Y),()=>{Y.delete(Z)}},J,X=!1,Q=await f.connect({init:async(K)=>{try{m(K.theme,K.themeVariables),KP(K.styles),P.set(K.props);let Z=QP(),Y=await import(K.moduleUrl),B=Y.default??(Y.mount?Y:void 0);if(!B?.mount)throw Error("Extension module does not export a default view (defineExtensionView).");let N=c(($)=>Q.remote.call($),R),q=await B.mount(Z,N,P);if(J=typeof q==="function"?q:void 0,!X)X=!0,document.addEventListener("keydown",($)=>{if(!$.ctrlKey&&!$.metaKey&&!$.altKey)return;if(XP($.target)&&!$.shiftKey)return;Q.remote.call({method:"host.dispatchKeyboardEvent",params:{key:$.key,code:$.code,ctrlKey:$.ctrlKey,metaKey:$.metaKey,altKey:$.altKey,shiftKey:$.shiftKey,repeat:$.repeat}}).catch(()=>{})},!0)}catch(Z){let Y=k(Z);throw Q.remote.runtimeError(Y),Z instanceof Error?Z:Error(Y.message)}},themeUpdate:(K)=>{m(K.theme,K.variables)},propsUpdate:(K)=>{P.set(K.props)},hostEvent:(K)=>{for(let Z of G.get(K.scope)??[])Z(K.payload)}});Q.remote.ready({}),window.addEventListener("beforeunload",()=>{J?.()})};YP();\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 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>
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 d(){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 V(){return d()}function b(){return V()===\\\"worker\\\"}function x(){let P=V();return P===\\\"node\\\"||P===\\\"bun\\\"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=\\\"\\\"){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]==\\\"function\\\"&&(G[K]=J[Q],delete J[Q])})}(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((Q)=>Q.match(/^\\\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!=\\\"object\\\")&&(X[K]=typeof J[Q+1]==\\\"number\\\"?[]:{}),X=X[K])}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=V(),_=null;if(E===\\\"node\\\"||E===\\\"bun\\\")try{let P=globalThis.require;_=P?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function D(P,G,R,J){if(!P)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(x()&&P===_){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 _!==null&&P===_}function j(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 L=function(P){return P.MESSAGE=\\\"message\\\",P}({}),M=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}({}),A=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:N,callID:q,connectionID:$,callName:O,args:U=[]}=w(B);if(N!==M.RPC_REQUEST||!q||!O||O!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:O,connectionID:$,error:null,result:null},T;try{F.result=await Z(...U,X),F.result?.[A]&&(T=F.result[A]??[],delete F.result[A])}catch(C){F.action=M.RPC_REJECT,F.error=JSON.parse(JSON.stringify(C,Object.getOwnPropertyNames(C)))}D(J,F,B?.origin,T)}j(R,L.MESSAGE,Y),Q.push(()=>H(R,L.MESSAGE,Y))}return()=>Q.forEach((K)=>K())}function t(P,G,R,J=[],X,Q){return(...K)=>new Promise((Z,Y)=>{let B=r();function N(O){let{callID:U,connectionID:F,callName:T,result:C,error:v,action:I}=w(O);if(!(!U||!T)&&T===P&&U===B&&F===G){if(I===M.RPC_RESOLVE)return Z(C);if(I===M.RPC_REJECT)return Y(v)}}let q={action:M.RPC_REQUEST,args:K,callID:B,callName:P,connectionID:G},$=K.reduce((O,U)=>U[A]?.length?O.concat(U[A]):O,K[A]??[]);j(X,L.MESSAGE,N),J.push(()=>H(X,L.MESSAGE,N)),D(Q,q,R?.origin,$)})}function a(P={},G=[],R,J,X,Q){let K={...P},Z=[];for(let Y of G)l(K,Y,t(Y,R,J,Z,X,Q));return{remote:K,unregisterRemote:()=>Z.forEach((Y)=>Y())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),X=s(),Q=self||window;async function K(Z){let Y=w(Z);if(Y?.action!==M.HANDSHAKE_REPLY)return;let{remote:B,unregisterRemote:N}=a(Y.schema,Y.methodNames,Y.connectionID,Z,Q,X),q=o(J,Y.connectionID,Q,X,B);return await G?.onConnectionSetup?.(B),D(X,{action:M.HANDSHAKE_REPLY,connectionID:Y.connectionID},Z?.origin),R({remote:B,close:()=>{H(Q,L.MESSAGE,K),N(),q()},id:Y.connectionID})}j(Q,L.MESSAGE,K),D(X,{action:M.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P===\\\"object\\\"&&P!==null,y=(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\\\"}},k=(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:y(P)}}if(P===null||P===void 0)return{message:\\\"Unknown error\\\"};return{message:y(P)}};var z=(P)=>({id:P}),W=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),zP={sidenav:W(\\\"project.sidenav\\\",{kind:\\\"panel\\\"}),headerPrimary:W(\\\"project.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"project.headerOverflow\\\",{kind:\\\"menu\\\"}),settingsPanels:W(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},BP={headerPrimary:W(\\\"session.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"session.headerOverflow\\\",{kind:\\\"menu\\\"}),transcriptActions:W(\\\"session.transcriptActions\\\",{kind:\\\"menu\\\"})},WP={headerPrimary:W(\\\"workspace.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"workspace.headerOverflow\\\",{kind:\\\"menu\\\"}),sidenav:W(\\\"workspace.sidenav\\\",{kind:\\\"panel\\\"})},qP={opened:z(\\\"project.opened\\\")},FP={started:z(\\\"session.started\\\"),resumed:z(\\\"session.resumed\\\"),awaitingInput:z(\\\"session.awaitingInput\\\"),succeeded:z(\\\"session.succeeded\\\"),failed:z(\\\"session.failed\\\"),completed:z(\\\"session.completed\\\")},MP={created:z(\\\"workspace.created\\\"),provision:z(\\\"workspace.provision\\\"),ready:z(\\\"workspace.ready\\\"),archived:z(\\\"workspace.archived\\\"),deleted:z(\\\"workspace.deleted\\\")},NP={removed:z(\\\"worktree.removed\\\")},OP={committed:z(\\\"git.committed\\\"),rebased:z(\\\"git.rebased\\\"),merged:z(\\\"git.merged\\\"),conflicted:z(\\\"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\\\"],UP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),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 X of R)X(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[X,Q]of Object.entries(G))if(X.startsWith(\\\"--\\\"))R.style.setProperty(X,Q)},KP=(P)=>{for(let G of P){let R=document.createElement(\\\"link\\\");R.rel=\\\"stylesheet\\\",R.href=G,document.head.appendChild(R)}},QP=()=>{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},XP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,YP=async()=>{JP();let P=g(void 0),G=new Map,R=(K,Z)=>{let Y=G.get(K)??new Set;return Y.add(Z),G.set(K,Y),()=>{Y.delete(Z)}},J,X=!1,Q=await f.connect({init:async(K)=>{try{m(K.theme,K.themeVariables),KP(K.styles),P.set(K.props);let Z=QP(),Y=await import(K.moduleUrl),B=Y.default??(Y.mount?Y:void 0);if(!B?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let N=c(($)=>Q.remote.call($),R),q=await B.mount(Z,N,P);if(J=typeof q===\\\"function\\\"?q:void 0,!X)X=!0,document.addEventListener(\\\"keydown\\\",($)=>{if(!$.ctrlKey&&!$.metaKey&&!$.altKey)return;if(XP($.target)&&!$.shiftKey)return;Q.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:$.key,code:$.code,ctrlKey:$.ctrlKey,metaKey:$.metaKey,altKey:$.altKey,shiftKey:$.shiftKey,repeat:$.repeat}}).catch(()=>{})},!0)}catch(Z){let Y=k(Z);throw Q.remote.runtimeError(Y),Z instanceof Error?Z:Error(Y.message)}},themeUpdate:(K)=>{m(K.theme,K.variables)},propsUpdate:(K)=>{P.set(K.props)},hostEvent:(K)=>{for(let Z of G.get(K.scope)??[])Z(K.payload)}});Q.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{J?.()})};YP();\\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,q/QCATC,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 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;"}