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,184 @@
1
+ // engine/context.ts
2
+ // engine の 1 接続分の共有状態(HandlerContext)と、ハンドラ横断で使う小ヘルパー群。
3
+ // handleLine のドメイン別ハンドラ(handlers/)は全てここ経由で状態に触る。
4
+ import { randomUUID } from "node:crypto";
5
+ import * as os from "node:os";
6
+ import * as path from "node:path";
7
+ import { bumpHeartbeat } from "../sessions/heartbeat.js";
8
+ import { PROTOCOL_V1, } from "../protocol.js";
9
+ import { claudeProjectSlug } from "../shared/paths.js";
10
+ import { sleep } from "../shared/sleep.js";
11
+ export function engineDiag(message) {
12
+ if (process.env["TAILII_DEBUG"] === "1")
13
+ process.stderr.write(`[tailii-host engine] ${message}\n`);
14
+ }
15
+ export const DEFAULT_MODE_TIMING = {
16
+ getPollMs: 250,
17
+ getAttempts: 4,
18
+ setInitialPollMs: 300,
19
+ setInitialTimeoutMs: 10_000,
20
+ setChangePollMs: 150,
21
+ setChangeTimeoutMs: 1_500,
22
+ };
23
+ /**
24
+ * chat オープン/再オープン時、そのセッションに未回答の設問があれば question_prompt を再送する。
25
+ * 未回答の間 transcript に tool_use 行が無く履歴再生では設問が復元されないため、engine の
26
+ * 保持分から再掲する(question-hook-relay)。
27
+ */
28
+ export async function emitPendingQuestion(ctx, session) {
29
+ const pending = await ctx.requestHubState(session);
30
+ if (pending === null)
31
+ return;
32
+ ctx.writer.write({
33
+ type: "question_prompt",
34
+ v: PROTOCOL_V1,
35
+ id: pending.id,
36
+ questions: pending.questions,
37
+ });
38
+ }
39
+ export function subscribeConversation(ctx, session, newerThanMs) {
40
+ const previous = ctx.activeChatSession.name;
41
+ if (previous !== null && previous !== session) {
42
+ if (ctx.processingSessions.has(previous)) {
43
+ ctx.backgroundChatSessions.add(previous);
44
+ ctx.hubLink.send({ type: "conversation_subscribe", session: previous, preview: false });
45
+ }
46
+ else {
47
+ ctx.backgroundChatSessions.delete(previous);
48
+ ctx.hubLink.send({ type: "conversation_unsubscribe", session: previous });
49
+ }
50
+ }
51
+ ctx.activeChatSession.name = session;
52
+ ctx.backgroundChatSessions.delete(session);
53
+ ctx.hubLink.send({ type: "conversation_subscribe", session,
54
+ ...(newerThanMs !== undefined
55
+ ? { newerThanMs }
56
+ : ctx.lastServerSeq.has(session) ? { afterSeq: ctx.lastServerSeq.get(session) } : {}),
57
+ preview: true });
58
+ }
59
+ /** prepare 中は購読を始めず、reaper が読む権威ファイルの idle deadline だけを即時に更新する。 */
60
+ export function touchPreparedSession(ctx, session) {
61
+ try {
62
+ bumpHeartbeat(ctx.heartbeatDir, session, Date.now() / 1_000, "session-prepare");
63
+ return true;
64
+ }
65
+ catch {
66
+ // heartbeat を更新できないまま成功 ack を返すと、直後の reaper tick による kill を
67
+ // クライアントが防げない。prepare 自体を構造化エラーとして失敗させる。
68
+ return false;
69
+ }
70
+ }
71
+ /** 通常オープンは購読を開始し、prepare は購読せず heartbeat だけを保護する。 */
72
+ export async function activateOrTouchSession(ctx, writer, version, requestId, session, shouldSubscribe, newerThanMs) {
73
+ if (shouldSubscribe) {
74
+ subscribeConversation(ctx, session, newerThanMs);
75
+ await emitPendingQuestion(ctx, session);
76
+ return true;
77
+ }
78
+ if (touchPreparedSession(ctx, session))
79
+ return true;
80
+ writeError(writer, version, requestId, "session_prepare_heartbeat_failed", "セッションの保護時刻を更新できませんでした。");
81
+ return false;
82
+ }
83
+ export async function claimRuntime(ctx, session) {
84
+ const id = randomUUID();
85
+ try {
86
+ const result = await ctx.hubRpc({ type: "runtime_claim", id, session }, id, 1_500);
87
+ return result.status;
88
+ }
89
+ catch {
90
+ // Hub 障害時は可用性を優先し、排他導入前と同じく engine 自身で起動を続行する。
91
+ return "granted";
92
+ }
93
+ }
94
+ export async function waitForLiveSession(sessionManager, predicate) {
95
+ const deadline = Date.now() + 8_000;
96
+ while (Date.now() < deadline) {
97
+ const found = (await sessionManager.list()).find((info) => info.alive && predicate(info));
98
+ if (found !== undefined)
99
+ return found;
100
+ await sleep(500);
101
+ }
102
+ return null;
103
+ }
104
+ export async function officialAppRuntimeContext(ctx, session, provider) {
105
+ if (ctx.activeChatSession.name !== session)
106
+ return { reason: "official_app_focus_changed" };
107
+ const meta = ctx.metadataStore?.get(session) ?? null;
108
+ if ((meta?.agent ?? ctx.defaultAgent) !== provider) {
109
+ return { reason: "official_app_provider_mismatch" };
110
+ }
111
+ try {
112
+ if (!(await ctx.sessionManager.agentProcessAlive(session))) {
113
+ return { reason: "official_app_session_not_live" };
114
+ }
115
+ }
116
+ catch {
117
+ return { reason: "official_app_session_not_live" };
118
+ }
119
+ let pending;
120
+ try {
121
+ const id = randomUUID();
122
+ const response = await ctx.hubRpc({ type: "hub_state_request", id, session }, id, 1_500);
123
+ pending = response.pendingQuestion;
124
+ if (response.processing) {
125
+ ctx.processingSessions.set(session, Math.floor(Date.now() / 1_000));
126
+ }
127
+ else {
128
+ ctx.processingSessions.delete(session);
129
+ }
130
+ }
131
+ catch {
132
+ return { reason: "official_hub_state_unavailable" };
133
+ }
134
+ if (ctx.activeChatSession.name !== session)
135
+ return { reason: "official_app_focus_changed" };
136
+ let codexTurnActive = false;
137
+ for (const processingSession of ctx.processingSessions.keys()) {
138
+ const processingMeta = ctx.metadataStore?.get(processingSession) ?? null;
139
+ if ((processingMeta?.agent ?? ctx.defaultAgent) === "codex") {
140
+ codexTurnActive = true;
141
+ break;
142
+ }
143
+ }
144
+ // Remote Control URL の権威は transcript の bridge_status 行(pane 引用に汚染されない)。
145
+ const claudeSessionId = meta?.claudeSessionId;
146
+ const claudeTranscriptPath = provider === "claude" &&
147
+ meta !== null &&
148
+ typeof claudeSessionId === "string" &&
149
+ /^[A-Za-z0-9-]+$/u.test(claudeSessionId)
150
+ ? path.join(os.homedir(), ".claude", "projects", claudeProjectSlug(meta.cwd), `${claudeSessionId}.jsonl`)
151
+ : null;
152
+ return {
153
+ context: {
154
+ session,
155
+ provider,
156
+ sessionManager: ctx.sessionManager,
157
+ canInjectClaudeCommand: !ctx.processingSessions.has(session) && pending === null,
158
+ canMutateCodexDaemon: !codexTurnActive,
159
+ claudeTranscriptPath,
160
+ },
161
+ };
162
+ }
163
+ /** session_list_response を書き出す(optional cursor / host 採用名は null なら省略)。 */
164
+ export function writeSessionListResponse(writer, v, id, sessions, nextCursor, adoptedName = null, worktree = null) {
165
+ writer.write({
166
+ type: "session_list_response",
167
+ v,
168
+ id,
169
+ sessions,
170
+ ...(nextCursor !== null && { nextCursor }),
171
+ ...(adoptedName !== null && { adoptedName }),
172
+ ...(worktree !== null && worktree),
173
+ });
174
+ }
175
+ /** error 封筒を書き出す小ヘルパー。 */
176
+ export function writeError(writer, v, id, code, message) {
177
+ try {
178
+ writer.write({ type: "error", v, ...(id !== undefined && { id }), code, message });
179
+ }
180
+ catch (error) {
181
+ process.stderr.write(`[tailii-host engine] error 送出失敗: ${String(error)}\n`);
182
+ }
183
+ }
184
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/engine/context.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,wDAAwD;AACxD,iDAAiD;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AASlC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AASzD,OAAO,EACL,WAAW,GAIZ,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,OAAO,IAAI,CAAC,CAAC;AACrG,CAAC;AAiBD,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,GAAG;IACrB,mBAAmB,EAAE,MAAM;IAC3B,eAAe,EAAE,GAAG;IACpB,kBAAkB,EAAE,KAAK;CAC1B,CAAC;AA8EF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAmB,EAAE,OAAe;IAC5E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO;IAC7B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QACf,IAAI,EAAE,iBAAiB;QACvB,CAAC,EAAE,WAAW;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAmB,EAAE,OAAe,EAAE,WAAoB;IAC9F,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC5C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC9C,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,OAAO,CAAC;IACrC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO;QACxD,GAAG,CAAC,WAAW,KAAK,SAAS;YAC3B,CAAC,CAAC,EAAE,WAAW,EAAE;YACjB,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACrB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,GAAmB,EAAE,OAAe;IACvE,IAAI,CAAC;QACH,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,yCAAyC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAmB,EACnB,MAAkB,EAClB,OAAe,EACf,SAAiB,EACjB,OAAe,EACf,eAAwB,EACxB,WAAoB;IAEpB,IAAI,eAAe,EAAE,CAAC;QACpB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,kCAAkC,EACvE,wBAAwB,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAmB,EAAE,OAAe;IACrE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,CAClD,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,cAA8B,EAAE,SAAyC;IAEzE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAmB,EACnB,OAAe,EACf,QAA6B;IAE7B,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IAC5F,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACrD,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,OAAmE,CAAC;IACxE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAC/B,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,OAAO,EAAE,EAC1C,EAAE,EACF,KAAK,CACN,CAAC;QACF,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC;QACnC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IAE5F,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,KAAK,MAAM,iBAAiB,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9D,MAAM,cAAc,GAAG,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC;QACzE,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,OAAO,EAAE,CAAC;YAC5D,eAAe,GAAG,IAAI,CAAC;YACvB,MAAM;QACR,CAAC;IACH,CAAC;IACD,wEAAwE;IACxE,MAAM,eAAe,GAAG,IAAI,EAAE,eAAe,CAAC;IAC9C,MAAM,oBAAoB,GACxB,QAAQ,KAAK,QAAQ;QACrB,IAAI,KAAK,IAAI;QACb,OAAO,eAAe,KAAK,QAAQ;QACnC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,IAAI,CACP,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,UAAU,EACV,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAC3B,GAAG,eAAe,QAAQ,CAC3B;QACH,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACL,OAAO,EAAE;YACP,OAAO;YACP,QAAQ;YACR,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,sBAAsB,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,IAAI;YAChF,oBAAoB,EAAE,CAAC,eAAe;YACtC,oBAAoB;SACrB;KACF,CAAC;AACJ,CAAC;AASD,0EAA0E;AAC1E,MAAM,UAAU,wBAAwB,CACtC,MAAkB,EAClB,CAAS,EACT,EAAU,EACV,QAAuB,EACvB,UAAyB,EACzB,WAAW,GAAkB,IAAI,EACjC,QAAQ,GAAkC,IAAI;IAE9C,MAAM,CAAC,KAAK,CAAC;QACX,IAAI,EAAE,uBAAuB;QAC7B,CAAC;QACD,EAAE;QACF,QAAQ;QACR,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC;QAC1C,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;QAC5C,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC;KACnC,CAAC,CAAC;AACL,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,UAAU,CACxB,MAAkB,EAClB,CAAS,EACT,EAAsB,EACtB,IAAY,EACZ,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
@@ -0,0 +1,121 @@
1
+ import type { Readable, Writable } from "node:stream";
2
+ import type { ChatAgent } from "../chat/chatTailController.js";
3
+ import { type CodexAccountUsageProvider } from "../codex/codexAccountUsage.js";
4
+ import { CodexAppServerManager } from "../codex/codexAppServer.js";
5
+ import { type CodexTurnControllerRuntime } from "../codex/codexNativeTurnController.js";
6
+ import { ClaudeSessionStore } from "../sessions/claudeSessionStore.js";
7
+ import { CodexSessionStore } from "../codex/codexSessionStore.js";
8
+ import { type HubLink } from "../hub/hubClient.js";
9
+ import { ImageService } from "../chat/imageService.js";
10
+ import { type EngineLauncher } from "../commands/launch.js";
11
+ import { type ClaudeModelListProvider } from "../services/claudeModelCatalog.js";
12
+ import { type AccountIdentityProvider } from "../services/accountIdentity.js";
13
+ import { type HostVersionsProvider } from "../services/hostVersions.js";
14
+ import { type PlanUsageProvider } from "../services/planUsageFetcher.js";
15
+ import { SessionListService } from "../sessions/sessionListService.js";
16
+ import { SessionMetadataStore } from "../sessions/sessionMetadataStore.js";
17
+ import { OfficialAppsService } from "../services/officialApps.js";
18
+ import { TranscriptTailer } from "../chat/transcriptTailer.js";
19
+ import { type SessionBackend, type SessionBackendKind } from "../backend/sessionBackend.js";
20
+ import { type StaleDistGuard } from "../shared/version.js";
21
+ import { type ModeTiming } from "./context.js";
22
+ /**
23
+ * engine サブコマンドのエントリポイント。実 stdin/stdout を使って EngineControl を起動する。
24
+ * 引数(省略可、統合テスト注入用): --sessions-dir / --inner-command / --images-dir /
25
+ * --transcript / --claude-projects-dir / --idle-timeout / --resume-command。
26
+ */
27
+ /**
28
+ * 既定エージェントを host 側設定から解決する(`--agent` 未指定時のフォールバック)。
29
+ * `~/.tailii/agent` の内容が `codex` なら codex、それ以外/不在は claude。
30
+ * これにより iOS を改修せず(engine 起動コマンドは `<binary> engine` のまま)codex に切替できる。
31
+ */
32
+ export declare function resolveDefaultAgent(agentFilePath?: string): ChatAgent;
33
+ export declare function runEngineCommand(args: string[]): Promise<number>;
34
+ export interface RunEngineOptions {
35
+ /** "stdin" 側(iOS→Mac の制御要求が流れてくる)。 */
36
+ input: Readable;
37
+ /** "stdout" 側(Mac→iOS の応答を流す)。 */
38
+ output: Writable;
39
+ sessionManager: SessionBackend;
40
+ /** 新規セッションの端末バックエンド解決子(既定 tmux 固定。per-session launcher 組立と backend_get/set に使う)。 */
41
+ backendKind?: () => SessionBackendKind;
42
+ /** backend_set の永続化先(テスト注入用。既定は `~/.tailii/backend` への書き込み)。 */
43
+ backendWriter?: (kind: SessionBackendKind) => void;
44
+ /** herdr 導入済み判定(テスト注入用。既定は実バイナリの存在検査)。 */
45
+ herdrInstalledProbe?: () => boolean;
46
+ /** 画像通知/取得の橋渡し(省略時は画像処理なし = 後方互換)。 */
47
+ imageService?: ImageService | null;
48
+ /** 会話出力キャプチャ(省略時は chat_output なし = 後方互換)。 */
49
+ transcriptTailer?: TranscriptTailer | null;
50
+ /** tail 対象の claude セッショントランスクリプト JSONL の絶対パス。 */
51
+ transcriptPath?: string | null;
52
+ /** session_start の橋渡し先。省略時(null)は error(launch_failed) を返す安全側既定。 */
53
+ launcher?: EngineLauncher | null;
54
+ /** codex セッション用 launcher(agentType=codex 時)。省略時は launcher にフォールバック。 */
55
+ codexLauncher?: EngineLauncher | null;
56
+ sessionListService?: SessionListService | null;
57
+ metadataStore?: SessionMetadataStore | null;
58
+ /** @deprecated heartbeat 書き込みは Hub が所有する。 */
59
+ heartbeatDir?: string | null;
60
+ /** @deprecated heartbeat tick は Hub が所有する。 */
61
+ heartbeatTickSeconds?: number;
62
+ resumeLauncher?: EngineLauncher | null;
63
+ /** codex セッションの reattach 時 resume 用 launcher。省略時は resumeLauncher にフォールバック。 */
64
+ codexResumeLauncher?: EngineLauncher | null;
65
+ claudeSessionStore?: ClaudeSessionStore | null;
66
+ /** codex 会話一覧の導出(agent-tag)。省略時は codex 会話を一覧に含めない(後方互換)。 */
67
+ codexSessionStore?: CodexSessionStore | null;
68
+ /** 対象エージェント(既定 claude)。codex は rollout tail を使う。 */
69
+ agent?: ChatAgent;
70
+ /** Codex turn/approval を同一 App Server 接続で扱う共有 runtime。 */
71
+ codexAppServer?: CodexAppServerManager | null;
72
+ /** Claude / ChatGPT 公式アプリ連携。null は機能無効、未指定は固定コマンド実装。 */
73
+ officialApps?: OfficialAppsService | null;
74
+ /** テスト注入用の native turn controller。指定時は codexAppServer より優先する。 */
75
+ codexTurnController?: CodexTurnControllerRuntime | null;
76
+ /** 自分がサポートする最大版(既定 PROTOCOL_MAX_SUPPORTED)。 */
77
+ maxVersion?: number;
78
+ /** プラン使用状況の取得(既定は実 OAuth 使用量 API。テストは () => null を注入する)。 */
79
+ planUsage?: PlanUsageProvider;
80
+ /** Claude モデル一覧の取得(既定は実 Models API。テストは固定値/null を注入する)。 */
81
+ claudeModelList?: ClaudeModelListProvider;
82
+ /**
83
+ * Codex アカウント使用量の取得(既定は `codexAppServer` 経由の実 App Server 呼び出し。
84
+ * テストは固定値/null を注入する, account-usage)。
85
+ */
86
+ codexAccountUsage?: CodexAccountUsageProvider;
87
+ /**
88
+ * ホスト環境のバージョン情報(既定は package.json + `claude/codex --version`。
89
+ * プロセス内キャッシュ付き。テストは固定値/null を注入する, account-usage)。
90
+ */
91
+ hostVersions?: HostVersionsProvider;
92
+ /**
93
+ * ログイン中アカウントのマスク済み表示(既定は `claude auth status` + `~/.codex/auth.json`。
94
+ * プロセス内キャッシュ付き。テストは固定値を注入する, account-usage)。
95
+ */
96
+ accountIdentity?: AccountIdentityProvider;
97
+ /** slash_list のユーザーレベル探索ルート(既定は os.homedir())。 */
98
+ homeDir?: string;
99
+ /** mode_get/mode_set の待機間隔(テストは短縮値を注入する)。 */
100
+ modeTiming?: Partial<ModeTiming>;
101
+ /** 起動時 package version と現在の package version を比較する stale 判定(テスト注入用)。 */
102
+ staleDistGuard?: StaleDistGuard | null;
103
+ /**
104
+ * channel_hello に載せるマシン名(既定は scutil ComputerName → os.hostname())。
105
+ * iOS の接続先一覧タイトルの供給源。null は省略(テスト注入用)。
106
+ */
107
+ hostDisplayName?: string | null;
108
+ /** stale dist 検出時の通知(CLI では return によりプロセス終了、テストは観測用)。 */
109
+ onStaleDist?: () => void;
110
+ /** @deprecated Hub 移管前のテスト互換。現在は使用しない。 */
111
+ engineRelaySocketPath?: string | null;
112
+ /** Session Hub link。省略時は daemon の hub.sock へ接続する。 */
113
+ hubLink?: HubLink;
114
+ /** Codex Hub start ACK の待機時間(テスト注入用、既定15秒)。 */
115
+ codexHubRpcTimeoutMs?: number;
116
+ }
117
+ /**
118
+ * EngineControl の本体。`input` から NDJSON 行を読み、session_* を `sessionManager` に
119
+ * 橋渡しし、応答を `output` へ NDJSON 行で書く。EOF(input end)で正常終了する。
120
+ */
121
+ export declare function runEngine(options: RunEngineOptions): Promise<void>;