@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.
- package/bundle/manifest.json +11 -11
- package/bundle/parall-browser-pod.js +68 -1
- package/bundle/parall-claude-agent.js +74 -3
- package/bundle/parall-codex-agent.js +74 -3
- package/bundle/parall-daemon.js +93 -2
- package/package.json +6 -6
package/bundle/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
3
|
-
"built_at": "2026-08-
|
|
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": "
|
|
20
|
-
"size":
|
|
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": "
|
|
28
|
-
"size":
|
|
27
|
+
"sha256": "0955733acf00be0b690bb5c1b72f3bfd939d746b23a301c84272ba37e9b0834e",
|
|
28
|
+
"size": 2847527
|
|
29
29
|
},
|
|
30
30
|
"parall-codex-agent.js": {
|
|
31
|
-
"sha256": "
|
|
32
|
-
"size":
|
|
31
|
+
"sha256": "edd30679e40834d7af752650b250e44ad9476969de446b5fdfbdef46df366a77",
|
|
32
|
+
"size": 2879474
|
|
33
33
|
},
|
|
34
34
|
"parall-daemon.js": {
|
|
35
|
-
"sha256": "
|
|
36
|
-
"size":
|
|
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": "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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",
|
package/bundle/parall-daemon.js
CHANGED
|
@@ -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
|
-
|
|
1116
|
+
init_llm_provider_client();
|
|
1035
1117
|
COMPLETION_RETRY_DELAYS_MS = [250, 750];
|
|
1036
|
-
AttachmentClient = class extends
|
|
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.
|
|
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.
|
|
37
|
-
"@parall/
|
|
38
|
-
"@parall/
|
|
39
|
-
"@parall/
|
|
40
|
-
"@parall/
|
|
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",
|