@migor/agentia 0.7.2 → 0.8.1

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 (82) hide show
  1. package/CHANGELOG.md +106 -1
  2. package/README.md +10 -6
  3. package/dist/AGENTS.md +55 -9
  4. package/dist/core/trace.d.ts +25 -0
  5. package/dist/core/trace.js +31 -0
  6. package/dist/core/trace.js.map +1 -1
  7. package/dist/engine/loop-result.d.ts +72 -0
  8. package/dist/engine/loop-result.js +80 -0
  9. package/dist/engine/loop-result.js.map +1 -0
  10. package/dist/engine/loop.d.ts +3 -40
  11. package/dist/engine/loop.js +37 -127
  12. package/dist/engine/loop.js.map +1 -1
  13. package/dist/engine/resume-input.d.ts +26 -0
  14. package/dist/engine/resume-input.js +39 -0
  15. package/dist/engine/resume-input.js.map +1 -0
  16. package/dist/engine/retry.d.ts +8 -0
  17. package/dist/engine/retry.js +10 -0
  18. package/dist/engine/retry.js.map +1 -1
  19. package/dist/engine/run-config.d.ts +28 -0
  20. package/dist/engine/run-config.js +75 -0
  21. package/dist/engine/run-config.js.map +1 -0
  22. package/dist/engine/span-scope.d.ts +48 -0
  23. package/dist/engine/span-scope.js +31 -0
  24. package/dist/engine/span-scope.js.map +1 -0
  25. package/dist/engine/stop-reason.d.ts +27 -0
  26. package/dist/engine/stop-reason.js +76 -0
  27. package/dist/engine/stop-reason.js.map +1 -0
  28. package/dist/engine/text.d.ts +10 -0
  29. package/dist/engine/text.js +6 -0
  30. package/dist/engine/text.js.map +1 -0
  31. package/dist/engine/tool-context.d.ts +32 -0
  32. package/dist/engine/tool-context.js +18 -0
  33. package/dist/engine/tool-context.js.map +1 -0
  34. package/dist/engine/tool-events.d.ts +42 -0
  35. package/dist/engine/tool-events.js +64 -0
  36. package/dist/engine/tool-events.js.map +1 -0
  37. package/dist/engine/turn-request.d.ts +24 -0
  38. package/dist/engine/turn-request.js +12 -0
  39. package/dist/engine/turn-request.js.map +1 -0
  40. package/dist/engine/turn.d.ts +4 -27
  41. package/dist/engine/turn.js +48 -158
  42. package/dist/engine/turn.js.map +1 -1
  43. package/dist/index.d.ts +4 -2
  44. package/dist/index.js +6 -2
  45. package/dist/index.js.map +1 -1
  46. package/dist/integrations/otlp.d.ts +1 -1
  47. package/dist/integrations/otlp.js +13 -15
  48. package/dist/integrations/otlp.js.map +1 -1
  49. package/dist/toolkit/skill.js +4 -1
  50. package/dist/toolkit/skill.js.map +1 -1
  51. package/dist/toolkit/subagent.js +6 -3
  52. package/dist/toolkit/subagent.js.map +1 -1
  53. package/dist/toolkit/tool.js +1 -0
  54. package/dist/toolkit/tool.js.map +1 -1
  55. package/dist/transport/approval-policy.d.ts +30 -0
  56. package/dist/transport/approval-policy.js +37 -0
  57. package/dist/transport/approval-policy.js.map +1 -0
  58. package/dist/transport/async.d.ts +0 -4
  59. package/dist/transport/async.js +40 -144
  60. package/dist/transport/async.js.map +1 -1
  61. package/dist/transport/drain-gate.d.ts +28 -0
  62. package/dist/transport/drain-gate.js +62 -0
  63. package/dist/transport/drain-gate.js.map +1 -0
  64. package/dist/transport/http-route.d.ts +55 -0
  65. package/dist/transport/http-route.js +72 -0
  66. package/dist/transport/http-route.js.map +1 -0
  67. package/dist/transport/http-shapes.d.ts +57 -0
  68. package/dist/transport/http-shapes.js +56 -0
  69. package/dist/transport/http-shapes.js.map +1 -0
  70. package/dist/transport/http.d.ts +5 -21
  71. package/dist/transport/http.js +176 -232
  72. package/dist/transport/http.js.map +1 -1
  73. package/dist/transport/resume-policy.d.ts +40 -0
  74. package/dist/transport/resume-policy.js +25 -0
  75. package/dist/transport/resume-policy.js.map +1 -0
  76. package/dist/transport/slot-pool.d.ts +24 -0
  77. package/dist/transport/slot-pool.js +43 -0
  78. package/dist/transport/slot-pool.js.map +1 -0
  79. package/dist/transport/task-waiters.d.ts +25 -0
  80. package/dist/transport/task-waiters.js +63 -0
  81. package/dist/transport/task-waiters.js.map +1 -0
  82. package/package.json +4 -3
