novahiz 0.11.6 → 0.11.8

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
@@ -5,6 +5,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.11.8] - 2026-10-23
9
+
10
+ ### Removed
11
+
12
+ - **Support Linux et macOS retire** - Novahiz ne supporte plus que Windows.
13
+ L'installation et les MCP ne sont plus testes ni documentes pour Linux ni
14
+ macOS. La section d'installation du README ne couvre plus que Windows.
15
+
16
+ ## [0.11.7] - 2026-10-23
17
+
18
+ ### Fixed
19
+
20
+ - **MCP Novahiz ne fonctionnent pas sur Linux** - OpenCode (en mode GUI/Desktop) ne
21
+ n'hérite pas du PATH du shell, donc `node` seul ne se résolvait pas pour les MCP
22
+ locaux (`novahiz-core`, `novahiz-gate`, `novahiz-docs`, `novahiz-search`,
23
+ `novahiz-scheduler`, `novahiz-scan`). L'installateur utilise maintenant le chemin
24
+ absolu de `node` (`process.execPath`) et propage le `PATH` de l'installateur via
25
+ `environment` à chaque MCP. Le MCP `dart` est omis si le Dart SDK n'est pas
26
+ présent (`which dart` / `where dart`).
27
+
8
28
  ## [0.11.6] - 2026-10-23
9
29
 
10
30
  ### Fixed
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  17 catégories, 94 skills, 13 gate rules, 8 MCP providers — tout déterministe, tout local, tout JSON.
6
6
 
7
- > **Version 0.11.4** — `npm install -g novahiz` pose le CLI, et le premier `novahiz` lancé termine l'installation (core puis extras). `CHANGELOG.md` et `scripts/` sont dans le tarball.
7
+ > **Version 0.11.7** — `npm install -g novahiz` pose le CLI, et le premier `novahiz` lancé termine l'installation (core puis extras). `CHANGELOG.md` et `scripts/` sont dans le tarball.
8
8
 
9
9
  ```
10
10
  ┌──────────────────────────────────────────────────────────────────────────┐
@@ -43,8 +43,13 @@
43
43
 
44
44
  ### Option 1 — npm (recommandé)
45
45
 
46
+ #### Windows
47
+
48
+ Sur Windows, aucune configuration préalable n'est nécessaire :
49
+
46
50
  ```bash
47
51
  npm install -g novahiz
52
+ novahiz setup
48
53
  novahiz doctor
