spec-cat 0.1.63 → 0.1.65

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 (271) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/B-bFNWCF.js +43 -0
  3. package/.output/public/_nuxt/{D4LyIv_t.js → BEWSHKZd.js} +1 -1
  4. package/.output/public/_nuxt/{Su-Cl_JF.js → BHhMtuRK.js} +1 -1
  5. package/.output/public/_nuxt/{DwpuOtAP.js → BwRpECPL.js} +1 -1
  6. package/.output/public/_nuxt/{FfyCVKRU.js → CC_9aMCT.js} +1 -1
  7. package/.output/public/_nuxt/CHHbeXzh.js +1 -0
  8. package/.output/public/_nuxt/{DIOhMCOf.js → CzV__9yP.js} +3 -3
  9. package/.output/public/_nuxt/{Bz2rU2zs.js → DWDrIutw.js} +1 -1
  10. package/.output/public/_nuxt/D_4Ow2w2.js +1 -0
  11. package/.output/public/_nuxt/D_T_F7lf.js +1 -0
  12. package/.output/public/_nuxt/{DPOGSCeV.js → DqFq1MXh.js} +1 -1
  13. package/.output/public/_nuxt/YzuyFhrD.js +174 -0
  14. package/.output/public/_nuxt/builds/latest.json +1 -1
  15. package/.output/public/_nuxt/builds/meta/cdc4ded8-9ff7-4e22-abbe-3b8c94caa781.json +1 -0
  16. package/.output/public/_nuxt/default.Cyeq1Er8.css +1 -0
  17. package/.output/public/_nuxt/entry.uBSFaL6A.css +1 -0
  18. package/.output/public/_nuxt/{useTheme.Cny4Z64J.css → useTheme.B4wINCoW.css} +1 -1
  19. package/.output/public/_nuxt/uyJF9wDo.js +58 -0
  20. package/.output/server/chunks/_/aiProviderRegistry.mjs +1 -2
  21. package/.output/server/chunks/_/aiProviderRegistry.mjs.map +1 -1
  22. package/.output/server/chunks/_/aiProviderSelection.mjs +2 -2
  23. package/.output/server/chunks/_/chatGit.mjs +1 -2
  24. package/.output/server/chunks/_/chatGit.mjs.map +1 -1
  25. package/.output/server/chunks/_/claudeProvider.mjs +1 -215
  26. package/.output/server/chunks/_/claudeProvider.mjs.map +1 -1
  27. package/.output/server/chunks/_/claudeService.mjs +50 -54
  28. package/.output/server/chunks/_/claudeService.mjs.map +1 -1
  29. package/.output/server/chunks/_/codexProvider.mjs +47 -812
  30. package/.output/server/chunks/_/codexProvider.mjs.map +1 -1
  31. package/.output/server/chunks/_/git.mjs +1 -2
  32. package/.output/server/chunks/_/git.mjs.map +1 -1
  33. package/.output/server/chunks/_/gitApiHelpers.mjs +1 -1
  34. package/.output/server/chunks/_/gitBranchOperations.mjs +1 -1
  35. package/.output/server/chunks/_/interactiveProviderQuery.mjs +160 -0
  36. package/.output/server/chunks/_/interactiveProviderQuery.mjs.map +1 -0
  37. package/.output/server/chunks/_/jobPersister.mjs +37 -6
  38. package/.output/server/chunks/_/jobPersister.mjs.map +1 -1
  39. package/.output/server/chunks/_/jobQueue.mjs +430 -278
  40. package/.output/server/chunks/_/jobQueue.mjs.map +1 -1
  41. package/.output/server/chunks/_/terminalSessions.mjs +582 -0
  42. package/.output/server/chunks/_/terminalSessions.mjs.map +1 -0
  43. package/.output/server/chunks/_/worktreeSetup.mjs +98 -0
  44. package/.output/server/chunks/_/worktreeSetup.mjs.map +1 -0
  45. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  46. package/.output/server/chunks/build/client.precomputed.mjs.map +1 -1
  47. package/.output/server/chunks/nitro/nitro.mjs +1227 -620
  48. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  49. package/.output/server/chunks/routes/_ws.mjs +21 -111
  50. package/.output/server/chunks/routes/_ws.mjs.map +1 -1
  51. package/.output/server/chunks/routes/api/ai/providers.get.mjs +3 -1
  52. package/.output/server/chunks/routes/api/ai/providers.get.mjs.map +1 -1
  53. package/.output/server/chunks/routes/api/chat/compare.get.mjs +4 -5
  54. package/.output/server/chunks/routes/api/chat/compare.get.mjs.map +1 -1
  55. package/.output/server/chunks/routes/api/chat/context.get.mjs +4 -2
  56. package/.output/server/chunks/routes/api/chat/context.get.mjs.map +1 -1
  57. package/.output/server/chunks/routes/api/chat/finalize.post.mjs +11 -7
  58. package/.output/server/chunks/routes/api/chat/finalize.post.mjs.map +1 -1
  59. package/.output/server/chunks/routes/api/chat/generate-commit-message.post.mjs +26 -29
  60. package/.output/server/chunks/routes/api/chat/generate-commit-message.post.mjs.map +1 -1
  61. package/.output/server/chunks/routes/api/chat/preview-sync.post.mjs +4 -5
  62. package/.output/server/chunks/routes/api/chat/preview-sync.post.mjs.map +1 -1
  63. package/.output/server/chunks/routes/api/chat/preview.delete.mjs +4 -5
  64. package/.output/server/chunks/routes/api/chat/preview.delete.mjs.map +1 -1
  65. package/.output/server/chunks/routes/api/chat/preview.post.mjs +4 -6
  66. package/.output/server/chunks/routes/api/chat/preview.post.mjs.map +1 -1
  67. package/.output/server/chunks/routes/api/chat/rebase.post.mjs +4 -7
  68. package/.output/server/chunks/routes/api/chat/rebase.post.mjs.map +1 -1
  69. package/.output/server/chunks/routes/api/chat/worktree-commit.post.mjs +4 -6
  70. package/.output/server/chunks/routes/api/chat/worktree-commit.post.mjs.map +1 -1
  71. package/.output/server/chunks/routes/api/chat/worktree.delete.mjs +11 -4
  72. package/.output/server/chunks/routes/api/chat/worktree.delete.mjs.map +1 -1
  73. package/.output/server/chunks/routes/api/chat/worktree.post.mjs +4 -6
  74. package/.output/server/chunks/routes/api/chat/worktree.post.mjs.map +1 -1
  75. package/.output/server/chunks/routes/api/conversations/_conversationId/archive.post.mjs +10 -9
  76. package/.output/server/chunks/routes/api/conversations/_conversationId/archive.post.mjs.map +1 -1
  77. package/.output/server/chunks/routes/api/conversations/archives/_archiveId/restore.post.mjs +4 -7
  78. package/.output/server/chunks/routes/api/conversations/archives/_archiveId/restore.post.mjs.map +1 -1
  79. package/.output/server/chunks/routes/api/conversations/archives/_archiveId_.delete.mjs +4 -7
  80. package/.output/server/chunks/routes/api/conversations/archives/_archiveId_.delete.mjs.map +1 -1
  81. package/.output/server/chunks/routes/api/conversations/archives.delete.mjs +40 -0
  82. package/.output/server/chunks/routes/api/conversations/archives.delete.mjs.map +1 -0
  83. package/.output/server/chunks/routes/api/conversations/archives.get.mjs +4 -7
  84. package/.output/server/chunks/routes/api/conversations/archives.get.mjs.map +1 -1
  85. package/.output/server/chunks/routes/api/conversations/update.post.mjs +4 -7
  86. package/.output/server/chunks/routes/api/conversations/update.post.mjs.map +1 -1
  87. package/.output/server/chunks/routes/api/conversations.get.mjs +4 -7
  88. package/.output/server/chunks/routes/api/conversations.get.mjs.map +1 -1
  89. package/.output/server/chunks/routes/api/conversations.post.mjs +4 -7
  90. package/.output/server/chunks/routes/api/conversations.post.mjs.map +1 -1
  91. package/.output/server/chunks/routes/api/cwd.get.mjs +4 -2
  92. package/.output/server/chunks/routes/api/cwd.get.mjs.map +1 -1
  93. package/.output/server/chunks/routes/api/git/branch-rename.post.mjs +3 -4
  94. package/.output/server/chunks/routes/api/git/branch-rename.post.mjs.map +1 -1
  95. package/.output/server/chunks/routes/api/git/branch.delete.mjs +4 -5
  96. package/.output/server/chunks/routes/api/git/branch.delete.mjs.map +1 -1
  97. package/.output/server/chunks/routes/api/git/branches.get.mjs +4 -6
  98. package/.output/server/chunks/routes/api/git/branches.get.mjs.map +1 -1
  99. package/.output/server/chunks/routes/api/git/checkout.post.mjs +4 -5
  100. package/.output/server/chunks/routes/api/git/checkout.post.mjs.map +1 -1
  101. package/.output/server/chunks/routes/api/git/cherry-pick.post.mjs +3 -4
  102. package/.output/server/chunks/routes/api/git/cherry-pick.post.mjs.map +1 -1
  103. package/.output/server/chunks/routes/api/git/clean.post.mjs +3 -4
  104. package/.output/server/chunks/routes/api/git/clean.post.mjs.map +1 -1
  105. package/.output/server/chunks/routes/api/git/commit/_id_.get.mjs +3 -4
  106. package/.output/server/chunks/routes/api/git/commit/_id_.get.mjs.map +1 -1
  107. package/.output/server/chunks/routes/api/git/commit.post.mjs +4 -5
  108. package/.output/server/chunks/routes/api/git/commit.post.mjs.map +1 -1
  109. package/.output/server/chunks/routes/api/git/diff.get.mjs +4 -5
  110. package/.output/server/chunks/routes/api/git/diff.get.mjs.map +1 -1
  111. package/.output/server/chunks/routes/api/git/fetch.post.mjs +3 -4
  112. package/.output/server/chunks/routes/api/git/fetch.post.mjs.map +1 -1
  113. package/.output/server/chunks/routes/api/git/file-diff.get.mjs +4 -5
  114. package/.output/server/chunks/routes/api/git/file-diff.get.mjs.map +1 -1
  115. package/.output/server/chunks/routes/api/git/graph.get.mjs +4 -5
  116. package/.output/server/chunks/routes/api/git/graph.get.mjs.map +1 -1
  117. package/.output/server/chunks/routes/api/git/log.get.mjs +4 -5
  118. package/.output/server/chunks/routes/api/git/log.get.mjs.map +1 -1
  119. package/.output/server/chunks/routes/api/git/merge-base.get.mjs +4 -5
  120. package/.output/server/chunks/routes/api/git/merge-base.get.mjs.map +1 -1
  121. package/.output/server/chunks/routes/api/git/merge.post.mjs +3 -4
  122. package/.output/server/chunks/routes/api/git/merge.post.mjs.map +1 -1
  123. package/.output/server/chunks/routes/api/git/pull.post.mjs +3 -4
  124. package/.output/server/chunks/routes/api/git/pull.post.mjs.map +1 -1
  125. package/.output/server/chunks/routes/api/git/push.post.mjs +3 -4
  126. package/.output/server/chunks/routes/api/git/push.post.mjs.map +1 -1
  127. package/.output/server/chunks/routes/api/git/rebase.post.mjs +3 -4
  128. package/.output/server/chunks/routes/api/git/rebase.post.mjs.map +1 -1
  129. package/.output/server/chunks/routes/api/git/remote.delete.mjs +3 -4
  130. package/.output/server/chunks/routes/api/git/remote.delete.mjs.map +1 -1
  131. package/.output/server/chunks/routes/api/git/remote.post.mjs +3 -4
  132. package/.output/server/chunks/routes/api/git/remote.post.mjs.map +1 -1
  133. package/.output/server/chunks/routes/api/git/remote.put.mjs +3 -4
  134. package/.output/server/chunks/routes/api/git/remote.put.mjs.map +1 -1
  135. package/.output/server/chunks/routes/api/git/remotes.get.mjs +3 -4
  136. package/.output/server/chunks/routes/api/git/remotes.get.mjs.map +1 -1
  137. package/.output/server/chunks/routes/api/git/reset.post.mjs +3 -4
  138. package/.output/server/chunks/routes/api/git/reset.post.mjs.map +1 -1
  139. package/.output/server/chunks/routes/api/git/revert.post.mjs +3 -4
  140. package/.output/server/chunks/routes/api/git/revert.post.mjs.map +1 -1
  141. package/.output/server/chunks/routes/api/git/show.get.mjs +4 -5
  142. package/.output/server/chunks/routes/api/git/show.get.mjs.map +1 -1
  143. package/.output/server/chunks/routes/api/git/stage.post.mjs +4 -5
  144. package/.output/server/chunks/routes/api/git/stage.post.mjs.map +1 -1
  145. package/.output/server/chunks/routes/api/git/stash-apply.post.mjs +3 -4
  146. package/.output/server/chunks/routes/api/git/stash-apply.post.mjs.map +1 -1
  147. package/.output/server/chunks/routes/api/git/stash-branch.post.mjs +3 -4
  148. package/.output/server/chunks/routes/api/git/stash-branch.post.mjs.map +1 -1
  149. package/.output/server/chunks/routes/api/git/stash-drop.post.mjs +3 -4
  150. package/.output/server/chunks/routes/api/git/stash-drop.post.mjs.map +1 -1
  151. package/.output/server/chunks/routes/api/git/stash-pop.post.mjs +3 -4
  152. package/.output/server/chunks/routes/api/git/stash-pop.post.mjs.map +1 -1
  153. package/.output/server/chunks/routes/api/git/stash.get.mjs +3 -4
  154. package/.output/server/chunks/routes/api/git/stash.get.mjs.map +1 -1
  155. package/.output/server/chunks/routes/api/git/stash.post.mjs +3 -4
  156. package/.output/server/chunks/routes/api/git/stash.post.mjs.map +1 -1
  157. package/.output/server/chunks/routes/api/git/state.get.mjs +3 -4
  158. package/.output/server/chunks/routes/api/git/state.get.mjs.map +1 -1
  159. package/.output/server/chunks/routes/api/git/status.get.mjs +4 -5
  160. package/.output/server/chunks/routes/api/git/status.get.mjs.map +1 -1
  161. package/.output/server/chunks/routes/api/git/tag/_name_.get.mjs +3 -4
  162. package/.output/server/chunks/routes/api/git/tag/_name_.get.mjs.map +1 -1
  163. package/.output/server/chunks/routes/api/git/tag-push.post.mjs +3 -4
  164. package/.output/server/chunks/routes/api/git/tag-push.post.mjs.map +1 -1
  165. package/.output/server/chunks/routes/api/git/tag.delete.mjs +3 -4
  166. package/.output/server/chunks/routes/api/git/tag.delete.mjs.map +1 -1
  167. package/.output/server/chunks/routes/api/git/tag.post.mjs +3 -4
  168. package/.output/server/chunks/routes/api/git/tag.post.mjs.map +1 -1
  169. package/.output/server/chunks/routes/api/git/unstage.post.mjs +4 -5
  170. package/.output/server/chunks/routes/api/git/unstage.post.mjs.map +1 -1
  171. package/.output/server/chunks/routes/api/index.get.mjs +7 -4
  172. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  173. package/.output/server/chunks/routes/api/index.get2.mjs +4 -2
  174. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  175. package/.output/server/chunks/routes/api/index.get3.mjs +4 -2
  176. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  177. package/.output/server/chunks/routes/api/index.post.mjs +19 -16
  178. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  179. package/.output/server/chunks/routes/api/index.post2.mjs +4 -6
  180. package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
  181. package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs +6 -3
  182. package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs.map +1 -1
  183. package/.output/server/chunks/routes/api/jobs/_id_.get.mjs +7 -4
  184. package/.output/server/chunks/routes/api/jobs/_id_.get.mjs.map +1 -1
  185. package/.output/server/chunks/routes/api/rebase/abort.post.mjs +4 -2
  186. package/.output/server/chunks/routes/api/rebase/abort.post.mjs.map +1 -1
  187. package/.output/server/chunks/routes/api/rebase/ai-resolve.post.mjs +19 -105
  188. package/.output/server/chunks/routes/api/rebase/ai-resolve.post.mjs.map +1 -1
  189. package/.output/server/chunks/routes/api/rebase/conflicts.get.mjs +3 -1
  190. package/.output/server/chunks/routes/api/rebase/conflicts.get.mjs.map +1 -1
  191. package/.output/server/chunks/routes/api/rebase/continue-sync.post.mjs +4 -2
  192. package/.output/server/chunks/routes/api/rebase/continue-sync.post.mjs.map +1 -1
  193. package/.output/server/chunks/routes/api/rebase/continue.post.mjs +71 -73
  194. package/.output/server/chunks/routes/api/rebase/continue.post.mjs.map +1 -1
  195. package/.output/server/chunks/routes/api/rebase/resolve.put.mjs +3 -1
  196. package/.output/server/chunks/routes/api/rebase/resolve.put.mjs.map +1 -1
  197. package/.output/server/chunks/routes/api/repository/status.get.mjs +4 -5
  198. package/.output/server/chunks/routes/api/repository/status.get.mjs.map +1 -1
  199. package/.output/server/chunks/routes/api/settings.get.mjs +6 -5
  200. package/.output/server/chunks/routes/api/settings.get.mjs.map +1 -1
  201. package/.output/server/chunks/routes/api/settings.post.mjs +5 -3
  202. package/.output/server/chunks/routes/api/settings.post.mjs.map +1 -1
  203. package/.output/server/chunks/routes/api/skills/_skillId/prompt.post.mjs +3 -1
  204. package/.output/server/chunks/routes/api/skills/_skillId/prompt.post.mjs.map +1 -1
  205. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.get.mjs +3 -1
  206. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.get.mjs.map +1 -1
  207. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.put.mjs +3 -1
  208. package/.output/server/chunks/routes/api/specs/_featureId/_...filename_.put.mjs.map +1 -1
  209. package/.output/server/chunks/routes/api/specs/features.get.mjs +3 -1
  210. package/.output/server/chunks/routes/api/specs/features.get.mjs.map +1 -1
  211. package/.output/server/chunks/routes/api/specs/reindex.post.mjs +4 -2
  212. package/.output/server/chunks/routes/api/specs/reindex.post.mjs.map +1 -1
  213. package/.output/server/chunks/routes/api/specs/search.get.mjs +4 -2
  214. package/.output/server/chunks/routes/api/specs/search.get.mjs.map +1 -1
  215. package/.output/server/chunks/routes/api/specs/status.get.mjs +4 -2
  216. package/.output/server/chunks/routes/api/specs/status.get.mjs.map +1 -1
  217. package/.output/server/chunks/routes/api/specs/traceability/_featureId_.get.mjs +4 -2
  218. package/.output/server/chunks/routes/api/specs/traceability/_featureId_.get.mjs.map +1 -1
  219. package/.output/server/chunks/routes/api/worktrees/_name/switch.post.mjs +4 -2
  220. package/.output/server/chunks/routes/api/worktrees/_name/switch.post.mjs.map +1 -1
  221. package/.output/server/chunks/routes/api/worktrees/_name_.delete.mjs +3 -1
  222. package/.output/server/chunks/routes/api/worktrees/_name_.delete.mjs.map +1 -1
  223. package/.output/server/chunks/routes/git-watcher-ws.mjs +4 -2
  224. package/.output/server/chunks/routes/git-watcher-ws.mjs.map +1 -1
  225. package/.output/server/chunks/routes/renderer.mjs +4 -2
  226. package/.output/server/chunks/routes/terminal-ws.mjs +230 -0
  227. package/.output/server/chunks/routes/terminal-ws.mjs.map +1 -0
  228. package/.output/server/index.mjs +4 -2
  229. package/.output/server/index.mjs.map +1 -1
  230. package/.output/server/node_modules/node-pty/build/Makefile +369 -0
  231. package/.output/server/node_modules/node-pty/build/Release/pty.node +0 -0
  232. package/.output/server/node_modules/node-pty/build/binding.Makefile +6 -0
  233. package/.output/server/node_modules/node-pty/build/config.gypi +513 -0
  234. package/.output/server/node_modules/node-pty/build/pty.target.mk +168 -0
  235. package/.output/server/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  236. package/.output/server/node_modules/node-pty/lib/index.js +52 -0
  237. package/.output/server/node_modules/node-pty/lib/shared/conout.js +11 -0
  238. package/.output/server/node_modules/node-pty/lib/terminal.js +190 -0
  239. package/.output/server/node_modules/node-pty/lib/unixTerminal.js +346 -0
  240. package/.output/server/node_modules/node-pty/lib/utils.js +39 -0
  241. package/.output/server/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  242. package/.output/server/node_modules/node-pty/lib/windowsPtyAgent.js +320 -0
  243. package/.output/server/node_modules/node-pty/lib/windowsTerminal.js +199 -0
  244. package/.output/server/node_modules/node-pty/package.json +64 -0
  245. package/.output/server/package.json +2 -1
  246. package/package.json +6 -1
  247. package/.output/public/_nuxt/2zamijve.js +0 -1
  248. package/.output/public/_nuxt/BEjIzkrM.js +0 -85
  249. package/.output/public/_nuxt/BaSsfm-t.js +0 -36
  250. package/.output/public/_nuxt/BjdLSVUw.js +0 -1
  251. package/.output/public/_nuxt/DeqM2TrP.js +0 -1
  252. package/.output/public/_nuxt/builds/meta/74089fa1-2fbb-4792-94aa-7535d2aec557.json +0 -1
  253. package/.output/public/_nuxt/default.DKSPicGu.css +0 -1
  254. package/.output/public/_nuxt/entry.BUDfUMkE.css +0 -1
  255. package/.output/public/_nuxt/zrVRZSxq.js +0 -64
  256. package/.output/server/chunks/_/baseBranch.mjs +0 -137
  257. package/.output/server/chunks/_/baseBranch.mjs.map +0 -1
  258. package/.output/server/chunks/_/claude.mjs +0 -164
  259. package/.output/server/chunks/_/claude.mjs.map +0 -1
  260. package/.output/server/chunks/_/conversationStore.mjs +0 -257
  261. package/.output/server/chunks/_/conversationStore.mjs.map +0 -1
  262. package/.output/server/chunks/_/geminiProvider.mjs +0 -372
  263. package/.output/server/chunks/_/geminiProvider.mjs.map +0 -1
  264. package/.output/server/chunks/_/gitExec.mjs +0 -48
  265. package/.output/server/chunks/_/gitExec.mjs.map +0 -1
  266. package/.output/server/chunks/_/providerProcessError.mjs +0 -163
  267. package/.output/server/chunks/_/providerProcessError.mjs.map +0 -1
  268. package/.output/server/chunks/_/uiAdapter.mjs +0 -421
  269. package/.output/server/chunks/_/uiAdapter.mjs.map +0 -1
  270. package/.output/server/chunks/routes/api/chat.post.mjs +0 -276
  271. package/.output/server/chunks/routes/api/chat.post.mjs.map +0 -1
