@xiaoso/dsh-tool-plus 0.1.6 → 0.1.7-beta.1

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 (357) hide show
  1. package/THIRD_PARTY_NOTICES.md +9 -3
  2. package/lib/{abort-Cwwm4Err.mjs → abort-Caqff3M6.mjs} +2 -2
  3. package/lib/alibaba-coding-plan-DTupMiAi.mjs +73 -0
  4. package/lib/alibaba-token-plan-CHGyWOfX.mjs +46 -0
  5. package/lib/alibaba-token-plan-Dj3OZhEE.mjs +82 -0
  6. package/lib/{amazon-bedrock-TVMpUTRG.mjs → amazon-bedrock-DbFSYXfJ.mjs} +117 -38
  7. package/lib/{anthropic-BL6LFDQS.mjs → anthropic-CTJ3IQVa.mjs} +675 -166
  8. package/lib/anthropic-CXfWlp-x.mjs +105 -0
  9. package/lib/{aws-credentials-B20dliS7.mjs → anthropic-wire-CKuhDwZ1.mjs} +74 -14
  10. package/lib/{api-key-login-CIDnXeYd.mjs → api-key-validation-CGCJFbFr.mjs} +27 -68
  11. package/lib/{azure-openai-responses-BkhsLmN3.mjs → azure-openai-responses-ChFbWaGj.mjs} +27 -16
  12. package/lib/{browser-render-CmgvSNte.mjs → browser-render-9o0Rknop.mjs} +4 -4
  13. package/lib/bun-shim.mjs +71 -2
  14. package/lib/{bundled-references-ChZSPDFw.mjs → bundled-references-DY3EJxZV.mjs} +6 -5
  15. package/lib/cline-pass-Bwg3esu9.mjs +44 -0
  16. package/lib/cloudflare-ai-gateway-BupNXyKK.mjs +35 -0
  17. package/lib/cloudflare-ai-gateway-EWo0VkP5.mjs +44 -0
  18. package/lib/collapse-DOR8sOGf.mjs +2304 -0
  19. package/lib/coreweave-C82HrLpb.mjs +31 -0
  20. package/lib/coreweave-Ct8cF-da.mjs +14 -0
  21. package/lib/{cursor-B6HcmplF.mjs → cursor-B95LzVWV.mjs} +11 -3
  22. package/lib/{cursor-CRpLpaZ3.mjs → cursor-DJV_dcgB.mjs} +887 -1784
  23. package/lib/{cursor-B8m6SqAH.mjs → cursor-LKGjucn2.mjs} +48 -38
  24. package/lib/cursor-proto-B8Wj8bv9.mjs +10513 -0
  25. package/lib/{deterministic-id-D-yIV_eI.mjs → deterministic-id-CUEIMSqR.mjs} +1 -1
  26. package/lib/devin-BMTdx_hx.mjs +316 -0
  27. package/lib/{devin-DUAfvBsW.mjs → devin-DSp0Rw_E.mjs} +172 -86
  28. package/lib/devin-ExGIghmx.mjs +69 -0
  29. package/lib/devin-proto-Br8fdyNl.mjs +2888 -0
  30. package/lib/{dom-CawWi8fa.mjs → dom-DG3sPESc.mjs} +8 -8
  31. package/lib/effort-BdtQMN-_.mjs +23 -0
  32. package/lib/{error-C-f_Wnw4.mjs → error-CORgGg5a.mjs} +275 -154
  33. package/lib/{event-stream-Dh2guZxS.mjs → event-stream-ulcDenZD.mjs} +20 -4
  34. package/lib/{gemini-headers-DKUShltF.mjs → gemini-headers-Co9cVvex.mjs} +2 -2
  35. package/lib/{github-copilot-suDymKrx.mjs → github-copilot-Dstq1D3s.mjs} +69 -29
  36. package/lib/github-copilot-headers-DOh1gt_w.mjs +312 -0
  37. package/lib/gitlab-duo-DSCMrU0m.mjs +11 -0
  38. package/lib/google-CtsKkOQK.mjs +38 -0
  39. package/lib/google-antigravity-z-5KsEci.mjs +252 -0
  40. package/lib/{google-auth-DYJLM792.mjs → google-auth-ieLBaneO.mjs} +4 -4
  41. package/lib/{google-gemini-cli-8BT513Ul.mjs → google-gemini-cli-C6NE5mWz.mjs} +28 -54
  42. package/lib/{google-gemini-cli-D6cSmfvB.mjs → google-gemini-cli-CAIPSl7e.mjs} +23 -29
  43. package/lib/google-oauth-shared-DhMllAkt.mjs +53 -0
  44. package/lib/{google-shared-CVbHK5vZ.mjs → google-shared-B0aNCYEH.mjs} +140 -44
  45. package/lib/{google-validation-Cgbn3tWJ.mjs → google-validation-BEkNs-Bx.mjs} +1 -1
  46. package/lib/{google-vertex-Bui-ypAe.mjs → google-vertex-Bbd1tYNc.mjs} +8 -8
  47. package/lib/hosts-00rjRzUD.mjs +203 -0
  48. package/lib/id-AL5obQzR.mjs +71 -0
  49. package/lib/{idle-iterator-CYAxUkSD.mjs → idle-iterator-DlUkEfzW.mjs} +3 -3
  50. package/lib/index.mjs +598 -5275
  51. package/lib/kilo-ChJL54wq.mjs +81 -0
  52. package/lib/kimi-C2c_Zq8A.mjs +67 -0
  53. package/lib/{launch-BmgEUycu.mjs → launch-DKDH71En.mjs} +1 -1
  54. package/lib/markit-CmRfm4E2.mjs +9885 -0
  55. package/lib/models-DnXMYGcJ.mjs +381604 -0
  56. package/lib/muse-code-Di1VZmB1.mjs +143 -0
  57. package/lib/{ollama-Df9ce-Cp.mjs → ollama-B8ic3sEp.mjs} +15 -30
  58. package/lib/{openai-codex-CAVI3Me-.mjs → openai-codex-DuJNC99x.mjs} +29 -99
  59. package/lib/{openai-codex-responses-BcnOotRB.mjs → openai-codex-responses-BL29nh9K.mjs} +204 -116
  60. package/lib/{openai-completions-Bq4WT47M.mjs → openai-completions-BK2f2dBv.mjs} +152 -82
  61. package/lib/openai-configuration-update-xMYUjaK_.mjs +150 -0
  62. package/lib/{openai-reasoning-fallback-DXsfiSXO.mjs → openai-reasoning-fallback-BdB3RCbj.mjs} +106 -12
  63. package/lib/{openai-responses-Mq_-PjvE.mjs → openai-responses-CGQPlIIy.mjs} +76 -82
  64. package/lib/{perplexity-XgLF73E7.mjs → perplexity-TBjz3VMB.mjs} +52 -9
  65. package/lib/{pkce-BlQikGPu.mjs → pkce-BYjmugmw.mjs} +1 -1
  66. package/lib/protobuf-aab1UGVn.mjs +717 -0
  67. package/lib/{provider-response-C6vcbQyO.mjs → provider-response-SqKSkkUc.mjs} +1 -1
  68. package/lib/{proxy-D9lm7ONA.mjs → proxy-5nWqRL1f.mjs} +45 -5
  69. package/lib/{readability-Cpm-ocau.mjs → readability-uGhqb4GC.mjs} +2 -2
  70. package/lib/reference-CtvM4zLU.mjs +114 -0
  71. package/lib/{request-debug-HJMoJncL.mjs → request-debug-NQN0BjHH.mjs} +1 -1
  72. package/lib/{sanitize-text-CfcXzw5X.mjs → sanitize-text-BCf5KmCf.mjs} +1 -1
  73. package/lib/{scrapers-Cg5w77td.mjs → scrapers-BpqEnqNM.mjs} +12 -12
  74. package/lib/{src-BcD0_rQR.mjs → src-BwW51vA5.mjs} +979 -388
  75. package/lib/{sse-debug-CYdjOC96.mjs → sse-debug-B-tkLCPW.mjs} +1 -1
  76. package/lib/{stream-Bjq8wjfr.mjs → stream-B_7qN-bA.mjs} +3802 -2623
  77. package/lib/stream-markup-healing-DKT1lnkW.mjs +267 -0
  78. package/lib/{strict-tool-validation-imVLUcbI.mjs → strict-tool-validation-CBTz1dAA.mjs} +2 -2
  79. package/lib/taxonomy-DSIM99rS.mjs +15392 -0
  80. package/lib/{stream-markup-healing-DZ6bVDxH.mjs → thinking-CiLa2LFB.mjs} +31 -186
  81. package/lib/{turndown-DN7ByzEI.mjs → turndown-DrX1M4WG.mjs} +4 -4
  82. package/lib/{type-guards-B9VVjRDK.mjs → type-guards-CttAANEx.mjs} +1 -1
  83. package/lib/types/client/BashPlusCard.d.ts +53 -0
  84. package/lib/types/client/ToolPlusSection.d.ts +36 -0
  85. package/lib/types/client/forms.d.ts +42 -0
  86. package/lib/types/client/index.d.ts +29 -0
  87. package/lib/types/client/locales.d.ts +19 -0
  88. package/lib/types/client/rm-safe-status-text.d.ts +15 -0
  89. package/lib/types/client/rows.d.ts +107 -0
  90. package/lib/types/client/web-connection-rpc.d.ts +22 -0
  91. package/lib/types/config/fields.d.ts +85 -0
  92. package/lib/types/config/omp-settings.d.ts +21 -0
  93. package/lib/types/config/settings.d.ts +212 -0
  94. package/lib/types/config/truncate.d.ts +27 -0
  95. package/lib/types/host/browser-probe-rpc.d.ts +29 -0
  96. package/lib/types/index.d.ts +6 -0
  97. package/lib/types/tools/ast-edit/adapter/index.d.ts +26 -0
  98. package/lib/types/tools/ast-edit/adapter/sdk.d.ts +49 -0
  99. package/lib/types/tools/ast-grep/adapter/index.d.ts +31 -0
  100. package/lib/types/tools/ast-grep/adapter/sdk.d.ts +44 -0
  101. package/lib/types/tools/bash/adapter/spill.d.ts +34 -0
  102. package/lib/types/tools/bash/background.d.ts +40 -0
  103. package/lib/types/tools/bash/bash-executor.d.ts +102 -0
  104. package/lib/types/tools/bash/bash-interceptor.d.ts +33 -0
  105. package/lib/types/tools/bash/cd-workdir.d.ts +35 -0
  106. package/lib/types/tools/bash/logger.d.ts +18 -0
  107. package/lib/types/tools/bash/non-interactive-env.d.ts +5 -0
  108. package/lib/types/tools/bash/render.d.ts +46 -0
  109. package/lib/types/tools/bash/rm-safe-status.d.ts +62 -0
  110. package/lib/types/tools/bash/rm-safe.d.ts +18 -0
  111. package/lib/types/tools/bash/sanitize-text.d.ts +34 -0
  112. package/lib/types/tools/bash/shell-snapshot.d.ts +31 -0
  113. package/lib/types/tools/bash/shell-tokenize.d.ts +60 -0
  114. package/lib/types/tools/bash/streaming-output.d.ts +32 -0
  115. package/lib/types/tools/bash/trash-cli-main.d.ts +1 -0
  116. package/lib/types/tools/bash/trash-cli.d.ts +77 -0
  117. package/lib/types/tools/bash/types.d.ts +107 -0
  118. package/lib/types/tools/bash/which.d.ts +20 -0
  119. package/lib/types/tools/bash/windows-shell.d.ts +31 -0
  120. package/lib/types/tools/bash/yield.d.ts +71 -0
  121. package/lib/types/tools/edit/adapter/index.d.ts +57 -0
  122. package/lib/types/tools/edit/adapter/tools/auto-generated-guard.d.ts +10 -0
  123. package/lib/types/tools/edit/adapter/tools/output-meta.d.ts +34 -0
  124. package/lib/types/tools/edit/adapter/tools/plan-mode-guard.d.ts +21 -0
  125. package/lib/types/tools/glob/adapter/index.d.ts +52 -0
  126. package/lib/types/tools/grep/adapter/index.d.ts +53 -0
  127. package/lib/types/tools/grep/adapter/match-path.d.ts +1 -0
  128. package/lib/types/tools/hashline/native/diff-preview.d.ts +37 -0
  129. package/lib/types/tools/hashline/native/index.d.ts +109 -0
  130. package/lib/types/tools/hashline/native/normalize.d.ts +29 -0
  131. package/lib/types/tools/hashline/native/policy.d.ts +98 -0
  132. package/lib/types/tools/hashline/native/writer.d.ts +42 -0
  133. package/lib/types/tools/omp/browser/launch.d.ts +28 -0
  134. package/lib/types/tools/omp/browser/readable.d.ts +17 -0
  135. package/lib/types/tools/omp/config/settings-schema.d.ts +12 -0
  136. package/lib/types/tools/omp/config/settings.d.ts +59 -0
  137. package/lib/types/tools/omp/edit/apply-patch/parser.d.ts +34 -0
  138. package/lib/types/tools/omp/edit/details.d.ts +54 -0
  139. package/lib/types/tools/omp/edit/diff.d.ts +60 -0
  140. package/lib/types/tools/omp/edit/dispatch.d.ts +43 -0
  141. package/lib/types/tools/omp/edit/file-snapshot-store.d.ts +81 -0
  142. package/lib/types/tools/omp/edit/hashline/execute.d.ts +40 -0
  143. package/lib/types/tools/omp/edit/hashline/params.d.ts +6 -0
  144. package/lib/types/tools/omp/edit/modes/apply-patch.d.ts +25 -0
  145. package/lib/types/tools/omp/edit/modes/patch.d.ts +109 -0
  146. package/lib/types/tools/omp/edit/modes/replace.d.ts +151 -0
  147. package/lib/types/tools/omp/edit/normalize.d.ts +31 -0
  148. package/lib/types/tools/omp/edit/notebook.d.ts +50 -0
  149. package/lib/types/tools/omp/edit/read-file.d.ts +2 -0
  150. package/lib/types/tools/omp/edit/snapshot-details.d.ts +33 -0
  151. package/lib/types/tools/omp/extensibility/skills.d.ts +22 -0
  152. package/lib/types/tools/omp/internal-urls/index.d.ts +100 -0
  153. package/lib/types/tools/omp/internal-urls/local-protocol.d.ts +12 -0
  154. package/lib/types/tools/omp/internal-urls/parse.d.ts +31 -0
  155. package/lib/types/tools/omp/internal-urls/types.d.ts +189 -0
  156. package/lib/types/tools/omp/internal-urls/xd-protocol.d.ts +19 -0
  157. package/lib/types/tools/omp/markit/converters/docx.d.ts +6 -0
  158. package/lib/types/tools/omp/markit/converters/epub.d.ts +15 -0
  159. package/lib/types/tools/omp/markit/converters/pdf/index.d.ts +7 -0
  160. package/lib/types/tools/omp/markit/converters/pptx.d.ts +57 -0
  161. package/lib/types/tools/omp/markit/converters/xlsx.d.ts +25 -0
  162. package/lib/types/tools/omp/markit/index.d.ts +2 -0
  163. package/lib/types/tools/omp/markit/registry.d.ts +16 -0
  164. package/lib/types/tools/omp/markit/types.d.ts +30 -0
  165. package/lib/types/tools/omp/sdk.d.ts +103 -0
  166. package/lib/types/tools/omp/session/agent-storage.d.ts +154 -0
  167. package/lib/types/tools/omp/session/streaming-output.d.ts +244 -0
  168. package/lib/types/tools/omp/task/spawn-policy.d.ts +22 -0
  169. package/lib/types/tools/omp/tools/approval.d.ts +62 -0
  170. package/lib/types/tools/omp/tools/ast-edit.d.ts +73 -0
  171. package/lib/types/tools/omp/tools/ast-grep.d.ts +61 -0
  172. package/lib/types/tools/omp/tools/auto-generated-guard.d.ts +20 -0
  173. package/lib/types/tools/omp/tools/conflict-detect.d.ts +237 -0
  174. package/lib/types/tools/omp/tools/fetch.d.ts +103 -0
  175. package/lib/types/tools/omp/tools/file-recorder.d.ts +13 -0
  176. package/lib/types/tools/omp/tools/fs-cache-invalidation.d.ts +15 -0
  177. package/lib/types/tools/omp/tools/glob.d.ts +86 -0
  178. package/lib/types/tools/omp/tools/grep.d.ts +102 -0
  179. package/lib/types/tools/omp/tools/grouped-file-output.d.ts +70 -0
  180. package/lib/types/tools/omp/tools/index.d.ts +23 -0
  181. package/lib/types/tools/omp/tools/list-limit.d.ts +12 -0
  182. package/lib/types/tools/omp/tools/match-line-format.d.ts +11 -0
  183. package/lib/types/tools/omp/tools/output-meta.d.ts +160 -0
  184. package/lib/types/tools/omp/tools/path-utils.d.ts +326 -0
  185. package/lib/types/tools/omp/tools/plan-mode-guard.d.ts +33 -0
  186. package/lib/types/tools/omp/tools/read-archive.d.ts +16 -0
  187. package/lib/types/tools/omp/tools/read-format.d.ts +104 -0
  188. package/lib/types/tools/omp/tools/read-path-resolution.d.ts +19 -0
  189. package/lib/types/tools/omp/tools/read-selector.d.ts +27 -0
  190. package/lib/types/tools/omp/tools/read-sqlite.d.ts +16 -0
  191. package/lib/types/tools/omp/tools/read-summary.d.ts +15 -0
  192. package/lib/types/tools/omp/tools/read.d.ts +70 -0
  193. package/lib/types/tools/omp/tools/render-utils.d.ts +28 -0
  194. package/lib/types/tools/omp/tools/report-tool-issue.d.ts +149 -0
  195. package/lib/types/tools/omp/tools/resolve.d.ts +127 -0
  196. package/lib/types/tools/omp/tools/sqlite-reader.d.ts +114 -0
  197. package/lib/types/tools/omp/tools/tool-errors.d.ts +33 -0
  198. package/lib/types/tools/omp/tools/tool-result.d.ts +33 -0
  199. package/lib/types/tools/omp/tools/tool-timeouts.d.ts +57 -0
  200. package/lib/types/tools/omp/tools/write.d.ts +53 -0
  201. package/lib/types/tools/omp/tools/writethrough.d.ts +24 -0
  202. package/lib/types/tools/omp/utils/block-context.d.ts +35 -0
  203. package/lib/types/tools/omp/utils/cpuprofile.d.ts +51 -0
  204. package/lib/types/tools/omp/utils/edit-mode.d.ts +13 -0
  205. package/lib/types/tools/omp/utils/file-display-mode.d.ts +27 -0
  206. package/lib/types/tools/omp/utils/image-loading.d.ts +51 -0
  207. package/lib/types/tools/omp/utils/image-resize.d.ts +42 -0
  208. package/lib/types/tools/omp/utils/lang-from-path.d.ts +9 -0
  209. package/lib/types/tools/omp/utils/markit-cache.d.ts +23 -0
  210. package/lib/types/tools/omp/utils/markit.d.ts +30 -0
  211. package/lib/types/tools/omp/utils/profile-tree.d.ts +47 -0
  212. package/lib/types/tools/omp/utils/sample-profile.d.ts +67 -0
  213. package/lib/types/tools/omp/utils/sixel.d.ts +21 -0
  214. package/lib/types/tools/omp/utils/tools-manager.d.ts +11 -0
  215. package/lib/types/tools/omp/utils/turndown.d.ts +15 -0
  216. package/lib/types/tools/omp/utils/zip.d.ts +129 -0
  217. package/lib/types/tools/omp/web/browser-render.d.ts +50 -0
  218. package/lib/types/tools/omp/web/parallel.d.ts +68 -0
  219. package/lib/types/tools/omp/web/scrapers/artifacthub.d.ts +6 -0
  220. package/lib/types/tools/omp/web/scrapers/arxiv.d.ts +5 -0
  221. package/lib/types/tools/omp/web/scrapers/aur.d.ts +5 -0
  222. package/lib/types/tools/omp/web/scrapers/biorxiv.d.ts +5 -0
  223. package/lib/types/tools/omp/web/scrapers/bluesky.d.ts +5 -0
  224. package/lib/types/tools/omp/web/scrapers/brew.d.ts +5 -0
  225. package/lib/types/tools/omp/web/scrapers/cheatsh.d.ts +8 -0
  226. package/lib/types/tools/omp/web/scrapers/chocolatey.d.ts +5 -0
  227. package/lib/types/tools/omp/web/scrapers/choosealicense.d.ts +2 -0
  228. package/lib/types/tools/omp/web/scrapers/cisa-kev.d.ts +5 -0
  229. package/lib/types/tools/omp/web/scrapers/clojars.d.ts +5 -0
  230. package/lib/types/tools/omp/web/scrapers/coingecko.d.ts +5 -0
  231. package/lib/types/tools/omp/web/scrapers/crates-io.d.ts +5 -0
  232. package/lib/types/tools/omp/web/scrapers/crossref.d.ts +2 -0
  233. package/lib/types/tools/omp/web/scrapers/devto.d.ts +5 -0
  234. package/lib/types/tools/omp/web/scrapers/discogs.d.ts +8 -0
  235. package/lib/types/tools/omp/web/scrapers/discourse.d.ts +5 -0
  236. package/lib/types/tools/omp/web/scrapers/dockerhub.d.ts +5 -0
  237. package/lib/types/tools/omp/web/scrapers/docs-rs.d.ts +9 -0
  238. package/lib/types/tools/omp/web/scrapers/fdroid.d.ts +5 -0
  239. package/lib/types/tools/omp/web/scrapers/firefox-addons.d.ts +2 -0
  240. package/lib/types/tools/omp/web/scrapers/flathub.d.ts +2 -0
  241. package/lib/types/tools/omp/web/scrapers/github-gist.d.ts +5 -0
  242. package/lib/types/tools/omp/web/scrapers/github.d.ts +34 -0
  243. package/lib/types/tools/omp/web/scrapers/gitlab.d.ts +5 -0
  244. package/lib/types/tools/omp/web/scrapers/go-pkg.d.ts +5 -0
  245. package/lib/types/tools/omp/web/scrapers/hackage.d.ts +5 -0
  246. package/lib/types/tools/omp/web/scrapers/hackernews.d.ts +2 -0
  247. package/lib/types/tools/omp/web/scrapers/hex.d.ts +5 -0
  248. package/lib/types/tools/omp/web/scrapers/huggingface.d.ts +2 -0
  249. package/lib/types/tools/omp/web/scrapers/iacr.d.ts +5 -0
  250. package/lib/types/tools/omp/web/scrapers/index.d.ts +84 -0
  251. package/lib/types/tools/omp/web/scrapers/jetbrains-marketplace.d.ts +2 -0
  252. package/lib/types/tools/omp/web/scrapers/lemmy.d.ts +2 -0
  253. package/lib/types/tools/omp/web/scrapers/lobsters.d.ts +5 -0
  254. package/lib/types/tools/omp/web/scrapers/mastodon.d.ts +5 -0
  255. package/lib/types/tools/omp/web/scrapers/maven.d.ts +6 -0
  256. package/lib/types/tools/omp/web/scrapers/mdn.d.ts +2 -0
  257. package/lib/types/tools/omp/web/scrapers/metacpan.d.ts +5 -0
  258. package/lib/types/tools/omp/web/scrapers/musicbrainz.d.ts +5 -0
  259. package/lib/types/tools/omp/web/scrapers/npm.d.ts +5 -0
  260. package/lib/types/tools/omp/web/scrapers/nuget.d.ts +5 -0
  261. package/lib/types/tools/omp/web/scrapers/nvd.d.ts +5 -0
  262. package/lib/types/tools/omp/web/scrapers/ollama.d.ts +2 -0
  263. package/lib/types/tools/omp/web/scrapers/open-vsx.d.ts +5 -0
  264. package/lib/types/tools/omp/web/scrapers/opencorporates.d.ts +5 -0
  265. package/lib/types/tools/omp/web/scrapers/openlibrary.d.ts +5 -0
  266. package/lib/types/tools/omp/web/scrapers/orcid.d.ts +5 -0
  267. package/lib/types/tools/omp/web/scrapers/osv.d.ts +5 -0
  268. package/lib/types/tools/omp/web/scrapers/packagist.d.ts +5 -0
  269. package/lib/types/tools/omp/web/scrapers/pub-dev.d.ts +5 -0
  270. package/lib/types/tools/omp/web/scrapers/pubmed.d.ts +5 -0
  271. package/lib/types/tools/omp/web/scrapers/pypi.d.ts +5 -0
  272. package/lib/types/tools/omp/web/scrapers/rawg.d.ts +2 -0
  273. package/lib/types/tools/omp/web/scrapers/readthedocs.d.ts +2 -0
  274. package/lib/types/tools/omp/web/scrapers/reddit.d.ts +5 -0
  275. package/lib/types/tools/omp/web/scrapers/repology.d.ts +5 -0
  276. package/lib/types/tools/omp/web/scrapers/rfc.d.ts +5 -0
  277. package/lib/types/tools/omp/web/scrapers/rubygems.d.ts +5 -0
  278. package/lib/types/tools/omp/web/scrapers/searchcode.d.ts +2 -0
  279. package/lib/types/tools/omp/web/scrapers/sec-edgar.d.ts +5 -0
  280. package/lib/types/tools/omp/web/scrapers/semantic-scholar.d.ts +2 -0
  281. package/lib/types/tools/omp/web/scrapers/snapcraft.d.ts +2 -0
  282. package/lib/types/tools/omp/web/scrapers/sourcegraph.d.ts +2 -0
  283. package/lib/types/tools/omp/web/scrapers/spdx.d.ts +5 -0
  284. package/lib/types/tools/omp/web/scrapers/spotify.d.ts +8 -0
  285. package/lib/types/tools/omp/web/scrapers/stackoverflow.d.ts +6 -0
  286. package/lib/types/tools/omp/web/scrapers/terraform.d.ts +5 -0
  287. package/lib/types/tools/omp/web/scrapers/tldr.d.ts +7 -0
  288. package/lib/types/tools/omp/web/scrapers/twitter.d.ts +5 -0
  289. package/lib/types/tools/omp/web/scrapers/types.d.ts +90 -0
  290. package/lib/types/tools/omp/web/scrapers/utils.d.ts +26 -0
  291. package/lib/types/tools/omp/web/scrapers/vimeo.d.ts +5 -0
  292. package/lib/types/tools/omp/web/scrapers/vscode-marketplace.d.ts +5 -0
  293. package/lib/types/tools/omp/web/scrapers/w3c.d.ts +2 -0
  294. package/lib/types/tools/omp/web/scrapers/wikidata.d.ts +5 -0
  295. package/lib/types/tools/omp/web/scrapers/wikipedia.d.ts +5 -0
  296. package/lib/types/tools/omp/web/scrapers/youtube.d.ts +5 -0
  297. package/lib/types/tools/omp/web/search/providers/utils.d.ts +49 -0
  298. package/lib/types/tools/omp/web/search/types.d.ts +501 -0
  299. package/lib/types/tools/omp/web/search/utils.d.ts +4 -0
  300. package/lib/types/tools/omp/workspace-tree.d.ts +42 -0
  301. package/lib/types/tools/read/adapter/index.d.ts +49 -0
  302. package/lib/types/tools/read/adapter/internal-urls/artifact-protocol.d.ts +15 -0
  303. package/lib/types/tools/read/adapter/internal-urls/registry-helpers.d.ts +44 -0
  304. package/lib/types/tools/read/adapter/registry/agent-registry.d.ts +29 -0
  305. package/lib/types/tools/shared/auto-generated-guard.dsh.d.ts +16 -0
  306. package/lib/types/tools/shared/browser-detect.d.ts +54 -0
  307. package/lib/types/tools/shared/browser-rpc-channel.d.ts +40 -0
  308. package/lib/types/tools/shared/bun-ffi-shim.d.ts +13 -0
  309. package/lib/types/tools/shared/bun-named-shim.d.ts +42 -0
  310. package/lib/types/tools/shared/bun-shim.d.ts +138 -0
  311. package/lib/types/tools/shared/bun-sqlite-shim.d.ts +49 -0
  312. package/lib/types/tools/shared/fs-promises-shim.d.ts +15 -0
  313. package/lib/types/tools/shared/image-bridge.d.ts +98 -0
  314. package/lib/types/tools/shared/omp-prompt.d.ts +47 -0
  315. package/lib/types/tools/shared/sandbox-policy.d.ts +38 -0
  316. package/lib/types/tools/shared/session-state.d.ts +51 -0
  317. package/lib/types/tools/shared/tool-errors.d.ts +33 -0
  318. package/lib/types/tools/shared/win-path-fixes.d.ts +16 -0
  319. package/lib/types/tools/write/adapter/index.d.ts +31 -0
  320. package/lib/{types-DX_bvuus.mjs → types-PVueGi9S.mjs} +2 -2
  321. package/lib/{utils-C-dSORPa.mjs → utils-B7A3Eu4L.mjs} +2364 -2676
  322. package/lib/{utils-Cp2Mxf_U.mjs → utils-CUPhpw9A.mjs} +413 -134
  323. package/lib/{utils-CQHPEQ3W.mjs → utils-DeWqNWV8.mjs} +2 -2
  324. package/lib/{vision-guard-mBmtAHx0.mjs → vision-guard-_XwsL1DF.mjs} +14 -29
  325. package/lib/xai-oauth-CXhnz0gO.mjs +210 -0
  326. package/lib/{xiaomi-7mE345KX.mjs → xiaomi-psoUItal.mjs} +8 -37
  327. package/lib/{zai-CeNpMV3W.mjs → zai-ApJ8HBgT.mjs} +8 -71
  328. package/lib/{zip-BK7UHCwX.mjs → zip-Kd602XNe.mjs} +1 -1
  329. package/package.json +12 -12
  330. package/presets/package.json +1 -1
  331. package/presets/tool-plus-ptc/agent.cordis.yml +1 -1
  332. package/presets/tool-plus-standard/agent.cordis.yml +1 -1
  333. package/scripts/patch-pi-natives.mjs +108 -108
  334. package/lib/agent_pb-Rizyt9Zg.mjs +0 -805
  335. package/lib/anthropic-CDmj476p.mjs +0 -262
  336. package/lib/api_server_pb-CDZgLMta.mjs +0 -252
  337. package/lib/callback-server-CFJK-jvK.mjs +0 -398
  338. package/lib/codex-P1dGpX7G.mjs +0 -54
  339. package/lib/device-code-CuXTWYwY.mjs +0 -51
  340. package/lib/devin-BcQwht1W.mjs +0 -114
  341. package/lib/devin-BvMfGevz.mjs +0 -95
  342. package/lib/github-copilot-B3kQl0g0.mjs +0 -104
  343. package/lib/gitlab-duo-BriUTP8k.mjs +0 -155
  344. package/lib/gitlab-duo-workflow-wK5Ljzmc.mjs +0 -91
  345. package/lib/google-CE5tFDod.mjs +0 -30
  346. package/lib/google-antigravity-C1jgNljz.mjs +0 -198
  347. package/lib/google-oauth-shared-BLVTvokk.mjs +0 -147
  348. package/lib/grammar-D-NqNUxQ.mjs +0 -49
  349. package/lib/identity-HNO1Oe9B.mjs +0 -219
  350. package/lib/kimi-DgcUpPtK.mjs +0 -236
  351. package/lib/markit-DtGoRE6M.mjs +0 -1417
  352. package/lib/minimax-code-Y3h5li9N.mjs +0 -53
  353. package/lib/models-DRA2c_8U.mjs +0 -104660
  354. package/lib/opencode-BsVw9rCD.mjs +0 -38
  355. package/lib/to-binary-B1BEBIPC.mjs +0 -6002
  356. package/lib/wafer-BlhWLweO.mjs +0 -17
  357. package/lib/xai-oauth-5pORHUrg.mjs +0 -446
