strom-research 1.0.0 → 1.1.1

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.
Files changed (73) hide show
  1. package/README.md +13 -5
  2. package/assets/icon/NOTICE.md +26 -0
  3. package/assets/icon/favicon.svg +1 -0
  4. package/assets/icon/icon-256.png +0 -0
  5. package/assets/icon/icon-512.png +0 -0
  6. package/assets/icon/icon.ico +0 -0
  7. package/assets/icon/icon.svg +1 -0
  8. package/assets/lang/cs.json +184 -8
  9. package/assets/lang/de.json +184 -8
  10. package/assets/method/reading.md +4 -2
  11. package/assets/method/recording.md +10 -1
  12. package/assets/plugins/connectors/DISCOVERY.md +6 -2
  13. package/assets/plugins/connectors/README.md +27 -10
  14. package/dist/agents/files.js +27 -18
  15. package/dist/agents/global.js +15 -4
  16. package/dist/brief/brief.js +4 -0
  17. package/dist/cli/context.js +10 -4
  18. package/dist/cli/human.js +116 -0
  19. package/dist/cli/main.js +9 -0
  20. package/dist/cli/menu.js +254 -38
  21. package/dist/cli/ui.js +156 -7
  22. package/dist/cli/wizard.js +36 -9
  23. package/dist/commands/browse.js +243 -0
  24. package/dist/commands/clips.js +190 -0
  25. package/dist/commands/connectors.js +93 -28
  26. package/dist/commands/guide.js +28 -7
  27. package/dist/commands/index.js +3 -0
  28. package/dist/commands/media.js +42 -8
  29. package/dist/commands/meta.js +33 -9
  30. package/dist/commands/output.js +103 -13
  31. package/dist/commands/read.js +1 -1
  32. package/dist/commands/readers.js +62 -0
  33. package/dist/commands/research.js +62 -0
  34. package/dist/commands/session.js +76 -47
  35. package/dist/commands/setup.js +17 -10
  36. package/dist/commands/sources.js +88 -16
  37. package/dist/commands/start.js +57 -37
  38. package/dist/commands/tasks.js +43 -6
  39. package/dist/commands/transcripts.js +177 -0
  40. package/dist/core/chromium.js +60 -19
  41. package/dist/core/clipfinder.js +118 -0
  42. package/dist/core/config.js +42 -2
  43. package/dist/core/connector.js +56 -8
  44. package/dist/core/excerpt.js +219 -0
  45. package/dist/core/frontier.js +30 -5
  46. package/dist/core/git.js +1 -1
  47. package/dist/core/kin.js +90 -0
  48. package/dist/core/live.js +22 -13
  49. package/dist/core/media.js +37 -3
  50. package/dist/core/migrate.js +33 -0
  51. package/dist/core/model.js +7 -0
  52. package/dist/core/net.js +93 -19
  53. package/dist/core/overview.js +259 -0
  54. package/dist/core/phrases.js +27 -0
  55. package/dist/core/places.js +43 -0
  56. package/dist/core/queue.js +16 -3
  57. package/dist/core/review.js +369 -0
  58. package/dist/core/schema.js +4 -0
  59. package/dist/core/session.js +5 -1
  60. package/dist/core/shortcut.js +71 -11
  61. package/dist/core/stories.js +3 -4
  62. package/dist/core/stromapp.js +86 -25
  63. package/dist/core/transcriber.js +99 -0
  64. package/dist/core/tree.js +3 -1
  65. package/dist/core/uninstall.js +4 -2
  66. package/dist/core/update.js +48 -22
  67. package/dist/core/validate.js +3 -1
  68. package/dist/core/workers.js +13 -0
  69. package/dist/gedcom/export.js +64 -33
  70. package/dist/gedcom/lines.js +8 -0
  71. package/dist/gedcom/validate.js +2 -2
  72. package/dist/runners/claude.js +2 -0
  73. package/package.json +1 -1
package/README.md CHANGED
@@ -24,9 +24,9 @@ and in which language to talk, and opens the conversation for the research.
24
24
 
25
25
  ### One line in a terminal
26
26
 
27
- No Node needed: the installer brings the official Node from nodejs.org and
28
- strom's code (plain JavaScript you can read), checks both against their
29
- checksums, puts `strom` on your PATH and starts a short setup in your language.
27
+ No Node needed: the installer brings the official Node from nodejs.org (the
28
+ newest release of the Node 24 LTS line) and strom's code (plain JavaScript you
29
+ can read), checks both against their checksums, puts `strom` on your PATH and starts a short setup in your language.
30
30
  Nothing needs admin rights.
31
31
 
32
32
  - **Windows** (PowerShell):
@@ -46,7 +46,8 @@ looking for and what you know.
46
46
  Next time: run `strom`, or double-click the "Strom research" shortcut.
47
47
 
48
48
  Updates: strom looks for a new version at most once a day and says so;
49
- `strom update` installs it (checked like the installer does). Installed with
49
+ `strom update` installs it (checked like the installer does), and with it the
50
+ newest security release of its Node line. Installed with
50
51
  npm: `npm install -g strom-research@latest`.
51
52
 
52
53
  ## Features
@@ -73,7 +74,8 @@ npm: `npm install -g strom-research@latest`.
73
74
  **Archives**
74
75
  - Downloaders ("connectors") for online archives: the agent builds one itself
75
76
  when the research needs an archive strom does not know yet, and tells you
76
- - A polite limiter for every request (pace, hourly cap, back-off), images
77
+ - A polite limiter for every request (the archive's own pace, slower when it
78
+ answers slowly, back-off; no limits made up), images
77
79
  checked before they are kept; your own login to a paid portal stays with you
78
80
  - A standard, versioned plugin interface — see
79
81
  [assets/plugins/connectors/README.md](assets/plugins/connectors/README.md)
@@ -85,7 +87,13 @@ npm: `npm install -g strom-research@latest`.
85
87
  (on by default, you may say no)
86
88
  - The Strom app can open the research directly and follow it live while the
87
89
  agent works
90
+ - Each register entry cut out of its scan next to its words, in the file for
91
+ the Strom app (`excerpts.*` settings)
88
92
  - Ask the agent about anyone in the tree — with or without the app
93
+ - Or look through it yourself, in strom's menu: the research at a glance
94
+ (`strom stats`), what is new (`strom recent`), what the agent does next
95
+ (`strom plan`), one person's life with its
96
+ records (`strom person card`), the ancestors as a tree (`strom pedigree`)
89
97
 
90
98
  **Safe by design**
91
99
  - What the agent may do alone is your choice: ask, auto (default) or full
