Jauge de contexte, espace disque sur partage agrégé, panneau Fichiers

Trois défauts sans rapport entre eux, tous visibles à l'écran.

Jauge de contexte bloquée à « 0 / N (0 %) » : le comptage exact vient de
usage.prompt_tokens (include_usage), qu'un llama-server récent a cessé de
renvoyer. On note désormais si l'usage est arrivé ; sinon la fin de tour
publie l'estimation qui pilote déjà la compaction — approximative, mais
jamais absente. Et la souscription envoie la valeur courante juste après
le rattrapage : une page rechargée affichait zéro sur une discussion
pourtant pleine, faute d'événement ctx_used dans la fenêtre rejouée.

Espace disque : « il ne reste que 11,9 Go » sur un partage Unraid qui en
a des centaines. /mnt/user est servi par shfs, un FUSE qui agrège
plusieurs disques — statfs y renvoie l'espace d'un seul, et ce chiffre
REFUSAIT l'installation du modèle. Les systèmes de fichiers qui
approximent (FUSE, overlay, NFS, CIFS, Ceph, Gluster) sont reconnus par
leur magie : leur chiffre reste affiché, précédé d'un « ~ », mais ne
bloque plus rien.

Panneau Fichiers : le panneau entier défilait, emportant vers le haut
l'en-tête, le fil d'Ariane et le pied (occupation disque, bouton .zip)
dès qu'il y avait quelques fichiers. Seule la liste défile maintenant ;
le pied reste en bas et l'état vide se centre.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5 committed 2026-08-19 08:28:53 +02:00
1 parent 895ff92ed8
commit b405adea6c
5118 files changed
+1264007 -23

No files matched your search

@@ -0,0 +1,166 @@
/**
* @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'
*/
import {ok as assert} from 'devlop'
import {factorySpace} from 'micromark-factory-space'
import {
markdownLineEnding,
markdownLineEndingOrSpace,
markdownSpace
} from 'micromark-util-character'
import {codes, types} from 'micromark-util-symbol'
const tasklistCheck = {name: 'tasklistCheck', tokenize: tokenizeTasklistCheck}
/**
* Create an HTML extension for `micromark` to support GFM task list items
* syntax.
*
* @returns {Extension}
* Extension for `micromark` that can be passed in `htmlExtensions` to
* support GFM task list items when serializing to HTML.
*/
export function gfmTaskListItem() {
return {
text: {[codes.leftSquareBracket]: tasklistCheck}
}
}
/**
* @this {TokenizeContext}
* @type {Tokenizer}
*/
function tokenizeTasklistCheck(effects, ok, nok) {
const self = this
return open
/**
* At start of task list item check.
*
* ```markdown
* > | * [x] y.
* ^
* ```
*
* @type {State}
*/
function open(code) {
assert(code === codes.leftSquareBracket, 'expected `[`')
if (
// Exit if there’s stuff before.
self.previous !== codes.eof ||
// Exit if not in the first content that is the first child of a list
// item.
!self._gfmTasklistFirstContentOfListItem
) {
return nok(code)
}
effects.enter('taskListCheck')
effects.enter('taskListCheckMarker')
effects.consume(code)
effects.exit('taskListCheckMarker')
return inside
}
/**
* In task list item check.
*
* ```markdown
* > | * [x] y.
* ^
* ```
*
* @type {State}
*/
function inside(code) {
// Currently we match how GH works in files.
// To match how GH works in comments, use `markdownSpace` (`[\t ]`) instead
// of `markdownLineEndingOrSpace` (`[\t\n\r ]`).
if (markdownLineEndingOrSpace(code)) {
effects.enter('taskListCheckValueUnchecked')
effects.consume(code)
effects.exit('taskListCheckValueUnchecked')
return close
}
if (code === codes.uppercaseX || code === codes.lowercaseX) {
effects.enter('taskListCheckValueChecked')
effects.consume(code)
effects.exit('taskListCheckValueChecked')
return close
}
return nok(code)
}
/**
* At close of task list item check.
*
* ```markdown
* > | * [x] y.
* ^
* ```
*
* @type {State}
*/
function close(code) {
if (code === codes.rightSquareBracket) {
effects.enter('taskListCheckMarker')
effects.consume(code)
effects.exit('taskListCheckMarker')
effects.exit('taskListCheck')
return after
}
return nok(code)
}
/**
* @type {State}
*/
function after(code) {
// EOL in paragraph means there must be something else after it.
if (markdownLineEnding(code)) {
return ok(code)
}
// Space or tab?
// Check what comes after.
if (markdownSpace(code)) {
return effects.check({tokenize: spaceThenNonSpace}, ok, nok)(code)
}
// EOF, or non-whitespace, both wrong.
return nok(code)
}
}
/**
* @this {TokenizeContext}
* @type {Tokenizer}
*/
function spaceThenNonSpace(effects, ok, nok) {
return factorySpace(effects, after, types.whitespace)
/**
* After whitespace, after task list item check.
*
* ```markdown
* > | * [x] y.
* ^
* ```
*
* @type {State}
*/
function after(code) {
// EOF means there was nothing, so bad.
// EOL means there’s content after it, so good.
// Impossible to have more spaces.
// Anything else is good.
return code === codes.eof ? nok(code) : ok(code)
}
}