@@ -1,9 +1,7 @@
1
1
  import { installBunShim as __installBunShim } from "./bun-shim.mjs";
2
2
  __installBunShim();
3
- import { D as partialSuffixOverlapAny, E as FencedThinkingScanner, T as createInbandScanner } from "./utils-Cp2Mxf_U.mjs";
4
- import { h as isDeepseekModelIdOrName } from "./models-DRA2c_8U.mjs";
5
- import "./identity-HNO1Oe9B.mjs";
6
- //#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/dialect/thinking.ts
3
+ import { D as FencedThinkingScanner, O as partialSuffixOverlapAny } from "./utils-CUPhpw9A.mjs";
4
+ //#region node_modules/.pnpm/@oh-my-pi+pi-ai@18.1.17/node_modules/@oh-my-pi/pi-ai/src/dialect/thinking.ts
7
5
  /**
8
6
  * Every dialect's in-band thinking section in its canonical `renderThinking`
9
7
  * form (see the sibling `./*.ts` scanners). {@link ThinkingInbandScanner} heals
@@ -18,7 +16,8 @@ import "./identity-HNO1Oe9B.mjs";
18
16
  const TAGS = [
19
17
  {
20
18
  open: "<think>",
21
- close: "</think>"
19
+ close: "</think>",
20
+ impliedOpen: true
22
21
  },
23
22
  {
24
23
  open: "<thinking>",
@@ -47,7 +46,10 @@ const TAGS = [
47
46
  }
48
47
  ];
49
48
  const OPENS = TAGS.map((tag) => tag.open);
49
+ const IMPLIED_OPEN_TAGS = TAGS.filter((tag) => tag.impliedOpen);
50
+ const IMPLIED_OPEN_DELIMITERS = [...OPENS, ...IMPLIED_OPEN_TAGS.map((tag) => tag.close)];
50
51
  var ThinkingInbandScanner = class {
52
+ #impliedOpen;
51
53
  #buffer = "";
52
54
  #closeTag = "";
53
55
  #thinking = "";
@@ -63,6 +65,9 @@ var ThinkingInbandScanner = class {
63
65
  * stream — or one indented ≤3 spaces, as CommonMark allows — is recognized.
64
66
  */
