1仕組みと動作原理
自己完结型ローカルサービス:scripts/server.mjs はサードパーティ製パッケージを一切使わない純粋な Node stdlib HTTP サーバーであり、127.0.0.1 のデフォルトポート 8765 にバインドされます。ポート占有時は自動的に +1 ずつインクリメント(最大 +20)し、UI テンプレート assets/index.html は同一ディレクトリから配信されます。
The server prints the actual URL. It starts at `http://127.0.0.1:8765/` and tries later ports if the default is occupied.
提供 API は2つのみ:GET /api/images で画像ルートディレクトリを再帰的に走査し {rootPath, items[](path/mtime/size)} を mtime 降順で返却;GET /images/<rel> で画像ファイルをストリーミング配信——双方ともパストラバーサル防止策(safePath による解決後パスがルート内に留まる検証)を実施。
if (fullPath !== root && !fullPath.startsWith(`${root}${path.sep}`)) { return null; }
「再利用優先」プロトコル:まず fetch /api/images でデフォルト URL をプローブ(成功時は稼働中サーバーを再利用)、失敗時は pgrep でプロセスを特定し後続ポートを検証、新規起動は最終手段とすることで、リクエストごとの多重起動を防止。
If this succeeds, reuse the running server at `http://127.0.0.1:8765/`.
フロントエンド index.html は同一オリジンの fetch('/api/images') によりグリッド/ライトボックス/一括タグをレンダリング。外部 CDN/フォント/スクリプトへの依存ゼロの純粋なローカルデータ動作。
const response = await fetch("/api/images", { cache: "no-store" });
受入検証パスを自動検証可能:node --check 構文チェック + 起動後に /api/images の items 返却、/images/<rel> の画像取得、トップページがバンドルされた index.html 由来であることを確認——SKILL はコード修正後にこれら3点を実行して初めて healthy と宣言することを義務付け。
Before declaring the skill healthy after edits, run: `node --check scripts/server.mjs`
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | node(运行 server.mjs;SKILL 亦用 node -e fetch 做探测) |
| cli | pgrep(探测已有 server 进程) |
| cli | open(可选,打开浏览器到本地 URL) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: node scripts/server.mjs(ローカル HTTP サービス、純粋な stdlib)
- 环境变量 / API Key: ベンダーサービス API キーの読み取り: なし
- 本地工作目录: ファイル読み書きおよび成果物出力: なし(サーバーは画像ディレクトリと assets を読み取るのみで、ファイル書き込みは行いません)
5二重目の独立検証
- [ok] 绑定地址与端口递增 — server.mjs 'HOST = process.env.HOST || "127.0.0.1"' + 'error.code === "EADDRINUSE" && port < DEFAULT_PORT + 20'。
- [ok] 路径穿越防护 — safePath resolve 后 prefix 校验,越界 403;decodeURIComponent 包 try/catch。
- [ok] 无外发网络/第三方依赖 — server imports 仅 node:http/fs/os/path/url;index.html 外链扫描仅同源。
- [ok] SKILL 探测复用协议可实现性 — fetch('/api/images')、pgrep pattern 'node .*server\.mjs' 与 server 实际进程命令行一致(node scripts/server.mjs)。
- [ok] 鉴权缺失的暴露半径 — 代码无任何鉴权/CORS 头;暴露限于回环(本机)——已在 risk 记录;浏览器 PNA 缓解无法在源码验证,标注为宿主/浏览器行为。
- [unlocatable] 真实浏览器端渲染验证 — index.html 视觉行为未在浏览器实测(本环境无 Codex 图片目录/浏览器),验证止于静态代码与 SKILL 自述。
6結論
b2b0045b3baaf9a9…