@@ -0,0 +1,26 @@
1
+ # Strom Research icon
2
+
3
+ The tree of the Strom app (colour `#3f6b4f`) with a magnifying glass (`#f2b544`): Strom Research is
4
+ the research that fills the Strom app's family tree, and its shortcut is not to be taken for the app.
5
+
6
+ - `icon.svg` — the source (a white tree and an amber glass on a green rounded square);
7
+ `icon-256.png`, `icon-512.png` (`rsvg-convert -w 512 -h 512 icon.svg -o icon-512.png`),
8
+ `icon.ico` (16, 32, 48 and 256 px, PNG inside) — the desktop shortcut on Linux, macOS and Windows.
9
+ - `favicon.svg` — the outline for a web page (transparent).
10
+
11
+ The tree and the magnifying glass are drawn after the Lucide icons `tree-deciduous` and `search`
12
+ (https://lucide.dev), ISC License:
13
+
14
+ > Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).
15
+ > All other copyright (c) for Lucide are held by Lucide Contributors 2022.
16
+ >
17
+ > Permission to use, copy, modify, and/or distribute this software for any purpose with or without
18
+ > fee is hereby granted, provided that the above copyright notice and this permission notice appear
19
+ > in all copies.
20
+ >
21
+ > THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
22
+ > SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
23
+ > AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
24
+ > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
25
+ > NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
26
+ > THIS SOFTWARE.
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(0.4 0.4) scale(0.8)" stroke="#3f6b4f" stroke-width="2.2"><path d="M8 19a4 4 0 0 1-2.24-7.32A3.5 3.5 0 0 1 9 6.03V6a3 3 0 1 1 6 0v.04a3.5 3.5 0 0 1 3.24 5.65A4 4 0 0 1 16 19Z"/><path d="M12 19v3"/></g><circle cx="16.6" cy="16.4" r="3.6" fill="#ffffff" stroke="#ffffff" stroke-width="3"/><path d="M19.2 19 21.6 21.4" stroke="#ffffff" stroke-width="3.4"/><circle cx="16.6" cy="16.4" r="3.6" fill="#ffffff" stroke="#e0a02c" stroke-width="1.8"/><path d="M19.2 19 21.6 21.4" stroke="#e0a02c" stroke-width="2"/></svg>
Binary file
Binary file
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 24 24"><rect width="24" height="24" rx="5.3" fill="#3f6b4f"/><g transform="translate(2.2 2.3) scale(0.68)" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 19a4 4 0 0 1-2.24-7.32A3.5 3.5 0 0 1 9 6.03V6a3 3 0 1 1 6 0v.04a3.5 3.5 0 0 1 3.24 5.65A4 4 0 0 1 16 19Z"/><path d="M12 19v3"/></g><g fill="none" stroke-linecap="round"><circle cx="16.3" cy="15.9" r="3.1" stroke="#3f6b4f" stroke-width="3.4"/><path d="M18.6 18.2 20.6 20.2" stroke="#3f6b4f" stroke-width="3.4"/><circle cx="16.3" cy="15.9" r="3.1" fill="#3f6b4f" stroke="#f2b544" stroke-width="1.45"/><path d="M18.6 18.2 20.6 20.2" stroke="#f2b544" stroke-width="1.6"/></g></svg>
@@ -59,14 +59,13 @@
59
59
  "ui.menu.start": "Začít výzkum s agentem",
60
60
  "ui.menu.run": "Nechat agenta pracovat samotného",
61
61
  "ui.menu.waitlist": "Co čeká na vás",
62
- "ui.menu.results": "Výsledky",
63
62
  "ui.menu.settings": "Nastavení",
64
63
  "ui.menu.doctor": "Kontrola instalace",
65
64
  "ui.menu.trees": "Jiný rodokmen",
66
65
  "ui.menu.newtree": "Založit rodokmen",
67
66
  "ui.menu.quit": "Konec",
68
67
  "ui.menu.bye": "Na shledanou. Příště stačí spustit: strom",
69
- "ui.run.how": "Kolik úkolů má agent zpracovat? (skončí dřív, když už nebude co dělat)",
68
+ "ui.run.how": "Kolik úkolů? (skončí dřív, když už nebude co dělat; 0 vrátí zpět)",
70
69
  "ui.run.start": "Agent teď pracuje sám. Zastavíte ho klávesami Ctrl-C – nic se neztratí.",
71
70
  "ui.waiting.none": "Nic na vás nečeká.",
72
71
  "ui.waiting.open": "Otevřít složku pro snímky?",
@@ -81,7 +80,7 @@
81
80
  "ui.tree.default": "Moje rodina",
82
81
  "ui.chat.open": "Otevírám rozhovor s agentem ({agent}). Až budete chtít skončit, napište {exit}.",
83
82
  "ui.chat.first": "Ahoj, chci začít zkoumat svoje předky. Spusť `strom`, v pár větách mi vysvětli, jak spolu budeme pracovat, a zeptej se mě, koho hledáme a co už víme.",
84
- "ui.chat.continue": "Pokračujme ve výzkumu. Spusť `strom`, řekni mi krátce, kde výzkum stojí a co čeká na mě, navrhni, co dál, a jednou větou mi řekni, na co se tě můžu k rodokmenu ptát.",
83
+ "ui.chat.continue": "Pokračujme ve výzkumu. Spusť `strom`, řekni mi krátce, kde výzkum stojí a co čeká na mě, a navrhni, co dál.",
85
84
  "ui.setup.welcome": "Vítejte ve Strom výzkumu. Nastavíme pár věcí – když vám navržená odpověď vyhovuje, stačí Enter.",
86
85
  "ui.setup.again": "Nastavení – Enter ponechá současnou hodnotu.",
87
86
  "ui.setup.lang": "Jazyk (cs, en, de, pl, …)",
@@ -111,14 +110,14 @@
111
110
  "ui.setup.shortcut": "Vytvořit na ploše zástupce „Strom výzkum“?",
112
111
  "ui.setup.shortcut.done": "✓ Zástupce: {file}",
113
112
  "ui.setup.skill": "✓ {agent} teď strom zná v jakékoli složce.",
114
- "ui.setup.app": "✓ Na počítači je aplikace Strom – výsledky budou připravené k importu do ní.",
113
+ "ui.setup.app": "✓ Na počítači je aplikace Strom – menu v ní otevře výzkum, a když agent pracuje, aplikace ho sleduje živě.",
115
114
  "ui.setup.done": "Hotovo.",
116
115
  "ui.app.opened": "Otevírám aplikaci Strom ({where}).",
117
116
  "ui.app.browser": "v prohlížeči",
118
117
  "ui.app.url": "Otevřete ji zde: {url}",
119
118
  "ui.app.installed": "Aplikace Strom je nainstalovaná ({kind}).",
120
119
  "ui.app.install": "Aplikace Strom se otevřela v prohlížeči. Jako aplikaci ji nainstalujete ikonou instalace na pravém konci adresního řádku (Chrome, Edge); v Safari zvolte Soubor → Přidat do Docku.",
121
- "ui.menu.app": "Otevřít aplikaci Strom",
120
+ "ui.menu.app": "Otevřít výzkum v aplikaci Strom",
122
121
  "ui.chat.agent.missing": "{agent} není nainstalovaný – spusťte nastavení (strom setup), nainstaluje ho.",
123
122
  "ui.shortcut.done": "Zástupce na ploše: {file}",
124
123
  "ui.consent.connector.hosts": "Připojí se jen k {hosts} – pomalu, přes omezovač stromu.",
@@ -186,6 +185,7 @@
186
185
  "session.user": "zastaveno uživatelem",
187
186
  "session.run": "běh se zastavil dřív, než sezení skončilo (přerušení, nebo vypnutý počítač)",
188
187
  "session.chat": "rozhovor skončil dřív, než se sezení zavřelo",
188
+ "transcript.read": "Přepis napsal čtenář ({model}) z výřezu zápisu a druhý čtenář ho zkontroloval ({date}, strom transcripts).",
189
189
  "session.agent": "agent skončil ({outcome}), aniž by sezení zavřel",
190
190
  "ui.tree.created": "✓ Rodokmen „{name}“ je založený: {dir}",
191
191
  "ui.chat.trust": "Claude Code se poprvé zeptá, jestli této složce důvěřujete. Je to složka vašeho rodokmenu, kterou vytvořil strom – potvrďte „Yes, proceed“.",
@@ -250,15 +250,49 @@
250
250
  "ui.why.handover": "výzkum patří do vlastního rozhovoru ve složce rodokmenu (jeho pravidla, bez ptaní u každého kroku): tohle ho otevře – řekni uživateli, ať pokračuje tam; tady pokračuj, jen když chce",
251
251
  "ui.app.research": "Otevírám výzkum {name} v aplikaci Strom ({where}): poprvé jako nový rodokmen, příště se tentýž rodokmen aktualizuje.",
252
252
  "ui.app.following": "Aplikace Strom průběžně sleduje výzkum {name} ({where}): co se najde, se v ní objeví samo.",
