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.
- package/.claude/agents/i18n-translator.md +119 -0
- package/.claude/settings.json +8 -0
- package/.eas/workflows/ota.yaml +9 -0
- package/.eas/workflows/preview.yaml +12 -0
- package/.easignore +12 -0
- package/.github/workflows/eas-build.yml +24 -0
- package/CHANGELOG.md +117 -0
- package/CLAUDE.md +413 -0
- package/GoogleService-Info.plist +30 -0
- package/LICENSE +21 -0
- package/NasTechapp.md +383 -0
- package/README.md +75 -0
- package/Stores.md +85 -0
- package/TERMS.md +83 -0
- package/app.config.js +153 -0
- package/babel.config.js +28 -0
- package/deploy/nastech-app.yaml +51 -0
- package/docs/marketing/README-creators.md +73 -0
- package/eas-build-post-install.sh +11 -0
- package/eas-build-pre-install.sh +27 -0
- package/eas.json +78 -0
- package/google-services.json +67 -0
- package/index.ts +3 -0
- package/logo.png +0 -0
- package/metro.config.js +54 -0
- package/nativewind-env.d.ts +1 -0
- package/package.json +233 -0
- package/patches/.keep +0 -0
- package/plugins/withEinkCompatibility.js +156 -0
- package/public/.well-known/apple-app-site-association +22 -0
- package/public/.well-known/assetlinks.json +12 -0
- package/public/canvaskit.wasm +0 -0
- package/public/favicon-active.ico +0 -0
- package/release-dev.sh +7 -0
- package/release-production.sh +3 -0
- package/release.cjs +160 -0
- package/sources/-session/SessionView.tsx +944 -0
- package/sources/-session/sessionOverlayNav.ts +34 -0
- package/sources/app/(app)/_layout.tsx +321 -0
- package/sources/app/(app)/artifacts/[id].tsx +279 -0
- package/sources/app/(app)/artifacts/edit/[id].tsx +318 -0
- package/sources/app/(app)/artifacts/index.tsx +264 -0
- package/sources/app/(app)/artifacts/new.tsx +219 -0
- package/sources/app/(app)/changelog.tsx +113 -0
- package/sources/app/(app)/dev/colors.tsx +197 -0
- package/sources/app/(app)/dev/device-info.tsx +183 -0
- package/sources/app/(app)/dev/expo-constants.tsx +394 -0
- package/sources/app/(app)/dev/index.tsx +400 -0
- package/sources/app/(app)/dev/input-styles.tsx +1951 -0
- package/sources/app/(app)/dev/inverted-list.tsx +295 -0
- package/sources/app/(app)/dev/list-demo.tsx +125 -0
- package/sources/app/(app)/dev/logs.tsx +160 -0
- package/sources/app/(app)/dev/messages-demo-data.ts +479 -0
- package/sources/app/(app)/dev/messages-demo.tsx +45 -0
- package/sources/app/(app)/dev/modal-demo.tsx +211 -0
- package/sources/app/(app)/dev/multi-text-input.tsx +224 -0
- package/sources/app/(app)/dev/purchases.tsx +228 -0
- package/sources/app/(app)/dev/qr-test.tsx +168 -0
- package/sources/app/(app)/dev/session-composer.tsx +812 -0
- package/sources/app/(app)/dev/shimmer-demo.tsx +275 -0
- package/sources/app/(app)/dev/tests.tsx +203 -0
- package/sources/app/(app)/dev/tools2.tsx +556 -0
- package/sources/app/(app)/dev/typography.tsx +177 -0
- package/sources/app/(app)/dev/unistyles-demo.tsx +376 -0
- package/sources/app/(app)/friends/index.tsx +167 -0
- package/sources/app/(app)/friends/search.tsx +232 -0
- package/sources/app/(app)/inbox/index.tsx +124 -0
- package/sources/app/(app)/index.tsx +264 -0
- package/sources/app/(app)/machine/[id].tsx +646 -0
- package/sources/app/(app)/new/index.tsx +1611 -0
- package/sources/app/(app)/restore/index.tsx +167 -0
- package/sources/app/(app)/restore/manual.tsx +138 -0
- package/sources/app/(app)/server.tsx +234 -0
- package/sources/app/(app)/session/[id]/file.tsx +527 -0
- package/sources/app/(app)/session/[id]/files.tsx +442 -0
- package/sources/app/(app)/session/[id]/info.tsx +655 -0
- package/sources/app/(app)/session/[id]/message/[messageId].tsx +125 -0
- package/sources/app/(app)/session/[id].tsx +10 -0
- package/sources/app/(app)/session/recent.tsx +270 -0
- package/sources/app/(app)/settings/account.tsx +600 -0
- package/sources/app/(app)/settings/agents.tsx +180 -0
- package/sources/app/(app)/settings/appearance.tsx +259 -0
- package/sources/app/(app)/settings/connect/claude.tsx +178 -0
- package/sources/app/(app)/settings/features.tsx +177 -0
- package/sources/app/(app)/settings/index.tsx +3 -0
- package/sources/app/(app)/settings/language.tsx +106 -0
- package/sources/app/(app)/settings/usage.tsx +11 -0
- package/sources/app/(app)/settings/voice/language.tsx +114 -0
- package/sources/app/(app)/settings/voice.tsx +274 -0
- package/sources/app/(app)/terminal/connect.tsx +241 -0
- package/sources/app/(app)/terminal/index.tsx +184 -0
- package/sources/app/(app)/text-selection.tsx +149 -0
- package/sources/app/(app)/user/[id].tsx +314 -0
- package/sources/app/+html.tsx +39 -0
- package/sources/app/_layout.tsx +402 -0
- package/sources/assets/animations/game.json +1 -0
- package/sources/assets/animations/owl.json +1 -0
- package/sources/assets/animations/popcorn.json +1 -0
- package/sources/assets/animations/robot.json +1 -0
- package/sources/assets/animations/sparkles.json +1 -0
- package/sources/assets/animations/stone.json +1 -0
- package/sources/assets/fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/sources/assets/fonts/IBMPlexMono-Italic.ttf +0 -0
- package/sources/assets/fonts/IBMPlexMono-Regular.ttf +0 -0
- package/sources/assets/fonts/IBMPlexMono-SemiBold.ttf +0 -0
- package/sources/assets/fonts/IBMPlexSans-Italic.ttf +0 -0
- package/sources/assets/fonts/IBMPlexSans-Regular.ttf +0 -0
- package/sources/assets/fonts/IBMPlexSans-SemiBold.ttf +0 -0
- package/sources/assets/fonts/SpaceMono-Regular.ttf +0 -0
- package/sources/assets/images/brutalist/Abstract-1.png +0 -0
- package/sources/assets/images/brutalist/Abstract-10.png +0 -0
- package/sources/assets/images/brutalist/Abstract-100.png +0 -0
- package/sources/assets/images/brutalist/Abstract-101.png +0 -0
- package/sources/assets/images/brutalist/Abstract-102.png +0 -0
- package/sources/assets/images/brutalist/Abstract-103.png +0 -0
- package/sources/assets/images/brutalist/Abstract-104.png +0 -0
- package/sources/assets/images/brutalist/Abstract-105.png +0 -0
- package/sources/assets/images/brutalist/Abstract-106.png +0 -0
- package/sources/assets/images/brutalist/Abstract-107.png +0 -0
- package/sources/assets/images/brutalist/Abstract-108.png +0 -0
- package/sources/assets/images/brutalist/Abstract-109.png +0 -0
- package/sources/assets/images/brutalist/Abstract-11.png +0 -0
- package/sources/assets/images/brutalist/Abstract-110.png +0 -0
- package/sources/assets/images/brutalist/Abstract-111.png +0 -0
- package/sources/assets/images/brutalist/Abstract-112.png +0 -0
- package/sources/assets/images/brutalist/Abstract-113.png +0 -0
- package/sources/assets/images/brutalist/Abstract-114.png +0 -0
- package/sources/assets/images/brutalist/Abstract-115.png +0 -0
- package/sources/assets/images/brutalist/Abstract-116.png +0 -0
- package/sources/assets/images/brutalist/Abstract-117.png +0 -0
- package/sources/assets/images/brutalist/Abstract-118.png +0 -0
- package/sources/assets/images/brutalist/Abstract-119.png +0 -0
- package/sources/assets/images/brutalist/Abstract-12.png +0 -0
- package/sources/assets/images/brutalist/Abstract-120.png +0 -0
- package/sources/assets/images/brutalist/Abstract-121.png +0 -0
- package/sources/assets/images/brutalist/Abstract-122.png +0 -0
- package/sources/assets/images/brutalist/Abstract-123.png +0 -0
- package/sources/assets/images/brutalist/Abstract-124.png +0 -0
- package/sources/assets/images/brutalist/Abstract-125.png +0 -0
- package/sources/assets/images/brutalist/Abstract-126.png +0 -0
- package/sources/assets/images/brutalist/Abstract-127.png +0 -0
- package/sources/assets/images/brutalist/Abstract-128.png +0 -0
- package/sources/assets/images/brutalist/Abstract-129.png +0 -0
- package/sources/assets/images/brutalist/Abstract-13.png +0 -0
- package/sources/assets/images/brutalist/Abstract-130.png +0 -0
- package/sources/assets/images/brutalist/Abstract-131.png +0 -0
- package/sources/assets/images/brutalist/Abstract-132.png +0 -0
- package/sources/assets/images/brutalist/Abstract-133.png +0 -0
- package/sources/assets/images/brutalist/Abstract-134.png +0 -0
- package/sources/assets/images/brutalist/Abstract-135.png +0 -0
- package/sources/assets/images/brutalist/Abstract-136.png +0 -0
- package/sources/assets/images/brutalist/Abstract-137.png +0 -0
- package/sources/assets/images/brutalist/Abstract-138.png +0 -0
- package/sources/assets/images/brutalist/Abstract-139.png +0 -0
- package/sources/assets/images/brutalist/Abstract-14.png +0 -0
- package/sources/assets/images/brutalist/Abstract-140.png +0 -0
- package/sources/assets/images/brutalist/Abstract-141.png +0 -0
- package/sources/assets/images/brutalist/Abstract-142.png +0 -0
- package/sources/assets/images/brutalist/Abstract-143.png +0 -0
- package/sources/assets/images/brutalist/Abstract-144.png +0 -0
- package/sources/assets/images/brutalist/Abstract-145.png +0 -0
- package/sources/assets/images/brutalist/Abstract-146.png +0 -0
- package/sources/assets/images/brutalist/Abstract-147.png +0 -0
- package/sources/assets/images/brutalist/Abstract-148.png +0 -0
- package/sources/assets/images/brutalist/Abstract-149.png +0 -0
- package/sources/assets/images/brutalist/Abstract-15.png +0 -0
- package/sources/assets/images/brutalist/Abstract-150.png +0 -0
- package/sources/assets/images/brutalist/Abstract-151.png +0 -0
- package/sources/assets/images/brutalist/Abstract-152.png +0 -0
- package/sources/assets/images/brutalist/Abstract-153.png +0 -0
- package/sources/assets/images/brutalist/Abstract-154.png +0 -0
- package/sources/assets/images/brutalist/Abstract-155.png +0 -0
- package/sources/assets/images/brutalist/Abstract-156.png +0 -0
- package/sources/assets/images/brutalist/Abstract-157.png +0 -0
- package/sources/assets/images/brutalist/Abstract-158.png +0 -0
- package/sources/assets/images/brutalist/Abstract-159.png +0 -0
- package/sources/assets/images/brutalist/Abstract-16.png +0 -0
- package/sources/assets/images/brutalist/Abstract-160.png +0 -0
- package/sources/assets/images/brutalist/Abstract-161.png +0 -0
- package/sources/assets/images/brutalist/Abstract-162.png +0 -0
- package/sources/assets/images/brutalist/Abstract-163.png +0 -0
- package/sources/assets/images/brutalist/Abstract-164.png +0 -0
- package/sources/assets/images/brutalist/Abstract-165.png +0 -0
- package/sources/assets/images/brutalist/Abstract-166.png +0 -0
- package/sources/assets/images/brutalist/Abstract-167.png +0 -0
- package/sources/assets/images/brutalist/Abstract-168.png +0 -0
- package/sources/assets/images/brutalist/Abstract-169.png +0 -0
- package/sources/assets/images/brutalist/Abstract-17.png +0 -0
- package/sources/assets/images/brutalist/Abstract-170.png +0 -0
- package/sources/assets/images/brutalist/Abstract-171.png +0 -0
- package/sources/assets/images/brutalist/Abstract-172.png +0 -0
- package/sources/assets/images/brutalist/Abstract-173.png +0 -0
- package/sources/assets/images/brutalist/Abstract-174.png +0 -0
- package/sources/assets/images/brutalist/Abstract-175.png +0 -0
- package/sources/assets/images/brutalist/Abstract-176.png +0 -0
- package/sources/assets/images/brutalist/Abstract-177.png +0 -0
- package/sources/assets/images/brutalist/Abstract-178.png +0 -0
- package/sources/assets/images/brutalist/Abstract-179.png +0 -0
- package/sources/assets/images/brutalist/Abstract-18.png +0 -0
- package/sources/assets/images/brutalist/Abstract-180.png +0 -0
- package/sources/assets/images/brutalist/Abstract-181.png +0 -0
- package/sources/assets/images/brutalist/Abstract-182.png +0 -0
- package/sources/assets/images/brutalist/Abstract-183.png +0 -0
- package/sources/assets/images/brutalist/Abstract-184.png +0 -0
- package/sources/assets/images/brutalist/Abstract-185.png +0 -0
- package/sources/assets/images/brutalist/Abstract-186.png +0 -0
- package/sources/assets/images/brutalist/Abstract-187.png +0 -0
- package/sources/assets/images/brutalist/Abstract-188.png +0 -0
- package/sources/assets/images/brutalist/Abstract-189.png +0 -0
- package/sources/assets/images/brutalist/Abstract-19.png +0 -0
- package/sources/assets/images/brutalist/Abstract-190.png +0 -0
- package/sources/assets/images/brutalist/Abstract-191.png +0 -0
- package/sources/assets/images/brutalist/Abstract-192.png +0 -0
- package/sources/assets/images/brutalist/Abstract-193.png +0 -0
- package/sources/assets/images/brutalist/Abstract-194.png +0 -0
- package/sources/assets/images/brutalist/Abstract-195.png +0 -0
- package/sources/assets/images/brutalist/Abstract-196.png +0 -0
- package/sources/assets/images/brutalist/Abstract-197.png +0 -0
- package/sources/assets/images/brutalist/Abstract-198.png +0 -0
- package/sources/assets/images/brutalist/Abstract-199.png +0 -0
- package/sources/assets/images/brutalist/Abstract-2.png +0 -0
- package/sources/assets/images/brutalist/Abstract-20.png +0 -0
- package/sources/assets/images/brutalist/Abstract-200.png +0 -0
- package/sources/assets/images/brutalist/Abstract-201.png +0 -0
- package/sources/assets/images/brutalist/Abstract-202.png +0 -0
- package/sources/assets/images/brutalist/Abstract-203.png +0 -0
- package/sources/assets/images/brutalist/Abstract-204.png +0 -0
- package/sources/assets/images/brutalist/Abstract-205.png +0 -0
- package/sources/assets/images/brutalist/Abstract-206.png +0 -0
- package/sources/assets/images/brutalist/Abstract-207.png +0 -0
- package/sources/assets/images/brutalist/Abstract-208.png +0 -0
- package/sources/assets/images/brutalist/Abstract-209.png +0 -0
- package/sources/assets/images/brutalist/Abstract-21.png +0 -0
- package/sources/assets/images/brutalist/Abstract-210.png +0 -0
- package/sources/assets/images/brutalist/Abstract-211.png +0 -0
- package/sources/assets/images/brutalist/Abstract-212.png +0 -0
- package/sources/assets/images/brutalist/Abstract-213.png +0 -0
- package/sources/assets/images/brutalist/Abstract-214.png +0 -0
- package/sources/assets/images/brutalist/Abstract-215.png +0 -0
- package/sources/assets/images/brutalist/Abstract-216.png +0 -0
- package/sources/assets/images/brutalist/Abstract-217.png +0 -0
- package/sources/assets/images/brutalist/Abstract-218.png +0 -0
- package/sources/assets/images/brutalist/Abstract-219.png +0 -0
- package/sources/assets/images/brutalist/Abstract-22.png +0 -0
- package/sources/assets/images/brutalist/Abstract-220.png +0 -0
- package/sources/assets/images/brutalist/Abstract-221.png +0 -0
- package/sources/assets/images/brutalist/Abstract-222.png +0 -0
- package/sources/assets/images/brutalist/Abstract-223.png +0 -0
- package/sources/assets/images/brutalist/Abstract-224.png +0 -0
- package/sources/assets/images/brutalist/Abstract-225.png +0 -0
- package/sources/assets/images/brutalist/Abstract-226.png +0 -0
- package/sources/assets/images/brutalist/Abstract-227.png +0 -0
- package/sources/assets/images/brutalist/Abstract-228.png +0 -0
- package/sources/assets/images/brutalist/Abstract-229.png +0 -0
- package/sources/assets/images/brutalist/Abstract-23.png +0 -0
- package/sources/assets/images/brutalist/Abstract-230.png +0 -0
- package/sources/assets/images/brutalist/Abstract-231.png +0 -0
- package/sources/assets/images/brutalist/Abstract-232.png +0 -0
- package/sources/assets/images/brutalist/Abstract-233.png +0 -0
- package/sources/assets/images/brutalist/Abstract-234.png +0 -0
- package/sources/assets/images/brutalist/Abstract-235.png +0 -0
- package/sources/assets/images/brutalist/Abstract-236.png +0 -0
- package/sources/assets/images/brutalist/Abstract-237.png +0 -0
- package/sources/assets/images/brutalist/Abstract-238.png +0 -0
- package/sources/assets/images/brutalist/Abstract-239.png +0 -0
- package/sources/assets/images/brutalist/Abstract-24.png +0 -0
- package/sources/assets/images/brutalist/Abstract-240.png +0 -0
- package/sources/assets/images/brutalist/Abstract-241.png +0 -0
- package/sources/assets/images/brutalist/Abstract-242.png +0 -0
- package/sources/assets/images/brutalist/Abstract-243.png +0 -0
- package/sources/assets/images/brutalist/Abstract-244.png +0 -0
- package/sources/assets/images/brutalist/Abstract-245.png +0 -0
- package/sources/assets/images/brutalist/Abstract-246.png +0 -0
- package/sources/assets/images/brutalist/Abstract-247.png +0 -0
- package/sources/assets/images/brutalist/Abstract-248.png +0 -0
- package/sources/assets/images/brutalist/Abstract-249.png +0 -0
- package/sources/assets/images/brutalist/Abstract-25.png +0 -0
- package/sources/assets/images/brutalist/Abstract-250.png +0 -0
- package/sources/assets/images/brutalist/Abstract-251.png +0 -0
- package/sources/assets/images/brutalist/Abstract-252.png +0 -0
- package/sources/assets/images/brutalist/Abstract-253.png +0 -0
- package/sources/assets/images/brutalist/Abstract-254.png +0 -0
- package/sources/assets/images/brutalist/Abstract-255.png +0 -0
- package/sources/assets/images/brutalist/Abstract-256.png +0 -0
- package/sources/assets/images/brutalist/Abstract-257.png +0 -0
- package/sources/assets/images/brutalist/Abstract-258.png +0 -0
- package/sources/assets/images/brutalist/Abstract-259.png +0 -0
- package/sources/assets/images/brutalist/Abstract-26.png +0 -0
- package/sources/assets/images/brutalist/Abstract-260.png +0 -0
- package/sources/assets/images/brutalist/Abstract-261.png +0 -0
- package/sources/assets/images/brutalist/Abstract-262.png +0 -0
- package/sources/assets/images/brutalist/Abstract-27.png +0 -0
- package/sources/assets/images/brutalist/Abstract-28.png +0 -0
- package/sources/assets/images/brutalist/Abstract-29.png +0 -0
- package/sources/assets/images/brutalist/Abstract-3.png +0 -0
- package/sources/assets/images/brutalist/Abstract-30.png +0 -0
- package/sources/assets/images/brutalist/Abstract-31.png +0 -0
- package/sources/assets/images/brutalist/Abstract-32.png +0 -0
- package/sources/assets/images/brutalist/Abstract-33.png +0 -0
- package/sources/assets/images/brutalist/Abstract-34.png +0 -0
- package/sources/assets/images/brutalist/Abstract-35.png +0 -0
- package/sources/assets/images/brutalist/Abstract-36.png +0 -0
- package/sources/assets/images/brutalist/Abstract-37.png +0 -0
- package/sources/assets/images/brutalist/Abstract-38.png +0 -0
- package/sources/assets/images/brutalist/Abstract-39.png +0 -0
- package/sources/assets/images/brutalist/Abstract-4.png +0 -0
- package/sources/assets/images/brutalist/Abstract-40.png +0 -0
- package/sources/assets/images/brutalist/Abstract-41.png +0 -0
- package/sources/assets/images/brutalist/Abstract-42.png +0 -0
- package/sources/assets/images/brutalist/Abstract-43.png +0 -0
- package/sources/assets/images/brutalist/Abstract-44.png +0 -0
- package/sources/assets/images/brutalist/Abstract-45.png +0 -0
- package/sources/assets/images/brutalist/Abstract-46.png +0 -0
- package/sources/assets/images/brutalist/Abstract-47.png +0 -0
- package/sources/assets/images/brutalist/Abstract-48.png +0 -0
- package/sources/assets/images/brutalist/Abstract-49.png +0 -0
- package/sources/assets/images/brutalist/Abstract-5.png +0 -0
- package/sources/assets/images/brutalist/Abstract-50.png +0 -0
- package/sources/assets/images/brutalist/Abstract-51.png +0 -0
- package/sources/assets/images/brutalist/Abstract-52.png +0 -0
- package/sources/assets/images/brutalist/Abstract-53.png +0 -0
- package/sources/assets/images/brutalist/Abstract-54.png +0 -0
- package/sources/assets/images/brutalist/Abstract-55.png +0 -0
- package/sources/assets/images/brutalist/Abstract-56.png +0 -0
- package/sources/assets/images/brutalist/Abstract-57.png +0 -0
- package/sources/assets/images/brutalist/Abstract-58.png +0 -0
- package/sources/assets/images/brutalist/Abstract-59.png +0 -0
- package/sources/assets/images/brutalist/Abstract-6.png +0 -0
- package/sources/assets/images/brutalist/Abstract-60.png +0 -0
- package/sources/assets/images/brutalist/Abstract-61.png +0 -0
- package/sources/assets/images/brutalist/Abstract-62.png +0 -0
- package/sources/assets/images/brutalist/Abstract-63.png +0 -0
- package/sources/assets/images/brutalist/Abstract-64.png +0 -0
- package/sources/assets/images/brutalist/Abstract-65.png +0 -0
- package/sources/assets/images/brutalist/Abstract-66.png +0 -0
- package/sources/assets/images/brutalist/Abstract-67.png +0 -0
- package/sources/assets/images/brutalist/Abstract-68.png +0 -0
- package/sources/assets/images/brutalist/Abstract-69.png +0 -0
- package/sources/assets/images/brutalist/Abstract-7.png +0 -0
- package/sources/assets/images/brutalist/Abstract-70.png +0 -0
- package/sources/assets/images/brutalist/Abstract-71.png +0 -0
- package/sources/assets/images/brutalist/Abstract-72.png +0 -0
- package/sources/assets/images/brutalist/Abstract-73.png +0 -0
- package/sources/assets/images/brutalist/Abstract-74.png +0 -0
- package/sources/assets/images/brutalist/Abstract-75.png +0 -0
- package/sources/assets/images/brutalist/Abstract-76.png +0 -0
- package/sources/assets/images/brutalist/Abstract-77.png +0 -0
- package/sources/assets/images/brutalist/Abstract-78.png +0 -0
- package/sources/assets/images/brutalist/Abstract-79.png +0 -0
- package/sources/assets/images/brutalist/Abstract-8.png +0 -0
- package/sources/assets/images/brutalist/Abstract-80.png +0 -0
- package/sources/assets/images/brutalist/Abstract-81.png +0 -0
- package/sources/assets/images/brutalist/Abstract-82.png +0 -0
- package/sources/assets/images/brutalist/Abstract-83.png +0 -0
- package/sources/assets/images/brutalist/Abstract-84.png +0 -0
- package/sources/assets/images/brutalist/Abstract-85.png +0 -0
- package/sources/assets/images/brutalist/Abstract-86.png +0 -0
- package/sources/assets/images/brutalist/Abstract-87.png +0 -0
- package/sources/assets/images/brutalist/Abstract-88.png +0 -0
- package/sources/assets/images/brutalist/Abstract-89.png +0 -0
- package/sources/assets/images/brutalist/Abstract-9.png +0 -0
- package/sources/assets/images/brutalist/Abstract-90.png +0 -0
- package/sources/assets/images/brutalist/Abstract-91.png +0 -0
- package/sources/assets/images/brutalist/Abstract-92.png +0 -0
- package/sources/assets/images/brutalist/Abstract-93.png +0 -0
- package/sources/assets/images/brutalist/Abstract-94.png +0 -0
- package/sources/assets/images/brutalist/Abstract-95.png +0 -0
- package/sources/assets/images/brutalist/Abstract-96.png +0 -0
- package/sources/assets/images/brutalist/Abstract-97.png +0 -0
- package/sources/assets/images/brutalist/Abstract-98.png +0 -0
- package/sources/assets/images/brutalist/Abstract-99.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-1.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-10.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-11.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-12.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-13.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-14.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-15.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-16.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-17.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-18.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-19.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-2.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-20.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-21.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-22.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-23.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-24.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-25.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-26.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-27.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-28.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-29.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-3.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-30.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-31.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-32.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-33.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-34.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-35.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-36.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-37.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-38.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-39.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-4.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-40.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-5.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-6.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-7.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-8.png +0 -0
- package/sources/assets/images/brutalist/Bauhaus-9.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-1.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-10.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-100.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-101.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-102.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-103.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-104.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-105.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-106.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-107.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-108.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-109.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-11.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-110.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-111.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-112.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-113.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-114.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-115.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-116.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-117.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-118.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-12.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-13.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-14.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-15.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-16.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-17.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-18.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-19.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-2.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-20.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-21.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-22.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-23.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-24.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-25.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-26.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-27.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-28.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-29.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-3.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-30.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-31.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-32.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-33.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-34.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-35.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-36.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-37.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-38.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-39.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-4.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-40.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-41.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-42.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-43.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-44.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-45.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-46.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-47.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-48.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-49.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-5.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-50.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-51.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-52.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-53.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-54.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-55.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-56.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-57.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-58.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-59.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-6.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-60.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-61.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-62.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-63.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-64.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-65.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-66.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-67.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-68.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-69.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-7.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-70.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-71.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-72.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-73.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-74.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-75.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-76.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-77.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-78.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-79.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-8.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-80.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-81.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-82.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-83.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-84.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-85.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-86.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-87.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-88.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-89.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-9.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-90.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-91.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-92.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-93.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-94.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-95.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-96.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-97.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-98.png +0 -0
- package/sources/assets/images/brutalist/Brutalism-99.png +0 -0
- package/sources/assets/images/favicon-active.png +0 -0
- package/sources/assets/images/favicon.png +0 -0
- package/sources/assets/images/gradients/01.png +0 -0
- package/sources/assets/images/gradients/02.png +0 -0
- package/sources/assets/images/gradients/03.png +0 -0
- package/sources/assets/images/gradients/04.png +0 -0
- package/sources/assets/images/gradients/05.png +0 -0
- package/sources/assets/images/gradients/06.png +0 -0
- package/sources/assets/images/gradients/07.png +0 -0
- package/sources/assets/images/gradients/08.png +0 -0
- package/sources/assets/images/gradients/09.png +0 -0
- package/sources/assets/images/gradients/10.png +0 -0
- package/sources/assets/images/gradients/100.png +0 -0
- package/sources/assets/images/gradients/11.png +0 -0
- package/sources/assets/images/gradients/12.png +0 -0
- package/sources/assets/images/gradients/13.png +0 -0
- package/sources/assets/images/gradients/14.png +0 -0
- package/sources/assets/images/gradients/15.png +0 -0
- package/sources/assets/images/gradients/16.png +0 -0
- package/sources/assets/images/gradients/17.png +0 -0
- package/sources/assets/images/gradients/18.png +0 -0
- package/sources/assets/images/gradients/19.png +0 -0
- package/sources/assets/images/gradients/20.png +0 -0
- package/sources/assets/images/gradients/21.png +0 -0
- package/sources/assets/images/gradients/22.png +0 -0
- package/sources/assets/images/gradients/23.png +0 -0
- package/sources/assets/images/gradients/24.png +0 -0
- package/sources/assets/images/gradients/25.png +0 -0
- package/sources/assets/images/gradients/26.png +0 -0
- package/sources/assets/images/gradients/27.png +0 -0
- package/sources/assets/images/gradients/28.png +0 -0
- package/sources/assets/images/gradients/29.png +0 -0
- package/sources/assets/images/gradients/30.png +0 -0
- package/sources/assets/images/gradients/31.png +0 -0
- package/sources/assets/images/gradients/32.png +0 -0
- package/sources/assets/images/gradients/33.png +0 -0
- package/sources/assets/images/gradients/34.png +0 -0
- package/sources/assets/images/gradients/35.png +0 -0
- package/sources/assets/images/gradients/36.png +0 -0
- package/sources/assets/images/gradients/37.png +0 -0
- package/sources/assets/images/gradients/38.png +0 -0
- package/sources/assets/images/gradients/39.png +0 -0
- package/sources/assets/images/gradients/40.png +0 -0
- package/sources/assets/images/gradients/41.png +0 -0
- package/sources/assets/images/gradients/42.png +0 -0
- package/sources/assets/images/gradients/43.png +0 -0
- package/sources/assets/images/gradients/44.png +0 -0
- package/sources/assets/images/gradients/45.png +0 -0
- package/sources/assets/images/gradients/46.png +0 -0
- package/sources/assets/images/gradients/47.png +0 -0
- package/sources/assets/images/gradients/48.png +0 -0
- package/sources/assets/images/gradients/49.png +0 -0
- package/sources/assets/images/gradients/50.png +0 -0
- package/sources/assets/images/gradients/51.png +0 -0
- package/sources/assets/images/gradients/52.png +0 -0
- package/sources/assets/images/gradients/53.png +0 -0
- package/sources/assets/images/gradients/54.png +0 -0
- package/sources/assets/images/gradients/55.png +0 -0
- package/sources/assets/images/gradients/56.png +0 -0
- package/sources/assets/images/gradients/57.png +0 -0
- package/sources/assets/images/gradients/58.png +0 -0
- package/sources/assets/images/gradients/59.png +0 -0
- package/sources/assets/images/gradients/60.png +0 -0
- package/sources/assets/images/gradients/61.png +0 -0
- package/sources/assets/images/gradients/62.png +0 -0
- package/sources/assets/images/gradients/63.png +0 -0
- package/sources/assets/images/gradients/64.png +0 -0
- package/sources/assets/images/gradients/65.png +0 -0
- package/sources/assets/images/gradients/66.png +0 -0
- package/sources/assets/images/gradients/67.png +0 -0
- package/sources/assets/images/gradients/68.png +0 -0
- package/sources/assets/images/gradients/69.png +0 -0
- package/sources/assets/images/gradients/70.png +0 -0
- package/sources/assets/images/gradients/71.png +0 -0
- package/sources/assets/images/gradients/72.png +0 -0
- package/sources/assets/images/gradients/73.png +0 -0
- package/sources/assets/images/gradients/74.png +0 -0
- package/sources/assets/images/gradients/75.png +0 -0
- package/sources/assets/images/gradients/76.png +0 -0
- package/sources/assets/images/gradients/77.png +0 -0
- package/sources/assets/images/gradients/78.png +0 -0
- package/sources/assets/images/gradients/79.png +0 -0
- package/sources/assets/images/gradients/80.png +0 -0
- package/sources/assets/images/gradients/81.png +0 -0
- package/sources/assets/images/gradients/82.png +0 -0
- package/sources/assets/images/gradients/83.png +0 -0
- package/sources/assets/images/gradients/84.png +0 -0
- package/sources/assets/images/gradients/85.png +0 -0
- package/sources/assets/images/gradients/86.png +0 -0
- package/sources/assets/images/gradients/87.png +0 -0
- package/sources/assets/images/gradients/88.png +0 -0
- package/sources/assets/images/gradients/89.png +0 -0
- package/sources/assets/images/gradients/90.png +0 -0
- package/sources/assets/images/gradients/91.png +0 -0
- package/sources/assets/images/gradients/92.png +0 -0
- package/sources/assets/images/gradients/93.png +0 -0
- package/sources/assets/images/gradients/94.png +0 -0
- package/sources/assets/images/gradients/95.png +0 -0
- package/sources/assets/images/gradients/96.png +0 -0
- package/sources/assets/images/gradients/97.png +0 -0
- package/sources/assets/images/gradients/98.png +0 -0
- package/sources/assets/images/gradients/99.png +0 -0
- package/sources/assets/images/icon-adaptive.png +0 -0
- package/sources/assets/images/icon-claude.png +0 -0
- package/sources/assets/images/icon-claude@2x.png +0 -0
- package/sources/assets/images/icon-claude@3x.png +0 -0
- package/sources/assets/images/icon-gemini.png +0 -0
- package/sources/assets/images/icon-gemini@2x.png +0 -0
- package/sources/assets/images/icon-gemini@3x.png +0 -0
- package/sources/assets/images/icon-gpt.png +0 -0
- package/sources/assets/images/icon-gpt@2x.png +0 -0
- package/sources/assets/images/icon-gpt@3x.png +0 -0
- package/sources/assets/images/icon-monochrome.png +0 -0
- package/sources/assets/images/icon-notification.png +0 -0
- package/sources/assets/images/icon-openclaw.png +0 -0
- package/sources/assets/images/icon-openclaw@2x.png +0 -0
- package/sources/assets/images/icon-openclaw@3x.png +0 -0
- package/sources/assets/images/icon-tauri.png +0 -0
- package/sources/assets/images/icon-voice-white.png +0 -0
- package/sources/assets/images/icon-voice.png +0 -0
- package/sources/assets/images/icon-voice@2x.png +0 -0
- package/sources/assets/images/icon-voice@3x.png +0 -0
- package/sources/assets/images/icon.png +0 -0
- package/sources/assets/images/logo-black.png +0 -0
- package/sources/assets/images/logo-white.png +0 -0
- package/sources/assets/images/logotype-dark.png +0 -0
- package/sources/assets/images/logotype-dark@2x.png +0 -0
- package/sources/assets/images/logotype-dark@3x.png +0 -0
- package/sources/assets/images/logotype-light.png +0 -0
- package/sources/assets/images/logotype-light@2x.png +0 -0
- package/sources/assets/images/logotype-light@3x.png +0 -0
- package/sources/assets/images/logotype.png +0 -0
- package/sources/assets/images/logotype@2x.png +0 -0
- package/sources/assets/images/logotype@3x.png +0 -0
- package/sources/assets/images/splash-android-dark.png +0 -0
- package/sources/assets/images/splash-android-light.png +0 -0
- package/sources/assets/images/transparent.png +0 -0
- package/sources/assets/images/zen-icon.png +0 -0
- package/sources/auth/AuthContext.tsx +100 -0
- package/sources/auth/authAccountApprove.ts +2 -0
- package/sources/auth/authApprove.ts +2 -0
- package/sources/auth/authChallenge.ts +8 -0
- package/sources/auth/authGetToken.ts +4 -0
- package/sources/auth/authQRStart.ts +17 -0
- package/sources/auth/authQRWait.ts +13 -0
- package/sources/auth/secretKeyBackup.spec.ts +465 -0
- package/sources/auth/secretKeyBackup.ts +179 -0
- package/sources/auth/tokenStorage.ts +27 -0
- package/sources/changelog/changelog.json +60 -0
- package/sources/changelog/index.ts +3 -0
- package/sources/changelog/parser.ts +23 -0
- package/sources/changelog/storage.ts +17 -0
- package/sources/changelog/types.ts +10 -0
- package/sources/components/ActiveSessionsGroupCompact.tsx +567 -0
- package/sources/components/AgentContentView.ios.tsx +70 -0
- package/sources/components/AgentContentView.tsx +48 -0
- package/sources/components/AgentInput.tsx +1468 -0
- package/sources/components/AgentInputAttachmentStrip.tsx +122 -0
- package/sources/components/AgentInputAutocomplete.tsx +96 -0
- package/sources/components/AgentInputSuggestionView.tsx +106 -0
- package/sources/components/AllFilesDiffView.tsx +515 -0
- package/sources/components/Avatar.tsx +149 -0
- package/sources/components/AvatarBrutalist.tsx +501 -0
- package/sources/components/AvatarGradient.tsx +147 -0
- package/sources/components/AvatarSkia.tsx +111 -0
- package/sources/components/AvatarSkia.web.tsx +113 -0
- package/sources/components/ChatFooter.tsx +50 -0
- package/sources/components/ChatHeaderView.tsx +180 -0
- package/sources/components/ChatList.tsx +283 -0
- package/sources/components/CodeEditor.tsx +22 -0
- package/sources/components/CodeEditor.web.tsx +180 -0
- package/sources/components/CodeView.tsx +33 -0
- package/sources/components/CommandPalette/CommandPalette.tsx +72 -0
- package/sources/components/CommandPalette/CommandPaletteInput.tsx +65 -0
- package/sources/components/CommandPalette/CommandPaletteItem.tsx +141 -0
- package/sources/components/CommandPalette/CommandPaletteModal.tsx +148 -0
- package/sources/components/CommandPalette/CommandPaletteProvider.tsx +141 -0
- package/sources/components/CommandPalette/CommandPaletteResults.tsx +129 -0
- package/sources/components/CommandPalette/index.ts +3 -0
- package/sources/components/CommandPalette/types.ts +15 -0
- package/sources/components/CommandPalette/useCommandPalette.ts +107 -0
- package/sources/components/CommandView.tsx +135 -0
- package/sources/components/CompactGitStatus.tsx +88 -0
- package/sources/components/ConnectButton.tsx +117 -0
- package/sources/components/Deferred.tsx +18 -0
- package/sources/components/DuplicateSheet.tsx +295 -0
- package/sources/components/EmptyMainScreen.tsx +171 -0
- package/sources/components/EmptyMessages.tsx +123 -0
- package/sources/components/EmptySessionsTablet.tsx +111 -0
- package/sources/components/ExternalLink.tsx +22 -0
- package/sources/components/FAB.tsx +53 -0
- package/sources/components/FABWide.tsx +59 -0
- package/sources/components/FeedItemCard.tsx +98 -0
- package/sources/components/FileIcon.tsx +63 -0
- package/sources/components/FileViewPanel.tsx +673 -0
- package/sources/components/FilesSidebar.tsx +739 -0
- package/sources/components/FloatingOverlay.tsx +48 -0
- package/sources/components/GitStatusBadge.tsx +82 -0
- package/sources/components/HeaderLogo.tsx +28 -0
- package/sources/components/HomeHeader.tsx +243 -0
- package/sources/components/HorizontalScrollView.tsx +88 -0
- package/sources/components/InboxView.tsx +260 -0
- package/sources/components/InlineFileDiff.tsx +277 -0
- package/sources/components/Item.tsx +315 -0
- package/sources/components/ItemGroup.tsx +147 -0
- package/sources/components/ItemList.tsx +102 -0
- package/sources/components/MainView.tsx +324 -0
- package/sources/components/MessageView.tsx +299 -0
- package/sources/components/MultiTextInput.tsx +285 -0
- package/sources/components/MultiTextInput.web.tsx +220 -0
- package/sources/components/OAuthView.tsx +374 -0
- package/sources/components/PermissionModeSelector.tsx +68 -0
- package/sources/components/PlaceholderContainerView.tsx +47 -0
- package/sources/components/PlusPlus.tsx +34 -0
- package/sources/components/PlusPlus.web.tsx +34 -0
- package/sources/components/ProjectGitStatus.tsx +102 -0
- package/sources/components/RoundButton.tsx +130 -0
- package/sources/components/SearchableListSelector.tsx +675 -0
- package/sources/components/SessionActionsNativeMenu.android.tsx +58 -0
- package/sources/components/SessionActionsNativeMenu.ios.tsx +55 -0
- package/sources/components/SessionActionsNativeMenu.tsx +20 -0
- package/sources/components/SessionActionsNativeMenu.web.tsx +13 -0
- package/sources/components/SessionActionsPopover.tsx +240 -0
- package/sources/components/SessionsList.tsx +471 -0
- package/sources/components/SessionsListWrapper.tsx +72 -0
- package/sources/components/SettingsView.tsx +470 -0
- package/sources/components/SettingsViewWrapper.tsx +21 -0
- package/sources/components/Shaker.tsx +42 -0
- package/sources/components/Shaker.web.tsx +46 -0
- package/sources/components/ShimmerView.tsx +106 -0
- package/sources/components/SidebarNavigator.tsx +218 -0
- package/sources/components/SidebarView.tsx +104 -0
- package/sources/components/SimpleSyntaxHighlighter.tsx +322 -0
- package/sources/components/StatusBarProvider.tsx +12 -0
- package/sources/components/StatusDot.tsx +49 -0
- package/sources/components/StyledText.tsx +35 -0
- package/sources/components/Switch.tsx +20 -0
- package/sources/components/TabBar.tsx +140 -0
- package/sources/components/ToolGroupView.tsx +101 -0
- package/sources/components/TransitionStack.tsx +14 -0
- package/sources/components/UpdateBanner.tsx +74 -0
- package/sources/components/UserCard.tsx +41 -0
- package/sources/components/UserSearchResult.tsx +129 -0
- package/sources/components/VoiceAssistantStatusBar.tsx +260 -0
- package/sources/components/VoiceBars.tsx +95 -0
- package/sources/components/autocomplete/applySuggestion.test.ts +194 -0
- package/sources/components/autocomplete/applySuggestion.ts +61 -0
- package/sources/components/autocomplete/findActiveWord.test.ts +365 -0
- package/sources/components/autocomplete/findActiveWord.ts +207 -0
- package/sources/components/autocomplete/suggestions.ts +79 -0
- package/sources/components/autocomplete/useActiveSuggestions.ts +130 -0
- package/sources/components/autocomplete/useActiveWord.ts +19 -0
- package/sources/components/diff/DiffView.tsx +188 -0
- package/sources/components/diff/PierreDiffView.tsx +253 -0
- package/sources/components/diff/calculateDiff.ts +317 -0
- package/sources/components/entityColor.ts +51 -0
- package/sources/components/haptics.ts +9 -0
- package/sources/components/haptics.web.ts +7 -0
- package/sources/components/layout.ts +44 -0
- package/sources/components/markdown/MarkdownView.tsx +670 -0
- package/sources/components/markdown/MermaidRenderer.tsx +233 -0
- package/sources/components/markdown/linkUtils.test.ts +17 -0
- package/sources/components/markdown/linkUtils.ts +5 -0
- package/sources/components/markdown/parseMarkdown.test.ts +64 -0
- package/sources/components/markdown/parseMarkdown.ts +46 -0
- package/sources/components/markdown/parseMarkdownBlock.test.ts +108 -0
- package/sources/components/markdown/parseMarkdownBlock.ts +200 -0
- package/sources/components/markdown/parseMarkdownSpans.ts +88 -0
- package/sources/components/modelModeOptions.test.ts +114 -0
- package/sources/components/modelModeOptions.ts +257 -0
- package/sources/components/navigation/Header.tsx +252 -0
- package/sources/components/parseLocalCommandMessage.spec.ts +96 -0
- package/sources/components/parseLocalCommandMessage.ts +97 -0
- package/sources/components/qr/QRCode.tsx +178 -0
- package/sources/components/qr/QRCode.web.tsx +229 -0
- package/sources/components/qr/index.ts +2 -0
- package/sources/components/qr/qrMatrix.ts +48 -0
- package/sources/components/tools/PermissionFooter.tsx +527 -0
- package/sources/components/tools/ToolDiffView.tsx +60 -0
- package/sources/components/tools/ToolError.tsx +49 -0
- package/sources/components/tools/ToolFullView.tsx +193 -0
- package/sources/components/tools/ToolHeader.tsx +93 -0
- package/sources/components/tools/ToolSectionView.tsx +42 -0
- package/sources/components/tools/ToolStatusIndicator.tsx +36 -0
- package/sources/components/tools/ToolView.tsx +340 -0
- package/sources/components/tools/knownTools.tsx +957 -0
- package/sources/components/tools/views/AskUserQuestionView.tsx +357 -0
- package/sources/components/tools/views/BashView.tsx +47 -0
- package/sources/components/tools/views/BashViewFull.tsx +81 -0
- package/sources/components/tools/views/CodexBashView.tsx +126 -0
- package/sources/components/tools/views/CodexDiffView.tsx +79 -0
- package/sources/components/tools/views/CodexPatchView.tsx +186 -0
- package/sources/components/tools/views/EditView.tsx +33 -0
- package/sources/components/tools/views/EditViewFull.tsx +38 -0
- package/sources/components/tools/views/ExitPlanToolView.tsx +21 -0
- package/sources/components/tools/views/FileView.tsx +118 -0
- package/sources/components/tools/views/GeminiEditView.tsx +75 -0
- package/sources/components/tools/views/GeminiExecuteView.tsx +92 -0
- package/sources/components/tools/views/MCPToolView.tsx +31 -0
- package/sources/components/tools/views/MultiEditView.tsx +41 -0
- package/sources/components/tools/views/MultiEditViewFull.tsx +84 -0
- package/sources/components/tools/views/TaskView.tsx +129 -0
- package/sources/components/tools/views/TodoView.tsx +90 -0
- package/sources/components/tools/views/WriteView.tsx +29 -0
- package/sources/components/tools/views/_all.tsx +88 -0
- package/sources/components/usage/UsageBar.tsx +80 -0
- package/sources/components/usage/UsageChart.tsx +164 -0
- package/sources/components/usage/UsagePanel.tsx +283 -0
- package/sources/components/web/FaviconPermissionIndicator.tsx +44 -0
- package/sources/config.ts +3 -0
- package/sources/constants/Languages.ts +116 -0
- package/sources/constants/Typography.ts +116 -0
- package/sources/dev/testRunner.ts +277 -0
- package/sources/docs/autocomplete-text-manipulation.md +224 -0
- package/sources/encryption/aes.appspec.ts +25 -0
- package/sources/encryption/aes.ts +21 -0
- package/sources/encryption/aes.web.test.ts +73 -0
- package/sources/encryption/aes.web.ts +79 -0
- package/sources/encryption/base64.appspec.ts +240 -0
- package/sources/encryption/base64.native.ts +12 -0
- package/sources/encryption/base64.ts +46 -0
- package/sources/encryption/blob.test.ts +120 -0
- package/sources/encryption/blob.ts +58 -0
- package/sources/encryption/deriveKey.appspec.ts +72 -0
- package/sources/encryption/deriveKey.ts +46 -0
- package/sources/encryption/hex.ts +17 -0
- package/sources/encryption/hmac_sha512.appspec.ts +40 -0
- package/sources/encryption/hmac_sha512.ts +42 -0
- package/sources/encryption/libsodium.lib.ts +2 -0
- package/sources/encryption/libsodium.lib.web.ts +2 -0
- package/sources/encryption/libsodium.ts +58 -0
- package/sources/encryption/text.test.ts +61 -0
- package/sources/encryption/text.ts +11 -0
- package/sources/hooks/useAsyncCommand.ts +25 -0
- package/sources/hooks/useAttachmentImage.ts +134 -0
- package/sources/hooks/useAutocomplete.ts +69 -0
- package/sources/hooks/useAutocompleteSession.ts +53 -0
- package/sources/hooks/useChangelog.ts +45 -0
- package/sources/hooks/useCheckCameraPermissions.ts +25 -0
- package/sources/hooks/useConnectAccount.ts +107 -0
- package/sources/hooks/useConnectTerminal.ts +112 -0
- package/sources/hooks/useDemoMessages.ts +48 -0
- package/sources/hooks/useDraft.ts +120 -0
- package/sources/hooks/useElapsedTime.ts +36 -0
- package/sources/hooks/useGetPath.ts +13 -0
- package/sources/hooks/useGitStatusFiles.ts +45 -0
- package/sources/hooks/useGlobalKeyboard.ts +29 -0
- package/sources/hooks/useGroupedMessages.ts +149 -0
- package/sources/hooks/useImagePicker.ts +135 -0
- package/sources/hooks/useInboxHasContent.ts +19 -0
- package/sources/hooks/useMultiClick.ts +56 -0
- package/sources/hooks/useNasTechAction.ts +45 -0
- package/sources/hooks/useNativeUpdate.ts +10 -0
- package/sources/hooks/useNavigateToSession.ts +20 -0
- package/sources/hooks/useNewSessionDraft.ts +70 -0
- package/sources/hooks/usePrefetchFileContents.ts +162 -0
- package/sources/hooks/useSearch.ts +120 -0
- package/sources/hooks/useSessionQuickActions.ts +325 -0
- package/sources/hooks/useTauriDrag.ts +76 -0
- package/sources/hooks/useTauriZoom.ts +67 -0
- package/sources/hooks/useUpdates.ts +84 -0
- package/sources/hooks/useVisibleSessionListViewData.ts +65 -0
- package/sources/hooks/useWorktreeCleanup.ts +69 -0
- package/sources/log.ts +108 -0
- package/sources/modal/ModalManager.ts +203 -0
- package/sources/modal/ModalProvider.tsx +103 -0
- package/sources/modal/components/BaseModal.tsx +122 -0
- package/sources/modal/components/CustomModal.tsx +42 -0
- package/sources/modal/components/WebAlertModal.tsx +139 -0
- package/sources/modal/components/WebPromptModal.tsx +185 -0
- package/sources/modal/index.ts +3 -0
- package/sources/modal/types.ts +79 -0
- package/sources/nastech-wire/index.ts +10 -0
- package/sources/nastech-wire/legacyProtocol.ts +27 -0
- package/sources/nastech-wire/messageMeta.ts +14 -0
- package/sources/nastech-wire/messages.ts +113 -0
- package/sources/nastech-wire/sessionProtocol.ts +134 -0
- package/sources/nastech-wire/voice.ts +34 -0
- package/sources/polyfills/screenOrientation.ts +33 -0
- package/sources/realtime/RealtimeProvider.tsx +20 -0
- package/sources/realtime/RealtimeProvider.web.tsx +15 -0
- package/sources/realtime/RealtimeSession.ts +200 -0
- package/sources/realtime/RealtimeVoiceSession.tsx +211 -0
- package/sources/realtime/RealtimeVoiceSession.web.tsx +209 -0
- package/sources/realtime/hooks/contextFormatters.ts +127 -0
- package/sources/realtime/hooks/voiceHooks.ts +232 -0
- package/sources/realtime/realtimeClientTools.ts +94 -0
- package/sources/realtime/types.ts +19 -0
- package/sources/realtime/voiceConfig.ts +31 -0
- package/sources/realtime/voiceExperiment.ts +91 -0
- package/sources/realtime/voiceSystemPrompt.ts +75 -0
- package/sources/scripts/compareTranslations.ts +217 -0
- package/sources/scripts/parseChangelog.ts +87 -0
- package/sources/sync/__testdata__/trace_0.json +3986 -0
- package/sources/sync/__testdata__/trace_1.json +1391 -0
- package/sources/sync/__testdata__/trace_2.json +182 -0
- package/sources/sync/agentDefaults.ts +108 -0
- package/sources/sync/apiArtifacts.ts +143 -0
- package/sources/sync/apiAttachments.ts +217 -0
- package/sources/sync/apiFeed.ts +60 -0
- package/sources/sync/apiFriends.ts +217 -0
- package/sources/sync/apiGithub.spec.ts +97 -0
- package/sources/sync/apiGithub.ts +103 -0
- package/sources/sync/apiKv.ts +270 -0
- package/sources/sync/apiPush.ts +83 -0
- package/sources/sync/apiServices.ts +64 -0
- package/sources/sync/apiSocket.ts +290 -0
- package/sources/sync/apiTypes.spec.ts +23 -0
- package/sources/sync/apiTypes.ts +213 -0
- package/sources/sync/apiUsage.ts +130 -0
- package/sources/sync/apiVoice.ts +57 -0
- package/sources/sync/appConfig.ts +95 -0
- package/sources/sync/artifactTypes.ts +85 -0
- package/sources/sync/attachmentTypes.ts +28 -0
- package/sources/sync/encryption/artifactEncryption.ts +83 -0
- package/sources/sync/encryption/encryption.ts +220 -0
- package/sources/sync/encryption/encryptionCache.ts +248 -0
- package/sources/sync/encryption/encryptor.appspec.ts +409 -0
- package/sources/sync/encryption/encryptor.ts +126 -0
- package/sources/sync/encryption/machineEncryption.ts +122 -0
- package/sources/sync/encryption/sessionEncryption.ts +207 -0
- package/sources/sync/feedTypes.ts +43 -0
- package/sources/sync/friendTypes.ts +92 -0
- package/sources/sync/git-parsers/LineParser.ts +62 -0
- package/sources/sync/git-parsers/parseBranch.ts +97 -0
- package/sources/sync/git-parsers/parseDiff.ts +180 -0
- package/sources/sync/git-parsers/parseStatus.ts +162 -0
- package/sources/sync/git-parsers/parseStatusV2.ts +307 -0
- package/sources/sync/gitStatusFiles.ts +185 -0
- package/sources/sync/gitStatusSync.ts +282 -0
- package/sources/sync/localSettings.ts +67 -0
- package/sources/sync/messageMeta.test.ts +87 -0
- package/sources/sync/messageMeta.ts +36 -0
- package/sources/sync/modeHacks.test.ts +29 -0
- package/sources/sync/modeHacks.ts +22 -0
- package/sources/sync/nastechApi.ts +124 -0
- package/sources/sync/ops.ts +776 -0
- package/sources/sync/persistence.ts +322 -0
- package/sources/sync/profile.ts +95 -0
- package/sources/sync/projectFiles.ts +54 -0
- package/sources/sync/prompt/systemPrompt.ts +20 -0
- package/sources/sync/purchases.ts +67 -0
- package/sources/sync/pushRegistration.ts +229 -0
- package/sources/sync/reducer/activityUpdateAccumulator.test.ts +492 -0
- package/sources/sync/reducer/activityUpdateAccumulator.ts +96 -0
- package/sources/sync/reducer/messageToEvent.ts +85 -0
- package/sources/sync/reducer/phase0-skipping.spec.ts +206 -0
- package/sources/sync/reducer/reducer.spec.ts +3169 -0
- package/sources/sync/reducer/reducer.ts +1214 -0
- package/sources/sync/reducer/reducerTracer.spec.ts +502 -0
- package/sources/sync/reducer/reducerTracer.ts +310 -0
- package/sources/sync/revenueCat/index.ts +21 -0
- package/sources/sync/revenueCat/revenueCat.ts +215 -0
- package/sources/sync/revenueCat/revenueCat.web.ts +238 -0
- package/sources/sync/revenueCat/types.ts +82 -0
- package/sources/sync/serverConfig.ts +72 -0
- package/sources/sync/settings.spec.ts +456 -0
- package/sources/sync/settings.ts +186 -0
- package/sources/sync/storage.ts +1653 -0
- package/sources/sync/storageTypes.spec.ts +24 -0
- package/sources/sync/storageTypes.ts +215 -0
- package/sources/sync/suggestionCommands.ts +149 -0
- package/sources/sync/suggestionFile.ts +206 -0
- package/sources/sync/sync.ts +2555 -0
- package/sources/sync/typesMessage.ts +69 -0
- package/sources/sync/typesMessageMeta.test.ts +14 -0
- package/sources/sync/typesMessageMeta.ts +17 -0
- package/sources/sync/typesRaw.spec.ts +2010 -0
- package/sources/sync/typesRaw.ts +1183 -0
- package/sources/sync/uploadFormFile.ts +29 -0
- package/sources/sync/uploadFormFile.web.ts +14 -0
- package/sources/sync/webTabTitle.ts +58 -0
- package/sources/text/README.md +223 -0
- package/sources/text/_all.ts +104 -0
- package/sources/text/_default.ts +1015 -0
- package/sources/text/index.ts +215 -0
- package/sources/text/translations/ca.ts +993 -0
- package/sources/text/translations/en.ts +1009 -0
- package/sources/text/translations/es.ts +995 -0
- package/sources/text/translations/it.ts +992 -0
- package/sources/text/translations/ja.ts +993 -0
- package/sources/text/translations/pl.ts +1024 -0
- package/sources/text/translations/pt.ts +992 -0
- package/sources/text/translations/ru.ts +1023 -0
- package/sources/text/translations/zh-Hans.ts +992 -0
- package/sources/text/translations/zh-Hant.ts +991 -0
- package/sources/theme.css +72 -0
- package/sources/theme.dark.json +31 -0
- package/sources/theme.figma.json +457 -0
- package/sources/theme.gen.ts +10 -0
- package/sources/theme.light.json +31 -0
- package/sources/theme.ts +452 -0
- package/sources/track/index.ts +171 -0
- package/sources/track/tracking.ts +12 -0
- package/sources/track/useTrackScreens.ts +10 -0
- package/sources/types/react-native-webrtc-web-shim.d.ts +6 -0
- package/sources/unistyles.ts +97 -0
- package/sources/utils/codexUnifiedDiff.spec.ts +43 -0
- package/sources/utils/codexUnifiedDiff.ts +70 -0
- package/sources/utils/consoleLogging.ts +145 -0
- package/sources/utils/copySessionMetadataToClipboard.ts +53 -0
- package/sources/utils/debounce.test.ts +646 -0
- package/sources/utils/debounce.ts +122 -0
- package/sources/utils/deviceCalculations.test.ts +318 -0
- package/sources/utils/deviceCalculations.ts +87 -0
- package/sources/utils/errors.ts +10 -0
- package/sources/utils/formatPermissionParams.ts +23 -0
- package/sources/utils/isTauri.ts +7 -0
- package/sources/utils/loadSkia.ts +3 -0
- package/sources/utils/loadSkia.web.ts +5 -0
- package/sources/utils/lock.ts +40 -0
- package/sources/utils/machineUtils.ts +6 -0
- package/sources/utils/messageUtils.ts +254 -0
- package/sources/utils/microphonePermissions.ts +109 -0
- package/sources/utils/notificationRouting.test.ts +51 -0
- package/sources/utils/notificationRouting.ts +81 -0
- package/sources/utils/oauth.ts +143 -0
- package/sources/utils/openExternalUrl.ts +19 -0
- package/sources/utils/parseToken.ts +23 -0
- package/sources/utils/pasteImages.web.ts +81 -0
- package/sources/utils/pathUtils.spec.ts +226 -0
- package/sources/utils/pathUtils.ts +75 -0
- package/sources/utils/platform.ts +19 -0
- package/sources/utils/readFileBytes.ts +11 -0
- package/sources/utils/readFileBytes.web.ts +12 -0
- package/sources/utils/requestReview.ts +135 -0
- package/sources/utils/responsive.ts +87 -0
- package/sources/utils/resumeCommand.test.ts +78 -0
- package/sources/utils/resumeCommand.ts +70 -0
- package/sources/utils/sessionFileLinks.test.ts +112 -0
- package/sources/utils/sessionFileLinks.ts +388 -0
- package/sources/utils/sessionUtils.ts +226 -0
- package/sources/utils/stringUtils.ts +41 -0
- package/sources/utils/sync.ts +164 -0
- package/sources/utils/thumbhash.ts +17 -0
- package/sources/utils/thumbhash.web.ts +85 -0
- package/sources/utils/time.ts +41 -0
- package/sources/utils/toSnakeCase.test.ts +182 -0
- package/sources/utils/toSnakeCase.ts +40 -0
- package/sources/utils/toolCommand.test.ts +23 -0
- package/sources/utils/toolCommand.ts +35 -0
- package/sources/utils/toolComparison.test.ts +101 -0
- package/sources/utils/toolComparison.ts +73 -0
- package/sources/utils/toolErrorParser.test.ts +126 -0
- package/sources/utils/toolErrorParser.ts +102 -0
- package/sources/utils/trimIdent.ts +27 -0
- package/sources/utils/truncateForLogs.ts +37 -0
- package/sources/utils/versionUtils.test.ts +58 -0
- package/sources/utils/versionUtils.ts +69 -0
- package/sources/utils/web/faviconGenerator.ts +39 -0
- package/sources/utils/worktree.ts +192 -0
- package/sources/wire/index.ts +97 -0
- package/src-tauri/Cargo.lock +5978 -0
- package/src-tauri/Cargo.toml +27 -0
- package/src-tauri/build.rs +3 -0
- package/src-tauri/capabilities/default.json +27 -0
- package/src-tauri/deny.toml +53 -0
- package/src-tauri/entitlements.plist +24 -0
- package/src-tauri/icons/128x128.png +0 -0
- package/src-tauri/icons/128x128@2x.png +0 -0
- package/src-tauri/icons/32x32.png +0 -0
- package/src-tauri/icons/64x64.png +0 -0
- package/src-tauri/icons/Square107x107Logo.png +0 -0
- package/src-tauri/icons/Square142x142Logo.png +0 -0
- package/src-tauri/icons/Square150x150Logo.png +0 -0
- package/src-tauri/icons/Square284x284Logo.png +0 -0
- package/src-tauri/icons/Square30x30Logo.png +0 -0
- package/src-tauri/icons/Square310x310Logo.png +0 -0
- package/src-tauri/icons/Square44x44Logo.png +0 -0
- package/src-tauri/icons/Square71x71Logo.png +0 -0
- package/src-tauri/icons/Square89x89Logo.png +0 -0
- package/src-tauri/icons/StoreLogo.png +0 -0
- package/src-tauri/icons/icon.icns +0 -0
- package/src-tauri/icons/icon.ico +0 -0
- package/src-tauri/icons/icon.png +0 -0
- package/src-tauri/src/lib.rs +18 -0
- package/src-tauri/src/main.rs +6 -0
- package/src-tauri/tauri.conf.json +51 -0
- package/src-tauri/tauri.dev.conf.json +20 -0
- package/src-tauri/tauri.preview.conf.json +20 -0
- package/tsconfig.json +45 -0
- package/vitest.config.ts +26 -0
|
@@ -0,0 +1,1009 @@
|
|
|
1
|
+
import type { TranslationStructure } from '../_default';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* English plural helper function
|
|
5
|
+
* English has 2 plural forms: singular, plural
|
|
6
|
+
* @param options - Object containing count, singular, and plural forms
|
|
7
|
+
* @returns The appropriate form based on English 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
|
+
* ENGLISH TRANSLATIONS - DEDICATED FILE
|
|
15
|
+
*
|
|
16
|
+
* This file represents the new translation architecture where each language
|
|
17
|
+
* has its own dedicated file instead of being embedded in _default.ts.
|
|
18
|
+
*
|
|
19
|
+
* STRUCTURE CHANGE:
|
|
20
|
+
* - Previously: All languages in _default.ts as objects
|
|
21
|
+
* - Now: Separate files for each language (en.ts, ru.ts, pl.ts, es.ts, etc.)
|
|
22
|
+
* - Benefit: Better maintainability, smaller files, easier language management
|
|
23
|
+
*
|
|
24
|
+
* This file contains the complete English translation structure and serves as
|
|
25
|
+
* the reference implementation for all other language files.
|
|
26
|
+
*
|
|
27
|
+
* ARCHITECTURE NOTES:
|
|
28
|
+
* - All translation keys must match across all language files
|
|
29
|
+
* - Type safety enforced by TranslationStructure interface
|
|
30
|
+
* - New translation keys must be added to ALL language files
|
|
31
|
+
*/
|
|
32
|
+
export const en: TranslationStructure = {
|
|
33
|
+
tabs: {
|
|
34
|
+
// Tab navigation labels
|
|
35
|
+
inbox: 'Inbox',
|
|
36
|
+
sessions: 'Terminals',
|
|
37
|
+
settings: 'Settings',
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
inbox: {
|
|
41
|
+
// Inbox screen
|
|
42
|
+
emptyTitle: 'Empty Inbox',
|
|
43
|
+
emptyDescription: 'Connect with friends to start sharing sessions',
|
|
44
|
+
updates: 'Updates',
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
common: {
|
|
48
|
+
// Simple string constants
|
|
49
|
+
cancel: 'Cancel',
|
|
50
|
+
authenticate: 'Authenticate',
|
|
51
|
+
save: 'Save',
|
|
52
|
+
saveAs: 'Save As',
|
|
53
|
+
error: 'Error',
|
|
54
|
+
success: 'Success',
|
|
55
|
+
ok: 'OK',
|
|
56
|
+
continue: 'Continue',
|
|
57
|
+
back: 'Back',
|
|
58
|
+
create: 'Create',
|
|
59
|
+
rename: 'Rename',
|
|
60
|
+
reset: 'Reset',
|
|
61
|
+
logout: 'Logout',
|
|
62
|
+
yes: 'Yes',
|
|
63
|
+
no: 'No',
|
|
64
|
+
discard: 'Discard',
|
|
65
|
+
version: 'Version',
|
|
66
|
+
copy: 'Copy',
|
|
67
|
+
copied: 'Copied',
|
|
68
|
+
scanning: 'Scanning...',
|
|
69
|
+
urlPlaceholder: 'https://example.com',
|
|
70
|
+
home: 'Home',
|
|
71
|
+
message: 'Message',
|
|
72
|
+
files: 'Files',
|
|
73
|
+
fileViewer: 'File Viewer',
|
|
74
|
+
loading: 'Loading...',
|
|
75
|
+
retry: 'Retry',
|
|
76
|
+
delete: 'Delete',
|
|
77
|
+
optional: 'optional',
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
profile: {
|
|
81
|
+
userProfile: 'User Profile',
|
|
82
|
+
details: 'Details',
|
|
83
|
+
firstName: 'First Name',
|
|
84
|
+
lastName: 'Last Name',
|
|
85
|
+
username: 'Username',
|
|
86
|
+
status: 'Status',
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
status: {
|
|
91
|
+
connected: 'connected',
|
|
92
|
+
connecting: 'connecting',
|
|
93
|
+
disconnected: 'disconnected',
|
|
94
|
+
error: 'error',
|
|
95
|
+
online: 'online',
|
|
96
|
+
offline: 'offline',
|
|
97
|
+
lastSeen: ({ time }: { time: string }) => `last seen ${time}`,
|
|
98
|
+
permissionRequired: 'permission required',
|
|
99
|
+
activeNow: 'Active now',
|
|
100
|
+
unknown: 'unknown',
|
|
101
|
+
unread: 'new results',
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
time: {
|
|
105
|
+
justNow: 'just now',
|
|
106
|
+
minutesAgo: ({ count }: { count: number }) => `${count} minute${count !== 1 ? 's' : ''} ago`,
|
|
107
|
+
hoursAgo: ({ count }: { count: number }) => `${count} hour${count !== 1 ? 's' : ''} ago`,
|
|
108
|
+
daysAgo: ({ count }: { count: number }) => `${count} day${count !== 1 ? 's' : ''} ago`,
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
connect: {
|
|
112
|
+
restoreAccount: 'Restore Account',
|
|
113
|
+
enterSecretKey: 'Please enter a secret key',
|
|
114
|
+
invalidSecretKey: 'Invalid secret key. Please check and try again.',
|
|
115
|
+
enterUrlManually: 'Enter URL manually',
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
settings: {
|
|
119
|
+
title: 'Settings',
|
|
120
|
+
connectedAccounts: 'Connected Accounts',
|
|
121
|
+
connectAccount: 'Connect account',
|
|
122
|
+
github: 'GitHub',
|
|
123
|
+
machines: 'Machines',
|
|
124
|
+
showOfflineMachines: ({ count }: { count: number }) => count === 1 ? 'Show 1 offline machine' : `Show ${count} offline machines`,
|
|
125
|
+
hideOfflineMachines: 'Hide offline machines',
|
|
126
|
+
features: 'Features',
|
|
127
|
+
social: 'Social',
|
|
128
|
+
account: 'Account',
|
|
129
|
+
accountSubtitle: 'Manage your account details',
|
|
130
|
+
appearance: 'Appearance',
|
|
131
|
+
appearanceSubtitle: 'Customize how the app looks',
|
|
132
|
+
voiceAssistant: 'Voice Assistant',
|
|
133
|
+
voiceAssistantSubtitle: 'Configure voice interaction preferences',
|
|
134
|
+
featuresTitle: 'Features',
|
|
135
|
+
featuresSubtitle: 'Enable or disable app features',
|
|
136
|
+
developer: 'Developer',
|
|
137
|
+
developerTools: 'Developer Tools',
|
|
138
|
+
about: 'About',
|
|
139
|
+
aboutFooter: 'NasTech is a Codex and Claude Code mobile client. It\'s fully end-to-end encrypted and your account is stored only on your device. Not affiliated with Anthropic.',
|
|
140
|
+
whatsNew: 'What\'s New',
|
|
141
|
+
whatsNewSubtitle: 'See the latest updates and improvements',
|
|
142
|
+
reportIssue: 'Report an Issue',
|
|
143
|
+
privacyPolicy: 'Privacy Policy',
|
|
144
|
+
termsOfService: 'Terms of Service',
|
|
145
|
+
eula: 'EULA',
|
|
146
|
+
supportUs: 'Support us',
|
|
147
|
+
supportUsSubtitlePro: 'Thank you for your support!',
|
|
148
|
+
supportUsSubtitle: 'Support project development',
|
|
149
|
+
scanQrCodeToAuthenticate: 'Scan QR code to authenticate',
|
|
150
|
+
githubConnected: ({ login }: { login: string }) => `Connected as @${login}`,
|
|
151
|
+
connectGithubAccount: 'Connect your GitHub account',
|
|
152
|
+
claudeAuthSuccess: 'Successfully connected to Claude',
|
|
153
|
+
exchangingTokens: 'Exchanging tokens...',
|
|
154
|
+
usage: 'Usage',
|
|
155
|
+
usageSubtitle: 'View your API usage and costs',
|
|
156
|
+
// Dynamic settings messages
|
|
157
|
+
accountConnected: ({ service }: { service: string }) => `${service} account connected`,
|
|
158
|
+
machineStatus: ({ name, status }: { name: string; status: 'online' | 'offline' }) =>
|
|
159
|
+
`${name} is ${status}`,
|
|
160
|
+
featureToggled: ({ feature, enabled }: { feature: string; enabled: boolean }) =>
|
|
161
|
+
`${feature} ${enabled ? 'enabled' : 'disabled'}`,
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
settingsAppearance: {
|
|
165
|
+
// Appearance settings screen
|
|
166
|
+
theme: 'Theme',
|
|
167
|
+
themeDescription: 'Choose your preferred color scheme',
|
|
168
|
+
themeOptions: {
|
|
169
|
+
adaptive: 'Adaptive',
|
|
170
|
+
light: 'Light',
|
|
171
|
+
dark: 'Dark',
|
|
172
|
+
},
|
|
173
|
+
themeDescriptions: {
|
|
174
|
+
adaptive: 'Match system settings',
|
|
175
|
+
light: 'Always use light theme',
|
|
176
|
+
dark: 'Always use dark theme',
|
|
177
|
+
},
|
|
178
|
+
display: 'Display',
|
|
179
|
+
displayDescription: 'Control layout and spacing',
|
|
180
|
+
inlineToolCalls: 'Inline Tool Calls',
|
|
181
|
+
inlineToolCallsDescription: 'Display tool calls directly in chat messages',
|
|
182
|
+
expandTodoLists: 'Expand Todo Lists',
|
|
183
|
+
expandTodoListsDescription: 'Show all todos instead of just changes',
|
|
184
|
+
showLineNumbersInDiffs: 'Show Line Numbers in Diffs',
|
|
185
|
+
showLineNumbersInDiffsDescription: 'Display line numbers in code diffs',
|
|
186
|
+
showLineNumbersInToolViews: 'Show Line Numbers in Tool Views',
|
|
187
|
+
showLineNumbersInToolViewsDescription: 'Display line numbers in tool view diffs',
|
|
188
|
+
wrapLinesInDiffs: 'Wrap Lines in Diffs',
|
|
189
|
+
wrapLinesInDiffsDescription: 'Wrap long lines instead of horizontal scrolling in diff views',
|
|
190
|
+
diffStyle: 'Diff View',
|
|
191
|
+
diffStyleDescription: 'Show diffs as a single column (unified) or side-by-side (split). Split view is web-only.',
|
|
192
|
+
diffStyleOptions: {
|
|
193
|
+
unified: 'Unified',
|
|
194
|
+
split: 'Split',
|
|
195
|
+
},
|
|
196
|
+
alwaysShowContextSize: 'Always Show Context Size',
|
|
197
|
+
alwaysShowContextSizeDescription: 'Display context usage even when not near limit',
|
|
198
|
+
avatarStyle: 'Avatar Style',
|
|
199
|
+
avatarStyleDescription: 'Choose session avatar appearance',
|
|
200
|
+
avatarOptions: {
|
|
201
|
+
pixelated: 'Pixelated',
|
|
202
|
+
gradient: 'Gradient',
|
|
203
|
+
brutalist: 'Brutalist',
|
|
204
|
+
},
|
|
205
|
+
showFlavorIcons: 'Show AI Provider Icons',
|
|
206
|
+
showFlavorIconsDescription: 'Display AI provider icons on session avatars',
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
settingsFeatures: {
|
|
210
|
+
// Features settings screen
|
|
211
|
+
experiments: 'Experiments',
|
|
212
|
+
experimentsDescription: 'Enable experimental features that are still in development. These features may be unstable or change without notice.',
|
|
213
|
+
experimentalFeatures: 'Experimental Features',
|
|
214
|
+
experimentalFeaturesEnabled: 'Experimental features enabled',
|
|
215
|
+
experimentalFeaturesDisabled: 'Using stable features only',
|
|
216
|
+
webFeatures: 'Web Features',
|
|
217
|
+
webFeaturesDescription: 'Features available only in the web version of the app.',
|
|
218
|
+
enterToSend: 'Enter to Send',
|
|
219
|
+
enterToSendEnabled: 'Press Enter to send messages',
|
|
220
|
+
enterToSendDisabled: 'Press ⌘+Enter to send messages',
|
|
221
|
+
commandPalette: 'Command Palette',
|
|
222
|
+
commandPaletteEnabled: 'Press ⌘K to open',
|
|
223
|
+
commandPaletteDisabled: 'Quick command access disabled',
|
|
224
|
+
markdownCopyV2: 'Markdown Copy v2',
|
|
225
|
+
markdownCopyV2Subtitle: 'Long press opens copy modal',
|
|
226
|
+
hideInactiveSessions: 'Hide inactive sessions',
|
|
227
|
+
hideInactiveSessionsSubtitle: 'Show only active chats in your list',
|
|
228
|
+
groupToolCalls: 'Group Tool Calls',
|
|
229
|
+
groupToolCallsSubtitle: 'Collapse consecutive tool calls into one container',
|
|
230
|
+
privacy: 'Privacy',
|
|
231
|
+
privacyDescription: 'Completely disables all analytics and telemetry. No data will be sent to PostHog or any other tracking service.',
|
|
232
|
+
disableAnalytics: 'Disable Analytics',
|
|
233
|
+
analyticsDisabled: 'All tracking and telemetry disabled',
|
|
234
|
+
analyticsEnabled: 'Anonymous usage analytics active',
|
|
235
|
+
imageUpload: 'Image Upload',
|
|
236
|
+
imageUploadSubtitle: 'Attach images to messages for Claude to analyze',
|
|
237
|
+
},
|
|
238
|
+
|
|
239
|
+
errors: {
|
|
240
|
+
networkError: 'Network error occurred',
|
|
241
|
+
serverError: 'Server error occurred',
|
|
242
|
+
unknownError: 'An unknown error occurred',
|
|
243
|
+
connectionTimeout: 'Connection timed out',
|
|
244
|
+
authenticationFailed: 'Authentication failed',
|
|
245
|
+
permissionDenied: 'Permission denied',
|
|
246
|
+
fileNotFound: 'File not found',
|
|
247
|
+
invalidFormat: 'Invalid format',
|
|
248
|
+
operationFailed: 'Operation failed',
|
|
249
|
+
tryAgain: 'Please try again',
|
|
250
|
+
contactSupport: 'Contact support if the problem persists',
|
|
251
|
+
sessionNotFound: 'Session not found',
|
|
252
|
+
voiceSessionFailed: 'Failed to start voice session',
|
|
253
|
+
voiceServiceUnavailable: 'Voice service is temporarily unavailable',
|
|
254
|
+
voiceLimitReachedTitle: 'Voice Limit Reached',
|
|
255
|
+
voiceHardLimitReached: ({ hours }: { hours: number }) => `You've used ${hours}+ hours of voice this month. This is the maximum allowed. You can configure your own ElevenLabs agent in Voice settings to use your own quota.`,
|
|
256
|
+
voiceConversationLimitReached: 'You\'ve reached the maximum number of voice conversations this month. We may add on-demand voice usage in the future — please file an issue at github.com/nastech-ai/nastech/issues if you hit this limit.',
|
|
257
|
+
oauthInitializationFailed: 'Failed to initialize OAuth flow',
|
|
258
|
+
tokenStorageFailed: 'Failed to store authentication tokens',
|
|
259
|
+
oauthStateMismatch: 'Security validation failed. Please try again',
|
|
260
|
+
tokenExchangeFailed: 'Failed to exchange authorization code',
|
|
261
|
+
oauthAuthorizationDenied: 'Authorization was denied',
|
|
262
|
+
webViewLoadFailed: 'Failed to load authentication page',
|
|
263
|
+
failedToLoadProfile: 'Failed to load user profile',
|
|
264
|
+
userNotFound: 'User not found',
|
|
265
|
+
sessionDeleted: 'Session has been deleted',
|
|
266
|
+
sessionDeletedDescription: 'This session has been permanently removed',
|
|
267
|
+
|
|
268
|
+
// Error functions with context
|
|
269
|
+
fieldError: ({ field, reason }: { field: string; reason: string }) =>
|
|
270
|
+
`${field}: ${reason}`,
|
|
271
|
+
validationError: ({ field, min, max }: { field: string; min: number; max: number }) =>
|
|
272
|
+
`${field} must be between ${min} and ${max}`,
|
|
273
|
+
retryIn: ({ seconds }: { seconds: number }) =>
|
|
274
|
+
`Retry in ${seconds} ${seconds === 1 ? 'second' : 'seconds'}`,
|
|
275
|
+
errorWithCode: ({ message, code }: { message: string; code: number | string }) =>
|
|
276
|
+
`${message} (Error ${code})`,
|
|
277
|
+
disconnectServiceFailed: ({ service }: { service: string }) =>
|
|
278
|
+
`Failed to disconnect ${service}`,
|
|
279
|
+
connectServiceFailed: ({ service }: { service: string }) =>
|
|
280
|
+
`Failed to connect ${service}. Please try again.`,
|
|
281
|
+
failedToLoadFriends: 'Failed to load friends list',
|
|
282
|
+
failedToAcceptRequest: 'Failed to accept friend request',
|
|
283
|
+
failedToRejectRequest: 'Failed to reject friend request',
|
|
284
|
+
failedToRemoveFriend: 'Failed to remove friend',
|
|
285
|
+
searchFailed: 'Search failed. Please try again.',
|
|
286
|
+
failedToSendRequest: 'Failed to send friend request',
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
newSession: {
|
|
290
|
+
title: 'Start New Session',
|
|
291
|
+
machineOffline: 'Machine is offline',
|
|
292
|
+
switchMachinesHint: '• Switch machines by clicking on the machine above',
|
|
293
|
+
},
|
|
294
|
+
|
|
295
|
+
sessionHistory: {
|
|
296
|
+
// Used by session history screen
|
|
297
|
+
title: 'Session History',
|
|
298
|
+
empty: 'No sessions found',
|
|
299
|
+
today: 'Today',
|
|
300
|
+
yesterday: 'Yesterday',
|
|
301
|
+
daysAgo: ({ count }: { count: number }) => `${count} ${count === 1 ? 'day' : 'days'} ago`,
|
|
302
|
+
viewAll: 'View all sessions',
|
|
303
|
+
},
|
|
304
|
+
|
|
305
|
+
session: {
|
|
306
|
+
inputPlaceholder: 'Type a message ...',
|
|
307
|
+
inactiveArchived: 'This session is inactive.',
|
|
308
|
+
resumeFromTerminal: 'To resume it from the terminal:',
|
|
309
|
+
newChat: 'New chat',
|
|
310
|
+
forkAction: 'Fork session',
|
|
311
|
+
forkSubtitle: 'Continue in a new session with the same context',
|
|
312
|
+
duplicateAction: 'Duplicate from message…',
|
|
313
|
+
duplicateSubtitle: 'Rewind to a chosen point and try again',
|
|
314
|
+
forkFromHere: 'Fork from here',
|
|
315
|
+
duplicateSheetTitle: 'Choose a rewind point',
|
|
316
|
+
duplicateSheetSubtitle: 'The new session keeps the chosen turn complete (your message and the agent’s response) and drops every prompt after it.',
|
|
317
|
+
duplicateSheetConfirm: 'Duplicate',
|
|
318
|
+
duplicateSheetEmpty: 'No messages eligible for rewind in this session yet.',
|
|
319
|
+
duplicateRowDisabled: "This message can't be used as a rewind point.",
|
|
320
|
+
forkedFromLabel: 'Forked from',
|
|
321
|
+
forkedFromSubtitle: 'Open the session this fork was branched from',
|
|
322
|
+
forkErrorOffline: 'This machine is offline. Fork is only available while the machine that owns the session is online.',
|
|
323
|
+
forkErrorMissingUuid: 'The chosen rewind point is no longer present in the source session — try forking without truncation.',
|
|
324
|
+
forkErrorMissingMetadata: 'Missing session metadata required to fork.',
|
|
325
|
+
forkErrorGeneric: 'Failed to fork the session.',
|
|
326
|
+
forkClaudeOnly: 'Fork is currently only supported for Claude sessions.',
|
|
327
|
+
},
|
|
328
|
+
|
|
329
|
+
commandPalette: {
|
|
330
|
+
placeholder: 'Type a command or search...',
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
server: {
|
|
334
|
+
// Used by Server Configuration screen (app/(app)/server.tsx)
|
|
335
|
+
serverConfiguration: 'Server Configuration',
|
|
336
|
+
enterServerUrl: 'Please enter a server URL',
|
|
337
|
+
notValidNasTechServer: 'Not a valid NasTech Server',
|
|
338
|
+
changeServer: 'Change Server',
|
|
339
|
+
continueWithServer: 'Continue with this server?',
|
|
340
|
+
resetToDefault: 'Reset to Default',
|
|
341
|
+
resetServerDefault: 'Reset server to default?',
|
|
342
|
+
validating: 'Validating...',
|
|
343
|
+
validatingServer: 'Validating server...',
|
|
344
|
+
serverReturnedError: 'Server returned an error',
|
|
345
|
+
failedToConnectToServer: 'Failed to connect to server',
|
|
346
|
+
currentlyUsingCustomServer: 'Currently using custom server',
|
|
347
|
+
customServerUrlLabel: 'Custom Server URL',
|
|
348
|
+
advancedFeatureFooter: "This is an advanced feature. Only change the server if you know what you're doing. You will need to log out and log in again after changing servers."
|
|
349
|
+
},
|
|
350
|
+
|
|
351
|
+
sessionInfo: {
|
|
352
|
+
// Used by Session Info screen (app/(app)/session/[id]/info.tsx)
|
|
353
|
+
killSession: 'Kill Session',
|
|
354
|
+
killSessionConfirm: 'Are you sure you want to terminate this session?',
|
|
355
|
+
archiveSession: 'Archive Session',
|
|
356
|
+
archiveSessionConfirm: 'Are you sure you want to archive this session?',
|
|
357
|
+
nastechSessionIdCopied: 'NasTech Session ID copied to clipboard',
|
|
358
|
+
failedToCopySessionId: 'Failed to copy NasTech Session ID',
|
|
359
|
+
nastechSessionId: 'NasTech Session ID',
|
|
360
|
+
claudeCodeSessionId: 'Claude Code Session ID',
|
|
361
|
+
claudeCodeSessionIdCopied: 'Claude Code Session ID copied to clipboard',
|
|
362
|
+
codexThreadId: 'Codex Thread ID',
|
|
363
|
+
codexThreadIdCopied: 'Codex Thread ID copied to clipboard',
|
|
364
|
+
aiProvider: 'AI Provider',
|
|
365
|
+
failedToCopyClaudeCodeSessionId: 'Failed to copy Claude Code Session ID',
|
|
366
|
+
failedToCopyCodexThreadId: 'Failed to copy Codex Thread ID',
|
|
367
|
+
metadataCopied: 'Session metadata copied to clipboard',
|
|
368
|
+
failedToCopyMetadata: 'Failed to copy session metadata',
|
|
369
|
+
failedToKillSession: 'Failed to kill session',
|
|
370
|
+
failedToArchiveSession: 'Failed to archive session',
|
|
371
|
+
connectionStatus: 'Connection Status',
|
|
372
|
+
created: 'Created',
|
|
373
|
+
lastUpdated: 'Last Updated',
|
|
374
|
+
sequence: 'Sequence',
|
|
375
|
+
quickActions: 'Quick Actions',
|
|
376
|
+
viewMachine: 'View Machine',
|
|
377
|
+
viewMachineSubtitle: 'View machine details and sessions',
|
|
378
|
+
resumeSession: 'Resume Session',
|
|
379
|
+
resumeSessionSubtitle: 'Resume this session on the same machine',
|
|
380
|
+
resumeSessionSameMachineOnly: 'This session can only be resumed on the same machine it started on.',
|
|
381
|
+
resumeSessionMachineOffline: 'This machine is offline. Resume is only available while it is online.',
|
|
382
|
+
resumeSessionNeedsNasTechAgent: 'Resume is unavailable on this machine. Run `nastech-agent auth login` to enable it.',
|
|
383
|
+
resumeSessionMissingMachine: 'This session is missing its machine metadata, so it cannot be resumed.',
|
|
384
|
+
resumeSessionMissingBackendId: 'This session does not have a resumable Claude or Codex identifier.',
|
|
385
|
+
resumeSessionUnexpectedDirectoryPrompt: 'Resume cannot create directories. Start the session manually from its original path.',
|
|
386
|
+
killSessionSubtitle: 'Immediately terminate the session',
|
|
387
|
+
archiveSessionSubtitle: 'Archive this session and stop it',
|
|
388
|
+
metadata: 'Metadata',
|
|
389
|
+
host: 'Host',
|
|
390
|
+
path: 'Path',
|
|
391
|
+
operatingSystem: 'Operating System',
|
|
392
|
+
processId: 'Process ID',
|
|
393
|
+
nastechHome: 'NasTech Home',
|
|
394
|
+
copyMetadata: 'Copy session metadata',
|
|
395
|
+
agentState: 'Agent State',
|
|
396
|
+
controlledByUser: 'Controlled by User',
|
|
397
|
+
pendingRequests: 'Pending Requests',
|
|
398
|
+
activity: 'Activity',
|
|
399
|
+
thinking: 'Thinking',
|
|
400
|
+
thinkingSince: 'Thinking Since',
|
|
401
|
+
cliVersion: 'CLI Version',
|
|
402
|
+
cliVersionOutdated: 'CLI Update Required',
|
|
403
|
+
cliVersionOutdatedMessage: ({ currentVersion, requiredVersion }: { currentVersion: string; requiredVersion: string }) =>
|
|
404
|
+
`Version ${currentVersion} installed. Update to ${requiredVersion} or later`,
|
|
405
|
+
updateCliInstructions: 'Please run pip install -U nastech-agent',
|
|
406
|
+
deleteSession: 'Delete Session',
|
|
407
|
+
deleteSessionSubtitle: 'Permanently remove this session',
|
|
408
|
+
deleteSessionConfirm: 'Delete Session Permanently?',
|
|
409
|
+
deleteSessionWarning: 'This action cannot be undone. All messages and data associated with this session will be permanently deleted.',
|
|
410
|
+
failedToDeleteSession: 'Failed to delete session',
|
|
411
|
+
sessionDeleted: 'Session deleted successfully',
|
|
412
|
+
worktreeCleanupTitle: 'Delete Worktree?',
|
|
413
|
+
worktreeCleanupMessage: 'The worktree has no uncommitted changes. Would you like to delete the worktree files?',
|
|
414
|
+
worktreeCleanupDelete: 'Delete Worktree',
|
|
415
|
+
worktreeCleanupKeep: 'Keep Files',
|
|
416
|
+
|
|
417
|
+
},
|
|
418
|
+
|
|
419
|
+
components: {
|
|
420
|
+
emptyMainScreen: {
|
|
421
|
+
// Used by EmptyMainScreen component
|
|
422
|
+
readyToCode: 'Ready to code?',
|
|
423
|
+
installCli: 'Install NasTech CLI',
|
|
424
|
+
runIt: 'Run it',
|
|
425
|
+
scanQrCode: 'Scan the QR code',
|
|
426
|
+
openCamera: 'Open Camera',
|
|
427
|
+
},
|
|
428
|
+
},
|
|
429
|
+
|
|
430
|
+
agentInput: {
|
|
431
|
+
permissionMode: {
|
|
432
|
+
title: 'PERMISSION MODE',
|
|
433
|
+
default: 'default permissions',
|
|
434
|
+
acceptEdits: 'accept edits',
|
|
435
|
+
plan: 'plan',
|
|
436
|
+
dontAsk: "don't ask",
|
|
437
|
+
bypassPermissions: 'yolo',
|
|
438
|
+
badgeAcceptAllEdits: 'accept all edits',
|
|
439
|
+
badgeBypassAllPermissions: 'yolo',
|
|
440
|
+
badgePlanMode: 'plan mode',
|
|
441
|
+
},
|
|
442
|
+
agent: {
|
|
443
|
+
claude: 'Claude',
|
|
444
|
+
codex: 'Codex',
|
|
445
|
+
gemini: 'Gemini',
|
|
446
|
+
openclaw: 'OpenClaw',
|
|
447
|
+
},
|
|
448
|
+
model: {
|
|
449
|
+
title: 'MODEL',
|
|
450
|
+
configureInCli: 'Configure models in CLI settings',
|
|
451
|
+
},
|
|
452
|
+
effort: {
|
|
453
|
+
title: 'EFFORT',
|
|
454
|
+
},
|
|
455
|
+
codexPermissionMode: {
|
|
456
|
+
title: 'CODEX PERMISSION MODE',
|
|
457
|
+
default: 'default permissions',
|
|
458
|
+
readOnly: 'read-only',
|
|
459
|
+
safeYolo: 'safe yolo',
|
|
460
|
+
yolo: 'yolo',
|
|
461
|
+
badgeReadOnly: 'read-only',
|
|
462
|
+
badgeSafeYolo: 'safe yolo',
|
|
463
|
+
badgeYolo: 'yolo',
|
|
464
|
+
},
|
|
465
|
+
codexModel: {
|
|
466
|
+
title: 'CODEX MODEL',
|
|
467
|
+
gpt5CodexLow: 'gpt-5-codex low',
|
|
468
|
+
gpt5CodexMedium: 'gpt-5-codex medium',
|
|
469
|
+
gpt5CodexHigh: 'gpt-5-codex high',
|
|
470
|
+
gpt5Minimal: 'GPT-5 Minimal',
|
|
471
|
+
gpt5Low: 'GPT-5 Low',
|
|
472
|
+
gpt5Medium: 'GPT-5 Medium',
|
|
473
|
+
gpt5High: 'GPT-5 High',
|
|
474
|
+
},
|
|
475
|
+
geminiPermissionMode: {
|
|
476
|
+
title: 'GEMINI PERMISSION MODE',
|
|
477
|
+
default: 'default permissions',
|
|
478
|
+
autoEdit: 'auto edit',
|
|
479
|
+
yolo: 'yolo',
|
|
480
|
+
plan: 'plan',
|
|
481
|
+
badgeAutoEdit: 'auto edit',
|
|
482
|
+
badgeYolo: 'yolo',
|
|
483
|
+
badgePlan: 'plan',
|
|
484
|
+
},
|
|
485
|
+
context: {
|
|
486
|
+
remaining: ({ percent }: { percent: number }) => `${percent}% left`,
|
|
487
|
+
},
|
|
488
|
+
suggestion: {
|
|
489
|
+
fileLabel: 'FILE',
|
|
490
|
+
folderLabel: 'FOLDER',
|
|
491
|
+
},
|
|
492
|
+
noMachinesAvailable: 'No machines',
|
|
493
|
+
},
|
|
494
|
+
|
|
495
|
+
machineLauncher: {
|
|
496
|
+
showLess: 'Show less',
|
|
497
|
+
showAll: ({ count }: { count: number }) => `Show all (${count} paths)`,
|
|
498
|
+
enterCustomPath: 'Enter custom path',
|
|
499
|
+
offlineUnableToSpawn: 'Unable to spawn new session, offline',
|
|
500
|
+
},
|
|
501
|
+
|
|
502
|
+
sidebar: {
|
|
503
|
+
sessionsTitle: 'NasTech',
|
|
504
|
+
showArchived: 'Show archived',
|
|
505
|
+
hideArchived: 'Hide archived',
|
|
506
|
+
newSession: 'New session',
|
|
507
|
+
},
|
|
508
|
+
|
|
509
|
+
zen: {
|
|
510
|
+
toggle: 'Zen mode',
|
|
511
|
+
},
|
|
512
|
+
|
|
513
|
+
toolView: {
|
|
514
|
+
input: 'Input',
|
|
515
|
+
output: 'Output',
|
|
516
|
+
},
|
|
517
|
+
|
|
518
|
+
toolGroup: {
|
|
519
|
+
editedFiles: ({ count }: { count: number }) => count === 1 ? 'Edited 1 file' : `Edited ${count} files`,
|
|
520
|
+
readFiles: ({ count }: { count: number }) => count === 1 ? 'Read 1 file' : `Read ${count} files`,
|
|
521
|
+
ranCommands: ({ count }: { count: number }) => count === 1 ? 'Ran 1 command' : `Ran ${count} commands`,
|
|
522
|
+
searched: ({ count }: { count: number }) => count === 1 ? 'Searched 1 time' : `Searched ${count} times`,
|
|
523
|
+
fetchedUrls: ({ count }: { count: number }) => count === 1 ? 'Fetched 1 URL' : `Fetched ${count} URLs`,
|
|
524
|
+
ranTasks: ({ count }: { count: number }) => count === 1 ? 'Ran 1 task' : `Ran ${count} tasks`,
|
|
525
|
+
usedTools: ({ count }: { count: number }) => count === 1 ? 'Used 1 tool' : `Used ${count} tools`,
|
|
526
|
+
},
|
|
527
|
+
|
|
528
|
+
tools: {
|
|
529
|
+
fullView: {
|
|
530
|
+
description: 'Description',
|
|
531
|
+
inputParams: 'Input Parameters',
|
|
532
|
+
output: 'Output',
|
|
533
|
+
error: 'Error',
|
|
534
|
+
completed: 'Tool completed successfully',
|
|
535
|
+
noOutput: 'No output was produced',
|
|
536
|
+
running: 'Tool is running...',
|
|
537
|
+
rawJsonDevMode: 'Raw JSON (Dev Mode)',
|
|
538
|
+
},
|
|
539
|
+
taskView: {
|
|
540
|
+
initializing: 'Initializing agent...',
|
|
541
|
+
moreTools: ({ count }: { count: number }) => `+${count} more ${plural({ count, singular: 'tool', plural: 'tools' })}`,
|
|
542
|
+
},
|
|
543
|
+
multiEdit: {
|
|
544
|
+
editNumber: ({ index, total }: { index: number; total: number }) => `Edit ${index} of ${total}`,
|
|
545
|
+
replaceAll: 'Replace All',
|
|
546
|
+
},
|
|
547
|
+
names: {
|
|
548
|
+
task: 'Task',
|
|
549
|
+
terminal: 'Terminal',
|
|
550
|
+
searchFiles: 'Search Files',
|
|
551
|
+
search: 'Search',
|
|
552
|
+
searchContent: 'Search Content',
|
|
553
|
+
listFiles: 'List Files',
|
|
554
|
+
planProposal: 'Plan proposal',
|
|
555
|
+
readFile: 'Read File',
|
|
556
|
+
editFile: 'Edit File',
|
|
557
|
+
writeFile: 'Write File',
|
|
558
|
+
fetchUrl: 'Fetch URL',
|
|
559
|
+
readNotebook: 'Read Notebook',
|
|
560
|
+
editNotebook: 'Edit Notebook',
|
|
561
|
+
todoList: 'Todo List',
|
|
562
|
+
webSearch: 'Web Search',
|
|
563
|
+
reasoning: 'Reasoning',
|
|
564
|
+
applyChanges: 'Update file',
|
|
565
|
+
viewDiff: 'Current file changes',
|
|
566
|
+
question: 'Question',
|
|
567
|
+
},
|
|
568
|
+
askUserQuestion: {
|
|
569
|
+
submit: 'Submit Answer',
|
|
570
|
+
multipleQuestions: ({ count }: { count: number }) => `${count} questions`,
|
|
571
|
+
other: 'Other',
|
|
572
|
+
otherDescription: 'Type your own answer',
|
|
573
|
+
otherPlaceholder: 'Type your answer...',
|
|
574
|
+
},
|
|
575
|
+
desc: {
|
|
576
|
+
terminalCmd: ({ cmd }: { cmd: string }) => `Terminal(cmd: ${cmd})`,
|
|
577
|
+
searchPattern: ({ pattern }: { pattern: string }) => `Search(pattern: ${pattern})`,
|
|
578
|
+
searchPath: ({ basename }: { basename: string }) => `Search(path: ${basename})`,
|
|
579
|
+
fetchUrlHost: ({ host }: { host: string }) => `Fetch URL(url: ${host})`,
|
|
580
|
+
editNotebookMode: ({ path, mode }: { path: string; mode: string }) => `Edit Notebook(file: ${path}, mode: ${mode})`,
|
|
581
|
+
todoListCount: ({ count }: { count: number }) => `Todo List(count: ${count})`,
|
|
582
|
+
webSearchQuery: ({ query }: { query: string }) => `Web Search(query: ${query})`,
|
|
583
|
+
grepPattern: ({ pattern }: { pattern: string }) => `grep(pattern: ${pattern})`,
|
|
584
|
+
multiEditEdits: ({ path, count }: { path: string; count: number }) => `${path} (${count} edits)`,
|
|
585
|
+
readingFile: ({ file }: { file: string }) => `Reading ${file}`,
|
|
586
|
+
writingFile: ({ file }: { file: string }) => `Writing ${file}`,
|
|
587
|
+
modifyingFile: ({ file }: { file: string }) => `Modifying ${file}`,
|
|
588
|
+
modifyingFiles: ({ count }: { count: number }) => `Modifying ${count} files`,
|
|
589
|
+
modifyingMultipleFiles: ({ file, count }: { file: string; count: number }) => `${file} and ${count} more`,
|
|
590
|
+
showingDiff: 'Showing changes',
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
|
|
594
|
+
files: {
|
|
595
|
+
changes: 'Changes',
|
|
596
|
+
searchPlaceholder: 'Search files...',
|
|
597
|
+
detachedHead: 'detached HEAD',
|
|
598
|
+
summary: ({ staged, unstaged }: { staged: number; unstaged: number }) => `${staged} staged • ${unstaged} unstaged`,
|
|
599
|
+
notRepo: 'Not a git repository',
|
|
600
|
+
notUnderGit: 'This directory is not under git version control',
|
|
601
|
+
searching: 'Searching files...',
|
|
602
|
+
noFilesFound: 'No files found',
|
|
603
|
+
noFilesInProject: 'No files in project',
|
|
604
|
+
tryDifferentTerm: 'Try a different search term',
|
|
605
|
+
searchResults: ({ count }: { count: number }) => `Search Results (${count})`,
|
|
606
|
+
projectRoot: 'Project root',
|
|
607
|
+
stagedChanges: ({ count }: { count: number }) => `Staged Changes (${count})`,
|
|
608
|
+
unstagedChanges: ({ count }: { count: number }) => `Unstaged Changes (${count})`,
|
|
609
|
+
// File viewer strings
|
|
610
|
+
loadingFile: ({ fileName }: { fileName: string }) => `Loading ${fileName}...`,
|
|
611
|
+
binaryFile: 'Binary File',
|
|
612
|
+
cannotDisplayBinary: 'Cannot display binary file content',
|
|
613
|
+
diff: 'Diff',
|
|
614
|
+
file: 'File',
|
|
615
|
+
fileEmpty: 'File is empty',
|
|
616
|
+
noChanges: 'No changes to display',
|
|
617
|
+
noChangesTitle: 'No changes',
|
|
618
|
+
noChangesSubtitle: 'Working tree is clean',
|
|
619
|
+
deleted: 'Deleted',
|
|
620
|
+
changedFiles: ({ count }: { count: number }) => `${count} changed ${count === 1 ? 'file' : 'files'}`,
|
|
621
|
+
allFiles: 'All Files',
|
|
622
|
+
editFile: 'Edit',
|
|
623
|
+
saveFile: 'Save',
|
|
624
|
+
failedToRead: 'Failed to read file',
|
|
625
|
+
failedToSave: 'Failed to save file',
|
|
626
|
+
fileConflict: 'File conflict',
|
|
627
|
+
fileConflictDescription: 'This file was modified on the device while you were editing. Reload to see the latest version.',
|
|
628
|
+
reload: 'Reload',
|
|
629
|
+
overwrite: 'Overwrite',
|
|
630
|
+
},
|
|
631
|
+
|
|
632
|
+
settingsVoice: {
|
|
633
|
+
// Voice settings screen
|
|
634
|
+
languageTitle: 'Language',
|
|
635
|
+
languageDescription: 'Choose your preferred language for voice assistant interactions. This setting syncs across all your devices.',
|
|
636
|
+
preferredLanguage: 'Preferred Language',
|
|
637
|
+
preferredLanguageSubtitle: 'Language used for voice assistant responses',
|
|
638
|
+
language: {
|
|
639
|
+
searchPlaceholder: 'Search languages...',
|
|
640
|
+
title: 'Languages',
|
|
641
|
+
footer: ({ count }: { count: number }) => `${count} ${plural({ count, singular: 'language', plural: 'languages' })} available`,
|
|
642
|
+
autoDetect: 'Auto-detect',
|
|
643
|
+
},
|
|
644
|
+
// Bring your own agent
|
|
645
|
+
byoTitle: 'Bring Your Own Agent',
|
|
646
|
+
byoDescription: 'Use your own ElevenLabs agent instead of the NasTech default. No subscription required — connect directly with your own ElevenLabs account. Your agent must define two client tools: messageClaudeCode (sends text to the coding agent) and processPermissionRequest (allows or denies tool use). It receives session context via the {{initialConversationContext}} dynamic variable.',
|
|
647
|
+
customAgentId: 'ElevenLabs Agent ID',
|
|
648
|
+
customAgentIdNotSet: 'Not configured',
|
|
649
|
+
customAgentIdDescription: 'Enter your ElevenLabs agent ID. Leave empty to use the NasTech default.',
|
|
650
|
+
customAgentIdPlaceholder: 'e.g. abc123def456',
|
|
651
|
+
bypassToken: 'Direct Connection',
|
|
652
|
+
bypassTokenSubtitle: 'Skip NasTech server, connect straight to ElevenLabs',
|
|
653
|
+
promptGuideTitle: 'Agent Prompt Guide',
|
|
654
|
+
promptGuideDescription: 'Your ElevenLabs agent needs:\n\n• Tool: messageClaudeCode — parameter: message (string). Sends a message to the active coding session.\n• Tool: processPermissionRequest — parameter: decision ("allow" or "deny"). Approves or denies a pending tool permission.\n• Dynamic variable: {{initialConversationContext}} — receives session history and context on start.\n\nThe agent acts as a voice bridge between the user and coding agents. It should be concise, only respond when addressed, and report when a coding agent finishes work.',
|
|
655
|
+
usageTitle: 'Usage (Last 30 Days)',
|
|
656
|
+
usageFooter: 'Voice time used in the last 30 days. Free tier: 20 min. Subscribed: 5 hours. Max 100 conversations per month.',
|
|
657
|
+
usageLabel: 'Voice Time',
|
|
658
|
+
conversationsLabel: 'Conversations',
|
|
659
|
+
usageUsed: ({ used, limit }: { used: string; limit: string }) => `${used} used of ${limit}`,
|
|
660
|
+
supportTitle: 'Upgrade Voice',
|
|
661
|
+
supportSubtitle: 'Get more voice time and support development',
|
|
662
|
+
},
|
|
663
|
+
|
|
664
|
+
settingsAccount: {
|
|
665
|
+
// Account settings screen
|
|
666
|
+
accountInformation: 'Account Information',
|
|
667
|
+
status: 'Status',
|
|
668
|
+
statusActive: 'Active',
|
|
669
|
+
statusNotAuthenticated: 'Not Authenticated',
|
|
670
|
+
anonymousId: 'Anonymous ID',
|
|
671
|
+
publicId: 'Public ID',
|
|
672
|
+
notAvailable: 'Not available',
|
|
673
|
+
linkNewDevice: 'Link New Device',
|
|
674
|
+
linkNewDeviceSubtitle: 'Scan QR code to link device',
|
|
675
|
+
profile: 'Profile',
|
|
676
|
+
name: 'Name',
|
|
677
|
+
github: 'GitHub',
|
|
678
|
+
tapToDisconnect: 'Tap to disconnect',
|
|
679
|
+
server: 'Server',
|
|
680
|
+
backup: 'Backup',
|
|
681
|
+
backupDescription: 'Your secret key is the only way to recover your account. Save it in a secure place like a password manager.',
|
|
682
|
+
secretKey: 'Secret Key',
|
|
683
|
+
tapToReveal: 'Tap to reveal',
|
|
684
|
+
tapToHide: 'Tap to hide',
|
|
685
|
+
secretKeyLabel: 'SECRET KEY (TAP TO COPY)',
|
|
686
|
+
secretKeyCopied: 'Secret key copied to clipboard. Store it in a safe place!',
|
|
687
|
+
secretKeyCopyFailed: 'Failed to copy secret key',
|
|
688
|
+
privacy: 'Privacy',
|
|
689
|
+
privacyDescription: 'Help improve the app by sharing anonymous usage data. No personal information is collected.',
|
|
690
|
+
analytics: 'Analytics',
|
|
691
|
+
analyticsDisabled: 'No data is shared',
|
|
692
|
+
analyticsEnabled: 'Anonymous usage data is shared',
|
|
693
|
+
dangerZone: 'Danger Zone',
|
|
694
|
+
logout: 'Logout',
|
|
695
|
+
logoutSubtitle: 'Sign out and clear local data',
|
|
696
|
+
logoutConfirm: 'Are you sure you want to logout? Make sure you have backed up your secret key!',
|
|
697
|
+
},
|
|
698
|
+
|
|
699
|
+
settingsLanguage: {
|
|
700
|
+
// Language settings screen
|
|
701
|
+
title: 'Language',
|
|
702
|
+
description: 'Choose your preferred language for the app interface. This will sync across all your devices.',
|
|
703
|
+
currentLanguage: 'Current Language',
|
|
704
|
+
automatic: 'Automatic',
|
|
705
|
+
automaticSubtitle: 'Detect from device settings',
|
|
706
|
+
needsRestart: 'Language Changed',
|
|
707
|
+
needsRestartMessage: 'The app needs to restart to apply the new language setting.',
|
|
708
|
+
restartNow: 'Restart Now',
|
|
709
|
+
},
|
|
710
|
+
|
|
711
|
+
connectButton: {
|
|
712
|
+
authenticate: 'Authenticate Terminal',
|
|
713
|
+
authenticateWithUrlPaste: 'Authenticate Terminal with URL paste',
|
|
714
|
+
pasteAuthUrl: 'Paste the auth URL from your terminal',
|
|
715
|
+
},
|
|
716
|
+
|
|
717
|
+
updateBanner: {
|
|
718
|
+
updateAvailable: 'Update available',
|
|
719
|
+
pressToApply: 'Press to apply the update',
|
|
720
|
+
whatsNew: "What's new",
|
|
721
|
+
seeLatest: 'See the latest updates and improvements',
|
|
722
|
+
nativeUpdateAvailable: 'App Update Available',
|
|
723
|
+
tapToUpdateAppStore: 'Tap to update in App Store',
|
|
724
|
+
tapToUpdatePlayStore: 'Tap to update in Play Store',
|
|
725
|
+
},
|
|
726
|
+
|
|
727
|
+
changelog: {
|
|
728
|
+
// Used by the changelog screen
|
|
729
|
+
version: ({ version }: { version: number }) => `Version ${version}`,
|
|
730
|
+
noEntriesAvailable: 'No changelog entries available.',
|
|
731
|
+
},
|
|
732
|
+
|
|
733
|
+
terminal: {
|
|
734
|
+
// Used by terminal connection screens
|
|
735
|
+
webBrowserRequired: 'Web Browser Required',
|
|
736
|
+
webBrowserRequiredDescription: 'Terminal connection links can only be opened in a web browser for security reasons. Please use the QR code scanner or open this link on a computer.',
|
|
737
|
+
processingConnection: 'Processing connection...',
|
|
738
|
+
invalidConnectionLink: 'Invalid Connection Link',
|
|
739
|
+
invalidConnectionLinkDescription: 'The connection link is missing or invalid. Please check the URL and try again.',
|
|
740
|
+
connectTerminal: 'Connect Terminal',
|
|
741
|
+
terminalRequestDescription: 'A terminal is requesting to connect to your NasTech account. This will allow the terminal to send and receive messages securely.',
|
|
742
|
+
connectionDetails: 'Connection Details',
|
|
743
|
+
publicKey: 'Public Key',
|
|
744
|
+
encryption: 'Encryption',
|
|
745
|
+
endToEndEncrypted: 'End-to-end encrypted',
|
|
746
|
+
acceptConnection: 'Accept Connection',
|
|
747
|
+
connecting: 'Connecting...',
|
|
748
|
+
reject: 'Reject',
|
|
749
|
+
security: 'Security',
|
|
750
|
+
securityFooter: 'This connection link was processed securely in your browser and was never sent to any server. Your private data will remain secure and only you can decrypt the messages.',
|
|
751
|
+
securityFooterDevice: 'This connection was processed securely on your device and was never sent to any server. Your private data will remain secure and only you can decrypt the messages.',
|
|
752
|
+
clientSideProcessing: 'Client-Side Processing',
|
|
753
|
+
linkProcessedLocally: 'Link processed locally in browser',
|
|
754
|
+
linkProcessedOnDevice: 'Link processed locally on device',
|
|
755
|
+
},
|
|
756
|
+
|
|
757
|
+
modals: {
|
|
758
|
+
// Used across connect flows and settings
|
|
759
|
+
authenticateTerminal: 'Authenticate Terminal',
|
|
760
|
+
pasteUrlFromTerminal: 'Paste the authentication URL from your terminal',
|
|
761
|
+
deviceLinkedSuccessfully: 'Device linked successfully',
|
|
762
|
+
terminalConnectedSuccessfully: 'Terminal connected successfully',
|
|
763
|
+
invalidAuthUrl: 'Invalid authentication URL',
|
|
764
|
+
developerMode: 'Developer Mode',
|
|
765
|
+
developerModeEnabled: 'Developer mode enabled',
|
|
766
|
+
developerModeDisabled: 'Developer mode disabled',
|
|
767
|
+
disconnectGithub: 'Disconnect GitHub',
|
|
768
|
+
disconnectGithubConfirm: 'Are you sure you want to disconnect your GitHub account?',
|
|
769
|
+
disconnectService: ({ service }: { service: string }) =>
|
|
770
|
+
`Disconnect ${service}`,
|
|
771
|
+
disconnectServiceConfirm: ({ service }: { service: string }) =>
|
|
772
|
+
`Are you sure you want to disconnect ${service} from your account?`,
|
|
773
|
+
disconnect: 'Disconnect',
|
|
774
|
+
failedToConnectTerminal: 'Failed to connect terminal',
|
|
775
|
+
cameraPermissionsRequiredToConnectTerminal: 'Camera permissions are required to connect terminal',
|
|
776
|
+
failedToLinkDevice: 'Failed to link device',
|
|
777
|
+
cameraPermissionsRequiredToScanQr: 'Camera permissions are required to scan QR codes'
|
|
778
|
+
},
|
|
779
|
+
|
|
780
|
+
navigation: {
|
|
781
|
+
// Navigation titles and screen headers
|
|
782
|
+
connectTerminal: 'Connect Terminal',
|
|
783
|
+
linkNewDevice: 'Link New Device',
|
|
784
|
+
restoreWithSecretKey: 'Restore with Secret Key',
|
|
785
|
+
whatsNew: "What's New",
|
|
786
|
+
friends: 'Friends',
|
|
787
|
+
},
|
|
788
|
+
|
|
789
|
+
welcome: {
|
|
790
|
+
// Main welcome screen for unauthenticated users
|
|
791
|
+
title: 'Codex and Claude Code mobile client',
|
|
792
|
+
subtitle: 'End-to-end encrypted and your account is stored only on your device.',
|
|
793
|
+
createAccount: 'Create account',
|
|
794
|
+
linkOrRestoreAccount: 'Link or restore account',
|
|
795
|
+
loginWithMobileApp: 'Login with mobile app',
|
|
796
|
+
},
|
|
797
|
+
|
|
798
|
+
review: {
|
|
799
|
+
// Used by utils/requestReview.ts
|
|
800
|
+
enjoyingApp: 'Enjoying the app?',
|
|
801
|
+
feedbackPrompt: "We'd love to hear your feedback!",
|
|
802
|
+
yesILoveIt: 'Yes, I love it!',
|
|
803
|
+
notReally: 'Not really'
|
|
804
|
+
},
|
|
805
|
+
|
|
806
|
+
items: {
|
|
807
|
+
// Used by Item component for copy toast
|
|
808
|
+
copiedToClipboard: ({ label }: { label: string }) => `${label} copied to clipboard`
|
|
809
|
+
},
|
|
810
|
+
|
|
811
|
+
machine: {
|
|
812
|
+
launchNewSessionInDirectory: 'Launch New Session in Directory',
|
|
813
|
+
offlineUnableToSpawn: 'Launcher disabled while machine is offline',
|
|
814
|
+
offlineHelp: '• Make sure your computer is online\n• Run `nastech daemon status` to diagnose\n• Are you running the latest CLI version? Upgrade with `pip install -U nastech-agent`',
|
|
815
|
+
daemon: 'Daemon',
|
|
816
|
+
status: 'Status',
|
|
817
|
+
stopDaemon: 'Stop Daemon',
|
|
818
|
+
lastKnownPid: 'Last Known PID',
|
|
819
|
+
lastKnownHttpPort: 'Last Known HTTP Port',
|
|
820
|
+
startedAt: 'Started At',
|
|
821
|
+
cliVersion: 'CLI Version',
|
|
822
|
+
daemonStateVersion: 'Daemon State Version',
|
|
823
|
+
activeSessions: ({ count }: { count: number }) => `Active Sessions (${count})`,
|
|
824
|
+
machineGroup: 'Machine',
|
|
825
|
+
host: 'Host',
|
|
826
|
+
machineId: 'Machine ID',
|
|
827
|
+
username: 'Username',
|
|
828
|
+
homeDirectory: 'Home Directory',
|
|
829
|
+
platform: 'Platform',
|
|
830
|
+
architecture: 'Architecture',
|
|
831
|
+
lastSeen: 'Last Seen',
|
|
832
|
+
never: 'Never',
|
|
833
|
+
metadataVersion: 'Metadata Version',
|
|
834
|
+
cliAvailability: 'CLI Availability',
|
|
835
|
+
cliInstalled: 'Installed',
|
|
836
|
+
cliNotFound: 'Not found',
|
|
837
|
+
lastDetected: 'Last Detected',
|
|
838
|
+
untitledSession: 'Untitled Session',
|
|
839
|
+
back: 'Back',
|
|
840
|
+
dangerZone: 'Danger Zone',
|
|
841
|
+
delete: 'Delete Machine',
|
|
842
|
+
deleteFooter: 'Removes this machine from your account. Session history is preserved, but you will no longer be able to launch new sessions on it.',
|
|
843
|
+
deleteConfirmTitle: 'Delete this machine?',
|
|
844
|
+
deleteConfirmMessage: 'This removes the machine from your account. Session history is preserved, but you can no longer launch new sessions on it until you reconnect the daemon.',
|
|
845
|
+
deleteFailed: 'Failed to delete machine.',
|
|
846
|
+
},
|
|
847
|
+
|
|
848
|
+
message: {
|
|
849
|
+
switchedToMode: ({ mode }: { mode: string }) => `Switched to ${mode} mode`,
|
|
850
|
+
unknownEvent: 'Unknown event',
|
|
851
|
+
usageLimitUntil: ({ time }: { time: string }) => `Usage limit reached until ${time}`,
|
|
852
|
+
unknownTime: 'unknown time',
|
|
853
|
+
},
|
|
854
|
+
|
|
855
|
+
codex: {
|
|
856
|
+
// Codex permission dialog buttons
|
|
857
|
+
permissions: {
|
|
858
|
+
yesForSession: "Yes, and don't ask for a session",
|
|
859
|
+
stopAndExplain: 'Stop, and explain what to do',
|
|
860
|
+
}
|
|
861
|
+
},
|
|
862
|
+
|
|
863
|
+
claude: {
|
|
864
|
+
// Claude permission dialog buttons
|
|
865
|
+
permissions: {
|
|
866
|
+
yesAllowAllEdits: 'Yes, allow all edits during this session',
|
|
867
|
+
yesAllowEverything: 'Yes, allow everything during this session',
|
|
868
|
+
yesForTool: "Yes, don't ask again for this tool",
|
|
869
|
+
noTellClaude: 'No, and provide feedback',
|
|
870
|
+
}
|
|
871
|
+
},
|
|
872
|
+
|
|
873
|
+
textSelection: {
|
|
874
|
+
// Text selection screen
|
|
875
|
+
selectText: 'Select text range',
|
|
876
|
+
title: 'Select Text',
|
|
877
|
+
noTextProvided: 'No text provided',
|
|
878
|
+
textNotFound: 'Text not found or expired',
|
|
879
|
+
textCopied: 'Text copied to clipboard',
|
|
880
|
+
failedToCopy: 'Failed to copy text to clipboard',
|
|
881
|
+
noTextToCopy: 'No text available to copy',
|
|
882
|
+
},
|
|
883
|
+
|
|
884
|
+
markdown: {
|
|
885
|
+
// Markdown copy functionality
|
|
886
|
+
codeCopied: 'Code copied',
|
|
887
|
+
copyFailed: 'Failed to copy',
|
|
888
|
+
mermaidRenderFailed: 'Failed to render mermaid diagram',
|
|
889
|
+
},
|
|
890
|
+
|
|
891
|
+
artifacts: {
|
|
892
|
+
// Artifacts feature
|
|
893
|
+
title: 'Artifacts',
|
|
894
|
+
countSingular: '1 artifact',
|
|
895
|
+
countPlural: ({ count }: { count: number }) => `${count} artifacts`,
|
|
896
|
+
empty: 'No artifacts yet',
|
|
897
|
+
emptyDescription: 'Create your first artifact to get started',
|
|
898
|
+
new: 'New Artifact',
|
|
899
|
+
edit: 'Edit Artifact',
|
|
900
|
+
delete: 'Delete',
|
|
901
|
+
updateError: 'Failed to update artifact. Please try again.',
|
|
902
|
+
notFound: 'Artifact not found',
|
|
903
|
+
discardChanges: 'Discard changes?',
|
|
904
|
+
discardChangesDescription: 'You have unsaved changes. Are you sure you want to discard them?',
|
|
905
|
+
deleteConfirm: 'Delete artifact?',
|
|
906
|
+
deleteConfirmDescription: 'This action cannot be undone',
|
|
907
|
+
titleLabel: 'TITLE',
|
|
908
|
+
titlePlaceholder: 'Enter a title for your artifact',
|
|
909
|
+
bodyLabel: 'CONTENT',
|
|
910
|
+
bodyPlaceholder: 'Write your content here...',
|
|
911
|
+
emptyFieldsError: 'Please enter a title or content',
|
|
912
|
+
createError: 'Failed to create artifact. Please try again.',
|
|
913
|
+
save: 'Save',
|
|
914
|
+
saving: 'Saving...',
|
|
915
|
+
loading: 'Loading artifacts...',
|
|
916
|
+
error: 'Failed to load artifact',
|
|
917
|
+
},
|
|
918
|
+
|
|
919
|
+
friends: {
|
|
920
|
+
// Friends feature
|
|
921
|
+
title: 'Friends',
|
|
922
|
+
manageFriends: 'Manage your friends and connections',
|
|
923
|
+
searchTitle: 'Find Friends',
|
|
924
|
+
pendingRequests: 'Friend Requests',
|
|
925
|
+
myFriends: 'My Friends',
|
|
926
|
+
noFriendsYet: "You don't have any friends yet",
|
|
927
|
+
findFriends: 'Find Friends',
|
|
928
|
+
remove: 'Remove',
|
|
929
|
+
pendingRequest: 'Pending',
|
|
930
|
+
sentOn: ({ date }: { date: string }) => `Sent on ${date}`,
|
|
931
|
+
accept: 'Accept',
|
|
932
|
+
reject: 'Reject',
|
|
933
|
+
addFriend: 'Add Friend',
|
|
934
|
+
alreadyFriends: 'Already Friends',
|
|
935
|
+
requestPending: 'Request Pending',
|
|
936
|
+
searchInstructions: 'Enter a username to search for friends',
|
|
937
|
+
searchPlaceholder: 'Enter username...',
|
|
938
|
+
searching: 'Searching...',
|
|
939
|
+
userNotFound: 'User not found',
|
|
940
|
+
noUserFound: 'No user found with that username',
|
|
941
|
+
checkUsername: 'Please check the username and try again',
|
|
942
|
+
howToFind: 'How to Find Friends',
|
|
943
|
+
findInstructions: 'Search for friends by their username. Both you and your friend need to have GitHub connected to send friend requests.',
|
|
944
|
+
requestSent: 'Friend request sent!',
|
|
945
|
+
requestAccepted: 'Friend request accepted!',
|
|
946
|
+
requestRejected: 'Friend request rejected',
|
|
947
|
+
friendRemoved: 'Friend removed',
|
|
948
|
+
confirmRemove: 'Remove Friend',
|
|
949
|
+
confirmRemoveMessage: 'Are you sure you want to remove this friend?',
|
|
950
|
+
cannotAddYourself: 'You cannot send a friend request to yourself',
|
|
951
|
+
bothMustHaveGithub: 'Both users must have GitHub connected to become friends',
|
|
952
|
+
status: {
|
|
953
|
+
none: 'Not connected',
|
|
954
|
+
requested: 'Request sent',
|
|
955
|
+
pending: 'Request pending',
|
|
956
|
+
friend: 'Friends',
|
|
957
|
+
rejected: 'Rejected',
|
|
958
|
+
},
|
|
959
|
+
acceptRequest: 'Accept Request',
|
|
960
|
+
removeFriend: 'Remove Friend',
|
|
961
|
+
removeFriendConfirm: ({ name }: { name: string }) => `Are you sure you want to remove ${name} as a friend?`,
|
|
962
|
+
requestSentDescription: ({ name }: { name: string }) => `Your friend request has been sent to ${name}`,
|
|
963
|
+
requestFriendship: 'Request friendship',
|
|
964
|
+
cancelRequest: 'Cancel friendship request',
|
|
965
|
+
cancelRequestConfirm: ({ name }: { name: string }) => `Cancel your friendship request to ${name}?`,
|
|
966
|
+
denyRequest: 'Deny friendship',
|
|
967
|
+
nowFriendsWith: ({ name }: { name: string }) => `You are now friends with ${name}`,
|
|
968
|
+
},
|
|
969
|
+
|
|
970
|
+
usage: {
|
|
971
|
+
// Usage panel strings
|
|
972
|
+
today: 'Today',
|
|
973
|
+
last7Days: 'Last 7 days',
|
|
974
|
+
last30Days: 'Last 30 days',
|
|
975
|
+
totalTokens: 'Total Tokens',
|
|
976
|
+
totalCost: 'Total Cost',
|
|
977
|
+
tokens: 'Tokens',
|
|
978
|
+
cost: 'Cost',
|
|
979
|
+
usageOverTime: 'Usage over time',
|
|
980
|
+
byModel: 'By Model',
|
|
981
|
+
noData: 'No usage data available',
|
|
982
|
+
},
|
|
983
|
+
|
|
984
|
+
imageUpload: {
|
|
985
|
+
permissionTitle: 'Photo Library Access',
|
|
986
|
+
permissionMessage: 'Allow access to your photo library to attach images to messages.',
|
|
987
|
+
limitTitle: 'Image Limit Reached',
|
|
988
|
+
limitMessage: ({ max }: { max: number }) => `You can attach up to ${max} images per message.`,
|
|
989
|
+
fileTooLargeTitle: 'File Too Large',
|
|
990
|
+
fileTooLargeMessage: ({ name, maxMb }: { name: string; maxMb: number }) => `"${name}" exceeds the ${maxMb}MB limit and was not added.`,
|
|
991
|
+
uploadFailedTitle: 'Upload Failed',
|
|
992
|
+
uploadFailedMessage: ({ count }: { count: number }) => count === 1
|
|
993
|
+
? 'One image could not be uploaded and was not sent.'
|
|
994
|
+
: `${count} images could not be uploaded and were not sent.`,
|
|
995
|
+
notSupportedTitle: 'Images Not Supported',
|
|
996
|
+
notSupportedMessage: 'This agent does not support image attachments. Only the text was sent.',
|
|
997
|
+
},
|
|
998
|
+
|
|
999
|
+
feed: {
|
|
1000
|
+
// Feed notifications for friend requests and acceptances
|
|
1001
|
+
friendRequestFrom: ({ name }: { name: string }) => `${name} sent you a friend request`,
|
|
1002
|
+
friendRequestGeneric: 'New friend request',
|
|
1003
|
+
friendAccepted: ({ name }: { name: string }) => `You are now friends with ${name}`,
|
|
1004
|
+
friendAcceptedGeneric: 'Friend request accepted',
|
|
1005
|
+
},
|
|
1006
|
+
|
|
1007
|
+
} as const;
|
|
1008
|
+
|
|
1009
|
+
export type TranslationsEn = typeof en;
|