tarsk 0.6.87 → 0.6.89

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 (255) hide show
  1. package/README.md +63 -24
  2. package/dist/bundled-skills/email-me/SKILL.md +15 -0
  3. package/dist/bundled-skills/email-me/scripts/__tests__/email_me.test.js +64 -0
  4. package/dist/bundled-skills/email-me/scripts/email_me.js +45 -0
  5. package/dist/bundled-skills/handoff/SKILL.md +19 -0
  6. package/dist/bundled-skills/tarsk-agent/SKILL.md +372 -0
  7. package/dist/bundled-skills/tarsk-ask-user/SKILL.md +18 -0
  8. package/dist/bundled-skills/tarsk-ask-user/scripts/ask_user.js +101 -0
  9. package/dist/bundled-skills/tarsk-bash/SKILL.md +17 -0
  10. package/dist/bundled-skills/tarsk-bash/scripts/bash.js +248 -0
  11. package/dist/bundled-skills/tarsk-browser/SKILL.md +17 -0
  12. package/dist/bundled-skills/tarsk-browser/scripts/browser.js +252 -0
  13. package/dist/bundled-skills/tarsk-chat-title/SKILL.md +14 -0
  14. package/dist/bundled-skills/tarsk-chat-title/scripts/chat_title.js +37 -0
  15. package/dist/bundled-skills/tarsk-connect-mcp/SKILL.md +23 -0
  16. package/dist/bundled-skills/tarsk-connect-mcp/scripts/__tests__/connect_mcp.test.js +68 -0
  17. package/dist/bundled-skills/tarsk-connect-mcp/scripts/connect_mcp.js +119 -0
  18. package/dist/bundled-skills/tarsk-create-project/SKILL.md +25 -0
  19. package/dist/bundled-skills/tarsk-create-project/scripts/__tests__/create_project.test.js +94 -0
  20. package/dist/bundled-skills/tarsk-create-project/scripts/create_project.js +88 -0
  21. package/dist/bundled-skills/tarsk-edit/SKILL.md +18 -0
  22. package/dist/bundled-skills/tarsk-edit/scripts/edit.js +118 -0
  23. package/dist/bundled-skills/tarsk-execute-skill-script/SKILL.md +19 -0
  24. package/dist/bundled-skills/tarsk-execute-skill-script/scripts/execute_skill_script.js +77 -0
  25. package/dist/bundled-skills/tarsk-fetch/SKILL.md +18 -0
  26. package/dist/bundled-skills/tarsk-fetch/scripts/fetch.js +38 -0
  27. package/dist/bundled-skills/tarsk-find/SKILL.md +16 -0
  28. package/dist/bundled-skills/tarsk-find/scripts/find.js +78 -0
  29. package/dist/bundled-skills/tarsk-find-images/SKILL.md +18 -0
  30. package/dist/bundled-skills/tarsk-find-images/scripts/find_images.js +78 -0
  31. package/dist/bundled-skills/tarsk-generate-image/SKILL.md +18 -0
  32. package/dist/bundled-skills/tarsk-generate-image/scripts/generate_image.js +55 -0
  33. package/dist/bundled-skills/tarsk-get-observation/SKILL.md +19 -0
  34. package/dist/bundled-skills/tarsk-get-observation/scripts/get_observation.js +293 -0
  35. package/dist/bundled-skills/tarsk-grep/SKILL.md +16 -0
  36. package/dist/bundled-skills/tarsk-grep/scripts/grep.js +174 -0
  37. package/dist/bundled-skills/tarsk-history/SKILL.md +15 -0
  38. package/dist/bundled-skills/tarsk-history/scripts/history.js +68 -0
  39. package/dist/bundled-skills/tarsk-improve/SKILL.md +232 -0
  40. package/dist/bundled-skills/tarsk-improve/references/signals.md +16 -0
  41. package/dist/bundled-skills/tarsk-improve/scripts/durable-runs.ts +635 -0
  42. package/dist/bundled-skills/tarsk-improve/scripts/ensure-exported.ts +238 -0
  43. package/dist/bundled-skills/tarsk-improve/scripts/export-tool-skills-lib.ts +299 -0
  44. package/dist/bundled-skills/tarsk-improve/scripts/summarize-session.ts +126 -0
  45. package/dist/bundled-skills/tarsk-jobs/SKILL.md +18 -0
  46. package/dist/bundled-skills/tarsk-jobs/scripts/job_kill.js +45 -0
  47. package/dist/bundled-skills/tarsk-jobs/scripts/job_list.js +64 -0
  48. package/dist/bundled-skills/tarsk-jobs/scripts/job_output.js +66 -0
  49. package/dist/bundled-skills/tarsk-notes/SKILL.md +17 -0
  50. package/dist/bundled-skills/tarsk-notes/scripts/notes.js +86 -0
  51. package/dist/bundled-skills/tarsk-projects/SKILL.md +18 -0
  52. package/dist/bundled-skills/tarsk-projects/scripts/projects.js +54 -0
  53. package/dist/bundled-skills/tarsk-prompt-project/SKILL.md +18 -0
  54. package/dist/bundled-skills/tarsk-prompt-project/scripts/prompt_project.js +58 -0
  55. package/dist/bundled-skills/tarsk-propose-branch/SKILL.md +16 -0
  56. package/dist/bundled-skills/tarsk-propose-branch/scripts/propose_branch.js +45 -0
  57. package/dist/bundled-skills/tarsk-read/SKILL.md +17 -0
  58. package/dist/bundled-skills/tarsk-read/scripts/read.js +331 -0
  59. package/dist/bundled-skills/tarsk-read-skill/SKILL.md +16 -0
  60. package/dist/bundled-skills/tarsk-read-skill/scripts/read_skill.js +37 -0
  61. package/dist/bundled-skills/tarsk-read-skill-reference/SKILL.md +19 -0
  62. package/dist/bundled-skills/tarsk-read-skill-reference/scripts/read_skill_reference.js +60 -0
  63. package/dist/bundled-skills/tarsk-run-js/SKILL.md +18 -0
  64. package/dist/bundled-skills/tarsk-run-js/scripts/run_js.js +192 -0
  65. package/dist/bundled-skills/tarsk-tasks/SKILL.md +18 -0
  66. package/dist/bundled-skills/tarsk-tasks/scripts/tasks.js +96 -0
  67. package/dist/bundled-skills/tarsk-todo/SKILL.md +16 -0
  68. package/dist/bundled-skills/tarsk-todo/scripts/todo.js +165 -0
  69. package/dist/bundled-skills/tarsk-web-search/SKILL.md +15 -0
  70. package/dist/bundled-skills/tarsk-web-search/scripts/web_search.js +120 -0
  71. package/dist/bundled-skills/tarsk-write/SKILL.md +16 -0
  72. package/dist/bundled-skills/tarsk-write/scripts/write.js +57 -0
  73. package/dist/index.js +217754 -211927
  74. package/dist/public/assets/{alert-dialog-DVaEQlVa.js → alert-dialog-BcZULJsX.js} +1 -1
  75. package/dist/public/assets/api-8Rp2LlXt.js +1 -0
  76. package/dist/public/assets/api-Cp9I7CxD.js +2 -0
  77. package/dist/public/assets/{async-error-boundary-DH6Sqgmt.js → async-error-boundary-CFVUPiuG.js} +1 -1
  78. package/dist/public/assets/browser-tab-CPPorbL6.js +12 -0
  79. package/dist/public/assets/button-DDaJhJP1.js +1 -0
  80. package/dist/public/assets/{card-BkOGFps5.js → card-DAc45J1v.js} +1 -1
  81. package/dist/public/assets/chat-dock-context-DbiJNr3O.js +1 -0
  82. package/dist/public/assets/chat-handlers-context-DYU2LQ5V.js +9 -0
  83. package/dist/public/assets/commit-dialog-DPaci3dp.js +1 -0
  84. package/dist/public/assets/{commit-error-dialog-D3S6kRVr.js → commit-error-dialog-Dnlkgb_H.js} +1 -1
  85. package/dist/public/assets/{commit-method-fields-BEKfSRyW.js → commit-method-fields-Xt3vbwUg.js} +1 -1
  86. package/dist/public/assets/conversation-history-view-CqIugfyO.js +1 -0
  87. package/dist/public/assets/{create-project-dialog-nquqlloK.js → create-project-dialog-DStWPoDE.js} +2 -2
  88. package/dist/public/assets/{create-project-workspace-C4tXAUWJ.js → create-project-workspace-CJ94yHAB.js} +2 -2
  89. package/dist/public/assets/create-repo-dialog-B_QiEz-v.js +1 -0
  90. package/dist/public/assets/{delete-confirm-dialog-SpYpU1AX.js → delete-confirm-dialog-D1N86piR.js} +1 -1
  91. package/dist/public/assets/dialog-D_12AsZd.js +1 -0
  92. package/dist/public/assets/diff-view-4koPcOcE.js +4 -0
  93. package/dist/public/assets/{dist-NcyjV9Gu.js → dist-2xH_pFmV.js} +1 -1
  94. package/dist/public/assets/{dist-BTu7PDzc.js → dist-AbkJBHH5.js} +1 -1
  95. package/dist/public/assets/{dist-lFBinzor.js → dist-B-h6Wj39.js} +1 -1
  96. package/dist/public/assets/dist-CgbWuuq4.js +1 -0
  97. package/dist/public/assets/{dist-f54JuzFV.js → dist-DOz2WXwX.js} +1 -1
  98. package/dist/public/assets/{dist-CqrmQxmV.js → dist-DfnQ9YJh.js} +1 -1
  99. package/dist/public/assets/{dist-BOfRC57H.js → dist-JGbQ_EJY.js} +1 -1
  100. package/dist/public/assets/{dist-ButPmyjr.js → dist-pCVg1Jdl.js} +1 -1
  101. package/dist/public/assets/dist-v_MvKS2-.js +2 -0
  102. package/dist/public/assets/{es2015-CE7VcoOH.js → es2015-eNVkKfFF.js} +1 -1
  103. package/dist/public/assets/{explorer-file-drop-CEbBlDEp.js → explorer-file-drop-DAP7ha-E.js} +1 -1
  104. package/dist/public/assets/{explorer-monaco-editor-Bgo9Y1cP.js → explorer-monaco-editor-ChJZBFy5.js} +1 -1
  105. package/dist/public/assets/explorer-tab-view-Bt9hRZUm.js +2 -0
  106. package/dist/public/assets/explorer-tree-CAs89lPz.js +1 -0
  107. package/dist/public/assets/{explorer-view-BuTa_0Uq.js → explorer-view-B1JuejkU.js} +3 -3
  108. package/dist/public/assets/git-history-dialog-Dqj1p35g.js +1 -0
  109. package/dist/public/assets/index-CcAwxnT5.js +97 -0
  110. package/dist/public/assets/index-dNrgKdYv.css +1 -0
  111. package/dist/public/assets/{label-C31qF5zZ.js → label-BCs5CZEs.js} +1 -1
  112. package/dist/public/assets/markdown-renderer-DQONI6WG.js +10 -0
  113. package/dist/public/assets/{mcp-manager-C3K_62H2.js → mcp-manager-D2FG-h2e.js} +1 -1
  114. package/dist/public/assets/{minus-l6BdrAEk.js → minus-CgQcbBQT.js} +1 -1
  115. package/dist/public/assets/{model-list-controls-DwW8S18v.js → model-list-controls-B6ofHWh3.js} +1 -1
  116. package/dist/public/assets/onboarding-dialog-DAut3X4K.js +1 -0
  117. package/dist/public/assets/{pill-tabs-CmvvHdKG.js → pill-tabs-BAhOHad7.js} +1 -1
  118. package/dist/public/assets/progress-indicator-hJ74ac5W.js +1 -0
  119. package/dist/public/assets/project-coding-view-B2FpHeiO.js +1 -0
  120. package/dist/public/assets/{project-danger-zone-view-D18k4pUF.js → project-danger-zone-view-BqP1dcRT.js} +1 -1
  121. package/dist/public/assets/{project-env-vars-view-BWFqoaFD.js → project-env-vars-view-zhigkQFG.js} +1 -1
  122. package/dist/public/assets/project-model-aliases-view-APAVFfym.js +1 -0
  123. package/dist/public/assets/project-settings-view-FnK-LRsv.js +1 -0
  124. package/dist/public/assets/project-tools-view-Dmp5ViRC.js +1 -0
  125. package/dist/public/assets/providers-list-view-Clbp73Hh.js +1 -0
  126. package/dist/public/assets/pull-request-dialog-D40BQPMk.js +1 -0
  127. package/dist/public/assets/pull-with-changes-dialog-pkXK-VP2.js +1 -0
  128. package/dist/public/assets/push-before-pr-dialog-DH91JHEC.js +1 -0
  129. package/dist/public/assets/query-keys-CcnonAAG.js +1 -0
  130. package/dist/public/assets/remote-media-url-C-GdJb-D.js +1 -0
  131. package/dist/public/assets/{scroll-area-BWc4OPsj.js → scroll-area-DGF9wUqQ.js} +1 -1
  132. package/dist/public/assets/{select-B6RizwDW.js → select-DMcNYwgt.js} +1 -1
  133. package/dist/public/assets/settings-general-tabs-view-DBZQbihJ.js +2 -0
  134. package/dist/public/assets/settings-general-view-0dhBET2R.js +1 -0
  135. package/dist/public/assets/{settings-list-D35rpAof.js → settings-list-Co3JPr9w.js} +1 -1
  136. package/dist/public/assets/settings-logs-view-DvHXUDko.js +5 -0
  137. package/dist/public/assets/settings-mcp-servers-view-414Dt5py.js +5 -0
  138. package/dist/public/assets/settings-models-view-ByeR7Enb.js +1 -0
  139. package/dist/public/assets/settings-plugins-view-8te2MPyh.js +2 -0
  140. package/dist/public/assets/settings-providers-view-BAuv9gam.js +2 -0
  141. package/dist/public/assets/settings-remote-machines-view-CHyywazU.js +1 -0
  142. package/dist/public/assets/settings-setup-view-Btp46Vh_.js +2 -0
  143. package/dist/public/assets/settings-skills-view-BNVx4bZl.js +2 -0
  144. package/dist/public/assets/{settings-slack-view-DkclyaBc.js → settings-slack-view-Caly5yGt.js} +1 -1
  145. package/dist/public/assets/settings-slash-commands-view-m6mp1knu.js +1 -0
  146. package/dist/public/assets/{settings-statistics-view-B03ZZjEy.js → settings-statistics-view-BnOxr4sZ.js} +1 -1
  147. package/dist/public/assets/settings-storage-view-Dg8xfpTG.js +1 -0
  148. package/dist/public/assets/settings-subagents-view-CucwEk2A.js +2 -0
  149. package/dist/public/assets/settings-system-prompt-view-CEDU2saT.js +1 -0
  150. package/dist/public/assets/{settings-tab-bar-ajzyt79U.js → settings-tab-bar-CdIbQ0WI.js} +1 -1
  151. package/dist/public/assets/settings-view-XcJhRclT.js +2 -0
  152. package/dist/public/assets/{slug-utils-D2jhPz-o.js → slug-utils-CO6nui1C.js} +1 -1
  153. package/dist/public/assets/square-CtxvwmM2.js +1 -0
  154. package/dist/public/assets/store-W78TGOIO.js +8 -0
  155. package/dist/public/assets/{table-C3Hc0Gwy.js → table-CQMqIW_-.js} +1 -1
  156. package/dist/public/assets/task-utils-Cnq9Eszt.js +1 -0
  157. package/dist/public/assets/tasks-view-B8_jkq_a.js +1 -0
  158. package/dist/public/assets/{terminal-panel-DCKqScJu.js → terminal-panel-xoLVfA-h.js} +2 -2
  159. package/dist/public/assets/{toggle-group-DqSxGqvP.js → toggle-group-CPmseZfb.js} +1 -1
  160. package/dist/public/assets/{tooltip-CJKJfu0l.js → tooltip-CqwCZ7wt.js} +1 -1
  161. package/dist/public/assets/{use-account-settings-query-AUeOqKvo.js → use-account-settings-query-D_qL1I4w.js} +1 -1
  162. package/dist/public/assets/{use-active-dock-panel-instance-BvAhUd_V.js → use-active-dock-panel-instance-kmJOnmL7.js} +1 -1
  163. package/dist/public/assets/use-browser-overlay-block-CO1pUEAZ.js +1 -0
  164. package/dist/public/assets/{use-git-check-B_5Jak2s.js → use-git-check-BD9gdXpK.js} +1 -1
  165. package/dist/public/assets/{use-installed-ai-files-iy_AB0dN.js → use-installed-ai-files-Nn-sN_V2.js} +1 -1
  166. package/dist/public/assets/use-open-chat-dock-panel-CXzpgxVs.js +1 -0
  167. package/dist/public/assets/{use-projects-BmhAMgxB.js → use-projects-B0xTjTaA.js} +2 -2
  168. package/dist/public/assets/utils-CqsIXqSC.js +1 -0
  169. package/dist/public/assets/web-BNWoiS4w.js +1 -0
  170. package/dist/public/assets/web-C1tBQoCB.js +1 -0
  171. package/dist/public/assets/web-Dlo3GwCf.js +1 -0
  172. package/dist/public/assets/web-cJXG33sT.js +1 -0
  173. package/dist/public/fonts/schibsted-grotesk-latin-ext-wght-normal.woff2 +0 -0
  174. package/dist/public/fonts/schibsted-grotesk-latin-wght-normal.woff2 +0 -0
  175. package/dist/public/index.html +46 -46
  176. package/package.json +9 -9
  177. package/dist/public/assets/account-view-5q3pHEHY.js +0 -1
  178. package/dist/public/assets/ai-spinner-DHwhlk4j.js +0 -1
  179. package/dist/public/assets/api-BdebJfuN.js +0 -1
  180. package/dist/public/assets/api-COO2LfdU.js +0 -2
  181. package/dist/public/assets/browser-overlay-block-CiDtkfup.js +0 -1
  182. package/dist/public/assets/browser-tab-CVdYLmW5.js +0 -12
  183. package/dist/public/assets/button-Dp5XDZNR.js +0 -1
  184. package/dist/public/assets/chat-dock-context-ymLoO90X.js +0 -1
  185. package/dist/public/assets/checkbox-D-BV8-Z_.js +0 -1
  186. package/dist/public/assets/commit-dialog-CEbCFh1x.js +0 -1
  187. package/dist/public/assets/conversation-history-view-CVMD8hUU.js +0 -1
  188. package/dist/public/assets/create-repo-dialog-B5IE3pUJ.js +0 -1
  189. package/dist/public/assets/dialog-pHPeIGaB.js +0 -1
  190. package/dist/public/assets/diff-view-Cy6nPdX-.js +0 -4
  191. package/dist/public/assets/dist-D5vgS4RP.js +0 -2
  192. package/dist/public/assets/explorer-tab-view-C-8QZO9S.js +0 -2
  193. package/dist/public/assets/explorer-tree-HrLSFgcI.js +0 -1
  194. package/dist/public/assets/git-history-dialog-ClfF5IOn.js +0 -1
  195. package/dist/public/assets/index-BBLA5zVt.css +0 -1
  196. package/dist/public/assets/index-CalVAwXj.js +0 -104
  197. package/dist/public/assets/markdown-renderer-DXRBG7uP.js +0 -10
  198. package/dist/public/assets/onboarding-dialog-BtLy0wjC.js +0 -1
  199. package/dist/public/assets/progress-indicator-4zQXqOqP.js +0 -1
  200. package/dist/public/assets/project-coding-view-CyJwnJes.js +0 -1
  201. package/dist/public/assets/project-model-aliases-view-D3tYNkkM.js +0 -1
  202. package/dist/public/assets/project-settings-view-0oN9vFvD.js +0 -1
  203. package/dist/public/assets/project-tools-view-DT87KPjE.js +0 -1
  204. package/dist/public/assets/providers-list-view-DCnh0W-5.js +0 -1
  205. package/dist/public/assets/pull-request-dialog-BdJxYQwu.js +0 -1
  206. package/dist/public/assets/pull-with-changes-dialog-Do9x9neW.js +0 -1
  207. package/dist/public/assets/push-before-pr-dialog-C-9z2O0-.js +0 -1
  208. package/dist/public/assets/query-keys-BwswkbMn.js +0 -1
  209. package/dist/public/assets/remote-media-url-B8OFqxOM.js +0 -1
  210. package/dist/public/assets/settings-general-tabs-view-Dcek-ysB.js +0 -2
  211. package/dist/public/assets/settings-general-view-DhA2N6G5.js +0 -1
  212. package/dist/public/assets/settings-logs-view-eEUTIMeb.js +0 -5
  213. package/dist/public/assets/settings-mcp-servers-view-_oeuVkUe.js +0 -5
  214. package/dist/public/assets/settings-models-view-DW-ZmVup.js +0 -1
  215. package/dist/public/assets/settings-plugins-view-DTooco_c.js +0 -2
  216. package/dist/public/assets/settings-providers-view-CEeJkhg9.js +0 -2
  217. package/dist/public/assets/settings-remote-machines-view--UB8GlCK.js +0 -1
  218. package/dist/public/assets/settings-setup-view-DFL6DlYS.js +0 -2
  219. package/dist/public/assets/settings-skills-view-xS569-Kb.js +0 -2
  220. package/dist/public/assets/settings-slash-commands-view-DrCiayfq.js +0 -1
  221. package/dist/public/assets/settings-storage-view-CQnaVOt_.js +0 -1
  222. package/dist/public/assets/settings-subagents-view-DIctUJcE.js +0 -2
  223. package/dist/public/assets/settings-system-prompt-view-BMDbrFRR.js +0 -1
  224. package/dist/public/assets/settings-view-8M6sbGiX.js +0 -2
  225. package/dist/public/assets/store-CxUwqrZ5.js +0 -8
  226. package/dist/public/assets/task-utils-WAei2PDi.js +0 -1
  227. package/dist/public/assets/tasks-view-DKyqgGdE.js +0 -1
  228. package/dist/public/assets/use-browser-overlay-block-z9imTmiZ.js +0 -1
  229. package/dist/public/assets/use-open-chat-dock-panel-w3hc5Vxn.js +0 -1
  230. package/dist/public/assets/utils-mYB1USG6.js +0 -1
  231. package/dist/public/assets/web-C6Gm4nQ0.js +0 -1
  232. package/dist/public/assets/web-DFlyNg8o.js +0 -1
  233. package/dist/public/assets/web-DlEPs8Xe.js +0 -1
  234. package/dist/public/assets/web-Gx3xReQH.js +0 -1
  235. package/dist/public/backgrounds/arctic-tundra.avif +0 -0
  236. package/dist/public/backgrounds/autumn-leaves.avif +0 -0
  237. package/dist/public/backgrounds/coastal-cliff.avif +0 -0
  238. package/dist/public/backgrounds/floating-waterfall.avif +0 -0
  239. package/dist/public/backgrounds/forest-path.avif +0 -0
  240. package/dist/public/backgrounds/garden-path.avif +0 -0
  241. package/dist/public/backgrounds/glow-marsh.avif +0 -0
  242. package/dist/public/backgrounds/golden-wheat.avif +0 -0
  243. package/dist/public/backgrounds/moon-desert.avif +0 -0
  244. package/dist/public/backgrounds/night-pond.avif +0 -0
  245. package/dist/public/backgrounds/prairie-grassland.avif +0 -0
  246. package/dist/public/backgrounds/river-winding.avif +0 -0
  247. package/dist/public/backgrounds/salt-flat.avif +0 -0
  248. package/dist/public/backgrounds/salt-marsh.avif +0 -0
  249. package/dist/public/backgrounds/sandy-beach.avif +0 -0
  250. package/dist/public/backgrounds/snow-river.avif +0 -0
  251. package/dist/public/backgrounds/sunset-pond.avif +0 -0
  252. package/dist/public/fonts/plus-jakarta-sans-cyrillic-ext-wght-normal.woff2 +0 -0
  253. package/dist/public/fonts/plus-jakarta-sans-latin-ext-wght-normal.woff2 +0 -0
  254. package/dist/public/fonts/plus-jakarta-sans-latin-wght-normal.woff2 +0 -0
  255. package/dist/public/fonts/plus-jakarta-sans-vietnamese-wght-normal.woff2 +0 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * tasks — ok/error JSON copy in the Skill; host owns DB + launch.