253
- "ui.o.results.installed.live": "{file} – pro aplikaci Strom, tady nainstalovanou: strom app v ní otevře tento výzkum, a zatímco pracuješ, aplikace ho průběžně sleduje (co zapíšeš, objeví se v ní samo) – jednou to nabídni",
253
+ "ui.o.results.installed.live": "{file} – pro aplikaci Strom, tady nainstalovanou: strom app v ní otevře tento výzkum, a zatímco pracuješ, aplikace ho průběžně sleduje (co zapíšeš, objeví se v ní samo) – nabídni to (strom to řekne jen jednou)",
254
254
  "ui.o.results.offer.live": "{file} – pro aplikaci Strom, tady zatím nenainstalovanou: nabídni uživateli, že v ní může výzkum průběžně sledovat – instalace z {url} (strom app install ji tam otevře a řekne, kam kliknout), pak strom app",
255
255
  "story.what": "Napsat vyprávění: {name}",
256
256
  "story.more.what": "Doplnit vyprávění: {name} – {count} nové údaje",
257
257
  "story.where": "zapsané údaje (strom person show {id})",
258
258
  "story.why": "{count} údaje ze zápisů vyprávějí život (generace {generation} výzkumu {research}); rodina si ho přečte v rodinné knize aplikace Strom",
259
259
  "story.done": "strom story set {id} se všemi údaji, o které se opírá (--fact) – koncept, dokud ho uživatel neschválí",
260
+ "review.research": "Revize: {name}",
261
+ "review.more": " (a po nich dalších {count})",
262
+ "review.mentions.what": "Co už rodokmen říká o osobě {name} mimo její údaje: {list}{more}",
263
+ "review.mentions.why": "prameny, poznámky nebo deník osobu {name} jmenují, ale v jejích údajích to není – nejlevnější nálezy revize ({research})",
264
+ "review.mentions.done": "každé přečteno: co říká o osobě {name}, je zapsané s pramenem, nebo poznámka říká, proč ne (strom person show {id})",
265
+ "review.entries.what": "Přečíst celé zápisy osoby {name}: {list}{more}",
266
+ "review.entries.why": "snímky tu jsou, ale z každého zápisu je zapsaná jen část – přepis, kmotři nebo svědci, dům, povolání, věk ({research})",
267
+ "review.entries.done": "každý zápis přepsaný celý (strom source edit … --transcript) a co přidává, zapsané: účastníci, dům, povolání, věk",
268
+ "review.verify.what": "Ověřit údaje osoby {name}, které stojí na jednom čtení: {list}{more}",
269
+ "review.verify.why": "každý stojí na jediném čtení snímku; druhé, nezávislé čtení ho prokáže, nebo ukáže chybu ({research})",
270
+ "review.verify.done": "zápis každého údaje přečtený znovu naslepo (strom read M… --blind): čtení se shodují → prokázané; liší se → rozpor s oběma čteními",
271
+ "review.reread.what": "Přečíst znovu modelem {model}, o co se opírají údaje osoby {name}: {list}{more}",
272
+ "review.reread.why": "tyto zápisy četl jen jiný model; {model} je ten, kterým uživatel čte teď ({research})",
273
+ "review.reread.done": "zápis každého údaje přečtený naslepo modelem {model} (strom read M… --blind): shoda → poznámka u údaje; rozdíl → rozpor s oběma čteními",
274
+ "review.conflicts.what": "Rozhodnout, co zůstalo otevřené u osoby {name}: {list}{more}",
275
+ "review.conflicts.why": "rozpory mezi prameny a soupeřící hypotézy čekají na rozhodnutí ({research})",
276
+ "review.conflicts.done": "každý vyřešený nebo rozhodnutý se zdůvodněním (strom conflict resolve, strom hypothesis decide) – nebo úkol říká, co by rozhodlo",
277
+ "review.marriage.what": "Sňatek: {name} a {partner}{at} (před prvním dítětem, {year})",
278
+ "review.marriage.why": "jejich děti jsou zapsané, jejich sňatek ne; zápis dá rodiče obou, věk a domy ({research})",
279
+ "review.marriage.done": "zápis nalezen a zapsán i se svědky – nebo roky {years} prohledány bez něj",
280
+ "review.marriage.locate.what": "Kde jsou zapsány sňatky: {place} kolem roku {year}? (hledá se {name} a {partner})",
281
+ "review.death.what": "Úmrtí: {name}{at} (po roce {year}, posledním zápisu o ní či něm)",
282
+ "review.death.why": "úmrtí ani pohřeb nejsou zapsané; zápis dá datum, věk, často příčinu a dům ({research})",
283
+ "review.death.done": "zápis nalezen a zapsán – nebo knihy od roku {year} prohledány bez něj",
284
+ "review.death.locate.what": "Kde jsou zapsána úmrtí: {place} po roce {year}? (hledá se {name})",
285
+ "review.locate.why": "pro místo a dobu není známá žádná kniha ({research})",
286
+ "ui.menu.review": "Revize osoby: prověřit a doplnit, co o ní víme",
287
+ "ui.review.who": "Koho? (jméno nebo ID jako P0012; Enter nebo 0 vrátí zpět)",
288
+ "ui.review.none": "V tomto rodokmenu nikdo jménem „{who}“ není.",
289
+ "ui.review.pick": "Kterého?",
290
+ "ui.review.family": "I s manželem či manželkou a dětmi?",
291
+ "ui.review.run": "Nechat na tom agenta pracovat hned, samostatně? (úkolů: {n})",
292
+ "ui.o.reread": "druhé čtení",
293
+ "ui.o.reread.offer": "{n} údajů stojí jen na čtení jiným modelem ({models}); uživatel teď čte modelem {model} – jednou to nabídni, jednou větou: strom review <koho> --reread (úkol na osobu; rozhodne uživatel)",
260
294
  "ui.o.stories": "vyprávění",
261
- "ui.o.stories.tell": "zapnuté (výchozí): při zahájení výzkumu řekni uživateli jednou větou, že k předkům budeš psát i vyprávění do rodinné knihy v aplikaci Strom a že to může odmítnout – strom config set stories no (souhlas: strom config set stories yes)",
295
+ "ui.o.stories.tell": "zapnuté (výchozí): řekni uživateli (strom to řekne jen jednou) jednou větou, že k předkům budeš psát i vyprávění do rodinné knihy v aplikaci Strom a že to může odmítnout – strom config set stories no (souhlas: strom config set stories yes)",
262
296
  "ui.o.stories.on": "zapnuté: strom navrhne vyprávění, jakmile zápisy vyprávějí život (úkoly narrate)",
263
297
  "ui.o.stories.off": "vypnuté (uživatel nechce) – nezmiňuj to",
264
298
  "ui.setup.model.strong": "Výzkum potřebuje kvalitní model – čte staré rukopisy a posuzuje prameny: v {agent} zvolte jeho nejlepší model, ne rychlý ani mini.",
@@ -297,6 +331,148 @@
297
331
  "ui.app.drag": "Aplikace Strom se otevřela. Přetáhněte do jejího okna soubor {file}{shown} – poprvé z něj bude nový rodokmen, příště se tentýž rodokmen aktualizuje. S Chrome nebo Edge na tomto počítači ho strom předá sám.",
298
332
  "ui.app.drag.shown": " (je ukázaný v okně se soubory)",
299
333
  "ui.app.nolive": "Průběžné sledování výzkumu potřebuje Chrome nebo Edge – Safari webové stránce nedovolí přístup k tomuto počítači.",
334
+ "ui.app.images": "S obrázky: {n} zápisů vyříznutých ze skenů ({mb} MB).",
335
+ "ui.app.images.unclipped": "Dalších {n} pramenů je na snímcích, ale u nich zatím nikdo nevyznačil, kde zápis je — agent to umí doplnit.",
336
+ "ui.app.images.smaller": "Aby se obrázky vešly do limitu {limit} MB, jsou menší, než je nastaveno: {level} místo {asked}.",
337
+ "ui.app.images.left": "{n} zápisů nejdál od výzkumu je bez obrázku, aby se vše vešlo do limitu {limit} MB.",
338
+ "ui.app.images.scope": "{n} zápisů lidí vzdálenějších od výzkumu je bez obrázku (nastavení excerpts.for: {for}).",
300
339
  "ui.doc.installed": "strom {version} na vlastním Node {node} (oficiálním, z nodejs.org)",
