v0.7.1 : pastille du cumul après son montant dans la ligne d'état

This commit is contained in:
ange committed 2026-10-31 12:07:46 +01:00
1 parent 831efa644a
commit 8f78710401
6 files changed
+10 -10

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "miam",
"displayName": "MIAM",
"version": "0.7.0",
"version": "0.7.1",
"description": "Délégation de tâches à un modèle local géré par MIAM (Mon IA Manager) : règles de délégation, gains en tokens et usage Claude (5 h, hebdo) en couleur",
"author": {
"name": "Ange-Marie MAURIN"
+1 -1
View File
@@ -57,7 +57,7 @@ Les subagents ne sont pas concernés. Si MIAM ne répond pas, ou si la sortie ne
## Ligne d'état : gains et usage Claude
Une seule ligne, sans coût en tokens (`🟢 MIAM net ~4k (cumul ~35k) · 5 h 🟩🟩⬛⬛⬛ 42 % (1 h 53) · hebdo 🟩🟩🟩⬛⬛ 53 % (3 j 20 h)`) :
Une seule ligne, sans coût en tokens (`🟢 MIAM net ~4k (cumul ~35k)🟢 · 5 h 🟩🟩⬛⬛⬛ 42 % (1 h 53) · hebdo 🟩🟩🟩⬛⬛ 53 % (3 j 20 h)`) :
- le gain net, 🟢 s'il est positif, 🔴 s'il est négatif ;
- l'usage Claude sur 5 h et sur la semaine : barre, pourcentage et temps avant la remise à zéro. La barre est verte, orange à partir de 70 %, rouge à partir de 90 %. Ces chiffres viennent de la dernière réponse de l'API : ils n'apparaissent qu'après un premier échange, et seulement avec un abonnement.
+4 -4
View File
@@ -34,18 +34,18 @@ test('affichage', () => {
expect(court(-350)).toBe('-350')
const cumul = { delegations: 9, evites: 40000, pilotage: 5000, corrections: 0 }
expect(ligne({ delegations: 2, evites: 6100, pilotage: 1500, corrections: 0 }, cumul))
.toBe('🟢 MIAM net ~4,6k (cumul ~35k)')
.toBe('🟢 MIAM net ~4,6k (cumul ~35k)🟢')
expect(ligne({ delegations: 2, evites: 6100, pilotage: 1500, corrections: 600 }, cumul))
.toBe('🟢 MIAM net ~4k (cumul ~35k)')
.toBe('🟢 MIAM net ~4k (cumul ~35k)🟢')
expect(ligne({ delegations: 1, evites: 900, pilotage: 0, corrections: 0 }, cumul))
.toBe('🟢 MIAM net ~900 (cumul ~35k)')
.toBe('🟢 MIAM net ~900 (cumul ~35k)🟢')
expect(ligne(VIDE, cumul)).toBe('🟢 MIAM cumul ~35k')
expect(ligne(VIDE, VIDE)).toBe('')
})
test('rouge si le gain est négatif, vert s’il est positif, rien à zéro', () => {
const perte = { delegations: 1, evites: 500, pilotage: 2000, corrections: 0 }
expect(ligne(perte, perte)).toBe('🔴 MIAM net ~-1,5k (cumul ~-1,5k)')
expect(ligne(perte, perte)).toBe('🔴 MIAM net ~-1,5k (cumul ~-1,5k)🔴')
expect(ligne(VIDE, perte)).toBe('🔴 MIAM cumul ~-1,5k')
expect([1, -1, 0].map(pastille)).toEqual(['🟢 ', '🔴 ', ''])
})
+1 -1
View File
@@ -120,7 +120,7 @@ export function pastille(gain: number): string {
// Gain pour la ligne d'état ; vide tant que rien n'a été délégué.
export function ligne(session: Totaux, cumul: Totaux): string {
if (session.delegations) {
return `${pastille(net(session))}MIAM net ~${court(net(session))} (cumul ~${court(net(cumul))})`
return `${pastille(net(session))}MIAM net ~${court(net(session))} (cumul ~${court(net(cumul))})${pastille(net(cumul)).trimEnd()}`
}
return cumul.delegations ? `${pastille(net(cumul))}MIAM cumul ~${court(net(cumul))}` : ''
}
+2 -2
View File
@@ -59,7 +59,7 @@ test('une délégation du subagent est comptée, son pilotage aussi, et MIAM les
cache_creation_input_tokens: 0,
},
} as never)
expect(statuts.at(-1)).toBe('🟢 MIAM net ~2,9k (cumul ~2,9k)')
expect(statuts.at(-1)).toBe('🟢 MIAM net ~2,9k (cumul ~2,9k)🟢')
expect(store.get('cumul')).toEqual({ delegations: 1, evites: 4900, pilotage: 2000, corrections: 0 })
await attendre(() => false) // laisse finir le 1er envoi et demander la période suivante
@@ -105,7 +105,7 @@ test('les reprises par l’agent principal d’un fichier écrit par MIAM sont d
agentId: 'a9',
} as never) // par un subagent : dans son pilotage
expect(statuts.at(-1)).toBe('🟢 MIAM net ~2,3k (cumul ~2,3k)')
expect(statuts.at(-1)).toBe('🟢 MIAM net ~2,3k (cumul ~2,3k)🟢')
expect(store.get('cumul')).toEqual({ delegations: 1, evites: 2390, pilotage: 0, corrections: 130 })
const attente = store.get('a_envoyer') as { type: string; id: string; cout?: number }[]
expect(attente.map(ev => [ev.type, ev.id, ev.cout])).toEqual([
+1 -1
View File
@@ -45,7 +45,7 @@ async function rafraichir($: EngineInterface, ecran: Ecran): Promise<void> {
const usage = fenetres(ecran.limites, await $.clock.now()).map(f => ligneFenetre(f, BARRE))
const texte = [ligne(ecran.session, cumul), ...usage].filter(Boolean).join(' · ') || undefined
if (texte !== ecran.affichee) {
ecran.affichee = texte + " MIAMMMM"
ecran.affichee = texte
$.ui.status(texte)
}
}