You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: apps/macos/Sources/AppLocalization.swift
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -591,7 +591,7 @@ enum AppText {
591
591
case.providerNeedsDetails:
592
592
returnpick(language, en:"Provider and model ID are required; OpenAI Compatible also needs Base URL unless reusing an existing setup.", zh:"请选择模型服务并填写模型 ID;OpenAI Compatible 通常还需要 Base URL,除非复用已有配置。", fr:"Provider et ID de modèle sont requis ; OpenAI Compatible nécessite aussi une Base URL sauf si vous réutilisez une configuration.", de:"Provider und Modell-ID sind erforderlich; OpenAI Compatible braucht zusätzlich eine Base URL, außer du nutzt eine bestehende Konfiguration.")
593
593
case.learningTitle:
594
-
returnpick(language, en:"Building Your Elephant", zh:"正在建立你的 Elephant", fr:"Construction de votre Elephant", de:"Dein Elephant wird aufgebaut")
594
+
returnpick(language, en:"Building your Personal Model deeply", zh:"深度构建你的个人模型中", fr:"Construction approfondie de votre Personal Model", de:"Dein Personal Model wird vertieft aufgebaut")
595
595
case.learningPreparing:
596
596
returnpick(language, en:"Preparing your first learning pass", zh:"准备第一次学习", fr:"Préparation du premier apprentissage", de:"Ersten Lernlauf vorbereiten")
Text(localizedYouText(model.appLanguage, en: "Open the first note it wrote after getting to know you.", zh: "打开它认识你之后写下的第一封信。", fr: "Ouvrez sa première note après vous avoir connu.", de: "Öffne die erste Nachricht nach dem Kennenlernen."))
136
+
.lineLimit(1)
137
+
Text(localizedYouText(model.appLanguage, en: "It is ready to read.", zh: "它已经写好了。", fr: "Elle est prête à lire.", de: "Er ist bereit."))
private var latestToolItem: OnboardingLearningToolTraceItem? {
21511
-
guard let event = job?.toolProgress.events.last else { return nil }
21512
-
let phase = resolvedToolPhase(event)
21513
-
return OnboardingLearningToolTraceItem(
21514
-
toolID: event.toolID,
21515
-
phase: phase,
21516
-
name: toolDisplayName(event.toolID),
21517
-
detail: toolPhaseDisplayName(phase),
21518
-
preview: event.preview,
21519
-
symbol: toolPhaseSymbol(phase),
21520
-
tint: toolPhaseTint(phase)
21521
-
)
21517
+
guard let events = job?.toolProgress.events else { return nil }
21518
+
for event in events.reversed() {
21519
+
let phase = resolvedToolPhase(event)
21520
+
guard !isHiddenToolPhase(phase) else { continue }
21521
+
return OnboardingLearningToolTraceItem(
21522
+
toolID: event.toolID,
21523
+
phase: phase,
21524
+
name: toolDisplayName(event.toolID),
21525
+
detail: toolPhaseDisplayName(phase),
21526
+
preview: event.preview,
21527
+
symbol: toolPhaseSymbol(phase),
21528
+
tint: toolPhaseTint(phase)
21529
+
)
21530
+
}
21531
+
return nil
21522
21532
}
21523
21533
21524
21534
private var panelSubtitle: String {
21525
-
if !modelProgress.text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
21526
-
return localizedYouText(model.appLanguage, en: "Elephant is turning your answers into the first usable memory.", zh: "Elephant 正在把你的回答整理成第一版可用记忆。", fr: "Elephant transforme vos réponses en première mémoire.", de: "Elephant macht aus deinen Antworten die erste Erinnerung.")
21527
-
}
21528
-
if latestToolItem != nil {
21529
-
return localizedYouText(model.appLanguage, en: "Following one live signal at a time.", zh: "正在跟随一个实时信号,不打断你的开始体验。", fr: "Suit un signal en direct.", de: "Folgt einem Live-Signal.")
21530
-
}
21531
-
return localizedYouText(model.appLanguage, en: "Keep this as one calm moment while setup finishes.", zh: "最后一步保持成一个安静的建立时刻。", fr: "Un moment calme pendant la fin de configuration.", de: "Ein ruhiger Moment, während die Einrichtung endet.")
21535
+
localizedYouText(model.appLanguage, en: "This usually takes 3 to 5 minutes.", zh: "需要 3 到 5 分钟", fr: "Cela prend généralement 3 à 5 minutes.", de: "Das dauert meist 3 bis 5 Minuten.")
"- Treat the portrait below as grounding evidence, not copy to paste into the letter.",
338
338
"- Synthesize repeated facts once. Do not list the user's traits like a dashboard or psychological report.",
339
339
"- Do not mention raw lens names, PM topics, field IDs, demographic fragments, avatar paths, or schema language.",
340
-
"- Warmth should come from specific attention to rhythm, pressure/recovery style, current focus, values, tastes, and hopes.",
340
+
"- Warmth should come from specific attention to rhythm, pressure/recovery style, current focus, values, tastes, hopes, and the tension underneath the facts.",
341
+
"- Prefer two or three deeper observations over many shallow facts. Name what the user may be trying to protect, carry, or move toward when the evidence supports it.",
341
342
"- Elephant may promise to remember this beginning and keep useful traces, but must not pretend a long shared history that is not in evidence.",
342
343
)
343
344
@@ -614,7 +615,7 @@ def build_evidence(
614
615
*(portraitor ("(no facts yet)",)),
615
616
"",
616
617
"## Product promise to weave into the letter",
617
-
"AI is becoming more capable, many people worry about being replaced, and Elephant's answer is: 别怕,我们一同进化. Write this as Elephant's own promise: I remember the path we start walking, I keep the useful traces, and I evolve with you rather than replacing you.",
618
+
"AI is becoming more capable, and many people quietly worry about being replaced, flattened, or forced to speed up. Do not drop a slogan. Write this as Elephant's own promise: I keep memory for the user, help them stay close to what matters, and grow beside them rather than replacing them.",
0 commit comments