508b326bf7874ec9edf4d580e9165d14eda30869
3 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
508b326bf7
|
feat(F5): authenticated chat + key usage integration
All checks were successful
CI / Format (push) Successful in 32s
CI / CUDA type-check (push) Successful in 1m37s
CI / Clippy (push) Successful in 3m22s
CI / Test (push) Successful in 7m4s
CI / Build cortex SRPM (push) Has been skipped
CI / Publish cortex to COPR (push) Has been skipped
CI / Build neuron SRPM (push) Has been skipped
CI / Publish neuron to COPR (push) Has been skipped
CI / Bump version in source (push) Has been skipped
Signing in upgrades the chat workspace from anonymous to account-scoped. - Auth context exposes accountId (resolved on login and on reload for an existing token) so the chat can scope its Dexie owner and the dashboard can query. - Chat: when authed, owner switches to the account id (anon history was already re-owned via claimAnonymousData on login), the anon message cap is lifted (budget is enforced upstream by the account allocation), the full default model (VITE_DEFAULT_MODEL) is used, and the user's API key is sent as the bearer. - The bearer is the raw key the user stored locally via "use for chat on this device" in the key-creation modal (client-side only — consistent with no server-side secrets). Signed in without a stored key → a banner prompts creating/enabling one (sending is disabled until then). - Error mapping: insufficient_quota → top-up link (/account) when authed, sign-up (/register) when anon; rate_limit_exceeded → a wait-and-retry hint; both distinct from generic errors. - New chat (topUp/rateLimited/needsKey/manageKeysLink) and account (keys.useForChat/usedForChat) i18n keys across all languages. Validated: lint, typecheck, build, i18n:check all green. Explicit-path commit; no node_modules/dist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F6o3ddqmYNh9kzdwq6eowh |
|||
|
c596519dbd
|
feat(F3): anonymous chat landing — IndexedDB history + SSE + fingerprint
All checks were successful
CI / Format (push) Successful in 46s
CI / CUDA type-check (push) Successful in 1m40s
CI / Clippy (push) Successful in 3m20s
CI / Test (push) Successful in 8m3s
CI / Build cortex SRPM (push) Has been skipped
CI / Publish cortex to COPR (push) Has been skipped
CI / Build neuron SRPM (push) Has been skipped
CI / Publish neuron to COPR (push) Has been skipped
CI / Bump version in source (push) Has been skipped
The beta centerpiece: a chat workspace at `/` with zero server-side history. Everything personal lives in the browser (Dexie/IndexedDB); inference streams from the mesh router. - data/db.ts: Dexie schema (projects, conversations[owner:'anon'|accountId], messages, meta) — `owner` namespaces anonymous vs account data; claimAnonymousData() (repositories) re-owns anon data on login (F4), still client-side. - data/repositories.ts: typed CRUD + ordered queries (projects, conversations, messages) used reactively via useLiveQuery. - lib/fingerprint.ts: FingerprintJS OSS, cached in meta (best-effort, never auth) — namespaces anon data + a soft throttle id. - lib/chatClient.ts: streamChatCompletion → POST /v1/chat/completions stream:true; parses the SSE byte stream incrementally (data:/[DONE]/ partial frames), surfaces the OpenAI envelope error.code, AbortController for Stop. - lib/useChat.ts: persists the user turn, opens a streaming assistant message, appends deltas to Dexie live, titles the conversation, finalizes on done/error. - pages/Chat.tsx: sidebar (new chat / new project, conversations grouped by project + Unsorted), live-updating thread with streaming + error rendering, composer with send/stop. Anonymous mode: no bearer + VITE_ANON_MODEL + a client message cap with a sign-up nudge. Routed at `/`. - chat i18n namespace extended (newChat/newProject/unsorted/emptyState/ anonBanner/signUp/stop) across all 33 languages (parity holds). Validated: npm run lint, typecheck, build all green; i18n:check consistent. (Full browser flow exercised in F6 verify.) Explicit-path commit; no node_modules/dist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F6o3ddqmYNh9kzdwq6eowh |
|||
|
7a6f252fe0
|
feat(F1): theming + 33-language i18n + usage-ordered language selector
All checks were successful
CI / Format (push) Successful in 40s
CI / CUDA type-check (push) Successful in 1m39s
CI / Clippy (push) Successful in 2m50s
CI / Test (push) Successful in 6m34s
CI / Build cortex SRPM (push) Has been skipped
CI / Publish cortex to COPR (push) Has been skipped
CI / Build neuron SRPM (push) Has been skipped
CI / Publish neuron to COPR (push) Has been skipped
CI / Bump version in source (push) Has been skipped
Ports the reference site's visual + i18n foundation into helexa.ai and adds the deliberate usage-ordered language picker. - Ported from ~/git/helexa-ai/helexa.ai: src/layout (ThemeProvider/theme, localStorage + data-theme, light/dark), src/App.css (cyan/hot-pink accents, system fonts), src/i18n (index + languages + translation-priority + resources for 33 languages × common/home/chat), Footer, DirectionalIcon, public assets, and the check-i18n-* scripts. - getLanguageOptionsByUsage() (in translation-priority.ts): orders the selector by the TRANSLATION_PRIORITY ranking (≈ native-speaker usage), deduping repeated entries and appending any unranked supported language — NOT alphabetical, the marketing-driven choice that foregrounds helexa's international grounding. RTL preserved. - Header: usage-ordered language dropdown (autonym + secondary label in the current language), theme toggle, and new nav — `/` (chat), `/mission`, and a Login/Register auth cluster stubbed until F4. New nav keys (mission/login/register/account/logout) injected into all 33 common.json with English placeholders so key-parity holds. - App composes ThemeProvider → BrowserRouter → Header + routes + Footer (placeholders for `/` and `/mission`); main.tsx loads i18n. Validated: npm run lint, typecheck, build all green; npm run i18n:check reports all keys consistent across the 33 languages. (Build emits a chunk-size advisory — code-splitting is deferred to F6 polish.) Staged with explicit paths; no node_modules/dist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F6o3ddqmYNh9kzdwq6eowh |