@pstdio/sdk 0.15.0 → 0.17.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 +1 -1
- package/dist/api/index.js +362 -161
- 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 +31 -7
- package/dist/client/runtime.d.ts +5 -0
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.js +29 -26
- package/dist/extensions/params.d.ts +3 -1
- package/dist/resources/index.js +362 -161
- package/package.json +1 -1
package/dist/client/client.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { type ExtensionClient } from "./extensions";
|
|
|
3
3
|
import { type NotificationsClient } from "./notifications";
|
|
4
4
|
import { type ProjectClient } from "./projects";
|
|
5
5
|
import type { ClientOptions } from "./request";
|
|
6
|
+
import { type RuntimeClient } from "./runtime";
|
|
6
7
|
import { type SessionClient } from "./sessions";
|
|
7
8
|
import { type SettingsClient } from "./settings";
|
|
8
9
|
import { type SkillClient } from "./skills";
|
|
@@ -20,5 +21,6 @@ export type PstdioClient = {
|
|
|
20
21
|
extensions: ExtensionClient;
|
|
21
22
|
settings: SettingsClient;
|
|
22
23
|
sync: SyncClient;
|
|
24
|
+
runtime: RuntimeClient;
|
|
23
25
|
};
|
|
24
26
|
export declare const createClient: (options?: ClientOptions) => PstdioClient;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { CommandExecuteRequest, CommandExecuteResponse, DispatchExtensionEventInput, EnableInstalledExtensionRequest, EnableInstalledExtensionResponse, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, UpdateInstalledExtensionTemplateInput, UpdateInstalledExtensionTemplateResponse } from "pstdio-api-contracts";
|
|
1
|
+
import type { CommandExecuteRequest, CommandExecuteResponse, DispatchExtensionEventInput, EnableInstalledExtensionRequest, EnableInstalledExtensionResponse, ListExtensionAppearanceResponse, ListExtensionCommandsResponse, ListProjectExtensionsResponse, 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>;
|
|
5
5
|
updateInstalledTemplate(installName: string, templateKey: string, input: UpdateInstalledExtensionTemplateInput): Promise<UpdateInstalledExtensionTemplateResponse>;
|
|
6
6
|
listAppearance(projectId: string): Promise<ListExtensionAppearanceResponse>;
|
|
7
7
|
listCommands(projectId: string): Promise<ListExtensionCommandsResponse>;
|
|
8
|
+
listProject(projectId: string): Promise<ListProjectExtensionsResponse>;
|
|
8
9
|
execute(commandId: string, request: CommandExecuteRequest): Promise<CommandExecuteResponse>;
|
|
9
10
|
dispatchEvent(projectId: string, input: DispatchExtensionEventInput): Promise<void>;
|
|
10
11
|
};
|
package/dist/client/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type { ExtensionClient } from "./extensions";
|
|
|
4
4
|
export type { NotificationsClient } from "./notifications";
|
|
5
5
|
export type { ProjectClient } from "./projects";
|
|
6
6
|
export { type ClientOptions, createRequest, PstdioApiError, type RequestFn, type RequestOptions, } from "./request";
|
|
7
|
+
export { createRuntimeClient, type RuntimeClient } from "./runtime";
|
|
7
8
|
export type { ListSessionsInput, SessionClient, SessionStreamConnection, SessionStreamHandlers } from "./sessions";
|
|
8
9
|
export type { SettingsClient } from "./settings";
|
|
9
10
|
export type { SkillClient } from "./skills";
|
package/dist/client/index.js
CHANGED
|
@@ -31,6 +31,7 @@ var createExtensionClient = (request) => ({
|
|
|
31
31
|
}),
|
|
32
32
|
listAppearance: (projectId) => request(`/v1/projects/${projectId}/extensions/appearance`),
|
|
33
33
|
listCommands: (projectId) => request(`/v1/projects/${projectId}/extensions/commands`),
|
|
34
|
+
listProject: (projectId) => request(`/v1/projects/${projectId}/extensions`),
|
|
34
35
|
execute: (commandId, input) => {
|
|
35
36
|
const { projectId, ...body } = input;
|
|
36
37
|
return request(`/v1/projects/${projectId}/extensions/commands/${encodeURIComponent(commandId)}/execute`, {
|
|
@@ -150,15 +151,27 @@ ${hookOutput}` : message;
|
|
|
150
151
|
}
|
|
151
152
|
return `Request failed: ${status}`;
|
|
152
153
|
};
|
|
153
|
-
var
|
|
154
|
+
var processEnvironment = () => typeof process !== "undefined" && process.env ? process.env : undefined;
|
|
155
|
+
var resolveBaseUrl = (options) => options.baseUrl ?? processEnvironment()?.PSTDIO_API_URL ?? "http://127.0.0.1:19840";
|
|
154
156
|
var resolveClientUrl = (baseUrl, path) => path.startsWith("http://") || path.startsWith("https://") ? path : `${baseUrl}${path}`;
|
|
157
|
+
var isSameOriginTarget = (baseUrl, path, url) => {
|
|
158
|
+
if (!path.startsWith("http://") && !path.startsWith("https://"))
|
|
159
|
+
return true;
|
|
160
|
+
try {
|
|
161
|
+
return new URL(url).origin === new URL(baseUrl).origin;
|
|
162
|
+
} catch {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
155
166
|
var resolveFetch = (options) => options.fetch ?? globalThis.fetch;
|
|
167
|
+
var resolveToken = (options) => options.token ?? processEnvironment()?.PSTDIO_API_TOKEN;
|
|
156
168
|
var createRequestHeaders = (options, reqOpts = {}) => {
|
|
157
169
|
const headers = new Headers(reqOpts.headers);
|
|
158
170
|
if (reqOpts.hasJsonBody && !headers.has("content-type"))
|
|
159
171
|
headers.set("content-type", "application/json");
|
|
160
|
-
|
|
161
|
-
|
|
172
|
+
const token = resolveToken(options);
|
|
173
|
+
if (token)
|
|
174
|
+
headers.set("authorization", `Bearer ${token}`);
|
|
162
175
|
return headers;
|
|
163
176
|
};
|
|
164
177
|
var isBinaryBody = (body) => body instanceof ArrayBuffer || ArrayBuffer.isView(body);
|
|
@@ -178,17 +191,20 @@ var createRequest = (options) => {
|
|
|
178
191
|
const baseUrl = resolveBaseUrl(options);
|
|
179
192
|
const fetchFn = resolveFetch(options);
|
|
180
193
|
return async (path, reqOpts = {}) => {
|
|
194
|
+
const url = resolveClientUrl(baseUrl, path);
|
|
181
195
|
const headers = createRequestHeaders(options, {
|
|
182
196
|
headers: reqOpts.headers,
|
|
183
197
|
hasJsonBody: reqOpts.body !== undefined && !isBinaryBody(reqOpts.body)
|
|
184
198
|
});
|
|
185
|
-
|
|
199
|
+
if (!isSameOriginTarget(baseUrl, path, url))
|
|
200
|
+
headers.delete("authorization");
|
|
186
201
|
const response = await fetchFn(url, {
|
|
187
202
|
method: reqOpts.method ?? "GET",
|
|
188
203
|
headers: Object.fromEntries(headers.entries()),
|
|
189
204
|
body: reqOpts.body !== undefined ? serializeRequestBody(reqOpts.body) : undefined,
|
|
190
205
|
signal: reqOpts.signal,
|
|
191
|
-
cache: reqOpts.cache
|
|
206
|
+
cache: reqOpts.cache,
|
|
207
|
+
credentials: "same-origin"
|
|
192
208
|
});
|
|
193
209
|
if (!response.ok) {
|
|
194
210
|
const errorBody = await response.json().catch(() => null);
|
|
@@ -201,6 +217,11 @@ var createRequest = (options) => {
|
|
|
201
217
|
};
|
|
202
218
|
};
|
|
203
219
|
|
|
220
|
+
// src/client/runtime.ts
|
|
221
|
+
var createRuntimeClient = (request) => ({
|
|
222
|
+
provisionBrowserSession: () => request("/runtime/browser-session", { method: "POST" })
|
|
223
|
+
});
|
|
224
|
+
|
|
204
225
|
// src/client/sse.ts
|
|
205
226
|
var parseSseEvent = (part) => {
|
|
206
227
|
let event = "message";
|
|
@@ -467,7 +488,8 @@ var createSyncClient = (clientOptions) => ({
|
|
|
467
488
|
try {
|
|
468
489
|
const response = await resolveFetch(clientOptions)(resolveClientUrl(resolveBaseUrl(clientOptions), buildSyncStreamPath(lastSeq)), {
|
|
469
490
|
headers: Object.fromEntries(createRequestHeaders(clientOptions).entries()),
|
|
470
|
-
signal: abortController.signal
|
|
491
|
+
signal: abortController.signal,
|
|
492
|
+
credentials: "same-origin"
|
|
471
493
|
});
|
|
472
494
|
if (!response.ok || !response.body)
|
|
473
495
|
throw new Error("SSE connection failed");
|
|
@@ -544,11 +566,13 @@ var createClient = (options = {}) => {
|
|
|
544
566
|
notifications: createNotificationsClient(request),
|
|
545
567
|
extensions: createExtensionClient(request),
|
|
546
568
|
settings: createSettingsClient(request),
|
|
547
|
-
sync: createSyncClient(options)
|
|
569
|
+
sync: createSyncClient(options),
|
|
570
|
+
runtime: createRuntimeClient(request)
|
|
548
571
|
};
|
|
549
572
|
};
|
|
550
573
|
export {
|
|
551
574
|
parseSyncDeleteEvent,
|
|
575
|
+
createRuntimeClient,
|
|
552
576
|
createRequest,
|
|
553
577
|
createClient,
|
|
554
578
|
applySyncEvent,
|
|
@@ -1,7 +1,7 @@
|
|
|
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
3
|
export type { CommitPayload, ConflictPayload, MergePayload, RebasePayload, SessionLifecyclePayload, WorkspaceProvisionPayload, WorkspaceType, WorktreeRemovedPayload, } from "pstdio-api-contracts/extension-kernel";
|
|
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
|
+
export { ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES, EXTENSION_API_VERSION, getWorkbenchModeLayoutTargetPanel, 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 WorkbenchModePanel, type WorkbenchSettingsScope, type WorkbenchSettingsTarget, type WorkbenchTargetDefinition, type WorkbenchTargetGranularity, type WorkbenchTreeTarget, type WorkbenchViewTarget, workbenchMenuTargets, workbenchModeLayoutTargets, workbenchModePanels, 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";
|
|
7
7
|
export { defineExtension } from "./define-extension";
|
package/dist/extensions/index.js
CHANGED
|
@@ -28,7 +28,7 @@ var defineSlot = (id, options) => ({
|
|
|
28
28
|
|
|
29
29
|
// ../pstdio-api-contracts/src/extension-kernel/kernel-slots.ts
|
|
30
30
|
var projectSlots = {
|
|
31
|
-
|
|
31
|
+
sidenav: defineSlot("project.sidenav", { kind: "panel" }),
|
|
32
32
|
headerPrimary: defineSlot("project.headerPrimary", { kind: "menu" }),
|
|
33
33
|
headerOverflow: defineSlot("project.headerOverflow", { kind: "menu" }),
|
|
34
34
|
settingsPanels: defineSlot("project.settingsPanels", { kind: "settings" })
|
|
@@ -41,7 +41,7 @@ var sessionSlots = {
|
|
|
41
41
|
var workspaceSlots = {
|
|
42
42
|
headerPrimary: defineSlot("workspace.headerPrimary", { kind: "menu" }),
|
|
43
43
|
headerOverflow: defineSlot("workspace.headerOverflow", { kind: "menu" }),
|
|
44
|
-
|
|
44
|
+
sidenav: defineSlot("workspace.sidenav", { kind: "panel" })
|
|
45
45
|
};
|
|
46
46
|
var projectEvents = {
|
|
47
47
|
opened: eventRef("project.opened")
|
|
@@ -116,6 +116,20 @@ var workbenchTreeTargets = [
|
|
|
116
116
|
"workbench.main.left.tree",
|
|
117
117
|
"workbench.main.right.tree"
|
|
118
118
|
];
|
|
119
|
+
var workbenchRegions = [
|
|
120
|
+
"nav",
|
|
121
|
+
"activity",
|
|
122
|
+
"sidenav-header",
|
|
123
|
+
"sidenav",
|
|
124
|
+
"main-header",
|
|
125
|
+
"main",
|
|
126
|
+
"secondary-header",
|
|
127
|
+
"secondary",
|
|
128
|
+
"side-header",
|
|
129
|
+
"side",
|
|
130
|
+
"status",
|
|
131
|
+
"overlay"
|
|
132
|
+
];
|
|
119
133
|
var workbenchViewTargets = [
|
|
120
134
|
"workbench.main",
|
|
121
135
|
"workbench.main.left",
|
|
@@ -124,6 +138,7 @@ var workbenchViewTargets = [
|
|
|
124
138
|
];
|
|
125
139
|
var workbenchSettingsTargets = ["workbench.settings"];
|
|
126
140
|
var workbenchSettingsScopes = ["project", "global"];
|
|
141
|
+
var workbenchModePanels = ["main", "secondary", "side"];
|
|
127
142
|
var workbenchModeLayoutTargets = [
|
|
128
143
|
"workbench.left",
|
|
129
144
|
"workbench.main.left",
|
|
@@ -131,6 +146,14 @@ var workbenchModeLayoutTargets = [
|
|
|
131
146
|
"workbench.main.right",
|
|
132
147
|
"workbench.secondary"
|
|
133
148
|
];
|
|
149
|
+
var workbenchModeLayoutTargetPanels = {
|
|
150
|
+
"workbench.left": undefined,
|
|
151
|
+
"workbench.main.left": "main",
|
|
152
|
+
"workbench.main": "main",
|
|
153
|
+
"workbench.main.right": "main",
|
|
154
|
+
"workbench.secondary": "secondary"
|
|
155
|
+
};
|
|
156
|
+
var getWorkbenchModeLayoutTargetPanel = (target) => workbenchModeLayoutTargetPanels[target];
|
|
134
157
|
var workbenchTargets = [
|
|
135
158
|
{
|
|
136
159
|
id: "workbench.nav.actions",
|
|
@@ -162,30 +185,6 @@ var workbenchTargets = [
|
|
|
162
185
|
granularity: "areaTree",
|
|
163
186
|
rationale: "Tree entries for the active tree renderer mounted in the main-right area."
|
|
164
187
|
},
|
|
165
|
-
{
|
|
166
|
-
id: "workbench.main",
|
|
167
|
-
allowedKinds: ["view"],
|
|
168
|
-
granularity: "area",
|
|
169
|
-
rationale: "Direct extension view placement in the main area."
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
id: "workbench.main.left",
|
|
173
|
-
allowedKinds: ["view"],
|
|
174
|
-
granularity: "area",
|
|
175
|
-
rationale: "Direct extension view placement in the main-left area."
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
id: "workbench.main.right",
|
|
179
|
-
allowedKinds: ["view"],
|
|
180
|
-
granularity: "area",
|
|
181
|
-
rationale: "Direct extension view placement in the main-right area."
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
id: "workbench.secondary",
|
|
185
|
-
allowedKinds: ["view"],
|
|
186
|
-
granularity: "area",
|
|
187
|
-
rationale: "Direct extension view placement in the secondary area."
|
|
188
|
-
},
|
|
189
188
|
{
|
|
190
189
|
id: "workbench.settings",
|
|
191
190
|
allowedKinds: ["settings"],
|
|
@@ -276,6 +275,8 @@ var defineExtensionView = (definition) => ({
|
|
|
276
275
|
var params = {
|
|
277
276
|
text: (options) => ({ type: "text", ...options }),
|
|
278
277
|
longText: (options) => ({ type: "longtext", ...options }),
|
|
278
|
+
markdown: (options) => ({ type: "markdown", ...options }),
|
|
279
|
+
files: (options) => ({ type: "files", ...options }),
|
|
279
280
|
number: (options) => ({ type: "number", ...options }),
|
|
280
281
|
boolean: (options) => ({ type: "boolean", ...options }),
|
|
281
282
|
select: (options) => ({ type: "select", ...options }),
|
|
@@ -398,6 +399,7 @@ export {
|
|
|
398
399
|
workbenchTargets,
|
|
399
400
|
workbenchSettingsTargets,
|
|
400
401
|
workbenchSettingsScopes,
|
|
402
|
+
workbenchModePanels,
|
|
401
403
|
workbenchModeLayoutTargets,
|
|
402
404
|
workbenchMenuTargets,
|
|
403
405
|
unwrapCommandOutcome,
|
|
@@ -412,6 +414,7 @@ export {
|
|
|
412
414
|
isLocalizedString,
|
|
413
415
|
gitEvents,
|
|
414
416
|
getWorkbenchTargetDefinition,
|
|
417
|
+
getWorkbenchModeLayoutTargetPanel,
|
|
415
418
|
eventRef,
|
|
416
419
|
defineMiddleware,
|
|
417
420
|
defineHook,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BooleanParam, HarnessParam, JsonParam, ListParam, LongTextParam, MultiSelectParam, NumberParam, RepoParam, ResourceParam, SelectParam, TemplateParam, TextParam } from "pstdio-api-contracts/extension-kernel";
|
|
1
|
+
import type { BooleanParam, FilesParam, HarnessParam, JsonParam, ListParam, LongTextParam, MarkdownParam, MultiSelectParam, NumberParam, RepoParam, ResourceParam, SelectParam, TemplateParam, TextParam } from "pstdio-api-contracts/extension-kernel";
|
|
2
2
|
type RequiredOf<TOptions> = TOptions extends {
|
|
3
3
|
required: infer TRequired extends boolean;
|
|
4
4
|
} ? TRequired : undefined;
|
|
@@ -18,6 +18,8 @@ type ParamOptions<TParam extends {
|
|
|
18
18
|
export declare const params: {
|
|
19
19
|
text: <const TOptions extends ParamOptions<TextParam> | undefined = undefined>(options?: TOptions) => TextParam<RequiredOf<TOptions>>;
|
|
20
20
|
longText: <const TOptions extends ParamOptions<LongTextParam> | undefined = undefined>(options?: TOptions) => LongTextParam<RequiredOf<TOptions>>;
|
|
21
|
+
markdown: <const TOptions extends ParamOptions<MarkdownParam> | undefined = undefined>(options?: TOptions) => MarkdownParam<RequiredOf<TOptions>>;
|
|
22
|
+
files: <const TOptions extends ParamOptions<FilesParam> | undefined = undefined>(options?: TOptions) => FilesParam<RequiredOf<TOptions>>;
|
|
21
23
|
number: <const TOptions extends ParamOptions<NumberParam> | undefined = undefined>(options?: TOptions) => NumberParam<RequiredOf<TOptions>>;
|
|
22
24
|
boolean: <const TOptions extends ParamOptions<BooleanParam> | undefined = undefined>(options?: TOptions) => BooleanParam<RequiredOf<TOptions>>;
|
|
23
25
|
select: <const TOptions extends ParamOptions<SelectParam>>(options: TOptions) => SelectParam<RequiredOf<TOptions>>;
|