@sema-agent/server 1.229.0 → 1.231.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 (34) hide show
  1. package/dist/http/server.d.ts +4 -0
  2. package/dist/http/server.d.ts.map +1 -1
  3. package/dist/http/server.js +266 -19
  4. package/dist/http/server.js.map +1 -1
  5. package/dist/main.js +31 -1
  6. package/dist/main.js.map +1 -1
  7. package/dist/plugins/caching-session-store.d.ts +4 -0
  8. package/dist/plugins/caching-session-store.d.ts.map +1 -1
  9. package/dist/plugins/caching-session-store.js +3 -0
  10. package/dist/plugins/caching-session-store.js.map +1 -1
  11. package/dist/plugins/local-session-store.d.ts +4 -0
  12. package/dist/plugins/local-session-store.d.ts.map +1 -1
  13. package/dist/plugins/local-session-store.js +9 -0
  14. package/dist/plugins/local-session-store.js.map +1 -1
  15. package/dist/plugins/pg-session-storage.d.ts +4 -0
  16. package/dist/plugins/pg-session-storage.d.ts.map +1 -1
  17. package/dist/plugins/pg-session-storage.js +6 -0
  18. package/dist/plugins/pg-session-storage.js.map +1 -1
  19. package/dist/plugins/tidb-session-store.d.ts +4 -0
  20. package/dist/plugins/tidb-session-store.d.ts.map +1 -1
  21. package/dist/plugins/tidb-session-store.js +6 -0
  22. package/dist/plugins/tidb-session-store.js.map +1 -1
  23. package/dist/security.d.ts +4 -0
  24. package/dist/security.d.ts.map +1 -1
  25. package/dist/security.js.map +1 -1
  26. package/dist/session-watch.d.ts +27 -0
  27. package/dist/session-watch.d.ts.map +1 -0
  28. package/dist/session-watch.js +134 -0
  29. package/dist/session-watch.js.map +1 -0
  30. package/dist/task-settings.d.ts +5 -2
  31. package/dist/task-settings.d.ts.map +1 -1
  32. package/dist/task-settings.js +37 -8
  33. package/dist/task-settings.js.map +1 -1
  34. package/package.json +2 -2
