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,992 @@
1
+ import type { TranslationStructure } from '../_default';
2
+
3
+ /**
4
+ * Portuguese plural helper function
5
+ * Portuguese (Brazilian) has 2 plural forms: singular, plural
6
+ * @param options - Object containing count, singular, and plural forms
7
+ * @returns The appropriate form based on Portuguese 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
+ * Portuguese (Brazilian) translations for the NasTech app
15
+ * Must match the exact structure of the English translations
16
+ */
17
+ export const pt: TranslationStructure = {
18
+ tabs: {
19
+ // Tab navigation labels
20
+ inbox: 'Caixa de entrada',
21
+ sessions: 'Terminais',
22
+ settings: 'Configurações',
23
+ },
24
+
25
+ inbox: {
26
+ // Inbox screen
27
+ emptyTitle: 'Caixa de entrada vazia',
28
+ emptyDescription: 'Conecte-se com amigos para começar a compartilhar sessões',
29
+ updates: 'Atualizações',
30
+ },
31
+
32
+ common: {
33
+ // Simple string constants
34
+ cancel: 'Cancelar',
35
+ authenticate: 'Autenticar',
36
+ save: 'Salvar',
37
+ saveAs: 'Salvar como',
38
+ error: 'Erro',
39
+ success: 'Sucesso',
40
+ ok: 'OK',
41
+ continue: 'Continuar',
42
+ back: 'Voltar',
43
+ create: 'Criar',
44
+ rename: 'Renomear',
45
+ reset: 'Redefinir',
46
+ logout: 'Sair',
47
+ yes: 'Sim',
48
+ no: 'Não',
49
+ discard: 'Descartar',
50
+ version: 'Versão',
51
+ copied: 'Copiado',
52
+ copy: 'Copiar',
53
+ scanning: 'Escaneando...',
54
+ urlPlaceholder: 'https://exemplo.com',
55
+ home: 'Início',
56
+ message: 'Mensagem',
57
+ files: 'Arquivos',
58
+ fileViewer: 'Visualizador de arquivos',
59
+ loading: 'Carregando...',
60
+ retry: 'Tentar novamente',
61
+ delete: 'Excluir',
62
+ optional: 'Opcional',
63
+ },
64
+
65
+ profile: {
66
+ userProfile: 'Perfil do usuário',
67
+ details: 'Detalhes',
68
+ firstName: 'Nome',
69
+ lastName: 'Sobrenome',
70
+ username: 'Nome de usuário',
71
+ status: 'Status',
72
+ },
73
+
74
+
75
+ status: {
76
+ connected: 'conectado',
77
+ connecting: 'conectando',
78
+ disconnected: 'desconectado',
79
+ error: 'erro',
80
+ online: 'online',
81
+ offline: 'offline',
82
+ lastSeen: ({ time }: { time: string }) => `visto por último ${time}`,
83
+ permissionRequired: 'permissão necessária',
84
+ activeNow: 'Ativo agora',
85
+ unknown: 'desconhecido',
86
+ unread: 'novos resultados',
87
+ },
88
+
89
+ time: {
90
+ justNow: 'agora mesmo',
91
+ minutesAgo: ({ count }: { count: number }) => `há ${count} minuto${count !== 1 ? 's' : ''}`,
92
+ hoursAgo: ({ count }: { count: number }) => `há ${count} hora${count !== 1 ? 's' : ''}`,
93
+ daysAgo: ({ count }: { count: number }) => `há ${count} dia${count !== 1 ? 's' : ''}`,
94
+ },
95
+
96
+ connect: {
97
+ restoreAccount: 'Restaurar conta',
98
+ enterSecretKey: 'Por favor, insira uma chave secreta',
99
+ invalidSecretKey: 'Chave secreta inválida. Verifique e tente novamente.',
100
+ enterUrlManually: 'Inserir URL manualmente',
101
+ },
102
+
103
+ settings: {
104
+ title: 'Configurações',
105
+ connectedAccounts: 'Contas conectadas',
106
+ connectAccount: 'Conectar conta',
107
+ github: 'GitHub',
108
+ machines: 'Máquinas',
109
+ showOfflineMachines: ({ count }: { count: number }) => count === 1 ? 'Mostrar 1 máquina offline' : `Mostrar ${count} máquinas offline`,
110
+ hideOfflineMachines: 'Ocultar máquinas offline',
111
+ features: 'Recursos',
112
+ social: 'Social',
113
+ account: 'Conta',
114
+ accountSubtitle: 'Gerencie os detalhes da sua conta',
115
+ appearance: 'Aparência',
116
+ appearanceSubtitle: 'Personalize a aparência do aplicativo',
117
+ voiceAssistant: 'Assistente de voz',
118
+ voiceAssistantSubtitle: 'Configure as preferências de interação por voz',
119
+ featuresTitle: 'Recursos',
120
+ featuresSubtitle: 'Ativar ou desativar recursos do aplicativo',
121
+ developer: 'Desenvolvedor',
122
+ developerTools: 'Ferramentas de desenvolvedor',
123
+ about: 'Sobre',
124
+ aboutFooter: 'NasTech é um cliente móvel para Codex e Claude Code. É totalmente criptografado ponta a ponta e sua conta é armazenada apenas no seu dispositivo. Não é afiliado à Anthropic.',
125
+ whatsNew: 'Novidades',
126
+ whatsNewSubtitle: 'Veja as atualizações e melhorias mais recentes',
127
+ reportIssue: 'Relatar um problema',
128
+ privacyPolicy: 'Política de privacidade',
129
+ termsOfService: 'Termos de serviço',
130
+ eula: 'EULA',
131
+ supportUs: 'Nos apoie',
132
+ supportUsSubtitlePro: 'Obrigado pelo seu apoio!',
133
+ supportUsSubtitle: 'Apoie o desenvolvimento do projeto',
134
+ scanQrCodeToAuthenticate: 'Escaneie o código QR para autenticar',
135
+ githubConnected: ({ login }: { login: string }) => `Conectado como @${login}`,
136
+ connectGithubAccount: 'Conecte sua conta GitHub',
137
+ claudeAuthSuccess: 'Conectado ao Claude com sucesso',
138
+ exchangingTokens: 'Trocando tokens...',
139
+ usage: 'Uso',
140
+ usageSubtitle: 'Visualizar uso da API e custos',
141
+ // Dynamic settings messages
142
+ accountConnected: ({ service }: { service: string }) => `Conta ${service} conectada`,
143
+ machineStatus: ({ name, status }: { name: string; status: 'online' | 'offline' }) =>
144
+ `${name} está ${status === 'online' ? 'online' : 'offline'}`,
145
+ featureToggled: ({ feature, enabled }: { feature: string; enabled: boolean }) =>
146
+ `${feature} ${enabled ? 'ativado' : 'desativado'}`,
147
+ },
148
+
149
+ settingsAppearance: {
150
+ // Appearance settings screen
151
+ theme: 'Tema',
152
+ themeDescription: 'Escolha seu esquema de cores preferido',
153
+ themeOptions: {
154
+ adaptive: 'Adaptativo',
155
+ light: 'Claro',
156
+ dark: 'Escuro',
157
+ },
158
+ themeDescriptions: {
159
+ adaptive: 'Usar configurações do sistema',
160
+ light: 'Sempre usar tema claro',
161
+ dark: 'Sempre usar tema escuro',
162
+ },
163
+ display: 'Exibição',
164
+ displayDescription: 'Controle layout e espaçamento',
165
+ inlineToolCalls: 'Chamadas de ferramentas inline',
166
+ inlineToolCallsDescription: 'Exibir chamadas de ferramentas diretamente nas mensagens do chat',
167
+ expandTodoLists: 'Expandir listas de tarefas',
168
+ expandTodoListsDescription: 'Mostrar todas as tarefas em vez de apenas as mudanças',
169
+ showLineNumbersInDiffs: 'Mostrar números de linha nos diffs',
170
+ showLineNumbersInDiffsDescription: 'Exibir números de linha nos diffs de código',
171
+ showLineNumbersInToolViews: 'Mostrar números de linha nas visualizações de ferramentas',
172
+ showLineNumbersInToolViewsDescription: 'Exibir números de linha nos diffs das visualizações de ferramentas',
173
+ wrapLinesInDiffs: 'Quebrar linhas nos diffs',
174
+ wrapLinesInDiffsDescription: 'Quebrar linhas longas ao invés de rolagem horizontal nas visualizações de diffs',
175
+ diffStyle: 'Visualização do diff',
176
+ diffStyleDescription: 'Mostrar diffs em uma única coluna (unified) ou lado a lado (split). A visualização split funciona apenas na web.',
177
+ diffStyleOptions: {
178
+ unified: 'Unified',
179
+ split: 'Split',
180
+ },
181
+ alwaysShowContextSize: 'Sempre mostrar tamanho do contexto',
182
+ alwaysShowContextSizeDescription: 'Exibir uso do contexto mesmo quando não estiver próximo do limite',
183
+ avatarStyle: 'Estilo do avatar',
184
+ avatarStyleDescription: 'Escolha a aparência do avatar da sessão',
185
+ avatarOptions: {
186
+ pixelated: 'Pixelizado',
187
+ gradient: 'Gradiente',
188
+ brutalist: 'Brutalista',
189
+ },
190
+ showFlavorIcons: 'Mostrar ícones de provedores de IA',
191
+ showFlavorIconsDescription: 'Exibir ícones do provedor de IA nos avatares de sessão',
192
+ },
193
+
194
+ settingsFeatures: {
195
+ // Features settings screen
196
+ experiments: 'Experimentos',
197
+ experimentsDescription: 'Ative recursos experimentais que ainda estão em desenvolvimento. Estes recursos podem ser instáveis ou mudar sem aviso.',
198
+ experimentalFeatures: 'Recursos experimentais',
199
+ experimentalFeaturesEnabled: 'Recursos experimentais ativados',
200
+ experimentalFeaturesDisabled: 'Usando apenas recursos estáveis',
201
+ webFeatures: 'Recursos web',
202
+ webFeaturesDescription: 'Recursos disponíveis apenas na versão web do aplicativo.',
203
+ enterToSend: 'Enter para enviar',
204
+ enterToSendEnabled: 'Pressione Enter para enviar (Shift+Enter para nova linha)',
205
+ enterToSendDisabled: 'Enter insere uma nova linha',
206
+ commandPalette: 'Paleta de comandos',
207
+ commandPaletteEnabled: 'Pressione ⌘K para abrir',
208
+ commandPaletteDisabled: 'Acesso rápido a comandos desativado',
209
+ markdownCopyV2: 'Markdown Copy v2',
210
+ markdownCopyV2Subtitle: 'Pressione e segure para abrir modal de cópia',
211
+ hideInactiveSessions: 'Ocultar sessões inativas',
212
+ hideInactiveSessionsSubtitle: 'Mostre apenas os chats ativos na sua lista',
213
+ groupToolCalls: 'Agrupar chamadas de ferramentas',
214
+ groupToolCallsSubtitle: 'Recolher chamadas consecutivas de ferramentas em um único contêiner',
215
+ privacy: 'Privacidade',
216
+ privacyDescription: 'Desativa completamente toda a análise e telemetria. Nenhum dado será enviado ao PostHog ou qualquer outro serviço de rastreamento.',
217
+ disableAnalytics: 'Desativar análises',
218
+ analyticsDisabled: 'Todo rastreamento e telemetria desativados',
219
+ analyticsEnabled: 'Análises anônimas de uso ativas',
220
+ imageUpload: 'Upload de imagens',
221
+ imageUploadSubtitle: 'Anexe imagens às mensagens para Claude analisar',
222
+ },
223
+
224
+ errors: {
225
+ networkError: 'Ocorreu um erro de rede',
226
+ serverError: 'Ocorreu um erro do servidor',
227
+ unknownError: 'Ocorreu um erro desconhecido',
228
+ connectionTimeout: 'Tempo limite da conexão esgotado',
229
+ authenticationFailed: 'Falha na autenticação',
230
+ permissionDenied: 'Permissão negada',
231
+ fileNotFound: 'Arquivo não encontrado',
232
+ invalidFormat: 'Formato inválido',
233
+ operationFailed: 'Operação falhou',
234
+ tryAgain: 'Por favor, tente novamente',
235
+ contactSupport: 'Entre em contato com o suporte se o problema persistir',
236
+ sessionNotFound: 'Sessão não encontrada',
237
+ voiceSessionFailed: 'Falha ao iniciar sessão de voz',
238
+ voiceServiceUnavailable: 'Serviço de voz temporariamente indisponível',
239
+ voiceLimitReachedTitle: 'Limite de voz atingido',
240
+ voiceHardLimitReached: ({ hours }: { hours: number }) => `Você usou ${hours}+ horas de voz este mês. Este é o máximo permitido. Você pode configurar seu próprio agente ElevenLabs nas configurações de voz para usar sua própria cota.`,
241
+ voiceConversationLimitReached: 'Você atingiu o número máximo de conversas de voz este mês. Podemos adicionar uso de voz sob demanda no futuro — por favor, abra um issue em github.com/nastech-ai/nastech/issues se você atingir este limite.',
242
+ oauthInitializationFailed: 'Falha ao inicializar o fluxo OAuth',
243
+ tokenStorageFailed: 'Falha ao armazenar tokens de autenticação',
244
+ oauthStateMismatch: 'Falha na validação de segurança. Por favor, tente novamente',
245
+ tokenExchangeFailed: 'Falha ao trocar código de autorização',
246
+ oauthAuthorizationDenied: 'A autorização foi negada',
247
+ webViewLoadFailed: 'Falha ao carregar a página de autenticação',
248
+ failedToLoadProfile: 'Falha ao carregar o perfil do usuário',
249
+ userNotFound: 'Usuário não encontrado',
250
+ sessionDeleted: 'A sessão foi excluída',
251
+ sessionDeletedDescription: 'Esta sessão foi removida permanentemente',
252
+
253
+ // Error functions with context
254
+ fieldError: ({ field, reason }: { field: string; reason: string }) =>
255
+ `${field}: ${reason}`,
256
+ validationError: ({ field, min, max }: { field: string; min: number; max: number }) =>
257
+ `${field} deve estar entre ${min} e ${max}`,
258
+ retryIn: ({ seconds }: { seconds: number }) =>
259
+ `Tentar novamente em ${seconds} ${seconds === 1 ? 'segundo' : 'segundos'}`,
260
+ errorWithCode: ({ message, code }: { message: string; code: number | string }) =>
261
+ `${message} (Erro ${code})`,
262
+ disconnectServiceFailed: ({ service }: { service: string }) =>
263
+ `Falha ao desconectar ${service}`,
264
+ connectServiceFailed: ({ service }: { service: string }) =>
265
+ `Falha ao conectar ${service}. Por favor, tente novamente.`,
266
+ failedToLoadFriends: 'Falha ao carregar lista de amigos',
267
+ failedToAcceptRequest: 'Falha ao aceitar solicitação de amizade',
268
+ failedToRejectRequest: 'Falha ao rejeitar solicitação de amizade',
269
+ failedToRemoveFriend: 'Falha ao remover amigo',
270
+ searchFailed: 'A busca falhou. Por favor, tente novamente.',
271
+ failedToSendRequest: 'Falha ao enviar solicitação de amizade',
272
+ },
273
+
274
+ newSession: {
275
+ title: 'Iniciar nova sessão',
276
+ machineOffline: 'A máquina está offline',
277
+ switchMachinesHint: '• Troque de máquina clicando na máquina acima',
278
+ },
279
+
280
+ sessionHistory: {
281
+ // Used by session history screen
282
+ title: 'Histórico de sessões',
283
+ empty: 'Nenhuma sessão encontrada',
284
+ today: 'Hoje',
285
+ yesterday: 'Ontem',
286
+ daysAgo: ({ count }: { count: number }) => `há ${count} ${count === 1 ? 'dia' : 'dias'}`,
287
+ viewAll: 'Ver todas as sessões',
288
+ },
289
+
290
+ session: {
291
+ inputPlaceholder: 'Digite uma mensagem ...',
292
+ inactiveArchived: 'Esta sessão está inativa.',
293
+ resumeFromTerminal: 'Para retomá-la pelo terminal:',
294
+ newChat: 'Novo chat',
295
+ forkAction: 'Bifurcar sessão',
296
+ forkSubtitle: 'Continuar em uma nova sessão com o mesmo contexto',
297
+ duplicateAction: 'Duplicar a partir da mensagem…',
298
+ duplicateSubtitle: 'Voltar a um ponto escolhido e tentar de novo',
299
+ forkFromHere: 'Bifurcar daqui',
300
+ duplicateSheetTitle: 'Escolha um ponto de retrocesso',
301
+ duplicateSheetSubtitle: 'A nova sessão manterá o turno escolhido completo (sua mensagem e a resposta do agente) e descartará as mensagens seguintes.',
302
+ duplicateSheetConfirm: 'Duplicar',
303
+ duplicateSheetEmpty: 'Ainda não há mensagens elegíveis para retrocesso nesta sessão.',
304
+ duplicateRowDisabled: 'Esta mensagem não pode ser usada como ponto de retrocesso.',
305
+ forkedFromLabel: 'Bifurcado de',
306
+ forkedFromSubtitle: 'Abrir a sessão da qual foi bifurcada',
307
+ forkErrorOffline: 'Esta máquina está offline. A bifurcação só está disponível enquanto a máquina da sessão estiver online.',
308
+ forkErrorMissingUuid: 'O ponto de retrocesso escolhido não existe mais na sessão de origem — tente bifurcar sem truncar.',
309
+ forkErrorMissingMetadata: 'Faltam metadados da sessão necessários para bifurcar.',
310
+ forkErrorGeneric: 'Não foi possível bifurcar a sessão.',
311
+ forkClaudeOnly: 'A bifurcação atualmente só é suportada para sessões Claude.',
312
+ },
313
+
314
+ commandPalette: {
315
+ placeholder: 'Digite um comando ou pesquise...',
316
+ },
317
+
318
+ server: {
319
+ // Used by Server Configuration screen (app/(app)/server.tsx)
320
+ serverConfiguration: 'Configuração do servidor',
321
+ enterServerUrl: 'Por favor, insira uma URL do servidor',
322
+ notValidNasTechServer: 'Não é um servidor NasTech válido',
323
+ changeServer: 'Alterar servidor',
324
+ continueWithServer: 'Continuar com este servidor?',
325
+ resetToDefault: 'Redefinir para padrão',
326
+ resetServerDefault: 'Redefinir servidor para padrão?',
327
+ validating: 'Validando...',
328
+ validatingServer: 'Validando servidor...',
329
+ serverReturnedError: 'O servidor retornou um erro',
330
+ failedToConnectToServer: 'Falha ao conectar com o servidor',
331
+ currentlyUsingCustomServer: 'Atualmente usando servidor personalizado',
332
+ customServerUrlLabel: 'URL do servidor personalizado',
333
+ advancedFeatureFooter: 'Este é um recurso avançado. Altere o servidor apenas se souber o que está fazendo. Você precisará sair e entrar novamente após alterar servidores.'
334
+ },
335
+
336
+ sessionInfo: {
337
+ // Used by Session Info screen (app/(app)/session/[id]/info.tsx)
338
+ killSession: 'Encerrar sessão',
339
+ killSessionConfirm: 'Tem certeza de que deseja encerrar esta sessão?',
340
+ archiveSession: 'Arquivar sessão',
341
+ archiveSessionConfirm: 'Tem certeza de que deseja arquivar esta sessão?',
342
+ nastechSessionIdCopied: 'ID da sessão NasTech copiado para a área de transferência',
343
+ failedToCopySessionId: 'Falha ao copiar ID da sessão NasTech',
344
+ nastechSessionId: 'ID da sessão NasTech',
345
+ claudeCodeSessionId: 'ID da sessão Claude Code',
346
+ claudeCodeSessionIdCopied: 'ID da sessão Claude Code copiado para a área de transferência',
347
+ codexThreadId: 'ID da thread do Codex',
348
+ codexThreadIdCopied: 'ID da thread do Codex copiado para a área de transferência',
349
+ aiProvider: 'Provedor de IA',
350
+ failedToCopyClaudeCodeSessionId: 'Falha ao copiar ID da sessão Claude Code',
351
+ failedToCopyCodexThreadId: 'Falha ao copiar ID da thread do Codex',
352
+ metadataCopied: 'Metadados copiados para a área de transferência',
353
+ failedToCopyMetadata: 'Falha ao copiar metadados',
354
+ failedToKillSession: 'Falha ao encerrar sessão',
355
+ failedToArchiveSession: 'Falha ao arquivar sessão',
356
+ connectionStatus: 'Status da conexão',
357
+ created: 'Criado',
358
+ lastUpdated: 'Última atualização',
359
+ sequence: 'Sequência',
360
+ quickActions: 'Ações rápidas',
361
+ viewMachine: 'Ver máquina',
362
+ viewMachineSubtitle: 'Ver detalhes da máquina e sessões',
363
+ resumeSession: 'Resume Session',
364
+ resumeSessionSubtitle: 'Resume this session on the same machine',
365
+ resumeSessionSameMachineOnly: 'This session can only be resumed on the same machine it started on.',
366
+ resumeSessionMachineOffline: 'This machine is offline. Resume is only available while it is online.',
367
+ resumeSessionNeedsNasTechAgent: 'Resume is unavailable on this machine. Run `nastech-agent auth login` to enable it.',
368
+ resumeSessionMissingMachine: 'This session is missing its machine metadata, so it cannot be resumed.',
369
+ resumeSessionMissingBackendId: 'This session does not have a resumable Claude or Codex identifier.',
370
+ resumeSessionUnexpectedDirectoryPrompt: 'Resume cannot create directories. Start the session manually from its original path.',
371
+ killSessionSubtitle: 'Encerrar imediatamente a sessão',
372
+ archiveSessionSubtitle: 'Arquivar esta sessão e pará-la',
373
+ metadata: 'Metadados',
374
+ host: 'Host',
375
+ path: 'Caminho',
376
+ operatingSystem: 'Sistema operacional',
377
+ processId: 'ID do processo',
378
+ nastechHome: 'Diretório NasTech',
379
+ copyMetadata: 'Copiar metadados',
380
+ agentState: 'Estado do agente',
381
+ controlledByUser: 'Controlado pelo usuário',
382
+ pendingRequests: 'Solicitações pendentes',
383
+ activity: 'Atividade',
384
+ thinking: 'Pensando',
385
+ thinkingSince: 'Pensando desde',
386
+ cliVersion: 'Versão do CLI',
387
+ cliVersionOutdated: 'Atualização do CLI necessária',
388
+ cliVersionOutdatedMessage: ({ currentVersion, requiredVersion }: { currentVersion: string; requiredVersion: string }) =>
389
+ `Versão ${currentVersion} instalada. Atualize para ${requiredVersion} ou posterior`,
390
+ updateCliInstructions: 'Por favor execute pip install -U nastech-agent',
391
+ deleteSession: 'Excluir sessão',
392
+ deleteSessionSubtitle: 'Remover permanentemente esta sessão',
393
+ deleteSessionConfirm: 'Excluir sessão permanentemente?',
394
+ deleteSessionWarning: 'Esta ação não pode ser desfeita. Todas as mensagens e dados associados a esta sessão serão excluídos permanentemente.',
395
+ failedToDeleteSession: 'Falha ao excluir sessão',
396
+ sessionDeleted: 'Sessão excluída com sucesso',
397
+ worktreeCleanupTitle: 'Excluir Worktree?',
398
+ worktreeCleanupMessage: 'O Worktree não tem alterações não confirmadas. Deseja excluir os arquivos do Worktree?',
399
+ worktreeCleanupDelete: 'Excluir Worktree',
400
+ worktreeCleanupKeep: 'Manter arquivos',
401
+
402
+ },
403
+
404
+ components: {
405
+ emptyMainScreen: {
406
+ // Used by EmptyMainScreen component
407
+ readyToCode: 'Pronto para programar?',
408
+ installCli: 'Install NasTech CLI',
409
+ runIt: 'Execute',
410
+ scanQrCode: 'Escaneie o código QR',
411
+ openCamera: 'Abrir câmera',
412
+ },
413
+ },
414
+
415
+ agentInput: {
416
+ permissionMode: {
417
+ title: 'MODO DE PERMISSÃO',
418
+ default: 'Padrão',
419
+ acceptEdits: 'Aceitar edições',
420
+ plan: 'Modo de planejamento',
421
+ dontAsk: 'Não perguntar',
422
+ bypassPermissions: 'Modo Yolo',
423
+ badgeAcceptAllEdits: 'Aceitar todas as edições',
424
+ badgeBypassAllPermissions: 'Ignorar todas as permissões',
425
+ badgePlanMode: 'Modo de planejamento',
426
+ },
427
+ agent: {
428
+ claude: 'Claude',
429
+ codex: 'Codex',
430
+ gemini: 'Gemini',
431
+ openclaw: 'OpenClaw',
432
+ },
433
+ model: {
434
+ title: 'MODELO',
435
+ configureInCli: 'Configurar modelos nas configurações do CLI',
436
+ },
437
+ effort: {
438
+ title: 'ESFORÇO',
439
+ },
440
+ codexPermissionMode: {
441
+ title: 'MODO DE PERMISSÃO CODEX',
442
+ default: 'Configurações do CLI',
443
+ readOnly: 'Read Only Mode',
444
+ safeYolo: 'Safe YOLO',
445
+ yolo: 'YOLO',
446
+ badgeReadOnly: 'Read Only Mode',
447
+ badgeSafeYolo: 'Safe YOLO',
448
+ badgeYolo: 'YOLO',
449
+ },
450
+ codexModel: {
451
+ title: 'CODEX MODEL',
452
+ gpt5CodexLow: 'gpt-5-codex low',
453
+ gpt5CodexMedium: 'gpt-5-codex medium',
454
+ gpt5CodexHigh: 'gpt-5-codex high',
455
+ gpt5Minimal: 'GPT-5 Minimal',
456
+ gpt5Low: 'GPT-5 Low',
457
+ gpt5Medium: 'GPT-5 Medium',
458
+ gpt5High: 'GPT-5 High',
459
+ },
460
+ geminiPermissionMode: {
461
+ title: 'MODO DE PERMISSÃO GEMINI',
462
+ default: 'Padrão',
463
+ autoEdit: 'Edição automática',
464
+ yolo: 'YOLO',
465
+ plan: 'Planejamento',
466
+ badgeAutoEdit: 'Edição automática',
467
+ badgeYolo: 'YOLO',
468
+ badgePlan: 'Planejamento',
469
+ },
470
+ context: {
471
+ remaining: ({ percent }: { percent: number }) => `${percent}% restante`,
472
+ },
473
+ suggestion: {
474
+ fileLabel: 'ARQUIVO',
475
+ folderLabel: 'PASTA',
476
+ },
477
+ noMachinesAvailable: 'Sem máquinas',
478
+ },
479
+
480
+ machineLauncher: {
481
+ showLess: 'Mostrar menos',
482
+ showAll: ({ count }: { count: number }) => `Mostrar todos (${count} caminhos)`,
483
+ enterCustomPath: 'Inserir caminho personalizado',
484
+ offlineUnableToSpawn: 'Não é possível criar nova sessão, você está offline',
485
+ },
486
+
487
+ sidebar: {
488
+ sessionsTitle: 'NasTech',
489
+ showArchived: 'Mostrar arquivadas',
490
+ hideArchived: 'Ocultar arquivadas',
491
+ newSession: 'Nova sessão',
492
+ },
493
+
494
+ zen: {
495
+ toggle: 'Modo zen',
496
+ },
497
+
498
+ toolView: {
499
+ input: 'Entrada',
500
+ output: 'Saída',
501
+ },
502
+
503
+ toolGroup: {
504
+ editedFiles: ({ count }: { count: number }) => count === 1 ? 'Editou 1 arquivo' : `Editou ${count} arquivos`,
505
+ readFiles: ({ count }: { count: number }) => count === 1 ? 'Leu 1 arquivo' : `Leu ${count} arquivos`,
506
+ ranCommands: ({ count }: { count: number }) => count === 1 ? 'Executou 1 comando' : `Executou ${count} comandos`,
507
+ searched: ({ count }: { count: number }) => count === 1 ? 'Pesquisou 1 vez' : `Pesquisou ${count} vezes`,
508
+ fetchedUrls: ({ count }: { count: number }) => count === 1 ? 'Obteve 1 URL' : `Obteve ${count} URLs`,
509
+ ranTasks: ({ count }: { count: number }) => count === 1 ? 'Executou 1 tarefa' : `Executou ${count} tarefas`,
510
+ usedTools: ({ count }: { count: number }) => count === 1 ? 'Usou 1 ferramenta' : `Usou ${count} ferramentas`,
511
+ },
512
+
513
+ tools: {
514
+ fullView: {
515
+ description: 'Descrição',
516
+ inputParams: 'Parâmetros de entrada',
517
+ output: 'Saída',
518
+ error: 'Erro',
519
+ completed: 'Ferramenta concluída com sucesso',
520
+ noOutput: 'Nenhuma saída foi produzida',
521
+ running: 'Ferramenta está executando...',
522
+ rawJsonDevMode: 'JSON bruto (modo desenvolvedor)',
523
+ },
524
+ taskView: {
525
+ initializing: 'Inicializando agente...',
526
+ moreTools: ({ count }: { count: number }) => `+${count} mais ${plural({ count, singular: 'ferramenta', plural: 'ferramentas' })}`,
527
+ },
528
+ multiEdit: {
529
+ editNumber: ({ index, total }: { index: number; total: number }) => `Edição ${index} de ${total}`,
530
+ replaceAll: 'Substituir tudo',
531
+ },
532
+ names: {
533
+ task: 'Tarefa',
534
+ terminal: 'Terminal',
535
+ searchFiles: 'Buscar arquivos',
536
+ search: 'Buscar',
537
+ searchContent: 'Buscar conteúdo',
538
+ listFiles: 'Listar arquivos',
539
+ planProposal: 'Proposta de plano',
540
+ readFile: 'Ler arquivo',
541
+ editFile: 'Editar arquivo',
542
+ writeFile: 'Escrever arquivo',
543
+ fetchUrl: 'Buscar URL',
544
+ readNotebook: 'Ler notebook',
545
+ editNotebook: 'Editar notebook',
546
+ todoList: 'Lista de tarefas',
547
+ webSearch: 'Busca web',
548
+ reasoning: 'Raciocínio',
549
+ applyChanges: 'Atualizar arquivo',
550
+ viewDiff: 'Alterações do arquivo atual',
551
+ question: 'Pergunta',
552
+ },
553
+ desc: {
554
+ terminalCmd: ({ cmd }: { cmd: string }) => `Terminal(cmd: ${cmd})`,
555
+ searchPattern: ({ pattern }: { pattern: string }) => `Buscar(padrão: ${pattern})`,
556
+ searchPath: ({ basename }: { basename: string }) => `Buscar(caminho: ${basename})`,
557
+ fetchUrlHost: ({ host }: { host: string }) => `Buscar URL(url: ${host})`,
558
+ editNotebookMode: ({ path, mode }: { path: string; mode: string }) => `Editar notebook(arquivo: ${path}, modo: ${mode})`,
559
+ todoListCount: ({ count }: { count: number }) => `Lista de tarefas(quantidade: ${count})`,
560
+ webSearchQuery: ({ query }: { query: string }) => `Busca web(consulta: ${query})`,
561
+ grepPattern: ({ pattern }: { pattern: string }) => `grep(padrão: ${pattern})`,
562
+ multiEditEdits: ({ path, count }: { path: string; count: number }) => `${path} (${count} edições)`,
563
+ readingFile: ({ file }: { file: string }) => `Lendo ${file}`,
564
+ writingFile: ({ file }: { file: string }) => `Escrevendo ${file}`,
565
+ modifyingFile: ({ file }: { file: string }) => `Modificando ${file}`,
566
+ modifyingFiles: ({ count }: { count: number }) => `Modificando ${count} arquivos`,
567
+ modifyingMultipleFiles: ({ file, count }: { file: string; count: number }) => `${file} e ${count} mais`,
568
+ showingDiff: 'Mostrando alterações',
569
+ },
570
+ askUserQuestion: {
571
+ submit: 'Enviar resposta',
572
+ multipleQuestions: ({ count }: { count: number }) => `${count} ${plural({ count, singular: 'pergunta', plural: 'perguntas' })}`,
573
+ other: 'Outro',
574
+ otherDescription: 'Digite sua própria resposta',
575
+ otherPlaceholder: 'Digite sua resposta...',
576
+ }
577
+ },
578
+
579
+ files: {
580
+ changes: 'Alterações',
581
+ searchPlaceholder: 'Buscar arquivos...',
582
+ detachedHead: 'HEAD desanexado',
583
+ summary: ({ staged, unstaged }: { staged: number; unstaged: number }) => `${staged} preparados • ${unstaged} não preparados`,
584
+ notRepo: 'Não é um repositório git',
585
+ notUnderGit: 'Este diretório não está sob controle de versão git',
586
+ searching: 'Buscando arquivos...',
587
+ noFilesFound: 'Nenhum arquivo encontrado',
588
+ noFilesInProject: 'Nenhum arquivo no projeto',
589
+ tryDifferentTerm: 'Tente um termo de busca diferente',
590
+ searchResults: ({ count }: { count: number }) => `Resultados da busca (${count})`,
591
+ projectRoot: 'Raiz do projeto',
592
+ stagedChanges: ({ count }: { count: number }) => `Alterações preparadas (${count})`,
593
+ unstagedChanges: ({ count }: { count: number }) => `Alterações não preparadas (${count})`,
594
+ // File viewer strings
595
+ loadingFile: ({ fileName }: { fileName: string }) => `Carregando ${fileName}...`,
596
+ binaryFile: 'Arquivo binário',
597
+ cannotDisplayBinary: 'Não é possível exibir o conteúdo do arquivo binário',
598
+ diff: 'Diff',
599
+ file: 'Arquivo',
600
+ fileEmpty: 'Arquivo está vazio',
601
+ noChanges: 'Nenhuma alteração para exibir',
602
+ noChangesTitle: 'Sem alterações',
603
+ noChangesSubtitle: 'A árvore de trabalho está limpa',
604
+ deleted: 'Excluído',
605
+ changedFiles: ({ count }: { count: number }) => `${count} ${count === 1 ? 'arquivo modificado' : 'arquivos modificados'}`,
606
+ allFiles: 'Todos os arquivos',
607
+ editFile: 'Editar',
608
+ saveFile: 'Salvar',
609
+ failedToRead: 'Falha ao ler arquivo',
610
+ failedToSave: 'Falha ao salvar arquivo',
611
+ fileConflict: 'Conflito de arquivo',
612
+ fileConflictDescription: 'Este arquivo foi modificado no dispositivo enquanto você o editava. Recarregue para ver a versão mais recente.',
613
+ reload: 'Recarregar',
614
+ overwrite: 'Sobrescrever',
615
+ },
616
+
617
+ settingsVoice: {
618
+ // Voice settings screen
619
+ languageTitle: 'Idioma',
620
+ languageDescription: 'Escolha seu idioma preferido para interações com o assistente de voz. Esta configuração sincroniza em todos os seus dispositivos.',
621
+ preferredLanguage: 'Idioma preferido',
622
+ preferredLanguageSubtitle: 'Idioma usado para respostas do assistente de voz',
623
+ language: {
624
+ searchPlaceholder: 'Buscar idiomas...',
625
+ title: 'Idiomas',
626
+ footer: ({ count }: { count: number }) => `${count} ${plural({ count, singular: 'idioma', plural: 'idiomas' })} disponíveis`,
627
+ autoDetect: 'Detectar automaticamente',
628
+ },
629
+ // Bring your own agent
630
+ byoTitle: 'Traga seu próprio agente',
631
+ byoDescription: 'Use seu próprio agente ElevenLabs em vez do padrão do NasTech. Nenhuma assinatura necessária — conecte-se diretamente com sua própria conta ElevenLabs. Seu agente deve definir duas ferramentas de cliente: messageClaudeCode (envia texto ao agente de código) e processPermissionRequest (permite ou nega o uso de ferramentas). Recebe o contexto da sessão através da variável dinâmica {{initialConversationContext}}.',
632
+ customAgentId: 'ElevenLabs Agent ID',
633
+ customAgentIdNotSet: 'Não configurado',
634
+ customAgentIdDescription: 'Insira seu ElevenLabs Agent ID. Deixe vazio para usar o padrão do NasTech.',
635
+ customAgentIdPlaceholder: 'e.g. abc123def456',
636
+ bypassToken: 'Conexão direta',
637
+ bypassTokenSubtitle: 'Pule o servidor do NasTech, conecte-se diretamente ao ElevenLabs',
638
+ promptGuideTitle: 'Guia de prompt do agente',
639
+ promptGuideDescription: 'Seu agente ElevenLabs precisa de:\n\n• Ferramenta: messageClaudeCode — parâmetro: message (string). Envia uma mensagem para a sessão de código ativa.\n• Ferramenta: processPermissionRequest — parâmetro: decision ("allow" ou "deny"). Aprova ou nega uma permissão de ferramenta pendente.\n• Variável dinâmica: {{initialConversationContext}} — recebe o histórico e contexto da sessão ao iniciar.\n\nO agente atua como ponte de voz entre o usuário e os agentes de código. Deve ser conciso, responder apenas quando abordado e informar quando um agente de código terminar o trabalho.',
640
+ usageTitle: 'Uso (últimos 30 dias)',
641
+ usageFooter: 'Tempo de voz utilizado nos últimos 30 dias. Plano gratuito: 20 min. Assinante: 5 horas. Máx. 100 conversas por mês.',
642
+ usageLabel: 'Tempo de voz',
643
+ conversationsLabel: 'Conversas',
644
+ usageUsed: ({ used, limit }: { used: string; limit: string }) => `${used} usado de ${limit}`,
645
+ supportTitle: 'Melhorar voz',
646
+ supportSubtitle: 'Mais tempo de voz e apoie o desenvolvimento',
647
+ },
648
+
649
+ settingsAccount: {
650
+ // Account settings screen
651
+ accountInformation: 'Informações da conta',
652
+ status: 'Status',
653
+ statusActive: 'Ativo',
654
+ statusNotAuthenticated: 'Não autenticado',
655
+ anonymousId: 'ID anônimo',
656
+ publicId: 'ID público',
657
+ notAvailable: 'Não disponível',
658
+ linkNewDevice: 'Vincular novo dispositivo',
659
+ linkNewDeviceSubtitle: 'Escanear código QR para vincular dispositivo',
660
+ profile: 'Perfil',
661
+ name: 'Nome',
662
+ github: 'GitHub',
663
+ tapToDisconnect: 'Toque para desconectar',
664
+ server: 'Servidor',
665
+ backup: 'Backup',
666
+ backupDescription: 'Sua chave secreta é a única forma de recuperar sua conta. Salve-a em um local seguro como um gerenciador de senhas.',
667
+ secretKey: 'Chave secreta',
668
+ tapToReveal: 'Toque para revelar',
669
+ tapToHide: 'Toque para ocultar',
670
+ secretKeyLabel: 'CHAVE SECRETA (TOQUE PARA COPIAR)',
671
+ secretKeyCopied: 'Chave secreta copiada para a área de transferência. Guarde-a em um local seguro!',
672
+ secretKeyCopyFailed: 'Falha ao copiar chave secreta',
673
+ privacy: 'Privacidade',
674
+ privacyDescription: 'Ajude a melhorar o aplicativo compartilhando dados de uso anônimos. Nenhuma informação pessoal é coletada.',
675
+ analytics: 'Análises',
676
+ analyticsDisabled: 'Nenhum dado é compartilhado',
677
+ analyticsEnabled: 'Dados de uso anônimos são compartilhados',
678
+ dangerZone: 'Zona perigosa',
679
+ logout: 'Sair',
680
+ logoutSubtitle: 'Sair e limpar dados locais',
681
+ logoutConfirm: 'Tem certeza de que quer sair? Certifique-se de ter feito backup da sua chave secreta!',
682
+ },
683
+
684
+ settingsLanguage: {
685
+ // Language settings screen
686
+ title: 'Idioma',
687
+ description: 'Escolher o idioma preferido para a interface do aplicativo. Isso vai ser sincronizado em todos os seus dispositivos.',
688
+ currentLanguage: 'Idioma atual',
689
+ automatic: 'Automático',
690
+ automaticSubtitle: 'Detectar das configurações do dispositivo',
691
+ needsRestart: 'Idioma alterado',
692
+ needsRestartMessage: 'O aplicativo precisa ser reiniciado para aplicar a nova configuração de idioma.',
693
+ restartNow: 'Reiniciar agora',
694
+ },
695
+
696
+ connectButton: {
697
+ authenticate: 'Autenticar terminal',
698
+ authenticateWithUrlPaste: 'Autenticar terminal com colagem de URL',
699
+ pasteAuthUrl: 'Cole a URL de autenticação do seu terminal',
700
+ },
701
+
702
+ updateBanner: {
703
+ updateAvailable: 'Atualização disponível',
704
+ pressToApply: 'Pressione para aplicar a atualização',
705
+ whatsNew: 'Novidades',
706
+ seeLatest: 'Veja as atualizações e melhorias mais recentes',
707
+ nativeUpdateAvailable: 'Atualização do aplicativo disponível',
708
+ tapToUpdateAppStore: 'Toque para atualizar na App Store',
709
+ tapToUpdatePlayStore: 'Toque para atualizar na Play Store',
710
+ },
711
+
712
+ changelog: {
713
+ // Used by the changelog screen
714
+ version: ({ version }: { version: number }) => `Versão ${version}`,
715
+ noEntriesAvailable: 'Nenhuma entrada de changelog disponível.',
716
+ },
717
+
718
+ terminal: {
719
+ // Used by terminal connection screens
720
+ webBrowserRequired: 'Navegador web necessário',
721
+ webBrowserRequiredDescription: 'Links de conexão de terminal só podem ser abertos em um navegador web por questões de segurança. Use o leitor de código QR ou abra este link num computador.',
722
+ processingConnection: 'Processando conexão...',
723
+ invalidConnectionLink: 'Link de conexão inválido',
724
+ invalidConnectionLinkDescription: 'O link de conexão está ausente ou inválido. Verifique a URL e tente novamente.',
725
+ connectTerminal: 'Conectar terminal',
726
+ terminalRequestDescription: 'Um terminal está solicitando conexão à sua conta NasTech. Isso permitirá que o terminal envie e receba mensagens com segurança.',
727
+ connectionDetails: 'Detalhes da conexão',
728
+ publicKey: 'Chave pública',
729
+ encryption: 'Criptografia',
730
+ endToEndEncrypted: 'Criptografia ponta a ponta',
731
+ acceptConnection: 'Aceitar conexão',
732
+ connecting: 'Conectando...',
733
+ reject: 'Rejeitar',
734
+ security: 'Segurança',
735
+ securityFooter: 'Este link de conexão foi processado com segurança no seu navegador e nunca foi enviado para nenhum servidor. Seus dados privados permanecerão seguros e apenas você pode descriptografar as mensagens.',
736
+ securityFooterDevice: 'Esta conexão foi processada com segurança no seu dispositivo e nunca foi enviada para nenhum servidor. Seus dados privados permanecerão seguros e apenas você pode descriptografar as mensagens.',
737
+ clientSideProcessing: 'Processamento do lado cliente',
738
+ linkProcessedLocally: 'Link processado localmente no navegador',
739
+ linkProcessedOnDevice: 'Link processado localmente no dispositivo',
740
+ },
741
+
742
+ modals: {
743
+ // Used across connect flows and settings
744
+ authenticateTerminal: 'Autenticar terminal',
745
+ pasteUrlFromTerminal: 'Cole a URL de autenticação do seu terminal',
746
+ deviceLinkedSuccessfully: 'Dispositivo vinculado com sucesso',
747
+ terminalConnectedSuccessfully: 'Terminal conectado com sucesso',
748
+ invalidAuthUrl: 'URL de autenticação inválida',
749
+ developerMode: 'Modo desenvolvedor',
750
+ developerModeEnabled: 'Modo desenvolvedor ativado',
751
+ developerModeDisabled: 'Modo desenvolvedor desativado',
752
+ disconnectGithub: 'Desconectar GitHub',
753
+ disconnectGithubConfirm: 'Tem certeza de que deseja desconectar sua conta GitHub?',
754
+ disconnectService: ({ service }: { service: string }) =>
755
+ `Desconectar ${service}`,
756
+ disconnectServiceConfirm: ({ service }: { service: string }) =>
757
+ `Tem certeza de que deseja desconectar ${service} da sua conta?`,
758
+ disconnect: 'Desconectar',
759
+ failedToConnectTerminal: 'Falha ao conectar terminal',
760
+ cameraPermissionsRequiredToConnectTerminal: 'Permissões de câmera são necessárias para conectar terminal',
761
+ failedToLinkDevice: 'Falha ao vincular dispositivo',
762
+ cameraPermissionsRequiredToScanQr: 'Permissões de câmera são necessárias para escanear códigos QR'
763
+ },
764
+
765
+ navigation: {
766
+ // Navigation titles and screen headers
767
+ connectTerminal: 'Conectar terminal',
768
+ linkNewDevice: 'Vincular novo dispositivo',
769
+ restoreWithSecretKey: 'Restaurar com chave secreta',
770
+ whatsNew: 'Novidades',
771
+ friends: 'Amigos',
772
+ },
773
+
774
+ welcome: {
775
+ // Main welcome screen for unauthenticated users
776
+ title: 'Cliente móvel Codex e Claude Code',
777
+ subtitle: 'Criptografado ponta a ponta e sua conta é armazenada apenas no seu dispositivo.',
778
+ createAccount: 'Criar conta',
779
+ linkOrRestoreAccount: 'Vincular ou restaurar conta',
780
+ loginWithMobileApp: 'Fazer login com aplicativo móvel',
781
+ },
782
+
783
+ review: {
784
+ // Used by utils/requestReview.ts
785
+ enjoyingApp: 'Curtindo o aplicativo?',
786
+ feedbackPrompt: 'Adoraríamos ouvir seu feedback!',
787
+ yesILoveIt: 'Sim, eu amo!',
788
+ notReally: 'Não muito'
789
+ },
790
+
791
+ items: {
792
+ // Used by Item component for copy toast
793
+ copiedToClipboard: ({ label }: { label: string }) => `${label} copiado para a área de transferência`
794
+ },
795
+
796
+ machine: {
797
+ offlineUnableToSpawn: 'Inicializador desativado enquanto a máquina está offline',
798
+ offlineHelp: '• Verifique se seu computador está online\n• Execute `nastech daemon status` para diagnosticar\n• Você está usando a versão mais recente do CLI? Atualize com `pip install -U nastech-agent`',
799
+ launchNewSessionInDirectory: 'Iniciar nova sessão no diretório',
800
+ daemon: 'Daemon',
801
+ status: 'Status',
802
+ stopDaemon: 'Parar daemon',
803
+ lastKnownPid: 'Último PID conhecido',
804
+ lastKnownHttpPort: 'Última porta HTTP conhecida',
805
+ startedAt: 'Iniciado em',
806
+ cliVersion: 'Versão do CLI',
807
+ daemonStateVersion: 'Versão do estado do daemon',
808
+ activeSessions: ({ count }: { count: number }) => `Sessões ativas (${count})`,
809
+ machineGroup: 'Máquina',
810
+ host: 'Host',
811
+ machineId: 'ID da máquina',
812
+ username: 'Nome de usuário',
813
+ homeDirectory: 'Diretório home',
814
+ platform: 'Plataforma',
815
+ architecture: 'Arquitetura',
816
+ lastSeen: 'Visto pela última vez',
817
+ never: 'Nunca',
818
+ metadataVersion: 'Versão dos metadados',
819
+ cliAvailability: 'Disponibilidade de CLI',
820
+ cliInstalled: 'Instalado',
821
+ cliNotFound: 'Não encontrado',
822
+ lastDetected: 'Última detecção',
823
+ untitledSession: 'Sessão sem título',
824
+ back: 'Voltar',
825
+ dangerZone: 'Zona de perigo',
826
+ delete: 'Excluir máquina',
827
+ deleteFooter: 'Remove esta máquina da sua conta. O histórico de sessões será preservado, mas você não poderá iniciar novas sessões nesta máquina.',
828
+ deleteConfirmTitle: 'Excluir esta máquina?',
829
+ deleteConfirmMessage: 'A máquina será removida da sua conta. O histórico de sessões será preservado, mas você não poderá iniciar novas sessões até reconectar o daemon.',
830
+ deleteFailed: 'Falha ao excluir a máquina.',
831
+ },
832
+
833
+ message: {
834
+ switchedToMode: ({ mode }: { mode: string }) => `Mudou para o modo ${mode}`,
835
+ unknownEvent: 'Evento desconhecido',
836
+ usageLimitUntil: ({ time }: { time: string }) => `Limite de uso atingido até ${time}`,
837
+ unknownTime: 'horário desconhecido',
838
+ },
839
+
840
+ codex: {
841
+ // Codex permission dialog buttons
842
+ permissions: {
843
+ yesForSession: 'Sim, e não perguntar para esta sessão',
844
+ stopAndExplain: 'Parar, e explicar o que fazer',
845
+ }
846
+ },
847
+
848
+ claude: {
849
+ // Claude permission dialog buttons
850
+ permissions: {
851
+ yesAllowAllEdits: 'Sim, permitir todas as edições durante esta sessão',
852
+ yesAllowEverything: 'Sim, permitir tudo durante esta sessão',
853
+ yesForTool: 'Sim, não perguntar novamente para esta ferramenta',
854
+ noTellClaude: 'Não, fornecer feedback',
855
+ }
856
+ },
857
+
858
+ textSelection: {
859
+ // Text selection screen
860
+ selectText: 'Selecionar intervalo de texto',
861
+ title: 'Selecionar texto',
862
+ noTextProvided: 'Nenhum texto fornecido',
863
+ textNotFound: 'Texto não encontrado ou expirado',
864
+ textCopied: 'Texto copiado para a área de transferência',
865
+ failedToCopy: 'Falha ao copiar o texto para a área de transferência',
866
+ noTextToCopy: 'Nenhum texto disponível para copiar',
867
+ },
868
+
869
+ markdown: {
870
+ // Markdown copy functionality
871
+ codeCopied: 'Código copiado',
872
+ copyFailed: 'Falha ao copiar',
873
+ mermaidRenderFailed: 'Falha ao renderizar diagrama mermaid',
874
+ },
875
+
876
+ artifacts: {
877
+ title: 'Artefatos',
878
+ countSingular: '1 artefato',
879
+ countPlural: ({ count }: { count: number }) => `${count} artefatos`,
880
+ empty: 'Ainda não há artefatos',
881
+ emptyDescription: 'Crie seu primeiro artefato para salvar e organizar conteúdo',
882
+ new: 'Novo artefato',
883
+ edit: 'Editar artefato',
884
+ delete: 'Excluir',
885
+ updateError: 'Falha ao atualizar artefato. Por favor, tente novamente.',
886
+ notFound: 'Artefato não encontrado',
887
+ discardChanges: 'Descartar alterações?',
888
+ discardChangesDescription: 'Você tem alterações não salvas. Tem certeza de que deseja descartá-las?',
889
+ deleteConfirm: 'Excluir artefato?',
890
+ deleteConfirmDescription: 'Este artefato será excluído permanentemente.',
891
+ titlePlaceholder: 'Título do artefato',
892
+ bodyPlaceholder: 'Digite o conteúdo aqui...',
893
+ save: 'Salvar',
894
+ saving: 'Salvando...',
895
+ loading: 'Carregando...',
896
+ error: 'Falha ao carregar artefatos',
897
+ titleLabel: 'TÍTULO',
898
+ bodyLabel: 'CONTEÚDO',
899
+ emptyFieldsError: 'Por favor, insira um título ou conteúdo',
900
+ createError: 'Falha ao criar artefato. Por favor, tente novamente.',
901
+ },
902
+
903
+ friends: {
904
+ // Friends feature
905
+ title: 'Amigos',
906
+ manageFriends: 'Gerencie seus amigos e conexões',
907
+ searchTitle: 'Buscar amigos',
908
+ pendingRequests: 'Solicitações de amizade',
909
+ myFriends: 'Meus amigos',
910
+ noFriendsYet: 'Você ainda não tem amigos',
911
+ findFriends: 'Buscar amigos',
912
+ remove: 'Remover',
913
+ pendingRequest: 'Pendente',
914
+ sentOn: ({ date }: { date: string }) => `Enviado em ${date}`,
915
+ accept: 'Aceitar',
916
+ reject: 'Rejeitar',
917
+ addFriend: 'Adicionar amigo',
918
+ alreadyFriends: 'Já são amigos',
919
+ requestPending: 'Solicitação pendente',
920
+ searchInstructions: 'Digite um nome de usuário para buscar amigos',
921
+ searchPlaceholder: 'Digite o nome de usuário...',
922
+ searching: 'Buscando...',
923
+ userNotFound: 'Usuário não encontrado',
924
+ noUserFound: 'Nenhum usuário encontrado com esse nome',
925
+ checkUsername: 'Por favor, verifique o nome de usuário e tente novamente',
926
+ howToFind: 'Como encontrar amigos',
927
+ findInstructions: 'Procure amigos pelo nome de usuário. Tanto você quanto seu amigo precisam ter o GitHub conectado para enviar solicitações de amizade.',
928
+ requestSent: 'Solicitação de amizade enviada!',
929
+ requestAccepted: 'Solicitação de amizade aceita!',
930
+ requestRejected: 'Solicitação de amizade rejeitada',
931
+ friendRemoved: 'Amigo removido',
932
+ confirmRemove: 'Remover amigo',
933
+ confirmRemoveMessage: 'Tem certeza de que deseja remover este amigo?',
934
+ cannotAddYourself: 'Você não pode enviar uma solicitação de amizade para si mesmo',
935
+ bothMustHaveGithub: 'Ambos os usuários devem ter o GitHub conectado para serem amigos',
936
+ status: {
937
+ none: 'Não conectado',
938
+ requested: 'Solicitação enviada',
939
+ pending: 'Solicitação pendente',
940
+ friend: 'Amigos',
941
+ rejected: 'Rejeitada',
942
+ },
943
+ acceptRequest: 'Aceitar solicitação',
944
+ removeFriend: 'Remover dos amigos',
945
+ removeFriendConfirm: ({ name }: { name: string }) => `Tem certeza de que deseja remover ${name} dos seus amigos?`,
946
+ requestSentDescription: ({ name }: { name: string }) => `Sua solicitação de amizade foi enviada para ${name}`,
947
+ requestFriendship: 'Solicitar amizade',
948
+ cancelRequest: 'Cancelar solicitação de amizade',
949
+ cancelRequestConfirm: ({ name }: { name: string }) => `Cancelar sua solicitação de amizade para ${name}?`,
950
+ denyRequest: 'Recusar solicitação',
951
+ nowFriendsWith: ({ name }: { name: string }) => `Agora você é amigo de ${name}`,
952
+ },
953
+
954
+ usage: {
955
+ // Usage panel strings
956
+ today: 'Hoje',
957
+ last7Days: 'Últimos 7 dias',
958
+ last30Days: 'Últimos 30 dias',
959
+ totalTokens: 'Tokens totais',
960
+ totalCost: 'Custo total',
961
+ tokens: 'Tokens',
962
+ cost: 'Custo',
963
+ usageOverTime: 'Uso ao longo do tempo',
964
+ byModel: 'Por modelo',
965
+ noData: 'Nenhum dado de uso disponível',
966
+ },
967
+
968
+ imageUpload: {
969
+ permissionTitle: 'Acesso à biblioteca de fotos',
970
+ permissionMessage: 'Permita o acesso à sua biblioteca de fotos para anexar imagens às mensagens.',
971
+ limitTitle: 'Limite de imagens atingido',
972
+ limitMessage: ({ max }: { max: number }) => `Você pode anexar até ${max} imagens por mensagem.`,
973
+ fileTooLargeTitle: 'Arquivo muito grande',
974
+ fileTooLargeMessage: ({ name, maxMb }: { name: string; maxMb: number }) => `"${name}" excede o limite de ${maxMb}MB e não foi adicionado.`,
975
+ uploadFailedTitle: 'Falha no envio',
976
+ uploadFailedMessage: ({ count }: { count: number }) => count === 1
977
+ ? 'Não foi possível enviar uma imagem e não foi enviada.'
978
+ : `Não foi possível enviar ${count} imagens e não foram enviadas.`,
979
+ notSupportedTitle: 'Imagens não suportadas',
980
+ notSupportedMessage: 'Este agente não suporta anexos de imagem. Apenas o texto foi enviado.',
981
+ },
982
+
983
+ feed: {
984
+ // Feed notifications for friend requests and acceptances
985
+ friendRequestFrom: ({ name }: { name: string }) => `${name} enviou-lhe um pedido de amizade`,
986
+ friendRequestGeneric: 'Novo pedido de amizade',
987
+ friendAccepted: ({ name }: { name: string }) => `Agora você é amigo de ${name}`,
988
+ friendAcceptedGeneric: 'Pedido de amizade aceito',
989
+ }
990
+ } as const;
991
+
992
+ export type TranslationsPt = typeof pt;