@vostride/agent-qa-plugin-kit 0.0.1 → 0.3.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.
@@ -0,0 +1,291 @@
1
+ import { z } from "zod";
2
+ // src/protocol/messages.ts
3
+ const PLUGIN_PROTOCOL_VERSION = 1;
4
+ const PLUGIN_METHODS = [
5
+ "initialize",
6
+ "check",
7
+ "acquire",
8
+ "uploadApp",
9
+ "started",
10
+ "end",
11
+ "release",
12
+ "shutdown"
13
+ ];
14
+ const OPTIONAL_PLUGIN_METHODS = [
15
+ "check",
16
+ "uploadApp",
17
+ "started",
18
+ "end"
19
+ ];
20
+ const PLUGIN_SERVES = [
21
+ "playwright",
22
+ "cdp",
23
+ "appium"
24
+ ];
25
+ const PLUGIN_RUN_FACTS = [
26
+ "testName",
27
+ "runId",
28
+ "failure"
29
+ ];
30
+ const PLUGIN_FAILURE_KINDS = [
31
+ "unreachable",
32
+ "auth",
33
+ "capacity",
34
+ "timeout",
35
+ "version",
36
+ "refused",
37
+ "ended",
38
+ "lost"
39
+ ];
40
+ const PLUGIN_ERROR_CODES = {
41
+ parse: -32700,
42
+ invalidRequest: -32600,
43
+ methodNotFound: -32601,
44
+ invalidParams: -32602,
45
+ plugin: -32e3,
46
+ cancelled: -32800
47
+ };
48
+ const CANCEL_METHOD = "$/cancel";
49
+ const PROGRESS_METHOD = "$/progress";
50
+ const MAX_MESSAGE_BYTES = 1048576;
51
+ const JsonObjectSchema = z.record(z.string(), z.unknown());
52
+ const HandleSchema = z.json();
53
+ const RequestIdSchema = z.union([z.string(), z.number()]);
54
+ const InitializeParamsSchema = z.object({
55
+ protocolVersions: z.array(z.number().int()),
56
+ host: z.object({
57
+ pid: z.number().int(),
58
+ agentQaVersion: z.string(),
59
+ playwrightVersion: z.string(),
60
+ webdriverioVersion: z.string()
61
+ }),
62
+ entry: z.string(),
63
+ options: JsonObjectSchema,
64
+ runFacts: z.object({ runId: z.string().optional() }).optional()
65
+ });
66
+ const InitializeResultSchema = z.object({
67
+ protocolVersion: z.number().int(),
68
+ plugin: z.object({
69
+ name: z.string(),
70
+ version: z.string()
71
+ }),
72
+ serves: z.array(z.enum(PLUGIN_SERVES)),
73
+ methods: z.array(z.enum(OPTIONAL_PLUGIN_METHODS))
74
+ });
75
+ const CheckParamsSchema = z.object({ remotes: z.array(z.object({
76
+ name: z.string(),
77
+ settings: JsonObjectSchema
78
+ })) });
79
+ const CheckResultSchema = z.object({
80
+ state: z.enum(["ok", "warn"]),
81
+ lines: z.array(z.string())
82
+ });
83
+ const WebSessionSchema = z.object({
84
+ platform: z.literal("web"),
85
+ engine: z.enum([
86
+ "chromium",
87
+ "firefox",
88
+ "webkit"
89
+ ]),
90
+ context: z.enum(["new", "reuse"])
91
+ });
92
+ const DeviceSessionSchema = z.object({
93
+ platform: z.enum(["android", "ios"]),
94
+ capabilities: JsonObjectSchema
95
+ });
96
+ const AcquireParamsSchema = z.object({
97
+ remote: z.string(),
98
+ settings: JsonObjectSchema,
99
+ session: z.discriminatedUnion("platform", [WebSessionSchema, DeviceSessionSchema]),
100
+ run: z.object({ testName: z.string().optional() }).optional()
101
+ });
102
+ const AcquireResultSchema = z.object({
103
+ handle: HandleSchema,
104
+ protocol: z.enum(PLUGIN_SERVES),
105
+ url: z.string(),
106
+ headers: z.record(z.string(), z.string()).optional(),
107
+ capabilities: JsonObjectSchema.optional(),
108
+ mask: z.array(z.string()).optional(),
109
+ link: z.string().optional()
110
+ });
111
+ const UploadAppParamsSchema = z.object({
112
+ remote: z.string(),
113
+ settings: JsonObjectSchema,
114
+ platform: z.enum(["android", "ios"]),
115
+ path: z.string(),
116
+ sha256: z.string(),
117
+ size: z.number().int().nonnegative()
118
+ });
119
+ const UploadAppResultSchema = z.object({ ref: z.string() });
120
+ const StartedParamsSchema = z.object({
121
+ handle: HandleSchema,
122
+ sessionId: z.string().optional()
123
+ });
124
+ const StartedResultSchema = z.object({
125
+ link: z.string().optional(),
126
+ appiumVersion: z.string().optional()
127
+ });
128
+ const EndParamsSchema = z.object({
129
+ handle: HandleSchema,
130
+ outcome: z.enum([
131
+ "passed",
132
+ "failed",
133
+ "error",
134
+ "cancelled"
135
+ ]),
136
+ reason: z.string().optional()
137
+ });
138
+ const ReleaseParamsSchema = z.object({ handle: HandleSchema });
139
+ const CancelParamsSchema = z.object({ id: RequestIdSchema });
140
+ const ProgressParamsSchema = z.object({
141
+ id: RequestIdSchema,
142
+ message: z.string(),
143
+ queued: z.number().int().nonnegative().optional(),
144
+ percent: z.number().min(0).max(100).optional()
145
+ });
146
+ const PluginErrorDataSchema = z.object({
147
+ kind: z.enum(PLUGIN_FAILURE_KINDS),
148
+ path: z.string().optional(),
149
+ handle: HandleSchema.optional(),
150
+ supported: z.array(z.number().int()).optional(),
151
+ requested: z.array(z.number().int()).optional()
152
+ });
153
+ // src/protocol/manifest.ts
154
+ const PLUGIN_MANIFEST_FIELD = "agent-qa";
155
+ const PackagePathSchema = z.string().min(1);
156
+ const RemotePluginManifestSchema = z.strictObject({
157
+ kind: z.literal("remote"),
158
+ runs: z.literal("process"),
159
+ protocol: z.number().int().positive(),
160
+ entry: PackagePathSchema,
161
+ serves: z.array(z.enum(PLUGIN_SERVES)).nonempty(),
162
+ methods: z.array(z.enum(OPTIONAL_PLUGIN_METHODS)),
163
+ options: PackagePathSchema,
164
+ settings: PackagePathSchema,
165
+ runFacts: z.array(z.enum(PLUGIN_RUN_FACTS)).optional(),
166
+ skill: PackagePathSchema.optional()
167
+ });
168
+ const ModelAuthManifestSchema = z.strictObject({
169
+ kind: z.literal("model-auth"),
170
+ runs: z.literal("in-process"),
171
+ entry: PackagePathSchema,
172
+ options: PackagePathSchema.optional()
173
+ });
174
+ const ModelProviderManifestSchema = z.strictObject({
175
+ kind: z.literal("model-provider"),
176
+ runs: z.literal("in-process"),
177
+ entry: PackagePathSchema,
178
+ options: PackagePathSchema.optional()
179
+ });
180
+ const PluginManifestSchema = z.discriminatedUnion("kind", [
181
+ RemotePluginManifestSchema,
182
+ ModelAuthManifestSchema,
183
+ ModelProviderManifestSchema
184
+ ]);
185
+ // src/protocol/framing.ts
186
+ function encodeMessage(message) {
187
+ return `${JSON.stringify(message)}\n`;
188
+ }
189
+ const NEWLINE = 10;
190
+ function createLineDecoder({ maxLineBytes, onLine, onOverflow }) {
191
+ const encoder = new TextEncoder();
192
+ const decoder = new TextDecoder();
193
+ let parts = [];
194
+ let size = 0;
195
+ let discarding = false;
196
+ const append = (segment) => {
197
+ if (discarding || segment.length === 0) return;
198
+ if (size + segment.length > maxLineBytes) {
199
+ discarding = true;
200
+ parts = [];
201
+ size = 0;
202
+ onOverflow();
203
+ return;
204
+ }
205
+ parts.push(new Uint8Array(segment));
206
+ size += segment.length;
207
+ };
208
+ const finishLine = () => {
209
+ const wasDiscarding = discarding;
210
+ const lineParts = parts;
211
+ const lineSize = size;
212
+ parts = [];
213
+ size = 0;
214
+ discarding = false;
215
+ if (wasDiscarding || lineSize === 0) return;
216
+ const bytes = new Uint8Array(lineSize);
217
+ let offset = 0;
218
+ for (const part of lineParts) {
219
+ bytes.set(part, offset);
220
+ offset += part.length;
221
+ }
222
+ const line = decoder.decode(bytes).replace(/\r$/, "");
223
+ if (line.trim() !== "") onLine(line);
224
+ };
225
+ return {
226
+ push(chunk) {
227
+ const bytes = typeof chunk === "string" ? encoder.encode(chunk) : chunk;
228
+ let start = 0;
229
+ while (start <= bytes.length) {
230
+ const newline = bytes.indexOf(NEWLINE, start);
231
+ if (newline === -1) {
232
+ append(bytes.subarray(start));
233
+ return;
234
+ }
235
+ append(bytes.subarray(start, newline));
236
+ finishLine();
237
+ start = newline + 1;
238
+ }
239
+ },
240
+ end() {
241
+ finishLine();
242
+ }
243
+ };
244
+ }
245
+ // src/protocol/environment.ts
246
+ const PROXY_NAMES = [
247
+ "HTTP_PROXY",
248
+ "HTTPS_PROXY",
249
+ "NO_PROXY",
250
+ "ALL_PROXY"
251
+ ];
252
+ const PLUGIN_ENVIRONMENT_NAMES = [
253
+ "PATH",
254
+ "HOME",
255
+ "TMPDIR",
256
+ "TEMP",
257
+ "TMP",
258
+ "LANG",
259
+ "TZ",
260
+ ...PROXY_NAMES,
261
+ ...PROXY_NAMES.map((name) => name.toLowerCase()),
262
+ "NODE_EXTRA_CA_CERTS",
263
+ "SSL_CERT_FILE"
264
+ ];
265
+ const PLUGIN_WINDOWS_ENVIRONMENT_NAMES = [
266
+ "SystemRoot",
267
+ "ComSpec",
268
+ "PATHEXT",
269
+ "USERPROFILE",
270
+ "APPDATA",
271
+ "LOCALAPPDATA"
272
+ ];
273
+ function pluginEnvironment(env, platform) {
274
+ const windows = platform === "win32";
275
+ const names = new Set(PLUGIN_ENVIRONMENT_NAMES);
276
+ if (windows) for (const name of PLUGIN_WINDOWS_ENVIRONMENT_NAMES) names.add(name.toUpperCase());
277
+ const passes = (key) => {
278
+ if (key.startsWith("LC_")) return true;
279
+ if (names.has(key)) return true;
280
+ return windows && names.has(key.toUpperCase());
281
+ };
282
+ const out = {};
283
+ for (const [key, value] of Object.entries(env)) {
284
+ if (value === void 0 || key.toUpperCase() === "NODE_OPTIONS") continue;
285
+ if (passes(key)) out[key] = value;
286
+ }
287
+ return out;
288
+ }
289
+ export { AcquireParamsSchema, AcquireResultSchema, CANCEL_METHOD, CancelParamsSchema, CheckParamsSchema, CheckResultSchema, EndParamsSchema, InitializeParamsSchema, InitializeResultSchema, MAX_MESSAGE_BYTES, OPTIONAL_PLUGIN_METHODS, PLUGIN_ENVIRONMENT_NAMES, PLUGIN_ERROR_CODES, PLUGIN_FAILURE_KINDS, PLUGIN_MANIFEST_FIELD, PLUGIN_METHODS, PLUGIN_PROTOCOL_VERSION, PLUGIN_RUN_FACTS, PLUGIN_SERVES, PLUGIN_WINDOWS_ENVIRONMENT_NAMES, PROGRESS_METHOD, PluginErrorDataSchema, PluginManifestSchema, ProgressParamsSchema, ReleaseParamsSchema, StartedParamsSchema, StartedResultSchema, UploadAppParamsSchema, UploadAppResultSchema, createLineDecoder, encodeMessage, pluginEnvironment };
290
+
291
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","names":[],"sources":["../src/protocol/messages.ts","../src/protocol/manifest.ts","../src/protocol/framing.ts","../src/protocol/environment.ts"],"sourcesContent":["import { z } from 'zod'\n\nexport const PLUGIN_PROTOCOL_VERSION = 1\n\nexport const PLUGIN_METHODS = [\n 'initialize',\n 'check',\n 'acquire',\n 'uploadApp',\n 'started',\n 'end',\n 'release',\n 'shutdown',\n] as const\nexport type PluginMethod = (typeof PLUGIN_METHODS)[number]\n\nexport const OPTIONAL_PLUGIN_METHODS = ['check', 'uploadApp', 'started', 'end'] as const\nexport type OptionalPluginMethod = (typeof OPTIONAL_PLUGIN_METHODS)[number]\n\nexport const PLUGIN_SERVES = ['playwright', 'cdp', 'appium'] as const\nexport type PluginServe = (typeof PLUGIN_SERVES)[number]\n\nexport const PLUGIN_RUN_FACTS = ['testName', 'runId', 'failure'] as const\nexport type PluginRunFact = (typeof PLUGIN_RUN_FACTS)[number]\n\nexport const PLUGIN_FAILURE_KINDS = [\n 'unreachable',\n 'auth',\n 'capacity',\n 'timeout',\n 'version',\n 'refused',\n 'ended',\n 'lost',\n] as const\nexport type PluginFailureKind = (typeof PLUGIN_FAILURE_KINDS)[number]\n\nexport const PLUGIN_ERROR_CODES = {\n parse: -32700,\n invalidRequest: -32600,\n methodNotFound: -32601,\n invalidParams: -32602,\n plugin: -32000,\n cancelled: -32800,\n} as const\n\nexport const CANCEL_METHOD = '$/cancel'\nexport const PROGRESS_METHOD = '$/progress'\n\nexport const MAX_MESSAGE_BYTES = 1024 * 1024\n\nconst JsonObjectSchema = z.record(z.string(), z.unknown())\nconst HandleSchema = z.json()\nconst RequestIdSchema = z.union([z.string(), z.number()])\n\nexport const InitializeParamsSchema = z.object({\n protocolVersions: z.array(z.number().int()),\n host: z.object({\n pid: z.number().int(),\n agentQaVersion: z.string(),\n playwrightVersion: z.string(),\n webdriverioVersion: z.string(),\n }),\n entry: z.string(),\n options: JsonObjectSchema,\n runFacts: z.object({ runId: z.string().optional() }).optional(),\n})\nexport type InitializeParams = z.infer<typeof InitializeParamsSchema>\n\nexport const InitializeResultSchema = z.object({\n protocolVersion: z.number().int(),\n plugin: z.object({ name: z.string(), version: z.string() }),\n serves: z.array(z.enum(PLUGIN_SERVES)),\n methods: z.array(z.enum(OPTIONAL_PLUGIN_METHODS)),\n})\nexport type InitializeResult = z.infer<typeof InitializeResultSchema>\n\nexport const CheckParamsSchema = z.object({\n remotes: z.array(z.object({ name: z.string(), settings: JsonObjectSchema })),\n})\nexport type CheckParams = z.infer<typeof CheckParamsSchema>\n\nexport const CheckResultSchema = z.object({\n state: z.enum(['ok', 'warn']),\n lines: z.array(z.string()),\n})\nexport type CheckResult = z.infer<typeof CheckResultSchema>\n\nconst WebSessionSchema = z.object({\n platform: z.literal('web'),\n engine: z.enum(['chromium', 'firefox', 'webkit']),\n context: z.enum(['new', 'reuse']),\n})\n\nconst DeviceSessionSchema = z.object({\n platform: z.enum(['android', 'ios']),\n capabilities: JsonObjectSchema,\n})\n\nexport const AcquireParamsSchema = z.object({\n remote: z.string(),\n settings: JsonObjectSchema,\n session: z.discriminatedUnion('platform', [WebSessionSchema, DeviceSessionSchema]),\n run: z.object({ testName: z.string().optional() }).optional(),\n})\nexport type AcquireParams = z.infer<typeof AcquireParamsSchema>\n\nexport const AcquireResultSchema = z.object({\n handle: HandleSchema,\n protocol: z.enum(PLUGIN_SERVES),\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n capabilities: JsonObjectSchema.optional(),\n mask: z.array(z.string()).optional(),\n link: z.string().optional(),\n})\nexport type AcquireResult = z.infer<typeof AcquireResultSchema>\n\nexport const UploadAppParamsSchema = z.object({\n remote: z.string(),\n settings: JsonObjectSchema,\n platform: z.enum(['android', 'ios']),\n path: z.string(),\n sha256: z.string(),\n size: z.number().int().nonnegative(),\n})\nexport type UploadAppParams = z.infer<typeof UploadAppParamsSchema>\n\nexport const UploadAppResultSchema = z.object({ ref: z.string() })\nexport type UploadAppResult = z.infer<typeof UploadAppResultSchema>\n\nexport const StartedParamsSchema = z.object({\n handle: HandleSchema,\n sessionId: z.string().optional(),\n})\nexport type StartedParams = z.infer<typeof StartedParamsSchema>\n\nexport const StartedResultSchema = z.object({\n link: z.string().optional(),\n appiumVersion: z.string().optional(),\n})\nexport type StartedResult = z.infer<typeof StartedResultSchema>\n\nexport const EndParamsSchema = z.object({\n handle: HandleSchema,\n outcome: z.enum(['passed', 'failed', 'error', 'cancelled']),\n reason: z.string().optional(),\n})\nexport type EndParams = z.infer<typeof EndParamsSchema>\n\nexport const ReleaseParamsSchema = z.object({ handle: HandleSchema })\nexport type ReleaseParams = z.infer<typeof ReleaseParamsSchema>\n\nexport const CancelParamsSchema = z.object({ id: RequestIdSchema })\nexport type CancelParams = z.infer<typeof CancelParamsSchema>\n\nexport const ProgressParamsSchema = z.object({\n id: RequestIdSchema,\n message: z.string(),\n queued: z.number().int().nonnegative().optional(),\n percent: z.number().min(0).max(100).optional(),\n})\nexport type ProgressParams = z.infer<typeof ProgressParamsSchema>\n\nexport const PluginErrorDataSchema = z.object({\n kind: z.enum(PLUGIN_FAILURE_KINDS),\n path: z.string().optional(),\n handle: HandleSchema.optional(),\n supported: z.array(z.number().int()).optional(),\n requested: z.array(z.number().int()).optional(),\n})\nexport type PluginErrorData = z.infer<typeof PluginErrorDataSchema>\n","import { z } from 'zod'\nimport { OPTIONAL_PLUGIN_METHODS, PLUGIN_RUN_FACTS, PLUGIN_SERVES } from './messages.js'\n\n// The manifest sits at package.json[\"agent-qa\"].plugin.\nexport const PLUGIN_MANIFEST_FIELD = 'agent-qa'\n\nconst PackagePathSchema = z.string().min(1)\n\nconst RemotePluginManifestSchema = z.strictObject({\n kind: z.literal('remote'),\n runs: z.literal('process'),\n protocol: z.number().int().positive(),\n entry: PackagePathSchema,\n serves: z.array(z.enum(PLUGIN_SERVES)).nonempty(),\n methods: z.array(z.enum(OPTIONAL_PLUGIN_METHODS)),\n options: PackagePathSchema,\n settings: PackagePathSchema,\n runFacts: z.array(z.enum(PLUGIN_RUN_FACTS)).optional(),\n skill: PackagePathSchema.optional(),\n})\n\nconst ModelAuthManifestSchema = z.strictObject({\n kind: z.literal('model-auth'),\n runs: z.literal('in-process'),\n entry: PackagePathSchema,\n options: PackagePathSchema.optional(),\n})\n\nconst ModelProviderManifestSchema = z.strictObject({\n kind: z.literal('model-provider'),\n runs: z.literal('in-process'),\n entry: PackagePathSchema,\n options: PackagePathSchema.optional(),\n})\n\nexport const PluginManifestSchema = z.discriminatedUnion('kind', [\n RemotePluginManifestSchema,\n ModelAuthManifestSchema,\n ModelProviderManifestSchema,\n])\nexport type PluginManifest = z.infer<typeof PluginManifestSchema>\nexport type RemotePluginManifest = z.infer<typeof RemotePluginManifestSchema>\n","export function encodeMessage(message: unknown): string {\n return `${JSON.stringify(message)}\\n`\n}\n\nexport interface LineDecoderOptions {\n maxLineBytes: number\n onLine: (line: string) => void\n onOverflow: () => void\n}\n\nexport interface LineDecoder {\n push(chunk: Uint8Array | string): void\n end(): void\n}\n\nconst NEWLINE = 0x0a\n\nexport function createLineDecoder({\n maxLineBytes,\n onLine,\n onOverflow,\n}: LineDecoderOptions): LineDecoder {\n const encoder = new TextEncoder()\n const decoder = new TextDecoder()\n let parts: Uint8Array[] = []\n let size = 0\n let discarding = false\n\n const append = (segment: Uint8Array) => {\n if (discarding || segment.length === 0) return\n if (size + segment.length > maxLineBytes) {\n discarding = true\n parts = []\n size = 0\n onOverflow()\n return\n }\n parts.push(new Uint8Array(segment))\n size += segment.length\n }\n\n const finishLine = () => {\n const wasDiscarding = discarding\n const lineParts = parts\n const lineSize = size\n parts = []\n size = 0\n discarding = false\n if (wasDiscarding || lineSize === 0) return\n const bytes = new Uint8Array(lineSize)\n let offset = 0\n for (const part of lineParts) {\n bytes.set(part, offset)\n offset += part.length\n }\n const line = decoder.decode(bytes).replace(/\\r$/, '')\n if (line.trim() !== '') onLine(line)\n }\n\n return {\n push(chunk) {\n const bytes = typeof chunk === 'string' ? encoder.encode(chunk) : chunk\n let start = 0\n while (start <= bytes.length) {\n const newline = bytes.indexOf(NEWLINE, start)\n if (newline === -1) {\n append(bytes.subarray(start))\n return\n }\n append(bytes.subarray(start, newline))\n finishLine()\n start = newline + 1\n }\n },\n end() {\n finishLine()\n },\n }\n}\n","const PROXY_NAMES = ['HTTP_PROXY', 'HTTPS_PROXY', 'NO_PROXY', 'ALL_PROXY'] as const\n\nexport const PLUGIN_ENVIRONMENT_NAMES = [\n 'PATH',\n 'HOME',\n 'TMPDIR',\n 'TEMP',\n 'TMP',\n 'LANG',\n 'TZ',\n ...PROXY_NAMES,\n ...PROXY_NAMES.map((name) => name.toLowerCase()),\n 'NODE_EXTRA_CA_CERTS',\n 'SSL_CERT_FILE',\n] as const\n\nexport const PLUGIN_WINDOWS_ENVIRONMENT_NAMES = [\n 'SystemRoot',\n 'ComSpec',\n 'PATHEXT',\n 'USERPROFILE',\n 'APPDATA',\n 'LOCALAPPDATA',\n] as const\n\n// Secrets reach a plugin only in initialize, so nothing else from the host's environment passes.\nexport function pluginEnvironment(\n env: Readonly<Record<string, string | undefined>>,\n platform: string,\n): Record<string, string> {\n const windows = platform === 'win32'\n const names = new Set<string>(PLUGIN_ENVIRONMENT_NAMES)\n if (windows) {\n for (const name of PLUGIN_WINDOWS_ENVIRONMENT_NAMES) names.add(name.toUpperCase())\n }\n const passes = (key: string): boolean => {\n if (key.startsWith('LC_')) return true\n if (names.has(key)) return true\n // Windows names are case-insensitive: Path is PATH there.\n return windows && names.has(key.toUpperCase())\n }\n const out: Record<string, string> = {}\n for (const [key, value] of Object.entries(env)) {\n if (value === undefined || key.toUpperCase() === 'NODE_OPTIONS') continue\n if (passes(key)) out[key] = value\n }\n return out\n}\n"],"mappings":"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"}