spec-cat 0.1.63 → 0.1.64

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 (272) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/BOa_3MnO.js +1 -0
  3. package/.output/public/_nuxt/{FfyCVKRU.js → Be7Q-KZm.js} +1 -1
  4. package/.output/public/_nuxt/{DPOGSCeV.js → C0xGK0_5.js} +1 -1
  5. package/.output/public/_nuxt/{Su-Cl_JF.js → C5uvKiQJ.js} +1 -1
  6. package/.output/public/_nuxt/{DIOhMCOf.js → CJOi1pKi.js} +3 -3
  7. package/.output/public/_nuxt/{D4LyIv_t.js → Cqzfu4b1.js} +1 -1
  8. package/.output/public/_nuxt/CrxPmt5A.js +1 -0
  9. package/.output/public/_nuxt/D0ZHasco.js +105 -0
  10. package/.output/public/_nuxt/DIUADCOG.js +1 -0
  11. package/.output/public/_nuxt/DaYnMifu.js +43 -0
  12. package/.output/public/_nuxt/DhK8N2yk.js +58 -0
  13. package/.output/public/_nuxt/{Bz2rU2zs.js → DntGb46R.js} +1 -1
  14. package/.output/public/_nuxt/{DwpuOtAP.js → FCWUBLV4.js} +1 -1
  15. package/.output/public/_nuxt/builds/latest.json +1 -1
  16. package/.output/public/_nuxt/builds/meta/39e9ce1e-ba3f-4066-8a58-66dfecfe2817.json +1 -0
  17. package/.output/public/_nuxt/builds/meta/dev.json +1 -0
  18. package/.output/public/_nuxt/default.DKcvUy2t.css +1 -0
  19. package/.output/public/_nuxt/entry.uBSFaL6A.css +1 -0
  20. package/.output/public/_nuxt/{useTheme.Cny4Z64J.css → useTheme.B4wINCoW.css} +1 -1
  21. package/.output/server/chunks/_/aiProviderRegistry.mjs +1 -2
  22. package/.output/server/chunks/_/aiProviderRegistry.mjs.map +1 -1
  23. package/.output/server/chunks/_/aiProviderSelection.mjs +2 -2
  24. package/.output/server/chunks/_/chatGit.mjs +1 -2
  25. package/.output/server/chunks/_/chatGit.mjs.map +1 -1
  26. package/.output/server/chunks/_/claudeProvider.mjs +1 -215
  27. package/.output/server/chunks/_/claudeProvider.mjs.map +1 -1
  28. package/.output/server/chunks/_/claudeService.mjs +50 -54
  29. package/.output/server/chunks/_/claudeService.mjs.map +1 -1
  30. package/.output/server/chunks/_/codexProvider.mjs +47 -812
  31. package/.output/server/chunks/_/codexProvider.mjs.map +1 -1
  32. package/.output/server/chunks/_/git.mjs +1 -2
  33. package/.output/server/chunks/_/git.mjs.map +1 -1
  34. package/.output/server/chunks/_/gitApiHelpers.mjs +1 -1
  35. package/.output/server/chunks/_/gitBranchOperations.mjs +1 -1
  36. package/.output/server/chunks/_/interactiveProviderQuery.mjs +160 -0
  37. package/.output/server/chunks/_/interactiveProviderQuery.mjs.map +1 -0
  38. package/.output/server/chunks/_/jobPersister.mjs +37 -6
  39. package/.output/server/chunks/_/jobPersister.mjs.map +1 -1
  40. package/.output/server/chunks/_/jobQueue.mjs +430 -278
  41. package/.output/server/chunks/_/jobQueue.mjs.map +1 -1
  42. package/.output/server/chunks/_/terminalSessions.mjs +582 -0
  43. package/.output/server/chunks/_/terminalSessions.mjs.map +1 -0
  44. package/.output/server/chunks/_/worktreeSetup.mjs +98 -0
  45. package/.output/server/chunks/_/worktreeSetup.mjs.map +1 -0
  46. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  47. package/.output/server/chunks/build/client.precomputed.mjs.map +1 -1
  48. package/.output/server/chunks/nitro/nitro.mjs +1239 -625
  49. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  50. package/.output/server/chunks/routes/_ws.mjs +21 -111
  51. package/.output/server/chunks/routes/_ws.mjs.map +1 -1
  52. package/.output/server/chunks/routes/api/ai/providers.get.mjs +3 -1
  53. package/.output/server/chunks/routes/api/ai/providers.get.mjs.map +1 -1
  54. package/.output/server/chunks/routes/api/chat/compare.get.mjs +4 -5
  55. package/.output/server/chunks/routes/api/chat/compare.get.mjs.map +1 -1
  56. package/.output/server/chunks/routes/api/chat/context.get.mjs +4 -2
  57. package/.output/server/chunks/routes/api/chat/context.get.mjs.map +1 -1
  58. package/.output/server/chunks/routes/api/chat/finalize.post.mjs +11 -7
  59. package/.output/server/chunks/routes/api/chat/finalize.post.mjs.map +1 -1
  60. package/.output/server/chunks/routes/api/chat/generate-commit-message.post.mjs +26 -29
  61. package/.output/server/chunks/routes/api/chat/generate-commit-message.post.mjs.map +1 -1
  62. package/.output/server/chunks/routes/api/chat/preview-sync.post.mjs +4 -5
  63. package/.output/server/chunks/routes/api/chat/preview-sync.post.mjs.map +1 -1
  64. package/.output/server/chunks/routes/api/chat/preview.delete.mjs +4 -5
  65. package/.output/server/chunks/routes/api/chat/preview.delete.mjs.map +1 -1
  66. package/.output/server/chunks/routes/api/chat/preview.post.mjs +4 -6
  67. package/.output/server/chunks/routes/api/chat/preview.post.mjs.map +1 -1
  68. package/.output/server/chunks/routes/api/chat/rebase.post.mjs +4 -7
  69. package/.output/server/chunks/routes/api/chat/rebase.post.mjs.map +1 -1
  70. package/.output/server/chunks/routes/api/chat/worktree-commit.post.mjs +4 -6
  71. package/.output/server/chunks/routes/api/chat/worktree-commit.post.mjs.map +1 -1
  72. package/.output/server/chunks/routes/api/chat/worktree.delete.mjs +11 -4
  73. package/.output/server/chunks/routes/api/chat/worktree.delete.mjs.map +1 -1
  74. package/.output/server/chunks/routes/api/chat/worktree.post.mjs +4 -6
  75. package/.output/server/chunks/routes/api/chat/worktree.post.mjs.map +1 -1
  76. package/.output/server/chunks/routes/api/conversations/_conversationId/archive.post.mjs +10 -9
  77. package/.output/server/chunks/routes/api/conversations/_conversationId/archive.post.mjs.map +1 -1
  78. package/.output/server/chunks/routes/api/conversations/archives/_archiveId/restore.post.mjs +4 -7
  79. package/.output/server/chunks/routes/api/conversations/archives/_archiveId/restore.post.mjs.map +1 -1
  80. package/.output/server/chunks/routes/api/conversations/archives/_archiveId_.delete.mjs +4 -7
  81. package/.output/server/chunks/routes/api/conversations/archives/_archiveId_.delete.mjs.map +1 -1
  82. package/.output/server/chunks/routes/api/conversations/archives.delete.mjs +40 -0
  83. package/.output/server/chunks/routes/api/conversations/archives.delete.mjs.map +1 -0
  84. package/.output/server/chunks/routes/api/conversations/archives.get.mjs +4 -7
  85. package/.output/server/chunks/routes/api/conversations/archives.get.mjs.map +1 -1
  86. package/.output/server/chunks/routes/api/conversations/update.post.mjs +4 -7
  87. package/.output/server/chunks/routes/api/conversations/update.post.mjs.map +1 -1
  88. package/.output/server/chunks/routes/api/conversations.get.mjs +4 -7
  89. package/.output/server/chunks/routes/api/conversations.get.mjs.map +1 -1
  90. package/.output/server/chunks/routes/api/conversations.post.mjs +4 -7
  91. package/.output/server/chunks/routes/api/conversations.post.mjs.map +1 -1
  92. package/.output/server/chunks/routes/api/cwd.get.mjs +4 -2
  93. package/.output/server/chunks/routes/api/cwd.get.mjs.map +1 -1
  94. package/.output/server/chunks/routes/api/git/branch-rename.post.mjs +3 -4
  95. package/.output/server/chunks/routes/api/git/branch-rename.post.mjs.map +1 -1
  96. package/.output/server/chunks/routes/api/git/branch.delete.mjs +4 -5
  97. package/.output/server/chunks/routes/api/git/branch.delete.mjs.map +1 -1
  98. package/.output/server/chunks/routes/api/git/branches.get.mjs +4 -6
  99. package/.output/server/chunks/routes/api/git/branches.get.mjs.map +1 -1
  100. package/.output/server/chunks/routes/api/git/checkout.post.mjs +4 -5
  101. package/.output/server/chunks/routes/api/git/checkout.post.mjs.map +1 -1
  102. package/.output/server/chunks/routes/api/git/cherry-pick.post.mjs +3 -4
  103. package/.output/server/chunks/routes/api/git/cherry-pick.post.mjs.map +1 -1
  104. package/.output/server/chunks/routes/api/git/clean.post.mjs +3 -4
  105. package/.output/server/chunks/routes/api/git/clean.post.mjs.map +1 -1
  106. package/.output/server/chunks/routes/api/git/commit/_id_.get.mjs +3 -4
  107. package/.output/server/chunks/routes/api/git/commit/_id_.get.mjs.map +1 -1
  108. package/.output/server/chunks/routes/api/git/commit.post.mjs +4 -5
  109. package/.output/server/chunks/routes/api/git/commit.post.mjs.map +1 -1
  110. package/.output/server/chunks/routes/api/git/diff.get.mjs +4 -5
  111. package/.output/server/chunks/routes/api/git/diff.get.mjs.map +1 -1
  112. package/.output/server/chunks/routes/api/git/fetch.post.mjs +3 -4
  113. package/.output/server/chunks/routes/api/git/fetch.post.mjs.map +1 -1
  114. package/.output/server/chunks/routes/api/git/file-diff.get.mjs +4 -5
  115. package/.output/server/chunks/routes/api/git/file-diff.get.mjs.map +1 -1
  116. package/.output/server/chunks/routes/api/git/graph.get.mjs +4 -5
  117. package/.output/server/chunks/routes/api/git/graph.get.mjs.map +1 -1
  118. package/.output/server/chunks/routes/api/git/log.get.mjs +4 -5
  119. package/.output/server/chunks/routes/api/git/log.get.mjs.map +1 -1
  120. package/.output/server/chunks/routes/api/git/merge-base.get.mjs +4 -5
  121. package/.output/server/chunks/routes/api/git/merge-base.get.mjs.map +1 -1
  122. package/.output/server/chunks/routes/api/git/merge.post.mjs +3 -4
  123. package/.output/server/chunks/routes/api/git/merge.post.mjs.map +1 -1
  124. package/.output/server/chunks/routes/api/git/pull.post.mjs +3 -4
  125. package/.output/server/chunks/routes/api/git/pull.post.mjs.map +1 -1
  126. package/.output/server/chunks/routes/api/git/push.post.mjs +3 -4
  127. package/.output/server/chunks/routes/api/git/push.post.mjs.map +1 -1
  128. package/.output/server/chunks/routes/api/git/rebase.post.mjs +3 -4
  129. package/.output/server/chunks/routes/api/git/rebase.post.mjs.map +1 -1
  130. package/.output/server/chunks/routes/api/git/remote.delete.mjs +3 -4
  131. package/.output/server/chunks/routes/api/git/remote.delete.mjs.map +1 -1
  132. package/.output/server/chunks/routes/api/git/remote.post.mjs +3 -4
  133. package/.output/server/chunks/routes/api/git/remote.post.mjs.map +1 -1
  134. package/.output/server/chunks/routes/api/git/remote.put.mjs +3 -4
  135. package/.output/server/chunks/routes/api/git/remote.put.mjs.map +1 -1
  136. package/.output/server/chunks/routes/api/git/remotes.get.mjs +3 -4
  137. package/.output/server/chunks/routes/api/git/remotes.get.mjs.map +1 -1
  138. package/.output/server/chunks/routes/api/git/reset.post.mjs +3 -4
  139. package/.output/server/chunks/routes/api/git/reset.post.mjs.map +1 -1
  140. package/.output/server/chunks/routes/api/git/revert.post.mjs +3 -4
  141. package/.output/server/chunks/routes/api/git/revert.post.mjs.map +1 -1
  142. package/.output/server/chunks/routes/api/git/show.get.mjs +4 -5
  143. package/.output/server/chunks/routes/api/git/show.get.mjs.map +1 -1
  144. package/.output/server/chunks/routes/api/git/stage.post.mjs +4 -5
  145. package/.output/server/chunks/routes/api/git/stage.post.mjs.map +1 -1
  146. package/.output/server/chunks/routes/api/git/stash-apply.post.mjs +3 -4
  147. package/.output/server/chunks/routes/api/git/stash-apply.post.mjs.map +1 -1
  148. package/.output/server/chunks/routes/api/git/stash-branch.post.mjs +3 -4
  149. package/.output/server/chunks/routes/api/git/stash-branch.post.mjs.map +1 -1
  150. package/.output/server/chunks/routes/api/git/stash-drop.post.mjs +3 -4
  151. package/.output/server/chunks/routes/api/git/stash-drop.post.mjs.map +1 -1
  152. package/.output/server/chunks/routes/api/git/stash-pop.post.mjs +3 -4
  153. package/.output/server/chunks/routes/api/git/stash-pop.post.mjs.map +1 -1
  154. package/.output/server/chunks/routes/api/git/stash.get.mjs +3 -4
  155. package/.output/server/chunks/routes/api/git/stash.get.mjs.map +1 -1
  156. package/.output/server/chunks/routes/api/git/stash.post.mjs +3 -4
  157. package/.output/server/chunks/routes/api/git/stash.post.mjs.map +1 -1
  158. package/.output/server/chunks/routes/api/git/state.get.mjs +3 -4
  159. package/.output/server/chunks/routes/api/git/state.get.mjs.map +1 -1
  160. package/.output/server/chunks/routes/api/git/status.get.mjs +4 -5
  161. package/.output/server/chunks/routes/api/git/status.get.mjs.map +1 -1
  162. package/.output/server/chunks/routes/api/git/tag/_name_.get.mjs +3 -4
  163. package/.output/server/chunks/routes/api/git/tag/_name_.get.mjs.map +1 -1
  164. package/.output/server/chunks/routes/api/git/tag-push.post.mjs +3 -4
  165. package/.output/server/chunks/routes/api/git/tag-push.post.mjs.map +1 -1
  166. package/.output/server/chunks/routes/api/git/tag.delete.mjs +3 -4
  167. package/.output/server/chunks/routes/api/git/tag.delete.mjs.map +1 -1
  168. package/.output/server/chunks/routes/api/git/tag.post.mjs +3 -4
  169. package/.output/server/chunks/routes/api/git/tag.post.mjs.map +1 -1
  170. package/.output/server/chunks/routes/api/git/unstage.post.mjs +4 -5
  171. package/.output/server/chunks/routes/api/git/unstage.post.mjs.map +1 -1
  172. package/.output/server/chunks/routes/api/index.get.mjs +7 -4
  173. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  174. package/.output/server/chunks/routes/api/index.get2.mjs +4 -2
  175. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  176. package/.output/server/chunks/routes/api/index.get3.mjs +4 -2
  177. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  178. package/.output/server/chunks/routes/api/index.post.mjs +19 -16
  179. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  180. package/.output/server/chunks/routes/api/index.post2.mjs +4 -6
  181. package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
  182. package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs +6 -3
  183. package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs.map +1 -1
  184. package/.output/server/chunks/routes/api/jobs/_id_.get.mjs +7 -4
  185. package/.output/server/chunks/routes/api/jobs/_id_.get.mjs.map +1 -1
  186. package/.output/server/chunks/routes/api/rebase/abort.post.mjs +4 -2
  187. package/.output/server/chunks/routes/api/rebase/abort.post.mjs.map +1 -1
  188. package/.output/server/chunks/routes/api/rebase/ai-resolve.post.mjs +19 -105
  189. package/.output/server/chunks/routes/api/rebase/ai-resolve.post.mjs.map +1 -1
  190. package/.output/server/chunks/routes/api/rebase/conflicts.get.mjs +3 -1
  191. package/.output/server/chunks/routes/api/rebase/conflicts.get.mjs.map +1 -1
  192. package/.output/server/chunks/routes/api/rebase/continue-sync.post.mjs +4 -2
  193. package/.output/server/chunks/routes/api/rebase/continue-sync.post.mjs.map +1 -1
  194. package/.output/server/chunks/routes/api/rebase/continue.post.mjs +71 -73
  195. package/.output/server/chunks/routes/api/rebase/continue.post.mjs.map +1 -1
  196. package/.output/server/chunks/routes/api/rebase/resolve.put.mjs +3 -1
  197. package/.output/server/chunks/routes/api/rebase/resolve.put.mjs.map +1 -1
  198. package/.output/server/chunks/routes/api/repository/status.get.mjs +4 -5
  199. package/.output/server/chunks/routes/api/repository/status.get.mjs.map +1 -1
  200. package/.output/server/chunks/routes/api/settings.get.mjs +6 -5
  201. package/.output/server/chunks/routes/api/settings.get.mjs.map +1 -1
  202. package/.output/server/chunks/routes/api/settings.post.mjs +5 -3
  203. package/.output/server/chunks/routes/api/settings.post.mjs.map +1 -1
  204. package/.output/server/chunks/routes/api/skills/_skillId/prompt.post.mjs +3 -1
  205. package/.output/server/chunks/routes/api/skills/_skillId/prompt.post.mjs.map +1 -1
  206. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.get.mjs +3 -1
  207. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.get.mjs.map +1 -1
  208. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.put.mjs +3 -1
  209. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.put.mjs.map +1 -1
  210. package/.output/server/chunks/routes/api/specs/features.get.mjs +3 -1
  211. package/.output/server/chunks/routes/api/specs/features.get.mjs.map +1 -1
  212. package/.output/server/chunks/routes/api/specs/reindex.post.mjs +4 -2
  213. package/.output/server/chunks/routes/api/specs/reindex.post.mjs.map +1 -1
  214. package/.output/server/chunks/routes/api/specs/search.get.mjs +4 -2
  215. package/.output/server/chunks/routes/api/specs/search.get.mjs.map +1 -1
  216. package/.output/server/chunks/routes/api/specs/status.get.mjs +4 -2
  217. package/.output/server/chunks/routes/api/specs/status.get.mjs.map +1 -1
  218. package/.output/server/chunks/routes/api/specs/traceability/_featureId_.get.mjs +4 -2
  219. package/.output/server/chunks/routes/api/specs/traceability/_featureId_.get.mjs.map +1 -1
  220. package/.output/server/chunks/routes/api/worktrees/_name/switch.post.mjs +4 -2
  221. package/.output/server/chunks/routes/api/worktrees/_name/switch.post.mjs.map +1 -1
  222. package/.output/server/chunks/routes/api/worktrees/_name_.delete.mjs +3 -1
  223. package/.output/server/chunks/routes/api/worktrees/_name_.delete.mjs.map +1 -1
  224. package/.output/server/chunks/routes/git-watcher-ws.mjs +4 -2
  225. package/.output/server/chunks/routes/git-watcher-ws.mjs.map +1 -1
  226. package/.output/server/chunks/routes/renderer.mjs +4 -2
  227. package/.output/server/chunks/routes/terminal-ws.mjs +230 -0
  228. package/.output/server/chunks/routes/terminal-ws.mjs.map +1 -0
  229. package/.output/server/index.mjs +4 -2
  230. package/.output/server/index.mjs.map +1 -1
  231. package/.output/server/node_modules/node-pty/build/Makefile +369 -0
  232. package/.output/server/node_modules/node-pty/build/Release/pty.node +0 -0
  233. package/.output/server/node_modules/node-pty/build/binding.Makefile +6 -0
  234. package/.output/server/node_modules/node-pty/build/config.gypi +513 -0
  235. package/.output/server/node_modules/node-pty/build/pty.target.mk +168 -0
  236. package/.output/server/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  237. package/.output/server/node_modules/node-pty/lib/index.js +52 -0
  238. package/.output/server/node_modules/node-pty/lib/shared/conout.js +11 -0
  239. package/.output/server/node_modules/node-pty/lib/terminal.js +190 -0
  240. package/.output/server/node_modules/node-pty/lib/unixTerminal.js +346 -0
  241. package/.output/server/node_modules/node-pty/lib/utils.js +39 -0
  242. package/.output/server/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  243. package/.output/server/node_modules/node-pty/lib/windowsPtyAgent.js +320 -0
  244. package/.output/server/node_modules/node-pty/lib/windowsTerminal.js +199 -0
  245. package/.output/server/node_modules/node-pty/package.json +64 -0
  246. package/.output/server/package.json +2 -1
  247. package/package.json +4 -1
  248. package/.output/public/_nuxt/2zamijve.js +0 -1
  249. package/.output/public/_nuxt/BEjIzkrM.js +0 -85
  250. package/.output/public/_nuxt/BaSsfm-t.js +0 -36
  251. package/.output/public/_nuxt/BjdLSVUw.js +0 -1
  252. package/.output/public/_nuxt/DeqM2TrP.js +0 -1
  253. package/.output/public/_nuxt/builds/meta/74089fa1-2fbb-4792-94aa-7535d2aec557.json +0 -1
  254. package/.output/public/_nuxt/default.DKSPicGu.css +0 -1
  255. package/.output/public/_nuxt/entry.BUDfUMkE.css +0 -1
  256. package/.output/public/_nuxt/zrVRZSxq.js +0 -64
  257. package/.output/server/chunks/_/baseBranch.mjs +0 -137
  258. package/.output/server/chunks/_/baseBranch.mjs.map +0 -1
  259. package/.output/server/chunks/_/claude.mjs +0 -164
  260. package/.output/server/chunks/_/claude.mjs.map +0 -1
  261. package/.output/server/chunks/_/conversationStore.mjs +0 -257
  262. package/.output/server/chunks/_/conversationStore.mjs.map +0 -1
  263. package/.output/server/chunks/_/geminiProvider.mjs +0 -372
  264. package/.output/server/chunks/_/geminiProvider.mjs.map +0 -1
  265. package/.output/server/chunks/_/gitExec.mjs +0 -48
  266. package/.output/server/chunks/_/gitExec.mjs.map +0 -1
  267. package/.output/server/chunks/_/providerProcessError.mjs +0 -163
  268. package/.output/server/chunks/_/providerProcessError.mjs.map +0 -1
  269. package/.output/server/chunks/_/uiAdapter.mjs +0 -421
  270. package/.output/server/chunks/_/uiAdapter.mjs.map +0 -1
  271. package/.output/server/chunks/routes/api/chat.post.mjs +0 -276
  272. package/.output/server/chunks/routes/api/chat.post.mjs.map +0 -1
