@evelinka-ai/core 0.1.3

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 (130) hide show
  1. package/README.md +16 -0
  2. package/dist/agent-lib/llm-semaphore.d.ts +47 -0
  3. package/dist/agent-lib/llm-semaphore.d.ts.map +1 -0
  4. package/dist/agent-lib/llm-semaphore.js +255 -0
  5. package/dist/agent-lib/llm-semaphore.js.map +1 -0
  6. package/dist/agent-lib/managed-tool.d.ts +29 -0
  7. package/dist/agent-lib/managed-tool.d.ts.map +1 -0
  8. package/dist/agent-lib/managed-tool.js +28 -0
  9. package/dist/agent-lib/managed-tool.js.map +1 -0
  10. package/dist/channels/catalog.d.ts +3 -0
  11. package/dist/channels/catalog.d.ts.map +1 -0
  12. package/dist/channels/catalog.js +20 -0
  13. package/dist/channels/catalog.js.map +1 -0
  14. package/dist/channels/model-catalog.d.ts +3 -0
  15. package/dist/channels/model-catalog.d.ts.map +1 -0
  16. package/dist/channels/model-catalog.js +6 -0
  17. package/dist/channels/model-catalog.js.map +1 -0
  18. package/dist/channels/usage.d.ts +3 -0
  19. package/dist/channels/usage.d.ts.map +1 -0
  20. package/dist/channels/usage.js +35 -0
  21. package/dist/channels/usage.js.map +1 -0
  22. package/dist/lib/atomic-file.d.ts +2 -0
  23. package/dist/lib/atomic-file.d.ts.map +1 -0
  24. package/dist/lib/atomic-file.js +16 -0
  25. package/dist/lib/atomic-file.js.map +1 -0
  26. package/dist/lib/budgets/record-call-usage.d.ts +31 -0
  27. package/dist/lib/budgets/record-call-usage.d.ts.map +1 -0
  28. package/dist/lib/budgets/record-call-usage.js +44 -0
  29. package/dist/lib/budgets/record-call-usage.js.map +1 -0
  30. package/dist/lib/budgets/token-budget.d.ts +61 -0
  31. package/dist/lib/budgets/token-budget.d.ts.map +1 -0
  32. package/dist/lib/budgets/token-budget.js +250 -0
  33. package/dist/lib/budgets/token-budget.js.map +1 -0
  34. package/dist/lib/budgets/token-usage-pg.d.ts +96 -0
  35. package/dist/lib/budgets/token-usage-pg.d.ts.map +1 -0
  36. package/dist/lib/budgets/token-usage-pg.js +305 -0
  37. package/dist/lib/budgets/token-usage-pg.js.map +1 -0
  38. package/dist/lib/budgets/usage.d.ts +103 -0
  39. package/dist/lib/budgets/usage.d.ts.map +1 -0
  40. package/dist/lib/budgets/usage.js +151 -0
  41. package/dist/lib/budgets/usage.js.map +1 -0
  42. package/dist/lib/control-plane/call-context.d.ts +7 -0
  43. package/dist/lib/control-plane/call-context.d.ts.map +1 -0
  44. package/dist/lib/control-plane/call-context.js +9 -0
  45. package/dist/lib/control-plane/call-context.js.map +1 -0
  46. package/dist/lib/control-plane/catalog.d.ts +33 -0
  47. package/dist/lib/control-plane/catalog.d.ts.map +1 -0
  48. package/dist/lib/control-plane/catalog.js +163 -0
  49. package/dist/lib/control-plane/catalog.js.map +1 -0
  50. package/dist/lib/control-plane/flow-settings.d.ts +32 -0
  51. package/dist/lib/control-plane/flow-settings.d.ts.map +1 -0
  52. package/dist/lib/control-plane/flow-settings.js +139 -0
  53. package/dist/lib/control-plane/flow-settings.js.map +1 -0
  54. package/dist/lib/control-plane/tools-config.d.ts +30 -0
  55. package/dist/lib/control-plane/tools-config.d.ts.map +1 -0
  56. package/dist/lib/control-plane/tools-config.js +104 -0
  57. package/dist/lib/control-plane/tools-config.js.map +1 -0
  58. package/dist/lib/delivery/push-store.d.ts +20 -0
  59. package/dist/lib/delivery/push-store.d.ts.map +1 -0
  60. package/dist/lib/delivery/push-store.js +74 -0
  61. package/dist/lib/delivery/push-store.js.map +1 -0
  62. package/dist/lib/delivery/push.d.ts +15 -0
  63. package/dist/lib/delivery/push.d.ts.map +1 -0
  64. package/dist/lib/delivery/push.js +97 -0
  65. package/dist/lib/delivery/push.js.map +1 -0
  66. package/dist/lib/delivery/schedule-lock.d.ts +16 -0
  67. package/dist/lib/delivery/schedule-lock.d.ts.map +1 -0
  68. package/dist/lib/delivery/schedule-lock.js +86 -0
  69. package/dist/lib/delivery/schedule-lock.js.map +1 -0
  70. package/dist/lib/memory/memory-dream.d.ts +181 -0
  71. package/dist/lib/memory/memory-dream.d.ts.map +1 -0
  72. package/dist/lib/memory/memory-dream.js +405 -0
  73. package/dist/lib/memory/memory-dream.js.map +1 -0
  74. package/dist/lib/memory/memory-vault-git.d.ts +14 -0
  75. package/dist/lib/memory/memory-vault-git.d.ts.map +1 -0
  76. package/dist/lib/memory/memory-vault-git.js +345 -0
  77. package/dist/lib/memory/memory-vault-git.js.map +1 -0
  78. package/dist/lib/memory/memory-vault.d.ts +83 -0
  79. package/dist/lib/memory/memory-vault.d.ts.map +1 -0
  80. package/dist/lib/memory/memory-vault.js +466 -0
  81. package/dist/lib/memory/memory-vault.js.map +1 -0
  82. package/dist/lib/memory/static-instructions.d.ts +2 -0
  83. package/dist/lib/memory/static-instructions.d.ts.map +1 -0
  84. package/dist/lib/memory/static-instructions.js +48 -0
  85. package/dist/lib/memory/static-instructions.js.map +1 -0
  86. package/dist/lib/memory/vault-explorer.d.ts +37 -0
  87. package/dist/lib/memory/vault-explorer.d.ts.map +1 -0
  88. package/dist/lib/memory/vault-explorer.js +212 -0
  89. package/dist/lib/memory/vault-explorer.js.map +1 -0
  90. package/dist/lib/models/llm-concurrency.d.ts +29 -0
  91. package/dist/lib/models/llm-concurrency.d.ts.map +1 -0
  92. package/dist/lib/models/llm-concurrency.js +103 -0
  93. package/dist/lib/models/llm-concurrency.js.map +1 -0
  94. package/dist/lib/models/model-catalog.d.ts +32 -0
  95. package/dist/lib/models/model-catalog.d.ts.map +1 -0
  96. package/dist/lib/models/model-catalog.js +115 -0
  97. package/dist/lib/models/model-catalog.js.map +1 -0
  98. package/dist/lib/models/model-config.d.ts +27 -0
  99. package/dist/lib/models/model-config.d.ts.map +1 -0
  100. package/dist/lib/models/model-config.js +155 -0
  101. package/dist/lib/models/model-config.js.map +1 -0
  102. package/dist/lib/observability/console-link.d.ts +3 -0
  103. package/dist/lib/observability/console-link.d.ts.map +1 -0
  104. package/dist/lib/observability/console-link.js +15 -0
  105. package/dist/lib/observability/console-link.js.map +1 -0
  106. package/dist/lib/observability/event-bus.d.ts +11 -0
  107. package/dist/lib/observability/event-bus.d.ts.map +1 -0
  108. package/dist/lib/observability/event-bus.js +24 -0
  109. package/dist/lib/observability/event-bus.js.map +1 -0
  110. package/dist/lib/observability/logger.d.ts +5 -0
  111. package/dist/lib/observability/logger.d.ts.map +1 -0
  112. package/dist/lib/observability/logger.js +47 -0
  113. package/dist/lib/observability/logger.js.map +1 -0
  114. package/dist/lib/observability/payload-store.d.ts +8 -0
  115. package/dist/lib/observability/payload-store.d.ts.map +1 -0
  116. package/dist/lib/observability/payload-store.js +101 -0
  117. package/dist/lib/observability/payload-store.js.map +1 -0
  118. package/dist/lib/observability/recorder-hook.d.ts +22 -0
  119. package/dist/lib/observability/recorder-hook.d.ts.map +1 -0
  120. package/dist/lib/observability/recorder-hook.js +241 -0
  121. package/dist/lib/observability/recorder-hook.js.map +1 -0
  122. package/dist/lib/observability/recorder.d.ts +339 -0
  123. package/dist/lib/observability/recorder.d.ts.map +1 -0
  124. package/dist/lib/observability/recorder.js +1182 -0
  125. package/dist/lib/observability/recorder.js.map +1 -0
  126. package/dist/tenant.d.ts +59 -0
  127. package/dist/tenant.d.ts.map +1 -0
  128. package/dist/tenant.js +18 -0
  129. package/dist/tenant.js.map +1 -0
  130. package/package.json +119 -0
