@sema-agent/core 1.312.0 → 1.314.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.
Files changed (33) hide show
  1. package/dist/agents/subagent.d.ts.map +1 -1
  2. package/dist/agents/subagent.js +8 -0
  3. package/dist/agents/subagent.js.map +1 -1
  4. package/dist/core/checkpoint-store.d.ts +5 -1
  5. package/dist/core/checkpoint-store.d.ts.map +1 -1
  6. package/dist/core/checkpoint-store.js +8 -1
  7. package/dist/core/checkpoint-store.js.map +1 -1
  8. package/dist/core/runner/prepare-task.d.ts +2 -0
  9. package/dist/core/runner/prepare-task.d.ts.map +1 -1
  10. package/dist/core/runner/prepare-task.js +30 -7
  11. package/dist/core/runner/prepare-task.js.map +1 -1
  12. package/dist/core/runner/runtask.d.ts.map +1 -1
  13. package/dist/core/runner/runtask.js +32 -10
  14. package/dist/core/runner/runtask.js.map +1 -1
  15. package/dist/core/runner/tool-disclosure.d.ts +1 -0
  16. package/dist/core/runner/tool-disclosure.d.ts.map +1 -1
  17. package/dist/core/runner/tool-disclosure.js +2 -0
  18. package/dist/core/runner/tool-disclosure.js.map +1 -1
  19. package/dist/core/types.d.ts +5 -0
  20. package/dist/core/types.d.ts.map +1 -1
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/orchestration/run-workflow-tool.d.ts +2 -0
  26. package/dist/orchestration/run-workflow-tool.d.ts.map +1 -1
  27. package/dist/orchestration/run-workflow-tool.js +19 -1
  28. package/dist/orchestration/run-workflow-tool.js.map +1 -1
  29. package/dist/prompt-assembly/explain.d.ts +14 -0
  30. package/dist/prompt-assembly/explain.d.ts.map +1 -1
  31. package/dist/prompt-assembly/explain.js +17 -0
  32. package/dist/prompt-assembly/explain.js.map +1 -1
  33. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runtask.d.ts","sourceRoot":"","sources":["../../../src/core/runner/runtask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtask.d.ts","sourceRoot":"","sources":["../../../src/core/runner/runtask.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AgentHarness, DEFAULT_COMPACTION_SETTINGS, uuidv7 } from "../../internal/harness.js";
2
- import { CheckpointError, BINDING_CHECKPOINT_VERSION, checkpointVersionOf, MAX_SUPPORTED_CHECKPOINT_VERSION, remainingBudgetMicroUsd, validatePendingSteer, winnerFromOutcome, } from "../checkpoint-store.js";
2
+ import { CheckpointError, BINDING_CHECKPOINT_VERSION, checkpointVersionOf, MAX_SUPPORTED_CHECKPOINT_VERSION, remainingBudgetMicroUsd, remainingWalltimeMs, validatePendingSteer, winnerFromOutcome, } from "../checkpoint-store.js";
3
3
  import { effectiveCushionMs, estimateCycleMs, hasRealContent, minLiveWriteoutWindowMs, recordCallSample, recordToolCycleSample, recordToolSample, recordTtftSample, softExecDeadlineMs, writeoutCushionMs } from "./call-cap.js";
4
4
  import { engineVersion } from "../version.js";
5
5
  import { eventDefaultOn } from "../../prompt-assembly/event-registry.js";
@@ -705,7 +705,7 @@ export class Runner {
705
705
  }
706
706
  onReady({ harness: prepared.harness, abortController: prepared.abortController });
707
707
  const stats = { turns: 0, tokens: 0, toolCalls: 0, promptTokens: 0, cachedTokens: 0, cacheWriteTokens: 0, cacheWriteTokensLong: 0, outputTokens: 0, costUsd: 0, costMicroUsd: 0 };
