@parall/daemon 1.56.2 → 1.57.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.56.2",
3
- "built_at": "2026-08-21T14:21:02.917Z",
2
+ "version": "1.57.1",
3
+ "built_at": "2026-08-23T15:43:08.791Z",
4
4
  "min_node_version": "20.0.0",
5
5
  "files": {
6
6
  "bb-browser-daemon.js": {
@@ -16,29 +16,29 @@
16
16
  "size": 18
17
17
  },
18
18
  "parall-browser-pod.js": {
19
- "sha256": "d7cd22077f1c4bb49e2d52c220f092015f5feb44732943ee57b4350c88c6dc68",
20
- "size": 2964867
19
+ "sha256": "1d1a58c7887c3cc0b1adf424f1a0f1a1f1203a1fa960226b8a4f51d07ac6d224",
20
+ "size": 2967901
21
21
  },
22
22
  "parall-channel-exec.js": {
23
23
  "sha256": "7c2a6e12483a45e9eb4a42cd7d4cdd3c4fa21dd09ac1347d9a3e177b4ddee930",
24
24
  "size": 7220
25
25
  },
26
26
  "parall-claude-agent.js": {
27
- "sha256": "62f6d64a5a6ee8b46a1d2505cbe05226420128b59bcaa10c2ec9d5b0637dd460",
28
- "size": 2844167
27
+ "sha256": "0955733acf00be0b690bb5c1b72f3bfd939d746b23a301c84272ba37e9b0834e",
28
+ "size": 2847527
29
29
  },
30
30
  "parall-codex-agent.js": {
31
- "sha256": "11d4c536300daeef09e471f28c474dddd0ebcb91cc18c9a34828f6756de75d5f",
32
- "size": 2876114
31
+ "sha256": "edd30679e40834d7af752650b250e44ad9476969de446b5fdfbdef46df366a77",
32
+ "size": 2879474
33
33
  },
34
34
  "parall-daemon.js": {
35
- "sha256": "bd184a0cf0c6f026ce4c9e3b6630973e109e4d232994a8199791b0418e9384ce",
36
- "size": 3032407
35
+ "sha256": "48ad3e0c78a2abd16b23a6fb370da97b339b328f45debae69d0c07bb5438f545",
36
+ "size": 3036196
37
37
  },
38
38
  "parall-openclaw-agent.js": {
39
39
  "sha256": "856a1c3a9ae0ffef8efe2481fa1171dbeb1d67cccb88616aa9bf16da96a69355",
40
40
  "size": 9923
41
41
  }
42
42
  },
43
- "signature": "o7p9D5wm97kql2R2fN4lHpJfUQdCWAIaz8UUUVcYZ0gQsqZzS8AmnjsJguD0NpfuZZagmM2SrVKjs62QfbCBCA=="
43
+ "signature": "b1L2thmtzkfAijbNPw/2P8+gdqd86Bg2VDpBoC6gnlNALDH9Ta1E9IPEn1w8fPSnBPARX+AfPYseSdkKL8DnBQ=="
44
44
  }
