@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,176 @@
1
+ /**
2
+ * Main-menu and mode-menu view models for `/adaptive` (ADP-033): pure data
3
+ * that the controller feeds into `ui.dialog.select`. Descriptions are dynamic
4
+ * where state makes them more informative (health counters, tier contents).
5
+ */
6
+ import { OPERATING_MODES } from "../../core/scheduler/types.js";
7
+ import { TIERS } from "../../core/tier-policy/types.js";
8
+ import { resourceLabel } from "./tiers.js";
9
+ export const MAIN_MENU_ITEMS = ["status", "models", "mode", "tier", "pin", "receipts"];
10
+ /** "3 resources · 1 windowed" — the status line under the menu entry. */
11
+ export function statusSummary(status) {
12
+ if (status === undefined)
13
+ return "how every configured model is doing";
14
+ const total = TIERS.reduce((sum, tier) => sum + status.tiers[tier].length, 0);
15
+ if (total === 0)
16
+ return "no models configured yet";
17
+ const windowed = TIERS.reduce((sum, tier) => sum + status.tiers[tier].filter((entry) => entry.windowed).length, 0);
18
+ const windowedNote = windowed === 0 ? "" : ` · ${String(windowed)} windowed`;
19
+ return `${String(total)} resource${total === 1 ? "" : "s"}${windowedNote}`;
20
+ }
21
+ /** "quick: 1 · standard: 0 · advanced: 2" — what is configured where. */
22
+ export function modelsSummary(settings) {
23
+ const parts = TIERS.map((tier) => `${tier}: ${String(settings.tiers[tier].length)}`);
24
+ return parts.join(" · ");
25
+ }
26
+ function tierRequestDescription(tierRequest) {
27
+ if (tierRequest === undefined)
28
+ return "pin a tier for the current session";
29
+ if (tierRequest === null)
30
+ return "not pinned — the routing ladder decides";
31
+ return `pinned to ${tierRequest} — steers this session`;
32
+ }
33
+ function modeMarker(mode, input) {
34
+ if (mode === input.override)
35
+ return "override";
36
+ if (mode === input.effective)
37
+ return "current";
38
+ return undefined;
39
+ }
40
+ export function mainMenuOptions(settings, status, tierRequest) {
41
+ const optionFor = (item) => {
42
+ switch (item) {
43
+ case "status":
44
+ return {
45
+ title: "Status",
46
+ value: item,
47
+ description: statusSummary(status),
48
+ };
49
+ case "models":
50
+ return {
51
+ title: "Models",
52
+ value: item,
53
+ description: modelsSummary(settings),
54
+ };
55
+ case "mode":
56
+ return {
57
+ title: "Mode",
58
+ value: item,
59
+ description: `currently ${settings.mode}`,
60
+ };
61
+ case "tier":
62
+ return {
63
+ title: "Tier",
64
+ value: item,
65
+ description: tierRequestDescription(tierRequest),
66
+ };
67
+ case "pin":
68
+ return {
69
+ title: "Pin",
70
+ value: item,
71
+ description: settings.pin === null
72
+ ? "force one resource"
73
+ : `pinned to ${resourceLabel(settings.pin)}`,
74
+ };
75
+ case "receipts":
76
+ return { title: "Receipts", value: item, description: "why each turn ran the model it ran" };
77
+ }
78
+ };
79
+ return MAIN_MENU_ITEMS.map(optionFor);
80
+ }
81
+ export function modeOptions(current) {
82
+ return OPERATING_MODES.map((mode) => ({
83
+ title: mode === current ? `${mode} (current)` : mode,
84
+ value: mode,
85
+ description: modeDescription(mode),
86
+ }));
87
+ }
88
+ /** What one mode does — shared by the global and the per-session menus. */
89
+ function modeDescription(mode) {
90
+ switch (mode) {
91
+ case "off":
92
+ return "Adaptive does nothing";
93
+ case "observe":
94
+ return "Record decisions without applying them";
95
+ case "active":
96
+ return "Apply routing and recovery decisions";
97
+ }
98
+ }
99
+ /**
100
+ * The first select of the in-session mode flow (ADP-054): ask which mode to
101
+ * steer before showing any mode list — the global default or this session's
102
+ * override. Each row names the current value so the user can tell at a
103
+ * glance which side needs changing.
104
+ */
105
+ export function modeTargetOptions(global, effective) {
106
+ return [
107
+ {
108
+ title: "Global mode…",
109
+ description: `applies to every session without an override (now ${global})`,
110
+ value: "global",
111
+ },
112
+ {
113
+ title: "This session…",
114
+ description: `override for this session only (now ${effective})`,
115
+ value: "session",
116
+ },
117
+ ];
118
+ }
119
+ /**
120
+ * The per-session mode menu (ADP-054): first "Follow global" (clearing the
121
+ * override), then every mode. An existing override is marked "(override)" —
122
+ * distinct from the effective mode's "(current)" — so the user can tell a
123
+ * set override apart from a session merely inheriting the global mode.
124
+ */
125
+ export function sessionModeOptions(input) {
126
+ const options = [
127
+ {
128
+ title: `Follow global (${input.global})`,
129
+ description: "clear this session's override",
130
+ value: { kind: "global" },
131
+ },
132
+ ];
133
+ for (const mode of OPERATING_MODES) {
134
+ const marker = modeMarker(mode, input);
135
+ options.push({
136
+ title: marker === undefined ? mode : `${mode} (${marker})`,
137
+ value: { kind: "mode", mode },
138
+ description: modeDescription(mode),
139
+ });
140
+ }
141
+ return options;
142
+ }
143
+ /** What one tier is for — shared by the tier editor and the per-session menu. */
144
+ function tierDescription(tier) {
145
+ switch (tier) {
146
+ case "quick":
147
+ return "routine edits, mechanical steps";
148
+ case "standard":
149
+ return "the default";
150
+ case "advanced":
151
+ return "multi-step design, broad refactors";
152
+ }
153
+ }
154
+ /**
155
+ * The per-session tier menu (ADP-055): first "Follow routing ladder" (clearing
156
+ * the request), then every tier. A pinned request is marked "(pinned)" so the
157
+ * user can tell the sticky request apart from the ordinary ladder.
158
+ */
159
+ export function sessionTierOptions(input) {
160
+ const options = [
161
+ {
162
+ title: "Follow routing ladder",
163
+ description: "clear this session's tier request",
164
+ value: { kind: "ladder" },
165
+ },
166
+ ];
167
+ for (const tier of TIERS) {
168
+ options.push({
169
+ title: tier === input.pinned ? `${tier} (pinned)` : tier,
170
+ value: { kind: "tier", tier },
171
+ description: tierDescription(tier),
172
+ });
173
+ }
174
+ return options;
175
+ }
176
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/ui/tui/menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared option shapes for the dialog-driven TUI. These mirror the subset of
3
+ * the host `ui.dialog.select` contract the Adaptive flows use; `tui.ts` adapts
4
+ * them to the real plugin types (structural superset).
5
+ */
6
+ export interface SelectOption<Value> {
7
+ readonly title: string;
8
+ readonly value: Value;
9
+ readonly description?: string;
10
+ }
11
+ export interface SelectSpec<Value> {
12
+ readonly title: string;
13
+ readonly placeholder?: string;
14
+ readonly options: readonly SelectOption<Value>[];
15
+ readonly current?: Value;
16
+ readonly search?: (query: string, options: readonly SelectOption<Value>[]) => readonly SelectOption<Value>[];
17
+ }
18
+ /** Friendly one-line rendering of an API failure for toasts. */
19
+ export declare function errorText(error: unknown): string;
20
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/ui/tui/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,KAAK;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,UAAU,CAAC,KAAK;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,CAAC,KAAK,CAAC,EAAE,CAAA;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,YAAY,CAAC,KAAK,CAAC,EAAE,KACpC,SAAS,YAAY,CAAC,KAAK,CAAC,EAAE,CAAA;CACpC;AAED,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAchD"}
@@ -0,0 +1,17 @@
1
+ /** Friendly one-line rendering of an API failure for toasts. */
2
+ export function errorText(error) {
3
+ if (error instanceof Error)
4
+ return error.message;
5
+ // RPC failures surface as plain objects ({type, message}); String() would
6
+ // render "[object Object]" and throw away the only diagnostic the user gets.
7
+ if (typeof error === "object" && error !== null) {
8
+ const message = error.message;
9
+ if (typeof message === "string" && message.length > 0)
10
+ return message;
11
+ // JSON.stringify throws on BigInt values, which host payloads can carry;
12
+ // stringify them as strings instead of losing the whole diagnostic.
13
+ return JSON.stringify(error, (_, value) => typeof value === "bigint" ? String(value) : value);
14
+ }
15
+ return String(error);
16
+ }
17
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/ui/tui/options.ts"],"names":[],"mappings":"AAsBA,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IAChD,0EAA0E;IAC1E,6EAA6E;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,OAAO,GAAI,KAA+B,CAAC,OAAO,CAAA;QACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAA;QACrE,yEAAyE;QACzE,oEAAoE;QACpE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAc,EAAE,EAAE,CACjD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAClD,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Receipt view models (ADP-030/033): one-line summaries and bounded detail
3
+ * text for the `/adaptive` receipts browser. No secrets — receipt content is
4
+ * already bounded at write time; this layer only formats.
5
+ */
6
+ import type { Decision } from "../../core/scheduler/types.js";
7
+ import type { Receipt, ReceiptOutcome } from "../../state/receipts/types.js";
8
+ export declare function summarizeDecision(decision: Decision): string;
9
+ export declare function outcomeLine(outcome: ReceiptOutcome | undefined): string;
10
+ export declare function receiptLine(receipt: Receipt): string;
11
+ export declare function receiptDetail(receipt: Receipt, now?: number): string;
12
+ /** "just now" / "2m ago" / "3h ago" / "5d ago" for a receipt timestamp. */
13
+ export declare function relativeTime(at: number, now: number): string;
14
+ /**
15
+ * Plain-language explanation for a receipt, keyed on the finite reason
16
+ * vocabulary. Unknown reasons fall through to the raw summary.
17
+ */
18
+ export declare function whatHappened(receipt: Receipt): string;
19
+ /** Receipts shown per dialog page (bounded view). */
20
+ export declare const RECEIPTS_PAGE_SIZE = 20;
21
+ export declare function receiptPage(receipts: readonly Receipt[]): Receipt[];
22
+ //# sourceMappingURL=receipts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipts.d.ts","sourceRoot":"","sources":["../../../src/ui/tui/receipts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE5E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAqB5D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAKvE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAYhF;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAoBrD;AAmCD,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAEpC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAEnE"}
@@ -0,0 +1,109 @@
1
+ import { resourceLabel } from "./tiers.js";
2
+ export function summarizeDecision(decision) {
3
+ switch (decision.kind) {
4
+ case "apply": {
5
+ const tier = decision.tier === undefined ? "" : ` [${decision.tier}]`;
6
+ return `apply ${resourceLabel(decision.model)}${tier} (${decision.reason})`;
7
+ }
8
+ case "defer": {
9
+ const detail = decision.detail === undefined ? "" : ` — ${decision.detail}`;
10
+ return `defer: ${decision.reason}${detail}`;
11
+ }
12
+ case "park": {
13
+ const detail = decision.detail === undefined ? "" : ` — ${decision.detail}`;
14
+ return `park: ${decision.reason}${detail}`;
15
+ }
16
+ case "escalate": {
17
+ return `escalate ${decision.step} → ${resourceLabel(decision.target)} [${decision.tier}]`;
18
+ }
19
+ case "observe-only": {
20
+ return `observe: ${summarizeDecision(decision.would)}`;
21
+ }
22
+ }
23
+ }
24
+ export function outcomeLine(outcome) {
25
+ if (outcome === undefined)
26
+ return "pending";
27
+ if (outcome.status === "succeeded")
28
+ return "succeeded";
29
+ if (outcome.status === "failed")
30
+ return `failed (${outcome.category})`;
31
+ return `interrupted (${outcome.reason})`;
32
+ }
33
+ export function receiptLine(receipt) {
34
+ return `#${String(receipt.id)} ${summarizeDecision(receipt.decision)} — ${outcomeLine(receipt.outcome)}`;
35
+ }
36
+ export function receiptDetail(receipt, now = Date.now()) {
37
+ return [
38
+ `id: ${String(receipt.id)}`,
39
+ `when: ${relativeTime(receipt.at, now)} (${new Date(receipt.at).toISOString()})`,
40
+ `session: ${receipt.sessionID}`,
41
+ `unit: ${receipt.unitID ?? "-"}`,
42
+ `tier: ${receipt.tier ?? "-"}`,
43
+ `decision: ${summarizeDecision(receipt.decision)}`,
44
+ `outcome: ${outcomeLine(receipt.outcome)}`,
45
+ "",
46
+ `What happened: ${whatHappened(receipt)}`,
47
+ ].join("\n");
48
+ }
49
+ /** "just now" / "2m ago" / "3h ago" / "5d ago" for a receipt timestamp. */
50
+ export function relativeTime(at, now) {
51
+ const seconds = Math.max(0, Math.floor((now - at) / 1000));
52
+ if (seconds < 60)
53
+ return "just now";
54
+ const minutes = Math.floor(seconds / 60);
55
+ if (minutes < 60)
56
+ return `${String(minutes)}m ago`;
57
+ const hours = Math.floor(minutes / 60);
58
+ if (hours < 24)
59
+ return `${String(hours)}h ago`;
60
+ return `${String(Math.floor(hours / 24))}d ago`;
61
+ }
62
+ /**
63
+ * Plain-language explanation for a receipt, keyed on the finite reason
64
+ * vocabulary. Unknown reasons fall through to the raw summary.
65
+ */
66
+ export function whatHappened(receipt) {
67
+ const decision = receipt.decision;
68
+ switch (decision.kind) {
69
+ case "apply":
70
+ return (applyExplanation[decision.reason] ??
71
+ `Adaptive routed this turn to ${resourceLabel(decision.model)}.`);
72
+ case "defer":
73
+ return deferExplanation[decision.reason] ?? "Adaptive left the model choice to OpenCode.";
74
+ case "park":
75
+ return (parkExplanation[decision.reason] ??
76
+ "Adaptive could not route this turn and left it to OpenCode.");
77
+ case "escalate":
78
+ return `This turn needed stronger capability, so Adaptive moved it to ${resourceLabel(decision.target)}.`;
79
+ case "observe-only":
80
+ return "Adaptive is observing: this is what it would have done, without applying it.";
81
+ }
82
+ }
83
+ const applyExplanation = {
84
+ pin: "Adaptive routed to the resource you pinned.",
85
+ preferred: "Adaptive chose this resource: it is the preferred resource for the tier and was available.",
86
+ fallback: "The preferred resource was unavailable, so Adaptive moved the turn to the next resource in the tier.",
87
+ probe: "Adaptive sent this turn as a recovery probe after an outage, to check whether the resource works again.",
88
+ draining: "Adaptive routed to this resource while its provider was draining capacity.",
89
+ };
90
+ const deferExplanation = {
91
+ "routing-defer": "No routing rule applied to this turn, so Adaptive left the choice to OpenCode.",
92
+ "tier-not-configured": "The tier that would handle this turn has no models configured, so Adaptive left the choice to OpenCode.",
93
+ "adaptive-off": "Adaptive is switched off, so every turn runs on OpenCode's own choice.",
94
+ "pin-unverifiable": "The pinned resource could not be verified as available, so Adaptive left the choice to OpenCode.",
95
+ "escalation-ceiling": "This unit had already escalated as far as the escalation budget allows.",
96
+ "escalation-no-candidate": "No stronger resource was eligible to escalate to (unavailable, blocked, or not configured).",
97
+ };
98
+ const parkExplanation = {
99
+ "all-blocked": "Every resource in the tier is currently unavailable, so the turn ran without Adaptive routing.",
100
+ "no-candidates": "There are no models configured for this tier, so the turn ran without Adaptive routing.",
101
+ "no-compatible-resource": "No configured resource fits this turn's requirements, so the turn ran without Adaptive routing.",
102
+ "pin-blocked": "The pinned resource is unavailable and no fallback is allowed while pinned.",
103
+ };
104
+ /** Receipts shown per dialog page (bounded view). */
105
+ export const RECEIPTS_PAGE_SIZE = 20;
106
+ export function receiptPage(receipts) {
107
+ return receipts.slice(0, RECEIPTS_PAGE_SIZE);
108
+ }
109
+ //# sourceMappingURL=receipts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../../src/ui/tui/receipts.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG1C,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAA;YACrE,OAAO,SAAS,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAA;QAC7E,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;YAC3E,OAAO,UAAU,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,CAAA;QAC7C,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;YAC3E,OAAO,SAAS,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,CAAA;QAC5C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,OAAO,YAAY,QAAQ,CAAC,IAAI,MAAM,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAA;QAC3F,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,OAAO,YAAY,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAA;QACxD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAmC;IAC7D,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,WAAW,CAAA;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,WAAW,OAAO,CAAC,QAAQ,GAAG,CAAA;IACtE,OAAO,gBAAgB,OAAO,CAAC,MAAM,GAAG,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;AAC1G,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACtE,OAAO;QACL,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QAC3B,SAAS,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG;QAChF,YAAY,OAAO,CAAC,SAAS,EAAE;QAC/B,SAAS,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;QAChC,SAAS,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE;QAC9B,aAAa,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClD,YAAY,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1C,EAAE;QACF,kBAAkB,YAAY,CAAC,OAAO,CAAC,EAAE;KAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,EAAU,EAAE,GAAW;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAC1D,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,UAAU,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACxC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAA;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACtC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAA;IAC9C,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,OAAO,CAAA;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACjC,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,CACL,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACjC,gCAAgC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CACjE,CAAA;QACH,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,6CAA6C,CAAA;QAC3F,KAAK,MAAM;YACT,OAAO,CACL,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChC,6DAA6D,CAC9D,CAAA;QACH,KAAK,UAAU;YACb,OAAO,iEAAiE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAA;QAC3G,KAAK,cAAc;YACjB,OAAO,8EAA8E,CAAA;IACzF,CAAC;AACH,CAAC;AAED,MAAM,gBAAgB,GAA2B;IAC/C,GAAG,EAAE,6CAA6C;IAClD,SAAS,EACP,4FAA4F;IAC9F,QAAQ,EACN,sGAAsG;IACxG,KAAK,EACH,yGAAyG;IAC3G,QAAQ,EAAE,4EAA4E;CACvF,CAAA;AAED,MAAM,gBAAgB,GAA2B;IAC/C,eAAe,EAAE,gFAAgF;IACjG,qBAAqB,EACnB,yGAAyG;IAC3G,cAAc,EAAE,wEAAwE;IACxF,kBAAkB,EAChB,kGAAkG;IACpG,oBAAoB,EAAE,yEAAyE;IAC/F,yBAAyB,EACvB,6FAA6F;CAChG,CAAA;AAED,MAAM,eAAe,GAA2B;IAC9C,aAAa,EACX,gGAAgG;IAClG,eAAe,EACb,yFAAyF;IAC3F,wBAAwB,EACtB,iGAAiG;IACnG,aAAa,EAAE,6EAA6E;CAC7F,CAAA;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAEpC,MAAM,UAAU,WAAW,CAAC,QAA4B;IACtD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAC9C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { TierName } from "../../core/tier-policy/types.js";
2
+ import type { StatusSnapshot, TierResourceStatus } from "../../rpc/status.js";
3
+ /** Configured resources in tier order (quick → standard → advanced). */
4
+ export declare function healthEntries(snapshot: StatusSnapshot): {
5
+ tier: TierName;
6
+ status: TierResourceStatus;
7
+ }[];
8
+ /** "until 18:42" style wall-clock rendering of a window deadline. */
9
+ export declare function clockTime(until: number): string;
10
+ /** One plain status line for a resource: health, window, breaker, pin. */
11
+ export declare function statusLine(status: TierResourceStatus, pin: StatusSnapshot["pin"]): string;
12
+ /** The STATE column of the status table: window, breaker, pin markers. */
13
+ export declare function stateCell(status: TierResourceStatus, pin: StatusSnapshot["pin"]): string;
14
+ /**
15
+ * The whole inventory as a column-aligned table (header row first): models
16
+ * grouped in tier order (quick → standard → advanced), one row per model,
17
+ * columns padded to the widest cell so the grid reads at a glance. There is
18
+ * no per-resource selection step: the table IS the view.
19
+ */
20
+ export declare function statusTable(snapshot: StatusSnapshot): string[];
21
+ /** Empty-state copy for the status view when nothing is configured. */
22
+ export declare const STATUS_EMPTY_MESSAGE = "No models configured yet \u2014 open Models to add some.";
23
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/ui/tui/status.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAG7E,wEAAwE;AACxE,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,EAAE,CAMlD;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAOD,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,CAEzF;AAqBD,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAsB9D;AAED,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,6DAAwD,CAAA"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Status-view helpers (ADP-033): flatten the status snapshot into one page
3
+ * showing every configured model with its state, grouped by tier in priority
4
+ * order. Pure and deterministic; local wall-clock rendering is derived from
5
+ * the snapshot's own timestamps.
6
+ */
7
+ import { TIERS } from "../../core/tier-policy/types.js";
8
+ import { resourceLabel } from "./tiers.js";
9
+ /** Configured resources in tier order (quick → standard → advanced). */
10
+ export function healthEntries(snapshot) {
11
+ const entries = [];
12
+ for (const tier of TIERS) {
13
+ for (const status of snapshot.tiers[tier])
14
+ entries.push({ tier, status });
15
+ }
16
+ return entries;
17
+ }
18
+ /** "until 18:42" style wall-clock rendering of a window deadline. */
19
+ export function clockTime(until) {
20
+ const at = new Date(until);
21
+ const hours = String(at.getHours()).padStart(2, "0");
22
+ const minutes = String(at.getMinutes()).padStart(2, "0");
23
+ return `${hours}:${minutes}`;
24
+ }
25
+ function pinnedTo(ref, pin) {
26
+ if (pin === null)
27
+ return false;
28
+ return pin.providerID === ref.providerID && pin.id === ref.id && pin.variant === ref.variant;
29
+ }
30
+ /** One plain status line for a resource: health, window, breaker, pin. */
31
+ export function statusLine(status, pin) {
32
+ return `${resourceLabel(status.ref)} — ${status.health}${stateSuffix(status, pin)}`;
33
+ }
34
+ /** Everything after the health state: capacity usage, window, breaker, pin. */
35
+ function stateSuffix(status, pin) {
36
+ let suffix = "";
37
+ if (status.windowed) {
38
+ suffix +=
39
+ status.windowUntil === null
40
+ ? ", windowed (deadline unknown)"
41
+ : `, windowed until ${clockTime(status.windowUntil)}`;
42
+ }
43
+ if (status.usedPercent !== null) {
44
+ suffix += `, used ${String(status.usedPercent)}%`;
45
+ if (status.resetAt !== null)
46
+ suffix += `, resets ${clockTime(status.resetAt)}`;
47
+ }
48
+ if (status.breaker === "open")
49
+ suffix += ", breaker open";
50
+ else if (status.breaker === "half_open")
51
+ suffix += ", probing";
52
+ if (pinnedTo(status.ref, pin))
53
+ suffix += " (pinned)";
54
+ return suffix;
55
+ }
56
+ /** The STATE column of the status table: window, breaker, pin markers. */
57
+ export function stateCell(status, pin) {
58
+ return stateSuffix(status, pin).replace(/^[, ]+/, "") || "-";
59
+ }
60
+ /**
61
+ * The whole inventory as a column-aligned table (header row first): models
62
+ * grouped in tier order (quick → standard → advanced), one row per model,
63
+ * columns padded to the widest cell so the grid reads at a glance. There is
64
+ * no per-resource selection step: the table IS the view.
65
+ */
66
+ export function statusTable(snapshot) {
67
+ const header = ["MODEL", "TIER", "HEALTH", "STATE"];
68
+ const rows = healthEntries(snapshot).map(({ tier, status }) => [
69
+ resourceLabel(status.ref),
70
+ tier,
71
+ status.health,
72
+ stateCell(status, snapshot.pin),
73
+ ]);
74
+ if (rows.length === 0)
75
+ return [];
76
+ // Header and rows are built together, always four cells wide — the column
77
+ // index cannot be out of range.
78
+ const widths = header.map((cell, column) =>
79
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
80
+ Math.max(cell.length, ...rows.map((row) => row[column].length)));
81
+ const render = (cells) => cells
82
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
83
+ .map((cell, column) => cell.padEnd(widths[column]))
84
+ .join(" ")
85
+ .trimEnd();
86
+ return [render(header), ...rows.map(render)];
87
+ }
88
+ /** Empty-state copy for the status view when nothing is configured. */
89
+ export const STATUS_EMPTY_MESSAGE = "No models configured yet — open Models to add some.";
90
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/ui/tui/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Tier-editor view models (ADP-033): resource labels with clear health tags,
3
+ * model search over the real OpenCode model list, variant picking, and pure
4
+ * reorder/remove helpers. All functions are total and deterministic.
5
+ */
6
+ import type { ModelRef } from "../../core/work-unit/types.js";
7
+ import type { TierName } from "../../core/tier-policy/types.js";
8
+ import type { StatusSnapshot, TierResourceStatus } from "../../rpc/status.js";
9
+ import type { SettingsV1 } from "../../state/settings/index.js";
10
+ import type { PatchResult } from "../../state/settings/types.js";
11
+ import type { SelectOption } from "./options.js";
12
+ /** `provider/model` with an `@variant` suffix when pinned to one. */
13
+ export declare function resourceLabel(ref: ModelRef): string;
14
+ /**
15
+ * Unavailable-resource display: empty string when healthy, otherwise a
16
+ * bracketed, comma-separated tag list (health, breaker, window).
17
+ */
18
+ export declare function healthTag(status: TierResourceStatus | undefined): string;
19
+ export type TierEditorChoice = {
20
+ kind: "add";
21
+ } | {
22
+ kind: "resource";
23
+ index: number;
24
+ };
25
+ export declare function tierEditorOptions(settings: SettingsV1, tier: TierName, status: StatusSnapshot | undefined): SelectOption<TierEditorChoice>[];
26
+ export declare function tierMenuOptions(status: StatusSnapshot): SelectOption<TierName>[];
27
+ /** Structural summary of one real OpenCode model (built by the entry). */
28
+ export interface ModelSummary {
29
+ readonly providerID: string;
30
+ readonly modelID: string;
31
+ readonly name: string;
32
+ readonly variants: readonly string[];
33
+ }
34
+ export interface ModelPick {
35
+ providerID: string;
36
+ modelID: string;
37
+ }
38
+ export declare function modelMatches(info: ModelSummary, query: string): boolean;
39
+ export declare function modelPickerOptions(models: readonly ModelSummary[], query: string): SelectOption<ModelPick>[];
40
+ export interface VariantChoice {
41
+ variant: string | undefined;
42
+ }
43
+ export declare function variantOptions(variants: readonly string[]): SelectOption<VariantChoice>[];
44
+ /** Move the resource at `index` to the front (make it primary); out-of-bounds is a no-op. */
45
+ export declare function moveResourceToTop(resources: readonly ModelRef[], index: number): ModelRef[];
46
+ /** Swap the resource at `index` with its `delta` neighbour; bounds are no-ops. */
47
+ export declare function moveResource(resources: readonly ModelRef[], index: number, delta: -1 | 1): ModelRef[];
48
+ /** Drop the resource at `index`; out-of-bounds keeps the list unchanged. */
49
+ export declare function removeResource(resources: readonly ModelRef[], index: number): ModelRef[];
50
+ /** First validation error line for an alert; undefined when the patch applied. */
51
+ export declare function validationMessage(result: PatchResult): string | undefined;
52
+ //# sourceMappingURL=tiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../../../src/ui/tui/tiers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAGnD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,CAQxE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AACpF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAelC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAWhF;AAED,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,KAAK,EAAE,MAAM,GACZ,YAAY,CAAC,SAAS,CAAC,EAAE,CAQ3B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,EAAE,CAQzF;AAED,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAI3F;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GACZ,QAAQ,EAAE,CASZ;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAIxF;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAEzE"}