@agentdeck/bridge 0.2.2 → 0.2.3

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 (383) hide show
  1. package/assets/fonts/IBMPlexSans-Bold.ttf +0 -0
  2. package/assets/fonts/IBMPlexSans-Regular.ttf +0 -0
  3. package/assets/fonts/JetBrainsMono-Bold.ttf +0 -0
  4. package/assets/fonts/JetBrainsMono-Regular.ttf +0 -0
  5. package/assets/fonts/LICENSES.md +22 -0
  6. package/dist/adapters/claude-code.d.ts +6 -0
  7. package/dist/adapters/claude-code.d.ts.map +1 -1
  8. package/dist/adapters/claude-code.js +8 -0
  9. package/dist/adapters/claude-code.js.map +1 -1
  10. package/dist/adapters/openclaw.d.ts +24 -0
  11. package/dist/adapters/openclaw.d.ts.map +1 -1
  12. package/dist/adapters/openclaw.js +291 -35
  13. package/dist/adapters/openclaw.js.map +1 -1
  14. package/dist/adapters/opencode-adapter.d.ts +59 -0
  15. package/dist/adapters/opencode-adapter.d.ts.map +1 -1
  16. package/dist/adapters/opencode-adapter.js +297 -35
  17. package/dist/adapters/opencode-adapter.js.map +1 -1
  18. package/dist/adb-reverse.d.ts +1 -1
  19. package/dist/adb-reverse.js +1 -1
  20. package/dist/antigravity-local.d.ts +1 -0
  21. package/dist/antigravity-local.d.ts.map +1 -1
  22. package/dist/antigravity-local.js +33 -0
  23. package/dist/antigravity-local.js.map +1 -1
  24. package/dist/apme/adapters/claude-hook.d.ts.map +1 -1
  25. package/dist/apme/adapters/claude-hook.js +5 -0
  26. package/dist/apme/adapters/claude-hook.js.map +1 -1
  27. package/dist/apme/adapters/codex-hook.d.ts +17 -0
  28. package/dist/apme/adapters/codex-hook.d.ts.map +1 -0
  29. package/dist/apme/adapters/codex-hook.js +95 -0
  30. package/dist/apme/adapters/codex-hook.js.map +1 -0
  31. package/dist/apme/adapters/codex-turn-manager.d.ts +86 -0
  32. package/dist/apme/adapters/codex-turn-manager.d.ts.map +1 -0
  33. package/dist/apme/adapters/codex-turn-manager.js +496 -0
  34. package/dist/apme/adapters/codex-turn-manager.js.map +1 -0
  35. package/dist/apme/adapters/openclaw-hook.d.ts +99 -0
  36. package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -0
  37. package/dist/apme/adapters/openclaw-hook.js +234 -0
  38. package/dist/apme/adapters/openclaw-hook.js.map +1 -0
  39. package/dist/apme/adapters/opencode-hook.d.ts +56 -0
  40. package/dist/apme/adapters/opencode-hook.d.ts.map +1 -0
  41. package/dist/apme/adapters/opencode-hook.js +182 -0
  42. package/dist/apme/adapters/opencode-hook.js.map +1 -0
  43. package/dist/apme/adapters/timeline.d.ts.map +1 -1
  44. package/dist/apme/adapters/timeline.js +6 -1
  45. package/dist/apme/adapters/timeline.js.map +1 -1
  46. package/dist/apme/antigravity-transcript.d.ts +18 -0
  47. package/dist/apme/antigravity-transcript.d.ts.map +1 -0
  48. package/dist/apme/antigravity-transcript.js +94 -0
  49. package/dist/apme/antigravity-transcript.js.map +1 -0
  50. package/dist/apme/classify-turn.d.ts +13 -0
  51. package/dist/apme/classify-turn.d.ts.map +1 -0
  52. package/dist/apme/classify-turn.js +49 -0
  53. package/dist/apme/classify-turn.js.map +1 -0
  54. package/dist/apme/claude-transcript-reader.d.ts +10 -0
  55. package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
  56. package/dist/apme/claude-transcript-reader.js +35 -0
  57. package/dist/apme/claude-transcript-reader.js.map +1 -1
  58. package/dist/apme/collector.d.ts +129 -6
  59. package/dist/apme/collector.d.ts.map +1 -1
  60. package/dist/apme/collector.js +470 -23
  61. package/dist/apme/collector.js.map +1 -1
  62. package/dist/apme/dashboard-html.d.ts.map +1 -1
  63. package/dist/apme/dashboard-html.js +87 -11
  64. package/dist/apme/dashboard-html.js.map +1 -1
  65. package/dist/apme/http.d.ts.map +1 -1
  66. package/dist/apme/http.js +43 -6
  67. package/dist/apme/http.js.map +1 -1
  68. package/dist/apme/index.d.ts +26 -5
  69. package/dist/apme/index.d.ts.map +1 -1
  70. package/dist/apme/index.js +135 -9
  71. package/dist/apme/index.js.map +1 -1
  72. package/dist/apme/pareto.d.ts +39 -0
  73. package/dist/apme/pareto.d.ts.map +1 -0
  74. package/dist/apme/pareto.js +59 -0
  75. package/dist/apme/pareto.js.map +1 -0
  76. package/dist/apme/recommend.d.ts +3 -0
  77. package/dist/apme/recommend.d.ts.map +1 -1
  78. package/dist/apme/recommend.js +43 -1
  79. package/dist/apme/recommend.js.map +1 -1
  80. package/dist/apme/runner.d.ts +92 -4
  81. package/dist/apme/runner.d.ts.map +1 -1
  82. package/dist/apme/runner.js +586 -70
  83. package/dist/apme/runner.js.map +1 -1
  84. package/dist/apme/sample-to-timeline.d.ts +26 -0
  85. package/dist/apme/sample-to-timeline.d.ts.map +1 -0
  86. package/dist/apme/sample-to-timeline.js +95 -0
  87. package/dist/apme/sample-to-timeline.js.map +1 -0
  88. package/dist/apme/scorers/index.d.ts +47 -0
  89. package/dist/apme/scorers/index.d.ts.map +1 -0
  90. package/dist/apme/scorers/index.js +96 -0
  91. package/dist/apme/scorers/index.js.map +1 -0
  92. package/dist/apme/settings.d.ts +14 -10
  93. package/dist/apme/settings.d.ts.map +1 -1
  94. package/dist/apme/settings.js +34 -8
  95. package/dist/apme/settings.js.map +1 -1
  96. package/dist/apme/store.d.ts +33 -1
  97. package/dist/apme/store.d.ts.map +1 -1
  98. package/dist/apme/store.js +334 -25
  99. package/dist/apme/store.js.map +1 -1
  100. package/dist/awaiting-overlay.d.ts +99 -0
  101. package/dist/awaiting-overlay.d.ts.map +1 -0
  102. package/dist/awaiting-overlay.js +148 -0
  103. package/dist/awaiting-overlay.js.map +1 -0
  104. package/dist/ble-sync-spawn.d.ts +63 -0
  105. package/dist/ble-sync-spawn.d.ts.map +1 -0
  106. package/dist/ble-sync-spawn.js +196 -0
  107. package/dist/ble-sync-spawn.js.map +1 -0
  108. package/dist/bridge-core.d.ts +24 -1
  109. package/dist/bridge-core.d.ts.map +1 -1
  110. package/dist/bridge-core.js +157 -24
  111. package/dist/bridge-core.js.map +1 -1
  112. package/dist/broadcast.d.ts +3 -0
  113. package/dist/broadcast.d.ts.map +1 -0
  114. package/dist/broadcast.js +122 -0
  115. package/dist/broadcast.js.map +1 -0
  116. package/dist/check-deps.d.ts.map +1 -1
  117. package/dist/check-deps.js +25 -9
  118. package/dist/check-deps.js.map +1 -1
  119. package/dist/cli.d.ts +15 -1
  120. package/dist/cli.d.ts.map +1 -1
  121. package/dist/cli.js +1021 -93
  122. package/dist/cli.js.map +1 -1
  123. package/dist/codex-auth.d.ts +21 -0
  124. package/dist/codex-auth.d.ts.map +1 -1
  125. package/dist/codex-auth.js +52 -1
  126. package/dist/codex-auth.js.map +1 -1
  127. package/dist/codex-output-parser.d.ts +8 -0
  128. package/dist/codex-output-parser.d.ts.map +1 -1
  129. package/dist/codex-output-parser.js +110 -25
  130. package/dist/codex-output-parser.js.map +1 -1
  131. package/dist/codex-rate-limits.d.ts +16 -0
  132. package/dist/codex-rate-limits.d.ts.map +1 -0
  133. package/dist/codex-rate-limits.js +197 -0
  134. package/dist/codex-rate-limits.js.map +1 -0
  135. package/dist/codex-rollout-response.d.ts +31 -0
  136. package/dist/codex-rollout-response.d.ts.map +1 -0
  137. package/dist/codex-rollout-response.js +135 -0
  138. package/dist/codex-rollout-response.js.map +1 -0
  139. package/dist/daemon-server.d.ts +85 -0
  140. package/dist/daemon-server.d.ts.map +1 -1
  141. package/dist/daemon-server.js +1627 -159
  142. package/dist/daemon-server.js.map +1 -1
  143. package/dist/daemon.js +15 -6
  144. package/dist/daemon.js.map +1 -1
  145. package/dist/display-dim.d.ts +9 -0
  146. package/dist/display-dim.d.ts.map +1 -0
  147. package/dist/display-dim.js +53 -0
  148. package/dist/display-dim.js.map +1 -0
  149. package/dist/display-monitor.d.ts +15 -2
  150. package/dist/display-monitor.d.ts.map +1 -1
  151. package/dist/display-monitor.js +104 -26
  152. package/dist/display-monitor.js.map +1 -1
  153. package/dist/esp32-serial.d.ts +160 -1
  154. package/dist/esp32-serial.d.ts.map +1 -1
  155. package/dist/esp32-serial.js +950 -153
  156. package/dist/esp32-serial.js.map +1 -1
  157. package/dist/fallback-task-timeline.d.ts +42 -0
  158. package/dist/fallback-task-timeline.d.ts.map +1 -0
  159. package/dist/fallback-task-timeline.js +112 -0
  160. package/dist/fallback-task-timeline.js.map +1 -0
  161. package/dist/foundation-models-helper.d.ts +11 -0
  162. package/dist/foundation-models-helper.d.ts.map +1 -0
  163. package/dist/foundation-models-helper.js +241 -0
  164. package/dist/foundation-models-helper.js.map +1 -0
  165. package/dist/hook-migration.js +1 -1
  166. package/dist/hook-migration.js.map +1 -1
  167. package/dist/hook-server.d.ts +2 -3
  168. package/dist/hook-server.d.ts.map +1 -1
  169. package/dist/hook-server.js +22 -10
  170. package/dist/hook-server.js.map +1 -1
  171. package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts +33 -0
  172. package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts.map +1 -0
  173. package/dist/idotmatrix/idotmatrix-daemon-sync.js +164 -0
  174. package/dist/idotmatrix/idotmatrix-daemon-sync.js.map +1 -0
  175. package/dist/idotmatrix/idotmatrix-discover.d.ts +18 -0
  176. package/dist/idotmatrix/idotmatrix-discover.d.ts.map +1 -0
  177. package/dist/idotmatrix/idotmatrix-discover.js +85 -0
  178. package/dist/idotmatrix/idotmatrix-discover.js.map +1 -0
  179. package/dist/idotmatrix/idotmatrix-settings.d.ts +20 -0
  180. package/dist/idotmatrix/idotmatrix-settings.d.ts.map +1 -0
  181. package/dist/idotmatrix/idotmatrix-settings.js +57 -0
  182. package/dist/idotmatrix/idotmatrix-settings.js.map +1 -0
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +215 -179
  185. package/dist/index.js.map +1 -1
  186. package/dist/log-stream.d.ts +15 -16
  187. package/dist/log-stream.d.ts.map +1 -1
  188. package/dist/log-stream.js +18 -96
  189. package/dist/log-stream.js.map +1 -1
  190. package/dist/logger.d.ts.map +1 -1
  191. package/dist/logger.js +12 -3
  192. package/dist/logger.js.map +1 -1
  193. package/dist/mdns.d.ts +17 -0
  194. package/dist/mdns.d.ts.map +1 -1
  195. package/dist/mdns.js +52 -18
  196. package/dist/mdns.js.map +1 -1
  197. package/dist/modules/adb-module.d.ts +1 -1
  198. package/dist/modules/adb-module.d.ts.map +1 -1
  199. package/dist/modules/adb-module.js +4 -3
  200. package/dist/modules/adb-module.js.map +1 -1
  201. package/dist/modules/broadcast-module.d.ts +17 -0
  202. package/dist/modules/broadcast-module.d.ts.map +1 -0
  203. package/dist/modules/broadcast-module.js +26 -0
  204. package/dist/modules/broadcast-module.js.map +1 -0
  205. package/dist/modules/idotmatrix-module.d.ts +9 -0
  206. package/dist/modules/idotmatrix-module.d.ts.map +1 -0
  207. package/dist/modules/idotmatrix-module.js +46 -0
  208. package/dist/modules/idotmatrix-module.js.map +1 -0
  209. package/dist/modules/index.d.ts +3 -1
  210. package/dist/modules/index.d.ts.map +1 -1
  211. package/dist/modules/index.js +9 -3
  212. package/dist/modules/index.js.map +1 -1
  213. package/dist/modules/pixoo-module.d.ts.map +1 -1
  214. package/dist/modules/pixoo-module.js +14 -4
  215. package/dist/modules/pixoo-module.js.map +1 -1
  216. package/dist/modules/serial-module.d.ts +4 -0
  217. package/dist/modules/serial-module.d.ts.map +1 -1
  218. package/dist/modules/serial-module.js +14 -12
  219. package/dist/modules/serial-module.js.map +1 -1
  220. package/dist/modules/timebox-module.d.ts +9 -0
  221. package/dist/modules/timebox-module.d.ts.map +1 -0
  222. package/dist/modules/timebox-module.js +46 -0
  223. package/dist/modules/timebox-module.js.map +1 -0
  224. package/dist/modules/types.d.ts +4 -2
  225. package/dist/modules/types.d.ts.map +1 -1
  226. package/dist/openclaw-session.d.ts +18 -0
  227. package/dist/openclaw-session.d.ts.map +1 -0
  228. package/dist/openclaw-session.js +34 -0
  229. package/dist/openclaw-session.js.map +1 -0
  230. package/dist/output-parser.d.ts +30 -0
  231. package/dist/output-parser.d.ts.map +1 -1
  232. package/dist/output-parser.js +125 -9
  233. package/dist/output-parser.js.map +1 -1
  234. package/dist/passive-observer.d.ts +26 -0
  235. package/dist/passive-observer.d.ts.map +1 -1
  236. package/dist/passive-observer.js +258 -49
  237. package/dist/passive-observer.js.map +1 -1
  238. package/dist/permission-resolver.d.ts +47 -0
  239. package/dist/permission-resolver.d.ts.map +1 -0
  240. package/dist/permission-resolver.js +103 -0
  241. package/dist/permission-resolver.js.map +1 -0
  242. package/dist/pixoo/micro-glyphs.d.ts +49 -0
  243. package/dist/pixoo/micro-glyphs.d.ts.map +1 -0
  244. package/dist/pixoo/micro-glyphs.js +276 -0
  245. package/dist/pixoo/micro-glyphs.js.map +1 -0
  246. package/dist/pixoo/pixoo-bridge.d.ts +2 -2
  247. package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
  248. package/dist/pixoo/pixoo-bridge.js +93 -25
  249. package/dist/pixoo/pixoo-bridge.js.map +1 -1
  250. package/dist/pixoo/pixoo-camera.d.ts +19 -3
  251. package/dist/pixoo/pixoo-camera.d.ts.map +1 -1
  252. package/dist/pixoo/pixoo-camera.js +62 -27
  253. package/dist/pixoo/pixoo-camera.js.map +1 -1
  254. package/dist/pixoo/pixoo-client.d.ts +13 -3
  255. package/dist/pixoo/pixoo-client.d.ts.map +1 -1
  256. package/dist/pixoo/pixoo-client.js +51 -22
  257. package/dist/pixoo/pixoo-client.js.map +1 -1
  258. package/dist/pixoo/pixoo-discover.d.ts +37 -0
  259. package/dist/pixoo/pixoo-discover.d.ts.map +1 -0
  260. package/dist/pixoo/pixoo-discover.js +105 -0
  261. package/dist/pixoo/pixoo-discover.js.map +1 -0
  262. package/dist/pixoo/pixoo-renderer.d.ts +8 -3
  263. package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
  264. package/dist/pixoo/pixoo-renderer.js +189 -60
  265. package/dist/pixoo/pixoo-renderer.js.map +1 -1
  266. package/dist/pixoo/pixoo-settings.d.ts +6 -0
  267. package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
  268. package/dist/pixoo/pixoo-settings.js +9 -0
  269. package/dist/pixoo/pixoo-settings.js.map +1 -1
  270. package/dist/pixoo/pixoo-sprites.d.ts +60 -11
  271. package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
  272. package/dist/pixoo/pixoo-sprites.js +512 -209
  273. package/dist/pixoo/pixoo-sprites.js.map +1 -1
  274. package/dist/pty-manager.d.ts.map +1 -1
  275. package/dist/pty-manager.js +8 -2
  276. package/dist/pty-manager.js.map +1 -1
  277. package/dist/session-activity.d.ts +14 -0
  278. package/dist/session-activity.d.ts.map +1 -0
  279. package/dist/session-activity.js +160 -0
  280. package/dist/session-activity.js.map +1 -0
  281. package/dist/session-aggregator.d.ts +17 -0
  282. package/dist/session-aggregator.d.ts.map +1 -1
  283. package/dist/session-aggregator.js +48 -9
  284. package/dist/session-aggregator.js.map +1 -1
  285. package/dist/session-registry.d.ts +71 -3
  286. package/dist/session-registry.d.ts.map +1 -1
  287. package/dist/session-registry.js +137 -8
  288. package/dist/session-registry.js.map +1 -1
  289. package/dist/session-timeline-relay.d.ts.map +1 -1
  290. package/dist/session-timeline-relay.js +13 -4
  291. package/dist/session-timeline-relay.js.map +1 -1
  292. package/dist/session-transcript-timeline.d.ts +49 -0
  293. package/dist/session-transcript-timeline.d.ts.map +1 -0
  294. package/dist/session-transcript-timeline.js +276 -0
  295. package/dist/session-transcript-timeline.js.map +1 -0
  296. package/dist/state-machine.d.ts +6 -1
  297. package/dist/state-machine.d.ts.map +1 -1
  298. package/dist/state-machine.js +86 -28
  299. package/dist/state-machine.js.map +1 -1
  300. package/dist/timebox/timebox-daemon-sync.d.ts +19 -0
  301. package/dist/timebox/timebox-daemon-sync.d.ts.map +1 -0
  302. package/dist/timebox/timebox-daemon-sync.js +135 -0
  303. package/dist/timebox/timebox-daemon-sync.js.map +1 -0
  304. package/dist/timebox/timebox-discover.d.ts +19 -0
  305. package/dist/timebox/timebox-discover.d.ts.map +1 -0
  306. package/dist/timebox/timebox-discover.js +87 -0
  307. package/dist/timebox/timebox-discover.js.map +1 -0
  308. package/dist/timebox/timebox-settings.d.ts +32 -0
  309. package/dist/timebox/timebox-settings.d.ts.map +1 -0
  310. package/dist/timebox/timebox-settings.js +80 -0
  311. package/dist/timebox/timebox-settings.js.map +1 -0
  312. package/dist/timeline-store.d.ts +63 -3
  313. package/dist/timeline-store.d.ts.map +1 -1
  314. package/dist/timeline-store.js +292 -14
  315. package/dist/timeline-store.js.map +1 -1
  316. package/dist/timeline-summarizer.d.ts.map +1 -1
  317. package/dist/timeline-summarizer.js +29 -5
  318. package/dist/timeline-summarizer.js.map +1 -1
  319. package/dist/tui/ansi.d.ts +0 -4
  320. package/dist/tui/ansi.d.ts.map +1 -1
  321. package/dist/tui/ansi.js +14 -7
  322. package/dist/tui/ansi.js.map +1 -1
  323. package/dist/tui/dashboard.d.ts +1 -0
  324. package/dist/tui/dashboard.d.ts.map +1 -1
  325. package/dist/tui/dashboard.js +24 -7
  326. package/dist/tui/dashboard.js.map +1 -1
  327. package/dist/tui/renderer.d.ts +36 -0
  328. package/dist/tui/renderer.d.ts.map +1 -1
  329. package/dist/tui/renderer.js +303 -119
  330. package/dist/tui/renderer.js.map +1 -1
  331. package/dist/tui/terrarium.d.ts.map +1 -1
  332. package/dist/tui/terrarium.js +37 -49
  333. package/dist/tui/terrarium.js.map +1 -1
  334. package/dist/types.d.ts +2 -2
  335. package/dist/types.d.ts.map +1 -1
  336. package/dist/types.js +2 -2
  337. package/dist/types.js.map +1 -1
  338. package/dist/usage-api.d.ts.map +1 -1
  339. package/dist/usage-api.js +7 -1
  340. package/dist/usage-api.js.map +1 -1
  341. package/dist/usage-event.d.ts +10 -3
  342. package/dist/usage-event.d.ts.map +1 -1
  343. package/dist/usage-event.js +74 -12
  344. package/dist/usage-event.js.map +1 -1
  345. package/dist/utility-proxy.d.ts.map +1 -1
  346. package/dist/utility-proxy.js +8 -0
  347. package/dist/utility-proxy.js.map +1 -1
  348. package/dist/utils/project-name.d.ts +3 -0
  349. package/dist/utils/project-name.d.ts.map +1 -1
  350. package/dist/utils/project-name.js +44 -2
  351. package/dist/utils/project-name.js.map +1 -1
  352. package/dist/windows-service.d.ts +26 -0
  353. package/dist/windows-service.d.ts.map +1 -0
  354. package/dist/windows-service.js +145 -0
  355. package/dist/windows-service.js.map +1 -0
  356. package/dist/ws-server.d.ts +22 -1
  357. package/dist/ws-server.d.ts.map +1 -1
  358. package/dist/ws-server.js +89 -4
  359. package/dist/ws-server.js.map +1 -1
  360. package/fm-helper/AgentDeckFMHelper.swift +112 -0
  361. package/package.json +9 -3
  362. package/scripts/build-fm-helper.mjs +26 -0
  363. package/LICENSE +0 -21
  364. package/dist/apme/tuner.d.ts +0 -64
  365. package/dist/apme/tuner.d.ts.map +0 -1
  366. package/dist/apme/tuner.js +0 -297
  367. package/dist/apme/tuner.js.map +0 -1
  368. package/dist/d200h/hid-protocol.d.ts +0 -62
  369. package/dist/d200h/hid-protocol.d.ts.map +0 -1
  370. package/dist/d200h/hid-protocol.js +0 -124
  371. package/dist/d200h/hid-protocol.js.map +0 -1
  372. package/dist/d200h/image-renderer.d.ts +0 -36
  373. package/dist/d200h/image-renderer.d.ts.map +0 -1
  374. package/dist/d200h/image-renderer.js +0 -487
  375. package/dist/d200h/image-renderer.js.map +0 -1
  376. package/dist/modules/d200h-module.d.ts +0 -43
  377. package/dist/modules/d200h-module.d.ts.map +0 -1
  378. package/dist/modules/d200h-module.js +0 -360
  379. package/dist/modules/d200h-module.js.map +0 -1
  380. package/dist/modules/d200h-renderer.d.ts +0 -7
  381. package/dist/modules/d200h-renderer.d.ts.map +0 -1
  382. package/dist/modules/d200h-renderer.js +0 -321
  383. package/dist/modules/d200h-renderer.js.map +0 -1
