@agentknight/client 0.9.37 → 0.9.39

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/cli.js CHANGED
@@ -200,7 +200,7 @@ function hasDeprecatedClientEnvironment(environment) {
200
200
  return directoryAliases.some(([legacy]) => environment[legacy] !== void 0);
201
201
  }
202
202
  function isClientConfigurationKey(key) {
203
- return directoryAliases.some(([legacy]) => key === legacy) || /^(?:RELAY_|USER_ID$|AGENTKNIGHT_|PAIRING_|SESSION_REFRESH_|HEARTBEAT_|LOG_LEVEL$|SHOW_PAIRING_|PC_AGENT_|SNAPSHOT_|TIMELINE_|SECURE_MESSAGE_)/u.test(key);
203
+ return directoryAliases.some(([legacy]) => key === legacy) || /^(?:RELAY_|USER_ID$|AGENTKNIGHT_|PAIRING_|SESSION_REFRESH_|SESSION_IMAGES_|HEARTBEAT_|LOG_LEVEL$|SHOW_PAIRING_|PC_AGENT_|SNAPSHOT_|TIMELINE_|SECURE_MESSAGE_)/u.test(key);
204
204
  }
205
205
  function clearClientConfiguration(environment) {
206
206
  for (const key of Object.keys(environment)) {
@@ -484,7 +484,7 @@ ${environmentAssignment("AGENTKNIGHT_HOME", persistedHome)}
484
484
  }
485
485
 
486
486
  // src/config.ts
487
- import { z as z26 } from "zod";
487
+ import { z as z28 } from "zod";
488
488
 
489
489
  // ../../shared/protocol/dist/common/version.js
490
490
  import { z } from "zod";
@@ -1262,12 +1262,16 @@ var SESSION_DIRECTORY_MAX_DEPTH = 32;
1262
1262
  var SESSION_DIRECTORY_MAX_ENTRIES = 500;
1263
1263
  var SESSION_DIRECTORY_MAX_RESPONSE_BYTES = 128 * 1024;
1264
1264
  var SESSION_FILE_MAX_ORIGINAL_BYTES = 500 * 1024;
1265
+ var SESSION_FILE_V2_MAX_ORIGINAL_BYTES = 1024 * 1024;
1265
1266
  var SESSION_FILE_GZIP_THRESHOLD_BYTES = 20 * 1024;
1266
1267
  var SESSION_FILE_MAX_IMAGE_BYTES = 100 * 1024;
1267
1268
  var SESSION_FILE_MAX_IMAGE_PIXELS = 16 * 1024 * 1024;
1268
1269
  var SESSION_FILE_MAX_TRANSFER_BYTES = SESSION_FILE_MAX_ORIGINAL_BYTES + 1024;
1269
1270
  var SESSION_FILE_MAX_BASE64_LENGTH = Math.ceil(SESSION_FILE_MAX_TRANSFER_BYTES / 3) * 4;
1270
1271
  var SESSION_FILE_MAX_RESPONSE_BYTES = SESSION_FILE_MAX_BASE64_LENGTH + 8192;
1272
+ var SESSION_FILE_V2_MAX_TRANSFER_BYTES = SESSION_FILE_V2_MAX_ORIGINAL_BYTES + 1024;
1273
+ var SESSION_FILE_V2_MAX_BASE64_LENGTH = Math.ceil(SESSION_FILE_V2_MAX_TRANSFER_BYTES / 3) * 4;
1274
+ var SESSION_FILE_V2_MAX_RESPONSE_BYTES = SESSION_FILE_V2_MAX_BASE64_LENGTH + 8192;
1271
1275
  var SESSION_FILE_MEDIA_TYPES = [
1272
1276
  "text/plain",
1273
1277
  "text/html",
@@ -1280,6 +1284,9 @@ var SESSION_FILE_MEDIA_TYPES = [
1280
1284
  "application/yaml",
1281
1285
  "image/webp"
1282
1286
  ];
1287
+ var SESSION_FILE_VIDEO_MEDIA_TYPES = ["video/mp4", "video/webm"];
1288
+ var SESSION_FILE_V2_MEDIA_TYPES = [...SESSION_FILE_MEDIA_TYPES, ...SESSION_FILE_VIDEO_MEDIA_TYPES];
1289
+ var SESSION_FILE_MAX_VIDEO_PIXELS = 16 * 1024 * 1024;
1283
1290
  function isSafeSessionDirectoryPath(path) {
1284
1291
  if (path === "")
1285
1292
  return true;
@@ -1317,27 +1324,35 @@ var SessionFileReadDataSchema = z13.object({
1317
1324
  path: z13.string().min(1).max(SESSION_DIRECTORY_MAX_PATH_LENGTH).refine(isSafeSessionDirectoryPath),
1318
1325
  rootRevision: z13.string().regex(/^[A-Za-z0-9_-]{43}$/u)
1319
1326
  }).strict();
1320
- var SessionFileReadResultDataSchema = z13.object({
1321
- path: SessionFileReadDataSchema.shape.path,
1322
- rootRevision: SessionFileReadDataSchema.shape.rootRevision,
1323
- mediaType: z13.enum(SESSION_FILE_MEDIA_TYPES),
1324
- originalByteLength: z13.number().int().min(0).max(SESSION_FILE_MAX_ORIGINAL_BYTES),
1325
- // Canonical length after decompression, not the length of the transport bytes.
1326
- byteLength: z13.number().int().min(0).max(SESSION_FILE_MAX_ORIGINAL_BYTES),
1327
- encoding: z13.enum(["identity", "gzip"]),
1328
- data: z13.string().max(SESSION_FILE_MAX_BASE64_LENGTH)
1329
- }).strict().superRefine((result, context) => {
1330
- const invalid = () => context.addIssue({ code: "custom", message: "Invalid file content" });
1331
- if (result.encoding === "gzip" !== result.originalByteLength >= SESSION_FILE_GZIP_THRESHOLD_BYTES)
1332
- invalid();
1333
- if (result.mediaType === "image/webp" ? result.byteLength === 0 || result.byteLength > SESSION_FILE_MAX_IMAGE_BYTES || result.originalByteLength === 0 : result.byteLength !== result.originalByteLength)
1334
- invalid();
1335
- const base64 = result.data;
1336
- const padding = base64.endsWith("==") ? 2 : base64.endsWith("=") ? 1 : 0;
1337
- const length = base64.length / 4 * 3 - padding;
1338
- if (base64.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(base64) || length > SESSION_FILE_MAX_TRANSFER_BYTES || padding === 2 && !/[AQgw]==$/u.test(base64) || padding === 1 && !/[AEIMQUYcgkosw048]=$/u.test(base64) || (result.encoding === "identity" ? length !== result.byteLength : length < 20))
1339
- invalid();
1340
- });
1327
+ function fileResultSchema(mediaTypes, extended) {
1328
+ const maxOriginal = extended ? SESSION_FILE_V2_MAX_ORIGINAL_BYTES : SESSION_FILE_MAX_ORIGINAL_BYTES;
1329
+ const maxTransfer = extended ? SESSION_FILE_V2_MAX_TRANSFER_BYTES : SESSION_FILE_MAX_TRANSFER_BYTES;
1330
+ return z13.object({
1331
+ path: SessionFileReadDataSchema.shape.path,
1332
+ rootRevision: SessionFileReadDataSchema.shape.rootRevision,
1333
+ mediaType: z13.enum(mediaTypes),
1334
+ originalByteLength: z13.number().int().min(0).max(maxOriginal),
1335
+ // Canonical length after decompression, not the length of the transport bytes.
1336
+ byteLength: z13.number().int().min(0).max(maxOriginal),
1337
+ encoding: z13.enum(["identity", "gzip"]),
1338
+ data: z13.string().max(extended ? SESSION_FILE_V2_MAX_BASE64_LENGTH : SESSION_FILE_MAX_BASE64_LENGTH)
1339
+ }).strict().superRefine((result, context) => {
1340
+ const invalid = () => context.addIssue({ code: "custom", message: "Invalid file content" });
1341
+ if (result.encoding === "gzip" !== result.originalByteLength >= SESSION_FILE_GZIP_THRESHOLD_BYTES)
1342
+ invalid();
1343
+ if (result.mediaType === "image/webp" ? result.byteLength === 0 || result.byteLength > SESSION_FILE_MAX_IMAGE_BYTES || result.originalByteLength === 0 : result.byteLength !== result.originalByteLength)
1344
+ invalid();
1345
+ if (result.mediaType.startsWith("video/") && (result.byteLength === 0 || !result.path.toLowerCase().endsWith(result.mediaType === "video/mp4" ? ".mp4" : ".webm")))
1346
+ invalid();
1347
+ const base64 = result.data;
1348
+ const padding = base64.endsWith("==") ? 2 : base64.endsWith("=") ? 1 : 0;
1349
+ const length = base64.length / 4 * 3 - padding;
1350
+ if (base64.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(base64) || length > maxTransfer || padding === 2 && !/[AQgw]==$/u.test(base64) || padding === 1 && !/[AEIMQUYcgkosw048]=$/u.test(base64) || (result.encoding === "identity" ? length !== result.byteLength : length < 20))
1351
+ invalid();
1352
+ });
1353
+ }
1354
+ var SessionFileReadResultDataSchema = fileResultSchema(SESSION_FILE_MEDIA_TYPES, false);
1355
+ var SessionFileReadV2ResultDataSchema = fileResultSchema(SESSION_FILE_V2_MEDIA_TYPES, true);
1341
1356
  var SessionGitProjectSchema = z13.object({
1342
1357
  localRepositoryKey: z13.string().length(43).regex(/^[A-Za-z0-9_-]{43}$/),
1343
1358
  worktreeRoot: z13.string().min(1).max(SESSION_PROJECT_IDENTITY_MAX_PATH_LENGTH),
@@ -1349,8 +1364,66 @@ var SessionProjectIdentityResultDataSchema = z13.object({
1349
1364
  project: SessionGitProjectSchema.optional()
1350
1365
  }).strict();
1351
1366
 
1352
- // ../../shared/protocol/dist/sessions/session-resource.js
1367
+ // ../../shared/protocol/dist/sessions/session-git-diff.js
1353
1368
  import { z as z14 } from "zod";
1369
+ var SESSION_GIT_DIFF_GZIP_MIN_BYTES = 2 * 1024;
1370
+ var SESSION_GIT_DIFF_MAX_FILES = 500;
1371
+ var SESSION_GIT_DIFF_MAX_PATCH_BYTES = 128 * 1024;
1372
+ var SESSION_GIT_DIFF_MAX_RESPONSE_BYTES = 512 * 1024;
1373
+ var SESSION_GIT_DIFF_MAX_TRANSFER_BYTES = SESSION_GIT_DIFF_MAX_RESPONSE_BYTES + 1024;
1374
+ var SESSION_GIT_DIFF_MAX_BASE64_LENGTH = Math.ceil(SESSION_GIT_DIFF_MAX_TRANSFER_BYTES / 3) * 4;
1375
+ var SESSION_GIT_DIFF_MAX_GZIP_RESPONSE_BYTES = SESSION_GIT_DIFF_MAX_BASE64_LENGTH + 1024;
1376
+ var commitSchema = z14.string().regex(/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u);
1377
+ var SessionGitDiffDataSchema = z14.object({
1378
+ rootRevision: SessionFileReadDataSchema.shape.rootRevision,
1379
+ path: SessionFileReadDataSchema.shape.path.optional(),
1380
+ baseCommit: commitSchema.optional()
1381
+ }).strict().refine((value) => value.path === void 0 === (value.baseCommit === void 0), "A file diff must identify its listed base commit");
1382
+ var SessionGitDiffEntrySchema = z14.object({
1383
+ path: SessionFileReadDataSchema.shape.path,
1384
+ status: z14.enum(["added", "modified", "deleted", "untracked"])
1385
+ }).strict();
1386
+ var SessionGitDiffResultDataSchema = z14.object({
1387
+ rootRevision: SessionFileReadDataSchema.shape.rootRevision,
1388
+ baseRef: z14.enum(["origin/main", "main"]),
1389
+ baseCommit: commitSchema,
1390
+ files: z14.array(SessionGitDiffEntrySchema).max(SESSION_GIT_DIFF_MAX_FILES).optional(),
1391
+ path: SessionFileReadDataSchema.shape.path.optional(),
1392
+ patch: z14.string().max(SESSION_GIT_DIFF_MAX_PATCH_BYTES).optional(),
1393
+ binary: z14.boolean().optional()
1394
+ }).strict().superRefine((value, context) => {
1395
+ const encoder = new TextEncoder();
1396
+ if (value.patch !== void 0 && encoder.encode(value.patch).length > SESSION_GIT_DIFF_MAX_PATCH_BYTES || encoder.encode(JSON.stringify(value)).length > SESSION_GIT_DIFF_MAX_RESPONSE_BYTES) {
1397
+ context.addIssue({ code: "custom", message: "Git diff exceeds its transfer limit" });
1398
+ }
1399
+ if (value.path === void 0) {
1400
+ if (value.files === void 0 || value.patch !== void 0 || value.binary !== void 0 || new Set(value.files?.map((entry) => entry.path)).size !== value.files?.length) {
1401
+ context.addIssue({ code: "custom", message: "Expected a unique changed-file list" });
1402
+ }
1403
+ } else if (value.files !== void 0 || value.patch === void 0 || value.binary === void 0 || value.binary && value.patch !== "") {
1404
+ context.addIssue({ code: "custom", message: "Expected a text patch or an explicit binary change" });
1405
+ }
1406
+ });
1407
+ var SessionGitDiffGzipResultDataSchema = z14.object({
1408
+ encoding: z14.literal("gzip"),
1409
+ byteLength: z14.number().int().min(1).max(SESSION_GIT_DIFF_MAX_RESPONSE_BYTES),
1410
+ data: z14.string().max(SESSION_GIT_DIFF_MAX_BASE64_LENGTH).regex(/^[A-Za-z0-9+/]*={0,2}$/u)
1411
+ }).strict().superRefine((value, context) => {
1412
+ const padding = value.data.endsWith("==") ? 2 : value.data.endsWith("=") ? 1 : 0;
1413
+ const bytes = value.data.length / 4 * 3 - padding;
1414
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1415
+ const tail = alphabet.indexOf(value.data[value.data.length - padding - 1] ?? "");
1416
+ if (value.data.length % 4 !== 0 || bytes < 20 || bytes > SESSION_GIT_DIFF_MAX_TRANSFER_BYTES || padding === 2 && (tail & 15) !== 0 || padding === 1 && (tail & 3) !== 0) {
1417
+ context.addIssue({ code: "custom", message: "Invalid gzip transfer" });
1418
+ }
1419
+ });
1420
+ var SessionGitDiffV2ResultDataSchema = z14.union([
1421
+ SessionGitDiffResultDataSchema,
1422
+ SessionGitDiffGzipResultDataSchema
1423
+ ]);
1424
+
1425
+ // ../../shared/protocol/dist/sessions/session-resource.js
1426
+ import { z as z15 } from "zod";
1354
1427
  var SESSION_RESOURCE_MAX_ORIGINAL_BYTES = 499999;
1355
1428
  var SESSION_RESOURCE_GZIP_THRESHOLD_BYTES = 20 * 1024;
1356
1429
  var SESSION_RESOURCE_MAX_IMAGE_PIXELS = 16 * 1024 * 1024;
@@ -1364,18 +1437,18 @@ var SESSION_RESOURCE_MEDIA_TYPES = [
1364
1437
  "text/css",
1365
1438
  "text/javascript"
1366
1439
  ];
1367
- var SessionResourceReadDataSchema = z14.object({
1368
- path: z14.string().min(1).max(SESSION_DIRECTORY_MAX_PATH_LENGTH).refine(isSafeSessionDirectoryPath),
1369
- rootRevision: z14.string().regex(/^[A-Za-z0-9_-]{43}$/u)
1440
+ var SessionResourceReadDataSchema = z15.object({
1441
+ path: z15.string().min(1).max(SESSION_DIRECTORY_MAX_PATH_LENGTH).refine(isSafeSessionDirectoryPath),
1442
+ rootRevision: z15.string().regex(/^[A-Za-z0-9_-]{43}$/u)
1370
1443
  }).strict();
1371
- var SessionResourceReadResultDataSchema = z14.object({
1444
+ var SessionResourceReadResultDataSchema = z15.object({
1372
1445
  path: SessionResourceReadDataSchema.shape.path,
1373
1446
  rootRevision: SessionResourceReadDataSchema.shape.rootRevision,
1374
- mediaType: z14.enum(SESSION_RESOURCE_MEDIA_TYPES),
1375
- originalByteLength: z14.number().int().min(0).max(SESSION_RESOURCE_MAX_ORIGINAL_BYTES),
1376
- byteLength: z14.number().int().min(0).max(SESSION_RESOURCE_MAX_ORIGINAL_BYTES),
1377
- encoding: z14.enum(["identity", "gzip"]),
1378
- data: z14.string().max(SESSION_RESOURCE_MAX_BASE64_LENGTH)
1447
+ mediaType: z15.enum(SESSION_RESOURCE_MEDIA_TYPES),
1448
+ originalByteLength: z15.number().int().min(0).max(SESSION_RESOURCE_MAX_ORIGINAL_BYTES),
1449
+ byteLength: z15.number().int().min(0).max(SESSION_RESOURCE_MAX_ORIGINAL_BYTES),
1450
+ encoding: z15.enum(["identity", "gzip"]),
1451
+ data: z15.string().max(SESSION_RESOURCE_MAX_BASE64_LENGTH)
1379
1452
  }).strict().superRefine((result, context) => {
1380
1453
  const invalid = () => context.addIssue({ code: "custom", message: "Invalid resource content" });
1381
1454
  if (result.encoding === "gzip" !== result.originalByteLength >= SESSION_RESOURCE_GZIP_THRESHOLD_BYTES || result.byteLength !== result.originalByteLength || result.mediaType.startsWith("image/") && result.byteLength === 0)
@@ -1387,54 +1460,116 @@ var SessionResourceReadResultDataSchema = z14.object({
1387
1460
  invalid();
1388
1461
  });
1389
1462
 
1463
+ // ../../shared/protocol/dist/sessions/session-images.js
1464
+ import { z as z16 } from "zod";
1465
+ var SESSION_IMAGE_MAX_BYTES = 3 * 1024 * 1024;
1466
+ var SESSION_IMAGE_MAX_PIXELS = 16 * 1024 * 1024;
1467
+ var SessionImageIdSchema = z16.uuid();
1468
+ var SessionImageTransferModeSchema = z16.enum(["direct", "proxy"]);
1469
+ var DirectUrlSchema = z16.string().regex(/^https:\/\/[^/?#@\\\s\x00-\x1f\x7f]+(?:[/?][^#\\\s\x00-\x1f\x7f]*)?$/u).refine((raw) => {
1470
+ if (!URL.canParse(raw))
1471
+ return false;
1472
+ const url = new URL(raw);
1473
+ return url.protocol === "https:" && url.username === "" && url.password === "" && url.hash === "";
1474
+ }, "Direct transfers require HTTPS without userinfo, fragments or unsafe characters");
1475
+ var ProxyUrlSchema = z16.string().regex(/^\/api\/v3\/session-images\/[0-9a-f-]+\/content\?[^#\\\s\x00-\x1f\x7f]+$/u);
1476
+ var SessionImageTransferHeadersSchema = z16.record(z16.string().regex(/^(?:content-type|if-none-match|x-ms-blob-type)$/u), z16.string().min(1).max(256).regex(/^[\x20-\x7e]+$/u));
1477
+ var SessionImageUploadRequestSchema = z16.object({
1478
+ machineId: IdSchema,
1479
+ sessionId: IdSchema,
1480
+ sizeBytes: z16.number().int().min(1).max(SESSION_IMAGE_MAX_BYTES)
1481
+ }).strict();
1482
+ var SessionImageScopeSchema = z16.object({
1483
+ machineId: IdSchema,
1484
+ sessionId: IdSchema
1485
+ }).strict();
1486
+ var UploadResultFields = {
1487
+ imageId: SessionImageIdSchema,
1488
+ uploadExpiresAt: z16.number().int().positive(),
1489
+ method: z16.literal("PUT"),
1490
+ contentType: z16.literal("image/webp"),
1491
+ headers: SessionImageTransferHeadersSchema.refine((headers) => headers["content-type"] === "image/webp")
1492
+ };
1493
+ var SessionImageUploadResultSchema = z16.discriminatedUnion("mode", [
1494
+ z16.object({ ...UploadResultFields, mode: z16.literal("direct"), uploadUrl: DirectUrlSchema }).strict(),
1495
+ z16.object({ ...UploadResultFields, mode: z16.literal("proxy"), uploadUrl: ProxyUrlSchema }).strict()
1496
+ ]);
1497
+ var SessionImageCommitResultSchema = z16.object({
1498
+ imageId: SessionImageIdSchema,
1499
+ machineId: IdSchema,
1500
+ sessionId: IdSchema,
1501
+ sizeBytes: z16.number().int().min(1).max(SESSION_IMAGE_MAX_BYTES),
1502
+ width: z16.number().int().positive(),
1503
+ height: z16.number().int().positive(),
1504
+ sha256: z16.string().regex(/^[a-f0-9]{64}$/u),
1505
+ expiresAt: z16.number().int().positive()
1506
+ }).strict();
1507
+ var DownloadResultFields = {
1508
+ image: SessionImageCommitResultSchema,
1509
+ downloadExpiresAt: z16.number().int().positive(),
1510
+ method: z16.literal("GET"),
1511
+ headers: SessionImageTransferHeadersSchema
1512
+ };
1513
+ var SessionImageDownloadResultSchema = z16.discriminatedUnion("mode", [
1514
+ z16.object({ ...DownloadResultFields, mode: z16.literal("direct"), downloadUrl: DirectUrlSchema }).strict(),
1515
+ z16.object({ ...DownloadResultFields, mode: z16.literal("proxy"), downloadUrl: ProxyUrlSchema }).strict()
1516
+ ]);
1517
+ var TimelineImageBlobRequestSchema = z16.object({
1518
+ sha256: z16.string().regex(/^[a-f0-9]{64}$/u)
1519
+ }).strict();
1520
+ var TimelineImageBlobResultSchema = z16.object({
1521
+ sha256: TimelineImageBlobRequestSchema.shape.sha256,
1522
+ image: SessionImageCommitResultSchema
1523
+ }).strict();
1524
+
1390
1525
  // ../../shared/protocol/dist/sessions/session-rename.js
1391
- import { z as z15 } from "zod";
1526
+ import { z as z17 } from "zod";
1392
1527
  var SESSION_RENAME_OPERATION = "session.rename";
1393
1528
  var SESSION_RENAME_VERSION = 1;
1394
1529
  var SESSION_RENAME_CAPABILITY = sessionCommunicationOperationCapability(SESSION_RENAME_OPERATION, SESSION_RENAME_VERSION);
1395
1530
  var SESSION_NAME_MAX_LENGTH = 100;
1396
- var SessionNameSchema = z15.string().regex(/^[^\u0000-\u001f\u007f]*$/u).trim().min(1).max(SESSION_NAME_MAX_LENGTH);
1397
- var SessionRenameDataSchema = z15.object({ name: SessionNameSchema }).strict();
1398
- var SessionRenameResultDataSchema = z15.object({ name: SessionNameSchema }).strict();
1531
+ var SessionNameSchema = z17.string().regex(/^[^\u0000-\u001f\u007f]*$/u).trim().min(1).max(SESSION_NAME_MAX_LENGTH);
1532
+ var SessionRenameDataSchema = z17.object({ name: SessionNameSchema }).strict();
1533
+ var SessionRenameResultDataSchema = z17.object({ name: SessionNameSchema }).strict();
1399
1534
 
1400
1535
  // ../../shared/protocol/dist/sessions/sessions.js
1401
- import { z as z16 } from "zod";
1402
- var GroupChatParticipantSchema = z16.object({
1536
+ import { z as z18 } from "zod";
1537
+ var GroupChatParticipantSchema = z18.object({
1403
1538
  sessionId: IdSchema,
1404
- title: z16.string().trim().min(1).max(260)
1539
+ title: z18.string().trim().min(1).max(260)
1405
1540
  }).strict();
1406
- var GroupChatInfoSchema = z16.object({
1407
- participants: z16.array(GroupChatParticipantSchema).length(2).refine((participants) => new Set(participants.map((participant) => participant.sessionId)).size === 2, "A group requires two different sessions"),
1408
- state: z16.enum(["ready", "running", "paused", "blocked"])
1541
+ var GroupChatInfoSchema = z18.object({
1542
+ participants: z18.array(GroupChatParticipantSchema).length(2).refine((participants) => new Set(participants.map((participant) => participant.sessionId)).size === 2, "A group requires two different sessions"),
1543
+ state: z18.enum(["ready", "running", "paused", "blocked"])
1409
1544
  }).strict();
1410
- var SessionSummarySchema = z16.object({
1545
+ var SessionSummarySchema = z18.object({
1411
1546
  userId: IdSchema,
1412
1547
  sessionId: IdSchema,
1413
1548
  machineId: IdSchema,
1414
- summary: z16.string().max(4096).optional(),
1415
- renameSupported: z16.boolean().optional(),
1416
- workingDirectory: z16.string().max(32768).optional(),
1417
- gitRoot: z16.string().max(32768).optional(),
1418
- repository: z16.string().max(1024).optional(),
1419
- gitRemoteUrl: z16.string().max(32768).optional(),
1420
- branch: z16.string().max(1024).optional(),
1421
- isRemote: z16.boolean(),
1549
+ summary: z18.string().max(4096).optional(),
1550
+ renameSupported: z18.boolean().optional(),
1551
+ workingDirectory: z18.string().max(32768).optional(),
1552
+ gitRoot: z18.string().max(32768).optional(),
1553
+ repository: z18.string().max(1024).optional(),
1554
+ gitRemoteUrl: z18.string().max(32768).optional(),
1555
+ branch: z18.string().max(1024).optional(),
1556
+ isRemote: z18.boolean(),
1422
1557
  createdAt: IsoDateSchema,
1423
1558
  modifiedAt: IsoDateSchema,
1424
1559
  groupChat: GroupChatInfoSchema.optional()
1425
1560
  });
1426
- var SessionsSnapshotSchema = z16.object({
1561
+ var SessionsSnapshotSchema = z18.object({
1427
1562
  userId: IdSchema,
1428
1563
  machineId: IdSchema,
1429
- machineName: z16.string().trim().min(1).max(120),
1430
- platform: z16.string().trim().min(1).max(64),
1564
+ machineName: z18.string().trim().min(1).max(120),
1565
+ platform: z18.string().trim().min(1).max(64),
1431
1566
  agentRunId: IdSchema,
1432
- sequence: z16.number().int().positive(),
1567
+ sequence: z18.number().int().positive(),
1433
1568
  generatedAt: IsoDateSchema,
1434
- complete: z16.boolean(),
1435
- totalCount: z16.number().int().nonnegative(),
1436
- nextCursor: z16.string().min(1).max(1024).optional(),
1437
- sessions: z16.array(SessionSummarySchema)
1569
+ complete: z18.boolean(),
1570
+ totalCount: z18.number().int().nonnegative(),
1571
+ nextCursor: z18.string().min(1).max(1024).optional(),
1572
+ sessions: z18.array(SessionSummarySchema)
1438
1573
  }).superRefine((snapshot, context) => {
1439
1574
  if (snapshot.totalCount < snapshot.sessions.length) {
1440
1575
  context.addIssue({
@@ -1476,47 +1611,47 @@ var SessionsSnapshotSchema = z16.object({
1476
1611
  sessionIds.add(session.sessionId);
1477
1612
  }
1478
1613
  });
1479
- var SessionListRequestSchema = z16.object({
1614
+ var SessionListRequestSchema = z18.object({
1480
1615
  requestId: IdSchema,
1481
1616
  machineId: IdSchema,
1482
- cursor: z16.string().min(1).max(1024).optional()
1617
+ cursor: z18.string().min(1).max(1024).optional()
1483
1618
  });
1484
- var SessionListResultSchema = z16.discriminatedUnion("ok", [
1485
- z16.object({
1486
- ok: z16.literal(true),
1619
+ var SessionListResultSchema = z18.discriminatedUnion("ok", [
1620
+ z18.object({
1621
+ ok: z18.literal(true),
1487
1622
  requestId: IdSchema,
1488
1623
  machineId: IdSchema,
1489
1624
  snapshot: SessionsSnapshotSchema
1490
1625
  }),
1491
- z16.object({
1492
- ok: z16.literal(false),
1626
+ z18.object({
1627
+ ok: z18.literal(false),
1493
1628
  requestId: IdSchema,
1494
1629
  machineId: IdSchema,
1495
1630
  error: ProtocolFailureSchema
1496
1631
  })
1497
1632
  ]);
1498
- var SessionAgentModeSchema = z16.enum([
1633
+ var SessionAgentModeSchema = z18.enum([
1499
1634
  "interactive",
1500
1635
  "plan",
1501
1636
  "autopilot"
1502
1637
  ]);
1503
- var AgentConfigurationOptionSchema = z16.object({
1638
+ var AgentConfigurationOptionSchema = z18.object({
1504
1639
  id: IdSchema,
1505
- name: z16.string().trim().min(1).max(260),
1506
- value: z16.string().min(1).max(256),
1507
- options: z16.array(z16.object({
1508
- value: z16.string().min(1).max(256),
1509
- name: z16.string().trim().min(1).max(260)
1640
+ name: z18.string().trim().min(1).max(260),
1641
+ value: z18.string().min(1).max(256),
1642
+ options: z18.array(z18.object({
1643
+ value: z18.string().min(1).max(256),
1644
+ name: z18.string().trim().min(1).max(260)
1510
1645
  }).strict()).min(1).max(100)
1511
1646
  }).strict();
1512
- var AgentConfigurationChangeSchema = z16.object({
1647
+ var AgentConfigurationChangeSchema = z18.object({
1513
1648
  id: IdSchema,
1514
- value: z16.string().min(1).max(256)
1649
+ value: z18.string().min(1).max(256)
1515
1650
  }).strict();
1516
- var WorkspaceOptionSchema = z16.object({
1651
+ var WorkspaceOptionSchema = z18.object({
1517
1652
  id: IdSchema,
1518
- name: z16.string().trim().min(1).max(260),
1519
- path: z16.string().trim().min(1).max(32768)
1653
+ name: z18.string().trim().min(1).max(260),
1654
+ path: z18.string().trim().min(1).max(32768)
1520
1655
  });
1521
1656
  var REASONING_EFFORTS = [
1522
1657
  "low",
@@ -1525,112 +1660,112 @@ var REASONING_EFFORTS = [
1525
1660
  "xhigh",
1526
1661
  "max"
1527
1662
  ];
1528
- var ReasoningEffortSchema = z16.enum(REASONING_EFFORTS);
1529
- var CopilotModelOptionSchema = z16.object({
1663
+ var ReasoningEffortSchema = z18.enum(REASONING_EFFORTS);
1664
+ var CopilotModelOptionSchema = z18.object({
1530
1665
  id: IdSchema,
1531
- name: z16.string().trim().min(1).max(260),
1532
- isDefault: z16.boolean(),
1533
- supportedReasoningEfforts: z16.array(ReasoningEffortSchema).optional(),
1666
+ name: z18.string().trim().min(1).max(260),
1667
+ isDefault: z18.boolean(),
1668
+ supportedReasoningEfforts: z18.array(ReasoningEffortSchema).optional(),
1534
1669
  defaultReasoningEffort: ReasoningEffortSchema.optional(),
1535
- creation: z16.object({
1670
+ creation: z18.object({
1536
1671
  agentId: IdSchema,
1537
- agentName: z16.string().trim().min(1).max(260),
1538
- modelName: z16.string().trim().min(1).max(260),
1539
- agentModes: z16.array(SessionAgentModeSchema).min(1),
1540
- reasoningEffortConfigurationSupported: z16.boolean(),
1541
- isDefault: z16.boolean()
1672
+ agentName: z18.string().trim().min(1).max(260),
1673
+ modelName: z18.string().trim().min(1).max(260),
1674
+ agentModes: z18.array(SessionAgentModeSchema).min(1),
1675
+ reasoningEffortConfigurationSupported: z18.boolean(),
1676
+ isDefault: z18.boolean()
1542
1677
  }).strict().optional()
1543
1678
  });
1544
- var SessionReasoningEffortSchema = z16.enum([
1679
+ var SessionReasoningEffortSchema = z18.enum([
1545
1680
  "default",
1546
1681
  ...REASONING_EFFORTS
1547
1682
  ]);
1548
- var CurrentReasoningEffortSchema = z16.string().trim().min(1).max(64);
1549
- var SessionToolInfoSchema = z16.object({
1550
- name: z16.string().trim().min(1).max(260),
1551
- description: z16.string().trim().min(1).max(4096).optional(),
1552
- deferred: z16.boolean().optional()
1683
+ var CurrentReasoningEffortSchema = z18.string().trim().min(1).max(64);
1684
+ var SessionToolInfoSchema = z18.object({
1685
+ name: z18.string().trim().min(1).max(260),
1686
+ description: z18.string().trim().min(1).max(4096).optional(),
1687
+ deferred: z18.boolean().optional()
1553
1688
  });
1554
- var SessionSlashCommandInfoSchema = z16.object({
1555
- name: z16.string().trim().min(1).max(260),
1556
- description: z16.string().trim().min(1).max(4096).optional(),
1557
- kind: z16.enum(["builtin", "skill", "client"])
1689
+ var SessionSlashCommandInfoSchema = z18.object({
1690
+ name: z18.string().trim().min(1).max(260),
1691
+ description: z18.string().trim().min(1).max(4096).optional(),
1692
+ kind: z18.enum(["builtin", "skill", "client"])
1558
1693
  });
1559
- var SessionSkillInfoSchema = z16.object({
1560
- name: z16.string().trim().min(1).max(260),
1561
- description: z16.string().trim().min(1).max(4096).optional(),
1562
- source: z16.string().trim().min(1).max(260),
1563
- enabled: z16.boolean(),
1564
- userInvocable: z16.boolean(),
1565
- commandName: z16.string().trim().min(1).max(260).optional()
1694
+ var SessionSkillInfoSchema = z18.object({
1695
+ name: z18.string().trim().min(1).max(260),
1696
+ description: z18.string().trim().min(1).max(4096).optional(),
1697
+ source: z18.string().trim().min(1).max(260),
1698
+ enabled: z18.boolean(),
1699
+ userInvocable: z18.boolean(),
1700
+ commandName: z18.string().trim().min(1).max(260).optional()
1566
1701
  });
1567
- var SessionEnvironmentInfoSchema = z16.object({
1568
- tools: z16.array(SessionToolInfoSchema).max(512),
1569
- slashCommands: z16.array(SessionSlashCommandInfoSchema).max(512),
1570
- skills: z16.array(SessionSkillInfoSchema).max(512)
1702
+ var SessionEnvironmentInfoSchema = z18.object({
1703
+ tools: z18.array(SessionToolInfoSchema).max(512),
1704
+ slashCommands: z18.array(SessionSlashCommandInfoSchema).max(512),
1705
+ skills: z18.array(SessionSkillInfoSchema).max(512)
1571
1706
  });
1572
- var SessionOptionsRequestSchema = z16.object({
1707
+ var SessionOptionsRequestSchema = z18.object({
1573
1708
  requestId: IdSchema,
1574
1709
  machineId: IdSchema,
1575
1710
  sessionId: IdSchema.optional(),
1576
1711
  workspaceId: IdSchema.optional(),
1577
- capabilities: z16.array(IdSchema).max(64).optional()
1712
+ capabilities: z18.array(IdSchema).max(64).optional()
1578
1713
  });
1579
- var SessionOptionsResultSchema = z16.discriminatedUnion("ok", [
1580
- z16.object({
1581
- ok: z16.literal(true),
1714
+ var SessionOptionsResultSchema = z18.discriminatedUnion("ok", [
1715
+ z18.object({
1716
+ ok: z18.literal(true),
1582
1717
  requestId: IdSchema,
1583
1718
  machineId: IdSchema,
1584
1719
  sessionId: IdSchema.optional(),
1585
- workspaces: z16.array(WorkspaceOptionSchema),
1586
- models: z16.array(CopilotModelOptionSchema).min(1),
1587
- modelRefreshError: z16.string().min(1).max(4096).optional(),
1588
- agentModes: z16.array(SessionAgentModeSchema).min(1),
1589
- reasoningEffortConfigurationSupported: z16.literal(true).optional(),
1590
- fileAttachmentsSupported: z16.boolean().optional(),
1591
- worktreeCreationSupported: z16.literal(true).optional(),
1592
- worktreeBranches: z16.array(z16.string().min(1).max(1024)).optional(),
1593
- worktreeCurrentBranch: z16.string().min(1).max(1024).optional(),
1720
+ workspaces: z18.array(WorkspaceOptionSchema),
1721
+ models: z18.array(CopilotModelOptionSchema).min(1),
1722
+ modelRefreshError: z18.string().min(1).max(4096).optional(),
1723
+ agentModes: z18.array(SessionAgentModeSchema).min(1),
1724
+ reasoningEffortConfigurationSupported: z18.literal(true).optional(),
1725
+ fileAttachmentsSupported: z18.boolean().optional(),
1726
+ worktreeCreationSupported: z18.literal(true).optional(),
1727
+ worktreeBranches: z18.array(z18.string().min(1).max(1024)).optional(),
1728
+ worktreeCurrentBranch: z18.string().min(1).max(1024).optional(),
1594
1729
  currentModelId: IdSchema.optional(),
1595
1730
  currentAgentMode: SessionAgentModeSchema.optional(),
1596
1731
  currentReasoningEffort: CurrentReasoningEffortSchema.optional(),
1597
1732
  environment: SessionEnvironmentInfoSchema.optional(),
1598
- agentName: z16.string().trim().min(1).max(260).optional(),
1599
- configOptions: z16.array(AgentConfigurationOptionSchema).max(32).optional()
1733
+ agentName: z18.string().trim().min(1).max(260).optional(),
1734
+ configOptions: z18.array(AgentConfigurationOptionSchema).max(32).optional()
1600
1735
  }),
1601
- z16.object({
1602
- ok: z16.literal(false),
1736
+ z18.object({
1737
+ ok: z18.literal(false),
1603
1738
  requestId: IdSchema,
1604
1739
  machineId: IdSchema,
1605
1740
  sessionId: IdSchema.optional(),
1606
1741
  error: ProtocolFailureSchema,
1607
- failureStage: z16.enum(["models", "configuration", "workspaces"]).optional(),
1608
- models: z16.array(CopilotModelOptionSchema).min(1).optional(),
1609
- agentModes: z16.array(SessionAgentModeSchema).min(1).optional(),
1610
- reasoningEffortConfigurationSupported: z16.literal(true).optional(),
1611
- fileAttachmentsSupported: z16.boolean().optional(),
1742
+ failureStage: z18.enum(["models", "configuration", "workspaces"]).optional(),
1743
+ models: z18.array(CopilotModelOptionSchema).min(1).optional(),
1744
+ agentModes: z18.array(SessionAgentModeSchema).min(1).optional(),
1745
+ reasoningEffortConfigurationSupported: z18.literal(true).optional(),
1746
+ fileAttachmentsSupported: z18.boolean().optional(),
1612
1747
  currentModelId: IdSchema.optional(),
1613
1748
  currentAgentMode: SessionAgentModeSchema.optional(),
1614
1749
  currentReasoningEffort: CurrentReasoningEffortSchema.optional(),
1615
- agentName: z16.string().trim().min(1).max(260).optional(),
1616
- configOptions: z16.array(AgentConfigurationOptionSchema).max(32).optional()
1750
+ agentName: z18.string().trim().min(1).max(260).optional(),
1751
+ configOptions: z18.array(AgentConfigurationOptionSchema).max(32).optional()
1617
1752
  })
1618
1753
  ]);
1619
- var SessionCreateRequestSchema = z16.object({
1754
+ var SessionCreateRequestSchema = z18.object({
1620
1755
  requestId: IdSchema,
1621
1756
  machineId: IdSchema,
1622
1757
  workspaceId: IdSchema,
1623
1758
  modelId: IdSchema,
1624
1759
  agentMode: SessionAgentModeSchema,
1625
1760
  reasoningEffort: SessionReasoningEffortSchema.optional(),
1626
- worktree: z16.object({
1627
- branchName: z16.string().trim().min(1).max(120).optional(),
1628
- baseBranch: z16.string().trim().min(1).max(1024).optional()
1761
+ worktree: z18.object({
1762
+ branchName: z18.string().trim().min(1).max(120).optional(),
1763
+ baseBranch: z18.string().trim().min(1).max(1024).optional()
1629
1764
  }).strict().optional()
1630
1765
  });
1631
- var SessionCreateResultSchema = z16.discriminatedUnion("ok", [
1632
- z16.object({
1633
- ok: z16.literal(true),
1766
+ var SessionCreateResultSchema = z18.discriminatedUnion("ok", [
1767
+ z18.object({
1768
+ ok: z18.literal(true),
1634
1769
  requestId: IdSchema,
1635
1770
  machineId: IdSchema,
1636
1771
  session: SessionSummarySchema,
@@ -1638,34 +1773,34 @@ var SessionCreateResultSchema = z16.discriminatedUnion("ok", [
1638
1773
  agentMode: SessionAgentModeSchema,
1639
1774
  reasoningEffort: SessionReasoningEffortSchema.optional()
1640
1775
  }),
1641
- z16.object({
1642
- ok: z16.literal(false),
1776
+ z18.object({
1777
+ ok: z18.literal(false),
1643
1778
  requestId: IdSchema,
1644
1779
  machineId: IdSchema,
1645
1780
  error: ProtocolFailureSchema
1646
1781
  })
1647
1782
  ]);
1648
- var SessionDeleteRequestSchema = z16.object({
1783
+ var SessionDeleteRequestSchema = z18.object({
1649
1784
  requestId: IdSchema,
1650
1785
  machineId: IdSchema,
1651
1786
  sessionId: IdSchema
1652
1787
  }).strict();
1653
- var SessionDeleteResultSchema = z16.discriminatedUnion("ok", [
1654
- z16.object({
1655
- ok: z16.literal(true),
1788
+ var SessionDeleteResultSchema = z18.discriminatedUnion("ok", [
1789
+ z18.object({
1790
+ ok: z18.literal(true),
1656
1791
  requestId: IdSchema,
1657
1792
  machineId: IdSchema,
1658
1793
  sessionId: IdSchema
1659
1794
  }).strict(),
1660
- z16.object({
1661
- ok: z16.literal(false),
1795
+ z18.object({
1796
+ ok: z18.literal(false),
1662
1797
  requestId: IdSchema,
1663
1798
  machineId: IdSchema,
1664
1799
  sessionId: IdSchema,
1665
1800
  error: ProtocolFailureSchema
1666
1801
  }).strict()
1667
1802
  ]);
1668
- var SessionConfigureRequestSchema = z16.object({
1803
+ var SessionConfigureRequestSchema = z18.object({
1669
1804
  requestId: IdSchema,
1670
1805
  machineId: IdSchema,
1671
1806
  sessionId: IdSchema,
@@ -1674,59 +1809,59 @@ var SessionConfigureRequestSchema = z16.object({
1674
1809
  reasoningEffort: SessionReasoningEffortSchema.optional(),
1675
1810
  configOption: AgentConfigurationChangeSchema.optional()
1676
1811
  }).refine((request) => request.modelId !== void 0 || request.agentMode !== void 0 || request.reasoningEffort !== void 0 || request.configOption !== void 0, { message: "A modelId, agentMode, reasoningEffort, or configOption change is required" });
1677
- var SessionConfigureResultSchema = z16.discriminatedUnion("ok", [
1678
- z16.object({
1679
- ok: z16.literal(true),
1812
+ var SessionConfigureResultSchema = z18.discriminatedUnion("ok", [
1813
+ z18.object({
1814
+ ok: z18.literal(true),
1680
1815
  requestId: IdSchema,
1681
1816
  machineId: IdSchema,
1682
1817
  sessionId: IdSchema,
1683
1818
  modelId: IdSchema.optional(),
1684
1819
  agentMode: SessionAgentModeSchema,
1685
1820
  reasoningEffort: CurrentReasoningEffortSchema.optional(),
1686
- configOptions: z16.array(AgentConfigurationOptionSchema).max(32).optional()
1821
+ configOptions: z18.array(AgentConfigurationOptionSchema).max(32).optional()
1687
1822
  }),
1688
- z16.object({
1689
- ok: z16.literal(false),
1823
+ z18.object({
1824
+ ok: z18.literal(false),
1690
1825
  requestId: IdSchema,
1691
1826
  machineId: IdSchema,
1692
1827
  sessionId: IdSchema,
1693
1828
  error: ProtocolFailureSchema
1694
1829
  })
1695
1830
  ]);
1696
- var SessionRemoteActionSchema = z16.enum([
1831
+ var SessionRemoteActionSchema = z18.enum([
1697
1832
  "status",
1698
1833
  "enable",
1699
1834
  "disable"
1700
1835
  ]);
1701
- var SessionRemoteStateSchema = z16.enum([
1836
+ var SessionRemoteStateSchema = z18.enum([
1702
1837
  "off",
1703
1838
  "connecting",
1704
1839
  "active",
1705
1840
  "error"
1706
1841
  ]);
1707
- var SessionRemoteRequestSchema = z16.object({
1842
+ var SessionRemoteRequestSchema = z18.object({
1708
1843
  requestId: IdSchema,
1709
1844
  machineId: IdSchema,
1710
1845
  sessionId: IdSchema,
1711
1846
  action: SessionRemoteActionSchema
1712
1847
  });
1713
- var SessionRemoteStatusSchema = z16.object({
1848
+ var SessionRemoteStatusSchema = z18.object({
1714
1849
  state: SessionRemoteStateSchema,
1715
1850
  attachedSessionId: IdSchema.optional(),
1716
- url: z16.url().max(32768).optional(),
1717
- steerable: z16.boolean(),
1851
+ url: z18.url().max(32768).optional(),
1852
+ steerable: z18.boolean(),
1718
1853
  error: ProtocolFailureSchema.optional()
1719
1854
  });
1720
- var SessionRemoteResultSchema = z16.discriminatedUnion("ok", [
1721
- z16.object({
1722
- ok: z16.literal(true),
1855
+ var SessionRemoteResultSchema = z18.discriminatedUnion("ok", [
1856
+ z18.object({
1857
+ ok: z18.literal(true),
1723
1858
  requestId: IdSchema,
1724
1859
  machineId: IdSchema,
1725
1860
  sessionId: IdSchema,
1726
1861
  status: SessionRemoteStatusSchema
1727
1862
  }),
1728
- z16.object({
1729
- ok: z16.literal(false),
1863
+ z18.object({
1864
+ ok: z18.literal(false),
1730
1865
  requestId: IdSchema,
1731
1866
  machineId: IdSchema,
1732
1867
  sessionId: IdSchema,
@@ -1735,42 +1870,42 @@ var SessionRemoteResultSchema = z16.discriminatedUnion("ok", [
1735
1870
  ]);
1736
1871
 
1737
1872
  // ../../shared/protocol/dist/sessions/group-chat.js
1738
- import { z as z17 } from "zod";
1873
+ import { z as z19 } from "zod";
1739
1874
  var GROUP_CHAT_CREATE_OPERATION = "group-chat.create";
1740
1875
  var GROUP_CHAT_CREATE_VERSION = 1;
1741
1876
  var GROUP_CHAT_CREATE_CAPABILITY = sessionCommunicationOperationCapability(GROUP_CHAT_CREATE_OPERATION, GROUP_CHAT_CREATE_VERSION);
1742
- var GroupChatCreateDataSchema = z17.object({
1877
+ var GroupChatCreateDataSchema = z19.object({
1743
1878
  peerSessionId: IdSchema
1744
1879
  }).strict();
1745
- var GroupChatCreateResultDataSchema = z17.object({
1880
+ var GroupChatCreateResultDataSchema = z19.object({
1746
1881
  session: SessionSummarySchema.refine((session) => session.groupChat !== void 0, "Group creation must return a virtual group session")
1747
1882
  }).strict();
1748
1883
 
1749
1884
  // ../../shared/protocol/dist/sessions/prompts.js
1750
- import { z as z21 } from "zod";
1885
+ import { z as z23 } from "zod";
1751
1886
 
1752
1887
  // ../../shared/protocol/dist/conversation/attachments.js
1753
- import { z as z18 } from "zod";
1888
+ import { z as z20 } from "zod";
1754
1889
  var MAX_INLINE_IMAGE_BYTES = 3 * 1024 * 1024;
1755
1890
  var MAX_INLINE_HTML_BYTES = 512 * 1024;
1756
1891
  var MAX_PROMPT_FILE_BYTES = 1024 * 1024;
1757
- var InlineImageMimeTypeSchema = z18.enum([
1892
+ var InlineImageMimeTypeSchema = z20.enum([
1758
1893
  "image/gif",
1759
1894
  "image/jpeg",
1760
1895
  "image/png",
1761
1896
  "image/webp"
1762
1897
  ]);
1763
- var Base64DataSchema = z18.string().min(4).max(Math.ceil(MAX_INLINE_IMAGE_BYTES / 3) * 4).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/, "Expected canonical base64 data");
1764
- var Sha256Schema = z18.string().regex(/^[a-f0-9]{64}$/);
1898
+ var Base64DataSchema = z20.string().min(4).max(Math.ceil(MAX_INLINE_IMAGE_BYTES / 3) * 4).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/, "Expected canonical base64 data");
1899
+ var Sha256Schema = z20.string().regex(/^[a-f0-9]{64}$/);
1765
1900
  function decodedBase64ByteLength(value) {
1766
1901
  const padding = value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0;
1767
1902
  return value.length / 4 * 3 - padding;
1768
1903
  }
1769
- var PromptImageAttachmentSchema = z18.object({
1770
- name: z18.string().trim().min(1).max(255),
1771
- mimeType: z18.enum(["image/jpeg", "image/png", "image/webp"]),
1904
+ var PromptImageAttachmentSchema = z20.object({
1905
+ name: z20.string().trim().min(1).max(255),
1906
+ mimeType: z20.enum(["image/jpeg", "image/png", "image/webp"]),
1772
1907
  data: Base64DataSchema,
1773
- byteLength: z18.number().int().positive().max(MAX_INLINE_IMAGE_BYTES),
1908
+ byteLength: z20.number().int().positive().max(MAX_INLINE_IMAGE_BYTES),
1774
1909
  sha256: Sha256Schema
1775
1910
  }).strict().superRefine((attachment, context) => {
1776
1911
  if (decodedBase64ByteLength(attachment.data) !== attachment.byteLength) {
@@ -1781,11 +1916,11 @@ var PromptImageAttachmentSchema = z18.object({
1781
1916
  });
1782
1917
  }
1783
1918
  });
1784
- var PromptFileAttachmentSchema = z18.object({
1785
- name: z18.string().trim().min(1).max(255).regex(/^[^\\/\x00-\x1f\x7f]+$/).refine((name) => name !== "." && name !== "..", "Expected a filename"),
1786
- mimeType: z18.string().max(256).regex(/^[a-zA-Z0-9!#$&^_.+-]+\/[a-zA-Z0-9!#$&^_.+-]+$/),
1919
+ var PromptFileAttachmentSchema = z20.object({
1920
+ name: z20.string().trim().min(1).max(255).regex(/^[^\\/\x00-\x1f\x7f]+$/).refine((name) => name !== "." && name !== "..", "Expected a filename"),
1921
+ mimeType: z20.string().max(256).regex(/^[a-zA-Z0-9!#$&^_.+-]+\/[a-zA-Z0-9!#$&^_.+-]+$/),
1787
1922
  data: Base64DataSchema.max(Math.ceil(MAX_PROMPT_FILE_BYTES / 3) * 4),
1788
- byteLength: z18.number().int().positive().max(MAX_PROMPT_FILE_BYTES),
1923
+ byteLength: z20.number().int().positive().max(MAX_PROMPT_FILE_BYTES),
1789
1924
  sha256: Sha256Schema
1790
1925
  }).strict().superRefine((attachment, context) => {
1791
1926
  if (decodedBase64ByteLength(attachment.data) !== attachment.byteLength) {
@@ -1796,8 +1931,8 @@ var PromptFileAttachmentSchema = z18.object({
1796
1931
  });
1797
1932
  }
1798
1933
  });
1799
- var ConversationAttachmentSchema = z18.object({
1800
- kind: z18.enum([
1934
+ var ConversationAttachmentSchema = z20.object({
1935
+ kind: z20.enum([
1801
1936
  "file",
1802
1937
  "image",
1803
1938
  "html",
@@ -1805,13 +1940,13 @@ var ConversationAttachmentSchema = z18.object({
1805
1940
  "github-reference",
1806
1941
  "unknown"
1807
1942
  ]),
1808
- name: z18.string().trim().min(1).max(1024),
1809
- mimeType: z18.string().trim().min(1).max(256).optional(),
1810
- uri: z18.string().trim().min(1).max(32768).optional(),
1943
+ name: z20.string().trim().min(1).max(1024),
1944
+ mimeType: z20.string().trim().min(1).max(256).optional(),
1945
+ uri: z20.string().trim().min(1).max(32768).optional(),
1811
1946
  data: Base64DataSchema.optional(),
1812
- byteLength: z18.number().int().positive().max(MAX_INLINE_IMAGE_BYTES).optional(),
1947
+ byteLength: z20.number().int().positive().max(MAX_INLINE_IMAGE_BYTES).optional(),
1813
1948
  sha256: Sha256Schema.optional(),
1814
- imageRef: z18.literal("sha256").optional()
1949
+ imageRef: z20.literal("sha256").optional()
1815
1950
  }).strict().superRefine((attachment, context) => {
1816
1951
  if (attachment.imageRef !== void 0) {
1817
1952
  if (attachment.kind !== "image" || attachment.data !== void 0 || attachment.sha256 === void 0 || attachment.byteLength === void 0 || !InlineImageMimeTypeSchema.safeParse(attachment.mimeType).success) {
@@ -1869,20 +2004,20 @@ var ConversationAttachmentSchema = z18.object({
1869
2004
  });
1870
2005
 
1871
2006
  // ../../shared/protocol/dist/conversation/timeline.js
1872
- import { z as z20 } from "zod";
2007
+ import { z as z22 } from "zod";
1873
2008
 
1874
2009
  // ../../shared/protocol/dist/conversation/conversation.js
1875
- import { z as z19 } from "zod";
2010
+ import { z as z21 } from "zod";
1876
2011
  var CONVERSATION_ACTIVITY_STEP_LIMIT = 1e3;
1877
2012
  var CONVERSATION_SOURCE_ID_LIMIT = 1e3;
1878
2013
  var ConversationItemBaseShape = {
1879
2014
  id: IdSchema,
1880
- revision: z19.number().int().positive(),
2015
+ revision: z21.number().int().positive(),
1881
2016
  turnId: IdSchema,
1882
2017
  timestamp: IsoDateSchema,
1883
- sourceEventIds: z19.array(IdSchema).min(1).max(CONVERSATION_SOURCE_ID_LIMIT),
1884
- sourceMessageIds: z19.array(IdSchema).min(1).max(CONVERSATION_SOURCE_ID_LIMIT).optional(),
1885
- sourceInteractionIds: z19.array(IdSchema).min(1).max(CONVERSATION_SOURCE_ID_LIMIT).optional()
2018
+ sourceEventIds: z21.array(IdSchema).min(1).max(CONVERSATION_SOURCE_ID_LIMIT),
2019
+ sourceMessageIds: z21.array(IdSchema).min(1).max(CONVERSATION_SOURCE_ID_LIMIT).optional(),
2020
+ sourceInteractionIds: z21.array(IdSchema).min(1).max(CONVERSATION_SOURCE_ID_LIMIT).optional()
1886
2021
  };
1887
2022
  var MAX_INLINE_IMAGE_MESSAGE_BYTES = 3 * 1024 * 1024;
1888
2023
  var MAX_INLINE_IMAGES_PER_MESSAGE = 4;
@@ -1890,67 +2025,67 @@ var ActivityStepTimeShape = {
1890
2025
  // First observed event time; completion updates must not move an existing call.
1891
2026
  timestamp: IsoDateSchema.optional()
1892
2027
  };
1893
- var ConversationToolStepSchema = z19.object({
2028
+ var ConversationToolStepSchema = z21.object({
1894
2029
  id: IdSchema,
1895
- kind: z19.literal("tool"),
1896
- name: z19.string().trim().min(1).max(256),
1897
- status: z19.enum(["running", "completed", "failed"]),
2030
+ kind: z21.literal("tool"),
2031
+ name: z21.string().trim().min(1).max(256),
2032
+ status: z21.enum(["running", "completed", "failed"]),
1898
2033
  ...ActivityStepTimeShape
1899
2034
  }).strict();
1900
- var ConversationSkillStepSchema = z19.object({
2035
+ var ConversationSkillStepSchema = z21.object({
1901
2036
  id: IdSchema,
1902
- kind: z19.literal("skill"),
1903
- name: z19.string().trim().min(1).max(256),
1904
- status: z19.literal("completed"),
1905
- description: z19.string().trim().min(1).max(2048).optional(),
1906
- source: z19.string().trim().min(1).max(256).optional(),
2037
+ kind: z21.literal("skill"),
2038
+ name: z21.string().trim().min(1).max(256),
2039
+ status: z21.literal("completed"),
2040
+ description: z21.string().trim().min(1).max(2048).optional(),
2041
+ source: z21.string().trim().min(1).max(256).optional(),
1907
2042
  ...ActivityStepTimeShape
1908
2043
  }).strict();
1909
- var ConversationSubagentStepSchema = z19.object({
2044
+ var ConversationSubagentStepSchema = z21.object({
1910
2045
  id: IdSchema,
1911
- kind: z19.literal("subagent"),
1912
- name: z19.string().trim().min(1).max(256),
1913
- status: z19.enum(["running", "completed", "failed"]),
1914
- description: z19.string().trim().min(1).max(2048).optional(),
1915
- model: z19.string().trim().min(1).max(256).optional(),
1916
- durationMs: z19.number().int().nonnegative().optional(),
1917
- resultSummary: z19.string().max(4096).optional(),
1918
- error: z19.string().max(4096).optional(),
2046
+ kind: z21.literal("subagent"),
2047
+ name: z21.string().trim().min(1).max(256),
2048
+ status: z21.enum(["running", "completed", "failed"]),
2049
+ description: z21.string().trim().min(1).max(2048).optional(),
2050
+ model: z21.string().trim().min(1).max(256).optional(),
2051
+ durationMs: z21.number().int().nonnegative().optional(),
2052
+ resultSummary: z21.string().max(4096).optional(),
2053
+ error: z21.string().max(4096).optional(),
1919
2054
  ...ActivityStepTimeShape
1920
2055
  }).strict();
1921
- var ConversationPermissionStepSchema = z19.object({
2056
+ var ConversationPermissionStepSchema = z21.object({
1922
2057
  id: IdSchema,
1923
- kind: z19.literal("permission"),
1924
- name: z19.string().trim().min(1).max(256),
1925
- status: z19.enum(["running", "completed", "failed"]),
1926
- description: z19.string().trim().min(1).max(2048).optional(),
1927
- resultSummary: z19.string().max(4096).optional(),
1928
- error: z19.string().max(4096).optional(),
2058
+ kind: z21.literal("permission"),
2059
+ name: z21.string().trim().min(1).max(256),
2060
+ status: z21.enum(["running", "completed", "failed"]),
2061
+ description: z21.string().trim().min(1).max(2048).optional(),
2062
+ resultSummary: z21.string().max(4096).optional(),
2063
+ error: z21.string().max(4096).optional(),
1929
2064
  ...ActivityStepTimeShape
1930
2065
  }).strict();
1931
- var ConversationActivityStepSchema = z19.discriminatedUnion("kind", [
2066
+ var ConversationActivityStepSchema = z21.discriminatedUnion("kind", [
1932
2067
  ConversationToolStepSchema,
1933
2068
  ConversationSkillStepSchema,
1934
2069
  ConversationSubagentStepSchema,
1935
2070
  ConversationPermissionStepSchema
1936
2071
  ]);
1937
- var ConversationHumanMessageSchema = z19.object({
2072
+ var ConversationHumanMessageSchema = z21.object({
1938
2073
  ...ConversationItemBaseShape,
1939
- kind: z19.literal("human-message"),
1940
- actor: z19.literal("human"),
1941
- content: z19.string().max(1e5),
1942
- attachments: z19.array(ConversationAttachmentSchema).max(100),
2074
+ kind: z21.literal("human-message"),
2075
+ actor: z21.literal("human"),
2076
+ content: z21.string().max(1e5),
2077
+ attachments: z21.array(ConversationAttachmentSchema).max(100),
1943
2078
  operationId: IdSchema.optional()
1944
2079
  }).strict();
1945
- var ConversationAssistantMessageSchema = z19.object({
2080
+ var ConversationAssistantMessageSchema = z21.object({
1946
2081
  ...ConversationItemBaseShape,
1947
- kind: z19.literal("assistant-message"),
1948
- actor: z19.enum(["assistant", "subagent"]),
1949
- content: z19.string().max(5e5),
1950
- attachments: z19.array(ConversationAttachmentSchema).max(100).optional(),
1951
- model: z19.string().trim().min(1).max(256).optional(),
2082
+ kind: z21.literal("assistant-message"),
2083
+ actor: z21.enum(["assistant", "subagent"]),
2084
+ content: z21.string().max(5e5),
2085
+ attachments: z21.array(ConversationAttachmentSchema).max(100).optional(),
2086
+ model: z21.string().trim().min(1).max(256).optional(),
1952
2087
  agentId: IdSchema.optional(),
1953
- final: z19.boolean()
2088
+ final: z21.boolean()
1954
2089
  }).strict().superRefine((message, context) => {
1955
2090
  const inlineImages = message.attachments?.filter((attachment) => attachment.kind === "image" && attachment.data !== void 0) ?? [];
1956
2091
  if (inlineImages.length > MAX_INLINE_IMAGES_PER_MESSAGE) {
@@ -1969,160 +2104,160 @@ var ConversationAssistantMessageSchema = z19.object({
1969
2104
  });
1970
2105
  }
1971
2106
  });
1972
- var ConversationActivityGroupSchema = z19.object({
2107
+ var ConversationActivityGroupSchema = z21.object({
1973
2108
  ...ConversationItemBaseShape,
1974
- kind: z19.literal("activity-group"),
1975
- actor: z19.enum(["assistant", "subagent"]),
1976
- status: z19.enum(["running", "completed", "failed"]),
1977
- steps: z19.array(ConversationActivityStepSchema).max(CONVERSATION_ACTIVITY_STEP_LIMIT)
2109
+ kind: z21.literal("activity-group"),
2110
+ actor: z21.enum(["assistant", "subagent"]),
2111
+ status: z21.enum(["running", "completed", "failed"]),
2112
+ steps: z21.array(ConversationActivityStepSchema).max(CONVERSATION_ACTIVITY_STEP_LIMIT)
1978
2113
  }).strict();
1979
- var ConversationNoticeSchema = z19.object({
2114
+ var ConversationNoticeSchema = z21.object({
1980
2115
  ...ConversationItemBaseShape,
1981
- kind: z19.literal("notice"),
1982
- actor: z19.enum(["system", "assistant", "subagent"]),
1983
- severity: z19.enum(["info", "success", "warning", "error"]),
1984
- title: z19.string().trim().min(1).max(256),
1985
- content: z19.string().max(4096),
1986
- presentation: z19.literal("compact").optional()
2116
+ kind: z21.literal("notice"),
2117
+ actor: z21.enum(["system", "assistant", "subagent"]),
2118
+ severity: z21.enum(["info", "success", "warning", "error"]),
2119
+ title: z21.string().trim().min(1).max(256),
2120
+ content: z21.string().max(4096),
2121
+ presentation: z21.literal("compact").optional()
1987
2122
  }).strict();
1988
- var ConversationPlanTodoSchema = z19.object({
2123
+ var ConversationPlanTodoSchema = z21.object({
1989
2124
  id: IdSchema,
1990
- title: z19.string().trim().min(1).max(1024),
1991
- description: z19.string().max(4096).optional(),
1992
- status: z19.string().trim().min(1).max(64),
1993
- dependsOn: z19.array(IdSchema).max(100)
2125
+ title: z21.string().trim().min(1).max(1024),
2126
+ description: z21.string().max(4096).optional(),
2127
+ status: z21.string().trim().min(1).max(64),
2128
+ dependsOn: z21.array(IdSchema).max(100)
1994
2129
  }).strict();
1995
- var ConversationPlanUpdateSchema = z19.object({
2130
+ var ConversationPlanUpdateSchema = z21.object({
1996
2131
  ...ConversationItemBaseShape,
1997
- kind: z19.literal("plan-update"),
1998
- actor: z19.enum(["assistant", "subagent"]),
1999
- operation: z19.enum(["created", "updated", "deleted"]),
2000
- content: z19.string().max(1e5),
2001
- todos: z19.array(ConversationPlanTodoSchema).max(1e3)
2132
+ kind: z21.literal("plan-update"),
2133
+ actor: z21.enum(["assistant", "subagent"]),
2134
+ operation: z21.enum(["created", "updated", "deleted"]),
2135
+ content: z21.string().max(1e5),
2136
+ todos: z21.array(ConversationPlanTodoSchema).max(1e3)
2002
2137
  }).strict();
2003
- var ConversationItemSchema = z19.discriminatedUnion("kind", [
2138
+ var ConversationItemSchema = z21.discriminatedUnion("kind", [
2004
2139
  ConversationHumanMessageSchema,
2005
2140
  ConversationAssistantMessageSchema,
2006
2141
  ConversationActivityGroupSchema,
2007
2142
  ConversationNoticeSchema,
2008
2143
  ConversationPlanUpdateSchema
2009
2144
  ]);
2010
- var ConversationItemUpsertSchema = z19.object({
2145
+ var ConversationItemUpsertSchema = z21.object({
2011
2146
  userId: IdSchema,
2012
2147
  machineId: IdSchema,
2013
2148
  sessionId: IdSchema,
2014
2149
  item: ConversationItemSchema
2015
2150
  });
2016
- var ConversationActivityStepUpsertSchema = z19.object({
2151
+ var ConversationActivityStepUpsertSchema = z21.object({
2017
2152
  userId: IdSchema,
2018
2153
  machineId: IdSchema,
2019
2154
  sessionId: IdSchema,
2020
2155
  activityId: IdSchema,
2021
- revision: z19.number().int().positive(),
2156
+ revision: z21.number().int().positive(),
2022
2157
  turnId: IdSchema,
2023
2158
  timestamp: IsoDateSchema,
2024
- actor: z19.enum(["assistant", "subagent"]),
2025
- status: z19.enum(["running", "completed", "failed"]),
2159
+ actor: z21.enum(["assistant", "subagent"]),
2160
+ status: z21.enum(["running", "completed", "failed"]),
2026
2161
  sourceEventId: IdSchema,
2027
2162
  step: ConversationActivityStepSchema
2028
2163
  }).strict();
2029
2164
 
2030
2165
  // ../../shared/protocol/dist/conversation/timeline.js
2031
- var SessionUserPreviewSchema = z20.object({
2166
+ var SessionUserPreviewSchema = z22.object({
2032
2167
  id: IdSchema,
2033
- revision: z20.number().int().positive(),
2168
+ revision: z22.number().int().positive(),
2034
2169
  timestamp: IsoDateSchema,
2035
- text: z20.string().max(4096)
2170
+ text: z22.string().max(4096)
2036
2171
  });
2037
- var SessionAssistantPreviewSchema = z20.object({
2172
+ var SessionAssistantPreviewSchema = z22.object({
2038
2173
  id: IdSchema,
2039
- revision: z20.number().int().positive(),
2174
+ revision: z22.number().int().positive(),
2040
2175
  timestamp: IsoDateSchema,
2041
- sourceEventIds: z20.array(IdSchema).min(1).max(1e3),
2042
- text: z20.string().max(4096),
2043
- final: z20.boolean(),
2044
- attachments: z20.array(ConversationAttachmentSchema.refine((attachment) => attachment.kind === "image" && attachment.imageRef === "sha256", "Assistant previews contain image references only")).max(4)
2176
+ sourceEventIds: z22.array(IdSchema).min(1).max(1e3),
2177
+ text: z22.string().max(4096),
2178
+ final: z22.boolean(),
2179
+ attachments: z22.array(ConversationAttachmentSchema.refine((attachment) => attachment.kind === "image" && attachment.imageRef === "sha256", "Assistant previews contain image references only")).max(4)
2045
2180
  });
2046
2181
  var SESSION_TIMELINE_PAGE_SIZE = 100;
2047
- var SessionTimelinePageRequestSchema = z20.object({
2182
+ var SessionTimelinePageRequestSchema = z22.object({
2048
2183
  requestId: IdSchema,
2049
2184
  machineId: IdSchema,
2050
2185
  sessionId: IdSchema,
2051
- cursor: z20.string().max(32768).optional(),
2052
- metadataOnly: z20.boolean().optional(),
2053
- acceptContentEncodings: z20.array(z20.string().min(1).max(32)).max(8).optional(),
2054
- imageReferences: z20.boolean().optional(),
2055
- pageSize: z20.number().int().min(1).max(SESSION_TIMELINE_PAGE_SIZE).default(SESSION_TIMELINE_PAGE_SIZE),
2056
- assistantPreview: z20.boolean().optional()
2186
+ cursor: z22.string().max(32768).optional(),
2187
+ metadataOnly: z22.boolean().optional(),
2188
+ acceptContentEncodings: z22.array(z22.string().min(1).max(32)).max(8).optional(),
2189
+ imageReferences: z22.boolean().optional(),
2190
+ pageSize: z22.number().int().min(1).max(SESSION_TIMELINE_PAGE_SIZE).default(SESSION_TIMELINE_PAGE_SIZE),
2191
+ assistantPreview: z22.boolean().optional()
2057
2192
  });
2058
- var SessionWatchRequestSchema = z20.object({
2193
+ var SessionWatchRequestSchema = z22.object({
2059
2194
  requestId: IdSchema,
2060
2195
  machineId: IdSchema,
2061
2196
  sessionId: IdSchema,
2062
- watching: z20.boolean()
2197
+ watching: z22.boolean()
2063
2198
  }).strict();
2064
- var SessionWatchResultSchema = z20.discriminatedUnion("ok", [
2065
- z20.object({
2066
- ok: z20.literal(true),
2199
+ var SessionWatchResultSchema = z22.discriminatedUnion("ok", [
2200
+ z22.object({
2201
+ ok: z22.literal(true),
2067
2202
  requestId: IdSchema,
2068
2203
  machineId: IdSchema,
2069
2204
  sessionId: IdSchema,
2070
- watching: z20.boolean()
2205
+ watching: z22.boolean()
2071
2206
  }).strict(),
2072
- z20.object({
2073
- ok: z20.literal(false),
2207
+ z22.object({
2208
+ ok: z22.literal(false),
2074
2209
  requestId: IdSchema,
2075
2210
  machineId: IdSchema,
2076
2211
  sessionId: IdSchema,
2077
- watching: z20.boolean(),
2212
+ watching: z22.boolean(),
2078
2213
  error: ProtocolFailureSchema
2079
2214
  }).strict()
2080
2215
  ]);
2081
- var SessionTimelinePageSchema = z20.object({
2082
- items: z20.array(ConversationItemSchema).max(SESSION_TIMELINE_PAGE_SIZE),
2083
- cursor: z20.string().max(32768),
2084
- hasMore: z20.boolean(),
2085
- cursorStatus: z20.enum(["ok", "expired"]),
2216
+ var SessionTimelinePageSchema = z22.object({
2217
+ items: z22.array(ConversationItemSchema).max(SESSION_TIMELINE_PAGE_SIZE),
2218
+ cursor: z22.string().max(32768),
2219
+ hasMore: z22.boolean(),
2220
+ cursorStatus: z22.enum(["ok", "expired"]),
2086
2221
  assistantPreview: SessionAssistantPreviewSchema.optional(),
2087
2222
  userPreview: SessionUserPreviewSchema.optional(),
2088
- previewsComplete: z20.boolean().optional()
2223
+ previewsComplete: z22.boolean().optional()
2089
2224
  });
2090
- var SessionTimelinePageResultSchema = z20.discriminatedUnion("ok", [
2091
- z20.object({
2092
- ok: z20.literal(true),
2225
+ var SessionTimelinePageResultSchema = z22.discriminatedUnion("ok", [
2226
+ z22.object({
2227
+ ok: z22.literal(true),
2093
2228
  requestId: IdSchema,
2094
2229
  machineId: IdSchema,
2095
2230
  sessionId: IdSchema,
2096
2231
  page: SessionTimelinePageSchema
2097
2232
  }),
2098
- z20.object({
2099
- ok: z20.literal(false),
2233
+ z22.object({
2234
+ ok: z22.literal(false),
2100
2235
  requestId: IdSchema,
2101
2236
  machineId: IdSchema,
2102
2237
  sessionId: IdSchema,
2103
2238
  error: ProtocolFailureSchema
2104
2239
  })
2105
2240
  ]);
2106
- var SessionTimelineInvalidatedSchema = z20.object({
2241
+ var SessionTimelineInvalidatedSchema = z22.object({
2107
2242
  userId: IdSchema,
2108
2243
  machineId: IdSchema,
2109
2244
  sessionId: IdSchema,
2110
- reason: z20.enum(["clear", "rewind"]),
2245
+ reason: z22.enum(["clear", "rewind"]),
2111
2246
  sourceEventId: IdSchema,
2112
2247
  timestamp: IsoDateSchema
2113
2248
  }).strict();
2114
2249
 
2115
2250
  // ../../shared/protocol/dist/sessions/prompts.js
2116
2251
  var MAX_PROMPT_IMAGE_BYTES = 3 * 1024 * 1024;
2117
- var SessionPromptRequestSchema = z21.object({
2252
+ var SessionPromptRequestSchema = z23.object({
2118
2253
  requestId: IdSchema,
2119
2254
  operationId: IdSchema,
2120
2255
  machineId: IdSchema,
2121
2256
  sessionId: IdSchema,
2122
- prompt: z21.string().trim().max(1e5),
2123
- attachments: z21.array(PromptImageAttachmentSchema).max(4).optional(),
2124
- fileAttachments: z21.array(PromptFileAttachmentSchema).max(4).optional(),
2125
- mode: z21.enum(["enqueue", "immediate"]).default("enqueue")
2257
+ prompt: z23.string().trim().max(1e5),
2258
+ attachments: z23.array(PromptImageAttachmentSchema).max(4).optional(),
2259
+ fileAttachments: z23.array(PromptFileAttachmentSchema).max(4).optional(),
2260
+ mode: z23.enum(["enqueue", "immediate"]).default("enqueue")
2126
2261
  }).strict().superRefine((request, context) => {
2127
2262
  if (request.prompt.length === 0 && (request.attachments?.length ?? 0) === 0 && (request.fileAttachments?.length ?? 0) === 0) {
2128
2263
  context.addIssue({
@@ -2148,22 +2283,22 @@ var SessionPromptRequestSchema = z21.object({
2148
2283
  });
2149
2284
  }
2150
2285
  });
2151
- var SessionPromptResultSchema = z21.discriminatedUnion("ok", [
2152
- z21.object({
2153
- ok: z21.literal(true),
2286
+ var SessionPromptResultSchema = z23.discriminatedUnion("ok", [
2287
+ z23.object({
2288
+ ok: z23.literal(true),
2154
2289
  requestId: IdSchema,
2155
2290
  operationId: IdSchema,
2156
2291
  machineId: IdSchema,
2157
2292
  sessionId: IdSchema,
2158
2293
  messageId: IdSchema,
2159
- mode: z21.enum(["enqueue", "immediate"]),
2160
- deliveryState: z21.enum(["queued", "processing"]),
2294
+ mode: z23.enum(["enqueue", "immediate"]),
2295
+ deliveryState: z23.enum(["queued", "processing"]),
2161
2296
  // Negotiated lower bound from the native event clock. Exact text and history
2162
2297
  // ownership checks still apply; this is not an identity or proof of persistence.
2163
2298
  submittedAt: IsoDateSchema.optional()
2164
2299
  }),
2165
- z21.object({
2166
- ok: z21.literal(false),
2300
+ z23.object({
2301
+ ok: z23.literal(false),
2167
2302
  requestId: IdSchema,
2168
2303
  operationId: IdSchema,
2169
2304
  machineId: IdSchema,
@@ -2171,29 +2306,29 @@ var SessionPromptResultSchema = z21.discriminatedUnion("ok", [
2171
2306
  error: ProtocolFailureSchema
2172
2307
  })
2173
2308
  ]);
2174
- var SessionActivityUpdateSchema = z21.object({
2309
+ var SessionActivityUpdateSchema = z23.object({
2175
2310
  userId: IdSchema,
2176
2311
  machineId: IdSchema,
2177
2312
  sessionId: IdSchema,
2178
- state: z21.enum(["working", "idle"]),
2313
+ state: z23.enum(["working", "idle"]),
2179
2314
  occurredAt: IsoDateSchema,
2180
2315
  assistantPreview: SessionAssistantPreviewSchema.optional(),
2181
2316
  userPreview: SessionUserPreviewSchema.optional()
2182
2317
  });
2183
- var SessionAbortRequestSchema = z21.object({
2318
+ var SessionAbortRequestSchema = z23.object({
2184
2319
  requestId: IdSchema,
2185
2320
  machineId: IdSchema,
2186
2321
  sessionId: IdSchema
2187
2322
  });
2188
- var SessionAbortResultSchema = z21.discriminatedUnion("ok", [
2189
- z21.object({
2190
- ok: z21.literal(true),
2323
+ var SessionAbortResultSchema = z23.discriminatedUnion("ok", [
2324
+ z23.object({
2325
+ ok: z23.literal(true),
2191
2326
  requestId: IdSchema,
2192
2327
  machineId: IdSchema,
2193
2328
  sessionId: IdSchema
2194
2329
  }),
2195
- z21.object({
2196
- ok: z21.literal(false),
2330
+ z23.object({
2331
+ ok: z23.literal(false),
2197
2332
  requestId: IdSchema,
2198
2333
  machineId: IdSchema,
2199
2334
  sessionId: IdSchema,
@@ -2202,12 +2337,12 @@ var SessionAbortResultSchema = z21.discriminatedUnion("ok", [
2202
2337
  ]);
2203
2338
 
2204
2339
  // ../../shared/protocol/dist/sessions/interactions.js
2205
- import { z as z22 } from "zod";
2206
- var InteractionFormFieldSchema = z22.object({
2340
+ import { z as z24 } from "zod";
2341
+ var InteractionFormFieldSchema = z24.object({
2207
2342
  id: IdSchema,
2208
- label: z22.string().trim().min(1).max(1024),
2209
- description: z22.string().max(2048).optional(),
2210
- inputType: z22.enum([
2343
+ label: z24.string().trim().min(1).max(1024),
2344
+ description: z24.string().max(2048).optional(),
2345
+ inputType: z24.enum([
2211
2346
  "text",
2212
2347
  "number",
2213
2348
  "integer",
@@ -2215,77 +2350,77 @@ var InteractionFormFieldSchema = z22.object({
2215
2350
  "select",
2216
2351
  "multi-select"
2217
2352
  ]),
2218
- required: z22.boolean(),
2219
- options: z22.array(z22.string().max(1024)).max(100),
2220
- defaultValue: z22.union([
2221
- z22.string().max(4096),
2222
- z22.number().finite(),
2223
- z22.boolean(),
2224
- z22.array(z22.string().max(1024)).max(100)
2353
+ required: z24.boolean(),
2354
+ options: z24.array(z24.string().max(1024)).max(100),
2355
+ defaultValue: z24.union([
2356
+ z24.string().max(4096),
2357
+ z24.number().finite(),
2358
+ z24.boolean(),
2359
+ z24.array(z24.string().max(1024)).max(100)
2225
2360
  ]).optional(),
2226
- minimum: z22.number().finite().optional(),
2227
- maximum: z22.number().finite().optional(),
2228
- minLength: z22.number().int().nonnegative().max(1e6).optional(),
2229
- maxLength: z22.number().int().nonnegative().max(1e6).optional(),
2230
- minItems: z22.number().int().nonnegative().max(100).optional(),
2231
- maxItems: z22.number().int().nonnegative().max(100).optional(),
2232
- format: z22.enum(["email", "uri", "date", "date-time"]).optional()
2361
+ minimum: z24.number().finite().optional(),
2362
+ maximum: z24.number().finite().optional(),
2363
+ minLength: z24.number().int().nonnegative().max(1e6).optional(),
2364
+ maxLength: z24.number().int().nonnegative().max(1e6).optional(),
2365
+ minItems: z24.number().int().nonnegative().max(100).optional(),
2366
+ maxItems: z24.number().int().nonnegative().max(100).optional(),
2367
+ format: z24.enum(["email", "uri", "date", "date-time"]).optional()
2233
2368
  }).strict();
2234
- var InteractionPermissionRequestSchema = z22.object({
2235
- kind: z22.literal("permission"),
2369
+ var InteractionPermissionRequestSchema = z24.object({
2370
+ kind: z24.literal("permission"),
2236
2371
  permissionKind: IdSchema,
2237
- title: z22.string().trim().min(1).max(256),
2238
- description: z22.string().max(4096),
2239
- canApproveSession: z22.boolean(),
2240
- canApproveAlways: z22.boolean().optional(),
2241
- approvalScope: z22.string().trim().min(1).max(4096).optional()
2372
+ title: z24.string().trim().min(1).max(256),
2373
+ description: z24.string().max(4096),
2374
+ canApproveSession: z24.boolean(),
2375
+ canApproveAlways: z24.boolean().optional(),
2376
+ approvalScope: z24.string().trim().min(1).max(4096).optional()
2242
2377
  }).strict();
2243
- var InteractionUserInputRequestSchema = z22.object({
2244
- kind: z22.literal("user_input"),
2245
- question: z22.string().trim().min(1).max(4096),
2246
- choices: z22.array(z22.string().max(1024)).max(100),
2247
- allowFreeform: z22.boolean()
2378
+ var InteractionUserInputRequestSchema = z24.object({
2379
+ kind: z24.literal("user_input"),
2380
+ question: z24.string().trim().min(1).max(4096),
2381
+ choices: z24.array(z24.string().max(1024)).max(100),
2382
+ allowFreeform: z24.boolean()
2248
2383
  }).strict();
2249
- var InteractionElicitationRequestSchema = z22.object({
2250
- kind: z22.literal("elicitation"),
2251
- message: z22.string().trim().min(1).max(4096),
2252
- mode: z22.enum(["form", "url"]),
2253
- source: z22.string().trim().min(1).max(256).optional(),
2254
- url: z22.url().max(32768).optional(),
2255
- fields: z22.array(InteractionFormFieldSchema).max(100)
2384
+ var InteractionElicitationRequestSchema = z24.object({
2385
+ kind: z24.literal("elicitation"),
2386
+ message: z24.string().trim().min(1).max(4096),
2387
+ mode: z24.enum(["form", "url"]),
2388
+ source: z24.string().trim().min(1).max(256).optional(),
2389
+ url: z24.url().max(32768).optional(),
2390
+ fields: z24.array(InteractionFormFieldSchema).max(100)
2256
2391
  }).strict();
2257
- var InteractionMcpOauthRequestSchema = z22.object({
2258
- kind: z22.literal("mcp_oauth"),
2259
- serverName: z22.string().trim().min(1).max(256),
2260
- serverUrl: z22.url().max(32768),
2261
- reason: z22.enum(["initial", "refresh", "reauth", "upscope"]),
2262
- responseMode: z22.literal("cancel-only")
2392
+ var InteractionMcpOauthRequestSchema = z24.object({
2393
+ kind: z24.literal("mcp_oauth"),
2394
+ serverName: z24.string().trim().min(1).max(256),
2395
+ serverUrl: z24.url().max(32768),
2396
+ reason: z24.enum(["initial", "refresh", "reauth", "upscope"]),
2397
+ responseMode: z24.literal("cancel-only")
2263
2398
  }).strict();
2264
- var InteractionMcpHeadersRequestSchema = z22.object({
2265
- kind: z22.literal("mcp_headers"),
2266
- serverName: z22.string().trim().min(1).max(256),
2267
- serverUrl: z22.url().max(32768),
2268
- reason: z22.string().trim().min(1).max(256),
2269
- responseMode: z22.literal("none-only")
2399
+ var InteractionMcpHeadersRequestSchema = z24.object({
2400
+ kind: z24.literal("mcp_headers"),
2401
+ serverName: z24.string().trim().min(1).max(256),
2402
+ serverUrl: z24.url().max(32768),
2403
+ reason: z24.string().trim().min(1).max(256),
2404
+ responseMode: z24.literal("none-only")
2270
2405
  }).strict();
2271
- var InteractionAutoModeSwitchRequestSchema = z22.object({
2272
- kind: z22.literal("auto_mode_switch"),
2406
+ var InteractionAutoModeSwitchRequestSchema = z24.object({
2407
+ kind: z24.literal("auto_mode_switch"),
2273
2408
  errorCode: IdSchema.optional(),
2274
- retryAfterSeconds: z22.number().int().nonnegative().optional()
2409
+ retryAfterSeconds: z24.number().int().nonnegative().optional()
2275
2410
  }).strict();
2276
- var InteractionSessionLimitsRequestSchema = z22.object({
2277
- kind: z22.literal("session_limits"),
2278
- maxAiCredits: z22.number().finite().nonnegative(),
2279
- usedAiCredits: z22.number().finite().nonnegative()
2411
+ var InteractionSessionLimitsRequestSchema = z24.object({
2412
+ kind: z24.literal("session_limits"),
2413
+ maxAiCredits: z24.number().finite().nonnegative(),
2414
+ usedAiCredits: z24.number().finite().nonnegative()
2280
2415
  }).strict();
2281
- var InteractionExitPlanRequestSchema = z22.object({
2282
- kind: z22.literal("exit_plan"),
2283
- summary: z22.string().max(4096),
2284
- planContent: z22.string().max(1e5).optional(),
2285
- actions: z22.array(IdSchema).min(1).max(20),
2416
+ var InteractionExitPlanRequestSchema = z24.object({
2417
+ kind: z24.literal("exit_plan"),
2418
+ summary: z24.string().max(4096),
2419
+ planContent: z24.string().max(1e5).optional(),
2420
+ actions: z24.array(IdSchema).min(1).max(20),
2286
2421
  recommendedAction: IdSchema
2287
2422
  }).strict();
2288
- var InteractionRequestSchema = z22.discriminatedUnion("kind", [
2423
+ var InteractionRequestSchema = z24.discriminatedUnion("kind", [
2289
2424
  InteractionPermissionRequestSchema,
2290
2425
  InteractionUserInputRequestSchema,
2291
2426
  InteractionElicitationRequestSchema,
@@ -2295,81 +2430,81 @@ var InteractionRequestSchema = z22.discriminatedUnion("kind", [
2295
2430
  InteractionSessionLimitsRequestSchema,
2296
2431
  InteractionExitPlanRequestSchema
2297
2432
  ]);
2298
- var InteractionPermissionResponseSchema = z22.object({
2299
- kind: z22.literal("permission"),
2300
- decision: z22.enum(["approve-once", "approve-for-session", "approve-always", "reject"]),
2301
- feedback: z22.string().trim().min(1).max(2048).optional()
2433
+ var InteractionPermissionResponseSchema = z24.object({
2434
+ kind: z24.literal("permission"),
2435
+ decision: z24.enum(["approve-once", "approve-for-session", "approve-always", "reject"]),
2436
+ feedback: z24.string().trim().min(1).max(2048).optional()
2302
2437
  }).strict();
2303
- var InteractionUserInputResponseSchema = z22.object({
2304
- kind: z22.literal("user_input"),
2305
- answer: z22.string().max(1e5),
2306
- wasFreeform: z22.boolean()
2438
+ var InteractionUserInputResponseSchema = z24.object({
2439
+ kind: z24.literal("user_input"),
2440
+ answer: z24.string().max(1e5),
2441
+ wasFreeform: z24.boolean()
2307
2442
  }).strict();
2308
- var InteractionFieldValueSchema = z22.union([
2309
- z22.string().max(4096),
2310
- z22.number(),
2311
- z22.boolean(),
2312
- z22.array(z22.string().max(1024)).max(100)
2443
+ var InteractionFieldValueSchema = z24.union([
2444
+ z24.string().max(4096),
2445
+ z24.number(),
2446
+ z24.boolean(),
2447
+ z24.array(z24.string().max(1024)).max(100)
2313
2448
  ]);
2314
- var InteractionElicitationResponseSchema = z22.object({
2315
- kind: z22.literal("elicitation"),
2316
- action: z22.enum(["accept", "decline", "cancel"]),
2317
- values: z22.record(z22.string().max(256), InteractionFieldValueSchema)
2449
+ var InteractionElicitationResponseSchema = z24.object({
2450
+ kind: z24.literal("elicitation"),
2451
+ action: z24.enum(["accept", "decline", "cancel"]),
2452
+ values: z24.record(z24.string().max(256), InteractionFieldValueSchema)
2318
2453
  }).strict();
2319
- var InteractionMcpOauthResponseSchema = z22.object({
2320
- kind: z22.literal("mcp_oauth"),
2321
- action: z22.literal("cancel")
2454
+ var InteractionMcpOauthResponseSchema = z24.object({
2455
+ kind: z24.literal("mcp_oauth"),
2456
+ action: z24.literal("cancel")
2322
2457
  }).strict();
2323
- var InteractionMcpHeadersResponseSchema = z22.object({
2324
- kind: z22.literal("mcp_headers"),
2325
- action: z22.literal("none")
2458
+ var InteractionMcpHeadersResponseSchema = z24.object({
2459
+ kind: z24.literal("mcp_headers"),
2460
+ action: z24.literal("none")
2326
2461
  }).strict();
2327
- var InteractionAutoModeSwitchResponseSchema = z22.object({
2328
- kind: z22.literal("auto_mode_switch"),
2329
- action: z22.enum(["yes", "yes_always", "no"])
2462
+ var InteractionAutoModeSwitchResponseSchema = z24.object({
2463
+ kind: z24.literal("auto_mode_switch"),
2464
+ action: z24.enum(["yes", "yes_always", "no"])
2330
2465
  }).strict();
2331
- var InteractionSessionLimitsResponseSchema = z22.object({
2332
- kind: z22.literal("session_limits"),
2333
- action: z22.enum(["add", "set", "unset", "cancel"]),
2334
- additionalAiCredits: z22.number().positive().optional(),
2335
- maxAiCredits: z22.number().positive().optional()
2466
+ var InteractionSessionLimitsResponseSchema = z24.object({
2467
+ kind: z24.literal("session_limits"),
2468
+ action: z24.enum(["add", "set", "unset", "cancel"]),
2469
+ additionalAiCredits: z24.number().positive().optional(),
2470
+ maxAiCredits: z24.number().positive().optional()
2336
2471
  }).strict().superRefine((response, context) => {
2337
2472
  if (response.action === "add" && response.additionalAiCredits === void 0) {
2338
2473
  context.addIssue({
2339
- code: z22.ZodIssueCode.custom,
2474
+ code: z24.ZodIssueCode.custom,
2340
2475
  path: ["additionalAiCredits"],
2341
2476
  message: "additionalAiCredits is required for add"
2342
2477
  });
2343
2478
  }
2344
2479
  if (response.action === "set" && response.maxAiCredits === void 0) {
2345
2480
  context.addIssue({
2346
- code: z22.ZodIssueCode.custom,
2481
+ code: z24.ZodIssueCode.custom,
2347
2482
  path: ["maxAiCredits"],
2348
2483
  message: "maxAiCredits is required for set"
2349
2484
  });
2350
2485
  }
2351
2486
  if (response.action !== "add" && response.additionalAiCredits !== void 0) {
2352
2487
  context.addIssue({
2353
- code: z22.ZodIssueCode.custom,
2488
+ code: z24.ZodIssueCode.custom,
2354
2489
  path: ["additionalAiCredits"],
2355
2490
  message: "additionalAiCredits is only valid for add"
2356
2491
  });
2357
2492
  }
2358
2493
  if (response.action !== "set" && response.maxAiCredits !== void 0) {
2359
2494
  context.addIssue({
2360
- code: z22.ZodIssueCode.custom,
2495
+ code: z24.ZodIssueCode.custom,
2361
2496
  path: ["maxAiCredits"],
2362
2497
  message: "maxAiCredits is only valid for set"
2363
2498
  });
2364
2499
  }
2365
2500
  });
2366
- var InteractionExitPlanResponseSchema = z22.object({
2367
- kind: z22.literal("exit_plan"),
2368
- approved: z22.boolean(),
2501
+ var InteractionExitPlanResponseSchema = z24.object({
2502
+ kind: z24.literal("exit_plan"),
2503
+ approved: z24.boolean(),
2369
2504
  selectedAction: IdSchema.optional(),
2370
- feedback: z22.string().trim().min(1).max(4096).optional()
2505
+ feedback: z24.string().trim().min(1).max(4096).optional()
2371
2506
  }).strict();
2372
- var InteractionResponseSchema = z22.discriminatedUnion("kind", [
2507
+ var InteractionResponseSchema = z24.discriminatedUnion("kind", [
2373
2508
  InteractionPermissionResponseSchema,
2374
2509
  InteractionUserInputResponseSchema,
2375
2510
  InteractionElicitationResponseSchema,
@@ -2379,30 +2514,30 @@ var InteractionResponseSchema = z22.discriminatedUnion("kind", [
2379
2514
  InteractionSessionLimitsResponseSchema,
2380
2515
  InteractionExitPlanResponseSchema
2381
2516
  ]);
2382
- var InteractionRequestPayloadSchema = z22.object({
2517
+ var InteractionRequestPayloadSchema = z24.object({
2383
2518
  interactionRequestId: IdSchema,
2384
2519
  userId: IdSchema,
2385
2520
  machineId: IdSchema,
2386
2521
  sessionId: IdSchema,
2387
2522
  request: InteractionRequestSchema
2388
2523
  }).strict();
2389
- var InteractionRespondRequestSchema = z22.object({
2524
+ var InteractionRespondRequestSchema = z24.object({
2390
2525
  requestId: IdSchema,
2391
2526
  interactionRequestId: IdSchema,
2392
2527
  machineId: IdSchema,
2393
2528
  sessionId: IdSchema,
2394
2529
  response: InteractionResponseSchema
2395
2530
  }).strict();
2396
- var InteractionRespondResultSchema = z22.discriminatedUnion("ok", [
2397
- z22.object({
2398
- ok: z22.literal(true),
2531
+ var InteractionRespondResultSchema = z24.discriminatedUnion("ok", [
2532
+ z24.object({
2533
+ ok: z24.literal(true),
2399
2534
  requestId: IdSchema,
2400
2535
  interactionRequestId: IdSchema,
2401
2536
  machineId: IdSchema,
2402
2537
  sessionId: IdSchema
2403
2538
  }).strict(),
2404
- z22.object({
2405
- ok: z22.literal(false),
2539
+ z24.object({
2540
+ ok: z24.literal(false),
2406
2541
  requestId: IdSchema,
2407
2542
  interactionRequestId: IdSchema,
2408
2543
  machineId: IdSchema,
@@ -2410,31 +2545,31 @@ var InteractionRespondResultSchema = z22.discriminatedUnion("ok", [
2410
2545
  error: ProtocolFailureSchema
2411
2546
  }).strict()
2412
2547
  ]);
2413
- var PermissionRequestPayloadSchema = z22.object({
2548
+ var PermissionRequestPayloadSchema = z24.object({
2414
2549
  permissionRequestId: IdSchema,
2415
2550
  userId: IdSchema,
2416
2551
  machineId: IdSchema,
2417
2552
  sessionId: IdSchema,
2418
- request: z22.record(z22.string(), z22.unknown())
2553
+ request: z24.record(z24.string(), z24.unknown())
2419
2554
  });
2420
- var PermissionRespondRequestSchema = z22.object({
2555
+ var PermissionRespondRequestSchema = z24.object({
2421
2556
  requestId: IdSchema,
2422
2557
  permissionRequestId: IdSchema,
2423
2558
  machineId: IdSchema,
2424
2559
  sessionId: IdSchema,
2425
- decision: z22.enum(["approve-once", "reject"]),
2426
- feedback: z22.string().trim().min(1).max(2048).optional()
2560
+ decision: z24.enum(["approve-once", "reject"]),
2561
+ feedback: z24.string().trim().min(1).max(2048).optional()
2427
2562
  });
2428
- var PermissionRespondResultSchema = z22.discriminatedUnion("ok", [
2429
- z22.object({
2430
- ok: z22.literal(true),
2563
+ var PermissionRespondResultSchema = z24.discriminatedUnion("ok", [
2564
+ z24.object({
2565
+ ok: z24.literal(true),
2431
2566
  requestId: IdSchema,
2432
2567
  permissionRequestId: IdSchema,
2433
2568
  machineId: IdSchema,
2434
2569
  sessionId: IdSchema
2435
2570
  }),
2436
- z22.object({
2437
- ok: z22.literal(false),
2571
+ z24.object({
2572
+ ok: z24.literal(false),
2438
2573
  requestId: IdSchema,
2439
2574
  permissionRequestId: IdSchema,
2440
2575
  machineId: IdSchema,
@@ -2444,42 +2579,42 @@ var PermissionRespondResultSchema = z22.discriminatedUnion("ok", [
2444
2579
  ]);
2445
2580
 
2446
2581
  // ../../shared/protocol/dist/conversation/timeline-sync.js
2447
- import { z as z23 } from "zod";
2582
+ import { z as z25 } from "zod";
2448
2583
  var TIMELINE_SYNC_MAX_EVENTS = 128;
2449
2584
  var TIMELINE_SYNC_MAX_BYTES = 6 * 1024 * 1024;
2450
2585
  var TIMELINE_IMAGE_CHUNK_BYTES = 48 * 1024;
2451
2586
  var TIMELINE_IMAGE_MAX_BYTES = 3 * 1024 * 1024;
2452
- var identity = z23.string().min(1).max(256);
2453
- var sequence = z23.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
2454
- var hash = z23.string().regex(/^[a-f0-9]{64}$/u);
2455
- var TimelineWatermarkSchema = z23.object({
2587
+ var identity = z25.string().min(1).max(256);
2588
+ var sequence = z25.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
2589
+ var hash = z25.string().regex(/^[a-f0-9]{64}$/u);
2590
+ var TimelineWatermarkSchema = z25.object({
2456
2591
  epoch: identity,
2457
2592
  sequence
2458
2593
  }).strict();
2459
- var TimelineSyncRequestSchema = z23.object({
2594
+ var TimelineSyncRequestSchema = z25.object({
2460
2595
  watermark: TimelineWatermarkSchema.optional(),
2461
- waitMs: z23.number().int().min(0).max(2e4).optional(),
2462
- resume: z23.boolean().optional()
2596
+ waitMs: z25.number().int().min(0).max(2e4).optional(),
2597
+ resume: z25.boolean().optional()
2463
2598
  }).strict();
2464
- var TimelineTextAppendSchema = z23.object({
2599
+ var TimelineTextAppendSchema = z25.object({
2465
2600
  itemId: identity,
2466
- baseRevision: z23.number().int().positive(),
2467
- revision: z23.number().int().positive(),
2468
- appendText: z23.string().min(1).max(5e5),
2469
- sourceEventIds: z23.array(identity).min(1).max(1e3).optional(),
2470
- sourceMessageIds: z23.array(identity).min(1).max(1e3).optional(),
2471
- sourceInteractionIds: z23.array(identity).min(1).max(1e3).optional()
2601
+ baseRevision: z25.number().int().positive(),
2602
+ revision: z25.number().int().positive(),
2603
+ appendText: z25.string().min(1).max(5e5),
2604
+ sourceEventIds: z25.array(identity).min(1).max(1e3).optional(),
2605
+ sourceMessageIds: z25.array(identity).min(1).max(1e3).optional(),
2606
+ sourceInteractionIds: z25.array(identity).min(1).max(1e3).optional()
2472
2607
  }).strict();
2473
- var TimelineSyncEventSchema = z23.discriminatedUnion("kind", [
2474
- z23.object({ kind: z23.literal("upsert"), sequence, item: ConversationItemSchema }).strict(),
2475
- z23.object({ kind: z23.literal("append"), sequence, append: TimelineTextAppendSchema }).strict(),
2476
- z23.object({
2477
- kind: z23.literal("step"),
2608
+ var TimelineSyncEventSchema = z25.discriminatedUnion("kind", [
2609
+ z25.object({ kind: z25.literal("upsert"), sequence, item: ConversationItemSchema }).strict(),
2610
+ z25.object({ kind: z25.literal("append"), sequence, append: TimelineTextAppendSchema }).strict(),
2611
+ z25.object({
2612
+ kind: z25.literal("step"),
2478
2613
  sequence,
2479
2614
  upsert: ConversationActivityStepUpsertSchema
2480
2615
  }).strict()
2481
2616
  ]);
2482
- var TimelineResyncReasonSchema = z23.enum([
2617
+ var TimelineResyncReasonSchema = z25.enum([
2483
2618
  "initial",
2484
2619
  "epoch-changed",
2485
2620
  "evicted",
@@ -2488,36 +2623,36 @@ var TimelineResyncReasonSchema = z23.enum([
2488
2623
  "rewind",
2489
2624
  "oversized"
2490
2625
  ]);
2491
- var TimelineSyncResponseSchema = z23.discriminatedUnion("status", [
2492
- z23.object({
2493
- status: z23.literal("snapshot"),
2626
+ var TimelineSyncResponseSchema = z25.discriminatedUnion("status", [
2627
+ z25.object({
2628
+ status: z25.literal("snapshot"),
2494
2629
  watermark: TimelineWatermarkSchema,
2495
2630
  page: SessionTimelinePageSchema
2496
2631
  }).strict(),
2497
- z23.object({
2498
- status: z23.literal("replay"),
2632
+ z25.object({
2633
+ status: z25.literal("replay"),
2499
2634
  watermark: TimelineWatermarkSchema,
2500
2635
  afterSequence: sequence,
2501
- events: z23.array(TimelineSyncEventSchema).max(TIMELINE_SYNC_MAX_EVENTS),
2502
- hasMore: z23.boolean()
2636
+ events: z25.array(TimelineSyncEventSchema).max(TIMELINE_SYNC_MAX_EVENTS),
2637
+ hasMore: z25.boolean()
2503
2638
  }).strict(),
2504
- z23.object({
2505
- status: z23.literal("resync"),
2639
+ z25.object({
2640
+ status: z25.literal("resync"),
2506
2641
  epoch: identity,
2507
2642
  reason: TimelineResyncReasonSchema
2508
2643
  }).strict()
2509
2644
  ]);
2510
- var TimelineImageRequestSchema = z23.object({
2645
+ var TimelineImageRequestSchema = z25.object({
2511
2646
  sha256: hash,
2512
- offset: z23.number().int().min(0).max(TIMELINE_IMAGE_MAX_BYTES - 1)
2647
+ offset: z25.number().int().min(0).max(TIMELINE_IMAGE_MAX_BYTES - 1)
2513
2648
  }).strict();
2514
- var TimelineImageChunkSchema = z23.object({
2649
+ var TimelineImageChunkSchema = z25.object({
2515
2650
  sha256: hash,
2516
- offset: z23.number().int().min(0).max(TIMELINE_IMAGE_MAX_BYTES - 1),
2517
- totalBytes: z23.number().int().positive().max(TIMELINE_IMAGE_MAX_BYTES),
2518
- mimeType: z23.enum(["image/gif", "image/jpeg", "image/png", "image/webp"]),
2519
- data: z23.string().min(4).max(Math.ceil(TIMELINE_IMAGE_CHUNK_BYTES / 3) * 4).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u),
2520
- eof: z23.boolean()
2651
+ offset: z25.number().int().min(0).max(TIMELINE_IMAGE_MAX_BYTES - 1),
2652
+ totalBytes: z25.number().int().positive().max(TIMELINE_IMAGE_MAX_BYTES),
2653
+ mimeType: z25.enum(["image/gif", "image/jpeg", "image/png", "image/webp"]),
2654
+ data: z25.string().min(4).max(Math.ceil(TIMELINE_IMAGE_CHUNK_BYTES / 3) * 4).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u),
2655
+ eof: z25.boolean()
2521
2656
  }).strict().superRefine((chunk, context) => {
2522
2657
  const padding = chunk.data.endsWith("==") ? 2 : chunk.data.endsWith("=") ? 1 : 0;
2523
2658
  const length = chunk.data.length / 4 * 3 - padding;
@@ -2528,10 +2663,10 @@ var TimelineImageChunkSchema = z23.object({
2528
2663
  });
2529
2664
 
2530
2665
  // ../../shared/protocol/dist/workbench.js
2531
- import { z as z25 } from "zod";
2666
+ import { z as z27 } from "zod";
2532
2667
 
2533
2668
  // ../../shared/protocol/dist/schedules.js
2534
- import { z as z24 } from "zod";
2669
+ import { z as z26 } from "zod";
2535
2670
  var SCHEDULE_OPERATIONS = [
2536
2671
  "schedule.snapshot",
2537
2672
  "schedule.create",
@@ -2539,90 +2674,90 @@ var SCHEDULE_OPERATIONS = [
2539
2674
  "schedule.draft.dismiss",
2540
2675
  "schedule.resume"
2541
2676
  ];
2542
- var Id = z24.string().min(1).max(256);
2543
- var NativeId = z24.number().int().positive().max(Number.MAX_SAFE_INTEGER);
2544
- var Time = z24.iso.datetime({ offset: true });
2545
- var WorkbenchScheduleRuleSchema = z24.discriminatedUnion("kind", [
2546
- z24.object({ kind: z24.literal("once"), at: Time }).strict(),
2547
- z24.object({
2548
- kind: z24.literal("interval"),
2549
- seconds: z24.number().int().min(10).max(86400),
2550
- recurring: z24.boolean().optional()
2677
+ var Id = z26.string().min(1).max(256);
2678
+ var NativeId = z26.number().int().positive().max(Number.MAX_SAFE_INTEGER);
2679
+ var Time = z26.iso.datetime({ offset: true });
2680
+ var WorkbenchScheduleRuleSchema = z26.discriminatedUnion("kind", [
2681
+ z26.object({ kind: z26.literal("once"), at: Time }).strict(),
2682
+ z26.object({
2683
+ kind: z26.literal("interval"),
2684
+ seconds: z26.number().int().min(10).max(86400),
2685
+ recurring: z26.boolean().optional()
2551
2686
  }).strict(),
2552
- z24.object({
2553
- kind: z24.literal("cron"),
2554
- expression: z24.string().trim().min(9).max(256).regex(/^\S+(?: +\S+){4}$/),
2555
- timezone: z24.string().min(1).max(128).regex(/^[A-Za-z0-9_+./-]+$/)
2687
+ z26.object({
2688
+ kind: z26.literal("cron"),
2689
+ expression: z26.string().trim().min(9).max(256).regex(/^\S+(?: +\S+){4}$/),
2690
+ timezone: z26.string().min(1).max(128).regex(/^[A-Za-z0-9_+./-]+$/)
2556
2691
  }).strict()
2557
2692
  ]);
2558
2693
  var Content = {
2559
2694
  rule: WorkbenchScheduleRuleSchema,
2560
- prompt: z24.string().max(16e3).describe("The execution prompt, or ONLY the user's exact arguments when skill is set. Do not include the skill name, slash prefix, scheduling instructions, or extra explanation in skill arguments."),
2561
- skill: z24.string().min(1).max(256).regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]*$/).optional().describe("A genuine callable skill name from this session, without the leading slash. Set this field when the user requests a skill; put only its exact arguments in prompt.")
2695
+ prompt: z26.string().max(16e3).describe("The execution prompt, or ONLY the user's exact arguments when skill is set. Do not include the skill name, slash prefix, scheduling instructions, or extra explanation in skill arguments."),
2696
+ skill: z26.string().min(1).max(256).regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]*$/).optional().describe("A genuine callable skill name from this session, without the leading slash. Set this field when the user requests a skill; put only its exact arguments in prompt.")
2562
2697
  };
2563
- var WorkbenchScheduleProposalSchema = z24.object(Content).strict().refine((value) => value.prompt.trim().length > 0 || value.skill !== void 0, { message: "A prompt or skill is required" });
2564
- var WorkbenchScheduleDraftSchema = z24.object({
2565
- id: z24.uuid(),
2698
+ var WorkbenchScheduleProposalSchema = z26.object(Content).strict().refine((value) => value.prompt.trim().length > 0 || value.skill !== void 0, { message: "A prompt or skill is required" });
2699
+ var WorkbenchScheduleDraftSchema = z26.object({
2700
+ id: z26.uuid(),
2566
2701
  createdAt: Time,
2567
2702
  ...Content
2568
2703
  }).strict();
2569
- var WorkbenchScheduleEntrySchema = z24.object({
2704
+ var WorkbenchScheduleEntrySchema = z26.object({
2570
2705
  id: NativeId,
2571
- prompt: z24.string().max(1e5),
2572
- displayPrompt: z24.string().max(1e5).optional(),
2573
- recurring: z24.boolean(),
2706
+ prompt: z26.string().max(1e5),
2707
+ displayPrompt: z26.string().max(1e5).optional(),
2708
+ recurring: z26.boolean(),
2574
2709
  nextRunAt: Time,
2575
- intervalMs: z24.number().int().positive().optional(),
2576
- cron: z24.string().max(256).optional(),
2577
- timezone: z24.string().max(128).optional(),
2710
+ intervalMs: z26.number().int().positive().optional(),
2711
+ cron: z26.string().max(256).optional(),
2712
+ timezone: z26.string().max(128).optional(),
2578
2713
  at: Time.optional()
2579
2714
  }).strict();
2580
- var WorkbenchScheduleResultSchema = z24.object({
2715
+ var WorkbenchScheduleResultSchema = z26.object({
2581
2716
  id: Id,
2582
2717
  scheduleId: NativeId,
2583
2718
  triggerEventId: Id,
2584
2719
  time: Time,
2585
- prompt: z24.string().max(16e3),
2586
- status: z24.enum(["reply", "error", "merged", "pending", "unknown"]),
2587
- reply: z24.string().max(16e3).optional(),
2720
+ prompt: z26.string().max(16e3),
2721
+ status: z26.enum(["reply", "error", "merged", "pending", "unknown"]),
2722
+ reply: z26.string().max(16e3).optional(),
2588
2723
  replyEventId: Id.optional(),
2589
- error: z24.string().max(1024).optional()
2724
+ error: z26.string().max(1024).optional()
2590
2725
  }).strict();
2591
- var WorkbenchScheduleSnapshotSchema = z24.object({
2592
- state: z24.enum(["active", "needs-resume"]),
2593
- workingDirectory: z24.string().max(32768).optional(),
2594
- timezone: z24.string().max(128).optional(),
2595
- entries: z24.array(WorkbenchScheduleEntrySchema).max(256),
2596
- drafts: z24.array(WorkbenchScheduleDraftSchema).max(100),
2597
- results: z24.array(WorkbenchScheduleResultSchema).max(100),
2598
- historyTruncated: z24.boolean(),
2726
+ var WorkbenchScheduleSnapshotSchema = z26.object({
2727
+ state: z26.enum(["active", "needs-resume"]),
2728
+ workingDirectory: z26.string().max(32768).optional(),
2729
+ timezone: z26.string().max(128).optional(),
2730
+ entries: z26.array(WorkbenchScheduleEntrySchema).max(256),
2731
+ drafts: z26.array(WorkbenchScheduleDraftSchema).max(100),
2732
+ results: z26.array(WorkbenchScheduleResultSchema).max(100),
2733
+ historyTruncated: z26.boolean(),
2599
2734
  sampledAt: Time
2600
2735
  }).strict();
2601
2736
  var Submission = {
2602
- operationId: z24.uuid(),
2603
- operationCreatedAt: z24.iso.datetime(),
2737
+ operationId: z26.uuid(),
2738
+ operationCreatedAt: z26.iso.datetime(),
2604
2739
  expectedAgentRunId: Id
2605
2740
  };
2606
- var WorkbenchScheduleCreateRequestSchema = z24.object({
2741
+ var WorkbenchScheduleCreateRequestSchema = z26.object({
2607
2742
  ...Submission,
2608
2743
  ...Content,
2609
- draftId: z24.uuid().optional()
2744
+ draftId: z26.uuid().optional()
2610
2745
  }).strict().refine((value) => value.prompt.trim().length > 0 || value.skill !== void 0, { message: "A prompt or skill is required" });
2611
- var WorkbenchScheduleCreateResultSchema = z24.object({
2746
+ var WorkbenchScheduleCreateResultSchema = z26.object({
2612
2747
  snapshot: WorkbenchScheduleSnapshotSchema,
2613
- verified: z24.boolean()
2748
+ verified: z26.boolean()
2614
2749
  }).strict();
2615
- var WorkbenchScheduleDeleteRequestSchema = z24.object({
2750
+ var WorkbenchScheduleDeleteRequestSchema = z26.object({
2616
2751
  ...Submission,
2617
2752
  id: NativeId
2618
2753
  }).strict();
2619
- var WorkbenchScheduleDeleteResultSchema = z24.object({
2754
+ var WorkbenchScheduleDeleteResultSchema = z26.object({
2620
2755
  snapshot: WorkbenchScheduleSnapshotSchema,
2621
- removed: z24.boolean()
2756
+ removed: z26.boolean()
2622
2757
  }).strict();
2623
- var WorkbenchScheduleDraftDismissRequestSchema = z24.object({
2758
+ var WorkbenchScheduleDraftDismissRequestSchema = z26.object({
2624
2759
  ...Submission,
2625
- draftId: z24.uuid()
2760
+ draftId: z26.uuid()
2626
2761
  }).strict();
2627
2762
  var ScheduleAndroidSchemas = {
2628
2763
  WorkbenchScheduleRule: WorkbenchScheduleRuleSchema,
@@ -2639,10 +2774,10 @@ var ScheduleAndroidSchemas = {
2639
2774
  };
2640
2775
 
2641
2776
  // ../../shared/protocol/dist/workbench.js
2642
- var Id2 = z25.string().trim().min(1).max(256);
2643
- var Text = z25.string().max(1e5);
2644
- var Count = z25.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
2645
- var Failure = z25.object({ code: Id2, message: z25.string().min(1).max(1024) }).strict();
2777
+ var Id2 = z27.string().trim().min(1).max(256);
2778
+ var Text = z27.string().max(1e5);
2779
+ var Count = z27.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
2780
+ var Failure = z27.object({ code: Id2, message: z27.string().min(1).max(1024) }).strict();
2646
2781
  var WORKBENCH_OPERATIONS = [
2647
2782
  "operation.get",
2648
2783
  "question.ask",
@@ -2661,104 +2796,104 @@ var WORKBENCH_OPERATIONS = [
2661
2796
  ...SCHEDULE_OPERATIONS
2662
2797
  ];
2663
2798
  var Submission2 = {
2664
- operationId: z25.uuid(),
2665
- operationCreatedAt: z25.iso.datetime(),
2799
+ operationId: z27.uuid(),
2800
+ operationCreatedAt: z27.iso.datetime(),
2666
2801
  expectedAgentRunId: Id2
2667
2802
  };
2668
- var WorkbenchOperationGetSchema = z25.object({ operationId: z25.uuid() }).strict();
2669
- var WorkbenchOperationStatusSchema = z25.object({
2670
- operationId: z25.uuid(),
2671
- operation: z25.enum(WORKBENCH_OPERATIONS),
2803
+ var WorkbenchOperationGetSchema = z27.object({ operationId: z27.uuid() }).strict();
2804
+ var WorkbenchOperationStatusSchema = z27.object({
2805
+ operationId: z27.uuid(),
2806
+ operation: z27.enum(WORKBENCH_OPERATIONS),
2672
2807
  agentRunId: Id2,
2673
- state: z25.enum(["running", "succeeded", "failed", "uncertain", "result-expired"]),
2674
- result: z25.record(z25.string(), z25.json()).optional(),
2808
+ state: z27.enum(["running", "succeeded", "failed", "uncertain", "result-expired"]),
2809
+ result: z27.record(z27.string(), z27.json()).optional(),
2675
2810
  error: Failure.optional()
2676
2811
  }).strict().superRefine((value, context) => {
2677
2812
  if (value.state === "succeeded" !== (value.result !== void 0) || (value.state === "failed" || value.state === "uncertain") !== (value.error !== void 0)) {
2678
2813
  context.addIssue({ code: "custom", message: "Invalid operation state payload" });
2679
2814
  }
2680
2815
  });
2681
- var WorkbenchAskRequestSchema = z25.object({
2816
+ var WorkbenchAskRequestSchema = z27.object({
2682
2817
  ...Submission2,
2683
- question: z25.string().trim().min(1).max(16e3)
2818
+ question: z27.string().trim().min(1).max(16e3)
2684
2819
  }).strict();
2685
- var WorkbenchAskResultSchema = z25.object({ answer: Text }).strict();
2686
- var WorkbenchEmptyRequestSchema = z25.object({}).strict();
2687
- var WorkbenchSubmitRequestSchema = z25.object(Submission2).strict();
2688
- var WorkbenchResearchCreateRequestSchema = z25.object({
2820
+ var WorkbenchAskResultSchema = z27.object({ answer: Text }).strict();
2821
+ var WorkbenchEmptyRequestSchema = z27.object({}).strict();
2822
+ var WorkbenchSubmitRequestSchema = z27.object(Submission2).strict();
2823
+ var WorkbenchResearchCreateRequestSchema = z27.object({
2689
2824
  ...Submission2,
2690
- title: z25.string().trim().min(1).max(120),
2691
- question: z25.string().trim().min(1).max(16e3),
2825
+ title: z27.string().trim().min(1).max(120),
2826
+ question: z27.string().trim().min(1).max(16e3),
2692
2827
  sourceItemId: Id2.optional(),
2693
- deferInitialPrompt: z25.literal(true).optional()
2828
+ deferInitialPrompt: z27.literal(true).optional()
2694
2829
  }).strict();
2695
- var WorkbenchResearchThreadSchema = z25.object({
2830
+ var WorkbenchResearchThreadSchema = z27.object({
2696
2831
  sessionId: Id2,
2697
2832
  parentSessionId: Id2,
2698
- title: z25.string().min(1).max(120),
2699
- createdAt: z25.iso.datetime(),
2833
+ title: z27.string().min(1).max(120),
2834
+ createdAt: z27.iso.datetime(),
2700
2835
  contextAnchor: Id2.optional(),
2701
- contextTruncated: z25.boolean(),
2702
- detached: z25.boolean(),
2703
- state: z25.enum(["creating", "ready", "failed"])
2836
+ contextTruncated: z27.boolean(),
2837
+ detached: z27.boolean(),
2838
+ state: z27.enum(["creating", "ready", "failed"])
2704
2839
  }).strict();
2705
- var WorkbenchResearchCreateResultSchema = z25.object({
2840
+ var WorkbenchResearchCreateResultSchema = z27.object({
2706
2841
  thread: WorkbenchResearchThreadSchema
2707
2842
  }).strict();
2708
- var WorkbenchResearchListResultSchema = z25.object({
2709
- threads: z25.array(WorkbenchResearchThreadSchema).max(100)
2843
+ var WorkbenchResearchListResultSchema = z27.object({
2844
+ threads: z27.array(WorkbenchResearchThreadSchema).max(100)
2710
2845
  }).strict();
2711
- var WorkbenchResearchTimelineRequestSchema = z25.object({
2846
+ var WorkbenchResearchTimelineRequestSchema = z27.object({
2712
2847
  cursor: Id2.optional()
2713
2848
  }).strict();
2714
- var WorkbenchResearchSendRequestSchema = z25.object({
2849
+ var WorkbenchResearchSendRequestSchema = z27.object({
2715
2850
  ...Submission2,
2716
- prompt: z25.string().trim().min(1).max(16e3)
2851
+ prompt: z27.string().trim().min(1).max(16e3)
2717
2852
  }).strict();
2718
- var WorkbenchResearchSendResultSchema = z25.object({ messageId: Id2 }).strict();
2719
- var WorkbenchCompletedResultSchema = z25.object({ completed: z25.boolean() }).strict();
2720
- var WorkbenchCommandSchema = z25.object({
2721
- name: z25.string().min(1).max(260),
2722
- description: z25.string().max(4096),
2723
- argumentHint: z25.string().max(1024).optional(),
2724
- kind: z25.enum(["builtin", "skill", "client"]),
2725
- allowDuringExecution: z25.boolean(),
2726
- supported: z25.boolean(),
2727
- reason: z25.string().max(1024).optional()
2853
+ var WorkbenchResearchSendResultSchema = z27.object({ messageId: Id2 }).strict();
2854
+ var WorkbenchCompletedResultSchema = z27.object({ completed: z27.boolean() }).strict();
2855
+ var WorkbenchCommandSchema = z27.object({
2856
+ name: z27.string().min(1).max(260),
2857
+ description: z27.string().max(4096),
2858
+ argumentHint: z27.string().max(1024).optional(),
2859
+ kind: z27.enum(["builtin", "skill", "client"]),
2860
+ allowDuringExecution: z27.boolean(),
2861
+ supported: z27.boolean(),
2862
+ reason: z27.string().max(1024).optional()
2728
2863
  }).strict();
2729
- var WorkbenchCommandListResultSchema = z25.object({
2730
- commands: z25.array(WorkbenchCommandSchema).max(512)
2864
+ var WorkbenchCommandListResultSchema = z27.object({
2865
+ commands: z27.array(WorkbenchCommandSchema).max(512)
2731
2866
  }).strict();
2732
- var WorkbenchCommandInvokeRequestSchema = z25.object({
2867
+ var WorkbenchCommandInvokeRequestSchema = z27.object({
2733
2868
  ...Submission2,
2734
- name: z25.string().trim().min(1).max(260),
2735
- input: z25.string().max(16e3)
2869
+ name: z27.string().trim().min(1).max(260),
2870
+ input: z27.string().max(16e3)
2736
2871
  }).strict();
2737
- var WorkbenchCommandChoiceSchema = z25.object({
2738
- name: z25.string().min(1).max(260),
2739
- label: z25.string().min(1).max(1024),
2740
- input: z25.string().max(16e3)
2872
+ var WorkbenchCommandChoiceSchema = z27.object({
2873
+ name: z27.string().min(1).max(260),
2874
+ label: z27.string().min(1).max(1024),
2875
+ input: z27.string().max(16e3)
2741
2876
  }).strict();
2742
- var WorkbenchCommandResultSchema = z25.discriminatedUnion("kind", [
2743
- z25.object({ kind: z25.literal("text"), text: Text }).strict(),
2744
- z25.object({ kind: z25.literal("completed") }).strict(),
2745
- z25.object({ kind: z25.literal("sent"), messageId: Id2 }).strict(),
2746
- z25.object({
2747
- kind: z25.literal("select-subcommand"),
2748
- choices: z25.array(WorkbenchCommandChoiceSchema).min(1).max(100)
2877
+ var WorkbenchCommandResultSchema = z27.discriminatedUnion("kind", [
2878
+ z27.object({ kind: z27.literal("text"), text: Text }).strict(),
2879
+ z27.object({ kind: z27.literal("completed") }).strict(),
2880
+ z27.object({ kind: z27.literal("sent"), messageId: Id2 }).strict(),
2881
+ z27.object({
2882
+ kind: z27.literal("select-subcommand"),
2883
+ choices: z27.array(WorkbenchCommandChoiceSchema).min(1).max(100)
2749
2884
  }).strict()
2750
2885
  ]);
2751
- var WorkbenchQueueItemSchema = z25.object({
2886
+ var WorkbenchQueueItemSchema = z27.object({
2752
2887
  id: Id2,
2753
- kind: z25.string().min(1).max(64),
2754
- texts: z25.array(z25.string().max(1e5)).min(1).max(100),
2755
- actions: z25.array(z25.enum(["edit", "remove", "move", "send-now"])).max(4)
2888
+ kind: z27.string().min(1).max(64),
2889
+ texts: z27.array(z27.string().max(1e5)).min(1).max(100),
2890
+ actions: z27.array(z27.enum(["edit", "remove", "move", "send-now"])).max(4)
2756
2891
  }).strict();
2757
- var WorkbenchQueueSnapshotSchema = z25.object({
2892
+ var WorkbenchQueueSnapshotSchema = z27.object({
2758
2893
  generation: Id2,
2759
2894
  revision: Id2,
2760
- items: z25.array(WorkbenchQueueItemSchema).max(512),
2761
- steeringMessages: z25.array(z25.string().max(1e5)).max(512)
2895
+ items: z27.array(WorkbenchQueueItemSchema).max(512),
2896
+ steeringMessages: z27.array(z27.string().max(1e5)).max(512)
2762
2897
  }).strict();
2763
2898
  var QueueMutation = {
2764
2899
  ...Submission2,
@@ -2766,48 +2901,48 @@ var QueueMutation = {
2766
2901
  revision: Id2,
2767
2902
  id: Id2
2768
2903
  };
2769
- var WorkbenchQueueMutationRequestSchema = z25.discriminatedUnion("action", [
2770
- z25.object({ ...QueueMutation, action: z25.literal("edit"), prompt: z25.string().trim().min(1).max(1e5) }).strict(),
2771
- z25.object({ ...QueueMutation, action: z25.literal("remove") }).strict(),
2772
- z25.object({ ...QueueMutation, action: z25.literal("move"), toPosition: z25.number().int().min(0).max(511) }).strict(),
2773
- z25.object({ ...QueueMutation, action: z25.literal("send-now") }).strict()
2904
+ var WorkbenchQueueMutationRequestSchema = z27.discriminatedUnion("action", [
2905
+ z27.object({ ...QueueMutation, action: z27.literal("edit"), prompt: z27.string().trim().min(1).max(1e5) }).strict(),
2906
+ z27.object({ ...QueueMutation, action: z27.literal("remove") }).strict(),
2907
+ z27.object({ ...QueueMutation, action: z27.literal("move"), toPosition: z27.number().int().min(0).max(511) }).strict(),
2908
+ z27.object({ ...QueueMutation, action: z27.literal("send-now") }).strict()
2774
2909
  ]);
2775
- var WorkbenchQueueMutationResultSchema = z25.object({
2776
- changed: z25.boolean(),
2910
+ var WorkbenchQueueMutationResultSchema = z27.object({
2911
+ changed: z27.boolean(),
2777
2912
  snapshot: WorkbenchQueueSnapshotSchema
2778
2913
  }).strict();
2779
- var WorkbenchTokenMetricSchema = z25.object({
2780
- kind: z25.string().min(1).max(128),
2914
+ var WorkbenchTokenMetricSchema = z27.object({
2915
+ kind: z27.string().min(1).max(128),
2781
2916
  count: Count
2782
2917
  }).strict();
2783
- var WorkbenchModelUsageSchema = z25.object({
2918
+ var WorkbenchModelUsageSchema = z27.object({
2784
2919
  model: Id2,
2785
2920
  requests: Count,
2786
- premiumRequestCost: z25.number().finite().nonnegative(),
2787
- tokens: z25.array(WorkbenchTokenMetricSchema).max(32)
2921
+ premiumRequestCost: z27.number().finite().nonnegative(),
2922
+ tokens: z27.array(WorkbenchTokenMetricSchema).max(32)
2788
2923
  }).strict();
2789
- var WorkbenchContextSchema = z25.object({
2924
+ var WorkbenchContextSchema = z27.object({
2790
2925
  currentTokens: Count,
2791
2926
  tokenLimit: Count,
2792
2927
  systemTokens: Count.optional(),
2793
2928
  conversationTokens: Count.optional(),
2794
2929
  toolTokens: Count.optional()
2795
2930
  }).strict();
2796
- var WorkbenchInsightsSchema = z25.object({
2797
- sampledAt: z25.iso.datetime(),
2931
+ var WorkbenchInsightsSchema = z27.object({
2932
+ sampledAt: z27.iso.datetime(),
2798
2933
  generation: Id2,
2799
2934
  model: Id2.optional(),
2800
2935
  totalUserRequests: Count,
2801
- premiumRequestCost: z25.number().finite().nonnegative(),
2802
- nanoAiu: z25.string().regex(/^\d+$/).max(40).optional(),
2803
- tokens: z25.array(WorkbenchTokenMetricSchema).max(32),
2804
- models: z25.array(WorkbenchModelUsageSchema).max(100),
2936
+ premiumRequestCost: z27.number().finite().nonnegative(),
2937
+ nanoAiu: z27.string().regex(/^\d+$/).max(40).optional(),
2938
+ tokens: z27.array(WorkbenchTokenMetricSchema).max(32),
2939
+ models: z27.array(WorkbenchModelUsageSchema).max(100),
2805
2940
  context: WorkbenchContextSchema.optional(),
2806
- canCompact: z25.boolean(),
2807
- compactUnavailableReason: z25.string().max(1024).optional()
2941
+ canCompact: z27.boolean(),
2942
+ compactUnavailableReason: z27.string().max(1024).optional()
2808
2943
  }).strict();
2809
- var WorkbenchCompactResultSchema = z25.object({
2810
- success: z25.boolean(),
2944
+ var WorkbenchCompactResultSchema = z27.object({
2945
+ success: z27.boolean(),
2811
2946
  tokensRemoved: Count,
2812
2947
  messagesRemoved: Count
2813
2948
  }).strict();
@@ -2843,15 +2978,27 @@ var WorkbenchAndroidSchemas = {
2843
2978
 
2844
2979
  // ../../shared/protocol/dist/codegen/android-schemas.js
2845
2980
  var AndroidProtocolSchemas = {
2981
+ TimelineImageBlobRequest: TimelineImageBlobRequestSchema,
2982
+ TimelineImageBlobResult: TimelineImageBlobResultSchema,
2983
+ SessionImageUploadRequest: SessionImageUploadRequestSchema,
2984
+ SessionImageScope: SessionImageScopeSchema,
2985
+ SessionImageUploadResult: SessionImageUploadResultSchema,
2986
+ SessionImageCommitResult: SessionImageCommitResultSchema,
2987
+ SessionImageDownloadResult: SessionImageDownloadResultSchema,
2846
2988
  ...WorkbenchAndroidSchemas,
2847
2989
  ...ScheduleAndroidSchemas,
2848
2990
  SessionCommunication: SessionCommunicationSchema,
2991
+ SessionGitDiffData: SessionGitDiffDataSchema,
2992
+ SessionGitDiffEntry: SessionGitDiffEntrySchema,
2993
+ SessionGitDiffResultData: SessionGitDiffResultDataSchema,
2994
+ SessionGitDiffGzipResultData: SessionGitDiffGzipResultDataSchema,
2849
2995
  SessionRenameData: SessionRenameDataSchema,
2850
2996
  SessionRenameResultData: SessionRenameResultDataSchema,
2851
2997
  SessionDirectoryListData: SessionDirectoryListDataSchema,
2852
2998
  SessionDirectoryListResultData: SessionDirectoryListResultDataSchema,
2853
2999
  SessionFileReadData: SessionFileReadDataSchema,
2854
3000
  SessionFileReadResultData: SessionFileReadResultDataSchema,
3001
+ SessionFileReadV2ResultData: SessionFileReadV2ResultDataSchema,
2855
3002
  SessionResourceReadData: SessionResourceReadDataSchema,
2856
3003
  SessionResourceReadResultData: SessionResourceReadResultDataSchema,
2857
3004
  SessionDirectoryListRequest: SessionDirectoryListRequestSchema,
@@ -2941,55 +3088,84 @@ var AndroidProtocolSchemas = {
2941
3088
  };
2942
3089
 
2943
3090
  // src/config.ts
2944
- import { AgentSelectionSchema as AgentSelectionSchema2 } from "@agentknight/sdk";
2945
- var BooleanStringSchema = z26.enum(["true", "false"]).default("false").transform((value) => value === "true");
2946
- var EnabledBooleanStringSchema = z26.enum(["true", "false"]).default("true").transform((value) => value === "true");
2947
- var OptionalPathSchema = z26.preprocess(
3091
+ import {
3092
+ AgentSelectionSchema as AgentSelectionSchema2,
3093
+ SessionImageRelayUrlSchema,
3094
+ SessionImagesConfigSchema
3095
+ } from "@agentknight/sdk";
3096
+ var BooleanStringSchema = z28.enum(["true", "false"]).default("false").transform((value) => value === "true");
3097
+ var EnabledBooleanStringSchema = z28.enum(["true", "false"]).default("true").transform((value) => value === "true");
3098
+ var OptionalPathSchema = z28.preprocess(
2948
3099
  (value) => typeof value === "string" && value.trim() === "" ? void 0 : value,
2949
- z26.string().trim().min(1).optional()
3100
+ z28.string().trim().min(1).optional()
2950
3101
  );
2951
- var AcpArgumentsSchema = z26.string().default("[]").transform((value, context) => {
3102
+ var AcpArgumentsSchema = z28.string().default("[]").transform((value, context) => {
2952
3103
  let decoded;
2953
3104
  try {
2954
3105
  decoded = JSON.parse(value);
2955
3106
  } catch (error) {
2956
3107
  if (!(error instanceof SyntaxError)) throw error;
2957
3108
  context.addIssue({ code: "custom", message: "AGENTKNIGHT_ACP_ARGS must be a JSON array of strings" });
2958
- return z26.NEVER;
3109
+ return z28.NEVER;
2959
3110
  }
2960
- const parsed = z26.array(z26.string()).max(128).safeParse(decoded);
3111
+ const parsed = z28.array(z28.string()).max(128).safeParse(decoded);
2961
3112
  if (!parsed.success) {
2962
3113
  context.addIssue({ code: "custom", message: "AGENTKNIGHT_ACP_ARGS must be a JSON array of strings" });
2963
- return z26.NEVER;
3114
+ return z28.NEVER;
2964
3115
  }
2965
3116
  return parsed.data;
2966
3117
  });
2967
- var EnvironmentSchema = z26.object({
2968
- RELAY_URL: z26.url(),
2969
- RELAY_TOKEN: z26.string().min(24).optional(),
2970
- RELAY_AUTH: z26.enum(["token", "microsoft"]).optional(),
2971
- USER_ID: z26.string().trim().min(1).max(256).default("admin"),
2972
- AGENTKNIGHT_MACHINE_NAME: z26.string().trim().min(1).max(120).optional(),
2973
- AGENTKNIGHT_HOME: z26.string().trim().min(1).optional(),
2974
- AGENTKNIGHT_WORKSPACE_ROOT: z26.string().trim().min(1).optional(),
2975
- AGENTKNIGHT_CODING_AGENT: z26.enum(["managed", "copilot", "pi", "acp"]).default("managed"),
3118
+ var EnvironmentSchema = z28.object({
3119
+ RELAY_URL: z28.url(),
3120
+ RELAY_TOKEN: z28.string().min(24).optional(),
3121
+ RELAY_AUTH: z28.enum(["token", "microsoft"]).optional(),
3122
+ USER_ID: z28.string().trim().min(1).max(256).default("admin"),
3123
+ AGENTKNIGHT_MACHINE_NAME: z28.string().trim().min(1).max(120).optional(),
3124
+ AGENTKNIGHT_HOME: z28.string().trim().min(1).optional(),
3125
+ AGENTKNIGHT_WORKSPACE_ROOT: z28.string().trim().min(1).optional(),
3126
+ AGENTKNIGHT_CODING_AGENT: z28.enum(["managed", "copilot", "pi", "acp"]).default("managed"),
2976
3127
  AGENTKNIGHT_GROUP_CHAT_ENABLED: EnabledBooleanStringSchema,
2977
3128
  AGENTKNIGHT_PEER_CHAT_ENABLED: EnabledBooleanStringSchema,
2978
3129
  PI_CODING_AGENT_DIR: OptionalPathSchema,
2979
3130
  AGENTKNIGHT_ACP_COMMAND: OptionalPathSchema,
2980
3131
  AGENTKNIGHT_ACP_ARGS: AcpArgumentsSchema,
2981
- SESSION_REFRESH_INTERVAL_MS: z26.coerce.number().int().min(5e3).max(36e5).default(3e4),
2982
- HEARTBEAT_INTERVAL_MS: z26.coerce.number().int().min(5e3).max(12e4).default(15e3),
2983
- LOG_LEVEL: z26.enum(["fatal", "error", "warn", "info", "debug", "trace", "silent"]).default("info"),
3132
+ SESSION_REFRESH_INTERVAL_MS: z28.coerce.number().int().min(5e3).max(36e5).default(3e4),
3133
+ HEARTBEAT_INTERVAL_MS: z28.coerce.number().int().min(5e3).max(12e4).default(15e3),
3134
+ LOG_LEVEL: z28.enum(["fatal", "error", "warn", "info", "debug", "trace", "silent"]).default("info"),
2984
3135
  SHOW_PAIRING_QR: BooleanStringSchema,
2985
3136
  PAIRING_PAGE_ENABLED: EnabledBooleanStringSchema,
2986
- PAIRING_PAGE_PORT: z26.coerce.number().int().min(1024).max(65535).default(defaultPairingPagePort),
3137
+ PAIRING_PAGE_PORT: z28.coerce.number().int().min(1024).max(65535).default(defaultPairingPagePort),
2987
3138
  PC_AGENT_EXIT_AFTER_SNAPSHOT: BooleanStringSchema,
2988
3139
  SNAPSHOT_SUPPRESSION_ENABLED: EnabledBooleanStringSchema,
2989
3140
  TIMELINE_COMPRESSION_ENABLED: BooleanStringSchema,
2990
3141
  TIMELINE_INCREMENTAL_ENABLED: EnabledBooleanStringSchema,
2991
- SECURE_MESSAGE_PACKET_BUDGET: z26.coerce.number().int().min(2048).max(SECURE_MESSAGE_MAX_CIPHERTEXT_LENGTH).default(SECURE_MESSAGE_MAX_CIPHERTEXT_LENGTH)
3142
+ SESSION_IMAGES_ALLOW_UNENCRYPTED_STORAGE: BooleanStringSchema,
3143
+ SESSION_IMAGES_STORAGE_ACCOUNT: SessionImagesConfigSchema.shape.storageAccount.optional(),
3144
+ SESSION_IMAGES_STORAGE_CONTAINER: SessionImagesConfigSchema.shape.storageContainer.optional(),
3145
+ SECURE_MESSAGE_PACKET_BUDGET: z28.coerce.number().int().min(2048).max(SECURE_MESSAGE_MAX_CIPHERTEXT_LENGTH).default(SECURE_MESSAGE_MAX_CIPHERTEXT_LENGTH)
2992
3146
  }).superRefine((value, context) => {
3147
+ if (value.SESSION_IMAGES_ALLOW_UNENCRYPTED_STORAGE) {
3148
+ if (value.SESSION_IMAGES_STORAGE_ACCOUNT === void 0) {
3149
+ context.addIssue({
3150
+ code: "custom",
3151
+ path: ["SESSION_IMAGES_STORAGE_ACCOUNT"],
3152
+ message: "Session images require an independently configured Azure storage account"
3153
+ });
3154
+ }
3155
+ if (!SessionImageRelayUrlSchema.safeParse(value.RELAY_URL).success) {
3156
+ context.addIssue({
3157
+ code: "custom",
3158
+ path: ["RELAY_URL"],
3159
+ message: "Session images require an HTTPS Relay origin without a path, credentials, query or fragment"
3160
+ });
3161
+ }
3162
+ } else if (value.SESSION_IMAGES_STORAGE_ACCOUNT !== void 0 || value.SESSION_IMAGES_STORAGE_CONTAINER !== void 0) {
3163
+ context.addIssue({
3164
+ code: "custom",
3165
+ path: ["SESSION_IMAGES_ALLOW_UNENCRYPTED_STORAGE"],
3166
+ message: "Session images require explicit consent to storage that is NOT end-to-end encrypted"
3167
+ });
3168
+ }
2993
3169
  if (value.RELAY_AUTH === "token" && value.RELAY_TOKEN === void 0) {
2994
3170
  context.addIssue({ code: "custom", path: ["RELAY_TOKEN"], message: "Token authentication requires RELAY_TOKEN" });
2995
3171
  }
@@ -3039,8 +3215,8 @@ function loadConfig(environment = process.env, options = {}) {
3039
3215
  }
3040
3216
  return {
3041
3217
  ...settings2,
3042
- relayToken: z26.string().min(32).max(4096).parse(options.relayCredential.token),
3043
- userId: z26.string().min(1).max(256).parse(options.relayCredential.user.userId)
3218
+ relayToken: z28.string().min(32).max(4096).parse(options.relayCredential.token),
3219
+ userId: z28.string().min(1).max(256).parse(options.relayCredential.user.userId)
3044
3220
  };
3045
3221
  }
3046
3222
  function loadStartupConfig(environment = process.env, options = {}) {
@@ -3068,7 +3244,14 @@ function loadStartupConfig(environment = process.env, options = {}) {
3068
3244
  snapshotSuppressionEnabled: parsed.SNAPSHOT_SUPPRESSION_ENABLED,
3069
3245
  timelineCompressionEnabled: parsed.TIMELINE_COMPRESSION_ENABLED,
3070
3246
  timelineIncrementalEnabled: parsed.TIMELINE_INCREMENTAL_ENABLED,
3071
- secureMessagePacketBudget: parsed.SECURE_MESSAGE_PACKET_BUDGET
3247
+ secureMessagePacketBudget: parsed.SECURE_MESSAGE_PACKET_BUDGET,
3248
+ ...parsed.SESSION_IMAGES_ALLOW_UNENCRYPTED_STORAGE ? {
3249
+ sessionImages: SessionImagesConfigSchema.parse({
3250
+ allowUnencryptedStorage: true,
3251
+ storageAccount: parsed.SESSION_IMAGES_STORAGE_ACCOUNT,
3252
+ storageContainer: parsed.SESSION_IMAGES_STORAGE_CONTAINER ?? "session-images"
3253
+ })
3254
+ } : {}
3072
3255
  };
3073
3256
  }
3074
3257
 
@@ -4138,7 +4321,7 @@ import { createHash as createHash3, randomBytes as randomBytes2, timingSafeEqual
4138
4321
  import { createHash as createHash2 } from "node:crypto";
4139
4322
  import { platform } from "node:os";
4140
4323
  import { brotliCompressSync, brotliDecompressSync } from "node:zlib";
4141
- import { z as z27 } from "zod";
4324
+ import { z as z29 } from "zod";
4142
4325
  var STORE_MESSAGES = {
4143
4326
  unavailable: "Unlock your operating system credential store and restart AgentKnight. No file-based credential fallback is available.",
4144
4327
  invalid: "The saved Relay credential is invalid. Recover it in your operating system credential manager before signing in.",
@@ -4171,30 +4354,30 @@ function normalizeRelayOrigin(value) {
4171
4354
  throw new RelayCredentialStoreError("address");
4172
4355
  }
4173
4356
  }
4174
- var ConfirmationSchema = z27.discriminatedUnion("status", [
4175
- z27.object({
4176
- status: z27.literal("pending"),
4177
- confirmBy: z27.number().int().positive(),
4357
+ var ConfirmationSchema = z29.discriminatedUnion("status", [
4358
+ z29.object({
4359
+ status: z29.literal("pending"),
4360
+ confirmBy: z29.number().int().positive(),
4178
4361
  enrollmentId: PcEnrollmentIdSchema,
4179
4362
  verifier: PcEnrollmentVerifierRequestSchema.shape.verifier
4180
4363
  }).strict(),
4181
- z27.object({
4182
- status: z27.literal("confirmed"),
4183
- confirmBy: z27.number().int().positive()
4364
+ z29.object({
4365
+ status: z29.literal("confirmed"),
4366
+ confirmBy: z29.number().int().positive()
4184
4367
  }).strict()
4185
4368
  ]);
4186
- var RelayCredentialSchema = z27.object({
4187
- version: z27.literal(1),
4188
- relayUrl: z27.string().max(2048),
4369
+ var RelayCredentialSchema = z29.object({
4370
+ version: z29.literal(1),
4371
+ relayUrl: z29.string().max(2048),
4189
4372
  machineId: PcEnrollmentStartRequestSchema.shape.machineId,
4190
- token: z27.string().min(32).max(4096),
4191
- tokenId: z27.string().min(1).max(256),
4192
- grantId: z27.uuid(),
4373
+ token: z29.string().min(32).max(4096),
4374
+ tokenId: z29.string().min(1).max(256),
4375
+ grantId: z29.uuid(),
4193
4376
  user: AuthUserSchema,
4194
4377
  confirmation: ConfirmationSchema
4195
4378
  }).strict();
4196
- var SlotsSchema = z27.object({
4197
- version: z27.literal(1),
4379
+ var SlotsSchema = z29.object({
4380
+ version: z29.literal(1),
4198
4381
  pending: RelayCredentialSchema.optional(),
4199
4382
  confirmed: RelayCredentialSchema.optional()
4200
4383
  }).strict();
@@ -5080,7 +5263,7 @@ import { mkdtemp, rm as rm2 } from "node:fs/promises";
5080
5263
  import { createConnection, createServer as createServer2 } from "node:net";
5081
5264
  import { tmpdir } from "node:os";
5082
5265
  import { join as join4, resolve as resolve3 } from "node:path";
5083
- import { z as z29 } from "zod";
5266
+ import { z as z31 } from "zod";
5084
5267
  import { DataDirectoryLease } from "@agentknight/sdk/runtime";
5085
5268
  import {
5086
5269
  PEER_CHAT_TIMEOUT_MS,
@@ -5092,16 +5275,16 @@ import {
5092
5275
  import { randomUUID } from "node:crypto";
5093
5276
  import { mkdir as mkdir2, readFile as readFile2, rename, rm, writeFile as writeFile2 } from "node:fs/promises";
5094
5277
  import { dirname as dirname2, join as join3 } from "node:path";
5095
- import { z as z28 } from "zod";
5096
- var UpgradeStateSchema = z28.object({
5097
- id: z28.uuid(),
5098
- phase: z28.enum(["preparing", "ready", "waiting-idle", "switching", "verifying", "succeeded", "rolled-back", "failed"]),
5099
- fromVersion: z28.string(),
5100
- toVersion: z28.string(),
5101
- updatedAt: z28.iso.datetime(),
5102
- error: z28.string().optional()
5278
+ import { z as z30 } from "zod";
5279
+ var UpgradeStateSchema = z30.object({
5280
+ id: z30.uuid(),
5281
+ phase: z30.enum(["preparing", "ready", "waiting-idle", "switching", "verifying", "succeeded", "rolled-back", "failed"]),
5282
+ fromVersion: z30.string(),
5283
+ toVersion: z30.string(),
5284
+ updatedAt: z30.iso.datetime(),
5285
+ error: z30.string().optional()
5103
5286
  });
5104
- var UpgradeSuccessSchema = z28.object({ version: z28.string(), upgradedAt: z28.iso.datetime() });
5287
+ var UpgradeSuccessSchema = z30.object({ version: z30.string(), upgradedAt: z30.iso.datetime() });
5105
5288
  async function readOptionalJson(path) {
5106
5289
  try {
5107
5290
  return JSON.parse(await readFile2(path, "utf8"));
@@ -5131,39 +5314,39 @@ async function readLastUpgrade(directory) {
5131
5314
  }
5132
5315
 
5133
5316
  // src/runtime.ts
5134
- var RuntimeDescriptorSchema = z29.object({
5135
- pid: z29.number().int().positive(),
5136
- instanceId: z29.uuid(),
5137
- endpoint: z29.string().min(1),
5138
- token: z29.string().min(32),
5139
- upgradeId: z29.uuid().optional()
5317
+ var RuntimeDescriptorSchema = z31.object({
5318
+ pid: z31.number().int().positive(),
5319
+ instanceId: z31.uuid(),
5320
+ endpoint: z31.string().min(1),
5321
+ token: z31.string().min(32),
5322
+ upgradeId: z31.uuid().optional()
5140
5323
  });
5141
- var RuntimeStatusSchema = z29.object({
5142
- version: z29.string().min(1),
5143
- pid: z29.number().int().positive(),
5144
- instanceId: z29.uuid(),
5145
- ready: z29.boolean(),
5146
- busy: z29.boolean(),
5147
- relayUrl: z29.string().url(),
5148
- identityHash: z29.string().min(1),
5149
- configPath: z29.string().optional(),
5150
- configHash: z29.string().optional(),
5151
- executable: z29.string().min(1),
5152
- cliPath: z29.string().min(1),
5153
- cwd: z29.string().min(1),
5154
- args: z29.array(z29.string()),
5155
- canRestart: z29.boolean().default(false),
5156
- restartEnvironment: z29.record(z29.string(), z29.string()).default({}),
5157
- upgradeId: z29.uuid().optional(),
5158
- stopping: z29.boolean().optional()
5324
+ var RuntimeStatusSchema = z31.object({
5325
+ version: z31.string().min(1),
5326
+ pid: z31.number().int().positive(),
5327
+ instanceId: z31.uuid(),
5328
+ ready: z31.boolean(),
5329
+ busy: z31.boolean(),
5330
+ relayUrl: z31.string().url(),
5331
+ identityHash: z31.string().min(1),
5332
+ configPath: z31.string().optional(),
5333
+ configHash: z31.string().optional(),
5334
+ executable: z31.string().min(1),
5335
+ cliPath: z31.string().min(1),
5336
+ cwd: z31.string().min(1),
5337
+ args: z31.array(z31.string()),
5338
+ canRestart: z31.boolean().default(false),
5339
+ restartEnvironment: z31.record(z31.string(), z31.string()).default({}),
5340
+ upgradeId: z31.uuid().optional(),
5341
+ stopping: z31.boolean().optional()
5159
5342
  });
5160
- var RequestSchema = z29.discriminatedUnion("command", [
5161
- z29.object({ token: z29.string(), command: z29.enum(["status", "prepare", "cancel", "stop"]) }),
5162
- z29.object({ token: z29.string(), command: z29.literal("peer-chat"), payload: PeerChatRequestSchema2 })
5343
+ var RequestSchema = z31.discriminatedUnion("command", [
5344
+ z31.object({ token: z31.string(), command: z31.enum(["status", "prepare", "cancel", "stop"]) }),
5345
+ z31.object({ token: z31.string(), command: z31.literal("peer-chat"), payload: PeerChatRequestSchema2 })
5163
5346
  ]);
5164
- var ResponseSchema = z29.discriminatedUnion("ok", [
5165
- z29.object({ ok: z29.literal(true), status: RuntimeStatusSchema.optional(), reply: PeerChatResultSchema.optional() }),
5166
- z29.object({ ok: z29.literal(false), error: z29.string() })
5347
+ var ResponseSchema = z31.discriminatedUnion("ok", [
5348
+ z31.object({ ok: z31.literal(true), status: RuntimeStatusSchema.optional(), reply: PeerChatResultSchema.optional() }),
5349
+ z31.object({ ok: z31.literal(false), error: z31.string() })
5167
5350
  ]);
5168
5351
  var MAX_MESSAGE_BYTES = 32 * 1024;
5169
5352
  var MAX_PEER_REQUEST_BYTES = 128 * 1024;
@@ -5426,7 +5609,7 @@ import { randomUUID as randomUUID2 } from "node:crypto";
5426
5609
  import { copyFile as copyFile2, mkdir as mkdir5, open as open2, realpath as realpath2, rm as rm6 } from "node:fs/promises";
5427
5610
  import { dirname as dirname5, join as join9, resolve as resolve8 } from "node:path";
5428
5611
  import { fileURLToPath as fileURLToPath2 } from "node:url";
5429
- import { z as z33 } from "zod";
5612
+ import { z as z35 } from "zod";
5430
5613
 
5431
5614
  // src/upgrade-packages.ts
5432
5615
  import { execFile as execFile2, spawn as spawn2 } from "node:child_process";
@@ -5440,7 +5623,7 @@ import { createHash as createHash5 } from "node:crypto";
5440
5623
  import { open } from "node:fs/promises";
5441
5624
  import { join as join5 } from "node:path";
5442
5625
  import { promisify } from "node:util";
5443
- import { z as z30 } from "zod";
5626
+ import { z as z32 } from "zod";
5444
5627
 
5445
5628
  // src/restart-environment.ts
5446
5629
  import { resolve as resolve4 } from "node:path";
@@ -5478,10 +5661,10 @@ function restartEnvironment(effective, persisted, dataDirectory) {
5478
5661
 
5479
5662
  // src/upgrade-supervisor.ts
5480
5663
  var execute = promisify(execFile);
5481
- var SupervisorSchema = z30.discriminatedUnion("kind", [
5482
- z30.object({ kind: z30.literal("process") }),
5483
- z30.object({ kind: z30.literal("windows-task"), name: z30.string(), path: z30.string(), definitionHash: z30.string() }),
5484
- z30.object({ kind: z30.literal("launchd"), domain: z30.string(), label: z30.string(), plist: z30.string() })
5664
+ var SupervisorSchema = z32.discriminatedUnion("kind", [
5665
+ z32.object({ kind: z32.literal("process") }),
5666
+ z32.object({ kind: z32.literal("windows-task"), name: z32.string(), path: z32.string(), definitionHash: z32.string() }),
5667
+ z32.object({ kind: z32.literal("launchd"), domain: z32.string(), label: z32.string(), plist: z32.string() })
5485
5668
  ]);
5486
5669
  function globalPackageDirectory(prefix) {
5487
5670
  return process.platform === "win32" ? join5(prefix, "node_modules", "@agentknight", "client") : join5(prefix, "lib", "node_modules", "@agentknight", "client");
@@ -5509,7 +5692,7 @@ async function assertInstallationIdle(prefix, allowedPid) {
5509
5692
  } | ForEach-Object { [int]$_.ProcessId });
5510
5693
  ConvertTo-Json -InputObject $ids -Compress
5511
5694
  `);
5512
- pids = z30.array(z30.number().int().positive()).parse(JSON.parse(result));
5695
+ pids = z32.array(z32.number().int().positive()).parse(JSON.parse(result));
5513
5696
  } else {
5514
5697
  const result = await execute("ps", ["-eo", "pid=,args="], { timeout: 1e4 });
5515
5698
  pids = result.stdout.split("\n").flatMap((line) => {
@@ -5545,7 +5728,7 @@ async function detectSupervisor(runtime) {
5545
5728
  if($matches.Count -gt 1) { throw 'Multiple scheduled tasks match this Agent. Refusing to choose.' };
5546
5729
  if($matches.Count -eq 1) { $matches[0] | ConvertTo-Json -Compress } else { 'null' }
5547
5730
  `);
5548
- const task = z30.object({ name: z30.string(), path: z30.string(), xml: z30.string() }).nullable().parse(JSON.parse(result));
5731
+ const task = z32.object({ name: z32.string(), path: z32.string(), xml: z32.string() }).nullable().parse(JSON.parse(result));
5549
5732
  return task === null ? { kind: "process" } : {
5550
5733
  kind: "windows-task",
5551
5734
  name: task.name,
@@ -6065,13 +6248,13 @@ async function prepareUpgradePackages(options) {
6065
6248
  import { mkdir as mkdir4, readFile as readFile4, rm as rm5, stat } from "node:fs/promises";
6066
6249
  import { createHash as createHash7 } from "node:crypto";
6067
6250
  import { join as join8, resolve as resolve7 } from "node:path";
6068
- import { z as z32 } from "zod";
6251
+ import { z as z34 } from "zod";
6069
6252
 
6070
6253
  // src/upgrade-startup.ts
6071
6254
  import { rename as rename2, rm as rm4 } from "node:fs/promises";
6072
6255
  import { basename, dirname as dirname4, join as join7, resolve as resolve6 } from "node:path";
6073
- import { z as z31 } from "zod";
6074
- var PermitSchema = z31.object({ id: z31.uuid(), version: z31.string(), cliPath: z31.string() });
6256
+ import { z as z33 } from "zod";
6257
+ var PermitSchema = z33.object({ id: z33.uuid(), version: z33.string(), cliPath: z33.string() });
6075
6258
  function globalUpgradeLockPath(cliPath) {
6076
6259
  const packageDirectory = dirname4(dirname4(cliPath));
6077
6260
  const scope = dirname4(packageDirectory);
@@ -6085,14 +6268,14 @@ async function claimUpgradeStartup(directory, version, cliPath) {
6085
6268
  const globalPath = globalUpgradeLockPath(cliPath);
6086
6269
  const globalLock = globalPath === void 0 ? void 0 : await readOptionalJson(globalPath);
6087
6270
  if (globalLock !== void 0) {
6088
- const globalOwner = z31.object({ id: z31.uuid(), dataDirectory: z31.string() }).parse(globalLock);
6271
+ const globalOwner = z33.object({ id: z33.uuid(), dataDirectory: z33.string() }).parse(globalLock);
6089
6272
  if (lock === void 0 || resolve6(globalOwner.dataDirectory) !== resolve6(directory)) {
6090
6273
  throw new Error("This global installation is being upgraded for another data directory. Wait for that upgrade to finish.");
6091
6274
  }
6092
6275
  }
6093
6276
  if (lock === void 0) return void 0;
6094
- const owner = z31.object({ id: z31.uuid() }).parse(lock);
6095
- if (globalLock !== void 0 && z31.object({ id: z31.uuid() }).parse(globalLock).id !== owner.id) {
6277
+ const owner = z33.object({ id: z33.uuid() }).parse(lock);
6278
+ if (globalLock !== void 0 && z33.object({ id: z33.uuid() }).parse(globalLock).id !== owner.id) {
6096
6279
  throw new Error("Local and global upgrade ownership disagree; inspect the interrupted upgrade before starting.");
6097
6280
  }
6098
6281
  const path = join7(directory, "run", "upgrade-start.json");
@@ -6109,24 +6292,24 @@ async function claimUpgradeStartup(directory, version, cliPath) {
6109
6292
  }
6110
6293
 
6111
6294
  // src/upgrade-job.ts
6112
- var PreparedPackagesSchema = z32.object({
6113
- targetArchive: z32.string(),
6114
- rollbackArchive: z32.string(),
6115
- cacheDirectory: z32.string(),
6116
- registry: z32.string().url()
6295
+ var PreparedPackagesSchema = z34.object({
6296
+ targetArchive: z34.string(),
6297
+ rollbackArchive: z34.string(),
6298
+ cacheDirectory: z34.string(),
6299
+ registry: z34.string().url()
6117
6300
  });
6118
- var UpgradePlanSchema = z32.object({
6119
- id: z32.uuid(),
6120
- dataDirectory: z32.string(),
6121
- directory: z32.string(),
6122
- prefix: z32.string(),
6123
- currentVersion: z32.string(),
6124
- targetVersion: z32.string(),
6301
+ var UpgradePlanSchema = z34.object({
6302
+ id: z34.uuid(),
6303
+ dataDirectory: z34.string(),
6304
+ directory: z34.string(),
6305
+ prefix: z34.string(),
6306
+ currentVersion: z34.string(),
6307
+ targetVersion: z34.string(),
6125
6308
  packages: PreparedPackagesSchema,
6126
6309
  runtime: RuntimeStatusSchema.optional(),
6127
6310
  supervisor: SupervisorSchema,
6128
- taskName: z32.string(),
6129
- configHash: z32.string().optional()
6311
+ taskName: z34.string(),
6312
+ configHash: z34.string().optional()
6130
6313
  });
6131
6314
  async function fileHash(path) {
6132
6315
  return createHash7("sha256").update(await readFile4(path)).digest("hex");
@@ -6209,7 +6392,7 @@ async function upgrade(options) {
6209
6392
  const lockPath = join9(root, "upgrade.lock");
6210
6393
  const existing = await readOptionalJson(lockPath);
6211
6394
  if (existing !== void 0) {
6212
- const owner = z33.object({ pid: z33.number().int().positive() }).parse(existing);
6395
+ const owner = z35.object({ pid: z35.number().int().positive() }).parse(existing);
6213
6396
  if (processExists(owner.pid)) throw new Error("Another upgrade is already running. Use agentknight status.");
6214
6397
  throw new Error(`An interrupted upgrade needs review. Read ${join9(root, "status.json")} before removing ${lockPath}.`);
6215
6398
  }
@@ -6507,17 +6690,17 @@ import { initialize, supportsAgentSelection } from "@agentknight/sdk";
6507
6690
 
6508
6691
  // src/chat-settings.ts
6509
6692
  import { join as join11 } from "node:path";
6510
- import { z as z34 } from "zod";
6693
+ import { z as z36 } from "zod";
6511
6694
  var settings = {
6512
6695
  groupChatEnabled: {
6513
6696
  file: "group-chat-settings.json",
6514
6697
  label: "Group chat",
6515
- schema: z34.object({ groupChatEnabled: z34.boolean() }).strict().transform((value) => value.groupChatEnabled)
6698
+ schema: z36.object({ groupChatEnabled: z36.boolean() }).strict().transform((value) => value.groupChatEnabled)
6516
6699
  },
6517
6700
  peerChatEnabled: {
6518
6701
  file: "peer-chat-settings.json",
6519
6702
  label: "Peer chat",
6520
- schema: z34.object({ peerChatEnabled: z34.boolean() }).strict().transform((value) => value.peerChatEnabled)
6703
+ schema: z36.object({ peerChatEnabled: z36.boolean() }).strict().transform((value) => value.peerChatEnabled)
6521
6704
  }
6522
6705
  };
6523
6706
  var ChatSettings = class _ChatSettings {
@@ -6565,14 +6748,14 @@ import { randomUUID as randomUUID3 } from "node:crypto";
6565
6748
  import { link, lstat as lstat2, mkdir as mkdir6, readFile as readFile5, readlink, rename as rename3, rm as rm7, writeFile as writeFile4 } from "node:fs/promises";
6566
6749
  import { homedir as homedir3, hostname } from "node:os";
6567
6750
  import { dirname as dirname6, join as join12, resolve as resolve9 } from "node:path";
6568
- import { z as z35 } from "zod";
6751
+ import { z as z37 } from "zod";
6569
6752
  import { DeviceIdentitySchema } from "@agentknight/sdk";
6570
6753
  import { DeviceIdentitySchema as DeviceIdentitySchema2 } from "@agentknight/sdk";
6571
- var LegacyDeviceIdentitySchema = z35.object({
6572
- schemaVersion: z35.literal(1),
6573
- machineId: z35.uuid(),
6574
- machineName: z35.string().trim().min(1).max(120),
6575
- createdAt: z35.iso.datetime({ offset: true })
6754
+ var LegacyDeviceIdentitySchema = z37.object({
6755
+ schemaVersion: z37.literal(1),
6756
+ machineId: z37.uuid(),
6757
+ machineName: z37.string().trim().min(1).max(120),
6758
+ createdAt: z37.iso.datetime({ offset: true })
6576
6759
  });
6577
6760
  function resolveMachineName(environment = process.env, fallback = hostname()) {
6578
6761
  const computerName = environment.COMPUTERNAME?.trim();
@@ -6593,7 +6776,7 @@ async function readStableDeviceId(path) {
6593
6776
  const info = await optionalStat(path);
6594
6777
  if (info === void 0) return void 0;
6595
6778
  if (!info.isFile()) throw new Error(`Device ID must be a regular file, not a link: ${path}`);
6596
- const parsed = z35.uuid().safeParse((await readFile5(path, "utf8")).trim());
6779
+ const parsed = z37.uuid().safeParse((await readFile5(path, "utf8")).trim());
6597
6780
  if (!parsed.success) throw new Error(`Invalid device ID in ${path}`, { cause: parsed.error });
6598
6781
  return parsed.data;
6599
6782
  }
@@ -6656,7 +6839,7 @@ async function loadOrCreateDeviceIdentity(dataDirectory, currentMachineName = re
6656
6839
  await requireDirectory(dataDirectory);
6657
6840
  let existing;
6658
6841
  try {
6659
- existing = z35.union([DeviceIdentitySchema, LegacyDeviceIdentitySchema]).parse(
6842
+ existing = z37.union([DeviceIdentitySchema, LegacyDeviceIdentitySchema]).parse(
6660
6843
  JSON.parse(await readFile5(path, "utf8"))
6661
6844
  );
6662
6845
  } catch (error) {