mirror of
https://github.com/lukaszraczylo/filepuff-mcp.git
synced 2026-06-05 22:23:50 +00:00
5ad975ee7a
* v2.0: token-optimization overhaul Additive (backward-compatible flags): - file_read: skeleton mode, strip (imports/license/block_comments), compact_line_numbers, 8-char etag with prefix-match compat - ast_query: format=verbose|compact|location, pagination cursor - file_search: cluster mode, pagination cursor - lsp_query (references): compact output Breaking (v2): - Preambles removed; opt-in verbose=true restores - edit_apply: response=count|diff|none, default count - ping tool removed - symbol_at/find_definition/find_references merged into lsp_query - Tool descriptions trimmed -83%, help moved to filepuff://help/<tool> - Batch file_read dedups by etag Protocol: - ResourceLink returned for file_read >64 KiB (force_inline override) - OnAfterInitialize hook reads capabilities.experimental.filepuff for session defaults (default_format, default_max_results, default_cluster, compact_refs, line_numbers, resource_link_threshold) * fix: drop --max-total-count from ripgrep args The flag does not exist in stable ripgrep (confirmed up to 15.1.0 -- "unrecognized flag --max-total-count, similar flags that are available: --max-count"). Every file_search call failed on hosts with stock rg. --max-count is per-file, not a drop-in replacement, so rely on the in-process truncation in parseOutput that was already the documented safety net.
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package cursor
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestEncodeDecodRoundTrip(t *testing.T) {
|
|
hash := HashParams(map[string]string{"a": "1", "b": "2"})
|
|
|
|
encoded := Encode(42, hash)
|
|
if encoded == "" {
|
|
t.Fatal("Encode returned empty string")
|
|
}
|
|
|
|
offset, gotHash, err := Decode(encoded)
|
|
if err != nil {
|
|
t.Fatalf("Decode error: %v", err)
|
|
}
|
|
if offset != 42 {
|
|
t.Errorf("offset: got %d, want 42", offset)
|
|
}
|
|
if gotHash != hash {
|
|
t.Errorf("hash mismatch: got %s, want %s", gotHash, hash)
|
|
}
|
|
}
|
|
|
|
func TestDecodeInvalid(t *testing.T) {
|
|
_, _, err := Decode("!!!notbase64!!!")
|
|
if err == nil {
|
|
t.Error("expected error for invalid base64, got nil")
|
|
}
|
|
}
|
|
|
|
func TestDecodeCorruptPayload(t *testing.T) {
|
|
import64 := "bm90anNvbg" // "notjson" in base64
|
|
_, _, err := Decode(import64)
|
|
if err == nil {
|
|
t.Error("expected error for corrupt payload, got nil")
|
|
}
|
|
}
|
|
|
|
func TestHashParamsDeterministic(t *testing.T) {
|
|
// Same params regardless of insertion order
|
|
h1 := HashParams(map[string]string{"z": "last", "a": "first"})
|
|
h2 := HashParams(map[string]string{"a": "first", "z": "last"})
|
|
if h1 != h2 {
|
|
t.Errorf("hash not deterministic: %s != %s", h1, h2)
|
|
}
|
|
}
|
|
|
|
func TestHashParamsDifferentForDifferentQueries(t *testing.T) {
|
|
h1 := HashParams(map[string]string{"pattern": "foo"})
|
|
h2 := HashParams(map[string]string{"pattern": "bar"})
|
|
if h1 == h2 {
|
|
t.Error("different queries should produce different hashes")
|
|
}
|
|
}
|