tarsk 0.4.4 → 0.4.6

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 (366) hide show
  1. package/dist/index.js +447375 -37
  2. package/package.json +2 -2
  3. package/dist/agent/agent.error-utils.d.ts +0 -14
  4. package/dist/agent/agent.error-utils.js +0 -52
  5. package/dist/agent/agent.event-transformer.d.ts +0 -55
  6. package/dist/agent/agent.event-transformer.js +0 -175
  7. package/dist/agent/agent.executor.d.ts +0 -26
  8. package/dist/agent/agent.executor.js +0 -286
  9. package/dist/agent/agent.model-resolver.d.ts +0 -22
  10. package/dist/agent/agent.model-resolver.js +0 -67
  11. package/dist/agent/agent.process-manager.d.ts +0 -57
  12. package/dist/agent/agent.process-manager.js +0 -262
  13. package/dist/agent/agent.processing-state-manager.d.ts +0 -74
  14. package/dist/agent/agent.processing-state-manager.js +0 -87
  15. package/dist/agent/agent.prompt-loader.d.ts +0 -16
  16. package/dist/agent/agent.prompt-loader.js +0 -227
  17. package/dist/agent/agent.subagent-executor.d.ts +0 -35
  18. package/dist/agent/agent.subagent-executor.js +0 -135
  19. package/dist/bun/index.d.ts +0 -2
  20. package/dist/bun/index.js +0 -165
  21. package/dist/cli.d.ts +0 -3
  22. package/dist/cli.js +0 -22
  23. package/dist/core/crypto.d.ts +0 -29
  24. package/dist/core/crypto.js +0 -166
  25. package/dist/core/dev-server-cache.d.ts +0 -46
  26. package/dist/core/dev-server-cache.js +0 -59
  27. package/dist/core/env-manager.d.ts +0 -3
  28. package/dist/core/env-manager.js +0 -60
  29. package/dist/core/error-responses.d.ts +0 -61
  30. package/dist/core/error-responses.js +0 -64
  31. package/dist/core/logger.d.ts +0 -10
  32. package/dist/core/logger.js +0 -47
  33. package/dist/core/paths.d.ts +0 -22
  34. package/dist/core/paths.js +0 -26
  35. package/dist/core/random-words.d.ts +0 -18
  36. package/dist/core/random-words.js +0 -135
  37. package/dist/core/response-builder.d.ts +0 -50
  38. package/dist/core/response-builder.js +0 -56
  39. package/dist/core/route-helpers.d.ts +0 -47
  40. package/dist/core/route-helpers.js +0 -54
  41. package/dist/core/run-command-detector.d.ts +0 -26
  42. package/dist/core/run-command-detector.js +0 -98
  43. package/dist/core/stream-helper.d.ts +0 -44
  44. package/dist/core/stream-helper.js +0 -50
  45. package/dist/core/utils.d.ts +0 -43
  46. package/dist/core/utils.js +0 -113
  47. package/dist/core/validation.d.ts +0 -10
  48. package/dist/core/validation.js +0 -20
  49. package/dist/database/database.d.ts +0 -40
  50. package/dist/database/database.encryption.d.ts +0 -33
  51. package/dist/database/database.encryption.js +0 -62
  52. package/dist/database/database.js +0 -480
  53. package/dist/database/database.state.d.ts +0 -52
  54. package/dist/database/database.state.js +0 -119
  55. package/dist/database/database.test-utils.d.ts +0 -22
  56. package/dist/database/database.test-utils.js +0 -39
  57. package/dist/database/database.types.d.ts +0 -3
  58. package/dist/database/database.types.js +0 -2
  59. package/dist/features/agents/agents.manager.d.ts +0 -24
  60. package/dist/features/agents/agents.manager.js +0 -200
  61. package/dist/features/ask-user/ask-user.routes.d.ts +0 -9
  62. package/dist/features/ask-user/ask-user.routes.js +0 -35
  63. package/dist/features/chat/chat-delete.route.d.ts +0 -15
  64. package/dist/features/chat/chat-delete.route.js +0 -36
  65. package/dist/features/chat/chat-post.route.d.ts +0 -11
  66. package/dist/features/chat/chat-post.route.js +0 -270
  67. package/dist/features/chat/chat-stop.route.d.ts +0 -21
  68. package/dist/features/chat/chat-stop.route.js +0 -22
  69. package/dist/features/chat/chat-subscribe.route.d.ts +0 -9
  70. package/dist/features/chat/chat-subscribe.route.js +0 -71
  71. package/dist/features/chat/chat.routes.d.ts +0 -22
  72. package/dist/features/chat/chat.routes.js +0 -29
  73. package/dist/features/conversations/conversations-delete.route.d.ts +0 -16
  74. package/dist/features/conversations/conversations-delete.route.js +0 -34
  75. package/dist/features/conversations/conversations-get-all.route.d.ts +0 -16
  76. package/dist/features/conversations/conversations-get-all.route.js +0 -39
  77. package/dist/features/conversations/conversations-get-by-id.route.d.ts +0 -16
  78. package/dist/features/conversations/conversations-get-by-id.route.js +0 -38
  79. package/dist/features/conversations/conversations-get-deleted.route.d.ts +0 -15
  80. package/dist/features/conversations/conversations-get-deleted.route.js +0 -34
  81. package/dist/features/conversations/conversations-get-messages.route.d.ts +0 -16
  82. package/dist/features/conversations/conversations-get-messages.route.js +0 -49
  83. package/dist/features/conversations/conversations.content.d.ts +0 -28
  84. package/dist/features/conversations/conversations.content.js +0 -142
  85. package/dist/features/conversations/conversations.database.d.ts +0 -108
  86. package/dist/features/conversations/conversations.database.js +0 -373
  87. package/dist/features/conversations/conversations.manager.d.ts +0 -130
  88. package/dist/features/conversations/conversations.manager.js +0 -162
  89. package/dist/features/conversations/conversations.routes.d.ts +0 -21
  90. package/dist/features/conversations/conversations.routes.js +0 -38
  91. package/dist/features/conversations/token-usage.route.d.ts +0 -41
  92. package/dist/features/conversations/token-usage.route.js +0 -419
  93. package/dist/features/git/git-commit.route.d.ts +0 -12
  94. package/dist/features/git/git-commit.route.js +0 -39
  95. package/dist/features/git/git-create-branch.route.d.ts +0 -28
  96. package/dist/features/git/git-create-branch.route.js +0 -119
  97. package/dist/features/git/git-create-pr.route.d.ts +0 -13
  98. package/dist/features/git/git-create-pr.route.js +0 -50
  99. package/dist/features/git/git-create-repo.route.d.ts +0 -14
  100. package/dist/features/git/git-create-repo.route.js +0 -108
  101. package/dist/features/git/git-diff.route.d.ts +0 -30
  102. package/dist/features/git/git-diff.route.js +0 -189
  103. package/dist/features/git/git-fetch.route.d.ts +0 -12
  104. package/dist/features/git/git-fetch.route.js +0 -31
  105. package/dist/features/git/git-generate-commit-message.route.d.ts +0 -12
  106. package/dist/features/git/git-generate-commit-message.route.js +0 -76
  107. package/dist/features/git/git-generate-pr-info.route.d.ts +0 -13
  108. package/dist/features/git/git-generate-pr-info.route.js +0 -147
  109. package/dist/features/git/git-github-status.route.d.ts +0 -16
  110. package/dist/features/git/git-github-status.route.js +0 -68
  111. package/dist/features/git/git-log.route.d.ts +0 -17
  112. package/dist/features/git/git-log.route.js +0 -33
  113. package/dist/features/git/git-pr-status.route.d.ts +0 -15
  114. package/dist/features/git/git-pr-status.route.js +0 -33
  115. package/dist/features/git/git-pull.route.d.ts +0 -12
  116. package/dist/features/git/git-pull.route.js +0 -35
  117. package/dist/features/git/git-push.route.d.ts +0 -12
  118. package/dist/features/git/git-push.route.js +0 -46
  119. package/dist/features/git/git-status-cache.database.d.ts +0 -7
  120. package/dist/features/git/git-status-cache.database.js +0 -53
  121. package/dist/features/git/git-status.route.d.ts +0 -15
  122. package/dist/features/git/git-status.route.js +0 -62
  123. package/dist/features/git/git-sync-branch.route.d.ts +0 -4
  124. package/dist/features/git/git-sync-branch.route.js +0 -208
  125. package/dist/features/git/git-unified-status.route.d.ts +0 -30
  126. package/dist/features/git/git-unified-status.route.js +0 -165
  127. package/dist/features/git/git-username.route.d.ts +0 -3
  128. package/dist/features/git/git-username.route.js +0 -24
  129. package/dist/features/git/git.manager.d.ts +0 -139
  130. package/dist/features/git/git.manager.js +0 -352
  131. package/dist/features/git/git.routes.d.ts +0 -4
  132. package/dist/features/git/git.routes.js +0 -116
  133. package/dist/features/git/git.utils.d.ts +0 -82
  134. package/dist/features/git/git.utils.js +0 -1040
  135. package/dist/features/mcp/mcp.config.d.ts +0 -27
  136. package/dist/features/mcp/mcp.config.js +0 -148
  137. package/dist/features/mcp/mcp.manager.d.ts +0 -61
  138. package/dist/features/mcp/mcp.manager.js +0 -254
  139. package/dist/features/mcp/mcp.popular.json +0 -103
  140. package/dist/features/mcp/mcp.routes.d.ts +0 -13
  141. package/dist/features/mcp/mcp.routes.js +0 -159
  142. package/dist/features/mcp/mcp.types.d.ts +0 -80
  143. package/dist/features/mcp/mcp.types.js +0 -8
  144. package/dist/features/metadata/metadata.manager.d.ts +0 -126
  145. package/dist/features/metadata/metadata.manager.js +0 -423
  146. package/dist/features/models/model-info-aihubmix.d.ts +0 -25
  147. package/dist/features/models/model-info-aihubmix.js +0 -117
  148. package/dist/features/models/model-info-openrouter.d.ts +0 -25
  149. package/dist/features/models/model-info-openrouter.js +0 -104
  150. package/dist/features/models/model-info.d.ts +0 -37
  151. package/dist/features/models/model-info.js +0 -39
  152. package/dist/features/models/models-catalog.d.ts +0 -49
  153. package/dist/features/models/models-catalog.js +0 -80
  154. package/dist/features/models/models-catalog.route.d.ts +0 -43
  155. package/dist/features/models/models-catalog.route.js +0 -15
  156. package/dist/features/models/models-get-available.route.d.ts +0 -36
  157. package/dist/features/models/models-get-available.route.js +0 -66
  158. package/dist/features/models/models-get-enabled.route.d.ts +0 -33
  159. package/dist/features/models/models-get-enabled.route.js +0 -45
  160. package/dist/features/models/models-get-model-info.route.d.ts +0 -31
  161. package/dist/features/models/models-get-model-info.route.js +0 -84
  162. package/dist/features/models/models-model-disable.route.d.ts +0 -15
  163. package/dist/features/models/models-model-disable.route.js +0 -20
  164. package/dist/features/models/models-model-enable.route.d.ts +0 -13
  165. package/dist/features/models/models-model-enable.route.js +0 -20
  166. package/dist/features/models/models-provider-refresh.route.d.ts +0 -17
  167. package/dist/features/models/models-provider-refresh.route.js +0 -20
  168. package/dist/features/models/models.manager.d.ts +0 -58
  169. package/dist/features/models/models.manager.js +0 -138
  170. package/dist/features/models/models.routes.d.ts +0 -18
  171. package/dist/features/models/models.routes.js +0 -83
  172. package/dist/features/models/open-router-models.d.ts +0 -38
  173. package/dist/features/models/open-router-models.js +0 -73
  174. package/dist/features/models/openai-models.d.ts +0 -63
  175. package/dist/features/models/openai-models.js +0 -150
  176. package/dist/features/onboarding/onboarding-get-git-check.route.d.ts +0 -11
  177. package/dist/features/onboarding/onboarding-get-git-check.route.js +0 -28
  178. package/dist/features/onboarding/onboarding-get-status.route.d.ts +0 -12
  179. package/dist/features/onboarding/onboarding-get-status.route.js +0 -15
  180. package/dist/features/onboarding/onboarding-post-complete.route.d.ts +0 -12
  181. package/dist/features/onboarding/onboarding-post-complete.route.js +0 -15
  182. package/dist/features/onboarding/onboarding-post-reset.route.d.ts +0 -12
  183. package/dist/features/onboarding/onboarding-post-reset.route.js +0 -15
  184. package/dist/features/onboarding/onboarding.routes.d.ts +0 -18
  185. package/dist/features/onboarding/onboarding.routes.js +0 -28
  186. package/dist/features/project-todos/project-todos.database.d.ts +0 -38
  187. package/dist/features/project-todos/project-todos.database.js +0 -91
  188. package/dist/features/project-todos/project-todos.routes.d.ts +0 -4
  189. package/dist/features/project-todos/project-todos.routes.js +0 -94
  190. package/dist/features/projects/projects-ai-files.route.d.ts +0 -148
  191. package/dist/features/projects/projects-ai-files.route.js +0 -425
  192. package/dist/features/projects/projects-commands.route.d.ts +0 -27
  193. package/dist/features/projects/projects-commands.route.js +0 -39
  194. package/dist/features/projects/projects-create.route.d.ts +0 -19
  195. package/dist/features/projects/projects-create.route.js +0 -37
  196. package/dist/features/projects/projects-delete.route.d.ts +0 -24
  197. package/dist/features/projects/projects-delete.route.js +0 -34
  198. package/dist/features/projects/projects-get.route.d.ts +0 -47
  199. package/dist/features/projects/projects-get.route.js +0 -36
  200. package/dist/features/projects/projects-list.route.d.ts +0 -58
  201. package/dist/features/projects/projects-list.route.js +0 -59
  202. package/dist/features/projects/projects-open-folder.route.d.ts +0 -10
  203. package/dist/features/projects/projects-open-folder.route.js +0 -11
  204. package/dist/features/projects/projects-open.route.d.ts +0 -26
  205. package/dist/features/projects/projects-open.route.js +0 -49
  206. package/dist/features/projects/projects-package-scripts.route.d.ts +0 -15
  207. package/dist/features/projects/projects-package-scripts.route.js +0 -96
  208. package/dist/features/projects/projects-run-command.route.d.ts +0 -8
  209. package/dist/features/projects/projects-run-command.route.js +0 -21
  210. package/dist/features/projects/projects-run.route.d.ts +0 -51
  211. package/dist/features/projects/projects-run.route.js +0 -74
  212. package/dist/features/projects/projects-update.route.d.ts +0 -24
  213. package/dist/features/projects/projects-update.route.js +0 -81
  214. package/dist/features/projects/projects.creator.d.ts +0 -33
  215. package/dist/features/projects/projects.creator.js +0 -555
  216. package/dist/features/projects/projects.database.d.ts +0 -61
  217. package/dist/features/projects/projects.database.js +0 -212
  218. package/dist/features/projects/projects.manager.d.ts +0 -291
  219. package/dist/features/projects/projects.manager.js +0 -426
  220. package/dist/features/projects/projects.open-with.d.ts +0 -27
  221. package/dist/features/projects/projects.open-with.js +0 -156
  222. package/dist/features/projects/projects.routes.d.ts +0 -20
  223. package/dist/features/projects/projects.routes.js +0 -255
  224. package/dist/features/projects/terminal-session-manager.d.ts +0 -55
  225. package/dist/features/projects/terminal-session-manager.js +0 -90
  226. package/dist/features/providers/provider-resolver.d.ts +0 -13
  227. package/dist/features/providers/provider-resolver.js +0 -22
  228. package/dist/features/providers/providers-get-credits.route.d.ts +0 -15
  229. package/dist/features/providers/providers-get-credits.route.js +0 -51
  230. package/dist/features/providers/providers-get.route.d.ts +0 -16
  231. package/dist/features/providers/providers-get.route.js +0 -32
  232. package/dist/features/providers/providers-open-external.route.d.ts +0 -15
  233. package/dist/features/providers/providers-open-external.route.js +0 -49
  234. package/dist/features/providers/providers-post-bulk-keys.route.d.ts +0 -14
  235. package/dist/features/providers/providers-post-bulk-keys.route.js +0 -31
  236. package/dist/features/providers/providers-post-keys.route.d.ts +0 -14
  237. package/dist/features/providers/providers-post-keys.route.js +0 -25
  238. package/dist/features/providers/providers.routes.d.ts +0 -19
  239. package/dist/features/providers/providers.routes.js +0 -31
  240. package/dist/features/rules/rules-post.route.d.ts +0 -43
  241. package/dist/features/rules/rules-post.route.js +0 -89
  242. package/dist/features/rules/rules.manager.d.ts +0 -36
  243. package/dist/features/rules/rules.manager.js +0 -203
  244. package/dist/features/rules/rules.routes.d.ts +0 -12
  245. package/dist/features/rules/rules.routes.js +0 -13
  246. package/dist/features/run/run-get-running.route.d.ts +0 -15
  247. package/dist/features/run/run-get-running.route.js +0 -21
  248. package/dist/features/run/run-post-start.route.d.ts +0 -8
  249. package/dist/features/run/run-post-start.route.js +0 -21
  250. package/dist/features/run/run-post-stop.route.d.ts +0 -15
  251. package/dist/features/run/run-post-stop.route.js +0 -24
  252. package/dist/features/run/run-post-suggest.route.d.ts +0 -15
  253. package/dist/features/run/run-post-suggest.route.js +0 -21
  254. package/dist/features/run/run-put-command.route.d.ts +0 -15
  255. package/dist/features/run/run-put-command.route.js +0 -24
  256. package/dist/features/run/run.routes.d.ts +0 -19
  257. package/dist/features/run/run.routes.js +0 -31
  258. package/dist/features/scaffold/index.d.ts +0 -7
  259. package/dist/features/scaffold/index.js +0 -5
  260. package/dist/features/scaffold/scaffold-get-templates.route.d.ts +0 -27
  261. package/dist/features/scaffold/scaffold-get-templates.route.js +0 -17
  262. package/dist/features/scaffold/scaffold-post.route.d.ts +0 -8
  263. package/dist/features/scaffold/scaffold-post.route.js +0 -30
  264. package/dist/features/scaffold/scaffold.routes.d.ts +0 -10
  265. package/dist/features/scaffold/scaffold.routes.js +0 -16
  266. package/dist/features/scaffold/scaffold.runner.d.ts +0 -48
  267. package/dist/features/scaffold/scaffold.runner.js +0 -475
  268. package/dist/features/scaffold/scaffold.types.d.ts +0 -26
  269. package/dist/features/scaffold/scaffold.types.js +0 -5
  270. package/dist/features/skills/skills.activation.d.ts +0 -31
  271. package/dist/features/skills/skills.activation.js +0 -155
  272. package/dist/features/skills/skills.manager.d.ts +0 -35
  273. package/dist/features/skills/skills.manager.js +0 -251
  274. package/dist/features/slash-commands/slash-commands-delete.route.d.ts +0 -23
  275. package/dist/features/slash-commands/slash-commands-delete.route.js +0 -36
  276. package/dist/features/slash-commands/slash-commands-get.route.d.ts +0 -53
  277. package/dist/features/slash-commands/slash-commands-get.route.js +0 -54
  278. package/dist/features/slash-commands/slash-commands-post.route.d.ts +0 -39
  279. package/dist/features/slash-commands/slash-commands-post.route.js +0 -70
  280. package/dist/features/slash-commands/slash-commands-put.route.d.ts +0 -23
  281. package/dist/features/slash-commands/slash-commands-put.route.js +0 -36
  282. package/dist/features/slash-commands/slash-commands.manager.d.ts +0 -46
  283. package/dist/features/slash-commands/slash-commands.manager.js +0 -265
  284. package/dist/features/slash-commands/slash-commands.routes.d.ts +0 -13
  285. package/dist/features/slash-commands/slash-commands.routes.js +0 -20
  286. package/dist/features/threads/threads-ai-files.route.d.ts +0 -153
  287. package/dist/features/threads/threads-ai-files.route.js +0 -287
  288. package/dist/features/threads/threads-conversation-folder-path.route.d.ts +0 -14
  289. package/dist/features/threads/threads-conversation-folder-path.route.js +0 -23
  290. package/dist/features/threads/threads-create.route.d.ts +0 -22
  291. package/dist/features/threads/threads-create.route.js +0 -60
  292. package/dist/features/threads/threads-delete.route.d.ts +0 -25
  293. package/dist/features/threads/threads-delete.route.js +0 -35
  294. package/dist/features/threads/threads-files.route.d.ts +0 -15
  295. package/dist/features/threads/threads-files.route.js +0 -20
  296. package/dist/features/threads/threads-fix-comments.route.d.ts +0 -26
  297. package/dist/features/threads/threads-fix-comments.route.js +0 -45
  298. package/dist/features/threads/threads-get.route.d.ts +0 -30
  299. package/dist/features/threads/threads-get.route.js +0 -38
  300. package/dist/features/threads/threads-list.route.d.ts +0 -56
  301. package/dist/features/threads/threads-list.route.js +0 -58
  302. package/dist/features/threads/threads-messages.route.d.ts +0 -28
  303. package/dist/features/threads/threads-messages.route.js +0 -110
  304. package/dist/features/threads/threads-open.route.d.ts +0 -26
  305. package/dist/features/threads/threads-open.route.js +0 -62
  306. package/dist/features/threads/threads-select.route.d.ts +0 -25
  307. package/dist/features/threads/threads-select.route.js +0 -35
  308. package/dist/features/threads/threads-update.route.d.ts +0 -15
  309. package/dist/features/threads/threads-update.route.js +0 -30
  310. package/dist/features/threads/threads.database.d.ts +0 -68
  311. package/dist/features/threads/threads.database.js +0 -215
  312. package/dist/features/threads/threads.manager.d.ts +0 -204
  313. package/dist/features/threads/threads.manager.js +0 -505
  314. package/dist/features/threads/threads.routes.d.ts +0 -20
  315. package/dist/features/threads/threads.routes.js +0 -230
  316. package/dist/features/todos/todos.database.d.ts +0 -14
  317. package/dist/features/todos/todos.database.js +0 -31
  318. package/dist/features/updates/updates.routes.d.ts +0 -13
  319. package/dist/features/updates/updates.routes.js +0 -40
  320. package/dist/index.d.ts +0 -3
  321. package/dist/project-analyzer.d.ts +0 -26
  322. package/dist/project-analyzer.js +0 -307
  323. package/dist/server.d.ts +0 -12
  324. package/dist/server.js +0 -142
  325. package/dist/tools/agent-tool.d.ts +0 -49
  326. package/dist/tools/agent-tool.js +0 -131
  327. package/dist/tools/ask-user.d.ts +0 -25
  328. package/dist/tools/ask-user.js +0 -74
  329. package/dist/tools/ast-grep.d.ts +0 -28
  330. package/dist/tools/ast-grep.js +0 -273
  331. package/dist/tools/bash.d.ts +0 -33
  332. package/dist/tools/bash.js +0 -186
  333. package/dist/tools/edit-diff.d.ts +0 -24
  334. package/dist/tools/edit-diff.js +0 -136
  335. package/dist/tools/edit.d.ts +0 -28
  336. package/dist/tools/edit.js +0 -78
  337. package/dist/tools/find.d.ts +0 -31
  338. package/dist/tools/find.js +0 -117
  339. package/dist/tools/grep.d.ts +0 -37
  340. package/dist/tools/grep.js +0 -231
  341. package/dist/tools/index.d.ts +0 -93
  342. package/dist/tools/index.js +0 -110
  343. package/dist/tools/ls.d.ts +0 -31
  344. package/dist/tools/ls.js +0 -108
  345. package/dist/tools/mcp-tools.d.ts +0 -31
  346. package/dist/tools/mcp-tools.js +0 -59
  347. package/dist/tools/path-utils.d.ts +0 -14
  348. package/dist/tools/path-utils.js +0 -87
  349. package/dist/tools/read.d.ts +0 -27
  350. package/dist/tools/read.js +0 -86
  351. package/dist/tools/resolve-bin.d.ts +0 -5
  352. package/dist/tools/resolve-bin.js +0 -28
  353. package/dist/tools/shell.d.ts +0 -7
  354. package/dist/tools/shell.js +0 -143
  355. package/dist/tools/skill-reference-tool.d.ts +0 -30
  356. package/dist/tools/skill-reference-tool.js +0 -171
  357. package/dist/tools/skill-tool.d.ts +0 -33
  358. package/dist/tools/skill-tool.js +0 -213
  359. package/dist/tools/todo.d.ts +0 -20
  360. package/dist/tools/todo.js +0 -168
  361. package/dist/tools/tool-helpers.d.ts +0 -78
  362. package/dist/tools/tool-helpers.js +0 -109
  363. package/dist/tools/truncate.d.ts +0 -31
  364. package/dist/tools/truncate.js +0 -164
  365. package/dist/tools/write.d.ts +0 -21
  366. package/dist/tools/write.js +0 -65
