kolorafa

Untitled

Sep 1st, 2026
23,561
0
16 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.75 KB | None | 0 0
  1. Masz rację: nie powinniśmy próbować utrzymywać jednej fizycznej sesji bez końca. Powinniśmy utrzymywać jeden logiczny projekt, który może przechodzić przez wiele mniejszych sesji i zadań.
  2.  
  3. Mój konkretny wybór rozwiązania:
  4.  
  5. - trwały „Project Ledger” w określonym katalogu,
  6. - automatyczny zapis po każdym turnie,
  7. - osobne segmenty dla zadań,
  8. - kontrolowany checkpoint przed kompresją,
  9. - wstrzyknięcie małej kapsuły stanu przed kolejnym zapytaniem,
  10. - fail-closed: bez poprawnie zapisanego checkpointu nie wolno kompaktować,
  11. - proaktywne przechodzenie do świeżej sesji przy granicy zadania zamiast czekania na awarię kontekstu.
  12.  
  13. Plan zapisałem tutaj:
  14.  
  15. /home/hermit/plans/2026-09-01-hermes-project-ledger/IMPLEMENTATION_PLAN.md
  16.  
  17. Dodatkowe ustalenia techniczne:
  18.  
  19. /home/hermit/plans/2026-09-01-hermes-project-ledger/thinking.md
  20.  
  21. 1. Czy Hermes już ma miejsca do wstrzyknięcia?
  22.  
  23. Tak. W obecnej wersji są cztery przydatne punkty.
  24.  
  25. Po każdym zakończonym turnie:
  26.  
  27. python
  28. sync_turn(...)
  29.  
  30.  
  31. Możemy wtedy automatycznie zapisać:
  32.  
  33. - wiadomość użytkownika,
  34. - odpowiedź agenta,
  35. - użyte narzędzia,
  36. - zmienione pliki,
  37. - dokładne błędy,
  38. - wyniki testów,
  39. - nowe zadania wykryte podczas pracy.
  40.  
  41. Przed następnym wywołaniem modelu:
  42.  
  43. python
  44. prefetch(query)
  45.  
  46.  
  47. Możemy wstrzyknąć małą kapsułę aktywnego zadania. Nie do system promptu, tylko do kontekstu bieżącego requestu, żeby nie niszczyć cache.
  48.  
  49. Przed kompresją:
  50.  
  51. python
  52. on_pre_compress(messages)
  53.  
  54.  
  55. Możemy:
  56.  
  57. - zapisać pełny checkpoint,
  58. - zaktualizować dokumentację projektu,
  59. - zwrócić kompaktorowi ustrukturyzowany handoff,
  60. - przekazać ścieżkę i hash checkpointu.
  61.  
  62. Po kompresji:
  63.  
  64. python
  65. on_session_switch(..., reason="compression")
  66.  
  67.  
  68. Ten hook w Twojej wersji działa zarówno przy kompresji in-place, jak i przy zmianie identyfikatora sesji. Możemy wtedy:
  69.  
  70. - potwierdzić, że checkpoint odpowiada wykonanej kompresji,
  71. - wyczyścić przetworzone bufory,
  72. - oznaczyć checkpoint jako użyty,
  73. - przygotować jednorazową kapsułę dla pierwszego turnu po kompresji.
  74.  
  75. Czyli technicznie dokładnie to, o czym mówisz, jest możliwe.
  76.  
  77. 2. Gdzie przechowujemy dokumentację?
  78.  
  79. Proponuję jedno jawnie skonfigurowane miejsce:
  80.  
  81. yaml
  82. project_ledger:
  83. root: /home/hermit/plans/agent-projects
  84.  
  85.  
  86. Przykładowa struktura:
  87.  
  88. text
  89. /home/hermit/plans/agent-projects/<project-id>/
  90. ├── PROJECT.md
  91. ├── INDEX.md
  92. ├── DECISIONS.md
  93. ├── BLOCKERS.md
  94. ├── ARTIFACTS.md
  95. ├── manifest.json
  96. ├── journal/
  97. │ └── events.jsonl
  98. └── tasks/
  99. ├── T-0001-authentication/
  100. │ ├── TASK.md
  101. │ ├── STATE.md
  102. │ ├── TODO.md
  103. │ ├── SOURCES.md
  104. │ └── checkpoints/
  105. │ ├── C-000001.md
  106. │ └── C-000002.md
  107. └── T-0002-browser-qa/
  108. └── ...
  109.  
  110.  
  111. Znaczenie:
  112.  
  113. - PROJECT.md — cel, zakres, ograniczenia i kryteria zakończenia projektu,
  114. - INDEX.md — krótki indeks zadań i zależności,
  115. - DECISIONS.md — decyzje wraz z uzasadnieniem,
  116. - BLOCKERS.md — aktualne i rozwiązane blokery,
  117. - ARTIFACTS.md — ścieżki, branche, testy i runtime,
  118. - journal/events.jsonl — append-only źródło odzyskiwania,
  119. - tasks/T-... — osobne segmenty tematyczne,
  120. - checkpoints/ — niezmienne snapshoty przed kompresją.
  121.  
  122. Ważne: nie tworzymy jednego ogromnego pliku dokumentacji. To ponownie zrobiłoby z dokumentacji wielki kontekst. INDEX.md służy tylko jako mapa, a szczegóły są dzielone na zadania.
  123.  
  124. 3. Jak agent rozbija projekt?
  125.  
  126. Hierarchia:
  127.  
  128. text
  129. Projekt → obszar prac → zadanie → podzadanie → checkpoint
  130.  
  131.  
  132. Statusy:
  133.  
  134. text
  135. discovered → planned → active → blocked → done
  136.  
  137.  
  138. Nowe zadanie powstaje, gdy:
  139.  
  140. - ma osobne kryteria akceptacji,
  141. - dotyczy innego subsystemu,
  142. - można je niezależnie przetestować,
  143. - może zostać niezależnie zablokowane,
  144. - może być wykonane/delegowane niezależnie,
  145. - aktualne STATE.md robi się za duże,
  146. - poprzednie zadanie zostało zakończone.
  147.  
  148. Nie rozbijamy projektu per wywołanie narzędzia. Sensowny segment to około 30–90 minut spójnej pracy albo jeden niezależnie weryfikowalny rezultat.
  149.  
  150. Każde zadanie musi mieć:
  151.  
  152. - cel,
  153. - zakres i non-goals,
  154. - kryteria akceptacji,
  155. - zależności,
  156. - aktualny stan,
  157. - zakończone działania z dowodami,
  158. - blokery,
  159. - dokładnie jeden następny krok.
  160.  
  161. Nowe tematy wykryte przez agenta dostają status discovered. Nie mogą samodzielnie wyprzeć aktywnego celu użytkownika.
  162.  
  163. 4. Co dzieje się po każdym turnie?
  164.  
  165. Automatycznie, niezależnie od tego, czy model pamięta o dokumentacji:
  166.  
  167. 1. Hermes zapisuje zdarzenie do journal/events.jsonl.
  168. 2. Zdarzenie otrzymuje stabilny identyfikator i hash.
  169. 3. Zapisywane są dokładne:
  170. - ścieżki,
  171. - błędy,
  172. - wyniki testów,
  173. - decyzje,
  174. - identyfikatory tasków.
  175. 4. Jeżeli pojawił się nowy temat, zostaje dodany do TODO jako discovered.
  176. 5. Co określoną liczbę turnów model dokumentacyjny aktualizuje pliki Markdown.
  177.  
  178. Dzięki temu nawet jeśli model dokumentacyjny padnie, mamy surowy journal, z którego można odbudować dokumentację.
  179.  
  180. 5. Co dokładnie dzieje się przed kompresją?
  181.  
  182. To będzie transakcja:
  183.  
  184. 1. Blokada dla (project_id, session_id).
  185. 2. Flush wszystkich zdarzeń do journala.
  186. 3. Model checkpointujący generuje ustrukturyzowany wynik:
  187. - zmiany tasków,
  188. - wykonane działania,
  189. - decyzje,
  190. - blokery,
  191. - pliki,
  192. - testy,
  193. - następny krok,
  194. - krótką kapsułę handoff.
  195. 4. Kod waliduje wynik.
  196. 5. Dokumenty są zapisywane do plików tymczasowych.
  197. 6. Następuje fsync i atomowy rename.
  198. 7. manifest.json jest aktualizowany jako ostatni.
  199. 8. Obliczany jest hash checkpointu.
  200. 9. Dopiero wtedy kompaktor może zastąpić starszy kontekst.
  201. 10. Kompaktor dostaje kapsułę oraz wskaźnik:
  202.  
  203. text
  204. Checkpoint: C-000123
  205. Task: T-0007
  206. Path: .../tasks/T-0007/checkpoints/C-000123.md
  207. Digest: sha256:...
  208. Next action: ...
  209.  
  210.  
  211. Jeżeli dokumentacja nie została poprawnie zapisana, kompresja nie może się odbyć.
  212.  
  213. 6. Najważniejsza luka w obecnym Hermesie
  214.  
  215. Twoja lokalna wersja wywołuje on_pre_compress(), ale przechwytuje i ignoruje jego wyjątki:
  216.  
  217. python
  218. try:
  219. memory_context = memory_manager.on_pre_compress(messages)
  220. except Exception:
  221. pass
  222.  
  223.  
  224. Czyli provider może powiedzieć „nie udało się zapisać checkpointu”, a Hermes mimo to może kontynuować.
  225.  
  226. Aktualna dokumentacja upstream opisuje już lepszy kontrakt:
  227.  
  228. yaml
  229. memory:
  230. checkpoint_required: true
  231.  
  232.  
  233. Wtedy brak checkpointu powinien kończyć się:
  234.  
  235. text
  236. BLOCKED_MISSING_PREREQUISITE
  237.  
  238.  
  239. i pozostawiać oryginalne wiadomości bez zmian.
  240.  
  241. Tego kontraktu nie ma jeszcze w Twojej zainstalowanej wersji. Pierwsza zmiana implementacyjna musi więc backportować właśnie ten mechanizm. Bez tego Project Ledger byłby wygodną
  242. dokumentacją, ale nie gwarancją bezpieczeństwa.
  243.  
  244. 7. Co wstrzykujemy do modelu?
  245.  
  246. Nie wszystkie dokumenty. Tylko kapsułę około 2–3,5 tysiąca tokenów:
  247.  
  248. text
  249. [PROJECT LEDGER CAPSULE]
  250. Project: impress-connect
  251. Active task: T-0007
  252.  
  253. Objective:
  254. ...
  255.  
  256. Acceptance criteria:
  257. ...
  258.  
  259. Verified state:
  260. ...
  261.  
  262. Completed:
  263. ...
  264.  
  265. Blockers:
  266. ...
  267.  
  268. Next action:
  269. ...
  270.  
  271. Relevant documents:
  272. - tasks/T-0007/STATE.md
  273. - tasks/T-0007/SOURCES.md
  274. - DECISIONS.md#D-0012
  275.  
  276. Latest checkpoint:
  277. C-000123, sha256:...
  278.  
  279. Recovery:
  280. Use ledger_get or session_search. Do not infer omitted details.
  281. [/PROJECT LEDGER CAPSULE]
  282.  
  283.  
  284. Dobór:
  285.  
  286. 1. aktywne zadanie,
  287. 2. zadania wskazane bezpośrednio przez ID lub ścieżkę,
  288. 3. maksymalnie dwa powiązane zadania/zależności,
  289. 4. tylko istotne decyzje i ograniczenia projektowe.
  290.  
  291. Nie wstrzykujemy całego projektu przy każdym wywołaniu.
  292.  
  293. 8. Czy model kompaktujący może sam tworzyć dokumentację?
  294.  
  295. Tak, ale nie powinien samodzielnie wykonywać niekontrolowanych zapisów.
  296.  
  297. Bezpieczny podział:
  298.  
  299. - model generuje ustrukturyzowane zmiany,
  300. - kod waliduje wynik,
  301. - kod zapisuje pliki atomowo,
  302. - kod oblicza hash,
  303. - dopiero potem Hermes zezwala na kompresję.
  304.  
  305. Model może więc przygotowywać dokumentację, ale nie jest autorytetem transakcji.
  306.  
  307. W pierwszej wersji proponuję dwa logiczne kroki:
  308.  
  309. 1. checkpoint dokumentacyjny,
  310. 2. właściwa kompresja z wykorzystaniem checkpointu.
  311.  
  312. To jest trochę wolniejsze, ale użytkownik wyraźnie woli poświęcić więcej czasu i nie stracić pracy. Później można zoptymalizować to do jednego wywołania zwracającego:
  313.  
  314. json
  315. {
  316. "ledger_updates": [],
  317. "handoff_summary": "...",
  318. "active_task": "T-0007",
  319. "next_action": "...",
  320. "source_digest": "..."
  321. }
  322.  
  323.  
  324. 9. Jak utrzymujemy „długą sesję”?
  325.  
  326. Nie utrzymujemy nieskończenie długiej fizycznej sesji.
  327.  
  328. Utrzymujemy:
  329.  
  330. text
  331. jeden projekt + stabilny ledger + wiele krótszych sesji
  332.  
  333.  
  334. Polityka:
  335.  
  336. - około 35% kontekstu: checkpoint,
  337. - po zakończeniu zadania: checkpoint,
  338. - około 45% i czysta granica zadania: przejście do świeżej sesji,
  339. - kompresja awaryjna pozostaje zabezpieczeniem, a nie podstawowym sposobem prowadzenia projektu.
  340.  
  341. Nowa sesja dostaje:
  342.  
  343. - aktywny task,
  344. - kapsułę,
  345. - wskazane dokumenty,
  346. - aktualny diff/status repozytorium,
  347. - ostatni checkpoint,
  348. - jeden kolejny krok.
  349.  
  350. Nie potrzebuje pełnych 200 tysięcy tokenów starej historii.
  351.  
  352. 10. Kolejność implementacji
  353.  
  354. Trzy osobne, możliwe do przeglądu etapy:
  355.  
  356. 1. Hermes core:
  357. - fail-closed checkpoint contract,
  358. - testy, że nie gubi wiadomości i nie zmienia sesji przy awarii.
  359.  
  360. 2. Lokalny provider project-ledger:
  361. - journal,
  362. - Markdown,
  363. - taski,
  364. - bounded prefetch,
  365. - pre/post compression.
  366.  
  367. 3. Proaktywny rollover i opcjonalny context engine:
  368. - automatyczne przechodzenie między krótszymi sesjami,
  369. - później topic-aware select_context() zamiast klasycznej historii.
  370.  
  371. Nie zaczynałbym od pełnego zastępowania ContextCompressor. To znacznie większe ryzyko. Memory provider plus mały, testowalny backport daje prawie całą potrzebną funkcjonalność przy
  372. mniejszej ingerencji.
  373.  
  374. Repozytorium Hermesa pozostaje obecnie niezmienione i czyste. Utworzyłem wyłącznie dokumentację planu poza repozytorium. Następny konkretny etap to implementacja punktu 1 na branchu
  375. agent/hermes-project-ledger, po wykonaniu kopii config.yaml, state.db* i zapisaniu obecnego baseline’u.
  376.  
Tags: ai
Advertisement