@@ -1,5 +1,7 @@
1
1
  import { parseTraceparent } from '../core/trace.js';
2
2
  import { AsyncRunner, TaskApproveError } from './async.js';
3
+ import { parseApproveBody, toHttpBody, toTaskSubmitBody } from './http-shapes.js';
4
+ import { isPreAuthRoute, routeRequest } from './http-route.js';
3
5
  import { sseWriter } from './sse.js';
4
6
  import { TaskInputError, normalizeMessages } from '../engine/spec.js';
5
7
  /**
@@ -44,18 +46,6 @@ function sendPrometheus(res, body) {
44
46
  });
45
47
  res.end(body);
46
48
  }
47
- /** 把 app.run 的产物收成 HTTP 响应体(JSON 与 SSE 的 run.end 共用同一形状) */
48
- function toHttpBody(out) {
49
- return {
50
- runId: out.run.runId,
51
- status: out.run.status,
52
- stopReason: out.result.stopReason,
53
- finalText: out.result.finalText,
54
- typed: out.result.typed,
55
- trace: out.result.trace,
56
- error: out.result.error,
57
- };
58
- }
59
49
  /**
60
50
  * 读取 body 全文。两道兜底(原实现两者皆无):
61
51
  * - **maxBytes 上限**:超限立即停止累积并 resolve 成哨兵(调用方回 413)——
@@ -212,28 +202,32 @@ export function createHttpHandler(app, opts = {}) {
212
202
  const handler = async (req, res) => {
213
203
  const method = req.method ?? 'GET';
214
204
  const pathname = (req.url ?? '/').split('?')[0];
205
+ // 路由判定是**纯函数**(见 http-route.ts):这里只按判定结果去编排。
206
+ // 顺序陷阱写在那边的头注里,最要命的一条:免鉴权组(/healthz、/metrics)
207
+ // 连同它们自己的 405 都在鉴权**之前**回,其余一律**先鉴权再判方法/路径**。
208
+ const route = routeRequest(pathname, method, metricsProvider !== undefined);
215
209
  try {
216
- // 健康检查:不鉴权(探针带不了凭据)、停机中也回(探针要先能问到才有意义)
217
- if (pathname === '/healthz') {
218
- if (method !== 'GET') {
219
- methodNotAllowed(res, method, 'GET');
210
+ // 免鉴权组:健康检查(探针带不了凭据)与指标抓取(抓取端在集群内网),停机中也照回
211
+ // —— 探针要先能问到才有意义。它们的方法不符(405)同样在鉴权之前。
212
+ if (isPreAuthRoute(route)) {
213
+ if (route.kind === 'methodNotAllowed') {
214
+ methodNotAllowed(res, method, route.allowed);
220
215
  return;
221
216
  }
222
- sendJson(res, 200, {
223
- ok: true,
224
- inFlight: inFlightRuns + runner.inFlight,
225
- uptimeMs: Date.now() - startedAt,
226
- draining,
227
- });
228
- return;
229
- }
230
- // 指标:与 /healthz 同档(不鉴权、停机中仍可拉 —— 抓取端在集群内网)
231
- if (pathname === '/metrics' && metricsProvider) {
232
- if (method !== 'GET') {
233
- methodNotAllowed(res, method, 'GET');
217
+ if (route.kind === 'healthz') {
218
+ sendJson(res, 200, {
219
+ ok: true,
220
+ inFlight: inFlightRuns + runner.inFlight,
221
+ uptimeMs: Date.now() - startedAt,
222
+ draining,
223
+ });
234
224
  return;
235
225
  }
236
- sendPrometheus(res, typeof metricsProvider === 'function' ? metricsProvider() : metricsProvider.render());
226
+ // 指标:与 /healthz 同档(不鉴权、停机中仍可拉 —— 抓取端在集群内网)。
227
+ // `?.` 只为让类型收窄(这条分支只在配了 metrics 出口时可达),行为与原来一致。
228
+ sendPrometheus(res, typeof metricsProvider === 'function'
229
+ ? metricsProvider()
230
+ : (metricsProvider?.render() ?? ''));
237
231
  return;
238
232
  }
239
233
  // 鉴权缝:必须在读 body 之前(未通过即断开,body 一个字节都不收)
@@ -246,179 +240,163 @@ export function createHttpHandler(app, opts = {}) {
246
240
  return;
247
241
  }
248
242
  }
249
- if (pathname === '/run') {
250
- if (method !== 'POST') {
251
- methodNotAllowed(res, method, 'POST');
252
- return;
253
- }
254
- if (draining) {
255
- sendShuttingDown(req, res);
256
- return;
257
- }
258
- const input = await parseJsonBody(req, res, maxBodyBytes);
259
- if (input === PARSE_FAILED)
260
- return;
261
- let messages;
262
- try {
263
- messages = normalizeMessages(input);
264
- }
265
- catch (e) {
266
- sendJson(res, 400, { error: errMessage(e) });
267
- return;
268
- }
269
- // 并发闸门:body 已读完(连接可复用),只是暂时不给跑 —— 回 503 让调用方退避重试
270
- if (inFlightRuns >= maxConcurrentRuns) {
271
- res.setHeader('retry-after', RETRY_AFTER_SECONDS);
272
- sendJson(res, 503, {
273
- error: `并发 run 已达上限 ${maxConcurrentRuns},请稍后重试`,
274
- });
243
+ // 方法与路径已在 routeRequest 里判完,往下只剩编排
244
+ switch (route.kind) {
245
+ case 'methodNotAllowed':
246
+ methodNotAllowed(res, method, route.allowed);
275
247
  return;
276
- }
277
- inFlightRuns++;
278
- // 客户端中途断开 → 中止本次 run(省 token)。res 'close' 正常结束也会触发,
279
- // 故以 writableEnded 区分:只有响应还没写完才算「断开」。
280
- const runAc = new AbortController();
281
- const onClose = () => {
282
- if (!res.writableEnded)
283
- runAc.abort();
284
- };
285
- res.once('close', onClose);
286
- // 内容协商:`Accept: text/event-stream` → SSE 逐帧下发;否则一元 JSON(旧行为逐字不变)
287
- const wantsSse = String(req.headers.accept ?? '').includes('text/event-stream');
288
- // 入站链路(spec §9.2):W3C `traceparent` 头 → run 根的 links。
289
- // 畸形/缺头一律静默当作「没有上游上下文」(parseTraceparent 统一判定)——
290
- // 链路是观测行为,不该因为一个坏头把业务请求打成 400。
291
- const traceContext = parseTraceparent(headerValue(req, 'traceparent'));
292
- try {
293
- if (wantsSse) {
294
- const sse = sseWriter(res, {
295
- maxBufferedBytes: sseMaxBufferedBytes,
296
- // 下游积压超限 → 收口并中止本次 run(见 sseWriter 的背压说明)
297
- onBackpressure: () => runAc.abort(),
248
+ case 'run': {
249
+ if (draining) {
250
+ sendShuttingDown(req, res);
251
+ return;
252
+ }
253
+ const input = await parseJsonBody(req, res, maxBodyBytes);
254
+ if (input === PARSE_FAILED)
255
+ return;
256
+ let messages;
257
+ try {
258
+ messages = normalizeMessages(input);
259
+ }
260
+ catch (e) {
261
+ sendJson(res, 400, { error: errMessage(e) });
262
+ return;
263
+ }
264
+ // 并发闸门:body 已读完(连接可复用),只是暂时不给跑 —— 回 503 让调用方退避重试
265
+ if (inFlightRuns >= maxConcurrentRuns) {
266
+ res.setHeader('retry-after', RETRY_AFTER_SECONDS);
267
+ sendJson(res, 503, {
268
+ error: `并发 run 已达上限 ${maxConcurrentRuns},请稍后重试`,
298
269
  });
299
- const heartbeat = setInterval(() => sse.comment('ping'), 15_000);
300
- heartbeat.unref?.();
301
- // 登记收口函数:drain 时强制关闭(SSE 是长连,不关会把进程吊住)。
302
- // 收口必须同时 abort 对应 run:sse.close() → res.end() 后 writableEnded 同步
303
- // 变 true,上面的 onClose 守卫(`!writableEnded`)在 close 事件时不成立,
304
- // 只 close 不 abort 会让 run 在后台继续烧 token(与背压收口路径的
305
- // onBackpressure → abort 对齐;run 已正常结束时 abort 是无害 no-op)。
306
- const closeSse = () => {
307
- clearInterval(heartbeat);
270
+ return;
271
+ }
272
+ inFlightRuns++;
273
+ // 客户端中途断开 → 中止本次 run(省 token)。res 'close' 正常结束也会触发,
274
+ // 故以 writableEnded 区分:只有响应还没写完才算「断开」。
275
+ const runAc = new AbortController();
276
+ const onClose = () => {
277
+ if (!res.writableEnded)
308
278
  runAc.abort();
309
- sse.close();
310
- };
311
- openSse.add(closeSse);
312
- try {
313
- // rethrow:false —— 与 AsyncRunner 对齐:硬失败也以 run.end 下发(status/error 字段)
314
- const out = await app.run(messages, {
315
- rethrow: false,
316
- signal: runAc.signal,
317
- onText: (delta) => sse.event('text.delta', { text: delta }),
318
- ...(traceContext !== undefined ? { traceContext } : {}),
279
+ };
280
+ res.once('close', onClose);
281
+ // 内容协商:`Accept: text/event-stream` → SSE 逐帧下发;否则一元 JSON(旧行为逐字不变)
282
+ const wantsSse = String(req.headers.accept ?? '').includes('text/event-stream');
283
+ // 入站链路(spec §9.2):W3C `traceparent` 头 → run 根的 links。
284
+ // 畸形/缺头一律静默当作「没有上游上下文」(parseTraceparent 统一判定)——
285
+ // 链路是观测行为,不该因为一个坏头把业务请求打成 400。
286
+ const traceContext = parseTraceparent(headerValue(req, 'traceparent'));
287
+ try {
288
+ if (wantsSse) {
289
+ const sse = sseWriter(res, {
290
+ maxBufferedBytes: sseMaxBufferedBytes,
291
+ // 下游积压超限 → 收口并中止本次 run(见 sseWriter 的背压说明)
292
+ onBackpressure: () => runAc.abort(),
319
293
  });
320
- sse.event('run.end', toHttpBody(out));
321
- }
322
- catch (e) {
323
- // 流已开(200 与头已发出)→ 只能以 error 事件收尾,不能再改 HTTP 状态码
324
- sse.event('error', { message: errMessage(e) });
325
- }
326
- finally {
327
- openSse.delete(closeSse);
328
- closeSse();
294
+ const heartbeat = setInterval(() => sse.comment('ping'), 15_000);
295
+ heartbeat.unref?.();
296
+ // 登记收口函数:drain 时强制关闭(SSE 是长连,不关会把进程吊住)。
297
+ // 收口必须同时 abort 对应 run:sse.close() → res.end() 后 writableEnded 同步
298
+ // 变 true,上面的 onClose 守卫(`!writableEnded`)在 close 事件时不成立,
299
+ // 只 close 不 abort 会让 run 在后台继续烧 token(与背压收口路径的
300
+ // onBackpressure → abort 对齐;run 已正常结束时 abort 是无害 no-op)。
301
+ const closeSse = () => {
302
+ clearInterval(heartbeat);
303
+ runAc.abort();
304
+ sse.close();
305
+ };
306
+ openSse.add(closeSse);
307
+ try {
308
+ // rethrow:false —— 与 AsyncRunner 对齐:硬失败也以 run.end 下发(status/error 字段)
309
+ const out = await app.run(messages, {
310
+ rethrow: false,
311
+ signal: runAc.signal,
312
+ onText: (delta) => sse.event('text.delta', { text: delta }),
313
+ ...(traceContext !== undefined ? { traceContext } : {}),
314
+ });
315
+ sse.event('run.end', toHttpBody(out));
316
+ }
317
+ catch (e) {
318
+ // 流已开(200 与头已发出)→ 只能以 error 事件收尾,不能再改 HTTP 状态码
319
+ sse.event('error', { message: errMessage(e) });
320
+ }
321
+ finally {
322
+ openSse.delete(closeSse);
323
+ closeSse();
324
+ }
325
+ return;
329
326
  }
330
- return;
327
+ // rethrow:false —— 与 AsyncRunner 对齐:硬失败也以 status/error 字段返回 200
328
+ const out = await app.run(messages, {
329
+ rethrow: false,
330
+ signal: runAc.signal,
331
+ ...(traceContext !== undefined ? { traceContext } : {}),
332
+ });
333
+ sendJson(res, 200, toHttpBody(out));
334
+ }
335
+ finally {
336
+ res.off('close', onClose);
337
+ inFlightRuns--;
331
338
  }
332
- // rethrow:false —— 与 AsyncRunner 对齐:硬失败也以 status/error 字段返回 200
333
- const out = await app.run(messages, {
334
- rethrow: false,
335
- signal: runAc.signal,
336
- ...(traceContext !== undefined ? { traceContext } : {}),
337
- });
338
- sendJson(res, 200, toHttpBody(out));
339
- }
340
- finally {
341
- res.off('close', onClose);
342
- inFlightRuns--;
343
- }
344
- return;
345
- }
346
- if (pathname === '/tasks') {
347
- if (method !== 'POST') {
348
- methodNotAllowed(res, method, 'POST');
349
- return;
350
- }
351
- // 停机中不再接单(含直接 drain 了 runner 的情况);GET /tasks/<id> 不受影响
352
- if (draining || runner.isDraining) {
353
- sendShuttingDown(req, res);
354
- return;
355
- }
356
- const body = await parseJsonBody(req, res, maxBodyBytes);
357
- if (body === PARSE_FAILED)
358
- return;
359
- if (!body || typeof body !== 'object' || Array.isArray(body)) {
360
- sendJson(res, 400, { error: 'body 需为 { input, idempotencyKey?, options? }' });
361
339
  return;
362
340
  }
363
- const submitBody = body;
364
- // 入站链路(spec §9.2):body 显式给的 `options.traceContext` 优先,否则取
365
- // `traceparent` 头。它随 `spec.options` 落进 TaskRecord —— 所以**跨进程续跑**
366
- // 的那次 run(另一个进程 `resumePending` 接着跑)也带得上,关联不断链。
367
- const submitTrace = parseTraceparent(headerValue(req, 'traceparent'));
368
- let rec;
369
- try {
370
- rec = runner.submit(submitBody.input, {
371
- ...(submitBody.idempotencyKey !== undefined
372
- ? { idempotencyKey: submitBody.idempotencyKey }
373
- : {}),
374
- options: submitBody.options?.traceContext !== undefined
375
- ? submitBody.options
376
- : {
377
- ...submitBody.options,
378
- ...(submitTrace !== undefined ? { traceContext: submitTrace } : {}),
379
- },
380
- source: 'http',
381
- });
382
- }
383
- catch (e) {
384
- // `submit` 是同步的:入参校验失败与 store 落库故障从同一个 catch 出去。
385
- // 前者是调用方的错(400 + 原因),后者是服务端的错 —— 必须走与 500 路径同一套
386
- // `exposeErrors` 策略,否则一次磁盘/Redis 故障会被报成「你参数写错了」,
387
- // 并把内部错误消息原样回给调用方(500/401 路径都不这么干)。
388
- if (e instanceof TaskInputError) {
389
- sendJson(res, 400, { error: errMessage(e) });
390
- return;
391
- }
392
- // 上面的停机闸门与 `submit` 之间隔着一次 `await parseJsonBody`:读 body 期间
393
- // drain 可能刚开始,此时 submit 抛「正在优雅停机」。这是 503 而不是 500 ——
394
- // 调用方应该退避重试,跟闸门本身回的是同一句话。
395
- if (runner.isDraining) {
341
+ case 'submit': {
342
+ // 停机中不再接单(含直接 drain 了 runner 的情况);GET /tasks/<id> 不受影响
343
+ if (draining || runner.isDraining) {
396
344
  sendShuttingDown(req, res);
397
345
  return;
398
346
  }
399
- sendInternalError(res, e);
400
- return;
401
- }
402
- sendJson(res, 202, rec);
403
- return;
404
- }
405
- if (pathname.startsWith('/tasks/')) {
406
- const rest = pathname.slice('/tasks/'.length);
407
- // POST /tasks/<id>/approve(HITL):审批挂起的任务。drain 期间仍允许 ——
408
- // 与 GET 轮询同理由:挂起的任务只有人能推进,停机不该连「批准」也拒掉。
409
- if (rest.endsWith('/approve')) {
410
- if (method !== 'POST') {
411
- methodNotAllowed(res, method, 'POST');
347
+ const body = await parseJsonBody(req, res, maxBodyBytes);
348
+ if (body === PARSE_FAILED)
349
+ return;
350
+ const submitBody = toTaskSubmitBody(body);
351
+ if (!submitBody) {
352
+ sendJson(res, 400, { error: 'body 需为 { input, idempotencyKey?, options? }' });
412
353
  return;
413
354
  }
414
- let taskId;
355
+ // 入站链路(spec §9.2):body 显式给的 `options.traceContext` 优先,否则取
356
+ // `traceparent` 头。它随 `spec.options` 落进 TaskRecord —— 所以**跨进程续跑**
357
+ // 的那次 run(另一个进程 `resumePending` 接着跑)也带得上,关联不断链。
358
+ const submitTrace = parseTraceparent(headerValue(req, 'traceparent'));
359
+ let rec;
415
360
  try {
416
- taskId = decodeURIComponent(rest.slice(0, -'/approve'.length));
361
+ rec = runner.submit(submitBody.input, {
362
+ ...(submitBody.idempotencyKey !== undefined
363
+ ? { idempotencyKey: submitBody.idempotencyKey }
364
+ : {}),
365
+ options: submitBody.options?.traceContext !== undefined
366
+ ? submitBody.options
367
+ : {
368
+ ...submitBody.options,
369
+ ...(submitTrace !== undefined ? { traceContext: submitTrace } : {}),
370
+ },
371
+ source: 'http',
372
+ });
417
373
  }
418
- catch {
419
- sendJson(res, 400, { error: 'taskId 不是合法的 URL 编码' });
374
+ catch (e) {
375
+ // `submit` 是同步的:入参校验失败与 store 落库故障从同一个 catch 出去。
376
+ // 前者是调用方的错(400 + 原因),后者是服务端的错 —— 必须走与 500 路径同一套
377
+ // `exposeErrors` 策略,否则一次磁盘/Redis 故障会被报成「你参数写错了」,
378
+ // 并把内部错误消息原样回给调用方(500/401 路径都不这么干)。
379
+ if (e instanceof TaskInputError) {
380
+ sendJson(res, 400, { error: errMessage(e) });
381
+ return;
382
+ }
383
+ // 上面的停机闸门与 `submit` 之间隔着一次 `await parseJsonBody`:读 body 期间
384
+ // drain 可能刚开始,此时 submit 抛「正在优雅停机」。这是 503 而不是 500 ——
385
+ // 调用方应该退避重试,跟闸门本身回的是同一句话。
386
+ if (runner.isDraining) {
387
+ sendShuttingDown(req, res);
388
+ return;
389
+ }
390
+ sendInternalError(res, e);
420
391
  return;
421
392
  }
393
+ sendJson(res, 202, rec);
394
+ return;
395
+ }
396
+ // POST /tasks/<id>/approve(HITL):审批挂起的任务。drain 期间仍允许 ——
397
+ // 与 GET 轮询同理由:挂起的任务只有人能推进,停机不该连「批准」也拒掉。
398
+ case 'approve': {
399
+ const taskId = route.taskId;
422
400
  const body = await parseJsonBody(req, res, maxBodyBytes);
423
401
  if (body === PARSE_FAILED)
424
402
  return;
@@ -443,28 +421,26 @@ export function createHttpHandler(app, opts = {}) {
443
421
  }
444
422
  return;
445
423
  }
446
- if (method !== 'GET') {
447
- methodNotAllowed(res, method, 'GET');
424
+ case 'poll': {
425
+ const taskId = route.taskId;
426
+ const rec = await runner.poll(taskId); // MaybePromise:异步 store 下必须 await
427
+ if (!rec) {
428
+ sendJson(res, 404, { error: `task 不存在: ${taskId}` });
429
+ return;
430
+ }
431
+ sendJson(res, 200, rec);
448
432
  return;
449
433
  }
450
- let taskId;
451
- try {
452
- taskId = decodeURIComponent(rest);
453
- }
454
- catch {
434
+ case 'badTaskId':
455
435
  // 残缺的 % 转义会抛 URIError —— 是调用方的输入问题(400),不是服务端 500
456
436
  sendJson(res, 400, { error: 'taskId 不是合法的 URL 编码' });
457
437
  return;
458
- }
459
- const rec = await runner.poll(taskId); // MaybePromise:异步 store 下必须 await
460
- if (!rec) {
461
- sendJson(res, 404, { error: `task 不存在: ${taskId}` });
438
+ // healthz / metrics 已在上面的免鉴权组里 return 掉
439
+ case 'notFound':
440
+ default:
441
+ sendJson(res, 404, { error: `路径不存在: ${pathname}` });
462
442
  return;
463
- }
464
- sendJson(res, 200, rec);
465
- return;
466
443
  }
467
- sendJson(res, 404, { error: `路径不存在: ${pathname}` });
468
444
  }
469
445
  catch (e) {
470
446
  sendInternalError(res, e);
@@ -474,38 +450,6 @@ export function createHttpHandler(app, opts = {}) {
474
450
  return Object.assign(handler, { drain, runner });
475
451
  }
476
452
  const PARSE_FAILED = Symbol('parse-failed');
477
- /**
478
- * 解析 `POST /tasks/<id>/approve` 的 body;形状不合法返回 undefined(调用方回 400)。
479
- * `decisions` 必须是纯对象,每个值是 `{ approved: boolean, reason?: string }`。
480
- */
481
- function parseApproveBody(body) {
482
- if (!body || typeof body !== 'object' || Array.isArray(body))
483
- return undefined;
484
- const o = body;
485
- if (!o.decisions || typeof o.decisions !== 'object' || Array.isArray(o.decisions)) {
486
- return undefined;
487
- }
488
- if (o.decidedBy !== undefined && typeof o.decidedBy !== 'string')
489
- return undefined;
490
- const decisions = {};
491
- for (const [id, d] of Object.entries(o.decisions)) {
492
- if (!d || typeof d !== 'object' || Array.isArray(d))
493
- return undefined;
494
- const v = d;
495
- if (typeof v.approved !== 'boolean')
496
- return undefined;
497
- if (v.reason !== undefined && typeof v.reason !== 'string')
498
- return undefined;
499
- decisions[id] = {
500
- approved: v.approved,
501
- ...(v.reason !== undefined ? { reason: v.reason } : {}),
502
- };
503
- }
504
- return {
505
- decisions,
506
- ...(o.decidedBy !== undefined ? { decidedBy: o.decidedBy } : {}),
507
- };
508
- }
509
453
  /** 读取并解析 JSON body;失败时直接回错误响应并返回哨兵(连接已断则无响应可回)。 */
