@stelis/agent-q-core 0.0.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.
Files changed (47) hide show
  1. package/README.md +144 -0
  2. package/dist/adapter-internal.d.ts +5 -0
  3. package/dist/adapter-internal.js +6 -0
  4. package/dist/adapter-internal.js.map +1 -0
  5. package/dist/config.d.ts +74 -0
  6. package/dist/config.js +489 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/core.d.ts +320 -0
  9. package/dist/core.js +840 -0
  10. package/dist/core.js.map +1 -0
  11. package/dist/device.d.ts +55 -0
  12. package/dist/device.js +23 -0
  13. package/dist/device.js.map +1 -0
  14. package/dist/errors.d.ts +6 -0
  15. package/dist/errors.js +20 -0
  16. package/dist/errors.js.map +1 -0
  17. package/dist/host-output-schema.d.ts +2437 -0
  18. package/dist/host-output-schema.js +655 -0
  19. package/dist/host-output-schema.js.map +1 -0
  20. package/dist/protocol-error.d.ts +4 -0
  21. package/dist/protocol-error.js +9 -0
  22. package/dist/protocol-error.js.map +1 -0
  23. package/dist/protocol-management-primitives.d.ts +27 -0
  24. package/dist/protocol-management-primitives.js +51 -0
  25. package/dist/protocol-management-primitives.js.map +1 -0
  26. package/dist/protocol-primitives.d.ts +53 -0
  27. package/dist/protocol-primitives.js +331 -0
  28. package/dist/protocol-primitives.js.map +1 -0
  29. package/dist/protocol.d.ts +207 -0
  30. package/dist/protocol.js +897 -0
  31. package/dist/protocol.js.map +1 -0
  32. package/dist/provider-protocol.d.ts +262 -0
  33. package/dist/provider-protocol.js +637 -0
  34. package/dist/provider-protocol.js.map +1 -0
  35. package/dist/public-error.d.ts +9 -0
  36. package/dist/public-error.js +79 -0
  37. package/dist/public-error.js.map +1 -0
  38. package/dist/safe-text.d.ts +31 -0
  39. package/dist/safe-text.js +143 -0
  40. package/dist/safe-text.js.map +1 -0
  41. package/dist/transport-invariants.d.ts +18 -0
  42. package/dist/transport-invariants.js +24 -0
  43. package/dist/transport-invariants.js.map +1 -0
  44. package/dist/usb.d.ts +76 -0
  45. package/dist/usb.js +454 -0
  46. package/dist/usb.js.map +1 -0
  47. package/package.json +58 -0
