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,37 @@
1
+ /**
2
+ * Model info and pricing by provider
3
+ *
4
+ * Fetches model information (name, description, pricing) for the list of
5
+ * supported models. OpenRouter and AIHubMix pricing are loaded from their APIs.
6
+ *
7
+ * OpenRouter API: https://openrouter.ai/docs/api/api-reference/models/get-models
8
+ * AIHubMix API: https://docs.aihubmix.com/api/models
9
+ */
10
+ export interface ModelInfoPricing {
11
+ /** Cost per token in USD (input/prompt) */
12
+ prompt: number;
13
+ /** Cost per token in USD (output/completion) */
14
+ completion: number;
15
+ }
16
+ export interface ModelInfo {
17
+ /** Pricing is omitted when unknown */
18
+ pricing?: ModelInfoPricing;
19
+ name?: string;
20
+ description?: string;
21
+ supportedParameters?: {
22
+ tools?: boolean;
23
+ };
24
+ }
25
+ /**
26
+ * Fetch model info and pricing for a provider.
27
+ * - OpenRouter: calls GET https://openrouter.ai/api/v1/models and maps pricing for supported model IDs (requires apiKey).
28
+ * - AIHubMix: calls GET https://aihubmix.com/api/v1/models and maps pricing for supported model IDs (requires apiKey).
29
+ * - Other providers: returns empty info for each model ID.
30
+ *
31
+ * @param provider - Provider id (e.g. "openrouter", "aihubmix")
32
+ * @param modelIds - List of supported model IDs to return info for
33
+ * @param apiKey - Optional API key; required for OpenRouter and AIHubMix
34
+ * @returns Map of model ID -> ModelInfo (pricing, optional name/description)
35
+ */
36
+ export declare function getModelInfoForProvider(provider: string, modelIds: string[], apiKey?: string): Promise<Map<string, ModelInfo>>;
37
+ //# sourceMappingURL=model-info.d.ts.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Model info and pricing by provider
3
+ *
4
+ * Fetches model information (name, description, pricing) for the list of
5
+ * supported models. OpenRouter and AIHubMix pricing are loaded from their APIs.
6
+ *
7
+ * OpenRouter API: https://openrouter.ai/docs/api/api-reference/models/get-models
8
+ * AIHubMix API: https://docs.aihubmix.com/api/models
9
+ */
10
+ import { getOpenRouterModelInfo } from "./model-info-openrouter.js";
11
+ import { getAIHubMixModelInfo } from "./model-info-aihubmix.js";
12
+ /**
13
+ * Fetch model info and pricing for a provider.
14
+ * - OpenRouter: calls GET https://openrouter.ai/api/v1/models and maps pricing for supported model IDs (requires apiKey).
15
+ * - AIHubMix: calls GET https://aihubmix.com/api/v1/models and maps pricing for supported model IDs (requires apiKey).
16
+ * - Other providers: returns empty info for each model ID.
17
+ *
18
+ * @param provider - Provider id (e.g. "openrouter", "aihubmix")
19
+ * @param modelIds - List of supported model IDs to return info for
20
+ * @param apiKey - Optional API key; required for OpenRouter and AIHubMix
21
+ * @returns Map of model ID -> ModelInfo (pricing, optional name/description)
22
+ */
23
+ export async function getModelInfoForProvider(provider, modelIds, apiKey) {
24
+ const result = new Map();
25
+ const emptyInfo = () => ({});
26
+ const providerLower = provider.toLowerCase();
27
+ if (providerLower === "openrouter" && apiKey && apiKey.trim().length > 0) {
28
+ return getOpenRouterModelInfo(modelIds, apiKey);
29
+ }
30
+ if (providerLower === "aihubmix" && apiKey && apiKey.trim().length > 0) {
31
+ return getAIHubMixModelInfo(modelIds, apiKey);
32
+ }
33
+ // Other providers: pricing unknown (to be filled later)
34
+ for (const id of modelIds) {
35
+ result.set(id, emptyInfo());
36
+ }
37
+ return result;
38
+ }
39
+ //# sourceMappingURL=model-info.js.map
@@ -0,0 +1,49 @@
1
+ export interface CatalogModelCost {
2
+ input: number;
3
+ output: number;
4
+ }
5
+ export interface CatalogModelLimit {
6
+ context: number;
7
+ output: number;
8
+ }
9
+ export interface CatalogModel {
10
+ id: string;
11
+ name: string;
12
+ family: string;
13
+ attachment: boolean;
14
+ reasoning: boolean;
15
+ tool_call: boolean;
16
+ release_date: string;
17
+ last_updated: string;
18
+ modalities: {
19
+ input: string[];
20
+ output: string[];
21
+ };
22
+ open_weights: boolean;
23
+ cost: CatalogModelCost;
24
+ limit: CatalogModelLimit;
25
+ tarsk_use?: string[];
26
+ coding_index?: number;
27
+ }
28
+ export interface CatalogProvider {
29
+ id: string;
30
+ env: string[];
31
+ npm: string;
32
+ api: string;
33
+ name: string;
34
+ doc: string;
35
+ models: Record<string, CatalogModel>;
36
+ }
37
+ export type ModelsCatalog = Record<string, CatalogProvider>;
38
+ /**
39
+ * Get the models catalog using stale-while-revalidate pattern.
40
+ * - If cache is fresh (< 15 min): returns cached data
41
+ * - If cache is stale (>= 15 min): returns cached data, revalidates in background
42
+ * - If no cache: fetches synchronously, caches, returns
43
+ */
44
+ export declare function getModelsCatalog(): Promise<ModelsCatalog | null>;
45
+ /**
46
+ * Get a specific provider from the catalog
47
+ */
48
+ export declare function getCatalogProvider(providerId: string): Promise<CatalogProvider | null>;
49
+ //# sourceMappingURL=models-catalog.d.ts.map
@@ -0,0 +1,80 @@
1
+ import { getDatabase } from "../../database/database.js";
2
+ import { getState, setState } from "../../database/database.state.js";
3
+ const CATALOG_URL = "http://models.tarsk.io/models.json";
4
+ const CACHE_TTL_MS = 15 * 60 * 1000; // 15 minutes
5
+ const STATE_KEY_CATALOG = "modelsCatalog";
6
+ const STATE_KEY_TIMESTAMP = "modelsCatalogTimestamp";
7
+ let isRevalidating = false;
8
+ async function fetchCatalog() {
9
+ const random = Math.random();
10
+ const url = `${CATALOG_URL}?${random}`;
11
+ const response = await fetch(url);
12
+ if (!response.ok) {
13
+ throw new Error(`Failed to fetch models catalog: ${response.status}`);
14
+ }
15
+ return response.json();
16
+ }
17
+ async function getCachedCatalog() {
18
+ const db = await getDatabase();
19
+ const catalog = (await getState(db, STATE_KEY_CATALOG));
20
+ const timestamp = (await getState(db, STATE_KEY_TIMESTAMP)) || 0;
21
+ return { catalog, timestamp };
22
+ }
23
+ async function saveCatalogToCache(catalog) {
24
+ const db = await getDatabase();
25
+ await setState(db, STATE_KEY_CATALOG, catalog);
26
+ await setState(db, STATE_KEY_TIMESTAMP, Date.now());
27
+ }
28
+ async function revalidateInBackground() {
29
+ if (isRevalidating)
30
+ return;
31
+ isRevalidating = true;
32
+ try {
33
+ const catalog = await fetchCatalog();
34
+ await saveCatalogToCache(catalog);
35
+ console.log("[models-catalog] Background revalidation complete");
36
+ }
37
+ catch (error) {
38
+ console.error("[models-catalog] Background revalidation failed:", error);
39
+ }
40
+ finally {
41
+ isRevalidating = false;
42
+ }
43
+ }
44
+ /**
45
+ * Get the models catalog using stale-while-revalidate pattern.
46
+ * - If cache is fresh (< 15 min): returns cached data
47
+ * - If cache is stale (>= 15 min): returns cached data, revalidates in background
48
+ * - If no cache: fetches synchronously, caches, returns
49
+ */
50
+ export async function getModelsCatalog() {
51
+ const { catalog, timestamp } = await getCachedCatalog();
52
+ const age = Date.now() - timestamp;
53
+ if (catalog) {
54
+ if (age >= CACHE_TTL_MS) {
55
+ // Stale - return cached but revalidate in background
56
+ void revalidateInBackground();
57
+ }
58
+ return catalog;
59
+ }
60
+ // No cache - fetch synchronously
61
+ try {
62
+ const freshCatalog = await fetchCatalog();
63
+ await saveCatalogToCache(freshCatalog);
64
+ return freshCatalog;
65
+ }
66
+ catch (error) {
67
+ console.error("[models-catalog] Failed to fetch catalog:", error);
68
+ return null;
69
+ }
70
+ }
71
+ /**
72
+ * Get a specific provider from the catalog
73
+ */
74
+ export async function getCatalogProvider(providerId) {
75
+ const catalog = await getModelsCatalog();
76
+ if (!catalog)
77
+ return null;
78
+ return catalog[providerId] || null;
79
+ }
80
+ //# sourceMappingURL=models-catalog.js.map
@@ -0,0 +1,43 @@
1
+ import { Context } from "hono";
2
+ export declare function handleGetModelsCatalog(c: Context): Promise<(Response & import("hono").TypedResponse<{
3
+ error: string;
4
+ }, 503, "json">) | (Response & import("hono").TypedResponse<{
5
+ [x: string]: {
6
+ id: string;
7
+ env: string[];
8
+ npm: string;
9
+ api: string;
10
+ name: string;
11
+ doc: string;
12
+ models: {
13
+ [x: string]: {
14
+ id: string;
15
+ name: string;
16
+ family: string;
17
+ attachment: boolean;
18
+ reasoning: boolean;
19
+ tool_call: boolean;
20
+ release_date: string;
21
+ last_updated: string;
22
+ modalities: {
23
+ input: string[];
24
+ output: string[];
25
+ };
26
+ open_weights: boolean;
27
+ cost: {
28
+ input: number;
29
+ output: number;
30
+ };
31
+ limit: {
32
+ context: number;
33
+ output: number;
34
+ };
35
+ tarsk_use?: string[] | undefined;
36
+ coding_index?: number | undefined;
37
+ };
38
+ };
39
+ };
40
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
41
+ error: string;
42
+ }, 500, "json">)>;
43
+ //# sourceMappingURL=models-catalog.route.d.ts.map
@@ -0,0 +1,15 @@
1
+ import { getModelsCatalog } from "./models-catalog.js";
2
+ export async function handleGetModelsCatalog(c) {
3
+ try {
4
+ const catalog = await getModelsCatalog();
5
+ if (!catalog) {
6
+ return c.json({ error: "Models catalog unavailable" }, 503);
7
+ }
8
+ return c.json(catalog);
9
+ }
10
+ catch (error) {
11
+ const message = error instanceof Error ? error.message : "Unknown error";
12
+ return c.json({ error: message }, 500);
13
+ }
14
+ }
15
+ //# sourceMappingURL=models-catalog.route.js.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * GET /api/models?provider=openrouter&supportedTools=true&useCase=coding
3
+ * Get available models for a provider
4
+ *
5
+ * Query parameters:
6
+ * - provider: Required. Provider name (e.g., "openrouter", "openai")
7
+ * - supportedTools: Optional. If "true", only return models with tools support
8
+ * - useCase: Optional. If "coding", only return models where tarsk_use includes 'coding'
9
+ */
10
+ import { Context } from "hono";
11
+ import { ModelManager } from "../models/models.manager.js";
12
+ export declare function handleGetAvailableModels(c: Context, modelManager: ModelManager): Promise<(Response & import("hono").TypedResponse<{
13
+ error: string;
14
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
15
+ provider: string;
16
+ models: {
17
+ id: string;
18
+ name: string;
19
+ description: string;
20
+ provider: string;
21
+ pricing?: {
22
+ prompt: number;
23
+ completion: number;
24
+ } | undefined;
25
+ supportedParameters?: {
26
+ tools?: boolean | undefined;
27
+ } | undefined;
28
+ tarsk_use?: string[] | undefined;
29
+ coding_index?: number | undefined;
30
+ supportsImages?: boolean | undefined;
31
+ contextWindow?: number | undefined;
32
+ }[];
33
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
34
+ error: string;
35
+ }, 500, "json">)>;
36
+ //# sourceMappingURL=models-get-available.route.d.ts.map
@@ -0,0 +1,66 @@
1
+ /**
2
+ * GET /api/models?provider=openrouter&supportedTools=true&useCase=coding
3
+ * Get available models for a provider
4
+ *
5
+ * Query parameters:
6
+ * - provider: Required. Provider name (e.g., "openrouter", "openai")
7
+ * - supportedTools: Optional. If "true", only return models with tools support
8
+ * - useCase: Optional. If "coding", only return models where tarsk_use includes 'coding'
9
+ */
10
+ export async function handleGetAvailableModels(c, modelManager) {
11
+ try {
12
+ const provider = c.req.query("provider");
13
+ const supportedTools = c.req.query("supportedTools");
14
+ const useCase = c.req.query("useCase");
15
+ if (!provider) {
16
+ return c.json({ error: "provider query parameter is required" }, 400);
17
+ }
18
+ let models = await modelManager.getAvailableModels(provider);
19
+ // Log models missing coding_index
20
+ models.forEach((m) => {
21
+ if (m.coding_index === undefined || m.coding_index === null) {
22
+ console.log(`Model ${m.name} (${m.id}) is missing coding_index`);
23
+ }
24
+ });
25
+ // Filter by supported tools if requested
26
+ if (supportedTools === "true" && provider.toLowerCase() === "openrouter") {
27
+ models = models.filter((m) => m.supportedParameters?.tools === true);
28
+ }
29
+ // Filter by use case if requested
30
+ if (useCase === "coding") {
31
+ models = models.filter((m) => {
32
+ const name = m.name.toLowerCase().trim();
33
+ const hasValidName = name !== "free" && name !== "auto";
34
+ // Filter to only include models where tarsk_use includes 'coding'
35
+ // Handle missing tarsk_use property gracefully - if missing, assume not a coding model
36
+ const hasCodingUse = Array.isArray(m.tarsk_use) && m.tarsk_use.includes("coding");
37
+ return hasValidName && hasCodingUse;
38
+ });
39
+ // If no models pass the filter, return all valid models (fallback for when data hasn't been updated)
40
+ if (models.length === 0) {
41
+ models = (await modelManager.getAvailableModels(provider)).filter((m) => {
42
+ const name = m.name.toLowerCase().trim();
43
+ return name !== "free" && name !== "auto";
44
+ });
45
+ // Re-apply supported tools filter if it was requested
46
+ if (supportedTools === "true" && provider.toLowerCase() === "openrouter") {
47
+ models = models.filter((m) => m.supportedParameters?.tools === true);
48
+ }
49
+ }
50
+ }
51
+ // Sort models to put enabled ones at the top
52
+ const enabledModels = await modelManager.getEnabledModels(provider);
53
+ const enabledModelIds = new Set(enabledModels.map((m) => m.id));
54
+ models.sort((a, b) => {
55
+ const aEnabled = enabledModelIds.has(a.id) ? 0 : 1;
56
+ const bEnabled = enabledModelIds.has(b.id) ? 0 : 1;
57
+ return aEnabled - bEnabled;
58
+ });
59
+ return c.json({ provider, models });
60
+ }
61
+ catch (error) {
62
+ const message = error instanceof Error ? error.message : "Unknown error";
63
+ return c.json({ error: message }, 500);
64
+ }
65
+ }
66
+ //# sourceMappingURL=models-get-available.route.js.map
@@ -0,0 +1,33 @@
1
+ /**
2
+ * GET /api/models/enabled?useCase=coding
3
+ * Get all enabled models across all providers
4
+ *
5
+ * Query parameters:
6
+ * - useCase: Optional. If "coding", only return models where tarsk_use includes 'coding'
7
+ */
8
+ import { Context } from "hono";
9
+ import { ModelManager } from "../models/models.manager.js";
10
+ export declare function handleGetEnabledModels(c: Context, modelManager: ModelManager): Promise<(Response & import("hono").TypedResponse<{
11
+ enabledModels: {
12
+ [x: string]: {
13
+ id: string;
14
+ name: string;
15
+ description: string;
16
+ provider: string;
17
+ pricing?: {
18
+ prompt: number;
19
+ completion: number;
20
+ } | undefined;
21
+ supportedParameters?: {
22
+ tools?: boolean | undefined;
23
+ } | undefined;
24
+ tarsk_use?: string[] | undefined;
25
+ coding_index?: number | undefined;
26
+ supportsImages?: boolean | undefined;
27
+ contextWindow?: number | undefined;
28
+ }[];
29
+ };
30
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
31
+ error: string;
32
+ }, 500, "json">)>;
33
+ //# sourceMappingURL=models-get-enabled.route.d.ts.map
@@ -0,0 +1,45 @@
1
+ /**
2
+ * GET /api/models/enabled?useCase=coding
3
+ * Get all enabled models across all providers
4
+ *
5
+ * Query parameters:
6
+ * - useCase: Optional. If "coding", only return models where tarsk_use includes 'coding'
7
+ */
8
+ export async function handleGetEnabledModels(c, modelManager) {
9
+ try {
10
+ const useCase = c.req.query("useCase");
11
+ let enabledModels = await modelManager.getAllEnabledModels();
12
+ // Filter by use case if requested
13
+ if (useCase === "coding") {
14
+ const filtered = {};
15
+ for (const [provider, models] of Object.entries(enabledModels)) {
16
+ // Filter to only include coding models
17
+ const filteredModels = models.filter((m) => {
18
+ const name = m.name.toLowerCase().trim();
19
+ const hasValidName = name !== "free" && name !== "auto";
20
+ // Filter to only include models where tarsk_use includes 'coding'
21
+ // Handle missing tarsk_use property gracefully - if missing, assume not a coding model
22
+ const hasCodingUse = Array.isArray(m.tarsk_use) && m.tarsk_use.includes("coding");
23
+ return hasValidName && hasCodingUse;
24
+ });
25
+ // If no models pass the filter, return all valid models (fallback for when data hasn't been updated)
26
+ if (filteredModels.length === 0) {
27
+ filtered[provider] = models.filter((m) => {
28
+ const name = m.name.toLowerCase().trim();
29
+ return name !== "free" && name !== "auto";
30
+ });
31
+ }
32
+ else {
33
+ filtered[provider] = filteredModels;
34
+ }
35
+ }
36
+ enabledModels = filtered;
37
+ }
38
+ return c.json({ enabledModels });
39
+ }
40
+ catch (error) {
41
+ const message = error instanceof Error ? error.message : "Unknown error";
42
+ return c.json({ error: message }, 500);
43
+ }
44
+ }
45
+ //# sourceMappingURL=models-get-enabled.route.js.map
@@ -0,0 +1,31 @@
1
+ /**
2
+ * GET /api/models/info?modelId=...
3
+ * Get detailed information about a specific model including context window
4
+ * The modelId must be provided as a query parameter (modelId).
5
+ */
6
+ import { Context } from "hono";
7
+ import { ModelManager } from "./models.manager.js";
8
+ export declare function handleGetModelInfo(c: Context, modelManager: ModelManager): Promise<(Response & import("hono").TypedResponse<{
9
+ error: string;
10
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
11
+ id: string;
12
+ name: string;
13
+ provider: string;
14
+ description: string;
15
+ contextWindow: number | undefined;
16
+ pricing: {
17
+ prompt: number;
18
+ completion: number;
19
+ } | undefined;
20
+ supportedParameters: {
21
+ tools?: boolean | undefined;
22
+ } | undefined;
23
+ tarsk_use: string[] | undefined;
24
+ coding_index: number | undefined;
25
+ supportsImages: boolean | undefined;
26
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
27
+ error: string;
28
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
29
+ error: string;
30
+ }, 500, "json">)>;
31
+ //# sourceMappingURL=models-get-model-info.route.d.ts.map
@@ -0,0 +1,84 @@
1
+ /**
2
+ * GET /api/models/info?modelId=...
3
+ * Get detailed information about a specific model including context window
4
+ * The modelId must be provided as a query parameter (modelId).
5
+ */
6
+ export async function handleGetModelInfo(c, modelManager) {
7
+ try {
8
+ const modelId = c.req.query("modelId");
9
+ if (!modelId || typeof modelId !== "string") {
10
+ return c.json({ error: "modelId query parameter is required and must be a string" }, 400);
11
+ }
12
+ // Extract provider from modelId (e.g., "openrouter/anthropic/claude-haiku-4.5" -> "openrouter")
13
+ const parts = modelId.split("/");
14
+ if (parts.length < 2) {
15
+ return c.json({ error: 'modelId must be in format "provider/model"' }, 400);
16
+ }
17
+ const provider = parts[0];
18
+ const modelName = parts.slice(1).join("/");
19
+ try {
20
+ // First, let's see all enabled models across all providers
21
+ console.log(`[models] Checking all enabled models...`);
22
+ const enabledModels = await modelManager.getEnabledModels(provider);
23
+ console.log(`[models] Enabled models for provider "${provider}":`, enabledModels.map((m) => ({ id: m.id, name: m.name })));
24
+ console.log(`[models] Looking for model ID: "${modelName}" or full: "${modelId}"`);
25
+ // If no models found for this provider, let's check all providers
26
+ if (enabledModels.length === 0) {
27
+ console.log(`[models] No enabled models for provider "${provider}". Checking all providers...`);
28
+ // Try to get available models instead to see what's available
29
+ try {
30
+ const availableModels = await modelManager.getAvailableModels(provider);
31
+ console.log(`[models] Available models for provider "${provider}":`, availableModels.map((m) => ({
32
+ id: m.id,
33
+ name: m.name,
34
+ contextWindow: m.contextWindow,
35
+ })));
36
+ // Try to find the model in available models
37
+ const availableModel = availableModels.find((m) => m.id === modelName || m.id === modelId);
38
+ if (availableModel) {
39
+ console.log(`[models] Found model in available models:`, availableModel);
40
+ return c.json({
41
+ id: availableModel.id,
42
+ name: availableModel.name,
43
+ provider: availableModel.provider,
44
+ description: availableModel.description,
45
+ contextWindow: availableModel.contextWindow,
46
+ pricing: availableModel.pricing,
47
+ supportedParameters: availableModel.supportedParameters,
48
+ tarsk_use: availableModel.tarsk_use,
49
+ coding_index: availableModel.coding_index,
50
+ supportsImages: availableModel.supportsImages,
51
+ });
52
+ }
53
+ }
54
+ catch (availError) {
55
+ console.log(`[models] Failed to get available models for provider "${provider}":`, availError);
56
+ }
57
+ }
58
+ const model = enabledModels.find((m) => m.id === modelName || m.id === modelId);
59
+ if (!model) {
60
+ return c.json({ error: `Model "${modelId}" not found or not enabled` }, 404);
61
+ }
62
+ return c.json({
63
+ id: model.id,
64
+ name: model.name,
65
+ provider: model.provider,
66
+ description: model.description,
67
+ contextWindow: model.contextWindow,
68
+ pricing: model.pricing,
69
+ supportedParameters: model.supportedParameters,
70
+ tarsk_use: model.tarsk_use,
71
+ coding_index: model.coding_index,
72
+ supportsImages: model.supportsImages,
73
+ });
74
+ }
75
+ catch {
76
+ return c.json({ error: `Failed to get models from provider "${provider}"` }, 500);
77
+ }
78
+ }
79
+ catch (error) {
80
+ console.error("[models] Error getting model info:", error);
81
+ return c.json({ error: "Failed to retrieve model information" }, 500);
82
+ }
83
+ }
84
+ //# sourceMappingURL=models-get-model-info.route.js.map
@@ -0,0 +1,15 @@
1
+ /**
2
+ * POST /api/models/:provider/:modelId/disable
3
+ * Disable a model for a provider
4
+ */
5
+ import { Context } from "hono";
6
+ import { ModelManager } from "../models/models.manager.js";
7
+ export declare function handleModelDisable(c: Context, modelManager: ModelManager): Promise<(Response & import("hono").TypedResponse<{
8
+ error: string;
9
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
10
+ success: true;
11
+ message: string;
12
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
13
+ error: string;
14
+ }, 500, "json">)>;
15
+ //# sourceMappingURL=models-model-disable.route.d.ts.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * POST /api/models/:provider/:modelId/disable
3
+ * Disable a model for a provider
4
+ */
5
+ export async function handleModelDisable(c, modelManager) {
6
+ try {
7
+ const provider = c.req.param("provider");
8
+ const modelId = c.req.param("modelId");
9
+ if (!provider || !modelId) {
10
+ return c.json({ error: "provider and modelId are required" }, 400);
11
+ }
12
+ await modelManager.disableModel(provider, modelId);
13
+ return c.json({ success: true, message: `Model ${modelId} disabled for ${provider}` });
14
+ }
15
+ catch (error) {
16
+ const message = error instanceof Error ? error.message : "Unknown error";
17
+ return c.json({ error: message }, 500);
18
+ }
19
+ }
20
+ //# sourceMappingURL=models-model-disable.route.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * POST /api/models/:provider/:modelId/enable
3
+ * Enable a model for a provider
4
+ */
5
+ import { Context } from "hono";
6
+ import { ModelManager } from "../models/models.manager.js";
7
+ export declare function handleModelEnable(c: Context, modelManager: ModelManager): Promise<(Response & import("hono").TypedResponse<{
8
+ error: string;
9
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
10
+ success: true;
11
+ message: string;
12
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
13
+ //# sourceMappingURL=models-model-enable.route.d.ts.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * POST /api/models/:provider/:modelId/enable
3
+ * Enable a model for a provider
4
+ */
5
+ export async function handleModelEnable(c, modelManager) {
6
+ try {
7
+ const provider = c.req.param("provider");
8
+ const modelId = c.req.param("modelId");
9
+ if (!provider || !modelId) {
10
+ return c.json({ error: "provider and modelId are required" }, 400);
11
+ }
12
+ await modelManager.enableModel(provider, modelId);
13
+ return c.json({ success: true, message: `Model ${modelId} enabled for ${provider}` });
14
+ }
15
+ catch (error) {
16
+ const message = error instanceof Error ? error.message : "Unknown error";
17
+ return c.json({ error: message }, 400);
18
+ }
19
+ }
20
+ //# sourceMappingURL=models-model-enable.route.js.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * POST /api/models/:provider/refresh
3
+ * Refresh the available models for a provider
4
+ * Note: With provider-data.ts, this is a no-op but kept for backward compatibility
5
+ */
6
+ import { Context } from "hono";
7
+ import { ModelManager } from "../models/models.manager.js";
8
+ export declare function handleProviderRefresh(c: Context, modelManager: ModelManager): Promise<(Response & import("hono").TypedResponse<{
9
+ error: string;
10
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
11
+ success: true;
12
+ provider: string;
13
+ modelCount: number;
14
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
15
+ error: string;
16
+ }, 500, "json">)>;
17
+ //# sourceMappingURL=models-provider-refresh.route.d.ts.map