Skip to content

fix: Hook System — CRITICAL env var size + 3 HIGH issues from code review #75

@terisuke

Description

@terisuke

発見元

code-reviewer Agent(2026-04-05 セッション、PR #74 Hook System レビュー)

CRITICAL-1: OPENCODE_TOOL_INPUT env var の OS limit 超過

JSON.stringify(args) を環境変数に直接渡している。write/edit ツールでは数十〜数百KBになり、
macOS の argv+env 制限 (~1MB) を超えて E2BIG で spawn 失敗。catch で swallow されるため
hook が無言でバイパスされる(セキュリティ上の重大な問題)。

対策: 128KB超は temp file に書き出し OPENCODE_TOOL_INPUT_FILE で渡す。

HIGH-1: schema 重複

config.ts にインライン定義、hook/schema.ts にも定義。片方だけ更新すると乖離する。
対策: config.ts から hook/schema.ts の HookConfig を import して使用。

HIGH-2: PostToolUse block 結果の無視

PostToolUse hook が exit 2 を返しても結果が捨てられる。
対策: block 時はツール出力を hook メッセージで置換。

HIGH-3: command: "" が silent no-op

空文字列が sh -c "" → exit 0 で無言パス。
対策: z.string().min(1) に変更。

MEDIUM (follow-up)

  • Pre/Post hook ロジックの重複(helper 抽出)
  • matchesTool が trailing * のみ(glob ライブラリ or ドキュメント)
  • Notification event 未実装(schema から除外 or 実装)
  • config.get() per-tool-invocation(キャッシュ確認)
  • prompt.ts 統合テスト欠如

重要度: CRITICAL

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions