codemap.md 1.5 KB

src/hooks/json-error-recovery/

Responsibility

  • Detect likely JSON syntax/parse failures in tool outputs and append a strong, non-redundant recovery prompt so the model replays corrected JSON on retry.

Design

  • hook.ts contains the implementation with exported constants:
    • JSON_ERROR_TOOL_EXCLUDE_LIST
    • JSON_ERROR_PATTERNS
    • JSON_ERROR_REMINDER
  • createJsonErrorRecoveryHook(_ctx) returns a tool.execute.after handler that appends reminder text when parsing failed.
  • JSON_ERROR_REMINDER_MARKER prevents recursive duplicate injection.
  • Exclusion is by lowercase tool name (bash, read, glob, web tools) through a Set.
  • Matching uses regex literals in JSON_ERROR_PATTERNS and short-circuits for non-string output.
  • index.ts only re-exports hook/constant surface.

Flow

  1. In tool.execute.after, normalize input.tool to lowercase and skip excluded tools.
  2. Skip when output.output is not a string.
  3. Skip if output already contains JSON_ERROR_REMINDER_MARKER.
  4. Evaluate all JSON_ERROR_PATTERNS; on match, append \n${JSON_ERROR_REMINDER} to output.output.

Integration

  • Exported from src/hooks/index.ts and attached to tool output lifecycle at plugin registration.
  • Only consumes hook payload contracts (ToolExecuteAfterInput, ToolExecuteAfterOutput) and standard string checks, making it generic across tools.
  • No direct dependency on tool internals; integrates by observing tool-call results before they are surfaced to the model.