@pstdio/sdk 0.13.2 → 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 +3 -1
- package/dist/api/index.js +36 -4
- package/dist/api/terminal.d.ts +49 -0
- package/dist/client/client.d.ts +2 -0
- package/dist/client/extensions.d.ts +2 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.js +46 -1
- package/dist/client/notifications.d.ts +23 -0
- package/dist/extensions/define-extension-view.d.ts +2 -0
- package/dist/extensions/index.d.ts +3 -1
- package/dist/extensions/index.js +79 -1
- package/dist/extensions/terminal-session-bridge.d.ts +32 -0
- package/dist/resources/index.js +36 -4
- 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,8 +1,10 @@
|
|
|
1
|
-
export type {
|
|
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, 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";
|
|
2
3
|
export type { CreateProjectInput, RegisterRepoInput } from "./projects";
|
|
3
4
|
export type { ApprovalInput, CreateSessionInput, FollowUpInput, ResolveSessionIdInput, ResolveSessionIdResponse, SessionAttachment, SessionAttachmentRef, SessionConversationResponse, } from "./sessions";
|
|
4
5
|
export { sessionAttachmentMimeTypesByExtension } from "./sessions";
|
|
5
6
|
export type { Settings, UpdateSettingsInput } from "./settings";
|
|
6
7
|
export type { UpdateSkillInput } from "./skills";
|
|
7
8
|
export type { CreateTemplateInput, UpdateTemplateInput } from "./templates";
|
|
9
|
+
export type { TerminalHostEvent, TerminalSessionOperation, TerminalSessionRequest, TerminalSessionResult, } from "./terminal";
|
|
8
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 = {
|
|
@@ -13669,12 +13670,16 @@ var WEBVIEW_DECLARABLE_CAPABILITIES = [
|
|
|
13669
13670
|
"commands.execute",
|
|
13670
13671
|
"resource.open",
|
|
13671
13672
|
"notification.show",
|
|
13673
|
+
"notification.action",
|
|
13674
|
+
"notification.resolve",
|
|
13675
|
+
"notification.dismiss",
|
|
13672
13676
|
"preferences.get",
|
|
13673
13677
|
"preferences.set",
|
|
13674
13678
|
"extension.settings.all",
|
|
13675
13679
|
"extension.settings.get",
|
|
13676
13680
|
"extension.settings.set",
|
|
13677
13681
|
"extension.settings.delete",
|
|
13682
|
+
"terminal.session",
|
|
13678
13683
|
"files.upload",
|
|
13679
13684
|
"files.list",
|
|
13680
13685
|
"files.delete"
|
|
@@ -13958,6 +13963,21 @@ var extensionCommandPaletteContributionSchema = exports_external.object({
|
|
|
13958
13963
|
when: extensionWhenExpressionSchema.optional()
|
|
13959
13964
|
});
|
|
13960
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
|
+
|
|
13961
13981
|
// ../pstdio-api-contracts/src/extensions/data-renderer.ts
|
|
13962
13982
|
var dataRendererEnumOptionSchema = exports_external.object({
|
|
13963
13983
|
value: exports_external.string(),
|
|
@@ -14128,8 +14148,9 @@ var workbenchExtensionSettingsPanelRecordSchema = extensionSettingsPanelRecordSc
|
|
|
14128
14148
|
});
|
|
14129
14149
|
|
|
14130
14150
|
// ../pstdio-api-contracts/src/extensions/views.ts
|
|
14131
|
-
var hasSingleViewBody = (value) => [value.webview, value.treeRendererId, value.fileRendererId].filter(Boolean).length === 1;
|
|
14132
|
-
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";
|
|
14153
|
+
var hostTreeDefaultSchema = exports_external.enum(["default", "none"]);
|
|
14133
14154
|
var extensionViewRecordBaseSchema = exports_external.object({
|
|
14134
14155
|
id: exports_external.string(),
|
|
14135
14156
|
extensionId: exports_external.string(),
|
|
@@ -14142,7 +14163,10 @@ var extensionViewRecordBaseSchema = exports_external.object({
|
|
|
14142
14163
|
surface: exports_external.enum(["panel", "modal"]).optional(),
|
|
14143
14164
|
webview: extensionWebviewContributionSchema.optional(),
|
|
14144
14165
|
treeRendererId: exports_external.string().optional(),
|
|
14145
|
-
fileRendererId: exports_external.string().optional()
|
|
14166
|
+
fileRendererId: exports_external.string().optional(),
|
|
14167
|
+
controlsRendererId: exports_external.string().optional(),
|
|
14168
|
+
hostTreeHeader: hostTreeDefaultSchema.optional(),
|
|
14169
|
+
hostTreeFooter: hostTreeDefaultSchema.optional()
|
|
14146
14170
|
});
|
|
14147
14171
|
var extensionViewRecordSchema = extensionViewRecordBaseSchema.refine(hasSingleViewBody, {
|
|
14148
14172
|
message: singleViewBodyMessage
|
|
@@ -14257,6 +14281,7 @@ var extensionsCheckResponseSchema = exports_external.object({
|
|
|
14257
14281
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema),
|
|
14258
14282
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema),
|
|
14259
14283
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema),
|
|
14284
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema),
|
|
14260
14285
|
keybindings: exports_external.array(extensionKeybindingRecordSchema),
|
|
14261
14286
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14262
14287
|
templates: exports_external.array(extensionViewLikeSchema),
|
|
@@ -14278,6 +14303,7 @@ var workbenchExtensionMetadataSchema = exports_external.object({
|
|
|
14278
14303
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema).optional(),
|
|
14279
14304
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema).optional(),
|
|
14280
14305
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema).optional(),
|
|
14306
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema).optional(),
|
|
14281
14307
|
keybindings: exports_external.array(extensionKeybindingRecordSchema).optional(),
|
|
14282
14308
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14283
14309
|
diagnostics: exports_external.array(extensionDiagnosticSchema)
|
|
@@ -14322,6 +14348,7 @@ var extensionAttachmentInvocationSchema = exports_external.object({
|
|
|
14322
14348
|
});
|
|
14323
14349
|
var commandExecuteRequestSchema = exports_external.object({
|
|
14324
14350
|
projectId: exports_external.string().min(1),
|
|
14351
|
+
workspaceId: exports_external.string().optional(),
|
|
14325
14352
|
params: jsonObjectSchema.optional(),
|
|
14326
14353
|
resource: extensionResourceRefSchema.optional(),
|
|
14327
14354
|
attachment: extensionAttachmentInvocationSchema.optional(),
|
|
@@ -14331,6 +14358,7 @@ var commandExecuteRequestSchema = exports_external.object({
|
|
|
14331
14358
|
metadata: jsonObjectSchema.optional()
|
|
14332
14359
|
});
|
|
14333
14360
|
var commandExecuteBodySchema = exports_external.object({
|
|
14361
|
+
workspaceId: exports_external.string().optional(),
|
|
14334
14362
|
params: jsonObjectSchema.optional(),
|
|
14335
14363
|
resource: extensionResourceRefSchema.optional(),
|
|
14336
14364
|
attachment: extensionAttachmentInvocationSchema.optional(),
|
|
@@ -14339,6 +14367,10 @@ var commandExecuteBodySchema = exports_external.object({
|
|
|
14339
14367
|
source: commandSourceSchema.optional(),
|
|
14340
14368
|
metadata: jsonObjectSchema.optional()
|
|
14341
14369
|
});
|
|
14370
|
+
var dispatchExtensionEventBodySchema = exports_external.object({
|
|
14371
|
+
eventId: exports_external.string().min(1),
|
|
14372
|
+
payload: jsonObjectSchema
|
|
14373
|
+
}).strict();
|
|
14342
14374
|
var serializedErrorSchema = exports_external.object({
|
|
14343
14375
|
name: exports_external.string().optional(),
|
|
14344
14376
|
message: exports_external.string(),
|
|
@@ -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
|
+
};
|
package/dist/client/client.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AgentClient } from "./agents";
|
|
2
2
|
import { type ExtensionClient } from "./extensions";
|
|
3
|
+
import { type NotificationsClient } from "./notifications";
|
|
3
4
|
import { type ProjectClient } from "./projects";
|
|
4
5
|
import type { ClientOptions } from "./request";
|
|
5
6
|
import { type SessionClient } from "./sessions";
|
|
@@ -15,6 +16,7 @@ export type PstdioClient = {
|
|
|
15
16
|
templates: TemplateClient;
|
|
16
17
|
skills: SkillClient;
|
|
17
18
|
agents: AgentClient;
|
|
19
|
+
notifications: NotificationsClient;
|
|
18
20
|
extensions: ExtensionClient;
|
|
19
21
|
settings: SettingsClient;
|
|
20
22
|
sync: SyncClient;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CommandExecuteRequest, CommandExecuteResponse, EnableInstalledExtensionRequest, EnableInstalledExtensionResponse, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, UpdateInstalledExtensionTemplateInput, UpdateInstalledExtensionTemplateResponse } from "pstdio-api-contracts";
|
|
1
|
+
import type { CommandExecuteRequest, CommandExecuteResponse, DispatchExtensionEventInput, EnableInstalledExtensionRequest, EnableInstalledExtensionResponse, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, UpdateInstalledExtensionTemplateInput, UpdateInstalledExtensionTemplateResponse } from "pstdio-api-contracts";
|
|
2
2
|
import type { RequestFn } from "./request";
|
|
3
3
|
export type ExtensionClient = {
|
|
4
4
|
enableInstalled(projectId: string, installName: string, request: EnableInstalledExtensionRequest): Promise<EnableInstalledExtensionResponse>;
|
|
@@ -6,5 +6,6 @@ export type ExtensionClient = {
|
|
|
6
6
|
listAppearance(projectId: string): Promise<ListExtensionAppearanceResponse>;
|
|
7
7
|
listCommands(projectId: string): Promise<ListExtensionCommandsResponse>;
|
|
8
8
|
execute(commandId: string, request: CommandExecuteRequest): Promise<CommandExecuteResponse>;
|
|
9
|
+
dispatchEvent(projectId: string, input: DispatchExtensionEventInput): Promise<void>;
|
|
9
10
|
};
|
|
10
11
|
export declare const createExtensionClient: (request: RequestFn) => ExtensionClient;
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { AgentClient } from "./agents";
|
|
2
2
|
export { createClient, type PstdioClient } from "./client";
|
|
3
3
|
export type { ExtensionClient } from "./extensions";
|
|
4
|
+
export type { NotificationsClient } from "./notifications";
|
|
4
5
|
export type { ProjectClient } from "./projects";
|
|
5
6
|
export { type ClientOptions, createRequest, PstdioApiError, type RequestFn, type RequestOptions, } from "./request";
|
|
6
7
|
export type { ListSessionsInput, SessionClient, SessionStreamConnection, SessionStreamHandlers } from "./sessions";
|
package/dist/client/index.js
CHANGED
|
@@ -37,7 +37,51 @@ var createExtensionClient = (request) => ({
|
|
|
37
37
|
method: "POST",
|
|
38
38
|
body
|
|
39
39
|
});
|
|
40
|
-
}
|
|
40
|
+
},
|
|
41
|
+
dispatchEvent: (projectId, body) => request(`/v1/projects/${projectId}/extensions/events/dispatch`, {
|
|
42
|
+
method: "POST",
|
|
43
|
+
body
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// src/client/notifications.ts
|
|
48
|
+
var appendArrayOrValue = (params, key, value) => {
|
|
49
|
+
if (value === undefined)
|
|
50
|
+
return;
|
|
51
|
+
params.set(key, Array.isArray(value) ? value.join(",") : value);
|
|
52
|
+
};
|
|
53
|
+
var buildQuery = (query = {}) => {
|
|
54
|
+
const params = new URLSearchParams;
|
|
55
|
+
appendArrayOrValue(params, "status", query.status);
|
|
56
|
+
appendArrayOrValue(params, "priority", query.priority);
|
|
57
|
+
if (query.sourceExtensionId)
|
|
58
|
+
params.set("sourceExtensionId", query.sourceExtensionId);
|
|
59
|
+
if (query.resourceType)
|
|
60
|
+
params.set("resourceType", query.resourceType);
|
|
61
|
+
if (query.resourceId)
|
|
62
|
+
params.set("resourceId", query.resourceId);
|
|
63
|
+
if (query.cursor)
|
|
64
|
+
params.set("cursor", query.cursor);
|
|
65
|
+
if (query.limit !== undefined)
|
|
66
|
+
params.set("limit", String(query.limit));
|
|
67
|
+
const value = params.toString();
|
|
68
|
+
return value ? `?${value}` : "";
|
|
69
|
+
};
|
|
70
|
+
var notificationPath = (projectId, suffix = "") => `/v1/projects/${encodeURIComponent(projectId)}/notifications${suffix}`;
|
|
71
|
+
var createNotificationsClient = (request) => ({
|
|
72
|
+
list: (projectId, query) => request(notificationPath(projectId, buildQuery(query))),
|
|
73
|
+
count: (projectId, query) => request(notificationPath(projectId, `/count${buildQuery(query)}`)),
|
|
74
|
+
get: (projectId, id) => request(notificationPath(projectId, `/${encodeURIComponent(id)}`)),
|
|
75
|
+
create: (input) => {
|
|
76
|
+
const { projectId, ...body } = input;
|
|
77
|
+
return request(notificationPath(projectId), { method: "POST", body });
|
|
78
|
+
},
|
|
79
|
+
update: (projectId, id, input) => request(notificationPath(projectId, `/${encodeURIComponent(id)}`), { method: "PATCH", body: input }),
|
|
80
|
+
markRead: (projectId, id) => request(notificationPath(projectId, `/${encodeURIComponent(id)}/read`), { method: "POST" }),
|
|
81
|
+
dismiss: (projectId, id) => request(notificationPath(projectId, `/${encodeURIComponent(id)}/dismiss`), { method: "POST" }),
|
|
82
|
+
markDone: (projectId, id) => request(notificationPath(projectId, `/${encodeURIComponent(id)}/done`), { method: "POST" }),
|
|
83
|
+
snooze: (projectId, id, until) => request(notificationPath(projectId, `/${encodeURIComponent(id)}/snooze`), { method: "POST", body: { until } }),
|
|
84
|
+
resolveByDedupeKey: (projectId, input) => request(notificationPath(projectId, "/resolve-by-dedupe-key"), { method: "POST", body: input })
|
|
41
85
|
});
|
|
42
86
|
|
|
43
87
|
// src/client/projects.ts
|
|
@@ -497,6 +541,7 @@ var createClient = (options = {}) => {
|
|
|
497
541
|
templates: createTemplateClient(request),
|
|
498
542
|
skills: createSkillClient(request),
|
|
499
543
|
agents: createAgentClient(request),
|
|
544
|
+
notifications: createNotificationsClient(request),
|
|
500
545
|
extensions: createExtensionClient(request),
|
|
501
546
|
settings: createSettingsClient(request),
|
|
502
547
|
sync: createSyncClient(options)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CreateNotificationInput, ListNotificationsQuery, ListNotificationsResponse, Notification, NotificationStatus, UpdateNotificationInput } from "pstdio-api-contracts";
|
|
2
|
+
import type { RequestFn } from "./request";
|
|
3
|
+
export type NotificationsClient = {
|
|
4
|
+
list(projectId: string, query?: ListNotificationsQuery): Promise<ListNotificationsResponse>;
|
|
5
|
+
count(projectId: string, query?: Pick<ListNotificationsQuery, "status" | "priority" | "sourceExtensionId">): Promise<{
|
|
6
|
+
count: number;
|
|
7
|
+
}>;
|
|
8
|
+
get(projectId: string, id: string): Promise<Notification>;
|
|
9
|
+
create(input: CreateNotificationInput): Promise<Notification>;
|
|
10
|
+
update(projectId: string, id: string, input: UpdateNotificationInput): Promise<Notification>;
|
|
11
|
+
markRead(projectId: string, id: string): Promise<Notification>;
|
|
12
|
+
dismiss(projectId: string, id: string): Promise<Notification>;
|
|
13
|
+
markDone(projectId: string, id: string): Promise<Notification>;
|
|
14
|
+
snooze(projectId: string, id: string, until: string): Promise<Notification>;
|
|
15
|
+
resolveByDedupeKey(projectId: string, input: {
|
|
16
|
+
dedupeKey: string;
|
|
17
|
+
status?: Extract<NotificationStatus, "done" | "dismissed" | "expired">;
|
|
18
|
+
}): Promise<{
|
|
19
|
+
resolved: number;
|
|
20
|
+
notifications: Notification[];
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
export declare const createNotificationsClient: (request: RequestFn) => NotificationsClient;
|
|
@@ -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,5 +1,6 @@
|
|
|
1
|
+
export type { CreateNotificationInput, ListNotificationsQuery, ListNotificationsResponse, Notification, NotificationAction, NotificationActionResult, NotificationActorType, NotificationKind, NotificationOrigin, NotificationPriority, NotificationStatus, UpdateNotificationInput, } from "pstdio-api-contracts";
|
|
1
2
|
export type * from "pstdio-api-contracts/extension-kernel";
|
|
2
|
-
export type { CommitPayload, ConflictPayload, MergePayload, RebasePayload, SessionLifecyclePayload,
|
|
3
|
+
export type { CommitPayload, ConflictPayload, MergePayload, RebasePayload, SessionLifecyclePayload, WorkspaceProvisionPayload, WorkspaceType, WorktreeRemovedPayload, } from "pstdio-api-contracts/extension-kernel";
|
|
3
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";
|
|
4
5
|
export { type CommandResponse, unwrapCommandOutcome } from "./command-outcome";
|
|
5
6
|
export { defineCommand, defineHook, defineMiddleware } from "./define-command";
|
|
@@ -7,4 +8,5 @@ export { defineExtension } from "./define-extension";
|
|
|
7
8
|
export { defineExtensionView, type ExtensionViewModule, type ExtensionViewRender, type ExtensionViewRenderContext, type GuestHost, type PropsStore, type WebviewFilesClient, } from "./define-extension-view";
|
|
8
9
|
export { params } from "./params";
|
|
9
10
|
export { commandEvent, commandRef, commandsOf, eventRef } from "./refs";
|
|
11
|
+
export { createTerminalSessionBridge, type TerminalSessionAdapter, type TerminalSessionBridge, type TerminalSessionExit, } from "./terminal-session-bridge";
|
|
10
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 = {
|
|
@@ -89,12 +90,16 @@ var WEBVIEW_DECLARABLE_CAPABILITIES = [
|
|
|
89
90
|
"commands.execute",
|
|
90
91
|
"resource.open",
|
|
91
92
|
"notification.show",
|
|
93
|
+
"notification.action",
|
|
94
|
+
"notification.resolve",
|
|
95
|
+
"notification.dismiss",
|
|
92
96
|
"preferences.get",
|
|
93
97
|
"preferences.set",
|
|
94
98
|
"extension.settings.all",
|
|
95
99
|
"extension.settings.get",
|
|
96
100
|
"extension.settings.set",
|
|
97
101
|
"extension.settings.delete",
|
|
102
|
+
"terminal.session",
|
|
98
103
|
"files.upload",
|
|
99
104
|
"files.list",
|
|
100
105
|
"files.delete"
|
|
@@ -305,6 +310,78 @@ var commandsOf = (packageName, extension) => {
|
|
|
305
310
|
}
|
|
306
311
|
return refs;
|
|
307
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
|
+
});
|
|
308
385
|
// src/extensions/when.ts
|
|
309
386
|
var matchesResourceWhen = (when, resourceType) => {
|
|
310
387
|
const resourceTypes = when?.resourceType;
|
|
@@ -341,6 +418,7 @@ export {
|
|
|
341
418
|
defineExtensionView,
|
|
342
419
|
defineExtension,
|
|
343
420
|
defineCommand,
|
|
421
|
+
createTerminalSessionBridge,
|
|
344
422
|
commandsOf,
|
|
345
423
|
commandRef,
|
|
346
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 = {
|
|
@@ -13669,12 +13670,16 @@ var WEBVIEW_DECLARABLE_CAPABILITIES = [
|
|
|
13669
13670
|
"commands.execute",
|
|
13670
13671
|
"resource.open",
|
|
13671
13672
|
"notification.show",
|
|
13673
|
+
"notification.action",
|
|
13674
|
+
"notification.resolve",
|
|
13675
|
+
"notification.dismiss",
|
|
13672
13676
|
"preferences.get",
|
|
13673
13677
|
"preferences.set",
|
|
13674
13678
|
"extension.settings.all",
|
|
13675
13679
|
"extension.settings.get",
|
|
13676
13680
|
"extension.settings.set",
|
|
13677
13681
|
"extension.settings.delete",
|
|
13682
|
+
"terminal.session",
|
|
13678
13683
|
"files.upload",
|
|
13679
13684
|
"files.list",
|
|
13680
13685
|
"files.delete"
|
|
@@ -13958,6 +13963,21 @@ var extensionCommandPaletteContributionSchema = exports_external.object({
|
|
|
13958
13963
|
when: extensionWhenExpressionSchema.optional()
|
|
13959
13964
|
});
|
|
13960
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
|
+
|
|
13961
13981
|
// ../pstdio-api-contracts/src/extensions/data-renderer.ts
|
|
13962
13982
|
var dataRendererEnumOptionSchema = exports_external.object({
|
|
13963
13983
|
value: exports_external.string(),
|
|
@@ -14128,8 +14148,9 @@ var workbenchExtensionSettingsPanelRecordSchema = extensionSettingsPanelRecordSc
|
|
|
14128
14148
|
});
|
|
14129
14149
|
|
|
14130
14150
|
// ../pstdio-api-contracts/src/extensions/views.ts
|
|
14131
|
-
var hasSingleViewBody = (value) => [value.webview, value.treeRendererId, value.fileRendererId].filter(Boolean).length === 1;
|
|
14132
|
-
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";
|
|
14153
|
+
var hostTreeDefaultSchema = exports_external.enum(["default", "none"]);
|
|
14133
14154
|
var extensionViewRecordBaseSchema = exports_external.object({
|
|
14134
14155
|
id: exports_external.string(),
|
|
14135
14156
|
extensionId: exports_external.string(),
|
|
@@ -14142,7 +14163,10 @@ var extensionViewRecordBaseSchema = exports_external.object({
|
|
|
14142
14163
|
surface: exports_external.enum(["panel", "modal"]).optional(),
|
|
14143
14164
|
webview: extensionWebviewContributionSchema.optional(),
|
|
14144
14165
|
treeRendererId: exports_external.string().optional(),
|
|
14145
|
-
fileRendererId: exports_external.string().optional()
|
|
14166
|
+
fileRendererId: exports_external.string().optional(),
|
|
14167
|
+
controlsRendererId: exports_external.string().optional(),
|
|
14168
|
+
hostTreeHeader: hostTreeDefaultSchema.optional(),
|
|
14169
|
+
hostTreeFooter: hostTreeDefaultSchema.optional()
|
|
14146
14170
|
});
|
|
14147
14171
|
var extensionViewRecordSchema = extensionViewRecordBaseSchema.refine(hasSingleViewBody, {
|
|
14148
14172
|
message: singleViewBodyMessage
|
|
@@ -14257,6 +14281,7 @@ var extensionsCheckResponseSchema = exports_external.object({
|
|
|
14257
14281
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema),
|
|
14258
14282
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema),
|
|
14259
14283
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema),
|
|
14284
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema),
|
|
14260
14285
|
keybindings: exports_external.array(extensionKeybindingRecordSchema),
|
|
14261
14286
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14262
14287
|
templates: exports_external.array(extensionViewLikeSchema),
|
|
@@ -14278,6 +14303,7 @@ var workbenchExtensionMetadataSchema = exports_external.object({
|
|
|
14278
14303
|
commandPaletteResources: exports_external.array(extensionCommandPaletteResourceRecordSchema).optional(),
|
|
14279
14304
|
treeRenderers: exports_external.array(extensionTreeRendererRecordSchema).optional(),
|
|
14280
14305
|
fileRenderers: exports_external.array(extensionFileRendererRecordSchema).optional(),
|
|
14306
|
+
controlsRenderers: exports_external.array(extensionControlsRendererRecordSchema).optional(),
|
|
14281
14307
|
keybindings: exports_external.array(extensionKeybindingRecordSchema).optional(),
|
|
14282
14308
|
settingsDefinitions: exports_external.array(extensionSettingDefinitionRecordSchema).optional(),
|
|
14283
14309
|
diagnostics: exports_external.array(extensionDiagnosticSchema)
|
|
@@ -14322,6 +14348,7 @@ var extensionAttachmentInvocationSchema = exports_external.object({
|
|
|
14322
14348
|
});
|
|
14323
14349
|
var commandExecuteRequestSchema = exports_external.object({
|
|
14324
14350
|
projectId: exports_external.string().min(1),
|
|
14351
|
+
workspaceId: exports_external.string().optional(),
|
|
14325
14352
|
params: jsonObjectSchema.optional(),
|
|
14326
14353
|
resource: extensionResourceRefSchema.optional(),
|
|
14327
14354
|
attachment: extensionAttachmentInvocationSchema.optional(),
|
|
@@ -14331,6 +14358,7 @@ var commandExecuteRequestSchema = exports_external.object({
|
|
|
14331
14358
|
metadata: jsonObjectSchema.optional()
|
|
14332
14359
|
});
|
|
14333
14360
|
var commandExecuteBodySchema = exports_external.object({
|
|
14361
|
+
workspaceId: exports_external.string().optional(),
|
|
14334
14362
|
params: jsonObjectSchema.optional(),
|
|
14335
14363
|
resource: extensionResourceRefSchema.optional(),
|
|
14336
14364
|
attachment: extensionAttachmentInvocationSchema.optional(),
|
|
@@ -14339,6 +14367,10 @@ var commandExecuteBodySchema = exports_external.object({
|
|
|
14339
14367
|
source: commandSourceSchema.optional(),
|
|
14340
14368
|
metadata: jsonObjectSchema.optional()
|
|
14341
14369
|
});
|
|
14370
|
+
var dispatchExtensionEventBodySchema = exports_external.object({
|
|
14371
|
+
eventId: exports_external.string().min(1),
|
|
14372
|
+
payload: jsonObjectSchema
|
|
14373
|
+
}).strict();
|
|
14342
14374
|
var serializedErrorSchema = exports_external.object({
|
|
14343
14375
|
name: exports_external.string().optional(),
|
|
14344
14376
|
message: exports_external.string(),
|