@caupulican/pi-adaptative 0.93.1 → 0.93.2
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 +6 -0
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +9 -3
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -1
- package/dist/core/delegation/worker-conversation-store.js +3 -45
- package/dist/core/delegation/worker-conversation-store.js.map +1 -1
- package/dist/core/extensions/bundled-virtual-modules.js +2 -0
- package/dist/core/extensions/bundled-virtual-modules.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts +1 -0
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/virtual-modules.js +1 -0
- package/dist/core/extensions/virtual-modules.js.map +1 -1
- package/dist/core/provider-request-runtime-controller.js +2 -2
- package/dist/core/provider-request-runtime-controller.js.map +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-conversation-store.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-conversation-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAGN,6BAA6B,EAC7B,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,oCAAoC,EAAE,MAAM,6CAA6C,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EACN,oBAAoB,EACpB,6BAA6B,EAE7B,cAAc,GACd,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,OAAO,EACN,mCAAmC,GAEnC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACN,qCAAqC,EACrC,8BAA8B,EAC9B,0CAA0C,GAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAkC,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxG,OAAO,EACN,wCAAwC,EACxC,kCAAkC,EAClC,kCAAkC,EAClC,qBAAqB,EAErB,gCAAgC,GAEhC,MAAM,mCAAmC,CAAC;AAE3C,MAAM,sCAAsC,GAAG,GAAG,GAAG,IAAI,CAAC;AAC1D,MAAM,+BAA+B,GAAG,qBAAqB,CAAC;AAC9D,MAAM,yCAAyC,GAAG,+BAA+B,CAAC;AAClF,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAC3C,MAAM,qCAAqC,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,mCAAmC,GAAG,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,GAAG,IAAI,CAAC;AAgI3D,MAAM,kCAAkC,GAAG,IAAI,OAAO,EAGnD,CAAC;AAYJ,SAAS,4BAA4B,CAAC,OAA6B;IAClE,OAAO,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC;AACjG,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAmC;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/F,OAAO,KAAK,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,SAAS,yBAAyB,CACjC,cAA8B,EAC9B,UAAkB,EAClB,QAAgB,EAChB,OAA8F;IAE9F,IAAI,MAAM,GAAG,UAAU,CAAC;IACxB,OAAO,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACnH,CAAC;AACF,CAAC;AAED,SAAS,yBAAyB,CAAC,cAA8B;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,yBAAyB,CAAC,cAAc,EAAE,CAAC,EAAE,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;QACtF,IACC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;YAC5B,CAAC,KAAK,CAAC,EAAE;YACT,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG;YACrB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,KAAK,CAAC,QAAQ,KAAK,UAAU,EAC5B,CAAC;YACF,MAAM,IAAI,gCAAgC,CAAC,uDAAuD,CAAC,CAAC;QACrG,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAC5C,IAAY,EACZ,gBAAgD,EAChD,YAAoB;IAEpB,IAAI,CAAC,kCAAkC,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACrG,MAAM,IAAI,gCAAgC,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,SAAS,8BAA8B,CACtC,QAA+B,EAC/B,MAA6B,EAC7B,YAAoB;IAEpB,IACC,QAAQ,CAAC,QAAQ,CAAC,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAG;QAC7C,QAAQ,CAAC,QAAQ,CAAC,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAG;QAC7C,QAAQ,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY;QAC7C,QAAQ,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;QAC3C,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EACxC,CAAC;QACF,MAAM,IAAI,gCAAgC,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;IAC9C,OAAO,6DAA6D,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,+BAA+B,CAAC,cAA8B,EAAE,OAAe,EAAE,SAAiB;IAC1G,MAAM,SAAS,GAAG,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,qCAAqC,CAAC,CAAC;IACrG,OAAO,SAAS,EAAE,QAAQ,CAAC,4CAA4C,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC;AAC9F,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAa;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IACC,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI,EACZ,CAAC;YACF,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC9C,KAAK,IAAI,CAAC,CAAC;gBACX,KAAK,IAAI,CAAC,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACP,KAAK,IAAI,CAAC,CAAC;YACZ,CAAC;QACF,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC7C,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACP,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;QACD,IAAI,KAAK,GAAG,KAAK;YAAE,OAAO,KAAK,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAa;IACtD,MAAM,OAAO,GAAc,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,GAAG,GAAG,CAAC,KAAa,EAAW,EAAE;QACtC,KAAK,IAAI,KAAK,CAAC;QACf,OAAO,KAAK,IAAI,KAAK,CAAC;IACvB,CAAC,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;YAC9B,SAAS;QACV,CAAC;QACD,QAAQ,OAAO,IAAI,EAAE,CAAC;YACrB,KAAK,QAAQ;gBACZ,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;oBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;gBACxE,SAAS;YACV,KAAK,QAAQ;gBACZ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;gBAC5E,SAAS;YACV,KAAK,SAAS;gBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;gBACzC,SAAS;YACV,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU,CAAC;YAChB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;gBAC9B,SAAS;YACV,KAAK,QAAQ;gBACZ,MAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;YAC7D,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACpF,SAAS;QACV,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,KAAK,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,GAAG,CAAC,CAAC;QAC9B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;gBAAE,SAAS;YACxC,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC9D,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;YAC9D,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;YACvC,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,aAAa,KAAK,UAAU,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBAC7G,SAAS;YACV,CAAC;YACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;YACnD,aAAa,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,8BAA8B,CACtC,UAAsC;IAEtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACzF,MAAM,IAAI,GAAG,6BAA6B,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC;IACrF,IAAI,CAAC,UAAU,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,MAAM,IAAI,GACT,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;QACxC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YACpF,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI;YACvB,CAAC,CAAC,SAAS,CAAC;IACf,OAAO;QACN,IAAI;QACJ,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,KAAK,EAAE;YACN,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,6BAA6B,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,kCAAkC;YACtG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvC;KACD,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,SAAS,2BAA2B,CAAC,OAAgB;IACpD,IAAI,SAAS,GAAY,OAAO,CAAC;IACjC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,YAAY,GACjB,OAAO,CAAC,YAAY,KAAK,SAAS;YACjC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,0BAA0B,CAAC,CAAC;QACxF,kGAAkG;QAClG,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;YACtC,EAAE,KAAK,CAAC,CAAC,gCAAgC,CAAC;aACzC,GAAG,CAAC,8BAA8B,CAAC;aACnC,MAAM,CAAC,CAAC,UAAU,EAA4C,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;QAC7F,IAAI,YAAY,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC7D,SAAS,GAAG;gBACX,GAAG,OAAO;gBACV,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrD,CAAC;QACH,CAAC;IACF,CAAC;IAED,+FAA+F;IAC/F,+FAA+F;IAC/F,gFAAgF;IAChF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IACxG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;IACpD,oCAAoC,CAAC,SAAS,CAAC,CAAC;IAChD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,eAAuB,EAAE,cAAsB;IAC7E,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,iBAAiB;QAAE,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;SACjC,MAAM,CAAC,2BAA2B,CAAC;SACnC,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,iBAAiB,CAAC;SACzB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,OAAO,UAAU,MAAM,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA2B;IACtD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAwC;IACtE,MAAM,UAAU,GAAG,6BAA6B,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACzF,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IACrG,OAAO;QACN,QAAQ,EAAE,IAAI;QACd,SAAS;QACT,UAAU;QACV,WAAW,EAAE,qBAAqB,CAAC,UAAU,EAAE,SAAS,CAAC;QACzD,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;QACzB,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,oBAAoB,EAAE,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACvD,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC;KACzD,CAAC;AACH,CAAC;AAOD,SAAS,8BAA8B,CAAC,YAAoB;IAC3D,IAAI,OAAe,CAAC;IACpB,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,OAAO,GAAG,uBAAuB,CAChC,YAAY,EACZ,sCAAsC,EACtC,iDAAiD,CACjD,CAAC;QACF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CACd,UAAU,CAAC,YAAY,CAAC;YACvB,CAAC,CAAC,4EAA4E;YAC9E,CAAC,CAAC,qDAAqD,CACxD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,cAAc,GAAI,QAAyC,CAAC,cAAc,CAAC;IACjF,MAAM,eAAe,GAAI,QAA0C,CAAC,eAAe,CAAC;IACpF,MAAM,aAAa,GAAI,QAAwC,CAAC,aAAa,CAAC;IAC9E,MAAM,yBAAyB,GAAI,QAAoD,CAAC,yBAAyB,CAAC;IAClH,MAAM,sBAAsB,GAAI,QAAiD,CAAC,sBAAsB,CAAC;IACzG,IACC,OAAO,cAAc,KAAK,QAAQ;QAClC,CAAC,cAAc,CAAC,IAAI,EAAE;QACtB,CAAC,eAAe,KAAK,SAAS;YAC7B,CAAC,OAAO,eAAe,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAClG,CAAC,aAAa;QACd,CAAC,yBAAyB,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,CAAC;QAC1E,CAAC,sBAAsB,KAAK,SAAS,IAAI,sBAAsB,KAAK,CAAC,CAAC,EACrE,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,mCAA2E,CAAC;IAChF,IAAI,CAAC;QACJ,mCAAmC;YAClC,yBAAyB,KAAK,SAAS;gBACtC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,mCAAmC,CAAC,yBAAyB,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACN,OAAO;QACP,QAAQ,EAAE;YACT,cAAc;YACd,GAAG,CAAC,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,aAAa,EAAE,kBAAkB,CAAC,aAAmC,CAAC;YACtE,GAAG,CAAC,mCAAmC;gBACtC,CAAC,CAAC,EAAE,yBAAyB,EAAE,mCAAmC,EAAE;gBACpE,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,sBAAsB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnE;KACD,CAAC;AACH,CAAC;AAED,SAAS,oCAAoC,CAC5C,QAAyC;IAEzC,OAAO;QACN,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,QAAQ,CAAC,yBAAyB;YACrC,CAAC,CAAC,EAAE,yBAAyB,EAAE,eAAe,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;YACpF,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvG,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACtC,IAAY,EACZ,QAAgB,EAChB,KAAsC;IAEtC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,oCAAoC,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,sCAAsC,CAC9C,QAAyC,EACzC,IAAqC;IAErC,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,CAAC,eAAe,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IACzG,CAAC;IACD,8CAA8C,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,8CAA8C,CAAC,QAAuB,EAAE,IAAmB;IACnG,IAAI,QAAQ,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACvF,CAAC;AACF,CAAC;AAED,SAAS,oCAAoC,CAC5C,QAAoC,EACpC,QAA4B,EAC5B,cAAuB,EACvB,eAAwB,EACxB,yBAAsD;IAEtD,IAAI,cAAc,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,eAAe,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,KAAK,eAAe,EAAE,CAAC;QACjG,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,yBAAyB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,EAAE,CAAC;QACpH,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,+BAA+B,CACvC,YAAoB,EACpB,QAA4B,EAC5B,cAAuB,EACvB,eAAwB,EACxB,yBAAsD;IAEtD,OAAO,oCAAoC,CAC1C,8BAA8B,CAAC,YAAY,CAAC,CAAC,QAAQ,EACrD,QAAQ,EACR,cAAc,EACd,eAAe,EACf,yBAAyB,CACzB,CAAC;AACH,CAAC;AAED,SAAS,qCAAqC,CAC7C,YAAoB,EACpB,QAA4B,EAC5B,cAAuB,EACvB,eAAwB,EACxB,yBAAsD;IAMtD,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,KAAK,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,kCAAkC,CAAC,YAAY,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,kCAAkC,CAAC,YAAY,CAAC,CAAC;IAClE,IACC,CAAC,MAAM;QACP,CAAC,kCAAkC,CAAC,MAAM,EAAE,OAAO,CAAC;QACpD,CAAC,kCAAkC,CAAC,OAAO,EAAE,QAAQ,CAAC;QACtD,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAC/B,CAAC;QACF,MAAM,IAAI,gCAAgC,CAAC,6DAA6D,CAAC,CAAC;IAC3G,CAAC;IACD,MAAM,QAAQ,GAAG,oCAAoC,CACpD,KAAK,CAAC,QAAQ,EACd,QAAQ,EACR,cAAc,EACd,eAAe,EACf,yBAAyB,CACzB,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,uCAAuC,CAC/C,YAAoB,EACpB,gBAAgD,EAChD,eAAuB,EACvB,YAAoB;IAEpB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,kCAAkC,CAAC,YAAY,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,uBAAuB,CACtC,YAAY,EACZ,sCAAsC,EACtC,iDAAiD,CACjD,CAAC;QACF,MAAM,KAAK,GAAG,kCAAkC,CAAC,YAAY,CAAC,CAAC;QAC/D,IACC,CAAC,kCAAkC,CAAC,gBAAgB,EAAE,MAAM,CAAC;YAC7D,CAAC,kCAAkC,CAAC,MAAM,EAAE,KAAK,CAAC;YAClD,OAAO,KAAK,eAAe,EAC1B,CAAC;YACF,MAAM,IAAI,gCAAgC,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,gCAAgC;YAAE,MAAM,KAAK,CAAC;QACnE,MAAM,IAAI,gCAAgC,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,SAAS,+BAA+B,CAAC,YAAoB,EAAE,QAAoC;IAClG,mBAAmB,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,sBAAsB,CAC9B,QAAgB,EAChB,eAAuB,EACvB,cAAsB,EACtB,SAAqC;IAErC,OAAO,IAAI,sBAAsB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;AACtG,CAAC;AAED;;;GAGG;AACH,SAAS,8BAA8B,CACtC,cAA8B,EAC9B,QAAmC,EACnC,oBAA6B;IAE7B,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,eAAmC,CAAC;IACxC,yBAAyB,CAAC,cAAc,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC3E,IAAI,eAAe,KAAK,SAAS;YAAE,OAAO;QAC1C,IACC,KAAK,CAAC,IAAI,KAAK,SAAS;YACxB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;YACrE,CAAC,iBAAiB,CACjB,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,EAC1C,2BAA2B,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,CACtD,EACA,CAAC;YACF,eAAe,GAAG,KAAK,CAAC;QACzB,CAAC;IACF,CAAC,CAAC,CAAC;IACH,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,yDAAyD,eAAe,GAAG,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;IAChH,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,cAAc,CAAC,aAAa,CAAC,eAAe,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB;IAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,0CAA0C,EAAE,CAAC;QACnF,MAAM,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAUD,MAAM,2BAA2B,GAAG,IAAI,OAAO,EAA6C,CAAC;AAE7F,SAAS,sBAAsB,CAAC,KAAmC;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,yCAAyC;QAAE,OAAO,SAAS,CAAC;IAChH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtG,OAAO,UAAU,CAAC,KAAK,CAAC;AACzB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAA0B,EAAE,UAAkB;IAC1E,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAC1B,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,CAAE,GAAG,UAAU;YAAE,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;;YAC/C,IAAI,GAAG,MAAM,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,0EAA0E;AAC1E,SAAS,yBAAyB,CACjC,cAA8B,EAC9B,SAA6B,EAC7B,UAAU,GAAG,CAAC;IAEd,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC;IAClD,IAAI,KAAK,GAAG,2BAA2B,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5D,IACC,CAAC,KAAK;QACN,KAAK,CAAC,SAAS,KAAK,cAAc,CAAC,YAAY,EAAE;QACjD,KAAK,CAAC,WAAW,KAAK,cAAc,CAAC,cAAc,EAAE;QACrD,KAAK,CAAC,iBAAiB,GAAG,UAAU,EACnC,CAAC;QACF,KAAK,GAAG;YACP,SAAS,EAAE,cAAc,CAAC,YAAY,EAAE;YACxC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,iBAAiB,EAAE,CAAC;YACpB,cAAc,EAAE,EAAE;YAClB,kBAAkB,EAAE,IAAI,GAAG,EAAE;SAC7B,CAAC;QACF,2BAA2B,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,CAAC,iBAAiB,GAAG,UAAU,EAAE,CAAC;QAC1C,yBAAyB,CAAC,cAAc,EAAE,KAAK,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACpG,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,iBAAiB;gBAAE,OAAO;YAC/B,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,cAAc,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACvE,IAAI,cAAc;gBAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;gBAC/C,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACtC,CAAC;IACD,OAAO,mBAAmB,CACzB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAChG,UAAU,CACV,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAA6B;IACnD,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACxF,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAChE,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAC5C,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,2BAA2B,CACnC,cAA8B,EAC9B,YAA2D;IAE3D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,SAAS,IAAI,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7E,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACzF,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,yBAAyB,CAAC,cAAc,EAAE,CAAC,EAAE,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;QAC9G,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO;QACtE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7C,IAAI,+BAA+B,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC1E,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;gBACnG,CAAC;YACF,CAAC;YACD,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO;QACvD,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC7F,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAgB,EAAE,WAAmB,EAAE,SAAiB;IAC7F,MAAM,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,yBAAyB,GAAG,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACtE,IACC,yBAAyB,KAAK,EAAE;QAChC,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1C,UAAU,CAAC,yBAAyB,CAAC,EACpC,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,sBAAsB,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,GAAG,SAAS,QAAQ,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IAM9B,YACC,cAA8B,EAC9B,aAAiC,EACjC,QAA4C,EAC5C,UAAmC;QAEnC,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI;YACzB,cAAc;YACd,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,oCAAoC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,uBAAuB,EAAE,CAAC;SAC1B,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,QAAQ,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,QAAQ,EAAE,IAAI,CAAC;IACpC,CAAC;IAED,IAAY,cAAc;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IACjC,CAAC;IAED,IAAY,cAAc,CAAC,cAA8B;QACxD,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IAC3C,CAAC;IAED,wGAAwG;IACxG,IAAY,sBAAsB;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,8FAA8F;IAC9F,4BAA4B;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,yBAAyB,CAAC;QACrE,OAAO,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAED,+EAA+E;IAC/E,kBAAkB;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;IAClD,CAAC;IAED,gGAAgG;IAChG,mBAAmB;QAClB,OAAO,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,kGAAkG;IAClG,qBAAqB;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACrF,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACf,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;YAChG,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,oBAAoB,CAAC,OAAO,GAA4C,EAAE;QACzE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,mCAAmC,CAAC;QAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gCAAgC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,mCAAmC,EAAE,CAAC;YAChH,MAAM,IAAI,SAAS,CAClB,+DAA+D,mCAAmC,GAAG,CACrG,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,gCAAgC,EAAE,CAAC;YACpG,MAAM,IAAI,SAAS,CAClB,8DAA8D,gCAAgC,GAAG,CACjG,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,sBAAsB,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACvD,IAAI,MAAM,GAAG,UAAU,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CAAC,iEAAiE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,eAAe,GAAG,MAAM,CAAC;QAC7B,IAAI,MAAM,GAAG,UAAU,EAAE,CAAC;YACzB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CACtD,MAAM,EACN,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,UAAU,GAAG,MAAM,CAAC,EAC5D,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;gBACrC,IAAI,UAAU;oBAAE,OAAO;gBACvB,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;oBACjC,OAAO;gBACR,CAAC;gBACD,IAAI,gBAAgB,IAAI,WAAW,EAAE,CAAC;oBACrC,UAAU,GAAG,IAAI,CAAC;oBAClB,OAAO;gBACR,CAAC;gBAED,IACC,CAAC,cAAc,KAAK,SAAS,IAAI,cAAc,GAAG,sBAAsB,CAAC;oBACzE,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,CAAC,GAAG,sBAAsB,EACzE,CAAC;oBACF,gBAAgB,IAAI,CAAC,CAAC;oBACtB,eAAe,IAAI,CAAC,CAAC;oBACrB,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;oBACjC,OAAO;gBACR,CAAC;gBAED,IAAI,aAAsB,CAAC;gBAC3B,IAAI,YAAoB,CAAC;gBACzB,IAAI,CAAC;oBACJ,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;oBACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;oBACxD,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBAC7D,CAAC;gBAAC,MAAM,CAAC;oBACR,gBAAgB,IAAI,CAAC,CAAC;oBACtB,eAAe,IAAI,CAAC,CAAC;oBACrB,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;oBACjC,OAAO;gBACR,CAAC;gBACD,IAAI,YAAY,GAAG,sBAAsB,EAAE,CAAC;oBAC3C,gBAAgB,IAAI,CAAC,CAAC;oBACtB,eAAe,IAAI,CAAC,CAAC;oBACrB,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;oBACjC,OAAO;gBACR,CAAC;gBACD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,IAAI,eAAe,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,EAAE,CAAC;oBAChE,UAAU,GAAG,IAAI,CAAC;oBAClB,OAAO;gBACR,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC7B,eAAe,IAAI,cAAc,GAAG,YAAY,CAAC;gBACjD,gBAAgB,IAAI,CAAC,CAAC;gBACtB,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;YAClC,CAAC,CACD,CAAC;YACF,IAAI,CAAC,UAAU;gBAAE,eAAe,GAAG,cAAc,CAAC;QACnD,CAAC;QACD,OAAO;YACN,MAAM;YACN,QAAQ;YACR,UAAU,EAAE,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YACtE,eAAe;YACf,eAAe;SACf,CAAC;IACH,CAAC;IAED,mGAAmG;IACnG,qBAAqB,CAAC,SAAiB;QACtC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC1F,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,sBAAsB,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YACxD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,OAAO,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,CAAC;QACD,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;QACvG,MAAM,gBAAgB,GAAG,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAC1G,IAAI,WAAgC,CAAC;QACrC,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7F,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO;YACrC,IACC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;gBAC7B,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAClC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,EAClC,CAAC;gBACF,OAAO;YACR,CAAC;YACD,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,4FAA4F;IAC5F,iBAAiB,CAAC,SAAiB,EAAE,QAAgB;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,GAAG,0CAA0C,EAAE,CAAC;YACxF,MAAM,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,SAAS,GAAG,qCAAqC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,SAAS,CAAC,4EAA4E,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;QAClC,IAAI,IAAI,CAAC,sBAAsB,KAAK,CAAC;YAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QACpC,IAAI,QAAQ,CAAC,MAAM,IAAI,8BAA8B,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,CAAC,cAAc,EAAE,EAAE,CAC1C,cAAc,CAAC,iBAAiB,CAAC,+BAA+B,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CACtF,CAAC;IACH,CAAC;IAED,0FAA0F;IAC1F,eAAe,CAAC,SAAiB;QAChC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,sBAAsB,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;YACtG,IAAI,aAAa,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAC;YACjC,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC;YAC/B,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAChG,IAAI,iBAAiB,IAAI,CAAC;gBAAE,SAAS,GAAG,iBAAiB,CAAC;QAC3D,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,+BAA+B;gBAAE,OAAO;YAC5F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,OAAO;YACrE,MAAM,iBAAiB,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC7E,MAAM,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrE,IACC,iBAAiB;gBACjB,OAAO,IAAI,iBAAiB;gBAC5B,iBAAiB,CAAC,KAAK,KAAK,SAAS;gBACrC,cAAc;gBACd,OAAO,IAAI,cAAc;gBACzB,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ,EACvC,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,qCAAqC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,SAAiB;QAClC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,IAAI,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,IAAI,CAAC;YAAE,OAAO;QACrF,IAAI,CAAC,kBAAkB,CAAC,CAAC,cAAc,EAAE,EAAE,CAC1C,cAAc,CAAC,iBAAiB,CAAC,yCAAyC,EAAE;YAC3E,SAAS,EAAE,mBAAmB;SAC9B,CAAC,CACF,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,SAAiB,EAAE,MAAc;QACxD,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC9E,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC1F,IAAI,aAAa,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC5F,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;QACvG,MAAM,QAAQ,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACjG,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YACrF,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC3G,OAAO,IAAI,CAAC,CAAC;YACd,CAAC;QACF,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC1G,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO;QAC1B,IAAI,CAAC,kBAAkB,CAAC,CAAC,cAAc,EAAE,EAAE,CAC1C,cAAc,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CACtF,CAAC;IACH,CAAC;IAED,wFAAwF;IACxF,0BAA0B;QACzB,OAAO,IAAI,CAAC,sBAAsB,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,4BAA4B;QAC3B,IAAI,IAAI,CAAC,sBAAsB,KAAK,CAAC;YAAE,OAAO;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtG,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE;YAClC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YACrD,IAAI,QAAQ,GAAG,+BAA+B,CAC7C,YAAY,EACZ,IAAI,CAAC,aAAa,EAClB,oBAAoB,EAAE,cAAc,EACpC,oBAAoB,EAAE,eAAe,EACrC,oBAAoB,EAAE,yBAAyB,CAC/C,CAAC;YACF,IAAI,QAAQ,CAAC,sBAAsB,KAAK,CAAC,EAAE,CAAC;gBAC3C,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC;gBACtD,+BAA+B,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,aAAa,GAAG,oCAAoC,CAAC,QAAQ,CAAC,CAAC;YACrE,MAAM,gBAAgB,GAAG,kCAAkC,CAAC,YAAY,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC/C,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,qBAAqB,CAAC,SAAkB;QACvC,MAAM,KAAK,GAAyB;YACnC,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;YAClB,gBAAgB,EAAE,CAAC;YACnB,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;YACV,iBAAiB,EAAE,CAAC;SACpB,CAAC;QACF,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACzD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC5D,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;YAC1F,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACxB,eAAe,GAAG,aAAa,GAAG,CAAC,CAAC;gBACpC,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;gBACrG,IAAI,iBAAiB,IAAI,CAAC;oBAAE,cAAc,GAAG,iBAAiB,CAAC;YAChE,CAAC;iBAAM,IAAI,IAAI,CAAC,sBAAsB,KAAK,CAAC;gBAAE,eAAe,GAAG,cAAc,CAAC;QAChF,CAAC;QACD,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACzF,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChD,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;gBACvC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBACzC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC/C,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;gBACjD,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC7C,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxC,OAAO;YACR,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACzC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO;YAC/C,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/C,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACjD,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;YACvD,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YACzD,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;YACrD,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,4BAA4B,CAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC;IAC9E,CAAC;IAED;;;;OAIG;IACH,oCAAoC,CAAC,YAA2D;QAC/F,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,wBAAwB,CACnC,CAAC,cAAc,EAAE,EAAE,CAAC,2BAA2B,CAAC,cAAc,EAAE,YAAY,CAAC,EAC7E,IAAI,CACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,6BAA6B,CAC5B,WAA+C,EAC/C,OAAgB,EAChB,eAAwB;QAExB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YAC/G,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,cAAc,EAAE,EAAE;YACvD,MAAM,SAAS,GAAG,2BAA2B,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACxG,IAAI,SAAS,IAAI,CAAC,eAAe;gBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACzE,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACvD,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,CAC1E,CAAC;YACF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,sBAAsB,CAC3B,MAAyC,EACzC,MAAoB;QAEpB,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACnD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;QAC/E,CAAC;QAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE;YACtE,OAAO,EAAE,IAAI;YACb,4FAA4F;YAC5F,0FAA0F;YAC1F,+CAA+C;YAC/C,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;YACnE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,cAAc,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;QACjF,CAAC;QAED,IAAI,MAAwB,CAAC;QAC7B,IAAI,MAAM,GAAiD,yBAAyB,CAAC;QACrF,IAAI,MAAM,CAAC,0BAA0B,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;gBACtE,MAAM,EAAE,cAAc,EAAE,CAAC;gBACzB,gCAAgC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACxD,MAAM,GAAG,QAAQ,CAAC;gBAClB,MAAM,GAAG,oBAAoB,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACR,kFAAkF;gBAClF,qEAAqE;gBACrE,MAAM,EAAE,cAAc,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,MAAM,CAAC,wBAAwB,EAAE,EAAE,CAAC;gBACxD,MAAM,GAAG;oBACR,GAAG,6BAA6B,CAAC,WAAW,CAAC;oBAC7C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/D,CAAC;YACH,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,CAAC,cAAc,EAAE,EAAE;YAC1C,IAAI,cAAc,CAAC,aAAa,EAAE,KAAK,qBAAqB,EAAE,CAAC;gBAC9D,MAAM,IAAI,gCAAgC,CACzC,4EAA4E,CAC5E,CAAC;YACH,CAAC;YACD,OAAO,cAAc,CAAC,gBAAgB,CACrC,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,OAAO,EACd,KAAK,EACL,MAAM,CAAC,KAAK,CACZ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnF,CAAC;IAED,gFAAgF;IAChF,aAAa,CAAC,OAAgB;QAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,cAAc,EAAE,EAAE,CACjD,cAAc,CAAC,aAAa,CAAC,eAAe,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,CACnF,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,SAAqD;QAC/E,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,cAAc,EAAE,EAAE,CACvD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,SAAS,CAAC,CACxD,CAAC;IACH,CAAC;IAEO,wBAAwB,CAC/B,cAA8B,EAC9B,SAAqD;QAErD,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC;QACnD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACJ,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,MAAM,KAAK,CAAC;QACb,CAAC;QACD,IAAI,cAAc,CAAC,aAAa,EAAE,KAAK,WAAW,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,MAAM,IAAI,gCAAgC,CAAC,+DAA+D,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC;QAC1B,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,MAAM,IAAI,gCAAgC,CAAC,oDAAoD,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,wCAAwC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAY,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAC9G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,MAAM,KAAK,CAAC;QACb,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACJ,cAAc,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzB,MAAM,KAAK,CAAC;YACb,CAAC;QACF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,kCAAkC,CACzC,kBAA0B,EAC1B,OAA6C;QAE7C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAY,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAS,EAAE,UAAU,CAAC,CAAC;QACpF,IACC,cAAc,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS;YAC9D,cAAc,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC3D,cAAc,CAAC,aAAa,EAAE,KAAK,kBAAkB,EACpD,CAAC;YACF,MAAM,IAAI,gCAAgC,CAAC,uBAAuB,OAAO,cAAc,CAAC,CAAC;QAC1F,CAAC;QACD,yBAAyB,CAAC,cAAc,CAAC,CAAC;QAC1C,OAAO,cAAc,CAAC;IACvB,CAAC;IAEO,qBAAqB,CAAC,mBAA4B;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrD,MAAM,gBAAgB,GAAG,kCAAkC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/E,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACvF,MAAM,IAAI,gCAAgC,CAAC,+DAA+D,CAAC,CAAC;YAC7G,CAAC;QACF,CAAC;QACD,MAAM,eAAe,GAAG,kCAAkC,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,kCAAkC,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;YAAE,OAAO;QAC7G,MAAM,OAAO,GAAG,qBAAqB,CACpC,WAAW,EACX,IAAI,CAAC,aAAa,CAAC,SAAS,EAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EACtB,IAAI,EAAE,UAAU,CAChB,CAAC;QACF,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC;gBAChE,MAAM,IAAI,gCAAgC,CAAC,kDAAkD,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1B,OAAO;QACR,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC9F,MAAM,IAAI,gCAAgC,CAAC,4CAA4C,CAAC,CAAC;QAC1F,CAAC;QACD,IACC,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YAC1C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;YACpC,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,EACxC,CAAC;YACF,MAAM,IAAI,gCAAgC,CAAC,6CAA6C,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9C,MAAM,IAAI,gCAAgC,CAAC,8CAA8C,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kCAAkC,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBACpG,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1B,OAAO;QACR,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1B,MAAM,IAAI,gCAAgC,CAAC,uDAAuD,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,gCAAgC,CACzC,oEAAoE,CACpE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kCAAkC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACrG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gFAAgF;IAChF,uBAAuB;QACtB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,mCAAmC,CAAC,cAA8B;QACzE,MAAM,MAAM,GAAiC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;QACpG,kCAAkC,CAAC,GAAG,CAAC,MAAM,EAAE;YAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,cAAc,CAAC,aAAa,EAAE;YAC1C,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;YAChC,MAAM,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,uGAAuG;IACvG,qBAAqB;QACpB,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACzD,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC;YACpE,MAAM,EAAE,IAAI,CAAC,mCAAmC,CAAC,cAAc,CAAC;SAChE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB,CAC/B,SAAqD,EACrD,mBAAmB,GAAG,KAAK;QAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;QACxG,CAAC;QACD,OAAO,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE;YACzC,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;YAChD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC3C,IACC,cAAc,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS;gBAC9D,cAAc,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAC1D,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;YAC9F,CAAC;YACD,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,wFAAwF;IACxF,6BAA6B;QAC5B,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,cAAc,EAAE,EAAE,CACvD,IAAI,CAAC,mCAAmC,CAAC,cAAc,CAAC,CACxD,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,MAAoC;QACzD,MAAM,KAAK,GAAG,kCAAkC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,gCAAgC,CAAC,+DAA+D,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,CAAC;QACxC,CAAC;IACF,CAAC;IAED,gBAAgB,CACf,MAAoC,EACpC,MAA0B,EAC1B,OAAqC;QAErC,MAAM,KAAK,GAAG,kCAAkC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,gCAAgC,CAAC,+DAA+D,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,gCAAgC,CAAC,+CAA+C,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,gCAAgC,CACzC,sEAAsE,CACtE,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,cAAc,EAAE,EAAE;YACvD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC/C,MAAM,IAAI,gCAAgC,CACzC,gEAAgE,CAChE,CAAC;YACH,CAAC;YACD,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,IAAI,eAAmC,CAAC;YACxC,yBAAyB,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrG,IAAI,eAAe,KAAK,SAAS;oBAAE,OAAO;gBAC1C,MAAM,SAAS,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS;oBAAE,OAAO;gBACvB,MAAM,SAAS,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;gBACtD,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChB,eAAe,GAAG,iBAAiB,CAAC;oBACpC,OAAO;gBACR,CAAC;gBACD,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC3E,eAAe,GAAG,iBAAiB,CAAC;gBACrC,CAAC;gBACD,iBAAiB,IAAI,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBACnC,IAAI,eAAe,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAChD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;gBAC1F,CAAC;gBACD,MAAM,IAAI,KAAK,CACd,yEAAyE,eAAe,GAAG,CAC3F,CAAC;YACH,CAAC;YACD,IAAI,OAAO,EAAE,aAAa,KAAK,KAAK,IAAI,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBACrF,MAAM,IAAI,gCAAgC,CACzC,8EAA8E,CAC9E,CAAC;YACH,CAAC;YACD,KAAK,IAAI,KAAK,GAAG,iBAAiB,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACjF,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACvD,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAE,CAAC,CAAC,CAC9D,CAAC;YACH,CAAC;YACD,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;YAC3B,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,CAAC;YACvC,OAAO,gBAAgB,CAAC,MAAM,GAAG,iBAAiB,CAAC;QACpD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,gBAAgB;QACf,OAAO,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;CACD;AAED,SAAS,qBAAqB,CAAC,MAAyC;IACvE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,SAAS,CAAC,8EAA8E,CAAC,CAAC;IACrG,CAAC;IACD,IACC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC9C,MAAM,CAAC,gBAAgB,GAAG,CAAC;QAC3B,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,EACjD,CAAC;QACF,MAAM,IAAI,SAAS,CAAC,mFAAmF,CAAC,CAAC;IAC1G,CAAC;AACF,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAwB,EAAE,WAAkC;IACrG,IACC,CAAC,MAAM;QACP,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAClC,MAAM,CAAC,gBAAgB,KAAK,WAAW,CAAC,gBAAgB;QACxD,MAAM,CAAC,YAAY,KAAK,WAAW,CAAC,YAAY,EAC/C,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACtG,CAAC;AACF,CAAC;AAED,4FAA4F;AAC5F,MAAM,OAAO,uBAAuB;IAApC;QACkB,gBAAW,GAAG,IAAI,GAAG,EAAwC,CAAC;IAqdhF,CAAC;IAndA,UAAU;QACT,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,IAAI,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,gCAAgC,CACzC,iFAAiF,CACjF,CAAC;YACH,CAAC;QACF,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,OAAwC;QAC9C,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,aAAa,CAAC,WAAY,CAAC;QAC/C,OAAO,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACvF,CAAC;IAEO,YAAY,CACnB,OAAwC,EACxC,aAAiC;QAEjC,MAAM,UAAU,GAAG,aAAa,CAAC,UAAW,CAAC;QAC7C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAY,CAAC;QAC/C,MAAM,YAAY,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,yDAAyD,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;YACvC,sFAAsF;YACtF,sBAAsB,CACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,yBAAyB,CACjC,CAAC;QACH,CAAC;QAED,4FAA4F;QAC5F,6FAA6F;QAC7F,+FAA+F;QAC/F,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE;YACnF,EAAE,EAAE,aAAa,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvF,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,+BAA+B,CAC/C,YAAY,EACZ,aAAa,EACb,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,eAAe,CACvB,CAAC;YACF,IACC,OAAO,CAAC,yBAAyB;gBACjC,QAAQ,CAAC,yBAAyB;gBAClC,CAAC,iBAAiB,CAAC,OAAO,CAAC,yBAAyB,EAAE,QAAQ,CAAC,yBAAyB,CAAC,EACxF,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,yBAAyB,IAAI,QAAQ,CAAC,yBAAyB,CAAC;YAC1F,IAAI,SAAS,EAAE,CAAC;gBACf,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YACtG,CAAC;YACD,+BAA+B,CAAC,YAAY,EAAE;gBAC7C,GAAG,QAAQ;gBACX,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,sBAAsB,EAAE,CAAC;aACzB,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,0FAA0F;YAC1F,iGAAiG;YACjG,+BAA+B,CAAC,YAAY,EAAE;gBAC7C,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,aAAa;gBACb,GAAG,CAAC,OAAO,CAAC,yBAAyB;oBACpC,CAAC,CAAC,EAAE,yBAAyB,EAAE,OAAO,CAAC,yBAAyB,EAAE;oBAClE,CAAC,CAAC,EAAE,CAAC;gBACN,sBAAsB,EAAE,CAAC;aACzB,CAAC,CAAC;QACJ,CAAC;QACD,mBAAmB,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC,YAAY,CACvB;YACC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,aAAa;YACb,sBAAsB,EAAE,OAAO,CAAC,cAAc;SAC9C,EACD;YACC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;YAC5D,yBAAyB,EAAE,IAAI;SAC/B,CACD,CAAC;IACH,CAAC;IAED,sGAAsG;IACtG,MAAM,CAAC,OAAwC;QAC9C,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,aAAa,CAAC,WAAY,CAAC;QAC/C,OAAO,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE;YACzC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAAE,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC/E,OAAO,IAAI,CAAC,YAAY,CACvB;gBACC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,aAAa;gBACb,sBAAsB,EAAE,OAAO,CAAC,cAAc;aAC9C,EACD;gBACC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;gBAC5D,yBAAyB,EAAE,IAAI;aAC/B,CACD,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAsC;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;QACtC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3G,OAAO,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9G,CAAC;IAEO,YAAY,CACnB,OAAsC,EACtC,YAIC;QAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;YAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,CAAC,WAAW;YACvB,MAAM,IAAI,SAAS,CAAC,uEAAuE,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;QACrG,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3G,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,WAAW,EAAE,CAAC,CAAC;QACjH,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CACd,kGAAkG,CAClG,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,EACH,QAAQ,EACR,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,eAAe,GACxB,GAAG,qCAAqC,CACxC,YAAY,EACZ,OAAO,EACP,OAAO,CAAC,sBAAsB,EAC9B,YAAY,CAAC,eAAe,CAC5B,CAAC;YACF,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YACxD,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC5B,MAAM,IAAI,gCAAgC,CAAC,uDAAuD,CAAC,CAAC;YACrG,CAAC;YACD,IAAI,aAAa,GAAG,oCAAoC,CAAC,QAAQ,CAAC,CAAC;YACnE,sCAAsC,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;YAC7E,MAAM,kBAAkB,GAAG,YAAY,CAAC,yBAAyB,CAAC;YAClE,IAAI,mBAAmB,GAAG,KAAK,CAAC;YAChC,IAAI,kBAAkB,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,CAAC;gBAC5E,IAAI,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,gCAAgC,CACzC,iFAAiF,CACjF,CAAC;gBACH,CAAC;gBACD,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,CAAC;gBACrD,IAAI,CAAC,eAAe;oBAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBACtG,MAAM,QAAQ,GAAG,sBAAsB,CACtC,OAAO,CAAC,QAAQ,EAChB,eAAe,EACf,aAAa,CAAC,cAAc,EAC5B,kBAAkB,CAClB,CAAC;gBACF,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;gBACxF,CAAC;gBACD,QAAQ,GAAG;oBACV,GAAG,QAAQ;oBACX,eAAe;oBACf,yBAAyB,EAAE,kBAAkB;iBAC7C,CAAC;gBACF,IAAI,CAAC;oBACJ,iGAAiG;oBACjG,+BAA+B,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBACxD,MAAM,aAAa,GAAG,qCAAqC,CAC1D,YAAY,EACZ,OAAO,EACP,aAAa,CAAC,cAAc,EAC5B,eAAe,EACf,kBAAkB,CAClB,CAAC;oBACF,8CAA8C,CAC7C,qBAAqB,CAAC,sBAAsB,EAC5C,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAC7C,CAAC;oBACF,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;oBAClC,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC;oBAC1C,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC;oBACxC,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC3E,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;oBACrF,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;wBACzE,MAAM,IAAI,gCAAgC,CACzC,8DAA8D,CAC9D,CAAC;oBACH,CAAC;oBACD,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACtD,aAAa,GAAG,oCAAoC,CAAC,QAAQ,CAAC,CAAC;oBAC/D,uCAAuC,CACtC,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,yEAAyE,CACzE,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;oBAC1C,MAAM,CAAC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;oBAChD,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;oBAC5B,mBAAmB,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBACrC,MAAM,KAAK,CAAC;gBACb,CAAC;YACF,CAAC;YACD,IAAI,kBAAkB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAC3G,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,eAAe,GACpB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB;gBAC7B,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YACrF,MAAM,sBAAsB,GAAG,kCAAkC,CAAC,WAAW,CAAC,CAAC;YAC/E,MAAM,sBAAsB,GAC3B,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;YAC7G,IAAI,CAAC,eAAe,IAAI,CAAC,mBAAmB,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,aAAa,CAAC,EAAE,CAAC;gBAC1G,MAAM,IAAI,gCAAgC,CACzC,8EAA8E,CAC9E,CAAC;YACH,CAAC;YACD,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC9D,IAAI,eAAe,EAAE,CAAC;gBACrB,IAAI,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,gCAAgC,CACzC,4EAA4E,CAC5E,CAAC;gBACH,CAAC;YACF,CAAC;YACD,IAAI,sBAAsB,IAAI,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;gBACvE,MAAM,IAAI,gCAAgC,CACzC,oEAAoE,CACpE,CAAC;YACH,CAAC;YACD,MAAM,SAAS,GAAG,aAAa,CAAC,yBAAyB,CAAC;YAC1D,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC9D,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;gBACtD,IAAI,CAAC,eAAe;oBAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBACtG,MAAM,QAAQ,GAAG,sBAAsB,CACtC,OAAO,CAAC,QAAQ,EAChB,eAAe,EACf,aAAa,CAAC,cAAc,EAC5B,SAAS,CACT,CAAC;gBACF,MAAM,mBAAmB,GAAG,sBAAsB;oBACjD,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;oBAC/D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC9B,MAAM,oBAAoB,GAAG,8BAA8B,CAC1D,mBAAmB,EACnB,QAAQ,EACR,sBAAsB,IAAI,YAAY,CAAC,yBAAyB,CAChE,CAAC;gBACF,IAAI,oBAAoB,EAAE,CAAC;oBAC1B,MAAM,aAAa,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;oBACzF,IAAI,mBAAmB,CAAC,aAAa,EAAE,KAAK,aAAa,CAAC,UAAU,EAAE,CAAC;wBACtE,MAAM,IAAI,gCAAgC,CACzC,kEAAkE,CAClE,CAAC;oBACH,CAAC;oBACD,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;oBAC/C,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;YACD,uCAAuC,CACtC,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,yEAAyE,CACzE,CAAC;YACF,IAAI,eAAe,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YACjD,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAC1C,MAAM,CAAC,IAAI,CAAC,cAAc,EAC1B,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EACjF,8BAA8B,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnF,MAAM,CAAC,IAAI,CACX,CAAC;YACF,IAAI,CAAC;gBACJ,YAAY,CAAC,uBAAuB,EAAE,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,eAAe,EAAE,CAAC;oBACrB,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;oBAClD,MAAM,CAAC,IAAI,CAAC,gBAAgB,GAAG,wBAAwB,CAAC;gBACzD,CAAC;gBACD,MAAM,KAAK,CAAC;YACb,CAAC;YACD,OAAO,YAAY,CAAC;QACrB,CAAC;QAED,MAAM,WAAW,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACvF,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACtF,8BAA8B,CAC7B,WAAW,EACX,UAAU,EACV,qEAAqE,CACrE,CAAC;QACF,IAAI,cAAc,CAAC,YAAY,EAAE,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,cAAc,CAAC,aAAa,EAAE,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9D,MAAM,IAAI,gCAAgC,CAAC,kDAAkD,CAAC,CAAC;QAChG,CAAC;QACD,yBAAyB,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,EACH,QAAQ,EACR,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,eAAe,GACxB,GAAG,qCAAqC,CACxC,YAAY,EACZ,OAAO,EACP,OAAO,CAAC,sBAAsB,EAC9B,YAAY,CAAC,eAAe,CAC5B,CAAC;QACF,MAAM,iBAAiB,GAAG,YAAY,CAAC,yBAAyB,CAAC;QACjE,MAAM,uBAAuB,GAAG,YAAY,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC;QACzF,IAAI,iBAAiB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,gBAAgB,GACrB,iBAAiB,IAAI,uBAAuB;YAC3C,CAAC,CAAC,sBAAsB,CACtB,OAAO,CAAC,QAAQ,EAChB,uBAAuB,EACvB,QAAQ,CAAC,cAAc,EACvB,iBAAiB,CACjB;YACF,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,iBAAiB,EAAE,CAAC;YACvB,IAAI,QAAQ,CAAC,yBAAyB,EAAE,CAAC;gBACxC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,EAAE,CAAC;oBAC/E,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;gBACzG,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,YAAY,CAAC,yBAAyB,IAAI,cAAc,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC;oBACnF,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;gBACxF,CAAC;gBACD,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,CAAC;gBACrD,IAAI,CAAC,eAAe;oBAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBACtG,MAAM,8BAA8B,GAAG,QAAQ,CAAC,sBAAsB,CAAC;gBACvE,QAAQ,GAAG;oBACV,GAAG,QAAQ;oBACX,eAAe;oBACf,yBAAyB,EAAE,iBAAiB;iBAC5C,CAAC;gBACF,kGAAkG;gBAClG,+BAA+B,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACxD,MAAM,aAAa,GAAG,qCAAqC,CAC1D,YAAY,EACZ,OAAO,EACP,QAAQ,CAAC,cAAc,EACvB,eAAe,EACf,iBAAiB,CACjB,CAAC;gBACF,8CAA8C,CAC7C,8BAA8B,EAC9B,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAC7C,CAAC;gBACF,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;gBAClC,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC;gBAC1C,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC;YACzC,CAAC;QACF,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,yBAAyB,CAAC;QACrD,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;YACjD,IAAI,CAAC,eAAe;gBAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YACtG,MAAM,QAAQ,GACb,gBAAgB,IAAI,iBAAiB,CAAC,SAAS,EAAE,iBAAiB,CAAC;gBAClE,CAAC,CAAC,gBAAgB;gBAClB,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAClG,8BAA8B,CAAC,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,yBAAyB,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,WAAkC,CAAC;QACvC,IAAI,cAAc,CAAC,aAAa,EAAE,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9D,oCAAoC,CACnC,WAAW,EACX,UAAU,CAAC,QAAQ,EACnB,qEAAqE,CACrE,CAAC;YACF,WAAW,GAAG,UAAU,CAAC;QAC1B,CAAC;aAAM,CAAC;YACP,WAAW,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,cAAc,CAAC,aAAa,EAAE,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC;YAC/D,MAAM,IAAI,gCAAgC,CAAC,kDAAkD,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,aAAa,GAAG,oCAAoC,CAAC,QAAQ,CAAC,CAAC;QACrE,uCAAuC,CACtC,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,4EAA4E,CAC5E,CAAC;QACF,MAAM,IAAI,GAA2B;YACpC,cAAc;YACd,IAAI,EAAE,WAAW;YACjB,gBAAgB;YAChB,aAAa;YACb,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,uBAAuB,EAAE,CAAC;SAC1B,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAC1C,cAAc,EACd;YACC,GAAG,OAAO;YACV,UAAU;YACV,WAAW;YACX,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE;SAC5B,EACD,8BAA8B,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,EAC7E,IAAI,CACJ,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE;YACjC,IAAI;YACJ,aAAa,EAAE,kBAAkB,CAAC,OAAO,CAAC;YAC1C,YAAY;YACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACrB,CAAC;CACD;AAED,SAAS,qBAAqB,CAAC,UAAkB,EAAE,SAAiB;IACnE,OAAO,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,8BAA8B,CAAC,WAAmB;IAC1D,OAAO,GAAG,WAAW,cAAc,CAAC;AACrC,CAAC","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { basename, dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport {\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tcreateDeterministicCompaction,\n\testimateContextTokens,\n\tprepareCompaction,\n} from \"@caupulican/pi-agent-core/compaction/compaction\";\nimport { compactToolResultDetailsForRetention } from \"@caupulican/pi-agent-core/message-retention\";\nimport { convertToLlm } from \"@caupulican/pi-agent-core/messages\";\nimport {\n\tassertValidSessionId,\n\tMAX_SESSION_ENTRY_VISIT_COUNT,\n\ttype SessionContext,\n\tSessionManager,\n} from \"@caupulican/pi-agent-core/session\";\nimport type { AssistantMessageDiagnostic, Message, Usage } from \"@caupulican/pi-ai\";\nimport { orchestrationSessionsDir, workerConversationSessionsDir } from \"../agent-paths.ts\";\nimport { sameAgentResumeIdentity } from \"../orchestration/agent-resume.ts\";\nimport { validateAttemptUsageSnapshot } from \"../orchestration/attempt-usage.ts\";\nimport type { AgentResumeContext, AttemptUsageSnapshot, ResourcePointer } from \"../orchestration/contracts.ts\";\nimport {\n\tnormalizeWorkerContextForkReference,\n\ttype WorkerContextForkReference,\n} from \"../orchestration/worker-context-fork-reference.ts\";\nimport { boundedRedactedDiagnosticText } from \"../security/secret-text.ts\";\nimport { withFileLockSync, writeFileAtomicSync } from \"../util/atomic-file.ts\";\nimport { readBoundedTextFileSync } from \"../util/bounded-file.ts\";\nimport {\n\tcollectBoundedWorkerClaimChangedFiles,\n\tMAX_WORKER_CLAIM_CHANGED_FILES,\n\tMAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS,\n} from \"./worker-claim.ts\";\nimport { type WorkerContextForkSnapshot, WorkerContextForkStore } from \"./worker-context-fork-store.ts\";\nimport {\n\tadvanceWorkerSessionHeadAfterOwnedAppend,\n\treadWorkerConversationFileRevision,\n\tsameWorkerConversationFileRevision,\n\tscanWorkerSessionFile,\n\ttype WorkerConversationFileRevision,\n\tWorkerConversationOwnershipError,\n\ttype WorkerSessionFileHead,\n} from \"./worker-conversation-revision.ts\";\n\nconst MAX_WORKER_CONVERSATION_METADATA_BYTES = 256 * 1024;\nconst WORKER_CHANGED_FILE_CUSTOM_TYPE = \"worker-changed-file\";\nconst WORKER_ATTEMPT_USAGE_BOUNDARY_CUSTOM_TYPE = \"worker-attempt-usage-boundary\";\nconst MAX_PERSISTED_WORKER_DIAGNOSTICS = 8;\nconst MAX_WORKER_CONTROL_ENTRY_PREFIX_BYTES = 16 * 1024;\nexport const MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES = 64;\nexport const MAX_WORKER_TRANSCRIPT_PAGE_BYTES = 128 * 1024;\n\ninterface WorkerConversationTranscriptPageOptions {\n\t/** Opaque raw-entry offset returned by the previous page. */\n\tcursor?: number;\n\tmaxMessages?: number;\n\tmaxBytes?: number;\n}\n\ninterface WorkerConversationTranscriptPage {\n\t/** Opaque raw-entry offset used for this page; it is not a message count. */\n\tcursor: number;\n\tmessages: Message[];\n\tnextCursor?: number;\n\t/** Messages consumed but not cloned because one message exceeded the complete page byte ceiling. */\n\tomittedMessages: number;\n\t/** Exact UTF-8 JSON byte length of `messages`, including array framing. */\n\tserializedBytes: number;\n}\n\ninterface WorkerControlTranscriptExpectation {\n\tmessageId: string;\n\tcontent: string;\n}\n\ninterface WorkerControlTranscriptReconciliation {\n\tdelivered: boolean;\n\tappended: boolean;\n}\n\nexport interface CreateWorkerConversationOptions {\n\tagentDir: string;\n\tparentSessionId: string;\n\t/** Durable logical identity for the worker/lane. It never becomes a path segment directly. */\n\tlogicalAgentId: string;\n\tcwd: string;\n\torchestrationProfileId?: string;\n\tmodelRef?: string;\n\tresourceProfileNames: readonly string[];\n\tcontextPointers: readonly ResourcePointer[];\n\t/** Immutable sanitized parent context captured before this logical agent is admitted. */\n\tbirthContextForkReference?: WorkerContextForkReference;\n}\n\ninterface OpenWorkerConversationOptions {\n\tagentDir: string;\n\tresumeContext: AgentResumeContext;\n\texpectedLogicalAgentId?: string;\n}\n\n/**\n * Explicit, token-based retention for a durable worker transcript.\n *\n * This deliberately has no default: the worker model/context policy belongs to orchestration, not\n * the transcript store. Call only at a safe worker turn boundary, after all messages from that turn\n * have been durably committed. The execution controller provides `generateVerifiedCompaction`\n * through the shared model-aware pipeline; this store owns only preparation, append-only apply,\n * and its deterministic verified fallback.\n */\nexport interface WorkerConversationRetentionPolicy {\n\t/** Maximum provider-visible context tokens after a checkpoint is applied. */\n\tmaxContextTokens: number;\n\t/** Shared compaction's retained recent-context target. Must be lower than the maximum. */\n\tkeepRecentTokens: number;\n\t/**\n\t * Generate a verified shared compaction result. Failures, malformed results, and omitted\n\t * generators fall back to `createDeterministicCompaction`; raw transcript entries are never\n\t * replaced or removed.\n\t */\n\tgenerateVerifiedCompaction?: (preparation: CompactionPreparation) => Promise<CompactionResult>;\n\t/**\n\t * Cumulative provider usage spent by the current verified generation if it failed before it\n\t * could return a CompactionResult. This usage is attached to the deterministic checkpoint so\n\t * recovery never loses rejected-summary spend.\n\t */\n\tgetFailedCompactionUsage?: () => Usage | undefined;\n}\n\ninterface WorkerConversationRetentionOutcome {\n\tstatus: \"within_limit\" | \"compacted_verified\" | \"compacted_deterministic\" | \"cannot_compact\";\n\tcontext: SessionContext;\n\tcontextUsage: ReturnType<typeof estimateContextTokens>;\n}\n\ninterface WorkerConversationMetadata {\n\tlogicalAgentId: string;\n\t/** Present on current metadata; omitted only by conversations created before context forks. */\n\tparentSessionId?: string;\n\tresumeContext: AgentResumeContext;\n\tbirthContextForkReference?: WorkerContextForkReference;\n\t/** Version 1 makes a missing current-attempt boundary authoritative zero usage. */\n\tusageAccountingVersion?: 1;\n}\n\ninterface WorkerConversationMetadataState {\n\tlogicalAgentId: string;\n\tparentSessionId?: string;\n\tbirthContextForkReference?: WorkerContextForkReference;\n\tusageAccountingVersion?: 1;\n}\n\ninterface WorkerConversationMetadataBinding extends WorkerConversationMetadataState {\n\tfile: string;\n\tagentDir: string;\n}\n\ninterface WorkerConversationCore {\n\tsessionManager: SessionManager;\n\thead?: WorkerSessionFileHead;\n\tmetadataRevision?: WorkerConversationFileRevision;\n\tmetadataState?: WorkerConversationMetadataState;\n\tinvalid: boolean;\n\tgeneration: number;\n\tactiveTranscriptCursors: number;\n}\n\nexport interface WorkerTranscriptCommitCursor {\n\treadonly kind: \"worker-transcript-suffix-v1\";\n}\n\ninterface WorkerTranscriptCommitCursorState {\n\tcore: WorkerConversationCore;\n\tentryIndex: number;\n\tgeneration: number;\n\tstatus: \"active\" | \"committed\" | \"aborted\";\n\tcommittedSuffix?: Message[];\n}\n\nconst workerTranscriptCommitCursorStates = new WeakMap<\n\tWorkerTranscriptCommitCursor,\n\tWorkerTranscriptCommitCursorState\n>();\n\ninterface CachedWorkerConversationCore {\n\tcore: WorkerConversationCore;\n\tresumeContext: AgentResumeContext;\n\tmetadataFile: string;\n\tagentDir: string;\n}\n\ntype WorkerSessionEntry = ReturnType<SessionManager[\"getEntries\"]>[number];\ntype WorkerSessionMessage = Extract<WorkerSessionEntry, { type: \"message\" }>[\"message\"];\n\nfunction isRawWorkerTranscriptMessage(message: WorkerSessionMessage): message is Message {\n\treturn message.role === \"user\" || message.role === \"assistant\" || message.role === \"toolResult\";\n}\n\nfunction rawWorkerTranscriptMessage(entry: Readonly<WorkerSessionEntry>): Message | undefined {\n\tif (entry.type !== \"message\" || !isRawWorkerTranscriptMessage(entry.message)) return undefined;\n\treturn entry.message;\n}\n\nfunction visitWorkerSessionEntries(\n\tsessionManager: SessionManager,\n\tstartIndex: number,\n\tendIndex: number,\n\tvisitor: (entry: Readonly<WorkerSessionEntry>, index: number, persistedBytes?: number) => void,\n): void {\n\tlet cursor = startIndex;\n\twhile (cursor < endIndex) {\n\t\tcursor = sessionManager.visitEntries(cursor, Math.min(MAX_SESSION_ENTRY_VISIT_COUNT, endIndex - cursor), visitor);\n\t}\n}\n\nfunction assertLinearWorkerSession(sessionManager: SessionManager): void {\n\tconst ids = new Set<string>();\n\tlet previousId: string | null = null;\n\tvisitWorkerSessionEntries(sessionManager, 0, sessionManager.getEntryCount(), (entry) => {\n\t\tif (\n\t\t\ttypeof entry.id !== \"string\" ||\n\t\t\t!entry.id ||\n\t\t\tentry.id.length > 128 ||\n\t\t\tids.has(entry.id) ||\n\t\t\tentry.parentId !== previousId\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation entries are not one linear chain.\");\n\t\t}\n\t\tids.add(entry.id);\n\t\tpreviousId = entry.id;\n\t});\n}\n\nfunction assertWorkerConversationOpenRevision(\n\tfile: string,\n\texpectedRevision: WorkerConversationFileRevision,\n\terrorMessage: string,\n): void {\n\tif (!sameWorkerConversationFileRevision(expectedRevision, readWorkerConversationFileRevision(file))) {\n\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t}\n}\n\nfunction assertWorkerSessionHeadContent(\n\texpected: WorkerSessionFileHead,\n\tactual: WorkerSessionFileHead,\n\terrorMessage: string,\n): void {\n\tif (\n\t\texpected.revision.dev !== actual.revision.dev ||\n\t\texpected.revision.ino !== actual.revision.ino ||\n\t\texpected.headerDigest !== actual.headerDigest ||\n\t\texpected.entryDigest !== actual.entryDigest ||\n\t\texpected.entryCount !== actual.entryCount\n\t) {\n\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t}\n}\n\nfunction workerControlMessageId(content: string): string | undefined {\n\treturn /^\\[Worker control (worker-message-[^\\]\\s]+)(?: [^\\]]+)?\\]\\n/.exec(content)?.[1];\n}\n\nfunction coldWorkerControlPrefixContains(sessionManager: SessionManager, entryId: string, messageId: string): boolean {\n\tconst rawPrefix = sessionManager.readEntryJsonPrefix(entryId, MAX_WORKER_CONTROL_ENTRY_PREFIX_BYTES);\n\treturn rawPrefix?.includes(`\"role\":\"user\",\"content\":\"[Worker control ${messageId}`) ?? false;\n}\n\nfunction boundedJsonStringBytes(value: string, limit: number): number {\n\tlet bytes = 2;\n\tfor (let index = 0; index < value.length; index += 1) {\n\t\tconst code = value.charCodeAt(index);\n\t\tif (\n\t\t\tcode === 0x22 ||\n\t\t\tcode === 0x5c ||\n\t\t\tcode === 0x08 ||\n\t\t\tcode === 0x09 ||\n\t\t\tcode === 0x0a ||\n\t\t\tcode === 0x0c ||\n\t\t\tcode === 0x0d\n\t\t) {\n\t\t\tbytes += 2;\n\t\t} else if (code <= 0x1f) {\n\t\t\tbytes += 6;\n\t\t} else if (code >= 0xd800 && code <= 0xdbff) {\n\t\t\tconst trailing = value.charCodeAt(index + 1);\n\t\t\tif (trailing >= 0xdc00 && trailing <= 0xdfff) {\n\t\t\t\tbytes += 4;\n\t\t\t\tindex += 1;\n\t\t\t} else {\n\t\t\t\tbytes += 6;\n\t\t\t}\n\t\t} else if (code >= 0xdc00 && code <= 0xdfff) {\n\t\t\tbytes += 6;\n\t\t} else if (code <= 0x7f) {\n\t\t\tbytes += 1;\n\t\t} else if (code <= 0x7ff) {\n\t\t\tbytes += 2;\n\t\t} else {\n\t\t\tbytes += 3;\n\t\t}\n\t\tif (bytes > limit) return limit + 1;\n\t}\n\treturn bytes;\n}\n\n/** Conservative JSON byte measurement that stops before an oversized message is cloned. */\nfunction boundedJsonBytes(value: unknown, limit: number): number {\n\tconst pending: unknown[] = [value];\n\tconst seen = new WeakSet<object>();\n\tlet bytes = 0;\n\tconst add = (count: number): boolean => {\n\t\tbytes += count;\n\t\treturn bytes <= limit;\n\t};\n\twhile (pending.length > 0) {\n\t\tconst item = pending.pop();\n\t\tif (item === null) {\n\t\t\tif (!add(4)) return limit + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tswitch (typeof item) {\n\t\t\tcase \"string\":\n\t\t\t\tif (!add(boundedJsonStringBytes(item, limit - bytes))) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"number\":\n\t\t\t\tif (!add(Number.isFinite(item) ? String(item).length : 4)) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"boolean\":\n\t\t\t\tif (!add(item ? 4 : 5)) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"undefined\":\n\t\t\tcase \"function\":\n\t\t\tcase \"symbol\":\n\t\t\tcase \"bigint\":\n\t\t\t\tif (!add(4)) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"object\":\n\t\t\t\tbreak;\n\t\t}\n\t\tif (seen.has(item)) return limit + 1;\n\t\tseen.add(item);\n\t\tif (Array.isArray(item)) {\n\t\t\tif (!add(2 + Math.max(0, item.length - 1))) return limit + 1;\n\t\t\tfor (let index = item.length - 1; index >= 0; index -= 1) pending.push(item[index]);\n\t\t\tcontinue;\n\t\t}\n\t\tconst prototype = Object.getPrototypeOf(item);\n\t\tif (prototype !== Object.prototype && prototype !== null) return limit + 1;\n\t\tif (!add(2)) return limit + 1;\n\t\tlet propertyCount = 0;\n\t\tfor (const key in item) {\n\t\t\tif (!Object.hasOwn(item, key)) continue;\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(item, key);\n\t\t\tif (!descriptor || !(\"value\" in descriptor)) return limit + 1;\n\t\t\tconst propertyValue = descriptor.value;\n\t\t\tif (propertyValue === undefined || typeof propertyValue === \"function\" || typeof propertyValue === \"symbol\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (propertyCount > 0 && !add(1)) return limit + 1;\n\t\t\tpropertyCount += 1;\n\t\t\tif (!add(boundedJsonStringBytes(key, limit - bytes) + 1)) return limit + 1;\n\t\t\tpending.push(propertyValue);\n\t\t}\n\t}\n\treturn bytes;\n}\n\nfunction workerDiagnosticForPersistence(\n\tdiagnostic: AssistantMessageDiagnostic,\n): AssistantMessageDiagnostic | undefined {\n\tif (!Number.isFinite(diagnostic.timestamp) || diagnostic.timestamp < 0) return undefined;\n\tconst type = boundedRedactedDiagnosticText(diagnostic.type) ?? \"provider_diagnostic\";\n\tif (!diagnostic.error) return { type, timestamp: diagnostic.timestamp };\n\tconst name = diagnostic.error.name ? boundedRedactedDiagnosticText(diagnostic.error.name) : undefined;\n\tconst code =\n\t\ttypeof diagnostic.error.code === \"string\"\n\t\t\t? boundedRedactedDiagnosticText(diagnostic.error.code)\n\t\t\t: typeof diagnostic.error.code === \"number\" && Number.isFinite(diagnostic.error.code)\n\t\t\t\t? diagnostic.error.code\n\t\t\t\t: undefined;\n\treturn {\n\t\ttype,\n\t\ttimestamp: diagnostic.timestamp,\n\t\terror: {\n\t\t\t...(name ? { name } : {}),\n\t\t\tmessage: boundedRedactedDiagnosticText(diagnostic.error.message) ?? \"Provider diagnostic unavailable.\",\n\t\t\t...(code !== undefined ? { code } : {}),\n\t\t},\n\t};\n}\n\n/** Apply the canonical JSON, diagnostic, and shared details-retention shape used on session reopen. */\nfunction workerMessageForPersistence(message: Message): Message {\n\tlet projected: Message = message;\n\tif (message.role === \"assistant\") {\n\t\tconst errorMessage =\n\t\t\tmessage.errorMessage === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (boundedRedactedDiagnosticText(message.errorMessage) ?? \"Provider request failed.\");\n\t\t// Later retry/transport diagnostics are the most actionable, so retain the newest bounded suffix.\n\t\tconst diagnostics = message.diagnostics\n\t\t\t?.slice(-MAX_PERSISTED_WORKER_DIAGNOSTICS)\n\t\t\t.map(workerDiagnosticForPersistence)\n\t\t\t.filter((diagnostic): diagnostic is AssistantMessageDiagnostic => diagnostic !== undefined);\n\t\tif (errorMessage !== undefined || diagnostics !== undefined) {\n\t\t\tprojected = {\n\t\t\t\t...message,\n\t\t\t\t...(errorMessage !== undefined ? { errorMessage } : {}),\n\t\t\t\t...(diagnostics !== undefined ? { diagnostics } : {}),\n\t\t\t};\n\t\t}\n\t}\n\n\t// SessionManager persists messages as JSON. Normalize before both append and comparison so own\n\t// optional properties with `undefined` values cannot look divergent after the canonical reopen\n\t// drops them. Real value, ordering, and content differences remain fail-closed.\n\tconst serialized = JSON.stringify(projected);\n\tif (serialized === undefined) throw new TypeError(\"Worker transcript message is not JSON-persistable.\");\n\tconst persisted = JSON.parse(serialized) as Message;\n\tcompactToolResultDetailsForRetention(persisted);\n\treturn persisted;\n}\n\nfunction stableWorkerSessionId(parentSessionId: string, logicalAgentId: string): string {\n\tconst normalizedAgentId = logicalAgentId.trim();\n\tif (!normalizedAgentId) throw new TypeError(\"A logical worker agent id is required.\");\n\tconst digest = createHash(\"sha256\")\n\t\t.update(\"pi-worker-conversation-v1\")\n\t\t.update(\"\\0\")\n\t\t.update(parentSessionId)\n\t\t.update(\"\\0\")\n\t\t.update(normalizedAgentId)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 32);\n\treturn `worker-${digest}`;\n}\n\nfunction cloneResumeContext(context: AgentResumeContext): AgentResumeContext {\n\treturn structuredClone(context);\n}\n\nfunction expectedResumeContext(options: CreateWorkerConversationOptions): AgentResumeContext {\n\tconst sessionDir = workerConversationSessionsDir(options.agentDir, options.parentSessionId);\n\tconst sessionId = stableWorkerSessionId(options.parentSessionId, options.logicalAgentId);\n\tassertValidSessionId(sessionId);\n\tif (!options.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\treturn {\n\t\tprovider: \"pi\",\n\t\tsessionId,\n\t\tsessionDir,\n\t\tsessionFile: joinWorkerSessionFile(sessionDir, sessionId),\n\t\tcwd: resolve(options.cwd),\n\t\t...(options.orchestrationProfileId ? { orchestrationProfileId: options.orchestrationProfileId } : {}),\n\t\t...(options.modelRef ? { modelRef: options.modelRef } : {}),\n\t\tresourceProfileNames: [...options.resourceProfileNames],\n\t\tcontextPointers: structuredClone(options.contextPointers),\n\t};\n}\n\ninterface WorkerConversationMetadataRead {\n\tmetadata: WorkerConversationMetadata;\n\tcontent: string;\n}\n\nfunction readWorkerConversationMetadata(metadataFile: string): WorkerConversationMetadataRead {\n\tlet content: string;\n\tlet metadata: unknown;\n\ttry {\n\t\tcontent = readBoundedTextFileSync(\n\t\t\tmetadataFile,\n\t\t\tMAX_WORKER_CONVERSATION_METADATA_BYTES,\n\t\t\t\"Worker conversation metadata durable size bound\",\n\t\t);\n\t\tmetadata = JSON.parse(content);\n\t} catch {\n\t\tthrow new Error(\n\t\t\texistsSync(metadataFile)\n\t\t\t\t? \"Worker conversation metadata is invalid or exceeds its durable size bound.\"\n\t\t\t\t: \"Worker conversation metadata is missing or invalid.\",\n\t\t);\n\t}\n\tif (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\tconst logicalAgentId = (metadata as { logicalAgentId?: unknown }).logicalAgentId;\n\tconst parentSessionId = (metadata as { parentSessionId?: unknown }).parentSessionId;\n\tconst resumeContext = (metadata as { resumeContext?: unknown }).resumeContext;\n\tconst birthContextForkReference = (metadata as { birthContextForkReference?: unknown }).birthContextForkReference;\n\tconst usageAccountingVersion = (metadata as { usageAccountingVersion?: unknown }).usageAccountingVersion;\n\tif (\n\t\ttypeof logicalAgentId !== \"string\" ||\n\t\t!logicalAgentId.trim() ||\n\t\t(parentSessionId !== undefined &&\n\t\t\t(typeof parentSessionId !== \"string\" || !parentSessionId.trim() || parentSessionId.length > 512)) ||\n\t\t!resumeContext ||\n\t\t(birthContextForkReference !== undefined && parentSessionId === undefined) ||\n\t\t(usageAccountingVersion !== undefined && usageAccountingVersion !== 1)\n\t) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\tlet normalizedBirthContextForkReference: WorkerContextForkReference | undefined;\n\ttry {\n\t\tnormalizedBirthContextForkReference =\n\t\t\tbirthContextForkReference === undefined\n\t\t\t\t? undefined\n\t\t\t\t: normalizeWorkerContextForkReference(birthContextForkReference);\n\t} catch {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\treturn {\n\t\tcontent,\n\t\tmetadata: {\n\t\t\tlogicalAgentId,\n\t\t\t...(typeof parentSessionId === \"string\" ? { parentSessionId } : {}),\n\t\t\tresumeContext: cloneResumeContext(resumeContext as AgentResumeContext),\n\t\t\t...(normalizedBirthContextForkReference\n\t\t\t\t? { birthContextForkReference: normalizedBirthContextForkReference }\n\t\t\t\t: {}),\n\t\t\t...(usageAccountingVersion === 1 ? { usageAccountingVersion } : {}),\n\t\t},\n\t};\n}\n\nfunction cloneWorkerConversationMetadataState(\n\tmetadata: WorkerConversationMetadataState,\n): WorkerConversationMetadataState {\n\treturn {\n\t\tlogicalAgentId: metadata.logicalAgentId,\n\t\t...(metadata.parentSessionId ? { parentSessionId: metadata.parentSessionId } : {}),\n\t\t...(metadata.birthContextForkReference\n\t\t\t? { birthContextForkReference: structuredClone(metadata.birthContextForkReference) }\n\t\t\t: {}),\n\t\t...(metadata.usageAccountingVersion ? { usageAccountingVersion: metadata.usageAccountingVersion } : {}),\n\t};\n}\n\nfunction bindWorkerConversationMetadata(\n\tfile: string,\n\tagentDir: string,\n\tstate: WorkerConversationMetadataState,\n): WorkerConversationMetadataBinding {\n\treturn { file, agentDir, ...cloneWorkerConversationMetadataState(state) };\n}\n\nfunction assertCachedWorkerConversationMetadata(\n\tprevious: WorkerConversationMetadataState,\n\tnext: WorkerConversationMetadataState,\n): void {\n\tif (next.logicalAgentId !== previous.logicalAgentId) {\n\t\tthrow new Error(\"Worker conversation logical agent identity conflicts with the persisted transcript.\");\n\t}\n\tif (next.parentSessionId !== previous.parentSessionId) {\n\t\tthrow new Error(\"Worker conversation parent session identity conflicts with the persisted transcript.\");\n\t}\n\tif (!isDeepStrictEqual(next.birthContextForkReference, previous.birthContextForkReference)) {\n\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t}\n\tassertWorkerConversationUsageAccountingVersion(previous.usageAccountingVersion, next.usageAccountingVersion);\n}\n\nfunction assertWorkerConversationUsageAccountingVersion(previous: 1 | undefined, next: 1 | undefined): void {\n\tif (previous === 1 && next !== 1) {\n\t\tthrow new Error(\"Worker conversation usage accounting version cannot be downgraded.\");\n\t}\n}\n\nfunction assertExactConversationMetadataValue(\n\tmetadata: WorkerConversationMetadata,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n\tparentSessionId?: string,\n\tbirthContextForkReference?: WorkerContextForkReference,\n): WorkerConversationMetadata {\n\tif (logicalAgentId && metadata.logicalAgentId !== logicalAgentId) {\n\t\tthrow new Error(\"Worker conversation logical agent identity conflicts with the persisted transcript.\");\n\t}\n\tif (!sameAgentResumeIdentity(metadata.resumeContext, expected)) {\n\t\tthrow new Error(\"Worker conversation resume context conflicts with the persisted transcript.\");\n\t}\n\tif (parentSessionId && metadata.parentSessionId && metadata.parentSessionId !== parentSessionId) {\n\t\tthrow new Error(\"Worker conversation parent session identity conflicts with the persisted transcript.\");\n\t}\n\tif (birthContextForkReference && !isDeepStrictEqual(metadata.birthContextForkReference, birthContextForkReference)) {\n\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t}\n\treturn metadata;\n}\n\nfunction assertExactConversationMetadata(\n\tmetadataFile: string,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n\tparentSessionId?: string,\n\tbirthContextForkReference?: WorkerContextForkReference,\n): WorkerConversationMetadata {\n\treturn assertExactConversationMetadataValue(\n\t\treadWorkerConversationMetadata(metadataFile).metadata,\n\t\texpected,\n\t\tlogicalAgentId,\n\t\tparentSessionId,\n\t\tbirthContextForkReference,\n\t);\n}\n\nfunction assertStableExactConversationMetadata(\n\tmetadataFile: string,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n\tparentSessionId?: string,\n\tbirthContextForkReference?: WorkerContextForkReference,\n): {\n\tmetadata: WorkerConversationMetadata;\n\trevision: WorkerConversationFileRevision;\n\tcontent: string;\n} {\n\tconst before = existsSync(metadataFile) ? readWorkerConversationFileRevision(metadataFile) : undefined;\n\tconst first = readWorkerConversationMetadata(metadataFile);\n\tconst between = readWorkerConversationFileRevision(metadataFile);\n\tconst second = readWorkerConversationMetadata(metadataFile);\n\tconst revision = readWorkerConversationFileRevision(metadataFile);\n\tif (\n\t\t!before ||\n\t\t!sameWorkerConversationFileRevision(before, between) ||\n\t\t!sameWorkerConversationFileRevision(between, revision) ||\n\t\tfirst.content !== second.content\n\t) {\n\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation metadata changed while it was verified.\");\n\t}\n\tconst metadata = assertExactConversationMetadataValue(\n\t\tfirst.metadata,\n\t\texpected,\n\t\tlogicalAgentId,\n\t\tparentSessionId,\n\t\tbirthContextForkReference,\n\t);\n\treturn { metadata, revision, content: first.content };\n}\n\nfunction assertWorkerConversationMetadataContent(\n\tmetadataFile: string,\n\texpectedRevision: WorkerConversationFileRevision,\n\texpectedContent: string,\n\terrorMessage: string,\n): void {\n\ttry {\n\t\tconst before = readWorkerConversationFileRevision(metadataFile);\n\t\tconst content = readBoundedTextFileSync(\n\t\t\tmetadataFile,\n\t\t\tMAX_WORKER_CONVERSATION_METADATA_BYTES,\n\t\t\t\"Worker conversation metadata durable size bound\",\n\t\t);\n\t\tconst after = readWorkerConversationFileRevision(metadataFile);\n\t\tif (\n\t\t\t!sameWorkerConversationFileRevision(expectedRevision, before) ||\n\t\t\t!sameWorkerConversationFileRevision(before, after) ||\n\t\t\tcontent !== expectedContent\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof WorkerConversationOwnershipError) throw error;\n\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t}\n}\n\nfunction writeWorkerConversationMetadata(metadataFile: string, metadata: WorkerConversationMetadata): void {\n\twriteFileAtomicSync(metadataFile, `${JSON.stringify(metadata)}\\n`, { mode: 0o600 });\n}\n\nfunction openWorkerBirthContext(\n\tagentDir: string,\n\tparentSessionId: string,\n\tlogicalAgentId: string,\n\treference: WorkerContextForkReference,\n): WorkerContextForkSnapshot {\n\treturn new WorkerContextForkStore({ agentDir, parentSessionId }).open({ logicalAgentId, reference });\n}\n\n/**\n * Verify the immutable message prefix and optionally close only the safe append-prefix crash window.\n * A partial prefix may contain no custom/compaction/attempt state: birth messages must land first.\n */\nfunction verifyWorkerBirthContextPrefix(\n\tsessionManager: SessionManager,\n\tsnapshot: WorkerContextForkSnapshot,\n\trecoverMissingSuffix: boolean,\n): boolean {\n\tconst entryCount = sessionManager.getEntryCount();\n\tconst sharedLength = Math.min(entryCount, snapshot.messages.length);\n\tlet divergenceIndex: number | undefined;\n\tvisitWorkerSessionEntries(sessionManager, 0, sharedLength, (entry, index) => {\n\t\tif (divergenceIndex !== undefined) return;\n\t\tif (\n\t\t\tentry.type !== \"message\" ||\n\t\t\t(entry.message.role !== \"user\" && entry.message.role !== \"assistant\") ||\n\t\t\t!isDeepStrictEqual(\n\t\t\t\tworkerMessageForPersistence(entry.message),\n\t\t\t\tworkerMessageForPersistence(snapshot.messages[index]!),\n\t\t\t)\n\t\t) {\n\t\t\tdivergenceIndex = index;\n\t\t}\n\t});\n\tif (divergenceIndex !== undefined) {\n\t\tthrow new Error(`Worker conversation birth context diverges at message ${divergenceIndex}.`);\n\t}\n\tif (entryCount >= snapshot.messages.length) return false;\n\tif (!recoverMissingSuffix) {\n\t\tthrow new Error(\"Worker conversation birth context prefix is incomplete; reopen through ensure for recovery.\");\n\t}\n\tfor (const message of snapshot.messages.slice(entryCount)) {\n\t\tsessionManager.appendMessage(structuredClone(workerMessageForPersistence(message)));\n\t}\n\treturn true;\n}\n\nfunction assertAttemptUsageId(attemptId: string): string {\n\tconst normalized = attemptId.trim();\n\tif (!normalized || normalized.length > MAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS) {\n\t\tthrow new TypeError(\"Worker usage-boundary attempt id is invalid or exceeds its durable bound.\");\n\t}\n\treturn normalized;\n}\n\ninterface AttemptUsageBoundaryIndex {\n\tsessionId: string;\n\tsessionFile?: string;\n\tscannedEntryCount: number;\n\torderedIndices: number[];\n\tindicesByAttemptId: Map<string, number[]>;\n}\n\nconst attemptUsageBoundaryIndices = new WeakMap<SessionManager, AttemptUsageBoundaryIndex>();\n\nfunction attemptUsageBoundaryId(entry: Readonly<WorkerSessionEntry>): string | undefined {\n\tif (entry.type !== \"custom\" || entry.customType !== WORKER_ATTEMPT_USAGE_BOUNDARY_CUSTOM_TYPE) return undefined;\n\tconst data = entry.data;\n\tif (!data || typeof data !== \"object\" || Array.isArray(data)) return undefined;\n\tconst descriptor = Object.getOwnPropertyDescriptor(data, \"attemptId\");\n\tif (!descriptor || !(\"value\" in descriptor) || typeof descriptor.value !== \"string\") return undefined;\n\treturn descriptor.value;\n}\n\nfunction firstIndexAtOrAfter(indices: readonly number[], startIndex: number): number {\n\tlet low = 0;\n\tlet high = indices.length;\n\twhile (low < high) {\n\t\tconst middle = low + Math.floor((high - low) / 2);\n\t\tif (indices[middle]! < startIndex) low = middle + 1;\n\t\telse high = middle;\n\t}\n\treturn indices[low] ?? -1;\n}\n\n/** Sole parser/index owner for durable attempt-usage boundary entries. */\nfunction attemptUsageBoundaryIndex(\n\tsessionManager: SessionManager,\n\tattemptId: string | undefined,\n\tstartIndex = 0,\n): number {\n\tconst entryCount = sessionManager.getEntryCount();\n\tlet index = attemptUsageBoundaryIndices.get(sessionManager);\n\tif (\n\t\t!index ||\n\t\tindex.sessionId !== sessionManager.getSessionId() ||\n\t\tindex.sessionFile !== sessionManager.getSessionFile() ||\n\t\tindex.scannedEntryCount > entryCount\n\t) {\n\t\tindex = {\n\t\t\tsessionId: sessionManager.getSessionId(),\n\t\t\t...(sessionManager.getSessionFile() ? { sessionFile: sessionManager.getSessionFile() } : {}),\n\t\t\tscannedEntryCount: 0,\n\t\t\torderedIndices: [],\n\t\t\tindicesByAttemptId: new Map(),\n\t\t};\n\t\tattemptUsageBoundaryIndices.set(sessionManager, index);\n\t}\n\tif (index.scannedEntryCount < entryCount) {\n\t\tvisitWorkerSessionEntries(sessionManager, index.scannedEntryCount, entryCount, (entry, entryIndex) => {\n\t\t\tconst boundaryAttemptId = attemptUsageBoundaryId(entry);\n\t\t\tif (!boundaryAttemptId) return;\n\t\t\tindex.orderedIndices.push(entryIndex);\n\t\t\tconst attemptIndices = index.indicesByAttemptId.get(boundaryAttemptId);\n\t\t\tif (attemptIndices) attemptIndices.push(entryIndex);\n\t\t\telse index.indicesByAttemptId.set(boundaryAttemptId, [entryIndex]);\n\t\t});\n\t\tindex.scannedEntryCount = entryCount;\n\t}\n\treturn firstIndexAtOrAfter(\n\t\tattemptId === undefined ? index.orderedIndices : (index.indicesByAttemptId.get(attemptId) ?? []),\n\t\tstartIndex,\n\t);\n}\n\nfunction exactUserText(message: WorkerSessionMessage): string | undefined {\n\tif (!isRawWorkerTranscriptMessage(message) || message.role !== \"user\") return undefined;\n\tif (typeof message.content === \"string\") return message.content;\n\tlet text = \"\";\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"text\") return undefined;\n\t\ttext += block.text;\n\t}\n\treturn text;\n}\n\nfunction scanWorkerControlTranscript(\n\tsessionManager: SessionManager,\n\texpectations: readonly WorkerControlTranscriptExpectation[],\n): Set<string> {\n\tconst expectedById = new Map<string, string>();\n\tfor (const expectation of expectations) {\n\t\tconst messageId = expectation.messageId.trim();\n\t\tif (!messageId || workerControlMessageId(expectation.content) !== messageId) {\n\t\t\tthrow new TypeError(\"Worker control transcript expectation is invalid.\");\n\t\t}\n\t\tconst existing = expectedById.get(messageId);\n\t\tif (existing !== undefined && existing !== expectation.content) {\n\t\t\tthrow new Error(\"Worker control transcript identity has conflicting expected content.\");\n\t\t}\n\t\texpectedById.set(messageId, expectation.content);\n\t}\n\tconst matchCounts = new Map<string, number>();\n\tvisitWorkerSessionEntries(sessionManager, 0, sessionManager.getEntryCount(), (entry, _index, persistedBytes) => {\n\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\") return;\n\t\tif (persistedBytes !== undefined) {\n\t\t\tfor (const messageId of expectedById.keys()) {\n\t\t\t\tif (coldWorkerControlPrefixContains(sessionManager, entry.id, messageId)) {\n\t\t\t\t\tthrow new Error(\"Worker control transcript identity conflicts with oversized persisted content.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst content = exactUserText(entry.message);\n\t\tif (content === undefined) return;\n\t\tconst messageId = workerControlMessageId(content);\n\t\tif (!messageId || !expectedById.has(messageId)) return;\n\t\tif (expectedById.get(messageId) !== content) {\n\t\t\tthrow new Error(\"Worker control transcript identity conflicts with existing content.\");\n\t\t}\n\t\tconst count = (matchCounts.get(messageId) ?? 0) + 1;\n\t\tif (count > 1) throw new Error(\"Worker control transcript contains a duplicate message id.\");\n\t\tmatchCounts.set(messageId, count);\n\t});\n\treturn new Set(matchCounts.keys());\n}\n\nfunction assertWorkerConversationFile(agentDir: string, sessionFile: string, sessionId: string): string {\n\tconst workersRoot = resolve(orchestrationSessionsDir(agentDir));\n\tconst resolvedFile = resolve(sessionFile);\n\tconst fileRelativeToWorkersRoot = relative(workersRoot, resolvedFile);\n\tif (\n\t\tfileRelativeToWorkersRoot === \"\" ||\n\t\tfileRelativeToWorkersRoot.startsWith(\"..\") ||\n\t\tisAbsolute(fileRelativeToWorkersRoot)\n\t) {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tconst segments = fileRelativeToWorkersRoot.split(/[\\\\/]/);\n\tif (segments.length !== 3 || segments[1] !== \"worker-conversations\") {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tif (basename(resolvedFile) !== `${sessionId}.jsonl`) {\n\t\tthrow new Error(\"Worker conversation session file does not match its durable session id.\");\n\t}\n\treturn resolvedFile;\n}\n\n/**\n * Durable SessionManager-backed transcript for exactly one logical worker lane.\n *\n * The canonical session-file lock plus a raw-byte revision head fences competing processes. One\n * store shares the parsed core across lightweight resume-context views; unexpected durable changes\n * fail closed for active owners and only strict append-only recovery may replace the core.\n */\nexport class WorkerConversation {\n\tprivate readonly core: WorkerConversationCore;\n\tprivate readonly resumeContext: AgentResumeContext;\n\tprivate readonly agentDir?: string;\n\tprivate readonly metadataFile?: string;\n\n\tconstructor(\n\t\tsessionManager: SessionManager,\n\t\tresumeContext: AgentResumeContext,\n\t\tmetadata?: WorkerConversationMetadataBinding,\n\t\tsharedCore?: WorkerConversationCore,\n\t) {\n\t\tthis.core = sharedCore ?? {\n\t\t\tsessionManager,\n\t\t\t...(metadata ? { metadataState: cloneWorkerConversationMetadataState(metadata) } : {}),\n\t\t\tinvalid: false,\n\t\t\tgeneration: 0,\n\t\t\tactiveTranscriptCursors: 0,\n\t\t};\n\t\tthis.resumeContext = cloneResumeContext(resumeContext);\n\t\tthis.agentDir = metadata?.agentDir;\n\t\tthis.metadataFile = metadata?.file;\n\t}\n\n\tprivate get sessionManager(): SessionManager {\n\t\treturn this.core.sessionManager;\n\t}\n\n\tprivate set sessionManager(sessionManager: SessionManager) {\n\t\tthis.core.sessionManager = sessionManager;\n\t}\n\n\t/** Persisted conversations share one adopted metadata state; direct in-memory instances are current. */\n\tprivate get usageAccountingVersion(): 1 | undefined {\n\t\treturn this.metadataFile ? this.core.metadataState?.usageAccountingVersion : 1;\n\t}\n\n\t/** Immutable parent-context identity installed before this logical worker's first attempt. */\n\tgetBirthContextForkReference(): WorkerContextForkReference | undefined {\n\t\tconst reference = this.core.metadataState?.birthContextForkReference;\n\t\treturn reference ? structuredClone(reference) : undefined;\n\t}\n\n\t/** Resolve current provider-visible messages lazily through SessionManager. */\n\tgetProviderContext(): SessionContext {\n\t\treturn this.sessionManager.buildSessionContext();\n\t}\n\n\t/** Convert the current compacted projection at its transcript owner, never at each consumer. */\n\tgetProviderMessages(): Message[] {\n\t\treturn convertToLlm(this.getProviderContext().messages);\n\t}\n\n\t/** True when provider context is a compacted projection rather than the raw transcript prefix. */\n\thasProviderCompaction(): boolean {\n\t\treturn this.sessionManager.getBranch().some((entry) => entry.type === \"compaction\");\n\t}\n\n\t/**\n\t * The immutable, append-only raw worker messages, including messages compacted out of provider\n\t * context. This is recovery/audit data; it is never loaded into a provider request implicitly.\n\t */\n\tgetRawTranscript(): Message[] {\n\t\tconst messages: Message[] = [];\n\t\tvisitWorkerSessionEntries(this.sessionManager, 0, this.sessionManager.getEntryCount(), (entry) => {\n\t\t\tconst message = rawWorkerTranscriptMessage(entry);\n\t\t\tif (message) messages.push(structuredClone(message));\n\t\t});\n\t\treturn messages;\n\t}\n\n\t/**\n\t * Read one bounded raw-transcript page without materializing the complete session entry list.\n\t * A message larger than the complete page ceiling is consumed as an omission so every valid\n\t * non-terminal cursor advances. The opaque cursor is a raw-entry offset, so each entry is visited\n\t * at most once across a complete pagination pass and a page may contain no transcript messages.\n\t * `serializedBytes` measures the returned `messages` JSON array.\n\t */\n\tgetRawTranscriptPage(options: WorkerConversationTranscriptPageOptions = {}): WorkerConversationTranscriptPage {\n\t\tconst cursor = options.cursor ?? 0;\n\t\tconst maxMessages = options.maxMessages ?? MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES;\n\t\tconst maxBytes = options.maxBytes ?? MAX_WORKER_TRANSCRIPT_PAGE_BYTES;\n\t\tif (!Number.isSafeInteger(cursor) || cursor < 0) {\n\t\t\tthrow new TypeError(\"Worker transcript cursor must be a non-negative safe integer.\");\n\t\t}\n\t\tif (!Number.isSafeInteger(maxMessages) || maxMessages < 1 || maxMessages > MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Worker transcript page message count must be from 1 through ${MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES}.`,\n\t\t\t);\n\t\t}\n\t\tif (!Number.isSafeInteger(maxBytes) || maxBytes < 2 || maxBytes > MAX_WORKER_TRANSCRIPT_PAGE_BYTES) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Worker transcript page byte ceiling must be from 2 through ${MAX_WORKER_TRANSCRIPT_PAGE_BYTES}.`,\n\t\t\t);\n\t\t}\n\n\t\tconst messages: Message[] = [];\n\t\tlet consumedMessages = 0;\n\t\tlet omittedMessages = 0;\n\t\tlet serializedBytes = 2;\n\t\tlet pageClosed = false;\n\t\tconst singleMessageByteLimit = maxBytes - 2;\n\t\tconst entryCount = this.sessionManager.getEntryCount();\n\t\tif (cursor > entryCount) {\n\t\t\tthrow new TypeError(\"Worker transcript cursor exceeds the durable transcript length.\");\n\t\t}\n\t\tlet nextEntryCursor = cursor;\n\t\tif (cursor < entryCount) {\n\t\t\tconst visitedThrough = this.sessionManager.visitEntries(\n\t\t\t\tcursor,\n\t\t\t\tMath.min(MAX_SESSION_ENTRY_VISIT_COUNT, entryCount - cursor),\n\t\t\t\t(entry, entryIndex, persistedBytes) => {\n\t\t\t\t\tif (pageClosed) return;\n\t\t\t\t\tconst message = rawWorkerTranscriptMessage(entry);\n\t\t\t\t\tif (!message) {\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (consumedMessages >= maxMessages) {\n\t\t\t\t\t\tpageClosed = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(persistedBytes !== undefined && persistedBytes > singleMessageByteLimit) ||\n\t\t\t\t\t\tboundedJsonBytes(message, singleMessageByteLimit) > singleMessageByteLimit\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\t\tomittedMessages += 1;\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet clonedMessage: Message;\n\t\t\t\t\tlet messageBytes: number;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclonedMessage = structuredClone(message);\n\t\t\t\t\t\tconst serializedMessage = JSON.stringify(clonedMessage);\n\t\t\t\t\t\tmessageBytes = Buffer.byteLength(serializedMessage, \"utf8\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\t\tomittedMessages += 1;\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (messageBytes > singleMessageByteLimit) {\n\t\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\t\tomittedMessages += 1;\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst separatorBytes = messages.length > 0 ? 1 : 0;\n\t\t\t\t\tif (serializedBytes + separatorBytes + messageBytes > maxBytes) {\n\t\t\t\t\t\tpageClosed = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tmessages.push(clonedMessage);\n\t\t\t\t\tserializedBytes += separatorBytes + messageBytes;\n\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (!pageClosed) nextEntryCursor = visitedThrough;\n\t\t}\n\t\treturn {\n\t\t\tcursor,\n\t\t\tmessages,\n\t\t\tnextCursor: nextEntryCursor < entryCount ? nextEntryCursor : undefined,\n\t\t\tomittedMessages,\n\t\t\tserializedBytes,\n\t\t};\n\t}\n\n\t/** Last durable provider message owned by one attempt, never an earlier persistent-worker turn. */\n\tgetLastAttemptMessage(attemptId: string): Message | undefined {\n\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId);\n\t\tif (boundaryIndex < 0) {\n\t\t\tif (this.usageAccountingVersion === 1) return undefined;\n\t\t\tconst legacyLast = this.getProviderMessages().at(-1);\n\t\t\treturn legacyLast ? structuredClone(legacyLast) : undefined;\n\t\t}\n\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, boundaryIndex + 1);\n\t\tconst lastAttemptEntry = nextBoundaryIndex >= 0 ? nextBoundaryIndex : this.sessionManager.getEntryCount();\n\t\tlet lastMessage: Message | undefined;\n\t\tvisitWorkerSessionEntries(this.sessionManager, boundaryIndex + 1, lastAttemptEntry, (entry) => {\n\t\t\tif (entry.type !== \"message\") return;\n\t\t\tif (\n\t\t\t\tentry.message.role !== \"user\" &&\n\t\t\t\tentry.message.role !== \"assistant\" &&\n\t\t\t\tentry.message.role !== \"toolResult\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlastMessage = structuredClone(entry.message);\n\t\t});\n\t\treturn lastMessage;\n\t}\n\n\t/** Durable host-observed mutation progress. Custom entries never enter provider context. */\n\trecordChangedFile(attemptId: string, filePath: string): void {\n\t\tif (!attemptId.trim() || attemptId.length > MAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress attempt id is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst candidate = collectBoundedWorkerClaimChangedFiles([filePath]);\n\t\tif (candidate.overflowed || candidate.values.length !== 1) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress path is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst path = candidate.values[0]!;\n\t\tif (this.usageAccountingVersion === 1) this.beginAttemptUsage(attemptId);\n\t\tconst existing = this.getChangedFiles(attemptId);\n\t\tif (existing.includes(path)) return;\n\t\tif (existing.length >= MAX_WORKER_CLAIM_CHANGED_FILES) {\n\t\t\tthrow new Error(\"Worker changed-file progress exceeds its durable entry bound.\");\n\t\t}\n\t\tthis.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendCustomEntry(WORKER_CHANGED_FILE_CUSTOM_TYPE, { attemptId, path }),\n\t\t);\n\t}\n\n\t/** Rehydrate the bounded mutation set across owner-session disposal and worker resume. */\n\tgetChangedFiles(attemptId: string): string[] {\n\t\tlet firstEntry = 0;\n\t\tlet lastEntry = this.sessionManager.getEntryCount();\n\t\tif (this.usageAccountingVersion === 1) {\n\t\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, assertAttemptUsageId(attemptId));\n\t\t\tif (boundaryIndex < 0) return [];\n\t\t\tfirstEntry = boundaryIndex + 1;\n\t\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, firstEntry);\n\t\t\tif (nextBoundaryIndex >= 0) lastEntry = nextBoundaryIndex;\n\t\t}\n\t\tconst paths: string[] = [];\n\t\tvisitWorkerSessionEntries(this.sessionManager, firstEntry, lastEntry, (entry) => {\n\t\t\tif (entry.type !== \"custom\" || entry.customType !== WORKER_CHANGED_FILE_CUSTOM_TYPE) return;\n\t\t\tconst data = entry.data;\n\t\t\tif (!data || typeof data !== \"object\" || Array.isArray(data)) return;\n\t\t\tconst attemptDescriptor = Object.getOwnPropertyDescriptor(data, \"attemptId\");\n\t\t\tconst pathDescriptor = Object.getOwnPropertyDescriptor(data, \"path\");\n\t\t\tif (\n\t\t\t\tattemptDescriptor &&\n\t\t\t\t\"value\" in attemptDescriptor &&\n\t\t\t\tattemptDescriptor.value === attemptId &&\n\t\t\t\tpathDescriptor &&\n\t\t\t\t\"value\" in pathDescriptor &&\n\t\t\t\ttypeof pathDescriptor.value === \"string\"\n\t\t\t) {\n\t\t\t\tpaths.push(pathDescriptor.value);\n\t\t\t}\n\t\t});\n\t\treturn collectBoundedWorkerClaimChangedFiles(paths).values;\n\t}\n\n\t/**\n\t * Mark the first transcript entry owned by one durable attempt. Persistent logical workers share\n\t * a conversation across tasks, so recovery accounting must not replay an earlier task's spend as\n\t * the new attempt's baseline. The marker is idempotent and never enters provider context.\n\t */\n\tbeginAttemptUsage(attemptId: string): void {\n\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\tthis.enableAttemptUsageBoundaries();\n\t\tif (attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId) >= 0) return;\n\t\tthis.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendCustomEntry(WORKER_ATTEMPT_USAGE_BOUNDARY_CUSTOM_TYPE, {\n\t\t\t\tattemptId: normalizedAttemptId,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Persist the authoritative task prompt once inside its durable attempt boundary. The boundary,\n\t * rather than provider-history length, is the idempotency owner: inherited birth messages and\n\t * queued mailbox controls may already exist, while a crash after append must not duplicate the\n\t * prompt on resume.\n\t */\n\tensureAttemptUserPrompt(attemptId: string, prompt: string): void {\n\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\tif (!prompt.trim()) throw new TypeError(\"Worker attempt prompt is required.\");\n\t\tthis.beginAttemptUsage(normalizedAttemptId);\n\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId);\n\t\tif (boundaryIndex < 0) throw new Error(\"Worker attempt prompt boundary was not persisted.\");\n\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, boundaryIndex + 1);\n\t\tconst endIndex = nextBoundaryIndex < 0 ? this.sessionManager.getEntryCount() : nextBoundaryIndex;\n\t\tlet matches = 0;\n\t\tvisitWorkerSessionEntries(this.sessionManager, boundaryIndex + 1, endIndex, (entry) => {\n\t\t\tif (entry?.type === \"message\" && entry.message.role === \"user\" && exactUserText(entry.message) === prompt) {\n\t\t\t\tmatches += 1;\n\t\t\t}\n\t\t});\n\t\tif (matches > 1) throw new Error(\"Worker attempt prompt appears more than once in its durable boundary.\");\n\t\tif (matches === 1) return;\n\t\tthis.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendMessage({ role: \"user\", content: prompt, timestamp: Date.now() }),\n\t\t);\n\t}\n\n\t/** Whether missing attempt markers have versioned, fail-closed accounting semantics. */\n\tusesAttemptUsageBoundaries(): boolean {\n\t\treturn this.usageAccountingVersion === 1;\n\t}\n\n\t/**\n\t * Upgrade a legacy idle conversation before its next durable task is prepared. Persisting this\n\t * evidence first closes the crash window where the task exists but its transcript marker does not.\n\t */\n\tenableAttemptUsageBoundaries(): void {\n\t\tif (this.usageAccountingVersion === 1) return;\n\t\tconst metadataFile = this.metadataFile;\n\t\tif (!metadataFile) return;\n\t\tconst sessionFile = this.resumeContext.sessionFile;\n\t\tif (!sessionFile) throw new Error(\"Worker conversation cannot version usage without a session file.\");\n\t\twithFileLockSync(sessionFile, () => {\n\t\t\tthis.synchronizeCoreLocked(false);\n\t\t\tconst currentMetadataState = this.core.metadataState;\n\t\t\tlet metadata = assertExactConversationMetadata(\n\t\t\t\tmetadataFile,\n\t\t\t\tthis.resumeContext,\n\t\t\t\tcurrentMetadataState?.logicalAgentId,\n\t\t\t\tcurrentMetadataState?.parentSessionId,\n\t\t\t\tcurrentMetadataState?.birthContextForkReference,\n\t\t\t);\n\t\t\tif (metadata.usageAccountingVersion !== 1) {\n\t\t\t\tmetadata = { ...metadata, usageAccountingVersion: 1 };\n\t\t\t\twriteWorkerConversationMetadata(metadataFile, metadata);\n\t\t\t}\n\t\t\tconst metadataState = cloneWorkerConversationMetadataState(metadata);\n\t\t\tconst metadataRevision = readWorkerConversationFileRevision(metadataFile);\n\t\t\tthis.core.metadataState = metadataState;\n\t\t\tthis.core.metadataRevision = metadataRevision;\n\t\t});\n\t}\n\n\t/**\n\t * Recover cumulative accounting from raw entry metadata without cloning or resolving message\n\t * payloads that compaction deliberately moved out of the provider-visible working set. Attempts\n\t * created before usage boundaries existed conservatively fall back to the complete transcript.\n\t */\n\tgetRawTranscriptUsage(attemptId?: string): AttemptUsageSnapshot {\n\t\tconst usage: AttemptUsageSnapshot = {\n\t\t\ttoolCalls: 0,\n\t\t\tinputTokens: 0,\n\t\t\toutputTokens: 0,\n\t\t\tcacheReadTokens: 0,\n\t\t\tcacheWriteTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcostUsd: 0,\n\t\t\tactiveWallClockMs: 0,\n\t\t};\n\t\tlet firstUsageEntry = 0;\n\t\tlet lastUsageEntry = this.sessionManager.getEntryCount();\n\t\tif (attemptId !== undefined) {\n\t\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId);\n\t\t\tif (boundaryIndex >= 0) {\n\t\t\t\tfirstUsageEntry = boundaryIndex + 1;\n\t\t\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, firstUsageEntry);\n\t\t\t\tif (nextBoundaryIndex >= 0) lastUsageEntry = nextBoundaryIndex;\n\t\t\t} else if (this.usageAccountingVersion === 1) firstUsageEntry = lastUsageEntry;\n\t\t}\n\t\tvisitWorkerSessionEntries(this.sessionManager, firstUsageEntry, lastUsageEntry, (entry) => {\n\t\t\tif (entry.type === \"compaction\" && entry.usage) {\n\t\t\t\tusage.inputTokens += entry.usage.input;\n\t\t\t\tusage.outputTokens += entry.usage.output;\n\t\t\t\tusage.cacheReadTokens += entry.usage.cacheRead;\n\t\t\t\tusage.cacheWriteTokens += entry.usage.cacheWrite;\n\t\t\t\tusage.totalTokens += entry.usage.totalTokens;\n\t\t\t\tusage.costUsd += entry.usage.cost.total;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.type !== \"message\") return;\n\t\t\tif (entry.message.role === \"toolResult\") {\n\t\t\t\tusage.toolCalls += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.message.role !== \"assistant\") return;\n\t\t\tusage.inputTokens += entry.message.usage.input;\n\t\t\tusage.outputTokens += entry.message.usage.output;\n\t\t\tusage.cacheReadTokens += entry.message.usage.cacheRead;\n\t\t\tusage.cacheWriteTokens += entry.message.usage.cacheWrite;\n\t\t\tusage.totalTokens += entry.message.usage.totalTokens;\n\t\t\tusage.costUsd += entry.message.usage.cost.total;\n\t\t});\n\t\treturn validateAttemptUsageSnapshot(usage, \"legacy worker transcript usage\");\n\t}\n\n\t/**\n\t * Locate a bounded set of durable mailbox delivery commits without materializing or cloning the\n\t * complete raw transcript. Recovery uses this only to close the narrow crash window after a\n\t * control message was appended but before its mailbox acknowledgement was persisted.\n\t */\n\tfindDeliveredWorkerControlMessageIds(expectations: readonly WorkerControlTranscriptExpectation[]): Set<string> {\n\t\tif (expectations.length === 0) return new Set();\n\t\treturn this.withCanonicalSessionLock(\n\t\t\t(sessionManager) => scanWorkerControlTranscript(sessionManager, expectations),\n\t\t\ttrue,\n\t\t);\n\t}\n\n\t/**\n\t * Atomically prove one exact worker-control identity and optionally append it. Reopening inside\n\t * the canonical session-file lock makes two stale recovery owners serialize on the latest durable\n\t * transcript instead of both observing absence and appending a duplicate.\n\t */\n\treconcileWorkerControlMessage(\n\t\texpectation: WorkerControlTranscriptExpectation,\n\t\tmessage: Message,\n\t\tappendIfMissing: boolean,\n\t): WorkerControlTranscriptReconciliation {\n\t\tif (message.role !== \"user\" || typeof message.content !== \"string\" || message.content !== expectation.content) {\n\t\t\tthrow new TypeError(\"Worker control transcript message does not match its expectation.\");\n\t\t}\n\t\treturn this.withCanonicalSessionLock((sessionManager) => {\n\t\t\tconst delivered = scanWorkerControlTranscript(sessionManager, [expectation]).has(expectation.messageId);\n\t\t\tif (delivered || !appendIfMissing) return { delivered, appended: false };\n\t\t\tthis.appendSessionEntryLocked(sessionManager, (owner) =>\n\t\t\t\towner.appendMessage(structuredClone(workerMessageForPersistence(message))),\n\t\t\t);\n\t\t\treturn { delivered: true, appended: true };\n\t\t}, true);\n\t}\n\n\t/**\n\t * Append one shared-compaction checkpoint when the current provider-visible context exceeds the\n\t * explicit worker policy. The source transcript remains append-only; only the projection sent to\n\t * the next provider call changes. The method is idempotent while no new messages are appended.\n\t */\n\tasync compactProviderContext(\n\t\tpolicy: WorkerConversationRetentionPolicy,\n\t\tsignal?: AbortSignal,\n\t): Promise<WorkerConversationRetentionOutcome> {\n\t\tassertRetentionPolicy(policy);\n\t\tsignal?.throwIfAborted();\n\t\tconst preparationEntryCount = this.withCanonicalSessionLock((sessionManager) => sessionManager.getEntryCount());\n\t\tconst before = this.getProviderContext();\n\t\tconst beforeUsage = estimateContextTokens(before.messages);\n\t\tif (beforeUsage.tokens <= policy.maxContextTokens) {\n\t\t\treturn { status: \"within_limit\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tconst preparation = prepareCompaction(this.sessionManager.getBranch(), {\n\t\t\tenabled: true,\n\t\t\t// The store does not choose a model or invoke a provider. This is only the shared cut-point\n\t\t\t// input required by deterministic fallback; a controller-provided verified generator owns\n\t\t\t// the model-specific reserve and retry policy.\n\t\t\treserveTokens: Math.max(1, Math.floor(policy.maxContextTokens / 4)),\n\t\t\tkeepRecentTokens: policy.keepRecentTokens,\n\t\t\ttriggerPercent: 0,\n\t\t});\n\t\tif (!preparation) {\n\t\t\treturn { status: \"cannot_compact\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tlet result: CompactionResult;\n\t\tlet status: WorkerConversationRetentionOutcome[\"status\"] = \"compacted_deterministic\";\n\t\tif (policy.generateVerifiedCompaction) {\n\t\t\ttry {\n\t\t\t\tconst verified = await policy.generateVerifiedCompaction(preparation);\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tassertApplicableCompactionResult(verified, preparation);\n\t\t\t\tresult = verified;\n\t\t\t\tstatus = \"compacted_verified\";\n\t\t\t} catch {\n\t\t\t\t// Cancellation/suspension transfers transcript ownership. The retiring owner must\n\t\t\t\t// not append a fallback after its execution fence has been released.\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tconst failedUsage = policy.getFailedCompactionUsage?.();\n\t\t\t\tresult = {\n\t\t\t\t\t...createDeterministicCompaction(preparation),\n\t\t\t\t\t...(failedUsage ? { usage: structuredClone(failedUsage) } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tresult = createDeterministicCompaction(preparation);\n\t\t}\n\n\t\tsignal?.throwIfAborted();\n\t\tthis.appendSessionEntry((sessionManager) => {\n\t\t\tif (sessionManager.getEntryCount() !== preparationEntryCount) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation changed while its compaction checkpoint was generated.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn sessionManager.appendCompaction(\n\t\t\t\tresult.summary,\n\t\t\t\tresult.firstKeptEntryId,\n\t\t\t\tresult.tokensBefore,\n\t\t\t\tresult.details,\n\t\t\t\tfalse,\n\t\t\t\tresult.usage,\n\t\t\t);\n\t\t});\n\t\tconst context = this.getProviderContext();\n\t\treturn { status, context, contextUsage: estimateContextTokens(context.messages) };\n\t}\n\n\t/** Append one already-authorized worker message to the canonical transcript. */\n\tappendMessage(message: Message): string {\n\t\treturn this.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendMessage(structuredClone(workerMessageForPersistence(message))),\n\t\t);\n\t}\n\n\tprivate appendSessionEntry(operation: (sessionManager: SessionManager) => string): string {\n\t\treturn this.withCanonicalSessionLock((sessionManager) =>\n\t\t\tthis.appendSessionEntryLocked(sessionManager, operation),\n\t\t);\n\t}\n\n\tprivate appendSessionEntryLocked(\n\t\tsessionManager: SessionManager,\n\t\toperation: (sessionManager: SessionManager) => string,\n\t): string {\n\t\tconst beforeCount = sessionManager.getEntryCount();\n\t\tlet entryId: string;\n\t\ttry {\n\t\t\tentryId = operation(sessionManager);\n\t\t} catch (error) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow error;\n\t\t}\n\t\tif (sessionManager.getEntryCount() !== beforeCount + 1) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation append did not advance exactly one entry.\");\n\t\t}\n\t\tconst head = this.core.head;\n\t\tif (!head) return entryId;\n\t\tconst entry = sessionManager.getEntry(entryId);\n\t\tif (!entry) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation appended entry is unavailable.\");\n\t\t}\n\t\tconst serialized = JSON.stringify(entry);\n\t\ttry {\n\t\t\tthis.core.head = advanceWorkerSessionHeadAfterOwnedAppend(this.resumeContext.sessionFile!, head, serialized);\n\t\t} catch (error) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow error;\n\t\t}\n\t\tif (entry.type === \"message\") {\n\t\t\ttry {\n\t\t\t\tsessionManager.releasePersistedMessagePayload(entryId);\n\t\t\t} catch (error) {\n\t\t\t\tthis.core.invalid = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tthis.core.invalid = false;\n\t\treturn entryId;\n\t}\n\n\tprivate reopenVerifiedSessionManagerLocked(\n\t\texpectedEntryCount: number,\n\t\tfailure: \"recovery state\" | \"appended suffix\",\n\t): SessionManager {\n\t\tconst sessionFile = this.resumeContext.sessionFile!;\n\t\tconst sessionDir = this.resumeContext.sessionDir ?? dirname(sessionFile);\n\t\tconst sessionManager = SessionManager.open(sessionFile, this.agentDir!, sessionDir);\n\t\tif (\n\t\t\tsessionManager.getSessionId() !== this.resumeContext.sessionId ||\n\t\t\tsessionManager.getCwd() !== resolve(this.resumeContext.cwd) ||\n\t\t\tsessionManager.getEntryCount() !== expectedEntryCount\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(`Worker conversation ${failure} is invalid.`);\n\t\t}\n\t\tassertLinearWorkerSession(sessionManager);\n\t\treturn sessionManager;\n\t}\n\n\tprivate synchronizeCoreLocked(allowExternalAppend: boolean): void {\n\t\tconst sessionFile = this.resumeContext.sessionFile;\n\t\tif (!sessionFile) return;\n\t\tif (this.metadataFile && this.core.metadataRevision) {\n\t\t\tconst metadataRevision = readWorkerConversationFileRevision(this.metadataFile);\n\t\t\tif (!sameWorkerConversationFileRevision(this.core.metadataRevision, metadataRevision)) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation metadata changed under a different owner.\");\n\t\t\t}\n\t\t}\n\t\tconst currentRevision = readWorkerConversationFileRevision(sessionFile);\n\t\tconst head = this.core.head;\n\t\tif (!this.core.invalid && head && sameWorkerConversationFileRevision(head.revision, currentRevision)) return;\n\t\tconst scanned = scanWorkerSessionFile(\n\t\t\tsessionFile,\n\t\t\tthis.resumeContext.sessionId,\n\t\t\tthis.resumeContext.cwd,\n\t\t\thead?.entryCount,\n\t\t);\n\t\tif (!head) {\n\t\t\tif (scanned.entryCount !== this.sessionManager.getEntryCount()) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation session entries are invalid.\");\n\t\t\t}\n\t\t\tthis.core.head = scanned;\n\t\t\tthis.core.invalid = false;\n\t\t\treturn;\n\t\t}\n\t\tif (scanned.revision.dev !== head.revision.dev || scanned.revision.ino !== head.revision.ino) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation file identity changed.\");\n\t\t}\n\t\tif (\n\t\t\tscanned.headerDigest !== head.headerDigest ||\n\t\t\tscanned.entryCount < head.entryCount ||\n\t\t\tscanned.prefixDigest !== head.entryDigest\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation durable prefix changed.\");\n\t\t}\n\t\tif (scanned.entryCount === head.entryCount) {\n\t\t\tif (scanned.entryDigest !== head.entryDigest) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation durable content changed.\");\n\t\t\t}\n\t\t\tif (this.core.invalid || this.sessionManager.getEntryCount() !== scanned.entryCount) {\n\t\t\t\tthis.sessionManager = this.reopenVerifiedSessionManagerLocked(scanned.entryCount, \"recovery state\");\n\t\t\t\tthis.core.generation += 1;\n\t\t\t}\n\t\t\tthis.core.head = scanned;\n\t\t\tthis.core.invalid = false;\n\t\t\treturn;\n\t\t}\n\t\tif (!allowExternalAppend) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation advanced under a different owner.\");\n\t\t}\n\t\tif (this.core.activeTranscriptCursors > 0) {\n\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\"Worker conversation advanced while a transcript commit was active.\",\n\t\t\t);\n\t\t}\n\t\tthis.sessionManager = this.reopenVerifiedSessionManagerLocked(scanned.entryCount, \"appended suffix\");\n\t\tthis.core.head = scanned;\n\t\tthis.core.invalid = false;\n\t\tthis.core.generation += 1;\n\t}\n\n\t/** Store-only refresh while the canonical session-file lock is already held. */\n\trefreshCachedCoreLocked(): void {\n\t\tthis.synchronizeCoreLocked(true);\n\t}\n\n\tprivate captureTranscriptCommitCursorLocked(sessionManager: SessionManager): WorkerTranscriptCommitCursor {\n\t\tconst cursor: WorkerTranscriptCommitCursor = Object.freeze({ kind: \"worker-transcript-suffix-v1\" });\n\t\tworkerTranscriptCommitCursorStates.set(cursor, {\n\t\t\tcore: this.core,\n\t\t\tentryIndex: sessionManager.getEntryCount(),\n\t\t\tgeneration: this.core.generation,\n\t\t\tstatus: \"active\",\n\t\t});\n\t\tthis.core.activeTranscriptCursors += 1;\n\t\treturn cursor;\n\t}\n\n\t/** Atomically capture the provider projection and the raw-entry cursor that immediately follows it. */\n\tbeginTranscriptCommit(): { history: Message[]; cursor: WorkerTranscriptCommitCursor } {\n\t\treturn this.withCanonicalSessionLock((sessionManager) => ({\n\t\t\thistory: convertToLlm(sessionManager.buildSessionContext().messages),\n\t\t\tcursor: this.captureTranscriptCommitCursorLocked(sessionManager),\n\t\t}));\n\t}\n\n\tprivate withCanonicalSessionLock<Result>(\n\t\toperation: (sessionManager: SessionManager) => Result,\n\t\tallowExternalAppend = false,\n\t): Result {\n\t\tconst sessionFile = this.resumeContext.sessionFile;\n\t\tif (!sessionFile) return operation(this.sessionManager);\n\t\tconst agentDir = this.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Worker conversation cannot lock a persisted transcript without its agent directory.\");\n\t\t}\n\t\treturn withFileLockSync(sessionFile, () => {\n\t\t\tthis.synchronizeCoreLocked(allowExternalAppend);\n\t\t\tconst sessionManager = this.sessionManager;\n\t\t\tif (\n\t\t\t\tsessionManager.getSessionId() !== this.resumeContext.sessionId ||\n\t\t\t\tsessionManager.getCwd() !== resolve(this.resumeContext.cwd)\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Worker conversation changed identity while acquiring its transcript lock.\");\n\t\t\t}\n\t\t\treturn operation(sessionManager);\n\t\t});\n\t}\n\n\t/** Commit only the bounded child-loop suffix captured by an opaque raw-entry cursor. */\n\tcaptureTranscriptCommitCursor(): WorkerTranscriptCommitCursor {\n\t\treturn this.withCanonicalSessionLock((sessionManager) =>\n\t\t\tthis.captureTranscriptCommitCursorLocked(sessionManager),\n\t\t);\n\t}\n\n\tabortTranscriptCommit(cursor: WorkerTranscriptCommitCursor): void {\n\t\tconst state = workerTranscriptCommitCursorStates.get(cursor);\n\t\tif (!state || state.core !== this.core) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker transcript cursor belongs to a different conversation.\");\n\t\t}\n\t\tif (state.status === \"active\") {\n\t\t\tstate.status = \"aborted\";\n\t\t\tthis.core.activeTranscriptCursors -= 1;\n\t\t}\n\t}\n\n\tcommitTranscript(\n\t\tcursor: WorkerTranscriptCommitCursor,\n\t\tsuffix: readonly Message[],\n\t\toptions?: { appendMissing?: boolean },\n\t): number {\n\t\tconst state = workerTranscriptCommitCursorStates.get(cursor);\n\t\tif (!state || state.core !== this.core) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker transcript cursor belongs to a different conversation.\");\n\t\t}\n\t\tconst normalizedSuffix = suffix.map((message) => workerMessageForPersistence(message));\n\t\tif (state.status === \"aborted\") {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker transcript cursor is no longer active.\");\n\t\t}\n\t\tif (state.status === \"committed\") {\n\t\t\tif (!isDeepStrictEqual(state.committedSuffix, normalizedSuffix)) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker transcript cursor replay conflicts with its committed suffix.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.withCanonicalSessionLock((sessionManager) => {\n\t\t\tif (state.generation !== this.core.generation) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker transcript cursor was invalidated by owner replacement.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet persistedMessages = 0;\n\t\t\tlet divergenceIndex: number | undefined;\n\t\t\tvisitWorkerSessionEntries(sessionManager, state.entryIndex, sessionManager.getEntryCount(), (entry) => {\n\t\t\t\tif (divergenceIndex !== undefined) return;\n\t\t\t\tconst persisted = rawWorkerTranscriptMessage(entry);\n\t\t\t\tif (!persisted) return;\n\t\t\t\tconst candidate = normalizedSuffix[persistedMessages];\n\t\t\t\tif (!candidate) {\n\t\t\t\t\tdivergenceIndex = persistedMessages;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isDeepStrictEqual(workerMessageForPersistence(persisted), candidate)) {\n\t\t\t\t\tdivergenceIndex = persistedMessages;\n\t\t\t\t}\n\t\t\t\tpersistedMessages += 1;\n\t\t\t});\n\t\t\tif (divergenceIndex !== undefined) {\n\t\t\t\tif (divergenceIndex >= normalizedSuffix.length) {\n\t\t\t\t\tthrow new Error(\"Worker conversation suffix is shorter than its persisted raw context.\");\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Worker conversation suffix diverges from persisted context at message ${divergenceIndex}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (options?.appendMissing === false && persistedMessages < normalizedSuffix.length) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation is missing callback-persisted transcript suffix entries.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (let index = persistedMessages; index < normalizedSuffix.length; index += 1) {\n\t\t\t\tthis.appendSessionEntryLocked(sessionManager, (owner) =>\n\t\t\t\t\towner.appendMessage(structuredClone(normalizedSuffix[index]!)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tstate.status = \"committed\";\n\t\t\tstate.committedSuffix = structuredClone(normalizedSuffix);\n\t\t\tthis.core.activeTranscriptCursors -= 1;\n\t\t\treturn normalizedSuffix.length - persistedMessages;\n\t\t});\n\t}\n\n\t/** Return an isolated copy suitable for durable orchestration/process-resume state. */\n\tgetResumeContext(): AgentResumeContext {\n\t\treturn cloneResumeContext(this.resumeContext);\n\t}\n}\n\nfunction assertRetentionPolicy(policy: WorkerConversationRetentionPolicy): void {\n\tif (!Number.isSafeInteger(policy.maxContextTokens) || policy.maxContextTokens < 2) {\n\t\tthrow new TypeError(\"Worker conversation maximum context tokens must be an integer of at least 2.\");\n\t}\n\tif (\n\t\t!Number.isSafeInteger(policy.keepRecentTokens) ||\n\t\tpolicy.keepRecentTokens < 1 ||\n\t\tpolicy.keepRecentTokens >= policy.maxContextTokens\n\t) {\n\t\tthrow new TypeError(\"Worker conversation retained context tokens must be an integer below the maximum.\");\n\t}\n}\n\nfunction assertApplicableCompactionResult(result: CompactionResult, preparation: CompactionPreparation): void {\n\tif (\n\t\t!result ||\n\t\ttypeof result.summary !== \"string\" ||\n\t\tresult.firstKeptEntryId !== preparation.firstKeptEntryId ||\n\t\tresult.tokensBefore !== preparation.tokensBefore\n\t) {\n\t\tthrow new Error(\"Worker verified compaction result does not match the prepared durable transcript.\");\n\t}\n}\n\n/** Creates and reopens canonical SessionManager transcripts for logical Pi worker lanes. */\nexport class WorkerConversationStore {\n\tprivate readonly cachedCores = new Map<string, CachedWorkerConversationCore>();\n\n\tclearCache(): void {\n\t\tfor (const cached of this.cachedCores.values()) {\n\t\t\tif (cached.core.activeTranscriptCursors > 0) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation cache cannot be cleared during an active transcript commit.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.cachedCores.clear();\n\t}\n\n\tcreate(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => this.createLocked(options, resumeContext));\n\t}\n\n\tprivate createLocked(\n\t\toptions: CreateWorkerConversationOptions,\n\t\tresumeContext: AgentResumeContext,\n\t): WorkerConversation {\n\t\tconst sessionDir = resumeContext.sessionDir!;\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\tconst metadataFile = workerConversationMetadataFile(sessionFile);\n\t\tif (existsSync(sessionFile)) {\n\t\t\tthrow new Error(`Worker conversation already exists for logical agent '${options.logicalAgentId}'.`);\n\t\t}\n\t\tif (options.birthContextForkReference) {\n\t\t\t// Validate the content-addressed snapshot before publishing either conversation file.\n\t\t\topenWorkerBirthContext(\n\t\t\t\toptions.agentDir,\n\t\t\t\toptions.parentSessionId,\n\t\t\t\toptions.logicalAgentId,\n\t\t\t\toptions.birthContextForkReference,\n\t\t\t);\n\t\t}\n\n\t\t// SessionManager intentionally defers a brand-new header until its first assistant message.\n\t\t// A worker must be resumable after its first user/tool message, so atomically seed the exact\n\t\t// SessionManager header and immediately reopen it through SessionManager for all later writes.\n\t\tconst seed = SessionManager.create(resumeContext.cwd, options.agentDir, sessionDir, {\n\t\t\tid: resumeContext.sessionId,\n\t\t});\n\t\tconst header = seed.getHeader();\n\t\tif (!header) throw new Error(\"Unable to create a worker conversation session header.\");\n\t\tif (existsSync(metadataFile)) {\n\t\t\tconst metadata = assertExactConversationMetadata(\n\t\t\t\tmetadataFile,\n\t\t\t\tresumeContext,\n\t\t\t\toptions.logicalAgentId,\n\t\t\t\toptions.parentSessionId,\n\t\t\t);\n\t\t\tif (\n\t\t\t\toptions.birthContextForkReference &&\n\t\t\t\tmetadata.birthContextForkReference &&\n\t\t\t\t!isDeepStrictEqual(options.birthContextForkReference, metadata.birthContextForkReference)\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t\t\t}\n\t\t\tconst reference = options.birthContextForkReference ?? metadata.birthContextForkReference;\n\t\t\tif (reference) {\n\t\t\t\topenWorkerBirthContext(options.agentDir, options.parentSessionId, options.logicalAgentId, reference);\n\t\t\t}\n\t\t\twriteWorkerConversationMetadata(metadataFile, {\n\t\t\t\t...metadata,\n\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\t...(reference ? { birthContextForkReference: reference } : {}),\n\t\t\t\tusageAccountingVersion: 1,\n\t\t\t});\n\t\t} else {\n\t\t\t// Metadata lands first: a crash leaves no visible conversation until the ordinary session\n\t\t\t// header is atomically published, while a later ensure can validate the exact intended identity.\n\t\t\twriteWorkerConversationMetadata(metadataFile, {\n\t\t\t\tlogicalAgentId: options.logicalAgentId,\n\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\tresumeContext,\n\t\t\t\t...(options.birthContextForkReference\n\t\t\t\t\t? { birthContextForkReference: options.birthContextForkReference }\n\t\t\t\t\t: {}),\n\t\t\t\tusageAccountingVersion: 1,\n\t\t\t});\n\t\t}\n\t\twriteFileAtomicSync(sessionFile, `${JSON.stringify(header)}\\n`);\n\n\t\treturn this.openExisting(\n\t\t\t{\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tresumeContext,\n\t\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t\t},\n\t\t\t{\n\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\tbirthContextForkReference: options.birthContextForkReference,\n\t\t\t\trecoverBirthContextPrefix: true,\n\t\t\t},\n\t\t);\n\t}\n\n\t/** Open the one canonical transcript or atomically create it with the exact same durable identity. */\n\tensure(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => {\n\t\t\tif (!existsSync(sessionFile)) return this.createLocked(options, resumeContext);\n\t\t\treturn this.openExisting(\n\t\t\t\t{\n\t\t\t\t\tagentDir: options.agentDir,\n\t\t\t\t\tresumeContext,\n\t\t\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\t\tbirthContextForkReference: options.birthContextForkReference,\n\t\t\t\t\trecoverBirthContextPrefix: true,\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\topen(options: OpenWorkerConversationOptions): WorkerConversation {\n\t\tconst context = options.resumeContext;\n\t\tif (context.provider !== \"pi\" || !context.sessionFile) {\n\t\t\treturn this.openExisting(options, { recoverBirthContextPrefix: false });\n\t\t}\n\t\tassertValidSessionId(context.sessionId);\n\t\tconst sessionFile = assertWorkerConversationFile(options.agentDir, context.sessionFile, context.sessionId);\n\t\treturn withFileLockSync(sessionFile, () => this.openExisting(options, { recoverBirthContextPrefix: false }));\n\t}\n\n\tprivate openExisting(\n\t\toptions: OpenWorkerConversationOptions,\n\t\tbirthContext: {\n\t\t\tparentSessionId?: string;\n\t\t\tbirthContextForkReference?: WorkerContextForkReference;\n\t\t\trecoverBirthContextPrefix: boolean;\n\t\t},\n\t): WorkerConversation {\n\t\tconst context = cloneResumeContext(options.resumeContext);\n\t\tif (context.provider !== \"pi\") throw new TypeError(\"Only Pi worker conversations can be reopened.\");\n\t\tif (!context.sessionFile)\n\t\t\tthrow new TypeError(\"A persisted worker session file is required to reopen a conversation.\");\n\t\tif (!context.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\t\tassertValidSessionId(context.sessionId);\n\n\t\tconst sessionFile = assertWorkerConversationFile(options.agentDir, context.sessionFile, context.sessionId);\n\t\tif (!existsSync(sessionFile)) throw new Error(`Worker conversation session file does not exist: ${sessionFile}`);\n\t\tconst sessionDir = dirname(sessionFile);\n\t\tif (context.sessionDir && resolve(context.sessionDir) !== sessionDir) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Worker conversation resume context has a session directory that disagrees with its session file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst metadataFile = workerConversationMetadataFile(sessionFile);\n\t\tconst cached = this.cachedCores.get(sessionFile);\n\t\tif (cached) {\n\t\t\tif (!sameAgentResumeIdentity(cached.resumeContext, context)) {\n\t\t\t\tthrow new Error(\"Worker conversation resume context conflicts with the persisted transcript.\");\n\t\t\t}\n\t\t\tlet {\n\t\t\t\tmetadata,\n\t\t\t\trevision: metadataRevision,\n\t\t\t\tcontent: metadataContent,\n\t\t\t} = assertStableExactConversationMetadata(\n\t\t\t\tmetadataFile,\n\t\t\t\tcontext,\n\t\t\t\toptions.expectedLogicalAgentId,\n\t\t\t\tbirthContext.parentSessionId,\n\t\t\t);\n\t\t\tconst previousMetadataState = cached.core.metadataState;\n\t\t\tif (!previousMetadataState) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation cached metadata state is missing.\");\n\t\t\t}\n\t\t\tlet metadataState = cloneWorkerConversationMetadataState(metadata);\n\t\t\tassertCachedWorkerConversationMetadata(previousMetadataState, metadataState);\n\t\t\tconst requestedReference = birthContext.birthContextForkReference;\n\t\t\tlet boundFirstReference = false;\n\t\t\tif (requestedReference && !previousMetadataState.birthContextForkReference) {\n\t\t\t\tif (cached.core.activeTranscriptCursors > 0) {\n\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\"Worker conversation birth context changed while a transcript commit was active.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst parentSessionId = birthContext.parentSessionId;\n\t\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\t\tconst snapshot = openWorkerBirthContext(\n\t\t\t\t\toptions.agentDir,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tmetadataState.logicalAgentId,\n\t\t\t\t\trequestedReference,\n\t\t\t\t);\n\t\t\t\tif (cached.core.sessionManager.getEntryCount() > 0) {\n\t\t\t\t\tthrow new Error(\"Worker conversation cannot bind birth context after transcript use.\");\n\t\t\t\t}\n\t\t\t\tmetadata = {\n\t\t\t\t\t...metadata,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tbirthContextForkReference: requestedReference,\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\t// Bind identity before the first prefix entry. A crash leaves an exact suffix for cold recovery.\n\t\t\t\t\twriteWorkerConversationMetadata(metadataFile, metadata);\n\t\t\t\t\tconst boundMetadata = assertStableExactConversationMetadata(\n\t\t\t\t\t\tmetadataFile,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tmetadataState.logicalAgentId,\n\t\t\t\t\t\tparentSessionId,\n\t\t\t\t\t\trequestedReference,\n\t\t\t\t\t);\n\t\t\t\t\tassertWorkerConversationUsageAccountingVersion(\n\t\t\t\t\t\tpreviousMetadataState.usageAccountingVersion,\n\t\t\t\t\t\tboundMetadata.metadata.usageAccountingVersion,\n\t\t\t\t\t);\n\t\t\t\t\tmetadata = boundMetadata.metadata;\n\t\t\t\t\tmetadataRevision = boundMetadata.revision;\n\t\t\t\t\tmetadataContent = boundMetadata.content;\n\t\t\t\t\tverifyWorkerBirthContextPrefix(cached.core.sessionManager, snapshot, true);\n\t\t\t\t\tconst boundHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\t\t\t\tif (cached.core.sessionManager.getEntryCount() !== boundHead.entryCount) {\n\t\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\t\"Worker conversation bound birth context entries are invalid.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tassertLinearWorkerSession(cached.core.sessionManager);\n\t\t\t\t\tmetadataState = cloneWorkerConversationMetadataState(metadata);\n\t\t\t\t\tassertWorkerConversationMetadataContent(\n\t\t\t\t\t\tmetadataFile,\n\t\t\t\t\t\tmetadataRevision,\n\t\t\t\t\t\tmetadataContent,\n\t\t\t\t\t\t\"Worker conversation metadata changed while its birth context was bound.\",\n\t\t\t\t\t);\n\t\t\t\t\tcached.core.head = boundHead;\n\t\t\t\t\tcached.core.metadataState = metadataState;\n\t\t\t\t\tcached.core.metadataRevision = metadataRevision;\n\t\t\t\t\tcached.core.invalid = false;\n\t\t\t\t\tcached.core.generation += 1;\n\t\t\t\t\tboundFirstReference = true;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcached.core.invalid = true;\n\t\t\t\t\tthis.cachedCores.delete(sessionFile);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (requestedReference && !isDeepStrictEqual(metadataState.birthContextForkReference, requestedReference)) {\n\t\t\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t\t\t}\n\t\t\tconst revisionChanged =\n\t\t\t\t!cached.core.metadataRevision ||\n\t\t\t\t!sameWorkerConversationFileRevision(cached.core.metadataRevision, metadataRevision);\n\t\t\tconst currentSessionRevision = readWorkerConversationFileRevision(sessionFile);\n\t\t\tconst sessionRevisionChanged =\n\t\t\t\t!cached.core.head || !sameWorkerConversationFileRevision(cached.core.head.revision, currentSessionRevision);\n\t\t\tif (!revisionChanged && !boundFirstReference && !isDeepStrictEqual(previousMetadataState, metadataState)) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation metadata content changed without a new durable revision.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst previousMetadataRevision = cached.core.metadataRevision;\n\t\t\tif (revisionChanged) {\n\t\t\t\tif (cached.core.activeTranscriptCursors > 0) {\n\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\"Worker conversation metadata changed while a transcript commit was active.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (sessionRevisionChanged && cached.core.activeTranscriptCursors > 0) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation advanced while a transcript commit was active.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst reference = metadataState.birthContextForkReference;\n\t\t\tif ((revisionChanged || sessionRevisionChanged) && reference) {\n\t\t\t\tconst parentSessionId = metadataState.parentSessionId;\n\t\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\t\tconst snapshot = openWorkerBirthContext(\n\t\t\t\t\toptions.agentDir,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tmetadataState.logicalAgentId,\n\t\t\t\t\treference,\n\t\t\t\t);\n\t\t\t\tconst verificationManager = sessionRevisionChanged\n\t\t\t\t\t? SessionManager.open(sessionFile, cached.agentDir, sessionDir)\n\t\t\t\t\t: cached.core.sessionManager;\n\t\t\t\tconst recoveredBirthSuffix = verifyWorkerBirthContextPrefix(\n\t\t\t\t\tverificationManager,\n\t\t\t\t\tsnapshot,\n\t\t\t\t\tsessionRevisionChanged && birthContext.recoverBirthContextPrefix,\n\t\t\t\t);\n\t\t\t\tif (recoveredBirthSuffix) {\n\t\t\t\t\tconst recoveredHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\t\t\t\tif (verificationManager.getEntryCount() !== recoveredHead.entryCount) {\n\t\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\t\"Worker conversation recovered birth context entries are invalid.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tassertLinearWorkerSession(verificationManager);\n\t\t\t\t\tcached.core.sessionManager = verificationManager;\n\t\t\t\t\tcached.core.head = recoveredHead;\n\t\t\t\t\tcached.core.invalid = false;\n\t\t\t\t\tcached.core.generation += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tassertWorkerConversationMetadataContent(\n\t\t\t\tmetadataFile,\n\t\t\t\tmetadataRevision,\n\t\t\t\tmetadataContent,\n\t\t\t\t\"Worker conversation metadata changed while its cached state was opened.\",\n\t\t\t);\n\t\t\tif (revisionChanged) {\n\t\t\t\tcached.core.metadataState = metadataState;\n\t\t\t\tcached.core.metadataRevision = metadataRevision;\n\t\t\t}\n\t\t\tconst conversation = new WorkerConversation(\n\t\t\t\tcached.core.sessionManager,\n\t\t\t\t{ ...context, sessionDir, sessionFile, cwd: cached.core.sessionManager.getCwd() },\n\t\t\t\tbindWorkerConversationMetadata(cached.metadataFile, cached.agentDir, metadataState),\n\t\t\t\tcached.core,\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconversation.refreshCachedCoreLocked();\n\t\t\t} catch (error) {\n\t\t\t\tif (revisionChanged) {\n\t\t\t\t\tcached.core.metadataState = previousMetadataState;\n\t\t\t\t\tcached.core.metadataRevision = previousMetadataRevision;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn conversation;\n\t\t}\n\n\t\tconst scannedHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\tconst sessionManager = SessionManager.open(sessionFile, options.agentDir, sessionDir);\n\t\tconst openedHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\tassertWorkerSessionHeadContent(\n\t\t\tscannedHead,\n\t\t\topenedHead,\n\t\t\t\"Worker conversation changed while its canonical session was opened.\",\n\t\t);\n\t\tif (sessionManager.getSessionId() !== context.sessionId) {\n\t\t\tthrow new Error(\"Worker conversation session file does not contain the requested durable session id.\");\n\t\t}\n\t\tif (sessionManager.getCwd() !== resolve(context.cwd)) {\n\t\t\tthrow new Error(\"Worker conversation resume context working directory disagrees with the persisted session.\");\n\t\t}\n\t\tif (sessionManager.getEntryCount() !== openedHead.entryCount) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation session entries are invalid.\");\n\t\t}\n\t\tassertLinearWorkerSession(sessionManager);\n\t\tlet {\n\t\t\tmetadata,\n\t\t\trevision: metadataRevision,\n\t\t\tcontent: metadataContent,\n\t\t} = assertStableExactConversationMetadata(\n\t\t\tmetadataFile,\n\t\t\tcontext,\n\t\t\toptions.expectedLogicalAgentId,\n\t\t\tbirthContext.parentSessionId,\n\t\t);\n\t\tconst expectedReference = birthContext.birthContextForkReference;\n\t\tconst expectedParentSessionId = birthContext.parentSessionId ?? metadata.parentSessionId;\n\t\tif (expectedReference && !expectedParentSessionId) {\n\t\t\tthrow new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t}\n\t\tconst expectedSnapshot =\n\t\t\texpectedReference && expectedParentSessionId\n\t\t\t\t? openWorkerBirthContext(\n\t\t\t\t\t\toptions.agentDir,\n\t\t\t\t\t\texpectedParentSessionId,\n\t\t\t\t\t\tmetadata.logicalAgentId,\n\t\t\t\t\t\texpectedReference,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\tif (expectedReference) {\n\t\t\tif (metadata.birthContextForkReference) {\n\t\t\t\tif (!isDeepStrictEqual(metadata.birthContextForkReference, expectedReference)) {\n\t\t\t\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!birthContext.recoverBirthContextPrefix || sessionManager.getEntryCount() > 0) {\n\t\t\t\t\tthrow new Error(\"Worker conversation cannot bind birth context after transcript use.\");\n\t\t\t\t}\n\t\t\t\tconst parentSessionId = birthContext.parentSessionId;\n\t\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\t\tconst previousUsageAccountingVersion = metadata.usageAccountingVersion;\n\t\t\t\tmetadata = {\n\t\t\t\t\t...metadata,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tbirthContextForkReference: expectedReference,\n\t\t\t\t};\n\t\t\t\t// Bind identity before the first prefix entry. A crash can only leave an exact suffix to recover.\n\t\t\t\twriteWorkerConversationMetadata(metadataFile, metadata);\n\t\t\t\tconst boundMetadata = assertStableExactConversationMetadata(\n\t\t\t\t\tmetadataFile,\n\t\t\t\t\tcontext,\n\t\t\t\t\tmetadata.logicalAgentId,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\texpectedReference,\n\t\t\t\t);\n\t\t\t\tassertWorkerConversationUsageAccountingVersion(\n\t\t\t\t\tpreviousUsageAccountingVersion,\n\t\t\t\t\tboundMetadata.metadata.usageAccountingVersion,\n\t\t\t\t);\n\t\t\t\tmetadata = boundMetadata.metadata;\n\t\t\t\tmetadataRevision = boundMetadata.revision;\n\t\t\t\tmetadataContent = boundMetadata.content;\n\t\t\t}\n\t\t}\n\t\tconst reference = metadata.birthContextForkReference;\n\t\tif (reference) {\n\t\t\tconst parentSessionId = metadata.parentSessionId;\n\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\tconst snapshot =\n\t\t\t\texpectedSnapshot && isDeepStrictEqual(reference, expectedReference)\n\t\t\t\t\t? expectedSnapshot\n\t\t\t\t\t: openWorkerBirthContext(options.agentDir, parentSessionId, metadata.logicalAgentId, reference);\n\t\t\tverifyWorkerBirthContextPrefix(sessionManager, snapshot, birthContext.recoverBirthContextPrefix);\n\t\t}\n\n\t\tlet currentHead: WorkerSessionFileHead;\n\t\tif (sessionManager.getEntryCount() === openedHead.entryCount) {\n\t\t\tassertWorkerConversationOpenRevision(\n\t\t\t\tsessionFile,\n\t\t\t\topenedHead.revision,\n\t\t\t\t\"Worker conversation changed while its canonical session was opened.\",\n\t\t\t);\n\t\t\tcurrentHead = openedHead;\n\t\t} else {\n\t\t\tcurrentHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\t}\n\t\tif (sessionManager.getEntryCount() !== currentHead.entryCount) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation session entries are invalid.\");\n\t\t}\n\t\tconst metadataState = cloneWorkerConversationMetadataState(metadata);\n\t\tassertWorkerConversationMetadataContent(\n\t\t\tmetadataFile,\n\t\t\tmetadataRevision,\n\t\t\tmetadataContent,\n\t\t\t\"Worker conversation metadata changed while its canonical state was opened.\",\n\t\t);\n\t\tconst core: WorkerConversationCore = {\n\t\t\tsessionManager,\n\t\t\thead: currentHead,\n\t\t\tmetadataRevision,\n\t\t\tmetadataState,\n\t\t\tinvalid: false,\n\t\t\tgeneration: 0,\n\t\t\tactiveTranscriptCursors: 0,\n\t\t};\n\t\tconst conversation = new WorkerConversation(\n\t\t\tsessionManager,\n\t\t\t{\n\t\t\t\t...context,\n\t\t\t\tsessionDir,\n\t\t\t\tsessionFile,\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t},\n\t\t\tbindWorkerConversationMetadata(metadataFile, options.agentDir, metadataState),\n\t\t\tcore,\n\t\t);\n\t\tthis.cachedCores.set(sessionFile, {\n\t\t\tcore,\n\t\t\tresumeContext: cloneResumeContext(context),\n\t\t\tmetadataFile,\n\t\t\tagentDir: options.agentDir,\n\t\t});\n\t\treturn conversation;\n\t}\n}\n\nfunction joinWorkerSessionFile(sessionDir: string, sessionId: string): string {\n\treturn resolve(sessionDir, `${sessionId}.jsonl`);\n}\n\nfunction workerConversationMetadataFile(sessionFile: string): string {\n\treturn `${sessionFile}.worker.json`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"worker-conversation-store.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-conversation-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { basename, dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport {\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tcreateDeterministicCompaction,\n\testimateContextTokens,\n\tprepareCompaction,\n} from \"@caupulican/pi-agent-core/compaction/compaction\";\nimport { compactToolResultDetailsForRetention } from \"@caupulican/pi-agent-core/message-retention\";\nimport { convertToLlm } from \"@caupulican/pi-agent-core/messages\";\nimport { measureJsonStringUtf8Bytes } from \"@caupulican/pi-agent-core/provider-request-estimator\";\nimport {\n\tassertValidSessionId,\n\tMAX_SESSION_ENTRY_VISIT_COUNT,\n\ttype SessionContext,\n\tSessionManager,\n} from \"@caupulican/pi-agent-core/session\";\nimport type { AssistantMessageDiagnostic, Message, Usage } from \"@caupulican/pi-ai\";\nimport { orchestrationSessionsDir, workerConversationSessionsDir } from \"../agent-paths.ts\";\nimport { sameAgentResumeIdentity } from \"../orchestration/agent-resume.ts\";\nimport { validateAttemptUsageSnapshot } from \"../orchestration/attempt-usage.ts\";\nimport type { AgentResumeContext, AttemptUsageSnapshot, ResourcePointer } from \"../orchestration/contracts.ts\";\nimport {\n\tnormalizeWorkerContextForkReference,\n\ttype WorkerContextForkReference,\n} from \"../orchestration/worker-context-fork-reference.ts\";\nimport { boundedRedactedDiagnosticText } from \"../security/secret-text.ts\";\nimport { withFileLockSync, writeFileAtomicSync } from \"../util/atomic-file.ts\";\nimport { readBoundedTextFileSync } from \"../util/bounded-file.ts\";\nimport {\n\tcollectBoundedWorkerClaimChangedFiles,\n\tMAX_WORKER_CLAIM_CHANGED_FILES,\n\tMAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS,\n} from \"./worker-claim.ts\";\nimport { type WorkerContextForkSnapshot, WorkerContextForkStore } from \"./worker-context-fork-store.ts\";\nimport {\n\tadvanceWorkerSessionHeadAfterOwnedAppend,\n\treadWorkerConversationFileRevision,\n\tsameWorkerConversationFileRevision,\n\tscanWorkerSessionFile,\n\ttype WorkerConversationFileRevision,\n\tWorkerConversationOwnershipError,\n\ttype WorkerSessionFileHead,\n} from \"./worker-conversation-revision.ts\";\n\nconst MAX_WORKER_CONVERSATION_METADATA_BYTES = 256 * 1024;\nconst WORKER_CHANGED_FILE_CUSTOM_TYPE = \"worker-changed-file\";\nconst WORKER_ATTEMPT_USAGE_BOUNDARY_CUSTOM_TYPE = \"worker-attempt-usage-boundary\";\nconst MAX_PERSISTED_WORKER_DIAGNOSTICS = 8;\nconst MAX_WORKER_CONTROL_ENTRY_PREFIX_BYTES = 16 * 1024;\nexport const MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES = 64;\nexport const MAX_WORKER_TRANSCRIPT_PAGE_BYTES = 128 * 1024;\n\ninterface WorkerConversationTranscriptPageOptions {\n\t/** Opaque raw-entry offset returned by the previous page. */\n\tcursor?: number;\n\tmaxMessages?: number;\n\tmaxBytes?: number;\n}\n\ninterface WorkerConversationTranscriptPage {\n\t/** Opaque raw-entry offset used for this page; it is not a message count. */\n\tcursor: number;\n\tmessages: Message[];\n\tnextCursor?: number;\n\t/** Messages consumed but not cloned because one message exceeded the complete page byte ceiling. */\n\tomittedMessages: number;\n\t/** Exact UTF-8 JSON byte length of `messages`, including array framing. */\n\tserializedBytes: number;\n}\n\ninterface WorkerControlTranscriptExpectation {\n\tmessageId: string;\n\tcontent: string;\n}\n\ninterface WorkerControlTranscriptReconciliation {\n\tdelivered: boolean;\n\tappended: boolean;\n}\n\nexport interface CreateWorkerConversationOptions {\n\tagentDir: string;\n\tparentSessionId: string;\n\t/** Durable logical identity for the worker/lane. It never becomes a path segment directly. */\n\tlogicalAgentId: string;\n\tcwd: string;\n\torchestrationProfileId?: string;\n\tmodelRef?: string;\n\tresourceProfileNames: readonly string[];\n\tcontextPointers: readonly ResourcePointer[];\n\t/** Immutable sanitized parent context captured before this logical agent is admitted. */\n\tbirthContextForkReference?: WorkerContextForkReference;\n}\n\ninterface OpenWorkerConversationOptions {\n\tagentDir: string;\n\tresumeContext: AgentResumeContext;\n\texpectedLogicalAgentId?: string;\n}\n\n/**\n * Explicit, token-based retention for a durable worker transcript.\n *\n * This deliberately has no default: the worker model/context policy belongs to orchestration, not\n * the transcript store. Call only at a safe worker turn boundary, after all messages from that turn\n * have been durably committed. The execution controller provides `generateVerifiedCompaction`\n * through the shared model-aware pipeline; this store owns only preparation, append-only apply,\n * and its deterministic verified fallback.\n */\nexport interface WorkerConversationRetentionPolicy {\n\t/** Maximum provider-visible context tokens after a checkpoint is applied. */\n\tmaxContextTokens: number;\n\t/** Shared compaction's retained recent-context target. Must be lower than the maximum. */\n\tkeepRecentTokens: number;\n\t/**\n\t * Generate a verified shared compaction result. Failures, malformed results, and omitted\n\t * generators fall back to `createDeterministicCompaction`; raw transcript entries are never\n\t * replaced or removed.\n\t */\n\tgenerateVerifiedCompaction?: (preparation: CompactionPreparation) => Promise<CompactionResult>;\n\t/**\n\t * Cumulative provider usage spent by the current verified generation if it failed before it\n\t * could return a CompactionResult. This usage is attached to the deterministic checkpoint so\n\t * recovery never loses rejected-summary spend.\n\t */\n\tgetFailedCompactionUsage?: () => Usage | undefined;\n}\n\ninterface WorkerConversationRetentionOutcome {\n\tstatus: \"within_limit\" | \"compacted_verified\" | \"compacted_deterministic\" | \"cannot_compact\";\n\tcontext: SessionContext;\n\tcontextUsage: ReturnType<typeof estimateContextTokens>;\n}\n\ninterface WorkerConversationMetadata {\n\tlogicalAgentId: string;\n\t/** Present on current metadata; omitted only by conversations created before context forks. */\n\tparentSessionId?: string;\n\tresumeContext: AgentResumeContext;\n\tbirthContextForkReference?: WorkerContextForkReference;\n\t/** Version 1 makes a missing current-attempt boundary authoritative zero usage. */\n\tusageAccountingVersion?: 1;\n}\n\ninterface WorkerConversationMetadataState {\n\tlogicalAgentId: string;\n\tparentSessionId?: string;\n\tbirthContextForkReference?: WorkerContextForkReference;\n\tusageAccountingVersion?: 1;\n}\n\ninterface WorkerConversationMetadataBinding extends WorkerConversationMetadataState {\n\tfile: string;\n\tagentDir: string;\n}\n\ninterface WorkerConversationCore {\n\tsessionManager: SessionManager;\n\thead?: WorkerSessionFileHead;\n\tmetadataRevision?: WorkerConversationFileRevision;\n\tmetadataState?: WorkerConversationMetadataState;\n\tinvalid: boolean;\n\tgeneration: number;\n\tactiveTranscriptCursors: number;\n}\n\nexport interface WorkerTranscriptCommitCursor {\n\treadonly kind: \"worker-transcript-suffix-v1\";\n}\n\ninterface WorkerTranscriptCommitCursorState {\n\tcore: WorkerConversationCore;\n\tentryIndex: number;\n\tgeneration: number;\n\tstatus: \"active\" | \"committed\" | \"aborted\";\n\tcommittedSuffix?: Message[];\n}\n\nconst workerTranscriptCommitCursorStates = new WeakMap<\n\tWorkerTranscriptCommitCursor,\n\tWorkerTranscriptCommitCursorState\n>();\n\ninterface CachedWorkerConversationCore {\n\tcore: WorkerConversationCore;\n\tresumeContext: AgentResumeContext;\n\tmetadataFile: string;\n\tagentDir: string;\n}\n\ntype WorkerSessionEntry = ReturnType<SessionManager[\"getEntries\"]>[number];\ntype WorkerSessionMessage = Extract<WorkerSessionEntry, { type: \"message\" }>[\"message\"];\n\nfunction isRawWorkerTranscriptMessage(message: WorkerSessionMessage): message is Message {\n\treturn message.role === \"user\" || message.role === \"assistant\" || message.role === \"toolResult\";\n}\n\nfunction rawWorkerTranscriptMessage(entry: Readonly<WorkerSessionEntry>): Message | undefined {\n\tif (entry.type !== \"message\" || !isRawWorkerTranscriptMessage(entry.message)) return undefined;\n\treturn entry.message;\n}\n\nfunction visitWorkerSessionEntries(\n\tsessionManager: SessionManager,\n\tstartIndex: number,\n\tendIndex: number,\n\tvisitor: (entry: Readonly<WorkerSessionEntry>, index: number, persistedBytes?: number) => void,\n): void {\n\tlet cursor = startIndex;\n\twhile (cursor < endIndex) {\n\t\tcursor = sessionManager.visitEntries(cursor, Math.min(MAX_SESSION_ENTRY_VISIT_COUNT, endIndex - cursor), visitor);\n\t}\n}\n\nfunction assertLinearWorkerSession(sessionManager: SessionManager): void {\n\tconst ids = new Set<string>();\n\tlet previousId: string | null = null;\n\tvisitWorkerSessionEntries(sessionManager, 0, sessionManager.getEntryCount(), (entry) => {\n\t\tif (\n\t\t\ttypeof entry.id !== \"string\" ||\n\t\t\t!entry.id ||\n\t\t\tentry.id.length > 128 ||\n\t\t\tids.has(entry.id) ||\n\t\t\tentry.parentId !== previousId\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation entries are not one linear chain.\");\n\t\t}\n\t\tids.add(entry.id);\n\t\tpreviousId = entry.id;\n\t});\n}\n\nfunction assertWorkerConversationOpenRevision(\n\tfile: string,\n\texpectedRevision: WorkerConversationFileRevision,\n\terrorMessage: string,\n): void {\n\tif (!sameWorkerConversationFileRevision(expectedRevision, readWorkerConversationFileRevision(file))) {\n\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t}\n}\n\nfunction assertWorkerSessionHeadContent(\n\texpected: WorkerSessionFileHead,\n\tactual: WorkerSessionFileHead,\n\terrorMessage: string,\n): void {\n\tif (\n\t\texpected.revision.dev !== actual.revision.dev ||\n\t\texpected.revision.ino !== actual.revision.ino ||\n\t\texpected.headerDigest !== actual.headerDigest ||\n\t\texpected.entryDigest !== actual.entryDigest ||\n\t\texpected.entryCount !== actual.entryCount\n\t) {\n\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t}\n}\n\nfunction workerControlMessageId(content: string): string | undefined {\n\treturn /^\\[Worker control (worker-message-[^\\]\\s]+)(?: [^\\]]+)?\\]\\n/.exec(content)?.[1];\n}\n\nfunction coldWorkerControlPrefixContains(sessionManager: SessionManager, entryId: string, messageId: string): boolean {\n\tconst rawPrefix = sessionManager.readEntryJsonPrefix(entryId, MAX_WORKER_CONTROL_ENTRY_PREFIX_BYTES);\n\treturn rawPrefix?.includes(`\"role\":\"user\",\"content\":\"[Worker control ${messageId}`) ?? false;\n}\n\n/** Conservative JSON byte measurement that stops before an oversized message is cloned. */\nfunction boundedJsonBytes(value: unknown, limit: number): number {\n\tconst pending: unknown[] = [value];\n\tconst seen = new WeakSet<object>();\n\tlet bytes = 0;\n\tconst add = (count: number): boolean => {\n\t\tbytes += count;\n\t\treturn bytes <= limit;\n\t};\n\twhile (pending.length > 0) {\n\t\tconst item = pending.pop();\n\t\tif (item === null) {\n\t\t\tif (!add(4)) return limit + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tswitch (typeof item) {\n\t\t\tcase \"string\":\n\t\t\t\tif (!add(measureJsonStringUtf8Bytes(item, limit - bytes))) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"number\":\n\t\t\t\tif (!add(Number.isFinite(item) ? String(item).length : 4)) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"boolean\":\n\t\t\t\tif (!add(item ? 4 : 5)) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"undefined\":\n\t\t\tcase \"function\":\n\t\t\tcase \"symbol\":\n\t\t\tcase \"bigint\":\n\t\t\t\tif (!add(4)) return limit + 1;\n\t\t\t\tcontinue;\n\t\t\tcase \"object\":\n\t\t\t\tbreak;\n\t\t}\n\t\tif (seen.has(item)) return limit + 1;\n\t\tseen.add(item);\n\t\tif (Array.isArray(item)) {\n\t\t\tif (!add(2 + Math.max(0, item.length - 1))) return limit + 1;\n\t\t\tfor (let index = item.length - 1; index >= 0; index -= 1) pending.push(item[index]);\n\t\t\tcontinue;\n\t\t}\n\t\tconst prototype = Object.getPrototypeOf(item);\n\t\tif (prototype !== Object.prototype && prototype !== null) return limit + 1;\n\t\tif (!add(2)) return limit + 1;\n\t\tlet propertyCount = 0;\n\t\tfor (const key in item) {\n\t\t\tif (!Object.hasOwn(item, key)) continue;\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(item, key);\n\t\t\tif (!descriptor || !(\"value\" in descriptor)) return limit + 1;\n\t\t\tconst propertyValue = descriptor.value;\n\t\t\tif (propertyValue === undefined || typeof propertyValue === \"function\" || typeof propertyValue === \"symbol\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (propertyCount > 0 && !add(1)) return limit + 1;\n\t\t\tpropertyCount += 1;\n\t\t\tif (!add(measureJsonStringUtf8Bytes(key, limit - bytes) + 1)) return limit + 1;\n\t\t\tpending.push(propertyValue);\n\t\t}\n\t}\n\treturn bytes;\n}\n\nfunction workerDiagnosticForPersistence(\n\tdiagnostic: AssistantMessageDiagnostic,\n): AssistantMessageDiagnostic | undefined {\n\tif (!Number.isFinite(diagnostic.timestamp) || diagnostic.timestamp < 0) return undefined;\n\tconst type = boundedRedactedDiagnosticText(diagnostic.type) ?? \"provider_diagnostic\";\n\tif (!diagnostic.error) return { type, timestamp: diagnostic.timestamp };\n\tconst name = diagnostic.error.name ? boundedRedactedDiagnosticText(diagnostic.error.name) : undefined;\n\tconst code =\n\t\ttypeof diagnostic.error.code === \"string\"\n\t\t\t? boundedRedactedDiagnosticText(diagnostic.error.code)\n\t\t\t: typeof diagnostic.error.code === \"number\" && Number.isFinite(diagnostic.error.code)\n\t\t\t\t? diagnostic.error.code\n\t\t\t\t: undefined;\n\treturn {\n\t\ttype,\n\t\ttimestamp: diagnostic.timestamp,\n\t\terror: {\n\t\t\t...(name ? { name } : {}),\n\t\t\tmessage: boundedRedactedDiagnosticText(diagnostic.error.message) ?? \"Provider diagnostic unavailable.\",\n\t\t\t...(code !== undefined ? { code } : {}),\n\t\t},\n\t};\n}\n\n/** Apply the canonical JSON, diagnostic, and shared details-retention shape used on session reopen. */\nfunction workerMessageForPersistence(message: Message): Message {\n\tlet projected: Message = message;\n\tif (message.role === \"assistant\") {\n\t\tconst errorMessage =\n\t\t\tmessage.errorMessage === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (boundedRedactedDiagnosticText(message.errorMessage) ?? \"Provider request failed.\");\n\t\t// Later retry/transport diagnostics are the most actionable, so retain the newest bounded suffix.\n\t\tconst diagnostics = message.diagnostics\n\t\t\t?.slice(-MAX_PERSISTED_WORKER_DIAGNOSTICS)\n\t\t\t.map(workerDiagnosticForPersistence)\n\t\t\t.filter((diagnostic): diagnostic is AssistantMessageDiagnostic => diagnostic !== undefined);\n\t\tif (errorMessage !== undefined || diagnostics !== undefined) {\n\t\t\tprojected = {\n\t\t\t\t...message,\n\t\t\t\t...(errorMessage !== undefined ? { errorMessage } : {}),\n\t\t\t\t...(diagnostics !== undefined ? { diagnostics } : {}),\n\t\t\t};\n\t\t}\n\t}\n\n\t// SessionManager persists messages as JSON. Normalize before both append and comparison so own\n\t// optional properties with `undefined` values cannot look divergent after the canonical reopen\n\t// drops them. Real value, ordering, and content differences remain fail-closed.\n\tconst serialized = JSON.stringify(projected);\n\tif (serialized === undefined) throw new TypeError(\"Worker transcript message is not JSON-persistable.\");\n\tconst persisted = JSON.parse(serialized) as Message;\n\tcompactToolResultDetailsForRetention(persisted);\n\treturn persisted;\n}\n\nfunction stableWorkerSessionId(parentSessionId: string, logicalAgentId: string): string {\n\tconst normalizedAgentId = logicalAgentId.trim();\n\tif (!normalizedAgentId) throw new TypeError(\"A logical worker agent id is required.\");\n\tconst digest = createHash(\"sha256\")\n\t\t.update(\"pi-worker-conversation-v1\")\n\t\t.update(\"\\0\")\n\t\t.update(parentSessionId)\n\t\t.update(\"\\0\")\n\t\t.update(normalizedAgentId)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 32);\n\treturn `worker-${digest}`;\n}\n\nfunction cloneResumeContext(context: AgentResumeContext): AgentResumeContext {\n\treturn structuredClone(context);\n}\n\nfunction expectedResumeContext(options: CreateWorkerConversationOptions): AgentResumeContext {\n\tconst sessionDir = workerConversationSessionsDir(options.agentDir, options.parentSessionId);\n\tconst sessionId = stableWorkerSessionId(options.parentSessionId, options.logicalAgentId);\n\tassertValidSessionId(sessionId);\n\tif (!options.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\treturn {\n\t\tprovider: \"pi\",\n\t\tsessionId,\n\t\tsessionDir,\n\t\tsessionFile: joinWorkerSessionFile(sessionDir, sessionId),\n\t\tcwd: resolve(options.cwd),\n\t\t...(options.orchestrationProfileId ? { orchestrationProfileId: options.orchestrationProfileId } : {}),\n\t\t...(options.modelRef ? { modelRef: options.modelRef } : {}),\n\t\tresourceProfileNames: [...options.resourceProfileNames],\n\t\tcontextPointers: structuredClone(options.contextPointers),\n\t};\n}\n\ninterface WorkerConversationMetadataRead {\n\tmetadata: WorkerConversationMetadata;\n\tcontent: string;\n}\n\nfunction readWorkerConversationMetadata(metadataFile: string): WorkerConversationMetadataRead {\n\tlet content: string;\n\tlet metadata: unknown;\n\ttry {\n\t\tcontent = readBoundedTextFileSync(\n\t\t\tmetadataFile,\n\t\t\tMAX_WORKER_CONVERSATION_METADATA_BYTES,\n\t\t\t\"Worker conversation metadata durable size bound\",\n\t\t);\n\t\tmetadata = JSON.parse(content);\n\t} catch {\n\t\tthrow new Error(\n\t\t\texistsSync(metadataFile)\n\t\t\t\t? \"Worker conversation metadata is invalid or exceeds its durable size bound.\"\n\t\t\t\t: \"Worker conversation metadata is missing or invalid.\",\n\t\t);\n\t}\n\tif (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\tconst logicalAgentId = (metadata as { logicalAgentId?: unknown }).logicalAgentId;\n\tconst parentSessionId = (metadata as { parentSessionId?: unknown }).parentSessionId;\n\tconst resumeContext = (metadata as { resumeContext?: unknown }).resumeContext;\n\tconst birthContextForkReference = (metadata as { birthContextForkReference?: unknown }).birthContextForkReference;\n\tconst usageAccountingVersion = (metadata as { usageAccountingVersion?: unknown }).usageAccountingVersion;\n\tif (\n\t\ttypeof logicalAgentId !== \"string\" ||\n\t\t!logicalAgentId.trim() ||\n\t\t(parentSessionId !== undefined &&\n\t\t\t(typeof parentSessionId !== \"string\" || !parentSessionId.trim() || parentSessionId.length > 512)) ||\n\t\t!resumeContext ||\n\t\t(birthContextForkReference !== undefined && parentSessionId === undefined) ||\n\t\t(usageAccountingVersion !== undefined && usageAccountingVersion !== 1)\n\t) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\tlet normalizedBirthContextForkReference: WorkerContextForkReference | undefined;\n\ttry {\n\t\tnormalizedBirthContextForkReference =\n\t\t\tbirthContextForkReference === undefined\n\t\t\t\t? undefined\n\t\t\t\t: normalizeWorkerContextForkReference(birthContextForkReference);\n\t} catch {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\treturn {\n\t\tcontent,\n\t\tmetadata: {\n\t\t\tlogicalAgentId,\n\t\t\t...(typeof parentSessionId === \"string\" ? { parentSessionId } : {}),\n\t\t\tresumeContext: cloneResumeContext(resumeContext as AgentResumeContext),\n\t\t\t...(normalizedBirthContextForkReference\n\t\t\t\t? { birthContextForkReference: normalizedBirthContextForkReference }\n\t\t\t\t: {}),\n\t\t\t...(usageAccountingVersion === 1 ? { usageAccountingVersion } : {}),\n\t\t},\n\t};\n}\n\nfunction cloneWorkerConversationMetadataState(\n\tmetadata: WorkerConversationMetadataState,\n): WorkerConversationMetadataState {\n\treturn {\n\t\tlogicalAgentId: metadata.logicalAgentId,\n\t\t...(metadata.parentSessionId ? { parentSessionId: metadata.parentSessionId } : {}),\n\t\t...(metadata.birthContextForkReference\n\t\t\t? { birthContextForkReference: structuredClone(metadata.birthContextForkReference) }\n\t\t\t: {}),\n\t\t...(metadata.usageAccountingVersion ? { usageAccountingVersion: metadata.usageAccountingVersion } : {}),\n\t};\n}\n\nfunction bindWorkerConversationMetadata(\n\tfile: string,\n\tagentDir: string,\n\tstate: WorkerConversationMetadataState,\n): WorkerConversationMetadataBinding {\n\treturn { file, agentDir, ...cloneWorkerConversationMetadataState(state) };\n}\n\nfunction assertCachedWorkerConversationMetadata(\n\tprevious: WorkerConversationMetadataState,\n\tnext: WorkerConversationMetadataState,\n): void {\n\tif (next.logicalAgentId !== previous.logicalAgentId) {\n\t\tthrow new Error(\"Worker conversation logical agent identity conflicts with the persisted transcript.\");\n\t}\n\tif (next.parentSessionId !== previous.parentSessionId) {\n\t\tthrow new Error(\"Worker conversation parent session identity conflicts with the persisted transcript.\");\n\t}\n\tif (!isDeepStrictEqual(next.birthContextForkReference, previous.birthContextForkReference)) {\n\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t}\n\tassertWorkerConversationUsageAccountingVersion(previous.usageAccountingVersion, next.usageAccountingVersion);\n}\n\nfunction assertWorkerConversationUsageAccountingVersion(previous: 1 | undefined, next: 1 | undefined): void {\n\tif (previous === 1 && next !== 1) {\n\t\tthrow new Error(\"Worker conversation usage accounting version cannot be downgraded.\");\n\t}\n}\n\nfunction assertExactConversationMetadataValue(\n\tmetadata: WorkerConversationMetadata,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n\tparentSessionId?: string,\n\tbirthContextForkReference?: WorkerContextForkReference,\n): WorkerConversationMetadata {\n\tif (logicalAgentId && metadata.logicalAgentId !== logicalAgentId) {\n\t\tthrow new Error(\"Worker conversation logical agent identity conflicts with the persisted transcript.\");\n\t}\n\tif (!sameAgentResumeIdentity(metadata.resumeContext, expected)) {\n\t\tthrow new Error(\"Worker conversation resume context conflicts with the persisted transcript.\");\n\t}\n\tif (parentSessionId && metadata.parentSessionId && metadata.parentSessionId !== parentSessionId) {\n\t\tthrow new Error(\"Worker conversation parent session identity conflicts with the persisted transcript.\");\n\t}\n\tif (birthContextForkReference && !isDeepStrictEqual(metadata.birthContextForkReference, birthContextForkReference)) {\n\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t}\n\treturn metadata;\n}\n\nfunction assertExactConversationMetadata(\n\tmetadataFile: string,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n\tparentSessionId?: string,\n\tbirthContextForkReference?: WorkerContextForkReference,\n): WorkerConversationMetadata {\n\treturn assertExactConversationMetadataValue(\n\t\treadWorkerConversationMetadata(metadataFile).metadata,\n\t\texpected,\n\t\tlogicalAgentId,\n\t\tparentSessionId,\n\t\tbirthContextForkReference,\n\t);\n}\n\nfunction assertStableExactConversationMetadata(\n\tmetadataFile: string,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n\tparentSessionId?: string,\n\tbirthContextForkReference?: WorkerContextForkReference,\n): {\n\tmetadata: WorkerConversationMetadata;\n\trevision: WorkerConversationFileRevision;\n\tcontent: string;\n} {\n\tconst before = existsSync(metadataFile) ? readWorkerConversationFileRevision(metadataFile) : undefined;\n\tconst first = readWorkerConversationMetadata(metadataFile);\n\tconst between = readWorkerConversationFileRevision(metadataFile);\n\tconst second = readWorkerConversationMetadata(metadataFile);\n\tconst revision = readWorkerConversationFileRevision(metadataFile);\n\tif (\n\t\t!before ||\n\t\t!sameWorkerConversationFileRevision(before, between) ||\n\t\t!sameWorkerConversationFileRevision(between, revision) ||\n\t\tfirst.content !== second.content\n\t) {\n\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation metadata changed while it was verified.\");\n\t}\n\tconst metadata = assertExactConversationMetadataValue(\n\t\tfirst.metadata,\n\t\texpected,\n\t\tlogicalAgentId,\n\t\tparentSessionId,\n\t\tbirthContextForkReference,\n\t);\n\treturn { metadata, revision, content: first.content };\n}\n\nfunction assertWorkerConversationMetadataContent(\n\tmetadataFile: string,\n\texpectedRevision: WorkerConversationFileRevision,\n\texpectedContent: string,\n\terrorMessage: string,\n): void {\n\ttry {\n\t\tconst before = readWorkerConversationFileRevision(metadataFile);\n\t\tconst content = readBoundedTextFileSync(\n\t\t\tmetadataFile,\n\t\t\tMAX_WORKER_CONVERSATION_METADATA_BYTES,\n\t\t\t\"Worker conversation metadata durable size bound\",\n\t\t);\n\t\tconst after = readWorkerConversationFileRevision(metadataFile);\n\t\tif (\n\t\t\t!sameWorkerConversationFileRevision(expectedRevision, before) ||\n\t\t\t!sameWorkerConversationFileRevision(before, after) ||\n\t\t\tcontent !== expectedContent\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof WorkerConversationOwnershipError) throw error;\n\t\tthrow new WorkerConversationOwnershipError(errorMessage);\n\t}\n}\n\nfunction writeWorkerConversationMetadata(metadataFile: string, metadata: WorkerConversationMetadata): void {\n\twriteFileAtomicSync(metadataFile, `${JSON.stringify(metadata)}\\n`, { mode: 0o600 });\n}\n\nfunction openWorkerBirthContext(\n\tagentDir: string,\n\tparentSessionId: string,\n\tlogicalAgentId: string,\n\treference: WorkerContextForkReference,\n): WorkerContextForkSnapshot {\n\treturn new WorkerContextForkStore({ agentDir, parentSessionId }).open({ logicalAgentId, reference });\n}\n\n/**\n * Verify the immutable message prefix and optionally close only the safe append-prefix crash window.\n * A partial prefix may contain no custom/compaction/attempt state: birth messages must land first.\n */\nfunction verifyWorkerBirthContextPrefix(\n\tsessionManager: SessionManager,\n\tsnapshot: WorkerContextForkSnapshot,\n\trecoverMissingSuffix: boolean,\n): boolean {\n\tconst entryCount = sessionManager.getEntryCount();\n\tconst sharedLength = Math.min(entryCount, snapshot.messages.length);\n\tlet divergenceIndex: number | undefined;\n\tvisitWorkerSessionEntries(sessionManager, 0, sharedLength, (entry, index) => {\n\t\tif (divergenceIndex !== undefined) return;\n\t\tif (\n\t\t\tentry.type !== \"message\" ||\n\t\t\t(entry.message.role !== \"user\" && entry.message.role !== \"assistant\") ||\n\t\t\t!isDeepStrictEqual(\n\t\t\t\tworkerMessageForPersistence(entry.message),\n\t\t\t\tworkerMessageForPersistence(snapshot.messages[index]!),\n\t\t\t)\n\t\t) {\n\t\t\tdivergenceIndex = index;\n\t\t}\n\t});\n\tif (divergenceIndex !== undefined) {\n\t\tthrow new Error(`Worker conversation birth context diverges at message ${divergenceIndex}.`);\n\t}\n\tif (entryCount >= snapshot.messages.length) return false;\n\tif (!recoverMissingSuffix) {\n\t\tthrow new Error(\"Worker conversation birth context prefix is incomplete; reopen through ensure for recovery.\");\n\t}\n\tfor (const message of snapshot.messages.slice(entryCount)) {\n\t\tsessionManager.appendMessage(structuredClone(workerMessageForPersistence(message)));\n\t}\n\treturn true;\n}\n\nfunction assertAttemptUsageId(attemptId: string): string {\n\tconst normalized = attemptId.trim();\n\tif (!normalized || normalized.length > MAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS) {\n\t\tthrow new TypeError(\"Worker usage-boundary attempt id is invalid or exceeds its durable bound.\");\n\t}\n\treturn normalized;\n}\n\ninterface AttemptUsageBoundaryIndex {\n\tsessionId: string;\n\tsessionFile?: string;\n\tscannedEntryCount: number;\n\torderedIndices: number[];\n\tindicesByAttemptId: Map<string, number[]>;\n}\n\nconst attemptUsageBoundaryIndices = new WeakMap<SessionManager, AttemptUsageBoundaryIndex>();\n\nfunction attemptUsageBoundaryId(entry: Readonly<WorkerSessionEntry>): string | undefined {\n\tif (entry.type !== \"custom\" || entry.customType !== WORKER_ATTEMPT_USAGE_BOUNDARY_CUSTOM_TYPE) return undefined;\n\tconst data = entry.data;\n\tif (!data || typeof data !== \"object\" || Array.isArray(data)) return undefined;\n\tconst descriptor = Object.getOwnPropertyDescriptor(data, \"attemptId\");\n\tif (!descriptor || !(\"value\" in descriptor) || typeof descriptor.value !== \"string\") return undefined;\n\treturn descriptor.value;\n}\n\nfunction firstIndexAtOrAfter(indices: readonly number[], startIndex: number): number {\n\tlet low = 0;\n\tlet high = indices.length;\n\twhile (low < high) {\n\t\tconst middle = low + Math.floor((high - low) / 2);\n\t\tif (indices[middle]! < startIndex) low = middle + 1;\n\t\telse high = middle;\n\t}\n\treturn indices[low] ?? -1;\n}\n\n/** Sole parser/index owner for durable attempt-usage boundary entries. */\nfunction attemptUsageBoundaryIndex(\n\tsessionManager: SessionManager,\n\tattemptId: string | undefined,\n\tstartIndex = 0,\n): number {\n\tconst entryCount = sessionManager.getEntryCount();\n\tlet index = attemptUsageBoundaryIndices.get(sessionManager);\n\tif (\n\t\t!index ||\n\t\tindex.sessionId !== sessionManager.getSessionId() ||\n\t\tindex.sessionFile !== sessionManager.getSessionFile() ||\n\t\tindex.scannedEntryCount > entryCount\n\t) {\n\t\tindex = {\n\t\t\tsessionId: sessionManager.getSessionId(),\n\t\t\t...(sessionManager.getSessionFile() ? { sessionFile: sessionManager.getSessionFile() } : {}),\n\t\t\tscannedEntryCount: 0,\n\t\t\torderedIndices: [],\n\t\t\tindicesByAttemptId: new Map(),\n\t\t};\n\t\tattemptUsageBoundaryIndices.set(sessionManager, index);\n\t}\n\tif (index.scannedEntryCount < entryCount) {\n\t\tvisitWorkerSessionEntries(sessionManager, index.scannedEntryCount, entryCount, (entry, entryIndex) => {\n\t\t\tconst boundaryAttemptId = attemptUsageBoundaryId(entry);\n\t\t\tif (!boundaryAttemptId) return;\n\t\t\tindex.orderedIndices.push(entryIndex);\n\t\t\tconst attemptIndices = index.indicesByAttemptId.get(boundaryAttemptId);\n\t\t\tif (attemptIndices) attemptIndices.push(entryIndex);\n\t\t\telse index.indicesByAttemptId.set(boundaryAttemptId, [entryIndex]);\n\t\t});\n\t\tindex.scannedEntryCount = entryCount;\n\t}\n\treturn firstIndexAtOrAfter(\n\t\tattemptId === undefined ? index.orderedIndices : (index.indicesByAttemptId.get(attemptId) ?? []),\n\t\tstartIndex,\n\t);\n}\n\nfunction exactUserText(message: WorkerSessionMessage): string | undefined {\n\tif (!isRawWorkerTranscriptMessage(message) || message.role !== \"user\") return undefined;\n\tif (typeof message.content === \"string\") return message.content;\n\tlet text = \"\";\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"text\") return undefined;\n\t\ttext += block.text;\n\t}\n\treturn text;\n}\n\nfunction scanWorkerControlTranscript(\n\tsessionManager: SessionManager,\n\texpectations: readonly WorkerControlTranscriptExpectation[],\n): Set<string> {\n\tconst expectedById = new Map<string, string>();\n\tfor (const expectation of expectations) {\n\t\tconst messageId = expectation.messageId.trim();\n\t\tif (!messageId || workerControlMessageId(expectation.content) !== messageId) {\n\t\t\tthrow new TypeError(\"Worker control transcript expectation is invalid.\");\n\t\t}\n\t\tconst existing = expectedById.get(messageId);\n\t\tif (existing !== undefined && existing !== expectation.content) {\n\t\t\tthrow new Error(\"Worker control transcript identity has conflicting expected content.\");\n\t\t}\n\t\texpectedById.set(messageId, expectation.content);\n\t}\n\tconst matchCounts = new Map<string, number>();\n\tvisitWorkerSessionEntries(sessionManager, 0, sessionManager.getEntryCount(), (entry, _index, persistedBytes) => {\n\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\") return;\n\t\tif (persistedBytes !== undefined) {\n\t\t\tfor (const messageId of expectedById.keys()) {\n\t\t\t\tif (coldWorkerControlPrefixContains(sessionManager, entry.id, messageId)) {\n\t\t\t\t\tthrow new Error(\"Worker control transcript identity conflicts with oversized persisted content.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst content = exactUserText(entry.message);\n\t\tif (content === undefined) return;\n\t\tconst messageId = workerControlMessageId(content);\n\t\tif (!messageId || !expectedById.has(messageId)) return;\n\t\tif (expectedById.get(messageId) !== content) {\n\t\t\tthrow new Error(\"Worker control transcript identity conflicts with existing content.\");\n\t\t}\n\t\tconst count = (matchCounts.get(messageId) ?? 0) + 1;\n\t\tif (count > 1) throw new Error(\"Worker control transcript contains a duplicate message id.\");\n\t\tmatchCounts.set(messageId, count);\n\t});\n\treturn new Set(matchCounts.keys());\n}\n\nfunction assertWorkerConversationFile(agentDir: string, sessionFile: string, sessionId: string): string {\n\tconst workersRoot = resolve(orchestrationSessionsDir(agentDir));\n\tconst resolvedFile = resolve(sessionFile);\n\tconst fileRelativeToWorkersRoot = relative(workersRoot, resolvedFile);\n\tif (\n\t\tfileRelativeToWorkersRoot === \"\" ||\n\t\tfileRelativeToWorkersRoot.startsWith(\"..\") ||\n\t\tisAbsolute(fileRelativeToWorkersRoot)\n\t) {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tconst segments = fileRelativeToWorkersRoot.split(/[\\\\/]/);\n\tif (segments.length !== 3 || segments[1] !== \"worker-conversations\") {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tif (basename(resolvedFile) !== `${sessionId}.jsonl`) {\n\t\tthrow new Error(\"Worker conversation session file does not match its durable session id.\");\n\t}\n\treturn resolvedFile;\n}\n\n/**\n * Durable SessionManager-backed transcript for exactly one logical worker lane.\n *\n * The canonical session-file lock plus a raw-byte revision head fences competing processes. One\n * store shares the parsed core across lightweight resume-context views; unexpected durable changes\n * fail closed for active owners and only strict append-only recovery may replace the core.\n */\nexport class WorkerConversation {\n\tprivate readonly core: WorkerConversationCore;\n\tprivate readonly resumeContext: AgentResumeContext;\n\tprivate readonly agentDir?: string;\n\tprivate readonly metadataFile?: string;\n\n\tconstructor(\n\t\tsessionManager: SessionManager,\n\t\tresumeContext: AgentResumeContext,\n\t\tmetadata?: WorkerConversationMetadataBinding,\n\t\tsharedCore?: WorkerConversationCore,\n\t) {\n\t\tthis.core = sharedCore ?? {\n\t\t\tsessionManager,\n\t\t\t...(metadata ? { metadataState: cloneWorkerConversationMetadataState(metadata) } : {}),\n\t\t\tinvalid: false,\n\t\t\tgeneration: 0,\n\t\t\tactiveTranscriptCursors: 0,\n\t\t};\n\t\tthis.resumeContext = cloneResumeContext(resumeContext);\n\t\tthis.agentDir = metadata?.agentDir;\n\t\tthis.metadataFile = metadata?.file;\n\t}\n\n\tprivate get sessionManager(): SessionManager {\n\t\treturn this.core.sessionManager;\n\t}\n\n\tprivate set sessionManager(sessionManager: SessionManager) {\n\t\tthis.core.sessionManager = sessionManager;\n\t}\n\n\t/** Persisted conversations share one adopted metadata state; direct in-memory instances are current. */\n\tprivate get usageAccountingVersion(): 1 | undefined {\n\t\treturn this.metadataFile ? this.core.metadataState?.usageAccountingVersion : 1;\n\t}\n\n\t/** Immutable parent-context identity installed before this logical worker's first attempt. */\n\tgetBirthContextForkReference(): WorkerContextForkReference | undefined {\n\t\tconst reference = this.core.metadataState?.birthContextForkReference;\n\t\treturn reference ? structuredClone(reference) : undefined;\n\t}\n\n\t/** Resolve current provider-visible messages lazily through SessionManager. */\n\tgetProviderContext(): SessionContext {\n\t\treturn this.sessionManager.buildSessionContext();\n\t}\n\n\t/** Convert the current compacted projection at its transcript owner, never at each consumer. */\n\tgetProviderMessages(): Message[] {\n\t\treturn convertToLlm(this.getProviderContext().messages);\n\t}\n\n\t/** True when provider context is a compacted projection rather than the raw transcript prefix. */\n\thasProviderCompaction(): boolean {\n\t\treturn this.sessionManager.getBranch().some((entry) => entry.type === \"compaction\");\n\t}\n\n\t/**\n\t * The immutable, append-only raw worker messages, including messages compacted out of provider\n\t * context. This is recovery/audit data; it is never loaded into a provider request implicitly.\n\t */\n\tgetRawTranscript(): Message[] {\n\t\tconst messages: Message[] = [];\n\t\tvisitWorkerSessionEntries(this.sessionManager, 0, this.sessionManager.getEntryCount(), (entry) => {\n\t\t\tconst message = rawWorkerTranscriptMessage(entry);\n\t\t\tif (message) messages.push(structuredClone(message));\n\t\t});\n\t\treturn messages;\n\t}\n\n\t/**\n\t * Read one bounded raw-transcript page without materializing the complete session entry list.\n\t * A message larger than the complete page ceiling is consumed as an omission so every valid\n\t * non-terminal cursor advances. The opaque cursor is a raw-entry offset, so each entry is visited\n\t * at most once across a complete pagination pass and a page may contain no transcript messages.\n\t * `serializedBytes` measures the returned `messages` JSON array.\n\t */\n\tgetRawTranscriptPage(options: WorkerConversationTranscriptPageOptions = {}): WorkerConversationTranscriptPage {\n\t\tconst cursor = options.cursor ?? 0;\n\t\tconst maxMessages = options.maxMessages ?? MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES;\n\t\tconst maxBytes = options.maxBytes ?? MAX_WORKER_TRANSCRIPT_PAGE_BYTES;\n\t\tif (!Number.isSafeInteger(cursor) || cursor < 0) {\n\t\t\tthrow new TypeError(\"Worker transcript cursor must be a non-negative safe integer.\");\n\t\t}\n\t\tif (!Number.isSafeInteger(maxMessages) || maxMessages < 1 || maxMessages > MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Worker transcript page message count must be from 1 through ${MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES}.`,\n\t\t\t);\n\t\t}\n\t\tif (!Number.isSafeInteger(maxBytes) || maxBytes < 2 || maxBytes > MAX_WORKER_TRANSCRIPT_PAGE_BYTES) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Worker transcript page byte ceiling must be from 2 through ${MAX_WORKER_TRANSCRIPT_PAGE_BYTES}.`,\n\t\t\t);\n\t\t}\n\n\t\tconst messages: Message[] = [];\n\t\tlet consumedMessages = 0;\n\t\tlet omittedMessages = 0;\n\t\tlet serializedBytes = 2;\n\t\tlet pageClosed = false;\n\t\tconst singleMessageByteLimit = maxBytes - 2;\n\t\tconst entryCount = this.sessionManager.getEntryCount();\n\t\tif (cursor > entryCount) {\n\t\t\tthrow new TypeError(\"Worker transcript cursor exceeds the durable transcript length.\");\n\t\t}\n\t\tlet nextEntryCursor = cursor;\n\t\tif (cursor < entryCount) {\n\t\t\tconst visitedThrough = this.sessionManager.visitEntries(\n\t\t\t\tcursor,\n\t\t\t\tMath.min(MAX_SESSION_ENTRY_VISIT_COUNT, entryCount - cursor),\n\t\t\t\t(entry, entryIndex, persistedBytes) => {\n\t\t\t\t\tif (pageClosed) return;\n\t\t\t\t\tconst message = rawWorkerTranscriptMessage(entry);\n\t\t\t\t\tif (!message) {\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (consumedMessages >= maxMessages) {\n\t\t\t\t\t\tpageClosed = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(persistedBytes !== undefined && persistedBytes > singleMessageByteLimit) ||\n\t\t\t\t\t\tboundedJsonBytes(message, singleMessageByteLimit) > singleMessageByteLimit\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\t\tomittedMessages += 1;\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet clonedMessage: Message;\n\t\t\t\t\tlet messageBytes: number;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclonedMessage = structuredClone(message);\n\t\t\t\t\t\tconst serializedMessage = JSON.stringify(clonedMessage);\n\t\t\t\t\t\tmessageBytes = Buffer.byteLength(serializedMessage, \"utf8\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\t\tomittedMessages += 1;\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (messageBytes > singleMessageByteLimit) {\n\t\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\t\tomittedMessages += 1;\n\t\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst separatorBytes = messages.length > 0 ? 1 : 0;\n\t\t\t\t\tif (serializedBytes + separatorBytes + messageBytes > maxBytes) {\n\t\t\t\t\t\tpageClosed = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tmessages.push(clonedMessage);\n\t\t\t\t\tserializedBytes += separatorBytes + messageBytes;\n\t\t\t\t\tconsumedMessages += 1;\n\t\t\t\t\tnextEntryCursor = entryIndex + 1;\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (!pageClosed) nextEntryCursor = visitedThrough;\n\t\t}\n\t\treturn {\n\t\t\tcursor,\n\t\t\tmessages,\n\t\t\tnextCursor: nextEntryCursor < entryCount ? nextEntryCursor : undefined,\n\t\t\tomittedMessages,\n\t\t\tserializedBytes,\n\t\t};\n\t}\n\n\t/** Last durable provider message owned by one attempt, never an earlier persistent-worker turn. */\n\tgetLastAttemptMessage(attemptId: string): Message | undefined {\n\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId);\n\t\tif (boundaryIndex < 0) {\n\t\t\tif (this.usageAccountingVersion === 1) return undefined;\n\t\t\tconst legacyLast = this.getProviderMessages().at(-1);\n\t\t\treturn legacyLast ? structuredClone(legacyLast) : undefined;\n\t\t}\n\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, boundaryIndex + 1);\n\t\tconst lastAttemptEntry = nextBoundaryIndex >= 0 ? nextBoundaryIndex : this.sessionManager.getEntryCount();\n\t\tlet lastMessage: Message | undefined;\n\t\tvisitWorkerSessionEntries(this.sessionManager, boundaryIndex + 1, lastAttemptEntry, (entry) => {\n\t\t\tif (entry.type !== \"message\") return;\n\t\t\tif (\n\t\t\t\tentry.message.role !== \"user\" &&\n\t\t\t\tentry.message.role !== \"assistant\" &&\n\t\t\t\tentry.message.role !== \"toolResult\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlastMessage = structuredClone(entry.message);\n\t\t});\n\t\treturn lastMessage;\n\t}\n\n\t/** Durable host-observed mutation progress. Custom entries never enter provider context. */\n\trecordChangedFile(attemptId: string, filePath: string): void {\n\t\tif (!attemptId.trim() || attemptId.length > MAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress attempt id is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst candidate = collectBoundedWorkerClaimChangedFiles([filePath]);\n\t\tif (candidate.overflowed || candidate.values.length !== 1) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress path is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst path = candidate.values[0]!;\n\t\tif (this.usageAccountingVersion === 1) this.beginAttemptUsage(attemptId);\n\t\tconst existing = this.getChangedFiles(attemptId);\n\t\tif (existing.includes(path)) return;\n\t\tif (existing.length >= MAX_WORKER_CLAIM_CHANGED_FILES) {\n\t\t\tthrow new Error(\"Worker changed-file progress exceeds its durable entry bound.\");\n\t\t}\n\t\tthis.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendCustomEntry(WORKER_CHANGED_FILE_CUSTOM_TYPE, { attemptId, path }),\n\t\t);\n\t}\n\n\t/** Rehydrate the bounded mutation set across owner-session disposal and worker resume. */\n\tgetChangedFiles(attemptId: string): string[] {\n\t\tlet firstEntry = 0;\n\t\tlet lastEntry = this.sessionManager.getEntryCount();\n\t\tif (this.usageAccountingVersion === 1) {\n\t\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, assertAttemptUsageId(attemptId));\n\t\t\tif (boundaryIndex < 0) return [];\n\t\t\tfirstEntry = boundaryIndex + 1;\n\t\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, firstEntry);\n\t\t\tif (nextBoundaryIndex >= 0) lastEntry = nextBoundaryIndex;\n\t\t}\n\t\tconst paths: string[] = [];\n\t\tvisitWorkerSessionEntries(this.sessionManager, firstEntry, lastEntry, (entry) => {\n\t\t\tif (entry.type !== \"custom\" || entry.customType !== WORKER_CHANGED_FILE_CUSTOM_TYPE) return;\n\t\t\tconst data = entry.data;\n\t\t\tif (!data || typeof data !== \"object\" || Array.isArray(data)) return;\n\t\t\tconst attemptDescriptor = Object.getOwnPropertyDescriptor(data, \"attemptId\");\n\t\t\tconst pathDescriptor = Object.getOwnPropertyDescriptor(data, \"path\");\n\t\t\tif (\n\t\t\t\tattemptDescriptor &&\n\t\t\t\t\"value\" in attemptDescriptor &&\n\t\t\t\tattemptDescriptor.value === attemptId &&\n\t\t\t\tpathDescriptor &&\n\t\t\t\t\"value\" in pathDescriptor &&\n\t\t\t\ttypeof pathDescriptor.value === \"string\"\n\t\t\t) {\n\t\t\t\tpaths.push(pathDescriptor.value);\n\t\t\t}\n\t\t});\n\t\treturn collectBoundedWorkerClaimChangedFiles(paths).values;\n\t}\n\n\t/**\n\t * Mark the first transcript entry owned by one durable attempt. Persistent logical workers share\n\t * a conversation across tasks, so recovery accounting must not replay an earlier task's spend as\n\t * the new attempt's baseline. The marker is idempotent and never enters provider context.\n\t */\n\tbeginAttemptUsage(attemptId: string): void {\n\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\tthis.enableAttemptUsageBoundaries();\n\t\tif (attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId) >= 0) return;\n\t\tthis.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendCustomEntry(WORKER_ATTEMPT_USAGE_BOUNDARY_CUSTOM_TYPE, {\n\t\t\t\tattemptId: normalizedAttemptId,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Persist the authoritative task prompt once inside its durable attempt boundary. The boundary,\n\t * rather than provider-history length, is the idempotency owner: inherited birth messages and\n\t * queued mailbox controls may already exist, while a crash after append must not duplicate the\n\t * prompt on resume.\n\t */\n\tensureAttemptUserPrompt(attemptId: string, prompt: string): void {\n\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\tif (!prompt.trim()) throw new TypeError(\"Worker attempt prompt is required.\");\n\t\tthis.beginAttemptUsage(normalizedAttemptId);\n\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId);\n\t\tif (boundaryIndex < 0) throw new Error(\"Worker attempt prompt boundary was not persisted.\");\n\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, boundaryIndex + 1);\n\t\tconst endIndex = nextBoundaryIndex < 0 ? this.sessionManager.getEntryCount() : nextBoundaryIndex;\n\t\tlet matches = 0;\n\t\tvisitWorkerSessionEntries(this.sessionManager, boundaryIndex + 1, endIndex, (entry) => {\n\t\t\tif (entry?.type === \"message\" && entry.message.role === \"user\" && exactUserText(entry.message) === prompt) {\n\t\t\t\tmatches += 1;\n\t\t\t}\n\t\t});\n\t\tif (matches > 1) throw new Error(\"Worker attempt prompt appears more than once in its durable boundary.\");\n\t\tif (matches === 1) return;\n\t\tthis.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendMessage({ role: \"user\", content: prompt, timestamp: Date.now() }),\n\t\t);\n\t}\n\n\t/** Whether missing attempt markers have versioned, fail-closed accounting semantics. */\n\tusesAttemptUsageBoundaries(): boolean {\n\t\treturn this.usageAccountingVersion === 1;\n\t}\n\n\t/**\n\t * Upgrade a legacy idle conversation before its next durable task is prepared. Persisting this\n\t * evidence first closes the crash window where the task exists but its transcript marker does not.\n\t */\n\tenableAttemptUsageBoundaries(): void {\n\t\tif (this.usageAccountingVersion === 1) return;\n\t\tconst metadataFile = this.metadataFile;\n\t\tif (!metadataFile) return;\n\t\tconst sessionFile = this.resumeContext.sessionFile;\n\t\tif (!sessionFile) throw new Error(\"Worker conversation cannot version usage without a session file.\");\n\t\twithFileLockSync(sessionFile, () => {\n\t\t\tthis.synchronizeCoreLocked(false);\n\t\t\tconst currentMetadataState = this.core.metadataState;\n\t\t\tlet metadata = assertExactConversationMetadata(\n\t\t\t\tmetadataFile,\n\t\t\t\tthis.resumeContext,\n\t\t\t\tcurrentMetadataState?.logicalAgentId,\n\t\t\t\tcurrentMetadataState?.parentSessionId,\n\t\t\t\tcurrentMetadataState?.birthContextForkReference,\n\t\t\t);\n\t\t\tif (metadata.usageAccountingVersion !== 1) {\n\t\t\t\tmetadata = { ...metadata, usageAccountingVersion: 1 };\n\t\t\t\twriteWorkerConversationMetadata(metadataFile, metadata);\n\t\t\t}\n\t\t\tconst metadataState = cloneWorkerConversationMetadataState(metadata);\n\t\t\tconst metadataRevision = readWorkerConversationFileRevision(metadataFile);\n\t\t\tthis.core.metadataState = metadataState;\n\t\t\tthis.core.metadataRevision = metadataRevision;\n\t\t});\n\t}\n\n\t/**\n\t * Recover cumulative accounting from raw entry metadata without cloning or resolving message\n\t * payloads that compaction deliberately moved out of the provider-visible working set. Attempts\n\t * created before usage boundaries existed conservatively fall back to the complete transcript.\n\t */\n\tgetRawTranscriptUsage(attemptId?: string): AttemptUsageSnapshot {\n\t\tconst usage: AttemptUsageSnapshot = {\n\t\t\ttoolCalls: 0,\n\t\t\tinputTokens: 0,\n\t\t\toutputTokens: 0,\n\t\t\tcacheReadTokens: 0,\n\t\t\tcacheWriteTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcostUsd: 0,\n\t\t\tactiveWallClockMs: 0,\n\t\t};\n\t\tlet firstUsageEntry = 0;\n\t\tlet lastUsageEntry = this.sessionManager.getEntryCount();\n\t\tif (attemptId !== undefined) {\n\t\t\tconst normalizedAttemptId = assertAttemptUsageId(attemptId);\n\t\t\tconst boundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, normalizedAttemptId);\n\t\t\tif (boundaryIndex >= 0) {\n\t\t\t\tfirstUsageEntry = boundaryIndex + 1;\n\t\t\t\tconst nextBoundaryIndex = attemptUsageBoundaryIndex(this.sessionManager, undefined, firstUsageEntry);\n\t\t\t\tif (nextBoundaryIndex >= 0) lastUsageEntry = nextBoundaryIndex;\n\t\t\t} else if (this.usageAccountingVersion === 1) firstUsageEntry = lastUsageEntry;\n\t\t}\n\t\tvisitWorkerSessionEntries(this.sessionManager, firstUsageEntry, lastUsageEntry, (entry) => {\n\t\t\tif (entry.type === \"compaction\" && entry.usage) {\n\t\t\t\tusage.inputTokens += entry.usage.input;\n\t\t\t\tusage.outputTokens += entry.usage.output;\n\t\t\t\tusage.cacheReadTokens += entry.usage.cacheRead;\n\t\t\t\tusage.cacheWriteTokens += entry.usage.cacheWrite;\n\t\t\t\tusage.totalTokens += entry.usage.totalTokens;\n\t\t\t\tusage.costUsd += entry.usage.cost.total;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.type !== \"message\") return;\n\t\t\tif (entry.message.role === \"toolResult\") {\n\t\t\t\tusage.toolCalls += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.message.role !== \"assistant\") return;\n\t\t\tusage.inputTokens += entry.message.usage.input;\n\t\t\tusage.outputTokens += entry.message.usage.output;\n\t\t\tusage.cacheReadTokens += entry.message.usage.cacheRead;\n\t\t\tusage.cacheWriteTokens += entry.message.usage.cacheWrite;\n\t\t\tusage.totalTokens += entry.message.usage.totalTokens;\n\t\t\tusage.costUsd += entry.message.usage.cost.total;\n\t\t});\n\t\treturn validateAttemptUsageSnapshot(usage, \"legacy worker transcript usage\");\n\t}\n\n\t/**\n\t * Locate a bounded set of durable mailbox delivery commits without materializing or cloning the\n\t * complete raw transcript. Recovery uses this only to close the narrow crash window after a\n\t * control message was appended but before its mailbox acknowledgement was persisted.\n\t */\n\tfindDeliveredWorkerControlMessageIds(expectations: readonly WorkerControlTranscriptExpectation[]): Set<string> {\n\t\tif (expectations.length === 0) return new Set();\n\t\treturn this.withCanonicalSessionLock(\n\t\t\t(sessionManager) => scanWorkerControlTranscript(sessionManager, expectations),\n\t\t\ttrue,\n\t\t);\n\t}\n\n\t/**\n\t * Atomically prove one exact worker-control identity and optionally append it. Reopening inside\n\t * the canonical session-file lock makes two stale recovery owners serialize on the latest durable\n\t * transcript instead of both observing absence and appending a duplicate.\n\t */\n\treconcileWorkerControlMessage(\n\t\texpectation: WorkerControlTranscriptExpectation,\n\t\tmessage: Message,\n\t\tappendIfMissing: boolean,\n\t): WorkerControlTranscriptReconciliation {\n\t\tif (message.role !== \"user\" || typeof message.content !== \"string\" || message.content !== expectation.content) {\n\t\t\tthrow new TypeError(\"Worker control transcript message does not match its expectation.\");\n\t\t}\n\t\treturn this.withCanonicalSessionLock((sessionManager) => {\n\t\t\tconst delivered = scanWorkerControlTranscript(sessionManager, [expectation]).has(expectation.messageId);\n\t\t\tif (delivered || !appendIfMissing) return { delivered, appended: false };\n\t\t\tthis.appendSessionEntryLocked(sessionManager, (owner) =>\n\t\t\t\towner.appendMessage(structuredClone(workerMessageForPersistence(message))),\n\t\t\t);\n\t\t\treturn { delivered: true, appended: true };\n\t\t}, true);\n\t}\n\n\t/**\n\t * Append one shared-compaction checkpoint when the current provider-visible context exceeds the\n\t * explicit worker policy. The source transcript remains append-only; only the projection sent to\n\t * the next provider call changes. The method is idempotent while no new messages are appended.\n\t */\n\tasync compactProviderContext(\n\t\tpolicy: WorkerConversationRetentionPolicy,\n\t\tsignal?: AbortSignal,\n\t): Promise<WorkerConversationRetentionOutcome> {\n\t\tassertRetentionPolicy(policy);\n\t\tsignal?.throwIfAborted();\n\t\tconst preparationEntryCount = this.withCanonicalSessionLock((sessionManager) => sessionManager.getEntryCount());\n\t\tconst before = this.getProviderContext();\n\t\tconst beforeUsage = estimateContextTokens(before.messages);\n\t\tif (beforeUsage.tokens <= policy.maxContextTokens) {\n\t\t\treturn { status: \"within_limit\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tconst preparation = prepareCompaction(this.sessionManager.getBranch(), {\n\t\t\tenabled: true,\n\t\t\t// The store does not choose a model or invoke a provider. This is only the shared cut-point\n\t\t\t// input required by deterministic fallback; a controller-provided verified generator owns\n\t\t\t// the model-specific reserve and retry policy.\n\t\t\treserveTokens: Math.max(1, Math.floor(policy.maxContextTokens / 4)),\n\t\t\tkeepRecentTokens: policy.keepRecentTokens,\n\t\t\ttriggerPercent: 0,\n\t\t});\n\t\tif (!preparation) {\n\t\t\treturn { status: \"cannot_compact\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tlet result: CompactionResult;\n\t\tlet status: WorkerConversationRetentionOutcome[\"status\"] = \"compacted_deterministic\";\n\t\tif (policy.generateVerifiedCompaction) {\n\t\t\ttry {\n\t\t\t\tconst verified = await policy.generateVerifiedCompaction(preparation);\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tassertApplicableCompactionResult(verified, preparation);\n\t\t\t\tresult = verified;\n\t\t\t\tstatus = \"compacted_verified\";\n\t\t\t} catch {\n\t\t\t\t// Cancellation/suspension transfers transcript ownership. The retiring owner must\n\t\t\t\t// not append a fallback after its execution fence has been released.\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tconst failedUsage = policy.getFailedCompactionUsage?.();\n\t\t\t\tresult = {\n\t\t\t\t\t...createDeterministicCompaction(preparation),\n\t\t\t\t\t...(failedUsage ? { usage: structuredClone(failedUsage) } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tresult = createDeterministicCompaction(preparation);\n\t\t}\n\n\t\tsignal?.throwIfAborted();\n\t\tthis.appendSessionEntry((sessionManager) => {\n\t\t\tif (sessionManager.getEntryCount() !== preparationEntryCount) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation changed while its compaction checkpoint was generated.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn sessionManager.appendCompaction(\n\t\t\t\tresult.summary,\n\t\t\t\tresult.firstKeptEntryId,\n\t\t\t\tresult.tokensBefore,\n\t\t\t\tresult.details,\n\t\t\t\tfalse,\n\t\t\t\tresult.usage,\n\t\t\t);\n\t\t});\n\t\tconst context = this.getProviderContext();\n\t\treturn { status, context, contextUsage: estimateContextTokens(context.messages) };\n\t}\n\n\t/** Append one already-authorized worker message to the canonical transcript. */\n\tappendMessage(message: Message): string {\n\t\treturn this.appendSessionEntry((sessionManager) =>\n\t\t\tsessionManager.appendMessage(structuredClone(workerMessageForPersistence(message))),\n\t\t);\n\t}\n\n\tprivate appendSessionEntry(operation: (sessionManager: SessionManager) => string): string {\n\t\treturn this.withCanonicalSessionLock((sessionManager) =>\n\t\t\tthis.appendSessionEntryLocked(sessionManager, operation),\n\t\t);\n\t}\n\n\tprivate appendSessionEntryLocked(\n\t\tsessionManager: SessionManager,\n\t\toperation: (sessionManager: SessionManager) => string,\n\t): string {\n\t\tconst beforeCount = sessionManager.getEntryCount();\n\t\tlet entryId: string;\n\t\ttry {\n\t\t\tentryId = operation(sessionManager);\n\t\t} catch (error) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow error;\n\t\t}\n\t\tif (sessionManager.getEntryCount() !== beforeCount + 1) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation append did not advance exactly one entry.\");\n\t\t}\n\t\tconst head = this.core.head;\n\t\tif (!head) return entryId;\n\t\tconst entry = sessionManager.getEntry(entryId);\n\t\tif (!entry) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation appended entry is unavailable.\");\n\t\t}\n\t\tconst serialized = JSON.stringify(entry);\n\t\ttry {\n\t\t\tthis.core.head = advanceWorkerSessionHeadAfterOwnedAppend(this.resumeContext.sessionFile!, head, serialized);\n\t\t} catch (error) {\n\t\t\tthis.core.invalid = true;\n\t\t\tthrow error;\n\t\t}\n\t\tif (entry.type === \"message\") {\n\t\t\ttry {\n\t\t\t\tsessionManager.releasePersistedMessagePayload(entryId);\n\t\t\t} catch (error) {\n\t\t\t\tthis.core.invalid = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tthis.core.invalid = false;\n\t\treturn entryId;\n\t}\n\n\tprivate reopenVerifiedSessionManagerLocked(\n\t\texpectedEntryCount: number,\n\t\tfailure: \"recovery state\" | \"appended suffix\",\n\t): SessionManager {\n\t\tconst sessionFile = this.resumeContext.sessionFile!;\n\t\tconst sessionDir = this.resumeContext.sessionDir ?? dirname(sessionFile);\n\t\tconst sessionManager = SessionManager.open(sessionFile, this.agentDir!, sessionDir);\n\t\tif (\n\t\t\tsessionManager.getSessionId() !== this.resumeContext.sessionId ||\n\t\t\tsessionManager.getCwd() !== resolve(this.resumeContext.cwd) ||\n\t\t\tsessionManager.getEntryCount() !== expectedEntryCount\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(`Worker conversation ${failure} is invalid.`);\n\t\t}\n\t\tassertLinearWorkerSession(sessionManager);\n\t\treturn sessionManager;\n\t}\n\n\tprivate synchronizeCoreLocked(allowExternalAppend: boolean): void {\n\t\tconst sessionFile = this.resumeContext.sessionFile;\n\t\tif (!sessionFile) return;\n\t\tif (this.metadataFile && this.core.metadataRevision) {\n\t\t\tconst metadataRevision = readWorkerConversationFileRevision(this.metadataFile);\n\t\t\tif (!sameWorkerConversationFileRevision(this.core.metadataRevision, metadataRevision)) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation metadata changed under a different owner.\");\n\t\t\t}\n\t\t}\n\t\tconst currentRevision = readWorkerConversationFileRevision(sessionFile);\n\t\tconst head = this.core.head;\n\t\tif (!this.core.invalid && head && sameWorkerConversationFileRevision(head.revision, currentRevision)) return;\n\t\tconst scanned = scanWorkerSessionFile(\n\t\t\tsessionFile,\n\t\t\tthis.resumeContext.sessionId,\n\t\t\tthis.resumeContext.cwd,\n\t\t\thead?.entryCount,\n\t\t);\n\t\tif (!head) {\n\t\t\tif (scanned.entryCount !== this.sessionManager.getEntryCount()) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation session entries are invalid.\");\n\t\t\t}\n\t\t\tthis.core.head = scanned;\n\t\t\tthis.core.invalid = false;\n\t\t\treturn;\n\t\t}\n\t\tif (scanned.revision.dev !== head.revision.dev || scanned.revision.ino !== head.revision.ino) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation file identity changed.\");\n\t\t}\n\t\tif (\n\t\t\tscanned.headerDigest !== head.headerDigest ||\n\t\t\tscanned.entryCount < head.entryCount ||\n\t\t\tscanned.prefixDigest !== head.entryDigest\n\t\t) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation durable prefix changed.\");\n\t\t}\n\t\tif (scanned.entryCount === head.entryCount) {\n\t\t\tif (scanned.entryDigest !== head.entryDigest) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation durable content changed.\");\n\t\t\t}\n\t\t\tif (this.core.invalid || this.sessionManager.getEntryCount() !== scanned.entryCount) {\n\t\t\t\tthis.sessionManager = this.reopenVerifiedSessionManagerLocked(scanned.entryCount, \"recovery state\");\n\t\t\t\tthis.core.generation += 1;\n\t\t\t}\n\t\t\tthis.core.head = scanned;\n\t\t\tthis.core.invalid = false;\n\t\t\treturn;\n\t\t}\n\t\tif (!allowExternalAppend) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation advanced under a different owner.\");\n\t\t}\n\t\tif (this.core.activeTranscriptCursors > 0) {\n\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\"Worker conversation advanced while a transcript commit was active.\",\n\t\t\t);\n\t\t}\n\t\tthis.sessionManager = this.reopenVerifiedSessionManagerLocked(scanned.entryCount, \"appended suffix\");\n\t\tthis.core.head = scanned;\n\t\tthis.core.invalid = false;\n\t\tthis.core.generation += 1;\n\t}\n\n\t/** Store-only refresh while the canonical session-file lock is already held. */\n\trefreshCachedCoreLocked(): void {\n\t\tthis.synchronizeCoreLocked(true);\n\t}\n\n\tprivate captureTranscriptCommitCursorLocked(sessionManager: SessionManager): WorkerTranscriptCommitCursor {\n\t\tconst cursor: WorkerTranscriptCommitCursor = Object.freeze({ kind: \"worker-transcript-suffix-v1\" });\n\t\tworkerTranscriptCommitCursorStates.set(cursor, {\n\t\t\tcore: this.core,\n\t\t\tentryIndex: sessionManager.getEntryCount(),\n\t\t\tgeneration: this.core.generation,\n\t\t\tstatus: \"active\",\n\t\t});\n\t\tthis.core.activeTranscriptCursors += 1;\n\t\treturn cursor;\n\t}\n\n\t/** Atomically capture the provider projection and the raw-entry cursor that immediately follows it. */\n\tbeginTranscriptCommit(): { history: Message[]; cursor: WorkerTranscriptCommitCursor } {\n\t\treturn this.withCanonicalSessionLock((sessionManager) => ({\n\t\t\thistory: convertToLlm(sessionManager.buildSessionContext().messages),\n\t\t\tcursor: this.captureTranscriptCommitCursorLocked(sessionManager),\n\t\t}));\n\t}\n\n\tprivate withCanonicalSessionLock<Result>(\n\t\toperation: (sessionManager: SessionManager) => Result,\n\t\tallowExternalAppend = false,\n\t): Result {\n\t\tconst sessionFile = this.resumeContext.sessionFile;\n\t\tif (!sessionFile) return operation(this.sessionManager);\n\t\tconst agentDir = this.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Worker conversation cannot lock a persisted transcript without its agent directory.\");\n\t\t}\n\t\treturn withFileLockSync(sessionFile, () => {\n\t\t\tthis.synchronizeCoreLocked(allowExternalAppend);\n\t\t\tconst sessionManager = this.sessionManager;\n\t\t\tif (\n\t\t\t\tsessionManager.getSessionId() !== this.resumeContext.sessionId ||\n\t\t\t\tsessionManager.getCwd() !== resolve(this.resumeContext.cwd)\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Worker conversation changed identity while acquiring its transcript lock.\");\n\t\t\t}\n\t\t\treturn operation(sessionManager);\n\t\t});\n\t}\n\n\t/** Commit only the bounded child-loop suffix captured by an opaque raw-entry cursor. */\n\tcaptureTranscriptCommitCursor(): WorkerTranscriptCommitCursor {\n\t\treturn this.withCanonicalSessionLock((sessionManager) =>\n\t\t\tthis.captureTranscriptCommitCursorLocked(sessionManager),\n\t\t);\n\t}\n\n\tabortTranscriptCommit(cursor: WorkerTranscriptCommitCursor): void {\n\t\tconst state = workerTranscriptCommitCursorStates.get(cursor);\n\t\tif (!state || state.core !== this.core) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker transcript cursor belongs to a different conversation.\");\n\t\t}\n\t\tif (state.status === \"active\") {\n\t\t\tstate.status = \"aborted\";\n\t\t\tthis.core.activeTranscriptCursors -= 1;\n\t\t}\n\t}\n\n\tcommitTranscript(\n\t\tcursor: WorkerTranscriptCommitCursor,\n\t\tsuffix: readonly Message[],\n\t\toptions?: { appendMissing?: boolean },\n\t): number {\n\t\tconst state = workerTranscriptCommitCursorStates.get(cursor);\n\t\tif (!state || state.core !== this.core) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker transcript cursor belongs to a different conversation.\");\n\t\t}\n\t\tconst normalizedSuffix = suffix.map((message) => workerMessageForPersistence(message));\n\t\tif (state.status === \"aborted\") {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker transcript cursor is no longer active.\");\n\t\t}\n\t\tif (state.status === \"committed\") {\n\t\t\tif (!isDeepStrictEqual(state.committedSuffix, normalizedSuffix)) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker transcript cursor replay conflicts with its committed suffix.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.withCanonicalSessionLock((sessionManager) => {\n\t\t\tif (state.generation !== this.core.generation) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker transcript cursor was invalidated by owner replacement.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet persistedMessages = 0;\n\t\t\tlet divergenceIndex: number | undefined;\n\t\t\tvisitWorkerSessionEntries(sessionManager, state.entryIndex, sessionManager.getEntryCount(), (entry) => {\n\t\t\t\tif (divergenceIndex !== undefined) return;\n\t\t\t\tconst persisted = rawWorkerTranscriptMessage(entry);\n\t\t\t\tif (!persisted) return;\n\t\t\t\tconst candidate = normalizedSuffix[persistedMessages];\n\t\t\t\tif (!candidate) {\n\t\t\t\t\tdivergenceIndex = persistedMessages;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isDeepStrictEqual(workerMessageForPersistence(persisted), candidate)) {\n\t\t\t\t\tdivergenceIndex = persistedMessages;\n\t\t\t\t}\n\t\t\t\tpersistedMessages += 1;\n\t\t\t});\n\t\t\tif (divergenceIndex !== undefined) {\n\t\t\t\tif (divergenceIndex >= normalizedSuffix.length) {\n\t\t\t\t\tthrow new Error(\"Worker conversation suffix is shorter than its persisted raw context.\");\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Worker conversation suffix diverges from persisted context at message ${divergenceIndex}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (options?.appendMissing === false && persistedMessages < normalizedSuffix.length) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation is missing callback-persisted transcript suffix entries.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (let index = persistedMessages; index < normalizedSuffix.length; index += 1) {\n\t\t\t\tthis.appendSessionEntryLocked(sessionManager, (owner) =>\n\t\t\t\t\towner.appendMessage(structuredClone(normalizedSuffix[index]!)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tstate.status = \"committed\";\n\t\t\tstate.committedSuffix = structuredClone(normalizedSuffix);\n\t\t\tthis.core.activeTranscriptCursors -= 1;\n\t\t\treturn normalizedSuffix.length - persistedMessages;\n\t\t});\n\t}\n\n\t/** Return an isolated copy suitable for durable orchestration/process-resume state. */\n\tgetResumeContext(): AgentResumeContext {\n\t\treturn cloneResumeContext(this.resumeContext);\n\t}\n}\n\nfunction assertRetentionPolicy(policy: WorkerConversationRetentionPolicy): void {\n\tif (!Number.isSafeInteger(policy.maxContextTokens) || policy.maxContextTokens < 2) {\n\t\tthrow new TypeError(\"Worker conversation maximum context tokens must be an integer of at least 2.\");\n\t}\n\tif (\n\t\t!Number.isSafeInteger(policy.keepRecentTokens) ||\n\t\tpolicy.keepRecentTokens < 1 ||\n\t\tpolicy.keepRecentTokens >= policy.maxContextTokens\n\t) {\n\t\tthrow new TypeError(\"Worker conversation retained context tokens must be an integer below the maximum.\");\n\t}\n}\n\nfunction assertApplicableCompactionResult(result: CompactionResult, preparation: CompactionPreparation): void {\n\tif (\n\t\t!result ||\n\t\ttypeof result.summary !== \"string\" ||\n\t\tresult.firstKeptEntryId !== preparation.firstKeptEntryId ||\n\t\tresult.tokensBefore !== preparation.tokensBefore\n\t) {\n\t\tthrow new Error(\"Worker verified compaction result does not match the prepared durable transcript.\");\n\t}\n}\n\n/** Creates and reopens canonical SessionManager transcripts for logical Pi worker lanes. */\nexport class WorkerConversationStore {\n\tprivate readonly cachedCores = new Map<string, CachedWorkerConversationCore>();\n\n\tclearCache(): void {\n\t\tfor (const cached of this.cachedCores.values()) {\n\t\t\tif (cached.core.activeTranscriptCursors > 0) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation cache cannot be cleared during an active transcript commit.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.cachedCores.clear();\n\t}\n\n\tcreate(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => this.createLocked(options, resumeContext));\n\t}\n\n\tprivate createLocked(\n\t\toptions: CreateWorkerConversationOptions,\n\t\tresumeContext: AgentResumeContext,\n\t): WorkerConversation {\n\t\tconst sessionDir = resumeContext.sessionDir!;\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\tconst metadataFile = workerConversationMetadataFile(sessionFile);\n\t\tif (existsSync(sessionFile)) {\n\t\t\tthrow new Error(`Worker conversation already exists for logical agent '${options.logicalAgentId}'.`);\n\t\t}\n\t\tif (options.birthContextForkReference) {\n\t\t\t// Validate the content-addressed snapshot before publishing either conversation file.\n\t\t\topenWorkerBirthContext(\n\t\t\t\toptions.agentDir,\n\t\t\t\toptions.parentSessionId,\n\t\t\t\toptions.logicalAgentId,\n\t\t\t\toptions.birthContextForkReference,\n\t\t\t);\n\t\t}\n\n\t\t// SessionManager intentionally defers a brand-new header until its first assistant message.\n\t\t// A worker must be resumable after its first user/tool message, so atomically seed the exact\n\t\t// SessionManager header and immediately reopen it through SessionManager for all later writes.\n\t\tconst seed = SessionManager.create(resumeContext.cwd, options.agentDir, sessionDir, {\n\t\t\tid: resumeContext.sessionId,\n\t\t});\n\t\tconst header = seed.getHeader();\n\t\tif (!header) throw new Error(\"Unable to create a worker conversation session header.\");\n\t\tif (existsSync(metadataFile)) {\n\t\t\tconst metadata = assertExactConversationMetadata(\n\t\t\t\tmetadataFile,\n\t\t\t\tresumeContext,\n\t\t\t\toptions.logicalAgentId,\n\t\t\t\toptions.parentSessionId,\n\t\t\t);\n\t\t\tif (\n\t\t\t\toptions.birthContextForkReference &&\n\t\t\t\tmetadata.birthContextForkReference &&\n\t\t\t\t!isDeepStrictEqual(options.birthContextForkReference, metadata.birthContextForkReference)\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t\t\t}\n\t\t\tconst reference = options.birthContextForkReference ?? metadata.birthContextForkReference;\n\t\t\tif (reference) {\n\t\t\t\topenWorkerBirthContext(options.agentDir, options.parentSessionId, options.logicalAgentId, reference);\n\t\t\t}\n\t\t\twriteWorkerConversationMetadata(metadataFile, {\n\t\t\t\t...metadata,\n\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\t...(reference ? { birthContextForkReference: reference } : {}),\n\t\t\t\tusageAccountingVersion: 1,\n\t\t\t});\n\t\t} else {\n\t\t\t// Metadata lands first: a crash leaves no visible conversation until the ordinary session\n\t\t\t// header is atomically published, while a later ensure can validate the exact intended identity.\n\t\t\twriteWorkerConversationMetadata(metadataFile, {\n\t\t\t\tlogicalAgentId: options.logicalAgentId,\n\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\tresumeContext,\n\t\t\t\t...(options.birthContextForkReference\n\t\t\t\t\t? { birthContextForkReference: options.birthContextForkReference }\n\t\t\t\t\t: {}),\n\t\t\t\tusageAccountingVersion: 1,\n\t\t\t});\n\t\t}\n\t\twriteFileAtomicSync(sessionFile, `${JSON.stringify(header)}\\n`);\n\n\t\treturn this.openExisting(\n\t\t\t{\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tresumeContext,\n\t\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t\t},\n\t\t\t{\n\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\tbirthContextForkReference: options.birthContextForkReference,\n\t\t\t\trecoverBirthContextPrefix: true,\n\t\t\t},\n\t\t);\n\t}\n\n\t/** Open the one canonical transcript or atomically create it with the exact same durable identity. */\n\tensure(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => {\n\t\t\tif (!existsSync(sessionFile)) return this.createLocked(options, resumeContext);\n\t\t\treturn this.openExisting(\n\t\t\t\t{\n\t\t\t\t\tagentDir: options.agentDir,\n\t\t\t\t\tresumeContext,\n\t\t\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\t\tbirthContextForkReference: options.birthContextForkReference,\n\t\t\t\t\trecoverBirthContextPrefix: true,\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\topen(options: OpenWorkerConversationOptions): WorkerConversation {\n\t\tconst context = options.resumeContext;\n\t\tif (context.provider !== \"pi\" || !context.sessionFile) {\n\t\t\treturn this.openExisting(options, { recoverBirthContextPrefix: false });\n\t\t}\n\t\tassertValidSessionId(context.sessionId);\n\t\tconst sessionFile = assertWorkerConversationFile(options.agentDir, context.sessionFile, context.sessionId);\n\t\treturn withFileLockSync(sessionFile, () => this.openExisting(options, { recoverBirthContextPrefix: false }));\n\t}\n\n\tprivate openExisting(\n\t\toptions: OpenWorkerConversationOptions,\n\t\tbirthContext: {\n\t\t\tparentSessionId?: string;\n\t\t\tbirthContextForkReference?: WorkerContextForkReference;\n\t\t\trecoverBirthContextPrefix: boolean;\n\t\t},\n\t): WorkerConversation {\n\t\tconst context = cloneResumeContext(options.resumeContext);\n\t\tif (context.provider !== \"pi\") throw new TypeError(\"Only Pi worker conversations can be reopened.\");\n\t\tif (!context.sessionFile)\n\t\t\tthrow new TypeError(\"A persisted worker session file is required to reopen a conversation.\");\n\t\tif (!context.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\t\tassertValidSessionId(context.sessionId);\n\n\t\tconst sessionFile = assertWorkerConversationFile(options.agentDir, context.sessionFile, context.sessionId);\n\t\tif (!existsSync(sessionFile)) throw new Error(`Worker conversation session file does not exist: ${sessionFile}`);\n\t\tconst sessionDir = dirname(sessionFile);\n\t\tif (context.sessionDir && resolve(context.sessionDir) !== sessionDir) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Worker conversation resume context has a session directory that disagrees with its session file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst metadataFile = workerConversationMetadataFile(sessionFile);\n\t\tconst cached = this.cachedCores.get(sessionFile);\n\t\tif (cached) {\n\t\t\tif (!sameAgentResumeIdentity(cached.resumeContext, context)) {\n\t\t\t\tthrow new Error(\"Worker conversation resume context conflicts with the persisted transcript.\");\n\t\t\t}\n\t\t\tlet {\n\t\t\t\tmetadata,\n\t\t\t\trevision: metadataRevision,\n\t\t\t\tcontent: metadataContent,\n\t\t\t} = assertStableExactConversationMetadata(\n\t\t\t\tmetadataFile,\n\t\t\t\tcontext,\n\t\t\t\toptions.expectedLogicalAgentId,\n\t\t\t\tbirthContext.parentSessionId,\n\t\t\t);\n\t\t\tconst previousMetadataState = cached.core.metadataState;\n\t\t\tif (!previousMetadataState) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation cached metadata state is missing.\");\n\t\t\t}\n\t\t\tlet metadataState = cloneWorkerConversationMetadataState(metadata);\n\t\t\tassertCachedWorkerConversationMetadata(previousMetadataState, metadataState);\n\t\t\tconst requestedReference = birthContext.birthContextForkReference;\n\t\t\tlet boundFirstReference = false;\n\t\t\tif (requestedReference && !previousMetadataState.birthContextForkReference) {\n\t\t\t\tif (cached.core.activeTranscriptCursors > 0) {\n\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\"Worker conversation birth context changed while a transcript commit was active.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst parentSessionId = birthContext.parentSessionId;\n\t\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\t\tconst snapshot = openWorkerBirthContext(\n\t\t\t\t\toptions.agentDir,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tmetadataState.logicalAgentId,\n\t\t\t\t\trequestedReference,\n\t\t\t\t);\n\t\t\t\tif (cached.core.sessionManager.getEntryCount() > 0) {\n\t\t\t\t\tthrow new Error(\"Worker conversation cannot bind birth context after transcript use.\");\n\t\t\t\t}\n\t\t\t\tmetadata = {\n\t\t\t\t\t...metadata,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tbirthContextForkReference: requestedReference,\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\t// Bind identity before the first prefix entry. A crash leaves an exact suffix for cold recovery.\n\t\t\t\t\twriteWorkerConversationMetadata(metadataFile, metadata);\n\t\t\t\t\tconst boundMetadata = assertStableExactConversationMetadata(\n\t\t\t\t\t\tmetadataFile,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tmetadataState.logicalAgentId,\n\t\t\t\t\t\tparentSessionId,\n\t\t\t\t\t\trequestedReference,\n\t\t\t\t\t);\n\t\t\t\t\tassertWorkerConversationUsageAccountingVersion(\n\t\t\t\t\t\tpreviousMetadataState.usageAccountingVersion,\n\t\t\t\t\t\tboundMetadata.metadata.usageAccountingVersion,\n\t\t\t\t\t);\n\t\t\t\t\tmetadata = boundMetadata.metadata;\n\t\t\t\t\tmetadataRevision = boundMetadata.revision;\n\t\t\t\t\tmetadataContent = boundMetadata.content;\n\t\t\t\t\tverifyWorkerBirthContextPrefix(cached.core.sessionManager, snapshot, true);\n\t\t\t\t\tconst boundHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\t\t\t\tif (cached.core.sessionManager.getEntryCount() !== boundHead.entryCount) {\n\t\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\t\"Worker conversation bound birth context entries are invalid.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tassertLinearWorkerSession(cached.core.sessionManager);\n\t\t\t\t\tmetadataState = cloneWorkerConversationMetadataState(metadata);\n\t\t\t\t\tassertWorkerConversationMetadataContent(\n\t\t\t\t\t\tmetadataFile,\n\t\t\t\t\t\tmetadataRevision,\n\t\t\t\t\t\tmetadataContent,\n\t\t\t\t\t\t\"Worker conversation metadata changed while its birth context was bound.\",\n\t\t\t\t\t);\n\t\t\t\t\tcached.core.head = boundHead;\n\t\t\t\t\tcached.core.metadataState = metadataState;\n\t\t\t\t\tcached.core.metadataRevision = metadataRevision;\n\t\t\t\t\tcached.core.invalid = false;\n\t\t\t\t\tcached.core.generation += 1;\n\t\t\t\t\tboundFirstReference = true;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcached.core.invalid = true;\n\t\t\t\t\tthis.cachedCores.delete(sessionFile);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (requestedReference && !isDeepStrictEqual(metadataState.birthContextForkReference, requestedReference)) {\n\t\t\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t\t\t}\n\t\t\tconst revisionChanged =\n\t\t\t\t!cached.core.metadataRevision ||\n\t\t\t\t!sameWorkerConversationFileRevision(cached.core.metadataRevision, metadataRevision);\n\t\t\tconst currentSessionRevision = readWorkerConversationFileRevision(sessionFile);\n\t\t\tconst sessionRevisionChanged =\n\t\t\t\t!cached.core.head || !sameWorkerConversationFileRevision(cached.core.head.revision, currentSessionRevision);\n\t\t\tif (!revisionChanged && !boundFirstReference && !isDeepStrictEqual(previousMetadataState, metadataState)) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation metadata content changed without a new durable revision.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst previousMetadataRevision = cached.core.metadataRevision;\n\t\t\tif (revisionChanged) {\n\t\t\t\tif (cached.core.activeTranscriptCursors > 0) {\n\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\"Worker conversation metadata changed while a transcript commit was active.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (sessionRevisionChanged && cached.core.activeTranscriptCursors > 0) {\n\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\"Worker conversation advanced while a transcript commit was active.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst reference = metadataState.birthContextForkReference;\n\t\t\tif ((revisionChanged || sessionRevisionChanged) && reference) {\n\t\t\t\tconst parentSessionId = metadataState.parentSessionId;\n\t\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\t\tconst snapshot = openWorkerBirthContext(\n\t\t\t\t\toptions.agentDir,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tmetadataState.logicalAgentId,\n\t\t\t\t\treference,\n\t\t\t\t);\n\t\t\t\tconst verificationManager = sessionRevisionChanged\n\t\t\t\t\t? SessionManager.open(sessionFile, cached.agentDir, sessionDir)\n\t\t\t\t\t: cached.core.sessionManager;\n\t\t\t\tconst recoveredBirthSuffix = verifyWorkerBirthContextPrefix(\n\t\t\t\t\tverificationManager,\n\t\t\t\t\tsnapshot,\n\t\t\t\t\tsessionRevisionChanged && birthContext.recoverBirthContextPrefix,\n\t\t\t\t);\n\t\t\t\tif (recoveredBirthSuffix) {\n\t\t\t\t\tconst recoveredHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\t\t\t\tif (verificationManager.getEntryCount() !== recoveredHead.entryCount) {\n\t\t\t\t\t\tthrow new WorkerConversationOwnershipError(\n\t\t\t\t\t\t\t\"Worker conversation recovered birth context entries are invalid.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tassertLinearWorkerSession(verificationManager);\n\t\t\t\t\tcached.core.sessionManager = verificationManager;\n\t\t\t\t\tcached.core.head = recoveredHead;\n\t\t\t\t\tcached.core.invalid = false;\n\t\t\t\t\tcached.core.generation += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tassertWorkerConversationMetadataContent(\n\t\t\t\tmetadataFile,\n\t\t\t\tmetadataRevision,\n\t\t\t\tmetadataContent,\n\t\t\t\t\"Worker conversation metadata changed while its cached state was opened.\",\n\t\t\t);\n\t\t\tif (revisionChanged) {\n\t\t\t\tcached.core.metadataState = metadataState;\n\t\t\t\tcached.core.metadataRevision = metadataRevision;\n\t\t\t}\n\t\t\tconst conversation = new WorkerConversation(\n\t\t\t\tcached.core.sessionManager,\n\t\t\t\t{ ...context, sessionDir, sessionFile, cwd: cached.core.sessionManager.getCwd() },\n\t\t\t\tbindWorkerConversationMetadata(cached.metadataFile, cached.agentDir, metadataState),\n\t\t\t\tcached.core,\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconversation.refreshCachedCoreLocked();\n\t\t\t} catch (error) {\n\t\t\t\tif (revisionChanged) {\n\t\t\t\t\tcached.core.metadataState = previousMetadataState;\n\t\t\t\t\tcached.core.metadataRevision = previousMetadataRevision;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn conversation;\n\t\t}\n\n\t\tconst scannedHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\tconst sessionManager = SessionManager.open(sessionFile, options.agentDir, sessionDir);\n\t\tconst openedHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\tassertWorkerSessionHeadContent(\n\t\t\tscannedHead,\n\t\t\topenedHead,\n\t\t\t\"Worker conversation changed while its canonical session was opened.\",\n\t\t);\n\t\tif (sessionManager.getSessionId() !== context.sessionId) {\n\t\t\tthrow new Error(\"Worker conversation session file does not contain the requested durable session id.\");\n\t\t}\n\t\tif (sessionManager.getCwd() !== resolve(context.cwd)) {\n\t\t\tthrow new Error(\"Worker conversation resume context working directory disagrees with the persisted session.\");\n\t\t}\n\t\tif (sessionManager.getEntryCount() !== openedHead.entryCount) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation session entries are invalid.\");\n\t\t}\n\t\tassertLinearWorkerSession(sessionManager);\n\t\tlet {\n\t\t\tmetadata,\n\t\t\trevision: metadataRevision,\n\t\t\tcontent: metadataContent,\n\t\t} = assertStableExactConversationMetadata(\n\t\t\tmetadataFile,\n\t\t\tcontext,\n\t\t\toptions.expectedLogicalAgentId,\n\t\t\tbirthContext.parentSessionId,\n\t\t);\n\t\tconst expectedReference = birthContext.birthContextForkReference;\n\t\tconst expectedParentSessionId = birthContext.parentSessionId ?? metadata.parentSessionId;\n\t\tif (expectedReference && !expectedParentSessionId) {\n\t\t\tthrow new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t}\n\t\tconst expectedSnapshot =\n\t\t\texpectedReference && expectedParentSessionId\n\t\t\t\t? openWorkerBirthContext(\n\t\t\t\t\t\toptions.agentDir,\n\t\t\t\t\t\texpectedParentSessionId,\n\t\t\t\t\t\tmetadata.logicalAgentId,\n\t\t\t\t\t\texpectedReference,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\tif (expectedReference) {\n\t\t\tif (metadata.birthContextForkReference) {\n\t\t\t\tif (!isDeepStrictEqual(metadata.birthContextForkReference, expectedReference)) {\n\t\t\t\t\tthrow new Error(\"Worker conversation birth context reference conflicts with the persisted transcript.\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!birthContext.recoverBirthContextPrefix || sessionManager.getEntryCount() > 0) {\n\t\t\t\t\tthrow new Error(\"Worker conversation cannot bind birth context after transcript use.\");\n\t\t\t\t}\n\t\t\t\tconst parentSessionId = birthContext.parentSessionId;\n\t\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\t\tconst previousUsageAccountingVersion = metadata.usageAccountingVersion;\n\t\t\t\tmetadata = {\n\t\t\t\t\t...metadata,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\tbirthContextForkReference: expectedReference,\n\t\t\t\t};\n\t\t\t\t// Bind identity before the first prefix entry. A crash can only leave an exact suffix to recover.\n\t\t\t\twriteWorkerConversationMetadata(metadataFile, metadata);\n\t\t\t\tconst boundMetadata = assertStableExactConversationMetadata(\n\t\t\t\t\tmetadataFile,\n\t\t\t\t\tcontext,\n\t\t\t\t\tmetadata.logicalAgentId,\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\texpectedReference,\n\t\t\t\t);\n\t\t\t\tassertWorkerConversationUsageAccountingVersion(\n\t\t\t\t\tpreviousUsageAccountingVersion,\n\t\t\t\t\tboundMetadata.metadata.usageAccountingVersion,\n\t\t\t\t);\n\t\t\t\tmetadata = boundMetadata.metadata;\n\t\t\t\tmetadataRevision = boundMetadata.revision;\n\t\t\t\tmetadataContent = boundMetadata.content;\n\t\t\t}\n\t\t}\n\t\tconst reference = metadata.birthContextForkReference;\n\t\tif (reference) {\n\t\t\tconst parentSessionId = metadata.parentSessionId;\n\t\t\tif (!parentSessionId) throw new Error(\"Worker conversation birth context parent session is missing.\");\n\t\t\tconst snapshot =\n\t\t\t\texpectedSnapshot && isDeepStrictEqual(reference, expectedReference)\n\t\t\t\t\t? expectedSnapshot\n\t\t\t\t\t: openWorkerBirthContext(options.agentDir, parentSessionId, metadata.logicalAgentId, reference);\n\t\t\tverifyWorkerBirthContextPrefix(sessionManager, snapshot, birthContext.recoverBirthContextPrefix);\n\t\t}\n\n\t\tlet currentHead: WorkerSessionFileHead;\n\t\tif (sessionManager.getEntryCount() === openedHead.entryCount) {\n\t\t\tassertWorkerConversationOpenRevision(\n\t\t\t\tsessionFile,\n\t\t\t\topenedHead.revision,\n\t\t\t\t\"Worker conversation changed while its canonical session was opened.\",\n\t\t\t);\n\t\t\tcurrentHead = openedHead;\n\t\t} else {\n\t\t\tcurrentHead = scanWorkerSessionFile(sessionFile, context.sessionId, context.cwd);\n\t\t}\n\t\tif (sessionManager.getEntryCount() !== currentHead.entryCount) {\n\t\t\tthrow new WorkerConversationOwnershipError(\"Worker conversation session entries are invalid.\");\n\t\t}\n\t\tconst metadataState = cloneWorkerConversationMetadataState(metadata);\n\t\tassertWorkerConversationMetadataContent(\n\t\t\tmetadataFile,\n\t\t\tmetadataRevision,\n\t\t\tmetadataContent,\n\t\t\t\"Worker conversation metadata changed while its canonical state was opened.\",\n\t\t);\n\t\tconst core: WorkerConversationCore = {\n\t\t\tsessionManager,\n\t\t\thead: currentHead,\n\t\t\tmetadataRevision,\n\t\t\tmetadataState,\n\t\t\tinvalid: false,\n\t\t\tgeneration: 0,\n\t\t\tactiveTranscriptCursors: 0,\n\t\t};\n\t\tconst conversation = new WorkerConversation(\n\t\t\tsessionManager,\n\t\t\t{\n\t\t\t\t...context,\n\t\t\t\tsessionDir,\n\t\t\t\tsessionFile,\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t},\n\t\t\tbindWorkerConversationMetadata(metadataFile, options.agentDir, metadataState),\n\t\t\tcore,\n\t\t);\n\t\tthis.cachedCores.set(sessionFile, {\n\t\t\tcore,\n\t\t\tresumeContext: cloneResumeContext(context),\n\t\t\tmetadataFile,\n\t\t\tagentDir: options.agentDir,\n\t\t});\n\t\treturn conversation;\n\t}\n}\n\nfunction joinWorkerSessionFile(sessionDir: string, sessionId: string): string {\n\treturn resolve(sessionDir, `${sessionId}.jsonl`);\n}\n\nfunction workerConversationMetadataFile(sessionFile: string): string {\n\treturn `${sessionFile}.worker.json`;\n}\n"]}
|