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,259 @@
1
+ // engine/handlers/conversation.ts
2
+ // 会話まわり: 本文送信(chat_send, Claude)・設問回答・サブエージェント履歴・
3
+ // 会話一覧(claude+codex マージ)・本文検索・画像オンデマンド配信。
4
+ import { randomUUID } from "node:crypto";
5
+ import * as fs from "node:fs";
6
+ import * as os from "node:os";
7
+ import * as path from "node:path";
8
+ import { PROTOCOL_V2 } from "../../protocol.js";
9
+ import { annotateLiveSessions, buildLiveSessionIndex, } from "../../sessions/liveSessionJoin.js";
10
+ import { searchClaudeSessions } from "../../sessions/sessionSearch.js";
11
+ import { engineDiag, subscribeConversation, writeError } from "../context.js";
12
+ /** chat_send 経路の常時診断ログ(pending 固まり事案の事後解析用)。失敗しても本処理を妨げない。 */
13
+ function chatSendDiag(message) {
14
+ try {
15
+ fs.appendFileSync(path.join(os.homedir(), ".tailii", "chat-send.log"), `[${new Date().toISOString()} pid=${process.pid}] ${message}\n`);
16
+ }
17
+ catch {
18
+ // 診断ログは best-effort。
19
+ }
20
+ }
21
+ export const conversationHandlers = {
22
+ session_preview_watch: (message, ctx) => {
23
+ // 一覧 Mission Control: 一覧表示中だけ有効化される。応答不要(冪等・再入場で再送)。
24
+ ctx.listPreviewWatch.enabled = message.enabled;
25
+ engineDiag(`session_preview_watch enabled=${message.enabled}`);
26
+ ctx.hubLink.send({ type: "session_preview_watch", enabled: message.enabled });
27
+ },
28
+ chat_send: (message, ctx) => {
29
+ const { writer, state, metadataStore } = ctx;
30
+ const v = state.negotiatedVersion;
31
+ const meta = metadataStore?.get(message.session) ?? null;
32
+ if (meta?.agent === "codex") {
33
+ writeError(writer, v, message.id, "chat_send_unsupported", "Codex セッションは codex_turn_start を使用してください。");
34
+ return;
35
+ }
36
+ // chat_send はチャット画面を前面表示した状態でしか届かない。engine 再生成や Hub 再起動の
37
+ // 狭間で前面購読(preview=true)が失われたままだと、本文は background 購読の押し込みで
38
+ // 進むのにライブビュー(pane_preview)だけ消灯し続ける。ここで前面購読を自己修復する。
39
+ if (ctx.activeChatSession.name !== message.session) {
40
+ chatSendDiag(`heal subscribe session=${message.session} previousActive=${ctx.activeChatSession.name ?? "nil"}`);
41
+ subscribeConversation(ctx, message.session);
42
+ }
43
+ // Hub は設問表示中、durable queue を保持したまま pane 注入可能になるまで応答を
44
+ // 保留する。read loop 自体がこの RPC を await すると、後続 question_answer を読めず
45
+ // 循環待ちになるため相関処理だけを非同期化する。ACK は注入完了の意味を維持する。
46
+ // timeout は無限にしない: hub 側で応答が失われた場合にバブルが永遠に pending の
47
+ // まま固まる(実障害)。アプリは durable Outbox + 同一 clientMessageId 再送で
48
+ // 冪等に回復するため、長めの上限で失敗を返す方が安全。
49
+ void (async () => {
50
+ chatSendDiag(`recv id=${message.id} session=${message.session} cmid=${message.clientMessageId}`);
51
+ try {
52
+ const result = await ctx.hubRpc({ type: "chat_send", id: message.id, session: message.session,
53
+ clientMessageId: message.clientMessageId, text: message.text,
54
+ ...(message.explicitRetry === true ? { explicitRetry: true } : {}) }, message.id, 90_000);
55
+ chatSendDiag(`result id=${result.id} status=${result.status}`);
56
+ writer.write({ type: "chat_send_result", v, id: result.id, status: result.status,
57
+ ...(result.error !== undefined ? { error: result.error } : {}) });
58
+ }
59
+ catch (error) {
60
+ chatSendDiag(`failed id=${message.id} error=${String(error).slice(0, 120)}`);
61
+ writeError(writer, v, message.id, "chat_send_failed", String(error));
62
+ }
63
+ })();
64
+ },
65
+ pending_message_delete: (message, ctx) => {
66
+ const { writer, state } = ctx;
67
+ const v = state.negotiatedVersion;
68
+ void (async () => {
69
+ try {
70
+ const result = await ctx.hubRpc({
71
+ type: "pending_message_delete",
72
+ id: message.id,
73
+ session: message.session,
74
+ clientMessageId: message.clientMessageId,
75
+ kind: message.kind,
76
+ }, message.id, 5_000);
77
+ writer.write({
78
+ type: "pending_message_delete_result",
79
+ v,
80
+ id: result.id,
81
+ status: result.status,
82
+ ...(result.error !== undefined ? { error: result.error } : {}),
83
+ });
84
+ }
85
+ catch (error) {
86
+ writeError(writer, v, message.id, "pending_message_delete_failed", String(error));
87
+ }
88
+ })();
89
+ },
90
+ question_answer: async (message, ctx) => {
91
+ const { writer, state } = ctx;
92
+ const v = state.negotiatedVersion;
93
+ try {
94
+ const requestId = randomUUID();
95
+ const result = await ctx.hubRpc({ type: "question_answer_submit", id: requestId, session: message.session,
96
+ questionId: message.id, answers: message.answers }, requestId, 2_000);
97
+ if (result.status === "accepted") {
98
+ writer.write({ type: "remote_pending_cleared", v, id: message.id,
99
+ session: message.session, kind: "question" });
100
+ }
101
+ else if (result.status === "already_resolved") {
102
+ // 送信失敗(要リトライ)と区別できるコードで返す。iOS はこのコードでは
103
+ // 設問シートを復元しない(他所で回答済みの正常系, question-answer-retry)。
104
+ writeError(writer, v, message.id, "question_already_answered", "この設問は既に回答済みです。");
105
+ }
106
+ else {
107
+ writeError(writer, v, message.id, "question_answer_failed", "設問が見つかりませんでした。時間をおいて再試行してください。");
108
+ }
109
+ }
110
+ catch (error) {
111
+ writeError(writer, v, message.id, "question_answer_failed", String(error));
112
+ }
113
+ },
114
+ subagent_transcript_request: async (message, ctx) => {
115
+ const { writer } = ctx;
116
+ const session = ctx.activeChatSession.name;
117
+ let result = {
118
+ type: "subagent_transcript_response",
119
+ v: PROTOCOL_V2,
120
+ id: message.id,
121
+ nodeId: message.nodeId,
122
+ entries: [],
123
+ omitted: 0,
124
+ };
125
+ if (session !== null) {
126
+ try {
127
+ const response = await ctx.hubRpc({
128
+ type: "conversation_subagent_transcript_request",
129
+ id: message.id,
130
+ session,
131
+ nodeId: message.nodeId,
132
+ }, message.id, 1_500);
133
+ result = response.payload;
134
+ }
135
+ catch {
136
+ // Hub 不達・対象 tail 不在は空応答にして、iOS の 10 秒待ちを発生させない。
137
+ }
138
+ }
139
+ try {
140
+ writer.write(result);
141
+ }
142
+ catch (error) {
143
+ process.stderr.write(`[tailii-host engine] subagent_transcript_response 書込失敗: ${String(error)}\n`);
144
+ }
145
+ },
146
+ claude_session_list_request: async (message, ctx) => {
147
+ const { writer, state } = ctx;
148
+ const v = state.negotiatedVersion;
149
+ // 会話一覧: claude(jsonl) + codex(rollout) をマージし updatedAt 降順で返す(agent-tag)。
150
+ // store 未注入時はその分を空一覧扱い(後方互換 — 会話機能なし)。
151
+ engineDiag(`claude_session_list_request id=${message.id}`);
152
+ const claudeSessions = ctx.claudeSessionStore?.list() ?? [];
153
+ const codexSessions = ctx.codexSessionStore === null
154
+ ? []
155
+ : ctx.codexAppServer === null
156
+ ? ctx.codexSessionStore.list()
157
+ : await ctx.codexSessionStore.listWithAppServer(ctx.codexAppServer);
158
+ const sessions = [...claudeSessions, ...codexSessions].sort((lhs, rhs) => {
159
+ const l = lhs.updatedAt ?? Number.MIN_SAFE_INTEGER;
160
+ const r = rhs.updatedAt ?? Number.MIN_SAFE_INTEGER;
161
+ if (l !== r)
162
+ return r - l;
163
+ return lhs.sessionId < rhs.sessionId ? -1 : lhs.sessionId > rhs.sessionId ? 1 : 0;
164
+ });
165
+ // live-pill: 生存セッションを 1 回だけ列挙し、会話 id + agent で各行へ join する。
166
+ // 失敗時は annotate なしで返し、`liveSessionsResolved` も載せない(嘘の「全停止」を出さない)。
167
+ let annotated = sessions;
168
+ let liveResolved = false;
169
+ try {
170
+ const live = await ctx.sessionManager.list();
171
+ const index = buildLiveSessionIndex(live, (name) => ctx.metadataStore?.get(name)?.createdAt ?? null);
172
+ annotated = annotateLiveSessions(sessions, index);
173
+ liveResolved = true;
174
+ engineDiag(`claude_session_list live join count=${index.size}`);
175
+ }
176
+ catch (error) {
177
+ engineDiag(`claude_session_list live join 失敗: ${String(error)}`);
178
+ }
179
+ engineDiag(`claude_session_list_response id=${message.id} count=${sessions.length} liveResolved=${liveResolved}`);
180
+ try {
181
+ writer.write({
182
+ type: "claude_session_list_response", v, id: message.id, claudeSessions: annotated,
183
+ ...(liveResolved ? { liveSessionsResolved: true } : {}),
184
+ });
185
+ }
186
+ catch (error) {
187
+ process.stderr.write(`[tailii-host engine] claude_session_list_response 書込失敗: ${String(error)}\n`);
188
+ }
189
+ },
190
+ codex_thread_title_set: async (message, ctx) => {
191
+ const { writer, state, codexAppServer } = ctx;
192
+ const v = state.negotiatedVersion;
193
+ if (codexAppServer === null) {
194
+ writer.write({
195
+ type: "codex_thread_title_set_result",
196
+ v,
197
+ id: message.id,
198
+ ok: false,
199
+ error: "Codex App Server is unavailable",
200
+ });
201
+ return;
202
+ }
203
+ try {
204
+ await codexAppServer.setThreadName(message.threadId, message.title);
205
+ writer.write({
206
+ type: "codex_thread_title_set_result",
207
+ v,
208
+ id: message.id,
209
+ ok: true,
210
+ error: null,
211
+ });
212
+ }
213
+ catch (error) {
214
+ writer.write({
215
+ type: "codex_thread_title_set_result",
216
+ v,
217
+ id: message.id,
218
+ ok: false,
219
+ error: String(error),
220
+ });
221
+ }
222
+ },
223
+ session_search_request: (message, ctx) => {
224
+ const { writer, state } = ctx;
225
+ const v = state.negotiatedVersion;
226
+ // Claude 会話本文検索。長時間 read loop を塞がないよう検索関数側で件数/時間/読取量を制限する。
227
+ engineDiag(`session_search_request id=${message.id} query=${message.query}`);
228
+ const response = ctx.claudeSessionStore !== null
229
+ ? searchClaudeSessions(ctx.claudeSessionStore, message.query, { limit: message.limit })
230
+ : { results: [], stats: { scannedFiles: 0, truncated: false } };
231
+ engineDiag(`session_search_response id=${message.id} count=${response.results.length} scanned=${response.stats.scannedFiles} truncated=${response.stats.truncated}`);
232
+ try {
233
+ writer.write({ type: "session_search_response", v, id: message.id, results: response.results });
234
+ }
235
+ catch (error) {
236
+ process.stderr.write(`[tailii-host engine] session_search_response 書込失敗: ${String(error)}\n`);
237
+ }
238
+ },
239
+ image_fetch_request: (message, ctx) => {
240
+ const { writer, state } = ctx;
241
+ const v = state.negotiatedVersion;
242
+ // 原本オンデマンド分割配信。index 逆引きし、分割 image_fetch_response を順に書く。
243
+ if (ctx.imageService === null) {
244
+ // 未注入時は画像を扱わない(後方互換)。要求元が沈黙で待たないよう error を返す。
245
+ writeError(writer, v, message.id, "image_not_found", "画像機能は無効です。");
246
+ return;
247
+ }
248
+ for (const response of ctx.imageService.fetch(message.id)) {
249
+ try {
250
+ writer.write(response);
251
+ }
252
+ catch (error) {
253
+ process.stderr.write(`[tailii-host engine] image_fetch_response 書込失敗: ${String(error)}\n`);
254
+ break;
255
+ }
256
+ }
257
+ },
258
+ };
259
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/engine/handlers/conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type HandlerRegistry } from "../context.js";
2
+ export declare const coreHandlers: HandlerRegistry;
@@ -0,0 +1,66 @@
1
+ // engine/handlers/core.ts
2
+ // チャネル制御と host 設定: バージョン交渉(channel_hello)と
3
+ // 端末バックエンド設定の読み書き(backend_get/backend_set, session-backend)。
4
+ import { engineDiag } from "../context.js";
5
+ export const coreHandlers = {
6
+ channel_hello: (message, ctx) => {
7
+ const { state } = ctx;
8
+ // 採用版 = min(自分の maxVersion, 相手の maxVersion)(4.3)。
9
+ state.negotiatedVersion = Math.min(state.ownMaxVersion, message.maxVersion);
10
+ process.stderr.write(`[tailii-host engine] channel_hello negotiated v=${state.negotiatedVersion}\n`);
11
+ },
12
+ backend_get_request: (message, ctx) => {
13
+ const { writer, state } = ctx;
14
+ const v = state.negotiatedVersion;
15
+ // 端末バックエンド設定の読み取り(アプリ設定画面, session-backend)。
16
+ engineDiag(`backend_get_request id=${message.id}`);
17
+ writer.write({
18
+ type: "backend_get_response",
19
+ v,
20
+ id: message.id,
21
+ backend: ctx.backendKind(),
22
+ herdrInstalled: ctx.herdrInstalledProbe(),
23
+ });
24
+ },
25
+ backend_set_request: (message, ctx) => {
26
+ const { writer, state } = ctx;
27
+ const v = state.negotiatedVersion;
28
+ // 端末バックエンド設定の書き込み。稼働系は常時 Composite なので再起動不要、
29
+ // 「次に起動するセッション」から反映される。herdr 未導入時は書かずに失敗を返す。
30
+ engineDiag(`backend_set_request id=${message.id} backend=${message.backend}`);
31
+ if (message.backend === "herdr" && !ctx.herdrInstalledProbe()) {
32
+ writer.write({
33
+ type: "backend_set_response",
34
+ v,
35
+ id: message.id,
36
+ ok: false,
37
+ backend: ctx.backendKind(),
38
+ error: "herdr が見つかりません(~/.local/bin/herdr)。導入後に切り替えてください。",
39
+ });
40
+ return;
41
+ }
42
+ try {
43
+ ctx.backendWriter(message.backend);
44
+ writer.write({
45
+ type: "backend_set_response",
46
+ v,
47
+ id: message.id,
48
+ ok: true,
49
+ backend: message.backend,
50
+ error: null,
51
+ });
52
+ }
53
+ catch (error) {
54
+ engineDiag(`backend_set_response 失敗 id=${message.id}: ${String(error)}`);
55
+ writer.write({
56
+ type: "backend_set_response",
57
+ v,
58
+ id: message.id,
59
+ ok: false,
60
+ backend: ctx.backendKind(),
61
+ error: String(error),
62
+ });
63
+ }
64
+ },
65
+ };
66
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/engine/handlers/core.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,2CAA2C;AAC3C,6DAA6D;AAE7D,OAAO,EAAE,UAAU,EAAwB,MAAM,eAAe,CAAC;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,aAAa,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QACtB,kDAAkD;QAClD,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mDAAmD,KAAK,CAAC,iBAAiB,IAAI,CAC/E,CAAC;IACJ,CAAC;IAED,mBAAmB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAClC,6CAA6C;QAC7C,UAAU,CAAC,0BAA0B,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC;YACX,IAAI,EAAE,sBAAsB;YAC5B,CAAC;YACD,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE;YAC1B,cAAc,EAAE,GAAG,CAAC,mBAAmB,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAClC,6CAA6C;QAC7C,6CAA6C;QAC7C,UAAU,CAAC,0BAA0B,OAAO,CAAC,EAAE,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC;gBACX,IAAI,EAAE,sBAAsB;gBAC5B,CAAC;gBACD,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE;gBAC1B,KAAK,EAAE,mDAAmD;aAC3D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC;gBACX,IAAI,EAAE,sBAAsB;gBAC5B,CAAC;gBACD,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,8BAA8B,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,KAAK,CAAC;gBACX,IAAI,EAAE,sBAAsB;gBAC5B,CAAC;gBACD,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE;gBAC1B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type HandlerRegistry } from "../context.js";
2
+ export declare const gitHandlers: HandlerRegistry;
@@ -0,0 +1,127 @@
1
+ // engine/handlers/git.ts
2
+ // git ブラウズ/操作: status・diff・log・branch 一覧・checkout・discard・init・
3
+ // worktree 作成/削除。失敗は各 response の空/ok=false 形で返し error 封筒にしない。
4
+ import { gitBranchList, gitCheckout, gitDiff, gitDiscard, gitInit, gitLog, gitStatus, gitWorktreeCreate, gitWorktreeRemove, } from "../../services/gitService.js";
5
+ import { engineDiag } from "../context.js";
6
+ export const gitHandlers = {
7
+ git_status_request: async (message, ctx) => {
8
+ const { writer, state } = ctx;
9
+ const v = state.negotiatedVersion;
10
+ engineDiag(`git_status_request id=${message.id} path=${message.path}`);
11
+ try {
12
+ writer.write({ type: "git_status_response", v, id: message.id, ...await gitStatus(message.path) });
13
+ }
14
+ catch (error) {
15
+ engineDiag(`git_status_response 失敗 id=${message.id}: ${String(error)}`);
16
+ writer.write({
17
+ type: "git_status_response", v, id: message.id, isRepo: false,
18
+ branch: "", upstream: null, ahead: 0, behind: 0, files: [],
19
+ });
20
+ }
21
+ },
22
+ git_diff_request: async (message, ctx) => {
23
+ const { writer, state } = ctx;
24
+ const v = state.negotiatedVersion;
25
+ try {
26
+ const response = await gitDiff(message.path, {
27
+ file: message.file, staged: message.staged, commit: message.commit,
28
+ });
29
+ writer.write({ type: "git_diff_response", v, id: message.id, ...response });
30
+ }
31
+ catch (error) {
32
+ engineDiag(`git_diff_response 失敗 id=${message.id}: ${String(error)}`);
33
+ writer.write({ type: "git_diff_response", v, id: message.id, isRepo: false, diff: "", truncated: false });
34
+ }
35
+ },
36
+ git_log_request: async (message, ctx) => {
37
+ const { writer, state } = ctx;
38
+ const v = state.negotiatedVersion;
39
+ try {
40
+ const response = await gitLog(message.path, message.limit);
41
+ writer.write({ type: "git_log_response", v, id: message.id, ...response });
42
+ }
43
+ catch (error) {
44
+ engineDiag(`git_log_response 失敗 id=${message.id}: ${String(error)}`);
45
+ writer.write({ type: "git_log_response", v, id: message.id, isRepo: false, commits: [] });
46
+ }
47
+ },
48
+ git_branch_list_request: async (message, ctx) => {
49
+ const { writer, state } = ctx;
50
+ const v = state.negotiatedVersion;
51
+ try {
52
+ const response = await gitBranchList(message.path);
53
+ writer.write({ type: "git_branch_list_response", v, id: message.id, ...response });
54
+ }
55
+ catch (error) {
56
+ engineDiag(`git_branch_list_response 失敗 id=${message.id}: ${String(error)}`);
57
+ writer.write({ type: "git_branch_list_response", v, id: message.id, isRepo: false, branches: [] });
58
+ }
59
+ },
60
+ git_checkout_request: async (message, ctx) => {
61
+ const { writer, state } = ctx;
62
+ const v = state.negotiatedVersion;
63
+ try {
64
+ const response = await gitCheckout(message.path, message.branch, message.create);
65
+ writer.write({ type: "git_checkout_response", v, id: message.id, ...response });
66
+ }
67
+ catch (error) {
68
+ engineDiag(`git_checkout_response 失敗 id=${message.id}: ${String(error)}`);
69
+ writer.write({
70
+ type: "git_checkout_response", v, id: message.id,
71
+ ok: false, branch: message.branch, error: String(error),
72
+ });
73
+ }
74
+ },
75
+ git_discard_request: async (message, ctx) => {
76
+ const { writer, state } = ctx;
77
+ const v = state.negotiatedVersion;
78
+ try {
79
+ const response = await gitDiscard(message.path, message.files);
80
+ writer.write({ type: "git_discard_response", v, id: message.id, ...response });
81
+ }
82
+ catch (error) {
83
+ engineDiag(`git_discard_response 失敗 id=${message.id}: ${String(error)}`);
84
+ writer.write({ type: "git_discard_response", v, id: message.id, ok: false, error: String(error) });
85
+ }
86
+ },
87
+ git_init_request: async (message, ctx) => {
88
+ const { writer, state } = ctx;
89
+ const v = state.negotiatedVersion;
90
+ try {
91
+ const response = await gitInit(message.path);
92
+ writer.write({ type: "git_init_response", v, id: message.id, ...response });
93
+ }
94
+ catch (error) {
95
+ engineDiag(`git_init_response 失敗 id=${message.id}: ${String(error)}`);
96
+ writer.write({ type: "git_init_response", v, id: message.id, ok: false, error: String(error) });
97
+ }
98
+ },
99
+ git_worktree_create_request: async (message, ctx) => {
100
+ const { writer, state } = ctx;
101
+ const v = state.negotiatedVersion;
102
+ try {
103
+ const response = await gitWorktreeCreate(message.path, message.baseBranch);
104
+ writer.write({ type: "git_worktree_create_response", v, id: message.id, ...response });
105
+ }
106
+ catch (error) {
107
+ engineDiag(`git_worktree_create_response 失敗 id=${message.id}: ${String(error)}`);
108
+ writer.write({
109
+ type: "git_worktree_create_response", v, id: message.id,
110
+ ok: false, branch: "", worktreePath: "", error: String(error),
111
+ });
112
+ }
113
+ },
114
+ git_worktree_remove_request: async (message, ctx) => {
115
+ const { writer, state } = ctx;
116
+ const v = state.negotiatedVersion;
117
+ try {
118
+ const response = await gitWorktreeRemove(message.path, message.force);
119
+ writer.write({ type: "git_worktree_remove_response", v, id: message.id, ...response });
120
+ }
121
+ catch (error) {
122
+ engineDiag(`git_worktree_remove_response 失敗 id=${message.id}: ${String(error)}`);
123
+ writer.write({ type: "git_worktree_remove_response", v, id: message.id, ok: false, error: String(error) });
124
+ }
125
+ },
126
+ };
127
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/engine/handlers/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { HandlerRegistry } from "../context.js";
2
+ export declare const ENGINE_HANDLERS: HandlerRegistry;
@@ -0,0 +1,34 @@
1
+ // engine/handlers/index.ts
2
+ // 全ドメインのハンドラを 1 つの registry に合成する。handleLine(engine.ts)は
3
+ // decode 済み ControlMessage の type でここから引く。1 type = 1 ハンドラ
4
+ // (重複キーは後勝ちになるため、追加時は既存ドメインとの重複に注意)。
5
+ import { createAccountUsageHandlers } from "./accountUsage.js";
6
+ import { claudeModelHandlers } from "./claudeModels.js";
7
+ import { codexHandlers } from "./codex.js";
8
+ import { conversationHandlers } from "./conversation.js";
9
+ import { coreHandlers } from "./core.js";
10
+ import { gitHandlers } from "./git.js";
11
+ import { modeHandlers } from "./mode.js";
12
+ import { officialAppHandlers } from "./officialApps.js";
13
+ import { previewHandlers } from "./preview.js";
14
+ import { selfUpdateHandlers } from "./selfUpdate.js";
15
+ import { sessionHandlers } from "./session.js";
16
+ import { usageHandlers } from "./usage.js";
17
+ import { workspaceHandlers } from "./workspace.js";
18
+ export const ENGINE_HANDLERS = {
19
+ ...coreHandlers,
20
+ ...sessionHandlers,
21
+ ...conversationHandlers,
22
+ ...codexHandlers,
23
+ ...claudeModelHandlers,
24
+ ...officialAppHandlers,
25
+ ...modeHandlers,
26
+ ...usageHandlers,
27
+ // TTL メモを閉包に持つため、registry 合成時に 1 インスタンスだけ作る(プロセス内で共有)。
28
+ ...createAccountUsageHandlers(),
29
+ ...workspaceHandlers,
30
+ ...gitHandlers,
31
+ ...previewHandlers,
32
+ ...selfUpdateHandlers,
33
+ };
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/handlers/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,yDAAyD;AACzD,0DAA0D;AAC1D,qCAAqC;AAGrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,GAAG,YAAY;IACf,GAAG,eAAe;IAClB,GAAG,oBAAoB;IACvB,GAAG,aAAa;IAChB,GAAG,mBAAmB;IACtB,GAAG,mBAAmB;IACtB,GAAG,YAAY;IACf,GAAG,aAAa;IAChB,uDAAuD;IACvD,GAAG,0BAA0B,EAAE;IAC/B,GAAG,iBAAiB;IACpB,GAAG,WAAW;IACd,GAAG,eAAe;IAClB,GAAG,kBAAkB;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type HandlerRegistry } from "../context.js";
2
+ export declare const modeHandlers: HandlerRegistry;