708
- prepared.liveSpendRef.get = () => ({ costMicroUsd: stats.costMicroUsd, tokens: stats.tokens, turns: stats.turns });
708
+ prepared.liveSpendRef.get = () => ({ costMicroUsd: stats.costMicroUsd, tokens: stats.tokens, turns: stats.turns, walltimeMs: Math.round(performance.now() - taskStartMonotonic) });
709
709
  if (resume &&
710
710
  resume.cp.suspendedAt !== undefined &&
711
711
  (resume.cp.gate.kind === "human" ||
@@ -972,13 +972,22 @@ export class Runner {
972
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
+ const sliceWindowWalltimeMs = spec.limits?.timeoutSec ? spec.limits.timeoutSec * 1000 : undefined;
976
+ const remainingWalltimeBudgetMs = prepared.resourceLedger?.totalWalltimeSec !== undefined
977
+ ? remainingWalltimeMs(prepared.resourceLedger)
978
+ : spec.resourceSuspend?.totalWalltimeSec !== undefined
979
+ ? Math.max(0, spec.resourceSuspend.totalWalltimeSec * 1000 - (prepared.resourceLedger?.spentWalltimeMs ?? 0))
980
+ : undefined;
981
+ const effectiveTimeoutMs = sliceWindowWalltimeMs !== undefined && remainingWalltimeBudgetMs !== undefined
982
+ ? Math.min(sliceWindowWalltimeMs, remainingWalltimeBudgetMs)
983
+ : (sliceWindowWalltimeMs ?? remainingWalltimeBudgetMs);
984
+ const walltimeDeadlineMs = effectiveTimeoutMs !== undefined ? taskStart + effectiveTimeoutMs : undefined;
985
+ const walltimeMonotonicDeadline = effectiveTimeoutMs !== undefined ? taskStartMonotonic + effectiveTimeoutMs : undefined;
977
986
  if (prepared.callCapRef && prepared.suspendForResource === undefined && walltimeDeadlineMs !== undefined) {
978
987
  prepared.callCapRef.deadlineMs = walltimeDeadlineMs;
979
988
  if (spec.limits?.gracefulFinalize !== false) {
980
- prepared.callCapRef.cushionMs = writeoutCushionMs(spec.limits.timeoutSec * 1000);
981
- prepared.callCapRef.budgetMs = spec.limits.timeoutSec * 1000;
989
+ prepared.callCapRef.cushionMs = writeoutCushionMs(effectiveTimeoutMs);
990
+ prepared.callCapRef.budgetMs = effectiveTimeoutMs;
982
991
  }
983
992
  }
984
993
  let finalizeInjected = false;
@@ -986,7 +995,7 @@ export class Runner {
986
995
  const nudgeSchedule = [];
987
996
  {
988
997
  const conf = spec.limits?.deadlineNudge;
989
- const budgetSec = spec.limits?.timeoutSec;
998
+ const budgetSec = effectiveTimeoutMs !== undefined ? effectiveTimeoutMs / 1000 : undefined;
990
999
  if (conf !== false && budgetSec && budgetSec > 0) {
991
1000
  const [a, b] = conf?.at ?? [0.8, 0.95];
992
1001
  if (a > 0 && a < 1) {
@@ -1802,7 +1811,7 @@ export class Runner {
1802
1811
  : walltimeHit
1803
1812
  ? "walltime"
1804
1813
  : "turns";
1805
- const sliceSpend = { costMicroUsd: stats.costMicroUsd, tokens: stats.tokens, turns: stats.turns };
1814
+ const sliceSpend = { costMicroUsd: stats.costMicroUsd, tokens: stats.tokens, turns: stats.turns, walltimeMs: Math.round(performance.now() - taskStartMonotonic) };
1806
1815
  if (await prepared.suspendForResource(reason, sliceSpend)) {
1807
1816
  turnsExceeded = false;
1808
1817
  budgetHit = undefined;
@@ -2254,7 +2263,8 @@ export class Runner {
2254
2263
  throw e;
2255
2264
  }
2256
2265
  if (resume) {
2257
- if (resume.outcome.gate !== "wake") {
2266
+ const walltimeExhaustedResume = effectiveTimeoutMs !== undefined && effectiveTimeoutMs <= 0;
2267
+ if (!walltimeExhaustedResume && resume.outcome.gate !== "wake") {
2258
2268
  await this.applyResumeDecision(prepared, resume, (e) => queue.push(e), emitCommitted, (toolName, details) => {
2259
2269
  if (attachState === undefined)
2260
2270
  return;
@@ -2265,7 +2275,13 @@ export class Runner {
2265
2275
  reduceToolEnd(attachState, details);
2266
2276
  }, (toolCallId) => startedToolCallIds.add(toolCallId));
2267
2277
  }
2268
- if (maxCostMicroUsd !== undefined && maxCostMicroUsd <= 0) {
2278
+ if (walltimeExhaustedResume) {
2279
+ timeout.fired = true;
2280
+ timeout.clear();
2281
+ void prepared.harness.abort();
2282
+ prepared.abortController.abort();
2283
+ }
2284
+ else if (maxCostMicroUsd !== undefined && maxCostMicroUsd <= 0) {
2269
2285
  budgetHit = "exceeded";
2270
2286
  }
2271
2287
  else {
@@ -2358,6 +2374,12 @@ export class Runner {
2358
2374
  else if (precallCeilingMicroUsd !== undefined && precallMicroUsd > precallCeilingMicroUsd) {
2359
2375
  budgetHit = "precall";
2360
2376
  }
2377
+ else if (effectiveTimeoutMs !== undefined && effectiveTimeoutMs <= 0) {
2378
+ timeout.fired = true;
2379
+ timeout.clear();
2380
+ void prepared.harness.abort();
2381
+ prepared.abortController.abort();
2382
+ }
2361
2383
  else {
2362
2384
  const images = spec.images
2363
2385
  ? await Promise.all(spec.images.map((img) => toImageContent(img, this.deps.allowImageUrl)))