@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/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { z } from "zod";
3
3
  import { UUID_SHAPE_PATTERN } from "@ai-matrx/kit/uuid";
4
4
  var PROTOCOL_MAJOR = 1;
5
- var PROTOCOL_MINOR = 26;
5
+ var PROTOCOL_MINOR = 28;
6
6
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
7
7
  var ProtocolVersion = z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
8
8
  var RequestId = z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -75,8 +75,19 @@ var ErrorReason = z2.enum([
75
75
  // RESOURCE_BUSY (retryable): the service is starting or restarting
76
76
  "service_restarted",
77
77
  // RESOURCE_GONE: the service died while this request ran
78
- "service_failed"
78
+ "service_failed",
79
79
  // INTERNAL: the service could not be started (see models.status)
80
+ // 1.28 (REASONS_SINCE): the `browser` capability (the AI Matrx extension as Matrx 2's client)
81
+ "browser_not_connected",
82
+ // NOT_FOUND: no browser with the extension is connected (or none routable)
83
+ "browser_ambiguous",
84
+ // CONFLICT: several browsers are connected and none was named
85
+ "browser_account_mismatch",
86
+ // AUTH_FORBIDDEN: the named browser is signed in to another account
87
+ "browser_connection_off",
88
+ // AUTH_FORBIDDEN: the person turned Browser connection off
89
+ "awaiting_confirmation"
90
+ // TIMEOUT: the person did not answer the browser's confirmation in time
80
91
  ]);
81
92
  var FsPatchEditFailure = z2.strictObject({ edit_index: nonNegInt, reason: z2.string().max(300) });
