eaba21329c
* refactor: Clean up hook-response and new-hook files - Removed 'PreCompact' hook type and associated logic from hook-response.ts for improved type safety. - Deleted extensive architecture comments in new-hook.ts to streamline code readability. - Simplified debug logging in new-hook.ts to reduce verbosity. - Enhanced ensureWorkerRunning function in worker-utils.ts with a final health check before throwing errors. - Added a new documentation file outlining the hooks cleanup process and future improvements. * Refactor cleanup and user message hooks - Updated cleanup-hook.js to improve error handling and remove unnecessary input checks. - Simplified user-message-hook.js by removing time-sensitive announcements and streamlining output. - Enhanced logging functionality in both hooks for better debugging and clarity. * Refactor error handling in hooks to use centralized error handler - Introduced `handleWorkerError` function in `src/shared/hook-error-handler.ts` to manage worker-related errors. - Updated `context-hook.ts`, `new-hook.ts`, `save-hook.ts`, and `summary-hook.ts` to utilize the new error handler, simplifying error management and improving code readability. - Removed repetitive error handling logic from individual hooks, ensuring consistent user-friendly messages for connection issues. * Refactor user-message and summary hooks to utilize shared transcript parser; introduce hook exit codes - Moved user message extraction logic to a new shared module `transcript-parser.ts` for better code reuse. - Updated `summary-hook.ts` to use the new `extractLastMessage` function for retrieving user and assistant messages. - Replaced direct exit code usage in `user-message-hook.ts` with constants from `hook-constants.ts` for improved readability and maintainability. - Added `HOOK_EXIT_CODES` to `hook-constants.ts` to standardize exit codes across hooks. * Refactor hook input interfaces to enforce required fields - Updated `SessionStartInput`, `UserPromptSubmitInput`, `PostToolUseInput`, and `StopInput` interfaces to require `session_id`, `transcript_path`, and `cwd` fields, ensuring better type safety and clarity in hook inputs. - Removed optional index signatures from these interfaces to prevent unintended properties and improve code maintainability. - Adjusted related hook implementations to align with the new interface definitions. * Refactor save-hook to remove tool skipping logic; enhance summary-hook to handle spinner stopping with error logging; update SessionRoutes to load skip tools from settings; add CLAUDE_MEM_SKIP_TOOLS to SettingsDefaultsManager for configurable tool exclusion. * Document CLAUDE_MEM_SKIP_TOOLS setting in public docs Added documentation for the new CLAUDE_MEM_SKIP_TOOLS configuration setting in response to PR review feedback. Users can now discover and customize which tools are excluded from observations. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
/**
|
||
* User Message Hook - SessionStart
|
||
* Displays context information to the user via stderr
|
||
*
|
||
* This hook runs in parallel with context-hook to show users what context
|
||
* has been loaded into their session. Uses stderr as the communication channel
|
||
* since it's currently the only way to display messages in Claude Code UI.
|
||
*/
|
||
import { basename } from "path";
|
||
import { ensureWorkerRunning, getWorkerPort } from "../shared/worker-utils.js";
|
||
import { HOOK_EXIT_CODES } from "../shared/hook-constants.js";
|
||
|
||
try {
|
||
// Ensure worker is running
|
||
await ensureWorkerRunning();
|
||
|
||
const port = getWorkerPort();
|
||
const project = basename(process.cwd());
|
||
|
||
// Fetch formatted context directly from worker API
|
||
const response = await fetch(
|
||
`http://127.0.0.1:${port}/api/context/inject?project=${encodeURIComponent(project)}&colors=true`,
|
||
{ method: 'GET', signal: AbortSignal.timeout(5000) }
|
||
);
|
||
|
||
if (!response.ok) {
|
||
throw new Error(`Worker error ${response.status}`);
|
||
}
|
||
|
||
const output = await response.text();
|
||
|
||
console.error(
|
||
"\n\n📝 Claude-Mem Context Loaded\n" +
|
||
" ℹ️ Note: This appears as stderr but is informational only\n\n" +
|
||
output +
|
||
"\n\n💡 New! Wrap all or part of any message with <private> ... </private> to prevent storing sensitive information in your observation history.\n" +
|
||
"\n💬 Community https://discord.gg/J4wttp9vDu" +
|
||
`\n📺 Watch live in browser http://localhost:${port}/\n`
|
||
);
|
||
|
||
} catch (error) {
|
||
// Context not available yet - likely first run or worker starting up
|
||
console.error(`
|
||
---
|
||
🎉 Note: This appears under Plugin Hook Error, but it's not an error. That's the only option for
|
||
user messages in Claude Code UI until a better method is provided.
|
||
---
|
||
|
||
⚠️ Claude-Mem: First-Time Setup
|
||
|
||
Dependencies are installing in the background. This only happens once.
|
||
|
||
💡 TIPS:
|
||
• Memories will start generating while you work
|
||
• Use /init to write or update your CLAUDE.md for better project context
|
||
• Try /clear after one session to see what context looks like
|
||
|
||
Thank you for installing Claude-Mem!
|
||
|
||
This message was not added to your startup context, so you can continue working as normal.
|
||
`);
|
||
}
|
||
|
||
process.exit(HOOK_EXIT_CODES.USER_MESSAGE_ONLY); |