debug: логировать хвост вердикта аналитика и извлечённый JSON (диагностика A3 phase="")
All checks were successful
CI / test (push) Successful in 46s
CI / build-and-package (amd64, linux) (push) Successful in 38s
CI / build-and-package (amd64, windows) (push) Successful in 39s

This commit is contained in:
Hermes
2026-08-17 11:36:49 +05:00
parent 9c5f38698c
commit e9f7017571

View File

@@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
"log"
"strings"
"github.com/kamelion/ratatoskr-go/internal/core"
@@ -11,6 +12,16 @@ import (
"github.com/kamelion/ratatoskr-go/internal/storage"
)
func truncate(s string, n int) string {
if len(s) <= n {
return s
}
if n <= 0 {
return ""
}
return s[len(s)-n:]
}
// OpenCodeRunner — интерфейс для запуска opencode (замена для тестов).
type OpenCodeRunner interface {
Run(ctx context.Context, prompt, cwd, agent, sessionID string) (*opencode.Result, error)
@@ -80,7 +91,12 @@ func (a *Analyst) Decide(ctx context.Context, history []core.Message, draft stor
// 4. парсим вердикт
verdict := opencode.ExtractVerdict(res.Stdout)
log.Printf("analyst: verdict tail: %s", truncate(verdict, 2000))
obj, ok := opencode.ExtractJSON(verdict)
if ok {
b, _ := json.Marshal(obj)
log.Printf("analyst: extracted json: %s", truncate(string(b), 1000))
}
if !ok {
return core.Decision{}, fmt.Errorf("%w: нет JSON в выводе аналитика", ErrDecodeFail)
}