yumoqing d423a03a6d feat(hermes-web-cli): refactor user context, settings, services and sessions management
- Remove deprecated UNKNOWN.egg-info and user_context.py
- Refactor crud_ops, db_tables, and init modules
- Update settings UI and save handlers (appearance, general, security)
- Update services list, remove, and test DSPY files
- Update sessions list DSPY file
- Add multi-user test script
- Update pyproject.toml dependencies
2026-04-25 21:47:46 +08:00

191 lines
8.2 KiB
Python

"""
CRUD operations definitions for hermes-web-cli module.
Follows crud-definition-spec standard.
"""
from typing import Dict, List, Optional
from datetime import datetime
# Services CRUD operations
SERVICES_CRUD = {
"module": "hermes-web-cli",
"table": "services",
"operations": {
"create": {
"name": "create_service_record",
"description": "Create a new service record for the current user",
"parameters": ["user_id", "name", "service_url", "description", "apikey"],
"sql_template": """
INSERT INTO services (id, user_id, name, service_url, description, apikey, status, created_at, updated_at)
VALUES (${id}$, ${user_id}$, ${name}$, ${service_url}$, ${description}$, ${apikey}$, ${status}$, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
""",
"return_fields": ["id"]
},
"read_all": {
"name": "get_all_services_for_user",
"description": "Get all services for the current user",
"parameters": ["user_id"],
"sql_template": """
SELECT id, user_id, name, service_url, description, apikey, status,
created_at, updated_at
FROM services
WHERE user_id = ${user_id}$
ORDER BY created_at DESC
""",
"return_fields": ["id", "user_id", "name", "service_url", "description", "apikey", "status", "created_at", "updated_at"]
},
"read_by_id": {
"name": "get_service_by_id_and_user",
"description": "Get a specific service by ID for the current user",
"parameters": ["service_id", "user_id"],
"sql_template": """
SELECT id, user_id, name, service_url, description, apikey, status,
created_at, updated_at
FROM services
WHERE id = ${service_id}$ AND user_id = ${user_id}$
""",
"return_fields": ["id", "user_id", "name", "service_url", "description", "apikey", "status", "created_at", "updated_at"]
},
"update": {
"name": "update_service_record",
"description": "Update an existing service record",
"parameters": ["service_id", "user_id", "name", "service_url", "description", "apikey", "status"],
"sql_template": """
UPDATE services
SET name = ${name}$,
service_url = ${service_url}$,
description = ${description}$,
apikey = ${apikey}$,
status = ${status}$,
updated_at = CURRENT_TIMESTAMP
WHERE id = ${service_id}$ AND user_id = ${user_id}$
""",
"return_fields": []
},
"delete": {
"name": "delete_service_record",
"description": "Delete a service record for the current user",
"parameters": ["service_id", "user_id"],
"sql_template": """
DELETE FROM services
WHERE id = ${service_id}$ AND user_id = ${user_id}$
""",
"return_fields": []
}
}
}
# Sessions CRUD operations
SESSIONS_CRUD = {
"module": "hermes-web-cli",
"table": "sessions",
"operations": {
"create": {
"name": "create_session_record",
"description": "Create a new session record",
"parameters": ["session_id", "user_id", "service_id", "session_name", "service_name"],
"sql_template": """
INSERT INTO sessions (session_id, user_id, service_id, session_name, service_name, status, created_at, last_active, message_count)
VALUES (${session_id}$, ${user_id}$, ${service_id}$, ${session_name}$, ${service_name}$, 'active', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0)
""",
"return_fields": ["session_id"]
},
"read_active": {
"name": "get_active_sessions_for_user",
"description": "Get all active sessions for the current user",
"parameters": ["user_id"],
"sql_template": """
SELECT session_id, user_id, service_id, session_name, service_name, status,
created_at, last_active, message_count
FROM sessions
WHERE user_id = ${user_id}$ AND status = 'active'
ORDER BY last_active DESC
""",
"return_fields": ["session_id", "user_id", "service_id", "session_name", "service_name", "status", "created_at", "last_active", "message_count"]
},
"read_recent": {
"name": "get_recent_sessions_for_user",
"description": "Get recent sessions (active and archived) for the current user",
"parameters": ["user_id", "limit"],
"sql_template": """
SELECT session_id, user_id, service_id, session_name, service_name, status,
created_at, last_active, message_count
FROM sessions
WHERE user_id = ${user_id}$
ORDER BY last_active DESC
LIMIT ${limit}$
""",
"return_fields": ["session_id", "user_id", "service_id", "session_name", "service_name", "status", "created_at", "last_active", "message_count"]
},
"read_by_id": {
"name": "get_session_by_id_and_user",
"description": "Get a specific session by ID for the current user",
"parameters": ["session_id", "user_id"],
"sql_template": """
SELECT session_id, user_id, service_id, session_name, service_name, status,
created_at, last_active, message_count
FROM sessions
WHERE session_id = ${session_id}$ AND user_id = ${user_id}$
""",
"return_fields": ["session_id", "user_id", "service_id", "session_name", "service_name", "status", "created_at", "last_active", "message_count"]
},
"update_last_active": {
"name": "update_session_last_active",
"description": "Update session last_active timestamp and message count",
"parameters": ["session_id", "user_id", "message_count"],
"sql_template": """
UPDATE sessions
SET last_active = CURRENT_TIMESTAMP,
message_count = ${message_count}$
WHERE session_id = ${session_id}$ AND user_id = ${user_id}$
""",
"return_fields": []
},
"archive": {
"name": "archive_session",
"description": "Archive a session (change status to archived)",
"parameters": ["session_id", "user_id"],
"sql_template": """
UPDATE sessions
SET status = 'archived',
updated_at = CURRENT_TIMESTAMP
WHERE session_id = ${session_id}$ AND user_id = ${user_id}$
""",
"return_fields": []
}
}
}
# Settings CRUD operations
SETTINGS_CRUD = {
"module": "hermes-web-cli",
"table": "settings",
"operations": {
"create_or_update": {
"name": "save_user_settings",
"description": "Create or update user settings",
"parameters": ["user_id", "settings_json"],
"sql_template": """
INSERT INTO settings (user_id, settings_json, created_at, updated_at)
VALUES (${user_id}$, ${settings_json}$, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
ON CONFLICT (user_id)
DO UPDATE SET settings_json = ${settings_json}$, updated_at = CURRENT_TIMESTAMP
""",
"return_fields": []
},
"read": {
"name": "get_user_settings",
"description": "Get user settings by user_id",
"parameters": ["user_id"],
"sql_template": """
SELECT settings_json, created_at, updated_at
FROM settings
WHERE user_id = ${user_id}$
""",
"return_fields": ["settings_json", "created_at", "updated_at"]
}
}
}
# CRUD definitions list
CRUD_DEFINITIONS = [SERVICES_CRUD, SESSIONS_CRUD, SETTINGS_CRUD]