nastech-app 1.0.0

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 (1111) hide show
  1. package/.claude/agents/i18n-translator.md +119 -0
  2. package/.claude/settings.json +8 -0
  3. package/.eas/workflows/ota.yaml +9 -0
  4. package/.eas/workflows/preview.yaml +12 -0
  5. package/.easignore +12 -0
  6. package/.github/workflows/eas-build.yml +24 -0
  7. package/CHANGELOG.md +117 -0
  8. package/CLAUDE.md +413 -0
  9. package/GoogleService-Info.plist +30 -0
  10. package/LICENSE +21 -0
  11. package/NasTechapp.md +383 -0
  12. package/README.md +75 -0
  13. package/Stores.md +85 -0
  14. package/TERMS.md +83 -0
  15. package/app.config.js +153 -0
  16. package/babel.config.js +28 -0
  17. package/deploy/nastech-app.yaml +51 -0
  18. package/docs/marketing/README-creators.md +73 -0
  19. package/eas-build-post-install.sh +11 -0
  20. package/eas-build-pre-install.sh +27 -0
  21. package/eas.json +78 -0
  22. package/google-services.json +67 -0
  23. package/index.ts +3 -0
  24. package/logo.png +0 -0
  25. package/metro.config.js +54 -0
  26. package/nativewind-env.d.ts +1 -0
  27. package/package.json +233 -0
  28. package/patches/.keep +0 -0
  29. package/plugins/withEinkCompatibility.js +156 -0
  30. package/public/.well-known/apple-app-site-association +22 -0
  31. package/public/.well-known/assetlinks.json +12 -0
  32. package/public/canvaskit.wasm +0 -0
  33. package/public/favicon-active.ico +0 -0
  34. package/release-dev.sh +7 -0
  35. package/release-production.sh +3 -0
  36. package/release.cjs +160 -0
  37. package/sources/-session/SessionView.tsx +944 -0
  38. package/sources/-session/sessionOverlayNav.ts +34 -0
  39. package/sources/app/(app)/_layout.tsx +321 -0
  40. package/sources/app/(app)/artifacts/[id].tsx +279 -0
  41. package/sources/app/(app)/artifacts/edit/[id].tsx +318 -0
  42. package/sources/app/(app)/artifacts/index.tsx +264 -0
  43. package/sources/app/(app)/artifacts/new.tsx +219 -0
  44. package/sources/app/(app)/changelog.tsx +113 -0
  45. package/sources/app/(app)/dev/colors.tsx +197 -0
  46. package/sources/app/(app)/dev/device-info.tsx +183 -0
  47. package/sources/app/(app)/dev/expo-constants.tsx +394 -0
  48. package/sources/app/(app)/dev/index.tsx +400 -0
  49. package/sources/app/(app)/dev/input-styles.tsx +1951 -0
  50. package/sources/app/(app)/dev/inverted-list.tsx +295 -0
  51. package/sources/app/(app)/dev/list-demo.tsx +125 -0
  52. package/sources/app/(app)/dev/logs.tsx +160 -0
  53. package/sources/app/(app)/dev/messages-demo-data.ts +479 -0
  54. package/sources/app/(app)/dev/messages-demo.tsx +45 -0
  55. package/sources/app/(app)/dev/modal-demo.tsx +211 -0
  56. package/sources/app/(app)/dev/multi-text-input.tsx +224 -0
  57. package/sources/app/(app)/dev/purchases.tsx +228 -0
  58. package/sources/app/(app)/dev/qr-test.tsx +168 -0
  59. package/sources/app/(app)/dev/session-composer.tsx +812 -0
  60. package/sources/app/(app)/dev/shimmer-demo.tsx +275 -0
  61. package/sources/app/(app)/dev/tests.tsx +203 -0
  62. package/sources/app/(app)/dev/tools2.tsx +556 -0
  63. package/sources/app/(app)/dev/typography.tsx +177 -0
  64. package/sources/app/(app)/dev/unistyles-demo.tsx +376 -0
  65. package/sources/app/(app)/friends/index.tsx +167 -0
  66. package/sources/app/(app)/friends/search.tsx +232 -0
  67. package/sources/app/(app)/inbox/index.tsx +124 -0
  68. package/sources/app/(app)/index.tsx +264 -0
  69. package/sources/app/(app)/machine/[id].tsx +646 -0
  70. package/sources/app/(app)/new/index.tsx +1611 -0
  71. package/sources/app/(app)/restore/index.tsx +167 -0
  72. package/sources/app/(app)/restore/manual.tsx +138 -0
  73. package/sources/app/(app)/server.tsx +234 -0
  74. package/sources/app/(app)/session/[id]/file.tsx +527 -0
  75. package/sources/app/(app)/session/[id]/files.tsx +442 -0
  76. package/sources/app/(app)/session/[id]/info.tsx +655 -0
  77. package/sources/app/(app)/session/[id]/message/[messageId].tsx +125 -0
  78. package/sources/app/(app)/session/[id].tsx +10 -0
  79. package/sources/app/(app)/session/recent.tsx +270 -0
  80. package/sources/app/(app)/settings/account.tsx +600 -0
  81. package/sources/app/(app)/settings/agents.tsx +180 -0
  82. package/sources/app/(app)/settings/appearance.tsx +259 -0
  83. package/sources/app/(app)/settings/connect/claude.tsx +178 -0
  84. package/sources/app/(app)/settings/features.tsx +177 -0
  85. package/sources/app/(app)/settings/index.tsx +3 -0
  86. package/sources/app/(app)/settings/language.tsx +106 -0
  87. package/sources/app/(app)/settings/usage.tsx +11 -0
  88. package/sources/app/(app)/settings/voice/language.tsx +114 -0
  89. package/sources/app/(app)/settings/voice.tsx +274 -0
  90. package/sources/app/(app)/terminal/connect.tsx +241 -0
  91. package/sources/app/(app)/terminal/index.tsx +184 -0
  92. package/sources/app/(app)/text-selection.tsx +149 -0
  93. package/sources/app/(app)/user/[id].tsx +314 -0
  94. package/sources/app/+html.tsx +39 -0
  95. package/sources/app/_layout.tsx +402 -0
  96. package/sources/assets/animations/game.json +1 -0
  97. package/sources/assets/animations/owl.json +1 -0
  98. package/sources/assets/animations/popcorn.json +1 -0
  99. package/sources/assets/animations/robot.json +1 -0
  100. package/sources/assets/animations/sparkles.json +1 -0
  101. package/sources/assets/animations/stone.json +1 -0
  102. package/sources/assets/fonts/BricolageGrotesque-Bold.ttf +0 -0
  103. package/sources/assets/fonts/IBMPlexMono-Italic.ttf +0 -0
  104. package/sources/assets/fonts/IBMPlexMono-Regular.ttf +0 -0
  105. package/sources/assets/fonts/IBMPlexMono-SemiBold.ttf +0 -0
  106. package/sources/assets/fonts/IBMPlexSans-Italic.ttf +0 -0
  107. package/sources/assets/fonts/IBMPlexSans-Regular.ttf +0 -0
  108. package/sources/assets/fonts/IBMPlexSans-SemiBold.ttf +0 -0
  109. package/sources/assets/fonts/SpaceMono-Regular.ttf +0 -0
  110. package/sources/assets/images/brutalist/Abstract-1.png +0 -0
  111. package/sources/assets/images/brutalist/Abstract-10.png +0 -0
  112. package/sources/assets/images/brutalist/Abstract-100.png +0 -0
  113. package/sources/assets/images/brutalist/Abstract-101.png +0 -0
  114. package/sources/assets/images/brutalist/Abstract-102.png +0 -0
  115. package/sources/assets/images/brutalist/Abstract-103.png +0 -0
  116. package/sources/assets/images/brutalist/Abstract-104.png +0 -0
  117. package/sources/assets/images/brutalist/Abstract-105.png +0 -0
  118. package/sources/assets/images/brutalist/Abstract-106.png +0 -0
  119. package/sources/assets/images/brutalist/Abstract-107.png +0 -0
  120. package/sources/assets/images/brutalist/Abstract-108.png +0 -0
  121. package/sources/assets/images/brutalist/Abstract-109.png +0 -0
  122. package/sources/assets/images/brutalist/Abstract-11.png +0 -0
  123. package/sources/assets/images/brutalist/Abstract-110.png +0 -0
  124. package/sources/assets/images/brutalist/Abstract-111.png +0 -0
  125. package/sources/assets/images/brutalist/Abstract-112.png +0 -0
  126. package/sources/assets/images/brutalist/Abstract-113.png +0 -0
  127. package/sources/assets/images/brutalist/Abstract-114.png +0 -0
  128. package/sources/assets/images/brutalist/Abstract-115.png +0 -0
  129. package/sources/assets/images/brutalist/Abstract-116.png +0 -0
  130. package/sources/assets/images/brutalist/Abstract-117.png +0 -0
  131. package/sources/assets/images/brutalist/Abstract-118.png +0 -0
  132. package/sources/assets/images/brutalist/Abstract-119.png +0 -0
  133. package/sources/assets/images/brutalist/Abstract-12.png +0 -0
  134. package/sources/assets/images/brutalist/Abstract-120.png +0 -0
  135. package/sources/assets/images/brutalist/Abstract-121.png +0 -0
  136. package/sources/assets/images/brutalist/Abstract-122.png +0 -0
  137. package/sources/assets/images/brutalist/Abstract-123.png +0 -0
  138. package/sources/assets/images/brutalist/Abstract-124.png +0 -0
  139. package/sources/assets/images/brutalist/Abstract-125.png +0 -0
  140. package/sources/assets/images/brutalist/Abstract-126.png +0 -0
  141. package/sources/assets/images/brutalist/Abstract-127.png +0 -0
  142. package/sources/assets/images/brutalist/Abstract-128.png +0 -0
  143. package/sources/assets/images/brutalist/Abstract-129.png +0 -0
  144. package/sources/assets/images/brutalist/Abstract-13.png +0 -0
  145. package/sources/assets/images/brutalist/Abstract-130.png +0 -0
  146. package/sources/assets/images/brutalist/Abstract-131.png +0 -0
  147. package/sources/assets/images/brutalist/Abstract-132.png +0 -0
  148. package/sources/assets/images/brutalist/Abstract-133.png +0 -0
  149. package/sources/assets/images/brutalist/Abstract-134.png +0 -0
  150. package/sources/assets/images/brutalist/Abstract-135.png +0 -0
  151. package/sources/assets/images/brutalist/Abstract-136.png +0 -0
  152. package/sources/assets/images/brutalist/Abstract-137.png +0 -0
  153. package/sources/assets/images/brutalist/Abstract-138.png +0 -0
  154. package/sources/assets/images/brutalist/Abstract-139.png +0 -0
  155. package/sources/assets/images/brutalist/Abstract-14.png +0 -0
  156. package/sources/assets/images/brutalist/Abstract-140.png +0 -0
  157. package/sources/assets/images/brutalist/Abstract-141.png +0 -0
  158. package/sources/assets/images/brutalist/Abstract-142.png +0 -0
  159. package/sources/assets/images/brutalist/Abstract-143.png +0 -0
  160. package/sources/assets/images/brutalist/Abstract-144.png +0 -0
  161. package/sources/assets/images/brutalist/Abstract-145.png +0 -0
  162. package/sources/assets/images/brutalist/Abstract-146.png +0 -0
  163. package/sources/assets/images/brutalist/Abstract-147.png +0 -0
  164. package/sources/assets/images/brutalist/Abstract-148.png +0 -0
  165. package/sources/assets/images/brutalist/Abstract-149.png +0 -0
  166. package/sources/assets/images/brutalist/Abstract-15.png +0 -0
  167. package/sources/assets/images/brutalist/Abstract-150.png +0 -0
  168. package/sources/assets/images/brutalist/Abstract-151.png +0 -0
  169. package/sources/assets/images/brutalist/Abstract-152.png +0 -0
  170. package/sources/assets/images/brutalist/Abstract-153.png +0 -0
  171. package/sources/assets/images/brutalist/Abstract-154.png +0 -0
  172. package/sources/assets/images/brutalist/Abstract-155.png +0 -0
  173. package/sources/assets/images/brutalist/Abstract-156.png +0 -0
  174. package/sources/assets/images/brutalist/Abstract-157.png +0 -0
  175. package/sources/assets/images/brutalist/Abstract-158.png +0 -0
  176. package/sources/assets/images/brutalist/Abstract-159.png +0 -0
  177. package/sources/assets/images/brutalist/Abstract-16.png +0 -0
  178. package/sources/assets/images/brutalist/Abstract-160.png +0 -0
  179. package/sources/assets/images/brutalist/Abstract-161.png +0 -0
  180. package/sources/assets/images/brutalist/Abstract-162.png +0 -0
  181. package/sources/assets/images/brutalist/Abstract-163.png +0 -0
  182. package/sources/assets/images/brutalist/Abstract-164.png +0 -0
  183. package/sources/assets/images/brutalist/Abstract-165.png +0 -0
  184. package/sources/assets/images/brutalist/Abstract-166.png +0 -0
  185. package/sources/assets/images/brutalist/Abstract-167.png +0 -0
  186. package/sources/assets/images/brutalist/Abstract-168.png +0 -0
  187. package/sources/assets/images/brutalist/Abstract-169.png +0 -0
  188. package/sources/assets/images/brutalist/Abstract-17.png +0 -0
  189. package/sources/assets/images/brutalist/Abstract-170.png +0 -0
  190. package/sources/assets/images/brutalist/Abstract-171.png +0 -0
  191. package/sources/assets/images/brutalist/Abstract-172.png +0 -0
  192. package/sources/assets/images/brutalist/Abstract-173.png +0 -0
  193. package/sources/assets/images/brutalist/Abstract-174.png +0 -0
  194. package/sources/assets/images/brutalist/Abstract-175.png +0 -0
  195. package/sources/assets/images/brutalist/Abstract-176.png +0 -0
  196. package/sources/assets/images/brutalist/Abstract-177.png +0 -0
  197. package/sources/assets/images/brutalist/Abstract-178.png +0 -0
  198. package/sources/assets/images/brutalist/Abstract-179.png +0 -0
  199. package/sources/assets/images/brutalist/Abstract-18.png +0 -0
  200. package/sources/assets/images/brutalist/Abstract-180.png +0 -0
  201. package/sources/assets/images/brutalist/Abstract-181.png +0 -0
  202. package/sources/assets/images/brutalist/Abstract-182.png +0 -0
  203. package/sources/assets/images/brutalist/Abstract-183.png +0 -0
  204. package/sources/assets/images/brutalist/Abstract-184.png +0 -0
  205. package/sources/assets/images/brutalist/Abstract-185.png +0 -0
  206. package/sources/assets/images/brutalist/Abstract-186.png +0 -0
  207. package/sources/assets/images/brutalist/Abstract-187.png +0 -0
  208. package/sources/assets/images/brutalist/Abstract-188.png +0 -0
  209. package/sources/assets/images/brutalist/Abstract-189.png +0 -0
  210. package/sources/assets/images/brutalist/Abstract-19.png +0 -0
  211. package/sources/assets/images/brutalist/Abstract-190.png +0 -0
  212. package/sources/assets/images/brutalist/Abstract-191.png +0 -0
  213. package/sources/assets/images/brutalist/Abstract-192.png +0 -0
  214. package/sources/assets/images/brutalist/Abstract-193.png +0 -0
  215. package/sources/assets/images/brutalist/Abstract-194.png +0 -0
  216. package/sources/assets/images/brutalist/Abstract-195.png +0 -0
  217. package/sources/assets/images/brutalist/Abstract-196.png +0 -0
  218. package/sources/assets/images/brutalist/Abstract-197.png +0 -0
  219. package/sources/assets/images/brutalist/Abstract-198.png +0 -0
  220. package/sources/assets/images/brutalist/Abstract-199.png +0 -0
  221. package/sources/assets/images/brutalist/Abstract-2.png +0 -0
  222. package/sources/assets/images/brutalist/Abstract-20.png +0 -0
  223. package/sources/assets/images/brutalist/Abstract-200.png +0 -0
  224. package/sources/assets/images/brutalist/Abstract-201.png +0 -0
  225. package/sources/assets/images/brutalist/Abstract-202.png +0 -0
  226. package/sources/assets/images/brutalist/Abstract-203.png +0 -0
  227. package/sources/assets/images/brutalist/Abstract-204.png +0 -0
  228. package/sources/assets/images/brutalist/Abstract-205.png +0 -0
  229. package/sources/assets/images/brutalist/Abstract-206.png +0 -0
  230. package/sources/assets/images/brutalist/Abstract-207.png +0 -0
  231. package/sources/assets/images/brutalist/Abstract-208.png +0 -0
  232. package/sources/assets/images/brutalist/Abstract-209.png +0 -0
  233. package/sources/assets/images/brutalist/Abstract-21.png +0 -0
  234. package/sources/assets/images/brutalist/Abstract-210.png +0 -0
  235. package/sources/assets/images/brutalist/Abstract-211.png +0 -0
  236. package/sources/assets/images/brutalist/Abstract-212.png +0 -0
  237. package/sources/assets/images/brutalist/Abstract-213.png +0 -0
  238. package/sources/assets/images/brutalist/Abstract-214.png +0 -0
  239. package/sources/assets/images/brutalist/Abstract-215.png +0 -0
  240. package/sources/assets/images/brutalist/Abstract-216.png +0 -0
  241. package/sources/assets/images/brutalist/Abstract-217.png +0 -0
  242. package/sources/assets/images/brutalist/Abstract-218.png +0 -0
  243. package/sources/assets/images/brutalist/Abstract-219.png +0 -0
  244. package/sources/assets/images/brutalist/Abstract-22.png +0 -0
  245. package/sources/assets/images/brutalist/Abstract-220.png +0 -0
  246. package/sources/assets/images/brutalist/Abstract-221.png +0 -0
  247. package/sources/assets/images/brutalist/Abstract-222.png +0 -0
  248. package/sources/assets/images/brutalist/Abstract-223.png +0 -0
  249. package/sources/assets/images/brutalist/Abstract-224.png +0 -0
  250. package/sources/assets/images/brutalist/Abstract-225.png +0 -0
  251. package/sources/assets/images/brutalist/Abstract-226.png +0 -0
  252. package/sources/assets/images/brutalist/Abstract-227.png +0 -0
  253. package/sources/assets/images/brutalist/Abstract-228.png +0 -0
  254. package/sources/assets/images/brutalist/Abstract-229.png +0 -0
  255. package/sources/assets/images/brutalist/Abstract-23.png +0 -0
  256. package/sources/assets/images/brutalist/Abstract-230.png +0 -0
  257. package/sources/assets/images/brutalist/Abstract-231.png +0 -0
  258. package/sources/assets/images/brutalist/Abstract-232.png +0 -0
  259. package/sources/assets/images/brutalist/Abstract-233.png +0 -0
  260. package/sources/assets/images/brutalist/Abstract-234.png +0 -0
  261. package/sources/assets/images/brutalist/Abstract-235.png +0 -0
  262. package/sources/assets/images/brutalist/Abstract-236.png +0 -0
  263. package/sources/assets/images/brutalist/Abstract-237.png +0 -0
  264. package/sources/assets/images/brutalist/Abstract-238.png +0 -0
  265. package/sources/assets/images/brutalist/Abstract-239.png +0 -0
  266. package/sources/assets/images/brutalist/Abstract-24.png +0 -0
  267. package/sources/assets/images/brutalist/Abstract-240.png +0 -0
  268. package/sources/assets/images/brutalist/Abstract-241.png +0 -0
  269. package/sources/assets/images/brutalist/Abstract-242.png +0 -0
  270. package/sources/assets/images/brutalist/Abstract-243.png +0 -0
  271. package/sources/assets/images/brutalist/Abstract-244.png +0 -0
  272. package/sources/assets/images/brutalist/Abstract-245.png +0 -0
  273. package/sources/assets/images/brutalist/Abstract-246.png +0 -0
  274. package/sources/assets/images/brutalist/Abstract-247.png +0 -0
  275. package/sources/assets/images/brutalist/Abstract-248.png +0 -0
  276. package/sources/assets/images/brutalist/Abstract-249.png +0 -0
  277. package/sources/assets/images/brutalist/Abstract-25.png +0 -0
  278. package/sources/assets/images/brutalist/Abstract-250.png +0 -0
  279. package/sources/assets/images/brutalist/Abstract-251.png +0 -0
  280. package/sources/assets/images/brutalist/Abstract-252.png +0 -0
  281. package/sources/assets/images/brutalist/Abstract-253.png +0 -0
  282. package/sources/assets/images/brutalist/Abstract-254.png +0 -0
  283. package/sources/assets/images/brutalist/Abstract-255.png +0 -0
  284. package/sources/assets/images/brutalist/Abstract-256.png +0 -0
  285. package/sources/assets/images/brutalist/Abstract-257.png +0 -0
  286. package/sources/assets/images/brutalist/Abstract-258.png +0 -0
  287. package/sources/assets/images/brutalist/Abstract-259.png +0 -0
  288. package/sources/assets/images/brutalist/Abstract-26.png +0 -0
  289. package/sources/assets/images/brutalist/Abstract-260.png +0 -0
  290. package/sources/assets/images/brutalist/Abstract-261.png +0 -0
  291. package/sources/assets/images/brutalist/Abstract-262.png +0 -0
  292. package/sources/assets/images/brutalist/Abstract-27.png +0 -0
  293. package/sources/assets/images/brutalist/Abstract-28.png +0 -0
  294. package/sources/assets/images/brutalist/Abstract-29.png +0 -0
  295. package/sources/assets/images/brutalist/Abstract-3.png +0 -0
  296. package/sources/assets/images/brutalist/Abstract-30.png +0 -0
  297. package/sources/assets/images/brutalist/Abstract-31.png +0 -0
  298. package/sources/assets/images/brutalist/Abstract-32.png +0 -0
  299. package/sources/assets/images/brutalist/Abstract-33.png +0 -0
  300. package/sources/assets/images/brutalist/Abstract-34.png +0 -0
  301. package/sources/assets/images/brutalist/Abstract-35.png +0 -0
  302. package/sources/assets/images/brutalist/Abstract-36.png +0 -0
  303. package/sources/assets/images/brutalist/Abstract-37.png +0 -0
  304. package/sources/assets/images/brutalist/Abstract-38.png +0 -0
  305. package/sources/assets/images/brutalist/Abstract-39.png +0 -0
  306. package/sources/assets/images/brutalist/Abstract-4.png +0 -0
  307. package/sources/assets/images/brutalist/Abstract-40.png +0 -0
  308. package/sources/assets/images/brutalist/Abstract-41.png +0 -0
  309. package/sources/assets/images/brutalist/Abstract-42.png +0 -0
  310. package/sources/assets/images/brutalist/Abstract-43.png +0 -0
  311. package/sources/assets/images/brutalist/Abstract-44.png +0 -0
  312. package/sources/assets/images/brutalist/Abstract-45.png +0 -0
  313. package/sources/assets/images/brutalist/Abstract-46.png +0 -0
  314. package/sources/assets/images/brutalist/Abstract-47.png +0 -0
  315. package/sources/assets/images/brutalist/Abstract-48.png +0 -0
  316. package/sources/assets/images/brutalist/Abstract-49.png +0 -0
  317. package/sources/assets/images/brutalist/Abstract-5.png +0 -0
  318. package/sources/assets/images/brutalist/Abstract-50.png +0 -0
  319. package/sources/assets/images/brutalist/Abstract-51.png +0 -0
  320. package/sources/assets/images/brutalist/Abstract-52.png +0 -0
  321. package/sources/assets/images/brutalist/Abstract-53.png +0 -0
  322. package/sources/assets/images/brutalist/Abstract-54.png +0 -0
  323. package/sources/assets/images/brutalist/Abstract-55.png +0 -0
  324. package/sources/assets/images/brutalist/Abstract-56.png +0 -0
  325. package/sources/assets/images/brutalist/Abstract-57.png +0 -0
  326. package/sources/assets/images/brutalist/Abstract-58.png +0 -0
  327. package/sources/assets/images/brutalist/Abstract-59.png +0 -0
  328. package/sources/assets/images/brutalist/Abstract-6.png +0 -0
  329. package/sources/assets/images/brutalist/Abstract-60.png +0 -0
  330. package/sources/assets/images/brutalist/Abstract-61.png +0 -0
  331. package/sources/assets/images/brutalist/Abstract-62.png +0 -0
  332. package/sources/assets/images/brutalist/Abstract-63.png +0 -0
  333. package/sources/assets/images/brutalist/Abstract-64.png +0 -0
  334. package/sources/assets/images/brutalist/Abstract-65.png +0 -0
  335. package/sources/assets/images/brutalist/Abstract-66.png +0 -0
  336. package/sources/assets/images/brutalist/Abstract-67.png +0 -0
  337. package/sources/assets/images/brutalist/Abstract-68.png +0 -0
  338. package/sources/assets/images/brutalist/Abstract-69.png +0 -0
  339. package/sources/assets/images/brutalist/Abstract-7.png +0 -0
  340. package/sources/assets/images/brutalist/Abstract-70.png +0 -0
  341. package/sources/assets/images/brutalist/Abstract-71.png +0 -0
  342. package/sources/assets/images/brutalist/Abstract-72.png +0 -0
  343. package/sources/assets/images/brutalist/Abstract-73.png +0 -0
  344. package/sources/assets/images/brutalist/Abstract-74.png +0 -0
  345. package/sources/assets/images/brutalist/Abstract-75.png +0 -0
  346. package/sources/assets/images/brutalist/Abstract-76.png +0 -0
  347. package/sources/assets/images/brutalist/Abstract-77.png +0 -0
  348. package/sources/assets/images/brutalist/Abstract-78.png +0 -0
  349. package/sources/assets/images/brutalist/Abstract-79.png +0 -0
  350. package/sources/assets/images/brutalist/Abstract-8.png +0 -0
  351. package/sources/assets/images/brutalist/Abstract-80.png +0 -0
  352. package/sources/assets/images/brutalist/Abstract-81.png +0 -0
  353. package/sources/assets/images/brutalist/Abstract-82.png +0 -0
  354. package/sources/assets/images/brutalist/Abstract-83.png +0 -0
  355. package/sources/assets/images/brutalist/Abstract-84.png +0 -0
  356. package/sources/assets/images/brutalist/Abstract-85.png +0 -0
  357. package/sources/assets/images/brutalist/Abstract-86.png +0 -0
  358. package/sources/assets/images/brutalist/Abstract-87.png +0 -0
  359. package/sources/assets/images/brutalist/Abstract-88.png +0 -0
  360. package/sources/assets/images/brutalist/Abstract-89.png +0 -0
  361. package/sources/assets/images/brutalist/Abstract-9.png +0 -0
  362. package/sources/assets/images/brutalist/Abstract-90.png +0 -0
  363. package/sources/assets/images/brutalist/Abstract-91.png +0 -0
  364. package/sources/assets/images/brutalist/Abstract-92.png +0 -0
  365. package/sources/assets/images/brutalist/Abstract-93.png +0 -0
  366. package/sources/assets/images/brutalist/Abstract-94.png +0 -0
  367. package/sources/assets/images/brutalist/Abstract-95.png +0 -0
  368. package/sources/assets/images/brutalist/Abstract-96.png +0 -0
  369. package/sources/assets/images/brutalist/Abstract-97.png +0 -0
  370. package/sources/assets/images/brutalist/Abstract-98.png +0 -0
  371. package/sources/assets/images/brutalist/Abstract-99.png +0 -0
  372. package/sources/assets/images/brutalist/Bauhaus-1.png +0 -0
  373. package/sources/assets/images/brutalist/Bauhaus-10.png +0 -0
  374. package/sources/assets/images/brutalist/Bauhaus-11.png +0 -0
  375. package/sources/assets/images/brutalist/Bauhaus-12.png +0 -0
  376. package/sources/assets/images/brutalist/Bauhaus-13.png +0 -0
  377. package/sources/assets/images/brutalist/Bauhaus-14.png +0 -0
  378. package/sources/assets/images/brutalist/Bauhaus-15.png +0 -0
  379. package/sources/assets/images/brutalist/Bauhaus-16.png +0 -0
  380. package/sources/assets/images/brutalist/Bauhaus-17.png +0 -0
  381. package/sources/assets/images/brutalist/Bauhaus-18.png +0 -0
  382. package/sources/assets/images/brutalist/Bauhaus-19.png +0 -0
  383. package/sources/assets/images/brutalist/Bauhaus-2.png +0 -0
  384. package/sources/assets/images/brutalist/Bauhaus-20.png +0 -0
  385. package/sources/assets/images/brutalist/Bauhaus-21.png +0 -0
  386. package/sources/assets/images/brutalist/Bauhaus-22.png +0 -0
  387. package/sources/assets/images/brutalist/Bauhaus-23.png +0 -0
  388. package/sources/assets/images/brutalist/Bauhaus-24.png +0 -0
  389. package/sources/assets/images/brutalist/Bauhaus-25.png +0 -0
  390. package/sources/assets/images/brutalist/Bauhaus-26.png +0 -0
  391. package/sources/assets/images/brutalist/Bauhaus-27.png +0 -0
  392. package/sources/assets/images/brutalist/Bauhaus-28.png +0 -0
  393. package/sources/assets/images/brutalist/Bauhaus-29.png +0 -0
  394. package/sources/assets/images/brutalist/Bauhaus-3.png +0 -0
  395. package/sources/assets/images/brutalist/Bauhaus-30.png +0 -0
  396. package/sources/assets/images/brutalist/Bauhaus-31.png +0 -0
  397. package/sources/assets/images/brutalist/Bauhaus-32.png +0 -0
  398. package/sources/assets/images/brutalist/Bauhaus-33.png +0 -0
  399. package/sources/assets/images/brutalist/Bauhaus-34.png +0 -0
  400. package/sources/assets/images/brutalist/Bauhaus-35.png +0 -0
  401. package/sources/assets/images/brutalist/Bauhaus-36.png +0 -0
  402. package/sources/assets/images/brutalist/Bauhaus-37.png +0 -0
  403. package/sources/assets/images/brutalist/Bauhaus-38.png +0 -0
  404. package/sources/assets/images/brutalist/Bauhaus-39.png +0 -0
  405. package/sources/assets/images/brutalist/Bauhaus-4.png +0 -0
  406. package/sources/assets/images/brutalist/Bauhaus-40.png +0 -0
  407. package/sources/assets/images/brutalist/Bauhaus-5.png +0 -0
  408. package/sources/assets/images/brutalist/Bauhaus-6.png +0 -0
  409. package/sources/assets/images/brutalist/Bauhaus-7.png +0 -0
  410. package/sources/assets/images/brutalist/Bauhaus-8.png +0 -0
  411. package/sources/assets/images/brutalist/Bauhaus-9.png +0 -0
  412. package/sources/assets/images/brutalist/Brutalism-1.png +0 -0
  413. package/sources/assets/images/brutalist/Brutalism-10.png +0 -0
  414. package/sources/assets/images/brutalist/Brutalism-100.png +0 -0
  415. package/sources/assets/images/brutalist/Brutalism-101.png +0 -0
  416. package/sources/assets/images/brutalist/Brutalism-102.png +0 -0
  417. package/sources/assets/images/brutalist/Brutalism-103.png +0 -0
  418. package/sources/assets/images/brutalist/Brutalism-104.png +0 -0
  419. package/sources/assets/images/brutalist/Brutalism-105.png +0 -0
  420. package/sources/assets/images/brutalist/Brutalism-106.png +0 -0
  421. package/sources/assets/images/brutalist/Brutalism-107.png +0 -0
  422. package/sources/assets/images/brutalist/Brutalism-108.png +0 -0
  423. package/sources/assets/images/brutalist/Brutalism-109.png +0 -0
  424. package/sources/assets/images/brutalist/Brutalism-11.png +0 -0
  425. package/sources/assets/images/brutalist/Brutalism-110.png +0 -0
  426. package/sources/assets/images/brutalist/Brutalism-111.png +0 -0
  427. package/sources/assets/images/brutalist/Brutalism-112.png +0 -0
  428. package/sources/assets/images/brutalist/Brutalism-113.png +0 -0
  429. package/sources/assets/images/brutalist/Brutalism-114.png +0 -0
  430. package/sources/assets/images/brutalist/Brutalism-115.png +0 -0
  431. package/sources/assets/images/brutalist/Brutalism-116.png +0 -0
  432. package/sources/assets/images/brutalist/Brutalism-117.png +0 -0
  433. package/sources/assets/images/brutalist/Brutalism-118.png +0 -0
  434. package/sources/assets/images/brutalist/Brutalism-12.png +0 -0
  435. package/sources/assets/images/brutalist/Brutalism-13.png +0 -0
  436. package/sources/assets/images/brutalist/Brutalism-14.png +0 -0
  437. package/sources/assets/images/brutalist/Brutalism-15.png +0 -0
  438. package/sources/assets/images/brutalist/Brutalism-16.png +0 -0
  439. package/sources/assets/images/brutalist/Brutalism-17.png +0 -0
  440. package/sources/assets/images/brutalist/Brutalism-18.png +0 -0
  441. package/sources/assets/images/brutalist/Brutalism-19.png +0 -0
  442. package/sources/assets/images/brutalist/Brutalism-2.png +0 -0
  443. package/sources/assets/images/brutalist/Brutalism-20.png +0 -0
  444. package/sources/assets/images/brutalist/Brutalism-21.png +0 -0
  445. package/sources/assets/images/brutalist/Brutalism-22.png +0 -0
  446. package/sources/assets/images/brutalist/Brutalism-23.png +0 -0
  447. package/sources/assets/images/brutalist/Brutalism-24.png +0 -0
  448. package/sources/assets/images/brutalist/Brutalism-25.png +0 -0
  449. package/sources/assets/images/brutalist/Brutalism-26.png +0 -0
  450. package/sources/assets/images/brutalist/Brutalism-27.png +0 -0
  451. package/sources/assets/images/brutalist/Brutalism-28.png +0 -0
  452. package/sources/assets/images/brutalist/Brutalism-29.png +0 -0
  453. package/sources/assets/images/brutalist/Brutalism-3.png +0 -0
  454. package/sources/assets/images/brutalist/Brutalism-30.png +0 -0
  455. package/sources/assets/images/brutalist/Brutalism-31.png +0 -0
  456. package/sources/assets/images/brutalist/Brutalism-32.png +0 -0
  457. package/sources/assets/images/brutalist/Brutalism-33.png +0 -0
  458. package/sources/assets/images/brutalist/Brutalism-34.png +0 -0
  459. package/sources/assets/images/brutalist/Brutalism-35.png +0 -0
  460. package/sources/assets/images/brutalist/Brutalism-36.png +0 -0
  461. package/sources/assets/images/brutalist/Brutalism-37.png +0 -0
  462. package/sources/assets/images/brutalist/Brutalism-38.png +0 -0
  463. package/sources/assets/images/brutalist/Brutalism-39.png +0 -0
  464. package/sources/assets/images/brutalist/Brutalism-4.png +0 -0
  465. package/sources/assets/images/brutalist/Brutalism-40.png +0 -0
  466. package/sources/assets/images/brutalist/Brutalism-41.png +0 -0
  467. package/sources/assets/images/brutalist/Brutalism-42.png +0 -0
  468. package/sources/assets/images/brutalist/Brutalism-43.png +0 -0
  469. package/sources/assets/images/brutalist/Brutalism-44.png +0 -0
  470. package/sources/assets/images/brutalist/Brutalism-45.png +0 -0
  471. package/sources/assets/images/brutalist/Brutalism-46.png +0 -0
  472. package/sources/assets/images/brutalist/Brutalism-47.png +0 -0
  473. package/sources/assets/images/brutalist/Brutalism-48.png +0 -0
  474. package/sources/assets/images/brutalist/Brutalism-49.png +0 -0
  475. package/sources/assets/images/brutalist/Brutalism-5.png +0 -0
  476. package/sources/assets/images/brutalist/Brutalism-50.png +0 -0
  477. package/sources/assets/images/brutalist/Brutalism-51.png +0 -0
  478. package/sources/assets/images/brutalist/Brutalism-52.png +0 -0
  479. package/sources/assets/images/brutalist/Brutalism-53.png +0 -0
  480. package/sources/assets/images/brutalist/Brutalism-54.png +0 -0
  481. package/sources/assets/images/brutalist/Brutalism-55.png +0 -0
  482. package/sources/assets/images/brutalist/Brutalism-56.png +0 -0
  483. package/sources/assets/images/brutalist/Brutalism-57.png +0 -0
  484. package/sources/assets/images/brutalist/Brutalism-58.png +0 -0
  485. package/sources/assets/images/brutalist/Brutalism-59.png +0 -0
  486. package/sources/assets/images/brutalist/Brutalism-6.png +0 -0
  487. package/sources/assets/images/brutalist/Brutalism-60.png +0 -0
  488. package/sources/assets/images/brutalist/Brutalism-61.png +0 -0
  489. package/sources/assets/images/brutalist/Brutalism-62.png +0 -0
  490. package/sources/assets/images/brutalist/Brutalism-63.png +0 -0
  491. package/sources/assets/images/brutalist/Brutalism-64.png +0 -0
  492. package/sources/assets/images/brutalist/Brutalism-65.png +0 -0
  493. package/sources/assets/images/brutalist/Brutalism-66.png +0 -0
  494. package/sources/assets/images/brutalist/Brutalism-67.png +0 -0
  495. package/sources/assets/images/brutalist/Brutalism-68.png +0 -0
  496. package/sources/assets/images/brutalist/Brutalism-69.png +0 -0
  497. package/sources/assets/images/brutalist/Brutalism-7.png +0 -0
  498. package/sources/assets/images/brutalist/Brutalism-70.png +0 -0
  499. package/sources/assets/images/brutalist/Brutalism-71.png +0 -0
  500. package/sources/assets/images/brutalist/Brutalism-72.png +0 -0
  501. package/sources/assets/images/brutalist/Brutalism-73.png +0 -0
  502. package/sources/assets/images/brutalist/Brutalism-74.png +0 -0
  503. package/sources/assets/images/brutalist/Brutalism-75.png +0 -0
  504. package/sources/assets/images/brutalist/Brutalism-76.png +0 -0
  505. package/sources/assets/images/brutalist/Brutalism-77.png +0 -0
  506. package/sources/assets/images/brutalist/Brutalism-78.png +0 -0
  507. package/sources/assets/images/brutalist/Brutalism-79.png +0 -0
  508. package/sources/assets/images/brutalist/Brutalism-8.png +0 -0
  509. package/sources/assets/images/brutalist/Brutalism-80.png +0 -0
  510. package/sources/assets/images/brutalist/Brutalism-81.png +0 -0
  511. package/sources/assets/images/brutalist/Brutalism-82.png +0 -0
  512. package/sources/assets/images/brutalist/Brutalism-83.png +0 -0
  513. package/sources/assets/images/brutalist/Brutalism-84.png +0 -0
  514. package/sources/assets/images/brutalist/Brutalism-85.png +0 -0
  515. package/sources/assets/images/brutalist/Brutalism-86.png +0 -0
  516. package/sources/assets/images/brutalist/Brutalism-87.png +0 -0
  517. package/sources/assets/images/brutalist/Brutalism-88.png +0 -0
  518. package/sources/assets/images/brutalist/Brutalism-89.png +0 -0
  519. package/sources/assets/images/brutalist/Brutalism-9.png +0 -0
  520. package/sources/assets/images/brutalist/Brutalism-90.png +0 -0
  521. package/sources/assets/images/brutalist/Brutalism-91.png +0 -0
  522. package/sources/assets/images/brutalist/Brutalism-92.png +0 -0
  523. package/sources/assets/images/brutalist/Brutalism-93.png +0 -0
  524. package/sources/assets/images/brutalist/Brutalism-94.png +0 -0
  525. package/sources/assets/images/brutalist/Brutalism-95.png +0 -0
  526. package/sources/assets/images/brutalist/Brutalism-96.png +0 -0
  527. package/sources/assets/images/brutalist/Brutalism-97.png +0 -0
  528. package/sources/assets/images/brutalist/Brutalism-98.png +0 -0
  529. package/sources/assets/images/brutalist/Brutalism-99.png +0 -0
  530. package/sources/assets/images/favicon-active.png +0 -0
  531. package/sources/assets/images/favicon.png +0 -0
  532. package/sources/assets/images/gradients/01.png +0 -0
  533. package/sources/assets/images/gradients/02.png +0 -0
  534. package/sources/assets/images/gradients/03.png +0 -0
  535. package/sources/assets/images/gradients/04.png +0 -0
  536. package/sources/assets/images/gradients/05.png +0 -0
  537. package/sources/assets/images/gradients/06.png +0 -0
  538. package/sources/assets/images/gradients/07.png +0 -0
  539. package/sources/assets/images/gradients/08.png +0 -0
  540. package/sources/assets/images/gradients/09.png +0 -0
  541. package/sources/assets/images/gradients/10.png +0 -0
  542. package/sources/assets/images/gradients/100.png +0 -0
  543. package/sources/assets/images/gradients/11.png +0 -0
  544. package/sources/assets/images/gradients/12.png +0 -0
  545. package/sources/assets/images/gradients/13.png +0 -0
  546. package/sources/assets/images/gradients/14.png +0 -0
  547. package/sources/assets/images/gradients/15.png +0 -0
  548. package/sources/assets/images/gradients/16.png +0 -0
  549. package/sources/assets/images/gradients/17.png +0 -0
  550. package/sources/assets/images/gradients/18.png +0 -0
  551. package/sources/assets/images/gradients/19.png +0 -0
  552. package/sources/assets/images/gradients/20.png +0 -0
  553. package/sources/assets/images/gradients/21.png +0 -0
  554. package/sources/assets/images/gradients/22.png +0 -0
  555. package/sources/assets/images/gradients/23.png +0 -0
  556. package/sources/assets/images/gradients/24.png +0 -0
  557. package/sources/assets/images/gradients/25.png +0 -0
  558. package/sources/assets/images/gradients/26.png +0 -0
  559. package/sources/assets/images/gradients/27.png +0 -0
  560. package/sources/assets/images/gradients/28.png +0 -0
  561. package/sources/assets/images/gradients/29.png +0 -0
  562. package/sources/assets/images/gradients/30.png +0 -0
  563. package/sources/assets/images/gradients/31.png +0 -0
  564. package/sources/assets/images/gradients/32.png +0 -0
  565. package/sources/assets/images/gradients/33.png +0 -0
  566. package/sources/assets/images/gradients/34.png +0 -0
  567. package/sources/assets/images/gradients/35.png +0 -0
  568. package/sources/assets/images/gradients/36.png +0 -0
  569. package/sources/assets/images/gradients/37.png +0 -0
  570. package/sources/assets/images/gradients/38.png +0 -0
  571. package/sources/assets/images/gradients/39.png +0 -0
  572. package/sources/assets/images/gradients/40.png +0 -0
  573. package/sources/assets/images/gradients/41.png +0 -0
  574. package/sources/assets/images/gradients/42.png +0 -0
  575. package/sources/assets/images/gradients/43.png +0 -0
  576. package/sources/assets/images/gradients/44.png +0 -0
  577. package/sources/assets/images/gradients/45.png +0 -0
  578. package/sources/assets/images/gradients/46.png +0 -0
  579. package/sources/assets/images/gradients/47.png +0 -0
  580. package/sources/assets/images/gradients/48.png +0 -0
  581. package/sources/assets/images/gradients/49.png +0 -0
  582. package/sources/assets/images/gradients/50.png +0 -0
  583. package/sources/assets/images/gradients/51.png +0 -0
  584. package/sources/assets/images/gradients/52.png +0 -0
  585. package/sources/assets/images/gradients/53.png +0 -0
  586. package/sources/assets/images/gradients/54.png +0 -0
  587. package/sources/assets/images/gradients/55.png +0 -0
  588. package/sources/assets/images/gradients/56.png +0 -0
  589. package/sources/assets/images/gradients/57.png +0 -0
  590. package/sources/assets/images/gradients/58.png +0 -0
  591. package/sources/assets/images/gradients/59.png +0 -0
  592. package/sources/assets/images/gradients/60.png +0 -0
  593. package/sources/assets/images/gradients/61.png +0 -0
  594. package/sources/assets/images/gradients/62.png +0 -0
  595. package/sources/assets/images/gradients/63.png +0 -0
  596. package/sources/assets/images/gradients/64.png +0 -0
  597. package/sources/assets/images/gradients/65.png +0 -0
  598. package/sources/assets/images/gradients/66.png +0 -0
  599. package/sources/assets/images/gradients/67.png +0 -0
  600. package/sources/assets/images/gradients/68.png +0 -0
  601. package/sources/assets/images/gradients/69.png +0 -0
  602. package/sources/assets/images/gradients/70.png +0 -0
  603. package/sources/assets/images/gradients/71.png +0 -0
  604. package/sources/assets/images/gradients/72.png +0 -0
  605. package/sources/assets/images/gradients/73.png +0 -0
  606. package/sources/assets/images/gradients/74.png +0 -0
  607. package/sources/assets/images/gradients/75.png +0 -0
  608. package/sources/assets/images/gradients/76.png +0 -0
  609. package/sources/assets/images/gradients/77.png +0 -0
  610. package/sources/assets/images/gradients/78.png +0 -0
  611. package/sources/assets/images/gradients/79.png +0 -0
  612. package/sources/assets/images/gradients/80.png +0 -0
  613. package/sources/assets/images/gradients/81.png +0 -0
  614. package/sources/assets/images/gradients/82.png +0 -0
  615. package/sources/assets/images/gradients/83.png +0 -0
  616. package/sources/assets/images/gradients/84.png +0 -0
  617. package/sources/assets/images/gradients/85.png +0 -0
  618. package/sources/assets/images/gradients/86.png +0 -0
  619. package/sources/assets/images/gradients/87.png +0 -0
  620. package/sources/assets/images/gradients/88.png +0 -0
  621. package/sources/assets/images/gradients/89.png +0 -0
  622. package/sources/assets/images/gradients/90.png +0 -0
  623. package/sources/assets/images/gradients/91.png +0 -0
  624. package/sources/assets/images/gradients/92.png +0 -0
  625. package/sources/assets/images/gradients/93.png +0 -0
  626. package/sources/assets/images/gradients/94.png +0 -0
  627. package/sources/assets/images/gradients/95.png +0 -0
  628. package/sources/assets/images/gradients/96.png +0 -0
  629. package/sources/assets/images/gradients/97.png +0 -0
  630. package/sources/assets/images/gradients/98.png +0 -0
  631. package/sources/assets/images/gradients/99.png +0 -0
  632. package/sources/assets/images/icon-adaptive.png +0 -0
  633. package/sources/assets/images/icon-claude.png +0 -0
  634. package/sources/assets/images/icon-claude@2x.png +0 -0
  635. package/sources/assets/images/icon-claude@3x.png +0 -0
  636. package/sources/assets/images/icon-gemini.png +0 -0
  637. package/sources/assets/images/icon-gemini@2x.png +0 -0
  638. package/sources/assets/images/icon-gemini@3x.png +0 -0
  639. package/sources/assets/images/icon-gpt.png +0 -0
  640. package/sources/assets/images/icon-gpt@2x.png +0 -0
  641. package/sources/assets/images/icon-gpt@3x.png +0 -0
  642. package/sources/assets/images/icon-monochrome.png +0 -0
  643. package/sources/assets/images/icon-notification.png +0 -0
  644. package/sources/assets/images/icon-openclaw.png +0 -0
  645. package/sources/assets/images/icon-openclaw@2x.png +0 -0
  646. package/sources/assets/images/icon-openclaw@3x.png +0 -0
  647. package/sources/assets/images/icon-tauri.png +0 -0
  648. package/sources/assets/images/icon-voice-white.png +0 -0
  649. package/sources/assets/images/icon-voice.png +0 -0
  650. package/sources/assets/images/icon-voice@2x.png +0 -0
  651. package/sources/assets/images/icon-voice@3x.png +0 -0
  652. package/sources/assets/images/icon.png +0 -0
  653. package/sources/assets/images/logo-black.png +0 -0
  654. package/sources/assets/images/logo-white.png +0 -0
  655. package/sources/assets/images/logotype-dark.png +0 -0
  656. package/sources/assets/images/logotype-dark@2x.png +0 -0
  657. package/sources/assets/images/logotype-dark@3x.png +0 -0
  658. package/sources/assets/images/logotype-light.png +0 -0
  659. package/sources/assets/images/logotype-light@2x.png +0 -0
  660. package/sources/assets/images/logotype-light@3x.png +0 -0
  661. package/sources/assets/images/logotype.png +0 -0
  662. package/sources/assets/images/logotype@2x.png +0 -0
  663. package/sources/assets/images/logotype@3x.png +0 -0
  664. package/sources/assets/images/splash-android-dark.png +0 -0
  665. package/sources/assets/images/splash-android-light.png +0 -0
  666. package/sources/assets/images/transparent.png +0 -0
  667. package/sources/assets/images/zen-icon.png +0 -0
  668. package/sources/auth/AuthContext.tsx +100 -0
  669. package/sources/auth/authAccountApprove.ts +2 -0
  670. package/sources/auth/authApprove.ts +2 -0
  671. package/sources/auth/authChallenge.ts +8 -0
  672. package/sources/auth/authGetToken.ts +4 -0
  673. package/sources/auth/authQRStart.ts +17 -0
  674. package/sources/auth/authQRWait.ts +13 -0
  675. package/sources/auth/secretKeyBackup.spec.ts +465 -0
  676. package/sources/auth/secretKeyBackup.ts +179 -0
  677. package/sources/auth/tokenStorage.ts +27 -0
  678. package/sources/changelog/changelog.json +60 -0
  679. package/sources/changelog/index.ts +3 -0
  680. package/sources/changelog/parser.ts +23 -0
  681. package/sources/changelog/storage.ts +17 -0
  682. package/sources/changelog/types.ts +10 -0
  683. package/sources/components/ActiveSessionsGroupCompact.tsx +567 -0
  684. package/sources/components/AgentContentView.ios.tsx +70 -0
  685. package/sources/components/AgentContentView.tsx +48 -0
  686. package/sources/components/AgentInput.tsx +1468 -0
  687. package/sources/components/AgentInputAttachmentStrip.tsx +122 -0
  688. package/sources/components/AgentInputAutocomplete.tsx +96 -0
  689. package/sources/components/AgentInputSuggestionView.tsx +106 -0
  690. package/sources/components/AllFilesDiffView.tsx +515 -0
  691. package/sources/components/Avatar.tsx +149 -0
  692. package/sources/components/AvatarBrutalist.tsx +501 -0
  693. package/sources/components/AvatarGradient.tsx +147 -0
  694. package/sources/components/AvatarSkia.tsx +111 -0
  695. package/sources/components/AvatarSkia.web.tsx +113 -0
  696. package/sources/components/ChatFooter.tsx +50 -0
  697. package/sources/components/ChatHeaderView.tsx +180 -0
  698. package/sources/components/ChatList.tsx +283 -0
  699. package/sources/components/CodeEditor.tsx +22 -0
  700. package/sources/components/CodeEditor.web.tsx +180 -0
  701. package/sources/components/CodeView.tsx +33 -0
  702. package/sources/components/CommandPalette/CommandPalette.tsx +72 -0
  703. package/sources/components/CommandPalette/CommandPaletteInput.tsx +65 -0
  704. package/sources/components/CommandPalette/CommandPaletteItem.tsx +141 -0
  705. package/sources/components/CommandPalette/CommandPaletteModal.tsx +148 -0
  706. package/sources/components/CommandPalette/CommandPaletteProvider.tsx +141 -0
  707. package/sources/components/CommandPalette/CommandPaletteResults.tsx +129 -0
  708. package/sources/components/CommandPalette/index.ts +3 -0
  709. package/sources/components/CommandPalette/types.ts +15 -0
  710. package/sources/components/CommandPalette/useCommandPalette.ts +107 -0
  711. package/sources/components/CommandView.tsx +135 -0
  712. package/sources/components/CompactGitStatus.tsx +88 -0
  713. package/sources/components/ConnectButton.tsx +117 -0
  714. package/sources/components/Deferred.tsx +18 -0
  715. package/sources/components/DuplicateSheet.tsx +295 -0
  716. package/sources/components/EmptyMainScreen.tsx +171 -0
  717. package/sources/components/EmptyMessages.tsx +123 -0
  718. package/sources/components/EmptySessionsTablet.tsx +111 -0
  719. package/sources/components/ExternalLink.tsx +22 -0
  720. package/sources/components/FAB.tsx +53 -0
  721. package/sources/components/FABWide.tsx +59 -0
  722. package/sources/components/FeedItemCard.tsx +98 -0
  723. package/sources/components/FileIcon.tsx +63 -0
  724. package/sources/components/FileViewPanel.tsx +673 -0
  725. package/sources/components/FilesSidebar.tsx +739 -0
  726. package/sources/components/FloatingOverlay.tsx +48 -0
  727. package/sources/components/GitStatusBadge.tsx +82 -0
  728. package/sources/components/HeaderLogo.tsx +28 -0
  729. package/sources/components/HomeHeader.tsx +243 -0
  730. package/sources/components/HorizontalScrollView.tsx +88 -0
  731. package/sources/components/InboxView.tsx +260 -0
  732. package/sources/components/InlineFileDiff.tsx +277 -0
  733. package/sources/components/Item.tsx +315 -0
  734. package/sources/components/ItemGroup.tsx +147 -0
  735. package/sources/components/ItemList.tsx +102 -0
  736. package/sources/components/MainView.tsx +324 -0
  737. package/sources/components/MessageView.tsx +299 -0
  738. package/sources/components/MultiTextInput.tsx +285 -0
  739. package/sources/components/MultiTextInput.web.tsx +220 -0
  740. package/sources/components/OAuthView.tsx +374 -0
  741. package/sources/components/PermissionModeSelector.tsx +68 -0
  742. package/sources/components/PlaceholderContainerView.tsx +47 -0
  743. package/sources/components/PlusPlus.tsx +34 -0
  744. package/sources/components/PlusPlus.web.tsx +34 -0
  745. package/sources/components/ProjectGitStatus.tsx +102 -0
  746. package/sources/components/RoundButton.tsx +130 -0
  747. package/sources/components/SearchableListSelector.tsx +675 -0
  748. package/sources/components/SessionActionsNativeMenu.android.tsx +58 -0
  749. package/sources/components/SessionActionsNativeMenu.ios.tsx +55 -0
  750. package/sources/components/SessionActionsNativeMenu.tsx +20 -0
  751. package/sources/components/SessionActionsNativeMenu.web.tsx +13 -0
  752. package/sources/components/SessionActionsPopover.tsx +240 -0
  753. package/sources/components/SessionsList.tsx +471 -0
  754. package/sources/components/SessionsListWrapper.tsx +72 -0
  755. package/sources/components/SettingsView.tsx +470 -0
  756. package/sources/components/SettingsViewWrapper.tsx +21 -0
  757. package/sources/components/Shaker.tsx +42 -0
  758. package/sources/components/Shaker.web.tsx +46 -0
  759. package/sources/components/ShimmerView.tsx +106 -0
  760. package/sources/components/SidebarNavigator.tsx +218 -0
  761. package/sources/components/SidebarView.tsx +104 -0
  762. package/sources/components/SimpleSyntaxHighlighter.tsx +322 -0
  763. package/sources/components/StatusBarProvider.tsx +12 -0
  764. package/sources/components/StatusDot.tsx +49 -0
  765. package/sources/components/StyledText.tsx +35 -0
  766. package/sources/components/Switch.tsx +20 -0
  767. package/sources/components/TabBar.tsx +140 -0
  768. package/sources/components/ToolGroupView.tsx +101 -0
  769. package/sources/components/TransitionStack.tsx +14 -0
  770. package/sources/components/UpdateBanner.tsx +74 -0
  771. package/sources/components/UserCard.tsx +41 -0
  772. package/sources/components/UserSearchResult.tsx +129 -0
  773. package/sources/components/VoiceAssistantStatusBar.tsx +260 -0
  774. package/sources/components/VoiceBars.tsx +95 -0
  775. package/sources/components/autocomplete/applySuggestion.test.ts +194 -0
  776. package/sources/components/autocomplete/applySuggestion.ts +61 -0
  777. package/sources/components/autocomplete/findActiveWord.test.ts +365 -0
  778. package/sources/components/autocomplete/findActiveWord.ts +207 -0
  779. package/sources/components/autocomplete/suggestions.ts +79 -0
  780. package/sources/components/autocomplete/useActiveSuggestions.ts +130 -0
  781. package/sources/components/autocomplete/useActiveWord.ts +19 -0
  782. package/sources/components/diff/DiffView.tsx +188 -0
  783. package/sources/components/diff/PierreDiffView.tsx +253 -0
  784. package/sources/components/diff/calculateDiff.ts +317 -0
  785. package/sources/components/entityColor.ts +51 -0
  786. package/sources/components/haptics.ts +9 -0
  787. package/sources/components/haptics.web.ts +7 -0
  788. package/sources/components/layout.ts +44 -0
  789. package/sources/components/markdown/MarkdownView.tsx +670 -0
  790. package/sources/components/markdown/MermaidRenderer.tsx +233 -0
  791. package/sources/components/markdown/linkUtils.test.ts +17 -0
  792. package/sources/components/markdown/linkUtils.ts +5 -0
  793. package/sources/components/markdown/parseMarkdown.test.ts +64 -0
  794. package/sources/components/markdown/parseMarkdown.ts +46 -0
  795. package/sources/components/markdown/parseMarkdownBlock.test.ts +108 -0
  796. package/sources/components/markdown/parseMarkdownBlock.ts +200 -0
  797. package/sources/components/markdown/parseMarkdownSpans.ts +88 -0
  798. package/sources/components/modelModeOptions.test.ts +114 -0
  799. package/sources/components/modelModeOptions.ts +257 -0
  800. package/sources/components/navigation/Header.tsx +252 -0
  801. package/sources/components/parseLocalCommandMessage.spec.ts +96 -0
  802. package/sources/components/parseLocalCommandMessage.ts +97 -0
  803. package/sources/components/qr/QRCode.tsx +178 -0
  804. package/sources/components/qr/QRCode.web.tsx +229 -0
  805. package/sources/components/qr/index.ts +2 -0
  806. package/sources/components/qr/qrMatrix.ts +48 -0
  807. package/sources/components/tools/PermissionFooter.tsx +527 -0
  808. package/sources/components/tools/ToolDiffView.tsx +60 -0
  809. package/sources/components/tools/ToolError.tsx +49 -0
  810. package/sources/components/tools/ToolFullView.tsx +193 -0
  811. package/sources/components/tools/ToolHeader.tsx +93 -0
  812. package/sources/components/tools/ToolSectionView.tsx +42 -0
  813. package/sources/components/tools/ToolStatusIndicator.tsx +36 -0
  814. package/sources/components/tools/ToolView.tsx +340 -0
  815. package/sources/components/tools/knownTools.tsx +957 -0
  816. package/sources/components/tools/views/AskUserQuestionView.tsx +357 -0
  817. package/sources/components/tools/views/BashView.tsx +47 -0
  818. package/sources/components/tools/views/BashViewFull.tsx +81 -0
  819. package/sources/components/tools/views/CodexBashView.tsx +126 -0
  820. package/sources/components/tools/views/CodexDiffView.tsx +79 -0
  821. package/sources/components/tools/views/CodexPatchView.tsx +186 -0
  822. package/sources/components/tools/views/EditView.tsx +33 -0
  823. package/sources/components/tools/views/EditViewFull.tsx +38 -0
  824. package/sources/components/tools/views/ExitPlanToolView.tsx +21 -0
  825. package/sources/components/tools/views/FileView.tsx +118 -0
  826. package/sources/components/tools/views/GeminiEditView.tsx +75 -0
  827. package/sources/components/tools/views/GeminiExecuteView.tsx +92 -0
  828. package/sources/components/tools/views/MCPToolView.tsx +31 -0
  829. package/sources/components/tools/views/MultiEditView.tsx +41 -0
  830. package/sources/components/tools/views/MultiEditViewFull.tsx +84 -0
  831. package/sources/components/tools/views/TaskView.tsx +129 -0
  832. package/sources/components/tools/views/TodoView.tsx +90 -0
  833. package/sources/components/tools/views/WriteView.tsx +29 -0
  834. package/sources/components/tools/views/_all.tsx +88 -0
  835. package/sources/components/usage/UsageBar.tsx +80 -0
  836. package/sources/components/usage/UsageChart.tsx +164 -0
  837. package/sources/components/usage/UsagePanel.tsx +283 -0
  838. package/sources/components/web/FaviconPermissionIndicator.tsx +44 -0
  839. package/sources/config.ts +3 -0
  840. package/sources/constants/Languages.ts +116 -0
  841. package/sources/constants/Typography.ts +116 -0
  842. package/sources/dev/testRunner.ts +277 -0
  843. package/sources/docs/autocomplete-text-manipulation.md +224 -0
  844. package/sources/encryption/aes.appspec.ts +25 -0
  845. package/sources/encryption/aes.ts +21 -0
  846. package/sources/encryption/aes.web.test.ts +73 -0
  847. package/sources/encryption/aes.web.ts +79 -0
  848. package/sources/encryption/base64.appspec.ts +240 -0
  849. package/sources/encryption/base64.native.ts +12 -0
  850. package/sources/encryption/base64.ts +46 -0
  851. package/sources/encryption/blob.test.ts +120 -0
  852. package/sources/encryption/blob.ts +58 -0
  853. package/sources/encryption/deriveKey.appspec.ts +72 -0
  854. package/sources/encryption/deriveKey.ts +46 -0
  855. package/sources/encryption/hex.ts +17 -0
  856. package/sources/encryption/hmac_sha512.appspec.ts +40 -0
  857. package/sources/encryption/hmac_sha512.ts +42 -0
  858. package/sources/encryption/libsodium.lib.ts +2 -0
  859. package/sources/encryption/libsodium.lib.web.ts +2 -0
  860. package/sources/encryption/libsodium.ts +58 -0
  861. package/sources/encryption/text.test.ts +61 -0
  862. package/sources/encryption/text.ts +11 -0
  863. package/sources/hooks/useAsyncCommand.ts +25 -0
  864. package/sources/hooks/useAttachmentImage.ts +134 -0
  865. package/sources/hooks/useAutocomplete.ts +69 -0
  866. package/sources/hooks/useAutocompleteSession.ts +53 -0
  867. package/sources/hooks/useChangelog.ts +45 -0
  868. package/sources/hooks/useCheckCameraPermissions.ts +25 -0
  869. package/sources/hooks/useConnectAccount.ts +107 -0
  870. package/sources/hooks/useConnectTerminal.ts +112 -0
  871. package/sources/hooks/useDemoMessages.ts +48 -0
  872. package/sources/hooks/useDraft.ts +120 -0
  873. package/sources/hooks/useElapsedTime.ts +36 -0
  874. package/sources/hooks/useGetPath.ts +13 -0
  875. package/sources/hooks/useGitStatusFiles.ts +45 -0
  876. package/sources/hooks/useGlobalKeyboard.ts +29 -0
  877. package/sources/hooks/useGroupedMessages.ts +149 -0
  878. package/sources/hooks/useImagePicker.ts +135 -0
  879. package/sources/hooks/useInboxHasContent.ts +19 -0
  880. package/sources/hooks/useMultiClick.ts +56 -0
  881. package/sources/hooks/useNasTechAction.ts +45 -0
  882. package/sources/hooks/useNativeUpdate.ts +10 -0
  883. package/sources/hooks/useNavigateToSession.ts +20 -0
  884. package/sources/hooks/useNewSessionDraft.ts +70 -0
  885. package/sources/hooks/usePrefetchFileContents.ts +162 -0
  886. package/sources/hooks/useSearch.ts +120 -0
  887. package/sources/hooks/useSessionQuickActions.ts +325 -0
  888. package/sources/hooks/useTauriDrag.ts +76 -0
  889. package/sources/hooks/useTauriZoom.ts +67 -0
  890. package/sources/hooks/useUpdates.ts +84 -0
  891. package/sources/hooks/useVisibleSessionListViewData.ts +65 -0
  892. package/sources/hooks/useWorktreeCleanup.ts +69 -0
  893. package/sources/log.ts +108 -0
  894. package/sources/modal/ModalManager.ts +203 -0
  895. package/sources/modal/ModalProvider.tsx +103 -0
  896. package/sources/modal/components/BaseModal.tsx +122 -0
  897. package/sources/modal/components/CustomModal.tsx +42 -0
  898. package/sources/modal/components/WebAlertModal.tsx +139 -0
  899. package/sources/modal/components/WebPromptModal.tsx +185 -0
  900. package/sources/modal/index.ts +3 -0
  901. package/sources/modal/types.ts +79 -0
  902. package/sources/nastech-wire/index.ts +10 -0
  903. package/sources/nastech-wire/legacyProtocol.ts +27 -0
  904. package/sources/nastech-wire/messageMeta.ts +14 -0
  905. package/sources/nastech-wire/messages.ts +113 -0
  906. package/sources/nastech-wire/sessionProtocol.ts +134 -0
  907. package/sources/nastech-wire/voice.ts +34 -0
  908. package/sources/polyfills/screenOrientation.ts +33 -0
  909. package/sources/realtime/RealtimeProvider.tsx +20 -0
  910. package/sources/realtime/RealtimeProvider.web.tsx +15 -0
  911. package/sources/realtime/RealtimeSession.ts +200 -0
  912. package/sources/realtime/RealtimeVoiceSession.tsx +211 -0
  913. package/sources/realtime/RealtimeVoiceSession.web.tsx +209 -0
  914. package/sources/realtime/hooks/contextFormatters.ts +127 -0
  915. package/sources/realtime/hooks/voiceHooks.ts +232 -0
  916. package/sources/realtime/realtimeClientTools.ts +94 -0
  917. package/sources/realtime/types.ts +19 -0
  918. package/sources/realtime/voiceConfig.ts +31 -0
  919. package/sources/realtime/voiceExperiment.ts +91 -0
  920. package/sources/realtime/voiceSystemPrompt.ts +75 -0
  921. package/sources/scripts/compareTranslations.ts +217 -0
  922. package/sources/scripts/parseChangelog.ts +87 -0
  923. package/sources/sync/__testdata__/trace_0.json +3986 -0
  924. package/sources/sync/__testdata__/trace_1.json +1391 -0
  925. package/sources/sync/__testdata__/trace_2.json +182 -0
  926. package/sources/sync/agentDefaults.ts +108 -0
  927. package/sources/sync/apiArtifacts.ts +143 -0
  928. package/sources/sync/apiAttachments.ts +217 -0
  929. package/sources/sync/apiFeed.ts +60 -0
  930. package/sources/sync/apiFriends.ts +217 -0
  931. package/sources/sync/apiGithub.spec.ts +97 -0
  932. package/sources/sync/apiGithub.ts +103 -0
  933. package/sources/sync/apiKv.ts +270 -0
  934. package/sources/sync/apiPush.ts +83 -0
  935. package/sources/sync/apiServices.ts +64 -0
  936. package/sources/sync/apiSocket.ts +290 -0
  937. package/sources/sync/apiTypes.spec.ts +23 -0
  938. package/sources/sync/apiTypes.ts +213 -0
  939. package/sources/sync/apiUsage.ts +130 -0
  940. package/sources/sync/apiVoice.ts +57 -0
  941. package/sources/sync/appConfig.ts +95 -0
  942. package/sources/sync/artifactTypes.ts +85 -0
  943. package/sources/sync/attachmentTypes.ts +28 -0
  944. package/sources/sync/encryption/artifactEncryption.ts +83 -0
  945. package/sources/sync/encryption/encryption.ts +220 -0
  946. package/sources/sync/encryption/encryptionCache.ts +248 -0
  947. package/sources/sync/encryption/encryptor.appspec.ts +409 -0
  948. package/sources/sync/encryption/encryptor.ts +126 -0
  949. package/sources/sync/encryption/machineEncryption.ts +122 -0
  950. package/sources/sync/encryption/sessionEncryption.ts +207 -0
  951. package/sources/sync/feedTypes.ts +43 -0
  952. package/sources/sync/friendTypes.ts +92 -0
  953. package/sources/sync/git-parsers/LineParser.ts +62 -0
  954. package/sources/sync/git-parsers/parseBranch.ts +97 -0
  955. package/sources/sync/git-parsers/parseDiff.ts +180 -0
  956. package/sources/sync/git-parsers/parseStatus.ts +162 -0
  957. package/sources/sync/git-parsers/parseStatusV2.ts +307 -0
  958. package/sources/sync/gitStatusFiles.ts +185 -0
  959. package/sources/sync/gitStatusSync.ts +282 -0
  960. package/sources/sync/localSettings.ts +67 -0
  961. package/sources/sync/messageMeta.test.ts +87 -0
  962. package/sources/sync/messageMeta.ts +36 -0
  963. package/sources/sync/modeHacks.test.ts +29 -0
  964. package/sources/sync/modeHacks.ts +22 -0
  965. package/sources/sync/nastechApi.ts +124 -0
  966. package/sources/sync/ops.ts +776 -0
  967. package/sources/sync/persistence.ts +322 -0
  968. package/sources/sync/profile.ts +95 -0
  969. package/sources/sync/projectFiles.ts +54 -0
  970. package/sources/sync/prompt/systemPrompt.ts +20 -0
  971. package/sources/sync/purchases.ts +67 -0
  972. package/sources/sync/pushRegistration.ts +229 -0
  973. package/sources/sync/reducer/activityUpdateAccumulator.test.ts +492 -0
  974. package/sources/sync/reducer/activityUpdateAccumulator.ts +96 -0
  975. package/sources/sync/reducer/messageToEvent.ts +85 -0
  976. package/sources/sync/reducer/phase0-skipping.spec.ts +206 -0
  977. package/sources/sync/reducer/reducer.spec.ts +3169 -0
  978. package/sources/sync/reducer/reducer.ts +1214 -0
  979. package/sources/sync/reducer/reducerTracer.spec.ts +502 -0
  980. package/sources/sync/reducer/reducerTracer.ts +310 -0
  981. package/sources/sync/revenueCat/index.ts +21 -0
  982. package/sources/sync/revenueCat/revenueCat.ts +215 -0
  983. package/sources/sync/revenueCat/revenueCat.web.ts +238 -0
  984. package/sources/sync/revenueCat/types.ts +82 -0
  985. package/sources/sync/serverConfig.ts +72 -0
  986. package/sources/sync/settings.spec.ts +456 -0
  987. package/sources/sync/settings.ts +186 -0
  988. package/sources/sync/storage.ts +1653 -0
  989. package/sources/sync/storageTypes.spec.ts +24 -0
  990. package/sources/sync/storageTypes.ts +215 -0
  991. package/sources/sync/suggestionCommands.ts +149 -0
  992. package/sources/sync/suggestionFile.ts +206 -0
  993. package/sources/sync/sync.ts +2555 -0
  994. package/sources/sync/typesMessage.ts +69 -0
  995. package/sources/sync/typesMessageMeta.test.ts +14 -0
  996. package/sources/sync/typesMessageMeta.ts +17 -0
  997. package/sources/sync/typesRaw.spec.ts +2010 -0
  998. package/sources/sync/typesRaw.ts +1183 -0
  999. package/sources/sync/uploadFormFile.ts +29 -0
  1000. package/sources/sync/uploadFormFile.web.ts +14 -0
  1001. package/sources/sync/webTabTitle.ts +58 -0
  1002. package/sources/text/README.md +223 -0
  1003. package/sources/text/_all.ts +104 -0
  1004. package/sources/text/_default.ts +1015 -0
  1005. package/sources/text/index.ts +215 -0
  1006. package/sources/text/translations/ca.ts +993 -0
  1007. package/sources/text/translations/en.ts +1009 -0
  1008. package/sources/text/translations/es.ts +995 -0
  1009. package/sources/text/translations/it.ts +992 -0
  1010. package/sources/text/translations/ja.ts +993 -0
  1011. package/sources/text/translations/pl.ts +1024 -0
  1012. package/sources/text/translations/pt.ts +992 -0
  1013. package/sources/text/translations/ru.ts +1023 -0
  1014. package/sources/text/translations/zh-Hans.ts +992 -0
  1015. package/sources/text/translations/zh-Hant.ts +991 -0
  1016. package/sources/theme.css +72 -0
  1017. package/sources/theme.dark.json +31 -0
  1018. package/sources/theme.figma.json +457 -0
  1019. package/sources/theme.gen.ts +10 -0
  1020. package/sources/theme.light.json +31 -0
  1021. package/sources/theme.ts +452 -0
  1022. package/sources/track/index.ts +171 -0
  1023. package/sources/track/tracking.ts +12 -0
  1024. package/sources/track/useTrackScreens.ts +10 -0
  1025. package/sources/types/react-native-webrtc-web-shim.d.ts +6 -0
  1026. package/sources/unistyles.ts +97 -0
  1027. package/sources/utils/codexUnifiedDiff.spec.ts +43 -0
  1028. package/sources/utils/codexUnifiedDiff.ts +70 -0
  1029. package/sources/utils/consoleLogging.ts +145 -0
  1030. package/sources/utils/copySessionMetadataToClipboard.ts +53 -0
  1031. package/sources/utils/debounce.test.ts +646 -0
  1032. package/sources/utils/debounce.ts +122 -0
  1033. package/sources/utils/deviceCalculations.test.ts +318 -0
  1034. package/sources/utils/deviceCalculations.ts +87 -0
  1035. package/sources/utils/errors.ts +10 -0
  1036. package/sources/utils/formatPermissionParams.ts +23 -0
  1037. package/sources/utils/isTauri.ts +7 -0
  1038. package/sources/utils/loadSkia.ts +3 -0
  1039. package/sources/utils/loadSkia.web.ts +5 -0
  1040. package/sources/utils/lock.ts +40 -0
  1041. package/sources/utils/machineUtils.ts +6 -0
  1042. package/sources/utils/messageUtils.ts +254 -0
  1043. package/sources/utils/microphonePermissions.ts +109 -0
  1044. package/sources/utils/notificationRouting.test.ts +51 -0
  1045. package/sources/utils/notificationRouting.ts +81 -0
  1046. package/sources/utils/oauth.ts +143 -0
  1047. package/sources/utils/openExternalUrl.ts +19 -0
  1048. package/sources/utils/parseToken.ts +23 -0
  1049. package/sources/utils/pasteImages.web.ts +81 -0
  1050. package/sources/utils/pathUtils.spec.ts +226 -0
  1051. package/sources/utils/pathUtils.ts +75 -0
  1052. package/sources/utils/platform.ts +19 -0
  1053. package/sources/utils/readFileBytes.ts +11 -0
  1054. package/sources/utils/readFileBytes.web.ts +12 -0
  1055. package/sources/utils/requestReview.ts +135 -0
  1056. package/sources/utils/responsive.ts +87 -0
  1057. package/sources/utils/resumeCommand.test.ts +78 -0
  1058. package/sources/utils/resumeCommand.ts +70 -0
  1059. package/sources/utils/sessionFileLinks.test.ts +112 -0
  1060. package/sources/utils/sessionFileLinks.ts +388 -0
  1061. package/sources/utils/sessionUtils.ts +226 -0
  1062. package/sources/utils/stringUtils.ts +41 -0
  1063. package/sources/utils/sync.ts +164 -0
  1064. package/sources/utils/thumbhash.ts +17 -0
  1065. package/sources/utils/thumbhash.web.ts +85 -0
  1066. package/sources/utils/time.ts +41 -0
  1067. package/sources/utils/toSnakeCase.test.ts +182 -0
  1068. package/sources/utils/toSnakeCase.ts +40 -0
  1069. package/sources/utils/toolCommand.test.ts +23 -0
  1070. package/sources/utils/toolCommand.ts +35 -0
  1071. package/sources/utils/toolComparison.test.ts +101 -0
  1072. package/sources/utils/toolComparison.ts +73 -0
  1073. package/sources/utils/toolErrorParser.test.ts +126 -0
  1074. package/sources/utils/toolErrorParser.ts +102 -0
  1075. package/sources/utils/trimIdent.ts +27 -0
  1076. package/sources/utils/truncateForLogs.ts +37 -0
  1077. package/sources/utils/versionUtils.test.ts +58 -0
  1078. package/sources/utils/versionUtils.ts +69 -0
  1079. package/sources/utils/web/faviconGenerator.ts +39 -0
  1080. package/sources/utils/worktree.ts +192 -0
  1081. package/sources/wire/index.ts +97 -0
  1082. package/src-tauri/Cargo.lock +5978 -0
  1083. package/src-tauri/Cargo.toml +27 -0
  1084. package/src-tauri/build.rs +3 -0
  1085. package/src-tauri/capabilities/default.json +27 -0
  1086. package/src-tauri/deny.toml +53 -0
  1087. package/src-tauri/entitlements.plist +24 -0
  1088. package/src-tauri/icons/128x128.png +0 -0
  1089. package/src-tauri/icons/128x128@2x.png +0 -0
  1090. package/src-tauri/icons/32x32.png +0 -0
  1091. package/src-tauri/icons/64x64.png +0 -0
  1092. package/src-tauri/icons/Square107x107Logo.png +0 -0
  1093. package/src-tauri/icons/Square142x142Logo.png +0 -0
  1094. package/src-tauri/icons/Square150x150Logo.png +0 -0
  1095. package/src-tauri/icons/Square284x284Logo.png +0 -0
  1096. package/src-tauri/icons/Square30x30Logo.png +0 -0
  1097. package/src-tauri/icons/Square310x310Logo.png +0 -0
  1098. package/src-tauri/icons/Square44x44Logo.png +0 -0
  1099. package/src-tauri/icons/Square71x71Logo.png +0 -0
  1100. package/src-tauri/icons/Square89x89Logo.png +0 -0
  1101. package/src-tauri/icons/StoreLogo.png +0 -0
  1102. package/src-tauri/icons/icon.icns +0 -0
  1103. package/src-tauri/icons/icon.ico +0 -0
  1104. package/src-tauri/icons/icon.png +0 -0
  1105. package/src-tauri/src/lib.rs +18 -0
  1106. package/src-tauri/src/main.rs +6 -0
  1107. package/src-tauri/tauri.conf.json +51 -0
  1108. package/src-tauri/tauri.dev.conf.json +20 -0
  1109. package/src-tauri/tauri.preview.conf.json +20 -0
  1110. package/tsconfig.json +45 -0
  1111. package/vitest.config.ts +26 -0
