@parall/daemon 1.55.1 → 1.55.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 +9 -9
- package/bundle/parall-claude-agent.js +77 -17
- package/bundle/parall-codex-agent.js +73 -12
- package/bundle/parall-daemon.js +8 -0
- package/package.json +6 -6
package/bundle/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.55.
|
|
3
|
-
"built_at": "2026-08-
|
|
2
|
+
"version": "1.55.2",
|
|
3
|
+
"built_at": "2026-08-13T12:51:07.413Z",
|
|
4
4
|
"min_node_version": "20.0.0",
|
|
5
5
|
"files": {
|
|
6
6
|
"bb-browser-daemon.js": {
|
|
@@ -24,21 +24,21 @@
|
|
|
24
24
|
"size": 7220
|
|
25
25
|
},
|
|
26
26
|
"parall-claude-agent.js": {
|
|
27
|
-
"sha256": "
|
|
28
|
-
"size":
|
|
27
|
+
"sha256": "03f72ff9ac4da18f680f012ef3ac2c88dc1b87ce524c1b6fbe763cf3f3ff7d2e",
|
|
28
|
+
"size": 2816084
|
|
29
29
|
},
|
|
30
30
|
"parall-codex-agent.js": {
|
|
31
|
-
"sha256": "
|
|
32
|
-
"size":
|
|
31
|
+
"sha256": "d9f0278b7d1be05c9dbaef57e9bf4727f569f90e2d21cbec21091cc5c2caf546",
|
|
32
|
+
"size": 2848031
|
|
33
33
|
},
|
|
34
34
|
"parall-daemon.js": {
|
|
35
|
-
"sha256": "
|
|
36
|
-
"size":
|
|
35
|
+
"sha256": "d60fef8269a708cfd623c4011e19b7ee1e11d9fb1d5bdfe678893d86470df7c2",
|
|
36
|
+
"size": 3011385
|
|
37
37
|
},
|
|
38
38
|
"parall-openclaw-agent.js": {
|
|
39
39
|
"sha256": "856a1c3a9ae0ffef8efe2481fa1171dbeb1d67cccb88616aa9bf16da96a69355",
|
|
40
40
|
"size": 9923
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"signature": "
|
|
43
|
+
"signature": "ogOg4KHQBnIv2efZbO6ZI9HCQ/JMZp5Cb52Eya+n5f7k8cTrzKCZoveb102SwOdhx5sVz1lN30Vhh3ZZtSBSBw=="
|
|
44
44
|
}
|
|
@@ -55885,6 +55885,56 @@ async function consumeMessageWorkItem(host, item) {
|
|
|
55885
55885
|
}
|
|
55886
55886
|
}
|
|
55887
55887
|
|
|
55888
|
+
// ts/agent-core/dist/dispatch-inactivity-deadline.js
|
|
55889
|
+
var DispatchInactivityDeadline = class {
|
|
55890
|
+
timeoutMs;
|
|
55891
|
+
onExpire;
|
|
55892
|
+
onDispose;
|
|
55893
|
+
timer = null;
|
|
55894
|
+
expired = false;
|
|
55895
|
+
disposed = false;
|
|
55896
|
+
constructor(timeoutMs, onExpire, onDispose) {
|
|
55897
|
+
this.timeoutMs = timeoutMs;
|
|
55898
|
+
this.onExpire = onExpire;
|
|
55899
|
+
this.onDispose = onDispose;
|
|
55900
|
+
}
|
|
55901
|
+
touch = () => {
|
|
55902
|
+
if (this.timeoutMs <= 0 || this.expired || this.disposed)
|
|
55903
|
+
return;
|
|
55904
|
+
if (this.timer)
|
|
55905
|
+
clearTimeout(this.timer);
|
|
55906
|
+
this.timer = setTimeout(() => {
|
|
55907
|
+
this.timer = null;
|
|
55908
|
+
this.expired = true;
|
|
55909
|
+
this.onExpire();
|
|
55910
|
+
}, this.timeoutMs);
|
|
55911
|
+
};
|
|
55912
|
+
dispose() {
|
|
55913
|
+
if (this.disposed)
|
|
55914
|
+
return;
|
|
55915
|
+
this.disposed = true;
|
|
55916
|
+
if (this.timer)
|
|
55917
|
+
clearTimeout(this.timer);
|
|
55918
|
+
this.timer = null;
|
|
55919
|
+
this.onDispose();
|
|
55920
|
+
}
|
|
55921
|
+
};
|
|
55922
|
+
var DispatchInactivityDeadlines = class {
|
|
55923
|
+
active = /* @__PURE__ */ new Map();
|
|
55924
|
+
start(sessionKey, timeoutMs, onExpire) {
|
|
55925
|
+
const deadline = new DispatchInactivityDeadline(timeoutMs, onExpire, () => {
|
|
55926
|
+
if (this.active.get(sessionKey) === deadline)
|
|
55927
|
+
this.active.delete(sessionKey);
|
|
55928
|
+
});
|
|
55929
|
+
this.active.set(sessionKey, deadline);
|
|
55930
|
+
deadline.touch();
|
|
55931
|
+
return deadline;
|
|
55932
|
+
}
|
|
55933
|
+
touch(sessionKey) {
|
|
55934
|
+
this.active.get(sessionKey)?.touch();
|
|
55935
|
+
}
|
|
55936
|
+
};
|
|
55937
|
+
|
|
55888
55938
|
// ts/agent-core/dist/routing.js
|
|
55889
55939
|
var MAX_CONCURRENT_FORKS = 20;
|
|
55890
55940
|
var defaultRoutingStrategy = (event, state) => {
|
|
@@ -57430,6 +57480,7 @@ var ParallAgentGateway = class {
|
|
|
57430
57480
|
* an unrelated stalled fork's lane leased forever).
|
|
57431
57481
|
*/
|
|
57432
57482
|
sessionActiveLanes = /* @__PURE__ */ new Map();
|
|
57483
|
+
dispatchInactivityDeadlines = new DispatchInactivityDeadlines();
|
|
57433
57484
|
noteSessionLane(sessionKey, laneKey) {
|
|
57434
57485
|
if (laneKey == null)
|
|
57435
57486
|
this.sessionActiveLanes.delete(sessionKey);
|
|
@@ -57439,11 +57490,12 @@ var ParallAgentGateway = class {
|
|
|
57439
57490
|
/**
|
|
57440
57491
|
* External runtime-activity signal for adapters whose tool activity does
|
|
57441
57492
|
* not flow through the RuntimeEvent stream (openclaw hooks call this from
|
|
57442
|
-
* the tool-call lifecycle):
|
|
57443
|
-
*
|
|
57444
|
-
*
|
|
57493
|
+
* the tool-call lifecycle): refreshes the dispatch inactivity deadline and
|
|
57494
|
+
* renews the session's OWN active ledger lane, when present, so a long tool
|
|
57495
|
+
* call cannot time out or get dethroned mid-turn.
|
|
57445
57496
|
*/
|
|
57446
57497
|
touchRuntimeActivity(sessionKey) {
|
|
57498
|
+
this.dispatchInactivityDeadlines.touch(sessionKey);
|
|
57447
57499
|
if (this.ledgerDisabled)
|
|
57448
57500
|
return;
|
|
57449
57501
|
const laneKey = this.sessionActiveLanes.get(sessionKey);
|
|
@@ -57919,14 +57971,14 @@ var ParallAgentGateway = class {
|
|
|
57919
57971
|
this.writeContextFile(laneContextFilePath2, contextBody);
|
|
57920
57972
|
}
|
|
57921
57973
|
this.inFlightDispatches++;
|
|
57922
|
-
const
|
|
57923
|
-
this.opts.log?.warn(`dispatch deadline exceeded (${this.DISPATCH_DEADLINE_MS}ms) for ${event.messageId} on ${sessionKey}; aborting`);
|
|
57974
|
+
const dispatchDeadline = this.dispatchInactivityDeadlines.start(sessionKey, this.DISPATCH_DEADLINE_MS, () => {
|
|
57975
|
+
this.opts.log?.warn(`dispatch inactivity deadline exceeded (${this.DISPATCH_DEADLINE_MS}ms) for ${event.messageId} on ${sessionKey}; aborting`);
|
|
57924
57976
|
try {
|
|
57925
57977
|
this.opts.dispatchAdapter.abortDispatch?.(sessionKey);
|
|
57926
57978
|
} catch (err) {
|
|
57927
57979
|
this.opts.log?.warn(`abortDispatch threw for ${sessionKey}: ${String(err)}`);
|
|
57928
57980
|
}
|
|
57929
|
-
}
|
|
57981
|
+
});
|
|
57930
57982
|
let binding = this.sessionBindings.get(sessionKey);
|
|
57931
57983
|
let inputStepsCreated = false;
|
|
57932
57984
|
let turnHandle;
|
|
@@ -57947,8 +57999,10 @@ var ParallAgentGateway = class {
|
|
|
57947
57999
|
bodyForAgent,
|
|
57948
58000
|
sessionKey,
|
|
57949
58001
|
context: dispatchContext,
|
|
57950
|
-
inputLifecycle
|
|
58002
|
+
inputLifecycle,
|
|
58003
|
+
noteActivity: dispatchDeadline.touch
|
|
57951
58004
|
})) {
|
|
58005
|
+
dispatchDeadline.touch();
|
|
57952
58006
|
if (runtimeEvent.type === "runtime_session") {
|
|
57953
58007
|
const priorAgentSessionId = binding?.agentSessionId;
|
|
57954
58008
|
binding = await this.bindRuntimeSession(sessionKey, runtimeEvent, contextFilePath, laneContextFilePath2);
|
|
@@ -58085,8 +58139,7 @@ var ParallAgentGateway = class {
|
|
|
58085
58139
|
}
|
|
58086
58140
|
throw err;
|
|
58087
58141
|
} finally {
|
|
58088
|
-
|
|
58089
|
-
clearTimeout(deadlineTimer);
|
|
58142
|
+
dispatchDeadline.dispose();
|
|
58090
58143
|
const metricsSnapshot = getDispatchMetrics(sessionKey);
|
|
58091
58144
|
const durationMs = metricsSnapshot ? Date.now() - metricsSnapshot.started_at : 0;
|
|
58092
58145
|
const effectiveOutcome = turnOutcomeEvent?.outcome ?? (dispatchError || sawErrorEvent ? "runtime_crash" : "ok");
|
|
@@ -61822,8 +61875,10 @@ async function* parseClaudeStreamJson(readable) {
|
|
|
61822
61875
|
yield { type: "assistant_error", message: message2 };
|
|
61823
61876
|
continue;
|
|
61824
61877
|
}
|
|
61825
|
-
if (asTrimmedString(eventRecord.parent_tool_use_id))
|
|
61878
|
+
if (asTrimmedString(eventRecord.parent_tool_use_id)) {
|
|
61879
|
+
yield { type: "runtime_activity" };
|
|
61826
61880
|
continue;
|
|
61881
|
+
}
|
|
61827
61882
|
const message = eventRecord.message;
|
|
61828
61883
|
const content = message && typeof message === "object" ? message.content : void 0;
|
|
61829
61884
|
if (!Array.isArray(content))
|
|
@@ -61868,8 +61923,10 @@ async function* parseClaudeStreamJson(readable) {
|
|
|
61868
61923
|
continue;
|
|
61869
61924
|
}
|
|
61870
61925
|
if (eventRecord.type === "user") {
|
|
61871
|
-
if (asTrimmedString(eventRecord.parent_tool_use_id))
|
|
61926
|
+
if (asTrimmedString(eventRecord.parent_tool_use_id)) {
|
|
61927
|
+
yield { type: "runtime_activity" };
|
|
61872
61928
|
continue;
|
|
61929
|
+
}
|
|
61873
61930
|
const message = eventRecord.message;
|
|
61874
61931
|
const content = message && typeof message === "object" ? message.content : void 0;
|
|
61875
61932
|
if (!Array.isArray(content))
|
|
@@ -62232,7 +62289,7 @@ var ClaudeCodeAdapter = class {
|
|
|
62232
62289
|
return false;
|
|
62233
62290
|
return state.inputs.hasPendingInjections();
|
|
62234
62291
|
}
|
|
62235
|
-
async *dispatch({ event, bodyForAgent, sessionKey, context: context2, inputLifecycle }) {
|
|
62292
|
+
async *dispatch({ event, bodyForAgent, sessionKey, context: context2, inputLifecycle, noteActivity }) {
|
|
62236
62293
|
const deliveryKey = inputLifecycle?.deliveryKey ?? event.dispatchEventId ?? event.messageId;
|
|
62237
62294
|
const existingState = this.processes.get(sessionKey);
|
|
62238
62295
|
const injected = existingState?.inputs.getByKey(deliveryKey);
|
|
@@ -62243,7 +62300,7 @@ var ClaudeCodeAdapter = class {
|
|
|
62243
62300
|
injected.drained = true;
|
|
62244
62301
|
context2.log?.info?.(`consuming steer input ${injected.commandUuid}`);
|
|
62245
62302
|
try {
|
|
62246
|
-
yield* this.consumeDelivery(sessionKey, existingState, injected, context2.log);
|
|
62303
|
+
yield* this.consumeDelivery(sessionKey, existingState, injected, context2.log, noteActivity);
|
|
62247
62304
|
} finally {
|
|
62248
62305
|
existingState.inputs.remove(injected);
|
|
62249
62306
|
}
|
|
@@ -62273,7 +62330,7 @@ var ClaudeCodeAdapter = class {
|
|
|
62273
62330
|
context2.log?.warn?.(`failed to prepare local attachments: ${String(err)}`);
|
|
62274
62331
|
}
|
|
62275
62332
|
try {
|
|
62276
|
-
yield* this.runTurn(sessionKey, promptBody, deliveryKey, inputLifecycle, context2.log);
|
|
62333
|
+
yield* this.runTurn(sessionKey, promptBody, deliveryKey, inputLifecycle, context2.log, noteActivity);
|
|
62277
62334
|
} finally {
|
|
62278
62335
|
releasePreparedAttachments();
|
|
62279
62336
|
}
|
|
@@ -62314,7 +62371,7 @@ var ClaudeCodeAdapter = class {
|
|
|
62314
62371
|
this.resetProcesses();
|
|
62315
62372
|
await this.opts.sessionManager.shutdownAll();
|
|
62316
62373
|
}
|
|
62317
|
-
async *runTurn(sessionKey, promptBody, deliveryKey, lifecycle, log2) {
|
|
62374
|
+
async *runTurn(sessionKey, promptBody, deliveryKey, lifecycle, log2, noteActivity) {
|
|
62318
62375
|
let state;
|
|
62319
62376
|
try {
|
|
62320
62377
|
await this.ensureRuntimeCapability(log2);
|
|
@@ -62339,7 +62396,7 @@ var ClaudeCodeAdapter = class {
|
|
|
62339
62396
|
return;
|
|
62340
62397
|
}
|
|
62341
62398
|
try {
|
|
62342
|
-
yield* this.consumeDelivery(sessionKey, state, delivery, log2);
|
|
62399
|
+
yield* this.consumeDelivery(sessionKey, state, delivery, log2, noteActivity);
|
|
62343
62400
|
} finally {
|
|
62344
62401
|
state.inputs.remove(delivery);
|
|
62345
62402
|
}
|
|
@@ -62404,7 +62461,7 @@ var ClaudeCodeAdapter = class {
|
|
|
62404
62461
|
* finish while this drain is active; their callbacks advance independently
|
|
62405
62462
|
* and their later bookkeeping dispatch becomes a no-op.
|
|
62406
62463
|
*/
|
|
62407
|
-
async *consumeDelivery(sessionKey, state, target, log2) {
|
|
62464
|
+
async *consumeDelivery(sessionKey, state, target, log2, noteActivity) {
|
|
62408
62465
|
if (target.terminal)
|
|
62409
62466
|
return;
|
|
62410
62467
|
const groupKey = randomUUID3();
|
|
@@ -62435,6 +62492,9 @@ var ClaudeCodeAdapter = class {
|
|
|
62435
62492
|
return;
|
|
62436
62493
|
}
|
|
62437
62494
|
const parsed = next.value;
|
|
62495
|
+
noteActivity?.();
|
|
62496
|
+
if (parsed.type === "runtime_activity")
|
|
62497
|
+
continue;
|
|
62438
62498
|
if (parsed.type === "runtime_init") {
|
|
62439
62499
|
state.capabilities = new Set(parsed.capabilities);
|
|
62440
62500
|
if (parsed.sessionId) {
|
|
@@ -55885,6 +55885,56 @@ async function consumeMessageWorkItem(host, item) {
|
|
|
55885
55885
|
}
|
|
55886
55886
|
}
|
|
55887
55887
|
|
|
55888
|
+
// ts/agent-core/dist/dispatch-inactivity-deadline.js
|
|
55889
|
+
var DispatchInactivityDeadline = class {
|
|
55890
|
+
timeoutMs;
|
|
55891
|
+
onExpire;
|
|
55892
|
+
onDispose;
|
|
55893
|
+
timer = null;
|
|
55894
|
+
expired = false;
|
|
55895
|
+
disposed = false;
|
|
55896
|
+
constructor(timeoutMs, onExpire, onDispose) {
|
|
55897
|
+
this.timeoutMs = timeoutMs;
|
|
55898
|
+
this.onExpire = onExpire;
|
|
55899
|
+
this.onDispose = onDispose;
|
|
55900
|
+
}
|
|
55901
|
+
touch = () => {
|
|
55902
|
+
if (this.timeoutMs <= 0 || this.expired || this.disposed)
|
|
55903
|
+
return;
|
|
55904
|
+
if (this.timer)
|
|
55905
|
+
clearTimeout(this.timer);
|
|
55906
|
+
this.timer = setTimeout(() => {
|
|
55907
|
+
this.timer = null;
|
|
55908
|
+
this.expired = true;
|
|
55909
|
+
this.onExpire();
|
|
55910
|
+
}, this.timeoutMs);
|
|
55911
|
+
};
|
|
55912
|
+
dispose() {
|
|
55913
|
+
if (this.disposed)
|
|
55914
|
+
return;
|
|
55915
|
+
this.disposed = true;
|
|
55916
|
+
if (this.timer)
|
|
55917
|
+
clearTimeout(this.timer);
|
|
55918
|
+
this.timer = null;
|
|
55919
|
+
this.onDispose();
|
|
55920
|
+
}
|
|
55921
|
+
};
|
|
55922
|
+
var DispatchInactivityDeadlines = class {
|
|
55923
|
+
active = /* @__PURE__ */ new Map();
|
|
55924
|
+
start(sessionKey, timeoutMs, onExpire) {
|
|
55925
|
+
const deadline = new DispatchInactivityDeadline(timeoutMs, onExpire, () => {
|
|
55926
|
+
if (this.active.get(sessionKey) === deadline)
|
|
55927
|
+
this.active.delete(sessionKey);
|
|
55928
|
+
});
|
|
55929
|
+
this.active.set(sessionKey, deadline);
|
|
55930
|
+
deadline.touch();
|
|
55931
|
+
return deadline;
|
|
55932
|
+
}
|
|
55933
|
+
touch(sessionKey) {
|
|
55934
|
+
this.active.get(sessionKey)?.touch();
|
|
55935
|
+
}
|
|
55936
|
+
};
|
|
55937
|
+
|
|
55888
55938
|
// ts/agent-core/dist/routing.js
|
|
55889
55939
|
var MAX_CONCURRENT_FORKS = 20;
|
|
55890
55940
|
var defaultRoutingStrategy = (event, state) => {
|
|
@@ -57430,6 +57480,7 @@ var ParallAgentGateway = class {
|
|
|
57430
57480
|
* an unrelated stalled fork's lane leased forever).
|
|
57431
57481
|
*/
|
|
57432
57482
|
sessionActiveLanes = /* @__PURE__ */ new Map();
|
|
57483
|
+
dispatchInactivityDeadlines = new DispatchInactivityDeadlines();
|
|
57433
57484
|
noteSessionLane(sessionKey, laneKey) {
|
|
57434
57485
|
if (laneKey == null)
|
|
57435
57486
|
this.sessionActiveLanes.delete(sessionKey);
|
|
@@ -57439,11 +57490,12 @@ var ParallAgentGateway = class {
|
|
|
57439
57490
|
/**
|
|
57440
57491
|
* External runtime-activity signal for adapters whose tool activity does
|
|
57441
57492
|
* not flow through the RuntimeEvent stream (openclaw hooks call this from
|
|
57442
|
-
* the tool-call lifecycle):
|
|
57443
|
-
*
|
|
57444
|
-
*
|
|
57493
|
+
* the tool-call lifecycle): refreshes the dispatch inactivity deadline and
|
|
57494
|
+
* renews the session's OWN active ledger lane, when present, so a long tool
|
|
57495
|
+
* call cannot time out or get dethroned mid-turn.
|
|
57445
57496
|
*/
|
|
57446
57497
|
touchRuntimeActivity(sessionKey) {
|
|
57498
|
+
this.dispatchInactivityDeadlines.touch(sessionKey);
|
|
57447
57499
|
if (this.ledgerDisabled)
|
|
57448
57500
|
return;
|
|
57449
57501
|
const laneKey = this.sessionActiveLanes.get(sessionKey);
|
|
@@ -57919,14 +57971,14 @@ var ParallAgentGateway = class {
|
|
|
57919
57971
|
this.writeContextFile(laneContextFilePath2, contextBody);
|
|
57920
57972
|
}
|
|
57921
57973
|
this.inFlightDispatches++;
|
|
57922
|
-
const
|
|
57923
|
-
this.opts.log?.warn(`dispatch deadline exceeded (${this.DISPATCH_DEADLINE_MS}ms) for ${event.messageId} on ${sessionKey}; aborting`);
|
|
57974
|
+
const dispatchDeadline = this.dispatchInactivityDeadlines.start(sessionKey, this.DISPATCH_DEADLINE_MS, () => {
|
|
57975
|
+
this.opts.log?.warn(`dispatch inactivity deadline exceeded (${this.DISPATCH_DEADLINE_MS}ms) for ${event.messageId} on ${sessionKey}; aborting`);
|
|
57924
57976
|
try {
|
|
57925
57977
|
this.opts.dispatchAdapter.abortDispatch?.(sessionKey);
|
|
57926
57978
|
} catch (err) {
|
|
57927
57979
|
this.opts.log?.warn(`abortDispatch threw for ${sessionKey}: ${String(err)}`);
|
|
57928
57980
|
}
|
|
57929
|
-
}
|
|
57981
|
+
});
|
|
57930
57982
|
let binding = this.sessionBindings.get(sessionKey);
|
|
57931
57983
|
let inputStepsCreated = false;
|
|
57932
57984
|
let turnHandle;
|
|
@@ -57947,8 +57999,10 @@ var ParallAgentGateway = class {
|
|
|
57947
57999
|
bodyForAgent,
|
|
57948
58000
|
sessionKey,
|
|
57949
58001
|
context: dispatchContext,
|
|
57950
|
-
inputLifecycle
|
|
58002
|
+
inputLifecycle,
|
|
58003
|
+
noteActivity: dispatchDeadline.touch
|
|
57951
58004
|
})) {
|
|
58005
|
+
dispatchDeadline.touch();
|
|
57952
58006
|
if (runtimeEvent.type === "runtime_session") {
|
|
57953
58007
|
const priorAgentSessionId = binding?.agentSessionId;
|
|
57954
58008
|
binding = await this.bindRuntimeSession(sessionKey, runtimeEvent, contextFilePath, laneContextFilePath2);
|
|
@@ -58085,8 +58139,7 @@ var ParallAgentGateway = class {
|
|
|
58085
58139
|
}
|
|
58086
58140
|
throw err;
|
|
58087
58141
|
} finally {
|
|
58088
|
-
|
|
58089
|
-
clearTimeout(deadlineTimer);
|
|
58142
|
+
dispatchDeadline.dispose();
|
|
58090
58143
|
const metricsSnapshot = getDispatchMetrics(sessionKey);
|
|
58091
58144
|
const durationMs = metricsSnapshot ? Date.now() - metricsSnapshot.started_at : 0;
|
|
58092
58145
|
const effectiveOutcome = turnOutcomeEvent?.outcome ?? (dispatchError || sawErrorEvent ? "runtime_crash" : "ok");
|
|
@@ -62457,10 +62510,17 @@ function formatCommand(command) {
|
|
|
62457
62510
|
|
|
62458
62511
|
// ts/codex-agent/dist/turn-sink.js
|
|
62459
62512
|
var TurnSink = class {
|
|
62513
|
+
noteActivity;
|
|
62460
62514
|
mapper = new EventMapper();
|
|
62461
62515
|
queue = [];
|
|
62462
62516
|
resolver = null;
|
|
62463
62517
|
closed = false;
|
|
62518
|
+
constructor(noteActivity) {
|
|
62519
|
+
this.noteActivity = noteActivity;
|
|
62520
|
+
}
|
|
62521
|
+
touchActivity() {
|
|
62522
|
+
this.noteActivity?.();
|
|
62523
|
+
}
|
|
62464
62524
|
push(envelope) {
|
|
62465
62525
|
if (this.closed)
|
|
62466
62526
|
return;
|
|
@@ -62611,13 +62671,13 @@ var CodexAppServerAdapter = class {
|
|
|
62611
62671
|
if (turnId && this.client && !this.client.isDisposed()) {
|
|
62612
62672
|
this.client.sendRequest("turn/interrupt", { threadId, turnId }).catch((err) => this.opts.log?.warn?.(`turn/interrupt failed: ${errToString2(err)}`));
|
|
62613
62673
|
}
|
|
62614
|
-
sink.push({ kind: "error", message: "dispatch deadline exceeded" });
|
|
62674
|
+
sink.push({ kind: "error", message: "dispatch inactivity deadline exceeded" });
|
|
62615
62675
|
sink.close();
|
|
62616
62676
|
}
|
|
62617
62677
|
hasPendingInjections(sessionKey) {
|
|
62618
62678
|
return (this.pendingInjections.get(sessionKey) ?? 0) > 0;
|
|
62619
62679
|
}
|
|
62620
|
-
async *dispatch({ event, bodyForAgent, sessionKey, context: context2 }) {
|
|
62680
|
+
async *dispatch({ event, bodyForAgent, sessionKey, context: context2, noteActivity }) {
|
|
62621
62681
|
const pending = this.pendingInjections.get(sessionKey) ?? 0;
|
|
62622
62682
|
if (pending > 0) {
|
|
62623
62683
|
this.pendingInjections.delete(sessionKey);
|
|
@@ -62683,7 +62743,7 @@ var CodexAppServerAdapter = class {
|
|
|
62683
62743
|
}
|
|
62684
62744
|
break;
|
|
62685
62745
|
}
|
|
62686
|
-
const sink = new TurnSink();
|
|
62746
|
+
const sink = new TurnSink(noteActivity);
|
|
62687
62747
|
this.setActiveTurn(threadId, sink, log2);
|
|
62688
62748
|
const groupKey = randomUUID2();
|
|
62689
62749
|
let sawTurnEnd = false;
|
|
@@ -63197,6 +63257,7 @@ var CodexAppServerAdapter = class {
|
|
|
63197
63257
|
}
|
|
63198
63258
|
return;
|
|
63199
63259
|
}
|
|
63260
|
+
sink.touchActivity();
|
|
63200
63261
|
for (const event of sink.mapper.map(method, params)) {
|
|
63201
63262
|
sink.push({ kind: "runtime", event });
|
|
63202
63263
|
}
|
package/bundle/parall-daemon.js
CHANGED
|
@@ -3657,6 +3657,13 @@ var init_gateway_lane_flow = __esm({
|
|
|
3657
3657
|
}
|
|
3658
3658
|
});
|
|
3659
3659
|
|
|
3660
|
+
// ts/agent-core/dist/dispatch-inactivity-deadline.js
|
|
3661
|
+
var init_dispatch_inactivity_deadline = __esm({
|
|
3662
|
+
"ts/agent-core/dist/dispatch-inactivity-deadline.js"() {
|
|
3663
|
+
"use strict";
|
|
3664
|
+
}
|
|
3665
|
+
});
|
|
3666
|
+
|
|
3660
3667
|
// ts/agent-core/dist/routing.js
|
|
3661
3668
|
var init_routing = __esm({
|
|
3662
3669
|
"ts/agent-core/dist/routing.js"() {
|
|
@@ -30263,6 +30270,7 @@ var init_gateway_base = __esm({
|
|
|
30263
30270
|
init_dispatch_adapter();
|
|
30264
30271
|
init_gateway_lane_flow();
|
|
30265
30272
|
init_lane_ledger();
|
|
30273
|
+
init_dispatch_inactivity_deadline();
|
|
30266
30274
|
init_routing();
|
|
30267
30275
|
init_redact();
|
|
30268
30276
|
init_step_persister();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parall/daemon",
|
|
3
|
-
"version": "1.55.
|
|
3
|
+
"version": "1.55.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/claude-agent": "1.55.
|
|
38
|
-
"@parall/
|
|
39
|
-
"@parall/
|
|
40
|
-
"@parall/agent
|
|
36
|
+
"@parall/agent-core": "1.55.2",
|
|
37
|
+
"@parall/claude-agent": "1.55.2",
|
|
38
|
+
"@parall/openclaw-agent": "1.55.2",
|
|
39
|
+
"@parall/sdk": "1.55.2",
|
|
40
|
+
"@parall/codex-agent": "1.55.2"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "^22.0.0",
|