82
93
  var ProtocolErrorBody = z2.strictObject({
@@ -1414,7 +1425,12 @@ var AppsWindowsUpdateStateResult = z14.strictObject({
1414
1425
  /** When the update became pending (the download's time), when known. */
1415
1426
  since_ms: epochMs.nullable(),
1416
1427
  /** Windows open when the update became pending (or last seen open) that are closed now. */
1417
- closed: z14.array(ChatPlace).max(200)
1428
+ closed: z14.array(ChatPlace).max(200),
1429
+ /**
1430
+ * Since 1.27: the windows in `closed` that the update itself quit (the app's log records a quit for
1431
+ * the update within a minute of when each was last seen running). Absent: not known.
1432
+ */
1433
+ closed_by_update: z14.array(ChatPlace).max(200).optional()
1418
1434
  });
1419
1435
  var AppsWindowsReopenParams = z14.strictObject({ app_key: AppKey, windows: z14.array(ChatPlace).min(1).max(200) });
1420
1436
  var AppsWindowsReopenResult = z14.strictObject({ message: z14.string().max(400), opened: z14.array(ChatPlace).max(200) });
@@ -2517,6 +2533,114 @@ var CodingHistoryProgressEvent = z32.strictObject({
2517
2533
  failed: nonNegInt
2518
2534
  });
2519
2535
 
2536
+ // src/schema/browser.ts
2537
+ import { z as z33 } from "zod";
2538
+ var BrowserClientInstance = z33.string().min(1).max(64).regex(/^[A-Za-z0-9_.:-]+$/);
2539
+ var BrowserKind = z33.enum(["chrome", "edge", "brave", "arc", "opera", "vivaldi", "chromium", "firefox", "other"]);
2540
+ var BrowserSessionState = z33.enum(["connected", "different_account", "extension_signed_out", "device_signed_out", "unverified"]);
2541
+ var BrowserSession = z33.strictObject({
2542
+ client_instance: BrowserClientInstance,
2543
+ /** What the person sees ("Chrome — Work"), set by the extension. */
2544
+ client_label: z33.string().min(1).max(128),
2545
+ browser: BrowserKind,
2546
+ extension_version: z33.string().min(1).max(32),
2547
+ state: BrowserSessionState,
2548
+ /** True only for `connected`: an agent's call can reach this session. */
2549
+ routable: z33.boolean(),
2550
+ /** The extension's account email from its token (null when signed out or unknown). */
2551
+ account_email: z33.string().max(320).nullable(),
2552
+ connected_at_ms: epochMs,
2553
+ last_call_at_ms: epochMs.nullable(),
2554
+ calls: nonNegInt,
2555
+ errors: nonNegInt,
2556
+ /** Call latency over the last 200 calls; null before the first. */
2557
+ p50_ms: nonNegInt.nullable(),
2558
+ p95_ms: nonNegInt.nullable(),
2559
+ /** A call is waiting for the person to confirm it in the browser. */
2560
+ awaiting_confirmation: z33.boolean()
2561
+ });
2562
+ var BrowserRegisterParams = z33.strictObject({
2563
+ client_instance: BrowserClientInstance,
2564
+ client_label: z33.string().min(1).max(128),
2565
+ browser: BrowserKind,
2566
+ extension_version: z33.string().min(1).max(32),
2567
+ /** The extension's current AI Matrx access token, checked against the device owner; null when signed out. */
2568
+ account_token: z33.string().min(16).max(8192).nullable()
2569
+ });
2570
+ var BrowserRegisterResult = z33.strictObject({ session: BrowserSession });
2571
+ var BrowserCallError = z33.strictObject({
2572
+ message: z33.string().max(1e3),
2573
+ /** The extension's own error code, when it has one ("tool_not_found", "denied"). */
2574
+ code: z33.string().max(64).nullable()
2575
+ });
2576
+ var BrowserResultParams = z33.strictObject({
2577
+ call_id: z33.string().min(1).max(64),
2578
+ ok: z33.boolean(),
2579
+ /** The tool's result when ok (any JSON). */
2580
+ result: z33.unknown(),
2581
+ error: BrowserCallError.nullable()
2582
+ });
2583
+ var BrowserResultResult = z33.strictObject({ accepted: z33.boolean() });
2584
+ var BrowserCallPhase = z33.enum(["awaiting_confirmation", "running"]);
2585
+ var BrowserProgressParams = z33.strictObject({ call_id: z33.string().min(1).max(64), phase: BrowserCallPhase });
2586
+ var BrowserProgressResult = z33.strictObject({ accepted: z33.boolean() });
2587
+ var BrowserSessionsParams = z33.strictObject({});
2588
+ var BrowserSessionsResult = z33.strictObject({
2589
+ /** The person's Browser connection switch. Off: no pairing, no extension sessions. */
2590
+ enabled: z33.boolean(),
2591
+ /** Whether Matrx 2 is signed in (without an owner no session is routable). */
2592
+ owner_signed_in: z33.boolean(),
2593
+ sessions: z33.array(BrowserSession).max(64)
2594
+ });
2595
+ var BrowserDisconnectParams = z33.strictObject({ client_instance: BrowserClientInstance });
2596
+ var BrowserDisconnectResult = z33.strictObject({ disconnected: z33.boolean() });
2597
+ var BrowserSetEnabledParams = z33.strictObject({ enabled: z33.boolean() });
2598
+ var BrowserSetEnabledResult = z33.strictObject({ enabled: z33.boolean() });
2599
+ var BrowserPairCodeParams = z33.strictObject({});
2600
+ var BrowserPairCodeResult = z33.strictObject({ code: z33.string().min(16).max(128) });
2601
+ var BrowserPairResetParams = z33.strictObject({});
2602
+ var BrowserCallParams = z33.strictObject({
2603
+ tool: z33.string().min(1).max(96).regex(/^[a-z][a-z0-9_]*$/),
2604
+ args: z33.record(z33.string(), z33.unknown()),
2605
+ /** Which session; default: the most recently active routable one (BROWSER ambiguity → CONFLICT). */
2606
+ client_instance: BrowserClientInstance.optional(),
2607
+ /** How long to wait, including a person's confirmation; default 120 s. */
2608
+ timeout_ms: z33.int().min(1e3).max(6e5).optional()
2609
+ });
2610
+ var BrowserCallResult = z33.strictObject({
2611
+ client_instance: BrowserClientInstance,
2612
+ result: z33.unknown(),
2613
+ duration_ms: nonNegInt
2614
+ });
2615
+ var BrowserInvokeEvent = z33.strictObject({
2616
+ call_id: z33.string().min(1).max(64),
2617
+ tool: z33.string().min(1).max(96),
2618
+ args: z33.record(z33.string(), z33.unknown()),
2619
+ deadline_ms: epochMs
2620
+ });
2621
+ var BrowserSessionsChangedEvent = z33.strictObject({ count: nonNegInt, enabled: z33.boolean() });
2622
+ var BrowserProgressEvent = z33.strictObject({
2623
+ call_id: z33.string().min(1).max(64),
2624
+ client_instance: BrowserClientInstance,
2625
+ phase: BrowserCallPhase
2626
+ });
2627
+ var DesktopHealth = z33.strictObject({
2628
+ status: z33.literal("ok"),
2629
+ service: z33.literal("matrx-desktop"),
2630
+ version: z33.string().max(32),
2631
+ protocol_version: z33.string().max(16),
2632
+ ws_path: z33.literal("/v1/connect"),
2633
+ device_id: z33.string().max(64),
2634
+ browser_connection: z33.enum(["on", "off"])
2635
+ });
2636
+ var BrowserPairRequest = z33.strictObject({ client_instance: BrowserClientInstance });
2637
+ var BrowserPairResult = z33.strictObject({ pair_token: z33.string().min(16).max(128), ws_path: z33.literal("/v1/connect") });
2638
+ var MATRX_EXTENSION_IDS = {
2639
+ store: "hnfolienncfklkgmdjjmhhegglimlamg",
2640
+ development: "cihdmkcdjjckfhjpgoedmgfpoljebaml"
2641
+ };
2642
+ var DISCOVERY_FILE = { live: "matrx2.json", development: "matrx2-dev.json" };
2643
+
2520
2644
  // src/schema/registry.ts
2521
2645
  var FS_ERR = ["NOT_FOUND", "PERMISSION_DENIED_OS", "INVALID_PARAMS", "RESOURCE_BUSY", "INTERNAL"];
2522
2646
  var OPS = {
@@ -2662,7 +2786,17 @@ var OPS = {
2662
2786
  // 1.26: the app's own update (it installs only once every window quit) and bringing the windows back.
2663
2787
  "apps.windows.update_state": { params: AppsWindowsUpdateStateParams, result: AppsWindowsUpdateStateResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2664
2788
  "apps.windows.reopen": { params: AppsWindowsReopenParams, result: AppsWindowsReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2665
- "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] }
2789
+ "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2790
+ // 1.28: the AI Matrx extension as a client (register, result, progress), the Browsers screen, and agents' calls.
2791
+ "browser.register": { params: BrowserRegisterParams, result: BrowserRegisterResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INVALID_PARAMS", "INTERNAL"] },
2792
+ "browser.result": { params: BrowserResultParams, result: BrowserResultResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "PAYLOAD_TOO_LARGE"] },
2793
+ "browser.progress": { params: BrowserProgressParams, result: BrowserProgressResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN"] },
2794
+ "browser.sessions": { params: BrowserSessionsParams, result: BrowserSessionsResult, kind: "unary", since: "1.28", errors: ["INTERNAL"] },
2795
+ "browser.disconnect": { params: BrowserDisconnectParams, result: BrowserDisconnectResult, kind: "unary", since: "1.28", errors: ["NOT_FOUND", "AUTH_FORBIDDEN"] },
2796
+ "browser.set_enabled": { params: BrowserSetEnabledParams, result: BrowserSetEnabledResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2797
+ "browser.pair_code": { params: BrowserPairCodeParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2798
+ "browser.pair_reset": { params: BrowserPairResetParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2799
+ "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"] }
2666
2800
  };
2667
2801
  var EVENTS = {
2668
2802
  "fs.changed": FsChangedEvent,
@@ -2676,7 +2810,10 @@ var EVENTS = {
2676
2810
  "coding.history.progress": CodingHistoryProgressEvent,
2677
2811
  "relay.device_status": RelayDeviceStatusEvent,
2678
2812
  "relay.auth_expiring": RelayAuthExpiringEvent,
2679
- "diag.errors.changed": DiagErrorsChangedEvent
2813
+ "diag.errors.changed": DiagErrorsChangedEvent,
2814
+ "browser.invoke": BrowserInvokeEvent,
2815
+ "browser.sessions_changed": BrowserSessionsChangedEvent,
2816
+ "browser.progress": BrowserProgressEvent
2680
2817
  };
2681
2818
  var SERVICES = {
2682
2819
  ml: {
@@ -3129,7 +3266,36 @@ var NAMED_SCHEMAS = {
3129
3266
  AppsWindowsReopenParams,
3130
3267
  AppsWindowsReopenResult,
3131
3268
  AppsWindowsUpdateAndReopenParams,
3132
- AppsWindowsUpdateAndReopenResult
3269
+ AppsWindowsUpdateAndReopenResult,
3270
+ BrowserClientInstance,
3271
+ BrowserKind,
3272
+ BrowserSessionState,
3273
+ BrowserSession,
3274
+ BrowserRegisterParams,
3275
+ BrowserRegisterResult,
3276
+ BrowserCallError,
3277
+ BrowserResultParams,
3278
+ BrowserResultResult,
3279
+ BrowserCallPhase,
3280
+ BrowserProgressParams,
3281
+ BrowserProgressResult,
3282
+ BrowserSessionsParams,
3283
+ BrowserSessionsResult,
3284
+ BrowserDisconnectParams,
3285
+ BrowserDisconnectResult,
3286
+ BrowserSetEnabledParams,
3287
+ BrowserSetEnabledResult,
3288
+ BrowserPairCodeParams,
3289
+ BrowserPairCodeResult,
3290
+ BrowserPairResetParams,
3291
+ BrowserCallParams,
3292
+ BrowserCallResult,
3293
+ BrowserInvokeEvent,
3294
+ BrowserSessionsChangedEvent,
3295
+ BrowserProgressEvent,
3296
+ DesktopHealth,
3297
+ BrowserPairRequest,
3298
+ BrowserPairResult
3133
3299
  };
3134
3300
 
3135
3301
  // src/versioning.ts
@@ -3149,7 +3315,8 @@ var FIELDS_SINCE = {
3149
3315
  AudioDevice: { kind: "1.24" },
3150
3316
  ScreenDisplay: { rotation: "1.24", refresh_hz: "1.24", builtin: "1.24" },
3151
3317
  PowerStatusResult: { energy: "1.24" },
3152
- AppsSpendResult: { days: "1.24" }
3318
+ AppsSpendResult: { days: "1.24" },
3319
+ AppsWindowsUpdateStateResult: { closed_by_update: "1.27" }
3153
3320
  };
3154
3321
  var NULL_SINCE = {
3155
3322
  "RelayDeviceStatusEvent.since_ms": { since: "1.1", olderPeersGet: 0 }
@@ -3161,7 +3328,12 @@ var REASONS_SINCE = {
3161
3328
  download_failed: "1.2",
3162
3329
  service_starting: "1.2",
3163
3330
  service_restarted: "1.2",
3164
- service_failed: "1.2"
3331
+ service_failed: "1.2",
3332
+ browser_not_connected: "1.28",
3333
+ browser_ambiguous: "1.28",
3334
+ browser_account_mismatch: "1.28",
3335
+ browser_connection_off: "1.28",
3336
+ awaiting_confirmation: "1.28"
3165
3337
  };
3166
3338
  function statusForPeer(status, version) {
3167
3339
  const rule = NULL_SINCE["RelayDeviceStatusEvent.since_ms"];
@@ -3206,7 +3378,8 @@ var RESULT_PATH = /* @__PURE__ */ new Map([
3206
3378
  ["fs.patch", "FsPatchResult"],
3207
3379
  ["apps.chats.list", "AppsChatsListResult"],
3208
3380
  ["apps.accounts.usage", "AppsAccountsUsageResult"],
3209
- ["apps.accounts.resets", "AppsAccountsResetsResult"]
3381
+ ["apps.accounts.resets", "AppsAccountsResetsResult"],
3382
+ ["apps.windows.update_state", "AppsWindowsUpdateStateResult"]
3210
3383
  ]);
3211
3384
  var NESTED_RESULTS = /* @__PURE__ */ new Map([
3212
3385
  ["apps.chats.list", [["chats", "ChatRow"]]],
@@ -3279,7 +3452,7 @@ function forPeer(op, part, value, version) {
3279
3452
  var VERSIONED_RESULT_OPS = [.../* @__PURE__ */ new Set([...RESULT_PATH.keys(), ...WINDOW_RESULTS.keys(), ...NESTED_RESULTS.keys()])];
3280
3453
 
3281
3454
  // src/contract.ts
3282
- var CONTRACT_SHA256 = "42d314c6051a4dde86faa4b606bb9b8dcc7b2638d8b0cfb25852e8924920f44b";
3455
+ var CONTRACT_SHA256 = "d328d624d1de854696a07e9fb8f1e85894047e5c41164647944db79b3c1a638d";
3283
3456
 
3284
3457
  // src/close-policy.ts
3285
3458
  var CLOSE_RULES = {
@@ -3724,6 +3897,34 @@ export {
3724
3897
  AudioSetLevelsParams,
3725
3898
  BEARER_PREFIX,
3726
3899
  BROADCAST_CID,
3900
+ BrowserCallError,
3901
+ BrowserCallParams,
3902
+ BrowserCallPhase,
3903
+ BrowserCallResult,
3904
+ BrowserClientInstance,
3905
+ BrowserDisconnectParams,
3906
+ BrowserDisconnectResult,
3907
+ BrowserInvokeEvent,
3908
+ BrowserKind,
3909
+ BrowserPairCodeParams,
3910
+ BrowserPairCodeResult,
3911
+ BrowserPairRequest,
3912
+ BrowserPairResetParams,
3913
+ BrowserPairResult,
3914
+ BrowserProgressEvent,
3915
+ BrowserProgressParams,
3916
+ BrowserProgressResult,
3917
+ BrowserRegisterParams,
3918
+ BrowserRegisterResult,
3919
+ BrowserResultParams,
3920
+ BrowserResultResult,
3921
+ BrowserSession,
3922
+ BrowserSessionState,
3923
+ BrowserSessionsChangedEvent,
3924
+ BrowserSessionsParams,
3925
+ BrowserSessionsResult,
3926
+ BrowserSetEnabledParams,
3927
+ BrowserSetEnabledResult,
3727
3928
  CLOSE_RULES,
3728
3929
  CONTRACT_SHA256,
3729
3930
  CancelMsg,
@@ -3766,6 +3967,8 @@ export {
3766
3967
  DEFAULT_MAX_FRAME_PAYLOAD_BYTES,
3767
3968
  DEFAULT_MAX_MESSAGE_BYTES,
3768
3969
  DEFAULT_WINDOW_BYTES,
3970
+ DISCOVERY_FILE,
3971
+ DesktopHealth,
3769
3972
  DesktopProtocolError,
3770
3973
  DeviceId,
3771
3974
  DiagErrorEntry,
@@ -3893,6 +4096,7 @@ export {
3893
4096
  LEGACY_ACTIONS,
3894
4097
  LEGACY_DISPATCHERS,
3895
4098
  Limits,
4099
+ MATRX_EXTENSION_IDS,
3896
4100
  MlInstallPhase,
3897
4101
  MlInstallProgress,
3898
4102
  MlProgress,