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