@ai-matrx/desktop-protocol 0.21.20 → 0.21.22

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.21.22
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/desktop-protocol/v0.21.21..npm/desktop-protocol/v0.21.22 -- apps/shared/desktop-protocol`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## 0.21.21
10
+
11
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
12
+ `git diff npm/desktop-protocol/v0.21.20..npm/desktop-protocol/v0.21.21 -- apps/shared/desktop-protocol`).
13
+ No source changes intended and no consumer action required.
14
+
3
15
  ## 0.21.20
4
16
 
5
17
  Automatic changed-only republish (docs/metadata drift since the last tag — see
package/dist/client.cjs CHANGED
@@ -144,7 +144,7 @@ var import_zod2 = require("zod");
144
144
  var import_zod = require("zod");
145
145
  var import_uuid = require("@ai-matrx/kit/uuid");
146
146
  var PROTOCOL_MAJOR = 1;
147
- var PROTOCOL_MINOR = 26;
147
+ var PROTOCOL_MINOR = 28;
148
148
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
149
149
  var ProtocolVersion = import_zod.z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
150
150
  var RequestId = import_zod.z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -216,8 +216,19 @@ var ErrorReason = import_zod2.z.enum([
216
216
  // RESOURCE_BUSY (retryable): the service is starting or restarting
217
217
  "service_restarted",
218
218
  // RESOURCE_GONE: the service died while this request ran
219
- "service_failed"
219
+ "service_failed",
220
220
  // INTERNAL: the service could not be started (see models.status)
221
+ // 1.28 (REASONS_SINCE): the `browser` capability (the AI Matrx extension as Matrx 2's client)
222
+ "browser_not_connected",
223
+ // NOT_FOUND: no browser with the extension is connected (or none routable)
224
+ "browser_ambiguous",
225
+ // CONFLICT: several browsers are connected and none was named
226
+ "browser_account_mismatch",
227
+ // AUTH_FORBIDDEN: the named browser is signed in to another account
228
+ "browser_connection_off",
229
+ // AUTH_FORBIDDEN: the person turned Browser connection off
230
+ "awaiting_confirmation"
231
+ // TIMEOUT: the person did not answer the browser's confirmation in time
221
232
  ]);
222
233
  var FsPatchEditFailure = import_zod2.z.strictObject({ edit_index: nonNegInt, reason: import_zod2.z.string().max(300) });
223
234
  var ProtocolErrorBody = import_zod2.z.strictObject({
@@ -2458,7 +2469,12 @@ var AppsWindowsUpdateStateResult = import_zod30.z.strictObject({
2458
2469
  /** When the update became pending (the download's time), when known. */
2459
2470
  since_ms: epochMs.nullable(),
2460
2471
  /** Windows open when the update became pending (or last seen open) that are closed now. */
2461
- closed: import_zod30.z.array(ChatPlace).max(200)
2472
+ closed: import_zod30.z.array(ChatPlace).max(200),
2473
+ /**
2474
+ * Since 1.27: the windows in `closed` that the update itself quit (the app's log records a quit for
2475
+ * the update within a minute of when each was last seen running). Absent: not known.
2476
+ */
2477
+ closed_by_update: import_zod30.z.array(ChatPlace).max(200).optional()
2462
2478
  });
2463
2479
  var AppsWindowsReopenParams = import_zod30.z.strictObject({ app_key: AppKey, windows: import_zod30.z.array(ChatPlace).min(1).max(200) });
2464
2480
  var AppsWindowsReopenResult = import_zod30.z.strictObject({ message: import_zod30.z.string().max(400), opened: import_zod30.z.array(ChatPlace).max(200) });
@@ -2473,6 +2489,109 @@ var AppsWindowsUpdateAndReopenResult = import_zod30.z.strictObject({
2473
2489
  installed_version: import_zod30.z.string().max(64).nullable()
2474
2490
  });
2475
2491
 
2492
+ // src/schema/browser.ts
2493
+ var import_zod31 = require("zod");
2494
+ var BrowserClientInstance = import_zod31.z.string().min(1).max(64).regex(/^[A-Za-z0-9_.:-]+$/);
2495
+ var BrowserKind = import_zod31.z.enum(["chrome", "edge", "brave", "arc", "opera", "vivaldi", "chromium", "firefox", "other"]);
2496
+ var BrowserSessionState = import_zod31.z.enum(["connected", "different_account", "extension_signed_out", "device_signed_out", "unverified"]);
2497
+ var BrowserSession = import_zod31.z.strictObject({
2498
+ client_instance: BrowserClientInstance,
2499
+ /** What the person sees ("Chrome — Work"), set by the extension. */
2500
+ client_label: import_zod31.z.string().min(1).max(128),
2501
+ browser: BrowserKind,
2502
+ extension_version: import_zod31.z.string().min(1).max(32),
2503
+ state: BrowserSessionState,
2504
+ /** True only for `connected`: an agent's call can reach this session. */
2505
+ routable: import_zod31.z.boolean(),
2506
+ /** The extension's account email from its token (null when signed out or unknown). */
2507
+ account_email: import_zod31.z.string().max(320).nullable(),
2508
+ connected_at_ms: epochMs,
2509
+ last_call_at_ms: epochMs.nullable(),
2510
+ calls: nonNegInt,
2511
+ errors: nonNegInt,
2512
+ /** Call latency over the last 200 calls; null before the first. */
2513
+ p50_ms: nonNegInt.nullable(),
2514
+ p95_ms: nonNegInt.nullable(),
2515
+ /** A call is waiting for the person to confirm it in the browser. */
2516
+ awaiting_confirmation: import_zod31.z.boolean()
2517
+ });
2518
+ var BrowserRegisterParams = import_zod31.z.strictObject({
2519
+ client_instance: BrowserClientInstance,
2520
+ client_label: import_zod31.z.string().min(1).max(128),
2521
+ browser: BrowserKind,
2522
+ extension_version: import_zod31.z.string().min(1).max(32),
2523
+ /** The extension's current AI Matrx access token, checked against the device owner; null when signed out. */
2524
+ account_token: import_zod31.z.string().min(16).max(8192).nullable()
2525
+ });
2526
+ var BrowserRegisterResult = import_zod31.z.strictObject({ session: BrowserSession });
2527
+ var BrowserCallError = import_zod31.z.strictObject({
2528
+ message: import_zod31.z.string().max(1e3),
2529
+ /** The extension's own error code, when it has one ("tool_not_found", "denied"). */
2530
+ code: import_zod31.z.string().max(64).nullable()
2531
+ });
2532
+ var BrowserResultParams = import_zod31.z.strictObject({
2533
+ call_id: import_zod31.z.string().min(1).max(64),
2534
+ ok: import_zod31.z.boolean(),
2535
+ /** The tool's result when ok (any JSON). */
2536
+ result: import_zod31.z.unknown(),
2537
+ error: BrowserCallError.nullable()
2538
+ });
2539
+ var BrowserResultResult = import_zod31.z.strictObject({ accepted: import_zod31.z.boolean() });
2540
+ var BrowserCallPhase = import_zod31.z.enum(["awaiting_confirmation", "running"]);
2541
+ var BrowserProgressParams = import_zod31.z.strictObject({ call_id: import_zod31.z.string().min(1).max(64), phase: BrowserCallPhase });
2542
+ var BrowserProgressResult = import_zod31.z.strictObject({ accepted: import_zod31.z.boolean() });
2543
+ var BrowserSessionsParams = import_zod31.z.strictObject({});
2544
+ var BrowserSessionsResult = import_zod31.z.strictObject({
2545
+ /** The person's Browser connection switch. Off: no pairing, no extension sessions. */
2546
+ enabled: import_zod31.z.boolean(),
2547
+ /** Whether Matrx 2 is signed in (without an owner no session is routable). */
2548
+ owner_signed_in: import_zod31.z.boolean(),
2549
+ sessions: import_zod31.z.array(BrowserSession).max(64)
2550
+ });
2551
+ var BrowserDisconnectParams = import_zod31.z.strictObject({ client_instance: BrowserClientInstance });
2552
+ var BrowserDisconnectResult = import_zod31.z.strictObject({ disconnected: import_zod31.z.boolean() });
2553
+ var BrowserSetEnabledParams = import_zod31.z.strictObject({ enabled: import_zod31.z.boolean() });
2554
+ var BrowserSetEnabledResult = import_zod31.z.strictObject({ enabled: import_zod31.z.boolean() });
2555
+ var BrowserPairCodeParams = import_zod31.z.strictObject({});
2556
+ var BrowserPairCodeResult = import_zod31.z.strictObject({ code: import_zod31.z.string().min(16).max(128) });
2557
+ var BrowserPairResetParams = import_zod31.z.strictObject({});
2558
+ var BrowserCallParams = import_zod31.z.strictObject({
2559
+ tool: import_zod31.z.string().min(1).max(96).regex(/^[a-z][a-z0-9_]*$/),
2560
+ args: import_zod31.z.record(import_zod31.z.string(), import_zod31.z.unknown()),
2561
+ /** Which session; default: the most recently active routable one (BROWSER ambiguity → CONFLICT). */
2562
+ client_instance: BrowserClientInstance.optional(),
2563
+ /** How long to wait, including a person's confirmation; default 120 s. */
2564
+ timeout_ms: import_zod31.z.int().min(1e3).max(6e5).optional()
2565
+ });
2566
+ var BrowserCallResult = import_zod31.z.strictObject({
2567
+ client_instance: BrowserClientInstance,
2568
+ result: import_zod31.z.unknown(),
2569
+ duration_ms: nonNegInt
2570
+ });
2571
+ var BrowserInvokeEvent = import_zod31.z.strictObject({
2572
+ call_id: import_zod31.z.string().min(1).max(64),
2573
+ tool: import_zod31.z.string().min(1).max(96),
2574
+ args: import_zod31.z.record(import_zod31.z.string(), import_zod31.z.unknown()),
2575
+ deadline_ms: epochMs
2576
+ });
2577
+ var BrowserSessionsChangedEvent = import_zod31.z.strictObject({ count: nonNegInt, enabled: import_zod31.z.boolean() });
2578
+ var BrowserProgressEvent = import_zod31.z.strictObject({
2579
+ call_id: import_zod31.z.string().min(1).max(64),
2580
+ client_instance: BrowserClientInstance,
2581
+ phase: BrowserCallPhase
2582
+ });
2583
+ var DesktopHealth = import_zod31.z.strictObject({
2584
+ status: import_zod31.z.literal("ok"),
2585
+ service: import_zod31.z.literal("matrx-desktop"),
2586
+ version: import_zod31.z.string().max(32),
2587
+ protocol_version: import_zod31.z.string().max(16),
2588
+ ws_path: import_zod31.z.literal("/v1/connect"),
2589
+ device_id: import_zod31.z.string().max(64),
2590
+ browser_connection: import_zod31.z.enum(["on", "off"])
2591
+ });
2592
+ var BrowserPairRequest = import_zod31.z.strictObject({ client_instance: BrowserClientInstance });
2593
+ var BrowserPairResult = import_zod31.z.strictObject({ pair_token: import_zod31.z.string().min(16).max(128), ws_path: import_zod31.z.literal("/v1/connect") });
2594
+
2476
2595
  // src/schema/registry.ts
2477
2596
  var FS_ERR = ["NOT_FOUND", "PERMISSION_DENIED_OS", "INVALID_PARAMS", "RESOURCE_BUSY", "INTERNAL"];
2478
2597
  var OPS = {
@@ -2618,7 +2737,17 @@ var OPS = {
2618
2737
  // 1.26: the app's own update (it installs only once every window quit) and bringing the windows back.
2619
2738
  "apps.windows.update_state": { params: AppsWindowsUpdateStateParams, result: AppsWindowsUpdateStateResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2620
2739
  "apps.windows.reopen": { params: AppsWindowsReopenParams, result: AppsWindowsReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2621
- "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] }
2740
+ "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2741
+ // 1.28: the AI Matrx extension as a client (register, result, progress), the Browsers screen, and agents' calls.
2742
+ "browser.register": { params: BrowserRegisterParams, result: BrowserRegisterResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INVALID_PARAMS", "INTERNAL"] },
2743
+ "browser.result": { params: BrowserResultParams, result: BrowserResultResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "PAYLOAD_TOO_LARGE"] },
2744
+ "browser.progress": { params: BrowserProgressParams, result: BrowserProgressResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN"] },
2745
+ "browser.sessions": { params: BrowserSessionsParams, result: BrowserSessionsResult, kind: "unary", since: "1.28", errors: ["INTERNAL"] },
2746
+ "browser.disconnect": { params: BrowserDisconnectParams, result: BrowserDisconnectResult, kind: "unary", since: "1.28", errors: ["NOT_FOUND", "AUTH_FORBIDDEN"] },
2747
+ "browser.set_enabled": { params: BrowserSetEnabledParams, result: BrowserSetEnabledResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2748
+ "browser.pair_code": { params: BrowserPairCodeParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2749
+ "browser.pair_reset": { params: BrowserPairResetParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2750
+ "browser.call": { params: BrowserCallParams, result: BrowserCallResult, kind: "unary", since: "1.28", errors: ["NOT_FOUND", "CONFLICT", "AUTH_FORBIDDEN", "INVALID_PARAMS", "TIMEOUT", "CANCELLED", "RESOURCE_GONE", "PAYLOAD_TOO_LARGE", "INTERNAL"] }
2622
2751
  };
2623
2752
  var EVENTS = {
2624
2753
  "fs.changed": FsChangedEvent,
@@ -2632,7 +2761,10 @@ var EVENTS = {
2632
2761
  "coding.history.progress": CodingHistoryProgressEvent,
2633
2762
  "relay.device_status": RelayDeviceStatusEvent,
2634
2763
  "relay.auth_expiring": RelayAuthExpiringEvent,
2635
- "diag.errors.changed": DiagErrorsChangedEvent
2764
+ "diag.errors.changed": DiagErrorsChangedEvent,
2765
+ "browser.invoke": BrowserInvokeEvent,
2766
+ "browser.sessions_changed": BrowserSessionsChangedEvent,
2767
+ "browser.progress": BrowserProgressEvent
2636
2768
  };
2637
2769
 
2638
2770
  // src/client/client.ts