@adonis-agora/agent 0.46.0 → 0.48.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 +29 -0
- package/dist/assets/spa/assets/{index-7XqfoeQH.js → index-Be6OClIm.js} +1 -1
- package/dist/assets/spa/index.html +1 -1
- package/dist/providers/agent_provider.d.ts +1 -1
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +91 -51
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/agent-service.d.ts +27 -8
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +66 -7
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/client/sse.d.ts +9 -10
- package/dist/src/client/sse.d.ts.map +1 -1
- package/dist/src/client/sse.js +15 -72
- package/dist/src/client/sse.js.map +1 -1
- package/dist/src/define_config.d.ts +22 -42
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +2 -2
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/durable/agent-run-workflow.d.ts.map +1 -1
- package/dist/src/durable/agent-run-workflow.js +8 -1
- package/dist/src/durable/agent-run-workflow.js.map +1 -1
- package/dist/src/durable/durable-agent-runner.d.ts.map +1 -1
- package/dist/src/durable/durable-agent-runner.js +3 -0
- package/dist/src/durable/durable-agent-runner.js.map +1 -1
- package/dist/src/genui/index.d.ts +1 -1
- package/dist/src/genui/index.js +1 -1
- package/dist/src/index.d.ts +5 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/media/index.d.ts +7 -0
- package/dist/src/media/index.d.ts.map +1 -0
- package/dist/src/media/index.js +7 -0
- package/dist/src/media/index.js.map +1 -0
- package/dist/src/media/media-attachment-staging.d.ts +115 -0
- package/dist/src/media/media-attachment-staging.d.ts.map +1 -0
- package/dist/src/media/media-attachment-staging.js +145 -0
- package/dist/src/media/media-attachment-staging.js.map +1 -0
- package/dist/src/redis-token-stream-sink.d.ts +2 -3
- package/dist/src/redis-token-stream-sink.d.ts.map +1 -1
- package/dist/src/redis-token-stream-sink.js +2 -3
- package/dist/src/redis-token-stream-sink.js.map +1 -1
- package/dist/src/runners/inline-agent-runner.d.ts +3 -1
- package/dist/src/runners/inline-agent-runner.d.ts.map +1 -1
- package/dist/src/runners/inline-agent-runner.js +17 -1
- package/dist/src/runners/inline-agent-runner.js.map +1 -1
- package/dist/src/spi/agent-store.d.ts +8 -0
- package/dist/src/spi/agent-store.d.ts.map +1 -1
- package/dist/src/spi/agent-store.js +8 -1
- package/dist/src/spi/agent-store.js.map +1 -1
- package/dist/src/spi/attachment-staging.d.ts +30 -12
- package/dist/src/spi/attachment-staging.d.ts.map +1 -1
- package/dist/src/spi/token-stream-sink.d.ts +2 -3
- package/dist/src/spi/token-stream-sink.d.ts.map +1 -1
- package/dist/src/spi/token-stream-sink.js.map +1 -1
- package/dist/src/spi/tool.d.ts +1 -2
- package/dist/src/spi/tool.d.ts.map +1 -1
- package/dist/src/sse.d.ts +0 -20
- package/dist/src/sse.d.ts.map +1 -1
- package/dist/src/sse.js +0 -27
- package/dist/src/sse.js.map +1 -1
- package/dist/src/stores/factory.d.ts +18 -65
- package/dist/src/stores/factory.d.ts.map +1 -1
- package/dist/src/stores/factory.js +24 -56
- package/dist/src/stores/factory.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +1 -0
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +9 -2
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/stream-events.d.ts +2 -2
- package/dist/src/testing/in-memory-attachment-staging.d.ts +7 -1
- package/dist/src/testing/in-memory-attachment-staging.d.ts.map +1 -1
- package/dist/src/testing/in-memory-attachment-staging.js +22 -2
- package/dist/src/testing/in-memory-attachment-staging.js.map +1 -1
- package/dist/src/testing/in-memory-store.d.ts +1 -0
- package/dist/src/testing/in-memory-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +7 -1
- package/dist/src/testing/in-memory-store.js.map +1 -1
- package/dist/src/types.d.ts +36 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/stubs/config/agent.stub +3 -6
- package/package.json +10 -1
- package/skills/agent-setup/SKILL.md +27 -60
- package/skills/agent-testing/SKILL.md +5 -5
- package/dist/src/stores/ledger-quota.d.ts +0 -23
- package/dist/src/stores/ledger-quota.d.ts.map +0 -1
- package/dist/src/stores/ledger-quota.js +0 -32
- package/dist/src/stores/ledger-quota.js.map +0 -1
package/dist/src/types.d.ts
CHANGED
|
@@ -363,6 +363,12 @@ export interface ThreadSummary {
|
|
|
363
363
|
* `model` runs on it. `null` → the provider's default. Undefined for a store that does not persist it.
|
|
364
364
|
*/
|
|
365
365
|
model?: string | null;
|
|
366
|
+
/**
|
|
367
|
+
* The run streaming on this thread right now — the one a reloading client re-attaches to
|
|
368
|
+
* (`GET <path>/chat/:runId/stream`) — or `null` when none is. Set when a turn starts, cleared when
|
|
369
|
+
* it ends.
|
|
370
|
+
*/
|
|
371
|
+
activeRunId?: string | null;
|
|
366
372
|
}
|
|
367
373
|
export interface StoredMessage {
|
|
368
374
|
id: string;
|
|
@@ -443,9 +449,38 @@ export interface ToolCallApproval {
|
|
|
443
449
|
}
|
|
444
450
|
export interface ThreadDetail extends ThreadSummary {
|
|
445
451
|
messages: StoredMessage[];
|
|
446
|
-
activeStreamId?: string;
|
|
447
452
|
}
|
|
448
453
|
export type ToolCallStatus = 'auto_executed' | 'pending_approval' | 'executed' | 'rejected' | 'failed'
|
|
449
454
|
/** An approval request lapsed before anyone decided; the tool never ran. */
|
|
450
455
|
| 'expired';
|
|
456
|
+
/** The attachment rules in force — what the upload route enforces (`GET <path>/config`). */
|
|
457
|
+
export interface AgentAttachmentConfig {
|
|
458
|
+
/** An upload store is configured, so uploads work at all. */
|
|
459
|
+
enabled: boolean;
|
|
460
|
+
/** How a client uploads (`null` when `enabled` is false). */
|
|
461
|
+
upload: 'multipart' | 'resumable' | null;
|
|
462
|
+
maxBytes: number;
|
|
463
|
+
allowedContentTypes: readonly string[];
|
|
464
|
+
/** How many attachments one message may name. */
|
|
465
|
+
maxPerMessage: number;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* `GET <path>/config` — server facts a client would otherwise repeat (the shape of
|
|
469
|
+
* `@dudousxd/nestjs-agent`'s `AgentClientConfig`, which its React `useAgentConfig` reads).
|
|
470
|
+
*/
|
|
471
|
+
export interface AgentClientConfig {
|
|
472
|
+
attachments: AgentAttachmentConfig;
|
|
473
|
+
/** A model catalog is available, so `GET <path>/models` lists something to pick. */
|
|
474
|
+
models: {
|
|
475
|
+
enabled: boolean;
|
|
476
|
+
};
|
|
477
|
+
/** Sends are refused with `429` once `GET <path>/quota` reports `blocked`. */
|
|
478
|
+
quota: {
|
|
479
|
+
enforced: boolean;
|
|
480
|
+
};
|
|
481
|
+
/** No `actorResolver`: every browser is its own anonymous actor. */
|
|
482
|
+
identity: {
|
|
483
|
+
anonymous: boolean;
|
|
484
|
+
};
|
|
485
|
+
}
|
|
451
486
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,12 +48,9 @@ export default defineConfig({
|
|
|
48
48
|
// dashboard: { enabled: true, path: '/agent/dashboard', authorize: (actor) => actor.roles?.includes('ADMIN') ?? false },
|
|
49
49
|
// governanceAuthorize: (actor) => actor.roles?.includes('ADMIN') ?? false,
|
|
50
50
|
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
// attachmentStaging: attachmentStores.memory(),
|
|
55
|
-
// attachmentMaxBytes: 20 * 1024 * 1024,
|
|
56
|
-
// attachmentAllowedContentTypes: ['image/png', 'image/jpeg', 'application/pdf'],
|
|
51
|
+
// Chat attachments — where uploads live (bring your own store, or @adonis-agora/media on any Drive
|
|
52
|
+
// disk). Mounts POST /agent/attachments; a send names uploads as { mediaId }, resolved server-side.
|
|
53
|
+
// attachments: attachmentStores.media(),
|
|
57
54
|
|
|
58
55
|
// The implicit default agent (base prompt, personas, tool allow-list). Omit for a bare assistant.
|
|
59
56
|
// defaultAgent: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.0",
|
|
4
4
|
"description": "Governed, durable-backed AI agent (chat + tool-calling + governance) for AdonisJS — part of the Agora ecosystem.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -150,6 +150,11 @@
|
|
|
150
150
|
"types": "./dist/src/genui/builtins.d.ts",
|
|
151
151
|
"import": "./dist/src/genui/builtins.js",
|
|
152
152
|
"default": "./dist/src/genui/builtins.js"
|
|
153
|
+
},
|
|
154
|
+
"./media": {
|
|
155
|
+
"types": "./dist/src/media/index.d.ts",
|
|
156
|
+
"import": "./dist/src/media/index.js",
|
|
157
|
+
"default": "./dist/src/media/index.js"
|
|
153
158
|
}
|
|
154
159
|
},
|
|
155
160
|
"files": [
|
|
@@ -168,6 +173,7 @@
|
|
|
168
173
|
"@adonis-agora/authz": ">=0.4.2 <1.0.0",
|
|
169
174
|
"@adonis-agora/diagnostics": ">=0.1.0 <1.0.0",
|
|
170
175
|
"@adonis-agora/durable": ">=0.8.0 <1.0.0",
|
|
176
|
+
"@adonis-agora/media": ">=0.18.0 <1.0.0",
|
|
171
177
|
"@adonis-agora/telescope": ">=0.4.0 <1.0.0",
|
|
172
178
|
"@adonisjs/assembler": "^8.4.0",
|
|
173
179
|
"@adonisjs/core": "^7.3.0",
|
|
@@ -222,6 +228,9 @@
|
|
|
222
228
|
},
|
|
223
229
|
"@dudousxd/nestjs-agent-core": {
|
|
224
230
|
"optional": true
|
|
231
|
+
},
|
|
232
|
+
"@adonis-agora/media": {
|
|
233
|
+
"optional": true
|
|
225
234
|
}
|
|
226
235
|
},
|
|
227
236
|
"devDependencies": {
|
|
@@ -3,7 +3,7 @@ name: agent-setup
|
|
|
3
3
|
description: >-
|
|
4
4
|
Set up @adonis-agora/agent in an AdonisJS app: node ace configure @adonis-agora/agent,
|
|
5
5
|
defineConfig in config/agent.ts (model via aiSdkModel from @adonis-agora/agent/ai-sdk,
|
|
6
|
-
stores.lucid()/stores.memory(),
|
|
6
|
+
stores.lucid()/stores.memory(), quota: { limits }, pricingStores +
|
|
7
7
|
seedModelPrices + estimateCost, tokenSinks.redis multi-replica SSE sink,
|
|
8
8
|
AuthActorResolver identity seam), auto-created agent tables vs the published migration,
|
|
9
9
|
the cost fold (null vs $0.00), and route mounting under config path. Use for "set up
|
|
@@ -90,24 +90,22 @@ Source: `packages/adonis/docs/getting-started.mdx`,
|
|
|
90
90
|
|
|
91
91
|
## Core patterns
|
|
92
92
|
|
|
93
|
-
### Pattern 1 —
|
|
93
|
+
### Pattern 1 — set a budget with `quota: { limits }`
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
Budgets are **opt-in**: omitting `quota` means usage is reported (`GET /agent/quota`) but
|
|
96
|
+
never enforced. With limits, a send while a window is exhausted is refused with `429`
|
|
97
|
+
`{ code: 'quota_exceeded', period }` before the turn starts — no tokens spent.
|
|
98
98
|
|
|
99
99
|
```ts
|
|
100
|
-
import { defineConfig, quotas } from '@adonis-agora/agent'
|
|
101
|
-
|
|
102
100
|
export default defineConfig({
|
|
103
101
|
// ...
|
|
104
|
-
quota:
|
|
102
|
+
quota: { limits: { day: { tokens: 200_000 }, month: { usd: 20 } } },
|
|
105
103
|
})
|
|
106
104
|
```
|
|
107
105
|
|
|
108
|
-
`
|
|
109
|
-
(`
|
|
110
|
-
|
|
106
|
+
Spend (`usd`) is the provider-reported cost the ledger recorded. A budget of your own is a
|
|
107
|
+
`QuotaProvider` (`report({ actor })`) passed as `quota`. `quotas.ledger` / `quotas.memory`,
|
|
108
|
+
`LedgerQuotaStore` and `GET /agent/quota/today` were removed in 0.46.
|
|
111
109
|
|
|
112
110
|
Source: `packages/adonis/docs/governance/quota-and-cost.mdx`.
|
|
113
111
|
|
|
@@ -206,49 +204,21 @@ wrong for an app whose users log in.
|
|
|
206
204
|
Source: `packages/adonis/src/anonymous-actor-resolver.ts`,
|
|
207
205
|
`packages/adonis/docs/governance/authorization.mdx` ("No resolver: the endpoints are public").
|
|
208
206
|
|
|
209
|
-
### MEDIUM —
|
|
210
|
-
|
|
211
|
-
```ts
|
|
212
|
-
// Wrong — no `quota` key means budgets are DISABLED (fail-open), even with a ledger full of usage.
|
|
213
|
-
export default defineConfig({ model, store: 'lucid', stores: { lucid: stores.lucid() } })
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
```ts
|
|
217
|
-
// Correct — opt in; the check then runs fail-closed before the first model call.
|
|
218
|
-
export default defineConfig({
|
|
219
|
-
...,
|
|
220
|
-
quota: quotas.ledger({ limitTokens: 500_000 }),
|
|
221
|
-
})
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
Mechanism: the loop skips both `check` and `bump` entirely when `deps.quota` is
|
|
225
|
-
undefined — there is no implicit limit.
|
|
226
|
-
Source: `packages/adonis/docs/governance/quota-and-cost.mdx` ("Quota is opt-in, and off
|
|
227
|
-
means open"), `packages/adonis/src/agent-loop.ts` (`if (deps.quota !== undefined)`).
|
|
228
|
-
|
|
229
|
-
### HIGH — incrementing counters in a custom QuotaStore's `bump`
|
|
207
|
+
### MEDIUM — shipping a public (anonymous) chat without a budget
|
|
230
208
|
|
|
231
209
|
```ts
|
|
232
|
-
// Wrong —
|
|
233
|
-
|
|
234
|
-
async check(actorRef, day) { /* read my counter */ },
|
|
235
|
-
async bump(actorRef, day, tokens) { await redis.incrBy(key, tokens) },
|
|
236
|
-
}
|
|
210
|
+
// Wrong — no actorResolver (public) and no quota: model spend is unbounded.
|
|
211
|
+
export default defineConfig({ model })
|
|
237
212
|
```
|
|
238
213
|
|
|
239
214
|
```ts
|
|
240
|
-
// Correct —
|
|
241
|
-
|
|
242
|
-
async check(actorRef: string, day: string) { /* sum agent_token_usage */ }
|
|
243
|
-
async bump(): Promise<void> {} // deliberate no-op — the ledger is the source of truth
|
|
244
|
-
}
|
|
215
|
+
// Correct — limits apply per actor, i.e. per browser in anonymous mode.
|
|
216
|
+
export default defineConfig({ model, quota: { limits: { day: { tokens: 50_000 } } } })
|
|
245
217
|
```
|
|
246
218
|
|
|
247
|
-
Mechanism: `
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
Source: `packages/adonis/docs/governance/quota-and-cost.mdx` ("`bump` is a notification,
|
|
251
|
-
not necessarily an increment"), `packages/adonis/src/stores/ledger-quota.ts`.
|
|
219
|
+
Mechanism: without `quota`, `GET /agent/quota` reports usage off the ledger but nothing
|
|
220
|
+
gates a send. With it, the chat route checks the report before starting the turn.
|
|
221
|
+
Source: `packages/adonis/docs/governance/quota-and-cost.mdx` ("Budgets").
|
|
252
222
|
|
|
253
223
|
### MEDIUM — reading `$0.00` rollups as "this model is free"
|
|
254
224
|
|
|
@@ -268,26 +238,23 @@ a free model. Per-run/per-usage rows keep their nulls.
|
|
|
268
238
|
Source: `packages/adonis/docs/governance/quota-and-cost.mdx` ("`null` in the ledger,
|
|
269
239
|
`0` in the rollups").
|
|
270
240
|
|
|
271
|
-
###
|
|
241
|
+
### HIGH — sending attachment objects instead of `{ mediaId }` refs
|
|
272
242
|
|
|
273
243
|
```ts
|
|
274
|
-
// Wrong —
|
|
275
|
-
|
|
244
|
+
// Wrong — 400: a send names uploads by id only; a url from the client is never trusted.
|
|
245
|
+
{ message, attachments: [{ mediaId, url, contentType, name }] }
|
|
276
246
|
```
|
|
277
247
|
|
|
278
248
|
```ts
|
|
279
|
-
//
|
|
280
|
-
|
|
281
|
-
'image/png', 'image/jpeg', 'image/gif', 'image/webp',
|
|
282
|
-
'application/pdf', 'text/plain', 'text/csv',
|
|
283
|
-
'text/markdown', // your addition
|
|
284
|
-
],
|
|
249
|
+
// Correct — the configured store (attachments: attachmentStores.media()) resolves the url.
|
|
250
|
+
{ message, attachments: [{ mediaId }] }
|
|
285
251
|
```
|
|
286
252
|
|
|
287
|
-
Mechanism:
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
253
|
+
Mechanism: the chat route refuses any key besides `mediaId`, then resolves each id through
|
|
254
|
+
`AttachmentStagingStore.resolve({ mediaId, actor })` (`403` for another actor's upload).
|
|
255
|
+
Limits come from the store (`attachmentStores.media({ maxBytes, allowedContentTypes })`);
|
|
256
|
+
`allowedContentTypes` replaces the default list and matches exactly.
|
|
257
|
+
Source: `packages/adonis/docs/authoring/attachments.mdx`.
|
|
291
258
|
|
|
292
259
|
See also: `agent-tools/SKILL.md` — registering tools the model can actually call;
|
|
293
260
|
`agent-governance/SKILL.md` — what `AuthActorResolver` feeds into.
|
|
@@ -215,8 +215,8 @@ Source: `packages/adonis/src/tool-registry.ts` (`definitionsFor`, `invoke`),
|
|
|
215
215
|
|
|
216
216
|
```ts
|
|
217
217
|
// Wrong — frames are typed objects, not an SSE byte stream.
|
|
218
|
-
const raw = await res.text() // '
|
|
219
|
-
expect(raw).toContain('
|
|
218
|
+
const raw = await res.text() // 'id: 1\ndata: {"kind":"text","text":"..."}\n\n'
|
|
219
|
+
expect(raw).toContain('"kind":"text"')
|
|
220
220
|
```
|
|
221
221
|
|
|
222
222
|
```ts
|
|
@@ -227,10 +227,10 @@ for await (const frame of sink.subscribe(runId)) {
|
|
|
227
227
|
```
|
|
228
228
|
|
|
229
229
|
Mechanism: `InMemoryTokenStreamSink.subscribe` yields `StreamFrame` objects; the SSE
|
|
230
|
-
envelope (`event: meta` / `data:
|
|
231
|
-
provider's route handler via `
|
|
230
|
+
envelope (`event: meta` / `data: <AgentStreamEvent>` / `event: done`) is produced by the
|
|
231
|
+
provider's route handler via `AgentSseEncoder`, a layer tests never cross.
|
|
232
232
|
Source: `packages/adonis/docs/testing.mdx` (StreamFrame note),
|
|
233
|
-
`packages/adonis/src/sse.ts` (`
|
|
233
|
+
`packages/adonis/src/sse.ts` (`AgentSseEncoder`).
|
|
234
234
|
|
|
235
235
|
See also: `agent-tools/SKILL.md` — registering real tools into the test registry;
|
|
236
236
|
`agent-setup/SKILL.md` — why `day` is a required, runner-stamped loop dep.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { AgentStore } from '../spi/agent-store.js';
|
|
2
|
-
import type { QuotaStore } from '../spi/quota-store.js';
|
|
3
|
-
import type { QuotaState } from '../types.js';
|
|
4
|
-
/**
|
|
5
|
-
* A production {@link QuotaStore} backed by the persisted usage ledger (the append-only
|
|
6
|
-
* `agent_token_usage` table the Lucid store writes each turn to). `check` reads the actor's
|
|
7
|
-
* tokens-so-far for the day straight from {@link AgentStore.quotaToday} and compares it to a fixed
|
|
8
|
-
* daily limit; `bump` is a deliberate no-op because the loop's `recordUsage` already writes every
|
|
9
|
-
* turn's tokens to that same ledger. One source of truth — so enforcement and what a usage dashboard
|
|
10
|
-
* reports can never drift, and it works across replicas with no extra shared state.
|
|
11
|
-
*
|
|
12
|
-
* Ledger-agnostic by design: it wraps any {@link AgentStore} (the `lucid` store for production, the
|
|
13
|
-
* in-memory store for tests), so no dedicated quota table is needed — the token-usage ledger IS the
|
|
14
|
-
* ledger. Wire it in `config/agent.ts` via `quota: quotas.ledger({ limitTokens })`.
|
|
15
|
-
*/
|
|
16
|
-
export declare class LedgerQuotaStore implements QuotaStore {
|
|
17
|
-
private readonly store;
|
|
18
|
-
private readonly limitTokens;
|
|
19
|
-
constructor(store: AgentStore, limitTokens: number);
|
|
20
|
-
check(actorRef: string, day: string): Promise<QuotaState>;
|
|
21
|
-
bump(): Promise<void>;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=ledger-quota.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-quota.d.ts","sourceRoot":"","sources":["../../../src/stores/ledger-quota.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IAE/C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAF9B,YACmB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,EAClC;IAEE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO9D;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;CACF"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A production {@link QuotaStore} backed by the persisted usage ledger (the append-only
|
|
3
|
-
* `agent_token_usage` table the Lucid store writes each turn to). `check` reads the actor's
|
|
4
|
-
* tokens-so-far for the day straight from {@link AgentStore.quotaToday} and compares it to a fixed
|
|
5
|
-
* daily limit; `bump` is a deliberate no-op because the loop's `recordUsage` already writes every
|
|
6
|
-
* turn's tokens to that same ledger. One source of truth — so enforcement and what a usage dashboard
|
|
7
|
-
* reports can never drift, and it works across replicas with no extra shared state.
|
|
8
|
-
*
|
|
9
|
-
* Ledger-agnostic by design: it wraps any {@link AgentStore} (the `lucid` store for production, the
|
|
10
|
-
* in-memory store for tests), so no dedicated quota table is needed — the token-usage ledger IS the
|
|
11
|
-
* ledger. Wire it in `config/agent.ts` via `quota: quotas.ledger({ limitTokens })`.
|
|
12
|
-
*/
|
|
13
|
-
export class LedgerQuotaStore {
|
|
14
|
-
store;
|
|
15
|
-
limitTokens;
|
|
16
|
-
constructor(store, limitTokens) {
|
|
17
|
-
this.store = store;
|
|
18
|
-
this.limitTokens = limitTokens;
|
|
19
|
-
}
|
|
20
|
-
async check(actorRef, day) {
|
|
21
|
-
const { usedTokens } = await this.store.quotaToday(actorRef, day);
|
|
22
|
-
return {
|
|
23
|
-
usedTokens,
|
|
24
|
-
limitTokens: this.limitTokens,
|
|
25
|
-
withinLimit: usedTokens < this.limitTokens,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
async bump() {
|
|
29
|
-
// No-op: the ledger is the source of truth — recordUsage already persisted this turn's tokens.
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=ledger-quota.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-quota.js","sourceRoot":"","sources":["../../../src/stores/ledger-quota.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,gBAAgB;IAER,KAAK;IACL,WAAW;IAF9B,YACmB,KAAiB,EACjB,WAAmB;qBADnB,KAAK;2BACL,WAAW;IAC3B,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,GAAW;QACvC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAClE,OAAO;YACL,UAAU;YACV,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC,WAAW;SAC3C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,+FAA+F;IACjG,CAAC;CACF"}
|