@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.
Files changed (89) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/assets/spa/assets/{index-7XqfoeQH.js → index-Be6OClIm.js} +1 -1
  3. package/dist/assets/spa/index.html +1 -1
  4. package/dist/providers/agent_provider.d.ts +1 -1
  5. package/dist/providers/agent_provider.d.ts.map +1 -1
  6. package/dist/providers/agent_provider.js +91 -51
  7. package/dist/providers/agent_provider.js.map +1 -1
  8. package/dist/src/agent-service.d.ts +27 -8
  9. package/dist/src/agent-service.d.ts.map +1 -1
  10. package/dist/src/agent-service.js +66 -7
  11. package/dist/src/agent-service.js.map +1 -1
  12. package/dist/src/client/sse.d.ts +9 -10
  13. package/dist/src/client/sse.d.ts.map +1 -1
  14. package/dist/src/client/sse.js +15 -72
  15. package/dist/src/client/sse.js.map +1 -1
  16. package/dist/src/define_config.d.ts +22 -42
  17. package/dist/src/define_config.d.ts.map +1 -1
  18. package/dist/src/define_config.js +2 -2
  19. package/dist/src/define_config.js.map +1 -1
  20. package/dist/src/durable/agent-run-workflow.d.ts.map +1 -1
  21. package/dist/src/durable/agent-run-workflow.js +8 -1
  22. package/dist/src/durable/agent-run-workflow.js.map +1 -1
  23. package/dist/src/durable/durable-agent-runner.d.ts.map +1 -1
  24. package/dist/src/durable/durable-agent-runner.js +3 -0
  25. package/dist/src/durable/durable-agent-runner.js.map +1 -1
  26. package/dist/src/genui/index.d.ts +1 -1
  27. package/dist/src/genui/index.js +1 -1
  28. package/dist/src/index.d.ts +5 -6
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +4 -5
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/media/index.d.ts +7 -0
  33. package/dist/src/media/index.d.ts.map +1 -0
  34. package/dist/src/media/index.js +7 -0
  35. package/dist/src/media/index.js.map +1 -0
  36. package/dist/src/media/media-attachment-staging.d.ts +115 -0
  37. package/dist/src/media/media-attachment-staging.d.ts.map +1 -0
  38. package/dist/src/media/media-attachment-staging.js +145 -0
  39. package/dist/src/media/media-attachment-staging.js.map +1 -0
  40. package/dist/src/redis-token-stream-sink.d.ts +2 -3
  41. package/dist/src/redis-token-stream-sink.d.ts.map +1 -1
  42. package/dist/src/redis-token-stream-sink.js +2 -3
  43. package/dist/src/redis-token-stream-sink.js.map +1 -1
  44. package/dist/src/runners/inline-agent-runner.d.ts +3 -1
  45. package/dist/src/runners/inline-agent-runner.d.ts.map +1 -1
  46. package/dist/src/runners/inline-agent-runner.js +17 -1
  47. package/dist/src/runners/inline-agent-runner.js.map +1 -1
  48. package/dist/src/spi/agent-store.d.ts +8 -0
  49. package/dist/src/spi/agent-store.d.ts.map +1 -1
  50. package/dist/src/spi/agent-store.js +8 -1
  51. package/dist/src/spi/agent-store.js.map +1 -1
  52. package/dist/src/spi/attachment-staging.d.ts +30 -12
  53. package/dist/src/spi/attachment-staging.d.ts.map +1 -1
  54. package/dist/src/spi/token-stream-sink.d.ts +2 -3
  55. package/dist/src/spi/token-stream-sink.d.ts.map +1 -1
  56. package/dist/src/spi/token-stream-sink.js.map +1 -1
  57. package/dist/src/spi/tool.d.ts +1 -2
  58. package/dist/src/spi/tool.d.ts.map +1 -1
  59. package/dist/src/sse.d.ts +0 -20
  60. package/dist/src/sse.d.ts.map +1 -1
  61. package/dist/src/sse.js +0 -27
  62. package/dist/src/sse.js.map +1 -1
  63. package/dist/src/stores/factory.d.ts +18 -65
  64. package/dist/src/stores/factory.d.ts.map +1 -1
  65. package/dist/src/stores/factory.js +24 -56
  66. package/dist/src/stores/factory.js.map +1 -1
  67. package/dist/src/stores/lucid.d.ts +1 -0
  68. package/dist/src/stores/lucid.d.ts.map +1 -1
  69. package/dist/src/stores/lucid.js +9 -2
  70. package/dist/src/stores/lucid.js.map +1 -1
  71. package/dist/src/stream-events.d.ts +2 -2
  72. package/dist/src/testing/in-memory-attachment-staging.d.ts +7 -1
  73. package/dist/src/testing/in-memory-attachment-staging.d.ts.map +1 -1
  74. package/dist/src/testing/in-memory-attachment-staging.js +22 -2
  75. package/dist/src/testing/in-memory-attachment-staging.js.map +1 -1
  76. package/dist/src/testing/in-memory-store.d.ts +1 -0
  77. package/dist/src/testing/in-memory-store.d.ts.map +1 -1
  78. package/dist/src/testing/in-memory-store.js +7 -1
  79. package/dist/src/testing/in-memory-store.js.map +1 -1
  80. package/dist/src/types.d.ts +36 -1
  81. package/dist/src/types.d.ts.map +1 -1
  82. package/dist/stubs/config/agent.stub +3 -6
  83. package/package.json +10 -1
  84. package/skills/agent-setup/SKILL.md +27 -60
  85. package/skills/agent-testing/SKILL.md +5 -5
  86. package/dist/src/stores/ledger-quota.d.ts +0 -23
  87. package/dist/src/stores/ledger-quota.d.ts.map +0 -1
  88. package/dist/src/stores/ledger-quota.js +0 -32
  89. package/dist/src/stores/ledger-quota.js.map +0 -1
