@uipath/packager-tool-workflowcompiler-browser 0.0.33 → 1.196.0

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.
@@ -21,6 +21,8 @@ export const en = {
21
21
  deletingBucket: "Deleting temporary storage bucket {bucketId}",
22
22
  copyingFiles:
23
23
  "Copying {count} file(s) for project {designId} to {path}",
24
+ offloadingInputArguments:
25
+ "Input arguments are too large ({length} chars) to send inline; uploading them as a file attachment",
24
26
  },
25
27
  errors: {
26
28
  missingConnectionInfo:
@@ -53,6 +55,12 @@ export const en = {
53
55
  "Session timed out waiting for projects: received {received} of {expected} expected projects",
54
56
  bundleOperationMismatch:
55
57
  "Cannot mix {sessionOperation} and {entryOperation} in the same context",
58
+ createAttachmentFailed:
59
+ "Failed to create input arguments attachment ({status}): {errorText}",
60
+ attachmentResponseMalformed:
61
+ "Attachment creation response did not include an id and blob URI",
62
+ uploadInputArgumentsFailed:
63
+ "Failed to upload input arguments file ({status}): {statusText}",
56
64
  },
57
65
  },
58
66
  } as const;
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Los argumentos de entrada son demasiado grandes ({length} caracteres) para enviarlos en línea; se cargarán como un archivo adjunto"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "No se pudo crear el archivo adjunto de argumentos de entrada ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "La respuesta de creación del archivo adjunto no incluía un id ni un URI de blob",
33
+ "uploadInputArgumentsFailed": "No se pudo cargar el archivo de argumentos de entrada ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Los argumentos de entrada son demasiado grandes ({length} caracteres) para enviarlos en línea; se cargarán como un archivo adjunto"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "No se pudo crear el archivo adjunto de argumentos de entrada ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "La respuesta de creación del archivo adjunto no incluía un id ni un URI de blob",
33
+ "uploadInputArgumentsFailed": "No se pudo cargar el archivo de argumentos de entrada ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Les arguments d'entrée sont trop volumineux ({length} caractères) pour être envoyés en ligne ; ils seront chargés en tant que pièce jointe"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "Échec de la création de la pièce jointe des arguments d'entrée ({status}) : {errorText}",
32
+ "attachmentResponseMalformed": "La réponse de création de la pièce jointe ne contenait pas d'id ni d'URI de blob",
33
+ "uploadInputArgumentsFailed": "Échec du chargement du fichier des arguments d'entrée ({status}) : {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "入力引数が大きすぎるため ({length} 文字)、インラインで送信できません。ファイル添付としてアップロードします"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "入力引数の添付ファイルの作成に失敗しました ({status}):{errorText}",
32
+ "attachmentResponseMalformed": "添付ファイルの作成応答に id と blob URI が含まれていませんでした",
33
+ "uploadInputArgumentsFailed": "入力引数ファイルのアップロードに失敗しました ({status}):{statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "입력 인수가 너무 커서({length}자) 인라인으로 보낼 수 없습니다. 파일 첨부로 업로드합니다"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "입력 인수 첨부 파일을 만들지 못했습니다({status}): {errorText}",
32
+ "attachmentResponseMalformed": "첨부 파일 생성 응답에 id와 blob URI가 포함되어 있지 않습니다",
33
+ "uploadInputArgumentsFailed": "입력 인수 파일을 업로드하지 못했습니다({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Os argumentos de entrada são muito grandes ({length} caracteres) para serem enviados inline; eles serão carregados como um anexo de arquivo"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "Falha ao criar o anexo dos argumentos de entrada ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "A resposta de criação do anexo não incluiu um id nem uma URI de blob",
33
+ "uploadInputArgumentsFailed": "Falha ao fazer upload do arquivo de argumentos de entrada ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Os argumentos de entrada são demasiado grandes ({length} carateres) para serem enviados inline; serão carregados como um anexo de ficheiro"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "Falha ao criar o anexo dos argumentos de entrada ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "A resposta de criação do anexo não incluía um id nem um URI de blob",
33
+ "uploadInputArgumentsFailed": "Falha ao carregar o ficheiro de argumentos de entrada ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Argumentele de intrare sunt prea mari ({length} caractere) pentru a fi trimise inline; vor fi încărcate ca atașament de fișier"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "Crearea atașamentului cu argumentele de intrare a eșuat ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "Răspunsul de creare a atașamentului nu a inclus un id și un URI de blob",
33
+ "uploadInputArgumentsFailed": "Încărcarea fișierului cu argumentele de intrare a eșuat ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Входные аргументы слишком велики ({length} символов) для встроенной отправки; они будут загружены как вложение файла"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "Не удалось создать вложение с входными аргументами ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "Ответ на создание вложения не содержал id и blob-URI",
33
+ "uploadInputArgumentsFailed": "Не удалось загрузить файл входных аргументов ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Giriş bağımsız değişkenleri satır içi gönderilemeyecek kadar büyük ({length} karakter); dosya eki olarak yüklenecek"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "Giriş bağımsız değişkenleri eki oluşturulamadı ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "Ek oluşturma yanıtı bir kimlik ve blob URI'si içermiyordu",
33
+ "uploadInputArgumentsFailed": "Giriş bağımsız değişkenleri dosyası yüklenemedi ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "输入参数过大({length} 个字符),无法内联发送;将作为文件附件上传"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "无法创建输入参数附件 ({status}):{errorText}",
32
+ "attachmentResponseMalformed": "附件创建响应未包含 id 和 blob URI",
33
+ "uploadInputArgumentsFailed": "无法上传输入参数文件 ({status}):{statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "輸入引數過大({length} 個字元),無法內嵌傳送;將以檔案附件形式上傳"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "無法建立輸入引數附件 ({status}):{errorText}",
32
+ "attachmentResponseMalformed": "附件建立回應未包含 id 和 blob URI",
33
+ "uploadInputArgumentsFailed": "無法上傳輸入引數檔案 ({status}):{statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -8,7 +8,8 @@
8
8
  "distributingPackages": "Distributing packages for {count} project(s)",
