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,287 @@
1
+ /**
2
+ * AI Files routes for threads REST API
3
+ *
4
+ * Handles listing and editing AI-related files in a thread's path:
5
+ * - GET /api/threads/:id/ai-files - List AI file tree (skills, rules, commands, markdown files)
6
+ * - GET /api/threads/:id/ai-file?path=... - Read file content
7
+ * - PUT /api/threads/:id/ai-file - Write file content
8
+ * - DELETE /api/threads/:id/ai-file?path=... - Delete file or folder
9
+ * - POST /api/threads/:id/ai-files/skill - Create a new skill
10
+ */
11
+ import { readFile, writeFile, mkdir, access, rm } from "fs/promises";
12
+ import { join } from "path";
13
+ import { existsSync } from "fs";
14
+ import { errorResponse } from "../../core/route-helpers.js";
15
+ import { ErrorCodes } from "../../core/error-responses.js";
16
+ import { buildAIFileTree, validateFilePath } from "../projects/projects-ai-files.route.js";
17
+ /**
18
+ * GET /api/threads/:id/ai-files
19
+ */
20
+ export async function handleGetThreadAIFiles(c, threadManager) {
21
+ try {
22
+ const threadId = c.req.param("id");
23
+ const thread = await threadManager.getThread(threadId);
24
+ if (!thread) {
25
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
26
+ }
27
+ const nodes = await buildAIFileTree(thread.path);
28
+ return c.json({ nodes });
29
+ }
30
+ catch (error) {
31
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to list AI files", 500, error instanceof Error ? error.message : String(error));
32
+ }
33
+ }
34
+ /**
35
+ * GET /api/threads/:id/ai-file?path=...
36
+ */
37
+ export async function handleGetThreadAIFile(c, threadManager) {
38
+ try {
39
+ const threadId = c.req.param("id");
40
+ const filePath = c.req.query("path");
41
+ if (!filePath) {
42
+ return c.json({ error: { code: "BAD_REQUEST", message: "path query parameter is required" } }, 400);
43
+ }
44
+ const thread = await threadManager.getThread(threadId);
45
+ if (!thread) {
46
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
47
+ }
48
+ const absPath = validateFilePath(thread.path, filePath);
49
+ if (!absPath) {
50
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
51
+ }
52
+ // Special handling for AGENTS.md - return default content if it doesn't exist
53
+ if (filePath === "AGENTS.md") {
54
+ try {
55
+ await access(absPath);
56
+ }
57
+ catch {
58
+ const defaultContent = `# AGENTS.md
59
+
60
+ This file contains configuration and instructions for AI agents working on this repository.
61
+
62
+ ## Overview
63
+ Add information about your project that would be helpful for AI agents to understand:
64
+
65
+ - Project purpose and goals
66
+ - Architecture and technology stack
67
+ - Development workflows and conventions
68
+ - Testing strategies
69
+ - Deployment processes
70
+
71
+ ## Guidelines
72
+ Provide specific guidelines for AI agents:
73
+
74
+ - Code style preferences
75
+ - File organization patterns
76
+ - Review processes
77
+ - Communication protocols
78
+
79
+ ## Resources
80
+ Links to important documentation, tools, or references.
81
+
82
+ ---
83
+
84
+ *This file was automatically created. Edit it to provide context for AI agents.*
85
+ `;
86
+ return c.json({ content: defaultContent, path: filePath });
87
+ }
88
+ }
89
+ try {
90
+ await access(absPath);
91
+ }
92
+ catch {
93
+ return c.json({ error: { code: "NOT_FOUND", message: `File not found: ${filePath}` } }, 404);
94
+ }
95
+ const content = await readFile(absPath, "utf-8");
96
+ return c.json({ content, path: filePath });
97
+ }
98
+ catch (error) {
99
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to read file", 500, error instanceof Error ? error.message : String(error));
100
+ }
101
+ }
102
+ /**
103
+ * PUT /api/threads/:id/ai-file
104
+ * Body: { path: string, content: string }
105
+ */
106
+ export async function handleSaveThreadAIFile(c, threadManager) {
107
+ try {
108
+ const threadId = c.req.param("id");
109
+ let body;
110
+ try {
111
+ body = await c.req.json();
112
+ }
113
+ catch {
114
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
115
+ }
116
+ const { path: filePath, content } = body;
117
+ if (!filePath || content === undefined) {
118
+ return c.json({ error: { code: "BAD_REQUEST", message: "path and content are required" } }, 400);
119
+ }
120
+ const thread = await threadManager.getThread(threadId);
121
+ if (!thread) {
122
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
123
+ }
124
+ const absPath = validateFilePath(thread.path, filePath);
125
+ if (!absPath) {
126
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
127
+ }
128
+ const parentDir = join(absPath, "..");
129
+ await mkdir(parentDir, { recursive: true });
130
+ await writeFile(absPath, content, "utf-8");
131
+ return c.json({ success: true, path: filePath });
132
+ }
133
+ catch (error) {
134
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to save file", 500, error instanceof Error ? error.message : String(error));
135
+ }
136
+ }
137
+ /**
138
+ * DELETE /api/threads/:id/ai-file?path=...
139
+ */
140
+ export async function handleDeleteThreadAIFile(c, threadManager) {
141
+ try {
142
+ const threadId = c.req.param("id");
143
+ const filePath = c.req.query("path");
144
+ if (!filePath) {
145
+ return c.json({ error: { code: "BAD_REQUEST", message: "path query parameter is required" } }, 400);
146
+ }
147
+ const thread = await threadManager.getThread(threadId);
148
+ if (!thread) {
149
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
150
+ }
151
+ const absPath = validateFilePath(thread.path, filePath);
152
+ if (!absPath) {
153
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
154
+ }
155
+ try {
156
+ await access(absPath);
157
+ }
158
+ catch {
159
+ return c.json({ error: { code: "NOT_FOUND", message: `File or folder not found: ${filePath}` } }, 404);
160
+ }
161
+ await rm(absPath, { recursive: true, force: true });
162
+ return c.json({ success: true, path: filePath });
163
+ }
164
+ catch (error) {
165
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to delete file", 500, error instanceof Error ? error.message : String(error));
166
+ }
167
+ }
168
+ /**
169
+ * POST /api/threads/:id/ai-files/agent
170
+ * Body: { name: string, description: string, tools?: string }
171
+ */
172
+ export async function handleCreateThreadAgent(c, threadManager) {
173
+ try {
174
+ const threadId = c.req.param("id");
175
+ let body;
176
+ try {
177
+ body = await c.req.json();
178
+ }
179
+ catch {
180
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
181
+ }
182
+ const { name, description, tools } = body;
183
+ if (!name || !description) {
184
+ return c.json({ error: { code: "BAD_REQUEST", message: "name and description are required" } }, 400);
185
+ }
186
+ if (!/^[a-z0-9-]+$/.test(name) ||
187
+ name.startsWith("-") ||
188
+ name.endsWith("-") ||
189
+ name.includes("--")) {
190
+ return c.json({
191
+ error: {
192
+ code: "BAD_REQUEST",
193
+ message: "Agent name must be lowercase alphanumeric with hyphens (no leading/trailing/consecutive hyphens)",
194
+ },
195
+ }, 400);
196
+ }
197
+ const thread = await threadManager.getThread(threadId);
198
+ if (!thread) {
199
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
200
+ }
201
+ const agentRelPath = join(".agents", "agents", name);
202
+ const agentAbsPath = join(thread.path, agentRelPath);
203
+ const agentFileRelPath = join(agentRelPath, "AGENT.md");
204
+ const agentFileAbsPath = join(agentAbsPath, "AGENT.md");
205
+ if (existsSync(agentAbsPath)) {
206
+ return c.json({ error: { code: "CONFLICT", message: `Agent '${name}' already exists` } }, 409);
207
+ }
208
+ await mkdir(agentAbsPath, { recursive: true });
209
+ const toolsLine = tools ? `\ntools: ${tools}` : "";
210
+ const agentContent = `---
211
+ name: ${name}
212
+ description: ${description}${toolsLine}
213
+ ---
214
+
215
+ Place your agent system prompt here as markdown. This will be used as the system prompt when this agent is invoked as a subagent.
216
+ `;
217
+ await writeFile(agentFileAbsPath, agentContent, "utf-8");
218
+ return c.json({
219
+ success: true,
220
+ path: agentFileRelPath,
221
+ content: agentContent,
222
+ });
223
+ }
224
+ catch (error) {
225
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to create agent", 500, error instanceof Error ? error.message : String(error));
226
+ }
227
+ }
228
+ /**
229
+ * POST /api/threads/:id/ai-files/skill
230
+ * Body: { name: string, description: string }
231
+ */
232
+ export async function handleCreateThreadSkill(c, threadManager) {
233
+ try {
234
+ const threadId = c.req.param("id");
235
+ let body;
236
+ try {
237
+ body = await c.req.json();
238
+ }
239
+ catch {
240
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
241
+ }
242
+ const { name, description } = body;
243
+ if (!name || !description) {
244
+ return c.json({ error: { code: "BAD_REQUEST", message: "name and description are required" } }, 400);
245
+ }
246
+ if (!/^[a-z0-9-]+$/.test(name) ||
247
+ name.startsWith("-") ||
248
+ name.endsWith("-") ||
249
+ name.includes("--")) {
250
+ return c.json({
251
+ error: {
252
+ code: "BAD_REQUEST",
253
+ message: "Skill name must be lowercase alphanumeric with hyphens (no leading/trailing/consecutive hyphens)",
254
+ },
255
+ }, 400);
256
+ }
257
+ const thread = await threadManager.getThread(threadId);
258
+ if (!thread) {
259
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
260
+ }
261
+ const skillRelPath = join(".agents", "skills", name);
262
+ const skillAbsPath = join(thread.path, skillRelPath);
263
+ const skillFileRelPath = join(skillRelPath, "SKILL.md");
264
+ const skillFileAbsPath = join(skillAbsPath, "SKILL.md");
265
+ if (existsSync(skillAbsPath)) {
266
+ return c.json({ error: { code: "CONFLICT", message: `Skill '${name}' already exists` } }, 409);
267
+ }
268
+ await mkdir(skillAbsPath, { recursive: true });
269
+ const skillContent = `---
270
+ name: ${name}
271
+ description: ${description}
272
+ ---
273
+
274
+ Place your skill instructions here as markdown. This will be used when Tarsk is prompted with a request related to the description of this skill.
275
+ `;
276
+ await writeFile(skillFileAbsPath, skillContent, "utf-8");
277
+ return c.json({
278
+ success: true,
279
+ path: skillFileRelPath,
280
+ content: skillContent,
281
+ });
282
+ }
283
+ catch (error) {
284
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to create skill", 500, error instanceof Error ? error.message : String(error));
285
+ }
286
+ }
287
+ //# sourceMappingURL=threads-ai-files.route.js.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * GET /api/threads/:id/conversation-folder-path
3
+ * Return the absolute path to the folder containing the conversation history JSON for this thread.
4
+ */
5
+ import { Context } from "hono";
6
+ export declare function handleGetConversationFolderPath(c: Context): Promise<(Response & import("hono").TypedResponse<{
7
+ error: {
8
+ code: string;
9
+ message: string;
10
+ details?: import("hono/utils/types").JSONValue | undefined;
11
+ timestamp: string;
12
+ };
13
+ }, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
14
+ //# sourceMappingURL=threads-conversation-folder-path.route.d.ts.map
@@ -0,0 +1,23 @@
1
+ /**
2
+ * GET /api/threads/:id/conversation-folder-path
3
+ * Return the absolute path to the folder containing the conversation history JSON for this thread.
4
+ */
5
+ import { join } from "path";
6
+ import { getDataDir } from "../../core/paths.js";
7
+ import { errorResponse, successResponse } from "../../core/route-helpers.js";
8
+ import { ErrorCodes } from "../../core/error-responses.js";
9
+ export async function handleGetConversationFolderPath(c) {
10
+ try {
11
+ const threadId = c.req.param("id");
12
+ if (!threadId) {
13
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
14
+ }
15
+ const path = join(getDataDir(), threadId);
16
+ return successResponse(c, { path });
17
+ }
18
+ catch (error) {
19
+ const errorMessage = error instanceof Error ? error.message : String(error);
20
+ return errorResponse(c, ErrorCodes.PATH_ERROR, "Failed to get conversation folder path", 500, errorMessage);
21
+ }
22
+ }
23
+ //# sourceMappingURL=threads-conversation-folder-path.route.js.map
@@ -0,0 +1,22 @@
1
+ /**
2
+ * POST /api/threads
3
+ * Create a new thread for a project
4
+ *
5
+ * Request body:
6
+ * {
7
+ * "projectId": "uuid",
8
+ * "title": "Optional thread title"
9
+ * }
10
+ *
11
+ * Response: Newline-delimited JSON stream of ThreadEvent objects
12
+ *
13
+ * Requirements:
14
+ * - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
15
+ * - 8.3 - WHEN creating a Thread, THE App SHALL send a POST request with the Project identifier to the CLI
16
+ * - 8.4 - THE CLI SHALL support streaming responses to the client
17
+ */
18
+ import { Context } from "hono";
19
+ import type { ThreadManager } from "../threads/threads.manager.js";
20
+ import type { GitManager } from "../git/git.manager.js";
21
+ export declare function handleCreateThread(c: Context, threadManager: ThreadManager, gitManager: GitManager): Promise<Response>;
22
+ //# sourceMappingURL=threads-create.route.d.ts.map
@@ -0,0 +1,60 @@
1
+ /**
2
+ * POST /api/threads
3
+ * Create a new thread for a project
4
+ *
5
+ * Request body:
6
+ * {
7
+ * "projectId": "uuid",
8
+ * "title": "Optional thread title"
9
+ * }
10
+ *
11
+ * Response: Newline-delimited JSON stream of ThreadEvent objects
12
+ *
13
+ * Requirements:
14
+ * - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
15
+ * - 8.3 - WHEN creating a Thread, THE App SHALL send a POST request with the Project identifier to the CLI
16
+ * - 8.4 - THE CLI SHALL support streaming responses to the client
17
+ */
18
+ import { streamAsyncGenerator } from "../../core/stream-helper.js";
19
+ import { validateThreadName } from "../../core/validation.js";
20
+ import { errorResponse } from "../../core/route-helpers.js";
21
+ import { ErrorCodes } from "../../core/error-responses.js";
22
+ import { generateRandomThreadName } from "../../core/random-words.js";
23
+ export async function handleCreateThread(c, threadManager, gitManager) {
24
+ try {
25
+ const body = await c.req.json();
26
+ const { projectId, title } = body;
27
+ // Validate projectId is provided
28
+ if (!projectId || typeof projectId !== "string") {
29
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "projectId is required and must be a string", 400);
30
+ }
31
+ // Validate title if provided
32
+ if (title !== undefined && typeof title !== "string") {
33
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "title must be a string if provided", 400);
34
+ }
35
+ // Validate thread name (empty/whitespace is allowed, will auto-generate)
36
+ if (title && title.trim() !== "") {
37
+ const nameError = validateThreadName(title);
38
+ if (nameError) {
39
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, nameError, 400);
40
+ }
41
+ // Check for duplicate branch names — if duplicate, fall back to a random name
42
+ const existingThreads = await threadManager.listThreads(projectId);
43
+ const sanitizedNewName = gitManager.sanitizeBranchName(title);
44
+ const existingSanitized = existingThreads.map((t) => gitManager.sanitizeBranchName(t.title));
45
+ if (existingSanitized.includes(sanitizedNewName)) {
46
+ let fallbackTitle = generateRandomThreadName();
47
+ while (existingSanitized.includes(gitManager.sanitizeBranchName(fallbackTitle))) {
48
+ fallbackTitle = generateRandomThreadName();
49
+ }
50
+ return streamAsyncGenerator(c, threadManager.createThread(projectId, fallbackTitle));
51
+ }
52
+ }
53
+ // Stream the thread creation events
54
+ return streamAsyncGenerator(c, threadManager.createThread(projectId, title));
55
+ }
56
+ catch (error) {
57
+ return errorResponse(c, ErrorCodes.REQUEST_PARSE_ERROR, "Failed to parse request body", 400, error instanceof Error ? error.message : String(error));
58
+ }
59
+ }
60
+ //# sourceMappingURL=threads-create.route.js.map
@@ -0,0 +1,25 @@
1
+ /**
2
+ * DELETE /api/threads/:id
3
+ * Delete a thread
4
+ *
5
+ * Response:
6
+ * {
7
+ * "success": true,
8
+ * "message": "Thread deleted successfully"
9
+ * }
10
+ *
11
+ * Requirements:
12
+ * - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
13
+ * - 8.4 - WHEN deleting a Thread, THE App SHALL send a DELETE request with the Thread identifier to the CLI
14
+ */
15
+ import { Context } from "hono";
16
+ import type { ThreadManager } from "../threads/threads.manager.js";
17
+ export declare function handleDeleteThread(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
18
+ error: {
19
+ code: string;
20
+ message: string;
21
+ details?: import("hono/utils/types").JSONValue | undefined;
22
+ timestamp: string;
23
+ };
24
+ }, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
25
+ //# sourceMappingURL=threads-delete.route.d.ts.map
@@ -0,0 +1,35 @@
1
+ /**
2
+ * DELETE /api/threads/:id
3
+ * Delete a thread
4
+ *
5
+ * Response:
6
+ * {
7
+ * "success": true,
8
+ * "message": "Thread deleted successfully"
9
+ * }
10
+ *
11
+ * Requirements:
12
+ * - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
13
+ * - 8.4 - WHEN deleting a Thread, THE App SHALL send a DELETE request with the Thread identifier to the CLI
14
+ */
15
+ import { errorResponse, successResponse } from "../../core/route-helpers.js";
16
+ import { ErrorCodes } from "../../core/error-responses.js";
17
+ export async function handleDeleteThread(c, threadManager) {
18
+ try {
19
+ const threadId = c.req.param("id");
20
+ if (!threadId) {
21
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
22
+ }
23
+ await threadManager.deleteThread(threadId);
24
+ return successResponse(c, { success: true, message: "Thread deleted successfully" });
25
+ }
26
+ catch (error) {
27
+ const errorMessage = error instanceof Error ? error.message : String(error);
28
+ // Check if it's a "not found" error
29
+ if (errorMessage.includes("not found")) {
30
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, errorMessage, 404);
31
+ }
32
+ return errorResponse(c, ErrorCodes.DELETE_THREAD_ERROR, "Failed to delete thread", 500, errorMessage);
33
+ }
34
+ }
35
+ //# sourceMappingURL=threads-delete.route.js.map
@@ -0,0 +1,15 @@
1
+ /**
2
+ * GET /api/threads/:id/files
3
+ * List all files in a thread's directory
4
+ */
5
+ import { Context } from "hono";
6
+ import type { ThreadManager } from "../threads/threads.manager.js";
7
+ export declare function handleListThreadFiles(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
8
+ error: {
9
+ code: string;
10
+ message: string;
11
+ details?: import("hono/utils/types").JSONValue | undefined;
12
+ timestamp: string;
13
+ };
14
+ }, any, "json">) | (Response & import("hono").TypedResponse<string[], import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
15
+ //# sourceMappingURL=threads-files.route.d.ts.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * GET /api/threads/:id/files
3
+ * List all files in a thread's directory
4
+ */
5
+ import { errorResponse } from "../../core/route-helpers.js";
6
+ import { ErrorCodes } from "../../core/error-responses.js";
7
+ export async function handleListThreadFiles(c, threadManager) {
8
+ try {
9
+ const threadId = c.req.param("id");
10
+ if (!threadId) {
11
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
12
+ }
13
+ const files = await threadManager.listFiles(threadId);
14
+ return c.json(files);
15
+ }
16
+ catch (error) {
17
+ return errorResponse(c, ErrorCodes.LIST_THREAD_FILES_ERROR, "Failed to list thread files", 500, error instanceof Error ? error.message : String(error));
18
+ }
19
+ }
20
+ //# sourceMappingURL=threads-files.route.js.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * POST /api/threads/:id/fix-comments
3
+ * Converts diff review comments into todos in the database.
4
+ *
5
+ * Request body:
6
+ * {
7
+ * "comments": DiffCommentRecord[]
8
+ * }
9
+ *
10
+ * Response:
11
+ * {
12
+ * "prompt": string,
13
+ * "todos": TodoRecord[]
14
+ * }
15
+ */
16
+ import type { Context } from "hono";
17
+ import type { ThreadManager } from "./threads.manager.js";
18
+ export declare function handleFixComments(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
19
+ error: {
20
+ code: string;
21
+ message: string;
22
+ details?: import("hono/utils/types").JSONValue | undefined;
23
+ timestamp: string;
24
+ };
25
+ }, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
26
+ //# sourceMappingURL=threads-fix-comments.route.d.ts.map
@@ -0,0 +1,45 @@
1
+ /**
2
+ * POST /api/threads/:id/fix-comments
3
+ * Converts diff review comments into todos in the database.
4
+ *
5
+ * Request body:
6
+ * {
7
+ * "comments": DiffCommentRecord[]
8
+ * }
9
+ *
10
+ * Response:
11
+ * {
12
+ * "prompt": string,
13
+ * "todos": TodoRecord[]
14
+ * }
15
+ */
16
+ import { addTodos, clearTodos } from "../todos/todos.database.js";
17
+ import { errorResponse, successResponse } from "../../core/route-helpers.js";
18
+ import { ErrorCodes } from "../../core/error-responses.js";
19
+ export async function handleFixComments(c, threadManager) {
20
+ try {
21
+ const threadId = c.req.param("id");
22
+ if (!threadId) {
23
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
24
+ }
25
+ const thread = await threadManager.getThread(threadId);
26
+ if (!thread) {
27
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
28
+ }
29
+ const body = await c.req.json();
30
+ const { comments } = body;
31
+ if (!Array.isArray(comments) || comments.length === 0) {
32
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "comments must be a non-empty array", 400);
33
+ }
34
+ // Clear existing todos and insert one per comment
35
+ await clearTodos(threadId);
36
+ const descriptions = comments.map((c, i) => `${i + 1}. ${c.filePath} line ${c.lineNumber}: \`${c.lineContent.trim()}\` — ${c.comment}`);
37
+ const todos = await addTodos(threadId, descriptions);
38
+ const prompt = `${comments.length} code review comment${comments.length === 1 ? " has" : "s have"} been added as todos. First, call the todo list tool to display the tasks. Then work through each todo and implement the required changes.`;
39
+ return successResponse(c, { prompt, todos });
40
+ }
41
+ catch (error) {
42
+ return errorResponse(c, ErrorCodes.REQUEST_PARSE_ERROR, "Failed to process fix-comments request", 500, error instanceof Error ? error.message : String(error));
43
+ }
44
+ }
45
+ //# sourceMappingURL=threads-fix-comments.route.js.map
@@ -0,0 +1,30 @@
1
+ /**
2
+ * GET /api/threads/:id
3
+ * Get details of a specific thread
4
+ *
5
+ * Response:
6
+ * {
7
+ * "id": "uuid",
8
+ * "projectId": "uuid",
9
+ * "title": "Thread title",
10
+ * "path": "/path/to/thread",
11
+ * "currentBranch": "branch-name",
12
+ * "createdAt": "2024-01-01T00:00:00Z",
13
+ * "currentConversationId": "uuid",
14
+ * "status": "active"
15
+ * }
16
+ *
17
+ * Requirements:
18
+ * - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
19
+ */
20
+ import { Context } from "hono";
21
+ import type { ThreadManager } from "./threads.manager.js";
22
+ export declare function handleGetThread(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
23
+ error: {
24
+ code: string;
25
+ message: string;
26
+ details?: import("hono/utils/types").JSONValue | undefined;
27
+ timestamp: string;
28
+ };
29
+ }, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
30
+ //# sourceMappingURL=threads-get.route.d.ts.map
@@ -0,0 +1,38 @@
1
+ /**
2
+ * GET /api/threads/:id
3
+ * Get details of a specific thread
4
+ *
5
+ * Response:
6
+ * {
7
+ * "id": "uuid",
8
+ * "projectId": "uuid",
9
+ * "title": "Thread title",
10
+ * "path": "/path/to/thread",
11
+ * "currentBranch": "branch-name",
12
+ * "createdAt": "2024-01-01T00:00:00Z",
13
+ * "currentConversationId": "uuid",
14
+ * "status": "active"
15
+ * }
16
+ *
17
+ * Requirements:
18
+ * - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
19
+ */
20
+ import { errorResponse, successResponse } from "../../core/route-helpers.js";
21
+ import { ErrorCodes } from "../../core/error-responses.js";
22
+ export async function handleGetThread(c, threadManager) {
23
+ try {
24
+ const threadId = c.req.param("id");
25
+ if (!threadId) {
26
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
27
+ }
28
+ const thread = await threadManager.getThread(threadId);
29
+ if (!thread) {
30
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
31
+ }
32
+ return successResponse(c, thread);
33
+ }
34
+ catch (error) {
35
+ return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, "Failed to get thread", 500, error instanceof Error ? error.message : String(error));
36
+ }
37
+ }
38
+ //# sourceMappingURL=threads-get.route.js.map