@claudexor/orchestrator 5.0.2 → 6.0.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 (249) hide show
  1. package/dist/account-evidence.d.ts +7 -0
  2. package/dist/account-evidence.d.ts.map +1 -1
  3. package/dist/account-evidence.js +12 -0
  4. package/dist/account-evidence.js.map +1 -1
  5. package/dist/account-pool.d.ts +4 -0
  6. package/dist/account-pool.d.ts.map +1 -1
  7. package/dist/account-pool.js +8 -1
  8. package/dist/account-pool.js.map +1 -1
  9. package/dist/account-resolution.d.ts.map +1 -1
  10. package/dist/account-resolution.js +7 -5
  11. package/dist/account-resolution.js.map +1 -1
  12. package/dist/attemptFinalize.d.ts +22 -7
  13. package/dist/attemptFinalize.d.ts.map +1 -1
  14. package/dist/attemptFinalize.js +29 -7
  15. package/dist/attemptFinalize.js.map +1 -1
  16. package/dist/attemptTelemetry.d.ts +19 -18
  17. package/dist/attemptTelemetry.d.ts.map +1 -1
  18. package/dist/attemptTelemetry.js +33 -79
  19. package/dist/attemptTelemetry.js.map +1 -1
  20. package/dist/attemptUsage.d.ts.map +1 -1
  21. package/dist/attemptUsage.js +6 -14
  22. package/dist/attemptUsage.js.map +1 -1
  23. package/dist/attemptUsageCost.d.ts +11 -2
  24. package/dist/attemptUsageCost.d.ts.map +1 -1
  25. package/dist/attemptUsageCost.js +16 -3
  26. package/dist/attemptUsageCost.js.map +1 -1
  27. package/dist/candidateEvidence.d.ts +33 -8
  28. package/dist/candidateEvidence.d.ts.map +1 -1
  29. package/dist/candidateEvidence.js +58 -24
  30. package/dist/candidateEvidence.js.map +1 -1
  31. package/dist/candidateReview.d.ts.map +1 -1
  32. package/dist/candidateReview.js +4 -2
  33. package/dist/candidateReview.js.map +1 -1
  34. package/dist/candidateTerminals.d.ts +27 -1
  35. package/dist/candidateTerminals.d.ts.map +1 -1
  36. package/dist/candidateTerminals.js +51 -2
  37. package/dist/candidateTerminals.js.map +1 -1
  38. package/dist/carrier-planner.d.ts +5 -2
  39. package/dist/carrier-planner.d.ts.map +1 -1
  40. package/dist/carrier-planner.js +6 -3
  41. package/dist/carrier-planner.js.map +1 -1
  42. package/dist/command-telemetry.d.ts +15 -0
  43. package/dist/command-telemetry.d.ts.map +1 -0
  44. package/dist/command-telemetry.js +27 -0
  45. package/dist/command-telemetry.js.map +1 -0
  46. package/dist/continuation-evidence-io.d.ts +13 -3
  47. package/dist/continuation-evidence-io.d.ts.map +1 -1
  48. package/dist/continuation-evidence-io.js +36 -4
  49. package/dist/continuation-evidence-io.js.map +1 -1
  50. package/dist/continuation-evidence.d.ts +7 -2
  51. package/dist/continuation-evidence.d.ts.map +1 -1
  52. package/dist/continuation-evidence.js +16 -4
  53. package/dist/continuation-evidence.js.map +1 -1
  54. package/dist/continuation-later.d.ts.map +1 -1
  55. package/dist/continuation-later.js +6 -6
  56. package/dist/continuation-later.js.map +1 -1
  57. package/dist/continuity-facts.d.ts +27 -1
  58. package/dist/continuity-facts.d.ts.map +1 -1
  59. package/dist/continuity-facts.js +72 -4
  60. package/dist/continuity-facts.js.map +1 -1
  61. package/dist/continuity-notice.d.ts.map +1 -1
  62. package/dist/continuity-notice.js +2 -1
  63. package/dist/continuity-notice.js.map +1 -1
  64. package/dist/continuity-summary.d.ts +7 -1
  65. package/dist/continuity-summary.d.ts.map +1 -1
  66. package/dist/continuity-summary.js +33 -13
  67. package/dist/continuity-summary.js.map +1 -1
  68. package/dist/continuity.d.ts +36 -8
  69. package/dist/continuity.d.ts.map +1 -1
  70. package/dist/continuity.js +96 -21
  71. package/dist/continuity.js.map +1 -1
  72. package/dist/credential-cooldown.d.ts +7 -0
  73. package/dist/credential-cooldown.d.ts.map +1 -1
  74. package/dist/credential-cooldown.js +31 -5
  75. package/dist/credential-cooldown.js.map +1 -1
  76. package/dist/credential-differential.d.ts +15 -1
  77. package/dist/credential-differential.d.ts.map +1 -1
  78. package/dist/credential-differential.js +32 -17
  79. package/dist/credential-differential.js.map +1 -1
  80. package/dist/credential-execution.d.ts.map +1 -1
  81. package/dist/credential-execution.js +14 -15
  82. package/dist/credential-execution.js.map +1 -1
  83. package/dist/credential-preflight.js +1 -1
  84. package/dist/credential-preflight.js.map +1 -1
  85. package/dist/credential-profile-rotation.d.ts +1 -0
  86. package/dist/credential-profile-rotation.d.ts.map +1 -1
  87. package/dist/credential-profile-rotation.js +1 -1
  88. package/dist/credential-profile-rotation.js.map +1 -1
  89. package/dist/deepScanReducer.d.ts.map +1 -1
  90. package/dist/deepScanReducer.js +8 -18
  91. package/dist/deepScanReducer.js.map +1 -1
  92. package/dist/delegatedHome.d.ts +12 -7
  93. package/dist/delegatedHome.d.ts.map +1 -1
  94. package/dist/delegatedHome.js +16 -4
  95. package/dist/delegatedHome.js.map +1 -1
  96. package/dist/delegationFailure.d.ts +9 -8
  97. package/dist/delegationFailure.d.ts.map +1 -1
  98. package/dist/delegationFailure.js +7 -5
  99. package/dist/delegationFailure.js.map +1 -1
  100. package/dist/directoryCandidate.d.ts.map +1 -1
  101. package/dist/directoryCandidate.js +35 -5
  102. package/dist/directoryCandidate.js.map +1 -1
  103. package/dist/harnessFailure.d.ts +26 -5
  104. package/dist/harnessFailure.d.ts.map +1 -1
  105. package/dist/harnessFailure.js +41 -6
  106. package/dist/harnessFailure.js.map +1 -1
  107. package/dist/index.d.ts +2 -2
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +2 -1
  110. package/dist/index.js.map +1 -1
  111. package/dist/inrun-continuity-carrier.d.ts +4 -1
  112. package/dist/inrun-continuity-carrier.d.ts.map +1 -1
  113. package/dist/inrun-continuity-carrier.js +2 -0
  114. package/dist/inrun-continuity-carrier.js.map +1 -1
  115. package/dist/inrun-continuity.d.ts +2 -2
  116. package/dist/inrun-continuity.d.ts.map +1 -1
  117. package/dist/inrun-continuity.js +22 -19
  118. package/dist/inrun-continuity.js.map +1 -1
  119. package/dist/inrun-retained-output.d.ts +18 -4
  120. package/dist/inrun-retained-output.d.ts.map +1 -1
  121. package/dist/inrun-retained-output.js +39 -8
  122. package/dist/inrun-retained-output.js.map +1 -1
  123. package/dist/interaction.d.ts +14 -1
  124. package/dist/interaction.d.ts.map +1 -1
  125. package/dist/interaction.js +91 -22
  126. package/dist/interaction.js.map +1 -1
  127. package/dist/laneStreamEvents.d.ts +9 -10
  128. package/dist/laneStreamEvents.d.ts.map +1 -1
  129. package/dist/laneStreamEvents.js +21 -7
  130. package/dist/laneStreamEvents.js.map +1 -1
  131. package/dist/modelGovernance.d.ts +10 -4
  132. package/dist/modelGovernance.d.ts.map +1 -1
  133. package/dist/modelGovernance.js +21 -1
  134. package/dist/modelGovernance.js.map +1 -1
  135. package/dist/native-retry-telemetry.d.ts +4 -1
  136. package/dist/native-retry-telemetry.d.ts.map +1 -1
  137. package/dist/native-retry-telemetry.js +6 -1
  138. package/dist/native-retry-telemetry.js.map +1 -1
  139. package/dist/orchestrator.d.ts +7 -1
  140. package/dist/orchestrator.d.ts.map +1 -1
  141. package/dist/orchestrator.js +129 -139
  142. package/dist/orchestrator.js.map +1 -1
  143. package/dist/planRun.d.ts.map +1 -1
  144. package/dist/planRun.js +7 -8
  145. package/dist/planRun.js.map +1 -1
  146. package/dist/plannerAttempt.d.ts +1 -0
  147. package/dist/plannerAttempt.d.ts.map +1 -1
  148. package/dist/plannerAttempt.js +14 -19
  149. package/dist/plannerAttempt.js.map +1 -1
  150. package/dist/pool-attempt-evidence.d.ts +5 -1
  151. package/dist/pool-attempt-evidence.d.ts.map +1 -1
  152. package/dist/pool-attempt-evidence.js +36 -4
  153. package/dist/pool-attempt-evidence.js.map +1 -1
  154. package/dist/processing-telemetry.d.ts +3 -1
  155. package/dist/processing-telemetry.d.ts.map +1 -1
  156. package/dist/processing-telemetry.js +11 -0
  157. package/dist/processing-telemetry.js.map +1 -1
  158. package/dist/quota-refusal-scope.d.ts +1 -0
  159. package/dist/quota-refusal-scope.d.ts.map +1 -1
  160. package/dist/quota-refusal-scope.js +29 -1
  161. package/dist/quota-refusal-scope.js.map +1 -1
  162. package/dist/rawPatchLane.d.ts +68 -0
  163. package/dist/rawPatchLane.d.ts.map +1 -0
  164. package/dist/rawPatchLane.js +116 -0
  165. package/dist/rawPatchLane.js.map +1 -0
  166. package/dist/readonlyTerminals.d.ts +0 -3
  167. package/dist/readonlyTerminals.d.ts.map +1 -1
  168. package/dist/readonlyTerminals.js +36 -14
  169. package/dist/readonlyTerminals.js.map +1 -1
  170. package/dist/requestRequirements.d.ts +5 -4
  171. package/dist/requestRequirements.d.ts.map +1 -1
  172. package/dist/requestRequirements.js +6 -5
  173. package/dist/requestRequirements.js.map +1 -1
  174. package/dist/retainedOutput.d.ts +19 -2
  175. package/dist/retainedOutput.d.ts.map +1 -1
  176. package/dist/retainedOutput.js +83 -12
  177. package/dist/retainedOutput.js.map +1 -1
  178. package/dist/reviewerInventory.d.ts +2 -8
  179. package/dist/reviewerInventory.d.ts.map +1 -1
  180. package/dist/reviewerInventory.js +2 -3
  181. package/dist/reviewerInventory.js.map +1 -1
  182. package/dist/reviewerPanel.d.ts +1 -1
  183. package/dist/reviewerPanel.d.ts.map +1 -1
  184. package/dist/reviewerPanel.js +9 -4
  185. package/dist/reviewerPanel.js.map +1 -1
  186. package/dist/route-admission.d.ts.map +1 -1
  187. package/dist/route-admission.js +3 -1
  188. package/dist/route-admission.js.map +1 -1
  189. package/dist/routeControls.d.ts +32 -0
  190. package/dist/routeControls.d.ts.map +1 -0
  191. package/dist/routeControls.js +47 -0
  192. package/dist/routeControls.js.map +1 -0
  193. package/dist/run-input-resolution.d.ts +5 -0
  194. package/dist/run-input-resolution.d.ts.map +1 -1
  195. package/dist/run-input-resolution.js +12 -6
  196. package/dist/run-input-resolution.js.map +1 -1
  197. package/dist/run-runtime-root.d.ts +16 -0
  198. package/dist/run-runtime-root.d.ts.map +1 -0
  199. package/dist/run-runtime-root.js +16 -0
  200. package/dist/run-runtime-root.js.map +1 -0
  201. package/dist/runAdmission.d.ts.map +1 -1
  202. package/dist/runAdmission.js +2 -1
  203. package/dist/runAdmission.js.map +1 -1
  204. package/dist/runFacts.d.ts +5 -2
  205. package/dist/runFacts.d.ts.map +1 -1
  206. package/dist/runFacts.js +11 -11
  207. package/dist/runFacts.js.map +1 -1
  208. package/dist/runScope.d.ts +2 -0
  209. package/dist/runScope.d.ts.map +1 -1
  210. package/dist/runScope.js +3 -2
  211. package/dist/runScope.js.map +1 -1
  212. package/dist/runSupport.d.ts +3 -1
  213. package/dist/runSupport.d.ts.map +1 -1
  214. package/dist/runSupport.js +6 -3
  215. package/dist/runSupport.js.map +1 -1
  216. package/dist/runTelemetryWriter.d.ts +18 -5
  217. package/dist/runTelemetryWriter.d.ts.map +1 -1
  218. package/dist/runTelemetryWriter.js +7 -2
  219. package/dist/runTelemetryWriter.js.map +1 -1
  220. package/dist/runTerminalResults.d.ts.map +1 -1
  221. package/dist/runTerminalResults.js +36 -9
  222. package/dist/runTerminalResults.js.map +1 -1
  223. package/dist/runTerminals.d.ts.map +1 -1
  224. package/dist/runTerminals.js +13 -5
  225. package/dist/runTerminals.js.map +1 -1
  226. package/dist/secretDiff.d.ts.map +1 -1
  227. package/dist/secretDiff.js +2 -1
  228. package/dist/secretDiff.js.map +1 -1
  229. package/dist/transientClassify.d.ts +17 -9
  230. package/dist/transientClassify.d.ts.map +1 -1
  231. package/dist/transientClassify.js +33 -9
  232. package/dist/transientClassify.js.map +1 -1
  233. package/dist/webEvidence.d.ts +41 -0
  234. package/dist/webEvidence.d.ts.map +1 -0
  235. package/dist/webEvidence.js +99 -0
  236. package/dist/webEvidence.js.map +1 -0
  237. package/dist/workReportEnvelope.d.ts +12 -0
  238. package/dist/workReportEnvelope.d.ts.map +1 -1
  239. package/dist/workReportEnvelope.js +19 -0
  240. package/dist/workReportEnvelope.js.map +1 -1
  241. package/package.json +17 -17
  242. package/dist/continuation-chain.test-support.d.ts +0 -473
  243. package/dist/continuation-chain.test-support.d.ts.map +0 -1
  244. package/dist/continuation-chain.test-support.js +0 -206
  245. package/dist/continuation-chain.test-support.js.map +0 -1
  246. package/dist/inrun-continuity.test-support.d.ts +0 -504
  247. package/dist/inrun-continuity.test-support.d.ts.map +0 -1
  248. package/dist/inrun-continuity.test-support.js +0 -212
  249. package/dist/inrun-continuity.test-support.js.map +0 -1
