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,1025 @@
1
+ export declare const PROTOCOL_LEGACY = 0;
2
+ export declare const PROTOCOL_V1 = 1;
3
+ export declare const PROTOCOL_V2 = 2;
4
+ export declare const PROTOCOL_MAX_SUPPORTED = 2;
5
+ /** 承認要求に含まれる編集差分の構造化表現。 */
6
+ export interface ToolDiff {
7
+ kind: "create" | "edit";
8
+ path: string;
9
+ newText?: string;
10
+ oldString?: string;
11
+ newString?: string;
12
+ }
13
+ /** tool_activity の差分詳細(キャップ済み old/new と切り詰めフラグ)。 */
14
+ export interface ToolActivityDiff {
15
+ oldString?: string;
16
+ newString?: string;
17
+ oldStringTruncated: boolean;
18
+ newStringTruncated: boolean;
19
+ }
20
+ /** TodoWrite の 1 項目。 */
21
+ export interface ToolActivityTodo {
22
+ content: string;
23
+ status: string;
24
+ }
25
+ /** Claude Code transcript の tool_use を chat timeline に表示するための構造化通知。 */
26
+ export interface ToolActivity {
27
+ id: string;
28
+ name: string;
29
+ label: string;
30
+ file?: string;
31
+ addedLines?: number;
32
+ removedLines?: number;
33
+ diff?: ToolActivityDiff;
34
+ command?: string;
35
+ commandTruncated: boolean;
36
+ description?: string;
37
+ descriptionTruncated: boolean;
38
+ todos?: ToolActivityTodo[];
39
+ }
40
+ export type SubagentNodeStatus = "running" | "completed" | "error";
41
+ /** サブエージェント(workflow)進捗ツリーのノード状態通知。 */
42
+ export interface SubagentNode {
43
+ nodeId: string;
44
+ toolUseId: string;
45
+ parentNodeId?: string | null;
46
+ agentType: string;
47
+ label: string;
48
+ depth: number;
49
+ status: SubagentNodeStatus;
50
+ currentActivity?: string | null;
51
+ ts: number;
52
+ /** "command" = バックグラウンドコマンド(Bash run_in_background)。省略時はエージェント。 */
53
+ kind?: "command";
54
+ }
55
+ /** セッション一覧応答の 1 要素。 */
56
+ export interface SessionInfo {
57
+ name: string;
58
+ cwd: string;
59
+ alive: boolean;
60
+ updatedAt?: number;
61
+ /** Claude の会話 JSONL 名に対応する session-id。既知の live session 再利用に使う。 */
62
+ claudeSessionId?: string;
63
+ /** 会話 provider。未指定は後方互換で claude 相当。 */
64
+ agent?: "claude" | "codex";
65
+ /** provider 共通の論理会話 ID。live runtime の再利用キー。 */
66
+ providerSessionId?: string;
67
+ /** セッションを収容する端末バックエンド。未指定は後方互換で tmux 相当(session-backend)。 */
68
+ backend?: TerminalBackendKind;
69
+ /**
70
+ * 端末側の表示タイトル(session-title 逆方向同期)。herdr のタブラベルがセッション名と
71
+ * 異なるとき(アプリ/Mac どちらかでの命名済み)だけ載る。tmux は常に未指定。
72
+ */
73
+ displayTitle?: string;
74
+ }
75
+ /** マシン内会話 1 件(claude=jsonl / codex=rollout)。 */
76
+ export interface ClaudeSessionInfo {
77
+ sessionId: string;
78
+ cwd: string;
79
+ title: string;
80
+ updatedAt?: number;
81
+ /** 会話を駆動するエージェント(claude=既定 / codex, agent-tag)。未指定は claude 相当。 */
82
+ agent?: "claude" | "codex";
83
+ /**
84
+ * provider の正式タイトルが設定済みか(Codex=App Server の thread.name、
85
+ * Claude=transcript の custom-title/ai-title)。旧 host では未指定(=不明)。
86
+ */
87
+ hasProviderTitle?: boolean;
88
+ /** 最終 user/assistant メッセージの 1 行スニペット(一覧プレビュー, list-preview)。 */
89
+ lastMessage?: string;
90
+ /**
91
+ * この会話を収容している生存セッション名(live-pill)。生存セッションが在るときのみ載る。
92
+ * `liveSessionsResolved` が true の応答では **不在 = 停止中の確定** を意味する。
93
+ * 複数 pane が同じ会話を掴んでいる場合の選択規則は docs/resilient-chat-sync.md §7.4。
94
+ */
95
+ liveSessionName?: string;
96
+ /** `liveSessionName` を収容する端末バックエンド(live-pill)。liveSessionName と同時にのみ載る。 */
97
+ liveSessionBackend?: TerminalBackendKind;
98
+ }
99
+ /** session_search_response の 1 検索結果。 */
100
+ export interface SessionSearchResult {
101
+ sessionId: string;
102
+ title: string;
103
+ cwd: string;
104
+ snippet: string;
105
+ updatedAt?: number;
106
+ }
107
+ /** serve_list_response の 1 サーバー(Mac 上で LISTEN 中の開発サーバー, serve-list)。 */
108
+ export interface ServeProcessInfo {
109
+ pid: number;
110
+ port: number;
111
+ /** プロセス名(lsof の COMMAND 列)。 */
112
+ command: string;
113
+ /** フルコマンドライン(表示用。長いものは切り詰め済み)。 */
114
+ commandLine?: string;
115
+ /** プロセスの作業ディレクトリ(会話 workdir とのグルーピング判定に使う)。 */
116
+ cwd?: string;
117
+ /** 配信中ページの HTML `<title>`(host が HTTP GET で取得。HTML でない/応答なしは省略)。 */
118
+ title?: string;
119
+ }
120
+ /** slash_list_response の 1 コマンド候補。 */
121
+ export interface SlashCommandInfo {
122
+ name: string;
123
+ summary: string;
124
+ }
125
+ /** file_list_response の 1 エントリ。 */
126
+ export interface FileEntry {
127
+ name: string;
128
+ kind: "dir" | "file" | "symlink";
129
+ size: number;
130
+ mtimeMs: number;
131
+ gitStatus?: string;
132
+ }
133
+ /** file_read_response のサービス内部表現。 */
134
+ export interface FileReadResult {
135
+ path: string;
136
+ kind: "text" | "image" | "binary" | "tooLarge" | "error";
137
+ size: number;
138
+ mtimeMs: number;
139
+ content?: string;
140
+ truncated?: boolean;
141
+ imageBase64?: string;
142
+ imageFormat?: string;
143
+ error?: string;
144
+ }
145
+ /** git_status_response の変更ファイル 1 件。 */
146
+ export interface GitStatusFile {
147
+ path: string;
148
+ indexStatus: string;
149
+ worktreeStatus: string;
150
+ renamedFrom: string | null;
151
+ }
152
+ /** git_log_response のコミット 1 件。 */
153
+ export interface GitCommitInfo {
154
+ hash: string;
155
+ shortHash: string;
156
+ subject: string;
157
+ authorName: string;
158
+ dateMs: number;
159
+ }
160
+ /** git_branch_list_response のローカルブランチ 1 件。 */
161
+ export interface GitBranchInfo {
162
+ name: string;
163
+ subject: string;
164
+ dateMs: number;
165
+ isCurrent: boolean;
166
+ ahead: number;
167
+ behind: number;
168
+ }
169
+ /** Codex App Server `model/list` を iOS のモデル選択へ渡すための 1 要素。 */
170
+ export interface CodexModelInfo {
171
+ id: string;
172
+ displayName: string;
173
+ description: string;
174
+ /** Codex が会話へ割り当てる実効コンテキスト窓。取得不能時は省略。 */
175
+ contextWindow?: number;
176
+ /** モデル既定の reasoning effort。 */
177
+ defaultReasoningEffort?: string;
178
+ /** モデルが受理する reasoning effort(速い→高性能の順)。 */
179
+ supportedReasoningEfforts?: string[];
180
+ isDefault: boolean;
181
+ }
182
+ /** Anthropic Models API `/v1/models` を iOS のモデル選択へ渡すための 1 要素。 */
183
+ export interface ClaudeModelInfo {
184
+ /** `/model <id>` / `--model` に渡す値(例: claude-sonnet-5)。 */
185
+ id: string;
186
+ /** API の display_name(例: "Claude Sonnet 5"。表示整形は iOS 側)。 */
187
+ displayName: string;
188
+ }
189
+ /** AskUserQuestion の選択肢。 */
190
+ export interface QuestionOption {
191
+ label: string;
192
+ description: string;
193
+ }
194
+ /** AskUserQuestion の質問 1 件。 */
195
+ export interface QuestionPromptQuestion {
196
+ header: string;
197
+ question: string;
198
+ multiSelect: boolean;
199
+ options: QuestionOption[];
200
+ }
201
+ /** AskUserQuestion の回答 1 件。 */
202
+ export interface QuestionAnswer {
203
+ questionIndex: number;
204
+ selectedOptionIndexes: number[];
205
+ otherText?: string;
206
+ /** 対象質問が multiSelect か(TUI 注入方式の選択に使う。旧形式欠落は false)。 */
207
+ multiSelect: boolean;
208
+ }
209
+ export type ChatRole = "assistant" | "user" | "system";
210
+ export type SubagentTranscriptRole = "assistant" | "user" | "tool";
211
+ export type SubagentTranscriptKind = "tool_use" | "tool_result";
212
+ export interface SubagentTranscriptEntry {
213
+ role: SubagentTranscriptRole;
214
+ text: string;
215
+ ts?: number;
216
+ kind?: SubagentTranscriptKind;
217
+ }
218
+ export type Decision = "allow" | "deny";
219
+ export type RemotePendingKind = "approval" | "question";
220
+ /**
221
+ * host_update_response.status:
222
+ * started — updater を起動した(完了は再接続後の channel_hello.serverVersion で確認する)
223
+ * already — 既に目標版(冪等成功)
224
+ * in_progress — 別の更新が進行中(冪等成功扱い)
225
+ * unsupported — 自動更新の対象外(dev インストール / 手動管理シム)
226
+ * error — 起動前検証で拒否(ダウングレード等。詳細は error)
227
+ */
228
+ export type HostUpdateStatus = "started" | "already" | "in_progress" | "unsupported" | "error";
229
+ export type OfficialAppProvider = "claude" | "codex";
230
+ export type OfficialAppAction = "open" | "repair" | "stop";
231
+ export type OfficialAppState = "active" | "inactive" | "unavailable";
232
+ export type OfficialAppOutcome = "open" | "pair" | "stopped" | "unavailable";
233
+ export interface OfficialAppStatus {
234
+ provider: OfficialAppProvider;
235
+ version?: string;
236
+ state: OfficialAppState;
237
+ canOpen: boolean;
238
+ canStart: boolean;
239
+ launchUrl?: string;
240
+ unavailableReason?: string;
241
+ }
242
+ export interface OfficialAppActionResult {
243
+ provider: OfficialAppProvider;
244
+ outcome: OfficialAppOutcome;
245
+ launchUrl?: string;
246
+ manualPairingCode?: string;
247
+ expiresAt?: number;
248
+ unavailableReason?: string;
249
+ }
250
+ /**
251
+ * アカウント全体の使用量(`account_usage_response`)の Claude 側(account-usage)。
252
+ *
253
+ * 全フィールド optional(取得できた枠だけ載せ、欠落は「その枠は不明」を意味する)。
254
+ * `premium*` は上位モデルの週次枠(`PlanUsage.sevenDayFable*` 相当)。percent は 0..100 の丸め済み、
255
+ * `*ResetsAt` は ISO 8601 文字列。
256
+ *
257
+ * `plan` / `rateLimitTier` は credentials JSON 由来の**生値**(表示整形は iOS 側の責務)。
258
+ */
259
+ export interface ClaudeAccountUsage {
260
+ fiveHourPercent?: number;
261
+ fiveHourResetsAt?: string;
262
+ sevenDayPercent?: number;
263
+ sevenDayResetsAt?: string;
264
+ premiumPercent?: number;
265
+ premiumResetsAt?: string;
266
+ /** 契約種別の生値("max" / "pro" 等。credentials の `subscriptionType`)。 */
267
+ plan?: string;
268
+ /** レート制限ティアの生値("default_claude_max_20x" 等)。`plan` の細分(Max 20x/5x)に使う。 */
269
+ rateLimitTier?: string;
270
+ /**
271
+ * ログイン中アカウントの**マスク済み**表示("a***@example.com")。
272
+ * 生 email は host 内で捨て、ワイヤーへはマスク済み文字列しか載せない。
273
+ */
274
+ account?: string;
275
+ }
276
+ /**
277
+ * アカウント全体の使用量(`account_usage_response`)の Codex 側(account-usage)。
278
+ *
279
+ * App Server `account/rateLimits/read` の `primary`(5時間枠)/`secondary`(週次枠)に対応する。
280
+ * `planType` はプラン識別子("plus" 等の生値。表示整形は iOS 側の責務)。
281
+ */
282
+ export interface CodexAccountUsage {
283
+ planType?: string;
284
+ fiveHourPercent?: number;
285
+ fiveHourResetsAt?: string;
286
+ weeklyPercent?: number;
287
+ weeklyResetsAt?: string;
288
+ /** ログイン中アカウントの**マスク済み**表示(`ClaudeAccountUsage.account` と同じ規約)。 */
289
+ account?: string;
290
+ }
291
+ /** ホスト上で実行した `tailii doctor` 相当の 1 項目。 */
292
+ export interface HostDiagnosticCheck {
293
+ /** 表示名と独立した安定識別子。 */
294
+ id: string;
295
+ label: string;
296
+ ok: boolean;
297
+ /** false の失敗は任意機能の未導入など、情報提供として扱う。 */
298
+ required: boolean;
299
+ detail: string;
300
+ /** ホスト側で行う対処(実行コマンド、または設定画面の経路)。 */
301
+ remediation?: string;
302
+ }
303
+ /**
304
+ * ホスト環境の情報(`account_usage_response.host`, account-usage)。
305
+ *
306
+ * 全フィールド optional — 取得できたものだけ載せる。旧 host は `diagnostics` を送らないため、
307
+ * iOS はバージョン行だけでも表示できる後方互換形を維持する。
308
+ */
309
+ export interface HostVersions {
310
+ /** tailii host(package.json version)。 */
311
+ hostVersion?: string;
312
+ /** `claude --version` 由来。 */
313
+ claudeCliVersion?: string;
314
+ /** `codex --version` 由来。 */
315
+ codexCliVersion?: string;
316
+ /** `tailii doctor` 相当の診断結果。 */
317
+ diagnostics?: HostDiagnosticCheck[];
318
+ }
319
+ export type ControlMessage = {
320
+ type: "channel_hello";
321
+ v: number;
322
+ maxVersion: number;
323
+ serverVersion?: string;
324
+ hostName?: string;
325
+ managed?: boolean;
326
+ updateError?: string;
327
+ } | {
328
+ type: "host_update_request";
329
+ v: number;
330
+ id: string;
331
+ version: string;
332
+ integrity?: string;
333
+ } | {
334
+ type: "host_update_response";
335
+ v: number;
336
+ id: string;
337
+ status: HostUpdateStatus;
338
+ error?: string | null;
339
+ } | {
340
+ type: "approval_request";
341
+ v: number;
342
+ id: string;
343
+ tool: string;
344
+ summary: string;
345
+ cwd: string;
346
+ diff?: ToolDiff;
347
+ } | {
348
+ type: "approval_decision";
349
+ v: number;
350
+ id: string;
351
+ decision: Decision;
352
+ reason?: string;
353
+ } | {
354
+ type: "remote_pending";
355
+ v: number;
356
+ id: string;
357
+ session: string;
358
+ kind: RemotePendingKind;
359
+ tool?: string;
360
+ summary: string;
361
+ } | {
362
+ type: "remote_pending_cleared";
363
+ v: number;
364
+ id: string;
365
+ session: string;
366
+ kind: RemotePendingKind;
367
+ } | {
368
+ type: "session_list_request";
369
+ v: number;
370
+ id: string;
371
+ limit?: number;
372
+ cursor?: string;
373
+ } | {
374
+ type: "session_list_response";
375
+ v: number;
376
+ id: string;
377
+ sessions: SessionInfo[];
378
+ nextCursor?: string;
379
+ adoptedName?: string;
380
+ worktreePath?: string;
381
+ worktreeRemoved?: boolean;
382
+ worktreeDirty?: boolean;
383
+ } | {
384
+ type: "session_start";
385
+ v: number;
386
+ id: string;
387
+ cwd: string;
388
+ name: string;
389
+ baseDir?: string;
390
+ resumeSessionId?: string;
391
+ title?: string;
392
+ agentType?: "claude" | "codex";
393
+ model?: string;
394
+ permissionMode?: "default" | "acceptEdits" | "plan" | "auto";
395
+ codexModel?: string;
396
+ codexSandbox?: "read-only" | "workspace-write" | "danger-full-access";
397
+ deferSubscribe?: boolean;
398
+ } | {
399
+ type: "session_reattach";
400
+ v: number;
401
+ id: string;
402
+ name: string;
403
+ } | {
404
+ type: "session_kill";
405
+ v: number;
406
+ id: string;
407
+ name: string;
408
+ } | {
409
+ type: "session_idle_hint";
410
+ v: number;
411
+ id: string;
412
+ name: string;
413
+ } | {
414
+ type: "codex_model_list_request";
415
+ v: number;
416
+ id: string;
417
+ } | {
418
+ type: "codex_model_list_response";
419
+ v: number;
420
+ id: string;
421
+ models: CodexModelInfo[];
422
+ } | {
423
+ type: "claude_model_list_request";
424
+ v: number;
425
+ id: string;
426
+ } | {
427
+ type: "claude_model_list_response";
428
+ v: number;
429
+ id: string;
430
+ models: ClaudeModelInfo[];
431
+ } | {
432
+ type: "official_app_status_request";
433
+ v: number;
434
+ id: string;
435
+ session: string;
436
+ provider: OfficialAppProvider;
437
+ } | ({
438
+ type: "official_app_status_response";
439
+ v: number;
440
+ id: string;
441
+ } & OfficialAppStatus) | {
442
+ type: "official_app_action_request";
443
+ v: number;
444
+ id: string;
445
+ session: string;
446
+ provider: OfficialAppProvider;
447
+ action: OfficialAppAction;
448
+ automaticEnable: boolean;
449
+ paired: boolean;
450
+ } | ({
451
+ type: "official_app_action_response";
452
+ v: number;
453
+ id: string;
454
+ } & OfficialAppActionResult) | {
455
+ type: "codex_turn_start";
456
+ v: number;
457
+ id: string;
458
+ session: string;
459
+ text: string;
460
+ clientUserMessageId?: string;
461
+ effort?: string;
462
+ approvalPolicy?: "untrusted" | "on-request" | "never";
463
+ sandbox?: "read-only" | "workspace-write" | "danger-full-access";
464
+ explicitRetry?: boolean;
465
+ } | {
466
+ type: "codex_turn_start_result";
467
+ v: number;
468
+ id: string;
469
+ status: "started" | "duplicate" | "failed";
470
+ error?: string;
471
+ } | {
472
+ type: "codex_turn_interrupt";
473
+ v: number;
474
+ id: string;
475
+ session: string;
476
+ } | {
477
+ type: "session_processing_state";
478
+ v: number;
479
+ session: string;
480
+ active: boolean;
481
+ } | {
482
+ type: "chat_send";
483
+ v: number;
484
+ id: string;
485
+ session: string;
486
+ clientMessageId: string;
487
+ text: string;
488
+ explicitRetry?: boolean;
489
+ } | {
490
+ type: "chat_send_result";
491
+ v: number;
492
+ id: string;
493
+ status: "accepted" | "duplicate" | "failed";
494
+ error?: string;
495
+ } | {
496
+ type: "pending_message_delete";
497
+ v: number;
498
+ id: string;
499
+ session: string;
500
+ clientMessageId: string;
501
+ kind: "chat" | "codex";
502
+ } | {
503
+ type: "pending_message_delete_result";
504
+ v: number;
505
+ id: string;
506
+ status: "deleted" | "not_found" | "processing" | "failed";
507
+ error?: string;
508
+ } | {
509
+ type: "error";
510
+ v: number;
511
+ id?: string;
512
+ code: string;
513
+ message: string;
514
+ } | {
515
+ type: "image_available";
516
+ v: number;
517
+ id: string;
518
+ path: string;
519
+ mime: string;
520
+ thumbnail: string;
521
+ width: number;
522
+ height: number;
523
+ relatedApprovalId?: string;
524
+ } | {
525
+ type: "image_fetch_request";
526
+ v: number;
527
+ id: string;
528
+ } | {
529
+ type: "image_fetch_response";
530
+ v: number;
531
+ id: string;
532
+ seq: number;
533
+ data: string;
534
+ eof: boolean;
535
+ mime: string;
536
+ } | {
537
+ type: "subagent_transcript_request";
538
+ v: number;
539
+ id: string;
540
+ nodeId: string;
541
+ } | {
542
+ type: "subagent_transcript_response";
543
+ v: number;
544
+ id: string;
545
+ nodeId: string;
546
+ entries: SubagentTranscriptEntry[];
547
+ omitted: number;
548
+ }
549
+ /** 同一 chat item の履歴/live stream ID 対応。直後の chat_output より先に配送する。 */
550
+ | {
551
+ type: "chat_stream_alias";
552
+ v: number;
553
+ streamId: string;
554
+ aliasStreamIds: string[];
555
+ } | {
556
+ type: "chat_output";
557
+ v: number;
558
+ streamId: string;
559
+ role: ChatRole;
560
+ text: string;
561
+ eof: boolean;
562
+ } | {
563
+ type: "tool_activity";
564
+ v: number;
565
+ activity: ToolActivity;
566
+ } | {
567
+ type: "session_chat_stream_alias";
568
+ v: number;
569
+ session: string;
570
+ serverSeq: number;
571
+ streamId: string;
572
+ aliasStreamIds: string[];
573
+ } | {
574
+ type: "session_chat_output";
575
+ v: number;
576
+ session: string;
577
+ serverSeq: number;
578
+ streamId: string;
579
+ role: ChatRole;
580
+ text: string;
581
+ eof: boolean;
582
+ } | {
583
+ type: "session_tool_activity";
584
+ v: number;
585
+ session: string;
586
+ serverSeq: number;
587
+ activity: ToolActivity;
588
+ } | {
589
+ type: "subagent_node";
590
+ v: number;
591
+ node: SubagentNode;
592
+ } | {
593
+ type: "pane_preview";
594
+ v: number;
595
+ session: string;
596
+ seq: number;
597
+ active: boolean;
598
+ text: string;
599
+ /** 省略時は従来の Claude ステータス表示。Codex のみ terminal capture を指定する。 */
600
+ mode?: "codex_terminal";
601
+ }
602
+ /** 一覧 Mission Control: 有効な間、処理中会話すべての pane_preview を配信する(iOS→host)。 */
603
+ | {
604
+ type: "session_preview_watch";
605
+ v: number;
606
+ enabled: boolean;
607
+ }
608
+ /**
609
+ * セッションの死亡通知(host→iOS, live-pill Phase 2)。一覧 watch 有効中のクライアントにだけ
610
+ * 送る「一覧を取り直せ」の合図。誕生イベントは出さない(`alive` は常に false)。
611
+ */
612
+ | {
613
+ type: "session_liveness_event";
614
+ v: number;
615
+ session: string;
616
+ alive: boolean;
617
+ } | {
618
+ type: "pane_choice_send";
619
+ v: number;
620
+ id: string;
621
+ session: string;
622
+ key: string;
623
+ } | {
624
+ type: "pane_choice_send_result";
625
+ v: number;
626
+ id: string;
627
+ ok: boolean;
628
+ error: string | null;
629
+ } | {
630
+ type: "pane_key_send";
631
+ v: number;
632
+ id: string;
633
+ session: string;
634
+ key: string;
635
+ } | {
636
+ type: "pane_key_send_result";
637
+ v: number;
638
+ id: string;
639
+ ok: boolean;
640
+ error: string | null;
641
+ }
642
+ /** 会話カスタムタイトルの端末表示追随(iOS→host, session-title)。空 title は解除=セッション名へ戻す。 */
643
+ | {
644
+ type: "session_title_set";
645
+ v: number;
646
+ id: string;
647
+ session: string;
648
+ title: string;
649
+ } | {
650
+ type: "session_title_set_result";
651
+ v: number;
652
+ id: string;
653
+ ok: boolean;
654
+ error: string | null;
655
+ }
656
+ /** Codex App Server の正式な thread.name を設定する。空 title はApp Serverが拒否する。 */
657
+ | {
658
+ type: "codex_thread_title_set";
659
+ v: number;
660
+ id: string;
661
+ threadId: string;
662
+ title: string;
663
+ } | {
664
+ type: "codex_thread_title_set_result";
665
+ v: number;
666
+ id: string;
667
+ ok: boolean;
668
+ error: string | null;
669
+ } | {
670
+ type: "question_prompt";
671
+ v: number;
672
+ id: string;
673
+ questions: QuestionPromptQuestion[];
674
+ } | {
675
+ type: "question_answer";
676
+ v: number;
677
+ id: string;
678
+ session: string;
679
+ answers: QuestionAnswer[];
680
+ } | {
681
+ type: "question_dismiss";
682
+ v: number;
683
+ id: string;
684
+ } | {
685
+ type: "usage_request";
686
+ v: number;
687
+ id: string;
688
+ /** ドラフト等、active session が無い画面の取得先。欠落は host が現行 session から解決する。 */
689
+ agentType?: "claude" | "codex";
690
+ } | {
691
+ type: "usage_response";
692
+ v: number;
693
+ id: string;
694
+ inputTokens: number;
695
+ outputTokens: number;
696
+ cacheReadTokens: number;
697
+ cacheCreationTokens: number;
698
+ turns: number;
699
+ fiveHourUtilization?: number;
700
+ fiveHourResetsAt?: string;
701
+ sevenDayUtilization?: number;
702
+ sevenDayResetsAt?: string;
703
+ sevenDayFableUtilization?: number;
704
+ sevenDayFableResetsAt?: string;
705
+ }
706
+ /** アカウント使用量の要求(iOS→Mac, account-usage)。session 非依存 — 一覧からも呼べる。 */
707
+ | {
708
+ type: "account_usage_request";
709
+ v: number;
710
+ id: string;
711
+ }
712
+ /**
713
+ * アカウント使用量の応答(Mac→iOS, account-usage)。
714
+ *
715
+ * agent ごとに独立: 取得できた側だけ `claude`/`codex` を載せ、失敗した側は
716
+ * オブジェクトを省略して `claudeError`/`codexError` に理由文を入れる(片側失敗でも
717
+ * もう片側は表示できる)。`fetchedAt` は載せた値のうち最も古い取得時刻(ISO 8601)。
718
+ * `host` は agent と独立したホスト環境のバージョン情報(取れなければ省略)。
719
+ */
720
+ | {
721
+ type: "account_usage_response";
722
+ v: number;
723
+ id: string;
724
+ claude?: ClaudeAccountUsage;
725
+ codex?: CodexAccountUsage;
726
+ claudeError?: string;
727
+ codexError?: string;
728
+ host?: HostVersions;
729
+ fetchedAt?: string;
730
+ } | {
731
+ type: "mode_get";
732
+ v: number;
733
+ id: string;
734
+ session: string;
735
+ } | {
736
+ type: "mode_set";
737
+ v: number;
738
+ id: string;
739
+ session: string;
740
+ mode: string;
741
+ } | {
742
+ type: "mode_set_response";
743
+ v: number;
744
+ id: string;
745
+ mode: string;
746
+ } | {
747
+ type: "slash_list_request";
748
+ v: number;
749
+ id: string;
750
+ cwd?: string;
751
+ } | {
752
+ type: "slash_list_response";
753
+ v: number;
754
+ id: string;
755
+ commands: SlashCommandInfo[];
756
+ } | {
757
+ type: "dir_list_request";
758
+ v: number;
759
+ id: string;
760
+ baseDir: string;
761
+ partial: string;
762
+ } | {
763
+ type: "dir_list_response";
764
+ v: number;
765
+ id: string;
766
+ entries: string[];
767
+ } | {
768
+ type: "browse_request";
769
+ v: number;
770
+ id: string;
771
+ path: string;
772
+ } | {
773
+ type: "browse_response";
774
+ v: number;
775
+ id: string;
776
+ path: string;
777
+ entries: string[];
778
+ canCreateDirectory?: boolean;
779
+ } | {
780
+ type: "file_list_request";
781
+ v: number;
782
+ id: string;
783
+ path: string;
784
+ } | {
785
+ type: "file_list_response";
786
+ v: number;
787
+ id: string;
788
+ path: string;
789
+ entries: FileEntry[];
790
+ truncated: boolean;
791
+ } | {
792
+ type: "file_read_request";
793
+ v: number;
794
+ id: string;
795
+ path: string;
796
+ } | ({
797
+ type: "file_read_response";
798
+ v: number;
799
+ id: string;
800
+ } & FileReadResult) | {
801
+ type: "git_status_request";
802
+ v: number;
803
+ id: string;
804
+ path: string;
805
+ } | {
806
+ type: "git_status_response";
807
+ v: number;
808
+ id: string;
809
+ isRepo: boolean;
810
+ branch: string;
811
+ upstream: string | null;
812
+ ahead: number;
813
+ behind: number;
814
+ files: GitStatusFile[];
815
+ repoRoot?: string;
816
+ diffAdditions?: number;
817
+ diffDeletions?: number;
818
+ } | {
819
+ type: "git_diff_request";
820
+ v: number;
821
+ id: string;
822
+ path: string;
823
+ file?: string;
824
+ staged?: boolean;
825
+ commit?: string | null;
826
+ } | {
827
+ type: "git_diff_response";
828
+ v: number;
829
+ id: string;
830
+ isRepo: boolean;
831
+ diff: string;
832
+ truncated: boolean;
833
+ } | {
834
+ type: "git_log_request";
835
+ v: number;
836
+ id: string;
837
+ path: string;
838
+ limit?: number;
839
+ } | {
840
+ type: "git_log_response";
841
+ v: number;
842
+ id: string;
843
+ isRepo: boolean;
844
+ commits: GitCommitInfo[];
845
+ } | {
846
+ type: "git_branch_list_request";
847
+ v: number;
848
+ id: string;
849
+ path: string;
850
+ } | {
851
+ type: "git_branch_list_response";
852
+ v: number;
853
+ id: string;
854
+ isRepo: boolean;
855
+ branches: GitBranchInfo[];
856
+ } | {
857
+ type: "git_checkout_request";
858
+ v: number;
859
+ id: string;
860
+ path: string;
861
+ branch: string;
862
+ create: boolean;
863
+ } | {
864
+ type: "git_checkout_response";
865
+ v: number;
866
+ id: string;
867
+ ok: boolean;
868
+ branch: string;
869
+ error: string | null;
870
+ } | {
871
+ type: "git_discard_request";
872
+ v: number;
873
+ id: string;
874
+ path: string;
875
+ files: string[];
876
+ } | {
877
+ type: "git_discard_response";
878
+ v: number;
879
+ id: string;
880
+ ok: boolean;
881
+ error: string | null;
882
+ } | {
883
+ type: "git_init_request";
884
+ v: number;
885
+ id: string;
886
+ path: string;
887
+ } | {
888
+ type: "git_init_response";
889
+ v: number;
890
+ id: string;
891
+ ok: boolean;
892
+ error: string | null;
893
+ } | {
894
+ type: "git_worktree_create_request";
895
+ v: number;
896
+ id: string;
897
+ path: string;
898
+ baseBranch: string;
899
+ } | {
900
+ type: "git_worktree_create_response";
901
+ v: number;
902
+ id: string;
903
+ ok: boolean;
904
+ branch: string;
905
+ worktreePath: string;
906
+ error: string | null;
907
+ } | {
908
+ type: "git_worktree_remove_request";
909
+ v: number;
910
+ id: string;
911
+ path: string;
912
+ force: boolean;
913
+ } | {
914
+ type: "git_worktree_remove_response";
915
+ v: number;
916
+ id: string;
917
+ ok: boolean;
918
+ error: string | null;
919
+ } | {
920
+ type: "claude_session_list_request";
921
+ v: number;
922
+ id: string;
923
+ } | {
924
+ type: "claude_session_list_response";
925
+ v: number;
926
+ id: string;
927
+ claudeSessions: ClaudeSessionInfo[];
928
+ /**
929
+ * 生存セッションの join 済みを表す新旧判別マーカー(live-pill, additive)。
930
+ * 新 host は join できたときだけ常に true を載せ、旧 host は載せない。
931
+ * true のとき各行の `liveSessionName` 不在は「停止中の確定」を意味し、
932
+ * 不在のとき iOS は従来の `session_list_request` との join へフォールバックする。
933
+ */
934
+ liveSessionsResolved?: boolean;
935
+ } | {
936
+ type: "dir_create_request";
937
+ v: number;
938
+ id: string;
939
+ baseDir: string;
940
+ relative: string;
941
+ } | {
942
+ type: "dir_create_response";
943
+ v: number;
944
+ id: string;
945
+ path: string;
946
+ ok: boolean;
947
+ error?: string;
948
+ } | {
949
+ type: "session_search_request";
950
+ v: number;
951
+ id: string;
952
+ query: string;
953
+ limit?: number;
954
+ } | {
955
+ type: "session_search_response";
956
+ v: number;
957
+ id: string;
958
+ results: SessionSearchResult[];
959
+ } | {
960
+ type: "preview_open";
961
+ v: number;
962
+ id: string;
963
+ target: string;
964
+ } | {
965
+ type: "preview_ready";
966
+ v: number;
967
+ id: string;
968
+ url: string;
969
+ } | {
970
+ type: "preview_error";
971
+ v: number;
972
+ id: string;
973
+ message: string;
974
+ } | {
975
+ type: "preview_close";
976
+ v: number;
977
+ id: string;
978
+ } | {
979
+ type: "serve_list_request";
980
+ v: number;
981
+ id: string;
982
+ } | {
983
+ type: "serve_list_response";
984
+ v: number;
985
+ id: string;
986
+ servers: ServeProcessInfo[];
987
+ } | {
988
+ type: "serve_stop_request";
989
+ v: number;
990
+ id: string;
991
+ pid: number;
992
+ port: number;
993
+ } | {
994
+ type: "serve_stop_response";
995
+ v: number;
996
+ id: string;
997
+ ok: boolean;
998
+ error: string | null;
999
+ } | {
1000
+ type: "backend_get_request";
1001
+ v: number;
1002
+ id: string;
1003
+ } | {
1004
+ type: "backend_get_response";
1005
+ v: number;
1006
+ id: string;
1007
+ backend: TerminalBackendKind;
1008
+ /** herdr バイナリが host に導入済みか(切替 UI の可用性表示)。 */
1009
+ herdrInstalled: boolean;
1010
+ } | {
1011
+ type: "backend_set_request";
1012
+ v: number;
1013
+ id: string;
1014
+ backend: TerminalBackendKind;
1015
+ } | {
1016
+ type: "backend_set_response";
1017
+ v: number;
1018
+ id: string;
1019
+ ok: boolean;
1020
+ backend: TerminalBackendKind;
1021
+ error: string | null;
1022
+ };
1023
+ /** セッションを収容する端末バックエンド種別(backend_get/set, session-backend)。 */
1024
+ export type TerminalBackendKind = "tmux" | "herdr";
1025
+ export type ControlMessageType = ControlMessage["type"];