@@ -27,6 +27,7 @@ const CODEX_STATUS_LINE = /[❯›]\s.*(?:gpt-|o\d|codex)[\w.-]*\s.*·.*~/;
27
27
  const APPROVAL_ALLOW = /\bAllow\b.*\bDeny\b|\bapprove\b.*\bdeny\b/i;
28
28
  const APPROVAL_YN = /\(y\)es.*\(n\)o|\[Y\/n\]|\[y\/N\]/i;
29
29
  const APPROVAL_ALWAYS = /Always\s+allow|Allow\s+once/i;
30
+ const CODEX_COMMAND_APPROVAL = /Would you like to run the following command\?|Yes,\s*proceed\s*\(y\)|Yes,\s+and\s+don['’]t\s+ask\s+again|No,\s+and\s+tell\s+Codex|Press enter to confirm or esc to cancel/i;
30
31
  // Tool/command execution indicators
31
32
  const TOOL_RUNNING = /(?:Running|Executing|Ran)(?:\s+in\s+\S+)?:\s*[`"]?(.+?)[`"]?\s*$/m;
32
33
  const FILE_OPERATION = /(?:Reading|Writing|Creating|Deleting|Editing|Patching)\s+(.+)/i;
@@ -40,6 +41,12 @@ const PROJECT_DIR = /[~\/][\w.\-\/]+\/(\w[\w.\-]*)\s*$/m;
40
41
  const SPINNER_DEBOUNCE_MS = 2000;
41
42
  const IDLE_DEBOUNCE_MS = 300;
42
43
  const OPTION_DEBOUNCE_MS = 150;
44
+ // Codex's Ink TUI redraws the screen frequently; the same "Running: cmd" line
45
+ // can land in several PTY chunks within a single tool invocation, producing
46
+ // duplicate tool_action emits. Suppress repeats of the same (tool, args) for
47
+ // 4 s. The window is reset at turn boundaries (idle / synthetic spinner_stop)
48
+ // so the same command run twice in a row across turns still emits twice.
49
+ const TOOL_ACTION_DEDUP_WINDOW_MS = 4000;
43
50
  export class CodexOutputParser extends EventEmitter {
44
51
  buffer = '';
45
52
  spinnerActive = false;
@@ -50,6 +57,8 @@ export class CodexOutputParser extends EventEmitter {
50
57
  modelName = null;
51
58
  seenFirstIdle = false;
52
59
  pendingAnsi = '';
60
+ lastToolKey = null;
61
+ lastToolTs = 0;
53
62
  feed(rawData) {
54
63
  const data = this.pendingAnsi + rawData;
55
64
  this.pendingAnsi = '';
@@ -89,10 +98,12 @@ export class CodexOutputParser extends EventEmitter {
89
98
  this.parseProjectName(chunk);
90
99
  this.parseModelInfo(chunk);
91
100
  // --- Pre-scan ---
101
+ const haystack = this.buffer.slice(-4096);
92
102
  const hasIdlePrompt = IDLE_PROMPT.test(chunk) || CODEX_STATUS_LINE.test(chunk);
93
103
  const hasApproval = APPROVAL_ALLOW.test(chunk) ||
94
104
  APPROVAL_YN.test(chunk) ||
95
- APPROVAL_ALWAYS.test(chunk);
105
+ APPROVAL_ALWAYS.test(chunk) ||
106
+ CODEX_COMMAND_APPROVAL.test(chunk);
96
107
  // --- Spinner + prompt handling ---
97
108
  const hasSpinner = BRAILLE_SPINNERS.test(chunk) || THINKING_TEXT.test(chunk) || CODEX_WORKING_STATUS.test(chunk);
98
109
  // Approval prompt → AWAITING_PERMISSION
@@ -115,7 +126,12 @@ export class CodexOutputParser extends EventEmitter {
115
126
  this.optionTimer = setTimeout(() => {
116
127
  this.optionTimer = null;
117
128
  debug('CodexParser', 'EMIT permission_prompt');
118
- this.emit('permission_prompt', { options: this.extractApprovalOptions(chunk) });
129
+ this.emit('permission_prompt', {
130
+ question: this.extractApprovalQuestion(haystack),
131
+ options: this.extractApprovalOptions(haystack),
132
+ navigable: this.hasNavigableApprovalOptions(haystack),
133
+ cursorIndex: this.extractApprovalCursorIndex(haystack),
134
+ });
119
135
  }, OPTION_DEBOUNCE_MS);
120
136
  return;
121
137
  }
@@ -134,13 +150,17 @@ export class CodexOutputParser extends EventEmitter {
134
150
  debug('CodexParser', 'EMIT spinner_stop (idle detected)');
135
151
  this.emit('spinner_stop');
136
152
  }
137
- // Debounce idle emission
153
+ // Debounce idle emission. `source: 'prompt'` marks this as a genuine
154
+ // idle (the input prompt actually appeared), as opposed to the
155
+ // spinner-timeout synthetic idles emitted below. Only the prompt
156
+ // source is a reliable turn-end signal for the bridge.
138
157
  if (this.idleTimer)
139
158
  clearTimeout(this.idleTimer);
140
159
  this.idleTimer = setTimeout(() => {
141
160
  this.idleTimer = null;
142
- debug('CodexParser', 'EMIT idle');
143
- this.emit('idle');
161
+ debug('CodexParser', 'EMIT idle (prompt)');
162
+ this.resetToolDedup();
163
+ this.emit('idle', { source: 'prompt' });
144
164
  }, IDLE_DEBOUNCE_MS);
145
165
  return;
146
166
  }
@@ -166,7 +186,11 @@ export class CodexOutputParser extends EventEmitter {
166
186
  this.spinnerActive = false;
167
187
  debug('CodexParser', 'EMIT spinner_stop (timeout)');
168
188
  this.emit('spinner_stop');
169
- this.emit('idle');
189
+ this.resetToolDedup();
190
+ // Synthetic idle: spinner data went silent. This often means
191
+ // a tool is running, not that the turn ended. Mark the source
192
+ // so the bridge can distinguish from genuine prompt idles.
193
+ this.emit('idle', { source: 'timeout' });
170
194
  }
171
195
  }, SPINNER_DEBOUNCE_MS);
172
196
  }
@@ -182,41 +206,102 @@ export class CodexOutputParser extends EventEmitter {
182
206
  this.spinnerActive = false;
183
207
  debug('CodexParser', 'EMIT spinner_stop (timeout)');
184
208
  this.emit('spinner_stop');
185
- this.emit('idle');
209
+ this.resetToolDedup();
210
+ this.emit('idle', { source: 'timeout' });
186
211
  }
187
212
  }, SPINNER_DEBOUNCE_MS);