@@ -2,9 +2,10 @@ const CAUSE_PHRASE = {
2
2
  vendor_limit: "a usage limit on the previous account",
3
3
  pool_exhausted: "every account's usage limit",
4
4
  pinned_limit: "the pinned account's usage limit",
5
- transport: "the process died",
5
+ transport: "an error without a typed cause",
6
6
  permission_denied: "a native tool permission was refused (no automatic privilege escalation)",
7
7
  context_exhausted: "the context window was exhausted",
8
+ turn_limit: "the max-turns limit set for it was reached",
8
9
  wall_clock: "the wall-clock deadline",
9
10
  cancelled: "a cancel",
10
11
  host_restart: "a host restart",
@@ -1 +1 @@
1
- {"version":3,"file":"continuity-notice.js","sourceRoot":"","sources":["../src/continuity-notice.ts"],"names":[],"mappings":"AAqBA,MAAM,YAAY,GAAmC;IACnD,YAAY,EAAE,uCAAuC;IACrD,cAAc,EAAE,6BAA6B;IAC7C,YAAY,EAAE,kCAAkC;IAChD,SAAS,EAAE,kBAAkB;IAC7B,iBAAiB,EAAE,0EAA0E;IAC7F,iBAAiB,EAAE,kCAAkC;IACrD,UAAU,EAAE,yBAAyB;IACrC,SAAS,EAAE,UAAU;IACrB,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,qBAAqB;IACrC,KAAK,EAAE,iBAAiB;CACzB,CAAC;AAYF,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,KAAK,GAAG;QACZ,KAAK,CAAC,SAAS;YACb,CAAC,CAAC,iMAAiM;YACnM,CAAC,CAAC,iCAAiC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,4QAA4Q;KAC3U,CAAC;IACF,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QACjE,KAAK,CAAC,IAAI,CACR,6FAA6F,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,0EAA0E,CACnM,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,cAAsB,EACtB,SAAS,GAAG,KAAK;IAEjB,MAAM,KAAK,GAAG,SAAS;QACrB,CAAC,CAAC,sDAAsD;QACxD,CAAC,CAAC,8EAA8E,CAAC;IACnF,OAAO,GAAG,KAAK,8BAA8B,IAAI,4DAA4D,cAAc,EAAE,CAAC;AAChI,CAAC;AAED;6FAC6F;AAC7F,MAAM,UAAU,wBAAwB,CAAC,KAOxC;IACC,OAAO;QACL,KAAK,CAAC,cAAc;QACpB,KAAK,CAAC,MAAM;QACZ,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,+BAA+B,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,oBAAoB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC;KAClF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"continuity-notice.js","sourceRoot":"","sources":["../src/continuity-notice.ts"],"names":[],"mappings":"AAqBA,MAAM,YAAY,GAAmC;IACnD,YAAY,EAAE,uCAAuC;IACrD,cAAc,EAAE,6BAA6B;IAC7C,YAAY,EAAE,kCAAkC;IAChD,SAAS,EAAE,gCAAgC;IAC3C,iBAAiB,EAAE,0EAA0E;IAC7F,iBAAiB,EAAE,kCAAkC;IACrD,UAAU,EAAE,4CAA4C;IACxD,UAAU,EAAE,yBAAyB;IACrC,SAAS,EAAE,UAAU;IACrB,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,qBAAqB;IACrC,KAAK,EAAE,iBAAiB;CACzB,CAAC;AAYF,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,KAAK,GAAG;QACZ,KAAK,CAAC,SAAS;YACb,CAAC,CAAC,iMAAiM;YACnM,CAAC,CAAC,iCAAiC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,4QAA4Q;KAC3U,CAAC;IACF,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QACjE,KAAK,CAAC,IAAI,CACR,6FAA6F,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,0EAA0E,CACnM,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,cAAsB,EACtB,SAAS,GAAG,KAAK;IAEjB,MAAM,KAAK,GAAG,SAAS;QACrB,CAAC,CAAC,sDAAsD;QACxD,CAAC,CAAC,8EAA8E,CAAC;IACnF,OAAO,GAAG,KAAK,8BAA8B,IAAI,4DAA4D,cAAc,EAAE,CAAC;AAChI,CAAC;AAED;6FAC6F;AAC7F,MAAM,UAAU,wBAAwB,CAAC,KAOxC;IACC,OAAO;QACL,KAAK,CAAC,cAAc;QACpB,KAAK,CAAC,MAAM;QACZ,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,+BAA+B,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,oBAAoB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC;KAClF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC"}
@@ -17,7 +17,7 @@
17
17
  */
18
18
  import { HarnessRunSpec, type CredentialProfile } from "@claudexor/schema";
19
19
  import { type CredentialExecutionObserverFactory, type HarnessAdapter, type ProcessingAdmission } from "@claudexor/core";
20
- import type { ContinuityTurn } from "./continuity.js";
20
+ import { type ContinuityTurn } from "./continuity.js";
21
21
  import { type ModelGovernedRoute } from "./modelGovernance.js";
22
22
  /** Default wall-clock ceiling for one inline summary pass. */
23
23
  export declare const SUMMARY_TIMEOUT_MS = 60000;
@@ -27,8 +27,14 @@ export interface SummaryRunParams {
27
27
  turns: ContinuityTurn[];
28
28
  /** Read-only working directory (the thread's execution root). */
29
29
  cwd: string;
30
+ /** The enclosing run's own `context/`, where an adapter whose stdin cannot
31
+ * carry the transcript keeps its exact copy (`HarnessRunSpec.input_file_dir`). */
32
+ inputFileDir?: string | null;
30
33
  /** Scoped lane-home env so the pass authenticates on the lane's own account. */
31
34
  env: Record<string, string>;
35
+ /** The lane's own model on a route whose request must name one (#395); otherwise
36
+ * absent, and the vendor chooses for this side computation. */
37
+ model?: string;
32
38
  /** Resolved credential profile for the lane (null = engine default ladder). */
33
39
  credentialProfile: CredentialProfile | null;
34
40
  authPreference: "subscription" | "api_key" | "auto";
@@ -1 +1 @@
1
- {"version":3,"file":"continuity-summary.d.ts","sourceRoot":"","sources":["../src/continuity-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,kCAAkC,EACvC,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE5F,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAMzC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,CAAC;IACxB,uEAAuE;IACvE,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,+EAA+E;IAC/E,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,cAAc,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,cAAc,EAAE,eAAe,GAAG,OAAO,CAAC;IAC1C,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uFAAuF;IACvF,UAAU,CAAC,EAAE,IAAI,CACf,cAAc,EACZ,uBAAuB,GACvB,YAAY,GACZ,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,CACrB,CAAC;IACF,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,6BAA6B,CAAC,EAAE,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;IACpF,YAAY,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAClD,yBAAyB,CAAC,EAAE,kCAAkC,CAAC;CAChE;AA2BD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4E5F"}
1
+ {"version":3,"file":"continuity-summary.d.ts","sourceRoot":"","sources":["../src/continuity-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,kCAAkC,EACvC,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE5F,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAWzC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,CAAC;IACxB,uEAAuE;IACvE,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ;sFACkF;IAClF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B;mEAC+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,cAAc,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,cAAc,EAAE,eAAe,GAAG,OAAO,CAAC;IAC1C,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uFAAuF;IACvF,UAAU,CAAC,EAAE,IAAI,CACf,cAAc,EACZ,uBAAuB,GACvB,YAAY,GACZ,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,CACrB,CAAC;IACF,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,6BAA6B,CAAC,EAAE,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;IACpF,YAAY,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAClD,yBAAyB,CAAC,EAAE,kCAAkC,CAAC;CAChE;AAyCD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6E5F"}
@@ -17,35 +17,54 @@
17
17
  */
18
18
  import { HarnessRunSpec, } from "@claudexor/schema";
19
19
  import { AnswerAssembly, observeCredentialExecution, } from "@claudexor/core";
20
+ import { noFinalAnswerText, tailBytes } from "./continuity.js";
20
21
  import { admitCurrentProfileDispatch } from "./modelGovernance.js";
21
22
  /** Default wall-clock ceiling for one inline summary pass. */
22
23
  export const SUMMARY_TIMEOUT_MS = 60_000;
23
- /** Bytes of each collapsed turn fed to the summariser (prompt + output halves). */
24
+ /**
25
+ * UTF-8 bytes of each collapsed turn fed to the summariser (prompt + output
26
+ * halves). Like the summary allowance below, it counts retained text only: a
27
+ * cut adds its "…" mark outside the allowance (`boundBytes`; before the kept
28
+ * end of an unfinished turn's output).
29
+ */
24
30
  const PER_TURN_INPUT_BYTES = 4 * 1024;
25
- /** Bytes retained from the summary answer. */
31
+ /** UTF-8 bytes retained from the summary answer. */
26
32
  const MAX_SUMMARY_BYTES = 8 * 1024;
33
+ /**
34
+ * The longest prefix of `text` that fits `maxBytes` UTF-8 bytes without
35
+ * splitting a character, followed by "…" when anything was cut. Text that fits
36
+ * is returned unchanged; the "…" is not counted in `maxBytes` (#577).
37
+ */
27
38
  function boundBytes(text, maxBytes) {
28
- const buf = Buffer.from(text, "utf8");
29
- if (buf.length <= maxBytes)
30
- return text;
31
- return `${buf.subarray(0, maxBytes).toString("utf8")}…`;
39
+ // encodeInto writes whole characters only and reports the UTF-16 code units
40
+ // it consumed, so `read` ends an exact, unsplit prefix of the source text.
41
+ const { read } = new TextEncoder().encodeInto(text, new Uint8Array(maxBytes));
42
+ return read === text.length ? text : `${text.slice(0, read)}…`;
32
43
  }
33
44
  /** Render the collapsed prefix as the summariser's input transcript. */
34
45
  function transcript(turns) {
46
+ const half = PER_TURN_INPUT_BYTES / 2;
35
47
  return turns
36
48
  .map((t, i) => {
37
- const prompt = boundBytes(t.prompt.trim(), PER_TURN_INPUT_BYTES / 2);
38
- const output = t.outputText.trim()
39
- ? boundBytes(t.outputText.trim(), PER_TURN_INPUT_BYTES / 2)
40
- : "(no recorded answer)";
41
- return `Turn ${i + 1}\nUser: ${prompt}\nAssistant: ${output}`;
49
+ const prompt = boundBytes(t.prompt.trim(), half);
50
+ const missing = noFinalAnswerText(t);
51
+ const text = t.outputText.trim();
52
+ // A turn without a final answer keeps the end of its output, where its newest text is (#405).
53
+ const output = !text
54
+ ? "(no recorded answer)"
55
+ : missing && Buffer.byteLength(text, "utf8") > half
56
+ ? `…${tailBytes(text, half)}`
57
+ : boundBytes(text, half);
58
+ const said = missing ? `Assistant (${missing.note})` : "Assistant";
59
+ return `Turn ${i + 1}\nUser: ${prompt}\n${said}: ${output}`;
42
60
  })
43
61
  .join("\n\n");
44
62
  }
45
63
  const SUMMARY_INSTRUCTION = "You are handing this conversation off to a successor agent that has NOT seen it. " +
46
64
  "Summarize the earlier turns below for that agent: the decisions reached, the current " +
47
65
  "state of the work, and the open items still to do. Be concise and factual — no preamble, " +
48
- "no questions, no tool calls. Output only the summary.";
66
+ "no questions, and no tool calls except to read this conversation if it was delivered to you " +
67
+ "as files. Output only the summary.";
49
68
  /**
50
69
  * Run one bounded summary pass. Returns the summary text, or null on any
51
70
  * failure/timeout/empty answer (the caller then keeps the mechanical collapse).
@@ -71,10 +90,11 @@ export async function summarizeThreadPrefix(params) {
71
90
  intent: "explain",
72
91
  prompt: `${SUMMARY_INSTRUCTION}\n\n---\n\n${transcript(params.turns)}`,
73
92
  cwd: params.cwd,
93
+ input_file_dir: params.inputFileDir ?? null,
74
94
  access: "readonly",
75
95
  external_context_policy: "off",
76
96
  tool_permission_policy: { web: "off", allow: [], deny: [] },
77
- model_hint: null,
97
+ model_hint: params.model ?? null,
78
98
  effort_hint: null,
79
99
  max_turns: 1,
80
100
  auth_preference: params.authPreference === "auto" ? undefined : params.authPreference,
@@ -1 +1 @@
1
- {"version":3,"file":"continuity-summary.js","sourceRoot":"","sources":["../src/continuity-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"continuity-summary.js","sourceRoot":"","sources":["../src/continuity-summary.ts"],"names":[],"mappings":"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"}
@@ -12,11 +12,12 @@
12
12
  * collapsed one-liners with real prose: the caller runs `planContinuation` to
13
13
  * learn which older turns would collapse (and their boundary turn id — the
14
14
  * summary cache key), resolves a summary for that prefix (cache hit or a bounded
15
- * inline summarization pass), and passes it back as `cachedSummary`. The
16
- * mechanical one-liner collapse is ALWAYS the fallback, so a missing/failed
17
- * summary never loses information. Either way `summarized` stays true (the
18
- * verbatim prefix was condensed); the packet text itself discloses which form
19
- * was used.
15
+ * inline summarization pass), and passes it back as `cachedSummary`. A collapsed
16
+ * turn without a final answer keeps its one-liner beside the summary, whatever
17
+ * the prose says (#405). The mechanical one-liner collapse is ALWAYS the
18
+ * fallback, so a missing/failed summary never loses information. Either way
19
+ * `summarized` stays true (the verbatim prefix was condensed); the packet text
20
+ * itself discloses which form was used.
20
21
  *
21
22
  * This module takes fully-resolved structured data (the daemon supplies thread
22
23
  * facts; the orchestrator reads prior outputs + git anchor) and returns the
@@ -26,16 +27,33 @@
26
27
  export declare const PER_TURN_BUDGET_BYTES: number;
27
28
  /** Whole-packet verbatim budget; older turns collapse past this. */
28
29
  export declare const TOTAL_BUDGET_BYTES: number;
29
- /** One-line collapsed entry keeps this many chars of each field. */
30
+ /**
31
+ * One-line collapsed entry keeps up to this many UTF-16 code units of each
32
+ * field; a cut ends on a whole character and adds "…" outside the allowance.
33
+ */
30
34
  export declare const COLLAPSE_PREFIX_CHARS = 200;
31
35
  export interface ContinuityTurn {
32
36
  /** Turn id (checkpoint math keys off this). */
33
37
  id: string;
34
38
  /** The user's message for the turn, exactly as sent (INV-146). */
35
39
  prompt: string;
36
- /** The turn's primary output text (final/answer.md), "" when none. */
40
+ /** The turn's primary output text (final/answer.md), "" when none, and ""
41
+ * for a turn the lane's native session already holds: no packet renders it. */
37
42
  outputText: string;
43
+ /** #405: no final answer was recorded, and `outputText` is the turn's retained
44
+ * output, never an answer. `ended`: its run did not succeed; `unknown`: its
45
+ * outcome could not be read, so nothing is claimed about how it ended. */
46
+ noFinalAnswer?: "ended" | "unknown";
47
+ /** The file `outputText` is read exactly from, or rendered from (its run's
48
+ * event log). Where the packet cuts the output, it names this file. */
49
+ outputSource?: string;
38
50
  }
51
+ /** How a turn without a final answer is described (`lead` sentence, short `note`);
52
+ * null for an answered turn. */
53
+ export declare function noFinalAnswerText(turn: Pick<ContinuityTurn, "noFinalAnswer">): {
54
+ lead: string;
55
+ note: string;
56
+ } | null;
39
57
  export interface ContinuityLane {
40
58
  harness: string;
41
59
  profileId: string | null;
@@ -78,7 +96,8 @@ export interface ContinuityRequest {
78
96
  export interface ResolvedSummary {
79
97
  /** The id of the LAST turn the summary covers (the collapse boundary). */
80
98
  upToTurnId: string;
81
- /** The summary prose to render in place of the collapsed one-liners. */
99
+ /** The summary prose to render in place of the collapsed one-liners (an
100
+ * unfinished turn's line stays beside it). */
82
101
  text: string;
83
102
  }
84
103
  /**
@@ -107,6 +126,15 @@ export interface ContinuityResult {
107
126
  /** The THREAD.md packet body, or null when no packet is delivered. */
108
127
  packetMarkdown: string | null;
109
128
  }
129
+ /** The longest end of `text` within `maxBytes` UTF-8 bytes, starting on a whole character. */
130
+ export declare function tailBytes(text: string, maxBytes: number): string;
131
+ /** Delta turns for this lane: everything AFTER the checkpoint (all prior when
132
+ * the lane never ran / has no reachable native session to trust). */
133
+ export declare function deltaTurns<T extends {
134
+ id: string;
135
+ }>(req: Pick<ContinuityRequest, "laneCheckpointTurnId" | "nativeResumeAvailable"> & {
136
+ priorTurns: T[];
137
+ }): T[];
110
138
  /**
111
139
  * Compute the mechanical collapse plan for a lane WITHOUT rendering: the caller
112
140
  * uses `summaryUpToTurnId` to look up / generate a summary for the collapsed
@@ -1 +1 @@
1
- {"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,QAAW,CAAC;AAC9C,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAC5C,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,2EAA2E;IAC3E,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,4EAA4E;IAC5E,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qFAAqF;IACrF,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,+CAA+C;IAC/C,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACzC,kDAAkD;IAClD,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACxC;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,2EAA2E;IAC3E,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,4EAA4E;IAC5E,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,cAAc,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,0BAA0B,CAAC;IACvC,sEAAsE;IACtE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAmKD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,GAAG,cAAc,CAgBvE;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,GAAG,gBAAgB,CA6C1E"}
1
+ {"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"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"}
@@ -12,11 +12,12 @@
12
12
  * collapsed one-liners with real prose: the caller runs `planContinuation` to
13
13
  * learn which older turns would collapse (and their boundary turn id — the
14
14
  * summary cache key), resolves a summary for that prefix (cache hit or a bounded
15
- * inline summarization pass), and passes it back as `cachedSummary`. The
16
- * mechanical one-liner collapse is ALWAYS the fallback, so a missing/failed
17
- * summary never loses information. Either way `summarized` stays true (the
18
- * verbatim prefix was condensed); the packet text itself discloses which form
19
- * was used.
15
+ * inline summarization pass), and passes it back as `cachedSummary`. A collapsed
16
+ * turn without a final answer keeps its one-liner beside the summary, whatever
17
+ * the prose says (#405). The mechanical one-liner collapse is ALWAYS the
18
+ * fallback, so a missing/failed summary never loses information. Either way
19
+ * `summarized` stays true (the verbatim prefix was condensed); the packet text
20
+ * itself discloses which form was used.
20
21
  *
21
22
  * This module takes fully-resolved structured data (the daemon supplies thread
22
23
  * facts; the orchestrator reads prior outputs + git anchor) and returns the
@@ -26,13 +27,28 @@
26
27
  export const PER_TURN_BUDGET_BYTES = 8 * 1024;
27
28
  /** Whole-packet verbatim budget; older turns collapse past this. */
28
29
  export const TOTAL_BUDGET_BYTES = 24 * 1024;
29
- /** One-line collapsed entry keeps this many chars of each field. */
30
+ /**
31
+ * One-line collapsed entry keeps up to this many UTF-16 code units of each
32
+ * field; a cut ends on a whole character and adds "…" outside the allowance.
33
+ */
30
34
  export const COLLAPSE_PREFIX_CHARS = 200;
35
+ const NO_FINAL_ANSWER = {
36
+ ended: { lead: "The turn ended without a final answer.", note: "ended without a final answer" },
37
+ unknown: {
38
+ lead: "No final answer is recorded for this turn, and its outcome could not be read.",
39
+ note: "no final answer recorded; outcome could not be read",
40
+ },
41
+ };
42
+ /** How a turn without a final answer is described (`lead` sentence, short `note`);
43
+ * null for an answered turn. */
44
+ export function noFinalAnswerText(turn) {
45
+ return turn.noFinalAnswer ? NO_FINAL_ANSWER[turn.noFinalAnswer] : null;
46
+ }
31
47
  function bytes(text) {
32
48
  return Buffer.byteLength(text, "utf8");
33
49
  }
34
- /** Truncate to at most `maxBytes` UTF-8 bytes on a safe char boundary. */
35
- function boundBytes(text, maxBytes) {
50
+ /** Truncate to at most `maxBytes` UTF-8 bytes on a safe char boundary; a cut ends with `mark`. */
51
+ function boundBytes(text, maxBytes, mark = "\n…[truncated]") {
36
52
  if (bytes(text) <= maxBytes)
37
53
  return text;
38
54
  // Buffer slice can split a multi-byte scalar; back off a few bytes until valid.
@@ -40,21 +56,60 @@ function boundBytes(text, maxBytes) {
40
56
  for (let trim = 0; trim <= 3 && trim <= buf.length; trim += 1) {
41
57
  try {
42
58
  const decoded = new TextDecoder("utf-8", { fatal: true }).decode(trim === 0 ? buf : buf.subarray(0, buf.length - trim));
43
- return `${decoded}\n…[truncated]`;
59
+ return `${decoded}${mark}`;
44
60
  }
45
61
  catch {
46
62
  /* prefix ended inside a scalar; back off */
47
63
  }
48
64
  }
49
- return `${buf.toString("utf8")}\n…[truncated]`;
65
+ return `${buf.toString("utf8")}${mark}`;
66
+ }
67
+ /** The longest end of `text` within `maxBytes` UTF-8 bytes, starting on a whole character. */
68
+ export function tailBytes(text, maxBytes) {
69
+ const buf = Buffer.from(text, "utf8");
70
+ let start = Math.max(0, buf.length - maxBytes);
71
+ // A continuation byte (10xxxxxx) lies inside a character: start after it.
72
+ while (start < buf.length && (buf[start] & 0xc0) === 0x80)
73
+ start += 1;
74
+ return buf.subarray(start).toString("utf8");
50
75
  }
51
- function oneLine(text) {
76
+ /**
77
+ * A verbatim entry's output within `maxBytes` (#405). An answer keeps its
78
+ * start. A turn without a final answer keeps its end, where its newest
79
+ * recorded output is (its retained file opens with a fixed preamble). The cut
80
+ * mark sits outside the allowance and names the file holding the whole output.
81
+ */
82
+ function boundOutput(turn, maxBytes) {
83
+ const text = turn.outputText.trim();
84
+ const whole = turn.outputSource
85
+ ? `; the whole output is ${bytes(text)} bytes, complete in ${turn.outputSource}`
86
+ : "";
87
+ if (!turn.noFinalAnswer)
88
+ return boundBytes(text, maxBytes, `\n…[truncated${whole}]`);
89
+ if (bytes(text) <= maxBytes)
90
+ return text;
91
+ return `[earlier output truncated${whole}]\n…${tailBytes(text, maxBytes)}`;
92
+ }
93
+ /** One line of at most COLLAPSE_PREFIX_CHARS UTF-16 units: the start of `text`,
94
+ * or its end when `keepEnd`. A cut is marked "…" outside the allowance and
95
+ * names `source`, the file holding the whole text, when given. */
96
+ function oneLine(text, keepEnd = false, source) {
52
97
  const flat = text.replace(/\s+/g, " ").trim();
53
- return flat.length > COLLAPSE_PREFIX_CHARS ? `${flat.slice(0, COLLAPSE_PREFIX_CHARS)}…` : flat;
98
+ if (flat.length <= COLLAPSE_PREFIX_CHARS)
99
+ return flat;
100
+ const whole = source ? ` (whole output: ${source})` : "";
101
+ // A cut between a surrogate pair's halves would leave a lone surrogate, which
102
+ // becomes U+FFFD in THREAD.md; drop that character whole instead (#577).
103
+ if (keepEnd) {
104
+ const tail = flat.slice(-COLLAPSE_PREFIX_CHARS);
105
+ return `…${/^\p{Surrogate}/u.test(tail) ? tail.slice(1) : tail}${whole}`;
106
+ }
107
+ const head = flat.slice(0, COLLAPSE_PREFIX_CHARS);
108
+ return `${/\p{Surrogate}$/u.test(head) ? head.slice(0, -1) : head}…${whole}`;
54
109
  }
55
110
  /** Delta turns for this lane: everything AFTER the checkpoint (all prior when
56
111
  * the lane never ran / has no reachable native session to trust). */
57
- function deltaTurns(req) {
112
+ export function deltaTurns(req) {
58
113
  // Without a reachable native session the lane starts blank — carry the whole
59
114
  // prior conversation regardless of any stale checkpoint.
60
115
  if (!req.nativeResumeAvailable)
@@ -68,14 +123,23 @@ function deltaTurns(req) {
68
123
  function verbatimEntry(turn, index) {
69
124
  const prompt = boundBytes(turn.prompt.trim(), PER_TURN_BUDGET_BYTES / 2);
70
125
  const output = turn.outputText.trim()
71
- ? boundBytes(turn.outputText.trim(), PER_TURN_BUDGET_BYTES / 2)
126
+ ? boundOutput(turn, PER_TURN_BUDGET_BYTES / 2)
72
127
  : "_(no recorded output)_";
73
- return `### Turn ${index + 1}\n\n**User asked:**\n\n${prompt}\n\n**The assistant answered:**\n\n${output}\n`;
128
+ const missing = noFinalAnswerText(turn);
129
+ const said = missing
130
+ ? `**${missing.lead} The assistant's recorded output (not a completion verdict):**`
131
+ : "**The assistant answered:**";
132
+ return `### Turn ${index + 1}\n\n**User asked:**\n\n${prompt}\n\n${said}\n\n${output}\n`;
74
133
  }
75
134
  function collapsedEntry(turn, index) {
76
135
  const prompt = oneLine(turn.prompt) || "(empty)";
77
- const output = turn.outputText.trim() ? oneLine(turn.outputText) : "(no recorded output)";
78
- return `- Turn ${index + 1} — user: ${prompt} · assistant: ${output}`;
136
+ const missing = noFinalAnswerText(turn);
137
+ // An unfinished turn's line keeps the end of its output and names the file (#405).
138
+ const output = turn.outputText.trim()
139
+ ? oneLine(turn.outputText, missing !== null, missing ? turn.outputSource : undefined)
140
+ : "(no recorded output)";
141
+ const speaker = missing ? `assistant (${missing.note})` : "assistant";
142
+ return `- Turn ${index + 1} — user: ${prompt} · ${speaker}: ${output}`;
79
143
  }
80
144
  /**
81
145
  * How many of the OLDEST delta turns collapse to one-liners: grow the collapsed
@@ -96,9 +160,11 @@ function collapseCount(delta) {
96
160
  /**
97
161
  * Assemble the packet body from delta turns, collapsing the OLDEST turns while
98
162
  * the verbatim total exceeds the budget. When a `summary` covering the collapse
99
- * boundary is supplied it REPLACES the one-liners with real prose; otherwise the
100
- * mechanical one-liner collapse renders (always works). Returns the body and
101
- * whether any collapse happened (`summarized`).
163
+ * boundary is supplied it REPLACES the one-liners with real prose, except those
164
+ * of turns without a final answer: generated or cached prose may omit their
165
+ * output and never names its file, so their lines follow the summary (#405).
166
+ * Otherwise the mechanical one-liner collapse renders (always works). Returns
167
+ * the body and whether any collapse happened (`summarized`).
102
168
  */
103
169
  function renderPacket(delta, activePlan, anchor, summary) {
104
170
  const collapsedCount = collapseCount(delta);
@@ -119,7 +185,16 @@ function renderPacket(delta, activePlan, anchor, summary) {
119
185
  : "> The older turns are condensed to one-line entries below (a cached conversation summary was unavailable for this turn). The most recent turns are verbatim.", "");
120
186
  }
121
187
  if (usableSummary) {
122
- parts.push("## Earlier conversation (summary)", "", usableSummary.text.trim(), "", "## Recent turns", "");
188
+ parts.push("## Earlier conversation (summary)", "", usableSummary.text.trim(), "");
189
+ const unfinished = [];
190
+ for (let i = 0; i < collapsedCount; i += 1) {
191
+ if (delta[i].noFinalAnswer)
192
+ unfinished.push(collapsedEntry(delta[i], i));
193
+ }
194
+ if (unfinished.length > 0) {
195
+ parts.push("Recorded output of the summarized turns that have no final answer (not a completion verdict):", "", ...unfinished, "");
196
+ }
197
+ parts.push("## Recent turns", "");
123
198
  for (let i = collapsedCount; i < delta.length; i += 1) {
124
199
  parts.push(verbatimEntry(delta[i], i));
125
200
  }
@@ -1 +1 @@
1
- {"version":3,"file":"continuity.js","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"continuity.js","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,13 @@ import type { CredentialUnusableObservation, QuotaSnapshot } from "@claudexor/sc
10
10
  export interface QuotaBlock {
11
11
  blocked: true;
12
12
  constraint_id: string | null;
13
+ /** Null while a usage refusal with no reopening time is active (#558): no
14
+ * time is known for the account, whatever its cooldown or other windows say. */
13
15
  resets_at: string | null;
16
+ /** Set only for that refusal: no reader may present it as a window a timer heals. */
17
+ reopening?: "unknown";
18
+ /** That refusal's bounded engine cooldown end: a recheck instant, never a reset. */
19
+ recheck_at?: string;
14
20
  kind: "exhausted" | "cooldown";
15
21
  }
16
22
  /**
@@ -62,6 +68,7 @@ export interface PoolExhaustionCandidate {
62
68
  } | null;
63
69
  cooldown: {
64
70
  resets_at: string | null;
71
+ reopening?: "unknown";
65
72
  } | null;
66
73
  /** A7: a live `credential_unusable` verdict about this row's credential —
67
74
  * dead-credential evidence for the terminal's claim, and an exclusion from
@@ -1 +1 @@
1
- {"version":3,"file":"credential-cooldown.d.ts","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGtF;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,YAAY,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,EAChD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,CAAC,EAAE,IAAI,EACV,WAAW,CAAC,EAAE,gBAAgB,GAC7B,UAAU,GAAG,IAAI,CAmCnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C;;yEAEqE;IACrE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpC;AAcD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAW9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EACJ,4BAA4B,GAAG,uBAAuB,GAAG,iCAAiC,CAAC;IAC7F,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC/C;;iEAE6D;IAC7D,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD;;uDAEmD;IACnD,eAAe,CAAC,EAAE,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACtE,GAAG,KAAK,CAoFR"}
1
+ {"version":3,"file":"credential-cooldown.d.ts","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOtF;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;oFACgF;IAChF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qFAAqF;IACrF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,YAAY,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,EAChD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,CAAC,EAAE,IAAI,EACV,WAAW,CAAC,EAAE,gBAAgB,GAC7B,UAAU,GAAG,IAAI,CAyDnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IACrE;;yEAEqE;IACrE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpC;AAcD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAW9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EACJ,4BAA4B,GAAG,uBAAuB,GAAG,iCAAiC,CAAC;IAC7F,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC/C;;iEAE6D;IAC7D,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD;;uDAEmD;IACnD,eAAe,CAAC,EAAE,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACtE,GAAG,KAAK,CA4FR"}
@@ -1,4 +1,4 @@
1
- import { ControlProblem, quotaSnapshotAvailability } from "@claudexor/schema";
1
+ import { ControlProblem, REOPENING_UNKNOWN_COOLDOWN_ID, quotaSnapshotAvailability, } from "@claudexor/schema";
2
2
  /**
3
3
  * Does any observed quota window BLOCK this subject right now?
4
4
  *
@@ -39,6 +39,7 @@ export function profileQuotaBlock(snapshots, harnessId, profileId, subjectRoute,
39
39
  : subjectRoute === "api_key"
40
40
  ? "managed_api_key"
41
41
  : null;
42
+ let dated = null;
42
43
  for (const snapshot of snapshots) {
43
44
  if (snapshot.subject.harness !== harnessId)
44
45
  continue;
@@ -50,6 +51,25 @@ export function profileQuotaBlock(snapshots, harnessId, profileId, subjectRoute,
50
51
  const availability = quotaSnapshotAvailability(snapshot, opts);
51
52
  if (availability.state === "available")
52
53
  continue;
54
+ // #558: an active, applicable usage refusal with no reopening time decides
55
+ // the account's verdict whatever else blocks it. Another window's date
56
+ // keeps its meaning for that window only and promises nothing about the
57
+ // account; the refusal's own cooldown end is a recheck, never a reset.
58
+ const refusal = snapshot.constraints.find((constraint) => constraint.id === REOPENING_UNKNOWN_COOLDOWN_ID &&
59
+ availability.blocking_constraints.includes(constraint.id));
60
+ if (refusal) {
61
+ const recheck = quotaSnapshotAvailability({ constraints: [refusal] }, opts).resets_at;
62
+ return {
63
+ blocked: true,
64
+ constraint_id: refusal.id,
65
+ resets_at: null,
66
+ reopening: "unknown",
67
+ ...(recheck ? { recheck_at: recheck } : {}),
68
+ kind: "cooldown",
69
+ };
70
+ }
71
+ if (dated)
72
+ continue;
53
73
  // One snapshot may block on several windows. Report the window whose own
54
74
  // release is the projection's earliest recheck instant, with that window's
55
75
  // kind, so id, kind and reset never come from different windows.
@@ -60,7 +80,7 @@ export function profileQuotaBlock(snapshots, harnessId, profileId, subjectRoute,
60
80
  own: quotaSnapshotAvailability({ constraints: [constraint] }, opts),
61
81
  }))
62
82
  .find(({ own }) => own.resets_at === availability.resets_at);
63
- return {
83
+ dated = {
64
84
  blocked: true,
65
85
  constraint_id: controlling?.id ?? availability.blocking_constraints[0] ?? null,
66
86
  resets_at: availability.resets_at,
@@ -69,7 +89,7 @@ export function profileQuotaBlock(snapshots, harnessId, profileId, subjectRoute,
69
89
  : availability.state,
70
90
  };
71
91
  }
72
- return null;
92
+ return dated;
73
93
  }
74
94
  /** Rejection labels that keep a row a POOL MEMBER for the reset fold. The
75
95
  * other labels (`not_ready`, `not_in_rotation_policy`,
@@ -128,7 +148,11 @@ export function credentialPoolExhausted(args) {
128
148
  const members = args.candidates.filter((c) => POOL_MEMBER_REJECTIONS.has(c.rejected) &&
129
149
  !c.unusable &&
130
150
  (c.headroom !== null || c.cooldown !== null));
131
- const limits = members.map((c) => c.headroom?.resets_at ?? c.cooldown?.resets_at ?? null);
151
+ // A member refused with no known reopening (#558) promises no instant, whatever
152
+ // else it reports: one such member leaves the pool's reset unknown.
153
+ const limits = members.map((c) => c.cooldown?.reopening === "unknown"
154
+ ? null
155
+ : (c.headroom?.resets_at ?? c.cooldown?.resets_at ?? null));
132
156
  // Same rule for the triggering subject: its own observed limit joins the
133
157
  // fold only while its credential is not observed dead — the terminal must
134
158
  // not promise the DEAD subject's reset as the instant the pool reopens.
@@ -155,7 +179,9 @@ export function credentialPoolExhausted(args) {
155
179
  ? "auth"
156
180
  : !candidate.unusable &&
157
181
  POOL_MEMBER_REJECTIONS.has(candidate.rejected) &&
158
- (candidate.headroom || candidate.cooldown)
182
+ (candidate.headroom || candidate.cooldown) &&
183
+ // A refusal of unknown nature (#558) is not known to be quota.
184
+ candidate.cooldown?.reopening !== "unknown"
159
185
  ? "quota"
160
186
  : "unavailable")),
161
187
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"credential-cooldown.js","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-cooldown.js","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAsB3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAmC,EACnC,SAAiB,EACjB,SAAwB,EACxB,YAAgD,EAChD,KAAqB,EACrB,GAAU,EACV,WAA8B;IAE9B,MAAM,SAAS,GACb,YAAY,KAAK,eAAe;QAC9B,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,YAAY,KAAK,SAAS;YAC1B,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,KAAK,GAAsB,IAAI,CAAC;IACpC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;YAAE,SAAS;QACrD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAClE,IAAI,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;YAAE,SAAS;QACpF,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,YAAY,CAAC,KAAK,KAAK,WAAW;YAAE,SAAS;QACjD,2EAA2E;QAC3E,uEAAuE;QACvE,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CACvC,CAAC,UAAU,EAAE,EAAE,CACb,UAAU,CAAC,EAAE,KAAK,6BAA6B;YAC/C,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAC5D,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;YACtF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,OAAO,CAAC,EAAE;gBACzB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,SAAS;gBACpB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,IAAI,EAAE,UAAU;aACjB,CAAC;QACJ,CAAC;QACD,IAAI,KAAK;YAAE,SAAS;QACpB,yEAAyE;QACzE,2EAA2E;QAC3E,iEAAiE;QACjE,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW;aACrC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aACjF,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,GAAG,EAAE,yBAAyB,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC;SACpE,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,KAAK,YAAY,CAAC,SAAS,CAAC,CAAC;QAC/D,KAAK,GAAG;YACN,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,WAAW,EAAE,EAAE,IAAI,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,IAAI;YAC9E,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,IAAI,EACF,WAAW,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW;gBAClD,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK;gBACvB,CAAC,CAAC,YAAY,CAAC,KAAK;SACzB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAmBD;;;oEAGoE;AACpE,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,SAAS;IACT,eAAe;IACf,mBAAmB;IACnB,UAAU;IACV,cAAc;CACf,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAkC;IACnE,IACE,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,QAAQ,KAAK,qBAAqB;QAE5C,OAAO,KAAK,CAAC;IACf,OAAO,CACL,SAAS,CAAC,QAAQ,KAAK,IAAI;QAC3B,SAAS,CAAC,QAAQ,KAAK,IAAI;QAC3B,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,CACtC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAiBvC;IACC,yEAAyE;IACzE,0EAA0E;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,CAAC,QAAQ;QACX,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAC/C,CAAC;IACF,gFAAgF;IAChF,oEAAoE;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS;QACjC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,CAC7D,CAAC;IACF,yEAAyE;IACzE,0EAA0E;IAC1E,wEAAwE;IACxE,IACE,IAAI,CAAC,YAAY;QACjB,CAAC,IAAI,CAAC,eAAe;QACrB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,CAAC,EACrD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;QAClE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1F,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC;IAC3F,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,UAAU,GAAG;QACjB,GAAG,IAAI,GAAG,CACR,IAAI,CAAC,UAAU;aACZ,MAAM,CACL,CAAC,SAAS,EAAE,EAAE,CACZ,CAAC;YACC,UAAU;YACV,oBAAoB;YACpB,wBAAwB;YACxB,0BAA0B;SAC3B,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CACjC;aACA,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACjB,SAAS,CAAC,QAAQ,EAAE,IAAI,KAAK,cAAc;YACzC,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ;gBACjB,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC9C,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC;gBAC1C,+DAA+D;gBAC/D,SAAS,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS;gBAC7C,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,aAAa,CACpB,CACJ;KACF,CAAC;IACF,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,KAAK,cAAc,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/E,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,KAAK,GACT,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM;QACjD,CAAC,CAAC,yCAAyC;QAC3C,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO;YACpD,CAAC,CAAC,mDAAmD;YACrD,CAAC,CAAC,kDAAkD,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,kCAAkC,IAAI,CAAC,SAAS,MAAM,KAAK,KAAK,OAAO,8BAA8B;QACnG,CAAC,IAAI,CAAC,eAAe;YACnB,CAAC,CAAC,4DAA4D,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG;YAC1F,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACxD,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,IAAI,EAAE,2BAA2B;QACjC,oEAAoE;QACpE,+DAA+D;QAC/D,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ;QACR,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;YAC5B,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE;gBACP,UAAU;gBACV,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM;gBACvC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE;aACjE;SACF,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}