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,425 @@
1
+ /**
2
+ * AI Files routes for the REST API
3
+ *
4
+ * Handles listing and editing AI-related files in a project:
5
+ * - GET /api/projects/:id/ai-files - List AI file tree (skills, rules, commands, markdown files)
6
+ * - GET /api/projects/:id/ai-file?path=... - Read file content
7
+ * - PUT /api/projects/:id/ai-file - Write file content
8
+ * - DELETE /api/projects/:id/ai-file?path=... - Delete file or folder
9
+ * - POST /api/projects/:id/ai-files/skill - Create a new skill
10
+ */
11
+ import { readdir, readFile, writeFile, mkdir, access, rm } from "fs/promises";
12
+ import { join, extname, basename } from "path";
13
+ import { existsSync } from "fs";
14
+ import { errorResponse } from "../../core/route-helpers.js";
15
+ import { ErrorCodes } from "../../core/error-responses.js";
16
+ const IGNORED_DIRS = new Set([
17
+ ".git",
18
+ "node_modules",
19
+ ".tarsk",
20
+ "dist",
21
+ "build",
22
+ ".next",
23
+ "__pycache__",
24
+ ".venv",
25
+ "venv",
26
+ ]);
27
+ const MARKDOWN_EXTS = new Set([".md", ".mdc"]);
28
+ /**
29
+ * Recursively build a full file tree for a directory (all files).
30
+ * Used for .agents/ subfolders.
31
+ */
32
+ async function buildFullTree(dirPath, relativeDirPath) {
33
+ const nodes = [];
34
+ try {
35
+ const entries = await readdir(dirPath, { withFileTypes: true });
36
+ for (const entry of entries) {
37
+ const entryRelPath = join(relativeDirPath, entry.name);
38
+ const entryAbsPath = join(dirPath, entry.name);
39
+ if (entry.isDirectory()) {
40
+ const children = await buildFullTree(entryAbsPath, entryRelPath);
41
+ nodes.push({
42
+ id: entryRelPath,
43
+ name: entry.name,
44
+ type: "folder",
45
+ path: entryRelPath,
46
+ children,
47
+ });
48
+ }
49
+ else if (entry.isFile()) {
50
+ nodes.push({
51
+ id: entryRelPath,
52
+ name: entry.name,
53
+ type: "file",
54
+ path: entryRelPath,
55
+ });
56
+ }
57
+ }
58
+ }
59
+ catch {
60
+ // Directory doesn't exist or can't be read
61
+ }
62
+ return nodes;
63
+ }
64
+ /**
65
+ * Recursively find folders that contain markdown files, building a filtered tree.
66
+ * Returns nodes for folders containing .md/.mdc files and the .md/.mdc files themselves.
67
+ */
68
+ async function buildMarkdownFilteredTree(dirPath, relativeDirPath) {
69
+ const nodes = [];
70
+ try {
71
+ const entries = await readdir(dirPath, { withFileTypes: true });
72
+ for (const entry of entries) {
73
+ const entryRelPath = join(relativeDirPath, entry.name);
74
+ const entryAbsPath = join(dirPath, entry.name);
75
+ if (entry.isDirectory()) {
76
+ if (IGNORED_DIRS.has(entry.name))
77
+ continue;
78
+ const children = await buildMarkdownFilteredTree(entryAbsPath, entryRelPath);
79
+ if (children.length > 0) {
80
+ nodes.push({
81
+ id: entryRelPath,
82
+ name: entry.name,
83
+ type: "folder",
84
+ path: entryRelPath,
85
+ children,
86
+ });
87
+ }
88
+ }
89
+ else if (entry.isFile() && MARKDOWN_EXTS.has(extname(entry.name))) {
90
+ nodes.push({
91
+ id: entryRelPath,
92
+ name: basename(entry.name, extname(entry.name)),
93
+ type: "file",
94
+ path: entryRelPath,
95
+ });
96
+ }
97
+ }
98
+ }
99
+ catch {
100
+ // Directory doesn't exist or can't be read
101
+ }
102
+ return nodes;
103
+ }
104
+ /**
105
+ * Build the full AI file tree for a project or thread.
106
+ * - Always shows .agents/skills, .agents/rules, .agents/commands (virtual if missing)
107
+ * - Shows markdown files at root level
108
+ * - Shows folders that contain markdown files
109
+ */
110
+ export async function buildAIFileTree(projectPath) {
111
+ const nodes = [];
112
+ // 1. Always-shown .agents subfolders
113
+ const agentsFolders = [
114
+ { key: "skills", label: "Skills" },
115
+ { key: "rules", label: "Rules" },
116
+ { key: "commands", label: "Commands" },
117
+ { key: "agents", label: "Agents" },
118
+ ];
119
+ for (const { key, label } of agentsFolders) {
120
+ const relPath = join(".agents", key);
121
+ const absPath = join(projectPath, relPath);
122
+ const exists = existsSync(absPath);
123
+ if (exists) {
124
+ const children = await buildFullTree(absPath, relPath);
125
+ nodes.push({
126
+ id: relPath,
127
+ name: label,
128
+ type: "folder",
129
+ path: relPath,
130
+ children,
131
+ });
132
+ }
133
+ else {
134
+ nodes.push({
135
+ id: relPath,
136
+ name: label,
137
+ type: "folder",
138
+ path: relPath,
139
+ children: [],
140
+ virtual: true,
141
+ });
142
+ }
143
+ }
144
+ // 2. Always add AGENTS.md as a virtual file in root
145
+ nodes.push({
146
+ id: "AGENTS.md",
147
+ name: "AGENTS",
148
+ type: "file",
149
+ path: "AGENTS.md",
150
+ virtual: true,
151
+ });
152
+ // 3. Scan root for markdown files and folders containing markdown files
153
+ try {
154
+ const rootEntries = await readdir(projectPath, { withFileTypes: true });
155
+ for (const entry of rootEntries) {
156
+ // Skip .agents (already handled), AGENTS.md (already added as virtual), and other ignored dirs
157
+ if (entry.name === ".agents" || entry.name === "AGENTS.md" || IGNORED_DIRS.has(entry.name))
158
+ continue;
159
+ const entryRelPath = entry.name;
160
+ const entryAbsPath = join(projectPath, entry.name);
161
+ if (entry.isFile() && MARKDOWN_EXTS.has(extname(entry.name))) {
162
+ nodes.push({
163
+ id: entryRelPath,
164
+ name: basename(entry.name, extname(entry.name)),
165
+ type: "file",
166
+ path: entryRelPath,
167
+ });
168
+ }
169
+ else if (entry.isDirectory()) {
170
+ const children = await buildMarkdownFilteredTree(entryAbsPath, entryRelPath);
171
+ if (children.length > 0) {
172
+ nodes.push({
173
+ id: entryRelPath,
174
+ name: entry.name,
175
+ type: "folder",
176
+ path: entryRelPath,
177
+ children,
178
+ });
179
+ }
180
+ }
181
+ }
182
+ }
183
+ catch {
184
+ // Can't read root directory
185
+ }
186
+ return nodes;
187
+ }
188
+ /**
189
+ * Validate that a file path is safe (no path traversal, within project or thread)
190
+ */
191
+ export function validateFilePath(projectPath, filePath) {
192
+ if (!filePath)
193
+ return null;
194
+ const abs = join(projectPath, filePath);
195
+ if (!abs.startsWith(projectPath + "/") && abs !== projectPath)
196
+ return null;
197
+ return abs;
198
+ }
199
+ /**
200
+ * GET /api/projects/:id/ai-files
201
+ */
202
+ export async function handleGetAIFiles(c, projectManager) {
203
+ try {
204
+ const projectId = c.req.param("id");
205
+ const project = await projectManager.getProject(projectId);
206
+ if (!project) {
207
+ return errorResponse(c, ErrorCodes.PROJECT_NOT_FOUND, `Project not found: ${projectId}`, 404);
208
+ }
209
+ const nodes = await buildAIFileTree(project.path);
210
+ return c.json({ nodes });
211
+ }
212
+ catch (error) {
213
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to list AI files", 500, error instanceof Error ? error.message : String(error));
214
+ }
215
+ }
216
+ /**
217
+ * GET /api/projects/:id/ai-file?path=...
218
+ */
219
+ export async function handleGetAIFile(c, projectManager) {
220
+ try {
221
+ const projectId = c.req.param("id");
222
+ const filePath = c.req.query("path");
223
+ if (!filePath) {
224
+ return c.json({ error: { code: "BAD_REQUEST", message: "path query parameter is required" } }, 400);
225
+ }
226
+ const project = await projectManager.getProject(projectId);
227
+ if (!project) {
228
+ return errorResponse(c, ErrorCodes.PROJECT_NOT_FOUND, `Project not found: ${projectId}`, 404);
229
+ }
230
+ const absPath = validateFilePath(project.path, filePath);
231
+ if (!absPath) {
232
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
233
+ }
234
+ // Special handling for AGENTS.md - return default content if it doesn't exist
235
+ if (filePath === "AGENTS.md") {
236
+ try {
237
+ await access(absPath);
238
+ }
239
+ catch {
240
+ // File doesn't exist, return default content
241
+ const defaultContent = `# AGENTS.md
242
+
243
+ This file contains configuration and instructions for AI agents working on this repository.
244
+
245
+ ## Overview
246
+ Add information about your project that would be helpful for AI agents to understand:
247
+
248
+ - Project purpose and goals
249
+ - Architecture and technology stack
250
+ - Development workflows and conventions
251
+ - Testing strategies
252
+ - Deployment processes
253
+
254
+ ## Guidelines
255
+ Provide specific guidelines for AI agents:
256
+
257
+ - Code style preferences
258
+ - File organization patterns
259
+ - Review processes
260
+ - Communication protocols
261
+
262
+ ## Resources
263
+ Links to important documentation, tools, or references.
264
+
265
+ ---
266
+
267
+ *This file was automatically created. Edit it to provide context for AI agents.*
268
+ `;
269
+ return c.json({ content: defaultContent, path: filePath });
270
+ }
271
+ }
272
+ try {
273
+ await access(absPath);
274
+ }
275
+ catch {
276
+ return c.json({ error: { code: "NOT_FOUND", message: `File not found: ${filePath}` } }, 404);
277
+ }
278
+ const content = await readFile(absPath, "utf-8");
279
+ return c.json({ content, path: filePath });
280
+ }
281
+ catch (error) {
282
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to read file", 500, error instanceof Error ? error.message : String(error));
283
+ }
284
+ }
285
+ /**
286
+ * PUT /api/projects/:id/ai-file
287
+ * Body: { path: string, content: string }
288
+ */
289
+ export async function handleSaveAIFile(c, projectManager) {
290
+ try {
291
+ const projectId = c.req.param("id");
292
+ let body;
293
+ try {
294
+ body = await c.req.json();
295
+ }
296
+ catch {
297
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
298
+ }
299
+ const { path: filePath, content } = body;
300
+ if (!filePath || content === undefined) {
301
+ return c.json({ error: { code: "BAD_REQUEST", message: "path and content are required" } }, 400);
302
+ }
303
+ const project = await projectManager.getProject(projectId);
304
+ if (!project) {
305
+ return errorResponse(c, ErrorCodes.PROJECT_NOT_FOUND, `Project not found: ${projectId}`, 404);
306
+ }
307
+ const absPath = validateFilePath(project.path, filePath);
308
+ if (!absPath) {
309
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
310
+ }
311
+ // Ensure parent directory exists
312
+ const parentDir = join(absPath, "..");
313
+ await mkdir(parentDir, { recursive: true });
314
+ await writeFile(absPath, content, "utf-8");
315
+ return c.json({ success: true, path: filePath });
316
+ }
317
+ catch (error) {
318
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to save file", 500, error instanceof Error ? error.message : String(error));
319
+ }
320
+ }
321
+ /**
322
+ * DELETE /api/projects/:id/ai-file?path=...
323
+ * Deletes a file or folder at the specified path
324
+ */
325
+ export async function handleDeleteAIFile(c, projectManager) {
326
+ try {
327
+ const projectId = c.req.param("id");
328
+ const filePath = c.req.query("path");
329
+ if (!filePath) {
330
+ return c.json({ error: { code: "BAD_REQUEST", message: "path query parameter is required" } }, 400);
331
+ }
332
+ const project = await projectManager.getProject(projectId);
333
+ if (!project) {
334
+ return errorResponse(c, ErrorCodes.PROJECT_NOT_FOUND, `Project not found: ${projectId}`, 404);
335
+ }
336
+ const absPath = validateFilePath(project.path, filePath);
337
+ if (!absPath) {
338
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
339
+ }
340
+ try {
341
+ await access(absPath);
342
+ }
343
+ catch {
344
+ return c.json({ error: { code: "NOT_FOUND", message: `File or folder not found: ${filePath}` } }, 404);
345
+ }
346
+ // Delete file or folder recursively
347
+ await rm(absPath, { recursive: true, force: true });
348
+ return c.json({ success: true, path: filePath });
349
+ }
350
+ catch (error) {
351
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to delete file", 500, error instanceof Error ? error.message : String(error));
352
+ }
353
+ }
354
+ /**
355
+ * POST /api/projects/:id/ai-files/skill
356
+ * Body: { name: string, description: string, isGlobal?: boolean }
357
+ * Creates .agents/skills/{name}/SKILL.md
358
+ */
359
+ export async function handleCreateSkill(c, projectManager) {
360
+ try {
361
+ const projectId = c.req.param("id");
362
+ let body;
363
+ try {
364
+ body = await c.req.json();
365
+ }
366
+ catch {
367
+ return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
368
+ }
369
+ const { name, description, isGlobal } = body;
370
+ if (!name || !description) {
371
+ return c.json({ error: { code: "BAD_REQUEST", message: "name and description are required" } }, 400);
372
+ }
373
+ // Validate name: lowercase, alphanumeric and hyphens only
374
+ if (!/^[a-z0-9-]+$/.test(name) ||
375
+ name.startsWith("-") ||
376
+ name.endsWith("-") ||
377
+ name.includes("--")) {
378
+ return c.json({
379
+ error: {
380
+ code: "BAD_REQUEST",
381
+ message: "Skill name must be lowercase alphanumeric with hyphens (no leading/trailing/consecutive hyphens)",
382
+ },
383
+ }, 400);
384
+ }
385
+ if (isGlobal) {
386
+ return c.json({
387
+ error: {
388
+ code: "BAD_REQUEST",
389
+ message: "Global skills are not yet supported via this endpoint",
390
+ },
391
+ }, 400);
392
+ }
393
+ const project = await projectManager.getProject(projectId);
394
+ if (!project) {
395
+ return errorResponse(c, ErrorCodes.PROJECT_NOT_FOUND, `Project not found: ${projectId}`, 404);
396
+ }
397
+ const skillRelPath = join(".agents", "skills", name);
398
+ const skillAbsPath = join(project.path, skillRelPath);
399
+ const skillFileRelPath = join(skillRelPath, "SKILL.md");
400
+ const skillFileAbsPath = join(skillAbsPath, "SKILL.md");
401
+ // Check skill doesn't already exist
402
+ if (existsSync(skillAbsPath)) {
403
+ return c.json({ error: { code: "CONFLICT", message: `Skill '${name}' already exists` } }, 409);
404
+ }
405
+ // Create skill directory and SKILL.md
406
+ await mkdir(skillAbsPath, { recursive: true });
407
+ const skillContent = `---
408
+ name: ${name}
409
+ description: ${description}
410
+ ---
411
+
412
+ 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.
413
+ `;
414
+ await writeFile(skillFileAbsPath, skillContent, "utf-8");
415
+ return c.json({
416
+ success: true,
417
+ path: skillFileRelPath,
418
+ content: skillContent,
419
+ });
420
+ }
421
+ catch (error) {
422
+ return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to create skill", 500, error instanceof Error ? error.message : String(error));
423
+ }
424
+ }
425
+ //# sourceMappingURL=projects-ai-files.route.js.map
@@ -0,0 +1,27 @@
1
+ /**
2
+ * POST /api/projects/:id/commands
3
+ * Add or update a command for a project
4
+ */
5
+ import { Context } from "hono";
6
+ import { ProjectManager } from "../projects/projects.manager.js";
7
+ export declare function handleSaveCommand(c: Context, projectManager: ProjectManager): 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<import("hono/utils/types").JSONValue, any, "json">)>;
15
+ /**
16
+ * DELETE /api/projects/:id/commands/:commandId
17
+ * Delete a command from a project
18
+ */
19
+ export declare function handleDeleteCommand(c: Context, projectManager: ProjectManager): Promise<(Response & import("hono").TypedResponse<{
20
+ error: {
21
+ code: string;
22
+ message: string;
23
+ details?: import("hono/utils/types").JSONValue | undefined;
24
+ timestamp: string;
25
+ };
26
+ }, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
27
+ //# sourceMappingURL=projects-commands.route.d.ts.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * POST /api/projects/:id/commands
3
+ * Add or update a command for a project
4
+ */
5
+ import { errorResponse, successResponse } from "../../core/route-helpers.js";
6
+ import { ErrorCodes } from "../../core/error-responses.js";
7
+ export async function handleSaveCommand(c, projectManager) {
8
+ try {
9
+ const projectId = c.req.param("id");
10
+ const command = await c.req.json();
11
+ if (!projectId) {
12
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Project ID is required", 400);
13
+ }
14
+ await projectManager.saveCommand(projectId, command);
15
+ return successResponse(c, { success: true, message: "Command saved" });
16
+ }
17
+ catch (error) {
18
+ return errorResponse(c, ErrorCodes.SAVE_COMMAND_ERROR, "Failed to save command", 500, error instanceof Error ? error.message : String(error));
19
+ }
20
+ }
21
+ /**
22
+ * DELETE /api/projects/:id/commands/:commandId
23
+ * Delete a command from a project
24
+ */
25
+ export async function handleDeleteCommand(c, projectManager) {
26
+ try {
27
+ const projectId = c.req.param("id");
28
+ const commandId = c.req.param("commandId");
29
+ if (!projectId || !commandId) {
30
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Project ID and Command ID are required", 400);
31
+ }
32
+ await projectManager.deleteCommand(projectId, commandId);
33
+ return successResponse(c, { success: true, message: "Command deleted" });
34
+ }
35
+ catch (error) {
36
+ return errorResponse(c, ErrorCodes.DELETE_COMMAND_ERROR, "Failed to delete command", 500, error instanceof Error ? error.message : String(error));
37
+ }
38
+ }
39
+ //# sourceMappingURL=projects-commands.route.js.map
@@ -0,0 +1,19 @@
1
+ /**
2
+ * POST /api/projects
3
+ * Create a new project from a git URL
4
+ *
5
+ * Request body:
6
+ * {
7
+ * "gitUrl": "https://github.com/user/repo.git"
8
+ * }
9
+ *
10
+ * Response: Newline-delimited JSON stream of ProjectEvent objects
11
+ *
12
+ * Requirements:
13
+ * - 6.2 - THE App SHALL send a POST request with the git URL to the CLI
14
+ * - 8.2 - THE CLI SHALL support streaming responses to the client
15
+ */
16
+ import { Context } from "hono";
17
+ import { ProjectManager } from "../projects/projects.manager.js";
18
+ export declare function handleCreateProject(c: Context, projectManager: ProjectManager): Promise<Response>;
19
+ //# sourceMappingURL=projects-create.route.d.ts.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * POST /api/projects
3
+ * Create a new project from a git URL
4
+ *
5
+ * Request body:
6
+ * {
7
+ * "gitUrl": "https://github.com/user/repo.git"
8
+ * }
9
+ *
10
+ * Response: Newline-delimited JSON stream of ProjectEvent objects
11
+ *
12
+ * Requirements:
13
+ * - 6.2 - THE App SHALL send a POST request with the git URL to the CLI
14
+ * - 8.2 - THE CLI SHALL support streaming responses to the client
15
+ */
16
+ import { streamAsyncGenerator } from "../../core/stream-helper.js";
17
+ import { CommitMethods, isValidCommitMethod } from "@tarsk/shared";
18
+ import { errorResponse } from "../../core/route-helpers.js";
19
+ import { ErrorCodes } from "../../core/error-responses.js";
20
+ export async function handleCreateProject(c, projectManager) {
21
+ try {
22
+ const body = await c.req.json();
23
+ const { gitUrl, commitMethod } = body;
24
+ // Validate gitUrl is provided
25
+ if (!gitUrl || typeof gitUrl !== "string") {
26
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "gitUrl is required and must be a string", 400);
27
+ }
28
+ // Validate commitMethod if provided (default to PullRequest)
29
+ const method = isValidCommitMethod(commitMethod) ? commitMethod : CommitMethods.PullRequest;
30
+ // Stream the project creation events
31
+ return streamAsyncGenerator(c, projectManager.createProject(gitUrl, method));
32
+ }
33
+ catch (error) {
34
+ return errorResponse(c, ErrorCodes.REQUEST_PARSE_ERROR, "Failed to parse request body", 400, error instanceof Error ? error.message : String(error));
35
+ }
36
+ }
37
+ //# sourceMappingURL=projects-create.route.js.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * DELETE /api/projects/:id
3
+ * Delete a project and all its threads
4
+ *
5
+ * Response:
6
+ * {
7
+ * "success": true,
8
+ * "message": "Project deleted successfully"
9
+ * }
10
+ *
11
+ * Requirements:
12
+ * - 6.2 - THE CLI SHALL expose REST API endpoints for Project operations
13
+ */
14
+ import { Context } from "hono";
15
+ import { ProjectManager } from "../projects/projects.manager.js";
16
+ export declare function handleDeleteProject(c: Context, projectManager: ProjectManager): Promise<(Response & import("hono").TypedResponse<{
17
+ error: {
18
+ code: string;
19
+ message: string;
20
+ details?: import("hono/utils/types").JSONValue | undefined;
21
+ timestamp: string;
22
+ };
23
+ }, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
24
+ //# sourceMappingURL=projects-delete.route.d.ts.map
@@ -0,0 +1,34 @@
1
+ /**
2
+ * DELETE /api/projects/:id
3
+ * Delete a project and all its threads
4
+ *
5
+ * Response:
6
+ * {
7
+ * "success": true,
8
+ * "message": "Project deleted successfully"
9
+ * }
10
+ *
11
+ * Requirements:
12
+ * - 6.2 - THE CLI SHALL expose REST API endpoints for Project operations
13
+ */
14
+ import { errorResponse, successResponse } from "../../core/route-helpers.js";
15
+ import { ErrorCodes } from "../../core/error-responses.js";
16
+ export async function handleDeleteProject(c, projectManager) {
17
+ try {
18
+ const projectId = c.req.param("id");
19
+ if (!projectId) {
20
+ return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Project ID is required", 400);
21
+ }
22
+ await projectManager.deleteProject(projectId);
23
+ return successResponse(c, { success: true, message: "Project deleted successfully" });
24
+ }
25
+ catch (error) {
26
+ const errorMessage = error instanceof Error ? error.message : String(error);
27
+ // Check if it's a "not found" error
28
+ if (errorMessage.includes("not found")) {
29
+ return errorResponse(c, ErrorCodes.PROJECT_NOT_FOUND, errorMessage, 404);
30
+ }
31
+ return errorResponse(c, ErrorCodes.DELETE_PROJECT_ERROR, "Failed to delete project", 500, errorMessage);
32
+ }
33
+ }
34
+ //# sourceMappingURL=projects-delete.route.js.map
@@ -0,0 +1,47 @@
1
+ /**
2
+ * GET /api/projects/:id
3
+ * Get project details by ID
4
+ *
5
+ * Response:
6
+ * {
7
+ * "id": "uuid",
8
+ * "name": "project-name",
9
+ * "gitUrl": "https://github.com/user/repo.git",
10
+ * "path": "/path/to/project",
11
+ * "createdAt": "2024-01-01T00:00:00Z",
12
+ * "threads": ["thread-id-1", "thread-id-2"]
13
+ * }
14
+ *
15
+ * Requirements:
16
+ * - 6.2 - THE CLI SHALL expose REST API endpoints for Project operations
17
+ */
18
+ import { Context } from "hono";
19
+ import { ProjectManager } from "../projects/projects.manager.js";
20
+ export declare function handleGetProject(c: Context, projectManager: ProjectManager): Promise<(Response & import("hono").TypedResponse<{
21
+ error: {
22
+ code: string;
23
+ message: string;
24
+ details?: import("hono/utils/types").JSONValue | undefined;
25
+ timestamp: string;
26
+ };
27
+ }, any, "json">) | (Response & import("hono").TypedResponse<{
28
+ id: string;
29
+ name: string;
30
+ gitUrl: string;
31
+ path: string;
32
+ createdAt: string;
33
+ threads: string[];
34
+ openWith?: string | undefined;
35
+ commands?: {
36
+ id: string;
37
+ name: string;
38
+ icon: string;
39
+ commandLine: string;
40
+ relativeFolder?: string | undefined;
41
+ }[] | undefined;
42
+ setupScript?: string | undefined;
43
+ pendingSetupScripts?: string[] | undefined;
44
+ runCommand?: string | undefined;
45
+ commitMethod?: import("@tarsk/shared").CommitMethods | undefined;
46
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
47
+ //# sourceMappingURL=projects-get.route.d.ts.map