"flush, marker absent",
"echo: done\n",
}, log.Events())
+
require.FileExists(t, filepath.Join(dir, "ran"))
}
start := time.Now()
output := box.shell(ctx, "echo started; sleep 30 & sleep 30")
+
require.Less(t, time.Since(start), 10*time.Second)
require.Equal(t, "started\n\n[interrupted]", output)
}
events []string
}
+// newTestToolbox returns a toolbox with log, an empty chat, and the working
+// directory dir.
+func newTestToolbox(t *testing.T, log ToolLog, dir string) *Toolbox {
+ t.Helper()
+
+ memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now, newFakeSummarizer(), discardLog())
+ require.NoError(t, err)
+
+ t.Cleanup(func() {
+ require.NoError(t, memory.Close())
+ })
+
+ return &Toolbox{
+ log: log,
+ chat: memory,
+ subagents: newTestSubagents(t),
+ workdir: dir,
+ }
+}
+
func (r *ToolRecordingLog) Append(kind, text string) (Message, error) {
r.mutex.Lock()
defer r.mutex.Unlock()
return append([]string(nil), r.events...)
}
-
-// newTestToolbox returns a toolbox with log, an empty chat, and the working
-// directory dir.
-func newTestToolbox(t *testing.T, log ToolLog, dir string) *Toolbox {
- t.Helper()
-
- memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now, newFakeSummarizer(), discardLog())
- require.NoError(t, err)
-
- t.Cleanup(func() {
- require.NoError(t, memory.Close())
- })
-
- return &Toolbox{
- log: log,
- chat: memory,
- subagents: newTestSubagents(t),
- workdir: dir,
- }
-}