]> git.giacomolli.uk - onechat/blobdiff - README.rst
Import WhatsApp history into a child
[onechat] / README.rst
index 36db09c371132db8ddb1455b901533b5935521dc..7ca3d74315c900dd4a41e61dfab3b03ef8ba9211 100644 (file)
@@ -497,9 +497,10 @@ the messages for the linked device and send them at the next connection.
 They keep them only for a limited time, so a long stop can lose
 messages. These messages form batches by their original times, as live
 messages do. The daemon waits for the end of this catch-up, or one
-minute at the most, and then gives all its batches to the agent in one
-turn, not one turn for each chat. The batches of ``whatsapp/state.json``
-at the start wait for the first catch-up in the same way.
+minute at the most, and then gives all its unrouted batches to the root
+in one turn, not one turn for each chat. Routed batches wake their
+child. The batches of ``whatsapp/state.json`` at the start wait for the
+first catch-up in the same way.
 
 The agent finds a chat with the tool ``whatsapp_find``: it gives the
 contacts and the groups whose name holds a text, with no regard to case
@@ -524,7 +525,11 @@ The root manages source routes with ``route(source, agent)``,
 source is ``whatsapp:CHAT-ID``, with the ID from ``whatsapp_find`` or a
 ``[WhatsApp]`` message, and the agent must be its child. The root keeps
 the map in ``agent/routes.json`` with mode 0600. Children and subagents
-have no route tools. There is no command to change routes.
+have no route tools. There is no command to change routes. Each routed
+batch enters only its child's log and wakes it, including a group batch
+with no mention. The durable agent queue prevents a second log entry
+after a restart. An unrouted source or a missing child uses the root. A
+queued batch whose child is removed while stopped goes to the root.
 
 When the session holds a linked device, the daemon connects at its
 start. If the first connection fails, it tries again after 2 seconds,
@@ -551,21 +556,34 @@ first:
 
    onechat import -n CHAT.zip OTHER.zip
    onechat import CHAT.zip OTHER.zip
-
-``-n`` makes no model call and prints the chats, chat-day batches, local
-dates, cutoff, text bytes, merged message count, and estimated calls.
-The import keeps multiline text, system lines, and omitted-media
-markers. It maps the session's profile name to ``You``. Without that
-name, it keeps the senders as written and says so in the plan. An exact,
-unambiguous local contact or batch name supplies the chat ID when known.
-No network lookup is made.
+   onechat import -n --agent House CHAT.zip OTHER.zip
+   onechat import --agent House CHAT.zip OTHER.zip
+
+The target is the root unless ``--agent NAME`` selects an existing
+direct child. A missing child is refused. The rebuild uses the target's
+log, prompt, cache key, and usage records. The root keeps its history
+when the target is a child. An import or plan is refused while the
+target has pending agent deliveries. Start the daemon and let those
+turns finish before you stop it and try again. This keeps their saved
+log IDs valid.
+
+``-n`` makes no model call and prints the target name, chats, chat-day
+batches, local dates, cutoffs, text bytes, merged message count, and
+estimated calls. The import keeps multiline text, system lines, and
+omitted-media markers. It maps the session's profile name to ``You``.
+Without that name, it keeps the senders as written and says so in the
+plan. An exact, unambiguous local contact or batch name supplies the
+chat ID when known. No network lookup is made.
 
 Each chat and local day becomes one work message marked ``(imported)``.
-Only messages before the first message of the earliest live WhatsApp
-batch enter the import. Live times have minute precision, so the cutoff
-excludes that whole minute. A chat-day already imported is skipped.
-Overlapping chat-days in the supplied ZIPs are refused. Review the
-exports before import: their text goes to the model as chat history.
+For each chat, the cutoff is the first message time of its earliest live
+WhatsApp batch across the root and target logs. Only messages before
+that cutoff enter the import. Live times have minute precision, so the
+cutoff excludes that whole minute. A chat-day already imported into the
+target is skipped. An imported day held only by the root does not skip
+that day for a child. Overlapping chat-days in the supplied ZIPs are
+refused. Review the exports before import: their text goes to the model
+as chat history.
 
 The import merges the full log in date order and builds its tree with
 real compactor calls, the agent prompt, and the agent cache key. It uses
@@ -574,9 +592,11 @@ the same usage report. Its estimate is about 1.3 calls per merged
 message, not a cost guarantee. A stopped or failed run leaves the agent
 unchanged. A new run starts over. Success keeps the other agent files
 and renames the old directory to ``agent-backup-TIMESTAMP`` before it
-installs the new one. Keep the backup until the new memory is checked,
-then start the daemon. Message IDs change to their positions in the
-merged log.
+installs the new one. A child's staging directory and backup stay in the
+root agent directory, outside ``children/``. Its backup is
+``NAME-backup-TIMESTAMP``. Keep the backup until the new memory is
+checked, then start the daemon. Message IDs change to their positions in
+the merged log.
 
 ***********
  Schedules