[Daemonインストール中のformatDocsLinkでundefinedプロパティを読み取れないエラー] - TypeError: Cannot Read Properties of Undefined in formatDocsLink During Daemon Installation
オンボードのinstall-daemonコマンドは、チャネルエントリの反復処理中にTypeErrorでクラッシュします。formatDocsLinkがundefinedパスパラメータを処理しないことが原因です。
🔍 症状
ユーザーがチャンネルを設定する際に、openclaw onboard --install-daemon ワークフローの処理が突然終了します。アプリケーションは後続の設定ステップに進みません。
エラー出力:
TypeError: Cannot read properties of undefined (reading 'trim')
at formatDocsLink (links-BlUEqVE8.js:7)
at resolveChannelSelectionNoteLines (registry-DE4nHTjg.js:111)
at setupChannels (onboard-channels-D--y_LfI.js:855)
再現手順:
openclaw onboard --install-daemonを実行する- モデルを設定する(例:minimax)
- チャンネルを設定する
- TypeErrorでクラッシュが発生するのを確認する
影響を受ける環境:
- OS: Windows 11
- OpenClawバージョン: 2026.4.14
- インストール方法: npmグローバルインストール
- オンボードコマンド:
openclaw onboard --install-daemon
🧠 原因
このクラッシュは、links-BlUEqVE8.js内のformatDocsLink関数における防御的コーディングの欠陥に起因します。この関数はpathパラメータが常に定義されていると想定していますが、meta.docsPathがundefinedのチャンネルエントリが存在します。
呼び出しチェーンの分析:
- エントリーポイント:
onboard-channels-D--y_LfI.js:855—setupChannels関数がresolveChannelSelectionNoteLinesを呼び出し、すべての登録済みチャンネルエントリを反復処理します。 - 集約:
registry-DE4nHTjg.js:111—resolveChannelSetupEntriesが3つのソースからチャンネルエントリをマージします:- 組み込みチャンネル
- インストール済みプラグイン(例:WeComプラグイン)
- ディレクトリベースのチャンネルエントリ
- フォーマット:
resolveChannelSelectionNoteLinesが各エントリに対してformatChannelSelectionLine(entry.meta, formatDocsLink)を呼び出します。 - クラッシュ発生箇所:
links-BlUEqVE8.js:7—formatDocsLinkがpath.trim()を実行しますが、pathはundefinedです。
脆弱性:
javascript // links-BlUEqVE8.js - 修正前(脆弱) function formatDocsLink(path, label, opts) { const trimmed = path.trim(); // 💥 pathがundefinedの場合クラッシュ // … }
この関数はpathパラメータのnull値やundefined値を防御していません。ディレクトリベースのregistrationや不完全なプラグインmanifestから取得されたチャンネルエントリは、メタデータオブジェクトにdocsPathプロパティがない場合があります。
🛠️ 解決手順
オプション1:配布ファイルをパッチする(即座の回避策)
配布ファイルを探して編集します。パスはインストール方法によって異なります:
Windows(npmグローバル):
%AppData%\npm\node_modules\openclaw\dist\links-BlUEqVE8.jsmacOS/Linux(npmグローバル):
$(npm root -g)/openclaw/dist/links-BlUEqVE8.js7行目に適用するパッチ:
// links-BlUEqVE8.js - 修正後(パッチ適用)
function formatDocsLink(path, label, opts) {
+ if (path == null) return label ?? "";
const trimmed = path.trim();
const docsRoot = resolveDocsRoot();
const url = trimmed.startsWith("http") ? trimmed : `${docsRoot}${trimmed.startsWith("/") ? trimmed : `/${trimmed}`}`;
// ...
}
オプション2:ソースチャンネルを特定してパッチする
docsPathの欠落が特定のチャンネルプラグインに起因する場合:
~/.openclaw/plugins/またはプロジェクトレベルのplugi]nディレクトリを調べて、 метаданныеが不完全なチャンネルを特定します。- 各チャンネルエントリが、そのmanifestで
meta.docsPathを定義していることを確認します。 - 影響を受けるチャンネルを再登録します。
オプション3:公式パッチを待つ
OpenClaw GitHubリポジトリでバージョン2026.4.15以降を監視してください。上流のコードベースにはこの防御チェックが含まれているはずです。
🧪 検証
ステップ1:パッチが存在することを確認する
formatDocsLinkにnullガードがあることを確認します:
# Windows PowerShell
Select-String -Path "$env:AppData\npm\node_modules\openclaw\dist\links-BlUEqVE8.js" -Pattern "if \(path == null\)"
# 期待される出力: "if (path == null) return label ?? "";"を含む行ステップ2:オンボードコマンドを再実行する
完全なオンボードワークフローを実行します:
openclaw onboard --install-daemon
# 期待される結果: TypeErrorなしのままワークフローが完了する
# モデル設定 → チャンネル選択 → 完了 まで進めるステップ3:デーモンのインストールを確認する
デーモンが実行されていることを確認します:
# Windows
openclaw daemon status
# 期待される結果: "Daemon is running"または同様のメッセージ
# サービスで確認
Get-Service -Name OpenClaw* 2>$null
# 期待される結果: Runningステータスステップ4:チャンネル設定を確認する
openclaw config get channels
# 期待される結果: エラーなしで設定されたチャンネルのリスト⚠️ よくある落とし穴
- 間違ったファイルにパッチを当てる: キャッシュやバックアップではなく、アクティブな
node_modulesディレクトリ内の正しいlinks-BlUEqVE8.jsを編集していることを確認してください。 - グローバルインストールとローカルインストール: OpenClawがグローバルとプロジェクトローカルに両方インストールされている場合、ローカルインストールが優先される場合があります。
npm list openclawでどのインストールがアクティブか確認してください。 - プラグインディレクトリの権限: Windowsでは、プラグインディレクトリが書き込み可能であることを確認してください。書き込み不可の場合、チャンネルの登録がサイレントに失敗し、
docsPathのないエントリが残る可能性があります。 - キャッシュの無効化: パッチ適用後、キャッシュされたビルドアーティファクトをクリアしてください:
npm cache clean --force rm -rf node_modules/.cache 2>/dev/null - 後続のアップデートでパッチが上書きされる:
npm update -g openclawを実行すると、手動のパッチが上書きされます。バージョンをピン留めするか、アップデート後にパッチを再適用してください。 - Windows Defenderの干渉: リアルタイム保護により、
AppData内のファイルへの編集が一時的にブロックされる場合があります。書き込み操作が失敗する場合は、一時的に無効化するか除外を追加してください。 - Yarnとnpmのインストール: Yarnはパッケージを異なる方法でキャッシュする可能性があります。インストールにYarnが使用された場合は、
yarn global dirを使用して正しいインストールパスを見つけてください。
🔗 関連するエラー
TypeError: Cannot read properties of undefined (reading 'startsWith')—pathが定義されているが文字列でない場合(例:空のオブジェクト)、formatDocsLinkで同様の防御的コーディングの問題が発生します。TypeError: Cannot read properties of null (reading 'trim')—pathがundefinedではなくnullの場合、同じバグの亜種が発生します。Channel registration failed: docsPath is required— 上流のコードがチャンネルメタデータを適切に検証した場合に発生する下流の検証エラーです。openclaw onboardhangs indefinitely on channel selection — チャンネルエントリがdocsPathなしで反復処理され、エラーがサイレントにcatchされる関連する症状です。Plugin manifest incomplete: missing required field 'docsPath'— このバグ的发生を防ぐべきプラグインの上流の検証エラーです。