From 9ad70776f31bccaad62a76cfe29b97a1de7e2bb6 Mon Sep 17 00:00:00 2001 From: Kujtim Hoxha Date: Mon, 20 Oct 2025 08:47:30 +0200 Subject: [PATCH] wip: memorize endpoint --- internal/hyper/client.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/internal/hyper/client.go b/internal/hyper/client.go index f05ec67ad1eb989e1d1a32601fcf3eea2cae4d6f..dcc7f772daa5fa1869384cd305939c89f9caeb42 100644 --- a/internal/hyper/client.go +++ b/internal/hyper/client.go @@ -134,6 +134,43 @@ func (c *Client) Memorize(ctx context.Context, projectID uuid.UUID, msgs []fanta return echoed, nil } +// ProjectMemories fetches memory bullets for a project using optional query, type filters and limit. +func (c *Client) ProjectMemories(ctx context.Context, projectID uuid.UUID, query string, types []string, limit int) ([]string, error) { + endpoint := c.BaseURL.JoinPath("api/v1", "projects", projectID.String(), "memories") + q := endpoint.Query() + if strings.TrimSpace(query) != "" { + q.Set("q", query) + } + for _, t := range types { + if strings.TrimSpace(t) != "" { + q.Add("type", t) + } + } + if limit > 0 { + q.Set("limit", fmt.Sprintf("%d", limit)) + } + endpoint.RawQuery = q.Encode() + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.String(), nil) + if err != nil { + return nil, err + } + c.addAuth(req) + resp, err := c.http().Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return nil, fmt.Errorf("project memories: http %d", resp.StatusCode) + } + var bullets []string + if err := json.NewDecoder(resp.Body).Decode(&bullets); err != nil { + return nil, err + } + return bullets, nil +} + func (c *Client) http() *http.Client { if c.HTTPClient != nil { return c.HTTPClient