@ai-matrx/desktop-protocol 0.21.21 → 0.21.23

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/client.d.cts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { BackoffOptions } from '@ai-matrx/realtime';
2
2
  export { RECONNECT_ALARM_ATTEMPTS } from '@ai-matrx/realtime';
3
3
  import { z } from 'zod';
4
- import { W as Welcome, D as DesktopProtocolError, C as CloseOutcome, O as OpName, a as OpParams, b as OpResult, c as OPS, S as StreamMeta, E as EndReason, d as EVENTS, e as ClientType, M as ModelsTranscribeResult, T as TranscriptionModelId, f as MlProgress } from './models-ZQtKshfc.cjs';
5
- export { i as isDesktopProtocolError } from './models-ZQtKshfc.cjs';
4
+ import { W as Welcome, D as DesktopProtocolError, C as CloseOutcome, O as OpName, a as OpParams, b as OpResult, c as OPS, S as StreamMeta, E as EndReason, d as EVENTS, e as ClientType, M as ModelsTranscribeResult, T as TranscriptionModelId, f as MlProgress } from './models-CXjW101n.cjs';
5
+ export { i as isDesktopProtocolError } from './models-CXjW101n.cjs';
6
6
  import { FrameHeader } from './frame.cjs';
7
7
 
8
8
  /** The subset of the WHATWG WebSocket the client uses — browser, React Native, `ws` and Workers all fit. */
package/dist/client.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { BackoffOptions } from '@ai-matrx/realtime';
2
2
  export { RECONNECT_ALARM_ATTEMPTS } from '@ai-matrx/realtime';
3
3
  import { z } from 'zod';
4
- import { W as Welcome, D as DesktopProtocolError, C as CloseOutcome, O as OpName, a as OpParams, b as OpResult, c as OPS, S as StreamMeta, E as EndReason, d as EVENTS, e as ClientType, M as ModelsTranscribeResult, T as TranscriptionModelId, f as MlProgress } from './models-ZQtKshfc.js';
5
- export { i as isDesktopProtocolError } from './models-ZQtKshfc.js';
4
+ import { W as Welcome, D as DesktopProtocolError, C as CloseOutcome, O as OpName, a as OpParams, b as OpResult, c as OPS, S as StreamMeta, E as EndReason, d as EVENTS, e as ClientType, M as ModelsTranscribeResult, T as TranscriptionModelId, f as MlProgress } from './models-CXjW101n.js';
5
+ export { i as isDesktopProtocolError } from './models-CXjW101n.js';
6
6
  import { FrameHeader } from './frame.js';
7
7
 
8
8
  /** The subset of the WHATWG WebSocket the client uses — browser, React Native, `ws` and Workers all fit. */
package/dist/client.js CHANGED
@@ -112,7 +112,7 @@ import { z as z2 } from "zod";
112
112
  import { z } from "zod";
113
113
  import { UUID_SHAPE_PATTERN } from "@ai-matrx/kit/uuid";
114
114
  var PROTOCOL_MAJOR = 1;
115
- var PROTOCOL_MINOR = 27;
115
+ var PROTOCOL_MINOR = 29;
116
116
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
117
117
  var ProtocolVersion = z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
118
118
  var RequestId = z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -184,8 +184,19 @@ var ErrorReason = z2.enum([
184
184
  // RESOURCE_BUSY (retryable): the service is starting or restarting
185
185
  "service_restarted",
186
186
  // RESOURCE_GONE: the service died while this request ran
187
- "service_failed"
187
+ "service_failed",
188
188
  // INTERNAL: the service could not be started (see models.status)
189
+ // 1.28 (REASONS_SINCE): the `browser` capability (the AI Matrx extension as Matrx 2's client)
190
+ "browser_not_connected",
191
+ // NOT_FOUND: no browser with the extension is connected (or none routable)
192
+ "browser_ambiguous",
193
+ // CONFLICT: several browsers are connected and none was named
194
+ "browser_account_mismatch",
195
+ // AUTH_FORBIDDEN: the named browser is signed in to another account
196
+ "browser_connection_off",
197
+ // AUTH_FORBIDDEN: the person turned Browser connection off
198
+ "awaiting_confirmation"
199
+ // TIMEOUT: the person did not answer the browser's confirmation in time
189
200
  ]);
190
201
  var FsPatchEditFailure = z2.strictObject({ edit_index: nonNegInt, reason: z2.string().max(300) });
