@adonis-agora/agent 0.20.0 → 0.22.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 (66) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +39 -1
  3. package/dist/assets/spa/assets/index-D8pLS_sd.css +1 -0
  4. package/dist/assets/spa/assets/index-DoUZ23yb.js +9 -0
  5. package/dist/assets/spa/index.html +13 -0
  6. package/dist/configure.d.ts +11 -6
  7. package/dist/configure.d.ts.map +1 -1
  8. package/dist/configure.js +12 -6
  9. package/dist/configure.js.map +1 -1
  10. package/dist/providers/agent_provider.d.ts.map +1 -1
  11. package/dist/providers/agent_provider.js +6 -0
  12. package/dist/providers/agent_provider.js.map +1 -1
  13. package/dist/providers/dashboard_provider.d.ts +55 -0
  14. package/dist/providers/dashboard_provider.d.ts.map +1 -0
  15. package/dist/providers/dashboard_provider.js +152 -0
  16. package/dist/providers/dashboard_provider.js.map +1 -0
  17. package/dist/src/dashboard/define_config.d.ts +75 -0
  18. package/dist/src/dashboard/define_config.d.ts.map +1 -0
  19. package/dist/src/dashboard/define_config.js +56 -0
  20. package/dist/src/dashboard/define_config.js.map +1 -0
  21. package/dist/src/dashboard/gate.d.ts +33 -0
  22. package/dist/src/dashboard/gate.d.ts.map +1 -0
  23. package/dist/src/dashboard/gate.js +52 -0
  24. package/dist/src/dashboard/gate.js.map +1 -0
  25. package/dist/src/dashboard/index.d.ts +20 -0
  26. package/dist/src/dashboard/index.d.ts.map +1 -0
  27. package/dist/src/dashboard/index.js +20 -0
  28. package/dist/src/dashboard/index.js.map +1 -0
  29. package/dist/src/dashboard/paths.d.ts +40 -0
  30. package/dist/src/dashboard/paths.d.ts.map +1 -0
  31. package/dist/src/dashboard/paths.js +99 -0
  32. package/dist/src/dashboard/paths.js.map +1 -0
  33. package/dist/src/index.d.ts +1 -1
  34. package/dist/src/index.js +1 -1
  35. package/dist/src/telescope/agent-governance-providers.d.ts +67 -0
  36. package/dist/src/telescope/agent-governance-providers.d.ts.map +1 -0
  37. package/dist/src/telescope/agent-governance-providers.js +312 -0
  38. package/dist/src/telescope/agent-governance-providers.js.map +1 -0
  39. package/dist/src/telescope/dashboard.d.ts +28 -8
  40. package/dist/src/telescope/dashboard.d.ts.map +1 -1
  41. package/dist/src/telescope/dashboard.js +233 -4
  42. package/dist/src/telescope/dashboard.js.map +1 -1
  43. package/dist/src/telescope/data-providers.d.ts +40 -1
  44. package/dist/src/telescope/data-providers.d.ts.map +1 -1
  45. package/dist/src/telescope/data-providers.js +19 -8
  46. package/dist/src/telescope/data-providers.js.map +1 -1
  47. package/dist/src/telescope/extension.d.ts +59 -14
  48. package/dist/src/telescope/extension.d.ts.map +1 -1
  49. package/dist/src/telescope/extension.js +90 -13
  50. package/dist/src/telescope/extension.js.map +1 -1
  51. package/dist/src/telescope/governance-registry.d.ts +15 -0
  52. package/dist/src/telescope/governance-registry.d.ts.map +1 -0
  53. package/dist/src/telescope/governance-registry.js +42 -0
  54. package/dist/src/telescope/governance-registry.js.map +1 -0
  55. package/dist/src/telescope/index.d.ts +4 -2
  56. package/dist/src/telescope/index.d.ts.map +1 -1
  57. package/dist/src/telescope/index.js +3 -1
  58. package/dist/src/telescope/index.js.map +1 -1
  59. package/dist/src/telescope/rag-data-providers.d.ts +69 -0
  60. package/dist/src/telescope/rag-data-providers.d.ts.map +1 -0
  61. package/dist/src/telescope/rag-data-providers.js +84 -0
  62. package/dist/src/telescope/rag-data-providers.js.map +1 -0
  63. package/dist/src/telescope/telescope-sdk.d.ts +11 -0
  64. package/dist/src/telescope/telescope-sdk.d.ts.map +1 -1
  65. package/dist/stubs/config/agent.stub +7 -0
  66. package/package.json +28 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @adonis-agora/agent
2
2
 
3
+ ## 0.22.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`079da35`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/079da35e91f1eab93020212bb93686eaa8dd9bee) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Ported the Nest ("Aviary") telescope extension's governance and RAG coverage onto `@adonis-agora/agent/telescope`, alongside the existing entry-backed providers:
8
+
9
+ - **Governance-backed providers** (`agent-governance-providers.ts`): spend by model/actor, usage trend, run reliability (total/success-rate/failed/avg-duration/by-agent/trend), recent runs/tool-calls/threads, and the pending-approvals inbox — reading the SAME `AgentGovernanceQueries` read-model the `/agent/governance/*` routes and the standalone dashboard SPA already use, via a new package-internal registry `AgentProvider#boot()` populates (`src/telescope/governance-registry.ts`). Several Nest-reference panels have no equivalent on this SPI and are deliberately not ported — top-threads-by-cost, run retries, run duration percentiles, error-code breakdowns, and paged tool-calls/threads/runs tables — see that file's header for the full list and why.
10
+ - **RAG providers** (`rag-data-providers.ts`): retrieval count, zero-hit rate, mean chunk count, and a retrievals/zero-hits trend, read off the `retrieved` diagnostic event `agent-loop.ts`'s inject-mode retrieval already publishes. Latency, score distribution, and store/collection breakdowns are NOT ported — the recorded event carries none of that data today; see that file's header for what widening the instrumentation would need.
11
+ - **Host extensibility**: `agentTelescopeExtension({ providers, sections })` lets a host app append its own data providers and dashboard sections, mirroring the Nest reference (with the same `agent.`-prefix reservation on host providers).
12
+ - The "Agent" dashboard gained four new sections (Spend & usage, Spend detail, Run reliability, Governance activity, RAG) binding to the above.
13
+
14
+ No watcher and no dedicated `agent`/`agent-rag` entry types are contributed — confirmed against `@adonis-agora/telescope`'s current `TelescopeExtension` contract, which has no `watchers` hook and gives every `agora:agent:*` event the same generic `diagnostic` entry type. That's a real, documented SDK constraint (see `extension.ts`'s header), not an oversight: RAG and every other agent event share one capped `lib:agent` window as a result.
15
+
16
+ ## 0.21.0
17
+
18
+ ### Minor Changes
19
+
20
+ - [`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.
21
+
22
+ 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.
23
+
24
+ `@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.
25
+
3
26
  ## 0.20.0
4
27
 
5
28
  ### Minor 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}.price-input{min-width:225px}.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}