tailii-host 0.1.1 → 0.4.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 (354) hide show
  1. package/README.md +28 -10
  2. package/dist/{broker.d.ts → approval/broker.d.ts} +9 -5
  3. package/dist/{broker.js → approval/broker.js} +42 -6
  4. package/dist/approval/broker.js.map +1 -0
  5. package/dist/{hook.d.ts → approval/hook.d.ts} +48 -7
  6. package/dist/{hook.js → approval/hook.js} +359 -50
  7. package/dist/approval/hook.js.map +1 -0
  8. package/dist/backend/herdr.d.ts +260 -0
  9. package/dist/backend/herdr.js +838 -0
  10. package/dist/backend/herdr.js.map +1 -0
  11. package/dist/backend/sessionBackend.d.ts +81 -0
  12. package/dist/backend/sessionBackend.js +114 -0
  13. package/dist/backend/sessionBackend.js.map +1 -0
  14. package/dist/backend/tmux.d.ts +125 -0
  15. package/dist/backend/tmux.js +392 -0
  16. package/dist/backend/tmux.js.map +1 -0
  17. package/dist/{chatTailController.d.ts → chat/chatTailController.d.ts} +29 -6
  18. package/dist/{chatTailController.js → chat/chatTailController.js} +94 -18
  19. package/dist/chat/chatTailController.js.map +1 -0
  20. package/dist/{imageService.d.ts → chat/imageService.d.ts} +12 -1
  21. package/dist/{imageService.js → chat/imageService.js} +39 -11
  22. package/dist/chat/imageService.js.map +1 -0
  23. package/dist/chat/remoteQuestionMonitor.d.ts +27 -0
  24. package/dist/chat/remoteQuestionMonitor.js +128 -0
  25. package/dist/chat/remoteQuestionMonitor.js.map +1 -0
  26. package/dist/chat/subagentTailer.d.ts +30 -0
  27. package/dist/chat/subagentTailer.js +704 -0
  28. package/dist/chat/subagentTailer.js.map +1 -0
  29. package/dist/chat/subagentTranscript.d.ts +20 -0
  30. package/dist/chat/subagentTranscript.js +273 -0
  31. package/dist/chat/subagentTranscript.js.map +1 -0
  32. package/dist/{transcriptTailer.d.ts → chat/transcriptTailer.d.ts} +12 -1
  33. package/dist/{transcriptTailer.js → chat/transcriptTailer.js} +183 -10
  34. package/dist/chat/transcriptTailer.js.map +1 -0
  35. package/dist/cli.js +24 -10
  36. package/dist/cli.js.map +1 -1
  37. package/dist/codex/codexAccountUsage.d.ts +22 -0
  38. package/dist/codex/codexAccountUsage.js +128 -0
  39. package/dist/codex/codexAccountUsage.js.map +1 -0
  40. package/dist/codex/codexAppServer.d.ts +166 -0
  41. package/dist/codex/codexAppServer.js +1297 -0
  42. package/dist/codex/codexAppServer.js.map +1 -0
  43. package/dist/codex/codexNativeTurnController.d.ts +153 -0
  44. package/dist/codex/codexNativeTurnController.js +673 -0
  45. package/dist/codex/codexNativeTurnController.js.map +1 -0
  46. package/dist/codex/codexRolloutTailer.d.ts +100 -0
  47. package/dist/codex/codexRolloutTailer.js +568 -0
  48. package/dist/codex/codexRolloutTailer.js.map +1 -0
  49. package/dist/{codexSessionStore.d.ts → codex/codexSessionStore.d.ts} +10 -2
  50. package/dist/{codexSessionStore.js → codex/codexSessionStore.js} +184 -15
  51. package/dist/codex/codexSessionStore.js.map +1 -0
  52. package/dist/codex/codexSubagentTracker.d.ts +21 -0
  53. package/dist/codex/codexSubagentTracker.js +281 -0
  54. package/dist/codex/codexSubagentTracker.js.map +1 -0
  55. package/dist/codex/codexToolActivity.d.ts +69 -0
  56. package/dist/codex/codexToolActivity.js +425 -0
  57. package/dist/codex/codexToolActivity.js.map +1 -0
  58. package/dist/{codexUsage.d.ts → codex/codexUsage.d.ts} +1 -1
  59. package/dist/{codexUsage.js → codex/codexUsage.js} +19 -26
  60. package/dist/codex/codexUsage.js.map +1 -0
  61. package/dist/commands/doctor.d.ts +65 -0
  62. package/dist/commands/doctor.js +425 -0
  63. package/dist/commands/doctor.js.map +1 -0
  64. package/dist/{hookSettings.d.ts → commands/hookSettings.d.ts} +14 -1
  65. package/dist/{hookSettings.js → commands/hookSettings.js} +96 -12
  66. package/dist/commands/hookSettings.js.map +1 -0
  67. package/dist/{kick.js → commands/kick.js} +16 -1
  68. package/dist/commands/kick.js.map +1 -0
  69. package/dist/{launch.d.ts → commands/launch.d.ts} +67 -5
  70. package/dist/commands/launch.js +716 -0
  71. package/dist/commands/launch.js.map +1 -0
  72. package/dist/commands/legacyHomeMigration.js.map +1 -0
  73. package/dist/{pairingCode.d.ts → commands/pairingCode.d.ts} +29 -2
  74. package/dist/{pairingCode.js → commands/pairingCode.js} +120 -11
  75. package/dist/commands/pairingCode.js.map +1 -0
  76. package/dist/{pushTokenCommand.d.ts → commands/pushTokenCommand.d.ts} +1 -1
  77. package/dist/{pushTokenCommand.js → commands/pushTokenCommand.js} +2 -2
  78. package/dist/commands/pushTokenCommand.js.map +1 -0
  79. package/dist/commands/selfUpdate.d.ts +71 -0
  80. package/dist/commands/selfUpdate.js +536 -0
  81. package/dist/commands/selfUpdate.js.map +1 -0
  82. package/dist/{setup.d.ts → commands/setup.d.ts} +17 -6
  83. package/dist/{setup.js → commands/setup.js} +133 -75
  84. package/dist/commands/setup.js.map +1 -0
  85. package/dist/engine/context.d.ts +145 -0
  86. package/dist/engine/context.js +184 -0
  87. package/dist/engine/context.js.map +1 -0
  88. package/dist/engine/engine.d.ts +121 -0
  89. package/dist/engine/engine.js +808 -0
  90. package/dist/engine/engine.js.map +1 -0
  91. package/dist/engine/handlers/accountUsage.d.ts +53 -0
  92. package/dist/engine/handlers/accountUsage.js +203 -0
  93. package/dist/engine/handlers/accountUsage.js.map +1 -0
  94. package/dist/engine/handlers/claudeModels.d.ts +2 -0
  95. package/dist/engine/handlers/claudeModels.js +23 -0
  96. package/dist/engine/handlers/claudeModels.js.map +1 -0
  97. package/dist/engine/handlers/codex.d.ts +2 -0
  98. package/dist/engine/handlers/codex.js +97 -0
  99. package/dist/engine/handlers/codex.js.map +1 -0
  100. package/dist/engine/handlers/conversation.d.ts +2 -0
  101. package/dist/engine/handlers/conversation.js +259 -0
  102. package/dist/engine/handlers/conversation.js.map +1 -0
  103. package/dist/engine/handlers/core.d.ts +2 -0
  104. package/dist/engine/handlers/core.js +66 -0
  105. package/dist/engine/handlers/core.js.map +1 -0
  106. package/dist/engine/handlers/git.d.ts +2 -0
  107. package/dist/engine/handlers/git.js +127 -0
  108. package/dist/engine/handlers/git.js.map +1 -0
  109. package/dist/engine/handlers/index.d.ts +2 -0
  110. package/dist/engine/handlers/index.js +34 -0
  111. package/dist/engine/handlers/index.js.map +1 -0
  112. package/dist/engine/handlers/mode.d.ts +2 -0
  113. package/dist/engine/handlers/mode.js +194 -0
  114. package/dist/engine/handlers/mode.js.map +1 -0
  115. package/dist/engine/handlers/officialApps.d.ts +2 -0
  116. package/dist/engine/handlers/officialApps.js +79 -0
  117. package/dist/engine/handlers/officialApps.js.map +1 -0
  118. package/dist/engine/handlers/preview.d.ts +2 -0
  119. package/dist/engine/handlers/preview.js +59 -0
  120. package/dist/engine/handlers/preview.js.map +1 -0
  121. package/dist/engine/handlers/selfUpdate.d.ts +2 -0
  122. package/dist/engine/handlers/selfUpdate.js +52 -0
  123. package/dist/engine/handlers/selfUpdate.js.map +1 -0
  124. package/dist/engine/handlers/session.d.ts +2 -0
  125. package/dist/engine/handlers/session.js +385 -0
  126. package/dist/engine/handlers/session.js.map +1 -0
  127. package/dist/engine/handlers/usage.d.ts +2 -0
  128. package/dist/engine/handlers/usage.js +96 -0
  129. package/dist/engine/handlers/usage.js.map +1 -0
  130. package/dist/engine/handlers/workspace.d.ts +2 -0
  131. package/dist/engine/handlers/workspace.js +110 -0
  132. package/dist/engine/handlers/workspace.js.map +1 -0
  133. package/dist/engine/slashCommands.d.ts +3 -0
  134. package/dist/engine/slashCommands.js +211 -0
  135. package/dist/engine/slashCommands.js.map +1 -0
  136. package/dist/hub/engineRelaySocket.d.ts +58 -0
  137. package/dist/hub/engineRelaySocket.js +161 -0
  138. package/dist/hub/engineRelaySocket.js.map +1 -0
  139. package/dist/hub/hubClient.d.ts +28 -0
  140. package/dist/hub/hubClient.js +187 -0
  141. package/dist/hub/hubClient.js.map +1 -0
  142. package/dist/hub/hubDaemon.d.ts +69 -0
  143. package/dist/hub/hubDaemon.js +466 -0
  144. package/dist/hub/hubDaemon.js.map +1 -0
  145. package/dist/hub/hubProtocol.d.ts +161 -0
  146. package/dist/hub/hubProtocol.js +379 -0
  147. package/dist/hub/hubProtocol.js.map +1 -0
  148. package/dist/hub/panePreviewPump.d.ts +65 -0
  149. package/dist/hub/panePreviewPump.js +187 -0
  150. package/dist/hub/panePreviewPump.js.map +1 -0
  151. package/dist/hub/questionInjection.d.ts +19 -0
  152. package/dist/hub/questionInjection.js +126 -0
  153. package/dist/hub/questionInjection.js.map +1 -0
  154. package/dist/hub/reaper.d.ts +74 -0
  155. package/dist/hub/reaper.js +333 -0
  156. package/dist/hub/reaper.js.map +1 -0
  157. package/dist/hub/sessionHub.d.ts +203 -0
  158. package/dist/hub/sessionHub.js +1862 -0
  159. package/dist/hub/sessionHub.js.map +1 -0
  160. package/dist/protocol/common.d.ts +18 -0
  161. package/dist/protocol/common.js +78 -0
  162. package/dist/protocol/common.js.map +1 -0
  163. package/dist/protocol/decode.d.ts +3 -0
  164. package/dist/protocol/decode.js +1058 -0
  165. package/dist/protocol/decode.js.map +1 -0
  166. package/dist/protocol/encode.d.ts +3 -0
  167. package/dist/protocol/encode.js +84 -0
  168. package/dist/protocol/encode.js.map +1 -0
  169. package/dist/protocol/messages.d.ts +1025 -0
  170. package/dist/protocol/messages.js +8 -0
  171. package/dist/protocol/messages.js.map +1 -0
  172. package/dist/protocol.d.ts +4 -329
  173. package/dist/protocol.js +13 -531
  174. package/dist/protocol.js.map +1 -1
  175. package/dist/push/apnsConfigStore.js.map +1 -0
  176. package/dist/push/apnsJwtProvider.js.map +1 -0
  177. package/dist/{apnsSender.js.map → push/apnsSender.js.map} +1 -1
  178. package/dist/{approvalPushNotifier.js → push/approvalPushNotifier.js} +1 -1
  179. package/dist/push/approvalPushNotifier.js.map +1 -0
  180. package/dist/push/deviceTokenStore.js.map +1 -0
  181. package/dist/{pushTypes.js → push/pushTypes.js} +1 -1
  182. package/dist/push/pushTypes.js.map +1 -0
  183. package/dist/push/sendLog.js.map +1 -0
  184. package/dist/services/accountIdentity.d.ts +44 -0
  185. package/dist/services/accountIdentity.js +184 -0
  186. package/dist/services/accountIdentity.js.map +1 -0
  187. package/dist/services/claudeCredentialRefresh.d.ts +30 -0
  188. package/dist/services/claudeCredentialRefresh.js +345 -0
  189. package/dist/services/claudeCredentialRefresh.js.map +1 -0
  190. package/dist/services/claudeModelCatalog.d.ts +21 -0
  191. package/dist/services/claudeModelCatalog.js +181 -0
  192. package/dist/services/claudeModelCatalog.js.map +1 -0
  193. package/dist/{dirLister.d.ts → services/dirLister.d.ts} +9 -4
  194. package/dist/services/dirLister.js +169 -0
  195. package/dist/services/dirLister.js.map +1 -0
  196. package/dist/services/fileService.d.ts +10 -0
  197. package/dist/services/fileService.js +123 -0
  198. package/dist/services/fileService.js.map +1 -0
  199. package/dist/services/gitService.d.ts +79 -0
  200. package/dist/services/gitService.js +648 -0
  201. package/dist/services/gitService.js.map +1 -0
  202. package/dist/services/hostVersions.d.ts +38 -0
  203. package/dist/services/hostVersions.js +120 -0
  204. package/dist/services/hostVersions.js.map +1 -0
  205. package/dist/services/officialApps.d.ts +148 -0
  206. package/dist/services/officialApps.js +1079 -0
  207. package/dist/services/officialApps.js.map +1 -0
  208. package/dist/services/planUsageFetcher.d.ts +119 -0
  209. package/dist/services/planUsageFetcher.js +357 -0
  210. package/dist/services/planUsageFetcher.js.map +1 -0
  211. package/dist/services/previewServer.d.ts +31 -0
  212. package/dist/services/previewServer.js +233 -0
  213. package/dist/services/previewServer.js.map +1 -0
  214. package/dist/services/quicGateway.d.ts +143 -0
  215. package/dist/services/quicGateway.js +292 -0
  216. package/dist/services/quicGateway.js.map +1 -0
  217. package/dist/services/serveService.d.ts +50 -0
  218. package/dist/services/serveService.js +302 -0
  219. package/dist/services/serveService.js.map +1 -0
  220. package/dist/services/usageAggregator.js.map +1 -0
  221. package/dist/sessions/claudeSessionStore.d.ts +80 -0
  222. package/dist/sessions/claudeSessionStore.js +477 -0
  223. package/dist/sessions/claudeSessionStore.js.map +1 -0
  224. package/dist/sessions/heartbeat.d.ts +24 -0
  225. package/dist/sessions/heartbeat.js +86 -0
  226. package/dist/sessions/heartbeat.js.map +1 -0
  227. package/dist/sessions/liveSessionJoin.d.ts +20 -0
  228. package/dist/sessions/liveSessionJoin.js +80 -0
  229. package/dist/sessions/liveSessionJoin.js.map +1 -0
  230. package/dist/sessions/sessionActivityProvider.d.ts +14 -0
  231. package/dist/sessions/sessionActivityProvider.js +57 -0
  232. package/dist/sessions/sessionActivityProvider.js.map +1 -0
  233. package/dist/{sessionListService.d.ts → sessions/sessionListService.d.ts} +3 -3
  234. package/dist/{sessionListService.js → sessions/sessionListService.js} +23 -6
  235. package/dist/sessions/sessionListService.js.map +1 -0
  236. package/dist/{sessionMetadataStore.d.ts → sessions/sessionMetadataStore.d.ts} +18 -0
  237. package/dist/{sessionMetadataStore.js → sessions/sessionMetadataStore.js} +36 -1
  238. package/dist/sessions/sessionMetadataStore.js.map +1 -0
  239. package/dist/{sessionSearch.d.ts → sessions/sessionSearch.d.ts} +1 -1
  240. package/dist/sessions/sessionSearch.js.map +1 -0
  241. package/dist/shared/hostDisplayName.d.ts +11 -0
  242. package/dist/shared/hostDisplayName.js +50 -0
  243. package/dist/shared/hostDisplayName.js.map +1 -0
  244. package/dist/{lineWriter.d.ts → shared/lineWriter.d.ts} +1 -1
  245. package/dist/{lineWriter.js → shared/lineWriter.js} +1 -1
  246. package/dist/shared/lineWriter.js.map +1 -0
  247. package/dist/{observationLog.js.map → shared/observationLog.js.map} +1 -1
  248. package/dist/{paths.d.ts → shared/paths.d.ts} +7 -0
  249. package/dist/{paths.js → shared/paths.js} +9 -0
  250. package/dist/shared/paths.js.map +1 -0
  251. package/dist/shared/permissionMode.d.ts +10 -0
  252. package/dist/shared/permissionMode.js +51 -0
  253. package/dist/shared/permissionMode.js.map +1 -0
  254. package/dist/shared/skillInjection.d.ts +9 -0
  255. package/dist/shared/skillInjection.js +16 -0
  256. package/dist/shared/skillInjection.js.map +1 -0
  257. package/dist/shared/sleep.js.map +1 -0
  258. package/dist/{socketPath.d.ts → shared/socketPath.d.ts} +4 -0
  259. package/dist/{socketPath.js → shared/socketPath.js} +22 -0
  260. package/dist/shared/socketPath.js.map +1 -0
  261. package/dist/shared/version.js.map +1 -0
  262. package/package.json +13 -7
  263. package/dist/apnsConfigStore.js.map +0 -1
  264. package/dist/apnsJwtProvider.js.map +0 -1
  265. package/dist/approvalPushNotifier.js.map +0 -1
  266. package/dist/broker.js.map +0 -1
  267. package/dist/chatTailController.js.map +0 -1
  268. package/dist/claudeSessionStore.d.ts +0 -15
  269. package/dist/claudeSessionStore.js +0 -201
  270. package/dist/claudeSessionStore.js.map +0 -1
  271. package/dist/codexRolloutTailer.d.ts +0 -56
  272. package/dist/codexRolloutTailer.js +0 -303
  273. package/dist/codexRolloutTailer.js.map +0 -1
  274. package/dist/codexSessionStore.js.map +0 -1
  275. package/dist/codexUsage.js.map +0 -1
  276. package/dist/deviceTokenStore.js.map +0 -1
  277. package/dist/dirLister.js +0 -98
  278. package/dist/dirLister.js.map +0 -1
  279. package/dist/doctor.d.ts +0 -36
  280. package/dist/doctor.js +0 -162
  281. package/dist/doctor.js.map +0 -1
  282. package/dist/engine.d.ts +0 -85
  283. package/dist/engine.js +0 -962
  284. package/dist/engine.js.map +0 -1
  285. package/dist/hook.js.map +0 -1
  286. package/dist/hookSettings.js.map +0 -1
  287. package/dist/idleReaper.d.ts +0 -13
  288. package/dist/idleReaper.js +0 -30
  289. package/dist/idleReaper.js.map +0 -1
  290. package/dist/imageService.js.map +0 -1
  291. package/dist/kick.js.map +0 -1
  292. package/dist/launch.js +0 -396
  293. package/dist/launch.js.map +0 -1
  294. package/dist/legacyHomeMigration.js.map +0 -1
  295. package/dist/lineWriter.js.map +0 -1
  296. package/dist/mdnsAdvertiser.d.ts +0 -46
  297. package/dist/mdnsAdvertiser.js +0 -268
  298. package/dist/mdnsAdvertiser.js.map +0 -1
  299. package/dist/pairingCode.js.map +0 -1
  300. package/dist/paths.js.map +0 -1
  301. package/dist/permissionMode.d.ts +0 -8
  302. package/dist/permissionMode.js +0 -32
  303. package/dist/permissionMode.js.map +0 -1
  304. package/dist/planUsageFetcher.d.ts +0 -35
  305. package/dist/planUsageFetcher.js +0 -172
  306. package/dist/planUsageFetcher.js.map +0 -1
  307. package/dist/pushTokenCommand.js.map +0 -1
  308. package/dist/pushTypes.js.map +0 -1
  309. package/dist/sendLog.js.map +0 -1
  310. package/dist/sessionActivityProvider.d.ts +0 -7
  311. package/dist/sessionActivityProvider.js +0 -44
  312. package/dist/sessionActivityProvider.js.map +0 -1
  313. package/dist/sessionIdleTracker.d.ts +0 -19
  314. package/dist/sessionIdleTracker.js +0 -42
  315. package/dist/sessionIdleTracker.js.map +0 -1
  316. package/dist/sessionListService.js.map +0 -1
  317. package/dist/sessionMetadataStore.js.map +0 -1
  318. package/dist/sessionSearch.js.map +0 -1
  319. package/dist/setup.js.map +0 -1
  320. package/dist/sleep.js.map +0 -1
  321. package/dist/socketPath.js.map +0 -1
  322. package/dist/subagentTailer.d.ts +0 -15
  323. package/dist/subagentTailer.js +0 -399
  324. package/dist/subagentTailer.js.map +0 -1
  325. package/dist/tmux.d.ts +0 -62
  326. package/dist/tmux.js +0 -163
  327. package/dist/tmux.js.map +0 -1
  328. package/dist/transcriptTailer.js.map +0 -1
  329. package/dist/usageAggregator.js.map +0 -1
  330. package/dist/version.js.map +0 -1
  331. /package/dist/{kick.d.ts → commands/kick.d.ts} +0 -0
  332. /package/dist/{legacyHomeMigration.d.ts → commands/legacyHomeMigration.d.ts} +0 -0
  333. /package/dist/{legacyHomeMigration.js → commands/legacyHomeMigration.js} +0 -0
  334. /package/dist/{apnsConfigStore.d.ts → push/apnsConfigStore.d.ts} +0 -0
  335. /package/dist/{apnsConfigStore.js → push/apnsConfigStore.js} +0 -0
  336. /package/dist/{apnsJwtProvider.d.ts → push/apnsJwtProvider.d.ts} +0 -0
  337. /package/dist/{apnsJwtProvider.js → push/apnsJwtProvider.js} +0 -0
  338. /package/dist/{apnsSender.d.ts → push/apnsSender.d.ts} +0 -0
  339. /package/dist/{apnsSender.js → push/apnsSender.js} +0 -0
  340. /package/dist/{approvalPushNotifier.d.ts → push/approvalPushNotifier.d.ts} +0 -0
  341. /package/dist/{deviceTokenStore.d.ts → push/deviceTokenStore.d.ts} +0 -0
  342. /package/dist/{deviceTokenStore.js → push/deviceTokenStore.js} +0 -0
  343. /package/dist/{pushTypes.d.ts → push/pushTypes.d.ts} +0 -0
  344. /package/dist/{sendLog.d.ts → push/sendLog.d.ts} +0 -0
  345. /package/dist/{sendLog.js → push/sendLog.js} +0 -0
  346. /package/dist/{usageAggregator.d.ts → services/usageAggregator.d.ts} +0 -0
  347. /package/dist/{usageAggregator.js → services/usageAggregator.js} +0 -0
  348. /package/dist/{sessionSearch.js → sessions/sessionSearch.js} +0 -0
  349. /package/dist/{observationLog.d.ts → shared/observationLog.d.ts} +0 -0
  350. /package/dist/{observationLog.js → shared/observationLog.js} +0 -0
  351. /package/dist/{sleep.d.ts → shared/sleep.d.ts} +0 -0
  352. /package/dist/{sleep.js → shared/sleep.js} +0 -0
  353. /package/dist/{version.d.ts → shared/version.d.ts} +0 -0
  354. /package/dist/{version.js → shared/version.js} +0 -0
@@ -0,0 +1,69 @@
1
+ import { type ControlMessage, type ToolActivity } from "../protocol.js";
2
+ /** codex の変更 1 件の正規化表現(live changes[] / rollout patch_apply_end changes の共通形)。 */
3
+ export interface CodexFileChange {
4
+ path: string;
5
+ kind: "add" | "update" | "delete";
6
+ /** add は生 content、update は unified diff hunk。delete は null のことがある。 */
7
+ diff: string | null;
8
+ movePath: string | null;
9
+ }
10
+ /** codex プラン(update_plan / turn/plan/updated)の 1 ステップ。 */
11
+ export interface CodexPlanStep {
12
+ step: string;
13
+ status: string;
14
+ }
15
+ /** tool_activity 封筒を作る(hub の publish 経路へそのまま流せる形)。 */
16
+ export declare function toolActivityMessage(activity: ToolActivity): ControlMessage;
17
+ /** コマンド実行カード。rawCommand は shell ラッパーを剥がしてから渡す必要はない(内部で正規化)。 */
18
+ export declare function codexCommandActivity(id: string, rawCommand: string): ToolActivity;
19
+ /**
20
+ * ファイル変更カード(changes 1 件 = 1 カード)。id は先頭変更が `idBase`、以降 `idBase#n`。
21
+ * live の fileChange item と rollout の patch_apply_end は同じ changes 並びを持つため、
22
+ * この規則で id も系統間で一致する。
23
+ */
24
+ export declare function codexFileChangeActivities(idBase: string, changes: CodexFileChange[]): ToolActivity[];
25
+ /** プラン更新カード(Claude の TodoWrite と同じ表示系へ載せる)。 */
26
+ export declare function codexPlanActivity(id: string, steps: CodexPlanStep[]): ToolActivity;
27
+ /**
28
+ * live / rollout 照合用の content key。id は系統間で一致しないため含めない。
29
+ * diff 本文は add(content)/ update(unified diff)とも系統間で一致するが、キーは
30
+ * 行数サマリで代表させて、キャップ切り詰めの影響を受けないようにする。
31
+ */
32
+ export declare function toolActivityContentKey(activity: ToolActivity): string;
33
+ /**
34
+ * item/completed の item から tool_activity 群を作る。
35
+ * commandExecution: declined(承認拒否で未実行)以外を表示する。
36
+ * fileChange: 適用済み(completed)のみ。rollout 側の patch_apply_end(success) と対になる。
37
+ */
38
+ export declare function codexItemToolActivities(item: Record<string, unknown>): ToolActivity[];
39
+ /** turn/plan/updated の params からプランカードを作る(plan が空なら null)。 */
40
+ export declare function codexPlanUpdateActivity(id: string, params: Record<string, unknown>): ToolActivity | null;
41
+ /**
42
+ * rollout の response_item payload から tool_activity 群を作る。
43
+ * - custom_tool_call "exec": JS 入力から `tools.exec_command({cmd})` を抽出(複数可)。
44
+ * `tools.apply_patch` は patch_apply_end 側で表示するためここでは作らない。
45
+ * どちらも抽出できない JS は「スクリプト実行」1 カードにする(live 側とキーが一致しない
46
+ * 可能性を許容 — 再接続の再走査でだけ重複しうる既知の限界)。
47
+ * - function_call "exec_command": arguments JSON の cmd を使う(旧ハーネス互換)。
48
+ * - function_call "update_plan": arguments JSON の plan をプランカードへ。
49
+ */
50
+ export declare function rolloutResponseItemToolActivities(payload: Record<string, unknown>): ToolActivity[];
51
+ /**
52
+ * rollout の event_msg patch_apply_end からファイル変更カードを作る。
53
+ * changes はパス→種別のマップで、live の fileChange item と同一の並び・内容を持つ。
54
+ * success=false(適用失敗)は live 側も completed にならないため作らない。
55
+ */
56
+ export declare function rolloutPatchApplyActivities(payload: Record<string, unknown>): ToolActivity[];
57
+ /**
58
+ * unifiedExecStartup の shell ラッパー(`/bin/zsh -lc '<cmd>'` 等)を剥がす。
59
+ * rollout 側は生コマンドのまま記録されるため、両系統をこの関数で同じ文字列に揃える。
60
+ */
61
+ export declare function normalizeShellCommand(raw: string): string;
62
+ /**
63
+ * unified exec の JS 入力から `tools.exec_command({...cmd...})` のコマンド文字列を列挙する。
64
+ * 入力はモデル生成の JS なのでキーはクォート有無どちらもあり得る。cmd の値が
65
+ * 文字列リテラル(JSON 互換のダブルクォート)で書かれている呼び出しだけを抽出する。
66
+ */
67
+ export declare function extractExecCommands(input: string): string[];
68
+ /** JS 入力が apply_patch 呼び出しを含むか(patch_apply_end 側で表示するため exec カードを抑止)。 */
69
+ export declare function containsApplyPatch(input: string): boolean;
@@ -0,0 +1,425 @@
1
+ // codexToolActivity.ts
2
+ // tailii (TS host) — codex のコマンド実行 / ファイル変更 / プラン更新を tool_activity へ写像する。
3
+ //
4
+ // 生成元は 2 系統あり、同一イベントが両方に現れる:
5
+ // - live: App Server の item/completed(commandExecution / fileChange)と turn/plan/updated
6
+ // - rollout: response_item(custom_tool_call "exec" / function_call "exec_command" /
7
+ // "update_plan")と event_msg patch_apply_end
8
+ // SessionHub は chatContentKey の occurrence count で live / rollout を照合するため、
9
+ // 両系統が「同じイベントから同じ ToolActivity(同じ content key)」を作ることが要件。
10
+ // このモジュールに builder を集約し、正規化(shell ラッパー剥がし・status の snake_case 化)を
11
+ // 両系統で共有する。id は系統間で一致しない(live: exec-uuid / rollout: call_id)ため
12
+ // content key には含めない。
13
+ //
14
+ // 実形式の正本(2026-07-23, codex-cli 0.145 で採取):
15
+ // - live commandExecution.command = `/bin/zsh -lc '<cmd>'`(unifiedExecStartup ラップ)
16
+ // - rollout custom_tool_call "exec" の input = JS で `tools.exec_command({"cmd":"<cmd>",…})`
17
+ // - fileChange は live item.id == rollout patch_apply_end.call_id、diff 文字列も一致
18
+ // (add は生 content / update は unified diff hunk)
19
+ // - plan status は live "inProgress"(camel)/ rollout "in_progress"(snake)
20
+ import * as path from "node:path";
21
+ import { PROTOCOL_V1, } from "../protocol.js";
22
+ // transcriptTailer(claude 側)と同じキャップ値。iOS 表示の前提を揃える。
23
+ const MAX_COMMAND_CHARACTERS = 8_000;
24
+ const MAX_DIFF_FIELD_CHARACTERS = 24_000;
25
+ const MAX_TODO_ITEMS = 50;
26
+ const MAX_TODO_CONTENT_CHARACTERS = 300;
27
+ /** tool_activity 封筒を作る(hub の publish 経路へそのまま流せる形)。 */
28
+ export function toolActivityMessage(activity) {
29
+ return { type: "tool_activity", v: PROTOCOL_V1, activity };
30
+ }
31
+ // MARK: - builder(live / rollout 共通)
32
+ /** コマンド実行カード。rawCommand は shell ラッパーを剥がしてから渡す必要はない(内部で正規化)。 */
33
+ export function codexCommandActivity(id, rawCommand) {
34
+ const command = normalizeShellCommand(rawCommand);
35
+ const commandCap = cap(command, MAX_COMMAND_CHARACTERS);
36
+ const activity = {
37
+ id,
38
+ name: "Bash",
39
+ label: `実行済み ${commandPrefix(commandCap.value ?? "")}`,
40
+ commandTruncated: commandCap.truncated,
41
+ descriptionTruncated: false,
42
+ };
43
+ if (commandCap.value !== null && commandCap.value.length > 0)
44
+ activity.command = commandCap.value;
45
+ return activity;
46
+ }
47
+ /**
48
+ * ファイル変更カード(changes 1 件 = 1 カード)。id は先頭変更が `idBase`、以降 `idBase#n`。
49
+ * live の fileChange item と rollout の patch_apply_end は同じ changes 並びを持つため、
50
+ * この規則で id も系統間で一致する。
51
+ */
52
+ export function codexFileChangeActivities(idBase, changes) {
53
+ return changes.map((change, index) => {
54
+ const id = index === 0 ? idBase : `${idBase}#${index}`;
55
+ const base = path.basename(change.path);
56
+ const display = base.length === 0 ? change.path : base;
57
+ if (change.kind === "add") {
58
+ const newCap = cap(change.diff, MAX_DIFF_FIELD_CHARACTERS);
59
+ const diff = { oldStringTruncated: false, newStringTruncated: newCap.truncated };
60
+ if (newCap.value !== null)
61
+ diff.newString = newCap.value;
62
+ return {
63
+ id,
64
+ name: "Write",
65
+ label: `作成済み ${display}`,
66
+ file: change.path,
67
+ addedLines: countLines(change.diff),
68
+ removedLines: 0,
69
+ diff,
70
+ commandTruncated: false,
71
+ descriptionTruncated: false,
72
+ };
73
+ }
74
+ if (change.kind === "delete") {
75
+ return {
76
+ id,
77
+ name: "Edit",
78
+ label: `削除済み ${display}`,
79
+ file: change.path,
80
+ commandTruncated: false,
81
+ descriptionTruncated: false,
82
+ };
83
+ }
84
+ const split = splitUnifiedDiff(change.diff ?? "");
85
+ const oldCap = cap(split.oldText, MAX_DIFF_FIELD_CHARACTERS);
86
+ const newCap = cap(split.newText, MAX_DIFF_FIELD_CHARACTERS);
87
+ const diff = {
88
+ oldStringTruncated: oldCap.truncated,
89
+ newStringTruncated: newCap.truncated,
90
+ };
91
+ if (oldCap.value !== null)
92
+ diff.oldString = oldCap.value;
93
+ if (newCap.value !== null)
94
+ diff.newString = newCap.value;
95
+ const activity = {
96
+ id,
97
+ name: "Edit",
98
+ label: `編集済み ${display}`,
99
+ file: change.path,
100
+ addedLines: split.added,
101
+ removedLines: split.removed,
102
+ diff,
103
+ commandTruncated: false,
104
+ descriptionTruncated: false,
105
+ };
106
+ return activity;
107
+ });
108
+ }
109
+ /** プラン更新カード(Claude の TodoWrite と同じ表示系へ載せる)。 */
110
+ export function codexPlanActivity(id, steps) {
111
+ const todos = steps.slice(0, MAX_TODO_ITEMS).flatMap((item) => {
112
+ const content = item.step.trim();
113
+ if (content.length === 0)
114
+ return [];
115
+ return [{
116
+ content: cap(content, MAX_TODO_CONTENT_CHARACTERS).value ?? content,
117
+ status: normalizePlanStatus(item.status),
118
+ }];
119
+ });
120
+ const activity = {
121
+ id,
122
+ name: "TodoWrite",
123
+ label: "プランを更新しました",
124
+ commandTruncated: false,
125
+ descriptionTruncated: false,
126
+ };
127
+ if (todos.length > 0)
128
+ activity.todos = todos;
129
+ return activity;
130
+ }
131
+ /**
132
+ * live / rollout 照合用の content key。id は系統間で一致しないため含めない。
133
+ * diff 本文は add(content)/ update(unified diff)とも系統間で一致するが、キーは
134
+ * 行数サマリで代表させて、キャップ切り詰めの影響を受けないようにする。
135
+ */
136
+ export function toolActivityContentKey(activity) {
137
+ const todos = (activity.todos ?? []).map((todo) => `${todo.content}=${todo.status}`).join("");
138
+ return [
139
+ "tool",
140
+ activity.name,
141
+ activity.label,
142
+ activity.command ?? "",
143
+ activity.file ?? "",
144
+ String(activity.addedLines ?? ""),
145
+ String(activity.removedLines ?? ""),
146
+ todos,
147
+ ].join("\u0000");
148
+ }
149
+ // MARK: - live(App Server item)→ ToolActivity
150
+ /**
151
+ * item/completed の item から tool_activity 群を作る。
152
+ * commandExecution: declined(承認拒否で未実行)以外を表示する。
153
+ * fileChange: 適用済み(completed)のみ。rollout 側の patch_apply_end(success) と対になる。
154
+ */
155
+ export function codexItemToolActivities(item) {
156
+ const id = item["id"];
157
+ const type = item["type"];
158
+ if (typeof id !== "string" || id.length === 0)
159
+ return [];
160
+ if (type === "commandExecution") {
161
+ const command = item["command"];
162
+ const status = item["status"];
163
+ if (typeof command !== "string" || command.length === 0)
164
+ return [];
165
+ if (status !== "completed" && status !== "failed")
166
+ return [];
167
+ return [codexCommandActivity(id, command)];
168
+ }
169
+ if (type === "fileChange") {
170
+ if (item["status"] !== "completed")
171
+ return [];
172
+ const changes = parseLiveFileChanges(item["changes"]);
173
+ return codexFileChangeActivities(id, changes);
174
+ }
175
+ return [];
176
+ }
177
+ function parseLiveFileChanges(value) {
178
+ if (!Array.isArray(value))
179
+ return [];
180
+ return value.flatMap((entry) => {
181
+ const record = asRecord(entry);
182
+ const changePath = record?.["path"];
183
+ if (typeof changePath !== "string" || changePath.length === 0)
184
+ return [];
185
+ const kindRecord = asRecord(record?.["kind"]);
186
+ const kindType = kindRecord?.["type"];
187
+ const kind = kindType === "add" || kindType === "delete" ? kindType : "update";
188
+ const diff = typeof record?.["diff"] === "string" ? record["diff"] : null;
189
+ const movePath = typeof kindRecord?.["move_path"] === "string" ? kindRecord["move_path"] : null;
190
+ return [{ path: changePath, kind, diff, movePath }];
191
+ });
192
+ }
193
+ /** turn/plan/updated の params からプランカードを作る(plan が空なら null)。 */
194
+ export function codexPlanUpdateActivity(id, params) {
195
+ const steps = parsePlanSteps(params["plan"]);
196
+ if (steps.length === 0)
197
+ return null;
198
+ return codexPlanActivity(id, steps);
199
+ }
200
+ // MARK: - rollout(response_item / event_msg)→ ToolActivity
201
+ /**
202
+ * rollout の response_item payload から tool_activity 群を作る。
203
+ * - custom_tool_call "exec": JS 入力から `tools.exec_command({cmd})` を抽出(複数可)。
204
+ * `tools.apply_patch` は patch_apply_end 側で表示するためここでは作らない。
205
+ * どちらも抽出できない JS は「スクリプト実行」1 カードにする(live 側とキーが一致しない
206
+ * 可能性を許容 — 再接続の再走査でだけ重複しうる既知の限界)。
207
+ * - function_call "exec_command": arguments JSON の cmd を使う(旧ハーネス互換)。
208
+ * - function_call "update_plan": arguments JSON の plan をプランカードへ。
209
+ */
210
+ export function rolloutResponseItemToolActivities(payload) {
211
+ const kind = payload["type"];
212
+ const name = payload["name"];
213
+ const idBase = firstString(payload["call_id"], payload["id"]) ?? null;
214
+ if (idBase === null)
215
+ return [];
216
+ if (kind === "custom_tool_call" && name === "exec") {
217
+ const input = payload["input"];
218
+ if (typeof input !== "string" || input.length === 0)
219
+ return [];
220
+ const commands = extractExecCommands(input);
221
+ if (commands.length > 0) {
222
+ return commands.map((command, index) => codexCommandActivity(index === 0 ? idBase : `${idBase}#${index}`, command));
223
+ }
224
+ if (containsApplyPatch(input))
225
+ return [];
226
+ return [codexCommandActivity(idBase, input)];
227
+ }
228
+ if (kind === "function_call" && name === "exec_command") {
229
+ const args = parseJsonRecord(payload["arguments"]);
230
+ const cmd = args?.["cmd"];
231
+ if (typeof cmd !== "string" || cmd.length === 0)
232
+ return [];
233
+ return [codexCommandActivity(idBase, cmd)];
234
+ }
235
+ if (kind === "function_call" && name === "update_plan") {
236
+ const args = parseJsonRecord(payload["arguments"]);
237
+ const steps = parsePlanSteps(args?.["plan"]);
238
+ if (steps.length === 0)
239
+ return [];
240
+ return [codexPlanActivity(idBase, steps)];
241
+ }
242
+ return [];
243
+ }
244
+ /**
245
+ * rollout の event_msg patch_apply_end からファイル変更カードを作る。
246
+ * changes はパス→種別のマップで、live の fileChange item と同一の並び・内容を持つ。
247
+ * success=false(適用失敗)は live 側も completed にならないため作らない。
248
+ */
249
+ export function rolloutPatchApplyActivities(payload) {
250
+ if (payload["success"] !== true)
251
+ return [];
252
+ const callId = firstString(payload["call_id"]);
253
+ const changesRecord = asRecord(payload["changes"]);
254
+ if (callId === null || changesRecord === null)
255
+ return [];
256
+ const changes = [];
257
+ for (const [changePath, rawChange] of Object.entries(changesRecord)) {
258
+ const change = asRecord(rawChange);
259
+ if (change === null)
260
+ continue;
261
+ const kindType = change["type"];
262
+ const kind = kindType === "add" || kindType === "delete" ? kindType : "update";
263
+ const diff = typeof change["unified_diff"] === "string"
264
+ ? change["unified_diff"]
265
+ : typeof change["content"] === "string"
266
+ ? change["content"]
267
+ : null;
268
+ const movePath = typeof change["move_path"] === "string" ? change["move_path"] : null;
269
+ changes.push({ path: changePath, kind, diff, movePath });
270
+ }
271
+ return codexFileChangeActivities(callId, changes);
272
+ }
273
+ // MARK: - 正規化ヘルパ
274
+ /**
275
+ * unifiedExecStartup の shell ラッパー(`/bin/zsh -lc '<cmd>'` 等)を剥がす。
276
+ * rollout 側は生コマンドのまま記録されるため、両系統をこの関数で同じ文字列に揃える。
277
+ */
278
+ export function normalizeShellCommand(raw) {
279
+ const trimmed = raw.trim();
280
+ const match = /^(?:\/bin\/)?(?:zsh|bash|sh)\s+-lc\s+'([\s\S]*)'$/.exec(trimmed);
281
+ const inner = match?.[1];
282
+ if (inner === undefined)
283
+ return trimmed;
284
+ return inner.replaceAll("'\\''", "'");
285
+ }
286
+ /**
287
+ * unified exec の JS 入力から `tools.exec_command({...cmd...})` のコマンド文字列を列挙する。
288
+ * 入力はモデル生成の JS なのでキーはクォート有無どちらもあり得る。cmd の値が
289
+ * 文字列リテラル(JSON 互換のダブルクォート)で書かれている呼び出しだけを抽出する。
290
+ */
291
+ export function extractExecCommands(input) {
292
+ // 呼び出しごとに探索区間を「次の exec_command 呼び出しの手前」までに区切る。
293
+ // 区切らないと cmd が文字列リテラルでない呼び出しが、後続呼び出しの cmd を
294
+ // 横取りして同じコマンドを二重に数えてしまう。
295
+ const callPattern = /tools\s*\.\s*exec_command\s*\(/g;
296
+ const segmentStarts = [];
297
+ const callStarts = [];
298
+ let call;
299
+ while ((call = callPattern.exec(input)) !== null) {
300
+ callStarts.push(call.index);
301
+ segmentStarts.push(call.index + call[0].length);
302
+ }
303
+ const commands = [];
304
+ segmentStarts.forEach((start, index) => {
305
+ const end = index + 1 < callStarts.length ? callStarts[index + 1] : input.length;
306
+ const segment = input.slice(start, end);
307
+ const cmdLiteral = /(?:"cmd"|'cmd'|\bcmd)\s*:\s*("(?:[^"\\]|\\[\s\S])*")/.exec(segment)?.[1];
308
+ if (cmdLiteral === undefined)
309
+ return;
310
+ try {
311
+ const value = JSON.parse(cmdLiteral);
312
+ if (typeof value === "string" && value.length > 0)
313
+ commands.push(value);
314
+ }
315
+ catch {
316
+ // モデル生成 JS の破損リテラルは黙って読み飛ばす。
317
+ }
318
+ });
319
+ return commands;
320
+ }
321
+ /** JS 入力が apply_patch 呼び出しを含むか(patch_apply_end 側で表示するため exec カードを抑止)。 */
322
+ export function containsApplyPatch(input) {
323
+ return /tools\s*\.\s*apply_patch\s*\(/.test(input);
324
+ }
325
+ /** live "inProgress"(camel)と rollout "in_progress"(snake)を Claude 互換の snake へ揃える。 */
326
+ function normalizePlanStatus(status) {
327
+ if (status === "inProgress")
328
+ return "in_progress";
329
+ return status;
330
+ }
331
+ function parsePlanSteps(value) {
332
+ if (!Array.isArray(value))
333
+ return [];
334
+ return value.flatMap((entry) => {
335
+ const record = asRecord(entry);
336
+ const step = record?.["step"];
337
+ if (typeof step !== "string" || step.length === 0)
338
+ return [];
339
+ const status = typeof record?.["status"] === "string" ? record["status"] : "pending";
340
+ return [{ step, status }];
341
+ });
342
+ }
343
+ /** unified diff hunk 群を old/new テキストへ分解し、増減行数を数える。 */
344
+ function splitUnifiedDiff(diff) {
345
+ const oldLines = [];
346
+ const newLines = [];
347
+ let added = 0;
348
+ let removed = 0;
349
+ for (const line of diff.split("\n")) {
350
+ if (line.startsWith("@@"))
351
+ continue;
352
+ // `` マーカー。内容行なら先頭に空白が付くため素の `\` は
353
+ // マーカーだけで、old/new どちらのテキストにも数えない。
354
+ if (line.startsWith("\\"))
355
+ continue;
356
+ if (line.startsWith("+")) {
357
+ newLines.push(line.slice(1));
358
+ added += 1;
359
+ }
360
+ else if (line.startsWith("-")) {
361
+ oldLines.push(line.slice(1));
362
+ removed += 1;
363
+ }
364
+ else {
365
+ const body = line.startsWith(" ") ? line.slice(1) : line;
366
+ oldLines.push(body);
367
+ newLines.push(body);
368
+ }
369
+ }
370
+ // 末尾の空行(diff 終端の改行由来)は表示ノイズなので落とす。
371
+ while (oldLines.length > 0 && oldLines[oldLines.length - 1] === "")
372
+ oldLines.pop();
373
+ while (newLines.length > 0 && newLines[newLines.length - 1] === "")
374
+ newLines.pop();
375
+ return {
376
+ oldText: oldLines.length > 0 ? oldLines.join("\n") : null,
377
+ newText: newLines.length > 0 ? newLines.join("\n") : null,
378
+ added,
379
+ removed,
380
+ };
381
+ }
382
+ function countLines(text) {
383
+ if (text === null || text.length === 0)
384
+ return 0;
385
+ const withoutTrailing = text.endsWith("\n") ? text.slice(0, -1) : text;
386
+ if (withoutTrailing.length === 0)
387
+ return 0;
388
+ return withoutTrailing.split("\n").length;
389
+ }
390
+ function commandPrefix(command) {
391
+ const trimmed = command.trim();
392
+ if (trimmed.length === 0)
393
+ return "コマンド";
394
+ return trimmed.length > 80 ? trimmed.slice(0, 80) + "..." : trimmed;
395
+ }
396
+ function cap(text, limit) {
397
+ if (text === null)
398
+ return { value: null, truncated: false };
399
+ if (text.length <= limit)
400
+ return { value: text, truncated: false };
401
+ return { value: text.slice(0, limit), truncated: true };
402
+ }
403
+ function parseJsonRecord(value) {
404
+ if (typeof value !== "string")
405
+ return asRecord(value);
406
+ try {
407
+ return asRecord(JSON.parse(value));
408
+ }
409
+ catch {
410
+ return null;
411
+ }
412
+ }
413
+ function firstString(...values) {
414
+ for (const value of values) {
415
+ if (typeof value === "string" && value.length > 0)
416
+ return value;
417
+ }
418
+ return null;
419
+ }
420
+ function asRecord(value) {
421
+ return typeof value === "object" && value !== null && !Array.isArray(value)
422
+ ? value
423
+ : null;
424
+ }
425
+ //# sourceMappingURL=codexToolActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexToolActivity.js","sourceRoot":"","sources":["../../src/codex/codexToolActivity.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type UsageTotals } from "./usageAggregator.js";
1
+ import { type UsageTotals } from "../services/usageAggregator.js";
2
2
  /** token_count から読める使用量 + レート制限(plan 相当)。 */
3
3
  export interface CodexUsage extends UsageTotals {
4
4
  /** モデルのコンテキスト窓(token)。未取得は undefined。 */
@@ -11,9 +11,11 @@
11
11
  // - cacheReadTokens = total_token_usage.cached_input_tokens
12
12
  // - cacheCreationTokens= 0(codex は区別を持たない)
13
13
  // - turns = 0(codex は assistant ターン数を token_count に持たない)
14
- // - fiveHour*(5h窓=primary) / sevenDay*(週窓=secondary) の used_percent(0–100)・resets_at(Unix秒)
14
+ // - fiveHour* / sevenDay* = rate limit の window_minutes で短期/週次を分類
15
+ // (primary/secondary の位置は固定ではない)
15
16
  import * as fs from "node:fs";
16
- import { emptyUsageTotals } from "./usageAggregator.js";
17
+ import { emptyUsageTotals } from "../services/usageAggregator.js";
18
+ import { parseCodexAccountUsage } from "./codexAccountUsage.js";
17
19
  /** 末尾から読むバイト数上限(直近の token_count は末尾付近にある)。 */
18
20
  const TAIL_READ_BYTES = 512 * 1024;
19
21
  /**
@@ -54,33 +56,24 @@ export function aggregateCodexUsage(rolloutPath) {
54
56
  }
55
57
  const rate = p["rate_limits"];
56
58
  if (typeof rate === "object" && rate !== null) {
57
- const r = rate;
58
- applyWindow(r["primary"], (util, resets) => {
59
- if (util !== undefined)
60
- result.fiveHourUtilization = util;
61
- if (resets !== undefined)
62
- result.fiveHourResetsAt = resets;
63
- });
64
- applyWindow(r["secondary"], (util, resets) => {
65
- if (util !== undefined)
66
- result.sevenDayUtilization = util;
67
- if (resets !== undefined)
68
- result.sevenDayResetsAt = resets;
69
- });
59
+ // rollout と App Server の rate limit は同じ分類器を通す。primary が週次だけを
60
+ // 持つプランもあるため、位置固定で primary=5時間 と解釈してはいけない。
61
+ const accountUsage = parseCodexAccountUsage(rate);
62
+ if (accountUsage?.fiveHourPercent !== undefined) {
63
+ result.fiveHourUtilization = accountUsage.fiveHourPercent;
64
+ }
65
+ if (accountUsage?.fiveHourResetsAt !== undefined) {
66
+ result.fiveHourResetsAt = accountUsage.fiveHourResetsAt;
67
+ }
68
+ if (accountUsage?.weeklyPercent !== undefined) {
69
+ result.sevenDayUtilization = accountUsage.weeklyPercent;
70
+ }
71
+ if (accountUsage?.weeklyResetsAt !== undefined) {
72
+ result.sevenDayResetsAt = accountUsage.weeklyResetsAt;
73
+ }
70
74
  }
71
75
  return result;
72
76
  }
73
- /** rate_limits の 1 窓(primary/secondary)から used_percent(丸め) と resets_at(ISO) を取り出す。 */
74
- function applyWindow(raw, set) {
75
- if (typeof raw !== "object" || raw === null)
76
- return;
77
- const w = raw;
78
- const used = w["used_percent"];
79
- const resets = w["resets_at"];
80
- set(typeof used === "number" ? Math.round(used) : undefined,
81
- // resets_at は Unix 秒。usage_response は ISO 文字列で運ぶため変換する。
82
- typeof resets === "number" ? new Date(Math.floor(resets) * 1000).toISOString() : undefined);
83
- }
84
77
  /** ファイル末尾チャンクを読み、最後の `type=="event_msg"` かつ `payload.type=="token_count"` 行を返す。 */
85
78
  function readLastTokenCountLine(rolloutPath) {
86
79
  let fd;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexUsage.js","sourceRoot":"","sources":["../../src/codex/codexUsage.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,mEAAmE;AACnE,EAAE;AACF,gFAAgF;AAChF,mFAAmF;AACnF,wDAAwD;AACxD,EAAE;AACF,OAAO;AACP,0DAA0D;AAC1D,2DAA2D;AAC3D,iEAAiE;AACjE,6CAA6C;AAC7C,wEAAwE;AACxE,oEAAoE;AACpE,qCAAqC;AAErC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAoB,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAahE,8CAA8C;AAC9C,MAAM,eAAe,GAAG,GAAG,GAAG,IAAI,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,IAAI,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC;IAEpD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC;IAC9E,MAAM,OAAO,GAAI,GAA6B,CAAC,OAAO,CAAC;IACvD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC;IACtF,MAAM,CAAC,GAAG,OAAkC,CAAC;IAE7C,MAAM,MAAM,GAAe,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC;IAErD,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,IAA+B,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,KAAgC,CAAC;YAC3C,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;QACzC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;IAC9E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,6DAA6D;QAC7D,2CAA2C;QAC3C,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,YAAY,EAAE,eAAe,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,CAAC,mBAAmB,GAAG,YAAY,CAAC,eAAe,CAAC;QAC5D,CAAC;QACD,IAAI,YAAY,EAAE,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACjD,MAAM,CAAC,gBAAgB,GAAG,YAAY,CAAC,gBAAgB,CAAC;QAC1D,CAAC;QACD,IAAI,YAAY,EAAE,aAAa,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,CAAC,mBAAmB,GAAG,YAAY,CAAC,aAAa,CAAC;QAC1D,CAAC;QACD,IAAI,YAAY,EAAE,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,CAAC,gBAAgB,GAAG,YAAY,CAAC,cAAc,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mFAAmF;AACnF,SAAS,sBAAsB,CAAC,WAAmB;IACjD,IAAI,EAAU,CAAC;IACf,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QACrC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACtD,mDAAmD;YACnD,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAAE,SAAS;YAC5C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;gBACxC,IACE,OAAO,GAAG,KAAK,QAAQ;oBACvB,GAAG,KAAK,IAAI;oBACX,GAA0B,CAAC,IAAI,KAAK,WAAW,EAChD,CAAC;oBACD,MAAM,OAAO,GAAI,GAA6B,CAAC,OAAO,CAAC;oBACvD,IACE,OAAO,OAAO,KAAK,QAAQ;wBAC3B,OAAO,KAAK,IAAI;wBACf,OAA8B,CAAC,IAAI,KAAK,aAAa,EACtD,CAAC;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC"}