3cbc041c8b
* feat: Add discovery_tokens for ROI tracking in observations and session summaries - Introduced `discovery_tokens` column in `observations` and `session_summaries` tables to track token costs associated with discovering and creating each observation and summary. - Updated relevant services and hooks to calculate and display ROI metrics based on discovery tokens. - Enhanced context economics reporting to include savings from reusing previous observations. - Implemented migration to ensure the new column is added to existing tables. - Adjusted data models and sync processes to accommodate the new `discovery_tokens` field. * refactor: streamline context hook by removing unused functions and updating terminology - Removed the estimateTokens and getObservations helper functions as they were not utilized. - Updated the legend and output messages to replace "discovery" with "work" for clarity. - Changed the emoji representation for different observation types to better reflect their purpose. - Enhanced output formatting for improved readability and understanding of token usage. * Refactor user-message-hook and context-hook for improved clarity and functionality - Updated user-message-hook.js to enhance error messaging and improve variable naming for clarity. - Modified context-hook.ts to include a new column key section, improved context index instructions, and added emoji icons for observation types. - Adjusted footer messages in context-hook.ts to emphasize token savings and access to past research. - Changed user-message-hook.ts to update the feedback and support message for clarity. * fix: Critical ROI tracking fixes from PR review Addresses critical findings from PR #111 review: 1. **Fixed incorrect discovery token calculation** (src/services/worker/SDKAgent.ts) - Changed from passing cumulative total to per-response delta - Now correctly tracks token cost for each observation/summary - Captures token state before/after response processing - Prevents all observations getting inflated cumulative values 2. **Fixed schema version mismatch** (src/services/sqlite/SessionStore.ts) - Changed ensureDiscoveryTokensColumn() from version 11 to version 7 - Now matches migration007 definition in migrations.ts - Ensures consistent version tracking across migration system These fixes ensure ROI metrics accurately reflect token costs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
63 lines
2.2 KiB
TypeScript
63 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 { execSync } from "child_process";
|
||
import { join } from "path";
|
||
import { homedir } from "os";
|
||
import { existsSync } from "fs";
|
||
import { getWorkerPort } from "../shared/worker-utils.js";
|
||
|
||
// Check if node_modules exists - if not, this is first run
|
||
const pluginDir = join(homedir(), '.claude', 'plugins', 'marketplaces', 'thedotmack');
|
||
const nodeModulesPath = join(pluginDir, 'node_modules');
|
||
|
||
if (!existsSync(nodeModulesPath)) {
|
||
// First-time installation - dependencies not yet installed
|
||
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 have been installed 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(3);
|
||
}
|
||
|
||
try {
|
||
// Cross-platform path to context-hook.js in the installed plugin
|
||
const contextHookPath = join(homedir(), '.claude', 'plugins', 'marketplaces', 'thedotmack', 'plugin', 'scripts', 'context-hook.js');
|
||
const output = execSync(`node "${contextHookPath}" --colors`, {
|
||
encoding: 'utf8'
|
||
});
|
||
|
||
const port = getWorkerPort();
|
||
console.error(
|
||
"\n\n📝 Claude-Mem Context Loaded\n" +
|
||
" ℹ️ Note: This appears as stderr but is informational only\n\n" +
|
||
output +
|
||
"\n\n💬 Feedback & Support\nhttps://github.com/thedotmack/claude-mem/discussions/110\n" +
|
||
`\n📺 Watch live in browser http://localhost:${port}/\n`
|
||
);
|
||
|
||
} catch (error) {
|
||
console.error(`❌ Failed to load context display: ${error}`);
|
||
}
|
||
|
||
process.exit(3); |