strom-research 1.25.0-beta.2 → 1.25.0-beta.3

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 (82) hide show
  1. package/CHANGELOG.cs.md +12 -1
  2. package/CHANGELOG.de.md +14 -1
  3. package/CHANGELOG.md +14 -1
  4. package/assets/archives.json +4 -3
  5. package/assets/lang/cs.json +112 -0
  6. package/assets/lang/de.json +112 -0
  7. package/assets/method/core.md +4 -0
  8. package/dist/agents/global.js +4 -3
  9. package/dist/agents/launch.js +4 -2
  10. package/dist/brief/brief.js +13 -3
  11. package/dist/brief/history.js +69 -39
  12. package/dist/brief/places.js +125 -0
  13. package/dist/cli/backups.js +13 -4
  14. package/dist/cli/context.js +10 -1
  15. package/dist/cli/help.js +2 -1
  16. package/dist/cli/main.js +13 -4
  17. package/dist/cli/menu-links.js +89 -0
  18. package/dist/cli/menu-research.js +5 -4
  19. package/dist/cli/menu-settings.js +100 -10
  20. package/dist/cli/menu-waiting.js +59 -1
  21. package/dist/cli/ui.js +107 -0
  22. package/dist/commands/browse.js +13 -4
  23. package/dist/commands/connectors.js +2 -1
  24. package/dist/commands/guide.js +5 -2
  25. package/dist/commands/history.js +134 -9
  26. package/dist/commands/index.js +1 -0
  27. package/dist/commands/links.js +21 -2
  28. package/dist/commands/output.js +4 -2
  29. package/dist/commands/placeid.js +411 -0
  30. package/dist/commands/research.js +5 -3
  31. package/dist/commands/session.js +74 -9
  32. package/dist/commands/setup.js +216 -14
  33. package/dist/commands/sources.js +23 -3
  34. package/dist/commands/start.js +9 -6
  35. package/dist/commands/tasks.js +62 -10
  36. package/dist/commands/trees.js +40 -7
  37. package/dist/core/backup.js +42 -6
  38. package/dist/core/busy.js +24 -0
  39. package/dist/core/claudedir.js +38 -0
  40. package/dist/core/config.js +46 -1
  41. package/dist/core/connector.js +2 -1
  42. package/dist/core/eventkinds.js +97 -0
  43. package/dist/core/excerpt.js +21 -6
  44. package/dist/core/gate.js +3 -0
  45. package/dist/core/historyalign.js +285 -0
  46. package/dist/core/knownterms.js +14 -1
  47. package/dist/core/links.js +49 -4
  48. package/dist/core/live.js +652 -194
  49. package/dist/core/liveged-worker.js +22 -0
  50. package/dist/core/liveged.js +163 -0
  51. package/dist/core/lock.js +1 -1
  52. package/dist/core/model.js +4 -0
  53. package/dist/core/net.js +80 -5
  54. package/dist/core/offline.js +102 -0
  55. package/dist/core/pastevents.js +191 -20
  56. package/dist/core/phone.js +2 -2
  57. package/dist/core/phrases.js +5 -0
  58. package/dist/core/placeadopt.js +22 -0
  59. package/dist/core/placehistory.js +25 -7
  60. package/dist/core/placeid.js +935 -0
  61. package/dist/core/places.js +2 -4
  62. package/dist/core/placesview.js +140 -0
  63. package/dist/core/queue.js +29 -4
  64. package/dist/core/schema.js +18 -1
  65. package/dist/core/self.js +102 -18
  66. package/dist/core/semver.js +32 -0
  67. package/dist/core/shortcut.js +3 -3
  68. package/dist/core/stromapp.js +19 -0
  69. package/dist/core/sync.js +18 -4
  70. package/dist/core/terms.js +19 -5
  71. package/dist/core/transcripts.js +6 -6
  72. package/dist/core/tree.js +24 -1
  73. package/dist/core/uninstall.js +5 -5
  74. package/dist/core/update.js +502 -65
  75. package/dist/core/waiting.js +39 -3
  76. package/dist/core/webgate.js +7 -3
  77. package/dist/core/workers.js +24 -4
  78. package/dist/gedcom/export.js +73 -0
  79. package/dist/gedcom/lines.js +1 -1
  80. package/dist/gedcom/validate.js +10 -2
  81. package/dist/runners/runner.js +5 -2
  82. package/package.json +2 -1
package/CHANGELOG.cs.md CHANGED
@@ -7,7 +7,7 @@ Změny každé verze ve zkratce. Úplné poznámky a instalační řádky jsou n
7
7
 
8
8
  ## 1.25.0
9
9
 
10
- *Připravuje se: bety do 1.25.0-beta.2. Oddíl bude úplný s vydáním.*
10
+ *Připravuje se: bety do 1.25.0-beta.3. Oddíl bude úplný s vydáním.*
11
11
 
12
12
  - **Data pro widget Strom i na Windows.** Výzkum teď zapisuje to, co z něj ukazuje widget Strom (na čem se pracuje,
13
13
  nálezy za posledních 24 hodin, co čeká), i na Windows, do `%USERPROFILE%\.config\strom\widget`, se značkou verze
@@ -24,6 +24,17 @@ Změny každé verze ve zkratce. Úplné poznámky a instalační řádky jsou n
24
24
  a co se vyřadí, a pak jen na „ano“ člověka v terminálu. Nic se nemaže: záznamy přidané od té doby se vyřadí a i sám
25
25
  návrat jde stejně vrátit. Odkaz `strom-research://back` ho otevře k jedné změně;
26
26
  přehled mostu návrat odliší.
27
+ - **Ztotožnění míst.** Výzkum ztotožňuje místa svých záznamů (`strom place identify`, `propose`, `unlocated`): místo
28
+ jisté ze záznamů dostane souřadnice, jména a farnost v čase; kde jistota není, zeptá se člověka s nejvýš třemi
29
+ kandidáty, nebo řekne, co by rozhodlo. Otázky čekají v oddílu Čeká, most je nabízí aplikaci Strom a `strom place
30
+ undo` vezme poslední odpověď zpět.
31
+ - **Druhy dějin.** `history.kinds` určuje, jaké druhy událostí dějiny míst hledají (války, epidemie…). `strom history
32
+ align` nejdřív řekne, co by skryl, znovu ukázal a hledal, a provede to jen na „ano“ člověka; nic nalezeného se nemaže.
33
+ - **Vedlejší větve nakonec.** Ve výzkumu s více liniemi čeká práce, která žádné linii nepomáhá, až linie nebudou mít
34
+ co dělat (`queue.offLine`: nakonec, podle priority, nebo nikdy).
35
+ - **Aktualizace bez přerušení práce.** `strom update` instaluje každou verzi do vlastní složky, takže rozběhnutá práce
36
+ nebo rozhovor pokračuje se svou verzí; starší verze odstraní další aktualizace nebo `strom tidy` a `strom doctor`
37
+ je vypíše. Most aplikaci Strom odpovídá i během vlastní obnovy a během sestavování souboru stromu.
27
38
 
28
39
  ## 1.24.0
29
40
 
package/CHANGELOG.de.md CHANGED
@@ -7,7 +7,7 @@ Die Änderungen jeder Version in Kürze. Die vollständigen Hinweise und die Ins
7
7
 
8
8
  ## 1.25.0
9
9
 
10
- *In Vorbereitung: die Betas bis 1.25.0-beta.2. Der Abschnitt ist mit dem Release vollständig.*
10
+ *In Vorbereitung: die Betas bis 1.25.0-beta.3. Der Abschnitt ist mit dem Release vollständig.*
11
11
 
12
12
  - **Daten für das Strom-Widget auch unter Windows.** Eine Forschung schreibt jetzt, was das Strom-Widget von ihr zeigt
13
13
  (woran gearbeitet wird, die Funde der letzten 24 Stunden, was wartet), auch unter Windows, nach
@@ -27,6 +27,19 @@ Die Änderungen jeder Version in Kürze. Die vollständigen Hinweise und die Ins
27
27
  Nichts wird gelöscht: seither hinzugefügte Einträge werden beiseitegelegt, und die Rückkehr selbst lässt sich ebenso
28
28
  zurücknehmen. Der Link `strom-research://back` öffnet sie zu einer Änderung; das
29
29
  Protokoll der Brücke weist eine Rückkehr eigens aus.
30
+ - **Orte bestimmen.** Die Forschung bestimmt die Orte ihrer Einträge (`strom place identify`, `propose`,
31
+ `unlocated`): ein aus den Einträgen sicherer Ort erhält Koordinaten, Namen und Pfarrei im Lauf der Zeit; wo es nicht
32
+ sicher ist, fragt sie eine Person mit höchstens drei Kandidaten oder sagt, was entscheiden würde. Die Fragen warten
33
+ unter „Wartet“, die Brücke bietet sie der Strom-App an, und `strom place undo` nimmt die letzte Antwort zurück.
34
+ - **Arten der Geschichte.** `history.kinds` legt fest, welche Arten von Ereignissen die Geschichte der Orte sucht
35
+ (Kriege, Epidemien …). `strom history align` sagt zuerst, was es verbergen, wieder zeigen und suchen würde, und tut
36
+ es nur auf das Ja einer Person; nichts Gefundenes wird gelöscht.
37
+ - **Nebenzweige zuletzt.** In einer Forschung mit mehreren Linien wartet Arbeit, die keiner Linie hilft, bis die
38
+ Linien nichts mehr zu tun haben (`queue.offLine`: zuletzt, nach Priorität oder nie).
39
+ - **Aktualisieren, ohne die Arbeit anzuhalten.** `strom update` installiert jede Version in einen eigenen Ordner, so
40
+ geht eine laufende Arbeit oder ein Gespräch mit ihrer Version weiter; ältere Versionen gehen beim nächsten Update
41
+ oder mit `strom tidy`, und `strom doctor` nennt sie. Die Brücke antwortet der Strom-App auch, während sie sich
42
+ erneuert und während sie die Datei des Stammbaums erstellt.
30
43
 
