@agentknight/client 0.9.38 → 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 +855 -734
- package/dist/upgrade-worker.js +106 -24
- package/package.json +4 -4
package/dist/upgrade-worker.js
CHANGED
|
@@ -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-
|
|
19394
|
+
// ../../shared/sdk/dist/chunks/chunk-E3XCZWRK.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");
|
|
@@ -21055,12 +21055,16 @@ var SESSION_DIRECTORY_MAX_DEPTH = 32;
|
|
|
21055
21055
|
var SESSION_DIRECTORY_MAX_ENTRIES = 500;
|
|
21056
21056
|
var SESSION_DIRECTORY_MAX_RESPONSE_BYTES = 128 * 1024;
|
|
21057
21057
|
var SESSION_FILE_MAX_ORIGINAL_BYTES = 500 * 1024;
|
|
21058
|
+
var SESSION_FILE_V2_MAX_ORIGINAL_BYTES = 1024 * 1024;
|
|
21058
21059
|
var SESSION_FILE_GZIP_THRESHOLD_BYTES = 20 * 1024;
|
|
21059
21060
|
var SESSION_FILE_MAX_IMAGE_BYTES = 100 * 1024;
|
|
21060
21061
|
var SESSION_FILE_MAX_IMAGE_PIXELS = 16 * 1024 * 1024;
|
|
21061
21062
|
var SESSION_FILE_MAX_TRANSFER_BYTES = SESSION_FILE_MAX_ORIGINAL_BYTES + 1024;
|
|
21062
21063
|
var SESSION_FILE_MAX_BASE64_LENGTH = Math.ceil(SESSION_FILE_MAX_TRANSFER_BYTES / 3) * 4;
|
|
21063
21064
|
var SESSION_FILE_MAX_RESPONSE_BYTES = SESSION_FILE_MAX_BASE64_LENGTH + 8192;
|
|
21065
|
+
var SESSION_FILE_V2_MAX_TRANSFER_BYTES = SESSION_FILE_V2_MAX_ORIGINAL_BYTES + 1024;
|
|
21066
|
+
var SESSION_FILE_V2_MAX_BASE64_LENGTH = Math.ceil(SESSION_FILE_V2_MAX_TRANSFER_BYTES / 3) * 4;
|
|
21067
|
+
var SESSION_FILE_V2_MAX_RESPONSE_BYTES = SESSION_FILE_V2_MAX_BASE64_LENGTH + 8192;
|
|
21064
21068
|
var SESSION_FILE_MEDIA_TYPES = [
|
|
21065
21069
|
"text/plain",
|
|
21066
21070
|
"text/html",
|
|
@@ -21073,6 +21077,9 @@ var SESSION_FILE_MEDIA_TYPES = [
|
|
|
21073
21077
|
"application/yaml",
|
|
21074
21078
|
"image/webp"
|
|
21075
21079
|
];
|
|
21080
|
+
var SESSION_FILE_VIDEO_MEDIA_TYPES = ["video/mp4", "video/webm"];
|
|
21081
|
+
var SESSION_FILE_V2_MEDIA_TYPES = [...SESSION_FILE_MEDIA_TYPES, ...SESSION_FILE_VIDEO_MEDIA_TYPES];
|
|
21082
|
+
var SESSION_FILE_MAX_VIDEO_PIXELS = 16 * 1024 * 1024;
|
|
21076
21083
|
function isSafeSessionDirectoryPath(path2) {
|
|
21077
21084
|
if (path2 === "")
|
|
21078
21085
|
return true;
|
|
@@ -21110,27 +21117,35 @@ var SessionFileReadDataSchema = external_exports.object({
|
|
|
21110
21117
|
path: external_exports.string().min(1).max(SESSION_DIRECTORY_MAX_PATH_LENGTH).refine(isSafeSessionDirectoryPath),
|
|
21111
21118
|
rootRevision: external_exports.string().regex(/^[A-Za-z0-9_-]{43}$/u)
|
|
21112
21119
|
}).strict();
|
|
21113
|
-
|
|
21114
|
-
|
|
21115
|
-
|
|
21116
|
-
|
|
21117
|
-
|
|
21118
|
-
|
|
21119
|
-
|
|
21120
|
-
|
|
21121
|
-
|
|
21122
|
-
|
|
21123
|
-
|
|
21124
|
-
|
|
21125
|
-
|
|
21126
|
-
|
|
21127
|
-
|
|
21128
|
-
|
|
21129
|
-
|
|
21130
|
-
|
|
21131
|
-
|
|
21132
|
-
|
|
21133
|
-
|
|
21120
|
+
function fileResultSchema(mediaTypes, extended) {
|
|
21121
|
+
const maxOriginal = extended ? SESSION_FILE_V2_MAX_ORIGINAL_BYTES : SESSION_FILE_MAX_ORIGINAL_BYTES;
|
|
21122
|
+
const maxTransfer = extended ? SESSION_FILE_V2_MAX_TRANSFER_BYTES : SESSION_FILE_MAX_TRANSFER_BYTES;
|
|
21123
|
+
return external_exports.object({
|
|
21124
|
+
path: SessionFileReadDataSchema.shape.path,
|
|
21125
|
+
rootRevision: SessionFileReadDataSchema.shape.rootRevision,
|
|
21126
|
+
mediaType: external_exports.enum(mediaTypes),
|
|
21127
|
+
originalByteLength: external_exports.number().int().min(0).max(maxOriginal),
|
|
21128
|
+
// Canonical length after decompression, not the length of the transport bytes.
|
|
21129
|
+
byteLength: external_exports.number().int().min(0).max(maxOriginal),
|
|
21130
|
+
encoding: external_exports.enum(["identity", "gzip"]),
|
|
21131
|
+
data: external_exports.string().max(extended ? SESSION_FILE_V2_MAX_BASE64_LENGTH : SESSION_FILE_MAX_BASE64_LENGTH)
|
|
21132
|
+
}).strict().superRefine((result, context) => {
|
|
21133
|
+
const invalid = () => context.addIssue({ code: "custom", message: "Invalid file content" });
|
|
21134
|
+
if (result.encoding === "gzip" !== result.originalByteLength >= SESSION_FILE_GZIP_THRESHOLD_BYTES)
|
|
21135
|
+
invalid();
|
|
21136
|
+
if (result.mediaType === "image/webp" ? result.byteLength === 0 || result.byteLength > SESSION_FILE_MAX_IMAGE_BYTES || result.originalByteLength === 0 : result.byteLength !== result.originalByteLength)
|
|
21137
|
+
invalid();
|
|
21138
|
+
if (result.mediaType.startsWith("video/") && (result.byteLength === 0 || !result.path.toLowerCase().endsWith(result.mediaType === "video/mp4" ? ".mp4" : ".webm")))
|
|
21139
|
+
invalid();
|
|
21140
|
+
const base643 = result.data;
|
|
21141
|
+
const padding = base643.endsWith("==") ? 2 : base643.endsWith("=") ? 1 : 0;
|
|
21142
|
+
const length = base643.length / 4 * 3 - padding;
|
|
21143
|
+
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))
|
|
21144
|
+
invalid();
|
|
21145
|
+
});
|
|
21146
|
+
}
|
|
21147
|
+
var SessionFileReadResultDataSchema = fileResultSchema(SESSION_FILE_MEDIA_TYPES, false);
|
|
21148
|
+
var SessionFileReadV2ResultDataSchema = fileResultSchema(SESSION_FILE_V2_MEDIA_TYPES, true);
|
|
21134
21149
|
var SessionGitProjectSchema = external_exports.object({
|
|
21135
21150
|
localRepositoryKey: external_exports.string().length(43).regex(/^[A-Za-z0-9_-]{43}$/),
|
|
21136
21151
|
worktreeRoot: external_exports.string().min(1).max(SESSION_PROJECT_IDENTITY_MAX_PATH_LENGTH),
|
|
@@ -21231,6 +21246,65 @@ var SessionResourceReadResultDataSchema = external_exports.object({
|
|
|
21231
21246
|
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
21247
|
invalid();
|
|
21233
21248
|
});
|
|
21249
|
+
var SESSION_IMAGE_MAX_BYTES = 3 * 1024 * 1024;
|
|
21250
|
+
var SESSION_IMAGE_MAX_PIXELS = 16 * 1024 * 1024;
|
|
21251
|
+
var SessionImageIdSchema = external_exports.uuid();
|
|
21252
|
+
var SessionImageTransferModeSchema = external_exports.enum(["direct", "proxy"]);
|
|
21253
|
+
var DirectUrlSchema = external_exports.string().regex(/^https:\/\/[^/?#@\\\s\x00-\x1f\x7f]+(?:[/?][^#\\\s\x00-\x1f\x7f]*)?$/u).refine((raw) => {
|
|
21254
|
+
if (!URL.canParse(raw))
|
|
21255
|
+
return false;
|
|
21256
|
+
const url2 = new URL(raw);
|
|
21257
|
+
return url2.protocol === "https:" && url2.username === "" && url2.password === "" && url2.hash === "";
|
|
21258
|
+
}, "Direct transfers require HTTPS without userinfo, fragments or unsafe characters");
|
|
21259
|
+
var ProxyUrlSchema = external_exports.string().regex(/^\/api\/v3\/session-images\/[0-9a-f-]+\/content\?[^#\\\s\x00-\x1f\x7f]+$/u);
|
|
21260
|
+
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));
|
|
21261
|
+
var SessionImageUploadRequestSchema = external_exports.object({
|
|
21262
|
+
machineId: IdSchema,
|
|
21263
|
+
sessionId: IdSchema,
|
|
21264
|
+
sizeBytes: external_exports.number().int().min(1).max(SESSION_IMAGE_MAX_BYTES)
|
|
21265
|
+
}).strict();
|
|
21266
|
+
var SessionImageScopeSchema = external_exports.object({
|
|
21267
|
+
machineId: IdSchema,
|
|
21268
|
+
sessionId: IdSchema
|
|
21269
|
+
}).strict();
|
|
21270
|
+
var UploadResultFields = {
|
|
21271
|
+
imageId: SessionImageIdSchema,
|
|
21272
|
+
uploadExpiresAt: external_exports.number().int().positive(),
|
|
21273
|
+
method: external_exports.literal("PUT"),
|
|
21274
|
+
contentType: external_exports.literal("image/webp"),
|
|
21275
|
+
headers: SessionImageTransferHeadersSchema.refine((headers) => headers["content-type"] === "image/webp")
|
|
21276
|
+
};
|
|
21277
|
+
var SessionImageUploadResultSchema = external_exports.discriminatedUnion("mode", [
|
|
21278
|
+
external_exports.object({ ...UploadResultFields, mode: external_exports.literal("direct"), uploadUrl: DirectUrlSchema }).strict(),
|
|
21279
|
+
external_exports.object({ ...UploadResultFields, mode: external_exports.literal("proxy"), uploadUrl: ProxyUrlSchema }).strict()
|
|
21280
|
+
]);
|
|
21281
|
+
var SessionImageCommitResultSchema = external_exports.object({
|
|
21282
|
+
imageId: SessionImageIdSchema,
|
|
21283
|
+
machineId: IdSchema,
|
|
21284
|
+
sessionId: IdSchema,
|
|
21285
|
+
sizeBytes: external_exports.number().int().min(1).max(SESSION_IMAGE_MAX_BYTES),
|
|
21286
|
+
width: external_exports.number().int().positive(),
|
|
21287
|
+
height: external_exports.number().int().positive(),
|
|
21288
|
+
sha256: external_exports.string().regex(/^[a-f0-9]{64}$/u),
|
|
21289
|
+
expiresAt: external_exports.number().int().positive()
|
|
21290
|
+
}).strict();
|
|
21291
|
+
var DownloadResultFields = {
|
|
21292
|
+
image: SessionImageCommitResultSchema,
|
|
21293
|
+
downloadExpiresAt: external_exports.number().int().positive(),
|
|
21294
|
+
method: external_exports.literal("GET"),
|
|
21295
|
+
headers: SessionImageTransferHeadersSchema
|
|
21296
|
+
};
|
|
21297
|
+
var SessionImageDownloadResultSchema = external_exports.discriminatedUnion("mode", [
|
|
21298
|
+
external_exports.object({ ...DownloadResultFields, mode: external_exports.literal("direct"), downloadUrl: DirectUrlSchema }).strict(),
|
|
21299
|
+
external_exports.object({ ...DownloadResultFields, mode: external_exports.literal("proxy"), downloadUrl: ProxyUrlSchema }).strict()
|
|
21300
|
+
]);
|
|
21301
|
+
var TimelineImageBlobRequestSchema = external_exports.object({
|
|
21302
|
+
sha256: external_exports.string().regex(/^[a-f0-9]{64}$/u)
|
|
21303
|
+
}).strict();
|
|
21304
|
+
var TimelineImageBlobResultSchema = external_exports.object({
|
|
21305
|
+
sha256: TimelineImageBlobRequestSchema.shape.sha256,
|
|
21306
|
+
image: SessionImageCommitResultSchema
|
|
21307
|
+
}).strict();
|
|
21234
21308
|
var SESSION_RENAME_OPERATION = "session.rename";
|
|
21235
21309
|
var SESSION_RENAME_VERSION = 1;
|
|
21236
21310
|
var SESSION_RENAME_CAPABILITY = sessionCommunicationOperationCapability(SESSION_RENAME_OPERATION, SESSION_RENAME_VERSION);
|
|
@@ -21722,6 +21796,13 @@ var WorkbenchAndroidSchemas = {
|
|
|
21722
21796
|
WorkbenchCompactResult: WorkbenchCompactResultSchema
|
|
21723
21797
|
};
|
|
21724
21798
|
var AndroidProtocolSchemas = {
|
|
21799
|
+
TimelineImageBlobRequest: TimelineImageBlobRequestSchema,
|
|
21800
|
+
TimelineImageBlobResult: TimelineImageBlobResultSchema,
|
|
21801
|
+
SessionImageUploadRequest: SessionImageUploadRequestSchema,
|
|
21802
|
+
SessionImageScope: SessionImageScopeSchema,
|
|
21803
|
+
SessionImageUploadResult: SessionImageUploadResultSchema,
|
|
21804
|
+
SessionImageCommitResult: SessionImageCommitResultSchema,
|
|
21805
|
+
SessionImageDownloadResult: SessionImageDownloadResultSchema,
|
|
21725
21806
|
...WorkbenchAndroidSchemas,
|
|
21726
21807
|
...ScheduleAndroidSchemas,
|
|
21727
21808
|
SessionCommunication: SessionCommunicationSchema,
|
|
@@ -21735,6 +21816,7 @@ var AndroidProtocolSchemas = {
|
|
|
21735
21816
|
SessionDirectoryListResultData: SessionDirectoryListResultDataSchema,
|
|
21736
21817
|
SessionFileReadData: SessionFileReadDataSchema,
|
|
21737
21818
|
SessionFileReadResultData: SessionFileReadResultDataSchema,
|
|
21819
|
+
SessionFileReadV2ResultData: SessionFileReadV2ResultDataSchema,
|
|
21738
21820
|
SessionResourceReadData: SessionResourceReadDataSchema,
|
|
21739
21821
|
SessionResourceReadResultData: SessionResourceReadResultDataSchema,
|
|
21740
21822
|
SessionDirectoryListRequest: SessionDirectoryListRequestSchema,
|
|
@@ -21823,7 +21905,7 @@ var AndroidProtocolSchemas = {
|
|
|
21823
21905
|
ProtocolError: ProtocolErrorSchema
|
|
21824
21906
|
};
|
|
21825
21907
|
|
|
21826
|
-
// ../../shared/sdk/dist/chunks/chunk-
|
|
21908
|
+
// ../../shared/sdk/dist/chunks/chunk-UE4QYZCG.js
|
|
21827
21909
|
var OwnerSchema = external_exports.object({ pid: external_exports.number().int().positive(), instanceId: external_exports.uuid().optional() });
|
|
21828
21910
|
var PeerChatRequestSchema = external_exports.object({
|
|
21829
21911
|
sessionId: IdSchema,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentknight/client",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.39",
|
|
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.
|
|
44
|
+
"@agentknight/sdk": "0.9.39"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/qrcode": "1.5.6",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"esbuild": "0.28.2",
|
|
50
50
|
"sharp": "0.34.5",
|
|
51
51
|
"socket.io-client": "4.8.3",
|
|
52
|
-
"@agentknight/
|
|
53
|
-
"@agentknight/
|
|
52
|
+
"@agentknight/shared": "0.1.0",
|
|
53
|
+
"@agentknight/protocol": "0.1.0"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
|