@adonis-agora/agent 0.19.1 → 0.21.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.
- package/CHANGELOG.md +42 -0
- package/README.md +39 -1
- package/dist/assets/spa/assets/index-BYLm0nq8.css +1 -0
- package/dist/assets/spa/assets/index-CkOAJYbh.js +9 -0
- package/dist/assets/spa/index.html +13 -0
- package/dist/configure.d.ts +11 -6
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +12 -6
- package/dist/configure.js.map +1 -1
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +60 -2
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/providers/dashboard_provider.d.ts +55 -0
- package/dist/providers/dashboard_provider.d.ts.map +1 -0
- package/dist/providers/dashboard_provider.js +152 -0
- package/dist/providers/dashboard_provider.js.map +1 -0
- package/dist/src/dashboard/define_config.d.ts +75 -0
- package/dist/src/dashboard/define_config.d.ts.map +1 -0
- package/dist/src/dashboard/define_config.js +56 -0
- package/dist/src/dashboard/define_config.js.map +1 -0
- package/dist/src/dashboard/gate.d.ts +33 -0
- package/dist/src/dashboard/gate.d.ts.map +1 -0
- package/dist/src/dashboard/gate.js +52 -0
- package/dist/src/dashboard/gate.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +20 -0
- package/dist/src/dashboard/index.d.ts.map +1 -0
- package/dist/src/dashboard/index.js +20 -0
- package/dist/src/dashboard/index.js.map +1 -0
- package/dist/src/dashboard/paths.d.ts +40 -0
- package/dist/src/dashboard/paths.d.ts.map +1 -0
- package/dist/src/dashboard/paths.js +99 -0
- package/dist/src/dashboard/paths.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/spi/governance-queries.d.ts +49 -0
- package/dist/src/spi/governance-queries.d.ts.map +1 -1
- package/dist/src/stores/lucid-governance-queries.d.ts +10 -2
- package/dist/src/stores/lucid-governance-queries.d.ts.map +1 -1
- package/dist/src/stores/lucid-governance-queries.js +92 -1
- package/dist/src/stores/lucid-governance-queries.js.map +1 -1
- package/dist/src/testing/in-memory-governance-queries.d.ts +8 -1
- package/dist/src/testing/in-memory-governance-queries.d.ts.map +1 -1
- package/dist/src/testing/in-memory-governance-queries.js +74 -0
- package/dist/src/testing/in-memory-governance-queries.js.map +1 -1
- package/dist/stubs/config/agent.stub +7 -0
- package/package.json +34 -24
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# @adonis-agora/agent
|
|
2
2
|
|
|
3
|
+
## 0.21.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`58783fb`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/58783fb433fd3c641dc9a42b80eaba09f2c9a62b) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - `@adonis-agora/agent` now ships its own governance dashboard — `node ace configure @adonis-agora/agent` registers an embedded `dashboard_provider` that serves the `@adonis-agora/agent-dashboard` SPA straight out of `@adonis-agora/agent`'s own build (`../dashboard/dist/spa` is copied into `dist/assets/spa` at build time), so a new app needs no separate install or provider registration to get the console. Configure it via the same optional `config('agent').dashboard` block as before.
|
|
8
|
+
|
|
9
|
+
This is purely additive: the standalone `@adonis-agora/agent-dashboard` package and its own `agent_dashboard_provider` keep working exactly as before for apps that already install and register it directly — both providers now share one implementation (`@adonis-agora/agent/dashboard`, a new subpath export) so their behavior is byte-for-byte identical. Register only one of the two in a given app; mounting both at the same path throws AdonisJS's "duplicate route" error at boot.
|
|
10
|
+
|
|
11
|
+
`@adonis-agora/agent-dashboard`'s peer dependency floor on `@adonis-agora/agent` moves to `>=0.21.0` (the version that introduces the shared `@adonis-agora/agent/dashboard` export its provider now imports from); already-published `agent-dashboard` versions are unaffected.
|
|
12
|
+
|
|
13
|
+
## 0.20.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- [`4e3a372`](https://github.com/DavideCarvalho/adonis-agent/commit/4e3a372e9ecf53ec4c34bbe31ab6177262b0dcd5) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Add `GET`/`POST /agent/governance/pricing` and a Pricing panel in the console.
|
|
18
|
+
|
|
19
|
+
The `pricingStore` bound to the agent (default-mirrored from a Lucid `store`, or opt-in for other
|
|
20
|
+
backends) was already driving cost accounting for runs, but had no read/write surface of its own —
|
|
21
|
+
operators had to reach for the database directly to see or change a model's per-1M-token rates. The
|
|
22
|
+
two new routes expose `AgentPricingStore.listCurrentPrices()`/`upsertModelPrice()` behind the same
|
|
23
|
+
authenticated + authorized governance gate as every other `/agent/governance/*` route, mounted only
|
|
24
|
+
when a pricing store is bound. The dashboard's new "Pricing" section reads and edits rates through
|
|
25
|
+
them.
|
|
26
|
+
|
|
27
|
+
- [`4e3a372`](https://github.com/DavideCarvalho/adonis-agent/commit/4e3a372e9ecf53ec4c34bbe31ab6177262b0dcd5) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Add a thread governance drill-down: `GET /agent/governance/threads/:id` and a `ThreadDetailView` you
|
|
28
|
+
reach by clicking a row in the console's Recent threads table.
|
|
29
|
+
|
|
30
|
+
`AgentGovernanceQueries` gets a new optional `threadDetail(threadId)` method returning the thread's
|
|
31
|
+
metadata plus a lifetime usage rollup (total tokens, cost, run/message counts) and its most recent
|
|
32
|
+
runs/messages — implemented in both `LucidGovernanceQueries` and `InMemoryGovernanceQueries`. It's
|
|
33
|
+
optional so a third-party or pre-existing adapter that predates it doesn't break: the route responds
|
|
34
|
+
`501` instead of the dashboard hitting a missing endpoint.
|
|
35
|
+
|
|
36
|
+
The Recent threads and Tool calls panels also gain "Load more" pagination instead of a fixed row cap.
|
|
37
|
+
|
|
38
|
+
- [`4e3a372`](https://github.com/DavideCarvalho/adonis-agent/commit/4e3a372e9ecf53ec4c34bbe31ab6177262b0dcd5) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - `RunReliability` (from `GET /agent/governance/reliability`) gains two optional fields: `byAgent` (run
|
|
39
|
+
and failure counts per agent, highest call count first) and `trend` (daily run/failure counts over the
|
|
40
|
+
same range, oldest first) — implemented in both `LucidGovernanceQueries` and
|
|
41
|
+
`InMemoryGovernanceQueries`. Both are optional so an adapter that predates them can keep returning the
|
|
42
|
+
existing shape; the dashboard's Reliability section renders a trend chart and a by-agent breakdown when
|
|
43
|
+
present and stays as before when absent.
|
|
44
|
+
|
|
3
45
|
## 0.19.1
|
|
4
46
|
|
|
5
47
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -187,6 +187,44 @@ const { text } = await runAgentLoop(
|
|
|
187
187
|
)
|
|
188
188
|
```
|
|
189
189
|
|
|
190
|
+
## Dashboard
|
|
191
|
+
|
|
192
|
+
`node ace configure @adonis-agora/agent` also registers an embedded governance console — the
|
|
193
|
+
`@adonis-agora/agent-dashboard` React SPA, bundled straight into `@adonis-agora/agent`'s own `dist/`
|
|
194
|
+
at build time. **No separate install, no separate provider registration.** It mounts at
|
|
195
|
+
`<path>/dashboard` (default `/agent/dashboard`) once `governanceAuthorize` is configured — every panel
|
|
196
|
+
but Quota reads the cross-actor `/agent/governance/*` routes, and those don't exist without that gate
|
|
197
|
+
either, so the console refuses to mount (with a boot warning explaining why) rather than load and 404
|
|
198
|
+
on every panel:
|
|
199
|
+
|
|
200
|
+
```ts
|
|
201
|
+
// config/agent.ts
|
|
202
|
+
export default defineConfig({
|
|
203
|
+
// ...
|
|
204
|
+
governanceAuthorize: (actor) => actor.roles?.includes('ADMIN') ?? false,
|
|
205
|
+
// dashboard: { enabled: true, path: '/agent/dashboard', authorize: (actor) => actor.roles?.includes('ADMIN') ?? false },
|
|
206
|
+
})
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
See [Governance dashboard](./docs/governance/dashboard.mdx) for the full config shape.
|
|
210
|
+
|
|
211
|
+
<details>
|
|
212
|
+
<summary>Standalone install (still supported)</summary>
|
|
213
|
+
|
|
214
|
+
`@adonis-agora/agent-dashboard` also ships as its own installable package with its own provider, for
|
|
215
|
+
apps that want its independent release cadence or that configured it before the embedded provider
|
|
216
|
+
existed:
|
|
217
|
+
|
|
218
|
+
```sh
|
|
219
|
+
pnpm add @adonis-agora/agent-dashboard
|
|
220
|
+
node ace add @adonis-agora/agent-dashboard
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
It reads the SAME `config('agent').dashboard` block. Register only ONE of the two providers — mounting
|
|
224
|
+
both at the same path throws AdonisJS's "duplicate route" error at boot.
|
|
225
|
+
|
|
226
|
+
</details>
|
|
227
|
+
|
|
190
228
|
## Diagnostics
|
|
191
229
|
|
|
192
230
|
Runtime events flow through `@adonis-agora/agent/telescope`'s watcher when
|
|
@@ -203,7 +241,7 @@ or a real model provider.
|
|
|
203
241
|
|
|
204
242
|
- Repo: https://github.com/DavideCarvalho/adonis-agent
|
|
205
243
|
- Changelog: https://github.com/DavideCarvalho/adonis-agent/blob/master/packages/adonis/CHANGELOG.md
|
|
206
|
-
- Companion package: [`@adonis-agora/agent-dashboard`](https://github.com/DavideCarvalho/adonis-agent/tree/master/packages/dashboard)
|
|
244
|
+
- Companion package (also embedded automatically, see [Dashboard](#dashboard) above): [`@adonis-agora/agent-dashboard`](https://github.com/DavideCarvalho/adonis-agent/tree/master/packages/dashboard)
|
|
207
245
|
|
|
208
246
|
## License
|
|
209
247
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--agora-primary: #5a45ff;--agora-primary-soft: hsl(250 74% 51% / .14);--agora-accent: #06b6d4;--bg: hsl(240 10% 6.5%);--panel: hsl(240 9% 9%);--panel-2: hsl(240 9% 11%);--line: hsl(40 30% 82% / .1);--line-soft: hsl(40 30% 82% / .05);--text: hsl(40 28% 92%);--muted: hsl(40 12% 66%);--primary: var(--agora-primary);--primary-fg: hsl(40 40% 96%);--good: #34d399;--warn: #fbbf24;--bad: #f87171;--info: var(--agora-accent)}:root[data-theme=light],:root:not([data-theme=dark]){color-scheme:light}:root[data-theme=dark]{color-scheme:dark}@media(prefers-color-scheme:light){:root:not([data-theme=dark]){--bg: hsl(40 30% 96%);--panel: hsl(40 28% 98%);--panel-2: hsl(40 24% 95%);--line: hsl(240 10% 14% / .12);--line-soft: hsl(240 10% 14% / .06);--text: hsl(240 14% 12%);--muted: hsl(240 6% 42%);--primary-fg: hsl(40 40% 97%)}}:root[data-theme=light]{--bg: hsl(40 30% 96%);--panel: hsl(40 28% 98%);--panel-2: hsl(40 24% 95%);--line: hsl(240 10% 14% / .12);--line-soft: hsl(240 10% 14% / .06);--text: hsl(240 14% 12%);--muted: hsl(240 6% 42%);--primary-fg: hsl(40 40% 97%)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased}.mono{font-family:ui-monospace,JetBrains Mono,SF Mono,Menlo,monospace}.tnum{font-variant-numeric:tabular-nums}.app-bg{position:fixed;inset:0;z-index:0;pointer-events:none;background-image:radial-gradient(900px 420px at 82% -10%,hsl(250 74% 51% / .12),transparent 70%),radial-gradient(700px 360px at 8% -12%,hsl(190 90% 50% / .06),transparent 70%);opacity:.9}.shell{position:relative;z-index:1;max-width:1180px;margin:0 auto;padding:28px 24px 64px}.masthead{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:22px}.brand{display:flex;align-items:center;gap:12px}.brand-mark{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;color:var(--primary-fg);background:linear-gradient(140deg,var(--agora-primary),#8b78ff);box-shadow:0 6px 20px #4426df59;font-weight:700}.brand h1{font-size:17px;margin:0;letter-spacing:-.01em}.brand p{margin:1px 0 0;font-size:12px;color:var(--muted)}.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:20px}.tab{appearance:none;border:1px solid var(--line);background:var(--panel);color:var(--muted);border-radius:999px;padding:7px 14px;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:7px;transition:color .15s,border-color .15s,background .15s}.tab:hover{color:var(--text)}.tab[aria-selected=true]{color:var(--primary-fg);background:var(--primary);border-color:var(--primary)}.controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.range-input{background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:6px 9px;font-size:12px;font-family:inherit}.icon-btn{appearance:none;border:1px solid var(--line);background:var(--panel);color:var(--muted);border-radius:8px;width:34px;height:32px;cursor:pointer;display:grid;place-items:center}.icon-btn:hover{color:var(--text)}.panel{background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line);border-radius:14px;padding:18px}.grid{display:grid;gap:16px}.grid.cols-3{grid-template-columns:repeat(3,1fr)}.grid.cols-2{grid-template-columns:repeat(2,1fr)}.grid.stat-4{grid-template-columns:repeat(4,1fr)}@media(max-width:900px){.grid.cols-3,.grid.cols-2,.grid.stat-4{grid-template-columns:repeat(2,1fr)}}@media(max-width:560px){.grid.cols-3,.grid.cols-2,.grid.stat-4{grid-template-columns:1fr}}.stat .label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:8px}.stat .value{font-size:24px;font-weight:600;letter-spacing:-.02em}.stat .sub{font-size:12px;color:var(--muted);margin-top:4px}.section-title{display:flex;align-items:center;justify-content:space-between;margin:0 0 14px;gap:12px}.section-title h2{font-size:14px;margin:0;letter-spacing:.01em}.section-title .hint{font-size:12px;color:var(--muted)}.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:0 10px 10px;border-bottom:1px solid var(--line)}.table td{padding:10px;border-bottom:1px solid var(--line-soft);vertical-align:middle}.table tr:last-child td{border-bottom:none}.table .num{text-align:right}.table-wrap{overflow-x:auto}.bar{height:6px;border-radius:999px;background:var(--line);overflow:hidden;min-width:60px}.bar>span{display:block;height:100%;border-radius:999px;background:var(--primary)}.legend{display:flex;flex-direction:column;gap:8px;font-size:12px}.legend .row{display:flex;align-items:center;gap:8px}.swatch{width:10px;height:10px;border-radius:3px;flex:none}.legend .name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pill{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font-size:11px;border:1px solid var(--line);color:var(--muted)}.dot{width:7px;height:7px;border-radius:999px;background:currentColor;display:inline-block}.s-completed,.s-ok,.s-success,.s-approved{color:var(--good)}.s-running,.s-pending,.s-pending_approval,.s-awaiting_approval{color:var(--info)}.s-failed,.s-error,.s-rejected,.s-forbidden{color:var(--bad)}.s-cancelled,.s-canceled{color:var(--warn)}.btn{appearance:none;border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:8px;padding:6px 12px;font-size:12px;font-family:inherit;cursor:pointer;transition:color .15s,border-color .15s,background .15s}.btn:hover:not(:disabled){border-color:var(--muted)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.approve{color:var(--good);border-color:color-mix(in srgb,var(--good) 40%,var(--line))}.btn.reject{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 40%,var(--line))}.rowbtns{display:inline-flex;gap:6px;justify-content:flex-end}.table tr.clickable{cursor:pointer}.table tr.clickable:hover td{background:var(--panel-2)}.th-sort{appearance:none;background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer}.th-sort:hover{color:var(--text)}.warnnum{color:var(--warn)}.msg{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--panel-2)}.msg-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.msg-body{font-size:13px;white-space:pre-wrap;word-break:break-word}.empty{color:var(--muted);font-size:13px;text-align:center;padding:26px 10px}.err{color:var(--bad);font-size:13px;padding:20px 10px;text-align:center}.skeleton{border-radius:8px;background:linear-gradient(90deg,var(--line-soft),var(--line),var(--line-soft));background-size:200% 100%;animation:shimmer 1.3s ease-in-out infinite;height:14px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.stack{display:flex;flex-direction:column;gap:16px}.muted{color:var(--muted)}.right{text-align:right}.chart-svg{width:100%;height:auto;display:block}.foot{margin-top:26px;font-size:11px;color:var(--muted);text-align:center}
|