@adonis-agora/agent 0.30.2 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/dist/assets/spa/assets/{index-Cfi3g3b2.js → index-3Q2m5_Ax.js} +1 -1
  3. package/dist/assets/spa/index.html +1 -1
  4. package/dist/providers/agent_provider.d.ts.map +1 -1
  5. package/dist/providers/agent_provider.js +17 -7
  6. package/dist/providers/agent_provider.js.map +1 -1
  7. package/dist/src/index.d.ts +3 -2
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +2 -2
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/pagination.d.ts +63 -0
  12. package/dist/src/pagination.d.ts.map +1 -0
  13. package/dist/src/pagination.js +16 -0
  14. package/dist/src/pagination.js.map +1 -0
  15. package/dist/src/rag/qdrant-store.d.ts +48 -6
  16. package/dist/src/rag/qdrant-store.d.ts.map +1 -1
  17. package/dist/src/rag/qdrant-store.js +77 -24
  18. package/dist/src/rag/qdrant-store.js.map +1 -1
  19. package/dist/src/spi/governance-queries.d.ts +28 -13
  20. package/dist/src/spi/governance-queries.d.ts.map +1 -1
  21. package/dist/src/stores/lucid-governance-queries.d.ts +5 -2
  22. package/dist/src/stores/lucid-governance-queries.d.ts.map +1 -1
  23. package/dist/src/stores/lucid-governance-queries.js +11 -5
  24. package/dist/src/stores/lucid-governance-queries.js.map +1 -1
  25. package/dist/src/telescope/agent-governance-providers.js +2 -2
  26. package/dist/src/telescope/agent-governance-providers.js.map +1 -1
  27. package/dist/src/testing/in-memory-governance-queries.d.ts.map +1 -1
  28. package/dist/src/testing/in-memory-governance-queries.js +7 -3
  29. package/dist/src/testing/in-memory-governance-queries.js.map +1 -1
  30. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,119 @@
1
1
  # @adonis-agora/agent
2
2
 
3
+ ## 0.31.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#111](https://github.com/DavideCarvalho/adonis-agora-agent/pull/111) [`4c9bfe2`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/4c9bfe2cae0e750d778dfaffd95118df122b6afc) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - **BREAKING** — pagination agora fala a MESMA interface de cursor de `@adonis-agora/filter`, em todo o ecossistema Agora
8
+
9
+ Cada `@adonis-agora/*` paginava do seu jeito. Agora todos falam o `CursorParams`/`CursorPage` do
10
+ `@adonis-agora/filter`: `{ after?, first? }` entra, `{ items, nextCursor, prevCursor, hasNext, hasPrev }`
11
+ sai. Um consumidor que aprende a paginar uma lib paginou todas.
12
+
13
+ Os tipos vivem em `@adonis-agora/agent` (`CursorPage`, `CursorParams`, exportados da raiz) e espelham os do
14
+ `@adonis-agora/filter` **estruturalmente** — sem dependência entre os pacotes, por convenção do
15
+ ecossistema. O `-dashboard` carrega a mesma declaração no seu `client/types.ts`, como já fazia com todas as
16
+ outras wire shapes.
17
+
18
+ **Forward-only, e isso está no tipo.** Os dois backends aqui só sabem avançar — o `scroll` do Qdrant
19
+ devolve um `next_page_offset` opaco e nenhum token de volta, e o read-model de runs pagina com um cursor
20
+ opaco pra frente. Então `CursorParams` NÃO tem `before`/`last` (um parâmetro que compila e não faz nada é
21
+ pior que um que não existe), e todo `CursorPage` daqui sai com `prevCursor: null` / `hasPrev: false`. Esses
22
+ dois campos ficam porque o ponto é ser a MESMA forma do `@adonis-agora/filter`: quem escreveu contra um
23
+ renderiza o outro sem condicional, e uma superfície que ganhar paginação pra trás preenche os campos sem
24
+ quebrar ninguém. São constantes, não bug.
25
+
26
+ Como é 0.x, o breaking sai como **minor** (convenção semver de 0.x).
27
+
28
+ ### 1. `QdrantStore.scrollChunks` — uma PÁGINA por chamada, não a coleção inteira
29
+
30
+ `scrollChunks` drenava o cursor até o fim e devolvia um array. Agora é uma superfície paginada de verdade:
31
+ uma ida de rede, `first` é o `limit` do scroll, `nextCursor` embrulha o `next_page_offset` do Qdrant em
32
+ base64url — **opaco**, justamente pra ninguém passar a depender de ele ser um id de ponto. Devolver esse
33
+ cursor adulterado agora falha com erro nomeado em vez de rebobinar em silêncio pra primeira página (um
34
+ scroll que rebobina reprocessa chunks que um painel de deleção já tratou).
35
+
36
+ `pageSize` virou `first` (mesmo default, 256) e `maxPages` sumiu: com uma página por chamada, o teto de
37
+ páginas é o laço de quem chama. O `MAX_SCROLL_PAGES` interno segue guardando os scrolls que a store ainda
38
+ drena sozinha (`listDocuments`, `listDocumentIds`, `updateMetadata`).
39
+
40
+ ```ts
41
+ // antes — drenava tudo, guardado por maxPages
42
+ const payloads = await store.scrollChunks({ filter, payloadKeys: ['id'], pageSize: 256 });
43
+
44
+ // depois — uma página; drenar é um laço seu sobre nextCursor
45
+ const page = await store.scrollChunks({ filter, payloadKeys: ['id'], first: 256 });
46
+ page.items; // Record<string, unknown>[]
47
+
48
+ const all: Record<string, unknown>[] = [];
49
+ let after: string | undefined;
50
+ do {
51
+ const p = await store.scrollChunks({ filter, ...(after ? { after } : {}) });
52
+ all.push(...p.items);
53
+ after = p.nextCursor ?? undefined;
54
+ } while (after !== undefined);
55
+ ```
56
+
57
+ `facetValues(field, { limit })` virou `facetValues(field, { first })` — mesmo default (200), só o nome do
58
+ tamanho de página alinhado ao `CursorParams`. Ele **não** virou `CursorPage`, de propósito: o endpoint
59
+ `/facet` do Qdrant devolve os top-`first` valores de uma vez e não emite token de continuação nenhum, então
60
+ um envelope de página aqui anunciaria um `nextCursor` que só poderia ser `null` pra sempre. Facet é
61
+ agregado com teto; `scrollChunks` é a superfície paginada. `countChunks` (um número) segue igual.
62
+
63
+ `PgVectorStore`/`MemoryVectorStore` não precisaram mudar: `scrollChunks`/`facetValues`/`countChunks` são
64
+ capacidades do Qdrant, não estão na interface `VectorStore` que as três stores implementam, então não há
65
+ como as duas formas divergirem.
66
+
67
+ ### 2. `AgentGovernanceQueries.listRuns` — mesmos cursores, nomes do ecossistema
68
+
69
+ Já era baseado em cursor, só com nomes próprios. `ListRunsResult` agora é literalmente
70
+ `CursorPage<RunSummaryRow>`: as linhas saem em **`items`** (não `runs`), com `prevCursor`/`hasPrev`
71
+ constantes.
72
+
73
+ ```ts
74
+ // antes
75
+ const page = await gov.listRuns({ status: 'failed', limit: 50, cursor: prev });
76
+ page.runs;
77
+ page.nextCursor;
78
+
79
+ // depois
80
+ const page = await gov.listRuns({ status: 'failed', first: 50, after: prev });
81
+ page.items;
82
+ page.nextCursor; // + prevCursor: null, hasNext, hasPrev: false
83
+ ```
84
+
85
+ Quem implementa `AgentGovernanceQueries` por fora precisa renomear `runs` → `items` e devolver os três
86
+ campos novos. As duas implementações que este pacote traz (`LucidGovernanceQueries` e a
87
+ `InMemoryGovernanceQueries` de teste) já vieram atualizadas.
88
+
89
+ **Rota HTTP** — `GET /agent/governance/runs` troca a query string e o corpo:
90
+
91
+ ```diff
92
+ - GET /agent/governance/runs?limit=50&cursor=<opaco>
93
+ - { "runs": [...], "nextCursor": "<opaco>" }
94
+ + GET /agent/governance/runs?first=50&after=<opaco>
95
+ + { "items": [...], "nextCursor": "<opaco>", "prevCursor": null, "hasNext": true, "hasPrev": false }
96
+ ```
97
+
98
+ O `?limit=` continua existindo — só nas listas com TETO, que não são paginadas por cursor
99
+ (`recentToolCalls`, `recentThreads`, a caixa de aprovações). A regra é essa: superfície com cursor fala
100
+ `after`/`first`; top-N com teto fala `limit`.
101
+
102
+ **Cliente do console** — `AgentClient.listRuns({ cursor, limit })` virou `listRuns({ after, first })` e
103
+ devolve `CursorPage`. O provider do Telescope (`agent.runs.recent`) e o hook `useRuns` da SPA já
104
+ acompanham; a UI do console não muda.
105
+
106
+ - [#112](https://github.com/DavideCarvalho/adonis-agora-agent/pull/112) [`3b7c240`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/3b7c2403d6ee37555e40e18d02c0114962f90e95) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Require zod 4: the optional `zod` peer narrows from `^3.23.0 || ^4.0.0` to `^4.0.0`.
107
+
108
+ The zod 3 half was a promise this package could not keep. `@adonis-agora/durable` — which agent
109
+ peers on — types its public step API with zod 4 (`import type { z } from 'zod'`), and a zod 3 schema
110
+ does **not** satisfy zod 4's `ZodType`: an app on zod 3 was already broken against the published
111
+ ecosystem, it just failed later and less clearly. Narrowing makes the manifest honest.
112
+
113
+ The peer stays **optional** — nothing changes for an app that never passes a zod schema. If you are
114
+ still on zod 3, upgrade to zod 4 (`z.object`/`z.string()`/`z.infer`, the surface agent uses, is
115
+ unchanged across the major).
116
+
3
117
  ## 0.30.2
4
118
 
5
119
  ### Patch Changes