fix(mcp): open Kon database read-only
The kon-mcp stdio server is documented as "read-only, no auth, local-only" but until now opened the SQLite store via `kon_storage::init`, which returns a writable pool and runs migrations. Read-only-ness was enforced only by the exposed tool surface (list_transcripts, get_transcript, search_transcripts, list_tasks); a future bug or a malformed dispatch could escape into a write against the user's primary database. Add `kon_storage::init_readonly` that opens with `SqliteConnectOptions ::read_only(true)` and `create_if_missing(false)`, no migrations. The constraint is now structural — SQLite rejects writes at the connection level regardless of which handler runs. - New `init_readonly(path)` in crates/storage/src/database.rs. - Re-exported from kon_storage. - crates/mcp/src/main.rs switched over and updated startup banner. - Two tests: writes fail on the read-only pool, reads succeed; opening a non-existent DB returns an error instead of silently creating one. https://claude.ai/code/session_0189xUb6ie6t9qHkzatGZ9Rb
This commit is contained in:
@@ -10,7 +10,7 @@ pub use database::{
|
||||
add_profile_term, complete_subtask_and_check_parent, complete_task, count_transcripts,
|
||||
create_profile, delete_implementation_rule, delete_profile, delete_profile_term, delete_task,
|
||||
delete_transcript, get_implementation_rule, get_profile, get_setting, get_task_by_id,
|
||||
get_transcript, init, insert_implementation_rule, insert_subtask, insert_task,
|
||||
get_transcript, init, init_readonly, insert_implementation_rule, insert_subtask, insert_task,
|
||||
insert_transcript, list_feedback_examples, list_implementation_rules, list_profile_terms,
|
||||
list_profiles, list_recent_completions, list_recent_errors, list_subtasks, list_tasks,
|
||||
list_transcripts, list_transcripts_paged, log_error, mark_implementation_rule_fired,
|
||||
|
||||
Reference in New Issue
Block a user