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,14 @@
1
+ export declare function expandPath(filePath: string): string;
2
+ /**
3
+ * Resolve a path relative to the given cwd.
4
+ * Handles ~ expansion and absolute paths.
5
+ */
6
+ export declare function resolveToCwd(filePath: string, cwd: string): string;
7
+ /**
8
+ * Validates that a resolved path is within the allowed cwd directory.
9
+ * Prevents directory traversal attacks and access to files outside the project.
10
+ * @throws Error if the path is outside the cwd
11
+ */
12
+ export declare function validatePathWithinCwd(resolvedPath: string, cwd: string): void;
13
+ export declare function resolveReadPath(filePath: string, cwd: string): string;
14
+ //# sourceMappingURL=path-utils.d.ts.map
@@ -0,0 +1,87 @@
1
+ import { accessSync, constants } from "node:fs";
2
+ import * as os from "node:os";
3
+ import { isAbsolute, resolve as resolvePath, relative } from "node:path";
4
+ const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
5
+ const NARROW_NO_BREAK_SPACE = "\u202F";
6
+ function normalizeUnicodeSpaces(str) {
7
+ return str.replace(UNICODE_SPACES, " ");
8
+ }
9
+ function tryMacOSScreenshotPath(filePath) {
10
+ return filePath.replace(/ (AM|PM)\./g, `${NARROW_NO_BREAK_SPACE}$1.`);
11
+ }
12
+ function tryNFDVariant(filePath) {
13
+ return filePath.normalize("NFD");
14
+ }
15
+ function tryCurlyQuoteVariant(filePath) {
16
+ return filePath.replace(/'/g, "\u2019");
17
+ }
18
+ function fileExists(filePath) {
19
+ try {
20
+ accessSync(filePath, constants.F_OK);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ function normalizeAtPrefix(filePath) {
28
+ return filePath.startsWith("@") ? filePath.slice(1) : filePath;
29
+ }
30
+ export function expandPath(filePath) {
31
+ const normalized = normalizeUnicodeSpaces(normalizeAtPrefix(filePath));
32
+ if (normalized === "~") {
33
+ return os.homedir();
34
+ }
35
+ if (normalized.startsWith("~/")) {
36
+ return os.homedir() + normalized.slice(1);
37
+ }
38
+ return normalized;
39
+ }
40
+ /**
41
+ * Resolve a path relative to the given cwd.
42
+ * Handles ~ expansion and absolute paths.
43
+ */
44
+ export function resolveToCwd(filePath, cwd) {
45
+ const expanded = expandPath(filePath);
46
+ if (isAbsolute(expanded)) {
47
+ return expanded;
48
+ }
49
+ return resolvePath(cwd, expanded);
50
+ }
51
+ /**
52
+ * Validates that a resolved path is within the allowed cwd directory.
53
+ * Prevents directory traversal attacks and access to files outside the project.
54
+ * @throws Error if the path is outside the cwd
55
+ */
56
+ export function validatePathWithinCwd(resolvedPath, cwd) {
57
+ const relativePath = relative(cwd, resolvedPath);
58
+ // If relative path starts with "..", it's outside the cwd
59
+ if (relativePath.startsWith("..") || isAbsolute(relativePath)) {
60
+ throw new Error(`Access denied: Path is outside the allowed directory. ` +
61
+ `Requested: ${resolvedPath}, Allowed root: ${cwd}`);
62
+ }
63
+ }
64
+ export function resolveReadPath(filePath, cwd) {
65
+ const resolved = resolveToCwd(filePath, cwd);
66
+ if (fileExists(resolved)) {
67
+ return resolved;
68
+ }
69
+ const amPmVariant = tryMacOSScreenshotPath(resolved);
70
+ if (amPmVariant !== resolved && fileExists(amPmVariant)) {
71
+ return amPmVariant;
72
+ }
73
+ const nfdVariant = tryNFDVariant(resolved);
74
+ if (nfdVariant !== resolved && fileExists(nfdVariant)) {
75
+ return nfdVariant;
76
+ }
77
+ const curlyVariant = tryCurlyQuoteVariant(resolved);
78
+ if (curlyVariant !== resolved && fileExists(curlyVariant)) {
79
+ return curlyVariant;
80
+ }
81
+ const nfdCurlyVariant = tryCurlyQuoteVariant(nfdVariant);
82
+ if (nfdCurlyVariant !== resolved && fileExists(nfdCurlyVariant)) {
83
+ return nfdCurlyVariant;
84
+ }
85
+ return resolved;
86
+ }
87
+ //# sourceMappingURL=path-utils.js.map
@@ -0,0 +1,27 @@
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 readSchema: import("@sinclair/typebox").TObject<{
5
+ path: import("@sinclair/typebox").TString;
6
+ offset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
7
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
8
+ }>;
9
+ export type ReadToolInput = Static<typeof readSchema>;
10
+ export interface ReadToolDetails {
11
+ truncation?: TruncationResult;
12
+ }
13
+ export interface ReadOperations {
14
+ readFile: (absolutePath: string) => Promise<Buffer>;
15
+ access: (absolutePath: string) => Promise<void>;
16
+ }
17
+ export interface ReadToolOptions {
18
+ operations?: ReadOperations;
19
+ }
20
+ export declare function createReadTool(cwd: string, options?: ReadToolOptions): AgentTool<typeof readSchema>;
21
+ export declare const readTool: AgentTool<import("@sinclair/typebox").TObject<{
22
+ path: import("@sinclair/typebox").TString;
23
+ offset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
24
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
25
+ }>, any>;
26
+ export {};
27
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1,86 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { constants } from "fs";
3
+ import { access as fsAccess, readFile as fsReadFile } from "fs/promises";
4
+ import { resolveReadPath, validatePathWithinCwd } from "./path-utils.js";
5
+ import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, truncateHead, } from "./truncate.js";
6
+ import { withAbortSignal } from "./tool-helpers.js";
7
+ const readSchema = Type.Object({
8
+ path: Type.String({ description: "Path to the file to read (relative or absolute)" }),
9
+ offset: Type.Optional(Type.Number({ description: "Line number to start reading from (1-indexed)" })),
10
+ limit: Type.Optional(Type.Number({ description: "Maximum number of lines to read" })),
11
+ });
12
+ const defaultReadOperations = {
13
+ readFile: (path) => fsReadFile(path),
14
+ access: (path) => fsAccess(path, constants.R_OK),
15
+ };
16
+ export function createReadTool(cwd, options) {
17
+ const ops = options?.operations ?? defaultReadOperations;
18
+ return {
19
+ name: "read",
20
+ label: "read",
21
+ description: `Read the contents of a text file. Output is truncated to ${DEFAULT_MAX_LINES} lines or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first). Use offset/limit for large files.`,
22
+ parameters: readSchema,
23
+ execute: async (_toolCallId, { path, offset, limit }, signal) => {
24
+ const absolutePath = resolveReadPath(path, cwd);
25
+ validatePathWithinCwd(absolutePath, cwd);
26
+ return withAbortSignal(signal, async (isAborted) => {
27
+ await ops.access(absolutePath);
28
+ if (isAborted())
29
+ return { content: [], details: undefined };
30
+ const buffer = await ops.readFile(absolutePath);
31
+ const textContent = buffer.toString("utf-8");
32
+ const allLines = textContent.split("\n");
33
+ const totalFileLines = allLines.length;
34
+ const startLine = offset ? Math.max(0, offset - 1) : 0;
35
+ const startLineDisplay = startLine + 1;
36
+ if (startLine >= allLines.length) {
37
+ throw new Error(`Offset ${offset} is beyond end of file (${allLines.length} lines total)`);
38
+ }
39
+ let selectedContent;
40
+ let userLimitedLines;
41
+ if (limit !== undefined) {
42
+ const endLine = Math.min(startLine + limit, allLines.length);
43
+ selectedContent = allLines.slice(startLine, endLine).join("\n");
44
+ userLimitedLines = endLine - startLine;
45
+ }
46
+ else {
47
+ selectedContent = allLines.slice(startLine).join("\n");
48
+ }
49
+ const truncation = truncateHead(selectedContent);
50
+ let outputText;
51
+ let details;
52
+ if (truncation.firstLineExceedsLimit) {
53
+ outputText = `[Line ${startLineDisplay} is ${formatSize(Buffer.byteLength(allLines[startLine], "utf-8"))}, exceeds ${formatSize(DEFAULT_MAX_BYTES)} limit. Use bash: sed -n '${startLineDisplay}p' ${path} | head -c ${DEFAULT_MAX_BYTES}]`;
54
+ details = { truncation };
55
+ }
56
+ else if (truncation.truncated) {
57
+ const endLineDisplay = startLineDisplay + truncation.outputLines - 1;
58
+ const nextOffset = endLineDisplay + 1;
59
+ outputText = truncation.content;
60
+ if (truncation.truncatedBy === "lines") {
61
+ outputText += `\n\n[Showing lines ${startLineDisplay}-${endLineDisplay} of ${totalFileLines}. Use offset=${nextOffset} to continue.]`;
62
+ }
63
+ else {
64
+ outputText += `\n\n[Showing lines ${startLineDisplay}-${endLineDisplay} of ${totalFileLines} (${formatSize(DEFAULT_MAX_BYTES)} limit). Use offset=${nextOffset} to continue.]`;
65
+ }
66
+ details = { truncation };
67
+ }
68
+ else if (userLimitedLines !== undefined &&
69
+ startLine + userLimitedLines < allLines.length) {
70
+ const remaining = allLines.length - (startLine + userLimitedLines);
71
+ const nextOffset = startLine + userLimitedLines + 1;
72
+ outputText = truncation.content;
73
+ outputText += `\n\n[${remaining} more lines in file. Use offset=${nextOffset} to continue.]`;
74
+ }
75
+ else {
76
+ outputText = truncation.content;
77
+ }
78
+ if (isAborted())
79
+ return { content: [], details: undefined };
80
+ return { content: [{ type: "text", text: outputText }], details };
81
+ });
82
+ },
83
+ };
84
+ }
85
+ export const readTool = createReadTool(process.cwd());
86
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Resolve path to an executable on PATH. Returns the command name if found, null otherwise.
3
+ */
4
+ export declare function resolveBin(name: string): Promise<string | null>;
5
+ //# sourceMappingURL=resolve-bin.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { spawnSyncProcess } from "../core/utils.js";
2
+ /**
3
+ * Resolve path to an executable on PATH. Returns the command name if found, null otherwise.
4
+ */
5
+ export function resolveBin(name) {
6
+ return new Promise((resolve) => {
7
+ const cmd = process.platform === "win32" ? "where" : "which";
8
+ const args = process.platform === "win32" ? [name + ".exe", name] : [name];
9
+ try {
10
+ const result = spawnSyncProcess(cmd, args, { encoding: "utf-8", timeout: 5000 });
11
+ if (result.status === 0 && result.stdout) {
12
+ const first = (typeof result.stdout === "string" ? result.stdout : result.stdout?.toString() || "")
13
+ .trim()
14
+ .split(/\r?\n/)[0]
15
+ ?.trim();
16
+ if (first) {
17
+ resolve(first);
18
+ return;
19
+ }
20
+ }
21
+ }
22
+ catch {
23
+ // ignore
24
+ }
25
+ resolve(null);
26
+ });
27
+ }
28
+ //# sourceMappingURL=resolve-bin.js.map
@@ -0,0 +1,7 @@
1
+ export declare function getShellConfig(): {
2
+ shell: string;
3
+ args: string[];
4
+ };
5
+ export declare function getShellEnv(): NodeJS.ProcessEnv;
6
+ export declare function killProcessTree(pid: number): void;
7
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1,143 @@
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { spawnProcess } from "../core/utils.js";
4
+ import { spawnSyncProcess } from "../core/utils.js";
5
+ let cachedShellConfig = null;
6
+ let cachedLoginShellEnv = null;
7
+ function findBashOnPath() {
8
+ if (process.platform === "win32") {
9
+ try {
10
+ const syncResult = spawnSyncProcess("where", ["bash.exe"], {
11
+ encoding: "utf-8",
12
+ timeout: 5000,
13
+ });
14
+ if (syncResult.status === 0 && typeof syncResult.stdout === "string") {
15
+ const firstMatch = syncResult.stdout.trim().split(/\r?\n/)[0];
16
+ if (firstMatch && existsSync(firstMatch)) {
17
+ return firstMatch;
18
+ }
19
+ }
20
+ }
21
+ catch {
22
+ // ignore
23
+ }
24
+ return null;
25
+ }
26
+ try {
27
+ const syncResult = spawnSyncProcess("which", ["bash"], {
28
+ encoding: "utf-8",
29
+ timeout: 5000,
30
+ });
31
+ if (syncResult.status === 0 && typeof syncResult.stdout === "string") {
32
+ const firstMatch = syncResult.stdout.trim().split(/\r?\n/)[0];
33
+ if (firstMatch)
34
+ return firstMatch;
35
+ }
36
+ }
37
+ catch {
38
+ // ignore
39
+ }
40
+ return null;
41
+ }
42
+ export function getShellConfig() {
43
+ if (cachedShellConfig) {
44
+ return cachedShellConfig;
45
+ }
46
+ if (process.platform === "win32") {
47
+ const paths = [];
48
+ if (process.env.ProgramFiles) {
49
+ paths.push(`${process.env.ProgramFiles}\\Git\\bin\\bash.exe`);
50
+ }
51
+ if (process.env["ProgramFiles(x86)"]) {
52
+ paths.push(`${process.env["ProgramFiles(x86)"]}\\Git\\bin\\bash.exe`);
53
+ }
54
+ for (const p of paths) {
55
+ if (existsSync(p)) {
56
+ cachedShellConfig = { shell: p, args: ["-c"] };
57
+ return cachedShellConfig;
58
+ }
59
+ }
60
+ const bashOnPath = findBashOnPath();
61
+ if (bashOnPath) {
62
+ cachedShellConfig = { shell: bashOnPath, args: ["-c"] };
63
+ return cachedShellConfig;
64
+ }
65
+ throw new Error("No bash shell found. Install Git for Windows or add bash to PATH.");
66
+ }
67
+ if (existsSync("/bin/bash")) {
68
+ cachedShellConfig = { shell: "/bin/bash", args: ["-c"] };
69
+ return cachedShellConfig;
70
+ }
71
+ const bashOnPath = findBashOnPath();
72
+ if (bashOnPath) {
73
+ cachedShellConfig = { shell: bashOnPath, args: ["-c"] };
74
+ return cachedShellConfig;
75
+ }
76
+ cachedShellConfig = { shell: "sh", args: ["-c"] };
77
+ return cachedShellConfig;
78
+ }
79
+ function getLoginShellEnv() {
80
+ if (cachedLoginShellEnv) {
81
+ return cachedLoginShellEnv;
82
+ }
83
+ const shell = process.env.SHELL ?? (process.platform === "win32" ? undefined : "/bin/zsh");
84
+ if (!shell) {
85
+ cachedLoginShellEnv = { ...process.env };
86
+ return cachedLoginShellEnv;
87
+ }
88
+ try {
89
+ const quotedShell = shell.replace(/'/g, "'\\''");
90
+ const output = execSync(`'${quotedShell}' -ilc 'env'`, {
91
+ encoding: "utf-8",
92
+ timeout: 5000,
93
+ stdio: ["ignore", "pipe", "ignore"],
94
+ env: { ...process.env },
95
+ });
96
+ const loginEnv = { ...process.env };
97
+ for (const line of output.split(/\r?\n/)) {
98
+ const separatorIndex = line.indexOf("=");
99
+ if (separatorIndex <= 0) {
100
+ continue;
101
+ }
102
+ const key = line.slice(0, separatorIndex);
103
+ const value = line.slice(separatorIndex + 1);
104
+ loginEnv[key] = value;
105
+ }
106
+ cachedLoginShellEnv = loginEnv;
107
+ return cachedLoginShellEnv;
108
+ }
109
+ catch {
110
+ cachedLoginShellEnv = { ...process.env };
111
+ return cachedLoginShellEnv;
112
+ }
113
+ }
114
+ export function getShellEnv() {
115
+ return { ...getLoginShellEnv() };
116
+ }
117
+ export function killProcessTree(pid) {
118
+ if (process.platform === "win32") {
119
+ try {
120
+ spawnProcess("taskkill", ["/F", "/T", "/PID", String(pid)], {
121
+ stdio: "ignore",
122
+ detached: true,
123
+ });
124
+ }
125
+ catch {
126
+ // ignore
127
+ }
128
+ }
129
+ else {
130
+ try {
131
+ process.kill(-pid, "SIGKILL");
132
+ }
133
+ catch {
134
+ try {
135
+ process.kill(pid, "SIGKILL");
136
+ }
137
+ catch {
138
+ // already dead
139
+ }
140
+ }
141
+ }
142
+ }
143
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Skill Reference Tool
3
+ *
4
+ * Loads reference files from activated skills' references/ directories on-demand.
5
+ * This implements progressive disclosure - reference files are only loaded when needed.
6
+ */
7
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
8
+ import { type Static } from "@sinclair/typebox";
9
+ import type { Skill } from "@tarsk/shared";
10
+ /**
11
+ * Schema for skill reference tool input
12
+ */
13
+ declare const skillReferenceSchema: import("@sinclair/typebox").TObject<{
14
+ skillName: import("@sinclair/typebox").TString;
15
+ referencePath: import("@sinclair/typebox").TString;
16
+ }>;
17
+ export type SkillReferenceToolInput = Static<typeof skillReferenceSchema>;
18
+ /**
19
+ * Create a skill reference reader tool
20
+ */
21
+ export declare function createSkillReferenceTool(skills: Skill[]): AgentTool<typeof skillReferenceSchema>;
22
+ /**
23
+ * List all available skill references (utility function)
24
+ */
25
+ export declare function listSkillReferences(skills: Skill[]): Promise<Array<{
26
+ skillName: string;
27
+ referencePath: string;
28
+ }>>;
29
+ export {};
30
+ //# sourceMappingURL=skill-reference-tool.d.ts.map
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Skill Reference Tool
3
+ *
4
+ * Loads reference files from activated skills' references/ directories on-demand.
5
+ * This implements progressive disclosure - reference files are only loaded when needed.
6
+ */
7
+ import { readFile, readdir } from "fs/promises";
8
+ import { join, normalize, relative } from "path";
9
+ import { existsSync } from "fs";
10
+ import { Type } from "@sinclair/typebox";
11
+ /**
12
+ * Validate that a reference path is safe (no path traversal attacks)
13
+ */
14
+ function isPathSafe(basePath, requestedPath) {
15
+ const normalized = normalize(requestedPath);
16
+ const fullPath = join(basePath, normalized);
17
+ const relativePath = relative(basePath, fullPath);
18
+ // Check if the relative path tries to escape the base directory
19
+ return !relativePath.startsWith("..") && !relativePath.startsWith("/");
20
+ }
21
+ /**
22
+ * Schema for skill reference tool input
23
+ */
24
+ const skillReferenceSchema = Type.Object({
25
+ skillName: Type.String({ description: "Name of the skill" }),
26
+ referencePath: Type.String({
27
+ description: 'Path to the reference file relative to the skill\'s references/ directory (e.g., "api-reference.md" or "guides/setup.md")',
28
+ }),
29
+ });
30
+ /**
31
+ * Create a skill reference reader tool
32
+ */
33
+ export function createSkillReferenceTool(skills) {
34
+ return {
35
+ name: "read_skill_reference",
36
+ label: "read_skill_reference",
37
+ description: "Read a reference file from an activated skill. Skills provide additional documentation in their references/ directory.",
38
+ parameters: skillReferenceSchema,
39
+ execute: async (_toolCallId, { skillName, referencePath }) => {
40
+ // Find the skill
41
+ const skill = skills.find((s) => s.name === skillName);
42
+ if (!skill) {
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: `Skill not found: ${skillName}. Available skills: ${skills.map((s) => s.name).join(", ")}`,
48
+ },
49
+ ],
50
+ details: undefined,
51
+ };
52
+ }
53
+ // Check if references directory exists
54
+ const referencesDir = join(skill.skillPath, "references");
55
+ if (!existsSync(referencesDir)) {
56
+ return {
57
+ content: [
58
+ { type: "text", text: `Skill '${skillName}' has no references directory` },
59
+ ],
60
+ details: undefined,
61
+ };
62
+ }
63
+ // Validate path safety (prevent path traversal)
64
+ if (!isPathSafe(referencesDir, referencePath)) {
65
+ return {
66
+ content: [
67
+ {
68
+ type: "text",
69
+ text: `Invalid reference path: ${referencePath}. Path must be within the skill's references directory.`,
70
+ },
71
+ ],
72
+ details: undefined,
73
+ };
74
+ }
75
+ // Read the reference file
76
+ const fullPath = join(referencesDir, referencePath);
77
+ if (!existsSync(fullPath)) {
78
+ // List available references for better error message
79
+ try {
80
+ const availableRefs = await listReferencesRecursive(referencesDir);
81
+ return {
82
+ content: [
83
+ {
84
+ type: "text",
85
+ text: `Reference file '${referencePath}' not found in skill '${skillName}'. Available references:\n${availableRefs.join("\n")}`,
86
+ },
87
+ ],
88
+ details: undefined,
89
+ };
90
+ }
91
+ catch {
92
+ return {
93
+ content: [
94
+ {
95
+ type: "text",
96
+ text: `Reference file '${referencePath}' not found in skill '${skillName}'`,
97
+ },
98
+ ],
99
+ details: undefined,
100
+ };
101
+ }
102
+ }
103
+ try {
104
+ const content = await readFile(fullPath, "utf-8");
105
+ return {
106
+ content: [{ type: "text", text: content }],
107
+ details: undefined,
108
+ };
109
+ }
110
+ catch (error) {
111
+ return {
112
+ content: [
113
+ {
114
+ type: "text",
115
+ text: `Failed to read reference file: ${error instanceof Error ? error.message : String(error)}`,
116
+ },
117
+ ],
118
+ details: undefined,
119
+ };
120
+ }
121
+ },
122
+ };
123
+ }
124
+ /**
125
+ * Recursively list all reference files in a directory
126
+ */
127
+ async function listReferencesRecursive(dir, prefix = "") {
128
+ const files = [];
129
+ try {
130
+ const entries = await readdir(dir, { withFileTypes: true });
131
+ for (const entry of entries) {
132
+ const relativePath = prefix ? join(prefix, entry.name) : entry.name;
133
+ if (entry.isDirectory()) {
134
+ const subFiles = await listReferencesRecursive(join(dir, entry.name), relativePath);
135
+ files.push(...subFiles);
136
+ }
137
+ else {
138
+ files.push(relativePath);
139
+ }
140
+ }
141
+ }
142
+ catch (error) {
143
+ console.error(`Failed to list references in ${dir}:`, error);
144
+ }
145
+ return files;
146
+ }
147
+ /**
148
+ * List all available skill references (utility function)
149
+ */
150
+ export async function listSkillReferences(skills) {
151
+ const references = [];
152
+ for (const skill of skills) {
153
+ const referencesDir = join(skill.skillPath, "references");
154
+ if (!existsSync(referencesDir))
155
+ continue;
156
+ try {
157
+ const files = await listReferencesRecursive(referencesDir);
158
+ for (const file of files) {
159
+ references.push({
160
+ skillName: skill.name,
161
+ referencePath: file,
162
+ });
163
+ }
164
+ }
165
+ catch (error) {
166
+ console.error(`Failed to list references for skill ${skill.name}:`, error);
167
+ }
168
+ }
169
+ return references;
170
+ }
171
+ //# sourceMappingURL=skill-reference-tool.js.map
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Skill Script Tool
3
+ *
4
+ * Executes scripts from activated skills' scripts/ directories.
5
+ * Scripts can be written in any supported language (.sh, .py, .js, etc.)
6
+ */
7
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
8
+ import { type Static } from "@sinclair/typebox";
9
+ import type { Skill } from "@tarsk/shared";
10
+ /**
11
+ * Schema for skill script tool input
12
+ */
13
+ declare const skillScriptSchema: import("@sinclair/typebox").TObject<{
14
+ skillName: import("@sinclair/typebox").TString;
15
+ scriptName: import("@sinclair/typebox").TString;
16
+ args: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
17
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
18
+ }>;
19
+ export type SkillScriptToolInput = Static<typeof skillScriptSchema>;
20
+ /**
21
+ * Create a skill script executor tool
22
+ */
23
+ export declare function createSkillScriptTool(skills: Skill[], cwd: string): AgentTool<typeof skillScriptSchema>;
24
+ /**
25
+ * List all available skill scripts
26
+ */
27
+ export declare function listSkillScripts(skills: Skill[]): Promise<Array<{
28
+ skillName: string;
29
+ scriptName: string;
30
+ path: string;
31
+ }>>;
32
+ export {};
33
+ //# sourceMappingURL=skill-tool.d.ts.map