@markusylisiurunen/tau 0.3.79 → 0.3.81

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 (323) hide show
  1. package/dist/code_mode/command.js +4 -16
  2. package/dist/code_mode/command.js.map +1 -1
  3. package/dist/code_mode/images.js +5 -6
  4. package/dist/code_mode/images.js.map +1 -1
  5. package/dist/code_mode/index.d.ts +1 -3
  6. package/dist/code_mode/index.js +1 -2
  7. package/dist/code_mode/index.js.map +1 -1
  8. package/dist/code_mode/runtime.d.ts +8 -4
  9. package/dist/code_mode/runtime.js +52 -63
  10. package/dist/code_mode/runtime.js.map +1 -1
  11. package/dist/core/agent/agent_runtime.js +68 -76
  12. package/dist/core/agent/agent_runtime.js.map +1 -1
  13. package/dist/core/auth/auth_manager.js +3 -7
  14. package/dist/core/auth/auth_manager.js.map +1 -1
  15. package/dist/core/auth/auth_messages.js +1 -1
  16. package/dist/core/auth/auth_messages.js.map +1 -1
  17. package/dist/core/auth/auth_storage.js +71 -7
  18. package/dist/core/auth/auth_storage.js.map +1 -1
  19. package/dist/core/auth/cli.js +8 -7
  20. package/dist/core/auth/cli.js.map +1 -1
  21. package/dist/core/auth/credential_store.js +88 -186
  22. package/dist/core/auth/credential_store.js.map +1 -1
  23. package/dist/core/auth/index.js +1 -1
  24. package/dist/core/auth/index.js.map +1 -1
  25. package/dist/core/auth/providers/openai_codex.js +51 -229
  26. package/dist/core/auth/providers/openai_codex.js.map +1 -1
  27. package/dist/core/cli.js +1 -2
  28. package/dist/core/cli.js.map +1 -1
  29. package/dist/core/code_mode/bash.js +269 -0
  30. package/dist/core/code_mode/bash.js.map +1 -0
  31. package/dist/core/code_mode/capability.js +2 -0
  32. package/dist/core/code_mode/capability.js.map +1 -0
  33. package/dist/core/code_mode/history.js +62 -0
  34. package/dist/core/code_mode/history.js.map +1 -0
  35. package/dist/core/code_mode/mcp.js +121 -0
  36. package/dist/core/code_mode/mcp.js.map +1 -0
  37. package/dist/core/code_mode/models.js +256 -0
  38. package/dist/core/code_mode/models.js.map +1 -0
  39. package/dist/core/{tools → code_mode}/nook.js +13 -77
  40. package/dist/core/code_mode/nook.js.map +1 -0
  41. package/dist/core/code_mode/sdk.js +97 -0
  42. package/dist/core/code_mode/sdk.js.map +1 -0
  43. package/dist/core/{tools → code_mode}/web.js +31 -90
  44. package/dist/core/code_mode/web.js.map +1 -0
  45. package/dist/core/config/content_loader.js +30 -131
  46. package/dist/core/config/content_loader.js.map +1 -1
  47. package/dist/core/config/index.js.map +1 -1
  48. package/dist/core/config/paths.js +0 -1
  49. package/dist/core/config/paths.js.map +1 -1
  50. package/dist/core/config/runtime.js +3 -2
  51. package/dist/core/config/runtime.js.map +1 -1
  52. package/dist/core/config/runtime_config_snapshot.js +23 -9
  53. package/dist/core/config/runtime_config_snapshot.js.map +1 -1
  54. package/dist/core/config/schema.js +13 -69
  55. package/dist/core/config/schema.js.map +1 -1
  56. package/dist/core/config/skills_loader.js +6 -2
  57. package/dist/core/config/skills_loader.js.map +1 -1
  58. package/dist/core/debug.js +2 -17
  59. package/dist/core/debug.js.map +1 -1
  60. package/dist/core/index.js +3 -3
  61. package/dist/core/index.js.map +1 -1
  62. package/dist/core/models/catalog.js +2 -239
  63. package/dist/core/models/catalog.js.map +1 -1
  64. package/dist/core/models/openrouter.js +171 -0
  65. package/dist/core/models/openrouter.js.map +1 -0
  66. package/dist/core/models/openrouter_decisions.js +96 -0
  67. package/dist/core/models/openrouter_decisions.js.map +1 -0
  68. package/dist/core/models/openrouter_media.js +128 -0
  69. package/dist/core/models/openrouter_media.js.map +1 -0
  70. package/dist/core/personas.js +2 -15
  71. package/dist/core/personas.js.map +1 -1
  72. package/dist/core/runtime/agent_model.js +0 -3
  73. package/dist/core/runtime/agent_model.js.map +1 -1
  74. package/dist/core/runtime/chat_runtime.js +16 -13
  75. package/dist/core/runtime/chat_runtime.js.map +1 -1
  76. package/dist/core/runtime/runtime_bootstrap.js +12 -59
  77. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  78. package/dist/core/session/auto_compaction_archive.js +1 -1
  79. package/dist/core/session/auto_compaction_archive.js.map +1 -1
  80. package/dist/core/session/compaction.js +80 -505
  81. package/dist/core/session/compaction.js.map +1 -1
  82. package/dist/core/static/code_mode/history/documentation.md +95 -167
  83. package/dist/core/static/code_mode/mcp/documentation.md +144 -67
  84. package/dist/core/static/code_mode/nook/documentation.md +108 -169
  85. package/dist/core/static/code_mode/sandbox_runner.mjs +37 -20
  86. package/dist/core/static/code_mode/web/documentation.md +115 -213
  87. package/dist/core/static/tau_docs/client-tools.md +3 -3
  88. package/dist/core/static/tau_docs/config-reference.md +12 -37
  89. package/dist/core/static/tau_docs/configuration.md +3 -16
  90. package/dist/core/static/tau_docs/credentials.md +20 -50
  91. package/dist/core/static/tau_docs/history.md +2 -2
  92. package/dist/core/static/tau_docs/index.md +2 -1
  93. package/dist/core/static/tau_docs/manifest.json +1 -0
  94. package/dist/core/static/tau_docs/models.md +8 -159
  95. package/dist/core/static/tau_docs/node-sdk.md +5 -3
  96. package/dist/core/static/tau_docs/nook.md +2 -2
  97. package/dist/core/static/tau_docs/openrouter.md +165 -0
  98. package/dist/core/static/tau_docs/ownership-and-scope.md +3 -3
  99. package/dist/core/static/tau_docs/personas.md +11 -43
  100. package/dist/core/static/tau_docs/prompts-and-project-context.md +10 -44
  101. package/dist/core/static/tau_docs/remote-sessions.md +6 -7
  102. package/dist/core/static/tau_docs/security.md +7 -8
  103. package/dist/core/static/tau_docs/session-protocol-methods.md +0 -1
  104. package/dist/core/static/tau_docs/session-protocol.md +11 -9
  105. package/dist/core/static/tau_docs/sessions.md +10 -6
  106. package/dist/core/static/tau_docs/skills.md +8 -32
  107. package/dist/core/static/tau_docs/subagents.md +4 -3
  108. package/dist/core/static/tau_docs/telegram.md +2 -2
  109. package/dist/core/static/tau_docs/tools.md +37 -33
  110. package/dist/core/static/tau_docs/troubleshooting.md +11 -12
  111. package/dist/core/static/tau_docs/tui.md +9 -5
  112. package/dist/core/subagents/agent_supervisor.js +0 -1
  113. package/dist/core/subagents/agent_supervisor.js.map +1 -1
  114. package/dist/core/subagents/registry.js +2 -1
  115. package/dist/core/subagents/registry.js.map +1 -1
  116. package/dist/core/subagents/types.js +2 -1
  117. package/dist/core/subagents/types.js.map +1 -1
  118. package/dist/core/telegram/adapter.js +1 -1
  119. package/dist/core/telegram/adapter.js.map +1 -1
  120. package/dist/core/tool/cli.js +10 -2
  121. package/dist/core/tool/cli.js.map +1 -1
  122. package/dist/core/tool/image_generate.js +2 -1
  123. package/dist/core/tool/image_generate.js.map +1 -1
  124. package/dist/core/tool/media.js +1 -49
  125. package/dist/core/tool/media.js.map +1 -1
  126. package/dist/core/tool/openrouter.js +159 -0
  127. package/dist/core/tool/openrouter.js.map +1 -0
  128. package/dist/core/tool/openrouter_input.js +77 -0
  129. package/dist/core/tool/openrouter_input.js.map +1 -0
  130. package/dist/core/tool/speech_generate.js +2 -1
  131. package/dist/core/tool/speech_generate.js.map +1 -1
  132. package/dist/core/tools/bash.js +2 -1
  133. package/dist/core/tools/bash.js.map +1 -1
  134. package/dist/core/tools/bash_jobs.js +34 -5
  135. package/dist/core/tools/bash_jobs.js.map +1 -1
  136. package/dist/core/tools/catalog.js +18 -33
  137. package/dist/core/tools/catalog.js.map +1 -1
  138. package/dist/core/tools/code.js +100 -0
  139. package/dist/core/tools/code.js.map +1 -0
  140. package/dist/core/tools/code_mode.js +9 -30
  141. package/dist/core/tools/code_mode.js.map +1 -1
  142. package/dist/core/tools/code_mode_worker.js +2 -2
  143. package/dist/core/tools/presentation.js +2 -1
  144. package/dist/core/tools/presentation.js.map +1 -1
  145. package/dist/core/tools/tau_docs.js +1 -0
  146. package/dist/core/tools/tau_docs.js.map +1 -1
  147. package/dist/core/tools/tool_names.js +5 -1
  148. package/dist/core/tools/tool_names.js.map +1 -1
  149. package/dist/core/utils/gemini_transcription.js +14 -15
  150. package/dist/core/utils/gemini_transcription.js.map +1 -1
  151. package/dist/core/utils/media_validation.js +50 -0
  152. package/dist/core/utils/media_validation.js.map +1 -0
  153. package/dist/core/utils/model_stream.js +47 -34
  154. package/dist/core/utils/model_stream.js.map +1 -1
  155. package/dist/core/utils/user_metadata.js +2 -27
  156. package/dist/core/utils/user_metadata.js.map +1 -1
  157. package/dist/core/version.js +2 -2
  158. package/dist/core/version.js.map +1 -1
  159. package/dist/diff_tool/app/dist/assets/{ada-C5qYipkI.js → ada-X3Y2mlq2.js} +1 -1
  160. package/dist/diff_tool/app/dist/assets/{ahk-CA9gdOdF.js → ahk-DwADkxyd.js} +1 -1
  161. package/dist/diff_tool/app/dist/assets/{angular-html-CnO8qept.js → angular-html-BbLgbIhq.js} +1 -1
  162. package/dist/diff_tool/app/dist/assets/{angular-ts-DPXUio9Z.js → angular-ts-DXk17TRM.js} +1 -1
  163. package/dist/diff_tool/app/dist/assets/{apl-X8YsymsQ.js → apl-BsvksCXR.js} +1 -1
  164. package/dist/diff_tool/app/dist/assets/{astro-BQ9k8AQ0.js → astro-DH775E4V.js} +1 -1
  165. package/dist/diff_tool/app/dist/assets/beancount-C2IN4Vk8.js +1 -0
  166. package/dist/diff_tool/app/dist/assets/{blade-DZ1LYIzB.js → blade-Ck99Rm59.js} +1 -1
  167. package/dist/diff_tool/app/dist/assets/{c-VLTwNh7z.js → c-DJpHqu5J.js} +1 -1
  168. package/dist/diff_tool/app/dist/assets/{chapel-5s-sGN8D.js → chapel-Owff0Csy.js} +1 -1
  169. package/dist/diff_tool/app/dist/assets/{cobol-C9RzwrVu.js → cobol-Cv2gZuhO.js} +1 -1
  170. package/dist/diff_tool/app/dist/assets/{coffee-BHvjZ343.js → coffee-Bji0YCf_.js} +1 -1
  171. package/dist/diff_tool/app/dist/assets/coq-CGaSfhwR.js +1 -0
  172. package/dist/diff_tool/app/dist/assets/{cpp-CBTVXbBp.js → cpp-DTjA_yFF.js} +1 -1
  173. package/dist/diff_tool/app/dist/assets/{crystal-DQJua4y4.js → crystal-Dd00NOeb.js} +1 -1
  174. package/dist/diff_tool/app/dist/assets/csharp-dmMxLVLW.js +1 -0
  175. package/dist/diff_tool/app/dist/assets/css-D44TN1V6.js +1 -0
  176. package/dist/diff_tool/app/dist/assets/dart-CHZY9Xhz.js +1 -0
  177. package/dist/diff_tool/app/dist/assets/dotenv-CuH5my32.js +1 -0
  178. package/dist/diff_tool/app/dist/assets/{edge-BmdmXGH4.js → edge-CVmGSi2m.js} +1 -1
  179. package/dist/diff_tool/app/dist/assets/{elixir-oiOLs98L.js → elixir-B8Mq7no2.js} +1 -1
  180. package/dist/diff_tool/app/dist/assets/{elm-BgYuiU4E.js → elm-CXS0I3Z2.js} +1 -1
  181. package/dist/diff_tool/app/dist/assets/emacs-lisp-DR2vtWaj.js +1 -0
  182. package/dist/diff_tool/app/dist/assets/{erb-CvFrXpyY.js → erb-B9oDKaUo.js} +1 -1
  183. package/dist/diff_tool/app/dist/assets/{git-rebase-D3Zo1BLH.js → git-rebase-DT-YFebH.js} +1 -1
  184. package/dist/diff_tool/app/dist/assets/{glimmer-js-B4-8E3lJ.js → glimmer-js-s0DXlNjq.js} +1 -1
  185. package/dist/diff_tool/app/dist/assets/{glimmer-ts-CtKkD0t_.js → glimmer-ts-QgEB5S2z.js} +1 -1
  186. package/dist/diff_tool/app/dist/assets/{glsl-BAqforx_.js → glsl-NA0icwbY.js} +1 -1
  187. package/dist/diff_tool/app/dist/assets/gn-CAXYAgV-.js +1 -0
  188. package/dist/diff_tool/app/dist/assets/{graphql-DuE1RMyL.js → graphql-0_dOlfV0.js} +1 -1
  189. package/dist/diff_tool/app/dist/assets/{hack-CHBcXjz1.js → hack-D-mr7l1l.js} +1 -1
  190. package/dist/diff_tool/app/dist/assets/{haml-DAs2z3tD.js → haml-B0-oQmz7.js} +1 -1
  191. package/dist/diff_tool/app/dist/assets/handlebars-Yq9bXpWN.js +1 -0
  192. package/dist/diff_tool/app/dist/assets/{html-D5co0BLD.js → html-B8bMmdRK.js} +1 -1
  193. package/dist/diff_tool/app/dist/assets/{html-derivative-BZaWEmAT.js → html-derivative-BpxSlQb_.js} +1 -1
  194. package/dist/diff_tool/app/dist/assets/{http-Cii5MjJE.js → http-hS_53mxt.js} +1 -1
  195. package/dist/diff_tool/app/dist/assets/{hurl-Bur-XdJO.js → hurl-B2ST1kwl.js} +1 -1
  196. package/dist/diff_tool/app/dist/assets/index-CBT_sNIz.js +340 -0
  197. package/dist/diff_tool/app/dist/assets/{java-DN39wI4w.js → java-D4mj0lZJ.js} +1 -1
  198. package/dist/diff_tool/app/dist/assets/{javascript-VUReF1H4.js → javascript-wC7rrKiV.js} +1 -1
  199. package/dist/diff_tool/app/dist/assets/{jinja-BcrfV1JB.js → jinja-DbQ3o87F.js} +1 -1
  200. package/dist/diff_tool/app/dist/assets/{jison-Bez5Mtmy.js → jison-CrE9FdvP.js} +1 -1
  201. package/dist/diff_tool/app/dist/assets/{json-ChV8m0Le.js → json-xjicDyWN.js} +1 -1
  202. package/dist/diff_tool/app/dist/assets/{jsx-D0SXNtM0.js → jsx-m28lXojQ.js} +1 -1
  203. package/dist/diff_tool/app/dist/assets/{julia-DvhpcBwG.js → julia-19xkOmop.js} +1 -1
  204. package/dist/diff_tool/app/dist/assets/{just-BGwe8S6x.js → just-Cf7OorTr.js} +1 -1
  205. package/dist/diff_tool/app/dist/assets/latex-DDb7GQOy.js +1 -0
  206. package/dist/diff_tool/app/dist/assets/{liquid-UdnqDjKz.js → liquid-DHOuQ0rf.js} +1 -1
  207. package/dist/diff_tool/app/dist/assets/{lua-CjDHeHEr.js → lua-BGyIvonw.js} +1 -1
  208. package/dist/diff_tool/app/dist/assets/luau-VGWVLoqX.js +1 -0
  209. package/dist/diff_tool/app/dist/assets/marko-DB5OqI1C.js +1 -0
  210. package/dist/diff_tool/app/dist/assets/{mdc-BOLj6Oyq.js → mdc-DTyNMupO.js} +1 -1
  211. package/dist/diff_tool/app/dist/assets/monokai-BscAjiQZ.js +1 -0
  212. package/dist/diff_tool/app/dist/assets/moonbit-D9W784E_.js +1 -0
  213. package/dist/diff_tool/app/dist/assets/nextflow-CSgcYZcx.js +1 -0
  214. package/dist/diff_tool/app/dist/assets/{nextflow-groovy-DJMQeKeT.js → nextflow-groovy-D7IRt6Pp.js} +1 -1
  215. package/dist/diff_tool/app/dist/assets/{nginx-5r5xPc2T.js → nginx-DfF0fMYD.js} +1 -1
  216. package/dist/diff_tool/app/dist/assets/{nim-9exKQYMz.js → nim-BbwsXuZD.js} +1 -1
  217. package/dist/diff_tool/app/dist/assets/nushell--0fT3PI1.js +1 -0
  218. package/dist/diff_tool/app/dist/assets/one-dark-pro-C6YyR8OD.js +1 -0
  219. package/dist/diff_tool/app/dist/assets/{org-B2fpAlbt.js → org-BkOBBl1f.js} +1 -1
  220. package/dist/diff_tool/app/dist/assets/{perl-DV2fcwyY.js → perl-BTXTOl4K.js} +1 -1
  221. package/dist/diff_tool/app/dist/assets/php-DIMVQWiA.js +1 -0
  222. package/dist/diff_tool/app/dist/assets/{powershell-CCSX75yM.js → powershell-QtSnmXcu.js} +1 -1
  223. package/dist/diff_tool/app/dist/assets/{pug-DuKcQxFj.js → pug-B_nrb4dJ.js} +1 -1
  224. package/dist/diff_tool/app/dist/assets/{qml-C16b4SYx.js → qml-1PXi8G8Z.js} +1 -1
  225. package/dist/diff_tool/app/dist/assets/{r-B1ZldnJf.js → r-CJrAkc2Z.js} +1 -1
  226. package/dist/diff_tool/app/dist/assets/{razor-TYmslaAB.js → razor-DgPUftNd.js} +1 -1
  227. package/dist/diff_tool/app/dist/assets/red-CYlAq2b0.js +1 -0
  228. package/dist/diff_tool/app/dist/assets/{regexp-dWCffmDD.js → regexp-C2hS8XvL.js} +1 -1
  229. package/dist/diff_tool/app/dist/assets/{rst-DEkLr2YR.js → rst-CDouhKnc.js} +1 -1
  230. package/dist/diff_tool/app/dist/assets/{ruby-BJnJzr4u.js → ruby-CAjKW1uO.js} +1 -1
  231. package/dist/diff_tool/app/dist/assets/rust-DpiIf5JO.js +1 -0
  232. package/dist/diff_tool/app/dist/assets/{sas-DeRsDbUE.js → sas-qAHkHLc1.js} +1 -1
  233. package/dist/diff_tool/app/dist/assets/{scss-SGV_CwKm.js → scss-Bfx2Ydid.js} +1 -1
  234. package/dist/diff_tool/app/dist/assets/{shellscript-BI7khmmR.js → shellscript-Bu76R8y2.js} +1 -1
  235. package/dist/diff_tool/app/dist/assets/{shellsession-Nupw_Vvw.js → shellsession-BU8BL0oL.js} +1 -1
  236. package/dist/diff_tool/app/dist/assets/solarized-dark-b97czJOk.js +1 -0
  237. package/dist/diff_tool/app/dist/assets/solarized-light-DFPxpIYQ.js +1 -0
  238. package/dist/diff_tool/app/dist/assets/{soy-B96cBzxv.js → soy-FRl8ozP-.js} +1 -1
  239. package/dist/diff_tool/app/dist/assets/sql-BacQgsEs.js +1 -0
  240. package/dist/diff_tool/app/dist/assets/{stata-Dnq48cE6.js → stata-B9kkG-ET.js} +1 -1
  241. package/dist/diff_tool/app/dist/assets/{surrealql-D6lw4TiD.js → surrealql-qvETr7iY.js} +1 -1
  242. package/dist/diff_tool/app/dist/assets/{svelte-ChVoq9tB.js → svelte-B0z1MgHc.js} +1 -1
  243. package/dist/diff_tool/app/dist/assets/{templ-Dh1EXuHD.js → templ-DTnPshKb.js} +1 -1
  244. package/dist/diff_tool/app/dist/assets/{tex-KTYusNFe.js → tex-Cosab9_H.js} +1 -1
  245. package/dist/diff_tool/app/dist/assets/{ts-tags-DC2RU1_R.js → ts-tags-DNYvLFUH.js} +1 -1
  246. package/dist/diff_tool/app/dist/assets/{tsx-DtIM39Jy.js → tsx-Dstq6j1a.js} +1 -1
  247. package/dist/diff_tool/app/dist/assets/twig-BzqZdwaX.js +1 -0
  248. package/dist/diff_tool/app/dist/assets/{typescript-BGAE5iuw.js → typescript-YOQ_oE25.js} +1 -1
  249. package/dist/diff_tool/app/dist/assets/typespec-BGhR2SqG.js +1 -0
  250. package/dist/diff_tool/app/dist/assets/{typst-nWoGZ22y.js → typst-DTffwfpc.js} +1 -1
  251. package/dist/diff_tool/app/dist/assets/{vue-iyHf-l4z.js → vue-D4OMj_C5.js} +1 -1
  252. package/dist/diff_tool/app/dist/assets/{vue-html-prNdIjLu.js → vue-html-kT4WrHGK.js} +1 -1
  253. package/dist/diff_tool/app/dist/assets/{vue-vine-KSSlnVeg.js → vue-vine-CxeapeMO.js} +1 -1
  254. package/dist/diff_tool/app/dist/assets/{xml-DdCC83Xd.js → xml-DWVpuurg.js} +1 -1
  255. package/dist/diff_tool/app/dist/assets/{xsl-DSqZxsez.js → xsl-C0ciup5a.js} +1 -1
  256. package/dist/diff_tool/app/dist/assets/{yaml-CZcBUWvf.js → yaml-98Fvyfpc.js} +1 -1
  257. package/dist/diff_tool/app/dist/index.html +1 -1
  258. package/dist/execution/execution_environment.js.map +1 -1
  259. package/dist/execution/fly_sprite_execution_environment.js +5 -10
  260. package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
  261. package/dist/execution/tool_backend_execution_environment.js +0 -2
  262. package/dist/execution/tool_backend_execution_environment.js.map +1 -1
  263. package/dist/host/execution_runtime.js +5 -4
  264. package/dist/host/execution_runtime.js.map +1 -1
  265. package/dist/host/hosted_ephemeral_agent_session.js +0 -2
  266. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  267. package/dist/host/local_session_host.js +15 -31
  268. package/dist/host/local_session_host.js.map +1 -1
  269. package/dist/main.js +14 -29
  270. package/dist/main.js.map +1 -1
  271. package/dist/nook/README.md +1 -1
  272. package/dist/protocol/session_protocol.d.ts +3 -6
  273. package/dist/protocol/session_protocol.js +3 -6
  274. package/dist/protocol/session_protocol.js.map +1 -1
  275. package/dist/sdk/code_mode.js +11 -17
  276. package/dist/sdk/code_mode.js.map +1 -1
  277. package/dist/sdk/index.d.ts +1 -1
  278. package/dist/sdk/index.js +1 -1
  279. package/dist/sdk/index.js.map +1 -1
  280. package/dist/sdk/local_client.js +3 -3
  281. package/dist/sdk/local_client.js.map +1 -1
  282. package/dist/store/session_snapshot_migrations.js +28 -1
  283. package/dist/store/session_snapshot_migrations.js.map +1 -1
  284. package/dist/tui/session_chat_app.js +2 -4
  285. package/dist/tui/session_chat_app.js.map +1 -1
  286. package/dist/tui/session_chat_controller.js +105 -56
  287. package/dist/tui/session_chat_controller.js.map +1 -1
  288. package/package.json +9 -9
  289. package/dist/code_mode/files.d.ts +0 -47
  290. package/dist/code_mode/files.js +0 -296
  291. package/dist/code_mode/files.js.map +0 -1
  292. package/dist/core/tools/history.js +0 -118
  293. package/dist/core/tools/history.js.map +0 -1
  294. package/dist/core/tools/mcp.js +0 -167
  295. package/dist/core/tools/mcp.js.map +0 -1
  296. package/dist/core/tools/nook.js.map +0 -1
  297. package/dist/core/tools/web.js.map +0 -1
  298. package/dist/diff_tool/app/dist/assets/beancount-D-usSTwE.js +0 -1
  299. package/dist/diff_tool/app/dist/assets/coq-DuBRPxYg.js +0 -1
  300. package/dist/diff_tool/app/dist/assets/csharp-oqKa8noW.js +0 -1
  301. package/dist/diff_tool/app/dist/assets/css-BQflXFb6.js +0 -1
  302. package/dist/diff_tool/app/dist/assets/dart-CnvKMtbv.js +0 -1
  303. package/dist/diff_tool/app/dist/assets/dotenv-_5a1GRtc.js +0 -1
  304. package/dist/diff_tool/app/dist/assets/emacs-lisp-c_oH4hRZ.js +0 -1
  305. package/dist/diff_tool/app/dist/assets/gn-ilITqXS6.js +0 -1
  306. package/dist/diff_tool/app/dist/assets/handlebars-CfAla6QK.js +0 -1
  307. package/dist/diff_tool/app/dist/assets/index-CZUi_I-p.js +0 -340
  308. package/dist/diff_tool/app/dist/assets/latex-pWSag83P.js +0 -1
  309. package/dist/diff_tool/app/dist/assets/luau-C2pBCSgt.js +0 -1
  310. package/dist/diff_tool/app/dist/assets/marko-yLX6iW68.js +0 -1
  311. package/dist/diff_tool/app/dist/assets/monokai-B_bV9PQ9.js +0 -1
  312. package/dist/diff_tool/app/dist/assets/moonbit-DgjMoLWr.js +0 -1
  313. package/dist/diff_tool/app/dist/assets/nextflow-BJtWHP5T.js +0 -1
  314. package/dist/diff_tool/app/dist/assets/nushell-DHYfO66s.js +0 -1
  315. package/dist/diff_tool/app/dist/assets/one-dark-pro-CLwyXe_n.js +0 -1
  316. package/dist/diff_tool/app/dist/assets/php-D-AthX_E.js +0 -1
  317. package/dist/diff_tool/app/dist/assets/red-DX1BQOs8.js +0 -1
  318. package/dist/diff_tool/app/dist/assets/rust-Cfkwpbl8.js +0 -1
  319. package/dist/diff_tool/app/dist/assets/solarized-dark-UdsmMDCL.js +0 -1
  320. package/dist/diff_tool/app/dist/assets/solarized-light-C1IUL_tW.js +0 -1
  321. package/dist/diff_tool/app/dist/assets/sql-CsIdKfaO.js +0 -1
  322. package/dist/diff_tool/app/dist/assets/twig-C6D_TA3n.js +0 -1
  323. package/dist/diff_tool/app/dist/assets/typespec-BRdr0IET.js +0 -1
