Skip to content
Merged
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
22 changes: 11 additions & 11 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"postinstall": "quasar prepare"
},
"dependencies": {
"@anthropic-ai/claude-agent-sdk": "0.3.233",
"@anthropic-ai/claude-agent-sdk": "0.3.252",
"@fastify/static": "10.1.3",
"@fontsource/inter": "5.3.0",
"@fontsource/jetbrains-mono": "5.3.0",
Expand All @@ -40,32 +40,32 @@
"fastify": "5.12.1",
"highlight.js": "11.12.0",
"lottie-web": "5.13.0",
"markdown-it": "15.0.0",
"mermaid": "11.17.1",
"markdown-it": "15.0.1",
"mermaid": "11.17.2",
"node-telegram-bot-api": "2.1.0",
"pinia": "4.0.3",
"quasar": "2.26.0",
"vue": "3.5.41",
"vue-i18n": "11.4.9",
"vue-router": "5.2.0",
"zod": "4.4.3"
"quasar": "2.28.0",
"vue": "3.5.42",
"vue-i18n": "11.4.10",
"vue-router": "5.3.0",
"zod": "4.5.4"
},
"devDependencies": {
"@eslint/js": "10.0.1",
"@lehoczky/eslint-config-vitest": "2.1.0",
"@quasar/app-vite": "3.8.0",
"@quasar/app-vite": "3.8.1",
"@types/node": "24.13.3",
"@vue/eslint-config-typescript": "14.9.0",
"autoprefixer": "10.5.4",
"concurrently": "10.0.5",
"eslint": "10.9.0",
"eslint": "10.9.1",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-prettier": "5.5.6",
"eslint-plugin-vue": "10.10.0",
"globals": "17.11.0",
"playwright": "1.62.1",
"prettier": "3.9.6",
"tsx": "4.23.12",
"tsx": "4.23.13",
"typescript": "6.0.3",
"vite-plugin-checker": "0.14.5",
"vitepress": "1.6.4",
Expand Down
881 changes: 426 additions & 455 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions src/help/sections/en/hooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ A type whose main field I do not expose (`mcp_tool`) says so and points to the *

## The event catalogue

Thirty events are offered. The add selector, at the bottom of the page, shows the description of the one selected; every section title carries the same tooltip.
Thirty-three events are offered. The add selector, at the bottom of the page, shows the description of the one selected; every section title carries the same tooltip.

**Session lifecycle** — `SessionStart`, `SessionEnd`, `Setup` (launch in init/maintenance mode).

Expand All @@ -52,7 +52,9 @@ Thirty events are offered. The add selector, at the bottom of the page, shows th

**Context** — `PreCompact`, `PostCompact`, `InstructionsLoaded` (a `CLAUDE.md` or a `.claude/rules/*.md` is loaded).

**Environment** — `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`.
**Model** — `PreModelSwitch` (before a model change: the hook can allow it, deny it or have it confirmed), `PostModelSwitch` (after).

**Environment** — `ConfigChange`, `CwdChanged`, `DirectoryAdded` (a directory joins the workspace, through `/add-dir`), `FileChanged`, `WorktreeCreate`, `WorktreeRemove`.

**MCP** — `Elicitation` (a server asks for input during a tool call), `ElicitationResult` (after your answer, before it goes back to the server).

Expand Down
32 changes: 23 additions & 9 deletions src/help/sections/en/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,22 @@ This differs from clearing a text field, which writes an empty value into it: a

## General tab

| Setting | Key | Note |
| ----------------- | ----------------------- | -------------------------------- |
| Language | `language` | Preferred answer language |
| Default model | `model` | Empty = automatic selection |
| Effort level | `effortLevel` | `low`, `medium`, `high`, `xhigh` |
| Fast mode | `fastMode` | Three positions |
| Extended thinking | `alwaysThinkingEnabled` | Three positions |
| Editor | `editorMode` | `normal` or `vim` |
| Setting | Key | Note |
| ------------------ | ------------------------ | -------------------------------- |
| Language | `language` | Preferred answer language |
| Default model | `model` | Empty = automatic selection |
| Effort level | `effortLevel` | `low`, `medium`, `high`, `xhigh` |
| Effort per model | `modelSettings` | Read-only — a table, not a field |
| Fast mode | `fastMode` | Three positions |
| Extended thinking | `alwaysThinkingEnabled` | Three positions |
| Editor | `editorMode` | `normal` or `vim` |
| Word keys | `keybindingFlavor` | `classic` or `readline` |
| Conversation cache | `promptCacheTtl` | `5m` or `1h` |
| Sub-agent cache | `subagentPromptCacheTtl` | `5m` or `1h` |

**Effort per model** shows only when the key exists, and **read-only**: `modelSettings` is a table keyed by model names, not a field. Saying nothing about it would suggest the only effort in force is the global one just above.

Both **prompt caches** carry the same third position as the switches: `Inherited` deletes the key, and Claude Code then decides alone — one hour on a subscription, five minutes on an API key, five minutes for everything outside the main thread. A one-hour cache write is billed at a higher rate than a five-minute one; in exchange, the cache stays warm across longer breaks.

## Permissions tab

Expand All @@ -66,7 +74,13 @@ In Claude Code, **`deny` wins over `allow`**. An exact duplicate is not added tw

`tui` (`fullscreen` / `inline`), `autoUpdatesChannel` (`stable` / `latest`), and `cleanupPeriodDays` — the number of days before Claude Code cleans up sessions and artefacts.

Then a series of three-position switches, whose “Inherited” tooltip recalls **Claude Code's default** each time: `autoCompactEnabled`, `autoMemoryEnabled`, `fileCheckpointingEnabled` (the `/rewind` snapshots), `spinnerTipsEnabled`, `prefersReducedMotion`, `agentPushNotifEnabled`, `skipAutoPermissionPrompt`, `remoteControlAtStartup`, `includeCoAuthoredBy`.
`desktopSessionCleanupPeriodDays` is its counterpart for sessions opened from Claude Desktop, which the cleanup above spares. It is a **ceiling**, and `0` — the default — means there is none: those transcripts are kept until something else deletes them.

`spellcheck.enabled` underlines misspelled words in the prompt. The underlining needs an `aspell`, `hunspell` or `ispell` installed on the machine; without one, the key does nothing. The rest of the block — the checker, the dictionary, the colour — goes through the JSON tab. Putting this setting back on `Inherited` removes the key, **and the `spellcheck` block if nothing is left in it**: a leftover `"spellcheck": {}` would read as a setting someone put there.

Then a series of three-position switches, whose “Inherited” tooltip recalls **Claude Code's default** each time: `autoCompactEnabled`, `autoMemoryEnabled`, `fileCheckpointingEnabled` (the `/rewind` snapshots), `spinnerTipsEnabled`, `prefersReducedMotion`, `agentPushNotifEnabled`, `skipAutoPermissionPrompt`, `remoteControlAtStartup`, `includeCoAuthoredBy`, `autoContinueAtUsageLimit`, `syncClaudeAiSkills`, `syncClaudeAiPlugins`.

The last two govern what claude.ai drops into `~/.claude/skills/synced` and `~/.claude/plugins/synced`. One quirk worth knowing: **only `No` acts**. Syncing is turned on server-side for your account, so writing `true` does not switch it on any earlier — `Inherited` and `Yes` say the same thing to the file.

The **status line**, finally, appears only when it is configured, and **read-only**: its structure is too free for a field. Fine editing goes through the JSON tab.

Expand Down
6 changes: 4 additions & 2 deletions src/help/sections/fr/hooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Un type dont je n'expose pas le champ principal (`mcp_tool`) l'annonce et renvoi

## Le catalogue d'événements

Trente événements sont proposés. Le sélecteur d'ajout, en bas de page, affiche la description de celui qui est sélectionné ; chaque titre de section a la même infobulle.
Trente-trois événements sont proposés. Le sélecteur d'ajout, en bas de page, affiche la description de celui qui est sélectionné ; chaque titre de section a la même infobulle.

**Cycle de vie de la session** — `SessionStart`, `SessionEnd`, `Setup` (lancement en mode init/maintenance).

Expand All @@ -52,7 +52,9 @@ Trente événements sont proposés. Le sélecteur d'ajout, en bas de page, affic

**Contexte** — `PreCompact`, `PostCompact`, `InstructionsLoaded` (chargement d'un `CLAUDE.md` ou d'un `.claude/rules/*.md`).

**Environnement** — `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`.
**Modèle** — `PreModelSwitch` (avant un changement de modèle : le hook peut l'autoriser, le refuser ou le faire confirmer), `PostModelSwitch` (après).

**Environnement** — `ConfigChange`, `CwdChanged`, `DirectoryAdded` (un dossier entre dans l'espace de travail, par `/add-dir`), `FileChanged`, `WorktreeCreate`, `WorktreeRemove`.

**MCP** — `Elicitation` (un serveur demande une saisie pendant un appel d'outil), `ElicitationResult` (après votre réponse, avant renvoi au serveur).

Expand Down
32 changes: 23 additions & 9 deletions src/help/sections/fr/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,22 @@ C'est différent de vider un champ texte, qui y écrit une valeur vide : une lan

## Onglet Général

| Réglage | Clé | Remarque |
| ----------------- | ----------------------- | -------------------------------- |
| Langue | `language` | Langue de réponse préférée |
| Modèle par défaut | `model` | Vide = sélection automatique |
| Niveau d'effort | `effortLevel` | `low`, `medium`, `high`, `xhigh` |
| Mode rapide | `fastMode` | Trois positions |
| Réflexion étendue | `alwaysThinkingEnabled` | Trois positions |
| Éditeur | `editorMode` | `normal` ou `vim` |
| Réglage | Clé | Remarque |
| ------------------------ | ------------------------ | --------------------------------------- |
| Langue | `language` | Langue de réponse préférée |
| Modèle par défaut | `model` | Vide = sélection automatique |
| Niveau d'effort | `effortLevel` | `low`, `medium`, `high`, `xhigh` |
| Effort par modèle | `modelSettings` | Lecture seule — une table, pas un champ |
| Mode rapide | `fastMode` | Trois positions |
| Réflexion étendue | `alwaysThinkingEnabled` | Trois positions |
| Éditeur | `editorMode` | `normal` ou `vim` |
| Touches de mot | `keybindingFlavor` | `classic` ou `readline` |
| Cache de la conversation | `promptCacheTtl` | `5m` ou `1h` |
| Cache des sous-agents | `subagentPromptCacheTtl` | `5m` ou `1h` |

**Effort par modèle** ne s'affiche que si la clé existe, et **en lecture seule** : `modelSettings` est une table dont les clés sont des noms de modèles, pas un champ. Le taire laisserait pourtant croire que le seul effort en vigueur est le global juste au-dessus.

Les deux **caches de prompt** portent la même troisième position que les interrupteurs : `Hérité` supprime la clé, et Claude Code décide alors seul — une heure sur abonnement, cinq minutes sur clé API, cinq minutes pour tout ce qui sort du fil principal. Une écriture de cache d'une heure est facturée plus cher qu'une de cinq minutes ; en échange, le cache reste chaud sur des pauses plus longues.

## Onglet Permissions

Expand All @@ -66,7 +74,13 @@ Chez Claude Code, **`deny` l'emporte sur `allow`**. Un doublon exact n'est pas a

`tui` (`fullscreen` / `inline`), `autoUpdatesChannel` (`stable` / `latest`), et `cleanupPeriodDays` — le nombre de jours avant nettoyage des sessions et artefacts par Claude Code.

Puis une série d'interrupteurs à trois positions, dont l'infobulle « Hérité » rappelle chaque fois **la valeur par défaut de Claude Code** : `autoCompactEnabled`, `autoMemoryEnabled`, `fileCheckpointingEnabled` (les instantanés de `/rewind`), `spinnerTipsEnabled`, `prefersReducedMotion`, `agentPushNotifEnabled`, `skipAutoPermissionPrompt`, `remoteControlAtStartup`, `includeCoAuthoredBy`.
`desktopSessionCleanupPeriodDays` en est le pendant pour les sessions ouvertes depuis Claude Desktop, que le nettoyage précédent épargne. C'est un **plafond**, et `0` — la valeur par défaut — veut dire qu'il n'y en a pas : ces transcripts sont gardés jusqu'à ce qu'autre chose les supprime.

`spellcheck.enabled` souligne les mots mal orthographiés dans le prompt. Le soulignement demande un `aspell`, `hunspell` ou `ispell` installé sur la machine ; sans lui, la clé n'a aucun effet. Le reste du bloc — le correcteur, le dictionnaire, la couleur — passe par l'onglet JSON. Repasser ce réglage sur `Hérité` retire la clé, **et le bloc `spellcheck` s'il ne reste rien dedans** : un `"spellcheck": {}` résiduel se lirait comme un réglage posé.

Puis une série d'interrupteurs à trois positions, dont l'infobulle « Hérité » rappelle chaque fois **la valeur par défaut de Claude Code** : `autoCompactEnabled`, `autoMemoryEnabled`, `fileCheckpointingEnabled` (les instantanés de `/rewind`), `spinnerTipsEnabled`, `prefersReducedMotion`, `agentPushNotifEnabled`, `skipAutoPermissionPrompt`, `remoteControlAtStartup`, `includeCoAuthoredBy`, `autoContinueAtUsageLimit`, `syncClaudeAiSkills`, `syncClaudeAiPlugins`.

Les deux derniers gouvernent ce que claude.ai dépose dans `~/.claude/skills/synced` et `~/.claude/plugins/synced`. Une particularité à connaître : **seul `Non` agit**. La synchronisation s'active côté serveur pour votre compte, si bien qu'écrire `true` ne l'allume pas plus tôt — `Hérité` et `Oui` disent la même chose au fichier.

La **status line**, enfin, n'apparaît que si elle est configurée, et **en lecture seule** : c'est une structure trop libre pour un champ. Son édition fine passe par l'onglet JSON.

Expand Down
8 changes: 7 additions & 1 deletion src/i18n/en/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { MessageSchema } from '../fr'
import agent from './agent'
import cli from './cli'
import common from './common'
Expand All @@ -13,7 +14,10 @@ import resources from './resources'
import rules from './rules'
import tools from './tools'

export default {
// Annoté, et pas seulement composé : les tranches se contrôlent chacune de leur
// côté, mais rien ne vérifiait l'assemblage. Une tranche ajoutée au français et
// oubliée ici serait passée en silence — c'est cette ligne qui la fait voir.
const en: MessageSchema = {
agent,
cli,
common,
Expand All @@ -29,3 +33,5 @@ export default {
rules,
tools,
}

export default en
3 changes: 3 additions & 0 deletions src/i18n/en/pages/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,14 @@ const hooks: MessageSchema['pages']['hooks'] = {
InstructionsLoaded: 'When a CLAUDE.md or .claude/rules/*.md is loaded into the context.',
ConfigChange: 'When a configuration file changes during the session.',
CwdChanged: 'When the working directory changes (e.g. a “cd” run by Claude).',
DirectoryAdded: 'When a directory joins the workspace (/add-dir).',
FileChanged: 'When a watched file changes on disk.',
WorktreeCreate: 'When a worktree is created (--worktree / isolation: worktree).',
WorktreeRemove: 'When a worktree is removed (end of a session or sub-agent).',
PreCompact: 'Before the context is compacted.',
PostCompact: 'After the context is compacted.',
PreModelSwitch: 'Before a model change — the hook can allow it, deny it, or have it confirmed.',
PostModelSwitch: 'After a model change.',
Elicitation: 'When an MCP server asks for user input during a tool call.',
ElicitationResult: 'After the user answers an MCP elicitation, before it goes back to the server.',
},
Expand Down
7 changes: 6 additions & 1 deletion src/i18n/en/pages/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { MessageSchema } from '../../fr'
import agents from './agents'
import atelier from './atelier'
import backups from './backups'
Expand All @@ -18,7 +19,9 @@ import settings from './settings'
import skills from './skills'
import usage from './usage'

export default {
// Annoté pour la même raison qu'`en/index.ts` : une page ajoutée au français et
// oubliée ici doit casser le typecheck, pas se découvrir à l'écran.
const pages: MessageSchema['pages'] = {
agents,
atelier,
backups,
Expand All @@ -39,3 +42,5 @@ export default {
skills,
usage,
}

export default pages
21 changes: 21 additions & 0 deletions src/i18n/en/pages/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,19 @@ const settings: MessageSchema['pages']['settings'] = {
fastModeHint: 'Opus 4.8, faster output.',
thinking: 'Extended thinking',
thinkingHint: 'Turns on extended reasoning by default.',
modelSettings: 'Effort per model',
modelSettingsHint: 'Effort remembered for each model, alongside the global one above (edit it in the JSON tab).',
editor: 'Editor',
editorHint: 'Editing mode in the prompt.',
editorAria: 'Editor mode',
keybinding: 'Word keys',
keybindingHint: 'classic splits words the Unicode way; readline splits them the way Bash does, where punctuation separates.',
cacheAuto: 'automatic',
promptCache: 'Conversation cache',
promptCacheHint:
'Prompt cache TTL for the main thread. Inherited: 1 h on a subscription, 5 min on an API key. 1-hour writes are billed at a higher rate.',
subagentCache: 'Sub-agent cache',
subagentCacheHint: 'The same TTL, for everything outside the main thread — sub-agents, workflows, background requests. Inherited: 5 min.',
defaultMode: 'Default mode',
defaultModeHint: 'How tool permission requests behave.',
defaultModeAria: 'Default permission mode',
Expand All @@ -40,6 +50,11 @@ const settings: MessageSchema['pages']['settings'] = {
cleanup: 'Session retention',
cleanupHint: 'Days before sessions and artefacts are cleaned up.',
cleanupAria: 'Retention days',
desktopCleanup: 'Desktop session retention',
desktopCleanupHint: 'Day ceiling for sessions coming from Claude Desktop, which are otherwise exempt from the cleanup above. 0: no ceiling.',
desktopCleanupAria: 'Desktop session retention days',
spellcheck: 'Spell checking',
spellcheckHint: 'Underlines misspelled words in the prompt. Needs an installed aspell, hunspell or ispell.',
statusLine: 'Status line',
statusLineHint: 'Command shown at the bottom of the terminal (fine editing in the JSON tab).',
},
Expand Down Expand Up @@ -81,6 +96,12 @@ const settings: MessageSchema['pages']['settings'] = {
remoteControlAtStartupHint: 'Turns on remote control from launch.',
includeCoAuthoredBy: 'Co-author in commits',
includeCoAuthoredByHint: 'Adds the Co-authored-by trailer.',
autoContinueAtUsageLimit: 'Resume after a usage limit',
autoContinueAtUsageLimitHint: 'Waits for the claude.ai limit to reset and carries the task on, instead of offering to.',
syncClaudeAiSkills: 'Skills from claude.ai',
syncClaudeAiSkillsHint: 'Pulls the Skills you enabled on claude.ai into ~/.claude/skills/synced. Only “No” acts.',
syncClaudeAiPlugins: 'Plugins from claude.ai',
syncClaudeAiPluginsHint: 'Pulls the plugins you enabled on claude.ai into ~/.claude/plugins/synced. Only “No” acts.',
},
tri: {
inherit: 'Inherited',
Expand Down
Loading