sygal-cli 0.5.6 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,15 @@ partagent toujours le même numéro de version, publiés ensemble, même si un
9
9
  seul a réellement changé de contenu — même principe que l'app desktop.
10
10
  Détails du process : `CLI_RELEASE_GUIDE.md` à la racine du repo.
11
11
 
12
+ ## 0.5.6
13
+
14
+ - Fix critique : le sidecar `@sygal/sidecar-darwin-arm64` était compilé depuis un Python
15
+ installé via Homebrew, dont la bottle cible `MACOSX_DEPLOYMENT_TARGET=26` — le binaire
16
+ plantait au démarrage (`dlopen ... Symbol not found`) sur toute machine tournant sous
17
+ macOS antérieur à la version 26, malgré la compatibilité macOS 12+ annoncée. Rebuild
18
+ effectué depuis un Python installé via python.org (cible de déploiement basse), sans
19
+ changement de code source.
20
+
12
21
  ## 0.5.5
13
22
 
14
23
  - Fix : exporter un document dont le nom contient des caractères illégaux sur Windows/macOS
package/dist/index.js CHANGED
@@ -105,7 +105,15 @@ async function toPngBuffer(input) {
105
105
 
106
106
  // ../core/src/ocr-models.ts
107
107
  var OCR_MODELS = {
108
- openai: "gpt-4o",
108
+ // Bascule 02/09/2026 : gpt-4o retiré de l'API OpenAI le 16/02/2026 (recherche
109
+ // en direct — mort depuis 7 mois, provider par défaut de Sygal). Remplacé par
110
+ // gpt-5.6-terra (famille GPT-5.6, GA depuis 07/2026 : sol/terra/luna) — terra
111
+ // choisi pour l'équilibre coût/qualité sur de la lecture de document/écran,
112
+ // pas le tier flagship (sol, plus cher) ni économique (luna). Modèle
113
+ // "raisonneur" : voir openai-provider.ts pour les paramètres API affectés
114
+ // (max_tokens, temperature). Qualité réelle non validée sur cas réels
115
+ // (contrainte budget API de Cyrill) — à confirmer dès que possible.
116
+ openai: "gpt-5.6-terra",
109
117
  mistral: "mistral-ocr-latest",
110
118
  claude: "claude-sonnet-4-6",
111
119
  // Bascule 02/09/2026 : nemotron-nano-12b-v2-vl (et toute la lignée nemotron
@@ -117,7 +125,12 @@ var OCR_MODELS = {
117
125
  // de description d'image ni de traduction : NVIDIA_FALLBACK_MODEL
118
126
  // (llama-3.2-90b-vision-instruct) prend le relais pour ces deux cas.
119
127
  nvidia: "nvidia/nemotron-ocr-v2",
120
- gemini: "gemini-2.0-flash"
128
+ // Bascule 02/09/2026 : gemini-2.0-flash coupé par Google le 01/06/2026
129
+ // (recherche en direct — mort depuis 3 mois). Remplacé par gemini-3.7-flash
130
+ // (GA depuis 08/2026) — un seul choix clair côté Google à cette date, pas
131
+ // d'arbitrage de tier comme pour OpenAI. Qualité réelle non validée sur cas
132
+ // réels (contrainte budget API de Cyrill) — à confirmer dès que possible.
133
+ gemini: "gemini-3.7-flash"
121
134
  };
122
135
  var MISTRAL_TRANSLATE_MODEL = "mistral-large-latest";
123
136
  var NVIDIA_FALLBACK_MODEL = "meta/llama-3.2-90b-vision-instruct";
@@ -443,7 +456,7 @@ function httpStatusToOcrError(status, providerId) {
443
456
  function toDataUrl(img, mime) {
444
457
  return `data:${mime};base64,${img.toString("base64")}`;
445
458
  }
446
- async function callOpenAiCompatibleChatText(endpoint, model, apiKey, signal, prompt, text, providerId, maxTokens = 8192, frequencyPenalty) {
459
+ async function callOpenAiCompatibleChatText(endpoint, model, apiKey, signal, prompt, text, providerId, maxTokens = 8192, frequencyPenalty, reasoningModel = false) {
447
460
  const response = await fetch(endpoint, {
448
461
  method: "POST",
449
462
  signal,
@@ -453,9 +466,10 @@ async function callOpenAiCompatibleChatText(endpoint, model, apiKey, signal, pro
453
466
  },
454
467
  body: JSON.stringify({
455
468
  model,
456
- max_tokens: maxTokens,
457
- // Traduction = tâche déterministe : toute créativité est un bug ici.
458
- temperature: 0,
469
+ [reasoningModel ? "max_completion_tokens" : "max_tokens"]: maxTokens,
470
+ // Traduction = tâche déterministe : toute créativité est un bug ici
471
+ // (paramètre rejeté par les modèles raisonneurs, voir reasoningModel).
472
+ ...reasoningModel ? {} : { temperature: 0 },
459
473
  ...frequencyPenalty !== void 0 ? { frequency_penalty: frequencyPenalty } : {},
460
474
  // Consigne et document dans deux messages distincts : concaténés, un
461
475
  // document court était traité comme une simple amorce et le modèle
@@ -855,7 +869,8 @@ var openAiProvider = {
855
869
  },
856
870
  body: JSON.stringify({
857
871
  model: OPENAI_OCR_MODEL,
858
- max_tokens: 8192,
872
+ // gpt-5.6 (modèle raisonneur) rejette `max_tokens` — voir en-tête de fichier.
873
+ max_completion_tokens: 8192,
859
874
  messages: [
860
875
  {
861
876
  role: "user",
@@ -883,7 +898,11 @@ var openAiProvider = {
883
898
  signal,
884
899
  prompt,
885
900
  text,
886
- "openai"
901
+ "openai",
902
+ 8192,
903
+ void 0,
904
+ true
905
+ // gpt-5.6 : max_completion_tokens + pas de temperature, voir en-tête de fichier
887
906
  );
888
907
  }
889
908
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sygal-cli",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "description": "Sygal CLI - convert files and web pages to Markdown/JSON (local MarkItDown pipeline, OCR for images)",
5
5
  "author": "Cyrill Semah",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -37,9 +37,9 @@
37
37
  "@sygal/core": "0.1.0"
38
38
  },
39
39
  "optionalDependencies": {
40
- "@sygal/sidecar-darwin-arm64": "0.5.6",
41
- "@sygal/sidecar-win32-x64": "0.5.6",
42
- "@sygal/sidecar-linux-x64": "0.5.6"
40
+ "@sygal/sidecar-darwin-arm64": "0.5.7",
41
+ "@sygal/sidecar-win32-x64": "0.5.7",
42
+ "@sygal/sidecar-linux-x64": "0.5.7"
43
43
  },
44
44
  "scripts": {
45
45
  "build": "esbuild src/index.ts --bundle --platform=node --target=node20 --format=cjs --outfile=dist/index.js --external:sharp --external:gpt-tokenizer --external:commander --external:picocolors",