301
- "ui.update.source": "Vyšla nová verze: {version}. Tento strom běží ze zdrojáků: git pull"
340
+ "ui.update.source": "Vyšla nová verze: {version}. Tento strom běží ze zdrojáků: git pull",
341
+ "ui.update.node.available": "Node {from} → {to}: bezpečnostní opravy jeho řady – nainstaluje je strom update.",
342
+ "ui.update.node.sure": "Aktualizovat Node stromu z {from} na {to} (bezpečnostní opravy)?",
343
+ "ui.update.node.done": "✓ Node je aktualizovaný: {from} → {to}.",
344
+ "ui.setup.stromapp": "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ů – a když agent pracuje, sleduje výzkum živě. Chcete ji používat?",
345
+ "ui.setup.stromapp.install": "Ano – nainstalovat ji teď (otevře se v prohlížeči, strom řekne, kam kliknout)",
346
+ "ui.setup.stromapp.later": "Ano, ale teď ne",
347
+ "ui.setup.stromapp.no": "Ne – už ji nezmiňovat",
348
+ "ui.menu.app.watch": "Sledovat práci agenta v aplikaci Strom (živě)",
349
+ "ui.menu.app.new": "Aplikace Strom – výzkum jako rodokmen, sledovaný živě",
350
+ "ui.menu.app.tip": "Tip: výzkum si můžete prohlížet jako rodokmen v aplikaci Strom a sledovat ho živě, když agent pracuje – volba {key}.",
351
+ "ui.menu.app.live": "Agent pracuje – můžete ho živě sledovat v aplikaci Strom: volba {key}.",
352
+ "ui.app.open.now": "Až bude nainstalovaná: otevřít v ní výzkum?",
353
+ "ui.run.follow": "Sledovat mezitím práci živě v aplikaci Strom?",
354
+ "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í vaší IP adresy – nastavit?",
355
+ "ui.pace.cap": "nejvýš {n} za hodinu",
356
+ "ui.pace.nocap": "bez hodinového limitu",
357
+ "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)",
358
+ "ui.o.ask": "otázky",
359
+ "ui.o.ask.tell": "řekni uživateli jednou, jednou větou, že se tě tu může zeptat na kohokoli ve stromu – strom to řekne jen jednou",
360
+ "ui.migrated": "Data rodokmenu jsou převedená pro tuto verzi stromu ({step}).",
361
+ "ui.chat.handover.recent": "Okno s výzkumem a agentem {agent} se otevřelo před chvílí – pokračujte v něm. Tento rozhovor může skončit.",
362
+ "ui.app.where.installed": "nainstalovaná aplikace",
363
+ "ui.menu.browse": "Prohlížet rodokmen: přehled, osoby, předkové, co je nového",
364
+ "ui.browse.stats": "Přehled výzkumu",
365
+ "ui.browse.recent": "Co je nového (posledních 7 dní)",
366
+ "ui.browse.card": "Osoba: její život, rodina a záznamy",
367
+ "ui.browse.pedigree": "Vývod předků jedné osoby",
368
+ "ui.browse.files": "Soubory s výsledky (GEDCOM)",
369
+ "ui.browse.back": "Zpět",
370
+ "ui.browse.whose": "Čí předky? (jméno nebo ID jako P0012; 0 vrátí zpět)",
371
+ "ui.date.about": "asi {date}",
372
+ "ui.date.before": "před {date}",
373
+ "ui.date.after": "po {date}",
374
+ "ui.date.between": "mezi {a} a {b}",
375
+ "ui.date.fromto": "od {a} do {b}",
376
+ "ui.date.from": "od {date}",
377
+ "ui.date.to": "do {date}",
378
+ "ui.st.proven": "doloženo",
379
+ "ui.st.probable": "pravděpodobné",
380
+ "ui.st.possible": "možné",
381
+ "ui.st.lead": "jen stopa",
382
+ "ui.ev.BIRT": "narození",
383
+ "ui.ev.CHR": "křest",
384
+ "ui.ev.DEAT": "úmrtí",
385
+ "ui.ev.BURI": "pohřeb",
386
+ "ui.ev.CREM": "kremace",
387
+ "ui.ev.MARR": "sňatek",
388
+ "ui.ev.MARB": "ohlášky",
389
+ "ui.ev.ENGA": "zasnoubení",
390
+ "ui.ev.DIV": "rozvod",
391
+ "ui.ev.OCCU": "povolání",
392
+ "ui.ev.RESI": "bydliště",
393
+ "ui.ev.EDUC": "vzdělání",
394
+ "ui.ev.RELI": "vyznání",
395
+ "ui.ev.TITL": "titul",
396
+ "ui.ev.CENS": "sčítání lidu",
397
+ "ui.ev.CONF": "biřmování",
398
+ "ui.ev.EMIG": "vystěhování",
399
+ "ui.ev.IMMI": "přistěhování",
400
+ "ui.ev.NATU": "udělení občanství",
401
+ "ui.ev.PROB": "pozůstalostní řízení",
402
+ "ui.ev.WILL": "závěť",
403
+ "ui.gen.2": "rodiče",
404
+ "ui.gen.3": "prarodiče",
405
+ "ui.gen.4": "praprarodiče",
406
+ "ui.gen.5": "prapraprarodiče",
407
+ "ui.gen.n": "{n}. generace",
408
+ "ui.card.house": "{place} č. {house}",
409
+ "ui.card.also": "jiné podoby jména: {names}",
410
+ "ui.card.nofacts": "zatím žádné zapsané údaje",
411
+ "ui.card.parents": "Rodiče: {names}",
412
+ "ui.card.noparents": "Rodiče: zatím neznámí",
413
+ "ui.card.wife": "Manželka: {name}",
414
+ "ui.card.husband": "Manžel: {name}",
415
+ "ui.card.partner": "Partner: {name}",
416
+ "ui.card.unknown": "zatím neznámý",
417
+ "ui.card.children": "Děti: {names}",
418
+ "ui.card.story": "Vyprávění ({status}):",
419
+ "ui.card.story.draft": "koncept",
420
+ "ui.card.story.final": "schválené",
421
+ "ui.stats.title": "{name} – přehled výzkumu",
422
+ "ui.stats.counts": "Osoby: {persons} · rodiny: {families} · záznamy z pramenů: {sources} · snímky: {images} · místa: {places}",
423
+ "ui.stats.facts": "Údaje: doložené {proven} · pravděpodobné {probable} · možné {possible} · jen stopy {lead}",
424
+ "ui.stats.from": "Předkové – {name}:",
425
+ "ui.stats.gen": "známých {known} z {expected} · narození doloženo: {proven}",
426
+ "ui.stats.oldest": "Nejdříve narozený doložený předek: {name}",
427
+ "ui.stats.noancestors": "Zatím nejsou zapsaní žádní předkové.",
428
+ "ui.stats.tasks": "Úkoly: ve frontě {queued} · čekají na vás {waiting} · hotové {done}",
429
+ "ui.stats.sessions": "Sezení agenta: {n} · poslední {last}",
430
+ "ui.stats.cost": " · dosavadní cena {cost}",
431
+ "ui.stats.stories": "Vyprávění: {n} (schválená {final})",
432
+ "ui.ped.noparents": "rodiče zatím neznámí",
433
+ "ui.ped.nofather": "otec zatím neznámý",
434
+ "ui.ped.nomother": "matka zatím neznámá",
435
+ "ui.ped.seen": "(viz výše)",
436
+ "ui.ped.legend": "U každého nejdřív otec, pak matka · ✓ narození doloženo záznamem",
437
+ "ui.ped.more": "Známí předkové sahají až do {n}. generace: strom pedigree {id} --generations {n}",
438
+ "ui.recent.title": "Co přibylo od {since}",
439
+ "ui.recent.nothing": "Od {since} nic nového nepřibylo.",
440
+ "ui.recent.counts": "Nové osoby: {persons} · údaje: nové {facts}, upřesněné {refined} · záznamy z pramenů: {sources} · vyprávění: {stories} · hotové úkoly: {done}",
441
+ "ui.recent.persons": "Noví lidé:",
442
+ "ui.recent.facts": "Nové a upřesněné údaje:",
443
+ "ui.recent.refined": "upřesněno",
444
+ "ui.recent.stories": "Napsaná vyprávění:",
445
+ "ui.recent.sessions": "Co dělal agent:",
446
+ "ui.recent.more": "… a další: {n}",
447
+ "ui.browse.plan": "Co agent udělá dál",
448
+ "ui.plan.title": "Co agent udělá dál – {name}:",
449
+ "ui.plan.now": "právě teď",
450
+ "ui.plan.images": " (nejdřív potřebuje snímky)",
451
+ "ui.plan.more": "… a další úkoly: {n}",
452
+ "ui.plan.stories": "Potom vyprávění: {n} ({names})",
453
+ "ui.plan.waiting": "Čeká na vás: {n} (v menu: Co čeká na vás)",
454
+ "ui.plan.none": "Fronta je prázdná – nové úkoly agent navrhne po dalším sezení, nebo mu v rozhovoru řekněte, co hledat.",
455
+ "ui.plan.steer": "Pořadí změníte v rozhovoru s agentem: řekněte mu, co má přednost.",
456
+ "ui.plan.session": "sezení z {day}",
457
+ "ui.back.stay": "Zpět – zůstat u: {name}",
458
+ "ui.keep": "Nechat, jak je",
459
+ "ui.tree.name.new": "Jak se bude jmenovat nový rodokmen? (třeba příjmení rodiny; 0 vrátí zpět)",
460
+ "ui.run.skip": " · {task} vynechán: už je hotový nebo zrušený",
461
+ "ui.run.skip.held": " · {task} vynechán: pracuje na něm jiný agent",
462
+ "ui.run.next": "Na řadě jsou tyto úkoly, v pořadí, v jakém je agent vezme:",
463
+ "ui.run.story": " (vyprávění)",
464
+ "ui.run.what": "Co má agent udělat?",
465
+ "ui.run.queue": "Pracovat v pořadí fronty – zadáte kolik úkolů",
466
+ "ui.run.pick": "Jen vybrané úkoly ze seznamu",
467
+ "ui.run.which": "Které? Jejich čísla, např. 2 nebo 1,4 nebo 2-5 (0 vrátí zpět)",
468
+ "ui.run.which.bad": "Čísla ze seznamu, 1 až {n}: např. 2 nebo 1,4 nebo 2-5.",
469
+ "ui.run.limit": "Na jeden úkol má agent nejvýš {minutes} minut; pak ho strom zastaví a úkol vrátí do fronty (nastavení run.minutes).",
470
+ "ui.run.empty": "Fronta je prázdná – v rozhovoru agentovi řekněte, co hledat.",
471
+ "ui.run.browser": "· {name}: snímky přes váš prohlížeč – agent dostane nástroje prohlížeče pro {hosts}; musí běžet Chrome s rozšířením Claude",
472
+ "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",
473
+ "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)",
474
+ "ui.menu.working.more": "Samostatně teď pracují agenti: {n}.",
475
+ "ui.run.beside": "⚠ Agent už tu pracuje sám (běhy: {n}). Další vedle něj si vezme jiné úkoly – náklady se sčítají.",
476
+ "ui.run.beside.sure": "Spustit další vedle něj?",
477
+ "ui.run.others": "⚠ V tomto rodokmenu už pracuje jiný běh (od {since}): tento si vezme jiné úkoly – náklady se sčítají."
302
478
  }