@@ -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
@@ -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
- // Multimodal uploads — mounts POST /agent/attachments, which stages a file into a model-fetchable
52
- // MessageAttachment the client sends back with its next chat message. Bind your own store (presign
53
- // S3/GCS or wrap your media pipeline); \`attachmentStores.memory()\` inlines bytes as a data: URL.
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.46.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(), quotas.ledger/quotas.memory, pricingStores +
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 — enforce a daily spend budget with `quotas.ledger`
93
+ ### Pattern 1 — set a budget with `quota: { limits }`
94
94
 
95
- Quotas are **opt-in**: omitting `quota` disables budgeting entirely (fail-open).
96
- Configuring one makes the gate fail-closed — `check()` runs before the first model call
97
- and over-budget turns throw `QuotaExceededError` before any tokens are spent.
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: quotas.ledger({ limitTokens: 1_000_000 }), // enforced off the persisted usage ledger
102
+ quota: { limits: { day: { tokens: 200_000 }, month: { usd: 20 } } },
105
103
  })
106
104
  ```
107
105
 
108
- `quotas.memory({ limitTokens })` is the single-process variant for tests. The `day`
109
- (`YYYY-MM-DD`, UTC) is stamped once by the runner, so day-bucketing stays deterministic
110
- under durable replay.
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 — expecting quota enforcement after configuring only a store
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 — double-counts every turn when paired with the persisted usage ledger.
233
- const store: QuotaStore = {
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 — a ledger-backed store leaves bump empty: recordUsage already wrote the tokens.
241
- class LedgerQuota implements QuotaStore {
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: `store.recordUsage(...)` has already persisted each turn's tokens;
248
- `quotas.ledger.check` reads that ledger, so adding again in `bump` counts each turn twice.
249
- Only a store keeping its OWN tally (`quotas.memory`, a bespoke Redis counter) should add.
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
- ### MEDIUM — replacing the allowed attachment content types instead of extending
241
+ ### HIGH — sending attachment objects instead of `{ mediaId }` refs
272
242
 
273
243
  ```ts
274
- // Wrong — REPLACES the default list: png/jpeg/pdf/csv now get 415.
275
- attachmentAllowedContentTypes: ['application/json']
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
- // Types match EXACTLY (no wildcards); spread the defaults you still want.
280
- attachmentAllowedContentTypes: [
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: passing `attachmentAllowedContentTypes` replaces the default list rather than
288
- merging, and matching is exact — no `text/*` prefix rule — so anything absent is rejected
289
- with 415.
290
- Source: `packages/adonis/src/define_config.ts` (`AgentConfig.attachmentAllowedContentTypes`).
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() // 'data: {"delta":"..."}\n\n'
219
- expect(raw).toContain('delta')
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: {"delta":...}` / `event: done`) is produced by the
231
- provider's route handler via `frameToSse`, a layer tests never cross.
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` (`frameToSse`).
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"}