superpowers-mcp 6.4.6 → 6.4.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/README.es.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Português (BR)](README.pt-BR.md) | [हिन्दी](README.hi.md)
4
4
 
5
- [![Versión](https://img.shields.io/badge/version-6.4.6-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![Versión](https://img.shields.io/badge/version-6.4.7-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![Licencia](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  Este documento resume la información y las instrucciones de uso para empaquetar las habilidades (skills) de Superpowers y el sistema de flujos de trabajo autónomos en un servidor **Model Context Protocol (MCP)** independiente, de alto rendimiento y seguro.
@@ -179,7 +179,18 @@ Para ayudarte a elegir el skill adecuado, hemos estructurado los 15 skills a lo
179
179
 
180
180
  ## 🆕 Novedades recientes
181
181
 
182
- ### v6.4.6 (versión actual)
182
+ ### v6.4.7 (versión actual)
183
+
184
+ - **Escaneo completo de seguridad del proyecto (2026-10-09)**: `src/*.ts`, el servidor companion de brainstorming, `scripts/`, `esbuild.js`, integridad del empaquetado npm y del lockfile, higiene de secretos y permisos, y todas las suites automatizadas. Controles base reverificados limpios — 0 `eval` / `new Function` / `innerHTML` / `document.write` / `shell: true` en el código distribuido, `child_process` solo por argv, 0 secretos hardcodeados, 0 archivos world-writable versionados (detalles en [SECURITY.md](SECURITY.md)).
185
+ - **`--remove` podría reportar éxito mientras sobrevivía una entrada MCP activa** (CWE-459, reproducido por ejecución): TOML conserva todas las tablas de array `[[mcp_servers.superpowers]]` salvo la última y deja huérfana `[[mcp_servers.superpowers.env]]`; JSON solo limpia la primera clave raíz que contiene una entrada `superpowers`; la eliminación en YAML es un no-op sobre un mapa de flujo poblado `superpowers: {…}`. Por tanto, un `command` elegido por quien llama sigue auto-lanzándose tras una desinstalación que reportó éxito.
186
+ - **El `--remove` en YAML podría borrar el bloque `superpowers` de otro padre** (CWE-459): la nueva guarda a nivel raíz cubre la reescritura del mapa vacío pero no la eliminación de la entrada, por lo que un `mcp_servers:` anidado bajo otra clave de primer nivel perdió su subárbol `superpowers` — incluidas claves del usuario como `env`.
187
+ - **La contención de `SKILLS_PATH` es una lista de bloqueo, no una lista de permisos** (CWE-22, preexistente): `~/.ssh`, `~/.config/gh` y `/Users/Shared` se aceptan porque existen, mientras que `~/.aws` se rechaza solo por no existir. En **Linux** el flujo documentado `SKILLS_PATH=$(mktemp -d)` resuelve a `/tmp` world-writable, así que un usuario local en un host compartido puede plantar contenido de skills que el agente luego trata como instrucciones de confianza.
188
+ - **`[MODEL]` ya no se descarta para `sdd-task-reviewer` / `sdd-re-review`** (detectado por este escaneo, corregido aquí): ambas plantillas escribían ese hueco como `model: [MODEL — REQUIRED: …]`, que no lleva ningún token literal, por lo que el valor `model` de quien llama llegaba al prompt renderizado **cero** veces y el nuevo diagnóstico no podía detectarlo. Ambas usan ahora `model: [MODEL]` más un comentario `#`, igual que `implementer-prompt.md`, y quedan fijadas por dos aserciones que fallan sin él y pasan con él.
189
+ - **Cerrados los avisos CodeQL `js/polynomial-redos` #9/#10: el matcher de entrada gestionada de YAML era cuadrático** (reproducido por ejecución): `managedEntryPattern` colocaba un grupo opcional `{…}` entre dos `\s*`, de modo que en cualquier línea que el patrón no podía completar, el motor reintentaba cada división de esa secuencia de espacios. No hace falta un payload exótico — `superpowers:` + una secuencia larga de espacios + **un carácter suelto** ya es una línea de configuración mal formada común, y una línea de 200 KB costaba **18.3 s** en una sola coincidencia, lo que bloqueaba `setup`. Se sustituyó por `managedEntryIndent()`, un escáner de una sola pasada: **18.3 s → 0.08 ms**. El conjunto de líneas aceptadas no cambia de forma demostrable (un fuzz diferencial de **300 030** líneas contra el regex eliminado dio **0** discrepancias), los tres patrones hermanos se midieron como lineales y se dejaron sin tocar, y dos casos nuevos de `tests/setup_test.js` fijan tanto el tiempo como el conjunto exacto de aceptación (verificado que fallan con la versión vulnerable y pasan con la corregida).
190
+ - **Objetivos de endurecimiento del empaquetado**: `npm pack` no reconstruye (`prepublishOnly` es solo de publicación y `out/` está en .gitignore, así que un tarball empaquetado distribuye `out/*.js` del disco sin revisar — el build corresponde a `prepack`); y `files: ["scripts"]` distribuye el instalador, que prefiere un `setup.js` coexistente.
191
+ - Verificación: `npm test` en verde **10/10 suites**, suite de PowerShell **128/128**, `npx tsc --noEmit` limpio, `npm run build` correcto, `npm audit` **0** vulnerabilidades, `npm run drift` 0 (piso de regresión remedido en **398 aserciones**: Node.js 238 + Bash 32 + PowerShell 128).
192
+
193
+ ### v6.4.6
183
194
 
184
195
  - **Escaneo completo de seguridad (2026-10-06)**: sin hallazgos nuevos en `src/*.ts`, el servidor companion de brainstorming, `scripts/` y el pipeline de build — 0 `eval` / `new Function` / `innerHTML` / `shell: true` en el código distribuido, procesos hijo solo por argv, nonces temporales con `crypto.randomBytes`, 0 secretos hardcodeados, 0 archivos world-writable (detalles en [SECURITY.md](SECURITY.md)).
185
196
  - **Avisos de dependencias corregidos (`npm audit` 2 → 0)**: GHSA-6qxp-vccf-f47h (alta, fuga de credenciales OAuth del SDK MCP) corregido subiendo `@modelcontextprotocol/sdk` a `^1.32.1`; GHSA-jqcg-44mw-7w3h (crítica, suplantación de IP en `proxy-addr` vía `express`) corregido con el nuevo piso `overrides.proxy-addr ^2.0.8`. Ambos solo existen en tiempo de compilación e inalcanzables desde el paquete stdio-only.
package/README.hi.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Português (BR)](README.pt-BR.md) | [हिन्दी](README.hi.md)
4
4
 
5
- [![संस्करण](https://img.shields.io/badge/version-6.4.6-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![संस्करण](https://img.shields.io/badge/version-6.4.7-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![लाइसेंस](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  यह दस्तावेज़ Superpowers skills लाइब्रेरी और स्वायत्त वर्कफ़्लो सिस्टम को एक स्वतंत्र, उच्च-प्रदर्शन और सुरक्षित **Model Context Protocol (MCP)** सर्वर के रूप में पैकेज करने की जानकारी और उपयोग निर्देशों का सारांश है।
@@ -179,7 +179,18 @@ systematic-debugging ➔ using-git-worktrees ➔ dispatching-parallel-agents ➔
179
179
 
180
180
  ## 🆕 हाल के अपडेट
181
181
 
182
- ### v6.4.6 (नवीनतम)
182
+ ### v6.4.7 (नवीनतम)
183
+
184
+ - **पूर्ण प्रोजेक्ट सुरक्षा स्कैन (2026-10-09)**: `src/*.ts`, brainstorming companion सर्वर, `scripts/`, `esbuild.js`, npm पैकेजिंग व लॉकफ़ाइल अखंडता, रहस्य/अनुमति स्वच्छता, और हर स्वचालित सूट। आधार नियंत्रण पुनः सत्यापित और स्वच्छ — शिप किए गए स्रोत में `eval` / `new Function` / `innerHTML` / `document.write` / `shell: true` 0, `child_process` केवल argv द्वारा, 0 हार्डकोडेड रहस्य, 0 world-writable ट्रैक की गई फ़ाइलें (विवरण [SECURITY.md](SECURITY.md) में)।
185
+ - **`--remove` सफलता की सूचना दे सकता था जबकि एक सक्रिय MCP प्रविष्टि बची रहती थी** (CWE-459, निष्पादन द्वारा पुनरुत्पादित): TOML अंतिम `[[mcp_servers.superpowers]]` array table को छोड़कर बाकी सभी रखता है और `[[mcp_servers.superpowers.env]]` को अनाथ कर देता है; JSON केवल पहली root key को साफ़ करता है जिसमें `superpowers` प्रविष्टि हो; भरे हुए flow map `superpowers: {…}` पर YAML हटाना no-op रहता है। इसलिए कॉलर-चयनित `command` सफलता की सूचना देने वाली अनइंस्टॉल के बाद भी स्वतः लॉन्च होता रह सकता है।
186
+ - **YAML `--remove` किसी अन्य पैरेंट का `superpowers` ब्लॉक मिटा सकता था** (CWE-459): नया root-स्तरीय रक्षक खाली-मैप पुनः लेखन को तो कवर करता है पर प्रविष्टि हटाने को नहीं, इसलिए किसी भिन्न top-level key के अधीन नेस्टेड `mcp_servers:` अपना `superpowers` सबट्री खो देता था — `env` जैसे user keys सहित।
187
+ - **`SKILLS_PATH` निहितता blocklist पर आधारित है, allowlist पर नहीं** (CWE-22, पहले से मौजूद): `~/.ssh`, `~/.config/gh` और `/Users/Shared` स्वीकृत होते हैं क्योंकि वे मौजूद हैं, जबकि `~/.aws` केवल गैर-अस्तित्व के कारण अस्वीकृत होता है। **Linux** पर दस्तावेज़बद्ध `SKILLS_PATH=$(mktemp -d)` प्रवाह world-writable `/tmp` पर पहुंचता है, इसलिए साझा होस्ट पर एक स्थानीय उपयोगकर्ता ऐसी skill सामग्री रोप सकता है जिसे एजेंट फिर विश्वसनीय निर्देश मानता है।
188
+ - **`[MODEL]` अब `sdd-task-reviewer` / `sdd-re-review` के लिए गिराया नहीं जाता** (इसी स्कैन में मिला, यहाँ ठीक किया गया): दोनों टेम्पलेट उस स्लॉट को `model: [MODEL — REQUIRED: …]` इस तरह लिखते थे कि उसमें कोई शाब्दिक टोकन न था, इसलिए कॉलर का `model` मान रेंडर किए गए प्रॉम्प्ट में **zero** बार पहुंचता था और नया डायग्नोस्टिक उसे नहीं देख सका। अब दोनों `model: [MODEL]` के साथ एक `#` टिप्पणी लगाते हैं, जो `implementer-prompt.md` से मेल खाती है, और दो अभिकथन — बिना उसके विफल, उसके साथ सफल — इसे बाँधे हुए हैं।
189
+ - **CodeQL `js/polynomial-redos` #9/#10 बंद — YAML प्रबंधित प्रविष्टि मैचर द्विघात था** (निष्पादन द्वारा पुनरुत्पादित): `managedEntryPattern` में एक वैकल्पिक `{…}` समूह दो `\s*` के बीच रखा गया था, इसलिए उस पंक्ति में जिसे पैटर्न पूरा नहीं कर सकता था, इंजन उस whitespace रन की हर विभाजना पर पुनः प्रयास करता था। किसी विशेष payload की आवश्यकता नहीं — `superpowers:` + लंबा whitespace रन + **एक अनावश्यक वर्ण** एक सामान्य त्रुटिपूर्ण कॉन्फ़िगरेशन पंक्ति ही है, और 200 KB की एक पंक्ति एक ही मिलान में **18.3 s** लेती थी, जिससे `setup` अवरुद्ध हो जाता था। इसे एक-पास स्कैनर `managedEntryIndent()` से बदल दिया गया: **18.3 s → 0.08 ms**। स्वीकृत पंक्तियों का सेट प्रमाणित रूप से अपरिवर्तित है (हटाए गए regex के विरुद्ध **300 030** पंक्तियों का differential fuzz **0** बेमेल देता है), तीनों सह-पैटर्न रैखिक मापे गए और वैसे ही छोड़े गए हैं, और `tests/setup_test.js` में दो नए मामले समय और स्वीकृति के सटीक सेट—दोनों को पिन करते हैं (कमज़ोर संस्करण पर विफल, सुधरे संस्करण पर सफल, सत्यापित)।
190
+ - **पैकेजिंग कठोरता के लक्ष्य**: `npm pack` पुनर्निर्माण नहीं करता (`prepublishOnly` केवल publish-हेतु है और `out/` gitignored है, इसलिए पैक किया गया टारबॉल डिस्क पर मौजूद `out/*.js` बिना समीक्षा के शिप करता है — बिल्ड को `prepack` में होना चाहिए); और `files: ["scripts"]` इंस्टॉलर शिप करता है, जो सह-स्थित `setup.js` को प्राथमिकता देता है।
191
+ - सत्यापन: `npm test` हरा **10/10 सूट**, PowerShell सूट **128/128**, `npx tsc --noEmit` स्वच्छ, `npm run build` ठीक, `npm audit` **0** कमज़ोरियाँ, `npm run drift` 0 (रिग्रेशन फ़्लोर पुनः मापा गया **398 अभिकथन**: Node.js 238 + Bash 32 + PowerShell 128)।
192
+
193
+ ### v6.4.6
183
194
 
184
195
  - **पूर्ण सुरक्षा स्कैन (2026-10-06)**: `src/*.ts`, brainstorming companion सर्वर, `scripts/` और बिल्ड पाइपलाइन में कोई नई खोज नहीं — वितरित कोड में `eval` / `new Function` / `innerHTML` / `shell: true` 0, चाइल्ड प्रोसेस केवल argv द्वारा, `crypto.randomBytes` अस्थायी nonce, 0 हार्डकोडेड रहस्य, 0 world-writable फ़ाइलें (विवरण [SECURITY.md](SECURITY.md) में)।
185
196
  - **निर्भरता परामर्श ठीक (`npm audit` 2 → 0)**: GHSA-6qxp-vccf-f47h (उच्च, MCP SDK OAuth क्रेडेंशियल लीक) `@modelcontextprotocol/sdk` को `^1.32.1` पर बढ़ाकर ठीक; GHSA-jqcg-44mw-7w3h (गंभीर, `express` के माध्यम से `proxy-addr` IP स्पूफिंग) नए `overrides.proxy-addr ^2.0.8` फ्लोर से ठीक। दोनों केवल बिल्ड-समय में हैं और stdio-only पैकेज से अप्राप्य।
package/README.ja.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Português (BR)](README.pt-BR.md) | [हिन्दी](README.hi.md)
4
4
 
5
- [![バージョン](https://img.shields.io/badge/version-6.4.6-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![バージョン](https://img.shields.io/badge/version-6.4.7-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  このドキュメントは、Superpowers スキルライブラリと自律型ワークフローを、独立した高パフォーマンスかつ安全な **Model Context Protocol (MCP)** サーバーにパッケージ化した使用説明書です。
@@ -180,7 +180,18 @@ systematic-debugging ➔ using-git-worktrees ➔ dispatching-parallel-agents ➔
180
180
 
181
181
  ## 🆕 最近の更新
182
182
 
183
- ### v6.4.6(最新)
183
+ ### v6.4.7(最新)
184
+
185
+ - **プロジェクト全体のセキュリティスキャン(2026-10-09)**:`src/*.ts`、brainstorming コンパニオンサーバー、`scripts/`、`esbuild.js`、npm パッケージングとロックファイルの完全性、秘密情報/パーミッションの衛生、およびすべての自動テストスイートを対象。ベースラインの統制を再検証しクリーン——出荷ソース中の `eval` / `new Function` / `innerHTML` / `document.write` / `shell: true` は 0、`child_process` は argv のみ、ハードコードされた秘密情報 0、追跡対象のワールドライタブルファイル 0(詳細は [SECURITY.md](SECURITY.md))。
186
+ - **`--remove` は有効な MCP エントリが残ったまま成功を報告し得た**(CWE-459、実行による再現):TOML は最後の `[[mcp_servers.superpowers]]` 配列テーブル以外のすべてを残し、`[[mcp_servers.superpowers.env]]` を孤立させる;JSON は `superpowers` エントリを保持する最初のルートキーだけを消去する;YAML の削除は、内容のあるフローマップ `superpowers: {…}` では no-op に留まる。呼び出し側が指定した `command` はしたがって、成功を報告したアンインストールの後も自動起動し続ける。
187
+ - **YAML の `--remove` は別親の `superpowers` ブロックを削除し得た**(CWE-459):新しいルートレベルガードは空マップ書き換えはカバーするがエントリ削除はカバーしないため、別の最上位キーの下にネストした `mcp_servers:` が `superpowers` サブツリーを失った——`env` などのユーザーキーが含まれていた。
188
+ - **`SKILLS_PATH` の封じ込めは許可リストではなくブロックリストである**(CWE-22、既存の設計):`~/.ssh`、`~/.config/gh`、`/Users/Shared` は存在するという理由で受理され、`~/.aws` は存在しないという理由でのみ拒否される。**Linux** では、文書化された `SKILLS_PATH=$(mktemp -d)` フローはワールドライタブルな `/tmp` に解決されるため、共有ホスト上のローカルユーザーがスキルの内容を仕込め、エージェントがそれを信頼された指示として扱ってしまう。
189
+ - **`[MODEL]` は `sdd-task-reviewer` / `sdd-re-review` で破棄されなくなった**(このスキャンで発見、ここでは修正済み):両テンプレートはそのスロットを `model: [MODEL — REQUIRED: …]` と綴っていたためリテラルのトークンがなく、呼び出し側の `model` 値はレンダリング済みプロンプトに **zero** 回しか到達せず、新しい診断もそれを把握できなかった。両方とも `model: [MODEL]` と `#` コメントを使うようになり、`implementer-prompt.md` と一致したうえで、トークンがなければ失敗・あれば成功となる 2 つのアサーションで固定されている。
190
+ - **CodeQL `js/polynomial-redos` #9/#10 を解消——YAML の管理エントリ判定は二次複雑度だった**(実行による再現):`managedEntryPattern` はオプショナルな `{…}` グループを 2 つの `\s*` の間に置いていたため、パターンが完了できない行ではエンジンがその空白ランの分割をすべて再試行していた。特殊なペイロードは不要で、`superpowers:` + 長い空白ラン + **余分な 1 文字**は通常の不正な設定行であり、200 KB の 1 行が 1 回の照合に **18.3 s** を要し、`setup` を停止させた。単一パスのスキャナ `managedEntryIndent()` に置き換え、**18.3 s → 0.08 ms** になった。受理される行の集合が変わっていないことは証明されている(削除した regex に対する **300 030** 行の differential fuzz で **0** 件の不一致)。姉妹となる 3 つのパターンは同じペイロードで測定して線形であり、そのままとした。新たな `tests/setup_test.js` の 2 つのケースが時間と受理される行の集合の両方を固定している(脆弱な実装では失敗し、修正済みの実装では成功することを確認済み)。
191
+ - **パッケージング強化の対象**:`npm pack` は再ビルドしない(`prepublishOnly` は公開専用で、`out/` は gitignore 対象のため、パックされた tarball はレビューされていないディスク上の `out/*.js` を同梱する——ビルドは `prepack` に属する);また `files: ["scripts"]` はインストーラーを同梱するが、そのインストーラーは同じ場所に置かれた `setup.js` を優先する。
192
+ - 検証:`npm test` グリーン **10/10 スイート**、PowerShell スイート **128/128**、`npx tsc --noEmit` クリーン、`npm run build` ok、`npm audit` **0** 脆弱性、`npm run drift` 0(回帰下限を再測定:**398 アサーション**:Node.js 238 + Bash 32 + PowerShell 128)。
193
+
194
+ ### v6.4.6
184
195
 
185
196
  - **フルセキュリティスキャン(2026-10-06)**:`src/*.ts`、brainstorming コンパニオンサーバー、`scripts/`、ビルドパイプラインに新たな所見なし——出荷コード中の `eval` / `new Function` / `innerHTML` / `shell: true` は 0、子プロセスは argv のみ、`crypto.randomBytes` による一時ファイル nonce、ハードコードされた秘密情報 0、ワールドライタブルファイル 0(詳細は [SECURITY.md](SECURITY.md))。
186
197
  - **依存関係アドバイザリを解消(`npm audit` 2 → 0)**:GHSA-6qxp-vccf-f47h(高、MCP SDK の OAuth 認証情報漏洩)は `@modelcontextprotocol/sdk` を `^1.32.1` に引き上げて修正;GHSA-jqcg-44mw-7w3h(重大、`express` 経由の `proxy-addr` IP 偽装)は新規 `overrides.proxy-addr ^2.0.8` 下限で修正。いずれもビルド時のみで、stdio 専用の出荷バンドルからは到達不能。
package/README.ko.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Português (BR)](README.pt-BR.md) | [हिन्दी](README.hi.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-6.4.6-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![Version](https://img.shields.io/badge/version-6.4.7-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  이 문서는 Superpowers 스킬 라이브러리와 자율 에이전트 워크플로우를 독립적이고 고성능이며 안전한 **Model Context Protocol (MCP)** 서버로 패키징한 사용 지침을 요약한 것입니다.
@@ -178,7 +178,18 @@ systematic-debugging ➔ using-git-worktrees ➔ dispatching-parallel-agents ➔
178
178
 
179
179
  ## 🆕 최근 업데이트
180
180
 
181
- ### v6.4.6 (최신)
181
+ ### v6.4.7 (최신)
182
+
183
+ - **전체 프로젝트 보안 스캔 (2026-10-09)**: `src/*.ts`, brainstorming 컴패니언 서버, `scripts/`, `esbuild.js`, npm 패키징 및 lockfile 무결성, 비밀/권한 위생, 그리고 모든 자동화 스위트. 기준 통제 재검증 결과 클린 — 출하 소스 내 `eval` / `new Function` / `innerHTML` / `document.write` / `shell: true` 0건, `child_process`는 argv 전용, 하드코딩된 비밀 0건, world-writable 추적 파일 0건 (자세한 내용은 [SECURITY.md](SECURITY.md)).
184
+ - **`--remove`가 성공을 보고했는데도 살아 있는 MCP 항목이 남을 수 있음** (CWE-459, 실행으로 재현): TOML은 마지막 `[[mcp_servers.superpowers]]` 배열 테이블을 제외한 모든 테이블을 유지하고 `[[mcp_servers.superpowers.env]]`를 고아 상태로 남김; JSON은 `superpowers` 항목을 담은 첫 번째 루트 키만 비움; YAML 제거는 채워진 flow map `superpowers: {…}`에 대해 무동작임. 따라서 호출자가 선택한 `command`는 성공을 보고한 제거 이후에도 계속 자동 실행될 수 있음.
185
+ - **YAML `--remove`가 다른 부모의 `superpowers` 블록을 삭제할 수 있음** (CWE-459): 새 root-level 가드는 빈 맵 재작성만 다루고 항목 삭제는 다루지 않아, 다른 최상위 키 아래에 중첩된 `mcp_servers:`가 `env` 같은 사용자 키를 포함해 `superpowers` 서브트리를 잃을 수 있음.
186
+ - **`SKILLS_PATH` 포함 범위 검사가 allowlist가 아니라 blocklist임** (CWE-22, 기존 문제): `~/.ssh`, `~/.config/gh`, `/Users/Shared`는 존재하기 때문에 허용되고, `~/.aws`는 오직 존재하지 않는다는 이유로만 거부됨. **Linux**에서 문서화된 `SKILLS_PATH=$(mktemp -d)` 절차는 world-writable `/tmp`로 해석되므로, 공유 호스트의 로컬 사용자가 에이전트가 신뢰할 지시문으로 취급하는 스킬 콘텐츠를 심을 수 있음.
187
+ - **`[MODEL]`가 `sdd-task-reviewer` / `sdd-re-review`에서 더 이상 누락되지 않음** (이 스캔에서 발견, 여기서 수정됨): 두 템플릿 모두 해당 슬롯을 `model: [MODEL — REQUIRED: …]`로 적어 리터럴 토큰이 없었고, 그 탓에 호출자의 `model` 값은 렌더링된 프롬프트에 **zero**회 도달했으며 새 진단도 이를 볼 수 없었음; 둘 다 이제 `implementer-prompt.md`와 동일하게 `model: [MODEL]`에 `#` 주석을 더해 사용하고, 토큰 없으면 실패 / 있으면 통과하는 두 개의 어서션으로 고정됨.
188
+ - **CodeQL `js/polynomial-redos` #9/#10 해결 — YAML 관리 항목 매처가 이차 복잡도였음** (실행으로 재현): `managedEntryPattern`은 선택적 `{…}` 그룹을 두 `\s*` 사이에 두어, 패턴이 완성하지 못하는 어떤 줄에서도 엔진이 그 공백 run의 모든 분할을 다시 시도하게 만들었다. 특수한 페이로드가 필요 없으며, `superpowers:` + 긴 공백 run + **딱 한 개의 낯선 문자**가 그저 평범한 잘못된 설정 줄이다. 200 KB짜리 한 줄이 단 한 번의 매칭에 **18.3 s**를 소모해 `setup`을 멈췄다. 단일 패스 스캐너인 `managedEntryIndent()`로 교체되어 **18.3 s → 0.08 ms**가 되었다. 받아들여지는 줄 집합은 변하지 않았음이 증명되었고(제거된 regex에 대한 **300 030**줄 차등 퍼징에서 **0**건 불일치), 형제 패턴 세 개는 같은 페이로드에서 선형으로 측정되어 그대로 두었으며, `tests/setup_test.js`에 시간과 정확한 수용 집합을 함께 고정하는 두 개의 새 케이스가 추가되었다(취약한 구현에서 실패하고 수정된 구현에서 통과함을 검증).
189
+ - **패키징 강화 대상**: `npm pack`는 재빌드하지 않음 (`prepublishOnly`는 publish 전용이고 `out/`는 gitignore 대상이므로, 패킹된 tarball은 검토되지 않은 디스크상의 `out/*.js`를 그대로 배포함 — 빌드는 `prepack`에 속함); 그리고 `files: ["scripts"]`는 설치 프로그램을 함께 배포하는데, 이 설치 프로그램은 같은 위치의 `setup.js`를 우선함.
190
+ - 검증: `npm test` 그린 **10/10 스위트**, PowerShell 스위트 **128/128**, `npx tsc --noEmit` 클린, `npm run build` 정상, `npm audit` 취약점 **0**건, `npm run drift` 0 (회귀 플로어 재측정 **398 어서션**: Node.js 238 + Bash 32 + PowerShell 128).
191
+
192
+ ### v6.4.6
182
193
 
183
194
  - **전체 보안 스캔 (2026-10-06)**: `src/*.ts`, brainstorming 컴패니언 서버, `scripts/`, 빌드 파이프라인에서 새로운 발견 없음 — 출하 코드 내 `eval` / `new Function` / `innerHTML` / `shell: true` 0건, 자식 프로세스는 argv 전용, `crypto.randomBytes` 임시 nonce, 하드코딩된 비밀 0건, world-writable 파일 0건 (자세한 내용은 [SECURITY.md](SECURITY.md)).
184
195
  - **의존성 권고 해소 (`npm audit` 2 → 0)**: GHSA-6qxp-vccf-f47h (높음, MCP SDK OAuth 자격 증명 유출)는 `@modelcontextprotocol/sdk`를 `^1.32.1`로 올려 수정; GHSA-jqcg-44mw-7w3h (심각, `express` 경유의 `proxy-addr` IP 스푸핑)는 신규 `overrides.proxy-addr ^2.0.8` 하한으로 수정. 둘 다 빌드 시점 전용이며 stdio 전용 출하 번들에서는 도달 불가.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Português (BR)](README.pt-BR.md) | [हिन्दी](README.hi.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-6.4.6-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![Version](https://img.shields.io/badge/version-6.4.7-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  This document summarizes the information and usage instructions for packaging the Superpowers skills and autonomous workflow system into an independent, high-performance, and secure **Model Context Protocol (MCP)** server.
@@ -179,7 +179,18 @@ To help you choose the right skill, we have structured all 15 skills across the
179
179
 
180
180
  ## 🆕 Recent Updates
181
181
 
182
- ### v6.4.6 (Latest)
182
+ ### v6.4.7 (Latest)
183
+
184
+ - **Full project security scan (2026-10-09)**: `src/*.ts`, the brainstorming companion server, `scripts/`, `esbuild.js`, npm packaging and lockfile integrity, secret/permission hygiene, and every automated suite. Baseline controls re-verified clean — 0 `eval` / `new Function` / `innerHTML` / `document.write` / `shell: true` in shipped source, `child_process` argv-only, 0 hardcoded secrets, 0 world-writable tracked files (details in [SECURITY.md](SECURITY.md)).
185
+ - **`--remove` could report success while a live MCP entry survived** (CWE-459, reproduced by execution): TOML keeps all but the last `[[mcp_servers.superpowers]]` array table and orphans `[[mcp_servers.superpowers.env]]`; JSON clears only the first root key holding a `superpowers` entry; YAML removal is a no-op on a populated flow map `superpowers: {…}`. A caller-chosen `command` therefore keeps auto-launching after an uninstall that reported success.
186
+ - **YAML `--remove` could delete another parent's `superpowers` block** (CWE-459): the new root-level guard covers the empty-map rewrite but not the entry deletion, so a nested `mcp_servers:` under a different top-level key lost its `superpowers` subtree — including user keys such as `env`.
187
+ - **`SKILLS_PATH` containment is a blocklist, not an allowlist** (CWE-22, pre-existing): `~/.ssh`, `~/.config/gh` and `/Users/Shared` are accepted because they exist, while `~/.aws` is rejected only for non-existence. On **Linux** the documented `SKILLS_PATH=$(mktemp -d)` flow resolves to world-writable `/tmp`, so a local user on a shared host can plant skill content the agent then treats as trusted instructions.
188
+ - **`[MODEL]` is no longer dropped for `sdd-task-reviewer` / `sdd-re-review`** (found by this scan, fixed here): both templates spelled that slot `model: [MODEL — REQUIRED: …]`, which carries no literal token, so the caller's `model` value reached the rendered prompt **zero** times and the new diagnostic could not see it. Both now use `model: [MODEL]` plus a `#` comment, matching `implementer-prompt.md`, and are pinned by two fail-without / pass-with assertions.
189
+ - **CodeQL `js/polynomial-redos` #9/#10 closed — the YAML managed-entry matcher was quadratic** (reproduced by execution): `managedEntryPattern` put an optional `{…}` group between two `\s*` runs, so any line it could not complete made the engine retry every split of that whitespace run. No exotic payload is needed — `superpowers:` + a long space run + **one stray character** is an ordinary malformed config line, and a 200 KB line cost **18.3 s** in a single match, stalling `setup`. Replaced by `managedEntryIndent()`, a single-pass scanner: **18.3 s → 0.08 ms**. The accepted-line set is provably unchanged (a **300 030**-line differential fuzz against the removed regex found **0** mismatches), the three sibling patterns were measured linear and left alone, and two new `tests/setup_test.js` cases pin both the timing and the exact accepted set (verified fail-on-vulnerable / pass-on-fixed).
190
+ - **Packaging hardening targets**: `npm pack` does not rebuild (`prepublishOnly` is publish-only and `out/` is gitignored, so a packed tarball ships on-disk `out/*.js` unreviewed — the build belongs in `prepack`); and `files: ["scripts"]` ships the installer, which prefers a co-located `setup.js`.
191
+ - Verification: `npm test` green **10/10 suites**, PowerShell suite **128/128**, `npx tsc --noEmit` clean, `npm run build` ok, `npm audit` **0** vulnerabilities, `npm run drift` 0 (regression floor re-measured at **398 assertions**: Node.js 238 + Bash 32 + PowerShell 128).
192
+
193
+ ### v6.4.6
183
194
 
184
195
  - **Full security scan (2026-10-06)**: no new findings across `src/*.ts`, the brainstorming companion server, `scripts/`, and the build pipeline — 0 `eval` / `new Function` / `innerHTML` / `shell: true` in shipped code, argv-only child processes, `crypto.randomBytes` temp nonces, 0 hardcoded secrets, 0 world-writable files (details in [SECURITY.md](SECURITY.md)).
185
196
  - **Dependency advisories remediated (`npm audit` 2 → 0)**: GHSA-6qxp-vccf-f47h (high, MCP SDK OAuth credential leak) fixed by raising `@modelcontextprotocol/sdk` to `^1.32.1`; GHSA-jqcg-44mw-7w3h (critical, `proxy-addr` IP spoofing via `express`) fixed with a new `overrides.proxy-addr ^2.0.8` floor. Both are build-time-only and unreachable from the stdio-only shipped bundle.
@@ -217,7 +228,7 @@ To help you choose the right skill, we have structured all 15 skills across the
217
228
  - **v6.4.2 security audit & code review (2026-09-24)**: closed the audit findings across the MCP server, setup scripts, build pipeline, and test harness (details in [SECURITY.md](SECURITY.md)).
218
229
  - **Traversal & error hygiene**: skill names are decoded *before* allowlist validation, so double-encoded `..%2f` / `%2e%2e` payloads are rejected with `InvalidParams`; unknown tools and prompts now return actionable `InvalidParams` errors instead of `MethodNotFound`.
219
230
  - **TOCTOU & destructive-path defense**: canonical paths are re-verified after symlink checks, cache cleanup is gated by the copy manifest (fork-specific skills can never be deleted), and drift/coverage records are written atomically via temp file + rename.
220
- - **Race-free builds & fail-soft sync**: `out/setup.js` builds take an exclusive lock with an mtime staleness re-check, watch-mode output is chmod-ed executable, and missing upstream sources exit cleanly instead of raising false drift.
231
+ - **Fail-soft sync & always-executable builds**: the four esbuild targets build concurrently, watch-mode output is chmod-ed executable on every rebuild, and missing upstream sources exit cleanly instead of raising false drift.
221
232
  - **Honest test harness**: a ref'd watchdog plus server `exit`/`close` handlers end silent hangs, drift tests run behind a network guard, and privilege-limited skips can no longer count as passes — regression floor holds at **365/365** assertions.
222
233
 
223
234
  ### v6.4.1
package/README.pt-BR.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Português (BR)](README.pt-BR.md) | [हिन्दी](README.hi.md)
4
4
 
5
- [![Versão](https://img.shields.io/badge/version-6.4.6-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![Versão](https://img.shields.io/badge/version-6.4.7-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![Licença](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  Este documento resume as informações e instruções de uso para empacotar as skills do Superpowers e o sistema de fluxos de trabalho autônomos em um servidor **Model Context Protocol (MCP)** independente, de alta performance e seguro.
@@ -179,7 +179,18 @@ Para ajudar você a escolher a skill certa, estruturamos as 15 skills ao longo d
179
179
 
180
180
  ## 🆕 Novidades recentes
181
181
 
182
- ### v6.4.6 (atual)
182
+ ### v6.4.7 (atual)
183
+
184
+ - **Varredura completa de segurança do projeto (2026-10-09)**: `src/*.ts`, o servidor companion de brainstorming, `scripts/`, `esbuild.js`, integridade do empacotamento npm e do lockfile, higiene de segredos/permissões e todas as suítes automatizadas. Controles de base reverificados limpos — 0 `eval` / `new Function` / `innerHTML` / `document.write` / `shell: true` no código distribuído, `child_process` somente por argv, 0 segredos hardcodados, 0 arquivos rastreados world-writable (detalhes em [SECURITY.md](SECURITY.md)).
185
+ - **`--remove` poderia reportar sucesso enquanto uma entrada MCP viva sobrevivia** (CWE-459, reproduzido por execução): o TOML mantém todas as tabelas de array `[[mcp_servers.superpowers]]` exceto a última e deixa órfã `[[mcp_servers.superpowers.env]]`; o JSON limpa apenas a primeira chave raiz que contém uma entrada `superpowers`; a remoção em YAML é um no-op sobre um mapa de fluxo populado `superpowers: {…}`. Assim, um `command` escolhido pelo chamador continua sendo iniciado automaticamente após uma desinstalação que reportou sucesso.
186
+ - **A remoção em YAML via `--remove` poderia apagar o bloco `superpowers` de outro pai** (CWE-459): a nova guarda em nível de raiz cobre a reescrita do mapa vazio, mas não a exclusão da entrada, de modo que um `mcp_servers:` aninhado sob outra chave de nível superior perdeu sua subárvore `superpowers` — incluindo chaves do usuário como `env`.
187
+ - **O confinamento de `SKILLS_PATH` é uma blocklist, não uma allowlist** (CWE-22, preexistente): `~/.ssh`, `~/.config/gh` e `/Users/Shared` são aceitos porque existem, enquanto `~/.aws` é rejeitado apenas por não existir. No **Linux**, o fluxo documentado `SKILLS_PATH=$(mktemp -d)` resolve para `/tmp` world-writable, de modo que um usuário local em um host compartilhado pode plantar conteúdo de skills que o agente passa a tratar como instruções confiáveis.
188
+ - **O `[MODEL]` não é mais descartado para `sdd-task-reviewer` / `sdd-re-review`** (encontrado por esta varredura, corrigido aqui): ambos os templates escreviam esse slot como `model: [MODEL — REQUIRED: …]`, que não carrega nenhum token literal, então o valor `model` do chamador chegava ao prompt renderizado **zero** vezes e o novo diagnóstico não conseguia enxergá-lo. Agora ambos usam `model: [MODEL]` mais um comentário `#`, alinhados a `implementer-prompt.md`, e ficam fixados por duas asserções que falham sem e passam com.
189
+ - **Alertas CodeQL `js/polynomial-redos` #9/#10 encerradas — o matcher de entrada gerenciada do YAML era quadrático** (reproduzido por execução): `managedEntryPattern` colocava um grupo opcional `{…}` entre dois `\s*`, de modo que em qualquer linha que o padrão não conseguia completar, o motor tentava novamente cada divisão daquela sequência de espaços. Não é necessário um payload exótico — `superpowers:` + uma sequência longa de espaços + **um caractere estranho** já é uma linha de configuração malformada comum, e uma linha de 200 KB custava **18.3 s** em uma única correspondência, travando o `setup`. Substituído por `managedEntryIndent()`, um varredor de passagem única: **18.3 s → 0.08 ms**. O conjunto de linhas aceitas permanece comprovadamente inalterado (um fuzz diferencial de **300 030** linhas contra a regex removida encontrou **0** divergências), os três padrões irmãos foram medidos como lineares e foram deixados como estão, e dois novos casos em `tests/setup_test.js` fixam tanto o tempo quanto o conjunto exato de aceitação (verificado que falham na versão vulnerável e passam na corrigida).
190
+ - **Alvos de endurecimento do empacotamento**: `npm pack` não reconstrói (`prepublishOnly` é apenas para publicação e `out/` está no gitignore, então um tarball empacotado distribui `out/*.js` em disco sem revisão — o build pertence ao `prepack`); e `files: ["scripts"]` distribui o instalador, que prefere um `setup.js` colocalizado.
191
+ - Verificação: `npm test` verde **10/10 suítes**, suíte PowerShell **128/128**, `npx tsc --noEmit` limpo, `npm run build` ok, `npm audit` **0** vulnerabilidades, `npm run drift` 0 (piso de regressão remedido em **398 asserções**: Node.js 238 + Bash 32 + PowerShell 128).
192
+
193
+ ### v6.4.6
183
194
 
184
195
  - **Varredura completa de segurança (2026-10-06)**: nenhuma nova descoberta em `src/*.ts`, no servidor companion de brainstorming, em `scripts/` e no pipeline de build — 0 `eval` / `new Function` / `innerHTML` / `shell: true` no código distribuído, processos filho somente por argv, nonces temporários com `crypto.randomBytes`, 0 segredos hardcodados, 0 arquivos world-writable (detalhes em [SECURITY.md](SECURITY.md)).
185
196
  - **Avisos de dependências corrigidos (`npm audit` 2 → 0)**: GHSA-6qxp-vccf-f47h (alta, vazamento de credenciais OAuth do SDK MCP) corrigido elevando `@modelcontextprotocol/sdk` a `^1.32.1`; GHSA-jqcg-44mw-7w3h (crítica, falsificação de IP em `proxy-addr` via `express`) corrigido com o novo piso `overrides.proxy-addr ^2.0.8`. Ambos existem só em tempo de compilação e são inalcançáveis a partir do pacote stdio-only.
package/README.zh-TW.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Português (BR)](README.pt-BR.md) | [हिन्दी](README.hi.md)
4
4
 
5
- [![版本](https://img.shields.io/badge/version-6.4.6-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![版本](https://img.shields.io/badge/version-6.4.7-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![授權](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  本文檔總結了將 Superpowers 技能庫與自主 Agent 工作流架構打包成獨立、高效能且安全加固的 **Model Context Protocol (MCP)** 伺服器之相關資訊與使用說明。
@@ -178,7 +178,18 @@ systematic-debugging ➔ using-git-worktrees ➔ dispatching-parallel-agents ➔
178
178
 
179
179
  ## 🆕 最近更新
180
180
 
181
- ### v6.4.6(最新版)
181
+ ### v6.4.7(最新版)
182
+
183
+ - **完整專案安全性掃描(2026-10-09)**:`src/*.ts`、brainstorming companion server、`scripts/`、`esbuild.js`、npm 打包與 lockfile 完整性、密鑰/權限衛生,以及所有自動化測試套件。基準控管重新驗證為乾淨——發佈程式碼中 `eval` / `new Function` / `innerHTML` / `document.write` / `shell: true` 為 0、`child_process` 僅用 argv、0 硬編碼密鑰、0 全域可寫的受追蹤檔案(詳見 [SECURITY.md](SECURITY.md))。
184
+ - **`--remove` 可能在仍有存活的 MCP 項目時回報成功**(CWE-459,已以實際執行重現):TOML 會保留除最後一個 `[[mcp_servers.superpowers]]` 陣列表之外的所有項目,並使 `[[mcp_servers.superpowers.env]]` 淪為孤兒;JSON 只清除第一個含有 `superpowers` 項目的根層 key;YAML 移除對已填滿的 flow map `superpowers: {…}` 是無動作。因此呼叫端自選的 `command` 在回報成功的解除安裝之後,仍會持續自動啟動。
185
+ - **YAML `--remove` 可能刪除另一個父層的 `superpowers` 區塊**(CWE-459):新的根層守衛涵蓋了空映射重寫,但未涵蓋項目刪除,因此位於其他頂層 key 底下的巢狀 `mcp_servers:` 會失去其 `superpowers` 子樹——包含 `env` 等使用者 key。
186
+ - **`SKILLS_PATH` 的範圍限制是封鎖清單,而非允許清單**(CWE-22,既有問題):`~/.ssh`、`~/.config/gh` 與 `/Users/Shared` 之所以被接受,是因為它們存在;而 `~/.aws` 被拒絕也只是因為不存在。在 **Linux** 上,文件中記載的 `SKILLS_PATH=$(mktemp -d)` 流程會解析到全域可寫的 `/tmp`,因此共用主機上的本機使用者可以植入技能內容,而 Agent 隨後會把它當作受信任的指令。
187
+ - **`[MODEL]` 對 `sdd-task-reviewer` / `sdd-re-review` 不再被丟棄**(由本次掃描發現,並已於此修正):這兩個範本原本都把該欄位寫成 `model: [MODEL — REQUIRED: …]`,其中不含任何字面 token,因此呼叫端的 `model` 值先前抵達渲染後 prompt 的次數為 **zero**,新的診斷訊息也無法看見它。兩者現皆改用 `model: [MODEL]` 加上一行 `#` 註解,與 `implementer-prompt.md` 一致,並由兩個「未帶入則失敗/帶入則通過」的斷言加以釘住。
188
+ - **CodeQL `js/polynomial-redos` #9/#10 已關閉——YAML 的受管理項目匹配器是二次複雜度**(已以實際執行重現):`managedEntryPattern` 把一個可選的 `{…}` 群組放在兩個 `\s*` 之間,因此任何它無法完成的行,都會讓引擎重試該空白 run 的每一種切分方式。不需要任何特殊的攻擊載 payload——`superpowers:` + 一段長空白 run + **一個多餘字元**就是一般的格式錯誤設定行,而 200 KB 的一行在單次比對中耗時 **18.3 s**,足以卡住 `setup`。現已改用 `managedEntryIndent()` 這個單趟掃描器:**18.3 s → 0.08 ms**。可被接受的行集合可證明未變(針對被移除的 regex 做了 **300 030** 行的差異模糊測試,**0** 處不符),那三個同類 pattern 經量測為線性故保持原樣,並新增兩個 `tests/setup_test.js` 用例同時釘住時間表現與可接受的行集合(已驗證在舊實作上失敗、在新實作上通過)。
189
+ - **打包強化目標**:`npm pack` 不會重新建置(`prepublishOnly` 只在發佈時執行,且 `out/` 已被 gitignore,因此打包出的 tarball 會出貨未經審查的磁碟上 `out/*.js`——建置應該放在 `prepack`);而 `files: ["scripts"]` 會連安裝程式一起出貨,它偏好同目錄的 `setup.js`。
190
+ - 驗證:`npm test` 全綠(**10/10 套件**)、PowerShell 套件 **128/128**、`npx tsc --noEmit` 乾淨、`npm run build` 正常、`npm audit` **0** 漏洞、`npm run drift` 0(迴歸基準重新量測為 **398 斷言**:Node.js 238 + Bash 32 + PowerShell 128)。
191
+
192
+ ### v6.4.6
182
193
 
183
194
  - **完整安全性掃描(2026-10-06)**:`src/*.ts`、brainstorming companion server、`scripts/` 與建置流程皆無新增發現——發佈程式碼中 `eval` / `new Function` / `innerHTML` / `shell: true` 為 0、子程序僅用 argv、`crypto.randomBytes` 暫存檔隨機值、0 硬編碼密鑰、0 全域可寫檔案(詳見 [SECURITY.md](SECURITY.md))。
184
195
  - **依賴安全諮詢已修復(`npm audit` 2 → 0)**:GHSA-6qxp-vccf-f47h(高危,MCP SDK OAuth 憑證外洩)透過升級 `@modelcontextprotocol/sdk` 至 `^1.32.1` 修復;GHSA-jqcg-44mw-7w3h(嚴重,經由 `express` 的 `proxy-addr` IP 偽造)以新增 `overrides.proxy-addr ^2.0.8` 下限修復。兩者皆僅存在於建置期,stdio-only 的發佈包無法觸及。