@pstdio/sdk 0.14.0 → 0.15.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/api/extensions.d.ts +1 -1
- package/dist/api/index.d.ts +2 -1
- package/dist/api/index.js +25 -3
- package/dist/api/terminal.d.ts +49 -0
- package/dist/extensions/define-extension-view.d.ts +2 -0
- package/dist/extensions/index.d.ts +2 -1
- package/dist/extensions/index.js +76 -1
- package/dist/extensions/terminal-session-bridge.d.ts +32 -0
- package/dist/resources/index.js +25 -3
- package/package.json +1 -1
package/dist/api/extensions.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type { CommandExecuteRequest, CommandExecuteResponse, ExtensionCommandPaletteContribution, ExtensionCommandPaletteResourceRecord, ExtensionCommandRecord, ExtensionDataRendererRecord, ExtensionDiagnostic, ExtensionKeybindingRecord, ExtensionMenuContribution, ExtensionModeRecord, ExtensionNavigationRecord, ExtensionRecord, ExtensionRouteRecord, ExtensionSettingDefinitionRecord, ExtensionSettingsPanelRecord, ExtensionSettingValueRecord, ExtensionTreeItemContribution, ExtensionTreeRendererRecord, ExtensionViewRecord, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, ListExtensionSettingsResponse, ListProjectExtensionsResponse, LocalizableString, ModeLayoutContributionRecord, ProjectExtensionInstance, UpdateExtensionSettingRequest, UpdateInstalledExtensionTemplateInput, UpdateInstalledExtensionTemplateResponse, WorkbenchExtensionCommandPaletteResourceRecord, WorkbenchExtensionDataRendererRecord, WorkbenchExtensionMetadata, WorkbenchExtensionTreeRendererRecord, } from "pstdio-api-contracts";
|
|
1
|
+
export type { CommandExecuteRequest, CommandExecuteResponse, ExtensionCommandPaletteContribution, ExtensionCommandPaletteResourceRecord, ExtensionCommandRecord, ExtensionControlsRendererRecord, ExtensionDataRendererRecord, ExtensionDiagnostic, ExtensionKeybindingRecord, ExtensionMenuContribution, ExtensionModeRecord, ExtensionNavigationRecord, ExtensionRecord, ExtensionRouteRecord, ExtensionSettingDefinitionRecord, ExtensionSettingsPanelRecord, ExtensionSettingValueRecord, ExtensionTreeItemContribution, ExtensionTreeRendererRecord, ExtensionViewRecord, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, ListExtensionSettingsResponse, ListProjectExtensionsResponse, LocalizableString, ModeLayoutContributionRecord, ProjectExtensionInstance, UpdateExtensionSettingRequest, UpdateInstalledExtensionTemplateInput, UpdateInstalledExtensionTemplateResponse, WorkbenchExtensionCommandPaletteResourceRecord, WorkbenchExtensionControlsRendererRecord, WorkbenchExtensionDataRendererRecord, WorkbenchExtensionMetadata, WorkbenchExtensionTreeRendererRecord, } from "pstdio-api-contracts";
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export type { CreateNotificationInput, ListNotificationsQuery, ListNotificationsResponse, Notification, NotificationAction, NotificationActionResult, NotificationActorType, NotificationKind, NotificationOrigin, NotificationPriority, NotificationStatus, ResourceRef, UpdateNotificationInput, } from "pstdio-api-contracts";
|
|
2
|
-
export type { CommandExecuteRequest, CommandExecuteResponse, ExtensionCommandPaletteContribution, ExtensionCommandPaletteResourceRecord, ExtensionCommandRecord, ExtensionDataRendererRecord, ExtensionDiagnostic, ExtensionKeybindingRecord, ExtensionMenuContribution, ExtensionModeRecord, ExtensionNavigationRecord, ExtensionRecord, ExtensionRouteRecord, ExtensionSettingDefinitionRecord, ExtensionSettingsPanelRecord, ExtensionSettingValueRecord, ExtensionTreeItemContribution, ExtensionTreeRendererRecord, ExtensionViewRecord, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, ListExtensionSettingsResponse, ListProjectExtensionsResponse, LocalizableString, ProjectExtensionInstance, UpdateExtensionSettingRequest, UpdateInstalledExtensionTemplateInput, UpdateInstalledExtensionTemplateResponse, WorkbenchExtensionCommandPaletteResourceRecord, WorkbenchExtensionDataRendererRecord, WorkbenchExtensionMetadata, WorkbenchExtensionTreeRendererRecord, } from "./extensions";
|
|
2
|
+
export type { CommandExecuteRequest, CommandExecuteResponse, ExtensionCommandPaletteContribution, ExtensionCommandPaletteResourceRecord, ExtensionCommandRecord, ExtensionControlsRendererRecord, ExtensionDataRendererRecord, ExtensionDiagnostic, ExtensionKeybindingRecord, ExtensionMenuContribution, ExtensionModeRecord, ExtensionNavigationRecord, ExtensionRecord, ExtensionRouteRecord, ExtensionSettingDefinitionRecord, ExtensionSettingsPanelRecord, ExtensionSettingValueRecord, ExtensionTreeItemContribution, ExtensionTreeRendererRecord, ExtensionViewRecord, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, ListExtensionSettingsResponse, ListProjectExtensionsResponse, LocalizableString, ProjectExtensionInstance, UpdateExtensionSettingRequest, UpdateInstalledExtensionTemplateInput, UpdateInstalledExtensionTemplateResponse, WorkbenchExtensionCommandPaletteResourceRecord, WorkbenchExtensionControlsRendererRecord, WorkbenchExtensionDataRendererRecord, WorkbenchExtensionMetadata, WorkbenchExtensionTreeRendererRecord, } from "./extensions";
|
|
3
3
|
export type { CreateProjectInput, RegisterRepoInput } from "./projects";
|
|
4
4
|
export type { ApprovalInput, CreateSessionInput, FollowUpInput, ResolveSessionIdInput, ResolveSessionIdResponse, SessionAttachment, SessionAttachmentRef, SessionConversationResponse, } from "./sessions";
|
|
5
5
|
export { sessionAttachmentMimeTypesByExtension } from "./sessions";
|
|
6
6
|
export type { Settings, UpdateSettingsInput } from "./settings";
|
|
7
7
|
export type { UpdateSkillInput } from "./skills";
|
|
8
8
|
export type { CreateTemplateInput, UpdateTemplateInput } from "./templates";
|
|
9
|
+
export type { TerminalHostEvent, TerminalSessionOperation, TerminalSessionRequest, TerminalSessionResult, } from "./terminal";
|
|
9
10
|
export type { CreateWorkspaceInput, RemoveWorktreeResponse, RenameWorkspaceInput } from "./workspaces";
|
package/dist/api/index.js
CHANGED
|
@@ -13636,11 +13636,12 @@ var sessionEvents = {
|
|
|
13636
13636
|
};
|
|
13637
13637
|
var workspaceEvents = {
|
|
13638
13638
|
created: eventRef("workspace.created"),
|
|
13639
|
+
provision: eventRef("workspace.provision"),
|
|
13640
|
+
ready: eventRef("workspace.ready"),
|
|
13639
13641
|
archived: eventRef("workspace.archived"),
|
|
13640
13642
|
deleted: eventRef("workspace.deleted")
|
|
13641
13643
|
};
|
|
13642
13644
|
var worktreeEvents = {
|
|
13643
|
-
created: eventRef("worktree.created"),
|
|
13644
13645
|
removed: eventRef("worktree.removed")
|
|
13645
13646
|
};
|
|
13646
13647
|
var gitEvents = {
|
|
@@ -13678,6 +13679,7 @@ var WEBVIEW_DECLARABLE_CAPABILITIES = [
|
|
|
13678
13679
|
"extension.settings.get",
|
|
13679
13680
|
"extension.settings.set",
|
|
13680
13681
|
"extension.settings.delete",
|
|
13682
|
+
"terminal.session",
|
|
13681
13683
|
"files.upload",
|
|
13682
13684
|
"files.list",
|
|
13683
13685
|
"files.delete"
|
|
@@ -13961,6 +13963,21 @@ var extensionCommandPaletteContributionSchema = exports_external.object({
|
|
|
13961
13963
|
when: extensionWhenExpressionSchema.optional()
|
|
13962
13964
|
});
|
|
13963
13965
|
|
|
13966
|
+
// ../pstdio-api-contracts/src/extensions/controls-renderer.ts
|
|
13967
|
+
var extensionControlsRendererRecordSchema = exports_external.object({
|
|
13968
|
+
id: exports_external.string(),
|
|
13969
|
+
extensionId: exports_external.string(),
|
|
13970
|
+
title: localizableStringSchema,
|
|
13971
|
+
queryCommandId: exports_external.string(),
|
|
13972
|
+
updateValueCommandId: exports_external.string().optional(),
|
|
13973
|
+
applyCommandId: exports_external.string().optional(),
|
|
13974
|
+
resetCommandId: exports_external.string().optional(),
|
|
13975
|
+
refreshEventIds: exports_external.array(exports_external.string()).optional(),
|
|
13976
|
+
defaultValues: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
13977
|
+
emptyTitle: localizableStringSchema.optional(),
|
|
13978
|
+
emptyDescription: localizableStringSchema.optional()
|
|
13979
|
+
});
|
|
13980
|
+
|
|
13964
13981
|
// ../pstdio-api-contracts/src/extensions/data-renderer.ts
|
|
13965
13982
|
var dataRendererEnumOptionSchema = exports_external.object({
|
|
13966
13983
|
value: exports_external.string(),
|
|
@@ -14131,8 +14148,8 @@ var workbenchExtensionSettingsPanelRecordSchema = extensionSettingsPanelRecordSc
|
|
|
14131
14148
|
});
|
|
14132
14149
|
|
|
14133
14150
|
// ../pstdio-api-contracts/src/extensions/views.ts
|
|
14134
|
-
var hasSingleViewBody = (value) => [value.webview, value.treeRendererId, value.fileRendererId].filter(Boolean).length === 1;
|
|
14135
|
-
var singleViewBodyMessage = "Extension views must declare exactly one body: webview, treeRendererId, or
|
|
14151
|
+
var hasSingleViewBody = (value) => [value.webview, value.treeRendererId, value.fileRendererId, value.controlsRendererId].filter(Boolean).length === 1;
|
|
14152
|
+
var singleViewBodyMessage = "Extension views must declare exactly one body: webview, treeRendererId, fileRendererId, or controlsRendererId";
|
|
14136
14153
|
var hostTreeDefaultSchema = exports_external.enum(["default", "none"]);
|
|
14137
14154
|
var extensionViewRecordBaseSchema = exports_external.object({
|
|
14138
14155
|
id: exports_external.string(),
|
|
@@ -14147,6 +14164,7 @@ var extensionViewRecordBaseSchema = exports_external.object({
|
|
|
14147
14164
|
webview: extensionWebviewContributionSchema.optional(),
|
|
14148
14165
|
treeRendererId: exports_external.string().optional(),
|
|
14149
14166
|
fileRendererId: exports_external.string().optional(),
|
|
14167
|
+
controlsRendererId: exports_external.string().optional(),
|
|
14150
14168
|
hostTreeHeader: hostTreeDefaultSchema.optional(),
|
|
14151
14169
|
hostTreeFooter: hostTreeDefaultSchema.optional()
|
|
14152
14170
|
});
|
|
@@ -14263,6 +14281,7 @@ var extensionsCheckResponseSchema = exports_external.object({
|
|
|
14263
14281
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema),
|
|
14264
14282
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema),
|
|
14265
14283
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema),
|
|
14284
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema),
|
|
14266
14285
|
keybindings: exports_external.array(extensionKeybindingRecordSchema),
|
|
14267
14286
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14268
14287
|
templates: exports_external.array(extensionViewLikeSchema),
|
|
@@ -14284,6 +14303,7 @@ var workbenchExtensionMetadataSchema = exports_external.object({
|
|
|
14284
14303
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema).optional(),
|
|
14285
14304
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema).optional(),
|
|
14286
14305
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema).optional(),
|
|
14306
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema).optional(),
|
|
14287
14307
|
keybindings: exports_external.array(extensionKeybindingRecordSchema).optional(),
|
|
14288
14308
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14289
14309
|
diagnostics: exports_external.array(extensionDiagnosticSchema)
|
|
@@ -14328,6 +14348,7 @@ var extensionAttachmentInvocationSchema = exports_external.object({
|
|
|
14328
14348
|
});
|
|
14329
14349
|
var commandExecuteRequestSchema = exports_external.object({
|
|
14330
14350
|
projectId: exports_external.string().min(1),
|
|
14351
|
+
workspaceId: exports_external.string().optional(),
|
|
14331
14352
|
params: jsonObjectSchema.optional(),
|
|
14332
14353
|
resource: extensionResourceRefSchema.optional(),
|
|
14333
14354
|
attachment: extensionAttachmentInvocationSchema.optional(),
|
|
@@ -14337,6 +14358,7 @@ var commandExecuteRequestSchema = exports_external.object({
|
|
|
14337
14358
|
metadata: jsonObjectSchema.optional()
|
|
14338
14359
|
});
|
|
14339
14360
|
var commandExecuteBodySchema = exports_external.object({
|
|
14361
|
+
workspaceId: exports_external.string().optional(),
|
|
14340
14362
|
params: jsonObjectSchema.optional(),
|
|
14341
14363
|
resource: extensionResourceRefSchema.optional(),
|
|
14342
14364
|
attachment: extensionAttachmentInvocationSchema.optional(),
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface TerminalSessionRequest {
|
|
2
|
+
/** Command + args to run; defaults to the user's login shell when omitted. */
|
|
3
|
+
command?: string[];
|
|
4
|
+
/** Working directory; falls back to the extension's workspace root. */
|
|
5
|
+
cwd?: string;
|
|
6
|
+
/** Extra env vars merged over the inherited environment. */
|
|
7
|
+
env?: Record<string, string>;
|
|
8
|
+
/** Initial column count; the renderer can resize later. */
|
|
9
|
+
cols: number;
|
|
10
|
+
/** Initial row count; the renderer can resize later. */
|
|
11
|
+
rows: number;
|
|
12
|
+
}
|
|
13
|
+
export type TerminalSessionOperation = {
|
|
14
|
+
operation: "open";
|
|
15
|
+
request: TerminalSessionRequest;
|
|
16
|
+
} | {
|
|
17
|
+
operation: "write";
|
|
18
|
+
sessionId: string;
|
|
19
|
+
data: string | Uint8Array;
|
|
20
|
+
} | {
|
|
21
|
+
operation: "resize";
|
|
22
|
+
sessionId: string;
|
|
23
|
+
cols: number;
|
|
24
|
+
rows: number;
|
|
25
|
+
} | {
|
|
26
|
+
operation: "kill";
|
|
27
|
+
sessionId: string;
|
|
28
|
+
signal?: string;
|
|
29
|
+
} | {
|
|
30
|
+
operation: "subscribe";
|
|
31
|
+
sessionId: string;
|
|
32
|
+
};
|
|
33
|
+
export type TerminalSessionResult = {
|
|
34
|
+
operation: "open";
|
|
35
|
+
sessionId: string;
|
|
36
|
+
} | {
|
|
37
|
+
operation: "write" | "resize" | "kill" | "subscribe";
|
|
38
|
+
accepted: true;
|
|
39
|
+
};
|
|
40
|
+
export type TerminalHostEvent = {
|
|
41
|
+
sessionId: string;
|
|
42
|
+
kind: "data";
|
|
43
|
+
chunk: Uint8Array;
|
|
44
|
+
} | {
|
|
45
|
+
sessionId: string;
|
|
46
|
+
kind: "exit";
|
|
47
|
+
code: number | null;
|
|
48
|
+
signal: string | null;
|
|
49
|
+
};
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export type GuestHost = {
|
|
12
12
|
call: <TResult = unknown>(method: string, params?: unknown) => Promise<TResult>;
|
|
13
|
+
/** Subscribe to host-pushed events for a capability scope (e.g. "terminal.session"). */
|
|
14
|
+
onEvent: (scope: string, handler: (payload: unknown) => void) => () => void;
|
|
13
15
|
};
|
|
14
16
|
export type PropsStore<TProps = unknown> = {
|
|
15
17
|
get: () => TProps;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type { CreateNotificationInput, ListNotificationsQuery, ListNotificationsResponse, Notification, NotificationAction, NotificationActionResult, NotificationActorType, NotificationKind, NotificationOrigin, NotificationPriority, NotificationStatus, UpdateNotificationInput, } from "pstdio-api-contracts";
|
|
2
2
|
export type * from "pstdio-api-contracts/extension-kernel";
|
|
3
|
-
export type { CommitPayload, ConflictPayload, MergePayload, RebasePayload, SessionLifecyclePayload,
|
|
3
|
+
export type { CommitPayload, ConflictPayload, MergePayload, RebasePayload, SessionLifecyclePayload, WorkspaceProvisionPayload, WorkspaceType, WorktreeRemovedPayload, } from "pstdio-api-contracts/extension-kernel";
|
|
4
4
|
export { ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES, EXTENSION_API_VERSION, getWorkbenchTargetDefinition, gitEvents, isLocalizedString, type Localizable, type LocalizedString, l10n, packageAsset, projectEvents, projectSlots, sessionEvents, sessionSlots, WEBVIEW_DECLARABLE_CAPABILITIES, WEBVIEW_HOST_CAPABILITIES, WEBVIEW_HOST_CAPABILITY_VERSION, type WorkbenchAttachmentTarget, type WorkbenchContributionKind, type WorkbenchLayoutTarget, type WorkbenchMenuTarget, type WorkbenchModeLayoutTarget, type WorkbenchSettingsScope, type WorkbenchSettingsTarget, type WorkbenchTargetDefinition, type WorkbenchTargetGranularity, type WorkbenchTreeTarget, type WorkbenchViewTarget, workbenchMenuTargets, workbenchModeLayoutTargets, workbenchSettingsScopes, workbenchSettingsTargets, workbenchTargets, workbenchTreeTargets, workbenchViewTargets, workspaceEvents, workspaceSlots, worktreeEvents, } from "pstdio-api-contracts/extension-kernel";
|
|
5
5
|
export { type CommandResponse, unwrapCommandOutcome } from "./command-outcome";
|
|
6
6
|
export { defineCommand, defineHook, defineMiddleware } from "./define-command";
|
|
@@ -8,4 +8,5 @@ export { defineExtension } from "./define-extension";
|
|
|
8
8
|
export { defineExtensionView, type ExtensionViewModule, type ExtensionViewRender, type ExtensionViewRenderContext, type GuestHost, type PropsStore, type WebviewFilesClient, } from "./define-extension-view";
|
|
9
9
|
export { params } from "./params";
|
|
10
10
|
export { commandEvent, commandRef, commandsOf, eventRef } from "./refs";
|
|
11
|
+
export { createTerminalSessionBridge, type TerminalSessionAdapter, type TerminalSessionBridge, type TerminalSessionExit, } from "./terminal-session-bridge";
|
|
11
12
|
export { matchesResourceWhen } from "./when";
|
package/dist/extensions/index.js
CHANGED
|
@@ -56,11 +56,12 @@ var sessionEvents = {
|
|
|
56
56
|
};
|
|
57
57
|
var workspaceEvents = {
|
|
58
58
|
created: eventRef("workspace.created"),
|
|
59
|
+
provision: eventRef("workspace.provision"),
|
|
60
|
+
ready: eventRef("workspace.ready"),
|
|
59
61
|
archived: eventRef("workspace.archived"),
|
|
60
62
|
deleted: eventRef("workspace.deleted")
|
|
61
63
|
};
|
|
62
64
|
var worktreeEvents = {
|
|
63
|
-
created: eventRef("worktree.created"),
|
|
64
65
|
removed: eventRef("worktree.removed")
|
|
65
66
|
};
|
|
66
67
|
var gitEvents = {
|
|
@@ -98,6 +99,7 @@ var WEBVIEW_DECLARABLE_CAPABILITIES = [
|
|
|
98
99
|
"extension.settings.get",
|
|
99
100
|
"extension.settings.set",
|
|
100
101
|
"extension.settings.delete",
|
|
102
|
+
"terminal.session",
|
|
101
103
|
"files.upload",
|
|
102
104
|
"files.list",
|
|
103
105
|
"files.delete"
|
|
@@ -308,6 +310,78 @@ var commandsOf = (packageName, extension) => {
|
|
|
308
310
|
}
|
|
309
311
|
return refs;
|
|
310
312
|
};
|
|
313
|
+
// src/extensions/terminal-session-bridge.ts
|
|
314
|
+
var TERMINAL_SESSION_CAPABILITY = "terminal.session";
|
|
315
|
+
var createTerminalSessionBridge = (host) => ({
|
|
316
|
+
async openSession(request) {
|
|
317
|
+
const call = (operation) => host.call(TERMINAL_SESSION_CAPABILITY, operation);
|
|
318
|
+
const opened = await call({ operation: "open", request });
|
|
319
|
+
const sessionId = opened.sessionId;
|
|
320
|
+
const dataHandlers = new Set;
|
|
321
|
+
const exitHandlers = new Set;
|
|
322
|
+
const errorHandlers = new Set;
|
|
323
|
+
const callDetached = (operation) => {
|
|
324
|
+
call(operation).catch((error) => {
|
|
325
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
326
|
+
for (const handler of errorHandlers)
|
|
327
|
+
handler({ message });
|
|
328
|
+
});
|
|
329
|
+
};
|
|
330
|
+
const pendingData = [];
|
|
331
|
+
let pendingExit = null;
|
|
332
|
+
const unsubscribeHostEvents = host.onEvent(TERMINAL_SESSION_CAPABILITY, (payload) => {
|
|
333
|
+
const event = payload;
|
|
334
|
+
if (event.sessionId !== sessionId)
|
|
335
|
+
return;
|
|
336
|
+
if (event.kind === "data") {
|
|
337
|
+
if (dataHandlers.size === 0) {
|
|
338
|
+
pendingData.push(event.chunk);
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
for (const handler of dataHandlers)
|
|
342
|
+
handler(event.chunk);
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const exit = { code: event.code, signal: event.signal };
|
|
346
|
+
if (exitHandlers.size === 0)
|
|
347
|
+
pendingExit = exit;
|
|
348
|
+
for (const handler of exitHandlers)
|
|
349
|
+
handler(exit);
|
|
350
|
+
unsubscribeHostEvents();
|
|
351
|
+
});
|
|
352
|
+
await call({ operation: "subscribe", sessionId });
|
|
353
|
+
return {
|
|
354
|
+
id: sessionId,
|
|
355
|
+
write(data) {
|
|
356
|
+
callDetached({ operation: "write", sessionId, data });
|
|
357
|
+
},
|
|
358
|
+
resize(cols, rows) {
|
|
359
|
+
callDetached({ operation: "resize", sessionId, cols, rows });
|
|
360
|
+
},
|
|
361
|
+
async kill(signal) {
|
|
362
|
+
await call({ operation: "kill", sessionId, signal });
|
|
363
|
+
},
|
|
364
|
+
onData(handler) {
|
|
365
|
+
dataHandlers.add(handler);
|
|
366
|
+
while (pendingData.length > 0)
|
|
367
|
+
handler(pendingData.shift());
|
|
368
|
+
return () => dataHandlers.delete(handler);
|
|
369
|
+
},
|
|
370
|
+
onExit(handler) {
|
|
371
|
+
exitHandlers.add(handler);
|
|
372
|
+
if (pendingExit) {
|
|
373
|
+
handler(pendingExit);
|
|
374
|
+
pendingExit = null;
|
|
375
|
+
}
|
|
376
|
+
return () => exitHandlers.delete(handler);
|
|
377
|
+
},
|
|
378
|
+
onError(handler) {
|
|
379
|
+
errorHandlers.add(handler);
|
|
380
|
+
return () => errorHandlers.delete(handler);
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
});
|
|
311
385
|
// src/extensions/when.ts
|
|
312
386
|
var matchesResourceWhen = (when, resourceType) => {
|
|
313
387
|
const resourceTypes = when?.resourceType;
|
|
@@ -344,6 +418,7 @@ export {
|
|
|
344
418
|
defineExtensionView,
|
|
345
419
|
defineExtension,
|
|
346
420
|
defineCommand,
|
|
421
|
+
createTerminalSessionBridge,
|
|
347
422
|
commandsOf,
|
|
348
423
|
commandRef,
|
|
349
424
|
commandEvent,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { TerminalSessionRequest } from "../api/terminal";
|
|
2
|
+
import type { GuestHost } from "./define-extension-view";
|
|
3
|
+
export interface TerminalSessionExit {
|
|
4
|
+
code: number | null;
|
|
5
|
+
signal: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Renderer-side session over the `terminal.session` capability. Structurally
|
|
9
|
+
* compatible with the `TerminalSessionAdapter` contract of `@pstdio/ui/terminal`,
|
|
10
|
+
* so it plugs straight into the `Terminal` component's `bridge` prop.
|
|
11
|
+
*/
|
|
12
|
+
export interface TerminalSessionAdapter {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
write(data: string | Uint8Array): void;
|
|
15
|
+
resize(cols: number, rows: number): void;
|
|
16
|
+
kill(signal?: string): Promise<void>;
|
|
17
|
+
onData(handler: (chunk: Uint8Array) => void): () => void;
|
|
18
|
+
onExit(handler: (exit: TerminalSessionExit) => void): () => void;
|
|
19
|
+
onError(handler: (error: {
|
|
20
|
+
message: string;
|
|
21
|
+
}) => void): () => void;
|
|
22
|
+
}
|
|
23
|
+
export interface TerminalSessionBridge {
|
|
24
|
+
openSession(request: TerminalSessionRequest): Promise<TerminalSessionAdapter>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Builds a terminal bridge for an extension webview from its `GuestHost`.
|
|
28
|
+
* Operations go through `host.call("terminal.session", ...)`; output and exit
|
|
29
|
+
* events arrive through the host event channel. The webview must declare the
|
|
30
|
+
* `terminal.session` capability or every call is rejected by the host gate.
|
|
31
|
+
*/
|
|
32
|
+
export declare const createTerminalSessionBridge: (host: GuestHost) => TerminalSessionBridge;
|
package/dist/resources/index.js
CHANGED
|
@@ -13636,11 +13636,12 @@ var sessionEvents = {
|
|
|
13636
13636
|
};
|
|
13637
13637
|
var workspaceEvents = {
|
|
13638
13638
|
created: eventRef("workspace.created"),
|
|
13639
|
+
provision: eventRef("workspace.provision"),
|
|
13640
|
+
ready: eventRef("workspace.ready"),
|
|
13639
13641
|
archived: eventRef("workspace.archived"),
|
|
13640
13642
|
deleted: eventRef("workspace.deleted")
|
|
13641
13643
|
};
|
|
13642
13644
|
var worktreeEvents = {
|
|
13643
|
-
created: eventRef("worktree.created"),
|
|
13644
13645
|
removed: eventRef("worktree.removed")
|
|
13645
13646
|
};
|
|
13646
13647
|
var gitEvents = {
|
|
@@ -13678,6 +13679,7 @@ var WEBVIEW_DECLARABLE_CAPABILITIES = [
|
|
|
13678
13679
|
"extension.settings.get",
|
|
13679
13680
|
"extension.settings.set",
|
|
13680
13681
|
"extension.settings.delete",
|
|
13682
|
+
"terminal.session",
|
|
13681
13683
|
"files.upload",
|
|
13682
13684
|
"files.list",
|
|
13683
13685
|
"files.delete"
|
|
@@ -13961,6 +13963,21 @@ var extensionCommandPaletteContributionSchema = exports_external.object({
|
|
|
13961
13963
|
when: extensionWhenExpressionSchema.optional()
|
|
13962
13964
|
});
|
|
13963
13965
|
|
|
13966
|
+
// ../pstdio-api-contracts/src/extensions/controls-renderer.ts
|
|
13967
|
+
var extensionControlsRendererRecordSchema = exports_external.object({
|
|
13968
|
+
id: exports_external.string(),
|
|
13969
|
+
extensionId: exports_external.string(),
|
|
13970
|
+
title: localizableStringSchema,
|
|
13971
|
+
queryCommandId: exports_external.string(),
|
|
13972
|
+
updateValueCommandId: exports_external.string().optional(),
|
|
13973
|
+
applyCommandId: exports_external.string().optional(),
|
|
13974
|
+
resetCommandId: exports_external.string().optional(),
|
|
13975
|
+
refreshEventIds: exports_external.array(exports_external.string()).optional(),
|
|
13976
|
+
defaultValues: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
13977
|
+
emptyTitle: localizableStringSchema.optional(),
|
|
13978
|
+
emptyDescription: localizableStringSchema.optional()
|
|
13979
|
+
});
|
|
13980
|
+
|
|
13964
13981
|
// ../pstdio-api-contracts/src/extensions/data-renderer.ts
|
|
13965
13982
|
var dataRendererEnumOptionSchema = exports_external.object({
|
|
13966
13983
|
value: exports_external.string(),
|
|
@@ -14131,8 +14148,8 @@ var workbenchExtensionSettingsPanelRecordSchema = extensionSettingsPanelRecordSc
|
|
|
14131
14148
|
});
|
|
14132
14149
|
|
|
14133
14150
|
// ../pstdio-api-contracts/src/extensions/views.ts
|
|
14134
|
-
var hasSingleViewBody = (value) => [value.webview, value.treeRendererId, value.fileRendererId].filter(Boolean).length === 1;
|
|
14135
|
-
var singleViewBodyMessage = "Extension views must declare exactly one body: webview, treeRendererId, or
|
|
14151
|
+
var hasSingleViewBody = (value) => [value.webview, value.treeRendererId, value.fileRendererId, value.controlsRendererId].filter(Boolean).length === 1;
|
|
14152
|
+
var singleViewBodyMessage = "Extension views must declare exactly one body: webview, treeRendererId, fileRendererId, or controlsRendererId";
|
|
14136
14153
|
var hostTreeDefaultSchema = exports_external.enum(["default", "none"]);
|
|
14137
14154
|
var extensionViewRecordBaseSchema = exports_external.object({
|
|
14138
14155
|
id: exports_external.string(),
|
|
@@ -14147,6 +14164,7 @@ var extensionViewRecordBaseSchema = exports_external.object({
|
|
|
14147
14164
|
webview: extensionWebviewContributionSchema.optional(),
|
|
14148
14165
|
treeRendererId: exports_external.string().optional(),
|
|
14149
14166
|
fileRendererId: exports_external.string().optional(),
|
|
14167
|
+
controlsRendererId: exports_external.string().optional(),
|
|
14150
14168
|
hostTreeHeader: hostTreeDefaultSchema.optional(),
|
|
14151
14169
|
hostTreeFooter: hostTreeDefaultSchema.optional()
|
|
14152
14170
|
});
|
|
@@ -14263,6 +14281,7 @@ var extensionsCheckResponseSchema = exports_external.object({
|
|
|
14263
14281
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema),
|
|
14264
14282
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema),
|
|
14265
14283
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema),
|
|
14284
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema),
|
|
14266
14285
|
keybindings: exports_external.array(extensionKeybindingRecordSchema),
|
|
14267
14286
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14268
14287
|
templates: exports_external.array(extensionViewLikeSchema),
|
|
@@ -14284,6 +14303,7 @@ var workbenchExtensionMetadataSchema = exports_external.object({
|
|
|
14284
14303
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema).optional(),
|
|
14285
14304
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema).optional(),
|
|
14286
14305
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema).optional(),
|
|
14306
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema).optional(),
|
|
14287
14307
|
keybindings: exports_external.array(extensionKeybindingRecordSchema).optional(),
|
|
14288
14308
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14289
14309
|
diagnostics: exports_external.array(extensionDiagnosticSchema)
|
|
@@ -14328,6 +14348,7 @@ var extensionAttachmentInvocationSchema = exports_external.object({
|
|
|
14328
14348
|
});
|
|
14329
14349
|
var commandExecuteRequestSchema = exports_external.object({
|
|
14330
14350
|
projectId: exports_external.string().min(1),
|
|
14351
|
+
workspaceId: exports_external.string().optional(),
|
|
14331
14352
|
params: jsonObjectSchema.optional(),
|
|
14332
14353
|
resource: extensionResourceRefSchema.optional(),
|
|
14333
14354
|
attachment: extensionAttachmentInvocationSchema.optional(),
|
|
@@ -14337,6 +14358,7 @@ var commandExecuteRequestSchema = exports_external.object({
|
|
|
14337
14358
|
metadata: jsonObjectSchema.optional()
|
|
14338
14359
|
});
|
|
14339
14360
|
var commandExecuteBodySchema = exports_external.object({
|
|
14361
|
+
workspaceId: exports_external.string().optional(),
|
|
14340
14362
|
params: jsonObjectSchema.optional(),
|
|
14341
14363
|
resource: extensionResourceRefSchema.optional(),
|
|
14342
14364
|
attachment: extensionAttachmentInvocationSchema.optional(),
|