@@ -59,14 +59,13 @@
59
59
  "ui.menu.start": "Die Forschung mit dem Agenten beginnen",
60
60
  "ui.menu.run": "Den Agenten allein arbeiten lassen",
61
61
  "ui.menu.waitlist": "Was auf Sie wartet",
62
- "ui.menu.results": "Ergebnisse",
63
62
  "ui.menu.settings": "Einstellungen",
64
63
  "ui.menu.doctor": "Installation prüfen",
65
64
  "ui.menu.trees": "Anderer Stammbaum",
66
65
  "ui.menu.newtree": "Stammbaum anlegen",
67
66
  "ui.menu.quit": "Beenden",
68
67
  "ui.menu.bye": "Auf Wiedersehen. Nächstes Mal genügt: strom",
69
- "ui.run.how": "Wie viele Aufgaben soll der Agent bearbeiten? (er hört früher auf, wenn es nichts mehr zu tun gibt)",
68
+ "ui.run.how": "Wie viele Aufgaben? (er hört früher auf, wenn es nichts mehr zu tun gibt; 0 geht zurück)",
70
69
  "ui.run.start": "Der Agent arbeitet jetzt allein. Mit Strg-C halten Sie ihn an – nichts geht verloren.",
71
70
  "ui.waiting.none": "Nichts wartet auf Sie.",
72
71
  "ui.waiting.open": "Den Ordner für die Scans öffnen?",
@@ -81,7 +80,7 @@
81
80
  "ui.tree.default": "Meine Familie",
82
81
  "ui.chat.open": "Das Gespräch mit dem Agenten ({agent}) wird geöffnet. Zum Beenden tippen Sie {exit}.",
83
82
  "ui.chat.first": "Hallo, ich möchte meine Vorfahren erforschen. Starte `strom`, erkläre mir in ein paar Sätzen, wie wir zusammenarbeiten, und frag mich, wen wir suchen und was wir schon wissen.",
84
- "ui.chat.continue": "Lass uns die Forschung fortsetzen. Starte `strom`, sag mir kurz, wo die Forschung steht und was auf mich wartet, schlag vor, wie es weitergeht, und sag mir in einem Satz, was ich dich zum Stammbaum fragen kann.",
83
+ "ui.chat.continue": "Lass uns die Forschung fortsetzen. Starte `strom`, sag mir kurz, wo die Forschung steht und was auf mich wartet, und schlag vor, wie es weitergeht.",
85
84
  "ui.setup.welcome": "Willkommen bei Strom Ahnenforschung. Wir richten ein paar Dinge ein – passt die vorgeschlagene Antwort, drücken Sie einfach Enter.",
86
85
  "ui.setup.again": "Einstellungen – Enter behält den aktuellen Wert.",
87
86
  "ui.setup.lang": "Sprache (de, en, cs, pl, …)",
@@ -111,14 +110,14 @@
111
110
  "ui.setup.shortcut": "Eine Verknüpfung „Strom Ahnenforschung“ auf dem Desktop anlegen?",
112
111
  "ui.setup.shortcut.done": "✓ Verknüpfung: {file}",
113
112
  "ui.setup.skill": "✓ {agent} kennt strom jetzt in jedem Ordner.",
114
- "ui.setup.app": "✓ Die Strom-App ist auf diesem Computer – die Ergebnisse sind zum Import bereit.",
113
+ "ui.setup.app": "✓ Die Strom-App ist auf diesem Computer – das Menü öffnet die Forschung darin, und während der Agent arbeitet, verfolgt die App sie live.",
115
114
  "ui.setup.done": "Fertig.",
116
115
  "ui.app.opened": "Die Strom-App wird geöffnet ({where}).",
117
116
  "ui.app.browser": "im Browser",
118
117
  "ui.app.url": "Öffnen Sie sie hier: {url}",
119
118
  "ui.app.installed": "Die Strom-App ist installiert ({kind}).",
120
119
  "ui.app.install": "Die Strom-App wurde im Browser geöffnet. Als App installieren Sie sie über das Installationssymbol am rechten Ende der Adressleiste (Chrome, Edge); in Safari wählen Sie Ablage → Zum Dock hinzufügen.",