188
213
  }
189
214
  }
190
215
  }
191
- extractApprovalOptions(chunk) {
216
+ extractApprovalOptions(text) {
217
+ const numbered = this.extractNumberedApprovalOptions(text);
218
+ if (numbered.length > 0)
219
+ return numbered;
192
220
  const options = [];
193
- if (/Allow\s+once/i.test(chunk))
194
- options.push('Allow once');
195
- if (/Always\s+allow/i.test(chunk))
196
- options.push('Always allow');
197
- if (/\bDeny\b/i.test(chunk))
198
- options.push('Deny');
199
- if (/\(y\)es/i.test(chunk))
200
- options.push('Yes');
201
- if (/\(n\)o/i.test(chunk))
202
- options.push('No');
203
- if (options.length === 0)
204
- options.push('Allow', 'Deny');
221
+ const push = (label, shortcut) => {
222
+ options.push({ index: options.length, label, shortcut });
223
+ };
224
+ if (/Allow\s+once/i.test(text))
225
+ push('Allow once', 'y');
226
+ if (/Always\s+allow/i.test(text))
227
+ push('Always allow', 'a');
228
+ if (/\bDeny\b/i.test(text))
229
+ push('Deny', 'n');
230
+ if (/\(y\)es/i.test(text))
231
+ push('Yes', 'y');
232
+ if (/\(n\)o/i.test(text))
233
+ push('No', 'n');
234
+ if (options.length === 0) {
235
+ push('Allow', 'y');
236
+ push('Deny', 'n');
237
+ }
205
238
  return options;
206
239
  }
240
+ extractNumberedApprovalOptions(text) {
241
+ const options = [];
242
+ for (const rawLine of text.split(/\r?\n/)) {
243
+ const line = rawLine.replace(/\s+/g, ' ').trim();
244
+ const match = line.match(/^(?:[›❯>]\s*)?(\d+)\.\s+(.+)$/);
245
+ if (!match)
246
+ continue;
247
+ const index = Number(match[1]) - 1;
248
+ if (!Number.isFinite(index) || index < 0)
249
+ continue;
250
+ let label = match[2].trim();
251
+ const shortcut = label.match(/\((y|p|n|esc)\)\s*$/i)?.[1]?.toLowerCase();
252
+ label = label
253
+ .replace(/\s*\((?:y|p|n|esc)\)\s*$/i, '')
254
+ .replace(/\s+/g, ' ')
255
+ .trim();
256
+ if (label)
257
+ options.push({ index, label, shortcut });
258
+ }
259
+ return options.sort((a, b) => a.index - b.index);
260
+ }
261
+ hasNavigableApprovalOptions(text) {
262
+ return /^\s*[›❯>]\s*\d+\.\s+/m.test(text);
263
+ }
264
+ extractApprovalCursorIndex(text) {
265
+ const line = text.split(/\r?\n/).find((l) => /^\s*[›❯>]\s*\d+\.\s+/.test(l));
266
+ const match = line?.match(/^\s*[›❯>]\s*(\d+)\.\s+/);
267
+ const index = match ? Number(match[1]) - 1 : 0;
268
+ return Number.isFinite(index) && index >= 0 ? index : 0;
269
+ }
270
+ extractApprovalQuestion(text) {
271
+ const commandMatch = text.match(/^\s*\$\s+(.+)$/m);
272
+ if (commandMatch)
273
+ return commandMatch[1].trim();
274
+ if (/Would you like to run the following command\?/i.test(text)) {
275
+ return 'Run command?';
276
+ }
277
+ return null;
278
+ }
207
279
  parseToolAction(chunk) {
208
280
  const runMatch = chunk.match(TOOL_RUNNING);
209
281
  if (runMatch) {
210
- debug('CodexParser', `EMIT tool_action: ${runMatch[1]}`);
211
- this.emit('tool_action', { tool: 'shell', args: runMatch[1] });
282
+ this.emitToolAction('shell', runMatch[1]);
212
283
  return;
213
284
  }
214
285
  const fileMatch = chunk.match(FILE_OPERATION);
215
286
  if (fileMatch) {
216
- const op = chunk.match(/^(Reading|Writing|Creating|Deleting|Editing|Patching)/i)?.[1] ?? 'file';
217
- debug('CodexParser', `EMIT tool_action: ${op} ${fileMatch[1]}`);
218
- this.emit('tool_action', { tool: op.toLowerCase(), args: fileMatch[1] });
287
+ const op = (chunk.match(/^(Reading|Writing|Creating|Deleting|Editing|Patching)/i)?.[1] ?? 'file').toLowerCase();
288
+ this.emitToolAction(op, fileMatch[1]);
289
+ }
290
+ }
291
+ emitToolAction(tool, args) {
292
+ const key = `${tool}${args.trim()}`;
293
+ const now = Date.now();
294
+ if (this.lastToolKey === key && now - this.lastToolTs < TOOL_ACTION_DEDUP_WINDOW_MS) {
295
+ return;
219
296
  }
297
+ this.lastToolKey = key;
298
+ this.lastToolTs = now;
299
+ debug('CodexParser', `EMIT tool_action: ${tool} ${args}`);
300
+ this.emit('tool_action', { tool, args, toolName: tool, toolArgs: args });
301
+ }
302
+ resetToolDedup() {
303
+ this.lastToolKey = null;
304
+ this.lastToolTs = 0;
220
305
  }
221
306
  parseProjectName(chunk) {
222
307
  if (this.projectName)
@@ -1 +1 @@
1
- {"version":3,"file":"codex-output-parser.js","sourceRoot":"","sources":["../src/codex-output-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-output-parser.js","sourceRoot":"","sources":["../src/codex-output-parser.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;;;;;;;GASG;AAEH,6CAA6C;AAC7C,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAExC,8BAA8B;AAC9B,6FAA6F;AAC7F,MAAM,aAAa,GAAG,yDAAyD,CAAC;AAChF,0DAA0D;AAC1D,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAExD,gEAAgE;AAChE,wEAAwE;AACxE,MAAM,WAAW,GAAG,cAAc,CAAC;AACnC,qFAAqF;AACrF,MAAM,iBAAiB,GAAG,2CAA2C,CAAC;AAEtE,mFAAmF;AACnF,MAAM,cAAc,GAAG,4CAA4C,CAAC;AACpE,MAAM,WAAW,GAAG,oCAAoC,CAAC;AACzD,MAAM,eAAe,GAAG,8BAA8B,CAAC;AACvD,MAAM,sBAAsB,GAC1B,4KAA4K,CAAC;AAE/K,oCAAoC;AACpC,MAAM,YAAY,GAAG,mEAAmE,CAAC;AACzF,MAAM,cAAc,GAAG,gEAAgE,CAAC;AAExF,6DAA6D;AAC7D,kDAAkD;AAClD,MAAM,UAAU,GAAG,+DAA+D,CAAC;AACnF,MAAM,qBAAqB,GAAG,iEAAiE,CAAC;AAEhG,4BAA4B;AAC5B,MAAM,OAAO,GAAG,iDAAiD,CAAC;AAClE,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEzC,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACzC,MAAM,GAAG,EAAE,CAAC;IACZ,aAAa,GAAG,KAAK,CAAC;IACtB,YAAY,GAAyC,IAAI,CAAC;IAC1D,SAAS,GAAyC,IAAI,CAAC;IACvD,WAAW,GAAyC,IAAI,CAAC;IACzD,WAAW,GAAkB,IAAI,CAAC;IAClC,SAAS,GAAkB,IAAI,CAAC;IAChC,aAAa,GAAG,KAAK,CAAC;IACtB,WAAW,GAAG,EAAE,CAAC;IACjB,WAAW,GAAkB,IAAI,CAAC;IAClC,UAAU,GAAG,CAAC,CAAC;IAEvB,IAAI,CAAC,OAAe;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,0CAA0C;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAClC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,MAAM,MAAM,GAAG,OAAO;aACnB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;aAC3B,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC;aACxC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QAErB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,aAAa,EAAE,QAAQ,KAAK,CAAC,MAAM,OAAO,OAAO,GAAG,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,kCAAkC;QAClC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/E,MAAM,WAAW,GACf,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YACvB,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAErC,oCAAoC;QACpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjH,wCAAwC;QACxC,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAAC,CAAC;YACrF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAAC,CAAC;YAE5E,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,IAAI,CAAC,WAAW;gBAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,KAAK,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBAC7B,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;oBAChD,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;oBAC9C,SAAS,EAAE,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;oBACrD,WAAW,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;iBACvD,CAAC,CAAC;YACL,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,uBAAuB;QACvB,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,KAAK,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;YACrD,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAAC,CAAC;YAErF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,KAAK,CAAC,aAAa,EAAE,mCAAmC,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC5B,CAAC;YAED,qEAAqE;YACrE,+DAA+D;YAC/D,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,IAAI,CAAC,SAAS;gBAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;gBAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC,EAAE,gBAAgB,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,iCAAiC;QACjC,IAAI,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAAC,CAAC;YAE5E,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,+DAA+D;gBAC/D,IAAI,IAAI,CAAC,YAAY;oBAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvD,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;oBAClC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC1B,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;wBAC3C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBAC3B,6DAA6D;wBAC7D,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;4BAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;4BACzB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gCACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gCAC3B,KAAK,CAAC,aAAa,EAAE,6BAA6B,CAAC,CAAC;gCACpD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gCAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;gCACtB,6DAA6D;gCAC7D,8DAA8D;gCAC9D,2DAA2D;gCAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;4BAC3C,CAAC;wBACH,CAAC,EAAE,mBAAmB,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC,EAAE,GAAG,CAAC,CAAC;YACV,CAAC;iBAAM,CAAC;gBACN,0CAA0C;gBAC1C,IAAI,IAAI,CAAC,YAAY;oBAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvD,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;oBAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;wBAC3B,KAAK,CAAC,aAAa,EAAE,6BAA6B,CAAC,CAAC;wBACpD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,IAAY;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;QAEzC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,QAAiB,EAAE,EAAE;YAChD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC;QACF,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACxD,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,8BAA8B,CAAC,IAAY;QACjD,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;gBAAE,SAAS;YACnD,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;YACzE,KAAK,GAAG,KAAK;iBACV,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;iBACxC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,IAAI,EAAE,CAAC;YACV,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAEO,2BAA2B,CAAC,IAAY;QAC9C,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEO,0BAA0B,CAAC,IAAY;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,uBAAuB,CAAC,IAAY;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,gDAAgD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,eAAe,CAAC,KAAa;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wDAAwD,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAChH,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAY,EAAE,IAAY;QAC/C,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,WAAW,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,2BAA2B,EAAE,CAAC;YACpF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,KAAK,CAAC,aAAa,EAAE,qBAAqB,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACpC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,KAAK,CAAC,aAAa,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,KAAK,CAAC,aAAa,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC5E,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,KAAK,CAAC,aAAa,EAAE,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { CodexRateLimits } from '@agentdeck/shared';
2
+ /**
3
+ * Read the newest usable Codex rate-limits snapshot from a sessions tree.
4
+ * Exported (root-injectable) for unit testing; `readCodexRateLimits` wraps this
5
+ * with mtime caching against the live `~/.codex/sessions` tree.
6
+ */
7
+ export declare function pickCodexRateLimits(root?: string): CodexRateLimits | null;
8
+ /**
9
+ * Parse the newest `rate_limits` snapshot out of a chunk of rollout JSONL text
10
+ * (typically the file tail). Scans lines from the end so the most recent
11
+ * snapshot wins. Exported for unit testing. Returns null when no usable
12
+ * rate-limit line is found.
13
+ */
14
+ export declare function parseCodexRateLimitsFromText(text: string): CodexRateLimits | null;
15
+ export declare function readCodexRateLimits(): CodexRateLimits | null;
16
+ //# sourceMappingURL=codex-rate-limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rate-limits.d.ts","sourceRoot":"","sources":["../src/codex-rate-limits.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,eAAe,EAAwB,MAAM,mBAAmB,CAAC;AAkI7F;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,MAA8B,GAAG,eAAe,GAAG,IAAI,CAEhG;AA+CD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA4BjF;AASD,wBAAgB,mBAAmB,IAAI,eAAe,GAAG,IAAI,CAU5D"}
@@ -0,0 +1,197 @@
1
+ import fs from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ const defaultSessionsRoot = () => path.join(os.homedir(), '.codex', 'sessions');
5
+ /** List immediate subdirectory names of `dir`, sorted newest-first (numeric,
6
+ * so "10" > "9"). Returns [] on any read error. */
7
+ function sortedSubdirs(dir) {
8
+ try {
9
+ return fs
10
+ .readdirSync(dir, { withFileTypes: true })
11
+ .filter((e) => e.isDirectory())
12
+ .map((e) => e.name)
13
+ .sort((a, b) => b.localeCompare(a, undefined, { numeric: true }));
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ }
19
+ /** Collect the newest `maxDays` day-directories under a year/month/day tree,
20
+ * walking back across month and year boundaries when a level runs short, so a
21
+ * session that spans midnight (whose rollout stays in the older day-dir) is
22
+ * still reachable. Returns absolute day-directory paths, newest-first. */
23
+ function newestDayDirs(root, maxDays) {
24
+ const out = [];
25
+ for (const year of sortedSubdirs(root)) {
26
+ const yearDir = path.join(root, year);
27
+ for (const month of sortedSubdirs(yearDir)) {
28
+ const monthDir = path.join(yearDir, month);
29
+ for (const day of sortedSubdirs(monthDir)) {
30
+ out.push(path.join(monthDir, day));
31
+ if (out.length >= maxDays)
32
+ return out;
33
+ }
34
+ }
35
+ }
36
+ return out;
37
+ }
38
+ /** Gather rollout files across the newest few day-directories and return them
39
+ * sorted by mtime descending (capped). Selecting by mtime *across* day-dirs —
40
+ * not just within the single newest day-dir — is what lets a still-appending
41
+ * session started on a previous day win over a fresh-but-empty session that
42
+ * merely created a newer day-directory. */
43
+ function candidateRolloutFiles(root, maxDays = 3, maxFiles = 6) {
44
+ if (!fs.existsSync(root))
45
+ return [];
46
+ const files = [];
47
+ for (const dayDir of newestDayDirs(root, maxDays)) {
48
+ let entries;
49
+ try {
50
+ entries = fs.readdirSync(dayDir);
51
+ }
52
+ catch {
53
+ continue;
54
+ }
55
+ for (const f of entries) {
56
+ if (!f.startsWith('rollout-') || !f.endsWith('.jsonl'))
57
+ continue;
58
+ const full = path.join(dayDir, f);
59
+ try {
60
+ files.push({ full, mtime: fs.statSync(full).mtimeMs });
61
+ }
62
+ catch {
63
+ /* ignore unreadable entry */
64
+ }
65
+ }
66
+ }
67
+ files.sort((a, b) => b.mtime - a.mtime);
68
+ return files.slice(0, maxFiles);
69
+ }
70
+ /** Scan candidates newest-first and return the first that yields a usable
71
+ * rate-limits snapshot. Falls through past a newer file that carries no
72
+ * `rate_limits` line (e.g. a just-started session) to an older active one. */
73
+ function parseFirstUsable(candidates) {
74
+ for (const { full, mtime } of candidates) {
75
+ const tail = readTail(full);
76
+ const parsed = tail ? parseCodexRateLimitsFromText(tail) : null;
77
+ if (parsed) {
78
+ // Stamp the rollout mtime as a secondary freshness anchor (the per-window
79
+ // `stale` flag set in buildUsageEvent is authoritative).
80
+ parsed.capturedAt = new Date(mtime).toISOString();
81
+ return parsed;
82
+ }
83
+ }
84
+ return null;
85
+ }
86
+ /**
87
+ * Read the newest usable Codex rate-limits snapshot from a sessions tree.
88
+ * Exported (root-injectable) for unit testing; `readCodexRateLimits` wraps this
89
+ * with mtime caching against the live `~/.codex/sessions` tree.
90
+ */
91
+ export function pickCodexRateLimits(root = defaultSessionsRoot()) {
92
+ return parseFirstUsable(candidateRolloutFiles(root));
93
+ }
94
+ /** Read the trailing bytes of a file without slurping the whole rollout (these
95
+ * can grow to many MB). The newest `rate_limits` line is always near the end. */
96
+ function readTail(file, maxBytes = 262144) {
97
+ let fd = null;
98
+ try {
99
+ fd = fs.openSync(file, 'r');
100
+ const size = fs.fstatSync(fd).size;
101
+ const start = Math.max(0, size - maxBytes);
102
+ const len = size - start;
103
+ const buf = Buffer.alloc(len);
104
+ fs.readSync(fd, buf, 0, len, start);
105
+ return buf.toString('utf8');
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ finally {
111
+ if (fd !== null)
112
+ try {
113
+ fs.closeSync(fd);
114
+ }
115
+ catch { /* ignore */ }
116
+ }
117
+ }
118
+ function toCredits(raw) {
119
+ if (!raw || (typeof raw.has_credits !== 'boolean' && typeof raw.unlimited !== 'boolean' && raw.balance == null)) {
120
+ return undefined;
121
+ }
122
+ return {
123
+ hasCredits: raw.has_credits === true,
124
+ unlimited: raw.unlimited === true,
125
+ balance: raw.balance != null ? String(raw.balance) : undefined,
126
+ };
127
+ }
128
+ function toWindow(raw) {
129
+ if (!raw || typeof raw.used_percent !== 'number' || typeof raw.window_minutes !== 'number') {
130
+ return undefined;
131
+ }
132
+ const resetsAt = typeof raw.resets_at === 'number' && raw.resets_at > 0
133
+ ? new Date(raw.resets_at * 1000).toISOString()
134
+ : undefined;
135
+ return {
136
+ usedPercent: Math.min(100, Math.max(0, raw.used_percent)),
137
+ windowMinutes: raw.window_minutes,
138
+ resetsAt,
139
+ };
140
+ }
141
+ /**
142
+ * Parse the newest `rate_limits` snapshot out of a chunk of rollout JSONL text
143
+ * (typically the file tail). Scans lines from the end so the most recent
144
+ * snapshot wins. Exported for unit testing. Returns null when no usable
145
+ * rate-limit line is found.
146
+ */
147
+ export function parseCodexRateLimitsFromText(text) {
148
+ const lines = text.split('\n');
149
+ for (let i = lines.length - 1; i >= 0; i--) {
150
+ const line = lines[i].trim();
151
+ if (!line || !line.includes('rate_limits'))
152
+ continue;
153
+ try {
154
+ const obj = JSON.parse(line);
155
+ const rl = obj?.payload?.rate_limits;
156
+ if (!rl)
157
+ continue;
158
+ const primary = toWindow(rl.primary);
159
+ const secondary = toWindow(rl.secondary);
160
+ const credits = toCredits(rl.credits);
161
+ const limitId = typeof rl.limit_id === 'string' ? rl.limit_id : undefined;
162
+ // Credit-based plans (e.g. limit_id "premium") report null windows and
163
+ // convey usage via the credits block instead — keep those snapshots too.
164
+ if (!primary && !secondary && !credits && !limitId)
165
+ continue;
166
+ return {
167
+ primary,
168
+ secondary,
169
+ planType: typeof rl.plan_type === 'string' ? rl.plan_type : undefined,
170
+ limitId,
171
+ credits,
172
+ };
173
+ }
174
+ catch {
175
+ // Possibly a truncated first line from the tail window; keep scanning.
176
+ }
177
+ }
178
+ return null;
179
+ }
180
+ // Cache keyed on the newest candidate rollout's path + mtime so repeated usage
181
+ // polls don't re-scan unchanged files. Keying on the newest candidate (not the
182
+ // one that yielded the snapshot) means any fresh write to the active session
183
+ // invalidates the cache and re-scans.
184
+ let cacheKey = '';
185
+ let cacheValue = null;
186
+ export function readCodexRateLimits() {
187
+ const candidates = candidateRolloutFiles(defaultSessionsRoot());
188
+ const newest = candidates[0];
189
+ const key = newest ? `${newest.full}:${newest.mtime}` : '';
190
+ if (key && key === cacheKey)
191
+ return cacheValue;
192
+ const parsed = parseFirstUsable(candidates);
193
+ cacheKey = key;
194
+ cacheValue = parsed;
195
+ return parsed;
196
+ }
197
+ //# sourceMappingURL=codex-rate-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rate-limits.js","sourceRoot":"","sources":["../src/codex-rate-limits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Extract a Codex turn's final response text from its rollout JSONL.
3
+ *
4
+ * Why this exists: observed (direct-run) Codex sessions reach the daemon
5
+ * only through codex_* lifecycle hooks, and `codex_stop`'s stdin payload
6
+ * does not reliably carry the assistant text (the Swift daemon probes
7
+ * `last_assistant_message`/`response`/`output`/`result` and usually finds
8
+ * nothing). The rollout Codex writes under `~/.codex/sessions/` DOES hold
9
+ * it: `event_msg` records of type `agent_message` (`payload.message`) and,
10
+ * at turn end, `task_complete` (`payload.last_agent_message`). This is the
11
+ * Codex counterpart of `lastAssistantTextFromTranscript` for Claude —
12
+ * hooks stay the boundary signal, the agent's own on-disk log supplies the
13
+ * body, and nothing parses terminal output.
14
+ *
15
+ * Self-contained and read-only on purpose (mirrors
16
+ * session-transcript-timeline.ts): never throws, returns '' when nothing
17
+ * is found. Locating scans recent `~/.codex/sessions/<y>/<m>/<d>/` dirs
18
+ * newest-first for `rollout-*-<sessionId>.jsonl` — the filename embeds the
19
+ * session uuid, and scanning across day dirs (bounded) covers turns that
20
+ * roll past midnight (memory: cross-day rollout selection).
21
+ */
22
+ /** Locate `rollout-*-<sessionId>.jsonl` under the newest day dirs. */
23
+ export declare function locateCodexRollout(sessionId: string, sessionsRoot?: string): string | null;
24
+ /**
25
+ * Parse the rollout tail for the turn's final response, newest record
26
+ * first. `task_complete.last_agent_message` wins (authoritative turn
27
+ * close); otherwise the last `agent_message` body — Codex emits
28
+ * mid-turn `commentary` messages too, and the final one is the reply.
29
+ */
30
+ export declare function lastAgentMessageFromCodexRollout(sessionId: string, sessionsRoot?: string): string;
31
+ //# sourceMappingURL=codex-rollout-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rollout-response.d.ts","sourceRoot":"","sources":["../src/codex-rollout-response.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA0BH,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmB1F;AAuBD;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAiCjG"}