strom-research 1.13.2-beta.7 → 1.13.2-beta.9
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 +57 -8
- package/assets/lang/de.json +57 -8
- package/assets/method/enrich.md +4 -0
- package/assets/method/locate.md +1 -1
- package/assets/method/reading.md +14 -15
- package/dist/agents/effort.js +32 -0
- package/dist/agents/files.js +41 -6
- package/dist/agents/profiles.js +17 -5
- package/dist/agents/scanreader.js +4 -1
- package/dist/brief/brief.js +16 -5
- package/dist/brief/sheet.js +4 -1
- package/dist/cli/context.js +7 -1
- package/dist/cli/execute.js +19 -1
- package/dist/cli/format.js +9 -0
- package/dist/cli/main.js +13 -5
- package/dist/cli/menu-parts.js +6 -3
- package/dist/cli/menu-settings.js +91 -80
- package/dist/cli/menu.js +2 -2
- package/dist/cli/tunereset.js +73 -3
- package/dist/cli/ui.js +54 -8
- package/dist/cli/wizard.js +24 -0
- package/dist/commands/calibrate.js +33 -22
- package/dist/commands/connectors.js +128 -49
- package/dist/commands/delegate.js +37 -0
- package/dist/commands/grep.js +110 -0
- package/dist/commands/guide.js +10 -3
- package/dist/commands/index.js +3 -0
- package/dist/commands/media.js +86 -17
- package/dist/commands/meta.js +2 -2
- package/dist/commands/read.js +10 -7
- package/dist/commands/readers.js +3 -3
- package/dist/commands/readings.js +6 -6
- package/dist/commands/session.js +23 -13
- package/dist/commands/setup.js +123 -29
- package/dist/commands/sources.js +13 -1
- package/dist/commands/web.js +88 -0
- package/dist/core/changelog.js +24 -8
- package/dist/core/config.js +17 -5
- package/dist/core/delegate.js +159 -0
- package/dist/core/errors.js +6 -3
- package/dist/core/grep.js +239 -0
- package/dist/core/lock.js +5 -2
- package/dist/core/media.js +99 -9
- package/dist/core/metrics.js +270 -1
- package/dist/core/modelkey.js +278 -0
- package/dist/core/net.js +261 -15
- package/dist/core/phrases.js +4 -0
- package/dist/core/readstats.js +194 -43
- package/dist/core/self.js +215 -0
- package/dist/core/tree.js +1 -1
- package/dist/core/tune.js +226 -44
- package/dist/core/tuneask.js +29 -14
- package/dist/core/tunereset.js +54 -34
- package/dist/core/viewsizes.js +43 -21
- package/dist/core/web.js +592 -0
- package/dist/core/which.js +3 -2
- package/dist/runners/antigravity.js +25 -5
- package/dist/runners/claude.js +33 -9
- package/dist/runners/codex.js +22 -1
- package/dist/runners/grok.js +43 -9
- package/dist/runners/jsonl.js +19 -0
- package/dist/runners/opencode.js +16 -3
- package/dist/runners/runner.js +19 -0
- package/package.json +1 -1
package/assets/lang/cs.json
CHANGED
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"ui.menu.start": "Začít výzkum s agentem",
|
|
89
89
|
"ui.menu.run": "Nechat agenta pracovat samotného",
|
|
90
90
|
"ui.menu.waitlist": "Co čeká",
|
|
91
|
-
"ui.menu.settings": "Nastavení: agent, samostatná práce, zprávy, archivy,
|
|
91
|
+
"ui.menu.settings": "Nastavení: agent, samostatná práce, zprávy, archivy, údržba",
|
|
92
92
|
"ui.menu.doctor": "Kontrola instalace",
|
|
93
93
|
"ui.settings.help": "Nápověda: příkazy pro člověka",
|
|
94
94
|
"ui.menu.trees": "Jiný rodokmen · poslat nebo přijmout",
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"ui.effort.default": "výchozí nastavení agenta {agent}",
|
|
151
151
|
"ui.doc.codex": "Codex",
|
|
152
152
|
"ui.chat.app.model.chosen": "V aplikaci {app} zvolit pro výzkum model {model} (zvolený v nastavení).",
|
|
153
|
-
"ui.settings.model": "
|
|
153
|
+
"ui.settings.model": "Jen model výzkumu ({agent}): {model}",
|
|
154
154
|
"ui.settings.model.own": "vlastní model agenta",
|
|
155
155
|
"ui.views.title": "Ladění čtení snímků · {agent}: snímků {n}, knih {books}, velikosti {sizes} px",
|
|
156
156
|
"ui.views.find": "Nalezení zápisu na celém snímku:",
|
|
@@ -250,6 +250,10 @@
|
|
|
250
250
|
"ui.tune.book.unread": "staženo a nepřečteno {n} z {of}",
|
|
251
251
|
"ui.tune.hosts": "Archivy:",
|
|
252
252
|
"ui.tune.host": " {host}: sezení {sessions} · požadavky {requests} ({perSession} na sezení, {perImage} na snímek) · čekání {wait} min · limit vyčerpán {later}×",
|
|
253
|
+
"ui.tune.web": "Webové nástroje agenta:",
|
|
254
|
+
"ui.tune.web.host": " {host}: webové požadavky {n} · sezení {sessions} · nejvíc {most} v jednom",
|
|
255
|
+
"ui.tune.web.searches": " hledání na webu: {n}",
|
|
256
|
+
"ui.tune.web.many": " víc než {limit} stránek jednoho webu v jednom sezení: šetrnější cestou je konektor (strom connector new)",
|
|
253
257
|
"ui.tune.signals": "Nad obvyklou mírou téhož agenta a modelu:",
|
|
254
258
|
"ui.tune.signals.none": "Nic nad obvyklou mírou téhož agenta a modelu.",
|
|
255
259
|
"ui.tune.sig.M1": " {scope}: cena za sken {value}, {ratio}× obvyklé ({base})",
|
|
@@ -265,6 +269,7 @@
|
|
|
265
269
|
"ui.tune.sig.M9": " {scope}: {value} z {n} záporů na slabých skenech (pohledy převážně zvětšené)",
|
|
266
270
|
"ui.tune.sig.M10": " čtenáři bez výsledku: {n} z posledních {of}",
|
|
267
271
|
"ui.tune.sig.M11": " {scope}: staženo a nepřečteno {value} ({n} z {of} snímků)",
|
|
272
|
+
"ui.tune.sig.M12": " dlouhé úseky bez vyčištění: {n} z posledních {of} sezení přes {ctx} tokenů (zhruba {views} pohledů, {peak} tokenů)",
|
|
268
273
|
"ui.tune.short": "Zatím málo pro srovnání: {list} — přibude s dalšími sezeními.",
|
|
269
274
|
"ui.tune.m.M1": "cena za sken",
|
|
270
275
|
"ui.tune.m.M2": "pohledy na sken",
|
|
@@ -275,6 +280,7 @@
|
|
|
275
280
|
"ui.tune.m.M8": "čekání na archiv",
|
|
276
281
|
"ui.tune.m.M10": "čtenáři bez výsledku",
|
|
277
282
|
"ui.tune.m.M11": "nepřečtené snímky",
|
|
283
|
+
"ui.tune.m.M12": "dlouhé úseky",
|
|
278
284
|
"ui.tune.recommend": "Doporučení, která strom sám nenastavil (rozhoduje člověk, nebo je tune.auto vypnuté):",
|
|
279
285
|
"ui.tune.rec.A1": " {scope}: celý snímek ve velikosti čtení, dvoustrana v půlkách, výřez aspoň 1:1 — ze skenů, které už tu jsou, žádný požadavek navíc",
|
|
280
286
|
"ui.tune.rec.A2": " menší dávky: skeny na čtenáře asi {to} místo {from} — víc volání, menší kontext",
|
|
@@ -315,6 +321,26 @@
|
|
|
315
321
|
"ui.tune.reset.scope.all": "všechny modely",
|
|
316
322
|
"ui.tune.what.calibration": "kalibrované velikosti",
|
|
317
323
|
"ui.tune.what.answer": "odpověď na {kind}",
|
|
324
|
+
"ui.tune.why.calibrated": "změřeno na {n} známých záznamech",
|
|
325
|
+
"ui.tune.why.answered": "zodpovězeno",
|
|
326
|
+
"ui.tune.why.answered.terminal": "zodpovězeno v terminálu",
|
|
327
|
+
"ui.tune.why.answered.window": "zodpovězeno v okně systému",
|
|
328
|
+
"ui.tune.why.answered.app": "zodpovězeno v aplikaci Strom",
|
|
329
|
+
"ui.tune.why.measured": "z naměřených čtení",
|
|
330
|
+
"ui.tune.why.last": "{n} z posledních {of}",
|
|
331
|
+
"ui.tune.why.of": "{n} z {of}",
|
|
332
|
+
"ui.tune.why.M5": "nejisté {value} proti {base} u ostatních knih (n={n})",
|
|
333
|
+
"ui.tune.why.M6": "zvětšené pohledy {value} proti {base} (n={n})",
|
|
334
|
+
"ui.tune.why.M7": "portál ostřejší výřez nedal {n}×",
|
|
335
|
+
"ui.tune.why.M8": "sezení s čekáním na limit archivu: {count}",
|
|
336
|
+
"ui.tune.why.M8.wait": "sezení s čekáním na limit archivu: {count} ({wait} min, vyčerpán {later}×)",
|
|
337
|
+
"ui.tune.why.M11": "staženo a nepřečteno {value} ({count} snímků)",
|
|
338
|
+
"ui.tune.why.M3": "pohledy znovu otevřené po vyčištění kontextu: {count} čtenářů",
|
|
339
|
+
"ui.tune.why.M4": "kontext se vyčistil: {count} čtenářů",
|
|
340
|
+
"ui.tune.why.M4.ctx": "kontext se vyčistil: {count} čtenářů, poprvé zhruba při {ctx} tokenech",
|
|
341
|
+
"ui.tune.why.M10": "čtenáři bez výsledku: {count}",
|
|
342
|
+
"ui.tune.why.A3": "kontext se vyčistil: {count} čtenářů, poprvé zhruba při {ctx} tokenech, pohled čtenáře zhruba {view} tokenů",
|
|
343
|
+
"ui.tune.why.A3.long": "kontext se nevyčistil, a přesto přerostl {ctx} tokenů: {count} sezení, pohled čtenáře zhruba {view} tokenů",
|
|
318
344
|
"ui.tune.unknownKey": "agent a model nezaznamenány (starší záznamy)",
|
|
319
345
|
"ui.o.views": "snímky",
|
|
320
346
|
"ui.settings.views": "Vyladit čtení snímků ({state})",
|
|
@@ -327,6 +353,8 @@
|
|
|
327
353
|
"ui.doc.tuneworse": "po samoladění",
|
|
328
354
|
"ui.doc.tuneworse.a": "{scope}: čte se hůř od změny stromu z {at} ({what}) — {metric} {before} → {after} ({nb} skenů před, {na} po); doporučeno ji vrátit",
|
|
329
355
|
"ui.doc.tuneworse.b": "{scope}: dražší od změny stromu z {at} ({what}) — {before} → {after} na sken ({nb} skenů před, {na} po), čtení o nic jistější; doporučeno ji ponechat (šla k přesnosti), vrátit ji jde",
|
|
356
|
+
"ui.doc.web": "agenti na webu",
|
|
357
|
+
"ui.doc.web.many": "mnoho stránek jednoho webu v jednom sezení přes vlastní webové nástroje agenta: {list} — konektor je k webu šetrnější",
|
|
330
358
|
"ui.setup.level": "Co smí agent dělat bez ptaní?",
|
|
331
359
|
"ui.setup.level.ask": "Ptát se mě na všechno mimo výzkum",
|
|
332
360
|
"ui.setup.level.auto": "Pracovat samostatně – ptát se jen u riskantních kroků (doporučeno)",
|
|
@@ -354,7 +382,9 @@
|
|
|
354
382
|
"ui.consent.connector.direct": "Pozor: jeho kód se připojuje k síti sám, mimo omezovač stromu.",
|
|
355
383
|
"ui.consent.connector.unfenced": "Pozor: spouští program, který strom neohraničí ({run}) – může číst a měnit všechny soubory tohoto uživatele, spouštět jiné programy a připojit se kamkoli. Po každé změně jeho kódu se dotaz zopakuje.",
|
|
356
384
|
"ui.consent.connector.terms": "Podmínky užití archivu: {terms}",
|
|
357
|
-
"ui.consent.host.unblock": "{host}
|
|
385
|
+
"ui.consent.host.unblock": "Na {host} se nesahá (odmítl požadavky, nebo řekl, že je jeho limit vyčerpán). Zrušit to hned – jen pokud archiv řekl, že je to v pořádku?",
|
|
386
|
+
"ui.host.unblocked": "{host}: už se na něj zase smí – strom se ho bude znovu ptát, pomalu",
|
|
387
|
+
"ui.host.unblock.kept": "Nic se nezměnilo: na {host} se dál nesahá.",
|
|
358
388
|
"ui.menu.otheragent": "Tentokrát mluvit s jiným agentem nebo jinde",
|
|
359
389
|
"ui.o.title": "strom {version} — nástroj pro genealogický výzkum s AI agenty",
|
|
360
390
|
"ui.o.rule": "Tady jsou doklady výzkumu; měnit je jen příkazy strom. Nový agent: strom guide",
|
|
@@ -418,6 +448,7 @@
|
|
|
418
448
|
"ui.run.start.session": "▶ {session} · {task} {what}",
|
|
419
449
|
"ui.run.parked": " · {task} odložen: {n} sezení za sebou nic nezapsalo",
|
|
420
450
|
"ui.run.denied": " · oprávnění odmítla {n}×: {what}",
|
|
451
|
+
"ui.run.refused": " · strom odmítl {n}× (limit {per} webových požadavků na jeden server v sezení nebo limit serveru): {what}",
|
|
421
452
|
"session.user": "zastaveno uživatelem",
|
|
422
453
|
"session.run": "běh se zastavil dřív, než sezení skončilo (přerušení, nebo vypnutý počítač)",
|
|
423
454
|
"session.chat": "rozhovor skončil dřív, než se sezení zavřelo",
|
|
@@ -434,7 +465,7 @@
|
|
|
434
465
|
"ui.doc.disk": "místo vedle výzkumů",
|
|
435
466
|
"ui.doc.disk.ok": "vedle výzkumů {size}, v mezích",
|
|
436
467
|
"ui.doc.disk.tree": "{name}: jde uvolnit {size} (v něm: strom tidy)",
|
|
437
|
-
"ui.doc.disk.fix": "strom tidy v rodokmenu (v menu Nastavení → Místo na disku) – nejdřív se zeptá",
|
|
468
|
+
"ui.doc.disk.fix": "strom tidy v rodokmenu (v menu Nastavení → Údržba → Místo na disku) – nejdřív se zeptá",
|
|
438
469
|
"ui.compact.done": "Historie rodokmenu zabalená: .git {before} → {after}. Ve výzkumu se nic nezměnilo.",
|
|
439
470
|
"ui.compact.small": "Historie rodokmenu je malá ({size}): není co balit.",
|
|
440
471
|
"ui.compact.busy": "Na rodokmenu se pracuje: historie se zabalí, až práce skončí.",
|
|
@@ -461,6 +492,8 @@
|
|
|
461
492
|
"ui.doc.innode": "strom {version} v Node {node}",
|
|
462
493
|
"ui.doc.fence": "stahovače v ohrádce",
|
|
463
494
|
"ui.doc.fence.net": "Node {node}: stahovače běží v ohrádce, ale síť jim zavře až Node 25 nebo novější",
|
|
495
|
+
"ui.doc.shim": "strom pro agenty",
|
|
496
|
+
"ui.doc.shim.codepage": "složka instalace má písmena mimo ASCII: hooky agentů a jejich strom přes výzkum závisí na kódové stránce konzole — složka instalace bez nich tomu předejde",
|
|
464
497
|
"ui.doc.oldnode": "Node {node} je příliš starý (potřeba 22.18 nebo novější)",
|
|
465
498
|
"ui.doc.missing": "chybí",
|
|
466
499
|
"ui.doc.notsetup": "zatím nenastaveno",
|
|
@@ -682,6 +715,8 @@
|
|
|
682
715
|
"ui.run.follow": "Sledovat mezitím práci živě v aplikaci Strom?",
|
|
683
716
|
"ui.run.follow.later": "Aplikace Strom se otevře, až agent začne první sezení.",
|
|
684
717
|
"ui.consent.host.pace": "Vlastní tempo pro {host}: nejméně {seconds} s mezi dvěma požadavky, {cap}. Příliš rychlé stahování zpomalí archiv všem a může vést k zablokování IP adresy tohoto počítače – nastavit?",
|
|
718
|
+
"ui.web.ask": "Už {n} požadavků na {host} v tomto sezení. Šetrnější cesta k dalším stránkám nebo položkám tohoto serveru: postavit pro něj hned konektor (strom connector new {name} --url {url}), který dodrží tempo serveru, robots.txt a jeho podmínky. Přesto povolit další?",
|
|
719
|
+
"ui.web.ask.have": "Už {n} požadavků na {host} v tomto sezení. Více stránek nebo položek tohoto serveru je šetrnější stahovat přes jeho konektor {connector}, který tu už je a dodrží tempo serveru, robots.txt a jeho podmínky. Přesto povolit další?",
|
|
685
720
|
"ui.pace.cap": "nejvýš {n} za hodinu",
|
|
686
721
|
"ui.pace.nocap": "bez hodinového limitu",
|
|
687
722
|
"ui.o.results.offered": "{file} – pro aplikaci Strom, tady nenainstalovanou; uživatel o ní už ví – zmiň ji znovu, jen když chce vidět výsledky (strom app install, pak strom app)",
|
|
@@ -904,7 +939,7 @@
|
|
|
904
939
|
"ui.tidy.done": "✓ Uvolněno {size}. Odteď to strom po každém sezení udržuje v pořádku sám.",
|
|
905
940
|
"ui.tidy.no": "Nic se nesmazalo.",
|
|
906
941
|
"ui.consent.tidy": "Uvolnit asi {size} vedle výzkumu {name} (staré záznamy sezení, náhledy skenů, dávno zapsaná poslání)? Výzkum i jeho skeny zůstanou.",
|
|
907
|
-
"ui.tidy.hint": "Vedle výzkumu si strom drží {strom}, z toho jde uvolnit {size}: strom tidy (v menu Nastavení → Místo na disku)",
|
|
942
|
+
"ui.tidy.hint": "Vedle výzkumu si strom drží {strom}, z toho jde uvolnit {size}: strom tidy (v menu Nastavení → Údržba → Místo na disku)",
|
|
908
943
|
"ui.error.consent": "tady je potřeba souhlas – {question}",
|
|
909
944
|
"ui.error.consent.hint": "spustit ve vlastním terminálu: {set}",
|
|
910
945
|
"ui.status.disk": "Na disku: výzkum {research} · vedle něj si strom drží {strom}",
|
|
@@ -1087,7 +1122,7 @@
|
|
|
1087
1122
|
"ui.setup.app.archive": "✓ Na počítači je aplikace Strom – menu v ní otevře výzkum.",
|
|
1088
1123
|
"ui.setup.stromapp.archive": "Aplikace Strom (zdarma, v prohlížeči) ukáže výzkum jako rodokmen – u každého zápisu jeho obrázek vyříznutý ze skenu, příběhy předků. Používat ji?",
|
|
1089
1124
|
"ui.settings.wizard.archive": "Jazyk, složka, zástupce, aplikace Strom… (průvodce nastavením)",
|
|
1090
|
-
"ui.menu.settings.archive": "Nastavení: jazyk, zprávy, archiv nebo výzkum,
|
|
1125
|
+
"ui.menu.settings.archive": "Nastavení: jazyk, zprávy, archiv nebo výzkum, údržba",
|
|
1091
1126
|
"ui.menu.more.archive.noapp": "Přidat do archivu: podklady, jiný rodokmen",
|
|
1092
1127
|
"ui.menu.more.archive": "Přidat do archivu: podklady, úpravy z aplikace Strom",
|
|
1093
1128
|
"ui.menu.app.tip.archive": "Tip: výzkum jde prohlédnout jako rodokmen v aplikaci Strom – volba {key}.",
|
|
@@ -1212,6 +1247,9 @@
|
|
|
1212
1247
|
"ui.archives.agentbrowser.off": "Vrátit prohlížeč jen pro archivy přes prohlížeč?",
|
|
1213
1248
|
"ui.consent.remote": "Spouštět sezení Claude Code, která strom otevírá, se vzdáleným ovládáním (Remote Control), aby je šlo sledovat a řídit z claude.ai nebo z aplikace Claude v telefonu?",
|
|
1214
1249
|
"ui.consent.addons": "Dovolit agentovi při samostatné práci načíst osobní doplňky z jeho nastavení (skilly, pluginy, MCP servery – třeba i poštu nebo dokumenty) jako v chatu? Pracuje přitom bez dozoru.",
|
|
1250
|
+
"ui.consent.effort": "Nastavit sezením {agent}, která spouští strom, hloubku uvažování {effort}? Vyšší hloubka uvažování (high, xhigh) rychleji spotřebuje limity předplatného.",
|
|
1251
|
+
"ui.consent.webPerHost": "Dovolit vlastnímu webovému nástroji agenta až {n} požadavků na jeden web (jeho servery a zrcadla dohromady) v sezení (nyní {now})? Více požadavků víc zatěžuje web; více stránek jednoho webu je šetrnější stahovat přes konektor.",
|
|
1252
|
+
"ui.consent.effort.run": "Spustit samostatnou práci {agent} pro tento běh s hloubkou uvažování {effort}, vyšší než v nastavení ({now})? Vyšší hloubka uvažování (high, xhigh) rychleji spotřebuje limity předplatného.",
|
|
1215
1253
|
"ui.consent.edits.user": "Mají mít úpravy v aplikaci Strom přednost před tím, co říká záznam? Údaj ze záznamu se pak stáhne s důvodem (synchronizace jde vrátit).",
|
|
1216
1254
|
"ui.consent.review.off": "Zapisovat, co pošle aplikace Strom, hned, bez ptaní u každého poslání? Přidané se zapíše, vodítka se opraví, změna údaje doloženého záznamem bude rozpor k rozhodnutí; strom sync undo poslání vrátí.",
|
|
1217
1255
|
"ui.consent.mode.archive": "Udělat z výzkumu „{name}“ archiv? Data přicházejí z aplikace Strom a zapisují se, jak přijdou; žádný agent na něm nepracuje, jeho úkoly počkají odložené. Práci s agentem jde zase zapnout.",
|
|
@@ -1402,11 +1440,18 @@
|
|
|
1402
1440
|
"ui.settings.hooks": "Zprávy o tom, co se uloží (hooky): {state}",
|
|
1403
1441
|
"ui.settings.on": "zapnuto",
|
|
1404
1442
|
"ui.settings.off": "vypnuto",
|
|
1405
|
-
"ui.settings.remote": "
|
|
1443
|
+
"ui.settings.remote": "Remote Control v aplikaci Claude (rozhovor s agentem i z mobilu): {state}",
|
|
1406
1444
|
"ui.settings.remote.about": "Když je zapnuté, jde sezení Claude Code, která strom spustí – rozhovory i samostatnou práci – sledovat a řídit z claude.ai nebo z aplikace Claude v telefonu.",
|
|
1407
1445
|
"ui.settings.remote.on": "Zapnout?",
|
|
1408
1446
|
"ui.settings.remote.off": "Vypnout?",
|
|
1409
1447
|
"ui.settings.archives": "Archivy: přihlášení, souhlas se stahováním",
|
|
1448
|
+
"ui.settings.wizard.what": "Co nastavit?",
|
|
1449
|
+
"ui.settings.wizard.all": "Všechno, krok za krokem (průvodce nastavením)",
|
|
1450
|
+
"ui.settings.maintenance": "Údržba: kontrola instalace, místo na disku",
|
|
1451
|
+
"ui.settings.maintenance.tidy": "Údržba: kontrola instalace, místo na disku (jde uvolnit {size})",
|
|
1452
|
+
"ui.settings.maintenance.update": "Údržba: kontrola instalace, místo na disku, aktualizace na {version}",
|
|
1453
|
+
"ui.maintenance.title": "Údržba",
|
|
1454
|
+
"ui.maintenance.tidy": "Místo na disku: strom si vedle výzkumu drží {size}",
|
|
1410
1455
|
"ui.alone.title": "Samostatná práce agenta",
|
|
1411
1456
|
"ui.alone.minutes": "Čas na jeden úkol: {minutes} min",
|
|
1412
1457
|
"ui.alone.minutes.ask": "Kolik minut smí trvat jeden úkol? (5–600; 0 vrátí zpět)",
|
|
@@ -1437,7 +1482,7 @@
|
|
|
1437
1482
|
"ui.hooks.nothing": "žádné",
|
|
1438
1483
|
"ui.menu.noagent": "Na počítači zatím není žádný AI agent – výzkum dělá on. Volba 1 ho nainstaluje.",
|
|
1439
1484
|
"ui.menu.getagent": "Nainstalovat nebo vybrat AI agenta",
|
|
1440
|
-
"ui.menu.update.where": "Vyšla nová verze stromu: {version} – aktualizovat ji jde v Nastavení (volba {key}).",
|
|
1485
|
+
"ui.menu.update.where": "Vyšla nová verze stromu: {version} – aktualizovat ji jde v Nastavení (volba {key}) → Údržba.",
|
|
1441
1486
|
"ui.more.noagent": "Agent se do toho pustí, až bude na počítači (volba 1 v menu).",
|
|
1442
1487
|
"ui.menu.noagent.chosen": "AI agent, kterého výzkum používá, na počítači není – volba 1 vybere jiného.",
|
|
1443
1488
|
"task.answer": "Odpověď uživatele (na: {asked}): {answer}",
|
|
@@ -1473,6 +1518,10 @@
|
|
|
1473
1518
|
"log.media": "Nové snímky: {name} (obr. {images})",
|
|
1474
1519
|
"log.media.one": "Nový snímek: {name} (obr. {image})",
|
|
1475
1520
|
"log.media.loose": "Nové snímky: {n}",
|
|
1521
|
+
"log.media.part.one": "Výřez snímku ve větším rozlišení: {name} (obr. {image})",
|
|
1522
|
+
"log.media.part": "Výřezy snímků ve větším rozlišení: {name} (obr. {images})",
|
|
1523
|
+
"log.media.part.loose": "Výřezy snímků ve větším rozlišení: {n}",
|
|
1524
|
+
"log.net.cap": "Archiv {host} je blízko hodinového limitu: využito {used} z {cap} požadavků za hodinu, další volný v {time}; mezitím výzkum pokračuje s tím, co už je k dispozici",
|
|
1476
1525
|
"log.reading": "Pročteno: {name} (obr. {images})",
|
|
1477
1526
|
"log.task.add": "Nový úkol: {name}",
|
|
1478
1527
|
"log.task.done": "Hotovo: {name}",
|
package/assets/lang/de.json
CHANGED
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"ui.menu.start": "Die Forschung mit dem Agenten beginnen",
|
|
89
89
|
"ui.menu.run": "Den Agenten allein arbeiten lassen",
|
|
90
90
|
"ui.menu.waitlist": "Was wartet",
|
|
91
|
-
"ui.menu.settings": "Einstellungen: Agent, allein arbeiten, Nachrichten, Archive,
|
|
91
|
+
"ui.menu.settings": "Einstellungen: Agent, allein arbeiten, Nachrichten, Archive, Wartung",
|
|
92
92
|
"ui.menu.doctor": "Installation prüfen",
|
|
93
93
|
"ui.settings.help": "Hilfe: die Befehle für Menschen",
|
|
94
94
|
"ui.menu.trees": "Anderer Stammbaum · einen schicken oder empfangen",
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"ui.effort.default": "Voreinstellung von {agent}",
|
|
151
151
|
"ui.doc.codex": "Codex",
|
|
152
152
|
"ui.chat.app.model.chosen": "In {app} für die Forschung das Modell {model} wählen (das in den Einstellungen gewählte).",
|
|
153
|
-
"ui.settings.model": "Modell der Forschung ({agent}): {model}",
|
|
153
|
+
"ui.settings.model": "Nur das Modell der Forschung ({agent}): {model}",
|
|
154
154
|
"ui.settings.model.own": "das eigene des Agenten",
|
|
155
155
|
"ui.views.title": "Abstimmung des Lesens der Scans · {agent}: {n} Bilder aus {books} Büchern, Größen {sizes} px",
|
|
156
156
|
"ui.views.find": "Finden eines Eintrags auf dem ganzen Bild:",
|
|
@@ -250,6 +250,10 @@
|
|
|
250
250
|
"ui.tune.book.unread": "geladen und nie gelesen {n} von {of}",
|
|
251
251
|
"ui.tune.hosts": "Archive:",
|
|
252
252
|
"ui.tune.host": " {host}: Sitzungen {sessions} · Anfragen {requests} ({perSession} pro Sitzung, {perImage} pro Bild) · gewartet {wait} min · Limit erschöpft {later}×",
|
|
253
|
+
"ui.tune.web": "Eigene Webwerkzeuge des Agenten:",
|
|
254
|
+
"ui.tune.web.host": " {host}: Webanfragen {n} · Sitzungen {sessions} · höchstens {most} in einer",
|
|
255
|
+
"ui.tune.web.searches": " Websuchen: {n}",
|
|
256
|
+
"ui.tune.web.many": " mehr als {limit} Seiten einer Website in einer Sitzung: ein Konnektor ist der schonende Weg (strom connector new)",
|
|
253
257
|
"ui.tune.signals": "Über dem Üblichen desselben Agenten und Modells:",
|
|
254
258
|
"ui.tune.signals.none": "Nichts über dem Üblichen desselben Agenten und Modells.",
|
|
255
259
|
"ui.tune.sig.M1": " {scope}: Kosten pro Scan {value}, {ratio}× das Übliche ({base})",
|
|
@@ -265,6 +269,7 @@
|
|
|
265
269
|
"ui.tune.sig.M9": " {scope}: {value} von {n} Negativbefunden auf schwachen Scans (Ansichten meist vergrößert)",
|
|
266
270
|
"ui.tune.sig.M10": " Leser ohne Ergebnis: {n} der letzten {of}",
|
|
267
271
|
"ui.tune.sig.M11": " {scope}: geladen und nie gelesen {value} ({n} von {of} Bildern)",
|
|
272
|
+
"ui.tune.sig.M12": " lange Strecken ohne Leeren: {n} der letzten {of} Sitzungen über {ctx} Tokens (etwa {views} Ansichten, {peak} Tokens)",
|
|
268
273
|
"ui.tune.short": "Noch zu wenig zum Vergleich: {list} — weitere Sitzungen bringen es.",
|
|
269
274
|
"ui.tune.m.M1": "Kosten pro Scan",
|
|
270
275
|
"ui.tune.m.M2": "Ansichten pro Scan",
|
|
@@ -275,6 +280,7 @@
|
|
|
275
280
|
"ui.tune.m.M8": "Warten auf ein Archiv",
|
|
276
281
|
"ui.tune.m.M10": "Leser ohne Ergebnis",
|
|
277
282
|
"ui.tune.m.M11": "nie gelesene Bilder",
|
|
283
|
+
"ui.tune.m.M12": "lange Strecken",
|
|
278
284
|
"ui.tune.recommend": "Empfohlen, nicht von strom selbst gesetzt (ein Mensch entscheidet, oder tune.auto ist aus):",
|
|
279
285
|
"ui.tune.rec.A1": " {scope}: das ganze Bild in Lesegröße, eine Doppelseite in Hälften, ein Ausschnitt mindestens 1:1 — aus den Scans, die schon hier sind, keine Anfrage mehr",
|
|
280
286
|
"ui.tune.rec.A2": " kleinere Stapel: Scans pro Leser etwa {to} statt {from} — mehr Aufrufe, kleinerer Kontext",
|
|
@@ -315,6 +321,26 @@
|
|
|
315
321
|
"ui.tune.reset.scope.all": "alle Modelle",
|
|
316
322
|
"ui.tune.what.calibration": "die kalibrierten Größen",
|
|
317
323
|
"ui.tune.what.answer": "die Antwort auf {kind}",
|
|
324
|
+
"ui.tune.why.calibrated": "gemessen an {n} bekannten Einträgen",
|
|
325
|
+
"ui.tune.why.answered": "beantwortet",
|
|
326
|
+
"ui.tune.why.answered.terminal": "im Terminal beantwortet",
|
|
327
|
+
"ui.tune.why.answered.window": "in einem Fenster des Systems beantwortet",
|
|
328
|
+
"ui.tune.why.answered.app": "in der Strom-App beantwortet",
|
|
329
|
+
"ui.tune.why.measured": "aus den gemessenen Lesungen",
|
|
330
|
+
"ui.tune.why.last": "{n} der letzten {of}",
|
|
331
|
+
"ui.tune.why.of": "{n} von {of}",
|
|
332
|
+
"ui.tune.why.M5": "unsicher {value} gegenüber {base} der anderen Bücher (n={n})",
|
|
333
|
+
"ui.tune.why.M6": "vergrößerte Ansichten {value} gegenüber {base} (n={n})",
|
|
334
|
+
"ui.tune.why.M7": "das Portal gab {n}× keinen schärferen Ausschnitt",
|
|
335
|
+
"ui.tune.why.M8": "Sitzungen mit Warten auf das Limit des Archivs: {count}",
|
|
336
|
+
"ui.tune.why.M8.wait": "Sitzungen mit Warten auf das Limit des Archivs: {count} ({wait} min, erschöpft {later}×)",
|
|
337
|
+
"ui.tune.why.M11": "geladen und nie gelesen {value} ({count} Bilder)",
|
|
338
|
+
"ui.tune.why.M3": "Ansichten nach dem Leeren des Kontexts erneut geöffnet: {count} Leser",
|
|
339
|
+
"ui.tune.why.M4": "der Kontext wurde geleert: {count} Leser",
|
|
340
|
+
"ui.tune.why.M4.ctx": "der Kontext wurde geleert: {count} Leser, das erste Mal bei etwa {ctx} Tokens",
|
|
341
|
+
"ui.tune.why.M10": "Leser ohne Ergebnis: {count}",
|
|
342
|
+
"ui.tune.why.A3": "der Kontext wurde geleert: {count} Leser, das erste Mal bei etwa {ctx} Tokens, eine Ansicht eines Lesers etwa {view} Tokens",
|
|
343
|
+
"ui.tune.why.A3.long": "der Kontext wurde nie geleert und wuchs doch über {ctx} Tokens: {count} Sitzungen, eine Ansicht eines Lesers etwa {view} Tokens",
|
|
318
344
|
"ui.tune.unknownKey": "Agent und Modell nicht aufgezeichnet (ältere Aufzeichnungen)",
|
|
319
345
|
"ui.o.views": "Scans",
|
|
320
346
|
"ui.settings.views": "Das Lesen der Scans abstimmen ({state})",
|
|
@@ -327,6 +353,8 @@
|
|
|
327
353
|
"ui.doc.tuneworse": "nach der Selbstabstimmung",
|
|
328
354
|
"ui.doc.tuneworse.a": "{scope}: seit der Änderung von strom am {at} ({what}) schlechter gelesen — {metric} {before} → {after} ({nb} Scans davor, {na} danach); Zurücksetzen empfohlen",
|
|
329
355
|
"ui.doc.tuneworse.b": "{scope}: seit der Änderung von strom am {at} ({what}) teurer — {before} → {after} je Scan ({nb} Scans davor, {na} danach), die Lesungen nicht sicherer; Behalten empfohlen (sie diente der Genauigkeit), Zurücksetzen bleibt möglich",
|
|
356
|
+
"ui.doc.web": "Agenten im Web",
|
|
357
|
+
"ui.doc.web.many": "viele Seiten einer Website in einer Sitzung über die eigenen Webwerkzeuge eines Agenten: {list} — ein Konnektor schont die Website mehr",
|
|
330
358
|
"ui.setup.level": "Was darf der Agent tun, ohne nachzufragen?",
|
|
331
359
|
"ui.setup.level.ask": "Mich bei allem außerhalb der Forschung fragen",
|
|
332
360
|
"ui.setup.level.auto": "Selbstständig arbeiten – nur bei riskanten Schritten fragen (empfohlen)",
|
|
@@ -354,7 +382,9 @@
|
|
|
354
382
|
"ui.consent.connector.direct": "Achtung: sein Code greift selbst auf das Netz zu, am Begrenzer von strom vorbei.",
|
|
355
383
|
"ui.consent.connector.unfenced": "Achtung: er startet ein Programm, das strom nicht eingrenzt ({run}) – es kann alle Dateien dieses Benutzers lesen und ändern, andere Programme starten und jede Adresse erreichen. Nach jeder Änderung seines Codes wird erneut gefragt.",
|
|
356
384
|
"ui.consent.connector.terms": "Nutzungsbedingungen des Archivs: {terms}",
|
|
357
|
-
"ui.consent.host.unblock": "{host}
|
|
385
|
+
"ui.consent.host.unblock": "{host} wird in Ruhe gelassen (Anfragen abgewiesen, oder sein Limit ist laut ihm aufgebraucht). Jetzt aufheben – nur wenn das Archiv gesagt hat, dass es in Ordnung ist?",
|
|
386
|
+
"ui.host.unblocked": "{host}: nicht mehr in Ruhe gelassen – strom fragt wieder an, langsam",
|
|
387
|
+
"ui.host.unblock.kept": "Nichts geändert: {host} wird weiter in Ruhe gelassen.",
|
|
358
388
|
"ui.menu.otheragent": "Diesmal mit einem anderen Agenten oder woanders sprechen",
|
|
359
389
|
"ui.o.title": "strom {version} — genealogische Forschung mit KI-Agenten",
|
|
360
390
|
"ui.o.rule": "Hier liegen die Belege der Forschung; ändern NUR mit strom-Befehlen. Neuer Agent: strom guide",
|
|
@@ -418,6 +448,7 @@
|
|
|
418
448
|
"ui.run.start.session": "▶ {session} · {task} {what}",
|
|
419
449
|
"ui.run.parked": " · {task} zurückgestellt: {n} Sitzungen hintereinander haben nichts erfasst",
|
|
420
450
|
"ui.run.denied": " · Berechtigungen verweigert {n}×: {what}",
|
|
451
|
+
"ui.run.refused": " · strom hat {n}× abgelehnt (die Grenze von {per} Webanfragen an einen Server in einer Sitzung oder die des Servers): {what}",
|
|
421
452
|
"session.user": "vom Benutzer angehalten",
|
|
422
453
|
"session.run": "der Lauf brach ab, bevor die Sitzung endete (unterbrochen, oder der Computer wurde ausgeschaltet)",
|
|
423
454
|
"session.chat": "das Gespräch endete, bevor die Sitzung geschlossen wurde",
|
|
@@ -434,7 +465,7 @@
|
|
|
434
465
|
"ui.doc.disk": "Platz neben den Forschungen",
|
|
435
466
|
"ui.doc.disk.ok": "{size} neben den Forschungen, in den Grenzen",
|
|
436
467
|
"ui.doc.disk.tree": "{name}: {size} lassen sich freigeben (darin: strom tidy)",
|
|
437
|
-
"ui.doc.disk.fix": "strom tidy im Stammbaum (im Menü Einstellungen → Speicherplatz) – fragt zuerst",
|
|
468
|
+
"ui.doc.disk.fix": "strom tidy im Stammbaum (im Menü Einstellungen → Wartung → Speicherplatz) – fragt zuerst",
|
|
438
469
|
"ui.compact.done": "Die Geschichte des Stammbaums gepackt: .git {before} → {after}. An der Forschung hat sich nichts geändert.",
|
|
439
470
|
"ui.compact.small": "Die Geschichte des Stammbaums ist klein ({size}): nichts zu packen.",
|
|
440
471
|
"ui.compact.busy": "Am Stammbaum wird gearbeitet: seine Geschichte wird gepackt, wenn die Arbeit endet.",
|
|
@@ -461,6 +492,8 @@
|
|
|
461
492
|
"ui.doc.innode": "strom {version} in Node {node}",
|
|
462
493
|
"ui.doc.fence": "Downloader eingegrenzt",
|
|
463
494
|
"ui.doc.fence.net": "Node {node}: Downloader laufen eingegrenzt, aber erst Node 25 oder neuer hält sie auch vom Netz fern",
|
|
495
|
+
"ui.doc.shim": "strom für die Agenten",
|
|
496
|
+
"ui.doc.shim.codepage": "der Ordner der Installation hat Buchstaben außerhalb von ASCII: die Hooks der Agenten und ihr strom über die Forschung hängen von der Codepage der Konsole ab — ein Installationsordner ohne sie vermeidet das",
|
|
464
497
|
"ui.doc.oldnode": "Node {node} ist zu alt (nötig: 22.18 oder neuer)",
|
|
465
498
|
"ui.doc.missing": "fehlt",
|
|
466
499
|
"ui.doc.notsetup": "noch nicht eingerichtet",
|
|
@@ -682,6 +715,8 @@
|
|
|
682
715
|
"ui.run.follow": "Die Arbeit währenddessen live in der Strom-App verfolgen?",
|
|
683
716
|
"ui.run.follow.later": "Die Strom-App öffnet sich, wenn der Agent seine erste Sitzung beginnt.",
|
|
684
717
|
"ui.consent.host.pace": "Eigenes Tempo für {host}: mindestens {seconds} s zwischen zwei Anfragen, {cap}. Zu schnelles Laden bremst das Archiv für alle und kann zur Sperre der eigenen IP-Adresse führen – so einstellen?",
|
|
718
|
+
"ui.web.ask": "Bereits {n} Anfragen an {host} in dieser Sitzung. Schonender für weitere Seiten oder Einträge dieses Servers: gleich einen Connector dafür bauen (strom connector new {name} --url {url}), der Tempo, robots.txt und Bedingungen des Servers einhält. Trotzdem noch eine zulassen?",
|
|
719
|
+
"ui.web.ask.have": "Bereits {n} Anfragen an {host} in dieser Sitzung. Mehr Seiten oder Einträge dieses Servers gehen schonender über seinen Connector {connector}, der schon da ist und Tempo, robots.txt und Bedingungen des Servers einhält. Trotzdem noch eine zulassen?",
|
|
685
720
|
"ui.pace.cap": "höchstens {n} pro Stunde",
|
|
686
721
|
"ui.pace.nocap": "ohne Stundenlimit",
|
|
687
722
|
"ui.o.results.offered": "{file} – für die Strom-App, hier nicht installiert; der Nutzer kennt sie schon – erwähne sie erst wieder, wenn er die Ergebnisse sehen will (strom app install, dann strom app)",
|
|
@@ -904,7 +939,7 @@
|
|
|
904
939
|
"ui.tidy.done": "✓ {size} freigegeben. Ab jetzt hält strom es nach jeder Sitzung selbst in Ordnung.",
|
|
905
940
|
"ui.tidy.no": "Nichts wurde gelöscht.",
|
|
906
941
|
"ui.consent.tidy": "Etwa {size} neben der Forschung {name} freigeben (alte Sitzungsprotokolle, Ansichten von Scans, längst geschriebene Sendungen)? Die Forschung und ihre Scans bleiben.",
|
|
907
|
-
"ui.tidy.hint": "Neben der Forschung hält strom {strom}, davon lassen sich {size} freigeben: strom tidy (im Menü Einstellungen → Speicherplatz)",
|
|
942
|
+
"ui.tidy.hint": "Neben der Forschung hält strom {strom}, davon lassen sich {size} freigeben: strom tidy (im Menü Einstellungen → Wartung → Speicherplatz)",
|
|
908
943
|
"ui.error.consent": "dafür braucht es eine Zustimmung – {question}",
|
|
909
944
|
"ui.error.consent.hint": "im eigenen Terminal ausführen: {set}",
|
|
910
945
|
"ui.status.disk": "Auf der Festplatte: die Forschung {research} · daneben hält strom {strom}",
|
|
@@ -1087,7 +1122,7 @@
|
|
|
1087
1122
|
"ui.setup.app.archive": "✓ Die Strom-App ist auf diesem Computer – das Menü öffnet die Forschung darin.",
|
|
1088
1123
|
"ui.setup.stromapp.archive": "Die Strom-App (kostenlos, im Browser) zeigt die Forschung als Stammbaum – jeder Eintrag mit seinem aus dem Scan geschnittenen Bild, die Geschichten der Vorfahren. Soll sie genutzt werden?",
|
|
1089
1124
|
"ui.settings.wizard.archive": "Sprache, Ordner, Verknüpfung, Strom-App… (Einrichtung)",
|
|
1090
|
-
"ui.menu.settings.archive": "Einstellungen: Sprache, Meldungen, Archiv oder Forschung,
|
|
1125
|
+
"ui.menu.settings.archive": "Einstellungen: Sprache, Meldungen, Archiv oder Forschung, Wartung",
|
|
1091
1126
|
"ui.menu.more.archive.noapp": "Zum Archiv hinzufügen: Unterlagen, ein anderer Stammbaum",
|
|
1092
1127
|
"ui.menu.more.archive": "Zum Archiv hinzufügen: Unterlagen, Änderungen aus der Strom-App",
|
|
1093
1128
|
"ui.menu.app.tip.archive": "Tipp: die Forschung als Stammbaum in der Strom-App – Wahl {key}.",
|
|
@@ -1212,6 +1247,9 @@
|
|
|
1212
1247
|
"ui.archives.agentbrowser.off": "Zurück zum Browser nur für Archive über den Browser?",
|
|
1213
1248
|
"ui.consent.remote": "Die Claude-Code-Sitzungen, die strom öffnet, mit Remote Control starten, damit sie sich auf claude.ai oder in der Claude-App auf dem Telefon verfolgen und steuern lassen?",
|
|
1214
1249
|
"ui.consent.addons": "Dem allein arbeitenden Agenten erlauben, die persönlichen Erweiterungen aus seinen Einstellungen zu laden (Skills, Plugins, MCP-Server – auch E-Mail oder Dokumente), wie im Chat? Er arbeitet dabei unbeaufsichtigt.",
|
|
1250
|
+
"ui.consent.effort": "Den Sitzungen von {agent}, die strom startet, den Denkaufwand {effort} geben? Ein höherer Denkaufwand (high, xhigh) verbraucht die Limits des Abonnements schneller.",
|
|
1251
|
+
"ui.consent.webPerHost": "Dem eigenen Webabruf des Agenten bis zu {n} Anfragen an eine Website (ihre Server und Spiegel zusammen) in einer Sitzung erlauben (jetzt {now})? Mehr Anfragen belasten die Website stärker; mehr Seiten einer Website gehen schonender über einen Connector.",
|
|
1252
|
+
"ui.consent.effort.run": "{agent} für diesen Lauf mit dem Denkaufwand {effort} allein arbeiten lassen, höher als in der Einstellung ({now})? Ein höherer Denkaufwand (high, xhigh) verbraucht die Limits des Abonnements schneller.",
|
|
1215
1253
|
"ui.consent.edits.user": "Sollen eigene Änderungen in der Strom-App vor dem gelten, was ein Eintrag sagt? Die Angabe aus dem Eintrag wird dann mit Begründung zurückgezogen (ein Abgleich lässt sich zurücknehmen).",
|
|
1216
1254
|
"ui.consent.review.off": "Was die Strom-App sendet, gleich übernehmen, ohne bei jeder Sendung zu fragen? Hinzugefügtes wird übernommen, Hinweise korrigiert, eine Änderung einer durch einen Eintrag belegten Angabe wird ein Widerspruch zur Entscheidung; strom sync undo nimmt eine Sendung zurück.",
|
|
1217
1255
|
"ui.consent.mode.archive": "Die Forschung „{name}“ zu einem Archiv machen? Die Daten kommen aus der Strom-App und werden übernommen, wie sie gesendet werden; kein Agent arbeitet daran, ihre Aufgaben warten zurückgestellt. Die Arbeit mit einem Agenten lässt sich wieder einschalten.",
|
|
@@ -1402,11 +1440,18 @@
|
|
|
1402
1440
|
"ui.settings.hooks": "Nachrichten über das Gespeicherte (Hooks): {state}",
|
|
1403
1441
|
"ui.settings.on": "an",
|
|
1404
1442
|
"ui.settings.off": "aus",
|
|
1405
|
-
"ui.settings.remote": "
|
|
1443
|
+
"ui.settings.remote": "Remote Control in der Claude-App (das Gespräch mit dem Agenten auch vom Handy): {state}",
|
|
1406
1444
|
"ui.settings.remote.about": "Eingeschaltet lassen sich die Claude-Code-Sitzungen, die strom startet – Gespräche und allein arbeiten –, auf claude.ai oder in der Claude-App auf dem Telefon verfolgen und steuern.",
|
|
1407
1445
|
"ui.settings.remote.on": "Einschalten?",
|
|
1408
1446
|
"ui.settings.remote.off": "Ausschalten?",
|
|
1409
1447
|
"ui.settings.archives": "Archive: Anmeldungen, Zustimmung zum Herunterladen",
|
|
1448
|
+
"ui.settings.wizard.what": "Was einstellen?",
|
|
1449
|
+
"ui.settings.wizard.all": "Alles, Schritt für Schritt (die Einrichtung)",
|
|
1450
|
+
"ui.settings.maintenance": "Wartung: Prüfung der Installation, Speicherplatz",
|
|
1451
|
+
"ui.settings.maintenance.tidy": "Wartung: Prüfung der Installation, Speicherplatz ({size} lassen sich freigeben)",
|
|
1452
|
+
"ui.settings.maintenance.update": "Wartung: Prüfung der Installation, Speicherplatz, Aktualisierung auf {version}",
|
|
1453
|
+
"ui.maintenance.title": "Wartung",
|
|
1454
|
+
"ui.maintenance.tidy": "Speicherplatz: strom hält {size} neben der Forschung",
|
|
1410
1455
|
"ui.alone.title": "Der Agent allein",
|
|
1411
1456
|
"ui.alone.minutes": "Zeit für eine Aufgabe: {minutes} Min.",
|
|
1412
1457
|
"ui.alone.minutes.ask": "Wie viele Minuten darf eine Aufgabe dauern? (5–600; 0 geht zurück)",
|
|
@@ -1437,7 +1482,7 @@
|
|
|
1437
1482
|
"ui.hooks.nothing": "keine",
|
|
1438
1483
|
"ui.menu.noagent": "Auf dem Computer ist noch kein KI-Agent – die Forschung ist seine Arbeit. Punkt 1 installiert einen.",
|
|
1439
1484
|
"ui.menu.getagent": "Den KI-Agenten installieren oder wählen",
|
|
1440
|
-
"ui.menu.update.where": "Eine neue Version von strom ist da: {version} – zu aktualisieren in den Einstellungen (Punkt {key}).",
|
|
1485
|
+
"ui.menu.update.where": "Eine neue Version von strom ist da: {version} – zu aktualisieren in den Einstellungen (Punkt {key}) → Wartung.",
|
|
1441
1486
|
"ui.more.noagent": "Der Agent nimmt es auf, sobald er auf dem Computer ist (Punkt 1 im Menü).",
|
|
1442
1487
|
"ui.menu.noagent.chosen": "Der KI-Agent dieser Forschung ist nicht auf dem Computer – Punkt 1 wählt einen anderen.",
|
|
1443
1488
|
"task.answer": "Antwort des Nutzers (auf: {asked}): {answer}",
|
|
@@ -1473,6 +1518,10 @@
|
|
|
1473
1518
|
"log.media": "Neue Bilder: {name} (Bilder {images})",
|
|
1474
1519
|
"log.media.one": "Neues Bild: {name} (Bild {image})",
|
|
1475
1520
|
"log.media.loose": "Neue Bilder: {n}",
|
|
1521
|
+
"log.media.part.one": "Bildausschnitt in höherer Auflösung: {name} (Bild {image})",
|
|
1522
|
+
"log.media.part": "Bildausschnitte in höherer Auflösung: {name} (Bilder {images})",
|
|
1523
|
+
"log.media.part.loose": "Bildausschnitte in höherer Auflösung: {n}",
|
|
1524
|
+
"log.net.cap": "Archiv {host} nahe an seiner Grenze pro die Stunde: {used} von {cap} Anfragen pro Stunde verbraucht, die nächste frei um {time}; inzwischen geht die Forschung mit dem weiter, was vorliegt",
|
|
1476
1525
|
"log.reading": "Durchgelesen: {name} (Bilder {images})",
|
|
1477
1526
|
"log.task.add": "Neue Aufgabe: {name}",
|
|
1478
1527
|
"log.task.done": "Erledigt: {name}",
|
package/assets/method/enrich.md
CHANGED
|
@@ -20,6 +20,10 @@ recorded, also in vain (`strom search add … --method web|catalog|full-text`).
|
|
|
20
20
|
- **Within the brief's budget of pages** fetched or read; then record what
|
|
21
21
|
was searched and close. Printed pages go to the user's model for print
|
|
22
22
|
where you can hand work to one (the brief names it) — never handwriting.
|
|
23
|
+
The budget is the task's whole: pages through a connector count in it.
|
|
24
|
+
More pages of one site than the web rule allows go through its connector,
|
|
25
|
+
built right away when the task needs that site (`strom connector new
|
|
26
|
+
<site>`, then `strom fetch`).
|
|
23
27
|
- **The history of a place once in a research**: what is written of it (the
|
|
24
28
|
brief says) is reused, never searched again.
|
|
25
29
|
- **Read the source itself** — the page, the scan. A snippet, an OCR line,
|
package/assets/method/locate.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Method: locating records
|
|
2
2
|
|
|
3
|
-
Before anything can be proven
|
|
3
|
+
Before anything can be proven, know where the records are.
|
|
4
4
|
|
|
5
5
|
1. Place and time decide the jurisdiction. Record it: `strom place add …` and
|
|
6
6
|
`strom place jurisdiction L… --kind parish|civil|manor|district --from --to`.
|
package/assets/method/reading.md
CHANGED
|
@@ -40,21 +40,20 @@ never open again a view cleared from your context — your notes hold it.
|
|
|
40
40
|
again comes from it. Whole images first, a part only where entries need
|
|
41
41
|
it: an archive's hourly cap stops the rest.
|
|
42
42
|
<!-- end -->
|
|
43
|
-
- **Browsing a book is a reader's job**: `strom read B0001
|
|
44
|
-
--question "…"`
|
|
45
|
-
|
|
46
|
-
found, compact: the found and
|
|
47
|
-
where nothing was found (a
|
|
48
|
-
|
|
49
|
-
(`--match <surname
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
question.) **A reader is told exactly what to write down** — page numbers
|
|
43
|
+
- **Browsing a book or a range is a reader's job**: `strom read B0001
|
|
44
|
+
--images 40-69 --question "…"` (small script: `--half both`) — readers in
|
|
45
|
+
batches of ten, each with the full question, their reports in
|
|
46
|
+
notes/readings/. It ends with what they found, compact: the found and
|
|
47
|
+
unclear entries whole, what was illegible where nothing was found (a
|
|
48
|
+
possible match often hides there — look at it), the gaps in the book.
|
|
49
|
+
Later: `strom readings` (`--match <surname>`, `--list`; one image's block:
|
|
50
|
+
`strom readings B0001 --image 57`) — never the reports whole. Images read
|
|
51
|
+
before are said first: another question or a blind check is fine, the same
|
|
52
|
+
one is not. Run it in the foreground and let it finish (often ten minutes or
|
|
53
|
+
more): what is left in the background ends with your turn.
|
|
54
|
+
A subagent (strom-scan-reader, called without `model`) reads only crops of the
|
|
55
|
+
entries found, about six scans each with the whole question — never a range
|
|
56
|
+
`strom read` can browse. **A reader is told exactly what to write down** — page numbers
|
|
58
57
|
and headings only, one surname's entries, one entry whole — and transcribes
|
|
59
58
|
nothing else. Record each report as it comes back, before the next readers.
|
|
60
59
|
Only the entries that will be cited need your own eyes, at full resolution.
|
package/dist/agents/effort.js
CHANGED
|
@@ -27,6 +27,38 @@ export function offeredEfforts(agent) {
|
|
|
27
27
|
export function hasEffort(agent) {
|
|
28
28
|
return !!EFFORTS[agent];
|
|
29
29
|
}
|
|
30
|
+
/** The levels from the least thinking to the most: a higher one uses up a plan's limits sooner. */
|
|
31
|
+
const EFFORT_ORDER = ["none", "minimal", "low", "medium", "high", "xhigh", "max", "ultra"];
|
|
32
|
+
/** What a session runs with where neither strom nor the agent's own settings say a level: the agents' usual default. */
|
|
33
|
+
const USUAL_EFFORT = "medium";
|
|
34
|
+
/**
|
|
35
|
+
* Whether `next` makes the sessions think more than `now` (each undefined: the agent's own setting, `own` when strom
|
|
36
|
+
* knows it, else the agents' usual default) — raising it is the person's decision alone, lowering it anyone's.
|
|
37
|
+
*/
|
|
38
|
+
export function raisesEffort(next, now, own) {
|
|
39
|
+
const rank = (e) => EFFORT_ORDER.indexOf((e ?? own ?? USUAL_EFFORT).toLowerCase());
|
|
40
|
+
return rank(next) > rank(now);
|
|
41
|
+
}
|
|
42
|
+
/** The level a session's own extra arguments set (Codex `-c model_reasoning_effort=…`, `--effort`, `--reasoning-effort`). */
|
|
43
|
+
export function effortInArgs(agent, extra) {
|
|
44
|
+
if (agent === "codex")
|
|
45
|
+
return codexEffortArg(extra);
|
|
46
|
+
const flag = agent === "grok" ? "--reasoning-effort" : agent === "claude" || agent === "antigravity" ? "--effort" : undefined;
|
|
47
|
+
if (!flag || !extra)
|
|
48
|
+
return undefined;
|
|
49
|
+
let found;
|
|
50
|
+
for (let i = 0; i < extra.length; i++) {
|
|
51
|
+
if (extra[i] === flag && extra[i + 1])
|
|
52
|
+
found = extra[i + 1];
|
|
53
|
+
else if (extra[i].startsWith(`${flag}=`))
|
|
54
|
+
found = extra[i].slice(flag.length + 1);
|
|
55
|
+
}
|
|
56
|
+
return found?.trim() || undefined;
|
|
57
|
+
}
|
|
58
|
+
/** The agent's own setting for its effort where strom knows it (Codex's config.toml; read only). */
|
|
59
|
+
export function ownEffort(env, agent) {
|
|
60
|
+
return agent === "codex" ? readCodexConfig(env).effort : undefined;
|
|
61
|
+
}
|
|
30
62
|
/** The agent's own switch for a session's effort (none: the agent's own settings hold). */
|
|
31
63
|
export function effortArgs(agent, effort) {
|
|
32
64
|
if (!effort || !EFFORTS[agent]?.includes(effort))
|
package/dist/agents/files.js
CHANGED
|
@@ -16,10 +16,15 @@ import { agentAppUrl, appSite } from "../core/stromapp.js";
|
|
|
16
16
|
import { configDir } from "../core/paths.js";
|
|
17
17
|
import { agentBrowser } from "../core/connector.js";
|
|
18
18
|
import { CHROME_ALLOW, CHROME_DENY, chromeDomain } from "../core/browser.js";
|
|
19
|
-
import { claudeScanReader, opencodeScanReader, SCAN_READER, treeReading } from "./scanreader.js";
|
|
19
|
+
import { claudeScanReader, opencodeScanReader, SCAN_READER, scanReaderModel, treeReading } from "./scanreader.js";
|
|
20
|
+
import { claudeWebHooks, grokWebHooks, webRuleLines } from "../core/web.js";
|
|
21
|
+
import { claudeDelegateHooks } from "../core/delegate.js";
|
|
22
|
+
import { powershellUtf8Rule, putShim } from "../core/self.js";
|
|
20
23
|
export const MARKER = "<!-- strom: generated above this line (strom agents sync); your own notes below are kept -->";
|
|
21
|
-
function agentsMd(tree) {
|
|
24
|
+
export function agentsMd(tree, platform = process.platform) {
|
|
22
25
|
const lang = langName(tree.config.lang);
|
|
26
|
+
// (Windows only: written on the computer the agent works on, as its other files)
|
|
27
|
+
const ps = powershellUtf8Rule("`", platform);
|
|
23
28
|
// the Strom app's address as strom app opens it now (the beta its beta, strom.app.url where it says another)
|
|
24
29
|
const app = agentAppUrl(tree.env);
|
|
25
30
|
return `# Family research: ${tree.config.name}
|
|
@@ -49,12 +54,15 @@ the researcher; \`strom\` is your only way to read and change the research.
|
|
|
49
54
|
your own working notes in \`notes/\`. Scans are looked at through views:
|
|
50
55
|
\`strom media view B0001:57 --half left\` writes one to \`.strom/views/\`;
|
|
51
56
|
the views of a scan or a batch come in one call (\`B0001:57-60 --half both\`).
|
|
57
|
+
A text in those files: \`strom grep "<text>"\` (each line with its file and
|
|
58
|
+
number) — never read a big file in pieces.
|
|
52
59
|
7. Run strom commands on their own — no pipes (\`| head\`, \`| grep\`): output is
|
|
53
60
|
already short, listings take \`--limit\` and \`--page\`, and piped commands may
|
|
54
|
-
be refused by your permissions
|
|
61
|
+
be refused by your permissions.${ps ? `\n ${ps}` : ""}
|
|
55
62
|
8. Other agents may work on this tree too (Claude Code, Codex, Antigravity,
|
|
56
63
|
OpenCode, Grok — the user's choice). \`strom\` shows who is working now; never take a task
|
|
57
64
|
another one has started.
|
|
65
|
+
9. ${webRuleLines(new Settings(tree.env, {}).webPerHost(tree.config), "`")}
|
|
58
66
|
|
|
59
67
|
## Working with the user
|
|
60
68
|
|
|
@@ -141,7 +149,7 @@ Claude Code: use Bash for \`strom\` commands only; read images and documents
|
|
|
141
149
|
with the Read tool. You can choose a model for a subagent: delegate reading as
|
|
142
150
|
below, not the way "Reading scans" in AGENTS.md says for other agents.
|
|
143
151
|
|
|
144
|
-
${PROFILES.claude.instructions(models, treeReading(tree, "claude"))}
|
|
152
|
+
${PROFILES.claude.instructions({ ...models, vision: scanReaderModel(tree, "claude") }, treeReading(tree, "claude"))}
|
|
145
153
|
${MARKER}
|
|
146
154
|
`;
|
|
147
155
|
}
|
|
@@ -215,6 +223,11 @@ function treeRules(tree, agent) {
|
|
|
215
223
|
],
|
|
216
224
|
};
|
|
217
225
|
}
|
|
226
|
+
/** Claude Code's hooks of the tree: strom's web hook and its delegate hook. */
|
|
227
|
+
function claudeHooks(root) {
|
|
228
|
+
const web = claudeWebHooks(root);
|
|
229
|
+
return { ...web, PreToolUse: [...(web.PreToolUse ?? []), ...claudeDelegateHooks(root).PreToolUse] };
|
|
230
|
+
}
|
|
218
231
|
/** Permissions for Claude Code in this tree (paths of this computer). */
|
|
219
232
|
export function claudeSettings(tree) {
|
|
220
233
|
const lead = new Settings(tree.env, {}).models("claude", tree.config).lead;
|
|
@@ -222,6 +235,9 @@ export function claudeSettings(tree) {
|
|
|
222
235
|
permissions: treeRules(tree, "claude"),
|
|
223
236
|
// The user's model: the desktop app cannot be given one when it opens (the CLI is, with --model).
|
|
224
237
|
...(lead ? { model: lead } : {}),
|
|
238
|
+
// Before each web fetch and search: recorded, counted and paced like strom's own requests (core/web.ts); before
|
|
239
|
+
// each call of a subagent: strom's delegates on the model strom set for them (core/delegate.ts).
|
|
240
|
+
hooks: claudeHooks(tree.root),
|
|
225
241
|
};
|
|
226
242
|
}
|
|
227
243
|
/**
|
|
@@ -286,6 +302,8 @@ export function opencodeConfig(tree) {
|
|
|
286
302
|
// its own rules and instructions
|
|
287
303
|
"opencode.json": "deny",
|
|
288
304
|
...Object.fromEntries(["AGENTS.md", "CLAUDE.md", ".claude/*"].map((f) => [f, "deny"])),
|
|
305
|
+
// a connector it builds for an archive the research needs (strom connector new), in a run too (ask → deny there)
|
|
306
|
+
...(shared ? { [`${abs(path.join(shared, "plugins", "connectors"))}/*`]: "allow" } : {}),
|
|
289
307
|
},
|
|
290
308
|
external_directory: {
|
|
291
309
|
"*": "ask",
|
|
@@ -354,6 +372,7 @@ function dropAgentFiles(tree) {
|
|
|
354
372
|
["opencode.json", JSON.stringify(opencodeConfig(tree), null, 2) + "\n"],
|
|
355
373
|
[path.join(".grok", "config.toml"), grokConfig(tree)],
|
|
356
374
|
[path.join(".grok", "rules", "strom.md"), GROK_RULES],
|
|
375
|
+
[GROK_HOOKS, JSON.stringify(grokWebHooks(tree.root), null, 2) + "\n"],
|
|
357
376
|
];
|
|
358
377
|
for (const [rel, content] of generated) {
|
|
359
378
|
const file = path.join(tree.root, rel);
|
|
@@ -378,10 +397,16 @@ function dropAgentFiles(tree) {
|
|
|
378
397
|
}
|
|
379
398
|
return gone;
|
|
380
399
|
}
|
|
400
|
+
/** Grok Build's own hooks of the tree: strom's before each web fetch and search (core/web.ts). */
|
|
401
|
+
export const GROK_HOOKS = path.join(".grok", "hooks", "strom.json");
|
|
381
402
|
/** Claude Code's subagent for reading scans, in the tree. */
|
|
382
403
|
export const CLAUDE_SCAN_READER = path.join(".claude", "agents", `${SCAN_READER}.md`);
|
|
383
|
-
export const AGENT_FILES = ["AGENTS.md", "CLAUDE.md", path.join(".claude", "settings.json"), CLAUDE_SCAN_READER, "opencode.json", path.join(".grok", "config.toml"), path.join(".grok", "rules", "strom.md")];
|
|
384
|
-
|
|
404
|
+
export const AGENT_FILES = ["AGENTS.md", "CLAUDE.md", path.join(".claude", "settings.json"), CLAUDE_SCAN_READER, "opencode.json", path.join(".grok", "config.toml"), path.join(".grok", "rules", "strom.md"), GROK_HOOKS];
|
|
405
|
+
/**
|
|
406
|
+
* strom's files of the agents written for the tree (only what changed: the files written, to commit). `said.shim`: the
|
|
407
|
+
* shim in .strom/bin was written now (never committed: not among the files).
|
|
408
|
+
*/
|
|
409
|
+
export function syncAgentFiles(tree, said = {}) {
|
|
385
410
|
// an archive: no agent works on it, and nothing of one shows in its folder (Milan's decision, 2026-10-03) — strom's own
|
|
386
411
|
// files of the agents go (what a person wrote in them stays); research switched on writes them again
|
|
387
412
|
if (isArchive(tree))
|
|
@@ -410,6 +435,16 @@ export function syncAgentFiles(tree) {
|
|
|
410
435
|
write("opencode.json", JSON.stringify(opencodeConfig(tree), null, 2) + "\n");
|
|
411
436
|
write(path.join(".grok", "config.toml"), grokConfig(tree));
|
|
412
437
|
write(path.join(".grok", "rules", "strom.md"), GROK_RULES);
|
|
438
|
+
write(GROK_HOOKS, JSON.stringify(grokWebHooks(tree.root), null, 2) + "\n");
|
|
439
|
+
// the strom the agent hooks name (the tree's .strom/bin, never committed) — there also for a conversation strom did not start
|
|
440
|
+
if (!tree.dryRun) {
|
|
441
|
+
try {
|
|
442
|
+
said.shim = putShim(tree.root).changed.length > 0;
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
// a hook that finds no strom lets the call go
|
|
446
|
+
}
|
|
447
|
+
}
|
|
413
448
|
for (const [rel, ours] of OBSOLETE) {
|
|
414
449
|
const file = path.join(tree.root, rel);
|
|
415
450
|
let text;
|