31
44
  ## 1.24.0
32
45
 
package/CHANGELOG.md CHANGED
@@ -7,7 +7,7 @@ The changes of each version in short. The full notes and the install lines are o
7
7
 
8
8
  ## 1.25.0
9
9
 
10
- *In preparation: the betas up to 1.25.0-beta.2. The section is complete with the release.*
10
+ *In preparation: the betas up to 1.25.0-beta.3. The section is complete with the release.*
11
11
 
12
12
  - **Data for the Strom widget on Windows too.** A research now writes what the Strom widget shows of it (what it works
13
13
  on, the finds of the last 24 hours, what waits) also on Windows, into `%USERPROFILE%\.config\strom\widget`, with a
@@ -25,6 +25,19 @@ The changes of each version in short. The full notes and the install lines are o
25
25
  what would come back and what would be put aside, then only on the person's yes in the terminal. Nothing is deleted:
26
26
  records added since are put aside, and the return itself can be taken back the same way. The link
27
27
  `strom-research://back` opens it for one change; the bridge's log says a return apart.
28
+ - **Identifying places.** The research identifies the places of its records (`strom place identify`, `propose`,
29
+ `unlocated`): a place sure from its records gets its coordinates, names and parish over time; where it is not sure,
30
+ it asks the person with up to three candidates, or says what would decide it. The questions wait in "What waits",
31
+ the bridge offers them to the Strom app, and `strom place undo` takes back the last answer.
32
+ - **Kinds of history.** `history.kinds` sets which kinds of events the history of the places looks for (wars,
33
+ epidemics, …). `strom history align` says first what it would hide, show again and look for, and does it only on
34
+ the person's yes; nothing found is deleted.
35
+ - **Side branches last.** In a research of several lines, work that helps no line waits until the lines have nothing
36
+ to do (`queue.offLine`: last, by priority, or never).
37
+ - **Updates without stopping the work.** `strom update` installs each version into a folder of its own, so a run or a
38
+ conversation under way goes on with its version; older versions go at the next update or with `strom tidy`, and
39
+ `strom doctor` tells of them. The bridge keeps answering the Strom app while it renews itself and while it makes the
40
+ tree's file.
28
41
 
29
42
  ## 1.24.0
