refactor(config): prompts per kind and frontend agents as parameters

This commit is contained in:
hh
2026-08-28 16:36:45 +02:00
parent 03ed732f7a
commit 7af833a4d7
+20 -35
View File
@@ -3,7 +3,7 @@ from datetime import date, timedelta
from pathlib import Path
from beaver_gateway.agents.base import BaseAgent, ExposedMcp
from beaver_gateway.agents.claude import ClaudeAgent, ClaudeOptions
from beaver_gateway.agents.claude import ClaudeAgent, ClaudeOptions, Prompts
from beaver_gateway.agents.raycast import RaycastAgent, RemoteTool, UserPreferences
from beaver_gateway.core.conversations import ConversationTexts, SeedContext
from beaver_gateway.core.prompt import assemble
@@ -51,39 +51,24 @@ def overlay(tag: str, name: str) -> tuple[str, Path]:
# §4.2: сборки промптов. Окружение kind'а - константная гранула, экземплярное
# (файл, топик) едет первым сообщением. Диспетчер/дистиллятор/триаж - M1b+.
DEEP_PROMPT = (
*VOICE,
PROFILE,
CORRECTIONS,
VAULT_MAP,
environment("глубокий"),
overlay("deep", "глубокий"),
# (файл, топик) едет первым сообщением. Какие kind агент обслуживает, следует
# из того, какие промпты у него заданы (§3.12).
_BASE = (*VOICE, PROFILE, CORRECTIONS, VAULT_MAP)
_DISTILL = (*_BASE, environment("джоб"), overlay("distiller", "дистиллятор"))
DEEP_PROMPTS = Prompts(
deep=(*_BASE, environment("глубокий"), overlay("deep", "глубокий"))
)
# Диспетчер: тот же голос, окружение по kind, оверлей по роли.
# Форк ветки (слив) думает как дистиллятор в окружении джоба.
DISPATCHER_PROMPTS = Prompts(
master=(*_BASE, environment("мастер"), overlay("dispatcher", "диспетчер")),
branch=(*_BASE, environment("ветка"), overlay("branch", "ветка")),
fork=_DISTILL,
job=_DISTILL,
)
QUICK_PROMPT = assemble((*VOICE, PROFILE, overlay("quick", "быстрый")))
# Диспетчер: тот же голос, окружение по kind (§3.12), оверлей по роли.
# Форк ветки (слив) думает как дистиллятор в окружении джоба.
_DISPATCHER_BASE = (*VOICE, PROFILE, CORRECTIONS, VAULT_MAP)
DISPATCHER_PROMPTS = {
"master": (
*_DISPATCHER_BASE,
environment("мастер"),
overlay("dispatcher", "диспетчер"),
),
"branch": (*_DISPATCHER_BASE, environment("ветка"), overlay("branch", "ветка")),
"fork": (
*_DISPATCHER_BASE,
environment("джоб"),
overlay("distiller", "дистиллятор"),
),
"job": (
*_DISPATCHER_BASE,
environment("джоб"),
overlay("distiller", "дистиллятор"),
),
}
# §4.3: наборы скиллов = папки = плагины. Глубокие грузят общие + vault.
DEEP_SKILLS = (SKILLS / "общие", SKILLS / "vault")
DISPATCHER_SKILLS = (SKILLS / "общие", SKILLS / "диспетчер", SKILLS / "vault")
@@ -155,8 +140,7 @@ def dispatcher(name: str, model: str, effort: str | None = None) -> ClaudeAgent:
name=name,
model=model,
cwd=VAULT,
prompt_sources=DISPATCHER_PROMPTS["master"],
prompt_sources_by_kind=DISPATCHER_PROMPTS,
prompts=DISPATCHER_PROMPTS,
skill_sets=DISPATCHER_SKILLS,
gateway_tools=("read_conversation", "spawn", "say", "schedule"),
options=ClaudeOptions(
@@ -173,7 +157,7 @@ def deep(name: str, model: str, effort: str | None = None) -> ClaudeAgent:
name=name,
model=model,
cwd=VAULT,
prompt_sources=DEEP_PROMPT,
prompts=DEEP_PROMPTS,
skill_sets=DEEP_SKILLS,
options=ClaudeOptions(
effort=effort,
@@ -244,7 +228,8 @@ frontends: list[Frontend] = [
host="0.0.0.0",
port=62994,
public_base_url=_public("/api"),
default_agents={"master": "beaver-dispatcher", "branch": "beaver-dispatcher"},
master_agent="beaver-dispatcher",
branch_agent="beaver-dispatcher",
),
MarkdownFrontend(
host="0.0.0.0",