package/README.md ADDED
@@ -0,0 +1,16 @@
1
+ # `@evelinka-ai/core`
2
+
3
+ Compiled, headless building blocks for durable Eve agents. The package exposes
4
+ only supported runtime, control-plane, observability, memory, and scheduling
5
+ entrypoints; tenant products own their model catalog, aliases, tools, prompts,
6
+ credentials, databases, and deployment.
7
+
8
+ The source package exports TypeScript inside this monorepo. Published tarballs
9
+ export compiled ESM and declarations from `dist/` and are proven by the
10
+ clean-room consumer contract in `scripts/test-eve-core-package.sh`.
11
+
12
+ The consumer fixture uses `skipLibCheck` because `eve@0.12.0` currently ships
13
+ declarations that reference a missing generated chat chunk. Eve Core's own
14
+ declarations are emitted under strict TypeScript first, and the scratch runtime
15
+ imports every advertised subpath; ownership of the upstream Eve patch remains
16
+ an explicit requirement for a standalone product repository.
@@ -0,0 +1,47 @@
1
+ type Priority = "interactive" | "elevated" | "background";
2
+ export interface SlotMeta {
3
+ modelId?: string;
4
+ flow?: string;
5
+ }
6
+ export interface SlotHolder {
7
+ ticket: number;
8
+ priority: Priority;
9
+ acquiredAt: number;
10
+ sessionId?: string;
11
+ flow?: string;
12
+ modelId?: string;
13
+ }
14
+ export interface QueuedSlot {
15
+ priority: Priority;
16
+ enqueuedAt: number;
17
+ sessionId?: string;
18
+ flow?: string;
19
+ modelId?: string;
20
+ }
21
+ export interface SemaphoreSnapshot {
22
+ limit: number;
23
+ effectiveLimit: number;
24
+ reservedBackground: number;
25
+ rampActive: boolean;
26
+ active: number;
27
+ activeByPriority: {
28
+ interactive: number;
29
+ elevated: number;
30
+ background: number;
31
+ };
32
+ holders: SlotHolder[];
33
+ queued: QueuedSlot[];
34
+ }
35
+ export declare function acquireSlot(env?: NodeJS.ProcessEnv, priority?: Priority, meta?: SlotMeta): Promise<number>;
36
+ export declare function releaseSlot(env?: NodeJS.ProcessEnv, priority?: Priority, ticket?: number): void;
37
+ export declare function snapshotSemaphore(env?: NodeJS.ProcessEnv): SemaphoreSnapshot;
38
+ export declare function _activeSlots(): number;
39
+ export declare function _queuedSlots(): number;
40
+ export declare function _resetSemaphore(): void;
41
+ export declare function __setRampTestHooks(hooks: {
42
+ now: () => number;
43
+ schedule: (cb: () => void, ms: number) => ReturnType<typeof setTimeout>;
44
+ cancel: (t: ReturnType<typeof setTimeout>) => void;
45
+ }): void;
46
+ export {};
47
+ //# sourceMappingURL=llm-semaphore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-semaphore.d.ts","sourceRoot":"","sources":["../../src/agent-lib/llm-semaphore.ts"],"names":[],"mappings":"AA0CA,KAAK,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,CAAC;AAG1D,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAuKD,wBAAgB,WAAW,CACzB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,QAAuB,EACjC,IAAI,GAAE,QAAa,GAClB,OAAO,CAAC,MAAM,CAAC,CAmDjB;AAoBD,wBAAgB,WAAW,CACzB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,QAAuB,EACjC,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAkBN;AAID,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,iBAAiB,CA2BzF;AAGD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AACD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AACD,wBAAgB,eAAe,IAAI,IAAI,CAiBtC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IACxE,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,IAAI,CAAC;CACpD,GAAG,IAAI,CAIP"}
@@ -0,0 +1,255 @@
1
+ import { readLlmConcurrency, readLlmRamp, readReservedBackground, } from "../lib/models/llm-concurrency.js";
2
+ import { assertTokenBudget } from "../lib/budgets/token-budget.js";
3
+ let active = 0;
4
+ let activeInteractive = 0;
5
+ let activeElevated = 0;
6
+ const activeForeground = () => activeInteractive + activeElevated;
7
+ const interactiveQueue = [];
8
+ const elevatedQueue = [];
9
+ const backgroundQueue = [];
10
+ const holders = new Map();
11
+ let nextTicket = 1;
12
+ let burstStartedAt = null;
13
+ let rampTimer = null;
14
+ let nowFn = () => Date.now();
15
+ let scheduleFn = (cb, ms) => setTimeout(cb, ms);
16
+ let cancelFn = (t) => clearTimeout(t);
17
+ const EVE_CONTEXT_STORAGE_KEY = Symbol.for("eve.context-storage");
18
+ const SESSION_ID_KEY = { name: "eve.sessionId" };
19
+ const PARENT_SESSION_KEY = { name: "eve.parentSession" };
20
+ function ambientContext() {
21
+ const als = globalThis[EVE_CONTEXT_STORAGE_KEY];
22
+ const ctx = als?.getStore?.();
23
+ return ctx && typeof ctx.get === "function" ? ctx : undefined;
24
+ }
25
+ function ambientSessionId() {
26
+ const ctx = ambientContext();
27
+ if (!ctx)
28
+ return undefined;
29
+ try {
30
+ const sid = ctx.get(SESSION_ID_KEY);
31
+ return typeof sid === "string" && sid ? sid : undefined;
32
+ }
33
+ catch {
34
+ return undefined;
35
+ }
36
+ }
37
+ function ambientRootId() {
38
+ const ctx = ambientContext();
39
+ if (!ctx)
40
+ return undefined;
41
+ try {
42
+ const parent = ctx.get(PARENT_SESSION_KEY);
43
+ const root = parent?.rootSessionId;
44
+ return typeof root === "string" && root ? root : undefined;
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ }
50
+ function effectiveLimit(env, now) {
51
+ const hard = readLlmConcurrency(env);
52
+ const { batch, intervalMs } = readLlmRamp(env);
53
+ if (batch <= 0 || intervalMs <= 0 || batch >= hard || burstStartedAt === null)
54
+ return hard;
55
+ const steps = 1 + Math.floor((now - burstStartedAt) / intervalMs);
56
+ return Math.min(hard, batch * steps);
57
+ }
58
+ function foregroundCapNow(env, limit) {
59
+ const reserved = Math.min(readReservedBackground(env), Math.max(0, limit - 1));
60
+ return Math.max(0, limit - reserved);
61
+ }
62
+ function admitOne(meta) {
63
+ const ticket = nextTicket++;
64
+ holders.set(ticket, {
65
+ ticket,
66
+ priority: meta.priority,
67
+ acquiredAt: nowFn(),
68
+ sessionId: meta.sessionId,
69
+ flow: meta.flow,
70
+ modelId: meta.modelId,
71
+ });
72
+ return ticket;
73
+ }
74
+ function admit(env) {
75
+ const now = nowFn();
76
+ const limit = effectiveLimit(env, now);
77
+ const foregroundCap = foregroundCapNow(env, limit);
78
+ while (interactiveQueue.length > 0 && active < limit && activeForeground() < foregroundCap) {
79
+ active += 1;
80
+ activeInteractive += 1;
81
+ const waiter = interactiveQueue.shift();
82
+ if (waiter)
83
+ waiter.resolve(admitOne(waiter));
84
+ }
85
+ while (elevatedQueue.length > 0 && active < limit && activeForeground() < foregroundCap) {
86
+ active += 1;
87
+ activeElevated += 1;
88
+ const waiter = elevatedQueue.shift();
89
+ if (waiter)
90
+ waiter.resolve(admitOne(waiter));
91
+ }
92
+ while (backgroundQueue.length > 0 && active < limit) {
93
+ active += 1;
94
+ const waiter = backgroundQueue.shift();
95
+ if (waiter)
96
+ waiter.resolve(admitOne(waiter));
97
+ }
98
+ scheduleRampWake(env);
99
+ }
100
+ function scheduleRampWake(env) {
101
+ if (rampTimer !== null ||
102
+ (interactiveQueue.length === 0 && elevatedQueue.length === 0 && backgroundQueue.length === 0) ||
103
+ burstStartedAt === null)
104
+ return;
105
+ const now = nowFn();
106
+ if (effectiveLimit(env, now) >= readLlmConcurrency(env))
107
+ return;
108
+ const { intervalMs } = readLlmRamp(env);
109
+ if (intervalMs <= 0)
110
+ return;
111
+ const steps = 1 + Math.floor((now - burstStartedAt) / intervalMs);
112
+ const delay = Math.max(0, burstStartedAt + steps * intervalMs - now);
113
+ rampTimer = scheduleFn(() => {
114
+ rampTimer = null;
115
+ admit(env);
116
+ }, delay);
117
+ if (typeof rampTimer === "object" && rampTimer !== null && "unref" in rampTimer) {
118
+ rampTimer.unref();
119
+ }
120
+ }
121
+ export function acquireSlot(env = process.env, priority = "background", meta = {}) {
122
+ const sessionId = ambientSessionId();
123
+ const rootId = ambientRootId();
124
+ assertTokenBudget({
125
+ ...(sessionId ? { sessionId } : {}),
126
+ ...(rootId ? { rootId } : {}),
127
+ ...(meta.flow ? { flow: meta.flow } : {}),
128
+ });
129
+ const now = nowFn();
130
+ if (active === 0 && burstStartedAt === null)
131
+ burstStartedAt = now;
132
+ const limit = effectiveLimit(env, now);
133
+ const foregroundCap = foregroundCapNow(env, limit);
134
+ if (priority === "interactive") {
135
+ if (active < limit && activeForeground() < foregroundCap) {
136
+ active += 1;
137
+ activeInteractive += 1;
138
+ return Promise.resolve(admitOne({ priority, sessionId, ...meta }));
139
+ }
140
+ return new Promise((resolve) => {
141
+ interactiveQueue.push({ resolve, priority, enqueuedAt: now, sessionId, ...meta });
142
+ scheduleRampWake(env);
143
+ });
144
+ }
145
+ if (priority === "elevated") {
146
+ if (active < limit && activeForeground() < foregroundCap && interactiveQueue.length === 0) {
147
+ active += 1;
148
+ activeElevated += 1;
149
+ return Promise.resolve(admitOne({ priority, sessionId, ...meta }));
150
+ }
151
+ return new Promise((resolve) => {
152
+ elevatedQueue.push({ resolve, priority, enqueuedAt: now, sessionId, ...meta });
153
+ scheduleRampWake(env);
154
+ });
155
+ }
156
+ if (active < limit) {
157
+ active += 1;
158
+ return Promise.resolve(admitOne({ priority, sessionId, ...meta }));
159
+ }
160
+ return new Promise((resolve) => {
161
+ backgroundQueue.push({ resolve, priority, enqueuedAt: now, sessionId, ...meta });
162
+ scheduleRampWake(env);
163
+ });
164
+ }
165
+ function retireHolder(priority, ticket) {
166
+ if (ticket !== undefined) {
167
+ holders.delete(ticket);
168
+ return;
169
+ }
170
+ let oldest;
171
+ for (const h of holders.values()) {
172
+ if (h.priority !== priority)
173
+ continue;
174
+ if (!oldest || h.acquiredAt < oldest.acquiredAt)
175
+ oldest = h;
176
+ }
177
+ if (oldest)
178
+ holders.delete(oldest.ticket);
179
+ }
180
+ export function releaseSlot(env = process.env, priority = "background", ticket) {
181
+ if (active > 0)
182
+ active -= 1;
183
+ if (priority === "interactive" && activeInteractive > 0)
184
+ activeInteractive -= 1;
185
+ else if (priority === "elevated" && activeElevated > 0)
186
+ activeElevated -= 1;
187
+ retireHolder(priority, ticket);
188
+ if (active === 0 &&
189
+ interactiveQueue.length === 0 &&
190
+ elevatedQueue.length === 0 &&
191
+ backgroundQueue.length === 0) {
192
+ burstStartedAt = null;
193
+ if (rampTimer !== null) {
194
+ cancelFn(rampTimer);
195
+ rampTimer = null;
196
+ }
197
+ }
198
+ admit(env);
199
+ }
200
+ export function snapshotSemaphore(env = process.env) {
201
+ const now = nowFn();
202
+ const limit = readLlmConcurrency(env);
203
+ const eff = effectiveLimit(env, now);
204
+ const queued = [...interactiveQueue, ...elevatedQueue, ...backgroundQueue].map((w) => ({
205
+ priority: w.priority,
206
+ enqueuedAt: w.enqueuedAt,
207
+ sessionId: w.sessionId,
208
+ flow: w.flow,
209
+ modelId: w.modelId,
210
+ }));
211
+ return {
212
+ limit,
213
+ effectiveLimit: eff,
214
+ reservedBackground: Math.min(readReservedBackground(env), Math.max(0, limit - 1)),
215
+ rampActive: burstStartedAt !== null && eff < limit,
216
+ active,
217
+ activeByPriority: {
218
+ interactive: activeInteractive,
219
+ elevated: activeElevated,
220
+ background: active - activeInteractive - activeElevated,
221
+ },
222
+ holders: [...holders.values()].sort((a, b) => a.acquiredAt - b.acquiredAt),
223
+ queued,
224
+ };
225
+ }
226
+ export function _activeSlots() {
227
+ return active;
228
+ }
229
+ export function _queuedSlots() {
230
+ return interactiveQueue.length + elevatedQueue.length + backgroundQueue.length;
231
+ }
232
+ export function _resetSemaphore() {
233
+ active = 0;
234
+ activeInteractive = 0;
235
+ activeElevated = 0;
236
+ interactiveQueue.length = 0;
237
+ elevatedQueue.length = 0;
238
+ backgroundQueue.length = 0;
239
+ holders.clear();
240
+ nextTicket = 1;
241
+ burstStartedAt = null;
242
+ if (rampTimer !== null) {
243
+ cancelFn(rampTimer);
244
+ rampTimer = null;
245
+ }
246
+ nowFn = () => Date.now();
247
+ scheduleFn = (cb, ms) => setTimeout(cb, ms);
248
+ cancelFn = (t) => clearTimeout(t);
249
+ }
250
+ export function __setRampTestHooks(hooks) {
251
+ nowFn = hooks.now;
252
+ scheduleFn = hooks.schedule;
253
+ cancelFn = hooks.cancel;
254
+ }
255
+ //# sourceMappingURL=llm-semaphore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-semaphore.js","sourceRoot":"","sources":["../../src/agent-lib/llm-semaphore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type ToolContext, type ToolDefinition } from "eve/tools";
2
+ type NeedsApprovalCtx = {
3
+ approvedTools: ReadonlySet<string>;
4
+ toolInput?: unknown;
5
+ toolName: string;
6
+ };
7
+ type StandardSchema<Output> = {
8
+ readonly "~standard": {
9
+ readonly types?: {
10
+ readonly output: Output;
11
+ } | undefined;
12
+ };
13
+ };
14
+ type InferOutput<S> = S extends StandardSchema<infer O> ? O : Record<string, unknown>;
15
+ interface ManagedToolDef<TSchema, TOutput> {
16
+ description: string;
17
+ inputSchema: TSchema;
18
+ execute: (input: InferOutput<TSchema>, ctx: ToolContext) => Promise<TOutput> | TOutput;
19
+ }
20
+ interface ManagedToolOpts {
21
+ approvalFloor?: (ctx: NeedsApprovalCtx) => boolean;
22
+ }
23
+ export declare function defineManagedTool<TSchema, TOutput>(slug: string, def: ManagedToolDef<TSchema, TOutput>, opts?: ManagedToolOpts): ToolDefinition<InferOutput<TSchema>, TOutput | {
24
+ ok: false;
25
+ disabled: true;
26
+ message: string;
27
+ }>;
28
+ export {};
29
+ //# sourceMappingURL=managed-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-tool.d.ts","sourceRoot":"","sources":["../../src/agent-lib/managed-tool.ts"],"names":[],"mappings":"AAYA,OAAO,EAAc,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAI9E,KAAK,gBAAgB,GAAG;IACtB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,KAAK,cAAc,CAAC,MAAM,IAAI;IAC5B,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE;YAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAA;KAAE,CAAC;CACpF,CAAC;AACF,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtF,UAAU,cAAc,CAAC,OAAO,EAAE,OAAO;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACxF;AAED,UAAU,eAAe;IAGvB,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC;CACpD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAChD,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,EACrC,IAAI,GAAE,eAAoB,GACzB,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BhG"}
@@ -0,0 +1,28 @@
1
+ import { defineTool } from "eve/tools";
2
+ import { withCallContext } from "../lib/control-plane/call-context.js";
3
+ import { isEnabled, mapApproval, toolConfig } from "../lib/control-plane/tools-config.js";
4
+ export function defineManagedTool(slug, def, opts = {}) {
5
+ return defineTool({
6
+ description: def.description,
7
+ inputSchema: def.inputSchema,
8
+ needsApproval: (ctx) => {
9
+ if (opts.approvalFloor?.(ctx))
10
+ return true;
11
+ return mapApproval(toolConfig(slug).approval, ctx);
12
+ },
13
+ execute: (input, toolCtx) => {
14
+ if (!isEnabled(slug)) {
15
+ return {
16
+ ok: false,
17
+ disabled: true,
18
+ message: `Tool ${slug} is disabled by the operator. Do not retry.`,
19
+ };
20
+ }
21
+ const sessionId = toolCtx.session?.id;
22
+ if (!sessionId)
23
+ return def.execute(input, toolCtx);
24
+ return withCallContext({ sessionId, rootId: toolCtx.session.parent?.rootSessionId ?? sessionId }, () => def.execute(input, toolCtx));
25
+ },
26
+ });
27
+ }
28
+ //# sourceMappingURL=managed-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-tool.js","sourceRoot":"","sources":["../../src/agent-lib/managed-tool.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAyC,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AA2B1F,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,GAAqC,EACrC,OAAwB,EAAE;IAE1B,OAAO,UAAU,CAAC;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAoB;QACrC,aAAa,EAAE,CAAC,GAAqB,EAAE,EAAE;YACvC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3C,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,EAAE,CAAC,KAA2B,EAAE,OAAoB,EAAE,EAAE;YAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO;oBACL,EAAE,EAAE,KAAc;oBAClB,QAAQ,EAAE,IAAa;oBACvB,OAAO,EAAE,QAAQ,IAAI,6CAA6C;iBACnE,CAAC;YACJ,CAAC;YAGD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACnD,OAAO,eAAe,CACpB,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI,SAAS,EAAE,EACzE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAClC,CAAC;QACJ,CAAC;KACF,CAGA,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("eve/channels").Channel<undefined, Record<string, unknown>, Record<string, unknown>>;
2
+ export default _default;
3
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/channels/catalog.ts"],"names":[],"mappings":";AAaA,wBAgBG"}
@@ -0,0 +1,20 @@
1
+ import { defineChannel, GET } from "eve/channels";
2
+ import { buildCatalog } from "../lib/control-plane/catalog.js";
3
+ import { tenant } from "../tenant.js";
4
+ import { logger } from "../lib/observability/logger.js";
5
+ const log = logger.child({ module: "catalog" });
6
+ export default defineChannel({
7
+ routes: [
8
+ GET("/eve/v1/catalog", async () => {
9
+ try {
10
+ const role = tenant().activeRole?.() ?? undefined;
11
+ return Response.json(role ? { role, ...buildCatalog(role) } : buildCatalog());
12
+ }
13
+ catch (err) {
14
+ log.error({ err }, "failed to build catalog");
15
+ return Response.json({ error: "failed to build catalog" }, { status: 500 });
16
+ }
17
+ }),
18
+ ],
19
+ });
20
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/channels/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAQhD,eAAe,aAAa,CAAC;IAC3B,MAAM,EAAE;QACN,GAAG,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBAIH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,IAAI,SAAS,CAAC;gBAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;YAChF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAEb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;gBAC9C,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC,CAAC;KACH;CACF,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("eve/channels").Channel<undefined, Record<string, unknown>, Record<string, unknown>>;
2
+ export default _default;
3
+ //# sourceMappingURL=model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/channels/model-catalog.ts"],"names":[],"mappings":";AAOA,wBAEG"}
@@ -0,0 +1,6 @@
1
+ import { defineChannel, GET } from "eve/channels";
2
+ import { readModelCatalog } from "../lib/models/model-catalog.js";
3
+ export default defineChannel({
4
+ routes: [GET("/eve/v1/model-catalog", async () => Response.json(await readModelCatalog()))],
5
+ });
6
+ //# sourceMappingURL=model-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/channels/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAMlE,eAAe,aAAa,CAAC;IAC3B,MAAM,EAAE,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,CAAC;CAC5F,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("eve/channels").Channel<undefined, Record<string, unknown>, Record<string, unknown>>;
2
+ export default _default;
3
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/channels/usage.ts"],"names":[],"mappings":";AAiBA,wBAiCG"}
@@ -0,0 +1,35 @@
1
+ import { defineChannel, GET } from "eve/channels";
2
+ import { logger } from "../lib/observability/logger.js";
3
+ import { readRunUsageByModel } from "../lib/budgets/token-usage-pg.js";
4
+ import { buildRunUsage, buildUsage, buildUsageLogs, UsageQueryError, } from "../lib/budgets/usage.js";
5
+ const log = logger.child({ module: "usage" });
6
+ export default defineChannel({
7
+ routes: [
8
+ GET("/eve/v1/usage", async (req) => {
9
+ try {
10
+ return Response.json(await buildUsage(req.url, new Date()));
11
+ }
12
+ catch (err) {
13
+ if (err instanceof UsageQueryError) {
14
+ return Response.json({ error: err.message }, { status: 400 });
15
+ }
16
+ log.error({ err }, "failed to build usage aggregate");
17
+ return Response.json({ error: "failed to build usage" }, { status: 500 });
18
+ }
19
+ }),
20
+ GET("/eve/v1/usage/run/:id", async (_req, { params }) => {
21
+ const rows = await readRunUsageByModel(params.id);
22
+ return Response.json(buildRunUsage(params.id, rows, new Date()));
23
+ }),
24
+ GET("/eve/v1/usage/logs", async (req) => {
25
+ try {
26
+ return Response.json(await buildUsageLogs(req.url, new Date()));
27
+ }
28
+ catch (err) {
29
+ log.error({ err }, "failed to build usage logs");
30
+ return Response.json({ error: "failed to build usage logs" }, { status: 500 });
31
+ }
32
+ }),
33
+ ],
34
+ });
35
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/channels/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAO9C,eAAe,aAAa,CAAC;IAC3B,MAAM,EAAE;QACN,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACjC,IAAI,CAAC;gBACH,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAEb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;oBACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChE,CAAC;gBAED,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,iCAAiC,CAAC,CAAC;gBACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC;QAMF,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC;QACF,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC;gBACH,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;gBACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC,CAAC;KACH;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function writeFileAtomicSync(file: string, data: string | Uint8Array): void;
2
+ //# sourceMappingURL=atomic-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-file.d.ts","sourceRoot":"","sources":["../../src/lib/atomic-file.ts"],"names":[],"mappings":"AAaA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAWjF"}
@@ -0,0 +1,16 @@
1
+ import { closeSync, fsyncSync, mkdirSync, openSync, renameSync, writeFileSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ export function writeFileAtomicSync(file, data) {
4
+ mkdirSync(dirname(file), { recursive: true });
5
+ const tmp = `${file}.tmp-${process.pid}`;
6
+ const fd = openSync(tmp, "w");
7
+ try {
8
+ writeFileSync(fd, data);
9
+ fsyncSync(fd);
10
+ }
11
+ finally {
12
+ closeSync(fd);
13
+ }
14
+ renameSync(tmp, file);
15
+ }
16
+ //# sourceMappingURL=atomic-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-file.js","sourceRoot":"","sources":["../../src/lib/atomic-file.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAAyB;IACzE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACxB,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type CallContext } from "../control-plane/call-context.js";
2
+ import { type UsageRow } from "./token-usage-pg.js";
3
+ export interface CallTokens {
4
+ input?: number;
5
+ output?: number;
6
+ cacheRead?: number;
7
+ cacheWrite?: number;
8
+ }
9
+ export interface CallUsageArgs {
10
+ model: string;
11
+ flow: string;
12
+ tokens: CallTokens;
13
+ at?: string;
14
+ }
15
+ export declare function callUsageRow(args: CallUsageArgs, ctx: CallContext | undefined, at: string): UsageRow;
16
+ export declare function callTokensFrom(usage: {
17
+ inputTokens?: number;
18
+ outputTokens?: number;
19
+ inputTokenDetails?: {
20
+ cacheReadTokens?: number;
21
+ cacheWriteTokens?: number;
22
+ };
23
+ } | undefined): CallTokens;
24
+ export declare function anthropicCallTokens(usage: {
25
+ input_tokens?: number;
26
+ output_tokens?: number;
27
+ cache_read_input_tokens?: number;
28
+ cache_creation_input_tokens?: number;
29
+ } | undefined): CallTokens;
30
+ export declare function recordCallUsage(args: CallUsageArgs): void;
31
+ //# sourceMappingURL=record-call-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-call-usage.d.ts","sourceRoot":"","sources":["../../../src/lib/budgets/record-call-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAUjE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAGD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,EAAE,EAAE,MAAM,GACT,QAAQ,CAgBV;AAMD,wBAAgB,cAAc,CAC5B,KAAK,EACD;IACE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E,GACD,SAAS,GACZ,UAAU,CAOZ;AAQD,wBAAgB,mBAAmB,CACjC,KAAK,EACD;IACE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC,GACD,SAAS,GACZ,UAAU,CAYZ;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAGzD"}
@@ -0,0 +1,44 @@
1
+ import { currentCallContext } from "../control-plane/call-context.js";
2
+ import { recordUsage } from "./token-usage-pg.js";
3
+ export function callUsageRow(args, ctx, at) {
4
+ const sessionId = ctx?.sessionId ?? `orphan:${args.flow}`;
5
+ return {
6
+ sessionId,
7
+ rootId: ctx?.rootId ?? sessionId,
8
+ flow: args.flow,
9
+ model: args.model,
10
+ turnId: null,
11
+ stepIndex: null,
12
+ at,
13
+ input: args.tokens.input ?? 0,
14
+ output: args.tokens.output ?? 0,
15
+ cacheRead: args.tokens.cacheRead ?? 0,
16
+ cacheWrite: args.tokens.cacheWrite ?? 0,
17
+ instance: process.env.EVE_INSTANCE ?? "eve",
18
+ };
19
+ }
20
+ export function callTokensFrom(usage) {
21
+ return {
22
+ input: usage?.inputTokens,
23
+ output: usage?.outputTokens,
24
+ cacheRead: usage?.inputTokenDetails?.cacheReadTokens,
25
+ cacheWrite: usage?.inputTokenDetails?.cacheWriteTokens,
26
+ };
27
+ }
28
+ export function anthropicCallTokens(usage) {
29
+ const cacheRead = usage?.cache_read_input_tokens;
30
+ const cacheWrite = usage?.cache_creation_input_tokens;
31
+ return {
32
+ input: usage?.input_tokens !== undefined
33
+ ? usage.input_tokens + (cacheRead ?? 0) + (cacheWrite ?? 0)
34
+ : undefined,
35
+ output: usage?.output_tokens,
36
+ cacheRead,
37
+ cacheWrite,
38
+ };
39
+ }
40
+ export function recordCallUsage(args) {
41
+ const at = args.at ?? new Date().toISOString();
42
+ void recordUsage(callUsageRow(args, currentCallContext(), at));
43
+ }
44
+ //# sourceMappingURL=record-call-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-call-usage.js","sourceRoot":"","sources":["../../../src/lib/budgets/record-call-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAyBjE,MAAM,UAAU,YAAY,CAC1B,IAAmB,EACnB,GAA4B,EAC5B,EAAU;IAEV,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO;QACL,SAAS;QACT,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,SAAS;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,EAAE;QACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;QAC/B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;QACrC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC;QACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,KAAK;KAC5C,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,cAAc,CAC5B,KAMa;IAEb,OAAO;QACL,KAAK,EAAE,KAAK,EAAE,WAAW;QACzB,MAAM,EAAE,KAAK,EAAE,YAAY;QAC3B,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe;QACpD,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB;KACvD,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,mBAAmB,CACjC,KAOa;IAEb,MAAM,SAAS,GAAG,KAAK,EAAE,uBAAuB,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,EAAE,2BAA2B,CAAC;IACtD,OAAO;QACL,KAAK,EACH,KAAK,EAAE,YAAY,KAAK,SAAS;YAC/B,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;YAC3D,CAAC,CAAC,SAAS;QACf,MAAM,EAAE,KAAK,EAAE,aAAa;QAC5B,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,IAAmB;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,KAAK,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC"}