@agentknight/client 0.9.38 → 0.9.40

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.
@@ -18906,7 +18906,7 @@ function sameClientPath(left, right, cwd = process.cwd()) {
18906
18906
  return process.platform === "win32" ? leftPath.toLowerCase() === rightPath.toLowerCase() : leftPath === rightPath;
18907
18907
  }
18908
18908
  function isClientConfigurationKey(key) {
18909
- 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);
18909
+ 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);
18910
18910
  }
18911
18911
  function clearClientConfiguration(environment) {
18912
18912
  for (const key of Object.keys(environment)) {
@@ -19391,7 +19391,7 @@ async function installPreparedPackage(options) {
19391
19391
  import { createConnection, createServer } from "node:net";
19392
19392
  import { join as join5, resolve as resolve3 } from "node:path";
19393
19393
 
19394
- // ../../shared/sdk/dist/chunks/chunk-GNQC2IS2.js
19394
+ // ../../shared/sdk/dist/chunks/chunk-OV77TRIH.js
19395
19395
  var IdSchema = external_exports.string().trim().min(1).max(256);
19396
19396
  var IsoDateSchema = external_exports.iso.datetime({ offset: true });
19397
19397
  var Base64UrlKeyIdSchema = external_exports.string().regex(/^[A-Za-z0-9_-]{22}$/u, "Expected a 16-byte base64url key ID");
@@ -19609,6 +19609,7 @@ var SessionOptionsResultSchema = external_exports.discriminatedUnion("ok", [
19609
19609
  currentAgentMode: SessionAgentModeSchema.optional(),
19610
19610
  currentReasoningEffort: CurrentReasoningEffortSchema.optional(),
19611
19611
  environment: SessionEnvironmentInfoSchema.optional(),
19612
+ environmentPending: external_exports.literal(true).optional(),
19612
19613
  agentName: external_exports.string().trim().min(1).max(260).optional(),
19613
19614
  configOptions: external_exports.array(AgentConfigurationOptionSchema).max(32).optional()
19614
19615
  }),
@@ -20029,7 +20030,8 @@ var SessionAssistantPreviewSchema = external_exports.object({
20029
20030
  sourceEventIds: external_exports.array(IdSchema).min(1).max(1e3),
20030
20031
  text: external_exports.string().max(4096),
20031
20032
  final: external_exports.boolean(),
20032
- attachments: external_exports.array(ConversationAttachmentSchema.refine((attachment) => attachment.kind === "image" && attachment.imageRef === "sha256", "Assistant previews contain image references only")).max(4)
20033
+ attachments: external_exports.array(ConversationAttachmentSchema.refine((attachment) => attachment.kind === "image" && attachment.imageRef === "sha256", "Assistant previews contain image references only")).max(4),
20034
+ kind: external_exports.enum(["assistant-message", "task-completion"]).optional()
20033
20035
  });
20034
20036
  var SESSION_TIMELINE_PAGE_SIZE = 100;
20035
20037
  var SessionTimelinePageRequestSchema = external_exports.object({
@@ -21055,12 +21057,16 @@ var SESSION_DIRECTORY_MAX_DEPTH = 32;
21055
21057
  var SESSION_DIRECTORY_MAX_ENTRIES = 500;
21056
21058
  var SESSION_DIRECTORY_MAX_RESPONSE_BYTES = 128 * 1024;
21057
21059
  var SESSION_FILE_MAX_ORIGINAL_BYTES = 500 * 1024;
21060
+ var SESSION_FILE_V2_MAX_ORIGINAL_BYTES = 1024 * 1024;
21058
21061
  var SESSION_FILE_GZIP_THRESHOLD_BYTES = 20 * 1024;
21059
21062
  var SESSION_FILE_MAX_IMAGE_BYTES = 100 * 1024;
21060
21063
  var SESSION_FILE_MAX_IMAGE_PIXELS = 16 * 1024 * 1024;
21061
21064
  var SESSION_FILE_MAX_TRANSFER_BYTES = SESSION_FILE_MAX_ORIGINAL_BYTES + 1024;
21062
21065
  var SESSION_FILE_MAX_BASE64_LENGTH = Math.ceil(SESSION_FILE_MAX_TRANSFER_BYTES / 3) * 4;
21063
21066
  var SESSION_FILE_MAX_RESPONSE_BYTES = SESSION_FILE_MAX_BASE64_LENGTH + 8192;
21067
+ var SESSION_FILE_V2_MAX_TRANSFER_BYTES = SESSION_FILE_V2_MAX_ORIGINAL_BYTES + 1024;
21068
+ var SESSION_FILE_V2_MAX_BASE64_LENGTH = Math.ceil(SESSION_FILE_V2_MAX_TRANSFER_BYTES / 3) * 4;
21069
+ var SESSION_FILE_V2_MAX_RESPONSE_BYTES = SESSION_FILE_V2_MAX_BASE64_LENGTH + 8192;
21064
21070
  var SESSION_FILE_MEDIA_TYPES = [
21065
21071
  "text/plain",
21066
21072
  "text/html",
@@ -21073,6 +21079,9 @@ var SESSION_FILE_MEDIA_TYPES = [
21073
21079
  "application/yaml",
21074
21080
  "image/webp"
21075
21081
  ];
21082
+ var SESSION_FILE_VIDEO_MEDIA_TYPES = ["video/mp4", "video/webm"];
21083
+ var SESSION_FILE_V2_MEDIA_TYPES = [...SESSION_FILE_MEDIA_TYPES, ...SESSION_FILE_VIDEO_MEDIA_TYPES];
21084
+ var SESSION_FILE_MAX_VIDEO_PIXELS = 16 * 1024 * 1024;
21076
21085
  function isSafeSessionDirectoryPath(path2) {
21077
21086
  if (path2 === "")
21078
21087
  return true;
@@ -21110,27 +21119,35 @@ var SessionFileReadDataSchema = external_exports.object({
21110
21119
  path: external_exports.string().min(1).max(SESSION_DIRECTORY_MAX_PATH_LENGTH).refine(isSafeSessionDirectoryPath),
21111
21120
  rootRevision: external_exports.string().regex(/^[A-Za-z0-9_-]{43}$/u)
21112
21121
  }).strict();
21113
- var SessionFileReadResultDataSchema = external_exports.object({
21114
- path: SessionFileReadDataSchema.shape.path,
21115
- rootRevision: SessionFileReadDataSchema.shape.rootRevision,
21116
- mediaType: external_exports.enum(SESSION_FILE_MEDIA_TYPES),
21117
- originalByteLength: external_exports.number().int().min(0).max(SESSION_FILE_MAX_ORIGINAL_BYTES),
21118
- // Canonical length after decompression, not the length of the transport bytes.
21119
- byteLength: external_exports.number().int().min(0).max(SESSION_FILE_MAX_ORIGINAL_BYTES),
21120
- encoding: external_exports.enum(["identity", "gzip"]),
21121
- data: external_exports.string().max(SESSION_FILE_MAX_BASE64_LENGTH)
21122
- }).strict().superRefine((result, context) => {
21123
- const invalid = () => context.addIssue({ code: "custom", message: "Invalid file content" });
21124
- if (result.encoding === "gzip" !== result.originalByteLength >= SESSION_FILE_GZIP_THRESHOLD_BYTES)
21125
- invalid();
21126
- if (result.mediaType === "image/webp" ? result.byteLength === 0 || result.byteLength > SESSION_FILE_MAX_IMAGE_BYTES || result.originalByteLength === 0 : result.byteLength !== result.originalByteLength)
21127
- invalid();
21128
- const base643 = result.data;
21129
- const padding = base643.endsWith("==") ? 2 : base643.endsWith("=") ? 1 : 0;
21130
- const length = base643.length / 4 * 3 - padding;
21131
- if (base643.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(base643) || length > SESSION_FILE_MAX_TRANSFER_BYTES || padding === 2 && !/[AQgw]==$/u.test(base643) || padding === 1 && !/[AEIMQUYcgkosw048]=$/u.test(base643) || (result.encoding === "identity" ? length !== result.byteLength : length < 20))
21132
- invalid();
21133
- });
21122
+ function fileResultSchema(mediaTypes, extended) {
21123
+ const maxOriginal = extended ? SESSION_FILE_V2_MAX_ORIGINAL_BYTES : SESSION_FILE_MAX_ORIGINAL_BYTES;
21124
+ const maxTransfer = extended ? SESSION_FILE_V2_MAX_TRANSFER_BYTES : SESSION_FILE_MAX_TRANSFER_BYTES;
21125
+ return external_exports.object({
21126
+ path: SessionFileReadDataSchema.shape.path,
21127
+ rootRevision: SessionFileReadDataSchema.shape.rootRevision,
21128
+ mediaType: external_exports.enum(mediaTypes),
21129
+ originalByteLength: external_exports.number().int().min(0).max(maxOriginal),
21130
+ // Canonical length after decompression, not the length of the transport bytes.
21131
+ byteLength: external_exports.number().int().min(0).max(maxOriginal),
21132
+ encoding: external_exports.enum(["identity", "gzip"]),
21133
+ data: external_exports.string().max(extended ? SESSION_FILE_V2_MAX_BASE64_LENGTH : SESSION_FILE_MAX_BASE64_LENGTH)
21134
+ }).strict().superRefine((result, context) => {
21135
+ const invalid = () => context.addIssue({ code: "custom", message: "Invalid file content" });
21136
+ if (result.encoding === "gzip" !== result.originalByteLength >= SESSION_FILE_GZIP_THRESHOLD_BYTES)
21137
+ invalid();
21138
+ if (result.mediaType === "image/webp" ? result.byteLength === 0 || result.byteLength > SESSION_FILE_MAX_IMAGE_BYTES || result.originalByteLength === 0 : result.byteLength !== result.originalByteLength)
21139
+ invalid();
21140
+ if (result.mediaType.startsWith("video/") && (result.byteLength === 0 || !result.path.toLowerCase().endsWith(result.mediaType === "video/mp4" ? ".mp4" : ".webm")))
21141
+ invalid();
21142
+ const base643 = result.data;
21143
+ const padding = base643.endsWith("==") ? 2 : base643.endsWith("=") ? 1 : 0;
21144
+ const length = base643.length / 4 * 3 - padding;
21145
+ if (base643.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(base643) || length > maxTransfer || padding === 2 && !/[AQgw]==$/u.test(base643) || padding === 1 && !/[AEIMQUYcgkosw048]=$/u.test(base643) || (result.encoding === "identity" ? length !== result.byteLength : length < 20))
21146
+ invalid();
21147
+ });
21148
+ }
21149
+ var SessionFileReadResultDataSchema = fileResultSchema(SESSION_FILE_MEDIA_TYPES, false);
21150
+ var SessionFileReadV2ResultDataSchema = fileResultSchema(SESSION_FILE_V2_MEDIA_TYPES, true);
21134
21151
  var SessionGitProjectSchema = external_exports.object({
21135
21152
  localRepositoryKey: external_exports.string().length(43).regex(/^[A-Za-z0-9_-]{43}$/),
21136
21153
  worktreeRoot: external_exports.string().min(1).max(SESSION_PROJECT_IDENTITY_MAX_PATH_LENGTH),
@@ -21231,6 +21248,65 @@ var SessionResourceReadResultDataSchema = external_exports.object({
21231
21248
  if (base643.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(base643) || length > SESSION_RESOURCE_MAX_TRANSFER_BYTES || padding === 2 && !/[AQgw]==$/u.test(base643) || padding === 1 && !/[AEIMQUYcgkosw048]=$/u.test(base643) || (result.encoding === "identity" ? length !== result.byteLength : length < 20))
21232
21249
  invalid();
21233
21250
  });
21251
+ var SESSION_IMAGE_MAX_BYTES = 3 * 1024 * 1024;
21252
+ var SESSION_IMAGE_MAX_PIXELS = 16 * 1024 * 1024;
21253
+ var SessionImageIdSchema = external_exports.uuid();
21254
+ var SessionImageTransferModeSchema = external_exports.enum(["direct", "proxy"]);
21255
+ var DirectUrlSchema = external_exports.string().regex(/^https:\/\/[^/?#@\\\s\x00-\x1f\x7f]+(?:[/?][^#\\\s\x00-\x1f\x7f]*)?$/u).refine((raw) => {
21256
+ if (!URL.canParse(raw))
21257
+ return false;
21258
+ const url2 = new URL(raw);
21259
+ return url2.protocol === "https:" && url2.username === "" && url2.password === "" && url2.hash === "";
21260
+ }, "Direct transfers require HTTPS without userinfo, fragments or unsafe characters");
21261
+ var ProxyUrlSchema = external_exports.string().regex(/^\/api\/v3\/session-images\/[0-9a-f-]+\/content\?[^#\\\s\x00-\x1f\x7f]+$/u);
21262
+ var SessionImageTransferHeadersSchema = external_exports.record(external_exports.string().regex(/^(?:content-type|if-none-match|x-ms-blob-type)$/u), external_exports.string().min(1).max(256).regex(/^[\x20-\x7e]+$/u));
21263
+ var SessionImageUploadRequestSchema = external_exports.object({
21264
+ machineId: IdSchema,
21265
+ sessionId: IdSchema,
21266
+ sizeBytes: external_exports.number().int().min(1).max(SESSION_IMAGE_MAX_BYTES)
21267
+ }).strict();
21268
+ var SessionImageScopeSchema = external_exports.object({
21269
+ machineId: IdSchema,
21270
+ sessionId: IdSchema
21271
+ }).strict();
21272
+ var UploadResultFields = {
21273
+ imageId: SessionImageIdSchema,
21274
+ uploadExpiresAt: external_exports.number().int().positive(),
21275
+ method: external_exports.literal("PUT"),
21276
+ contentType: external_exports.literal("image/webp"),
21277
+ headers: SessionImageTransferHeadersSchema.refine((headers) => headers["content-type"] === "image/webp")
21278
+ };
21279
+ var SessionImageUploadResultSchema = external_exports.discriminatedUnion("mode", [
21280
+ external_exports.object({ ...UploadResultFields, mode: external_exports.literal("direct"), uploadUrl: DirectUrlSchema }).strict(),
21281
+ external_exports.object({ ...UploadResultFields, mode: external_exports.literal("proxy"), uploadUrl: ProxyUrlSchema }).strict()
21282
+ ]);
21283
+ var SessionImageCommitResultSchema = external_exports.object({
21284
+ imageId: SessionImageIdSchema,
21285
+ machineId: IdSchema,
21286
+ sessionId: IdSchema,
21287
+ sizeBytes: external_exports.number().int().min(1).max(SESSION_IMAGE_MAX_BYTES),
21288
+ width: external_exports.number().int().positive(),
21289
+ height: external_exports.number().int().positive(),
21290
+ sha256: external_exports.string().regex(/^[a-f0-9]{64}$/u),
21291
+ expiresAt: external_exports.number().int().positive()
21292
+ }).strict();
21293
+ var DownloadResultFields = {
21294
+ image: SessionImageCommitResultSchema,
21295
+ downloadExpiresAt: external_exports.number().int().positive(),
21296
+ method: external_exports.literal("GET"),
21297
+ headers: SessionImageTransferHeadersSchema
21298
+ };
21299
+ var SessionImageDownloadResultSchema = external_exports.discriminatedUnion("mode", [
21300
+ external_exports.object({ ...DownloadResultFields, mode: external_exports.literal("direct"), downloadUrl: DirectUrlSchema }).strict(),
21301
+ external_exports.object({ ...DownloadResultFields, mode: external_exports.literal("proxy"), downloadUrl: ProxyUrlSchema }).strict()
21302
+ ]);
21303
+ var TimelineImageBlobRequestSchema = external_exports.object({
21304
+ sha256: external_exports.string().regex(/^[a-f0-9]{64}$/u)
21305
+ }).strict();
21306
+ var TimelineImageBlobResultSchema = external_exports.object({
21307
+ sha256: TimelineImageBlobRequestSchema.shape.sha256,
21308
+ image: SessionImageCommitResultSchema
21309
+ }).strict();
21234
21310
  var SESSION_RENAME_OPERATION = "session.rename";
21235
21311
  var SESSION_RENAME_VERSION = 1;
21236
21312
  var SESSION_RENAME_CAPABILITY = sessionCommunicationOperationCapability(SESSION_RENAME_OPERATION, SESSION_RENAME_VERSION);
@@ -21247,6 +21323,10 @@ var GroupChatCreateDataSchema = external_exports.object({
21247
21323
  var GroupChatCreateResultDataSchema = external_exports.object({
21248
21324
  session: SessionSummarySchema.refine((session) => session.groupChat !== void 0, "Group creation must return a virtual group session")
21249
21325
  }).strict();
21326
+ var SessionAvatarPersonaSchema = external_exports.object({
21327
+ role: external_exports.enum(["designer", "filmmaker", "developer", "secretary", "default"]),
21328
+ displayName: external_exports.string().trim().min(1).max(40).regex(/^[^\u0000-\u001f\u007f-\u009f]*$/).optional()
21329
+ }).strict().refine((value) => value.role === "default" ? value.displayName === void 0 : value.displayName !== void 0, { message: "A role requires a display name; default must not include one" });
21250
21330
  var MAX_PROMPT_IMAGE_BYTES = 3 * 1024 * 1024;
21251
21331
  var SessionPromptRequestSchema = external_exports.object({
21252
21332
  requestId: IdSchema,
@@ -21256,6 +21336,7 @@ var SessionPromptRequestSchema = external_exports.object({
21256
21336
  prompt: external_exports.string().trim().max(1e5),
21257
21337
  attachments: external_exports.array(PromptImageAttachmentSchema).max(4).optional(),
21258
21338
  fileAttachments: external_exports.array(PromptFileAttachmentSchema).max(4).optional(),
21339
+ avatarPersona: SessionAvatarPersonaSchema.optional(),
21259
21340
  mode: external_exports.enum(["enqueue", "immediate"]).default("enqueue")
21260
21341
  }).strict().superRefine((request, context) => {
21261
21342
  if (request.prompt.length === 0 && (request.attachments?.length ?? 0) === 0 && (request.fileAttachments?.length ?? 0) === 0) {
@@ -21722,6 +21803,13 @@ var WorkbenchAndroidSchemas = {
21722
21803
  WorkbenchCompactResult: WorkbenchCompactResultSchema
21723
21804
  };
21724
21805
  var AndroidProtocolSchemas = {
21806
+ TimelineImageBlobRequest: TimelineImageBlobRequestSchema,
21807
+ TimelineImageBlobResult: TimelineImageBlobResultSchema,
21808
+ SessionImageUploadRequest: SessionImageUploadRequestSchema,
21809
+ SessionImageScope: SessionImageScopeSchema,
21810
+ SessionImageUploadResult: SessionImageUploadResultSchema,
21811
+ SessionImageCommitResult: SessionImageCommitResultSchema,
21812
+ SessionImageDownloadResult: SessionImageDownloadResultSchema,
21725
21813
  ...WorkbenchAndroidSchemas,
21726
21814
  ...ScheduleAndroidSchemas,
21727
21815
  SessionCommunication: SessionCommunicationSchema,
@@ -21735,6 +21823,7 @@ var AndroidProtocolSchemas = {
21735
21823
  SessionDirectoryListResultData: SessionDirectoryListResultDataSchema,
21736
21824
  SessionFileReadData: SessionFileReadDataSchema,
21737
21825
  SessionFileReadResultData: SessionFileReadResultDataSchema,
21826
+ SessionFileReadV2ResultData: SessionFileReadV2ResultDataSchema,
21738
21827
  SessionResourceReadData: SessionResourceReadDataSchema,
21739
21828
  SessionResourceReadResultData: SessionResourceReadResultDataSchema,
21740
21829
  SessionDirectoryListRequest: SessionDirectoryListRequestSchema,
@@ -21823,7 +21912,7 @@ var AndroidProtocolSchemas = {
21823
21912
  ProtocolError: ProtocolErrorSchema
21824
21913
  };
21825
21914
 
21826
- // ../../shared/sdk/dist/chunks/chunk-4FC2WG64.js
21915
+ // ../../shared/sdk/dist/chunks/chunk-CVWUKZX7.js
21827
21916
  var OwnerSchema = external_exports.object({ pid: external_exports.number().int().positive(), instanceId: external_exports.uuid().optional() });
21828
21917
  var PeerChatRequestSchema = external_exports.object({
21829
21918
  sessionId: IdSchema,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentknight/client",
3
- "version": "0.9.38",
3
+ "version": "0.9.40",
4
4
  "description": "AgentKnight PC Agent CLI for remote Copilot, PI and ACP coding sessions",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -41,7 +41,7 @@
41
41
  "qrcode": "1.5.4",
42
42
  "qrcode-terminal": "0.12.0",
43
43
  "zod": "4.5.4",
44
- "@agentknight/sdk": "0.9.38"
44
+ "@agentknight/sdk": "0.9.40"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/qrcode": "1.5.6",