@@ -0,0 +1,269 @@
1
+ import { resolve } from "node:path";
2
+ import { z } from "zod";
3
+ import { SESSION_PROTOCOL_MAX_EXEC_STDIN_BYTES } from "../../protocol/session_protocol.js";
4
+ import { BASH_DEFAULT_TIMEOUT_MS } from "../tools/bash.js";
5
+ import { BASH_JOB_WAIT_DEFAULT_MS, BASH_JOB_WAIT_MAX_MS, } from "../tools/bash_jobs.js";
6
+ import { MAX_COMMAND_CAPTURE_BYTES, } from "../tools/execution_backend.js";
7
+ const BASH_RUN_MAX_TIMEOUT_MS = 5 * 60 * 1000;
8
+ const commandOptions = {
9
+ command: z
10
+ .string()
11
+ .min(1)
12
+ .refine((value) => value.trim().length > 0),
13
+ workingDirectory: z
14
+ .string()
15
+ .min(1)
16
+ .regex(/^[^\r\n]+$/)
17
+ .optional(),
18
+ };
19
+ const runOptions = z.strictObject({
20
+ ...commandOptions,
21
+ stdin: z
22
+ .string()
23
+ .refine((value) => Buffer.byteLength(value, "utf8") <= SESSION_PROTOCOL_MAX_EXEC_STDIN_BYTES, "stdin exceeds its UTF-8 byte limit")
24
+ .optional(),
25
+ timeout: z.number().int().positive().max(BASH_RUN_MAX_TIMEOUT_MS).optional(),
26
+ });
27
+ const startOptions = z.strictObject(commandOptions);
28
+ const idOptions = z.strictObject({ id: z.string().min(1) });
29
+ const waitOptions = z.strictObject({
30
+ ids: z.array(z.string().min(1)).min(1).max(64),
31
+ timeout: z.number().int().positive().max(BASH_JOB_WAIT_MAX_MS).optional(),
32
+ });
33
+ export function createBashCapability(backend, cwd, jobs) {
34
+ return {
35
+ name: "bash",
36
+ description: "Run shell commands and manage background jobs. Prefer the direct bash tool for straightforward shell work; use tau.bash when composing with other capabilities or processing command results in JavaScript.",
37
+ documentation: `# tau.bash
38
+
39
+ Run foreground shell commands and manage persistent background jobs.
40
+
41
+ ## Interface
42
+
43
+ \`\`\`ts
44
+ type BashApi = {
45
+ run(options: RunOptions): Promise<RunResult>;
46
+ start(options: StartOptions): Promise<StartResult>;
47
+ list(): Promise<ListResult>;
48
+ read(options: ReadOptions): Promise<ReadResult>;
49
+ wait(options: WaitOptions): Promise<WaitResult>;
50
+ stop(options: StopOptions): Promise<StopResult>;
51
+ };
52
+ \`\`\`
53
+
54
+ ## Shell behavior
55
+
56
+ Each command runs in a fresh noninteractive login Bash shell. No TTY or interactive stdin is available. \`workingDirectory\` defaults to the current working directory; relative paths resolve from it. Prefer it over cd. Shell state does not carry between calls, but filesystem side effects do.
57
+
58
+ Use \`run\` for foreground work and \`start\` for persistent background jobs. Never use tmux or shell &.
59
+
60
+ ## \`tau.bash.run(options)\`
61
+
62
+ Run a foreground command and await its completion.
63
+
64
+ ### Options
65
+
66
+ \`\`\`ts
67
+ type RunOptions = {
68
+ command: string;
69
+ stdin?: string;
70
+ workingDirectory?: string;
71
+ timeout?: number;
72
+ };
73
+ \`\`\`
74
+
75
+ - \`command\`: required, nonblank Bash source.
76
+ - \`stdin\`: optional UTF-8 text, at most ${SESSION_PROTOCOL_MAX_EXEC_STDIN_BYTES / 1024 / 1024} MiB. Written once, then closed so the command receives EOF. Omit for no stdin; an empty string supplies an empty stream. No interactive input or TTY is available. Pass data through stdin rather than interpolating it into command source.
77
+ - \`workingDirectory\`: optional, nonempty path without line breaks.
78
+ - \`timeout\`: optional positive integer in milliseconds, default ${BASH_DEFAULT_TIMEOUT_MS}, maximum ${BASH_RUN_MAX_TIMEOUT_MS}. The enclosing program's time limit still applies.
79
+
80
+ ### Result
81
+
82
+ \`\`\`ts
83
+ type RunResult = {
84
+ output: string;
85
+ stdout: string;
86
+ stderr: string;
87
+ exitCode: number | null;
88
+ truncated: boolean;
89
+ timedOut: boolean;
90
+ aborted: boolean;
91
+ closeSignal: string | null;
92
+ };
93
+ \`\`\`
94
+
95
+ \`output\` combines stdout and stderr; \`stdout\` and \`stderr\` are also returned separately. \`exitCode\` is null when no exit code is available. \`closeSignal\` names the terminating signal when available.
96
+
97
+ Nonzero exits, timeouts, and capture truncation are result data, not thrown errors. Check \`exitCode\`, \`truncated\`, \`timedOut\`, and \`aborted\` before using output as complete evidence or parsing it as JSON.
98
+
99
+ Foreground capture is bounded to ${MAX_COMMAND_CAPTURE_BYTES / 1024 / 1024} MiB, retaining a tail on overflow. Redirect larger artifacts to a file. Programs decide what to print; captured output is not automatically returned to the conversation.
100
+
101
+ For example, with jq installed on PATH:
102
+
103
+ \`\`\`js
104
+ const data = { items: ["one", "two"] };
105
+ const result = await tau.bash.run({
106
+ command: "jq '.items | length'",
107
+ stdin: JSON.stringify(data),
108
+ });
109
+ if (result.exitCode !== 0 || result.truncated || result.timedOut || result.aborted)
110
+ throw new Error("incomplete command result");
111
+ printText(result.stdout);
112
+ \`\`\`
113
+
114
+ Interrupting the program stops its foreground commands.
115
+
116
+ ## \`tau.bash.start(options)\`
117
+
118
+ Launch a background command without waiting for it to finish.
119
+
120
+ ### Options
121
+
122
+ \`\`\`ts
123
+ type StartOptions = {
124
+ command: string;
125
+ workingDirectory?: string;
126
+ };
127
+ \`\`\`
128
+
129
+ \`command\` and \`workingDirectory\` follow the same rules as \`run\`. Neither \`stdin\` nor a command timeout is accepted; stop the job explicitly when needed.
130
+
131
+ ### Result
132
+
133
+ \`\`\`ts
134
+ type StartResult = { id: string };
135
+ \`\`\`
136
+
137
+ The returned ID identifies the job, not application readiness. Inspect output or perform a task-specific readiness check before depending on a launched service.
138
+
139
+ Jobs survive program completion, turn interruption, and client disconnect while Tau remains running. Already launched jobs are not stopped when a program is interrupted. Jobs are not recovered after restart.
140
+
141
+ ## Job types
142
+
143
+ \`\`\`ts
144
+ type JobMetadata = {
145
+ id: string;
146
+ command: string;
147
+ workingDirectory: string;
148
+ truncated: boolean;
149
+ } & (
150
+ | { status: "running" }
151
+ | {
152
+ status: "succeeded" | "failed" | "stopped";
153
+ exitCode: number | null;
154
+ aborted: boolean;
155
+ closeSignal: string | null;
156
+ }
157
+ | { status: "failed"; error: string }
158
+ );
159
+
160
+ type Job = JobMetadata & { output: string };
161
+ \`\`\`
162
+
163
+ An exited command has \`exitCode\`, \`aborted\`, and \`closeSignal\`. An execution error instead has \`error\`. A \`failed\` status can represent either a nonzero command exit or an execution error; inspect the corresponding fields. A \`stopped\` status indicates the job was aborted.
164
+
165
+ \`command\` and \`workingDirectory\` are bounded display strings and may be truncated. Each job retains the last 64 KiB of combined output. \`truncated\` indicates that capture is incomplete.
166
+
167
+ Up to 64 job records are retained. Starting another job may evict an older completed record; if all records are running, launch fails. Unknown IDs throw and do not prove a command never ran. Check current process and output state before restarting it.
168
+
169
+ ## \`tau.bash.list()\`
170
+
171
+ List retained jobs without their output.
172
+
173
+ \`\`\`ts
174
+ type ListResult = JobMetadata[];
175
+ \`\`\`
176
+
177
+ Takes no arguments. Use \`read\` for a selected job's output.
178
+
179
+ ## \`tau.bash.read(options)\`
180
+
181
+ Read one job's current state and bounded output tail without waiting for completion.
182
+
183
+ \`\`\`ts
184
+ type ReadOptions = { id: string };
185
+ type ReadResult = Job;
186
+ \`\`\`
187
+
188
+ \`id\` is required. Running jobs may have more output later.
189
+
190
+ ## \`tau.bash.wait(options)\`
191
+
192
+ Wait until any selected job finishes or the wait expires. Returns immediately if a selected job is already terminal. Other selected jobs may still be running.
193
+
194
+ ### Options
195
+
196
+ \`\`\`ts
197
+ type WaitOptions = {
198
+ ids: string[];
199
+ timeout?: number;
200
+ };
201
+ \`\`\`
202
+
203
+ - \`ids\`: required, 1 to 64 nonempty job IDs.
204
+ - \`timeout\`: optional positive integer in milliseconds, default ${BASH_JOB_WAIT_DEFAULT_MS}, maximum ${BASH_JOB_WAIT_MAX_MS}.
205
+
206
+ ### Result
207
+
208
+ \`\`\`ts
209
+ type WaitResult = {
210
+ jobs: Job[];
211
+ timedOut: boolean;
212
+ };
213
+ \`\`\`
214
+
215
+ \`jobs\` contains the current records for the requested IDs, including output. \`timedOut\` describes the wait, not a command outcome. Expiring or cancelling a wait does not stop the jobs.
216
+
217
+ ## \`tau.bash.stop(options)\`
218
+
219
+ Stop one job's process group, escalating to forced termination when needed, and await completion.
220
+
221
+ \`\`\`ts
222
+ type StopOptions = { id: string };
223
+ type StopResult = Job;
224
+ \`\`\`
225
+
226
+ \`id\` is required. Returns the completed job record with its output tail. Stopping an already completed job returns its existing record. Execution errors throw.
227
+
228
+ ## Limits and failures
229
+
230
+ Invalid arguments, unknown job IDs, and launch failures throw. Errors after a background launch appear in the job record; inspect \`status\` and its exit or error fields. Commands are not automatically retried, and completed filesystem or process actions are not rolled back.`,
231
+ api: {
232
+ run: async (args, context) => {
233
+ const [options] = z.tuple([runOptions]).parse(args);
234
+ return await backend.runBash(options.command, {
235
+ cwd: resolve(cwd, options.workingDirectory ?? "."),
236
+ timeoutMs: options.timeout ?? BASH_DEFAULT_TIMEOUT_MS,
237
+ maxCaptureBytes: MAX_COMMAND_CAPTURE_BYTES,
238
+ stdin: options.stdin === undefined ? undefined : Buffer.from(options.stdin, "utf8"),
239
+ signal: context.signal,
240
+ });
241
+ },
242
+ start: async (args, context) => {
243
+ const [options] = z.tuple([startOptions]).parse(args);
244
+ return {
245
+ id: await jobs.start(backend, options.command, resolve(cwd, options.workingDirectory ?? "."), context.signal),
246
+ };
247
+ },
248
+ list: (args) => {
249
+ z.tuple([]).parse(args);
250
+ return jobs.read(undefined, false);
251
+ },
252
+ read: (args) => {
253
+ const [options] = z.tuple([idOptions]).parse(args);
254
+ return jobs.read([options.id])[0];
255
+ },
256
+ wait: async (args, context) => {
257
+ const [options] = z.tuple([waitOptions]).parse(args);
258
+ const timedOut = await jobs.waitJobs(options.ids, options.timeout ?? BASH_JOB_WAIT_DEFAULT_MS, context.signal);
259
+ return { jobs: jobs.read(options.ids), timedOut };
260
+ },
261
+ stop: async (args) => {
262
+ const [options] = z.tuple([idOptions]).parse(args);
263
+ await jobs.stopJob(options.id);
264
+ return jobs.read([options.id])[0];
265
+ },
266
+ },
267
+ };
268
+ }
269
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/core/code_mode/bash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/core/code_mode/capability.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { z } from "zod";
3
+ import { formatZodError } from "../utils/zod.js";
4
+ const description = [
5
+ "Search and read saved conversation transcripts across repositories and machines; tau.history is read-only.",
6
+ "Use tau.history only when the user or active instructions explicitly ask to reference, search, or read historical transcripts, not merely because prior sessions might be relevant.",
7
+ ].join(" ");
8
+ const attributeFilterSchema = z.union([
9
+ z.string().max(1_024),
10
+ z.object({ contains: z.string().min(1).max(1_024) }).strict(),
11
+ ]);
12
+ const attributeFiltersSchema = z
13
+ .record(z.string().min(1).max(64), attributeFilterSchema)
14
+ .refine((attributes) => Object.keys(attributes).length <= 32);
15
+ const searchInputSchema = z
16
+ .object({
17
+ query: z.string().trim().min(1).max(1_000).optional(),
18
+ attributes: attributeFiltersSchema.optional(),
19
+ limit: z.number().int().min(1).max(75).default(10),
20
+ cursor: z.string().min(1).max(2_048).optional(),
21
+ })
22
+ .strict();
23
+ const readInputSchema = z
24
+ .object({
25
+ sessionId: z.string().trim().min(1).max(256),
26
+ limit: z.number().int().min(1).max(100).default(50),
27
+ cursor: z.string().min(1).max(2_048).optional(),
28
+ })
29
+ .strict();
30
+ const documentation = readFileSync(new URL("../static/code_mode/history/documentation.md", import.meta.url), "utf8");
31
+ async function handleHistoryRequest(method, args, history, signal) {
32
+ if (args.length !== 1) {
33
+ throw new Error(`tau.history.${method} expects one options object`);
34
+ }
35
+ if (method === "search") {
36
+ const parsed = searchInputSchema.safeParse(args[0] ?? {});
37
+ if (!parsed.success) {
38
+ throw new Error(`Invalid tau.history.search options: ${formatZodError(parsed.error)}`);
39
+ }
40
+ return await history.search(parsed.data, signal);
41
+ }
42
+ if (method === "read") {
43
+ const parsed = readInputSchema.safeParse(args[0]);
44
+ if (!parsed.success) {
45
+ throw new Error(`Invalid tau.history.read options: ${formatZodError(parsed.error)}`);
46
+ }
47
+ return await history.read(parsed.data, signal);
48
+ }
49
+ throw new Error(`unsupported history method '${method}'`);
50
+ }
51
+ export function createHistoryCapability(history) {
52
+ return {
53
+ name: "history",
54
+ description,
55
+ documentation,
56
+ api: {
57
+ search: (args, context) => handleHistoryRequest("search", args, history, context.signal),
58
+ read: (args, context) => handleHistoryRequest("read", args, history, context.signal),
59
+ },
60
+ };
61
+ }
62
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/core/code_mode/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { z } from "zod";
3
+ import { searchMcpTools } from "../mcp/search.js";
4
+ import { formatZodError } from "../utils/zod.js";
5
+ const nameSchema = z.string().trim().min(1).max(256);
6
+ const listOptionsSchema = z
7
+ .object({
8
+ query: z.string().trim().min(1).max(1_000).optional(),
9
+ limit: z.number().int().min(1).max(100).default(20),
10
+ offset: z.number().int().nonnegative().default(0),
11
+ })
12
+ .strict();
13
+ const documentation = readFileSync(new URL("../static/code_mode/mcp/documentation.md", import.meta.url), "utf8");
14
+ function parseMethodArgs(method, args, schema) {
15
+ const parsed = schema.safeParse(args);
16
+ if (!parsed.success)
17
+ throw new Error(`Invalid tau.mcp.${method} arguments: ${formatZodError(parsed.error)}`);
18
+ return parsed.data;
19
+ }
20
+ export function createMcpCapability(manager) {
21
+ return {
22
+ name: "mcp",
23
+ description: "Discover and call tools or read resources from connected MCP servers. Use when a connected service provides data or actions relevant to the task.",
24
+ documentation,
25
+ api: {
26
+ listServers: async (args) => {
27
+ parseMethodArgs("listServers", args, z.tuple([]));
28
+ return manager.listServers();
29
+ },
30
+ searchTools: async (args, context) => {
31
+ const [query, options] = parseMethodArgs("searchTools", args, z.tuple([
32
+ z.string().trim().min(1).max(1_000),
33
+ z
34
+ .object({
35
+ server: nameSchema.optional(),
36
+ limit: z.number().int().min(1).max(100).default(8),
37
+ })
38
+ .strict()
39
+ .optional(),
40
+ ]));
41
+ return await searchMcpTools(manager, query, options ?? { limit: 8 }, context.signal);
42
+ },
43
+ listTools: async (args, context) => {
44
+ const [server, options] = parseMethodArgs("listTools", args, z.tuple([nameSchema, listOptionsSchema.optional()]));
45
+ const { query, limit, offset } = options ?? listOptionsSchema.parse({});
46
+ const catalog = await manager.listTools(server, context.signal);
47
+ const terms = query?.toLowerCase().split(/\s+/) ?? [];
48
+ const matching = catalog.tools.filter((tool) => {
49
+ const text = `${tool.name} ${tool.description ?? ""}`.toLowerCase();
50
+ return terms.every((term) => text.includes(term));
51
+ });
52
+ const tools = matching.slice(offset, offset + limit).map((tool) => ({
53
+ name: tool.name,
54
+ ...(tool.description ? { description: tool.description } : {}),
55
+ }));
56
+ return {
57
+ ...(catalog.instructions ? { instructions: catalog.instructions } : {}),
58
+ tools,
59
+ total: matching.length,
60
+ ...(offset + tools.length < matching.length ? { nextOffset: offset + tools.length } : {}),
61
+ };
62
+ },
63
+ listResources: async (args, context) => {
64
+ const [server, options] = parseMethodArgs("listResources", args, z.tuple([nameSchema, listOptionsSchema.optional()]));
65
+ const { query, limit, offset } = options ?? listOptionsSchema.parse({});
66
+ const catalog = await manager.listResources(server, context.signal);
67
+ const terms = query?.toLowerCase().split(/\s+/) ?? [];
68
+ const matching = catalog.filter((resource) => {
69
+ const text = `${resource.uri} ${resource.name} ${resource.title ?? ""} ${resource.description ?? ""}`.toLowerCase();
70
+ return terms.every((term) => text.includes(term));
71
+ });
72
+ const resources = matching.slice(offset, offset + limit);
73
+ return {
74
+ resources,
75
+ total: matching.length,
76
+ ...(offset + resources.length < matching.length
77
+ ? { nextOffset: offset + resources.length }
78
+ : {}),
79
+ };
80
+ },
81
+ listResourceTemplates: async (args, context) => {
82
+ const [server, options] = parseMethodArgs("listResourceTemplates", args, z.tuple([nameSchema, listOptionsSchema.optional()]));
83
+ const { query, limit, offset } = options ?? listOptionsSchema.parse({});
84
+ const catalog = await manager.listResourceTemplates(server, context.signal);
85
+ const terms = query?.toLowerCase().split(/\s+/) ?? [];
86
+ const matching = catalog.filter((resource) => {
87
+ const text = `${resource.uriTemplate} ${resource.name} ${resource.title ?? ""} ${resource.description ?? ""}`.toLowerCase();
88
+ return terms.every((term) => text.includes(term));
89
+ });
90
+ const resourceTemplates = matching.slice(offset, offset + limit);
91
+ return {
92
+ resourceTemplates,
93
+ total: matching.length,
94
+ ...(offset + resourceTemplates.length < matching.length
95
+ ? { nextOffset: offset + resourceTemplates.length }
96
+ : {}),
97
+ };
98
+ },
99
+ readResource: async (args, context) => {
100
+ const [server, uri] = parseMethodArgs("readResource", args, z.tuple([nameSchema, z.string().trim().min(1).max(8_192)]));
101
+ return await manager.readResource(server, uri, context.signal);
102
+ },
103
+ describeTool: async (args, context) => {
104
+ const [server, name] = parseMethodArgs("describeTool", args, z.tuple([nameSchema, nameSchema]));
105
+ const tool = await manager.describeTool(server, name, context.signal);
106
+ return {
107
+ name: tool.name,
108
+ ...(tool.description ? { description: tool.description } : {}),
109
+ inputSchema: tool.inputSchema,
110
+ ...(tool.outputSchema ? { outputSchema: tool.outputSchema } : {}),
111
+ ...(tool.annotations ? { annotations: tool.annotations } : {}),
112
+ };
113
+ },
114
+ callTool: async (args, context) => {
115
+ const [server, name, input] = parseMethodArgs("callTool", args, z.tuple([nameSchema, nameSchema, z.record(z.string(), z.unknown())]));
116
+ return await manager.callTool(server, name, input, context.signal);
117
+ },
118
+ },
119
+ };
120
+ }
121
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/core/code_mode/mcp.ts"],"names":[],"mappings":"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"}