3
+ */
4
+
5
+ export const description =
6
+ "Project tasks. add/schedule: title+description required; optional tags, skillRef, trigger. list: id/title/status/tags, hides Done; filter query/status/tags. get: full task. tags: vocabulary+counts. update any field (null clears trigger/skill). implement this chat; runNow new thread (scheduled/event only). delete. Target by id or unique reference. Truncated ids resolve when unique. Skills load only at run.";
7
+
8
+ export const parameters = {
9
+ type: "object",
10
+ required: ["action"],
11
+ properties: {
12
+ action: {
13
+ anyOf: [
14
+ { const: "add", type: "string" },
15
+ { const: "schedule", type: "string" },
16
+ { const: "list", type: "string" },
17
+ { const: "get", type: "string" },
18
+ { const: "tags", type: "string" },
19
+ { const: "update", type: "string" },
20
+ { const: "implement", type: "string" },
21
+ { const: "runNow", type: "string" },
22
+ { const: "delete", type: "string" },
23
+ ],
24
+ },
25
+ description: { type: "string" },
26
+ title: { type: "string" },
27
+ query: {
28
+ description: "list: title/description substring",
29
+ type: "string",
30
+ },
31
+ status: {
32
+ anyOf: [
33
+ { const: "Ready", type: "string" },
34
+ { const: "Plan", type: "string" },
35
+ { const: "Build", type: "string" },
36
+ { const: "Test", type: "string" },
37
+ { const: "Review", type: "string" },
38
+ { const: "Done", type: "string" },
39
+ ],
40
+ },
41
+ id: { type: "string" },
42
+ reference: {
43
+ description: "unique title/ticket, e.g. oc-2",
44
+ type: "string",
45
+ },
46
+ tags: {
47
+ description:
48
+ "set on write; AND-filter on list; prefer existing tags via the tags action; create a new tag only when the user explicitly asks; max 10 tags, 40 chars",
49
+ type: "array",
50
+ items: { type: "string" },
51
+ },
52
+ triggerType: {
53
+ description: "null clears",
54
+ anyOf: [
55
+ { const: "schedule", type: "string" },
56
+ { const: "event", type: "string" },
57
+ { type: "null" },
58
+ ],
59
+ },
60
+ scheduledAt: {
61
+ description: "ISO one-shot",
62
+ anyOf: [{ type: "string" }, { type: "null" }],
63
+ },
64
+ scheduleCron: {
65
+ description: "cron",
66
+ anyOf: [{ type: "string" }, { type: "null" }],
67
+ },
68
+ timezone: {
69
+ anyOf: [{ type: "string" }, { type: "null" }],
70
+ },
71
+ enabled: { type: "boolean" },
72
+ skillRef: {
73
+ description: "//bundled or /project-or-global",
74
+ anyOf: [{ type: "string" }, { type: "null" }],
75
+ },
76
+ eventKey: {
77
+ description: "required for event",
78
+ anyOf: [{ type: "string" }, { type: "null" }],
79
+ },
80
+ },
81
+ };
82
+
83
+ /** @param {Record<string, unknown>} args @param {import("../../../../src/tools/agent-runtime/types.js").AgentRuntime} context */
84
+ export async function execute(args, context) {
85
+ const result = await context.tasks.query(args);
86
+ if (!result.ok) {
87
+ return {
88
+ content: [{ type: "text", text: result.error }],
89
+ details: undefined,
90
+ };
91
+ }
92
+ return {
93
+ content: [{ type: "text", text: JSON.stringify(result.data) }],
94
+ details: undefined,
95
+ };
96
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: tarsk-todo
3
+ description: >-
4
+ Tarsk Tool skill publishing: todo.
5
+ version: 2.0.0
6
+ tools:
7
+ - todo
8
+ disable-model-invocation: true
9
+ ---
10
+
11
+ # tarsk-todo
12
+
13
+ Publishes: todo.
14
+
15
+ Logic and formatting live in `scripts/todo.js`. Persistence and progress.txt
16
+ are `context.todos` (CLI host).
@@ -0,0 +1,165 @@
1
+ /**
2
+ * todo — formatting and action policy in the Skill; store via context.todos (host).
3
+ */
4
+
5
+ export const description =
6
+ "Break work into todos (~2 when planning). Actions: add (descriptions), update/delete (ids), list, learnings. Status pending→working→done. Mark each item done as soon as that work is finished. Do not send the final reply while any todo is pending or working. Mark verify/check todos done only after checks pass. Optional Goal Round bookkeeping: passes=true once an item's work is verified; learnings appends progress.txt. list = full checklist; update/delete = short ack plus remaining incomplete items.";
7
+
8
+ export const parameters = {
9
+ type: "object",
10
+ required: ["action"],
11
+ properties: {
12
+ action: {
13
+ anyOf: [
14
+ { const: "add", type: "string" },
15
+ { const: "update", type: "string" },
16
+ { const: "list", type: "string" },
17
+ { const: "delete", type: "string" },
18
+ { const: "learnings", type: "string" },
19
+ ],
20
+ },
21
+ descriptions: {
22
+ description: "required for add",
23
+ type: "array",
24
+ items: { type: "string" },
25
+ },
26
+ ids: {
27
+ description: "required for update/delete",
28
+ type: "array",
29
+ items: { type: "string" },
30
+ },
31
+ status: {
32
+ anyOf: [
33
+ { const: "pending", type: "string" },
34
+ { const: "working", type: "string" },
35
+ { const: "done", type: "string" },
36
+ ],
37
+ },
38
+ assignedTo: { type: "string" },
39
+ passes: {
40
+ description: "true once this item's work is verified",
41
+ type: "boolean",
42
+ },
43
+ learnings: {
44
+ description: "required for learnings; appends progress.txt",
45
+ type: "string",
46
+ },
47
+ },
48
+ };
49
+
50
+ const ADD_TODOS_NOTE =
51
+ "Mark each item done as you finish it. Do not end the turn with pending todos.";
52
+
53
+ function textResult(text, details) {
54
+ return { content: [{ type: "text", text }], details };
55
+ }
56
+
57
+ function truncateTodoDescription(description, maxLength = 48) {
58
+ const oneLine = String(description).replace(/\s+/g, " ").trim();
59
+ if (oneLine.length <= maxLength) return oneLine;
60
+ return `${oneLine.slice(0, maxLength - 1)}…`;
61
+ }
62
+
63
+ function formatUpdatedTodosAck(items) {
64
+ if (items.length === 1) {
65
+ const item = items[0];
66
+ return `Updated 1 todo: "${truncateTodoDescription(item.description)}" → ${item.status}`;
67
+ }
68
+ const parts = items.map(
69
+ (item) => `"${truncateTodoDescription(item.description)}" → ${item.status}`,
70
+ );
71
+ return `Updated ${items.length} todos: ${parts.join("; ")}`;
72
+ }
73
+
74
+ function formatDeletedTodosAck(items) {
75
+ if (items.length === 1) {
76
+ return `Deleted 1 todo: "${truncateTodoDescription(items[0].description)}"`;
77
+ }
78
+ const parts = items.map((item) => `"${truncateTodoDescription(item.description)}"`);
79
+ return `Deleted ${items.length} todos: ${parts.join("; ")}`;
80
+ }
81
+
82
+ function formatRemainingTodosSuffix(todos) {
83
+ const remaining = todos
84
+ .filter((todo) => todo.status !== "done")
85
+ .map((todo) => ({
86
+ id: todo.id,
87
+ description: todo.description,
88
+ status: todo.status,
89
+ }));
90
+ if (remaining.length === 0) {
91
+ return "All todos complete.";
92
+ }
93
+ return `Remaining: ${JSON.stringify(remaining)}`;
94
+ }
95
+
96
+ function formatTodoMutationResult(ack, todos) {
97
+ return `${ack} ${formatRemainingTodosSuffix(todos)}`;
98
+ }
99
+
100
+ /** @param {Record<string, unknown>} args @param {import("../../../../src/tools/agent-runtime/types.js").AgentRuntime} context */
101
+ export async function execute(args, context) {
102
+ const action = args.action;
103
+
104
+ if (action === "add") {
105
+ const descriptions = Array.isArray(args.descriptions)
106
+ ? args.descriptions.map(String).filter((d) => d.trim())
107
+ : [];
108
+ if (descriptions.length === 0) {
109
+ return textResult("Error: descriptions is required for 'add'");
110
+ }
111
+ const assignedTo = typeof args.assignedTo === "string" ? args.assignedTo : undefined;
112
+ const todos = await context.todos.add(descriptions, assignedTo);
113
+ return textResult(JSON.stringify({ todos, note: ADD_TODOS_NOTE }), { todos });
114
+ }
115
+
116
+ if (action === "update") {
117
+ const ids = Array.isArray(args.ids) ? args.ids.map(String) : [];
118
+ if (ids.length === 0) {
119
+ return textResult("Error: ids is required for 'update'");
120
+ }
121
+ const result = await context.todos.update(ids, {
122
+ status: typeof args.status === "string" ? args.status : undefined,
123
+ assignedTo: typeof args.assignedTo === "string" ? args.assignedTo : undefined,
124
+ passes: typeof args.passes === "boolean" ? args.passes : undefined,
125
+ });
126
+ if ("error" in result) {
127
+ return textResult(`Error: ${result.error}`);
128
+ }
129
+ return textResult(
130
+ formatTodoMutationResult(formatUpdatedTodosAck(result.updated), result.todos),
131
+ { todos: result.todos },
132
+ );
133
+ }
134
+
135
+ if (action === "list") {
136
+ const todos = await context.todos.list();
137
+ return textResult(JSON.stringify({ todos }), { todos });
138
+ }
139
+
140
+ if (action === "delete") {
141
+ const ids = Array.isArray(args.ids) ? args.ids.map(String) : [];
142
+ if (ids.length === 0) {
143
+ return textResult("Error: ids is required for 'delete'");
144
+ }
145
+ const result = await context.todos.remove(ids);
146
+ return textResult(
147
+ formatTodoMutationResult(formatDeletedTodosAck(result.deleted), result.todos),
148
+ { todos: result.todos },
149
+ );
150
+ }
151
+
152
+ if (action === "learnings") {
153
+ const learnings = typeof args.learnings === "string" ? args.learnings.trim() : "";
154
+ if (!learnings) {
155
+ return textResult("Error: learnings text is required for 'learnings' action");
156
+ }
157
+ const result = await context.todos.appendLearnings(learnings);
158
+ if ("error" in result) {
159
+ return textResult(`Error: ${result.error}`);
160
+ }
161
+ return textResult("Learnings appended to progress.txt successfully.");
162
+ }
163
+
164
+ return textResult(`Unknown action: ${String(action)}`);
165
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: tarsk-web-search
3
+ description: >-
4
+ Tarsk Tool skill publishing: web_search.
5
+ version: 2.0.0
6
+ tools:
7
+ - web_search
8
+ deferred-tools:
9
+ - web_search
10
+ disable-model-invocation: true
11
+ ---
12
+
13
+ # tarsk-web-search
14
+
15
+ Publishes: web_search.
@@ -0,0 +1,120 @@
1
+ /**
2
+ * web_search Tool — logic lives here; network client is context.web (host).
3
+ */
4
+
5
+ export const description =
6
+ "Search the web for current information, documentation, API references, and code examples. " +
7
+ "Returns titles, URLs, and query-relevant highlights for each result. " +
8
+ "Use fetch to read a specific URL in full after finding it.";
9
+
10
+ export const parameters = {
11
+ type: "object",
12
+ required: ["query"],
13
+ properties: {
14
+ query: {
15
+ description:
16
+ "Natural language search query (e.g. 'Next.js route handler authentication example')",
17
+ type: "string",
18
+ },
19
+ numResults: {
20
+ description: "Results to return (1-100, default 10)",
21
+ minimum: 1,
22
+ maximum: 100,
23
+ type: "number",
24
+ },
25
+ type: {
26
+ description:
27
+ "Search depth/latency tradeoff. Use auto (default) for most queries; fast/instant for low latency; deep variants for research.",
28
+ anyOf: [
29
+ { const: "auto", type: "string" },
30
+ { const: "fast", type: "string" },
31
+ { const: "instant", type: "string" },
32
+ { const: "deep-lite", type: "string" },
33
+ { const: "deep", type: "string" },
34
+ { const: "deep-reasoning", type: "string" },
35
+ ],
36
+ },
37
+ includeDomains: {
38
+ description:
39
+ "Only return results from these domains (e.g. ['docs.github.com', 'nodejs.org'])",
40
+ type: "array",
41
+ items: { type: "string" },
42
+ },
43
+ excludeDomains: {
44
+ description: "Domains to exclude",
45
+ type: "array",
46
+ items: { type: "string" },
47
+ },
48
+ },
49
+ };
50
+
51
+ /** @param {Record<string, unknown>} args @param {import("../../../../src/tools/agent-runtime/types.js").AgentRuntime} context */
52
+ export async function execute(args, context, options) {
53
+ const query = String(args.query ?? "");
54
+ const numResults = typeof args.numResults === "number" ? args.numResults : undefined;
55
+ const type = typeof args.type === "string" ? args.type : undefined;
56
+ const includeDomains = Array.isArray(args.includeDomains) ? args.includeDomains : undefined;
57
+ const excludeDomains = Array.isArray(args.excludeDomains) ? args.excludeDomains : undefined;
58
+
59
+ return context.util.withAbort(options?.signal, async function runSearch(isAborted) {
60
+ options?.onUpdate?.({
61
+ content: [{ type: "text", text: `Searching the web for "${query}"…` }],
62
+ details: undefined,
63
+ });
64
+
65
+ let response;
66
+ try {
67
+ response = await context.web.search({
68
+ query,
69
+ numResults,
70
+ type,
71
+ includeDomains,
72
+ excludeDomains,
73
+ signal: options?.signal,
74
+ });
75
+ } catch (err) {
76
+ const message = err instanceof Error ? err.message : String(err);
77
+ return {
78
+ content: [{ type: "text", text: message }],
79
+ details: undefined,
80
+ };
81
+ }
82
+
83
+ if (isAborted()) {
84
+ return { content: [], details: undefined };
85
+ }
86
+
87
+ const payload = {
88
+ query,
89
+ searchType: response.searchType ?? type ?? "auto",
90
+ requestId: response.requestId,
91
+ resultCount: response.results.length,
92
+ results: response.results.map(function mapResult(result) {
93
+ return {
94
+ title: result.title,
95
+ url: result.url,
96
+ publishedDate: result.publishedDate ?? undefined,
97
+ author: result.author ?? undefined,
98
+ highlights: result.highlights ?? [],
99
+ };
100
+ }),
101
+ };
102
+
103
+ const serialized = JSON.stringify(payload, null, 2);
104
+ const truncated = context.util.truncateHead(serialized, { maxLines: 500, maxBytes: 50 * 1024 });
105
+ let output = truncated.content;
106
+ if (truncated.truncated) {
107
+ output += `\n\n[Output truncated: showing ${truncated.outputLines}/${truncated.totalLines} lines]`;
108
+ }
109
+
110
+ return {
111
+ content: [{ type: "text", text: output }],
112
+ details: {
113
+ query,
114
+ searchType: payload.searchType,
115
+ resultCount: payload.resultCount,
116
+ requestId: response.requestId,
117
+ },
118
+ };
119
+ });
120
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: tarsk-write
3
+ description: >-
4
+ Tarsk Tool skill publishing: write.
5
+ version: 3.0.0
6
+ tools:
7
+ - write
8
+ disable-model-invocation: true
9
+ ---
10
+
11
+ # tarsk-write
12
+
13
+ Publishes: write.
14
+
15
+ Messaging lives in `scripts/write.js`. Secure write (cwd check, parents,
16
+ mutation tracking) is `context.fs.writeText`.
@@ -0,0 +1,57 @@
1
+ /**
2
+ * write — messaging in the Skill; secure write via context.fs (host).
3
+ */
4
+
5
+ export const description =
6
+ "Write a new file or overwrite an existing one (creates parent directories). Prefer edit for existing files; use write for new files or intentional full rewrites. Overwrites report previous → new byte counts.";
7
+
8
+ export const parameters = {
9
+ type: "object",
10
+ required: ["path", "content"],
11
+ properties: {
12
+ path: {
13
+ description: "File path (relative or absolute)",
14
+ type: "string",
15
+ },
16
+ content: {
17
+ description: "Content to write",
18
+ type: "string",
19
+ },
20
+ },
21
+ };
22
+
23
+ function formatWriteResult(path, previousBytes, nextBytes, syntaxDiagnostics) {
24
+ let text;
25
+ if (previousBytes === null) {
26
+ text = `Created ${path} (${nextBytes} bytes).`;
27
+ } else {
28
+ text =
29
+ `Overwrote existing ${path} (${previousBytes} → ${nextBytes} bytes). ` +
30
+ `Prefer edit for existing files unless this is an intentional full rewrite.`;
31
+ }
32
+ if (syntaxDiagnostics) {
33
+ text = `${text}\n\n${syntaxDiagnostics}`;
34
+ }
35
+ return text;
36
+ }
37
+
38
+ /** @param {Record<string, unknown>} args @param {import("../../../../src/tools/agent-runtime/types.js").AgentRuntime} context @param {{ signal?: AbortSignal }} [options] */
39
+ export async function execute(args, context, options) {
40
+ const path = String(args.path ?? "");
41
+ const content = String(args.content ?? "");
42
+ const result = await context.fs.writeText(path, content, { signal: options?.signal });
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: formatWriteResult(
48
+ result.path,
49
+ result.previousBytes,
50
+ result.nextBytes,
51
+ result.syntaxDiagnostics,
52
+ ),
53
+ },
54
+ ],
55
+ details: { supersession: result.supersession },
56
+ };
57
+ }