65
67
  #lineIndent = 0;
68
+ constructor(options = {}) {
69
+ this.#impliedOpen = options.impliedOpen === true;
70
+ }
66
71
  feed(text) {
67
72
  if (text.length === 0) return [];
68
73
  this.#buffer += text;
@@ -127,7 +132,7 @@ var ThinkingInbandScanner = class {
127
132
  if (this.#emitCode(final, events)) continue;
128
133
  break;
129
134
  }
130
- const hit = scanVisible(this.#buffer, final);
135
+ const hit = scanVisible(this.#buffer, final, this.#impliedOpen);
131
136
  if (hit.kind === "none") {
132
137
  this.#emitText(this.#buffer, events);
133
138
  this.#buffer = "";
@@ -138,6 +143,11 @@ var ThinkingInbandScanner = class {
138
143
  this.#buffer = this.#buffer.slice(hit.index);
139
144
  break;
140
145
  }
146
+ if (hit.kind === "impliedClose") {
147
+ this.#buffer = this.#buffer.slice(hit.index + hit.tag.close.length);
148
+ events.push({ type: "impliedThinkingEnd" });
149
+ continue;
150
+ }
141
151
  if (hit.kind === "code") {
142
152
  const fenced = hit.ticks >= 3 && this.#lineIndent >= 0 && this.#lineIndent <= 3;
143
153
  this.#emitText(this.#buffer.slice(hit.index, hit.index + hit.ticks), events);
@@ -217,14 +227,16 @@ var ThinkingInbandScanner = class {
217
227
  };
218
228
  /**
219
229
  * Walk idle visible text for the earliest boundary: a leaked reasoning-tag open,
220
- * a Markdown code-span/fence opener (a backtick run), or — when more chunks may
221
- * follow — a held partial delimiter at the buffer tail.
230
+ * a bare close of an implied-open tag (when `impliedOpen`), a Markdown
231
+ * code-span/fence opener (a backtick run), or — when more chunks may follow — a
232
+ * held partial delimiter at the buffer tail.
222
233
  *
223
234
  * Reasoning tags win at any position so the gemini ` ```thinking ` fence is
224
235
  * healed instead of being read as a code fence. Backtick runs enter code mode so
225
236
  * a literal `<think>` inside inline code or a fenced block stays visible text.
226
237
  */
227
- function scanVisible(buffer, final) {
238
+ function scanVisible(buffer, final, impliedOpen) {
239
+ const delimiters = impliedOpen ? IMPLIED_OPEN_DELIMITERS : OPENS;
228
240
  for (let i = 0; i < buffer.length; i++) {
229
241
  const tag = TAGS.find((candidate) => buffer.startsWith(candidate.open, i));
230
242
  if (tag) return {
@@ -232,9 +244,17 @@ function scanVisible(buffer, final) {
232
244
  index: i,
233
245
  tag
234
246
  };
247
+ if (impliedOpen) {
248
+ const closed = IMPLIED_OPEN_TAGS.find((candidate) => buffer.startsWith(candidate.close, i));
249
+ if (closed) return {
250
+ kind: "impliedClose",
251
+ index: i,
252
+ tag: closed
253
+ };
254
+ }
235
255
  if (!final) {
236
256
  const rest = buffer.slice(i);
237
- if (OPENS.some((open) => open.length > rest.length && open.startsWith(rest))) return {
257
+ if (delimiters.some((delimiter) => delimiter.length > rest.length && delimiter.startsWith(rest))) return {
238
258
  kind: "hold",
239
259
  index: i
240
260
  };
@@ -313,179 +333,4 @@ function isAllBackticks(text) {
313
333
  return text.length > 0;
314
334
  }
315
335
  //#endregion
316
- //#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/utils/stream-markup-healing.ts
317
- /**
318
- * Streaming-safe filters for leaked chat-template tool-call and thinking markup.
319
- *
320
- * Hosted models sometimes leak raw template markup into visible `content` instead
321
- * of returning structured events. Tool-call healing delegates to the same
322
- * dialect scanners used by owned in-band tool calling; this file keeps the
323
- * provider-facing compatibility wrapper and model/provider gating.
324
- */
325
- const KIMI_SECTION_END = "<|tool_calls_section_end|>";
326
- const DSML_TOOL_CALLS_CLOSE_FULLWIDTH = "</|DSML|tool_calls>";
327
- const DSML_TOOL_CALLS_CLOSE_ASCII = "</|DSML|tool_calls>";
328
- /**
329
- * State machine that consumes streamed visible text and emits cleaned text,
330
- * thinking deltas, and reconstructed tool calls.
331
- *
332
- * A {@link ThinkingInbandScanner} always heals leaked reasoning idioms
333
- * (`<think>`, `<thinking>`, ` ```thinking `, Gemma/Harmony channels, …) out of
334
- * the visible channel. For Kimi / DeepSeek-DSML the provider tool-call grammar
335
- * runs first and its cleaned text is piped through that thinking healer, so a
336
- * model can leak tool-call markup and reasoning in the same stream.
337
- *
338
- * Feed only one stream channel (usually `delta.content` / `message.content`).
339
- * Mixing reasoning and visible text into the same instance can corrupt held-back
340
- * partial tag buffers.
341
- */
342
- var StreamMarkupHealing = class {
343
- #pattern;
344
- /** Provider tool-call grammar (Kimi tokens / DSML envelope); absent for plain text streams. */
345
- #toolScanner;
346
- /** Always-on healer for leaked reasoning idioms in the visible text channel. */
347
- #thinkingScanner = new ThinkingInbandScanner();
348
- #sectionTerminated = false;
349
- #completed = [];
350
- constructor(options) {
351
- this.#pattern = options.pattern;
352
- this.#toolScanner = options.pattern === "kimi" ? createInbandScanner("kimi") : options.pattern === "dsml" ? createInbandScanner("xml", { xmlTagset: "dsml" }) : void 0;
353
- }
354
- get pattern() {
355
- return this.#pattern;
356
- }
357
- /**
358
- * Feed a chunk and return visible text only. Reconstructed tool calls are
359
- * stored for {@link drainCompleted}; thinking blocks are intentionally not
360
- * returned by this compatibility helper. Use {@link feedEvents} when the caller
361
- * needs ordered text/thinking/tool-call events.
362
- */
363
- feed(text) {
364
- let clean = "";
365
- for (const event of this.feedEvents(text)) if (event.type === "text") clean += event.text;
366
- else if (event.type === "toolCall") this.#completed.push(event.call);
367
- return clean;
368
- }
369
- /** Feed a chunk and return cleaned text/thinking/tool-call events in stream order. */
370
- feedEvents(text) {
371
- if (text.length === 0) return [];
372
- this.#markSectionClosed(text);
373
- if (!this.#toolScanner) return this.#convertScannerEvents(this.#thinkingScanner.feed(text));
374
- return this.#convertScannerEvents(this.#healThinking(this.#toolScanner.feed(text)));
375
- }
376
- /**
377
- * Feed a chunk and return cleaned events, excluding synthesized tool calls.
378
- * Used when the upstream chunk also carries structured `tool_calls`, keeping
379
- * that structured payload as the single source of truth while preserving
380
- * adjacent text and thinking events.
381
- */
382
- feedEventsWithoutCalls(text) {
383
- const events = this.feedEvents(text);
384
- let out;
385
- for (let i = 0; i < events.length; i++) {
386
- const event = events[i];
387
- if (event.type === "toolCall") out ??= events.slice(0, i);
388
- else if (out) out.push(event);
389
- }
390
- return out ?? events;
391
- }
392
- /** Drain accumulated tool calls from calls to {@link feed}. */
393
- drainCompleted() {
394
- if (this.#completed.length === 0) return [];
395
- return this.#completed.splice(0, this.#completed.length);
396
- }
397
- /**
398
- * Flush held-back stream-end fragments as ordered events. Partial tool-call
399
- * sections/envelopes are dropped by the delegated scanners; unterminated
400
- * thinking blocks are emitted as thinking, matching the previous MiniMax parser
401
- * behavior.
402
- */
403
- flushEvents() {
404
- const tail = this.#toolScanner ? this.#healThinking(this.#toolScanner.flush()) : [];
405
- tail.push(...this.#thinkingScanner.flush());
406
- return this.#convertScannerEvents(tail);
407
- }
408
- /** Flush held-back text only. Reconstructed calls are retained for {@link drainCompleted}. */
409
- flushPending() {
410
- let clean = "";
411
- for (const event of this.flushEvents()) if (event.type === "text") clean += event.text;
412
- else if (event.type === "toolCall") this.#completed.push(event.call);
413
- return clean;
414
- }
415
- /** True once any configured tool-call section/envelope has fully closed. */
416
- get sectionClosed() {
417
- return this.#sectionTerminated;
418
- }
419
- #markSectionClosed(text) {
420
- if (this.#sectionTerminated || !this.#toolScanner) return;
421
- if (this.#pattern === "kimi") {
422
- this.#sectionTerminated = text.includes(KIMI_SECTION_END);
423
- return;
424
- }
425
- this.#sectionTerminated = text.includes(DSML_TOOL_CALLS_CLOSE_FULLWIDTH) || text.includes(DSML_TOOL_CALLS_CLOSE_ASCII);
426
- }
427
- /**
428
- * Re-scan the tool scanner's visible text through the always-on thinking
429
- * healer: `text` events are healed for leaked reasoning idioms, while the tool
430
- * scanner's own thinking / tool-call events pass through in stream order.
431
- */
432
- #healThinking(toolEvents) {
433
- const out = [];
434
- for (const event of toolEvents) if (event.type === "text") out.push(...this.#thinkingScanner.feed(event.text));
435
- else out.push(event);
436
- return out;
437
- }
438
- #convertScannerEvents(events) {
439
- const out = [];
440
- for (const event of events) switch (event.type) {
441
- case "text":
442
- out.push({
443
- type: "text",
444
- text: event.text
445
- });
446
- break;
447
- case "thinkingDelta":
448
- if (event.delta.length > 0) out.push({
449
- type: "thinking",
450
- thinking: event.delta
451
- });
452
- break;
453
- case "toolEnd": out.push({
454
- type: "toolCall",
455
- call: {
456
- id: generateHealedToolCallId(),
457
- name: event.name,
458
- arguments: JSON.stringify(event.arguments)
459
- }
460
- });
461
- }
462
- return out;
463
- }
464
- };
465
- function generateHealedToolCallId() {
466
- return `call_${crypto.randomUUID().replace(/-/g, "").slice(0, 24)}`;
467
- }
468
- /** Cheap model/provider gate for Kimi-K2 chat-template token leaks. */
469
- function modelMayLeakKimiToolCalls(provider, modelId) {
470
- if (provider === "kimi-code" || provider === "moonshot") return true;
471
- return /kimi[-/_.]?k2/i.test(modelId);
472
- }
473
- /** Cheap model/provider gate for DeepSeek DSML envelope leaks. */
474
- function modelMayLeakDsmlToolCalls(provider, modelId) {
475
- if (!isDeepseekModelIdOrName(modelId)) return false;
476
- return provider === "ollama" || provider === "ollama-cloud" || provider === "nvidia" || provider === "deepseek" || provider === "fireworks" || provider === "nanogpt" || provider === "opencode-go" || provider === "openrouter";
477
- }
478
- /**
479
- * Pick the leaked-markup healer for an OpenAI-compatible / Ollama visible-text
480
- * stream. Kimi chat-template tokens and DeepSeek DSML envelopes need their
481
- * dedicated tool-call grammars; every other model uses `"thinking"`. All three
482
- * patterns run the generic {@link ThinkingInbandScanner}, so leaked reasoning
483
- * idioms (e.g. a Gemini ` ```thinking ` fence on OpenRouter) are always healed.
484
- */
485
- function getStreamMarkupHealingPattern(provider, modelId) {
486
- if (modelMayLeakKimiToolCalls(provider, modelId)) return "kimi";
487
- if (modelMayLeakDsmlToolCalls(provider, modelId)) return "dsml";
488
- return "thinking";
489
- }
490
- //#endregion
491
- export { getStreamMarkupHealingPattern as n, StreamMarkupHealing as t };
336
+ export { ThinkingInbandScanner as t };
@@ -1,7 +1,7 @@
1
1
  import { installBunShim as __installBunShim } from "./bun-shim.mjs";
2
2
  __installBunShim();
3
3
  import { r as __exportAll } from "./fs-promises-shim-Bx0fpxuk.mjs";
4
- //#region node_modules/.pnpm/@oh-my-pi+pi-utils@17.3.5/node_modules/@oh-my-pi/pi-utils/src/turndown/gfm.ts
4
+ //#region node_modules/.pnpm/@oh-my-pi+pi-utils@18.1.17/node_modules/@oh-my-pi/pi-utils/src/turndown/gfm.ts
5
5
  function descendantElements(node, name) {
6
6
  const matches = [];
7
7
  for (const child of Array.from(node.children)) {
@@ -98,7 +98,7 @@ const gfm = (service) => {
98
98
  taskListItems(service);
99
99
  };
100
100
  //#endregion
101
- //#region node_modules/.pnpm/@oh-my-pi+pi-utils@17.3.5/node_modules/@oh-my-pi/pi-utils/src/turndown/html.ts
101
+ //#region node_modules/.pnpm/@oh-my-pi+pi-utils@18.1.17/node_modules/@oh-my-pi/pi-utils/src/turndown/html.ts
102
102
  const VOID_ELEMENTS = {
103
103
  AREA: true,
104
104
  BASE: true,
@@ -284,7 +284,7 @@ function parseHtmlFragment(html) {
284
284
  const stack = [root];
285
285
  for (const token of htmlTokens(html)) {
286
286
  const parent = stack[stack.length - 1] ?? root;
287
- if (token.startsWith("<!--") || /^<!/i.test(token)) continue;
287
+ if (token.startsWith("<!--") || token.startsWith("<!")) continue;
288
288
  if (!token.startsWith("<")) {
289
289
  parent.append(new HtmlText(decodeEntities(token)));
290
290
  continue;
@@ -317,7 +317,7 @@ function serializeNode(node) {
317
317
  return Array.from(node.childNodes).map(serializeNode).join("");
318
318
  }
319
319
  //#endregion
320
- //#region node_modules/.pnpm/@oh-my-pi+pi-utils@17.3.5/node_modules/@oh-my-pi/pi-utils/src/turndown/service.ts
320
+ //#region node_modules/.pnpm/@oh-my-pi+pi-utils@18.1.17/node_modules/@oh-my-pi/pi-utils/src/turndown/service.ts
321
321
  const BLOCK_ELEMENTS = {
322
322
  ADDRESS: true,
323
323
  ARTICLE: true,
@@ -1,6 +1,6 @@
1
1
  import { installBunShim as __installBunShim } from "./bun-shim.mjs";
2
2
  __installBunShim();
3
- //#region node_modules/.pnpm/@oh-my-pi+pi-utils@17.3.5/node_modules/@oh-my-pi/pi-utils/src/type-guards.ts
3
+ //#region node_modules/.pnpm/@oh-my-pi+pi-utils@18.1.17/node_modules/@oh-my-pi/pi-utils/src/type-guards.ts
4
4
  function isRecord(value) {
5
5
  return !!value && typeof value === "object" && !Array.isArray(value);
6
6
  }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The tool-plus settings card — a collapsible disclosure card in the Plugins
3
+ * settings tab styled against the app's `--dsw-alias-*` design tokens and the
4
+ * official card interaction (header button with unsaved badge + rotating
5
+ * chevron, smooth expand/collapse respecting reduced-motion, staged edits that
6
+ * survive collapsing, one Save write, nothing rendered while the namespace is
7
+ * unavailable). Copy is fully localized through the slot-injected `t` seat
8
+ * (`locale: 'tool-plus'`), which re-renders on a locale switch.
9
+ *
10
+ * The card edits the FLAT settings surface (OMP `bash*`-style scalar keys) —
11
+ * the client scope only writes scalar fields — grouped as timeouts,
12
+ * backgrounding, output, completion truncation (subdivided into byte and line
13
+ * settings), and behavior. Field definitions, defaults, and copy keys come
14
+ * from the single-source field table (`src/config/fields.ts`), shared with
15
+ * the Tool Plus settings section.
16
+ * @module @xiaoso/dsh-tool-plus/client
17
+ */
18
+ import { type ReactNode } from 'react';
19
+ import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
20
+ import type { SettingsScope } from '@deepseek-ai/dsh-client-ui-settings/client';
21
+ import type { OutputRetentionMode, OutputTruncateStrategy } from '../config/settings.ts';
22
+ /** The flat, scalar-editable fields this card edits (mirrors the settings schema). */
23
+ export interface BashPlusSettings {
24
+ enableRunInBackground?: boolean;
25
+ autoBackgroundMs?: number;
26
+ defaultTimeoutMs?: number;
27
+ maxTimeoutMs?: number;
28
+ outputMaxBytes?: number;
29
+ outputSinkTailBytes?: number;
30
+ outputSinkHeadBytes?: number;
31
+ minimizerEnabled?: boolean;
32
+ interceptorEnabled?: boolean;
33
+ nonInteractiveEnv?: boolean;
34
+ snapshotEnabled?: boolean;
35
+ useShellCommandWrapper?: boolean;
36
+ maxBackgroundJobs?: number;
37
+ outputTruncateStrategy?: OutputTruncateStrategy;
38
+ outputTruncateTriggerBytes?: number;
39
+ outputTruncateTriggerLines?: number;
40
+ outputTruncateByteMode?: OutputRetentionMode;
41
+ outputTruncateByteHeadBytes?: number;
42
+ outputTruncateByteTailBytes?: number;
43
+ outputTruncateLineMode?: OutputRetentionMode;
44
+ outputTruncateLineHeadLines?: number;
45
+ outputTruncateLineTailLines?: number;
46
+ }
47
+ /** Business face the slot registration injects: the bound scope. */
48
+ export interface BashPlusCardFace {
49
+ scope: SettingsScope<BashPlusSettings>;
50
+ }
51
+ /** Props the renderer binds: runtime seat, the `t` locale seat, and the scope face. */
52
+ export type BashPlusCardProps = PropsRuntime<'settings.plugin.item'> & PropsLocale<'tool-plus'> & BashPlusCardFace;
53
+ export declare function BashPlusCard(props: BashPlusCardProps): ReactNode;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Tool Plus settings section — the plugin's own page in the Settings panel,
3
+ * registered into the `settings.section` slot (nav id `tool-plus`). The page
4
+ * renders one tab per tool (Bash / Read / Write & Edit / Grep /
5
+ * Ast Edit / Read Image); switching a tab shows that tool's configurable
6
+ * fields, while tools without global settings show a placeholder. Only the
7
+ * active tool's panel is rendered; the shared staged form over the
8
+ * `tool-plus` namespace lives at the page level, so drafts survive switching
9
+ * without keeping hidden panels mounted — the same flat schema the Bash card
10
+ * edits, from the same single-source field table.
11
+ *
12
+ * `action`-kind fields (e.g. 探测浏览器) are not part of the staged form:
13
+ * they run a host RPC endpoint over the official Connection channel
14
+ * (`/tool-plus`), with per-field running/result state kept at the page level.
15
+ *
16
+ * Tab chrome mirrors the official Plugins settings section
17
+ * (ui-settings-plugins): `role="tablist"` + tab/panel roles, aria wiring,
18
+ * and arrow/Home/End keyboard roaming.
19
+ *
20
+ * The page is pinned to the host settings pane: the heading, intro and tablist
21
+ * stay put, the save bar sits at the bottom, and the tab panel is the only
22
+ * scroller — so the scrollbar spans just the band between them.
23
+ * @module @xiaoso/dsh-tool-plus/client
24
+ */
25
+ import { type ReactNode } from 'react';
26
+ import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
27
+ import type { SettingsScope } from '@deepseek-ai/dsh-client-ui-settings/client';
28
+ import { type ToolSettingsValue } from './forms.ts';
29
+ /** Registration-side face: the bound settings scope. */
30
+ export interface ToolPlusSectionInjected {
31
+ scope: SettingsScope<ToolSettingsValue>;
32
+ }
33
+ /** Props the renderer binds for the section (owner + locale + injected face). */
34
+ export type ToolPlusSectionProps = PropsRuntime<'settings.section'> & PropsLocale<'tool-plus'> & InjectFace<ToolPlusSectionInjected>;
35
+ /** Render the Tool Plus settings section. */
36
+ export declare function ToolPlusSection(props: ToolPlusSectionProps): ReactNode;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Generic staged-form model over the plugin's flat settings namespace,
3
+ * shared by the Bash card and the Tool Plus settings section. A form stages
4
+ * what the user types and writes it only on save; field definitions come from
5
+ * the single-source table (`src/config/fields.ts`), so every surface renders
6
+ * the same fields with the same defaults.
7
+ * @module @xiaoso/dsh-tool-plus/client
8
+ */
9
+ import type { SettingsScope } from '@deepseek-ai/dsh-client-ui-settings/client';
10
+ import type { CardShell } from '@deepseek-ai/dsh-client-ui-settings-plugins/client';
11
+ import type { ToolPlusField } from '../config/fields.ts';
12
+ import { type NumberControl, type SelectControl, type ToggleControl } from './rows.tsx';
13
+ /** The flat settings document shape this form edits. */
14
+ export type ToolSettingsValue = Record<string, number | boolean | string | undefined>;
15
+ /** One group of controls (a Bash subgroup or a whole tool's section). */
16
+ export interface ToolFormGroup {
17
+ group: string;
18
+ numbers: NumberControl[];
19
+ selects: SelectControl[];
20
+ toggles: ToggleControl[];
21
+ }
22
+ /** The form state a settings surface renders. */
23
+ export interface ToolForm {
24
+ shell: CardShell;
25
+ /** Controls grouped by `ToolPlusField.group`, in first-appearance order. */
26
+ groups: ToolFormGroup[];
27
+ actions: {
28
+ edit: (field: string, text: string) => void;
29
+ resetField: (field: string) => void;
30
+ save: () => Promise<void>;
31
+ discard: () => void;
32
+ };
33
+ editSelect: (field: string, value: string) => void;
34
+ onToggle: (field: string, checked: boolean) => void;
35
+ }
36
+ /**
37
+ * Stage edits over the bound scope; only a Save writes the document.
38
+ * @param scope - bound settings scope for the `tool-plus` namespace.
39
+ * @param fields - the fields this surface edits (single-source table slice).
40
+ * @returns the form state and its write actions.
41
+ */
42
+ export declare function useToolForm(scope: SettingsScope<ToolSettingsValue>, fields: readonly ToolPlusField[]): ToolForm;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Tool-plus settings card, browser half. Registers the plugin's card into the
3
+ * Plugins settings surface's `settings.plugin.item` slot — keyed by the
4
+ * `tool-plus` namespace, so the configurable tab pairs it with the Host-side
5
+ * namespace of the same name — binds that namespace's settings scope for
6
+ * reads and writes, and registers the card's locale dictionaries.
7
+ *
8
+ * Only officially exported APIs are used (`dsh-client-ui-slots` slot
9
+ * registry, `dsh-client-locale` dictionary registration, `dsh-client-ui-settings`
10
+ * scope contract and binder, and the published
11
+ * `dsh-client-ui-settings-plugins` slot-type declaration); the card itself is
12
+ * this package's own, not a copy of any non-exported card internals.
13
+ *
14
+ * @module @xiaoso/dsh-tool-plus/client
15
+ */
16
+ import type { Context as ClientContext } from '@deepseek-ai/cordis';
17
+ /**
18
+ * Settings namespace of this plugin, spelled here because a client package
19
+ * must not depend on a Host package — official convention: the browser half
20
+ * spells the same value the Host plugin registers (src/config/settings.ts).
21
+ */
22
+ export declare const BASH_PLUS_CLIENT_NS = "tool-plus";
23
+ /** Required services (cordis fiber inject): slots + locale + the settings scope binder. */
24
+ export declare const inject: string[];
25
+ /**
26
+ * Mount the tool-plus settings card.
27
+ * @param ctx - the browser plugin context.
28
+ */
29
+ export declare function apply(ctx: ClientContext): void;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Locale bundles for the bash-plus settings card. zh is the source of truth
3
+ * for the key set; en is checked complete against it — both dictionaries are
4
+ * `Record<BashPlusLocaleKey, string>`, so a missing or extra key in either is
5
+ * a compile error (the official registration enforces bilingual balance).
6
+ * @module @xiaoso/dsh-tool-plus/client
7
+ */
8
+ export type BashPlusLocaleKey = 'title' | 'description' | 'nav' | 'pageTitle' | 'pageDescription' | 'tabBash' | 'tabRead' | 'tabWriteEdit' | 'tabGrep' | 'tabGlob' | 'tabAstGrep' | 'tabAstEdit' | 'tabReadImage' | 'groupTiming' | 'groupOutput' | 'groupTruncation' | 'groupBehavior' | 'groupReading' | 'groupSummary' | 'groupImages' | 'groupEditMode' | 'groupGuard' | 'groupGrep' | 'groupSearchDefaults' | 'groupFetch' | 'groupAst' | 'noConfigTitle' | 'noConfigHint' | 'readSummarizeEnabled' | 'readSummarizeEnabledHint' | 'readSummarizeProse' | 'readSummarizeProseHint' | 'readSummarizeMinBodyLines' | 'readSummarizeMinBodyLinesHint' | 'readSummarizeMinCommentLines' | 'readSummarizeMinCommentLinesHint' | 'readSummarizeMinTotalLines' | 'readSummarizeMinTotalLinesHint' | 'readSummarizeUnfoldUntil' | 'readSummarizeUnfoldUntilHint' | 'readSummarizeUnfoldLimit' | 'readSummarizeUnfoldLimitHint' | 'editBlockAutoGenerated' | 'editBlockAutoGeneratedHint' | 'readDefaultLimit' | 'readDefaultLimitHint' | 'readLineNumbers' | 'readLineNumbersHint' | 'readRenderMarkdown' | 'readRenderMarkdownHint' | 'readConcurrentSafe' | 'readConcurrentSafeHint' | 'editMode' | 'editModeHint' | 'editFuzzyMatch' | 'editFuzzyMatchHint' | 'editFuzzyThreshold' | 'editFuzzyThresholdHint' | 'editEnforceSeenLines' | 'editEnforceSeenLinesHint' | 'grepContextBefore' | 'grepContextBeforeHint' | 'grepContextAfter' | 'grepContextAfterHint' | 'grepCaseDefault' | 'grepCaseDefaultHint' | 'grepGitignoreDefault' | 'grepGitignoreDefaultHint' | 'globGitignoreDefault' | 'globGitignoreDefaultHint' | 'globHiddenDefault' | 'globHiddenDefaultHint' | 'astGrepEnabled' | 'astGrepEnabledHint' | 'astEditEnabled' | 'astEditEnabledHint' | 'optReplace' | 'optPatch' | 'optHashline' | 'optApplyPatch' | 'fetchEnabled' | 'fetchEnabledHint' | 'fetchMaxTimeoutSeconds' | 'fetchMaxTimeoutSecondsHint' | 'fetchReader' | 'fetchReaderHint' | 'browserReaderEnabled' | 'browserReaderEnabledHint' | 'browserProbe' | 'browserProbeHint' | 'browserProbeRunning' | 'browserProbeNone' | 'browserProbeFailed' | 'browserProbeUnavailable' | 'optReaderAuto' | 'optReaderNative' | 'optReaderTrafilatura' | 'optReaderLynx' | 'optReaderParallel' | 'optReaderJina' | 'optReaderBrowser' | 'imagesAutoResize' | 'imagesAutoResizeHint' | 'imagesBlockImages' | 'imagesBlockImagesHint' | 'imagesExcludeWebp' | 'imagesExcludeWebpHint' | 'imagesInputMaxBytes' | 'imagesInputMaxBytesHint' | 'imagesResizeMaxSide' | 'imagesResizeMaxSideHint' | 'imagesResizeMaxBytes' | 'imagesResizeMaxBytesHint' | 'imagesResizeMinSide' | 'imagesResizeMinSideHint' | 'imagesResizeJpegQuality' | 'imagesResizeJpegQualityHint' | 'autoBackgroundMs' | 'autoBackgroundMsHint' | 'defaultTimeoutMs' | 'defaultTimeoutMsHint' | 'maxTimeoutMs' | 'maxTimeoutMsHint' | 'maxBackgroundJobs' | 'maxBackgroundJobsHint' | 'outputMaxBytes' | 'outputMaxBytesHint' | 'outputSinkTailBytes' | 'outputSinkTailBytesHint' | 'outputSinkHeadBytes' | 'outputSinkHeadBytesHint' | 'minimizerEnabled' | 'minimizerEnabledHint' | 'enableRunInBackground' | 'enableRunInBackgroundHint' | 'interceptorEnabled' | 'interceptorEnabledHint' | 'nonInteractiveEnv' | 'nonInteractiveEnvHint' | 'snapshotEnabled' | 'snapshotEnabledHint' | 'rmSafe' | 'rmSafeHint' | 'rmSafeStatusInjected' | 'rmSafeStatusInjectedUnverified' | 'rmSafeStatusFailed' | 'rmSafeReasonSnapshotUnavailable' | 'rmSafeReasonCliMissing' | 'rmSafeReasonSnapshotWriteFailed' | 'rmSafeReasonRuntimeNotEffective' | 'useShellCommandWrapper' | 'useShellCommandWrapperHint' | 'outputTruncateStrategy' | 'outputTruncateStrategyHint' | 'outputTruncateTriggerBytes' | 'outputTruncateTriggerBytesHint' | 'outputTruncateTriggerLines' | 'outputTruncateTriggerLinesHint' | 'outputTruncateByteMode' | 'outputTruncateByteModeHint' | 'outputTruncateByteHeadBytes' | 'outputTruncateByteHeadBytesHint' | 'outputTruncateByteTailBytes' | 'outputTruncateByteTailBytesHint' | 'outputTruncateLineMode' | 'outputTruncateLineModeHint' | 'outputTruncateLineHeadLines' | 'outputTruncateLineHeadLinesHint' | 'outputTruncateLineTailLines' | 'outputTruncateLineTailLinesHint' | 'optBytes' | 'optLines' | 'optHead' | 'optTail' | 'optMiddle' | 'overridden' | 'reset' | 'readOnly' | 'expand' | 'collapse' | 'save' | 'saving' | 'discard' | 'unsaved' | 'saveFailed' | 'invalidNumber' | 'appliesTo';
9
+ /** Simplified Chinese copy. */
10
+ export declare const zh: Record<BashPlusLocaleKey, string>;
11
+ /** English copy. */
12
+ export declare const en: Record<BashPlusLocaleKey, string>;
13
+ /** Merge this plugin's namespace into the slot locale table (official pattern). */
14
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
15
+ interface LocaleNamespaceMap {
16
+ /** This plugin's own settings-card copy. */
17
+ 'tool-plus': BashPlusLocaleKey;
18
+ }
19
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * rmSafe/status 结果 → 本地化文案的纯映射(无 React/DOM 依赖,可单测)。
3
+ * @module @xiaoso/dsh-tool-plus/client/rm-safe-status-text
4
+ */
5
+ import type { RmSafeStatusValue } from '../tools/shared/browser-rpc-channel.ts';
6
+ import type { BashPlusLocaleKey } from './locales.ts';
7
+ /** Locale key of one rmSafe failure reason. */
8
+ export declare function rmSafeReasonKey(reason: Extract<RmSafeStatusValue, {
9
+ status: 'failed';
10
+ }>['reason']): BashPlusLocaleKey;
11
+ /**
12
+ * Localized text of one rmSafe/status result. `disabled` maps to the empty
13
+ * string — the caller decides not to surface it.
14
+ */
15
+ export declare function rmSafeStatusText(t: (key: BashPlusLocaleKey) => string, value: RmSafeStatusValue): string;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Shared settings-row controls for the tool-plus settings surfaces: number
3
+ * input, select pill, and toggle switch rows, styled against the app's
4
+ * `--dsw-alias-*` design tokens. Extracted from the Bash card so the Plugins
5
+ * card and the Tool Plus settings section render identical controls.
6
+ * @module @xiaoso/dsh-tool-plus/client
7
+ */
8
+ import { type ReactNode } from 'react';
9
+ import type { BashPlusLocaleKey } from './locales.ts';
10
+ /** One rendered number control. */
11
+ export interface NumberControl {
12
+ field: string;
13
+ labelKey: BashPlusLocaleKey;
14
+ hintKey: BashPlusLocaleKey;
15
+ text: string;
16
+ overridden: boolean;
17
+ invalid: boolean;
18
+ }
19
+ /** One rendered select control. */
20
+ export interface SelectControl {
21
+ field: string;
22
+ labelKey: BashPlusLocaleKey;
23
+ hintKey: BashPlusLocaleKey;
24
+ options: readonly {
25
+ value: string;
26
+ labelKey: BashPlusLocaleKey;
27
+ }[];
28
+ value: string;
29
+ overridden: boolean;
30
+ }
31
+ /** One rendered toggle control. */
32
+ export interface ToggleControl {
33
+ field: string;
34
+ labelKey: BashPlusLocaleKey;
35
+ hintKey: BashPlusLocaleKey;
36
+ checked: boolean;
37
+ overridden: boolean;
38
+ }
39
+ /** One rendered action control (button that calls a host RPC endpoint). */
40
+ export interface ActionControl {
41
+ field: string;
42
+ labelKey: BashPlusLocaleKey;
43
+ hintKey: BashPlusLocaleKey;
44
+ actionKey: string;
45
+ }
46
+ /**
47
+ * Shared row control CSS, keyed by `data-plugin-css` and injected once.
48
+ *
49
+ * Motion discipline: every moving control animates transform/opacity only
50
+ * (GPU-composited); color transitions fire on hover/focus state changes
51
+ * only. Everything is disabled under prefers-reduced-motion. All colors are
52
+ * `--dsw-alias-*` host tokens (or color-mix of them), so light/dark themes
53
+ * adapt automatically.
54
+ */
55
+ export declare const SETTINGS_ROWS_CSS = "\n.tp-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--dsw-alias-border-l1);transition:background .16s ease}\n.tp-row:last-child{border-bottom:none}\n.tp-rowText{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;padding-right:24px}\n.tp-rowTitle{font-size:14px;font-weight:400;line-height:22px;color:var(--dsw-alias-label-primary)}\n.tp-rowDesc{font-size:12px;font-weight:400;line-height:18px;color:var(--dsw-alias-label-tertiary)}\n.tp-badges{display:inline-flex;align-items:center;gap:8px}\n.tp-badge{display:inline-flex;align-items:center;gap:6px;padding:1px 0;font-size:11px;line-height:17px;white-space:nowrap;font-weight:500;color:var(--dsw-alias-label-tertiary)}\n.tp-badge::before{content:'';flex:none;width:5px;height:5px;border-radius:999px;background:var(--dsw-alias-state-business-primary)}\n.tp-reset{position:relative;border:none;background:none;padding:2px 0;font:inherit;font-size:12px;line-height:1.5;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color .16s ease}\n.tp-reset::after{content:'';position:absolute;left:0;right:0;bottom:0;height:1px;border-radius:1px;background:currentColor;opacity:0;transform:scaleX(.6);transform-origin:left center;transition:opacity .16s ease,transform .2s cubic-bezier(.22,1,.36,1)}\n.tp-reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}\n.tp-reset:hover:not(:disabled)::after{opacity:.6;transform:scaleX(1)}\n.tp-reset:disabled{cursor:default}\n.tp-reset:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px;border-radius:2px}\n.tp-input{flex:none;width:128px;height:34px;padding:0 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-1);font:inherit;font-size:13px;line-height:1.5;color:var(--dsw-alias-label-primary);box-sizing:border-box;transition:border-color .16s ease}\n.tp-input:hover:not(:disabled):not(:focus-visible){border-color:var(--dsw-alias-border-l3)}\n.tp-input:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px;border-color:var(--dsw-alias-border-l3)}\n.tp-input:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}\n.tp-input.tp-invalid{border-color:var(--dsw-alias-label-error)}\n.tp-input.tp-invalid:focus-visible{outline-color:var(--dsw-alias-state-error-primary)}\n.tp-invalidText{color:var(--dsw-alias-label-error);animation:tp-soft-in .18s ease both}\n.tp-selectAnchor{display:inline-flex;flex-shrink:0}\n.tp-selectTrigger{display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-module-platform);font:inherit;font-size:13px;line-height:20px;color:var(--dsw-alias-label-primary);cursor:pointer;flex-shrink:0;transition:background .16s ease,border-color .16s ease,transform .1s ease}\n.tp-selectTrigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3)}\n.tp-selectTrigger:active:not(:disabled){transform:scale(.97)}\n.tp-selectTrigger:disabled{opacity:.55;cursor:default}\n.tp-selectTrigger:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}\n.tp-selectChevron{flex:none;color:var(--dsw-alias-label-tertiary);display:inline-flex;transition:transform .2s cubic-bezier(.22,1,.36,1)}\n.tp-selectTrigger[aria-expanded=\"true\"] .tp-selectChevron{transform:rotate(180deg)}\n.tp-switch{position:relative;width:40px;height:24px;flex:none}\n.tp-switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;z-index:1}\n.tp-switchTrack{position:absolute;inset:0;border-radius:999px;background:var(--dsw-alias-border-l2);transition:background .18s ease;pointer-events:none}\n.tp-row:hover .tp-switchTrack{background:var(--dsw-alias-border-l3)}\n.tp-switch input:checked+.tp-switchTrack{background:var(--dsw-alias-brand-primary)}\n.tp-row:hover .tp-switch input:checked+.tp-switchTrack{background:var(--dsw-alias-brand-primary)}\n.tp-switch input:focus-visible+.tp-switchTrack{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}\n.tp-thumb{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:999px;background:var(--dsw-alias-bg-layer-3);box-shadow:0 1px 3px rgba(0,0,0,.14),0 1px 1px rgba(0,0,0,.08);transition:transform .2s cubic-bezier(.34,1.3,.5,1);transform-origin:left center;pointer-events:none}\n.tp-switch input:checked~.tp-thumb{transform:translateX(16px);transform-origin:right center}\n.tp-switch input:active:not(:disabled)~.tp-thumb{transform:scaleX(1.2)}\n.tp-switch input:checked:active:not(:disabled)~.tp-thumb{transform:translateX(16px) scaleX(1.2)}\n.tp-switch input:disabled{cursor:default}\n.tp-switch input:disabled~.tp-switchTrack,.tp-switch input:disabled~.tp-thumb{opacity:.45}\n.tp-actionField{display:flex;flex-direction:column;gap:8px;padding:12px 0;border-bottom:1px solid var(--dsw-alias-border-l1)}\n.tp-actionField:last-child{border-bottom:none}\n.tp-actionHead{display:flex;align-items:center;gap:12px}\n.tp-actionInfo{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}\n.tp-actionTitle{font-size:14px;font-weight:400;line-height:22px;color:var(--dsw-alias-label-primary)}\n.tp-actionDesc{font-size:12px;font-weight:400;line-height:18px;color:var(--dsw-alias-label-tertiary)}\n.tp-actionButton{appearance:none;flex:none;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-1);padding:5px 14px;font:inherit;font-size:13px;line-height:1.5;color:var(--dsw-alias-label-primary);cursor:pointer;transition:background .16s ease,border-color .16s ease,transform .1s ease}\n.tp-actionButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3)}\n.tp-actionButton:active:not(:disabled){transform:scale(.97)}\n.tp-actionButton:disabled{opacity:.55;cursor:default}\n.tp-actionButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}\n.tp-actionResult{margin:0;font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;animation:tp-soft-in .22s cubic-bezier(.22,1,.36,1) both}\n.tp-actionResult[data-state=\"ok\"]{color:var(--dsw-alias-label-secondary)}\n.tp-actionResult[data-state=\"error\"]{color:var(--dsw-alias-label-error)}\n@keyframes tp-soft-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}\n@media (prefers-reduced-motion: reduce){\n .tp-row,.tp-reset,.tp-reset::after,.tp-input,.tp-selectTrigger,.tp-selectChevron,.tp-switchTrack,.tp-thumb,.tp-actionButton{transition:none}\n .tp-invalidText,.tp-actionResult{animation:none}\n}\n";
56
+ export declare function injectSettingsRowsCss(): void;
57
+ declare function hasOwn(obj: unknown, key: string): boolean;
58
+ /**
59
+ * Number row: same left-text / right-control anatomy as toggle and select
60
+ * rows, with the input right-aligned at a fixed width. The title is wired to
61
+ * the input (htmlFor), so clicking the title focuses the input; the
62
+ * description and the rest of the row are inert — each side manages its own
63
+ * interaction.
64
+ */
65
+ export declare function NumberRow(props: {
66
+ t: (key: BashPlusLocaleKey) => string;
67
+ control: NumberControl;
68
+ disabled: boolean;
69
+ onEdit: (field: string, text: string) => void;
70
+ onReset: (field: string) => void;
71
+ }): ReactNode;
72
+ /** Select row: Title + desc stacked on left, selector pill on right. */
73
+ export declare function SelectRow(props: {
74
+ t: (key: BashPlusLocaleKey) => string;
75
+ control: SelectControl;
76
+ disabled: boolean;
77
+ open: boolean;
78
+ onOpenChange: (field: string | null) => void;
79
+ onEdit: (field: string, value: string) => void;
80
+ onReset: (field: string) => void;
81
+ }): ReactNode;
82
+ /** Toggle row: Title + desc stacked on left, switch on right. */
83
+ export declare function ToggleRow(props: {
84
+ t: (key: BashPlusLocaleKey) => string;
85
+ control: ToggleControl;
86
+ disabled: boolean;
87
+ onToggle: (field: string, checked: boolean) => void;
88
+ onReset: (field: string) => void;
89
+ }): ReactNode;
90
+ /**
91
+ * Action row: Title + desc stacked on left, a button on the right that calls
92
+ * the host RPC endpoint named by `control.actionKey` (via the Connection
93
+ * channel; the caller owns the RPC). The result line renders below, colored
94
+ * by outcome (`ok` / `error`).
95
+ */
96
+ export declare function ActionRow(props: {
97
+ t: (key: BashPlusLocaleKey) => string;
98
+ control: ActionControl;
99
+ disabled: boolean;
100
+ running: boolean;
101
+ result: {
102
+ ok: boolean;
103
+ text: string;
104
+ } | null;
105
+ onRun: (actionKey: string) => void;
106
+ }): ReactNode;
107
+ export { hasOwn };