strom-research 1.15.0-beta.1 → 1.15.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/lang/cs.json +47 -9
- package/assets/lang/de.json +47 -9
- package/dist/agents/files.js +55 -3
- package/dist/cli/context.js +18 -0
- package/dist/cli/fixes.js +9 -3
- package/dist/cli/main.js +2 -2
- package/dist/cli/menu-links.js +14 -10
- package/dist/cli/menu-mode.js +79 -13
- package/dist/cli/menu-parts.js +4 -4
- package/dist/cli/menu-research.js +7 -2
- package/dist/cli/menu-settings.js +11 -9
- package/dist/cli/menu.js +22 -12
- package/dist/cli/ui.js +49 -11
- package/dist/cli/wizard.js +38 -13
- package/dist/commands/browse.js +7 -3
- package/dist/commands/calibrate.js +3 -2
- package/dist/commands/checks.js +2 -2
- package/dist/commands/grep.js +27 -5
- package/dist/commands/intake.js +14 -4
- package/dist/commands/links.js +30 -1
- package/dist/commands/media.js +2 -2
- package/dist/commands/meta.js +8 -4
- package/dist/commands/session.js +3 -3
- package/dist/commands/setup.js +18 -2
- package/dist/commands/start.js +2 -2
- package/dist/commands/sync.js +5 -5
- package/dist/commands/tasks.js +3 -3
- package/dist/commands/trees.js +9 -3
- package/dist/core/apps.js +6 -3
- package/dist/core/archiveasks.js +2 -2
- package/dist/core/batches.js +8 -4
- package/dist/core/config.js +1 -1
- package/dist/core/errors.js +6 -0
- package/dist/core/grep.js +4 -4
- package/dist/core/live.js +21 -13
- package/dist/core/mode.js +2 -9
- package/dist/core/state.js +56 -0
- package/dist/core/sync.js +4 -4
- package/dist/core/tree.js +1 -1
- package/dist/core/waiting.js +3 -3
- package/dist/core/workers.js +11 -0
- package/package.json +1 -1
package/assets/lang/cs.json
CHANGED
|
@@ -122,12 +122,12 @@
|
|
|
122
122
|
"ui.setup.git.wait": "Dokončit instalaci v okně, které se otevřelo, a pak Enter.",
|
|
123
123
|
"ui.setup.git.manual": "Nainstalovat ho příkazem: {command} – a pak znovu spustit {strom}.",
|
|
124
124
|
"ui.setup.agent.ok": "✓ AI agent: {name}",
|
|
125
|
-
"ui.setup.agent.none": "
|
|
125
|
+
"ui.setup.agent.none": "Na tomto počítači není AI agent – výzkum v matrikách a archivech se dělá s ním.",
|
|
126
126
|
"ui.setup.agent.install": "Nainstalovat Claude Code hned (doporučeno; je potřeba předplatné Claude)",
|
|
127
127
|
"ui.setup.agent.guide": "Ukázat, jací agenti jsou (otevře stránku v prohlížeči)",
|
|
128
|
-
"ui.setup.agent.
|
|
128
|
+
"ui.setup.agent.archive": "Zatím jen archiv",
|
|
129
129
|
"ui.setup.agent.login": "Při prvním spuštění agenta přijde přihlášení – otevře se okno prohlížeče.",
|
|
130
|
-
"ui.setup.agent.manual": "
|
|
130
|
+
"ui.setup.agent.manual": "AI agent se instaluje podle návodu: {url}",
|
|
131
131
|
"ui.setup.model": "Který model má výzkum dělat?",
|
|
132
132
|
"ui.setup.model.opus": "Opus – nejlépe čte staré rukopisy (doporučeno)",
|
|
133
133
|
"ui.setup.model.sonnet": "Sonnet – rychlejší; tištěné dokumenty a běžná práce",
|
|
@@ -709,6 +709,7 @@
|
|
|
709
709
|
"ui.o.stories": "vyprávění",
|
|
710
710
|
"ui.o.mode": "druh",
|
|
711
711
|
"ui.o.mode.archive": "archiv — data přicházejí z aplikace Strom (přepíná jen uživatel: strom mode research)",
|
|
712
|
+
"ui.o.mode.waiting": "výzkum čeká na AI agenta na tomto počítači — zatím se drží jako archiv (po instalaci agenta je to sám zase výzkum)",
|
|
712
713
|
"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)",
|
|
713
714
|
"ui.o.stories.on": "zapnuté: strom navrhne vyprávění, jakmile zápisy vyprávějí život (úkoly narrate)",
|
|
714
715
|
"ui.o.stories.off": "vypnuté (uživatel nechce) – nezmiňuj to",
|
|
@@ -792,6 +793,7 @@
|
|
|
792
793
|
"ui.setup.stromapp.no": "Ne – už ji nezmiňovat",
|
|
793
794
|
"ui.menu.app.watch": "Sledovat práci agenta v aplikaci Strom (živě)",
|
|
794
795
|
"ui.menu.app.new": "Aplikace Strom – výzkum jako rodokmen, sledovaný živě",
|
|
796
|
+
"ui.menu.app.new.archive": "Aplikace Strom – rodokmen, jeho osoby a prameny",
|
|
795
797
|
"ui.menu.app.tip": "Tip: výzkum jde prohlížet jako rodokmen v aplikaci Strom a sledovat ho živě, když agent pracuje – volba {key}.",
|
|
796
798
|
"ui.menu.app.live": "Agent pracuje – živě ho jde sledovat v aplikaci Strom: volba {key}.",
|
|
797
799
|
"ui.app.open.now": "Až bude nainstalovaná: otevřít v ní výzkum?",
|
|
@@ -1074,16 +1076,38 @@
|
|
|
1074
1076
|
"ui.setup.fromapp": "Spuštěno z aplikace Strom. Jak má výzkum tento rodokmen vést?",
|
|
1075
1077
|
"ui.setup.fromapp.archive": "Jako archiv: data se zadávají v aplikaci, výzkum je drží i s prameny, originály a historií (bez AI agenta, zapnout ho jde později)",
|
|
1076
1078
|
"ui.setup.fromapp.agent": "Jako výzkum s agentem {agent}: agent hledá předky v záznamech (doporučeno)",
|
|
1077
|
-
"ui.link.new.archive": "Je to archiv: co se zadá v aplikaci Strom,
|
|
1078
|
-
"ui.
|
|
1079
|
+
"ui.link.new.archive": "Je to archiv: co se zadá v aplikaci Strom, drží, jak to přijde. Výzkum se zapíná v menu, první položka.",
|
|
1080
|
+
"ui.link.new.waiting": "Výzkum čeká na AI agenta, který na tomto počítači není: do té doby drží, co přijde z aplikace Strom, jako archiv. Agenta nainstalovat nebo vybrat jiného: menu, první položka.",
|
|
1081
|
+
"ui.setup.archive": "Bez AI agenta na počítači drží výzkum data z aplikace Strom jako archiv: zadávají se v aplikaci Strom a zůstávají i s prameny a historií. Po instalaci agenta výzkum pokračuje s ním sám.",
|
|
1079
1082
|
"ui.setup.archive.chosen": "Nový výzkum je archiv: data se zadávají v aplikaci Strom a výzkum je drží i s prameny a historií. Práce s agentem: první položka menu (strom mode research).",
|
|
1080
1083
|
"ui.setup.archive.off": "Agent už tu je: mají nové výzkumy pracovat s ním (ne jen archiv)?",
|
|
1081
|
-
"ui.mode.pick": "
|
|
1084
|
+
"ui.mode.pick": "Výzkum, nebo jen archiv:",
|
|
1082
1085
|
"ui.mode.research": "výzkum: hledání v matrikách a archivech",
|
|
1083
1086
|
"ui.mode.archive": "jen archiv dat z aplikace Strom",
|
|
1087
|
+
"ui.mode.waiting": "výzkum, čeká na AI agenta na tomto počítači",
|
|
1088
|
+
"ui.mode.is.waiting": "Tento výzkum čeká na AI agenta na tomto počítači: dokud tu žádný není, drží data z aplikace Strom jako archiv (nic pro agenta nevzniká, úkoly čekají). Natrvalo jen archiv: strom mode archive",
|
|
1089
|
+
"ui.mode.this.research": "Tento výzkum: výzkum – hledání v matrikách a archivech",
|
|
1090
|
+
"ui.mode.this.archive": "Tento výzkum: jen archiv dat z aplikace Strom",
|
|
1091
|
+
"ui.mode.new.research": "Nové výzkumy: výzkum – hledání v matrikách a archivech",
|
|
1092
|
+
"ui.mode.new.archive": "Nové výzkumy: jen archiv dat z aplikace Strom",
|
|
1093
|
+
"ui.mode.new.is": "Nové výzkumy na tomto počítači: {state}.",
|
|
1094
|
+
"ui.settings.newmode": "Nové výzkumy: výzkum, nebo jen archiv: {state}",
|
|
1095
|
+
"ui.mode.later": "Archiv zůstává beze změny: výzkum jde zapnout, až bude na počítači AI agent.",
|
|
1096
|
+
"ui.mode.setup": "Nastavit teď agenta (model, kde mluvit, co smí sám)?",
|
|
1097
|
+
"ui.setup.newmode": "Čím má být nový výzkum na tomto počítači?",
|
|
1098
|
+
"ui.setup.newmode.agent": "Výzkum s agentem {agent}: hledá předky v matrikách a archivech (doporučeno)",
|
|
1099
|
+
"ui.setup.newmode.archive": "Jen archiv – ukládat data z aplikace Strom",
|
|
1100
|
+
"ui.menu.waitagent": "Výzkum čeká na AI agenta: dokud na počítači žádný není, data z aplikace Strom se ukládají jako v archivu.",
|
|
1101
|
+
"ui.menu.waitagent.chosen": "Výzkum čeká na svého AI agenta ({agent}), který na tomto počítači není: zatím se data z aplikace Strom ukládají jako v archivu.",
|
|
1102
|
+
"ui.menu.keeparchive": "Nechat jen jako archiv: ukládat data z aplikace Strom",
|
|
1103
|
+
"ui.why.waitagent.human": "výzkum čeká na AI agenta na tomto počítači: zatím se data z aplikace Strom ukládají jako v archivu (menu: nainstalovat agenta, nebo nechat jen jako archiv)",
|
|
1104
|
+
"ui.why.waitagent.agent": "agent výzkumu na tomto počítači není: výzkum na něj čeká a zatím se drží jako archiv (žádné sezení, žádná fronta) – co přišlo a co čeká: strom sync --inbox; agenta instaluje člověk (strom, první položka menu)",
|
|
1105
|
+
"ui.plan.waitagent": "{name} čeká na AI agenta na tomto počítači: dokud tu žádný není, nic se neplánuje. První položka menu ho nainstaluje.",
|
|
1084
1106
|
"ui.settings.mode": "Výzkum, nebo jen archiv: {state}",
|
|
1085
1107
|
"ui.menu.archive": "Archiv: data přicházejí z aplikace Strom.",
|
|
1086
1108
|
"ui.menu.archive.agent": "Zapnout výzkum: hledání v matrikách a archivech",
|
|
1109
|
+
"ui.setup.mode.ask": "„{name}“ je archiv. Nechat ho tak, nebo zapnout výzkum?",
|
|
1110
|
+
"ui.setup.mode.keep": "Nechat jako archiv",
|
|
1087
1111
|
"ui.menu.archive.recent": "Co nového přišlo",
|
|
1088
1112
|
"ui.sync.person.new": "{n}. nová osoba: {name}",
|
|
1089
1113
|
"ui.sync.fact.new": "{n}. {who}: nové — {fact}",
|
|
@@ -1210,6 +1234,7 @@
|
|
|
1210
1234
|
"ui.menu.settings.archive": "Nastavení: jazyk, zprávy, archiv nebo výzkum, údržba",
|
|
1211
1235
|
"ui.menu.more.archive.noapp": "Přidat do archivu: podklady, jiný rodokmen",
|
|
1212
1236
|
"ui.menu.more.archive": "Přidat do archivu: podklady, úpravy z aplikace Strom",
|
|
1237
|
+
"ui.menu.more.archive.empty": "Přidat do archivu: podklady",
|
|
1213
1238
|
"ui.menu.app.tip.archive": "Tip: výzkum jde prohlédnout jako rodokmen v aplikaci Strom – volba {key}.",
|
|
1214
1239
|
"ui.dry.done": "Nanečisto (--dry-run): nic se nezapsalo – řádky výše říkají, co by se stalo.",
|
|
1215
1240
|
"ui.trees.persons": "osob: {n}",
|
|
@@ -1351,7 +1376,7 @@
|
|
|
1351
1376
|
"ui.more.undo": "Vrátit poslední poslání z aplikace Strom ({when})",
|
|
1352
1377
|
"ui.more.undo.what": "Vrátit, co výzkum převzal z aplikace Strom {when}:",
|
|
1353
1378
|
"ui.link.ok": "OK",
|
|
1354
|
-
"ui.link.bad": "Tento odkaz z aplikace Strom nešel použít
|
|
1379
|
+
"ui.link.bad": "Tento odkaz z aplikace Strom nešel použít – některá jeho část chybí nebo nesedí. Nic se nestalo.",
|
|
1355
1380
|
"ui.link.notree": "Výzkum, pro který odkaz je, na tomto počítači není (nebo strom nezná jeho složku). Nic se nestalo.",
|
|
1356
1381
|
"ui.link.which": "Tento výzkum je tu vícekrát. Který má úpravy přijmout?",
|
|
1357
1382
|
"ui.link.noclip": "Tento výřez pramene {source} už ve výzkumu není (byl udělán znovu nebo odebrán). Po novém otevření aplikace Strom z výzkumu dostane aktuální výřezy.",
|
|
@@ -1456,7 +1481,8 @@
|
|
|
1456
1481
|
"ui.link.new.empty": "Strom, který aplikace Strom poslala, nemá žádné osoby – není co zkoumat. Výzkum „{name}“ tu je, zatím prázdný.",
|
|
1457
1482
|
"ui.link.new.failed": "Aplikace Strom strom předat nemohla. Výzkum „{name}“ tu je, zatím prázdný: zkusit to z aplikace znovu.",
|
|
1458
1483
|
"ui.link.new.taken": "✓ Rodokmen je ve výzkumu „{name}“: osob {persons}, rodin {families}, pramenů {sources} – jako vodítka; co doloží záznamy, najde agent.",
|
|
1459
|
-
"ui.link.new.taken.archive": "✓ Rodokmen je
|
|
1484
|
+
"ui.link.new.taken.archive": "✓ Rodokmen je v archivu „{name}“: osob {persons}, rodin {families}, pramenů {sources} – tak, jak přišel z aplikace Strom.",
|
|
1485
|
+
"ui.link.new.taken.waiting": "✓ Rodokmen je ve výzkumu „{name}“: osob {persons}, rodin {families}, pramenů {sources} – jako vodítka; co doloží záznamy, najde agent, až bude na počítači.",
|
|
1460
1486
|
"ui.link.new.taken.empty": "✓ Aplikace Strom předala strom, zatím prázdný: výzkum „{name}“ je s ní propojený. Osoby přidané v aplikaci přijdou do výzkumu, až se odešlou.",
|
|
1461
1487
|
"ui.link.new.back": "Aplikace Strom teď strom ukazuje jako strom výzkumu.",
|
|
1462
1488
|
"ui.link.new.chat": "Začít teď rozhovor s agentem?",
|
|
@@ -1504,11 +1530,14 @@
|
|
|
1504
1530
|
"ui.intake.text": "Co je známo – jména, data, místa, rodinné vzpomínky",
|
|
1505
1531
|
"ui.intake.write": "Napsat, co je známo (Enter nebo 0 vrátí zpět)",
|
|
1506
1532
|
"ui.intake.path": "Složka nebo soubor – jde je sem přetáhnout myší (Enter nebo 0 vrátí zpět)",
|
|
1507
|
-
"ui.intake.missing": "
|
|
1533
|
+
"ui.intake.missing": "Nenalezeno: {path} – zkontrolovat cestu, nebo soubor či složku přetáhnout myší.",
|
|
1508
1534
|
"ui.intake.scans": "Ve složce {folder} je {n} obrázků. Jsou to rodinné dokumenty a fotky? (ne: skeny matriky nebo jiné knihy)",
|
|
1509
1535
|
"ui.intake.book": "{folder}: skeny matriky nebo jiné knihy patří k té knize – stačí agentovi v rozhovoru říct, odkud jsou, a zaeviduje si je.",
|
|
1510
1536
|
"ui.intake.known": "Tyhle podklady už ve výzkumu jsou – nic nepřibylo.",
|
|
1511
1537
|
"ui.intake.done": "✓ Přidáno do výzkumu: {n}. Agent to projde při další práci.",
|
|
1538
|
+
"ui.intake.done.archive": "✓ Uloženo do archivu: {n}. Projde se, až se zapne výzkum.",
|
|
1539
|
+
"ui.intake.done.waiting": "✓ Uloženo do výzkumu: {n}. Agent to projde, až bude na počítači.",
|
|
1540
|
+
"ui.intake.same": "Už tu bylo dřív: {n}.",
|
|
1512
1541
|
"ui.intake.chat": "Projít to s agentem hned?",
|
|
1513
1542
|
"ui.intake.say": "Do výzkumu jsem přidal(a) nové podklady – pojďme je projít.",
|
|
1514
1543
|
"ui.research.kind": "Co zkoumat?",
|
|
@@ -1883,6 +1912,13 @@
|
|
|
1883
1912
|
"ui.error.pack.no-manifest.hint": "zadat ZIP soubor, který přišel",
|
|
1884
1913
|
"ui.error.fs.no-permission": "chybí oprávnění{where}",
|
|
1885
1914
|
"ui.error.fs.no-permission.hint": "vybrat složku, do které lze zapisovat",
|
|
1915
|
+
"ui.error.fs.missing": "nenalezeno: {path}",
|
|
1916
|
+
"ui.error.fs.missing.hint": "zkontrolovat cestu (relativní cesta začíná v aktuální složce)",
|
|
1917
|
+
"ui.error.grep.in.missing": "--in {where}: ve výzkumu nenalezeno",
|
|
1918
|
+
"ui.error.grep.in.only": "--in {where}: prohledávají se jen {folders} (data/ přes strom find a příkazy záznamů)",
|
|
1919
|
+
"ui.error.grep.in.path": "--in {where}: složka výzkumu ({folders}, all) nebo cesta v ní, od složky výzkumu",
|
|
1920
|
+
"ui.error.grep.in.link": "--in {where}: symbolický odkaz – nesleduje se",
|
|
1921
|
+
"ui.error.grep.outside": "--in {where}: soubor mimo výzkum – uložený výpis příkazu strom: spustit znovu s vlastním filtrem",
|
|
1886
1922
|
"ui.error.git.missing": "git není nainstalovaný – Strom v něm vede historii výzkumu",
|
|
1887
1923
|
"ui.error.git.missing.hint": "nainstaluje ho strom doctor --fix",
|
|
1888
1924
|
"ui.error.git.missing-linux": "git není nainstalovaný – Strom v něm vede historii výzkumu",
|
|
@@ -2153,6 +2189,8 @@
|
|
|
2153
2189
|
"ui.archive.level.forbidden.set": "žádný automatický přístup",
|
|
2154
2190
|
"ui.archive.level.refused": "server odmítl automatický přístup stromu – snímky ručně",
|
|
2155
2191
|
"ui.archive.refused": "{title}: server {host} odmítl automatický přístup stromu (od {date}) – je to odpověď serveru, ne podmínky archivu. Snímky ručně; odmítnutí zruší jen člověk: strom allow host {host} --unblock",
|
|
2192
|
+
"ui.archive.refuse": "Tento výzkum je archiv: data přicházejí z aplikace Strom a nic se nezkoumá. Výzkum se zapíná v menu, první položka.",
|
|
2193
|
+
"ui.waiting.refuse": "Výzkum čeká na AI agenta ({agent}), který na tomto počítači není: do té doby drží data z aplikace Strom jako archiv. Agenta nainstalovat nebo vybrat jiného: menu, první položka.",
|
|
2156
2194
|
"ui.archive.refused.undated": "{title}: server {host} odmítl automatický přístup stromu – je to odpověď serveru, ne podmínky archivu. Snímky ručně; odmítnutí zruší jen člověk: strom allow host {host} --unblock",
|
|
2157
2195
|
"ui.archive.waiting.one": "Čeká rozhodnutí o stahování z archivu {title}",
|
|
2158
2196
|
"ui.archive.waiting.more": "Čekají rozhodnutí o stahování z archivů: {n}",
|
package/assets/lang/de.json
CHANGED
|
@@ -122,12 +122,12 @@
|
|
|
122
122
|
"ui.setup.git.wait": "Die Installation im geöffneten Fenster abschließen, dann Enter drücken.",
|
|
123
123
|
"ui.setup.git.manual": "Installation mit: {command} – dann {strom} erneut starten.",
|
|
124
124
|
"ui.setup.agent.ok": "✓ KI-Agent: {name}",
|
|
125
|
-
"ui.setup.agent.none": "
|
|
125
|
+
"ui.setup.agent.none": "Auf diesem Computer ist kein KI-Agent – die Forschung in Matriken und Archiven geschieht mit ihm.",
|
|
126
126
|
"ui.setup.agent.install": "Claude Code jetzt installieren (empfohlen; nötig ist ein Claude-Abonnement)",
|
|
127
127
|
"ui.setup.agent.guide": "Zeigen, welche Agenten es gibt (öffnet eine Seite im Browser)",
|
|
128
|
-
"ui.setup.agent.
|
|
128
|
+
"ui.setup.agent.archive": "Vorerst nur ein Archiv",
|
|
129
129
|
"ui.setup.agent.login": "Beim ersten Start des Agenten ist eine Anmeldung nötig – ein Browserfenster öffnet sich.",
|
|
130
|
-
"ui.setup.agent.manual": "
|
|
130
|
+
"ui.setup.agent.manual": "Ein KI-Agent wird nach dieser Anleitung installiert: {url}",
|
|
131
131
|
"ui.setup.model": "Welches Modell soll die Forschung machen?",
|
|
132
132
|
"ui.setup.model.opus": "Opus – liest alte Handschriften am besten (empfohlen)",
|
|
133
133
|
"ui.setup.model.sonnet": "Sonnet – schneller; gedruckte Dokumente und alltägliche Arbeit",
|
|
@@ -709,6 +709,7 @@
|
|
|
709
709
|
"ui.o.stories": "Geschichten",
|
|
710
710
|
"ui.o.mode": "Art",
|
|
711
711
|
"ui.o.mode.archive": "ein Archiv — die Daten kommen aus der Strom-App (nur der Benutzer schaltet um: strom mode research)",
|
|
712
|
+
"ui.o.mode.waiting": "Forschung wartet auf einen KI-Agenten auf diesem Computer — bis dahin wie ein Archiv geführt (sobald einer installiert ist, von selbst wieder Forschung)",
|
|
712
713
|
"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)",
|
|
713
714
|
"ui.o.stories.on": "an: strom schlägt eine Geschichte vor, sobald Einträge ein Leben erzählen (Aufgaben narrate)",
|
|
714
715
|
"ui.o.stories.off": "aus (der Benutzer will es nicht) – nicht ansprechen",
|
|
@@ -792,6 +793,7 @@
|
|
|
792
793
|
"ui.setup.stromapp.no": "Nein – nicht mehr erwähnen",
|
|
793
794
|
"ui.menu.app.watch": "Dem Agenten in der Strom-App bei der Arbeit zusehen (live)",
|
|
794
795
|
"ui.menu.app.new": "Die Strom-App – die Forschung als Stammbaum, live verfolgt",
|
|
796
|
+
"ui.menu.app.new.archive": "Die Strom-App – der Stammbaum, seine Personen und Quellen",
|
|
795
797
|
"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}.",
|
|
796
798
|
"ui.menu.app.live": "Der Agent arbeitet – in der Strom-App lässt sich ihm live zusehen: Auswahl {key}.",
|
|
797
799
|
"ui.app.open.now": "Sobald sie installiert ist: die Forschung darin öffnen?",
|
|
@@ -1074,16 +1076,38 @@
|
|
|
1074
1076
|
"ui.setup.fromapp": "Start aus der Strom-App. Wie soll die Forschung den Stammbaum führen?",
|
|
1075
1077
|
"ui.setup.fromapp.archive": "Als Archiv: die Daten werden in der App eingegeben, die Forschung bewahrt sie mit Quellen, Originalen und Geschichte (ohne KI-Agent; er lässt sich später einschalten)",
|
|
1076
1078
|
"ui.setup.fromapp.agent": "Als Forschung mit {agent}: der Agent sucht die Vorfahren in den Einträgen (empfohlen)",
|
|
1077
|
-
"ui.link.new.archive": "Es ist ein Archiv: was in der Strom-App eingegeben wird, bewahrt
|
|
1078
|
-
"ui.
|
|
1079
|
+
"ui.link.new.archive": "Es ist ein Archiv: was in der Strom-App eingegeben wird, bewahrt es, wie es kommt. Die Forschung wird im Menü eingeschaltet, erster Punkt.",
|
|
1080
|
+
"ui.link.new.waiting": "Die Forschung wartet auf ihren KI-Agenten, der auf diesem Computer nicht ist: bis dahin bewahrt sie, was aus der Strom-App kommt, als Archiv. Den Agenten installieren oder einen anderen wählen: das Menü, erster Punkt.",
|
|
1081
|
+
"ui.setup.archive": "Ohne KI-Agenten auf dem Computer bewahrt eine Forschung die Daten aus der Strom-App wie ein Archiv: sie werden in der Strom-App eingegeben und mit ihren Quellen und ihrer Geschichte aufbewahrt. Sobald ein Agent installiert ist, geht die Forschung mit ihm von selbst weiter.",
|
|
1079
1082
|
"ui.setup.archive.chosen": "Eine neue Forschung ist ein Archiv: die Daten werden in der Strom-App eingegeben, und die Forschung bewahrt sie mit ihren Quellen und ihrer Geschichte. Arbeit mit einem Agenten: der erste Menüpunkt (strom mode research).",
|
|
1080
1083
|
"ui.setup.archive.off": "Jetzt ist ein Agent da: sollen neue Forschungen mit ihm arbeiten (nicht nur ein Archiv)?",
|
|
1081
|
-
"ui.mode.pick": "
|
|
1084
|
+
"ui.mode.pick": "Forschung oder nur ein Archiv:",
|
|
1082
1085
|
"ui.mode.research": "Forschung: Suche in Kirchenbüchern und Archiven",
|
|
1083
1086
|
"ui.mode.archive": "nur ein Archiv der Daten aus der Strom-App",
|
|
1087
|
+
"ui.mode.waiting": "Forschung, wartet auf einen KI-Agenten auf diesem Computer",
|
|
1088
|
+
"ui.mode.is.waiting": "Diese Forschung wartet auf einen KI-Agenten auf diesem Computer: bis einer da ist, bewahrt sie die Daten aus der Strom-App wie ein Archiv (nichts für einen Agenten entsteht, die Aufgaben warten). Für immer nur ein Archiv: strom mode archive",
|
|
1089
|
+
"ui.mode.this.research": "Diese Forschung: Forschung – Suche in Kirchenbüchern und Archiven",
|
|
1090
|
+
"ui.mode.this.archive": "Diese Forschung: nur ein Archiv der Daten aus der Strom-App",
|
|
1091
|
+
"ui.mode.new.research": "Neue Forschungen: Forschung – Suche in Kirchenbüchern und Archiven",
|
|
1092
|
+
"ui.mode.new.archive": "Neue Forschungen: nur ein Archiv der Daten aus der Strom-App",
|
|
1093
|
+
"ui.mode.new.is": "Neue Forschungen auf diesem Computer: {state}.",
|
|
1094
|
+
"ui.settings.newmode": "Neue Forschungen: Forschung oder nur ein Archiv: {state}",
|
|
1095
|
+
"ui.mode.later": "Das Archiv bleibt, wie es war: die Forschung lässt sich einschalten, sobald ein KI-Agent auf dem Computer ist.",
|
|
1096
|
+
"ui.mode.setup": "Die Einstellungen des Agenten (Modell, wo gesprochen wird, was er allein darf) jetzt festlegen?",
|
|
1097
|
+
"ui.setup.newmode": "Was soll eine neue Forschung auf diesem Computer sein?",
|
|
1098
|
+
"ui.setup.newmode.agent": "Forschung mit {agent}: er sucht die Vorfahren in Kirchenbüchern und Archiven (empfohlen)",
|
|
1099
|
+
"ui.setup.newmode.archive": "Nur ein Archiv – die Daten aus der Strom-App speichern",
|
|
1100
|
+
"ui.menu.waitagent": "Die Forschung wartet auf einen KI-Agenten: solange keiner auf dem Computer ist, werden die Daten aus der Strom-App wie in einem Archiv gespeichert.",
|
|
1101
|
+
"ui.menu.waitagent.chosen": "Die Forschung wartet auf ihren KI-Agenten ({agent}), der nicht auf diesem Computer ist: bis dahin werden die Daten aus der Strom-App wie in einem Archiv gespeichert.",
|
|
1102
|
+
"ui.menu.keeparchive": "Nur als Archiv behalten: die Daten aus der Strom-App speichern",
|
|
1103
|
+
"ui.why.waitagent.human": "die Forschung wartet auf einen KI-Agenten auf diesem Computer: bis dahin werden die Daten aus der Strom-App wie in einem Archiv gespeichert (das Menü: den Agenten installieren oder nur als Archiv behalten)",
|
|
1104
|
+
"ui.why.waitagent.agent": "der Agent der Forschung ist nicht auf diesem Computer: sie wartet auf ihn und wird bis dahin wie ein Archiv geführt (keine Sitzungen, keine Warteschlange) – was kam und was wartet: strom sync --inbox; den Agenten installiert der Mensch (strom, erster Menüpunkt)",
|
|
1105
|
+
"ui.plan.waitagent": "{name} wartet auf einen KI-Agenten auf diesem Computer: bis einer da ist, wird nichts geplant. Der erste Menüpunkt installiert ihn.",
|
|
1084
1106
|
"ui.settings.mode": "Forschung oder nur ein Archiv: {state}",
|
|
1085
1107
|
"ui.menu.archive": "Archiv: die Daten kommen aus der Strom-App.",
|
|
1086
1108
|
"ui.menu.archive.agent": "Forschung einschalten: Suche in Kirchenbüchern und Archiven",
|
|
1109
|
+
"ui.setup.mode.ask": "„{name}“ ist ein Archiv. So lassen oder die Forschung einschalten?",
|
|
1110
|
+
"ui.setup.mode.keep": "Als Archiv lassen",
|
|
1087
1111
|
"ui.menu.archive.recent": "Was zuletzt hinzukam",
|
|
1088
1112
|
"ui.sync.person.new": "{n}. neue Person: {name}",
|
|
1089
1113
|
"ui.sync.fact.new": "{n}. {who}: neu — {fact}",
|
|
@@ -1210,6 +1234,7 @@
|
|
|
1210
1234
|
"ui.menu.settings.archive": "Einstellungen: Sprache, Meldungen, Archiv oder Forschung, Wartung",
|
|
1211
1235
|
"ui.menu.more.archive.noapp": "Zum Archiv hinzufügen: Unterlagen, ein anderer Stammbaum",
|
|
1212
1236
|
"ui.menu.more.archive": "Zum Archiv hinzufügen: Unterlagen, Änderungen aus der Strom-App",
|
|
1237
|
+
"ui.menu.more.archive.empty": "Zum Archiv hinzufügen: Unterlagen",
|
|
1213
1238
|
"ui.menu.app.tip.archive": "Tipp: die Forschung als Stammbaum in der Strom-App – Wahl {key}.",
|
|
1214
1239
|
"ui.dry.done": "Probelauf (--dry-run): nichts wurde geschrieben – die Zeilen oben sagen, was geschähe.",
|
|
1215
1240
|
"ui.trees.persons": "Personen: {n}",
|
|
@@ -1351,7 +1376,7 @@
|
|
|
1351
1376
|
"ui.more.undo": "Die letzte Sendung aus der Strom-App zurücknehmen ({when})",
|
|
1352
1377
|
"ui.more.undo.what": "Zurücknehmen, was die Forschung am {when} aus der Strom-App übernommen hat:",
|
|
1353
1378
|
"ui.link.ok": "OK",
|
|
1354
|
-
"ui.link.bad": "Dieser Link aus der Strom-App ließ sich nicht verwenden
|
|
1379
|
+
"ui.link.bad": "Dieser Link aus der Strom-App ließ sich nicht verwenden – ein Teil davon fehlt oder stimmt nicht. Es ist nichts geschehen.",
|
|
1355
1380
|
"ui.link.notree": "Die Forschung, für die dieser Link ist, ist nicht auf diesem Computer (oder strom kennt ihren Ordner nicht). Es ist nichts geschehen.",
|
|
1356
1381
|
"ui.link.which": "Diese Forschung ist hier mehrmals. Welche soll die Änderungen übernehmen?",
|
|
1357
1382
|
"ui.link.noclip": "Dieser Ausschnitt der Quelle {source} ist nicht mehr in der Forschung (neu gemacht oder entfernt). Die Strom-App erneut aus der Forschung öffnen, dann bekommt sie die aktuellen.",
|
|
@@ -1456,7 +1481,8 @@
|
|
|
1456
1481
|
"ui.link.new.empty": "Der Stammbaum, den die Strom-App geschickt hat, hat keine Personen – es gibt nichts zu erforschen. Die Forschung „{name}“ ist hier, noch leer.",
|
|
1457
1482
|
"ui.link.new.failed": "Die Strom-App konnte den Stammbaum nicht übergeben. Die Forschung „{name}“ ist hier, noch leer: es erneut aus der App versuchen.",
|
|
1458
1483
|
"ui.link.new.taken": "✓ Der Stammbaum ist in der Forschung „{name}“: {persons} Personen, {families} Familien, {sources} Quellen – als Hinweise; was Quellen belegen, findet der Agent.",
|
|
1459
|
-
"ui.link.new.taken.archive": "✓ Der Stammbaum ist
|
|
1484
|
+
"ui.link.new.taken.archive": "✓ Der Stammbaum ist im Archiv „{name}“: {persons} Personen, {families} Familien, {sources} Quellen – so, wie er aus der Strom-App kam.",
|
|
1485
|
+
"ui.link.new.taken.waiting": "✓ Der Stammbaum ist in der Forschung „{name}“: {persons} Personen, {families} Familien, {sources} Quellen – als Hinweise; was Quellen belegen, findet der Agent, sobald er auf diesem Computer ist.",
|
|
1460
1486
|
"ui.link.new.taken.empty": "✓ Die Strom-App hat ihren Stammbaum übergeben, noch leer: die Forschung „{name}“ ist mit ihr verbunden. Die in der App hinzugefügten Personen kommen in die Forschung, sobald sie gesendet werden.",
|
|
1461
1487
|
"ui.link.new.back": "Die Strom-App zeigt den Stammbaum jetzt als Stammbaum der Forschung.",
|
|
1462
1488
|
"ui.link.new.chat": "Jetzt das Gespräch mit dem Agenten beginnen?",
|
|
@@ -1504,11 +1530,14 @@
|
|
|
1504
1530
|
"ui.intake.text": "Eigenes Wissen – Namen, Daten, Orte, Erinnerungen der Familie",
|
|
1505
1531
|
"ui.intake.write": "Hier aufschreiben, was bekannt ist (Enter oder 0 geht zurück)",
|
|
1506
1532
|
"ui.intake.path": "Der Ordner oder die Datei – sie lässt sich in dieses Fenster ziehen (Enter oder 0 geht zurück)",
|
|
1507
|
-
"ui.intake.missing": "Nicht gefunden: {path} – den Pfad prüfen oder den Ordner hineinziehen.",
|
|
1533
|
+
"ui.intake.missing": "Nicht gefunden: {path} – den Pfad prüfen oder die Datei bzw. den Ordner hineinziehen.",
|
|
1508
1534
|
"ui.intake.scans": "Im Ordner {folder} sind {n} Bilder. Sind es Dokumente und Fotos der Familie? (nein: Scans eines Kirchenbuchs oder eines anderen Buchs)",
|
|
1509
1535
|
"ui.intake.book": "{folder}: Scans eines Kirchenbuchs oder eines anderen Buchs gehören zu diesem Buch – dem Agenten im Gespräch sagen, woher sie stammen, er erfasst sie.",
|
|
1510
1536
|
"ui.intake.known": "Diese Unterlagen sind schon in der Forschung – nichts hinzugefügt.",
|
|
1511
1537
|
"ui.intake.done": "✓ Zur Forschung hinzugefügt: {n}. Der Agent sieht es bei der nächsten Arbeit durch.",
|
|
1538
|
+
"ui.intake.done.archive": "✓ Im Archiv aufbewahrt: {n}. Es wird durchgesehen, sobald die Forschung eingeschaltet ist.",
|
|
1539
|
+
"ui.intake.done.waiting": "✓ In der Forschung aufbewahrt: {n}. Der Agent sieht es durch, sobald er auf diesem Computer ist.",
|
|
1540
|
+
"ui.intake.same": "Schon vorher hier: {n}.",
|
|
1512
1541
|
"ui.intake.chat": "Jetzt mit dem Agenten durchgehen?",
|
|
1513
1542
|
"ui.intake.say": "Ich habe der Forschung neue Unterlagen hinzugefügt – gehen wir sie durch.",
|
|
1514
1543
|
"ui.research.kind": "Was soll erforscht werden?",
|
|
@@ -1883,6 +1912,13 @@
|
|
|
1883
1912
|
"ui.error.pack.no-manifest.hint": "die ZIP-Datei angeben, die gekommen ist",
|
|
1884
1913
|
"ui.error.fs.no-permission": "keine Berechtigung{where}",
|
|
1885
1914
|
"ui.error.fs.no-permission.hint": "einen Ordner wählen, in den geschrieben werden darf",
|
|
1915
|
+
"ui.error.fs.missing": "nicht gefunden: {path}",
|
|
1916
|
+
"ui.error.fs.missing.hint": "den Pfad prüfen (ein relativer Pfad beginnt im aktuellen Ordner)",
|
|
1917
|
+
"ui.error.grep.in.missing": "--in {where}: in der Forschung nicht gefunden",
|
|
1918
|
+
"ui.error.grep.in.only": "--in {where}: durchsucht werden nur {folders} (data/ über strom find und die Befehle der Einträge)",
|
|
1919
|
+
"ui.error.grep.in.path": "--in {where}: ein Ordner der Forschung ({folders}, all) oder ein Pfad darin, vom Ordner der Forschung aus",
|
|
1920
|
+
"ui.error.grep.in.link": "--in {where}: ein symbolischer Link – wird nicht verfolgt",
|
|
1921
|
+
"ui.error.grep.outside": "--in {where}: eine Datei außerhalb der Forschung – eine gespeicherte Ausgabe von strom: mit dem eigenen Filter erneut ausführen",
|
|
1886
1922
|
"ui.error.git.missing": "git ist nicht installiert – Strom führt darin die Geschichte der Forschung",
|
|
1887
1923
|
"ui.error.git.missing.hint": "strom doctor --fix installiert es",
|
|
1888
1924
|
"ui.error.git.missing-linux": "git ist nicht installiert – Strom führt darin die Geschichte der Forschung",
|
|
@@ -2153,6 +2189,8 @@
|
|
|
2153
2189
|
"ui.archive.level.forbidden.set": "kein automatischer Zugriff",
|
|
2154
2190
|
"ui.archive.level.refused": "der Server hat den automatischen Zugriff von strom abgelehnt – Bilder von Hand",
|
|
2155
2191
|
"ui.archive.refused": "{title}: Der Server {host} hat den automatischen Zugriff von strom abgelehnt (seit {date}) – eine Antwort des Servers, nicht die Bedingungen des Archivs. Bilder von Hand; die Ablehnung hebt nur ein Mensch auf: strom allow host {host} --unblock",
|
|
2192
|
+
"ui.archive.refuse": "Diese Forschung ist ein Archiv: die Daten kommen aus der Strom-App, und nichts wird erforscht. Die Forschung wird im Menü eingeschaltet, erster Punkt.",
|
|
2193
|
+
"ui.waiting.refuse": "Die Forschung wartet auf ihren KI-Agenten ({agent}), der auf diesem Computer nicht ist: bis dahin bewahrt sie die Daten aus der Strom-App als Archiv. Den Agenten installieren oder einen anderen wählen: das Menü, erster Punkt.",
|
|
2156
2194
|
"ui.archive.refused.undated": "{title}: Der Server {host} hat den automatischen Zugriff von strom abgelehnt – eine Antwort des Servers, nicht die Bedingungen des Archivs. Bilder von Hand; die Ablehnung hebt nur ein Mensch auf: strom allow host {host} --unblock",
|
|
2157
2195
|
"ui.archive.waiting.one": "Eine Entscheidung über das Herunterladen aus dem Archiv {title} wartet",
|
|
2158
2196
|
"ui.archive.waiting.more": "Entscheidungen über das Herunterladen aus Archiven warten: {n}",
|
package/dist/agents/files.js
CHANGED
|
@@ -413,9 +413,43 @@ function withUserPart(file, generated) {
|
|
|
413
413
|
}
|
|
414
414
|
return generated;
|
|
415
415
|
}
|
|
416
|
-
/** strom's
|
|
416
|
+
/** Nothing of strom's left in a JSON value. */
|
|
417
|
+
const GONE = Symbol("gone");
|
|
418
|
+
/**
|
|
419
|
+
* What is left of `cur` with strom's part (`ours`) taken out: what equals it goes, an object loses strom's keys, a list
|
|
420
|
+
* strom's items — what a person added or changed stays. Nothing left: GONE.
|
|
421
|
+
*/
|
|
422
|
+
function withoutOurs(cur, ours) {
|
|
423
|
+
if (JSON.stringify(cur) === JSON.stringify(ours))
|
|
424
|
+
return GONE;
|
|
425
|
+
if (Array.isArray(cur) && Array.isArray(ours)) {
|
|
426
|
+
const theirs = cur.filter((x) => !ours.some((o) => JSON.stringify(o) === JSON.stringify(x)));
|
|
427
|
+
return theirs.length ? theirs : GONE;
|
|
428
|
+
}
|
|
429
|
+
if (cur && ours && typeof cur === "object" && typeof ours === "object" && !Array.isArray(cur) && !Array.isArray(ours)) {
|
|
430
|
+
const left = { ...cur };
|
|
431
|
+
for (const [k, v] of Object.entries(ours)) {
|
|
432
|
+
if (!(k in left))
|
|
433
|
+
continue;
|
|
434
|
+
const rest = withoutOurs(left[k], v);
|
|
435
|
+
if (rest === GONE)
|
|
436
|
+
delete left[k];
|
|
437
|
+
else
|
|
438
|
+
left[k] = rest;
|
|
439
|
+
}
|
|
440
|
+
return Object.keys(left).length ? left : GONE;
|
|
441
|
+
}
|
|
442
|
+
return cur;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* strom's own files of the agents taken out of a tree (an archive): those nobody else wrote in; a JSON file a person
|
|
446
|
+
* changed loses only what strom wrote in it (an agent opened in the folder must not read strom's rules there); the
|
|
447
|
+
* shim the agents' hooks start (.strom/bin, never committed) goes too.
|
|
448
|
+
*/
|
|
417
449
|
function dropAgentFiles(tree) {
|
|
418
450
|
const gone = [];
|
|
451
|
+
if (!tree.dryRun)
|
|
452
|
+
fs.rmSync(path.join(tree.root, ".strom", "bin"), { recursive: true, force: true });
|
|
419
453
|
const generated = [
|
|
420
454
|
["AGENTS.md", agentsMd(tree)],
|
|
421
455
|
["CLAUDE.md", claudeMd(tree)],
|
|
@@ -435,10 +469,28 @@ function dropAgentFiles(tree) {
|
|
|
435
469
|
catch {
|
|
436
470
|
continue;
|
|
437
471
|
}
|
|
438
|
-
// a person's notes below the mark, or a file changed by hand: theirs, it stays
|
|
472
|
+
// a person's notes below the mark, or a file changed by hand: theirs, it stays — of a JSON one, what is not strom's
|
|
439
473
|
const at = text.indexOf(MARKER);
|
|
440
474
|
const ours = at >= 0 ? !text.slice(at + MARKER.length).trim() : text === content;
|
|
441
|
-
if (!ours)
|
|
475
|
+
if (!ours && rel.endsWith(".json") && at < 0) {
|
|
476
|
+
let left;
|
|
477
|
+
try {
|
|
478
|
+
left = withoutOurs(JSON.parse(text), JSON.parse(content));
|
|
479
|
+
}
|
|
480
|
+
catch {
|
|
481
|
+
continue; // not JSON a person could keep: theirs
|
|
482
|
+
}
|
|
483
|
+
if (left !== GONE) {
|
|
484
|
+
const next = JSON.stringify(left, null, 2) + "\n";
|
|
485
|
+
if (next === text)
|
|
486
|
+
continue;
|
|
487
|
+
if (!tree.dryRun)
|
|
488
|
+
writeFileAtomic(file, next);
|
|
489
|
+
gone.push(rel.split(path.sep).join("/"));
|
|
490
|
+
continue;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
else if (!ours)
|
|
442
494
|
continue;
|
|
443
495
|
if (!tree.dryRun) {
|
|
444
496
|
fs.rmSync(file);
|
package/dist/cli/context.js
CHANGED
|
@@ -16,6 +16,7 @@ import { readJsonIfExists } from "../core/json.js";
|
|
|
16
16
|
import { foldText } from "../core/text.js";
|
|
17
17
|
import { currentSession } from "../core/session.js";
|
|
18
18
|
import { isAgent } from "../core/which.js";
|
|
19
|
+
import { treeAgentHere } from "../core/state.js";
|
|
19
20
|
import { canShowDialog, systemDialog, WAIT_SECONDS } from "../core/dialog.js";
|
|
20
21
|
import { UI, ui } from "./ui.js";
|
|
21
22
|
export class Context {
|
|
@@ -168,6 +169,23 @@ export class Context {
|
|
|
168
169
|
}
|
|
169
170
|
return this.settings.config.mode === "archive";
|
|
170
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Shown as an archive here: an archive, or the research worked on waiting for its agent (not on this computer) —
|
|
174
|
+
* nothing offered that needs the agent (its working alone, the downloaders), the way to the agent offered instead.
|
|
175
|
+
*/
|
|
176
|
+
actsAsArchive() {
|
|
177
|
+
if (this.archiveHere())
|
|
178
|
+
return true;
|
|
179
|
+
try {
|
|
180
|
+
const root = this.locateTree();
|
|
181
|
+
if (root)
|
|
182
|
+
return !treeAgentHere(readJsonIfExists(path.join(root, "strom.json")), this.env);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// no tree to say
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
171
189
|
/**
|
|
172
190
|
* A consent is the user's. In their own terminal they gave it by running the
|
|
173
191
|
* command. Anywhere else — an agent's session, the app — the person at the
|
package/dist/cli/fixes.js
CHANGED
|
@@ -59,7 +59,10 @@ export async function fixGit(ctx, out) {
|
|
|
59
59
|
out(ui(lang, "ui.setup.git.ok", { version: v }));
|
|
60
60
|
return Boolean(v);
|
|
61
61
|
}
|
|
62
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* No agent on this computer: install Claude Code, show the page about agents, or only an archive for now (nothing
|
|
64
|
+
* changes: a research waits for its agent, kept as an archive). Only a person here decides.
|
|
65
|
+
*/
|
|
63
66
|
export async function offerAgent(ctx, out) {
|
|
64
67
|
const lang = ctx.uiLang();
|
|
65
68
|
out(ui(lang, "ui.setup.agent.none"));
|
|
@@ -67,12 +70,15 @@ export async function offerAgent(ctx, out) {
|
|
|
67
70
|
out(ui(lang, "ui.setup.agent.manual", { url: researchUrl(lang, "agents") }));
|
|
68
71
|
return;
|
|
69
72
|
}
|
|
70
|
-
const how = await ctx.choose(ui(lang, "ui.choose"), [{ label: ui(lang, "ui.setup.agent.install") }, { label: ui(lang, "ui.setup.agent.guide") }, { label: ui(lang, "ui.setup.agent.
|
|
73
|
+
const how = await ctx.choose(ui(lang, "ui.choose"), [{ label: ui(lang, "ui.setup.agent.install") }, { label: ui(lang, "ui.setup.agent.guide") }, { label: ui(lang, "ui.setup.agent.archive") }], 0);
|
|
71
74
|
if (how === 0) {
|
|
72
75
|
runInstaller(claudeInstaller(), ctx.env);
|
|
73
76
|
if (agentsHere(ctx.env).some((a) => a.id === "claude"))
|
|
74
77
|
out(ui(lang, "ui.setup.agent.login"));
|
|
75
78
|
}
|
|
76
|
-
else if (how === 1)
|
|
79
|
+
else if (how === 1) {
|
|
80
|
+
// the page, and its address in case no browser opens
|
|
77
81
|
openForUser(researchUrl(lang, "agents"), ctx.env);
|
|
82
|
+
out(ui(lang, "ui.setup.agent.manual", { url: researchUrl(lang, "agents") }));
|
|
83
|
+
}
|
|
78
84
|
}
|
package/dist/cli/main.js
CHANGED
|
@@ -5,7 +5,7 @@ import { takeOverConnectors } from "../core/terms.js";
|
|
|
5
5
|
import { notePersonFolder } from "../core/trust.js";
|
|
6
6
|
import { netTrust } from "../core/net.js";
|
|
7
7
|
import { connectorsDir, listConnectors } from "../core/connector.js";
|
|
8
|
-
import { Cancelled, EXIT, StromError, UsageError } from "../core/errors.js";
|
|
8
|
+
import { Cancelled, EXIT, notFound, StromError, UsageError } from "../core/errors.js";
|
|
9
9
|
import { ownCommand } from "../core/paths.js";
|
|
10
10
|
import { Context } from "./context.js";
|
|
11
11
|
import { commands, match } from "./registry.js";
|
|
@@ -55,7 +55,7 @@ function systemError(e) {
|
|
|
55
55
|
const where = e.path ? `: ${e.path}` : "";
|
|
56
56
|
switch (e.code) {
|
|
57
57
|
case "ENOENT":
|
|
58
|
-
return new UsageError(
|
|
58
|
+
return e.path ? notFound(e.path) : new UsageError("no such file or folder", { hint: "check the path (relative paths start in the current folder)" });
|
|
59
59
|
case "EACCES":
|
|
60
60
|
case "EPERM":
|
|
61
61
|
return new UsageError(`no permission to use${where}`, { hint: "a folder with the right to write in it", code: "fs.no-permission", params: { where } });
|
package/dist/cli/menu-links.js
CHANGED
|
@@ -10,6 +10,7 @@ import { askPaths, directionTasks, offerChat, setDirection } from "./menu-resear
|
|
|
10
10
|
import { humanCost, humanDay, humanTask, humanWhen } from "./human.js";
|
|
11
11
|
import { lines, truncate } from "./format.js";
|
|
12
12
|
import { isArchive } from "../core/mode.js";
|
|
13
|
+
import { actsAsArchive } from "../core/state.js";
|
|
13
14
|
import { Tree } from "../core/tree.js";
|
|
14
15
|
import { costPartial, monthSpend, sessionCost } from "../core/session.js";
|
|
15
16
|
import { adoptAskedSince, adoptFailedSince, adoptedAt, adoptionNeverCame, awaitAdoption, nothingSince, SYNC_INBOX, undoSync, withoutImages } from "../core/sync.js";
|
|
@@ -340,7 +341,7 @@ export async function undoSending(ctx, run, lang, root, id, fromMenu = false) {
|
|
|
340
341
|
const preview = Tree.open(root, ctx.env);
|
|
341
342
|
preview.dryRun = true;
|
|
342
343
|
preview.withTreeLock(() => undoSync(preview, input));
|
|
343
|
-
const ops =
|
|
344
|
+
const ops = actsAsArchive(preview) ? preview.written.filter((o) => !o.op.startsWith("task.")) : preview.written;
|
|
344
345
|
// what it is now beside what it goes back to (found on Mac: only the value it would have again)
|
|
345
346
|
const said = changeLines(preview, ops, "", lang, Tree.open(root, ctx.env)).map((l) => ` ${l.text}`);
|
|
346
347
|
const when = humanWhen(input.created, lang);
|
|
@@ -374,9 +375,9 @@ async function fromFile(ctx, run, root, name, file, from) {
|
|
|
374
375
|
if (tree.countLive("person") === 0)
|
|
375
376
|
out(ctx, t("ui.link.new.taken.empty", { name }));
|
|
376
377
|
else
|
|
377
|
-
out(ctx, t(
|
|
378
|
-
if (
|
|
379
|
-
out(ctx, t("ui.link.new.archive"));
|
|
378
|
+
out(ctx, t(takenKey(tree), { name, persons: tree.countLive("person"), families: tree.countLive("family"), sources }));
|
|
379
|
+
if (actsAsArchive(tree))
|
|
380
|
+
out(ctx, t(isArchive(tree) ? "ui.link.new.archive" : "ui.link.new.waiting"));
|
|
380
381
|
else
|
|
381
382
|
await offerChat(ctx, run, tree.lang, root, t("ui.link.new.chat"), t("ui.link.new.say"));
|
|
382
383
|
return true;
|
|
@@ -496,9 +497,8 @@ export async function newFromApp(ctx, runIn, token, openAt, forward, opts = {})
|
|
|
496
497
|
}
|
|
497
498
|
else {
|
|
498
499
|
step = 3;
|
|
499
|
-
// no agent here:
|
|
500
|
-
|
|
501
|
-
archive = true;
|
|
500
|
+
// no agent here: nothing asked, nothing stored — the research waits for an agent, kept as an archive meanwhile
|
|
501
|
+
// (an archive only by the person's choice, the setting mode); once one is installed it goes on as research
|
|
502
502
|
if (root || setUp || ways.length === 0 || ctx.settings.config.mode === "archive")
|
|
503
503
|
continue;
|
|
504
504
|
const pick = suggestedWay(ways, mine, ctx.settings.agentWhere());
|
|
@@ -631,7 +631,7 @@ export async function newFromApp(ctx, runIn, token, openAt, forward, opts = {})
|
|
|
631
631
|
if (tree.countLive("person") === 0)
|
|
632
632
|
out(ctx, t("ui.link.new.taken.empty", { name }));
|
|
633
633
|
else
|
|
634
|
-
out(ctx, t(
|
|
634
|
+
out(ctx, t(takenKey(tree), { name, persons: tree.countLive("person"), families: tree.countLive("family"), sources }));
|
|
635
635
|
// the research as it is now back into the app's window: the same tree, now of the research (not opened: its address
|
|
636
636
|
// said) — an app from 3.9.0 loads it itself right after the hand-over, so nothing is opened a second time (N12: a
|
|
637
637
|
// second tab asking to load the research's version)
|
|
@@ -647,9 +647,13 @@ export async function newFromApp(ctx, runIn, token, openAt, forward, opts = {})
|
|
|
647
647
|
out(ctx, shown.opened ? t("ui.link.new.back") : t("ui.app.url", { url: shown.url ?? "" }));
|
|
648
648
|
}
|
|
649
649
|
// an archive (no agent): what is next is the app's; else the first conversation offered
|
|
650
|
-
if (
|
|
651
|
-
out(ctx, t("ui.link.new.archive"));
|
|
650
|
+
if (actsAsArchive(tree))
|
|
651
|
+
out(ctx, t(isArchive(tree) ? "ui.link.new.archive" : "ui.link.new.waiting"));
|
|
652
652
|
else
|
|
653
653
|
await offerChat(ctx, run, lang, root, t("ui.link.new.chat"), t("ui.link.new.say"));
|
|
654
654
|
return true;
|
|
655
655
|
}
|
|
656
|
+
/** What the tree taken in became: a research, an archive (nothing of an agent said), or a research waiting for its agent. */
|
|
657
|
+
function takenKey(tree) {
|
|
658
|
+
return isArchive(tree) ? "ui.link.new.taken.archive" : actsAsArchive(tree) ? "ui.link.new.taken.waiting" : "ui.link.new.taken";
|
|
659
|
+
}
|