510
454
  async function parseJsonBody(req, res, maxBytes) {
511
455
  const body = await readBody(req, maxBytes);
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 崩溃恢复的**认领判定** —— 从 AsyncRunner 里抽出的第四个协作件
3
+ * (slot-pool → approval-policy → drain-gate → 这里)。
4
+ *
5
+ * 为什么单独成件:这几条规则就是「同一任务被重复执行」那个 bug 的所在地。它以匿名 `filter`
6
+ * 的形式存在时,每条规则的**边界**(自己进程的必跳、他进程刚起的别抢、无主记录立刻捡)
7
+ * 只能靠读代码去确认,错了也不会有人告诉你 —— 只会看到副作用与花费翻倍。
8
+ * 抽成具名函数后,「跳过原因」成为返回值的一部分,每条规则与边界都能被直接单测。
9
+ *
10
+ * 纯的边界:不碰 store、不改 rec、不派发 —— 只回答「这条记录我能不能抢」。
11
+ */
12
+ import type { TaskRecord } from '../store/store.js';
13
+ /** 不该被我认领的原因(诊断用;命名本身也是文档) */
14
+ export type ResumeSkipReason =
15
+ /** 不在 queued/running:终态没什么可续的;`awaiting_approval` 在等人,不是孤儿 */
16
+ 'terminal'
17
+ /** ownerId 是本进程:它一定还活着,重派只会让同一任务跑两遍 */
18
+ | 'own-process'
19
+ /** 他进程刚起的记录(在 `staleAfterMs` 保鲜期内):别抢,那边还活着 */
20
+ | 'too-fresh';
21
+ export interface ResumeClaimOptions {
22
+ /** 本进程标识(AsyncRunner 恒为字符串,不会是 undefined) */
23
+ ownerId: string;
24
+ /** >0 时启用「他进程记录保鲜期」;0 = 不看他进程的起跑时间,立刻可抢 */
25
+ staleAfterMs: number;
26
+ now: number;
27
+ }
28
+ /**
29
+ * 能否认领这条记录:`undefined` = 可以,否则给出跳过原因。
30
+ *
31
+ * 判定顺序(与抽取前的 filter **逐字一致**,顺序本身有语义):
32
+ * 1. 状态不合法 → `terminal`(先判状态:终态记录即便 ownerId 是自己也不该被"续跑");
33
+ * 2. `ownerId` 等于本进程 → `own-process`;
34
+ * 3. 启用了保鲜期**且**记录有主 → 起跑时间(`startedAt` 退化到 `createdAt`)至今
35
+ * 不足保鲜期 → `too-fresh`;边界是**严格小于**(恰好到期即可抢)。
36
+ *
37
+ * ⚠️ 第 3 条要求「有主」:**无主记录(ownerId === undefined)永远可抢**,不受保鲜期约束 ——
38
+ * 否则崩溃留下的孤儿会因为"看起来太新"而永远没人捡。
39
+ */
40
+ export declare function resumeSkipReason(rec: TaskRecord, opts: ResumeClaimOptions): ResumeSkipReason | undefined;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 能否认领这条记录:`undefined` = 可以,否则给出跳过原因。
3
+ *
4
+ * 判定顺序(与抽取前的 filter **逐字一致**,顺序本身有语义):
5
+ * 1. 状态不合法 → `terminal`(先判状态:终态记录即便 ownerId 是自己也不该被"续跑");
6
+ * 2. `ownerId` 等于本进程 → `own-process`;
7
+ * 3. 启用了保鲜期**且**记录有主 → 起跑时间(`startedAt` 退化到 `createdAt`)至今
8
+ * 不足保鲜期 → `too-fresh`;边界是**严格小于**(恰好到期即可抢)。
9
+ *
10
+ * ⚠️ 第 3 条要求「有主」:**无主记录(ownerId === undefined)永远可抢**,不受保鲜期约束 ——
11
+ * 否则崩溃留下的孤儿会因为"看起来太新"而永远没人捡。
12
+ */
13
+ export function resumeSkipReason(rec, opts) {
14
+ if (rec.status !== 'queued' && rec.status !== 'running')
15
+ return 'terminal';
16
+ if (rec.ownerId === opts.ownerId)
17
+ return 'own-process';
18
+ if (opts.staleAfterMs > 0 && rec.ownerId !== undefined) {
19
+ const since = rec.startedAt ?? rec.createdAt;
20
+ if (opts.now - since < opts.staleAfterMs)
21
+ return 'too-fresh';
22
+ }
23
+ return undefined;
24
+ }
25
+ //# sourceMappingURL=resume-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-policy.js","sourceRoot":"","sources":["../../src/transport/resume-policy.ts"],"names":[],"mappings":"AA8BA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAe,EACf,IAAwB;IAExB,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC3E,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;QAAE,OAAO,aAAa,CAAC;IACvD,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY;YAAE,OAAO,WAAW,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}