mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-18 20:57:05 +02:00
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>
62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
/**
|
|
* @typedef Options
|
|
* Configuration.
|
|
* @property {boolean | null | undefined} [jsx=false]
|
|
* Support JSX identifiers (default: `false`).
|
|
*/
|
|
|
|
const startRe = /[$_\p{ID_Start}]/u
|
|
const contRe = /[$_\u{200C}\u{200D}\p{ID_Continue}]/u
|
|
const contReJsx = /[-$_\u{200C}\u{200D}\p{ID_Continue}]/u
|
|
const nameRe = /^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u
|
|
const nameReJsx = /^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u
|
|
|
|
/** @type {Options} */
|
|
const emptyOptions = {}
|
|
|
|
/**
|
|
* Checks if the given code point can start an identifier.
|
|
*
|
|
* @param {number | undefined} code
|
|
* Code point to check.
|
|
* @returns {boolean}
|
|
* Whether `code` can start an identifier.
|
|
*/
|
|
// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.
|
|
export function start(code) {
|
|
return code ? startRe.test(String.fromCodePoint(code)) : false
|
|
}
|
|
|
|
/**
|
|
* Checks if the given code point can continue an identifier.
|
|
*
|
|
* @param {number | undefined} code
|
|
* Code point to check.
|
|
* @param {Options | null | undefined} [options]
|
|
* Configuration (optional).
|
|
* @returns {boolean}
|
|
* Whether `code` can continue an identifier.
|
|
*/
|
|
// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.
|
|
export function cont(code, options) {
|
|
const settings = options || emptyOptions
|
|
const re = settings.jsx ? contReJsx : contRe
|
|
return code ? re.test(String.fromCodePoint(code)) : false
|
|
}
|
|
|
|
/**
|
|
* Checks if the given value is a valid identifier name.
|
|
*
|
|
* @param {string} name
|
|
* Identifier to check.
|
|
* @param {Options | null | undefined} [options]
|
|
* Configuration (optional).
|
|
* @returns {boolean}
|
|
* Whether `name` can be an identifier.
|
|
*/
|
|
export function name(name, options) {
|
|
const settings = options || emptyOptions
|
|
const re = settings.jsx ? nameReJsx : nameRe
|
|
return re.test(name)
|
|
}
|