novahiz 0.11.8 → 0.11.9
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 +25 -2
- package/README.md +1 -1
- package/adapters/opencode/novahiz-plugin.ts +1 -1
- package/catalog/providers.json +1 -1
- package/install/install.mjs +10 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@ 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.9] - 2026-10-24
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Serveurs MCP `dart` et `playwright` déclarés en échec au démarrage** - les
|
|
13
|
+
deux entrées générées dans `opencode.jsonc` n'avaient aucun `timeout`, donc le
|
|
14
|
+
harnais appliquait son défaut (~30 s). Le MCP `dart` mesure 4 à 30 s de
|
|
15
|
+
démarrage à froid (bundle `dart_mcp_server`), et `playwright` passe par `npx`
|
|
16
|
+
qui peut télécharger le paquet au premier lancement : les deux étaient coupés
|
|
17
|
+
en pleine connexion et rapportés `mcp connect failed: Request timed out`.
|
|
18
|
+
`novahiz-docs` reçoit aussi un `timeout` explicite par cohérence.
|
|
19
|
+
- **Pin Playwright désaligné** - `catalog/providers.json` et l'installateur
|
|
20
|
+
épinglaient `@playwright/mcp@0.0.82` alors que le paquet publié et installé
|
|
21
|
+
est `0.0.83`. Les deux sources pointent maintenant sur `0.0.83`.
|
|
22
|
+
- **Texte de gate faux sur l'exemption shell read-only** - l'injection annonçait
|
|
23
|
+
que les commandes shell read-only sont exemptées, sans dire que tout `|`,
|
|
24
|
+
`;`, `&`, `>`, backtick, retour ligne ou `$(...)` annule l'exemption. Un agent
|
|
25
|
+
qui enchaînait `Get-ChildItem | Select-Object` se croyait face à un bug alors
|
|
26
|
+
que la règle est délibérément conservatrice (`src/readonly.ts`). Le texte
|
|
27
|
+
décrit maintenant la règle réelle : une seule commande, sans métacaractère,
|
|
28
|
+
sinon on découpe en appels séparés.
|
|
29
|
+
- **`## [Unreleased]` dupliqué dans le CHANGELOG** - un second titre vide
|
|
30
|
+
subsistait au milieu de l'historique 0.8.x et cassait le repérage de la
|
|
31
|
+
section courante.
|
|
32
|
+
|
|
8
33
|
## [0.11.8] - 2026-10-23
|
|
9
34
|
|
|
10
35
|
### Removed
|
|
@@ -689,8 +714,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
689
714
|
`--sync` forces that behaviour back under npm as an escape hatch.
|
|
690
715
|
Regression tests: `tests/install-defer.test.ts`.
|
|
691
716
|
|
|
692
|
-
## [Unreleased]
|
|
693
|
-
|
|
694
717
|
## [0.8.1] - 2026-10-10
|
|
695
718
|
|
|
696
719
|
Patch: `novahiz upgrade` always reported "up to date" on the npm channel.
|
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.
|
|
7
|
+
> **Version 0.11.9** - `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
|
┌──────────────────────────────────────────────────────────────────────────┐
|
|
@@ -1707,7 +1707,7 @@ async function setup(ctx: Context): Promise<Cleanup> {
|
|
|
1707
1707
|
await log("warn", "Ledger state is invalid JSON, enforcement injected without the task summary");
|
|
1708
1708
|
}
|
|
1709
1709
|
}
|
|
1710
|
-
lines.push("The gate blocks edit/write/patch/apply_patch/bash/shell until the required skills are loaded via skill({id:\"...\"}).
|
|
1710
|
+
lines.push("The gate blocks edit/write/patch/apply_patch/bash/shell until the required skills are loaded via skill({id:\"...\"}). A shell command is exempt only when it is provably read-only: one command (status/log/diff/ls/Get-Content/...) and no pipe, ';', '&', '>', backtick, newline or $(...) - split a chained command into separate calls instead of joining it.");
|
|
1711
1711
|
lines.push("The gate is content-aware: novahiz-humanizer, ui-slop-remover and ui-craft-rules are required only on frontend design tasks (R13), and impeccable on the same design selectors (R14).");
|
|
1712
1712
|
lines.push("Config edited = opencode restart required (config read at import).");
|
|
1713
1713
|
lines.push("Memory lives in project-memory/ under the project root (cwd): index.json + fixed-size slots (8000 chars / 200 lines) with compact → archive → new-slot rotation. Use the MCP memory_* tools: memory_search to find relevant slots first, then memory_get to read, memory_write to append, memory_update to correct, memory_archive to retire.");
|
package/catalog/providers.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"id": "playwright",
|
|
4
4
|
"label": "Playwright MCP",
|
|
5
5
|
"kind": "mcp",
|
|
6
|
-
"command": ["npx", "-y", "@playwright/mcp@0.0.
|
|
6
|
+
"command": ["npx", "-y", "@playwright/mcp@0.0.83"],
|
|
7
7
|
"source": "https://github.com/microsoft/playwright-mcp",
|
|
8
8
|
"license": "Apache-2.0",
|
|
9
9
|
"categories": ["browser", "design-ui"]
|
package/install/install.mjs
CHANGED
|
@@ -604,9 +604,9 @@ async function main() {
|
|
|
604
604
|
const entry = providers.find((provider) => provider.id === "playwright");
|
|
605
605
|
const command = Array.isArray(entry?.command) ? entry.command : [];
|
|
606
606
|
const pin = command.find((token) => typeof token === "string" && token.includes("@playwright/mcp"));
|
|
607
|
-
return typeof pin === "string" ? pin : "@playwright/mcp@0.0.
|
|
607
|
+
return typeof pin === "string" ? pin : "@playwright/mcp@0.0.83";
|
|
608
608
|
} catch {
|
|
609
|
-
return "@playwright/mcp@0.0.
|
|
609
|
+
return "@playwright/mcp@0.0.83";
|
|
610
610
|
}
|
|
611
611
|
})();
|
|
612
612
|
const mcpServers = [
|
|
@@ -772,6 +772,7 @@ async function main() {
|
|
|
772
772
|
"novahiz-docs": {
|
|
773
773
|
"type": "local",
|
|
774
774
|
"command": [nodeBin, join(home, "mcp", "novahiz-docs", "index.mjs")],
|
|
775
|
+
"timeout": 120000,
|
|
775
776
|
"environment": mcpEnv,
|
|
776
777
|
"enabled": true
|
|
777
778
|
},
|
|
@@ -794,7 +795,9 @@ async function main() {
|
|
|
794
795
|
"playwright": {
|
|
795
796
|
"type": "local",
|
|
796
797
|
// See playwrightBrowserFlag() in lib.mjs for the platform rule.
|
|
797
|
-
|
|
798
|
+
// timeout 180s : npx telecharge le paquet au premier lancement.
|
|
799
|
+
"command": ["npx", "-y", "@playwright/mcp@0.0.83", playwrightBrowserFlag()],
|
|
800
|
+
"timeout": 180000,
|
|
798
801
|
"environment": mcpEnv,
|
|
799
802
|
"enabled": true
|
|
800
803
|
},
|
|
@@ -832,6 +835,10 @@ async function main() {
|
|
|
832
835
|
mcp["dart"] = {
|
|
833
836
|
"type": "local",
|
|
834
837
|
"command": ["dart", "mcp-server"],
|
|
838
|
+
// Mesure 2026-10-24 : demarrage a froid 4-30 s (bundle
|
|
839
|
+
// dart_mcp_server 1.2.1) ; sans timeout explicite le harness coupe
|
|
840
|
+
// vers 30 s et le serveur est declare en echec.
|
|
841
|
+
"timeout": 180000,
|
|
835
842
|
"environment": mcpEnv,
|
|
836
843
|
"enabled": true
|
|
837
844
|
};
|