49
54
  ```
50
55
 
@@ -746,6 +746,97 @@ async function main() {
746
746
  const agentsSkillsDir = join(homedir(), ".agents", "skills");
747
747
  const agentsSkillsDirLegacy = join(homedir(), ".config", ".agents", "skills");
748
748
 
749
+ // Le chemin absolu de node est essentiel : OpenCode (notamment en
750
+ // mode GUI/Desktop sur Linux) ne hérite pas du PATH du shell, donc
751
+ // `node` seul ne se résout pas. On utilise donc le chemin absolu du
752
+ // node qui lance l'installateur.
753
+ const nodeBin = process.execPath;
754
+ // On propage le PATH de l'installateur aux MCP locaux pour que `node`,
755
+ // `npx`, `dart` etc. soient trouvables même sans héritage du shell.
756
+ const mcpEnv = { PATH: process.env.PATH };
757
+
758
+ // Détermine si le Dart SDK est présent (nécessaire pour le MCP dart).
759
+ let hasDart = false;
760
+ try {
761
+ const dartCheck = spawnSync(
762
+ process.platform === "win32" ? "where" : "which",
763
+ ["dart"],
764
+ { encoding: "utf8", stdio: "pipe" }
765
+ );
766
+ hasDart = dartCheck.status === 0;
767
+ } catch {
768
+ // dart introuvable, le MCP dart sera omis
769
+ }
770
+
771
+ const mcp = {
772
+ "novahiz-docs": {
773
+ "type": "local",
774
+ "command": [nodeBin, join(home, "mcp", "novahiz-docs", "index.mjs")],
775
+ "environment": mcpEnv,
776
+ "enabled": true
777
+ },
778
+ "novahiz-search": {
779
+ "type": "local",
780
+ "command": [nodeBin, join(home, "mcp", "lodestone", "index.mjs")],
781
+ "timeout": 120000,
782
+ "environment": mcpEnv,
783
+ "enabled": true
784
+ },
785
+ // `novahiz-scheduler` is the local scheduler (mcp/clepsydre, zero npm
786
+ // dependency): it ships ready to run, no setup step.
787
+ "novahiz-scheduler": {
788
+ "type": "local",
789
+ "command": [nodeBin, join(home, "mcp", "clepsydre", "index.mjs")],
790
+ "timeout": 120000,
791
+ "environment": mcpEnv,
792
+ "enabled": true
793
+ },
794
+ "playwright": {
795
+ "type": "local",
796
+ // See playwrightBrowserFlag() in lib.mjs for the platform rule.
797
+ "command": ["npx", "-y", "@playwright/mcp@0.0.82", playwrightBrowserFlag()],
798
+ "environment": mcpEnv,
799
+ "enabled": true
800
+ },
801
+ // Trio runtime (audit 2026-10-08) : novahiz_classify (27 outils dont
802
+ // la classification du pipeline), novahiz_gate (la porte que le skill
803
+ // novahiz-gate appelle) et scan (argus). Le transform du plugin les
804
+ // inscrit aussi, mais un transform arrive apres la resolution MCP ne
805
+ // lie jamais les serveurs — en config statique la connexion est
806
+ // garantie des l'installation. Le plugin voit editor.get(id) deja
807
+ // present et les saute : aucun doublon. timeout 120s = cold start
808
+ // argus (audit 2026-09-25 P2).
809
+ "novahiz-core": {
810
+ "type": "local",
811
+ "command": [nodeBin, join(home, "mcp", "novahiz-tools", "index.mjs")],
812
+ "timeout": 120000,
813
+ "environment": mcpEnv,
814
+ "enabled": true
815
+ },
816
+ "novahiz-gate": {
817
+ "type": "local",
818
+ "command": [nodeBin, join(home, "mcp", "novahiz-gate", "index.mjs")],
819
+ "timeout": 120000,
820
+ "environment": mcpEnv,
821
+ "enabled": true
822
+ },
823
+ "novahiz-scan": {
824
+ "type": "local",
825
+ "command": [nodeBin, join(home, "mcp", "argus", "src", "cli.mjs")],
826
+ "timeout": 120000,
827
+ "environment": mcpEnv,
828
+ "enabled": true
829
+ }
830
+ };
831
+ if (hasDart) {
832
+ mcp["dart"] = {
833
+ "type": "local",
834
+ "command": ["dart", "mcp-server"],
835
+ "environment": mcpEnv,
836
+ "enabled": true
837
+ };
838
+ }
839
+
749
840
  const openCodeConfig = {
750
841
  "$schema": "https://opencode.ai/config.json",
751
842
  // T3: sans ce champ, adapters/opencode/instructions.md n'est lu par
@@ -760,64 +851,7 @@ async function main() {
760
851
  // (typescript-language-server, etc.) peuvent manquer — des entrees
761
852
  // mortes = exactement le probleme qu'on veut jamais livrer.
762
853
  "lsp": true,
763
- "mcp": {
764
- "novahiz-docs": {
765
- "type": "local",
766
- "command": ["node", join(home, "mcp", "novahiz-docs", "index.mjs")],
767
- "enabled": true
768
- },
769
- "novahiz-search": {
770
- "type": "local",
771
- "command": ["node", join(home, "mcp", "lodestone", "index.mjs")],
772
- "timeout": 120000,
773
- "enabled": true
774
- },
775
- // `novahiz-scheduler` is the local scheduler (mcp/clepsydre, zero npm
776
- // dependency): it ships ready to run, no setup step.
777
- "novahiz-scheduler": {
778
- "type": "local",
779
- "command": ["node", join(home, "mcp", "clepsydre", "index.mjs")],
780
- "timeout": 120000,
781
- "enabled": true
782
- },
783
- "playwright": {
784
- "type": "local",
785
- // See playwrightBrowserFlag() in lib.mjs for the platform rule.
786
- "command": ["npx", "-y", "@playwright/mcp@0.0.82", playwrightBrowserFlag()],
787
- "enabled": true
788
- },
789
- "dart": {
790
- "type": "local",
791
- "command": ["dart", "mcp-server"],
792
- "enabled": true
793
- },
794
- // Trio runtime (audit 2026-10-08) : novahiz_classify (27 outils dont
795
- // la classification du pipeline), novahiz_gate (la porte que le skill
796
- // novahiz-gate appelle) et scan (argus). Le transform du plugin les
797
- // inscrit aussi, mais un transform arrive apres la resolution MCP ne
798
- // lie jamais les serveurs — en config statique la connexion est
799
- // garantie des l'installation. Le plugin voit editor.get(id) deja
800
- // present et les saute : aucun doublon. timeout 120s = cold start
801
- // argus (audit 2026-09-25 P2).
802
- "novahiz-core": {
803
- "type": "local",
804
- "command": ["node", join(home, "mcp", "novahiz-tools", "index.mjs")],
805
- "timeout": 120000,
806
- "enabled": true
807
- },
808
- "novahiz-gate": {
809
- "type": "local",
810
- "command": ["node", join(home, "mcp", "novahiz-gate", "index.mjs")],
811
- "timeout": 120000,
812
- "enabled": true
813
- },
814
- "novahiz-scan": {
815
- "type": "local",
816
- "command": ["node", join(home, "mcp", "argus", "src", "cli.mjs")],
817
- "timeout": 120000,
818
- "enabled": true
819
- }
820
- },
854
+ "mcp": mcp,
821
855
  "skills": {
822
856
  "paths": [skillsDir]
823
857
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "novahiz",
3
- "version": "0.11.6",
3
+ "version": "0.11.8",
4
4
  "description": "Enforce AI agent skills before every file edit: prompt classifier, skill catalog, and pre-edit gate.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",