121
- "ui.menu.app": "Die Strom-App öffnen",
120
+ "ui.menu.app": "Die Forschung in der Strom-App öffnen",
122
121
  "ui.chat.agent.missing": "{agent} ist nicht installiert – starten Sie die Einstellungen (strom setup), dort wird er installiert.",
123
122
  "ui.shortcut.done": "Verknüpfung auf dem Desktop: {file}",
124
123
  "ui.consent.connector.hosts": "Er verbindet sich nur mit {hosts} – langsam, über den Begrenzer von strom.",
@@ -186,6 +185,7 @@
186
185
  "session.user": "vom Benutzer angehalten",
187
186
  "session.run": "der Lauf brach ab, bevor die Sitzung endete (unterbrochen, oder der Computer wurde ausgeschaltet)",
188
187
  "session.chat": "das Gespräch endete, bevor die Sitzung geschlossen wurde",
188
+ "transcript.read": "Transkription von einem Leser ({model}) aus dem Ausschnitt des Eintrags, von einem zweiten Leser geprüft ({date}, strom transcripts).",
189
189
  "session.agent": "der Agent hörte auf ({outcome}), ohne die Sitzung zu schließen",
190
190
  "ui.tree.created": "✓ Der Stammbaum „{name}“ ist angelegt: {dir}",
191
191
  "ui.chat.trust": "Beim ersten Mal fragt Claude Code, ob Sie diesem Ordner vertrauen. Es ist der Ordner Ihres Stammbaums, von strom angelegt – bestätigen Sie mit „Yes, proceed“.",
@@ -250,15 +250,49 @@
250
250
  "ui.why.handover": "die Forschung gehört in ein eigenes Gespräch im Ordner des Stammbaums (seine Regeln, keine Nachfrage bei jedem Schritt): dies öffnet es – sag dem Benutzer, dort weiterzumachen; hier nur, wenn er will",
251
251
  "ui.app.research": "Die Forschung {name} wird in der Strom-App geöffnet ({where}): beim ersten Mal als neuer Stammbaum, danach wird derselbe Stammbaum aktualisiert.",
252
252
  "ui.app.following": "Die Strom-App verfolgt die Forschung {name} laufend ({where}): was gefunden wird, erscheint dort von selbst.",
253
- "ui.o.results.installed.live": "{file} – für die Strom-App, hier installiert: strom app öffnet diese Forschung darin, und während du arbeitest, verfolgt die App sie laufend (was du einträgst, erscheint dort von selbst) – biete es einmal an",
253
+ "ui.o.results.installed.live": "{file} – für die Strom-App, hier installiert: strom app öffnet diese Forschung darin, und während du arbeitest, verfolgt die App sie laufend (was du einträgst, erscheint dort von selbst) – biete es an (strom sagt das nur einmal)",
254
254
  "ui.o.results.offer.live": "{file} – für die Strom-App, hier noch nicht installiert: biete dem Benutzer an, die Forschung darin laufend zu verfolgen – Installation von {url} (strom app install öffnet sie dort und sagt, wohin klicken), dann strom app",
255
255
  "story.what": "Die Geschichte schreiben: {name}",
256
256
  "story.more.what": "Die Geschichte ergänzen: {name} – {count} neue Angaben",
257
257
  "story.where": "die erfassten Angaben (strom person show {id})",
258
258
  "story.why": "{count} Angaben aus Einträgen erzählen das Leben (Generation {generation} der Forschung {research}); die Familie liest es im Familienbuch der Strom-App",
259
259
  "story.done": "strom story set {id} mit jeder Angabe, auf der sie beruht (--fact) – ein Entwurf, bis der Benutzer sie freigibt",
260
+ "review.research": "Durchsicht: {name}",
261
+ "review.more": " (und danach {count} weitere)",
262
+ "review.mentions.what": "Was der Stammbaum außerhalb der Angaben über {name} schon sagt: {list}{more}",
263
+ "review.mentions.why": "Quellen, Notizen oder das Tagebuch nennen {name}, die Angaben zeigen es aber nicht – die günstigsten Funde einer Durchsicht ({research})",
264
+ "review.mentions.done": "jede gelesen: was sie über {name} sagt, ist mit der Quelle erfasst, oder eine Notiz sagt, warum nicht (strom person show {id})",
265
+ "review.entries.what": "Die Einträge von {name} ganz lesen: {list}{more}",
266
+ "review.entries.why": "die Bilder sind da, aber von jedem Eintrag ist nur ein Teil erfasst – die Abschrift, Paten oder Zeugen, Haus, Berufe, Alter ({research})",
267
+ "review.entries.done": "jeder Eintrag ganz abgeschrieben (strom source edit … --transcript) und was er hinzufügt erfasst: Beteiligte, Haus, Beruf, Alter",
268
+ "review.verify.what": "Die Angaben von {name} prüfen, die auf einer Lesung beruhen: {list}{more}",
269
+ "review.verify.why": "jede beruht auf einer einzigen Lesung ihres Bildes; eine zweite, unabhängige beweist sie oder zeigt einen Fehler ({research})",
270
+ "review.verify.done": "der Eintrag jeder Angabe blind neu gelesen (strom read M… --blind): die Lesungen stimmen überein → bewiesen; sie weichen ab → ein Widerspruch mit beiden",
271
+ "review.reread.what": "Mit {model} neu lesen, worauf die Angaben von {name} beruhen: {list}{more}",
272
+ "review.reread.why": "diese Einträge hat nur ein anderes Modell gelesen; mit {model} liest der Nutzer jetzt ({research})",
273
+ "review.reread.done": "der Eintrag jeder Angabe blind mit {model} gelesen (strom read M… --blind): übereinstimmend → Notiz an der Angabe; abweichend → ein Widerspruch mit beiden Lesungen",
274
+ "review.conflicts.what": "Entscheiden, was bei {name} offen geblieben ist: {list}{more}",
275
+ "review.conflicts.why": "Widersprüche zwischen Quellen und konkurrierende Hypothesen warten auf eine Entscheidung ({research})",
276
+ "review.conflicts.done": "jeder gelöst oder entschieden mit Begründung (strom conflict resolve, strom hypothesis decide) – oder eine Aufgabe sagt, was entscheiden würde",
277
+ "review.marriage.what": "Heirat: {name} und {partner}{at} (vor dem ersten Kind, {year})",
278
+ "review.marriage.why": "ihre Kinder sind erfasst, ihre Heirat nicht; der Eintrag nennt die Eltern beider, Alter und Häuser ({research})",
279
+ "review.marriage.done": "der Eintrag gefunden und mit den Zeugen erfasst – oder {years} ohne ihn durchsucht",
280
+ "review.marriage.locate.what": "Wo sind die Heiraten von {place} um {year} verzeichnet? (gesucht: {name} und {partner})",
281
+ "review.death.what": "Tod: {name}{at} (nach {year}, dem letzten Eintrag über die Person)",
282
+ "review.death.why": "weder Tod noch Begräbnis sind erfasst; der Eintrag nennt Datum, Alter, oft die Ursache und das Haus ({research})",
283
+ "review.death.done": "der Eintrag gefunden und erfasst – oder die Bücher ab {year} ohne ihn durchsucht",
284
+ "review.death.locate.what": "Wo sind die Todesfälle von {place} nach {year} verzeichnet? (gesucht: {name})",
285
+ "review.locate.why": "für Ort und Zeit ist kein Buch bekannt ({research})",
286
+ "ui.menu.review": "Eine Person durchsehen: prüfen und ergänzen, was über sie bekannt ist",
287
+ "ui.review.who": "Wen? (ein Name oder eine ID wie P0012; Enter oder 0 geht zurück)",
288
+ "ui.review.none": "Niemand namens „{who}“ in diesem Stammbaum.",
289
+ "ui.review.pick": "Welche Person?",
290
+ "ui.review.family": "Mit Ehepartner und Kindern?",
291
+ "ui.review.run": "Den Agenten jetzt allein daran arbeiten lassen? ({n} Aufgaben)",
292
+ "ui.o.reread": "zweite Lesung",
293
+ "ui.o.reread.offer": "{n} Angaben beruhen nur auf Lesungen eines anderen Modells ({models}); der Nutzer liest jetzt mit {model} – biete es einmal an, in einem Satz: strom review <wen> --reread (eine Aufgabe je Person; der Nutzer entscheidet)",
260
294
  "ui.o.stories": "Geschichten",
