mirror of
https://github.com/lukaszraczylo/claude-mnemonic.git
synced 2026-10-16 05:37:50 +00:00
general improvements (#17)
* refactor(hooks): simplify hook execution with shared context - [x] Extract BaseInput struct to eliminate duplicate fields across hooks - [x] Create RunHook handler pattern for session-start and user-prompt - [x] Create RunStatuslineHook for fast statusline rendering without worker startup - [x] Add HookContext struct to pass port, project, CWD, SessionID to handlers - [x] Add db/interface.go with ObservationReader/Writer interfaces - [x] Add comprehensive conflict management tests in sqlite/conflict_test.go - [x] Add vector client tests for Count, ModelVersion, NeedsRebuild, GetStaleVectors - [x] Add FilterByThreshold helper tests for query result filtering - [x] Make handlers_test more robust for network-dependent update checks - [x] Update package versions in UI * Move to GORM + general cleanup * feat(mcp): add observation relations discovery and scoring integration - [x] Add find_related_observations MCP tool for discovering related observations by confidence - [x] Integrate scoring calculator and recalculator into MCP server initialization - [x] Add pattern, relation, and session stores to MCP server dependencies - [x] Register MCP server in Claude Code settings during plugin installation - [x] Update install scripts (bash, PowerShell) to configure MCP server settings - [x] Switch plugin manifest files to template-based versioning (plugin.json.tpl, marketplace.json.tpl) - [x] Update all MCP server tests to pass new dependency parameters
This commit is contained in:
@@ -143,3 +143,38 @@ func RunHook[T any](hookName string, handler HookHandler[T]) {
|
||||
|
||||
WriteResponse(hookName, true)
|
||||
}
|
||||
|
||||
// StatuslineHandler is a function that handles statusline-specific logic.
|
||||
// It receives input and port, returns formatted status string.
|
||||
// No context injection or worker startup - just display.
|
||||
type StatuslineHandler[T any] func(input *T, port int) string
|
||||
|
||||
// RunStatuslineHook executes a statusline hook with minimal overhead.
|
||||
// Unlike RunHook, this:
|
||||
// - Does NOT check CLAUDE_MNEMONIC_INTERNAL (statuslines always run)
|
||||
// - Uses GetWorkerPort() instead of EnsureWorkerRunning() (no startup)
|
||||
// - Prints output directly to stdout (no JSON wrapping)
|
||||
// This keeps statusline fast (<100ms requirement).
|
||||
func RunStatuslineHook[T any](handler StatuslineHandler[T]) {
|
||||
// Read input from stdin
|
||||
inputData, err := io.ReadAll(os.Stdin)
|
||||
if err != nil {
|
||||
// On error, handler receives nil and should return offline status
|
||||
fmt.Println(handler(nil, 0))
|
||||
return
|
||||
}
|
||||
|
||||
// Parse input
|
||||
var input T
|
||||
if err := json.Unmarshal(inputData, &input); err != nil {
|
||||
// On parse error, handler receives nil and should return offline status
|
||||
fmt.Println(handler(nil, 0))
|
||||
return
|
||||
}
|
||||
|
||||
// Get worker port (does NOT start worker)
|
||||
port := GetWorkerPort()
|
||||
|
||||
// Run handler and print result
|
||||
fmt.Println(handler(&input, port))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user