Compare commits

..
10 Commits
Author SHA1 Message Date
hh 58338f132a feat(hands,jobs): журнал прогонов дописывается, шторм новых видов глушится громко 2026-09-21 00:09:04 +00:00
hh f3e4d51e4e fix(hands,jobs): суточная сводка уходит и в чистые сутки, норма всплеска замирает на молодости беды 2026-09-21 00:09:04 +00:00
hh a0fe09811d feat(hands,jobs): длящаяся беда не пропадает - суточная сводка и всплеск против своей нормы 2026-09-21 00:09:04 +00:00
hh b6c5050d69 fix(hands): хвост логов 2000 строк по замеру, образец чистит общий redact 2026-09-21 00:09:04 +00:00
hh dac34e505b fix(vault): состояние джобов лежит в доме агента, а не в корне vault 2026-09-21 00:09:04 +00:00
hh 9737167c76 feat(jobs,hands): сканер логов флота будит только новым и несёт свою область 2026-09-21 00:09:04 +00:00
hh 4592623ff5 refactor(hands): листание komodo становится публичным - им ходят и джобы 2026-09-21 00:09:04 +00:00
hh 04fc4dc177 feat(hands): выдача komodo несёт свою область - полные списки, отрезок журнала и фильтры 2026-09-21 00:09:04 +00:00
hh 27c4e68b6e feat(memory): the morning seed carries the process start and the code freshness 2026-09-21 00:09:04 +00:00
hh 9c3262cba8 fix(memory): mark spawn briefs in the reply log source field 2026-09-14 17:12:28 +00:00
2 changed files with 13 additions and 2 deletions

No files matched your search

+5 -1
View File
@@ -400,7 +400,8 @@ class ReplyLog:
if said.agent in self.mute: if said.agent in self.mute:
return return
text = said.text text = said.text
if text.startswith("[сид:"): seeded = text.startswith("[сид:")
if seeded:
# спавн ветки с текстом: строка сида едет над самим сообщением # спавн ветки с текстом: строка сида едет над самим сообщением
text = text.split("\n\n", 1)[1] if "\n\n" in text else "" text = text.split("\n\n", 1)[1] if "\n\n" in text else ""
flat = " ⏎ ".join(ln.strip() for ln in text.strip().splitlines() if ln.strip()) flat = " ⏎ ".join(ln.strip() for ln in text.strip().splitlines() if ln.strip())
@@ -412,6 +413,9 @@ class ReplyLog:
where = KINDS.get(said.kind, said.kind) where = KINDS.get(said.kind, said.kind)
if said.kind != "master" and said.title: if said.kind != "master" and said.title:
where = f"{where} «{said.title}»" where = f"{where} «{said.title}»"
if seeded:
# не человек сказал, а механизм спавна: видно по источнику, не по тексту
where = f"{where} (бриф)"
path = self.dir / f"{local:%Y-%m}.md" path = self.dir / f"{local:%Y-%m}.md"
self.dir.mkdir(parents=True, exist_ok=True) self.dir.mkdir(parents=True, exist_ok=True)
if not path.exists(): if not path.exists():
+8 -1
View File
@@ -5,6 +5,7 @@ from beaver_gateway.conversations.texts import UserSaid
from beaver_gateway.conversations.envelope import RecallContext from beaver_gateway.conversations.envelope import RecallContext
from beaver_agent.hands.calendars import Calendars, Event, Feed from beaver_agent.hands.calendars import Calendars, Event, Feed
from beaver_agent.memory.curator import new_replies
from beaver_agent.memory.recall import ( from beaver_agent.memory.recall import (
LABEL, LABEL,
Recall, Recall,
@@ -171,8 +172,14 @@ def test_reply_log_appends_one_line_per_message_and_strips_seed(tmp_path: Path)
assert text.startswith("# реплики Бобра, 2026-09\n") assert text.startswith("# реплики Бобра, 2026-09\n")
assert text.endswith( assert text.endswith(
"- 2026-09-01 14:04 · мастер · привет ⏎ ты меня любишь\n" "- 2026-09-01 14:04 · мастер · привет ⏎ ты меня любишь\n"
"- 2026-09-01 14:04 · ветка «крипто-карта» · сравни Trustee и RedotPay\n" "- 2026-09-01 14:04 · ветка «крипто-карта» (бриф) · "
"сравни Trustee и RedotPay\n"
) )
since = datetime(2026, 9, 1, 0, 0, tzinfo=UTC)
# пометка брифа не мешает куратору разбирать строку
assert new_replies(tmp_path / "реплики", since, "Europe/Warsaw") == [
line for line in text.splitlines() if line.startswith("- ")
]
assert date.fromisoformat("2026-09-01") # tz shift stays inside the month here assert date.fromisoformat("2026-09-01") # tz shift stays inside the month here