261
- "ui.o.stories.tell": "an (Standard): sag dem Benutzer zu Beginn der Forschung in einem Satz, dass du auch Geschichten seiner Vorfahren für das Familienbuch in der Strom-App schreibst und dass er ablehnen kann – strom config set stories no (Zustimmung: strom config set stories yes)",
295
+ "ui.o.stories.tell": "an (Standard): sag dem Benutzer (strom sagt das nur einmal) in einem Satz, dass du auch Geschichten seiner Vorfahren für das Familienbuch in der Strom-App schreibst und dass er ablehnen kann – strom config set stories no (Zustimmung: strom config set stories yes)",
262
296
  "ui.o.stories.on": "an: strom schlägt eine Geschichte vor, sobald Einträge ein Leben erzählen (Aufgaben narrate)",
263
297
  "ui.o.stories.off": "aus (der Benutzer will es nicht) – nicht ansprechen",
264
298
  "ui.setup.model.strong": "Die Forschung braucht ein starkes Modell – es liest alte Handschriften und wägt die Einträge ab: wählen Sie in {agent} das beste Modell, kein schnelles oder Mini-Modell.",
@@ -297,6 +331,148 @@
297
331
  "ui.app.drag": "Die Strom-App ist geöffnet. Ziehen Sie die Datei {file}{shown} in ihr Fenster – beim ersten Mal wird daraus ein neuer Stammbaum, danach wird derselbe Stammbaum aktualisiert. Mit Chrome oder Edge auf diesem Computer übergibt strom sie selbst.",
298
332
  "ui.app.drag.shown": " (im Dateifenster angezeigt)",
299
333
  "ui.app.nolive": "Die Forschung laufend zu verfolgen braucht Chrome oder Edge – Safari lässt eine Webseite nicht auf diesen Computer zugreifen.",
334
+ "ui.app.images": "Mit Bildern: {n} Einträge aus ihren Scans ausgeschnitten ({mb} MB).",
335
+ "ui.app.images.unclipped": "Weitere {n} Quellen liegen auf Bildern, aber dort ist noch nicht markiert, wo ihr Eintrag steht – der Agent kann das nachholen.",
336
+ "ui.app.images.smaller": "Damit die Bilder in die Grenze von {limit} MB passen, sind sie kleiner als eingestellt: {level} statt {asked}.",
337
+ "ui.app.images.left": "{n} Einträge, die am weitesten von der Forschung entfernt sind, bleiben ohne Bild, damit alles in die Grenze von {limit} MB passt.",
338
+ "ui.app.images.scope": "{n} Einträge von Personen, die der Forschung ferner stehen, haben kein Bild (Einstellung excerpts.for: {for}).",
300
339
  "ui.doc.installed": "strom {version} auf eigenem Node {node} (offiziell, von nodejs.org)",
