Support multiple allowlisted databases in project research tools
This commit is contained in:
1 parent
9408af5356
commit
9c9d9d70d6
20 files changed
+740
-53
No files matched your search
@@ -19,6 +19,12 @@ snapshot_id = "backup-sha256:4964f277ef5cf7f7f98bf4378971dcb55180bac813d49bcda6d
|
||||
# Explicit allowlist: no account or character tables.
|
||||
tables = ["creature_template", "creature_template_locale", "creature", "quest_template", "quest_template_addon", "smart_scripts", "conditions", "game_event", "game_event_creature", "spell_script_names", "gameobject_template", "gameobject", "creature_equip_template", "item_script_names", "creature_queststarter", "spell_dbc"]
|
||||
|
||||
# Optional additional databases on this same connection; enable explicitly:
|
||||
# [database.additional_databases]
|
||||
# cata_hotfixes = ["*"]
|
||||
# cata_locale = ["*"]
|
||||
# Use individual table names instead of "*" for narrower access.
|
||||
|
||||
[limits]
|
||||
max_rows = 50
|
||||
max_result_bytes = 65536
|
||||
|
||||
@@ -0,0 +1,265 @@
|
||||
# Operator-controlled bindings. The model cannot override these settings.
|
||||
relations_file = "project-relations.vcore.toml"
|
||||
[project]
|
||||
type = "wow"
|
||||
profile = "vcore"
|
||||
|
||||
[source]
|
||||
path = "/srv/viano-bug-analysis/viano-core"
|
||||
url = "https://gitea.viano-software.de/Nico/Viano-Core"
|
||||
commit = "0000000000000000000000000000000000000000"
|
||||
|
||||
[database]
|
||||
host = "127.0.0.1"
|
||||
port = 3306
|
||||
database = "cata_world"
|
||||
user = "buganalysis"
|
||||
password_env = "VIANO_DB_PASSWORD"
|
||||
snapshot_id = "CONFIGURE_ME"
|
||||
# Explicit allowlist: no account or character tables.
|
||||
tables = ["*"]
|
||||
|
||||
# Explicit database scope: no auth, character or locale-reference access.
|
||||
[database.additional_databases]
|
||||
cata_hotfixes = ["*"]
|
||||
cata_locale = ["*"]
|
||||
|
||||
[limits]
|
||||
max_rows = 50
|
||||
max_result_bytes = 65536
|
||||
max_files = 20000
|
||||
max_file_bytes = 2097152
|
||||
max_search_bytes = 134217728
|
||||
max_lines = 80
|
||||
timeout_seconds = 15
|
||||
max_cached_queries = 256
|
||||
|
||||
[enrichment]
|
||||
max_queries = 24
|
||||
max_depth = 3
|
||||
max_relationships = 128
|
||||
|
||||
[[enrichment.texts]]
|
||||
table = "quest_template"
|
||||
id_column = "ID"
|
||||
context_role = "quest_definition"
|
||||
columns = ["LogTitle", "LogDescription", "QuestDescription"]
|
||||
|
||||
[[enrichment.queries]]
|
||||
kind = "source.schema"
|
||||
text = "CREATE TABLE `creature`"
|
||||
path_prefix = "sql/base/"
|
||||
case_sensitive = true
|
||||
offset = 0
|
||||
limit = 1
|
||||
|
||||
[[enrichment.queries]]
|
||||
kind = "source.schema"
|
||||
text = "CREATE TABLE `quest_template`"
|
||||
path_prefix = "sql/base/"
|
||||
case_sensitive = true
|
||||
offset = 0
|
||||
limit = 1
|
||||
|
||||
# Deterministic entity resolution before the first LLM call; no diagnosis.
|
||||
[[enrichment.entities]]
|
||||
entity_type = "creature"
|
||||
table = "creature_template"
|
||||
column = "entry"
|
||||
name_column = "name"
|
||||
columns = ["entry", "name", "subname", "ScriptName", "AIName"]
|
||||
limit = 1
|
||||
|
||||
[[enrichment.entities]]
|
||||
entity_type = "quest"
|
||||
table = "quest_template"
|
||||
column = "ID"
|
||||
name_column = "LogTitle"
|
||||
columns = ["ID", "LogTitle", "LogDescription", "QuestDescription", "StartItem", "RequiredNpcOrGo1", "RequiredNpcOrGo2", "RequiredNpcOrGo3", "RequiredNpcOrGo4", "RequiredItemId1", "RequiredItemId2", "RequiredItemId3", "RequiredItemId4", "RequiredItemId5", "RequiredItemId6", "RequiredSpell"]
|
||||
limit = 1
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "StartItem"
|
||||
relation = "quest_start_item"
|
||||
entity_type = "item"
|
||||
table = "item_script_names"
|
||||
column = "Id"
|
||||
columns = ["Id", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "RequiredItemId1"
|
||||
relation = "quest_required_item"
|
||||
entity_type = "item"
|
||||
table = "item_script_names"
|
||||
column = "Id"
|
||||
columns = ["Id", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "RequiredItemId2"
|
||||
relation = "quest_required_item"
|
||||
entity_type = "item"
|
||||
table = "item_script_names"
|
||||
column = "Id"
|
||||
columns = ["Id", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "ID"
|
||||
relation = "quest_starter_records"
|
||||
table = "creature_queststarter"
|
||||
column = "quest"
|
||||
columns = ["id", "quest"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "creature_queststarter"
|
||||
from_id_column = "quest"
|
||||
from_column = "id"
|
||||
relation = "quest_giver"
|
||||
entity_type = "creature"
|
||||
table = "creature_template"
|
||||
column = "entry"
|
||||
columns = ["entry", "name", "AIName", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "creature_template"
|
||||
from_id_column = "entry"
|
||||
from_column = "entry"
|
||||
when_column = "AIName"
|
||||
when_value = "SmartAI"
|
||||
relation = "creature_smartai_records"
|
||||
table = "smart_scripts"
|
||||
column = "entryorguid"
|
||||
columns = ["entryorguid", "source_type", "id", "link", "event_type", "event_param1", "event_param2", "event_param3", "event_param4", "action_type", "action_param1", "action_param2", "action_param3", "action_param4", "action_param5", "action_param6", "target_type", "target_param1", "target_param2", "target_param3", "comment"]
|
||||
filters = [{column = "source_type", operator = "eq", value = 0}]
|
||||
limit = 10
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "creature_template"
|
||||
from_id_column = "entry"
|
||||
from_column = "ScriptName"
|
||||
relation = "creature_script_binding"
|
||||
kind = "source.symbol"
|
||||
path_prefix = "src/server/scripts/"
|
||||
limit = 5
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "item_script_names"
|
||||
from_id_column = "Id"
|
||||
from_column = "ScriptName"
|
||||
relation = "item_script_binding"
|
||||
kind = "source.symbol"
|
||||
path_prefix = "src/server/scripts/"
|
||||
limit = 5
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "RequiredSpell"
|
||||
relation = "quest_required_spell"
|
||||
entity_type = "spell"
|
||||
table = "spell_script_names"
|
||||
column = "spell_id"
|
||||
columns = ["spell_id", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "spell_script_names"
|
||||
from_id_column = "spell_id"
|
||||
from_column = "ScriptName"
|
||||
relation = "spell_script_binding"
|
||||
kind = "source.symbol"
|
||||
path_prefix = "src/server/scripts/"
|
||||
limit = 5
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "RequiredItemId3"
|
||||
relation = "quest_required_item"
|
||||
entity_type = "item"
|
||||
table = "item_script_names"
|
||||
column = "Id"
|
||||
columns = ["Id", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "RequiredItemId4"
|
||||
relation = "quest_required_item"
|
||||
entity_type = "item"
|
||||
table = "item_script_names"
|
||||
column = "Id"
|
||||
columns = ["Id", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "RequiredItemId5"
|
||||
relation = "quest_required_item"
|
||||
entity_type = "item"
|
||||
table = "item_script_names"
|
||||
column = "Id"
|
||||
columns = ["Id", "ScriptName"]
|
||||
|
||||
[[enrichment.relationships]]
|
||||
from_table = "quest_template"
|
||||
from_id_column = "ID"
|
||||
from_column = "RequiredItemId6"
|
||||
relation = "quest_required_item"
|
||||
entity_type = "item"
|
||||
table = "item_script_names"
|
||||
column = "Id"
|
||||
columns = ["Id", "ScriptName"]
|
||||
|
||||
# Semantic name lookup runs in Case Interpretation, never in the deterministic CaseBuilder.
|
||||
[entity_resolution]
|
||||
enabled = true
|
||||
max_searches = 4
|
||||
max_candidates = 8
|
||||
max_invalid_responses = 3
|
||||
|
||||
[[entity_resolution.catalogs]]
|
||||
id = "creatures"
|
||||
entity_type = "creature"
|
||||
table = "creature_template"
|
||||
id_column = "entry"
|
||||
name_column = "name"
|
||||
columns = ["entry", "name", "subname", "AIName", "ScriptName", "minlevel", "maxlevel", "faction", "unit_flags"]
|
||||
|
||||
[[entity_resolution.catalogs]]
|
||||
id = "localized_creatures"
|
||||
entity_type = "creature"
|
||||
table = "creature_template_locale"
|
||||
id_column = "entry"
|
||||
name_column = "Name"
|
||||
columns = ["entry", "locale", "Name", "Title"]
|
||||
|
||||
# Larger read-only source tool; registration naming is project-specific.
|
||||
[source_analysis]
|
||||
enabled = true
|
||||
context_lines = 8
|
||||
max_searches = 4
|
||||
max_matches = 12
|
||||
max_files = 8
|
||||
max_blocks = 12
|
||||
max_total_lines = 160
|
||||
registration_prefixes = ["AddSC_"]
|
||||
|
||||
# Context-aware source selection. Domain markers belong to this adapter.
|
||||
protocol = 2
|
||||
max_seed_terms = 8
|
||||
max_candidate_matches = 50
|
||||
max_weak_hits = 8
|
||||
code_prefixes = ["src/"]
|
||||
schema_prefixes = ["sql/base/"]
|
||||
historical_prefixes = ["sql/old/", "sql/archive/"]
|
||||
context_fact_names = ["zone_name", "area_name", "world_event_name"]
|
||||
type_markers = {creature = ["NPC", "CREATURE"], quest = ["QUEST"], spell = ["SPELL"], item = ["ITEM"], gameobject = ["GO", "GAMEOBJECT"]}
|
||||
entity_tables = [{table = "creature_template", entity_type = "creature", id_column = "entry", script_columns = ["ScriptName"]}]
|
||||
focus_roles = ["diagnostic_focus", "explicit_quest"]
|
||||
Reference in new issue
Block a user