rtrt-agent 0.1.7 → 0.2.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 (492) hide show
  1. package/README.ko.md +203 -15
  2. package/README.md +211 -15
  3. package/THIRD_PARTY_NOTICES/INDEX.md +120 -18
  4. package/THIRD_PARTY_NOTICES/INVENTORY.json +8151 -0
  5. package/THIRD_PARTY_NOTICES/SUPPLEMENTS.json +148 -0
  6. package/THIRD_PARTY_NOTICES/adler2@2.0.1/LICENSE-0BSD +12 -0
  7. package/THIRD_PARTY_NOTICES/adler2@2.0.1/LICENSE-APACHE +201 -0
  8. package/THIRD_PARTY_NOTICES/adler2@2.0.1/LICENSE-MIT +23 -0
  9. package/THIRD_PARTY_NOTICES/ahash@0.8.12/LICENSE-APACHE +201 -0
  10. package/THIRD_PARTY_NOTICES/ahash@0.8.12/LICENSE-MIT +25 -0
  11. package/THIRD_PARTY_NOTICES/aho-corasick@1.1.4/COPYING +3 -0
  12. package/THIRD_PARTY_NOTICES/aho-corasick@1.1.4/LICENSE-MIT +21 -0
  13. package/THIRD_PARTY_NOTICES/allocator-api2@0.2.21/LICENSE-APACHE +176 -0
  14. package/THIRD_PARTY_NOTICES/allocator-api2@0.2.21/LICENSE-MIT +23 -0
  15. package/THIRD_PARTY_NOTICES/anstream@1.0.0/LICENSE-APACHE +202 -0
  16. package/THIRD_PARTY_NOTICES/anstream@1.0.0/LICENSE-MIT +19 -0
  17. package/THIRD_PARTY_NOTICES/anstyle-parse@1.0.0/LICENSE-APACHE +202 -0
  18. package/THIRD_PARTY_NOTICES/anstyle-parse@1.0.0/LICENSE-MIT +19 -0
  19. package/THIRD_PARTY_NOTICES/anstyle-query@1.1.5/LICENSE-APACHE +202 -0
  20. package/THIRD_PARTY_NOTICES/anstyle-query@1.1.5/LICENSE-MIT +19 -0
  21. package/THIRD_PARTY_NOTICES/anstyle-wincon@3.0.11/LICENSE-APACHE +202 -0
  22. package/THIRD_PARTY_NOTICES/anstyle-wincon@3.0.11/LICENSE-MIT +19 -0
  23. package/THIRD_PARTY_NOTICES/anstyle@1.0.14/LICENSE-APACHE +202 -0
  24. package/THIRD_PARTY_NOTICES/anstyle@1.0.14/LICENSE-MIT +19 -0
  25. package/THIRD_PARTY_NOTICES/anyhow@1.0.103/LICENSE-APACHE +176 -0
  26. package/THIRD_PARTY_NOTICES/anyhow@1.0.103/LICENSE-MIT +23 -0
  27. package/THIRD_PARTY_NOTICES/async-compression@0.4.42/LICENSE-APACHE +201 -0
  28. package/THIRD_PARTY_NOTICES/async-compression@0.4.42/LICENSE-MIT +21 -0
  29. package/THIRD_PARTY_NOTICES/async-trait@0.1.92/LICENSE-APACHE +176 -0
  30. package/THIRD_PARTY_NOTICES/async-trait@0.1.92/LICENSE-MIT +23 -0
  31. package/THIRD_PARTY_NOTICES/atomic-waker@1.1.2/LICENSE-APACHE +201 -0
  32. package/THIRD_PARTY_NOTICES/atomic-waker@1.1.2/LICENSE-MIT +23 -0
  33. package/THIRD_PARTY_NOTICES/atomic-waker@1.1.2/LICENSE-THIRD-PARTY +45 -0
  34. package/THIRD_PARTY_NOTICES/autocfg@1.5.0/LICENSE-APACHE +201 -0
  35. package/THIRD_PARTY_NOTICES/autocfg@1.5.0/LICENSE-MIT +25 -0
  36. package/THIRD_PARTY_NOTICES/axum-core@0.5.6/LICENSE +27 -0
  37. package/THIRD_PARTY_NOTICES/axum-macros@0.5.1/LICENSE +7 -0
  38. package/THIRD_PARTY_NOTICES/axum@0.8.9/LICENSE +25 -0
  39. package/THIRD_PARTY_NOTICES/base64@0.22.1/LICENSE-APACHE +201 -0
  40. package/THIRD_PARTY_NOTICES/base64@0.22.1/LICENSE-MIT +21 -0
  41. package/THIRD_PARTY_NOTICES/bitflags@2.11.1/LICENSE-APACHE +201 -0
  42. package/THIRD_PARTY_NOTICES/bitflags@2.11.1/LICENSE-MIT +25 -0
  43. package/THIRD_PARTY_NOTICES/block-buffer@0.10.4/LICENSE-APACHE +201 -0
  44. package/THIRD_PARTY_NOTICES/block-buffer@0.10.4/LICENSE-MIT +25 -0
  45. package/THIRD_PARTY_NOTICES/bytes@1.11.1/LICENSE +25 -0
  46. package/THIRD_PARTY_NOTICES/cc@1.2.62/LICENSE-APACHE +201 -0
  47. package/THIRD_PARTY_NOTICES/cc@1.2.62/LICENSE-MIT +25 -0
  48. package/THIRD_PARTY_NOTICES/cfg-if@1.0.4/LICENSE-APACHE +201 -0
  49. package/THIRD_PARTY_NOTICES/cfg-if@1.0.4/LICENSE-MIT +25 -0
  50. package/THIRD_PARTY_NOTICES/chacha20@0.10.2/LICENSE-APACHE +201 -0
  51. package/THIRD_PARTY_NOTICES/chacha20@0.10.2/LICENSE-MIT +25 -0
  52. package/THIRD_PARTY_NOTICES/chrono@0.4.44/LICENSE.txt +240 -0
  53. package/THIRD_PARTY_NOTICES/clap@4.6.1/LICENSE-APACHE +202 -0
  54. package/THIRD_PARTY_NOTICES/clap@4.6.1/LICENSE-MIT +19 -0
  55. package/THIRD_PARTY_NOTICES/clap_builder@4.6.0/LICENSE-APACHE +202 -0
  56. package/THIRD_PARTY_NOTICES/clap_builder@4.6.0/LICENSE-MIT +19 -0
  57. package/THIRD_PARTY_NOTICES/clap_derive@4.6.1/LICENSE-APACHE +202 -0
  58. package/THIRD_PARTY_NOTICES/clap_derive@4.6.1/LICENSE-MIT +19 -0
  59. package/THIRD_PARTY_NOTICES/clap_lex@1.1.0/LICENSE-APACHE +202 -0
  60. package/THIRD_PARTY_NOTICES/clap_lex@1.1.0/LICENSE-MIT +19 -0
  61. package/THIRD_PARTY_NOTICES/colorchoice@1.0.5/LICENSE-APACHE +202 -0
  62. package/THIRD_PARTY_NOTICES/colorchoice@1.0.5/LICENSE-MIT +19 -0
  63. package/THIRD_PARTY_NOTICES/compression-codecs@0.4.38/LICENSE-APACHE +201 -0
  64. package/THIRD_PARTY_NOTICES/compression-codecs@0.4.38/LICENSE-MIT +21 -0
  65. package/THIRD_PARTY_NOTICES/compression-core@0.4.32/LICENSE-APACHE +201 -0
  66. package/THIRD_PARTY_NOTICES/compression-core@0.4.32/LICENSE-MIT +21 -0
  67. package/THIRD_PARTY_NOTICES/cpufeatures@0.2.17/LICENSE-APACHE +201 -0
  68. package/THIRD_PARTY_NOTICES/cpufeatures@0.2.17/LICENSE-MIT +25 -0
  69. package/THIRD_PARTY_NOTICES/cpufeatures@0.3.0/LICENSE-APACHE +201 -0
  70. package/THIRD_PARTY_NOTICES/cpufeatures@0.3.0/LICENSE-MIT +25 -0
  71. package/THIRD_PARTY_NOTICES/crc32fast@1.5.0/LICENSE-APACHE +202 -0
  72. package/THIRD_PARTY_NOTICES/crc32fast@1.5.0/LICENSE-MIT +21 -0
  73. package/THIRD_PARTY_NOTICES/crossbeam-deque@0.8.6/LICENSE-APACHE +201 -0
  74. package/THIRD_PARTY_NOTICES/crossbeam-deque@0.8.6/LICENSE-MIT +27 -0
  75. package/THIRD_PARTY_NOTICES/crossbeam-epoch@0.9.20/LICENSE-APACHE +201 -0
  76. package/THIRD_PARTY_NOTICES/crossbeam-epoch@0.9.20/LICENSE-MIT +27 -0
  77. package/THIRD_PARTY_NOTICES/crossbeam-utils@0.8.21/LICENSE-APACHE +201 -0
  78. package/THIRD_PARTY_NOTICES/crossbeam-utils@0.8.21/LICENSE-MIT +27 -0
  79. package/THIRD_PARTY_NOTICES/crypto-common@0.1.7/LICENSE-APACHE +201 -0
  80. package/THIRD_PARTY_NOTICES/crypto-common@0.1.7/LICENSE-MIT +25 -0
  81. package/THIRD_PARTY_NOTICES/darling@0.20.11/LICENSE +21 -0
  82. package/THIRD_PARTY_NOTICES/darling@0.23.0/LICENSE +21 -0
  83. package/THIRD_PARTY_NOTICES/darling_core@0.20.11/LICENSE +21 -0
  84. package/THIRD_PARTY_NOTICES/darling_core@0.23.0/LICENSE +21 -0
  85. package/THIRD_PARTY_NOTICES/darling_macro@0.20.11/LICENSE +21 -0
  86. package/THIRD_PARTY_NOTICES/darling_macro@0.23.0/LICENSE +21 -0
  87. package/THIRD_PARTY_NOTICES/derive_builder@0.20.2/LICENSE-APACHE +202 -0
  88. package/THIRD_PARTY_NOTICES/derive_builder@0.20.2/LICENSE-MIT +21 -0
  89. package/THIRD_PARTY_NOTICES/derive_builder_core@0.20.2/LICENSE-APACHE +202 -0
  90. package/THIRD_PARTY_NOTICES/derive_builder_core@0.20.2/LICENSE-MIT +21 -0
  91. package/THIRD_PARTY_NOTICES/derive_builder_macro@0.20.2/LICENSE-APACHE +202 -0
  92. package/THIRD_PARTY_NOTICES/derive_builder_macro@0.20.2/LICENSE-MIT +21 -0
  93. package/THIRD_PARTY_NOTICES/digest@0.10.7/LICENSE-APACHE +201 -0
  94. package/THIRD_PARTY_NOTICES/digest@0.10.7/LICENSE-MIT +25 -0
  95. package/THIRD_PARTY_NOTICES/dirs-sys@0.4.1/LICENSE-APACHE +174 -0
  96. package/THIRD_PARTY_NOTICES/dirs-sys@0.4.1/LICENSE-MIT +19 -0
  97. package/THIRD_PARTY_NOTICES/dirs@5.0.1/LICENSE-APACHE +174 -0
  98. package/THIRD_PARTY_NOTICES/dirs@5.0.1/LICENSE-MIT +19 -0
  99. package/THIRD_PARTY_NOTICES/displaydoc@0.2.5/LICENSE-APACHE +201 -0
  100. package/THIRD_PARTY_NOTICES/displaydoc@0.2.5/LICENSE-MIT +23 -0
  101. package/THIRD_PARTY_NOTICES/dyn-clone@1.0.20/LICENSE-APACHE +176 -0
  102. package/THIRD_PARTY_NOTICES/dyn-clone@1.0.20/LICENSE-MIT +23 -0
  103. package/THIRD_PARTY_NOTICES/either@1.16.0/LICENSE-APACHE +201 -0
  104. package/THIRD_PARTY_NOTICES/either@1.16.0/LICENSE-MIT +25 -0
  105. package/THIRD_PARTY_NOTICES/equivalent@1.0.2/LICENSE-APACHE +201 -0
  106. package/THIRD_PARTY_NOTICES/equivalent@1.0.2/LICENSE-MIT +25 -0
  107. package/THIRD_PARTY_NOTICES/errno@0.3.14/LICENSE-APACHE +201 -0
  108. package/THIRD_PARTY_NOTICES/errno@0.3.14/LICENSE-MIT +25 -0
  109. package/THIRD_PARTY_NOTICES/eventsource-stream@0.2.3/Cargo.toml +74 -0
  110. package/THIRD_PARTY_NOTICES/eventsource-stream@0.2.3/DECLARED-APACHE-2.0.txt +202 -0
  111. package/THIRD_PARTY_NOTICES/fallible-iterator@0.3.0/LICENSE-APACHE +202 -0
  112. package/THIRD_PARTY_NOTICES/fallible-iterator@0.3.0/LICENSE-MIT +19 -0
  113. package/THIRD_PARTY_NOTICES/fallible-streaming-iterator@0.1.9/LICENSE-APACHE +202 -0
  114. package/THIRD_PARTY_NOTICES/fallible-streaming-iterator@0.1.9/LICENSE-MIT +19 -0
  115. package/THIRD_PARTY_NOTICES/fastrand@2.4.1/LICENSE-APACHE +201 -0
  116. package/THIRD_PARTY_NOTICES/fastrand@2.4.1/LICENSE-MIT +23 -0
  117. package/THIRD_PARTY_NOTICES/find-msvc-tools@0.1.9/LICENSE-APACHE +201 -0
  118. package/THIRD_PARTY_NOTICES/find-msvc-tools@0.1.9/LICENSE-MIT +25 -0
  119. package/THIRD_PARTY_NOTICES/flate2@1.1.9/LICENSE-APACHE +201 -0
  120. package/THIRD_PARTY_NOTICES/flate2@1.1.9/LICENSE-MIT +25 -0
  121. package/THIRD_PARTY_NOTICES/fnv@1.0.7/LICENSE-APACHE +201 -0
  122. package/THIRD_PARTY_NOTICES/fnv@1.0.7/LICENSE-MIT +25 -0
  123. package/THIRD_PARTY_NOTICES/form_urlencoded@1.2.2/LICENSE-APACHE +201 -0
  124. package/THIRD_PARTY_NOTICES/form_urlencoded@1.2.2/LICENSE-MIT +25 -0
  125. package/THIRD_PARTY_NOTICES/fs2@0.4.3/LICENSE-APACHE +201 -0
  126. package/THIRD_PARTY_NOTICES/fs2@0.4.3/LICENSE-MIT +25 -0
  127. package/THIRD_PARTY_NOTICES/futures-channel@0.3.32/LICENSE-APACHE +202 -0
  128. package/THIRD_PARTY_NOTICES/futures-channel@0.3.32/LICENSE-MIT +26 -0
  129. package/THIRD_PARTY_NOTICES/futures-core@0.3.32/LICENSE-APACHE +202 -0
  130. package/THIRD_PARTY_NOTICES/futures-core@0.3.32/LICENSE-MIT +26 -0
  131. package/THIRD_PARTY_NOTICES/futures-executor@0.3.32/LICENSE-APACHE +202 -0
  132. package/THIRD_PARTY_NOTICES/futures-executor@0.3.32/LICENSE-MIT +26 -0
  133. package/THIRD_PARTY_NOTICES/futures-io@0.3.32/LICENSE-APACHE +202 -0
  134. package/THIRD_PARTY_NOTICES/futures-io@0.3.32/LICENSE-MIT +26 -0
  135. package/THIRD_PARTY_NOTICES/futures-macro@0.3.32/LICENSE-APACHE +202 -0
  136. package/THIRD_PARTY_NOTICES/futures-macro@0.3.32/LICENSE-MIT +26 -0
  137. package/THIRD_PARTY_NOTICES/futures-sink@0.3.32/LICENSE-APACHE +202 -0
  138. package/THIRD_PARTY_NOTICES/futures-sink@0.3.32/LICENSE-MIT +26 -0
  139. package/THIRD_PARTY_NOTICES/futures-task@0.3.32/LICENSE-APACHE +202 -0
  140. package/THIRD_PARTY_NOTICES/futures-task@0.3.32/LICENSE-MIT +26 -0
  141. package/THIRD_PARTY_NOTICES/futures-util@0.3.32/LICENSE-APACHE +202 -0
  142. package/THIRD_PARTY_NOTICES/futures-util@0.3.32/LICENSE-MIT +26 -0
  143. package/THIRD_PARTY_NOTICES/futures@0.3.32/LICENSE-APACHE +202 -0
  144. package/THIRD_PARTY_NOTICES/futures@0.3.32/LICENSE-MIT +26 -0
  145. package/THIRD_PARTY_NOTICES/generic-array@0.14.7/LICENSE +21 -0
  146. package/THIRD_PARTY_NOTICES/getrandom@0.2.17/LICENSE-APACHE +201 -0
  147. package/THIRD_PARTY_NOTICES/getrandom@0.2.17/LICENSE-MIT +26 -0
  148. package/THIRD_PARTY_NOTICES/getrandom@0.3.4/LICENSE-APACHE +201 -0
  149. package/THIRD_PARTY_NOTICES/getrandom@0.3.4/LICENSE-MIT +26 -0
  150. package/THIRD_PARTY_NOTICES/getrandom@0.4.2/LICENSE-APACHE +201 -0
  151. package/THIRD_PARTY_NOTICES/getrandom@0.4.2/LICENSE-MIT +26 -0
  152. package/THIRD_PARTY_NOTICES/handlebars@6.4.1/LICENSE +22 -0
  153. package/THIRD_PARTY_NOTICES/handlebars@6.4.1/wasm/LICENSE +22 -0
  154. package/THIRD_PARTY_NOTICES/hashbrown@0.14.5/LICENSE-APACHE +201 -0
  155. package/THIRD_PARTY_NOTICES/hashbrown@0.14.5/LICENSE-MIT +25 -0
  156. package/THIRD_PARTY_NOTICES/hashbrown@0.17.1/LICENSE-APACHE +201 -0
  157. package/THIRD_PARTY_NOTICES/hashbrown@0.17.1/LICENSE-MIT +25 -0
  158. package/THIRD_PARTY_NOTICES/hashlink@0.9.1/LICENSE-APACHE +201 -0
  159. package/THIRD_PARTY_NOTICES/hashlink@0.9.1/LICENSE-MIT +26 -0
  160. package/THIRD_PARTY_NOTICES/heck@0.5.0/LICENSE-APACHE +201 -0
  161. package/THIRD_PARTY_NOTICES/heck@0.5.0/LICENSE-MIT +25 -0
  162. package/THIRD_PARTY_NOTICES/hmac@0.12.1/LICENSE-APACHE +201 -0
  163. package/THIRD_PARTY_NOTICES/hmac@0.12.1/LICENSE-MIT +25 -0
  164. package/THIRD_PARTY_NOTICES/http-body-util@0.1.3/LICENSE +25 -0
  165. package/THIRD_PARTY_NOTICES/http-body@1.0.1/LICENSE +25 -0
  166. package/THIRD_PARTY_NOTICES/http-range-header@0.4.2/LICENSE +21 -0
  167. package/THIRD_PARTY_NOTICES/http@1.4.0/LICENSE-APACHE +201 -0
  168. package/THIRD_PARTY_NOTICES/http@1.4.0/LICENSE-MIT +25 -0
  169. package/THIRD_PARTY_NOTICES/httparse@1.10.1/LICENSE-APACHE +201 -0
  170. package/THIRD_PARTY_NOTICES/httparse@1.10.1/LICENSE-MIT +20 -0
  171. package/THIRD_PARTY_NOTICES/httpdate@1.0.3/LICENSE-APACHE +201 -0
  172. package/THIRD_PARTY_NOTICES/httpdate@1.0.3/LICENSE-MIT +19 -0
  173. package/THIRD_PARTY_NOTICES/hyper-rustls@0.27.9/LICENSE-APACHE +201 -0
  174. package/THIRD_PARTY_NOTICES/hyper-rustls@0.27.9/LICENSE-ISC +15 -0
  175. package/THIRD_PARTY_NOTICES/hyper-rustls@0.27.9/LICENSE-MIT +25 -0
  176. package/THIRD_PARTY_NOTICES/hyper-util@0.1.20/LICENSE +19 -0
  177. package/THIRD_PARTY_NOTICES/hyper@1.9.0/LICENSE +19 -0
  178. package/THIRD_PARTY_NOTICES/icu_collections@2.1.1/LICENSE +46 -0
  179. package/THIRD_PARTY_NOTICES/icu_locale_core@2.1.1/LICENSE +46 -0
  180. package/THIRD_PARTY_NOTICES/icu_normalizer@2.1.1/LICENSE +46 -0
  181. package/THIRD_PARTY_NOTICES/icu_normalizer_data@2.1.1/LICENSE +46 -0
  182. package/THIRD_PARTY_NOTICES/icu_properties@2.1.2/LICENSE +46 -0
  183. package/THIRD_PARTY_NOTICES/icu_properties_data@2.1.2/LICENSE +46 -0
  184. package/THIRD_PARTY_NOTICES/icu_provider@2.1.1/LICENSE +46 -0
  185. package/THIRD_PARTY_NOTICES/ident_case@1.0.1/LICENSE +19 -0
  186. package/THIRD_PARTY_NOTICES/idna@1.1.0/LICENSE-APACHE +201 -0
  187. package/THIRD_PARTY_NOTICES/idna@1.1.0/LICENSE-MIT +25 -0
  188. package/THIRD_PARTY_NOTICES/idna_adapter@1.2.1/LICENSE-APACHE +201 -0
  189. package/THIRD_PARTY_NOTICES/idna_adapter@1.2.1/LICENSE-MIT +25 -0
  190. package/THIRD_PARTY_NOTICES/indexmap@2.14.0/LICENSE-APACHE +201 -0
  191. package/THIRD_PARTY_NOTICES/indexmap@2.14.0/LICENSE-MIT +25 -0
  192. package/THIRD_PARTY_NOTICES/instant-distance@0.6.1/Cargo.toml +65 -0
  193. package/THIRD_PARTY_NOTICES/instant-distance@0.6.1/LICENSE +201 -0
  194. package/THIRD_PARTY_NOTICES/ipnet@2.12.0/LICENSE-APACHE +201 -0
  195. package/THIRD_PARTY_NOTICES/ipnet@2.12.0/LICENSE-MIT +7 -0
  196. package/THIRD_PARTY_NOTICES/is_terminal_polyfill@1.70.2/LICENSE-APACHE +202 -0
  197. package/THIRD_PARTY_NOTICES/is_terminal_polyfill@1.70.2/LICENSE-MIT +19 -0
  198. package/THIRD_PARTY_NOTICES/itoa@1.0.18/LICENSE-APACHE +176 -0
  199. package/THIRD_PARTY_NOTICES/itoa@1.0.18/LICENSE-MIT +23 -0
  200. package/THIRD_PARTY_NOTICES/layout-base@2.0.1/JamaJS-APACHE.txt +210 -0
  201. package/THIRD_PARTY_NOTICES/lazy_static@1.5.0/LICENSE-APACHE +201 -0
  202. package/THIRD_PARTY_NOTICES/lazy_static@1.5.0/LICENSE-MIT +25 -0
  203. package/THIRD_PARTY_NOTICES/libc@0.2.186/LICENSE-APACHE +176 -0
  204. package/THIRD_PARTY_NOTICES/libc@0.2.186/LICENSE-MIT +25 -0
  205. package/THIRD_PARTY_NOTICES/libsqlite3-sys@0.30.1/LICENSE +19 -0
  206. package/THIRD_PARTY_NOTICES/libsqlite3-sys@0.30.1/sqlcipher/LICENSE +24 -0
  207. package/THIRD_PARTY_NOTICES/linux-raw-sys@0.12.1/COPYRIGHT +29 -0
  208. package/THIRD_PARTY_NOTICES/linux-raw-sys@0.12.1/LICENSE-APACHE +201 -0
  209. package/THIRD_PARTY_NOTICES/linux-raw-sys@0.12.1/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  210. package/THIRD_PARTY_NOTICES/linux-raw-sys@0.12.1/LICENSE-MIT +23 -0
  211. package/THIRD_PARTY_NOTICES/litemap@0.8.2/LICENSE +46 -0
  212. package/THIRD_PARTY_NOTICES/lock_api@0.4.14/LICENSE-APACHE +201 -0
  213. package/THIRD_PARTY_NOTICES/lock_api@0.4.14/LICENSE-MIT +25 -0
  214. package/THIRD_PARTY_NOTICES/log@0.4.29/LICENSE-APACHE +201 -0
  215. package/THIRD_PARTY_NOTICES/log@0.4.29/LICENSE-MIT +25 -0
  216. package/THIRD_PARTY_NOTICES/matchers@0.2.0/LICENSE +19 -0
  217. package/THIRD_PARTY_NOTICES/matchit@0.8.4/LICENSE +21 -0
  218. package/THIRD_PARTY_NOTICES/matchit@0.8.4/LICENSE.httprouter +29 -0
  219. package/THIRD_PARTY_NOTICES/memchr@2.8.0/COPYING +3 -0
  220. package/THIRD_PARTY_NOTICES/memchr@2.8.0/LICENSE-MIT +21 -0
  221. package/THIRD_PARTY_NOTICES/mime@0.3.17/LICENSE-APACHE +201 -0
  222. package/THIRD_PARTY_NOTICES/mime@0.3.17/LICENSE-MIT +20 -0
  223. package/THIRD_PARTY_NOTICES/mime_guess@2.0.5/LICENSE +22 -0
  224. package/THIRD_PARTY_NOTICES/minimal-lexical@0.2.1/LICENSE-APACHE +201 -0
  225. package/THIRD_PARTY_NOTICES/minimal-lexical@0.2.1/LICENSE-MIT +23 -0
  226. package/THIRD_PARTY_NOTICES/minimal-lexical@0.2.1/LICENSE.md +37 -0
  227. package/THIRD_PARTY_NOTICES/miniz_oxide@0.8.9/LICENSE +25 -0
  228. package/THIRD_PARTY_NOTICES/miniz_oxide@0.8.9/LICENSE-APACHE.md +177 -0
  229. package/THIRD_PARTY_NOTICES/miniz_oxide@0.8.9/LICENSE-MIT.md +24 -0
  230. package/THIRD_PARTY_NOTICES/miniz_oxide@0.8.9/LICENSE-ZLIB.md +14 -0
  231. package/THIRD_PARTY_NOTICES/mio@1.2.0/LICENSE +19 -0
  232. package/THIRD_PARTY_NOTICES/nom@7.1.3/LICENSE +20 -0
  233. package/THIRD_PARTY_NOTICES/nu-ansi-term@0.50.3/LICENSE +22 -0
  234. package/THIRD_PARTY_NOTICES/num-modular@0.6.1/LICENSE +201 -0
  235. package/THIRD_PARTY_NOTICES/num-order@1.2.0/LICENSE +201 -0
  236. package/THIRD_PARTY_NOTICES/num-traits@0.2.19/LICENSE-APACHE +201 -0
  237. package/THIRD_PARTY_NOTICES/num-traits@0.2.19/LICENSE-MIT +25 -0
  238. package/THIRD_PARTY_NOTICES/num_cpus@1.17.0/LICENSE-APACHE +201 -0
  239. package/THIRD_PARTY_NOTICES/num_cpus@1.17.0/LICENSE-MIT +20 -0
  240. package/THIRD_PARTY_NOTICES/once_cell@1.21.4/LICENSE-APACHE +201 -0
  241. package/THIRD_PARTY_NOTICES/once_cell@1.21.4/LICENSE-MIT +23 -0
  242. package/THIRD_PARTY_NOTICES/once_cell_polyfill@1.70.2/LICENSE-APACHE +202 -0
  243. package/THIRD_PARTY_NOTICES/once_cell_polyfill@1.70.2/LICENSE-MIT +19 -0
  244. package/THIRD_PARTY_NOTICES/option-ext@0.2.0/SOURCE.crate +0 -0
  245. package/THIRD_PARTY_NOTICES/ordered-float@3.9.2/LICENSE-MIT +25 -0
  246. package/THIRD_PARTY_NOTICES/parking_lot@0.12.5/LICENSE-APACHE +201 -0
  247. package/THIRD_PARTY_NOTICES/parking_lot@0.12.5/LICENSE-MIT +25 -0
  248. package/THIRD_PARTY_NOTICES/parking_lot_core@0.9.12/LICENSE-APACHE +201 -0
  249. package/THIRD_PARTY_NOTICES/parking_lot_core@0.9.12/LICENSE-MIT +25 -0
  250. package/THIRD_PARTY_NOTICES/pastey@0.2.3/LICENSE-APACHE +176 -0
  251. package/THIRD_PARTY_NOTICES/pastey@0.2.3/LICENSE-MIT +23 -0
  252. package/THIRD_PARTY_NOTICES/percent-encoding@2.3.2/LICENSE-APACHE +201 -0
  253. package/THIRD_PARTY_NOTICES/percent-encoding@2.3.2/LICENSE-MIT +25 -0
  254. package/THIRD_PARTY_NOTICES/pest@2.8.6/LICENSE-APACHE +201 -0
  255. package/THIRD_PARTY_NOTICES/pest@2.8.6/LICENSE-MIT +23 -0
  256. package/THIRD_PARTY_NOTICES/pest_derive@2.8.6/LICENSE-APACHE +201 -0
  257. package/THIRD_PARTY_NOTICES/pest_derive@2.8.6/LICENSE-MIT +23 -0
  258. package/THIRD_PARTY_NOTICES/pest_generator@2.8.6/LICENSE-APACHE +201 -0
  259. package/THIRD_PARTY_NOTICES/pest_generator@2.8.6/LICENSE-MIT +23 -0
  260. package/THIRD_PARTY_NOTICES/pest_meta@2.8.6/LICENSE-APACHE +201 -0
  261. package/THIRD_PARTY_NOTICES/pest_meta@2.8.6/LICENSE-MIT +23 -0
  262. package/THIRD_PARTY_NOTICES/pin-project-lite@0.2.17/LICENSE-APACHE +177 -0
  263. package/THIRD_PARTY_NOTICES/pin-project-lite@0.2.17/LICENSE-MIT +23 -0
  264. package/THIRD_PARTY_NOTICES/pkg-config@0.3.33/LICENSE-APACHE +201 -0
  265. package/THIRD_PARTY_NOTICES/pkg-config@0.3.33/LICENSE-MIT +25 -0
  266. package/THIRD_PARTY_NOTICES/potential_utf@0.1.5/LICENSE +46 -0
  267. package/THIRD_PARTY_NOTICES/ppv-lite86@0.2.21/LICENSE-APACHE +201 -0
  268. package/THIRD_PARTY_NOTICES/ppv-lite86@0.2.21/LICENSE-MIT +25 -0
  269. package/THIRD_PARTY_NOTICES/proc-macro2@1.0.106/LICENSE-APACHE +176 -0
  270. package/THIRD_PARTY_NOTICES/proc-macro2@1.0.106/LICENSE-MIT +23 -0
  271. package/THIRD_PARTY_NOTICES/quote@1.0.45/LICENSE-APACHE +176 -0
  272. package/THIRD_PARTY_NOTICES/quote@1.0.45/LICENSE-MIT +23 -0
  273. package/THIRD_PARTY_NOTICES/rand@0.10.1/COPYRIGHT +12 -0
  274. package/THIRD_PARTY_NOTICES/rand@0.10.1/LICENSE-APACHE +176 -0
  275. package/THIRD_PARTY_NOTICES/rand@0.10.1/LICENSE-MIT +26 -0
  276. package/THIRD_PARTY_NOTICES/rand@0.8.6/COPYRIGHT +12 -0
  277. package/THIRD_PARTY_NOTICES/rand@0.8.6/LICENSE-APACHE +176 -0
  278. package/THIRD_PARTY_NOTICES/rand@0.8.6/LICENSE-MIT +26 -0
  279. package/THIRD_PARTY_NOTICES/rand_chacha@0.3.1/COPYRIGHT +12 -0
  280. package/THIRD_PARTY_NOTICES/rand_chacha@0.3.1/LICENSE-APACHE +201 -0
  281. package/THIRD_PARTY_NOTICES/rand_chacha@0.3.1/LICENSE-MIT +26 -0
  282. package/THIRD_PARTY_NOTICES/rand_core@0.10.1/COPYRIGHT +9 -0
  283. package/THIRD_PARTY_NOTICES/rand_core@0.10.1/LICENSE-APACHE +187 -0
  284. package/THIRD_PARTY_NOTICES/rand_core@0.10.1/LICENSE-MIT +25 -0
  285. package/THIRD_PARTY_NOTICES/rand_core@0.6.4/COPYRIGHT +12 -0
  286. package/THIRD_PARTY_NOTICES/rand_core@0.6.4/LICENSE-APACHE +187 -0
  287. package/THIRD_PARTY_NOTICES/rand_core@0.6.4/LICENSE-MIT +26 -0
  288. package/THIRD_PARTY_NOTICES/rayon-core@1.13.0/LICENSE-APACHE +201 -0
  289. package/THIRD_PARTY_NOTICES/rayon-core@1.13.0/LICENSE-MIT +25 -0
  290. package/THIRD_PARTY_NOTICES/rayon@1.12.0/LICENSE-APACHE +201 -0
  291. package/THIRD_PARTY_NOTICES/rayon@1.12.0/LICENSE-MIT +25 -0
  292. package/THIRD_PARTY_NOTICES/ref-cast-impl@1.0.25/LICENSE-APACHE +176 -0
  293. package/THIRD_PARTY_NOTICES/ref-cast-impl@1.0.25/LICENSE-MIT +23 -0
  294. package/THIRD_PARTY_NOTICES/ref-cast@1.0.25/LICENSE-APACHE +176 -0
  295. package/THIRD_PARTY_NOTICES/ref-cast@1.0.25/LICENSE-MIT +23 -0
  296. package/THIRD_PARTY_NOTICES/regex-automata@0.4.14/LICENSE-APACHE +201 -0
  297. package/THIRD_PARTY_NOTICES/regex-automata@0.4.14/LICENSE-MIT +25 -0
  298. package/THIRD_PARTY_NOTICES/regex-syntax@0.8.10/LICENSE-APACHE +201 -0
  299. package/THIRD_PARTY_NOTICES/regex-syntax@0.8.10/LICENSE-MIT +25 -0
  300. package/THIRD_PARTY_NOTICES/regex-syntax@0.8.10/src/unicode_tables/LICENSE-UNICODE +57 -0
  301. package/THIRD_PARTY_NOTICES/regex@1.12.3/LICENSE-APACHE +201 -0
  302. package/THIRD_PARTY_NOTICES/regex@1.12.3/LICENSE-MIT +25 -0
  303. package/THIRD_PARTY_NOTICES/reqwest@0.12.28/LICENSE-APACHE +201 -0
  304. package/THIRD_PARTY_NOTICES/reqwest@0.12.28/LICENSE-MIT +20 -0
  305. package/THIRD_PARTY_NOTICES/rmcp-macros@1.7.0/Cargo.toml +54 -0
  306. package/THIRD_PARTY_NOTICES/rmcp-macros@1.7.0/LICENSE +216 -0
  307. package/THIRD_PARTY_NOTICES/rmcp@1.7.0/Cargo.toml +683 -0
  308. package/THIRD_PARTY_NOTICES/rmcp@1.7.0/LICENSE +216 -0
  309. package/THIRD_PARTY_NOTICES/rusqlite@0.32.1/LICENSE +19 -0
  310. package/THIRD_PARTY_NOTICES/rustix@1.1.4/COPYRIGHT +29 -0
  311. package/THIRD_PARTY_NOTICES/rustix@1.1.4/LICENSE-APACHE +201 -0
  312. package/THIRD_PARTY_NOTICES/rustix@1.1.4/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  313. package/THIRD_PARTY_NOTICES/rustix@1.1.4/LICENSE-MIT +23 -0
  314. package/THIRD_PARTY_NOTICES/rustls-pki-types@1.14.1/LICENSE-APACHE +201 -0
  315. package/THIRD_PARTY_NOTICES/rustls-pki-types@1.14.1/LICENSE-MIT +25 -0
  316. package/THIRD_PARTY_NOTICES/rustls-webpki@0.103.15/LICENSE +19 -0
  317. package/THIRD_PARTY_NOTICES/rustls@0.23.45/LICENSE-APACHE +201 -0
  318. package/THIRD_PARTY_NOTICES/rustls@0.23.45/LICENSE-ISC +15 -0
  319. package/THIRD_PARTY_NOTICES/rustls@0.23.45/LICENSE-MIT +25 -0
  320. package/THIRD_PARTY_NOTICES/ryu@1.0.23/LICENSE-APACHE +176 -0
  321. package/THIRD_PARTY_NOTICES/ryu@1.0.23/LICENSE-BOOST +23 -0
  322. package/THIRD_PARTY_NOTICES/same-file@1.0.6/COPYING +3 -0
  323. package/THIRD_PARTY_NOTICES/same-file@1.0.6/LICENSE-MIT +21 -0
  324. package/THIRD_PARTY_NOTICES/schemars@0.8.22/LICENSE +21 -0
  325. package/THIRD_PARTY_NOTICES/schemars@1.2.1/LICENSE +21 -0
  326. package/THIRD_PARTY_NOTICES/schemars_derive@0.8.22/LICENSE +21 -0
  327. package/THIRD_PARTY_NOTICES/schemars_derive@1.2.1/LICENSE +21 -0
  328. package/THIRD_PARTY_NOTICES/scopeguard@1.2.0/LICENSE-APACHE +201 -0
  329. package/THIRD_PARTY_NOTICES/scopeguard@1.2.0/LICENSE-MIT +25 -0
  330. package/THIRD_PARTY_NOTICES/serde@1.0.228/LICENSE-APACHE +176 -0
  331. package/THIRD_PARTY_NOTICES/serde@1.0.228/LICENSE-MIT +23 -0
  332. package/THIRD_PARTY_NOTICES/serde_core@1.0.228/LICENSE-APACHE +176 -0
  333. package/THIRD_PARTY_NOTICES/serde_core@1.0.228/LICENSE-MIT +23 -0
  334. package/THIRD_PARTY_NOTICES/serde_derive@1.0.228/LICENSE-APACHE +176 -0
  335. package/THIRD_PARTY_NOTICES/serde_derive@1.0.228/LICENSE-MIT +23 -0
  336. package/THIRD_PARTY_NOTICES/serde_derive_internals@0.29.1/LICENSE-APACHE +176 -0
  337. package/THIRD_PARTY_NOTICES/serde_derive_internals@0.29.1/LICENSE-MIT +23 -0
  338. package/THIRD_PARTY_NOTICES/serde_json@1.0.149/LICENSE-APACHE +176 -0
  339. package/THIRD_PARTY_NOTICES/serde_json@1.0.149/LICENSE-MIT +23 -0
  340. package/THIRD_PARTY_NOTICES/serde_path_to_error@0.1.20/LICENSE-APACHE +176 -0
  341. package/THIRD_PARTY_NOTICES/serde_path_to_error@0.1.20/LICENSE-MIT +23 -0
  342. package/THIRD_PARTY_NOTICES/serde_spanned@0.6.9/LICENSE-APACHE +202 -0
  343. package/THIRD_PARTY_NOTICES/serde_spanned@0.6.9/LICENSE-MIT +19 -0
  344. package/THIRD_PARTY_NOTICES/serde_urlencoded@0.7.1/LICENSE-APACHE +176 -0
  345. package/THIRD_PARTY_NOTICES/serde_urlencoded@0.7.1/LICENSE-MIT +25 -0
  346. package/THIRD_PARTY_NOTICES/sha2@0.10.9/LICENSE-APACHE +201 -0
  347. package/THIRD_PARTY_NOTICES/sha2@0.10.9/LICENSE-MIT +27 -0
  348. package/THIRD_PARTY_NOTICES/sharded-slab@0.1.7/LICENSE +19 -0
  349. package/THIRD_PARTY_NOTICES/shlex@1.3.0/LICENSE-APACHE +13 -0
  350. package/THIRD_PARTY_NOTICES/shlex@1.3.0/LICENSE-MIT +21 -0
  351. package/THIRD_PARTY_NOTICES/signal-hook-registry@1.4.8/LICENSE-APACHE +201 -0
  352. package/THIRD_PARTY_NOTICES/signal-hook-registry@1.4.8/LICENSE-MIT +25 -0
  353. package/THIRD_PARTY_NOTICES/simd-adler32@0.3.9/LICENSE.md +21 -0
  354. package/THIRD_PARTY_NOTICES/slab@0.4.12/LICENSE +25 -0
  355. package/THIRD_PARTY_NOTICES/smallvec@1.15.1/LICENSE-APACHE +201 -0
  356. package/THIRD_PARTY_NOTICES/smallvec@1.15.1/LICENSE-MIT +25 -0
  357. package/THIRD_PARTY_NOTICES/socket2@0.6.3/LICENSE-APACHE +201 -0
  358. package/THIRD_PARTY_NOTICES/socket2@0.6.3/LICENSE-MIT +25 -0
  359. package/THIRD_PARTY_NOTICES/sse-stream@0.2.3/Cargo.toml +124 -0
  360. package/THIRD_PARTY_NOTICES/sse-stream@0.2.3/LICENSE-APACHE +202 -0
  361. package/THIRD_PARTY_NOTICES/sse-stream@0.2.3/LICENSE-MIT +21 -0
  362. package/THIRD_PARTY_NOTICES/stable_deref_trait@1.2.1/LICENSE-APACHE +201 -0
  363. package/THIRD_PARTY_NOTICES/stable_deref_trait@1.2.1/LICENSE-MIT +25 -0
  364. package/THIRD_PARTY_NOTICES/streaming-iterator@0.1.9/LICENSE-APACHE +202 -0
  365. package/THIRD_PARTY_NOTICES/streaming-iterator@0.1.9/LICENSE-MIT +19 -0
  366. package/THIRD_PARTY_NOTICES/strsim@0.11.1/LICENSE +23 -0
  367. package/THIRD_PARTY_NOTICES/syn@2.0.117/LICENSE-APACHE +176 -0
  368. package/THIRD_PARTY_NOTICES/syn@2.0.117/LICENSE-MIT +23 -0
  369. package/THIRD_PARTY_NOTICES/syn@3.0.6/LICENSE-APACHE +176 -0
  370. package/THIRD_PARTY_NOTICES/syn@3.0.6/LICENSE-MIT +23 -0
  371. package/THIRD_PARTY_NOTICES/sync_wrapper@1.0.2/LICENSE +177 -0
  372. package/THIRD_PARTY_NOTICES/synstructure@0.13.2/LICENSE +7 -0
  373. package/THIRD_PARTY_NOTICES/tempfile@3.27.0/LICENSE-APACHE +201 -0
  374. package/THIRD_PARTY_NOTICES/tempfile@3.27.0/LICENSE-MIT +25 -0
  375. package/THIRD_PARTY_NOTICES/thiserror-impl@2.0.18/LICENSE-APACHE +176 -0
  376. package/THIRD_PARTY_NOTICES/thiserror-impl@2.0.18/LICENSE-MIT +23 -0
  377. package/THIRD_PARTY_NOTICES/thiserror@2.0.18/LICENSE-APACHE +176 -0
  378. package/THIRD_PARTY_NOTICES/thiserror@2.0.18/LICENSE-MIT +23 -0
  379. package/THIRD_PARTY_NOTICES/thread_local@1.1.9/LICENSE-APACHE +201 -0
  380. package/THIRD_PARTY_NOTICES/thread_local@1.1.9/LICENSE-MIT +25 -0
  381. package/THIRD_PARTY_NOTICES/tinystr@0.8.3/LICENSE +46 -0
  382. package/THIRD_PARTY_NOTICES/tokio-macros@2.7.0/LICENSE +22 -0
  383. package/THIRD_PARTY_NOTICES/tokio-rustls@0.26.4/LICENSE-APACHE +201 -0
  384. package/THIRD_PARTY_NOTICES/tokio-rustls@0.26.4/LICENSE-MIT +25 -0
  385. package/THIRD_PARTY_NOTICES/tokio-stream@0.1.18/LICENSE +21 -0
  386. package/THIRD_PARTY_NOTICES/tokio-util@0.7.18/LICENSE +21 -0
  387. package/THIRD_PARTY_NOTICES/tokio@1.52.3/LICENSE +21 -0
  388. package/THIRD_PARTY_NOTICES/toml@0.8.23/LICENSE-APACHE +202 -0
  389. package/THIRD_PARTY_NOTICES/toml@0.8.23/LICENSE-MIT +19 -0
  390. package/THIRD_PARTY_NOTICES/toml_datetime@0.6.11/LICENSE-APACHE +202 -0
  391. package/THIRD_PARTY_NOTICES/toml_datetime@0.6.11/LICENSE-MIT +19 -0
  392. package/THIRD_PARTY_NOTICES/toml_edit@0.22.27/LICENSE-APACHE +202 -0
  393. package/THIRD_PARTY_NOTICES/toml_edit@0.22.27/LICENSE-MIT +19 -0
  394. package/THIRD_PARTY_NOTICES/toml_write@0.1.2/LICENSE-APACHE +202 -0
  395. package/THIRD_PARTY_NOTICES/toml_write@0.1.2/LICENSE-MIT +19 -0
  396. package/THIRD_PARTY_NOTICES/tower-http@0.6.11/LICENSE +25 -0
  397. package/THIRD_PARTY_NOTICES/tower-layer@0.3.3/LICENSE +25 -0
  398. package/THIRD_PARTY_NOTICES/tower-service@0.3.3/LICENSE +25 -0
  399. package/THIRD_PARTY_NOTICES/tower@0.5.3/LICENSE +25 -0
  400. package/THIRD_PARTY_NOTICES/tracing-attributes@0.1.31/LICENSE +25 -0
  401. package/THIRD_PARTY_NOTICES/tracing-core@0.1.36/LICENSE +25 -0
  402. package/THIRD_PARTY_NOTICES/tracing-core@0.1.36/src/spin/LICENSE +21 -0
  403. package/THIRD_PARTY_NOTICES/tracing-log@0.2.0/LICENSE +25 -0
  404. package/THIRD_PARTY_NOTICES/tracing-subscriber@0.3.23/LICENSE +25 -0
  405. package/THIRD_PARTY_NOTICES/tracing@0.1.44/LICENSE +25 -0
  406. package/THIRD_PARTY_NOTICES/tree-sitter-language@0.1.7/LICENSE +21 -0
  407. package/THIRD_PARTY_NOTICES/tree-sitter-python@0.23.6/Cargo.toml +60 -0
  408. package/THIRD_PARTY_NOTICES/tree-sitter-python@0.23.6/LICENSE +21 -0
  409. package/THIRD_PARTY_NOTICES/tree-sitter-rust@0.24.2/LICENSE +21 -0
  410. package/THIRD_PARTY_NOTICES/tree-sitter-typescript@0.23.2/Cargo.toml +62 -0
  411. package/THIRD_PARTY_NOTICES/tree-sitter-typescript@0.23.2/LICENSE +21 -0
  412. package/THIRD_PARTY_NOTICES/tree-sitter@0.26.9/LICENSE +21 -0
  413. package/THIRD_PARTY_NOTICES/tree-sitter@0.26.9/src/unicode/LICENSE +414 -0
  414. package/THIRD_PARTY_NOTICES/try-lock@0.2.5/LICENSE +21 -0
  415. package/THIRD_PARTY_NOTICES/typenum@1.20.0/LICENSE +1 -0
  416. package/THIRD_PARTY_NOTICES/typenum@1.20.0/LICENSE-APACHE +201 -0
  417. package/THIRD_PARTY_NOTICES/typenum@1.20.0/LICENSE-MIT +21 -0
  418. package/THIRD_PARTY_NOTICES/ucd-trie@0.1.7/LICENSE-APACHE +201 -0
  419. package/THIRD_PARTY_NOTICES/ucd-trie@0.1.7/LICENSE-MIT +21 -0
  420. package/THIRD_PARTY_NOTICES/unicase@2.9.0/LICENSE-APACHE +201 -0
  421. package/THIRD_PARTY_NOTICES/unicase@2.9.0/LICENSE-MIT +20 -0
  422. package/THIRD_PARTY_NOTICES/unicode-ident@1.0.24/LICENSE-APACHE +176 -0
  423. package/THIRD_PARTY_NOTICES/unicode-ident@1.0.24/LICENSE-MIT +23 -0
  424. package/THIRD_PARTY_NOTICES/unicode-ident@1.0.24/LICENSE-UNICODE +39 -0
  425. package/THIRD_PARTY_NOTICES/untrusted@0.9.0/LICENSE.txt +13 -0
  426. package/THIRD_PARTY_NOTICES/ureq@2.12.1/LICENSE-APACHE +201 -0
  427. package/THIRD_PARTY_NOTICES/ureq@2.12.1/LICENSE-MIT +21 -0
  428. package/THIRD_PARTY_NOTICES/ureq@2.12.1/src/chunked/LICENSE-APACHE +201 -0
  429. package/THIRD_PARTY_NOTICES/ureq@2.12.1/src/chunked/LICENSE-MIT +22 -0
  430. package/THIRD_PARTY_NOTICES/url@2.5.8/LICENSE-APACHE +201 -0
  431. package/THIRD_PARTY_NOTICES/url@2.5.8/LICENSE-MIT +25 -0
  432. package/THIRD_PARTY_NOTICES/utf8_iter@1.0.4/COPYRIGHT +42 -0
  433. package/THIRD_PARTY_NOTICES/utf8_iter@1.0.4/LICENSE-APACHE +202 -0
  434. package/THIRD_PARTY_NOTICES/utf8_iter@1.0.4/LICENSE-MIT +25 -0
  435. package/THIRD_PARTY_NOTICES/utf8parse@0.2.2/LICENSE-APACHE +176 -0
  436. package/THIRD_PARTY_NOTICES/utf8parse@0.2.2/LICENSE-MIT +25 -0
  437. package/THIRD_PARTY_NOTICES/uuid@1.23.1/LICENSE-APACHE +201 -0
  438. package/THIRD_PARTY_NOTICES/uuid@1.23.1/LICENSE-MIT +26 -0
  439. package/THIRD_PARTY_NOTICES/vcpkg@0.2.15/LICENSE-APACHE +202 -0
  440. package/THIRD_PARTY_NOTICES/vcpkg@0.2.15/LICENSE-MIT +26 -0
  441. package/THIRD_PARTY_NOTICES/version_check@0.9.5/LICENSE-APACHE +201 -0
  442. package/THIRD_PARTY_NOTICES/version_check@0.9.5/LICENSE-MIT +19 -0
  443. package/THIRD_PARTY_NOTICES/walkdir@2.5.0/COPYING +3 -0
  444. package/THIRD_PARTY_NOTICES/walkdir@2.5.0/LICENSE-MIT +21 -0
  445. package/THIRD_PARTY_NOTICES/want@0.3.1/LICENSE +20 -0
  446. package/THIRD_PARTY_NOTICES/whatlang@0.16.4/Cargo.toml +76 -0
  447. package/THIRD_PARTY_NOTICES/whatlang@0.16.4/LICENSE +26 -0
  448. package/THIRD_PARTY_NOTICES/winapi-util@0.1.11/COPYING +3 -0
  449. package/THIRD_PARTY_NOTICES/winapi-util@0.1.11/LICENSE-MIT +21 -0
  450. package/THIRD_PARTY_NOTICES/winapi@0.3.9/LICENSE-APACHE +201 -0
  451. package/THIRD_PARTY_NOTICES/winapi@0.3.9/LICENSE-MIT +19 -0
  452. package/THIRD_PARTY_NOTICES/windows-link@0.2.1/license-apache-2.0 +201 -0
  453. package/THIRD_PARTY_NOTICES/windows-link@0.2.1/license-mit +21 -0
  454. package/THIRD_PARTY_NOTICES/windows-sys@0.48.0/license-apache-2.0 +201 -0
  455. package/THIRD_PARTY_NOTICES/windows-sys@0.48.0/license-mit +21 -0
  456. package/THIRD_PARTY_NOTICES/windows-sys@0.61.2/license-apache-2.0 +201 -0
  457. package/THIRD_PARTY_NOTICES/windows-sys@0.61.2/license-mit +21 -0
  458. package/THIRD_PARTY_NOTICES/windows-targets@0.48.5/license-apache-2.0 +201 -0
  459. package/THIRD_PARTY_NOTICES/windows-targets@0.48.5/license-mit +21 -0
  460. package/THIRD_PARTY_NOTICES/windows_x86_64_msvc@0.48.5/license-apache-2.0 +201 -0
  461. package/THIRD_PARTY_NOTICES/windows_x86_64_msvc@0.48.5/license-mit +21 -0
  462. package/THIRD_PARTY_NOTICES/winnow@0.7.15/LICENSE-MIT +18 -0
  463. package/THIRD_PARTY_NOTICES/writeable@0.6.3/LICENSE +46 -0
  464. package/THIRD_PARTY_NOTICES/yoke-derive@0.8.2/LICENSE +46 -0
  465. package/THIRD_PARTY_NOTICES/yoke@0.8.2/LICENSE +46 -0
  466. package/THIRD_PARTY_NOTICES/zerocopy@0.8.48/LICENSE-APACHE +202 -0
  467. package/THIRD_PARTY_NOTICES/zerocopy@0.8.48/LICENSE-BSD +24 -0
  468. package/THIRD_PARTY_NOTICES/zerocopy@0.8.48/LICENSE-MIT +26 -0
  469. package/THIRD_PARTY_NOTICES/zerofrom-derive@0.1.7/LICENSE +46 -0
  470. package/THIRD_PARTY_NOTICES/zerofrom@0.1.8/LICENSE +46 -0
  471. package/THIRD_PARTY_NOTICES/zeroize@1.8.2/LICENSE-APACHE +202 -0
  472. package/THIRD_PARTY_NOTICES/zeroize@1.8.2/LICENSE-MIT +21 -0
  473. package/THIRD_PARTY_NOTICES/zerotrie@0.2.4/LICENSE +46 -0
  474. package/THIRD_PARTY_NOTICES/zerovec-derive@0.11.3/LICENSE +46 -0
  475. package/THIRD_PARTY_NOTICES/zerovec@0.11.6/LICENSE +46 -0
  476. package/THIRD_PARTY_NOTICES/zmij@1.0.21/LICENSE-MIT +23 -0
  477. package/package.json +45 -28
  478. package/runtime/dashboard-acl.js +22 -0
  479. package/runtime/dashboard-acl.ps1 +103 -0
  480. package/runtime/dashboard-binary.js +5 -0
  481. package/runtime/dashboard-bootstrap.js +45 -0
  482. package/runtime/dashboard-files.js +20 -3
  483. package/runtime/dashboard-process.js +6 -5
  484. package/runtime/dashboard-supervisor.js +3 -1
  485. package/server.js +98 -0
  486. package/tui/index.js +1 -0
  487. package/tui/rtrt-statusline-core.d.mts +205 -0
  488. package/tui/rtrt-statusline-core.mjs +1145 -0
  489. package/tui/v2/native-runtime.mjs +81 -0
  490. package/tui/v2/native-state.mjs +66 -0
  491. package/tui/v2/rtrt-statusline.tsx +116 -0
  492. package/v2/permissions.js +119 -0
