@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.
- package/LICENSE +201 -201
- package/README.md +299 -299
- package/dist/cli.js +862 -734
- package/dist/upgrade-worker.js +114 -25
- package/package.json +2 -2
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-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
|
-
|
|
21114
|
-
|
|
21115
|
-
|
|
21116
|
-
|
|
21117
|
-
|
|
21118
|
-
|
|
21119
|
-
|
|
21120
|
-
|
|
21121
|
-
|
|
21122
|
-
|
|
21123
|
-
|
|
21124
|
-
|
|
21125
|
-
|
|
21126
|
-
|
|
21127
|
-
|
|
21128
|
-
|
|
21129
|
-
|
|
21130
|
-
|
|
21131
|
-
|
|
21132
|
-
|
|
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-
|
|
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.
|
|
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.
|
|
44
|
+
"@agentknight/sdk": "0.9.40"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/qrcode": "1.5.6",
|