Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions internal/ajean/ui/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3438,6 +3438,11 @@ <h1 id="brand" aria-label="ajean"><span id="brand-a"><svg viewBox="0 0 4 5" shap
"jean.act_task_run": "Travaille sur « {name} »…",
"jean.act_search": "Fouille dans sa mémoire…",
"jean.act_remember": "Retient ça…",
"jean.act_note": "Note dans son journal…",
"jean.act_lesson": "Retient la leçon…",
"jean.act_save": "Écrit une fiche…",
"jean.act_patch": "Corrige une fiche…",
"jean.act_rule": "Pose une règle…",
"jean.act_forget": "Oublie…",
"jean.act_web": "Cherche sur le web…",
"jean.act_task": "Programme un rappel…",
Expand Down Expand Up @@ -4788,6 +4793,11 @@ <h1 id="brand" aria-label="ajean"><span id="brand-a"><svg viewBox="0 0 4 5" shap
"jean.act_task_run": "Working on “{name}”…",
"jean.act_search": "Looking through memory…",
"jean.act_remember": "Remembering that…",
"jean.act_note": "Writing a note…",
"jean.act_lesson": "Saving the lesson…",
"jean.act_save": "Writing a fiche…",
"jean.act_patch": "Patching a fiche…",
"jean.act_rule": "Setting a rule…",
"jean.act_forget": "Forgetting…",
"jean.act_web": "Searching the web…",
"jean.act_task": "Setting a reminder…",
Expand Down Expand Up @@ -9312,8 +9322,13 @@ <h1 id="brand" aria-label="ajean"><span id="brand-a"><svg viewBox="0 0 4 5" shap
let JACT='';
function jeanActFor(name){
if(/^(jean_search|jean_read|recall|recall_search|mem_search|mem_read)$/.test(name)) return 'jean.act_search';
if(/^(jean_remember|jean_note|jean_save|jean_lesson|jean_patch|jean_rule|mem_add|mem_edit)$/.test(name)) return 'jean.act_remember';
if(/^(jean_forget|mem_delete)$/.test(name)) return 'jean.act_forget';
if(name==='jean_remember'||name==='mem_add'||name==='mem_edit') return 'jean.act_remember';
if(name==='jean_note') return 'jean.act_note';
if(name==='jean_lesson') return 'jean.act_lesson';
if(name==='jean_save') return 'jean.act_save';
if(name==='jean_patch') return 'jean.act_patch';
if(name==='jean_rule') return 'jean.act_rule';
if(name==='jean_forget'||name==='mem_delete') return 'jean.act_forget';
if(/^web_/.test(name)) return 'jean.act_web';
if(/^task_/.test(name)) return 'jean.act_task';
if(/^browser_/.test(name)) return 'jean.act_browse';
Expand Down Expand Up @@ -9394,7 +9409,9 @@ <h1 id="brand" aria-label="ajean"><span id="brand-a"><svg viewBox="0 0 4 5" shap
if(!(elapsedMs>0) && !(tok>0) && !(pr && !viewOn('hide-preset'))){ removeGenEl(); scrollMaybe(true); return; }
const items=genItems(elapsedMs/1000, tok, rate, pr, '');
if(!(elapsedMs>0)) items.shift();
const g=ensureGenEl(); paintGenParts(g.querySelector('.gtxt'), items);
const g=ensureGenEl();
const act=g.querySelector('.jact'); if(act){ act.textContent=''; act.classList.remove('jact-in'); }
paintGenParts(g.querySelector('.gtxt'), items);
GENEL=null; if(!CHAT_TARGET) JeanAvatar&&JeanAvatar.detach();
scrollMaybe(true);
}
Expand Down Expand Up @@ -12444,7 +12461,8 @@ <h1 id="brand" aria-label="ajean"><span id="brand-a"><svg viewBox="0 0 4 5" shap
act(k){
if(!k) return;
wake();
const map={'jean.act_think':'think','jean.act_read':'think','jean.act_search':'search','jean.act_remember':'search','jean.act_forget':'search',
const map={'jean.act_think':'think','jean.act_read':'think','jean.act_search':'search','jean.act_remember':'search','jean.act_note':'search','jean.act_lesson':'search',
'jean.act_save':'search','jean.act_patch':'search','jean.act_rule':'search','jean.act_forget':'search',
'jean.act_web':'web','jean.act_browse':'web','jean.act_look':'web','jean.act_machine':'work','jean.act_task':'work','jean.act_work':'work'};
setState(map[k]||'think');
},
Expand Down
10 changes: 10 additions & 0 deletions internal/ajean/ui/src/js/00a-i18n-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,11 @@ fr: {
"jean.act_task_run": "Travaille sur « {name} »…",
"jean.act_search": "Fouille dans sa mémoire…",
"jean.act_remember": "Retient ça…",
"jean.act_note": "Note dans son journal…",
"jean.act_lesson": "Retient la leçon…",
"jean.act_save": "Écrit une fiche…",
"jean.act_patch": "Corrige une fiche…",
"jean.act_rule": "Pose une règle…",
"jean.act_forget": "Oublie…",
"jean.act_web": "Cherche sur le web…",
"jean.act_task": "Programme un rappel…",
Expand Down Expand Up @@ -1661,6 +1666,11 @@ en: {
"jean.act_task_run": "Working on “{name}”…",
"jean.act_search": "Looking through memory…",
"jean.act_remember": "Remembering that…",
"jean.act_note": "Writing a note…",
"jean.act_lesson": "Saving the lesson…",
"jean.act_save": "Writing a fiche…",
"jean.act_patch": "Patching a fiche…",
"jean.act_rule": "Setting a rule…",
"jean.act_forget": "Forgetting…",
"jean.act_web": "Searching the web…",
"jean.act_task": "Setting a reminder…",
Expand Down
23 changes: 20 additions & 3 deletions internal/ajean/ui/src/js/09-stream.js
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,17 @@ function paintGenStatus(){
let JACT='';
function jeanActFor(name){
if(/^(jean_search|jean_read|recall|recall_search|mem_search|mem_read)$/.test(name)) return 'jean.act_search';
if(/^(jean_remember|jean_note|jean_save|jean_lesson|jean_patch|jean_rule|mem_add|mem_edit)$/.test(name)) return 'jean.act_remember';
if(/^(jean_forget|mem_delete)$/.test(name)) return 'jean.act_forget';
// Un libellé par GESTE. Les six opérations mémoire partageaient « Retient ça… », qui est
// l'état le plus affiché de toute l'app (les consignes font enregistrer à chaque tour) :
// à l'écran, noter une ligne de journal, écrire une fiche et retenir un fait durable
// étaient le même mot. L'utilisateur ne pouvait pas distinguer ce qui venait d'être écrit.
if(name==='jean_remember'||name==='mem_add'||name==='mem_edit') return 'jean.act_remember';
if(name==='jean_note') return 'jean.act_note';
if(name==='jean_lesson') return 'jean.act_lesson';
if(name==='jean_save') return 'jean.act_save';
if(name==='jean_patch') return 'jean.act_patch';
if(name==='jean_rule') return 'jean.act_rule';
if(name==='jean_forget'||name==='mem_delete') return 'jean.act_forget';
if(/^web_/.test(name)) return 'jean.act_web';
if(/^task_/.test(name)) return 'jean.act_task';
if(/^browser_/.test(name)) return 'jean.act_browse';
Expand Down Expand Up @@ -333,7 +342,15 @@ function finalizeTurn(elapsedMs, preset){
if(!(elapsedMs>0) && !(tok>0) && !(pr && !viewOn('hide-preset'))){ removeGenEl(); scrollMaybe(true); return; }
const items=genItems(elapsedMs/1000, tok, rate, pr, '');
if(!(elapsedMs>0)) items.shift();
const g=ensureGenEl(); paintGenParts(g.querySelector('.gtxt'), items);
const g=ensureGenEl();
// Le mot d'activité DOIT être effacé ici. `GENEL=null` détache la ligne sans la vider :
// elle reste dans le fil comme trace du tour fini, avec son <span class="jact"> encore
// plein. Or le CSS anime tout `.jact:not(:empty)::after` avec un balayage `infinite`,
// donc chaque « Retient ça… » des tours passés continuait à briller pour toujours — et
// la règle `.jact:not(:empty)+.gtxt{display:none}` cachait par-dessus le coup la ligne
// de métriques (durée · tokens · t/s), remplacée par ce mot figé.
const act=g.querySelector('.jact'); if(act){ act.textContent=''; act.classList.remove('jact-in'); }
paintGenParts(g.querySelector('.gtxt'), items);
GENEL=null; if(!CHAT_TARGET) JeanAvatar&&JeanAvatar.detach();
scrollMaybe(true); // révèle la fin (et cette ligne) même sur un fil à peine défilable
}
Expand Down
3 changes: 2 additions & 1 deletion internal/ajean/ui/src/js/20-jean-avatar.js
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,8 @@ var JeanAvatar = (()=>{
act(k){
if(!k) return;
wake();
const map={'jean.act_think':'think','jean.act_read':'think','jean.act_search':'search','jean.act_remember':'search','jean.act_forget':'search',
const map={'jean.act_think':'think','jean.act_read':'think','jean.act_search':'search','jean.act_remember':'search','jean.act_note':'search','jean.act_lesson':'search',
'jean.act_save':'search','jean.act_patch':'search','jean.act_rule':'search','jean.act_forget':'search',
'jean.act_web':'web','jean.act_browse':'web','jean.act_look':'web','jean.act_machine':'work','jean.act_task':'work','jean.act_work':'work'};
setState(map[k]||'think');
},
Expand Down
Loading