@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
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ import { Plugin } from "@opencode/plugin";
2
+ import { isCodexHeaderName } from "./adapters/codex-capacity/index.js";
3
+ import { escalationTool, registerSessionHooks, subscribeSessions, tierTool, } from "./adapters/opencode/index.js";
4
+ import { PLUGIN_ID } from "./plugin-id.js";
5
+ import { adaptiveRpc } from "./rpc/definition.js";
6
+ import { adaptiveRpcHandlers } from "./rpc/handlers.js";
7
+ import { Supervisor, logFailOpen } from "./supervisor/index.js";
8
+ export { PLUGIN_ID } from "./plugin-id.js";
9
+ /**
10
+ * Plugin id as required by GOAL.md: must not collide with the `opencode.*`
11
+ * namespace and must stay stable across releases (referenced by settings
12
+ * storage keys and receipts).
13
+ */
14
+ /**
15
+ * Entry point wired into OpenCode via `opencode.json(c)`. Setup glues the
16
+ * adapter touchpoints (session hooks, event subscription, storage) to the
17
+ * supervisor and returns a cleanup that disposes every registration.
18
+ * All supervision errors are fail-open (ADP-031): the supervisor's public
19
+ * entry points never throw; the event pump's stream errors are logged.
20
+ */
21
+ export default Plugin.define({
22
+ id: PLUGIN_ID,
23
+ async setup(context) {
24
+ const supervisor = new Supervisor({
25
+ session: context.session,
26
+ model: context.model,
27
+ storage: context.storage,
28
+ clock: () => Date.now(),
29
+ });
30
+ const hooks = await registerSessionHooks(context.session, {
31
+ onRetry: async (input) => {
32
+ await supervisor.handleRetry(input);
33
+ },
34
+ onModelRequest: async (report) => {
35
+ await supervisor.handleReport(report);
36
+ },
37
+ onHttpResponse: async (report) => {
38
+ await supervisor.handleReport(report);
39
+ },
40
+ onIdle: async (report) => {
41
+ await supervisor.handleReport(report);
42
+ },
43
+ onPrompt: async (report) => {
44
+ await supervisor.handleReport(report);
45
+ },
46
+ }, { capture: isCodexHeaderName });
47
+ const subscription = subscribeSessions(context.event, (report) => {
48
+ void supervisor.handleReport(report);
49
+ }, (error) => {
50
+ logFailOpen("events", error);
51
+ });
52
+ // The typed escalation tool (T-18, ADP-015): the agent's self-report
53
+ // surface for stronger capability, applied at the next safe boundary.
54
+ // The tier tool (ADP-055): the agent declares the task's tier; the
55
+ // declaration steers the session's next admissions until cleared.
56
+ const toolRegistration = await context.tool.transform((editor) => {
57
+ editor.add(escalationTool((sessionID, reason, evidence) => supervisor.noteEscalationRequest(sessionID, reason, evidence)));
58
+ editor.add(tierTool((sessionID, tier) => supervisor.noteTierRequest(sessionID, tier)));
59
+ });
60
+ // Typed RPC (ADP-034/036): the only channel to the control surfaces.
61
+ // The settings-changed emitter resolves the registration lazily: handlers
62
+ // only run after `register` resolves, so the holder is always populated.
63
+ const rpcHolder = {};
64
+ const emit = (...args) =>
65
+ // The correlated tuple pairing is checked by the handler types; the
66
+ // registration forwards it to the host emitter untouched.
67
+ rpcHolder.registration?.events.emit(...args);
68
+ const rpcRegistration = await context.rpc.register(adaptiveRpc, adaptiveRpcHandlers(supervisor, emit));
69
+ rpcHolder.registration = rpcRegistration;
70
+ return () => {
71
+ for (const hookRegistration of hooks) {
72
+ void hookRegistration.dispose();
73
+ }
74
+ subscription.dispose();
75
+ void toolRegistration.dispose();
76
+ void rpcRegistration.dispose();
77
+ };
78
+ },
79
+ });
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** The plugin identity shared by the server, TUI, and GUI entries. */
2
+ export declare const PLUGIN_ID = "coool.adaptive";
3
+ //# sourceMappingURL=plugin-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-id.d.ts","sourceRoot":"","sources":["../src/plugin-id.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,eAAO,MAAM,SAAS,mBAAmB,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** The plugin identity shared by the server, TUI, and GUI entries. */
2
+ export const PLUGIN_ID = "coool.adaptive";
3
+ //# sourceMappingURL=plugin-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-id.js","sourceRoot":"","sources":["../src/plugin-id.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAA"}
@@ -0,0 +1,100 @@
1
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ import type { OperatingMode } from "../core/scheduler/types.js";
3
+ import type { SettingsPatch, SettingsV1 } from "../state/settings/index.js";
4
+ import type { PatchResult } from "../state/settings/types.js";
5
+ import type { SessionModeSetResult } from "../state/session-modes/index.js";
6
+ import type { TierRequestSetResult } from "./handlers.js";
7
+ import type { TierName } from "../core/tier-policy/types.js";
8
+ import type { Receipt } from "../state/receipts/types.js";
9
+ import type { StatusSnapshot } from "./status.js";
10
+ export declare const ADAPTIVE_RPC_ID = "coool.adaptive";
11
+ export declare const adaptiveRpc: {
12
+ readonly id: "coool.adaptive";
13
+ readonly methods: {
14
+ readonly "settings.get": {
15
+ readonly input: StandardSchemaV1<undefined, undefined>;
16
+ readonly output: StandardSchemaV1<SettingsV1, SettingsV1>;
17
+ };
18
+ readonly "settings.set": {
19
+ readonly input: StandardSchemaV1<SettingsPatch, SettingsPatch>;
20
+ readonly output: StandardSchemaV1<PatchResult, PatchResult>;
21
+ };
22
+ readonly "status.get": {
23
+ readonly input: StandardSchemaV1<undefined, undefined>;
24
+ readonly output: StandardSchemaV1<StatusSnapshot, StatusSnapshot>;
25
+ };
26
+ readonly "receipts.list": {
27
+ readonly input: StandardSchemaV1<undefined, undefined>;
28
+ readonly output: StandardSchemaV1<Receipt[], Receipt[]>;
29
+ };
30
+ readonly "session-mode.get": {
31
+ readonly input: StandardSchemaV1<{
32
+ sessionID: string;
33
+ }, {
34
+ sessionID: string;
35
+ }>;
36
+ readonly output: StandardSchemaV1<{
37
+ mode: OperatingMode | null;
38
+ }, {
39
+ mode: OperatingMode | null;
40
+ }>;
41
+ };
42
+ readonly "session-mode.set": {
43
+ readonly input: StandardSchemaV1<{
44
+ sessionID: string;
45
+ mode: OperatingMode | null;
46
+ }, {
47
+ sessionID: string;
48
+ mode: OperatingMode | null;
49
+ }>;
50
+ readonly output: StandardSchemaV1<SessionModeSetResult, SessionModeSetResult>;
51
+ };
52
+ readonly "tier-request.get": {
53
+ readonly input: StandardSchemaV1<{
54
+ sessionID: string;
55
+ }, {
56
+ sessionID: string;
57
+ }>;
58
+ readonly output: StandardSchemaV1<{
59
+ tier: TierName | null;
60
+ }, {
61
+ tier: TierName | null;
62
+ }>;
63
+ };
64
+ readonly "tier-request.set": {
65
+ readonly input: StandardSchemaV1<{
66
+ sessionID: string;
67
+ tier: string | null;
68
+ }, {
69
+ sessionID: string;
70
+ tier: string | null;
71
+ }>;
72
+ readonly output: StandardSchemaV1<TierRequestSetResult, TierRequestSetResult>;
73
+ };
74
+ };
75
+ readonly events: {
76
+ readonly "settings-changed": {
77
+ readonly schema: StandardSchemaV1<{
78
+ version: number;
79
+ }, {
80
+ version: number;
81
+ }>;
82
+ };
83
+ readonly "session-mode-changed": {
84
+ readonly schema: StandardSchemaV1<{
85
+ sessionID: string;
86
+ }, {
87
+ sessionID: string;
88
+ }>;
89
+ };
90
+ readonly "tier-request-changed": {
91
+ readonly schema: StandardSchemaV1<{
92
+ sessionID: string;
93
+ }, {
94
+ sessionID: string;
95
+ }>;
96
+ };
97
+ };
98
+ };
99
+ export type AdaptiveRpc = typeof adaptiveRpc;
100
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/rpc/definition.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAqD/C,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;2BAoBS,MAAM;;2BAAN,MAAM;;;sBAIV,aAAa,GAAG,IAAI;;sBAApB,aAAa,GAAG,IAAI;;;;;2BAGhB,MAAM;sBAAQ,aAAa,GAAG,IAAI;;2BAAlC,MAAM;sBAAQ,aAAa,GAAG,IAAI;;;;;;2BAOlC,MAAM;;2BAAN,MAAM;;;sBAIV,QAAQ,GAAG,IAAI;;sBAAf,QAAQ,GAAG,IAAI;;;;;2BAGX,MAAM;sBAAQ,MAAM,GAAG,IAAI;;2BAA3B,MAAM;sBAAQ,MAAM,GAAG,IAAI;;;;;;;;yBAS5B,MAAM;;yBAAN,MAAM;;;;;2BAGJ,MAAM;;2BAAN,MAAM;;;;;2BAMN,MAAM;;2BAAN,MAAM;;;;CAMtC,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAA"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Typed RPC definition (ADP-034/036): the only channel between the server
3
+ * plugin and the TUI/GUI surfaces. Surfaces hold no local settings state —
4
+ * they fetch snapshots, patch settings, and re-fetch on the `settings-changed`
5
+ * event (the server is the single source of truth). Session-mode overrides
6
+ * follow the same contract via `session-mode.get/set` and the
7
+ * `session-mode-changed` event (ADP-054); sticky per-session tier requests
8
+ * follow it via `tier-request.get/set` and `tier-request-changed` (ADP-055).
9
+ *
10
+ * Schema note: input schemas gate the wire shape (non-object patches are
11
+ * rejected as rpc.invalid_input); deeper validation happens in the handlers
12
+ * via the state parsers (`applyPatch` reports per-field errors instead), and
13
+ * output schemas are passthroughs over trusted server-side data.
14
+ */
15
+ import { Rpc } from "@opencode/schema/rpc";
16
+ export const ADAPTIVE_RPC_ID = "coool.adaptive";
17
+ const RPC_VENDOR = "coool.adaptive";
18
+ /**
19
+ * Identity schema: the wire value passes through unchanged; the type
20
+ * parameters carry the transport contract. `gate` optionally rejects values
21
+ * before they reach a handler; the failure message names the expectation so a
22
+ * rejected call is diagnosable from the wire error alone.
23
+ */
24
+ function schema(gate, expectation) {
25
+ return {
26
+ "~standard": {
27
+ version: 1,
28
+ vendor: RPC_VENDOR,
29
+ validate: (value) => gate(value) ? { value: value } : { issues: [{ message: expectation }] },
30
+ },
31
+ };
32
+ }
33
+ function voidSchema() {
34
+ return {
35
+ "~standard": {
36
+ version: 1,
37
+ vendor: RPC_VENDOR,
38
+ validate: (value) => value === undefined
39
+ ? { value: undefined }
40
+ : { issues: [{ message: "unexpected input: no input expected" }] },
41
+ },
42
+ };
43
+ }
44
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
45
+ const isString = (value) => typeof value === "string";
46
+ /** `{ sessionID: string }` — deeper validation (bounds, vocabulary) is the handler's. */
47
+ const hasSessionID = (value) => isRecord(value) && isString(value["sessionID"]);
48
+ /** `{ sessionID: string, mode: OperatingMode | null }` wire shape. */
49
+ const isSessionModeSet = (value) => isRecord(value) &&
50
+ isString(value["sessionID"]) &&
51
+ (value["mode"] === null || isString(value["mode"]));
52
+ /** `{ sessionID: string, tier: string | null }` wire shape. */
53
+ const isTierRequestSet = (value) => isRecord(value) &&
54
+ isString(value["sessionID"]) &&
55
+ (value["tier"] === null || isString(value["tier"]));
56
+ export const adaptiveRpc = Rpc.define({
57
+ id: ADAPTIVE_RPC_ID,
58
+ methods: {
59
+ "settings.get": {
60
+ input: voidSchema(),
61
+ output: schema(isRecord, "output must be an object"),
62
+ },
63
+ "settings.set": {
64
+ input: schema(isRecord, "input must be an object"),
65
+ output: schema(isRecord, "output must be an object"),
66
+ },
67
+ "status.get": {
68
+ input: voidSchema(),
69
+ output: schema(isRecord, "output must be an object"),
70
+ },
71
+ "receipts.list": {
72
+ input: voidSchema(),
73
+ output: schema(Array.isArray, "output must be an array"),
74
+ },
75
+ "session-mode.get": {
76
+ input: schema(hasSessionID, "input must be an object with a sessionID string"),
77
+ output: schema(isRecord, "output must be an object"),
78
+ },
79
+ "session-mode.set": {
80
+ input: schema(isSessionModeSet, "input must be an object with a sessionID string and a mode string or null"),
81
+ output: schema(isRecord, "output must be an object"),
82
+ },
83
+ "tier-request.get": {
84
+ input: schema(hasSessionID, "input must be an object with a sessionID string"),
85
+ output: schema(isRecord, "output must be an object"),
86
+ },
87
+ "tier-request.set": {
88
+ input: schema(isTierRequestSet, "input must be an object with a sessionID string and a tier string or null"),
89
+ output: schema(isRecord, "output must be an object"),
90
+ },
91
+ },
92
+ events: {
93
+ "settings-changed": {
94
+ schema: schema(isRecord, "event data must be an object"),
95
+ },
96
+ "session-mode-changed": {
97
+ schema: schema(hasSessionID, "event data must be an object with a sessionID string"),
98
+ },
99
+ "tier-request-changed": {
100
+ schema: schema(hasSessionID, "event data must be an object with a sessionID string"),
101
+ },
102
+ },
103
+ });
104
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/rpc/definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { OperatingMode } from "../core/scheduler/types.js";
2
+ import type { TierName } from "../core/tier-policy/types.js";
3
+ import type { SessionModeSetResult } from "../state/session-modes/index.js";
4
+ import type { PatchResult } from "../state/settings/types.js";
5
+ import type { SettingsPatch, SettingsV1 } from "../state/settings/index.js";
6
+ import type { Receipt } from "../state/receipts/types.js";
7
+ import type { StatusSnapshot } from "./status.js";
8
+ export interface AdaptiveRpcSource {
9
+ settings(): Promise<SettingsV1>;
10
+ updateSettings(patch: SettingsPatch): Promise<PatchResult>;
11
+ status(): Promise<StatusSnapshot>;
12
+ receipts(): Promise<Receipt[]>;
13
+ getSessionMode(sessionID: string): Promise<OperatingMode | null>;
14
+ setSessionMode(sessionID: string, mode: OperatingMode | null): Promise<void>;
15
+ getTierRequest(sessionID: string): Promise<TierName | null>;
16
+ noteTierRequest(sessionID: string, tier: string): boolean;
17
+ setTierRequest(sessionID: string, tier: TierName | null): Promise<void>;
18
+ }
19
+ export type SettingsChangedEmit = (name: "settings-changed", data: {
20
+ version: number;
21
+ }) => unknown;
22
+ /**
23
+ * Correlated emit: each call site pairs the event name with its own payload
24
+ * shape — an invalid pairing is a type error, and the registration site can
25
+ * forward the tuple to the host emitter untouched.
26
+ */
27
+ export type AdaptiveRpcEmit = (...args: ["settings-changed", {
28
+ version: number;
29
+ }] | ["session-mode-changed", {
30
+ sessionID: string;
31
+ }] | ["tier-request-changed", {
32
+ sessionID: string;
33
+ }]) => unknown;
34
+ /** A successful tier-request write; mirrors the SessionModeSetResult convention. */
35
+ export type TierRequestSetResult = {
36
+ readonly ok: true;
37
+ } | {
38
+ readonly ok: false;
39
+ readonly errors: readonly string[];
40
+ };
41
+ export declare function adaptiveRpcHandlers(source: AdaptiveRpcSource, emit?: AdaptiveRpcEmit): {
42
+ "settings.get": (input: undefined) => Promise<SettingsV1>;
43
+ "settings.set": (input: SettingsPatch) => Promise<PatchResult>;
44
+ "status.get": (input: undefined) => Promise<StatusSnapshot>;
45
+ "receipts.list": (input: undefined) => Promise<Receipt[]>;
46
+ "session-mode.get": (input: {
47
+ sessionID: string;
48
+ }) => Promise<{
49
+ mode: OperatingMode | null;
50
+ }>;
51
+ "session-mode.set": (input: {
52
+ sessionID: string;
53
+ mode: OperatingMode | null;
54
+ }) => Promise<SessionModeSetResult>;
55
+ "tier-request.get": (input: {
56
+ sessionID: string;
57
+ }) => Promise<{
58
+ tier: TierName | null;
59
+ }>;
60
+ "tier-request.set": (input: {
61
+ sessionID: string;
62
+ tier: string | null;
63
+ }) => Promise<TierRequestSetResult>;
64
+ };
65
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/rpc/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * RPC handler binding (ADP-034/036): adapts the supervisor's state API to the
3
+ * typed RPC methods. Handlers never throw for expected outcomes — an invalid
4
+ * patch is a per-field `PatchResult`, and an internal failure degrades to
5
+ * `{ ok: false }` (fail-open, ADP-031). Read methods propagate host errors so
6
+ * surfaces can show them honestly.
7
+ */
8
+ import { OPERATING_MODES } from "../core/scheduler/types.js";
9
+ import { TIERS } from "../core/tier-policy/types.js";
10
+ import { logFailOpen } from "../supervisor/log.js";
11
+ import { isValidSessionID } from "../state/session-modes/index.js";
12
+ /** Per-field errors for a session-mode patch, mirroring the settings contract. */
13
+ function sessionModeSetError(input) {
14
+ if (!isValidSessionID(input.sessionID)) {
15
+ return "sessionID must be a non-empty string of at most 128 characters";
16
+ }
17
+ if (input.mode !== null && !OPERATING_MODES.includes(input.mode)) {
18
+ return `mode must be one of ${OPERATING_MODES.join(", ")} or null`;
19
+ }
20
+ return undefined;
21
+ }
22
+ /** Same contract for a tier-request patch (ADP-055): vocabulary-gated tier. */
23
+ function tierRequestSetError(input) {
24
+ if (!isValidSessionID(input.sessionID)) {
25
+ return "sessionID must be a non-empty string of at most 128 characters";
26
+ }
27
+ if (input.tier !== null && !TIERS.includes(input.tier)) {
28
+ return `tier must be one of ${TIERS.join(", ")} or null`;
29
+ }
30
+ return undefined;
31
+ }
32
+ export function adaptiveRpcHandlers(source, emit) {
33
+ return {
34
+ "settings.get": () => source.settings(),
35
+ "settings.set": async (patch) => {
36
+ try {
37
+ const result = await source.updateSettings(patch);
38
+ if (result.ok && emit !== undefined) {
39
+ try {
40
+ await emit("settings-changed", { version: result.settings.version });
41
+ }
42
+ catch (error) {
43
+ logFailOpen("rpc-emit", error);
44
+ }
45
+ }
46
+ return result;
47
+ }
48
+ catch (error) {
49
+ logFailOpen("rpc-set", error);
50
+ return { ok: false, errors: ["internal error"] };
51
+ }
52
+ },
53
+ "status.get": () => source.status(),
54
+ "receipts.list": () => source.receipts(),
55
+ "session-mode.get": (input) => source.getSessionMode(input.sessionID).then((mode) => ({ mode })),
56
+ "session-mode.set": async (input) => {
57
+ const invalid = sessionModeSetError(input);
58
+ if (invalid !== undefined)
59
+ return { ok: false, errors: [invalid] };
60
+ try {
61
+ await source.setSessionMode(input.sessionID, input.mode);
62
+ }
63
+ catch (error) {
64
+ logFailOpen("rpc-set", error);
65
+ return { ok: false, errors: ["internal error"] };
66
+ }
67
+ if (emit !== undefined) {
68
+ try {
69
+ await emit("session-mode-changed", { sessionID: input.sessionID });
70
+ }
71
+ catch (error) {
72
+ logFailOpen("rpc-emit", error);
73
+ }
74
+ }
75
+ return { ok: true };
76
+ },
77
+ "tier-request.get": (input) => source.getTierRequest(input.sessionID).then((tier) => ({ tier })),
78
+ "tier-request.set": async (input) => {
79
+ const invalid = tierRequestSetError(input);
80
+ if (invalid !== undefined)
81
+ return { ok: false, errors: [invalid] };
82
+ if (input.tier !== null) {
83
+ // A non-null tier is a sticky record: noteTierRequest re-validates the
84
+ // vocabulary (post-gate this cannot fail, so treat `false` as internal).
85
+ if (!source.noteTierRequest(input.sessionID, input.tier)) {
86
+ logFailOpen("rpc-set", new Error("tier request rejected"));
87
+ return { ok: false, errors: ["internal error"] };
88
+ }
89
+ }
90
+ else {
91
+ try {
92
+ await source.setTierRequest(input.sessionID, null);
93
+ }
94
+ catch (error) {
95
+ logFailOpen("rpc-set", error);
96
+ return { ok: false, errors: ["internal error"] };
97
+ }
98
+ }
99
+ if (emit !== undefined) {
100
+ try {
101
+ await emit("tier-request-changed", { sessionID: input.sessionID });
102
+ }
103
+ catch (error) {
104
+ logFailOpen("rpc-emit", error);
105
+ }
106
+ }
107
+ return { ok: true };
108
+ },
109
+ };
110
+ }
111
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/rpc/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Status snapshot for the control surfaces (ADP-033): a bounded, secret-free
3
+ * view of the settings and the resource-health state of every configured
4
+ * resource. Pure — the supervisor (or any future caller) gathers the inputs.
5
+ */
6
+ import type { OperatingMode } from "../core/scheduler/types.js";
7
+ import type { ModelRef } from "../core/work-unit/types.js";
8
+ import type { TierName } from "../core/tier-policy/types.js";
9
+ import type { ResourceRecord } from "../health/resource-health/types.js";
10
+ import type { CapacityReading } from "../health/capacity/types.js";
11
+ import type { SettingsV1 } from "../state/settings/index.js";
12
+ export interface TierResourceStatus {
13
+ ref: ModelRef;
14
+ health: ResourceRecord["health"];
15
+ breaker: ResourceRecord["breaker"]["state"];
16
+ windowed: boolean;
17
+ /**
18
+ * Wall-clock deadline of the active window (ms epoch); null when unwindowed.
19
+ * Null — not undefined: the host RPC encoder rejects JSON objects carrying a
20
+ * present-but-undefined key ("Expected JSON value"), which 500'd every
21
+ * status.get once any resource was configured.
22
+ */
23
+ windowUntil: number | null;
24
+ /** Used capacity as a rounded whole percent; null when no reading exists. */
25
+ usedPercent: number | null;
26
+ /** Wall-clock capacity reset deadline (ms epoch); null when unread. */
27
+ resetAt: number | null;
28
+ }
29
+ export interface StatusSnapshot {
30
+ mode: OperatingMode;
31
+ pin: ModelRef | null;
32
+ tiers: Readonly<Record<TierName, readonly TierResourceStatus[]>>;
33
+ parked: number;
34
+ receipts: number;
35
+ }
36
+ export declare function buildStatus(input: {
37
+ settings: SettingsV1;
38
+ health: readonly ResourceRecord[];
39
+ capacity: Readonly<Record<string, CapacityReading | null>>;
40
+ parked: number;
41
+ receipts: number;
42
+ }): StatusSnapshot;
43
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/rpc/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;IAChC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAA;IAC3C,QAAQ,EAAE,OAAO,CAAA;IACjB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,6EAA6E;IAC7E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,uEAAuE;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAA;IACnB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,QAAQ,EAAE,UAAU,CAAA;IACpB,MAAM,EAAE,SAAS,cAAc,EAAE,CAAA;IACjC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC,CAAA;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,cAAc,CA0BjB"}
@@ -0,0 +1,45 @@
1
+ import { schedulerHealthKey } from "../core/scheduler/index.js";
2
+ import { TIERS } from "../core/tier-policy/types.js";
3
+ import { resourceKeyID } from "../health/resource-health/index.js";
4
+ export function buildStatus(input) {
5
+ const byKey = new Map();
6
+ for (const record of input.health)
7
+ byKey.set(resourceKeyID(record.key), record);
8
+ const tiers = {};
9
+ for (const tier of TIERS) {
10
+ tiers[tier] = input.settings.tiers[tier].map((ref) => {
11
+ const record = byKey.get(schedulerHealthKey(ref));
12
+ const capacityReading = input.capacity[schedulerHealthKey(ref)] ?? null;
13
+ return {
14
+ ref,
15
+ health: record?.health ?? "healthy",
16
+ breaker: record?.breaker.state ?? "closed",
17
+ windowed: record?.window !== undefined,
18
+ windowUntil: record?.window?.until ?? null,
19
+ usedPercent: capacityUsedPercent(capacityReading),
20
+ resetAt: capacityReading?.resetAt ?? null,
21
+ };
22
+ });
23
+ }
24
+ return {
25
+ mode: input.settings.mode,
26
+ pin: input.settings.pin,
27
+ tiers,
28
+ parked: input.parked,
29
+ receipts: input.receipts,
30
+ };
31
+ }
32
+ /**
33
+ * Derives the used-capacity percentage from a reading. Readings may carry any
34
+ * subset of the two ratios: usedRatio directly, or the remainder inferred from
35
+ * remainingRatio. A reading with neither ratio is still present (confidence,
36
+ * resetAt may be set) but yields no percentage — null, not undefined.
37
+ */
38
+ function capacityUsedPercent(reading) {
39
+ if (reading?.usedRatio !== undefined)
40
+ return Math.round(reading.usedRatio * 100);
41
+ if (reading?.remainingRatio !== undefined)
42
+ return Math.round((1 - reading.remainingRatio) * 100);
43
+ return null;
44
+ }
45
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/rpc/status.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAG/D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AA6BlE,MAAM,UAAU,WAAW,CAAC,KAM3B;IACC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAA;IAC/C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;IAC/E,MAAM,KAAK,GAAG,EAA4C,CAAA;IAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;YACjD,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAA;YACvE,OAAO;gBACL,GAAG;gBACH,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ;gBAC1C,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS;gBACtC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI;gBAC1C,WAAW,EAAE,mBAAmB,CAAC,eAAe,CAAC;gBACjD,OAAO,EAAE,eAAe,EAAE,OAAO,IAAI,IAAI;aAC1C,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;QACzB,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG;QACvB,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,OAA+B;IAC1D,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAA;IAChF,IAAI,OAAO,EAAE,cAAc,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,CAAA;IAChG,OAAO,IAAI,CAAA;AACb,CAAC"}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * RPC entrypoint: the typed definition shared by the server plugin and the
3
+ * control surfaces, plus the handler binding used server-side.
4
+ */
5
+ export { adaptiveRpc, ADAPTIVE_RPC_ID } from "./rpc/definition.js";
6
+ export type { AdaptiveRpc } from "./rpc/definition.js";
7
+ export { adaptiveRpcHandlers } from "./rpc/handlers.js";
8
+ export type { AdaptiveRpcSource, AdaptiveRpcEmit, SettingsChangedEmit, TierRequestSetResult, } from "./rpc/handlers.js";
9
+ export { buildStatus } from "./rpc/status.js";
10
+ export type { StatusSnapshot, TierResourceStatus } from "./rpc/status.js";
11
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/rpc.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * RPC entrypoint: the typed definition shared by the server plugin and the
3
+ * control surfaces, plus the handler binding used server-side.
4
+ */
5
+ export { adaptiveRpc, ADAPTIVE_RPC_ID } from "./rpc/definition.js";
6
+ export { adaptiveRpcHandlers } from "./rpc/handlers.js";
7
+ export { buildStatus } from "./rpc/status.js";
8
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAOvD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}