package/dist/usb.js ADDED
@@ -0,0 +1,454 @@
1
+ import { SerialPort } from "serialport";
2
+ import { existsSync } from "node:fs";
3
+ import { AgentQError } from "./errors.js";
4
+ import { assertAccountsResponse, assertApprovalHistoryResponse, assertCapabilitiesResponse, assertPolicyProposeResultResponse, assertPolicyResponse, assertSignResultResponse, assertConnectResponse, assertDisconnectResponse, assertIdentifyDeviceResponse, assertStatusResponse, makeConnectRequest, makeDisconnectRequest, makeGetCapabilitiesRequest, makeGetAccountsRequest, makeGetApprovalHistoryRequest, makePolicyProposeRequest, makeIdentifyDeviceRequest, makePolicyGetRequest, makeGetStatusRequest, consumeProtocolResponseChunk, parseJsonLine, parseProtocolResponse, ProtocolError, serializeRequest, } from "./protocol.js";
5
+ import { makeSignPersonalMessageRequest, makeSignTransactionRequest, } from "./provider-protocol.js";
6
+ import { AGENT_Q_USB_PRODUCT_ID, AGENT_Q_USB_VENDOR_ID, DEFAULT_AGENT_Q_USB_BAUD_RATE, INTERNAL_USB_DEADLINE_MS, } from "./transport-invariants.js";
7
+ export { AGENT_Q_USB_PRODUCT_ID, AGENT_Q_USB_VENDOR_ID, INTERNAL_USB_DEADLINE_MS };
8
+ export class SerialPortUsbDriver {
9
+ async listPorts() {
10
+ return (await SerialPort.list()).map((port) => ({
11
+ ...port,
12
+ path: resolveUsbCalloutPath(port.path),
13
+ }));
14
+ }
15
+ async requestStatus(portPath, deadlineMs) {
16
+ return requestStatusOverSerial(portPath, deadlineMs);
17
+ }
18
+ async identifyDevice(portPath, code, deadlineMs) {
19
+ return identifyDeviceOverSerial(portPath, code, deadlineMs);
20
+ }
21
+ async connectDevice(portPath, clientName, deadlineMs) {
22
+ return connectDeviceOverSerial(portPath, clientName, deadlineMs);
23
+ }
24
+ async disconnectDevice(portPath, sessionId, deadlineMs) {
25
+ return disconnectDeviceOverSerial(portPath, sessionId, deadlineMs);
26
+ }
27
+ async getCapabilities(portPath, sessionId, deadlineMs) {
28
+ return getCapabilitiesOverSerial(portPath, sessionId, deadlineMs);
29
+ }
30
+ async getAccounts(portPath, sessionId, deadlineMs) {
31
+ return getAccountsOverSerial(portPath, sessionId, deadlineMs);
32
+ }
33
+ async policyGet(portPath, sessionId, deadlineMs) {
34
+ return policyGetOverSerial(portPath, sessionId, deadlineMs);
35
+ }
36
+ async getApprovalHistory(portPath, sessionId, params, deadlineMs) {
37
+ return getApprovalHistoryOverSerial(portPath, sessionId, params, deadlineMs);
38
+ }
39
+ async policyPropose(portPath, sessionId, policy, deadlineMs) {
40
+ return policyProposeOverSerial(portPath, sessionId, policy, deadlineMs);
41
+ }
42
+ async signTransaction(portPath, sessionId, route, params, deadlineMs) {
43
+ return signTransactionOverSerial(portPath, sessionId, route, params, deadlineMs);
44
+ }
45
+ async signPersonalMessage(portPath, sessionId, route, params, deadlineMs) {
46
+ return signPersonalMessageOverSerial(portPath, sessionId, route, params, deadlineMs);
47
+ }
48
+ }
49
+ export function resolveUsbCalloutPath(path, platform = process.platform, pathExists = existsSync) {
50
+ if (platform !== "darwin" || !path.startsWith("/dev/tty.")) {
51
+ return path;
52
+ }
53
+ const calloutPath = `/dev/cu.${path.slice("/dev/tty.".length)}`;
54
+ return pathExists(calloutPath) ? calloutPath : path;
55
+ }
56
+ export function validateInternalDeadlineMs(value) {
57
+ if (value === undefined) {
58
+ return INTERNAL_USB_DEADLINE_MS;
59
+ }
60
+ if (!Number.isInteger(value) || typeof value !== "number" || value <= 0) {
61
+ throw new AgentQError("agent_q_error", "Internal USB deadline is invalid.", false);
62
+ }
63
+ if (value > INTERNAL_USB_DEADLINE_MS) {
64
+ throw new AgentQError("agent_q_error", "Internal USB deadline is invalid.", false);
65
+ }
66
+ return value;
67
+ }
68
+ export function isLikelyAgentQUsbPort(port) {
69
+ const vendorId = normalizeUsbId(port.vendorId);
70
+ const productId = normalizeUsbId(port.productId);
71
+ const manufacturer = port.manufacturer?.toLowerCase() ?? "";
72
+ const pnpId = port.pnpId?.toLowerCase() ?? "";
73
+ const serialNumber = port.serialNumber ?? "";
74
+ const hasLikelyDescriptor = manufacturer.includes("espressif") || pnpId.includes("303a") || pnpId.includes("esp");
75
+ const hasUsbSerialPath = /(^|[/\\])(cu|tty)\.usbmodem/i.test(port.path);
76
+ const hasDeviceSerial = serialNumber.length > 0;
77
+ if (vendorId.length > 0 || productId.length > 0) {
78
+ if (vendorId !== AGENT_Q_USB_VENDOR_ID || productId !== AGENT_Q_USB_PRODUCT_ID) {
79
+ return false;
80
+ }
81
+ return manufacturer.length === 0 && pnpId.length === 0 ? true : hasLikelyDescriptor;
82
+ }
83
+ return hasLikelyDescriptor && hasUsbSerialPath && hasDeviceSerial;
84
+ }
85
+ export async function scanUsbDevices(driver, deadlineMs = INTERNAL_USB_DEADLINE_MS) {
86
+ return (await scanUsbDeviceStatuses(driver, deadlineMs)).devices;
87
+ }
88
+ // Enforce a host-side deadline on a transport call so a slow or uncooperative
89
+ // driver — one that ignores its deadline argument, or a stuck listPorts() — cannot
90
+ // push the scan past its budget. A genuine rejection from `work` propagates
91
+ // UNCHANGED, so callers can still tell an enumeration/transport error apart from
92
+ // "no device present"; swallowing the error (returning []) would conflate the two.
93
+ function raceDeadline(work, remainingMs, timeoutMessage) {
94
+ // Swallow only a LATE rejection from the losing branch to avoid an unhandled
95
+ // rejection; an early rejection still propagates through the race below.
96
+ work.catch(() => { });
97
+ let timer;
98
+ const timeout = new Promise((_resolve, reject) => {
99
+ timer = setTimeout(() => reject(new AgentQError("timeout", timeoutMessage, true)), Math.max(0, remainingMs));
100
+ });
101
+ return Promise.race([work, timeout]).finally(() => clearTimeout(timer));
102
+ }
103
+ // Single enforcement boundary for the transport deadline contract. Wrapping a
104
+ // driver here races every deadline-bearing call against its own deadline argument,
105
+ // so a driver that ignores the argument still cannot exceed the budget. Applied
106
+ // once in AgentQCore, this bounds deadline-bearing calls in one place instead
107
+ // of relying on each call site to remember to race.
108
+ // listPorts has no deadline argument and is bounded by the shared scan deadline in
109
+ // scanUsbDeviceStatuses.
110
+ export function deadlineEnforcingDriver(driver) {
111
+ return {
112
+ listPorts: () => driver.listPorts(),
113
+ requestStatus: (portPath, deadlineMs) => raceDeadline(driver.requestStatus(portPath, deadlineMs), deadlineMs, "USB status handshake exceeded its timeout."),
114
+ identifyDevice: (portPath, code, deadlineMs) => raceDeadline(driver.identifyDevice(portPath, code, deadlineMs), deadlineMs, "USB identify exceeded its timeout."),
115
+ connectDevice: (portPath, clientName, deadlineMs) => raceDeadline(driver.connectDevice(portPath, clientName, deadlineMs), deadlineMs, "USB connect exceeded its timeout."),
116
+ disconnectDevice: (portPath, sessionId, deadlineMs) => raceDeadline(driver.disconnectDevice(portPath, sessionId, deadlineMs), deadlineMs, "USB disconnect exceeded its timeout."),
117
+ getCapabilities: (portPath, sessionId, deadlineMs) => raceDeadline(driver.getCapabilities(portPath, sessionId, deadlineMs), deadlineMs, "USB get capabilities exceeded its timeout."),
118
+ getAccounts: (portPath, sessionId, deadlineMs) => raceDeadline(driver.getAccounts(portPath, sessionId, deadlineMs), deadlineMs, "USB get accounts exceeded its timeout."),
119
+ policyGet: (portPath, sessionId, deadlineMs) => raceDeadline(driver.policyGet(portPath, sessionId, deadlineMs), deadlineMs, "USB policy_get exceeded its timeout."),
120
+ getApprovalHistory: (portPath, sessionId, params, deadlineMs) => raceDeadline(driver.getApprovalHistory(portPath, sessionId, params, deadlineMs), deadlineMs, "USB get approval history exceeded its timeout."),
121
+ policyPropose: (portPath, sessionId, policy, deadlineMs) => raceDeadline(driver.policyPropose(portPath, sessionId, policy, deadlineMs), deadlineMs, "USB policy_propose exceeded its timeout."),
122
+ signTransaction: (portPath, sessionId, route, params, deadlineMs) => raceDeadline(driver.signTransaction(portPath, sessionId, route, params, deadlineMs), deadlineMs, "USB sign_transaction exceeded its timeout."),
123
+ signPersonalMessage: (portPath, sessionId, route, params, deadlineMs) => raceDeadline(driver.signPersonalMessage(portPath, sessionId, route, params, deadlineMs), deadlineMs, "USB sign_personal_message exceeded its timeout."),
124
+ };
125
+ }
126
+ export async function scanUsbDeviceStatuses(driver, deadlineMs = INTERNAL_USB_DEADLINE_MS, now = () => Date.now()) {
127
+ // deadlineMs is a total wall-clock budget for the whole scan, not a per-candidate
128
+ // limit. Port enumeration AND every handshake draw from one shared deadline, so
129
+ // a slow listPorts() or many candidates cannot push the call past deadlineMs.
130
+ // `now` is injectable so the deadline is deterministically testable.
131
+ const totalDeadlineMs = validateInternalDeadlineMs(deadlineMs);
132
+ const deadline = now() + totalDeadlineMs;
133
+ // Enumeration is bounded by the deadline but its errors propagate (a failed
134
+ // listPorts is not the same as "no devices"; the caller maps it).
135
+ const ports = await raceDeadline(driver.listPorts(), deadline - now(), "USB port enumeration exceeded the scan deadline.");
136
+ const candidates = ports.filter(isLikelyAgentQUsbPort);
137
+ const results = [];
138
+ const failures = [];
139
+ for (const candidate of candidates) {
140
+ const remainingMs = deadline - now();
141
+ if (remainingMs <= 0) {
142
+ // Budget exhausted before this candidate was reached.
143
+ failures.push({
144
+ portPath: candidate.path,
145
+ unavailableReason: "timeout",
146
+ });
147
+ continue;
148
+ }
149
+ try {
150
+ // scanUsbDeviceStatuses OWNS the total scan budget, so it bounds each
151
+ // handshake itself by the time remaining until the deadline. A raw/direct
152
+ // caller is therefore safe even without the AgentQCore driver wrapper; the
153
+ // wrapper adds the same bound for Core's non-scan transport calls and the
154
+ // overlap on this path is harmless (same timeout, whichever fires first).
155
+ const protocolResponse = await raceDeadline(driver.requestStatus(candidate.path, remainingMs), remainingMs, "USB status handshake exceeded the scan deadline.");
156
+ results.push({
157
+ portPath: candidate.path,
158
+ protocolResponse,
159
+ });
160
+ }
161
+ catch (error) {
162
+ failures.push({
163
+ portPath: candidate.path,
164
+ unavailableReason: mapErrorToUnavailableReason(error),
165
+ firmwareErrorCode: getFirmwareErrorCode(error),
166
+ });
167
+ // Scan only reports confirmed Agent-Q devices. Callers can use failures
168
+ // to explain why a previously known device is not live now.
169
+ }
170
+ }
171
+ return {
172
+ ports,
173
+ devices: results,
174
+ failures,
175
+ };
176
+ }
177
+ export function mapErrorToUnavailableReason(error) {
178
+ if (error instanceof AgentQError) {
179
+ if (isUnavailableReason(error.code)) {
180
+ return error.code;
181
+ }
182
+ if (error.code === "unsupported_version" || error.code === "incompatible_version") {
183
+ return "incompatible_version";
184
+ }
185
+ if (error.code === "timeout") {
186
+ return "timeout";
187
+ }
188
+ }
189
+ if (error instanceof ProtocolError) {
190
+ if (error.code === "unsupported_version" || error.code === "incompatible_version") {
191
+ return "incompatible_version";
192
+ }
193
+ return "handshake_failed";
194
+ }
195
+ const serialReason = classifySerialUnavailableReason(error);
196
+ if (serialReason !== null) {
197
+ return serialReason;
198
+ }
199
+ return "handshake_failed";
200
+ }
201
+ async function requestStatusOverSerial(portPath, deadlineMs) {
202
+ const request = makeGetStatusRequest();
203
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertStatusResponse(response));
204
+ }
205
+ async function identifyDeviceOverSerial(portPath, code, deadlineMs) {
206
+ const request = makeIdentifyDeviceRequest(code);
207
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertIdentifyDeviceResponse(response));
208
+ }
209
+ async function connectDeviceOverSerial(portPath, clientName, deadlineMs) {
210
+ const request = makeConnectRequest(clientName);
211
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertConnectResponse(response));
212
+ }
213
+ async function disconnectDeviceOverSerial(portPath, sessionId, deadlineMs) {
214
+ const request = makeDisconnectRequest(sessionId);
215
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertDisconnectResponse(response));
216
+ }
217
+ async function getCapabilitiesOverSerial(portPath, sessionId, deadlineMs) {
218
+ const request = makeGetCapabilitiesRequest(sessionId);
219
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertCapabilitiesResponse(response));
220
+ }
221
+ async function getAccountsOverSerial(portPath, sessionId, deadlineMs) {
222
+ const request = makeGetAccountsRequest(sessionId);
223
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertAccountsResponse(response));
224
+ }
225
+ async function policyGetOverSerial(portPath, sessionId, deadlineMs) {
226
+ const request = makePolicyGetRequest(sessionId);
227
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertPolicyResponse(response));
228
+ }
229
+ async function getApprovalHistoryOverSerial(portPath, sessionId, params, deadlineMs) {
230
+ const request = makeGetApprovalHistoryRequest(sessionId, params);
231
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertApprovalHistoryResponse(response));
232
+ }
233
+ async function policyProposeOverSerial(portPath, sessionId, policy, deadlineMs) {
234
+ const request = makePolicyProposeRequest(sessionId, policy);
235
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertPolicyProposeResultResponse(response));
236
+ }
237
+ async function signTransactionOverSerial(portPath, sessionId, route, params, deadlineMs) {
238
+ const request = makeSignTransactionRequest(sessionId, route.chain, route.method, params);
239
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertSignResultResponse(response));
240
+ }
241
+ async function signPersonalMessageOverSerial(portPath, sessionId, route, params, deadlineMs) {
242
+ const request = makeSignPersonalMessageRequest(sessionId, route.chain, route.method, params);
243
+ return requestOverSerial(portPath, request, deadlineMs, (response) => assertSignResultResponse(response));
244
+ }
245
+ async function requestOverSerial(portPath, request, deadlineMs, assertResponse) {
246
+ const port = new SerialPort({
247
+ path: portPath,
248
+ baudRate: DEFAULT_AGENT_Q_USB_BAUD_RATE,
249
+ autoOpen: false,
250
+ });
251
+ await openPort(port);
252
+ try {
253
+ // Flush discards only OS-side serial buffers. Bytes already in transit on
254
+ // the USB wire may still arrive after this call.
255
+ await flushPort(port);
256
+ return await new Promise((resolve, reject) => {
257
+ let settled = false;
258
+ let buffer = "";
259
+ const timer = setTimeout(() => {
260
+ settle(() => reject(new AgentQError("timeout", "Timed out waiting for Firmware response.", true)));
261
+ }, deadlineMs);
262
+ const settle = (complete) => {
263
+ if (settled) {
264
+ return;
265
+ }
266
+ settled = true;
267
+ clearTimeout(timer);
268
+ port.off("data", onData);
269
+ port.off("error", onError);
270
+ port.off("close", onClose);
271
+ complete();
272
+ };
273
+ const onError = (error) => {
274
+ settle(() => reject(mapSerialOpenError(error)));
275
+ };
276
+ const onClose = () => {
277
+ settle(() => reject(new AgentQError("transport_closed", "USB serial transport closed.", true)));
278
+ };
279
+ const onData = (chunk) => {
280
+ let lines;
281
+ try {
282
+ const consumed = consumeProtocolResponseChunk(buffer, chunk.toString("utf8"));
283
+ buffer = consumed.buffer;
284
+ lines = consumed.lines;
285
+ }
286
+ catch (error) {
287
+ settle(() => reject(toAgentQProtocolError(error)));
288
+ return;
289
+ }
290
+ for (const rawLine of lines) {
291
+ const line = rawLine.trim();
292
+ if (line.length === 0 || !line.startsWith("{")) {
293
+ continue;
294
+ }
295
+ let parsed;
296
+ try {
297
+ parsed = tryParseMatchingResponseLine(line, request.id, assertResponse);
298
+ }
299
+ catch (error) {
300
+ settle(() => reject(error));
301
+ return;
302
+ }
303
+ if (parsed !== undefined) {
304
+ settle(() => resolve(parsed));
305
+ return;
306
+ }
307
+ }
308
+ };
309
+ port.on("data", onData);
310
+ port.on("error", onError);
311
+ port.on("close", onClose);
312
+ port.write(serializeRequest(request), (error) => {
313
+ if (error) {
314
+ settle(() => reject(mapSerialOpenError(error)));
315
+ return;
316
+ }
317
+ port.drain((drainError) => {
318
+ if (drainError) {
319
+ settle(() => reject(mapSerialOpenError(drainError)));
320
+ }
321
+ });
322
+ });
323
+ });
324
+ }
325
+ finally {
326
+ await closePort(port);
327
+ }
328
+ }
329
+ function toAgentQProtocolError(error) {
330
+ if (error instanceof ProtocolError) {
331
+ return new AgentQError(error.code, error.message, error.code === "timeout");
332
+ }
333
+ return error;
334
+ }
335
+ /** @internal Exported for focused protocol-line tests; not part of Agent-Q's public API. */
336
+ export function tryParseMatchingResponseLine(line, expectedId, assertResponse) {
337
+ let parsed;
338
+ try {
339
+ parsed = parseJsonLine(line);
340
+ }
341
+ catch {
342
+ return undefined;
343
+ }
344
+ if (!isRecord(parsed)) {
345
+ return undefined;
346
+ }
347
+ if (parsed.id !== expectedId) {
348
+ if (parsed.id === undefined && parsed.type === "error") {
349
+ const response = parseProtocolResponse(line);
350
+ if (response.type === "error") {
351
+ throw new AgentQError(response.error.code, response.error.message, isRetryableIdlessFirmwareError(response.error.code));
352
+ }
353
+ }
354
+ return undefined;
355
+ }
356
+ try {
357
+ return assertResponse(parseProtocolResponse(line, expectedId));
358
+ }
359
+ catch (error) {
360
+ if (error instanceof ProtocolError) {
361
+ throw new AgentQError(error.code, error.message, error.code === "timeout");
362
+ }
363
+ throw error;
364
+ }
365
+ }
366
+ function openPort(port) {
367
+ return new Promise((resolve, reject) => {
368
+ port.open((error) => {
369
+ if (error) {
370
+ reject(mapSerialOpenError(error));
371
+ return;
372
+ }
373
+ resolve();
374
+ });
375
+ });
376
+ }
377
+ function flushPort(port) {
378
+ return new Promise((resolve, reject) => {
379
+ port.flush((error) => {
380
+ if (error) {
381
+ reject(mapSerialOpenError(error));
382
+ return;
383
+ }
384
+ resolve();
385
+ });
386
+ });
387
+ }
388
+ function closePort(port) {
389
+ if (!port.isOpen) {
390
+ return Promise.resolve();
391
+ }
392
+ return new Promise((resolve) => {
393
+ port.close(() => resolve());
394
+ });
395
+ }
396
+ function mapSerialOpenError(error) {
397
+ const message = error.message || "USB serial transport failed.";
398
+ const reason = classifySerialUnavailableReason(error);
399
+ if (reason !== null) {
400
+ return new AgentQError(reason, message, true);
401
+ }
402
+ return new AgentQError("handshake_failed", message, true);
403
+ }
404
+ function classifySerialUnavailableReason(error) {
405
+ const message = error instanceof Error ? error.message : "";
406
+ const code = isRecord(error) && typeof error.code === "string" ? error.code : "";
407
+ const text = `${code} ${message}`;
408
+ if (/\b(?:eacces|eperm)\b|operation not permitted|permission denied|access denied/i.test(text)) {
409
+ return "port_permission_denied";
410
+ }
411
+ if (/busy|resource busy|in use/i.test(text)) {
412
+ return "port_in_use";
413
+ }
414
+ if (/not found|cannot open|no such file|\benoent\b/i.test(text)) {
415
+ return "port_not_found";
416
+ }
417
+ if (/closed|disconnect/i.test(text)) {
418
+ return "transport_closed";
419
+ }
420
+ return null;
421
+ }
422
+ function normalizeUsbId(value) {
423
+ if (value === undefined || value.length === 0) {
424
+ return "";
425
+ }
426
+ return value.toLowerCase().replace(/^0x/, "").padStart(4, "0");
427
+ }
428
+ function isUnavailableReason(value) {
429
+ return (value === "timeout" ||
430
+ value === "port_not_found" ||
431
+ value === "port_in_use" ||
432
+ value === "port_permission_denied" ||
433
+ value === "handshake_failed" ||
434
+ value === "incompatible_version" ||
435
+ value === "transport_closed");
436
+ }
437
+ function isRetryableIdlessFirmwareError(code) {
438
+ // Current Firmware does not emit id-less transient errors. Keep this narrow
439
+ // because these errors cannot be correlated to a request id.
440
+ return code === "busy" || code === "timeout";
441
+ }
442
+ function getFirmwareErrorCode(error) {
443
+ if (error instanceof AgentQError && !isUnavailableReason(error.code)) {
444
+ return error.code;
445
+ }
446
+ if (error instanceof ProtocolError) {
447
+ return error.code;
448
+ }
449
+ return undefined;
450
+ }
451
+ function isRecord(value) {
452
+ return typeof value === "object" && value !== null && !Array.isArray(value);
453
+ }
454
+ //# sourceMappingURL=usb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usb.js","sourceRoot":"","sources":["../src/usb.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@stelis/agent-q-core",
3
+ "version": "0.0.0",
4
+ "description": "Agent-Q core for device transport, protocol requests, session state, config, and result parsing.",
5
+ "license": "UNLICENSED",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/stelis-dev/agent-q.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "main": "./dist/core.js",
13
+ "types": "./dist/core.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/core.d.ts",
17
+ "import": "./dist/core.js"
18
+ },
19
+ "./device": {
20
+ "types": "./dist/device.d.ts",
21
+ "import": "./dist/device.js"
22
+ },
23
+ "./adapter-internal": {
24
+ "types": "./dist/adapter-internal.d.ts",
25
+ "import": "./dist/adapter-internal.js"
26
+ },
27
+ "./protocol": {
28
+ "types": "./dist/protocol.d.ts",
29
+ "import": "./dist/protocol.js"
30
+ },
31
+ "./provider-protocol": {
32
+ "types": "./dist/provider-protocol.d.ts",
33
+ "import": "./dist/provider-protocol.js"
34
+ },
35
+ "./package.json": "./package.json"
36
+ },
37
+ "files": [
38
+ "dist",
39
+ "README.md"
40
+ ],
41
+ "scripts": {
42
+ "build": "npm run build:self",
43
+ "build:self": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.json",
44
+ "test": "npm run build && npm run test:self",
45
+ "test:self": "node --test test/*.test.mjs"
46
+ },
47
+ "dependencies": {
48
+ "serialport": "13.0.0",
49
+ "zod": "4.4.3"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "25.9.1",
53
+ "typescript": "6.0.3"
54
+ },
55
+ "engines": {
56
+ "node": ">=22"
57
+ }
58
+ }