feat(ai): unify reply center and refresh keyboard AI features

- Merge invitation, task, blessing, clarification, and empathy actions
  into a single Reply flow, with three fixed, clearly labeled stance
  choices whenever user intent must not be guessed.
- Refine clipboard semantic routing with bilingual schedule,
  confirmation, and follow-up models, conservative language thresholds,
  and explicit-assignment guard for complaint-only text.
- Persist Apple account refresh state, harden session recovery, and
  surface durable account diagnostics across keyboard and app.
- Derive personal-style prompts through two-stage corpus evidence and
  apply real low-confidence ASR tendencies instead of neutral templates.
- Localize the new reply center, clipboard semantics, and personal-style
  surfaces in both English and Simplified Chinese.
This commit is contained in:
Rocky
2026-08-29 11:51:21 +08:00
parent f91a8f2456
commit 3c10d73d7f
30 changed files with 2090 additions and 447 deletions
@@ -45,9 +45,16 @@
"error.llm.http" = "API returned HTTP %lld. Try again later or contact the provider.";
"error.llm.decoding" = "Failed to parse the API response.";
"error.llm.transport" = "Network error. Check your connection and try again.";
"error.llm.timeout" = "The AI request timed out. Please try again.";
"error.llm.rateLimited" = "Too many API requests. Please wait and try again.";
"error.llm.cancelled" = "Request cancelled.";
/* Personal style learning errors */
"styleLearning.error.emptyRequest" = "There is no learning content to send to the AI. Reopen this page and try again.";
"styleLearning.error.timeout" = "Style generation timed out while analyzing your history. Please try again.";
"styleLearning.error.missingAPIKey" = "The current AI service has no API key. Configure it in Settings and try again.";
"styleLearning.error.keychainLocked" = "The API key is temporarily unavailable. Unlock your device and try again.";
/* ASR errors */
"error.asr.localeUnsupported" = "Speech language assets are unavailable. Try again later or switch the recognition language.";
"error.asr.assetsNotReady" = "Speech language assets are not ready. Try again later.";
@@ -202,6 +209,7 @@
"mac.styles.learn.generating" = "Generating…";
"mac.styles.learn.privacy" = "Sent to your configured AI only when you generate. Review and edit before saving.";
"mac.styles.learn.limit" = "Delete a custom style before generating another one.";
"mac.styles.learn.error.title" = "Couldnt Generate Style";
"mac.styles.learn.error.insufficient" = "Keep dictating until 2,500 effective characters are available.";
"mac.styles.learn.error.invalidResponse" = "The AI did not return a valid writing style. Please try again.";
"mac.styles.learn.error.promptTooLong" = "The generated prompt exceeded 6,000 characters. Please try again.";