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,131 @@
1
+ /**
2
+ * Agent Tool
3
+ *
4
+ * Allows the running agent to spawn focused subagents for isolated subtasks.
5
+ * Subagents have their own execution context and controlled tool access.
6
+ *
7
+ * Inspired by VS Code Copilot's subagent model:
8
+ * https://code.visualstudio.com/docs/copilot/agents/subagents
9
+ */
10
+ import { Type } from "@sinclair/typebox";
11
+ import { executeSubagent } from "../agent/agent.subagent-executor.js";
12
+ /** Maximum subagent nesting depth (enforced by the caller via tool registration) */
13
+ export const MAX_SUBAGENT_DEPTH = 2;
14
+ const agentToolSchema = Type.Object({
15
+ prompt: Type.String({ description: "The task or question for the subagent to work on" }),
16
+ agentName: Type.Optional(Type.String({
17
+ description: "Name of a defined agent (from AGENT.md) to use. If omitted, a general-purpose subagent is created.",
18
+ })),
19
+ description: Type.Optional(Type.String({
20
+ description: "A short (3-5 word) label describing what the subagent will do",
21
+ })),
22
+ });
23
+ /**
24
+ * Filter a base tool set to only tools whose names appear in the whitelist.
25
+ * Returns all tools if allowedToolNames is undefined/empty.
26
+ */
27
+ function filterTools(baseTools, allowedToolNames) {
28
+ if (!allowedToolNames || !allowedToolNames.trim())
29
+ return baseTools;
30
+ const allowed = new Set(allowedToolNames
31
+ .split(/\s+/)
32
+ .map((s) => s.trim())
33
+ .filter(Boolean));
34
+ return baseTools.filter((t) => allowed.has(t.name));
35
+ }
36
+ /**
37
+ * Create the `agent` tool that allows the running agent to spawn subagents.
38
+ *
39
+ * @param options - Configuration including agents list, tools, metadata manager, etc.
40
+ * @returns AgentTool for registration with the Pi agent
41
+ */
42
+ export function createAgentTool(options) {
43
+ const { agents, baseTools, metadataManager, parentModel, parentProvider, defaultSystemPrompt, onEvent, signal, } = options;
44
+ return {
45
+ name: "agent",
46
+ label: "agent",
47
+ description: "Launch a specialized subagent to handle a focused subtask in an isolated context. " +
48
+ "The subagent runs autonomously and returns its result. " +
49
+ "Use this to delegate research, analysis, or parallel work without polluting the current context. " +
50
+ "If agentName is provided, that agent's system prompt and tool restrictions are applied.",
51
+ parameters: agentToolSchema,
52
+ execute: async (_toolCallId, { prompt, agentName, description }) => {
53
+ // Resolve agent definition if named
54
+ const agentDef = agentName
55
+ ? agents.find((a) => a.name === agentName && !a.disableModelInvocation)
56
+ : undefined;
57
+ if (agentName && !agentDef) {
58
+ const available = agents
59
+ .filter((a) => !a.disableModelInvocation)
60
+ .map((a) => a.name)
61
+ .join(", ");
62
+ return {
63
+ content: [
64
+ {
65
+ type: "text",
66
+ text: `Agent '${agentName}' not found or is not invocable. Available agents: ${available || "none"}`,
67
+ },
68
+ ],
69
+ details: undefined,
70
+ };
71
+ }
72
+ const label = description ?? agentName ?? "subagent";
73
+ const systemPrompt = agentDef?.systemPrompt ?? defaultSystemPrompt;
74
+ const model = agentDef?.model ?? parentModel;
75
+ const provider = agentDef?.provider ?? parentProvider;
76
+ const subTools = filterTools(baseTools, agentDef?.tools);
77
+ console.log(`[agent-tool] Spawning subagent '${label}' with model=${model}, tools=${subTools.map((t) => t.name).join(",")}`);
78
+ // Emit subagent_start so the UI can render a collapsible block
79
+ onEvent({
80
+ type: "subagent_start",
81
+ subagentName: label,
82
+ subagentDescription: agentDef?.description,
83
+ subagentPrompt: prompt,
84
+ });
85
+ let result = "";
86
+ try {
87
+ result = await executeSubagent({
88
+ prompt,
89
+ systemPrompt,
90
+ tools: subTools,
91
+ model,
92
+ provider,
93
+ metadataManager,
94
+ onEvent: (event) => {
95
+ // Wrap nested events in subagent_event envelope
96
+ onEvent({
97
+ type: "subagent_event",
98
+ subagentName: label,
99
+ subagentEvent: event,
100
+ });
101
+ },
102
+ signal,
103
+ });
104
+ }
105
+ catch (err) {
106
+ const message = err instanceof Error ? err.message : String(err);
107
+ console.error(`[agent-tool] Subagent '${label}' failed:`, message);
108
+ onEvent({
109
+ type: "subagent_complete",
110
+ subagentName: label,
111
+ subagentResult: `Error: ${message}`,
112
+ });
113
+ return {
114
+ content: [{ type: "text", text: `Subagent failed: ${message}` }],
115
+ details: undefined,
116
+ };
117
+ }
118
+ onEvent({
119
+ type: "subagent_complete",
120
+ subagentName: label,
121
+ subagentResult: result,
122
+ });
123
+ console.log(`[agent-tool] Subagent '${label}' completed, result length=${result.length}`);
124
+ return {
125
+ content: [{ type: "text", text: result || "(subagent produced no output)" }],
126
+ details: undefined,
127
+ };
128
+ },
129
+ };
130
+ }
131
+ //# sourceMappingURL=agent-tool.js.map
@@ -0,0 +1,25 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ import { type Static } from "@sinclair/typebox";
3
+ declare const askUserSchema: import("@sinclair/typebox").TObject<{
4
+ question: import("@sinclair/typebox").TString;
5
+ options: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
6
+ context: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
7
+ }>;
8
+ export type AskUserToolInput = Static<typeof askUserSchema>;
9
+ /**
10
+ * Submit a user's answer for a pending question.
11
+ * Called by the API route when the frontend posts a response.
12
+ */
13
+ export declare function submitAnswer(toolCallId: string, answer: string): boolean;
14
+ /**
15
+ * Cancel a pending question (e.g. when the stream is aborted).
16
+ */
17
+ export declare function cancelPendingQuestion(toolCallId: string): boolean;
18
+ export declare function createAskUserTool(): AgentTool<typeof askUserSchema>;
19
+ export declare const askUserTool: AgentTool<import("@sinclair/typebox").TObject<{
20
+ question: import("@sinclair/typebox").TString;
21
+ options: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
22
+ context: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
23
+ }>, any>;
24
+ export {};
25
+ //# sourceMappingURL=ask-user.d.ts.map
@@ -0,0 +1,74 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ const askUserSchema = Type.Object({
3
+ question: Type.String({
4
+ description: "A clear, specific question to ask the user. Frame it to help clarify ambiguous requirements, confirm decisions, or gather preferences needed to proceed.",
5
+ }),
6
+ options: Type.Optional(Type.Array(Type.String(), {
7
+ description: "Optional list of predefined answer choices. The user can pick one or type a custom response. Use when there are a small number of clear alternatives.",
8
+ })),
9
+ context: Type.Optional(Type.String({
10
+ description: "Optional brief context explaining why this question is being asked, so the user understands the impact of their answer.",
11
+ })),
12
+ });
13
+ /**
14
+ * Registry of pending questions awaiting user responses.
15
+ * Keyed by toolCallId so the HTTP endpoint can resolve the correct Promise.
16
+ */
17
+ const pendingQuestions = new Map();
18
+ /**
19
+ * Submit a user's answer for a pending question.
20
+ * Called by the API route when the frontend posts a response.
21
+ */
22
+ export function submitAnswer(toolCallId, answer) {
23
+ const pending = pendingQuestions.get(toolCallId);
24
+ if (!pending)
25
+ return false;
26
+ pending.resolve(answer);
27
+ pendingQuestions.delete(toolCallId);
28
+ return true;
29
+ }
30
+ /**
31
+ * Cancel a pending question (e.g. when the stream is aborted).
32
+ */
33
+ export function cancelPendingQuestion(toolCallId) {
34
+ const pending = pendingQuestions.get(toolCallId);
35
+ if (!pending)
36
+ return false;
37
+ pending.reject(new Error("Question cancelled"));
38
+ pendingQuestions.delete(toolCallId);
39
+ return true;
40
+ }
41
+ export function createAskUserTool() {
42
+ return {
43
+ name: "ask_user",
44
+ label: "ask_user",
45
+ description: "Ask the user a question when you need clarification, confirmation, or a decision when there is ambiguity or multiple choices.",
46
+ parameters: askUserSchema,
47
+ execute: async (toolCallId, { question, options, context }, signal) => {
48
+ console.log(`[ai] ask_user: "${question}" (options: ${options?.join(", ") ?? "free-text"})`);
49
+ if (signal?.aborted) {
50
+ throw new Error("Operation aborted");
51
+ }
52
+ const answer = await new Promise((resolve, reject) => {
53
+ pendingQuestions.set(toolCallId, {
54
+ resolve,
55
+ reject,
56
+ question,
57
+ options,
58
+ context,
59
+ });
60
+ const onAbort = () => {
61
+ cancelPendingQuestion(toolCallId);
62
+ };
63
+ signal?.addEventListener("abort", onAbort, { once: true });
64
+ });
65
+ console.log(`[ai] ask_user response: "${answer}"`);
66
+ return {
67
+ content: [{ type: "text", text: answer }],
68
+ details: undefined,
69
+ };
70
+ },
71
+ };
72
+ }
73
+ export const askUserTool = createAskUserTool();
74
+ //# sourceMappingURL=ask-user.js.map
@@ -0,0 +1,28 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ import { type Static } from "@sinclair/typebox";
3
+ import { type TruncationResult } from "./truncate.js";
4
+ declare const astGrepSchema: import("@sinclair/typebox").TObject<{
5
+ command: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"run">, import("@sinclair/typebox").TLiteral<"scan">]>;
6
+ pattern: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
7
+ lang: import("@sinclair/typebox").TString;
8
+ rule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
9
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
10
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
11
+ }>;
12
+ export type AstGrepToolInput = Static<typeof astGrepSchema>;
13
+ export interface AstGrepToolDetails {
14
+ truncation?: TruncationResult;
15
+ matchLimitReached?: number;
16
+ linesTruncated?: boolean;
17
+ }
18
+ export declare function createAstGrepTool(cwd: string): AgentTool<typeof astGrepSchema>;
19
+ export declare const astGrepTool: AgentTool<import("@sinclair/typebox").TObject<{
20
+ command: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"run">, import("@sinclair/typebox").TLiteral<"scan">]>;
21
+ pattern: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
22
+ lang: import("@sinclair/typebox").TString;
23
+ rule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
24
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
25
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
26
+ }>, any>;
27
+ export {};
28
+ //# sourceMappingURL=ast-grep.d.ts.map
@@ -0,0 +1,273 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { spawnProcess } from "../core/utils.js";
3
+ import path from "path";
4
+ import { existsSync, readdirSync } from "fs";
5
+ import { fileURLToPath } from "url";
6
+ import { resolveToCwd, validatePathWithinCwd } from "./path-utils.js";
7
+ import { DEFAULT_MAX_BYTES, formatSize, GREP_MAX_LINE_LENGTH, truncateHead, truncateLine, } from "./truncate.js";
8
+ const astGrepSchema = Type.Object({
9
+ command: Type.Union([Type.Literal("run"), Type.Literal("scan")], {
10
+ description: "Mode: 'run' for simple pattern search, 'scan' for complex rule-based search",
11
+ }),
12
+ pattern: Type.Optional(Type.String({
13
+ description: "AST pattern for 'run' command. Use metavariables like $NAME, $$$ARGS. Example: 'console.log($ARG)'",
14
+ })),
15
+ lang: Type.String({
16
+ description: "Language to parse: javascript, typescript, python, rust, go, java, css, html, etc.",
17
+ }),
18
+ rule: Type.Optional(Type.String({
19
+ description: "YAML rule for 'scan' command. Supports kind, has, inside, all, any, not. Example: 'id: test\\nlanguage: javascript\\nrule:\\n kind: function_declaration\\n has:\\n pattern: await $EXPR\\n stopBy: end'",
20
+ })),
21
+ path: Type.Optional(Type.String({
22
+ description: "Directory or file to search (default: current directory)",
23
+ })),
24
+ limit: Type.Optional(Type.Number({
25
+ description: "Maximum number of matches to return (default: 50)",
26
+ })),
27
+ });
28
+ const DEFAULT_LIMIT = 50;
29
+ const PLATFORM_PACKAGES = {
30
+ "darwin-arm64": "@ast-grep/cli-darwin-arm64",
31
+ "darwin-x64": "@ast-grep/cli-darwin-x64",
32
+ "linux-arm64": "@ast-grep/cli-linux-arm64-gnu",
33
+ "linux-x64": "@ast-grep/cli-linux-x64-gnu",
34
+ "win32-arm64": "@ast-grep/cli-win32-arm64-msvc",
35
+ "win32-ia32": "@ast-grep/cli-win32-ia32-msvc",
36
+ "win32-x64": "@ast-grep/cli-win32-x64-msvc",
37
+ };
38
+ function findBinInNodeModules(startDir, pkg, binName) {
39
+ const pkgPath = pkg.replace("/", path.sep);
40
+ let dir = startDir;
41
+ while (true) {
42
+ const nmDir = path.join(dir, "node_modules");
43
+ // Standard layout: node_modules/@ast-grep/cli-darwin-arm64/ast-grep
44
+ const standardPath = path.join(nmDir, pkgPath, binName);
45
+ if (existsSync(standardPath))
46
+ return standardPath;
47
+ // Bun cache layout: node_modules/.bun/@ast-grep+cli-darwin-arm64@*/node_modules/@ast-grep/cli-darwin-arm64/ast-grep
48
+ const bunDir = path.join(nmDir, ".bun");
49
+ if (existsSync(bunDir)) {
50
+ const bunPrefix = pkg.replace("/", "+");
51
+ try {
52
+ const entries = readdirSync(bunDir);
53
+ const match = entries.find((e) => e.startsWith(bunPrefix + "@"));
54
+ if (match) {
55
+ const bunPath = path.join(bunDir, match, "node_modules", pkgPath, binName);
56
+ if (existsSync(bunPath))
57
+ return bunPath;
58
+ }
59
+ }
60
+ catch {
61
+ // ignore
62
+ }
63
+ }
64
+ const parent = path.dirname(dir);
65
+ if (parent === dir)
66
+ break;
67
+ dir = parent;
68
+ }
69
+ return null;
70
+ }
71
+ // Resolve from the tarsk app's own install directory (where @ast-grep/cli is a dependency)
72
+ const APP_DIR = path.resolve(fileURLToPath(import.meta.url), "../../..");
73
+ function resolveAstGrepBin(cwd) {
74
+ const key = `${process.platform}-${process.arch}`;
75
+ const pkg = PLATFORM_PACKAGES[key];
76
+ if (!pkg)
77
+ return null;
78
+ const binName = process.platform === "win32" ? "ast-grep.exe" : "ast-grep";
79
+ console.log(`[ast-grep] resolving binary: platform=${key}, pkg=${pkg}, APP_DIR=${APP_DIR}`);
80
+ // First: search from the tarsk app's own directory (where @ast-grep/cli is installed as a dependency)
81
+ const appResult = findBinInNodeModules(APP_DIR, pkg, binName);
82
+ if (appResult)
83
+ return appResult;
84
+ // Fallback: search from the user's working directory
85
+ return findBinInNodeModules(cwd, pkg, binName);
86
+ }
87
+ export function createAstGrepTool(cwd) {
88
+ return {
89
+ name: "ast_grep",
90
+ label: "Code Search",
91
+ description: `Structural code search using AST patterns. Matches code by structure, not text. Use 'run' for simple pattern matching (e.g. 'console.log($ARG)') or 'scan' for complex YAML rules with kind/has/inside/all/any/not. Output truncated to ${DEFAULT_LIMIT} matches or ${DEFAULT_MAX_BYTES / 1024}KB.`,
92
+ parameters: astGrepSchema,
93
+ execute: async (_toolCallId, { command, pattern, lang, rule, path: searchDir, limit }, signal) => {
94
+ return new Promise((resolve, reject) => {
95
+ if (signal?.aborted) {
96
+ reject(new Error("Operation aborted"));
97
+ return;
98
+ }
99
+ let settled = false;
100
+ const settle = (fn) => {
101
+ if (!settled) {
102
+ settled = true;
103
+ fn();
104
+ }
105
+ };
106
+ void (async () => {
107
+ try {
108
+ if (command === "run" && !pattern) {
109
+ settle(() => reject(new Error("'pattern' is required when command is 'run'")));
110
+ return;
111
+ }
112
+ if (command === "scan" && !rule) {
113
+ settle(() => reject(new Error("'rule' is required when command is 'scan'")));
114
+ return;
115
+ }
116
+ const searchPath = resolveToCwd(searchDir ?? ".", cwd);
117
+ validatePathWithinCwd(searchPath, cwd);
118
+ const effectiveLimit = Math.max(1, limit ?? DEFAULT_LIMIT);
119
+ const args = [];
120
+ if (command === "run") {
121
+ args.push("run", "--pattern", pattern, "--lang", lang, "--json", searchPath);
122
+ }
123
+ else {
124
+ args.push("scan", "--inline-rules", rule, "--json", searchPath);
125
+ }
126
+ const binPath = resolveAstGrepBin(cwd);
127
+ if (!binPath) {
128
+ settle(() => reject(new Error("ast-grep is not available. Install @ast-grep/cli or add it to PATH.")));
129
+ return;
130
+ }
131
+ console.log(`[ast-grep] ${binPath} ${args.join(" ")}`);
132
+ const child = spawnProcess(binPath, args, {
133
+ stdio: ["ignore", "pipe", "pipe"],
134
+ });
135
+ const MAX_STDOUT_BYTES = 2 * 1024 * 1024; // 2MB cap on raw stdout
136
+ let stdout = "";
137
+ let stdoutBytes = 0;
138
+ let stderr = "";
139
+ let aborted = false;
140
+ let killedDueToCap = false;
141
+ const onAbort = () => {
142
+ aborted = true;
143
+ if (!child.killed)
144
+ child.kill();
145
+ };
146
+ signal?.addEventListener("abort", onAbort, { once: true });
147
+ child.stdout?.on("data", (chunk) => {
148
+ if (killedDueToCap)
149
+ return;
150
+ stdoutBytes += chunk.length;
151
+ if (stdoutBytes > MAX_STDOUT_BYTES) {
152
+ killedDueToCap = true;
153
+ if (!child.killed)
154
+ child.kill();
155
+ return;
156
+ }
157
+ stdout += chunk.toString();
158
+ });
159
+ child.stderr?.on("data", (chunk) => {
160
+ stderr += chunk.toString();
161
+ });
162
+ child.on("error", (error) => {
163
+ signal?.removeEventListener("abort", onAbort);
164
+ settle(() => reject(new Error(`Failed to run ast-grep: ${error.message}`)));
165
+ });
166
+ child.on("close", (code) => {
167
+ signal?.removeEventListener("abort", onAbort);
168
+ console.log(`[ast-grep] exit code: ${code}, stdout: ${stdout.length} bytes, stderr: ${stderr.length} bytes`);
169
+ if (stderr.trim())
170
+ console.log(`[ast-grep] stderr: ${stderr.trim()}`);
171
+ if (aborted) {
172
+ settle(() => reject(new Error("Operation aborted")));
173
+ return;
174
+ }
175
+ if (!killedDueToCap && code !== 0 && code !== 1) {
176
+ const errMsg = stderr.trim() || `ast-grep exited with code ${code}`;
177
+ settle(() => reject(new Error(errMsg)));
178
+ return;
179
+ }
180
+ let matches;
181
+ try {
182
+ matches = JSON.parse(stdout || "[]");
183
+ }
184
+ catch {
185
+ // If killed due to cap, stdout is truncated JSON — try to recover
186
+ if (killedDueToCap) {
187
+ const lastBrace = stdout.lastIndexOf("}");
188
+ if (lastBrace > 0) {
189
+ try {
190
+ matches = JSON.parse(stdout.slice(0, lastBrace + 1) + "]");
191
+ }
192
+ catch {
193
+ matches = [];
194
+ }
195
+ }
196
+ else {
197
+ matches = [];
198
+ }
199
+ }
200
+ else if (!stdout.trim()) {
201
+ settle(() => resolve({
202
+ content: [{ type: "text", text: "No matches found" }],
203
+ details: undefined,
204
+ }));
205
+ return;
206
+ }
207
+ else {
208
+ settle(() => reject(new Error(`Failed to parse ast-grep JSON output: ${stdout.slice(0, 200)}`)));
209
+ return;
210
+ }
211
+ }
212
+ if (!Array.isArray(matches) || matches.length === 0) {
213
+ settle(() => resolve({
214
+ content: [{ type: "text", text: "No matches found" }],
215
+ details: undefined,
216
+ }));
217
+ return;
218
+ }
219
+ const matchLimitReached = matches.length > effectiveLimit;
220
+ if (matchLimitReached) {
221
+ matches = matches.slice(0, effectiveLimit);
222
+ }
223
+ let linesTruncated = false;
224
+ const outputLines = [];
225
+ for (const match of matches) {
226
+ const filePath = match.file ?? "unknown";
227
+ const relativePath = path.relative(searchPath, filePath).replace(/\\/g, "/") || filePath;
228
+ const lineNum = (match.range?.start?.line ?? 0) + 1;
229
+ const matchText = (match.lines ?? match.text ?? "").trimEnd();
230
+ const firstLine = matchText.split("\n")[0] ?? "";
231
+ const { text: truncatedText, wasTruncated } = truncateLine(firstLine);
232
+ if (wasTruncated)
233
+ linesTruncated = true;
234
+ outputLines.push(`${relativePath}:${lineNum}: ${truncatedText}`);
235
+ }
236
+ const rawOutput = outputLines.join("\n");
237
+ const truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });
238
+ let output = truncation.content;
239
+ const details = {};
240
+ const notices = [];
241
+ if (killedDueToCap) {
242
+ notices.push(`Output exceeded 2MB cap. Refine your pattern for more precise results`);
243
+ }
244
+ if (matchLimitReached) {
245
+ notices.push(`${effectiveLimit} matches limit reached. Use limit=${effectiveLimit * 2} for more, or refine pattern`);
246
+ details.matchLimitReached = effectiveLimit;
247
+ }
248
+ if (truncation.truncated) {
249
+ notices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);
250
+ details.truncation = truncation;
251
+ }
252
+ if (linesTruncated) {
253
+ notices.push(`Some lines truncated to ${GREP_MAX_LINE_LENGTH} chars. Use read tool to see full lines`);
254
+ details.linesTruncated = true;
255
+ }
256
+ if (notices.length > 0)
257
+ output += `\n\n[${notices.join(". ")}]`;
258
+ settle(() => resolve({
259
+ content: [{ type: "text", text: output }],
260
+ details: Object.keys(details).length > 0 ? details : undefined,
261
+ }));
262
+ });
263
+ }
264
+ catch {
265
+ settle(() => reject(new Error("Error processing ast-grep request")));
266
+ }
267
+ })();
268
+ });
269
+ },
270
+ };
271
+ }
272
+ export const astGrepTool = createAstGrepTool(process.cwd());
273
+ //# sourceMappingURL=ast-grep.js.map
@@ -0,0 +1,33 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ import { type Static } from "@sinclair/typebox";
3
+ import { type TruncationResult } from "./truncate.js";
4
+ declare const bashSchema: import("@sinclair/typebox").TObject<{
5
+ command: import("@sinclair/typebox").TString;
6
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
7
+ }>;
8
+ export type BashToolInput = Static<typeof bashSchema>;
9
+ export interface BashToolDetails {
10
+ truncation?: TruncationResult;
11
+ fullOutputPath?: string;
12
+ }
13
+ export interface BashOperations {
14
+ exec: (command: string, cwd: string, options: {
15
+ onData: (data: Buffer) => void;
16
+ signal?: AbortSignal;
17
+ timeout?: number;
18
+ env?: NodeJS.ProcessEnv;
19
+ }) => Promise<{
20
+ exitCode: number | null;
21
+ }>;
22
+ }
23
+ export interface BashToolOptions {
24
+ operations?: BashOperations;
25
+ commandPrefix?: string;
26
+ }
27
+ export declare function createBashTool(cwd: string, options?: BashToolOptions): AgentTool<typeof bashSchema>;
28
+ export declare const bashTool: AgentTool<import("@sinclair/typebox").TObject<{
29
+ command: import("@sinclair/typebox").TString;
30
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
31
+ }>, any>;
32
+ export {};
33
+ //# sourceMappingURL=bash.d.ts.map