@ai-matrx/desktop-protocol 0.17.2 → 0.17.4

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
@@ -29,6 +29,13 @@ __export(src_exports, {
29
29
  AppProfileLocator: () => AppProfileLocator,
30
30
  AppSupport: () => AppSupport,
31
31
  AppUsageReading: () => AppUsageReading,
32
+ AppsChatsChangedEvent: () => AppsChatsChangedEvent,
33
+ AppsChatsListParams: () => AppsChatsListParams,
34
+ AppsChatsListResult: () => AppsChatsListResult,
35
+ AppsChatsStarParams: () => AppsChatsStarParams,
36
+ AppsChatsStarResult: () => AppsChatsStarResult,
37
+ AppsChatsWatchParams: () => AppsChatsWatchParams,
38
+ AppsChatsWatchResult: () => AppsChatsWatchResult,
32
39
  AppsListParams: () => AppsListParams,
33
40
  AppsListResult: () => AppsListResult,
34
41
  AppsOpenParams: () => AppsOpenParams,
@@ -39,6 +46,10 @@ __export(src_exports, {
39
46
  AppsProfilesRemoveResult: () => AppsProfilesRemoveResult,
40
47
  AppsProfilesSaveParams: () => AppsProfilesSaveParams,
41
48
  AppsProfilesSaveResult: () => AppsProfilesSaveResult,
49
+ AppsProjectsFileParams: () => AppsProjectsFileParams,
50
+ AppsProjectsFileResult: () => AppsProjectsFileResult,
51
+ AppsProjectsUnfileParams: () => AppsProjectsUnfileParams,
52
+ AppsProjectsUnfileResult: () => AppsProjectsUnfileResult,
42
53
  AudioDevice: () => AudioDevice,
43
54
  AudioDevicesParams: () => AudioDevicesParams,
44
55
  AudioDevicesResult: () => AudioDevicesResult,
@@ -51,6 +62,16 @@ __export(src_exports, {
51
62
  CLOSE_RULES: () => CLOSE_RULES,
52
63
  CONTRACT_SHA256: () => CONTRACT_SHA256,
53
64
  CancelMsg: () => CancelMsg,
65
+ ChatHidden: () => ChatHidden,
66
+ ChatId: () => ChatId,
67
+ ChatLastUse: () => ChatLastUse,
68
+ ChatPin: () => ChatPin,
69
+ ChatPlace: () => ChatPlace,
70
+ ChatProject: () => ChatProject,
71
+ ChatProjectId: () => ChatProjectId,
72
+ ChatRow: () => ChatRow,
73
+ ChatRunning: () => ChatRunning,
74
+ ChatWindow: () => ChatWindow,
54
75
  ClientToCoreMsg: () => ClientToCoreMsg,
55
76
  ClientType: () => ClientType,
56
77
  ClipboardReadParams: () => ClipboardReadParams,
@@ -332,7 +353,7 @@ module.exports = __toCommonJS(src_exports);
332
353
  // src/schema/primitives.ts
333
354
  var import_zod = require("zod");
334
355
  var PROTOCOL_MAJOR = 1;
335
- var PROTOCOL_MINOR = 6;
356
+ var PROTOCOL_MINOR = 8;
336
357
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
337
358
  var ProtocolVersion = import_zod.z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
338
359
  var RequestId = import_zod.z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -1222,242 +1243,358 @@ var AppsOpenResult = import_zod11.z.strictObject({
1222
1243
  folder: AbsPath.nullable()
1223
1244
  });
1224
1245
 
1225
- // src/schema/service.ts
1246
+ // src/schema/apps-chats.ts
1226
1247
  var import_zod12 = require("zod");
1248
+ var ChatId = import_zod12.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/);
1249
+ var ChatPlace = import_zod12.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/);
1250
+ var ChatProjectId = import_zod12.z.string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/);
1251
+ var ChatWindow = import_zod12.z.strictObject({
1252
+ key: ChatPlace,
1253
+ /** The app's default profile (Claude: the main window, which lists every account's chats). */
1254
+ main: import_zod12.z.boolean(),
1255
+ /** The account the window is signed into, when known. */
1256
+ account: import_zod12.z.string().max(320).nullable()
1257
+ });
1258
+ var ChatProject = import_zod12.z.strictObject({
1259
+ id: ChatProjectId,
1260
+ name: import_zod12.z.string().min(1).max(200),
1261
+ archived: import_zod12.z.boolean(),
1262
+ /** Chats in it. */
1263
+ count: nonNegInt
1264
+ });
1265
+ var ChatPin = import_zod12.z.strictObject({
1266
+ /** The window whose account pins it; an account with no window of its own is named by its email. */
1267
+ window: import_zod12.z.string().min(1).max(320),
1268
+ /** When that account's pin list was last read; null when the reading has no time. */
1269
+ observed_at_ms: epochMs.nullable()
1270
+ });
1271
+ var ChatRunning = import_zod12.z.strictObject({
1272
+ window: ChatPlace,
1273
+ /** process: a live process resumed this chat there (exact); activity: that window's own record moved in the last 3 minutes. */
1274
+ how: import_zod12.z.enum(["process", "activity"])
1275
+ });
1276
+ var ChatHidden = import_zod12.z.strictObject({
1277
+ window: ChatPlace,
1278
+ reason: import_zod12.z.string().max(200)
1279
+ });
1280
+ var ChatLastUse = import_zod12.z.strictObject({
1281
+ /** The conversation's last reply. */
1282
+ at_ms: epochMs,
1283
+ window: ChatPlace.nullable(),
1284
+ account: import_zod12.z.string().max(320).nullable(),
1285
+ /** How the window was decided (one short line). */
1286
+ how: import_zod12.z.string().max(120).nullable(),
1287
+ /** The account's 1-hour prompt cache is still warm. */
1288
+ cache_warm: import_zod12.z.boolean(),
1289
+ cache_minutes_left: nonNegInt
1290
+ });
1291
+ var ChatRow = import_zod12.z.strictObject({
1292
+ id: ChatId,
1293
+ /** The short id people see (the listing's first 8 characters). */
1294
+ short_id: import_zod12.z.string().max(16),
1295
+ /** The listing's own name (Claude: local_<id>), null for a chat only in the holder. */
1296
+ record: import_zod12.z.string().max(160).nullable(),
1297
+ title: import_zod12.z.string().max(1e3),
1298
+ last_active_ms: epochMs.nullable(),
1299
+ created_ms: epochMs.nullable(),
1300
+ projects: import_zod12.z.array(ChatProjectId).max(500),
1301
+ starred: import_zod12.z.boolean(),
1302
+ pinned_in: import_zod12.z.array(ChatPin).max(200),
1303
+ /** Every place it is listed now: window keys, plus "holder". */
1304
+ places: import_zod12.z.array(ChatPlace).max(200),
1305
+ held: import_zod12.z.boolean(),
1306
+ running: import_zod12.z.array(ChatRunning).max(200),
1307
+ hidden_in: import_zod12.z.array(ChatHidden).max(200),
1308
+ /** Kept out of the main window on purpose. */
1309
+ hidden_from_main: import_zod12.z.boolean(),
1310
+ /** Listed in a side window and not yet copied into main. */
1311
+ main_pending: import_zod12.z.boolean(),
1312
+ /** A scheduled routine's run (its task id). */
1313
+ scheduled: import_zod12.z.string().max(200).nullable(),
1314
+ /** Created recently and in no project: offered for filing. */
1315
+ new_unfiled: import_zod12.z.boolean(),
1316
+ warnings: import_zod12.z.array(import_zod12.z.string().max(400)).max(20),
1317
+ last_use: ChatLastUse.nullable()
1318
+ });
1319
+ var AppsChatsListParams = import_zod12.z.strictObject({
1320
+ app_key: AppKey,
1321
+ /** Only these chats (a live update re-reads just what changed). */
1322
+ ids: import_zod12.z.array(ChatId).max(500).optional()
1323
+ });
1324
+ var AppsChatsListResult = import_zod12.z.strictObject({
1325
+ app_key: AppKey,
1326
+ /** Bumps on every change the index sees; `apps.chats.changed` carries the same number. */
1327
+ version: nonNegInt,
1328
+ windows: import_zod12.z.array(ChatWindow).max(200),
1329
+ projects: import_zod12.z.array(ChatProject).max(5e3),
1330
+ chats: import_zod12.z.array(ChatRow).max(2e4),
1331
+ /** How long a chat in no project counts as new. */
1332
+ new_window_ms: nonNegInt
1333
+ });
1334
+ var AppsChatsWatchParams = import_zod12.z.strictObject({ app_key: AppKey });
1335
+ var AppsChatsWatchResult = import_zod12.z.strictObject({ resource_id: ResourceId, version: nonNegInt });
1336
+ var AppsChatsChangedEvent = import_zod12.z.strictObject({
1337
+ app_key: AppKey,
1338
+ version: nonNegInt,
1339
+ ids: import_zod12.z.array(ChatId).max(1e3),
1340
+ all: import_zod12.z.boolean()
1341
+ });
1342
+ var AppsProjectsFileParams = import_zod12.z.strictObject({
1343
+ app_key: AppKey,
1344
+ chat_id: ChatId,
1345
+ project_id: ChatProjectId.optional(),
1346
+ new_project_name: import_zod12.z.string().min(1).max(200).optional()
1347
+ });
1348
+ var AppsProjectsFileResult = import_zod12.z.strictObject({ chat: ChatRow, project: ChatProject });
1349
+ var AppsProjectsUnfileParams = import_zod12.z.strictObject({ app_key: AppKey, chat_id: ChatId, project_id: ChatProjectId });
1350
+ var AppsProjectsUnfileResult = import_zod12.z.strictObject({ chat: ChatRow });
1351
+ var AppsChatsStarParams = import_zod12.z.strictObject({ app_key: AppKey, chat_id: ChatId, starred: import_zod12.z.boolean() });
1352
+ var AppsChatsStarResult = import_zod12.z.strictObject({ chat: ChatRow });
1353
+
1354
+ // src/schema/service.ts
1355
+ var import_zod13 = require("zod");
1227
1356
  var SERVICE_MAX_FRAME_BYTES = 16777216;
1228
- var ServiceName = import_zod12.z.enum(["ml", "coding"]);
1229
- var ContractHash = import_zod12.z.string().regex(/^[0-9a-f]{64}$/);
1230
- var ServiceToken = import_zod12.z.string().regex(/^[A-Za-z0-9_-]{43}$/);
1357
+ var ServiceName = import_zod13.z.enum(["ml", "coding"]);
1358
+ var ContractHash = import_zod13.z.string().regex(/^[0-9a-f]{64}$/);
1359
+ var ServiceToken = import_zod13.z.string().regex(/^[A-Za-z0-9_-]{43}$/);
1231
1360
  var ServiceRequestId = u32;
1232
- var ServiceHello = import_zod12.z.strictObject({ type: import_zod12.z.literal("hello"), token: ServiceToken, contract: ContractHash });
1233
- var ServiceWelcome = import_zod12.z.strictObject({
1234
- type: import_zod12.z.literal("welcome"),
1361
+ var ServiceHello = import_zod13.z.strictObject({ type: import_zod13.z.literal("hello"), token: ServiceToken, contract: ContractHash });
1362
+ var ServiceWelcome = import_zod13.z.strictObject({
1363
+ type: import_zod13.z.literal("welcome"),
1235
1364
  service: ServiceName,
1236
1365
  contract: ContractHash,
1237
1366
  pid: nonNegInt,
1238
1367
  /** The interpreter's version, e.g. "3.13.15". */
1239
- python: import_zod12.z.string().max(32),
1368
+ python: import_zod13.z.string().max(32),
1240
1369
  /** Every op this service serves; must equal SERVICES[service] exactly. */
1241
- ops: import_zod12.z.array(import_zod12.z.string().min(1).max(64)).max(64)
1370
+ ops: import_zod13.z.array(import_zod13.z.string().min(1).max(64)).max(64)
1242
1371
  });
1243
- var ServiceRequest = import_zod12.z.strictObject({
1244
- type: import_zod12.z.literal("request"),
1372
+ var ServiceRequest = import_zod13.z.strictObject({
1373
+ type: import_zod13.z.literal("request"),
1245
1374
  id: ServiceRequestId,
1246
- op: import_zod12.z.string().min(1).max(64),
1247
- params: import_zod12.z.unknown()
1375
+ op: import_zod13.z.string().min(1).max(64),
1376
+ params: import_zod13.z.unknown()
1248
1377
  // validated by the service against SERVICES[service][op].params
1249
1378
  });
1250
- var ServiceResponse = import_zod12.z.strictObject({
1251
- type: import_zod12.z.literal("response"),
1379
+ var ServiceResponse = import_zod13.z.strictObject({
1380
+ type: import_zod13.z.literal("response"),
1252
1381
  id: ServiceRequestId,
1253
- result: import_zod12.z.unknown()
1382
+ result: import_zod13.z.unknown()
1254
1383
  // validated by the core against SERVICES[service][op].result
1255
1384
  });
1256
- var ServiceErrorMsg = import_zod12.z.strictObject({ type: import_zod12.z.literal("error"), id: ServiceRequestId, error: ProtocolErrorBody });
1257
- var ServiceProgressMsg = import_zod12.z.strictObject({ type: import_zod12.z.literal("progress"), id: ServiceRequestId, progress: import_zod12.z.unknown() });
1258
- var ServiceCancel = import_zod12.z.strictObject({ type: import_zod12.z.literal("cancel"), id: ServiceRequestId });
1259
- var ServicePing = import_zod12.z.strictObject({ type: import_zod12.z.literal("ping"), id: ServiceRequestId });
1260
- var ServicePong = import_zod12.z.strictObject({
1261
- type: import_zod12.z.literal("pong"),
1385
+ var ServiceErrorMsg = import_zod13.z.strictObject({ type: import_zod13.z.literal("error"), id: ServiceRequestId, error: ProtocolErrorBody });
1386
+ var ServiceProgressMsg = import_zod13.z.strictObject({ type: import_zod13.z.literal("progress"), id: ServiceRequestId, progress: import_zod13.z.unknown() });
1387
+ var ServiceCancel = import_zod13.z.strictObject({ type: import_zod13.z.literal("cancel"), id: ServiceRequestId });
1388
+ var ServicePing = import_zod13.z.strictObject({ type: import_zod13.z.literal("ping"), id: ServiceRequestId });
1389
+ var ServicePong = import_zod13.z.strictObject({
1390
+ type: import_zod13.z.literal("pong"),
1262
1391
  id: ServiceRequestId,
1263
1392
  /** Requests running now. */
1264
1393
  busy: nonNegInt
1265
1394
  });
1266
- var ServiceShutdown = import_zod12.z.strictObject({ type: import_zod12.z.literal("shutdown") });
1267
- var CoreToServiceMsg = import_zod12.z.discriminatedUnion("type", [ServiceHello, ServiceRequest, ServiceCancel, ServicePing, ServiceShutdown]);
1268
- var ServiceToCoreMsg = import_zod12.z.discriminatedUnion("type", [ServiceWelcome, ServiceResponse, ServiceErrorMsg, ServiceProgressMsg, ServicePong]);
1395
+ var ServiceShutdown = import_zod13.z.strictObject({ type: import_zod13.z.literal("shutdown") });
1396
+ var CoreToServiceMsg = import_zod13.z.discriminatedUnion("type", [ServiceHello, ServiceRequest, ServiceCancel, ServicePing, ServiceShutdown]);
1397
+ var ServiceToCoreMsg = import_zod13.z.discriminatedUnion("type", [ServiceWelcome, ServiceResponse, ServiceErrorMsg, ServiceProgressMsg, ServicePong]);
1269
1398
 
1270
1399
  // src/schema/tools.ts
1271
- var import_zod13 = require("zod");
1272
- var ToolLevel = import_zod13.z.enum(["programmatic", "protocol", "chat"]);
1273
- var ToolOutcome = import_zod13.z.enum(["pass", "fail", "skip"]);
1274
- var ToolPlatform = import_zod13.z.enum(["darwin", "win32", "linux"]);
1275
- var ToolTransport = import_zod13.z.enum(["in_process", "localhost", "relay", "agent"]);
1276
- var ToolName = import_zod13.z.string().min(1).max(64).regex(/^[a-z][a-z0-9_]*$/);
1277
- var ToolLevelResult = import_zod13.z.strictObject({
1400
+ var import_zod14 = require("zod");
1401
+ var ToolLevel = import_zod14.z.enum(["programmatic", "protocol", "chat"]);
1402
+ var ToolOutcome = import_zod14.z.enum(["pass", "fail", "skip"]);
1403
+ var ToolPlatform = import_zod14.z.enum(["darwin", "win32", "linux"]);
1404
+ var ToolTransport = import_zod14.z.enum(["in_process", "localhost", "relay", "agent"]);
1405
+ var ToolName = import_zod14.z.string().min(1).max(64).regex(/^[a-z][a-z0-9_]*$/);
1406
+ var ToolLevelResult = import_zod14.z.strictObject({
1278
1407
  tool: ToolName,
1279
1408
  level: ToolLevel,
1280
1409
  platform: ToolPlatform,
1281
1410
  transport: ToolTransport,
1282
1411
  outcome: ToolOutcome,
1283
1412
  /** True when the caller sat on a different network from the device (a phone on cellular, CI). */
1284
- remote_network: import_zod13.z.boolean(),
1413
+ remote_network: import_zod14.z.boolean(),
1285
1414
  /** One line: what was asserted, or why it failed. Never a token, a file's contents or a path under a real home. */
1286
- detail: import_zod13.z.string().max(500),
1415
+ detail: import_zod14.z.string().max(500),
1287
1416
  /** The harness that produced it, e.g. `matrx-desktop test/tools/programmatic.test.ts`. */
1288
- suite: import_zod13.z.string().min(1).max(200),
1417
+ suite: import_zod14.z.string().min(1).max(200),
1289
1418
  /** The test case inside the suite. */
1290
- test: import_zod13.z.string().min(1).max(300),
1291
- run_at_ms: import_zod13.z.int().min(0)
1419
+ test: import_zod14.z.string().min(1).max(300),
1420
+ run_at_ms: import_zod14.z.int().min(0)
1292
1421
  });
1293
- var ToolResultsFile = import_zod13.z.strictObject({
1294
- schema: import_zod13.z.literal("matrx.tool-results.v1"),
1422
+ var ToolResultsFile = import_zod14.z.strictObject({
1423
+ schema: import_zod14.z.literal("matrx.tool-results.v1"),
1295
1424
  /** The producing repo's commit (short or full SHA). */
1296
- commit: import_zod13.z.string().min(4).max(64),
1297
- results: import_zod13.z.array(ToolLevelResult).max(1e4)
1425
+ commit: import_zod14.z.string().min(4).max(64),
1426
+ results: import_zod14.z.array(ToolLevelResult).max(1e4)
1298
1427
  });
1299
1428
 
1300
1429
  // src/schema/proc.ts
1301
- var import_zod14 = require("zod");
1302
- var ProcSort = import_zod14.z.enum(["cpu", "memory", "pid", "name"]);
1303
- var ProcListParams = import_zod14.z.strictObject({
1430
+ var import_zod15 = require("zod");
1431
+ var ProcSort = import_zod15.z.enum(["cpu", "memory", "pid", "name"]);
1432
+ var ProcListParams = import_zod15.z.strictObject({
1304
1433
  /** Case-insensitive substring of the process name or its command line. */
1305
- name: import_zod14.z.string().min(1).max(128).optional(),
1434
+ name: import_zod15.z.string().min(1).max(128).optional(),
1306
1435
  sort: ProcSort.default("cpu"),
1307
- limit: import_zod14.z.int().min(1).max(500).default(50)
1436
+ limit: import_zod15.z.int().min(1).max(500).default(50)
1308
1437
  });
1309
- var ProcInfo = import_zod14.z.strictObject({
1310
- pid: import_zod14.z.int().min(0),
1438
+ var ProcInfo = import_zod15.z.strictObject({
1439
+ pid: import_zod15.z.int().min(0),
1311
1440
  /** Parent process id; null where the OS does not report it. */
1312
- ppid: import_zod14.z.int().min(0).nullable(),
1313
- name: import_zod14.z.string().max(256),
1441
+ ppid: import_zod15.z.int().min(0).nullable(),
1442
+ name: import_zod15.z.string().max(256),
1314
1443
  /** The command line, cut to 1024 characters. */
1315
- command: import_zod14.z.string().max(1024),
1444
+ command: import_zod15.z.string().max(1024),
1316
1445
  /** Share of one core, as `ps` and Task Manager report it; null where the OS does not say. */
1317
- cpu_percent: import_zod14.z.number().min(0).nullable(),
1446
+ cpu_percent: import_zod15.z.number().min(0).nullable(),
1318
1447
  memory_bytes: nonNegInt.nullable(),
1319
- user: import_zod14.z.string().max(128).nullable()
1448
+ user: import_zod15.z.string().max(128).nullable()
1320
1449
  });
1321
- var ProcListResult = import_zod14.z.strictObject({
1322
- processes: import_zod14.z.array(ProcInfo).max(500),
1450
+ var ProcListResult = import_zod15.z.strictObject({
1451
+ processes: import_zod15.z.array(ProcInfo).max(500),
1323
1452
  /** Processes that matched before `limit`. */
1324
1453
  total: nonNegInt,
1325
- truncated: import_zod14.z.boolean()
1454
+ truncated: import_zod15.z.boolean()
1326
1455
  });
1327
- var ProcPortsParams = import_zod14.z.strictObject({
1456
+ var ProcPortsParams = import_zod15.z.strictObject({
1328
1457
  /** Only this port. */
1329
- port: import_zod14.z.int().min(1).max(65535).optional()
1458
+ port: import_zod15.z.int().min(1).max(65535).optional()
1330
1459
  });
1331
- var ProcPort = import_zod14.z.strictObject({
1332
- port: import_zod14.z.int().min(1).max(65535),
1333
- protocol: import_zod14.z.enum(["tcp", "udp"]),
1460
+ var ProcPort = import_zod15.z.strictObject({
1461
+ port: import_zod15.z.int().min(1).max(65535),
1462
+ protocol: import_zod15.z.enum(["tcp", "udp"]),
1334
1463
  /** The local address it listens on ("127.0.0.1", "*", "::"). */
1335
- address: import_zod14.z.string().max(64),
1336
- pid: import_zod14.z.int().min(0).nullable(),
1337
- process: import_zod14.z.string().max(256).nullable()
1464
+ address: import_zod15.z.string().max(64),
1465
+ pid: import_zod15.z.int().min(0).nullable(),
1466
+ process: import_zod15.z.string().max(256).nullable()
1338
1467
  });
1339
- var ProcPortsResult = import_zod14.z.strictObject({ ports: import_zod14.z.array(ProcPort).max(4e3) });
1340
- var ProcKillParams = import_zod14.z.strictObject({
1341
- pid: import_zod14.z.int().min(1),
1468
+ var ProcPortsResult = import_zod15.z.strictObject({ ports: import_zod15.z.array(ProcPort).max(4e3) });
1469
+ var ProcKillParams = import_zod15.z.strictObject({
1470
+ pid: import_zod15.z.int().min(1),
1342
1471
  /** Kill outright (SIGKILL; on Windows the same /F) instead of asking it to quit. */
1343
- force: import_zod14.z.boolean().default(false)
1472
+ force: import_zod15.z.boolean().default(false)
1344
1473
  });
1345
- var ProcKillResult = import_zod14.z.strictObject({
1346
- pid: import_zod14.z.int().min(1),
1347
- signal: import_zod14.z.enum(["SIGTERM", "SIGKILL"]),
1474
+ var ProcKillResult = import_zod15.z.strictObject({
1475
+ pid: import_zod15.z.int().min(1),
1476
+ signal: import_zod15.z.enum(["SIGTERM", "SIGKILL"]),
1348
1477
  /** True when the process was gone within 3 s. */
1349
- exited: import_zod14.z.boolean()
1478
+ exited: import_zod15.z.boolean()
1350
1479
  });
1351
1480
 
1352
1481
  // src/schema/clipboard.ts
1353
- var import_zod15 = require("zod");
1354
- var ClipboardReadParams = import_zod15.z.strictObject({});
1355
- var ClipboardReadResult = import_zod15.z.strictObject({
1482
+ var import_zod16 = require("zod");
1483
+ var ClipboardReadParams = import_zod16.z.strictObject({});
1484
+ var ClipboardReadResult = import_zod16.z.strictObject({
1356
1485
  /** The clipboard's text ("" when it holds none), cut to 1 MiB. */
1357
- text: import_zod15.z.string().max(1048576),
1358
- truncated: import_zod15.z.boolean()
1486
+ text: import_zod16.z.string().max(1048576),
1487
+ truncated: import_zod16.z.boolean()
1359
1488
  });
1360
- var ClipboardWriteParams = import_zod15.z.strictObject({ text: import_zod15.z.string().max(1048576) });
1361
- var ClipboardWriteResult = import_zod15.z.strictObject({ bytes: nonNegInt });
1489
+ var ClipboardWriteParams = import_zod16.z.strictObject({ text: import_zod16.z.string().max(1048576) });
1490
+ var ClipboardWriteResult = import_zod16.z.strictObject({ bytes: nonNegInt });
1362
1491
 
1363
1492
  // src/schema/system.ts
1364
- var import_zod16 = require("zod");
1365
- var SystemOpenUrlParams = import_zod16.z.strictObject({
1493
+ var import_zod17 = require("zod");
1494
+ var SystemOpenUrlParams = import_zod17.z.strictObject({
1366
1495
  /** http, https or mailto; opened in the person's default app for it. */
1367
- url: import_zod16.z.string().min(1).max(4096)
1496
+ url: import_zod17.z.string().min(1).max(4096)
1368
1497
  });
1369
- var SystemOpenUrlResult = import_zod16.z.strictObject({ url: import_zod16.z.string().max(4096) });
1370
- var SystemOpenPathParams = import_zod16.z.strictObject({
1498
+ var SystemOpenUrlResult = import_zod17.z.strictObject({ url: import_zod17.z.string().max(4096) });
1499
+ var SystemOpenPathParams = import_zod17.z.strictObject({
1371
1500
  path: AbsPath,
1372
1501
  /** Show it in the file manager (Finder, Explorer) instead of opening it. */
1373
- reveal: import_zod16.z.boolean().default(false)
1502
+ reveal: import_zod17.z.boolean().default(false)
1374
1503
  });
1375
- var SystemOpenPathResult = import_zod16.z.strictObject({ path: AbsPath, revealed: import_zod16.z.boolean() });
1376
- var SystemNotifyParams = import_zod16.z.strictObject({
1377
- title: import_zod16.z.string().min(1).max(128),
1378
- body: import_zod16.z.string().max(1024).default("")
1504
+ var SystemOpenPathResult = import_zod17.z.strictObject({ path: AbsPath, revealed: import_zod17.z.boolean() });
1505
+ var SystemNotifyParams = import_zod17.z.strictObject({
1506
+ title: import_zod17.z.string().min(1).max(128),
1507
+ body: import_zod17.z.string().max(1024).default("")
1379
1508
  });
1380
- var SystemNotifyResult = import_zod16.z.strictObject({
1509
+ var SystemNotifyResult = import_zod17.z.strictObject({
1381
1510
  /** False when this computer has no notification service to show it (a bare Linux box). */
1382
- shown: import_zod16.z.boolean()
1511
+ shown: import_zod17.z.boolean()
1383
1512
  });
1384
1513
 
1385
1514
  // src/schema/screen.ts
1386
- var import_zod17 = require("zod");
1387
- var ScreenDisplay = import_zod17.z.strictObject({
1515
+ var import_zod18 = require("zod");
1516
+ var ScreenDisplay = import_zod18.z.strictObject({
1388
1517
  /** The OS's display id; pass it to screen.capture. */
1389
1518
  id: nonNegInt,
1390
- name: import_zod17.z.string().max(128),
1519
+ name: import_zod18.z.string().max(128),
1391
1520
  /** Position and size in the OS's logical points (x and y may be negative left of or above the main display). */
1392
- x: import_zod17.z.int(),
1393
- y: import_zod17.z.int(),
1394
- width: import_zod17.z.int().min(1),
1395
- height: import_zod17.z.int().min(1),
1521
+ x: import_zod18.z.int(),
1522
+ y: import_zod18.z.int(),
1523
+ width: import_zod18.z.int().min(1),
1524
+ height: import_zod18.z.int().min(1),
1396
1525
  /** Pixels per point (2 on a Retina display). */
1397
- scale: import_zod17.z.number().min(0.1).max(8),
1398
- primary: import_zod17.z.boolean()
1526
+ scale: import_zod18.z.number().min(0.1).max(8),
1527
+ primary: import_zod18.z.boolean()
1399
1528
  });
1400
- var ScreenListParams = import_zod17.z.strictObject({});
1401
- var ScreenListResult = import_zod17.z.strictObject({ displays: import_zod17.z.array(ScreenDisplay).max(32) });
1402
- var ScreenCaptureParams = import_zod17.z.strictObject({
1529
+ var ScreenListParams = import_zod18.z.strictObject({});
1530
+ var ScreenListResult = import_zod18.z.strictObject({ displays: import_zod18.z.array(ScreenDisplay).max(32) });
1531
+ var ScreenCaptureParams = import_zod18.z.strictObject({
1403
1532
  /** The display (from screen.list); the primary display when absent. */
1404
1533
  display_id: nonNegInt.optional(),
1405
- format: import_zod17.z.enum(["jpeg", "png"]).default("jpeg"),
1534
+ format: import_zod18.z.enum(["jpeg", "png"]).default("jpeg"),
1406
1535
  /** Scale the picture down to at most this width in pixels (kept when already smaller). */
1407
- max_width: import_zod17.z.int().min(160).max(7680).default(1600)
1536
+ max_width: import_zod18.z.int().min(160).max(7680).default(1600)
1408
1537
  });
1409
- var ScreenCaptureResult = import_zod17.z.strictObject({
1538
+ var ScreenCaptureResult = import_zod18.z.strictObject({
1410
1539
  display_id: nonNegInt,
1411
- mime_type: import_zod17.z.enum(["image/jpeg", "image/png"]),
1412
- width: import_zod17.z.int().min(1),
1413
- height: import_zod17.z.int().min(1),
1540
+ mime_type: import_zod18.z.enum(["image/jpeg", "image/png"]),
1541
+ width: import_zod18.z.int().min(1),
1542
+ height: import_zod18.z.int().min(1),
1414
1543
  /** The display's full resolution in pixels, before scaling. */
1415
- source_width: import_zod17.z.int().min(1),
1416
- source_height: import_zod17.z.int().min(1),
1544
+ source_width: import_zod18.z.int().min(1),
1545
+ source_height: import_zod18.z.int().min(1),
1417
1546
  /** The image, base64 (at most 6 MiB of text). */
1418
- data_base64: import_zod17.z.string().max(6291456)
1547
+ data_base64: import_zod18.z.string().max(6291456)
1419
1548
  });
1420
1549
 
1421
1550
  // src/schema/window.ts
1422
- var import_zod18 = require("zod");
1423
- var WindowInfo = import_zod18.z.strictObject({
1551
+ var import_zod19 = require("zod");
1552
+ var WindowInfo = import_zod19.z.strictObject({
1424
1553
  /** The OS's window handle (macOS window number, Windows HWND, X11 window id). */
1425
1554
  id: nonNegInt,
1426
- title: import_zod18.z.string().max(512),
1555
+ title: import_zod19.z.string().max(512),
1427
1556
  /** Position and size in logical points. */
1428
- x: import_zod18.z.int(),
1429
- y: import_zod18.z.int(),
1430
- width: import_zod18.z.int().min(0),
1431
- height: import_zod18.z.int().min(0)
1557
+ x: import_zod19.z.int(),
1558
+ y: import_zod19.z.int(),
1559
+ width: import_zod19.z.int().min(0),
1560
+ height: import_zod19.z.int().min(0),
1561
+ /**
1562
+ * The application that owns the window, by the name the OS shows people; absent when the OS does
1563
+ * not say. Optional (never null, the schema rule) because it was added in protocol 1.7: an older
1564
+ * app's answer has no such field (FIELDS_SINCE).
1565
+ */
1566
+ app: import_zod19.z.string().max(256).optional(),
1567
+ /** The owning process id; absent when the OS does not say. Added in protocol 1.7. */
1568
+ pid: import_zod19.z.int().min(0).optional()
1432
1569
  });
1433
- var WindowListParams = import_zod18.z.strictObject({
1570
+ var WindowListParams = import_zod19.z.strictObject({
1434
1571
  /** Case-insensitive substring of the window title. */
1435
- title: import_zod18.z.string().min(1).max(256).optional(),
1436
- limit: import_zod18.z.int().min(1).max(500).default(100)
1572
+ title: import_zod19.z.string().min(1).max(256).optional(),
1573
+ limit: import_zod19.z.int().min(1).max(500).default(100)
1437
1574
  });
1438
- var WindowListResult = import_zod18.z.strictObject({
1439
- windows: import_zod18.z.array(WindowInfo).max(500),
1575
+ var WindowListResult = import_zod19.z.strictObject({
1576
+ windows: import_zod19.z.array(WindowInfo).max(500),
1440
1577
  total: nonNegInt,
1441
- truncated: import_zod18.z.boolean()
1578
+ truncated: import_zod19.z.boolean()
1442
1579
  });
1443
- var WindowFocusParams = import_zod18.z.strictObject({ id: nonNegInt });
1444
- var WindowFocusResult = import_zod18.z.strictObject({ window: WindowInfo });
1445
- var WindowMoveParams = import_zod18.z.strictObject({
1580
+ var WindowFocusParams = import_zod19.z.strictObject({ id: nonNegInt });
1581
+ var WindowFocusResult = import_zod19.z.strictObject({ window: WindowInfo });
1582
+ var WindowMoveParams = import_zod19.z.strictObject({
1446
1583
  id: nonNegInt,
1447
1584
  /** New top-left corner; unchanged when absent. */
1448
- x: import_zod18.z.int().optional(),
1449
- y: import_zod18.z.int().optional(),
1585
+ x: import_zod19.z.int().optional(),
1586
+ y: import_zod19.z.int().optional(),
1450
1587
  /** New size; unchanged when absent. */
1451
- width: import_zod18.z.int().min(50).max(16384).optional(),
1452
- height: import_zod18.z.int().min(50).max(16384).optional()
1588
+ width: import_zod19.z.int().min(50).max(16384).optional(),
1589
+ height: import_zod19.z.int().min(50).max(16384).optional()
1453
1590
  });
1454
- var WindowMoveResult = import_zod18.z.strictObject({ window: WindowInfo });
1455
- var WindowMinimizeParams = import_zod18.z.strictObject({ id: nonNegInt });
1456
- var WindowMinimizeResult = import_zod18.z.strictObject({ id: nonNegInt });
1591
+ var WindowMoveResult = import_zod19.z.strictObject({ window: WindowInfo });
1592
+ var WindowMinimizeParams = import_zod19.z.strictObject({ id: nonNegInt });
1593
+ var WindowMinimizeResult = import_zod19.z.strictObject({ id: nonNegInt });
1457
1594
 
1458
1595
  // src/schema/input.ts
1459
- var import_zod19 = require("zod");
1460
- var InputKey = import_zod19.z.enum([
1596
+ var import_zod20 = require("zod");
1597
+ var InputKey = import_zod20.z.enum([
1461
1598
  "cmd",
1462
1599
  "ctrl",
1463
1600
  "alt",
@@ -1537,203 +1674,203 @@ var InputKey = import_zod19.z.enum([
1537
1674
  "backslash",
1538
1675
  "grave"
1539
1676
  ]);
1540
- var InputTypeTextParams = import_zod19.z.strictObject({ text: import_zod19.z.string().min(1).max(1e4) });
1541
- var InputTypeTextResult = import_zod19.z.strictObject({ characters: import_zod19.z.int().min(1) });
1542
- var InputHotkeyParams = import_zod19.z.strictObject({
1677
+ var InputTypeTextParams = import_zod20.z.strictObject({ text: import_zod20.z.string().min(1).max(1e4) });
1678
+ var InputTypeTextResult = import_zod20.z.strictObject({ characters: import_zod20.z.int().min(1) });
1679
+ var InputHotkeyParams = import_zod20.z.strictObject({
1543
1680
  /** Pressed together in order and released in reverse: ["cmd", "shift", "t"]. */
1544
- keys: import_zod19.z.array(InputKey).min(1).max(6)
1681
+ keys: import_zod20.z.array(InputKey).min(1).max(6)
1545
1682
  });
1546
- var InputHotkeyResult = import_zod19.z.strictObject({ keys: import_zod19.z.array(InputKey) });
1547
- var InputPoint = import_zod19.z.strictObject({ x: import_zod19.z.int(), y: import_zod19.z.int() });
1548
- var InputMouseMoveParams = import_zod19.z.strictObject({
1683
+ var InputHotkeyResult = import_zod20.z.strictObject({ keys: import_zod20.z.array(InputKey) });
1684
+ var InputPoint = import_zod20.z.strictObject({ x: import_zod20.z.int(), y: import_zod20.z.int() });
1685
+ var InputMouseMoveParams = import_zod20.z.strictObject({
1549
1686
  /** Screen position in logical points (the coordinates screen.list and window.list report). */
1550
- x: import_zod19.z.int(),
1551
- y: import_zod19.z.int()
1687
+ x: import_zod20.z.int(),
1688
+ y: import_zod20.z.int()
1552
1689
  });
1553
- var InputMouseMoveResult = import_zod19.z.strictObject({
1690
+ var InputMouseMoveResult = import_zod20.z.strictObject({
1554
1691
  /** Where the pointer is now, read back from the OS. */
1555
1692
  position: InputPoint
1556
1693
  });
1557
- var InputMouseClickParams = import_zod19.z.strictObject({
1694
+ var InputMouseClickParams = import_zod20.z.strictObject({
1558
1695
  /** Move here first; clicks where the pointer is when absent. */
1559
- x: import_zod19.z.int().optional(),
1560
- y: import_zod19.z.int().optional(),
1561
- button: import_zod19.z.enum(["left", "right", "middle"]).default("left"),
1562
- double: import_zod19.z.boolean().default(false)
1696
+ x: import_zod20.z.int().optional(),
1697
+ y: import_zod20.z.int().optional(),
1698
+ button: import_zod20.z.enum(["left", "right", "middle"]).default("left"),
1699
+ double: import_zod20.z.boolean().default(false)
1563
1700
  });
1564
- var InputMouseClickResult = import_zod19.z.strictObject({
1701
+ var InputMouseClickResult = import_zod20.z.strictObject({
1565
1702
  position: InputPoint,
1566
- button: import_zod19.z.enum(["left", "right", "middle"]),
1567
- double: import_zod19.z.boolean()
1703
+ button: import_zod20.z.enum(["left", "right", "middle"]),
1704
+ double: import_zod20.z.boolean()
1568
1705
  });
1569
1706
 
1570
1707
  // src/schema/power.ts
1571
- var import_zod20 = require("zod");
1572
- var PowerStatusParams = import_zod20.z.strictObject({});
1573
- var PowerStatusResult = import_zod20.z.strictObject({
1574
- has_battery: import_zod20.z.boolean(),
1708
+ var import_zod21 = require("zod");
1709
+ var PowerStatusParams = import_zod21.z.strictObject({});
1710
+ var PowerStatusResult = import_zod21.z.strictObject({
1711
+ has_battery: import_zod21.z.boolean(),
1575
1712
  /** 0–100; null without a battery. */
1576
- percent: import_zod20.z.number().min(0).max(100).nullable(),
1577
- charging: import_zod20.z.boolean().nullable(),
1713
+ percent: import_zod21.z.number().min(0).max(100).nullable(),
1714
+ charging: import_zod21.z.boolean().nullable(),
1578
1715
  /** On wall power; null where the OS does not say. */
1579
- plugged_in: import_zod20.z.boolean().nullable(),
1716
+ plugged_in: import_zod21.z.boolean().nullable(),
1580
1717
  /** Minutes of battery left; null when charging, unknown or without a battery. */
1581
1718
  minutes_left: nonNegInt.nullable(),
1582
1719
  /** Matrx 2 is keeping the computer awake (power.prevent_sleep) until this time; null when it is not. */
1583
1720
  awake_until_ms: epochMs.nullable()
1584
1721
  });
1585
- var PowerPreventSleepParams = import_zod20.z.strictObject({
1722
+ var PowerPreventSleepParams = import_zod21.z.strictObject({
1586
1723
  /** Keep the computer awake this long; 0 lets it sleep again now. */
1587
- seconds: import_zod20.z.int().min(0).max(86400),
1724
+ seconds: import_zod21.z.int().min(0).max(86400),
1588
1725
  /** Shown where the OS lists what keeps it awake. */
1589
- reason: import_zod20.z.string().min(1).max(128).default("Matrx 2 is working")
1726
+ reason: import_zod21.z.string().min(1).max(128).default("Matrx 2 is working")
1590
1727
  });
1591
- var PowerPreventSleepResult = import_zod20.z.strictObject({
1728
+ var PowerPreventSleepResult = import_zod21.z.strictObject({
1592
1729
  /** When it may sleep again; null after seconds 0. */
1593
1730
  awake_until_ms: epochMs.nullable()
1594
1731
  });
1595
1732
 
1596
1733
  // src/schema/resources.ts
1597
- var import_zod21 = require("zod");
1598
- var ResourcesDisk = import_zod21.z.strictObject({
1734
+ var import_zod22 = require("zod");
1735
+ var ResourcesDisk = import_zod22.z.strictObject({
1599
1736
  /** Where it is mounted ("/", "C:"). */
1600
- mount: import_zod21.z.string().max(512),
1737
+ mount: import_zod22.z.string().max(512),
1601
1738
  /** The file system ("apfs", "NTFS", "ext4"). */
1602
- fs: import_zod21.z.string().max(64),
1739
+ fs: import_zod22.z.string().max(64),
1603
1740
  size_bytes: nonNegInt,
1604
1741
  used_bytes: nonNegInt,
1605
1742
  available_bytes: nonNegInt
1606
1743
  });
1607
- var ResourcesSnapshotParams = import_zod21.z.strictObject({});
1608
- var ResourcesSnapshotResult = import_zod21.z.strictObject({
1609
- cpu: import_zod21.z.strictObject({
1744
+ var ResourcesSnapshotParams = import_zod22.z.strictObject({});
1745
+ var ResourcesSnapshotResult = import_zod22.z.strictObject({
1746
+ cpu: import_zod22.z.strictObject({
1610
1747
  /** Busy share of all cores, 0–100, measured now. */
1611
- percent: import_zod21.z.number().min(0).max(100),
1612
- cores: import_zod21.z.int().min(1),
1748
+ percent: import_zod22.z.number().min(0).max(100),
1749
+ cores: import_zod22.z.int().min(1),
1613
1750
  /** 1, 5 and 15 minute load averages; null on Windows. */
1614
- load: import_zod21.z.array(import_zod21.z.number().min(0)).length(3).nullable()
1751
+ load: import_zod22.z.array(import_zod22.z.number().min(0)).length(3).nullable()
1615
1752
  }),
1616
- memory: import_zod21.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt, available_bytes: nonNegInt }),
1617
- swap: import_zod21.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt }),
1618
- disks: import_zod21.z.array(ResourcesDisk).max(64),
1753
+ memory: import_zod22.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt, available_bytes: nonNegInt }),
1754
+ swap: import_zod22.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt }),
1755
+ disks: import_zod22.z.array(ResourcesDisk).max(64),
1619
1756
  uptime_seconds: nonNegInt
1620
1757
  });
1621
1758
 
1622
1759
  // src/schema/audio.ts
1623
- var import_zod22 = require("zod");
1624
- var AudioDevice = import_zod22.z.strictObject({
1760
+ var import_zod23 = require("zod");
1761
+ var AudioDevice = import_zod23.z.strictObject({
1625
1762
  /** The OS's name for it, as audio.record takes it. */
1626
- id: import_zod22.z.string().min(1).max(256),
1627
- name: import_zod22.z.string().max(256),
1628
- default: import_zod22.z.boolean()
1763
+ id: import_zod23.z.string().min(1).max(256),
1764
+ name: import_zod23.z.string().max(256),
1765
+ default: import_zod23.z.boolean()
1629
1766
  });
1630
- var AudioDevicesParams = import_zod22.z.strictObject({});
1631
- var AudioDevicesResult = import_zod22.z.strictObject({
1632
- inputs: import_zod22.z.array(AudioDevice).max(64),
1633
- outputs: import_zod22.z.array(AudioDevice).max(64)
1767
+ var AudioDevicesParams = import_zod23.z.strictObject({});
1768
+ var AudioDevicesResult = import_zod23.z.strictObject({
1769
+ inputs: import_zod23.z.array(AudioDevice).max(64),
1770
+ outputs: import_zod23.z.array(AudioDevice).max(64)
1634
1771
  });
1635
- var AudioRecordParams = import_zod22.z.strictObject({
1636
- seconds: import_zod22.z.number().min(0.5).max(600),
1772
+ var AudioRecordParams = import_zod23.z.strictObject({
1773
+ seconds: import_zod23.z.number().min(0.5).max(600),
1637
1774
  /** The microphone (from audio.devices); the default input when absent. */
1638
- device_id: import_zod22.z.string().min(1).max(256).optional(),
1775
+ device_id: import_zod23.z.string().min(1).max(256).optional(),
1639
1776
  /** Where the WAV file goes; a new file in the temp folder when absent. */
1640
1777
  path: AbsPath.optional()
1641
1778
  });
1642
- var AudioRecordResult = import_zod22.z.strictObject({
1779
+ var AudioRecordResult = import_zod23.z.strictObject({
1643
1780
  path: AbsPath,
1644
- seconds: import_zod22.z.number().min(0),
1781
+ seconds: import_zod23.z.number().min(0),
1645
1782
  bytes: nonNegInt,
1646
1783
  /** Loudest sample, 0–1: 0 means the device gave silence. */
1647
- peak: import_zod22.z.number().min(0).max(1)
1784
+ peak: import_zod23.z.number().min(0).max(1)
1648
1785
  });
1649
- var AudioPlayParams = import_zod22.z.strictObject({ path: AbsPath });
1650
- var AudioPlayResult = import_zod22.z.strictObject({ path: AbsPath, seconds: import_zod22.z.number().min(0) });
1786
+ var AudioPlayParams = import_zod23.z.strictObject({ path: AbsPath });
1787
+ var AudioPlayResult = import_zod23.z.strictObject({ path: AbsPath, seconds: import_zod23.z.number().min(0) });
1651
1788
 
1652
1789
  // src/schema/fs-watch.ts
1653
- var import_zod23 = require("zod");
1654
- var FsWatchId = import_zod23.z.string().regex(/^fw_[A-Za-z0-9]{12,40}$/);
1655
- var FsWatchStartParams = import_zod23.z.strictObject({
1790
+ var import_zod24 = require("zod");
1791
+ var FsWatchId = import_zod24.z.string().regex(/^fw_[A-Za-z0-9]{12,40}$/);
1792
+ var FsWatchStartParams = import_zod24.z.strictObject({
1656
1793
  path: AbsPath,
1657
- recursive: import_zod23.z.boolean().default(true),
1794
+ recursive: import_zod24.z.boolean().default(true),
1658
1795
  /** Globs relative to `path` whose changes are not reported (".git/**", "node_modules/**"). */
1659
- ignore: import_zod23.z.array(import_zod23.z.string().max(256)).max(64).default([])
1796
+ ignore: import_zod24.z.array(import_zod24.z.string().max(256)).max(64).default([])
1660
1797
  });
1661
- var FsWatchStartResult = import_zod23.z.strictObject({
1798
+ var FsWatchStartResult = import_zod24.z.strictObject({
1662
1799
  watch_id: FsWatchId,
1663
1800
  path: AbsPath,
1664
1801
  /** The watch ends by itself if nobody reads it for 30 minutes. */
1665
1802
  expires_at_ms: epochMs
1666
1803
  });
1667
- var FsWatchEventsParams = import_zod23.z.strictObject({
1804
+ var FsWatchEventsParams = import_zod24.z.strictObject({
1668
1805
  watch_id: FsWatchId,
1669
1806
  /** Wait up to this long for a first change when none is waiting (0 answers at once). */
1670
- wait_ms: import_zod23.z.int().min(0).max(25e3).default(0)
1807
+ wait_ms: import_zod24.z.int().min(0).max(25e3).default(0)
1671
1808
  });
1672
- var FsWatchEventsResult = import_zod23.z.strictObject({
1809
+ var FsWatchEventsResult = import_zod24.z.strictObject({
1673
1810
  /** What changed since the last read, oldest first; re-checked against the disk when read. */
1674
- changes: import_zod23.z.array(FsChange).max(1e3),
1811
+ changes: import_zod24.z.array(FsChange).max(1e3),
1675
1812
  /** Changes were dropped (more than 1000 waited): list the folder again. */
1676
- overflow: import_zod23.z.boolean(),
1813
+ overflow: import_zod24.z.boolean(),
1677
1814
  expires_at_ms: epochMs
1678
1815
  });
1679
- var FsWatchStopParams = import_zod23.z.strictObject({ watch_id: FsWatchId });
1680
- var FsWatchStopResult = import_zod23.z.strictObject({ watch_id: FsWatchId });
1816
+ var FsWatchStopParams = import_zod24.z.strictObject({ watch_id: FsWatchId });
1817
+ var FsWatchStopResult = import_zod24.z.strictObject({ watch_id: FsWatchId });
1681
1818
 
1682
1819
  // src/schema/exec-job.ts
1683
- var import_zod24 = require("zod");
1684
- var ExecJobId = import_zod24.z.string().regex(/^job_[A-Za-z0-9]{12,40}$/);
1685
- var ExecJobStartParams = import_zod24.z.strictObject({
1686
- command: import_zod24.z.string().min(1).max(131072),
1820
+ var import_zod25 = require("zod");
1821
+ var ExecJobId = import_zod25.z.string().regex(/^job_[A-Za-z0-9]{12,40}$/);
1822
+ var ExecJobStartParams = import_zod25.z.strictObject({
1823
+ command: import_zod25.z.string().min(1).max(131072),
1687
1824
  /** The folder it runs in; the home folder when absent. */
1688
1825
  cwd: AbsPath.optional(),
1689
- env: import_zod24.z.record(import_zod24.z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(128), import_zod24.z.string().max(32768)).optional()
1826
+ env: import_zod25.z.record(import_zod25.z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(128), import_zod25.z.string().max(32768)).optional()
1690
1827
  });
1691
- var ExecJobStartResult = import_zod24.z.strictObject({ job_id: ExecJobId, pid: import_zod24.z.int().min(1), cwd: AbsPath });
1692
- var ExecJobOutputParams = import_zod24.z.strictObject({
1828
+ var ExecJobStartResult = import_zod25.z.strictObject({ job_id: ExecJobId, pid: import_zod25.z.int().min(1), cwd: AbsPath });
1829
+ var ExecJobOutputParams = import_zod25.z.strictObject({
1693
1830
  job_id: ExecJobId,
1694
1831
  /** Byte offset into the job's output to read from (next_offset of the last read; 0 = the start). */
1695
1832
  offset: nonNegInt.default(0),
1696
1833
  /** Wait up to this long for new output or the exit when none is waiting (0 answers at once). */
1697
- wait_ms: import_zod24.z.int().min(0).max(25e3).default(0),
1698
- max_bytes: import_zod24.z.int().min(1024).max(1048576).default(65536)
1834
+ wait_ms: import_zod25.z.int().min(0).max(25e3).default(0),
1835
+ max_bytes: import_zod25.z.int().min(1024).max(1048576).default(65536)
1699
1836
  });
1700
- var ExecJobOutputResult = import_zod24.z.strictObject({
1837
+ var ExecJobOutputResult = import_zod25.z.strictObject({
1701
1838
  /** stdout and stderr interleaved as they arrived (UTF-8). */
1702
- output: import_zod24.z.string(),
1839
+ output: import_zod25.z.string(),
1703
1840
  next_offset: nonNegInt,
1704
1841
  /** Bytes before `offset` that are gone (the job keeps its last 4 MiB). */
1705
1842
  dropped_bytes: nonNegInt,
1706
- running: import_zod24.z.boolean(),
1707
- exit_code: import_zod24.z.int().nullable()
1843
+ running: import_zod25.z.boolean(),
1844
+ exit_code: import_zod25.z.int().nullable()
1708
1845
  });
1709
- var ExecJobStopParams = import_zod24.z.strictObject({
1846
+ var ExecJobStopParams = import_zod25.z.strictObject({
1710
1847
  job_id: ExecJobId,
1711
1848
  /** End it at once (SIGKILL; on Windows the whole tree with /F) instead of asking it to quit. */
1712
- force: import_zod24.z.boolean().default(false)
1849
+ force: import_zod25.z.boolean().default(false)
1713
1850
  });
1714
- var ExecJobStopResult = import_zod24.z.strictObject({ job_id: ExecJobId, exited: import_zod24.z.boolean(), exit_code: import_zod24.z.int().nullable() });
1715
- var ExecJobInfo = import_zod24.z.strictObject({
1851
+ var ExecJobStopResult = import_zod25.z.strictObject({ job_id: ExecJobId, exited: import_zod25.z.boolean(), exit_code: import_zod25.z.int().nullable() });
1852
+ var ExecJobInfo = import_zod25.z.strictObject({
1716
1853
  job_id: ExecJobId,
1717
- command: import_zod24.z.string().max(1024),
1718
- pid: import_zod24.z.int().min(1),
1854
+ command: import_zod25.z.string().max(1024),
1855
+ pid: import_zod25.z.int().min(1),
1719
1856
  cwd: AbsPath,
1720
- running: import_zod24.z.boolean(),
1721
- exit_code: import_zod24.z.int().nullable(),
1857
+ running: import_zod25.z.boolean(),
1858
+ exit_code: import_zod25.z.int().nullable(),
1722
1859
  started_at_ms: epochMs,
1723
1860
  output_bytes: nonNegInt
1724
1861
  });
1725
- var ExecJobListParams = import_zod24.z.strictObject({});
1726
- var ExecJobListResult = import_zod24.z.strictObject({ jobs: import_zod24.z.array(ExecJobInfo).max(64) });
1862
+ var ExecJobListParams = import_zod25.z.strictObject({});
1863
+ var ExecJobListResult = import_zod25.z.strictObject({ jobs: import_zod25.z.array(ExecJobInfo).max(64) });
1727
1864
 
1728
1865
  // src/schema/coding.ts
1729
- var import_zod25 = require("zod");
1730
- var CodingServiceCredentials = import_zod25.z.strictObject({
1731
- access_token: import_zod25.z.string().min(16).max(16384),
1732
- user_id: import_zod25.z.string().regex(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/),
1866
+ var import_zod26 = require("zod");
1867
+ var CodingServiceCredentials = import_zod26.z.strictObject({
1868
+ access_token: import_zod26.z.string().min(16).max(16384),
1869
+ user_id: import_zod26.z.string().regex(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/),
1733
1870
  /** The AI Matrx server this app talks to (production, or a local server on the nightly copy). */
1734
- server_url: import_zod25.z.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
1871
+ server_url: import_zod26.z.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
1735
1872
  });
1736
- var CodingHistoryBlocked = import_zod25.z.enum([
1873
+ var CodingHistoryBlocked = import_zod26.z.enum([
1737
1874
  "signed_out",
1738
1875
  "offline",
1739
1876
  "organization_required",
@@ -1741,11 +1878,11 @@ var CodingHistoryBlocked = import_zod25.z.enum([
1741
1878
  "cloud_list_unavailable",
1742
1879
  "history_too_large"
1743
1880
  ]);
1744
- var CodingHistoryFailure = import_zod25.z.strictObject({
1745
- session_id: import_zod25.z.string().max(64),
1746
- reason: import_zod25.z.string().max(300)
1881
+ var CodingHistoryFailure = import_zod26.z.strictObject({
1882
+ session_id: import_zod26.z.string().max(64),
1883
+ reason: import_zod26.z.string().max(300)
1747
1884
  });
1748
- var CodingHistoryRun = import_zod25.z.strictObject({
1885
+ var CodingHistoryRun = import_zod26.z.strictObject({
1749
1886
  /** Claude Code sessions found on this computer. */
1750
1887
  local_sessions: nonNegInt,
1751
1888
  /** Of those, already complete in AI Matrx. */
@@ -1760,39 +1897,39 @@ var CodingHistoryRun = import_zod25.z.strictObject({
1760
1897
  /** Changed while being read; a later run takes them. */
1761
1898
  changed: nonNegInt,
1762
1899
  failed: nonNegInt,
1763
- failures: import_zod25.z.array(CodingHistoryFailure).max(20),
1900
+ failures: import_zod26.z.array(CodingHistoryFailure).max(20),
1764
1901
  /** Candidates not reached yet. */
1765
1902
  remaining: nonNegInt,
1766
1903
  /** The one line a person reads, e.g. "Imported 12 of 14 sessions. 140 already in AI Matrx." */
1767
- summary: import_zod25.z.string().max(400)
1904
+ summary: import_zod26.z.string().max(400)
1768
1905
  });
1769
- var CodingHistoryStep = import_zod25.z.strictObject({
1906
+ var CodingHistoryStep = import_zod26.z.strictObject({
1770
1907
  /** Null when the run could not start (blocked before a plan existed). */
1771
- plan_id: import_zod25.z.string().regex(/^[0-9a-f]{32}$/).nullable(),
1772
- finished: import_zod25.z.boolean(),
1908
+ plan_id: import_zod26.z.string().regex(/^[0-9a-f]{32}$/).nullable(),
1909
+ finished: import_zod26.z.boolean(),
1773
1910
  blocked: CodingHistoryBlocked.nullable(),
1774
1911
  run: CodingHistoryRun
1775
1912
  });
1776
- var CodingPlanMissingParams = import_zod25.z.strictObject({ credentials: CodingServiceCredentials.nullable() });
1777
- var CodingImportNextParams = import_zod25.z.strictObject({
1778
- plan_id: import_zod25.z.string().regex(/^[0-9a-f]{32}$/),
1913
+ var CodingPlanMissingParams = import_zod26.z.strictObject({ credentials: CodingServiceCredentials.nullable() });
1914
+ var CodingImportNextParams = import_zod26.z.strictObject({
1915
+ plan_id: import_zod26.z.string().regex(/^[0-9a-f]{32}$/),
1779
1916
  credentials: CodingServiceCredentials.nullable()
1780
1917
  });
1781
- var CodingServiceProgress = import_zod25.z.strictObject({
1782
- phase: import_zod25.z.enum(["checking", "importing"]),
1918
+ var CodingServiceProgress = import_zod26.z.strictObject({
1919
+ phase: import_zod26.z.enum(["checking", "importing"]),
1783
1920
  done: nonNegInt,
1784
1921
  total: nonNegInt
1785
1922
  });
1786
- var CodingHistoryImportMissingParams = import_zod25.z.strictObject({});
1787
- var CodingHistoryImportMissingResult = import_zod25.z.strictObject({
1788
- state: import_zod25.z.enum(["done", "blocked", "cancelled"]),
1923
+ var CodingHistoryImportMissingParams = import_zod26.z.strictObject({});
1924
+ var CodingHistoryImportMissingResult = import_zod26.z.strictObject({
1925
+ state: import_zod26.z.enum(["done", "blocked", "cancelled"]),
1789
1926
  blocked: CodingHistoryBlocked.nullable(),
1790
1927
  run: CodingHistoryRun,
1791
1928
  elapsed_ms: nonNegInt
1792
1929
  });
1793
- var CodingHistoryProgressEvent = import_zod25.z.strictObject({
1930
+ var CodingHistoryProgressEvent = import_zod26.z.strictObject({
1794
1931
  request_id: RequestId,
1795
- phase: import_zod25.z.enum(["checking", "importing"]),
1932
+ phase: import_zod26.z.enum(["checking", "importing"]),
1796
1933
  /** Sessions settled so far, of `total` candidates (0 of 0 while checking). */
1797
1934
  done: nonNegInt,
1798
1935
  total: nonNegInt,
@@ -1837,6 +1974,11 @@ var OPS = {
1837
1974
  "apps.profiles.save": { params: AppsProfilesSaveParams, result: AppsProfilesSaveResult, kind: "unary", since: "1.2", errors: ["AUTH_REQUIRED", "AUTH_FORBIDDEN", "NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "DEVICE_OFFLINE", "INTERNAL"] },
1838
1975
  "apps.profiles.remove": { params: AppsProfilesRemoveParams, result: AppsProfilesRemoveResult, kind: "unary", since: "1.2", errors: ["AUTH_REQUIRED", "AUTH_FORBIDDEN", "NOT_FOUND", "DEVICE_OFFLINE", "INTERNAL"] },
1839
1976
  "apps.open": { params: AppsOpenParams, result: AppsOpenResult, kind: "unary", since: "1.2", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "AUTH_REQUIRED", "DEVICE_OFFLINE", "INTERNAL"] },
1977
+ "apps.chats.list": { params: AppsChatsListParams, result: AppsChatsListResult, kind: "unary", since: "1.8", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1978
+ "apps.chats.watch": { params: AppsChatsWatchParams, result: AppsChatsWatchResult, kind: "resource", since: "1.8", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "RESOURCE_BUSY", "INTERNAL"] },
1979
+ "apps.chats.star": { params: AppsChatsStarParams, result: AppsChatsStarResult, kind: "unary", since: "1.8", errors: ["NOT_FOUND", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1980
+ "apps.projects.file": { params: AppsProjectsFileParams, result: AppsProjectsFileResult, kind: "unary", since: "1.8", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1981
+ "apps.projects.unfile": { params: AppsProjectsUnfileParams, result: AppsProjectsUnfileResult, kind: "unary", since: "1.8", errors: ["NOT_FOUND", "CONFLICT", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1840
1982
  "proc.list": { params: ProcListParams, result: ProcListResult, kind: "unary", since: "1.3", errors: ["INVALID_PARAMS", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1841
1983
  "proc.ports": { params: ProcPortsParams, result: ProcPortsResult, kind: "unary", since: "1.3", errors: ["INVALID_PARAMS", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1842
1984
  "proc.kill": { params: ProcKillParams, result: ProcKillResult, kind: "unary", since: "1.3", errors: ["NOT_FOUND", "AUTH_FORBIDDEN", "PERMISSION_DENIED_OS", "INVALID_PARAMS", "INTERNAL"] },
@@ -1873,6 +2015,7 @@ var OPS = {
1873
2015
  };
1874
2016
  var EVENTS = {
1875
2017
  "fs.changed": FsChangedEvent,
2018
+ "apps.chats.changed": AppsChatsChangedEvent,
1876
2019
  "exec.exited": ExecExitedEvent,
1877
2020
  "exec.title": ExecTitleEvent,
1878
2021
  "exec.cwd": ExecCwdEvent,
@@ -2137,7 +2280,28 @@ var NAMED_SCHEMAS = {
2137
2280
  AppsProfilesRemoveParams,
2138
2281
  AppsProfilesRemoveResult,
2139
2282
  AppsOpenParams,
2140
- AppsOpenResult
2283
+ AppsOpenResult,
2284
+ ChatId,
2285
+ ChatPlace,
2286
+ ChatProjectId,
2287
+ ChatWindow,
2288
+ ChatProject,
2289
+ ChatPin,
2290
+ ChatRunning,
2291
+ ChatHidden,
2292
+ ChatLastUse,
2293
+ ChatRow,
2294
+ AppsChatsListParams,
2295
+ AppsChatsListResult,
2296
+ AppsChatsWatchParams,
2297
+ AppsChatsWatchResult,
2298
+ AppsChatsChangedEvent,
2299
+ AppsChatsStarParams,
2300
+ AppsChatsStarResult,
2301
+ AppsProjectsFileParams,
2302
+ AppsProjectsFileResult,
2303
+ AppsProjectsUnfileParams,
2304
+ AppsProjectsUnfileResult
2141
2305
  };
2142
2306
 
2143
2307
  // src/versioning.ts
@@ -2145,7 +2309,8 @@ var FIELDS_SINCE = {
2145
2309
  FsPatchResult: { edits_applied: "1.1", edits_failed: "1.1" },
2146
2310
  "ProtocolErrorBody.data": { edits_failed: "1.1" },
2147
2311
  "RelayCallResponse|0": { protocol_version: "1.1" },
2148
- "RelayCallResponse|1": { protocol_version: "1.1" }
2312
+ "RelayCallResponse|1": { protocol_version: "1.1" },
2313
+ WindowInfo: { app: "1.7", pid: "1.7" }
2149
2314
  };
2150
2315
  var NULL_SINCE = {
2151
2316
  "RelayDeviceStatusEvent.since_ms": { since: "1.1", olderPeersGet: 0 }
@@ -2199,8 +2364,28 @@ function strip(value, fields, version) {
2199
2364
  return out ?? value;
2200
2365
  }
2201
2366
  var RESULT_PATH = /* @__PURE__ */ new Map([["fs.patch", "FsPatchResult"]]);
2367
+ var WINDOW_RESULTS = /* @__PURE__ */ new Map([
2368
+ ["window.list", "windows"],
2369
+ ["window.focus", "window"],
2370
+ ["window.move", "window"]
2371
+ ]);
2372
+ function stripWindows(value, key, version) {
2373
+ if (value === null || typeof value !== "object") return value;
2374
+ const body = value;
2375
+ const inner = body[key];
2376
+ if (inner === void 0) return value;
2377
+ const fields = FIELDS_SINCE.WindowInfo;
2378
+ if (Array.isArray(inner)) {
2379
+ const next2 = inner.map((w) => strip(w, fields, version));
2380
+ return next2.some((w, i) => w !== inner[i]) ? { ...body, [key]: next2 } : value;
2381
+ }
2382
+ const next = strip(inner, fields, version);
2383
+ return next === inner ? value : { ...body, [key]: next };
2384
+ }
2202
2385
  function forPeer(op, part, value, version) {
2203
2386
  if (part === "result") {
2387
+ const windowKey = op ? WINDOW_RESULTS.get(op) : void 0;
2388
+ if (windowKey) return stripWindows(value, windowKey, version);
2204
2389
  const path = op ? RESULT_PATH.get(op) : void 0;
2205
2390
  return path ? strip(value, FIELDS_SINCE[path], version) : value;
2206
2391
  }
@@ -2216,10 +2401,10 @@ function forPeer(op, part, value, version) {
2216
2401
  }
2217
2402
  return data === body.data ? value : { ...body, data };
2218
2403
  }
2219
- var VERSIONED_RESULT_OPS = [...RESULT_PATH.keys()];
2404
+ var VERSIONED_RESULT_OPS = [...RESULT_PATH.keys(), ...WINDOW_RESULTS.keys()];
2220
2405
 
2221
2406
  // src/contract.ts
2222
- var CONTRACT_SHA256 = "2cbf3c7589a30141305f6f0f38c4d4a32bf9ef2a890f7572d9c7bd15c398d4b9";
2407
+ var CONTRACT_SHA256 = "7a5b3712fe3200b8f1051edb1cc9702e696a8d24b2033f9ea73e1a422f52dd33";
2223
2408
 
2224
2409
  // src/close-policy.ts
2225
2410
  var CLOSE_RULES = {