@ai-matrx/desktop-protocol 0.21.28 → 0.21.29

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
@@ -124,6 +124,8 @@ __export(src_exports, {
124
124
  AudioRecordParams: () => AudioRecordParams,
125
125
  AudioRecordResult: () => AudioRecordResult,
126
126
  AudioSetLevelsParams: () => AudioSetLevelsParams,
127
+ AutomationScriptParams: () => AutomationScriptParams,
128
+ AutomationScriptResult: () => AutomationScriptResult,
127
129
  BEARER_PREFIX: () => BEARER_PREFIX,
128
130
  BROADCAST_CID: () => BROADCAST_CID,
129
131
  BrowserCallError: () => BrowserCallError,
@@ -135,6 +137,9 @@ __export(src_exports, {
135
137
  BrowserDisconnectResult: () => BrowserDisconnectResult,
136
138
  BrowserInvokeEvent: () => BrowserInvokeEvent,
137
139
  BrowserKind: () => BrowserKind,
140
+ BrowserLogMessage: () => BrowserLogMessage,
141
+ BrowserLogParams: () => BrowserLogParams,
142
+ BrowserLogResult: () => BrowserLogResult,
138
143
  BrowserPairCodeParams: () => BrowserPairCodeParams,
139
144
  BrowserPairCodeResult: () => BrowserPairCodeResult,
140
145
  BrowserPairRequest: () => BrowserPairRequest,
@@ -145,6 +150,8 @@ __export(src_exports, {
145
150
  BrowserProgressResult: () => BrowserProgressResult,
146
151
  BrowserRegisterParams: () => BrowserRegisterParams,
147
152
  BrowserRegisterResult: () => BrowserRegisterResult,
153
+ BrowserResetCountersParams: () => BrowserResetCountersParams,
154
+ BrowserResetCountersResult: () => BrowserResetCountersResult,
148
155
  BrowserResultParams: () => BrowserResultParams,
149
156
  BrowserResultResult: () => BrowserResultResult,
150
157
  BrowserSession: () => BrowserSession,
@@ -154,8 +161,16 @@ __export(src_exports, {
154
161
  BrowserSessionsResult: () => BrowserSessionsResult,
155
162
  BrowserSetEnabledParams: () => BrowserSetEnabledParams,
156
163
  BrowserSetEnabledResult: () => BrowserSetEnabledResult,
164
+ BrowserToolMetric: () => BrowserToolMetric,
165
+ BrowserToolMetricsParams: () => BrowserToolMetricsParams,
166
+ BrowserToolMetricsResult: () => BrowserToolMetricsResult,
157
167
  CLOSE_RULES: () => CLOSE_RULES,
158
168
  CONTRACT_SHA256: () => CONTRACT_SHA256,
169
+ CalendarCreateParams: () => CalendarCreateParams,
170
+ CalendarCreateResult: () => CalendarCreateResult,
171
+ CalendarEvent: () => CalendarEvent,
172
+ CalendarListParams: () => CalendarListParams,
173
+ CalendarListResult: () => CalendarListResult,
159
174
  CancelMsg: () => CancelMsg,
160
175
  ChatAppProject: () => ChatAppProject,
161
176
  ChatFamily: () => ChatFamily,
@@ -189,6 +204,13 @@ __export(src_exports, {
189
204
  CodingServiceCredentials: () => CodingServiceCredentials,
190
205
  CodingServiceProgress: () => CodingServiceProgress,
191
206
  ColdChat: () => ColdChat,
207
+ ContactDetail: () => ContactDetail,
208
+ ContactLabeled: () => ContactLabeled,
209
+ ContactSummary: () => ContactSummary,
210
+ ContactsGetParams: () => ContactsGetParams,
211
+ ContactsGetResult: () => ContactsGetResult,
212
+ ContactsSearchParams: () => ContactsSearchParams,
213
+ ContactsSearchResult: () => ContactsSearchResult,
192
214
  ContractHash: () => ContractHash,
193
215
  CoreToClientMsg: () => CoreToClientMsg,
194
216
  CoreToServiceMsg: () => CoreToServiceMsg,
@@ -197,6 +219,7 @@ __export(src_exports, {
197
219
  DEFAULT_MAX_MESSAGE_BYTES: () => DEFAULT_MAX_MESSAGE_BYTES,
198
220
  DEFAULT_WINDOW_BYTES: () => DEFAULT_WINDOW_BYTES,
199
221
  DISCOVERY_FILE: () => DISCOVERY_FILE,
222
+ DOCUMENTS_MAX_TEXT_CHARS: () => DOCUMENTS_MAX_TEXT_CHARS,
200
223
  DesktopHealth: () => DesktopHealth,
201
224
  DesktopProtocolError: () => DesktopProtocolError,
202
225
  DeviceId: () => DeviceId,
@@ -209,10 +232,27 @@ __export(src_exports, {
209
232
  DiagErrorsReportParams: () => DiagErrorsReportParams,
210
233
  DiagErrorsReportResult: () => DiagErrorsReportResult,
211
234
  DiagProcess: () => DiagProcess,
235
+ DocumentsImageResizeParams: () => DocumentsImageResizeParams,
236
+ DocumentsImageResizeResult: () => DocumentsImageResizeResult,
237
+ DocumentsOcrLine: () => DocumentsOcrLine,
238
+ DocumentsOcrParams: () => DocumentsOcrParams,
239
+ DocumentsOcrResult: () => DocumentsOcrResult,
240
+ DocumentsOfficeGenerateParams: () => DocumentsOfficeGenerateParams,
241
+ DocumentsOfficeGenerateResult: () => DocumentsOfficeGenerateResult,
242
+ DocumentsParagraph: () => DocumentsParagraph,
243
+ DocumentsPdfPage: () => DocumentsPdfPage,
244
+ DocumentsPdfTextParams: () => DocumentsPdfTextParams,
245
+ DocumentsPdfTextResult: () => DocumentsPdfTextResult,
246
+ DocumentsSheet: () => DocumentsSheet,
212
247
  EVENTS: () => EVENTS,
213
248
  EXCLUDED_TOOLS: () => EXCLUDED_TOOLS,
214
249
  EndMsg: () => EndMsg,
215
250
  EndReason: () => EndReason,
251
+ EntitiesNerParams: () => EntitiesNerParams,
252
+ EntitiesNerResult: () => EntitiesNerResult,
253
+ EntitiesPiiParams: () => EntitiesPiiParams,
254
+ EntitiesPiiResult: () => EntitiesPiiResult,
255
+ EntitySpan: () => EntitySpan,
216
256
  ErrorCode: () => ErrorCode,
217
257
  ErrorMsg: () => ErrorMsg,
218
258
  ErrorReason: () => ErrorReason,
@@ -333,7 +373,25 @@ __export(src_exports, {
333
373
  Limits: () => Limits,
334
374
  LlmRunning: () => LlmRunning,
335
375
  LlmServerState: () => LlmServerState,
376
+ LocationGetParams: () => LocationGetParams,
377
+ LocationGetResult: () => LocationGetResult,
336
378
  MATRX_EXTENSION_IDS: () => MATRX_EXTENSION_IDS,
379
+ MailAccount: () => MailAccount,
380
+ MailAccountsParams: () => MailAccountsParams,
381
+ MailAccountsResult: () => MailAccountsResult,
382
+ MailListParams: () => MailListParams,
383
+ MailListResult: () => MailListResult,
384
+ MailMessage: () => MailMessage,
385
+ MailSendParams: () => MailSendParams,
386
+ MailSendResult: () => MailSendResult,
387
+ MessagesChat: () => MessagesChat,
388
+ MessagesChatsParams: () => MessagesChatsParams,
389
+ MessagesChatsResult: () => MessagesChatsResult,
390
+ MessagesListParams: () => MessagesListParams,
391
+ MessagesListResult: () => MessagesListResult,
392
+ MessagesMessage: () => MessagesMessage,
393
+ MessagesSendParams: () => MessagesSendParams,
394
+ MessagesSendResult: () => MessagesSendResult,
337
395
  MlInstallPhase: () => MlInstallPhase,
338
396
  MlInstallProgress: () => MlInstallProgress,
339
397
  MlProgress: () => MlProgress,
@@ -359,6 +417,39 @@ __export(src_exports, {
359
417
  ModelsTranscribeResult: () => ModelsTranscribeResult,
360
418
  NAMED_SCHEMAS: () => NAMED_SCHEMAS,
361
419
  NULL_SINCE: () => NULL_SINCE,
420
+ NetAddress: () => NetAddress,
421
+ NetBluetoothDevice: () => NetBluetoothDevice,
422
+ NetBluetoothParams: () => NetBluetoothParams,
423
+ NetBluetoothResult: () => NetBluetoothResult,
424
+ NetDevice: () => NetDevice,
425
+ NetDevicesParams: () => NetDevicesParams,
426
+ NetDevicesResult: () => NetDevicesResult,
427
+ NetDownloadParams: () => NetDownloadParams,
428
+ NetDownloadResult: () => NetDownloadResult,
429
+ NetInfoParams: () => NetInfoParams,
430
+ NetInfoResult: () => NetInfoResult,
431
+ NetInterface: () => NetInterface,
432
+ NetMdnsParams: () => NetMdnsParams,
433
+ NetMdnsResult: () => NetMdnsResult,
434
+ NetMdnsService: () => NetMdnsService,
435
+ NetScanParams: () => NetScanParams,
436
+ NetScanResult: () => NetScanResult,
437
+ NetWifiNetwork: () => NetWifiNetwork,
438
+ NetWifiParams: () => NetWifiParams,
439
+ NetWifiResult: () => NetWifiResult,
440
+ NoteEntry: () => NoteEntry,
441
+ NotesFolder: () => NotesFolder,
442
+ NotesFoldersParams: () => NotesFoldersParams,
443
+ NotesFoldersResult: () => NotesFoldersResult,
444
+ NotesListParams: () => NotesListParams,
445
+ NotesListResult: () => NotesListResult,
446
+ NotesMatch: () => NotesMatch,
447
+ NotesReadParams: () => NotesReadParams,
448
+ NotesReadResult: () => NotesReadResult,
449
+ NotesSearchParams: () => NotesSearchParams,
450
+ NotesSearchResult: () => NotesSearchResult,
451
+ NotesWriteParams: () => NotesWriteParams,
452
+ NotesWriteResult: () => NotesWriteResult,
362
453
  OPS: () => OPS,
363
454
  OpDescriptor: () => OpDescriptor,
364
455
  OsPermissionName: () => OsPermissionName,
@@ -367,6 +458,12 @@ __export(src_exports, {
367
458
  PROTOCOL_MAJOR: () => PROTOCOL_MAJOR,
368
459
  PROTOCOL_MINOR: () => PROTOCOL_MINOR,
369
460
  PROTOCOL_VERSION: () => PROTOCOL_VERSION,
461
+ Photo: () => Photo,
462
+ PhotosGetParams: () => PhotosGetParams,
463
+ PhotosGetResult: () => PhotosGetResult,
464
+ PhotosSearchParams: () => PhotosSearchParams,
465
+ PhotosSearchResult: () => PhotosSearchResult,
466
+ PiiKind: () => PiiKind,
370
467
  PowerEnergy: () => PowerEnergy,
371
468
  PowerHistoryParams: () => PowerHistoryParams,
372
469
  PowerHistoryPoint: () => PowerHistoryPoint,
@@ -395,6 +492,8 @@ __export(src_exports, {
395
492
  RELAY_CALL_HELLO_ID: () => RELAY_CALL_HELLO_ID,
396
493
  RELAY_CALL_REQUEST_ID: () => RELAY_CALL_REQUEST_ID,
397
494
  RELAY_CALL_VERSION_HEADER: () => RELAY_CALL_VERSION_HEADER,
495
+ RegistryValue: () => RegistryValue,
496
+ RegistryValueType: () => RegistryValueType,
398
497
  RelayAuthExpiringEvent: () => RelayAuthExpiringEvent,
399
498
  RelayCallEnvelope: () => RelayCallEnvelope,
400
499
  RelayCallHello: () => RelayCallHello,
@@ -405,6 +504,11 @@ __export(src_exports, {
405
504
  RelayHopEnvelopeHeader: () => RelayHopEnvelopeHeader,
406
505
  RelayMsg: () => RelayMsg,
407
506
  RelayStatusResponse: () => RelayStatusResponse,
507
+ Reminder: () => Reminder,
508
+ RemindersCreateParams: () => RemindersCreateParams,
509
+ RemindersCreateResult: () => RemindersCreateResult,
510
+ RemindersListParams: () => RemindersListParams,
511
+ RemindersListResult: () => RemindersListResult,
408
512
  RequestId: () => RequestId,
409
513
  RequestMsg: () => RequestMsg,
410
514
  ResourceId: () => ResourceId,
@@ -430,6 +534,14 @@ __export(src_exports, {
430
534
  SERVICES: () => SERVICES,
431
535
  SERVICE_MAX_FRAME_BYTES: () => SERVICE_MAX_FRAME_BYTES,
432
536
  SUBPROTOCOL: () => SUBPROTOCOL,
537
+ ScheduleCancelParams: () => ScheduleCancelParams,
538
+ ScheduleCancelResult: () => ScheduleCancelResult,
539
+ ScheduleCreateParams: () => ScheduleCreateParams,
540
+ ScheduleCreateResult: () => ScheduleCreateResult,
541
+ ScheduleListParams: () => ScheduleListParams,
542
+ ScheduleListResult: () => ScheduleListResult,
543
+ ScheduleRun: () => ScheduleRun,
544
+ ScheduledTask: () => ScheduledTask,
433
545
  ScreenCaptureParams: () => ScreenCaptureParams,
434
546
  ScreenCaptureResult: () => ScreenCaptureResult,
435
547
  ScreenDisplay: () => ScreenDisplay,
@@ -548,6 +660,21 @@ __export(src_exports, {
548
660
  WindowMinimizeResult: () => WindowMinimizeResult,
549
661
  WindowMoveParams: () => WindowMoveParams,
550
662
  WindowMoveResult: () => WindowMoveResult,
663
+ WindowsEvent: () => WindowsEvent,
664
+ WindowsEventLogParams: () => WindowsEventLogParams,
665
+ WindowsEventLogResult: () => WindowsEventLogResult,
666
+ WindowsFeature: () => WindowsFeature,
667
+ WindowsFeaturesParams: () => WindowsFeaturesParams,
668
+ WindowsFeaturesResult: () => WindowsFeaturesResult,
669
+ WindowsRegistryReadParams: () => WindowsRegistryReadParams,
670
+ WindowsRegistryReadResult: () => WindowsRegistryReadResult,
671
+ WindowsRegistryWriteParams: () => WindowsRegistryWriteParams,
672
+ WindowsRegistryWriteResult: () => WindowsRegistryWriteResult,
673
+ WindowsService: () => WindowsService,
674
+ WindowsServiceControlParams: () => WindowsServiceControlParams,
675
+ WindowsServiceControlResult: () => WindowsServiceControlResult,
676
+ WindowsServicesParams: () => WindowsServicesParams,
677
+ WindowsServicesResult: () => WindowsServicesResult,
551
678
  announcedVersion: () => announcedVersion,
552
679
  assertFrameHeader: () => assertFrameHeader,
553
680
  buildToolStatus: () => buildToolStatus,
@@ -582,7 +709,7 @@ module.exports = __toCommonJS(src_exports);
582
709
  var import_zod = require("zod");
583
710
  var import_uuid = require("@ai-matrx/kit/uuid");
584
711
  var PROTOCOL_MAJOR = 1;
585
- var PROTOCOL_MINOR = 33;
712
+ var PROTOCOL_MINOR = 37;
586
713
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
587
714
  var ProtocolVersion = import_zod.z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
588
715
  var RequestId = import_zod.z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -666,8 +793,11 @@ var ErrorReason = import_zod2.z.enum([
666
793
  // AUTH_FORBIDDEN: the named browser is signed in to another account
667
794
  "browser_connection_off",
668
795
  // AUTH_FORBIDDEN: the person turned Browser connection off
669
- "awaiting_confirmation"
796
+ "awaiting_confirmation",
670
797
  // TIMEOUT: the person did not answer the browser's confirmation in time
798
+ // 1.34 (REASONS_SINCE): the per-device tool policy (src/tools/policy.ts)
799
+ "tool_disabled_on_device"
800
+ // AUTH_FORBIDDEN: the person turned this tool off for agents on this computer (Agents › Tools)
671
801
  ]);
672
802
  var FsPatchEditFailure = import_zod2.z.strictObject({ edit_index: nonNegInt, reason: import_zod2.z.string().max(300) });
673
803
  var ProtocolErrorBody = import_zod2.z.strictObject({
@@ -1968,6 +2098,10 @@ var AppsProjectsToWindowParams = import_zod14.z.strictObject({
1968
2098
  group: import_zod14.z.boolean().default(false),
1969
2099
  /** 1.32: also pin them in that window (now if closed, else when it next closes). */
1970
2100
  pin: import_zod14.z.boolean().optional(),
2101
+ /** 1.36: a batch: exactly these chats of the project and no other (a reused marker is a label, never a sweep). */
2102
+ chat_ids: import_zod14.z.array(ChatId).min(1).max(5e3).optional(),
2103
+ /** 1.36: take them off this one side window only (a Move's origin), never main or another window that lists them. */
2104
+ take_off_from: ChatPlace.optional(),
1971
2105
  dry_run: import_zod14.z.boolean().default(false)
1972
2106
  });
1973
2107
  var AppsProjectsToWindowResult = import_zod14.z.strictObject({
@@ -2471,7 +2605,9 @@ var SystemSettingsPane = import_zod21.z.enum([
2471
2605
  "energy",
2472
2606
  "about",
2473
2607
  "storage",
2474
- "system_report"
2608
+ "system_report",
2609
+ /** (1.35) Privacy & Security › Microphone: where the person allows Matrx 2 the microphone. */
2610
+ "microphone"
2475
2611
  ]);
2476
2612
  var SystemOpenSettingsParams = import_zod21.z.strictObject({ pane: SystemSettingsPane });
2477
2613
  var SystemOpenSettingsResult = import_zod21.z.strictObject({ pane: SystemSettingsPane });
@@ -3330,6 +3466,41 @@ var BrowserCallResult = import_zod33.z.strictObject({
3330
3466
  result: import_zod33.z.unknown(),
3331
3467
  duration_ms: nonNegInt
3332
3468
  });
3469
+ var BrowserToolMetricsParams = import_zod33.z.strictObject({ client_instance: BrowserClientInstance });
3470
+ var BrowserToolMetric = import_zod33.z.strictObject({
3471
+ tool: import_zod33.z.string().max(256),
3472
+ calls: nonNegInt,
3473
+ errors: nonNegInt,
3474
+ /** Over the last 200 answered calls; null before the first answer. */
3475
+ p50_ms: nonNegInt.nullable(),
3476
+ p95_ms: nonNegInt.nullable(),
3477
+ last_call_at_ms: epochMs.nullable(),
3478
+ last_error: import_zod33.z.string().max(2048).nullable()
3479
+ });
3480
+ var BrowserToolMetricsResult = import_zod33.z.strictObject({ client_instance: import_zod33.z.string(), tools: import_zod33.z.array(BrowserToolMetric) });
3481
+ var BrowserResetCountersParams = import_zod33.z.strictObject({ client_instance: BrowserClientInstance });
3482
+ var BrowserResetCountersResult = import_zod33.z.strictObject({ reset: import_zod33.z.boolean() });
3483
+ var BrowserLogParams = import_zod33.z.strictObject({
3484
+ /** Only messages after this seq (0: from the oldest kept; the core keeps the last 500). */
3485
+ after_seq: nonNegInt.default(0),
3486
+ limit: import_zod33.z.int().min(1).max(500).default(500)
3487
+ });
3488
+ var BrowserLogMessage = import_zod33.z.strictObject({
3489
+ seq: nonNegInt,
3490
+ at_ms: epochMs,
3491
+ direction: import_zod33.z.enum(["to_browser", "from_browser", "core"]),
3492
+ client_instance: import_zod33.z.string(),
3493
+ kind: import_zod33.z.enum(["register", "invoke", "result", "progress", "timeout", "closed"]),
3494
+ tool: import_zod33.z.string().nullable(),
3495
+ call_id: import_zod33.z.string().nullable(),
3496
+ ok: import_zod33.z.boolean().nullable(),
3497
+ detail: import_zod33.z.string().max(1024)
3498
+ });
3499
+ var BrowserLogResult = import_zod33.z.strictObject({
3500
+ messages: import_zod33.z.array(BrowserLogMessage),
3501
+ /** The newest seq the core has written (pass it back as after_seq to follow the log). */
3502
+ last_seq: nonNegInt
3503
+ });
3333
3504
  var BrowserInvokeEvent = import_zod33.z.strictObject({
3334
3505
  call_id: import_zod33.z.string().min(1).max(64),
3335
3506
  tool: import_zod33.z.string().min(1).max(96),
@@ -3359,6 +3530,575 @@ var MATRX_EXTENSION_IDS = {
3359
3530
  };
3360
3531
  var DISCOVERY_FILE = { live: "matrx2.json", development: "matrx2-dev.json" };
3361
3532
 
3533
+ // src/schema/net.ts
3534
+ var import_zod34 = require("zod");
3535
+ var NetInfoParams = import_zod34.z.strictObject({});
3536
+ var NetAddress = import_zod34.z.strictObject({
3537
+ address: import_zod34.z.string(),
3538
+ family: import_zod34.z.enum(["ipv4", "ipv6"]),
3539
+ netmask: import_zod34.z.string().nullable(),
3540
+ /** CIDR form ("192.168.1.20/24"); null where the OS gives no prefix. */
3541
+ cidr: import_zod34.z.string().nullable()
3542
+ });
3543
+ var NetInterface = import_zod34.z.strictObject({
3544
+ name: import_zod34.z.string(),
3545
+ mac: import_zod34.z.string().nullable(),
3546
+ /** Loopback and other internal interfaces. */
3547
+ internal: import_zod34.z.boolean(),
3548
+ addresses: import_zod34.z.array(NetAddress)
3549
+ });
3550
+ var NetInfoResult = import_zod34.z.strictObject({
3551
+ hostname: import_zod34.z.string(),
3552
+ interfaces: import_zod34.z.array(NetInterface),
3553
+ /** The default route's gateway; null when the OS does not say (or there is none). */
3554
+ gateway: import_zod34.z.string().nullable(),
3555
+ /** The DNS servers the OS uses; empty when it does not say. */
3556
+ dns: import_zod34.z.array(import_zod34.z.string())
3557
+ });
3558
+ var NetWifiParams = import_zod34.z.strictObject({});
3559
+ var NetWifiNetwork = import_zod34.z.strictObject({
3560
+ /** null: the OS hides the name (macOS without Location Services for this app). */
3561
+ ssid: import_zod34.z.string().nullable(),
3562
+ /** dBm; null where the OS does not say. */
3563
+ rssi: import_zod34.z.int().nullable(),
3564
+ channel: import_zod34.z.string().nullable(),
3565
+ security: import_zod34.z.string().nullable()
3566
+ });
3567
+ var NetWifiResult = import_zod34.z.strictObject({
3568
+ /** Whether the computer has a Wi-Fi interface at all. */
3569
+ available: import_zod34.z.boolean(),
3570
+ /** The network the computer is on; null when it is on none. */
3571
+ current: NetWifiNetwork.nullable(),
3572
+ /** Networks in range (may be empty where the OS lists none to apps). */
3573
+ networks: import_zod34.z.array(NetWifiNetwork)
3574
+ });
3575
+ var NetBluetoothParams = import_zod34.z.strictObject({});
3576
+ var NetBluetoothDevice = import_zod34.z.strictObject({
3577
+ name: import_zod34.z.string(),
3578
+ address: import_zod34.z.string().nullable(),
3579
+ connected: import_zod34.z.boolean(),
3580
+ /** What it is, in the OS's words ("Headphones", "Keyboard"); null where it does not say. */
3581
+ kind: import_zod34.z.string().nullable(),
3582
+ /** Battery percent, where the OS reports it. */
3583
+ battery: import_zod34.z.int().min(0).max(100).nullable()
3584
+ });
3585
+ var NetBluetoothResult = import_zod34.z.strictObject({
3586
+ /** Bluetooth is on; null where the OS does not say. */
3587
+ powered: import_zod34.z.boolean().nullable(),
3588
+ devices: import_zod34.z.array(NetBluetoothDevice)
3589
+ });
3590
+ var NetDevicesParams = import_zod34.z.strictObject({});
3591
+ var NetDevice = import_zod34.z.strictObject({
3592
+ ip: import_zod34.z.string(),
3593
+ mac: import_zod34.z.string().nullable(),
3594
+ interface: import_zod34.z.string().nullable(),
3595
+ /** The name the local network gives it (reverse DNS / mDNS), when the table carries one. */
3596
+ hostname: import_zod34.z.string().nullable()
3597
+ });
3598
+ var NetDevicesResult = import_zod34.z.strictObject({ devices: import_zod34.z.array(NetDevice) });
3599
+ var NetMdnsParams = import_zod34.z.strictObject({
3600
+ /** A service type ("_http._tcp"); absent lists the service types found. */
3601
+ service_type: import_zod34.z.string().min(1).max(64).regex(/^_[A-Za-z0-9-]+\._(tcp|udp)$/).optional(),
3602
+ /** How long to listen. */
3603
+ timeout_s: import_zod34.z.int().min(1).max(30).default(3)
3604
+ });
3605
+ var NetMdnsService = import_zod34.z.strictObject({
3606
+ name: import_zod34.z.string(),
3607
+ type: import_zod34.z.string(),
3608
+ domain: import_zod34.z.string(),
3609
+ interface: import_zod34.z.string().nullable()
3610
+ });
3611
+ var NetMdnsResult = import_zod34.z.strictObject({ services: import_zod34.z.array(NetMdnsService) });
3612
+ var NetScanParams = import_zod34.z.strictObject({
3613
+ /** A host name or address; a private or loopback address unless `allow_public`. */
3614
+ host: import_zod34.z.string().min(1).max(253),
3615
+ ports: import_zod34.z.array(import_zod34.z.int().min(1).max(65535)).min(1).max(1024),
3616
+ timeout_ms: import_zod34.z.int().min(50).max(1e4).default(800),
3617
+ /** Scanning a host on the public internet needs saying so. */
3618
+ allow_public: import_zod34.z.boolean().default(false)
3619
+ });
3620
+ var NetScanResult = import_zod34.z.strictObject({
3621
+ host: import_zod34.z.string(),
3622
+ /** The address the host resolved to. */
3623
+ address: import_zod34.z.string(),
3624
+ open: import_zod34.z.array(import_zod34.z.int().min(1).max(65535)),
3625
+ closed: nonNegInt,
3626
+ elapsed_ms: nonNegInt
3627
+ });
3628
+ var NetDownloadParams = import_zod34.z.strictObject({
3629
+ url: import_zod34.z.string().min(1).max(8192).regex(/^https?:\/\//),
3630
+ /** Where to save it: an absolute path (a folder keeps the URL's file name). */
3631
+ path: AbsPath,
3632
+ overwrite: import_zod34.z.boolean().default(false),
3633
+ timeout_s: import_zod34.z.int().min(1).max(3600).default(300),
3634
+ /** Refuse anything larger. */
3635
+ max_bytes: import_zod34.z.int().min(1).max(10737418240).default(2147483648)
3636
+ });
3637
+ var NetDownloadResult = import_zod34.z.strictObject({
3638
+ path: import_zod34.z.string(),
3639
+ bytes: nonNegInt,
3640
+ content_type: import_zod34.z.string().nullable(),
3641
+ /** The final URL after redirects. */
3642
+ url: import_zod34.z.string(),
3643
+ elapsed_ms: nonNegInt
3644
+ });
3645
+
3646
+ // src/schema/personal.ts
3647
+ var import_zod35 = require("zod");
3648
+ var Text = import_zod35.z.string().max(65536);
3649
+ var AutomationScriptParams = import_zod35.z.strictObject({
3650
+ /** applescript and jxa: macOS (osascript); powershell: Windows (and pwsh where installed). */
3651
+ language: import_zod35.z.enum(["applescript", "jxa", "powershell"]),
3652
+ script: import_zod35.z.string().min(1).max(262144),
3653
+ timeout_s: import_zod35.z.int().min(1).max(600).default(60)
3654
+ });
3655
+ var AutomationScriptResult = import_zod35.z.strictObject({
3656
+ stdout: import_zod35.z.string(),
3657
+ stderr: import_zod35.z.string(),
3658
+ exit_code: import_zod35.z.int(),
3659
+ timed_out: import_zod35.z.boolean(),
3660
+ /** stdout or stderr was cut at 1 MiB. */
3661
+ truncated: import_zod35.z.boolean(),
3662
+ elapsed_ms: nonNegInt
3663
+ });
3664
+ var MailAccountsParams = import_zod35.z.strictObject({});
3665
+ var MailAccount = import_zod35.z.strictObject({ name: import_zod35.z.string(), emails: import_zod35.z.array(import_zod35.z.string()), enabled: import_zod35.z.boolean() });
3666
+ var MailAccountsResult = import_zod35.z.strictObject({ accounts: import_zod35.z.array(MailAccount) });
3667
+ var MailListParams = import_zod35.z.strictObject({
3668
+ /** The account's name in Mail; absent: every account. */
3669
+ account: import_zod35.z.string().min(1).max(256).optional(),
3670
+ /** The mailbox's name ("INBOX", "Sent Messages"). */
3671
+ mailbox: import_zod35.z.string().min(1).max(256).default("INBOX"),
3672
+ unread_only: import_zod35.z.boolean().default(false),
3673
+ limit: import_zod35.z.int().min(1).max(200).default(25)
3674
+ });
3675
+ var MailMessage = import_zod35.z.strictObject({
3676
+ id: import_zod35.z.string(),
3677
+ subject: import_zod35.z.string(),
3678
+ sender: import_zod35.z.string(),
3679
+ received_at_ms: epochMs.nullable(),
3680
+ read: import_zod35.z.boolean(),
3681
+ account: import_zod35.z.string(),
3682
+ mailbox: import_zod35.z.string(),
3683
+ /** The first lines of the message's text. */
3684
+ preview: import_zod35.z.string()
3685
+ });
3686
+ var MailListResult = import_zod35.z.strictObject({ messages: import_zod35.z.array(MailMessage) });
3687
+ var MailSendParams = import_zod35.z.strictObject({
3688
+ to: import_zod35.z.array(import_zod35.z.string().min(3).max(320)).min(1).max(50),
3689
+ cc: import_zod35.z.array(import_zod35.z.string().min(3).max(320)).max(50).default([]),
3690
+ subject: import_zod35.z.string().max(998),
3691
+ body: Text,
3692
+ /** The sending account's address; absent: Mail's default. */
3693
+ from: import_zod35.z.string().min(3).max(320).optional(),
3694
+ /** false leaves it open in Mail as a draft for the person to send. */
3695
+ send: import_zod35.z.boolean().default(true)
3696
+ });
3697
+ var MailSendResult = import_zod35.z.strictObject({ sent: import_zod35.z.boolean() });
3698
+ var MessagesChatsParams = import_zod35.z.strictObject({ limit: import_zod35.z.int().min(1).max(200).default(25) });
3699
+ var MessagesChat = import_zod35.z.strictObject({
3700
+ chat_id: import_zod35.z.string(),
3701
+ name: import_zod35.z.string().nullable(),
3702
+ participants: import_zod35.z.array(import_zod35.z.string()),
3703
+ last_message_at_ms: epochMs.nullable(),
3704
+ service: import_zod35.z.string().nullable()
3705
+ });
3706
+ var MessagesChatsResult = import_zod35.z.strictObject({ chats: import_zod35.z.array(MessagesChat) });
3707
+ var MessagesListParams = import_zod35.z.strictObject({
3708
+ /** One chat (messages.chats' chat_id); absent: the newest across all. */
3709
+ chat_id: import_zod35.z.string().min(1).max(512).optional(),
3710
+ limit: import_zod35.z.int().min(1).max(500).default(50)
3711
+ });
3712
+ var MessagesMessage = import_zod35.z.strictObject({
3713
+ id: import_zod35.z.string(),
3714
+ chat_id: import_zod35.z.string().nullable(),
3715
+ text: import_zod35.z.string(),
3716
+ from_me: import_zod35.z.boolean(),
3717
+ /** The other person's handle (phone or email); null for the person's own messages. */
3718
+ sender: import_zod35.z.string().nullable(),
3719
+ sent_at_ms: epochMs.nullable()
3720
+ });
3721
+ var MessagesListResult = import_zod35.z.strictObject({ messages: import_zod35.z.array(MessagesMessage) });
3722
+ var MessagesSendParams = import_zod35.z.strictObject({
3723
+ /** A phone number or email the person can message. */
3724
+ to: import_zod35.z.string().min(3).max(320),
3725
+ text: import_zod35.z.string().min(1).max(2e4)
3726
+ });
3727
+ var MessagesSendResult = import_zod35.z.strictObject({ sent: import_zod35.z.boolean() });
3728
+ var ContactsSearchParams = import_zod35.z.strictObject({
3729
+ /** Matched against names, organizations, emails and phone numbers. */
3730
+ query: import_zod35.z.string().min(1).max(256),
3731
+ limit: import_zod35.z.int().min(1).max(200).default(25)
3732
+ });
3733
+ var ContactLabeled = import_zod35.z.strictObject({ label: import_zod35.z.string().nullable(), value: import_zod35.z.string() });
3734
+ var ContactSummary = import_zod35.z.strictObject({
3735
+ id: import_zod35.z.string(),
3736
+ name: import_zod35.z.string(),
3737
+ organization: import_zod35.z.string().nullable(),
3738
+ emails: import_zod35.z.array(ContactLabeled),
3739
+ phones: import_zod35.z.array(ContactLabeled)
3740
+ });
3741
+ var ContactsSearchResult = import_zod35.z.strictObject({ contacts: import_zod35.z.array(ContactSummary) });
3742
+ var ContactsGetParams = import_zod35.z.strictObject({ id: import_zod35.z.string().min(1).max(256) });
3743
+ var ContactDetail = import_zod35.z.strictObject({
3744
+ id: import_zod35.z.string(),
3745
+ name: import_zod35.z.string(),
3746
+ organization: import_zod35.z.string().nullable(),
3747
+ job_title: import_zod35.z.string().nullable(),
3748
+ emails: import_zod35.z.array(ContactLabeled),
3749
+ phones: import_zod35.z.array(ContactLabeled),
3750
+ addresses: import_zod35.z.array(ContactLabeled),
3751
+ birthday: import_zod35.z.string().nullable(),
3752
+ note: import_zod35.z.string().nullable()
3753
+ });
3754
+ var ContactsGetResult = import_zod35.z.strictObject({ contact: ContactDetail });
3755
+ var CalendarListParams = import_zod35.z.strictObject({
3756
+ from_ms: epochMs,
3757
+ to_ms: epochMs,
3758
+ /** One calendar's name; absent: every calendar. */
3759
+ calendar: import_zod35.z.string().min(1).max(256).optional(),
3760
+ limit: import_zod35.z.int().min(1).max(500).default(100)
3761
+ });
3762
+ var CalendarEvent = import_zod35.z.strictObject({
3763
+ id: import_zod35.z.string(),
3764
+ title: import_zod35.z.string(),
3765
+ start_ms: epochMs,
3766
+ end_ms: epochMs,
3767
+ all_day: import_zod35.z.boolean(),
3768
+ calendar: import_zod35.z.string(),
3769
+ location: import_zod35.z.string().nullable(),
3770
+ notes: import_zod35.z.string().nullable()
3771
+ });
3772
+ var CalendarListResult = import_zod35.z.strictObject({ events: import_zod35.z.array(CalendarEvent) });
3773
+ var CalendarCreateParams = import_zod35.z.strictObject({
3774
+ title: import_zod35.z.string().min(1).max(1024),
3775
+ start_ms: epochMs,
3776
+ end_ms: epochMs,
3777
+ all_day: import_zod35.z.boolean().default(false),
3778
+ /** The calendar's name; absent: the first writable calendar. */
3779
+ calendar: import_zod35.z.string().min(1).max(256).optional(),
3780
+ location: import_zod35.z.string().max(1024).optional(),
3781
+ notes: Text.optional()
3782
+ });
3783
+ var CalendarCreateResult = import_zod35.z.strictObject({ id: import_zod35.z.string(), calendar: import_zod35.z.string() });
3784
+ var RemindersListParams = import_zod35.z.strictObject({
3785
+ /** One list's name; absent: every list. */
3786
+ list: import_zod35.z.string().min(1).max(256).optional(),
3787
+ include_completed: import_zod35.z.boolean().default(false),
3788
+ limit: import_zod35.z.int().min(1).max(500).default(100)
3789
+ });
3790
+ var Reminder = import_zod35.z.strictObject({
3791
+ id: import_zod35.z.string(),
3792
+ title: import_zod35.z.string(),
3793
+ list: import_zod35.z.string(),
3794
+ due_ms: epochMs.nullable(),
3795
+ completed: import_zod35.z.boolean(),
3796
+ notes: import_zod35.z.string().nullable()
3797
+ });
3798
+ var RemindersListResult = import_zod35.z.strictObject({ reminders: import_zod35.z.array(Reminder) });
3799
+ var RemindersCreateParams = import_zod35.z.strictObject({
3800
+ title: import_zod35.z.string().min(1).max(1024),
3801
+ due_ms: epochMs.optional(),
3802
+ list: import_zod35.z.string().min(1).max(256).optional(),
3803
+ notes: Text.optional()
3804
+ });
3805
+ var RemindersCreateResult = import_zod35.z.strictObject({ id: import_zod35.z.string(), list: import_zod35.z.string() });
3806
+ var PhotosSearchParams = import_zod35.z.strictObject({
3807
+ /** Matched against file names, titles, descriptions and keywords; absent: the newest. */
3808
+ query: import_zod35.z.string().min(1).max(256).optional(),
3809
+ from_ms: epochMs.optional(),
3810
+ to_ms: epochMs.optional(),
3811
+ favorites_only: import_zod35.z.boolean().default(false),
3812
+ limit: import_zod35.z.int().min(1).max(200).default(25)
3813
+ });
3814
+ var Photo = import_zod35.z.strictObject({
3815
+ id: import_zod35.z.string(),
3816
+ filename: import_zod35.z.string(),
3817
+ taken_at_ms: epochMs.nullable(),
3818
+ width: nonNegInt.nullable(),
3819
+ height: nonNegInt.nullable(),
3820
+ favorite: import_zod35.z.boolean(),
3821
+ title: import_zod35.z.string().nullable()
3822
+ });
3823
+ var PhotosSearchResult = import_zod35.z.strictObject({ photos: import_zod35.z.array(Photo) });
3824
+ var PhotosGetParams = import_zod35.z.strictObject({
3825
+ id: import_zod35.z.string().min(1).max(256),
3826
+ /** Copy the original into a folder Matrx 2 owns and answer its path (then fs_read or desktop_documents reads it). */
3827
+ export: import_zod35.z.boolean().default(false)
3828
+ });
3829
+ var PhotosGetResult = import_zod35.z.strictObject({ photo: Photo, path: import_zod35.z.string().nullable() });
3830
+ var LocationGetParams = import_zod35.z.strictObject({ timeout_s: import_zod35.z.int().min(1).max(60).default(15) });
3831
+ var LocationGetResult = import_zod35.z.strictObject({
3832
+ latitude: import_zod35.z.number().min(-90).max(90),
3833
+ longitude: import_zod35.z.number().min(-180).max(180),
3834
+ /** Metres; null where the OS does not say. */
3835
+ accuracy_m: import_zod35.z.number().min(0).nullable(),
3836
+ at_ms: epochMs,
3837
+ /** Who answered: the OS's own location service. */
3838
+ source: import_zod35.z.enum(["corelocation", "windows", "geoclue"])
3839
+ });
3840
+
3841
+ // src/schema/windows.ts
3842
+ var import_zod36 = require("zod");
3843
+ var RegistryKey = import_zod36.z.string().min(6).max(1024).regex(/^(HKLM|HKCU|HKCR|HKU|HKCC|HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER|HKEY_CLASSES_ROOT|HKEY_USERS|HKEY_CURRENT_CONFIG)(\\.*)?$/);
3844
+ var RegistryValueType = import_zod36.z.enum(["REG_SZ", "REG_EXPAND_SZ", "REG_MULTI_SZ", "REG_DWORD", "REG_QWORD", "REG_BINARY", "REG_NONE"]);
3845
+ var WindowsRegistryReadParams = import_zod36.z.strictObject({
3846
+ key: RegistryKey,
3847
+ /** One value's name ("" is the key's default value); absent: every value and the subkeys. */
3848
+ name: import_zod36.z.string().max(16383).optional()
3849
+ });
3850
+ var RegistryValue = import_zod36.z.strictObject({ name: import_zod36.z.string(), type: RegistryValueType, data: import_zod36.z.string() });
3851
+ var WindowsRegistryReadResult = import_zod36.z.strictObject({
3852
+ key: import_zod36.z.string(),
3853
+ exists: import_zod36.z.boolean(),
3854
+ values: import_zod36.z.array(RegistryValue),
3855
+ subkeys: import_zod36.z.array(import_zod36.z.string())
3856
+ });
3857
+ var WindowsRegistryWriteParams = import_zod36.z.strictObject({
3858
+ key: RegistryKey,
3859
+ name: import_zod36.z.string().max(16383),
3860
+ type: RegistryValueType.default("REG_SZ"),
3861
+ /** As reg.exe takes it: text, a number, hex for binary, \\0 between the strings of a multi-string. */
3862
+ data: import_zod36.z.string().max(1048576),
3863
+ /** Remove the value instead of writing it. */
3864
+ delete: import_zod36.z.boolean().default(false)
3865
+ });
3866
+ var WindowsRegistryWriteResult = import_zod36.z.strictObject({ key: import_zod36.z.string(), name: import_zod36.z.string(), deleted: import_zod36.z.boolean() });
3867
+ var WindowsServicesParams = import_zod36.z.strictObject({
3868
+ /** Matched against the service's name and display name. */
3869
+ filter: import_zod36.z.string().min(1).max(256).optional(),
3870
+ limit: import_zod36.z.int().min(1).max(1e3).default(200)
3871
+ });
3872
+ var WindowsService = import_zod36.z.strictObject({
3873
+ name: import_zod36.z.string(),
3874
+ display_name: import_zod36.z.string(),
3875
+ /** Running, Stopped, Paused… as Windows says it. */
3876
+ status: import_zod36.z.string(),
3877
+ /** Automatic, Manual, Disabled…; null where Windows does not say. */
3878
+ start_type: import_zod36.z.string().nullable()
3879
+ });
3880
+ var WindowsServicesResult = import_zod36.z.strictObject({ services: import_zod36.z.array(WindowsService) });
3881
+ var WindowsServiceControlParams = import_zod36.z.strictObject({
3882
+ name: import_zod36.z.string().min(1).max(256),
3883
+ action: import_zod36.z.enum(["start", "stop", "restart"])
3884
+ });
3885
+ var WindowsServiceControlResult = import_zod36.z.strictObject({ name: import_zod36.z.string(), status: import_zod36.z.string() });
3886
+ var WindowsEventLogParams = import_zod36.z.strictObject({
3887
+ log: import_zod36.z.string().min(1).max(256).default("System"),
3888
+ /** Only these levels; absent: all. */
3889
+ levels: import_zod36.z.array(import_zod36.z.enum(["critical", "error", "warning", "information", "verbose"])).max(5).optional(),
3890
+ since_ms: epochMs.optional(),
3891
+ limit: import_zod36.z.int().min(1).max(500).default(50)
3892
+ });
3893
+ var WindowsEvent = import_zod36.z.strictObject({
3894
+ id: import_zod36.z.int(),
3895
+ level: import_zod36.z.string(),
3896
+ source: import_zod36.z.string(),
3897
+ at_ms: epochMs,
3898
+ message: import_zod36.z.string()
3899
+ });
3900
+ var WindowsEventLogResult = import_zod36.z.strictObject({ log: import_zod36.z.string(), events: import_zod36.z.array(WindowsEvent) });
3901
+ var WindowsFeaturesParams = import_zod36.z.strictObject({ filter: import_zod36.z.string().min(1).max(256).optional() });
3902
+ var WindowsFeature = import_zod36.z.strictObject({ name: import_zod36.z.string(), state: import_zod36.z.string() });
3903
+ var WindowsFeaturesResult = import_zod36.z.strictObject({ features: import_zod36.z.array(WindowsFeature) });
3904
+
3905
+ // src/schema/schedule.ts
3906
+ var import_zod37 = require("zod");
3907
+ var OpRef = import_zod37.z.string().min(3).max(128).regex(/^[a-z_]+(\.[a-z_]+)+$/);
3908
+ var ScheduleCreateParams = import_zod37.z.strictObject({
3909
+ name: import_zod37.z.string().min(1).max(200),
3910
+ op: OpRef,
3911
+ /** The op's params, exactly as the op takes them; checked when the task is created. */
3912
+ params: import_zod37.z.record(import_zod37.z.string(), import_zod37.z.unknown()).default({}),
3913
+ interval_s: import_zod37.z.int().min(10).max(2592e3),
3914
+ /** Stop after this many runs; absent: until cancelled. */
3915
+ max_runs: import_zod37.z.int().min(1).max(1e5).optional(),
3916
+ /** Run once now, before the first interval. */
3917
+ run_now: import_zod37.z.boolean().default(false)
3918
+ });
3919
+ var ScheduleRun = import_zod37.z.strictObject({
3920
+ at_ms: epochMs,
3921
+ ok: import_zod37.z.boolean(),
3922
+ elapsed_ms: nonNegInt,
3923
+ /** The error's code and message when the run failed. */
3924
+ error: import_zod37.z.string().nullable(),
3925
+ /** The start of the answer, as JSON (cut at 4 KiB). */
3926
+ result_preview: import_zod37.z.string().nullable()
3927
+ });
3928
+ var ScheduledTask = import_zod37.z.strictObject({
3929
+ id: import_zod37.z.string(),
3930
+ name: import_zod37.z.string(),
3931
+ op: import_zod37.z.string(),
3932
+ params: import_zod37.z.record(import_zod37.z.string(), import_zod37.z.unknown()),
3933
+ interval_s: nonNegInt,
3934
+ max_runs: nonNegInt.nullable(),
3935
+ runs: nonNegInt,
3936
+ created_at_ms: epochMs,
3937
+ next_run_at_ms: epochMs.nullable(),
3938
+ /** active, done (ran max_runs), cancelled. */
3939
+ state: import_zod37.z.enum(["active", "done", "cancelled"]),
3940
+ /** The newest runs, newest first (at most 10). */
3941
+ recent: import_zod37.z.array(ScheduleRun)
3942
+ });
3943
+ var ScheduleCreateResult = import_zod37.z.strictObject({ task: ScheduledTask });
3944
+ var ScheduleListParams = import_zod37.z.strictObject({ include_finished: import_zod37.z.boolean().default(false) });
3945
+ var ScheduleListResult = import_zod37.z.strictObject({ tasks: import_zod37.z.array(ScheduledTask) });
3946
+ var ScheduleCancelParams = import_zod37.z.strictObject({ id: import_zod37.z.string().min(1).max(64) });
3947
+ var ScheduleCancelResult = import_zod37.z.strictObject({ task: ScheduledTask });
3948
+
3949
+ // src/schema/notes.ts
3950
+ var import_zod38 = require("zod");
3951
+ var NoteFolder = import_zod38.z.string().min(1).max(512).regex(/^[^/\\:*?"<>|][^\\:*?"<>|]*$/);
3952
+ var NotePath = import_zod38.z.string().min(4).max(1024).regex(/^[^/\\:*?"<>|][^\\:*?"<>|]*\.md$/);
3953
+ var NotesFoldersParams = import_zod38.z.strictObject({});
3954
+ var NotesFolder = import_zod38.z.strictObject({ folder: import_zod38.z.string(), notes: nonNegInt });
3955
+ var NotesFoldersResult = import_zod38.z.strictObject({
3956
+ /** The notes root on this computer. */
3957
+ root: import_zod38.z.string(),
3958
+ folders: import_zod38.z.array(NotesFolder)
3959
+ });
3960
+ var NotesListParams = import_zod38.z.strictObject({
3961
+ folder: NoteFolder.optional(),
3962
+ limit: import_zod38.z.int().min(1).max(2e3).default(500)
3963
+ });
3964
+ var NoteEntry = import_zod38.z.strictObject({
3965
+ path: import_zod38.z.string(),
3966
+ label: import_zod38.z.string(),
3967
+ folder: import_zod38.z.string(),
3968
+ bytes: nonNegInt,
3969
+ modified_at_ms: epochMs
3970
+ });
3971
+ var NotesListResult = import_zod38.z.strictObject({ root: import_zod38.z.string(), notes: import_zod38.z.array(NoteEntry), total: nonNegInt });
3972
+ var NotesReadParams = import_zod38.z.strictObject({ path: NotePath });
3973
+ var NotesReadResult = import_zod38.z.strictObject({
3974
+ path: import_zod38.z.string(),
3975
+ content: import_zod38.z.string(),
3976
+ bytes: nonNegInt,
3977
+ modified_at_ms: epochMs,
3978
+ /** SHA-256 of the content: pass it back as `if_hash` to write only over this version. */
3979
+ hash: import_zod38.z.string()
3980
+ });
3981
+ var NotesWriteParams = import_zod38.z.strictObject({
3982
+ folder: NoteFolder.default("General"),
3983
+ /** The note's name, without ".md". */
3984
+ label: import_zod38.z.string().min(1).max(200).regex(/^[^/\\:*?"<>|]+$/),
3985
+ content: import_zod38.z.string().max(10485760),
3986
+ /** Write only when the note is still this version (notes.read's hash); a change since answers CONFLICT. */
3987
+ if_hash: import_zod38.z.string().length(64).optional()
3988
+ });
3989
+ var NotesWriteResult = import_zod38.z.strictObject({ path: import_zod38.z.string(), bytes: nonNegInt, created: import_zod38.z.boolean(), hash: import_zod38.z.string() });
3990
+ var NotesSearchParams = import_zod38.z.strictObject({
3991
+ query: import_zod38.z.string().min(1).max(512),
3992
+ limit: import_zod38.z.int().min(1).max(200).default(50)
3993
+ });
3994
+ var NotesMatch = import_zod38.z.strictObject({
3995
+ path: import_zod38.z.string(),
3996
+ label: import_zod38.z.string(),
3997
+ folder: import_zod38.z.string(),
3998
+ /** The matching lines (at most five), trimmed. */
3999
+ lines: import_zod38.z.array(import_zod38.z.string())
4000
+ });
4001
+ var NotesSearchResult = import_zod38.z.strictObject({ matches: import_zod38.z.array(NotesMatch), total: nonNegInt });
4002
+
4003
+ // src/schema/documents.ts
4004
+ var import_zod39 = require("zod");
4005
+ var DOCUMENTS_MAX_TEXT_CHARS = 1048576;
4006
+ var DocumentsPdfTextParams = import_zod39.z.strictObject({
4007
+ path: AbsPath,
4008
+ /** 1-based, inclusive. */
4009
+ first_page: import_zod39.z.int().min(1).optional(),
4010
+ last_page: import_zod39.z.int().min(1).optional(),
4011
+ max_chars: import_zod39.z.int().min(1).max(DOCUMENTS_MAX_TEXT_CHARS).default(2e5)
4012
+ });
4013
+ var DocumentsPdfPage = import_zod39.z.strictObject({ page: import_zod39.z.int().min(1), text: import_zod39.z.string() });
4014
+ var DocumentsPdfTextResult = import_zod39.z.strictObject({
4015
+ pages: nonNegInt,
4016
+ /** Each page read, in order (an image-only page has empty text: OCR it). */
4017
+ read: import_zod39.z.array(DocumentsPdfPage),
4018
+ truncated: import_zod39.z.boolean(),
4019
+ title: import_zod39.z.string().nullable(),
4020
+ author: import_zod39.z.string().nullable()
4021
+ });
4022
+ var DocumentsOcrParams = import_zod39.z.strictObject({
4023
+ path: AbsPath,
4024
+ /** BCP-47 language hints ("en-US", "fr-FR"); absent: the OS's own choice. */
4025
+ languages: import_zod39.z.array(import_zod39.z.string().min(2).max(16)).max(8).optional(),
4026
+ /** Faster, less accurate. */
4027
+ fast: import_zod39.z.boolean().default(false)
4028
+ });
4029
+ var DocumentsOcrLine = import_zod39.z.strictObject({
4030
+ text: import_zod39.z.string(),
4031
+ /** 0–1; null where the engine does not say. */
4032
+ confidence: import_zod39.z.number().min(0).max(1).nullable()
4033
+ });
4034
+ var DocumentsOcrResult = import_zod39.z.strictObject({
4035
+ text: import_zod39.z.string(),
4036
+ lines: import_zod39.z.array(DocumentsOcrLine),
4037
+ truncated: import_zod39.z.boolean(),
4038
+ /** Which engine read it ("vision" on macOS, "windows-ocr", "tesseract"). */
4039
+ engine: import_zod39.z.string()
4040
+ });
4041
+ var DocumentsImageResizeParams = import_zod39.z.strictObject({
4042
+ path: AbsPath,
4043
+ /** Where to write it; absent: next to the original, "<name>-resized.<ext>". */
4044
+ out_path: AbsPath.optional(),
4045
+ /** The longest side, kept in proportion; absent: the size stays (a format change only). */
4046
+ max_size: import_zod39.z.int().min(1).max(32768).optional(),
4047
+ format: import_zod39.z.enum(["png", "jpeg", "tiff", "heic", "bmp", "gif"]).optional(),
4048
+ overwrite: import_zod39.z.boolean().default(false)
4049
+ });
4050
+ var DocumentsImageResizeResult = import_zod39.z.strictObject({
4051
+ path: import_zod39.z.string(),
4052
+ width: nonNegInt,
4053
+ height: nonNegInt,
4054
+ bytes: nonNegInt
4055
+ });
4056
+ var DocumentsParagraph = import_zod39.z.strictObject({
4057
+ style: import_zod39.z.enum(["title", "heading1", "heading2", "heading3", "body", "bullet", "numbered", "quote", "code"]).default("body"),
4058
+ text: import_zod39.z.string().max(1e5)
4059
+ });
4060
+ var DocumentsSheet = import_zod39.z.strictObject({
4061
+ name: import_zod39.z.string().min(1).max(31),
4062
+ /** Rows of cells; the first row is the header when `header` is true. */
4063
+ rows: import_zod39.z.array(import_zod39.z.array(import_zod39.z.union([import_zod39.z.string().max(32767), import_zod39.z.number(), import_zod39.z.boolean(), import_zod39.z.null()])).max(16384)).max(1e5),
4064
+ header: import_zod39.z.boolean().default(true)
4065
+ });
4066
+ var DocumentsOfficeGenerateParams = import_zod39.z.strictObject({
4067
+ kind: import_zod39.z.enum(["docx", "xlsx"]),
4068
+ path: AbsPath,
4069
+ title: import_zod39.z.string().max(1024).optional(),
4070
+ /** docx: the document's paragraphs, in order. */
4071
+ paragraphs: import_zod39.z.array(DocumentsParagraph).max(5e4).optional(),
4072
+ /** xlsx: the workbook's sheets, in order. */
4073
+ sheets: import_zod39.z.array(DocumentsSheet).min(1).max(64).optional(),
4074
+ overwrite: import_zod39.z.boolean().default(false)
4075
+ });
4076
+ var DocumentsOfficeGenerateResult = import_zod39.z.strictObject({ path: import_zod39.z.string(), bytes: nonNegInt });
4077
+ var EntitiesNerParams = import_zod39.z.strictObject({
4078
+ text: import_zod39.z.string().min(1).max(DOCUMENTS_MAX_TEXT_CHARS),
4079
+ /** Which kinds to keep; absent: all three. */
4080
+ labels: import_zod39.z.array(import_zod39.z.enum(["person", "place", "organization"])).min(1).max(3).optional()
4081
+ });
4082
+ var EntitySpan = import_zod39.z.strictObject({
4083
+ text: import_zod39.z.string(),
4084
+ label: import_zod39.z.string(),
4085
+ /** Character offsets into the text (UTF-16, as JavaScript counts). */
4086
+ start: nonNegInt,
4087
+ end: nonNegInt
4088
+ });
4089
+ var EntitiesNerResult = import_zod39.z.strictObject({ entities: import_zod39.z.array(EntitySpan), engine: import_zod39.z.string() });
4090
+ var PiiKind = import_zod39.z.enum(["email", "phone", "credit_card", "us_ssn", "iban", "ip_address", "url", "api_key"]);
4091
+ var EntitiesPiiParams = import_zod39.z.strictObject({
4092
+ text: import_zod39.z.string().min(1).max(DOCUMENTS_MAX_TEXT_CHARS),
4093
+ kinds: import_zod39.z.array(PiiKind).min(1).max(8).optional(),
4094
+ /** Also answer the text with each finding replaced by its kind ("[email]"). */
4095
+ redact: import_zod39.z.boolean().default(false)
4096
+ });
4097
+ var EntitiesPiiResult = import_zod39.z.strictObject({
4098
+ findings: import_zod39.z.array(import_zod39.z.strictObject({ kind: PiiKind, text: import_zod39.z.string(), start: nonNegInt, end: nonNegInt })),
4099
+ redacted: import_zod39.z.string().nullable()
4100
+ });
4101
+
3362
4102
  // src/schema/registry.ts
3363
4103
  var FS_ERR = ["NOT_FOUND", "PERMISSION_DENIED_OS", "INVALID_PARAMS", "RESOURCE_BUSY", "INTERNAL"];
3364
4104
  var OPS = {
@@ -3523,7 +4263,55 @@ var OPS = {
3523
4263
  "browser.set_enabled": { params: BrowserSetEnabledParams, result: BrowserSetEnabledResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
3524
4264
  "browser.pair_code": { params: BrowserPairCodeParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
3525
4265
  "browser.pair_reset": { params: BrowserPairResetParams, result: BrowserPairCodeResult, kind: "unary", since: "1.28", errors: ["AUTH_FORBIDDEN", "INTERNAL"] },
3526
- "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"] }
4266
+ "browser.tool_metrics": { params: BrowserToolMetricsParams, result: BrowserToolMetricsResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS"] },
4267
+ "browser.reset_counters": { params: BrowserResetCountersParams, result: BrowserResetCountersResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS"] },
4268
+ "browser.log": { params: BrowserLogParams, result: BrowserLogResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS"] },
4269
+ "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"] },
4270
+ // 1.37: Matrx Local's remaining sidecar tools in the core (net, automation, the person's apps,
4271
+ // Windows administration, schedules, local notes, documents and entities).
4272
+ "net.info": { params: NetInfoParams, result: NetInfoResult, kind: "unary", since: "1.37", errors: ["PLATFORM_UNSUPPORTED", "INTERNAL"] },
4273
+ "net.wifi": { params: NetWifiParams, result: NetWifiResult, kind: "unary", since: "1.37", errors: ["PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4274
+ "net.bluetooth": { params: NetBluetoothParams, result: NetBluetoothResult, kind: "unary", since: "1.37", errors: ["PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4275
+ "net.devices": { params: NetDevicesParams, result: NetDevicesResult, kind: "unary", since: "1.37", errors: ["PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4276
+ "net.mdns": { params: NetMdnsParams, result: NetMdnsResult, kind: "unary", since: "1.37", errors: ["PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4277
+ "net.scan": { params: NetScanParams, result: NetScanResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "AUTH_FORBIDDEN", "TIMEOUT", "INTERNAL"] },
4278
+ "net.download": { params: NetDownloadParams, result: NetDownloadResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "CONFLICT", "PERMISSION_DENIED_OS", "PAYLOAD_TOO_LARGE", "TIMEOUT", "INTERNAL"] },
4279
+ "automation.script": { params: AutomationScriptParams, result: AutomationScriptResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4280
+ "mail.accounts": { params: MailAccountsParams, result: MailAccountsResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4281
+ "mail.list": { params: MailListParams, result: MailListResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4282
+ "mail.send": { params: MailSendParams, result: MailSendResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4283
+ "messages.chats": { params: MessagesChatsParams, result: MessagesChatsResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4284
+ "messages.list": { params: MessagesListParams, result: MessagesListResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4285
+ "messages.send": { params: MessagesSendParams, result: MessagesSendResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4286
+ "contacts.search": { params: ContactsSearchParams, result: ContactsSearchResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4287
+ "contacts.get": { params: ContactsGetParams, result: ContactsGetResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4288
+ "calendar.list": { params: CalendarListParams, result: CalendarListResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4289
+ "calendar.create": { params: CalendarCreateParams, result: CalendarCreateResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4290
+ "reminders.list": { params: RemindersListParams, result: RemindersListResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4291
+ "reminders.create": { params: RemindersCreateParams, result: RemindersCreateResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4292
+ "photos.search": { params: PhotosSearchParams, result: PhotosSearchResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4293
+ "photos.get": { params: PhotosGetParams, result: PhotosGetResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4294
+ "location.get": { params: LocationGetParams, result: LocationGetResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4295
+ "windows.registry_read": { params: WindowsRegistryReadParams, result: WindowsRegistryReadResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4296
+ "windows.registry_write": { params: WindowsRegistryWriteParams, result: WindowsRegistryWriteResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4297
+ "windows.services": { params: WindowsServicesParams, result: WindowsServicesResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4298
+ "windows.service_control": { params: WindowsServiceControlParams, result: WindowsServiceControlResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4299
+ "windows.event_log": { params: WindowsEventLogParams, result: WindowsEventLogResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4300
+ "windows.features": { params: WindowsFeaturesParams, result: WindowsFeaturesResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4301
+ "schedule.create": { params: ScheduleCreateParams, result: ScheduleCreateResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "INTERNAL"] },
4302
+ "schedule.list": { params: ScheduleListParams, result: ScheduleListResult, kind: "unary", since: "1.37", errors: ["INTERNAL"] },
4303
+ "schedule.cancel": { params: ScheduleCancelParams, result: ScheduleCancelResult, kind: "unary", since: "1.37", errors: ["NOT_FOUND", "INTERNAL"] },
4304
+ "notes.folders": { params: NotesFoldersParams, result: NotesFoldersResult, kind: "unary", since: "1.37", errors: ["INTERNAL"] },
4305
+ "notes.list": { params: NotesListParams, result: NotesListResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "INTERNAL"] },
4306
+ "notes.read": { params: NotesReadParams, result: NotesReadResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "INTERNAL"] },
4307
+ "notes.write": { params: NotesWriteParams, result: NotesWriteResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "CONFLICT", "PERMISSION_DENIED_OS", "INTERNAL"] },
4308
+ "notes.search": { params: NotesSearchParams, result: NotesSearchResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "INTERNAL"] },
4309
+ "documents.pdf_text": { params: DocumentsPdfTextParams, result: DocumentsPdfTextResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4310
+ "documents.ocr": { params: DocumentsOcrParams, result: DocumentsOcrResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4311
+ "documents.image_resize": { params: DocumentsImageResizeParams, result: DocumentsImageResizeResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4312
+ "documents.office_generate": { params: DocumentsOfficeGenerateParams, result: DocumentsOfficeGenerateResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "NOT_FOUND", "CONFLICT", "PERMISSION_DENIED_OS", "INTERNAL"] },
4313
+ "entities.ner": { params: EntitiesNerParams, result: EntitiesNerResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
4314
+ "entities.pii": { params: EntitiesPiiParams, result: EntitiesPiiResult, kind: "unary", since: "1.37", errors: ["INVALID_PARAMS", "INTERNAL"] }
3527
4315
  };
3528
4316
  var EVENTS = {
3529
4317
  "fs.changed": FsChangedEvent,
@@ -4052,7 +4840,133 @@ var NAMED_SCHEMAS = {
4052
4840
  BrowserProgressEvent,
4053
4841
  DesktopHealth,
4054
4842
  BrowserPairRequest,
4055
- BrowserPairResult
4843
+ BrowserPairResult,
4844
+ BrowserToolMetricsParams,
4845
+ BrowserToolMetric,
4846
+ BrowserToolMetricsResult,
4847
+ BrowserResetCountersParams,
4848
+ BrowserResetCountersResult,
4849
+ BrowserLogParams,
4850
+ BrowserLogMessage,
4851
+ BrowserLogResult,
4852
+ NetInfoParams,
4853
+ NetAddress,
4854
+ NetInterface,
4855
+ NetInfoResult,
4856
+ NetWifiParams,
4857
+ NetWifiNetwork,
4858
+ NetWifiResult,
4859
+ NetBluetoothParams,
4860
+ NetBluetoothDevice,
4861
+ NetBluetoothResult,
4862
+ NetDevicesParams,
4863
+ NetDevice,
4864
+ NetDevicesResult,
4865
+ NetMdnsParams,
4866
+ NetMdnsService,
4867
+ NetMdnsResult,
4868
+ NetScanParams,
4869
+ NetScanResult,
4870
+ NetDownloadParams,
4871
+ NetDownloadResult,
4872
+ AutomationScriptParams,
4873
+ AutomationScriptResult,
4874
+ MailAccountsParams,
4875
+ MailAccount,
4876
+ MailAccountsResult,
4877
+ MailListParams,
4878
+ MailMessage,
4879
+ MailListResult,
4880
+ MailSendParams,
4881
+ MailSendResult,
4882
+ MessagesChatsParams,
4883
+ MessagesChat,
4884
+ MessagesChatsResult,
4885
+ MessagesListParams,
4886
+ MessagesMessage,
4887
+ MessagesListResult,
4888
+ MessagesSendParams,
4889
+ MessagesSendResult,
4890
+ ContactsSearchParams,
4891
+ ContactLabeled,
4892
+ ContactSummary,
4893
+ ContactsSearchResult,
4894
+ ContactsGetParams,
4895
+ ContactDetail,
4896
+ ContactsGetResult,
4897
+ CalendarListParams,
4898
+ CalendarEvent,
4899
+ CalendarListResult,
4900
+ CalendarCreateParams,
4901
+ CalendarCreateResult,
4902
+ RemindersListParams,
4903
+ Reminder,
4904
+ RemindersListResult,
4905
+ RemindersCreateParams,
4906
+ RemindersCreateResult,
4907
+ PhotosSearchParams,
4908
+ Photo,
4909
+ PhotosSearchResult,
4910
+ PhotosGetParams,
4911
+ PhotosGetResult,
4912
+ LocationGetParams,
4913
+ LocationGetResult,
4914
+ RegistryValueType,
4915
+ WindowsRegistryReadParams,
4916
+ RegistryValue,
4917
+ WindowsRegistryReadResult,
4918
+ WindowsRegistryWriteParams,
4919
+ WindowsRegistryWriteResult,
4920
+ WindowsServicesParams,
4921
+ WindowsService,
4922
+ WindowsServicesResult,
4923
+ WindowsServiceControlParams,
4924
+ WindowsServiceControlResult,
4925
+ WindowsEventLogParams,
4926
+ WindowsEvent,
4927
+ WindowsEventLogResult,
4928
+ WindowsFeaturesParams,
4929
+ WindowsFeature,
4930
+ WindowsFeaturesResult,
4931
+ ScheduleCreateParams,
4932
+ ScheduleRun,
4933
+ ScheduledTask,
4934
+ ScheduleCreateResult,
4935
+ ScheduleListParams,
4936
+ ScheduleListResult,
4937
+ ScheduleCancelParams,
4938
+ ScheduleCancelResult,
4939
+ NotesFoldersParams,
4940
+ NotesFolder,
4941
+ NotesFoldersResult,
4942
+ NotesListParams,
4943
+ NoteEntry,
4944
+ NotesListResult,
4945
+ NotesReadParams,
4946
+ NotesReadResult,
4947
+ NotesWriteParams,
4948
+ NotesWriteResult,
4949
+ NotesSearchParams,
4950
+ NotesMatch,
4951
+ NotesSearchResult,
4952
+ DocumentsPdfTextParams,
4953
+ DocumentsPdfPage,
4954
+ DocumentsPdfTextResult,
4955
+ DocumentsOcrParams,
4956
+ DocumentsOcrLine,
4957
+ DocumentsOcrResult,
4958
+ DocumentsImageResizeParams,
4959
+ DocumentsImageResizeResult,
4960
+ DocumentsParagraph,
4961
+ DocumentsSheet,
4962
+ DocumentsOfficeGenerateParams,
4963
+ DocumentsOfficeGenerateResult,
4964
+ EntitiesNerParams,
4965
+ EntitySpan,
4966
+ EntitiesNerResult,
4967
+ PiiKind,
4968
+ EntitiesPiiParams,
4969
+ EntitiesPiiResult
4056
4970
  };
4057
4971
 
4058
4972
  // src/versioning.ts
@@ -4074,7 +4988,7 @@ var FIELDS_SINCE = {
4074
4988
  PowerStatusResult: { energy: "1.24" },
4075
4989
  AppsSpendResult: { days: "1.24" },
4076
4990
  AppsWindowsUpdateStateResult: { closed_by_update: "1.27" },
4077
- AppsProjectsToWindowParams: { pin: "1.32" },
4991
+ AppsProjectsToWindowParams: { pin: "1.32", chat_ids: "1.36", take_off_from: "1.36" },
4078
4992
  AppsProjectsToWindowResult: { pin: "1.32" },
4079
4993
  AppsChatsTitlesCheckResult: { stale_windows: "1.33" }
4080
4994
  };
@@ -4093,7 +5007,8 @@ var REASONS_SINCE = {
4093
5007
  browser_ambiguous: "1.28",
4094
5008
  browser_account_mismatch: "1.28",
4095
5009
  browser_connection_off: "1.28",
4096
- awaiting_confirmation: "1.28"
5010
+ awaiting_confirmation: "1.28",
5011
+ tool_disabled_on_device: "1.34"
4097
5012
  };
4098
5013
  function statusForPeer(status, version) {
4099
5014
  const rule = NULL_SINCE["RelayDeviceStatusEvent.since_ms"];
@@ -4212,7 +5127,7 @@ function forPeer(op, part, value, version) {
4212
5127
  var VERSIONED_RESULT_OPS = [.../* @__PURE__ */ new Set([...RESULT_PATH.keys(), ...WINDOW_RESULTS.keys(), ...NESTED_RESULTS.keys()])];
4213
5128
 
4214
5129
  // src/contract.ts
4215
- var CONTRACT_SHA256 = "04a029fc56c9405f376906fc981659997f4617c98bd0b88bb052d1f6d587a7a2";
5130
+ var CONTRACT_SHA256 = "1091ef68a5cb45a35a85998fc34560b4ddc035fe67d2d34594e935e92a2081dd";
4216
5131
 
4217
5132
  // src/close-policy.ts
4218
5133
  var CLOSE_RULES = {
@@ -4276,25 +5191,27 @@ var TOOL_CATALOG = [
4276
5191
  { name: "desktop_power", group: "os_control", state: "built", path: "device_op", ops: ["power.status", "power.history", "power.prevent_sleep"], platforms: ALL, summary: "Battery and keep awake" },
4277
5192
  { name: "desktop_resources", group: "os_control", state: "built", path: "device_op", ops: ["resources.snapshot", "resources.activity", "resources.stop_job", "resources.incidents"], platforms: ALL, summary: "CPU, memory and disk use; what is using them, grouped into jobs; stop a job; the slowdown log" },
4278
5193
  { name: "fs_watch", group: "os_control", state: "built", path: "device_op", ops: ["fs.watch.start", "fs.watch.events", "fs.watch.stop"], platforms: ALL, summary: "Watch a folder; read what changed" },
4279
- // ── 3. Personal apps and automation ──────────────────────────────────────────────────────────
4280
- { name: "desktop_automation", group: "personal_automation", state: "planned", path: "device_op", ops: ["automation.script"], platforms: ["darwin", "win32"], summary: "AppleScript on a Mac, PowerShell on Windows" },
4281
- { name: "desktop_mail", group: "personal_automation", state: "planned", path: "device_op", ops: ["mail.accounts", "mail.list", "mail.send"], platforms: ["darwin"], summary: "The Mail app" },
4282
- { name: "desktop_messages", group: "personal_automation", state: "planned", path: "device_op", ops: ["messages.conversations", "messages.list", "messages.send"], platforms: ["darwin"], summary: "The Messages app" },
4283
- { name: "desktop_contacts", group: "personal_automation", state: "planned", path: "device_op", ops: ["contacts.search", "contacts.get"], platforms: ["darwin"], summary: "Contacts" },
4284
- { name: "desktop_calendar", group: "personal_automation", state: "planned", path: "device_op", ops: ["calendar.list", "calendar.create", "reminders.list", "reminders.create"], platforms: ["darwin"], summary: "Calendar and reminders" },
4285
- { name: "desktop_photos", group: "personal_automation", state: "planned", path: "device_op", ops: ["photos.search", "photos.get"], platforms: ["darwin"], summary: "Photos library" },
4286
- { name: "desktop_location", group: "personal_automation", state: "planned", path: "device_op", ops: ["location.get"], platforms: ["darwin", "win32"], summary: "Where the computer is" },
4287
- { name: "desktop_net", group: "personal_automation", state: "planned", path: "device_op", ops: ["net.info", "net.wifi", "net.bluetooth", "net.devices", "net.mdns", "net.scan", "net.download"], platforms: ALL, summary: "Local network and downloads" },
4288
- // ── 4. Python `tools` service ────────────────────────────────────────────────────────────────
4289
- { name: "desktop_documents", group: "tools_service", state: "planned", path: "device_op", ops: ["tools.pdf_extract", "tools.office_generate", "tools.ocr", "tools.image_resize"], platforms: ALL, summary: "PDF text, Office files, OCR, images" },
5194
+ // ── 3. Personal apps and automation (1.37: the core's `automation`, `personal`, `net` and `schedule` owners) ──
5195
+ { name: "desktop_automation", group: "personal_automation", state: "built", path: "device_op", ops: ["automation.script"], platforms: ["darwin", "win32"], summary: "AppleScript or JavaScript for Automation on a Mac, PowerShell on Windows" },
5196
+ { name: "desktop_mail", group: "personal_automation", state: "built", path: "device_op", ops: ["mail.accounts", "mail.list", "mail.send"], platforms: ["darwin"], summary: "The Mail app: accounts, messages, send" },
5197
+ { name: "desktop_messages", group: "personal_automation", state: "built", path: "device_op", ops: ["messages.chats", "messages.list", "messages.send"], platforms: ["darwin"], summary: "The Messages app: chats, messages, send" },
5198
+ { name: "desktop_contacts", group: "personal_automation", state: "built", path: "device_op", ops: ["contacts.search", "contacts.get"], platforms: ["darwin"], summary: "Contacts: search, one card" },
5199
+ { name: "desktop_calendar", group: "personal_automation", state: "built", path: "device_op", ops: ["calendar.list", "calendar.create", "reminders.list", "reminders.create"], platforms: ["darwin"], summary: "Calendar and Reminders: list and add" },
5200
+ { name: "desktop_photos", group: "personal_automation", state: "built", path: "device_op", ops: ["photos.search", "photos.get"], platforms: ["darwin"], summary: "The Photos library: find, export an original" },
5201
+ { name: "desktop_location", group: "personal_automation", state: "built", path: "device_op", ops: ["location.get"], platforms: ["darwin", "win32"], summary: "Where the computer is (the OS's location service)" },
5202
+ { name: "desktop_net", group: "personal_automation", state: "built", path: "device_op", ops: ["net.info", "net.wifi", "net.bluetooth", "net.devices", "net.mdns", "net.scan", "net.download"], platforms: ALL, summary: "Local network, Wi-Fi, Bluetooth, open ports and downloads" },
5203
+ { name: "desktop_schedule", group: "personal_automation", state: "built", path: "device_op", ops: ["schedule.create", "schedule.list", "schedule.cancel"], platforms: ALL, summary: "Run a tool's op on this computer on an interval; list and cancel" },
5204
+ // ── 4. Documents, notes and entities (1.37: the core's `documents` and `notes` owners; desktop_web is the `tools` service) ──
5205
+ { name: "desktop_documents", group: "tools_service", state: "built", path: "device_op", ops: ["documents.pdf_text", "documents.ocr", "documents.image_resize", "documents.office_generate"], platforms: ALL, summary: "PDF text, OCR, images, Word and Excel files" },
4290
5206
  { name: "desktop_web", group: "tools_service", state: "built", path: "device_op", ops: ["web.fetch", "web.scrape", "web.search", "web.fetch_with_browser"], platforms: ALL, summary: "Fetch, scrape and search the web from this computer's own connection" },
4291
- { name: "desktop_entities", group: "tools_service", state: "planned", path: "device_op", ops: ["tools.ner", "tools.pii"], platforms: ALL, summary: "Names and private data, found on the device" },
5207
+ { name: "desktop_entities", group: "tools_service", state: "built", path: "device_op", ops: ["entities.ner", "entities.pii"], platforms: ALL, summary: "Names, places, organizations and private data, found on the device" },
5208
+ { name: "desktop_notes", group: "files_shell", state: "built", path: "device_op", ops: ["notes.folders", "notes.list", "notes.read", "notes.write", "notes.search"], platforms: ALL, summary: "The person's local notes (Documents/Matrx/Notes): list, read, write, search" },
4292
5209
  // ── 5. Python `ml` service ───────────────────────────────────────────────────────────────────
4293
5210
  // Built: models.transcribe through local_proxy's POST /op/{cap.op} (matrx-ai implementations/desktop.py).
4294
5211
  // Whisper detects the language itself, so matrx-local's speech_locales needs no op of its own.
4295
5212
  { name: "desktop_transcribe", group: "ml_service", state: "built", path: "device_op", ops: ["models.transcribe"], platforms: ALL, summary: "Speech to text on the device" },
4296
5213
  // ── 6. Windows administration ────────────────────────────────────────────────────────────────
4297
- { name: "desktop_windows_admin", group: "windows_admin", state: "planned", path: "device_op", ops: ["windows.registry_read", "windows.registry_write", "windows.services", "windows.service_control", "windows.event_log", "windows.features"], platforms: ["win32"], summary: "Registry, services, event log" }
5214
+ { name: "desktop_windows_admin", group: "windows_admin", state: "built", path: "device_op", ops: ["windows.registry_read", "windows.registry_write", "windows.services", "windows.service_control", "windows.event_log", "windows.features"], platforms: ["win32"], summary: "Registry, services, event log, optional features" }
4298
5215
  ];
4299
5216
  var EXCLUDED_TOOLS = {
4300
5217
  git_ingest: "Runs on the server: it ingests repository URLs. A local path on a bound computer or sandbox is refused with the fs_* and shell remedy, since the server cannot see it"
@@ -4383,15 +5300,17 @@ var LEGACY_ACTIONS = {
4383
5300
  "local_monitor.watch_events": tool("fs_watch"),
4384
5301
  "local_monitor.stop_watch": tool("fs_watch"),
4385
5302
  "local_monitor.heartbeat": dropped("The relay's device status replaces the heartbeat"),
4386
- "local_schedule.create": dropped("One scheduler: the platform's runs the agent on time and reaches the device through the relay"),
4387
- "local_schedule.list": dropped("One scheduler: the platform's runs the agent on time and reaches the device through the relay"),
4388
- "local_schedule.cancel": dropped("One scheduler: the platform's runs the agent on time and reaches the device through the relay"),
5303
+ // Matrx Local's scheduler ran one of its tools on an interval; desktop_schedule runs an op so.
5304
+ "local_schedule.create": tool("desktop_schedule"),
5305
+ "local_schedule.list": tool("desktop_schedule"),
5306
+ "local_schedule.cancel": tool("desktop_schedule"),
4389
5307
  "local_schedule.prevent_sleep": tool("desktop_power"),
4390
- "local_documents.list": dropped("matrx-local's private document store is gone; documents are files (fs_*) or cloud Knowledge"),
4391
- "local_documents.folders": dropped("matrx-local's private document store is gone; documents are files (fs_*) or cloud Knowledge"),
4392
- "local_documents.read": dropped("matrx-local's private document store is gone; documents are files (fs_*) or cloud Knowledge"),
4393
- "local_documents.write": dropped("matrx-local's private document store is gone; documents are files (fs_*) or cloud Knowledge"),
4394
- "local_documents.search": dropped("matrx-local's private document store is gone; documents are files (fs_*) or cloud Knowledge"),
5308
+ // Matrx Local's documents are the Markdown notes in Documents/Matrx/Notes; desktop_notes reads and writes them.
5309
+ "local_documents.list": tool("desktop_notes"),
5310
+ "local_documents.folders": tool("desktop_notes"),
5311
+ "local_documents.read": tool("desktop_notes"),
5312
+ "local_documents.write": tool("desktop_notes"),
5313
+ "local_documents.search": tool("desktop_notes"),
4395
5314
  "local_media.ocr": tool("desktop_documents"),
4396
5315
  "local_media.resize": tool("desktop_documents"),
4397
5316
  "local_media.pdf_extract": tool("desktop_documents"),