@@ -0,0 +1,103 @@
1
+ $ErrorActionPreference = 'Stop'
2
+ $target = $env:RTRT_ACL_PATH
3
+ $action = $env:RTRT_ACL_ACTION
4
+ if (-not [IO.Path]::IsPathRooted($target) -or $target.Contains([char]0)) { throw 'Invalid ACL path' }
5
+ $self = [Security.Principal.WindowsIdentity]::GetCurrent().User
6
+ $system = New-Object Security.Principal.SecurityIdentifier 'S-1-5-18'
7
+ $admins = New-Object Security.Principal.SecurityIdentifier 'S-1-5-32-544'
8
+ $creatorOwner = New-Object Security.Principal.SecurityIdentifier 'S-1-3-0'
9
+
10
+ function Assert-Item([string] $name) {
11
+ $item = Get-Item -LiteralPath $name -Force
12
+ if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Reparse point refused' }
13
+ return $item
14
+ }
15
+
16
+ function Assert-Private([string] $name) {
17
+ $item = Assert-Item $name
18
+ $acl = Get-Acl -LiteralPath $name
19
+ if ($acl.GetOwner([Security.Principal.SecurityIdentifier]).Value -ne $self.Value -or
20
+ -not $acl.AreAccessRulesProtected) { throw 'Private owner or inheritance mismatch' }
21
+ $rules = @($acl.GetAccessRules($true, $true, [Security.Principal.SecurityIdentifier]))
22
+ if ($rules.Count -ne 1) { throw 'Private ACE count mismatch' }
23
+ $rule = $rules[0]
24
+ if ($rule.IsInherited -or $rule.IdentityReference.Value -ne $self.Value -or
25
+ $rule.AccessControlType -ne [Security.AccessControl.AccessControlType]::Allow -or
26
+ [int]$rule.FileSystemRights -ne [int][Security.AccessControl.FileSystemRights]::FullControl) {
27
+ throw 'Private ACE mismatch'
28
+ }
29
+ if ($item.PSIsContainer) {
30
+ if ($rule.InheritanceFlags -ne ([Security.AccessControl.InheritanceFlags]::ContainerInherit -bor
31
+ [Security.AccessControl.InheritanceFlags]::ObjectInherit) -or
32
+ $rule.PropagationFlags -ne [Security.AccessControl.PropagationFlags]::None) { throw 'Private directory ACE mismatch' }
33
+ } elseif ($rule.InheritanceFlags -ne [Security.AccessControl.InheritanceFlags]::None) {
34
+ throw 'Private file ACE mismatch'
35
+ }
36
+ }
37
+
38
+ if ($action -eq 'private-create') {
39
+ $item = Assert-Item $target
40
+ if ($item.PSIsContainer) {
41
+ $acl = New-Object Security.AccessControl.DirectorySecurity
42
+ $flags = 'ContainerInherit,ObjectInherit'
43
+ $rule = New-Object Security.AccessControl.FileSystemAccessRule -ArgumentList @($self, 'FullControl', $flags, 'None', 'Allow')
44
+ } else {
45
+ $acl = New-Object Security.AccessControl.FileSecurity
46
+ $rule = New-Object Security.AccessControl.FileSystemAccessRule -ArgumentList @($self, 'FullControl', 'Allow')
47
+ }
48
+ $acl.SetOwner($self)
49
+ $acl.SetAccessRuleProtection($true, $false)
50
+ $acl.AddAccessRule($rule)
51
+ Set-Acl -LiteralPath $target -AclObject $acl
52
+ Assert-Private $target
53
+ } elseif ($action -eq 'private-check') {
54
+ Assert-Private $target
55
+ } elseif ($action -eq 'binary-check') {
56
+ $current = $target
57
+ $trustedInstaller = New-Object Security.Principal.SecurityIdentifier 'S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'
58
+ $trustedBinarySids = @($self.Value, $system.Value, $admins.Value, $trustedInstaller.Value)
59
+ $writes = [int]([Security.AccessControl.FileSystemRights]::WriteData -bor
60
+ [Security.AccessControl.FileSystemRights]::AppendData -bor
61
+ [Security.AccessControl.FileSystemRights]::WriteExtendedAttributes -bor
62
+ [Security.AccessControl.FileSystemRights]::WriteAttributes -bor
63
+ [Security.AccessControl.FileSystemRights]::Delete -bor
64
+ [Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles -bor
65
+ [Security.AccessControl.FileSystemRights]::ChangePermissions -bor
66
+ [Security.AccessControl.FileSystemRights]::TakeOwnership)
67
+ $replaceChildren = [int]([Security.AccessControl.FileSystemRights]::Delete -bor
68
+ [Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles -bor
69
+ [Security.AccessControl.FileSystemRights]::ChangePermissions -bor
70
+ [Security.AccessControl.FileSystemRights]::TakeOwnership)
71
+ while ($current) {
72
+ $item = Assert-Item $current
73
+ $acl = Get-Acl -LiteralPath $current
74
+ $owner = $acl.GetOwner([Security.Principal.SecurityIdentifier]).Value
75
+ if ($trustedBinarySids -cnotcontains $owner) { throw 'Untrusted binary owner' }
76
+ $effectiveWrites = $writes
77
+ if ($item.PSIsContainer) {
78
+ # Creation and directory-metadata rights alone cannot replace protected checked
79
+ # children; deletion or ACL/ownership control can.
80
+ $effectiveWrites = $replaceChildren
81
+ }
82
+ foreach ($rule in $acl.GetAccessRules($true, $true, [Security.Principal.SecurityIdentifier])) {
83
+ $sid = $rule.IdentityReference.Value
84
+ $rights = [int]$rule.FileSystemRights
85
+ # Expand generic masks before comparing filesystem rights. GenericWrite creates
86
+ # directory entries but does not itself grant delete-child or ownership control.
87
+ if (($rights -band 0x10000000) -ne 0) {
88
+ $rights = $rights -bor [int][Security.AccessControl.FileSystemRights]::FullControl
89
+ }
90
+ if (($rights -band 0x40000000) -ne 0) {
91
+ $rights = $rights -bor [int][Security.AccessControl.FileSystemRights]::Write
92
+ }
93
+ if ($rule.AccessControlType -eq [Security.AccessControl.AccessControlType]::Allow -and
94
+ $trustedBinarySids -cnotcontains $sid -and
95
+ $sid -ne $creatorOwner.Value -and
96
+ (([int]$rule.PropagationFlags -band [int][Security.AccessControl.PropagationFlags]::InheritOnly) -eq 0) -and
97
+ ($rights -band $effectiveWrites) -ne 0) { throw 'Untrusted binary writer' }
98
+ }
99
+ $parent = [IO.Path]::GetDirectoryName($current.TrimEnd([IO.Path]::DirectorySeparatorChar))
100
+ if (-not $parent -or $parent -eq $current) { break }
101
+ $current = $parent
102
+ }
103
+ } else { throw 'Invalid ACL operation' }
@@ -2,6 +2,7 @@ import { lstat, readFile } from "node:fs/promises"
2
2
  import path from "node:path"
3
3
  import { fileURLToPath } from "node:url"
4
4
  import { readRegular, realPath, unavailable } from "./dashboard-files.js"
5
+ import { windowsAcl } from "./dashboard-acl.js"
5
6
 
6
7
  const PACKAGES = new Map([
7
8
  ["linux-x64", "rtrt-dashboard-linux-x64"],
@@ -52,11 +53,15 @@ export async function resolveDashboardBinary({
52
53
  if (parent === ancestor) break
53
54
  ancestor = parent
54
55
  }
56
+ if (platform === "win32") await windowsAcl(path.join(directory, "package.json"), "binary-check")
55
57
  const manifest = JSON.parse(await readRegular(path.join(directory, "package.json"), validate))
56
58
  if (manifest.name !== name || manifest.version !== expected) continue
57
59
  const binary = path.join(directory, "bin", platform === "win32" ? "rtrt-dashboard.exe" : "rtrt-dashboard")
58
60
  await realPath(binary)
59
61
  validate(await lstat(path.dirname(binary)))
62
+ if (platform === "win32") {
63
+ await windowsAcl(binary, "binary-check")
64
+ }
60
65
  const stat = await lstat(binary)
61
66
  validate(stat)
62
67
  if (!stat.isFile() || stat.nlink !== 1 || (platform !== "win32" && (stat.mode & 0o111) === 0)) throw unavailable()
@@ -0,0 +1,45 @@
1
+ import { randomBytes } from "node:crypto"
2
+ import { constants } from "node:fs"
3
+ import { lstat, open, rename, unlink } from "node:fs/promises"
4
+ import path from "node:path"
5
+ import { privateMetadata, realPath, unavailable } from "./dashboard-files.js"
6
+ import { windowsAcl } from "./dashboard-acl.js"
7
+
8
+ export async function writeDashboardBootstrap(state, credential, { platform = process.platform, uid = process.geteuid?.() } = {}) {
9
+ if (!/^[A-Za-z0-9_-]{87}$/.test(credential)) throw unavailable()
10
+ await realPath(state)
11
+ const stateMetadata = await lstat(state)
12
+ privateMetadata(stateMetadata, { platform, uid }, 0o700)
13
+ if (!stateMetadata.isDirectory()) throw unavailable()
14
+ if (platform === "win32") await windowsAcl(state, "private-check")
15
+ const destination = path.join(state, "bootstrap.html")
16
+ try {
17
+ const existing = await lstat(destination)
18
+ privateMetadata(existing, { platform, uid }, 0o600)
19
+ if (!existing.isFile() || existing.nlink !== 1 || existing.size > 512) throw unavailable()
20
+ if (platform === "win32") await windowsAcl(destination, "private-check")
21
+ } catch (error) {
22
+ if (error.code !== "ENOENT") throw error
23
+ }
24
+ const temporary = path.join(state, `.bootstrap-${randomBytes(16).toString("hex")}.tmp`)
25
+ const handle = await open(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | (constants.O_NOFOLLOW ?? 0), 0o600)
26
+ try {
27
+ if (platform === "win32") await windowsAcl(temporary, "private-create")
28
+ privateMetadata(await handle.stat(), { platform, uid }, 0o600)
29
+ const body = `<!doctype html><meta http-equiv="refresh" content="0;url=http://127.0.0.1:7311/#bootstrap=${credential}">`
30
+ await handle.writeFile(body)
31
+ await handle.sync()
32
+ } catch (error) {
33
+ await handle.close()
34
+ await unlink(temporary)
35
+ throw error
36
+ }
37
+ await handle.close()
38
+ try {
39
+ await rename(temporary, destination)
40
+ } catch (error) {
41
+ await unlink(temporary)
42
+ throw error
43
+ }
44
+ return destination
45
+ }
@@ -1,6 +1,7 @@
1
1
  import { constants } from "node:fs"
2
2
  import { lstat, mkdir, open, rmdir } from "node:fs/promises"
3
3
  import path from "node:path"
4
+ import { windowsAcl } from "./dashboard-acl.js"
4
5
 
5
6
  export const unavailable = () => new Error("Dashboard unavailable.")
6
7
 
@@ -11,7 +12,8 @@ export async function realPath(candidate) {
11
12
  let current = path.parse(normalized).root
12
13
  for (const part of parts) {
13
14
  current = path.join(current, part)
14
- if ((await lstat(current)).isSymbolicLink()) throw unavailable()
15
+ const stat = await lstat(current)
16
+ if (stat.isSymbolicLink()) throw unavailable()
15
17
  }
16
18
  return normalized
17
19
  }
@@ -48,6 +50,7 @@ export function dashboardFiles({ home, uid, platform }) {
48
50
  const stat = await lstat(candidate)
49
51
  privateMetadata(stat, identity, 0o700)
50
52
  if (!stat.isDirectory()) throw unavailable()
53
+ if (platform === "win32") await windowsAcl(candidate, "private-check")
51
54
  }
52
55
  const checkLock = async () => {
53
56
  try { await directory(lock) } catch (error) {
@@ -59,7 +62,10 @@ export function dashboardFiles({ home, uid, platform }) {
59
62
  const stat = await lstat(home)
60
63
  if (!stat.isDirectory() || (platform !== "win32" && (stat.uid !== uid || (stat.mode & 0o022) !== 0))) throw unavailable()
61
64
  for (const candidate of [path.dirname(state), state]) {
62
- try { await mkdir(candidate, { mode: 0o700 }) } catch (error) {
65
+ try {
66
+ await mkdir(candidate, { mode: 0o700 })
67
+ if (platform === "win32") await windowsAcl(candidate, "private-create")
68
+ } catch (error) {
63
69
  if (error.code !== "EEXIST") throw error
64
70
  }
65
71
  await directory(candidate)
@@ -69,6 +75,13 @@ export function dashboardFiles({ home, uid, platform }) {
69
75
  const readToken = async () => {
70
76
  await realPath(state)
71
77
  let raw
78
+ if (platform === "win32") {
79
+ try { await lstat(credential) } catch (error) {
80
+ if (error.code === "ENOENT") return undefined
81
+ throw error
82
+ }
83
+ await windowsAcl(credential, "private-check")
84
+ }
72
85
  try { raw = await readRegular(credential, (stat) => privateMetadata(stat, identity, 0o600)) } catch (error) {
73
86
  if (error.code === "ENOENT") return undefined
74
87
  throw error
@@ -83,6 +96,7 @@ export function dashboardFiles({ home, uid, platform }) {
83
96
  if (!/^[a-fA-F0-9]{64}$/.test(token)) throw unavailable()
84
97
  const handle = await open(credential, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | (constants.O_NOFOLLOW ?? 0), 0o600)
85
98
  try {
99
+ if (platform === "win32") await windowsAcl(credential, "private-create")
86
100
  privateMetadata(await handle.stat(), identity, 0o600)
87
101
  await handle.writeFile(`RTRT_DASHBOARD_TOKEN=${token}\n`)
88
102
  await handle.sync()
@@ -91,7 +105,10 @@ export function dashboardFiles({ home, uid, platform }) {
91
105
  }
92
106
  }
93
107
  const acquire = async () => {
94
- try { await mkdir(lock, { mode: 0o700 }) } catch (error) {
108
+ try {
109
+ await mkdir(lock, { mode: 0o700 })
110
+ if (platform === "win32") await windowsAcl(lock, "private-create")
111
+ } catch (error) {
95
112
  if (error.code !== "EEXIST") throw error
96
113
  await directory(lock)
97
114
  return undefined
@@ -48,12 +48,13 @@ export function launchDetached(binary, args, { spawnProcess = spawn, ...options
48
48
  })
49
49
  }
50
50
 
51
- export async function openDashboardBrowser(url, { platform = process.platform, launch = launchDetached } = {}) {
52
- // Never consult BROWSER or PATH. URL is generated locally, not supplied by a tool argument.
51
+ export async function openDashboardBrowser(file, { platform = process.platform, launch = launchDetached } = {}) {
52
+ // Never consult BROWSER or PATH. Ordinary opener argv carries only a local file path.
53
+ if (!path.isAbsolute(file) || /:\/\/|#|bootstrap=/i.test(file)) throw unavailable()
53
54
  switch (platform) {
54
- case "linux": return launch("/usr/bin/xdg-open", [url])
55
- case "darwin": return launch("/usr/bin/open", [url])
56
- case "win32": return launch("C:\\Windows\\System32\\rundll32.exe", ["url.dll,FileProtocolHandler", url])
55
+ case "linux": return launch("/usr/bin/xdg-open", [file])
56
+ case "darwin": return launch("/usr/bin/open", [file])
57
+ case "win32": return launch(path.win32.join(process.env.SystemRoot || "C:\\Windows", "System32", "rundll32.exe"), ["url.dll,FileProtocolHandler", file])
57
58
  default: throw unavailable()
58
59
  }
59
60
  }
@@ -4,6 +4,7 @@ import { setTimeout as delay } from "node:timers/promises"
4
4
  import { dashboardFiles, unavailable } from "./dashboard-files.js"
5
5
  import { resolveDashboardBinary } from "./dashboard-binary.js"
6
6
  import { launchDetached, openDashboardBrowser, probeDashboard } from "./dashboard-process.js"
7
+ import { writeDashboardBootstrap } from "./dashboard-bootstrap.js"
7
8
 
8
9
  export function createDashboardSupervisor({
9
10
  env = process.env, platform = process.platform, arch = process.arch, uid = process.geteuid?.(),
@@ -85,7 +86,8 @@ export function createDashboardSupervisor({
85
86
  createHmac("sha256", Buffer.from(token, "hex"))
86
87
  .update("rtrt-dashboard-browser-bootstrap\0v1\0")
87
88
  .update(wire.subarray(0, 33)).digest().copy(wire, 33)
88
- await openBrowser(`http://127.0.0.1:7311/#bootstrap=${wire.toString("base64url")}`, { platform })
89
+ const bootstrap = await writeDashboardBootstrap(files.state, wire.toString("base64url"), { platform, uid })
90
+ await openBrowser(bootstrap, { platform })
89
91
  return "Dashboard open requested."
90
92
  } catch {
91
93
  // Never expose dependency errors: process errors can contain the bootstrap URL.
package/server.js ADDED
@@ -0,0 +1,98 @@
1
+ import { randomUUID } from "node:crypto"
2
+ import path from "node:path"
3
+
4
+ import { createDashboardSupervisor } from "./runtime/dashboard-supervisor.js"
5
+ import { createPermissionEvaluator } from "./v2/permissions.js"
6
+
7
+ const RTRT_TOOLS = new Set(["rtrt_agent_call", "rtrt_agent_route"])
8
+ const DASHBOARD_INPUT = { type: "object", properties: {}, additionalProperties: false }
9
+
10
+ function scheduleStartup(start) {
11
+ const timer = setTimeout(() => { void start() }, 0)
12
+ timer.unref?.()
13
+ return { cancel: () => clearTimeout(timer) }
14
+ }
15
+
16
+ // The native server contract is @opencode/plugin 2.0.20. The v1 root remains
17
+ // separate: v2 has no permission.create or shell call identity, so it cannot
18
+ // provide the legacy Claude permission broker or per-call shell provenance.
19
+ export function createNativeServer({ supervisor, schedule = scheduleStartup, managedAgentStatePath, report = (message) => process.emitWarning(message, "RTRT_NATIVE_PLUGIN") } = {}) {
20
+ return {
21
+ id: "rtrt-agent",
22
+ async setup(ctx) {
23
+ const dashboard = supervisor ?? createDashboardSupervisor()
24
+ const invocations = new Map()
25
+ const registrations = []
26
+ let disposed = false
27
+ let cleanupPromise
28
+ const notify = (message) => {
29
+ try { report(message) } catch {
30
+ process.emitWarning("RTRT native diagnostic unavailable.", "RTRT_NATIVE_PLUGIN")
31
+ }
32
+ }
33
+ const startup = schedule(() => Promise.resolve()
34
+ .then(() => { if (!disposed) return dashboard.ensure() })
35
+ .catch(() => { if (!disposed) notify("RTRT dashboard unavailable.") }))
36
+ const dispose = () => {
37
+ if (cleanupPromise) return cleanupPromise
38
+ disposed = true
39
+ invocations.clear()
40
+ cleanupPromise = (async () => {
41
+ const failures = []
42
+ try { startup.cancel() } catch { failures.push(new Error("RTRT startup cancellation failed.")) }
43
+ const outcomes = await Promise.allSettled(registrations.reverse().map((registration) =>
44
+ Promise.resolve().then(() => registration.dispose())))
45
+ for (const [index, outcome] of outcomes.entries()) {
46
+ if (outcome.status === "rejected") failures.push(new Error(`RTRT registration ${index} disposal failed.`))
47
+ }
48
+ if (failures.length) throw new AggregateError(failures, "RTRT native cleanup failed.")
49
+ })()
50
+ return cleanupPromise
51
+ }
52
+ try {
53
+ registrations.push(await ctx.tool.hook("execute.before", (event) => {
54
+ if (disposed || !RTRT_TOOLS.has(event.tool) || !event.input || typeof event.input !== "object" || Array.isArray(event.input)) return
55
+ const key = `${event.sessionID}\0${event.id}`
56
+ let invocationID = invocations.get(key)
57
+ if (!invocationID) {
58
+ invocationID = randomUUID()
59
+ invocations.set(key, invocationID)
60
+ }
61
+ Object.assign(event.input, {
62
+ invocation_id: invocationID,
63
+ parent_project: path.basename(ctx.location.project.canonical),
64
+ parent_session_id: event.sessionID,
65
+ parent_call_id: event.id,
66
+ caller_agent: event.agent,
67
+ parent_cwd: ctx.location.directory,
68
+ parent_worktree: ctx.location.project.canonical,
69
+ })
70
+ }))
71
+ registrations.push(await ctx.tool.hook("execute.after", (event) => {
72
+ if (!disposed && RTRT_TOOLS.has(event.tool)) invocations.delete(`${event.sessionID}\0${event.id}`)
73
+ }))
74
+ registrations.push(await ctx.tool.transform((editor) => {
75
+ if (disposed) return
76
+ editor.add({
77
+ name: "rtrt_dashboard_open",
78
+ description: "Open the RTRT dashboard in the operator's browser when explicitly requested.",
79
+ input: DASHBOARD_INPUT,
80
+ async execute() {
81
+ if (disposed) return { content: "Dashboard unavailable." }
82
+ const status = await dashboard.open().catch(() => "Dashboard unavailable.")
83
+ return { content: status === "Dashboard open requested." ? status : "Dashboard unavailable." }
84
+ },
85
+ })
86
+ }))
87
+ const evaluate = await createPermissionEvaluator(ctx, managedAgentStatePath, () => !disposed)
88
+ registrations.push(await ctx.permission.hook("evaluate", evaluate))
89
+ return dispose
90
+ } catch (error) {
91
+ try { await dispose() } catch { notify("RTRT native cleanup failed.") }
92
+ throw error
93
+ }
94
+ },
95
+ }
96
+ }
97
+
98
+ export default createNativeServer()
package/tui/index.js ADDED
@@ -0,0 +1 @@
1
+ export { default } from "./v2/rtrt-statusline.tsx"
@@ -0,0 +1,205 @@
1
+ export type StatuslineTone =
2
+ | "accent"
3
+ | "good"
4
+ | "warn"
5
+ | "bad"
6
+ | "muted"
7
+
8
+ export type StatuslineSegment = {
9
+ id: string
10
+ text: string
11
+ compact: string | null
12
+ tone: StatuslineTone
13
+ priority: number
14
+ }
15
+
16
+ export type StatuslinePayload = {
17
+ version: 1
18
+ stale: boolean
19
+ degraded: string[]
20
+ segments: StatuslineSegment[]
21
+ }
22
+ export type StatuslineViewRole = "badge" | "label" | "value" | "separator"
23
+ export type StatuslineViewPart = {
24
+ id: string
25
+ text: string
26
+ role: StatuslineViewRole
27
+ tone: StatuslineTone
28
+ }
29
+ export type StatuslineViewRow = { id: string; parts: StatuslineViewPart[] }
30
+ export type StatuslineViewModel = {
31
+ layout: "wide" | "medium" | "narrow"
32
+ width: number
33
+ rows: StatuslineViewRow[]
34
+ }
35
+ export type StatuslineEconomicsValue = {
36
+ text: string
37
+ tone: StatuslineTone
38
+ used?: number
39
+ limit?: number
40
+ percent?: number
41
+ headroom?: number
42
+ }
43
+ export type StatuslineEconomics = {
44
+ cost: StatuslineEconomicsValue
45
+ context: StatuslineEconomicsValue
46
+ model: StatuslineEconomicsValue
47
+ status: StatuslineEconomicsValue
48
+ week: StatuslineEconomicsValue
49
+ modelRef?: string
50
+ }
51
+ export type StatuslineViewOptions = {
52
+ width?: number
53
+ economics?: StatuslineEconomics
54
+ promptRight?: boolean
55
+ }
56
+ export type StatuslineState = {
57
+ payload: StatuslinePayload
58
+ lastGood: StatuslinePayload | undefined
59
+ stale: boolean
60
+ unavailable: boolean
61
+ }
62
+ export type StatuslineContext = { cwd: string; session: string; width: number; model?: string }
63
+ export type StatuslineRefreshEvent =
64
+ | "server.connected"
65
+ | "project.updated"
66
+ | "session.created"
67
+ | "session.updated"
68
+ | "session.compacted"
69
+ | "session.deleted"
70
+ | "session.diff"
71
+ | "session.error"
72
+ | "session.idle"
73
+ | "session.status"
74
+ export type StatuslineRefreshTarget = { app: boolean; sessionID?: string }
75
+
76
+ export const STATUSLINE_VERSION: 1
77
+ export const STATUSLINE_SEPARATOR: string
78
+ export const STATUSLINE_FALLBACK: string
79
+ export const STATUSLINE_GROUP_SEPARATOR: string
80
+ export const STATUSLINE_WIDE_WIDTH: number
81
+ export const STATUSLINE_MEDIUM_WIDTH: number
82
+ export const DEFAULT_DEBOUNCE_MS: number
83
+ export const DEFAULT_INTERVAL_MS: number
84
+ export const DEFAULT_TIMEOUT_MS: number
85
+ export const STATUSLINE_REFRESH_EVENTS: readonly StatuslineRefreshEvent[]
86
+
87
+ export function parseStatuslineJson(raw: string): StatuslinePayload | undefined
88
+ export function statuslineRefreshTarget(event: unknown, activeSessionID?: string): StatuslineRefreshTarget
89
+ export function statuslineCommandArgs(context: StatuslineContext): string[]
90
+ export function statuslineBinaryCandidates(bin?: unknown, env?: Record<string, string | undefined>): string[]
91
+ export function runStatusline(input: StatuslineContext & {
92
+ bin?: unknown
93
+ env?: Record<string, string | undefined>
94
+ spawnImpl?: (...args: any[]) => any
95
+ timeoutMs?: number
96
+ signal?: AbortSignal
97
+ nowFn?: () => number
98
+ setTimeoutFn?: typeof setTimeout
99
+ clearTimeoutFn?: typeof clearTimeout
100
+ }): Promise<StatuslinePayload | undefined>
101
+ export function createSpawnLimiter(input?: { concurrency?: number }): {
102
+ run<Value>(
103
+ task: (signal: AbortSignal) => Value | Promise<Value>,
104
+ options?: { signal?: AbortSignal; priority?: number },
105
+ ): Promise<Value | undefined>
106
+ activeCount(): number
107
+ queuedCount(): number
108
+ dispose(): void
109
+ }
110
+ export function cellWidth(text: string): number
111
+ export function deriveSessionEconomics(input?: {
112
+ session?: {
113
+ cost?: number
114
+ model?: { id: string; providerID: string }
115
+ }
116
+ messages?: ReadonlyArray<{
117
+ role: string
118
+ providerID?: string
119
+ modelID?: string
120
+ time?: { completed?: number }
121
+ error?: unknown
122
+ tokens?: {
123
+ input?: number
124
+ output?: number
125
+ reasoning?: number
126
+ cache?: { read?: number; write?: number }
127
+ }
128
+ }>
129
+ providers?: ReadonlyArray<{
130
+ id: string
131
+ models: Readonly<Record<string, {
132
+ id: string
133
+ providerID?: string
134
+ name?: string
135
+ limit?: { context?: number }
136
+ }>>
137
+ }>
138
+ status?: { type?: string }
139
+ }): StatuslineEconomics
140
+ export function selectSegments(
141
+ payload: StatuslinePayload,
142
+ options?: { width?: number; compact?: boolean },
143
+ ): StatuslineSegment[]
144
+ export function initialStatuslineState(): StatuslineState
145
+ export function nextStatuslineState(previous: StatuslineState, payload?: StatuslinePayload): StatuslineState
146
+ export function renderSegments(
147
+ state: StatuslineState,
148
+ options?: { width?: number; compact?: boolean },
149
+ ): StatuslineSegment[]
150
+ export function renderStatuslineText(
151
+ state: StatuslineState,
152
+ options?: StatuslineViewOptions & { compact?: boolean },
153
+ ): string
154
+ export function createStatuslineViewModel(
155
+ state: StatuslineState,
156
+ options?: StatuslineViewOptions,
157
+ ): StatuslineViewModel
158
+ export function renderStatuslineViewText(
159
+ state: StatuslineState,
160
+ options?: StatuslineViewOptions,
161
+ ): string
162
+
163
+ export function createRefreshScheduler(input: {
164
+ run: () => void | Promise<void>
165
+ debounceMs?: number
166
+ intervalMs?: number
167
+ setTimeoutFn?: typeof setTimeout
168
+ clearTimeoutFn?: typeof clearTimeout
169
+ setIntervalFn?: typeof setInterval
170
+ clearIntervalFn?: typeof clearInterval
171
+ }): {
172
+ start(): void
173
+ request(immediate?: boolean): void
174
+ flush(): Promise<void>
175
+ dispose(): void
176
+ }
177
+
178
+ export function createStatuslineController(input: {
179
+ load: (
180
+ context: StatuslineContext,
181
+ signal: AbortSignal,
182
+ ) => StatuslinePayload | undefined | Promise<StatuslinePayload | undefined>
183
+ onState?: (state: StatuslineState) => void
184
+ debounceMs?: number
185
+ intervalMs?: number
186
+ timers?: Record<string, unknown>
187
+ }): {
188
+ start(): void
189
+ request(immediate?: boolean): void
190
+ refreshNow(): Promise<void>
191
+ dispose(): void
192
+ setContext(context: Partial<StatuslineContext>): void
193
+ getState(): StatuslineState
194
+ getContext(): StatuslineContext
195
+ }
196
+
197
+ export function createKeyedControllerPool<Key, Value extends { dispose(): void }>(input: {
198
+ create: (key: Key) => Value
199
+ }): {
200
+ acquire(key: Key): { value: Value; release(): void }
201
+ get(key: Key): Value | undefined
202
+ forEach(callback: (value: Value, key: Key) => void): void
203
+ size(): number
204
+ dispose(): void
205
+ }