@@ -0,0 +1,995 @@
1
+ import type { TranslationStructure } from '../_default';
2
+
3
+ /**
4
+ * Spanish plural helper function
5
+ * Spanish has 2 plural forms: singular, plural
6
+ * @param options - Object containing count, singular, and plural forms
7
+ * @returns The appropriate form based on Spanish plural rules
8
+ */
9
+ function plural({ count, singular, plural }: { count: number; singular: string; plural: string }): string {
10
+ return count === 1 ? singular : plural;
11
+ }
12
+
13
+ /**
14
+ * Spanish translations for the NasTech app
15
+ * Must match the exact structure of the English translations
16
+ */
17
+ export const es: TranslationStructure = {
18
+ tabs: {
19
+ // Tab navigation labels
20
+ inbox: 'Bandeja',
21
+ sessions: 'Terminales',
22
+ settings: 'Configuración',
23
+ },
24
+
25
+ inbox: {
26
+ // Inbox screen
27
+ emptyTitle: 'Bandeja vacía',
28
+ emptyDescription: 'Conéctate con amigos para empezar a compartir sesiones',
29
+ updates: 'Actualizaciones',
30
+ },
31
+
32
+ common: {
33
+ // Simple string constants
34
+ cancel: 'Cancelar',
35
+ authenticate: 'Autenticar',
36
+ save: 'Guardar',
37
+ saveAs: 'Guardar como',
38
+ error: 'Error',
39
+ success: 'Éxito',
40
+ ok: 'OK',
41
+ continue: 'Continuar',
42
+ back: 'Atrás',
43
+ create: 'Crear',
44
+ rename: 'Renombrar',
45
+ reset: 'Restablecer',
46
+ logout: 'Cerrar sesión',
47
+ yes: 'Sí',
48
+ no: 'No',
49
+ discard: 'Descartar',
50
+ version: 'Versión',
51
+ copied: 'Copiado',
52
+ copy: 'Copiar',
53
+ scanning: 'Escaneando...',
54
+ urlPlaceholder: 'https://ejemplo.com',
55
+ home: 'Inicio',
56
+ message: 'Mensaje',
57
+ files: 'Archivos',
58
+ fileViewer: 'Visor de archivos',
59
+ loading: 'Cargando...',
60
+ retry: 'Reintentar',
61
+ delete: 'Eliminar',
62
+ optional: 'opcional',
63
+ },
64
+
65
+ profile: {
66
+ userProfile: 'Perfil de usuario',
67
+ details: 'Detalles',
68
+ firstName: 'Nombre',
69
+ lastName: 'Apellido',
70
+ username: 'Nombre de usuario',
71
+ status: 'Estado',
72
+ },
73
+
74
+
75
+ status: {
76
+ connected: 'conectado',
77
+ connecting: 'conectando',
78
+ disconnected: 'desconectado',
79
+ error: 'error',
80
+ online: 'en línea',
81
+ offline: 'desconectado',
82
+ lastSeen: ({ time }: { time: string }) => `visto por última vez ${time}`,
83
+ permissionRequired: 'permiso requerido',
84
+ activeNow: 'Activo ahora',
85
+ unknown: 'desconocido',
86
+ unread: 'nuevos resultados',
87
+ },
88
+
89
+ time: {
90
+ justNow: 'ahora mismo',
91
+ minutesAgo: ({ count }: { count: number }) => `hace ${count} minuto${count !== 1 ? 's' : ''}`,
92
+ hoursAgo: ({ count }: { count: number }) => `hace ${count} hora${count !== 1 ? 's' : ''}`,
93
+ daysAgo: ({ count }: { count: number }) => `hace ${count} día${count !== 1 ? 's' : ''}`,
94
+ },
95
+
96
+ connect: {
97
+ restoreAccount: 'Restaurar cuenta',
98
+ enterSecretKey: 'Ingresa tu clave secreta',
99
+ invalidSecretKey: 'Clave secreta inválida. Verifica e intenta de nuevo.',
100
+ enterUrlManually: 'Ingresar URL manualmente',
101
+ },
102
+
103
+ settings: {
104
+ title: 'Configuración',
105
+ connectedAccounts: 'Cuentas conectadas',
106
+ connectAccount: 'Conectar cuenta',
107
+ github: 'GitHub',
108
+ machines: 'Máquinas',
109
+ showOfflineMachines: ({ count }: { count: number }) => count === 1 ? 'Mostrar 1 máquina sin conexión' : `Mostrar ${count} máquinas sin conexión`,
110
+ hideOfflineMachines: 'Ocultar máquinas sin conexión',
111
+ features: 'Características',
112
+ social: 'Social',
113
+ account: 'Cuenta',
114
+ accountSubtitle: 'Gestiona los detalles de tu cuenta',
115
+ appearance: 'Apariencia',
116
+ appearanceSubtitle: 'Personaliza como se ve la app',
117
+ voiceAssistant: 'Asistente de voz',
118
+ voiceAssistantSubtitle: 'Configura las preferencias de voz',
119
+ featuresTitle: 'Características',
120
+ featuresSubtitle: 'Habilitar o deshabilitar funciones de la aplicación',
121
+ developer: 'Desarrollador',
122
+ developerTools: 'Herramientas de desarrollador',
123
+ about: 'Acerca de',
124
+ aboutFooter: 'NasTech es un cliente móvil para Codex y Claude Code. Todo está cifrado de extremo a extremo y tu cuenta se guarda solo en tu dispositivo. No está afiliado con Anthropic.',
125
+ whatsNew: 'Novedades',
126
+ whatsNewSubtitle: 'Ve las últimas actualizaciones y mejoras',
127
+ reportIssue: 'Reportar un problema',
128
+ privacyPolicy: 'Política de privacidad',
129
+ termsOfService: 'Términos de servicio',
130
+ eula: 'EULA',
131
+ supportUs: 'Apóyanos',
132
+ supportUsSubtitlePro: '¡Gracias por su apoyo!',
133
+ supportUsSubtitle: 'Apoya el desarrollo del proyecto',
134
+ scanQrCodeToAuthenticate: 'Escanea el código QR para autenticarte',
135
+ githubConnected: ({ login }: { login: string }) => `Conectado como @${login}`,
136
+ connectGithubAccount: 'Conecta tu cuenta de GitHub',
137
+ claudeAuthSuccess: 'Conectado exitosamente con Claude',
138
+ exchangingTokens: 'Intercambiando tokens...',
139
+ usage: 'Uso',
140
+ usageSubtitle: 'Ver tu uso de API y costos',
141
+
142
+ // Dynamic settings messages
143
+ accountConnected: ({ service }: { service: string }) => `Cuenta de ${service} conectada`,
144
+ machineStatus: ({ name, status }: { name: string; status: 'online' | 'offline' }) =>
145
+ `${name} está ${status === 'online' ? 'en línea' : 'desconectado'}`,
146
+ featureToggled: ({ feature, enabled }: { feature: string; enabled: boolean }) =>
147
+ `${feature} ${enabled ? 'habilitada' : 'deshabilitada'}`,
148
+ },
149
+
150
+ settingsAppearance: {
151
+ // Appearance settings screen
152
+ theme: 'Tema',
153
+ themeDescription: 'Elige tu esquema de colores preferido',
154
+ themeOptions: {
155
+ adaptive: 'Adaptativo',
156
+ light: 'Claro',
157
+ dark: 'Oscuro',
158
+ },
159
+ themeDescriptions: {
160
+ adaptive: 'Seguir configuración del sistema',
161
+ light: 'Usar siempre tema claro',
162
+ dark: 'Usar siempre tema oscuro',
163
+ },
164
+ display: 'Pantalla',
165
+ displayDescription: 'Controla diseño y espaciado',
166
+ inlineToolCalls: 'Llamadas a herramientas en línea',
167
+ inlineToolCallsDescription: 'Mostrar llamadas a herramientas directamente en mensajes de chat',
168
+ expandTodoLists: 'Expandir listas de tareas',
169
+ expandTodoListsDescription: 'Mostrar todas las tareas en lugar de solo cambios',
170
+ showLineNumbersInDiffs: 'Mostrar números de línea en diferencias',
171
+ showLineNumbersInDiffsDescription: 'Mostrar números de línea en diferencias de código',
172
+ showLineNumbersInToolViews: 'Mostrar números de línea en vistas de herramientas',
173
+ showLineNumbersInToolViewsDescription: 'Mostrar números de línea en diferencias de vistas de herramientas',
174
+ wrapLinesInDiffs: 'Ajustar líneas en diferencias',
175
+ wrapLinesInDiffsDescription: 'Ajustar líneas largas en lugar de desplazamiento horizontal en vistas de diferencias',
176
+ diffStyle: 'Vista de diferencias',
177
+ diffStyleDescription: 'Mostrar diferencias en una sola columna (unified) o lado a lado (split). La vista split solo funciona en web.',
178
+ diffStyleOptions: {
179
+ unified: 'Unified',
180
+ split: 'Split',
181
+ },
182
+ alwaysShowContextSize: 'Mostrar siempre tamaño del contexto',
183
+ alwaysShowContextSizeDescription: 'Mostrar uso del contexto incluso cuando no esté cerca del límite',
184
+ avatarStyle: 'Estilo de avatar',
185
+ avatarStyleDescription: 'Elige la apariencia del avatar de sesión',
186
+ avatarOptions: {
187
+ pixelated: 'Pixelado',
188
+ gradient: 'Gradiente',
189
+ brutalist: 'Brutalista',
190
+ },
191
+ showFlavorIcons: 'Mostrar íconos de proveedor de IA',
192
+ showFlavorIconsDescription: 'Mostrar íconos del proveedor de IA en los avatares de sesión',
193
+ },
194
+
195
+ settingsFeatures: {
196
+ // Features settings screen
197
+ experiments: 'Experimentos',
198
+ experimentsDescription: 'Habilitar características experimentales que aún están en desarrollo. Estas características pueden ser inestables o cambiar sin aviso.',
199
+ experimentalFeatures: 'Características experimentales',
200
+ experimentalFeaturesEnabled: 'Características experimentales habilitadas',
201
+ experimentalFeaturesDisabled: 'Usando solo características estables',
202
+ webFeatures: 'Características web',
203
+ webFeaturesDescription: 'Características disponibles solo en la versión web de la aplicación.',
204
+ enterToSend: 'Enter para enviar',
205
+ enterToSendEnabled: 'Presiona Enter para enviar (Shift+Enter para una nueva línea)',
206
+ enterToSendDisabled: 'Enter inserta una nueva línea',
207
+ commandPalette: 'Paleta de comandos',
208
+ commandPaletteEnabled: 'Presione ⌘K para abrir',
209
+ commandPaletteDisabled: 'Acceso rápido a comandos deshabilitado',
210
+ markdownCopyV2: 'Markdown Copy v2',
211
+ markdownCopyV2Subtitle: 'Pulsación larga abre modal de copiado',
212
+ hideInactiveSessions: 'Ocultar sesiones inactivas',
213
+ hideInactiveSessionsSubtitle: 'Muestra solo los chats activos en tu lista',
214
+ groupToolCalls: 'Agrupar llamadas a herramientas',
215
+ groupToolCallsSubtitle: 'Contrae las llamadas consecutivas a herramientas en un solo contenedor',
216
+ privacy: 'Privacidad',
217
+ privacyDescription: 'Desactiva completamente toda la analítica y telemetría. No se enviarán datos a PostHog ni a ningún otro servicio de seguimiento.',
218
+ disableAnalytics: 'Desactivar analítica',
219
+ analyticsDisabled: 'Todo el seguimiento y telemetría desactivados',
220
+ analyticsEnabled: 'Analítica anónima de uso activa',
221
+ imageUpload: 'Subida de imágenes',
222
+ imageUploadSubtitle: 'Adjunta imágenes a los mensajes para que Claude las analice',
223
+ },
224
+
225
+ errors: {
226
+ networkError: 'Error de conexión',
227
+ serverError: 'Error del servidor',
228
+ unknownError: 'Error desconocido',
229
+ connectionTimeout: 'Se agotó el tiempo de conexión',
230
+ authenticationFailed: 'Falló la autenticación',
231
+ permissionDenied: 'Permiso denegado',
232
+ fileNotFound: 'Archivo no encontrado',
233
+ invalidFormat: 'Formato inválido',
234
+ operationFailed: 'Operación falló',
235
+ tryAgain: 'Intenta de nuevo',
236
+ contactSupport: 'Contacta soporte si el problema persiste',
237
+ sessionNotFound: 'Sesión no encontrada',
238
+ voiceSessionFailed: 'Falló al iniciar sesión de voz',
239
+ voiceServiceUnavailable: 'El servicio de voz no está disponible temporalmente',
240
+ voiceLimitReachedTitle: 'Límite de voz alcanzado',
241
+ voiceHardLimitReached: ({ hours }: { hours: number }) => `Has usado ${hours}+ horas de voz este mes. Este es el máximo permitido. Puedes configurar tu propio agente ElevenLabs en la configuración de voz para usar tu propia cuota.`,
242
+ voiceConversationLimitReached: 'Has alcanzado el número máximo de conversaciones de voz este mes. Es posible que en el futuro agreguemos uso de voz bajo demanda — por favor crea un issue en github.com/nastech-ai/nastech/issues si alcanzas este límite.',
243
+ oauthInitializationFailed: 'Falló al inicializar el flujo OAuth',
244
+ tokenStorageFailed: 'Falló al almacenar los tokens de autenticación',
245
+ oauthStateMismatch: 'Falló la validación de seguridad. Inténtalo de nuevo',
246
+ tokenExchangeFailed: 'Falló al intercambiar el código de autorización',
247
+ oauthAuthorizationDenied: 'La autorización fue denegada',
248
+ webViewLoadFailed: 'Falló al cargar la página de autenticación',
249
+ failedToLoadProfile: 'No se pudo cargar el perfil de usuario',
250
+ userNotFound: 'Usuario no encontrado',
251
+ sessionDeleted: 'La sesión ha sido eliminada',
252
+ sessionDeletedDescription: 'Esta sesión ha sido eliminada permanentemente',
253
+
254
+ // Error functions with context
255
+ fieldError: ({ field, reason }: { field: string; reason: string }) =>
256
+ `${field}: ${reason}`,
257
+ validationError: ({ field, min, max }: { field: string; min: number; max: number }) =>
258
+ `${field} debe estar entre ${min} y ${max}`,
259
+ retryIn: ({ seconds }: { seconds: number }) =>
260
+ `Intenta en ${seconds} ${seconds === 1 ? 'segundo' : 'segundos'}`,
261
+ errorWithCode: ({ message, code }: { message: string; code: number | string }) =>
262
+ `${message} (Error ${code})`,
263
+ disconnectServiceFailed: ({ service }: { service: string }) =>
264
+ `Falló al desconectar ${service}`,
265
+ connectServiceFailed: ({ service }: { service: string }) =>
266
+ `No se pudo conectar ${service}. Por favor, inténtalo de nuevo.`,
267
+ failedToLoadFriends: 'No se pudo cargar la lista de amigos',
268
+ failedToAcceptRequest: 'No se pudo aceptar la solicitud de amistad',
269
+ failedToRejectRequest: 'No se pudo rechazar la solicitud de amistad',
270
+ failedToRemoveFriend: 'No se pudo eliminar al amigo',
271
+ searchFailed: 'La búsqueda falló. Por favor, intenta de nuevo.',
272
+ failedToSendRequest: 'No se pudo enviar la solicitud de amistad',
273
+ },
274
+
275
+ newSession: {
276
+ title: 'Iniciar nueva sesión',
277
+ machineOffline: 'La máquina está desconectada',
278
+ switchMachinesHint: '• Cambia de máquina haciendo clic en la máquina de arriba',
279
+ },
280
+
281
+ sessionHistory: {
282
+ // Used by session history screen
283
+ title: 'Historial de sesiones',
284
+ empty: 'No se encontraron sesiones',
285
+ today: 'Hoy',
286
+ yesterday: 'Ayer',
287
+ daysAgo: ({ count }: { count: number }) => `hace ${count} ${count === 1 ? 'día' : 'días'}`,
288
+ viewAll: 'Ver todas las sesiones',
289
+ },
290
+
291
+ session: {
292
+ inputPlaceholder: 'Escriba un mensaje ...',
293
+ inactiveArchived: 'Esta sesión está inactiva.',
294
+ resumeFromTerminal: 'Para reanudarla desde la terminal:',
295
+ newChat: 'Chat nuevo',
296
+ forkAction: 'Bifurcar sesión',
297
+ forkSubtitle: 'Continuar en una nueva sesión con el mismo contexto',
298
+ duplicateAction: 'Duplicar desde un mensaje…',
299
+ duplicateSubtitle: 'Volver a un punto elegido e intentarlo de nuevo',
300
+ forkFromHere: 'Bifurcar desde aquí',
301
+ duplicateSheetTitle: 'Elige un punto de retroceso',
302
+ duplicateSheetSubtitle: 'La nueva sesión conservará el turno elegido completo (tu mensaje y la respuesta del agente) y descartará los siguientes mensajes.',
303
+ duplicateSheetConfirm: 'Duplicar',
304
+ duplicateSheetEmpty: 'Aún no hay mensajes elegibles para retroceder en esta sesión.',
305
+ duplicateRowDisabled: 'Este mensaje no se puede usar como punto de retroceso.',
306
+ forkedFromLabel: 'Bifurcado de',
307
+ forkedFromSubtitle: 'Abrir la sesión de la que se bifurcó',
308
+ forkErrorOffline: 'Esta máquina está fuera de línea. Bifurcar solo está disponible mientras la máquina de la sesión esté en línea.',
309
+ forkErrorMissingUuid: 'El punto de retroceso elegido ya no existe en la sesión origen — intenta bifurcar sin truncar.',
310
+ forkErrorMissingMetadata: 'Faltan metadatos de la sesión necesarios para bifurcar.',
311
+ forkErrorGeneric: 'No se pudo bifurcar la sesión.',
312
+ forkClaudeOnly: 'La bifurcación actualmente solo se admite para sesiones de Claude.',
313
+ },
314
+
315
+ commandPalette: {
316
+ placeholder: 'Escriba un comando o busque...',
317
+ },
318
+
319
+ server: {
320
+ // Used by Server Configuration screen (app/(app)/server.tsx)
321
+ serverConfiguration: 'Configuración del servidor',
322
+ enterServerUrl: 'Ingresa una URL de servidor',
323
+ notValidNasTechServer: 'No es un servidor NasTech válido',
324
+ changeServer: 'Cambiar servidor',
325
+ continueWithServer: '¿Continuar con este servidor?',
326
+ resetToDefault: 'Restablecer por defecto',
327
+ resetServerDefault: '¿Restablecer servidor por defecto?',
328
+ validating: 'Validando...',
329
+ validatingServer: 'Validando servidor...',
330
+ serverReturnedError: 'El servidor devolvió un error',
331
+ failedToConnectToServer: 'Falló al conectar con el servidor',
332
+ currentlyUsingCustomServer: 'Actualmente usando servidor personalizado',
333
+ customServerUrlLabel: 'URL del servidor personalizado',
334
+ advancedFeatureFooter: 'Esta es una característica avanzada. Solo cambia el servidor si sabes lo que haces. Necesitarás cerrar sesión e iniciarla nuevamente después de cambiar servidores.'
335
+ },
336
+
337
+ sessionInfo: {
338
+ // Used by Session Info screen (app/(app)/session/[id]/info.tsx)
339
+ killSession: 'Terminar sesión',
340
+ killSessionConfirm: '¿Seguro que quieres terminar esta sesión?',
341
+ archiveSession: 'Archivar sesión',
342
+ archiveSessionConfirm: '¿Seguro que quieres archivar esta sesión?',
343
+ nastechSessionIdCopied: 'ID de sesión de NasTech copiado al portapapeles',
344
+ failedToCopySessionId: 'Falló al copiar ID de sesión de NasTech',
345
+ nastechSessionId: 'ID de sesión de NasTech',
346
+ claudeCodeSessionId: 'ID de sesión de Claude Code',
347
+ claudeCodeSessionIdCopied: 'ID de sesión de Claude Code copiado al portapapeles',
348
+ codexThreadId: 'ID del hilo de Codex',
349
+ codexThreadIdCopied: 'ID del hilo de Codex copiado al portapapeles',
350
+ aiProvider: 'Proveedor de IA',
351
+ failedToCopyClaudeCodeSessionId: 'Falló al copiar ID de sesión de Claude Code',
352
+ failedToCopyCodexThreadId: 'Falló al copiar ID del hilo de Codex',
353
+ metadataCopied: 'Metadatos copiados al portapapeles',
354
+ failedToCopyMetadata: 'Falló al copiar metadatos',
355
+ failedToKillSession: 'Falló al terminar sesión',
356
+ failedToArchiveSession: 'Falló al archivar sesión',
357
+ connectionStatus: 'Estado de conexión',
358
+ created: 'Creado',
359
+ lastUpdated: 'Última actualización',
360
+ sequence: 'Secuencia',
361
+ quickActions: 'Acciones rápidas',
362
+ viewMachine: 'Ver máquina',
363
+ viewMachineSubtitle: 'Ver detalles de máquina y sesiones',
364
+ resumeSession: 'Resume Session',
365
+ resumeSessionSubtitle: 'Resume this session on the same machine',
366
+ resumeSessionSameMachineOnly: 'This session can only be resumed on the same machine it started on.',
367
+ resumeSessionMachineOffline: 'This machine is offline. Resume is only available while it is online.',
368
+ resumeSessionNeedsNasTechAgent: 'Resume is unavailable on this machine. Run `nastech-agent auth login` to enable it.',
369
+ resumeSessionMissingMachine: 'This session is missing its machine metadata, so it cannot be resumed.',
370
+ resumeSessionMissingBackendId: 'This session does not have a resumable Claude or Codex identifier.',
371
+ resumeSessionUnexpectedDirectoryPrompt: 'Resume cannot create directories. Start the session manually from its original path.',
372
+ killSessionSubtitle: 'Terminar inmediatamente la sesión',
373
+ archiveSessionSubtitle: 'Archivar esta sesión y detenerla',
374
+ metadata: 'Metadatos',
375
+ host: 'Host',
376
+ path: 'Ruta',
377
+ operatingSystem: 'Sistema operativo',
378
+ processId: 'ID del proceso',
379
+ nastechHome: 'Directorio de NasTech',
380
+ copyMetadata: 'Copiar metadatos',
381
+ agentState: 'Estado del agente',
382
+ controlledByUser: 'Controlado por el usuario',
383
+ pendingRequests: 'Solicitudes pendientes',
384
+ activity: 'Actividad',
385
+ thinking: 'Pensando',
386
+ thinkingSince: 'Pensando desde',
387
+ cliVersion: 'Versión del CLI',
388
+ cliVersionOutdated: 'Actualización de CLI requerida',
389
+ cliVersionOutdatedMessage: ({ currentVersion, requiredVersion }: { currentVersion: string; requiredVersion: string }) =>
390
+ `Versión ${currentVersion} instalada. Actualice a ${requiredVersion} o posterior`,
391
+ updateCliInstructions: 'Por favor ejecute pip install -U nastech-agent',
392
+ deleteSession: 'Eliminar sesión',
393
+ deleteSessionSubtitle: 'Eliminar permanentemente esta sesión',
394
+ deleteSessionConfirm: '¿Eliminar sesión permanentemente?',
395
+ deleteSessionWarning: 'Esta acción no se puede deshacer. Todos los mensajes y datos asociados con esta sesión se eliminarán permanentemente.',
396
+ failedToDeleteSession: 'Error al eliminar la sesión',
397
+ sessionDeleted: 'Sesión eliminada exitosamente',
398
+ worktreeCleanupTitle: '¿Eliminar Worktree?',
399
+ worktreeCleanupMessage: 'El Worktree no tiene cambios sin confirmar. ¿Deseas eliminar los archivos del Worktree?',
400
+ worktreeCleanupDelete: 'Eliminar Worktree',
401
+ worktreeCleanupKeep: 'Conservar archivos',
402
+
403
+ },
404
+
405
+ components: {
406
+ emptyMainScreen: {
407
+ // Used by EmptyMainScreen component
408
+ readyToCode: '¿Listo para programar?',
409
+ installCli: 'Install NasTech CLI',
410
+ runIt: 'Ejecútelo',
411
+ scanQrCode: 'Escanee el código QR',
412
+ openCamera: 'Abrir cámara',
413
+ },
414
+ },
415
+
416
+ agentInput: {
417
+ permissionMode: {
418
+ title: 'MODO DE PERMISOS',
419
+ default: 'Por defecto',
420
+ acceptEdits: 'Aceptar ediciones',
421
+ plan: 'Modo de planificación',
422
+ dontAsk: 'No preguntar',
423
+ bypassPermissions: 'Modo Yolo',
424
+ badgeAcceptAllEdits: 'Aceptar todas las ediciones',
425
+ badgeBypassAllPermissions: 'Omitir todos los permisos',
426
+ badgePlanMode: 'Modo de planificación',
427
+ },
428
+ agent: {
429
+ claude: 'Claude',
430
+ codex: 'Codex',
431
+ gemini: 'Gemini',
432
+ openclaw: 'OpenClaw',
433
+ },
434
+ model: {
435
+ title: 'MODELO',
436
+ configureInCli: 'Configurar modelos en la configuración del CLI',
437
+ },
438
+ effort: {
439
+ title: 'ESFUERZO',
440
+ },
441
+ codexPermissionMode: {
442
+ title: 'MODO DE PERMISOS CODEX',
443
+ default: 'Configuración del CLI',
444
+ readOnly: 'Read Only Mode',
445
+ safeYolo: 'Safe YOLO',
446
+ yolo: 'YOLO',
447
+ badgeReadOnly: 'Read Only Mode',
448
+ badgeSafeYolo: 'Safe YOLO',
449
+ badgeYolo: 'YOLO',
450
+ },
451
+ codexModel: {
452
+ title: 'CODEX MODEL',
453
+ gpt5CodexLow: 'gpt-5-codex low',
454
+ gpt5CodexMedium: 'gpt-5-codex medium',
455
+ gpt5CodexHigh: 'gpt-5-codex high',
456
+ gpt5Minimal: 'GPT-5 Minimal',
457
+ gpt5Low: 'GPT-5 Low',
458
+ gpt5Medium: 'GPT-5 Medium',
459
+ gpt5High: 'GPT-5 High',
460
+ },
461
+ geminiPermissionMode: {
462
+ title: 'MODO DE PERMISOS GEMINI',
463
+ default: 'Por defecto',
464
+ autoEdit: 'Edición automática',
465
+ yolo: 'YOLO',
466
+ plan: 'Planificación',
467
+ badgeAutoEdit: 'Edición automática',
468
+ badgeYolo: 'YOLO',
469
+ badgePlan: 'Planificación',
470
+ },
471
+ context: {
472
+ remaining: ({ percent }: { percent: number }) => `${percent}% restante`,
473
+ },
474
+ suggestion: {
475
+ fileLabel: 'ARCHIVO',
476
+ folderLabel: 'CARPETA',
477
+ },
478
+ noMachinesAvailable: 'Sin máquinas',
479
+ },
480
+
481
+ machineLauncher: {
482
+ showLess: 'Mostrar menos',
483
+ showAll: ({ count }: { count: number }) => `Mostrar todos (${count} rutas)`,
484
+ enterCustomPath: 'Ingresar ruta personalizada',
485
+ offlineUnableToSpawn: 'No se puede crear nueva sesión, desconectado',
486
+ },
487
+
488
+ sidebar: {
489
+ sessionsTitle: 'NasTech',
490
+ showArchived: 'Mostrar archivadas',
491
+ hideArchived: 'Ocultar archivadas',
492
+ newSession: 'Nueva sesión',
493
+ },
494
+
495
+ zen: {
496
+ toggle: 'Modo zen',
497
+ },
498
+
499
+ toolView: {
500
+ input: 'Entrada',
501
+ output: 'Salida',
502
+ },
503
+
504
+ toolGroup: {
505
+ editedFiles: ({ count }: { count: number }) => count === 1 ? 'Se editó 1 archivo' : `Se editaron ${count} archivos`,
506
+ readFiles: ({ count }: { count: number }) => count === 1 ? 'Se leyó 1 archivo' : `Se leyeron ${count} archivos`,
507
+ ranCommands: ({ count }: { count: number }) => count === 1 ? 'Se ejecutó 1 comando' : `Se ejecutaron ${count} comandos`,
508
+ searched: ({ count }: { count: number }) => count === 1 ? 'Se buscó 1 vez' : `Se buscó ${count} veces`,
509
+ fetchedUrls: ({ count }: { count: number }) => count === 1 ? 'Se obtuvo 1 URL' : `Se obtuvieron ${count} URLs`,
510
+ ranTasks: ({ count }: { count: number }) => count === 1 ? 'Se ejecutó 1 tarea' : `Se ejecutaron ${count} tareas`,
511
+ usedTools: ({ count }: { count: number }) => count === 1 ? 'Se usó 1 herramienta' : `Se usaron ${count} herramientas`,
512
+ },
513
+
514
+ tools: {
515
+ fullView: {
516
+ description: 'Descripción',
517
+ inputParams: 'Parámetros de entrada',
518
+ output: 'Salida',
519
+ error: 'Error',
520
+ completed: 'Herramienta completada exitosamente',
521
+ noOutput: 'No se produjo salida',
522
+ running: 'La herramienta está ejecutándose...',
523
+ rawJsonDevMode: 'JSON crudo (modo desarrollador)',
524
+ },
525
+ taskView: {
526
+ initializing: 'Inicializando agente...',
527
+ moreTools: ({ count }: { count: number }) => `+${count} más ${plural({ count, singular: 'herramienta', plural: 'herramientas' })}`,
528
+ },
529
+ multiEdit: {
530
+ editNumber: ({ index, total }: { index: number; total: number }) => `Edición ${index} de ${total}`,
531
+ replaceAll: 'Reemplazar todo',
532
+ },
533
+ names: {
534
+ task: 'Tarea',
535
+ terminal: 'Terminal',
536
+ searchFiles: 'Buscar archivos',
537
+ search: 'Buscar',
538
+ searchContent: 'Buscar contenido',
539
+ listFiles: 'Listar archivos',
540
+ planProposal: 'Propuesta de plan',
541
+ readFile: 'Leer archivo',
542
+ editFile: 'Editar archivo',
543
+ writeFile: 'Escribir archivo',
544
+ fetchUrl: 'Obtener URL',
545
+ readNotebook: 'Leer cuaderno',
546
+ editNotebook: 'Editar cuaderno',
547
+ todoList: 'Lista de tareas',
548
+ webSearch: 'Búsqueda web',
549
+ reasoning: 'Razonamiento',
550
+ applyChanges: 'Actualizar archivo',
551
+ viewDiff: 'Cambios del archivo actual',
552
+ question: 'Pregunta',
553
+ },
554
+ desc: {
555
+ terminalCmd: ({ cmd }: { cmd: string }) => `Terminal(cmd: ${cmd})`,
556
+ searchPattern: ({ pattern }: { pattern: string }) => `Buscar(patrón: ${pattern})`,
557
+ searchPath: ({ basename }: { basename: string }) => `Buscar(ruta: ${basename})`,
558
+ fetchUrlHost: ({ host }: { host: string }) => `Obtener URL(url: ${host})`,
559
+ editNotebookMode: ({ path, mode }: { path: string; mode: string }) => `Editar cuaderno(archivo: ${path}, modo: ${mode})`,
560
+ todoListCount: ({ count }: { count: number }) => `Lista de tareas(cantidad: ${count})`,
561
+ webSearchQuery: ({ query }: { query: string }) => `Búsqueda web(consulta: ${query})`,
562
+ grepPattern: ({ pattern }: { pattern: string }) => `grep(patrón: ${pattern})`,
563
+ multiEditEdits: ({ path, count }: { path: string; count: number }) => `${path} (${count} ediciones)`,
564
+ readingFile: ({ file }: { file: string }) => `Leyendo ${file}`,
565
+ writingFile: ({ file }: { file: string }) => `Escribiendo ${file}`,
566
+ modifyingFile: ({ file }: { file: string }) => `Modificando ${file}`,
567
+ modifyingFiles: ({ count }: { count: number }) => `Modificando ${count} archivos`,
568
+ modifyingMultipleFiles: ({ file, count }: { file: string; count: number }) => `${file} y ${count} más`,
569
+ showingDiff: 'Mostrando cambios',
570
+ },
571
+ askUserQuestion: {
572
+ submit: 'Enviar respuesta',
573
+ multipleQuestions: ({ count }: { count: number }) => `${count} ${plural({ count, singular: 'pregunta', plural: 'preguntas' })}`,
574
+ other: 'Otro',
575
+ otherDescription: 'Escribe tu propia respuesta',
576
+ otherPlaceholder: 'Escribe tu respuesta...',
577
+ }
578
+ },
579
+
580
+ files: {
581
+ changes: 'Cambios',
582
+ searchPlaceholder: 'Buscar archivos...',
583
+ detachedHead: 'HEAD separado',
584
+ summary: ({ staged, unstaged }: { staged: number; unstaged: number }) => `${staged} preparados • ${unstaged} sin preparar`,
585
+ notRepo: 'No es un repositorio git',
586
+ notUnderGit: 'Este directorio no está bajo control de versiones git',
587
+ searching: 'Buscando archivos...',
588
+ noFilesFound: 'No se encontraron archivos',
589
+ noFilesInProject: 'No hay archivos en el proyecto',
590
+ tryDifferentTerm: 'Intente un término de búsqueda diferente',
591
+ searchResults: ({ count }: { count: number }) => `Resultados de búsqueda (${count})`,
592
+ projectRoot: 'Raíz del proyecto',
593
+ stagedChanges: ({ count }: { count: number }) => `Cambios preparados (${count})`,
594
+ unstagedChanges: ({ count }: { count: number }) => `Cambios sin preparar (${count})`,
595
+ // File viewer strings
596
+ loadingFile: ({ fileName }: { fileName: string }) => `Cargando ${fileName}...`,
597
+ binaryFile: 'Archivo binario',
598
+ cannotDisplayBinary: 'No se puede mostrar el contenido del archivo binario',
599
+ diff: 'Diferencias',
600
+ file: 'Archivo',
601
+ fileEmpty: 'El archivo está vacío',
602
+ noChanges: 'No hay cambios que mostrar',
603
+ noChangesTitle: 'Sin cambios',
604
+ noChangesSubtitle: 'El árbol de trabajo está limpio',
605
+ deleted: 'Eliminado',
606
+ changedFiles: ({ count }: { count: number }) => `${count} ${count === 1 ? 'archivo modificado' : 'archivos modificados'}`,
607
+ allFiles: 'Todos los archivos',
608
+ editFile: 'Editar',
609
+ saveFile: 'Guardar',
610
+ failedToRead: 'Error al leer el archivo',
611
+ failedToSave: 'Error al guardar el archivo',
612
+ fileConflict: 'Conflicto de archivo',
613
+ fileConflictDescription: 'Este archivo fue modificado en el dispositivo mientras lo editabas. Recarga para ver la última versión.',
614
+ reload: 'Recargar',
615
+ overwrite: 'Sobrescribir',
616
+ },
617
+
618
+ settingsVoice: {
619
+ // Voice settings screen
620
+ languageTitle: 'Idioma',
621
+ languageDescription: 'Elige tu idioma preferido para las interacciones con el asistente de voz. Esta configuración se sincroniza en todos tus dispositivos.',
622
+ preferredLanguage: 'Idioma preferido',
623
+ preferredLanguageSubtitle: 'Idioma usado para respuestas del asistente de voz',
624
+ language: {
625
+ searchPlaceholder: 'Buscar idiomas...',
626
+ title: 'Idiomas',
627
+ footer: ({ count }: { count: number }) => `${count} ${plural({ count, singular: 'idioma', plural: 'idiomas' })} disponibles`,
628
+ autoDetect: 'Detectar automáticamente',
629
+ },
630
+ // Bring your own agent
631
+ byoTitle: 'Trae tu propio agente',
632
+ byoDescription: 'Usa tu propio agente de ElevenLabs en lugar del predeterminado de NasTech. No se requiere suscripción — conéctate directamente con tu propia cuenta de ElevenLabs. Tu agente debe definir dos herramientas de cliente: messageClaudeCode (envía texto al agente de código) y processPermissionRequest (permite o deniega el uso de herramientas). Recibe el contexto de la sesión a través de la variable dinámica {{initialConversationContext}}.',
633
+ customAgentId: 'ElevenLabs Agent ID',
634
+ customAgentIdNotSet: 'No configurado',
635
+ customAgentIdDescription: 'Ingresa tu ElevenLabs Agent ID. Déjalo vacío para usar el predeterminado de NasTech.',
636
+ customAgentIdPlaceholder: 'e.g. abc123def456',
637
+ bypassToken: 'Conexión directa',
638
+ bypassTokenSubtitle: 'Omite el servidor de NasTech, conéctate directamente a ElevenLabs',
639
+ promptGuideTitle: 'Guía de prompt del agente',
640
+ promptGuideDescription: 'Tu agente de ElevenLabs necesita:\n\n• Herramienta: messageClaudeCode — parámetro: message (string). Envía un mensaje a la sesión de código activa.\n• Herramienta: processPermissionRequest — parámetro: decision ("allow" o "deny"). Aprueba o deniega un permiso de herramienta pendiente.\n• Variable dinámica: {{initialConversationContext}} — recibe el historial y contexto de la sesión al iniciar.\n\nEl agente actúa como puente de voz entre el usuario y los agentes de código. Debe ser conciso, responder solo cuando se le habla e informar cuando un agente de código termina su trabajo.',
641
+ usageTitle: 'Uso (últimos 30 días)',
642
+ usageFooter: 'Tiempo de voz utilizado en los últimos 30 días. Plan gratuito: 20 min. Suscrito: 5 horas. Máx. 100 conversaciones al mes.',
643
+ usageLabel: 'Tiempo de voz',
644
+ conversationsLabel: 'Conversaciones',
645
+ usageUsed: ({ used, limit }: { used: string; limit: string }) => `${used} usado de ${limit}`,
646
+ supportTitle: 'Mejorar voz',
647
+ supportSubtitle: 'Más tiempo de voz y apoya el desarrollo',
648
+ },
649
+
650
+ settingsAccount: {
651
+ // Account settings screen
652
+ accountInformation: 'Información de la cuenta',
653
+ status: 'Estado',
654
+ statusActive: 'Activo',
655
+ statusNotAuthenticated: 'No autenticado',
656
+ anonymousId: 'ID anónimo',
657
+ publicId: 'ID público',
658
+ notAvailable: 'No disponible',
659
+ linkNewDevice: 'Vincular nuevo dispositivo',
660
+ linkNewDeviceSubtitle: 'Escanear código QR para vincular dispositivo',
661
+ profile: 'Perfil',
662
+ name: 'Nombre',
663
+ github: 'GitHub',
664
+ tapToDisconnect: 'Toque para desconectar',
665
+ server: 'Servidor',
666
+ backup: 'Copia de seguridad',
667
+ backupDescription: 'Tu clave secreta es la única forma de recuperar tu cuenta. Guárdala en un lugar seguro como un administrador de contraseñas.',
668
+ secretKey: 'Clave secreta',
669
+ tapToReveal: 'Toca para revelar',
670
+ tapToHide: 'Toca para ocultar',
671
+ secretKeyLabel: 'CLAVE SECRETA (TOCA PARA COPIAR)',
672
+ secretKeyCopied: 'Clave secreta copiada al portapapeles. ¡Guárdala en un lugar seguro!',
673
+ secretKeyCopyFailed: 'Falló al copiar la clave secreta',
674
+ privacy: 'Privacidad',
675
+ privacyDescription: 'Ayude a mejorar la aplicación compartiendo datos de uso anónimos. No se recopila información personal.',
676
+ analytics: 'Analíticas',
677
+ analyticsDisabled: 'No se comparten datos',
678
+ analyticsEnabled: 'Se comparten datos de uso anónimos',
679
+ dangerZone: 'Zona peligrosa',
680
+ logout: 'Cerrar sesión',
681
+ logoutSubtitle: 'Cerrar sesión y limpiar datos locales',
682
+ logoutConfirm: '¿Seguro que quieres cerrar sesión? ¡Asegúrate de haber guardado tu clave secreta!',
683
+ },
684
+
685
+ settingsLanguage: {
686
+ // Language settings screen
687
+ title: 'Idioma',
688
+ description: 'Elige tu idioma preferido para la interfaz de la aplicación. Esto se sincronizará en todos tus dispositivos.',
689
+ currentLanguage: 'Idioma actual',
690
+ automatic: 'Automático',
691
+ automaticSubtitle: 'Detectar desde configuración del dispositivo',
692
+ needsRestart: 'Idioma cambiado',
693
+ needsRestartMessage: 'La aplicación necesita reiniciarse para aplicar la nueva configuración de idioma.',
694
+ restartNow: 'Reiniciar ahora',
695
+ },
696
+
697
+ connectButton: {
698
+ authenticate: 'Autenticar terminal',
699
+ authenticateWithUrlPaste: 'Autenticar terminal con pegado de URL',
700
+ pasteAuthUrl: 'Pega la URL de autenticación de tu terminal',
701
+ },
702
+
703
+ updateBanner: {
704
+ updateAvailable: 'Actualización disponible',
705
+ pressToApply: 'Presione para aplicar la actualización',
706
+ whatsNew: 'Novedades',
707
+ seeLatest: 'Ver las últimas actualizaciones y mejoras',
708
+ nativeUpdateAvailable: 'Actualización de la aplicación disponible',
709
+ tapToUpdateAppStore: 'Toque para actualizar en App Store',
710
+ tapToUpdatePlayStore: 'Toque para actualizar en Play Store',
711
+ },
712
+
713
+ changelog: {
714
+ // Used by the changelog screen
715
+ version: ({ version }: { version: number }) => `Versión ${version}`,
716
+ noEntriesAvailable: 'No hay entradas de registro de cambios disponibles.',
717
+ },
718
+
719
+ terminal: {
720
+ // Used by terminal connection screens
721
+ webBrowserRequired: 'Se requiere navegador web',
722
+ webBrowserRequiredDescription: 'Los enlaces de conexión de terminal solo pueden abrirse en un navegador web por razones de seguridad. Usa el escáner de código QR o abre este enlace en una computadora.',
723
+ processingConnection: 'Procesando conexión...',
724
+ invalidConnectionLink: 'Enlace de conexión inválido',
725
+ invalidConnectionLinkDescription: 'El enlace de conexión falta o es inválido. Verifica la URL e intenta nuevamente.',
726
+ connectTerminal: 'Conectar terminal',
727
+ terminalRequestDescription: 'Un terminal está solicitando conectarse a tu cuenta de NasTech. Esto permitirá al terminal enviar y recibir mensajes de forma segura.',
728
+ connectionDetails: 'Detalles de conexión',
729
+ publicKey: 'Clave pública',
730
+ encryption: 'Cifrado',
731
+ endToEndEncrypted: 'Cifrado de extremo a extremo',
732
+ acceptConnection: 'Aceptar conexión',
733
+ connecting: 'Conectando...',
734
+ reject: 'Rechazar',
735
+ security: 'Seguridad',
736
+ securityFooter: 'Este enlace de conexión fue procesado de forma segura en tu navegador y nunca fue enviado a ningún servidor. Tus datos privados permanecerán seguros y solo tú puedes descifrar los mensajes.',
737
+ securityFooterDevice: 'Esta conexión fue procesada de forma segura en tu dispositivo y nunca fue enviada a ningún servidor. Tus datos privados permanecerán seguros y solo tú puedes descifrar los mensajes.',
738
+ clientSideProcessing: 'Procesamiento del lado del cliente',
739
+ linkProcessedLocally: 'Enlace procesado localmente en el navegador',
740
+ linkProcessedOnDevice: 'Enlace procesado localmente en el dispositivo',
741
+ },
742
+
743
+ modals: {
744
+ // Used across connect flows and settings
745
+ authenticateTerminal: 'Autenticar terminal',
746
+ pasteUrlFromTerminal: 'Pega la URL de autenticación de tu terminal',
747
+ deviceLinkedSuccessfully: 'Dispositivo vinculado exitosamente',
748
+ terminalConnectedSuccessfully: 'Terminal conectado exitosamente',
749
+ invalidAuthUrl: 'URL de autenticación inválida',
750
+ developerMode: 'Modo desarrollador',
751
+ developerModeEnabled: 'Modo desarrollador habilitado',
752
+ developerModeDisabled: 'Modo desarrollador deshabilitado',
753
+ disconnectGithub: 'Desconectar GitHub',
754
+ disconnectGithubConfirm: '¿Seguro que quieres desconectar tu cuenta de GitHub?',
755
+ disconnectService: ({ service }: { service: string }) =>
756
+ `Desconectar ${service}`,
757
+ disconnectServiceConfirm: ({ service }: { service: string }) =>
758
+ `¿Seguro que quieres desconectar ${service} de tu cuenta?`,
759
+ disconnect: 'Desconectar',
760
+ failedToConnectTerminal: 'Falló al conectar terminal',
761
+ cameraPermissionsRequiredToConnectTerminal: 'Se requieren permisos de cámara para conectar terminal',
762
+ failedToLinkDevice: 'Falló al vincular dispositivo',
763
+ cameraPermissionsRequiredToScanQr: 'Se requieren permisos de cámara para escanear códigos QR'
764
+ },
765
+
766
+ navigation: {
767
+ // Navigation titles and screen headers
768
+ connectTerminal: 'Conectar terminal',
769
+ linkNewDevice: 'Vincular nuevo dispositivo',
770
+ restoreWithSecretKey: 'Restaurar con clave secreta',
771
+ whatsNew: 'Novedades',
772
+ friends: 'Amigos',
773
+ },
774
+
775
+ welcome: {
776
+ // Main welcome screen for unauthenticated users
777
+ title: 'Cliente móvil de Codex y Claude Code',
778
+ subtitle: 'Cifrado de extremo a extremo y tu cuenta se guarda solo en tu dispositivo.',
779
+ createAccount: 'Crear cuenta',
780
+ linkOrRestoreAccount: 'Vincular o restaurar cuenta',
781
+ loginWithMobileApp: 'Iniciar sesión con aplicación móvil',
782
+ },
783
+
784
+ review: {
785
+ // Used by utils/requestReview.ts
786
+ enjoyingApp: '¿Disfrutando la aplicación?',
787
+ feedbackPrompt: '¡Nos encantaría escuchar tus comentarios!',
788
+ yesILoveIt: '¡Sí, me encanta!',
789
+ notReally: 'No realmente'
790
+ },
791
+
792
+ items: {
793
+ // Used by Item component for copy toast
794
+ copiedToClipboard: ({ label }: { label: string }) => `${label} copiado al portapapeles`
795
+ },
796
+
797
+ machine: {
798
+ offlineUnableToSpawn: 'El lanzador está deshabilitado mientras la máquina está desconectada',
799
+ offlineHelp: '• Asegúrate de que tu computadora esté en línea\n• Ejecuta `nastech daemon status` para diagnosticar\n• ¿Estás usando la última versión del CLI? Actualiza con `pip install -U nastech-agent`',
800
+ launchNewSessionInDirectory: 'Iniciar nueva sesión en directorio',
801
+ daemon: 'Daemon',
802
+ status: 'Estado',
803
+ stopDaemon: 'Detener daemon',
804
+ lastKnownPid: 'Último PID conocido',
805
+ lastKnownHttpPort: 'Último puerto HTTP conocido',
806
+ startedAt: 'Iniciado en',
807
+ cliVersion: 'Versión del CLI',
808
+ daemonStateVersion: 'Versión del estado del daemon',
809
+ activeSessions: ({ count }: { count: number }) => `Sesiones activas (${count})`,
810
+ machineGroup: 'Máquina',
811
+ host: 'Host',
812
+ machineId: 'ID de máquina',
813
+ username: 'Nombre de usuario',
814
+ homeDirectory: 'Directorio principal',
815
+ platform: 'Plataforma',
816
+ architecture: 'Arquitectura',
817
+ lastSeen: 'Visto por última vez',
818
+ never: 'Nunca',
819
+ metadataVersion: 'Versión de metadatos',
820
+ cliAvailability: 'Disponibilidad de CLI',
821
+ cliInstalled: 'Instalado',
822
+ cliNotFound: 'No encontrado',
823
+ lastDetected: 'Última detección',
824
+ untitledSession: 'Sesión sin título',
825
+ back: 'Atrás',
826
+ dangerZone: 'Zona de peligro',
827
+ delete: 'Eliminar máquina',
828
+ deleteFooter: 'Elimina esta máquina de tu cuenta. El historial de sesiones se conservará, pero no podrás iniciar nuevas sesiones en esta máquina.',
829
+ deleteConfirmTitle: '¿Eliminar esta máquina?',
830
+ deleteConfirmMessage: 'La máquina se eliminará de tu cuenta. El historial de sesiones se conservará, pero no podrás iniciar nuevas sesiones hasta que vuelvas a conectar el daemon.',
831
+ deleteFailed: 'No se pudo eliminar la máquina.',
832
+ },
833
+
834
+ message: {
835
+ switchedToMode: ({ mode }: { mode: string }) => `Cambiado al modo ${mode}`,
836
+ unknownEvent: 'Evento desconocido',
837
+ usageLimitUntil: ({ time }: { time: string }) => `Límite de uso alcanzado hasta ${time}`,
838
+ unknownTime: 'tiempo desconocido',
839
+ },
840
+
841
+ codex: {
842
+ // Codex permission dialog buttons
843
+ permissions: {
844
+ yesForSession: 'Sí, y no preguntar por esta sesión',
845
+ stopAndExplain: 'Detener, y explicar qué hacer',
846
+ }
847
+ },
848
+
849
+ claude: {
850
+ // Claude permission dialog buttons
851
+ permissions: {
852
+ yesAllowAllEdits: 'Sí, permitir todas las ediciones durante esta sesión',
853
+ yesAllowEverything: 'Sí, permitir todo durante esta sesión',
854
+ yesForTool: 'Sí, no volver a preguntar para esta herramienta',
855
+ noTellClaude: 'No, proporcionar comentarios',
856
+ }
857
+ },
858
+
859
+ textSelection: {
860
+ // Text selection screen
861
+ selectText: 'Seleccionar rango de texto',
862
+ title: 'Seleccionar texto',
863
+ noTextProvided: 'No se proporcionó texto',
864
+ textNotFound: 'Texto no encontrado o expirado',
865
+ textCopied: 'Texto copiado al portapapeles',
866
+ failedToCopy: 'Error al copiar el texto al portapapeles',
867
+ noTextToCopy: 'No hay texto disponible para copiar',
868
+ },
869
+
870
+ markdown: {
871
+ // Markdown copy functionality
872
+ codeCopied: 'Código copiado',
873
+ copyFailed: 'Error al copiar',
874
+ mermaidRenderFailed: 'Error al renderizar el diagrama mermaid',
875
+ },
876
+
877
+ artifacts: {
878
+ // Artifacts feature
879
+ title: 'Artefactos',
880
+ countSingular: '1 artefacto',
881
+ countPlural: ({ count }: { count: number }) => `${count} artefactos`,
882
+ empty: 'No hay artefactos aún',
883
+ emptyDescription: 'Crea tu primer artefacto para comenzar',
884
+ new: 'Nuevo artefacto',
885
+ edit: 'Editar artefacto',
886
+ delete: 'Eliminar',
887
+ updateError: 'No se pudo actualizar el artefacto. Por favor, intenta de nuevo.',
888
+ notFound: 'Artefacto no encontrado',
889
+ discardChanges: '¿Descartar cambios?',
890
+ discardChangesDescription: 'Tienes cambios sin guardar. ¿Estás seguro de que quieres descartarlos?',
891
+ deleteConfirm: '¿Eliminar artefacto?',
892
+ deleteConfirmDescription: 'Esta acción no se puede deshacer',
893
+ titleLabel: 'TÍTULO',
894
+ titlePlaceholder: 'Ingresa un título para tu artefacto',
895
+ bodyLabel: 'CONTENIDO',
896
+ bodyPlaceholder: 'Escribe tu contenido aquí...',
897
+ emptyFieldsError: 'Por favor, ingresa un título o contenido',
898
+ createError: 'No se pudo crear el artefacto. Por favor, intenta de nuevo.',
899
+ save: 'Guardar',
900
+ saving: 'Guardando...',
901
+ loading: 'Cargando artefactos...',
902
+ error: 'Error al cargar el artefacto',
903
+ },
904
+
905
+ friends: {
906
+ // Friends feature
907
+ title: 'Amigos',
908
+ manageFriends: 'Administra tus amigos y conexiones',
909
+ searchTitle: 'Buscar amigos',
910
+ pendingRequests: 'Solicitudes de amistad',
911
+ myFriends: 'Mis amigos',
912
+ noFriendsYet: 'Aún no tienes amigos',
913
+ findFriends: 'Buscar amigos',
914
+ remove: 'Eliminar',
915
+ pendingRequest: 'Pendiente',
916
+ sentOn: ({ date }: { date: string }) => `Enviado el ${date}`,
917
+ accept: 'Aceptar',
918
+ reject: 'Rechazar',
919
+ addFriend: 'Agregar amigo',
920
+ alreadyFriends: 'Ya son amigos',
921
+ requestPending: 'Solicitud pendiente',
922
+ searchInstructions: 'Ingresa un nombre de usuario para buscar amigos',
923
+ searchPlaceholder: 'Ingresa nombre de usuario...',
924
+ searching: 'Buscando...',
925
+ userNotFound: 'Usuario no encontrado',
926
+ noUserFound: 'No se encontró ningún usuario con ese nombre',
927
+ checkUsername: 'Por favor, verifica el nombre de usuario e intenta de nuevo',
928
+ howToFind: 'Cómo encontrar amigos',
929
+ findInstructions: 'Busca amigos por su nombre de usuario. Tanto tú como tu amigo deben tener GitHub conectado para enviar solicitudes de amistad.',
930
+ requestSent: '¡Solicitud de amistad enviada!',
931
+ requestAccepted: '¡Solicitud de amistad aceptada!',
932
+ requestRejected: 'Solicitud de amistad rechazada',
933
+ friendRemoved: 'Amigo eliminado',
934
+ confirmRemove: 'Eliminar amigo',
935
+ confirmRemoveMessage: '¿Estás seguro de que quieres eliminar a este amigo?',
936
+ cannotAddYourself: 'No puedes enviarte una solicitud de amistad a ti mismo',
937
+ bothMustHaveGithub: 'Ambos usuarios deben tener GitHub conectado para ser amigos',
938
+ status: {
939
+ none: 'No conectado',
940
+ requested: 'Solicitud enviada',
941
+ pending: 'Solicitud pendiente',
942
+ friend: 'Amigos',
943
+ rejected: 'Rechazada',
944
+ },
945
+ acceptRequest: 'Aceptar solicitud',
946
+ removeFriend: 'Eliminar de amigos',
947
+ removeFriendConfirm: ({ name }: { name: string }) => `¿Estás seguro de que quieres eliminar a ${name} de tus amigos?`,
948
+ requestSentDescription: ({ name }: { name: string }) => `Tu solicitud de amistad ha sido enviada a ${name}`,
949
+ requestFriendship: 'Solicitar amistad',
950
+ cancelRequest: 'Cancelar solicitud de amistad',
951
+ cancelRequestConfirm: ({ name }: { name: string }) => `¿Cancelar tu solicitud de amistad a ${name}?`,
952
+ denyRequest: 'Rechazar solicitud',
953
+ nowFriendsWith: ({ name }: { name: string }) => `Ahora eres amigo de ${name}`,
954
+ },
955
+
956
+ usage: {
957
+ // Usage panel strings
958
+ today: 'Hoy',
959
+ last7Days: 'Últimos 7 días',
960
+ last30Days: 'Últimos 30 días',
961
+ totalTokens: 'Tokens totales',
962
+ totalCost: 'Costo total',
963
+ tokens: 'Tokens',
964
+ cost: 'Costo',
965
+ usageOverTime: 'Uso a lo largo del tiempo',
966
+ byModel: 'Por modelo',
967
+ noData: 'No hay datos de uso disponibles',
968
+ },
969
+
970
+ imageUpload: {
971
+ permissionTitle: 'Acceso a la biblioteca de fotos',
972
+ permissionMessage: 'Permite el acceso a tu biblioteca de fotos para adjuntar imágenes a los mensajes.',
973
+ limitTitle: 'Límite de imágenes alcanzado',
974
+ limitMessage: ({ max }: { max: number }) => `Puedes adjuntar hasta ${max} imágenes por mensaje.`,
975
+ fileTooLargeTitle: 'Archivo demasiado grande',
976
+ fileTooLargeMessage: ({ name, maxMb }: { name: string; maxMb: number }) => `"${name}" supera el límite de ${maxMb}MB y no se añadió.`,
977
+ uploadFailedTitle: 'Error al subir',
978
+ uploadFailedMessage: ({ count }: { count: number }) => count === 1
979
+ ? 'No se pudo subir una imagen y no se envió.'
980
+ : `No se pudieron subir ${count} imágenes y no se enviaron.`,
981
+ notSupportedTitle: 'Imágenes no compatibles',
982
+ notSupportedMessage: 'Este agente no admite imágenes adjuntas. Solo se envió el texto.',
983
+ },
984
+
985
+ feed: {
986
+ // Feed notifications for friend requests and acceptances
987
+ friendRequestFrom: ({ name }: { name: string }) => `${name} te envió una solicitud de amistad`,
988
+ friendRequestGeneric: 'Nueva solicitud de amistad',
989
+ friendAccepted: ({ name }: { name: string }) => `Ahora eres amigo de ${name}`,
990
+ friendAcceptedGeneric: 'Solicitud de amistad aceptada',
991
+ },
992
+
993
+ } as const;
994
+
995
+ export type TranslationsEs = typeof es;