@sema-agent/core 1.310.0 → 1.312.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/dist/core/runner/runtask.d.ts.map +1 -1
- package/dist/core/runner/runtask.js +26 -7
- package/dist/core/runner/runtask.js.map +1 -1
- package/dist/core/trace.d.ts +1 -0
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/loop-tick.d.ts +9 -0
- package/dist/tools/loop-tick.d.ts.map +1 -0
- package/dist/tools/loop-tick.js +88 -0
- package/dist/tools/loop-tick.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtask.d.ts","sourceRoot":"","sources":["../../../src/core/runner/runtask.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAQL,KAAK,UAAU,EAEf,KAAK,eAAe,EACpB,KAAK,YAAY,EAGjB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAgC,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQpF,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAavE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAyBlD,OAAO,KAAK,EAAE,eAAe,EAAsC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwBhJ,eAAO,MAAM,iBAAiB,OAAO,CAAC;AA4HtC,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC;AAGzE,UAAU,SAAS;IACjB,EAAE,EAAE,UAAU,CAAC;IAQf,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAMvH,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IASjD,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAgMD,qBAAa,MAAM;IACjB,OAAO,CAAC,IAAI,CAAa;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,OAAO,CAAC,YAAY,CAAoC;IAOxD,OAAO,CAAC,qBAAqB,CAA6B;IAK1D,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAqC;IAYjF,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA+E;IACxH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAQ;gBAElD,IAAI,EAAE,UAAU;IA+E5B,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAS3C,IAAI,YAAY,IAAI;QAAE,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;KAAE,CAU1G;IAOD,IAAI,YAAY,IAAI;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;KAAE,CAmDzF;YAGa,kBAAkB;IA4BhC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU;YA8gBzE,SAAS;
|
|
1
|
+
{"version":3,"file":"runtask.d.ts","sourceRoot":"","sources":["../../../src/core/runner/runtask.ts"],"names":[],"mappings":"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"}
|
|
@@ -749,6 +749,7 @@ export class Runner {
|
|
|
749
749
|
taskIdRef.sessionId = prepared.sessionId;
|
|
750
750
|
}
|
|
751
751
|
const taskStart = Date.now();
|
|
752
|
+
const taskStartMonotonic = performance.now();
|
|
752
753
|
void Promise.resolve(this.sessions.noteTaskRun?.(prepared.sessionId, taskId)).catch(() => { });
|
|
753
754
|
const recordDegraded = (info, toModel) => {
|
|
754
755
|
if (degraded !== undefined)
|
|
@@ -972,6 +973,7 @@ export class Runner {
|
|
|
972
973
|
});
|
|
973
974
|
}
|
|
974
975
|
const walltimeDeadlineMs = spec.limits?.timeoutSec ? taskStart + spec.limits.timeoutSec * 1000 : undefined;
|
|
976
|
+
const walltimeMonotonicDeadline = spec.limits?.timeoutSec ? taskStartMonotonic + spec.limits.timeoutSec * 1000 : undefined;
|
|
975
977
|
if (prepared.callCapRef && prepared.suspendForResource === undefined && walltimeDeadlineMs !== undefined) {
|
|
976
978
|
prepared.callCapRef.deadlineMs = walltimeDeadlineMs;
|
|
977
979
|
if (spec.limits?.gracefulFinalize !== false) {
|
|
@@ -980,6 +982,7 @@ export class Runner {
|
|
|
980
982
|
}
|
|
981
983
|
}
|
|
982
984
|
let finalizeInjected = false;
|
|
985
|
+
let walltimeSyncBackstopFired = false;
|
|
983
986
|
const nudgeSchedule = [];
|
|
984
987
|
{
|
|
985
988
|
const conf = spec.limits?.deadlineNudge;
|
|
@@ -1015,7 +1018,7 @@ export class Runner {
|
|
|
1015
1018
|
? ` After writing, if seconds permit, confirm the deliverable file actually EXISTS at the required path with your latest content.`
|
|
1016
1019
|
: "") +
|
|
1017
1020
|
`</system-reminder>`;
|
|
1018
|
-
const timeout = startTimeout(prepared.harness, prepared.abortController,
|
|
1021
|
+
const timeout = startTimeout(prepared.harness, prepared.abortController, walltimeMonotonicDeadline !== undefined ? walltimeMonotonicDeadline - performance.now() : undefined, prepared.suspendForResource !== undefined);
|
|
1019
1022
|
const parentToolCallId = internals?.parentToolCallId;
|
|
1020
1023
|
const ident = () => parentToolCallId !== undefined ? { eventId: uuidv7(), parentToolCallId, sourceTaskId: taskId } : { eventId: uuidv7() };
|
|
1021
1024
|
notificationIdent = ident;
|
|
@@ -1783,7 +1786,7 @@ export class Runner {
|
|
|
1783
1786
|
queue.push({ type: "steering_injected", source: "deadline_nudge", preview: due.text.slice(0, 220), ...ident() });
|
|
1784
1787
|
}
|
|
1785
1788
|
}
|
|
1786
|
-
const walltimeHit =
|
|
1789
|
+
const walltimeHit = walltimeMonotonicDeadline !== undefined && performance.now() >= walltimeMonotonicDeadline;
|
|
1787
1790
|
const preemptHit = spec.preemptSignal?.aborted === true;
|
|
1788
1791
|
if (preemptHit && !prepared.suspendForResource && !preemptIgnoredReported) {
|
|
1789
1792
|
preemptIgnoredReported = true;
|
|
@@ -1810,6 +1813,19 @@ export class Runner {
|
|
|
1810
1813
|
}
|
|
1811
1814
|
return undefined;
|
|
1812
1815
|
}
|
|
1816
|
+
if (walltimeMonotonicDeadline !== undefined &&
|
|
1817
|
+
prepared.suspendForResource === undefined &&
|
|
1818
|
+
performance.now() >= walltimeMonotonicDeadline) {
|
|
1819
|
+
if (!timeout.fired) {
|
|
1820
|
+
timeout.fired = true;
|
|
1821
|
+
timeout.clear();
|
|
1822
|
+
timeout.latenessMs = Math.max(timeout.latenessMs ?? 0, performance.now() - walltimeMonotonicDeadline);
|
|
1823
|
+
walltimeSyncBackstopFired = true;
|
|
1824
|
+
void prepared.harness.abort();
|
|
1825
|
+
prepared.abortController.abort();
|
|
1826
|
+
}
|
|
1827
|
+
return undefined;
|
|
1828
|
+
}
|
|
1813
1829
|
if (prepared.reviewRequestRef.pending !== undefined) {
|
|
1814
1830
|
const { reason } = prepared.reviewRequestRef.pending;
|
|
1815
1831
|
prepared.reviewRequestRef.pending = undefined;
|
|
@@ -2602,6 +2618,7 @@ export class Runner {
|
|
|
2602
2618
|
...(timeout.latenessMs !== undefined && timeout.latenessMs > TIMER_LATENESS_REPORT_MS
|
|
2603
2619
|
? { timerLatenessMs: timeout.latenessMs }
|
|
2604
2620
|
: {}),
|
|
2621
|
+
...(walltimeSyncBackstopFired ? { walltimeSyncBackstop: true } : {}),
|
|
2605
2622
|
ts: Date.now(),
|
|
2606
2623
|
}));
|
|
2607
2624
|
setResult(result);
|
|
@@ -3280,17 +3297,19 @@ export function runTask(spec, deps) {
|
|
|
3280
3297
|
}
|
|
3281
3298
|
const WALLTIME_SUSPEND_GRACE_SEC = 120;
|
|
3282
3299
|
const TIMER_LATENESS_REPORT_MS = 5_000;
|
|
3283
|
-
function startTimeout(harness, abortController,
|
|
3300
|
+
function startTimeout(harness, abortController, remainingMs, softSuspendable = false) {
|
|
3284
3301
|
const state = { fired: false, clear: () => { } };
|
|
3285
|
-
if (
|
|
3286
|
-
const
|
|
3287
|
-
const scheduledAtMs = Date.now() +
|
|
3302
|
+
if (remainingMs !== undefined) {
|
|
3303
|
+
const hardMs = Math.max(0, remainingMs + (softSuspendable ? WALLTIME_SUSPEND_GRACE_SEC * 1000 : 0));
|
|
3304
|
+
const scheduledAtMs = Date.now() + hardMs;
|
|
3288
3305
|
const timer = setTimeout(() => {
|
|
3306
|
+
if (state.fired)
|
|
3307
|
+
return;
|
|
3289
3308
|
state.fired = true;
|
|
3290
3309
|
state.latenessMs = Math.max(0, Date.now() - scheduledAtMs);
|
|
3291
3310
|
abortController.abort();
|
|
3292
3311
|
void harness.abort();
|
|
3293
|
-
},
|
|
3312
|
+
}, hardMs);
|
|
3294
3313
|
timer.unref?.();
|
|
3295
3314
|
state.clear = () => clearTimeout(timer);
|
|
3296
3315
|
}
|