9
9
  "cleaningUpTempDir": "Cleaning up temporary directory {path}",
10
10
  "deletingBucket": "Deleting temporary storage bucket {bucketId}",
11
- "copyingFiles": "Copying {count} file(s) for project {designId} to {path}"
11
+ "copyingFiles": "Copying {count} file(s) for project {designId} to {path}",
12
+ "offloadingInputArguments": "Izimpikiswano zokufaka zinkulu kakhulu ({length} izinhlamvu) ukuze zithunyelwe ngaphakathi; zizolayishwa njengesinamathiselo sefayela"
12
13
  },
13
14
  "errors": {
14
15
  "missingConnectionInfo": "Missing connection info (cloudUrl, accessToken, or folderId)",
@@ -26,7 +27,10 @@
26
27
  "noMatchingProject": "No matching project found for path: {projectPath}",
27
28
  "noOutputForProject": "No output found for project {designId}",
28
29
  "distributePackagesFailed": "Failed to distribute packages for {designId}: {message}",
29
- "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects"
30
+ "sessionTimeout": "Session timed out waiting for projects: received {received} of {expected} expected projects",
31
+ "createAttachmentFailed": "Yehlulekile ukudala isinamathiselo sezimpikiswano zokufaka ({status}): {errorText}",
32
+ "attachmentResponseMalformed": "Impendulo yokudala isinamathiselo ayifakanga i-id ne-blob URI",
33
+ "uploadInputArgumentsFailed": "Yehlulekile ukulayisha ifayela lezimpikiswano zokufaka ({status}): {statusText}"
30
34
  }
31
35
  }
32
36
  }
