@framers/agentos 0.12.24 → 0.13.2
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/README.md +11 -11
- package/dist/api/AgentOS.d.ts +15 -0
- package/dist/api/AgentOS.d.ts.map +1 -1
- package/dist/api/AgentOS.js +82 -0
- package/dist/api/AgentOS.js.map +1 -1
- package/dist/api/agent.d.ts +7 -3
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js.map +1 -1
- package/dist/api/embedText.d.ts.map +1 -1
- package/dist/api/embedText.js +1 -8
- package/dist/api/embedText.js.map +1 -1
- package/dist/api/gmi.d.ts.map +1 -1
- package/dist/api/gmi.js +38 -19
- package/dist/api/gmi.js.map +1 -1
- package/dist/api/runtime/AgentOSOrchestrator.d.ts.map +1 -1
- package/dist/api/runtime/AgentOSOrchestrator.js +23 -0
- package/dist/api/runtime/AgentOSOrchestrator.js.map +1 -1
- package/dist/api/runtime/agentCognitiveMemory.d.ts +12 -9
- package/dist/api/runtime/agentCognitiveMemory.d.ts.map +1 -1
- package/dist/api/runtime/agentCognitiveMemory.js +53 -17
- package/dist/api/runtime/agentCognitiveMemory.js.map +1 -1
- package/dist/api/runtime/completionGateway.d.ts.map +1 -1
- package/dist/api/runtime/completionGateway.js +7 -0
- package/dist/api/runtime/completionGateway.js.map +1 -1
- package/dist/api/runtime/gmiResults.d.ts +63 -6
- package/dist/api/runtime/gmiResults.d.ts.map +1 -1
- package/dist/api/runtime/gmiResults.js +83 -13
- package/dist/api/runtime/gmiResults.js.map +1 -1
- package/dist/api/runtime/gmiSession.d.ts +31 -6
- package/dist/api/runtime/gmiSession.d.ts.map +1 -1
- package/dist/api/runtime/gmiSession.js +144 -44
- package/dist/api/runtime/gmiSession.js.map +1 -1
- package/dist/api/runtime/gmiTranscript.d.ts +7 -6
- package/dist/api/runtime/gmiTranscript.d.ts.map +1 -1
- package/dist/api/runtime/gmiTranscript.js +6 -5
- package/dist/api/runtime/gmiTranscript.js.map +1 -1
- package/dist/api/runtime/provider-defaults.d.ts +9 -0
- package/dist/api/runtime/provider-defaults.d.ts.map +1 -1
- package/dist/api/runtime/provider-defaults.js +9 -0
- package/dist/api/runtime/provider-defaults.js.map +1 -1
- package/dist/api/types/AgentOSInput.d.ts +5 -0
- package/dist/api/types/AgentOSInput.d.ts.map +1 -1
- package/dist/api/types/OrchestratorConfig.d.ts +3 -0
- package/dist/api/types/OrchestratorConfig.d.ts.map +1 -1
- package/dist/cognition/emergent/executor/QuickJSExecutor.d.ts +8 -0
- package/dist/cognition/emergent/executor/QuickJSExecutor.d.ts.map +1 -1
- package/dist/cognition/emergent/executor/QuickJSExecutor.js +193 -36
- package/dist/cognition/emergent/executor/QuickJSExecutor.js.map +1 -1
- package/dist/cognition/emergent/executor/guest-prelude.d.ts +4 -0
- package/dist/cognition/emergent/executor/guest-prelude.d.ts.map +1 -1
- package/dist/cognition/emergent/executor/guest-prelude.js +21 -1
- package/dist/cognition/emergent/executor/guest-prelude.js.map +1 -1
- package/dist/cognition/emergent/executor/guest-surface.d.ts.map +1 -1
- package/dist/cognition/emergent/executor/guest-surface.js +7 -2
- package/dist/cognition/emergent/executor/guest-surface.js.map +1 -1
- package/dist/cognition/memory/CognitiveMemoryManager.d.ts +28 -21
- package/dist/cognition/memory/CognitiveMemoryManager.d.ts.map +1 -1
- package/dist/cognition/memory/CognitiveMemoryManager.js +76 -26
- package/dist/cognition/memory/CognitiveMemoryManager.js.map +1 -1
- package/dist/cognition/memory/retrieval/store/MemoryStore.d.ts +10 -2
- package/dist/cognition/memory/retrieval/store/MemoryStore.d.ts.map +1 -1
- package/dist/cognition/memory/retrieval/store/MemoryStore.js +11 -2
- package/dist/cognition/memory/retrieval/store/MemoryStore.js.map +1 -1
- package/dist/cognition/substrate/ConversationHistoryManager.d.ts +3 -1
- package/dist/cognition/substrate/ConversationHistoryManager.d.ts.map +1 -1
- package/dist/cognition/substrate/ConversationHistoryManager.js +9 -2
- package/dist/cognition/substrate/ConversationHistoryManager.js.map +1 -1
- package/dist/cognition/substrate/GMI.d.ts +33 -2
- package/dist/cognition/substrate/GMI.d.ts.map +1 -1
- package/dist/cognition/substrate/GMI.js +225 -71
- package/dist/cognition/substrate/GMI.js.map +1 -1
- package/dist/cognition/substrate/IGMI.d.ts +14 -3
- package/dist/cognition/substrate/IGMI.d.ts.map +1 -1
- package/dist/cognition/substrate/IGMI.js +2 -1
- package/dist/cognition/substrate/IGMI.js.map +1 -1
- package/dist/cognition/substrate/SentimentTracker.d.ts +8 -0
- package/dist/cognition/substrate/SentimentTracker.d.ts.map +1 -1
- package/dist/cognition/substrate/SentimentTracker.js +20 -0
- package/dist/cognition/substrate/SentimentTracker.js.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.js +23 -4
- package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -1
- package/dist/core/utils/errors.d.ts +4 -0
- package/dist/core/utils/errors.d.ts.map +1 -1
- package/dist/core/utils/errors.js +8 -0
- package/dist/core/utils/errors.js.map +1 -1
- package/dist/extensions/ExtensionRegistry.d.ts.map +1 -1
- package/dist/extensions/ExtensionRegistry.js +4 -1
- package/dist/extensions/ExtensionRegistry.js.map +1 -1
- package/dist/io/speech/SpeechRuntime.d.ts.map +1 -1
- package/dist/io/speech/SpeechRuntime.js +5 -0
- package/dist/io/speech/SpeechRuntime.js.map +1 -1
- package/dist/io/speech/providers/MiniMaxTextToSpeechProvider.d.ts +34 -3
- package/dist/io/speech/providers/MiniMaxTextToSpeechProvider.d.ts.map +1 -1
- package/dist/io/speech/providers/MiniMaxTextToSpeechProvider.js +120 -11
- package/dist/io/speech/providers/MiniMaxTextToSpeechProvider.js.map +1 -1
- package/dist/safety/runtime/SpendMeter.d.ts +135 -0
- package/dist/safety/runtime/SpendMeter.d.ts.map +1 -0
- package/dist/safety/runtime/SpendMeter.js +61 -0
- package/dist/safety/runtime/SpendMeter.js.map +1 -0
- package/dist/safety/runtime/SqlSpendMeter.d.ts +78 -0
- package/dist/safety/runtime/SqlSpendMeter.d.ts.map +1 -0
- package/dist/safety/runtime/SqlSpendMeter.js +268 -0
- package/dist/safety/runtime/SqlSpendMeter.js.map +1 -0
- package/dist/safety/runtime/index.d.ts +4 -0
- package/dist/safety/runtime/index.d.ts.map +1 -1
- package/dist/safety/runtime/index.js +2 -0
- package/dist/safety/runtime/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { DEFAULT_SPEND_RETRY_POLICY, isTransientStorageError, SpendMeterUnavailableError, withBoundedRetry, } from './SpendMeter.js';
|
|
2
|
+
/**
|
|
3
|
+
* The meter's two tables. Every time is epoch milliseconds in a BIGINT. There is no literal question mark anywhere in
|
|
4
|
+
* the text: the Postgres adapter rewrites each one to a numbered parameter. A product that runs its own migrations
|
|
5
|
+
* copies this text into one of them and passes `ensureSchema: false`.
|
|
6
|
+
*/
|
|
7
|
+
export const SPEND_METER_DDL = `
|
|
8
|
+
CREATE TABLE IF NOT EXISTS agentos_spend_meter (
|
|
9
|
+
account_id TEXT NOT NULL,
|
|
10
|
+
period TEXT NOT NULL,
|
|
11
|
+
allowance BIGINT NOT NULL,
|
|
12
|
+
used BIGINT NOT NULL DEFAULT 0,
|
|
13
|
+
reserved BIGINT NOT NULL DEFAULT 0,
|
|
14
|
+
updated_at BIGINT NOT NULL,
|
|
15
|
+
PRIMARY KEY (account_id, period),
|
|
16
|
+
CHECK (used >= 0 AND reserved >= 0)
|
|
17
|
+
);
|
|
18
|
+
CREATE TABLE IF NOT EXISTS agentos_spend_reservations (
|
|
19
|
+
operation_id TEXT PRIMARY KEY,
|
|
20
|
+
account_id TEXT NOT NULL,
|
|
21
|
+
period TEXT NOT NULL,
|
|
22
|
+
units BIGINT NOT NULL,
|
|
23
|
+
state TEXT NOT NULL CHECK (state IN ('reserved', 'consumed', 'released')),
|
|
24
|
+
outcome TEXT,
|
|
25
|
+
attempts BIGINT NOT NULL DEFAULT 1,
|
|
26
|
+
reserved_at BIGINT NOT NULL,
|
|
27
|
+
expires_at BIGINT NOT NULL,
|
|
28
|
+
settled_at BIGINT,
|
|
29
|
+
usage_json TEXT
|
|
30
|
+
);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_spend_reservations_due ON agentos_spend_reservations (state, expires_at);
|
|
32
|
+
`;
|
|
33
|
+
/** Rolls a reservation's transaction back when the allowance has no room; caught inside the same try, never retried. */
|
|
34
|
+
class AllowanceExhausted extends Error {
|
|
35
|
+
constructor(remaining) {
|
|
36
|
+
super('allowance_exhausted');
|
|
37
|
+
this.remaining = remaining;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const num = (v) => (typeof v === 'number' ? v : Number(v ?? 0));
|
|
41
|
+
export class SqlSpendMeter {
|
|
42
|
+
constructor(opts) {
|
|
43
|
+
this.opts = opts;
|
|
44
|
+
this.schemaReady = null;
|
|
45
|
+
this.reconciler = null;
|
|
46
|
+
const caps = opts.db.capabilities;
|
|
47
|
+
if (opts.requireShared !== false && !(caps.has('transactions') && caps.has('persistence') && caps.has('concurrent'))) {
|
|
48
|
+
throw new Error(`SqlSpendMeter needs a store several processes share (transactions, persistence and concurrent access); "${opts.db.kind}" lacks one. Pass requireShared: false for a single process.`);
|
|
49
|
+
}
|
|
50
|
+
if (!caps.has('transactions'))
|
|
51
|
+
throw new Error(`SqlSpendMeter needs a store with transactions; "${opts.db.kind}" has none.`);
|
|
52
|
+
this.db = opts.db;
|
|
53
|
+
this.leaseMs = opts.leaseMs ?? 45000;
|
|
54
|
+
this.maxAttempts = opts.maxAttemptsPerOperation ?? 3;
|
|
55
|
+
this.retry = opts.retry ?? DEFAULT_SPEND_RETRY_POLICY;
|
|
56
|
+
}
|
|
57
|
+
/** Creates the tables unless they answer a read already. Called before the first statement; safe to call again. */
|
|
58
|
+
ensureSchema() {
|
|
59
|
+
if (this.opts.ensureSchema === false)
|
|
60
|
+
return Promise.resolve();
|
|
61
|
+
this.schemaReady ?? (this.schemaReady = (async () => {
|
|
62
|
+
try {
|
|
63
|
+
await this.db.get('SELECT 1 FROM agentos_spend_meter LIMIT 1');
|
|
64
|
+
await this.db.get('SELECT 1 FROM agentos_spend_reservations LIMIT 1');
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
await this.db.exec(SPEND_METER_DDL);
|
|
68
|
+
}
|
|
69
|
+
})().catch((e) => {
|
|
70
|
+
this.schemaReady = null;
|
|
71
|
+
throw e;
|
|
72
|
+
}));
|
|
73
|
+
return this.schemaReady;
|
|
74
|
+
}
|
|
75
|
+
run(fn) {
|
|
76
|
+
return withBoundedRetry(async () => {
|
|
77
|
+
await this.ensureSchema();
|
|
78
|
+
return fn();
|
|
79
|
+
}, this.retry, isTransientStorageError);
|
|
80
|
+
}
|
|
81
|
+
async reserve(req) {
|
|
82
|
+
const now = req.now ?? Date.now();
|
|
83
|
+
const units = Math.max(1, Math.trunc(req.units ?? 1));
|
|
84
|
+
let period;
|
|
85
|
+
let allowance;
|
|
86
|
+
try {
|
|
87
|
+
period = await this.opts.periodOf(now, req.accountId);
|
|
88
|
+
allowance = Math.max(0, Math.trunc(await this.opts.allowanceFor(req.accountId, period)));
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
throw new SpendMeterUnavailableError(`the allowance could not be read: ${e instanceof Error ? e.message : String(e)}`, e);
|
|
92
|
+
}
|
|
93
|
+
const base = { operationId: req.operationId, accountId: req.accountId, period };
|
|
94
|
+
const expiresAt = now + this.leaseMs;
|
|
95
|
+
return this.run(async () => {
|
|
96
|
+
try {
|
|
97
|
+
return await this.db.transaction(async (trx) => {
|
|
98
|
+
// (a) the reservation row: new, or a retry of one that was released
|
|
99
|
+
const inserted = await trx.run(`INSERT INTO agentos_spend_reservations (operation_id, account_id, period, units, state, attempts, reserved_at, expires_at)
|
|
100
|
+
VALUES (?, ?, ?, ?, 'reserved', 1, ?, ?) ON CONFLICT (operation_id) DO NOTHING`, [req.operationId, req.accountId, period, units, now, expiresAt]);
|
|
101
|
+
let attempt = 1;
|
|
102
|
+
if (!inserted.changes) {
|
|
103
|
+
const retried = await trx.run(`UPDATE agentos_spend_reservations
|
|
104
|
+
SET state = 'reserved', attempts = attempts + 1, account_id = ?, period = ?, units = ?, reserved_at = ?, expires_at = ?,
|
|
105
|
+
outcome = NULL, settled_at = NULL, usage_json = NULL
|
|
106
|
+
WHERE operation_id = ? AND state = 'released' AND attempts < ?`, [req.accountId, period, units, now, expiresAt, req.operationId, this.maxAttempts]);
|
|
107
|
+
const row = await trx.get('SELECT state, attempts FROM agentos_spend_reservations WHERE operation_id = ?', [req.operationId]);
|
|
108
|
+
if (!retried.changes) {
|
|
109
|
+
const reason = row?.state === 'reserved' ? 'in_flight' : row?.state === 'consumed' ? 'already_consumed' : 'retries_exhausted';
|
|
110
|
+
return { status: 'denied', reason, ...base, remaining: await this.remainingIn(trx, req.accountId, period, allowance) };
|
|
111
|
+
}
|
|
112
|
+
attempt = num(row?.attempts);
|
|
113
|
+
}
|
|
114
|
+
// (b) the period's row, with the allowance in force today
|
|
115
|
+
await trx.run(`INSERT INTO agentos_spend_meter (account_id, period, allowance, used, reserved, updated_at) VALUES (?, ?, ?, 0, 0, ?)
|
|
116
|
+
ON CONFLICT (account_id, period) DO UPDATE SET allowance = excluded.allowance`, [req.accountId, period, allowance, now]);
|
|
117
|
+
// (c) the units taken only where they fit: the row lock makes concurrent reservations queue here
|
|
118
|
+
const taken = await trx.run(`UPDATE agentos_spend_meter SET reserved = reserved + ?, updated_at = ?
|
|
119
|
+
WHERE account_id = ? AND period = ? AND used + reserved + ? <= allowance`, [units, now, req.accountId, period, units]);
|
|
120
|
+
if (!taken.changes)
|
|
121
|
+
throw new AllowanceExhausted(await this.remainingIn(trx, req.accountId, period, allowance));
|
|
122
|
+
return { status: 'reserved', ...base, units, attempt, remaining: await this.remainingIn(trx, req.accountId, period, allowance), expiresAt };
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
// the transaction rolled (a) and (b) back; the refusal is an answer, not a failure
|
|
127
|
+
if (e instanceof AllowanceExhausted)
|
|
128
|
+
return { status: 'denied', reason: 'allowance_exhausted', ...base, remaining: e.remaining };
|
|
129
|
+
throw e;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async remainingIn(trx, accountId, period, fallbackAllowance) {
|
|
134
|
+
const m = await trx.get('SELECT allowance, used, reserved FROM agentos_spend_meter WHERE account_id = ? AND period = ?', [accountId, period]);
|
|
135
|
+
if (!m)
|
|
136
|
+
return fallbackAllowance;
|
|
137
|
+
return Math.max(0, num(m.allowance) - num(m.used) - num(m.reserved));
|
|
138
|
+
}
|
|
139
|
+
async settle(req) {
|
|
140
|
+
const now = req.now ?? Date.now();
|
|
141
|
+
return this.run(() => this.db.transaction(async (trx) => {
|
|
142
|
+
const row = await trx.get('SELECT operation_id, account_id, period, units, state FROM agentos_spend_reservations WHERE operation_id = ?', [req.operationId]);
|
|
143
|
+
if (!row)
|
|
144
|
+
return { status: 'not_found' };
|
|
145
|
+
const move = transition(row.state, req.outcome);
|
|
146
|
+
if (!move)
|
|
147
|
+
return { status: 'already_settled', state: row.state };
|
|
148
|
+
// the move only from the state just read: a concurrent settle that got there first leaves nothing to change
|
|
149
|
+
const changed = await trx.run(`UPDATE agentos_spend_reservations SET state = ?, outcome = ?, settled_at = ?, usage_json = ? WHERE operation_id = ? AND state = ?`, [move.to, req.outcome, now, req.usage ? JSON.stringify(req.usage) : null, req.operationId, row.state]);
|
|
150
|
+
if (!changed.changes) {
|
|
151
|
+
const current = await trx.get('SELECT state FROM agentos_spend_reservations WHERE operation_id = ?', [req.operationId]);
|
|
152
|
+
return { status: 'already_settled', state: current?.state };
|
|
153
|
+
}
|
|
154
|
+
const units = num(row.units);
|
|
155
|
+
const sets = [];
|
|
156
|
+
const params = [];
|
|
157
|
+
if (move.reserved) {
|
|
158
|
+
sets.push('reserved = CASE WHEN reserved >= ? THEN reserved - ? ELSE 0 END');
|
|
159
|
+
params.push(units, units);
|
|
160
|
+
}
|
|
161
|
+
if (move.used > 0) {
|
|
162
|
+
sets.push('used = used + ?');
|
|
163
|
+
params.push(units);
|
|
164
|
+
}
|
|
165
|
+
else if (move.used < 0) {
|
|
166
|
+
sets.push('used = CASE WHEN used >= ? THEN used - ? ELSE 0 END');
|
|
167
|
+
params.push(units, units);
|
|
168
|
+
}
|
|
169
|
+
sets.push('updated_at = ?');
|
|
170
|
+
params.push(now, row.account_id, row.period);
|
|
171
|
+
await trx.run(`UPDATE agentos_spend_meter SET ${sets.join(', ')} WHERE account_id = ? AND period = ?`, params);
|
|
172
|
+
return { status: 'settled', state: move.to };
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
async heartbeat(operationId, now = Date.now()) {
|
|
176
|
+
// every write goes through a transaction: on a single-connection SQLite store that is what keeps it out of another's
|
|
177
|
+
await this.run(() => this.db.transaction((trx) => trx.run(`UPDATE agentos_spend_reservations SET expires_at = ? WHERE operation_id = ? AND state = 'reserved' AND expires_at < ?`, [
|
|
178
|
+
now + this.leaseMs,
|
|
179
|
+
operationId,
|
|
180
|
+
now + this.leaseMs,
|
|
181
|
+
])));
|
|
182
|
+
}
|
|
183
|
+
async reconcile(opts = {}) {
|
|
184
|
+
const now = opts.now ?? Date.now();
|
|
185
|
+
const limit = Math.max(1, Math.trunc(opts.limit ?? 100));
|
|
186
|
+
const due = await this.run(() => this.db.all(`SELECT operation_id, account_id, period, units, state FROM agentos_spend_reservations WHERE state = 'reserved' AND expires_at <= ? ORDER BY expires_at LIMIT ${limit}`, [now]));
|
|
187
|
+
const out = { consumed: 0, released: 0, pending: 0 };
|
|
188
|
+
for (const r of due) {
|
|
189
|
+
let resolution = 'unknown';
|
|
190
|
+
try {
|
|
191
|
+
if (this.opts.resolveUnknown) {
|
|
192
|
+
resolution = await this.opts.resolveUnknown({ operationId: r.operation_id, accountId: r.account_id, period: r.period, units: num(r.units) });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
resolution = 'unknown';
|
|
197
|
+
}
|
|
198
|
+
const outcome = resolution === 'consumed' ? 'consumed' : resolution === 'released' ? 'released' : this.opts.unknownAfterLease === 'consume' ? 'consumed' : 'released';
|
|
199
|
+
const settled = await this.settle({ operationId: r.operation_id, outcome, now });
|
|
200
|
+
if (settled.status !== 'settled')
|
|
201
|
+
out.pending += settled.state === 'reserved' ? 1 : 0;
|
|
202
|
+
else if (outcome === 'consumed')
|
|
203
|
+
out.consumed += 1;
|
|
204
|
+
else
|
|
205
|
+
out.released += 1;
|
|
206
|
+
}
|
|
207
|
+
return out;
|
|
208
|
+
}
|
|
209
|
+
async snapshot(accountId, now = Date.now()) {
|
|
210
|
+
let period;
|
|
211
|
+
let allowance;
|
|
212
|
+
try {
|
|
213
|
+
period = await this.opts.periodOf(now, accountId);
|
|
214
|
+
allowance = Math.max(0, Math.trunc(await this.opts.allowanceFor(accountId, period)));
|
|
215
|
+
}
|
|
216
|
+
catch (e) {
|
|
217
|
+
throw new SpendMeterUnavailableError(`the allowance could not be read: ${e instanceof Error ? e.message : String(e)}`, e);
|
|
218
|
+
}
|
|
219
|
+
const m = await this.run(() => this.db.get('SELECT allowance, used, reserved FROM agentos_spend_meter WHERE account_id = ? AND period = ?', [
|
|
220
|
+
accountId,
|
|
221
|
+
period,
|
|
222
|
+
]));
|
|
223
|
+
// what is enforced now: the period's stored allowance once the period has a row, else the product's answer
|
|
224
|
+
const enforced = m ? num(m.allowance) : allowance;
|
|
225
|
+
const used = num(m?.used);
|
|
226
|
+
const reserved = num(m?.reserved);
|
|
227
|
+
return { accountId, period, allowance: enforced, used, reserved, remaining: Math.max(0, enforced - used - reserved) };
|
|
228
|
+
}
|
|
229
|
+
async setAllowance(accountId, allowance, now = Date.now()) {
|
|
230
|
+
const value = Math.max(0, Math.trunc(allowance));
|
|
231
|
+
let period;
|
|
232
|
+
try {
|
|
233
|
+
period = await this.opts.periodOf(now, accountId);
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
throw new SpendMeterUnavailableError(`the period could not be read: ${e instanceof Error ? e.message : String(e)}`, e);
|
|
237
|
+
}
|
|
238
|
+
await this.run(() => this.db.transaction((trx) => trx.run(`INSERT INTO agentos_spend_meter (account_id, period, allowance, used, reserved, updated_at) VALUES (?, ?, ?, 0, 0, ?)
|
|
239
|
+
ON CONFLICT (account_id, period) DO UPDATE SET allowance = excluded.allowance, updated_at = excluded.updated_at`, [accountId, period, value, now])));
|
|
240
|
+
}
|
|
241
|
+
/** Runs {@link reconcile} every interval until {@link stopReconciler}. A failed pass is retried on the next tick. */
|
|
242
|
+
startReconciler(intervalMs = 15000, onError) {
|
|
243
|
+
if (this.reconciler)
|
|
244
|
+
return;
|
|
245
|
+
this.reconciler = setInterval(() => {
|
|
246
|
+
this.reconcile().catch((e) => onError?.(e));
|
|
247
|
+
}, intervalMs);
|
|
248
|
+
this.reconciler.unref?.();
|
|
249
|
+
}
|
|
250
|
+
stopReconciler() {
|
|
251
|
+
if (this.reconciler)
|
|
252
|
+
clearInterval(this.reconciler);
|
|
253
|
+
this.reconciler = null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/** Where an outcome moves a reservation from its state, and what it does to the period's counters; null when it moves nothing. */
|
|
257
|
+
function transition(from, outcome) {
|
|
258
|
+
if (from === 'reserved') {
|
|
259
|
+
if (outcome === 'consumed')
|
|
260
|
+
return { to: 'consumed', reserved: true, used: 1 };
|
|
261
|
+
return { to: 'released', reserved: true, used: 0 };
|
|
262
|
+
}
|
|
263
|
+
// a reply replaced after its turn counted is refunded
|
|
264
|
+
if (from === 'consumed' && outcome === 'replaced')
|
|
265
|
+
return { to: 'released', reserved: false, used: -1 };
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=SqlSpendMeter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlSpendMeter.js","sourceRoot":"","sources":["../../../src/safety/runtime/SqlSpendMeter.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,4 +14,8 @@ export { CostGuard, CostCapExceededError } from './CostGuard.js';
|
|
|
14
14
|
export type { CostGuardConfig, CostCapType, CostRecord, CostSnapshot } from './CostGuard.js';
|
|
15
15
|
export { ToolExecutionGuard, ToolTimeoutError } from './ToolExecutionGuard.js';
|
|
16
16
|
export type { ToolExecutionGuardConfig, GuardedToolResult, ToolHealthReport } from './ToolExecutionGuard.js';
|
|
17
|
+
export { SpendMeterUnavailableError, withBoundedRetry, isTransientStorageError, DEFAULT_SPEND_RETRY_POLICY, } from './SpendMeter.js';
|
|
18
|
+
export type { ISpendMeter, SpendOutcome, SpendReservationState, SpendDenyReason, SpendUsage, SpendReserveRequest, SpendReserveResult, SpendSettleRequest, SpendSettleResult, SpendMeterSnapshot, SpendReconcileResult, SpendRetryPolicy, } from './SpendMeter.js';
|
|
19
|
+
export { SqlSpendMeter, SPEND_METER_DDL } from './SqlSpendMeter.js';
|
|
20
|
+
export type { SqlSpendMeterOptions, SpendUnknownResolution } from './SqlSpendMeter.js';
|
|
17
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/safety/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/safety/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE7G,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -9,4 +9,6 @@ export { ActionDeduplicator } from './ActionDeduplicator.js';
|
|
|
9
9
|
export { StuckDetector } from './StuckDetector.js';
|
|
10
10
|
export { CostGuard, CostCapExceededError } from './CostGuard.js';
|
|
11
11
|
export { ToolExecutionGuard, ToolTimeoutError } from './ToolExecutionGuard.js';
|
|
12
|
+
export { SpendMeterUnavailableError, withBoundedRetry, isTransientStorageError, DEFAULT_SPEND_RETRY_POLICY, } from './SpendMeter.js';
|
|
13
|
+
export { SqlSpendMeter, SPEND_METER_DDL } from './SqlSpendMeter.js';
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/safety/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/safety/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framers/agentos",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.2",
|
|
4
4
|
"description": "AgentOS: open-source TypeScript framework for autonomous AI agents. Unified graph orchestration, cognitive memory, runtime tool forging, multi-tier guardrails, voice pipeline, and 11 LLM providers.",
|
|
5
5
|
"homepage": "https://agentos.sh",
|
|
6
6
|
"repository": {
|