301
- "ui.update.source": "Eine neue Version ist da: {version}. Dieses strom läuft aus den Quellen: git pull"
340
+ "ui.update.source": "Eine neue Version ist da: {version}. Dieses strom läuft aus den Quellen: git pull",
341
+ "ui.update.node.available": "Node {from} → {to}: Sicherheitskorrekturen seiner Reihe – strom update installiert sie.",
342
+ "ui.update.node.sure": "strom's Node von {from} auf {to} aktualisieren (Sicherheitskorrekturen)?",
343
+ "ui.update.node.done": "✓ Node ist aktualisiert: {from} → {to}.",
344
+ "ui.setup.stromapp": "Die Strom-App (kostenlos, im Browser) zeigt die Forschung als Stammbaum – jeden Eintrag mit seinem Bild aus dem Scan, die Geschichten der Vorfahren – und verfolgt sie live, während der Agent arbeitet. Möchten Sie sie verwenden?",
345
+ "ui.setup.stromapp.install": "Ja – jetzt installieren (sie öffnet sich im Browser, strom sagt, wo Sie klicken)",
346
+ "ui.setup.stromapp.later": "Ja, aber nicht jetzt",
347
+ "ui.setup.stromapp.no": "Nein – nicht mehr erwähnen",
348
+ "ui.menu.app.watch": "Dem Agenten in der Strom-App bei der Arbeit zusehen (live)",
349
+ "ui.menu.app.new": "Die Strom-App – die Forschung als Stammbaum, live verfolgt",
350
+ "ui.menu.app.tip": "Tipp: Die Forschung lässt sich in der Strom-App als Stammbaum ansehen und live verfolgen, während der Agent arbeitet – Auswahl {key}.",
351
+ "ui.menu.app.live": "Der Agent arbeitet – Sie können ihm in der Strom-App live zusehen: Auswahl {key}.",
352
+ "ui.app.open.now": "Sobald sie installiert ist: die Forschung darin öffnen?",
353
+ "ui.run.follow": "Die Arbeit währenddessen live in der Strom-App verfolgen?",
354
+ "ui.consent.host.pace": "Ihr eigenes Tempo für {host}: mindestens {seconds} s zwischen zwei Anfragen, {cap}. Zu schnelles Laden bremst das Archiv für alle und kann Ihre IP-Adresse sperren lassen – so einstellen?",
355
+ "ui.pace.cap": "höchstens {n} pro Stunde",
356
+ "ui.pace.nocap": "ohne Stundenlimit",
357
+ "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)",
358
+ "ui.o.ask": "Fragen",
359
+ "ui.o.ask.tell": "sag dem Nutzer einmal, in einem Satz, dass er dich hier nach jedem im Stammbaum fragen kann – strom sagt das nur einmal",
360
+ "ui.migrated": "Die Daten des Stammbaums wurden für diese Version von strom aktualisiert ({step}).",
361
+ "ui.chat.handover.recent": "Ein Fenster mit der Forschung und {agent} hat sich gerade geöffnet – machen Sie dort weiter. Dieses Gespräch kann enden.",
362
+ "ui.app.where.installed": "installierte App",
363
+ "ui.menu.browse": "Den Stammbaum ansehen: Überblick, Personen, Vorfahren, Neues",
364
+ "ui.browse.stats": "Überblick über die Forschung",
365
+ "ui.browse.recent": "Was ist neu (die letzten 7 Tage)",
366
+ "ui.browse.card": "Eine Person: Leben, Familie und Einträge",
367
+ "ui.browse.pedigree": "Die Vorfahren einer Person",
368
+ "ui.browse.files": "Die Ergebnisdateien (GEDCOM)",
369
+ "ui.browse.back": "Zurück",
370
+ "ui.browse.whose": "Wessen Vorfahren? (ein Name oder eine ID wie P0012; 0 geht zurück)",
371
+ "ui.date.about": "etwa {date}",
372
+ "ui.date.before": "vor {date}",
373
+ "ui.date.after": "nach {date}",
374
+ "ui.date.between": "zwischen {a} und {b}",
375
+ "ui.date.fromto": "von {a} bis {b}",
376
+ "ui.date.from": "ab {date}",
377
+ "ui.date.to": "bis {date}",
378
+ "ui.st.proven": "belegt",
379
+ "ui.st.probable": "wahrscheinlich",
380
+ "ui.st.possible": "möglich",
381
+ "ui.st.lead": "nur ein Hinweis",
382
+ "ui.ev.BIRT": "Geburt",
383
+ "ui.ev.CHR": "Taufe",
384
+ "ui.ev.DEAT": "Tod",
385
+ "ui.ev.BURI": "Begräbnis",
386
+ "ui.ev.CREM": "Einäscherung",
387
+ "ui.ev.MARR": "Heirat",
388
+ "ui.ev.MARB": "Aufgebot",
389
+ "ui.ev.ENGA": "Verlobung",
390
+ "ui.ev.DIV": "Scheidung",
391
+ "ui.ev.OCCU": "Beruf",
392
+ "ui.ev.RESI": "Wohnort",
393
+ "ui.ev.EDUC": "Ausbildung",
394
+ "ui.ev.RELI": "Religion",
395
+ "ui.ev.TITL": "Titel",
396
+ "ui.ev.CENS": "Volkszählung",
397
+ "ui.ev.CONF": "Firmung",
398
+ "ui.ev.EMIG": "Auswanderung",
399
+ "ui.ev.IMMI": "Einwanderung",
400
+ "ui.ev.NATU": "Einbürgerung",
401
+ "ui.ev.PROB": "Nachlassverfahren",
402
+ "ui.ev.WILL": "Testament",
403
+ "ui.gen.2": "Eltern",
404
+ "ui.gen.3": "Großeltern",
405
+ "ui.gen.4": "Urgroßeltern",
406
+ "ui.gen.5": "Ururgroßeltern",
407
+ "ui.gen.n": "{n}. Generation",
408
+ "ui.card.house": "{place} Nr. {house}",
409
+ "ui.card.also": "andere Formen des Namens: {names}",
410
+ "ui.card.nofacts": "noch keine Angaben",
411
+ "ui.card.parents": "Eltern: {names}",
412
+ "ui.card.noparents": "Eltern: noch unbekannt",
413
+ "ui.card.wife": "Ehefrau: {name}",
414
+ "ui.card.husband": "Ehemann: {name}",
415
+ "ui.card.partner": "Partner: {name}",
416
+ "ui.card.unknown": "noch unbekannt",
417
+ "ui.card.children": "Kinder: {names}",
418
+ "ui.card.story": "Geschichte ({status}):",
419
+ "ui.card.story.draft": "Entwurf",
420
+ "ui.card.story.final": "freigegeben",
421
+ "ui.stats.title": "{name} – die Forschung im Überblick",
422
+ "ui.stats.counts": "Personen: {persons} · Familien: {families} · Einträge aus Quellen: {sources} · Scans: {images} · Orte: {places}",
423
+ "ui.stats.facts": "Angaben: belegt {proven} · wahrscheinlich {probable} · möglich {possible} · nur Hinweise {lead}",
424
+ "ui.stats.from": "Vorfahren von {name}:",
425
+ "ui.stats.gen": "{known} von {expected} bekannt · Geburt belegt: {proven}",
426
+ "ui.stats.oldest": "Am frühesten geborener belegter Vorfahr: {name}",
427
+ "ui.stats.noancestors": "Noch keine Vorfahren erfasst.",
428
+ "ui.stats.tasks": "Aufgaben: in der Warteschlange {queued} · warten auf Sie {waiting} · erledigt {done}",
429
+ "ui.stats.sessions": "Sitzungen des Agenten: {n} · die letzte {last}",
430
+ "ui.stats.cost": " · Kosten bisher {cost}",
431
+ "ui.stats.stories": "Geschichten: {n} (freigegeben {final})",
432
+ "ui.ped.noparents": "Eltern noch unbekannt",
433
+ "ui.ped.nofather": "Vater noch unbekannt",
434
+ "ui.ped.nomother": "Mutter noch unbekannt",
435
+ "ui.ped.seen": "(siehe oben)",
436
+ "ui.ped.legend": "Zuerst der Vater, dann die Mutter · ✓ Geburt durch einen Eintrag belegt",
437
+ "ui.ped.more": "Die bekannten Vorfahren reichen bis zur {n}. Generation: strom pedigree {id} --generations {n}",
438
+ "ui.recent.title": "Was seit {since} dazukam",
439
+ "ui.recent.nothing": "Seit {since} nichts Neues.",
440
+ "ui.recent.counts": "Neue Personen: {persons} · Angaben: neu {facts}, präzisiert {refined} · Einträge aus Quellen: {sources} · Geschichten: {stories} · erledigte Aufgaben: {done}",
441
+ "ui.recent.persons": "Neue Personen:",
442
+ "ui.recent.facts": "Neue und präzisierte Angaben:",
443
+ "ui.recent.refined": "präzisiert",
444
+ "ui.recent.stories": "Geschriebene Geschichten:",
445
+ "ui.recent.sessions": "Was der Agent tat:",
446
+ "ui.recent.more": "… und {n} weitere",
447
+ "ui.browse.plan": "Was der Agent als Nächstes tut",
448
+ "ui.plan.title": "Was der Agent als Nächstes tut – {name}:",
449
+ "ui.plan.now": "gerade jetzt",
450
+ "ui.plan.images": " (braucht zuerst die Scans)",
451
+ "ui.plan.more": "… und {n} weitere Aufgaben",
452
+ "ui.plan.stories": "Danach die Geschichten: {n} ({names})",
453
+ "ui.plan.waiting": "Wartet auf Sie: {n} (im Menü: Was auf Sie wartet)",
454
+ "ui.plan.none": "Die Warteschlange ist leer – neue Aufgaben schlägt der Agent nach der nächsten Sitzung vor, oder sagen Sie ihm im Gespräch, was er suchen soll.",
455
+ "ui.plan.steer": "Die Reihenfolge ändern Sie im Gespräch mit dem Agenten: Sagen Sie ihm, was Vorrang hat.",
456
+ "ui.plan.session": "Sitzung vom {day}",
457
+ "ui.back.stay": "Zurück – bei {name} bleiben",
458
+ "ui.keep": "So lassen",
459
+ "ui.tree.name.new": "Wie soll der neue Stammbaum heißen? (z. B. der Familienname; 0 geht zurück)",
460
+ "ui.run.skip": " · {task} ausgelassen: er ist schon erledigt oder verworfen",
461
+ "ui.run.skip.held": " · {task} ausgelassen: ein anderer Agent arbeitet daran",
462
+ "ui.run.next": "Als Nächstes in der Warteschlange, in der Reihenfolge, in der der Agent sie nimmt:",
463
+ "ui.run.story": " (eine Geschichte)",
464
+ "ui.run.what": "Was soll der Agent tun?",
465
+ "ui.run.queue": "Die Warteschlange in dieser Reihenfolge abarbeiten – Sie sagen, wie viele",
466
+ "ui.run.pick": "Nur die Aufgaben, die Sie aus der Liste wählen",
467
+ "ui.run.which": "Welche? Ihre Nummern, z. B. 2 oder 1,4 oder 2-5 (0 geht zurück)",
468
+ "ui.run.which.bad": "Nummern aus der Liste, 1 bis {n}: z. B. 2 oder 1,4 oder 2-5.",
469
+ "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).",
470
+ "ui.run.empty": "Die Warteschlange ist leer – sagen Sie dem Agenten im Gespräch, was er suchen soll.",
471
+ "ui.run.browser": "· {name}: Bilder über Ihren Browser – der Agent bekommt Browser-Werkzeuge für {hosts}; Chrome mit der Claude-Erweiterung muss laufen",
472
+ "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",
473
+ "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)",
474
+ "ui.menu.working.more": "Gerade arbeiten Agenten selbstständig: {n}.",
475
+ "ui.run.beside": "⚠ Hier arbeitet schon ein Agent selbstständig (Läufe: {n}). Ein weiterer daneben nimmt andere Aufgaben – die Kosten addieren sich.",
476
+ "ui.run.beside.sure": "Einen weiteren daneben starten?",
477
+ "ui.run.others": "⚠ In diesem Stammbaum arbeitet schon ein anderer Lauf (seit {since}): dieser nimmt andere Aufgaben – die Kosten addieren sich."
302
478
  }