]> git.giacomolli.uk - onechat/blobdiff - prompt_test.go
Check the width of comment lines
[onechat] / prompt_test.go
index 0aa9adbd205e5213c46c81e2d54e048b5b5a7b79..888057f998e3513bcb62822b0e0348ce48c82bff 100644 (file)
@@ -18,6 +18,7 @@ func TestPromptNamesTheAgent(t *testing.T) {
        require.Contains(t, text, `- work: an agent's report, starting "[Name]"`)
        require.Contains(t, text, "- zoom(id, 1) gives message id whole\n- zoom(\"Name\") gives an agent's whole chat\n")
        require.NotContains(t, text, promptName)
        require.Contains(t, text, `- work: an agent's report, starting "[Name]"`)
        require.Contains(t, text, "- zoom(id, 1) gives message id whole\n- zoom(\"Name\") gives an agent's whole chat\n")
        require.NotContains(t, text, promptName)
+       require.Contains(t, text, "[image FILE]")
 
        // The old agent name is built from parts, so the source does not spell
        // it.
 
        // The old agent name is built from parts, so the source does not spell
        // it.
@@ -26,7 +27,7 @@ func TestPromptNamesTheAgent(t *testing.T) {
 
 func TestPromptLeavesOutAbsentFeatures(t *testing.T) {
        text := prompt("Ada", "/AGENT/instructions.md", "")
 
 func TestPromptLeavesOutAbsentFeatures(t *testing.T) {
        text := prompt("Ada", "/AGENT/instructions.md", "")
-       for _, absent := range []string{"image", "computer", "device", "instructions at the end"} {
+       for _, absent := range []string{"computer", "device", "instructions at the end"} {
                require.NotContains(t, text, absent)
        }
 }
                require.NotContains(t, text, absent)
        }
 }
@@ -50,7 +51,7 @@ func TestSubagentPromptNamesTheAgentAndEndsWithTheInstructions(t *testing.T) {
        require.True(t, strings.HasSuffix(text, "\n\n# The user's instructions\n\nI am Lena."))
        require.NotContains(t, text, promptName)
 
        require.True(t, strings.HasSuffix(text, "\n\n# The user's instructions\n\nI am Lena."))
        require.NotContains(t, text, promptName)
 
-       for _, absent := range []string{"image", "computer", "device", "Compaction"} {
+       for _, absent := range []string{"computer", "device", "Compaction"} {
                require.NotContains(t, text, absent)
        }
 
                require.NotContains(t, text, absent)
        }
 
@@ -128,7 +129,7 @@ func TestProbePromptKeepsTheInstructionsPathStable(t *testing.T) {
 
 func TestAgentToolsAreStrictAndStable(t *testing.T) {
        tools := promptTools()
 
 func TestAgentToolsAreStrictAndStable(t *testing.T) {
        tools := promptTools()
-       require.Equal(t, []string{"zoom", "date", "shell", "read", "write", "edit", "spawn", "agent_create", "tell", "whatsapp_find", "whatsapp_send", "schedule_set", "schedule_list", "schedule_remove"}, promptToolNames(tools))
+       require.Equal(t, []string{"zoom", "date", "shell", "read", "write", "edit", "spawn", "agent_create", "tell", "image_show", "whatsapp_find", "whatsapp_send", "route", "unroute", "routes", "schedule_set", "schedule_list", "schedule_remove"}, promptToolNames(tools))
        require.Equal(t, []string{"zoom", "date", "shell", "read", "write", "edit"}, promptToolNames(promptSubagentTools()))
 
        for _, tool := range tools {
        require.Equal(t, []string{"zoom", "date", "shell", "read", "write", "edit"}, promptToolNames(promptSubagentTools()))
 
        for _, tool := range tools {
@@ -156,6 +157,7 @@ func TestRootPromptDefinesChildRoutingAndConsent(t *testing.T) {
        require.Contains(t, text, `Use tell for children and subagents, and zoom("Name") for their memory.`)
        require.Contains(t, text, "Pass area messages from mixed chats to the right child with sender, date, and\nwords.")
        require.Contains(t, text, "Never send a WhatsApp reply drafted by a child without the user's\nagreement.")
        require.Contains(t, text, `Use tell for children and subagents, and zoom("Name") for their memory.`)
        require.Contains(t, text, "Pass area messages from mixed chats to the right child with sender, date, and\nwords.")
        require.Contains(t, text, "Never send a WhatsApp reply drafted by a child without the user's\nagreement.")
+       require.Contains(t, text, "Set or remove a route only after the user agrees.")
        require.Contains(t, text, "You act again when a message or your own schedule wakes you.")
        require.True(t, strings.HasSuffix(text, "Keep replies short."))
 
        require.Contains(t, text, "You act again when a message or your own schedule wakes you.")
        require.True(t, strings.HasSuffix(text, "Keep replies short."))
 
@@ -164,3 +166,14 @@ func TestRootPromptDefinesChildRoutingAndConsent(t *testing.T) {
        require.NotContains(t, child, "Use agent_create")
        require.Contains(t, child, "Send nothing to WhatsApp. Draft replies in your report instead")
 }
        require.NotContains(t, child, "Use agent_create")
        require.Contains(t, child, "Send nothing to WhatsApp. Draft replies in your report instead")
 }
+
+func TestRootPromptKeepsImageConsentAndChildForwardingRules(t *testing.T) {
+       text := prompt("Ada", "/AGENT/instructions.md", "")
+       require.Contains(t, text, "Use image_show or whatsapp_send with an image only on the user's request.")
+       require.Contains(t, text, "Pass an image to a child with an [image FILE] line in tell.")
+
+       child := promptChild("House", "Ada", "Keep house plans.", "/CHILD/instructions.md", "")
+       require.Contains(t, child, "Send nothing to WhatsApp. Draft replies in your report instead")
+       require.NotContains(t, promptToolNames(promptSubagentTools()), "image_show")
+       require.NotContains(t, promptToolNames(promptSubagentTools()), "whatsapp_send")
+}