Reduce MCP token usage
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/hjbdev/patterm/internal/mcp"
|
||||
"github.com/hjbdev/patterm/internal/scratchpad"
|
||||
)
|
||||
|
||||
// mkChild builds a Child without starting a PTY. Use sparingly — the
|
||||
@@ -134,6 +135,42 @@ func TestWrapSubAgentPromptEmptyStaysEmpty(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMCPContentCapsPreferRecentStreamBytes(t *testing.T) {
|
||||
got, gotBytes, truncated, dropped := capBytesTail([]byte("abcdefghijklmnop"), 6)
|
||||
if got != "klmnop" || gotBytes != 6 || !truncated || dropped != 10 {
|
||||
t.Fatalf("capBytesTail = (%q, %d, %v, %d)", got, gotBytes, truncated, dropped)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMCPGridCapKeepsHeadAndTail(t *testing.T) {
|
||||
got, gotBytes, truncated, dropped := capTextMiddle("abcdefghijklmnopqrstuvwxyz", 24)
|
||||
if gotBytes != 24 || !truncated || dropped != 2 {
|
||||
t.Fatalf("capTextMiddle metadata = (%d, %v, %d), content %q", gotBytes, truncated, dropped, got)
|
||||
}
|
||||
if !strings.Contains(got, "...[truncated]...") {
|
||||
t.Fatalf("capTextMiddle missing marker: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestScratchpadReadPagesLargeContent(t *testing.T) {
|
||||
t.Setenv("XDG_DATA_HOME", t.TempDir())
|
||||
store, err := scratchpad.Open("test-project")
|
||||
if err != nil {
|
||||
t.Fatalf("scratchpad open: %v", err)
|
||||
}
|
||||
if _, err := store.Write("notes.md", "abcdefghijklmnopqrstuvwxyz", ""); err != nil {
|
||||
t.Fatalf("scratchpad write: %v", err)
|
||||
}
|
||||
h := &toolHost{pads: store}
|
||||
res, err := h.ScratchpadRead(mcp.ScratchpadReadArgs{Name: "notes.md", Offset: 5, MaxBytes: 7})
|
||||
if err != nil {
|
||||
t.Fatalf("ScratchpadRead: %v", err)
|
||||
}
|
||||
if res.Content != "fghijkl" || !res.Truncated || res.NextOffset != 12 || res.TotalBytes != 26 {
|
||||
t.Fatalf("ScratchpadRead result = %+v", res)
|
||||
}
|
||||
}
|
||||
|
||||
func TestHelpLifecycleTopicCoversCleanup(t *testing.T) {
|
||||
resp := helpFor("lifecycle")
|
||||
if resp.Topic != "lifecycle" {
|
||||
|
||||
Reference in New Issue
Block a user