mirror of
https://github.com/lukaszraczylo/claude-mnemonic.git
synced 2026-10-13 04:59:05 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e07d4174de | ||
|
|
e0218c2bd4 |
@@ -94,8 +94,18 @@ func handleUserPrompt(ctx *hooks.HookContext, input *Input) (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
sessionID := int64(result["sessionDbId"].(float64))
|
||||
promptNumber := int(result["promptNumber"].(float64))
|
||||
// Safely extract session ID and prompt number with type checking
|
||||
sessionDbIdRaw, ok := result["sessionDbId"].(float64)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("invalid or missing sessionDbId in response")
|
||||
}
|
||||
sessionID := int64(sessionDbIdRaw)
|
||||
|
||||
promptNumberRaw, ok := result["promptNumber"].(float64)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("invalid or missing promptNumber in response")
|
||||
}
|
||||
promptNumber := int(promptNumberRaw)
|
||||
|
||||
fmt.Fprintf(os.Stderr, "[user-prompt] Session %d, prompt #%d\n", sessionID, promptNumber)
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ package gorm
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@@ -67,10 +68,12 @@ func (s *SessionStore) CreateSDKSession(ctx context.Context, claudeSessionID, pr
|
||||
if userPrompt != "" {
|
||||
updates["user_prompt"] = userPrompt
|
||||
}
|
||||
s.db.WithContext(ctx).
|
||||
if err := s.db.WithContext(ctx).
|
||||
Model(&SDKSession{}).
|
||||
Where("claude_session_id = ?", claudeSessionID).
|
||||
Updates(updates)
|
||||
Updates(updates).Error; err != nil {
|
||||
return 0, fmt.Errorf("failed to update session: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch existing session
|
||||
|
||||
@@ -164,7 +164,7 @@ func (s *Server) handleToolsList(req *Request) *Response {
|
||||
tools := []Tool{
|
||||
{
|
||||
Name: "search",
|
||||
Description: "Unified search across all memory types (observations, sessions, and user prompts) using vector-first semantic search (ChromaDB).",
|
||||
Description: "Unified search across all memory types (observations, sessions, and user prompts) using vector-first semantic search (sqlite-vec).",
|
||||
InputSchema: map[string]any{
|
||||
"type": "object",
|
||||
"properties": map[string]any{
|
||||
@@ -599,7 +599,8 @@ func (s *Server) handleFindRelatedObservations(ctx context.Context, args json.Ra
|
||||
return "", fmt.Errorf("id is required")
|
||||
}
|
||||
|
||||
if params.MinConfidence == 0 {
|
||||
// Use -1 as sentinel for "not provided" since 0.0 is a valid threshold
|
||||
if params.MinConfidence < 0 {
|
||||
params.MinConfidence = 0.5
|
||||
}
|
||||
|
||||
|
||||
@@ -774,7 +774,7 @@ func (s *Service) handleSearchByPrompt(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// Try vector search first if available
|
||||
if s.vectorClient != nil && s.vectorClient.IsConnected() {
|
||||
where := sqlitevec.BuildWhereFilter(sqlitevec.DocTypeObservation, "")
|
||||
where := sqlitevec.BuildWhereFilter(sqlitevec.DocTypeObservation, project)
|
||||
|
||||
// Search with each expanded query and merge results
|
||||
allVectorResults := make([]sqlitevec.QueryResult, 0)
|
||||
|
||||
+9
-9
@@ -13,7 +13,7 @@
|
||||
{
|
||||
"name": "claude-mnemonic",
|
||||
"description": "Persistent memory system for Claude Code - Go implementation with SQLite and ChromaDB vector search",
|
||||
"version": "0.10.5",
|
||||
"version": "0.11.1",
|
||||
"author": {
|
||||
"name": "lukaszraczylo",
|
||||
"url": "https://github.com/lukaszraczylo"
|
||||
@@ -23,25 +23,25 @@
|
||||
"license": "MIT",
|
||||
"homepage": "https://github.com/lukaszraczylo/claude-mnemonic",
|
||||
"releases": {
|
||||
"latest": "0.10.5",
|
||||
"latest": "0.11.1",
|
||||
"versions": {
|
||||
"0.10.5": {
|
||||
"0.11.1": {
|
||||
"releaseDate": "2026-01-07",
|
||||
"downloads": {
|
||||
"darwin-arm64": {
|
||||
"url": "https://github.com/lukaszraczylo/claude-mnemonic/releases/download/v0.10.5/claude-mnemonic_0.10.5_darwin_arm64.tar.gz",
|
||||
"url": "https://github.com/lukaszraczylo/claude-mnemonic/releases/download/v0.11.1/claude-mnemonic_0.11.1_darwin_arm64.tar.gz",
|
||||
"format": "tar.gz",
|
||||
"sha256": "2b175b0fb79b46f71bcd86d2a691c42942116833f233be03a042d586250c38dc"
|
||||
"sha256": "b250152cd2f45f4971f7c1ebbe9c65830cbcf5e05e8fbed5e43f4d9bdc2dcbc3"
|
||||
},
|
||||
"linux-amd64": {
|
||||
"url": "https://github.com/lukaszraczylo/claude-mnemonic/releases/download/v0.10.5/claude-mnemonic_0.10.5_linux_amd64.tar.gz",
|
||||
"url": "https://github.com/lukaszraczylo/claude-mnemonic/releases/download/v0.11.1/claude-mnemonic_0.11.1_linux_amd64.tar.gz",
|
||||
"format": "tar.gz",
|
||||
"sha256": "c3dfd0459ae4ebed2fac0a64e353df53133417204e9c03a5f3ebf6ec8ac7f1d9"
|
||||
"sha256": "e13b16b6e7c2881655d764e646489c22919a9c13aba82afedaefd8729c1dd4bb"
|
||||
},
|
||||
"windows-amd64": {
|
||||
"url": "https://github.com/lukaszraczylo/claude-mnemonic/releases/download/v0.10.5/claude-mnemonic_0.10.5_windows_amd64.zip",
|
||||
"url": "https://github.com/lukaszraczylo/claude-mnemonic/releases/download/v0.11.1/claude-mnemonic_0.11.1_windows_amd64.zip",
|
||||
"format": "zip",
|
||||
"sha256": "a9d6418da71749611144618ddd4e61769931759731021b1f97c1fd57241b374e"
|
||||
"sha256": "23529ada50c98167cc2da55d880ae5b16c7cce326ada516e110643ee2274ae44"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -251,8 +251,8 @@ func POST(port int, path string, body interface{}) (map[string]interface{}, erro
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||
// Not all endpoints return JSON
|
||||
return nil, nil
|
||||
// Not all endpoints return JSON body - return empty map for success with no body
|
||||
return map[string]interface{}{}, nil
|
||||
}
|
||||
|
||||
return result, nil
|
||||
|
||||
Reference in New Issue
Block a user