@parall/daemon 1.53.0 → 1.54.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.
- package/bundle/manifest.json +11 -11
- package/bundle/parall-browser-pod.js +20 -2
- package/bundle/parall-claude-agent.js +62 -12
- package/bundle/parall-codex-agent.js +62 -12
- package/bundle/parall-daemon.js +20 -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.54.0",
|
|
3
|
+
"built_at": "2026-08-06T10:25:37.612Z",
|
|
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": "1fdbc5185fc1237a1037d9a1e95134a29313cdadc5b8fd2b52045a93caebe265",
|
|
20
|
+
"size": 2917480
|
|
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": "3872308f00bc9e0e57f00f65b528d5259736aa84af3ee1281c60be413b65d6f8",
|
|
28
|
+
"size": 2795199
|
|
29
29
|
},
|
|
30
30
|
"parall-codex-agent.js": {
|
|
31
|
-
"sha256": "
|
|
32
|
-
"size":
|
|
31
|
+
"sha256": "0c8d5d7d02a67183f9ec63ddb7b68ea77c807411e0b421394f71ee02cf90d218",
|
|
32
|
+
"size": 2825903
|
|
33
33
|
},
|
|
34
34
|
"parall-daemon.js": {
|
|
35
|
-
"sha256": "
|
|
36
|
-
"size":
|
|
35
|
+
"sha256": "e160bf95877db7628e7fc78d2c0e263f3221a7d7f51a53f1c5dd008e4920b382",
|
|
36
|
+
"size": 2979620
|
|
37
37
|
},
|
|
38
38
|
"parall-openclaw-agent.js": {
|
|
39
39
|
"sha256": "856a1c3a9ae0ffef8efe2481fa1171dbeb1d67cccb88616aa9bf16da96a69355",
|
|
40
40
|
"size": 9923
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"signature": "
|
|
43
|
+
"signature": "HsmD3HAuYZGhuFBt8M3hzMsL62hbiAN8oJ4+JX7uUm+/H4IbQJwF20/56hjuC5LIHlD8jVF80c+5fYqhjWm/Dg=="
|
|
44
44
|
}
|
|
@@ -63904,10 +63904,17 @@ var ENDPOINTS = {
|
|
|
63904
63904
|
// Per-org agent exec access for one clip (default all agents; PUT human-only)
|
|
63905
63905
|
ORG_CLIP_EXEC_ACCESS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clips/${clipId}/exec-access`,
|
|
63906
63906
|
// MCP clip server config (cap:clip-mcp; publisher-org only — cross-org gets
|
|
63907
|
-
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included)
|
|
63907
|
+
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included). The
|
|
63908
|
+
// singular family addresses the org's DEFAULT connection (pre-165
|
|
63909
|
+
// back-compat shim); the plural family is the multi-connection surface —
|
|
63910
|
+
// one config row (credential slot) per connection, addressed by config id.
|
|
63908
63911
|
ORG_CLIP_MCP_CONFIG: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config`,
|
|
63909
63912
|
ORG_CLIP_MCP_TOOLS_REFRESH: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/tools/refresh`,
|
|
63910
|
-
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect
|
|
63913
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect`,
|
|
63914
|
+
ORG_CLIP_MCP_CONFIGS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs`,
|
|
63915
|
+
ORG_CLIP_MCP_CONFIG_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}`,
|
|
63916
|
+
ORG_CLIP_MCP_TOOLS_REFRESH_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/tools/refresh`,
|
|
63917
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/oauth/disconnect`
|
|
63911
63918
|
};
|
|
63912
63919
|
|
|
63913
63920
|
// ts/sdk/dist/client.js
|
|
@@ -66114,6 +66121,17 @@ var ParallClient = class _ParallClient {
|
|
|
66114
66121
|
async deleteClipMCPConfig(orgId, clipId, expectedVersion) {
|
|
66115
66122
|
return this.request("DELETE", ENDPOINTS.ORG_CLIP_MCP_CONFIG(orgId, clipId), void 0, void 0, false, { headers: { "If-Match": `"${expectedVersion}"` } });
|
|
66116
66123
|
}
|
|
66124
|
+
/**
|
|
66125
|
+
* List the org's MCP connections for a clip, default first — one row per
|
|
66126
|
+
* connection (credential slot), WITHOUT the tools snapshot (`tool_count`
|
|
66127
|
+
* summarizes it; the per-config GET carries the full snapshot). Same
|
|
66128
|
+
* family-wide fence as the singular GET: publisher-org members only —
|
|
66129
|
+
* cross-org installs get `403 MCP_CROSS_ORG_DISABLED`, and with
|
|
66130
|
+
* `cap:clip-mcp` off the route is not registered at all.
|
|
66131
|
+
*/
|
|
66132
|
+
async listClipMCPConnections(orgId, clipId) {
|
|
66133
|
+
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
|
66134
|
+
}
|
|
66117
66135
|
/**
|
|
66118
66136
|
* Re-run tools/list and replace the cached snapshot (org-admin only).
|
|
66119
66137
|
* Deliberately does NOT advance the CAS version, so an in-flight edit in
|
|
@@ -51700,10 +51700,17 @@ var ENDPOINTS = {
|
|
|
51700
51700
|
// Per-org agent exec access for one clip (default all agents; PUT human-only)
|
|
51701
51701
|
ORG_CLIP_EXEC_ACCESS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clips/${clipId}/exec-access`,
|
|
51702
51702
|
// MCP clip server config (cap:clip-mcp; publisher-org only — cross-org gets
|
|
51703
|
-
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included)
|
|
51703
|
+
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included). The
|
|
51704
|
+
// singular family addresses the org's DEFAULT connection (pre-165
|
|
51705
|
+
// back-compat shim); the plural family is the multi-connection surface —
|
|
51706
|
+
// one config row (credential slot) per connection, addressed by config id.
|
|
51704
51707
|
ORG_CLIP_MCP_CONFIG: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config`,
|
|
51705
51708
|
ORG_CLIP_MCP_TOOLS_REFRESH: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/tools/refresh`,
|
|
51706
|
-
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect
|
|
51709
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect`,
|
|
51710
|
+
ORG_CLIP_MCP_CONFIGS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs`,
|
|
51711
|
+
ORG_CLIP_MCP_CONFIG_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}`,
|
|
51712
|
+
ORG_CLIP_MCP_TOOLS_REFRESH_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/tools/refresh`,
|
|
51713
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/oauth/disconnect`
|
|
51707
51714
|
};
|
|
51708
51715
|
var WS_EVENTS = {
|
|
51709
51716
|
// Client -> Server
|
|
@@ -53996,6 +54003,17 @@ var ParallClient = class _ParallClient {
|
|
|
53996
54003
|
async deleteClipMCPConfig(orgId, clipId, expectedVersion) {
|
|
53997
54004
|
return this.request("DELETE", ENDPOINTS.ORG_CLIP_MCP_CONFIG(orgId, clipId), void 0, void 0, false, { headers: { "If-Match": `"${expectedVersion}"` } });
|
|
53998
54005
|
}
|
|
54006
|
+
/**
|
|
54007
|
+
* List the org's MCP connections for a clip, default first — one row per
|
|
54008
|
+
* connection (credential slot), WITHOUT the tools snapshot (`tool_count`
|
|
54009
|
+
* summarizes it; the per-config GET carries the full snapshot). Same
|
|
54010
|
+
* family-wide fence as the singular GET: publisher-org members only —
|
|
54011
|
+
* cross-org installs get `403 MCP_CROSS_ORG_DISABLED`, and with
|
|
54012
|
+
* `cap:clip-mcp` off the route is not registered at all.
|
|
54013
|
+
*/
|
|
54014
|
+
async listClipMCPConnections(orgId, clipId) {
|
|
54015
|
+
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
|
54016
|
+
}
|
|
53999
54017
|
/**
|
|
54000
54018
|
* Re-run tools/list and replace the cached snapshot (org-admin only).
|
|
54001
54019
|
* Deliberately does NOT advance the CAS version, so an in-flight edit in
|
|
@@ -60492,16 +60510,23 @@ guessing which signed-in account you are about to act through.
|
|
|
60492
60510
|
\`\`\`bash
|
|
60493
60511
|
parall clip exec <clip> <command> [args] --connection <ccn_|alias> # the normal form
|
|
60494
60512
|
parall clip exec browser-tools screenshot '{"url":"\u2026"}' --connection cloud-main
|
|
60513
|
+
parall clip exec browser-tools scrape --args-file - --connection cloud-main <<'EOF'
|
|
60514
|
+
{"url":"https://example.com","fields":["title","price"]}
|
|
60515
|
+
EOF
|
|
60495
60516
|
\`\`\`
|
|
60496
60517
|
|
|
60497
60518
|
Build \`args\` as JSON per the command's params from \`clip info\` (or the
|
|
60498
60519
|
tool's \`inputSchema\` from \`clip tools\` for MCP clips \u2014 tool names are NOT
|
|
60499
60520
|
frozen in the manifest, so never guess a tool name or its argument shape).
|
|
60521
|
+
Quote-heavy or large JSON goes through \`--args-file <path>\` (\`-\` = stdin
|
|
60522
|
+
via a quoted heredoc, as above; strict JSON, mutually exclusive with the
|
|
60523
|
+
\`[args]\` positional) \u2014 the shell mangles inline quotes long before the CLI
|
|
60524
|
+
sees them, exactly the trap \`messages send --text-file\` exists for.
|
|
60500
60525
|
Results are JSON on stdout; failures print a typed error.
|
|
60501
60526
|
|
|
60502
|
-
**Name the target explicitly
|
|
60503
|
-
|
|
60504
|
-
|
|
60527
|
+
**Name the target explicitly \u2014 every exec.** \`clip exec\` refuses to run
|
|
60528
|
+
without \`--connection\` or \`--edge\`; there is no implicit route to any
|
|
60529
|
+
profile, and the legacy no-flag desktop fallback is gone from the CLI.
|
|
60505
60530
|
|
|
60506
60531
|
- A cloud (hosted) profile is reachable ONLY via \`--connection\` \u2014 the clip
|
|
60507
60532
|
connection its maintainer bound. That binding IS your authorization;
|
|
@@ -60519,21 +60544,39 @@ YOUR OWN online desktop device \u2014 never a shared cloud profile.
|
|
|
60519
60544
|
## MCP clips (remote tool servers)
|
|
60520
60545
|
|
|
60521
60546
|
A connection with target \`mcp\` routes to a remote MCP server; the command
|
|
60522
|
-
is an MCP tool name and the args are that tool's JSON arguments.
|
|
60523
|
-
|
|
60524
|
-
|
|
60547
|
+
is an MCP tool name and the args are that tool's JSON arguments. **An MCP
|
|
60548
|
+
clip can hold SEVERAL connections \u2014 one per account of the same service**
|
|
60549
|
+
(e.g. two Google Drive accounts), exactly like the browser arm's multiple
|
|
60550
|
+
profiles. The flow is: discover the connections, pick by alias, exec with the
|
|
60551
|
+
explicit target:
|
|
60525
60552
|
|
|
60526
60553
|
\`\`\`bash
|
|
60554
|
+
parall clip connections <clip> # per-connection auth status, alias, is_default
|
|
60555
|
+
parall clip tools <clip> --connection <ccn_|alias> # tools are PER CONNECTION
|
|
60527
60556
|
parall clip exec <clip> <tool> [json-args] --connection <ccn_|alias>
|
|
60528
60557
|
\`\`\`
|
|
60529
60558
|
|
|
60559
|
+
- \`clip connections\` marks MCP rows with their auth mode, \`credential_set\`
|
|
60560
|
+
/ \`oauth_status\` and \`tool_count\` \u2014 a \`needs_reauth\` or credential-less
|
|
60561
|
+
row will refuse exec until an org admin fixes it in the Clip Console.
|
|
60562
|
+
- \`--connection\` is REQUIRED to exec an MCP connection, exactly like a cloud
|
|
60563
|
+
profile \u2014 the only other target form, \`--edge\`, is a desktop device and
|
|
60564
|
+
never routes to MCP. The alias tells you WHICH account you act as \u2014
|
|
60565
|
+
always name it.
|
|
60566
|
+
(\`is_default\` marks the org's primary connection in listings and the
|
|
60567
|
+
Console, not an implicit exec route.)
|
|
60568
|
+
- \`clip tools\` without \`--connection\` reads the default connection's
|
|
60569
|
+
snapshot; with several connections and no default it asks you to name one.
|
|
60530
60570
|
- No cold start: MCP clips never return \`EDGE_ACTIVATING\`.
|
|
60531
60571
|
- \`MCP_TOOL_FAILED\` = the tool RAN and reported failure; a sanitized summary
|
|
60532
60572
|
of its output rides in the error details. Read it and decide \u2014 do not
|
|
60533
60573
|
blind-retry.
|
|
60534
60574
|
- \`MCP_CONCURRENCY_LIMIT\` = not started; back off briefly, then retry.
|
|
60535
|
-
- \`MCP_CONFIG_MISSING\` / \`MCP_DISABLED\` =
|
|
60536
|
-
is off for this deployment \u2014 ask an org admin; retrying won't help.
|
|
60575
|
+
- \`MCP_CONFIG_MISSING\` / \`MCP_DISABLED\` = that connection isn't configured,
|
|
60576
|
+
or MCP is off for this deployment \u2014 ask an org admin; retrying won't help.
|
|
60577
|
+
- \`MCP_OAUTH_REAUTH_REQUIRED\` = that connection's authorization expired or
|
|
60578
|
+
was disconnected \u2014 ask an org admin to re-authorize it in the Clip Console
|
|
60579
|
+
(name the connection's alias); retrying won't help.
|
|
60537
60580
|
- \`OUTCOME_UNKNOWN\` follows the rule below: dispatched and MAY HAVE
|
|
60538
60581
|
EXECUTED \u2014 never auto-retry.
|
|
60539
60582
|
|
|
@@ -60805,8 +60848,15 @@ and the folder is just a manifest:
|
|
|
60805
60848
|
republishing.
|
|
60806
60849
|
- Entering the credential / completing OAuth is a HUMAN step in the Clip
|
|
60807
60850
|
Console (the config-write endpoints are session-only \u2014 an API key cannot
|
|
60808
|
-
call them).
|
|
60809
|
-
|
|
60851
|
+
call them). An org can add SEVERAL connections to one MCP clip \u2014 one
|
|
60852
|
+
credential slot per account of the same service \u2014 all sharing the declared
|
|
60853
|
+
\`server_url\`/\`auth\`. Once configured, discover the live tool schemas with
|
|
60854
|
+
\`parall clip tools <clip> [--connection <ref>]\` and exec like any other
|
|
60855
|
+
clip (\`--connection\` picks the account).
|
|
60856
|
+
- Do NOT declare anything about OAuth client registration in the manifest \u2014
|
|
60857
|
+
there is no such field. Whether the provider needs a manually registered
|
|
60858
|
+
OAuth app (Google-style) is probed by the server at connect time; the
|
|
60859
|
+
Console walks the admin through it when required.
|
|
60810
60860
|
- Publish is the same command: \`parall clip publish ./my-clip/\`.
|
|
60811
60861
|
|
|
60812
60862
|
## Cloud (hosted) vs desktop (BYOC) Edge
|
|
@@ -51700,10 +51700,17 @@ var ENDPOINTS = {
|
|
|
51700
51700
|
// Per-org agent exec access for one clip (default all agents; PUT human-only)
|
|
51701
51701
|
ORG_CLIP_EXEC_ACCESS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clips/${clipId}/exec-access`,
|
|
51702
51702
|
// MCP clip server config (cap:clip-mcp; publisher-org only — cross-org gets
|
|
51703
|
-
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included)
|
|
51703
|
+
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included). The
|
|
51704
|
+
// singular family addresses the org's DEFAULT connection (pre-165
|
|
51705
|
+
// back-compat shim); the plural family is the multi-connection surface —
|
|
51706
|
+
// one config row (credential slot) per connection, addressed by config id.
|
|
51704
51707
|
ORG_CLIP_MCP_CONFIG: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config`,
|
|
51705
51708
|
ORG_CLIP_MCP_TOOLS_REFRESH: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/tools/refresh`,
|
|
51706
|
-
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect
|
|
51709
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect`,
|
|
51710
|
+
ORG_CLIP_MCP_CONFIGS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs`,
|
|
51711
|
+
ORG_CLIP_MCP_CONFIG_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}`,
|
|
51712
|
+
ORG_CLIP_MCP_TOOLS_REFRESH_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/tools/refresh`,
|
|
51713
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/oauth/disconnect`
|
|
51707
51714
|
};
|
|
51708
51715
|
var WS_EVENTS = {
|
|
51709
51716
|
// Client -> Server
|
|
@@ -53996,6 +54003,17 @@ var ParallClient = class _ParallClient {
|
|
|
53996
54003
|
async deleteClipMCPConfig(orgId, clipId, expectedVersion) {
|
|
53997
54004
|
return this.request("DELETE", ENDPOINTS.ORG_CLIP_MCP_CONFIG(orgId, clipId), void 0, void 0, false, { headers: { "If-Match": `"${expectedVersion}"` } });
|
|
53998
54005
|
}
|
|
54006
|
+
/**
|
|
54007
|
+
* List the org's MCP connections for a clip, default first — one row per
|
|
54008
|
+
* connection (credential slot), WITHOUT the tools snapshot (`tool_count`
|
|
54009
|
+
* summarizes it; the per-config GET carries the full snapshot). Same
|
|
54010
|
+
* family-wide fence as the singular GET: publisher-org members only —
|
|
54011
|
+
* cross-org installs get `403 MCP_CROSS_ORG_DISABLED`, and with
|
|
54012
|
+
* `cap:clip-mcp` off the route is not registered at all.
|
|
54013
|
+
*/
|
|
54014
|
+
async listClipMCPConnections(orgId, clipId) {
|
|
54015
|
+
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
|
54016
|
+
}
|
|
53999
54017
|
/**
|
|
54000
54018
|
* Re-run tools/list and replace the cached snapshot (org-admin only).
|
|
54001
54019
|
* Deliberately does NOT advance the CAS version, so an in-flight edit in
|
|
@@ -60492,16 +60510,23 @@ guessing which signed-in account you are about to act through.
|
|
|
60492
60510
|
\`\`\`bash
|
|
60493
60511
|
parall clip exec <clip> <command> [args] --connection <ccn_|alias> # the normal form
|
|
60494
60512
|
parall clip exec browser-tools screenshot '{"url":"\u2026"}' --connection cloud-main
|
|
60513
|
+
parall clip exec browser-tools scrape --args-file - --connection cloud-main <<'EOF'
|
|
60514
|
+
{"url":"https://example.com","fields":["title","price"]}
|
|
60515
|
+
EOF
|
|
60495
60516
|
\`\`\`
|
|
60496
60517
|
|
|
60497
60518
|
Build \`args\` as JSON per the command's params from \`clip info\` (or the
|
|
60498
60519
|
tool's \`inputSchema\` from \`clip tools\` for MCP clips \u2014 tool names are NOT
|
|
60499
60520
|
frozen in the manifest, so never guess a tool name or its argument shape).
|
|
60521
|
+
Quote-heavy or large JSON goes through \`--args-file <path>\` (\`-\` = stdin
|
|
60522
|
+
via a quoted heredoc, as above; strict JSON, mutually exclusive with the
|
|
60523
|
+
\`[args]\` positional) \u2014 the shell mangles inline quotes long before the CLI
|
|
60524
|
+
sees them, exactly the trap \`messages send --text-file\` exists for.
|
|
60500
60525
|
Results are JSON on stdout; failures print a typed error.
|
|
60501
60526
|
|
|
60502
|
-
**Name the target explicitly
|
|
60503
|
-
|
|
60504
|
-
|
|
60527
|
+
**Name the target explicitly \u2014 every exec.** \`clip exec\` refuses to run
|
|
60528
|
+
without \`--connection\` or \`--edge\`; there is no implicit route to any
|
|
60529
|
+
profile, and the legacy no-flag desktop fallback is gone from the CLI.
|
|
60505
60530
|
|
|
60506
60531
|
- A cloud (hosted) profile is reachable ONLY via \`--connection\` \u2014 the clip
|
|
60507
60532
|
connection its maintainer bound. That binding IS your authorization;
|
|
@@ -60519,21 +60544,39 @@ YOUR OWN online desktop device \u2014 never a shared cloud profile.
|
|
|
60519
60544
|
## MCP clips (remote tool servers)
|
|
60520
60545
|
|
|
60521
60546
|
A connection with target \`mcp\` routes to a remote MCP server; the command
|
|
60522
|
-
is an MCP tool name and the args are that tool's JSON arguments.
|
|
60523
|
-
|
|
60524
|
-
|
|
60547
|
+
is an MCP tool name and the args are that tool's JSON arguments. **An MCP
|
|
60548
|
+
clip can hold SEVERAL connections \u2014 one per account of the same service**
|
|
60549
|
+
(e.g. two Google Drive accounts), exactly like the browser arm's multiple
|
|
60550
|
+
profiles. The flow is: discover the connections, pick by alias, exec with the
|
|
60551
|
+
explicit target:
|
|
60525
60552
|
|
|
60526
60553
|
\`\`\`bash
|
|
60554
|
+
parall clip connections <clip> # per-connection auth status, alias, is_default
|
|
60555
|
+
parall clip tools <clip> --connection <ccn_|alias> # tools are PER CONNECTION
|
|
60527
60556
|
parall clip exec <clip> <tool> [json-args] --connection <ccn_|alias>
|
|
60528
60557
|
\`\`\`
|
|
60529
60558
|
|
|
60559
|
+
- \`clip connections\` marks MCP rows with their auth mode, \`credential_set\`
|
|
60560
|
+
/ \`oauth_status\` and \`tool_count\` \u2014 a \`needs_reauth\` or credential-less
|
|
60561
|
+
row will refuse exec until an org admin fixes it in the Clip Console.
|
|
60562
|
+
- \`--connection\` is REQUIRED to exec an MCP connection, exactly like a cloud
|
|
60563
|
+
profile \u2014 the only other target form, \`--edge\`, is a desktop device and
|
|
60564
|
+
never routes to MCP. The alias tells you WHICH account you act as \u2014
|
|
60565
|
+
always name it.
|
|
60566
|
+
(\`is_default\` marks the org's primary connection in listings and the
|
|
60567
|
+
Console, not an implicit exec route.)
|
|
60568
|
+
- \`clip tools\` without \`--connection\` reads the default connection's
|
|
60569
|
+
snapshot; with several connections and no default it asks you to name one.
|
|
60530
60570
|
- No cold start: MCP clips never return \`EDGE_ACTIVATING\`.
|
|
60531
60571
|
- \`MCP_TOOL_FAILED\` = the tool RAN and reported failure; a sanitized summary
|
|
60532
60572
|
of its output rides in the error details. Read it and decide \u2014 do not
|
|
60533
60573
|
blind-retry.
|
|
60534
60574
|
- \`MCP_CONCURRENCY_LIMIT\` = not started; back off briefly, then retry.
|
|
60535
|
-
- \`MCP_CONFIG_MISSING\` / \`MCP_DISABLED\` =
|
|
60536
|
-
is off for this deployment \u2014 ask an org admin; retrying won't help.
|
|
60575
|
+
- \`MCP_CONFIG_MISSING\` / \`MCP_DISABLED\` = that connection isn't configured,
|
|
60576
|
+
or MCP is off for this deployment \u2014 ask an org admin; retrying won't help.
|
|
60577
|
+
- \`MCP_OAUTH_REAUTH_REQUIRED\` = that connection's authorization expired or
|
|
60578
|
+
was disconnected \u2014 ask an org admin to re-authorize it in the Clip Console
|
|
60579
|
+
(name the connection's alias); retrying won't help.
|
|
60537
60580
|
- \`OUTCOME_UNKNOWN\` follows the rule below: dispatched and MAY HAVE
|
|
60538
60581
|
EXECUTED \u2014 never auto-retry.
|
|
60539
60582
|
|
|
@@ -60805,8 +60848,15 @@ and the folder is just a manifest:
|
|
|
60805
60848
|
republishing.
|
|
60806
60849
|
- Entering the credential / completing OAuth is a HUMAN step in the Clip
|
|
60807
60850
|
Console (the config-write endpoints are session-only \u2014 an API key cannot
|
|
60808
|
-
call them).
|
|
60809
|
-
|
|
60851
|
+
call them). An org can add SEVERAL connections to one MCP clip \u2014 one
|
|
60852
|
+
credential slot per account of the same service \u2014 all sharing the declared
|
|
60853
|
+
\`server_url\`/\`auth\`. Once configured, discover the live tool schemas with
|
|
60854
|
+
\`parall clip tools <clip> [--connection <ref>]\` and exec like any other
|
|
60855
|
+
clip (\`--connection\` picks the account).
|
|
60856
|
+
- Do NOT declare anything about OAuth client registration in the manifest \u2014
|
|
60857
|
+
there is no such field. Whether the provider needs a manually registered
|
|
60858
|
+
OAuth app (Google-style) is probed by the server at connect time; the
|
|
60859
|
+
Console walks the admin through it when required.
|
|
60810
60860
|
- Publish is the same command: \`parall clip publish ./my-clip/\`.
|
|
60811
60861
|
|
|
60812
60862
|
## Cloud (hosted) vs desktop (BYOC) Edge
|
package/bundle/parall-daemon.js
CHANGED
|
@@ -542,10 +542,17 @@ var init_constants = __esm({
|
|
|
542
542
|
// Per-org agent exec access for one clip (default all agents; PUT human-only)
|
|
543
543
|
ORG_CLIP_EXEC_ACCESS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clips/${clipId}/exec-access`,
|
|
544
544
|
// MCP clip server config (cap:clip-mcp; publisher-org only — cross-org gets
|
|
545
|
-
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included)
|
|
545
|
+
// 403 MCP_CROSS_ORG_DISABLED on the whole family, reads included). The
|
|
546
|
+
// singular family addresses the org's DEFAULT connection (pre-165
|
|
547
|
+
// back-compat shim); the plural family is the multi-connection surface —
|
|
548
|
+
// one config row (credential slot) per connection, addressed by config id.
|
|
546
549
|
ORG_CLIP_MCP_CONFIG: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config`,
|
|
547
550
|
ORG_CLIP_MCP_TOOLS_REFRESH: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/tools/refresh`,
|
|
548
|
-
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect
|
|
551
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-config/oauth/disconnect`,
|
|
552
|
+
ORG_CLIP_MCP_CONFIGS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs`,
|
|
553
|
+
ORG_CLIP_MCP_CONFIG_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}`,
|
|
554
|
+
ORG_CLIP_MCP_TOOLS_REFRESH_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/tools/refresh`,
|
|
555
|
+
ORG_CLIP_MCP_OAUTH_DISCONNECT_BY_ID: (orgId, clipId, configId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/mcp-configs/${configId}/oauth/disconnect`
|
|
549
556
|
};
|
|
550
557
|
WS_EVENTS = {
|
|
551
558
|
// Client -> Server
|
|
@@ -2883,6 +2890,17 @@ var init_client = __esm({
|
|
|
2883
2890
|
async deleteClipMCPConfig(orgId, clipId, expectedVersion) {
|
|
2884
2891
|
return this.request("DELETE", ENDPOINTS.ORG_CLIP_MCP_CONFIG(orgId, clipId), void 0, void 0, false, { headers: { "If-Match": `"${expectedVersion}"` } });
|
|
2885
2892
|
}
|
|
2893
|
+
/**
|
|
2894
|
+
* List the org's MCP connections for a clip, default first — one row per
|
|
2895
|
+
* connection (credential slot), WITHOUT the tools snapshot (`tool_count`
|
|
2896
|
+
* summarizes it; the per-config GET carries the full snapshot). Same
|
|
2897
|
+
* family-wide fence as the singular GET: publisher-org members only —
|
|
2898
|
+
* cross-org installs get `403 MCP_CROSS_ORG_DISABLED`, and with
|
|
2899
|
+
* `cap:clip-mcp` off the route is not registered at all.
|
|
2900
|
+
*/
|
|
2901
|
+
async listClipMCPConnections(orgId, clipId) {
|
|
2902
|
+
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
|
2903
|
+
}
|
|
2886
2904
|
/**
|
|
2887
2905
|
* Re-run tools/list and replace the cached snapshot (org-admin only).
|
|
2888
2906
|
* Deliberately does NOT advance the CAS version, so an in-flight edit in
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parall/daemon",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.54.0",
|
|
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.54.0",
|
|
37
|
+
"@parall/codex-agent": "1.54.0",
|
|
38
|
+
"@parall/openclaw-agent": "1.54.0",
|
|
39
|
+
"@parall/sdk": "1.54.0",
|
|
40
|
+
"@parall/claude-agent": "1.54.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "^22.0.0",
|