pi-background-tasks 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/BACKGROUND-TASKS-INSTRUCTIONS.md +1 -1
  2. package/README.md +70 -25
  3. package/TESTING.md +42 -2
  4. package/TEST_PLAN.md +7 -4
  5. package/dist/extensions/anthropic-attribution-child.js +4 -0
  6. package/dist/extensions/anthropic-attribution-child.js.map +1 -0
  7. package/dist/extensions/anthropic-attribution.js +107 -0
  8. package/dist/extensions/anthropic-attribution.js.map +1 -0
  9. package/dist/extensions/background-tasks.js +2 -0
  10. package/dist/extensions/background-tasks.js.map +1 -0
  11. package/dist/extensions/delegate-child.js +2 -0
  12. package/dist/extensions/delegate-child.js.map +1 -0
  13. package/dist/extensions/fusion-child.js +2 -0
  14. package/dist/extensions/fusion-child.js.map +1 -0
  15. package/dist/package.json +5 -0
  16. package/dist/src/core/anthropic-attribution-path.js +24 -0
  17. package/dist/src/core/anthropic-attribution-path.js.map +1 -0
  18. package/dist/src/core/anthropic-attribution.js +2247 -0
  19. package/dist/src/core/anthropic-attribution.js.map +1 -0
  20. package/dist/src/core/attested-pi-contract.js +5 -0
  21. package/dist/src/core/attested-pi-contract.js.map +1 -0
  22. package/dist/src/core/attested-pi-run.js +749 -0
  23. package/dist/src/core/attested-pi-run.js.map +1 -0
  24. package/dist/src/core/canonical-json.js +19 -0
  25. package/dist/src/core/canonical-json.js.map +1 -0
  26. package/dist/src/core/common.js +787 -0
  27. package/dist/src/core/common.js.map +1 -0
  28. package/dist/src/core/config.js +78 -0
  29. package/dist/src/core/config.js.map +1 -0
  30. package/dist/src/core/context/parent-snapshot.js +75 -0
  31. package/dist/src/core/context/parent-snapshot.js.map +1 -0
  32. package/dist/src/core/context/token-budget.js +631 -0
  33. package/dist/src/core/context/token-budget.js.map +1 -0
  34. package/dist/src/core/context/visible-conversation-v2.js +390 -0
  35. package/dist/src/core/context/visible-conversation-v2.js.map +1 -0
  36. package/dist/src/core/delegate/artifacts.js +357 -0
  37. package/dist/src/core/delegate/artifacts.js.map +1 -0
  38. package/dist/src/core/delegate/budget.js +266 -0
  39. package/dist/src/core/delegate/budget.js.map +1 -0
  40. package/dist/src/core/delegate/facade-contract.js +7 -0
  41. package/dist/src/core/delegate/facade-contract.js.map +1 -0
  42. package/dist/src/core/delegate/hook-contract-evidence.json +18 -0
  43. package/dist/src/core/delegate/hook-contract.js +124 -0
  44. package/dist/src/core/delegate/hook-contract.js.map +1 -0
  45. package/dist/src/core/delegate/launch.js +366 -0
  46. package/dist/src/core/delegate/launch.js.map +1 -0
  47. package/dist/src/core/delegate/result-package.js +293 -0
  48. package/dist/src/core/delegate/result-package.js.map +1 -0
  49. package/dist/src/core/delegate/runner.js +398 -0
  50. package/dist/src/core/delegate/runner.js.map +1 -0
  51. package/dist/src/core/delegate/seed.js +334 -0
  52. package/dist/src/core/delegate/seed.js.map +1 -0
  53. package/dist/src/core/delegate/types.js +103 -0
  54. package/dist/src/core/delegate/types.js.map +1 -0
  55. package/dist/src/core/durable-fs.js +372 -0
  56. package/dist/src/core/durable-fs.js.map +1 -0
  57. package/dist/src/core/extension-api.js +382 -0
  58. package/dist/src/core/extension-api.js.map +1 -0
  59. package/dist/src/core/fusion/artifacts.js +654 -0
  60. package/dist/src/core/fusion/artifacts.js.map +1 -0
  61. package/dist/src/core/fusion/budget.js +949 -0
  62. package/dist/src/core/fusion/budget.js.map +1 -0
  63. package/dist/src/core/fusion/child-protocol.js +176 -0
  64. package/dist/src/core/fusion/child-protocol.js.map +1 -0
  65. package/dist/src/core/fusion/claude-cache.js +156 -0
  66. package/dist/src/core/fusion/claude-cache.js.map +1 -0
  67. package/dist/src/core/fusion/clean-context.js +64 -0
  68. package/dist/src/core/fusion/clean-context.js.map +1 -0
  69. package/dist/src/core/fusion/config.js +349 -0
  70. package/dist/src/core/fusion/config.js.map +1 -0
  71. package/dist/src/core/fusion/context.js +184 -0
  72. package/dist/src/core/fusion/context.js.map +1 -0
  73. package/dist/src/core/fusion/evaluation.js +696 -0
  74. package/dist/src/core/fusion/evaluation.js.map +1 -0
  75. package/dist/src/core/fusion/facade-contract.js +3 -0
  76. package/dist/src/core/fusion/facade-contract.js.map +1 -0
  77. package/dist/src/core/fusion/orchestrator.js +867 -0
  78. package/dist/src/core/fusion/orchestrator.js.map +1 -0
  79. package/dist/src/core/fusion/output-contract.js +27 -0
  80. package/dist/src/core/fusion/output-contract.js.map +1 -0
  81. package/dist/src/core/fusion/pi-child.js +1741 -0
  82. package/dist/src/core/fusion/pi-child.js.map +1 -0
  83. package/dist/src/core/fusion/prompts.js +260 -0
  84. package/dist/src/core/fusion/prompts.js.map +1 -0
  85. package/dist/src/core/fusion/result-package.js +857 -0
  86. package/dist/src/core/fusion/result-package.js.map +1 -0
  87. package/dist/src/core/fusion/source-policy.js +259 -0
  88. package/dist/src/core/fusion/source-policy.js.map +1 -0
  89. package/dist/src/core/fusion/types.js +207 -0
  90. package/dist/src/core/fusion/types.js.map +1 -0
  91. package/dist/src/core/fusion/web-fetch.js +777 -0
  92. package/dist/src/core/fusion/web-fetch.js.map +1 -0
  93. package/dist/src/core/fusion/workflows.js +126 -0
  94. package/dist/src/core/fusion/workflows.js.map +1 -0
  95. package/dist/src/core/lazy-module.js +181 -0
  96. package/dist/src/core/lazy-module.js.map +1 -0
  97. package/dist/src/core/pi-launch.js +431 -0
  98. package/dist/src/core/pi-launch.js.map +1 -0
  99. package/dist/src/core/registry.js +3331 -0
  100. package/dist/src/core/registry.js.map +1 -0
  101. package/dist/src/core/reload-shell-owner.js +1396 -0
  102. package/dist/src/core/reload-shell-owner.js.map +1 -0
  103. package/dist/src/core/shell-policy.js +80 -0
  104. package/dist/src/core/shell-policy.js.map +1 -0
  105. package/dist/src/core/task-durable.js +51 -0
  106. package/dist/src/core/task-durable.js.map +1 -0
  107. package/dist/src/core/update-check.js +92 -0
  108. package/dist/src/core/update-check.js.map +1 -0
  109. package/dist/src/core/windows-taskkill.js +185 -0
  110. package/dist/src/core/windows-taskkill.js.map +1 -0
  111. package/dist/src/delegate-child-extension.js +776 -0
  112. package/dist/src/delegate-child-extension.js.map +1 -0
  113. package/dist/src/delegate-extension.js +746 -0
  114. package/dist/src/delegate-extension.js.map +1 -0
  115. package/dist/src/extension.js +953 -0
  116. package/dist/src/extension.js.map +1 -0
  117. package/dist/src/fusion-child-extension.js +760 -0
  118. package/dist/src/fusion-child-extension.js.map +1 -0
  119. package/dist/src/fusion-extension.js +1030 -0
  120. package/dist/src/fusion-extension.js.map +1 -0
  121. package/dist/src/ui/background-tasks-manager.js +689 -0
  122. package/dist/src/ui/background-tasks-manager.js.map +1 -0
  123. package/dist/src/ui/fusion-model-selector.js +277 -0
  124. package/dist/src/ui/fusion-model-selector.js.map +1 -0
  125. package/docs/INDEX.md +35 -33
  126. package/docs/api/eventbus-v1.md +21 -5
  127. package/docs/choose-a-workflow.md +2 -0
  128. package/docs/commands/bg-clear.md +3 -3
  129. package/docs/commands/bg-update.md +3 -3
  130. package/docs/commands/bg.md +18 -6
  131. package/docs/commands/claude-cache.md +4 -4
  132. package/docs/commands/fusion-models.md +49 -4
  133. package/docs/commands/fusion.md +3 -3
  134. package/docs/commands/jobs.md +3 -3
  135. package/docs/commands/kill.md +3 -3
  136. package/docs/commands/logs.md +3 -3
  137. package/docs/commands/task-manager.md +5 -5
  138. package/docs/concepts/completion-delivery.md +6 -2
  139. package/docs/getting-started.md +7 -1
  140. package/docs/manifest.json +228 -42
  141. package/docs/operations/configuration.md +58 -5
  142. package/docs/operations/releasing.md +4 -2
  143. package/docs/operations/testing.md +22 -0
  144. package/docs/operations/troubleshooting.md +6 -2
  145. package/docs/read-before-edit.md +44 -31
  146. package/docs/reference/runtime-contracts.md +87 -51
  147. package/docs/reference/shortcuts-and-dock.md +28 -14
  148. package/docs/subsystems/anthropic-attribution.md +23 -11
  149. package/docs/subsystems/attested-pi-runs.md +12 -7
  150. package/docs/subsystems/background-task-runtime.md +53 -11
  151. package/docs/subsystems/child-launch-durability-and-safety.md +28 -9
  152. package/docs/subsystems/delegation.md +16 -3
  153. package/docs/subsystems/docs-freshness-gate.md +14 -7
  154. package/docs/subsystems/fusion.md +36 -11
  155. package/docs/subsystems/host-ui-and-telemetry.md +22 -9
  156. package/docs/tools/bg_delegate.md +3 -1
  157. package/docs/tools/bg_kill.md +3 -1
  158. package/docs/tools/bg_logs.md +3 -1
  159. package/docs/tools/bg_result.md +5 -3
  160. package/docs/tools/bg_run.md +31 -5
  161. package/docs/tools/bg_run_pi_attested.md +3 -1
  162. package/docs/tools/bg_status.md +3 -1
  163. package/docs/tools/fusion_investigate.md +3 -1
  164. package/docs/tools/fusion_reason.md +3 -1
  165. package/docs/tools/fusion_research.md +3 -1
  166. package/docs/tools/fusion_validate.md +3 -1
  167. package/extensions/anthropic-attribution-child.ts +3 -0
  168. package/extensions/anthropic-attribution.ts +166 -1
  169. package/package.json +12 -10
  170. package/src/core/anthropic-attribution-path.ts +5 -4
  171. package/src/core/anthropic-attribution.ts +293 -113
  172. package/src/core/attested-pi-contract.ts +4 -0
  173. package/src/core/attested-pi-run.ts +468 -81
  174. package/src/core/canonical-json.ts +21 -0
  175. package/src/core/common.ts +450 -40
  176. package/src/core/config.ts +121 -0
  177. package/src/core/context/visible-conversation-v2.ts +3 -6
  178. package/src/core/delegate/artifacts.ts +13 -9
  179. package/src/core/delegate/budget.ts +13 -6
  180. package/src/core/delegate/facade-contract.ts +6 -0
  181. package/src/core/delegate/result-package.ts +32 -14
  182. package/src/core/delegate/runner.ts +129 -58
  183. package/src/core/delegate/seed.ts +5 -7
  184. package/src/core/durable-fs.ts +178 -30
  185. package/src/core/extension-api.ts +36 -8
  186. package/src/core/fusion/artifacts.ts +17 -16
  187. package/src/core/fusion/clean-context.ts +8 -5
  188. package/src/core/fusion/config.ts +2 -1
  189. package/src/core/fusion/context.ts +2 -6
  190. package/src/core/fusion/facade-contract.ts +2 -0
  191. package/src/core/fusion/orchestrator.ts +3 -3
  192. package/src/core/fusion/prompts.ts +1 -1
  193. package/src/core/fusion/result-package.ts +259 -72
  194. package/src/core/fusion/source-policy.ts +43 -17
  195. package/src/core/lazy-module.ts +215 -0
  196. package/src/core/pi-launch.ts +390 -65
  197. package/src/core/registry.ts +2010 -381
  198. package/src/core/reload-shell-owner.ts +1662 -0
  199. package/src/core/shell-policy.ts +134 -0
  200. package/src/core/task-durable.ts +67 -0
  201. package/src/delegate-extension.ts +404 -144
  202. package/src/extension.ts +387 -114
  203. package/src/fusion-extension.ts +202 -96
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate-extension.js","sourceRoot":"","sources":["../../src/delegate-extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAOzC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAO5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,GAOd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,EAC1B,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAAG,aAAa,CACtC,IAAI,GAAG,CAAC,6CAA6C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CACxE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CACvC;IACE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,4EAA4E;KAC1F,CAAC;IACF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EACT,uGAAuG;KAC1G,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,MAAM,CACT;QACE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;QACrE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;KAC7E,EACD;QACE,oBAAoB,EAAE,KAAK;QAC3B,WAAW,EAAE,gDAAgD;KAC9D,CACF,CACF;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,oHAAoH;KAClI,CAAC,CACH;IACD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAC1B,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EACT,yLAAyL;KAC5L,CAAC,CACH;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,gCAAgC,MAAM,CAAC,0BAA0B,CAAC,GAAG;KACnF,CAAC,CACH;IACD,YAAY,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,+BAA+B,MAAM,CAAC,+BAA+B,CAAC,GAAG;KACvF,CAAC,CACH;IACD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,+BAA+B,MAAM,CAAC,gCAAgC,CAAC,GAAG;KACxF,CAAC,CACH;IACD,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EACT,8HAA8H;KACjI,CAAC,CACH;IACD,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,0DAA0D,EAAE,CAAC,CAC1F;IACD,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,6DAA6D,EAAE,CAAC,CAC7F;CACF,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAC9B;IACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,oEAAoE;KAClF,CAAC;IACF,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EACT,wIAAwI;KAC3I,CAAC,CACH;CACF,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAKF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,MAAM;IACN,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,eAAe;IACf,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,oBAAoB;IACpB,qBAAqB;CACtB,CAAC,CAAC;AA0DH,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAkB;IAC1C,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACxE,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EAAE;YACJ,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;YACvB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;YACzB,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;YAC/B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;YACjC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;SACxB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,IAAI,aAAa,CACrB,yCAAyC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,oEAAoE,EAC7I,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC3C,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,aAAa,CACrB,4CAA4C,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACjF,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpF,MAAM,IAAI,aAAa,CACrB,0CAA0C,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAClF,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC7D,MAAM,IAAI,aAAa,CAAC,+CAA+C,EAAE;QACvE,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,aAAa,CAAC,qCAAqC,EAAE;YAC7D,IAAI,EAAE,mBAAmB;YACzB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACvD,MAAM,IAAI,aAAa,CAAC,uDAAuD,EAAE;YAC/E,IAAI,EAAE,mBAAmB;YACzB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QACjD,MAAM,IAAI,aAAa,CAAC,oDAAoD,EAAE;YAC5E,IAAI,EAAE,mBAAmB;YACzB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc,EAAE,KAAa;IAC5D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACxB,KAAK,IAAI,CAAC;QAEV,MAAM,IAAI,aAAa,CAAC,eAAe,KAAK,6BAA6B,EAAE;YACzE,IAAI,EAAE,mBAAmB;YACzB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,OAAO,KAAK,CAAC;AACf,CAAC;AA2CD,KAAK,UAAU,8BAA8B;IAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,MAAM,CAAC,2BAA2B,CAAC;QACnC,MAAM,CAAC,2BAA2B,CAAC;KACpC,CAAC,CAAC;IACH,OAAO;QACL,gCAAgC,EAAE,MAAM,CAAC,gCAAgC;QACzE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;KACpD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,2BAA2B;IACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACzD,OAAO;QACL,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;QACrD,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;QACzD,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB;IACtC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IACtE,OAAO;QACL,yBAAyB,EAAE,aAAa,CAAC,yBAAyB;QAClE,uBAAuB,EAAE,aAAa,CAAC,uBAAuB;KAC/D,CAAC;AACJ,CAAC;AAyBD,KAAK,UAAU,mBAAmB,CAChC,OAA6C;IAE7C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CACrB,4EAA4E,kBAAkB,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EACjM;YACE,IAAI,EAAE,oCAAoC;YAC1C,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE;gBACX,qFAAqF;gBACrF,2DAA2D;aAC5D;SACF,CACF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,iCAAiC,GAAG,GAAG,CAAC;AAE9C,SAAS,4BAA4B,CAAC,KAAc;IAClD,MAAM,IAAI,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnG,IAAI,IAAI,CAAC,MAAM,IAAI,iCAAiC;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iCAAiC,CAAC,GAAG,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,uCAAuC,CACpD,QAAgC,EAChC,aAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,cAAc,CAChC,CAAC,aAAa,EAAE,YAAY,CAAC,EAC7B,6DAA6D,4BAA4B,CAAC,YAAY,CAAC,EAAE,CAC1G,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,EAAgB,EAChB,IAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,UAAU,CAC5B,mBAAmB,EACnB,IAAI,CAAC,WAAW,IAAI,8BAA8B,CACnD,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnF,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IAC/C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAiB,CAAC;IAErD,MAAM,gBAAgB,GAAG,CAAI,SAAqB,EAAc,EAAE;QAChE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAC5B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YACrB,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,GAAS,EAAE;QACzC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC1F,CAAC,CAAC;IACF,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAEvD,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAA+C;QAC5D,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,+aAA+a;QACjb,aAAa,EACX,+FAA+F;QACjG,gBAAgB,EAAE;YAChB,8JAA8J;YAC9J,2GAA2G;YAC3G,iMAAiM;YACjM,2JAA2J;YAC3J,wLAAwL;YACxL,0HAA0H;YAC1H,2HAA2H;SAC5H;QACD,UAAU,EAAE,cAAc;QAC1B,gBAAgB,CAAC,IAAI;YACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,MAAM,IAAI,aAAa,CAAC,yCAAyC,EAAE;oBACjE,IAAI,EAAE,mBAAmB;oBACzB,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;YACL,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACrF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,aAAa,CACrB,4CAA4C,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC3E,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,CACnD,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBACtD,MAAM,IAAI,aAAa,CAAC,uCAAuC,EAAE;oBAC/D,IAAI,EAAE,mBAAmB;oBACzB,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;YACL,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAC1D,MAAM,IAAI,aAAa,CAAC,yCAAyC,EAAE;oBACjE,IAAI,EAAE,mBAAmB;oBACzB,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;YACL,MAAM,QAAQ,GAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,SAAS;gBAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YAChD,QAAQ,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC5D,QAAQ,CAAC,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YACrE,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;YACvE,IAAI,QAAQ,KAAK,SAAS;gBAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzD,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;YACnF,IAAI,YAAY,KAAK,SAAS;gBAAE,QAAQ,CAAC,YAAY,GAAG,YAAY,CAAC;YACrE,MAAM,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YACzF,IAAI,cAAc,KAAK,SAAS;gBAAE,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC1C,IAAI,OAAO,MAAM,KAAK,SAAS;gBAAE,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC;YACtE,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC5C,IAAI,OAAO,OAAO,KAAK,SAAS;gBAAE,QAAQ,CAAC,mBAAmB,GAAG,OAAO,CAAC;YACzE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG;YACvD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAClC,MAAM,YAAY,GAAG,MAAM,YAAY,EAAE,CAAC;gBAC1C,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,MAAM,CAAC,oBAAoB,CAAC;oBACxC,SAAS,EAAE,MAAM,CAAC,KAAK;oBACvB,YAAY,EACV,GAAG,CAAC,KAAK,KAAK,SAAS;wBACrB,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC;4BACE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;4BAC5B,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;4BAChB,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa;yBACvC;oBACP,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,aAAa,EAAE,KAAK,CAAC,aAAa;qBACnC,CAAC,CAAC;oBACH,aAAa,EAAE,EAAE,CAAC,gBAAgB,EAAE;iBACrC,CAAC,CAAC;gBAEH,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;oBAC9B,IAAI,QAA4C,CAAC;oBACjD,IAAI,CAAC;wBACH,QAAQ,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC;4BAC5C,GAAG,EAAE;gCACH,GAAG,EAAE,GAAG,CAAC,GAAG;gCACZ,cAAc,EAAE,GAAG,CAAC,cAAc;gCAClC,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE;6BAC7C;4BACD,UAAU;4BACV,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,UAAU;4BACV,aAAa;4BACb,KAAK;4BACL,cAAc,EAAE;gCACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;gCACzB,YAAY,EAAE,MAAM,CAAC,YAAY;gCACjC,cAAc,EAAE,MAAM,CAAC,cAAc;6BACtC;4BACD,YAAY;4BACZ,GAAG,EAAE,GAAG,CAAC,GAAG;4BACZ,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE;4BAC5C,WAAW;4BACX,MAAM,EAAE,gBAAgB,CAAC,MAAM;yBAChC,CAAC,CAAC;wBACH,OAAO,CAAC,UAAU,EAAE,CAAC;oBACvB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;4BAC3B,MAAM,uCAAuC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBACjE,CAAC;wBACD,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;4BACpC,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;gCACpC,OAAO,CAAC,KAAK,CACX,oDAAoD,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,UAAU,EAAE,CAAC;4BACvB,CAAC;wBACH,CAAC;wBACD,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,MAAM,aAAa,GAA6B;wBAC9C,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;wBACrD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;wBACvD,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe;qBAC1D,CAAC;oBACF,IAAI,IAAY,CAAC;oBACjB,IAAI,CAAC;wBACH,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;oBAC1D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,UAAmB,CAAC;wBACxB,IAAI,CAAC;4BACH,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACpE,CAAC;wBAAC,OAAO,cAAc,EAAE,CAAC;4BACxB,MAAM,OAAO,GAAG,IAAI,cAAc,CAChC,CAAC,KAAK,EAAE,cAAc,CAAC,EACvB,6EAA6E,4BAA4B,CAAC,cAAc,CAAC,EAAE,CAC5H,CAAC;4BACF,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;4BAC/C,MAAM,OAAO,CAAC;wBAChB,CAAC;wBACD,IAAI,CAAC,UAAU,EAAE,CAAC;4BAChB,MAAM,uCAAuC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBACjE,CAAC;wBACD,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO;4BAAE,OAAO,CAAC,UAAU,EAAE,CAAC;wBAC1D,MAAM,KAAK,CAAC;oBACd,CAAC;oBACD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBAC3C,CAAC,CAAC,EAAE,CAAC;gBACL,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAC9E,OAAO,CAAC,UAAU,EAAE,CAAC;gBAErB,MAAM,OAAO,GAA0B;oBACrC,cAAc,EAAE,wCAAwC;oBACxD,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzB,KAAK,EAAE;wBACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,YAAY,EAAE,KAAK,CAAC,YAAY;wBAChC,MAAM,EAAE,KAAK,CAAC,MAAM;qBACrB;oBACD,gBAAgB,EAAE,QAAQ,CAAC,SAAS,CAAC,cAAc;oBACnD,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW;oBACxC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;oBACtC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;oBAC9E,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;oBAC7B,cAAc,EAAE,aAAa;oBAC7B,YAAY,EAAE,WAAW;oBACzB,oBAAoB,EAAE,aAAa,CAAC,kBAAkB;oBACtD,qBAAqB,EAAE,aAAa,CAAC,mBAAmB;iBACzD,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,WAAW,CAClB;wBACE,oBAAoB,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,GAAG;wBAC9C,iBAAiB,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,MAAM,6BAA6B;wBACjF,kBAAkB,QAAQ,CAAC,SAAS,CAAC,cAAc,+BAA+B;wBAClF,cAAc,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE;wBAC1C,SAAS,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,kBAAkB,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE;wBAC3H,iBAAiB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,+BAA+B,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,2DAA2D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,6BAA6B,CAAC,UAAU;wBACpW,qBAAqB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,YAAY,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,UAAU,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,mCAAmC,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE;wBACpY,eAAe,UAAU,0BAA0B;wBACnD,mBAAmB,aAAa,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,+JAA+J,CAAC,CAAC,CAAC,yCAAyC,EAAE;wBAC9Q,WAAW,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG;wBACrL,iBAAiB,WAAW,EAAE;wBAC9B,aAAa,CAAC,kBAAkB;4BAC9B,CAAC,CAAC,kCAAkC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,4BAA4B,EAAE;4BAC3I,CAAC,CAAC,kCAAkC;wBACtC,qCAAqC,yBAAyB,aAAa,IAAI,CAAC,EAAE,mBAAmB;qBACtG,CAAC,IAAI,CAAC,IAAI,CAAC,CACb;oBACD,OAAO;iBACR,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK;YACpB,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EACxG,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,OAAO,CAAC,KAAK,CAAC,YAAY,iBAAiB,OAAO,CAAC,cAAc,WAAW,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,EACrP,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,EAAE,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,EAAgB,EAChB,IAA2C;IAE3C,MAAM,qBAAqB,GAAG,IAAI,UAAU,CAC1C,0BAA0B,EAC1B,IAAI,CAAC,yBAAyB,IAAI,2BAA2B,CAC9D,CAAC;IACF,MAAM,mBAAmB,GAAG,IAAI,UAAU,CACxC,wBAAwB,EACxB,IAAI,CAAC,uBAAuB,IAAI,yBAAyB,CAC1D,CAAC;IACF,IAAI,iBAAoC,CAAC;IACzC,MAAM,kBAAkB,GAAG,GAAS,EAAE;QACpC,IAAI,iBAAiB,KAAK,SAAS;YAAE,MAAM,iBAAiB,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,GAAS,EAAE;QACvC,iBAAiB,KAAK,IAAI,KAAK,CAC7B,mGAAmG,CACpG,CAAC;QACF,qBAAqB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnD,mBAAmB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAErD,EAAE,CAAC,YAAY,CAA+C;QAC5D,IAAI,EAAE,yBAAyB;QAC/B,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,qLAAqL;QACvL,aAAa,EAAE,uEAAuE;QACtF,gBAAgB,EAAE;YAChB,uHAAuH;YACvH,iGAAiG;SAClG;QACD,UAAU,EAAE,YAAY;QACxB,gBAAgB,CAAC,IAAI;YACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,MAAM,IAAI,aAAa,CAAC,uCAAuC,EAAE;oBAC/D,IAAI,EAAE,mBAAmB;oBACzB,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAC1D,MAAM,IAAI,aAAa,CAAC,2BAA2B,EAAE;oBACnD,IAAI,EAAE,mBAAmB;oBACzB,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;YACL,MAAM,QAAQ,GAAsB,EAAE,MAAM,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACnD,IAAI,QAAQ,KAAK,SAAS;gBAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,wEAAwE;YACxE,kBAAkB,EAAE,CAAC;YACrB,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,aAAa,CACrB,gCAAgC,MAAM,CAAC,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC1G,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,CAC9C,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAkC;wBAC7C,cAAc,EAAE,2CAA2C;wBAC3D,OAAO,EAAE,IAAI,CAAC,EAAE;wBAChB,KAAK,EAAE,SAAS;wBAChB,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,YAAY,EAAE,MAAM,CAAC,WAAW;qBACjC,CAAC;oBACF,OAAO;wBACL,OAAO,EAAE,WAAW,CAClB,UAAU,IAAI,CAAC,EAAE,+HAA+H,CACjJ;wBACD,OAAO;qBACR,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;oBAC1E,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACxD,MAAM,CAAC,uBAAuB,CAAC;wBAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B,CAAC,CACH,CAAC;oBACF,mBAAmB,CAAC,UAAU,EAAE,CAAC;oBACjC,MAAM,KAAK,GACT,MAAM,CAAC,OAAO,EAAE,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;wBAChE,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,QAAQ,CAAC;oBACf,MAAM,OAAO,GAAkC;wBAC7C,cAAc,EAAE,2CAA2C;wBAC3D,OAAO,EAAE,IAAI,CAAC,EAAE;wBAChB,KAAK;wBACL,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,YAAY,EAAE,MAAM,CAAC,WAAW;wBAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,cAAc,EAAE,QAAQ,CAAC,cAAc;wBACvC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,KAAK,SAAS;4BAC5C,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC;wBAC1D,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACxE,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;wBAC3E,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;wBACvF,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;wBAC3E,GAAG,CAAC,QAAQ,CAAC,kBAAkB,KAAK,SAAS;4BAC3C,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC;wBACxD,GAAG,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS;4BACxC,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC;wBAClD,GAAG,CAAC,QAAQ,CAAC,0BAA0B,KAAK,SAAS;4BACnD,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,0BAA0B,EAAE,QAAQ,CAAC,0BAA0B,EAAE,CAAC;qBACzE,CAAC;oBACF,OAAO;wBACL,OAAO,EAAE,WAAW,CAClB,UAAU,IAAI,CAAC,EAAE,IAAI,KAAK,wDAAwD,QAAQ,CAAC,cAAc,iFAAiF,CAC3L;wBACD,OAAO;qBACR,CAAC;gBACJ,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACxD,MAAM,CAAC,yBAAyB,CAAC;oBAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CACH,CAAC;gBACF,mBAAmB,CAAC,UAAU,EAAE,CAAC;gBACjC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACnE,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC5E,MAAM,WAAW,GACf,iBAAiB,KAAK,UAAU;oBAChC,CAAC,iBAAiB,KAAK,SAAS,IAAI,WAAW,GAAG,4BAA4B,CAAC,CAAC;gBAClF,IAAI,iBAAiB,KAAK,QAAQ,IAAI,WAAW,GAAG,4BAA4B,EAAE,CAAC;oBACjF,MAAM,IAAI,KAAK,CACb,iBAAiB,IAAI,CAAC,EAAE,OAAO,MAAM,CAAC,WAAW,CAAC,qBAAqB,MAAM,CAAC,4BAA4B,CAAC,qEAAqE,CACjL,CAAC;gBACJ,CAAC;gBACD,mBAAmB,CAAC,UAAU,EAAE,CAAC;gBACjC,yEAAyE;gBACzE,qEAAqE;gBACrE,uEAAuE;gBACvE,qEAAqE;gBACrE,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM,OAAO,GAAkC;oBAC7C,cAAc,EAAE,2CAA2C;oBAC3D,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,KAAK,EAAE,WAAW;oBAClB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;oBAC7C,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,YAAY,EAAE,MAAM,CAAC,WAAW;oBAChC,YAAY,EAAE,WAAW;oBACzB,aAAa,EAAE,YAAY;oBAC3B,eAAe,EAAE,cAAc;iBAChC,CAAC;gBACF,MAAM,MAAM,GAAG;oBACb,UAAU,IAAI,CAAC,EAAE,eAAe,MAAM,CAAC,QAAQ,IAAI;oBACnD,WAAW,MAAM,CAAC,WAAW,CAAC,WAAW,YAAY,cAAc;oBACnE,cAAc,MAAM,CAAC,WAAW,EAAE;oBAClC,cAAc;wBACZ,CAAC,CAAC,iDAAiD;wBACnD,CAAC,CAAC,qEAAqE;iBAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,MAAM,MAAM,GAAG,WAAW;oBACxB,CAAC,CAAC;wBACE,OAAO,EAAE,WAAW,CAClB,GAAG,MAAM,gDAAgD,MAAM,CAAC,WAAW,mCAAmC,CAC/G;wBACD,OAAO;qBACR;oBACH,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;gBAC7E,IAAI,CAAC,cAAc;oBAAE,OAAO,MAAM,CAAC;gBACnC,MAAM,eAAe,GAA2C;oBAC9D,GAAG,MAAM;oBACT,KAAK;iBACN,CAAC;gBACF,OAAO,eAAe,CAAC;YACzB,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,aAAa,CACrB,kBAAkB,IAAI,CAAC,EAAE,0FAA0F,EACnH,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,CAC9C,CAAC;YACJ,CAAC;YACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;YACvC,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,OAAO,GAA0B;oBACrC,cAAc,EAAE,6CAA6C;oBAC7D,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,MAAM;oBAChB,YAAY,EAAE,KAAK,CAAC,WAAW;oBAC/B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,cAAc,EAAE,KAAK,CAAC,aAAa;iBACpC,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,WAAW,CAClB,YAAY,IAAI,CAAC,EAAE,wJAAwJ,CAC5K;oBACD,OAAO;iBACR,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpE,MAAM;gBACN,QAAQ,EAAE,MAAM,MAAM,CAAC,wBAAwB,CAAC;oBAC9C,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;oBACnE,UAAU,EACR,kBAAkB,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB;oBACvE,SAAS,EAAE,IAAI,CAAC,KAAK;oBACrB,cAAc,EAAE,IAAI,CAAC,UAAU;oBAC/B,iBAAiB,EAAE,IAAI,CAAC,aAAa;iBACtC,CAAC;aACH,CAAC,CAAC,CAAC;YACJ,qBAAqB,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAElD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClE,MAAM,OAAO,GACX,QAAQ,CAAC,KAAK;oBACd,IAAI,aAAa,CAAC,YAAY,IAAI,CAAC,EAAE,8BAA8B,EAAE;wBACnE,IAAI,EAAE,oBAAoB;wBAC1B,YAAY,EAAE,IAAI;wBAClB,MAAM,EAAE,IAAI,CAAC,EAAE;wBACf,WAAW,EAAE,KAAK,CAAC,WAAW;qBAC/B,CAAC,CAAC;gBACL,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YACjC,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,CAC9C,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EACnC,iBAAiB,CAClB,CAAC;YACF,IAAI,iBAAiB,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CACrC,IAAI,CAAC,EAAE,EACP,KAAK,CAAC,WAAW,EACjB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CACpC,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,OAAO,GAA0B;gBACrC,cAAc,EAAE,6CAA6C;gBAC7D,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;gBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,cAAc,EAAE,KAAK,CAAC,aAAa;gBACnC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW;gBACjD,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;gBAC7C,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;gBAC7B,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU;gBACvC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;gBAChD,YAAY,EAAE,KAAK,CAAC,WAAW;aAChC,CAAC;YACF,MAAM,MAAM,GAAG;gBACb,YAAY,IAAI,CAAC,EAAE,iBAAiB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;gBACtG,WAAW,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,cAAc;gBACpH,UAAU,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;gBACzI,cAAc,KAAK,CAAC,WAAW,EAAE;gBACjC,qBAAqB,KAAK,CAAC,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,UAAU,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,mCAAmC,CAAC,gBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE;aAC/U,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACjC,OAAO;oBACL,OAAO,EAAE,WAAW,CAClB,GAAG,MAAM,yBAAyB,QAAQ,CAAC,MAAM,yCAAyC,KAAK,CAAC,WAAW,qCAAqC,CACjJ;oBACD,OAAO;iBACR,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QAC9E,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK;YACpB,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EACtF,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,OAAgC,EAAE,KAAY;YACjE,KAAK,OAAO,CAAC;YACb,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,KAAK,2CAA2C,CAAC;YACtF,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;gBAC7B,OAAO,IAAI,IAAI,CACb,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,gBAAgB,CAAC,EACzF,CAAC,EACD,CAAC,CACF,CAAC;YACJ,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,CAAC;gBAC5E,OAAO,IAAI,IAAI,CACb,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,KAAK,kCAAkC,OAAO,CAAC,cAAc,IAAI,aAAa,EAAE,CAAC,EAChH,CAAC,EACD,CAAC,CACF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,EAC5J,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,EAAE,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC","sourcesContent":["import { createHash } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { fileURLToPath } from 'node:url';\nimport type {\n ExtensionAPI,\n ExtensionContext,\n Theme,\n ToolRenderResultOptions,\n} from '@earendil-works/pi-coding-agent';\nimport { Text } from '@earendil-works/pi-tui';\nimport { Type, type Static } from 'typebox';\nimport type {\n BgTask,\n BgTaskSnapshot,\n DelegateTaskFacts,\n StartDelegateTaskOptions,\n} from './core/common.js';\nimport { truncateChars } from './core/common.js';\nimport type {\n FusionFailureResultView,\n FusionUsage,\n FusionWorkflowId,\n} from './core/fusion/types.js';\nimport {\n DELEGATE_AUTO_DELIVER_MODES,\n DELEGATE_CAPABILITIES,\n DELEGATE_EXTENSION_MODES,\n DELEGATE_RESULT_TOOL_NAME,\n DELEGATE_TOOL_NAME,\n DelegateError,\n type DelegateAutoDeliverMode,\n type DelegateCapability,\n type DelegateDeliveryMode,\n type DelegateBudgetRouteSource,\n type DelegateExtensionMode,\n type DelegateRoute,\n} from './core/delegate/types.js';\nimport type { DelegateHookContractEvidence } from './core/delegate/hook-contract.js';\nimport {\n DELEGATE_DEFAULT_MAX_TOOL_CALLS,\n DELEGATE_DEFAULT_MAX_TURNS,\n DELEGATE_DEFAULT_TIMEOUT_SECONDS,\n DELEGATE_INLINE_ANSWER_BYTES,\n} from './core/delegate/facade-contract.js';\nimport {\n LazyModule,\n SynchronousActivationCloseFence,\n} from './core/lazy-module.js';\n\n/**\n * `bg_delegate` and `bg_result` registration.\n *\n * `bg_delegate` launches one background child Pi agent seeded with a frozen\n * projection of the current conversation. `bg_result` retrieves that child's\n * hash-verified answer. They ship together: a delegate without a safe retrieval\n * path would have no way to return its work.\n */\n\n/**\n * Shipped copy of the observed Pi hook-contract evidence.\n *\n * It is produced by executing a real Pi agent loop in\n * `tests/scripted-provider/pi-hook-contract.test.ts`, and a package test asserts\n * the shipped copy is byte-identical to the recorded one, so the runtime gate\n * and the gate that proved it can never drift apart.\n */\nconst HOOK_EVIDENCE_PATH = fileURLToPath(\n new URL('./core/delegate/hook-contract-evidence.json', import.meta.url),\n);\n\nexport const DelegateParams = Type.Object(\n {\n name: Type.String({\n description: 'Short human-readable task name shown in the bg footer dock. Use 2-6 words.',\n }),\n prompt: Type.String({\n description:\n 'Authoritative instruction for the delegate. The projected conversation is supporting background only.',\n }),\n route: Type.Optional(\n Type.Object(\n {\n provider: Type.String({ description: 'Exact provider name to pin.' }),\n model: Type.String({ description: 'Exact provider-local model id to pin.' }),\n },\n {\n additionalProperties: false,\n description: 'Explicit route. Defaults to the current model.',\n },\n ),\n ),\n capability: Type.Optional(\n Type.String({\n description: `Capability profile. Only \"inspect\" (read/search/list, no shell, no writes, no network, no recursion) is supported.`,\n }),\n ),\n extensionMode: Type.Optional(\n Type.String({\n description:\n 'Extension discovery: isolated | ambient. Default isolated. Ambient is for extension-registered providers and executes arbitrary discovered extension code, weakening process isolation.',\n }),\n ),\n maxTurns: Type.Optional(\n Type.Number({\n description: `Maximum agent turns. Default ${String(DELEGATE_DEFAULT_MAX_TURNS)}.`,\n }),\n ),\n maxToolCalls: Type.Optional(\n Type.Number({\n description: `Maximum tool calls. Default ${String(DELEGATE_DEFAULT_MAX_TOOL_CALLS)}.`,\n }),\n ),\n timeoutSeconds: Type.Optional(\n Type.Number({\n description: `Wall-clock timeout. Default ${String(DELEGATE_DEFAULT_TIMEOUT_SECONDS)}.`,\n }),\n ),\n autoDeliver: Type.Optional(\n Type.String({\n description:\n 'Whether the completion notification carries the answer: never | when_small | always. Default never; retrieve with bg_result.',\n }),\n ),\n notifyOnCompletion: Type.Optional(\n Type.Boolean({ description: 'Deliver the durable terminal notification. Default true.' }),\n ),\n triggerOnCompletion: Type.Optional(\n Type.Boolean({ description: 'Let that notification start a follow-up turn. Default true.' }),\n ),\n },\n { additionalProperties: false },\n);\n\nconst ResultParams = Type.Object(\n {\n taskId: Type.String({\n description: 'Background delegate or Fusion task id returned by its launch tool.',\n }),\n delivery: Type.Optional(\n Type.String({\n description:\n 'inline returns the verified answer text; artifact returns metadata plus the artifact reference. Oversized answers are never truncated.',\n }),\n ),\n },\n { additionalProperties: false },\n);\n\ntype DelegateParamsValue = Static<typeof DelegateParams>;\ntype ResultParamsValue = Static<typeof ResultParams>;\n\nconst DELEGATE_PARAM_KEYS = new Set([\n 'name',\n 'prompt',\n 'route',\n 'capability',\n 'extensionMode',\n 'maxTurns',\n 'maxToolCalls',\n 'timeoutSeconds',\n 'autoDeliver',\n 'notifyOnCompletion',\n 'triggerOnCompletion',\n]);\n\nexport interface DelegateLaunchDetails {\n schema_version: 'pi-background-tasks.delegate-launch.v1';\n task: BgTaskSnapshot;\n route: { provider: string; model: string; qualified_id: string; origin: string };\n child_session_id: string;\n artifact_dir: string;\n seed_sha256: string;\n seed_utf8_bytes: number;\n budget: DelegateBudgetRouteSource;\n extension_mode: DelegateExtensionMode;\n auto_deliver: DelegateAutoDeliverMode;\n notify_on_completion: boolean;\n trigger_on_completion: boolean;\n}\n\nexport interface FusionBackgroundResultDetails {\n schema_version: 'pi-background-tasks.fusion-result-view.v1';\n task_id: string;\n state: 'running' | 'committed' | 'failed' | 'cancelled';\n delivery: DelegateDeliveryMode | 'none';\n workflow: FusionWorkflowId;\n artifact_dir: string;\n answer_bytes?: number | undefined;\n answer_sha256?: string | undefined;\n usage_delivered?: boolean | undefined;\n answer?: { present: false; reason: 'run_did_not_commit' } | undefined;\n summary_status?: FusionFailureResultView['summary_status'] | undefined;\n failure_summary_ref?: FusionFailureResultView['failure_summary_ref'] | undefined;\n failure?: FusionFailureResultView['failure'] | undefined;\n progress?: FusionFailureResultView['progress'] | undefined;\n usage_so_far?: FusionFailureResultView['usage_so_far'] | undefined;\n attempts?: FusionFailureResultView['attempts'] | undefined;\n evidence_artifacts?: FusionFailureResultView['evidence_artifacts'] | undefined;\n remediation_ids?: FusionFailureResultView['remediation_ids'] | undefined;\n summary_unavailable_reason?: FusionFailureResultView['summary_unavailable_reason'] | undefined;\n}\n\nexport type BackgroundResultDetails = DelegateResultDetails | FusionBackgroundResultDetails;\n\nexport interface DelegateResultDetails {\n schema_version: 'pi-background-tasks.delegate-result-view.v1';\n task_id: string;\n state: 'running' | 'committed' | 'failed' | 'cancelled';\n delivery: DelegateDeliveryMode | 'none';\n route?: { provider: string; model: string } | undefined;\n budget?: DelegateBudgetRouteSource | undefined;\n extension_mode?: DelegateExtensionMode | undefined;\n answer_bytes?: number | undefined;\n answer_sha256?: string | undefined;\n turns?: number | undefined;\n tool_calls?: number | undefined;\n usage?: { status: string } | undefined;\n artifact_dir?: string | undefined;\n error_code?: string | undefined;\n}\n\nfunction textContent(text: string) {\n return [{ type: 'text' as const, text }];\n}\n\nfunction sha256Buffer(buffer: Buffer): string {\n return `sha256:${createHash('sha256').update(buffer).digest('hex')}`;\n}\n\nfunction cloneFusionUsage(usage: FusionUsage): FusionUsage {\n return {\n input: usage.input,\n output: usage.output,\n cacheRead: usage.cacheRead,\n cacheWrite: usage.cacheWrite,\n ...(usage.cacheWrite1h === undefined ? {} : { cacheWrite1h: usage.cacheWrite1h }),\n ...(usage.reasoning === undefined ? {} : { reasoning: usage.reasoning }),\n totalTokens: usage.totalTokens,\n cost: {\n input: usage.cost.input,\n output: usage.cost.output,\n cacheRead: usage.cost.cacheRead,\n cacheWrite: usage.cost.cacheWrite,\n total: usage.cost.total,\n },\n };\n}\n\nfunction isRecord(value: unknown): value is Record<PropertyKey, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction requireCapability(value: unknown): DelegateCapability {\n if (value === undefined) return 'inspect';\n if (value === 'inspect') return 'inspect';\n throw new DelegateError(\n `bg_delegate capability must be one of ${DELEGATE_CAPABILITIES.join(', ')}. Writable profiles are deliberately out of scope in this version.`,\n { code: 'invalid_arguments', childCreated: false },\n );\n}\n\nfunction requireExtensionMode(value: unknown): DelegateExtensionMode {\n if (value === undefined) return 'isolated';\n if (value === 'isolated' || value === 'ambient') return value;\n throw new DelegateError(\n `bg_delegate extensionMode must be one of ${DELEGATE_EXTENSION_MODES.join(', ')}`,\n { code: 'invalid_arguments', childCreated: false },\n );\n}\n\nfunction requireAutoDeliver(value: unknown): DelegateAutoDeliverMode {\n if (value === undefined) return 'never';\n if (value === 'never' || value === 'when_small' || value === 'always') return value;\n throw new DelegateError(\n `bg_delegate autoDeliver must be one of ${DELEGATE_AUTO_DELIVER_MODES.join(', ')}`,\n { code: 'invalid_arguments', childCreated: false },\n );\n}\n\nfunction requireDelivery(value: unknown): DelegateDeliveryMode | undefined {\n if (value === undefined) return undefined;\n if (value === 'inline' || value === 'artifact') return value;\n throw new DelegateError('bg_result delivery must be inline or artifact', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n}\n\nfunction requireRoute(value: unknown): DelegateRoute | undefined {\n if (value === undefined) return undefined;\n if (!isRecord(value)) {\n throw new DelegateError('bg_delegate route must be an object', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n }\n const provider = value['provider'];\n const model = value['model'];\n if (typeof provider !== 'string' || provider.length === 0)\n throw new DelegateError('bg_delegate route.provider must be a non-empty string', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n if (typeof model !== 'string' || model.length === 0)\n throw new DelegateError('bg_delegate route.model must be a non-empty string', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n return { provider, model };\n}\n\nfunction optionalPositiveInteger(value: unknown, label: string): number | undefined {\n if (value === undefined) return undefined;\n if (\n typeof value !== 'number' ||\n !Number.isFinite(value) ||\n !Number.isInteger(value) ||\n value <= 0\n )\n throw new DelegateError(`bg_delegate ${label} must be a positive integer`, {\n code: 'invalid_arguments',\n childCreated: false,\n });\n return value;\n}\n\nexport interface DelegatePreparedLaunch {\n preflight: {\n childSessionId: string;\n seed: { serialized: string };\n limits: { max_turns: number; max_tool_calls: number; timeout_seconds: number };\n plan: {\n child_prompt_utf8_bytes: number;\n launch_input_tokens_upper_bound: number;\n route: { allowed_input_tokens: number };\n retained_growth_budget_tokens: number;\n };\n };\n argv: readonly string[];\n stdinBytes: Buffer;\n env: NodeJS.ProcessEnv;\n facts: DelegateTaskFacts;\n /** Producer-owned rollback, valid only before registry ownership transfers. */\n rollback: () => Promise<void>;\n}\n\nexport interface DelegateExtensionRuntime {\n loadDelegateHookContractEvidence: (\n raw: string,\n ) => DelegateHookContractEvidence;\n resolveDelegateRoute: typeof import('./core/delegate/launch.js').resolveDelegateRoute;\n prepareDelegateLaunch: (\n input: Parameters<typeof import('./core/delegate/runner.js').prepareDelegateLaunch>[0],\n ) => Promise<DelegatePreparedLaunch>;\n}\n\ninterface DelegateResultRuntime {\n decideDelegateDelivery: typeof import('./core/delegate/runner.js').decideDelegateDelivery;\n evaluateDelegateTerminal: typeof import('./core/delegate/runner.js').evaluateDelegateTerminal;\n inlineTooLarge: typeof import('./core/delegate/runner.js').inlineTooLarge;\n}\n\ninterface FusionResultRuntime {\n readFusionCommittedResult: typeof import('./core/fusion/result-package.js').readFusionCommittedResult;\n readFusionFailureResult: typeof import('./core/fusion/result-package.js').readFusionFailureResult;\n}\n\nasync function importDelegateExtensionRuntime(): Promise<DelegateExtensionRuntime> {\n const [launch, runner] = await Promise.all([\n import('./core/delegate/launch.js'),\n import('./core/delegate/runner.js'),\n ]);\n return {\n loadDelegateHookContractEvidence: launch.loadDelegateHookContractEvidence,\n resolveDelegateRoute: launch.resolveDelegateRoute,\n prepareDelegateLaunch: runner.prepareDelegateLaunch,\n };\n}\n\nasync function importDelegateResultRuntime(): Promise<DelegateResultRuntime> {\n const runner = await import('./core/delegate/runner.js');\n return {\n decideDelegateDelivery: runner.decideDelegateDelivery,\n evaluateDelegateTerminal: runner.evaluateDelegateTerminal,\n inlineTooLarge: runner.inlineTooLarge,\n };\n}\n\nasync function importFusionResultRuntime(): Promise<FusionResultRuntime> {\n const resultPackage = await import('./core/fusion/result-package.js');\n return {\n readFusionCommittedResult: resultPackage.readFusionCommittedResult,\n readFusionFailureResult: resultPackage.readFusionFailureResult,\n };\n}\n\nexport interface DelegateExtensionDependencies {\n startDelegateTask: (ctx: ExtensionContext, options: StartDelegateTaskOptions) => Promise<BgTask>;\n snapshot: (task: BgTask) => BgTaskSnapshot;\n /** Exact ownership check used only after a rejected starter. */\n isDelegateTaskRegistered: (taskId: string) => boolean;\n /** Activation-local fence installed synchronously before asynchronous cleanup. */\n activationCloseFence: SynchronousActivationCloseFence;\n /** Overridable so tests can supply observed evidence without touching disk. */\n loadHookEvidence?: (() => Promise<DelegateHookContractEvidence>) | undefined;\n /** Internal deterministic deferred-import seam. */\n loadRuntime?: (() => Promise<DelegateExtensionRuntime>) | undefined;\n}\n\nexport interface BackgroundResultExtensionDependencies {\n resolveTask: (idOrPrefix: string) => BgTask;\n claimFusionUsage: (task: BgTask) => Promise<boolean>;\n /** Activation-local fence installed synchronously before asynchronous cleanup. */\n activationCloseFence: SynchronousActivationCloseFence;\n /** Internal deterministic deferred-import seams. */\n loadDelegateResultRuntime?: (() => Promise<DelegateResultRuntime>) | undefined;\n loadFusionResultRuntime?: (() => Promise<FusionResultRuntime>) | undefined;\n}\n\nasync function defaultHookEvidence(\n runtime: LazyModule<DelegateExtensionRuntime>,\n): Promise<DelegateHookContractEvidence> {\n let raw: string;\n try {\n raw = await readFile(HOOK_EVIDENCE_PATH, 'utf8');\n } catch (error) {\n throw new DelegateError(\n `bg_delegate cannot verify the Pi hook contract: the recorded evidence at ${HOOK_EVIDENCE_PATH} is unreadable (${error instanceof Error ? error.message : String(error)}). No child was created.`,\n {\n code: 'delegate_hook_contract_unsupported',\n childCreated: false,\n remediation: [\n 'Run the Pi hook characterisation gate to regenerate the evidence for this Pi build.',\n 'The guard is never bypassed when its evidence is missing.',\n ],\n },\n );\n }\n return runtime.run((loaded) => loaded.loadDelegateHookContractEvidence(raw));\n}\n\nconst DELEGATE_ROLLBACK_ERROR_MAX_CHARS = 320;\n\nfunction boundedDelegateRollbackError(error: unknown): string {\n const text = (error instanceof Error ? error.message : String(error)).replace(/\\s+/gu, ' ').trim();\n if (text.length <= DELEGATE_ROLLBACK_ERROR_MAX_CHARS) return text;\n return `${text.slice(0, DELEGATE_ROLLBACK_ERROR_MAX_CHARS)}…`;\n}\n\nasync function rollbackUnregisteredDelegatePreparation(\n prepared: DelegatePreparedLaunch,\n originalError: unknown,\n): Promise<void> {\n try {\n await prepared.rollback();\n } catch (cleanupError) {\n const failure = new AggregateError(\n [originalError, cleanupError],\n `bg_delegate could not remove an unregistered preparation: ${boundedDelegateRollbackError(cleanupError)}`,\n );\n console.error(`[delegate] ${failure.message}`);\n throw failure;\n }\n}\n\nexport function registerDelegateExtension(\n pi: ExtensionAPI,\n deps: DelegateExtensionDependencies,\n): void {\n const runtime = new LazyModule(\n 'delegate-producer',\n deps.loadRuntime ?? importDelegateExtensionRuntime,\n );\n const loadEvidence = deps.loadHookEvidence ?? (() => defaultHookEvidence(runtime));\n const preparationAbort = new AbortController();\n const pendingPreparations = new Set<Promise<void>>();\n\n const trackPreparation = <T>(operation: Promise<T>): Promise<T> => {\n const drained = operation.then(\n () => undefined,\n () => undefined,\n );\n pendingPreparations.add(drained);\n void drained.then(() => {\n pendingPreparations.delete(drained);\n });\n return operation;\n };\n\n const closeDelegateActivation = (): void => {\n runtime.close('Pi session shutdown');\n preparationAbort.abort(new Error('Pi session shutdown cancelled delegate preparation'));\n };\n deps.activationCloseFence.add(closeDelegateActivation);\n\n pi.on('session_shutdown', async () => {\n await Promise.all([...pendingPreparations]);\n });\n\n pi.registerTool<typeof DelegateParams, DelegateLaunchDetails>({\n name: DELEGATE_TOOL_NAME,\n label: 'Background Delegate',\n description:\n 'Launch one background Pi agent seeded with a frozen projection of the current conversation, then return a launch receipt immediately. The child has its own session, a route pinned at launch that is never substituted, and read-only tools. Extension discovery is isolated by default; ambient mode supports extension-registered providers but executes arbitrary discovered extension code. Retrieve its verified answer with bg_result.',\n promptSnippet:\n 'Delegate an investigation to a background agent that already has this conversation as context',\n promptGuidelines: [\n 'Use bg_delegate when work should continue in the background and the worker needs what you already know: it is seeded with a projection of this conversation.',\n 'The prompt is authoritative. State exactly what you want investigated and what the answer should contain.',\n 'The delegate is inspect-only at the model-visible tool boundary: it can read, search, and list files, but cannot run shell commands, edit or write files, use the network, or delegate further.',\n 'Extension discovery is isolated by default. Use extensionMode:\"ambient\" only when the pinned provider is registered by an ambient user/project extension.',\n 'Ambient mode executes arbitrary discovered extension code in the child process. Tool allowlists do not sandbox extension code, so ambient mode weakens inspect-only process isolation.',\n 'Facts that exist only inside omitted tool output are not available to the delegate. Restate such findings in the prompt.',\n 'bg_delegate returns immediately. Do not poll; retrieve the answer with bg_result after the terminal notification arrives.',\n ],\n parameters: DelegateParams,\n prepareArguments(args): DelegateParamsValue {\n if (!isRecord(args))\n throw new DelegateError('bg_delegate arguments must be an object', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n const unknownKeys = Object.keys(args).filter((key) => !DELEGATE_PARAM_KEYS.has(key));\n if (unknownKeys.length > 0) {\n throw new DelegateError(\n `bg_delegate contains unsupported key(s): ${unknownKeys.sort().join(', ')}`,\n { code: 'invalid_arguments', childCreated: false },\n );\n }\n const name = args['name'];\n const prompt = args['prompt'];\n if (typeof name !== 'string' || name.trim().length === 0)\n throw new DelegateError('bg_delegate requires a non-empty name', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n if (typeof prompt !== 'string' || prompt.trim().length === 0)\n throw new DelegateError('bg_delegate requires a non-blank prompt', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n const prepared: DelegateParamsValue = { name, prompt };\n const route = requireRoute(args['route']);\n if (route !== undefined) prepared.route = route;\n prepared.capability = requireCapability(args['capability']);\n prepared.extensionMode = requireExtensionMode(args['extensionMode']);\n prepared.autoDeliver = requireAutoDeliver(args['autoDeliver']);\n const maxTurns = optionalPositiveInteger(args['maxTurns'], 'maxTurns');\n if (maxTurns !== undefined) prepared.maxTurns = maxTurns;\n const maxToolCalls = optionalPositiveInteger(args['maxToolCalls'], 'maxToolCalls');\n if (maxToolCalls !== undefined) prepared.maxToolCalls = maxToolCalls;\n const timeoutSeconds = optionalPositiveInteger(args['timeoutSeconds'], 'timeoutSeconds');\n if (timeoutSeconds !== undefined) prepared.timeoutSeconds = timeoutSeconds;\n const notify = args['notifyOnCompletion'];\n if (typeof notify === 'boolean') prepared.notifyOnCompletion = notify;\n const trigger = args['triggerOnCompletion'];\n if (typeof trigger === 'boolean') prepared.triggerOnCompletion = trigger;\n return prepared;\n },\n async execute(toolCallId, params, _signal, _onUpdate, ctx) {\n const capability = requireCapability(params.capability);\n const extensionMode = requireExtensionMode(params.extensionMode);\n const autoDeliver = requireAutoDeliver(params.autoDeliver);\n return runtime.run(async (loaded) => {\n const hookEvidence = await loadEvidence();\n runtime.assertOpen();\n const route = loaded.resolveDelegateRoute({\n requested: params.route,\n currentModel:\n ctx.model === undefined\n ? undefined\n : {\n provider: ctx.model.provider,\n id: ctx.model.id,\n contextWindow: ctx.model.contextWindow,\n },\n availableModels: ctx.modelRegistry.getAll().map((model) => ({\n provider: model.provider,\n id: model.id,\n contextWindow: model.contextWindow,\n })),\n thinkingLevel: pi.getThinkingLevel(),\n });\n\n runtime.assertOpen();\n const transaction = (async () => {\n let prepared: DelegatePreparedLaunch | undefined;\n try {\n prepared = await loaded.prepareDelegateLaunch({\n ctx: {\n cwd: ctx.cwd,\n sessionManager: ctx.sessionManager,\n getSystemPrompt: () => ctx.getSystemPrompt(),\n },\n toolCallId,\n prompt: params.prompt,\n capability,\n extensionMode,\n route,\n limitOverrides: {\n maxTurns: params.maxTurns,\n maxToolCalls: params.maxToolCalls,\n timeoutSeconds: params.timeoutSeconds,\n },\n hookEvidence,\n cwd: ctx.cwd,\n sessionId: ctx.sessionManager.getSessionId(),\n autoDeliver,\n signal: preparationAbort.signal,\n });\n runtime.assertOpen();\n } catch (error) {\n if (prepared !== undefined) {\n await rollbackUnregisteredDelegatePreparation(prepared, error);\n }\n if (preparationAbort.signal.aborted) {\n if (error instanceof AggregateError) {\n console.error(\n `[delegate] cancelled preparation cleanup failed: ${boundedDelegateRollbackError(error)}`,\n );\n } else {\n runtime.assertOpen();\n }\n }\n throw error;\n }\n\n const launchOptions: StartDelegateTaskOptions = {\n name: params.name,\n argv: prepared.argv,\n stdinBytes: prepared.stdinBytes,\n env: prepared.env,\n facts: prepared.facts,\n notifyOnCompletion: params.notifyOnCompletion ?? true,\n triggerOnCompletion: params.triggerOnCompletion ?? true,\n timeoutSeconds: prepared.preflight.limits.timeout_seconds,\n };\n let task: BgTask;\n try {\n task = await deps.startDelegateTask(ctx, launchOptions);\n } catch (error) {\n let registered: boolean;\n try {\n registered = deps.isDelegateTaskRegistered(prepared.facts.taskId);\n } catch (ownershipError) {\n const failure = new AggregateError(\n [error, ownershipError],\n `bg_delegate could not determine artifact ownership after starter failure: ${boundedDelegateRollbackError(ownershipError)}`,\n );\n console.error(`[delegate] ${failure.message}`);\n throw failure;\n }\n if (!registered) {\n await rollbackUnregisteredDelegatePreparation(prepared, error);\n }\n if (preparationAbort.signal.aborted) runtime.assertOpen();\n throw error;\n }\n return { prepared, launchOptions, task };\n })();\n const { prepared, launchOptions, task } = await trackPreparation(transaction);\n runtime.assertOpen();\n\n const details: DelegateLaunchDetails = {\n schema_version: 'pi-background-tasks.delegate-launch.v1',\n task: deps.snapshot(task),\n route: {\n provider: route.provider,\n model: route.model,\n qualified_id: route.qualified_id,\n origin: route.origin,\n },\n child_session_id: prepared.preflight.childSessionId,\n artifact_dir: prepared.facts.artifactDir,\n seed_sha256: prepared.facts.seedSha256,\n seed_utf8_bytes: Buffer.byteLength(prepared.preflight.seed.serialized, 'utf8'),\n budget: prepared.facts.budget,\n extension_mode: extensionMode,\n auto_deliver: autoDeliver,\n notify_on_completion: launchOptions.notifyOnCompletion,\n trigger_on_completion: launchOptions.triggerOnCompletion,\n };\n return {\n content: textContent(\n [\n `Started delegate ${params.name} (${task.id})`,\n `Route pinned: ${route.qualified_id} (${route.origin}); it is never substituted.`,\n `Child session: ${prepared.preflight.childSessionId} (separate from this session)`,\n `Artifacts: ${prepared.facts.artifactDir}`,\n `Seed: ${String(Buffer.byteLength(prepared.preflight.seed.serialized, 'utf8'))} bytes, sha256 ${prepared.facts.seedSha256}`,\n `Child prompt: ${String(prepared.preflight.plan.child_prompt_utf8_bytes)} bytes; launch estimate ${String(prepared.preflight.plan.launch_input_tokens_upper_bound)} / ${String(prepared.preflight.plan.route.allowed_input_tokens)} allowed input tokens; protected retained-growth runway ${String(prepared.preflight.plan.retained_growth_budget_tokens)} tokens.`,\n `Estimator: family ${prepared.facts.budget.family}, source ${prepared.facts.budget.rate_source.source}, rate ${String(prepared.facts.budget.rate_source.effective_rate_bytes_per_token_x100)}/100 B/tok + ${String(prepared.facts.budget.rate_source.affine_f_tokens)} tokens${prepared.facts.budget.rate_source.warning === null ? '' : `; warning: ${prepared.facts.budget.rate_source.warning}`}`,\n `Capability: ${capability} (read/search/list only)`,\n `Extension mode: ${extensionMode}${extensionMode === 'ambient' ? ' — WARNING: arbitrary discovered extension code executes in the child; the tool allowlist does not sandbox it, so inspect-only process isolation is weakened.' : ' (ambient extension discovery disabled)'}`,\n `Limits: ${String(prepared.preflight.limits.max_turns)} turns, ${String(prepared.preflight.limits.max_tool_calls)} tool calls, ${String(prepared.preflight.limits.timeout_seconds)}s`,\n `Auto-deliver: ${autoDeliver}`,\n launchOptions.notifyOnCompletion\n ? `Terminal notification: enabled.${launchOptions.triggerOnCompletion ? ' It will start a follow-up turn.' : ' It will not start a turn.'}`\n : 'Terminal notification: disabled.',\n `Retrieve the verified answer with ${DELEGATE_RESULT_TOOL_NAME}({taskId:\"${task.id}\"}). Do not poll.`,\n ].join('\\n'),\n ),\n details,\n };\n });\n },\n renderCall(args, theme) {\n return new Text(\n `${theme.fg('toolTitle', theme.bold('bg_delegate '))}${theme.fg('muted', truncateChars(args.name, 60))}`,\n 0,\n 0,\n );\n },\n renderResult(result, _options, theme) {\n const details = result.details;\n return new Text(\n `${theme.fg('success', '✓ delegated')} ${theme.fg('accent', details.task.id)}\\n${theme.fg('dim', `route ${details.route.qualified_id} · extensions ${details.extension_mode} · seed ${String(details.seed_utf8_bytes)}B · ${details.artifact_dir}`)}`,\n 0,\n 0,\n );\n },\n });\n\n pi.on('session_start', () => {\n const active = pi.getActiveTools();\n const missing = [DELEGATE_TOOL_NAME].filter((name) => !active.includes(name));\n if (missing.length > 0) pi.setActiveTools([...active, ...missing]);\n });\n}\n\nexport function registerBackgroundResultExtension(\n pi: ExtensionAPI,\n deps: BackgroundResultExtensionDependencies,\n): void {\n const delegateResultRuntime = new LazyModule(\n 'delegate-result-verifier',\n deps.loadDelegateResultRuntime ?? importDelegateResultRuntime,\n );\n const fusionResultRuntime = new LazyModule(\n 'fusion-result-verifier',\n deps.loadFusionResultRuntime ?? importFusionResultRuntime,\n );\n let resultClosedError: Error | undefined;\n const assertResultActive = (): void => {\n if (resultClosedError !== undefined) throw resultClosedError;\n };\n\n const closeResultActivation = (): void => {\n resultClosedError ??= new Error(\n 'lazy_module_closed: background-result facade belongs to a closed activation (Pi session shutdown)',\n );\n delegateResultRuntime.close('Pi session shutdown');\n fusionResultRuntime.close('Pi session shutdown');\n };\n deps.activationCloseFence.add(closeResultActivation);\n\n pi.registerTool<typeof ResultParams, BackgroundResultDetails>({\n name: DELEGATE_RESULT_TOOL_NAME,\n label: 'Background Result',\n description:\n 'Retrieve a hash-verified result from a bg_delegate or background Fusion task. Never blocks: a running task returns a typed not-ready result. Oversized answers are never truncated.',\n promptSnippet: 'Retrieve the verified answer from a completed delegate or Fusion task',\n promptGuidelines: [\n 'Call bg_result once the delegate or Fusion terminal notification has arrived. It never blocks and must not be polled.',\n 'A not-ready result means the task is still running; end the turn and wait for the notification.',\n ],\n parameters: ResultParams,\n prepareArguments(args): ResultParamsValue {\n if (!isRecord(args))\n throw new DelegateError('bg_result arguments must be an object', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n const taskId = args['taskId'];\n if (typeof taskId !== 'string' || taskId.trim().length === 0)\n throw new DelegateError('bg_result requires taskId', {\n code: 'invalid_arguments',\n childCreated: false,\n });\n const prepared: ResultParamsValue = { taskId };\n const delivery = requireDelivery(args['delivery']);\n if (delivery !== undefined) prepared.delivery = delivery;\n return prepared;\n },\n async execute(_toolCallId, params) {\n // Reject stale tools before touching the activation-local registry API.\n assertResultActive();\n let task: BgTask;\n try {\n task = deps.resolveTask(params.taskId);\n } catch (error) {\n throw new DelegateError(\n `bg_result does not know task ${params.taskId}: ${error instanceof Error ? error.message : String(error)}`,\n { code: 'task_unknown', childCreated: false },\n );\n }\n const fusion = task.fusion;\n if (fusion !== undefined) {\n const requestedDelivery = requireDelivery(params.delivery);\n if (task.status === 'running') {\n const details: FusionBackgroundResultDetails = {\n schema_version: 'pi-background-tasks.fusion-result-view.v1',\n task_id: task.id,\n state: 'running',\n delivery: 'none',\n workflow: fusion.workflow,\n artifact_dir: fusion.artifactDir,\n };\n return {\n content: textContent(\n `Fusion ${task.id} is still running. bg_result never blocks. End this turn; the terminal notification will wake you, then call bg_result again.`,\n ),\n details,\n };\n }\n if (task.status !== 'completed' || fusion.outcome?.status !== 'committed') {\n const terminal = await fusionResultRuntime.run((loaded) =>\n loaded.readFusionFailureResult({\n artifactDirAbs: fusion.artifactDirAbs,\n artifactDir: fusion.artifactDir,\n runId: fusion.runId,\n workflow: fusion.workflow,\n }),\n );\n fusionResultRuntime.assertOpen();\n const state =\n fusion.outcome?.status === 'cancelled' || task.status === 'killed'\n ? 'cancelled'\n : 'failed';\n const details: FusionBackgroundResultDetails = {\n schema_version: 'pi-background-tasks.fusion-result-view.v1',\n task_id: task.id,\n state,\n delivery: 'none',\n workflow: fusion.workflow,\n artifact_dir: fusion.artifactDir,\n answer: terminal.answer,\n summary_status: terminal.summary_status,\n ...(terminal.failure_summary_ref === undefined\n ? {}\n : { failure_summary_ref: terminal.failure_summary_ref }),\n ...(terminal.failure === undefined ? {} : { failure: terminal.failure }),\n ...(terminal.progress === undefined ? {} : { progress: terminal.progress }),\n ...(terminal.usage_so_far === undefined ? {} : { usage_so_far: terminal.usage_so_far }),\n ...(terminal.attempts === undefined ? {} : { attempts: terminal.attempts }),\n ...(terminal.evidence_artifacts === undefined\n ? {}\n : { evidence_artifacts: terminal.evidence_artifacts }),\n ...(terminal.remediation_ids === undefined\n ? {}\n : { remediation_ids: terminal.remediation_ids }),\n ...(terminal.summary_unavailable_reason === undefined\n ? {}\n : { summary_unavailable_reason: terminal.summary_unavailable_reason }),\n };\n return {\n content: textContent(\n `Fusion ${task.id} ${state}; no answer was committed. Terminal evidence status: ${terminal.summary_status}. Delivery is none; use only the manifest-bound artifact references in details.`,\n ),\n details,\n };\n }\n const verified = await fusionResultRuntime.run((loaded) =>\n loaded.readFusionCommittedResult({\n artifactDirAbs: fusion.artifactDirAbs,\n artifactDir: fusion.artifactDir,\n runId: fusion.runId,\n workflow: fusion.workflow,\n }),\n );\n fusionResultRuntime.assertOpen();\n const answerBytes = Buffer.byteLength(verified.mergedText, 'utf8');\n const answerSha256 = sha256Buffer(Buffer.from(verified.mergedText, 'utf8'));\n const useArtifact =\n requestedDelivery === 'artifact' ||\n (requestedDelivery === undefined && answerBytes > DELEGATE_INLINE_ANSWER_BYTES);\n if (requestedDelivery === 'inline' && answerBytes > DELEGATE_INLINE_ANSWER_BYTES) {\n throw new Error(\n `Fusion result ${task.id} is ${String(answerBytes)} bytes, above the ${String(DELEGATE_INLINE_ANSWER_BYTES)}-byte inline limit. Use delivery:\"artifact\"; nothing was truncated.`,\n );\n }\n fusionResultRuntime.assertOpen();\n // The durable claim is the settlement point. Once started, this verified\n // retrieval must return its usage even if shutdown closes the facade\n // while registry metadata is being written. Everything after the await\n // is activation-local result construction with no host side effects.\n const usage = cloneFusionUsage(verified.details.usage);\n const usageDelivered = await deps.claimFusionUsage(task);\n const details: FusionBackgroundResultDetails = {\n schema_version: 'pi-background-tasks.fusion-result-view.v1',\n task_id: task.id,\n state: 'committed',\n delivery: useArtifact ? 'artifact' : 'inline',\n workflow: fusion.workflow,\n artifact_dir: fusion.artifactDir,\n answer_bytes: answerBytes,\n answer_sha256: answerSha256,\n usage_delivered: usageDelivered,\n };\n const header = [\n `Fusion ${task.id} completed (${fusion.workflow}).`,\n `Answer: ${String(answerBytes)} bytes, ${answerSha256} (verified).`,\n `Artifacts: ${fusion.artifactDir}`,\n usageDelivered\n ? 'Usage: attached to this retrieval exactly once.'\n : 'Usage: already attached by an earlier retrieval; not counted again.',\n ].join('\\n');\n const result = useArtifact\n ? {\n content: textContent(\n `${header}\\nDelivery: artifact. The complete answer is ${fusion.artifactDir}/merged.md; it was not truncated.`,\n ),\n details,\n }\n : { content: textContent(`${header}\\n\\n${verified.mergedText}`), details };\n if (!usageDelivered) return result;\n const resultWithUsage: typeof result & { usage: FusionUsage } = {\n ...result,\n usage,\n };\n return resultWithUsage;\n }\n\n const facts = task.delegate;\n if (facts === undefined) {\n throw new DelegateError(\n `bg_result task ${task.id} has no retrievable delegate or Fusion result; use bg_logs for ordinary background tasks`,\n { code: 'task_unknown', childCreated: false },\n );\n }\n const delegateTaskStatus = task.status;\n if (delegateTaskStatus === 'running') {\n const details: DelegateResultDetails = {\n schema_version: 'pi-background-tasks.delegate-result-view.v1',\n task_id: task.id,\n state: 'running',\n delivery: 'none',\n artifact_dir: facts.artifactDir,\n budget: facts.budget,\n extension_mode: facts.extensionMode,\n };\n return {\n content: textContent(\n `Delegate ${task.id} is still running. This is not an error and bg_result never blocks. End this turn; the terminal notification will wake you, then call bg_result again.`,\n ),\n details,\n };\n }\n\n const evaluation = await delegateResultRuntime.run(async (loaded) => ({\n loaded,\n terminal: await loaded.evaluateDelegateTerminal({\n artifactDirAbs: facts.artifactDirAbs,\n taskId: facts.taskId,\n launchNonce: facts.launchNonce,\n seedSha256: facts.seedSha256,\n route: { provider: facts.route.provider, model: facts.route.model },\n taskStatus:\n delegateTaskStatus === 'completed' ? 'completed' : delegateTaskStatus,\n taskError: task.error,\n taskOutputPath: task.outputPath,\n taskOutputAbsPath: task.outputAbsPath,\n }),\n }));\n delegateResultRuntime.assertOpen();\n const { loaded: verifier, terminal } = evaluation;\n\n if (terminal.error !== undefined || terminal.result === undefined) {\n const failure =\n terminal.error ??\n new DelegateError(`delegate ${task.id} produced no verified answer`, {\n code: 'result_unavailable',\n childCreated: true,\n taskId: task.id,\n artifactDir: facts.artifactDir,\n });\n throw new Error(failure.describe(), { cause: failure });\n }\n\n const verified = terminal.result;\n const requestedDelivery = requireDelivery(params.delivery);\n const decision = verifier.decideDelegateDelivery(\n verified.package.answer.byte_length,\n requestedDelivery,\n );\n if (requestedDelivery === 'inline' && decision.mode === 'artifact') {\n const failure = verifier.inlineTooLarge(\n task.id,\n facts.artifactDir,\n verified.package.answer.byte_length,\n );\n throw new Error(failure.describe(), { cause: failure });\n }\n\n const details: DelegateResultDetails = {\n schema_version: 'pi-background-tasks.delegate-result-view.v1',\n task_id: task.id,\n state: 'committed',\n delivery: decision.mode,\n route: verified.package.route,\n budget: facts.budget,\n extension_mode: facts.extensionMode,\n answer_bytes: verified.package.answer.byte_length,\n answer_sha256: verified.package.answer.sha256,\n turns: verified.package.turns,\n tool_calls: verified.package.tool_calls,\n usage: { status: verified.package.usage.status },\n artifact_dir: facts.artifactDir,\n };\n const header = [\n `Delegate ${task.id} completed on ${verified.package.route.provider}/${verified.package.route.model}.`,\n `Answer: ${String(verified.package.answer.byte_length)} bytes, sha256 ${verified.package.answer.sha256} (verified).`,\n `Turns: ${String(verified.package.turns)} · tool calls: ${String(verified.package.tool_calls)} · usage: ${verified.package.usage.status}`,\n `Artifacts: ${facts.artifactDir}`,\n `Estimator: family ${facts.budget.family}, source ${facts.budget.rate_source.source}, rate ${String(facts.budget.rate_source.effective_rate_bytes_per_token_x100)}/100 B/tok + ${String(facts.budget.rate_source.affine_f_tokens)} tokens${facts.budget.rate_source.warning === null ? '' : `; warning: ${facts.budget.rate_source.warning}`}`,\n ].join('\\n');\n if (decision.mode === 'artifact') {\n return {\n content: textContent(\n `${header}\\nDelivery: artifact (${decision.reason}). The complete verified answer is in ${facts.artifactDir}/result.json. It was not truncated.`,\n ),\n details,\n };\n }\n return { content: textContent(`${header}\\n\\n${verified.answer}`), details };\n },\n renderCall(args, theme) {\n return new Text(\n `${theme.fg('toolTitle', theme.bold('bg_result '))}${theme.fg('accent', args.taskId)}`,\n 0,\n 0,\n );\n },\n renderResult(result, options: ToolRenderResultOptions, theme: Theme) {\n void options;\n const details = result.details;\n const fusion = details.schema_version === 'pi-background-tasks.fusion-result-view.v1';\n if (details.state === 'running')\n return new Text(\n theme.fg('warning', `${fusion ? 'fusion' : 'delegate'} ${details.task_id} still running`),\n 0,\n 0,\n );\n if (fusion && (details.state === 'failed' || details.state === 'cancelled')) {\n return new Text(\n theme.fg('warning', `${details.state} fusion; no committed answer · ${details.summary_status ?? 'unavailable'}`),\n 0,\n 0,\n );\n }\n return new Text(\n `${theme.fg('success', fusion ? '✓ fusion answer' : '✓ delegate answer')} ${theme.fg('dim', `${String(details.answer_bytes ?? 0)}B · ${details.delivery}`)}`,\n 0,\n 0,\n );\n },\n });\n\n pi.on('session_start', () => {\n const active = pi.getActiveTools();\n const missing = [DELEGATE_RESULT_TOOL_NAME].filter((name) => !active.includes(name));\n if (missing.length > 0) pi.setActiveTools([...active, ...missing]);\n });\n}\n\nexport { DELEGATE_INLINE_ANSWER_BYTES };\n"]}