30
43
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "about": "Known terms of archives, shipped with strom: a host (with its subdomains) and the level its published terms give automated access — allowed < restricted (unknown: the terms not found, as restricted) < manual < forbidden. A level here is a confirmed one: a connector's allowed needs no person's word, a connector taken over no confirmation; the strictest of all that is known still holds (a connector, the tree's archive, robots.txt, a refusal stricter than this keeps it stricter). browserOnly: only a person's browser goes there. pace: the site's Crawl-delay, a floor (only ever slower). disallow: paths no automated request takes. scope: what the level covers. quoteFrom robots: the quote is the site's robots.txt (its address in terms), not its terms of use. Only public terms, quoted word for word from the address given, on the day checked; a release adds an archive.",
2
+ "about": "Known terms of archives, shipped with strom: a host (with its subdomains) and the level its published terms give automated access — allowed < restricted (unknown: the terms not found, as restricted) < manual < forbidden. A level here is a confirmed one: a connector's allowed needs no person's word, a connector taken over no confirmation; the strictest of all that is known still holds (a connector, the tree's archive, robots.txt, a refusal stricter than this keeps it stricter). browserOnly: only a person's browser goes there. pace: the site's Crawl-delay, a floor (only ever slower). disallow: paths no automated request takes. scope: what the level covers. quoteFrom robots: the quote is the site's robots.txt (its address in terms), not its terms of use. automatedUse: the terms quoted expressly allow automated use (open data, any use, an interface for programs) — a Disallow of the site's robots.txt alone then yields, carefully (one request after another, at least its Crawl-delay, strom's User-Agent, its limits as ever); never a robots.txt that names AI agents, never the paths of disallow here. Only public terms, quoted word for word from the address given, on the day checked; a release adds an archive.",
3
3
  "archives": [
4
4
  {
5
5
  "host": "mza.cz",
@@ -293,6 +293,7 @@
293
293
  "terms": "https://cuzk.gov.cz/Predpisy/Podminky-poskytovani-prostor-dat-a-sitovych-sluzeb/Podminky-poskytovani-sitovych-sluzeb-CUZK.aspx",
294
294
  "quote": "Služby jsou poskytovány jako otevřené a lze je užívat bez omezení komerčně i nekomerčně, pokud rozsah užití není na újmu poskytovatele",
295
295
  "license": "https://creativecommons.org/licenses/by/4.0/legalcode.cs",
296
+ "automatedUse": true,
296
297
  "robots": "none (404)",
297
298
  "disallow": ["/archiv/", "/arcgis4/rest/services/Archiv/"],
298
299
  "scope": "the RÚIAN map service only (/arcgis/rest/services/RUIAN/MapServer: a house's address point, building, cadastral area, municipality — one query at a time, credited \"ČÚZK – on-line\"); never the Archiv application or its map images of the archive (old cadastral maps are no open data: \"s výjimkou leteckých měřických snímků a archiválií\", copies sold) — a person looks at them in the browser",
@@ -306,8 +307,8 @@
306
307
  "quote": "Služby jsou poskytovány jako otevřené a lze je užívat bez omezení komerčně i nekomerčně, pokud rozsah užití není na újmu poskytovatele",
307
308
  "license": "https://creativecommons.org/licenses/by/4.0/legalcode.cs",
308
309
  "robots": "User-agent: * · Disallow: /*.asp · Disallow: /cgi-bin/ · Disallow: /css/ · Disallow: /cuzk/ · Disallow: /html/ · Disallow: /images/ · Disallow: /ini/ · Disallow: /scripts/ · Disallow: /test/",
309
- "disallow": ["/*.asp", "/cgi-bin/", "/css/", "/cuzk/", "/html/", "/images/", "/ini/", "/scripts/", "/test/"],
310
- "scope": "open by its terms, but its robots.txt disallows /*.asp — every WMS/WFS address (e.g. /wfs/inspire-ad-wfs.asp): no automated request; the RÚIAN map service on ags.cuzk.gov.cz serves the same",
310
+ "automatedUse": true,
311
+ "scope": "open by its terms, which expressly allow automated use: its robots.txt (Disallow: /*.asp — every WMS/WFS address, e.g. /wfs/inspire-ad-wfs.asp) yields, carefully — one query at a time for the house or place the research needs, at least its Crawl-delay, never a whole municipality or layer downloaded; the RÚIAN map service on ags.cuzk.gov.cz serves the same",
311
312
  "checked": "2026-11-01"
312
313
  },
313
314
  {
@@ -485,6 +485,24 @@
485
485
  "ui.wait.kind.tune": "čtení snímků",
486
486
  "ui.wait.kind.other": "jiné",
487
487
  "ui.wait.kind.conflict": "rozpor",
488
+ "ui.wait.kind.place": "místo",
489
+ "ui.waiting.place.propose": "Které místo je {place}?",
490
+ "ui.waiting.place.conflict": "{place}: poloha na mapě proti záznamům",
491
+ "ui.waiting.place.form": "{place}: jak údaje zapisují místo",
492
+ "ui.waiting.place.on": "osob: {n}{years}",
493
+ "ui.wait.place.pick": "Které to je?",
494
+ "ui.wait.place.current": "Na mapě teď: {lat}, {lon} ({by})",
495
+ "ui.wait.place.by.research": "určil výzkum",
496
+ "ui.wait.place.by.person": "zadáno ručně",
497
+ "ui.wait.place.by.adopted": "převzato z jiného výzkumu",
498
+ "ui.wait.place.change": "Údajů: {facts} – „{from}“ → „{to}“",
499
+ "ui.wait.place.keep": "Ponechat polohu na mapě",
500
+ "ui.wait.place.unknown": "Nelze říct",
501
+ "ui.wait.place.none": "Žádné z nich",
502
+ "ui.wait.place.yes": "Zapsat údaje takto",
503
+ "ui.wait.place.no": "Nechat údaje, jak jsou",
504
+ "ui.wait.place.done": "Odpovězeno: {place}.",
505
+ "ui.wait.place.gone": "Tahle otázka už nečeká – mezitím je zodpovězená nebo změněná.",
488
506
  "ui.wait.conflict.app": "v aplikaci Strom: {value}",
489
507
  "ui.wait.conflict.research": "ve výzkumu: {value}",
490
508
  "ui.wait.conflict.archive": "v Archivu Stromu: {value}",
@@ -801,6 +819,10 @@
801
819
  "history.gaps.looked.none": "roky {years} v událostech regionu {region} už prohledal jiný výzkum: doložená událost v nich žádná",
802
820
  "history.gaps.looked.some": "roky {years} v událostech regionu {region} už prohledal jiný výzkum: zapsaných událostí v nich: {n}",
803
821
  "history.gaps.gone": "roky {years} už pro tento strom nejsou mezerou v událostech regionu {region}: údaje jeho osob v tom regionu se změnily",
822
+ "history.kinds.what": "Události dějin druhů {kinds} v regionu {region} pro roky prošlé bez nich: {years}",
823
+ "history.place.kinds.what": "Dějiny místa {place} a okolí, jen druhy {kinds}: místo se prošlo bez nich",
824
+ "history.kinds.why": "druhy {kinds} se v tomto výzkumu nově hledají a dějiny se tu prošly bez nich",
825
+ "history.kinds.done": "události těchto druhů nalezené, každá ze stránky, kterou strom sám přečetl – nebo nic, když žádná hodná zápisu doložená není",
804
826
  "history.extend.what": "Události dějin v regionu {region} pro roky osob stromu, které se ještě neprohledaly: {years}",
805
827
  "history.extend.why": "osoby stromu tam žily v letech, pro která se katalog nikdy neprohledával (předek nalezený dřív nebo později)",
806
828
  "history.extend.done": "zhruba jedna událost na 10–15 let z těchto roků, každá ze stránky, kterou strom sám přečetl – nebo nic, když žádná událost hodná zápisu doložená není",
@@ -913,6 +935,10 @@
913
935
  "ui.update.downloading": "Stahuji strom {version}…",
914
936
  "ui.error.update.failed": "aktualizace se nepovedla: {detail}. strom zůstává ve verzi {current}",
915
937
  "ui.error.update.failed.hint": "znovu {command} – nebo spustit instalátor znovu",
938
+ "ui.error.update.busy": "ve výzkumu běží práce: {work}",
939
+ "ui.error.update.busy.hint": "aktualizovat i tak: {command} (rozběhnutá práce dokončí na dosavadní verzi), nebo počkat na její konec (strom status)",
940
+ "ui.error.tree.migrate.busy": "ve výzkumu „{name}“ ještě pracuje starší verze stromu (běh nebo konverzace); data se převedou na tuto verzi, až ta práce skončí",
941
+ "ui.error.tree.migrate.busy.hint": "počkat na konec běhu nebo konverzace (strom status) a pak příkaz spustit znovu",
916
942
  "ui.update.done": "✓ strom je aktualizovaný: {previous} → {version}.",
917
943
  "ui.update.whatsnew": "Co je nového: {url}",
918
944
  "ui.update.restart": "strom je aktualizovaný — tahle nabídka ale ještě běží ve staré verzi. Po novém spuštění stromu (nebo zástupce „{shortcut}“) poběží nová verze.",
@@ -934,6 +960,8 @@
934
960
  "ui.app.images.uncitedOut": "{n, plural, one {# zápis, který ve výzkumu nikdo necituje, v souboru není} few {# zápisy, které ve výzkumu nikdo necituje, v souboru nejsou} other {# zápisů, které ve výzkumu nikdo necituje, v souboru není}} (všechny: nastavení excerpts.for all).",
935
961
  "ui.app.images.scope": "{n, plural, one {# zápis lidí vzdálenějších od výzkumu je} few {# zápisy lidí vzdálenějších od výzkumu jsou} other {# zápisů lidí vzdálenějších od výzkumu je}} bez obrázku (nastavení excerpts.for: {for}).",
936
962
  "ui.doc.installed": "strom {version} na vlastním Node {node} (oficiálním, z nodejs.org)",
963
+ "ui.doc.versions": "starší verze",
964
+ "ui.doc.versions.left": "ve složce programu zůstaly starší verze stromu: {names}",
937
965
  "ui.update.source": "Vyšla nová verze: {version}. Tento strom běží ze zdrojáků: git pull",
938
966
  "ui.update.node.available": "Node {from} → {to}: bezpečnostní opravy jeho řady – nainstaluje je strom update.",
939
967
  "ui.update.node.sure": "Aktualizovat Node stromu z {from} na {to} (bezpečnostní opravy)?",
@@ -946,10 +974,26 @@
946
974
  "ui.update.channel.stable.now": "Od teď strom bere vydané verze.",
947
975
  "ui.update.older": "{version} je starší verze než {current}; výzkumy zůstanou, jak jsou.",
948
976
  "ui.update.stays": "Výzkumy zůstanou, jak jsou.",
977
+ "ui.update.busy.tree": "Ve výzkumu „{name}“ právě běží práce: {work}.",
978
+ "ui.update.busy.session": "sezení {id}",
979
+ "ui.update.busy.session.task": "sezení {id} (úkol {task})",
980
+ "ui.update.busy.run": "běh úloh",
981
+ "ui.update.busy.runs": "běhy úloh ({n})",
982
+ "ui.update.busy.chat": "konverzace s agentem",
983
+ "ui.update.busy.chats": "konverzace s agenty ({n})",
984
+ "ui.update.busy.ready": "Nová verze {version} je stažená a ověřená.",
985
+ "ui.update.busy.now": "Aktualizovat hned – rozběhnutá práce (i celý běh úloh) dokončí na dosavadní verzi, co se spustí potom, poběží na nové",
986
+ "ui.update.busy.wait": "Počkat na konec sezení a pak aktualizovat",
987
+ "ui.update.busy.back": "Zpět – nic se nemění",
988
+ "ui.update.busy.waiting": "Čeká se na konec sezení ({sessions})… Ctrl-C: bez aktualizace.",
989
+ "ui.update.busy.waited": "Sezení skončilo, aktualizuje se.",
990
+ "ui.update.busy.went": "Rozběhnutá práce dokončí na verzi {previous}; co se spustí potom, poběží na {version}.",
949
991
  "ui.doc.beta": "beta verze",
950
992
  "ui.doc.backup": "záloha",
951
993
  "ui.backup.made": "Záloha před přechodem z {from} na {to}: {path} ({size}).",
952
994
  "ui.backup.media.left.line": "Sdílené obrázky ({size}) v ní nejsou: na disku není místo na jejich kopii. Každý zůstává ve shared/media a strom žádný nemaže.",
995
+ "ui.backup.skipped.line": "Rodokmen {tree} v ní není: zapisovalo se do něj déle, než záloha čeká ({by}). Zůstává na svém místě beze změny.",
996
+ "ui.backup.readme.skipped": "Chybí: {trees} – zapisovalo se do nich déle, než záloha čeká; každý zůstává na svém místě beze změny.",
953
997
  "ui.backup.what.title": "Co zálohovat",
954
998
  "ui.backup.what.home": "Celá složka {path} ({size}): všechny rodokmeny i s historií.",
955
999
  "ui.backup.what.shared": "V ní i shared ({size}): skeny, originály z aplikace Strom a z telefonu, konektory.",
@@ -1218,6 +1262,7 @@
1218
1262
  "ui.tidy.kind.pointers": "Zbytky skončených pracovních sezení",
1219
1263
  "ui.tidy.kind.metrics": "Měření čtení snímků a stahování (starší nebo nad stanovenou velikost)",
1220
1264
  "ui.tidy.kind.gate": "Záznam odpovědí podmínky samostatné práce agenta (starší nebo nad stanovenou velikost)",
1265
+ "ui.tidy.kind.program": "Starší verze stromu ve složce programu",
1221
1266
  "ui.tidy.row": " {what}: počet {n}, celkem {size} → {does}",
1222
1267
  "ui.tidy.does.remove": "smaže se",
1223
1268
  "ui.tidy.does.shrink": "zmenší se",
@@ -1838,6 +1883,8 @@
1838
1883
  "ui.plan.title": "Co agent udělá dál – {name}:",
1839
1884
  "ui.plan.now": "právě teď",
1840
1885
  "ui.plan.images": " (nejdřív potřebuje snímky)",
1886
+ "ui.plan.offline": " (mimo linie: až po práci na liniích)",
1887
+ "ui.plan.offline.never": "Mimo linie, nebere se: {n} (nastavení queue.offLine)",
1841
1888
  "ui.plan.later": "později",
1842
1889
  "ui.plan.asleep": " (odloženo do {at}: {host} teď neodpovídá)",
1843
1890
  "ui.plan.more": "… a další úkoly: {n}",
@@ -2260,6 +2307,7 @@
2260
2307
  "wait.group.app": "Aplikace Strom",
2261
2308
  "wait.group.tune": "Čtení snímků",
2262
2309
  "wait.group.conflicts": "K rozhodnutí – rozpory",
2310
+ "wait.group.places": "Místa ke ztotožnění",
2263
2311
  "log.session.start": "Agent začal: {name}",
2264
2312
  "log.session.close": "Agent skončil: {name}",
2265
2313
  "log.lesson.add": "Poznatek: {name}",
@@ -2363,6 +2411,12 @@
2363
2411
  "ui.research.resume": "Taková linie výzkumu už je, {state}: „{name}“. Spustit ji znovu?",
2364
2412
  "ui.alone.gate.bad": "Čekám počet bodů od 0 do 100 (třeba 10).",
2365
2413
  "ui.alone.addons": "Bez osobních doplňků agenta (skilly, pluginy, MCP servery): {state}",
2414
+ "ui.alone.offline": "Práce mimo linie: {state}",
2415
+ "ui.alone.offline.about": "Mimo linie: práce na vedlejší větvi, kam žádná linie výzkumu nesahá (sestra předka a její rodina), která žádné linii nepomáhá. Práce, která linii pomáhá – hypotéza linie, napojení lidí na strom, sourozenec předka jako kmotr nebo svědek –, jde s linií.",
2416
+ "ui.alone.offline.pick": "Práce mimo linie:",
2417
+ "ui.alone.offline.last": "na konci, až po liniích",
2418
+ "ui.alone.offline.normal": "normálně, jako práce linií",
2419
+ "ui.alone.offline.never": "nikdy",
2366
2420
  "ui.alone.addons.about": "Agent při samostatné práci načte jen nástroje výzkumu. Spojení s aplikací Strom a prohlížeč fungují dál. Chat s agentem doplňky načítá vždy.",
2367
2421
  "ui.alone.addons.on": "Zapnout?",
2368
2422
  "ui.alone.addons.off": "Vypnout? (agent při samostatné práci pak načte i osobní doplňky)",
@@ -2634,6 +2688,12 @@
2634
2688
  "ui.error.tree.newer.beta.hint": "Vrátit se k betě: strom update --channel beta – nebo počkat na vydání {release}",
2635
2689
  "ui.error.tree.newer.beta.backup": "Tento rodokmen zapsal strom {by}, novější než tento strom {version}. Tento strom ho nechává beze změny.",
2636
2690
  "ui.error.tree.newer.beta.backup.hint": "Vrátit se k betě: strom update --channel beta – nebo počkat na vydání {release}\nZáloha z doby před přechodem: {backup}",
2691
+ "ui.error.tree.updated": "strom byl mezitím aktualizovaný na {version} a výzkum je už v jeho formátu. Tento strom {was} ho nechává beze změny; další spuštění poběží na nové verzi.",
2692
+ "ui.error.tree.updated.hint": "Spustit strom znovu.",
2693
+ "ui.error.tree.updated.run": "strom byl během běhu aktualizovaný na {version} a výzkum je už v jeho formátu. Běh skončil; další spuštění poběží na nové verzi.",
2694
+ "ui.error.tree.updated.run.hint": "Spustit běh znovu: {again}",
2695
+ "ui.error.tree.updated.run.later": "strom byl během běhu aktualizovaný na {version} a výzkum je už v jeho formátu. Běh skončil; další spuštění poběží na nové verzi a udělá i export.",
2696
+ "ui.error.tree.updated.run.later.hint": "Spustit běh znovu: {again}",
2637
2697
  "log.input.app": "Úpravy poslané z aplikace Strom",
2638
2698
  "log.input.app.undo": "Úpravy z aplikace Strom vráceny",
2639
2699
  "ui.init.created": "Rodokmen „{name}“ založen v {path}",
@@ -2764,6 +2824,7 @@
2764
2824
  "ui.error.story.no-source.hint": "pozadí místa a doby se nejdřív zapíše jako pramen: strom source add … --kind book|newspaper|web",
2765
2825
  "ui.consent.read.app": "Povolit aplikaci Strom až {hour} čtení dokumentů za hodinu a {day} za den? Každé čtení spustí agenta výzkumu a počítá se do ceny měsíce.",
2766
2826
  "ui.consent.archive.pace": "Tempo stahování snímků z archivů, jejichž podmínky automatizaci omezují, po svolení „pomalu“: nejméně {seconds} s mezi dvěma snímky, nejvýš {n, plural, one {# požadavek} few {# požadavky} other {# požadavků}} na archiv za hodinu včetně katalogu. Nastavit?",
2827
+ "ui.consent.claude.dir": "Složka Claude Code pro výzkum (její přihlášení, tedy které předplatné práci platí): {dir}",
2767
2828
  "ui.archive.terms.known": "Podmínky: „{quote}“ ({terms})",
2768
2829
  "ui.archive.terms.connector": "Podmínky podle stahovače: {quote} ({terms})",
2769
2830
  "ui.archive.terms.none": "Podmínky archivu zatím nejsou známé (stahovač ještě nikdo nepotvrdil).",
@@ -2858,6 +2919,7 @@
2858
2919
  "ui.link.archive.none": "O tomto archivu tu není co rozhodnout. Nic se nestalo.",
2859
2920
  "ui.experiments.link": "Hledání událostí dějin se zapíná jen v terminálu, který otevře odkaz.",
2860
2921
  "ui.history.place.link": "Dějiny místa se hledají jen na slovo dané v terminálu, který otevře odkaz.",
2922
+ "ui.places.link": "Ztotožnění míst se spouští jen na slovo dané v terminálu, který otevře odkaz.",
2861
2923
  "ui.link.what.experiment.history": "hledat události dějin v místech tohoto stromu – války, epidemie, sčítání, změny státu",
2862
2924
  "ui.link.experiment.note": "Hledá se průběžně mezi sezeními rodinného výzkumu (jak často, se vybere hned potom), sezení trvá nejvýš {minutes} minut.",
2863
2925
  "ui.link.experiment.note.gate": "Hledá se průběžně mezi sezeními rodinného výzkumu (jak často, se vybere hned potom); zda sezení začne, rozhoduje brána běhů, sezení trvá nejvýš {minutes} minut.",
@@ -2887,6 +2949,44 @@
2887
2949
  "ui.consent.placeHistory": "Hledat na vyžádání dějiny místa a jeho okolí ve všech výzkumech na tomto počítači – požáry, povodně, bitvy poblíž, panství, farnost, škola? Každé vyžádané místo je jedno sezení agenta; stojí to jeho čas i čerpání předplatného.",
2888
2950
  "ui.consent.placeHistory.tree": "Hledat na vyžádání dějiny místa tohoto výzkumu a jeho okolí – požáry, povodně, bitvy poblíž, panství, farnost, škola? Každé vyžádané místo je jedno sezení agenta; stojí to jeho čas i čerpání předplatného.",
2889
2951
  "ui.consent.history.places": "Hledat samo dějiny každého místa se souřadnicemi a jeho okolí – požáry, povodně, bitvy poblíž, panství, farnost, škola? Jedno sezení agenta na místo, v tempu dějin; stojí to čas agenta i čerpání předplatného.",
2952
+ "ui.consent.history.kinds": "Hledat v dějinách i události druhů {kinds}, ve všech výzkumech na tomto počítači? Každý hledaný druh stojí čas agenta i čerpání předplatného; srovnání dějin s nastavením ho pak dohledá tam, kde se dějiny prošly bez něj.",
2953
+ "ui.consent.history.kinds.tree": "Hledat v dějinách i události druhů {kinds}, v tomto výzkumu? Každý hledaný druh stojí čas agenta i čerpání předplatného; srovnání dějin s nastavením ho pak dohledá tam, kde se dějiny prošly bez něj.",
2954
+ "ui.history.kinds.all": "všechny",
2955
+ "ui.history.kinds.none": "žádné",
2956
+ "ui.history.menu.title": "Dějiny",
2957
+ "ui.history.menu.pace": "Jak často: {state}",
2958
+ "ui.history.menu.kinds": "Druhy dějin: {kinds}",
2959
+ "ui.history.menu.align": "Srovnat dějiny s nastavením",
2960
+ "ui.history.kinds.title": "Hledané druhy událostí (číslo druh zapne nebo vypne)",
2961
+ "ui.history.kinds.item": "{kind}: {state}",
2962
+ "ui.history.kinds.about": "Které druhy událostí dějiny hledají. Zapnutý druh stojí sezení agenta; co se už našlo, zůstává, dokud se dějiny nesrovnají s nastavením.",
2963
+ "ui.history.kinds.about.tree": "Které druhy událostí hledají dějiny tohoto výzkumu (jeho vlastní volba, před nastavením počítače). Zapnutý druh stojí sezení agenta; co se už našlo, zůstává, dokud se dějiny nesrovnají s nastavením.",
2964
+ "ui.history.align.kinds": "Hledané druhy: {kinds}",
2965
+ "ui.history.align.hide.general": "Ke skrytí – události regionů: {n} ({list})",
2966
+ "ui.history.align.hide.local": "Ke skrytí – události míst a pramenů: {n} ({list})",
2967
+ "ui.history.align.show": "K znovuzobrazení (skryté dřívějším srovnáním): {n} ({list})",
2968
+ "ui.history.align.backfill": "K dohledání tam, kde se dějiny prošly bez těchto druhů: úkolů {n} – asi {sessions} sezení agenta, v tempu dějin ({pace})",
2969
+ "ui.history.align.busy": "Právě se procházejí, srovnají se potom: {list}",
2970
+ "ui.history.align.prune": "Ve sdílených katalozích výzkumů na tomto počítači, druhů, které žádný z nich nehledá: {n} ({list}) – smažou se jen s --prune-shared",
2971
+ "ui.history.align.prune.on": "Ke smazání ze sdílených katalogů výzkumů na tomto počítači, druhů, které žádný z nich nehledá: {n} ({list}) – každou vrátí strom history restore",
2972
+ "ui.history.align.nothing": "Dějiny odpovídají hledaným druhům: nic ke skrytí, znovuzobrazení ani dohledání.",
2973
+ "ui.history.align.ask": "Srovnat dějiny takto? Skryté se znovu zobrazí, jakmile se jejich druh bude zase hledat.",
2974
+ "ui.history.align.apply": "Zatím se nic nezměnilo: srovnání provede člověk v terminálu (strom history align --yes).",
2975
+ "ui.history.align.done": "Dějiny srovnány: skryto {hidden}, znovu zobrazeno {shown}, úkolů k dohledání {tasks}, smazáno ze sdílených katalogů {pruned}.",
2976
+ "ui.history.align.no": "Nic se nezměnilo.",
2977
+ "ui.history.align.undone": "Srovnání vráceno: znovu zobrazeno {shown}, znovu skryto {hidden}. Jeho úkoly zůstávají ve frontě.",
2978
+ "ui.history.kinds.link": "Přidaný druh dějin se začne hledat jen na slovo dané v terminálu, který otevře odkaz.",
2979
+ "ui.history.align.link": "Zapnuté druhy se dohledají jen na slovo dané v terminálu, který otevře odkaz.",
2980
+ "ui.link.what.history.kinds": "hledat v tomto výzkumu tyto druhy dějin: {kinds}",
2981
+ "ui.link.what.history.kinds.default": "hledat ve výzkumech na tomto počítači tyto druhy dějin: {kinds}",
2982
+ "ui.link.what.history.align": "srovnat dějiny s hledanými druhy",
2983
+ "ui.link.history.kinds.added": "Přibude: {kinds} – každé sezení dějin je bude hledat taky.",
2984
+ "ui.link.history.kinds.removed": "Ubude: {kinds} – už se nebudou hledat; co se našlo, zůstane do srovnání dějin.",
2985
+ "ui.link.history.kinds.estimate": "Dohledat je tam, kde se dějiny už prošly: úkolů {n}, asi {sessions} sezení agenta (až po srovnání).",
2986
+ "ui.link.history.kinds.all": "Pro každý výzkum na tomto počítači bez vlastního nastavení druhů.",
2987
+ "ui.link.history.kinds.same": "Tyto druhy se už hledají: není co měnit.",
2988
+ "ui.link.history.kinds.done": "Druhy dějin jsou nastavené; co se našlo, zůstává, jak je.",
2989
+ "ui.link.history.kinds.align": "Srovnat dějiny s nimi hned (nejdřív náhled)?",
2890
2990
  "ui.plan.history": "Dějiny: {what} – {when}.",
2891
2991
  "ui.plan.history.now": "v příštím sezení",
2892
2992
  "ui.plan.history.places": "příští sezení – nejdřív zmapovat místa",
@@ -2917,6 +3017,18 @@
2917
3017
  "ui.link.history.place.now": "Spustit sezení hned?",
2918
3018
  "ui.link.history.place.none": "Místo {place} v tomto výzkumu není. Nic se neudělalo.",
2919
3019
  "ui.link.history.off": "Dějiny míst jsou pro tento výzkum vypnuté, dějiny místa se proto nehledají. Nic se neudělalo.",
3020
+ "ui.link.what.places": "ztotožnit místa ve frontě – která obec toho jména to je a kde leží",
3021
+ "ui.link.what.places.one": "ztotožnit místo {place} – která obec toho jména to je a kde leží",
3022
+ "ui.link.places.queue": "Ve frontě: {n, plural, one {# místo} few {# místa} other {# míst}}, {batches, plural, one {# sezení} few {# sezení} other {# sezení}} (po oblastech, nejvýš {max} míst v jednom).",
3023
+ "ui.link.places.whole": "Celá fronta: zhruba {from}–{to} minut, sezení po sezení.",
3024
+ "ui.link.places.whole.usd": "Celá fronta podle dosavadních sezení: {from}–{to}.",
3025
+ "ui.link.places.later": "Další sezení přijdou s dalšími běhy výzkumu; jedno sezení trvá nejvýš {minutes} minut.",
3026
+ "ui.link.places.later.gate": "Další sezení přijdou s dalšími běhy výzkumu; zda běh začne, rozhoduje brána běhů; jedno sezení trvá nejvýš {minutes} minut.",
3027
+ "ui.link.places.private": "K vyhledávání jdou jen názvy míst, far a okresů – nikdy jména osob ani data jejich života.",
3028
+ "ui.link.places.empty": "Ve frontě nečeká žádné místo. Nic se neudělalo.",
3029
+ "ui.link.places.placed": "Místo {place} už je na mapě; prověření polohy se zadává v aplikaci Strom. Nic se neudělalo.",
3030
+ "ui.link.places.done": "Ztotožnění míst je ve frontě první.",
3031
+ "ui.link.places.now": "Spustit jedno sezení hned?",
2920
3032
  "ui.link.what.experiment.places": "hledat samo dějiny každého místa se souřadnicemi a jeho okolí, jedno místo po druhém",
2921
3033
  "ui.link.experiment.places.count": "Míst se souřadnicemi: {n}, z nich už prohledaných: {done}.",
2922
3034
  "ui.link.experiment.places.on.done": "Dějiny jednotlivých míst se hledají samy, v tempu dějin.",
@@ -485,6 +485,24 @@
485
485
  "ui.wait.kind.tune": "Lesen der Scans",
486
486
  "ui.wait.kind.other": "Sonstiges",
487
487
  "ui.wait.kind.conflict": "Widerspruch",
488
+ "ui.wait.kind.place": "Ort",
489
+ "ui.waiting.place.propose": "Welcher Ort ist {place}?",
490
+ "ui.waiting.place.conflict": "{place}: die Lage auf der Karte gegen die Einträge",
491
+ "ui.waiting.place.form": "{place}: wie die Angaben den Ort schreiben",
492
+ "ui.waiting.place.on": "Personen: {n}{years}",
493
+ "ui.wait.place.pick": "Welcher ist es?",
494
+ "ui.wait.place.current": "Jetzt auf der Karte: {lat}, {lon} ({by})",
495
+ "ui.wait.place.by.research": "von der Forschung bestimmt",
496
+ "ui.wait.place.by.person": "von Hand eingetragen",
497
+ "ui.wait.place.by.adopted": "aus einer anderen Forschung übernommen",
498
+ "ui.wait.place.change": "Angaben: {facts} – „{from}“ → „{to}“",
499
+ "ui.wait.place.keep": "Die Lage auf der Karte behalten",
500
+ "ui.wait.place.unknown": "Nicht zu sagen",
501
+ "ui.wait.place.none": "Keiner davon",
502
+ "ui.wait.place.yes": "Die Angaben so schreiben",
503
+ "ui.wait.place.no": "Die Angaben lassen, wie sie sind",
504
+ "ui.wait.place.done": "Beantwortet: {place}.",
505
+ "ui.wait.place.gone": "Diese Frage wartet nicht mehr – inzwischen beantwortet oder geändert.",
488
506
  "ui.wait.conflict.app": "in der Strom-App: {value}",
489
507
  "ui.wait.conflict.research": "in der Forschung: {value}",
490
508
  "ui.wait.conflict.archive": "im Strom-Archiv: {value}",
@@ -801,6 +819,10 @@
801
819
  "history.gaps.looked.none": "die Jahre {years} in den Ereignissen von {region} hat schon eine andere Forschung durchsucht: kein Ereignis darin belegt",
802
820
  "history.gaps.looked.some": "die Jahre {years} in den Ereignissen von {region} hat schon eine andere Forschung durchsucht: darin geschriebene Ereignisse: {n}",
803
821
  "history.gaps.gone": "die Jahre {years} sind für diesen Stammbaum keine Lücke in den Ereignissen von {region} mehr: die Angaben seiner Personen dort haben sich geändert",
822
+ "history.kinds.what": "Ereignisse der Geschichte der Arten {kinds} in {region} für die ohne sie durchgesehenen Jahre: {years}",
823
+ "history.place.kinds.what": "Geschichte von {place} und Umgebung, nur die Arten {kinds}: der Ort wurde ohne sie durchgesehen",
824
+ "history.kinds.why": "die Arten {kinds} werden in dieser Forschung jetzt gesucht, und die Geschichte hier wurde ohne sie durchgesehen",
825
+ "history.kinds.done": "die Ereignisse dieser Arten gefunden, jedes von einer Seite, die strom selbst gelesen hat – oder nichts, wenn keines dokumentiert ist, das sich aufzuschreiben lohnt",
804
826
  "history.extend.what": "Ereignisse der Geschichte in {region} für die noch nicht durchsuchten Jahre der Personen des Stammbaums dort: {years}",
805
827
  "history.extend.why": "Personen des Stammbaums lebten dort in Jahren, für die der Katalog nie durchsucht wurde (ein früher oder später gefundener Vorfahre)",
806
828
  "history.extend.done": "etwa ein Ereignis alle 10–15 Jahre dieser Jahre, jedes von einer Seite, die strom selbst gelesen hat – oder keines, wenn kein Ereignis, das einen Eintrag wert ist, belegt ist",
@@ -913,6 +935,10 @@
913
935
  "ui.update.downloading": "strom {version} wird heruntergeladen…",
914
936
  "ui.error.update.failed": "die Aktualisierung hat nicht geklappt: {detail}. strom bleibt bei {current}",
915
937
  "ui.error.update.failed.hint": "erneut {command} – oder das Installationsprogramm erneut ausführen",
938
+ "ui.error.update.busy": "in einer Forschung läuft Arbeit: {work}",
939
+ "ui.error.update.busy.hint": "trotzdem aktualisieren: {command} (begonnene Arbeit endet mit der bisherigen Version), oder ihr Ende abwarten (strom status)",
940
+ "ui.error.tree.migrate.busy": "in der Forschung „{name}“ arbeitet noch eine ältere Version von strom (ein Lauf oder ein Gespräch); die Daten werden auf diese Version umgestellt, sobald diese Arbeit endet",
941
+ "ui.error.tree.migrate.busy.hint": "das Ende des Laufs oder Gesprächs abwarten (strom status), dann den Befehl erneut ausführen",
916
942
  "ui.update.done": "✓ strom ist aktualisiert: {previous} → {version}.",
917
943
  "ui.update.whatsnew": "Was ist neu: {url}",
918
944
  "ui.update.restart": "strom ist aktualisiert — dieses Menü läuft aber noch in der alten Version. Nach einem Neustart von strom (oder der Verknüpfung „{shortcut}“) läuft die neue Version.",
@@ -934,6 +960,8 @@
934
960
  "ui.app.images.uncitedOut": "{n, plural, one {# Eintrag, den in der Forschung niemand zitiert, ist} other {# Einträge, die in der Forschung niemand zitiert, sind}} nicht in der Datei (alle: Einstellung excerpts.for all).",
935
961
  "ui.app.images.scope": "{n, plural, one {# Eintrag von Personen, die der Forschung ferner stehen, hat} other {# Einträge von Personen, die der Forschung ferner stehen, haben}} kein Bild (Einstellung excerpts.for: {for}).",
936
962
  "ui.doc.installed": "strom {version} auf eigenem Node {node} (offiziell, von nodejs.org)",
963
+ "ui.doc.versions": "ältere Versionen",
964
+ "ui.doc.versions.left": "im Programmordner sind ältere Versionen von strom geblieben: {names}",
937
965
  "ui.update.source": "Eine neue Version ist da: {version}. Dieses strom läuft aus den Quellen: git pull",
938
966
  "ui.update.node.available": "Node {from} → {to}: Sicherheitskorrekturen seiner Reihe – strom update installiert sie.",
939
967
  "ui.update.node.sure": "strom's Node von {from} auf {to} aktualisieren (Sicherheitskorrekturen)?",
@@ -946,10 +974,26 @@
946
974
  "ui.update.channel.stable.now": "Ab jetzt nimmt strom die veröffentlichten Versionen.",
947
975
  "ui.update.older": "{version} ist eine ältere Version als {current}; die Forschungen bleiben, wie sie sind.",
948
976
  "ui.update.stays": "Die Forschungen bleiben, wie sie sind.",
977
+ "ui.update.busy.tree": "In der Forschung „{name}“ läuft gerade Arbeit: {work}.",
978
+ "ui.update.busy.session": "Sitzung {id}",
979
+ "ui.update.busy.session.task": "Sitzung {id} (Aufgabe {task})",
980
+ "ui.update.busy.run": "Aufgabenlauf",
981
+ "ui.update.busy.runs": "Aufgabenläufe ({n})",
982
+ "ui.update.busy.chat": "Gespräch mit einem Agenten",
983
+ "ui.update.busy.chats": "Gespräche mit Agenten ({n})",
984
+ "ui.update.busy.ready": "Die neue Version {version} ist heruntergeladen und geprüft.",
985
+ "ui.update.busy.now": "Jetzt aktualisieren – begonnene Arbeit (auch ein ganzer Aufgabenlauf) endet mit der bisherigen Version, was danach startet, läuft mit der neuen",
986
+ "ui.update.busy.wait": "Bis zum Ende der Sitzung warten, dann aktualisieren",
987
+ "ui.update.busy.back": "Zurück – nichts ändert sich",
988
+ "ui.update.busy.waiting": "Warten auf das Ende der Sitzung ({sessions})… Strg-C: keine Aktualisierung.",
989
+ "ui.update.busy.waited": "Die Sitzung ist beendet; es wird aktualisiert.",
990
+ "ui.update.busy.went": "Begonnene Arbeit endet mit {previous}; was danach startet, läuft mit {version}.",
949
991
  "ui.doc.beta": "Beta-Versionen",
950
992
  "ui.doc.backup": "Sicherung",
951
993
  "ui.backup.made": "Sicherung vor dem Wechsel von {from} auf {to}: {path} ({size}).",
952
994
  "ui.backup.media.left.line": "Die gemeinsamen Bilder ({size}) sind nicht darin: auf der Platte ist kein Platz für eine Kopie. Jedes bleibt in shared/media, und strom löscht keines.",
995
+ "ui.backup.skipped.line": "Der Stammbaum {tree} ist nicht darin: In ihn wurde länger geschrieben, als die Sicherung wartet ({by}). Er bleibt unverändert an seinem Ort.",
996
+ "ui.backup.readme.skipped": "Nicht darin: {trees} – in sie wurde länger geschrieben, als die Sicherung wartet; jeder bleibt unverändert an seinem Ort.",
953
997
  "ui.backup.what.title": "Was sichern",
954
998
  "ui.backup.what.home": "Der ganze Ordner {path} ({size}): alle Stammbäume samt Verlauf.",
955
999
  "ui.backup.what.shared": "Darin auch shared ({size}): die Scans, die Originale aus der Strom-App und vom Telefon, die Konnektoren.",
@@ -1218,6 +1262,7 @@
1218
1262
  "ui.tidy.kind.pointers": "Reste beendeter Arbeitssitzungen",
1219
1263
  "ui.tidy.kind.metrics": "Messungen des Lesens der Scans und der Downloads (ältere oder über die festgelegte Größe hinaus)",
1220
1264
  "ui.tidy.kind.gate": "Aufzeichnung der Antworten der Bedingung für die selbstständige Arbeit des Agenten (ältere oder über die festgelegte Größe hinaus)",
1265
+ "ui.tidy.kind.program": "Ältere Versionen von strom im Programmordner",
1221
1266
  "ui.tidy.row": " {what}: Anzahl {n}, zusammen {size} → {does}",
1222
1267
  "ui.tidy.does.remove": "wird gelöscht",
1223
1268
  "ui.tidy.does.shrink": "wird verkleinert",
@@ -1838,6 +1883,8 @@
1838
1883
  "ui.plan.title": "Was der Agent als Nächstes tut – {name}:",
1839
1884
  "ui.plan.now": "gerade jetzt",
1840
1885
  "ui.plan.images": " (braucht zuerst die Scans)",
1886
+ "ui.plan.offline": " (außerhalb der Linien: nach der Arbeit an den Linien)",
1887
+ "ui.plan.offline.never": "Außerhalb der Linien, nicht bearbeitet: {n} (Einstellung queue.offLine)",
1841
1888
  "ui.plan.later": "später",
1842
1889
  "ui.plan.asleep": " (zurückgestellt bis {at}: {host} antwortet gerade nicht)",
1843
1890
  "ui.plan.more": "… und {n, plural, one {# weitere Aufgabe} other {# weitere Aufgaben}}",
@@ -2260,6 +2307,7 @@
2260
2307
  "wait.group.app": "Die Strom-App",
2261
2308
  "wait.group.tune": "Das Lesen der Scans",
2262
2309
  "wait.group.conflicts": "Widersprüche zu entscheiden",
2310
+ "wait.group.places": "Orte zu bestimmen",
2263
2311
  "log.session.start": "Der Agent beginnt: {name}",
2264
2312
  "log.session.close": "Der Agent ist fertig: {name}",
2265
2313
  "log.lesson.add": "Gelernt: {name}",
@@ -2363,6 +2411,12 @@
2363
2411
  "ui.research.resume": "Diese Forschung gibt es schon, {state}: „{name}“. Wieder aufnehmen?",
2364
2412
  "ui.alone.gate.bad": "Bitte eine Zahl von Punkten zwischen 0 und 100 (z. B. 10).",
2365
2413
  "ui.alone.addons": "Ohne die persönlichen Erweiterungen des Agenten (Skills, Plugins, MCP-Server): {state}",
2414
+ "ui.alone.offline": "Arbeit außerhalb der Linien: {state}",
2415
+ "ui.alone.offline.about": "Außerhalb der Linien: Arbeit an einem Nebenzweig, den keine Linie der Forschung erreicht (die Schwester eines Vorfahren und ihre Familie), die keiner Linie hilft. Arbeit, die einer Linie hilft – eine Hypothese der Linie, Personen an den Stammbaum angeschlossen, ein Geschwister eines Vorfahren als Pate oder Zeuge –, geht mit der Linie.",
2416
+ "ui.alone.offline.pick": "Arbeit außerhalb der Linien:",
2417
+ "ui.alone.offline.last": "am Ende, nach den Linien",
2418
+ "ui.alone.offline.normal": "wie die Arbeit der Linien",
2419
+ "ui.alone.offline.never": "nie",
2366
2420
  "ui.alone.addons.about": "Allein arbeitend lädt der Agent nur die Werkzeuge der Forschung. Die Verbindung zur Strom-App und der Browser funktionieren weiter. Im Chat mit dem Agenten werden die Erweiterungen immer geladen.",
2367
2421
  "ui.alone.addons.on": "Einschalten?",
2368
2422
  "ui.alone.addons.off": "Ausschalten? (der allein arbeitende Agent lädt dann auch die persönlichen Erweiterungen)",
@@ -2634,6 +2688,12 @@
2634
2688
  "ui.error.tree.newer.beta.hint": "Zurück zur Beta: strom update --channel beta – oder auf die Veröffentlichung von {release} warten",
2635
2689
  "ui.error.tree.newer.beta.backup": "Diesen Stammbaum hat strom {by} geschrieben, neuer als dieses strom {version}. Dieses strom lässt ihn unverändert.",
2636
2690
  "ui.error.tree.newer.beta.backup.hint": "Zurück zur Beta: strom update --channel beta – oder auf die Veröffentlichung von {release} warten\nDie Sicherung vor dem Wechsel: {backup}",
2691
+ "ui.error.tree.updated": "strom wurde inzwischen auf {version} aktualisiert und die Forschung liegt bereits in dessen Format vor. Dieses strom {was} lässt sie unverändert; der nächste Start läuft mit der neuen Version.",
2692
+ "ui.error.tree.updated.hint": "strom erneut starten.",
2693
+ "ui.error.tree.updated.run": "strom wurde während des Laufs auf {version} aktualisiert und die Forschung liegt bereits in dessen Format vor. Der Lauf ist beendet; der nächste Start läuft mit der neuen Version.",
2694
+ "ui.error.tree.updated.run.hint": "Den Lauf erneut starten: {again}",
2695
+ "ui.error.tree.updated.run.later": "strom wurde während des Laufs auf {version} aktualisiert und die Forschung liegt bereits in dessen Format vor. Der Lauf ist beendet; der nächste Start läuft mit der neuen Version und schreibt auch den Export.",
2696
+ "ui.error.tree.updated.run.later.hint": "Den Lauf erneut starten: {again}",
2637
2697
  "log.input.app": "Aus der Strom-App gesendete Änderungen",
2638
2698
  "log.input.app.undo": "Änderungen aus der Strom-App zurückgenommen",
2639
2699
  "ui.init.created": "Stammbaum „{name}“ angelegt in {path}",
@@ -2764,6 +2824,7 @@
2764
2824
  "ui.error.story.no-source.hint": "der Hintergrund von Ort und Zeit wird zuerst als Quelle erfasst: strom source add … --kind book|newspaper|web",
2765
2825
  "ui.consent.read.app": "Der Strom-App bis zu {hour, plural, one {# Lesung} other {# Lesungen}} von Dokumenten pro Stunde und {day} pro Tag erlauben? Jede Lesung startet den Agenten der Forschung und zählt zu den Kosten des Monats.",
2766
2826
  "ui.consent.archive.pace": "Tempo für Bilder aus Archiven, deren Bedingungen die Automatisierung einschränken, nach der Erlaubnis „langsam“: mindestens {seconds} s zwischen zwei Bildern, höchstens {n, plural, one {# Anfrage} other {# Anfragen}} an das Archiv pro Stunde, den Katalog mitgezählt. So einstellen?",
2827
+ "ui.consent.claude.dir": "Ordner von Claude Code für die Forschung (seine Anmeldung, also welches Abonnement die Arbeit bezahlt): {dir}",
2767
2828
  "ui.archive.terms.known": "Bedingungen: „{quote}“ ({terms})",
2768
2829
  "ui.archive.terms.connector": "Bedingungen laut Downloader: {quote} ({terms})",
2769
2830
  "ui.archive.terms.none": "Die Bedingungen des Archivs sind noch nicht bekannt (der Downloader ist noch nicht bestätigt).",
@@ -2858,6 +2919,7 @@
2858
2919
  "ui.link.archive.none": "Über dieses Archiv gibt es hier nichts zu entscheiden. Es ist nichts geschehen.",
2859
2920
  "ui.experiments.link": "Die Suche nach den Ereignissen der Geschichte wird nur im Terminal eingeschaltet, das der Link öffnet.",
2860
2921
  "ui.history.place.link": "Die Geschichte eines Ortes wird nur auf das Wort hin gesucht, das im Terminal gegeben wird, das der Link öffnet.",
2922
+ "ui.places.link": "Die Bestimmung der Orte startet nur auf das Wort hin, das im Terminal gegeben wird, das der Link öffnet.",
2861
2923
  "ui.link.what.experiment.history": "die Ereignisse der Geschichte an den Orten dieses Stammbaums suchen – Kriege, Epidemien, Volkszählungen, Änderungen des Staates",
2862
2924
  "ui.link.experiment.note": "Gesucht wird ab und zu zwischen den Sitzungen der Familienforschung (wie oft, wird gleich danach gewählt), eine Sitzung dauert höchstens {minutes} Minuten.",
2863
2925
  "ui.link.experiment.note.gate": "Gesucht wird ab und zu zwischen den Sitzungen der Familienforschung (wie oft, wird gleich danach gewählt); ob eine Sitzung beginnt, entscheidet das Tor der Läufe, eine Sitzung dauert höchstens {minutes} Minuten.",
@@ -2887,6 +2949,44 @@
2887
2949
  "ui.consent.placeHistory": "Die Geschichte eines Ortes und seiner Umgebung auf Anfrage suchen, in allen Forschungen auf diesem Computer – Brände, Hochwasser, Schlachten in der Nähe, Herrschaft, Pfarrei, Schule? Jeder angefragte Ort ist eine Sitzung des Agenten; das kostet seine Zeit und die Nutzung des Abos.",
2888
2950
  "ui.consent.placeHistory.tree": "Die Geschichte eines Ortes dieser Forschung und seiner Umgebung auf Anfrage suchen – Brände, Hochwasser, Schlachten in der Nähe, Herrschaft, Pfarrei, Schule? Jeder angefragte Ort ist eine Sitzung des Agenten; das kostet seine Zeit und die Nutzung des Abos.",
2889
2951
  "ui.consent.history.places": "Die Geschichte jedes Ortes mit Koordinaten und seiner Umgebung von selbst suchen – Brände, Hochwasser, Schlachten in der Nähe, Herrschaft, Pfarrei, Schule? Eine Sitzung des Agenten je Ort, im Tempo der Geschichte; das kostet Zeit des Agenten und Nutzung des Abos.",
2952
+ "ui.consent.history.kinds": "Auch die Ereignisse der Geschichte der Arten {kinds} suchen, in allen Forschungen auf diesem Computer? Jede gesuchte Art kostet Zeit des Agenten und Nutzung des Abos; das Abgleichen der Geschichte sucht sie dann dort nach, wo die Geschichte ohne sie durchgesehen wurde.",
2953
+ "ui.consent.history.kinds.tree": "Auch die Ereignisse der Geschichte der Arten {kinds} suchen, in dieser Forschung? Jede gesuchte Art kostet Zeit des Agenten und Nutzung des Abos; das Abgleichen der Geschichte sucht sie dann dort nach, wo die Geschichte ohne sie durchgesehen wurde.",
2954
+ "ui.history.kinds.all": "alle",
2955
+ "ui.history.kinds.none": "keine",
2956
+ "ui.history.menu.title": "Geschichte",
2957
+ "ui.history.menu.pace": "Wie oft: {state}",
2958
+ "ui.history.menu.kinds": "Gesuchte Arten von Ereignissen: {kinds}",
2959
+ "ui.history.menu.align": "Die Geschichte mit den Einstellungen abgleichen",
2960
+ "ui.history.kinds.title": "Gesuchte Arten von Ereignissen (die Nummer schaltet eine Art ein oder aus)",
2961
+ "ui.history.kinds.item": "{kind}: {state}",
2962
+ "ui.history.kinds.about": "Welche Arten von Ereignissen die Geschichte sucht. Eine eingeschaltete Art kostet Sitzungen des Agenten; was gefunden wurde, bleibt, bis die Geschichte mit den Einstellungen abgeglichen wird.",
2963
+ "ui.history.kinds.about.tree": "Welche Arten von Ereignissen die Geschichte dieser Forschung sucht (ihre eigene Wahl, vor der dieses Computers). Eine eingeschaltete Art kostet Sitzungen des Agenten; was gefunden wurde, bleibt, bis die Geschichte mit den Einstellungen abgeglichen wird.",
2964
+ "ui.history.align.kinds": "Gesuchte Arten: {kinds}",
2965
+ "ui.history.align.hide.general": "Auszublenden – Ereignisse der Regionen: {n} ({list})",
2966
+ "ui.history.align.hide.local": "Auszublenden – Ereignisse der Orte und der Quellen: {n} ({list})",
2967
+ "ui.history.align.show": "Wieder anzuzeigen (beim früheren Abgleichen ausgeblendet): {n} ({list})",
2968
+ "ui.history.align.backfill": "Nachzusuchen, wo die Geschichte ohne diese Arten durchgesehen wurde: {n} Aufgaben – etwa {sessions} Sitzungen des Agenten, im Tempo der Geschichte ({pace})",
2969
+ "ui.history.align.busy": "Wird gerade durchgesehen, danach abgeglichen: {list}",
2970
+ "ui.history.align.prune": "In den gemeinsamen Katalogen der Forschungen auf diesem Computer, Arten, die keine von ihnen sucht: {n} ({list}) – gelöscht nur mit --prune-shared",
2971
+ "ui.history.align.prune.on": "Aus den gemeinsamen Katalogen der Forschungen auf diesem Computer zu löschen, Arten, die keine von ihnen sucht: {n} ({list}) – strom history restore holt jedes zurück",
2972
+ "ui.history.align.nothing": "Die Geschichte entspricht den gesuchten Arten: nichts auszublenden, wieder anzuzeigen oder nachzusuchen.",
2973
+ "ui.history.align.ask": "Die Geschichte so abgleichen? Ausgeblendetes erscheint wieder, sobald seine Art wieder gesucht wird.",
2974
+ "ui.history.align.apply": "Noch nichts geändert: abgeglichen wird von einem Menschen im Terminal (strom history align --yes).",
2975
+ "ui.history.align.done": "Geschichte abgeglichen: ausgeblendet {hidden}, wieder angezeigt {shown}, Aufgaben zum Nachsuchen {tasks}, aus den gemeinsamen Katalogen gelöscht {pruned}.",
2976
+ "ui.history.align.no": "Nichts geändert.",
2977
+ "ui.history.align.undone": "Abgleich zurückgenommen: wieder angezeigt {shown}, wieder ausgeblendet {hidden}. Seine Aufgaben bleiben in der Warteschlange.",
2978
+ "ui.history.kinds.link": "Eine hinzugefügte Art der Geschichte wird nur auf das Wort hin gesucht, das im Terminal gegeben wird, das der Link öffnet.",
2979
+ "ui.history.align.link": "Die eingeschalteten Arten werden nur auf das Wort hin nachgesucht, das im Terminal gegeben wird, das der Link öffnet.",
2980
+ "ui.link.what.history.kinds": "in dieser Forschung diese Arten der Geschichte suchen: {kinds}",
2981
+ "ui.link.what.history.kinds.default": "in den Forschungen auf diesem Computer diese Arten der Geschichte suchen: {kinds}",
2982
+ "ui.link.what.history.align": "die Geschichte mit den gesuchten Arten abgleichen",
2983
+ "ui.link.history.kinds.added": "Hinzu kommt: {kinds} – jede Sitzung der Geschichte sucht sie mit.",
2984
+ "ui.link.history.kinds.removed": "Weg fällt: {kinds} – nicht mehr gesucht; was gefunden wurde, bleibt bis zum Abgleich der Geschichte.",
2985
+ "ui.link.history.kinds.estimate": "Nachsuche dort, wo die Geschichte schon durchgesehen wurde: {n} Aufgaben, etwa {sessions} Sitzungen des Agenten (erst nach dem Abgleich).",
2986
+ "ui.link.history.kinds.all": "Für jede Forschung auf diesem Computer ohne eigene Einstellung der Arten.",
2987
+ "ui.link.history.kinds.same": "Diese Arten werden schon gesucht: nichts zu ändern.",
2988
+ "ui.link.history.kinds.done": "Die Arten der Geschichte sind eingestellt; was gefunden wurde, bleibt, wie es ist.",
2989
+ "ui.link.history.kinds.align": "Die Geschichte jetzt mit ihnen abgleichen (zuerst eine Vorschau)?",
2890
2990
  "ui.plan.history": "Geschichte: {what} – {when}.",
2891
2991
  "ui.plan.history.now": "in der nächsten Sitzung",
2892
2992
  "ui.plan.history.places": "nächste Sitzung – zuerst die Orte zuordnen",
@@ -2917,6 +3017,18 @@
2917
3017
  "ui.link.history.place.now": "Die Sitzung gleich starten?",
2918
3018
  "ui.link.history.place.none": "Den Ort {place} gibt es in dieser Forschung nicht. Nichts wurde getan.",
2919
3019
  "ui.link.history.off": "Die Geschichte der Orte ist für diese Forschung aus, daher wird die Geschichte eines Ortes nicht gesucht. Nichts wurde getan.",
3020
+ "ui.link.what.places": "die Orte der Warteschlange bestimmen – welcher Ort des Namens es ist und wo er liegt",
3021
+ "ui.link.what.places.one": "{place} bestimmen – welcher Ort des Namens es ist und wo er liegt",
3022
+ "ui.link.places.queue": "In der Warteschlange: {n, plural, one {# Ort} other {# Orte}}, {batches, plural, one {# Sitzung} other {# Sitzungen}} (nach Gebieten, höchstens {max} Orte in einer).",
3023
+ "ui.link.places.whole": "Die ganze Warteschlange: etwa {from}–{to} Minuten, Sitzung für Sitzung.",
3024
+ "ui.link.places.whole.usd": "Die ganze Warteschlange nach den bisherigen Sitzungen: {from}–{to}.",
3025
+ "ui.link.places.later": "Weitere Sitzungen kommen mit den nächsten Läufen der Forschung; eine Sitzung dauert höchstens {minutes} Minuten.",
3026
+ "ui.link.places.later.gate": "Weitere Sitzungen kommen mit den nächsten Läufen der Forschung; ob ein Lauf beginnt, entscheidet das Tor der Läufe; eine Sitzung dauert höchstens {minutes} Minuten.",
3027
+ "ui.link.places.private": "Zur Suche gehen nur die Namen von Orten, Pfarreien und Bezirken – nie Namen von Personen oder ihre Lebensdaten.",
3028
+ "ui.link.places.empty": "In der Warteschlange wartet kein Ort. Nichts wurde getan.",
3029
+ "ui.link.places.placed": "{place} ist schon auf der Karte; eine Prüfung der Lage wird in der Strom-App angefordert. Nichts wurde getan.",
3030
+ "ui.link.places.done": "Die Bestimmung der Orte steht in der Warteschlange an erster Stelle.",
3031
+ "ui.link.places.now": "Eine Sitzung gleich starten?",
2920
3032
  "ui.link.what.experiment.places": "die Geschichte jedes Ortes mit Koordinaten und seiner Umgebung von selbst suchen, einen Ort nach dem anderen",
2921
3033
  "ui.link.experiment.places.count": "Orte mit Koordinaten: {n}, davon schon durchsucht: {done}.",
2922
3034
  "ui.link.experiment.places.on.done": "Die Geschichte der einzelnen Orte wird von selbst gesucht, im Tempo der Geschichte.",
@@ -116,6 +116,10 @@ conclusion so the next researcher can follow it.
116
116
  another way, or say what was refused.
117
117
  - **Stay within the task.** New questions become new tasks (`strom task add`,
118
118
  with where and done-when), not detours.
119
+ - **The lines first.** With several lines, a task about a side branch none of
120
+ them reaches waits until they have nothing to do. Add one only with `--helps
121
+ "<how it helps G…>"`: an ancestor's sibling as godparent or witness, the same
122
+ house, an ancestor's surname or origin. The sibling's own family helps none.
119
123
  <!-- for locate request -->
120
124
  - **What waits for the user is a sentence they read** (`strom task wait T…
121
125
  --on "…"`: strom's menu, the Strom app): impersonal, in the research
@@ -21,6 +21,7 @@ import { configDir, isolated, userHome } from "../core/paths.js";
21
21
  import { writeFileAtomic } from "../core/json.js";
22
22
  import { installation } from "../core/self.js";
23
23
  import { agentAppUrl, appSite } from "../core/stromapp.js";
24
+ import { claudeConfigDir } from "../core/claudedir.js";
24
25
  const BEGIN = "<!-- strom: begin (strom agents install; removed by strom agents uninstall) -->";
25
26
  const END = "<!-- strom: end -->";
26
27
  /** What the agents are taught; app: the Strom app's address it names — the one `strom app` opens when it is written (agentAppUrl). */
@@ -219,7 +220,7 @@ function opencodeDir(env) {
219
220
  /** Claude Code starts its own conversations with Remote Control (its setting remoteControlAtStartup, the user's own). */
220
221
  export function claudeRemoteAtStartup(env) {
221
222
  try {
222
- const file = path.join(env.CLAUDE_CONFIG_DIR ?? path.join(userHome(env), ".claude"), "settings.json");
223
+ const file = path.join(claudeConfigDir(env), "settings.json");
223
224
  return JSON.parse(fs.readFileSync(file, "utf8")).remoteControlAtStartup === true;
224
225
  }
225
226
  catch {
@@ -234,8 +235,8 @@ export function globalTargets(env) {
234
235
  // the app's address as strom app opens it now: a run of another channel (its first) writes the texts again
235
236
  const app = agentAppUrl(env);
236
237
  const targets = [
237
- { agent: "claude", file: path.join(env.CLAUDE_CONFIG_DIR ?? path.join(home, ".claude"), "skills", "strom", "SKILL.md"), kind: "own" },
238
- { agent: "claude", file: path.join(env.CLAUDE_CONFIG_DIR ?? path.join(home, ".claude"), "settings.json"), kind: "allow" },
238
+ { agent: "claude", file: path.join(claudeConfigDir(env, undefined, home), "skills", "strom", "SKILL.md"), kind: "own" },
239
+ { agent: "claude", file: path.join(claudeConfigDir(env, undefined, home), "settings.json"), kind: "allow" },
239
240
  { agent: "codex", file: path.join(env.CODEX_HOME ?? path.join(home, ".codex"), "AGENTS.md"), kind: "block" },
240
241
  // Antigravity CLI reads its global rules where Gemini CLI did, and its permissions from its settings.
241
242
  { agent: "antigravity", file: path.join(home, ".gemini", "GEMINI.md"), kind: "block" },