@coool/opencode-adaptive 0.0.0-stage → 1.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 (440) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -2
  3. package/dist/adapters/codex-capacity/index.d.ts +5 -0
  4. package/dist/adapters/codex-capacity/index.d.ts.map +1 -0
  5. package/dist/adapters/codex-capacity/index.js +5 -0
  6. package/dist/adapters/codex-capacity/index.js.map +1 -0
  7. package/dist/adapters/codex-capacity/parse.d.ts +28 -0
  8. package/dist/adapters/codex-capacity/parse.d.ts.map +1 -0
  9. package/dist/adapters/codex-capacity/parse.js +130 -0
  10. package/dist/adapters/codex-capacity/parse.js.map +1 -0
  11. package/dist/adapters/codex-capacity/reading.d.ts +10 -0
  12. package/dist/adapters/codex-capacity/reading.d.ts.map +1 -0
  13. package/dist/adapters/codex-capacity/reading.js +45 -0
  14. package/dist/adapters/codex-capacity/reading.js.map +1 -0
  15. package/dist/adapters/codex-capacity/sensor.d.ts +24 -0
  16. package/dist/adapters/codex-capacity/sensor.d.ts.map +1 -0
  17. package/dist/adapters/codex-capacity/sensor.js +30 -0
  18. package/dist/adapters/codex-capacity/sensor.js.map +1 -0
  19. package/dist/adapters/codex-capacity/types.d.ts +35 -0
  20. package/dist/adapters/codex-capacity/types.d.ts.map +1 -0
  21. package/dist/adapters/codex-capacity/types.js +4 -0
  22. package/dist/adapters/codex-capacity/types.js.map +1 -0
  23. package/dist/adapters/opencode/escalation-tool.d.ts +52 -0
  24. package/dist/adapters/opencode/escalation-tool.d.ts.map +1 -0
  25. package/dist/adapters/opencode/escalation-tool.js +59 -0
  26. package/dist/adapters/opencode/escalation-tool.js.map +1 -0
  27. package/dist/adapters/opencode/events.d.ts +24 -0
  28. package/dist/adapters/opencode/events.d.ts.map +1 -0
  29. package/dist/adapters/opencode/events.js +68 -0
  30. package/dist/adapters/opencode/events.js.map +1 -0
  31. package/dist/adapters/opencode/hooks.d.ts +35 -0
  32. package/dist/adapters/opencode/hooks.d.ts.map +1 -0
  33. package/dist/adapters/opencode/hooks.js +12 -0
  34. package/dist/adapters/opencode/hooks.js.map +1 -0
  35. package/dist/adapters/opencode/index.d.ts +17 -0
  36. package/dist/adapters/opencode/index.d.ts.map +1 -0
  37. package/dist/adapters/opencode/index.js +9 -0
  38. package/dist/adapters/opencode/index.js.map +1 -0
  39. package/dist/adapters/opencode/inventory.d.ts +31 -0
  40. package/dist/adapters/opencode/inventory.d.ts.map +1 -0
  41. package/dist/adapters/opencode/inventory.js +53 -0
  42. package/dist/adapters/opencode/inventory.js.map +1 -0
  43. package/dist/adapters/opencode/report.d.ts +92 -0
  44. package/dist/adapters/opencode/report.d.ts.map +1 -0
  45. package/dist/adapters/opencode/report.js +145 -0
  46. package/dist/adapters/opencode/report.js.map +1 -0
  47. package/dist/adapters/opencode/session-ops.d.ts +40 -0
  48. package/dist/adapters/opencode/session-ops.d.ts.map +1 -0
  49. package/dist/adapters/opencode/session-ops.js +32 -0
  50. package/dist/adapters/opencode/session-ops.js.map +1 -0
  51. package/dist/adapters/opencode/storage.d.ts +16 -0
  52. package/dist/adapters/opencode/storage.d.ts.map +1 -0
  53. package/dist/adapters/opencode/storage.js +8 -0
  54. package/dist/adapters/opencode/storage.js.map +1 -0
  55. package/dist/adapters/opencode/tier-tool.d.ts +38 -0
  56. package/dist/adapters/opencode/tier-tool.d.ts.map +1 -0
  57. package/dist/adapters/opencode/tier-tool.js +72 -0
  58. package/dist/adapters/opencode/tier-tool.js.map +1 -0
  59. package/dist/adapters/opencode/types.d.ts +102 -0
  60. package/dist/adapters/opencode/types.d.ts.map +1 -0
  61. package/dist/adapters/opencode/types.js +2 -0
  62. package/dist/adapters/opencode/types.js.map +1 -0
  63. package/dist/core/compatibility/gate.d.ts +10 -0
  64. package/dist/core/compatibility/gate.d.ts.map +1 -0
  65. package/dist/core/compatibility/gate.js +55 -0
  66. package/dist/core/compatibility/gate.js.map +1 -0
  67. package/dist/core/compatibility/index.d.ts +3 -0
  68. package/dist/core/compatibility/index.d.ts.map +1 -0
  69. package/dist/core/compatibility/index.js +3 -0
  70. package/dist/core/compatibility/index.js.map +1 -0
  71. package/dist/core/compatibility/types.d.ts +54 -0
  72. package/dist/core/compatibility/types.d.ts.map +1 -0
  73. package/dist/core/compatibility/types.js +27 -0
  74. package/dist/core/compatibility/types.js.map +1 -0
  75. package/dist/core/scheduler/admit.d.ts +7 -0
  76. package/dist/core/scheduler/admit.d.ts.map +1 -0
  77. package/dist/core/scheduler/admit.js +153 -0
  78. package/dist/core/scheduler/admit.js.map +1 -0
  79. package/dist/core/scheduler/escalate.d.ts +7 -0
  80. package/dist/core/scheduler/escalate.d.ts.map +1 -0
  81. package/dist/core/scheduler/escalate.js +56 -0
  82. package/dist/core/scheduler/escalate.js.map +1 -0
  83. package/dist/core/scheduler/index.d.ts +5 -0
  84. package/dist/core/scheduler/index.d.ts.map +1 -0
  85. package/dist/core/scheduler/index.js +5 -0
  86. package/dist/core/scheduler/index.js.map +1 -0
  87. package/dist/core/scheduler/mode.d.ts +9 -0
  88. package/dist/core/scheduler/mode.d.ts.map +1 -0
  89. package/dist/core/scheduler/mode.js +10 -0
  90. package/dist/core/scheduler/mode.js.map +1 -0
  91. package/dist/core/scheduler/types.d.ts +143 -0
  92. package/dist/core/scheduler/types.d.ts.map +1 -0
  93. package/dist/core/scheduler/types.js +74 -0
  94. package/dist/core/scheduler/types.js.map +1 -0
  95. package/dist/core/tier-policy/index.d.ts +4 -0
  96. package/dist/core/tier-policy/index.d.ts.map +1 -0
  97. package/dist/core/tier-policy/index.js +4 -0
  98. package/dist/core/tier-policy/index.js.map +1 -0
  99. package/dist/core/tier-policy/resolve.d.ts +19 -0
  100. package/dist/core/tier-policy/resolve.d.ts.map +1 -0
  101. package/dist/core/tier-policy/resolve.js +52 -0
  102. package/dist/core/tier-policy/resolve.js.map +1 -0
  103. package/dist/core/tier-policy/tier-list.d.ts +11 -0
  104. package/dist/core/tier-policy/tier-list.d.ts.map +1 -0
  105. package/dist/core/tier-policy/tier-list.js +23 -0
  106. package/dist/core/tier-policy/tier-list.js.map +1 -0
  107. package/dist/core/tier-policy/types.d.ts +85 -0
  108. package/dist/core/tier-policy/types.d.ts.map +1 -0
  109. package/dist/core/tier-policy/types.js +45 -0
  110. package/dist/core/tier-policy/types.js.map +1 -0
  111. package/dist/core/work-unit/index.d.ts +4 -0
  112. package/dist/core/work-unit/index.d.ts.map +1 -0
  113. package/dist/core/work-unit/index.js +4 -0
  114. package/dist/core/work-unit/index.js.map +1 -0
  115. package/dist/core/work-unit/interruption.d.ts +8 -0
  116. package/dist/core/work-unit/interruption.d.ts.map +1 -0
  117. package/dist/core/work-unit/interruption.js +12 -0
  118. package/dist/core/work-unit/interruption.js.map +1 -0
  119. package/dist/core/work-unit/tracker.d.ts +46 -0
  120. package/dist/core/work-unit/tracker.d.ts.map +1 -0
  121. package/dist/core/work-unit/tracker.js +136 -0
  122. package/dist/core/work-unit/tracker.js.map +1 -0
  123. package/dist/core/work-unit/types.d.ts +146 -0
  124. package/dist/core/work-unit/types.d.ts.map +1 -0
  125. package/dist/core/work-unit/types.js +23 -0
  126. package/dist/core/work-unit/types.js.map +1 -0
  127. package/dist/execution/continuation/execute.d.ts +19 -0
  128. package/dist/execution/continuation/execute.d.ts.map +1 -0
  129. package/dist/execution/continuation/execute.js +31 -0
  130. package/dist/execution/continuation/execute.js.map +1 -0
  131. package/dist/execution/continuation/index.d.ts +6 -0
  132. package/dist/execution/continuation/index.d.ts.map +1 -0
  133. package/dist/execution/continuation/index.js +5 -0
  134. package/dist/execution/continuation/index.js.map +1 -0
  135. package/dist/execution/continuation/ledger.d.ts +20 -0
  136. package/dist/execution/continuation/ledger.d.ts.map +1 -0
  137. package/dist/execution/continuation/ledger.js +31 -0
  138. package/dist/execution/continuation/ledger.js.map +1 -0
  139. package/dist/execution/continuation/plan.d.ts +13 -0
  140. package/dist/execution/continuation/plan.d.ts.map +1 -0
  141. package/dist/execution/continuation/plan.js +20 -0
  142. package/dist/execution/continuation/plan.js.map +1 -0
  143. package/dist/execution/continuation/prompts.d.ts +8 -0
  144. package/dist/execution/continuation/prompts.d.ts.map +1 -0
  145. package/dist/execution/continuation/prompts.js +8 -0
  146. package/dist/execution/continuation/prompts.js.map +1 -0
  147. package/dist/execution/continuation/types.d.ts +70 -0
  148. package/dist/execution/continuation/types.d.ts.map +1 -0
  149. package/dist/execution/continuation/types.js +15 -0
  150. package/dist/execution/continuation/types.js.map +1 -0
  151. package/dist/execution/escalation/index.d.ts +2 -0
  152. package/dist/execution/escalation/index.d.ts.map +1 -0
  153. package/dist/execution/escalation/index.js +2 -0
  154. package/dist/execution/escalation/index.js.map +1 -0
  155. package/dist/execution/escalation/types.d.ts +31 -0
  156. package/dist/execution/escalation/types.d.ts.map +1 -0
  157. package/dist/execution/escalation/types.js +49 -0
  158. package/dist/execution/escalation/types.js.map +1 -0
  159. package/dist/execution/index.d.ts +5 -0
  160. package/dist/execution/index.d.ts.map +1 -0
  161. package/dist/execution/index.js +5 -0
  162. package/dist/execution/index.js.map +1 -0
  163. package/dist/execution/parking/index.d.ts +3 -0
  164. package/dist/execution/parking/index.d.ts.map +1 -0
  165. package/dist/execution/parking/index.js +2 -0
  166. package/dist/execution/parking/index.js.map +1 -0
  167. package/dist/execution/parking/plan.d.ts +40 -0
  168. package/dist/execution/parking/plan.d.ts.map +1 -0
  169. package/dist/execution/parking/plan.js +34 -0
  170. package/dist/execution/parking/plan.js.map +1 -0
  171. package/dist/execution/recovery/gate.d.ts +20 -0
  172. package/dist/execution/recovery/gate.d.ts.map +1 -0
  173. package/dist/execution/recovery/gate.js +23 -0
  174. package/dist/execution/recovery/gate.js.map +1 -0
  175. package/dist/execution/recovery/index.d.ts +3 -0
  176. package/dist/execution/recovery/index.d.ts.map +1 -0
  177. package/dist/execution/recovery/index.js +2 -0
  178. package/dist/execution/recovery/index.js.map +1 -0
  179. package/dist/execution/retry/decide.d.ts +30 -0
  180. package/dist/execution/retry/decide.d.ts.map +1 -0
  181. package/dist/execution/retry/decide.js +76 -0
  182. package/dist/execution/retry/decide.js.map +1 -0
  183. package/dist/execution/retry/index.d.ts +3 -0
  184. package/dist/execution/retry/index.d.ts.map +1 -0
  185. package/dist/execution/retry/index.js +3 -0
  186. package/dist/execution/retry/index.js.map +1 -0
  187. package/dist/execution/retry/types.d.ts +66 -0
  188. package/dist/execution/retry/types.d.ts.map +1 -0
  189. package/dist/execution/retry/types.js +9 -0
  190. package/dist/execution/retry/types.js.map +1 -0
  191. package/dist/gui-experimental.cjs +1 -0
  192. package/dist/gui.d.ts +17 -0
  193. package/dist/gui.d.ts.map +1 -0
  194. package/dist/gui.js +70 -0
  195. package/dist/gui.js.map +1 -0
  196. package/dist/health/capacity/index.d.ts +4 -0
  197. package/dist/health/capacity/index.d.ts.map +1 -0
  198. package/dist/health/capacity/index.js +4 -0
  199. package/dist/health/capacity/index.js.map +1 -0
  200. package/dist/health/capacity/merge.d.ts +58 -0
  201. package/dist/health/capacity/merge.d.ts.map +1 -0
  202. package/dist/health/capacity/merge.js +154 -0
  203. package/dist/health/capacity/merge.js.map +1 -0
  204. package/dist/health/capacity/registry.d.ts +41 -0
  205. package/dist/health/capacity/registry.d.ts.map +1 -0
  206. package/dist/health/capacity/registry.js +106 -0
  207. package/dist/health/capacity/registry.js.map +1 -0
  208. package/dist/health/capacity/types.d.ts +74 -0
  209. package/dist/health/capacity/types.d.ts.map +1 -0
  210. package/dist/health/capacity/types.js +6 -0
  211. package/dist/health/capacity/types.js.map +1 -0
  212. package/dist/health/circuit-breaker/breaker.d.ts +84 -0
  213. package/dist/health/circuit-breaker/breaker.d.ts.map +1 -0
  214. package/dist/health/circuit-breaker/breaker.js +132 -0
  215. package/dist/health/circuit-breaker/breaker.js.map +1 -0
  216. package/dist/health/circuit-breaker/index.d.ts +3 -0
  217. package/dist/health/circuit-breaker/index.d.ts.map +1 -0
  218. package/dist/health/circuit-breaker/index.js +3 -0
  219. package/dist/health/circuit-breaker/index.js.map +1 -0
  220. package/dist/health/circuit-breaker/types.d.ts +53 -0
  221. package/dist/health/circuit-breaker/types.d.ts.map +1 -0
  222. package/dist/health/circuit-breaker/types.js +13 -0
  223. package/dist/health/circuit-breaker/types.js.map +1 -0
  224. package/dist/health/classifier/classify.d.ts +9 -0
  225. package/dist/health/classifier/classify.d.ts.map +1 -0
  226. package/dist/health/classifier/classify.js +245 -0
  227. package/dist/health/classifier/classify.js.map +1 -0
  228. package/dist/health/classifier/index.d.ts +3 -0
  229. package/dist/health/classifier/index.d.ts.map +1 -0
  230. package/dist/health/classifier/index.js +3 -0
  231. package/dist/health/classifier/index.js.map +1 -0
  232. package/dist/health/classifier/types.d.ts +72 -0
  233. package/dist/health/classifier/types.d.ts.map +1 -0
  234. package/dist/health/classifier/types.js +27 -0
  235. package/dist/health/classifier/types.js.map +1 -0
  236. package/dist/health/index.d.ts +5 -0
  237. package/dist/health/index.d.ts.map +1 -0
  238. package/dist/health/index.js +5 -0
  239. package/dist/health/index.js.map +1 -0
  240. package/dist/health/resource-health/index.d.ts +5 -0
  241. package/dist/health/resource-health/index.d.ts.map +1 -0
  242. package/dist/health/resource-health/index.js +5 -0
  243. package/dist/health/resource-health/index.js.map +1 -0
  244. package/dist/health/resource-health/key.d.ts +19 -0
  245. package/dist/health/resource-health/key.d.ts.map +1 -0
  246. package/dist/health/resource-health/key.js +54 -0
  247. package/dist/health/resource-health/key.js.map +1 -0
  248. package/dist/health/resource-health/registry.d.ts +41 -0
  249. package/dist/health/resource-health/registry.d.ts.map +1 -0
  250. package/dist/health/resource-health/registry.js +258 -0
  251. package/dist/health/resource-health/registry.js.map +1 -0
  252. package/dist/health/resource-health/transitions.d.ts +11 -0
  253. package/dist/health/resource-health/transitions.d.ts.map +1 -0
  254. package/dist/health/resource-health/transitions.js +165 -0
  255. package/dist/health/resource-health/transitions.js.map +1 -0
  256. package/dist/health/resource-health/types.d.ts +116 -0
  257. package/dist/health/resource-health/types.d.ts.map +1 -0
  258. package/dist/health/resource-health/types.js +43 -0
  259. package/dist/health/resource-health/types.js.map +1 -0
  260. package/dist/index.d.ts +17 -0
  261. package/dist/index.d.ts.map +1 -0
  262. package/dist/index.js +80 -0
  263. package/dist/index.js.map +1 -0
  264. package/dist/plugin-id.d.ts +3 -0
  265. package/dist/plugin-id.d.ts.map +1 -0
  266. package/dist/plugin-id.js +3 -0
  267. package/dist/plugin-id.js.map +1 -0
  268. package/dist/rpc/definition.d.ts +100 -0
  269. package/dist/rpc/definition.d.ts.map +1 -0
  270. package/dist/rpc/definition.js +104 -0
  271. package/dist/rpc/definition.js.map +1 -0
  272. package/dist/rpc/handlers.d.ts +65 -0
  273. package/dist/rpc/handlers.d.ts.map +1 -0
  274. package/dist/rpc/handlers.js +111 -0
  275. package/dist/rpc/handlers.js.map +1 -0
  276. package/dist/rpc/status.d.ts +43 -0
  277. package/dist/rpc/status.d.ts.map +1 -0
  278. package/dist/rpc/status.js +45 -0
  279. package/dist/rpc/status.js.map +1 -0
  280. package/dist/rpc.d.ts +11 -0
  281. package/dist/rpc.d.ts.map +1 -0
  282. package/dist/rpc.js +8 -0
  283. package/dist/rpc.js.map +1 -0
  284. package/dist/state/capacity/index.d.ts +4 -0
  285. package/dist/state/capacity/index.d.ts.map +1 -0
  286. package/dist/state/capacity/index.js +4 -0
  287. package/dist/state/capacity/index.js.map +1 -0
  288. package/dist/state/capacity/parse.d.ts +3 -0
  289. package/dist/state/capacity/parse.d.ts.map +1 -0
  290. package/dist/state/capacity/parse.js +110 -0
  291. package/dist/state/capacity/parse.js.map +1 -0
  292. package/dist/state/capacity/store.d.ts +19 -0
  293. package/dist/state/capacity/store.d.ts.map +1 -0
  294. package/dist/state/capacity/store.js +64 -0
  295. package/dist/state/capacity/store.js.map +1 -0
  296. package/dist/state/capacity/types.d.ts +38 -0
  297. package/dist/state/capacity/types.d.ts.map +1 -0
  298. package/dist/state/capacity/types.js +11 -0
  299. package/dist/state/capacity/types.js.map +1 -0
  300. package/dist/state/health/index.d.ts +5 -0
  301. package/dist/state/health/index.d.ts.map +1 -0
  302. package/dist/state/health/index.js +4 -0
  303. package/dist/state/health/index.js.map +1 -0
  304. package/dist/state/health/parse.d.ts +3 -0
  305. package/dist/state/health/parse.d.ts.map +1 -0
  306. package/dist/state/health/parse.js +121 -0
  307. package/dist/state/health/parse.js.map +1 -0
  308. package/dist/state/health/store.d.ts +18 -0
  309. package/dist/state/health/store.d.ts.map +1 -0
  310. package/dist/state/health/store.js +55 -0
  311. package/dist/state/health/store.js.map +1 -0
  312. package/dist/state/health/types.d.ts +24 -0
  313. package/dist/state/health/types.d.ts.map +1 -0
  314. package/dist/state/health/types.js +5 -0
  315. package/dist/state/health/types.js.map +1 -0
  316. package/dist/state/parked-work/index.d.ts +5 -0
  317. package/dist/state/parked-work/index.d.ts.map +1 -0
  318. package/dist/state/parked-work/index.js +4 -0
  319. package/dist/state/parked-work/index.js.map +1 -0
  320. package/dist/state/parked-work/parse.d.ts +7 -0
  321. package/dist/state/parked-work/parse.d.ts.map +1 -0
  322. package/dist/state/parked-work/parse.js +83 -0
  323. package/dist/state/parked-work/parse.js.map +1 -0
  324. package/dist/state/parked-work/store.d.ts +18 -0
  325. package/dist/state/parked-work/store.d.ts.map +1 -0
  326. package/dist/state/parked-work/store.js +81 -0
  327. package/dist/state/parked-work/store.js.map +1 -0
  328. package/dist/state/parked-work/types.d.ts +42 -0
  329. package/dist/state/parked-work/types.d.ts.map +1 -0
  330. package/dist/state/parked-work/types.js +7 -0
  331. package/dist/state/parked-work/types.js.map +1 -0
  332. package/dist/state/receipts/bound.d.ts +15 -0
  333. package/dist/state/receipts/bound.d.ts.map +1 -0
  334. package/dist/state/receipts/bound.js +77 -0
  335. package/dist/state/receipts/bound.js.map +1 -0
  336. package/dist/state/receipts/index.d.ts +7 -0
  337. package/dist/state/receipts/index.d.ts.map +1 -0
  338. package/dist/state/receipts/index.js +5 -0
  339. package/dist/state/receipts/index.js.map +1 -0
  340. package/dist/state/receipts/parse.d.ts +7 -0
  341. package/dist/state/receipts/parse.d.ts.map +1 -0
  342. package/dist/state/receipts/parse.js +226 -0
  343. package/dist/state/receipts/parse.js.map +1 -0
  344. package/dist/state/receipts/store.d.ts +35 -0
  345. package/dist/state/receipts/store.d.ts.map +1 -0
  346. package/dist/state/receipts/store.js +128 -0
  347. package/dist/state/receipts/store.js.map +1 -0
  348. package/dist/state/receipts/types.d.ts +62 -0
  349. package/dist/state/receipts/types.d.ts.map +1 -0
  350. package/dist/state/receipts/types.js +12 -0
  351. package/dist/state/receipts/types.js.map +1 -0
  352. package/dist/state/session-modes/index.d.ts +5 -0
  353. package/dist/state/session-modes/index.d.ts.map +1 -0
  354. package/dist/state/session-modes/index.js +4 -0
  355. package/dist/state/session-modes/index.js.map +1 -0
  356. package/dist/state/session-modes/parse.d.ts +9 -0
  357. package/dist/state/session-modes/parse.d.ts.map +1 -0
  358. package/dist/state/session-modes/parse.js +62 -0
  359. package/dist/state/session-modes/parse.js.map +1 -0
  360. package/dist/state/session-modes/store.d.ts +21 -0
  361. package/dist/state/session-modes/store.d.ts.map +1 -0
  362. package/dist/state/session-modes/store.js +73 -0
  363. package/dist/state/session-modes/store.js.map +1 -0
  364. package/dist/state/session-modes/types.d.ts +42 -0
  365. package/dist/state/session-modes/types.d.ts.map +1 -0
  366. package/dist/state/session-modes/types.js +7 -0
  367. package/dist/state/session-modes/types.js.map +1 -0
  368. package/dist/state/settings/index.d.ts +5 -0
  369. package/dist/state/settings/index.d.ts.map +1 -0
  370. package/dist/state/settings/index.js +4 -0
  371. package/dist/state/settings/index.js.map +1 -0
  372. package/dist/state/settings/parse.d.ts +34 -0
  373. package/dist/state/settings/parse.d.ts.map +1 -0
  374. package/dist/state/settings/parse.js +261 -0
  375. package/dist/state/settings/parse.js.map +1 -0
  376. package/dist/state/settings/store.d.ts +22 -0
  377. package/dist/state/settings/store.d.ts.map +1 -0
  378. package/dist/state/settings/store.js +57 -0
  379. package/dist/state/settings/store.js.map +1 -0
  380. package/dist/state/settings/types.d.ts +63 -0
  381. package/dist/state/settings/types.d.ts.map +1 -0
  382. package/dist/state/settings/types.js +12 -0
  383. package/dist/state/settings/types.js.map +1 -0
  384. package/dist/supervisor/index.d.ts +5 -0
  385. package/dist/supervisor/index.d.ts.map +1 -0
  386. package/dist/supervisor/index.js +4 -0
  387. package/dist/supervisor/index.js.map +1 -0
  388. package/dist/supervisor/log.d.ts +11 -0
  389. package/dist/supervisor/log.d.ts.map +1 -0
  390. package/dist/supervisor/log.js +14 -0
  391. package/dist/supervisor/log.js.map +1 -0
  392. package/dist/supervisor/supervisor.d.ts +69 -0
  393. package/dist/supervisor/supervisor.d.ts.map +1 -0
  394. package/dist/supervisor/supervisor.js +1343 -0
  395. package/dist/supervisor/supervisor.js.map +1 -0
  396. package/dist/supervisor/types.d.ts +50 -0
  397. package/dist/supervisor/types.d.ts.map +1 -0
  398. package/dist/supervisor/types.js +3 -0
  399. package/dist/supervisor/types.js.map +1 -0
  400. package/dist/supervisor/view.d.ts +4 -0
  401. package/dist/supervisor/view.d.ts.map +1 -0
  402. package/dist/supervisor/view.js +4 -0
  403. package/dist/supervisor/view.js.map +1 -0
  404. package/dist/tui.d.ts +16 -0
  405. package/dist/tui.d.ts.map +1 -0
  406. package/dist/tui.js +252 -0
  407. package/dist/tui.js.map +1 -0
  408. package/dist/ui/gui/api.d.ts +18 -0
  409. package/dist/ui/gui/api.d.ts.map +1 -0
  410. package/dist/ui/gui/api.js +21 -0
  411. package/dist/ui/gui/api.js.map +1 -0
  412. package/dist/ui/gui/view.d.ts +27 -0
  413. package/dist/ui/gui/view.d.ts.map +1 -0
  414. package/dist/ui/gui/view.js +49 -0
  415. package/dist/ui/gui/view.js.map +1 -0
  416. package/dist/ui/tui/controller.d.ts +98 -0
  417. package/dist/ui/tui/controller.d.ts.map +1 -0
  418. package/dist/ui/tui/controller.js +399 -0
  419. package/dist/ui/tui/controller.js.map +1 -0
  420. package/dist/ui/tui/menu.d.ts +56 -0
  421. package/dist/ui/tui/menu.d.ts.map +1 -0
  422. package/dist/ui/tui/menu.js +176 -0
  423. package/dist/ui/tui/menu.js.map +1 -0
  424. package/dist/ui/tui/options.d.ts +20 -0
  425. package/dist/ui/tui/options.d.ts.map +1 -0
  426. package/dist/ui/tui/options.js +17 -0
  427. package/dist/ui/tui/options.js.map +1 -0
  428. package/dist/ui/tui/receipts.d.ts +22 -0
  429. package/dist/ui/tui/receipts.d.ts.map +1 -0
  430. package/dist/ui/tui/receipts.js +109 -0
  431. package/dist/ui/tui/receipts.js.map +1 -0
  432. package/dist/ui/tui/status.d.ts +23 -0
  433. package/dist/ui/tui/status.d.ts.map +1 -0
  434. package/dist/ui/tui/status.js +90 -0
  435. package/dist/ui/tui/status.js.map +1 -0
  436. package/dist/ui/tui/tiers.d.ts +52 -0
  437. package/dist/ui/tui/tiers.d.ts.map +1 -0
  438. package/dist/ui/tui/tiers.js +108 -0
  439. package/dist/ui/tui/tiers.js.map +1 -0
  440. package/package.json +85 -4