@@ -3,6 +3,7 @@ import {
3
3
  type IFileSystem,
4
4
  type IProjectPackOptions,
5
5
  type IToolLogger,
6
+ type IZipService,
6
7
  type ProjectOperationContext,
7
8
  ToolErrorCodes,
8
9
  ToolResult,
@@ -22,14 +23,11 @@ interface ProjectResultEntry {
22
23
  }
23
24
 
24
25
  export class PackResultProcessor {
25
- private readonly zipService: ZipService;
26
-
27
26
  constructor(
28
27
  private readonly fileSystem: IFileSystem,
29
28
  private readonly logger?: IToolLogger,
30
- ) {
31
- this.zipService = new ZipService(fileSystem);
32
- }
29
+ private readonly zipService: IZipService = new ZipService(fileSystem),
30
+ ) {}
33
31
 
34
32
  async processAsync(
35
33
  bucketId: number,
@@ -6,7 +6,6 @@ import {
6
6
  } from "@microsoft/signalr";
7
7
  import {
8
8
  type IToolLogger,
9
- LogLevel,
10
9
  LogMessage,
11
10
  translate,
12
11
  } from "@uipath/solutionpackager-tool-core";
@@ -37,33 +36,6 @@ interface PackJobResult {
37
36
  BucketId?: number;
38
37
  }
39
38
 
40
- interface PackAgentLogMessage {
41
- Message: string;
42
- LogLevel: string;
43
- Source?: string;
44
- SourceTarget?: string;
45
- Progress?: number;
46
- Code?: string;
47
- FilePath?: string;
48
- Line?: string;
49
- Id?: string;
50
- }
51
-
52
- function toLogLevel(level: string): LogLevel {
53
- switch (level) {
54
- case "Debug":
55
- return LogLevel.Debug;
56
- case "Information":
57
- return LogLevel.Info;
58
- case "Warning":
59
- return LogLevel.Warn;
60
- case "Error":
61
- return LogLevel.Error;
62
- default:
63
- return LogLevel.Info;
64
- }
65
- }
66
-
67
39
  enum PackagerCommandType {
68
40
  PeerDisconnected = "PeerDisconnected",
69
41
  SetLogMessage = "SetLogMessage",
@@ -209,20 +181,23 @@ export class PackagerHubConnection {
209
181
  private onLogMessage(jsonCommand: string): void {
210
182
  if (!this.logger) return;
211
183
 
212
- const command: ExecutorCommand<PackAgentLogMessage> =
213
- JSON.parse(jsonCommand);
184
+ const command: ExecutorCommand<LogMessage> = JSON.parse(jsonCommand);
214
185
  const agentLog = command.Argument1;
215
186
 
216
- const logLevel = toLogLevel(agentLog.LogLevel);
217
- const logMessage = new LogMessage(agentLog.Message, logLevel, {
218
- source: agentLog.Source,
219
- sourceTarget: agentLog.SourceTarget,
220
- progress: agentLog.Progress,
221
- code: agentLog.Code,
222
- filePath: agentLog.FilePath,
223
- line: agentLog.Line,
224
- id: agentLog.Id,
225
- });
187
+ const logMessage = new LogMessage(
188
+ agentLog.message,
189
+ agentLog.logLevel,
190
+ {
191
+ source: agentLog.source,
192
+ sourceTarget: agentLog.sourceTarget,
193
+ progress: agentLog.progress,
194
+ code: agentLog.code,
195
+ filePath: agentLog.filePath,
196
+ line: agentLog.line,
197
+ id: agentLog.id,
198
+ },
199
+ agentLog.timestamp,
200
+ );
226
201
  this.logger.logMessage(logMessage);
227
202
  }
228
203
 
@@ -62,9 +62,28 @@ export interface IProjectBundleExecutor {
62
62
  * Waits until all compatible projects have submitted their options,
63
63
  * then executes a single bundled remote-agent operation and resolves all pending promises.
64
64
  */
65
+ /**
66
+ * Shape of the `POST /odata/Attachments` response. Orchestrator returns
67
+ * PascalCase (`Id`, `BlobFileAccess.Uri`); the camelCase fallbacks mirror the
68
+ * defensive reads in `@uipath/orchestrator-sdk`'s `uploadJobAttachment`.
69
+ */
70
+ interface AttachmentResponse {
71
+ Id?: string;
72
+ id?: string;
73
+ BlobFileAccess?: { Uri: string };
74
+ blobFileAccess?: { Uri: string };
75
+ }
76
+
65
77
  export class ProjectBundleExecutor implements IProjectBundleExecutor {
66
78
  static readonly SESSION_TIMEOUT_MS = 1_800_000;
67
79
 
80
+ /**
81
+ * Maximum length (in characters) of the inline `inputArguments` payload
82
+ * accepted by the serverless jobs endpoint. Beyond this the arguments must
83
+ * be uploaded as a file attachment and referenced via `inputFile`.
84
+ */
85
+ static readonly MAX_INLINE_INPUT_ARGUMENTS_LENGTH = 10_000;
86
+
68
87
  private readonly sessions = new Map<string, BundleSession>();
69
88
  private readonly pendingSessionCreations = new Map<
70
89
  string,
@@ -416,6 +435,10 @@ export class ProjectBundleExecutor implements IProjectBundleExecutor {
416
435
  return {
417
436
  RelativePath: project?.ProjectRelativePath ?? "",
418
437
  DesignId: project?.Id ?? "",
438
+ ProjectStorageId:
439
+ entry.operation === BundleOperation.Pack
440
+ ? (entry.options.projectStorageId ?? "")
441
+ : "",
419
442
  PackageId:
420
443
  entry.operation === BundleOperation.Pack
421
444
  ? entry.options.package.id
@@ -444,19 +467,60 @@ export class ProjectBundleExecutor implements IProjectBundleExecutor {
444
467
  if (firstEntry.operation === BundleOperation.Pack) {
445
468
  executorInfo.Configuration = context.configuration;
446
469
  const pkg = firstEntry.options.package;
470
+ executorInfo.Package = {
471
+ Name: pkg.id,
472
+ Version: pkg.version,
473
+ Author: pkg.author ?? "",
474
+ Description: pkg.description ?? "",
475
+ ReleaseNotes: pkg.releaseNotes ?? "",
476
+ Tags: pkg.tags ?? "",
477
+ IconUrl: pkg.iconUrl ?? "",
478
+ ProjectUrl: pkg.projectUrl ?? "",
479
+ RepositoryType: pkg.repositoryType ?? "",
480
+ RepositoryUrl: pkg.repositoryUrl ?? "",
481
+ RepositoryBranch: pkg.repositoryBranch ?? "",
482
+ RepositoryCommit: pkg.repositoryCommit ?? "",
483
+ };
484
+ // Flat fields retained for backward compatibility with agents that
485
+ // predate the nested Package structure.
447
486
  executorInfo.Name = pkg.id;
448
487
  executorInfo.Version = pkg.version;
449
488
  executorInfo.Author = pkg.author ?? "";
450
489
  executorInfo.Description = pkg.description ?? "";
490
+ executorInfo.ReleaseNotes = pkg.releaseNotes ?? "";
451
491
  }
452
492
 
453
- const body = {
493
+ const inputArguments = JSON.stringify(executorInfo);
494
+
495
+ const body: Record<string, unknown> = {
454
496
  source: "StudioWeb",
455
497
  targetFramework: context.targetFramework,
456
498
  jobType: "PublishStudioProject",
457
- inputArguments: JSON.stringify(executorInfo),
458
499
  };
459
500
 
501
+ // The serverless jobs endpoint caps inline inputArguments at
502
+ // MAX_INLINE_INPUT_ARGUMENTS_LENGTH characters. For larger payloads we
503
+ // upload the arguments as a file attachment and reference it via
504
+ // inputFile instead (the two are mutually exclusive on the server).
505
+ if (
506
+ inputArguments.length >
507
+ ProjectBundleExecutor.MAX_INLINE_INPUT_ARGUMENTS_LENGTH
508
+ ) {
509
+ context.logger?.info(
510
+ translate.t(
511
+ "toolWorkflowCompilerBrowser.info.offloadingInputArguments",
512
+ { length: inputArguments.length },
513
+ ),
514
+ );
515
+ body.inputFile = await this.uploadInputArgumentsFileAsync(
516
+ inputArguments,
517
+ connection,
518
+ context.logger,
519
+ );
520
+ } else {
521
+ body.inputArguments = inputArguments;
522
+ }
523
+
460
524
  const headers: Record<string, string> = {
461
525
  "Content-Type": "application/json",
462
526
  Authorization: `Bearer ${connection.accessToken}`,
@@ -484,6 +548,86 @@ export class ProjectBundleExecutor implements IProjectBundleExecutor {
484
548
  }
485
549
  }
486
550
 
551
+ /**
552
+ * Uploads the input arguments JSON as a file attachment and returns the
553
+ * attachment id, to be passed as `inputFile` on the serverless job request.
554
+ * Mirrors the two-step flow used by the Orchestrator UI: create the
555
+ * attachment (which returns a signed blob write URI) then PUT the contents
556
+ * to that URI using the storage-provided headers.
557
+ */
558
+ private async uploadInputArgumentsFileAsync(
559
+ inputArguments: string,
560
+ connection: ConnectionInfo,
561
+ logger?: IToolLogger,
562
+ ): Promise<string> {
563
+ const baseUrl = toRelativeUrl(connection.cloudUrl!);
564
+ const attachmentsUrl = `${baseUrl}/orchestrator_/odata/Attachments`;
565
+
566
+ const headers: Record<string, string> = {
567
+ "Content-Type": "application/json",
568
+ Authorization: `Bearer ${connection.accessToken}`,
569
+ "X-UIPATH-OrganizationUnitId": connection.folderId ?? "",
570
+ };
571
+ if (connection.tenantId) {
572
+ headers["x-uipath-tenantid"] = connection.tenantId;
573
+ }
574
+
575
+ const createResponse = await fetch(attachmentsUrl, {
576
+ method: "POST",
577
+ headers,
578
+ body: JSON.stringify({ name: "input.json" }),
579
+ });
580
+ if (!createResponse.ok) {
581
+ const errorText = await createResponse.text();
582
+ throw new Error(
583
+ translate.t(
584
+ "toolWorkflowCompilerBrowser.errors.createAttachmentFailed",
585
+ { status: createResponse.status, errorText },
586
+ ),
587
+ );
588
+ }
589
+
590
+ const attachment = (await createResponse.json()) as AttachmentResponse;
591
+ const attachmentId = attachment.Id ?? attachment.id ?? "";
592
+ const writeUri =
593
+ attachment.BlobFileAccess?.Uri ?? attachment.blobFileAccess?.Uri;
594
+ if (!attachmentId || !writeUri) {
595
+ throw new Error(
596
+ translate.t(
597
+ "toolWorkflowCompilerBrowser.errors.attachmentResponseMalformed",
598
+ ),
599
+ );
600
+ }
601
+
602
+ // PUT the raw bytes to the SAS blob URI. The Azure blob endpoint
603
+ // requires the BlockBlob type header; matches the proven contract in
604
+ // `@uipath/orchestrator-sdk`'s uploadJobAttachment.
605
+ const uploadResponse = await fetch(writeUri, {
606
+ method: "PUT",
607
+ headers: {
608
+ "Content-Type": "application/octet-stream",
609
+ "x-ms-blob-type": "BlockBlob",
610
+ },
611
+ body: inputArguments,
612
+ });
613
+ if (!uploadResponse.ok) {
614
+ throw new Error(
615
+ translate.t(
616
+ "toolWorkflowCompilerBrowser.errors.uploadInputArgumentsFailed",
617
+ {
618
+ status: uploadResponse.status,
619
+ statusText: uploadResponse.statusText,
620
+ },
621
+ ),
622
+ );
623
+ }
624
+
625
+ logger?.info(
626
+ `[BundleExecutor] Uploaded input arguments as attachment ${attachmentId}`,
627
+ );
628
+ return attachmentId;
629
+ }
630
+
487
631
  private resolveAll(session: BundleSession, result: ToolResult): void {
488
632
  for (const [, entry] of session.projects) {
489
633
  entry.resolve(result);