@@ -1,505 +0,0 @@
1
- /**
2
- * ThreadManager handles thread lifecycle and metadata management
3
- *
4
- * This manager is responsible for:
5
- * - Creating new threads for existing projects
6
- * - Managing thread metadata
7
- * - Coordinating with GitManager for repository cloning
8
- * - Providing CRUD operations for threads
9
- * - Ensuring thread path uniqueness
10
- */
11
- import { randomUUID } from "crypto";
12
- import { join } from "path";
13
- import { execSync } from "child_process";
14
- import { spawnProcess } from "../../core/utils.js";
15
- import { rm, stat, mkdir } from "fs/promises";
16
- import { generateRandomThreadName } from '../../core/random-words.js';
17
- import { getDatabase } from '../../database/database.js';
18
- import { deleteThread as deleteThreadFromDb } from './threads.database.js';
19
- /**
20
- * ThreadManagerImpl provides the implementation for thread operations
21
- */
22
- export class ThreadManagerImpl {
23
- metadataManager;
24
- gitManager;
25
- processingStateManager;
26
- rootFolder;
27
- /**
28
- * Create a new ThreadManager
29
- * @param metadataManager - Manager for persisting metadata
30
- * @param gitManager - Manager for git operations
31
- * @param processingStateManager - Optional manager for processing state (for spinner during clone)
32
- * @param rootFolder - Base directory where threads will be stored
33
- *
34
- * Requirements:
35
- * - 2.1 - WHEN a user creates a new Thread for a Project, THE CLI SHALL create a new clone of the Project's git repository
36
- * - 2.4 - THE System SHALL maintain a title for each Thread
37
- */
38
- constructor(metadataManager, gitManager, processingStateManager, rootFolder = "") {
39
- this.metadataManager = metadataManager;
40
- this.gitManager = gitManager;
41
- this.processingStateManager = processingStateManager;
42
- this.rootFolder = rootFolder;
43
- }
44
- /**
45
- * Creates a new thread for an existing project
46
- *
47
- * This method:
48
- * 1. Validates that the project exists
49
- * 2. Generates a unique thread ID
50
- * 3. Gets the project's git URL
51
- * 4. Generates a unique thread path
52
- * 5. Delegates to GitManager for cloning
53
- * 6. Saves thread metadata
54
- * 7. Updates the project's thread list
55
- * 8. Yields progress events during the operation
56
- *
57
- * @param projectId - The parent project ID
58
- * @param title - Optional thread title (auto-generated if not provided)
59
- * @yields ThreadEvent objects during the creation process
60
- *
61
- * Requirements:
62
- * - 2.1 - WHEN a user creates a new Thread for a Project, THE CLI SHALL create a new clone of the Project's git repository
63
- * - 2.2 - WHEN a Thread is created, THE App SHALL display it under its parent Project in the Side_Panel
64
- * - 2.4 - THE System SHALL maintain a title for each Thread
65
- * - 7.4 - THE CLI SHALL ensure each Thread clone is stored in a unique directory path
66
- */
67
- async *createThread(projectId, title) {
68
- let threadId;
69
- try {
70
- // Load project to verify it exists and get git URL
71
- const projects = await this.metadataManager.loadProjects();
72
- const project = projects.find((p) => p.id === projectId);
73
- if (!project) {
74
- yield {
75
- type: "error",
76
- message: `Project not found: ${projectId}`,
77
- };
78
- return;
79
- }
80
- // Create project directory if it doesn't exist
81
- try {
82
- await stat(project.path);
83
- }
84
- catch {
85
- // Create the project directory if it doesn't exist
86
- await mkdir(project.path, { recursive: true });
87
- }
88
- // Generate unique thread ID
89
- threadId = randomUUID();
90
- // Generate thread path: {rootFolder}/{threadId}
91
- const threadPath = this.generateThreadPath(projectId, threadId);
92
- // Generate thread title if not provided
93
- const existingThreads = await this.metadataManager.loadThreads();
94
- const existingTitles = new Set(existingThreads.filter((t) => t.projectId === projectId).map((t) => t.title));
95
- const threadTitle = title ?? this.generateThreadTitle(existingTitles);
96
- this.processingStateManager?.setProcessing(threadId);
97
- yield {
98
- type: "progress",
99
- message: `Creating thread "${threadTitle}" for project "${project.name}"...`,
100
- threadId,
101
- };
102
- yield {
103
- type: "progress",
104
- message: `Cloning repository to ${threadPath}...`,
105
- };
106
- // Handle git clone or directory copy based on project type
107
- if (this.gitManager.validateGitUrl(project.gitUrl)) {
108
- // Project has valid git URL - clone from git
109
- yield {
110
- type: "progress",
111
- message: `Cloning repository to ${threadPath}...`,
112
- };
113
- for await (const gitEvent of this.gitManager.cloneRepository(project.gitUrl, threadPath)) {
114
- if (gitEvent.type === "error") {
115
- this.processingStateManager?.clearProcessing(threadId);
116
- yield {
117
- type: "error",
118
- message: `Git clone failed: ${gitEvent.message}`,
119
- };
120
- return;
121
- }
122
- else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
123
- yield {
124
- type: "progress",
125
- message: gitEvent.data,
126
- };
127
- }
128
- }
129
- }
130
- else {
131
- // Project has no valid git URL (scaffolded project) - copy directory
132
- yield {
133
- type: "progress",
134
- message: `Copying project files to ${threadPath}...`,
135
- };
136
- try {
137
- // Check if source directory exists
138
- // Create source directory if it doesn't exist
139
- try {
140
- await stat(project.path);
141
- }
142
- catch {
143
- // Create source directory if it doesn't exist
144
- await mkdir(project.path, { recursive: true });
145
- }
146
- // Use cp command for recursive copy (works on Unix-like systems and Windows with modern Node.js)
147
- if (process.platform === "win32") {
148
- execSync(`xcopy "${project.path}" "${threadPath}" /E /I /H /Y`, { stdio: "pipe" });
149
- }
150
- else {
151
- execSync(`cp -r "${project.path}" "${threadPath}"`, { stdio: "pipe" });
152
- }
153
- yield {
154
- type: "progress",
155
- message: `Project files copied successfully`,
156
- };
157
- }
158
- catch (error) {
159
- this.processingStateManager?.clearProcessing(threadId);
160
- yield {
161
- type: "error",
162
- message: `Failed to copy project files: ${error instanceof Error ? error.message : String(error)}`,
163
- };
164
- return;
165
- }
166
- }
167
- // Sanitize the thread title to create a valid branch name
168
- let branchName = this.gitManager.sanitizeBranchName(threadTitle);
169
- yield {
170
- type: "progress",
171
- message: `Creating branch "${branchName}"...`,
172
- };
173
- // Check if branch exists and find a unique name if needed
174
- let branchExists = await this.gitManager.checkBranchExists(threadPath, branchName);
175
- let counter = 2;
176
- const baseBranchName = branchName;
177
- while (branchExists) {
178
- branchName = `${baseBranchName}-${counter}`;
179
- branchExists = await this.gitManager.checkBranchExists(threadPath, branchName);
180
- counter++;
181
- }
182
- if (branchName !== baseBranchName) {
183
- yield {
184
- type: "progress",
185
- message: `Branch "${baseBranchName}" exists, using "${branchName}" instead`,
186
- };
187
- }
188
- // Create and checkout the new branch
189
- for await (const gitEvent of this.gitManager.createAndCheckoutBranch(threadPath, branchName)) {
190
- if (gitEvent.type === "error") {
191
- this.processingStateManager?.clearProcessing(threadId);
192
- yield {
193
- type: "error",
194
- message: `Failed to create branch: ${gitEvent.message}`,
195
- };
196
- return;
197
- }
198
- else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
199
- yield {
200
- type: "progress",
201
- message: gitEvent.data,
202
- };
203
- }
204
- }
205
- yield {
206
- type: "progress",
207
- message: `Branch "${branchName}" created and checked out`,
208
- };
209
- // Run setup script if project has one configured
210
- if (project.setupScript) {
211
- yield {
212
- type: "progress",
213
- message: `Running setup script: ${project.setupScript}`,
214
- };
215
- for await (const event of this.runSetupScript(threadPath, project.setupScript)) {
216
- yield event;
217
- }
218
- }
219
- // Create thread metadata
220
- const thread = {
221
- id: threadId,
222
- projectId,
223
- title: threadTitle,
224
- path: threadPath,
225
- currentBranch: branchName,
226
- createdAt: new Date(),
227
- };
228
- // Save thread metadata
229
- const threads = await this.metadataManager.loadThreads();
230
- threads.push(thread);
231
- await this.metadataManager.saveThreads(threads);
232
- // Update project's thread list
233
- project.threads.push(threadId);
234
- const updatedProjects = projects.map((p) => (p.id === projectId ? project : p));
235
- await this.metadataManager.saveProjects(updatedProjects);
236
- yield {
237
- type: "progress",
238
- message: `Thread "${threadTitle}" created successfully`,
239
- };
240
- // Yield complete event with thread data
241
- this.processingStateManager?.clearProcessing(threadId);
242
- yield {
243
- type: "complete",
244
- message: "Thread creation complete",
245
- thread,
246
- };
247
- }
248
- catch (error) {
249
- if (typeof threadId !== "undefined") {
250
- this.processingStateManager?.clearProcessing(threadId);
251
- }
252
- yield {
253
- type: "error",
254
- message: `Failed to create thread: ${error instanceof Error ? error.message : String(error)}`,
255
- };
256
- }
257
- }
258
- /**
259
- * Gets a thread by ID
260
- * @param threadId - The thread ID
261
- * @returns The thread or null if not found
262
- */
263
- async getThread(threadId) {
264
- const threads = await this.metadataManager.loadThreads();
265
- return threads.find((t) => t.id === threadId) ?? null;
266
- }
267
- /**
268
- * Lists all threads for a specific project
269
- * @param projectId - The project ID to filter threads
270
- * @returns Array of threads for the project
271
- *
272
- * Requirements:
273
- * - 2.1 - WHEN a Thread is created, THE App SHALL display it under its parent Project in the Side_Panel
274
- */
275
- async listThreads(projectId) {
276
- const threads = await this.metadataManager.loadThreads();
277
- return threads.filter((t) => t.projectId === projectId);
278
- }
279
- /**
280
- * Deletes a thread and removes its directory
281
- *
282
- * This method:
283
- * 1. Finds the thread by ID
284
- * 2. Removes the thread directory from filesystem
285
- * 3. Removes the thread from metadata
286
- * 4. Updates the parent project's thread list
287
- * 5. Marks the thread as deleted in the database
288
- *
289
- * @param threadId - The thread ID to delete
290
- * @throws Error if thread not found
291
- *
292
- * Requirements:
293
- * - 2.3 - WHEN a user deletes a Thread, THE System SHALL remove the Thread's folder and update the Side_Panel display
294
- * - 7.5 - WHEN a Thread is deleted, THE CLI SHALL remove the associated git repository clone from the filesystem
295
- */
296
- async deleteThread(threadId) {
297
- const threads = await this.metadataManager.loadThreads();
298
- const threadIndex = threads.findIndex((t) => t.id === threadId);
299
- if (threadIndex === -1) {
300
- throw new Error(`Thread not found: ${threadId}`);
301
- }
302
- const thread = threads[threadIndex];
303
- // Remove thread directory from filesystem
304
- try {
305
- await rm(thread.path, { recursive: true, force: true });
306
- }
307
- catch (error) {
308
- throw new Error(`Failed to remove thread directory: ${error instanceof Error ? error.message : String(error)}`);
309
- }
310
- // Remove thread from metadata
311
- threads.splice(threadIndex, 1);
312
- await this.metadataManager.saveThreads(threads);
313
- // Update parent project's thread list
314
- const projects = await this.metadataManager.loadProjects();
315
- const project = projects.find((p) => p.id === thread.projectId);
316
- if (project) {
317
- project.threads = project.threads.filter((id) => id !== threadId);
318
- await this.metadataManager.saveProjects(projects);
319
- }
320
- // Mark thread as deleted in database
321
- try {
322
- const db = await getDatabase();
323
- await deleteThreadFromDb(db, threadId);
324
- }
325
- catch (error) {
326
- // Log error but don't fail the operation since the thread is already deleted from filesystem and metadata
327
- console.error(`Failed to mark thread as deleted in database: ${error instanceof Error ? error.message : String(error)}`);
328
- }
329
- }
330
- /**
331
- * Updates a thread's metadata with partial data
332
- *
333
- * This method loads all threads, finds the target, merges the updates,
334
- * and persists the result.
335
- *
336
- * @param threadId - The thread ID to update
337
- * @param updates - Partial thread data to merge
338
- * @throws Error if thread not found or model format is invalid
339
- */
340
- async updateThread(threadId, updates) {
341
- const threads = await this.metadataManager.loadThreads();
342
- const threadIndex = threads.findIndex((t) => t.id === threadId);
343
- if (threadIndex === -1) {
344
- throw new Error(`Thread not found: ${threadId}`);
345
- }
346
- // Validate model format if present
347
- if (updates.model && !updates.modelProvider) {
348
- throw new Error(`Invalid model: "${updates.model} provider:${updates.modelProvider}". Model must be in format "{provider}/{model}" (e.g., "openrouter/anthropic/claude-3-5-sonnet-20241022")`);
349
- }
350
- threads[threadIndex] = { ...threads[threadIndex], ...updates };
351
- await this.metadataManager.saveThreads(threads);
352
- }
353
- /**
354
- * Selects a thread as the active thread
355
- *
356
- * @param threadId - The thread ID to select
357
- */
358
- async selectThread(threadId) {
359
- await this.metadataManager.setSelectedThread(threadId);
360
- }
361
- /**
362
- * Gets the currently selected thread ID
363
- *
364
- * @returns The selected thread ID or null
365
- */
366
- async getSelectedThreadId() {
367
- return await this.metadataManager.getSelectedThread();
368
- }
369
- /**
370
- * Runs a setup script in the given path and yields progress events
371
- * @param threadPath - Path to run the command in
372
- * @param commandLine - The command to execute
373
- * @yields ThreadEvent progress events
374
- */
375
- async *runSetupScript(threadPath, commandLine) {
376
- const child = spawnProcess(commandLine, [], {
377
- shell: true,
378
- cwd: threadPath,
379
- });
380
- const decoder = new TextDecoder();
381
- let resolveNext = () => { };
382
- const outputQueue = [];
383
- const errorQueue = [];
384
- child.stdout?.on("data", (data) => {
385
- outputQueue.push(decoder.decode(data));
386
- resolveNext();
387
- });
388
- child.stderr?.on("data", (data) => {
389
- errorQueue.push(decoder.decode(data));
390
- resolveNext();
391
- });
392
- let isDone = false;
393
- child.on("close", (code) => {
394
- if (code !== 0) {
395
- errorQueue.push(`Process exited with code ${code}`);
396
- }
397
- isDone = true;
398
- resolveNext();
399
- });
400
- child.on("error", (err) => {
401
- errorQueue.push(err.message);
402
- isDone = true;
403
- resolveNext();
404
- });
405
- const waitForData = () => new Promise((resolve) => {
406
- resolveNext = resolve;
407
- });
408
- while (!isDone || outputQueue.length > 0 || errorQueue.length > 0) {
409
- if (outputQueue.length > 0) {
410
- const text = outputQueue.shift();
411
- for (const line of text.split("\n").filter((l) => l.trim())) {
412
- yield { type: "progress", message: line };
413
- }
414
- }
415
- else if (errorQueue.length > 0) {
416
- const text = errorQueue.shift();
417
- for (const line of text.split("\n").filter((l) => l.trim())) {
418
- yield { type: "progress", message: line };
419
- }
420
- }
421
- else {
422
- await waitForData();
423
- }
424
- }
425
- }
426
- /**
427
- * Generates a unique thread path
428
- *
429
- * Path format: {dataDir}/{threadId}
430
- *
431
- * This ensures thread paths are unique across all projects and threads.
432
- *
433
- * @param projectPath - The parent project path
434
- * @param threadId - The thread ID
435
- * @returns The absolute path to the thread folder
436
- *
437
- * Requirements:
438
- * - 7.4 - THE CLI SHALL ensure each Thread clone is stored in a unique directory path
439
- */
440
- generateThreadPath(_projectId, threadId) {
441
- return join(this.rootFolder, threadId);
442
- }
443
- /**
444
- * Generates a thread title if not provided
445
- *
446
- * Format: {word1}-{word2} where words are random from a curated list
447
- *
448
- * @param existingTitles - Set of titles already in use for this project
449
- * @returns The generated thread title (e.g. bouncy-panda, sparkly-taco)
450
- */
451
- generateThreadTitle(existingTitles) {
452
- // Generate a random name, ensuring it doesn't already exist
453
- let threadTitle = generateRandomThreadName();
454
- let attempts = 0;
455
- const maxAttempts = 100;
456
- while (existingTitles.has(threadTitle) && attempts < maxAttempts) {
457
- threadTitle = generateRandomThreadName();
458
- attempts++;
459
- }
460
- return threadTitle;
461
- }
462
- /**
463
- * Lists all files in a thread's directory (tracked and untracked, but not ignored)
464
- * @param threadId - The thread ID
465
- * @returns Array of file paths relative to the thread root
466
- */
467
- async listFiles(threadId) {
468
- const thread = await this.getThread(threadId);
469
- if (!thread) {
470
- throw new Error(`Thread not found: ${threadId}`);
471
- }
472
- return new Promise((resolve, reject) => {
473
- // --cached: tracked files
474
- // --others: untracked files
475
- // --exclude-standard: respect .gitignore
476
- const gitProcess = spawnProcess("git", ["ls-files", "--cached", "--others", "--exclude-standard"], {
477
- cwd: thread.path,
478
- });
479
- let output = "";
480
- let errorOutput = "";
481
- gitProcess.stdout?.on("data", (data) => {
482
- output += data.toString();
483
- });
484
- gitProcess.stderr?.on("data", (data) => {
485
- errorOutput += data.toString();
486
- });
487
- gitProcess.on("close", (code) => {
488
- if (code === 0) {
489
- const files = output
490
- .split("\n")
491
- .map((line) => line.trim())
492
- .filter((line) => line.length > 0);
493
- resolve(files);
494
- }
495
- else {
496
- reject(new Error(`git ls-files failed with code ${code}: ${errorOutput}`));
497
- }
498
- });
499
- gitProcess.on("error", (err) => {
500
- reject(new Error(`Failed to start git process: ${err.message}`));
501
- });
502
- });
503
- }
504
- }
505
- //# sourceMappingURL=threads.manager.js.map
@@ -1,20 +0,0 @@
1
- /**
2
- * Thread routes for the REST API
3
- *
4
- * Handles all thread-related operations:
5
- * - POST /api/threads - Create a new thread
6
- * - GET /api/threads?projectId=xxx - List threads for a project
7
- * - DELETE /api/threads/:id - Delete a thread
8
- */
9
- import { Hono } from "hono";
10
- import type { ThreadManager } from "./threads.manager.js";
11
- import type { ConversationManager } from "../conversations/conversations.manager.js";
12
- import type { GitManager } from "../git/git.manager.js";
13
- /**
14
- * Creates thread routes
15
- * @param threadManager - The ThreadManager instance
16
- * @param gitManager - The GitManager instance
17
- * @returns Hono router with thread routes
18
- */
19
- export declare function createThreadRoutes(threadManager: ThreadManager, gitManager: GitManager, conversationManager: ConversationManager): Hono;
20
- //# sourceMappingURL=threads.routes.d.ts.map