@@ -0,0 +1,582 @@
1
+ import { mkdirSync, writeFileSync, existsSync, readFileSync, readdirSync, statSync, openSync, readSync, closeSync, realpathSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { execSync } from 'node:child_process';
4
+ import { join, dirname } from 'node:path';
5
+ import { spawn } from 'node-pty';
6
+ import { t as getSpecCatStorePath, a as getProjectDir } from '../nitro/nitro.mjs';
7
+ import { resolveCodexHomeForSpawn } from './codexProvider.mjs';
8
+
9
+ const HOOK_EVENTS = [
10
+ "SessionStart",
11
+ "UserPromptSubmit",
12
+ "PostToolUse",
13
+ "PostToolUseFailure",
14
+ "Stop",
15
+ "SubagentStop"
16
+ ];
17
+ function ensureHookRunner() {
18
+ const runnerPath = getSpecCatStorePath("cli-hooks/spec-cat-hook-runner.cjs");
19
+ const dir = dirname(runnerPath);
20
+ if (!existsSync(dir)) {
21
+ mkdirSync(dir, { recursive: true });
22
+ }
23
+ const script = `#!/usr/bin/env node
24
+ const fs = require('node:fs')
25
+
26
+ let input = ''
27
+ process.stdin.setEncoding('utf8')
28
+ process.stdin.on('data', chunk => { input += chunk })
29
+ process.stdin.on('end', () => {
30
+ const contextRaw = process.env.SPEC_CAT_HOOK_CONTEXT || '{}'
31
+ const spoolPath = process.env.SPEC_CAT_HOOK_SPOOL
32
+ if (!spoolPath) {
33
+ process.exit(0)
34
+ }
35
+
36
+ let payload = null
37
+ let context = {}
38
+ try { payload = input.trim() ? JSON.parse(input) : null } catch { payload = { parseError: true, raw: input } }
39
+ try { context = JSON.parse(contextRaw) } catch { context = {} }
40
+
41
+ const event = {
42
+ timestamp: new Date().toISOString(),
43
+ ...context,
44
+ hookEventName: payload && typeof payload === 'object' ? payload.hook_event_name : undefined,
45
+ sessionId: payload && typeof payload === 'object' ? payload.session_id : undefined,
46
+ turnId: payload && typeof payload === 'object' ? payload.turn_id : undefined,
47
+ cwd: payload && typeof payload === 'object' ? payload.cwd : undefined,
48
+ payload,
49
+ }
50
+
51
+ try {
52
+ fs.mkdirSync(require('node:path').dirname(spoolPath), { recursive: true })
53
+ fs.appendFileSync(spoolPath, JSON.stringify(event) + '\\n', 'utf8')
54
+ } catch {}
55
+
56
+ if (event.hookEventName === 'Stop' || event.hookEventName === 'SubagentStop') {
57
+ process.stdout.write('{}')
58
+ }
59
+ })
60
+ `;
61
+ try {
62
+ const existing = existsSync(runnerPath) ? readFileSync(runnerPath, "utf-8") : "";
63
+ if (existing !== script) {
64
+ writeFileSync(runnerPath, script, { encoding: "utf-8", mode: 493 });
65
+ }
66
+ } catch {
67
+ writeFileSync(runnerPath, script, { encoding: "utf-8", mode: 493 });
68
+ }
69
+ return runnerPath;
70
+ }
71
+ function prepareCliHookInjection(context) {
72
+ const runnerPath = ensureHookRunner();
73
+ const spoolPath = getCliHookSpoolPath(context.conversationId);
74
+ return {
75
+ runnerPath,
76
+ spoolPath,
77
+ env: {
78
+ SPEC_CAT_HOOK_CONTEXT: JSON.stringify(context),
79
+ SPEC_CAT_HOOK_SPOOL: spoolPath
80
+ }
81
+ };
82
+ }
83
+ function getCliHookSpoolPath(conversationId) {
84
+ return getSpecCatStorePath(`cli-hooks/${conversationId}.jsonl`);
85
+ }
86
+ function parseCliHookRecord(line) {
87
+ const cleaned = line.trim();
88
+ if (!cleaned) return null;
89
+ try {
90
+ const parsed = JSON.parse(cleaned);
91
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
92
+ return parsed;
93
+ } catch {
94
+ return null;
95
+ }
96
+ }
97
+ function buildCommandHook(runnerPath, statusMessage) {
98
+ return {
99
+ type: "command",
100
+ command: `node "${runnerPath}"`,
101
+ timeout: 30,
102
+ ...statusMessage ? { statusMessage } : {}
103
+ };
104
+ }
105
+ function buildCodexHooksJson(runnerPath) {
106
+ const hooks = {};
107
+ for (const event of HOOK_EVENTS) {
108
+ hooks[event] = [
109
+ {
110
+ hooks: [
111
+ buildCommandHook(runnerPath, `Spec Cat ${event}`)
112
+ ]
113
+ }
114
+ ];
115
+ }
116
+ return { hooks };
117
+ }
118
+ function buildClaudeHooksJson(runnerPath) {
119
+ const hooks = {};
120
+ for (const event of HOOK_EVENTS) {
121
+ hooks[event] = [
122
+ {
123
+ hooks: [
124
+ buildCommandHook(runnerPath)
125
+ ]
126
+ }
127
+ ];
128
+ }
129
+ return { hooks };
130
+ }
131
+ function writeCodexHooks(codexHome, runnerPath) {
132
+ const hooksPath = join(codexHome, "hooks.json");
133
+ mkdirSync(dirname(hooksPath), { recursive: true });
134
+ writeFileSync(hooksPath, JSON.stringify(buildCodexHooksJson(runnerPath), null, 2), "utf-8");
135
+ }
136
+ function mergeHookConfig(existing, generated) {
137
+ const merged = { ...existing };
138
+ const existingHooks = existing.hooks && typeof existing.hooks === "object" && !Array.isArray(existing.hooks) ? existing.hooks : {};
139
+ const generatedHooks = generated.hooks;
140
+ const hooks = { ...existingHooks };
141
+ for (const [event, entries] of Object.entries(generatedHooks)) {
142
+ const current = Array.isArray(existingHooks[event]) ? existingHooks[event] : [];
143
+ hooks[event] = [
144
+ ...current.filter((entry) => {
145
+ const serialized = JSON.stringify(entry);
146
+ return !serialized.includes("SPEC_CAT_HOOK_SPOOL") && !serialized.includes("spec-cat-hook-runner.cjs");
147
+ }),
148
+ ...entries
149
+ ];
150
+ }
151
+ merged.hooks = hooks;
152
+ return merged;
153
+ }
154
+ function writeClaudeLocalSettings(cwd, runnerPath) {
155
+ const settingsPath = join(cwd, ".claude", "settings.local.json");
156
+ mkdirSync(dirname(settingsPath), { recursive: true });
157
+ let existing = {};
158
+ if (existsSync(settingsPath)) {
159
+ try {
160
+ const parsed = JSON.parse(readFileSync(settingsPath, "utf-8"));
161
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
162
+ existing = parsed;
163
+ }
164
+ } catch {
165
+ existing = {};
166
+ }
167
+ }
168
+ const generated = buildClaudeHooksJson(runnerPath);
169
+ writeFileSync(settingsPath, JSON.stringify(mergeHookConfig(existing, generated), null, 2), "utf-8");
170
+ }
171
+
172
+ function detectClaudeCli() {
173
+ const systemPaths = [
174
+ // User local bin (common for npm/pnpm global installs)
175
+ join(process.env.HOME || "", ".local/bin/claude"),
176
+ // Standard unix paths
177
+ "/usr/local/bin/claude",
178
+ "/usr/bin/claude"
179
+ ];
180
+ for (const path of systemPaths) {
181
+ if (existsSync(path)) {
182
+ console.log(`[Claude CLI] Found system installation: ${path}`);
183
+ return path;
184
+ }
185
+ }
186
+ try {
187
+ const whichResult = execSync("which claude 2>/dev/null", { encoding: "utf-8" }).trim();
188
+ if (whichResult && existsSync(whichResult)) {
189
+ console.log(`[Claude CLI] Found via which: ${whichResult}`);
190
+ return whichResult;
191
+ }
192
+ } catch {
193
+ }
194
+ return null;
195
+ }
196
+ let cachedCliPath = null;
197
+ function getClaudeCliPath() {
198
+ if (cachedCliPath === null) {
199
+ cachedCliPath = detectClaudeCli();
200
+ }
201
+ if (!cachedCliPath) {
202
+ throw new Error(
203
+ "Claude Code CLI not found. Please install Claude Code CLI globally."
204
+ );
205
+ }
206
+ return cachedCliPath;
207
+ }
208
+
209
+ const ROLLOUT_FILENAME_RE = /^rollout-.*-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;
210
+ const CWD_RE$1 = /"cwd"\s*:\s*"((?:[^"\\]|\\.)*)"/;
211
+ const HEAD_BYTES$1 = 8192;
212
+ function getCodexSessionsDir() {
213
+ const home = typeof process.env.CODEX_HOME === "string" && process.env.CODEX_HOME.length > 0 ? process.env.CODEX_HOME : join(process.env.HOME || homedir(), ".codex");
214
+ return join(home, "sessions");
215
+ }
216
+ function readRolloutCwd(filePath) {
217
+ let fd = null;
218
+ try {
219
+ fd = openSync(filePath, "r");
220
+ const buffer = Buffer.alloc(HEAD_BYTES$1);
221
+ const bytesRead = readSync(fd, buffer, 0, HEAD_BYTES$1, 0);
222
+ const head = buffer.toString("utf-8", 0, bytesRead);
223
+ const match = CWD_RE$1.exec(head);
224
+ if (!match) return null;
225
+ try {
226
+ return JSON.parse(`"${match[1]}"`);
227
+ } catch {
228
+ return match[1];
229
+ }
230
+ } catch {
231
+ return null;
232
+ } finally {
233
+ if (fd !== null) {
234
+ try {
235
+ closeSync(fd);
236
+ } catch {
237
+ }
238
+ }
239
+ }
240
+ }
241
+ function findLatestCodexSessionIdForCwd(cwd, afterMs) {
242
+ const root = getCodexSessionsDir();
243
+ if (!existsSync(root)) return null;
244
+ const candidates = [];
245
+ const walk = (dir, depth) => {
246
+ let entries;
247
+ try {
248
+ entries = readdirSync(dir, { withFileTypes: true });
249
+ } catch {
250
+ return;
251
+ }
252
+ for (const entry of entries) {
253
+ const fullPath = join(dir, entry.name);
254
+ if (entry.isDirectory()) {
255
+ if (depth < 4) walk(fullPath, depth + 1);
256
+ continue;
257
+ }
258
+ if (!entry.isFile()) continue;
259
+ const match = ROLLOUT_FILENAME_RE.exec(entry.name);
260
+ if (!match) continue;
261
+ let mtime;
262
+ try {
263
+ mtime = statSync(fullPath).mtimeMs;
264
+ } catch {
265
+ continue;
266
+ }
267
+ if (mtime + 1 < afterMs) continue;
268
+ candidates.push({ path: fullPath, id: match[1], mtime });
269
+ }
270
+ };
271
+ walk(root, 0);
272
+ candidates.sort((a, b) => b.mtime - a.mtime);
273
+ for (const candidate of candidates) {
274
+ if (readRolloutCwd(candidate.path) === cwd) {
275
+ return candidate.id;
276
+ }
277
+ }
278
+ return null;
279
+ }
280
+
281
+ const SESSION_FILENAME_RE = /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;
282
+ const CWD_RE = /"cwd"\s*:\s*"((?:[^"\\]|\\.)*)"/;
283
+ const HEAD_BYTES = 8192;
284
+ function getClaudeProjectsDir() {
285
+ const home = typeof process.env.CLAUDE_CONFIG_DIR === "string" && process.env.CLAUDE_CONFIG_DIR.length > 0 ? process.env.CLAUDE_CONFIG_DIR : join(process.env.HOME || homedir(), ".claude");
286
+ return join(home, "projects");
287
+ }
288
+ function encodeClaudeProjectDir(cwd) {
289
+ return cwd.replace(/[/.]/g, "-");
290
+ }
291
+ function readSessionCwd(filePath) {
292
+ let fd = null;
293
+ try {
294
+ fd = openSync(filePath, "r");
295
+ const buffer = Buffer.alloc(HEAD_BYTES);
296
+ const bytesRead = readSync(fd, buffer, 0, HEAD_BYTES, 0);
297
+ const head = buffer.toString("utf-8", 0, bytesRead);
298
+ const match = CWD_RE.exec(head);
299
+ if (!match) return null;
300
+ try {
301
+ return JSON.parse(`"${match[1]}"`);
302
+ } catch {
303
+ return match[1];
304
+ }
305
+ } catch {
306
+ return null;
307
+ } finally {
308
+ if (fd !== null) {
309
+ try {
310
+ closeSync(fd);
311
+ } catch {
312
+ }
313
+ }
314
+ }
315
+ }
316
+ function collectCandidatesInDir(dir, afterMs) {
317
+ let entries;
318
+ try {
319
+ entries = readdirSync(dir, { withFileTypes: true });
320
+ } catch {
321
+ return [];
322
+ }
323
+ const candidates = [];
324
+ for (const entry of entries) {
325
+ if (!entry.isFile()) continue;
326
+ const match = SESSION_FILENAME_RE.exec(entry.name);
327
+ if (!match) continue;
328
+ const fullPath = join(dir, entry.name);
329
+ let mtime;
330
+ try {
331
+ mtime = statSync(fullPath).mtimeMs;
332
+ } catch {
333
+ continue;
334
+ }
335
+ if (mtime + 1 < afterMs) continue;
336
+ candidates.push({ path: fullPath, id: match[1], mtime });
337
+ }
338
+ return candidates;
339
+ }
340
+ function pickStrictMatch(candidates, cwd) {
341
+ for (const candidate of [...candidates].sort((a, b) => b.mtime - a.mtime)) {
342
+ if (readSessionCwd(candidate.path) === cwd) return candidate.id;
343
+ }
344
+ return null;
345
+ }
346
+ function findLatestClaudeSessionIdForCwd(cwd, afterMs) {
347
+ const projectsDir = getClaudeProjectsDir();
348
+ const derivedDir = join(projectsDir, encodeClaudeProjectDir(cwd));
349
+ const derivedCandidates = existsSync(derivedDir) ? collectCandidatesInDir(derivedDir, afterMs) : [];
350
+ const strictLocal = pickStrictMatch(derivedCandidates, cwd);
351
+ if (strictLocal) return strictLocal;
352
+ let projectDirs = [];
353
+ try {
354
+ projectDirs = readdirSync(projectsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => join(projectsDir, entry.name)).filter((path) => path !== derivedDir);
355
+ } catch {
356
+ projectDirs = [];
357
+ }
358
+ for (const dir of projectDirs) {
359
+ const strict = pickStrictMatch(collectCandidatesInDir(dir, afterMs), cwd);
360
+ if (strict) return strict;
361
+ }
362
+ const newestUnreadable = [...derivedCandidates].sort((a, b) => b.mtime - a.mtime).find((candidate) => readSessionCwd(candidate.path) === null);
363
+ return newestUnreadable ? newestUnreadable.id : null;
364
+ }
365
+
366
+ const MAX_BUFFER_LENGTH = 2e5;
367
+ const DEFAULT_COLS = 100;
368
+ const DEFAULT_ROWS = 30;
369
+ const SESSION_CAPTURE_INTERVAL_MS = 400;
370
+ const SESSION_CAPTURE_FAST_WINDOW_MS = 12e3;
371
+ const SESSION_CAPTURE_SLOW_INTERVAL_MS = 2e3;
372
+ const SESSION_CAPTURE_MAX_MS = 5 * 6e4;
373
+ const DEAD_SESSION_TTL_MS = 5 * 6e4;
374
+ const sessions = /* @__PURE__ */ new Map();
375
+ function detectCodexCliPath() {
376
+ if (typeof process.env.CODEX_CLI_PATH === "string" && process.env.CODEX_CLI_PATH.length > 0 && existsSync(process.env.CODEX_CLI_PATH)) {
377
+ return process.env.CODEX_CLI_PATH;
378
+ }
379
+ const candidates = [
380
+ join(process.env.HOME || "", ".local/bin/codex"),
381
+ "/usr/local/bin/codex",
382
+ "/usr/bin/codex"
383
+ ];
384
+ for (const candidate of candidates) {
385
+ if (existsSync(candidate)) return candidate;
386
+ }
387
+ try {
388
+ const whichResult = execSync("which codex 2>/dev/null", { encoding: "utf-8" }).trim();
389
+ return whichResult && existsSync(whichResult) ? whichResult : null;
390
+ } catch {
391
+ return null;
392
+ }
393
+ }
394
+ function getCodexCliPath() {
395
+ const cliPath = detectCodexCliPath();
396
+ if (!cliPath) {
397
+ throw new Error("Codex CLI not found. Install codex CLI or set CODEX_CLI_PATH.");
398
+ }
399
+ return cliPath;
400
+ }
401
+ function resolveTerminalCommand(providerId, modelKey, resumeSessionId) {
402
+ if (providerId === "codex") {
403
+ const args2 = resumeSessionId ? ["resume", resumeSessionId, "--dangerously-bypass-approvals-and-sandbox"] : ["--dangerously-bypass-approvals-and-sandbox"];
404
+ if (modelKey) {
405
+ args2.push("--model", modelKey);
406
+ }
407
+ return {
408
+ command: getCodexCliPath(),
409
+ args: args2
410
+ };
411
+ }
412
+ const args = ["--dangerously-skip-permissions"];
413
+ if (resumeSessionId) {
414
+ args.unshift("--resume", resumeSessionId);
415
+ }
416
+ return {
417
+ command: getClaudeCliPath(),
418
+ args
419
+ };
420
+ }
421
+ function resolveSafeCwd(cwd) {
422
+ const fallback = getProjectDir() || process.cwd();
423
+ const candidate = typeof cwd === "string" && cwd.trim().length > 0 ? cwd : fallback;
424
+ try {
425
+ if (!existsSync(candidate)) return fallback;
426
+ return realpathSync(candidate);
427
+ } catch {
428
+ return fallback;
429
+ }
430
+ }
431
+ function trimBuffer(buffer) {
432
+ if (buffer.length <= MAX_BUFFER_LENGTH) return buffer;
433
+ return buffer.slice(buffer.length - MAX_BUFFER_LENGTH);
434
+ }
435
+ function getTerminalSession(sessionId) {
436
+ return sessions.get(sessionId);
437
+ }
438
+ function getOrCreateTerminalSession(options) {
439
+ var _a;
440
+ const existing = sessions.get(options.sessionId);
441
+ if (existing && existing.exitCode === null) {
442
+ existing.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
443
+ return existing;
444
+ }
445
+ const cwd = resolveSafeCwd(options.cwd);
446
+ const { command, args } = resolveTerminalCommand(options.providerId, options.modelKey, options.resumeSessionId);
447
+ let hookEnv = {};
448
+ if ((_a = options.hookContext) == null ? void 0 : _a.enabled) {
449
+ const injection = prepareCliHookInjection({
450
+ providerId: options.hookContext.providerId,
451
+ conversationId: options.hookContext.conversationId,
452
+ jobId: options.hookContext.jobId,
453
+ requestId: options.hookContext.requestId
454
+ });
455
+ hookEnv = { ...injection.env };
456
+ if (options.providerId === "codex") {
457
+ const codexHome = resolveCodexHomeForSpawn(false, options.hookContext.conversationId);
458
+ if (codexHome) {
459
+ writeCodexHooks(codexHome, injection.runnerPath);
460
+ hookEnv.CODEX_HOME = codexHome;
461
+ }
462
+ args.push("--dangerously-bypass-hook-trust");
463
+ } else {
464
+ writeClaudeLocalSettings(cwd, injection.runnerPath);
465
+ }
466
+ }
467
+ const cols = Number.isFinite(options.cols) && options.cols > 0 ? Math.floor(options.cols) : DEFAULT_COLS;
468
+ const rows = Number.isFinite(options.rows) && options.rows > 0 ? Math.floor(options.rows) : DEFAULT_ROWS;
469
+ const spawnedAtMs = Date.now();
470
+ const ptyProcess = spawn(command, args, {
471
+ name: "xterm-256color",
472
+ cols,
473
+ rows,
474
+ cwd,
475
+ env: {
476
+ ...process.env,
477
+ TERM: "xterm-256color",
478
+ COLORTERM: "truecolor",
479
+ SPEC_CAT_TERMINAL: "1",
480
+ HOME: process.env.HOME || homedir(),
481
+ PWD: cwd,
482
+ ...hookEnv
483
+ }
484
+ });
485
+ const session = {
486
+ id: options.sessionId,
487
+ cwd,
488
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
489
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
490
+ process: ptyProcess,
491
+ buffer: "",
492
+ cols,
493
+ rows,
494
+ exitCode: null,
495
+ onDataCallbacks: /* @__PURE__ */ new Set(),
496
+ onExitCallbacks: /* @__PURE__ */ new Set()
497
+ };
498
+ ptyProcess.onData((data) => {
499
+ session.buffer = trimBuffer(session.buffer + data);
500
+ session.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
501
+ for (const callback of session.onDataCallbacks) {
502
+ callback(data);
503
+ }
504
+ });
505
+ ptyProcess.onExit(({ exitCode }) => {
506
+ session.exitCode = exitCode;
507
+ session.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
508
+ for (const callback of session.onExitCallbacks) {
509
+ callback(exitCode);
510
+ }
511
+ setTimeout(() => {
512
+ const current = sessions.get(options.sessionId);
513
+ if (current === session && current.exitCode !== null) {
514
+ sessions.delete(options.sessionId);
515
+ }
516
+ }, DEAD_SESSION_TTL_MS);
517
+ });
518
+ sessions.set(options.sessionId, session);
519
+ if (!options.resumeSessionId && options.onProviderSessionId) {
520
+ const find = options.providerId === "codex" ? findLatestCodexSessionIdForCwd : findLatestClaudeSessionIdForCwd;
521
+ captureProviderSessionId(session, cwd, spawnedAtMs, find, options.onProviderSessionId);
522
+ }
523
+ return session;
524
+ }
525
+ function captureProviderSessionId(session, cwd, afterMs, find, onProviderSessionId) {
526
+ const deadline = afterMs + SESSION_CAPTURE_MAX_MS;
527
+ const fastUntil = afterMs + SESSION_CAPTURE_FAST_WINDOW_MS;
528
+ const attempt = () => {
529
+ const sessionId = find(cwd, afterMs);
530
+ if (sessionId) {
531
+ try {
532
+ onProviderSessionId(sessionId);
533
+ } catch {
534
+ }
535
+ return;
536
+ }
537
+ if (session.exitCode !== null || Date.now() >= deadline) return;
538
+ const nextInterval = Date.now() < fastUntil ? SESSION_CAPTURE_INTERVAL_MS : SESSION_CAPTURE_SLOW_INTERVAL_MS;
539
+ setTimeout(attempt, nextInterval);
540
+ };
541
+ setTimeout(attempt, SESSION_CAPTURE_INTERVAL_MS);
542
+ }
543
+ function subscribeTerminalSession(session, handlers) {
544
+ session.onDataCallbacks.add(handlers.onData);
545
+ session.onExitCallbacks.add(handlers.onExit);
546
+ return () => {
547
+ session.onDataCallbacks.delete(handlers.onData);
548
+ session.onExitCallbacks.delete(handlers.onExit);
549
+ };
550
+ }
551
+ function writeTerminalInput(sessionId, data) {
552
+ const session = sessions.get(sessionId);
553
+ if (!session || session.exitCode !== null) return false;
554
+ session.process.write(data);
555
+ session.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
556
+ return true;
557
+ }
558
+ function resizeTerminal(sessionId, cols, rows) {
559
+ const session = sessions.get(sessionId);
560
+ if (!session || session.exitCode !== null) return false;
561
+ if (!Number.isFinite(cols) || !Number.isFinite(rows) || cols <= 0 || rows <= 0) return false;
562
+ session.cols = Math.floor(cols);
563
+ session.rows = Math.floor(rows);
564
+ session.process.resize(session.cols, session.rows);
565
+ session.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
566
+ return true;
567
+ }
568
+ function buildTerminalSessionId(conversationId) {
569
+ return `conversation:${conversationId}`;
570
+ }
571
+ function disposeTerminalSession(sessionId) {
572
+ const session = sessions.get(sessionId);
573
+ if (!session) return;
574
+ try {
575
+ session.process.kill();
576
+ } catch {
577
+ }
578
+ sessions.delete(sessionId);
579
+ }
580
+
581
+ export { getOrCreateTerminalSession as a, buildTerminalSessionId as b, getTerminalSession as c, disposeTerminalSession as d, getCliHookSpoolPath as g, parseCliHookRecord as p, resizeTerminal as r, subscribeTerminalSession as s, writeTerminalInput as w };
582
+ //# sourceMappingURL=terminalSessions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalSessions.mjs","sources":["../../../../server/utils/cliHookInjection.ts","../../../../server/utils/claude.ts","../../../../server/utils/codexRollout.ts","../../../../server/utils/claudeSession.ts","../../../../server/utils/terminalSessions.ts"],"names":["CWD_RE","HEAD_BYTES","args"],"mappings":"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"}