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,555 +0,0 @@
1
- /**
2
- * Project creation: create projects from a git URL or from a scaffold template.
3
- * Contains creation flow logic and helpers (naming, paths, setup script detection).
4
- */
5
- import { randomUUID } from "crypto";
6
- import { basename, join, relative } from "path";
7
- import { access, stat, readdir } from "fs/promises";
8
- import { spawnSyncProcess } from "../../core/utils.js";
9
- import { CommitMethods } from "@tarsk/shared";
10
- import { getSetupScriptForPackageManager, isValidPackageManager } from "@tarsk/shared";
11
- import { createScaffoldedProjectStreaming } from "../scaffold/scaffold.runner.js";
12
- import { generateRandomThreadName } from "../../core/random-words.js";
13
- let Utils = null;
14
- let utilsLoaded = false;
15
- // Lazy load Utils from electrobun (optional - may not be available in pure server mode)
16
- async function loadUtils() {
17
- if (utilsLoaded)
18
- return;
19
- utilsLoaded = true;
20
- try {
21
- const electrobun = await import("electrobun/bun");
22
- Utils = electrobun.Utils;
23
- }
24
- catch {
25
- // electrobun not available in pure server mode - that's OK
26
- }
27
- }
28
- export class ProjectCreator {
29
- rootFolder;
30
- metadataManager;
31
- gitManager;
32
- processingStateManager;
33
- runCommandCallbacks;
34
- constructor(rootFolder, metadataManager, gitManager, processingStateManager, runCommandCallbacks) {
35
- this.rootFolder = rootFolder;
36
- this.metadataManager = metadataManager;
37
- this.gitManager = gitManager;
38
- this.processingStateManager = processingStateManager;
39
- this.runCommandCallbacks = runCommandCallbacks;
40
- }
41
- async *createProject(gitUrl, commitMethod = CommitMethods.PullRequest) {
42
- if (!this.gitManager.validateGitUrl(gitUrl)) {
43
- yield {
44
- type: "error",
45
- message: `Invalid git URL format: ${gitUrl}`,
46
- };
47
- return;
48
- }
49
- let initialThreadId;
50
- try {
51
- const projectId = randomUUID();
52
- const existingProjects = await this.metadataManager.loadProjects();
53
- const existingNames = existingProjects.map((p) => p.name);
54
- const projectName = this.ensureUniqueProjectName(this.deriveProjectName(gitUrl), existingNames);
55
- initialThreadId = randomUUID();
56
- const initialThreadTitle = generateRandomThreadName();
57
- const firstThreadPath = this.generateThreadPath(projectId, initialThreadId);
58
- this.processingStateManager?.setProcessing(initialThreadId);
59
- yield {
60
- type: "progress",
61
- message: `Creating project "${projectName}" from ${gitUrl}...`,
62
- threadId: initialThreadId,
63
- projectId,
64
- };
65
- for await (const gitEvent of this.gitManager.cloneRepository(gitUrl, firstThreadPath)) {
66
- if (gitEvent.type === "error") {
67
- this.processingStateManager?.clearProcessing(initialThreadId);
68
- yield {
69
- type: "error",
70
- message: `Git clone failed: ${gitEvent.message}`,
71
- };
72
- return;
73
- }
74
- else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
75
- yield {
76
- type: "progress",
77
- message: gitEvent.data,
78
- };
79
- }
80
- }
81
- let branchName = "main";
82
- if (commitMethod === CommitMethods.PullRequest) {
83
- const initialThreadTitle = generateRandomThreadName();
84
- branchName = this.gitManager.sanitizeBranchName(initialThreadTitle);
85
- yield {
86
- type: "progress",
87
- message: `Creating initial branch "${branchName}"...`,
88
- };
89
- let branchExists = await this.gitManager.checkBranchExists(firstThreadPath, branchName);
90
- let counter = 2;
91
- const baseBranchName = branchName;
92
- while (branchExists) {
93
- branchName = `${baseBranchName}-${counter}`;
94
- branchExists = await this.gitManager.checkBranchExists(firstThreadPath, branchName);
95
- counter++;
96
- }
97
- if (branchName !== baseBranchName) {
98
- yield {
99
- type: "progress",
100
- message: `Branch "${baseBranchName}" exists, using "${branchName}" instead`,
101
- };
102
- }
103
- for await (const gitEvent of this.gitManager.createAndCheckoutBranch(firstThreadPath, branchName)) {
104
- if (gitEvent.type === "error") {
105
- this.processingStateManager?.clearProcessing(initialThreadId);
106
- yield {
107
- type: "error",
108
- message: `Failed to create initial branch: ${gitEvent.message}`,
109
- };
110
- return;
111
- }
112
- else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
113
- yield {
114
- type: "progress",
115
- message: gitEvent.data,
116
- };
117
- }
118
- }
119
- yield {
120
- type: "progress",
121
- message: `Branch "${branchName}" created and checked out`,
122
- };
123
- }
124
- else {
125
- yield {
126
- type: "progress",
127
- message: `Direct commit mode enabled - commits will go to the main branch`,
128
- };
129
- }
130
- const suggestedSetupScript = await this.detectSetupScript(firstThreadPath);
131
- // Collect all setup scripts for multiple installations
132
- const allSetupScripts = [];
133
- await this.findAllPackageJsonFiles(firstThreadPath, firstThreadPath, allSetupScripts);
134
- const project = {
135
- id: projectId,
136
- name: projectName,
137
- gitUrl,
138
- path: firstThreadPath,
139
- createdAt: new Date(),
140
- threads: [initialThreadId],
141
- commitMethod,
142
- setupScript: suggestedSetupScript ?? undefined,
143
- pendingSetupScripts: allSetupScripts.length > 1 ? allSetupScripts.slice(1) : undefined,
144
- };
145
- const initialThread = {
146
- id: initialThreadId,
147
- projectId,
148
- title: initialThreadTitle,
149
- path: firstThreadPath,
150
- currentBranch: branchName,
151
- createdAt: new Date(),
152
- };
153
- const projects = await this.metadataManager.loadProjects();
154
- projects.push(project);
155
- await this.metadataManager.saveProjects(projects);
156
- const threads = await this.metadataManager.loadThreads();
157
- threads.push(initialThread);
158
- await this.metadataManager.saveThreads(threads);
159
- try {
160
- const suggestedRun = await this.runCommandCallbacks?.suggestRunCommand(projectId);
161
- if (suggestedRun) {
162
- await this.runCommandCallbacks?.updateRunCommand(projectId, suggestedRun);
163
- project.runCommand = suggestedRun;
164
- }
165
- }
166
- catch {
167
- // Non-fatal
168
- }
169
- yield {
170
- type: "progress",
171
- message: `Project "${projectName}" created successfully with initial thread`,
172
- };
173
- this.processingStateManager?.clearProcessing(initialThreadId);
174
- yield {
175
- type: "complete",
176
- message: "Project creation complete",
177
- project,
178
- suggestedSetupScript: suggestedSetupScript ?? undefined,
179
- };
180
- }
181
- catch (error) {
182
- if (typeof initialThreadId !== "undefined") {
183
- this.processingStateManager?.clearProcessing(initialThreadId);
184
- }
185
- yield {
186
- type: "error",
187
- message: `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,
188
- };
189
- }
190
- }
191
- async *createProjectFromScaffold(projectName, templateId, packageManager) {
192
- if (!isValidPackageManager(packageManager)) {
193
- yield {
194
- type: "error",
195
- message: `Invalid package manager: ${packageManager}`,
196
- };
197
- return;
198
- }
199
- const projectId = randomUUID();
200
- const initialThreadId = randomUUID();
201
- const initialThreadTitle = generateRandomThreadName();
202
- this.processingStateManager?.setProcessing(initialThreadId);
203
- try {
204
- const existingProjects = await this.metadataManager.loadProjects();
205
- const existingNames = existingProjects.map((p) => p.name);
206
- const uniqueProjectName = this.ensureUniqueProjectName(projectName, existingNames);
207
- yield {
208
- type: "progress",
209
- message: `Scaffolding project "${uniqueProjectName}"...`,
210
- threadId: initialThreadId,
211
- projectId,
212
- };
213
- let result = null;
214
- for await (const event of createScaffoldedProjectStreaming({
215
- parentDir: this.rootFolder,
216
- projectName: uniqueProjectName, // Use the actual project name, not thread ID
217
- threadId: initialThreadId,
218
- templateId,
219
- packageManager: packageManager,
220
- })) {
221
- if (event.type === "progress") {
222
- yield {
223
- type: "progress",
224
- message: event.message,
225
- threadId: initialThreadId,
226
- projectId,
227
- };
228
- }
229
- else {
230
- result = event.result;
231
- break;
232
- }
233
- }
234
- if (!result?.success) {
235
- this.processingStateManager?.clearProcessing(initialThreadId);
236
- yield {
237
- type: "error",
238
- message: result?.error ?? "Scaffold failed",
239
- };
240
- return;
241
- }
242
- const firstThreadPath = this.generateThreadPath(projectId, initialThreadId);
243
- yield {
244
- type: "progress",
245
- message: `Scaffolding project in folder: ${firstThreadPath}`,
246
- };
247
- yield {
248
- type: "progress",
249
- message: "Initializing git repository...",
250
- };
251
- await this.gitManager.initRepository(firstThreadPath);
252
- const project = {
253
- id: projectId,
254
- name: uniqueProjectName,
255
- gitUrl: "",
256
- path: firstThreadPath,
257
- createdAt: new Date(),
258
- threads: [initialThreadId],
259
- setupScript: getSetupScriptForPackageManager(packageManager),
260
- };
261
- const initialThread = {
262
- id: initialThreadId,
263
- projectId,
264
- title: initialThreadTitle,
265
- path: firstThreadPath,
266
- currentBranch: "main",
267
- createdAt: new Date(),
268
- };
269
- const projects = await this.metadataManager.loadProjects();
270
- projects.push(project);
271
- await this.metadataManager.saveProjects(projects);
272
- const threads = await this.metadataManager.loadThreads();
273
- threads.push(initialThread);
274
- await this.metadataManager.saveThreads(threads);
275
- try {
276
- const suggestedRun = await this.runCommandCallbacks?.suggestRunCommand(projectId);
277
- if (suggestedRun) {
278
- await this.runCommandCallbacks?.updateRunCommand(projectId, suggestedRun);
279
- project.runCommand = suggestedRun;
280
- }
281
- }
282
- catch {
283
- // Non-fatal
284
- }
285
- this.processingStateManager?.clearProcessing(initialThreadId);
286
- yield {
287
- type: "progress",
288
- message: `Project "${uniqueProjectName}" created successfully with initial thread`,
289
- };
290
- yield {
291
- type: "complete",
292
- message: "Project creation complete",
293
- project,
294
- };
295
- }
296
- catch (error) {
297
- this.processingStateManager?.clearProcessing(initialThreadId);
298
- yield {
299
- type: "error",
300
- message: `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,
301
- };
302
- }
303
- }
304
- ensureUniqueProjectName(proposedName, existingNames) {
305
- const normalized = (s) => s.trim().toLowerCase();
306
- const taken = new Set(existingNames.map(normalized));
307
- const name = proposedName.trim();
308
- if (!taken.has(normalized(name)))
309
- return name;
310
- let counter = 2;
311
- let candidate;
312
- do {
313
- candidate = `${name} ${counter}`;
314
- counter++;
315
- } while (taken.has(normalized(candidate)));
316
- return candidate;
317
- }
318
- deriveProjectName(gitUrl) {
319
- let name = gitUrl.replace(/\.git$/, "");
320
- const parts = name.split(/[/:]/).filter((p) => p.length > 0);
321
- name = parts[parts.length - 1] || "project";
322
- name = name.replace(/[^a-zA-Z0-9._-]/g, "-");
323
- return name;
324
- }
325
- generateThreadPath(_projectId, threadId) {
326
- return join(this.rootFolder, threadId);
327
- }
328
- async *createProjectFromFolder() {
329
- // Load utils (may fail gracefully if electrobun not available)
330
- await loadUtils();
331
- if (!Utils) {
332
- yield { type: "error", message: "File dialog not available in server mode" };
333
- return;
334
- }
335
- const chosenPaths = await Utils.openFileDialog({
336
- canChooseFiles: false,
337
- canChooseDirectory: true,
338
- allowsMultipleSelection: false,
339
- });
340
- if (!chosenPaths || chosenPaths.length === 0) {
341
- yield { type: "error", message: "No folder selected" };
342
- return;
343
- }
344
- const folderPath = chosenPaths[0];
345
- // Verify the path is a valid directory
346
- try {
347
- const stats = await stat(folderPath);
348
- if (!stats.isDirectory()) {
349
- yield { type: "error", message: `Selected path is not a directory: ${folderPath}` };
350
- return;
351
- }
352
- }
353
- catch {
354
- yield { type: "error", message: `Cannot access folder: ${folderPath}` };
355
- return;
356
- }
357
- const projectId = randomUUID();
358
- const initialThreadId = randomUUID();
359
- const initialThreadTitle = generateRandomThreadName();
360
- this.processingStateManager?.setProcessing(initialThreadId);
361
- try {
362
- const existingProjects = await this.metadataManager.loadProjects();
363
- const existingNames = existingProjects.map((p) => p.name);
364
- const projectName = this.ensureUniqueProjectName(basename(folderPath) || "project", existingNames);
365
- yield {
366
- type: "progress",
367
- message: `Opening folder "${projectName}"...`,
368
- threadId: initialThreadId,
369
- projectId,
370
- };
371
- // Check if the folder is already a git repo
372
- const isGitRepo = this.isGitRepository(folderPath);
373
- if (!isGitRepo) {
374
- yield { type: "progress", message: "Initializing git repository..." };
375
- await this.gitManager.initRepository(folderPath);
376
- }
377
- else {
378
- yield { type: "progress", message: "Git repository detected" };
379
- }
380
- // Detect current branch
381
- let branchName = "main";
382
- if (isGitRepo) {
383
- try {
384
- const result = spawnSyncProcess("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
385
- cwd: folderPath,
386
- encoding: "utf-8",
387
- });
388
- if (result.status === 0 &&
389
- (typeof result.stdout === "string"
390
- ? result.stdout
391
- : result.stdout?.toString() || "").trim()) {
392
- branchName = (typeof result.stdout === "string" ? result.stdout : result.stdout?.toString() || "").trim();
393
- }
394
- }
395
- catch {
396
- // Use default
397
- }
398
- }
399
- // Detect if there's a remote git URL
400
- let gitUrl = "";
401
- if (isGitRepo) {
402
- try {
403
- const result = spawnSyncProcess("git", ["remote", "get-url", "origin"], {
404
- cwd: folderPath,
405
- encoding: "utf-8",
406
- });
407
- if (result.status === 0 &&
408
- (typeof result.stdout === "string"
409
- ? result.stdout
410
- : result.stdout?.toString() || "").trim()) {
411
- gitUrl = (typeof result.stdout === "string" ? result.stdout : result.stdout?.toString() || "").trim();
412
- }
413
- }
414
- catch {
415
- // No remote
416
- }
417
- }
418
- const suggestedSetupScript = await this.detectSetupScript(folderPath);
419
- // Collect all setup scripts for multiple installations
420
- const allSetupScripts = [];
421
- await this.findAllPackageJsonFiles(folderPath, folderPath, allSetupScripts);
422
- const project = {
423
- id: projectId,
424
- name: projectName,
425
- gitUrl,
426
- path: folderPath,
427
- createdAt: new Date(),
428
- threads: [initialThreadId],
429
- commitMethod: CommitMethods.Direct,
430
- setupScript: suggestedSetupScript ?? undefined,
431
- pendingSetupScripts: allSetupScripts.length > 1 ? allSetupScripts.slice(1) : undefined,
432
- };
433
- const initialThread = {
434
- id: initialThreadId,
435
- projectId,
436
- title: initialThreadTitle,
437
- path: folderPath,
438
- currentBranch: branchName,
439
- createdAt: new Date(),
440
- };
441
- const projects = await this.metadataManager.loadProjects();
442
- projects.push(project);
443
- await this.metadataManager.saveProjects(projects);
444
- const threads = await this.metadataManager.loadThreads();
445
- threads.push(initialThread);
446
- await this.metadataManager.saveThreads(threads);
447
- try {
448
- const suggestedRun = await this.runCommandCallbacks?.suggestRunCommand(projectId);
449
- if (suggestedRun) {
450
- await this.runCommandCallbacks?.updateRunCommand(projectId, suggestedRun);
451
- project.runCommand = suggestedRun;
452
- }
453
- }
454
- catch {
455
- // Non-fatal
456
- }
457
- yield {
458
- type: "progress",
459
- message: `Project "${projectName}" created successfully from folder`,
460
- };
461
- this.processingStateManager?.clearProcessing(initialThreadId);
462
- yield {
463
- type: "complete",
464
- message: "Project creation complete",
465
- project,
466
- suggestedSetupScript: suggestedSetupScript ?? undefined,
467
- };
468
- }
469
- catch (error) {
470
- this.processingStateManager?.clearProcessing(initialThreadId);
471
- yield {
472
- type: "error",
473
- message: `Failed to create project from folder: ${error instanceof Error ? error.message : String(error)}`,
474
- };
475
- }
476
- }
477
- isGitRepository(dirPath) {
478
- const result = spawnSyncProcess("git", ["rev-parse", "--is-inside-work-tree"], {
479
- cwd: dirPath,
480
- encoding: "utf-8",
481
- });
482
- return result.status === 0;
483
- }
484
- async detectSetupScript(chrootPath) {
485
- // Find all package.json files recursively
486
- const allSetupScripts = [];
487
- await this.findAllPackageJsonFiles(chrootPath, chrootPath, allSetupScripts);
488
- // Return null if no package.json files found
489
- if (allSetupScripts.length === 0) {
490
- return null;
491
- }
492
- // Return the first one for immediate use
493
- return allSetupScripts[0];
494
- }
495
- async findAllPackageJsonFiles(rootPath, currentPath, setupScripts) {
496
- try {
497
- // Check if package.json exists in current directory
498
- await access(join(currentPath, "package.json"));
499
- // Determine relative path from root
500
- const relativePath = relative(rootPath, currentPath);
501
- // Detect package manager for this package.json
502
- let installCommand = "";
503
- try {
504
- await access(join(currentPath, "yarn.lock"));
505
- installCommand = "yarn install";
506
- }
507
- catch {
508
- try {
509
- await access(join(currentPath, "bun.lock"));
510
- installCommand = "bun install";
511
- }
512
- catch {
513
- try {
514
- await access(join(currentPath, "pnpm-lock.yaml"));
515
- installCommand = "pnpm install";
516
- }
517
- catch {
518
- installCommand = "npm install";
519
- }
520
- }
521
- }
522
- // Add command with path if not in root
523
- if (relativePath) {
524
- setupScripts.push(`cd "${relativePath}" && ${installCommand}`);
525
- }
526
- else {
527
- setupScripts.push(installCommand);
528
- }
529
- }
530
- catch {
531
- // No package.json in this directory, continue searching subdirectories
532
- }
533
- // Recursively search subdirectories
534
- try {
535
- const entries = await readdir(currentPath);
536
- for (const entry of entries) {
537
- const entryPath = join(currentPath, entry);
538
- try {
539
- const stats = await stat(entryPath);
540
- if (stats.isDirectory() && !entry.startsWith(".") && entry !== "node_modules") {
541
- await this.findAllPackageJsonFiles(rootPath, entryPath, setupScripts);
542
- }
543
- }
544
- catch {
545
- // Skip directories that can't be accessed
546
- continue;
547
- }
548
- }
549
- }
550
- catch {
551
- // Skip directories that can't be read
552
- }
553
- }
554
- }
555
- //# sourceMappingURL=projects.creator.js.map
@@ -1,61 +0,0 @@
1
- /**
2
- * SQLite Database Operations for Projects
3
- *
4
- * This module handles all CRUD operations for projects in the SQLite database.
5
- * Includes transaction support for atomic operations.
6
- */
7
- import { Project } from "@tarsk/shared";
8
- import { Database } from "../../database/database.types";
9
- /**
10
- * Insert a new project into the database
11
- * @param db SQLite database instance
12
- * @param project Project to insert
13
- */
14
- export declare function insertProject(db: Database, project: Project): Promise<void>;
15
- /**
16
- * Update an existing project in the database
17
- * @param db SQLite database instance
18
- * @param id Project ID
19
- * @param updates Partial project object with fields to update
20
- */
21
- export declare function updateProject(db: Database, id: string, updates: Partial<Project>): Promise<void>;
22
- /**
23
- * Delete a project and cascade delete associated threads
24
- * @param db SQLite database instance
25
- * @param id Project ID
26
- */
27
- export declare function deleteProject(db: Database, id: string): Promise<void>;
28
- /**
29
- * Get a single project by ID
30
- * @param db SQLite database instance
31
- * @param id Project ID
32
- * @returns Project object or null if not found
33
- */
34
- export declare function getProject(db: Database, id: string): Promise<Project | null>;
35
- /**
36
- * Get all projects from the database
37
- * @param db SQLite database instance
38
- * @returns Array of all projects
39
- */
40
- export declare function getAllProjects(db: Database): Promise<Project[]>;
41
- /**
42
- * Get threads for a specific project
43
- * @param db SQLite database instance
44
- * @param projectId Project ID
45
- * @returns Array of thread IDs
46
- */
47
- export declare function getProjectThreadIds(db: Database, projectId: string): Promise<string[]>;
48
- /**
49
- * Check if a project exists
50
- * @param db SQLite database instance
51
- * @param id Project ID
52
- * @returns True if project exists
53
- */
54
- export declare function projectExists(db: Database, id: string): Promise<boolean>;
55
- /**
56
- * Get project count
57
- * @param db SQLite database instance
58
- * @returns Number of projects
59
- */
60
- export declare function getProjectCount(db: Database): Promise<number>;
61
- //# sourceMappingURL=projects.database.d.ts.map