@parall/daemon 1.58.1 → 1.58.2
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 +2 -1
- package/bundle/parall-claude-agent.js +2 -1
- package/bundle/parall-codex-agent.js +153 -127
- package/bundle/parall-daemon.js +2 -1
- package/package.json +6 -6
package/bundle/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.58.
|
|
3
|
-
"built_at": "2026-08-
|
|
2
|
+
"version": "1.58.2",
|
|
3
|
+
"built_at": "2026-08-31T17:39:36.772Z",
|
|
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": "4841b686837495489d1834d25f14fca452daaed9be52ddb4692b302ce2c6d3bc",
|
|
20
|
+
"size": 2972260
|
|
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": "5f59e7dcaca4767befb052001114875411b8e930dfe567eafbced3a78b359985",
|
|
28
|
+
"size": 2815668
|
|
29
29
|
},
|
|
30
30
|
"parall-codex-agent.js": {
|
|
31
|
-
"sha256": "
|
|
32
|
-
"size":
|
|
31
|
+
"sha256": "2a99b85b443e81863cc418a572c35bbad9660868828b634a1a00a87c8840ea8a",
|
|
32
|
+
"size": 2845907
|
|
33
33
|
},
|
|
34
34
|
"parall-daemon.js": {
|
|
35
|
-
"sha256": "
|
|
36
|
-
"size":
|
|
35
|
+
"sha256": "e2c686bde1bc01107de15c4e970ab85160f9262878ab4b034ff1f4dff4ea15a6",
|
|
36
|
+
"size": 3041257
|
|
37
37
|
},
|
|
38
38
|
"parall-openclaw-agent.js": {
|
|
39
39
|
"sha256": "856a1c3a9ae0ffef8efe2481fa1171dbeb1d67cccb88616aa9bf16da96a69355",
|
|
40
40
|
"size": 9923
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"signature": "
|
|
43
|
+
"signature": "aVhILaJo6FTemM7X/iQDr+yuH8gtE/p5B070rqImrvaqz5fnMg9HlHz5h7MsbCtc8zndR68VOBR+rxksbF+GAg=="
|
|
44
44
|
}
|
|
@@ -66909,7 +66909,8 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
66909
66909
|
* `404 NOT_FOUND`. An installed cross-org clip with no connection yet lists
|
|
66910
66910
|
* as an empty array — including one whose approved auth mode cannot be
|
|
66911
66911
|
* configured at all (auth=none), which the write path is what refuses. With
|
|
66912
|
-
* `cap:clip-mcp` off the route is not registered at all.
|
|
66912
|
+
* `cap:clip-mcp` off the route is not registered at all. The envelope also
|
|
66913
|
+
* carries `official_oauth_ready` (see MCPConnectionListResponse).
|
|
66913
66914
|
*/
|
|
66914
66915
|
async listClipMCPConnections(orgId, clipId) {
|
|
66915
66916
|
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
|
@@ -55008,7 +55008,8 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
55008
55008
|
* `404 NOT_FOUND`. An installed cross-org clip with no connection yet lists
|
|
55009
55009
|
* as an empty array — including one whose approved auth mode cannot be
|
|
55010
55010
|
* configured at all (auth=none), which the write path is what refuses. With
|
|
55011
|
-
* `cap:clip-mcp` off the route is not registered at all.
|
|
55011
|
+
* `cap:clip-mcp` off the route is not registered at all. The envelope also
|
|
55012
|
+
* carries `official_oauth_ready` (see MCPConnectionListResponse).
|
|
55012
55013
|
*/
|
|
55013
55014
|
async listClipMCPConnections(orgId, clipId) {
|
|
55014
55015
|
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
|
@@ -17719,9 +17719,9 @@ var require_getMachineId_linux = __commonJS({
|
|
|
17719
17719
|
var api_1 = (init_esm(), __toCommonJS(esm_exports));
|
|
17720
17720
|
async function getMachineId() {
|
|
17721
17721
|
const paths = ["/etc/machine-id", "/var/lib/dbus/machine-id"];
|
|
17722
|
-
for (const
|
|
17722
|
+
for (const path13 of paths) {
|
|
17723
17723
|
try {
|
|
17724
|
-
const result = await fs_1.promises.readFile(
|
|
17724
|
+
const result = await fs_1.promises.readFile(path13, { encoding: "utf8" });
|
|
17725
17725
|
return result.trim();
|
|
17726
17726
|
} catch (e) {
|
|
17727
17727
|
api_1.diag.debug(`error reading machine id: ${e}`);
|
|
@@ -21124,7 +21124,7 @@ function appendRootPathToUrlIfNeeded(url) {
|
|
|
21124
21124
|
return void 0;
|
|
21125
21125
|
}
|
|
21126
21126
|
}
|
|
21127
|
-
function appendResourcePathToUrl(url,
|
|
21127
|
+
function appendResourcePathToUrl(url, path13) {
|
|
21128
21128
|
try {
|
|
21129
21129
|
new URL(url);
|
|
21130
21130
|
} catch (_a) {
|
|
@@ -21134,11 +21134,11 @@ function appendResourcePathToUrl(url, path12) {
|
|
|
21134
21134
|
if (!url.endsWith("/")) {
|
|
21135
21135
|
url = url + "/";
|
|
21136
21136
|
}
|
|
21137
|
-
url +=
|
|
21137
|
+
url += path13;
|
|
21138
21138
|
try {
|
|
21139
21139
|
new URL(url);
|
|
21140
21140
|
} catch (_b) {
|
|
21141
|
-
diag2.warn("Configuration: Provided URL appended with '" +
|
|
21141
|
+
diag2.warn("Configuration: Provided URL appended with '" + path13 + "' is not a valid URL, using 'undefined' instead of '" + url + "'");
|
|
21142
21142
|
return void 0;
|
|
21143
21143
|
}
|
|
21144
21144
|
return url;
|
|
@@ -27549,14 +27549,14 @@ var require_util2 = __commonJS({
|
|
|
27549
27549
|
}
|
|
27550
27550
|
const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80;
|
|
27551
27551
|
let origin = url.origin != null ? url.origin : `${url.protocol || ""}//${url.hostname || ""}:${port}`;
|
|
27552
|
-
let
|
|
27552
|
+
let path13 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`;
|
|
27553
27553
|
if (origin[origin.length - 1] === "/") {
|
|
27554
27554
|
origin = origin.slice(0, origin.length - 1);
|
|
27555
27555
|
}
|
|
27556
|
-
if (
|
|
27557
|
-
|
|
27556
|
+
if (path13 && path13[0] !== "/") {
|
|
27557
|
+
path13 = `/${path13}`;
|
|
27558
27558
|
}
|
|
27559
|
-
return new URL(`${origin}${
|
|
27559
|
+
return new URL(`${origin}${path13}`);
|
|
27560
27560
|
}
|
|
27561
27561
|
if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {
|
|
27562
27562
|
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
|
|
@@ -28377,9 +28377,9 @@ var require_diagnostics = __commonJS({
|
|
|
28377
28377
|
"undici:client:sendHeaders",
|
|
28378
28378
|
(evt) => {
|
|
28379
28379
|
const {
|
|
28380
|
-
request: { method, path:
|
|
28380
|
+
request: { method, path: path13, origin }
|
|
28381
28381
|
} = evt;
|
|
28382
|
-
debugLog("sending request to %s %s%s", method, origin,
|
|
28382
|
+
debugLog("sending request to %s %s%s", method, origin, path13);
|
|
28383
28383
|
}
|
|
28384
28384
|
);
|
|
28385
28385
|
}
|
|
@@ -28397,14 +28397,14 @@ var require_diagnostics = __commonJS({
|
|
|
28397
28397
|
"undici:request:headers",
|
|
28398
28398
|
(evt) => {
|
|
28399
28399
|
const {
|
|
28400
|
-
request: { method, path:
|
|
28400
|
+
request: { method, path: path13, origin },
|
|
28401
28401
|
response: { statusCode }
|
|
28402
28402
|
} = evt;
|
|
28403
28403
|
debugLog(
|
|
28404
28404
|
"received response to %s %s%s - HTTP %d",
|
|
28405
28405
|
method,
|
|
28406
28406
|
origin,
|
|
28407
|
-
|
|
28407
|
+
path13,
|
|
28408
28408
|
statusCode
|
|
28409
28409
|
);
|
|
28410
28410
|
}
|
|
@@ -28413,23 +28413,23 @@ var require_diagnostics = __commonJS({
|
|
|
28413
28413
|
"undici:request:trailers",
|
|
28414
28414
|
(evt) => {
|
|
28415
28415
|
const {
|
|
28416
|
-
request: { method, path:
|
|
28416
|
+
request: { method, path: path13, origin }
|
|
28417
28417
|
} = evt;
|
|
28418
|
-
debugLog("trailers received from %s %s%s", method, origin,
|
|
28418
|
+
debugLog("trailers received from %s %s%s", method, origin, path13);
|
|
28419
28419
|
}
|
|
28420
28420
|
);
|
|
28421
28421
|
diagnosticsChannel.subscribe(
|
|
28422
28422
|
"undici:request:error",
|
|
28423
28423
|
(evt) => {
|
|
28424
28424
|
const {
|
|
28425
|
-
request: { method, path:
|
|
28425
|
+
request: { method, path: path13, origin },
|
|
28426
28426
|
error
|
|
28427
28427
|
} = evt;
|
|
28428
28428
|
debugLog(
|
|
28429
28429
|
"request to %s %s%s errored - %s",
|
|
28430
28430
|
method,
|
|
28431
28431
|
origin,
|
|
28432
|
-
|
|
28432
|
+
path13,
|
|
28433
28433
|
error.message
|
|
28434
28434
|
);
|
|
28435
28435
|
}
|
|
@@ -28532,7 +28532,7 @@ var require_request = __commonJS({
|
|
|
28532
28532
|
var kHandler = Symbol("handler");
|
|
28533
28533
|
var Request = class {
|
|
28534
28534
|
constructor(origin, {
|
|
28535
|
-
path:
|
|
28535
|
+
path: path13,
|
|
28536
28536
|
method,
|
|
28537
28537
|
body,
|
|
28538
28538
|
headers,
|
|
@@ -28549,11 +28549,11 @@ var require_request = __commonJS({
|
|
|
28549
28549
|
maxRedirections,
|
|
28550
28550
|
typeOfService
|
|
28551
28551
|
}, handler) {
|
|
28552
|
-
if (typeof
|
|
28552
|
+
if (typeof path13 !== "string") {
|
|
28553
28553
|
throw new InvalidArgumentError("path must be a string");
|
|
28554
|
-
} else if (
|
|
28554
|
+
} else if (path13[0] !== "/" && !(path13.startsWith("http://") || path13.startsWith("https://")) && method !== "CONNECT") {
|
|
28555
28555
|
throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
|
|
28556
|
-
} else if (invalidPathRegex.test(
|
|
28556
|
+
} else if (invalidPathRegex.test(path13)) {
|
|
28557
28557
|
throw new InvalidArgumentError("invalid request path");
|
|
28558
28558
|
}
|
|
28559
28559
|
if (typeof method !== "string") {
|
|
@@ -28628,7 +28628,7 @@ var require_request = __commonJS({
|
|
|
28628
28628
|
this.completed = false;
|
|
28629
28629
|
this.aborted = false;
|
|
28630
28630
|
this.upgrade = upgrade || null;
|
|
28631
|
-
this.path = query ? serializePathWithQuery(
|
|
28631
|
+
this.path = query ? serializePathWithQuery(path13, query) : path13;
|
|
28632
28632
|
this.origin = origin;
|
|
28633
28633
|
this.protocol = getProtocolFromUrlString(origin);
|
|
28634
28634
|
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
|
|
@@ -33667,7 +33667,7 @@ var require_client_h1 = __commonJS({
|
|
|
33667
33667
|
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
|
33668
33668
|
}
|
|
33669
33669
|
function writeH1(client, request3) {
|
|
33670
|
-
const { method, path:
|
|
33670
|
+
const { method, path: path13, host, upgrade, blocking, reset } = request3;
|
|
33671
33671
|
let { body, headers, contentLength } = request3;
|
|
33672
33672
|
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH";
|
|
33673
33673
|
if (util.isFormDataLike(body)) {
|
|
@@ -33736,7 +33736,7 @@ var require_client_h1 = __commonJS({
|
|
|
33736
33736
|
if (socket.setTypeOfService) {
|
|
33737
33737
|
socket.setTypeOfService(request3.typeOfService);
|
|
33738
33738
|
}
|
|
33739
|
-
let header = `${method} ${
|
|
33739
|
+
let header = `${method} ${path13} HTTP/1.1\r
|
|
33740
33740
|
`;
|
|
33741
33741
|
if (typeof host === "string") {
|
|
33742
33742
|
header += `host: ${host}\r
|
|
@@ -34389,7 +34389,7 @@ var require_client_h2 = __commonJS({
|
|
|
34389
34389
|
function writeH2(client, request3) {
|
|
34390
34390
|
const requestTimeout = request3.bodyTimeout ?? client[kBodyTimeout];
|
|
34391
34391
|
const session = client[kHTTP2Session];
|
|
34392
|
-
const { method, path:
|
|
34392
|
+
const { method, path: path13, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request3;
|
|
34393
34393
|
let { body } = request3;
|
|
34394
34394
|
if (upgrade != null && upgrade !== "websocket") {
|
|
34395
34395
|
util.errorRequest(client, request3, new InvalidArgumentError(`Custom upgrade "${upgrade}" not supported over HTTP/2`));
|
|
@@ -34457,7 +34457,7 @@ var require_client_h2 = __commonJS({
|
|
|
34457
34457
|
}
|
|
34458
34458
|
headers[HTTP2_HEADER_METHOD] = "CONNECT";
|
|
34459
34459
|
headers[HTTP2_HEADER_PROTOCOL] = "websocket";
|
|
34460
|
-
headers[HTTP2_HEADER_PATH] =
|
|
34460
|
+
headers[HTTP2_HEADER_PATH] = path13;
|
|
34461
34461
|
if (protocol === "ws:" || protocol === "wss:") {
|
|
34462
34462
|
headers[HTTP2_HEADER_SCHEME] = protocol === "ws:" ? "http" : "https";
|
|
34463
34463
|
} else {
|
|
@@ -34498,7 +34498,7 @@ var require_client_h2 = __commonJS({
|
|
|
34498
34498
|
stream.setTimeout(requestTimeout);
|
|
34499
34499
|
return true;
|
|
34500
34500
|
}
|
|
34501
|
-
headers[HTTP2_HEADER_PATH] =
|
|
34501
|
+
headers[HTTP2_HEADER_PATH] = path13;
|
|
34502
34502
|
headers[HTTP2_HEADER_SCHEME] = protocol === "http:" ? "http" : "https";
|
|
34503
34503
|
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
|
|
34504
34504
|
if (body && typeof body.read === "function") {
|
|
@@ -36800,10 +36800,10 @@ var require_proxy_agent = __commonJS({
|
|
|
36800
36800
|
};
|
|
36801
36801
|
const {
|
|
36802
36802
|
origin,
|
|
36803
|
-
path:
|
|
36803
|
+
path: path13 = "/",
|
|
36804
36804
|
headers = {}
|
|
36805
36805
|
} = opts;
|
|
36806
|
-
opts.path = origin +
|
|
36806
|
+
opts.path = origin + path13;
|
|
36807
36807
|
if (!("host" in headers) && !("Host" in headers)) {
|
|
36808
36808
|
const { host } = new URL(origin);
|
|
36809
36809
|
headers.host = host;
|
|
@@ -38866,20 +38866,20 @@ var require_mock_utils = __commonJS({
|
|
|
38866
38866
|
}
|
|
38867
38867
|
return normalizedQp;
|
|
38868
38868
|
}
|
|
38869
|
-
function safeUrl(
|
|
38870
|
-
if (typeof
|
|
38871
|
-
return
|
|
38869
|
+
function safeUrl(path13) {
|
|
38870
|
+
if (typeof path13 !== "string") {
|
|
38871
|
+
return path13;
|
|
38872
38872
|
}
|
|
38873
|
-
const pathSegments =
|
|
38873
|
+
const pathSegments = path13.split("?", 3);
|
|
38874
38874
|
if (pathSegments.length !== 2) {
|
|
38875
|
-
return
|
|
38875
|
+
return path13;
|
|
38876
38876
|
}
|
|
38877
38877
|
const qp = new URLSearchParams(pathSegments.pop());
|
|
38878
38878
|
qp.sort();
|
|
38879
38879
|
return [...pathSegments, qp.toString()].join("?");
|
|
38880
38880
|
}
|
|
38881
|
-
function matchKey(mockDispatch2, { path:
|
|
38882
|
-
const pathMatch = matchValue(mockDispatch2.path,
|
|
38881
|
+
function matchKey(mockDispatch2, { path: path13, method, body, headers }) {
|
|
38882
|
+
const pathMatch = matchValue(mockDispatch2.path, path13);
|
|
38883
38883
|
const methodMatch = matchValue(mockDispatch2.method, method);
|
|
38884
38884
|
const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true;
|
|
38885
38885
|
const headersMatch = matchHeaders(mockDispatch2, headers);
|
|
@@ -38904,8 +38904,8 @@ var require_mock_utils = __commonJS({
|
|
|
38904
38904
|
const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path;
|
|
38905
38905
|
const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath;
|
|
38906
38906
|
const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath);
|
|
38907
|
-
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path:
|
|
38908
|
-
return ignoreTrailingSlash ? matchValue(removeTrailingSlash(safeUrl(
|
|
38907
|
+
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path13, ignoreTrailingSlash }) => {
|
|
38908
|
+
return ignoreTrailingSlash ? matchValue(removeTrailingSlash(safeUrl(path13)), resolvedPathWithoutTrailingSlash) : matchValue(safeUrl(path13), resolvedPath);
|
|
38909
38909
|
});
|
|
38910
38910
|
if (matchedMockDispatches.length === 0) {
|
|
38911
38911
|
throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`);
|
|
@@ -38944,19 +38944,19 @@ var require_mock_utils = __commonJS({
|
|
|
38944
38944
|
mockDispatches.splice(index, 1);
|
|
38945
38945
|
}
|
|
38946
38946
|
}
|
|
38947
|
-
function removeTrailingSlash(
|
|
38948
|
-
while (
|
|
38949
|
-
|
|
38947
|
+
function removeTrailingSlash(path13) {
|
|
38948
|
+
while (path13.endsWith("/")) {
|
|
38949
|
+
path13 = path13.slice(0, -1);
|
|
38950
38950
|
}
|
|
38951
|
-
if (
|
|
38952
|
-
|
|
38951
|
+
if (path13.length === 0) {
|
|
38952
|
+
path13 = "/";
|
|
38953
38953
|
}
|
|
38954
|
-
return
|
|
38954
|
+
return path13;
|
|
38955
38955
|
}
|
|
38956
38956
|
function buildKey(opts) {
|
|
38957
|
-
const { path:
|
|
38957
|
+
const { path: path13, method, body, headers, query } = opts;
|
|
38958
38958
|
return {
|
|
38959
|
-
path:
|
|
38959
|
+
path: path13,
|
|
38960
38960
|
method,
|
|
38961
38961
|
body,
|
|
38962
38962
|
headers,
|
|
@@ -39646,10 +39646,10 @@ var require_pending_interceptors_formatter = __commonJS({
|
|
|
39646
39646
|
}
|
|
39647
39647
|
format(pendingInterceptors) {
|
|
39648
39648
|
const withPrettyHeaders = pendingInterceptors.map(
|
|
39649
|
-
({ method, path:
|
|
39649
|
+
({ method, path: path13, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
|
39650
39650
|
Method: method,
|
|
39651
39651
|
Origin: origin,
|
|
39652
|
-
Path:
|
|
39652
|
+
Path: path13,
|
|
39653
39653
|
"Status code": statusCode,
|
|
39654
39654
|
Persistent: persist ? PERSISTENT : NOT_PERSISTENT,
|
|
39655
39655
|
Invocations: timesInvoked,
|
|
@@ -39731,9 +39731,9 @@ var require_mock_agent = __commonJS({
|
|
|
39731
39731
|
const acceptNonStandardSearchParameters = this[kMockAgentAcceptsNonStandardSearchParameters];
|
|
39732
39732
|
const dispatchOpts = { ...opts };
|
|
39733
39733
|
if (acceptNonStandardSearchParameters && dispatchOpts.path) {
|
|
39734
|
-
const [
|
|
39734
|
+
const [path13, searchParams] = dispatchOpts.path.split("?");
|
|
39735
39735
|
const normalizedSearchParams = normalizeSearchParams(searchParams, acceptNonStandardSearchParameters);
|
|
39736
|
-
dispatchOpts.path = `${
|
|
39736
|
+
dispatchOpts.path = `${path13}?${normalizedSearchParams}`;
|
|
39737
39737
|
}
|
|
39738
39738
|
return this[kAgent].dispatch(dispatchOpts, handler);
|
|
39739
39739
|
}
|
|
@@ -40134,12 +40134,12 @@ var require_snapshot_recorder = __commonJS({
|
|
|
40134
40134
|
* @return {Promise<void>} - Resolves when snapshots are loaded
|
|
40135
40135
|
*/
|
|
40136
40136
|
async loadSnapshots(filePath) {
|
|
40137
|
-
const
|
|
40138
|
-
if (!
|
|
40137
|
+
const path13 = filePath || this.#snapshotPath;
|
|
40138
|
+
if (!path13) {
|
|
40139
40139
|
throw new InvalidArgumentError("Snapshot path is required");
|
|
40140
40140
|
}
|
|
40141
40141
|
try {
|
|
40142
|
-
const data = await readFile(resolve4(
|
|
40142
|
+
const data = await readFile(resolve4(path13), "utf8");
|
|
40143
40143
|
const parsed = JSON.parse(data);
|
|
40144
40144
|
if (Array.isArray(parsed)) {
|
|
40145
40145
|
this.#snapshots.clear();
|
|
@@ -40153,7 +40153,7 @@ var require_snapshot_recorder = __commonJS({
|
|
|
40153
40153
|
if (error.code === "ENOENT") {
|
|
40154
40154
|
this.#snapshots.clear();
|
|
40155
40155
|
} else {
|
|
40156
|
-
throw new UndiciError(`Failed to load snapshots from ${
|
|
40156
|
+
throw new UndiciError(`Failed to load snapshots from ${path13}`, { cause: error });
|
|
40157
40157
|
}
|
|
40158
40158
|
}
|
|
40159
40159
|
}
|
|
@@ -40164,11 +40164,11 @@ var require_snapshot_recorder = __commonJS({
|
|
|
40164
40164
|
* @returns {Promise<void>} - Resolves when snapshots are saved
|
|
40165
40165
|
*/
|
|
40166
40166
|
async saveSnapshots(filePath) {
|
|
40167
|
-
const
|
|
40168
|
-
if (!
|
|
40167
|
+
const path13 = filePath || this.#snapshotPath;
|
|
40168
|
+
if (!path13) {
|
|
40169
40169
|
throw new InvalidArgumentError("Snapshot path is required");
|
|
40170
40170
|
}
|
|
40171
|
-
const resolvedPath = resolve4(
|
|
40171
|
+
const resolvedPath = resolve4(path13);
|
|
40172
40172
|
await mkdir2(dirname8(resolvedPath), { recursive: true });
|
|
40173
40173
|
const data = Array.from(this.#snapshots.entries()).map(([hash, snapshot]) => ({
|
|
40174
40174
|
hash,
|
|
@@ -40793,15 +40793,15 @@ var require_redirect_handler = __commonJS({
|
|
|
40793
40793
|
return;
|
|
40794
40794
|
}
|
|
40795
40795
|
const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
|
|
40796
|
-
const
|
|
40797
|
-
const redirectUrlString = `${origin}${
|
|
40796
|
+
const path13 = search ? `${pathname}${search}` : pathname;
|
|
40797
|
+
const redirectUrlString = `${origin}${path13}`;
|
|
40798
40798
|
for (const historyUrl of this.history) {
|
|
40799
40799
|
if (historyUrl.toString() === redirectUrlString) {
|
|
40800
40800
|
throw new InvalidArgumentError(`Redirect loop detected. Cannot redirect to ${origin}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`);
|
|
40801
40801
|
}
|
|
40802
40802
|
}
|
|
40803
40803
|
this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin);
|
|
40804
|
-
this.opts.path =
|
|
40804
|
+
this.opts.path = path13;
|
|
40805
40805
|
this.opts.origin = origin;
|
|
40806
40806
|
this.opts.query = null;
|
|
40807
40807
|
}
|
|
@@ -44411,10 +44411,10 @@ var require_headers = __commonJS({
|
|
|
44411
44411
|
const lowercaseName = isLowerCase ? name : name.toLowerCase();
|
|
44412
44412
|
const exists = this.headersMap.get(lowercaseName);
|
|
44413
44413
|
if (exists) {
|
|
44414
|
-
const
|
|
44414
|
+
const delimiter3 = lowercaseName === "cookie" ? "; " : ", ";
|
|
44415
44415
|
this.headersMap.set(lowercaseName, {
|
|
44416
44416
|
name: exists.name,
|
|
44417
|
-
value: `${exists.value}${
|
|
44417
|
+
value: `${exists.value}${delimiter3}${value}`
|
|
44418
44418
|
});
|
|
44419
44419
|
} else {
|
|
44420
44420
|
this.headersMap.set(lowercaseName, { name, value });
|
|
@@ -47008,11 +47008,11 @@ var require_fetch = __commonJS({
|
|
|
47008
47008
|
function dispatch({ body }) {
|
|
47009
47009
|
const url = requestCurrentURL(request3);
|
|
47010
47010
|
const agent = fetchParams.controller.dispatcher;
|
|
47011
|
-
const
|
|
47011
|
+
const path13 = url.pathname + url.search;
|
|
47012
47012
|
const hasTrailingQuestionMark = url.search.length === 0 && url.href[url.href.length - url.hash.length - 1] === "?";
|
|
47013
47013
|
return new Promise((resolve4, reject) => agent.dispatch(
|
|
47014
47014
|
{
|
|
47015
|
-
path: hasTrailingQuestionMark ? `${
|
|
47015
|
+
path: hasTrailingQuestionMark ? `${path13}?` : path13,
|
|
47016
47016
|
origin: url.origin,
|
|
47017
47017
|
method: request3.method,
|
|
47018
47018
|
body: agent.isMockActive ? request3.body && (request3.body.source || request3.body.stream) : body,
|
|
@@ -47959,9 +47959,9 @@ var require_util5 = __commonJS({
|
|
|
47959
47959
|
}
|
|
47960
47960
|
}
|
|
47961
47961
|
}
|
|
47962
|
-
function validateCookiePath(
|
|
47963
|
-
for (let i = 0; i <
|
|
47964
|
-
const code =
|
|
47962
|
+
function validateCookiePath(path13) {
|
|
47963
|
+
for (let i = 0; i < path13.length; ++i) {
|
|
47964
|
+
const code = path13.charCodeAt(i);
|
|
47965
47965
|
if (code < 32 || // exclude CTLs (0-31)
|
|
47966
47966
|
code === 127 || // DEL
|
|
47967
47967
|
code === 59) {
|
|
@@ -51131,11 +51131,11 @@ var require_undici = __commonJS({
|
|
|
51131
51131
|
if (typeof opts.path !== "string") {
|
|
51132
51132
|
throw new InvalidArgumentError("invalid opts.path");
|
|
51133
51133
|
}
|
|
51134
|
-
let
|
|
51134
|
+
let path13 = opts.path;
|
|
51135
51135
|
if (!opts.path.startsWith("/")) {
|
|
51136
|
-
|
|
51136
|
+
path13 = `/${path13}`;
|
|
51137
51137
|
}
|
|
51138
|
-
url = new URL(util.parseOrigin(url).origin +
|
|
51138
|
+
url = new URL(util.parseOrigin(url).origin + path13);
|
|
51139
51139
|
} else {
|
|
51140
51140
|
if (!opts) {
|
|
51141
51141
|
opts = typeof url === "object" ? url : {};
|
|
@@ -52603,7 +52603,7 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52603
52603
|
return apiError;
|
|
52604
52604
|
}
|
|
52605
52605
|
/** Build headers common to all requests (auth, swimlane). */
|
|
52606
|
-
buildHeaders(
|
|
52606
|
+
buildHeaders(path13, extra) {
|
|
52607
52607
|
const headers = {
|
|
52608
52608
|
"Content-Type": "application/json",
|
|
52609
52609
|
...extra
|
|
@@ -52614,7 +52614,7 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52614
52614
|
if (this.swimlaneName) {
|
|
52615
52615
|
headers["X-Prll-Swimlane"] = this.swimlaneName;
|
|
52616
52616
|
}
|
|
52617
|
-
if (
|
|
52617
|
+
if (path13.startsWith(API_BASE)) {
|
|
52618
52618
|
const overrides = this.getFeatureFlagOverrides?.();
|
|
52619
52619
|
if (overrides)
|
|
52620
52620
|
headers["X-Prll-FF-Override"] = overrides;
|
|
@@ -52638,8 +52638,8 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52638
52638
|
* is authoritative, so wiki vs api routing can't drift from how a caller
|
|
52639
52639
|
* happens to invoke the client.
|
|
52640
52640
|
*/
|
|
52641
|
-
baseUrlFor(
|
|
52642
|
-
return
|
|
52641
|
+
baseUrlFor(path13) {
|
|
52642
|
+
return path13.startsWith(WIKI_BASE) ? this.wikiBaseUrl : this.baseUrl;
|
|
52643
52643
|
}
|
|
52644
52644
|
setToken(token) {
|
|
52645
52645
|
this.token = token;
|
|
@@ -52666,10 +52666,10 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52666
52666
|
* REFRESH_THRESHOLD_S, refresh it **before** sending the request.
|
|
52667
52667
|
* No-op when the token is still fresh, missing, or un-parseable.
|
|
52668
52668
|
*/
|
|
52669
|
-
async ensureFreshToken(
|
|
52669
|
+
async ensureFreshToken(path13) {
|
|
52670
52670
|
if (!this.token || !this.getRefreshToken)
|
|
52671
52671
|
return;
|
|
52672
|
-
const pathSuffix =
|
|
52672
|
+
const pathSuffix = path13.replace(/^\/api\/v1/, "");
|
|
52673
52673
|
if (_ParallClient.AUTH_PATHS.has(pathSuffix))
|
|
52674
52674
|
return;
|
|
52675
52675
|
const exp = _ParallClient.decodeJwtExp(this.token);
|
|
@@ -52701,11 +52701,11 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52701
52701
|
this.refreshPromise = null;
|
|
52702
52702
|
}
|
|
52703
52703
|
}
|
|
52704
|
-
async request(method,
|
|
52704
|
+
async request(method, path13, body, query, retried = false, opts) {
|
|
52705
52705
|
if (!retried) {
|
|
52706
|
-
await this.ensureFreshToken(
|
|
52706
|
+
await this.ensureFreshToken(path13);
|
|
52707
52707
|
}
|
|
52708
|
-
let url = `${this.baseUrlFor(
|
|
52708
|
+
let url = `${this.baseUrlFor(path13)}${path13}`;
|
|
52709
52709
|
if (query) {
|
|
52710
52710
|
const params = new URLSearchParams();
|
|
52711
52711
|
for (const [key, value] of Object.entries(query)) {
|
|
@@ -52717,7 +52717,7 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52717
52717
|
if (qs)
|
|
52718
52718
|
url += `?${qs}`;
|
|
52719
52719
|
}
|
|
52720
|
-
const headers = this.buildHeaders(
|
|
52720
|
+
const headers = this.buildHeaders(path13, opts?.headers);
|
|
52721
52721
|
const timeoutSignal = AbortSignal.timeout(opts?.timeoutMs ?? 15e3);
|
|
52722
52722
|
const signal = opts?.signal ? AbortSignal.any([opts.signal, timeoutSignal]) : timeoutSignal;
|
|
52723
52723
|
let res;
|
|
@@ -52735,12 +52735,12 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52735
52735
|
throw _ParallClient.normalizeFetchError(err);
|
|
52736
52736
|
}
|
|
52737
52737
|
if (res.status === 401) {
|
|
52738
|
-
const pathSuffix =
|
|
52738
|
+
const pathSuffix = path13.replace(/^\/api\/v1/, "");
|
|
52739
52739
|
const isAuthPath = _ParallClient.AUTH_PATHS.has(pathSuffix);
|
|
52740
52740
|
if (!retried && !isAuthPath && this.getRefreshToken) {
|
|
52741
52741
|
const refreshed = await this.tryRefresh();
|
|
52742
52742
|
if (refreshed) {
|
|
52743
|
-
return this.request(method,
|
|
52743
|
+
return this.request(method, path13, body, query, true, opts);
|
|
52744
52744
|
}
|
|
52745
52745
|
}
|
|
52746
52746
|
if (this.onTokenExpired && !isAuthPath) {
|
|
@@ -52770,18 +52770,18 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52770
52770
|
* hit the 100 MiB cap, so a longer 5-minute timeout is used so a
|
|
52771
52771
|
* 50 MiB blob on a slow connection doesn't get chopped at 15 s.
|
|
52772
52772
|
*/
|
|
52773
|
-
async multipartRequest(method,
|
|
52773
|
+
async multipartRequest(method, path13, body, retried = false, opts) {
|
|
52774
52774
|
if (!retried) {
|
|
52775
|
-
await this.ensureFreshToken(
|
|
52775
|
+
await this.ensureFreshToken(path13);
|
|
52776
52776
|
}
|
|
52777
|
-
const { "Content-Type": _drop, ...headers } = this.buildHeaders(
|
|
52777
|
+
const { "Content-Type": _drop, ...headers } = this.buildHeaders(path13);
|
|
52778
52778
|
void _drop;
|
|
52779
52779
|
const timeoutMs = opts?.timeoutMs ?? 5 * 60 * 1e3;
|
|
52780
52780
|
let res;
|
|
52781
52781
|
try {
|
|
52782
52782
|
res = await sendMultipartRequest({
|
|
52783
52783
|
method,
|
|
52784
|
-
url: `${this.baseUrlFor(
|
|
52784
|
+
url: `${this.baseUrlFor(path13)}${path13}`,
|
|
52785
52785
|
headers,
|
|
52786
52786
|
body,
|
|
52787
52787
|
timeoutMs,
|
|
@@ -52792,12 +52792,12 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
52792
52792
|
throw _ParallClient.normalizeFetchError(err);
|
|
52793
52793
|
}
|
|
52794
52794
|
if (res.status === 401) {
|
|
52795
|
-
const pathSuffix =
|
|
52795
|
+
const pathSuffix = path13.replace(/^\/api\/v1/, "");
|
|
52796
52796
|
const isAuthPath = _ParallClient.AUTH_PATHS.has(pathSuffix);
|
|
52797
52797
|
if (!retried && !isAuthPath && this.getRefreshToken) {
|
|
52798
52798
|
const refreshed = await this.tryRefresh();
|
|
52799
52799
|
if (refreshed) {
|
|
52800
|
-
return this.multipartRequest(method,
|
|
52800
|
+
return this.multipartRequest(method, path13, body, true, opts);
|
|
52801
52801
|
}
|
|
52802
52802
|
}
|
|
52803
52803
|
if (this.onTokenExpired && !isAuthPath) {
|
|
@@ -53641,8 +53641,8 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
53641
53641
|
* remote filesystem browse of a member's machine was remote device access.
|
|
53642
53642
|
* The endpoint now answers 409 LOCAL_BROWSE_NOT_SUPPORTED unconditionally;
|
|
53643
53643
|
* workspace paths are typed in (or picked on the machine's own Desktop). */
|
|
53644
|
-
async browseMachineFilesystem(orgId, machineId,
|
|
53645
|
-
return this.request("POST", ENDPOINTS.MACHINE_BROWSE(orgId, machineId), { path:
|
|
53644
|
+
async browseMachineFilesystem(orgId, machineId, path13) {
|
|
53645
|
+
return this.request("POST", ENDPOINTS.MACHINE_BROWSE(orgId, machineId), { path: path13 }, void 0, false, { timeoutMs: 15e3 });
|
|
53646
53646
|
}
|
|
53647
53647
|
/** Create a new machine key. Returns the raw key string (shown once) + metadata. */
|
|
53648
53648
|
async createMachineKey(orgId, machineId, name) {
|
|
@@ -54216,12 +54216,12 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
54216
54216
|
async deleteWikiRestriction(orgId, wikiId, restrictionId) {
|
|
54217
54217
|
await this.request("DELETE", ENDPOINTS.WIKI_RESTRICTION(orgId, wikiId, restrictionId));
|
|
54218
54218
|
}
|
|
54219
|
-
async getWikiAccessStatus(orgId, wikiId,
|
|
54220
|
-
return this.request("GET", ENDPOINTS.WIKI_ACCESS_STATUS(orgId, wikiId), void 0,
|
|
54219
|
+
async getWikiAccessStatus(orgId, wikiId, path13) {
|
|
54220
|
+
return this.request("GET", ENDPOINTS.WIKI_ACCESS_STATUS(orgId, wikiId), void 0, path13 ? { path: path13 } : void 0);
|
|
54221
54221
|
}
|
|
54222
54222
|
// ---- Wiki membership projection (who-can-access, invites, join/leave) ----
|
|
54223
|
-
async getWikiAccessPolicy(orgId, wikiId,
|
|
54224
|
-
return this.request("GET", ENDPOINTS.WIKI_ACCESS_POLICY(orgId, wikiId), void 0,
|
|
54223
|
+
async getWikiAccessPolicy(orgId, wikiId, path13 = "") {
|
|
54224
|
+
return this.request("GET", ENDPOINTS.WIKI_ACCESS_POLICY(orgId, wikiId), void 0, path13 ? { path: path13 } : void 0);
|
|
54225
54225
|
}
|
|
54226
54226
|
async putWikiAccessPolicy(orgId, wikiId, policy) {
|
|
54227
54227
|
return this.request("PUT", ENDPOINTS.WIKI_ACCESS_POLICY(orgId, wikiId), policy);
|
|
@@ -54266,14 +54266,14 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
54266
54266
|
async getWikiCommits(orgId, wikiId, params) {
|
|
54267
54267
|
return this.request("GET", ENDPOINTS.WIKI_COMMITS(orgId, wikiId), void 0, params);
|
|
54268
54268
|
}
|
|
54269
|
-
async getWikiFileCommits(orgId, wikiId,
|
|
54269
|
+
async getWikiFileCommits(orgId, wikiId, path13, params) {
|
|
54270
54270
|
return this.request("GET", ENDPOINTS.WIKI_FILE_COMMITS(orgId, wikiId), void 0, {
|
|
54271
|
-
path:
|
|
54271
|
+
path: path13,
|
|
54272
54272
|
...params
|
|
54273
54273
|
});
|
|
54274
54274
|
}
|
|
54275
|
-
async getWikiBlame(orgId, wikiId,
|
|
54276
|
-
return this.request("GET", ENDPOINTS.WIKI_BLAME(orgId, wikiId), void 0, { path:
|
|
54275
|
+
async getWikiBlame(orgId, wikiId, path13, ref) {
|
|
54276
|
+
return this.request("GET", ENDPOINTS.WIKI_BLAME(orgId, wikiId), void 0, { path: path13, ref });
|
|
54277
54277
|
}
|
|
54278
54278
|
// ---- Wiki Operations (audit log) ----
|
|
54279
54279
|
async getWikiOperations(orgId, wikiId, params) {
|
|
@@ -55008,7 +55008,8 @@ var ParallClient = class _ParallClient extends AttachmentClient {
|
|
|
55008
55008
|
* `404 NOT_FOUND`. An installed cross-org clip with no connection yet lists
|
|
55009
55009
|
* as an empty array — including one whose approved auth mode cannot be
|
|
55010
55010
|
* configured at all (auth=none), which the write path is what refuses. With
|
|
55011
|
-
* `cap:clip-mcp` off the route is not registered at all.
|
|
55011
|
+
* `cap:clip-mcp` off the route is not registered at all. The envelope also
|
|
55012
|
+
* carries `official_oauth_ready` (see MCPConnectionListResponse).
|
|
55012
55013
|
*/
|
|
55013
55014
|
async listClipMCPConnections(orgId, clipId) {
|
|
55014
55015
|
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
|
@@ -60997,7 +60998,7 @@ function stepIdFilePathForSession(stateDir, sessionKey) {
|
|
|
60997
60998
|
// ts/codex-agent/dist/dispatch.js
|
|
60998
60999
|
import { spawn } from "node:child_process";
|
|
60999
61000
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
61000
|
-
import * as
|
|
61001
|
+
import * as path9 from "node:path";
|
|
61001
61002
|
|
|
61002
61003
|
// ts/agent-core/dist/internal/attachment-input.js
|
|
61003
61004
|
import { execSync } from "node:child_process";
|
|
@@ -62067,6 +62068,24 @@ function answerServerRequest(method) {
|
|
|
62067
62068
|
return Object.hasOwn(APPROVAL_DENIALS, method) ? APPROVAL_DENIALS[method] : void 0;
|
|
62068
62069
|
}
|
|
62069
62070
|
|
|
62071
|
+
// ts/codex-agent/dist/thread-config.js
|
|
62072
|
+
import * as path8 from "node:path";
|
|
62073
|
+
function buildThreadConfigOverrides({ reasoningEffort, capabilityBinDir: capabilityBinDir2, inheritedPath, platform = process.platform }) {
|
|
62074
|
+
const config = {};
|
|
62075
|
+
if (reasoningEffort)
|
|
62076
|
+
config.model_reasoning_effort = reasoningEffort;
|
|
62077
|
+
if (capabilityBinDir2 && platform !== "win32") {
|
|
62078
|
+
const pathEntries = (inheritedPath ?? "").split(path8.delimiter).filter((entry) => entry && entry !== capabilityBinDir2);
|
|
62079
|
+
const effectivePath = [capabilityBinDir2, ...pathEntries].join(path8.delimiter);
|
|
62080
|
+
config.allow_login_shell = false;
|
|
62081
|
+
config.shell_environment_policy = {
|
|
62082
|
+
experimental_use_profile: false,
|
|
62083
|
+
set: { PATH: effectivePath }
|
|
62084
|
+
};
|
|
62085
|
+
}
|
|
62086
|
+
return Object.keys(config).length > 0 ? config : void 0;
|
|
62087
|
+
}
|
|
62088
|
+
|
|
62070
62089
|
// ts/codex-agent/dist/event-mapping.js
|
|
62071
62090
|
var EventMapper = class {
|
|
62072
62091
|
toolCallStart = /* @__PURE__ */ new Map();
|
|
@@ -62529,6 +62548,13 @@ var CodexAppServerAdapter = class {
|
|
|
62529
62548
|
if (config.developerInstructions !== void 0)
|
|
62530
62549
|
this.opts.developerInstructions = config.developerInstructions ?? void 0;
|
|
62531
62550
|
}
|
|
62551
|
+
threadConfigOverrides() {
|
|
62552
|
+
return buildThreadConfigOverrides({
|
|
62553
|
+
reasoningEffort: this.opts.reasoningEffort,
|
|
62554
|
+
capabilityBinDir: this.opts.capabilityBinDir,
|
|
62555
|
+
inheritedPath: process.env.PATH
|
|
62556
|
+
});
|
|
62557
|
+
}
|
|
62532
62558
|
async enqueueDuringDispatch(sessionKey, body) {
|
|
62533
62559
|
const client = this.client;
|
|
62534
62560
|
if (!client || client.isDisposed())
|
|
@@ -62889,9 +62915,9 @@ var CodexAppServerAdapter = class {
|
|
|
62889
62915
|
}
|
|
62890
62916
|
if (this.opts.model)
|
|
62891
62917
|
forkParams.model = this.opts.model;
|
|
62892
|
-
|
|
62893
|
-
|
|
62894
|
-
|
|
62918
|
+
const threadConfig = this.threadConfigOverrides();
|
|
62919
|
+
if (threadConfig)
|
|
62920
|
+
forkParams.config = threadConfig;
|
|
62895
62921
|
const result = await client.sendRequest("thread/fork", forkParams);
|
|
62896
62922
|
const forkedThreadId = extractThreadId(result);
|
|
62897
62923
|
if (!forkedThreadId) {
|
|
@@ -63001,7 +63027,7 @@ var CodexAppServerAdapter = class {
|
|
|
63001
63027
|
if (this.opts.capabilityBinDir) {
|
|
63002
63028
|
const pathKey = IS_WIN32 ? Object.keys(env).find((k) => k.toUpperCase() === "PATH") ?? "PATH" : "PATH";
|
|
63003
63029
|
const existing = env[pathKey];
|
|
63004
|
-
env[pathKey] = existing ? `${this.opts.capabilityBinDir}${
|
|
63030
|
+
env[pathKey] = existing ? `${this.opts.capabilityBinDir}${path9.delimiter}${existing}` : this.opts.capabilityBinDir;
|
|
63005
63031
|
}
|
|
63006
63032
|
if (this.opts.contextFilePath) {
|
|
63007
63033
|
env.PRLL_CONTEXT_FILE = this.opts.contextFilePath;
|
|
@@ -63103,9 +63129,9 @@ var CodexAppServerAdapter = class {
|
|
|
63103
63129
|
}
|
|
63104
63130
|
if (this.opts.model)
|
|
63105
63131
|
commonParams.model = this.opts.model;
|
|
63106
|
-
|
|
63107
|
-
|
|
63108
|
-
|
|
63132
|
+
const threadConfig = this.threadConfigOverrides();
|
|
63133
|
+
if (threadConfig)
|
|
63134
|
+
commonParams.config = threadConfig;
|
|
63109
63135
|
const method = opts.resumeId ? "thread/resume" : "thread/start";
|
|
63110
63136
|
const params = opts.resumeId ? {
|
|
63111
63137
|
threadId: opts.resumeId,
|
|
@@ -63168,7 +63194,7 @@ function errToString2(err) {
|
|
|
63168
63194
|
|
|
63169
63195
|
// ts/codex-agent/dist/session-manager.js
|
|
63170
63196
|
import * as fs8 from "node:fs";
|
|
63171
|
-
import * as
|
|
63197
|
+
import * as path10 from "node:path";
|
|
63172
63198
|
var CodexSessionManager = class {
|
|
63173
63199
|
mainSessionKey;
|
|
63174
63200
|
stateFilePath;
|
|
@@ -63265,7 +63291,7 @@ var CodexSessionManager = class {
|
|
|
63265
63291
|
if (!threadId)
|
|
63266
63292
|
return;
|
|
63267
63293
|
try {
|
|
63268
|
-
fs8.mkdirSync(
|
|
63294
|
+
fs8.mkdirSync(path10.dirname(this.stateFilePath), { recursive: true });
|
|
63269
63295
|
const tmpPath = `${this.stateFilePath}.tmp`;
|
|
63270
63296
|
const state = { runtimeKey: this.mainSessionKey, threadId };
|
|
63271
63297
|
const effectiveSha = this.effectiveInstructionsShas.get(this.mainSessionKey);
|
|
@@ -63281,18 +63307,18 @@ var CodexSessionManager = class {
|
|
|
63281
63307
|
|
|
63282
63308
|
// ts/codex-agent/dist/workspace.js
|
|
63283
63309
|
import * as fs10 from "node:fs";
|
|
63284
|
-
import * as
|
|
63310
|
+
import * as path12 from "node:path";
|
|
63285
63311
|
|
|
63286
63312
|
// ts/codex-agent/dist/legacy-workspace-config-migration.js
|
|
63287
63313
|
import * as fs9 from "node:fs";
|
|
63288
|
-
import * as
|
|
63314
|
+
import * as path11 from "node:path";
|
|
63289
63315
|
var LEGACY_CONFIG_RELPATH = [".codex", "config.toml"];
|
|
63290
63316
|
var MIGRATION_SENTINEL_RELPATH = [".parall", "legacy-workspace-config-migration.v1"];
|
|
63291
63317
|
function legacyWorkspaceConfigPath(workspaceDir) {
|
|
63292
|
-
return
|
|
63318
|
+
return path11.join(workspaceDir, ...LEGACY_CONFIG_RELPATH);
|
|
63293
63319
|
}
|
|
63294
63320
|
function migrationSentinelPath(workspaceDir) {
|
|
63295
|
-
return
|
|
63321
|
+
return path11.join(workspaceDir, ...MIGRATION_SENTINEL_RELPATH);
|
|
63296
63322
|
}
|
|
63297
63323
|
function legacyWorkspaceConfigToml(prompt) {
|
|
63298
63324
|
return `developer_instructions = """
|
|
@@ -63344,7 +63370,7 @@ If a stale .codex/config.toml is still present, remove it by hand.
|
|
|
63344
63370
|
`;
|
|
63345
63371
|
function claimLegacyWorkspaceConfigMigration(workspaceDir) {
|
|
63346
63372
|
const sentinel = migrationSentinelPath(workspaceDir);
|
|
63347
|
-
fs9.mkdirSync(
|
|
63373
|
+
fs9.mkdirSync(path11.dirname(sentinel), { recursive: true });
|
|
63348
63374
|
try {
|
|
63349
63375
|
fs9.writeFileSync(sentinel, SENTINEL_BODY, { flag: "wx" });
|
|
63350
63376
|
return "claimed";
|
|
@@ -63410,9 +63436,9 @@ function sleepSync(ms) {
|
|
|
63410
63436
|
Atomics.wait(SLEEP_SIGNAL, 0, 0, ms);
|
|
63411
63437
|
}
|
|
63412
63438
|
function withConfigLock(codexHome, log2, fn) {
|
|
63413
|
-
const queueDir =
|
|
63439
|
+
const queueDir = path12.join(codexHome, "config.toml.lock.d");
|
|
63414
63440
|
let ticketName = bakeryEnqueue(queueDir);
|
|
63415
|
-
let ticketPath = ticketName ?
|
|
63441
|
+
let ticketPath = ticketName ? path12.join(queueDir, ticketName) : "";
|
|
63416
63442
|
let acquired = false;
|
|
63417
63443
|
let heldPath = "";
|
|
63418
63444
|
const deadline = Date.now() + CONFIG_LOCK_TIMINGS.waitMs;
|
|
@@ -63427,7 +63453,7 @@ function withConfigLock(codexHome, log2, fn) {
|
|
|
63427
63453
|
ticketName = bakeryEnqueue(queueDir);
|
|
63428
63454
|
if (!ticketName)
|
|
63429
63455
|
break;
|
|
63430
|
-
ticketPath =
|
|
63456
|
+
ticketPath = path12.join(queueDir, ticketName);
|
|
63431
63457
|
continue;
|
|
63432
63458
|
}
|
|
63433
63459
|
const now = Date.now();
|
|
@@ -63435,7 +63461,7 @@ function withConfigLock(codexHome, log2, fn) {
|
|
|
63435
63461
|
let blocked = false;
|
|
63436
63462
|
let head;
|
|
63437
63463
|
for (const name of names) {
|
|
63438
|
-
const entryPath =
|
|
63464
|
+
const entryPath = path12.join(queueDir, name);
|
|
63439
63465
|
if (name.startsWith("held-")) {
|
|
63440
63466
|
const enteredAt = Number.parseInt(name.slice(5, 20), 10);
|
|
63441
63467
|
if (Number.isFinite(enteredAt) && now - enteredAt > CONFIG_LOCK_TIMINGS.staleMs) {
|
|
@@ -63478,7 +63504,7 @@ function withConfigLock(codexHome, log2, fn) {
|
|
|
63478
63504
|
if (!blocked && head === ticketName) {
|
|
63479
63505
|
CONFIG_LOCK_TEST_HOOKS.beforeTicketEntry?.();
|
|
63480
63506
|
const heldName = `held-${String(Date.now()).padStart(15, "0")}-${ticketName.slice(2)}`;
|
|
63481
|
-
const candidateHeldPath =
|
|
63507
|
+
const candidateHeldPath = path12.join(queueDir, heldName);
|
|
63482
63508
|
try {
|
|
63483
63509
|
fs10.renameSync(ticketPath, candidateHeldPath);
|
|
63484
63510
|
} catch {
|
|
@@ -63519,7 +63545,7 @@ var CONFIG_LOCK_TEST_HOOKS = {};
|
|
|
63519
63545
|
function bakeryEnqueue(queueDir) {
|
|
63520
63546
|
for (let attempt = 0; attempt < 3; attempt++) {
|
|
63521
63547
|
const token = `${process.pid}-${Math.random().toString(36).slice(2, 10)}`;
|
|
63522
|
-
const markerPath =
|
|
63548
|
+
const markerPath = path12.join(queueDir, `choosing-${token}`);
|
|
63523
63549
|
try {
|
|
63524
63550
|
fs10.mkdirSync(queueDir, { recursive: true });
|
|
63525
63551
|
CONFIG_LOCK_TEST_HOOKS.beforeChoosingMarker?.();
|
|
@@ -63537,7 +63563,7 @@ function bakeryEnqueue(queueDir) {
|
|
|
63537
63563
|
maxSeq = seq;
|
|
63538
63564
|
}
|
|
63539
63565
|
const ticketName = `t-${String(maxSeq + 1).padStart(10, "0")}-${token}`;
|
|
63540
|
-
const ticketPath =
|
|
63566
|
+
const ticketPath = path12.join(queueDir, ticketName);
|
|
63541
63567
|
CONFIG_LOCK_TEST_HOOKS.beforeTicketPublish?.();
|
|
63542
63568
|
fs10.renameSync(markerPath, ticketPath);
|
|
63543
63569
|
try {
|
|
@@ -63591,7 +63617,7 @@ function resolveWriteTarget(filePath) {
|
|
|
63591
63617
|
throw err;
|
|
63592
63618
|
}
|
|
63593
63619
|
const seen = /* @__PURE__ */ new Set();
|
|
63594
|
-
let p =
|
|
63620
|
+
let p = path12.resolve(filePath);
|
|
63595
63621
|
for (let depth = 0; depth < 40; depth++) {
|
|
63596
63622
|
if (seen.has(p)) {
|
|
63597
63623
|
throw new Error(`symlink cycle at ${p} while resolving ${filePath}`);
|
|
@@ -63606,7 +63632,7 @@ function resolveWriteTarget(filePath) {
|
|
|
63606
63632
|
return p;
|
|
63607
63633
|
throw err;
|
|
63608
63634
|
}
|
|
63609
|
-
p =
|
|
63635
|
+
p = path12.resolve(path12.dirname(p), link);
|
|
63610
63636
|
}
|
|
63611
63637
|
throw new Error(`symlink chain deeper than 40 while resolving ${filePath}`);
|
|
63612
63638
|
}
|
|
@@ -63655,7 +63681,7 @@ function ensureParallProvider(codexHome, apiUrl, log2, opts) {
|
|
|
63655
63681
|
withConfigLock(codexHome, log2, () => ensureParallProviderLocked(codexHome, apiUrl, opts));
|
|
63656
63682
|
}
|
|
63657
63683
|
function ensureParallProviderLocked(codexHome, apiUrl, opts) {
|
|
63658
|
-
const configPath =
|
|
63684
|
+
const configPath = path12.join(codexHome, "config.toml");
|
|
63659
63685
|
const baseUrl = apiUrl.replace(/\/$/, "") + "/api/llm/v1";
|
|
63660
63686
|
try {
|
|
63661
63687
|
let content = "";
|
|
@@ -63701,11 +63727,11 @@ function findSectionEnd(content, fromIndex) {
|
|
|
63701
63727
|
return nextHeader === -1 ? content.length : nextHeader;
|
|
63702
63728
|
}
|
|
63703
63729
|
function systemPromptCopyPath(workspaceDir) {
|
|
63704
|
-
return
|
|
63730
|
+
return path12.join(workspaceDir, ".parall", "system-prompt.md");
|
|
63705
63731
|
}
|
|
63706
63732
|
function writeCodexSystemPrompt(workspaceDir, agentIdentity, capabilityFragments) {
|
|
63707
63733
|
const systemPrompt = buildCodexPlatformInstructions(workspaceDir, agentIdentity, capabilityFragments);
|
|
63708
|
-
fs10.mkdirSync(
|
|
63734
|
+
fs10.mkdirSync(path12.join(workspaceDir, ".parall"), { recursive: true });
|
|
63709
63735
|
fs10.writeFileSync(systemPromptCopyPath(workspaceDir), systemPrompt, "utf8");
|
|
63710
63736
|
return systemPrompt;
|
|
63711
63737
|
}
|
|
@@ -63713,7 +63739,7 @@ function ensureCodexWorkspace(workspaceDir, log2, agentIdentity, capabilityFragm
|
|
|
63713
63739
|
fs10.mkdirSync(workspaceDir, { recursive: true });
|
|
63714
63740
|
runLegacyWorkspaceConfigMigration(workspaceDir, () => readAuthorshipProof(workspaceDir, log2), log2);
|
|
63715
63741
|
const systemPrompt = writeCodexSystemPrompt(workspaceDir, agentIdentity, capabilityFragments);
|
|
63716
|
-
writeSkillFiles(
|
|
63742
|
+
writeSkillFiles(path12.join(workspaceDir, ".parall", "skills"));
|
|
63717
63743
|
return systemPrompt;
|
|
63718
63744
|
}
|
|
63719
63745
|
function readAuthorshipProof(workspaceDir, log2) {
|
package/bundle/parall-daemon.js
CHANGED
|
@@ -3780,7 +3780,8 @@ var init_client = __esm({
|
|
|
3780
3780
|
* `404 NOT_FOUND`. An installed cross-org clip with no connection yet lists
|
|
3781
3781
|
* as an empty array — including one whose approved auth mode cannot be
|
|
3782
3782
|
* configured at all (auth=none), which the write path is what refuses. With
|
|
3783
|
-
* `cap:clip-mcp` off the route is not registered at all.
|
|
3783
|
+
* `cap:clip-mcp` off the route is not registered at all. The envelope also
|
|
3784
|
+
* carries `official_oauth_ready` (see MCPConnectionListResponse).
|
|
3784
3785
|
*/
|
|
3785
3786
|
async listClipMCPConnections(orgId, clipId) {
|
|
3786
3787
|
return this.request("GET", ENDPOINTS.ORG_CLIP_MCP_CONFIGS(orgId, clipId));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parall/daemon",
|
|
3
|
-
"version": "1.58.
|
|
3
|
+
"version": "1.58.2",
|
|
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/
|
|
37
|
-
"@parall/
|
|
38
|
-
"@parall/claude-agent": "1.58.
|
|
39
|
-
"@parall/codex-agent": "1.58.
|
|
40
|
-
"@parall/openclaw-agent": "1.58.
|
|
36
|
+
"@parall/agent-core": "1.58.2",
|
|
37
|
+
"@parall/sdk": "1.58.2",
|
|
38
|
+
"@parall/claude-agent": "1.58.2",
|
|
39
|
+
"@parall/codex-agent": "1.58.2",
|
|
40
|
+
"@parall/openclaw-agent": "1.58.2"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "^22.0.0",
|