@migor/agentia 0.9.4 → 0.9.5
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/CHANGELOG.md +688 -4
- package/README.md +1 -1
- package/dist/AGENTS.md +313 -33
- package/dist/container/container.js +15 -0
- package/dist/container/container.js.map +1 -1
- package/dist/core/limits.d.ts +93 -13
- package/dist/core/limits.js +103 -13
- package/dist/core/limits.js.map +1 -1
- package/dist/core/line-framing.d.ts +36 -0
- package/dist/core/line-framing.js +39 -0
- package/dist/core/line-framing.js.map +1 -0
- package/dist/core/message.d.ts +11 -0
- package/dist/core/run.d.ts +68 -4
- package/dist/core/run.js +27 -1
- package/dist/core/run.js.map +1 -1
- package/dist/core/schema.js +59 -8
- package/dist/core/schema.js.map +1 -1
- package/dist/core/timeout.d.ts +43 -1
- package/dist/core/timeout.js +76 -3
- package/dist/core/timeout.js.map +1 -1
- package/dist/core/tool.d.ts +25 -1
- package/dist/core/trace.d.ts +40 -1
- package/dist/core/trace.js +26 -0
- package/dist/core/trace.js.map +1 -1
- package/dist/engine/defer.d.ts +49 -0
- package/dist/engine/defer.js +72 -0
- package/dist/engine/defer.js.map +1 -0
- package/dist/engine/forwarded.d.ts +14 -5
- package/dist/engine/forwarded.js +4 -1
- package/dist/engine/forwarded.js.map +1 -1
- package/dist/engine/loop-result.d.ts +65 -7
- package/dist/engine/loop-result.js +24 -5
- package/dist/engine/loop-result.js.map +1 -1
- package/dist/engine/loop.d.ts +2 -0
- package/dist/engine/loop.js +157 -17
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/mcp-server-http.d.ts +2 -0
- package/dist/engine/mcp-server-http.js +215 -0
- package/dist/engine/mcp-server-http.js.map +1 -0
- package/dist/engine/mcp-server-stdio.d.ts +15 -0
- package/dist/engine/mcp-server-stdio.js +106 -0
- package/dist/engine/mcp-server-stdio.js.map +1 -0
- package/dist/engine/mcp-server.d.ts +134 -0
- package/dist/engine/mcp-server.js +232 -0
- package/dist/engine/mcp-server.js.map +1 -0
- package/dist/engine/menu-drift.d.ts +34 -0
- package/dist/engine/menu-drift.js +81 -0
- package/dist/engine/menu-drift.js.map +1 -0
- package/dist/engine/policy.d.ts +2 -1
- package/dist/engine/policy.js +7 -1
- package/dist/engine/policy.js.map +1 -1
- package/dist/engine/replay.d.ts +2 -1
- package/dist/engine/replay.js +3 -2
- package/dist/engine/replay.js.map +1 -1
- package/dist/engine/resume-input.d.ts +10 -0
- package/dist/engine/resume-input.js +11 -0
- package/dist/engine/resume-input.js.map +1 -1
- package/dist/engine/run-config.d.ts +26 -2
- package/dist/engine/run-config.js +60 -0
- package/dist/engine/run-config.js.map +1 -1
- package/dist/engine/spec.d.ts +33 -4
- package/dist/engine/spec.js.map +1 -1
- package/dist/engine/tool-context.d.ts +10 -5
- package/dist/engine/tool-context.js +5 -1
- package/dist/engine/tool-context.js.map +1 -1
- package/dist/engine/tracer.d.ts +43 -5
- package/dist/engine/tracer.js +73 -10
- package/dist/engine/tracer.js.map +1 -1
- package/dist/engine/trimming.js +28 -2
- package/dist/engine/trimming.js.map +1 -1
- package/dist/engine/turn.d.ts +60 -3
- package/dist/engine/turn.js +180 -71
- package/dist/engine/turn.js.map +1 -1
- package/dist/engine/types.d.ts +89 -3
- package/dist/engine/types.js +38 -2
- package/dist/engine/types.js.map +1 -1
- package/dist/eval/export.d.ts +48 -0
- package/dist/eval/export.js +146 -0
- package/dist/eval/export.js.map +1 -0
- package/dist/eval/harvest.js +7 -2
- package/dist/eval/harvest.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapter-options.d.ts +22 -0
- package/dist/integrations/adapter-options.js +51 -0
- package/dist/integrations/adapter-options.js.map +1 -1
- package/dist/integrations/anthropic.d.ts +4 -2
- package/dist/integrations/anthropic.js +27 -27
- package/dist/integrations/anthropic.js.map +1 -1
- package/dist/integrations/file-sink.d.ts +20 -0
- package/dist/integrations/file-sink.js +27 -0
- package/dist/integrations/file-sink.js.map +1 -0
- package/dist/integrations/mcp-http.d.ts +3 -3
- package/dist/integrations/mcp-http.js +1 -1
- package/dist/integrations/mcp-http.js.map +1 -1
- package/dist/integrations/mcp-protocol.d.ts +115 -0
- package/dist/integrations/mcp-protocol.js +69 -0
- package/dist/integrations/mcp-protocol.js.map +1 -0
- package/dist/integrations/mcp-stdio.d.ts +3 -3
- package/dist/integrations/mcp-stdio.js +17 -3
- package/dist/integrations/mcp-stdio.js.map +1 -1
- package/dist/integrations/mcp.d.ts +6 -95
- package/dist/integrations/mcp.js +24 -66
- package/dist/integrations/mcp.js.map +1 -1
- package/dist/integrations/metrics-otlp.js +52 -7
- package/dist/integrations/metrics-otlp.js.map +1 -1
- package/dist/integrations/metrics-render.d.ts +15 -0
- package/dist/integrations/metrics-render.js +79 -2
- package/dist/integrations/metrics-render.js.map +1 -1
- package/dist/integrations/metrics-state.d.ts +99 -1
- package/dist/integrations/metrics-state.js +128 -4
- package/dist/integrations/metrics-state.js.map +1 -1
- package/dist/integrations/metrics.d.ts +62 -6
- package/dist/integrations/metrics.js +49 -8
- package/dist/integrations/metrics.js.map +1 -1
- package/dist/integrations/openai.js +9 -31
- package/dist/integrations/openai.js.map +1 -1
- package/dist/integrations/otlp.d.ts +3 -3
- package/dist/integrations/report.d.ts +7 -0
- package/dist/integrations/report.js +20 -1
- package/dist/integrations/report.js.map +1 -1
- package/dist/runtime/memory.d.ts +61 -1
- package/dist/runtime/memory.js +47 -7
- package/dist/runtime/memory.js.map +1 -1
- package/dist/runtime/run.d.ts +12 -2
- package/dist/runtime/run.js +112 -15
- package/dist/runtime/run.js.map +1 -1
- package/dist/store/fsStore.js +10 -4
- package/dist/store/fsStore.js.map +1 -1
- package/dist/store/record.d.ts +41 -0
- package/dist/store/record.js +54 -0
- package/dist/store/record.js.map +1 -0
- package/dist/store/redisStore.d.ts +3 -1
- package/dist/store/redisStore.js +21 -7
- package/dist/store/redisStore.js.map +1 -1
- package/dist/store/sqliteStore.d.ts +23 -0
- package/dist/store/sqliteStore.js +103 -8
- package/dist/store/sqliteStore.js.map +1 -1
- package/dist/store/store.d.ts +65 -2
- package/dist/store/store.js +5 -2
- package/dist/store/store.js.map +1 -1
- package/dist/toolkit/capability-cycles.d.ts +50 -0
- package/dist/toolkit/capability-cycles.js +88 -0
- package/dist/toolkit/capability-cycles.js.map +1 -0
- package/dist/toolkit/capability-slice.d.ts +86 -0
- package/dist/toolkit/capability-slice.js +98 -0
- package/dist/toolkit/capability-slice.js.map +1 -0
- package/dist/toolkit/module.d.ts +7 -1
- package/dist/toolkit/module.js +65 -32
- package/dist/toolkit/module.js.map +1 -1
- package/dist/transport/approval-policy.d.ts +1 -1
- package/dist/transport/approval-policy.js +8 -4
- package/dist/transport/approval-policy.js.map +1 -1
- package/dist/transport/async.d.ts +197 -18
- package/dist/transport/async.js +871 -85
- package/dist/transport/async.js.map +1 -1
- package/dist/transport/drain-gate.d.ts +6 -2
- package/dist/transport/drain-gate.js +14 -2
- package/dist/transport/drain-gate.js.map +1 -1
- package/dist/transport/http-endpoints.d.ts +151 -0
- package/dist/transport/http-endpoints.js +480 -0
- package/dist/transport/http-endpoints.js.map +1 -0
- package/dist/transport/http-io.d.ts +66 -0
- package/dist/transport/http-io.js +145 -0
- package/dist/transport/http-io.js.map +1 -0
- package/dist/transport/http-route.d.ts +10 -3
- package/dist/transport/http-route.js +18 -3
- package/dist/transport/http-route.js.map +1 -1
- package/dist/transport/http-shapes.d.ts +11 -0
- package/dist/transport/http-shapes.js +31 -1
- package/dist/transport/http-shapes.js.map +1 -1
- package/dist/transport/http.d.ts +22 -35
- package/dist/transport/http.js +98 -476
- package/dist/transport/http.js.map +1 -1
- package/dist/transport/owner-id.d.ts +29 -0
- package/dist/transport/owner-id.js +46 -0
- package/dist/transport/owner-id.js.map +1 -0
- package/dist/transport/owner-liveness.d.ts +8 -0
- package/dist/transport/owner-liveness.js +56 -0
- package/dist/transport/owner-liveness.js.map +1 -0
- package/dist/transport/resume-policy.d.ts +48 -10
- package/dist/transport/resume-policy.js +25 -10
- package/dist/transport/resume-policy.js.map +1 -1
- package/dist/transport/scheduler.js +9 -23
- package/dist/transport/scheduler.js.map +1 -1
- package/dist/transport/slot-pool.d.ts +9 -1
- package/dist/transport/slot-pool.js +9 -1
- package/dist/transport/slot-pool.js.map +1 -1
- package/dist/transport/task-events.d.ts +34 -3
- package/dist/transport/task-events.js +86 -5
- package/dist/transport/task-events.js.map +1 -1
- package/dist/transport/wake-policy.d.ts +50 -0
- package/dist/transport/wake-policy.js +43 -0
- package/dist/transport/wake-policy.js.map +1 -0
- package/package.json +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgHjD;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,CAAS;IACf,IAAI,CAAU;IACvB,YAAY,MAAc,EAAE,IAAc,EAAE,OAAgB;QAC1D,KAAK,CAAC,OAAO,IAAI,QAAQ,MAAM,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,CAAC;IAClD,CAAC;CACF;AAgBD,qDAAqD;AACrD,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,kDAAkD;AAClD,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,iCAAiC;QACjD,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;KAC7C,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED,8CAA8C;AAC9C,SAAS,gBAAgB,CAAC,GAAmB,EAAE,MAAc,EAAE,OAAe;IAC5E,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,MAAM,YAAY,OAAO,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,4DAA4D;AAC5D,SAAS,cAAc,CAAC,GAAmB,EAAE,IAAY;IACvD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,0CAA0C;QAC1D,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QACzC,eAAe,EAAE,UAAU;KAC5B,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAID;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,GAAoB,EAAE,QAAgB;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,CAAa,EAAQ,EAAE;YACrC,IAAI,IAAI;gBAAE,OAAO,CAAC,oBAAoB;YACtC,IAAI,GAAG,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,CAAS,EAAQ,EAAE;YACjC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC;YACjB,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACpB,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACrE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,SAAS,CAAC,IAAmB,EAAE,QAAgB;IAC5D,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CACvB,GAAoB,EACpB,GAAmB,EACnB,CAAU,EACV,YAAqB;IAErB,oCAAoC;IACpC,iDAAiD;IACjD,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,YAAY,aAAa,EAAE,CAAC;QAC/B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,sCAAsC;AACtC,SAAS,gBAAgB,CAAC,GAAoB,EAAE,GAAmB;IACjE,uCAAuC;IACvC,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACxD,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAClD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAoB,EAAE,IAAY;IACrD,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAgB,EAAE,IAAI,GAAuB,EAAE;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACjE,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC;QACxB,6DAA6D;QAC7D,wDAAwD;QACxD,0DAA0D;QAC1D,MAAM,IAAI,KAAK,CACb,sBAAsB,YAAY,CAAC,iCAAiC,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CACzG,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9E,8CAA8C;QAC9C,6CAA6C;QAC7C,MAAM,IAAI,KAAK,CACb,6BAA6B,YAAY,CAAC,mCAAmC,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CACzH,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,2BAA2B,CAAC;IAChF,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7B,8DAA8D;QAC9D,sCAAsC;QACtC,6CAA6C;QAC7C,MAAM,IAAI,KAAK,CACb,8CAA8C,IAAI,CAAC,iBAAiB,EAAE,CACvE,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;IAChD,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,oDAAoD;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IAEtC,MAAM,iBAAiB,GAAG,CAAC,GAAmB,EAAE,CAAU,EAAQ,EAAE;QAClE,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,sBAAsB;QACtB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,gDAAgD;IAChD,MAAM,KAAK,GAAG,KAAK,EAAE,SAAS,GAA2B,EAAE,EAAoB,EAAE;QAC/E,QAAQ,GAAG,IAAI,CAAC,CAAC,YAAY;QAC7B,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAEnF,yDAAyD;QACzD,EAAE;QACF,4DAA4D;QAC5D,4DAA4D;QAC5D,6CAA6C;QAC7C,gDAAgD;QAChD,oBAAoB;QACpB,IAAI,YAAqB,CAAC;QAC1B,IAAI,QAAQ,KAAK,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC1C,YAAY,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5E,CAAC;QACD,uDAAuD;QACvD,MAAM,WAAW,GAAG,YAAY,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChG,gDAAgD;QAChD,uEAAuE;QACvE,mDAAmD;QACnD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC;YAAE,KAAK,EAAE,CAAC;QAC1C,OAAO,YAAY,IAAI,WAAW,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAiB,EAAE;QACjF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;QACnC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,6CAA6C;QAC7C,8CAA8C;QAC9C,8CAA8C;QAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,2CAA2C;YAC3C,sCAAsC;YACtC,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACtC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7C,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;wBACjB,EAAE,EAAE,IAAI;wBACR,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,QAAQ;wBACxC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAChC,QAAQ;qBACgB,CAAC,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBACD,4CAA4C;gBAC5C,gDAAgD;gBAChD,cAAc,CACZ,GAAG,EACH,OAAO,eAAe,KAAK,UAAU;oBACnC,CAAC,CAAC,eAAe,EAAE;oBACnB,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;gBACF,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;YACH,CAAC;YAED,kCAAkC;YAClC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,kBAAkB;oBACrB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7C,OAAO;gBAET,KAAK,KAAK,EAAE,CAAC;oBACX,IAAI,QAAQ,EAAE,CAAC;wBACb,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;oBAC1D,IAAI,KAAK,KAAK,YAAY;wBAAE,OAAO;oBACnC,IAAI,QAA8C,CAAC;oBACnD,IAAI,CAAC;wBACH,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBACtC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC7C,OAAO;oBACT,CAAC;oBACD,iDAAiD;oBACjD,IAAI,YAAY,IAAI,iBAAiB,EAAE,CAAC;wBACtC,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;wBAClD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,KAAK,EAAE,eAAe,iBAAiB,QAAQ;yBAChD,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBACD,YAAY,EAAE,CAAC;oBACf,oDAAoD;oBACpD,sCAAsC;oBACtC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;oBACpC,MAAM,OAAO,GAAG,GAAS,EAAE;wBACzB,IAAI,CAAC,GAAG,CAAC,aAAa;4BAAE,KAAK,CAAC,KAAK,EAAE,CAAC;oBACxC,CAAC,CAAC;oBACF,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC3B,iEAAiE;oBACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;oBAChF,sDAAsD;oBACtD,gDAAgD;oBAChD,+BAA+B;oBAC/B,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;oBACvE,IAAI,CAAC;wBACH,IAAI,QAAQ,EAAE,CAAC;4BACb,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE;gCACzB,gBAAgB,EAAE,mBAAmB;gCACrC,0CAA0C;gCAC1C,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;6BACpC,CAAC,CAAC;4BACH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;4BACjE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;4BACpB,wCAAwC;4BACxC,iEAAiE;4BACjE,yDAAyD;4BACzD,+CAA+C;4BAC/C,yDAAyD;4BACzD,MAAM,QAAQ,GAAG,GAAS,EAAE;gCAC1B,aAAa,CAAC,SAAS,CAAC,CAAC;gCACzB,KAAK,CAAC,KAAK,EAAE,CAAC;gCACd,GAAG,CAAC,KAAK,EAAE,CAAC;4BACd,CAAC,CAAC;4BACF,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACtB,IAAI,CAAC;gCACH,sEAAsE;gCACtE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;oCAClC,OAAO,EAAE,KAAK;oCACd,MAAM,EAAE,KAAK,CAAC,MAAM;oCACpB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oCAC3D,mCAAmC;oCACnC,oDAAoD;oCACpD,gCAAgC;oCAChC,4CAA4C;oCAC5C,wCAAwC;oCACxC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;oCAChD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iCACxD,CAAC,CAAC;gCACH,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;4BACxC,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC;gCACX,+CAA+C;gCAC/C,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACjD,CAAC;oCAAS,CAAC;gCACT,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gCACzB,QAAQ,EAAE,CAAC;4BACb,CAAC;4BACD,OAAO;wBACT,CAAC;wBACD,gEAAgE;wBAChE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;4BAClC,OAAO,EAAE,KAAK;4BACd,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACxD,CAAC,CAAC;wBACH,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtC,CAAC;4BAAS,CAAC;wBACT,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;wBAC1B,YAAY,EAAE,CAAC;oBACjB,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,KAAK,QAAQ,EAAE,CAAC;oBACd,uDAAuD;oBACvD,IAAI,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBAClC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;oBACzD,IAAI,IAAI,KAAK,YAAY;wBAAE,OAAO;oBAClC,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC,CAAC;wBAC9E,OAAO;oBACT,CAAC;oBACD,0DAA0D;oBAC1D,iEAAiE;oBACjE,gDAAgD;oBAChD,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;oBACtE,IAAI,GAAe,CAAC;oBACpB,IAAI,CAAC;wBACH,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE;4BACpC,GAAG,CAAC,UAAU,CAAC,cAAc,KAAK,SAAS;gCACzC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,cAAc,EAAE;gCAC/C,CAAC,CAAC,EAAE,CAAC;4BACP,OAAO,EACL,UAAU,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS;gCAC5C,CAAC,CAAC,UAAU,CAAC,OAAO;gCACpB,CAAC,CAAC;oCACE,GAAG,UAAU,CAAC,OAAO;oCACrB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iCACpE;4BACP,MAAM,EAAE,MAAM;yBACf,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,iDAAiD;wBACjD,gDAAgD;wBAChD,iDAAiD;wBACjD,oCAAoC;wBACpC,IAAI,CAAC,YAAY,cAAc,EAAE,CAAC;4BAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAC7C,OAAO;wBACT,CAAC;wBACD,2DAA2D;wBAC3D,oDAAoD;wBACpD,0BAA0B;wBAC1B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;4BACtB,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC3B,OAAO;wBACT,CAAC;wBACD,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wBAC1B,OAAO;oBACT,CAAC;oBACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBACxB,OAAO;gBACT,CAAC;gBAED,wDAAwD;gBACxD,wCAAwC;gBACxC,KAAK,SAAS,EAAE,CAAC;oBACf,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC5B,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;oBACzD,IAAI,IAAI,KAAK,YAAY;wBAAE,OAAO;oBAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,KAAK,EACH,sGAAsG;yBACzG,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,MAAM,EACN,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CACtE,CAAC;wBACF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC1B,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,wCAAwC;wBACxC,IAAI,CAAC,YAAY,gBAAgB,EAAE,CAAC;4BAClC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAClD,OAAO;wBACT,CAAC;wBACD,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC5B,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,KAAK,MAAM,EAAE,CAAC;oBACZ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC5B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC;oBACzE,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,MAAM,EAAE,EAAE,CAAC,CAAC;wBACrD,OAAO;oBACT,CAAC;oBACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBACxB,OAAO;gBACT,CAAC;gBAED,KAAK,YAAY,EAAE,CAAC;oBAClB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC5B,mDAAmD;oBACnD,oCAAoC;oBACpC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACxC,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,MAAM,EAAE,EAAE,CAAC,CAAC;wBACrD,OAAO;oBACT,CAAC;oBACD,mEAAmE;oBACnE,MAAM,OAAO,GACX,WAAW,CAAC,GAAG,EAAE,eAAe,CAAC;wBACjC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACvE,MAAM,IAAI,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACrF,IAAI,WAAW,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;oBACvC,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,IAAI,SAAqC,CAAC;oBAC1C,MAAM,WAAW,GAAG,GAAS,EAAE;wBAC7B,IAAI,QAAQ;4BAAE,OAAO;wBACrB,QAAQ,GAAG,IAAI,CAAC;wBAChB,IAAI,SAAS;4BAAE,aAAa,CAAC,SAAS,CAAC,CAAC;wBACxC,WAAW,EAAE,CAAC;wBACd,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBAC5B,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,CAAC,CAAC;oBACF,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE;wBACzB,gBAAgB,EAAE,mBAAmB;wBACrC,oDAAoD;wBACpD,sDAAsD;wBACtD,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;qBACpC,CAAC,CAAC;oBACH,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC3D,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;oBACpB,uCAAuC;oBACvC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACzB,qCAAqC;oBACrC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;wBACrB,IAAI,CAAC,GAAG,CAAC,aAAa;4BAAE,WAAW,EAAE,CAAC;oBACxC,CAAC,CAAC,CAAC;oBACH,MAAM,KAAK,GAAG,CAAC,KAAsB,EAAQ,EAAE;wBAC7C,IAAI,QAAQ;4BAAE,OAAO;wBACrB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;4BACnB,KAAK,OAAO;gCACV,mDAAmD;gCACnD,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gCAC3D,OAAO;4BACT,KAAK,WAAW;gCACd,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;gCACtE,OAAO;4BACT,KAAK,aAAa;gCAChB,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gCAC1D,OAAO;4BACT,KAAK,QAAQ;gCACX,6CAA6C;gCAC7C,+BAA+B;gCAC/B,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gCACrD,WAAW,EAAE,CAAC;gCACd,OAAO;4BACT,KAAK,KAAK;gCACR,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gCACpC,WAAW,EAAE,CAAC;gCACd,OAAO;4BACT,SAAS,CAAC;gCACR,2CAA2C;gCAC3C,sCAAsC;gCACtC,MAAM,MAAM,GAAU,KAAK,CAAC;gCAC5B,KAAK,MAAM,CAAC;4BACd,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC;oBACF,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvF,yCAAyC;wBACzC,IAAI,QAAQ;4BAAE,GAAG,EAAE,CAAC;;4BACf,WAAW,GAAG,GAAG,CAAC;oBACzB,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;4BACjC,0CAA0C;4BAC1C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gCACrB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACpD,CAAC;iCAAM,CAAC;gCACN,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCAC/C,WAAW,EAAE,CAAC;4BAChB,CAAC;4BACD,OAAO;wBACT,CAAC;wBACD,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC/C,WAAW,EAAE,CAAC;oBAChB,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,KAAK,WAAW;oBACd,kDAAkD;oBAClD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;oBACrD,OAAO;gBAET,4DAA4D;gBAC5D,yDAAyD;gBACzD,SAAS,CAAC;oBACR,MAAM,QAAQ,GAAuC,KAAK,CAAC,IAAI,CAAC;oBAChE,KAAK,QAAQ,CAAC;oBACd,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACpD,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,2CAA2C;IAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAE5C,mDAAmD;AACnD,KAAK,UAAU,aAAa,CAC1B,GAAoB,EACpB,GAAmB,EACnB,QAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,sCAAsC;YACtC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,QAAQ,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,YAAY,CAAC,CAAC,uBAAuB;IAC9C,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACnD,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentia —— 认领者标识(`TaskRecord.ownerId`)的**格式真源**(2026-09-28)。
|
|
3
|
+
*
|
|
4
|
+
* 形状:`p<pid>@<host>-<8 位十六进制>`。为什么要带主机名 —— 崩溃恢复那句
|
|
5
|
+
* 「这条记录的主人还活着吗」**不能只看时间**:`staleAfterMs` 是新鲜度(记录起跑多久了),
|
|
6
|
+
* 不是租约(主人是否还在心跳)。两个方向都会判错:
|
|
7
|
+
* - 单段 run 跑超 `staleAfterMs` ⇒ 他进程当孤儿抢走 ⇒ **同一任务跑两遍**;
|
|
8
|
+
* - **崩溃进程**留下的记录仍然带 ownerId(`submit` 恒写)⇒ 落在保鲜期内没人捡 ⇒ 饿死。
|
|
9
|
+
*
|
|
10
|
+
* 带上主机名与 pid 之后:**同主机**可以直接问操作系统(`process.kill(pid, 0)`),
|
|
11
|
+
* 比时间猜准;**异主机**(或升级前写下的旧格式记录)判不了,退回新鲜度启发式 ——
|
|
12
|
+
* 判定分级在 `resume-policy.ts` 的 `ownerAlive` 上,这里只负责「写」与「读回」。
|
|
13
|
+
*
|
|
14
|
+
* 兼容:旧格式 `p<pid>-<8 位十六进制>`(没有 `@host`)解析出来 `host === undefined`,
|
|
15
|
+
* 判定侧按「判不了」处理 ≡ 升级前行为;解析不出来的串(如测试里的 `'p999-otherproc'`)
|
|
16
|
+
* 返回 `undefined`,同样走新鲜度。
|
|
17
|
+
*
|
|
18
|
+
* 纯件:只用 `node:os` 的另一个函数取值由调用方传入(`formatOwnerId` 不自己取主机名)——
|
|
19
|
+
* 判定的可测性靠这个缝,别把它焊死。
|
|
20
|
+
*/
|
|
21
|
+
export interface ParsedOwnerId {
|
|
22
|
+
readonly pid: number;
|
|
23
|
+
/** `undefined` = 旧格式(无主机名)⇒ 「同主机吗」无从判断 */
|
|
24
|
+
readonly host: string | undefined;
|
|
25
|
+
}
|
|
26
|
+
/** 拼一个 ownerId(`suffix` 由调用方给随机串;本函数不引 `node:crypto`,保持纯) */
|
|
27
|
+
export declare function formatOwnerId(pid: number, host: string, suffix: string): string;
|
|
28
|
+
/** 解析 ownerId;形状不认识 ⇒ `undefined`(判定侧据此退回新鲜度启发式) */
|
|
29
|
+
export declare function parseOwnerId(ownerId: string): ParsedOwnerId | undefined;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentia —— 认领者标识(`TaskRecord.ownerId`)的**格式真源**(2026-09-28)。
|
|
3
|
+
*
|
|
4
|
+
* 形状:`p<pid>@<host>-<8 位十六进制>`。为什么要带主机名 —— 崩溃恢复那句
|
|
5
|
+
* 「这条记录的主人还活着吗」**不能只看时间**:`staleAfterMs` 是新鲜度(记录起跑多久了),
|
|
6
|
+
* 不是租约(主人是否还在心跳)。两个方向都会判错:
|
|
7
|
+
* - 单段 run 跑超 `staleAfterMs` ⇒ 他进程当孤儿抢走 ⇒ **同一任务跑两遍**;
|
|
8
|
+
* - **崩溃进程**留下的记录仍然带 ownerId(`submit` 恒写)⇒ 落在保鲜期内没人捡 ⇒ 饿死。
|
|
9
|
+
*
|
|
10
|
+
* 带上主机名与 pid 之后:**同主机**可以直接问操作系统(`process.kill(pid, 0)`),
|
|
11
|
+
* 比时间猜准;**异主机**(或升级前写下的旧格式记录)判不了,退回新鲜度启发式 ——
|
|
12
|
+
* 判定分级在 `resume-policy.ts` 的 `ownerAlive` 上,这里只负责「写」与「读回」。
|
|
13
|
+
*
|
|
14
|
+
* 兼容:旧格式 `p<pid>-<8 位十六进制>`(没有 `@host`)解析出来 `host === undefined`,
|
|
15
|
+
* 判定侧按「判不了」处理 ≡ 升级前行为;解析不出来的串(如测试里的 `'p999-otherproc'`)
|
|
16
|
+
* 返回 `undefined`,同样走新鲜度。
|
|
17
|
+
*
|
|
18
|
+
* 纯件:只用 `node:os` 的另一个函数取值由调用方传入(`formatOwnerId` 不自己取主机名)——
|
|
19
|
+
* 判定的可测性靠这个缝,别把它焊死。
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* 切分点靠**锚定结尾的定长后缀**唯一确定:`-` 之后正好 8 位十六进制收在串尾,所以主机名里
|
|
23
|
+
* 带 `-`(`my-host-1`,常态)不会被误切进后缀。
|
|
24
|
+
*
|
|
25
|
+
* `(.+?)` 写成惰性而非贪婪只是把意图写在脸上 —— **实测两种写法在 28 组夹具上结果完全一致**
|
|
26
|
+
* (见 tests/transport/owner-id.test.ts 的说明):撑住这条的是 `$` 与 `{8}`,不是惰性。
|
|
27
|
+
* 去掉 `$`、或把 `{8}` 放宽成 `{1,8}`,那两条用例就会红。
|
|
28
|
+
*/
|
|
29
|
+
const OWNER_ID_RE = /^p(\d+)(?:@(.+?))?-([0-9a-f]{8})$/;
|
|
30
|
+
/** 拼一个 ownerId(`suffix` 由调用方给随机串;本函数不引 `node:crypto`,保持纯) */
|
|
31
|
+
export function formatOwnerId(pid, host, suffix) {
|
|
32
|
+
return `p${pid}@${host}-${suffix}`;
|
|
33
|
+
}
|
|
34
|
+
/** 解析 ownerId;形状不认识 ⇒ `undefined`(判定侧据此退回新鲜度启发式) */
|
|
35
|
+
export function parseOwnerId(ownerId) {
|
|
36
|
+
const m = OWNER_ID_RE.exec(ownerId);
|
|
37
|
+
if (m === null)
|
|
38
|
+
return undefined;
|
|
39
|
+
const pid = Number(m[1]);
|
|
40
|
+
// isSafeInteger 而不是 isInteger:`p<超长数字>-…` 会解析成 1e21 / Infinity 这种「整数」,
|
|
41
|
+
// 放过去就等于把垃圾当 pid 递给探针。不是安全整数 ⇒ 形状不成立。
|
|
42
|
+
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
return { pid, host: m[2] };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=owner-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-id.js","sourceRoot":"","sources":["../../src/transport/owner-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAExD,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,MAAc;IACrE,OAAO,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;AACrC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,uEAAuE;IACvE,sCAAsC;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** 探针:等价于 `process.kill(pid, 0)` —— 正常返回 = 进程在,抛错则看 `e.code` */
|
|
2
|
+
export type SignalProbe = (pid: number) => void;
|
|
3
|
+
/**
|
|
4
|
+
* `true` = 同主机且进程在(**无论记录多老都不许抢**);
|
|
5
|
+
* `false` = 同主机但进程不在(崩溃孤儿,**立刻可抢**,不等保鲜期);
|
|
6
|
+
* `undefined` = 判不了(异主机 / 旧格式 / 坏形状 / 意外 errno)⇒ 交给新鲜度启发式。
|
|
7
|
+
*/
|
|
8
|
+
export declare function ownerAlive(ownerId: string, host: string, probe?: SignalProbe): boolean | undefined;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentia —— 「这条记录的主人还在吗」的判定(2026-09-28)。
|
|
3
|
+
*
|
|
4
|
+
* 为什么单独成件:`resume-policy.ts` 是**纯**策略(不碰进程、不碰 store),而这个问题
|
|
5
|
+
* 必须问操作系统。两者之间的缝就是这个文件:做成「ownerId + 本机主机名 ⇒ 活着 / 不在 /
|
|
6
|
+
* 判不了」的判定,探针可注入 ⇒ 三种结论的边界都能被穷尽单测,策略侧只消费结论。
|
|
7
|
+
*
|
|
8
|
+
* **三态而不是布尔**:「判不了」必须与「不在」分开。判不了的三种来源:
|
|
9
|
+
* - **异主机**:pid 是各机器自己的命名空间,本机问不到别人家的 pid;
|
|
10
|
+
* - **旧格式 ownerId**(升级前写下的 `p<pid>-<rand>`,没有 `@host`):不知道是哪台机器写的;
|
|
11
|
+
* - **形状不认识的串**(宿主自定的标识、测试夹具):更不知道。
|
|
12
|
+
* 三者一律 `undefined` ⇒ 策略侧退回新鲜度启发式 ≡ 升级前行为(不清楚就不乱抢)。
|
|
13
|
+
*
|
|
14
|
+
* 探针语义(`process.kill(pid, 0)`;实测记录见 `tests/transport/owner-liveness.test.ts`):
|
|
15
|
+
* - 进程在 ⇒ 正常返回;**`EPERM` 也是「在」**(归别人的进程,本进程无权发信号 —— pid 1 即此);
|
|
16
|
+
* - 进程不在 ⇒ 一律 `ESRCH`,**包括超过 `kern.maxprocperuid` 的 pid**(macOS 实测
|
|
17
|
+
* 2784 / 2785 / 999999 / 4194303 / 99999999 全是 ESRCH)⇒ 不需要「pid 太大」这类边角分类;
|
|
18
|
+
* - 其他 errno ⇒ `undefined`(判不了)。
|
|
19
|
+
*
|
|
20
|
+
* ⚠️ 残留风险,两种都只会「**晚一点**才捡」,不会「抢错」:
|
|
21
|
+
* ① **PID 复用**:撞号进程活着 ⇒ 误判为「主人在」。**自愈** —— 那个进程一退出,
|
|
22
|
+
* 下一次扫描就 `ESRCH` ⇒ 立刻可抢;
|
|
23
|
+
* ② **僵尸**(父进程没 `wait` 收尸,pid 仍留在进程表里)⇒ 同①。框架不探 `/proc/<pid>/stat`
|
|
24
|
+
* 的 `Z`:macOS 没有 `/proc`,跨平台拿不到,为一个边角引平台分支不划算。
|
|
25
|
+
* 刻意**不加时间硬上限**兜这两种 —— 加上限 = 把租约换回新鲜度启发式,「长跑被抢」那个 bug
|
|
26
|
+
* 原样回来(那才是真·重复执行)。取舍:宁可偶尔晚捡,不可偶尔抢跑。
|
|
27
|
+
*/
|
|
28
|
+
import { parseOwnerId } from './owner-id.js';
|
|
29
|
+
const defaultProbe = (pid) => {
|
|
30
|
+
process.kill(pid, 0);
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* `true` = 同主机且进程在(**无论记录多老都不许抢**);
|
|
34
|
+
* `false` = 同主机但进程不在(崩溃孤儿,**立刻可抢**,不等保鲜期);
|
|
35
|
+
* `undefined` = 判不了(异主机 / 旧格式 / 坏形状 / 意外 errno)⇒ 交给新鲜度启发式。
|
|
36
|
+
*/
|
|
37
|
+
export function ownerAlive(ownerId, host, probe = defaultProbe) {
|
|
38
|
+
const parsed = parseOwnerId(ownerId);
|
|
39
|
+
if (parsed === undefined || parsed.host === undefined)
|
|
40
|
+
return undefined;
|
|
41
|
+
if (parsed.host !== host)
|
|
42
|
+
return undefined;
|
|
43
|
+
try {
|
|
44
|
+
probe(parsed.pid);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
const code = e.code;
|
|
49
|
+
if (code === 'ESRCH')
|
|
50
|
+
return false;
|
|
51
|
+
if (code === 'EPERM')
|
|
52
|
+
return true;
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=owner-liveness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-liveness.js","sourceRoot":"","sources":["../../src/transport/owner-liveness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7C,MAAM,YAAY,GAAgB,CAAC,GAAG,EAAE,EAAE;IACxC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,IAAY,EACZ,KAAK,GAAgB,YAAY;IAEjC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxE,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,GAAI,CAA2B,CAAC,IAAI,CAAC;QAC/C,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -7,34 +7,72 @@
|
|
|
7
7
|
* 只能靠读代码去确认,错了也不会有人告诉你 —— 只会看到副作用与花费翻倍。
|
|
8
8
|
* 抽成具名函数后,「跳过原因」成为返回值的一部分,每条规则与边界都能被直接单测。
|
|
9
9
|
*
|
|
10
|
+
* 2026-09-28 补了一档更硬的判据:**「主人还活着吗」**(`ownerAlive` ⇒ `owner-alive`)。
|
|
11
|
+
* 在此之前只有「新鲜度」一条启发式(`too-fresh`),它的两个方向都会出错(长跑被抢 /
|
|
12
|
+
* 崩溃孤儿饿死,见 `owner-alive` 的说明)。判定分级:能问到 pid 就信 pid,问不到才退回时间。
|
|
13
|
+
*
|
|
10
14
|
* 纯的边界:不碰 store、不改 rec、不派发 —— 只回答「这条记录我能不能抢」。
|
|
11
15
|
*/
|
|
12
16
|
import type { TaskRecord } from '../store/store.js';
|
|
13
17
|
/** 不该被我认领的原因(诊断用;命名本身也是文档) */
|
|
14
18
|
export type ResumeSkipReason =
|
|
15
|
-
/** 不在 queued/running
|
|
19
|
+
/** 不在 queued/running(也不是挂起):终态没什么可续的 */
|
|
16
20
|
'terminal'
|
|
21
|
+
/**
|
|
22
|
+
* 挂起(`suspended`):**不是孤儿** —— 它由各自那条闸唤醒(`approval` 等决定、
|
|
23
|
+
* `timer` 等到点),崩溃续跑语义不适用于「在等」。单列一档而不是并进 `terminal`:
|
|
24
|
+
* 一条在睡的 run 被具名成「终态」是**静默说错话**(2026-09-27 调研 §1 事实 4 点的
|
|
25
|
+
* 就是这一处),而这个字段的全部用途就是诊断 —— 说错等于没有。
|
|
26
|
+
*/
|
|
27
|
+
| 'suspended'
|
|
17
28
|
/** ownerId 是本进程:它一定还活着,重派只会让同一任务跑两遍 */
|
|
18
29
|
| 'own-process'
|
|
19
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* **同主机、且那个 pid 还活着**(2026-09-28 加):比 `too-fresh` 准一个量级 ——
|
|
32
|
+
* 它是「主人在」的**直接证据**,不是「记录看起来还新」的推测。长跑的 run 因此不再
|
|
33
|
+
* 因为「起跑很久了」被当孤儿抢走(那是真·重复执行)。
|
|
34
|
+
*/
|
|
35
|
+
| 'owner-alive'
|
|
36
|
+
/**
|
|
37
|
+
* 他进程刚起的记录(在 `staleAfterMs` 保鲜期内):别抢,那边还活着。
|
|
38
|
+
* ⚠️ 这是**判不了「主人在不在」时**的兜底 —— 异主机、或升级前写下的旧格式 ownerId。
|
|
39
|
+
* 同主机能直接问 pid(见 `owner-alive`),那时这条不参与。
|
|
40
|
+
*/
|
|
20
41
|
| 'too-fresh';
|
|
21
42
|
export interface ResumeClaimOptions {
|
|
22
43
|
/** 本进程标识(AsyncRunner 恒为字符串,不会是 undefined) */
|
|
23
44
|
ownerId: string;
|
|
24
|
-
/** >0
|
|
45
|
+
/** >0 时启用「他进程记录」的判定;0 = 完全不看他进程,立刻可抢(单进程旧语义) */
|
|
25
46
|
staleAfterMs: number;
|
|
26
47
|
now: number;
|
|
48
|
+
/**
|
|
49
|
+
* 「这条记录的主人还活着吗」—— `true` = 活着、`false` = 死了、`undefined` = **判不了**。
|
|
50
|
+
*
|
|
51
|
+
* 注入而不是在这里直接 `process.kill`:① 本文件要保住**纯**(不碰进程、不碰 store,
|
|
52
|
+
* 边界才能被穷尽单测);② 判定依赖主机名与 pid 语义,那是 transport 的现场知识
|
|
53
|
+
* (`owner-id.ts` 负责格式,`AsyncRunner` 负责问操作系统),策略只消费结论。
|
|
54
|
+
*
|
|
55
|
+
* 只在 `staleAfterMs > 0` 时被调用(缺省 0 = 不看他进程,与升级前逐字一致)。
|
|
56
|
+
*/
|
|
57
|
+
ownerAlive?: (ownerId: string) => boolean | undefined;
|
|
27
58
|
}
|
|
28
59
|
/**
|
|
29
60
|
* 能否认领这条记录:`undefined` = 可以,否则给出跳过原因。
|
|
30
61
|
*
|
|
31
|
-
*
|
|
32
|
-
* 1.
|
|
33
|
-
* 2.
|
|
34
|
-
* 3.
|
|
35
|
-
*
|
|
62
|
+
* 判定顺序(顺序本身有语义):
|
|
63
|
+
* 1. 挂起 → `suspended`(先摘出来:它不是终态、也不是我的活 —— 唤醒是各自的闸的事);
|
|
64
|
+
* 2. 状态不合法 → `terminal`(先判状态:终态记录即便 ownerId 是自己也不该被"续跑");
|
|
65
|
+
* 3. `ownerId` 等于本进程 → `own-process`;
|
|
66
|
+
* 4. 启用了他进程判定(`staleAfterMs > 0`)**且**记录有主:
|
|
67
|
+
* - `ownerAlive(ownerId) === true` → `owner-alive`(**无论记录多老都不抢**);
|
|
68
|
+
* - `=== false`(同主机但进程没了 = 崩溃孤儿)→ **立刻可抢**(不再被保鲜期挡住);
|
|
69
|
+
* - `undefined`(异主机 / 旧格式 ownerId)→ 退回下面那条新鲜度启发式。
|
|
70
|
+
* 5. 新鲜度:起跑时间(`startedAt` 退化到 `createdAt`)距今不足保鲜期 → `too-fresh`;
|
|
71
|
+
* 边界是**严格小于**(恰好到期即可抢)。
|
|
36
72
|
*
|
|
37
|
-
* ⚠️ 第
|
|
38
|
-
*
|
|
73
|
+
* ⚠️ 第 4/5 条要求「有主」:**无主记录(ownerId === undefined)永远可抢**,不受保鲜期约束。
|
|
74
|
+
* 注意这句话的**保护范围有限** —— `AsyncRunner.submit` 恒写 ownerId(`p<pid>@<host>-<rand>`),
|
|
75
|
+
* 所以「崩溃留下的记录」通常**有** ownerId,能不能捡靠的是第 4 条那个 pid 存活判定
|
|
76
|
+
* (2026-09-28 之前只有第 5 条 ⇒ 崩溃孤儿在保鲜期内会饿死,见 `owner-alive`)。
|
|
39
77
|
*/
|
|
40
78
|
export declare function resumeSkipReason(rec: TaskRecord, opts: ResumeClaimOptions): ResumeSkipReason | undefined;
|
|
@@ -1,24 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 能否认领这条记录:`undefined` = 可以,否则给出跳过原因。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* 1.
|
|
6
|
-
* 2.
|
|
7
|
-
* 3.
|
|
8
|
-
*
|
|
4
|
+
* 判定顺序(顺序本身有语义):
|
|
5
|
+
* 1. 挂起 → `suspended`(先摘出来:它不是终态、也不是我的活 —— 唤醒是各自的闸的事);
|
|
6
|
+
* 2. 状态不合法 → `terminal`(先判状态:终态记录即便 ownerId 是自己也不该被"续跑");
|
|
7
|
+
* 3. `ownerId` 等于本进程 → `own-process`;
|
|
8
|
+
* 4. 启用了他进程判定(`staleAfterMs > 0`)**且**记录有主:
|
|
9
|
+
* - `ownerAlive(ownerId) === true` → `owner-alive`(**无论记录多老都不抢**);
|
|
10
|
+
* - `=== false`(同主机但进程没了 = 崩溃孤儿)→ **立刻可抢**(不再被保鲜期挡住);
|
|
11
|
+
* - `undefined`(异主机 / 旧格式 ownerId)→ 退回下面那条新鲜度启发式。
|
|
12
|
+
* 5. 新鲜度:起跑时间(`startedAt` 退化到 `createdAt`)距今不足保鲜期 → `too-fresh`;
|
|
13
|
+
* 边界是**严格小于**(恰好到期即可抢)。
|
|
9
14
|
*
|
|
10
|
-
* ⚠️ 第
|
|
11
|
-
*
|
|
15
|
+
* ⚠️ 第 4/5 条要求「有主」:**无主记录(ownerId === undefined)永远可抢**,不受保鲜期约束。
|
|
16
|
+
* 注意这句话的**保护范围有限** —— `AsyncRunner.submit` 恒写 ownerId(`p<pid>@<host>-<rand>`),
|
|
17
|
+
* 所以「崩溃留下的记录」通常**有** ownerId,能不能捡靠的是第 4 条那个 pid 存活判定
|
|
18
|
+
* (2026-09-28 之前只有第 5 条 ⇒ 崩溃孤儿在保鲜期内会饿死,见 `owner-alive`)。
|
|
12
19
|
*/
|
|
13
20
|
export function resumeSkipReason(rec, opts) {
|
|
21
|
+
if (rec.status === 'suspended')
|
|
22
|
+
return 'suspended';
|
|
14
23
|
if (rec.status !== 'queued' && rec.status !== 'running')
|
|
15
24
|
return 'terminal';
|
|
16
25
|
if (rec.ownerId === opts.ownerId)
|
|
17
26
|
return 'own-process';
|
|
18
27
|
if (opts.staleAfterMs > 0 && rec.ownerId !== undefined) {
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
return '
|
|
28
|
+
const alive = opts.ownerAlive?.(rec.ownerId);
|
|
29
|
+
if (alive === true)
|
|
30
|
+
return 'owner-alive';
|
|
31
|
+
if (alive === undefined) {
|
|
32
|
+
const since = rec.startedAt ?? rec.createdAt;
|
|
33
|
+
if (opts.now - since < opts.staleAfterMs)
|
|
34
|
+
return 'too-fresh';
|
|
35
|
+
}
|
|
36
|
+
// alive === false:同主机、进程已不在 ⇒ 崩溃孤儿,直接可抢(不参与新鲜度)
|
|
22
37
|
}
|
|
23
38
|
return undefined;
|
|
24
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-policy.js","sourceRoot":"","sources":["../../src/transport/resume-policy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resume-policy.js","sourceRoot":"","sources":["../../src/transport/resume-policy.ts"],"names":[],"mappings":"AA6DA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAe,EACf,IAAwB;IAExB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IACnD,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,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,aAAa,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY;gBAAE,OAAO,WAAW,CAAC;QAC/D,CAAC;QACD,gDAAgD;IAClD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { isThenable } from '../store/store.js';
|
|
3
3
|
import { zeroClauseOf } from '../core/limits.js';
|
|
4
|
-
|
|
5
|
-
* Agentia —— 定时触发(spec §6.3 定时事件)。
|
|
6
|
-
* 依赖 AsyncRunner:每次触发 = submit 一次异步任务。
|
|
7
|
-
*
|
|
8
|
-
* 周期任务去重:幂等键按 interval 窗口分片(同一片只算一次);
|
|
9
|
-
* 即便上一片还没跑完,下一片仍会重新 submit —— 同步 store 下若上一任务的同窗口键
|
|
10
|
-
* 还在 queued/running/succeeded,AsyncRunner 的 at-least-once 去重会直接返回既有记录,
|
|
11
|
-
* 同窗口不并发跑两遍;**异步 store 下该保证减弱**:submit 即时去重让位于执行前去重
|
|
12
|
-
* (只采纳 succeeded),上一片仍 running 时新片可能并发执行 —— at-least-once 语义允许,
|
|
13
|
-
* 窗口推进后新键正常执行。
|
|
14
|
-
*
|
|
15
|
-
* v1 提供 everyMs / at;cron 表达式解析后置(宿主可用队列 cron 替换语义)。
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Node 定时器延迟的上限:2^31-1ms(约 24.86 天)。超过会被**静默**钳到 1ms
|
|
19
|
-
* (只打一条 TimeoutOverflowWarning)—— every/at 都在注册前挡掉(2026-09-19 复审发现)。
|
|
20
|
-
*/
|
|
21
|
-
const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
4
|
+
import { MAX_TIMER_DELAY_MS } from '../core/timeout.js';
|
|
22
5
|
export class Scheduler {
|
|
23
6
|
runner;
|
|
24
7
|
jobs = new Map();
|
|
@@ -34,9 +17,11 @@ export class Scheduler {
|
|
|
34
17
|
throw new Error(`Scheduler.every 的 intervalMs 必须为正有限数(${zeroClauseOf('Scheduler.every.intervalMs')}),收到 ${intervalMs}`);
|
|
35
18
|
}
|
|
36
19
|
if (intervalMs > MAX_TIMER_DELAY_MS) {
|
|
37
|
-
// Node 的定时器延迟是 32 位有符号整数:超过 2^31-1ms(约 24.86
|
|
38
|
-
//
|
|
39
|
-
//
|
|
20
|
+
// Node 的定时器延迟是 32 位有符号整数:超过 2^31-1ms(约 24.86 天)**不会被遵守** ——
|
|
21
|
+
// Node 只在 stderr 留一行 TimeoutOverflowWarning,随后把延迟钳到 1ms,周期任务退化成
|
|
22
|
+
// 每毫秒空转(每个 tick 都对 store 打一轮)。这是配置错误,与上面的 0 同款处理。
|
|
23
|
+
// (此前的注释写「runTimeoutMs 在 async.ts 有同款防线」—— 与当时的实现不符;
|
|
24
|
+
// 2026-09-28 把那道防线真的补上了,五处站点现在都走 assertTimerDelay。)
|
|
40
25
|
throw new Error(`Scheduler.every 的 intervalMs 超过定时器上限(约 24.86 天),收到 ${intervalMs}`);
|
|
41
26
|
}
|
|
42
27
|
if (opts.maxInFlight !== undefined) {
|
|
@@ -81,7 +66,8 @@ export class Scheduler {
|
|
|
81
66
|
const id = randomUUID();
|
|
82
67
|
const delay = Math.max(0, when.getTime() - Date.now());
|
|
83
68
|
if (delay > MAX_TIMER_DELAY_MS) {
|
|
84
|
-
// 与 every() 同款防线:超 2^31-1ms
|
|
69
|
+
// 与 every() 同款防线:超 2^31-1ms 的延迟**不会被遵守**(Node 只在 stderr 留一行
|
|
70
|
+
// TimeoutOverflowWarning,然后把延迟钳到 1ms)⇒「30 天后」变成「立即触发」,
|
|
85
71
|
// 定时语义直接作废。远期单发请拆成多次自检(或落库后由宿主自己的 cron 驱动)。
|
|
86
72
|
throw new Error(`Scheduler.at 的目标时刻超过定时器上限(约 24.86 天后),收到 ${when.toISOString()}`);
|
|
87
73
|
}
|
|
@@ -139,7 +125,7 @@ export class Scheduler {
|
|
|
139
125
|
if (isThenable(rec)) {
|
|
140
126
|
void rec
|
|
141
127
|
.then((r) => {
|
|
142
|
-
//
|
|
128
|
+
// suspended 也算「不再占执行资源」(在等人,不在跑)——
|
|
143
129
|
// 不放手会让 maxInFlight 闸门永久自闭(人可能几小时后才批)
|
|
144
130
|
if (!r || (r.status !== 'queued' && r.status !== 'running'))
|
|
145
131
|
forget(taskId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/transport/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/transport/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,14 @@ export declare class SlotPool {
|
|
|
19
19
|
acquire(): Promise<void>;
|
|
20
20
|
/** 还槽位:有等待者则移交(计数不变),否则归还 */
|
|
21
21
|
release(): void;
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* 当前占用数。
|
|
24
|
+
*
|
|
25
|
+
* ⚠️ 2026-09-28 起它**不再是「测试用」**:`AsyncRunner` 的排队段闸(`maxQueued`)
|
|
26
|
+
* 用它算「此刻还有几个空槽位」—— 判据是「**真正在排队的深度** = 已受理未持槽的任务数
|
|
27
|
+
* − 当前空槽位数」(见 async.ts 的 `#queueDepth`)。先前那句「测试用;对外暴露的是
|
|
28
|
+
* active」是一句**会误导人**的自述:它让读代码的人以为改这个读数不影响行为。
|
|
29
|
+
* 读到它想改语义时,请连着 `#queueDepth` 一起看 —— 那里写着为什么不能只看等待队列长度。
|
|
30
|
+
*/
|
|
23
31
|
get inUse(): number;
|
|
24
32
|
}
|
|
@@ -35,7 +35,15 @@ export class SlotPool {
|
|
|
35
35
|
this.running--;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* 当前占用数。
|
|
40
|
+
*
|
|
41
|
+
* ⚠️ 2026-09-28 起它**不再是「测试用」**:`AsyncRunner` 的排队段闸(`maxQueued`)
|
|
42
|
+
* 用它算「此刻还有几个空槽位」—— 判据是「**真正在排队的深度** = 已受理未持槽的任务数
|
|
43
|
+
* − 当前空槽位数」(见 async.ts 的 `#queueDepth`)。先前那句「测试用;对外暴露的是
|
|
44
|
+
* active」是一句**会误导人**的自述:它让读代码的人以为改这个读数不影响行为。
|
|
45
|
+
* 读到它想改语义时,请连着 `#queueDepth` 一起看 —— 那里写着为什么不能只看等待队列长度。
|
|
46
|
+
*/
|
|
39
47
|
get inUse() {
|
|
40
48
|
return this.running;
|
|
41
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-pool.js","sourceRoot":"","sources":["../../src/transport/slot-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,QAAQ;IAIU,KAAK;IAH1B,OAAO,GAAG,CAAC,CAAC;IACH,SAAS,GAAsB,EAAE,CAAC;IAEnD,YAA6B,KAAa;qBAAb,KAAK;IAAW,CAAC;IAE9C,wBAAwB;IACxB,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,6BAA6B;IAC7B,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"slot-pool.js","sourceRoot":"","sources":["../../src/transport/slot-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,QAAQ;IAIU,KAAK;IAH1B,OAAO,GAAG,CAAC,CAAC;IACH,SAAS,GAAsB,EAAE,CAAC;IAEnD,YAA6B,KAAa;qBAAb,KAAK;IAAW,CAAC;IAE9C,wBAAwB;IACxB,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,6BAA6B;IAC7B,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -17,9 +17,19 @@ import type { TraceRecordEvent } from '../core/trace.js';
|
|
|
17
17
|
* 告诉订阅者(`replay()` 的返回值 / `stream.truncated` 帧)—— **不静默**。
|
|
18
18
|
* 3. **终态缓冲区只保留最近 `retainTerminal` 条。** 留下的意义是「刚跑完就连上来也能重放」;
|
|
19
19
|
* 更早的任务连接上来只能拿到终态(不假装还能重放)。留多了等于把内存换成没人看的历史。
|
|
20
|
+
* 4. **非终态流的缓冲也回收(配额 `nonTerminalBuffers`)。** 终态那条闸只管**跑完的**任务,
|
|
21
|
+
* 而「挂着不动的任务」才是真常态:等审批的、等事件的、等定时器的每条都占一份 ≤`maxEvents` 条
|
|
22
|
+
* 的缓冲(约 1 MB),**且永远不会走到终态** ⇒ 表项只增不减(2026-09-28 外部深评 T4)。
|
|
23
|
+
* 回收的是**缓冲**,不是**表项**:表项留着当**桩**(`has()` 仍为真、`nextIndex` 接着走),
|
|
24
|
+
* 只把回放历史丢掉并用 `firstAvailable` 明示缺口 —— 详见 `#recycleNonTerminal()` 的三条纪律。
|
|
25
|
+
* ⚠️ 反过来做(连表项一起删)会**静默破坏约束 1**:恢复段的 `open()` 会给一个不存在的任务
|
|
26
|
+
* 新建 `nextIndex = 1` 的流,于是拿 `Last-Event-ID` 续订的读者的 `replay(from=N)` 永远筛不出
|
|
27
|
+
* 东西(`index > N` 恒假)—— 读者从此只等到收口帧,中间一片空白。
|
|
20
28
|
*
|
|
21
29
|
* ⚠️ 内存量级(文档里要给使用者一个数):单条事件正文受 `maxEventChars` 约束(入参/成功出参
|
|
22
|
-
* 缺省 2000 字符),所以 500 条 × 2 KB ≈ 1 MB
|
|
30
|
+
* 缺省 2000 字符),所以 500 条 × 2 KB ≈ 1 MB/任务。**缓冲**总量 ≈
|
|
31
|
+
* (`nonTerminalBuffers` 32 + `retainTerminal` 16)× 1 MB ≈ 48 MB 上限(有订阅者的流不受配额约束,
|
|
32
|
+
* 见约束 4);此外每条非终态任务留一个**桩**(约百字节),桩本身不设上限,理由同约束 4。
|
|
23
33
|
*/
|
|
24
34
|
export interface TaskEventStreamsOptions {
|
|
25
35
|
/**
|
|
@@ -33,6 +43,18 @@ export interface TaskEventStreamsOptions {
|
|
|
33
43
|
maxEvents?: number;
|
|
34
44
|
/** 终态流的保留条数(LRU,超出即丢最旧的终态流);缺省 16 */
|
|
35
45
|
retainTerminal?: number;
|
|
46
|
+
/**
|
|
47
|
+
* **非终态**流的**缓冲**配额(条数,不是事件数):本进程最多为多少条非终态流保留
|
|
48
|
+
* 「可回放的事件缓冲」;缺省 32。超出即从**最旧**的、**无订阅者**的非终态流开始回收缓冲
|
|
49
|
+
* (表项与序号都留着,见类注释约束 4)。`0` 读作 disabled = **没人读的**非终态流一律不留
|
|
50
|
+
* 回放缓冲(只有实时转发;有订阅者的流照旧留着 —— 见 `#recycleNonTerminal` 的纪律)。
|
|
51
|
+
*
|
|
52
|
+
* 为什么是**条数**而不是字节数:真正的量纲是「任务数 × 每任务 ≤`maxEvents` 条」,
|
|
53
|
+
* 每任务那半已经被 `maxEvents` 钉住了,剩下的变量就是**多少条流**在占缓冲 —— 按字节设限
|
|
54
|
+
* 还要去估正文长度(`maxEventChars` 只是缺省、用户可改),反而不准。
|
|
55
|
+
* 0 语义归类见 `core/limits.ts` 的 `TaskEventStreams.nonTerminalBuffers` 行。
|
|
56
|
+
*/
|
|
57
|
+
nonTerminalBuffers?: number;
|
|
36
58
|
}
|
|
37
59
|
/** 一条事件在**流**里的位置(`index` 是流自己的序号,不是 recorder 的 seq) */
|
|
38
60
|
export interface TaskStreamEvent {
|
|
@@ -50,11 +72,22 @@ export interface TaskReplay {
|
|
|
50
72
|
/** 缺省上限 —— 与文档里写的数字必须一致(`usage-guide` §7) */
|
|
51
73
|
export declare const TASK_STREAM_DEFAULT_MAX_EVENTS = 500;
|
|
52
74
|
export declare const TASK_STREAM_DEFAULT_RETAIN_TERMINAL = 16;
|
|
75
|
+
export declare const TASK_STREAM_DEFAULT_NON_TERMINAL_BUFFERS = 32;
|
|
53
76
|
export declare class TaskEventStreams {
|
|
54
77
|
#private;
|
|
55
78
|
private readonly streams;
|
|
56
79
|
private readonly maxEvents;
|
|
57
80
|
private readonly retainTerminal;
|
|
81
|
+
private readonly nonTerminalBuffers;
|
|
82
|
+
/**
|
|
83
|
+
* 「非终态**且**缓冲非空」的流数 —— 配额判据的**增量**计数。
|
|
84
|
+
*
|
|
85
|
+
* 为什么不每次现数:判定点在 `push` 上(每条事件都可能让一条流从空变非空),
|
|
86
|
+
* 每次全表扫一遍会把这道内存闸本身变成 O(流数 × 事件数) 的开销。
|
|
87
|
+
* 增量的代价是必须有**唯二**的增减点(`#recycleNonTerminal` 减、`push`/`open` 增),
|
|
88
|
+
* 所以三处各有一句注释钉着 —— 谁新开一条改缓冲的路径,得同时改这里。
|
|
89
|
+
*/
|
|
90
|
+
private buffered;
|
|
58
91
|
constructor(opts?: TaskEventStreamsOptions);
|
|
59
92
|
/** 这条流在场吗(在场 = 本进程见过它的记账) */
|
|
60
93
|
has(taskId: string): boolean;
|
|
@@ -85,6 +118,4 @@ export declare class TaskEventStreams {
|
|
|
85
118
|
replay(taskId: string, from?: number): TaskReplay;
|
|
86
119
|
/** 标记终态:此后不再有事件(`task.end` 由调用方发),并按 LRU 丢掉最旧的终态流 */
|
|
87
120
|
markDone(taskId: string): void;
|
|
88
|
-
/** 丢弃某条流(终态 LRU 用) */
|
|
89
|
-
forget(taskId: string): void;
|
|
90
121
|
}
|