"agent/instructions.md": "Keep the instructions.\n",
"agent/telegram-offset.json": "23\n",
}
+
for name, data := range files {
path := filepath.Join(dir, name)
require.NoError(t, os.MkdirAll(filepath.Dir(path), 0o700))
require.Equal(t, childText, restoredText)
}
+func TestBackupKeepsPendingNotificationsAndCompletedRetryReceipts(t *testing.T) {
+ directory := t.TempDir()
+ server := newModelFake(t)
+ test := newDaemonMessageTest(t, directory, server)
+ _, err := test.messages.Notify(&NotifyInput{
+ Source: "check",
+ ID: "completed",
+ Text: "A completed result.",
+ })
+ require.NoError(t, err)
+ require.NoError(t, test.messages.Notifications(test.loops[0]))
+ require.NoError(t, test.loops[0].turn(t.Context()))
+
+ _, err = test.messages.Notify(&NotifyInput{
+ Source: "check",
+ ID: "pending",
+ AgentID: test.agents[1].agent.config.ID,
+ Text: "A pending result.",
+ })
+ require.NoError(t, err)
+
+ clock := newTestClock()
+ whatsapp, _, _ := whatsappStartTest(t, directory, clock)
+ archive := filepath.Join(t.TempDir(), "events.tar.gz")
+ _, err = backupData(t.Context(), directory, archive, whatsapp, test.messages.SnapshotAgents)
+ require.NoError(t, err)
+
+ restored := t.TempDir()
+ require.NoError(t, backupRestore(t.Context(), archive, restored))
+
+ before, err := os.ReadFile(test.messages.path)
+ require.NoError(t, err)
+
+ after, err := os.ReadFile(filepath.Join(restored, daemonAgentDirName, "messages.json"))
+ require.NoError(t, err)
+ require.Equal(t, before, after)
+
+ recovered := newDaemonMessageTest(t, restored, server)
+ require.Len(t, recovered.Queue(t).Pending, 1)
+ require.Equal(t, test.agents[1].agent.config.ID, recovered.Queue(t).Pending[0].TargetID)
+ require.Len(t, recovered.Queue(t).Notifications, 2)
+
+ duplicate, err := recovered.messages.Notify(&NotifyInput{
+ Source: "check",
+ ID: "completed",
+ Text: "A completed result.",
+ })
+ require.NoError(t, err)
+ require.Equal(t, "duplicate", duplicate.Status)
+}
+
func TestBackupRestoresEachChildWithItsOwnState(t *testing.T) {
dir := t.TempDir()
daemonChildConfig(t, dir, "Garden")
Mode: 0o600,
},
)
+
dir := t.TempDir()
err := backupRestore(t.Context(), archive, dir)
require.ErrorContains(t, err, "unsafe archive path")
require.Never(t, func() bool {
return len(backedUp) != 0
}, 50*time.Millisecond, time.Millisecond)
+
release.Do(func() {
close(disconnect.release)
})
whatsapp, _, _ := whatsappStartTest(t, dir, clock)
subagents := newSubagents(filepath.Join(agent.dir, subagentDirName), clock.Now, subagentNameRandom)
- schedules, err := openSchedules(filepath.Join(agent.dir, scheduleFileName), clock.Now, discardLog())
+ schedules, err := openSchedules(filepath.Join(agent.dir, scheduleFileName), "OneChat", clock.Now, discardLog())
require.NoError(t, err)
server := newModelFake(t)