@@ -63579,6 +63579,24 @@ var ENDPOINTS = {
63579
63579
  TEAM_MEMBERS: (orgId, teamId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members`,
63580
63580
  TEAM_MEMBER: (orgId, teamId, userId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members/${userId}`,
63581
63581
  ORG_MEMBERS_ONLINE: (orgId) => `${API_BASE}/orgs/${orgId}/members/online`,
63582
+ LLM_PROVIDERS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-providers`,
63583
+ LLM_PROVIDER: (orgId, providerId) => `${API_BASE}/orgs/${orgId}/llm-providers/${providerId}`,
63584
+ ORG_LLM_MODELS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-models`,
63585
+ ORG_LLM_MODEL: (orgId, modelRowId) => `${API_BASE}/orgs/${orgId}/llm-models/${modelRowId}`,
63586
+ /**
63587
+ * Platform catalog merged with this org's own model rows. Pass `runtime` to
63588
+ * filter org-added models to the ones that runtime can actually reach —
63589
+ * without it a picker can offer a model the write path rejects.
63590
+ */
63591
+ ORG_MODEL_CATALOG: (orgId, runtime, includeModel) => {
63592
+ const params = new URLSearchParams();
63593
+ if (runtime)
63594
+ params.set("runtime", runtime);
63595
+ if (includeModel)
63596
+ params.set("include_model", includeModel);
63597
+ const qs = params.toString();
63598
+ return `${API_BASE}/orgs/${orgId}/models${qs ? `?${qs}` : ""}`;
63599
+ },
63582
63600
  ORG_MEMBER: (orgId, userId) => `${API_BASE}/orgs/${orgId}/members/${userId}`,
63583
63601
  ORG_MEMBER_CHATS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/chats`,
63584
63602
  ORG_MEMBER_TASKS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/tasks`,
@@ -64241,6 +64259,55 @@ var WechatClient = class extends TaskLabelClient {
64241
64259
  }
64242
64260
  };
64243
64261
 
64262
+ // ts/sdk/dist/llm-provider-client.js
64263
+ var LLMProviderClient = class extends WechatClient {
64264
+ async getLLMProviders(orgId) {
64265
+ const response = await this.request("GET", ENDPOINTS.LLM_PROVIDERS(orgId));
64266
+ return response.data;
64267
+ }
64268
+ async createLLMProvider(orgId, data2) {
64269
+ return this.request("POST", ENDPOINTS.LLM_PROVIDERS(orgId), data2);
64270
+ }
64271
+ /** Omitting `api_key` leaves the stored credential untouched. */
64272
+ async updateLLMProvider(orgId, providerId, data2) {
64273
+ return this.request("PATCH", ENDPOINTS.LLM_PROVIDER(orgId, providerId), data2);
64274
+ }
64275
+ /** Fails with PROVIDER_IN_USE while model rows still point at it. */
64276
+ async deleteLLMProvider(orgId, providerId) {
64277
+ return this.request("DELETE", ENDPOINTS.LLM_PROVIDER(orgId, providerId));
64278
+ }
64279
+ async getOrgLLMModels(orgId) {
64280
+ const response = await this.request("GET", ENDPOINTS.ORG_LLM_MODELS(orgId));
64281
+ return response.data;
64282
+ }
64283
+ async createOrgLLMModel(orgId, data2) {
64284
+ return this.request("POST", ENDPOINTS.ORG_LLM_MODELS(orgId), data2);
64285
+ }
64286
+ /**
64287
+ * Patches a model row in place. Repointing a provider or fixing an upstream
64288
+ * name this way avoids the delete-and-recreate window, during which an
64289
+ * org-only model has no upstream at all and its pinned agents fail.
64290
+ */
64291
+ async updateOrgLLMModel(orgId, modelRowId, data2) {
64292
+ return this.request("PATCH", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId), data2);
64293
+ }
64294
+ async deleteOrgLLMModel(orgId, modelRowId) {
64295
+ return this.request("DELETE", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId));
64296
+ }
64297
+ /**
64298
+ * The catalog as this org sees it: platform models with the org's rows
64299
+ * merged in. Distinct from the public model catalog, which stays org-agnostic
64300
+ * and cacheable — use this one wherever an org context exists.
64301
+ *
64302
+ * Pass `runtime` on a picker: org-added models are then filtered to what that
64303
+ * runtime's protocol can reach, matching the server-side pin validation.
64304
+ */
64305
+ async getOrgModelCatalog(orgId, runtime, includeModel) {
64306
+ const response = await this.request("GET", ENDPOINTS.ORG_MODEL_CATALOG(orgId, runtime, includeModel));
64307
+ return response.data;
64308
+ }
64309
+ };
64310
+
64244
64311
  // ts/sdk/dist/attachment-client.js
64245
64312
  var COMPLETION_RETRY_DELAYS_MS = [250, 750];
