chore(typo): retire tous les tirets cadratins/demi-cadratins + garde CI
Some checks failed
CI / Build & test (Node 24) (push) Has been cancelled
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
CI / No em/en dashes (push) Has been cancelled
CI / Build & test (Node 22) (push) Has been cancelled
Deploy site (production) / build-and-deploy (push) Successful in 20s
Some checks failed
CI / Build & test (Node 24) (push) Has been cancelled
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
CI / No em/en dashes (push) Has been cancelled
CI / Build & test (Node 22) (push) Has been cancelled
Deploy site (production) / build-and-deploy (push) Successful in 20s
Remplace les 547 tirets cadratins (U+2014) et demi-cadratins (U+2013) des fichiers versionnés par la ponctuation contextuelle adaptée (point médian, deux-points, virgule, parenthèses ; tiret simple pour les plages), sur 122 fichiers (appli, vitrine, doc, tests, workflows, scripts). Ajoute le job CI « lint-dashes » (git grep -P) qui échoue si un tiret cadratin/demi-cadratin réapparaît, hors logo binaire et captures brutes du terminal (fidélité des fixtures de détection de dialogue).
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
// (cf. composables/useMonaco) → chunk séparé, zéro impact sur le bundle initial.
|
||||
// Workers via Vite (?worker) : on ne fournit que le worker de base. La colorisation syntaxique
|
||||
// (Monarch) tourne sur le thread principal et ne dépend d'aucun worker ; les services de langage
|
||||
// avancés (TS/JSON) dégradent proprement — suffisant pour éditer + sauver dans le navigateur.
|
||||
// avancés (TS/JSON) dégradent proprement : suffisant pour éditer + sauver dans le navigateur.
|
||||
import * as monaco from 'monaco-editor';
|
||||
import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Client WebSocket multiplexé — UNE seule connexion pour toute l'app.
|
||||
// Client WebSocket multiplexé : UNE seule connexion pour toute l'app.
|
||||
// Handshake hello/hello_ok, reconnexion avec backoff (ré-attache des terminaux
|
||||
// ouverts + re-sub), corrélation FIFO des 'attached', flow control par ACK
|
||||
// (cumul d'octets traités PAR CANAL, remis à zéro à chaque RESYNC).
|
||||
@@ -29,11 +29,11 @@ export interface TerminalSink {
|
||||
export type SessionEvent = Extract<ServerMessage, { type: 'session_update' | 'session_exit' | 'session_archived' }>;
|
||||
export type WorktreeEvent = Extract<ServerMessage, { type: 'repo_update' | 'repo_removed' | 'worktree_update' | 'worktree_removed' }>;
|
||||
export type GroupEvent = Extract<ServerMessage, { type: 'group_update' | 'group_removed' }>;
|
||||
/** P11 — un réglage a changé (diffusé au topic 'settings'). */
|
||||
/** P11 : un réglage a changé (diffusé au topic 'settings'). */
|
||||
export type SettingsUpdateEvent = Extract<ServerMessage, { type: 'settings_update' }>;
|
||||
/** P12 — progression/fin d'un clone (diffusée au topic 'clones'). */
|
||||
/** P12 : progression/fin d'un clone (diffusée au topic 'clones'). */
|
||||
export type CloneEvent = Extract<ServerMessage, { type: 'clone_update' }>;
|
||||
/** P7 — signal ciblé « le détail (changes/diff) d'un worktree regardé a changé ». */
|
||||
/** P7 : signal ciblé « le détail (changes/diff) d'un worktree regardé a changé ». */
|
||||
export type WorktreeChangesEvent = Extract<ServerMessage, { type: 'worktree_changes' }>;
|
||||
|
||||
export interface AttachOptions {
|
||||
@@ -48,7 +48,7 @@ const BACKOFF_MIN_MS = 500;
|
||||
const BACKOFF_MAX_MS = 10_000;
|
||||
|
||||
export class Attachment {
|
||||
/** canal courant — réassigné à chaque reconnexion, -1 tant que non attaché */
|
||||
/** canal courant : réassigné à chaque reconnexion, -1 tant que non attaché */
|
||||
channel = -1;
|
||||
controlling = false;
|
||||
closed = false;
|
||||
@@ -133,7 +133,7 @@ export class WsClient {
|
||||
private readonly groupListeners = new Set<(e: GroupEvent) => void>();
|
||||
private readonly settingsListeners = new Set<(e: SettingsUpdateEvent) => void>();
|
||||
private readonly cloneListeners = new Set<(e: CloneEvent) => void>();
|
||||
/** P7 — abonnements ciblés au détail d'un worktree (clé repoId\0path → listeners). */
|
||||
/** P7 : abonnements ciblés au détail d'un worktree (clé repoId\0path → listeners). */
|
||||
private readonly worktreeChangesListeners = new Map<string, Set<(e: WorktreeChangesEvent) => void>>();
|
||||
|
||||
connect(): void {
|
||||
@@ -248,7 +248,7 @@ export class WsClient {
|
||||
}
|
||||
|
||||
/**
|
||||
* P7 — observe le détail (changes/diff) d'un worktree précis : envoie `watch`, route les
|
||||
* P7 : observe le détail (changes/diff) d'un worktree précis : envoie `watch`, route les
|
||||
* `worktree_changes` correspondants vers `listener`, et ré-arme automatiquement après reconnexion.
|
||||
* La désinscription envoie `unwatch` quand plus aucun listener ne regarde ce worktree.
|
||||
*/
|
||||
@@ -418,13 +418,13 @@ export class WsClient {
|
||||
}, 200);
|
||||
}
|
||||
|
||||
/** ACK immédiat du reliquat traité pour tous les terminaux ouverts — au retour en avant-plan,
|
||||
/** ACK immédiat du reliquat traité pour tous les terminaux ouverts : au retour en avant-plan,
|
||||
* pour rattraper sans attendre le débounce un serveur éventuellement en pause. */
|
||||
private flushAcks(): void {
|
||||
for (const att of this.attachments) this.flushAttachmentAck(att);
|
||||
}
|
||||
|
||||
/** ACK immédiat du reliquat traité d'UN attachment — n'ACK que du réellement traité (invariant
|
||||
/** ACK immédiat du reliquat traité d'UN attachment : n'ACK que du réellement traité (invariant
|
||||
* préservé). Factorisé : utilisé par flushAcks() et par le flush ciblé flushAck(). */
|
||||
private flushAttachmentAck(att: Attachment): void {
|
||||
if (att.closed || att.channel < 0) return;
|
||||
@@ -447,7 +447,7 @@ export class WsClient {
|
||||
this.backoffMs = BACKOFF_MIN_MS;
|
||||
this.status.value = 'open';
|
||||
this.sendSub();
|
||||
// P7 — ré-arme les watchers de worktree (clé repoId\0path) après reconnexion.
|
||||
// P7 : ré-arme les watchers de worktree (clé repoId\0path) après reconnexion.
|
||||
for (const key of this.worktreeChangesListeners.keys()) {
|
||||
const sep = key.indexOf('\0');
|
||||
this.sendControl({ type: 'watch', repoId: key.slice(0, sep), path: key.slice(sep + 1) });
|
||||
@@ -530,7 +530,7 @@ export class WsClient {
|
||||
}
|
||||
case 'error': {
|
||||
if (msg.channel !== undefined) {
|
||||
console.warn(`[ws] channel ${msg.channel}: ${msg.code} — ${msg.message}`);
|
||||
console.warn(`[ws] channel ${msg.channel}: ${msg.code}: ${msg.message}`);
|
||||
return;
|
||||
}
|
||||
// un échec d'attach est la seule erreur sans canal corrélable à une requête
|
||||
@@ -547,7 +547,7 @@ export class WsClient {
|
||||
}
|
||||
return;
|
||||
}
|
||||
console.warn(`[ws] ${msg.code} — ${msg.message}`);
|
||||
console.warn(`[ws] ${msg.code}: ${msg.message}`);
|
||||
return;
|
||||
}
|
||||
case 'pong':
|
||||
|
||||
Reference in New Issue
Block a user