tarsk 0.3.43 → 0.4.4

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 (414) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/agent.error-utils.d.ts +14 -0
  3. package/dist/agent/agent.error-utils.js +52 -0
  4. package/dist/agent/agent.event-transformer.d.ts +55 -0
  5. package/dist/agent/agent.event-transformer.js +175 -0
  6. package/dist/agent/agent.executor.d.ts +26 -0
  7. package/dist/agent/agent.executor.js +286 -0
  8. package/dist/agent/agent.model-resolver.d.ts +22 -0
  9. package/dist/agent/agent.model-resolver.js +67 -0
  10. package/dist/agent/agent.process-manager.d.ts +57 -0
  11. package/dist/agent/agent.process-manager.js +262 -0
  12. package/dist/agent/agent.processing-state-manager.d.ts +74 -0
  13. package/dist/agent/agent.processing-state-manager.js +87 -0
  14. package/dist/agent/agent.prompt-loader.d.ts +16 -0
  15. package/dist/agent/agent.prompt-loader.js +227 -0
  16. package/dist/agent/agent.subagent-executor.d.ts +35 -0
  17. package/dist/agent/agent.subagent-executor.js +135 -0
  18. package/dist/bun/index.d.ts +2 -0
  19. package/dist/bun/index.js +165 -0
  20. package/dist/cli.d.ts +3 -0
  21. package/dist/cli.js +22 -0
  22. package/dist/core/crypto.d.ts +29 -0
  23. package/dist/core/crypto.js +166 -0
  24. package/dist/core/dev-server-cache.d.ts +46 -0
  25. package/dist/core/dev-server-cache.js +59 -0
  26. package/dist/core/env-manager.d.ts +3 -0
  27. package/dist/core/env-manager.js +60 -0
  28. package/dist/core/error-responses.d.ts +61 -0
  29. package/dist/core/error-responses.js +64 -0
  30. package/dist/core/logger.d.ts +10 -0
  31. package/dist/core/logger.js +47 -0
  32. package/dist/core/paths.d.ts +22 -0
  33. package/dist/core/paths.js +26 -0
  34. package/dist/core/random-words.d.ts +18 -0
  35. package/dist/core/random-words.js +135 -0
  36. package/dist/core/response-builder.d.ts +50 -0
  37. package/dist/core/response-builder.js +56 -0
  38. package/dist/core/route-helpers.d.ts +47 -0
  39. package/dist/core/route-helpers.js +54 -0
  40. package/dist/core/run-command-detector.d.ts +26 -0
  41. package/dist/core/run-command-detector.js +98 -0
  42. package/dist/core/stream-helper.d.ts +44 -0
  43. package/dist/core/stream-helper.js +50 -0
  44. package/dist/core/utils.d.ts +43 -0
  45. package/dist/core/utils.js +113 -0
  46. package/dist/core/validation.d.ts +10 -0
  47. package/dist/core/validation.js +20 -0
  48. package/dist/database/database.d.ts +40 -0
  49. package/dist/database/database.encryption.d.ts +33 -0
  50. package/dist/database/database.encryption.js +62 -0
  51. package/dist/database/database.js +480 -0
  52. package/dist/database/database.state.d.ts +52 -0
  53. package/dist/database/database.state.js +119 -0
  54. package/dist/database/database.test-utils.d.ts +22 -0
  55. package/dist/database/database.test-utils.js +39 -0
  56. package/dist/database/database.types.d.ts +3 -0
  57. package/dist/database/database.types.js +2 -0
  58. package/dist/features/agents/agents.manager.d.ts +24 -0
  59. package/dist/features/agents/agents.manager.js +200 -0
  60. package/dist/features/ask-user/ask-user.routes.d.ts +9 -0
  61. package/dist/features/ask-user/ask-user.routes.js +35 -0
  62. package/dist/features/chat/chat-delete.route.d.ts +15 -0
  63. package/dist/features/chat/chat-delete.route.js +36 -0
  64. package/dist/features/chat/chat-post.route.d.ts +11 -0
  65. package/dist/features/chat/chat-post.route.js +270 -0
  66. package/dist/features/chat/chat-stop.route.d.ts +21 -0
  67. package/dist/features/chat/chat-stop.route.js +22 -0
  68. package/dist/features/chat/chat-subscribe.route.d.ts +9 -0
  69. package/dist/features/chat/chat-subscribe.route.js +71 -0
  70. package/dist/features/chat/chat.routes.d.ts +22 -0
  71. package/dist/features/chat/chat.routes.js +29 -0
  72. package/dist/features/conversations/conversations-delete.route.d.ts +16 -0
  73. package/dist/features/conversations/conversations-delete.route.js +34 -0
  74. package/dist/features/conversations/conversations-get-all.route.d.ts +16 -0
  75. package/dist/features/conversations/conversations-get-all.route.js +39 -0
  76. package/dist/features/conversations/conversations-get-by-id.route.d.ts +16 -0
  77. package/dist/features/conversations/conversations-get-by-id.route.js +38 -0
  78. package/dist/features/conversations/conversations-get-deleted.route.d.ts +15 -0
  79. package/dist/features/conversations/conversations-get-deleted.route.js +34 -0
  80. package/dist/features/conversations/conversations-get-messages.route.d.ts +16 -0
  81. package/dist/features/conversations/conversations-get-messages.route.js +49 -0
  82. package/dist/features/conversations/conversations.content.d.ts +28 -0
  83. package/dist/features/conversations/conversations.content.js +142 -0
  84. package/dist/features/conversations/conversations.database.d.ts +108 -0
  85. package/dist/features/conversations/conversations.database.js +373 -0
  86. package/dist/features/conversations/conversations.manager.d.ts +130 -0
  87. package/dist/features/conversations/conversations.manager.js +162 -0
  88. package/dist/features/conversations/conversations.routes.d.ts +21 -0
  89. package/dist/features/conversations/conversations.routes.js +38 -0
  90. package/dist/features/conversations/token-usage.route.d.ts +41 -0
  91. package/dist/features/conversations/token-usage.route.js +419 -0
  92. package/dist/features/git/git-commit.route.d.ts +12 -0
  93. package/dist/features/git/git-commit.route.js +39 -0
  94. package/dist/features/git/git-create-branch.route.d.ts +28 -0
  95. package/dist/features/git/git-create-branch.route.js +119 -0
  96. package/dist/features/git/git-create-pr.route.d.ts +13 -0
  97. package/dist/features/git/git-create-pr.route.js +50 -0
  98. package/dist/features/git/git-create-repo.route.d.ts +14 -0
  99. package/dist/features/git/git-create-repo.route.js +108 -0
  100. package/dist/features/git/git-diff.route.d.ts +30 -0
  101. package/dist/features/git/git-diff.route.js +189 -0
  102. package/dist/features/git/git-fetch.route.d.ts +12 -0
  103. package/dist/features/git/git-fetch.route.js +31 -0
  104. package/dist/features/git/git-generate-commit-message.route.d.ts +12 -0
  105. package/dist/features/git/git-generate-commit-message.route.js +76 -0
  106. package/dist/features/git/git-generate-pr-info.route.d.ts +13 -0
  107. package/dist/features/git/git-generate-pr-info.route.js +147 -0
  108. package/dist/features/git/git-github-status.route.d.ts +16 -0
  109. package/dist/features/git/git-github-status.route.js +68 -0
  110. package/dist/features/git/git-log.route.d.ts +17 -0
  111. package/dist/features/git/git-log.route.js +33 -0
  112. package/dist/features/git/git-pr-status.route.d.ts +15 -0
  113. package/dist/features/git/git-pr-status.route.js +33 -0
  114. package/dist/features/git/git-pull.route.d.ts +12 -0
  115. package/dist/features/git/git-pull.route.js +35 -0
  116. package/dist/features/git/git-push.route.d.ts +12 -0
  117. package/dist/features/git/git-push.route.js +46 -0
  118. package/dist/features/git/git-status-cache.database.d.ts +7 -0
  119. package/dist/features/git/git-status-cache.database.js +53 -0
  120. package/dist/features/git/git-status.route.d.ts +15 -0
  121. package/dist/features/git/git-status.route.js +62 -0
  122. package/dist/features/git/git-sync-branch.route.d.ts +4 -0
  123. package/dist/features/git/git-sync-branch.route.js +208 -0
  124. package/dist/features/git/git-unified-status.route.d.ts +30 -0
  125. package/dist/features/git/git-unified-status.route.js +165 -0
  126. package/dist/features/git/git-username.route.d.ts +3 -0
  127. package/dist/features/git/git-username.route.js +24 -0
  128. package/dist/features/git/git.manager.d.ts +139 -0
  129. package/dist/features/git/git.manager.js +352 -0
  130. package/dist/features/git/git.routes.d.ts +4 -0
  131. package/dist/features/git/git.routes.js +116 -0
  132. package/dist/features/git/git.utils.d.ts +82 -0
  133. package/dist/features/git/git.utils.js +1040 -0
  134. package/dist/features/mcp/mcp.config.d.ts +27 -0
  135. package/dist/features/mcp/mcp.config.js +148 -0
  136. package/dist/features/mcp/mcp.manager.d.ts +61 -0
  137. package/dist/features/mcp/mcp.manager.js +254 -0
  138. package/dist/features/mcp/mcp.popular.json +103 -0
  139. package/dist/features/mcp/mcp.routes.d.ts +13 -0
  140. package/dist/features/mcp/mcp.routes.js +159 -0
  141. package/dist/features/mcp/mcp.types.d.ts +80 -0
  142. package/dist/features/mcp/mcp.types.js +8 -0
  143. package/dist/features/metadata/metadata.manager.d.ts +126 -0
  144. package/dist/features/metadata/metadata.manager.js +423 -0
  145. package/dist/features/models/model-info-aihubmix.d.ts +25 -0
  146. package/dist/features/models/model-info-aihubmix.js +117 -0
  147. package/dist/features/models/model-info-openrouter.d.ts +25 -0
  148. package/dist/features/models/model-info-openrouter.js +104 -0
  149. package/dist/features/models/model-info.d.ts +37 -0
  150. package/dist/features/models/model-info.js +39 -0
  151. package/dist/features/models/models-catalog.d.ts +49 -0
  152. package/dist/features/models/models-catalog.js +80 -0
  153. package/dist/features/models/models-catalog.route.d.ts +43 -0
  154. package/dist/features/models/models-catalog.route.js +15 -0
  155. package/dist/features/models/models-get-available.route.d.ts +36 -0
  156. package/dist/features/models/models-get-available.route.js +66 -0
  157. package/dist/features/models/models-get-enabled.route.d.ts +33 -0
  158. package/dist/features/models/models-get-enabled.route.js +45 -0
  159. package/dist/features/models/models-get-model-info.route.d.ts +31 -0
  160. package/dist/features/models/models-get-model-info.route.js +84 -0
  161. package/dist/features/models/models-model-disable.route.d.ts +15 -0
  162. package/dist/features/models/models-model-disable.route.js +20 -0
  163. package/dist/features/models/models-model-enable.route.d.ts +13 -0
  164. package/dist/features/models/models-model-enable.route.js +20 -0
  165. package/dist/features/models/models-provider-refresh.route.d.ts +17 -0
  166. package/dist/features/models/models-provider-refresh.route.js +20 -0
  167. package/dist/features/models/models.manager.d.ts +58 -0
  168. package/dist/features/models/models.manager.js +138 -0
  169. package/dist/features/models/models.routes.d.ts +18 -0
  170. package/dist/features/models/models.routes.js +83 -0
  171. package/dist/features/models/open-router-models.d.ts +38 -0
  172. package/dist/features/models/open-router-models.js +73 -0
  173. package/dist/features/models/openai-models.d.ts +63 -0
  174. package/dist/features/models/openai-models.js +150 -0
  175. package/dist/features/onboarding/onboarding-get-git-check.route.d.ts +11 -0
  176. package/dist/features/onboarding/onboarding-get-git-check.route.js +28 -0
  177. package/dist/features/onboarding/onboarding-get-status.route.d.ts +12 -0
  178. package/dist/features/onboarding/onboarding-get-status.route.js +15 -0
  179. package/dist/features/onboarding/onboarding-post-complete.route.d.ts +12 -0
  180. package/dist/features/onboarding/onboarding-post-complete.route.js +15 -0
  181. package/dist/features/onboarding/onboarding-post-reset.route.d.ts +12 -0
  182. package/dist/features/onboarding/onboarding-post-reset.route.js +15 -0
  183. package/dist/features/onboarding/onboarding.routes.d.ts +18 -0
  184. package/dist/features/onboarding/onboarding.routes.js +28 -0
  185. package/dist/features/project-todos/project-todos.database.d.ts +38 -0
  186. package/dist/features/project-todos/project-todos.database.js +91 -0
  187. package/dist/features/project-todos/project-todos.routes.d.ts +4 -0
  188. package/dist/features/project-todos/project-todos.routes.js +94 -0
  189. package/dist/features/projects/projects-ai-files.route.d.ts +148 -0
  190. package/dist/features/projects/projects-ai-files.route.js +425 -0
  191. package/dist/features/projects/projects-commands.route.d.ts +27 -0
  192. package/dist/features/projects/projects-commands.route.js +39 -0
  193. package/dist/features/projects/projects-create.route.d.ts +19 -0
  194. package/dist/features/projects/projects-create.route.js +37 -0
  195. package/dist/features/projects/projects-delete.route.d.ts +24 -0
  196. package/dist/features/projects/projects-delete.route.js +34 -0
  197. package/dist/features/projects/projects-get.route.d.ts +47 -0
  198. package/dist/features/projects/projects-get.route.js +36 -0
  199. package/dist/features/projects/projects-list.route.d.ts +58 -0
  200. package/dist/features/projects/projects-list.route.js +59 -0
  201. package/dist/features/projects/projects-open-folder.route.d.ts +10 -0
  202. package/dist/features/projects/projects-open-folder.route.js +11 -0
  203. package/dist/features/projects/projects-open.route.d.ts +26 -0
  204. package/dist/features/projects/projects-open.route.js +49 -0
  205. package/dist/features/projects/projects-package-scripts.route.d.ts +15 -0
  206. package/dist/features/projects/projects-package-scripts.route.js +96 -0
  207. package/dist/features/projects/projects-run-command.route.d.ts +8 -0
  208. package/dist/features/projects/projects-run-command.route.js +21 -0
  209. package/dist/features/projects/projects-run.route.d.ts +51 -0
  210. package/dist/features/projects/projects-run.route.js +74 -0
  211. package/dist/features/projects/projects-update.route.d.ts +24 -0
  212. package/dist/features/projects/projects-update.route.js +81 -0
  213. package/dist/features/projects/projects.creator.d.ts +33 -0
  214. package/dist/features/projects/projects.creator.js +555 -0
  215. package/dist/features/projects/projects.database.d.ts +61 -0
  216. package/dist/features/projects/projects.database.js +212 -0
  217. package/dist/features/projects/projects.manager.d.ts +291 -0
  218. package/dist/features/projects/projects.manager.js +426 -0
  219. package/dist/features/projects/projects.open-with.d.ts +27 -0
  220. package/dist/features/projects/projects.open-with.js +156 -0
  221. package/dist/features/projects/projects.routes.d.ts +20 -0
  222. package/dist/features/projects/projects.routes.js +255 -0
  223. package/dist/features/projects/terminal-session-manager.d.ts +55 -0
  224. package/dist/features/projects/terminal-session-manager.js +90 -0
  225. package/dist/features/providers/provider-resolver.d.ts +13 -0
  226. package/dist/features/providers/provider-resolver.js +22 -0
  227. package/dist/features/providers/providers-get-credits.route.d.ts +15 -0
  228. package/dist/features/providers/providers-get-credits.route.js +51 -0
  229. package/dist/features/providers/providers-get.route.d.ts +16 -0
  230. package/dist/features/providers/providers-get.route.js +32 -0
  231. package/dist/features/providers/providers-open-external.route.d.ts +15 -0
  232. package/dist/features/providers/providers-open-external.route.js +49 -0
  233. package/dist/features/providers/providers-post-bulk-keys.route.d.ts +14 -0
  234. package/dist/features/providers/providers-post-bulk-keys.route.js +31 -0
  235. package/dist/features/providers/providers-post-keys.route.d.ts +14 -0
  236. package/dist/features/providers/providers-post-keys.route.js +25 -0
  237. package/dist/features/providers/providers.routes.d.ts +19 -0
  238. package/dist/features/providers/providers.routes.js +31 -0
  239. package/dist/features/rules/rules-post.route.d.ts +43 -0
  240. package/dist/features/rules/rules-post.route.js +89 -0
  241. package/dist/features/rules/rules.manager.d.ts +36 -0
  242. package/dist/features/rules/rules.manager.js +203 -0
  243. package/dist/features/rules/rules.routes.d.ts +12 -0
  244. package/dist/features/rules/rules.routes.js +13 -0
  245. package/dist/features/run/run-get-running.route.d.ts +15 -0
  246. package/dist/features/run/run-get-running.route.js +21 -0
  247. package/dist/features/run/run-post-start.route.d.ts +8 -0
  248. package/dist/features/run/run-post-start.route.js +21 -0
  249. package/dist/features/run/run-post-stop.route.d.ts +15 -0
  250. package/dist/features/run/run-post-stop.route.js +24 -0
  251. package/dist/features/run/run-post-suggest.route.d.ts +15 -0
  252. package/dist/features/run/run-post-suggest.route.js +21 -0
  253. package/dist/features/run/run-put-command.route.d.ts +15 -0
  254. package/dist/features/run/run-put-command.route.js +24 -0
  255. package/dist/features/run/run.routes.d.ts +19 -0
  256. package/dist/features/run/run.routes.js +31 -0
  257. package/dist/features/scaffold/index.d.ts +7 -0
  258. package/dist/features/scaffold/index.js +5 -0
  259. package/dist/features/scaffold/scaffold-get-templates.route.d.ts +27 -0
  260. package/dist/features/scaffold/scaffold-get-templates.route.js +17 -0
  261. package/dist/features/scaffold/scaffold-post.route.d.ts +8 -0
  262. package/dist/features/scaffold/scaffold-post.route.js +30 -0
  263. package/dist/features/scaffold/scaffold.routes.d.ts +10 -0
  264. package/dist/features/scaffold/scaffold.routes.js +16 -0
  265. package/dist/features/scaffold/scaffold.runner.d.ts +48 -0
  266. package/dist/features/scaffold/scaffold.runner.js +475 -0
  267. package/dist/features/scaffold/scaffold.types.d.ts +26 -0
  268. package/dist/features/scaffold/scaffold.types.js +5 -0
  269. package/dist/features/skills/skills.activation.d.ts +31 -0
  270. package/dist/features/skills/skills.activation.js +155 -0
  271. package/dist/features/skills/skills.manager.d.ts +35 -0
  272. package/dist/features/skills/skills.manager.js +251 -0
  273. package/dist/features/slash-commands/slash-commands-delete.route.d.ts +23 -0
  274. package/dist/features/slash-commands/slash-commands-delete.route.js +36 -0
  275. package/dist/features/slash-commands/slash-commands-get.route.d.ts +53 -0
  276. package/dist/features/slash-commands/slash-commands-get.route.js +54 -0
  277. package/dist/features/slash-commands/slash-commands-post.route.d.ts +39 -0
  278. package/dist/features/slash-commands/slash-commands-post.route.js +70 -0
  279. package/dist/features/slash-commands/slash-commands-put.route.d.ts +23 -0
  280. package/dist/features/slash-commands/slash-commands-put.route.js +36 -0
  281. package/dist/features/slash-commands/slash-commands.manager.d.ts +46 -0
  282. package/dist/features/slash-commands/slash-commands.manager.js +265 -0
  283. package/dist/features/slash-commands/slash-commands.routes.d.ts +13 -0
  284. package/dist/features/slash-commands/slash-commands.routes.js +20 -0
  285. package/dist/features/threads/threads-ai-files.route.d.ts +153 -0
  286. package/dist/features/threads/threads-ai-files.route.js +287 -0
  287. package/dist/features/threads/threads-conversation-folder-path.route.d.ts +14 -0
  288. package/dist/features/threads/threads-conversation-folder-path.route.js +23 -0
  289. package/dist/features/threads/threads-create.route.d.ts +22 -0
  290. package/dist/features/threads/threads-create.route.js +60 -0
  291. package/dist/features/threads/threads-delete.route.d.ts +25 -0
  292. package/dist/features/threads/threads-delete.route.js +35 -0
  293. package/dist/features/threads/threads-files.route.d.ts +15 -0
  294. package/dist/features/threads/threads-files.route.js +20 -0
  295. package/dist/features/threads/threads-fix-comments.route.d.ts +26 -0
  296. package/dist/features/threads/threads-fix-comments.route.js +45 -0
  297. package/dist/features/threads/threads-get.route.d.ts +30 -0
  298. package/dist/features/threads/threads-get.route.js +38 -0
  299. package/dist/features/threads/threads-list.route.d.ts +56 -0
  300. package/dist/features/threads/threads-list.route.js +58 -0
  301. package/dist/features/threads/threads-messages.route.d.ts +28 -0
  302. package/dist/features/threads/threads-messages.route.js +110 -0
  303. package/dist/features/threads/threads-open.route.d.ts +26 -0
  304. package/dist/features/threads/threads-open.route.js +62 -0
  305. package/dist/features/threads/threads-select.route.d.ts +25 -0
  306. package/dist/features/threads/threads-select.route.js +35 -0
  307. package/dist/features/threads/threads-update.route.d.ts +15 -0
  308. package/dist/features/threads/threads-update.route.js +30 -0
  309. package/dist/features/threads/threads.database.d.ts +68 -0
  310. package/dist/features/threads/threads.database.js +215 -0
  311. package/dist/features/threads/threads.manager.d.ts +204 -0
  312. package/dist/features/threads/threads.manager.js +505 -0
  313. package/dist/features/threads/threads.routes.d.ts +20 -0
  314. package/dist/features/threads/threads.routes.js +230 -0
  315. package/dist/features/todos/todos.database.d.ts +14 -0
  316. package/dist/features/todos/todos.database.js +31 -0
  317. package/dist/features/updates/updates.routes.d.ts +13 -0
  318. package/dist/features/updates/updates.routes.js +40 -0
  319. package/dist/index.d.ts +3 -0
  320. package/dist/index.js +37 -10022
  321. package/dist/project-analyzer.d.ts +26 -0
  322. package/dist/project-analyzer.js +307 -0
  323. package/dist/public/assets/add-agent-view-B9IQjAwU.js +1 -0
  324. package/dist/public/assets/add-rule-view-BdZHurB3.js +7 -0
  325. package/dist/public/assets/add-skill-view-Cuu6Z0fr.js +1 -0
  326. package/dist/public/assets/add-slash-command-view-uW75Jvbh.js +1 -0
  327. package/dist/public/assets/conversation-history-view-D0OBxJMC.js +1 -0
  328. package/dist/public/assets/dialogs-config-DiFQjCeA.js +46 -0
  329. package/dist/public/assets/diff-view-B5XBM5UZ.js +3 -0
  330. package/dist/public/assets/file-tree-sidebar-DMX7fHi7.js +1 -0
  331. package/dist/public/assets/files-view-CUZn7G0o.js +1 -0
  332. package/dist/public/assets/history-view-B8HM78Wa.js +1 -0
  333. package/dist/public/assets/index-C-p81QYw.js +17 -0
  334. package/dist/public/assets/index-DhVMb7D6.css +1 -0
  335. package/dist/public/assets/mcp-manager-CEm1L3dn.js +1 -0
  336. package/dist/public/assets/mcp-server-edit-view-BAwMNOAH.js +5 -0
  337. package/dist/public/assets/mcp-servers-sidebar-Ncxq9Oj5.js +1 -0
  338. package/dist/public/assets/mcp-view-Cz7nelGQ.js +1 -0
  339. package/dist/public/assets/monaco-DvsnxTfD.js +11 -0
  340. package/dist/public/assets/onboarding-CvpvkF3X.js +1 -0
  341. package/dist/public/assets/onboarding-dialog-CKJw0ULj.js +1 -0
  342. package/dist/public/assets/project-settings-view-DJ1uvrTL.js +1 -0
  343. package/dist/public/assets/provider-details-view-CkS6WbnK.js +1 -0
  344. package/dist/public/assets/providers-sidebar-C4MF6i9d.js +1 -0
  345. package/dist/public/assets/radio-group-BItFbSTw.js +1 -0
  346. package/dist/public/assets/react-vendor-DkKo9QGO.js +17 -0
  347. package/dist/public/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
  348. package/dist/public/assets/settings-view-C45kmAGH.js +2 -0
  349. package/dist/public/assets/store-BVVGurzl.js +2 -0
  350. package/dist/public/assets/use-toast-DEJkXPN4.js +1 -0
  351. package/dist/public/assets/utils-DY_quHB8.js +1 -0
  352. package/dist/public/fonts/google-sans.ttf +0 -0
  353. package/dist/public/fonts/zalando.ttf +0 -0
  354. package/dist/public/ide/android-studio.svg +1 -0
  355. package/dist/public/ide/cursor.svg +12 -0
  356. package/dist/public/ide/kiro.svg +11 -0
  357. package/dist/public/ide/terminal.svg +7 -0
  358. package/dist/public/ide/vscode.svg +2 -0
  359. package/dist/public/ide/windsurf.svg +3 -0
  360. package/dist/public/ide/xcode.svg +2 -0
  361. package/dist/public/index.html +13 -9
  362. package/dist/scaffold-templates.json +3 -12
  363. package/dist/server.d.ts +12 -0
  364. package/dist/server.js +142 -0
  365. package/dist/tools/agent-tool.d.ts +49 -0
  366. package/dist/tools/agent-tool.js +131 -0
  367. package/dist/tools/ask-user.d.ts +25 -0
  368. package/dist/tools/ask-user.js +74 -0
  369. package/dist/tools/ast-grep.d.ts +28 -0
  370. package/dist/tools/ast-grep.js +273 -0
  371. package/dist/tools/bash.d.ts +33 -0
  372. package/dist/tools/bash.js +186 -0
  373. package/dist/tools/edit-diff.d.ts +24 -0
  374. package/dist/tools/edit-diff.js +136 -0
  375. package/dist/tools/edit.d.ts +28 -0
  376. package/dist/tools/edit.js +78 -0
  377. package/dist/tools/find.d.ts +31 -0
  378. package/dist/tools/find.js +117 -0
  379. package/dist/tools/grep.d.ts +37 -0
  380. package/dist/tools/grep.js +231 -0
  381. package/dist/tools/index.d.ts +93 -0
  382. package/dist/tools/index.js +110 -0
  383. package/dist/tools/ls.d.ts +31 -0
  384. package/dist/tools/ls.js +108 -0
  385. package/dist/tools/mcp-tools.d.ts +31 -0
  386. package/dist/tools/mcp-tools.js +59 -0
  387. package/dist/tools/path-utils.d.ts +14 -0
  388. package/dist/tools/path-utils.js +87 -0
  389. package/dist/tools/read.d.ts +27 -0
  390. package/dist/tools/read.js +86 -0
  391. package/dist/tools/resolve-bin.d.ts +5 -0
  392. package/dist/tools/resolve-bin.js +28 -0
  393. package/dist/tools/shell.d.ts +7 -0
  394. package/dist/tools/shell.js +143 -0
  395. package/dist/tools/skill-reference-tool.d.ts +30 -0
  396. package/dist/tools/skill-reference-tool.js +171 -0
  397. package/dist/tools/skill-tool.d.ts +33 -0
  398. package/dist/tools/skill-tool.js +213 -0
  399. package/dist/tools/todo.d.ts +20 -0
  400. package/dist/tools/todo.js +168 -0
  401. package/dist/tools/tool-helpers.d.ts +78 -0
  402. package/dist/tools/tool-helpers.js +109 -0
  403. package/dist/tools/truncate.d.ts +31 -0
  404. package/dist/tools/truncate.js +164 -0
  405. package/dist/tools/write.d.ts +21 -0
  406. package/dist/tools/write.js +65 -0
  407. package/package.json +33 -27
  408. package/dist/public/assets/index-6jySngUQ.css +0 -1
  409. package/dist/public/assets/index-BjFpLTSj.js +0 -18
  410. package/dist/public/assets/monaco-w6PwaWGP.js +0 -11
  411. package/dist/public/assets/radix-ui-e1yigncZ.js +0 -1
  412. package/dist/public/assets/react-vendor-B6JfXZmN.js +0 -59
  413. package/dist/public/assets/ui-styling-CyCIFleB.js +0 -1
  414. package/dist/public/assets/utils-Dd_itR7L.js +0 -1