@@ -0,0 +1,35 @@
1
+ import type { Receipt, ReceiptInput, ReceiptOutcome, ReceiptsStorage } from "./types.js";
2
+ export interface ReceiptRef {
3
+ readonly sessionID: string;
4
+ /** When given, only receipts of that unit are updated; otherwise only receipts without a unit. */
5
+ readonly unitID?: string | undefined;
6
+ }
7
+ export declare class ReceiptStore {
8
+ #private;
9
+ private readonly storage;
10
+ constructor(storage: ReceiptsStorage);
11
+ /** Rebuild from storage (restart behavior). A read failure yields an empty store. */
12
+ load(): Promise<void>;
13
+ /** All retained receipts, oldest → newest. */
14
+ snapshot(): readonly Receipt[];
15
+ record(input: ReceiptInput): Promise<Receipt>;
16
+ /**
17
+ * Attach a unit outcome to matching receipts that do not have one yet
18
+ * (first outcome wins). Returns how many receipts were updated; zero
19
+ * updates do not touch storage.
20
+ */
21
+ attachOutcome(ref: ReceiptRef, outcome: ReceiptOutcome): Promise<number>;
22
+ /**
23
+ * Stamps the unit that just opened onto the session's pending unit-less
24
+ * admission receipts (recorded in the awaited prompt hook, before the unit
25
+ * existed). After adoption the receipt carries the unitID, so outcomes
26
+ * attach to it like any unit-scoped receipt.
27
+ *
28
+ * One opened unit adopts ONE admission — the newest pending receipt. With
29
+ * several pending receipts (a prompt admitted but superseded before its
30
+ * unit ever opened), stamping all of them would attach this unit's outcome
31
+ * to foreign admission decisions; the older receipts stay pending instead.
32
+ */
33
+ adoptUnit(sessionID: string, unitID: string): Promise<number>;
34
+ }
35
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/state/receipts/store.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,cAAc,EAEd,eAAe,EAChB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC;AAED,qBAAa,YAAY;;IAIX,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,eAAe;IAErD,qFAAqF;IAC/E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,8CAA8C;IAC9C,QAAQ,IAAI,SAAS,OAAO,EAAE;IAIxB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BnD;;;;OAIG;IACG,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB9E;;;;;;;;;;OAUG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAyBpE"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Bounded receipt store (ADP-030). Receipts live in a ring capped at
3
+ * `MAX_RECEIPTS` (newest kept, oldest evicted) and persist through the
4
+ * storage seam on every mutation. Ids are monotonic across restarts (they
5
+ * continue from the persisted maximum) so a receipt can always be told apart
6
+ * from its neighbors. Write failures propagate to the caller — the wiring
7
+ * layer's fail-open wrapper decides how to degrade (ADP-031) — and the
8
+ * in-memory ring is only advanced after a successful write, so memory and
9
+ * disk never diverge.
10
+ */
11
+ import { boundDecision, boundText } from "./bound.js";
12
+ import { parseReceiptsPayload } from "./parse.js";
13
+ import { MAX_RECEIPTS, RECEIPTS_VERSION } from "./types.js";
14
+ export class ReceiptStore {
15
+ storage;
16
+ #receipts = [];
17
+ #counter = 0;
18
+ constructor(storage) {
19
+ this.storage = storage;
20
+ }
21
+ /** Rebuild from storage (restart behavior). A read failure yields an empty store. */
22
+ async load() {
23
+ let raw;
24
+ try {
25
+ raw = await this.storage.read();
26
+ }
27
+ catch {
28
+ this.#receipts = [];
29
+ return;
30
+ }
31
+ const parsed = parseReceiptsPayload(raw);
32
+ this.#receipts = parsed;
33
+ this.#counter = parsed.reduce((max, receipt) => Math.max(max, receipt.id), 0);
34
+ }
35
+ /** All retained receipts, oldest → newest. */
36
+ snapshot() {
37
+ return this.#receipts;
38
+ }
39
+ async record(input) {
40
+ // A receipt with no session can never be attributed to anything, and the
41
+ // read path drops empty identifiers — persisting one would make it vanish
42
+ // across a restart. Throw instead; the wiring layer fail-open-catches.
43
+ if (input.sessionID.trim() === "") {
44
+ throw new Error("invalid receipt: sessionID must be a non-empty string");
45
+ }
46
+ const id = this.#counter + 1;
47
+ const receipt = {
48
+ id,
49
+ at: input.at,
50
+ // Identifiers are bounded with the same bound the read path applies, so
51
+ // what is persisted is exactly what comes back (types.ts invariant).
52
+ sessionID: boundText(input.sessionID),
53
+ ...(input.unitID !== undefined ? { unitID: boundText(input.unitID) } : {}),
54
+ ...(input.tier !== undefined ? { tier: input.tier } : {}),
55
+ decision: boundDecision(input.decision),
56
+ };
57
+ const next = this.#receipts.length >= MAX_RECEIPTS
58
+ ? [...this.#receipts.slice(1 - MAX_RECEIPTS), receipt]
59
+ : [...this.#receipts, receipt];
60
+ // Persist BEFORE committing memory: a write failure must leave memory and
61
+ // disk consistent (the caller decides how to fail open).
62
+ await this.#persist(next);
63
+ this.#receipts = next;
64
+ this.#counter = id;
65
+ return receipt;
66
+ }
67
+ /**
68
+ * Attach a unit outcome to matching receipts that do not have one yet
69
+ * (first outcome wins). Returns how many receipts were updated; zero
70
+ * updates do not touch storage.
71
+ */
72
+ async attachOutcome(ref, outcome) {
73
+ let updated = 0;
74
+ const next = this.#receipts.map((receipt) => {
75
+ if (receipt.outcome !== undefined)
76
+ return receipt;
77
+ if (receipt.sessionID !== ref.sessionID)
78
+ return receipt;
79
+ const matches = ref.unitID !== undefined ? receipt.unitID === ref.unitID : receipt.unitID === undefined;
80
+ if (!matches)
81
+ return receipt;
82
+ updated++;
83
+ return { ...receipt, outcome };
84
+ });
85
+ if (updated === 0)
86
+ return 0;
87
+ await this.#persist(next);
88
+ this.#receipts = next;
89
+ return updated;
90
+ }
91
+ /**
92
+ * Stamps the unit that just opened onto the session's pending unit-less
93
+ * admission receipts (recorded in the awaited prompt hook, before the unit
94
+ * existed). After adoption the receipt carries the unitID, so outcomes
95
+ * attach to it like any unit-scoped receipt.
96
+ *
97
+ * One opened unit adopts ONE admission — the newest pending receipt. With
98
+ * several pending receipts (a prompt admitted but superseded before its
99
+ * unit ever opened), stamping all of them would attach this unit's outcome
100
+ * to foreign admission decisions; the older receipts stay pending instead.
101
+ */
102
+ async adoptUnit(sessionID, unitID) {
103
+ let target;
104
+ this.#receipts.forEach((receipt, index) => {
105
+ if (receipt.unitID !== undefined || receipt.outcome !== undefined)
106
+ return;
107
+ if (receipt.sessionID !== sessionID)
108
+ return;
109
+ target = index;
110
+ });
111
+ if (target === undefined)
112
+ return 0;
113
+ const at = target;
114
+ const next = this.#receipts.map((receipt, index) => index === at ? { ...receipt, unitID } : receipt);
115
+ await this.#persist(next);
116
+ this.#receipts = next;
117
+ return 1;
118
+ }
119
+ /** Writes the given next state; the caller commits memory only on success. */
120
+ async #persist(receipts) {
121
+ const payload = {
122
+ version: RECEIPTS_VERSION,
123
+ receipts,
124
+ };
125
+ await this.storage.write(payload);
126
+ }
127
+ }
128
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/state/receipts/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Decision receipts (ADP-030): small bounded local records explaining why
3
+ * Adaptive made each decision. Receipts exist for explainability, debugging,
4
+ * tests, and a future outcome-learning policy — never injected into prompts,
5
+ * never leaving the machine. Retention is bounded (oldest evicted).
6
+ */
7
+ import type { Decision } from "../../core/scheduler/types.js";
8
+ import type { TierName } from "../../core/tier-policy/types.js";
9
+ import type { InterruptReason } from "../../core/work-unit/interruption.js";
10
+ import type { FailureCategory } from "../../health/classifier/types.js";
11
+ export declare const RECEIPTS_KEY = "coool.adaptive/receipts";
12
+ export declare const RECEIPTS_VERSION = 1;
13
+ /** Product bound — not a user knob. The ring keeps the newest receipts. */
14
+ export declare const MAX_RECEIPTS = 200;
15
+ /**
16
+ * Every free-text string stored in a receipt is truncated to this bound
17
+ * before persisting (and re-truncated on read). Boundedness is the
18
+ * no-secrets invariant: prompts, error bodies, and credentials have no
19
+ * field to live in and no room to hide in.
20
+ */
21
+ export declare const MAX_RECEIPT_TEXT = 128;
22
+ export interface ReceiptMeta {
23
+ /** Decision timestamp (adapter clock, ms epoch). */
24
+ readonly at: number;
25
+ readonly sessionID: string;
26
+ readonly unitID?: string | undefined;
27
+ /** Required tier when routing named one (pins carry no tier). */
28
+ readonly tier?: TierName | undefined;
29
+ }
30
+ export interface ReceiptInput extends ReceiptMeta {
31
+ /** The decision exactly as the scheduler/mode wrapper produced it. */
32
+ readonly decision: Decision;
33
+ }
34
+ /**
35
+ * Unit outcome attached after termination. Structured vocabulary only —
36
+ * never the raw error text (ADP-030: no secrets, bounded records).
37
+ */
38
+ export type ReceiptOutcome = {
39
+ readonly status: "succeeded";
40
+ } | {
41
+ readonly status: "failed";
42
+ readonly category: FailureCategory;
43
+ } | {
44
+ readonly status: "interrupted";
45
+ readonly reason: InterruptReason;
46
+ };
47
+ export interface Receipt extends ReceiptMeta {
48
+ /** Monotonic id assigned by the store; continues across restarts. */
49
+ readonly id: number;
50
+ readonly decision: Decision;
51
+ readonly outcome?: ReceiptOutcome;
52
+ }
53
+ export interface ReceiptsPayload {
54
+ readonly version: typeof RECEIPTS_VERSION;
55
+ readonly receipts: readonly Receipt[];
56
+ }
57
+ /** Storage seam — the adapter binds `RECEIPTS_KEY` to `ctx.storage`. */
58
+ export interface ReceiptsStorage {
59
+ read(): Promise<unknown>;
60
+ write(payload: ReceiptsPayload): Promise<void>;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/state/receipts/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAEvE,eAAO,MAAM,YAAY,4BAA4B,CAAA;AACrD,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,2EAA2E;AAC3E,eAAO,MAAM,YAAY,MAAM,CAAA;AAC/B;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,MAAM,CAAA;AAEnC,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CACrC;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAA;AAExE,MAAM,WAAW,OAAQ,SAAQ,WAAW;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,gBAAgB,CAAA;IACzC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CACtC;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/C"}
@@ -0,0 +1,12 @@
1
+ export const RECEIPTS_KEY = "coool.adaptive/receipts";
2
+ export const RECEIPTS_VERSION = 1;
3
+ /** Product bound — not a user knob. The ring keeps the newest receipts. */
4
+ export const MAX_RECEIPTS = 200;
5
+ /**
6
+ * Every free-text string stored in a receipt is truncated to this bound
7
+ * before persisting (and re-truncated on read). Boundedness is the
8
+ * no-secrets invariant: prompts, error bodies, and credentials have no
9
+ * field to live in and no room to hide in.
10
+ */
11
+ export const MAX_RECEIPT_TEXT = 128;
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/state/receipts/types.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CAAA;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AACjC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;AAC/B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { parseSessionModesPayload, isValidSessionID } from "./parse.js";
2
+ export { SessionModeStore } from "./store.js";
3
+ export { SESSION_MODES_KEY, SESSION_MODES_VERSION, MAX_SESSION_MODE_RECORDS, MAX_SESSION_ID_LENGTH, } from "./types.js";
4
+ export type { SessionModeRecord, SessionModesPayload, SessionModeSetResult, SessionModesStorage, } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/state/session-modes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { parseSessionModesPayload, isValidSessionID } from "./parse.js";
2
+ export { SessionModeStore } from "./store.js";
3
+ export { SESSION_MODES_KEY, SESSION_MODES_VERSION, MAX_SESSION_MODE_RECORDS, MAX_SESSION_ID_LENGTH, } from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/state/session-modes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { SessionModeRecord } from "./types.js";
2
+ /**
3
+ * A non-empty bounded session identifier. Unlike the health parser's provider
4
+ * identifiers (truncated on read), an over-long sessionID is dropped: the id
5
+ * is a host identity, not a label, and no real session id exceeds the bound.
6
+ */
7
+ export declare function isValidSessionID(raw: unknown): raw is string;
8
+ export declare function parseSessionModesPayload(raw: unknown): SessionModeRecord[];
9
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/state/session-modes/parse.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAUnD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAE5D;AAoBD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAgB1E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Read-side parsing for persisted session-mode overrides. Total like every
3
+ * `state/` parser: it accepts `unknown` and returns typed records, dropping
4
+ * anything invalid — a corrupted file can never take the plugin down
5
+ * (ADP-031). A partially corrupted payload keeps its good entries.
6
+ */
7
+ import { OPERATING_MODES } from "../../core/scheduler/types.js";
8
+ import { MAX_SESSION_ID_LENGTH, SESSION_MODES_VERSION } from "./types.js";
9
+ function isRecord(value) {
10
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11
+ }
12
+ function isFiniteNumber(raw) {
13
+ return typeof raw === "number" && Number.isFinite(raw);
14
+ }
15
+ /**
16
+ * A non-empty bounded session identifier. Unlike the health parser's provider
17
+ * identifiers (truncated on read), an over-long sessionID is dropped: the id
18
+ * is a host identity, not a label, and no real session id exceeds the bound.
19
+ */
20
+ export function isValidSessionID(raw) {
21
+ return typeof raw === "string" && raw.length > 0 && raw.length <= MAX_SESSION_ID_LENGTH;
22
+ }
23
+ function parseSessionID(raw) {
24
+ return isValidSessionID(raw) ? raw : undefined;
25
+ }
26
+ function parseMode(raw) {
27
+ if (typeof raw !== "string")
28
+ return undefined;
29
+ return OPERATING_MODES.includes(raw) ? raw : undefined;
30
+ }
31
+ function parseRecord(raw) {
32
+ if (!isRecord(raw))
33
+ return undefined;
34
+ const sessionID = parseSessionID(raw["sessionID"]);
35
+ const mode = parseMode(raw["mode"]);
36
+ const updatedAt = raw["updatedAt"];
37
+ if (sessionID === undefined || mode === undefined || !isFiniteNumber(updatedAt))
38
+ return undefined;
39
+ return { sessionID, mode, updatedAt };
40
+ }
41
+ export function parseSessionModesPayload(raw) {
42
+ if (!isRecord(raw))
43
+ return [];
44
+ if (raw["version"] !== SESSION_MODES_VERSION)
45
+ return [];
46
+ const list = raw["records"];
47
+ if (!Array.isArray(list))
48
+ return [];
49
+ // A hostile or duplicated payload can carry the same session twice; the
50
+ // most recently updated record wins so `get` is not order-dependent.
51
+ const bySession = new Map();
52
+ for (const entry of list.slice(0, 512)) {
53
+ const record = parseRecord(entry);
54
+ if (record === undefined)
55
+ continue;
56
+ const kept = bySession.get(record.sessionID);
57
+ if (kept === undefined || record.updatedAt > kept.updatedAt)
58
+ bySession.set(record.sessionID, record);
59
+ }
60
+ return [...bySession.values()];
61
+ }
62
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/state/session-modes/parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGzE,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,qBAAqB,CAAA;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;AAChD,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC7C,OAAQ,eAAqC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAqB,CAAC,CAAC,CAAC,SAAS,CAAA;AAClG,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IACpC,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAA;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACnC,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,CAAA;IAClC,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IACjG,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAC7B,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,qBAAqB;QAAE,OAAO,EAAE,CAAA;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;IAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IACnC,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAA;IACtD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAClC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC5C,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YACzD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;AAChC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { OperatingMode } from "../../core/scheduler/types.js";
2
+ import type { SessionModeRecord, SessionModesStorage } from "./types.js";
3
+ export declare class SessionModeStore {
4
+ #private;
5
+ private readonly storage;
6
+ private readonly clock;
7
+ constructor(storage: SessionModesStorage, clock: () => number);
8
+ /** Rebuild from storage (restart behavior). A read failure yields an empty store. */
9
+ load(): Promise<void>;
10
+ /** All retained records. */
11
+ snapshot(): readonly SessionModeRecord[];
12
+ /** The session's override, or `null` when it follows the global mode. */
13
+ get(sessionID: string): OperatingMode | null;
14
+ /**
15
+ * Set (or with `null`, remove) one session's override. The bound keeps the
16
+ * most recently updated records — overrides for long-gone sessions matter
17
+ * less than the ones being actively steered.
18
+ */
19
+ set(sessionID: string, mode: OperatingMode | null): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/state/session-modes/store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAuB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAG7F,qBAAa,gBAAgB;;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,MAAM,MAAM;IAGtC,qFAAqF;IAC/E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,4BAA4B;IAC5B,QAAQ,IAAI,SAAS,iBAAiB,EAAE;IAIxC,yEAAyE;IACzE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAI5C;;;;OAIG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAwBxE"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Bounded per-session operating-mode override store. Keeps the most recently
3
+ * updated records (bounded, least-recently-updated evicted) and persists on
4
+ * every change. As everywhere else in `state/`, memory is only advanced after
5
+ * a successful write, so memory and disk never diverge; write failures
6
+ * propagate to the caller — the wiring layer's fail-open wrapper decides how
7
+ * to degrade (ADP-031).
8
+ */
9
+ import { parseSessionModesPayload, isValidSessionID } from "./parse.js";
10
+ import { MAX_SESSION_ID_LENGTH, MAX_SESSION_MODE_RECORDS, SESSION_MODES_VERSION } from "./types.js";
11
+ import { OPERATING_MODES } from "../../core/scheduler/types.js";
12
+ export class SessionModeStore {
13
+ storage;
14
+ clock;
15
+ #records = [];
16
+ constructor(storage, clock) {
17
+ this.storage = storage;
18
+ this.clock = clock;
19
+ }
20
+ /** Rebuild from storage (restart behavior). A read failure yields an empty store. */
21
+ async load() {
22
+ let raw;
23
+ try {
24
+ raw = await this.storage.read();
25
+ }
26
+ catch {
27
+ this.#records = [];
28
+ return;
29
+ }
30
+ this.#records = parseSessionModesPayload(raw);
31
+ }
32
+ /** All retained records. */
33
+ snapshot() {
34
+ return this.#records;
35
+ }
36
+ /** The session's override, or `null` when it follows the global mode. */
37
+ get(sessionID) {
38
+ return this.#records.find((record) => record.sessionID === sessionID)?.mode ?? null;
39
+ }
40
+ /**
41
+ * Set (or with `null`, remove) one session's override. The bound keeps the
42
+ * most recently updated records — overrides for long-gone sessions matter
43
+ * less than the ones being actively steered.
44
+ */
45
+ async set(sessionID, mode) {
46
+ // Defensive re-validation at the persistence boundary: the RPC handler
47
+ // validates first and reports named errors; these guards keep malformed
48
+ // in-process callers from persisting junk.
49
+ if (!isValidSessionID(sessionID)) {
50
+ throw new Error(`sessionID must be a non-empty string of at most ${String(MAX_SESSION_ID_LENGTH)} characters`);
51
+ }
52
+ if (mode !== null && !OPERATING_MODES.includes(mode)) {
53
+ throw new Error(`mode must be one of ${OPERATING_MODES.join(", ")} or null`);
54
+ }
55
+ const updatedAt = this.clock();
56
+ const kept = this.#records.filter((record) => record.sessionID !== sessionID);
57
+ const next = mode === null
58
+ ? kept
59
+ : bound([...kept, { sessionID, mode, updatedAt }], MAX_SESSION_MODE_RECORDS);
60
+ // Persist BEFORE committing memory: a write failure must leave memory
61
+ // and disk consistent (the caller decides how to fail open).
62
+ const payload = { version: SESSION_MODES_VERSION, records: next };
63
+ await this.storage.write(payload);
64
+ this.#records = next;
65
+ }
66
+ }
67
+ /** Keep the newest records when over the cap. */
68
+ function bound(records, max) {
69
+ if (records.length <= max)
70
+ return records;
71
+ return [...records].sort((left, right) => right.updatedAt - left.updatedAt).slice(0, max);
72
+ }
73
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/state/session-modes/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Persisted per-session operating-mode overrides (ADP-054). The operating mode
3
+ * is otherwise a global setting, but supervision decisions are made per
4
+ * session — the override lets one session run under a different mode without
5
+ * touching the global default. Records persist through the storage seam like
6
+ * every other state: the host's TUI-mode plugin reconciliation can serve RPC
7
+ * from an instance whose event-pump hooks live on another instance, and a
8
+ * restart must not silently drop explicit user intent.
9
+ */
10
+ import type { OperatingMode } from "../../core/scheduler/types.js";
11
+ export declare const SESSION_MODES_KEY = "coool.adaptive/session-modes";
12
+ export declare const SESSION_MODES_VERSION = 1;
13
+ /** Product bound — not a user knob. Keeps the most recently updated records. */
14
+ export declare const MAX_SESSION_MODE_RECORDS = 512;
15
+ /** A session id beyond this bound is not a real host identifier. */
16
+ export declare const MAX_SESSION_ID_LENGTH = 128;
17
+ export interface SessionModeRecord {
18
+ readonly sessionID: string;
19
+ readonly mode: OperatingMode;
20
+ readonly updatedAt: number;
21
+ }
22
+ export interface SessionModesPayload {
23
+ readonly version: typeof SESSION_MODES_VERSION;
24
+ readonly records: readonly SessionModeRecord[];
25
+ }
26
+ /**
27
+ * A successful override write. Mirrors the settings patch-result convention:
28
+ * validation failures are per-field errors, internal failures throw (the
29
+ * RPC handler degrades them fail-open).
30
+ */
31
+ export type SessionModeSetResult = {
32
+ readonly ok: true;
33
+ } | {
34
+ readonly ok: false;
35
+ readonly errors: readonly string[];
36
+ };
37
+ /** Storage seam — the adapter binds `SESSION_MODES_KEY` to `ctx.storage`. */
38
+ export interface SessionModesStorage {
39
+ read(): Promise<unknown>;
40
+ write(payload: SessionModesPayload): Promise<void>;
41
+ }
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/state/session-modes/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAElE,eAAO,MAAM,iBAAiB,iCAAiC,CAAA;AAC/D,eAAO,MAAM,qBAAqB,IAAI,CAAA;AACtC,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAExC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,qBAAqB,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAC/C;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC9B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAA;AAEpF,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnD"}
@@ -0,0 +1,7 @@
1
+ export const SESSION_MODES_KEY = "coool.adaptive/session-modes";
2
+ export const SESSION_MODES_VERSION = 1;
3
+ /** Product bound — not a user knob. Keeps the most recently updated records. */
4
+ export const MAX_SESSION_MODE_RECORDS = 512;
5
+ /** A session id beyond this bound is not a real host identifier. */
6
+ export const MAX_SESSION_ID_LENGTH = 128;
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/state/session-modes/types.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,iBAAiB,GAAG,8BAA8B,CAAA;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAA;AACtC,gFAAgF;AAChF,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAC3C,oEAAoE;AACpE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { defaultSettings, applyPatch, migrateSettings, parseAgentTiers, parseMode, parsePin, parseTierLists, } from "./parse.js";
2
+ export { SettingsStore } from "./store.js";
3
+ export { MAX_AGENT_TIERS, MAX_TIER_RESOURCES, SETTINGS_KEY, SETTINGS_VERSION } from "./types.js";
4
+ export type { PatchResult, SettingsPatch, SettingsStorage, SettingsV1 } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/state/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,eAAe,EACf,SAAS,EACT,QAAQ,EACR,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAChG,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { defaultSettings, applyPatch, migrateSettings, parseAgentTiers, parseMode, parsePin, parseTierLists, } from "./parse.js";
2
+ export { SettingsStore } from "./store.js";
3
+ export { MAX_AGENT_TIERS, MAX_TIER_RESOURCES, SETTINGS_KEY, SETTINGS_VERSION } from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/state/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,eAAe,EACf,SAAS,EACT,QAAQ,EACR,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,34 @@
1
+ import type { OperatingMode } from "../../core/scheduler/types.js";
2
+ import type { TierName } from "../../core/tier-policy/types.js";
3
+ import type { ModelRef } from "../../core/work-unit/types.js";
4
+ import type { SettingsV1 } from "./types.js";
5
+ export declare function parseMode(raw: unknown): OperatingMode | undefined;
6
+ export declare function parseTierLists(raw: unknown): Readonly<Record<TierName, readonly ModelRef[]>> | undefined;
7
+ export declare function parseModelRef(raw: unknown): ModelRef | undefined;
8
+ export declare function parsePin(raw: unknown): ModelRef | null | undefined;
9
+ export declare function parseAgentTiers(raw: unknown): Readonly<Record<string, TierName>> | undefined;
10
+ /** Settings with nothing configured: OBSERVE, empty tiers, no pin (ADP-029/032). */
11
+ export declare function defaultSettings(): SettingsV1;
12
+ /**
13
+ * Migration-on-read. `undefined`/absent record → defaults (first install);
14
+ * versionless (v0 draft) and v1 records are validated field-wise with
15
+ * defaults for unusable fields; a record written by a NEWER version is
16
+ * returned as defaults rather than guessed at (and is only re-persisted once
17
+ * the user changes something, which stamps the current version).
18
+ */
19
+ export declare function migrateSettings(raw: unknown): SettingsV1;
20
+ /**
21
+ * Validate a patch against current settings. The patch is WIRE input (unknown
22
+ * by contract — surfaces send untrusted JSON over RPC; the SettingsPatch type
23
+ * documents the expected shape, the field parsers enforce it). Invalid fields
24
+ * collect error strings (at most one per field, five fields); a valid patch
25
+ * produces a NEW settings object (inputs are never mutated).
26
+ */
27
+ export declare function applyPatch(current: SettingsV1, patch: unknown): {
28
+ ok: true;
29
+ settings: SettingsV1;
30
+ } | {
31
+ ok: false;
32
+ errors: string[];
33
+ };
34
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/state/settings/parse.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAGlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAyB5C,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAGjE;AAWD,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,GACX,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC,CAAC,GAAG,SAAS,CAO7D;AAWD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAYhE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,CAGlE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAa5F;AAmED,oFAAoF;AACpF,wBAAgB,eAAe,IAAI,UAAU,CAS5C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAOxD;AAWD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,OAAO,GACb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA+CtE"}