@webskill/sdk 0.29.0 → 0.30.0-next.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.
@@ -0,0 +1,76 @@
1
+ //#region ../agent/src/perception/types.ts
2
+ /**
3
+ * 两种形状归一成帧列表;旧形状等价于一条 `frame:'self'`(FR-24.1)。
4
+ *
5
+ * **这是判别的单一来源。** 散在各处写 `'frames' in scope` 会让
6
+ * 「旧配置还等价吗」这个问题没有唯一答案。
7
+ * @experimental
8
+ */
9
+ function toFrameScopes(scope) {
10
+ if ("frames" in scope) return scope.frames;
11
+ return [{
12
+ frame: "self",
13
+ include: scope.include,
14
+ ...scope.exclude ? { exclude: scope.exclude } : {}
15
+ }];
16
+ }
17
+ /** 四个方向的规范清单;工具层校验与文案生成都从这里取,不各写一份 */
18
+ const SCROLL_DIRECTIONS = [
19
+ "up",
20
+ "down",
21
+ "left",
22
+ "right"
23
+ ];
24
+
25
+ //#endregion
26
+ //#region ../agent/src/pageAction/types.ts
27
+ /**
28
+ * 两种形状归一成帧列表;旧形状等价于一条 `frame:'self'`。
29
+ * 与感知侧的 `toFrameScopes` 一样,是本侧判别的**单一来源**。
30
+ * @experimental
31
+ */
32
+ function toActionFrameScopes(scope) {
33
+ if ("frames" in scope) return scope.frames;
34
+ return [{
35
+ frame: "self",
36
+ include: scope.include,
37
+ ...scope.exclude ? { exclude: scope.exclude } : {}
38
+ }];
39
+ }
40
+ /**
41
+ * 本版的操作集(FR-25.1 / 0.16.0 FR-13.6 / 0.18.0 FR-10.1 / 0.22.0 FR-17.1)。
42
+ * 导航只有 `back` 一个,且它**不接受地址**——可达面被浏览器历史封死(SC-1)。
43
+ *
44
+ * `drag` 只表达**起点与终点**,没有中途轨迹(0.22.0 FR-17.6 裁定,D64 就此撤销):
45
+ * 轨迹是实现细节不是意图,能画任意路径等于架空 AC-23.2,而且滑块验证码要的正是轨迹——
46
+ * 表达不了轨迹,这个动作就天然做不了人机验证绕过。
47
+ *
48
+ * 这些动作与既有几个走**同一条** policy 路径,
49
+ * 范围白名单、逐次确认、审计三条硬约束因此天然覆盖到它们——
50
+ * 前提是新动作不绕过 policy 直调执行器(AC-25.4 守这一点)。
51
+ * @experimental
52
+ */
53
+ const PAGE_ACTION_KINDS = [
54
+ "click",
55
+ "fill",
56
+ "submit",
57
+ "select",
58
+ "set",
59
+ "attach",
60
+ "scroll",
61
+ "hover",
62
+ "drag",
63
+ "back"
64
+ ];
65
+ /**
66
+ * `back` 的目标占位(0.16.0 分册 13 §4.1)。
67
+ *
68
+ * **模型不能表达它**:工具源在 `action === 'back'` 时拒绝任何 `ref` 入参。
69
+ * 它存在只为了让 `back` 不必改 `PageActionRequest.ref` 的类型——
70
+ * 改它会波及所有实现过 executor 的宓主。
71
+ * @experimental
72
+ */
73
+ const PAGE_DOCUMENT_REF = "@document";
74
+
75
+ //#endregion
76
+ export { toFrameScopes as a, SCROLL_DIRECTIONS as i, PAGE_DOCUMENT_REF as n, toActionFrameScopes as r, PAGE_ACTION_KINDS as t };
@@ -0,0 +1,265 @@
1
+ import { B as ExternalToolSource } from "./index-UbNuzd2a.js";
2
+ //#region ../controller/dist/types-DmcXN3qR.d.ts
3
+ //#region src/jsonRpc.d.ts
4
+ type JsonRpcId = string | number;
5
+ interface JsonRpcRequest {
6
+ jsonrpc: '2.0';
7
+ id?: JsonRpcId;
8
+ method?: string;
9
+ params?: unknown;
10
+ result?: unknown;
11
+ error?: {
12
+ code: number;
13
+ message: string;
14
+ data?: unknown;
15
+ };
16
+ }
17
+ interface WebSocketEventLike {
18
+ data: unknown;
19
+ }
20
+ interface WebSocketLike {
21
+ readonly readyState: number;
22
+ onopen?: ((event?: unknown) => void) | null;
23
+ onmessage?: ((event: WebSocketEventLike) => void) | null;
24
+ onerror?: ((event: unknown) => void) | null;
25
+ onclose?: ((event: {
26
+ code?: number;
27
+ reason?: string;
28
+ }) => void) | null;
29
+ send(data: string): void;
30
+ close(code?: number, reason?: string): void;
31
+ }
32
+ type WebSocketConstructor = new (url: string) => WebSocketLike;
33
+ //#endregion
34
+ //#region src/generated/protocol.d.ts
35
+ /** @experimental */
36
+ type ProtocolVersion = string;
37
+ /** @experimental */
38
+ type IsoDateTime = string;
39
+ /** @experimental */
40
+ type Base64Url = string;
41
+ /** @experimental */
42
+ type Origin = string;
43
+ /** @experimental */
44
+ type BoundedString = string;
45
+ /** @experimental */
46
+ interface InvocationMeta {
47
+ 'webskill/invocationId': string;
48
+ 'webskill/deviceEpoch'?: BoundedString;
49
+ 'webskill/sequence'?: number;
50
+ 'webskill/context'?: {
51
+ [k: string]: unknown | undefined;
52
+ };
53
+ [k: string]: unknown | undefined;
54
+ }
55
+ /** @experimental */
56
+ interface Principal {
57
+ displayName: BoundedString;
58
+ }
59
+ /** @experimental */
60
+ interface HelloParams {
61
+ /**
62
+ * @minItems 1
63
+ * @maxItems 8
64
+ */
65
+ protocolVersions: [ProtocolVersion] | [ProtocolVersion, ProtocolVersion] | [ProtocolVersion, ProtocolVersion, ProtocolVersion] | [ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion] | [ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion] | [ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion] | [ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion] | [ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion, ProtocolVersion];
66
+ hostName: BoundedString;
67
+ hostVersion: BoundedString;
68
+ deviceFingerprint?: BoundedString;
69
+ }
70
+ /** @experimental */
71
+ interface HelloResult {
72
+ protocolVersion: ProtocolVersion;
73
+ controllerInstanceId: BoundedString;
74
+ controllerName: BoundedString;
75
+ /**
76
+ * @maxItems 128
77
+ */
78
+ excludedOrigins: Origin[];
79
+ }
80
+ /** @experimental */
81
+ interface PairStartParams {
82
+ publicKey: Base64Url;
83
+ deviceName: BoundedString;
84
+ }
85
+ /** @experimental */
86
+ interface PairStartResult {
87
+ sessionId: BoundedString;
88
+ code: string;
89
+ expiresAt: IsoDateTime;
90
+ }
91
+ /** @experimental */
92
+ interface PairApprovedParams {
93
+ sessionId: BoundedString;
94
+ approvalNonce: Base64Url;
95
+ controllerInstanceId: BoundedString;
96
+ principal: Principal;
97
+ /**
98
+ * @maxItems 128
99
+ */
100
+ capabilities: BoundedString[];
101
+ /**
102
+ * @maxItems 128
103
+ */
104
+ excludedOrigins: Origin[];
105
+ }
106
+ /** @experimental */
107
+ interface PairRejectedParams {
108
+ sessionId: BoundedString;
109
+ code: BoundedString;
110
+ }
111
+ /** @experimental */
112
+ interface PairConfirmParams {
113
+ sessionId: BoundedString;
114
+ accepted: boolean;
115
+ signature?: Base64Url;
116
+ }
117
+ /** @experimental */
118
+ interface PairConfirmResult {
119
+ grant?: BoundedString;
120
+ expiresAt?: IsoDateTime;
121
+ }
122
+ /** @experimental */
123
+ interface AuthPresentParams {
124
+ grant: BoundedString;
125
+ }
126
+ /** @experimental */
127
+ interface AuthPresentResult {
128
+ expiresAt: IsoDateTime;
129
+ }
130
+ /** @experimental */
131
+ type AuthChallengeParams = Record<string, never>;
132
+ /** @experimental */
133
+ interface AuthChallengeResult {
134
+ nonce: Base64Url;
135
+ expiresAt: IsoDateTime;
136
+ }
137
+ /** @experimental */
138
+ interface AuthRenewParams {
139
+ nonce: Base64Url;
140
+ signature: Base64Url;
141
+ }
142
+ /** @experimental */
143
+ interface AuthRenewResult {
144
+ grant: BoundedString;
145
+ expiresAt: IsoDateTime;
146
+ }
147
+ /** @experimental */
148
+ interface AuthRevokedParams {
149
+ reason: BoundedString;
150
+ }
151
+ /** @experimental */
152
+ interface OriginsParams {
153
+ /**
154
+ * @maxItems 128
155
+ */
156
+ excludedOrigins: Origin[];
157
+ }
158
+ /** @experimental */
159
+ interface HumanControlParams {
160
+ inControl: boolean;
161
+ at: IsoDateTime;
162
+ }
163
+ /** @experimental */
164
+ interface ReadyParams {
165
+ deviceEpoch: BoundedString;
166
+ writeHighWatermark: number;
167
+ hostVersion: BoundedString;
168
+ writeStateRecoverable: boolean;
169
+ }
170
+ /** @experimental */
171
+ type PingParams = Record<string, never>;
172
+ /** @experimental */
173
+ type PingResult = Record<string, never>;
174
+ /** @experimental */
175
+ interface ByeParams {
176
+ code: BoundedString;
177
+ message: BoundedString;
178
+ }
179
+ //#endregion
180
+ //#region src/device/types.d.ts
181
+ /** @experimental */
182
+ type ControllerDeviceState = 'idle' | 'connecting' | 'handshaking' | 'unpaired' | 'pairing' | 'awaiting-confirmation' | 'authorizing' | 'ready' | 'offline' | 'failed';
183
+ /** @experimental */
184
+ interface ControllerPairingRecord {
185
+ readonly controllerUrl: string;
186
+ readonly controllerInstanceId: string;
187
+ readonly controllerName: string;
188
+ readonly principalDisplayName: string;
189
+ readonly sessionId: string;
190
+ readonly grant: string;
191
+ readonly grantExpiresAt: string;
192
+ readonly declaredOrigins: readonly string[];
193
+ readonly pairedAt: string;
194
+ }
195
+ /** @experimental */
196
+ interface ControllerWriteState {
197
+ readonly epoch: string;
198
+ readonly highWatermark: number;
199
+ }
200
+ /** @experimental */
201
+ interface ControllerDeviceStore {
202
+ loadKeyPair(): Promise<CryptoKeyPair | undefined>;
203
+ saveKeyPair(keyPair: CryptoKeyPair): Promise<void>;
204
+ loadPairing(): Promise<ControllerPairingRecord | undefined>;
205
+ savePairing(record: ControllerPairingRecord | undefined): Promise<void>;
206
+ loadWriteState?(): Promise<ControllerWriteState | undefined>;
207
+ saveWriteState?(state: ControllerWriteState | undefined): Promise<void>;
208
+ clear(): Promise<void>;
209
+ }
210
+ /** @experimental */
211
+ interface ControllerPairingApproval {
212
+ readonly sessionId: string;
213
+ readonly approvalNonce: string;
214
+ readonly controllerInstanceId: string;
215
+ readonly controllerName: string;
216
+ readonly principal: Principal;
217
+ readonly capabilities: readonly string[];
218
+ readonly excludedOrigins: readonly string[];
219
+ }
220
+ /** @experimental */
221
+ interface ControllerPairingCode extends PairStartResult {
222
+ readonly deviceFingerprint: string;
223
+ }
224
+ /** @experimental */
225
+ interface ControllerAuditEvent {
226
+ readonly type: string;
227
+ readonly data: Record<string, unknown>;
228
+ }
229
+ /** @experimental */
230
+ interface ControllerDeviceOptions {
231
+ readonly url: string;
232
+ readonly deviceName: string;
233
+ readonly hostVersion: string;
234
+ readonly store: ControllerDeviceStore;
235
+ readonly tools: readonly ExternalToolSource[];
236
+ readonly excludedOrigins?: readonly string[];
237
+ readonly confirmPairing: (approval: ControllerPairingApproval) => Promise<boolean>;
238
+ readonly onStateChange?: (state: ControllerDeviceState) => void;
239
+ readonly onExcludedOriginsChange?: (origins: readonly string[]) => void;
240
+ readonly onError?: (error: {
241
+ code: string;
242
+ message: string;
243
+ }) => void;
244
+ readonly audit?: (event: ControllerAuditEvent) => void | Promise<void>;
245
+ readonly WebSocket?: WebSocketConstructor;
246
+ readonly now?: () => number;
247
+ }
248
+ /** @experimental */
249
+ interface ControllerDevice {
250
+ readonly state: ControllerDeviceState;
251
+ readonly humanInControl: boolean;
252
+ readonly writeStateRecoverable: boolean;
253
+ readonly excludedOrigins: readonly string[];
254
+ readonly pairingCode?: ControllerPairingCode;
255
+ readonly controllerInstanceId?: string;
256
+ readonly controllerOrigin: string;
257
+ connect(): Promise<void>;
258
+ disconnect(reason?: string): Promise<void>;
259
+ startPairing(): Promise<ControllerPairingCode>;
260
+ unpair(): Promise<void>;
261
+ setHumanInControl(inControl: boolean): void;
262
+ refreshTools(): Promise<void>;
263
+ }
264
+ //#endregion
265
+ export { PairConfirmResult as A, WebSocketLike as B, InvocationMeta as C, OriginsParams as D, Origin as E, PingResult as F, Principal as I, ProtocolVersion as L, PairStartParams as M, PairStartResult as N, PairApprovedParams as O, PingParams as P, ReadyParams as R, HumanControlParams as S, JsonRpcRequest as T, ControllerPairingCode as _, AuthRenewParams as a, HelloParams as b, Base64Url as c, ControllerAuditEvent as d, ControllerDevice as f, ControllerPairingApproval as g, ControllerDeviceStore as h, AuthPresentResult as i, PairRejectedParams as j, PairConfirmParams as k, BoundedString as l, ControllerDeviceState as m, AuthChallengeResult as n, AuthRenewResult as o, ControllerDeviceOptions as p, AuthPresentParams as r, AuthRevokedParams as s, AuthChallengeParams as t, ByeParams as u, ControllerPairingRecord as v, IsoDateTime as w, HelloResult as x, ControllerWriteState as y, WebSocketConstructor as z };
@@ -51,7 +51,7 @@ type WebSkillErrorCode = 'FS_NOT_FOUND' | 'FS_PATH_OUTSIDE_ROOT' | 'SKILL_NOT_FO
51
51
  /** 请求了若干格,一条都没写成——那不是部分成功,是整个填错了地方(0.24.0 FR-17.10) */
52
52
  'TEMPLATE_FILL_REJECTED' |
53
53
  /** 用户拒绝了这次工具调用(0.14.0 分册 20) */
54
- 'TOOL_DENIED';
54
+ 'TOOL_DENIED' | 'CONTROLLER_PROTOCOL_UNSUPPORTED' | 'CONTROLLER_MESSAGE_INVALID' | 'CONTROLLER_NOT_PAIRED' | 'CONTROLLER_PAIRING_REJECTED' | 'CONTROLLER_PAIRING_RATE_LIMITED' | 'CONTROLLER_CAPABILITY_MISSING' | 'CONTROLLER_HUMAN_IN_CONTROL' | 'CONTROLLER_INVOCATION_DUPLICATE';
55
55
  /**
56
56
  * 所有公开 API 抛出的结构化错误,code 供上层可编程处理
57
57
  * @stable