@@ -100,6 +100,10 @@ export interface ServiceDeps {
100
100
  toolApproval?: ToolApprovalCoordinator;
101
101
  sendUserFile?: import("../capabilities/send-user-file-tool.js").SendUserFileEmitter;
102
102
  sendFileLedger?: import("../plugins/send-file-ledger.js").SendFileLedger;
103
+ sessionWatch?: import("../session-watch.js").SessionWatchRegistry;
104
+ sessionEventsMaxConnections?: number;
105
+ sessionEventsHeartbeatMs?: number;
106
+ sessionEventsStallMs?: number;
103
107
  capabilities?: Record<string, unknown>;
104
108
  restartState?: () => RestartSignal | undefined;
105
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
@@ -158,6 +158,9 @@ const WORKFLOW_AGENT_STEER_RE = /^\/v1\/workflows\/([^/]+)\/agents\/([^/]+)\/ste
158
158
  const RUN_SUBAGENT_STEER_RE = /^\/v1\/runs\/([^/]+)\/subagents\/([^/]+)\/steer$/;
159
159
  const RUN_SUBAGENT_RESUME_RE = /^\/v1\/runs\/([^/]+)\/subagents\/([^/]+)\/resume$/;
160
160
  const HAND_TOOL_NAMES = Object.keys(HAND_TOOL_EFFECTS);
161
+ function isCheckpointReopenedFailure(r) {
162
+ return r.status === "failed" && (r.errorCode === "resume.env_failed" || r.errorCode === "resume.tool_unavailable");
163
+ }
161
164
  function gatedPrincipal(req, config) {
162
165
  if (bearerPresentedButUnverified(req, config))
163
166
  return undefined;
@@ -177,6 +180,8 @@ function bearerPresentedButUnverified(req, config) {
177
180
  }
178
181
  export function createHttpServer(deps) {
179
182
  const idemCache = new IdempotencyCache();
183
+ let sseConnections = 0;
184
+ let sseOwnerLookups = 0;
180
185
  const bakeSubmitLimiter = new RateLimiter(deps.config.imageBakes?.submitRateMax ?? 0, (deps.config.imageBakes?.submitRateWindowSec ?? 60) * 1000);
181
186
  const inflightRuns = new Map();
182
187
  const cancelledViaVerb = new Set();
@@ -581,6 +586,7 @@ export function createHttpServer(deps) {
581
586
  artifacts: Boolean(deps.runStore),
582
587
  approvals: Boolean(deps.checkpointStore),
583
588
  sessions: Boolean(deps.sessionAudit),
589
+ sessionEvents: Boolean(deps.sessionWatch && deps.sessionStorage?.getLeafId && deps.sessionStorage?.ownerOf),
584
590
  leader: Boolean(deps.leaderEndpoint),
585
591
  memory: false,
586
592
  memoryWrite: false,
@@ -3013,21 +3019,37 @@ export function createHttpServer(deps) {
3013
3019
  {
3014
3020
  const hm = req.method === "GET" ? /^\/v1\/sessions\/([^/]+)\/head$/.exec(url) : null;
3015
3021
  if (hm) {
3016
- const getLeafId = deps.sessionStorage?.getLeafId;
3022
+ const getLeafId = deps.sessionStorage?.getLeafId?.bind(deps.sessionStorage);
3017
3023
  const ownerOf = deps.sessionStorage?.ownerOf?.bind(deps.sessionStorage);
3018
3024
  if (!getLeafId || !ownerOf) {
3019
3025
  sendJson(res, 501, { error: "session head probe requires a durable session store (SESSION_BACKEND=tidb|pg|local)" });
3020
3026
  return;
3021
3027
  }
3022
3028
  const headSession = decodeURIComponent(hm[1]);
3023
- const owner = await ownerOf(headSession);
3024
- if (owner === undefined) {
3025
- sendJson(res, 404, { error: "session not found" });
3026
- return;
3029
+ const getHead = deps.sessionStorage?.getHead?.bind(deps.sessionStorage);
3030
+ let owner;
3031
+ let leafId;
3032
+ if (getHead) {
3033
+ const head = await getHead(headSession);
3034
+ if (head === undefined) {
3035
+ sendJson(res, 404, { error: "session not found" });
3036
+ return;
3037
+ }
3038
+ owner = head.owner;
3039
+ if (!runOwnerOk(req, res, owner ?? null))
3040
+ return;
3041
+ leafId = head.leafId;
3042
+ }
3043
+ else {
3044
+ owner = await ownerOf(headSession);
3045
+ if (owner === undefined) {
3046
+ sendJson(res, 404, { error: "session not found" });
3047
+ return;
3048
+ }
3049
+ if (!runOwnerOk(req, res, owner ?? null))
3050
+ return;
3051
+ leafId = await getLeafId(headSession);
3027
3052
  }
3028
- if (!runOwnerOk(req, res, owner ?? null))
3029
- return;
3030
- const leafId = await getLeafId(headSession);
3031
3053
  const etag = `"${leafId ?? "empty"}"`;
3032
3054
  if (req.headers["if-none-match"] === etag) {
3033
3055
  res.writeHead(304, { etag }).end();
@@ -3038,6 +3060,195 @@ export function createHttpServer(deps) {
3038
3060
  return;
3039
3061
  }
3040
3062
  }
3063
+ {
3064
+ const em = req.method === "GET" ? /^\/v1\/sessions\/([^/]+)\/events$/.exec(url) : null;
3065
+ if (em) {
3066
+ const ownerOf = deps.sessionStorage?.ownerOf?.bind(deps.sessionStorage);
3067
+ const watch = deps.sessionWatch;
3068
+ if (!deps.sessionStorage?.getLeafId || !ownerOf || !watch) {
3069
+ sendJson(res, 501, { error: "session events require a durable session store (SESSION_BACKEND=tidb|pg|local)" });
3070
+ return;
3071
+ }
3072
+ const evSession = decodeURIComponent(em[1]);
3073
+ if (sseConnections >= (deps.sessionEventsMaxConnections ?? 256)) {
3074
+ res.writeHead(503, { "retry-after": "5", "content-type": "application/json" });
3075
+ res.end(JSON.stringify({ error: "session-events connection cap reached — fall back to /head polling" }));
3076
+ return;
3077
+ }
3078
+ sseConnections++;
3079
+ let hb;
3080
+ let unsubscribe;
3081
+ let closed = false;
3082
+ const cleanup = () => {
3083
+ if (closed)
3084
+ return;
3085
+ closed = true;
3086
+ sseConnections--;
3087
+ if (hb)
3088
+ clearInterval(hb);
3089
+ unsubscribe?.();
3090
+ };
3091
+ res.on("close", cleanup);
3092
+ req.on("close", cleanup);
3093
+ try {
3094
+ const stallBound = deps.sessionEventsStallMs ?? 60_000;
3095
+ if (sseOwnerLookups >= 64) {
3096
+ cleanup();
3097
+ res.writeHead(503, { "retry-after": "5", "content-type": "application/json" });
3098
+ res.end(JSON.stringify({ error: "session-events owner-lookup concurrency cap — retry" }));
3099
+ return;
3100
+ }
3101
+ sseOwnerLookups++;
3102
+ const ownerP = ownerOf(evSession);
3103
+ void ownerP.catch(() => undefined).then(() => { sseOwnerLookups--; });
3104
+ let stallTimer;
3105
+ let owner;
3106
+ try {
3107
+ owner = await Promise.race([
3108
+ ownerP,
3109
+ new Promise((r) => { stallTimer = setTimeout(() => r("__stall__"), stallBound); stallTimer.unref?.(); }),
3110
+ ]);
3111
+ }
3112
+ finally {
3113
+ if (stallTimer)
3114
+ clearTimeout(stallTimer);
3115
+ }
3116
+ if (closed)
3117
+ return;
3118
+ if (owner === "__stall__") {
3119
+ cleanup();
3120
+ res.writeHead(503, { "retry-after": "5", "content-type": "application/json" });
3121
+ res.end(JSON.stringify({ error: "session-events owner lookup stalled — retry" }));
3122
+ return;
3123
+ }
3124
+ if (owner === undefined) {
3125
+ cleanup();
3126
+ sendJson(res, 404, { error: "session not found" });
3127
+ return;
3128
+ }
3129
+ if (!runOwnerOk(req, res, owner ?? null)) {
3130
+ cleanup();
3131
+ return;
3132
+ }
3133
+ const q = new URL(req.url ?? url, "http://x").searchParams;
3134
+ const lastLeafId = q.get("lastLeafId");
3135
+ let first = true;
3136
+ let lastAccepted;
3137
+ let lastWritten;
3138
+ let writeBlocked = false;
3139
+ let blockedAt = 0;
3140
+ let pendingHead;
3141
+ const stallMs = deps.sessionEventsStallMs ?? 60_000;
3142
+ const writeRaw = (chunk) => {
3143
+ if (closed)
3144
+ return;
3145
+ try {
3146
+ const okW = res.write(chunk);
3147
+ if (!okW && !writeBlocked) {
3148
+ writeBlocked = true;
3149
+ blockedAt = Date.now();
3150
+ res.once("drain", () => {
3151
+ writeBlocked = false;
3152
+ const p = pendingHead;
3153
+ pendingHead = undefined;
3154
+ if (p && !closed && p.v !== lastWritten)
3155
+ doWrite(p.v);
3156
+ });
3157
+ }
3158
+ }
3159
+ catch { }
3160
+ };
3161
+ const doWrite = (leafId) => {
3162
+ lastWritten = leafId;
3163
+ writeRaw(`event: head\ndata: ${JSON.stringify({ sessionId: evSession, leafId })}\n\n`);
3164
+ };
3165
+ const emit = (leafId) => {
3166
+ if (closed || leafId === lastAccepted)
3167
+ return;
3168
+ lastAccepted = leafId;
3169
+ const suppress = first && lastLeafId !== null && lastLeafId === (leafId ?? "null");
3170
+ first = false;
3171
+ if (suppress) {
3172
+ lastWritten = leafId;
3173
+ return;
3174
+ }
3175
+ if (writeBlocked) {
3176
+ pendingHead = { v: leafId };
3177
+ if (Date.now() - blockedAt > stallMs) {
3178
+ cleanup();
3179
+ try {
3180
+ res.end();
3181
+ }
3182
+ catch { }
3183
+ }
3184
+ return;
3185
+ }
3186
+ doWrite(leafId);
3187
+ };
3188
+ let started = false;
3189
+ let preVal;
3190
+ const onHead = (leafId) => {
3191
+ if (!started)
3192
+ preVal = { v: leafId };
3193
+ else
3194
+ emit(leafId);
3195
+ };
3196
+ const onEnd = () => { cleanup(); try {
3197
+ res.end();
3198
+ }
3199
+ catch { } };
3200
+ unsubscribe = watch.subscribe(evSession, owner ?? null, onHead, onEnd);
3201
+ if (!unsubscribe) {
3202
+ cleanup();
3203
+ res.writeHead(503, { "retry-after": "5", "content-type": "application/json" });
3204
+ res.end(JSON.stringify({ error: "session-events probe cap reached — fall back to /head polling" }));
3205
+ return;
3206
+ }
3207
+ res.writeHead(200, { "content-type": "text/event-stream", "cache-control": "no-cache, no-transform", connection: "keep-alive", "x-accel-buffering": "no" });
3208
+ writeRaw(": connected\n\n");
3209
+ started = true;
3210
+ if (preVal !== undefined)
3211
+ emit(preVal.v);
3212
+ const hbMs = deps.sessionEventsHeartbeatMs ?? 25_000;
3213
+ let ownerCheckPending = false;
3214
+ let ownerCheckStartedAt = 0;
3215
+ hb = setInterval(() => {
3216
+ if (closed)
3217
+ return;
3218
+ if (writeBlocked && Date.now() - blockedAt > stallMs) {
3219
+ onEnd();
3220
+ return;
3221
+ }
3222
+ if (!writeBlocked)
3223
+ writeRaw(": hb\n\n");
3224
+ if (ownerCheckPending) {
3225
+ if (Date.now() - ownerCheckStartedAt > stallMs)
3226
+ onEnd();
3227
+ return;
3228
+ }
3229
+ ownerCheckPending = true;
3230
+ ownerCheckStartedAt = Date.now();
3231
+ void ownerOf(evSession).then((o) => {
3232
+ ownerCheckPending = false;
3233
+ if (!closed && o !== owner)
3234
+ onEnd();
3235
+ }).catch(() => { ownerCheckPending = false; });
3236
+ }, hbMs);
3237
+ hb.unref?.();
3238
+ }
3239
+ catch (e) {
3240
+ cleanup();
3241
+ if (!res.headersSent)
3242
+ sendJson(res, 500, { error: `session events failed: ${e instanceof Error ? e.message : "unknown"}` });
3243
+ else
3244
+ try {
3245
+ res.end();
3246
+ }
3247
+ catch { }
3248
+ }
3249
+ return;
3250
+ }
3251
+ }
3041
3252
  if (deps.sessionAudit && req.method === "GET") {
3042
3253
  const sm = /^\/v1\/sessions\/([^/]+)$/.exec(url);
3043
3254
  if (sm) {
@@ -4195,6 +4406,9 @@ export function createHttpServer(deps) {
4195
4406
  availableTools.add(name);
4196
4407
  if (deps.checkpointStore)
4197
4408
  availableTools.add("AskUserQuestion");
4409
+ if (spec.selfOrchestration === true && deps.config.selfOrchestrationEnabled) {
4410
+ availableTools.add("Workflow");
4411
+ }
4198
4412
  if (decision === "approve" && pendingToolCanon && !availableTools.has(pendingToolCanon)) {
4199
4413
  return {
4200
4414
  status: 422,
@@ -4245,6 +4459,18 @@ export function createHttpServer(deps) {
4245
4459
  fleetPub?.onTerminal(status);
4246
4460
  };
4247
4461
  let result;
4462
+ let reopenConfirmedPark = false;
4463
+ const confirmCheckpointReopened = async () => {
4464
+ const store = deps.checkpointStore;
4465
+ if (!store)
4466
+ return true;
4467
+ try {
4468
+ return (await store.findPendingTokenBySession(sessionId)) === token;
4469
+ }
4470
+ catch {
4471
+ return true;
4472
+ }
4473
+ };
4248
4474
  let resumeHeartbeat;
4249
4475
  let resumeManifestLease = 0;
4250
4476
  let resumeStreamRef;
@@ -4299,18 +4525,27 @@ export function createHttpServer(deps) {
4299
4525
  const vr = await resumeWithVerification(deps.runner, token, outcome, { ...taskConfig, signal: cancelCtrl.signal, preemptSignal: preemptCtrl.signal }, resumeObjective, { maxRounds: verifyRounds });
4300
4526
  let safe = stripCheckpointToken(vr);
4301
4527
  const reSuspended = vr.verification?.unverifiedReason === "suspended";
4528
+ const vrReopened = isCheckpointReopenedFailure(vr) && (await confirmCheckpointReopened());
4529
+ if (vrReopened)
4530
+ reopenConfirmedPark = true;
4302
4531
  if (taskId && deps.runStore) {
4303
4532
  const rs2 = deps.runStore;
4304
- let seq = (await rs2.maxSeq(taskId)) + 1;
4305
- const ap = (type, data) => rs2.appendEvent(taskId, seq++, type, data);
4306
- await appendPromptManifest(ap, deps.promptManifests, taskId);
4307
- if (reSuspended) {
4308
- await appendModelUsageDelta(ap, deps.modelUsage, taskId);
4309
- await ap("suspended", { gate: vr.checkpointGate ?? null });
4533
+ try {
4534
+ let seq = (await rs2.maxSeq(taskId)) + 1;
4535
+ const ap = (type, data) => rs2.appendEvent(taskId, seq++, type, data);
4536
+ await appendPromptManifest(ap, deps.promptManifests, taskId);
4537
+ if (reSuspended || vrReopened) {
4538
+ await appendModelUsageDelta(ap, deps.modelUsage, taskId);
4539
+ await ap("suspended", { gate: vr.checkpointGate ?? null, ...(vrReopened ? { reopened: vr.errorCode ?? null } : {}) });
4540
+ }
4541
+ else {
4542
+ safe = await attachModelUsage(safe, { append: ap, getEvents: (id, a) => rs2.getEvents(id, a), modelUsage: deps.modelUsage, taskId });
4543
+ await ap("done", { result: safe });
4544
+ }
4310
4545
  }
4311
- else {
4312
- safe = await attachModelUsage(safe, { append: ap, getEvents: (id, a) => rs2.getEvents(id, a), modelUsage: deps.modelUsage, taskId });
4313
- await ap("done", { result: safe });
4546
+ catch (e) {
4547
+ if (!vrReopened)
4548
+ throw e;
4314
4549
  }
4315
4550
  }
4316
4551
  if (reSuspended)
@@ -4469,6 +4704,16 @@ export function createHttpServer(deps) {
4469
4704
  await appendModelUsageDelta(append, deps.modelUsage, taskId);
4470
4705
  return r;
4471
4706
  }
4707
+ if (isCheckpointReopenedFailure(r) && (await confirmCheckpointReopened())) {
4708
+ reopenConfirmedPark = true;
4709
+ try {
4710
+ await append("suspended", { gate: null, reopened: r.errorCode ?? null });
4711
+ await appendModelUsageDelta(append, deps.modelUsage, taskId);
4712
+ }
4713
+ catch {
4714
+ }
4715
+ return r;
4716
+ }
4472
4717
  const safe = await attachModelUsage(stripCheckpointToken(r), { append, getEvents: (id, a) => rs.getEvents(id, a), modelUsage: deps.modelUsage, taskId });
4473
4718
  await append("done", { result: safe });
4474
4719
  if (taskConfig.suggestNextPrompts && safe.status === "completed") {
@@ -4541,21 +4786,23 @@ export function createHttpServer(deps) {
4541
4786
  resumeLegLive = false;
4542
4787
  }
4543
4788
  evictIfConflict(deps.runner, sessionId, result);
4789
+ const checkpointReopened = reopenConfirmedPark;
4544
4790
  if (taskId && deps.runStore) {
4545
- if (result.status === "suspended")
4791
+ if (result.status === "suspended" || checkpointReopened)
4546
4792
  await deps.runStore.setSuspended(taskId);
4547
4793
  else if (result.status === "needs_review")
4548
4794
  await deps.runStore.setNeedsReview(taskId);
4549
4795
  else
4550
4796
  await deps.runStore.setTerminal(taskId, result.status, stripCheckpointToken(result), result.errorMessage ?? null);
4551
4797
  }
4552
- settleFleet(result.status);
4798
+ settleFleet(checkpointReopened ? "suspended" : result.status);
4553
4799
  return {
4554
4800
  status: 200,
4555
4801
  body: {
4556
4802
  taskId, sessionId, status: result.status,
4557
4803
  ...(result.errorCode ? { errorCode: result.errorCode } : {}),
4558
4804
  ...(result.errorMessage ? { errorMessage: redactSecrets(result.errorMessage) } : {}),
4805
+ ...(checkpointReopened ? { retriable: true } : {}),
4559
4806
  },
4560
4807
  };
4561
4808
  }