@ai-matrx/desktop-protocol 0.21.30 → 0.21.32

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.32
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/desktop-protocol/v0.21.31..npm/desktop-protocol/v0.21.32 -- apps/shared/desktop-protocol`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## 0.21.31
10
+
11
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
12
+ `git diff npm/desktop-protocol/v0.21.30..npm/desktop-protocol/v0.21.31 -- apps/shared/desktop-protocol`).
13
+ No source changes intended and no consumer action required.
14
+
3
15
  ## 0.21.30
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 = 39;
147
+ var PROTOCOL_MINOR = 42;
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_-]+$/);
@@ -427,8 +427,17 @@ var OsPermissionName = import_zod5.z.enum([
427
427
  "location",
428
428
  "local_network",
429
429
  "bluetooth",
430
- "notifications"
430
+ "notifications",
431
+ // (1.41) Matrx Local's remaining kinds, checked on every OS (its permissions checker): a peer
432
+ // older than 1.41 is never sent these rows (versioning.ts PERMISSIONS_SINCE).
433
+ "reminders",
434
+ "speech_recognition",
435
+ "messages",
436
+ "mail",
437
+ "wifi"
431
438
  ]);
439
+ var OsGrantState = import_zod5.z.enum(["granted", "denied", "not_determined", "not_applicable"]);
440
+ var OsRequirementName = import_zod5.z.enum(["secret_storage", "tray", "display_server", "helper_programs", "smart_app_control", "path_length"]);
432
441
  var SysinfoGetParams = import_zod5.z.strictObject({});
433
442
  var SysinfoGetResult = import_zod5.z.strictObject({
434
443
  device_id: DeviceId,
@@ -458,9 +467,20 @@ var SysinfoGetResult = import_zod5.z.strictObject({
458
467
  import_zod5.z.strictObject({
459
468
  name: OsPermissionName,
460
469
  state: import_zod5.z.enum(["granted", "denied", "not_determined", "not_applicable"]),
461
- settings_url: import_zod5.z.string().max(512).nullable()
470
+ settings_url: import_zod5.z.string().max(512).nullable(),
471
+ /** (1.41) One short fact when the state alone does not say it ("No camera", "Bluetooth is off"); absent when there is none. */
472
+ detail: import_zod5.z.string().max(256).optional()
462
473
  })
463
- )
474
+ ),
475
+ /** (1.41) The requirements beyond the grants (OsRequirementName), each read when asked. */
476
+ requirements: import_zod5.z.array(
477
+ import_zod5.z.strictObject({
478
+ name: OsRequirementName,
479
+ state: OsGrantState,
480
+ settings_url: import_zod5.z.string().max(512).nullable(),
481
+ detail: import_zod5.z.string().max(256).nullable()
482
+ })
483
+ ).optional()
464
484
  });
465
485
  var SysinfoHardwareParams = import_zod5.z.strictObject({});
466
486
  var SysinfoHardwareResult = import_zod5.z.strictObject({
@@ -1007,10 +1027,12 @@ var GitCloneParams = import_zod12.z.strictObject({
1007
1027
  });
1008
1028
 
1009
1029
  // src/schema/web.ts
1030
+ var import_uuid2 = require("@ai-matrx/kit/uuid");
1010
1031
  var import_zod13 = require("zod");
1011
1032
  var WEB_MAX_TEXT_CHARS = 524288;
1012
1033
  var WebUrl = import_zod13.z.string().min(1).max(8192).regex(/^https?:\/\//);
1013
1034
  var WebText = import_zod13.z.string().max(WEB_MAX_TEXT_CHARS);
1035
+ var OrgId = import_zod13.z.string().regex(import_uuid2.UUID_SHAPE_PATTERN);
1014
1036
  var WebHeader = import_zod13.z.strictObject({ name: import_zod13.z.string().min(1).max(256), value: import_zod13.z.string().max(8192) });
1015
1037
  var WebFetchParams = import_zod13.z.strictObject({
1016
1038
  url: WebUrl,
@@ -1032,10 +1054,65 @@ var WebFetchResult = import_zod13.z.strictObject({
1032
1054
  bytes: nonNegInt,
1033
1055
  elapsed_ms: nonNegInt
1034
1056
  });
1057
+ var WebAttachTarget = import_zod13.z.strictObject({
1058
+ entity_type: import_zod13.z.string().min(1).max(64),
1059
+ entity_id: import_zod13.z.string().min(1).max(128),
1060
+ label: import_zod13.z.string().max(200).optional()
1061
+ });
1062
+ var WebLand = import_zod13.z.strictObject({
1063
+ /** The organization the page is saved in; absent: this computer's active organization. */
1064
+ organization_id: OrgId.optional(),
1065
+ /** Keep it: AI processing starts (chunks, search). Unkept pages are saved and wait. */
1066
+ keep: import_zod13.z.boolean().default(false),
1067
+ attach_to: import_zod13.z.array(WebAttachTarget).max(8).default([])
1068
+ });
1069
+ var WebNotSavedReason = import_zod13.z.enum([
1070
+ /** Nobody is signed in on this computer. Saved on sign-in. */
1071
+ "signed_out",
1072
+ /** AI Matrx could not be reached. Retried on its own. */
1073
+ "offline",
1074
+ /** AI Matrx refused it (the message says why). Kept until the person retries or discards it. */
1075
+ "rejected",
1076
+ /** Waiting its turn behind other pages (retried on its own). */
1077
+ "queued"
1078
+ ]);
1079
+ var WebSourceNotice = import_zod13.z.strictObject({ code: import_zod13.z.string().max(120), message: import_zod13.z.string().max(2e3), remedy: import_zod13.z.string().max(120) });
1080
+ var WebSourceState = import_zod13.z.discriminatedUnion("state", [
1081
+ import_zod13.z.strictObject({
1082
+ state: import_zod13.z.literal("saved"),
1083
+ processed_document_id: import_zod13.z.string().min(1).max(64),
1084
+ source_id: import_zod13.z.string().min(1).max(128),
1085
+ /** The page was already saved and nothing changed ("Already saved, no change"). */
1086
+ reused_existing: import_zod13.z.boolean(),
1087
+ /** The page changed: this is a new version of that Source. */
1088
+ new_version_of: import_zod13.z.string().max(64).nullable(),
1089
+ kept: import_zod13.z.boolean(),
1090
+ intelligence: import_zod13.z.enum(["queued", "deferred", "never"]),
1091
+ /** The original page as captured, kept by AI Matrx (null: the organization keeps none). */
1092
+ original_file_id: import_zod13.z.string().max(128).nullable(),
1093
+ /** The organization it was saved in. */
1094
+ organization_id: OrgId,
1095
+ notices: import_zod13.z.array(WebSourceNotice).max(20)
1096
+ }),
1097
+ import_zod13.z.strictObject({
1098
+ state: import_zod13.z.literal("not_saved"),
1099
+ outbox_id: import_zod13.z.string().min(1).max(64),
1100
+ reason: WebNotSavedReason,
1101
+ message: import_zod13.z.string().max(2e3)
1102
+ })
1103
+ ]);
1035
1104
  var WebScrapeParams = import_zod13.z.strictObject({
1036
1105
  urls: import_zod13.z.array(WebUrl).min(1).max(20),
1037
1106
  use_cache: import_zod13.z.boolean().default(true),
1038
- get_links: import_zod13.z.boolean().default(false)
1107
+ get_links: import_zod13.z.boolean().default(false),
1108
+ /**
1109
+ * Since 1.38. `auto` (absent): this computer's scraper (HTTP, its browser only when a page needs
1110
+ * it). `browser`: this computer's own browser renders every page. `server`: AI Matrx's servers
1111
+ * read it (their connection, not this computer's; saved there as a web capture).
1112
+ */
1113
+ engine: import_zod13.z.enum(["auto", "browser", "server"]).optional(),
1114
+ /** Since 1.38: where the pages are saved (see WebLand). */
1115
+ land: WebLand.optional()
1039
1116
  });
1040
1117
  var WebScrapePage = import_zod13.z.strictObject({
1041
1118
  url: import_zod13.z.string(),
@@ -1050,7 +1127,9 @@ var WebScrapePage = import_zod13.z.strictObject({
1050
1127
  /** Why the page failed (blocked, timeout, not found…), in the scraper's words; null when ok. */
1051
1128
  error: import_zod13.z.string().nullable(),
1052
1129
  /** How the page was fetched (http, browser, cache). */
1053
- via: import_zod13.z.string().nullable()
1130
+ via: import_zod13.z.string().nullable(),
1131
+ /** Since 1.38: the page's Source (absent from a 1.37 core, and for a page that failed). */
1132
+ source: WebSourceState.optional()
1054
1133
  });
1055
1134
  var WebScrapeResult = import_zod13.z.strictObject({ pages: import_zod13.z.array(WebScrapePage), elapsed_ms: nonNegInt });
1056
1135
  var WebSearchParams = import_zod13.z.strictObject({
@@ -1074,7 +1153,9 @@ var WebBrowserFetchParams = import_zod13.z.strictObject({
1074
1153
  wait_for: import_zod13.z.string().max(1024).optional(),
1075
1154
  wait_timeout_ms: import_zod13.z.int().min(100).max(12e4).default(3e4),
1076
1155
  /** true: readable text; false: the rendered HTML. */
1077
- extract_text: import_zod13.z.boolean().default(true)
1156
+ extract_text: import_zod13.z.boolean().default(true),
1157
+ /** Since 1.38: where the rendered page is saved (see WebLand). */
1158
+ land: WebLand.optional()
1078
1159
  });
1079
1160
  var WebBrowserFetchResult = import_zod13.z.strictObject({
1080
1161
  url: import_zod13.z.string(),
@@ -1082,14 +1163,144 @@ var WebBrowserFetchResult = import_zod13.z.strictObject({
1082
1163
  title: import_zod13.z.string().nullable(),
1083
1164
  content: WebText,
1084
1165
  truncated: import_zod13.z.boolean(),
1085
- elapsed_ms: nonNegInt
1166
+ elapsed_ms: nonNegInt,
1167
+ /** Since 1.38: the rendered page's Source (absent from a 1.37 core). */
1168
+ source: WebSourceState.optional()
1169
+ });
1170
+ var ToolsParseFile = import_zod13.z.strictObject({
1171
+ /** Absolute path of the gzipped JSON the core reads, saves and then removes. */
1172
+ path: import_zod13.z.string().min(1).max(4096),
1173
+ bytes: nonNegInt
1174
+ });
1175
+ var ToolsWebScrapeParams = import_zod13.z.strictObject({
1176
+ urls: import_zod13.z.array(WebUrl).min(1).max(20),
1177
+ use_cache: import_zod13.z.boolean().default(true),
1178
+ get_links: import_zod13.z.boolean().default(false),
1179
+ /** `browser`: render every page in this computer's browser, then parse it. */
1180
+ engine: import_zod13.z.enum(["auto", "browser"]).default("auto"),
1181
+ /** Pages read at once (desktop.web/scrape_concurrency). */
1182
+ concurrency: import_zod13.z.int().min(1).max(20).default(5),
1183
+ /** The wait between pages from the same site (desktop.web/request_delay_ms). */
1184
+ delay_ms: import_zod13.z.int().min(0).max(3e4).default(0),
1185
+ /** Where the parse files go (the core's spool folder). */
1186
+ spool_dir: import_zod13.z.string().min(1).max(4096)
1187
+ });
1188
+ var ToolsWebScrapePage = import_zod13.z.strictObject({
1189
+ page: WebScrapePage,
1190
+ /** The page's whole parse, for the door; null when the page failed or had no words. */
1191
+ parse: ToolsParseFile.nullable(),
1192
+ /** The page as fetched, for research (rendered HTML or the HTTP body); null when not kept. */
1193
+ html: ToolsParseFile.nullable()
1194
+ });
1195
+ var ToolsWebScrapeResult = import_zod13.z.strictObject({ pages: import_zod13.z.array(ToolsWebScrapePage), elapsed_ms: nonNegInt });
1196
+ var ToolsWebBrowserFetchParams = import_zod13.z.strictObject({
1197
+ url: WebUrl,
1198
+ wait_for: import_zod13.z.string().max(1024).optional(),
1199
+ wait_timeout_ms: import_zod13.z.int().min(100).max(12e4).default(3e4),
1200
+ extract_text: import_zod13.z.boolean().default(true),
1201
+ spool_dir: import_zod13.z.string().min(1).max(4096)
1202
+ });
1203
+ var ToolsWebBrowserFetchResult = import_zod13.z.strictObject({ result: WebBrowserFetchResult, parse: ToolsParseFile.nullable() });
1204
+ var WebRuntimeStateName = import_zod13.z.enum(["not_installed", "installing", "installed", "failed"]);
1205
+ var WebRuntimeParams = import_zod13.z.strictObject({});
1206
+ var WebRuntimeState = import_zod13.z.strictObject({
1207
+ state: WebRuntimeStateName,
1208
+ /** Why it failed, in the installer's words; null otherwise. */
1209
+ error: import_zod13.z.string().max(2e3).nullable(),
1210
+ /** Bytes the browser takes on this computer (its packages and Chromium); null when unknown. */
1211
+ size_bytes: nonNegInt.nullable(),
1212
+ /** Whether it can show a window while it works (false: only the headless shell is installed). */
1213
+ can_show_window: import_zod13.z.boolean()
1214
+ });
1215
+ var WebOutboxItem = import_zod13.z.strictObject({
1216
+ outbox_id: import_zod13.z.string().min(1).max(64),
1217
+ url: import_zod13.z.string().max(8192),
1218
+ title: import_zod13.z.string().max(500).nullable(),
1219
+ organization_id: OrgId.nullable(),
1220
+ reason: WebNotSavedReason,
1221
+ message: import_zod13.z.string().max(2e3),
1222
+ attempts: nonNegInt,
1223
+ created_at_ms: nonNegInt,
1224
+ last_attempt_at_ms: nonNegInt.nullable(),
1225
+ bytes: nonNegInt
1226
+ });
1227
+ var WebOutboxListParams = import_zod13.z.strictObject({});
1228
+ var WebOutboxListResult = import_zod13.z.strictObject({
1229
+ items: import_zod13.z.array(WebOutboxItem),
1230
+ bytes: nonNegInt,
1231
+ /** The most the outbox holds; past it the oldest pages are dropped (and the log says so). */
1232
+ cap_bytes: nonNegInt
1233
+ });
1234
+ var WebOutboxRetryParams = import_zod13.z.strictObject({ outbox_id: import_zod13.z.string().min(1).max(64).optional() });
1235
+ var WebOutboxRetryResult = import_zod13.z.strictObject({ saved: nonNegInt, waiting: nonNegInt });
1236
+ var WebOutboxDiscardParams = import_zod13.z.strictObject({ outbox_id: import_zod13.z.string().min(1).max(64) });
1237
+ var WebOutboxDiscardResult = import_zod13.z.strictObject({ discarded: import_zod13.z.boolean() });
1238
+ var WebLogVia = import_zod13.z.enum(["this_computer", "browser", "server"]);
1239
+ var WebLogCaller = import_zod13.z.enum(["person", "agent", "research", "phone", "other"]);
1240
+ var WebLogResult = import_zod13.z.enum(["saved", "not_saved", "failed", "blocked", "read"]);
1241
+ var WebLogEntry = import_zod13.z.strictObject({
1242
+ id: import_zod13.z.string().min(1).max(64),
1243
+ at_ms: nonNegInt,
1244
+ caller: WebLogCaller,
1245
+ url: import_zod13.z.string().max(8192),
1246
+ title: import_zod13.z.string().max(500).nullable(),
1247
+ result: WebLogResult,
1248
+ /** One sentence: why it failed or was blocked, or the save's notice. Never page text. */
1249
+ detail: import_zod13.z.string().max(1e3).nullable(),
1250
+ via: WebLogVia,
1251
+ duration_ms: nonNegInt,
1252
+ processed_document_id: import_zod13.z.string().max(64).nullable()
1253
+ });
1254
+ var WebLogListParams = import_zod13.z.strictObject({ since_ms: nonNegInt.optional(), limit: import_zod13.z.int().min(1).max(1e3).default(200) });
1255
+ var WebLogListResult = import_zod13.z.strictObject({ entries: import_zod13.z.array(WebLogEntry) });
1256
+ var WebLogClearParams = import_zod13.z.strictObject({});
1257
+ var WebLogClearResult = import_zod13.z.strictObject({ cleared: nonNegInt });
1258
+ var WebProgressEvent = import_zod13.z.strictObject({
1259
+ request_id: RequestId,
1260
+ phase: import_zod13.z.enum(["installing", "fetching", "saving"]),
1261
+ done: nonNegInt,
1262
+ total: nonNegInt
1263
+ });
1264
+ var WebResearchItemState = import_zod13.z.enum(["waiting", "fetching", "saved", "thin", "failed", "cannot_edit", "blocked"]);
1265
+ var WebResearchItem = import_zod13.z.strictObject({
1266
+ topic_id: import_zod13.z.string().min(1).max(64),
1267
+ topic_name: import_zod13.z.string().max(500),
1268
+ source_id: import_zod13.z.string().min(1).max(64),
1269
+ url: import_zod13.z.string().max(8192),
1270
+ title: import_zod13.z.string().max(500).nullable(),
1271
+ /** The capture level this computer would try (1 quick, 2 scroll); 3+ is the extension's. */
1272
+ level: import_zod13.z.int().min(1).max(4),
1273
+ last_failure: import_zod13.z.string().max(1e3).nullable(),
1274
+ state: WebResearchItemState,
1275
+ /** One sentence after a fetch: what happened. */
1276
+ message: import_zod13.z.string().max(1e3).nullable()
1277
+ });
1278
+ var WebResearchQueueParams = import_zod13.z.strictObject({ topic_id: import_zod13.z.string().min(1).max(64).optional() });
1279
+ var WebResearchQueueResult = import_zod13.z.strictObject({
1280
+ state: import_zod13.z.enum(["ready", "signed_out", "unavailable"]),
1281
+ problem: import_zod13.z.string().max(1e3).nullable(),
1282
+ /** L1/L2 items on topics this person can edit: what this computer can fetch. */
1283
+ items: import_zod13.z.array(WebResearchItem),
1284
+ /** Items on topics the person can view but not add to (shown, never fetched). */
1285
+ view_only: nonNegInt
1286
+ });
1287
+ var WebResearchFetchParams = import_zod13.z.strictObject({
1288
+ topic_id: import_zod13.z.string().min(1).max(64).optional(),
1289
+ source_ids: import_zod13.z.array(import_zod13.z.string().min(1).max(64)).max(200).optional()
1290
+ });
1291
+ var WebResearchFetchResult = import_zod13.z.strictObject({
1292
+ items: import_zod13.z.array(WebResearchItem),
1293
+ saved: nonNegInt,
1294
+ thin: nonNegInt,
1295
+ failed: nonNegInt,
1296
+ cannot_edit: nonNegInt
1086
1297
  });
1087
1298
  var ToolsServiceProgress = import_zod13.z.strictObject({ phase: import_zod13.z.enum(["fetching", "installing"]), done: nonNegInt, total: nonNegInt });
1088
1299
 
1089
1300
  // src/schema/account.ts
1090
1301
  var import_zod14 = require("zod");
1091
- var import_uuid2 = require("@ai-matrx/kit/uuid");
1092
- var AccountRowId = import_zod14.z.string().regex(import_uuid2.UUID_SHAPE_PATTERN);
1302
+ var import_uuid3 = require("@ai-matrx/kit/uuid");
1303
+ var AccountRowId = import_zod14.z.string().regex(import_uuid3.UUID_SHAPE_PATTERN);
1093
1304
  var AccountReadState = import_zod14.z.enum(["ok", "signed_out", "unavailable"]);
1094
1305
  var AccountAgent = import_zod14.z.strictObject({
1095
1306
  id: AccountRowId,
@@ -1323,7 +1534,27 @@ var SystemSettingsPane = import_zod16.z.enum([
1323
1534
  "storage",
1324
1535
  "system_report",
1325
1536
  /** (1.35) Privacy & Security › Microphone: where the person allows Matrx 2 the microphone. */
1326
- "microphone"
1537
+ "microphone",
1538
+ // (1.41) Each other privacy grant's own page (Settings › Permissions and privacy's buttons), named
1539
+ // as sysinfo's OsPermissionName so a row opens its pane by its own name. A 1.40 core refuses these
1540
+ // as INVALID_PARAMS, so a client asks only a 1.41 core for them.
1541
+ "full_disk_access",
1542
+ "accessibility",
1543
+ "screen_recording",
1544
+ "camera",
1545
+ "automation",
1546
+ "contacts",
1547
+ "calendars",
1548
+ "reminders",
1549
+ "photos",
1550
+ "location",
1551
+ "local_network",
1552
+ "bluetooth",
1553
+ "wifi",
1554
+ "notifications",
1555
+ "speech_recognition",
1556
+ "messages",
1557
+ "mail"
1327
1558
  ]);
1328
1559
  var SystemOpenSettingsParams = import_zod16.z.strictObject({ pane: SystemSettingsPane });
1329
1560
  var SystemOpenSettingsResult = import_zod16.z.strictObject({ pane: SystemSettingsPane });
@@ -2029,10 +2260,10 @@ var ExecJobListResult = import_zod26.z.strictObject({ jobs: import_zod26.z.array
2029
2260
 
2030
2261
  // src/schema/coding.ts
2031
2262
  var import_zod27 = require("zod");
2032
- var import_uuid3 = require("@ai-matrx/kit/uuid");
2263
+ var import_uuid4 = require("@ai-matrx/kit/uuid");
2033
2264
  var CodingServiceCredentials = import_zod27.z.strictObject({
2034
2265
  access_token: import_zod27.z.string().min(16).max(16384),
2035
- user_id: import_zod27.z.string().regex(import_uuid3.UUID_SHAPE_PATTERN),
2266
+ user_id: import_zod27.z.string().regex(import_uuid4.UUID_SHAPE_PATTERN),
2036
2267
  /** The AI Matrx server this app talks to (production, or a local server on the nightly copy). */
2037
2268
  server_url: import_zod27.z.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
2038
2269
  });
@@ -2470,9 +2701,9 @@ var SessionIdentifyResult = import_zod28.z.strictObject({ label: import_zod28.z.
2470
2701
 
2471
2702
  // src/schema/apps.ts
2472
2703
  var import_zod29 = require("zod");
2473
- var import_uuid4 = require("@ai-matrx/kit/uuid");
2704
+ var import_uuid5 = require("@ai-matrx/kit/uuid");
2474
2705
  var AppKey = import_zod29.z.string().regex(/^[a-z][a-z0-9_-]{0,39}$/);
2475
- var AppProfileId = import_zod29.z.string().regex(import_uuid4.UUID_SHAPE_PATTERN);
2706
+ var AppProfileId = import_zod29.z.string().regex(import_uuid5.UUID_SHAPE_PATTERN);
2476
2707
  var AppProfileLocator = import_zod29.z.string().min(1).max(512).regex(/^[A-Za-z0-9 _()+@,-][A-Za-z0-9 ._()+@,-]{0,127}(\/[A-Za-z0-9 _()+@,-][A-Za-z0-9 ._()+@,-]{0,127}){0,7}$/);
2477
2708
  var AppSupport = import_zod29.z.enum(["supported", "partial", "unsupported"]);
2478
2709
  var AppFeatureStatus = import_zod29.z.strictObject({
@@ -3410,7 +3641,12 @@ var MessagesListResult = import_zod34.z.strictObject({ messages: import_zod34.z.
3410
3641
  var MessagesSendParams = import_zod34.z.strictObject({
3411
3642
  /** A phone number or email the person can message. */
3412
3643
  to: import_zod34.z.string().min(3).max(320),
3413
- text: import_zod34.z.string().min(1).max(2e4)
3644
+ text: import_zod34.z.string().min(1).max(2e4),
3645
+ /**
3646
+ * Send only over this service (Matrx Local's SendMessage `service`). Absent: iMessage first, and
3647
+ * SMS when the recipient has no iMessage (since 1.42).
3648
+ */
3649
+ service: import_zod34.z.enum(["iMessage", "SMS"]).optional()
3414
3650
  });
3415
3651
  var MessagesSendResult = import_zod34.z.strictObject({ sent: import_zod34.z.boolean() });
3416
3652
  var ContactsSearchParams = import_zod34.z.strictObject({
@@ -3964,6 +4200,16 @@ var OPS = {
3964
4200
  "web.scrape": { params: WebScrapeParams, result: WebScrapeResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
3965
4201
  "web.search": { params: WebSearchParams, result: WebSearchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
3966
4202
  "web.fetch_with_browser": { params: WebBrowserFetchParams, result: WebBrowserFetchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
4203
+ "web.runtime.state": { params: WebRuntimeParams, result: WebRuntimeState, kind: "unary", since: "1.40", errors: ["INTERNAL"] },
4204
+ "web.runtime.install": { params: WebRuntimeParams, result: WebRuntimeState, kind: "unary", since: "1.40", errors: ["TIMEOUT", "RESOURCE_BUSY", "CANCELLED", "INTERNAL"] },
4205
+ "web.runtime.remove": { params: WebRuntimeParams, result: WebRuntimeState, kind: "unary", since: "1.40", errors: ["RESOURCE_BUSY", "INTERNAL"] },
4206
+ "web.outbox.list": { params: WebOutboxListParams, result: WebOutboxListResult, kind: "unary", since: "1.40", errors: ["INTERNAL"] },
4207
+ "web.outbox.retry": { params: WebOutboxRetryParams, result: WebOutboxRetryResult, kind: "unary", since: "1.40", errors: ["NOT_FOUND", "AUTH_REQUIRED", "INTERNAL"] },
4208
+ "web.outbox.discard": { params: WebOutboxDiscardParams, result: WebOutboxDiscardResult, kind: "unary", since: "1.40", errors: ["NOT_FOUND", "INTERNAL"] },
4209
+ "web.log.list": { params: WebLogListParams, result: WebLogListResult, kind: "unary", since: "1.40", errors: ["INVALID_PARAMS"] },
4210
+ "web.log.clear": { params: WebLogClearParams, result: WebLogClearResult, kind: "unary", since: "1.40", errors: ["INTERNAL"] },
4211
+ "web.research.queue": { params: WebResearchQueueParams, result: WebResearchQueueResult, kind: "unary", since: "1.40", errors: ["INVALID_PARAMS", "INTERNAL"] },
4212
+ "web.research.fetch": { params: WebResearchFetchParams, result: WebResearchFetchResult, kind: "unary", since: "1.40", errors: ["INVALID_PARAMS", "AUTH_REQUIRED", "RESOURCE_BUSY", "CANCELLED", "INTERNAL"] },
3967
4213
  // 1.23: the signed-in person's own agents and Vault, read as them (the desktop's Agents library and Vault).
3968
4214
  "account.agents.list": { params: AccountAgentsListParams, result: AccountAgentsListResult, kind: "unary", since: "1.23", errors: ["INTERNAL"] },
3969
4215
  "account.vault.list": { params: AccountVaultListParams, result: AccountVaultListResult, kind: "unary", since: "1.23", errors: ["INTERNAL"] },
@@ -4054,7 +4300,9 @@ var EVENTS = {
4054
4300
  "diag.errors.changed": DiagErrorsChangedEvent,
4055
4301
  "browser.invoke": BrowserInvokeEvent,
4056
4302
  "browser.sessions_changed": BrowserSessionsChangedEvent,
4057
- "browser.progress": BrowserProgressEvent
4303
+ "browser.progress": BrowserProgressEvent,
4304
+ "web.log.entry": WebLogEntry,
4305
+ "web.progress": WebProgressEvent
4058
4306
  };
4059
4307
 
4060
4308
  // src/versioning.ts
@@ -4071,7 +4319,9 @@ var RESULT_PATH = /* @__PURE__ */ new Map([
4071
4319
  ["apps.chats.list", "AppsChatsListResult"],
4072
4320
  ["apps.accounts.usage", "AppsAccountsUsageResult"],
4073
4321
  ["apps.accounts.resets", "AppsAccountsResetsResult"],
4074
- ["apps.windows.update_state", "AppsWindowsUpdateStateResult"]
4322
+ ["apps.windows.update_state", "AppsWindowsUpdateStateResult"],
4323
+ ["web.fetch_with_browser", "WebBrowserFetchResult"],
4324
+ ["sysinfo.get", "SysinfoGetResult"]
4075
4325
  ]);
4076
4326
  var NESTED_RESULTS = /* @__PURE__ */ new Map([
4077
4327
  ["apps.chats.list", [["chats", "ChatRow"]]],
@@ -4084,7 +4334,9 @@ var NESTED_RESULTS = /* @__PURE__ */ new Map([
4084
4334
  ["apps.accounts.usage", [["accounts", "AccountUsage"]]],
4085
4335
  ["resources.snapshot", [["disks", "ResourcesDisk"]]],
4086
4336
  ["stack.state", [["servers", "StackServer"]]],
4087
- ["account.agents.list", [["agents", "AccountAgent"]]]
4337
+ ["account.agents.list", [["agents", "AccountAgent"]]],
4338
+ ["web.scrape", [["pages", "WebScrapePage"]]],
4339
+ ["sysinfo.get", [["permissions", "SysinfoGetResult.permissions[]"]]]
4088
4340
  ]);
4089
4341
  var WINDOW_RESULTS = /* @__PURE__ */ new Map([
4090
4342
  ["window.list", "windows"],