tarsk 0.3.43 → 0.4.5

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
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # Tarsk
2
2
 
3
- Run `npx tarsk` to start the Tarsk App.
3
+ Run `npx tarsk` to start the Tarsk App.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Error handling utilities for Pi Agent
3
+ * Provides functions for extracting and formatting error information
4
+ */
5
+ import type { AgentEvent } from "@tarsk/shared";
6
+ /**
7
+ * Extracts error code from an unknown error object
8
+ */
9
+ export declare function getErrorCode(error: unknown): string | undefined;
10
+ /**
11
+ * Formats an error into an AgentEvent
12
+ */
13
+ export declare function formatErrorEvent(error: unknown): AgentEvent;
14
+ //# sourceMappingURL=agent.error-utils.d.ts.map
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Error handling utilities for Pi Agent
3
+ * Provides functions for extracting and formatting error information
4
+ */
5
+ /**
6
+ * Extracts error code from an unknown error object
7
+ */
8
+ export function getErrorCode(error) {
9
+ if (error && typeof error === "object" && "code" in error) {
10
+ const code = error.code;
11
+ if (typeof code === "string")
12
+ return code;
13
+ }
14
+ return undefined;
15
+ }
16
+ /**
17
+ * Formats an error into an AgentEvent
18
+ */
19
+ export function formatErrorEvent(error) {
20
+ let errCode;
21
+ let errMessage;
22
+ let errStack;
23
+ let errDetails;
24
+ if (error instanceof Error) {
25
+ errMessage = error.message || "Unknown error";
26
+ errStack = error.stack;
27
+ errCode = getErrorCode(error);
28
+ }
29
+ else if (typeof error === "object" && error !== null) {
30
+ errMessage = error.message
31
+ ? String(error.message)
32
+ : JSON.stringify(error);
33
+ errCode = getErrorCode(error);
34
+ errDetails = error;
35
+ }
36
+ else if (typeof error === "string") {
37
+ errMessage = error;
38
+ }
39
+ else {
40
+ errMessage = String(error);
41
+ }
42
+ return {
43
+ type: "error",
44
+ content: errMessage,
45
+ error: {
46
+ code: errCode ?? "EXECUTION_ERROR",
47
+ message: errMessage ?? "An error occurred during execution",
48
+ details: { stack: errStack, originalError: errDetails },
49
+ },
50
+ };
51
+ }
52
+ //# sourceMappingURL=agent.error-utils.js.map
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Event transformer for Pi Agent
3
+ * Handles transformation of Pi Agent events to AgentEvent format
4
+ */
5
+ import type { AgentEvent as PiAgentEvent } from "@mariozechner/pi-agent-core";
6
+ import type { AssistantMessage } from "@mariozechner/pi-ai";
7
+ import type { AgentEvent } from "@tarsk/shared";
8
+ /**
9
+ * Extracts text content from an assistant message
10
+ */
11
+ export declare function extractTextFromAssistantMessage(msg: AssistantMessage): string;
12
+ /**
13
+ * Event queue manager for handling Pi Agent events
14
+ */
15
+ export declare class EventQueue {
16
+ private queue;
17
+ private resolver;
18
+ finalContent: string;
19
+ errorOccurred: boolean;
20
+ toolCallCount: number;
21
+ /**
22
+ * Processes Pi Agent events and transforms them into AgentEvent format
23
+ */
24
+ handlePiEvent(event: PiAgentEvent): void;
25
+ /**
26
+ * Adds an event to the queue
27
+ */
28
+ push(event: AgentEvent): void;
29
+ /**
30
+ * Removes and returns the next event from the queue
31
+ */
32
+ shift(): AgentEvent | undefined;
33
+ /**
34
+ * Returns the number of events in the queue
35
+ */
36
+ get length(): number;
37
+ /**
38
+ * Sets a resolver to be called when new events are added
39
+ */
40
+ setResolver(resolver: () => void): void;
41
+ /**
42
+ * Clears the current resolver
43
+ */
44
+ clearResolver(): void;
45
+ /**
46
+ * Notifies the resolver if one is set
47
+ */
48
+ private notifyResolver;
49
+ /**
50
+ * Wakes up any waiting consumer (e.g. when the agent finishes).
51
+ * Call this instead of setResolver(() => {}) so the pending Promise resolves.
52
+ */
53
+ notify(): void;
54
+ }
55
+ //# sourceMappingURL=agent.event-transformer.d.ts.map
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Event transformer for Pi Agent
3
+ * Handles transformation of Pi Agent events to AgentEvent format
4
+ */
5
+ /**
6
+ * Extracts text content from an assistant message
7
+ */
8
+ export function extractTextFromAssistantMessage(msg) {
9
+ return msg.content
10
+ .filter((b) => b.type === "text")
11
+ .map((b) => b.text)
12
+ .join("");
13
+ }
14
+ /**
15
+ * Event queue manager for handling Pi Agent events
16
+ */
17
+ export class EventQueue {
18
+ queue = [];
19
+ resolver = null;
20
+ finalContent = "";
21
+ errorOccurred = false;
22
+ toolCallCount = 0;
23
+ /**
24
+ * Processes Pi Agent events and transforms them into AgentEvent format
25
+ */
26
+ handlePiEvent(event) {
27
+ if (event.type === "message_update" && event.assistantMessageEvent.type === "thinking_delta") {
28
+ // Stream thinking/reasoning content in real-time as the model thinks
29
+ const delta = event.assistantMessageEvent.delta;
30
+ this.push({
31
+ type: "message",
32
+ role: "assistant",
33
+ content: delta,
34
+ isThinking: true,
35
+ });
36
+ }
37
+ else if (event.type === "message_update" &&
38
+ event.assistantMessageEvent.type === "text_delta") {
39
+ const delta = event.assistantMessageEvent.delta;
40
+ this.finalContent += delta;
41
+ this.push({
42
+ type: "message",
43
+ role: "assistant",
44
+ content: delta,
45
+ });
46
+ }
47
+ else if (event.type === "message_update" &&
48
+ event.assistantMessageEvent.type === "toolcall_delta") {
49
+ // Handle tool call delta events for progress indication
50
+ const deltaEvent = event.assistantMessageEvent;
51
+ this.push({
52
+ type: "toolcall_delta",
53
+ contentIndex: deltaEvent.contentIndex,
54
+ delta: deltaEvent.delta,
55
+ partial: deltaEvent.partial,
56
+ });
57
+ }
58
+ else if (event.type === "message_start") {
59
+ // Handle message_start events - these contain usage information
60
+ this.push({
61
+ type: "message",
62
+ role: "assistant",
63
+ content: "",
64
+ message: event.message, // Store the full message object for usage extraction
65
+ });
66
+ }
67
+ else if (event.type === "tool_execution_start") {
68
+ this.toolCallCount++;
69
+ this.push({
70
+ type: "message",
71
+ role: "tool",
72
+ content: JSON.stringify([
73
+ {
74
+ type: "tool_use",
75
+ name: event.toolName,
76
+ id: event.toolCallId,
77
+ input: event.args,
78
+ },
79
+ ]),
80
+ });
81
+ }
82
+ else if (event.type === "tool_execution_end") {
83
+ const resultContent = event.result?.content
84
+ ?.filter((b) => b.type === "text")
85
+ .map((b) => b.text ?? "")
86
+ .join("") ?? JSON.stringify(event.result);
87
+ this.push({
88
+ type: "message",
89
+ role: "tool",
90
+ content: JSON.stringify([
91
+ {
92
+ type: "tool-result",
93
+ toolCallId: event.toolCallId,
94
+ toolName: event.toolName,
95
+ content: resultContent,
96
+ isError: event.isError,
97
+ },
98
+ ]),
99
+ });
100
+ }
101
+ else if (event.type === "agent_end") {
102
+ const messages = event.messages;
103
+ const lastAssistant = [...messages]
104
+ .reverse()
105
+ .find((m) => "role" in m && m.role === "assistant");
106
+ if (lastAssistant) {
107
+ const extracted = extractTextFromAssistantMessage(lastAssistant);
108
+ if (extracted && extracted !== this.finalContent) {
109
+ this.finalContent = extracted;
110
+ }
111
+ }
112
+ const toolCallCount = messages.filter((m) => "role" in m &&
113
+ m.role === "assistant" &&
114
+ "content" in m &&
115
+ Array.isArray(m.content) &&
116
+ m.content.some((b) => b.type === "tool_use")).length;
117
+ console.log(`[ai] agent_end: ${messages.length} messages, ` +
118
+ `finalContent length=${this.finalContent.length}, ` +
119
+ `toolCallRounds=${toolCallCount}` +
120
+ (this.finalContent.length === 0 ? " ⚠️ no text content produced" : ""));
121
+ }
122
+ this.notifyResolver();
123
+ }
124
+ /**
125
+ * Adds an event to the queue
126
+ */
127
+ push(event) {
128
+ this.queue.push(event);
129
+ }
130
+ /**
131
+ * Removes and returns the next event from the queue
132
+ */
133
+ shift() {
134
+ return this.queue.shift();
135
+ }
136
+ /**
137
+ * Returns the number of events in the queue
138
+ */
139
+ get length() {
140
+ return this.queue.length;
141
+ }
142
+ /**
143
+ * Sets a resolver to be called when new events are added
144
+ */
145
+ setResolver(resolver) {
146
+ this.resolver = resolver;
147
+ }
148
+ /**
149
+ * Clears the current resolver
150
+ */
151
+ clearResolver() {
152
+ this.resolver = null;
153
+ }
154
+ /**
155
+ * Notifies the resolver if one is set
156
+ */
157
+ notifyResolver() {
158
+ if (this.resolver) {
159
+ this.resolver();
160
+ this.resolver = null;
161
+ }
162
+ }
163
+ /**
164
+ * Wakes up any waiting consumer (e.g. when the agent finishes).
165
+ * Call this instead of setResolver(() => {}) so the pending Promise resolves.
166
+ */
167
+ notify() {
168
+ if (this.resolver) {
169
+ const resolver = this.resolver;
170
+ this.resolver = null;
171
+ resolver();
172
+ }
173
+ }
174
+ }
175
+ //# sourceMappingURL=agent.event-transformer.js.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * PiExecutor handles execution of agent commands via @mariozechner/pi-agent-core
3
+ *
4
+ * This manager is responsible for:
5
+ * - Executing streaming agent sessions using the Pi Agent
6
+ * - Streaming result messages back to the caller
7
+ * - Handling execution errors
8
+ */
9
+ import type { ExecutionContext, AgentEvent } from "@tarsk/shared";
10
+ import { MetadataManager } from "../features/metadata/metadata.manager.js";
11
+ /**
12
+ * AgentExecutor interface defines the contract for agent command execution
13
+ */
14
+ export interface AgentExecutor {
15
+ execute(prompt: string, context: ExecutionContext, signal?: AbortSignal): AsyncGenerator<AgentEvent>;
16
+ }
17
+ /**
18
+ * PiExecutorImpl provides the implementation for agent command execution
19
+ * using the @mariozechner/pi-agent-core Agent with streaming events.
20
+ */
21
+ export declare class PiExecutorImpl implements AgentExecutor {
22
+ private metadataManager;
23
+ constructor(metadataManager: MetadataManager);
24
+ execute(userPrompt: string, context: ExecutionContext, signal?: AbortSignal): AsyncGenerator<AgentEvent>;
25
+ }
26
+ //# sourceMappingURL=agent.executor.d.ts.map
@@ -0,0 +1,286 @@
1
+ /**
2
+ * PiExecutor handles execution of agent commands via @mariozechner/pi-agent-core
3
+ *
4
+ * This manager is responsible for:
5
+ * - Executing streaming agent sessions using the Pi Agent
6
+ * - Streaming result messages back to the caller
7
+ * - Handling execution errors
8
+ */
9
+ import { Agent } from "@mariozechner/pi-agent-core";
10
+ import { resolve, isAbsolute } from "path";
11
+ import { createCodingTools } from "../tools/index.js";
12
+ import { createAgentTool } from "../tools/agent-tool.js";
13
+ import { resolveProviderConfig } from "../features/providers/provider-resolver.js";
14
+ import { getDataDir } from "../core/paths.js";
15
+ import { resolveModel } from "./agent.model-resolver.js";
16
+ import { EventQueue } from "./agent.event-transformer.js";
17
+ import { loadAgentSystemPrompt } from "./agent.prompt-loader.js";
18
+ import { getErrorCode, formatErrorEvent } from "./agent.error-utils.js";
19
+ /**
20
+ * PiExecutorImpl provides the implementation for agent command execution
21
+ * using the @mariozechner/pi-agent-core Agent with streaming events.
22
+ */
23
+ export class PiExecutorImpl {
24
+ metadataManager;
25
+ constructor(metadataManager) {
26
+ this.metadataManager = metadataManager;
27
+ }
28
+ async *execute(userPrompt, context, signal) {
29
+ try {
30
+ const providerName = context.provider;
31
+ if (!providerName) {
32
+ throw new Error("No provider specified in execution context");
33
+ }
34
+ let model = context.model?.trim();
35
+ if (!model) {
36
+ throw new Error("No model specified in execution context");
37
+ }
38
+ model = model.replace(`${providerName.toLowerCase()}/`, "");
39
+ // Ensure threadPath is absolute - if relative, resolve against dataDir
40
+ const cwd = isAbsolute(context.threadPath)
41
+ ? context.threadPath
42
+ : resolve(getDataDir(), context.threadPath);
43
+ console.log("[ai] Execution context:", {
44
+ model,
45
+ cwd,
46
+ providerName,
47
+ promptLength: userPrompt.length,
48
+ });
49
+ // Resolve provider config: merges hardcoded PROVIDERS with catalog data (api, keyName, url)
50
+ const providerConfig = await resolveProviderConfig(providerName);
51
+ if (!providerConfig) {
52
+ throw new Error(`Unknown provider: ${providerName}`);
53
+ }
54
+ let apiKey = providerConfig.env && providerConfig.env.length > 0
55
+ ? process.env[providerConfig.env[0]]
56
+ : undefined;
57
+ let apiKeySource = "environment";
58
+ if (!apiKey) {
59
+ try {
60
+ const providerKeys = await this.metadataManager.getProviderKeys();
61
+ apiKey = providerKeys[providerConfig.name];
62
+ apiKeySource = "configuration";
63
+ }
64
+ catch (error) {
65
+ console.error(`[ai] Failed to retrieve provider keys from configuration:`, error);
66
+ throw new Error(`Failed to retrieve API key for provider ${providerName}: ${error instanceof Error ? error.message : String(error)}`);
67
+ }
68
+ }
69
+ if (!apiKey) {
70
+ throw new Error(`No API key found for provider: ${providerName}. ` +
71
+ `Set ${providerConfig.env && providerConfig.env.length > 0 ? providerConfig.env[0] : "an API key"} in environment variables or configuration.`);
72
+ }
73
+ // Verify the API key is not still encrypted (should have been decrypted by metadata manager)
74
+ if (apiKey.includes(":") && apiKey.length > 100) {
75
+ console.warn(`[ai] ⚠️ API key appears to still be encrypted. This may indicate a decryption failure.`);
76
+ }
77
+ console.log(`[ai] API key source for ${providerName}: ${apiKeySource}`);
78
+ const resolvedModel = resolveModel(providerName, model, providerConfig);
79
+ console.log("[ai] Resolved model:", {
80
+ id: resolvedModel.id,
81
+ api: resolvedModel.api,
82
+ provider: resolvedModel.provider,
83
+ });
84
+ const tools = await createCodingTools(cwd, {
85
+ skills: context.skills,
86
+ threadId: context.threadId,
87
+ });
88
+ const systemPrompt = await loadAgentSystemPrompt(cwd, context.skills, context.planMode, context.agents);
89
+ console.log("[ai] System prompt loaded from thread path", context.skills && context.skills.length > 0 ? `with ${context.skills.length} skill(s)` : "");
90
+ console.log(`[ai] System prompt: ${systemPrompt}`);
91
+ const eventQueue = new EventQueue();
92
+ // Add agent tool if agents are defined (enables subagent spawning)
93
+ const invocableAgents = (context.agents ?? []).filter((a) => !a.disableModelInvocation);
94
+ if (invocableAgents.length > 0) {
95
+ const agentToolInstance = createAgentTool({
96
+ agents: invocableAgents,
97
+ baseTools: tools,
98
+ metadataManager: this.metadataManager,
99
+ parentModel: `${providerName.toLowerCase()}/${model}`,
100
+ parentProvider: providerName,
101
+ defaultSystemPrompt: systemPrompt,
102
+ onEvent: (event) => eventQueue.push(event),
103
+ signal,
104
+ });
105
+ tools.push(agentToolInstance);
106
+ }
107
+ const agent = new Agent({
108
+ initialState: {
109
+ systemPrompt,
110
+ model: resolvedModel,
111
+ tools,
112
+ },
113
+ getApiKey: async () => apiKey,
114
+ });
115
+ let done = false;
116
+ let aborted = false;
117
+ // Handle abort signal from client disconnect
118
+ const onAbort = () => {
119
+ if (aborted)
120
+ return;
121
+ aborted = true;
122
+ console.log("[ai] Client disconnected, aborting agent execution");
123
+ // Immediately abort the agent to stop ongoing LLM API calls.
124
+ // Must happen here — not in the finally block — otherwise the agent
125
+ // keeps consuming tokens until the current API call completes.
126
+ agent.abort();
127
+ done = true;
128
+ eventQueue.notify();
129
+ };
130
+ if (signal) {
131
+ if (signal.aborted) {
132
+ console.log("[ai] Agent execution aborted before start");
133
+ return;
134
+ }
135
+ signal.addEventListener("abort", onAbort, { once: true });
136
+ }
137
+ console.log(`[ai] Agent prompt request:`, {
138
+ promptLength: userPrompt.length,
139
+ promptPreview: userPrompt.substring(0, 200) + (userPrompt.length > 200 ? "..." : ""),
140
+ });
141
+ let count = 0;
142
+ let lastLogTime = 0;
143
+ const unsubscribe = agent.subscribe((event) => {
144
+ // Throttle logging to prevent spam - only log every 2 seconds or every 100 events
145
+ const now = Date.now();
146
+ const shouldLog = count === 0 || count % 100 === 0 || now - lastLogTime > 2000;
147
+ if (shouldLog) {
148
+ console.log(`[ai] Agent event.${count++}:`, event.type, event.type === "message_update" &&
149
+ event.assistantMessageEvent?.type === "toolcall_delta"
150
+ ? `toolcall_delta (delta="${event.assistantMessageEvent.delta}")`
151
+ : JSON.stringify(event).substring(0, 255));
152
+ lastLogTime = now;
153
+ }
154
+ else {
155
+ count++;
156
+ }
157
+ eventQueue.handlePiEvent(event);
158
+ });
159
+ const images = (context.attachments ?? [])
160
+ .filter((a) => a.mimeType.startsWith("image/"))
161
+ .map((a) => ({ type: "image", data: a.content, mimeType: a.mimeType }));
162
+ const textAttachments = (context.attachments ?? []).filter((a) => !a.mimeType.startsWith("image/"));
163
+ let finalPrompt = userPrompt;
164
+ if (textAttachments.length > 0) {
165
+ const attachmentBlocks = textAttachments
166
+ .map((a) => {
167
+ const decoded = Buffer.from(a.content, "base64").toString("utf-8");
168
+ return `<file name="${a.name}">\n${decoded}\n</file>`;
169
+ })
170
+ .join("\n\n");
171
+ finalPrompt = `${attachmentBlocks}\n\n${userPrompt}`;
172
+ }
173
+ console.log(`[ai] Attachments: ${context.attachments?.length ?? 0} total, ${images.length} image(s), ${textAttachments.length} text file(s)`, (context.attachments ?? []).map((a) => ({
174
+ name: a.name,
175
+ mimeType: a.mimeType,
176
+ contentLength: a.content?.length ?? 0,
177
+ })), "images →", images.map((img) => ({ mimeType: img.mimeType, dataLength: img.data?.length ?? 0 })));
178
+ const promptDone = agent
179
+ .prompt(finalPrompt, images.length > 0 ? images : undefined)
180
+ .then(() => {
181
+ console.log(`[ai] Agent prompt completed successfully`);
182
+ done = true;
183
+ // Wake up the waiting loop so it can check the done condition and exit.
184
+ // Using notify() instead of setResolver(() => {}) is critical: setResolver
185
+ // would orphan any pending Promise resolver, causing an infinite hang.
186
+ eventQueue.notify();
187
+ })
188
+ .catch((err) => {
189
+ const errMessage = err instanceof Error ? err.message : String(err);
190
+ console.error(`[ai] Agent prompt failed:`, {
191
+ error: errMessage,
192
+ errorType: err instanceof Error ? err.constructor.name : typeof err,
193
+ });
194
+ if (!eventQueue.errorOccurred) {
195
+ eventQueue.errorOccurred = true;
196
+ eventQueue.push({
197
+ type: "error",
198
+ content: errMessage,
199
+ error: {
200
+ code: getErrorCode(err) ?? "EXECUTION_ERROR",
201
+ message: errMessage,
202
+ details: {
203
+ stack: err instanceof Error ? err.stack : undefined,
204
+ },
205
+ },
206
+ });
207
+ }
208
+ done = true;
209
+ // Same fix: notify instead of replacing the resolver with a no-op.
210
+ eventQueue.notify();
211
+ });
212
+ try {
213
+ while (!done || eventQueue.length > 0) {
214
+ if (eventQueue.length > 0) {
215
+ yield eventQueue.shift();
216
+ }
217
+ else {
218
+ await new Promise((resolve) => {
219
+ eventQueue.setResolver(resolve);
220
+ });
221
+ }
222
+ }
223
+ // When aborted, agent.abort() was already called in onAbort — skip waiting
224
+ // for the LLM response since it has been cancelled.
225
+ if (!aborted) {
226
+ await promptDone;
227
+ if (!eventQueue.errorOccurred && eventQueue.finalContent) {
228
+ console.log(`[ai] Yielding result, content length=${eventQueue.finalContent.length}`);
229
+ yield {
230
+ type: "result",
231
+ content: eventQueue.finalContent,
232
+ };
233
+ }
234
+ else if (!eventQueue.errorOccurred) {
235
+ if (eventQueue.toolCallCount > 0) {
236
+ console.log(`[ai] ⚠️ Agent ended with no text content after ${eventQueue.toolCallCount} tool call(s). Emitting error event.`);
237
+ yield {
238
+ type: "error",
239
+ content: "The agent used tools but did not produce a response. The model may have run out of context or terminated unexpectedly. Please try again.",
240
+ error: {
241
+ code: "NO_CONTENT_AFTER_TOOLS",
242
+ message: "Agent terminated after tool calls without producing a text response",
243
+ details: { toolCallCount: eventQueue.toolCallCount },
244
+ },
245
+ };
246
+ }
247
+ else {
248
+ console.log("[ai] ⚠️ Agent ended with no text content and no tool calls.");
249
+ yield {
250
+ type: "error",
251
+ content: `The model ${model} from ${providerName} did not provide a response to your prompt. Check your API key and balance and try again.`,
252
+ error: {
253
+ code: "NO_CONTENT_NO_TOOLS",
254
+ message: `The model ${model} from ${providerName} did not provide a response to your prompt.`,
255
+ },
256
+ };
257
+ }
258
+ }
259
+ else {
260
+ console.error("[ai] eventQueue.errorOccurred", eventQueue.errorOccurred);
261
+ }
262
+ }
263
+ else {
264
+ console.log("[ai] Agent aborted by user, skipping result emission");
265
+ }
266
+ }
267
+ finally {
268
+ // Clean up signal listener
269
+ if (signal) {
270
+ signal.removeEventListener("abort", onAbort);
271
+ }
272
+ unsubscribe();
273
+ if (signal?.aborted) {
274
+ console.warn("[ai] Agent aborted by user");
275
+ }
276
+ agent.abort();
277
+ eventQueue.clearResolver();
278
+ }
279
+ }
280
+ catch (error) {
281
+ console.error("[ai] Error during execution:", error);
282
+ yield formatErrorEvent(error);
283
+ }
284
+ }
285
+ }
286
+ //# sourceMappingURL=agent.executor.js.map
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Model resolver for Pi Agent
3
+ * Handles provider mapping and model resolution for different AI providers
4
+ */
5
+ import { type Model, type Api, type KnownProvider } from "@mariozechner/pi-ai";
6
+ /**
7
+ * Maps provider names to Pi AI known provider identifiers
8
+ */
9
+ export declare const PROVIDER_NAME_TO_PI: Record<string, KnownProvider>;
10
+ /**
11
+ * Determines the API type based on the provider's API URL
12
+ */
13
+ export declare function determineApiType(apiUrl: string): "openai-completions" | "anthropic-messages";
14
+ /**
15
+ * Resolves a model configuration for the Pi Agent
16
+ * First attempts to use known providers from pi-ai registry,
17
+ * then falls back to creating a custom model configuration
18
+ */
19
+ export declare function resolveModel(providerName: string, modelId: string, providerConfig: {
20
+ api: string | undefined;
21
+ }): Model<Api>;
22
+ //# sourceMappingURL=agent.model-resolver.d.ts.map