64246
64313
  function isRetryableCompletionError(error2) {
@@ -64249,7 +64316,7 @@ function isRetryableCompletionError(error2) {
64249
64316
  const status = error2.status;
64250
64317
  return status === 0 || typeof status === "number" && status >= 500;
64251
64318
  }
64252
- var AttachmentClient = class extends WechatClient {
64319
+ var AttachmentClient = class extends LLMProviderClient {
64253
64320
  async getUploadPresignUrl(orgId, req) {
64254
64321
  return this.request("POST", ENDPOINTS.UPLOAD_PRESIGN(orgId), req);
64255
64322
  }
@@ -51566,7 +51566,10 @@ function buildEventBody(event) {
51566
51566
  } else if (event.type === "channel_message") {
51567
51567
  lines.push(`[Event: channel.message]`);
51568
51568
  const providerLabel = sanitizeMeta(event.channelProvider ?? "external IM");
51569
- const convLabel = event.channelExternalConversationId ? `${sanitizeMeta(event.channelExternalConversationId)} (${sanitizeMeta(event.channelConversationType ?? "conversation")})` : sanitizeMeta(event.channelConversationType ?? "conversation");
51569
+ const convType = sanitizeMeta(event.channelConversationType ?? "conversation");
51570
+ const convId = event.channelExternalConversationId ? sanitizeMeta(event.channelExternalConversationId) : void 0;
51571
+ const convName = event.channelExternalConversationName ? sanitizeMeta(event.channelExternalConversationName) : void 0;
51572
+ const convLabel = convName ? `${convName} (${convId ? `${convId}, ` : ""}${convType})` : convId ? `${convId} (${convType})` : convType;
51570
51573
  lines.push(`[Channel: ${providerLabel} | conversation: ${convLabel}]`);
51571
51574
  lines.push(`[From: ${sanitizeMeta(event.senderName)} (external user, not a Parall member)]`);
51572
51575
  if (event.channelExternalMessageId) {
@@ -51755,6 +51758,24 @@ var ENDPOINTS = {
51755
51758
  TEAM_MEMBERS: (orgId, teamId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members`,
51756
51759
  TEAM_MEMBER: (orgId, teamId, userId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members/${userId}`,
51757
51760
  ORG_MEMBERS_ONLINE: (orgId) => `${API_BASE}/orgs/${orgId}/members/online`,
51761
+ LLM_PROVIDERS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-providers`,
51762
+ LLM_PROVIDER: (orgId, providerId) => `${API_BASE}/orgs/${orgId}/llm-providers/${providerId}`,
51763
+ ORG_LLM_MODELS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-models`,
51764
+ ORG_LLM_MODEL: (orgId, modelRowId) => `${API_BASE}/orgs/${orgId}/llm-models/${modelRowId}`,
51765
+ /**
51766
+ * Platform catalog merged with this org's own model rows. Pass `runtime` to
51767
+ * filter org-added models to the ones that runtime can actually reach —
51768
+ * without it a picker can offer a model the write path rejects.
51769
+ */
51770
+ ORG_MODEL_CATALOG: (orgId, runtime, includeModel) => {
51771
+ const params = new URLSearchParams();
51772
+ if (runtime)
51773
+ params.set("runtime", runtime);
51774
+ if (includeModel)
51775
+ params.set("include_model", includeModel);
51776
+ const qs = params.toString();
51777
+ return `${API_BASE}/orgs/${orgId}/models${qs ? `?${qs}` : ""}`;
51778
+ },
51758
51779
  ORG_MEMBER: (orgId, userId) => `${API_BASE}/orgs/${orgId}/members/${userId}`,
51759
51780
  ORG_MEMBER_CHATS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/chats`,
51760
51781
  ORG_MEMBER_TASKS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/tasks`,
@@ -52508,6 +52529,55 @@ var WechatClient = class extends TaskLabelClient {
52508
52529
  }
52509
52530
  };
52510
52531
 
52532
+ // ts/sdk/dist/llm-provider-client.js
52533
+ var LLMProviderClient = class extends WechatClient {
52534
+ async getLLMProviders(orgId) {
52535
+ const response = await this.request("GET", ENDPOINTS.LLM_PROVIDERS(orgId));
52536
+ return response.data;
52537
+ }
52538
+ async createLLMProvider(orgId, data) {
52539
+ return this.request("POST", ENDPOINTS.LLM_PROVIDERS(orgId), data);
52540
+ }
52541
+ /** Omitting `api_key` leaves the stored credential untouched. */
52542
+ async updateLLMProvider(orgId, providerId, data) {
52543
+ return this.request("PATCH", ENDPOINTS.LLM_PROVIDER(orgId, providerId), data);
52544
+ }
52545
+ /** Fails with PROVIDER_IN_USE while model rows still point at it. */
52546
+ async deleteLLMProvider(orgId, providerId) {
52547
+ return this.request("DELETE", ENDPOINTS.LLM_PROVIDER(orgId, providerId));
52548
+ }
52549
+ async getOrgLLMModels(orgId) {
52550
+ const response = await this.request("GET", ENDPOINTS.ORG_LLM_MODELS(orgId));
52551
+ return response.data;
52552
+ }
52553
+ async createOrgLLMModel(orgId, data) {
52554
+ return this.request("POST", ENDPOINTS.ORG_LLM_MODELS(orgId), data);
52555
+ }
52556
+ /**
52557
+ * Patches a model row in place. Repointing a provider or fixing an upstream
52558
+ * name this way avoids the delete-and-recreate window, during which an
52559
+ * org-only model has no upstream at all and its pinned agents fail.
52560
+ */
52561
+ async updateOrgLLMModel(orgId, modelRowId, data) {
52562
+ return this.request("PATCH", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId), data);
52563
+ }
52564
+ async deleteOrgLLMModel(orgId, modelRowId) {
52565
+ return this.request("DELETE", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId));
52566
+ }
52567
+ /**
52568
+ * The catalog as this org sees it: platform models with the org's rows
52569
+ * merged in. Distinct from the public model catalog, which stays org-agnostic
52570
+ * and cacheable — use this one wherever an org context exists.
52571
+ *
52572
+ * Pass `runtime` on a picker: org-added models are then filtered to what that
52573
+ * runtime's protocol can reach, matching the server-side pin validation.
52574
+ */
52575
+ async getOrgModelCatalog(orgId, runtime, includeModel) {
52576
+ const response = await this.request("GET", ENDPOINTS.ORG_MODEL_CATALOG(orgId, runtime, includeModel));
52577
+ return response.data;
52578
+ }
52579
+ };
52580
+
52511
52581
  // ts/sdk/dist/attachment-client.js
52512
52582
  var COMPLETION_RETRY_DELAYS_MS = [250, 750];
52513
52583
  function isRetryableCompletionError(error) {
@@ -52516,7 +52586,7 @@ function isRetryableCompletionError(error) {
52516
52586
  const status = error.status;
52517
52587
  return status === 0 || typeof status === "number" && status >= 500;
52518
52588
  }
52519
- var AttachmentClient = class extends WechatClient {
52589
+ var AttachmentClient = class extends LLMProviderClient {
52520
52590
  async getUploadPresignUrl(orgId, req) {
52521
52591
  return this.request("POST", ENDPOINTS.UPLOAD_PRESIGN(orgId), req);
52522
52592
  }
@@ -59538,7 +59608,7 @@ var ParallAgentGateway = class {
59538
59608
  const event = {
59539
59609
  type: "channel_message",
59540
59610
  targetId: conv.id,
59541
- targetName: conv.external_user_name || conv.external_conversation_id,
59611
+ targetName: conv.external_conversation_name || conv.external_user_name || conv.external_conversation_id,
59542
59612
  targetType: "channel_conversation",
59543
59613
  senderId: msg.external_user_id || "external",
59544
59614
  senderName: msg.external_user_name || msg.external_user_id || "external user",
@@ -59548,6 +59618,7 @@ var ParallAgentGateway = class {
59548
59618
  channelProvider: provider,
59549
59619
  channelConversationType: conv.conversation_type || void 0,
59550
59620
  channelExternalConversationId: conv.external_conversation_id,
59621
+ channelExternalConversationName: conv.external_conversation_name || void 0,
59551
59622
  channelExternalMessageId: msg.external_message_id,
59552
59623
  channelCliCapable: cliCapable,
59553
59624
  ackSourceType: "channel_message",
@@ -51566,7 +51566,10 @@ function buildEventBody(event) {
51566
51566
  } else if (event.type === "channel_message") {
51567
51567
  lines.push(`[Event: channel.message]`);
51568
51568
  const providerLabel = sanitizeMeta(event.channelProvider ?? "external IM");
51569
- const convLabel = event.channelExternalConversationId ? `${sanitizeMeta(event.channelExternalConversationId)} (${sanitizeMeta(event.channelConversationType ?? "conversation")})` : sanitizeMeta(event.channelConversationType ?? "conversation");
51569
+ const convType = sanitizeMeta(event.channelConversationType ?? "conversation");
51570
+ const convId = event.channelExternalConversationId ? sanitizeMeta(event.channelExternalConversationId) : void 0;
51571
+ const convName = event.channelExternalConversationName ? sanitizeMeta(event.channelExternalConversationName) : void 0;
51572
+ const convLabel = convName ? `${convName} (${convId ? `${convId}, ` : ""}${convType})` : convId ? `${convId} (${convType})` : convType;
51570
51573
  lines.push(`[Channel: ${providerLabel} | conversation: ${convLabel}]`);
51571
51574
  lines.push(`[From: ${sanitizeMeta(event.senderName)} (external user, not a Parall member)]`);
51572
51575
  if (event.channelExternalMessageId) {
@@ -51755,6 +51758,24 @@ var ENDPOINTS = {
51755
51758
  TEAM_MEMBERS: (orgId, teamId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members`,
51756
51759
  TEAM_MEMBER: (orgId, teamId, userId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members/${userId}`,
51757
51760
  ORG_MEMBERS_ONLINE: (orgId) => `${API_BASE}/orgs/${orgId}/members/online`,
51761
+ LLM_PROVIDERS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-providers`,
51762
+ LLM_PROVIDER: (orgId, providerId) => `${API_BASE}/orgs/${orgId}/llm-providers/${providerId}`,
51763
+ ORG_LLM_MODELS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-models`,
51764
+ ORG_LLM_MODEL: (orgId, modelRowId) => `${API_BASE}/orgs/${orgId}/llm-models/${modelRowId}`,
51765
+ /**
51766
+ * Platform catalog merged with this org's own model rows. Pass `runtime` to
51767
+ * filter org-added models to the ones that runtime can actually reach —
51768
+ * without it a picker can offer a model the write path rejects.
51769
+ */
51770
+ ORG_MODEL_CATALOG: (orgId, runtime, includeModel) => {
51771
+ const params = new URLSearchParams();
51772
+ if (runtime)
51773
+ params.set("runtime", runtime);
51774
+ if (includeModel)
51775
+ params.set("include_model", includeModel);
51776
+ const qs = params.toString();
51777
+ return `${API_BASE}/orgs/${orgId}/models${qs ? `?${qs}` : ""}`;
51778
+ },
51758
51779
  ORG_MEMBER: (orgId, userId) => `${API_BASE}/orgs/${orgId}/members/${userId}`,
51759
51780
  ORG_MEMBER_CHATS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/chats`,
51760
51781
  ORG_MEMBER_TASKS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/tasks`,
@@ -52508,6 +52529,55 @@ var WechatClient = class extends TaskLabelClient {
52508
52529
  }
52509
52530
  };
52510
52531
 
52532
+ // ts/sdk/dist/llm-provider-client.js
52533
+ var LLMProviderClient = class extends WechatClient {
52534
+ async getLLMProviders(orgId) {
52535
+ const response = await this.request("GET", ENDPOINTS.LLM_PROVIDERS(orgId));
52536
+ return response.data;
52537
+ }
52538
+ async createLLMProvider(orgId, data) {
52539
+ return this.request("POST", ENDPOINTS.LLM_PROVIDERS(orgId), data);
52540
+ }
52541
+ /** Omitting `api_key` leaves the stored credential untouched. */
52542
+ async updateLLMProvider(orgId, providerId, data) {
52543
+ return this.request("PATCH", ENDPOINTS.LLM_PROVIDER(orgId, providerId), data);
52544
+ }
52545
+ /** Fails with PROVIDER_IN_USE while model rows still point at it. */
52546
+ async deleteLLMProvider(orgId, providerId) {
52547
+ return this.request("DELETE", ENDPOINTS.LLM_PROVIDER(orgId, providerId));
52548
+ }
52549
+ async getOrgLLMModels(orgId) {
52550
+ const response = await this.request("GET", ENDPOINTS.ORG_LLM_MODELS(orgId));
52551
+ return response.data;
52552
+ }
52553
+ async createOrgLLMModel(orgId, data) {
52554
+ return this.request("POST", ENDPOINTS.ORG_LLM_MODELS(orgId), data);
52555
+ }
52556
+ /**
52557
+ * Patches a model row in place. Repointing a provider or fixing an upstream
52558
+ * name this way avoids the delete-and-recreate window, during which an
52559
+ * org-only model has no upstream at all and its pinned agents fail.
52560
+ */
52561
+ async updateOrgLLMModel(orgId, modelRowId, data) {
52562
+ return this.request("PATCH", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId), data);
52563
+ }
52564
+ async deleteOrgLLMModel(orgId, modelRowId) {
52565
+ return this.request("DELETE", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId));
52566
+ }
52567
+ /**
52568
+ * The catalog as this org sees it: platform models with the org's rows
52569
+ * merged in. Distinct from the public model catalog, which stays org-agnostic
52570
+ * and cacheable — use this one wherever an org context exists.
52571
+ *
52572
+ * Pass `runtime` on a picker: org-added models are then filtered to what that
52573
+ * runtime's protocol can reach, matching the server-side pin validation.
52574
+ */
52575
+ async getOrgModelCatalog(orgId, runtime, includeModel) {
52576
+ const response = await this.request("GET", ENDPOINTS.ORG_MODEL_CATALOG(orgId, runtime, includeModel));
52577
+ return response.data;
52578
+ }
52579
+ };
52580
+
52511
52581
  // ts/sdk/dist/attachment-client.js
52512
52582
  var COMPLETION_RETRY_DELAYS_MS = [250, 750];
52513
52583
  function isRetryableCompletionError(error) {
@@ -52516,7 +52586,7 @@ function isRetryableCompletionError(error) {
52516
52586
  const status = error.status;
52517
52587
  return status === 0 || typeof status === "number" && status >= 500;
52518
52588
  }
52519
- var AttachmentClient = class extends WechatClient {
52589
+ var AttachmentClient = class extends LLMProviderClient {
52520
52590
  async getUploadPresignUrl(orgId, req) {
52521
52591
  return this.request("POST", ENDPOINTS.UPLOAD_PRESIGN(orgId), req);
52522
52592
  }
@@ -59538,7 +59608,7 @@ var ParallAgentGateway = class {
59538
59608
  const event = {
59539
59609
  type: "channel_message",
59540
59610
  targetId: conv.id,
59541
- targetName: conv.external_user_name || conv.external_conversation_id,
59611
+ targetName: conv.external_conversation_name || conv.external_user_name || conv.external_conversation_id,
59542
59612
  targetType: "channel_conversation",
59543
59613
  senderId: msg.external_user_id || "external",
59544
59614
  senderName: msg.external_user_name || msg.external_user_id || "external user",
@@ -59548,6 +59618,7 @@ var ParallAgentGateway = class {
59548
59618
  channelProvider: provider,
59549
59619
  channelConversationType: conv.conversation_type || void 0,
59550
59620
  channelExternalConversationId: conv.external_conversation_id,
59621
+ channelExternalConversationName: conv.external_conversation_name || void 0,
59551
59622
  channelExternalMessageId: msg.external_message_id,
59552
59623
  channelCliCapable: cliCapable,
59553
59624
  ackSourceType: "channel_message",
@@ -178,6 +178,13 @@ var init_browser_viewer = __esm({
178
178
  }
179
179
  });
180
180
 
181
+ // ts/sdk/dist/browser-use.js
182
+ var init_browser_use = __esm({
183
+ "ts/sdk/dist/browser-use.js"() {
184
+ "use strict";
185
+ }
186
+ });
187
+
181
188
  // ts/sdk/dist/attachment-types.js
182
189
  var init_attachment_types = __esm({
183
190
  "ts/sdk/dist/attachment-types.js"() {
@@ -241,6 +248,24 @@ var init_constants = __esm({
241
248
  TEAM_MEMBERS: (orgId, teamId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members`,
242
249
  TEAM_MEMBER: (orgId, teamId, userId) => `${API_BASE}/orgs/${orgId}/teams/${teamId}/members/${userId}`,
243
250
  ORG_MEMBERS_ONLINE: (orgId) => `${API_BASE}/orgs/${orgId}/members/online`,
251
+ LLM_PROVIDERS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-providers`,
252
+ LLM_PROVIDER: (orgId, providerId) => `${API_BASE}/orgs/${orgId}/llm-providers/${providerId}`,
253
+ ORG_LLM_MODELS: (orgId) => `${API_BASE}/orgs/${orgId}/llm-models`,
254
+ ORG_LLM_MODEL: (orgId, modelRowId) => `${API_BASE}/orgs/${orgId}/llm-models/${modelRowId}`,
255
+ /**
256
+ * Platform catalog merged with this org's own model rows. Pass `runtime` to
257
+ * filter org-added models to the ones that runtime can actually reach —
258
+ * without it a picker can offer a model the write path rejects.
259
+ */
260
+ ORG_MODEL_CATALOG: (orgId, runtime, includeModel) => {
261
+ const params = new URLSearchParams();
262
+ if (runtime)
263
+ params.set("runtime", runtime);
264
+ if (includeModel)
265
+ params.set("include_model", includeModel);
266
+ const qs = params.toString();
267
+ return `${API_BASE}/orgs/${orgId}/models${qs ? `?${qs}` : ""}`;
268
+ },
244
269
  ORG_MEMBER: (orgId, userId) => `${API_BASE}/orgs/${orgId}/members/${userId}`,
245
270
  ORG_MEMBER_CHATS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/chats`,
246
271
  ORG_MEMBER_TASKS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/tasks`,
@@ -1019,6 +1044,63 @@ var init_wechat_client = __esm({
1019
1044
  }
1020
1045
  });
1021
1046
 
1047
+ // ts/sdk/dist/llm-provider-client.js
1048
+ var LLMProviderClient;
1049
+ var init_llm_provider_client = __esm({
1050
+ "ts/sdk/dist/llm-provider-client.js"() {
1051
+ "use strict";
1052
+ init_constants();
1053
+ init_wechat_client();
1054
+ LLMProviderClient = class extends WechatClient {
1055
+ async getLLMProviders(orgId) {
1056
+ const response = await this.request("GET", ENDPOINTS.LLM_PROVIDERS(orgId));
1057
+ return response.data;
1058
+ }
1059
+ async createLLMProvider(orgId, data) {
1060
+ return this.request("POST", ENDPOINTS.LLM_PROVIDERS(orgId), data);
1061
+ }
1062
+ /** Omitting `api_key` leaves the stored credential untouched. */
1063
+ async updateLLMProvider(orgId, providerId, data) {
1064
+ return this.request("PATCH", ENDPOINTS.LLM_PROVIDER(orgId, providerId), data);
1065
+ }
1066
+ /** Fails with PROVIDER_IN_USE while model rows still point at it. */
1067
+ async deleteLLMProvider(orgId, providerId) {
1068
+ return this.request("DELETE", ENDPOINTS.LLM_PROVIDER(orgId, providerId));
1069
+ }
1070
+ async getOrgLLMModels(orgId) {
1071
+ const response = await this.request("GET", ENDPOINTS.ORG_LLM_MODELS(orgId));
1072
+ return response.data;
1073
+ }
1074
+ async createOrgLLMModel(orgId, data) {
1075
+ return this.request("POST", ENDPOINTS.ORG_LLM_MODELS(orgId), data);
1076
+ }
1077
+ /**
1078
+ * Patches a model row in place. Repointing a provider or fixing an upstream
1079
+ * name this way avoids the delete-and-recreate window, during which an
1080
+ * org-only model has no upstream at all and its pinned agents fail.
1081
+ */
1082
+ async updateOrgLLMModel(orgId, modelRowId, data) {
1083
+ return this.request("PATCH", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId), data);
1084
+ }
1085
+ async deleteOrgLLMModel(orgId, modelRowId) {
1086
+ return this.request("DELETE", ENDPOINTS.ORG_LLM_MODEL(orgId, modelRowId));
1087
+ }
1088
+ /**
1089
+ * The catalog as this org sees it: platform models with the org's rows
1090
+ * merged in. Distinct from the public model catalog, which stays org-agnostic
1091
+ * and cacheable — use this one wherever an org context exists.
1092
+ *
1093
+ * Pass `runtime` on a picker: org-added models are then filtered to what that
1094
+ * runtime's protocol can reach, matching the server-side pin validation.
1095
+ */
1096
+ async getOrgModelCatalog(orgId, runtime, includeModel) {
1097
+ const response = await this.request("GET", ENDPOINTS.ORG_MODEL_CATALOG(orgId, runtime, includeModel));
1098
+ return response.data;
1099
+ }
1100
+ };
1101
+ }
1102
+ });
1103
+
1022
1104
  // ts/sdk/dist/attachment-client.js
1023
1105
  function isRetryableCompletionError(error) {
1024
1106
  if (!error || typeof error !== "object" || !("status" in error))
@@ -1031,9 +1113,9 @@ var init_attachment_client = __esm({
1031
1113
  "ts/sdk/dist/attachment-client.js"() {
1032
1114
  "use strict";
1033
1115
  init_constants();
1034
- init_wechat_client();
1116
+ init_llm_provider_client();
1035
1117
  COMPLETION_RETRY_DELAYS_MS = [250, 750];
1036
- AttachmentClient = class extends WechatClient {
1118
+ AttachmentClient = class extends LLMProviderClient {
1037
1119
  async getUploadPresignUrl(orgId, req) {
1038
1120
  return this.request("POST", ENDPOINTS.UPLOAD_PRESIGN(orgId), req);
1039
1121
  }
@@ -3653,6 +3735,13 @@ var init_client = __esm({
3653
3735
  }
3654
3736
  });
3655
3737
 
3738
+ // ts/sdk/dist/llm-provider-types.js
3739
+ var init_llm_provider_types = __esm({
3740
+ "ts/sdk/dist/llm-provider-types.js"() {
3741
+ "use strict";
3742
+ }
3743
+ });
3744
+
3656
3745
  // ts/sdk/dist/subject.js
3657
3746
  var init_subject = __esm({
3658
3747
  "ts/sdk/dist/subject.js"() {
@@ -4026,9 +4115,11 @@ var init_dist = __esm({
4026
4115
  "ts/sdk/dist/index.js"() {
4027
4116
  "use strict";
4028
4117
  init_browser_viewer();
4118
+ init_browser_use();
4029
4119
  init_attachment_types();
4030
4120
  init_client();
4031
4121
  init_constants();
4122
+ init_llm_provider_types();
4032
4123
  init_subject();
4033
4124
  init_task_label_types();
4034
4125
  init_types();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parall/daemon",
3
- "version": "1.56.2",
3
+ "version": "1.57.1",
4
4
  "description": "Parall local agent runtime — daemon supervisor + bridge runtimes, bundled as standalone JS files",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -33,11 +33,11 @@
33
33
  "@aws-sdk/client-s3": "3.984.0",
34
34
  "@pinixai/bb-browser-pro": "0.15.0",
35
35
  "ws": "^8.18.0",
36
- "@parall/agent-core": "1.56.2",
37
- "@parall/claude-agent": "1.56.2",
38
- "@parall/codex-agent": "1.56.2",
39
- "@parall/sdk": "1.56.2",
40
- "@parall/openclaw-agent": "1.56.2"
36
+ "@parall/agent-core": "1.57.1",
37
+ "@parall/sdk": "1.57.1",
38
+ "@parall/claude-agent": "1.57.1",
39
+ "@parall/openclaw-agent": "1.57.1",
40
+ "@parall/codex-agent": "1.57.1"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^22.0.0",