191
202
  var ProtocolErrorBody = z2.strictObject({
@@ -2346,6 +2357,44 @@ var AppsChatsColdResult = z30.strictObject({
2346
2357
  /** Chats working right now (not waiting). */
2347
2358
  working: nonNegInt
2348
2359
  });
2360
+ var TitleCopies = z30.strictObject({
2361
+ window: ChatPlace,
2362
+ /** Record copies in that window holding a different name (main keeps one per account folder). */
2363
+ copies: nonNegInt,
2364
+ titles: z30.array(z30.strictObject({ title: z30.string().max(2e3), source: z30.string().max(32) })).max(50)
2365
+ });
2366
+ var TitleMismatch = z30.strictObject({
2367
+ chat_id: ChatId,
2368
+ /** The right name: the latest one a person gave it (in any window, or in Matrx), else the newest automatic title. */
2369
+ title: z30.string().max(2e3),
2370
+ title_source: z30.enum(["user", "auto"]),
2371
+ /** Where the right name came from: a window, "matrx", or "ledger" (decided earlier). */
2372
+ decided_from: z30.string().max(64),
2373
+ kind: z30.enum(["user_vs_auto", "user_vs_user", "auto_vs_auto", "source_only"]),
2374
+ windows: z30.array(ChatPlace).max(200),
2375
+ differs_in: z30.array(TitleCopies).max(200)
2376
+ });
2377
+ var AppsChatsTitlesCheckParams = z30.strictObject({ app_key: AppKey });
2378
+ var AppsChatsTitlesCheckResult = z30.strictObject({
2379
+ app_key: AppKey,
2380
+ chats_total: nonNegInt,
2381
+ chats_in_several_windows: nonNegInt,
2382
+ /** Chats with a different name in some window (or in Matrx). */
2383
+ chats_with_a_different_name: nonNegInt,
2384
+ copies_to_write: nonNegInt,
2385
+ chats: z30.array(TitleMismatch).max(5e3)
2386
+ });
2387
+ var AppsChatsTitlesPushParams = z30.strictObject({ app_key: AppKey, chat_id: ChatId.optional(), dry_run: z30.boolean().optional() });
2388
+ var AppsChatsTitlesPushResult = z30.strictObject({
2389
+ app_key: AppKey,
2390
+ /** Record files rewritten (title and titleSource only, each backed up first). */
2391
+ written: nonNegInt,
2392
+ chats_fixed: nonNegInt,
2393
+ /** Copies that could not be written (left for the next push). */
2394
+ failed: nonNegInt,
2395
+ /** Still different after the push (dry_run: would be written). */
2396
+ chats_with_a_different_name: nonNegInt
2397
+ });
2349
2398
  var AppsChatsOpenParams = z30.strictObject({ app_key: AppKey, chat_id: ChatId, window: ChatPlace.optional() });
2350
2399
  var SpendSplit = z30.strictObject({ main: z30.number(), helpers: z30.number() });
2351
2400
  var SpendScopes = z30.strictObject({ today: SpendSplit, week: SpendSplit });
@@ -2446,6 +2495,109 @@ var AppsWindowsUpdateAndReopenResult = z30.strictObject({
2446
2495
  installed_version: z30.string().max(64).nullable()
2447
2496
  });
2448
2497
 
2498
+ // src/schema/browser.ts
2499
+ import { z as z31 } from "zod";
2500
+ var BrowserClientInstance = z31.string().min(1).max(64).regex(/^[A-Za-z0-9_.:-]+$/);
2501
+ var BrowserKind = z31.enum(["chrome", "edge", "brave", "arc", "opera", "vivaldi", "chromium", "firefox", "other"]);
2502
+ var BrowserSessionState = z31.enum(["connected", "different_account", "extension_signed_out", "device_signed_out", "unverified"]);
2503
+ var BrowserSession = z31.strictObject({
2504
+ client_instance: BrowserClientInstance,
2505
+ /** What the person sees ("Chrome — Work"), set by the extension. */
2506
+ client_label: z31.string().min(1).max(128),
2507
+ browser: BrowserKind,
2508
+ extension_version: z31.string().min(1).max(32),
2509
+ state: BrowserSessionState,
2510
+ /** True only for `connected`: an agent's call can reach this session. */
2511
+ routable: z31.boolean(),
2512
+ /** The extension's account email from its token (null when signed out or unknown). */
2513
+ account_email: z31.string().max(320).nullable(),
2514
+ connected_at_ms: epochMs,
2515
+ last_call_at_ms: epochMs.nullable(),
2516
+ calls: nonNegInt,
2517
+ errors: nonNegInt,
2518
+ /** Call latency over the last 200 calls; null before the first. */
2519
+ p50_ms: nonNegInt.nullable(),
2520
+ p95_ms: nonNegInt.nullable(),
2521
+ /** A call is waiting for the person to confirm it in the browser. */
2522
+ awaiting_confirmation: z31.boolean()
2523
+ });
2524
+ var BrowserRegisterParams = z31.strictObject({
2525
+ client_instance: BrowserClientInstance,
2526
+ client_label: z31.string().min(1).max(128),
2527
+ browser: BrowserKind,
2528
+ extension_version: z31.string().min(1).max(32),
2529
+ /** The extension's current AI Matrx access token, checked against the device owner; null when signed out. */
2530
+ account_token: z31.string().min(16).max(8192).nullable()
2531
+ });
2532
+ var BrowserRegisterResult = z31.strictObject({ session: BrowserSession });
2533
+ var BrowserCallError = z31.strictObject({
2534
+ message: z31.string().max(1e3),
2535
+ /** The extension's own error code, when it has one ("tool_not_found", "denied"). */
2536
+ code: z31.string().max(64).nullable()
2537
+ });
2538
+ var BrowserResultParams = z31.strictObject({
2539
+ call_id: z31.string().min(1).max(64),
2540
+ ok: z31.boolean(),
2541
+ /** The tool's result when ok (any JSON). */
2542
+ result: z31.unknown(),
2543
+ error: BrowserCallError.nullable()
2544
+ });
2545
+ var BrowserResultResult = z31.strictObject({ accepted: z31.boolean() });
2546
+ var BrowserCallPhase = z31.enum(["awaiting_confirmation", "running"]);
2547
+ var BrowserProgressParams = z31.strictObject({ call_id: z31.string().min(1).max(64), phase: BrowserCallPhase });
2548
+ var BrowserProgressResult = z31.strictObject({ accepted: z31.boolean() });
2549
+ var BrowserSessionsParams = z31.strictObject({});
2550
+ var BrowserSessionsResult = z31.strictObject({
2551
+ /** The person's Browser connection switch. Off: no pairing, no extension sessions. */
2552
+ enabled: z31.boolean(),
2553
+ /** Whether Matrx 2 is signed in (without an owner no session is routable). */
2554
+ owner_signed_in: z31.boolean(),
2555
+ sessions: z31.array(BrowserSession).max(64)
2556
+ });
2557
+ var BrowserDisconnectParams = z31.strictObject({ client_instance: BrowserClientInstance });
2558
+ var BrowserDisconnectResult = z31.strictObject({ disconnected: z31.boolean() });
2559
+ var BrowserSetEnabledParams = z31.strictObject({ enabled: z31.boolean() });
2560
+ var BrowserSetEnabledResult = z31.strictObject({ enabled: z31.boolean() });
2561
+ var BrowserPairCodeParams = z31.strictObject({});
2562
+ var BrowserPairCodeResult = z31.strictObject({ code: z31.string().min(16).max(128) });
2563
+ var BrowserPairResetParams = z31.strictObject({});
2564
+ var BrowserCallParams = z31.strictObject({
2565
+ tool: z31.string().min(1).max(96).regex(/^[a-z][a-z0-9_]*$/),
2566
+ args: z31.record(z31.string(), z31.unknown()),
2567
+ /** Which session; default: the most recently active routable one (BROWSER ambiguity → CONFLICT). */
2568
+ client_instance: BrowserClientInstance.optional(),
2569
+ /** How long to wait, including a person's confirmation; default 120 s. */
2570
+ timeout_ms: z31.int().min(1e3).max(6e5).optional()
2571
+ });
2572
+ var BrowserCallResult = z31.strictObject({
2573
+ client_instance: BrowserClientInstance,
2574
+ result: z31.unknown(),
2575
+ duration_ms: nonNegInt
2576
+ });
2577
+ var BrowserInvokeEvent = z31.strictObject({
2578
+ call_id: z31.string().min(1).max(64),
2579
+ tool: z31.string().min(1).max(96),
2580
+ args: z31.record(z31.string(), z31.unknown()),
2581
+ deadline_ms: epochMs
2582
+ });
2583
+ var BrowserSessionsChangedEvent = z31.strictObject({ count: nonNegInt, enabled: z31.boolean() });
2584
+ var BrowserProgressEvent = z31.strictObject({
2585
+ call_id: z31.string().min(1).max(64),
2586
+ client_instance: BrowserClientInstance,
2587
+ phase: BrowserCallPhase
2588
+ });
2589
+ var DesktopHealth = z31.strictObject({
2590
+ status: z31.literal("ok"),
2591
+ service: z31.literal("matrx-desktop"),
2592
+ version: z31.string().max(32),
2593
+ protocol_version: z31.string().max(16),
2594
+ ws_path: z31.literal("/v1/connect"),
2595
+ device_id: z31.string().max(64),
2596
+ browser_connection: z31.enum(["on", "off"])
2597
+ });
2598
+ var BrowserPairRequest = z31.strictObject({ client_instance: BrowserClientInstance });
2599
+ var BrowserPairResult = z31.strictObject({ pair_token: z31.string().min(16).max(128), ws_path: z31.literal("/v1/connect") });
2600
+
2449
2601
  // src/schema/registry.ts
2450
2602
  var FS_ERR = ["NOT_FOUND", "PERMISSION_DENIED_OS", "INVALID_PARAMS", "RESOURCE_BUSY", "INTERNAL"];
2451
2603
  var OPS = {
@@ -2508,6 +2660,8 @@ var OPS = {
2508
2660
  // 1.11: Going cold, Spend, sync health, windows upkeep.
2509
2661
  "apps.chats.cold": { params: AppsChatsColdParams, result: AppsChatsColdResult, kind: "unary", since: "1.11", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2510
2662
  "apps.chats.open": { params: AppsChatsOpenParams, result: AppsWindowActionResult, kind: "unary", since: "1.11", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2663
+ "apps.chats.titles_check": { params: AppsChatsTitlesCheckParams, result: AppsChatsTitlesCheckResult, kind: "unary", since: "1.29", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2664
+ "apps.chats.titles_push": { params: AppsChatsTitlesPushParams, result: AppsChatsTitlesPushResult, kind: "unary", since: "1.29", errors: ["NOT_FOUND", "CONFLICT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2511
2665
  "apps.spend": { params: AppsSpendParams, result: AppsSpendResult, kind: "unary", since: "1.11", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2512
2666
  "apps.sync.status": { params: AppsSyncStatusParams, result: AppsSyncStatusResult, kind: "unary", since: "1.11", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2513
2667
  "apps.sync.run": { params: AppsSyncRunParams, result: AppsWindowActionResult, kind: "unary", since: "1.11", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
@@ -2591,7 +2745,17 @@ var OPS = {
2591
2745
  // 1.26: the app's own update (it installs only once every window quit) and bringing the windows back.
2592
2746
  "apps.windows.update_state": { params: AppsWindowsUpdateStateParams, result: AppsWindowsUpdateStateResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2593
2747
  "apps.windows.reopen": { params: AppsWindowsReopenParams, result: AppsWindowsReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2594
- "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] }
2748
+ "apps.windows.update_and_reopen": { params: AppsWindowsUpdateAndReopenParams, result: AppsWindowsUpdateAndReopenResult, kind: "unary", since: "1.26", errors: ["NOT_FOUND", "CONFLICT", "TIMEOUT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2749
+ // 1.28: the AI Matrx extension as a client (register, result, progress), the Browsers screen, and agents' calls.
2750
+ "browser.register": { params: BrowserRegisterParams, result: BrowserRegisterResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INVALID_PARAMS", "INTERNAL"] },
2751
+ "browser.result": { params: BrowserResultParams, result: BrowserResultResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "PAYLOAD_TOO_LARGE"] },
2752
+ "browser.progress": { params: BrowserProgressParams, result: BrowserProgressResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN"] },
2753
+ "browser.sessions": { params: BrowserSessionsParams, result: BrowserSessionsResult, kind: "unary", since: "1.28", errors: ["INTERNAL"] },
2754
+ "browser.disconnect": { params: BrowserDisconnectParams, result: BrowserDisconnectResult, kind: "unary", since: "1.28", errors: ["NOT_FOUND", "AUTH_FORBIDDEN"] },
2755
+ "browser.set_enabled": { params: BrowserSetEnabledParams, result: BrowserSetEnabledResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2756
+ "browser.pair_code": { params: BrowserPairCodeParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2757
+ "browser.pair_reset": { params: BrowserPairResetParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
2758
+ "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"] }
2595
2759
  };
2596
2760
  var EVENTS = {
2597
2761
  "fs.changed": FsChangedEvent,
@@ -2605,7 +2769,10 @@ var EVENTS = {
2605
2769
  "coding.history.progress": CodingHistoryProgressEvent,
2606
2770
  "relay.device_status": RelayDeviceStatusEvent,
2607
2771
  "relay.auth_expiring": RelayAuthExpiringEvent,
2608
- "diag.errors.changed": DiagErrorsChangedEvent
2772
+ "diag.errors.changed": DiagErrorsChangedEvent,
2773
+ "browser.invoke": BrowserInvokeEvent,
2774
+ "browser.sessions_changed": BrowserSessionsChangedEvent,
2775
+ "browser.progress": BrowserProgressEvent
2609
2776
  };
2610
2777
 
2611
2778
  // src/client/client.ts