@@ -0,0 +1,50 @@
1
+ import { resolveThreadPath, getGitRoot, getCurrentBranch, createPullRequest } from "./git.utils.js";
2
+ export async function gitCreatePrHandler(c, metadataManager) {
3
+ try {
4
+ const threadId = c.req.param("threadId");
5
+ const body = await c.req.json();
6
+ const { title, description } = body;
7
+ console.log(`[git-create-pr] Starting PR creation for thread: ${threadId}`);
8
+ console.log(`[git-create-pr] PR title: "${title}"`);
9
+ console.log(`[git-create-pr] PR description length: ${description?.length ?? 0} chars`);
10
+ const thread = await metadataManager
11
+ .loadThreads()
12
+ .then((threads) => threads.find((t) => t.id === threadId));
13
+ if (!thread) {
14
+ console.log(`[git-create-pr] Thread not found: ${threadId}`);
15
+ return c.json({ error: "Thread not found" }, 404);
16
+ }
17
+ console.log(`[git-create-pr] ✓ Thread found: ${thread.title}`);
18
+ const repoPath = thread.path;
19
+ if (!repoPath) {
20
+ console.log(`[git-create-pr] Thread path not found for threadId: ${threadId}`);
21
+ return c.json({ error: "Thread path not found" }, 404);
22
+ }
23
+ const absolutePath = resolveThreadPath(repoPath);
24
+ console.log(`[git-create-pr] Resolved path: ${absolutePath}`);
25
+ let gitRoot;
26
+ try {
27
+ gitRoot = await getGitRoot(absolutePath);
28
+ console.log(`[git-create-pr] ✓ Git root: ${gitRoot}`);
29
+ }
30
+ catch {
31
+ console.log(`[git-create-pr] ✗ Not a git repository: ${absolutePath}`);
32
+ return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
33
+ }
34
+ // Get current branch
35
+ const currentBranch = await getCurrentBranch(gitRoot);
36
+ console.log(`[git-create-pr] Current branch: ${currentBranch}`);
37
+ // Try to create PR using gh CLI
38
+ console.log(`[git-create-pr] Creating PR with GitHub CLI...`);
39
+ const prUrl = await createPullRequest(gitRoot, title ?? currentBranch, description ?? "");
40
+ console.log(`[git-create-pr] ✓ PR created successfully: ${prUrl}`);
41
+ return c.json({ success: true, prUrl });
42
+ }
43
+ catch (error) {
44
+ const message = error instanceof Error ? error.message : "Failed to create PR";
45
+ console.log(`[git-create-pr] ✗ PR creation failed: ${message}`);
46
+ console.log(`[git-create-pr] Error stack: ${error instanceof Error ? error.stack : "No stack available"}`);
47
+ return c.json({ error: message }, 500);
48
+ }
49
+ }
50
+ //# sourceMappingURL=git-create-pr.route.js.map
@@ -0,0 +1,14 @@
1
+ import type { Context } from "hono";
2
+ import { MetadataManager } from "../metadata/metadata.manager.js";
3
+ export declare function gitCreateRepoHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
4
+ error: string;
5
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
6
+ error: string;
7
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
8
+ success: true;
9
+ repoUrl: string;
10
+ branchName: string;
11
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
12
+ error: string;
13
+ }, 500, "json">)>;
14
+ //# sourceMappingURL=git-create-repo.route.d.ts.map
@@ -0,0 +1,108 @@
1
+ import { resolveThreadPath, getGitRoot, getRemoteOrigin, createGitHubRepo } from "./git.utils.js";
2
+ import { spawnProcess } from "../../core/utils.js";
3
+ import { generateRandomThreadName } from "../../core/random-words.js";
4
+ function sanitizeBranchName(name) {
5
+ if (!name || typeof name !== "string") {
6
+ return "branch";
7
+ }
8
+ return (name
9
+ .trim()
10
+ .toLowerCase()
11
+ .replace(/\s+/g, "-")
12
+ .replace(/[^a-zA-Z0-9\-_/.]/g, "")
13
+ .replace(/^[/.]+|[/.]+$/g, "")
14
+ .replace(/-+/g, "-") || "branch");
15
+ }
16
+ function checkBranchExists(gitRoot, branchName) {
17
+ return new Promise((resolve) => {
18
+ const proc = spawnProcess("git", ["show-ref", "--verify", "--quiet", `refs/heads/${branchName}`], {
19
+ cwd: gitRoot,
20
+ });
21
+ proc.on("close", (code) => {
22
+ resolve(code === 0);
23
+ });
24
+ proc.on("error", () => {
25
+ resolve(false);
26
+ });
27
+ });
28
+ }
29
+ function createAndCheckoutBranch(gitRoot, branchName) {
30
+ return new Promise((resolve, reject) => {
31
+ const proc = spawnProcess("git", ["checkout", "-b", branchName], {
32
+ cwd: gitRoot,
33
+ });
34
+ let err = "";
35
+ if (proc.stderr) {
36
+ proc.stderr.on("data", (d) => {
37
+ err += d.toString();
38
+ });
39
+ }
40
+ proc.on("close", (code) => {
41
+ if (code === 0) {
42
+ resolve();
43
+ }
44
+ else {
45
+ reject(new Error(err || `Failed to create branch "${branchName}"`));
46
+ }
47
+ });
48
+ proc.on("error", reject);
49
+ });
50
+ }
51
+ export async function gitCreateRepoHandler(c, metadataManager) {
52
+ try {
53
+ const threadId = c.req.param("threadId");
54
+ const body = await c.req.json().catch(() => ({}));
55
+ const { repoName, description, isPrivate } = body;
56
+ const thread = await metadataManager
57
+ .loadThreads()
58
+ .then((threads) => threads.find((t) => t.id === threadId));
59
+ if (!thread) {
60
+ return c.json({ error: "Thread not found" }, 404);
61
+ }
62
+ const repoPath = thread.path;
63
+ if (!repoPath) {
64
+ return c.json({ error: "Thread path not found" }, 404);
65
+ }
66
+ const absolutePath = resolveThreadPath(repoPath);
67
+ let gitRoot;
68
+ try {
69
+ gitRoot = await getGitRoot(absolutePath);
70
+ }
71
+ catch {
72
+ return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
73
+ }
74
+ // Check if origin remote already exists
75
+ const remoteUrl = await getRemoteOrigin(gitRoot);
76
+ if (remoteUrl) {
77
+ return c.json({ error: "Repository already has a remote origin" }, 400);
78
+ }
79
+ // Create GitHub repository using gh CLI
80
+ const repoUrl = await createGitHubRepo(gitRoot, repoName, description, isPrivate);
81
+ // Create a new branch after repo creation
82
+ let branchName = sanitizeBranchName(generateRandomThreadName());
83
+ // Check if branch exists and find a unique name if needed
84
+ let branchExists = await checkBranchExists(gitRoot, branchName);
85
+ let counter = 2;
86
+ const baseBranchName = branchName;
87
+ while (branchExists) {
88
+ branchName = `${baseBranchName}-${counter}`;
89
+ branchExists = await checkBranchExists(gitRoot, branchName);
90
+ counter++;
91
+ }
92
+ // Create and checkout the new branch
93
+ await createAndCheckoutBranch(gitRoot, branchName);
94
+ // Update thread's currentBranch in metadata
95
+ const threads = await metadataManager.loadThreads();
96
+ const threadIndex = threads.findIndex((t) => t.id === threadId);
97
+ if (threadIndex !== -1) {
98
+ threads[threadIndex].currentBranch = branchName;
99
+ await metadataManager.saveThreads(threads);
100
+ }
101
+ return c.json({ success: true, repoUrl, branchName });
102
+ }
103
+ catch (error) {
104
+ const message = error instanceof Error ? error.message : "Failed to create repository";
105
+ return c.json({ error: message }, 500);
106
+ }
107
+ }
108
+ //# sourceMappingURL=git-create-repo.route.js.map
@@ -0,0 +1,30 @@
1
+ import type { Context } from "hono";
2
+ import { MetadataManager } from "../metadata/metadata.manager.js";
3
+ export declare function gitDiffHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
4
+ error: string;
5
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
6
+ error: string;
7
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
8
+ files: {
9
+ path: string;
10
+ status: "added" | "modified" | "deleted" | "renamed" | "untracked";
11
+ oldPath?: string | undefined;
12
+ oldContent: string;
13
+ newContent: string;
14
+ hunks: {
15
+ oldStart: number;
16
+ oldLines: number;
17
+ newStart: number;
18
+ newLines: number;
19
+ changes: {
20
+ type: "add" | "delete" | "context";
21
+ content: string;
22
+ oldLineNumber?: number | undefined;
23
+ newLineNumber?: number | undefined;
24
+ }[];
25
+ }[];
26
+ }[];
27
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
28
+ error: string;
29
+ }, 500, "json">)>;
30
+ //# sourceMappingURL=git-diff.route.d.ts.map
@@ -0,0 +1,189 @@
1
+ import { spawnProcess } from "../../core/utils.js";
2
+ import { readFileSync } from "fs";
3
+ import { resolve } from "path";
4
+ import { resolveThreadPath, getGitRoot, getGitStatus } from "./git.utils.js";
5
+ export async function gitDiffHandler(c, metadataManager) {
6
+ try {
7
+ const threadId = c.req.param("threadId");
8
+ const thread = await metadataManager
9
+ .loadThreads()
10
+ .then((threads) => threads.find((t) => t.id === threadId));
11
+ if (!thread) {
12
+ return c.json({ error: "Thread not found" }, 404);
13
+ }
14
+ const repoPath = thread.path;
15
+ if (!repoPath) {
16
+ return c.json({ error: "Thread path not found" }, 404);
17
+ }
18
+ const absolutePath = resolveThreadPath(repoPath);
19
+ let gitRoot;
20
+ try {
21
+ gitRoot = await getGitRoot(absolutePath);
22
+ }
23
+ catch {
24
+ return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
25
+ }
26
+ // Get list of changed files with their status
27
+ const statusOutput = await getGitStatus(gitRoot);
28
+ const changedFiles = [];
29
+ const statusLines = statusOutput
30
+ .trim()
31
+ .split("\n")
32
+ .filter((line) => line.length > 0);
33
+ for (const line of statusLines) {
34
+ // Git status --porcelain format: XY PATH
35
+ // Status codes are before the first space
36
+ const trimmedLine = line.trim();
37
+ const spaceIndex = trimmedLine.indexOf(" ");
38
+ if (spaceIndex === -1)
39
+ continue; // No space found
40
+ const statusCode = trimmedLine.substring(0, spaceIndex);
41
+ let filePath = trimmedLine.substring(spaceIndex + 1).trim();
42
+ let oldPath;
43
+ // Handle renamed files
44
+ if (statusCode.startsWith("R") || statusCode.startsWith("C")) {
45
+ const parts = filePath.split(" -> ");
46
+ oldPath = parts[0];
47
+ filePath = parts[1] || parts[0];
48
+ }
49
+ let status = "modified";
50
+ if (statusCode.includes("A") || statusCode.includes("?")) {
51
+ status = "added";
52
+ }
53
+ else if (statusCode.includes("D")) {
54
+ status = "deleted";
55
+ }
56
+ else if (statusCode.includes("R")) {
57
+ status = "renamed";
58
+ }
59
+ changedFiles.push({ path: filePath, status, oldPath });
60
+ }
61
+ // Get diff for each file
62
+ const filesWithDiff = [];
63
+ for (const file of changedFiles) {
64
+ let oldContent = "";
65
+ let newContent = "";
66
+ const hunks = [];
67
+ if (file.status === "deleted") {
68
+ // Get old content for deleted files
69
+ const content = await new Promise((resolve) => {
70
+ const proc = spawnProcess("git", ["show", `HEAD:${file.path}`], { cwd: gitRoot });
71
+ let out = "";
72
+ proc.stdout?.on("data", (d) => {
73
+ out += d.toString();
74
+ });
75
+ proc.on("close", () => resolve(out));
76
+ proc.on("error", () => resolve(""));
77
+ });
78
+ oldContent = content;
79
+ }
80
+ else if (file.status === "added" && file.path.startsWith("(new)")) {
81
+ // Untracked file - get content from filesystem
82
+ try {
83
+ newContent = readFileSync(resolve(gitRoot, file.path.replace("(new) ", "")), "utf-8");
84
+ }
85
+ catch {
86
+ newContent = "";
87
+ }
88
+ }
89
+ else {
90
+ // Get diff for modified/added files
91
+ const diffOutput = await new Promise((resolve) => {
92
+ const proc = spawnProcess("git", file.status === "added"
93
+ ? ["diff", "--cached", "--", file.path]
94
+ : ["diff", "HEAD", "--", file.path], { cwd: gitRoot });
95
+ let out = "";
96
+ proc.stdout?.on("data", (d) => {
97
+ out += d.toString();
98
+ });
99
+ proc.on("close", () => resolve(out));
100
+ proc.on("error", () => resolve(""));
101
+ });
102
+ // Parse the diff output
103
+ const lines = diffOutput.split("\n");
104
+ let currentHunk = null;
105
+ let oldLineNum = 0;
106
+ let newLineNum = 0;
107
+ // Get old content from HEAD
108
+ const oldContentOutput = await new Promise((resolve) => {
109
+ const proc = spawnProcess("git", ["show", `HEAD:${file.path}`], { cwd: gitRoot });
110
+ let out = "";
111
+ proc.stdout?.on("data", (d) => {
112
+ out += d.toString();
113
+ });
114
+ proc.on("close", () => resolve(out));
115
+ proc.on("error", () => resolve(""));
116
+ });
117
+ oldContent = oldContentOutput;
118
+ // Get new content from working directory
119
+ try {
120
+ newContent = readFileSync(resolve(gitRoot, file.path), "utf-8");
121
+ }
122
+ catch {
123
+ newContent = "";
124
+ }
125
+ for (const line of lines) {
126
+ // Parse hunk header
127
+ const hunkMatch = line.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
128
+ if (hunkMatch) {
129
+ if (currentHunk) {
130
+ hunks.push(currentHunk);
131
+ }
132
+ currentHunk = {
133
+ oldStart: parseInt(hunkMatch[1]),
134
+ oldLines: parseInt(hunkMatch[2] || "1"),
135
+ newStart: parseInt(hunkMatch[3]),
136
+ newLines: parseInt(hunkMatch[4] || "1"),
137
+ changes: [],
138
+ };
139
+ oldLineNum = currentHunk.oldStart;
140
+ newLineNum = currentHunk.newStart;
141
+ continue;
142
+ }
143
+ if (currentHunk) {
144
+ if (line.startsWith("+") && !line.startsWith("+++")) {
145
+ currentHunk.changes.push({
146
+ type: "add",
147
+ content: line.substring(1),
148
+ newLineNumber: newLineNum++,
149
+ });
150
+ }
151
+ else if (line.startsWith("-") && !line.startsWith("---")) {
152
+ currentHunk.changes.push({
153
+ type: "delete",
154
+ content: line.substring(1),
155
+ oldLineNumber: oldLineNum++,
156
+ });
157
+ }
158
+ else if (line.startsWith(" ")) {
159
+ currentHunk.changes.push({
160
+ type: "context",
161
+ content: line.substring(1),
162
+ oldLineNumber: oldLineNum++,
163
+ newLineNumber: newLineNum++,
164
+ });
165
+ }
166
+ else if (line.match(/^\\ No newline/)) {
167
+ // Skip this line
168
+ }
169
+ }
170
+ }
171
+ if (currentHunk) {
172
+ hunks.push(currentHunk);
173
+ }
174
+ }
175
+ filesWithDiff.push({
176
+ ...file,
177
+ oldContent,
178
+ newContent,
179
+ hunks,
180
+ });
181
+ }
182
+ return c.json({ files: filesWithDiff });
183
+ }
184
+ catch (error) {
185
+ const message = error instanceof Error ? error.message : "Failed to get git diff";
186
+ return c.json({ error: message }, 500);
187
+ }
188
+ }
189
+ //# sourceMappingURL=git-diff.route.js.map
@@ -0,0 +1,12 @@
1
+ import type { Context } from "hono";
2
+ import { MetadataManager } from "../metadata/metadata.manager.js";
3
+ export declare function gitFetchHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
4
+ error: string;
5
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
6
+ error: string;
7
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
8
+ success: true;
9
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
10
+ error: string;
11
+ }, 500, "json">)>;
12
+ //# sourceMappingURL=git-fetch.route.d.ts.map
@@ -0,0 +1,31 @@
1
+ import { resolveThreadPath, getGitRoot, fetchFromOrigin } from "./git.utils.js";
2
+ export async function gitFetchHandler(c, metadataManager) {
3
+ try {
4
+ const threadId = c.req.param("threadId");
5
+ const thread = await metadataManager
6
+ .loadThreads()
7
+ .then((threads) => threads.find((t) => t.id === threadId));
8
+ if (!thread) {
9
+ return c.json({ error: "Thread not found" }, 404);
10
+ }
11
+ const repoPath = thread.path;
12
+ if (!repoPath) {
13
+ return c.json({ error: "Thread path not found" }, 404);
14
+ }
15
+ const absolutePath = resolveThreadPath(repoPath);
16
+ let gitRoot;
17
+ try {
18
+ gitRoot = await getGitRoot(absolutePath);
19
+ }
20
+ catch {
21
+ return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
22
+ }
23
+ await fetchFromOrigin(gitRoot);
24
+ return c.json({ success: true });
25
+ }
26
+ catch (error) {
27
+ const message = error instanceof Error ? error.message : "Failed to fetch from origin";
28
+ return c.json({ error: message }, 500);
29
+ }
30
+ }
31
+ //# sourceMappingURL=git-fetch.route.js.map
@@ -0,0 +1,12 @@
1
+ import type { Context } from "hono";
2
+ import { MetadataManager } from "../metadata/metadata.manager.js";
3
+ export declare function gitGenerateCommitMessageHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
4
+ error: string;
5
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
6
+ error: string;
7
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
8
+ message: string;
9
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
10
+ error: string;
11
+ }, 500, "json">)>;
12
+ //# sourceMappingURL=git-generate-commit-message.route.d.ts.map
@@ -0,0 +1,76 @@
1
+ import { existsSync } from "fs";
2
+ import { resolveThreadPath, getGitRoot, getGitDiff, getUntrackedFilesDiff } from "./git.utils.js";
3
+ import { generateCommitMessageWithAI } from "./git.utils.js";
4
+ export async function gitGenerateCommitMessageHandler(c, metadataManager) {
5
+ try {
6
+ const threadId = c.req.param("threadId");
7
+ process.stdout.write(`[generate-commit-message] threadId=${threadId}\n`);
8
+ const thread = await metadataManager
9
+ .loadThreads()
10
+ .then((threads) => threads.find((t) => t.id === threadId));
11
+ if (!thread) {
12
+ process.stdout.write("[generate-commit-message] thread not found\n");
13
+ return c.json({ error: "Thread not found" }, 404);
14
+ }
15
+ else {
16
+ console.log(thread);
17
+ }
18
+ // Check path first before provider
19
+ const repoPath = thread.path;
20
+ if (!repoPath) {
21
+ process.stdout.write("[generate-commit-message] thread path missing\n");
22
+ return c.json({ error: "Thread path not found" }, 404);
23
+ }
24
+ // Get provider from thread's modelProvider, with exception handling if missing
25
+ const provider = thread.modelProvider;
26
+ if (!provider) {
27
+ throw new Error("Provider not found in thread metadata and cannot be extracted from model");
28
+ }
29
+ // Get model from thread
30
+ const model = thread.model;
31
+ const absolutePath = resolveThreadPath(repoPath);
32
+ process.stdout.write(`[generate-commit-message] resolved path: ${absolutePath}\n`);
33
+ if (!existsSync(absolutePath)) {
34
+ process.stdout.write(`[generate-commit-message] path does not exist: ${absolutePath}\n`);
35
+ return c.json({
36
+ error: `Thread repo path does not exist: ${absolutePath}. Check that the project folder is present.`,
37
+ }, 400);
38
+ }
39
+ let gitRoot;
40
+ try {
41
+ gitRoot = await getGitRoot(absolutePath);
42
+ process.stdout.write(`[generate-commit-message] git root: ${gitRoot}\n`);
43
+ }
44
+ catch (e) {
45
+ const msg = e instanceof Error ? e.message : String(e);
46
+ process.stdout.write(`[generate-commit-message] not a git repo: ${msg}\n`);
47
+ return c.json({
48
+ error: `Path is not a git repository: ${absolutePath}. ${msg}`,
49
+ }, 400);
50
+ }
51
+ // Get git diff (staged first, then unstaged). If repo has no commits, git diff --cached fails on HEAD; fall back to git diff.
52
+ let diff = await getGitDiff(gitRoot);
53
+ // If diff is empty, include untracked files (git diff does not show them)
54
+ if (!diff.trim()) {
55
+ const untrackedDiff = await getUntrackedFilesDiff(gitRoot);
56
+ if (untrackedDiff) {
57
+ process.stdout.write(`[generate-commit-message] building diff for untracked files\n`);
58
+ diff = untrackedDiff;
59
+ }
60
+ }
61
+ if (!diff.trim()) {
62
+ process.stdout.write("[generate-commit-message] no changes to generate message for\n");
63
+ return c.json({ error: "No changes to generate commit message for" }, 400);
64
+ }
65
+ process.stdout.write(`[generate-commit-message] diff length=${diff.length} chars, generating message with AI\n`);
66
+ // Use AI to generate commit message
67
+ const commitMessage = await generateCommitMessageWithAI(diff, metadataManager, model, provider);
68
+ process.stdout.write(`[generate-commit-message] generated: ${commitMessage.replace(/\n/g, " ")}\n`);
69
+ return c.json({ message: commitMessage });
70
+ }
71
+ catch (error) {
72
+ const message = error instanceof Error ? error.message : "Failed to generate commit message";
73
+ return c.json({ error: message }, 500);
74
+ }
75
+ }
76
+ //# sourceMappingURL=git-generate-commit-message.route.js.map
@@ -0,0 +1,13 @@
1
+ import type { Context } from "hono";
2
+ import { MetadataManager } from "../metadata/metadata.manager.js";
3
+ export declare function gitGeneratePrInfoHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
4
+ error: string;
5
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
6
+ error: string;
7
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
8
+ title: string;
9
+ description: string;
10
+ baseBranch: string | null;
11
+ currentBranch: string;
12
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
13
+ //# sourceMappingURL=git-generate-pr-info.route.d.ts.map