From 5b43da4564cf25d509a93fc07a12487ceb309cd0 Mon Sep 17 00:00:00 2001 From: "ki.sagidullin" Date: Mon, 24 Aug 2026 12:14:19 +0500 Subject: [PATCH] =?UTF-8?q?feat(opencode):=20=D0=B2=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B8=20=D1=81=D0=B5=D1=81=D1=81=D0=B8=D0=B8=20=E2=80=94?= =?UTF-8?q?=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=20=D0=BD=D0=B0=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20(order=3Dasc?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/opencode/client.go | 7 +++++++ internal/opencode/client_test.go | 9 +++++++++ internal/opencode/runner.go | 1 + 3 files changed, 17 insertions(+) diff --git a/internal/opencode/client.go b/internal/opencode/client.go index 9b86cba..34aba0a 100644 --- a/internal/opencode/client.go +++ b/internal/opencode/client.go @@ -30,6 +30,13 @@ type Client struct { http *http.Client // единый клиент: все операции быстрые (нет блокирующего Send) } +// SessionMessagesURL возвращает URL для просмотра сообщений сессии в браузере. +// Сортировка по времени: сначала ранние (order=asc). Без credentials — пароль +// в лог не попадает. +func SessionMessagesURL(baseURL, sessionID string) string { + return baseURL + "/api/session/" + sessionID + "/message?order=asc" +} + // ClientErr — классы ошибок клиента. type ClientErr struct { Op string // "connect" | "create" | "prompt" | "messages" | "active" | "abort" diff --git a/internal/opencode/client_test.go b/internal/opencode/client_test.go index 6dde381..b560a2b 100644 --- a/internal/opencode/client_test.go +++ b/internal/opencode/client_test.go @@ -354,4 +354,13 @@ func TestClientErr_Unwrap(t *testing.T) { if !errors.As(ce, &target) { t.Fatal("expected *ClientErr") } +} + +// TestSessionMessagesURL — ссылка на сообщения сессии, сортировка по времени (сначала ранние). +func TestSessionMessagesURL(t *testing.T) { + got := SessionMessagesURL("http://127.0.0.1:4101", "sess-abc") + want := "http://127.0.0.1:4101/api/session/sess-abc/message?order=asc" + if got != want { + t.Errorf("SessionMessagesURL() = %q, want %q", got, want) + } } \ No newline at end of file diff --git a/internal/opencode/runner.go b/internal/opencode/runner.go index 35658a9..725c01f 100644 --- a/internal/opencode/runner.go +++ b/internal/opencode/runner.go @@ -84,6 +84,7 @@ func (r *Runner) Run(ctx context.Context, prompt, cwd, agent, sessionID string) return nil, fmt.Errorf("opencode: create session: %w", err) } r.logf("opencode(%s) session=%s на %s", agent, sid, srv.Addr()) + r.logf("opencode(%s) сообщения сессии: %s", agent, SessionMessagesURL(srv.Addr(), sid)) } return r.awaitVerdict(ctx, c, sid, agent, prompt)