Skip to main content
Glama
HOOK_FIX_SUMMARY.md7.61 kB
# Hook Installation Fix Summary ## Problem Identified The work session enforcement hook was using: 1. ❌ `.js` extension instead of `.cjs` 2. ❌ Potential module system conflicts in modern Node.js projects ## Root Cause Modern Node.js (>= 16) treats `.js` files differently depending on the nearest `package.json`: - If `"type": "module"` → `.js` files are ES modules - If no `"type"` or `"type": "commonjs"` → `.js` files are CommonJS Our hook uses `require()` (CommonJS), so in projects with `"type": "module"`, it would fail with: ``` Error [ERR_REQUIRE_ESM]: require() of ES Module not supported ``` ## Solution Implemented ### 1. Changed Hook Extension **Before**: `.claude/hooks/check-work-session.js` **After**: `.claude/hooks/check-work-session.cjs` The `.cjs` extension explicitly marks the file as CommonJS, regardless of the project's `package.json` settings. ### 2. Updated CLI Installation Modified `cli/src/commands/hooks.ts`: - ✅ Line 29: Hook path detection → `.cjs` - ✅ Line 144: Status command → `.cjs` - ✅ Line 338: Hook creation → `.cjs` - ✅ Line 365: Settings configuration → `.cjs` - ✅ Line 501: Documentation → `.cjs` ### 3. Rebuilt CLI ```bash npm --prefix cli run build ``` All changes compiled to `cli/dist/commands/hooks.js` with `.cjs` extension. ## How It Works Now ### Installation Process 1. **User runs**: `eurekaclaude hooks install` 2. **CLI creates**: `.claude/hooks/check-work-session.cjs` in user's project 3. **CLI configures**: `.claude/settings.local.json` with absolute path 4. **Hook works**: Regardless of project's module system configuration ### Why This Approach? **✅ Project-Specific Installation**: - Hook script is copied INTO user's project directory - Not referenced from CLI installation location - Survives CLI updates without breaking - Allows project-specific customization **✅ Portable Across Installation Methods**: - Works with `npm install -g eurekaclaude` - Works with `npx eurekaclaude` - Works with local development (`npm link`) - Works when CLI is updated **✅ Module System Compatibility**: - `.cjs` extension works in all projects - No conflicts with `"type": "module"` - No runtime errors with `require()` ## Testing Results ### Before Fix ```bash $ echo '{"tool_name":"Write","tool_input":{"file_path":"test.txt"},"cwd":"'$(pwd)'"}' | node .claude/hooks/check-work-session.js # Error: Unexpected end of JSON input (shell escaping issues) # Module system conflicts in some projects ``` ### After Fix ```bash $ cat /tmp/hook-test-input.json | node .claude/hooks/check-work-session.cjs { "hookSpecificOutput": { "hookEventName": "PreToolUse", "permissionDecision": "ask", "permissionDecisionReason": "🤖 SYSTEM: Automatic Eureka Tasks Workflow Required..." }, "suppressOutput": false, "systemMessage": "⚠️ 作業セッションがありません。" } # ✅ Works perfectly! ``` ## Installation for End Users ### Global Installation (When Published) ```bash # Install CLI globally npm install -g eurekaclaude # Install hook in any project cd your-project eurekaclaude hooks install ``` ### NPX Usage (No Installation) ```bash # Install hook without installing CLI cd your-project npx eurekaclaude hooks install ``` ### Local Development ```bash # Clone and build git clone https://github.com/eurekalabo/eurekaclaude.git cd eurekaclaude/mcp-server npm install && npm run build cd cli && npm install && npm run build # Link globally npm link # Install hook cd your-project eurekaclaude hooks install ``` ## Verification Steps ### 1. Check CLI Compilation ```bash $ grep "check-work-session" cli/dist/commands/hooks.js | head -3 const hookPath = join(workspace, '.claude', 'hooks', 'check-work-session.cjs'); ... ``` ✅ All references use `.cjs` ### 2. Verify Hook Creation ```bash $ eurekaclaude hooks install # Creates: .claude/hooks/check-work-session.cjs # Configures: .claude/settings.local.json # Updates: .gitignore ``` ✅ Hook installed with correct extension ### 3. Test Hook Execution ```bash $ eurekaclaude hooks status ✅ Hook script: Installed /path/to/project/.claude/hooks/check-work-session.cjs ✅ Hook configuration: Active ⚠️ Active session: No ``` ✅ Hook detects missing session correctly ### 4. Test Module System Compatibility Works in projects with: - ✅ `"type": "module"` in package.json - ✅ `"type": "commonjs"` in package.json - ✅ No `"type"` field (default) - ✅ No package.json at all ## Documentation Created 1. **CLI Installation Guide**: `cli/INSTALLATION.md` - Installation methods - Hook modes - Troubleshooting - Directory structure - FAQ 2. **Hook README**: Created by CLI at `.claude/hooks/README.md` - How it works - Required workflow - Benefits - Troubleshooting - Management commands ## Breaking Changes ### For Existing Installations Users with the old `.js` hook need to: ```bash # Re-install with updated CLI eurekaclaude hooks install --force ``` This will: 1. Replace `.js` with `.cjs` 2. Update configuration 3. Preserve custom modifications (if you backup first) ### Migration Path 1. **Backup custom changes** (if any): ```bash cp .claude/hooks/check-work-session.js .claude/hooks/check-work-session.js.backup ``` 2. **Reinstall with updated CLI**: ```bash npm update -g eurekaclaude # or npx with latest version eurekaclaude hooks install --force ``` 3. **Restore custom changes** (if needed): ```bash # Apply your customizations to the new .cjs file ``` ## Benefits of This Fix 1. **Universal Compatibility**: Works in all Node.js projects regardless of module system 2. **Predictable Behavior**: `.cjs` extension removes ambiguity 3. **Future-Proof**: No breaking changes as Node.js evolves 4. **Easy Installation**: Simple CLI command for all users 5. **Portable**: Same process for global, npx, and local installations 6. **Maintainable**: Hook script in project directory, easy to customize ## Files Modified ### Source Files - ✅ `cli/src/commands/hooks.ts` (6 locations updated) ### Compiled Files - ✅ `cli/dist/commands/hooks.js` (automatically via build) ### Documentation - ✅ `cli/INSTALLATION.md` (new) - ✅ `HOOK_FIX_SUMMARY.md` (this file) ### Current Project (for testing) - ✅ `.claude/hooks/check-work-session.cjs` (renamed from .js) - ✅ `.claude/settings.local.json` (updated path) ## Next Steps ### For Package Publishing 1. **Update package version**: ```bash cd cli npm version patch # or minor/major ``` 2. **Publish to npm**: ```bash npm publish ``` 3. **Announce breaking change**: - Notify existing users to reinstall hooks - Document migration in CHANGELOG - Update README with new installation instructions ### For Documentation 1. ✅ Created `cli/INSTALLATION.md` 2. ✅ Updated inline hook README 3. ⏳ Update main README.md with new installation instructions 4. ⏳ Create CHANGELOG entry ### For Testing 1. ✅ Test hook creation with CLI 2. ✅ Test hook execution 3. ⏳ Test in project with `"type": "module"` 4. ⏳ Test in project without package.json 5. ⏳ Test npx installation 6. ⏳ Test global installation ## Conclusion The hook installation is now robust and compatible with all Node.js project configurations. Users can install via: - `npm install -g eurekaclaude && eurekaclaude hooks install` - `npx eurekaclaude hooks install` - Local development with `npm link` The `.cjs` extension ensures the hook works universally, and the project-specific installation ensures portability across CLI updates.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Eureka-Labo/eurekalabo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server