Skip to content
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
588e41e
feat(convDatabase): add sqlalchemy and alembic
clementb49 Feb 15, 2026
2b59aa7
feat(convDatabase): implement a first version of the conversation dat…
clementb49 Feb 15, 2026
6387ac4
chore: ignore claude code settings
clementb49 Feb 15, 2026
12c19c1
refactor(convDatabase): optimize subsequent save query
clementb49 Feb 15, 2026
d8c4e82
feat(convDatabase): add settings and private mode
clementb49 Feb 15, 2026
6dbdc7e
refactor(convDatabase): manage database singleton inside wx app singl…
clementb49 Feb 15, 2026
2837b76
refactor(convDatabase): optimize database manager code
clementb49 Feb 15, 2026
7416c7c
fix(convDatabase): code review comment
clementb49 Feb 15, 2026
c9a5144
fix(convDatabase): use correct method name
clementb49 Feb 16, 2026
4fbfd0e
fix(convDatabase): disable btn when no conversation history is selected
clementb49 Feb 16, 2026
908f26e
Merge remote-tracking branch 'origin/master' into convDatabase
clementb49 Feb 17, 2026
7474845
fix(build_exe): add missing package for sqlalchemy and alembic
clementb49 Feb 17, 2026
ebe5538
feat: move alembic version in resource dir to simplify fhrozen version
clementb49 Feb 21, 2026
f17512c
fix(frozenAPP): move alembic dir in resource
clementb49 Feb 21, 2026
35eb5d5
style: fix docstring
clementb49 Feb 21, 2026
87d0795
fix: address review findings across database, GUI, and test layers
clementb49 Feb 21, 2026
6b0d02f
Merge remote-tracking branch 'origin/master' into convDatabase
clementb49 Feb 21, 2026
9a1f3f9
feat(database): add cleanup_orphan_attachments to reclaim orphaned blobs
clementb49 Feb 21, 2026
ca85b9b
test(conversation): reduce setup duplication across database and conv…
clementb49 Feb 21, 2026
e1be4a3
fix: save draft prompt after model and account selection
clementb49 Feb 21, 2026
cdc3d6b
chore: remove claude file
clementb49 Feb 21, 2026
92d4ace
Merge remote-tracking branch 'origin/master' into convDatabase
clementb49 Feb 22, 2026
e66f1bc
fix: flush the draft before closing tab
clementb49 Feb 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"permissions": {
"allow": [
"Bash(uv run:*)"
]
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if .claude/settings.local.json is already covered by .gitignore

# Check .gitignore for matching patterns
echo "=== Checking .gitignore for matches ==="
grep -rn "settings.local\|\.local\.json\|\.claude\|^\.claude/" .gitignore 2>/dev/null || echo "No matching gitignore entry found"

# Check if .claude directory has any gitignore entries
echo ""
echo "=== Checking if .claude/.gitignore exists ==="
if [ -f .claude/.gitignore ]; then
  cat .claude/.gitignore
else
  echo ".claude/.gitignore does not exist"
fi

# List all .gitignore files in the repo
echo ""
echo "=== All .gitignore files in repo ==="
find . -name ".gitignore" -type f

# Check if .claude/settings.local.json exists in the repo
echo ""
echo "=== Check if .claude/settings.local.json exists ==="
if [ -f .claude/settings.local.json ]; then
  echo "File exists"
  cat .claude/settings.local.json
else
  echo "File does not exist"
fi

# Check for other .local files to understand the pattern
echo ""
echo "=== Other .local files in repo ==="
find . -name "*.local.json" -o -name "*.local.*" | head -20

Repository: SigmaNight/basiliskLLM

Length of output: 473


Accidental commit of a local developer config — should be gitignored.

.claude/settings.local.json is a machine-local Claude AI permissions override. The .local suffix follows the standard convention for non-shared configs (analogous to .env.local). Committing it adds noise to version control and may cause conflicts for other contributors with different local settings.

Add it to .gitignore and remove it from the PR:

# .gitignore
+.claude/settings.local.json
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.claude/settings.local.json around lines 1 - 7, The committed machine-local
config .claude/settings.local.json should be ignored and removed from the PR:
add a .claude/settings.local.json entry to your repository .gitignore (or add
the entire .claude/ pattern) and stop tracking the file by removing it from Git
index (e.g., git rm --cached .claude/settings.local.json) then commit the
.gitignore update and the removal so the file is not included in history going
forward; ensure you do not delete the local file from disk so your local
settings remain.

4 changes: 4 additions & 0 deletions basilisk/config/main_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ class ConversationSettings(BaseModel):
shift_enter_mode: bool = Field(default=False)
use_accessible_output: bool = Field(default=True)
focus_history_after_send: bool = Field(default=False)
auto_save_to_db: bool = Field(default=True)
auto_save_draft: bool = Field(default=True)
reopen_last_conversation: bool = Field(default=False)
last_active_conversation_id: int | None = Field(default=None)


class ImagesSettings(BaseModel):
Expand Down
1 change: 1 addition & 0 deletions basilisk/conversation/attached_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ class AttachmentFile(BaseModel):
description: str | None = None
size: int | None = None
mime_type: str | None = None
db_id: int | None = Field(default=None, exclude=True)

@field_serializer("location", mode="wrap")
@classmethod
Expand Down
15 changes: 15 additions & 0 deletions basilisk/conversation/conversation_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ class SystemMessage(BaseMessage):
"""Represents a system message in a conversation. The system message is used to provide instructions or context to the assistant."""

role: MessageRoleEnum = Field(default=MessageRoleEnum.SYSTEM)
db_id: int | None = Field(default=None, exclude=True)

@field_validator("role", mode="after")
@classmethod
Expand Down Expand Up @@ -117,6 +118,19 @@ def __hash__(self):
"""
return hash((self.role, self.content))

def __eq__(self, other: object) -> bool:
"""Compare system messages by role and content, ignoring db_id.

Args:
other: The object to compare against.

Returns:
True if role and content match, False otherwise.
"""
if not isinstance(other, SystemMessage):
return NotImplemented
return self.role == other.role and self.content == other.content


class MessageBlock(BaseModel):
"""Represents a block of messages in a conversation. The block may contain a user message, an AI model request, and an AI model response."""
Expand All @@ -131,6 +145,7 @@ class MessageBlock(BaseModel):
stream: bool = Field(default=False)
created_at: datetime = Field(default_factory=datetime.now)
updated_at: datetime = Field(default_factory=datetime.now)
db_id: int | None = Field(default=None, exclude=True)

@field_validator("response", mode="after")
@classmethod
Expand Down
5 changes: 5 additions & 0 deletions basilisk/conversation/database/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"""Database package for conversation persistence."""

from .manager import ConversationDatabase

__all__ = ["ConversationDatabase"]
Loading