Files
astrololo/services/presentation/app/static/copy.js
T
gitea 80c008f076
Testy / Testy warstwy logicznej (silnik) (push) Successful in 10m52s
Testy / Build obrazu silnika B (swisseph) (push) Failing after 1m8s
Testy / Kontrola składni wszystkich warstw (push) Successful in 1m21s
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 11m14s
Testy / Build obrazu silnika B (swisseph) (pull_request) Failing after 29s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 20s
feat(logic): generator promptow do LLM + budzetowanie (LOG-29, LOG-30)
Pierwszy krok ustalonej kolejnosci: prompt z podgladem, uzyteczny od razu
BEZ integracji API (ta przyjdzie w LOG-31).

LOG-29 — app/prompt.py:
- profil natal (ekran Interpretacje) i period (ekran Kalendarz),
- prompt po polsku: zadanie -> dane horoskopu (pozycje, osie, Lots, aspekty,
  sekta, zodiak) -> wskazania z baz wg wagi -> instrukcje -> zastrzezenie,
- twarde reguly: kazda teza musi cytowac konkretny sygnifikator, zakaz
  wychodzenia poza dostarczone dane, jawne wskazanie sprzecznosci,
- deterministyczny: ten sam horoskop + budzet = ten sam prompt.

LOG-30 — redukcja do budzetu (concise/medium/extensive):
dedup -> grupowanie z licznikiem -> sortowanie wg punktacji sily (LOG-21) ->
obciecie ogona (jednostka = CALE wskazanie) -> skracanie dlugich opisow.
Statystyki zwracaja ile weszlo/pominieto i jaki byl prog — takze w tresci
promptu, zeby model wiedzial, ze widzi wybor.

POST /chart/prompt — zwraca sam prompt + statystyki, bez wolania modelu.

Prezentacja: przycisk „Generuj prompt (AI)" na obu ekranach, wybor budzetu,
pole z promptem + kopiowanie (z fallbackiem dla http bez secure context).

WAZNE (znalezione przy tescie e2e): padnieta warstwa danych zabiera tylko
wskazania — horoskop i OS CZASU zostaja, bo sa czysto obliczeniowe. Wczesniej
blad bazy gubil cala osie czasu, czyniac prognoze okresowa bezuzyteczna.
Zabezpieczone testem.

Testy: 19 nowych, calosc 118 passed / 1 skipped. Zweryfikowane e2e w
przegladarce: profil natal (3340 znakow) i period (15 zdarzen, 4728 znakow).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 17:31:51 +02:00

32 lines
1.1 KiB
JavaScript

// Kopiowanie do schowka dla przycisków [data-copy="#selektor"].
// clipboard API wymaga secure context (https/localhost), a aplikacja bywa serwowana
// po http://<ip> — dlatego jest awaryjne przejście na zaznaczenie + execCommand.
document.addEventListener('click', function (e) {
const btn = e.target.closest('[data-copy]');
if (!btn) return;
const src = document.querySelector(btn.getAttribute('data-copy'));
if (!src) return;
const done = ok => {
const label = btn.textContent;
btn.textContent = ok ? 'Skopiowano ✓' : 'Nie udało się — zaznacz i skopiuj ręcznie';
setTimeout(() => { btn.textContent = label; }, 2500);
};
const text = src.value !== undefined ? src.value : src.textContent;
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(text).then(() => done(true), () => done(false));
return;
}
// awaryjnie: zaznacz zawartość i spróbuj starym poleceniem
try {
src.focus();
if (src.select) src.select();
done(document.execCommand('copy'));
} catch (err) {
done(false);
}
});