strom-research 1.13.2-beta.3 → 1.13.2-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/lang/cs.json +66 -1
- package/assets/lang/de.json +66 -1
- package/assets/method/core.md +32 -2
- package/assets/method/reading.md +37 -21
- package/assets/method/recording.md +7 -3
- package/assets/plugins/gates/README.md +28 -1
- package/assets/plugins/gates/claude-usage/gate.json +1 -1
- package/assets/plugins/gates/claude-usage/gate.ts +100 -22
- package/dist/agents/files.js +13 -4
- package/dist/agents/images.js +5 -0
- package/dist/agents/profiles.js +19 -8
- package/dist/agents/scanreader.js +103 -0
- package/dist/brief/brief.js +613 -107
- package/dist/brief/sheet.js +88 -18
- package/dist/cli/execute.js +159 -6
- package/dist/cli/help.js +1 -1
- package/dist/cli/main.js +11 -7
- package/dist/cli/menu-settings.js +19 -1
- package/dist/cli/menu.js +7 -0
- package/dist/cli/ui.js +52 -1
- package/dist/commands/analysis.js +26 -13
- package/dist/commands/batch.js +1 -1
- package/dist/commands/calibrate.js +203 -0
- package/dist/commands/clips.js +1 -1
- package/dist/commands/connectors.js +98 -20
- package/dist/commands/gates.js +8 -4
- package/dist/commands/guide.js +5 -3
- package/dist/commands/index.js +1 -0
- package/dist/commands/media.js +34 -21
- package/dist/commands/meta.js +8 -2
- package/dist/commands/people.js +4 -4
- package/dist/commands/read.js +17 -7
- package/dist/commands/readers.js +11 -6
- package/dist/commands/readings.js +11 -4
- package/dist/commands/research.js +5 -3
- package/dist/commands/session.js +88 -17
- package/dist/commands/setup.js +23 -5
- package/dist/commands/show.js +1 -17
- package/dist/commands/sources.js +1 -1
- package/dist/commands/tasks.js +39 -7
- package/dist/core/assets.js +54 -10
- package/dist/core/changelog.js +105 -14
- package/dist/core/clock.js +37 -2
- package/dist/core/config.js +5 -1
- package/dist/core/connector.js +49 -0
- package/dist/core/edge.js +8 -2
- package/dist/core/evidence.js +7 -0
- package/dist/core/gate.js +42 -7
- package/dist/core/hypolinks.js +121 -6
- package/dist/core/live.js +22 -7
- package/dist/core/mediaindex.js +24 -2
- package/dist/core/people.js +5 -2
- package/dist/core/phrases.js +15 -0
- package/dist/core/reader.js +2 -1
- package/dist/core/records.js +17 -2
- package/dist/core/session.js +2 -2
- package/dist/core/tree.js +1 -1
- package/dist/core/views.js +4 -2
- package/dist/core/viewsample.js +366 -0
- package/dist/core/viewsizes.js +78 -0
- package/dist/gedcom/export.js +24 -4
- package/dist/gedcom/validate.js +7 -4
- package/dist/runners/claude.js +49 -5
- package/dist/runners/runner.js +9 -0
- package/package.json +1 -1
package/assets/lang/cs.json
CHANGED
|
@@ -137,6 +137,37 @@
|
|
|
137
137
|
"ui.chat.app.model.chosen": "V aplikaci {app} zvolit pro výzkum model {model} (zvolený v nastavení).",
|
|
138
138
|
"ui.settings.model": "Model výzkumu ({agent}): {model}",
|
|
139
139
|
"ui.settings.model.own": "vlastní model agenta",
|
|
140
|
+
"ui.views.title": "Ladění čtení snímků · {agent}: snímků {n}, knih {books}, velikosti {sizes} px",
|
|
141
|
+
"ui.views.find": "Nalezení zápisu na celém snímku:",
|
|
142
|
+
"ui.views.find.row": " {size} px na místě {located} z {n} · na snímku bez něj {wrong} z {neg} · {cost}",
|
|
143
|
+
"ui.views.read": "Přečtení zápisu z poloviny nebo strany:",
|
|
144
|
+
"ui.views.read.row": " {size} px přečteno {keys} z {total} · nejistých míst {unsure} · {cost}",
|
|
145
|
+
"ui.views.rule": "Menší velikost se uloží jen při jasném výsledku: každý zápis nalezený na místě jako u největší velikosti a žádný navíc na snímku bez něj; přečteno celkem aspoň tolik, žádný zápis o víc než jeden údaj méně, nejistých míst ne víc.",
|
|
146
|
+
"ui.views.stored": "Uloženo pro {agent} ({date}): hledání {find} px · čtení {read} px — řídí se tím strom media view a strom read; zpět na výchozí: strom media calibrate --reset",
|
|
147
|
+
"ui.views.kept": "Bez jasného výsledku: nic se neuložilo, velikosti zůstávají, jak byly.",
|
|
148
|
+
"ui.views.unclear.find": "Hledání: bez jasného výsledku — zůstává výchozí ({size} px).",
|
|
149
|
+
"ui.views.unclear.read": "Čtení: bez jasného výsledku — zůstává výchozí ({size} px).",
|
|
150
|
+
"ui.views.failed": "Čtení, která nedoběhla: {failed} — nic se neuložilo, velikosti zůstávají, jak byly.",
|
|
151
|
+
"ui.views.few": "Na vyladění čtení snímků je málo snímků se známou pravdou: {have} z potřebných {need}. Takový snímek je sken záznamu, který cituje doložený údaj, s jeho slovy (přepisem) a už na tomto počítači; chybí ještě {more} — vzniknou běžnou prací agenta, zkusit znovu po několika sezeních. Do té doby platí výchozí velikosti.",
|
|
152
|
+
"ui.views.ask": "Vyladit čtení snímků pro {agent}: {readers} placených čtení {n} snímků tohoto výzkumu ve velikostech {sizes} px, asi {cost} (typický odhad; ceny agenta se mohou lišit). Spustit?",
|
|
153
|
+
"ui.views.no": "Nic se nespustilo; velikosti zůstávají, jak byly.",
|
|
154
|
+
"ui.views.reset": "Vyladění pro {agent} zapomenuto: platí výchozí velikosti (hledání {find} px · čtení {read} px).",
|
|
155
|
+
"ui.views.reset.none": "Pro {agent} nic vyladěno není: platí výchozí velikosti (hledání {find} px · čtení {read} px).",
|
|
156
|
+
"ui.views.estimate": "Snímků {n}, knih {books}, {readers} čtení ve velikostech {sizes} px, asi {cost} — spouští člověk: strom media calibrate",
|
|
157
|
+
"ui.views.offer": "čtení snímků bylo vyladěno pro {before}, pro {now} zatím ne: strom media calibrate (spouští člověk; placená práce modelu)",
|
|
158
|
+
"ui.views.progress": "▶ {what} · {size} px · snímky: {n}",
|
|
159
|
+
"ui.views.what.find": "hledání",
|
|
160
|
+
"ui.views.what.read": "čtení",
|
|
161
|
+
"ui.views.cost.unknown": "cena neznámá",
|
|
162
|
+
"ui.views.spent": "Čtení stála {cost}.",
|
|
163
|
+
"ui.o.views": "snímky",
|
|
164
|
+
"ui.settings.views": "Vyladit čtení snímků ({state})",
|
|
165
|
+
"ui.settings.views.default": "výchozí velikosti",
|
|
166
|
+
"ui.settings.views.done": "vyladěno {date}",
|
|
167
|
+
"ui.settings.views.other": "zatím vyladěno pro jiný model",
|
|
168
|
+
"ui.doc.views": "čtení snímků",
|
|
169
|
+
"ui.doc.views.default": "výchozí velikosti: hledání {find} px · čtení {read} px",
|
|
170
|
+
"ui.doc.views.done": "vyladěno {date}: hledání {find} px · čtení {read} px",
|
|
140
171
|
"ui.setup.level": "Co smí agent dělat bez ptaní?",
|
|
141
172
|
"ui.setup.level.ask": "Ptát se mě na všechno mimo výzkum",
|
|
142
173
|
"ui.setup.level.auto": "Pracovat samostatně – ptát se jen u riskantních kroků (doporučeno)",
|
|
@@ -662,6 +693,7 @@
|
|
|
662
693
|
"ui.help.cmd.pack": "Zabalit výzkum do jednoho souboru ZIP, aby v něm mohl pokračovat někdo jiný",
|
|
663
694
|
"ui.help.cmd.unpack": "Rozbalit rodokmen, který někdo poslal",
|
|
664
695
|
"ui.help.cmd.tidy": "Uvolnit místo, které si strom drží vedle výzkumu (nejdřív ukáže, pak se zeptá)",
|
|
696
|
+
"ui.help.cmd.media.calibrate": "Vyladit velikost snímků pro agenta a model výzkumu na jeho vlastních doložených záznamech (placená práce modelu; cena se řekne předem)",
|
|
665
697
|
"ui.help.cmd.check": "Zkontrolovat výzkum: vše v pořádku, nic změněné mimo strom",
|
|
666
698
|
"ui.help.cmd.config.get": "Přečíst nastavení",
|
|
667
699
|
"ui.help.cmd.config.set": "Změnit nastavení",
|
|
@@ -978,7 +1010,7 @@
|
|
|
978
1010
|
"ui.run.which.bad": "Čísla ze seznamu, 1 až {n}: např. 2 nebo 1,4 nebo 2-5.",
|
|
979
1011
|
"ui.run.limit": "Na jeden úkol má agent nejvýš {minutes} minut; pak ho strom zastaví a úkol vrátí do fronty (nastavení run.minutes).",
|
|
980
1012
|
"ui.run.empty": "Fronta je prázdná – co hledat, stačí agentovi říct v rozhovoru.",
|
|
981
|
-
"ui.run.browser": "· {name}: snímky přes prohlížeč –
|
|
1013
|
+
"ui.run.browser": "· {name}: snímky přes prohlížeč – nástroje prohlížeče pro {hosts} v sezeních, jejichž úkol je může potřebovat; musí běžet Chrome s rozšířením Claude",
|
|
982
1014
|
"ui.run.browser.model": " pozor: nástroje prohlížeče potřebují model, který své kroky zkontroluje – Sonnet nebo Opus, ne {model}: strom config set model.lead sonnet",
|
|
983
1015
|
"ui.run.full": "· oprávnění: plná – agent smí vše kromě toho, co oprávnění rodokmenu zakazují (zpět: strom config set agent.permissions auto)",
|
|
984
1016
|
"ui.menu.working.more": "Samostatně teď pracují agenti: {n}.",
|
|
@@ -994,6 +1026,11 @@
|
|
|
994
1026
|
"ui.run.gate.no": "ne",
|
|
995
1027
|
"ui.run.gate.noanswer": "neodpověděla, jak má (strom gate test)",
|
|
996
1028
|
"ui.run.stop.gate.declined": "nespuštěno — podmínka „{name}“: {reason}",
|
|
1029
|
+
"ui.run.gate.cap": "· {name}: nastavený strop – kontroluje se před každým sezením; žádné „přesto začít“ ho nepřekročí",
|
|
1030
|
+
"ui.run.stop.gate.cap": "strop podmínky „{name}“ – {reason} (pevná hranice z run.gate; „přesto začít“ ji nepřekročí)",
|
|
1031
|
+
"ui.run.cap.finish": "⏳ {session}: limit agenta na {used} % ({kind}) – sezení dostalo žádost zapsat, co našlo, a skončit; za stropem další sezení nezačne",
|
|
1032
|
+
"ui.run.limit.five_hour": "pětihodinové okno",
|
|
1033
|
+
"ui.run.limit.seven_day": "týden",
|
|
997
1034
|
"ui.run.loop": "Nechat ho pracovat, dokud je co dělat a dovolí to podmínka „{name}“",
|
|
998
1035
|
"ui.consent.gate.set": "Nechat podmínku „{name}“ rozhodovat, kdy agent pracující sám pokračuje?",
|
|
999
1036
|
"ui.consent.gate.unset": "Odebrat podmínku „{name}“ — agent pracující sám se jí už nebude ptát?",
|
|
@@ -1318,6 +1355,24 @@
|
|
|
1318
1355
|
"log.research.done": "Směr ukončen: {name}",
|
|
1319
1356
|
"log.mode.archive": "Výzkum je teď archiv",
|
|
1320
1357
|
"log.mode.research": "Výzkum je znovu zapnutý",
|
|
1358
|
+
"log.reading.loose": "Pročteno snímků: {n}",
|
|
1359
|
+
"log.clips": "Zápisy vyznačené na snímcích: {n} z {total}",
|
|
1360
|
+
"log.transcripts": "Zápisy přepsané z výřezů: {n} z {total}",
|
|
1361
|
+
"log.tree.create": "Výzkum založen: {name}",
|
|
1362
|
+
"log.repair": "Data vrácena do posledního zapečetěného stavu",
|
|
1363
|
+
"log.chat.saved": "Uloženo po rozhovoru s agentem",
|
|
1364
|
+
"log.migrate": "Data rodokmenu převedena pro novější strom",
|
|
1365
|
+
"log.setting": "Změněno nastavení výzkumu: {key}",
|
|
1366
|
+
"log.image": "{name}, obr. {image}",
|
|
1367
|
+
"log.media.edit": "Upravený snímek: {name}",
|
|
1368
|
+
"log.media.retract": "Odvolaný snímek: {name}",
|
|
1369
|
+
"log.input.edit": "Materiál doplněn: {name}",
|
|
1370
|
+
"log.input.skip": "Materiál odložen jako nepoužitelný: {name}",
|
|
1371
|
+
"log.input.sort": "Materiál roztříděn: {name}",
|
|
1372
|
+
"log.record.edit": "Upraveno: {name}",
|
|
1373
|
+
"ui.gate.timeout": "neodpověděla do {s} s",
|
|
1374
|
+
"ui.gate.signal": "ukončena signálem {signal}",
|
|
1375
|
+
"ui.gate.status": "skončila s kódem {status}",
|
|
1321
1376
|
"ui.waiting.title": "Agent potřebuje ({n}):",
|
|
1322
1377
|
"ui.waiting.do": "Co udělat: {what}",
|
|
1323
1378
|
"ui.waiting.ask": "agent to řekne v rozhovoru",
|
|
@@ -1478,6 +1533,13 @@
|
|
|
1478
1533
|
"ui.gate.asked": "před každým sezením strom run se ptá: {gate} (strom config unset run.gate: žádná)",
|
|
1479
1534
|
"ui.gate.unset": "žádná se neptá: strom config set run.gate <název> (jen uživatel)",
|
|
1480
1535
|
"ui.gate.folder": "složka: {folder} – složka podmínky nakopírovaná sem je nainstalovaná (rozhraní: README.md tamtéž)",
|
|
1536
|
+
"ui.gate.cap.week": "strop nastaven: ptá se před každým sezením každého běhu; sezení v práci je požádáno o dokončení při {pct} % týdne",
|
|
1537
|
+
"ui.gate.cap.window": "strop nastaven: ptá se před každým sezením každého běhu; sezení v práci je požádáno o dokončení při {pct} % pětihodinového okna",
|
|
1538
|
+
"ui.gate.test.go": "pokračovat",
|
|
1539
|
+
"ui.gate.test.wait": "počkat do {at}",
|
|
1540
|
+
"ui.gate.test.stop": "zastavit",
|
|
1541
|
+
"ui.gate.test.error": "chyba – běh by se zastavil",
|
|
1542
|
+
"ui.gate.test.hard": "(strop: pevné zastavení, žádné „přesto začít“)",
|
|
1481
1543
|
"ui.hook.none": "žádné hooky",
|
|
1482
1544
|
"ui.hook.on": "zapnuté: {hooks} (strom hook off <název>)",
|
|
1483
1545
|
"ui.hook.unset": "žádný není zapnutý: strom hook on <název> (jen uživatel)",
|
|
@@ -1641,12 +1703,15 @@
|
|
|
1641
1703
|
"ui.arg.year": "rok",
|
|
1642
1704
|
"ui.error.arg.extra": "nečekaný argument „{arg}“",
|
|
1643
1705
|
"ui.error.arg.extra.hint": "strom help {cmd} — hodnotu s mezerami dát do uvozovek",
|
|
1706
|
+
"ui.error.arg.extra.fix.hint": "správně: {fix}",
|
|
1707
|
+
"ui.error.arg.extra.several.hint": "více záznamů: {line}",
|
|
1644
1708
|
"ui.error.option.is-arg": "{opt} se u {cmd} píše jako argument, ne jako volba",
|
|
1645
1709
|
"ui.error.option.is-arg.hint": "{cmd} <{arg}>",
|
|
1646
1710
|
"ui.error.option.unknown": "neznámá volba {opt} u {cmd}",
|
|
1647
1711
|
"ui.error.option.unknown.hint": "volby: {options} · strom help {path}",
|
|
1648
1712
|
"ui.error.option.unknown.none": "neznámá volba {opt} u {cmd}",
|
|
1649
1713
|
"ui.error.option.unknown.none.hint": "{help}",
|
|
1714
|
+
"ui.error.option.unknown.status.hint": "jistota (--status) patří jen k údaji (E…), nikdy ke jménu ani k rodině: strom cite E… S… --status probable|proven, strom event edit E… --status …",
|
|
1650
1715
|
"ui.error.option.no-value": "{opt} se píše bez hodnoty",
|
|
1651
1716
|
"ui.error.option.needs-value": "{opt} potřebuje hodnotu {value}",
|
|
1652
1717
|
"ui.error.option.needs-value.hint": "strom help {path}",
|
package/assets/lang/de.json
CHANGED
|
@@ -137,6 +137,37 @@
|
|
|
137
137
|
"ui.chat.app.model.chosen": "In {app} für die Forschung das Modell {model} wählen (das in den Einstellungen gewählte).",
|
|
138
138
|
"ui.settings.model": "Modell der Forschung ({agent}): {model}",
|
|
139
139
|
"ui.settings.model.own": "das eigene des Agenten",
|
|
140
|
+
"ui.views.title": "Abstimmung des Lesens der Scans · {agent}: {n} Bilder aus {books} Büchern, Größen {sizes} px",
|
|
141
|
+
"ui.views.find": "Finden eines Eintrags auf dem ganzen Bild:",
|
|
142
|
+
"ui.views.find.row": " {size} px an der Stelle {located} von {n} · auf einem Bild ohne ihn {wrong} von {neg} · {cost}",
|
|
143
|
+
"ui.views.read": "Lesen eines Eintrags aus einer Hälfte oder einer Seite:",
|
|
144
|
+
"ui.views.read.row": " {size} px gelesen {keys} von {total} · unsichere Stellen {unsure} · {cost}",
|
|
145
|
+
"ui.views.rule": "Eine kleinere Größe wird nur bei klarem Ergebnis gespeichert: jeder Eintrag an der Stelle gefunden wie bei der größten Größe und keiner mehr auf einem Bild ohne ihn; insgesamt mindestens so viel gelesen, kein Eintrag um mehr als eine Angabe weniger, nicht mehr unsichere Stellen.",
|
|
146
|
+
"ui.views.stored": "Gespeichert für {agent} ({date}): Suchen {find} px · Lesen {read} px — danach richten sich strom media view und strom read; zurück zu den Vorgaben: strom media calibrate --reset",
|
|
147
|
+
"ui.views.kept": "Kein klares Ergebnis: nichts gespeichert, die Größen bleiben, wie sie waren.",
|
|
148
|
+
"ui.views.unclear.find": "Suchen: kein klares Ergebnis — die Vorgabe bleibt ({size} px).",
|
|
149
|
+
"ui.views.unclear.read": "Lesen: kein klares Ergebnis — die Vorgabe bleibt ({size} px).",
|
|
150
|
+
"ui.views.failed": "Nicht beendete Lesungen: {failed} — nichts gespeichert, die Größen bleiben, wie sie waren.",
|
|
151
|
+
"ui.views.few": "Zu wenige Bilder mit bekannter Wahrheit, um das Lesen der Scans abzustimmen: {have} von {need} nötigen. Ein solches Bild ist der Scan eines Eintrags, den eine belegte Angabe zitiert, mit seinem Wortlaut (einer Abschrift), schon auf diesem Computer; {more} weitere entstehen durch die gewöhnliche Arbeit des Agenten — nach einigen Sitzungen erneut versuchen. Bis dahin gelten die vorgegebenen Größen.",
|
|
152
|
+
"ui.views.ask": "Das Lesen der Scans für {agent} abstimmen: {readers} bezahlte Lesungen von {n} Bildern dieser Forschung in {sizes} px, etwa {cost} (ein typischer Wert; die Preise des Agenten können abweichen). Starten?",
|
|
153
|
+
"ui.views.no": "Nichts gestartet; die Größen bleiben, wie sie waren.",
|
|
154
|
+
"ui.views.reset": "Die Abstimmung für {agent} ist vergessen: es gelten die vorgegebenen Größen (Suchen {find} px · Lesen {read} px).",
|
|
155
|
+
"ui.views.reset.none": "Für {agent} ist nichts abgestimmt: es gelten die vorgegebenen Größen (Suchen {find} px · Lesen {read} px).",
|
|
156
|
+
"ui.views.estimate": "{n} Bilder aus {books} Büchern, {readers} Lesungen in {sizes} px, etwa {cost} — startet ein Mensch: strom media calibrate",
|
|
157
|
+
"ui.views.offer": "das Lesen der Scans wurde für {before} abgestimmt, für {now} noch nicht: strom media calibrate (startet ein Mensch; bezahlte Arbeit des Modells)",
|
|
158
|
+
"ui.views.progress": "▶ {what} · {size} px · Bilder: {n}",
|
|
159
|
+
"ui.views.what.find": "Suchen",
|
|
160
|
+
"ui.views.what.read": "Lesen",
|
|
161
|
+
"ui.views.cost.unknown": "Kosten unbekannt",
|
|
162
|
+
"ui.views.spent": "Die Lesungen kosteten {cost}.",
|
|
163
|
+
"ui.o.views": "Scans",
|
|
164
|
+
"ui.settings.views": "Das Lesen der Scans abstimmen ({state})",
|
|
165
|
+
"ui.settings.views.default": "die vorgegebenen Größen",
|
|
166
|
+
"ui.settings.views.done": "abgestimmt {date}",
|
|
167
|
+
"ui.settings.views.other": "bisher für ein anderes Modell abgestimmt",
|
|
168
|
+
"ui.doc.views": "Lesen der Scans",
|
|
169
|
+
"ui.doc.views.default": "die vorgegebenen Größen: Suchen {find} px · Lesen {read} px",
|
|
170
|
+
"ui.doc.views.done": "abgestimmt {date}: Suchen {find} px · Lesen {read} px",
|
|
140
171
|
"ui.setup.level": "Was darf der Agent tun, ohne nachzufragen?",
|
|
141
172
|
"ui.setup.level.ask": "Mich bei allem außerhalb der Forschung fragen",
|
|
142
173
|
"ui.setup.level.auto": "Selbstständig arbeiten – nur bei riskanten Schritten fragen (empfohlen)",
|
|
@@ -662,6 +693,7 @@
|
|
|
662
693
|
"ui.help.cmd.pack": "Die Forschung in eine ZIP-Datei packen, damit jemand anderes weitermachen kann",
|
|
663
694
|
"ui.help.cmd.unpack": "Einen zugeschickten Stammbaum entpacken",
|
|
664
695
|
"ui.help.cmd.tidy": "Platz freigeben, den strom neben der Forschung belegt (erst gezeigt, nach Zustimmung)",
|
|
696
|
+
"ui.help.cmd.media.calibrate": "Die Größe der Scan-Ansichten für Agent und Modell der Forschung an ihren eigenen belegten Einträgen abstimmen (bezahlte Arbeit des Modells; die Kosten werden vorher genannt)",
|
|
665
697
|
"ui.help.cmd.check": "Die Forschung prüfen: alles in Ordnung, nichts an strom vorbei geändert",
|
|
666
698
|
"ui.help.cmd.config.get": "Eine Einstellung lesen",
|
|
667
699
|
"ui.help.cmd.config.set": "Eine Einstellung ändern",
|
|
@@ -978,7 +1010,7 @@
|
|
|
978
1010
|
"ui.run.which.bad": "Nummern aus der Liste, 1 bis {n}: z. B. 2 oder 1,4 oder 2-5.",
|
|
979
1011
|
"ui.run.limit": "Für eine Aufgabe hat der Agent höchstens {minutes} Minuten; dann hält strom ihn an und die Aufgabe kommt zurück in die Warteschlange (Einstellung run.minutes).",
|
|
980
1012
|
"ui.run.empty": "Die Warteschlange ist leer – dem Agenten im Gespräch sagen, was er suchen soll.",
|
|
981
|
-
"ui.run.browser": "· {name}: Bilder über den eigenen Browser –
|
|
1013
|
+
"ui.run.browser": "· {name}: Bilder über den eigenen Browser – Browser-Werkzeuge für {hosts} in den Sitzungen, deren Aufgabe sie brauchen kann; Chrome mit der Claude-Erweiterung muss laufen",
|
|
982
1014
|
"ui.run.browser.model": " Hinweis: Browser-Werkzeuge brauchen ein Modell, das seine Schritte prüft – Sonnet oder Opus, nicht {model}: strom config set model.lead sonnet",
|
|
983
1015
|
"ui.run.full": "· Berechtigungen: voll – der Agent darf alles außer dem, was die Berechtigungen des Stammbaums verbieten (zurück: strom config set agent.permissions auto)",
|
|
984
1016
|
"ui.menu.working.more": "Gerade arbeiten Agenten selbstständig: {n}.",
|
|
@@ -994,6 +1026,11 @@
|
|
|
994
1026
|
"ui.run.gate.no": "nein",
|
|
995
1027
|
"ui.run.gate.noanswer": "keine gültige Antwort (strom gate test)",
|
|
996
1028
|
"ui.run.stop.gate.declined": "nicht gestartet — die Bedingung „{name}“: {reason}",
|
|
1029
|
+
"ui.run.gate.cap": "· {name}: eine Obergrenze ist gesetzt – vor jeder Sitzung geprüft; kein „trotzdem starten“ geht darüber hinaus",
|
|
1030
|
+
"ui.run.stop.gate.cap": "die Obergrenze der Bedingung „{name}“ – {reason} (eine feste Grenze aus run.gate; kein „trotzdem starten“ geht darüber hinaus)",
|
|
1031
|
+
"ui.run.cap.finish": "⏳ {session}: das Limit des Agenten bei {used} % ({kind}) – die Sitzung ist gebeten aufzuschreiben, was gefunden wurde, und zu schließen; über der Obergrenze beginnt keine nächste Sitzung",
|
|
1032
|
+
"ui.run.limit.five_hour": "Fünf-Stunden-Fenster",
|
|
1033
|
+
"ui.run.limit.seven_day": "Woche",
|
|
997
1034
|
"ui.run.loop": "Weiterarbeiten lassen, solange es Arbeit gibt und die Bedingung „{name}“ es erlaubt",
|
|
998
1035
|
"ui.consent.gate.set": "Die Bedingung „{name}“ entscheiden lassen, wann der allein arbeitende Agent weitermacht?",
|
|
999
1036
|
"ui.consent.gate.unset": "Die Bedingung „{name}“ entfernen — der allein arbeitende Agent fragt sie nicht mehr?",
|
|
@@ -1318,6 +1355,24 @@
|
|
|
1318
1355
|
"log.research.done": "Richtung beendet: {name}",
|
|
1319
1356
|
"log.mode.archive": "Die Forschung ist jetzt ein Archiv",
|
|
1320
1357
|
"log.mode.research": "Die Forschung ist wieder eingeschaltet",
|
|
1358
|
+
"log.reading.loose": "Durchgelesene Bilder: {n}",
|
|
1359
|
+
"log.clips": "Einträge auf ihren Scans markiert: {n} von {total}",
|
|
1360
|
+
"log.transcripts": "Einträge aus ihren Ausschnitten abgeschrieben: {n} von {total}",
|
|
1361
|
+
"log.tree.create": "Forschung begonnen: {name}",
|
|
1362
|
+
"log.repair": "Die Daten auf den zuletzt versiegelten Stand zurückgesetzt",
|
|
1363
|
+
"log.chat.saved": "Nach einem Gespräch mit dem Agenten gespeichert",
|
|
1364
|
+
"log.migrate": "Die Daten des Stammbaums für ein neueres strom aktualisiert",
|
|
1365
|
+
"log.setting": "Einstellung der Forschung geändert: {key}",
|
|
1366
|
+
"log.image": "{name}, Bild {image}",
|
|
1367
|
+
"log.media.edit": "Bild geändert: {name}",
|
|
1368
|
+
"log.media.retract": "Bild zurückgezogen: {name}",
|
|
1369
|
+
"log.input.edit": "Material ergänzt: {name}",
|
|
1370
|
+
"log.input.skip": "Material als unbrauchbar beiseitegelegt: {name}",
|
|
1371
|
+
"log.input.sort": "Material sortiert: {name}",
|
|
1372
|
+
"log.record.edit": "Geändert: {name}",
|
|
1373
|
+
"ui.gate.timeout": "keine Antwort innerhalb von {s} s",
|
|
1374
|
+
"ui.gate.signal": "durch {signal} beendet",
|
|
1375
|
+
"ui.gate.status": "mit Exit-Status {status} beendet",
|
|
1321
1376
|
"ui.waiting.title": "Der Agent braucht eine Antwort ({n}):",
|
|
1322
1377
|
"ui.waiting.do": "Was zu tun ist: {what}",
|
|
1323
1378
|
"ui.waiting.ask": "der Agent sagt es im Gespräch",
|
|
@@ -1478,6 +1533,13 @@
|
|
|
1478
1533
|
"ui.gate.asked": "vor jeder Sitzung von strom run gefragt: {gate} (strom config unset run.gate: keine)",
|
|
1479
1534
|
"ui.gate.unset": "keine wird gefragt: strom config set run.gate <Name> (nur der Benutzer)",
|
|
1480
1535
|
"ui.gate.folder": "Ordner: {folder} – der hineinkopierte Ordner einer Bedingung ist installiert (die Schnittstelle: README.md dort)",
|
|
1536
|
+
"ui.gate.cap.week": "Obergrenze gesetzt: vor jeder Sitzung jedes Laufs gefragt; eine laufende Sitzung wird bei {pct} % der Woche um den Abschluss gebeten",
|
|
1537
|
+
"ui.gate.cap.window": "Obergrenze gesetzt: vor jeder Sitzung jedes Laufs gefragt; eine laufende Sitzung wird bei {pct} % des Fünf-Stunden-Fensters um den Abschluss gebeten",
|
|
1538
|
+
"ui.gate.test.go": "weiter",
|
|
1539
|
+
"ui.gate.test.wait": "warten bis {at}",
|
|
1540
|
+
"ui.gate.test.stop": "anhalten",
|
|
1541
|
+
"ui.gate.test.error": "Fehler – ein Lauf würde anhalten",
|
|
1542
|
+
"ui.gate.test.hard": "(Obergrenze: ein fester Halt, kein „trotzdem starten“)",
|
|
1481
1543
|
"ui.hook.none": "keine Hooks",
|
|
1482
1544
|
"ui.hook.on": "eingeschaltet: {hooks} (strom hook off <Name>)",
|
|
1483
1545
|
"ui.hook.unset": "keiner ist eingeschaltet: strom hook on <Name> (nur der Benutzer)",
|
|
@@ -1641,12 +1703,15 @@
|
|
|
1641
1703
|
"ui.arg.year": "Jahr",
|
|
1642
1704
|
"ui.error.arg.extra": "unerwartetes Argument „{arg}“",
|
|
1643
1705
|
"ui.error.arg.extra.hint": "strom help {cmd} — Werte mit Leerzeichen in Anführungszeichen",
|
|
1706
|
+
"ui.error.arg.extra.fix.hint": "richtig: {fix}",
|
|
1707
|
+
"ui.error.arg.extra.several.hint": "mehrere Datensätze: {line}",
|
|
1644
1708
|
"ui.error.option.is-arg": "{opt} ist bei {cmd} ein Argument, keine Option",
|
|
1645
1709
|
"ui.error.option.is-arg.hint": "{cmd} <{arg}>",
|
|
1646
1710
|
"ui.error.option.unknown": "unbekannte Option {opt} für {cmd}",
|
|
1647
1711
|
"ui.error.option.unknown.hint": "Optionen: {options} · strom help {path}",
|
|
1648
1712
|
"ui.error.option.unknown.none": "unbekannte Option {opt} für {cmd}",
|
|
1649
1713
|
"ui.error.option.unknown.none.hint": "{help}",
|
|
1714
|
+
"ui.error.option.unknown.status.hint": "eine Sicherheit (--status) gehört nur zu einer Angabe (E…), nie zu einem Namen oder einer Familie: strom cite E… S… --status probable|proven, strom event edit E… --status …",
|
|
1650
1715
|
"ui.error.option.no-value": "{opt} hat keinen Wert",
|
|
1651
1716
|
"ui.error.option.needs-value": "{opt} braucht einen Wert {value}",
|
|
1652
1717
|
"ui.error.option.needs-value.hint": "strom help {path}",
|
package/assets/method/core.md
CHANGED
|
@@ -4,11 +4,14 @@ You work to the Genealogical Proof Standard: search thoroughly, cite every
|
|
|
4
4
|
fact, analyse and correlate the evidence, resolve conflicts, and write the
|
|
5
5
|
conclusion so the next researcher can follow it.
|
|
6
6
|
|
|
7
|
+
<!-- for link verify enrich intake locate narrate links -->
|
|
7
8
|
- **Certainty is explicit.** `proven` — you read the original record yourself
|
|
8
9
|
and it states the fact directly. `probable` — good evidence, but indirect or a
|
|
9
10
|
single reading of hard handwriting. `possible` — weak evidence. `lead` — a
|
|
10
11
|
family story, a family tree, an index or a guess: something to check, never a
|
|
11
12
|
fact. Family trees and memories are leads, always.
|
|
13
|
+
<!-- end -->
|
|
14
|
+
<!-- for link verify enrich intake locate links -->
|
|
12
15
|
- **A namesake is not your person.** Identify by year, place, house, occupation,
|
|
13
16
|
spouse and parents — the mother's maiden name decides most cases. Two entries
|
|
14
17
|
that give one name different parents (another mother) are **two people** —
|
|
@@ -20,25 +23,36 @@ conclusion so the next researcher can follow it.
|
|
|
20
23
|
- **Negative results are results.** Every search is recorded (`strom search add
|
|
21
24
|
… --result negative`), with exactly what was covered. The most expensive
|
|
22
25
|
mistake is to search the same book twice.
|
|
26
|
+
<!-- end -->
|
|
23
27
|
- **Check the premise first.** Before opening anything, read the brief's
|
|
24
28
|
*Already known* — the searches of the task's books, people and surnames;
|
|
25
29
|
`strom searched <where>` only for a book, place or years it does not list.
|
|
30
|
+
Work that answers another open task as well closes it with yours:
|
|
31
|
+
`strom session close --done "…" --next "…" --also-done T…`.
|
|
32
|
+
<!-- for link verify enrich intake -->
|
|
26
33
|
- **Extract everything the first time** you open a record: names, ages, house
|
|
27
34
|
numbers, occupations, godparents, witnesses, midwife, remarks in the margin.
|
|
28
35
|
Opening the same page again later costs more than writing it down now.
|
|
36
|
+
<!-- end -->
|
|
37
|
+
<!-- for link verify enrich intake locate -->
|
|
29
38
|
- **Nothing is deleted.** A wrong fact is retracted with a reason; a changed
|
|
30
39
|
fact is edited with a reason. Contradictions become conflicts, competing
|
|
31
40
|
explanations become hypotheses — never silently pick one.
|
|
41
|
+
<!-- end -->
|
|
32
42
|
- **Write as you go.** Record each finding as soon as you have it. Your context
|
|
33
43
|
can be cut or summarised at any moment, and a session working alone is
|
|
34
44
|
stopped at its time limit (the brief says when; near the end strom's output
|
|
35
45
|
counts down): what is only in the conversation is lost, what is in strom is
|
|
36
|
-
not.
|
|
46
|
+
not.
|
|
47
|
+
<!-- for link verify enrich intake -->
|
|
48
|
+
Going through many images, record each stretch when it is done (every
|
|
37
49
|
ten images, each district or year): the finds, and `strom search add …
|
|
38
50
|
--pages` for what was searched in vain — never all of it at the end.
|
|
39
51
|
A fact of a person goes on the person (`event add`); a note or the diary is
|
|
40
52
|
for what is not a fact yet. What you held back while who it was stayed a
|
|
41
53
|
hypothesis goes on the person when you decide it.
|
|
54
|
+
<!-- end -->
|
|
55
|
+
<!-- for link verify enrich intake locate -->
|
|
42
56
|
- **Lessons belong where they apply.** A quirk of a register (its calibration,
|
|
43
57
|
two years per page, a hand that writes 7 like 1) goes to `strom lesson add
|
|
44
58
|
--on B…`, so whoever opens that book next sees it.
|
|
@@ -50,6 +64,8 @@ conclusion so the next researcher can follow it.
|
|
|
50
64
|
queue holds back every other task about people off the tree
|
|
51
65
|
(`strom task list --off-tree`); they come back by themselves once the link
|
|
52
66
|
is recorded.
|
|
67
|
+
<!-- end -->
|
|
68
|
+
<!-- for link verify enrich intake links -->
|
|
53
69
|
- **Say what a hypothesis would connect.** A hypothesis about a connection —
|
|
54
70
|
whose child, the same person, a couple, siblings — gets each variant's links
|
|
55
71
|
when you record or argue it: `strom hypothesis link H… B --child P… --of F…`
|
|
@@ -63,11 +79,25 @@ conclusion so the next researcher can follow it.
|
|
|
63
79
|
(`strom hypothesis variant H… "<claim>"`). Deciding one whose variants have
|
|
64
80
|
links names the variant it is decided for:
|
|
65
81
|
`strom hypothesis decide H… --variant B --decision "…"`.
|
|
82
|
+
<!-- end -->
|
|
83
|
+
<!-- for links -->
|
|
84
|
+
Read each variant whole (`strom hypothesis show H…`) and the people it
|
|
85
|
+
names (`strom person show P…`, `strom family show F…`); link only what its
|
|
86
|
+
words say beyond doubt — a namesake stays out. A link its claim does not say
|
|
87
|
+
comes off with `strom hypothesis link H… B --remove`; a variant that
|
|
88
|
+
connects nothing clear keeps none, and one that says what the tree records
|
|
89
|
+
already (marked so) has no link to make — the hypothesis stays open until
|
|
90
|
+
the records decide it. You read no records here: what would
|
|
91
|
+
decide a hypothesis is a task (`strom task add … --about H…`), not a search now.
|
|
92
|
+
<!-- end -->
|
|
66
93
|
- **Stay within the task.** New questions become new tasks (`strom task add`,
|
|
67
|
-
with where and done-when), not detours.
|
|
94
|
+
with where and done-when), not detours.
|
|
95
|
+
<!-- for link verify enrich intake locate -->
|
|
96
|
+
A new task whose images are not here
|
|
68
97
|
gets them now: through the archive's connector (built first when it has
|
|
69
98
|
none), or — where the archive allows only that — it waits at once for what
|
|
70
99
|
the user should download (`strom task wait T… --images B…:<numbers> --on
|
|
71
100
|
"…"`); a later session would only find that out.
|
|
101
|
+
<!-- end -->
|
|
72
102
|
- **Hand over cleanly.** Close with a summary of what was proven, what was
|
|
73
103
|
searched in vain, and the next cheapest step.
|
package/assets/method/reading.md
CHANGED
|
@@ -7,30 +7,37 @@ search depends on** (a surname, a birthplace, a parish) is read again on a
|
|
|
7
7
|
crop at full resolution before it is recorded; what stays unsure is recorded
|
|
8
8
|
as unsure and said so.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
Look at as few pixels as the question needs and write down what you saw at
|
|
11
|
+
once: after about 30 views write down what you found before you open more, and
|
|
12
|
+
never open again a view cleared from your context — your notes hold it.
|
|
13
13
|
|
|
14
14
|
- **Look only through views**: `strom media view B0001:57` (record set and
|
|
15
15
|
image number) makes a file in `.strom/views/` — open that file. Whole images
|
|
16
|
-
come reduced:
|
|
16
|
+
(and `--grid`) come reduced: for finding the entry, never for reading it.
|
|
17
|
+
**Transcribe only from a crop** at full resolution (`--crop`, or `--half`
|
|
18
|
+
where the entry fills the page). A whole view unclear, or the entry not where
|
|
19
|
+
expected: `--half both` before calling it not found — a negative search only
|
|
20
|
+
after the pages were seen at full resolution.
|
|
17
21
|
- **The views of a scan, or of a batch, in one call**, then open all the files
|
|
18
22
|
it lists together — not one call and one look per view:
|
|
19
23
|
`strom media view B0001:57-60 --half both` (the two pages of each double
|
|
20
24
|
page, where they are sharper than one view of it), `--crop … --crop …`
|
|
21
25
|
(several entries of one image), `--split 2x2` (a page in overlapping parts),
|
|
22
26
|
`strom media view B0001 --page 112 113`. Each file comes with its image, page
|
|
23
|
-
and `--clip`. At most 12 images and 24 views in one call
|
|
27
|
+
and `--clip`. At most 12 images and 24 views in one call: with 4 views an
|
|
28
|
+
image (halves and crops), 6 images a call.
|
|
24
29
|
- **Find, then crop.** `--grid` overlays tenths with labels; read off where the
|
|
25
30
|
entry is and ask for exactly that part: `--crop 0.05,0.40,0.45,0.18` (x, y,
|
|
26
31
|
width, height as fractions) or `--half left|right` for one page of a spread.
|
|
27
32
|
A crop comes at full resolution (small ones enlarged). `--contrast` for faded
|
|
28
33
|
ink, `--rotate 90` for sideways pages.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
in that line: `strom fetch
|
|
32
|
-
|
|
33
|
-
part
|
|
34
|
+
<!-- for link verify enrich part -->
|
|
35
|
+
- **Too small to read?** A crop said enlarged: the scan has no more detail.
|
|
36
|
+
A connector that fetches a part sharper says so in that line: `strom fetch
|
|
37
|
+
<connector> --recordset B0001 --images 57 --crop …`; the same crop viewed
|
|
38
|
+
again comes from it. Whole images first, a part only where entries need
|
|
39
|
+
it: an archive's hourly cap stops the rest.
|
|
40
|
+
<!-- end -->
|
|
34
41
|
- **Browsing a book is a reader's job**: `strom read B0001 --images 40-69
|
|
35
42
|
--question "…"` — readers in batches of ten, each with the full question.
|
|
36
43
|
Their reports stay in notes/readings/; `strom read` ends with what they
|
|
@@ -44,14 +51,14 @@ about 80 views write down what you found before you open more.
|
|
|
44
51
|
It waits for its readers (often ten minutes or more): run it in the
|
|
45
52
|
foreground and let it finish — your session ends with your turn, and
|
|
46
53
|
whatever is left running in the background ends with it.
|
|
47
|
-
(
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
(A scan-reader subagent where your agent has one, strom-scan-reader, or your
|
|
55
|
+
own subagents — on your own model, never a faster one — read too, about six scans
|
|
56
|
+
each with the whole question; what they report is lost with
|
|
57
|
+
your session unless you write it down: record each report as it comes back,
|
|
58
|
+
before you send the next readers.) Only the entries
|
|
50
59
|
that will be cited need your own eyes, at full resolution.
|
|
51
60
|
- Old handwriting is decoded, not copied: never a weaker model for handwriting,
|
|
52
61
|
never a guess. "Illegible" is a valid and valuable answer.
|
|
53
|
-
- **Extract everything the first time**: names, ages, house numbers,
|
|
54
|
-
occupations, godparents, witnesses, midwife, remarks in the margin.
|
|
55
62
|
- **Report image by image, as you go**: the image and page, what was found (or
|
|
56
63
|
nothing), what was illegible and where, the hand, how sure each name is.
|
|
57
64
|
- **Cite the image, and where the entry is on it**: `strom source add …
|
|
@@ -61,12 +68,16 @@ about 80 views write down what you found before you open more.
|
|
|
61
68
|
numbering jumps) were not searched: say so in `--note` (strom read puts the
|
|
62
69
|
gaps its readers saw there), or leave them out of the range
|
|
63
70
|
(`--pages 40-52,55-69`).
|
|
71
|
+
<!-- for verify enrich intake -->
|
|
64
72
|
- Page ↔ image: `strom recordset calibrate B0001 --point 57=112` (measured on
|
|
65
73
|
the image, never guessed); then `strom media view B0001 --page 112` works.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
<!-- end -->
|
|
75
|
+
<!-- for link verify enrich connector -->
|
|
76
|
+
- **No images here yet:** the book's connector fetches them through strom
|
|
77
|
+
(the brief's record set gives the exact `strom fetch`) — only the images you
|
|
78
|
+
need, never a whole book "just in case".
|
|
79
|
+
<!-- end -->
|
|
80
|
+
<!-- for link verify enrich no-connector -->
|
|
70
81
|
- **The archive has no connector yet: build one — now, you.** The user does
|
|
71
82
|
not know connectors exist and will not ask for one. Tell them in a sentence
|
|
72
83
|
("for this archive I am preparing a downloader; it will fetch only the images
|
|
@@ -74,10 +85,14 @@ about 80 views write down what you found before you open more.
|
|
|
74
85
|
follow its DISCOVERY.md (the portal's terms and robots.txt first, official
|
|
75
86
|
exports preferred), test it with `strom connector test`, then fetch. It is
|
|
76
87
|
built once per archive and serves every later task.
|
|
88
|
+
<!-- end -->
|
|
77
89
|
- You never download from an archive yourself (curl, a script, your browser
|
|
78
|
-
tools) — only through a connector, paced by strom.
|
|
90
|
+
tools) — only through a connector, paced by strom.
|
|
91
|
+
<!-- for link verify enrich no-connector by-hand -->
|
|
92
|
+
The user saves images by
|
|
79
93
|
hand only where the archive does not allow automation (the connector then
|
|
80
|
-
finds books and gives links only)
|
|
94
|
+
finds books and gives links only), where its connector only finds books, or
|
|
95
|
+
where a check stops it. Ask with
|
|
81
96
|
`strom task wait T… --images B0001:40-69 --on "…"`: strom makes the folder
|
|
82
97
|
of the inbox they go into, shows it to the user with the book's link, and
|
|
83
98
|
checks the numbers of what arrives. Write `--on` for the user, in their
|
|
@@ -88,3 +103,4 @@ about 80 views write down what you found before you open more.
|
|
|
88
103
|
the entry and save that view too (40a.jpg); a full-resolution scan can be
|
|
89
104
|
ordered from the archive. Then take the next task; when the images are
|
|
90
105
|
registered the task comes back by itself.
|
|
106
|
+
<!-- end -->
|
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Record a found entry in one batch: write the lines to a file in notes/ and run
|
|
4
4
|
`strom batch --file notes/<file>` — all or nothing: when a line fails nothing is
|
|
5
|
-
written and every failing line is said at once; fix them
|
|
6
|
-
|
|
5
|
+
written and every failing line is said at once; fix them in the file with your
|
|
6
|
+
file-editing tool, not with sed or another shell command (the tree's rules let
|
|
7
|
+
the shell run strom, not edit files), run it again. `#name` labels what a line
|
|
8
|
+
creates, `@name` uses it later; a found search comes after the source it found
|
|
9
|
+
(`--found @s`).
|
|
7
10
|
|
|
8
11
|
source add "Baptism of Jan Novák 1885" --kind baptism --recordset B0001 --clip B0001:57@0.05,0.40,0.45,0.18 --locator "pag. 112, entry 2" --language la --information primary --transcript @notes/entry.txt #s
|
|
9
12
|
event add P0001 CHR --date "25 JUN 1885" --place "Týnec" --house 13 --cite @s --quote "baptizatus est" --with "godparent:Marie Dvořáková" --with "midwife:Anna Nová" --with "officiant:P. Josef Kříž" --status proven
|
|
@@ -22,7 +25,8 @@ written and every failing line is said at once; fix them, run it again.
|
|
|
22
25
|
- `--transcript` is the entry's words as they stand in it — its own language,
|
|
23
26
|
spelling and abbreviations, line by line, unread letters `[?]`; the Strom app
|
|
24
27
|
shows them next to the entry's image. Every entry read gets them.
|
|
25
|
-
- A fact already in the tree gets the citation (`cite E
|
|
28
|
+
- A fact already in the tree gets the citation (`cite E…`, `--status` is a
|
|
29
|
+
fact's only — a name or a family cited takes none), not a second fact —
|
|
26
30
|
and what the record adds to it: `event edit E… --age husband:27 --age wife:17
|
|
27
31
|
--house 21 --with "witness:…" --with "officiant:…"` (filling in needs no reason).
|
|
28
32
|
- The names a record gives go on the person: `name add` (a maiden name completes
|
|
@@ -49,6 +49,17 @@ One line of JSON on stdout (the last line) may say more:
|
|
|
49
49
|
- `reason`: why, for the user (in their language: `STROM_LANG`).
|
|
50
50
|
- `wait` (seconds) or `until` (a time): when to ask again. Without them: in
|
|
51
51
|
15 minutes; never sooner than a minute.
|
|
52
|
+
- `hard` (`true`, with status 1 or 2): this answer is the user's own hard
|
|
53
|
+
limit — a cap set in `run.gate`. The run ends, saying the reason; no
|
|
54
|
+
"start anyway" goes past it.
|
|
55
|
+
- `watch` (`{"kind": "seven_day", "finish": 0.99}`): the gate holds a cap on
|
|
56
|
+
that window of the agent's plan (`five_hour` or `seven_day`). strom then asks
|
|
57
|
+
it before **every** session, also of the runs you started yourself (there
|
|
58
|
+
only its hard stop counts), and asks a session at work to finish — write
|
|
59
|
+
down what it found and close — once the agent says the window's use reached
|
|
60
|
+
`finish` (0–1). A gate that never says `watch` is asked as before.
|
|
61
|
+
|
|
62
|
+
Both are optional; an older strom ignores them.
|
|
52
63
|
|
|
53
64
|
Plain text instead of JSON is the reason.
|
|
54
65
|
|
|
@@ -66,9 +77,13 @@ Environment variables, besides the user's own:
|
|
|
66
77
|
| `STROM_SESSIONS` | sessions this run has had |
|
|
67
78
|
| `STROM_COST_USD` | what this run has cost so far (as the agent reported it) |
|
|
68
79
|
| `STROM_NEXT_TASK` | the task the next session would take |
|
|
80
|
+
| `STROM_AGENT_LIMITS` | what the agent said of its plan's limits in this run, when it said any (Claude Code): JSON `[{"kind": "five_hour" \| "seven_day", "used": 0.97, "resetsAt": "<ISO time>", "at": "<when it said it>"}]` — absent otherwise; an older gate ignores it |
|
|
69
81
|
|
|
70
82
|
A session already at work is never stopped by a gate: it is asked between
|
|
71
|
-
sessions only (a session's own time limit is `run.minutes`).
|
|
83
|
+
sessions only (a session's own time limit is `run.minutes`). Under a cap
|
|
84
|
+
(`watch`) the session is asked to finish, as `strom session finish` does: its
|
|
85
|
+
agent hears it from its next strom command and starts no new reader; work it
|
|
86
|
+
delegated inside itself (a subagent) strom cannot stop half-way.
|
|
72
87
|
|
|
73
88
|
The gate holds the runs that go on by themselves: `strom run --loop` and
|
|
74
89
|
`--until`. Tasks you start yourself (one, `--max 3`, `--task T0007`, "work
|
|
@@ -91,5 +106,17 @@ Not enough in hand: it waits until the week has caught up (past the reset: the
|
|
|
91
106
|
new week's share). A used-up session: until it resets. Another agent than
|
|
92
107
|
Claude Code: it lets the work go on.
|
|
93
108
|
|
|
109
|
+
**A cap** — your own hard stop for the week:
|
|
110
|
+
|
|
111
|
+
strom config set run.gate "claude-usage 10 --cap 95"
|
|
112
|
+
|
|
113
|
+
At 95 % of the week used no session starts: in every run, `--max` and
|
|
114
|
+
`--task` and the menu's too, asked before each session, and no "start anyway"
|
|
115
|
+
goes past it — the run ends saying the use and when the week resets. A session
|
|
116
|
+
at work is asked to finish when Claude Code says the week is at 99 %. What
|
|
117
|
+
Claude Code said in the run (`STROM_AGENT_LIMITS`, at most 15 minutes old) is
|
|
118
|
+
read instead of asking `claude -p /usage`. `--cap` alone: the cap without the
|
|
119
|
+
pace (`claude-usage --cap 95`).
|
|
120
|
+
|
|
94
121
|
A gate is a program on this computer, put here by you (or by strom); the
|
|
95
122
|
`.gitignore` of the plugins folder keeps it out of any repository.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"interface": 1,
|
|
3
3
|
"title": "Claude usage",
|
|
4
|
-
"description": "Keeps working alone to the daily ration of your Claude subscription: a session starts only while the week's usage is at least n points behind the share of the week gone (a day ≈ 14.3): strom config set run.gate \"claude-usage 10\" (without a number: 0).",
|
|
4
|
+
"description": "Keeps working alone to the daily ration of your Claude subscription: a session starts only while the week's usage is at least n points behind the share of the week gone (a day ≈ 14.3): strom config set run.gate \"claude-usage 10\" (without a number: 0). A cap: \"claude-usage 10 --cap 95\" — at 95 % of the week no session starts, in any run, and no \"start anyway\" goes past it.",
|
|
5
5
|
"command": [
|
|
6
6
|
"node",
|
|
7
7
|
"gate.ts"
|