@dreb/coding-agent 2.64.0 → 2.64.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,EAC5B,6BAA6B,GAC7B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACnB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAEN,kBAAkB,EAClB,iCAAiC,EACjC,mBAAmB,EACnB,iCAAiC,EACjC,oBAAoB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAc,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAqCrE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAc,EAAkB;IAChE,OAAO;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE;QAClC,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,YAAY,EAAE,CAAC,CAAC,YAAY;KAC5B,CAAC;AAAA,CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAoD,EAAuB;IAClH,MAAM,OAAO,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAAA,CAClD;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA2C,EAAoB;IACpG,OAAO,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa;KACb,CAAC,CAAC,CAAC;AAAA,CACJ;AAED,MAAM,UAAU,kBAAkB,CACjC,OAAuF,EACxE;IACf,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;IAChE,OAAO;QACN,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtG,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1G,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;SAC7D,CAAC,CAAC;QACH,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,mBAAmB,EAClB,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,KAAK,SAAS;YACtD,OAAO,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC;KAC1D,CAAC;AAAA,CACF;AAED,MAAM,UAAU,iBAAiB,CAChC,OAAwF,EACpE;IACpB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,eAAe,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9E,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE;YACpC,IAAI,EAAE,OAAO,CAAC,cAAc;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAC,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,QAAQ,CAAC,UAAU;aAC/B,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7G,CAAC;IACF,CAAC;IACD,+EAA+E;IAC/E,8EAA8E;IAC9E,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;QAC9C,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK;SACtC,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,CAC9B;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAsB;IAC9E,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,MAAM;QACZ,CAAC,CAAC,2BAA2B,MAAM,CAAC,OAAO,CAAC,IAAI,mEAAmE;QACnH,CAAC,CAAC,SAAS,CAAC;AAAA,CACb;AAED,KAAK,UAAU,cAAc,CAAC,OAAqB,EAAE,IAAI,GAAG,EAAE,EAAgC;IAC7F,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,sBAAsB,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAAE,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACnE,mBAAmB,CAAC,YAAY,EAAE;YACjC,OAAO,CAAC,eAAe;YACvB,GAAG,OAAO,CAAC,iBAAiB;YAC5B,GAAG,OAAO,CAAC,gBAAgB;SAC3B,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,eAAe,CAAC,0BAA0B,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC;YACJ,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC;QACb,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACd,wCAAwC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,6BAA6B,YAAY,EAAE,EAAE,CAAC;IACjE,CAAC;IAED,IAAI,WAAqC,CAAC;IAC1C,IAAI,OAAoE,CAAC;IACzE,IAAI,CAAC;QACJ,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACvC,OAAO,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7D,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE;YACxC,OAAO,CAAC,eAAe;YACvB,GAAG,OAAO,CAAC,iBAAiB;YAC5B,GAAG,OAAO,CAAC,gBAAgB;SAC3B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3F,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,KAAK;gBACnB,CAAC,CAAC,4BAA4B,MAAM,CAAC,UAAU,EAAE;gBACjD,CAAC,CAAC,wBAAwB,KAAK,CAAC,WAAW,CAAC,MAAM,mCAAmC,MAAM,CAAC,UAAU,EAAE;SACzG,CAAC;IACH,CAAC;YAAS,CAAC;QACV,WAAW,EAAE,EAAE,CAAC;QAChB,IAAI,OAAO;YAAE,mBAAmB,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3F,CAAC;AAAA,CACD;AAED,MAAM,UAAU,wBAAwB,CACvC,OAGC,EACoB;IACrB,OAAO;QACN,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC5C,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC5C,gBAAgB,EAAE,OAAO,CAAC,0BAA0B,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC,CAAC;QACH,gBAAgB,EAAE,OAAO,CAAC,0BAA0B,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC,CAAC;KACH,CAAC;AAAA,CACF;AAED,MAAM,UAAU,cAAc,CAAC,OAAqB,EAAE,oBAA6B,EAAmB;IACrG,OAAO;QACN,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,qBAAqB,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACjD,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;QAC5F,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,uBAAuB,EAAE,OAAO,CAAC,0BAA0B,EAAE;QAC7D,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;QACrC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QACvC,oBAAoB;KACpB,CAAC;AAAA,CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAqB,EAAE;IACjE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAA,CAC7G;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,cAAsD,EACtD,WAAmB,EACgE;IACnF,MAAM,UAAU,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,WAAW,EAAE;QAC9D,iBAAiB,EAAE,UAAU;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAAA,CAC3C;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,qBAAqB,GAA8B;IACxE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;IAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAAA,CACtC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,CAAgC,EAA0B;IAClG,OAAO;QACN,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC9C,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KACtE,CAAC;AAAA,CACF;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAsB;IACrE,OAAO,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;SAC1C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAAA,CAC/C;AA8DD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAChC,eAA+B,EAC/B,eAAe,GAAuD,EAAE,EAClD;IACtB,MAAM,YAAY,GAAG,eAAe,CAAC,2BAA2B,EAAE,CAAC;IACnE,MAAM,wBAAwB,GAAG,eAAe,CAAC,kCAAkC,EAAE,CAAC;IACtF,MAAM,aAAa,GAAG,eAAe,CAAC,gBAAgB,EAAE,CAAC;IACzD,MAAM,+BAA+B,GAAG,eAAe,CAAC,+BAA+B,EAAE,CAAC;IAC1F,MAAM,eAAe,GAAG,yBAAyB,CAAC,aAAa,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;IACxF,OAAO;QACN,eAAe,EAAE,eAAe,CAAC,kBAAkB,EAAE;QACrD,YAAY,EAAE,eAAe,CAAC,eAAe,EAAE;QAC/C,oBAAoB,EAAE,eAAe,CAAC,uBAAuB,EAAE;QAC/D,YAAY,EAAE,eAAe,CAAC,eAAe,EAAE;QAC/C,YAAY,EAAE,eAAe,CAAC,eAAe,EAAE;QAC/C,iBAAiB,EAAE,eAAe,CAAC,oBAAoB,EAAE;QACzD,2BAA2B,EAAE,eAAe,CAAC,8BAA8B,EAAE;QAC7E,YAAY,EAAE,eAAe,CAAC,eAAe,EAAE;QAC/C,sBAAsB,EAAE,eAAe,CAAC,yBAAyB,EAAE;QACnE,eAAe,EAAE,eAAe,CAAC,kBAAkB,EAAE;QACrD,WAAW,EAAE,eAAe,CAAC,cAAc,EAAE;QAC7C,mBAAmB,EAAE,eAAe,CAAC,sBAAsB,EAAE;QAC7D,qBAAqB,EAAE,YAAY,CAAC,YAAY;QAChD,qBAAqB,EAAE,wBAAwB;QAC/C,4BAA4B,EAAE,wBAAwB,CAAC,YAAY,CAAC,cAAc,CAAC;QACnF,SAAS,EAAE,eAAe,CAAC,YAAY,EAAE;QACzC,iBAAiB,EAAE,eAAe,CAAC,oBAAoB,EAAE;QACzD,WAAW,EAAE,eAAe,CAAC,cAAc,EAAE;QAC7C,eAAe,EAAE,eAAe,CAAC,gCAAgC,EAAE;QACnE,QAAQ,EAAE,eAAe,CAAC,mBAAmB,EAAE;QAC/C,aAAa;QACb,oBAAoB,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/E,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,aAAa,EAAE,eAAe,CAAC,QAAQ;QACvC,+BAA+B;QAC/B,mBAAmB,EAAE,+BAA+B;YACnD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,aAAa,KAAK,SAAS;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,QAAQ;KACZ,CAAC;AAAA,CACF;AAED,KAAK,UAAU,2BAA2B,CACzC,eAA+B,EAC/B,aAAmD,EACpB;IAC/B,OAAO,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAAA,CACnG;AAED,SAAS,oBAAoB,CAAC,MAA8C,EAAU;IACrF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CAClF;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,eAAkC,EAClC,aAAmD,EACmC;IACtF,OAAO,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC;YACJ,4EAA4E;YAC5E,8EAA8E;YAC9E,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAAgC,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;QACjG,CAAC;QAED,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACN,EAAE,EAAE,KAAc;gBAClB,KAAK,EAAE,8DAA8D,oBAAoB,CAAC,WAAW,CAAC,EAAE;aACxG,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,eAAe,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,8BAA+B,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;QAChG,CAAC;QAED,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QACjD,IACC,UAAU,CAAC,MAAM,GAAG,CAAC;YACrB,eAAe,CAAC,0BAA0B,EAAE;YAC5C,eAAe,CAAC,2BAA2B,EAAE,EAC5C,CAAC;YACF,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAChD,OAAO;gBACN,EAAE,EAAE,KAAc;gBAClB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC,CAAC,gDAAgD;aACzG,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC;QAC7F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,oCAAqC,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;QACtG,CAAC;IAAA,CACD,CAAC,CAAC;AAAA,CACH;AAED,MAAM,oBAAoB,GAAG;IAC5B,iBAAiB;IACjB,cAAc;IACd,sBAAsB;IACtB,cAAc;IACd,cAAc;IACd,mBAAmB;IACnB,6BAA6B;IAC7B,cAAc;IACd,wBAAwB;IACxB,iBAAiB;IACjB,aAAa;IACb,qBAAqB;IACrB,uBAAuB;IACvB,uBAAuB;IACvB,WAAW;IACX,mBAAmB;IACnB,aAAa;IACb,eAAe;IACf,iBAAiB;IACjB,UAAU;CACD,CAAC;AAEX,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,eAAe,CAAU,CAAC;AACtD,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAgD,CAAC;AAEvG,SAAS,aAAa,CAAC,KAAc,EAAoC;IACxE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAAA,CACpD;AAED,SAAS,mBAAmB,CAAC,KAAc,EAA+C;IACzF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACN,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,0FAA0F;SACjG,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2CAA2C;aAClG,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QACpG,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2CAA2C;aAClG,CAAC;QACH,CAAC;IACF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAAA,CACpB;AAED,wFAAwF;AACxF,MAAM,UAAU,0BAA0B,CACzC,eAAqE,EACrE,IAAa,EACwE;IACrF,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACJ,eAAe,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+BAAgC,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,2BAA2B,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO;QACN,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE;KACvF,CAAC;AAAA,CACF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,IAAI,kBAAkB,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;AAC7D,SAAS,iBAAiB,CAAI,EAAoB,EAAc;IAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/B,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,KAAK,UAAU,iCAAiC,CAC/C,eAA+B,EAC/B,OAAiB,EACjB,UAAkB,EAClB,QAA0E,EAC1E,aAAmD,EAC2C;IAC9F,eAAe,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,eAAe,CAAC,0BAA0B,EAAE,EAAE,CAAC;QAClD,OAAO;YACN,EAAE,EAAE,KAAc;YAClB,KAAK,EAAE,gHAAgH;SACvH,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACJ,eAAe,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,iFAAiF;QACjF,yEAAyE;QACzE,eAAe,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAAgC,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;IACjG,CAAC;IACD,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,mFAAmF;QACnF,kFAAkF;QAClF,6EAA6E;QAC7E,eAAe,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAA+B,MAAM,EAAE,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,SAAS,GAAG,0BAA0B,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC1E,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO;QACN,EAAE,EAAE,IAAa;QACjB,MAAM,EAAE;YACP,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,QAAQ,EAAE,MAAM,2BAA2B,CAAC,eAAe,EAAE,aAAa,CAAC;YAC3E,GAAG,QAAQ;SACX;KACD,CAAC;AAAA,CACF;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,eAA+B,EAC/B,IAAa,EACb,aAAmD,EAC2C;IAC9F,OAAO,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,0BAA0B,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAEpC,uFAAuF;QACvF,uEAAuE;QACvE,MAAM,KAAK,GAAG,wBAAwB,CAAC,eAAe,CAAC,kCAAkC,EAAE,CAAC,CAAC;QAC7F,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACJ,OAAO,GAAG,6BAA6B,CAAC,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,iCAAiC,CACvC,eAAe,EACf,OAAO,EACP,SAAS,CAAC,UAAU,CAAC,eAAe,EACpC;YACC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC;gBACzD,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE;gBACrD,CAAC,CAAC,EAAE,CAAC;SACN,EACD,aAAa,CACb,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACH;AAED,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC/C,eAA+B,EAC/B,IAAa,EACb,aAAmD,EAC2C;IAC9F,OAAO,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,0BAA0B,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QACpC,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACnD,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,2HAA2H;aAClI,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAChD,OAAO;gBACN,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE;oBACP,UAAU,EAAE,SAAS,CAAC,UAAU;oBAChC,QAAQ,EAAE,MAAM,2BAA2B,CAAC,eAAe,EAAE,aAAa,CAAC;iBAC3E;aACD,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,YAAa,CAAC;QACvD,MAAM,KAAK,GAAG,wBAAwB,CAAC,eAAe,CAAC,kCAAkC,EAAE,CAAC,CAAC;QAC7F,OAAO,iCAAiC,CACvC,eAAe,EACf,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC,EAC5C,SAAS,CAAC,UAAU,CAAC,eAAe,EACpC,EAAE,WAAW,EAAE,EACf,aAAa,CACb,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACH;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACrD,eAA+B,EAC/B,IAAa,EACb,aAAmD,EAC2C;IAC9F,OAAO,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,gEAAgE,EAAE,CAAC;QACxG,CAAC;QAED,eAAe,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,eAAe,CAAC,0BAA0B,EAAE,EAAE,CAAC;YAClD,OAAO;gBACN,EAAE,EAAE,KAAc;gBAClB,KAAK,EAAE,gHAAgH;aACvH,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,eAAe,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,iFAAiF;YACjF,yEAAyE;YACzE,eAAe,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAAgC,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;QACjG,CAAC;QACD,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnF,mFAAmF;YACnF,kFAAkF;YAClF,8EAA8E;YAC9E,eAAe,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAA+B,MAAM,EAAE,EAAE,CAAC;QAC/E,CAAC;QAED,OAAO;YACN,EAAE,EAAE,IAAa;YACjB,MAAM,EAAE;gBACP,QAAQ,EAAE,MAAM,2BAA2B,CAAC,eAAe,EAAE,aAAa,CAAC;gBAC3E,aAAa,EAAE,IAAI;aACnB;SACD,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACH;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,eAA+B,EAC/B,aAAkD,EAClD,MAAqC,EACsE;IAC3G,kEAAkE;IAClE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAE,oBAA0C,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACpH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO;YACN,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,4BAA4B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC3G,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;IACpF,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sDAAsD,EAAE,CAAC;IACrF,CAAC;IAED,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAC/C,IAAI,OAAO,MAAM,CAAC,oBAAoB,KAAK,QAAQ,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC3G,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,iCAAiC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,mBAAmB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACxI,CAAC;QACH,CAAC;IACF,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,CAAU,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAE,WAAiC,CAAC,QAAQ,CAAC,KAAe,CAAC,EAAE,CAAC;YAC1F,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC1F,CAAC;QACH,CAAC;IACF,CAAC;IAED,KAAK,MAAM,GAAG,IAAI;QACjB,mBAAmB;QACnB,6BAA6B;QAC7B,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,qBAAqB;QACrB,uBAAuB;QACvB,mBAAmB;KACV,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAC5F,CAAC;IACF,CAAC;IAED,IACC,MAAM,CAAC,sBAAsB,KAAK,SAAS;QAC3C,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,MAAM,CAAC,sBAAsB,GAAG,CAAC,CAAC,EAC1F,CAAC;QACF,OAAO;YACN,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,mCAAmC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,CAAC,uCAAuC;SAC9H,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,IACC,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YACpC,CAAE,kBAAwC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EACpE,CAAC;YACF,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC/G,CAAC;QACH,CAAC;IACF,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACpB,OAAO,UAAU,CAAC;QACnB,CAAC;IACF,CAAC;IAED,IAAI,sBAA4C,CAAC;IACjD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1C,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,oFAAoF;aAC3F,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,uFAAuF;aAC9F,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,sBAAsB,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8EAA8E,EAAE,CAAC;YAC7G,CAAC;YACD,MAAM,mBAAmB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,KAAK,mBAAmB,CAChF,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACN,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,+BAA+B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wDAAwD;iBACvH,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,0CAA0C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACpG,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpB,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,IACC,sBAAsB,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM;YACxD,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAC1E,CAAC;YACF,sBAAsB,GAAG,SAAS,CAAC;QACpC,CAAC;IACF,CAAC;IAED,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;IAC3F,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC;YACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;QAC1E,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAChE,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACjG,CAAC;QACD,IAAI,eAAe,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,eAAe,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;QAC1E,CAAC;QACD,IAAI,eAAe,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACvC,sEAAsE;YACtE,uEAAuE;YACvE,qEAAqE;YACrE,eAAe,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACP,IACC,eAAe,CAAC,KAAK,KAAK,SAAS;gBACnC,CAAC,OAAO,eAAe,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAC3E,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uEAAuE,EAAE,CAAC;YACtG,CAAC;YACD,IACC,eAAe,CAAC,QAAQ,KAAK,SAAS;gBACtC,CAAC,OAAO,eAAe,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAChG,CAAC;gBACF,OAAO;oBACN,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,qCAAqC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,mBAAmB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACzI,CAAC;YACH,CAAC;YACD,IACC,eAAe,CAAC,SAAS,KAAK,SAAS;gBACvC,CAAC,OAAO,eAAe,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EACnF,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sDAAsD,EAAE,CAAC;YACrF,CAAC;YACD,IAAI,eAAe,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBAChE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2DAA2D,EAAE,CAAC;YAC1F,CAAC;YACD,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uDAAuD,EAAE,CAAC;gBACtF,CAAC;gBACD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;gBACtG,IAAI,CAAC,KAAK;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC7F,IAAI,eAAe,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC5C,MAAM,UAAU,GAAG,6BAA6B,CAAC,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAClF,IAAI,CAAC,UAAU,CAAC,EAAE;wBAAE,OAAO,UAAU,CAAC;gBACvC,CAAC;YACF,CAAC;YACD,eAAe,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;QAC1C,CAAC;IACF,CAAC;IAED,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC/B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;QAC3D,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACzE,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5F,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3F,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;YACnE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAC;QACjF,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;QACnE,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAU,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;gBACtG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,kCAAkC,EAAE,CAAC;YAChF,CAAC;QACF,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC7D,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gEAAgE,EAAE,CAAC;YAC/F,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;YAC/E,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;gBAC9F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7E,CAAC;QACF,CAAC;QACD,6EAA6E;QAC7E,6CAA6C;QAC7C,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,qBAA2C,CAAC;IAChD,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAChD,IAAI,CAAC;YACJ,qBAAqB,GAAG,6BAA6B,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC;IACF,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC;IACnD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACN,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,uDAAuD;SAC9D,CAAC;IACH,CAAC;IACD,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC3F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAC;QACjF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC;QACxG,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,oBAAoB,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,YAAY,EAAE;aAC1E,CAAC;QACH,CAAC;IACF,CAAC;IAED,MAAM,yBAAyB,GAAG,MAAM,CAAC,qBAAqB,KAAK,SAAS,IAAI,qBAAqB,KAAK,SAAS,CAAC;IAEpH,4EAA4E;IAC5E,qEAAqE;IACrE,OAAO,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,qFAAqF;QACrF,kFAAkF;QAClF,+EAA+E;QAC/E,eAAe,CAAC,WAAW,EAAE,CAAC;QAE9B,sFAAoF;QACpF,mFAAmF;QACnF,mFAAmF;QACnF,2DAA2D;QAC3D,IAAI,eAAe,CAAC,0BAA0B,EAAE,EAAE,CAAC;YAClD,OAAO;gBACN,EAAE,EAAE,KAAc;gBAClB,KAAK,EAAE,gHAAgH;aACvH,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,sEAAsE;YACtE,2CAA2C;YAC3C,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/E,eAAe,CAAC,0BAA0B,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBAC/C,eAAe,CAAC,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACvC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACvC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC5C,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,MAAM,CAAC,2BAA2B,KAAK,SAAS,EAAE,CAAC;gBACtD,eAAe,CAAC,8BAA8B,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACvC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBACjD,eAAe,CAAC,yBAAyB,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBAC1C,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACtC,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBAC9C,eAAe,CAAC,sBAAsB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACpC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC5C,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACxC,IAAI,eAAe,CAAC,+BAA+B,EAAE,EAAE,CAAC;oBACvD,QAAQ,CAAC,IAAI,CACZ,iLAA+K,CAC/K,CAAC;gBACH,CAAC;gBACD,eAAe,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBAC1C,eAAe,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC5B,eAAe,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACtC,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBACtE,IAAI,eAAe,CAAC,4BAA4B,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC7D,QAAQ,CAAC,IAAI,CACZ,4CAA4C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB;4BAC7F,2EAAyE;4BACzE,8CAA8C,CAC/C,CAAC;oBACH,CAAC;oBACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,eAAe,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC3D,CAAC;yBAAM,CAAC;wBACP,eAAe,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;oBACtD,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;YAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnF,sEAAsE;gBACtE,mDAAmD;gBACnD,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAA+B,MAAM,EAAE,EAAE,CAAC;YAC/E,CAAC;YAED,4EAA4E;YAC5E,iCAAiC;YACjC,IAAI,yBAAyB,EAAE,CAAC;gBAC/B,eAAe,CAAC,eAAe,CAAC;oBAC/B,GAAG,CAAC,MAAM,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvG,GAAG,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzF,CAAC,CAAC;gBACH,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;gBAChD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjF,qEAAqE;oBACrE,sEAAsE;oBACtE,eAAe,CAAC,MAAM,EAAE,CAAC;oBACzB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAA+B,MAAM,EAAE,EAAE,CAAC;gBAC/E,CAAC;YACF,CAAC;YAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,eAAe,EAAE,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;YACxF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBACrD,CAAC,CAAC,EAAE,EAAE,EAAE,IAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,yBAAyB,EAAE,CAAC;gBAC/B,wEAAwE;gBACxE,kEAAkE;gBAClE,eAAe,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,+BAAgC,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;QACjG,CAAC;IAAA,CACD,CAAC,CAAC;AAAA,CACH;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAU;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAAA,CACtD;AAED,SAAS,kBAAkB,CAAC,OAAgB,EAAU;IACrD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,IACC,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,MAAM,IAAI,IAAI;YACd,IAAI,CAAC,IAAI,KAAK,MAAM;YACpB,MAAM,IAAI,IAAI;YACd,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC5B,CAAC;YACF,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,kBAAkB,CAAC,IAAqB,EAAU;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,KAAK,CAAC,OAOjB,CAAC;YACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACrB,OAAO,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtE,IAAI,WAAW;oBAAE,OAAO,WAAW,CAAC;gBACpC,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;oBAAE,OAAO,WAAW,CAAC;gBACrD,IAAI,GAAG,CAAC,YAAY;oBAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAChE,OAAO,cAAc,CAAC;YACvB,CAAC;YACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3B,OAAO,gBAAgB,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC9B,OAAO,gBAAgB,CAAC,WAAW,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,gBAAgB,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,gBAAgB;YACpB,OAAO,gBAAgB,CAAC,IAAI,KAAK,CAAC,UAAU,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxF,KAAK,YAAY;YAChB,OAAO,gBAAgB,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3F,KAAK,gBAAgB;YACpB,OAAO,gBAAgB,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,KAAK,cAAc;YAClB,OAAO,gBAAgB,CAAC,WAAW,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QACtD,KAAK,uBAAuB;YAC3B,OAAO,gBAAgB,CAAC,cAAc,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;QAC/D,KAAK,QAAQ;YACZ,OAAO,gBAAgB,CAAC,YAAY,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;QAC1D,KAAK,OAAO;YACX,OAAO,gBAAgB,CAAC,WAAW,KAAK,CAAC,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC;QACnE,KAAK,cAAc;YAClB,OAAO,gBAAgB,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC;QAC9D,SAAS,CAAC;YACT,oFAAoF;YACpF,MAAM,WAAW,GAAU,KAAK,CAAC;YACjC,sFAAsF;YACtF,OAAO,gBAAgB,CAAC,IAAK,KAA0B,CAAC,IAAI,GAAG,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;AAAA,CACD;AAED,SAAS,aAAa,CAAC,IAAqB,EAAe;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,OAAO;QACN,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;QACjB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC7B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;QACrB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC;QACjC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;QAC/B,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,QAAQ,EAAE,EAAE;KACZ,CAAC;AAAA,CACF;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAwB,EAAiB;IACvE,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAsE,EAAE,CAAC;IAEpF,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAChD,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEzB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,cAAc,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACb;AAED,mEAAmE;AACnE,MAAM,UAAU,aAAa,CAAC,cAA6D,EAGzF;IACD,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC;AAAA,CAC/F;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,OAA2C,EAC3C,QAAgB,EAChB,OAA6G,EACtD;IACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO;QACN,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC;AAAA,CACF;AAkBD,MAAM,UAAU,2BAA2B,CAC1C,MAAmE,EACnE,wBAAiE,EACjE,SAAS,GAAe,GAAG,EAAE,CAAC,EAAC,CAAC,EACX;IACrB,4DAA4D;IAC5D,SAAS,mBAAmB,CAC3B,IAA0C,EAC1C,YAAe,EACf,OAAgC,EAChC,aAAsD,EACtD,SAAsB,EACT;QACb,IAAI,IAAI,EAAE,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEhE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,SAAoD,CAAC;YACzD,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,MAAM,OAAO,GAAG,GAAY,EAAE,CAAC;gBAC9B,IAAI,OAAO;oBAAE,OAAO,KAAK,CAAC;gBAC1B,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,SAAS;oBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;gBACvC,IAAI,EAAE,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpD,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC;YAAA,CACZ,CAAC;YAEF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO;gBACvB,OAAO,CAAC,YAAY,CAAC,CAAC;YAAA,CACtB,CAAC;YACF,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEjE,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBACnB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,EAAE;wBAAE,OAAO;oBACvB,SAAS,EAAE,EAAE,CAAC;oBACd,OAAO,CAAC,YAAY,CAAC,CAAC;gBAAA,CACtB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,UAAU,GAAG;gBAClB,IAAI,EAAE,sBAAsB;gBAC5B,EAAE;gBACF,GAAG,OAAO;aACuB,CAAC;YACnC,wBAAwB,CAAC,GAAG,CAAC,EAAE,EAAE;gBAChC,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,CAAC,QAAgC,EAAE,EAAE,CAAC;oBAC9C,IAAI,CAAC,OAAO,EAAE;wBAAE,OAAO;oBACvB,IAAI,CAAC;wBACJ,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAClC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,CAAC,KAAK,CAAC,CAAC;oBACf,CAAC;gBAAA,CACD;gBACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;oBAClB,IAAI,CAAC,OAAO,EAAE;wBAAE,OAAO;oBACvB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAAA,CACd;aACD,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,CAAC;QAAA,CACnB,CAAC,CAAC;IAAA,CACH;IAED,gFAAgF;IAChF,gFAAgF;IAChF,6EAA6E;IAC7E,gFAAgF;IAChF,gFAAgF;IAChF,6EAA6E;IAC7E,iFAAiF;IACjF,2CAA2C;IAC3C,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;QACxB,IAAI,WAAW;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,WAAW,GAAG,IAAI,CAAC;QACnB,IAAI,EAAE,CAAC;IAAA,CACP,CAAC;IACF,SAAS,YAAY,CACpB,IAA0C,EAC1C,YAAe,EACf,GAAqB,EACR;QACb,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;QAC5B,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1D,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,KAAQ,EAAE,EAAE,CAAC;gBAC5B,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,CAAC;YAAA,CACf,CAAC;YACF,uEAAuE;YACvE,iEAAiE;YACjE,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC;gBAChC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAAA,CACd,CAAC;YACF,sEAAsE;YACtE,uEAAuE;YACvE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC5C,IAAI,KAAK,KAAK,CAAC,CAAC;oBAAE,OAAO;gBACzB,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,YAAY,CAAC,CAAC;YAAA,CACrB,CAAC;YACF,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;gBACvB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACrB,MAAM,CAAC,YAAY,CAAC,CAAC;oBACrB,WAAW,GAAG,KAAK,CAAC;oBACpB,UAAU,EAAE,CAAC;oBACb,OAAO;gBACR,CAAC;gBACD,GAAG,EAAE;qBACH,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;qBAClB,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,WAAW,GAAG,KAAK,CAAC;oBACpB,UAAU,EAAE,CAAC;gBAAA,CACb,CAAC,CAAC;YAAA,CACJ,CAAC;YACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,UAAU,EAAE,CAAC;QAAA,CACb,CAAC,CAAC;IAAA,CACH;IAED;;OAEG;IACH,OAAO;QACN,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAChC,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CACxG,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAChF;QAEF,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CACjC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CACrG,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAChF;QAEF,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CACnC,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3G,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAChF;QAEF,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CACtB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAClC,mBAAmB,CAClB,IAAI,EACJ,SAAS,EACT;YACC,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU;YAClC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,aAAa,EAAE,CAAC,CAAC,aAAa;gBAC9B,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;aACtB,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,OAAO;YACtB,+DAA+D;YAC/D,gEAAgE;YAChE,yCAAyC;YACzC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;SAChE,EACD,CAAC,QAAQ,EAAE,EAAE,CAAC;YACb,IAAI,WAAW,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACnD,SAAS,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,MAAM,UAAU,GAAI,QAAkC,CAAC,OAAO,CAAC;YAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAI,KAAgC,EAAE,QAAQ,CAAC;gBAC7D,MAAM,UAAU,GAAI,KAAkC,EAAE,UAAU,CAAC;gBACnE,MAAM,OAAO,GAAI,KAA+B,EAAE,OAAO,CAAC;gBAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACvF,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;gBACjG,CAAC;gBACD,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAChE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;gBAC7D,OAAO;oBACN,QAAQ;oBACR,UAAU,EAAE,UAAU,IAAI,SAAS;oBACnC,OAAO,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,QAAQ;iBACtC,CAAC;YAAA,CACF,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC;QAAA,CACnB,EACD,SAAS,CACT,CACD;QAEF,MAAM,CAAC,OAAe,EAAE,IAAmC,EAAQ;YAClE,uCAAuC;YACvC,MAAM,CAAC;gBACN,IAAI,EAAE,sBAAsB;gBAC5B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,MAAM,EAAE,QAAQ;gBAChB,OAAO;gBACP,UAAU,EAAE,IAAI;aACS,CAAC,CAAC;QAAA,CAC5B;QAED,eAAe,GAAe;YAC7B,+CAA+C;YAC/C,OAAO,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC;QAAA,CAChB;QAED,SAAS,CAAC,GAAW,EAAE,IAAwB,EAAQ;YACtD,uCAAuC;YACvC,MAAM,CAAC;gBACN,IAAI,EAAE,sBAAsB;gBAC5B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,GAAG;gBACd,UAAU,EAAE,IAAI;aACS,CAAC,CAAC;QAAA,CAC5B;QAED,iBAAiB,CAAC,QAAiB,EAAQ;YAC1C,yEAAyE;QAD9B,CAE3C;QAED,SAAS,CAAC,GAAW,EAAE,OAAgB,EAAE,OAAgC,EAAQ;YAChF,yEAAyE;YACzE,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,MAAM,CAAC;oBACN,IAAI,EAAE,sBAAsB;oBAC5B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;oBACvB,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,OAA+B;oBAC5C,eAAe,EAAE,OAAO,EAAE,SAAS;iBACV,CAAC,CAAC;YAC7B,CAAC;YACD,4EAA4E;QAD3E,CAED;QAED,SAAS,CAAC,QAAiB,EAAQ;YAClC,gEAAgE;QAD7B,CAEnC;QAED,SAAS,CAAC,QAAiB,EAAQ;YAClC,gEAAgE;QAD7B,CAEnC;QAED,QAAQ,CAAC,KAAa,EAAQ;YAC7B,8DAA8D;YAC9D,MAAM,CAAC;gBACN,IAAI,EAAE,sBAAsB;gBAC5B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,MAAM,EAAE,UAAU;gBAClB,KAAK;aACoB,CAAC,CAAC;QAAA,CAC5B;QAED,KAAK,CAAC,MAAM,GAAG;YACd,sCAAsC;YACtC,OAAO,SAAkB,CAAC;QAAA,CAC1B;QAED,aAAa,CAAC,IAAY,EAAQ;YACjC,yEAAyE;YACzE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAAA,CACzB;QAED,aAAa,CAAC,IAAY,EAAQ;YACjC,sDAAsD;YACtD,MAAM,CAAC;gBACN,IAAI,EAAE,sBAAsB;gBAC5B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,MAAM,EAAE,iBAAiB;gBACzB,IAAI;aACqB,CAAC,CAAC;QAAA,CAC5B;QAED,aAAa,GAAW;YACvB,iDAAiD;YACjD,mDAAmD;YACnD,OAAO,EAAE,CAAC;QAAA,CACV;QAED,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAC1B,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5F,WAAW,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS;YAC5C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,IAAI,QAAQ;gBACpB,CAAC,CAAC,QAAQ,CAAC,KAAK;gBAChB,CAAC,CAAC,SAAS,CACb;QAEF,kBAAkB,GAAS;YAC1B,qDAAqD;QAD1B,CAE3B;QAED,IAAI,KAAK,GAAG;YACX,OAAO,KAAK,CAAC;QAAA,CACb;QAED,YAAY,GAAG;YACd,OAAO,EAAE,CAAC;QAAA,CACV;QAED,QAAQ,CAAC,KAAa,EAAE;YACvB,OAAO,SAAS,CAAC;QAAA,CACjB;QAED,QAAQ,CAAC,MAAsB,EAAE;YAChC,4CAA4C;YAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;QAAA,CAC9E;QAED,gBAAgB,GAAG;YAClB,oDAAoD;YACpD,OAAO,KAAK,CAAC;QAAA,CACb;QAED,gBAAgB,CAAC,SAAkB,EAAE;YACpC,oDAAoD;QADf,CAErC;KACD,CAAC;AAAA,CACF;AAED,4DAA4D;AAC5D,MAAM,UAAU,iCAAiC,CAChD,wBAAiE,EAC1D;IACP,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;AAAA,CACD;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAqB,EAAE,oBAA6B,EAAkB;IACtG,cAAc,EAAE,CAAC;IAEjB,MAAM,MAAM,GAAG,CAAC,GAAiD,EAAE,EAAE,CAAC;QACrE,cAAc,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IAAA,CACvC,CAAC;IAEF,MAAM,OAAO,GAAG,CACf,EAAsB,EACtB,OAAU,EACV,IAAoB,EACN,EAAE,CAAC;QACjB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAiB,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAiB,CAAC;IAAA,CAC7E,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAsB,EAAE,OAAe,EAAE,OAAe,EAAe,EAAE,CAAC;QACxF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAAA,CACzE,CAAC;IAEF,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,eAAe,GAAG,iCAAiC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CACZ,oBAAoB,eAAe,uBAAuB,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CACtG,CAAC;QACH,CAAC;IACF,CAAC;IAED,uEAAuE;IACvE,4EAA4E;IAC5E,oDAAoD;IACpD,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAsC,CAAC;IAE/E,wBAAwB;IACxB,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,gBAA8C,CAAC;IACnD,IAAI,sBAAsB,GAAG,KAAK,CAAC;IAEnC,sEAAsE;IACtE,uFAAuF;IACvF,MAAM,wBAAwB,GAAG,GAAuB,EAAE,CACzD,2BAA2B,CAAC,MAAM,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3F,8CAA8C;IAC9C,MAAM,OAAO,CAAC,cAAc,CAAC;QAC5B,SAAS,EAAE,wBAAwB,EAAE;QACrC,qBAAqB,EAAE;YACtB,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;YAC9C,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC9B,8DAA8D;gBAC9D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAClD,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;YAAA,CAC/B;YACD,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;YAAA,CACvC;YACD,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;oBACnD,SAAS,EAAE,OAAO,EAAE,SAAS;oBAC7B,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;oBAC/C,mBAAmB,EAAE,OAAO,EAAE,mBAAmB;oBACjD,KAAK,EAAE,OAAO,EAAE,KAAK;iBACrB,CAAC,CAAC;gBACH,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;YAAA,CACvC;YACD,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACzD,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;YAAA,CAC/B;YACD,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YAAA,CACvB;SACD;QACD,eAAe,EAAE,GAAG,EAAE,CAAC;YACtB,iBAAiB,GAAG,IAAI,CAAC;QAAA,CACzB;QACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAAA,CAC1G;KACD,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK,IAAqB,EAAE,CAAC;QACjD,gBAAgB,KAAK,IAAI,gBAAgB,EAAE,CAAC;QAC5C,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC7B,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;YACjC,sBAAsB,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,OAAO,gBAAgB,CAAC,YAAY,EAAE,CAAC;IAAA,CACvC,CAAC;IAEF,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;IACvE,MAAM,iBAAiB,GACtB,CAAC,OAAO,CAAC,WAAW,IAAI,gBAAgB,EAAE,OAAO,KAAK,KAAK;QAC1D,CAAC,CAAC,IAAI,iBAAiB,CAAC,gBAAgB,EAAE;YACxC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAC,CAAC;YAClB,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC1B,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;YAAA,CACD;YACD,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW;YACzC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ;YACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK;YAC7B,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa;YAC7C,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ;YAC1C,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC,IAAI,CAAC;YACtF,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;YAClC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG;YACjB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CACZ,2CAA2C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7F,CAAC;YAAA,CACF;SACD,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,yEAAyE;IACzE,+DAA+D;IAC/D,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,+EAA6E;IAC7E,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC;IAErD,kCAAkC;IAClC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5B,IAAI,iBAAiB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACzC,iBAAiB,CAAC,SAAS,CAAC;oBAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACpB,CAAC,CAAC;YACJ,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACzC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;QACF,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAA2C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAAA,CACtG,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,aAAa,GAAG,KAAK,EAAE,OAAmB,EAAwB,EAAE,CAAC;QAC1E,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QAEtB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,oEAAoE;YACpE,YAAY;YACZ,oEAAoE;YAEpE,KAAK,QAAQ,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,SAAS;oBAAE,OAAO,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACrD,mCAAmC;gBACnC,kFAAkF;gBAClF,0EAA0E;gBAC1E,EAAE;gBACF,uEAAuE;gBACvE,yEAAyE;gBACzE,wEAAwE;gBACxE,wEAAwE;gBACxE,0EAAwE;gBACxE,mEAAmE;gBACnE,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC;gBACnD,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,MAAM,WAAW,GAAG,eAAe;oBAClC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;wBACnC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;4BAAE,aAAa,GAAG,IAAI,CAAC;oBAAA,CACvD,CAAC;oBACH,CAAC,CAAC,SAAS,CAAC;gBACb,OAAO;qBACL,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;oBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;oBAC5C,MAAM,EAAE,KAAK;iBACb,CAAC;qBACD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACX,WAAW,EAAE,EAAE,CAAC;oBAChB,IAAI,eAAe,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvC,MAAM,CACL,KAAK,CACJ,EAAE,EACF,QAAQ,EACR,2GAA2G,CAC3G,CACD,CAAC;oBACH,CAAC;gBAAA,CACD,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACb,WAAW,EAAE,EAAE,CAAC;oBAChB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAA,CACvC,CAAC,CAAC;gBACJ,OAAO,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,KAAK,OAAO,EAAE,CAAC;gBACd,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,SAAS;oBAAE,OAAO,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACpD,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACrD,OAAO,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7B,CAAC;YAED,KAAK,WAAW,EAAE,CAAC;gBAClB,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,SAAS;oBAAE,OAAO,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;gBACxD,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YACjC,CAAC;YAED,KAAK,OAAO,EAAE,CAAC;gBACd,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;gBAC/E,qBAAqB,EAAE,CAAC;gBACxB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7B,CAAC;YAED,KAAK,aAAa,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7F,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvD,OAAO,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAClD,CAAC;YAED,KAAK,QAAQ,EAAE,CAAC;gBACf,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,KAAK,OAAO,EAAE,CAAC;gBACd,OAAO,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1E,CAAC;YAED,oEAAoE;YACpE,QAAQ;YACR,oEAAoE;YAEpE,KAAK,WAAW,EAAE,CAAC;gBAClB,OAAO,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC;YAChF,CAAC;YAED,KAAK,wBAAwB,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAyB;oBAClC,UAAU;oBACV,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,oBAAoB,CAAC;oBACpD,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC;oBAC7C,gBAAgB,EAAE,mBAAmB,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC;oBACrE,0BAA0B,EAAE,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;iBAChG,CAAC;gBACF,OAAO,OAAO,CAAC,EAAE,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,KAAK,eAAe,EAAE,CAAC;gBACtB,OAAO,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,KAAK,gBAAgB,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACjG,CAAC;YAED,KAAK,gBAAgB,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,oEAAoE;YACpE,QAAQ;YACR,oEAAoE;YAEpE,KAAK,WAAW,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC9F,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,oBAAoB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,CAAC;gBACD,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,KAAK,eAAe,EAAE,CAAC;gBACtB,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;gBAC3C,CAAC;gBACD,OAAO,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE;oBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACvB,CAAC,CAAC;YACJ,CAAC;YAED,KAAK,aAAa,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,OAAO,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YAED,KAAK,sBAAsB,EAAE,CAAC;gBAC7B,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;gBAC1D,OAAO,OAAO,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,KAAK,aAAa,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,wCAAwC,CAAC,CAAC;gBAC3E,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,6CAA6C,CAAC,CAAC;gBAChF,CAAC;gBACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;gBAC3E,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACjD,OAAO,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,CAAC;YAED,KAAK,cAAc,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,wCAAwC,CAAC,CAAC;gBAC5E,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,6CAA6C,CAAC,CAAC;gBACjF,CAAC;gBACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;gBAC3E,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC/B,OAAO,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,sCAAsC,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAClD,OAAO,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,oEAAoE;YACpE,WAAW;YACX,oEAAoE;YAEpE,KAAK,oBAAoB,EAAE,CAAC;gBAC3B,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,OAAO,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAC1C,CAAC;YAED,KAAK,sBAAsB,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,OAAO,CAAC,EAAE,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;gBAClD,CAAC;gBACD,OAAO,OAAO,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,oEAAoE;YACpE,cAAc;YACd,oEAAoE;YAEpE,KAAK,mBAAmB,EAAE,CAAC;gBAC1B,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,OAAO,OAAO,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;YACzC,CAAC;YAED,KAAK,oBAAoB,EAAE,CAAC;gBAC3B,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,OAAO,OAAO,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAC1C,CAAC;YAED,KAAK,sBAAsB,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC,EAAE,EAAE,sBAAsB,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/E,CAAC;YAED,KAAK,wBAAwB,EAAE,CAAC;gBAC/B,OAAO,OAAO,CAAC,EAAE,EAAE,wBAAwB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,oEAAoE;YACpE,aAAa;YACb,oEAAoE;YAEpE,KAAK,SAAS,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACjE,OAAO,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;YAED,KAAK,qBAAqB,EAAE,CAAC;gBAC5B,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClD,OAAO,OAAO,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAC3C,CAAC;YAED,KAAK,kBAAkB,EAAE,CAAC;gBACzB,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACxC,CAAC;YAED,oEAAoE;YACpE,QAAQ;YACR,oEAAoE;YAEpE,KAAK,gBAAgB,EAAE,CAAC;gBACvB,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7C,OAAO,OAAO,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACtC,CAAC;YAED,KAAK,aAAa,EAAE,CAAC;gBACpB,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;YACnC,CAAC;YAED,oEAAoE;YACpE,OAAO;YACP,oEAAoE;YAEpE,KAAK,MAAM,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC1D,OAAO,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACpC,CAAC;YAED,KAAK,YAAY,EAAE,CAAC;gBACnB,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAClC,CAAC;YAED,oEAAoE;YACpE,UAAU;YACV,oEAAoE;YAEpE,KAAK,mBAAmB,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAC,EAAE,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;YAED,KAAK,uBAAuB,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC,EAAE,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/E,CAAC;YAED,KAAK,aAAa,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC5D,OAAO,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,KAAK,cAAc,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;gBACtE,OAAO,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,KAAK,gBAAgB,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBACtE,OAAO,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,KAAK,gBAAgB,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBACtF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBAChB,OAAO,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC;gBACD,OAAO,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,KAAK,MAAM,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnD,OAAO,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACxF,CAAC;YAED,KAAK,mBAAmB,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBAC/C,OAAO,OAAO,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,KAAK,UAAU,EAAE,CAAC;gBACjB,OAAO,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;YACvE,CAAC;YAED,KAAK,eAAe,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;wBAClE,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;wBAC9C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;wBAChD,KAAK,EAAE,OAAO,CAAC,KAAK;qBACpB,CAAC,CAAC;oBACH,OAAO,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACZ,OAAO,KAAK,CAAC,EAAE,EAAE,eAAe,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/E,CAAC;YACF,CAAC;YAED,KAAK,yBAAyB,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;gBAC5C,OAAO,OAAO,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,KAAK,kBAAkB,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,OAAO,KAAK,CAAC,EAAE,EAAE,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;gBACtE,CAAC;gBACD,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,OAAO,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACxC,CAAC;YAED,oEAAoE;YACpE,WAAW;YACX,oEAAoE;YAEpE,KAAK,cAAc,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,oEAAoE;YACpE,sEAAsE;YACtE,oEAAoE;YAEpE,oEAAoE;YACpE,kBAAkB;YAClB,oEAAoE;YAEpE,KAAK,eAAe,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;gBAC1D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAC5D,OAAO,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC;YAED,KAAK,mBAAmB,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,MAAM,qBAAqB,EAAE,EAAE,CAAC,CAAC;YACtF,CAAC;YAED,oEAAoE;YACpE,oBAAoB;YACpB,oEAAoE;YAEpE,KAAK,wBAAwB,EAAE,CAAC;gBAC/B,OAAO,OAAO,CAAC,EAAE,EAAE,wBAAwB,EAAE;oBAC5C,MAAM,EAAE,mBAAmB,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC;iBAC3D,CAAC,CAAC;YACJ,CAAC;YAED,KAAK,wBAAwB,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,SAAS;oBAAE,OAAO,KAAK,CAAC,EAAE,EAAE,wBAAwB,EAAE,SAAS,CAAC,CAAC;gBACrE,MAAM,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7D,OAAO,OAAO,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAC9C,CAAC;YAED,KAAK,8BAA8B,EAAE,CAAC;gBACrC,OAAO,OAAO,CACb,EAAE,EACF,8BAA8B,EAC9B,MAAM,iCAAiC,CAAC,OAAO,CAAC,OAAO,CAAC,CACxD,CAAC;YACH,CAAC;YAED,KAAK,kBAAkB,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC,EAAE,EAAE,kBAAkB,EAAE;oBACtC,UAAU,EAAE,oBAAoB,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;iBACjE,CAAC,CAAC;YACJ,CAAC;YAED,oEAAoE;YACpE,iCAAiC;YACjC,oEAAoE;YAEpE,KAAK,cAAc,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC5F,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3G,CAAC;YAED,KAAK,cAAc,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACzG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBAChB,OAAO,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,OAAO,CACb,EAAE,EACF,cAAc,EACd,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAC5C,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;oBACnD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAClB,CAAC;YACH,CAAC;YAED,KAAK,wBAAwB,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjF,OAAO,MAAM,CAAC,EAAE;oBACf,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,wBAAwB,EAAE,MAAM,CAAC,UAAU,CAAC;oBAC1D,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,wBAAwB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;YAED,KAAK,sBAAsB,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC5G,OAAO,MAAM,CAAC,EAAE;oBACf,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC;oBACpD,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACpD,CAAC;YAED,KAAK,wBAAwB,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAC9C,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,aAAa,CACrB,CAAC;gBACF,OAAO,MAAM,CAAC,EAAE;oBACf,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC;oBACtD,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,wBAAwB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;YAED,KAAK,+BAA+B,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,gCAAgC,CACpD,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,aAAa,CACrB,CAAC;gBACF,OAAO,MAAM,CAAC,EAAE;oBACf,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;oBAC7D,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,+BAA+B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7D,CAAC;YAED,oEAAoE;YACpE,UAAU;YACV,oEAAoE;YAEpE,KAAK,aAAa,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,KAAK,cAAc,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,SAAS,CAAC;gBACT,MAAM,cAAc,GAAG,OAAwC,CAAC;gBAChE,OAAO,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,EAAE,oBAAoB,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;YACjG,CAAC;QACF,CAAC;IAAA,CACD,CAAC;IAEF;;;OAGG;IACH,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC;IAE3B,KAAK,UAAU,QAAQ,GAAmB;QACzC,iCAAiC,CAAC,wBAAwB,CAAC,CAAC;QAE5D,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;QAC9C,IAAI,aAAa,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACpD,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,gBAAgB,EAAE,OAAO,EAAE,CAAC;QAC5B,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAA,CAChB;IAED,KAAK,UAAU,sBAAsB,GAAkB;QACtD,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,MAAM,QAAQ,EAAE,CAAC;IAAA,CACjB;IAED,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE,CAAC;QAC/C,IAAI,MAAW,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO;QACR,CAAC;QAED,IAAI,CAAC;YACJ,gCAAgC;YAChC,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBAC7C,MAAM,QAAQ,GAAG,MAAgC,CAAC;gBAClD,MAAM,OAAO,GAAG,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC1D,IAAI,OAAO,EAAE,CAAC;oBACb,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC7C,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;gBACD,OAAO;YACR,CAAC;YAED,0BAA0B;YAC1B,MAAM,OAAO,GAAG,MAAoB,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9C,yEAAyE;YACzE,4EAA4E;YAC5E,gEAAgE;YAChE,IAAI,OAAO,CAAC,IAAI,KAAK,wBAAwB,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,QAAsF,CAAC;gBACxG,MAAM,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEjB,8DAA8D;YAC9D,MAAM,sBAAsB,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACjB,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IAAA,CACD,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;QACxB,KAAK,QAAQ,EAAE,CAAC;IAAA,CAChB,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;QAC/B,KAAK,QAAQ,EAAE,CAAC;IAAA,CAChB,CAAC,CAAC;IAEH,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAClE,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC;QAAA,CAC3B,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAAA,CACrC,CAAC;IAAA,CACF,CAAC,EAAE,CAAC;IAEL,6BAA6B;IAC7B,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;AAAA,CAC7B","sourcesContent":["/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: RpcEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport * as crypto from \"node:crypto\";\nimport { basename } from \"node:path\";\nimport { isValidThinkingLevel, VALID_THINKING_LEVELS } from \"../../cli/args.js\";\nimport { VERSION } from \"../../config.js\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport {\n\tcanonicalizeTrustedRoots,\n\tmatchContextTrust,\n\tvalidateTrustedContextFolder,\n\tvalidateTrustedContextFolders,\n} from \"../../core/context-trust.js\";\nimport { DailyCostTracker } from \"../../core/daily-cost-tracker.js\";\nimport {\n\tacquireDreamLock,\n\tbuildDreamPrompt,\n\tcleanupDreamTmpDirs,\n\tparseDreamCommand,\n\tperformDreamBackup,\n\tpruneOldBackups,\n\tresolveDreamContext,\n\tvalidateArchivePath,\n\tvalidateMemoryLinks,\n} from \"../../core/dream.js\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.js\";\nimport { getGitBranch } from \"../../core/git-branch.js\";\nimport type { ModelRegistry } from \"../../core/model-registry.js\";\nimport { parseModelPattern, resolveModelScopePatterns } from \"../../core/model-resolver.js\";\nimport { takeOverStdout, writeRawStdout } from \"../../core/output-guard.js\";\nimport type { SessionInfo, SessionTreeNode } from \"../../core/session-manager.js\";\nimport { SessionManager } from \"../../core/session-manager.js\";\nimport type { SettingsManager, TransportSetting } from \"../../core/settings-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS, parseBuiltinSlashCommand } from \"../../core/slash-commands.js\";\nimport { TabTitleGenerator } from \"../../core/tab-title.js\";\nimport { validateThinkingLevelForModel } from \"../../core/thinking.js\";\nimport { resolveToCwd } from \"../../core/tools/path-utils.js\";\nimport {\n\ttype BackgroundAgentInfo,\n\tdiscoverAgentTypes,\n\tgetBackgroundAgentPendingSteering,\n\tgetBackgroundAgents,\n\trehydrateBackgroundAgentsFromDisk,\n\tsteerBackgroundAgent,\n} from \"../../core/tools/subagent.js\";\nimport { type Theme, theme } from \"../interactive/theme/theme.js\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.js\";\nimport { projectDashboardRpcEvent } from \"./rpc-event-projection.js\";\nimport type {\n\tRpcAgentTypeInfo,\n\tRpcBackgroundAgentInfo,\n\tRpcBlockingExtensionUIRequest,\n\tRpcCommand,\n\tRpcContextTrustEvaluation,\n\tRpcContextTrustMutationResult,\n\tRpcDashboardSnapshot,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcPendingMessages,\n\tRpcPerformanceStats,\n\tRpcResources,\n\tRpcResponse,\n\tRpcScopedModel,\n\tRpcSessionInfo,\n\tRpcSessionState,\n\tRpcSettingsSnapshot,\n\tRpcSettingsUpdate,\n\tRpcSlashCommand,\n\tRpcTreeNode,\n\tRpcTrustedFolderRemovalResult,\n} from \"./rpc-types.js\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcDashboardSnapshot,\n\tRpcDashboardSnapshotBarrierEvent,\n\tRpcEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcResponse,\n\tRpcSessionState,\n} from \"./rpc-types.js\";\n\n/**\n * Map a core {@link SessionInfo} to the RPC DTO, converting Date fields to ISO strings.\n * Shared by the `list_sessions` and `list_all_sessions` handlers so their shapes cannot drift.\n */\nexport function toRpcSessionInfo(s: SessionInfo): RpcSessionInfo {\n\treturn {\n\t\tpath: s.path,\n\t\tid: s.id,\n\t\tcwd: s.cwd,\n\t\tname: s.name,\n\t\tcreated: s.created.toISOString(),\n\t\tmodified: s.modified.toISOString(),\n\t\tmessageCount: s.messageCount,\n\t\tfirstMessage: s.firstMessage,\n\t};\n}\n\nexport function getPerformanceStatsData(session: Pick<AgentSession, \"getPerformanceTracker\">): RpcPerformanceStats {\n\tconst tracker = session.getPerformanceTracker();\n\treturn { models: tracker.getAllModelSummaries() };\n}\n\nexport function getScopedModelsForRpc(session: Pick<AgentSession, \"scopedModels\">): RpcScopedModel[] {\n\treturn session.scopedModels.map(({ model, thinkingLevel }) => ({\n\t\tprovider: model.provider,\n\t\tid: model.id,\n\t\tname: model.name,\n\t\treasoning: model.reasoning,\n\t\tthinkingLevel,\n\t}));\n}\n\nexport function getResourcesForRpc(\n\tsession: Pick<AgentSession, \"resourceLoader\" | \"getFilteredSkills\" | \"promptTemplates\">,\n): RpcResources {\n\tconst extensionsResult = session.resourceLoader.getExtensions();\n\treturn {\n\t\tcontextFiles: session.resourceLoader.getAgentsFiles().agentsFiles.map((file) => ({ path: file.path })),\n\t\tskills: session.getFilteredSkills().map((skill) => ({ name: skill.name, description: skill.description })),\n\t\textensions: extensionsResult.extensions.map((extension) => ({\n\t\t\tpath: extension.path,\n\t\t\tname: extension.sourceInfo.source || basename(extension.path),\n\t\t})),\n\t\tpromptTemplates: session.promptTemplates.map((template) => ({\n\t\t\tname: template.name,\n\t\t\tdescription: template.description,\n\t\t})),\n\t\tsystemPromptPresent:\n\t\t\tsession.resourceLoader.getSystemPrompt() !== undefined ||\n\t\t\tsession.resourceLoader.getAppendSystemPrompt().length > 0,\n\t};\n}\n\nexport function getCommandsForRpc(\n\tsession: Pick<AgentSession, \"extensionRunner\" | \"promptTemplates\" | \"getFilteredSkills\">,\n): RpcSlashCommand[] {\n\tconst commands = new Map<string, RpcSlashCommand>();\n\tfor (const command of session.extensionRunner?.getRegisteredCommands() ?? []) {\n\t\tcommands.set(command.invocationName, {\n\t\t\tname: command.invocationName,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"extension\",\n\t\t\tsourceInfo: command.sourceInfo,\n\t\t});\n\t}\n\tfor (const template of session.promptTemplates) {\n\t\tif (!commands.has(template.name)) {\n\t\t\tcommands.set(template.name, {\n\t\t\t\tname: template.name,\n\t\t\t\tdescription: template.description,\n\t\t\t\tsource: \"prompt\",\n\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const skill of session.getFilteredSkills()) {\n\t\tconst name = `skill:${skill.name}`;\n\t\tif (!commands.has(name)) {\n\t\t\tcommands.set(name, { name, description: skill.description, source: \"skill\", sourceInfo: skill.sourceInfo });\n\t\t}\n\t}\n\t// Built-ins deliberately win collisions, matching interactive autocomplete and\n\t// ensuring a colliding resource can never make built-in text reach the model.\n\tfor (const command of BUILTIN_SLASH_COMMANDS) {\n\t\tcommands.set(command.name, {\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"builtin\",\n\t\t\tdashboard: command.dashboard !== false,\n\t\t});\n\t}\n\treturn [...commands.values()];\n}\n\nexport function getBuiltinPromptRejection(message: string): string | undefined {\n\tconst parsed = parseBuiltinSlashCommand(message);\n\treturn parsed\n\t\t? `Built-in slash command /${parsed.command.name} must be handled by the RPC client; it was not sent to the model.`\n\t\t: undefined;\n}\n\nasync function runDreamForRpc(session: AgentSession, args = \"\"): Promise<{ message: string }> {\n\tconst command = parseDreamCommand(`/dream${args ? ` ${args}` : \"\"}`);\n\tif (command.type === \"showBackup\") {\n\t\treturn { message: `Dream backup path: ${session.settingsManager.getDreamArchivePath()}` };\n\t}\n\tif (command.type === \"setBackup\") {\n\t\tconst absolutePath = resolveToCwd(command.path, session.sessionManager.getCwd());\n\t\tconst context = await resolveDreamContext(session.settingsManager);\n\t\tvalidateArchivePath(absolutePath, [\n\t\t\tcontext.globalMemoryDir,\n\t\t\t...context.projectMemoryDirs,\n\t\t\t...context.claudeMemoryDirs,\n\t\t]);\n\t\tif (session.settingsManager.hasGlobalSettingsLoadError()) {\n\t\t\tthrow new Error(\"Cannot write dream backup path: the global settings file failed to load\");\n\t\t}\n\t\tsession.settingsManager.drainErrors();\n\t\tsession.settingsManager.setDreamArchivePath(absolutePath);\n\t\ttry {\n\t\t\tawait session.settingsManager.flush();\n\t\t} catch (error) {\n\t\t\tsession.settingsManager.reload();\n\t\t\tthrow error;\n\t\t}\n\t\tconst writeErrors = session.settingsManager.drainErrors();\n\t\tif (writeErrors.length > 0) {\n\t\t\tsession.settingsManager.reload();\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to persist dream backup path: ${writeErrors.map((entry) => `${entry.scope}: ${entry.error.message}`).join(\"; \")}`,\n\t\t\t);\n\t\t}\n\t\treturn { message: `Dream backup path set to: ${absolutePath}` };\n\t}\n\n\tlet releaseLock: (() => void) | undefined;\n\tlet context: Awaited<ReturnType<typeof resolveDreamContext>> | undefined;\n\ttry {\n\t\treleaseLock = await acquireDreamLock();\n\t\tcontext = await resolveDreamContext(session.settingsManager);\n\t\tvalidateArchivePath(context.archivePath, [\n\t\t\tcontext.globalMemoryDir,\n\t\t\t...context.projectMemoryDirs,\n\t\t\t...context.claudeMemoryDirs,\n\t\t]);\n\t\tconst backup = await performDreamBackup(context);\n\t\tif (!backup.verified) {\n\t\t\tthrow new Error(`Backup verification failed; check ${backup.backupPath}`);\n\t\t}\n\t\tawait session.prompt(buildDreamPrompt(context, backup), { source: \"rpc\" });\n\t\tconst links = validateMemoryLinks([context.globalMemoryDir, ...context.projectMemoryDirs]);\n\t\tawait pruneOldBackups(context.archivePath);\n\t\treturn {\n\t\t\tmessage: links.valid\n\t\t\t\t? `Dream completed. Backup: ${backup.backupPath}`\n\t\t\t\t: `Dream completed with ${links.brokenLinks.length} broken memory link(s). Backup: ${backup.backupPath}`,\n\t\t};\n\t} finally {\n\t\treleaseLock?.();\n\t\tif (context) cleanupDreamTmpDirs([context.globalMemoryDir, ...context.projectMemoryDirs]);\n\t}\n}\n\nexport function getPendingMessagesForRpc(\n\tsession: Pick<\n\t\tAgentSession,\n\t\t\"getSteeringMessages\" | \"getFollowUpMessages\" | \"getSteeringMessagePayloads\" | \"getFollowUpMessagePayloads\"\n\t>,\n): RpcPendingMessages {\n\treturn {\n\t\tsteering: [...session.getSteeringMessages()],\n\t\tfollowUp: [...session.getFollowUpMessages()],\n\t\tsteeringMessages: session.getSteeringMessagePayloads().map((message) => ({\n\t\t\ttext: message.text,\n\t\t\timages: message.images ? [...message.images] : undefined,\n\t\t})),\n\t\tfollowUpMessages: session.getFollowUpMessagePayloads().map((message) => ({\n\t\t\ttext: message.text,\n\t\t\timages: message.images ? [...message.images] : undefined,\n\t\t})),\n\t};\n}\n\nexport function getStateForRpc(session: AgentSession, modelFallbackMessage?: string): RpcSessionState {\n\treturn {\n\t\tmodel: session.model,\n\t\tscopedModels: getScopedModelsForRpc(session),\n\t\ttasks: session.tasks.map((task) => ({ ...task })),\n\t\tusingSubscription: session.model ? session.modelRegistry.isUsingOAuth(session.model) : false,\n\t\tthinkingLevel: session.thinkingLevel,\n\t\tavailableThinkingLevels: session.getAvailableThinkingLevels(),\n\t\tisStreaming: session.isStreaming,\n\t\tisRetrying: session.isRetrying,\n\t\tretryAttempt: session.retryAttempt,\n\t\tisCompacting: session.isCompacting,\n\t\tsteeringMode: session.steeringMode,\n\t\tfollowUpMode: session.followUpMode,\n\t\tsessionFile: session.sessionFile,\n\t\tsessionId: session.sessionId,\n\t\tsessionName: session.sessionName,\n\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\tmessageCount: session.messages.length,\n\t\tpendingMessageCount: session.pendingMessageCount,\n\t\tcontextUsage: session.getContextUsage(),\n\t\tmodelFallbackMessage,\n\t};\n}\n\n/**\n * Dashboard transcript snapshots use persisted branch context whenever the\n * runtime is not streaming so failed attempts removed from the next provider\n * request remain visible during retry backoff and after recovery. The snapshot\n * state carries retry activity separately, preventing those historical errors\n * from being mistaken for terminal failures.\n */\nexport function getDashboardMessagesForRpc(session: AgentSession) {\n\treturn [...(session.isStreaming ? session.messages : session.sessionManager.buildSessionContext().messages)];\n}\n\n/**\n * Handle the `delete_session` RPC command: wires the active session into the core\n * {@link SessionManager.deleteSession} guard and maps the result to a discriminated\n * union the handler serializes. Extracted (like {@link getPerformanceStatsData}) so the guard\n * wiring is unit-testable without a live RPC session. Note: the authoritative active-session\n * guard lives in core — this passes the active path through; it does not re-implement it.\n * Uses the same unrestricted path-based addressing as `switch_session` (no containment guard —\n * see PR #315 discussion).\n */\nexport async function deleteSessionForRpc(\n\tsessionManager: Pick<SessionManager, \"getSessionFile\">,\n\tsessionPath: string,\n): Promise<{ ok: true; method: \"trash\" | \"unlink\" } | { ok: false; error: string }> {\n\tconst activePath = sessionManager.getSessionFile();\n\tconst result = await SessionManager.deleteSession(sessionPath, {\n\t\tactiveSessionPath: activePath,\n\t});\n\tif (!result.ok) {\n\t\treturn { ok: false, error: result.error ?? \"Unknown deletion error\" };\n\t}\n\treturn { ok: true, method: result.method };\n}\n\n/** Handle the `list_all_sessions` RPC command: list every project's sessions as RPC DTOs. */\nexport async function listAllSessionsForRpc(): Promise<RpcSessionInfo[]> {\n\tconst sessions = await SessionManager.listAll();\n\treturn sessions.map(toRpcSessionInfo);\n}\n\n/**\n * Map a {@link BackgroundAgentInfo} registry entry to the RPC DTO, converting the\n * epoch-ms timestamp to an ISO string. Shared shape guard for `list_background_agents`.\n */\nexport function toRpcBackgroundAgentInfo(a: Readonly<BackgroundAgentInfo>): RpcBackgroundAgentInfo {\n\treturn {\n\t\tagentId: a.agentId,\n\t\tagentType: a.agentType,\n\t\ttaskSummary: a.taskSummary,\n\t\tstartedAt: new Date(a.startedAt).toISOString(),\n\t\tstatus: a.status,\n\t\tsessionDir: a.sessionDir,\n\t\tsessionFile: a.sessionFile,\n\t\tcwd: a.cwd,\n\t\tarbitrations: a.arbitrations?.map((record) => structuredClone(record)),\n\t};\n}\n\n/** Discover available subagent types for RPC clients, sorted by display name. */\nexport function listAgentTypesForRpc(cwd: string): RpcAgentTypeInfo[] {\n\treturn [...discoverAgentTypes(cwd).values()]\n\t\t.map(({ name, description }) => ({ name, description }))\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/** The slice of SettingsManager the settings RPC handlers need. */\ntype SettingsReader = Pick<\n\tSettingsManager,\n\t| \"getDefaultProvider\"\n\t| \"getDefaultModel\"\n\t| \"getDefaultThinkingLevel\"\n\t| \"getSteeringMode\"\n\t| \"getFollowUpMode\"\n\t| \"getCompactionEnabled\"\n\t| \"getContinueAfterAutoCompaction\"\n\t| \"getRetryEnabled\"\n\t| \"getMaxConcurrentSubagents\"\n\t| \"getImageAutoResize\"\n\t| \"getBlockImages\"\n\t| \"getEnableSkillCommands\"\n\t| \"getGlobalContextTrustPolicy\"\n\t| \"getConfiguredTrustedContextFolders\"\n\t| \"getTransport\"\n\t| \"getHideThinkingBlock\"\n\t| \"getAgentModels\"\n\t| \"getGlobalSubagentArbiterSettings\"\n\t| \"getTabTitleSettings\"\n\t| \"getEnabledModels\"\n\t| \"hasProjectEnabledModelsOverride\"\n>;\n\ntype SettingsRefresher = SettingsReader &\n\tPick<\n\t\tSettingsManager,\n\t\t\"reload\" | \"flush\" | \"drainErrors\" | \"hasGlobalSettingsLoadError\" | \"hasProjectSettingsLoadError\"\n\t>;\n\ntype SettingsWriter = SettingsRefresher &\n\tPick<\n\t\tSettingsManager,\n\t\t| \"setDefaultModelAndProvider\"\n\t\t| \"setDefaultThinkingLevel\"\n\t\t| \"setSteeringMode\"\n\t\t| \"setFollowUpMode\"\n\t\t| \"setCompactionEnabled\"\n\t\t| \"setContinueAfterAutoCompaction\"\n\t\t| \"setRetryEnabled\"\n\t\t| \"setMaxConcurrentSubagents\"\n\t\t| \"setImageAutoResize\"\n\t\t| \"setBlockImages\"\n\t\t| \"setEnableSkillCommands\"\n\t\t| \"setAutoLoadNestedContext\"\n\t\t| \"setTrustedContextFolders\"\n\t\t| \"removeTrustedContextFolder\"\n\t\t| \"setContextTrust\"\n\t\t| \"setTransport\"\n\t\t| \"setHideThinkingBlock\"\n\t\t| \"setAgentModelsForAgent\"\n\t\t| \"removeAgentModelsForAgent\"\n\t\t| \"hasProjectAgentModelOverride\"\n\t\t| \"setGlobalSubagentArbiterSettings\"\n\t\t| \"setGlobalTabTitleSettings\"\n\t\t| \"setEnabledModels\"\n\t>;\n\n/**\n * Handle the `get_settings` RPC command: snapshot the persistent default settings.\n *\n * Most fields read the SettingsManager's merged (global + project) view. Context trust\n * fields intentionally read global settings only, so projects cannot expand the policy.\n * These seed fresh runtimes, NOT the live session state (`get_state` reports that). Extracted\n * (like {@link deleteSessionForRpc}) so it is unit-testable without a live RPC session.\n */\nexport function getSettingsForRpc(\n\tsettingsManager: SettingsReader,\n\tavailableModels: Awaited<ReturnType<ModelRegistry[\"getAvailable\"]>> = [],\n): RpcSettingsSnapshot {\n\tconst contextTrust = settingsManager.getGlobalContextTrustPolicy();\n\tconst configuredTrustedFolders = settingsManager.getConfiguredTrustedContextFolders();\n\tconst enabledModels = settingsManager.getEnabledModels();\n\tconst hasProjectEnabledModelsOverride = settingsManager.hasProjectEnabledModelsOverride();\n\tconst scopeResolution = resolveModelScopePatterns(enabledModels ?? [], availableModels);\n\treturn {\n\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\tdefaultModel: settingsManager.getDefaultModel(),\n\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\tcompactionEnabled: settingsManager.getCompactionEnabled(),\n\t\tcontinueAfterAutoCompaction: settingsManager.getContinueAfterAutoCompaction(),\n\t\tretryEnabled: settingsManager.getRetryEnabled(),\n\t\tmaxConcurrentSubagents: settingsManager.getMaxConcurrentSubagents(),\n\t\timageAutoResize: settingsManager.getImageAutoResize(),\n\t\tblockImages: settingsManager.getBlockImages(),\n\t\tenableSkillCommands: settingsManager.getEnableSkillCommands(),\n\t\tautoLoadNestedContext: contextTrust.unrestricted,\n\t\ttrustedContextFolders: configuredTrustedFolders,\n\t\teffectiveTrustedContextRoots: canonicalizeTrustedRoots(contextTrust.trustedFolders),\n\t\ttransport: settingsManager.getTransport(),\n\t\thideThinkingBlock: settingsManager.getHideThinkingBlock(),\n\t\tagentModels: settingsManager.getAgentModels(),\n\t\tsubagentArbiter: settingsManager.getGlobalSubagentArbiterSettings(),\n\t\ttabTitle: settingsManager.getTabTitleSettings(),\n\t\tenabledModels,\n\t\tresolvedScopedModels: scopeResolution.models.map(({ model, thinkingLevel }) => ({\n\t\t\tprovider: model.provider,\n\t\t\tid: model.id,\n\t\t\tname: model.name,\n\t\t\treasoning: model.reasoning,\n\t\t\t...(thinkingLevel !== undefined ? { thinkingLevel } : {}),\n\t\t})),\n\t\tscopeWarnings: scopeResolution.warnings,\n\t\thasProjectEnabledModelsOverride,\n\t\tenabledModelsSource: hasProjectEnabledModelsOverride\n\t\t\t? \"project\"\n\t\t\t: enabledModels === undefined\n\t\t\t\t? \"default\"\n\t\t\t\t: \"global\",\n\t};\n}\n\nasync function buildSettingsSnapshotForRpc(\n\tsettingsManager: SettingsReader,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<RpcSettingsSnapshot> {\n\treturn getSettingsForRpc(settingsManager, modelRegistry ? await modelRegistry.getAvailable() : []);\n}\n\nfunction formatSettingsErrors(errors: Array<{ scope: string; error: Error }>): string {\n\treturn errors.map((entry) => `${entry.scope}: ${entry.error.message}`).join(\"; \");\n}\n\n/**\n * Reload durable global and project settings before serving `get_settings`.\n *\n * The shared settings-operation lock prevents a refresh from discarding another RPC\n * settings operation's queued modifications. A failed queued write is returned before\n * reload so its in-memory changes remain intact rather than being replaced by stale disk\n * content. Reload failures leave SettingsManager's previous values in memory, therefore\n * they must be surfaced as an RPC error instead of producing a stale snapshot.\n */\nexport async function getFreshSettingsForRpc(\n\tsettingsManager: SettingsRefresher,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; settings: RpcSettingsSnapshot } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\ttry {\n\t\t\t// A runtime setter may have enqueued a write outside the RPC settings lock.\n\t\t\t// Waiting for SettingsManager's own queue protects that update from reload().\n\t\t\tawait settingsManager.flush();\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: `Failed to refresh settings: ${(error as Error).message}` };\n\t\t}\n\n\t\tconst writeErrors = settingsManager.drainErrors();\n\t\tif (writeErrors.length > 0) {\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: `Failed to refresh settings: pending settings write failed: ${formatSettingsErrors(writeErrors)}`,\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tsettingsManager.reload();\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: `Failed to reload settings: ${(error as Error).message}` };\n\t\t}\n\n\t\tconst loadErrors = settingsManager.drainErrors();\n\t\tif (\n\t\t\tloadErrors.length > 0 ||\n\t\t\tsettingsManager.hasGlobalSettingsLoadError() ||\n\t\t\tsettingsManager.hasProjectSettingsLoadError()\n\t\t) {\n\t\t\tconst detail = formatSettingsErrors(loadErrors);\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: detail ? `Failed to reload settings: ${detail}` : \"Failed to reload settings from durable storage\",\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst availableModels = modelRegistry ? await modelRegistry.getAvailable() : [];\n\t\t\treturn { ok: true as const, settings: getSettingsForRpc(settingsManager, availableModels) };\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: `Failed to load available models: ${(error as Error).message}` };\n\t\t}\n\t});\n}\n\nconst SETTINGS_UPDATE_KEYS = [\n\t\"defaultProvider\",\n\t\"defaultModel\",\n\t\"defaultThinkingLevel\",\n\t\"steeringMode\",\n\t\"followUpMode\",\n\t\"compactionEnabled\",\n\t\"continueAfterAutoCompaction\",\n\t\"retryEnabled\",\n\t\"maxConcurrentSubagents\",\n\t\"imageAutoResize\",\n\t\"blockImages\",\n\t\"enableSkillCommands\",\n\t\"autoLoadNestedContext\",\n\t\"trustedContextFolders\",\n\t\"transport\",\n\t\"hideThinkingBlock\",\n\t\"agentModels\",\n\t\"enabledModels\",\n\t\"subagentArbiter\",\n\t\"tabTitle\",\n] as const;\n\nconst QUEUE_MODES = [\"all\", \"one-at-a-time\"] as const;\nconst TRANSPORT_SETTINGS = [\"sse\", \"websocket\", \"auto\"] as const satisfies readonly TransportSetting[];\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n\nfunction validateAgentModels(value: unknown): { ok: true } | { ok: false; error: string } {\n\tif (!isPlainObject(value)) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: \"Invalid agentModels: must be a plain object mapping agent names to model fallback arrays\",\n\t\t};\n\t}\n\tfor (const [agentName, models] of Object.entries(value)) {\n\t\tif (!Array.isArray(models)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid agentModels[${JSON.stringify(agentName)}]: expected an array of non-empty strings`,\n\t\t\t};\n\t\t}\n\t\tconst invalidModel = models.find((model) => typeof model !== \"string\" || model.trim().length === 0);\n\t\tif (invalidModel !== undefined) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid agentModels[${JSON.stringify(agentName)}]: expected an array of non-empty strings`,\n\t\t\t};\n\t\t}\n\t}\n\treturn { ok: true };\n}\n\n/** Evaluate a strictly canonical, absolute directory through the core trust matcher. */\nexport function evaluateContextTrustForRpc(\n\tsettingsManager: Pick<SettingsManager, \"getGlobalContextTrustPolicy\">,\n\tpath: unknown,\n): { ok: true; evaluation: RpcContextTrustEvaluation } | { ok: false; error: string } {\n\tlet canonicalTarget: string;\n\ttry {\n\t\tcanonicalTarget = validateTrustedContextFolder(path);\n\t} catch (error) {\n\t\treturn { ok: false, error: `Invalid context trust path: ${(error as Error).message}` };\n\t}\n\n\tconst policy = settingsManager.getGlobalContextTrustPolicy();\n\tconst match = matchContextTrust(policy, canonicalTarget);\n\tif (!match) {\n\t\treturn { ok: true, evaluation: { canonicalTarget, state: \"untrusted\" } };\n\t}\n\tif (policy.unrestricted) {\n\t\treturn { ok: true, evaluation: { canonicalTarget, state: \"unrestricted\" } };\n\t}\n\treturn {\n\t\tok: true,\n\t\tevaluation: { canonicalTarget, state: \"trusted-root\", grantingRoot: match.trustedRoot },\n\t};\n}\n\n/**\n * Simple promise-based mutex that serializes durable settings operations. RPC commands are\n * dispatched concurrently (`void handleInputLine(line)`) so settings writes and refreshes\n * can overlap. Without serialization, a refresh could reload over queued modifications, and\n * concurrent operations could race on SettingsManager's shared error bucket (`drainErrors()`\n * clears the array for everyone).\n *\n * This lock ensures only one apply/flush/drain or flush/reload/drain block runs at a time.\n *\n * Known limitation: the lock does NOT cover the per-runtime commands (`set_model`,\n * `set_steering_mode`, etc.), which persist through the same SettingsManager write queue\n * and record failures into the same shared error bucket. Because `flush()` awaits the\n * entire shared queue, a concurrent runtime setter's write failure can land in this\n * operation's post-flush drain window and be reported as a `set_settings` failure (loud\n * but mis-attributed — never a silent success). Per-operation error isolation in\n * SettingsManager is the proper fix and is tracked in\n * https://github.com/aebrer/dreb/issues/319.\n */\nlet settingsWriteQueue: Promise<unknown> = Promise.resolve();\nfunction settingsWriteLock<T>(fn: () => Promise<T>): Promise<T> {\n\tconst prev = settingsWriteQueue;\n\tconst next = prev.then(fn, fn);\n\tsettingsWriteQueue = next.catch(() => {});\n\treturn next;\n}\n\nasync function persistContextTrustMutationForRpc(\n\tsettingsManager: SettingsWriter,\n\tfolders: string[],\n\ttargetPath: string,\n\tmutation: Pick<RpcContextTrustMutationResult, \"addedRoot\" | \"removedRoot\">,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcContextTrustMutationResult } | { ok: false; error: string }> {\n\tsettingsManager.drainErrors();\n\tif (settingsManager.hasGlobalSettingsLoadError()) {\n\t\treturn {\n\t\t\tok: false as const,\n\t\t\terror: \"Cannot write settings: the global settings file failed to load (fix or remove the corrupt settings.json first)\",\n\t\t};\n\t}\n\n\ttry {\n\t\tsettingsManager.setTrustedContextFolders(folders);\n\t\tawait settingsManager.flush();\n\t} catch (error) {\n\t\t// A security-policy mutation must not remain effective solely in memory when its\n\t\t// durable write fails. Reload restores the last persisted global policy.\n\t\tsettingsManager.reload();\n\t\treturn { ok: false as const, error: `Failed to persist settings: ${(error as Error).message}` };\n\t}\n\tconst writeErrors = settingsManager.drainErrors();\n\tif (writeErrors.length > 0) {\n\t\tconst detail = writeErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t// SettingsManager records queued write failures rather than rejecting flush(). Its\n\t\t// in-memory policy has already changed, so restore it from durable storage before\n\t\t// reporting failure rather than leaving an undurable trusted root effective.\n\t\tsettingsManager.reload();\n\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t}\n\n\tconst evaluated = evaluateContextTrustForRpc(settingsManager, targetPath);\n\tif (!evaluated.ok) return evaluated;\n\treturn {\n\t\tok: true as const,\n\t\tresult: {\n\t\t\tevaluation: evaluated.evaluation,\n\t\t\tsettings: await buildSettingsSnapshotForRpc(settingsManager, modelRegistry),\n\t\t\t...mutation,\n\t\t},\n\t};\n}\n\n/** Add a canonical directory to the global trusted roots and flush the change. */\nexport async function trustContextFolderForRpc(\n\tsettingsManager: SettingsWriter,\n\tpath: unknown,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcContextTrustMutationResult } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\tconst evaluated = evaluateContextTrustForRpc(settingsManager, path);\n\t\tif (!evaluated.ok) return evaluated;\n\n\t\t// Existing malformed entries are fail-closed. A trust mutation rewrites the configured\n\t\t// list as the canonical configured roots plus this new canonical root.\n\t\tconst roots = canonicalizeTrustedRoots(settingsManager.getConfiguredTrustedContextFolders());\n\t\tlet folders: string[];\n\t\ttry {\n\t\t\tfolders = validateTrustedContextFolders([...roots, evaluated.evaluation.canonicalTarget]);\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: (error as Error).message };\n\t\t}\n\t\treturn persistContextTrustMutationForRpc(\n\t\t\tsettingsManager,\n\t\t\tfolders,\n\t\t\tevaluated.evaluation.canonicalTarget,\n\t\t\t{\n\t\t\t\t...(folders.includes(evaluated.evaluation.canonicalTarget)\n\t\t\t\t\t? { addedRoot: evaluated.evaluation.canonicalTarget }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\tmodelRegistry,\n\t\t);\n\t});\n}\n\n/** Remove the root actually granting a directory access, rather than the supplied descendant. */\nexport async function untrustContextFolderForRpc(\n\tsettingsManager: SettingsWriter,\n\tpath: unknown,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcContextTrustMutationResult } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\tconst evaluated = evaluateContextTrustForRpc(settingsManager, path);\n\t\tif (!evaluated.ok) return evaluated;\n\t\tif (evaluated.evaluation.state === \"unrestricted\") {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Cannot untrust a context folder while unrestricted nested context loading is enabled; disable autoLoadNestedContext first\",\n\t\t\t};\n\t\t}\n\t\tif (evaluated.evaluation.state === \"untrusted\") {\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tresult: {\n\t\t\t\t\tevaluation: evaluated.evaluation,\n\t\t\t\t\tsettings: await buildSettingsSnapshotForRpc(settingsManager, modelRegistry),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst removedRoot = evaluated.evaluation.grantingRoot!;\n\t\tconst roots = canonicalizeTrustedRoots(settingsManager.getConfiguredTrustedContextFolders());\n\t\treturn persistContextTrustMutationForRpc(\n\t\t\tsettingsManager,\n\t\t\troots.filter((root) => root !== removedRoot),\n\t\t\tevaluated.evaluation.canonicalTarget,\n\t\t\t{ removedRoot },\n\t\t\tmodelRegistry,\n\t\t);\n\t});\n}\n\n/** Remove a configured trusted-folder string exactly as stored and flush the change. */\nexport async function removeTrustedContextFolderForRpc(\n\tsettingsManager: SettingsWriter,\n\tpath: unknown,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcTrustedFolderRemovalResult } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\tif (typeof path !== \"string\" || path.length === 0) {\n\t\t\treturn { ok: false as const, error: \"remove_trusted_context_folder requires a non-empty string path\" };\n\t\t}\n\n\t\tsettingsManager.drainErrors();\n\t\tif (settingsManager.hasGlobalSettingsLoadError()) {\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: \"Cannot write settings: the global settings file failed to load (fix or remove the corrupt settings.json first)\",\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tsettingsManager.removeTrustedContextFolder(path);\n\t\t\tawait settingsManager.flush();\n\t\t} catch (error) {\n\t\t\t// A security-policy mutation must not remain effective solely in memory when its\n\t\t\t// durable write fails. Reload restores the last persisted global policy.\n\t\t\tsettingsManager.reload();\n\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${(error as Error).message}` };\n\t\t}\n\t\tconst writeErrors = settingsManager.drainErrors();\n\t\tif (writeErrors.length > 0) {\n\t\t\tconst detail = writeErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t\t// SettingsManager records queued write failures rather than rejecting flush(). Its\n\t\t\t// in-memory policy has already changed, so restore it from durable storage before\n\t\t\t// reporting failure rather than leaving an undurable trust removal effective.\n\t\t\tsettingsManager.reload();\n\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t\t}\n\n\t\treturn {\n\t\t\tok: true as const,\n\t\t\tresult: {\n\t\t\t\tsettings: await buildSettingsSnapshotForRpc(settingsManager, modelRegistry),\n\t\t\t\tremovedFolder: path,\n\t\t\t},\n\t\t};\n\t});\n}\n\n/**\n * Handle the `set_settings` RPC command: validate and persist default settings.\n *\n * Writes persistent defaults via SettingsManager only — never touches live session state\n * (the existing per-runtime commands do that). The whole payload is validated before\n * anything is applied: on any invalid field, nothing changes.\n *\n * Persistence is verified loudly: if the settings file failed to load at startup,\n * SettingsManager.save() silently no-ops — this handler reports that as an error instead\n * of returning success while nothing was written. Write failures surface the same way.\n *\n * The apply+flush+drain block is serialized via {@link settingsWriteLock} so that\n * concurrent `set_settings` commands (dispatched concurrently by the RPC input loop)\n * cannot race on the shared error bucket. Pre-existing stale errors (from other commands\n * like `set_model` that record write failures but never drain) are discarded before\n * applying. See the {@link settingsWriteLock} doc for the remaining attribution caveat\n * with runtime setters that write concurrently during the flush window.\n */\nexport async function setSettingsForRpc(\n\tsettingsManager: SettingsWriter,\n\tmodelRegistry: Pick<ModelRegistry, \"getAvailable\">,\n\tupdate: RpcSettingsUpdate | undefined,\n): Promise<{ ok: true; settings: RpcSettingsSnapshot; warnings?: string[] } | { ok: false; error: string }> {\n\t// --- Validate everything first; apply nothing on any failure ---\n\tif (update === undefined || update === null || typeof update !== \"object\" || Array.isArray(update)) {\n\t\treturn { ok: false, error: \"set_settings requires a settings object\" };\n\t}\n\n\tconst unknownKeys = Object.keys(update).filter((key) => !(SETTINGS_UPDATE_KEYS as readonly string[]).includes(key));\n\tif (unknownKeys.length > 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `Unknown settings key(s): ${unknownKeys.join(\", \")}. Valid keys: ${SETTINGS_UPDATE_KEYS.join(\", \")}`,\n\t\t};\n\t}\n\n\tconst hasAnySetting = SETTINGS_UPDATE_KEYS.some((key) => update[key] !== undefined);\n\tif (!hasAnySetting) {\n\t\treturn { ok: false, error: \"set_settings requires at least one setting to change\" };\n\t}\n\n\tif (update.defaultThinkingLevel !== undefined) {\n\t\tif (typeof update.defaultThinkingLevel !== \"string\" || !isValidThinkingLevel(update.defaultThinkingLevel)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid defaultThinkingLevel: ${JSON.stringify(update.defaultThinkingLevel)}. Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tfor (const key of [\"steeringMode\", \"followUpMode\"] as const) {\n\t\tconst value = update[key];\n\t\tif (value !== undefined && !(QUEUE_MODES as readonly string[]).includes(value as string)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid ${key}: ${JSON.stringify(value)}. Valid values: ${QUEUE_MODES.join(\", \")}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tfor (const key of [\n\t\t\"compactionEnabled\",\n\t\t\"continueAfterAutoCompaction\",\n\t\t\"retryEnabled\",\n\t\t\"imageAutoResize\",\n\t\t\"blockImages\",\n\t\t\"enableSkillCommands\",\n\t\t\"autoLoadNestedContext\",\n\t\t\"hideThinkingBlock\",\n\t] as const) {\n\t\tconst value = update[key];\n\t\tif (value !== undefined && typeof value !== \"boolean\") {\n\t\t\treturn { ok: false, error: `Invalid ${key}: ${JSON.stringify(value)}. Must be a boolean` };\n\t\t}\n\t}\n\n\tif (\n\t\tupdate.maxConcurrentSubagents !== undefined &&\n\t\t(!Number.isSafeInteger(update.maxConcurrentSubagents) || update.maxConcurrentSubagents < 0)\n\t) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `Invalid maxConcurrentSubagents: ${JSON.stringify(update.maxConcurrentSubagents)}. Must be a non-negative whole number`,\n\t\t};\n\t}\n\n\tif (update.transport !== undefined) {\n\t\tif (\n\t\t\ttypeof update.transport !== \"string\" ||\n\t\t\t!(TRANSPORT_SETTINGS as readonly string[]).includes(update.transport)\n\t\t) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid transport: ${JSON.stringify(update.transport)}. Valid values: ${TRANSPORT_SETTINGS.join(\", \")}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (update.agentModels !== undefined) {\n\t\tconst validation = validateAgentModels(update.agentModels);\n\t\tif (!validation.ok) {\n\t\t\treturn validation;\n\t\t}\n\t}\n\n\tlet canonicalEnabledModels: string[] | undefined;\n\tif (update.enabledModels !== undefined && update.enabledModels !== null) {\n\t\tif (!Array.isArray(update.enabledModels)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Invalid enabledModels: must be a non-empty array of exact model references or null\",\n\t\t\t};\n\t\t}\n\t\tif (update.enabledModels.length === 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Invalid enabledModels: at least one model must remain enabled; use null to enable all\",\n\t\t\t};\n\t\t}\n\n\t\tconst availableModels = await modelRegistry.getAvailable();\n\t\tconst seen = new Set<string>();\n\t\tcanonicalEnabledModels = [];\n\t\tfor (const reference of update.enabledModels) {\n\t\t\tif (typeof reference !== \"string\" || reference.trim().length === 0 || reference !== reference.trim()) {\n\t\t\t\treturn { ok: false, error: \"Invalid enabledModels: every entry must be a non-empty exact model reference\" };\n\t\t\t}\n\t\t\tconst normalizedReference = reference.toLowerCase();\n\t\t\tconst matches = availableModels.filter(\n\t\t\t\t(model) => `${model.provider}/${model.id}`.toLowerCase() === normalizedReference,\n\t\t\t);\n\t\t\tif (matches.length !== 1) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: `Invalid enabledModels entry ${JSON.stringify(reference)}: expected an available exact provider/model reference`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst match = matches[0]!;\n\t\t\tconst canonical = `${match.provider}/${match.id}`;\n\t\t\tif (seen.has(canonical)) {\n\t\t\t\treturn { ok: false, error: `Invalid enabledModels: duplicate model ${JSON.stringify(canonical)}` };\n\t\t\t}\n\t\t\tseen.add(canonical);\n\t\t\tcanonicalEnabledModels.push(canonical);\n\t\t}\n\n\t\tif (\n\t\t\tcanonicalEnabledModels.length === availableModels.length &&\n\t\t\tavailableModels.every((model) => seen.has(`${model.provider}/${model.id}`))\n\t\t) {\n\t\t\tcanonicalEnabledModels = undefined;\n\t\t}\n\t}\n\n\tlet subagentArbiter = update.subagentArbiter === null ? undefined : update.subagentArbiter;\n\tif (subagentArbiter !== undefined) {\n\t\tif (!isPlainObject(subagentArbiter)) {\n\t\t\treturn { ok: false, error: \"subagentArbiter must be an object or null\" };\n\t\t}\n\t\tconst validKeys = [\"enabled\", \"model\", \"thinking\", \"guidePath\"];\n\t\tconst unknownArbiterKeys = Object.keys(subagentArbiter).filter((key) => !validKeys.includes(key));\n\t\tif (unknownArbiterKeys.length > 0) {\n\t\t\treturn { ok: false, error: `Unknown subagentArbiter key(s): ${unknownArbiterKeys.join(\", \")}` };\n\t\t}\n\t\tif (subagentArbiter.enabled !== undefined && typeof subagentArbiter.enabled !== \"boolean\") {\n\t\t\treturn { ok: false, error: \"subagentArbiter.enabled must be a boolean\" };\n\t\t}\n\t\tif (subagentArbiter.enabled === false) {\n\t\t\t// Explicit disablement is the recovery path for fail-closed policies.\n\t\t\t// Preserve retained fields without validating them so malformed manual\n\t\t\t// edits cannot trap users in a policy that blocks every child spawn.\n\t\t\tsubagentArbiter = { ...subagentArbiter };\n\t\t} else {\n\t\t\tif (\n\t\t\t\tsubagentArbiter.model !== undefined &&\n\t\t\t\t(typeof subagentArbiter.model !== \"string\" || !subagentArbiter.model.trim())\n\t\t\t) {\n\t\t\t\treturn { ok: false, error: \"subagentArbiter.model must be a non-empty exact provider/model string\" };\n\t\t\t}\n\t\t\tif (\n\t\t\t\tsubagentArbiter.thinking !== undefined &&\n\t\t\t\t(typeof subagentArbiter.thinking !== \"string\" || !isValidThinkingLevel(subagentArbiter.thinking))\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: `Invalid subagentArbiter.thinking: ${JSON.stringify(subagentArbiter.thinking)}. Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (\n\t\t\t\tsubagentArbiter.guidePath !== undefined &&\n\t\t\t\t(typeof subagentArbiter.guidePath !== \"string\" || !subagentArbiter.guidePath.trim())\n\t\t\t) {\n\t\t\t\treturn { ok: false, error: \"subagentArbiter.guidePath must be a non-empty string\" };\n\t\t\t}\n\t\t\tif (subagentArbiter.enabled === true && !subagentArbiter.model) {\n\t\t\t\treturn { ok: false, error: \"Enabling subagentArbiter requires an exact provider/model\" };\n\t\t\t}\n\t\t\tif (subagentArbiter.model) {\n\t\t\t\tconst slash = subagentArbiter.model.indexOf(\"/\");\n\t\t\t\tif (slash <= 0 || slash === subagentArbiter.model.length - 1 || /\\s/.test(subagentArbiter.model)) {\n\t\t\t\t\treturn { ok: false, error: \"subagentArbiter.model must be an exact provider/model\" };\n\t\t\t\t}\n\t\t\t\tconst provider = subagentArbiter.model.slice(0, slash);\n\t\t\t\tconst modelId = subagentArbiter.model.slice(slash + 1);\n\t\t\t\tconst models = await modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((candidate) => candidate.provider === provider && candidate.id === modelId);\n\t\t\t\tif (!model) return { ok: false, error: `Arbiter model not found: ${subagentArbiter.model}` };\n\t\t\t\tif (subagentArbiter.thinking !== undefined) {\n\t\t\t\t\tconst validation = validateThinkingLevelForModel(model, subagentArbiter.thinking);\n\t\t\t\t\tif (!validation.ok) return validation;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsubagentArbiter = { ...subagentArbiter };\n\t\t}\n\t}\n\n\tlet tabTitle = update.tabTitle;\n\tif (tabTitle !== undefined) {\n\t\tif (!isPlainObject(tabTitle)) {\n\t\t\treturn { ok: false, error: \"tabTitle must be an object\" };\n\t\t}\n\t\tconst validKeys = [\"enabled\", \"model\", \"triggerAfter\", \"maxTitleLength\"];\n\t\tconst unknownTabTitleKeys = Object.keys(tabTitle).filter((key) => !validKeys.includes(key));\n\t\tif (unknownTabTitleKeys.length > 0) {\n\t\t\treturn { ok: false, error: `Unknown tabTitle key(s): ${unknownTabTitleKeys.join(\", \")}` };\n\t\t}\n\t\tif (Object.values(tabTitle).every((value) => value === undefined)) {\n\t\t\treturn { ok: false, error: \"tabTitle requires at least one setting to change\" };\n\t\t}\n\t\tif (tabTitle.enabled !== undefined && typeof tabTitle.enabled !== \"boolean\") {\n\t\t\treturn { ok: false, error: \"tabTitle.enabled must be a boolean\" };\n\t\t}\n\t\tfor (const key of [\"triggerAfter\", \"maxTitleLength\"] as const) {\n\t\t\tconst value = tabTitle[key];\n\t\t\tif (value !== undefined && (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0)) {\n\t\t\t\treturn { ok: false, error: `tabTitle.${key} must be a positive whole number` };\n\t\t\t}\n\t\t}\n\t\tif (tabTitle.model !== undefined && tabTitle.model !== null) {\n\t\t\tif (typeof tabTitle.model !== \"string\" || !tabTitle.model.trim()) {\n\t\t\t\treturn { ok: false, error: \"tabTitle.model must be a non-empty exact provider/model string\" };\n\t\t\t}\n\t\t\tconst slash = tabTitle.model.indexOf(\"/\");\n\t\t\tif (slash <= 0 || slash === tabTitle.model.length - 1 || /\\s/.test(tabTitle.model)) {\n\t\t\t\treturn { ok: false, error: \"tabTitle.model must be an exact provider/model\" };\n\t\t\t}\n\t\t\tconst provider = tabTitle.model.slice(0, slash);\n\t\t\tconst modelId = tabTitle.model.slice(slash + 1);\n\t\t\tconst models = await modelRegistry.getAvailable();\n\t\t\tif (!models.some((candidate) => candidate.provider === provider && candidate.id === modelId)) {\n\t\t\t\treturn { ok: false, error: `Tab title model not found: ${tabTitle.model}` };\n\t\t\t}\n\t\t}\n\t\t// `model: null` skips validation above: it removes the pinned model so title\n\t\t// generation restores Explore-agent routing.\n\t\ttabTitle = { ...tabTitle };\n\t}\n\n\tlet trustedContextFolders: string[] | undefined;\n\tif (update.trustedContextFolders !== undefined) {\n\t\ttry {\n\t\t\ttrustedContextFolders = validateTrustedContextFolders(update.trustedContextFolders);\n\t\t} catch (error) {\n\t\t\treturn { ok: false, error: (error as Error).message };\n\t\t}\n\t}\n\n\tconst hasProvider = update.defaultProvider !== undefined;\n\tconst hasModel = update.defaultModel !== undefined;\n\tif (hasProvider !== hasModel) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: \"defaultProvider and defaultModel must be set together\",\n\t\t};\n\t}\n\tif (hasProvider && hasModel) {\n\t\tif (typeof update.defaultProvider !== \"string\" || typeof update.defaultModel !== \"string\") {\n\t\t\treturn { ok: false, error: \"defaultProvider and defaultModel must be strings\" };\n\t\t}\n\t\tconst models = await modelRegistry.getAvailable();\n\t\tconst match = models.find((m) => m.provider === update.defaultProvider && m.id === update.defaultModel);\n\t\tif (!match) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Model not found: ${update.defaultProvider}/${update.defaultModel}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst updatesContextTrustPolicy = update.autoLoadNestedContext !== undefined || trustedContextFolders !== undefined;\n\n\t// Serialize the apply+flush+drain block so concurrent set_settings commands\n\t// cannot race on the shared error bucket. See settingsWriteLock doc.\n\treturn settingsWriteLock(async () => {\n\t\t// Discard stale errors left by other operations (set_model, set_steering_mode, etc.)\n\t\t// that record write failures into SettingsManager's shared error bucket but never\n\t\t// drain it. Without this, we'd mis-attribute their failures to this operation.\n\t\tsettingsManager.drainErrors();\n\n\t\t// Persisting would silently no-op if the settings file failed to load — fail loudly\n\t\t// instead. Checked INSIDE the lock (after the stale-error discard) so a concurrent\n\t\t// reload() that flips the load-error state cannot slip between check and apply and\n\t\t// turn this write into a silent no-op reported as success.\n\t\tif (settingsManager.hasGlobalSettingsLoadError()) {\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: \"Cannot write settings: the global settings file failed to load (fix or remove the corrupt settings.json first)\",\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\t// Phase 1: durably persist every ordinary setting before touching the\n\t\t\t// security-sensitive context trust policy.\n\t\t\tif (update.defaultProvider !== undefined && update.defaultModel !== undefined) {\n\t\t\t\tsettingsManager.setDefaultModelAndProvider(update.defaultProvider, update.defaultModel);\n\t\t\t}\n\t\t\tif (update.defaultThinkingLevel !== undefined) {\n\t\t\t\tsettingsManager.setDefaultThinkingLevel(update.defaultThinkingLevel);\n\t\t\t}\n\t\t\tif (update.steeringMode !== undefined) {\n\t\t\t\tsettingsManager.setSteeringMode(update.steeringMode);\n\t\t\t}\n\t\t\tif (update.followUpMode !== undefined) {\n\t\t\t\tsettingsManager.setFollowUpMode(update.followUpMode);\n\t\t\t}\n\t\t\tif (update.compactionEnabled !== undefined) {\n\t\t\t\tsettingsManager.setCompactionEnabled(update.compactionEnabled);\n\t\t\t}\n\t\t\tif (update.continueAfterAutoCompaction !== undefined) {\n\t\t\t\tsettingsManager.setContinueAfterAutoCompaction(update.continueAfterAutoCompaction);\n\t\t\t}\n\t\t\tif (update.retryEnabled !== undefined) {\n\t\t\t\tsettingsManager.setRetryEnabled(update.retryEnabled);\n\t\t\t}\n\t\t\tif (update.maxConcurrentSubagents !== undefined) {\n\t\t\t\tsettingsManager.setMaxConcurrentSubagents(update.maxConcurrentSubagents);\n\t\t\t}\n\t\t\tif (update.imageAutoResize !== undefined) {\n\t\t\t\tsettingsManager.setImageAutoResize(update.imageAutoResize);\n\t\t\t}\n\t\t\tif (update.blockImages !== undefined) {\n\t\t\t\tsettingsManager.setBlockImages(update.blockImages);\n\t\t\t}\n\t\t\tif (update.enableSkillCommands !== undefined) {\n\t\t\t\tsettingsManager.setEnableSkillCommands(update.enableSkillCommands);\n\t\t\t}\n\t\t\tif (update.transport !== undefined) {\n\t\t\t\tsettingsManager.setTransport(update.transport);\n\t\t\t}\n\t\t\tif (update.hideThinkingBlock !== undefined) {\n\t\t\t\tsettingsManager.setHideThinkingBlock(update.hideThinkingBlock);\n\t\t\t}\n\n\t\t\tconst warnings: string[] = [];\n\t\t\tif (update.enabledModels !== undefined) {\n\t\t\t\tif (settingsManager.hasProjectEnabledModelsOverride()) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t\"A project-level enabledModels value (.dreb/settings.json) takes precedence — this change to global settings will have no effect. Edit the project settings file to change it.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tsettingsManager.setEnabledModels(canonicalEnabledModels);\n\t\t\t}\n\t\t\tif (update.subagentArbiter !== undefined) {\n\t\t\t\tsettingsManager.setGlobalSubagentArbiterSettings(subagentArbiter);\n\t\t\t}\n\t\t\tif (tabTitle !== undefined) {\n\t\t\t\tsettingsManager.setGlobalTabTitleSettings(tabTitle);\n\t\t\t}\n\t\t\tif (update.agentModels !== undefined) {\n\t\t\t\tfor (const [agentName, models] of Object.entries(update.agentModels)) {\n\t\t\t\t\tif (settingsManager.hasProjectAgentModelOverride(agentName)) {\n\t\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t\t`A project-level agentModels override for ${JSON.stringify(agentName)} (.dreb/settings.json) ` +\n\t\t\t\t\t\t\t\t\"takes precedence — this change to global settings will have no effect. \" +\n\t\t\t\t\t\t\t\t\"Edit the project settings file to change it.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (models.length > 0) {\n\t\t\t\t\t\tsettingsManager.setAgentModelsForAgent(agentName, models);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsettingsManager.removeAgentModelsForAgent(agentName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait settingsManager.flush();\n\t\t\tconst writeErrors = settingsManager.drainErrors();\n\t\t\tif (writeErrors.length > 0) {\n\t\t\t\tconst detail = writeErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t\t\t// Context trust has not yet been modified, so do not reload: doing so\n\t\t\t\t// could discard unrelated pending in-memory state.\n\t\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t\t\t}\n\n\t\t\t// Phase 2: apply both context fields in one queued, atomic write only after\n\t\t\t// phase 1 is durably successful.\n\t\t\tif (updatesContextTrustPolicy) {\n\t\t\t\tsettingsManager.setContextTrust({\n\t\t\t\t\t...(update.autoLoadNestedContext !== undefined ? { autoLoadNested: update.autoLoadNestedContext } : {}),\n\t\t\t\t\t...(trustedContextFolders !== undefined ? { trustedFolders: trustedContextFolders } : {}),\n\t\t\t\t});\n\t\t\t\tawait settingsManager.flush();\n\t\t\t\tconst ctxErrors = settingsManager.drainErrors();\n\t\t\t\tif (ctxErrors.length > 0) {\n\t\t\t\t\tconst detail = ctxErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t\t\t\t// The context write failed, so durable storage retains its previous,\n\t\t\t\t\t// fail-closed policy. Restore that policy in memory before returning.\n\t\t\t\t\tsettingsManager.reload();\n\t\t\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst snapshot = getSettingsForRpc(settingsManager, await modelRegistry.getAvailable());\n\t\t\treturn warnings.length > 0\n\t\t\t\t? { ok: true as const, settings: snapshot, warnings }\n\t\t\t\t: { ok: true as const, settings: snapshot };\n\t\t} catch (error) {\n\t\t\tif (updatesContextTrustPolicy) {\n\t\t\t\t// Setters and flush() can also fail synchronously. The same fail-closed\n\t\t\t\t// rollback is required before returning that persistence failure.\n\t\t\t\tsettingsManager.reload();\n\t\t\t}\n\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${(error as Error).message}` };\n\t\t}\n\t});\n}\n\nfunction normalizePreview(text: string): string {\n\treturn text.replace(/\\s+/g, \" \").trim().slice(0, 200);\n}\n\nfunction extractTextContent(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\n\tlet text = \"\";\n\tfor (const part of content) {\n\t\tif (\n\t\t\ttypeof part === \"object\" &&\n\t\t\tpart !== null &&\n\t\t\t\"type\" in part &&\n\t\t\tpart.type === \"text\" &&\n\t\t\t\"text\" in part &&\n\t\t\ttypeof part.text === \"string\"\n\t\t) {\n\t\t\ttext += part.text;\n\t\t}\n\t}\n\treturn text;\n}\n\nfunction getRpcEntryPreview(node: SessionTreeNode): string {\n\tconst entry = node.entry;\n\n\tswitch (entry.type) {\n\t\tcase \"message\": {\n\t\t\tconst msg = entry.message as {\n\t\t\t\trole: string;\n\t\t\t\tcontent?: unknown;\n\t\t\t\tstopReason?: string;\n\t\t\t\terrorMessage?: string;\n\t\t\t\ttoolName?: string;\n\t\t\t\tcommand?: string;\n\t\t\t};\n\t\t\tconst role = msg.role;\n\t\t\tif (role === \"user\") {\n\t\t\t\treturn normalizePreview(extractTextContent(msg.content));\n\t\t\t}\n\t\t\tif (role === \"assistant\") {\n\t\t\t\tconst textContent = normalizePreview(extractTextContent(msg.content));\n\t\t\t\tif (textContent) return textContent;\n\t\t\t\tif (msg.stopReason === \"aborted\") return \"(aborted)\";\n\t\t\t\tif (msg.errorMessage) return normalizePreview(msg.errorMessage);\n\t\t\t\treturn \"(no content)\";\n\t\t\t}\n\t\t\tif (role === \"toolResult\") {\n\t\t\t\treturn normalizePreview(`[${msg.toolName ?? \"tool\"}]`);\n\t\t\t}\n\t\t\tif (role === \"bashExecution\") {\n\t\t\t\treturn normalizePreview(`[bash]: ${msg.command ?? \"\"}`);\n\t\t\t}\n\t\t\treturn normalizePreview(`[${role}]`);\n\t\t}\n\t\tcase \"custom_message\":\n\t\t\treturn normalizePreview(`[${entry.customType}]: ${extractTextContent(entry.content)}`);\n\t\tcase \"compaction\":\n\t\t\treturn normalizePreview(`[compaction: ${Math.round(entry.tokensBefore / 1000)}k tokens]`);\n\t\tcase \"branch_summary\":\n\t\t\treturn normalizePreview(`[branch summary]: ${entry.summary}`);\n\t\tcase \"model_change\":\n\t\t\treturn normalizePreview(`[model: ${entry.modelId}]`);\n\t\tcase \"thinking_level_change\":\n\t\t\treturn normalizePreview(`[thinking: ${entry.thinkingLevel}]`);\n\t\tcase \"custom\":\n\t\t\treturn normalizePreview(`[custom: ${entry.customType}]`);\n\t\tcase \"label\":\n\t\t\treturn normalizePreview(`[label: ${entry.label ?? \"(cleared)\"}]`);\n\t\tcase \"session_info\":\n\t\t\treturn normalizePreview(`[title: ${entry.name || \"empty\"}]`);\n\t\tdefault: {\n\t\t\t// Compile-time exhaustiveness guard: a new SessionEntry type forces an update here.\n\t\t\tconst _exhaustive: never = entry;\n\t\t\t// Runtime: unknown types from forward-compat/corrupt session files get a placeholder.\n\t\t\treturn normalizePreview(`[${(entry as { type: string }).type}]`);\n\t\t}\n\t}\n}\n\nfunction toRpcTreeNode(node: SessionTreeNode): RpcTreeNode {\n\tconst role = node.entry.type === \"message\" ? String(node.entry.message.role) : undefined;\n\treturn {\n\t\tid: node.entry.id,\n\t\tparentId: node.entry.parentId,\n\t\ttype: node.entry.type,\n\t\t...(role !== undefined ? { role } : {}),\n\t\tpreview: getRpcEntryPreview(node),\n\t\ttimestamp: node.entry.timestamp,\n\t\t...(node.label !== undefined ? { label: node.label } : {}),\n\t\tchildren: [],\n\t};\n}\n\n/**\n * Map core session tree nodes to stable RPC DTOs without leaking raw entries/messages.\n * Uses an explicit stack so deep linear session trees do not overflow the JS call stack.\n */\nexport function toRpcTreeNodes(nodes: SessionTreeNode[]): RpcTreeNode[] {\n\tconst roots: RpcTreeNode[] = [];\n\tconst stack: Array<{ source: SessionTreeNode; targetSiblings: RpcTreeNode[] }> = [];\n\n\tfor (let i = nodes.length - 1; i >= 0; i--) {\n\t\tstack.push({ source: nodes[i]!, targetSiblings: roots });\n\t}\n\n\twhile (stack.length > 0) {\n\t\tconst { source, targetSiblings } = stack.pop()!;\n\t\tconst dto = toRpcTreeNode(source);\n\t\ttargetSiblings.push(dto);\n\n\t\tfor (let i = source.children.length - 1; i >= 0; i--) {\n\t\t\tstack.push({ source: source.children[i]!, targetSiblings: dto.children });\n\t\t}\n\t}\n\n\treturn roots;\n}\n\n/** Return the current session tree and active leaf as RPC DTOs. */\nexport function getTreeForRpc(sessionManager: Pick<SessionManager, \"getTree\" | \"getLeafId\">): {\n\troots: RpcTreeNode[];\n\tleafId: string | null;\n} {\n\treturn { roots: toRpcTreeNodes(sessionManager.getTree()), leafId: sessionManager.getLeafId() };\n}\n\n/** Navigate the active session tree, returning only the stable RPC result fields. */\nexport async function navigateTreeForRpc(\n\tsession: Pick<AgentSession, \"navigateTree\">,\n\ttargetId: string,\n\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n): Promise<{ cancelled: boolean; editorText?: string }> {\n\tconst result = await session.navigateTree(targetId, options ?? {});\n\treturn {\n\t\tcancelled: result.cancelled,\n\t\t...(result.editorText !== undefined ? { editorText: result.editorText } : {}),\n\t};\n}\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\n/**\n * Build the RPC-mode extension UI context. Extracted from `runRpcMode` so the\n * dialog request emission and response mapping (select/confirm/input/ask/editor)\n * can be unit-tested without spawning the CLI. `output` is the JSONL sink and\n * `pendingExtensionRequests` is the shared map keyed by request id.\n */\nexport interface PendingRpcExtensionRequest {\n\trequest: RpcBlockingExtensionUIRequest;\n\tresolve: (value: any) => void;\n\treject: (error: Error) => void;\n}\n\nexport function createRpcExtensionUIContext(\n\toutput: (obj: RpcResponse | RpcExtensionUIRequest | object) => void,\n\tpendingExtensionRequests: Map<string, PendingRpcExtensionRequest>,\n\tonAskStop: () => void = () => {},\n): ExtensionUIContext {\n\t/** Helper for dialog methods with signal/timeout support */\n\tfunction createDialogPromise<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tdefaultValue: T,\n\t\trequest: Record<string, unknown>,\n\t\tparseResponse: (response: RpcExtensionUIResponse) => T,\n\t\tonTimeout?: () => void,\n\t): Promise<T> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\t\tconst id = crypto.randomUUID();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\tlet settled = false;\n\n\t\t\tconst cleanup = (): boolean => {\n\t\t\t\tif (settled) return false;\n\t\t\t\tsettled = true;\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tpendingExtensionRequests.delete(id);\n\t\t\t\toutput({ type: \"extension_ui_response_handled\", id });\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (!cleanup()) return;\n\t\t\t\tresolve(defaultValue);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tif (opts?.timeout) {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tif (!cleanup()) return;\n\t\t\t\t\tonTimeout?.();\n\t\t\t\t\tresolve(defaultValue);\n\t\t\t\t}, opts.timeout);\n\t\t\t}\n\n\t\t\tconst rpcRequest = {\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid,\n\t\t\t\t...request,\n\t\t\t} as RpcBlockingExtensionUIRequest;\n\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\trequest: rpcRequest,\n\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\tif (!cleanup()) return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresolve(parseResponse(response));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tif (!cleanup()) return;\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t});\n\t\t\toutput(rpcRequest);\n\t\t});\n\t}\n\n\t// Serialize `ask` requests so at most one ask wizard is ever pending, mirroring\n\t// the TUI's single-dialog queue (`enqueueExtensionDialog`). Tool execution runs\n\t// in parallel, so a turn can issue several `ask_user` calls at once; without\n\t// this the Dashboard (which renders a single pending ask) would leave the extra\n\t// wizards invisible and their promises hanging until the turn aborts. The first\n\t// ask runs synchronously (preserving immediate request emission); later ones\n\t// wait in a FIFO. A call whose signal aborts while still queued settles with the\n\t// aborted value and never emits a request.\n\tlet askInFlight = false;\n\tconst askWaiters: Array<() => void> = [];\n\tconst runNextAsk = () => {\n\t\tif (askInFlight) return;\n\t\tconst next = askWaiters.shift();\n\t\tif (!next) return;\n\t\taskInFlight = true;\n\t\tnext();\n\t};\n\tfunction serializeAsk<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tabortedValue: T,\n\t\trun: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst signal = opts?.signal;\n\t\tif (signal?.aborted) return Promise.resolve(abortedValue);\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: T) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\t// A started run's outcome propagates verbatim (a host/protocol failure\n\t\t\t// must still reject so the ask_user tool reports it distinctly).\n\t\t\tconst fail = (error: unknown) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\t// While still queued, a signal abort removes this task and settles it\n\t\t\t// without ever emitting. Once started, createDialogPromise owns abort.\n\t\t\tconst onAbort = () => {\n\t\t\t\tconst index = askWaiters.indexOf(startTask);\n\t\t\t\tif (index === -1) return;\n\t\t\t\taskWaiters.splice(index, 1);\n\t\t\t\tfinish(abortedValue);\n\t\t\t};\n\t\t\tconst startTask = () => {\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tfinish(abortedValue);\n\t\t\t\t\taskInFlight = false;\n\t\t\t\t\trunNextAsk();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trun()\n\t\t\t\t\t.then(finish, fail)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\taskInFlight = false;\n\t\t\t\t\t\trunNextAsk();\n\t\t\t\t\t});\n\t\t\t};\n\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\taskWaiters.push(startTask);\n\t\t\trunNextAsk();\n\t\t});\n\t}\n\n\t/**\n\t * Create an extension UI context that uses the RPC protocol.\n\t */\n\treturn {\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"select\", title, options, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise(opts, false, { method: \"confirm\", title, message, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed : false,\n\t\t\t),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"input\", title, placeholder, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\task: (request, opts) =>\n\t\t\tserializeAsk(opts, undefined, () =>\n\t\t\t\tcreateDialogPromise(\n\t\t\t\t\topts,\n\t\t\t\t\tundefined,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"ask\",\n\t\t\t\t\t\ttitle: request.title ?? \"Question\",\n\t\t\t\t\t\tquestions: request.questions.map((q) => ({\n\t\t\t\t\t\t\tquestion: q.question,\n\t\t\t\t\t\t\ttitle: q.title,\n\t\t\t\t\t\t\toptions: q.options,\n\t\t\t\t\t\t\tallowFreeText: q.allowFreeText,\n\t\t\t\t\t\t\tmultiSelect: q.multiSelect,\n\t\t\t\t\t\t\tmultiline: q.multiline,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\t\t\t// Preserve the authoritative deadline across Dashboard reload,\n\t\t\t\t\t\t// resync, and drill-in hydration instead of restarting the full\n\t\t\t\t\t\t// duration whenever the wizard remounts.\n\t\t\t\t\t\texpiresAt: opts?.timeout ? Date.now() + opts.timeout : undefined,\n\t\t\t\t\t},\n\t\t\t\t\t(response) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tonAskStop();\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst rawAnswers = (response as { answers?: unknown }).answers;\n\t\t\t\t\t\tif (!Array.isArray(rawAnswers)) {\n\t\t\t\t\t\t\tthrow new Error(\"Invalid RPC ask response: answers must be an array\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst answers = rawAnswers.map((entry) => {\n\t\t\t\t\t\t\tconst selected = (entry as { selected?: unknown })?.selected;\n\t\t\t\t\t\t\tconst customText = (entry as { customText?: unknown })?.customText;\n\t\t\t\t\t\t\tconst skipped = (entry as { skipped?: unknown })?.skipped;\n\t\t\t\t\t\t\tif (!Array.isArray(selected) || !selected.every((value) => typeof value === \"string\")) {\n\t\t\t\t\t\t\t\tthrow new Error(\"Invalid RPC ask response: each answer's selected must be an array of strings\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (customText !== undefined && typeof customText !== \"string\") {\n\t\t\t\t\t\t\t\tthrow new Error(\"Invalid RPC ask response: customText must be a string\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst answered = selected.length > 0 || !!customText?.trim();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tselected,\n\t\t\t\t\t\t\t\tcustomText: customText || undefined,\n\t\t\t\t\t\t\t\tskipped: skipped === true || !answered,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn { answers };\n\t\t\t\t\t},\n\t\t\t\t\tonAskStop,\n\t\t\t\t),\n\t\t\t),\n\n\t\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"notify\",\n\t\t\t\tmessage,\n\t\t\t\tnotifyType: type,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tonTerminalInput(): () => void {\n\t\t\t// Raw terminal input not supported in RPC mode\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setStatus\",\n\t\t\t\tstatusKey: key,\n\t\t\t\tstatusText: text,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\t// Only support string arrays in RPC mode - factory functions are ignored\n\t\t\tif (content === undefined || Array.isArray(content)) {\n\t\t\t\toutput({\n\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[] | undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t}\n\t\t\t// Component factories are not supported in RPC mode - would need TUI access\n\t\t},\n\n\t\tsetFooter(_factory: unknown): void {\n\t\t\t// Custom footer not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetHeader(_factory: unknown): void {\n\t\t\t// Custom header not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\t// Fire and forget - host can implement terminal title control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setTitle\",\n\t\t\t\ttitle,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tasync custom() {\n\t\t\t// Custom UI not supported in RPC mode\n\t\t\treturn undefined as never;\n\t\t},\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\t// Fire and forget - host can implement editor control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"set_editor_text\",\n\t\t\t\ttext,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\t// Synchronous method can't wait for RPC response\n\t\t\t// Host should track editor state locally if needed\n\t\t\treturn \"\";\n\t\t},\n\n\t\teditor: (title, prefill) =>\n\t\t\tcreateDialogPromise(undefined, undefined, { method: \"editor\", title, prefill }, (response) =>\n\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t? undefined\n\t\t\t\t\t: \"value\" in response\n\t\t\t\t\t\t? response.value\n\t\t\t\t\t\t: undefined,\n\t\t\t),\n\n\t\tsetEditorComponent(): void {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t\treturn false;\n\t\t},\n\n\t\tsetToolsExpanded(_expanded: boolean) {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t},\n\t};\n}\n\n/** Cancel every pending dialog during RPC host teardown. */\nexport function cancelPendingRpcExtensionRequests(\n\tpendingExtensionRequests: Map<string, PendingRpcExtensionRequest>,\n): void {\n\tfor (const [id, pending] of [...pendingExtensionRequests]) {\n\t\tpending.resolve({ type: \"extension_ui_response\", id, cancelled: true });\n\t}\n}\n\nexport async function runRpcMode(session: AgentSession, modelFallbackMessage?: string): Promise<never> {\n\ttakeOverStdout();\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\twriteRawStdout(serializeJsonLine(obj));\n\t};\n\n\tconst success = <T extends RpcCommand[\"type\"]>(\n\t\tid: string | undefined,\n\t\tcommand: T,\n\t\tdata?: object | null,\n\t): RpcResponse => {\n\t\tif (data === undefined) {\n\t\t\treturn { id, type: \"response\", command, success: true } as RpcResponse;\n\t\t}\n\t\treturn { id, type: \"response\", command, success: true, data } as RpcResponse;\n\t};\n\n\tconst error = (id: string | undefined, command: string, message: string): RpcResponse => {\n\t\treturn { id, type: \"response\", command, success: false, error: message };\n\t};\n\n\tif (session.sessionFile && session.messages.length > 0) {\n\t\tconst rehydratedCount = rehydrateBackgroundAgentsFromDisk(session.sessionFile);\n\t\tif (rehydratedCount > 0) {\n\t\t\tconsole.error(\n\t\t\t\t`[rpc] Rehydrated ${rehydratedCount} background subagent${rehydratedCount === 1 ? \"\" : \"s\"} from disk`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Pending extension UI requests waiting for response. Keep the emitted\n\t// payload alongside its callbacks so recovery snapshots can reconstruct the\n\t// answer UI after a Dashboard reload or replay gap.\n\tconst pendingExtensionRequests = new Map<string, PendingRpcExtensionRequest>();\n\n\t// Shutdown request flag\n\tlet shutdownRequested = false;\n\tlet dailyCostTracker: DailyCostTracker | undefined;\n\tlet dailyCostTrackerPrimed = false;\n\n\t// Extension UI context uses the RPC protocol; built by a module-scope\n\t// factory so the dialog round trip is unit-testable (see createRpcExtensionUIContext).\n\tconst createExtensionUIContext = (): ExtensionUIContext =>\n\t\tcreateRpcExtensionUIContext(output, pendingExtensionRequests, () => void session.abort());\n\n\t// Set up extensions with RPC-based UI context\n\tawait session.bindExtensions({\n\t\tuiContext: createExtensionUIContext(),\n\t\tcommandContextActions: {\n\t\t\twaitForIdle: () => session.agent.waitForIdle(),\n\t\t\tnewSession: async (options) => {\n\t\t\t\t// Delegate to AgentSession (handles setup + agent state sync)\n\t\t\t\tconst success = await session.newSession(options);\n\t\t\t\treturn { cancelled: !success };\n\t\t\t},\n\t\t\tfork: async (entryId) => {\n\t\t\t\tconst result = await session.fork(entryId);\n\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t},\n\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\tlabel: options?.label,\n\t\t\t\t});\n\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t},\n\t\t\tswitchSession: async (sessionPath) => {\n\t\t\t\tconst success = await session.switchSession(sessionPath);\n\t\t\t\treturn { cancelled: !success };\n\t\t\t},\n\t\t\treload: async () => {\n\t\t\t\tawait session.reload();\n\t\t\t},\n\t\t},\n\t\tshutdownHandler: () => {\n\t\t\tshutdownRequested = true;\n\t\t},\n\t\tonError: (err) => {\n\t\t\toutput({ type: \"extension_error\", extensionPath: err.extensionPath, event: err.event, error: err.error });\n\t\t},\n\t});\n\n\tconst getDailyCost = async (): Promise<number> => {\n\t\tdailyCostTracker ??= new DailyCostTracker();\n\t\tif (!dailyCostTrackerPrimed) {\n\t\t\tawait dailyCostTracker.refresh();\n\t\t\tdailyCostTrackerPrimed = true;\n\t\t}\n\t\treturn dailyCostTracker.getDailyCost();\n\t};\n\n\tconst cwd = session.sessionManager.getCwd();\n\tconst tabTitleSettings = session.settingsManager.getTabTitleSettings();\n\tconst tabTitleGenerator =\n\t\t!session.sessionName && tabTitleSettings?.enabled !== false\n\t\t\t? new TabTitleGenerator(tabTitleSettings, {\n\t\t\t\t\tsetTitle: () => {},\n\t\t\t\t\tsetSessionName: (name) => {\n\t\t\t\t\t\tif (!session.sessionName) {\n\t\t\t\t\t\t\tsession.setSessionName(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tgetSessionName: () => session.sessionName,\n\t\t\t\t\tgetMessages: () => session.messages,\n\t\t\t\t\tgetModel: () => session.model,\n\t\t\t\t\tgetModelRegistry: () => session.modelRegistry,\n\t\t\t\t\tgetProvider: () => session.model?.provider,\n\t\t\t\t\tgetAgentModelsOverride: (name) => session.settingsManager.getAgentModelsForAgent(name),\n\t\t\t\t\tgetBranch: () => getGitBranch(cwd),\n\t\t\t\t\tgetRepo: () => basename(cwd),\n\t\t\t\t\tgetCwd: () => cwd,\n\t\t\t\t\tonError: (err) => {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`[rpc] Tab title auto-generation failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t// Dashboard-launched runtimes (--ui dashboard) get message_update events\n\t// projected before serialization: the cumulative `message` and\n\t// `assistantMessageEvent.partial` fields are quadratic in response length on\n\t// the JSONL pipe, and no dashboard consumer reads them (deltas, message_end,\n\t// and get_dashboard_snapshot responses carry the authoritative data). Generic\n\t// RPC consumers keep the full protocol unchanged. Only the event stream is\n\t// projected — command responses (output() calls below) always stay complete.\n\tconst projectEvents = session.uiType === \"dashboard\";\n\n\t// Output all agent events as JSON\n\tsession.subscribe((event) => {\n\t\tif (tabTitleGenerator && !session.sessionName) {\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\ttabTitleGenerator.onToolEnd({\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\tisError: event.isError,\n\t\t\t\t\tresult: event.result,\n\t\t\t\t});\n\t\t\t} else if (event.type === \"message_end\") {\n\t\t\t\ttabTitleGenerator.onMessageEnd(event.message);\n\t\t\t}\n\t\t}\n\t\toutput(projectEvents ? projectDashboardRpcEvent(event as unknown as Record<string, unknown>) : event);\n\t});\n\n\t// Handle a single command\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse> => {\n\t\tconst id = command.id;\n\n\t\tswitch (command.type) {\n\t\t\t// =================================================================\n\t\t\t// Prompting\n\t\t\t// =================================================================\n\n\t\t\tcase \"prompt\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"prompt\", rejection);\n\t\t\t\t// Don't await - events will stream\n\t\t\t\t// Extension commands are executed immediately, file prompt templates are expanded\n\t\t\t\t// If streaming and streamingBehavior specified, queues via steer/followUp\n\t\t\t\t//\n\t\t\t\t// A subagent child (--ui agent) whose prompt settles without the agent\n\t\t\t\t// loop ever starting (e.g. an extension command consumed the task) would\n\t\t\t\t// otherwise idle forever: its parent waits on agent_end for completion.\n\t\t\t\t// Report that outcome as a late failure so the parent can terminate it.\n\t\t\t\t// The agent's own subscription delivers agent_start synchronously — the\n\t\t\t\t// session-level event queue would race the settled prompt promise.\n\t\t\t\tconst isSubagentChild = session.uiType === \"agent\";\n\t\t\t\tlet sawAgentStart = false;\n\t\t\t\tconst unsubscribe = isSubagentChild\n\t\t\t\t\t? session.agent.subscribe((event) => {\n\t\t\t\t\t\t\tif (event.type === \"agent_start\") sawAgentStart = true;\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\tsession\n\t\t\t\t\t.prompt(command.message, {\n\t\t\t\t\t\timages: command.images,\n\t\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tunsubscribe?.();\n\t\t\t\t\t\tif (isSubagentChild && !sawAgentStart) {\n\t\t\t\t\t\t\toutput(\n\t\t\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"prompt\",\n\t\t\t\t\t\t\t\t\t\"Prompt was handled without starting the agent loop (for example, an extension command consumed the task).\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tunsubscribe?.();\n\t\t\t\t\t\toutput(error(id, \"prompt\", e.message));\n\t\t\t\t\t});\n\t\t\t\treturn success(id, \"prompt\");\n\t\t\t}\n\n\t\t\tcase \"steer\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"steer\", rejection);\n\t\t\t\tawait session.steer(command.message, command.images);\n\t\t\t\treturn success(id, \"steer\");\n\t\t\t}\n\n\t\t\tcase \"follow_up\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"follow_up\", rejection);\n\t\t\t\tawait session.followUp(command.message, command.images);\n\t\t\t\treturn success(id, \"follow_up\");\n\t\t\t}\n\n\t\t\tcase \"abort\": {\n\t\t\t\tconst { abortBackgroundAgents } = await import(\"../../core/tools/subagent.js\");\n\t\t\t\tabortBackgroundAgents();\n\t\t\t\tawait session.abort();\n\t\t\t\treturn success(id, \"abort\");\n\t\t\t}\n\n\t\t\tcase \"new_session\": {\n\t\t\t\tconst options = command.parentSession ? { parentSession: command.parentSession } : undefined;\n\t\t\t\tconst cancelled = !(await session.newSession(options));\n\t\t\t\treturn success(id, \"new_session\", { cancelled });\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tawait session.reload();\n\t\t\t\treturn success(id, \"reload\");\n\t\t\t}\n\n\t\t\tcase \"dream\": {\n\t\t\t\treturn success(id, \"dream\", await runDreamForRpc(session, command.args));\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// State\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_state\": {\n\t\t\t\treturn success(id, \"get_state\", getStateForRpc(session, modelFallbackMessage));\n\t\t\t}\n\n\t\t\tcase \"get_dashboard_snapshot\": {\n\t\t\t\tconst snapshotId = id ?? crypto.randomUUID();\n\t\t\t\tconst data: RpcDashboardSnapshot = {\n\t\t\t\t\tsnapshotId,\n\t\t\t\t\tstate: getStateForRpc(session, modelFallbackMessage),\n\t\t\t\t\tmessages: getDashboardMessagesForRpc(session),\n\t\t\t\t\tbackgroundAgents: getBackgroundAgents().map(toRpcBackgroundAgentInfo),\n\t\t\t\t\tpendingExtensionUiRequests: [...pendingExtensionRequests.values()].map(({ request }) => request),\n\t\t\t\t};\n\t\t\t\treturn success(id, \"get_dashboard_snapshot\", data);\n\t\t\t}\n\n\t\t\tcase \"get_resources\": {\n\t\t\t\treturn success(id, \"get_resources\", getResourcesForRpc(session));\n\t\t\t}\n\n\t\t\tcase \"get_git_branch\": {\n\t\t\t\treturn success(id, \"get_git_branch\", { branch: getGitBranch(session.sessionManager.getCwd()) });\n\t\t\t}\n\n\t\t\tcase \"get_daily_cost\": {\n\t\t\t\treturn success(id, \"get_daily_cost\", { cost: await getDailyCost() });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Model\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((m) => m.provider === command.provider && m.id === command.modelId);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_model\", `Model not found: ${command.provider}/${command.modelId}`);\n\t\t\t\t}\n\t\t\t\tawait session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", model);\n\t\t\t}\n\n\t\t\tcase \"resolve_model\": {\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst result = parseModelPattern(command.pattern, models);\n\t\t\t\tif (!result.model) {\n\t\t\t\t\treturn success(id, \"resolve_model\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"resolve_model\", {\n\t\t\t\t\tmodel: result.model,\n\t\t\t\t\twarning: result.warning,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel();\n\t\t\t\tif (!result) {\n\t\t\t\t\treturn success(id, \"cycle_model\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_model\", result);\n\t\t\t}\n\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\treturn success(id, \"get_available_models\", { models });\n\t\t\t}\n\n\t\t\tcase \"buddy_hatch\": {\n\t\t\t\tconst model = session.model;\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"buddy_hatch\", \"No model available. Set a model first.\");\n\t\t\t\t}\n\t\t\t\tconst apiKey = await session.modelRegistry.getApiKey(model);\n\t\t\t\tif (!apiKey) {\n\t\t\t\t\treturn error(id, \"buddy_hatch\", \"No API key available for the current model.\");\n\t\t\t\t}\n\t\t\t\tconst { BuddyManager } = await import(\"../../core/buddy/buddy-manager.js\");\n\t\t\t\tconst manager = new BuddyManager();\n\t\t\t\tconst state = await manager.hatch(model, apiKey);\n\t\t\t\treturn success(id, \"buddy_hatch\", { state });\n\t\t\t}\n\n\t\t\tcase \"buddy_reroll\": {\n\t\t\t\tconst model = session.model;\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"buddy_reroll\", \"No model available. Set a model first.\");\n\t\t\t\t}\n\t\t\t\tconst apiKey = await session.modelRegistry.getApiKey(model);\n\t\t\t\tif (!apiKey) {\n\t\t\t\t\treturn error(id, \"buddy_reroll\", \"No API key available for the current model.\");\n\t\t\t\t}\n\t\t\t\tconst { BuddyManager } = await import(\"../../core/buddy/buddy-manager.js\");\n\t\t\t\tconst manager = new BuddyManager();\n\t\t\t\tif (!manager.hasStoredBuddy()) {\n\t\t\t\t\treturn error(id, \"buddy_reroll\", \"No buddy to reroll. Use hatch first.\");\n\t\t\t\t}\n\t\t\t\tconst state = await manager.reroll(model, apiKey);\n\t\t\t\treturn success(id, \"buddy_reroll\", { state });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Thinking\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_thinking_level\": {\n\t\t\t\tsession.setThinkingLevel(command.level);\n\t\t\t\treturn success(id, \"set_thinking_level\");\n\t\t\t}\n\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\tif (!level) {\n\t\t\t\t\treturn success(id, \"cycle_thinking_level\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_thinking_level\", { level });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Queue Modes\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_steering_mode\": {\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn success(id, \"set_steering_mode\");\n\t\t\t}\n\n\t\t\tcase \"set_follow_up_mode\": {\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn success(id, \"set_follow_up_mode\");\n\t\t\t}\n\n\t\t\tcase \"get_pending_messages\": {\n\t\t\t\treturn success(id, \"get_pending_messages\", getPendingMessagesForRpc(session));\n\t\t\t}\n\n\t\t\tcase \"clear_pending_messages\": {\n\t\t\t\treturn success(id, \"clear_pending_messages\", session.clearQueue());\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Compaction\n\t\t\t// =================================================================\n\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact(command.customInstructions);\n\t\t\t\treturn success(id, \"compact\", result);\n\t\t\t}\n\n\t\t\tcase \"set_auto_compaction\": {\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_compaction\");\n\t\t\t}\n\n\t\t\tcase \"abort_compaction\": {\n\t\t\t\tsession.abortCompaction();\n\t\t\t\treturn success(id, \"abort_compaction\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Retry\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_auto_retry\": {\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_retry\");\n\t\t\t}\n\n\t\t\tcase \"abort_retry\": {\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn success(id, \"abort_retry\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Bash\n\t\t\t// =================================================================\n\n\t\t\tcase \"bash\": {\n\t\t\t\tconst result = await session.executeBash(command.command);\n\t\t\t\treturn success(id, \"bash\", result);\n\t\t\t}\n\n\t\t\tcase \"abort_bash\": {\n\t\t\t\tsession.abortBash();\n\t\t\t\treturn success(id, \"abort_bash\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Session\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_session_stats\": {\n\t\t\t\tconst stats = session.getSessionStats();\n\t\t\t\treturn success(id, \"get_session_stats\", stats);\n\t\t\t}\n\n\t\t\tcase \"get_performance_stats\": {\n\t\t\t\treturn success(id, \"get_performance_stats\", getPerformanceStatsData(session));\n\t\t\t}\n\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath);\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"import_jsonl\": {\n\t\t\t\tconst cancelled = !(await session.importFromJsonl(command.inputPath));\n\t\t\t\treturn success(id, \"import_jsonl\", { cancelled });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst cancelled = !(await session.switchSession(command.sessionPath));\n\t\t\t\treturn success(id, \"switch_session\", { cancelled });\n\t\t\t}\n\n\t\t\tcase \"delete_session\": {\n\t\t\t\tconst result = await deleteSessionForRpc(session.sessionManager, command.sessionPath);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn error(id, \"delete_session\", result.error);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"delete_session\", { method: result.method });\n\t\t\t}\n\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await session.fork(command.entryId);\n\t\t\t\treturn success(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"get_fork_messages\": {\n\t\t\t\tconst messages = session.getForkableMessages();\n\t\t\t\treturn success(id, \"get_fork_messages\", { messages });\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\treturn success(id, \"get_tree\", getTreeForRpc(session.sessionManager));\n\t\t\t}\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await navigateTreeForRpc(session, command.targetId, {\n\t\t\t\t\t\tsummarize: command.summarize,\n\t\t\t\t\t\tcustomInstructions: command.customInstructions,\n\t\t\t\t\t\treplaceInstructions: command.replaceInstructions,\n\t\t\t\t\t\tlabel: command.label,\n\t\t\t\t\t});\n\t\t\t\t\treturn success(id, \"navigate_tree\", result);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn error(id, \"navigate_tree\", e instanceof Error ? e.message : String(e));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"get_last_assistant_text\": {\n\t\t\t\tconst text = session.getLastAssistantText();\n\t\t\t\treturn success(id, \"get_last_assistant_text\", { text });\n\t\t\t}\n\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) {\n\t\t\t\t\treturn error(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn success(id, \"set_session_name\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Messages\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_messages\": {\n\t\t\t\treturn success(id, \"get_messages\", { messages: session.messages });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Command discovery (resource commands plus client-handled built-ins)\n\t\t\t// =================================================================\n\n\t\t\t// =================================================================\n\t\t\t// Session Listing\n\t\t\t// =================================================================\n\n\t\t\tcase \"list_sessions\": {\n\t\t\t\tconst cwd = session.sessionManager.getCwd();\n\t\t\t\tconst sessionDir = session.sessionManager.getSessionDir();\n\t\t\t\tconst sessions = await SessionManager.list(cwd, sessionDir);\n\t\t\t\treturn success(id, \"list_sessions\", { sessions: sessions.map(toRpcSessionInfo) });\n\t\t\t}\n\n\t\t\tcase \"list_all_sessions\": {\n\t\t\t\treturn success(id, \"list_all_sessions\", { sessions: await listAllSessionsForRpc() });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Background agents\n\t\t\t// =================================================================\n\n\t\t\tcase \"list_background_agents\": {\n\t\t\t\treturn success(id, \"list_background_agents\", {\n\t\t\t\t\tagents: getBackgroundAgents().map(toRpcBackgroundAgentInfo),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"steer_background_agent\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"steer_background_agent\", rejection);\n\t\t\t\tawait steerBackgroundAgent(command.agentId, command.message);\n\t\t\t\treturn success(id, \"steer_background_agent\");\n\t\t\t}\n\n\t\t\tcase \"get_background_agent_pending\": {\n\t\t\t\treturn success(\n\t\t\t\t\tid,\n\t\t\t\t\t\"get_background_agent_pending\",\n\t\t\t\t\tawait getBackgroundAgentPendingSteering(command.agentId),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"list_agent_types\": {\n\t\t\t\treturn success(id, \"list_agent_types\", {\n\t\t\t\t\tagentTypes: listAgentTypesForRpc(session.sessionManager.getCwd()),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Settings (persistent defaults)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_settings\": {\n\t\t\t\tconst result = await getFreshSettingsForRpc(session.settingsManager, session.modelRegistry);\n\t\t\t\treturn result.ok ? success(id, \"get_settings\", result.settings) : error(id, \"get_settings\", result.error);\n\t\t\t}\n\n\t\t\tcase \"set_settings\": {\n\t\t\t\tconst result = await setSettingsForRpc(session.settingsManager, session.modelRegistry, command.settings);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn error(id, \"set_settings\", result.error);\n\t\t\t\t}\n\t\t\t\treturn success(\n\t\t\t\t\tid,\n\t\t\t\t\t\"set_settings\",\n\t\t\t\t\tresult.warnings && result.warnings.length > 0\n\t\t\t\t\t\t? { ...result.settings, warnings: result.warnings }\n\t\t\t\t\t\t: result.settings,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"evaluate_context_trust\": {\n\t\t\t\tconst result = evaluateContextTrustForRpc(session.settingsManager, command.path);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"evaluate_context_trust\", result.evaluation)\n\t\t\t\t\t: error(id, \"evaluate_context_trust\", result.error);\n\t\t\t}\n\n\t\t\tcase \"trust_context_folder\": {\n\t\t\t\tconst result = await trustContextFolderForRpc(session.settingsManager, command.path, session.modelRegistry);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"trust_context_folder\", result.result)\n\t\t\t\t\t: error(id, \"trust_context_folder\", result.error);\n\t\t\t}\n\n\t\t\tcase \"untrust_context_folder\": {\n\t\t\t\tconst result = await untrustContextFolderForRpc(\n\t\t\t\t\tsession.settingsManager,\n\t\t\t\t\tcommand.path,\n\t\t\t\t\tsession.modelRegistry,\n\t\t\t\t);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"untrust_context_folder\", result.result)\n\t\t\t\t\t: error(id, \"untrust_context_folder\", result.error);\n\t\t\t}\n\n\t\t\tcase \"remove_trusted_context_folder\": {\n\t\t\t\tconst result = await removeTrustedContextFolderForRpc(\n\t\t\t\t\tsession.settingsManager,\n\t\t\t\t\tcommand.path,\n\t\t\t\t\tsession.modelRegistry,\n\t\t\t\t);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"remove_trusted_context_folder\", result.result)\n\t\t\t\t\t: error(id, \"remove_trusted_context_folder\", result.error);\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Version\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_version\": {\n\t\t\t\treturn success(id, \"get_version\", { version: VERSION });\n\t\t\t}\n\n\t\t\tcase \"get_commands\": {\n\t\t\t\treturn success(id, \"get_commands\", { commands: getCommandsForRpc(session) });\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as { type: string; id?: string };\n\t\t\t\treturn error(unknownCommand.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t * Called after handling each command when waiting for the next command.\n\t */\n\tlet detachInput = () => {};\n\n\tasync function shutdown(): Promise<never> {\n\t\tcancelPendingRpcExtensionRequests(pendingExtensionRequests);\n\n\t\tconst currentRunner = session.extensionRunner;\n\t\tif (currentRunner?.hasHandlers(\"session_shutdown\")) {\n\t\t\tawait currentRunner.emit({ type: \"session_shutdown\" });\n\t\t}\n\n\t\tdailyCostTracker?.dispose();\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tprocess.exit(0);\n\t}\n\n\tasync function checkShutdownRequested(): Promise<void> {\n\t\tif (!shutdownRequested) return;\n\t\tawait shutdown();\n\t}\n\n\tconst handleInputLine = async (line: string) => {\n\t\tlet parsed: any;\n\t\ttry {\n\t\t\tparsed = JSON.parse(line);\n\t\t} catch (e: any) {\n\t\t\toutput(error(undefined, \"parse\", `Failed to parse JSON: ${e.message}`));\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Handle extension UI responses\n\t\t\tif (parsed.type === \"extension_ui_response\") {\n\t\t\t\tconst response = parsed as RpcExtensionUIResponse;\n\t\t\t\tconst pending = pendingExtensionRequests.get(response.id);\n\t\t\t\tif (pending) {\n\t\t\t\t\tpendingExtensionRequests.delete(response.id);\n\t\t\t\t\tpending.resolve(response);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle regular commands\n\t\t\tconst command = parsed as RpcCommand;\n\t\t\tconst response = await handleCommand(command);\n\t\t\t// Emit the barrier before the response. Stdout preserves byte order even\n\t\t\t// when these lines arrive in separate chunks, so RuntimePool always records\n\t\t\t// the EventHub sequence before the response promise can resume.\n\t\t\tif (command.type === \"get_dashboard_snapshot\" && response.success) {\n\t\t\t\tconst snapshot = response as Extract<RpcResponse, { command: \"get_dashboard_snapshot\"; success: true }>;\n\t\t\t\toutput({ type: \"dashboard_snapshot_barrier\", snapshotId: snapshot.data.snapshotId });\n\t\t\t}\n\t\t\toutput(response);\n\n\t\t\t// Check for deferred shutdown request (idle between commands)\n\t\t\tawait checkShutdownRequested();\n\t\t} catch (e: any) {\n\t\t\tconst id = parsed?.id;\n\t\t\tconst cmd = parsed?.type || \"unknown\";\n\t\t\toutput(error(id, cmd, `Command failed: ${e.message}`));\n\t\t}\n\t};\n\n\tconst onInputEnd = () => {\n\t\tvoid shutdown();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\tprocess.stdin.on(\"error\", () => {\n\t\tvoid shutdown();\n\t});\n\n\tdetachInput = (() => {\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, (line) => {\n\t\t\tvoid handleInputLine(line);\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n"]}
1
+ {"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: RpcEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport * as crypto from \"node:crypto\";\nimport { basename } from \"node:path\";\nimport { isValidThinkingLevel, VALID_THINKING_LEVELS } from \"../../cli/args.js\";\nimport { VERSION } from \"../../config.js\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport {\n\tcanonicalizeTrustedRoots,\n\tmatchContextTrust,\n\tvalidateTrustedContextFolder,\n\tvalidateTrustedContextFolders,\n} from \"../../core/context-trust.js\";\nimport { DailyCostTracker } from \"../../core/daily-cost-tracker.js\";\nimport {\n\tacquireDreamLock,\n\tbuildDreamPrompt,\n\tcleanupDreamTmpDirs,\n\tparseDreamCommand,\n\tperformDreamBackup,\n\tpruneOldBackups,\n\tresolveDreamContext,\n\tvalidateArchivePath,\n\tvalidateMemoryLinks,\n} from \"../../core/dream.js\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.js\";\nimport { getGitBranch } from \"../../core/git-branch.js\";\nimport type { ModelRegistry } from \"../../core/model-registry.js\";\nimport { parseModelPattern, resolveModelScopePatterns } from \"../../core/model-resolver.js\";\nimport { takeOverStdout, writeRawStdout } from \"../../core/output-guard.js\";\nimport type { SessionInfo, SessionTreeNode } from \"../../core/session-manager.js\";\nimport { SessionManager } from \"../../core/session-manager.js\";\nimport type { SettingsManager, TransportSetting } from \"../../core/settings-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS, parseBuiltinSlashCommand } from \"../../core/slash-commands.js\";\nimport { TabTitleGenerator } from \"../../core/tab-title.js\";\nimport { validateThinkingLevelForModel } from \"../../core/thinking.js\";\nimport { resolveToCwd } from \"../../core/tools/path-utils.js\";\nimport {\n\ttype BackgroundAgentInfo,\n\tdiscoverAgentTypes,\n\tgetBackgroundAgentPendingSteering,\n\tgetBackgroundAgents,\n\trehydrateBackgroundAgentsFromDisk,\n\tsteerBackgroundAgent,\n} from \"../../core/tools/subagent.js\";\nimport { type Theme, theme } from \"../interactive/theme/theme.js\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.js\";\nimport { createDashboardRpcEventProjector } from \"./rpc-event-projection.js\";\nimport type {\n\tRpcAgentTypeInfo,\n\tRpcBackgroundAgentInfo,\n\tRpcBlockingExtensionUIRequest,\n\tRpcCommand,\n\tRpcContextTrustEvaluation,\n\tRpcContextTrustMutationResult,\n\tRpcDashboardSnapshot,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcPendingMessages,\n\tRpcPerformanceStats,\n\tRpcResources,\n\tRpcResponse,\n\tRpcScopedModel,\n\tRpcSessionInfo,\n\tRpcSessionState,\n\tRpcSettingsSnapshot,\n\tRpcSettingsUpdate,\n\tRpcSlashCommand,\n\tRpcTreeNode,\n\tRpcTrustedFolderRemovalResult,\n} from \"./rpc-types.js\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcDashboardSnapshot,\n\tRpcDashboardSnapshotBarrierEvent,\n\tRpcEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcResponse,\n\tRpcSessionState,\n} from \"./rpc-types.js\";\n\n/**\n * Map a core {@link SessionInfo} to the RPC DTO, converting Date fields to ISO strings.\n * Shared by the `list_sessions` and `list_all_sessions` handlers so their shapes cannot drift.\n */\nexport function toRpcSessionInfo(s: SessionInfo): RpcSessionInfo {\n\treturn {\n\t\tpath: s.path,\n\t\tid: s.id,\n\t\tcwd: s.cwd,\n\t\tname: s.name,\n\t\tcreated: s.created.toISOString(),\n\t\tmodified: s.modified.toISOString(),\n\t\tmessageCount: s.messageCount,\n\t\tfirstMessage: s.firstMessage,\n\t};\n}\n\nexport function getPerformanceStatsData(session: Pick<AgentSession, \"getPerformanceTracker\">): RpcPerformanceStats {\n\tconst tracker = session.getPerformanceTracker();\n\treturn { models: tracker.getAllModelSummaries() };\n}\n\nexport function getScopedModelsForRpc(session: Pick<AgentSession, \"scopedModels\">): RpcScopedModel[] {\n\treturn session.scopedModels.map(({ model, thinkingLevel }) => ({\n\t\tprovider: model.provider,\n\t\tid: model.id,\n\t\tname: model.name,\n\t\treasoning: model.reasoning,\n\t\tthinkingLevel,\n\t}));\n}\n\nexport function getResourcesForRpc(\n\tsession: Pick<AgentSession, \"resourceLoader\" | \"getFilteredSkills\" | \"promptTemplates\">,\n): RpcResources {\n\tconst extensionsResult = session.resourceLoader.getExtensions();\n\treturn {\n\t\tcontextFiles: session.resourceLoader.getAgentsFiles().agentsFiles.map((file) => ({ path: file.path })),\n\t\tskills: session.getFilteredSkills().map((skill) => ({ name: skill.name, description: skill.description })),\n\t\textensions: extensionsResult.extensions.map((extension) => ({\n\t\t\tpath: extension.path,\n\t\t\tname: extension.sourceInfo.source || basename(extension.path),\n\t\t})),\n\t\tpromptTemplates: session.promptTemplates.map((template) => ({\n\t\t\tname: template.name,\n\t\t\tdescription: template.description,\n\t\t})),\n\t\tsystemPromptPresent:\n\t\t\tsession.resourceLoader.getSystemPrompt() !== undefined ||\n\t\t\tsession.resourceLoader.getAppendSystemPrompt().length > 0,\n\t};\n}\n\nexport function getCommandsForRpc(\n\tsession: Pick<AgentSession, \"extensionRunner\" | \"promptTemplates\" | \"getFilteredSkills\">,\n): RpcSlashCommand[] {\n\tconst commands = new Map<string, RpcSlashCommand>();\n\tfor (const command of session.extensionRunner?.getRegisteredCommands() ?? []) {\n\t\tcommands.set(command.invocationName, {\n\t\t\tname: command.invocationName,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"extension\",\n\t\t\tsourceInfo: command.sourceInfo,\n\t\t});\n\t}\n\tfor (const template of session.promptTemplates) {\n\t\tif (!commands.has(template.name)) {\n\t\t\tcommands.set(template.name, {\n\t\t\t\tname: template.name,\n\t\t\t\tdescription: template.description,\n\t\t\t\tsource: \"prompt\",\n\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const skill of session.getFilteredSkills()) {\n\t\tconst name = `skill:${skill.name}`;\n\t\tif (!commands.has(name)) {\n\t\t\tcommands.set(name, { name, description: skill.description, source: \"skill\", sourceInfo: skill.sourceInfo });\n\t\t}\n\t}\n\t// Built-ins deliberately win collisions, matching interactive autocomplete and\n\t// ensuring a colliding resource can never make built-in text reach the model.\n\tfor (const command of BUILTIN_SLASH_COMMANDS) {\n\t\tcommands.set(command.name, {\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"builtin\",\n\t\t\tdashboard: command.dashboard !== false,\n\t\t});\n\t}\n\treturn [...commands.values()];\n}\n\nexport function getBuiltinPromptRejection(message: string): string | undefined {\n\tconst parsed = parseBuiltinSlashCommand(message);\n\treturn parsed\n\t\t? `Built-in slash command /${parsed.command.name} must be handled by the RPC client; it was not sent to the model.`\n\t\t: undefined;\n}\n\nasync function runDreamForRpc(session: AgentSession, args = \"\"): Promise<{ message: string }> {\n\tconst command = parseDreamCommand(`/dream${args ? ` ${args}` : \"\"}`);\n\tif (command.type === \"showBackup\") {\n\t\treturn { message: `Dream backup path: ${session.settingsManager.getDreamArchivePath()}` };\n\t}\n\tif (command.type === \"setBackup\") {\n\t\tconst absolutePath = resolveToCwd(command.path, session.sessionManager.getCwd());\n\t\tconst context = await resolveDreamContext(session.settingsManager);\n\t\tvalidateArchivePath(absolutePath, [\n\t\t\tcontext.globalMemoryDir,\n\t\t\t...context.projectMemoryDirs,\n\t\t\t...context.claudeMemoryDirs,\n\t\t]);\n\t\tif (session.settingsManager.hasGlobalSettingsLoadError()) {\n\t\t\tthrow new Error(\"Cannot write dream backup path: the global settings file failed to load\");\n\t\t}\n\t\tsession.settingsManager.drainErrors();\n\t\tsession.settingsManager.setDreamArchivePath(absolutePath);\n\t\ttry {\n\t\t\tawait session.settingsManager.flush();\n\t\t} catch (error) {\n\t\t\tsession.settingsManager.reload();\n\t\t\tthrow error;\n\t\t}\n\t\tconst writeErrors = session.settingsManager.drainErrors();\n\t\tif (writeErrors.length > 0) {\n\t\t\tsession.settingsManager.reload();\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to persist dream backup path: ${writeErrors.map((entry) => `${entry.scope}: ${entry.error.message}`).join(\"; \")}`,\n\t\t\t);\n\t\t}\n\t\treturn { message: `Dream backup path set to: ${absolutePath}` };\n\t}\n\n\tlet releaseLock: (() => void) | undefined;\n\tlet context: Awaited<ReturnType<typeof resolveDreamContext>> | undefined;\n\ttry {\n\t\treleaseLock = await acquireDreamLock();\n\t\tcontext = await resolveDreamContext(session.settingsManager);\n\t\tvalidateArchivePath(context.archivePath, [\n\t\t\tcontext.globalMemoryDir,\n\t\t\t...context.projectMemoryDirs,\n\t\t\t...context.claudeMemoryDirs,\n\t\t]);\n\t\tconst backup = await performDreamBackup(context);\n\t\tif (!backup.verified) {\n\t\t\tthrow new Error(`Backup verification failed; check ${backup.backupPath}`);\n\t\t}\n\t\tawait session.prompt(buildDreamPrompt(context, backup), { source: \"rpc\" });\n\t\tconst links = validateMemoryLinks([context.globalMemoryDir, ...context.projectMemoryDirs]);\n\t\tawait pruneOldBackups(context.archivePath);\n\t\treturn {\n\t\t\tmessage: links.valid\n\t\t\t\t? `Dream completed. Backup: ${backup.backupPath}`\n\t\t\t\t: `Dream completed with ${links.brokenLinks.length} broken memory link(s). Backup: ${backup.backupPath}`,\n\t\t};\n\t} finally {\n\t\treleaseLock?.();\n\t\tif (context) cleanupDreamTmpDirs([context.globalMemoryDir, ...context.projectMemoryDirs]);\n\t}\n}\n\nexport function getPendingMessagesForRpc(\n\tsession: Pick<\n\t\tAgentSession,\n\t\t\"getSteeringMessages\" | \"getFollowUpMessages\" | \"getSteeringMessagePayloads\" | \"getFollowUpMessagePayloads\"\n\t>,\n): RpcPendingMessages {\n\treturn {\n\t\tsteering: [...session.getSteeringMessages()],\n\t\tfollowUp: [...session.getFollowUpMessages()],\n\t\tsteeringMessages: session.getSteeringMessagePayloads().map((message) => ({\n\t\t\ttext: message.text,\n\t\t\timages: message.images ? [...message.images] : undefined,\n\t\t})),\n\t\tfollowUpMessages: session.getFollowUpMessagePayloads().map((message) => ({\n\t\t\ttext: message.text,\n\t\t\timages: message.images ? [...message.images] : undefined,\n\t\t})),\n\t};\n}\n\nexport function getStateForRpc(session: AgentSession, modelFallbackMessage?: string): RpcSessionState {\n\treturn {\n\t\tmodel: session.model,\n\t\tscopedModels: getScopedModelsForRpc(session),\n\t\ttasks: session.tasks.map((task) => ({ ...task })),\n\t\tusingSubscription: session.model ? session.modelRegistry.isUsingOAuth(session.model) : false,\n\t\tthinkingLevel: session.thinkingLevel,\n\t\tavailableThinkingLevels: session.getAvailableThinkingLevels(),\n\t\tisStreaming: session.isStreaming,\n\t\tisRetrying: session.isRetrying,\n\t\tretryAttempt: session.retryAttempt,\n\t\tisCompacting: session.isCompacting,\n\t\tsteeringMode: session.steeringMode,\n\t\tfollowUpMode: session.followUpMode,\n\t\tsessionFile: session.sessionFile,\n\t\tsessionId: session.sessionId,\n\t\tsessionName: session.sessionName,\n\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\tmessageCount: session.messages.length,\n\t\tpendingMessageCount: session.pendingMessageCount,\n\t\tcontextUsage: session.getContextUsage(),\n\t\tmodelFallbackMessage,\n\t};\n}\n\n/**\n * Dashboard transcript snapshots use persisted branch context whenever the\n * runtime is not streaming so failed attempts removed from the next provider\n * request remain visible during retry backoff and after recovery. The snapshot\n * state carries retry activity separately, preventing those historical errors\n * from being mistaken for terminal failures.\n */\nexport function getDashboardMessagesForRpc(session: AgentSession) {\n\treturn [...(session.isStreaming ? session.messages : session.sessionManager.buildSessionContext().messages)];\n}\n\n/**\n * Handle the `delete_session` RPC command: wires the active session into the core\n * {@link SessionManager.deleteSession} guard and maps the result to a discriminated\n * union the handler serializes. Extracted (like {@link getPerformanceStatsData}) so the guard\n * wiring is unit-testable without a live RPC session. Note: the authoritative active-session\n * guard lives in core — this passes the active path through; it does not re-implement it.\n * Uses the same unrestricted path-based addressing as `switch_session` (no containment guard —\n * see PR #315 discussion).\n */\nexport async function deleteSessionForRpc(\n\tsessionManager: Pick<SessionManager, \"getSessionFile\">,\n\tsessionPath: string,\n): Promise<{ ok: true; method: \"trash\" | \"unlink\" } | { ok: false; error: string }> {\n\tconst activePath = sessionManager.getSessionFile();\n\tconst result = await SessionManager.deleteSession(sessionPath, {\n\t\tactiveSessionPath: activePath,\n\t});\n\tif (!result.ok) {\n\t\treturn { ok: false, error: result.error ?? \"Unknown deletion error\" };\n\t}\n\treturn { ok: true, method: result.method };\n}\n\n/** Handle the `list_all_sessions` RPC command: list every project's sessions as RPC DTOs. */\nexport async function listAllSessionsForRpc(): Promise<RpcSessionInfo[]> {\n\tconst sessions = await SessionManager.listAll();\n\treturn sessions.map(toRpcSessionInfo);\n}\n\n/**\n * Map a {@link BackgroundAgentInfo} registry entry to the RPC DTO, converting the\n * epoch-ms timestamp to an ISO string. Shared shape guard for `list_background_agents`.\n */\nexport function toRpcBackgroundAgentInfo(a: Readonly<BackgroundAgentInfo>): RpcBackgroundAgentInfo {\n\treturn {\n\t\tagentId: a.agentId,\n\t\tagentType: a.agentType,\n\t\ttaskSummary: a.taskSummary,\n\t\tstartedAt: new Date(a.startedAt).toISOString(),\n\t\tstatus: a.status,\n\t\tsessionDir: a.sessionDir,\n\t\tsessionFile: a.sessionFile,\n\t\tcwd: a.cwd,\n\t\tarbitrations: a.arbitrations?.map((record) => structuredClone(record)),\n\t};\n}\n\n/** Discover available subagent types for RPC clients, sorted by display name. */\nexport function listAgentTypesForRpc(cwd: string): RpcAgentTypeInfo[] {\n\treturn [...discoverAgentTypes(cwd).values()]\n\t\t.map(({ name, description }) => ({ name, description }))\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/** The slice of SettingsManager the settings RPC handlers need. */\ntype SettingsReader = Pick<\n\tSettingsManager,\n\t| \"getDefaultProvider\"\n\t| \"getDefaultModel\"\n\t| \"getDefaultThinkingLevel\"\n\t| \"getSteeringMode\"\n\t| \"getFollowUpMode\"\n\t| \"getCompactionEnabled\"\n\t| \"getContinueAfterAutoCompaction\"\n\t| \"getRetryEnabled\"\n\t| \"getMaxConcurrentSubagents\"\n\t| \"getImageAutoResize\"\n\t| \"getBlockImages\"\n\t| \"getEnableSkillCommands\"\n\t| \"getGlobalContextTrustPolicy\"\n\t| \"getConfiguredTrustedContextFolders\"\n\t| \"getTransport\"\n\t| \"getHideThinkingBlock\"\n\t| \"getAgentModels\"\n\t| \"getGlobalSubagentArbiterSettings\"\n\t| \"getTabTitleSettings\"\n\t| \"getEnabledModels\"\n\t| \"hasProjectEnabledModelsOverride\"\n>;\n\ntype SettingsRefresher = SettingsReader &\n\tPick<\n\t\tSettingsManager,\n\t\t\"reload\" | \"flush\" | \"drainErrors\" | \"hasGlobalSettingsLoadError\" | \"hasProjectSettingsLoadError\"\n\t>;\n\ntype SettingsWriter = SettingsRefresher &\n\tPick<\n\t\tSettingsManager,\n\t\t| \"setDefaultModelAndProvider\"\n\t\t| \"setDefaultThinkingLevel\"\n\t\t| \"setSteeringMode\"\n\t\t| \"setFollowUpMode\"\n\t\t| \"setCompactionEnabled\"\n\t\t| \"setContinueAfterAutoCompaction\"\n\t\t| \"setRetryEnabled\"\n\t\t| \"setMaxConcurrentSubagents\"\n\t\t| \"setImageAutoResize\"\n\t\t| \"setBlockImages\"\n\t\t| \"setEnableSkillCommands\"\n\t\t| \"setAutoLoadNestedContext\"\n\t\t| \"setTrustedContextFolders\"\n\t\t| \"removeTrustedContextFolder\"\n\t\t| \"setContextTrust\"\n\t\t| \"setTransport\"\n\t\t| \"setHideThinkingBlock\"\n\t\t| \"setAgentModelsForAgent\"\n\t\t| \"removeAgentModelsForAgent\"\n\t\t| \"hasProjectAgentModelOverride\"\n\t\t| \"setGlobalSubagentArbiterSettings\"\n\t\t| \"setGlobalTabTitleSettings\"\n\t\t| \"setEnabledModels\"\n\t>;\n\n/**\n * Handle the `get_settings` RPC command: snapshot the persistent default settings.\n *\n * Most fields read the SettingsManager's merged (global + project) view. Context trust\n * fields intentionally read global settings only, so projects cannot expand the policy.\n * These seed fresh runtimes, NOT the live session state (`get_state` reports that). Extracted\n * (like {@link deleteSessionForRpc}) so it is unit-testable without a live RPC session.\n */\nexport function getSettingsForRpc(\n\tsettingsManager: SettingsReader,\n\tavailableModels: Awaited<ReturnType<ModelRegistry[\"getAvailable\"]>> = [],\n): RpcSettingsSnapshot {\n\tconst contextTrust = settingsManager.getGlobalContextTrustPolicy();\n\tconst configuredTrustedFolders = settingsManager.getConfiguredTrustedContextFolders();\n\tconst enabledModels = settingsManager.getEnabledModels();\n\tconst hasProjectEnabledModelsOverride = settingsManager.hasProjectEnabledModelsOverride();\n\tconst scopeResolution = resolveModelScopePatterns(enabledModels ?? [], availableModels);\n\treturn {\n\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\tdefaultModel: settingsManager.getDefaultModel(),\n\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\tcompactionEnabled: settingsManager.getCompactionEnabled(),\n\t\tcontinueAfterAutoCompaction: settingsManager.getContinueAfterAutoCompaction(),\n\t\tretryEnabled: settingsManager.getRetryEnabled(),\n\t\tmaxConcurrentSubagents: settingsManager.getMaxConcurrentSubagents(),\n\t\timageAutoResize: settingsManager.getImageAutoResize(),\n\t\tblockImages: settingsManager.getBlockImages(),\n\t\tenableSkillCommands: settingsManager.getEnableSkillCommands(),\n\t\tautoLoadNestedContext: contextTrust.unrestricted,\n\t\ttrustedContextFolders: configuredTrustedFolders,\n\t\teffectiveTrustedContextRoots: canonicalizeTrustedRoots(contextTrust.trustedFolders),\n\t\ttransport: settingsManager.getTransport(),\n\t\thideThinkingBlock: settingsManager.getHideThinkingBlock(),\n\t\tagentModels: settingsManager.getAgentModels(),\n\t\tsubagentArbiter: settingsManager.getGlobalSubagentArbiterSettings(),\n\t\ttabTitle: settingsManager.getTabTitleSettings(),\n\t\tenabledModels,\n\t\tresolvedScopedModels: scopeResolution.models.map(({ model, thinkingLevel }) => ({\n\t\t\tprovider: model.provider,\n\t\t\tid: model.id,\n\t\t\tname: model.name,\n\t\t\treasoning: model.reasoning,\n\t\t\t...(thinkingLevel !== undefined ? { thinkingLevel } : {}),\n\t\t})),\n\t\tscopeWarnings: scopeResolution.warnings,\n\t\thasProjectEnabledModelsOverride,\n\t\tenabledModelsSource: hasProjectEnabledModelsOverride\n\t\t\t? \"project\"\n\t\t\t: enabledModels === undefined\n\t\t\t\t? \"default\"\n\t\t\t\t: \"global\",\n\t};\n}\n\nasync function buildSettingsSnapshotForRpc(\n\tsettingsManager: SettingsReader,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<RpcSettingsSnapshot> {\n\treturn getSettingsForRpc(settingsManager, modelRegistry ? await modelRegistry.getAvailable() : []);\n}\n\nfunction formatSettingsErrors(errors: Array<{ scope: string; error: Error }>): string {\n\treturn errors.map((entry) => `${entry.scope}: ${entry.error.message}`).join(\"; \");\n}\n\n/**\n * Reload durable global and project settings before serving `get_settings`.\n *\n * The shared settings-operation lock prevents a refresh from discarding another RPC\n * settings operation's queued modifications. A failed queued write is returned before\n * reload so its in-memory changes remain intact rather than being replaced by stale disk\n * content. Reload failures leave SettingsManager's previous values in memory, therefore\n * they must be surfaced as an RPC error instead of producing a stale snapshot.\n */\nexport async function getFreshSettingsForRpc(\n\tsettingsManager: SettingsRefresher,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; settings: RpcSettingsSnapshot } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\ttry {\n\t\t\t// A runtime setter may have enqueued a write outside the RPC settings lock.\n\t\t\t// Waiting for SettingsManager's own queue protects that update from reload().\n\t\t\tawait settingsManager.flush();\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: `Failed to refresh settings: ${(error as Error).message}` };\n\t\t}\n\n\t\tconst writeErrors = settingsManager.drainErrors();\n\t\tif (writeErrors.length > 0) {\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: `Failed to refresh settings: pending settings write failed: ${formatSettingsErrors(writeErrors)}`,\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tsettingsManager.reload();\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: `Failed to reload settings: ${(error as Error).message}` };\n\t\t}\n\n\t\tconst loadErrors = settingsManager.drainErrors();\n\t\tif (\n\t\t\tloadErrors.length > 0 ||\n\t\t\tsettingsManager.hasGlobalSettingsLoadError() ||\n\t\t\tsettingsManager.hasProjectSettingsLoadError()\n\t\t) {\n\t\t\tconst detail = formatSettingsErrors(loadErrors);\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: detail ? `Failed to reload settings: ${detail}` : \"Failed to reload settings from durable storage\",\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst availableModels = modelRegistry ? await modelRegistry.getAvailable() : [];\n\t\t\treturn { ok: true as const, settings: getSettingsForRpc(settingsManager, availableModels) };\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: `Failed to load available models: ${(error as Error).message}` };\n\t\t}\n\t});\n}\n\nconst SETTINGS_UPDATE_KEYS = [\n\t\"defaultProvider\",\n\t\"defaultModel\",\n\t\"defaultThinkingLevel\",\n\t\"steeringMode\",\n\t\"followUpMode\",\n\t\"compactionEnabled\",\n\t\"continueAfterAutoCompaction\",\n\t\"retryEnabled\",\n\t\"maxConcurrentSubagents\",\n\t\"imageAutoResize\",\n\t\"blockImages\",\n\t\"enableSkillCommands\",\n\t\"autoLoadNestedContext\",\n\t\"trustedContextFolders\",\n\t\"transport\",\n\t\"hideThinkingBlock\",\n\t\"agentModels\",\n\t\"enabledModels\",\n\t\"subagentArbiter\",\n\t\"tabTitle\",\n] as const;\n\nconst QUEUE_MODES = [\"all\", \"one-at-a-time\"] as const;\nconst TRANSPORT_SETTINGS = [\"sse\", \"websocket\", \"auto\"] as const satisfies readonly TransportSetting[];\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n\nfunction validateAgentModels(value: unknown): { ok: true } | { ok: false; error: string } {\n\tif (!isPlainObject(value)) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: \"Invalid agentModels: must be a plain object mapping agent names to model fallback arrays\",\n\t\t};\n\t}\n\tfor (const [agentName, models] of Object.entries(value)) {\n\t\tif (!Array.isArray(models)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid agentModels[${JSON.stringify(agentName)}]: expected an array of non-empty strings`,\n\t\t\t};\n\t\t}\n\t\tconst invalidModel = models.find((model) => typeof model !== \"string\" || model.trim().length === 0);\n\t\tif (invalidModel !== undefined) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid agentModels[${JSON.stringify(agentName)}]: expected an array of non-empty strings`,\n\t\t\t};\n\t\t}\n\t}\n\treturn { ok: true };\n}\n\n/** Evaluate a strictly canonical, absolute directory through the core trust matcher. */\nexport function evaluateContextTrustForRpc(\n\tsettingsManager: Pick<SettingsManager, \"getGlobalContextTrustPolicy\">,\n\tpath: unknown,\n): { ok: true; evaluation: RpcContextTrustEvaluation } | { ok: false; error: string } {\n\tlet canonicalTarget: string;\n\ttry {\n\t\tcanonicalTarget = validateTrustedContextFolder(path);\n\t} catch (error) {\n\t\treturn { ok: false, error: `Invalid context trust path: ${(error as Error).message}` };\n\t}\n\n\tconst policy = settingsManager.getGlobalContextTrustPolicy();\n\tconst match = matchContextTrust(policy, canonicalTarget);\n\tif (!match) {\n\t\treturn { ok: true, evaluation: { canonicalTarget, state: \"untrusted\" } };\n\t}\n\tif (policy.unrestricted) {\n\t\treturn { ok: true, evaluation: { canonicalTarget, state: \"unrestricted\" } };\n\t}\n\treturn {\n\t\tok: true,\n\t\tevaluation: { canonicalTarget, state: \"trusted-root\", grantingRoot: match.trustedRoot },\n\t};\n}\n\n/**\n * Simple promise-based mutex that serializes durable settings operations. RPC commands are\n * dispatched concurrently (`void handleInputLine(line)`) so settings writes and refreshes\n * can overlap. Without serialization, a refresh could reload over queued modifications, and\n * concurrent operations could race on SettingsManager's shared error bucket (`drainErrors()`\n * clears the array for everyone).\n *\n * This lock ensures only one apply/flush/drain or flush/reload/drain block runs at a time.\n *\n * Known limitation: the lock does NOT cover the per-runtime commands (`set_model`,\n * `set_steering_mode`, etc.), which persist through the same SettingsManager write queue\n * and record failures into the same shared error bucket. Because `flush()` awaits the\n * entire shared queue, a concurrent runtime setter's write failure can land in this\n * operation's post-flush drain window and be reported as a `set_settings` failure (loud\n * but mis-attributed — never a silent success). Per-operation error isolation in\n * SettingsManager is the proper fix and is tracked in\n * https://github.com/aebrer/dreb/issues/319.\n */\nlet settingsWriteQueue: Promise<unknown> = Promise.resolve();\nfunction settingsWriteLock<T>(fn: () => Promise<T>): Promise<T> {\n\tconst prev = settingsWriteQueue;\n\tconst next = prev.then(fn, fn);\n\tsettingsWriteQueue = next.catch(() => {});\n\treturn next;\n}\n\nasync function persistContextTrustMutationForRpc(\n\tsettingsManager: SettingsWriter,\n\tfolders: string[],\n\ttargetPath: string,\n\tmutation: Pick<RpcContextTrustMutationResult, \"addedRoot\" | \"removedRoot\">,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcContextTrustMutationResult } | { ok: false; error: string }> {\n\tsettingsManager.drainErrors();\n\tif (settingsManager.hasGlobalSettingsLoadError()) {\n\t\treturn {\n\t\t\tok: false as const,\n\t\t\terror: \"Cannot write settings: the global settings file failed to load (fix or remove the corrupt settings.json first)\",\n\t\t};\n\t}\n\n\ttry {\n\t\tsettingsManager.setTrustedContextFolders(folders);\n\t\tawait settingsManager.flush();\n\t} catch (error) {\n\t\t// A security-policy mutation must not remain effective solely in memory when its\n\t\t// durable write fails. Reload restores the last persisted global policy.\n\t\tsettingsManager.reload();\n\t\treturn { ok: false as const, error: `Failed to persist settings: ${(error as Error).message}` };\n\t}\n\tconst writeErrors = settingsManager.drainErrors();\n\tif (writeErrors.length > 0) {\n\t\tconst detail = writeErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t// SettingsManager records queued write failures rather than rejecting flush(). Its\n\t\t// in-memory policy has already changed, so restore it from durable storage before\n\t\t// reporting failure rather than leaving an undurable trusted root effective.\n\t\tsettingsManager.reload();\n\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t}\n\n\tconst evaluated = evaluateContextTrustForRpc(settingsManager, targetPath);\n\tif (!evaluated.ok) return evaluated;\n\treturn {\n\t\tok: true as const,\n\t\tresult: {\n\t\t\tevaluation: evaluated.evaluation,\n\t\t\tsettings: await buildSettingsSnapshotForRpc(settingsManager, modelRegistry),\n\t\t\t...mutation,\n\t\t},\n\t};\n}\n\n/** Add a canonical directory to the global trusted roots and flush the change. */\nexport async function trustContextFolderForRpc(\n\tsettingsManager: SettingsWriter,\n\tpath: unknown,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcContextTrustMutationResult } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\tconst evaluated = evaluateContextTrustForRpc(settingsManager, path);\n\t\tif (!evaluated.ok) return evaluated;\n\n\t\t// Existing malformed entries are fail-closed. A trust mutation rewrites the configured\n\t\t// list as the canonical configured roots plus this new canonical root.\n\t\tconst roots = canonicalizeTrustedRoots(settingsManager.getConfiguredTrustedContextFolders());\n\t\tlet folders: string[];\n\t\ttry {\n\t\t\tfolders = validateTrustedContextFolders([...roots, evaluated.evaluation.canonicalTarget]);\n\t\t} catch (error) {\n\t\t\treturn { ok: false as const, error: (error as Error).message };\n\t\t}\n\t\treturn persistContextTrustMutationForRpc(\n\t\t\tsettingsManager,\n\t\t\tfolders,\n\t\t\tevaluated.evaluation.canonicalTarget,\n\t\t\t{\n\t\t\t\t...(folders.includes(evaluated.evaluation.canonicalTarget)\n\t\t\t\t\t? { addedRoot: evaluated.evaluation.canonicalTarget }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\tmodelRegistry,\n\t\t);\n\t});\n}\n\n/** Remove the root actually granting a directory access, rather than the supplied descendant. */\nexport async function untrustContextFolderForRpc(\n\tsettingsManager: SettingsWriter,\n\tpath: unknown,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcContextTrustMutationResult } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\tconst evaluated = evaluateContextTrustForRpc(settingsManager, path);\n\t\tif (!evaluated.ok) return evaluated;\n\t\tif (evaluated.evaluation.state === \"unrestricted\") {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Cannot untrust a context folder while unrestricted nested context loading is enabled; disable autoLoadNestedContext first\",\n\t\t\t};\n\t\t}\n\t\tif (evaluated.evaluation.state === \"untrusted\") {\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tresult: {\n\t\t\t\t\tevaluation: evaluated.evaluation,\n\t\t\t\t\tsettings: await buildSettingsSnapshotForRpc(settingsManager, modelRegistry),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst removedRoot = evaluated.evaluation.grantingRoot!;\n\t\tconst roots = canonicalizeTrustedRoots(settingsManager.getConfiguredTrustedContextFolders());\n\t\treturn persistContextTrustMutationForRpc(\n\t\t\tsettingsManager,\n\t\t\troots.filter((root) => root !== removedRoot),\n\t\t\tevaluated.evaluation.canonicalTarget,\n\t\t\t{ removedRoot },\n\t\t\tmodelRegistry,\n\t\t);\n\t});\n}\n\n/** Remove a configured trusted-folder string exactly as stored and flush the change. */\nexport async function removeTrustedContextFolderForRpc(\n\tsettingsManager: SettingsWriter,\n\tpath: unknown,\n\tmodelRegistry?: Pick<ModelRegistry, \"getAvailable\">,\n): Promise<{ ok: true; result: RpcTrustedFolderRemovalResult } | { ok: false; error: string }> {\n\treturn settingsWriteLock(async () => {\n\t\tif (typeof path !== \"string\" || path.length === 0) {\n\t\t\treturn { ok: false as const, error: \"remove_trusted_context_folder requires a non-empty string path\" };\n\t\t}\n\n\t\tsettingsManager.drainErrors();\n\t\tif (settingsManager.hasGlobalSettingsLoadError()) {\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: \"Cannot write settings: the global settings file failed to load (fix or remove the corrupt settings.json first)\",\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tsettingsManager.removeTrustedContextFolder(path);\n\t\t\tawait settingsManager.flush();\n\t\t} catch (error) {\n\t\t\t// A security-policy mutation must not remain effective solely in memory when its\n\t\t\t// durable write fails. Reload restores the last persisted global policy.\n\t\t\tsettingsManager.reload();\n\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${(error as Error).message}` };\n\t\t}\n\t\tconst writeErrors = settingsManager.drainErrors();\n\t\tif (writeErrors.length > 0) {\n\t\t\tconst detail = writeErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t\t// SettingsManager records queued write failures rather than rejecting flush(). Its\n\t\t\t// in-memory policy has already changed, so restore it from durable storage before\n\t\t\t// reporting failure rather than leaving an undurable trust removal effective.\n\t\t\tsettingsManager.reload();\n\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t\t}\n\n\t\treturn {\n\t\t\tok: true as const,\n\t\t\tresult: {\n\t\t\t\tsettings: await buildSettingsSnapshotForRpc(settingsManager, modelRegistry),\n\t\t\t\tremovedFolder: path,\n\t\t\t},\n\t\t};\n\t});\n}\n\n/**\n * Handle the `set_settings` RPC command: validate and persist default settings.\n *\n * Writes persistent defaults via SettingsManager only — never touches live session state\n * (the existing per-runtime commands do that). The whole payload is validated before\n * anything is applied: on any invalid field, nothing changes.\n *\n * Persistence is verified loudly: if the settings file failed to load at startup,\n * SettingsManager.save() silently no-ops — this handler reports that as an error instead\n * of returning success while nothing was written. Write failures surface the same way.\n *\n * The apply+flush+drain block is serialized via {@link settingsWriteLock} so that\n * concurrent `set_settings` commands (dispatched concurrently by the RPC input loop)\n * cannot race on the shared error bucket. Pre-existing stale errors (from other commands\n * like `set_model` that record write failures but never drain) are discarded before\n * applying. See the {@link settingsWriteLock} doc for the remaining attribution caveat\n * with runtime setters that write concurrently during the flush window.\n */\nexport async function setSettingsForRpc(\n\tsettingsManager: SettingsWriter,\n\tmodelRegistry: Pick<ModelRegistry, \"getAvailable\">,\n\tupdate: RpcSettingsUpdate | undefined,\n): Promise<{ ok: true; settings: RpcSettingsSnapshot; warnings?: string[] } | { ok: false; error: string }> {\n\t// --- Validate everything first; apply nothing on any failure ---\n\tif (update === undefined || update === null || typeof update !== \"object\" || Array.isArray(update)) {\n\t\treturn { ok: false, error: \"set_settings requires a settings object\" };\n\t}\n\n\tconst unknownKeys = Object.keys(update).filter((key) => !(SETTINGS_UPDATE_KEYS as readonly string[]).includes(key));\n\tif (unknownKeys.length > 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `Unknown settings key(s): ${unknownKeys.join(\", \")}. Valid keys: ${SETTINGS_UPDATE_KEYS.join(\", \")}`,\n\t\t};\n\t}\n\n\tconst hasAnySetting = SETTINGS_UPDATE_KEYS.some((key) => update[key] !== undefined);\n\tif (!hasAnySetting) {\n\t\treturn { ok: false, error: \"set_settings requires at least one setting to change\" };\n\t}\n\n\tif (update.defaultThinkingLevel !== undefined) {\n\t\tif (typeof update.defaultThinkingLevel !== \"string\" || !isValidThinkingLevel(update.defaultThinkingLevel)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid defaultThinkingLevel: ${JSON.stringify(update.defaultThinkingLevel)}. Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tfor (const key of [\"steeringMode\", \"followUpMode\"] as const) {\n\t\tconst value = update[key];\n\t\tif (value !== undefined && !(QUEUE_MODES as readonly string[]).includes(value as string)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid ${key}: ${JSON.stringify(value)}. Valid values: ${QUEUE_MODES.join(\", \")}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tfor (const key of [\n\t\t\"compactionEnabled\",\n\t\t\"continueAfterAutoCompaction\",\n\t\t\"retryEnabled\",\n\t\t\"imageAutoResize\",\n\t\t\"blockImages\",\n\t\t\"enableSkillCommands\",\n\t\t\"autoLoadNestedContext\",\n\t\t\"hideThinkingBlock\",\n\t] as const) {\n\t\tconst value = update[key];\n\t\tif (value !== undefined && typeof value !== \"boolean\") {\n\t\t\treturn { ok: false, error: `Invalid ${key}: ${JSON.stringify(value)}. Must be a boolean` };\n\t\t}\n\t}\n\n\tif (\n\t\tupdate.maxConcurrentSubagents !== undefined &&\n\t\t(!Number.isSafeInteger(update.maxConcurrentSubagents) || update.maxConcurrentSubagents < 0)\n\t) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `Invalid maxConcurrentSubagents: ${JSON.stringify(update.maxConcurrentSubagents)}. Must be a non-negative whole number`,\n\t\t};\n\t}\n\n\tif (update.transport !== undefined) {\n\t\tif (\n\t\t\ttypeof update.transport !== \"string\" ||\n\t\t\t!(TRANSPORT_SETTINGS as readonly string[]).includes(update.transport)\n\t\t) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Invalid transport: ${JSON.stringify(update.transport)}. Valid values: ${TRANSPORT_SETTINGS.join(\", \")}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (update.agentModels !== undefined) {\n\t\tconst validation = validateAgentModels(update.agentModels);\n\t\tif (!validation.ok) {\n\t\t\treturn validation;\n\t\t}\n\t}\n\n\tlet canonicalEnabledModels: string[] | undefined;\n\tif (update.enabledModels !== undefined && update.enabledModels !== null) {\n\t\tif (!Array.isArray(update.enabledModels)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Invalid enabledModels: must be a non-empty array of exact model references or null\",\n\t\t\t};\n\t\t}\n\t\tif (update.enabledModels.length === 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Invalid enabledModels: at least one model must remain enabled; use null to enable all\",\n\t\t\t};\n\t\t}\n\n\t\tconst availableModels = await modelRegistry.getAvailable();\n\t\tconst seen = new Set<string>();\n\t\tcanonicalEnabledModels = [];\n\t\tfor (const reference of update.enabledModels) {\n\t\t\tif (typeof reference !== \"string\" || reference.trim().length === 0 || reference !== reference.trim()) {\n\t\t\t\treturn { ok: false, error: \"Invalid enabledModels: every entry must be a non-empty exact model reference\" };\n\t\t\t}\n\t\t\tconst normalizedReference = reference.toLowerCase();\n\t\t\tconst matches = availableModels.filter(\n\t\t\t\t(model) => `${model.provider}/${model.id}`.toLowerCase() === normalizedReference,\n\t\t\t);\n\t\t\tif (matches.length !== 1) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: `Invalid enabledModels entry ${JSON.stringify(reference)}: expected an available exact provider/model reference`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst match = matches[0]!;\n\t\t\tconst canonical = `${match.provider}/${match.id}`;\n\t\t\tif (seen.has(canonical)) {\n\t\t\t\treturn { ok: false, error: `Invalid enabledModels: duplicate model ${JSON.stringify(canonical)}` };\n\t\t\t}\n\t\t\tseen.add(canonical);\n\t\t\tcanonicalEnabledModels.push(canonical);\n\t\t}\n\n\t\tif (\n\t\t\tcanonicalEnabledModels.length === availableModels.length &&\n\t\t\tavailableModels.every((model) => seen.has(`${model.provider}/${model.id}`))\n\t\t) {\n\t\t\tcanonicalEnabledModels = undefined;\n\t\t}\n\t}\n\n\tlet subagentArbiter = update.subagentArbiter === null ? undefined : update.subagentArbiter;\n\tif (subagentArbiter !== undefined) {\n\t\tif (!isPlainObject(subagentArbiter)) {\n\t\t\treturn { ok: false, error: \"subagentArbiter must be an object or null\" };\n\t\t}\n\t\tconst validKeys = [\"enabled\", \"model\", \"thinking\", \"guidePath\"];\n\t\tconst unknownArbiterKeys = Object.keys(subagentArbiter).filter((key) => !validKeys.includes(key));\n\t\tif (unknownArbiterKeys.length > 0) {\n\t\t\treturn { ok: false, error: `Unknown subagentArbiter key(s): ${unknownArbiterKeys.join(\", \")}` };\n\t\t}\n\t\tif (subagentArbiter.enabled !== undefined && typeof subagentArbiter.enabled !== \"boolean\") {\n\t\t\treturn { ok: false, error: \"subagentArbiter.enabled must be a boolean\" };\n\t\t}\n\t\tif (subagentArbiter.enabled === false) {\n\t\t\t// Explicit disablement is the recovery path for fail-closed policies.\n\t\t\t// Preserve retained fields without validating them so malformed manual\n\t\t\t// edits cannot trap users in a policy that blocks every child spawn.\n\t\t\tsubagentArbiter = { ...subagentArbiter };\n\t\t} else {\n\t\t\tif (\n\t\t\t\tsubagentArbiter.model !== undefined &&\n\t\t\t\t(typeof subagentArbiter.model !== \"string\" || !subagentArbiter.model.trim())\n\t\t\t) {\n\t\t\t\treturn { ok: false, error: \"subagentArbiter.model must be a non-empty exact provider/model string\" };\n\t\t\t}\n\t\t\tif (\n\t\t\t\tsubagentArbiter.thinking !== undefined &&\n\t\t\t\t(typeof subagentArbiter.thinking !== \"string\" || !isValidThinkingLevel(subagentArbiter.thinking))\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: `Invalid subagentArbiter.thinking: ${JSON.stringify(subagentArbiter.thinking)}. Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (\n\t\t\t\tsubagentArbiter.guidePath !== undefined &&\n\t\t\t\t(typeof subagentArbiter.guidePath !== \"string\" || !subagentArbiter.guidePath.trim())\n\t\t\t) {\n\t\t\t\treturn { ok: false, error: \"subagentArbiter.guidePath must be a non-empty string\" };\n\t\t\t}\n\t\t\tif (subagentArbiter.enabled === true && !subagentArbiter.model) {\n\t\t\t\treturn { ok: false, error: \"Enabling subagentArbiter requires an exact provider/model\" };\n\t\t\t}\n\t\t\tif (subagentArbiter.model) {\n\t\t\t\tconst slash = subagentArbiter.model.indexOf(\"/\");\n\t\t\t\tif (slash <= 0 || slash === subagentArbiter.model.length - 1 || /\\s/.test(subagentArbiter.model)) {\n\t\t\t\t\treturn { ok: false, error: \"subagentArbiter.model must be an exact provider/model\" };\n\t\t\t\t}\n\t\t\t\tconst provider = subagentArbiter.model.slice(0, slash);\n\t\t\t\tconst modelId = subagentArbiter.model.slice(slash + 1);\n\t\t\t\tconst models = await modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((candidate) => candidate.provider === provider && candidate.id === modelId);\n\t\t\t\tif (!model) return { ok: false, error: `Arbiter model not found: ${subagentArbiter.model}` };\n\t\t\t\tif (subagentArbiter.thinking !== undefined) {\n\t\t\t\t\tconst validation = validateThinkingLevelForModel(model, subagentArbiter.thinking);\n\t\t\t\t\tif (!validation.ok) return validation;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsubagentArbiter = { ...subagentArbiter };\n\t\t}\n\t}\n\n\tlet tabTitle = update.tabTitle;\n\tif (tabTitle !== undefined) {\n\t\tif (!isPlainObject(tabTitle)) {\n\t\t\treturn { ok: false, error: \"tabTitle must be an object\" };\n\t\t}\n\t\tconst validKeys = [\"enabled\", \"model\", \"triggerAfter\", \"maxTitleLength\"];\n\t\tconst unknownTabTitleKeys = Object.keys(tabTitle).filter((key) => !validKeys.includes(key));\n\t\tif (unknownTabTitleKeys.length > 0) {\n\t\t\treturn { ok: false, error: `Unknown tabTitle key(s): ${unknownTabTitleKeys.join(\", \")}` };\n\t\t}\n\t\tif (Object.values(tabTitle).every((value) => value === undefined)) {\n\t\t\treturn { ok: false, error: \"tabTitle requires at least one setting to change\" };\n\t\t}\n\t\tif (tabTitle.enabled !== undefined && typeof tabTitle.enabled !== \"boolean\") {\n\t\t\treturn { ok: false, error: \"tabTitle.enabled must be a boolean\" };\n\t\t}\n\t\tfor (const key of [\"triggerAfter\", \"maxTitleLength\"] as const) {\n\t\t\tconst value = tabTitle[key];\n\t\t\tif (value !== undefined && (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0)) {\n\t\t\t\treturn { ok: false, error: `tabTitle.${key} must be a positive whole number` };\n\t\t\t}\n\t\t}\n\t\tif (tabTitle.model !== undefined && tabTitle.model !== null) {\n\t\t\tif (typeof tabTitle.model !== \"string\" || !tabTitle.model.trim()) {\n\t\t\t\treturn { ok: false, error: \"tabTitle.model must be a non-empty exact provider/model string\" };\n\t\t\t}\n\t\t\tconst slash = tabTitle.model.indexOf(\"/\");\n\t\t\tif (slash <= 0 || slash === tabTitle.model.length - 1 || /\\s/.test(tabTitle.model)) {\n\t\t\t\treturn { ok: false, error: \"tabTitle.model must be an exact provider/model\" };\n\t\t\t}\n\t\t\tconst provider = tabTitle.model.slice(0, slash);\n\t\t\tconst modelId = tabTitle.model.slice(slash + 1);\n\t\t\tconst models = await modelRegistry.getAvailable();\n\t\t\tif (!models.some((candidate) => candidate.provider === provider && candidate.id === modelId)) {\n\t\t\t\treturn { ok: false, error: `Tab title model not found: ${tabTitle.model}` };\n\t\t\t}\n\t\t}\n\t\t// `model: null` skips validation above: it removes the pinned model so title\n\t\t// generation restores Explore-agent routing.\n\t\ttabTitle = { ...tabTitle };\n\t}\n\n\tlet trustedContextFolders: string[] | undefined;\n\tif (update.trustedContextFolders !== undefined) {\n\t\ttry {\n\t\t\ttrustedContextFolders = validateTrustedContextFolders(update.trustedContextFolders);\n\t\t} catch (error) {\n\t\t\treturn { ok: false, error: (error as Error).message };\n\t\t}\n\t}\n\n\tconst hasProvider = update.defaultProvider !== undefined;\n\tconst hasModel = update.defaultModel !== undefined;\n\tif (hasProvider !== hasModel) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: \"defaultProvider and defaultModel must be set together\",\n\t\t};\n\t}\n\tif (hasProvider && hasModel) {\n\t\tif (typeof update.defaultProvider !== \"string\" || typeof update.defaultModel !== \"string\") {\n\t\t\treturn { ok: false, error: \"defaultProvider and defaultModel must be strings\" };\n\t\t}\n\t\tconst models = await modelRegistry.getAvailable();\n\t\tconst match = models.find((m) => m.provider === update.defaultProvider && m.id === update.defaultModel);\n\t\tif (!match) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `Model not found: ${update.defaultProvider}/${update.defaultModel}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst updatesContextTrustPolicy = update.autoLoadNestedContext !== undefined || trustedContextFolders !== undefined;\n\n\t// Serialize the apply+flush+drain block so concurrent set_settings commands\n\t// cannot race on the shared error bucket. See settingsWriteLock doc.\n\treturn settingsWriteLock(async () => {\n\t\t// Discard stale errors left by other operations (set_model, set_steering_mode, etc.)\n\t\t// that record write failures into SettingsManager's shared error bucket but never\n\t\t// drain it. Without this, we'd mis-attribute their failures to this operation.\n\t\tsettingsManager.drainErrors();\n\n\t\t// Persisting would silently no-op if the settings file failed to load — fail loudly\n\t\t// instead. Checked INSIDE the lock (after the stale-error discard) so a concurrent\n\t\t// reload() that flips the load-error state cannot slip between check and apply and\n\t\t// turn this write into a silent no-op reported as success.\n\t\tif (settingsManager.hasGlobalSettingsLoadError()) {\n\t\t\treturn {\n\t\t\t\tok: false as const,\n\t\t\t\terror: \"Cannot write settings: the global settings file failed to load (fix or remove the corrupt settings.json first)\",\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\t// Phase 1: durably persist every ordinary setting before touching the\n\t\t\t// security-sensitive context trust policy.\n\t\t\tif (update.defaultProvider !== undefined && update.defaultModel !== undefined) {\n\t\t\t\tsettingsManager.setDefaultModelAndProvider(update.defaultProvider, update.defaultModel);\n\t\t\t}\n\t\t\tif (update.defaultThinkingLevel !== undefined) {\n\t\t\t\tsettingsManager.setDefaultThinkingLevel(update.defaultThinkingLevel);\n\t\t\t}\n\t\t\tif (update.steeringMode !== undefined) {\n\t\t\t\tsettingsManager.setSteeringMode(update.steeringMode);\n\t\t\t}\n\t\t\tif (update.followUpMode !== undefined) {\n\t\t\t\tsettingsManager.setFollowUpMode(update.followUpMode);\n\t\t\t}\n\t\t\tif (update.compactionEnabled !== undefined) {\n\t\t\t\tsettingsManager.setCompactionEnabled(update.compactionEnabled);\n\t\t\t}\n\t\t\tif (update.continueAfterAutoCompaction !== undefined) {\n\t\t\t\tsettingsManager.setContinueAfterAutoCompaction(update.continueAfterAutoCompaction);\n\t\t\t}\n\t\t\tif (update.retryEnabled !== undefined) {\n\t\t\t\tsettingsManager.setRetryEnabled(update.retryEnabled);\n\t\t\t}\n\t\t\tif (update.maxConcurrentSubagents !== undefined) {\n\t\t\t\tsettingsManager.setMaxConcurrentSubagents(update.maxConcurrentSubagents);\n\t\t\t}\n\t\t\tif (update.imageAutoResize !== undefined) {\n\t\t\t\tsettingsManager.setImageAutoResize(update.imageAutoResize);\n\t\t\t}\n\t\t\tif (update.blockImages !== undefined) {\n\t\t\t\tsettingsManager.setBlockImages(update.blockImages);\n\t\t\t}\n\t\t\tif (update.enableSkillCommands !== undefined) {\n\t\t\t\tsettingsManager.setEnableSkillCommands(update.enableSkillCommands);\n\t\t\t}\n\t\t\tif (update.transport !== undefined) {\n\t\t\t\tsettingsManager.setTransport(update.transport);\n\t\t\t}\n\t\t\tif (update.hideThinkingBlock !== undefined) {\n\t\t\t\tsettingsManager.setHideThinkingBlock(update.hideThinkingBlock);\n\t\t\t}\n\n\t\t\tconst warnings: string[] = [];\n\t\t\tif (update.enabledModels !== undefined) {\n\t\t\t\tif (settingsManager.hasProjectEnabledModelsOverride()) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t\"A project-level enabledModels value (.dreb/settings.json) takes precedence — this change to global settings will have no effect. Edit the project settings file to change it.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tsettingsManager.setEnabledModels(canonicalEnabledModels);\n\t\t\t}\n\t\t\tif (update.subagentArbiter !== undefined) {\n\t\t\t\tsettingsManager.setGlobalSubagentArbiterSettings(subagentArbiter);\n\t\t\t}\n\t\t\tif (tabTitle !== undefined) {\n\t\t\t\tsettingsManager.setGlobalTabTitleSettings(tabTitle);\n\t\t\t}\n\t\t\tif (update.agentModels !== undefined) {\n\t\t\t\tfor (const [agentName, models] of Object.entries(update.agentModels)) {\n\t\t\t\t\tif (settingsManager.hasProjectAgentModelOverride(agentName)) {\n\t\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t\t`A project-level agentModels override for ${JSON.stringify(agentName)} (.dreb/settings.json) ` +\n\t\t\t\t\t\t\t\t\"takes precedence — this change to global settings will have no effect. \" +\n\t\t\t\t\t\t\t\t\"Edit the project settings file to change it.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (models.length > 0) {\n\t\t\t\t\t\tsettingsManager.setAgentModelsForAgent(agentName, models);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsettingsManager.removeAgentModelsForAgent(agentName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait settingsManager.flush();\n\t\t\tconst writeErrors = settingsManager.drainErrors();\n\t\t\tif (writeErrors.length > 0) {\n\t\t\t\tconst detail = writeErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t\t\t// Context trust has not yet been modified, so do not reload: doing so\n\t\t\t\t// could discard unrelated pending in-memory state.\n\t\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t\t\t}\n\n\t\t\t// Phase 2: apply both context fields in one queued, atomic write only after\n\t\t\t// phase 1 is durably successful.\n\t\t\tif (updatesContextTrustPolicy) {\n\t\t\t\tsettingsManager.setContextTrust({\n\t\t\t\t\t...(update.autoLoadNestedContext !== undefined ? { autoLoadNested: update.autoLoadNestedContext } : {}),\n\t\t\t\t\t...(trustedContextFolders !== undefined ? { trustedFolders: trustedContextFolders } : {}),\n\t\t\t\t});\n\t\t\t\tawait settingsManager.flush();\n\t\t\t\tconst ctxErrors = settingsManager.drainErrors();\n\t\t\t\tif (ctxErrors.length > 0) {\n\t\t\t\t\tconst detail = ctxErrors.map((e) => `${e.scope}: ${e.error.message}`).join(\"; \");\n\t\t\t\t\t// The context write failed, so durable storage retains its previous,\n\t\t\t\t\t// fail-closed policy. Restore that policy in memory before returning.\n\t\t\t\t\tsettingsManager.reload();\n\t\t\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${detail}` };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst snapshot = getSettingsForRpc(settingsManager, await modelRegistry.getAvailable());\n\t\t\treturn warnings.length > 0\n\t\t\t\t? { ok: true as const, settings: snapshot, warnings }\n\t\t\t\t: { ok: true as const, settings: snapshot };\n\t\t} catch (error) {\n\t\t\tif (updatesContextTrustPolicy) {\n\t\t\t\t// Setters and flush() can also fail synchronously. The same fail-closed\n\t\t\t\t// rollback is required before returning that persistence failure.\n\t\t\t\tsettingsManager.reload();\n\t\t\t}\n\t\t\treturn { ok: false as const, error: `Failed to persist settings: ${(error as Error).message}` };\n\t\t}\n\t});\n}\n\nfunction normalizePreview(text: string): string {\n\treturn text.replace(/\\s+/g, \" \").trim().slice(0, 200);\n}\n\nfunction extractTextContent(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\n\tlet text = \"\";\n\tfor (const part of content) {\n\t\tif (\n\t\t\ttypeof part === \"object\" &&\n\t\t\tpart !== null &&\n\t\t\t\"type\" in part &&\n\t\t\tpart.type === \"text\" &&\n\t\t\t\"text\" in part &&\n\t\t\ttypeof part.text === \"string\"\n\t\t) {\n\t\t\ttext += part.text;\n\t\t}\n\t}\n\treturn text;\n}\n\nfunction getRpcEntryPreview(node: SessionTreeNode): string {\n\tconst entry = node.entry;\n\n\tswitch (entry.type) {\n\t\tcase \"message\": {\n\t\t\tconst msg = entry.message as {\n\t\t\t\trole: string;\n\t\t\t\tcontent?: unknown;\n\t\t\t\tstopReason?: string;\n\t\t\t\terrorMessage?: string;\n\t\t\t\ttoolName?: string;\n\t\t\t\tcommand?: string;\n\t\t\t};\n\t\t\tconst role = msg.role;\n\t\t\tif (role === \"user\") {\n\t\t\t\treturn normalizePreview(extractTextContent(msg.content));\n\t\t\t}\n\t\t\tif (role === \"assistant\") {\n\t\t\t\tconst textContent = normalizePreview(extractTextContent(msg.content));\n\t\t\t\tif (textContent) return textContent;\n\t\t\t\tif (msg.stopReason === \"aborted\") return \"(aborted)\";\n\t\t\t\tif (msg.errorMessage) return normalizePreview(msg.errorMessage);\n\t\t\t\treturn \"(no content)\";\n\t\t\t}\n\t\t\tif (role === \"toolResult\") {\n\t\t\t\treturn normalizePreview(`[${msg.toolName ?? \"tool\"}]`);\n\t\t\t}\n\t\t\tif (role === \"bashExecution\") {\n\t\t\t\treturn normalizePreview(`[bash]: ${msg.command ?? \"\"}`);\n\t\t\t}\n\t\t\treturn normalizePreview(`[${role}]`);\n\t\t}\n\t\tcase \"custom_message\":\n\t\t\treturn normalizePreview(`[${entry.customType}]: ${extractTextContent(entry.content)}`);\n\t\tcase \"compaction\":\n\t\t\treturn normalizePreview(`[compaction: ${Math.round(entry.tokensBefore / 1000)}k tokens]`);\n\t\tcase \"branch_summary\":\n\t\t\treturn normalizePreview(`[branch summary]: ${entry.summary}`);\n\t\tcase \"model_change\":\n\t\t\treturn normalizePreview(`[model: ${entry.modelId}]`);\n\t\tcase \"thinking_level_change\":\n\t\t\treturn normalizePreview(`[thinking: ${entry.thinkingLevel}]`);\n\t\tcase \"custom\":\n\t\t\treturn normalizePreview(`[custom: ${entry.customType}]`);\n\t\tcase \"label\":\n\t\t\treturn normalizePreview(`[label: ${entry.label ?? \"(cleared)\"}]`);\n\t\tcase \"session_info\":\n\t\t\treturn normalizePreview(`[title: ${entry.name || \"empty\"}]`);\n\t\tdefault: {\n\t\t\t// Compile-time exhaustiveness guard: a new SessionEntry type forces an update here.\n\t\t\tconst _exhaustive: never = entry;\n\t\t\t// Runtime: unknown types from forward-compat/corrupt session files get a placeholder.\n\t\t\treturn normalizePreview(`[${(entry as { type: string }).type}]`);\n\t\t}\n\t}\n}\n\nfunction toRpcTreeNode(node: SessionTreeNode): RpcTreeNode {\n\tconst role = node.entry.type === \"message\" ? String(node.entry.message.role) : undefined;\n\treturn {\n\t\tid: node.entry.id,\n\t\tparentId: node.entry.parentId,\n\t\ttype: node.entry.type,\n\t\t...(role !== undefined ? { role } : {}),\n\t\tpreview: getRpcEntryPreview(node),\n\t\ttimestamp: node.entry.timestamp,\n\t\t...(node.label !== undefined ? { label: node.label } : {}),\n\t\tchildren: [],\n\t};\n}\n\n/**\n * Map core session tree nodes to stable RPC DTOs without leaking raw entries/messages.\n * Uses an explicit stack so deep linear session trees do not overflow the JS call stack.\n */\nexport function toRpcTreeNodes(nodes: SessionTreeNode[]): RpcTreeNode[] {\n\tconst roots: RpcTreeNode[] = [];\n\tconst stack: Array<{ source: SessionTreeNode; targetSiblings: RpcTreeNode[] }> = [];\n\n\tfor (let i = nodes.length - 1; i >= 0; i--) {\n\t\tstack.push({ source: nodes[i]!, targetSiblings: roots });\n\t}\n\n\twhile (stack.length > 0) {\n\t\tconst { source, targetSiblings } = stack.pop()!;\n\t\tconst dto = toRpcTreeNode(source);\n\t\ttargetSiblings.push(dto);\n\n\t\tfor (let i = source.children.length - 1; i >= 0; i--) {\n\t\t\tstack.push({ source: source.children[i]!, targetSiblings: dto.children });\n\t\t}\n\t}\n\n\treturn roots;\n}\n\n/** Return the current session tree and active leaf as RPC DTOs. */\nexport function getTreeForRpc(sessionManager: Pick<SessionManager, \"getTree\" | \"getLeafId\">): {\n\troots: RpcTreeNode[];\n\tleafId: string | null;\n} {\n\treturn { roots: toRpcTreeNodes(sessionManager.getTree()), leafId: sessionManager.getLeafId() };\n}\n\n/** Navigate the active session tree, returning only the stable RPC result fields. */\nexport async function navigateTreeForRpc(\n\tsession: Pick<AgentSession, \"navigateTree\">,\n\ttargetId: string,\n\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n): Promise<{ cancelled: boolean; editorText?: string }> {\n\tconst result = await session.navigateTree(targetId, options ?? {});\n\treturn {\n\t\tcancelled: result.cancelled,\n\t\t...(result.editorText !== undefined ? { editorText: result.editorText } : {}),\n\t};\n}\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\n/**\n * Build the RPC-mode extension UI context. Extracted from `runRpcMode` so the\n * dialog request emission and response mapping (select/confirm/input/ask/editor)\n * can be unit-tested without spawning the CLI. `output` is the JSONL sink and\n * `pendingExtensionRequests` is the shared map keyed by request id.\n */\nexport interface PendingRpcExtensionRequest {\n\trequest: RpcBlockingExtensionUIRequest;\n\tresolve: (value: any) => void;\n\treject: (error: Error) => void;\n}\n\nexport function createRpcExtensionUIContext(\n\toutput: (obj: RpcResponse | RpcExtensionUIRequest | object) => void,\n\tpendingExtensionRequests: Map<string, PendingRpcExtensionRequest>,\n\tonAskStop: () => void = () => {},\n): ExtensionUIContext {\n\t/** Helper for dialog methods with signal/timeout support */\n\tfunction createDialogPromise<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tdefaultValue: T,\n\t\trequest: Record<string, unknown>,\n\t\tparseResponse: (response: RpcExtensionUIResponse) => T,\n\t\tonTimeout?: () => void,\n\t): Promise<T> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\t\tconst id = crypto.randomUUID();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\tlet settled = false;\n\n\t\t\tconst cleanup = (): boolean => {\n\t\t\t\tif (settled) return false;\n\t\t\t\tsettled = true;\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tpendingExtensionRequests.delete(id);\n\t\t\t\toutput({ type: \"extension_ui_response_handled\", id });\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (!cleanup()) return;\n\t\t\t\tresolve(defaultValue);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tif (opts?.timeout) {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tif (!cleanup()) return;\n\t\t\t\t\tonTimeout?.();\n\t\t\t\t\tresolve(defaultValue);\n\t\t\t\t}, opts.timeout);\n\t\t\t}\n\n\t\t\tconst rpcRequest = {\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid,\n\t\t\t\t...request,\n\t\t\t} as RpcBlockingExtensionUIRequest;\n\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\trequest: rpcRequest,\n\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\tif (!cleanup()) return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresolve(parseResponse(response));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tif (!cleanup()) return;\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t});\n\t\t\toutput(rpcRequest);\n\t\t});\n\t}\n\n\t// Serialize `ask` requests so at most one ask wizard is ever pending, mirroring\n\t// the TUI's single-dialog queue (`enqueueExtensionDialog`). Tool execution runs\n\t// in parallel, so a turn can issue several `ask_user` calls at once; without\n\t// this the Dashboard (which renders a single pending ask) would leave the extra\n\t// wizards invisible and their promises hanging until the turn aborts. The first\n\t// ask runs synchronously (preserving immediate request emission); later ones\n\t// wait in a FIFO. A call whose signal aborts while still queued settles with the\n\t// aborted value and never emits a request.\n\tlet askInFlight = false;\n\tconst askWaiters: Array<() => void> = [];\n\tconst runNextAsk = () => {\n\t\tif (askInFlight) return;\n\t\tconst next = askWaiters.shift();\n\t\tif (!next) return;\n\t\taskInFlight = true;\n\t\tnext();\n\t};\n\tfunction serializeAsk<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tabortedValue: T,\n\t\trun: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst signal = opts?.signal;\n\t\tif (signal?.aborted) return Promise.resolve(abortedValue);\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: T) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\t// A started run's outcome propagates verbatim (a host/protocol failure\n\t\t\t// must still reject so the ask_user tool reports it distinctly).\n\t\t\tconst fail = (error: unknown) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\t// While still queued, a signal abort removes this task and settles it\n\t\t\t// without ever emitting. Once started, createDialogPromise owns abort.\n\t\t\tconst onAbort = () => {\n\t\t\t\tconst index = askWaiters.indexOf(startTask);\n\t\t\t\tif (index === -1) return;\n\t\t\t\taskWaiters.splice(index, 1);\n\t\t\t\tfinish(abortedValue);\n\t\t\t};\n\t\t\tconst startTask = () => {\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tfinish(abortedValue);\n\t\t\t\t\taskInFlight = false;\n\t\t\t\t\trunNextAsk();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trun()\n\t\t\t\t\t.then(finish, fail)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\taskInFlight = false;\n\t\t\t\t\t\trunNextAsk();\n\t\t\t\t\t});\n\t\t\t};\n\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\taskWaiters.push(startTask);\n\t\t\trunNextAsk();\n\t\t});\n\t}\n\n\t/**\n\t * Create an extension UI context that uses the RPC protocol.\n\t */\n\treturn {\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"select\", title, options, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise(opts, false, { method: \"confirm\", title, message, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed : false,\n\t\t\t),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"input\", title, placeholder, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\task: (request, opts) =>\n\t\t\tserializeAsk(opts, undefined, () =>\n\t\t\t\tcreateDialogPromise(\n\t\t\t\t\topts,\n\t\t\t\t\tundefined,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"ask\",\n\t\t\t\t\t\ttitle: request.title ?? \"Question\",\n\t\t\t\t\t\tquestions: request.questions.map((q) => ({\n\t\t\t\t\t\t\tquestion: q.question,\n\t\t\t\t\t\t\ttitle: q.title,\n\t\t\t\t\t\t\toptions: q.options,\n\t\t\t\t\t\t\tallowFreeText: q.allowFreeText,\n\t\t\t\t\t\t\tmultiSelect: q.multiSelect,\n\t\t\t\t\t\t\tmultiline: q.multiline,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\t\t\t// Preserve the authoritative deadline across Dashboard reload,\n\t\t\t\t\t\t// resync, and drill-in hydration instead of restarting the full\n\t\t\t\t\t\t// duration whenever the wizard remounts.\n\t\t\t\t\t\texpiresAt: opts?.timeout ? Date.now() + opts.timeout : undefined,\n\t\t\t\t\t},\n\t\t\t\t\t(response) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tonAskStop();\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst rawAnswers = (response as { answers?: unknown }).answers;\n\t\t\t\t\t\tif (!Array.isArray(rawAnswers)) {\n\t\t\t\t\t\t\tthrow new Error(\"Invalid RPC ask response: answers must be an array\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst answers = rawAnswers.map((entry) => {\n\t\t\t\t\t\t\tconst selected = (entry as { selected?: unknown })?.selected;\n\t\t\t\t\t\t\tconst customText = (entry as { customText?: unknown })?.customText;\n\t\t\t\t\t\t\tconst skipped = (entry as { skipped?: unknown })?.skipped;\n\t\t\t\t\t\t\tif (!Array.isArray(selected) || !selected.every((value) => typeof value === \"string\")) {\n\t\t\t\t\t\t\t\tthrow new Error(\"Invalid RPC ask response: each answer's selected must be an array of strings\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (customText !== undefined && typeof customText !== \"string\") {\n\t\t\t\t\t\t\t\tthrow new Error(\"Invalid RPC ask response: customText must be a string\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst answered = selected.length > 0 || !!customText?.trim();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tselected,\n\t\t\t\t\t\t\t\tcustomText: customText || undefined,\n\t\t\t\t\t\t\t\tskipped: skipped === true || !answered,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn { answers };\n\t\t\t\t\t},\n\t\t\t\t\tonAskStop,\n\t\t\t\t),\n\t\t\t),\n\n\t\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"notify\",\n\t\t\t\tmessage,\n\t\t\t\tnotifyType: type,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tonTerminalInput(): () => void {\n\t\t\t// Raw terminal input not supported in RPC mode\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setStatus\",\n\t\t\t\tstatusKey: key,\n\t\t\t\tstatusText: text,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\t// Only support string arrays in RPC mode - factory functions are ignored\n\t\t\tif (content === undefined || Array.isArray(content)) {\n\t\t\t\toutput({\n\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[] | undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t}\n\t\t\t// Component factories are not supported in RPC mode - would need TUI access\n\t\t},\n\n\t\tsetFooter(_factory: unknown): void {\n\t\t\t// Custom footer not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetHeader(_factory: unknown): void {\n\t\t\t// Custom header not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\t// Fire and forget - host can implement terminal title control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setTitle\",\n\t\t\t\ttitle,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tasync custom() {\n\t\t\t// Custom UI not supported in RPC mode\n\t\t\treturn undefined as never;\n\t\t},\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\t// Fire and forget - host can implement editor control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"set_editor_text\",\n\t\t\t\ttext,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\t// Synchronous method can't wait for RPC response\n\t\t\t// Host should track editor state locally if needed\n\t\t\treturn \"\";\n\t\t},\n\n\t\teditor: (title, prefill) =>\n\t\t\tcreateDialogPromise(undefined, undefined, { method: \"editor\", title, prefill }, (response) =>\n\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t? undefined\n\t\t\t\t\t: \"value\" in response\n\t\t\t\t\t\t? response.value\n\t\t\t\t\t\t: undefined,\n\t\t\t),\n\n\t\tsetEditorComponent(): void {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t\treturn false;\n\t\t},\n\n\t\tsetToolsExpanded(_expanded: boolean) {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t},\n\t};\n}\n\n/** Cancel every pending dialog during RPC host teardown. */\nexport function cancelPendingRpcExtensionRequests(\n\tpendingExtensionRequests: Map<string, PendingRpcExtensionRequest>,\n): void {\n\tfor (const [id, pending] of [...pendingExtensionRequests]) {\n\t\tpending.resolve({ type: \"extension_ui_response\", id, cancelled: true });\n\t}\n}\n\nexport async function runRpcMode(session: AgentSession, modelFallbackMessage?: string): Promise<never> {\n\ttakeOverStdout();\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\twriteRawStdout(serializeJsonLine(obj));\n\t};\n\n\tconst success = <T extends RpcCommand[\"type\"]>(\n\t\tid: string | undefined,\n\t\tcommand: T,\n\t\tdata?: object | null,\n\t): RpcResponse => {\n\t\tif (data === undefined) {\n\t\t\treturn { id, type: \"response\", command, success: true } as RpcResponse;\n\t\t}\n\t\treturn { id, type: \"response\", command, success: true, data } as RpcResponse;\n\t};\n\n\tconst error = (id: string | undefined, command: string, message: string): RpcResponse => {\n\t\treturn { id, type: \"response\", command, success: false, error: message };\n\t};\n\n\tif (session.sessionFile && session.messages.length > 0) {\n\t\tconst rehydratedCount = rehydrateBackgroundAgentsFromDisk(session.sessionFile);\n\t\tif (rehydratedCount > 0) {\n\t\t\tconsole.error(\n\t\t\t\t`[rpc] Rehydrated ${rehydratedCount} background subagent${rehydratedCount === 1 ? \"\" : \"s\"} from disk`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Pending extension UI requests waiting for response. Keep the emitted\n\t// payload alongside its callbacks so recovery snapshots can reconstruct the\n\t// answer UI after a Dashboard reload or replay gap.\n\tconst pendingExtensionRequests = new Map<string, PendingRpcExtensionRequest>();\n\n\t// Shutdown request flag\n\tlet shutdownRequested = false;\n\tlet dailyCostTracker: DailyCostTracker | undefined;\n\tlet dailyCostTrackerPrimed = false;\n\n\t// Extension UI context uses the RPC protocol; built by a module-scope\n\t// factory so the dialog round trip is unit-testable (see createRpcExtensionUIContext).\n\tconst createExtensionUIContext = (): ExtensionUIContext =>\n\t\tcreateRpcExtensionUIContext(output, pendingExtensionRequests, () => void session.abort());\n\n\t// Set up extensions with RPC-based UI context\n\tawait session.bindExtensions({\n\t\tuiContext: createExtensionUIContext(),\n\t\tcommandContextActions: {\n\t\t\twaitForIdle: () => session.agent.waitForIdle(),\n\t\t\tnewSession: async (options) => {\n\t\t\t\t// Delegate to AgentSession (handles setup + agent state sync)\n\t\t\t\tconst success = await session.newSession(options);\n\t\t\t\treturn { cancelled: !success };\n\t\t\t},\n\t\t\tfork: async (entryId) => {\n\t\t\t\tconst result = await session.fork(entryId);\n\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t},\n\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\tlabel: options?.label,\n\t\t\t\t});\n\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t},\n\t\t\tswitchSession: async (sessionPath) => {\n\t\t\t\tconst success = await session.switchSession(sessionPath);\n\t\t\t\treturn { cancelled: !success };\n\t\t\t},\n\t\t\treload: async () => {\n\t\t\t\tawait session.reload();\n\t\t\t},\n\t\t},\n\t\tshutdownHandler: () => {\n\t\t\tshutdownRequested = true;\n\t\t},\n\t\tonError: (err) => {\n\t\t\toutput({ type: \"extension_error\", extensionPath: err.extensionPath, event: err.event, error: err.error });\n\t\t},\n\t});\n\n\tconst getDailyCost = async (): Promise<number> => {\n\t\tdailyCostTracker ??= new DailyCostTracker();\n\t\tif (!dailyCostTrackerPrimed) {\n\t\t\tawait dailyCostTracker.refresh();\n\t\t\tdailyCostTrackerPrimed = true;\n\t\t}\n\t\treturn dailyCostTracker.getDailyCost();\n\t};\n\n\tconst cwd = session.sessionManager.getCwd();\n\tconst tabTitleSettings = session.settingsManager.getTabTitleSettings();\n\tconst tabTitleGenerator =\n\t\t!session.sessionName && tabTitleSettings?.enabled !== false\n\t\t\t? new TabTitleGenerator(tabTitleSettings, {\n\t\t\t\t\tsetTitle: () => {},\n\t\t\t\t\tsetSessionName: (name) => {\n\t\t\t\t\t\tif (!session.sessionName) {\n\t\t\t\t\t\t\tsession.setSessionName(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tgetSessionName: () => session.sessionName,\n\t\t\t\t\tgetMessages: () => session.messages,\n\t\t\t\t\tgetModel: () => session.model,\n\t\t\t\t\tgetModelRegistry: () => session.modelRegistry,\n\t\t\t\t\tgetProvider: () => session.model?.provider,\n\t\t\t\t\tgetAgentModelsOverride: (name) => session.settingsManager.getAgentModelsForAgent(name),\n\t\t\t\t\tgetBranch: () => getGitBranch(cwd),\n\t\t\t\t\tgetRepo: () => basename(cwd),\n\t\t\t\t\tgetCwd: () => cwd,\n\t\t\t\t\tonError: (err) => {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`[rpc] Tab title auto-generation failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t// Dashboard-launched runtimes (--ui dashboard) get events projected before\n\t// serialization: message_update's cumulative `message` and\n\t// `assistantMessageEvent.partial` fields are quadratic in response length on\n\t// the JSONL pipe, and no dashboard consumer reads them (deltas, message_end,\n\t// and get_dashboard_snapshot responses carry the authoritative data). Inline\n\t// image blocks are deduped over the process lifetime so each unique image\n\t// crosses stdout at most once — later occurrences become image_references\n\t// the dashboard resolves from its image cache (issue 495). Generic RPC\n\t// consumers keep the full protocol unchanged. Only the event stream is\n\t// projected — command responses (output() calls below) always stay complete.\n\tconst dashboardEventProjector = session.uiType === \"dashboard\" ? createDashboardRpcEventProjector() : undefined;\n\n\t// Output all agent events as JSON\n\tsession.subscribe((event) => {\n\t\tif (tabTitleGenerator && !session.sessionName) {\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\ttabTitleGenerator.onToolEnd({\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\tisError: event.isError,\n\t\t\t\t\tresult: event.result,\n\t\t\t\t});\n\t\t\t} else if (event.type === \"message_end\") {\n\t\t\t\ttabTitleGenerator.onMessageEnd(event.message);\n\t\t\t}\n\t\t}\n\t\toutput(dashboardEventProjector ? dashboardEventProjector(event as unknown as Record<string, unknown>) : event);\n\t});\n\n\t// Handle a single command\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse> => {\n\t\tconst id = command.id;\n\n\t\tswitch (command.type) {\n\t\t\t// =================================================================\n\t\t\t// Prompting\n\t\t\t// =================================================================\n\n\t\t\tcase \"prompt\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"prompt\", rejection);\n\t\t\t\t// Don't await - events will stream\n\t\t\t\t// Extension commands are executed immediately, file prompt templates are expanded\n\t\t\t\t// If streaming and streamingBehavior specified, queues via steer/followUp\n\t\t\t\t//\n\t\t\t\t// A subagent child (--ui agent) whose prompt settles without the agent\n\t\t\t\t// loop ever starting (e.g. an extension command consumed the task) would\n\t\t\t\t// otherwise idle forever: its parent waits on agent_end for completion.\n\t\t\t\t// Report that outcome as a late failure so the parent can terminate it.\n\t\t\t\t// The agent's own subscription delivers agent_start synchronously — the\n\t\t\t\t// session-level event queue would race the settled prompt promise.\n\t\t\t\tconst isSubagentChild = session.uiType === \"agent\";\n\t\t\t\tlet sawAgentStart = false;\n\t\t\t\tconst unsubscribe = isSubagentChild\n\t\t\t\t\t? session.agent.subscribe((event) => {\n\t\t\t\t\t\t\tif (event.type === \"agent_start\") sawAgentStart = true;\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\tsession\n\t\t\t\t\t.prompt(command.message, {\n\t\t\t\t\t\timages: command.images,\n\t\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tunsubscribe?.();\n\t\t\t\t\t\tif (isSubagentChild && !sawAgentStart) {\n\t\t\t\t\t\t\toutput(\n\t\t\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"prompt\",\n\t\t\t\t\t\t\t\t\t\"Prompt was handled without starting the agent loop (for example, an extension command consumed the task).\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tunsubscribe?.();\n\t\t\t\t\t\toutput(error(id, \"prompt\", e.message));\n\t\t\t\t\t});\n\t\t\t\treturn success(id, \"prompt\");\n\t\t\t}\n\n\t\t\tcase \"steer\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"steer\", rejection);\n\t\t\t\tawait session.steer(command.message, command.images);\n\t\t\t\treturn success(id, \"steer\");\n\t\t\t}\n\n\t\t\tcase \"follow_up\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"follow_up\", rejection);\n\t\t\t\tawait session.followUp(command.message, command.images);\n\t\t\t\treturn success(id, \"follow_up\");\n\t\t\t}\n\n\t\t\tcase \"abort\": {\n\t\t\t\tconst { abortBackgroundAgents } = await import(\"../../core/tools/subagent.js\");\n\t\t\t\tabortBackgroundAgents();\n\t\t\t\tawait session.abort();\n\t\t\t\treturn success(id, \"abort\");\n\t\t\t}\n\n\t\t\tcase \"new_session\": {\n\t\t\t\tconst options = command.parentSession ? { parentSession: command.parentSession } : undefined;\n\t\t\t\tconst cancelled = !(await session.newSession(options));\n\t\t\t\treturn success(id, \"new_session\", { cancelled });\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tawait session.reload();\n\t\t\t\treturn success(id, \"reload\");\n\t\t\t}\n\n\t\t\tcase \"dream\": {\n\t\t\t\treturn success(id, \"dream\", await runDreamForRpc(session, command.args));\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// State\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_state\": {\n\t\t\t\treturn success(id, \"get_state\", getStateForRpc(session, modelFallbackMessage));\n\t\t\t}\n\n\t\t\tcase \"get_dashboard_snapshot\": {\n\t\t\t\tconst snapshotId = id ?? crypto.randomUUID();\n\t\t\t\tconst data: RpcDashboardSnapshot = {\n\t\t\t\t\tsnapshotId,\n\t\t\t\t\tstate: getStateForRpc(session, modelFallbackMessage),\n\t\t\t\t\tmessages: getDashboardMessagesForRpc(session),\n\t\t\t\t\tbackgroundAgents: getBackgroundAgents().map(toRpcBackgroundAgentInfo),\n\t\t\t\t\tpendingExtensionUiRequests: [...pendingExtensionRequests.values()].map(({ request }) => request),\n\t\t\t\t};\n\t\t\t\treturn success(id, \"get_dashboard_snapshot\", data);\n\t\t\t}\n\n\t\t\tcase \"get_resources\": {\n\t\t\t\treturn success(id, \"get_resources\", getResourcesForRpc(session));\n\t\t\t}\n\n\t\t\tcase \"get_git_branch\": {\n\t\t\t\treturn success(id, \"get_git_branch\", { branch: getGitBranch(session.sessionManager.getCwd()) });\n\t\t\t}\n\n\t\t\tcase \"get_daily_cost\": {\n\t\t\t\treturn success(id, \"get_daily_cost\", { cost: await getDailyCost() });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Model\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((m) => m.provider === command.provider && m.id === command.modelId);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_model\", `Model not found: ${command.provider}/${command.modelId}`);\n\t\t\t\t}\n\t\t\t\tawait session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", model);\n\t\t\t}\n\n\t\t\tcase \"resolve_model\": {\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst result = parseModelPattern(command.pattern, models);\n\t\t\t\tif (!result.model) {\n\t\t\t\t\treturn success(id, \"resolve_model\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"resolve_model\", {\n\t\t\t\t\tmodel: result.model,\n\t\t\t\t\twarning: result.warning,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel();\n\t\t\t\tif (!result) {\n\t\t\t\t\treturn success(id, \"cycle_model\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_model\", result);\n\t\t\t}\n\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\treturn success(id, \"get_available_models\", { models });\n\t\t\t}\n\n\t\t\tcase \"buddy_hatch\": {\n\t\t\t\tconst model = session.model;\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"buddy_hatch\", \"No model available. Set a model first.\");\n\t\t\t\t}\n\t\t\t\tconst apiKey = await session.modelRegistry.getApiKey(model);\n\t\t\t\tif (!apiKey) {\n\t\t\t\t\treturn error(id, \"buddy_hatch\", \"No API key available for the current model.\");\n\t\t\t\t}\n\t\t\t\tconst { BuddyManager } = await import(\"../../core/buddy/buddy-manager.js\");\n\t\t\t\tconst manager = new BuddyManager();\n\t\t\t\tconst state = await manager.hatch(model, apiKey);\n\t\t\t\treturn success(id, \"buddy_hatch\", { state });\n\t\t\t}\n\n\t\t\tcase \"buddy_reroll\": {\n\t\t\t\tconst model = session.model;\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"buddy_reroll\", \"No model available. Set a model first.\");\n\t\t\t\t}\n\t\t\t\tconst apiKey = await session.modelRegistry.getApiKey(model);\n\t\t\t\tif (!apiKey) {\n\t\t\t\t\treturn error(id, \"buddy_reroll\", \"No API key available for the current model.\");\n\t\t\t\t}\n\t\t\t\tconst { BuddyManager } = await import(\"../../core/buddy/buddy-manager.js\");\n\t\t\t\tconst manager = new BuddyManager();\n\t\t\t\tif (!manager.hasStoredBuddy()) {\n\t\t\t\t\treturn error(id, \"buddy_reroll\", \"No buddy to reroll. Use hatch first.\");\n\t\t\t\t}\n\t\t\t\tconst state = await manager.reroll(model, apiKey);\n\t\t\t\treturn success(id, \"buddy_reroll\", { state });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Thinking\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_thinking_level\": {\n\t\t\t\tsession.setThinkingLevel(command.level);\n\t\t\t\treturn success(id, \"set_thinking_level\");\n\t\t\t}\n\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\tif (!level) {\n\t\t\t\t\treturn success(id, \"cycle_thinking_level\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_thinking_level\", { level });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Queue Modes\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_steering_mode\": {\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn success(id, \"set_steering_mode\");\n\t\t\t}\n\n\t\t\tcase \"set_follow_up_mode\": {\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn success(id, \"set_follow_up_mode\");\n\t\t\t}\n\n\t\t\tcase \"get_pending_messages\": {\n\t\t\t\treturn success(id, \"get_pending_messages\", getPendingMessagesForRpc(session));\n\t\t\t}\n\n\t\t\tcase \"clear_pending_messages\": {\n\t\t\t\treturn success(id, \"clear_pending_messages\", session.clearQueue());\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Compaction\n\t\t\t// =================================================================\n\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact(command.customInstructions);\n\t\t\t\treturn success(id, \"compact\", result);\n\t\t\t}\n\n\t\t\tcase \"set_auto_compaction\": {\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_compaction\");\n\t\t\t}\n\n\t\t\tcase \"abort_compaction\": {\n\t\t\t\tsession.abortCompaction();\n\t\t\t\treturn success(id, \"abort_compaction\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Retry\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_auto_retry\": {\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_retry\");\n\t\t\t}\n\n\t\t\tcase \"abort_retry\": {\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn success(id, \"abort_retry\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Bash\n\t\t\t// =================================================================\n\n\t\t\tcase \"bash\": {\n\t\t\t\tconst result = await session.executeBash(command.command);\n\t\t\t\treturn success(id, \"bash\", result);\n\t\t\t}\n\n\t\t\tcase \"abort_bash\": {\n\t\t\t\tsession.abortBash();\n\t\t\t\treturn success(id, \"abort_bash\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Session\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_session_stats\": {\n\t\t\t\tconst stats = session.getSessionStats();\n\t\t\t\treturn success(id, \"get_session_stats\", stats);\n\t\t\t}\n\n\t\t\tcase \"get_performance_stats\": {\n\t\t\t\treturn success(id, \"get_performance_stats\", getPerformanceStatsData(session));\n\t\t\t}\n\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath);\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"import_jsonl\": {\n\t\t\t\tconst cancelled = !(await session.importFromJsonl(command.inputPath));\n\t\t\t\treturn success(id, \"import_jsonl\", { cancelled });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst cancelled = !(await session.switchSession(command.sessionPath));\n\t\t\t\treturn success(id, \"switch_session\", { cancelled });\n\t\t\t}\n\n\t\t\tcase \"delete_session\": {\n\t\t\t\tconst result = await deleteSessionForRpc(session.sessionManager, command.sessionPath);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn error(id, \"delete_session\", result.error);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"delete_session\", { method: result.method });\n\t\t\t}\n\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await session.fork(command.entryId);\n\t\t\t\treturn success(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"get_fork_messages\": {\n\t\t\t\tconst messages = session.getForkableMessages();\n\t\t\t\treturn success(id, \"get_fork_messages\", { messages });\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\treturn success(id, \"get_tree\", getTreeForRpc(session.sessionManager));\n\t\t\t}\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await navigateTreeForRpc(session, command.targetId, {\n\t\t\t\t\t\tsummarize: command.summarize,\n\t\t\t\t\t\tcustomInstructions: command.customInstructions,\n\t\t\t\t\t\treplaceInstructions: command.replaceInstructions,\n\t\t\t\t\t\tlabel: command.label,\n\t\t\t\t\t});\n\t\t\t\t\treturn success(id, \"navigate_tree\", result);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn error(id, \"navigate_tree\", e instanceof Error ? e.message : String(e));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"get_last_assistant_text\": {\n\t\t\t\tconst text = session.getLastAssistantText();\n\t\t\t\treturn success(id, \"get_last_assistant_text\", { text });\n\t\t\t}\n\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) {\n\t\t\t\t\treturn error(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn success(id, \"set_session_name\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Messages\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_messages\": {\n\t\t\t\treturn success(id, \"get_messages\", { messages: session.messages });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Command discovery (resource commands plus client-handled built-ins)\n\t\t\t// =================================================================\n\n\t\t\t// =================================================================\n\t\t\t// Session Listing\n\t\t\t// =================================================================\n\n\t\t\tcase \"list_sessions\": {\n\t\t\t\tconst cwd = session.sessionManager.getCwd();\n\t\t\t\tconst sessionDir = session.sessionManager.getSessionDir();\n\t\t\t\tconst sessions = await SessionManager.list(cwd, sessionDir);\n\t\t\t\treturn success(id, \"list_sessions\", { sessions: sessions.map(toRpcSessionInfo) });\n\t\t\t}\n\n\t\t\tcase \"list_all_sessions\": {\n\t\t\t\treturn success(id, \"list_all_sessions\", { sessions: await listAllSessionsForRpc() });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Background agents\n\t\t\t// =================================================================\n\n\t\t\tcase \"list_background_agents\": {\n\t\t\t\treturn success(id, \"list_background_agents\", {\n\t\t\t\t\tagents: getBackgroundAgents().map(toRpcBackgroundAgentInfo),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"steer_background_agent\": {\n\t\t\t\tconst rejection = getBuiltinPromptRejection(command.message);\n\t\t\t\tif (rejection) return error(id, \"steer_background_agent\", rejection);\n\t\t\t\tawait steerBackgroundAgent(command.agentId, command.message);\n\t\t\t\treturn success(id, \"steer_background_agent\");\n\t\t\t}\n\n\t\t\tcase \"get_background_agent_pending\": {\n\t\t\t\treturn success(\n\t\t\t\t\tid,\n\t\t\t\t\t\"get_background_agent_pending\",\n\t\t\t\t\tawait getBackgroundAgentPendingSteering(command.agentId),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"list_agent_types\": {\n\t\t\t\treturn success(id, \"list_agent_types\", {\n\t\t\t\t\tagentTypes: listAgentTypesForRpc(session.sessionManager.getCwd()),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Settings (persistent defaults)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_settings\": {\n\t\t\t\tconst result = await getFreshSettingsForRpc(session.settingsManager, session.modelRegistry);\n\t\t\t\treturn result.ok ? success(id, \"get_settings\", result.settings) : error(id, \"get_settings\", result.error);\n\t\t\t}\n\n\t\t\tcase \"set_settings\": {\n\t\t\t\tconst result = await setSettingsForRpc(session.settingsManager, session.modelRegistry, command.settings);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn error(id, \"set_settings\", result.error);\n\t\t\t\t}\n\t\t\t\treturn success(\n\t\t\t\t\tid,\n\t\t\t\t\t\"set_settings\",\n\t\t\t\t\tresult.warnings && result.warnings.length > 0\n\t\t\t\t\t\t? { ...result.settings, warnings: result.warnings }\n\t\t\t\t\t\t: result.settings,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"evaluate_context_trust\": {\n\t\t\t\tconst result = evaluateContextTrustForRpc(session.settingsManager, command.path);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"evaluate_context_trust\", result.evaluation)\n\t\t\t\t\t: error(id, \"evaluate_context_trust\", result.error);\n\t\t\t}\n\n\t\t\tcase \"trust_context_folder\": {\n\t\t\t\tconst result = await trustContextFolderForRpc(session.settingsManager, command.path, session.modelRegistry);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"trust_context_folder\", result.result)\n\t\t\t\t\t: error(id, \"trust_context_folder\", result.error);\n\t\t\t}\n\n\t\t\tcase \"untrust_context_folder\": {\n\t\t\t\tconst result = await untrustContextFolderForRpc(\n\t\t\t\t\tsession.settingsManager,\n\t\t\t\t\tcommand.path,\n\t\t\t\t\tsession.modelRegistry,\n\t\t\t\t);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"untrust_context_folder\", result.result)\n\t\t\t\t\t: error(id, \"untrust_context_folder\", result.error);\n\t\t\t}\n\n\t\t\tcase \"remove_trusted_context_folder\": {\n\t\t\t\tconst result = await removeTrustedContextFolderForRpc(\n\t\t\t\t\tsession.settingsManager,\n\t\t\t\t\tcommand.path,\n\t\t\t\t\tsession.modelRegistry,\n\t\t\t\t);\n\t\t\t\treturn result.ok\n\t\t\t\t\t? success(id, \"remove_trusted_context_folder\", result.result)\n\t\t\t\t\t: error(id, \"remove_trusted_context_folder\", result.error);\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Version\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_version\": {\n\t\t\t\treturn success(id, \"get_version\", { version: VERSION });\n\t\t\t}\n\n\t\t\tcase \"get_commands\": {\n\t\t\t\treturn success(id, \"get_commands\", { commands: getCommandsForRpc(session) });\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as { type: string; id?: string };\n\t\t\t\treturn error(unknownCommand.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t * Called after handling each command when waiting for the next command.\n\t */\n\tlet detachInput = () => {};\n\n\tasync function shutdown(): Promise<never> {\n\t\tcancelPendingRpcExtensionRequests(pendingExtensionRequests);\n\n\t\tconst currentRunner = session.extensionRunner;\n\t\tif (currentRunner?.hasHandlers(\"session_shutdown\")) {\n\t\t\tawait currentRunner.emit({ type: \"session_shutdown\" });\n\t\t}\n\n\t\tdailyCostTracker?.dispose();\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tprocess.exit(0);\n\t}\n\n\tasync function checkShutdownRequested(): Promise<void> {\n\t\tif (!shutdownRequested) return;\n\t\tawait shutdown();\n\t}\n\n\tconst handleInputLine = async (line: string) => {\n\t\tlet parsed: any;\n\t\ttry {\n\t\t\tparsed = JSON.parse(line);\n\t\t} catch (e: any) {\n\t\t\toutput(error(undefined, \"parse\", `Failed to parse JSON: ${e.message}`));\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Handle extension UI responses\n\t\t\tif (parsed.type === \"extension_ui_response\") {\n\t\t\t\tconst response = parsed as RpcExtensionUIResponse;\n\t\t\t\tconst pending = pendingExtensionRequests.get(response.id);\n\t\t\t\tif (pending) {\n\t\t\t\t\tpendingExtensionRequests.delete(response.id);\n\t\t\t\t\tpending.resolve(response);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle regular commands\n\t\t\tconst command = parsed as RpcCommand;\n\t\t\tconst response = await handleCommand(command);\n\t\t\t// Emit the barrier before the response. Stdout preserves byte order even\n\t\t\t// when these lines arrive in separate chunks, so RuntimePool always records\n\t\t\t// the EventHub sequence before the response promise can resume.\n\t\t\tif (command.type === \"get_dashboard_snapshot\" && response.success) {\n\t\t\t\tconst snapshot = response as Extract<RpcResponse, { command: \"get_dashboard_snapshot\"; success: true }>;\n\t\t\t\toutput({ type: \"dashboard_snapshot_barrier\", snapshotId: snapshot.data.snapshotId });\n\t\t\t}\n\t\t\toutput(response);\n\n\t\t\t// Check for deferred shutdown request (idle between commands)\n\t\t\tawait checkShutdownRequested();\n\t\t} catch (e: any) {\n\t\t\tconst id = parsed?.id;\n\t\t\tconst cmd = parsed?.type || \"unknown\";\n\t\t\toutput(error(id, cmd, `Command failed: ${e.message}`));\n\t\t}\n\t};\n\n\tconst onInputEnd = () => {\n\t\tvoid shutdown();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\tprocess.stdin.on(\"error\", () => {\n\t\tvoid shutdown();\n\t});\n\n\tdetachInput = (() => {\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, (line) => {\n\t\t\tvoid handleInputLine(line);\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n"]}