• Will Chen's avatar
    Replace prompt-based stop hook with Sonnet-powered analysis (#2331) · 6ba51165
    Will Chen 提交于
    ## Summary
    - Replace broken prompt-based Stop hook with command-based hook using
    Claude Sonnet
    - Add .claude/hooks/stop-hook.py that reads conversation transcript and
    uses Sonnet to analyze task completion
    - Includes infinite loop prevention via stop_hook_active check
    - Add unit tests for the stop hook
    
    ## Test plan
    - [x] Run pytest .claude/hooks/tests/test_stop_hook.py -v - all 9 tests
    pass
    - [ ] Manual testing: verify stop hook fires and correctly analyzes task
    completion
    
    #skip-bugbot
    
    <!-- This is an auto-generated description by cubic. -->
    ---
    ## Summary by cubic
    Replaced the broken prompt-based stop hook with a command-based hook
    that blocks when tasks remain and uses Sonnet analysis as a fallback.
    Adds loop protection and tests.
    
    - **New Features**
    - Added .claude/hooks/stop-hook.py that blocks when
    TaskCreate/TaskUpdate show remaining tasks, returning
    {"decision":"block","reason":...}. If none remain, it analyzes a 32k
    transcript (middle truncation) with Sonnet.
    - Added unit tests and a stop_hook_active guard to prevent infinite
    loops.
    
    - **Refactors**
    - Updated .claude/settings.json to use the command-based hook (30000 ms
    timeout) instead of the prompt hook.
    - Added --no-session-persistence to Claude CLI calls in stop-hook.py and
    permission-request-hook.py.
    
    <sup>Written for commit 575426cee9efb0fa7e1f4be64a8405ae2e717a3b.
    Summary will update on new commits.</sup>
    
    <!-- End of auto-generated description by cubic. -->
    
    <!-- devin-review-badge-begin -->
    
    ---
    
    <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2331">
      <picture>
    <source media="(prefers-color-scheme: dark)"
    srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
    <img
    src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
    alt="Open with Devin">
      </picture>
    </a>
    <!-- devin-review-badge-end -->
    
    ---------
    Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
    6ba51165
名称
最后提交
最后更新
.claude 正在载入提交数据...
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
makers 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.oxfmtrc.json 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
AGENTS.md 正在载入提交数据...
CLA.md 正在载入提交数据...
CLAUDE.md 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
lint-staged.config.js 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...