@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.cjs CHANGED
@@ -122,6 +122,34 @@ __export(src_exports, {
122
122
  AudioSetLevelsParams: () => AudioSetLevelsParams,
123
123
  BEARER_PREFIX: () => BEARER_PREFIX,
124
124
  BROADCAST_CID: () => BROADCAST_CID,
125
+ BrowserCallError: () => BrowserCallError,
126
+ BrowserCallParams: () => BrowserCallParams,
127
+ BrowserCallPhase: () => BrowserCallPhase,
128
+ BrowserCallResult: () => BrowserCallResult,
129
+ BrowserClientInstance: () => BrowserClientInstance,
130
+ BrowserDisconnectParams: () => BrowserDisconnectParams,
131
+ BrowserDisconnectResult: () => BrowserDisconnectResult,
132
+ BrowserInvokeEvent: () => BrowserInvokeEvent,
133
+ BrowserKind: () => BrowserKind,
134
+ BrowserPairCodeParams: () => BrowserPairCodeParams,
135
+ BrowserPairCodeResult: () => BrowserPairCodeResult,
136
+ BrowserPairRequest: () => BrowserPairRequest,
137
+ BrowserPairResetParams: () => BrowserPairResetParams,
138
+ BrowserPairResult: () => BrowserPairResult,
139
+ BrowserProgressEvent: () => BrowserProgressEvent,
140
+ BrowserProgressParams: () => BrowserProgressParams,
141
+ BrowserProgressResult: () => BrowserProgressResult,
142
+ BrowserRegisterParams: () => BrowserRegisterParams,
143
+ BrowserRegisterResult: () => BrowserRegisterResult,
144
+ BrowserResultParams: () => BrowserResultParams,
145
+ BrowserResultResult: () => BrowserResultResult,
146
+ BrowserSession: () => BrowserSession,
147
+ BrowserSessionState: () => BrowserSessionState,
148
+ BrowserSessionsChangedEvent: () => BrowserSessionsChangedEvent,
149
+ BrowserSessionsParams: () => BrowserSessionsParams,
150
+ BrowserSessionsResult: () => BrowserSessionsResult,
151
+ BrowserSetEnabledParams: () => BrowserSetEnabledParams,
152
+ BrowserSetEnabledResult: () => BrowserSetEnabledResult,
125
153
  CLOSE_RULES: () => CLOSE_RULES,
126
154
  CONTRACT_SHA256: () => CONTRACT_SHA256,
127
155
  CancelMsg: () => CancelMsg,
@@ -164,6 +192,8 @@ __export(src_exports, {
164
192
  DEFAULT_MAX_FRAME_PAYLOAD_BYTES: () => DEFAULT_MAX_FRAME_PAYLOAD_BYTES,
165
193
  DEFAULT_MAX_MESSAGE_BYTES: () => DEFAULT_MAX_MESSAGE_BYTES,
166
194
  DEFAULT_WINDOW_BYTES: () => DEFAULT_WINDOW_BYTES,
195
+ DISCOVERY_FILE: () => DISCOVERY_FILE,
196
+ DesktopHealth: () => DesktopHealth,
167
197
  DesktopProtocolError: () => DesktopProtocolError,
168
198
  DeviceId: () => DeviceId,
169
199
  DiagErrorEntry: () => DiagErrorEntry,
@@ -291,6 +321,7 @@ __export(src_exports, {
291
321
  LEGACY_ACTIONS: () => LEGACY_ACTIONS,
292
322
  LEGACY_DISPATCHERS: () => LEGACY_DISPATCHERS,
293
323
  Limits: () => Limits,
324
+ MATRX_EXTENSION_IDS: () => MATRX_EXTENSION_IDS,
294
325
  MlInstallPhase: () => MlInstallPhase,
295
326
  MlInstallProgress: () => MlInstallProgress,
296
327
  MlProgress: () => MlProgress,
@@ -522,7 +553,7 @@ module.exports = __toCommonJS(src_exports);
522
553
  var import_zod = require("zod");
523
554
  var import_uuid = require("@ai-matrx/kit/uuid");
524
555
  var PROTOCOL_MAJOR = 1;
525
- var PROTOCOL_MINOR = 26;
556
+ var PROTOCOL_MINOR = 28;
526
557
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
527
558
  var ProtocolVersion = import_zod.z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
528
559
  var RequestId = import_zod.z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -595,8 +626,19 @@ var ErrorReason = import_zod2.z.enum([
595
626
  // RESOURCE_BUSY (retryable): the service is starting or restarting
596
627
  "service_restarted",
597
628
  // RESOURCE_GONE: the service died while this request ran
598
- "service_failed"
629
+ "service_failed",
599
630
  // INTERNAL: the service could not be started (see models.status)
631
+ // 1.28 (REASONS_SINCE): the `browser` capability (the AI Matrx extension as Matrx 2's client)
632
+ "browser_not_connected",
633
+ // NOT_FOUND: no browser with the extension is connected (or none routable)
634
+ "browser_ambiguous",
635
+ // CONFLICT: several browsers are connected and none was named
636
+ "browser_account_mismatch",
637
+ // AUTH_FORBIDDEN: the named browser is signed in to another account
638
+ "browser_connection_off",
639
+ // AUTH_FORBIDDEN: the person turned Browser connection off
640
+ "awaiting_confirmation"
641
+ // TIMEOUT: the person did not answer the browser's confirmation in time
600
642
  ]);
601
643
  var FsPatchEditFailure = import_zod2.z.strictObject({ edit_index: nonNegInt, reason: import_zod2.z.string().max(300) });
602
644
  var ProtocolErrorBody = import_zod2.z.strictObject({
@@ -1934,7 +1976,12 @@ var AppsWindowsUpdateStateResult = import_zod14.z.strictObject({
1934
1976
  /** When the update became pending (the download's time), when known. */
1935
1977
  since_ms: epochMs.nullable(),
1936
1978
  /** Windows open when the update became pending (or last seen open) that are closed now. */
1937
- closed: import_zod14.z.array(ChatPlace).max(200)
1979
+ closed: import_zod14.z.array(ChatPlace).max(200),
1980
+ /**
1981
+ * Since 1.27: the windows in `closed` that the update itself quit (the app's log records a quit for
1982
+ * the update within a minute of when each was last seen running). Absent: not known.
1983
+ */
1984
+ closed_by_update: import_zod14.z.array(ChatPlace).max(200).optional()
1938
1985
  });
1939
1986
  var AppsWindowsReopenParams = import_zod14.z.strictObject({ app_key: AppKey, windows: import_zod14.z.array(ChatPlace).min(1).max(200) });
1940
1987
  var AppsWindowsReopenResult = import_zod14.z.strictObject({ message: import_zod14.z.string().max(400), opened: import_zod14.z.array(ChatPlace).max(200) });
@@ -3037,6 +3084,114 @@ var CodingHistoryProgressEvent = import_zod32.z.strictObject({
3037
3084
  failed: nonNegInt
3038
3085
  });
3039
3086
 
3087
+ // src/schema/browser.ts
3088
+ var import_zod33 = require("zod");
3089
+ var BrowserClientInstance = import_zod33.z.string().min(1).max(64).regex(/^[A-Za-z0-9_.:-]+$/);
3090
+ var BrowserKind = import_zod33.z.enum(["chrome", "edge", "brave", "arc", "opera", "vivaldi", "chromium", "firefox", "other"]);
3091
+ var BrowserSessionState = import_zod33.z.enum(["connected", "different_account", "extension_signed_out", "device_signed_out", "unverified"]);
3092
+ var BrowserSession = import_zod33.z.strictObject({
3093
+ client_instance: BrowserClientInstance,
3094
+ /** What the person sees ("Chrome — Work"), set by the extension. */
3095
+ client_label: import_zod33.z.string().min(1).max(128),
3096
+ browser: BrowserKind,
3097
+ extension_version: import_zod33.z.string().min(1).max(32),
3098
+ state: BrowserSessionState,
3099
+ /** True only for `connected`: an agent's call can reach this session. */
3100
+ routable: import_zod33.z.boolean(),
3101
+ /** The extension's account email from its token (null when signed out or unknown). */
3102
+ account_email: import_zod33.z.string().max(320).nullable(),
3103
+ connected_at_ms: epochMs,
3104
+ last_call_at_ms: epochMs.nullable(),
3105
+ calls: nonNegInt,
3106
+ errors: nonNegInt,
3107
+ /** Call latency over the last 200 calls; null before the first. */
3108
+ p50_ms: nonNegInt.nullable(),
3109
+ p95_ms: nonNegInt.nullable(),
3110
+ /** A call is waiting for the person to confirm it in the browser. */
3111
+ awaiting_confirmation: import_zod33.z.boolean()
3112
+ });
3113
+ var BrowserRegisterParams = import_zod33.z.strictObject({
3114
+ client_instance: BrowserClientInstance,
3115
+ client_label: import_zod33.z.string().min(1).max(128),
3116
+ browser: BrowserKind,
3117
+ extension_version: import_zod33.z.string().min(1).max(32),
3118
+ /** The extension's current AI Matrx access token, checked against the device owner; null when signed out. */
3119
+ account_token: import_zod33.z.string().min(16).max(8192).nullable()
3120
+ });
3121
+ var BrowserRegisterResult = import_zod33.z.strictObject({ session: BrowserSession });
3122
+ var BrowserCallError = import_zod33.z.strictObject({
3123
+ message: import_zod33.z.string().max(1e3),
3124
+ /** The extension's own error code, when it has one ("tool_not_found", "denied"). */
3125
+ code: import_zod33.z.string().max(64).nullable()
3126
+ });
3127
+ var BrowserResultParams = import_zod33.z.strictObject({
3128
+ call_id: import_zod33.z.string().min(1).max(64),
3129
+ ok: import_zod33.z.boolean(),
3130
+ /** The tool's result when ok (any JSON). */
3131
+ result: import_zod33.z.unknown(),
3132
+ error: BrowserCallError.nullable()
3133
+ });
3134
+ var BrowserResultResult = import_zod33.z.strictObject({ accepted: import_zod33.z.boolean() });
3135
+ var BrowserCallPhase = import_zod33.z.enum(["awaiting_confirmation", "running"]);
3136
+ var BrowserProgressParams = import_zod33.z.strictObject({ call_id: import_zod33.z.string().min(1).max(64), phase: BrowserCallPhase });
3137
+ var BrowserProgressResult = import_zod33.z.strictObject({ accepted: import_zod33.z.boolean() });
3138
+ var BrowserSessionsParams = import_zod33.z.strictObject({});
3139
+ var BrowserSessionsResult = import_zod33.z.strictObject({
3140
+ /** The person's Browser connection switch. Off: no pairing, no extension sessions. */
3141
+ enabled: import_zod33.z.boolean(),
3142
+ /** Whether Matrx 2 is signed in (without an owner no session is routable). */
3143
+ owner_signed_in: import_zod33.z.boolean(),
3144
+ sessions: import_zod33.z.array(BrowserSession).max(64)
3145
+ });
3146
+ var BrowserDisconnectParams = import_zod33.z.strictObject({ client_instance: BrowserClientInstance });
3147
+ var BrowserDisconnectResult = import_zod33.z.strictObject({ disconnected: import_zod33.z.boolean() });
3148
+ var BrowserSetEnabledParams = import_zod33.z.strictObject({ enabled: import_zod33.z.boolean() });
3149
+ var BrowserSetEnabledResult = import_zod33.z.strictObject({ enabled: import_zod33.z.boolean() });
3150
+ var BrowserPairCodeParams = import_zod33.z.strictObject({});
3151
+ var BrowserPairCodeResult = import_zod33.z.strictObject({ code: import_zod33.z.string().min(16).max(128) });
3152
+ var BrowserPairResetParams = import_zod33.z.strictObject({});
3153
+ var BrowserCallParams = import_zod33.z.strictObject({
3154
+ tool: import_zod33.z.string().min(1).max(96).regex(/^[a-z][a-z0-9_]*$/),
3155
+ args: import_zod33.z.record(import_zod33.z.string(), import_zod33.z.unknown()),
3156
+ /** Which session; default: the most recently active routable one (BROWSER ambiguity → CONFLICT). */
3157
+ client_instance: BrowserClientInstance.optional(),
3158
+ /** How long to wait, including a person's confirmation; default 120 s. */
3159
+ timeout_ms: import_zod33.z.int().min(1e3).max(6e5).optional()
3160
+ });
3161
+ var BrowserCallResult = import_zod33.z.strictObject({
3162
+ client_instance: BrowserClientInstance,
3163
+ result: import_zod33.z.unknown(),
3164
+ duration_ms: nonNegInt
3165
+ });
3166
+ var BrowserInvokeEvent = import_zod33.z.strictObject({
3167
+ call_id: import_zod33.z.string().min(1).max(64),
3168
+ tool: import_zod33.z.string().min(1).max(96),
3169
+ args: import_zod33.z.record(import_zod33.z.string(), import_zod33.z.unknown()),
3170
+ deadline_ms: epochMs
3171
+ });
3172
+ var BrowserSessionsChangedEvent = import_zod33.z.strictObject({ count: nonNegInt, enabled: import_zod33.z.boolean() });
3173
+ var BrowserProgressEvent = import_zod33.z.strictObject({
3174
+ call_id: import_zod33.z.string().min(1).max(64),
3175
+ client_instance: BrowserClientInstance,
3176
+ phase: BrowserCallPhase
3177
+ });
3178
+ var DesktopHealth = import_zod33.z.strictObject({
3179
+ status: import_zod33.z.literal("ok"),
3180
+ service: import_zod33.z.literal("matrx-desktop"),
3181
+ version: import_zod33.z.string().max(32),
3182
+ protocol_version: import_zod33.z.string().max(16),
3183
+ ws_path: import_zod33.z.literal("/v1/connect"),
3184
+ device_id: import_zod33.z.string().max(64),
3185
+ browser_connection: import_zod33.z.enum(["on", "off"])
3186
+ });
3187
+ var BrowserPairRequest = import_zod33.z.strictObject({ client_instance: BrowserClientInstance });
3188
+ var BrowserPairResult = import_zod33.z.strictObject({ pair_token: import_zod33.z.string().min(16).max(128), ws_path: import_zod33.z.literal("/v1/connect") });
3189
+ var MATRX_EXTENSION_IDS = {
3190
+ store: "hnfolienncfklkgmdjjmhhegglimlamg",
3191
+ development: "cihdmkcdjjckfhjpgoedmgfpoljebaml"
3192
+ };
3193
+ var DISCOVERY_FILE = { live: "matrx2.json", development: "matrx2-dev.json" };
3194
+
3040
3195
  // src/schema/registry.ts
3041
3196
  var FS_ERR = ["NOT_FOUND", "PERMISSION_DENIED_OS", "INVALID_PARAMS", "RESOURCE_BUSY", "INTERNAL"];
3042
3197
  var OPS = {
@@ -3182,7 +3337,17 @@ var OPS = {
3182
3337
  // 1.26: the app's own update (it installs only once every window quit) and bringing the windows back.
3183
3338
  "apps.windows.update_state": { params: AppsWindowsUpdateStateParams, result: AppsWindowsUpdateStateResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
3184
3339
  "apps.windows.reopen": { params: AppsWindowsReopenParams, result: AppsWindowsReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
3185
- "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] }
3340
+ "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
3341
+ // 1.28: the AI Matrx extension as a client (register, result, progress), the Browsers screen, and agents' calls.
3342
+ "browser.register": { params: BrowserRegisterParams, result: BrowserRegisterResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INVALID_PARAMS", "INTERNAL"] },
3343
+ "browser.result": { params: BrowserResultParams, result: BrowserResultResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "PAYLOAD_TOO_LARGE"] },
3344
+ "browser.progress": { params: BrowserProgressParams, result: BrowserProgressResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN"] },
3345
+ "browser.sessions": { params: BrowserSessionsParams, result: BrowserSessionsResult, kind: "unary", since: "1.28", errors: ["INTERNAL"] },
3346
+ "browser.disconnect": { params: BrowserDisconnectParams, result: BrowserDisconnectResult, kind: "unary", since: "1.28", errors: ["NOT_FOUND", "AUTH_FORBIDDEN"] },
3347
+ "browser.set_enabled": { params: BrowserSetEnabledParams, result: BrowserSetEnabledResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
3348
+ "browser.pair_code": { params: BrowserPairCodeParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
3349
+ "browser.pair_reset": { params: BrowserPairResetParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
3350
+ "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"] }
3186
3351
  };
3187
3352
  var EVENTS = {
3188
3353
  "fs.changed": FsChangedEvent,
@@ -3196,7 +3361,10 @@ var EVENTS = {
3196
3361
  "coding.history.progress": CodingHistoryProgressEvent,
3197
3362
  "relay.device_status": RelayDeviceStatusEvent,
3198
3363
  "relay.auth_expiring": RelayAuthExpiringEvent,
3199
- "diag.errors.changed": DiagErrorsChangedEvent
3364
+ "diag.errors.changed": DiagErrorsChangedEvent,
3365
+ "browser.invoke": BrowserInvokeEvent,
3366
+ "browser.sessions_changed": BrowserSessionsChangedEvent,
3367
+ "browser.progress": BrowserProgressEvent
3200
3368
  };
3201
3369
  var SERVICES = {
3202
3370
  ml: {
@@ -3649,7 +3817,36 @@ var NAMED_SCHEMAS = {
3649
3817
  AppsWindowsReopenParams,
3650
3818
  AppsWindowsReopenResult,
3651
3819
  AppsWindowsUpdateAndReopenParams,
3652
- AppsWindowsUpdateAndReopenResult
3820
+ AppsWindowsUpdateAndReopenResult,
3821
+ BrowserClientInstance,
3822
+ BrowserKind,
3823
+ BrowserSessionState,
3824
+ BrowserSession,
3825
+ BrowserRegisterParams,
3826
+ BrowserRegisterResult,
3827
+ BrowserCallError,
3828
+ BrowserResultParams,
3829
+ BrowserResultResult,
3830
+ BrowserCallPhase,
3831
+ BrowserProgressParams,
3832
+ BrowserProgressResult,
3833
+ BrowserSessionsParams,
3834
+ BrowserSessionsResult,
3835
+ BrowserDisconnectParams,
3836
+ BrowserDisconnectResult,
3837
+ BrowserSetEnabledParams,
3838
+ BrowserSetEnabledResult,
3839
+ BrowserPairCodeParams,
3840
+ BrowserPairCodeResult,
3841
+ BrowserPairResetParams,
3842
+ BrowserCallParams,
3843
+ BrowserCallResult,
3844
+ BrowserInvokeEvent,
3845
+ BrowserSessionsChangedEvent,
3846
+ BrowserProgressEvent,
3847
+ DesktopHealth,
3848
+ BrowserPairRequest,
3849
+ BrowserPairResult
3653
3850
  };
3654
3851
 
3655
3852
  // src/versioning.ts
@@ -3669,7 +3866,8 @@ var FIELDS_SINCE = {
3669
3866
  AudioDevice: { kind: "1.24" },
3670
3867
  ScreenDisplay: { rotation: "1.24", refresh_hz: "1.24", builtin: "1.24" },
3671
3868
  PowerStatusResult: { energy: "1.24" },
3672
- AppsSpendResult: { days: "1.24" }
3869
+ AppsSpendResult: { days: "1.24" },
3870
+ AppsWindowsUpdateStateResult: { closed_by_update: "1.27" }
3673
3871
  };
3674
3872
  var NULL_SINCE = {
3675
3873
  "RelayDeviceStatusEvent.since_ms": { since: "1.1", olderPeersGet: 0 }
@@ -3681,7 +3879,12 @@ var REASONS_SINCE = {
3681
3879
  download_failed: "1.2",
3682
3880
  service_starting: "1.2",
3683
3881
  service_restarted: "1.2",
3684
- service_failed: "1.2"
3882
+ service_failed: "1.2",
3883
+ browser_not_connected: "1.28",
3884
+ browser_ambiguous: "1.28",
3885
+ browser_account_mismatch: "1.28",
3886
+ browser_connection_off: "1.28",
3887
+ awaiting_confirmation: "1.28"
3685
3888
  };
3686
3889
  function statusForPeer(status, version) {
3687
3890
  const rule = NULL_SINCE["RelayDeviceStatusEvent.since_ms"];
@@ -3726,7 +3929,8 @@ var RESULT_PATH = /* @__PURE__ */ new Map([
3726
3929
  ["fs.patch", "FsPatchResult"],
3727
3930
  ["apps.chats.list", "AppsChatsListResult"],
3728
3931
  ["apps.accounts.usage", "AppsAccountsUsageResult"],
3729
- ["apps.accounts.resets", "AppsAccountsResetsResult"]
3932
+ ["apps.accounts.resets", "AppsAccountsResetsResult"],
3933
+ ["apps.windows.update_state", "AppsWindowsUpdateStateResult"]
3730
3934
  ]);
3731
3935
  var NESTED_RESULTS = /* @__PURE__ */ new Map([
3732
3936
  ["apps.chats.list", [["chats", "ChatRow"]]],
@@ -3799,7 +4003,7 @@ function forPeer(op, part, value, version) {
3799
4003
  var VERSIONED_RESULT_OPS = [.../* @__PURE__ */ new Set([...RESULT_PATH.keys(), ...WINDOW_RESULTS.keys(), ...NESTED_RESULTS.keys()])];
3800
4004
 
3801
4005
  // src/contract.ts
3802
- var CONTRACT_SHA256 = "42d314c6051a4dde86faa4b606bb9b8dcc7b2638d8b0cfb25852e8924920f44b";
4006
+ var CONTRACT_SHA256 = "d328d624d1de854696a07e9fb8f1e85894047e5c41164647944db79b3c1a638d";
3803
4007
 
3804
4008
  // src/close-policy.ts
3805
4009
  var CLOSE_RULES = {