@@ -1,276 +0,0 @@
1
- import { g as getEmbedding, r as runSearch, a as getEmbeddingModelError, d as defineEventHandler, b as readBody, c as createError, e as getProjectDir } from '../../nitro/nitro.mjs';
2
- import { g as getServerProviderSelection, r as resolveServerProviderSelection, a as guardProviderCapability } from '../../_/aiProviderSelection.mjs';
3
- import { s as streamChatWithProvider, h as hasCodexPermissionError, a as hasCodexMissingRolloutPathError, b as summarizeProviderProcessError } from '../../_/providerProcessError.mjs';
4
- import 'node:http';
5
- import 'node:https';
6
- import 'node:crypto';
7
- import 'stream';
8
- import 'events';
9
- import 'http';
10
- import 'crypto';
11
- import 'buffer';
12
- import 'zlib';
13
- import 'https';
14
- import 'net';
15
- import 'tls';
16
- import 'url';
17
- import 'node:events';
18
- import 'node:buffer';
19
- import 'node:fs';
20
- import 'node:path';
21
- import 'node:os';
22
- import 'node:module';
23
- import 'node:fs/promises';
24
- import 'node:url';
25
- import '../../_/aiProviderRegistry.mjs';
26
-
27
- function providerJsonEvent(data) {
28
- return JSON.stringify({ type: "provider_json", data }) + "\n";
29
- }
30
- function sessionResetEvent(reason) {
31
- return JSON.stringify({ type: "session_reset", reason }) + "\n";
32
- }
33
- function errorEvent(message) {
34
- return JSON.stringify({ type: "error", error: message }) + "\n";
35
- }
36
- function doneEvent() {
37
- return JSON.stringify({ type: "done" }) + "\n";
38
- }
39
-
40
- async function buildSearchContextForImplement(input) {
41
- var _a;
42
- const query = input.query.trim();
43
- if (!query) {
44
- return { injected: false };
45
- }
46
- const embedding = await getEmbedding(query);
47
- const results = await runSearch("hybrid", query, {
48
- embedding,
49
- featureId: input.featureId,
50
- limit: (_a = input.maxResults) != null ? _a : 5
51
- });
52
- if (results.length === 0) {
53
- return {
54
- injected: false,
55
- warning: "Spec search index returned no relevant context."
56
- };
57
- }
58
- const sections = [];
59
- sections.push("## Retrieved Spec Context");
60
- sections.push("Use these snippets as supporting context for implementation decisions:");
61
- for (const [index, result] of results.entries()) {
62
- const chunk = result.chunk;
63
- sections.push("");
64
- sections.push(`${index + 1}. ${chunk.sourcePath}:${chunk.lineStart}`);
65
- if (chunk.headingHierarchy.length > 0) {
66
- sections.push(` Headings: ${chunk.headingHierarchy.join(" > ")}`);
67
- }
68
- sections.push(` ${chunk.content.slice(0, 500).replace(/\n+/g, " ")}`);
69
- }
70
- const modelError = getEmbeddingModelError();
71
- if (modelError) {
72
- sections.push("");
73
- sections.push(`Warning: semantic model unavailable (${modelError}); results may be keyword-biased.`);
74
- }
75
- return {
76
- injected: true,
77
- context: sections.join("\n")
78
- };
79
- }
80
-
81
- const FEATURE_ID_PATTERN = /\b\d{3}-[a-z0-9][a-z0-9-]*\b/i;
82
- const SEARCH_ACTION_PATTERN = /\b(find|search|look up|lookup|where is|what feature)\b/i;
83
- const SEARCH_DOMAIN_PATTERN = /\b(spec|requirement|requirements|fr-|feature)\b/i;
84
- const SEARCH_ACTION_KR_PATTERN = /(찾아줘|검색|어디|찾아봐|찾아봐줘)/i;
85
- const SEARCH_DOMAIN_KR_PATTERN = /(스펙|요구사항|기능|fr-)/i;
86
- function extractFeatureIdFromMessage(message) {
87
- const match = message.match(FEATURE_ID_PATTERN);
88
- return match == null ? void 0 : match[0];
89
- }
90
- function shouldInjectSearchContextForChatMessage(message) {
91
- const trimmed = message.trim();
92
- if (!trimmed) return false;
93
- if (trimmed.startsWith("/")) return false;
94
- const enIntent = SEARCH_ACTION_PATTERN.test(trimmed) && SEARCH_DOMAIN_PATTERN.test(trimmed);
95
- const koIntent = SEARCH_ACTION_KR_PATTERN.test(trimmed) && SEARCH_DOMAIN_KR_PATTERN.test(trimmed);
96
- return enIntent || koIntent;
97
- }
98
- const chat_post = defineEventHandler(async (event) => {
99
- var _a;
100
- const chatRequest = await readBody(event);
101
- if (!((_a = chatRequest == null ? void 0 : chatRequest.message) == null ? void 0 : _a.trim())) {
102
- throw createError({
103
- statusCode: 400,
104
- statusMessage: "Message is required"
105
- });
106
- }
107
- if (!(chatRequest == null ? void 0 : chatRequest.requestId)) {
108
- throw createError({
109
- statusCode: 400,
110
- statusMessage: "Request ID is required"
111
- });
112
- }
113
- console.log("[Chat API] Received request", {
114
- message: chatRequest.message.slice(0, 100),
115
- requestId: chatRequest.requestId,
116
- sessionId: chatRequest.sessionId
117
- });
118
- let providerMessage = chatRequest.message;
119
- const implementMatch = chatRequest.message.match(/^\/speckit\.implement\s+([^\s]+)/);
120
- if (implementMatch) {
121
- try {
122
- const featureId = implementMatch[1];
123
- const context = await buildSearchContextForImplement({
124
- query: chatRequest.message,
125
- featureId,
126
- maxResults: 5
127
- });
128
- if (context.injected && context.context) {
129
- providerMessage = `${chatRequest.message}
130
-
131
- ${context.context}`;
132
- }
133
- } catch (error) {
134
- console.warn("[Chat API] Failed to inject spec search context:", error);
135
- }
136
- } else if (shouldInjectSearchContextForChatMessage(chatRequest.message)) {
137
- try {
138
- const context = await buildSearchContextForImplement({
139
- query: chatRequest.message,
140
- featureId: extractFeatureIdFromMessage(chatRequest.message),
141
- maxResults: 5
142
- });
143
- if (context.injected && context.context) {
144
- providerMessage = `${chatRequest.message}
145
-
146
- ${context.context}`;
147
- }
148
- } catch (error) {
149
- console.warn("[Chat API] Failed to inject spec search context for chat intent:", error);
150
- }
151
- }
152
- const workingDirectory = getProjectDir();
153
- const requestedSelection = chatRequest.providerId ? { providerId: chatRequest.providerId, modelKey: chatRequest.providerModelKey || "" } : await getServerProviderSelection();
154
- const selection = await resolveServerProviderSelection(requestedSelection);
155
- const providerGuard = await guardProviderCapability(
156
- selection,
157
- "streaming",
158
- "Choose a provider that supports streaming chat."
159
- );
160
- if ("failure" in providerGuard) {
161
- throw createError({
162
- statusCode: 400,
163
- statusMessage: providerGuard.failure.error
164
- });
165
- }
166
- const res = event.node.res;
167
- res.setHeader("Content-Type", "text/event-stream");
168
- res.setHeader("Cache-Control", "no-cache, no-transform");
169
- res.setHeader("Connection", "keep-alive");
170
- res.setHeader("X-Accel-Buffering", "no");
171
- res.flushHeaders();
172
- const writeChunk = (data) => {
173
- if (res.writableEnded || res.destroyed) return;
174
- res.write(data);
175
- if (typeof res.flush === "function") {
176
- res.flush();
177
- }
178
- };
179
- const endResponse = () => {
180
- if (res.writableEnded || res.destroyed) return;
181
- try {
182
- res.end();
183
- } catch {
184
- }
185
- };
186
- const isUnexpectedExit = (exitCode) => exitCode !== 0 && exitCode !== null;
187
- return new Promise((resolve, reject) => {
188
- let controller = null;
189
- let clientGone = false;
190
- const runStream = (resumeSessionId, isRetry = false, forceEphemeral = false) => {
191
- streamChatWithProvider(
192
- {
193
- message: providerMessage,
194
- selection,
195
- cwd: workingDirectory,
196
- permissionMode: "bypass",
197
- resumeSessionId,
198
- ephemeral: forceEphemeral && selection.providerId === "codex"
199
- },
200
- {
201
- onProviderJson(data) {
202
- writeChunk(providerJsonEvent(data));
203
- },
204
- onClose({ exitCode, signal, nonJsonOutput }) {
205
- const hasPermissionError = hasCodexPermissionError(nonJsonOutput);
206
- const missingRolloutPath = hasCodexMissingRolloutPathError(nonJsonOutput);
207
- if (isUnexpectedExit(exitCode) && missingRolloutPath && !hasPermissionError && !isRetry) {
208
- writeChunk(sessionResetEvent("Codex session state was missing rollout data. Retrying with a fresh ephemeral session."));
209
- runStream(void 0, true, true);
210
- return;
211
- }
212
- if (isUnexpectedExit(exitCode) && resumeSessionId && !isRetry) {
213
- const retryWithEphemeral = selection.providerId === "codex";
214
- writeChunk(sessionResetEvent(
215
- retryWithEphemeral ? `Session resume failed (exit code ${exitCode}). Retrying with a fresh ephemeral session.` : `Session resume failed (exit code ${exitCode}). Retrying with a fresh session.`
216
- ));
217
- runStream(void 0, true, retryWithEphemeral);
218
- return;
219
- }
220
- if (isUnexpectedExit(exitCode)) {
221
- console.error("[Chat API] Provider process exited unexpectedly", {
222
- providerId: selection.providerId,
223
- modelKey: selection.modelKey,
224
- requestId: chatRequest.requestId,
225
- exitCode,
226
- signal,
227
- nonJsonOutput: nonJsonOutput.slice(-25)
228
- });
229
- const summary = summarizeProviderProcessError(nonJsonOutput, 700);
230
- const details = summary ? ` \u2014 ${summary}` : "";
231
- writeChunk(errorEvent(`Provider process exited unexpectedly (code: ${exitCode}${signal ? `, signal: ${signal}` : ""})${details}`));
232
- } else if (exitCode === null && signal) {
233
- console.error("[Chat API] Provider process killed by signal", {
234
- providerId: selection.providerId,
235
- modelKey: selection.modelKey,
236
- requestId: chatRequest.requestId,
237
- signal,
238
- nonJsonOutput: nonJsonOutput.slice(-25)
239
- });
240
- const summary = summarizeProviderProcessError(nonJsonOutput, 700);
241
- const details = summary ? ` \u2014 ${summary}` : "";
242
- writeChunk(errorEvent(`Provider process was killed by signal ${signal}${details}`));
243
- } else {
244
- writeChunk(doneEvent());
245
- }
246
- endResponse();
247
- resolve();
248
- },
249
- onError(error) {
250
- console.error("[Chat API] Process error:", error);
251
- writeChunk(errorEvent(error.message));
252
- endResponse();
253
- reject(error);
254
- }
255
- }
256
- ).then((activeController) => {
257
- controller = activeController;
258
- if (clientGone) {
259
- controller.kill();
260
- }
261
- }).catch((error) => {
262
- writeChunk(errorEvent(error instanceof Error ? error.message : String(error)));
263
- endResponse();
264
- reject(error);
265
- });
266
- };
267
- runStream(chatRequest.sessionId);
268
- res.on("close", () => {
269
- clientGone = true;
270
- controller == null ? void 0 : controller.kill();
271
- });
272
- });
273
- });
274
-
275
- export { chat_post as default };
276
- //# sourceMappingURL=chat.post.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat.post.mjs","sources":["../../../../../server/utils/chatEventFormatters.ts","../../../../../server/utils/specSearch/contextInjector.ts","../../../../../server/api/chat.post.ts"],"names":[],"mappings":"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"}