@ashlr/hub 2.2.0 → 3.0.1
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 +73 -0
- package/README.md +95 -8
- package/dist/api/plugin.d.ts +1 -0
- package/dist/cli/backlog.js +2 -0
- package/dist/cli/backlog.js.map +1 -1
- package/dist/cli/digest.d.ts +6 -0
- package/dist/cli/digest.js +127 -2
- package/dist/cli/digest.js.map +1 -1
- package/dist/cli/eval-fixtures.d.ts +18 -0
- package/dist/cli/eval-fixtures.js +38 -0
- package/dist/cli/eval-fixtures.js.map +1 -0
- package/dist/cli/eval.d.ts +56 -0
- package/dist/cli/eval.js +283 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/fleet.d.ts +27 -0
- package/dist/cli/fleet.js +222 -0
- package/dist/cli/fleet.js.map +1 -0
- package/dist/cli/goal.d.ts +15 -0
- package/dist/cli/goal.js +91 -0
- package/dist/cli/goal.js.map +1 -0
- package/dist/cli/help.js +10 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/inbox.d.ts +6 -0
- package/dist/cli/inbox.js +183 -8
- package/dist/cli/inbox.js.map +1 -1
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/loop.d.ts +16 -0
- package/dist/cli/loop.js +66 -0
- package/dist/cli/loop.js.map +1 -0
- package/dist/cli/mcp.d.ts +12 -0
- package/dist/cli/mcp.js +148 -0
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/onboard.d.ts +16 -0
- package/dist/cli/onboard.js +71 -0
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/plugins.js +9 -8
- package/dist/cli/plugins.js.map +1 -1
- package/dist/cli/pulse.d.ts +10 -0
- package/dist/cli/pulse.js +261 -0
- package/dist/cli/pulse.js.map +1 -1
- package/dist/cli/run.js +21 -3
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/stack.d.ts +34 -0
- package/dist/cli/stack.js +221 -0
- package/dist/cli/stack.js.map +1 -0
- package/dist/cli/update.js +12 -5
- package/dist/cli/update.js.map +1 -1
- package/dist/core/daemon/loop.d.ts +10 -5
- package/dist/core/daemon/loop.js +167 -37
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/env-bridge.js +3 -2
- package/dist/core/env-bridge.js.map +1 -1
- package/dist/core/fleet/automerge-pass.d.ts +33 -0
- package/dist/core/fleet/automerge-pass.js +61 -0
- package/dist/core/fleet/automerge-pass.js.map +1 -0
- package/dist/core/fleet/quota.d.ts +70 -0
- package/dist/core/fleet/quota.js +198 -0
- package/dist/core/fleet/quota.js.map +1 -0
- package/dist/core/fleet/router.d.ts +46 -0
- package/dist/core/fleet/router.js +121 -0
- package/dist/core/fleet/router.js.map +1 -0
- package/dist/core/fleet/self.d.ts +58 -0
- package/dist/core/fleet/self.js +187 -0
- package/dist/core/fleet/self.js.map +1 -0
- package/dist/core/fleet/status.d.ts +54 -0
- package/dist/core/fleet/status.js +157 -0
- package/dist/core/fleet/status.js.map +1 -0
- package/dist/core/foundry/provenance.d.ts +78 -0
- package/dist/core/foundry/provenance.js +172 -0
- package/dist/core/foundry/provenance.js.map +1 -0
- package/dist/core/git.d.ts +13 -0
- package/dist/core/git.js +26 -0
- package/dist/core/git.js.map +1 -1
- package/dist/core/inbox/merge.d.ts +151 -0
- package/dist/core/inbox/merge.js +858 -0
- package/dist/core/inbox/merge.js.map +1 -0
- package/dist/core/inbox/store.js +10 -1
- package/dist/core/inbox/store.js.map +1 -1
- package/dist/core/integrations/markdown.d.ts +66 -0
- package/dist/core/integrations/markdown.js +132 -0
- package/dist/core/integrations/markdown.js.map +1 -0
- package/dist/core/integrations/secrets.d.ts +37 -0
- package/dist/core/integrations/secrets.js +67 -0
- package/dist/core/integrations/secrets.js.map +1 -0
- package/dist/core/integrations/stack.d.ts +47 -0
- package/dist/core/integrations/stack.js +107 -0
- package/dist/core/integrations/stack.js.map +1 -0
- package/dist/core/mcp-native-engineer.d.ts +123 -0
- package/dist/core/mcp-native-engineer.js +936 -0
- package/dist/core/mcp-native-engineer.js.map +1 -0
- package/dist/core/mcp-native.js +20 -42
- package/dist/core/mcp-native.js.map +1 -1
- package/dist/core/mcp-registry.js +2 -0
- package/dist/core/mcp-registry.js.map +1 -1
- package/dist/core/observability/codex-source.d.ts +53 -0
- package/dist/core/observability/codex-source.js +390 -0
- package/dist/core/observability/codex-source.js.map +1 -0
- package/dist/core/observability/estimate.d.ts +12 -0
- package/dist/core/observability/estimate.js +26 -0
- package/dist/core/observability/estimate.js.map +1 -1
- package/dist/core/observability/limits.d.ts +52 -0
- package/dist/core/observability/limits.js +316 -0
- package/dist/core/observability/limits.js.map +1 -0
- package/dist/core/observability/usage-source.js +3 -1
- package/dist/core/observability/usage-source.js.map +1 -1
- package/dist/core/portfolio/scanners.d.ts +1 -0
- package/dist/core/portfolio/scanners.js +40 -1
- package/dist/core/portfolio/scanners.js.map +1 -1
- package/dist/core/providers.js +4 -0
- package/dist/core/providers.js.map +1 -1
- package/dist/core/quality/health.js +1 -0
- package/dist/core/quality/health.js.map +1 -1
- package/dist/core/run/agent-loop.d.ts +8 -0
- package/dist/core/run/agent-loop.js +24 -14
- package/dist/core/run/agent-loop.js.map +1 -1
- package/dist/core/run/engine-registry.d.ts +48 -0
- package/dist/core/run/engine-registry.js +190 -0
- package/dist/core/run/engine-registry.js.map +1 -0
- package/dist/core/run/engines.d.ts +17 -3
- package/dist/core/run/engines.js +63 -44
- package/dist/core/run/engines.js.map +1 -1
- package/dist/core/run/learned-router.d.ts +121 -0
- package/dist/core/run/learned-router.js +374 -0
- package/dist/core/run/learned-router.js.map +1 -0
- package/dist/core/run/model-manager.js +3 -3
- package/dist/core/run/model-manager.js.map +1 -1
- package/dist/core/run/model-profile.d.ts +67 -0
- package/dist/core/run/model-profile.js +132 -0
- package/dist/core/run/model-profile.js.map +1 -0
- package/dist/core/run/orchestrator.d.ts +1 -1
- package/dist/core/run/orchestrator.js +642 -510
- package/dist/core/run/orchestrator.js.map +1 -1
- package/dist/core/run/prompts/budget.d.ts +25 -0
- package/dist/core/run/prompts/budget.js +51 -0
- package/dist/core/run/prompts/budget.js.map +1 -0
- package/dist/core/run/prompts/index.d.ts +14 -0
- package/dist/core/run/prompts/index.js +59 -0
- package/dist/core/run/prompts/index.js.map +1 -0
- package/dist/core/run/prompts/layers.d.ts +26 -0
- package/dist/core/run/prompts/layers.js +73 -0
- package/dist/core/run/prompts/layers.js.map +1 -0
- package/dist/core/run/prompts/roles.d.ts +23 -0
- package/dist/core/run/prompts/roles.js +48 -0
- package/dist/core/run/prompts/roles.js.map +1 -0
- package/dist/core/run/prompts/types.d.ts +38 -0
- package/dist/core/run/prompts/types.js +5 -0
- package/dist/core/run/prompts/types.js.map +1 -0
- package/dist/core/run/provider-client.d.ts +6 -24
- package/dist/core/run/provider-client.js +125 -61
- package/dist/core/run/provider-client.js.map +1 -1
- package/dist/core/run/router.js +8 -0
- package/dist/core/run/router.js.map +1 -1
- package/dist/core/run/sandboxed-engine.d.ts +66 -0
- package/dist/core/run/sandboxed-engine.js +262 -0
- package/dist/core/run/sandboxed-engine.js.map +1 -0
- package/dist/core/run/verify-commands.d.ts +83 -0
- package/dist/core/run/verify-commands.js +234 -0
- package/dist/core/run/verify-commands.js.map +1 -0
- package/dist/core/run/verify.d.ts +31 -1
- package/dist/core/run/verify.js +48 -0
- package/dist/core/run/verify.js.map +1 -1
- package/dist/core/sandbox/audit.d.ts +27 -0
- package/dist/core/sandbox/audit.js +34 -0
- package/dist/core/sandbox/audit.js.map +1 -1
- package/dist/core/sandbox/confine.d.ts +134 -0
- package/dist/core/sandbox/confine.js +370 -0
- package/dist/core/sandbox/confine.js.map +1 -0
- package/dist/core/types.d.ts +227 -5
- package/dist/core/web/api.js +77 -28
- package/dist/core/web/api.js.map +1 -1
- package/dist/core/web/control.d.ts +116 -0
- package/dist/core/web/control.js +307 -0
- package/dist/core/web/control.js.map +1 -0
- package/dist/core/web/public/app.js +512 -6
- package/dist/core/web/public/styles.css +468 -0
- package/package.json +3 -2
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codex-source.ts — M64: Codex (OpenAI) session ingestion for observability.
|
|
3
|
+
*
|
|
4
|
+
* Reads ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl files and extracts:
|
|
5
|
+
* 1. collectCodexEvents(sinceMs) — UsageEvents for the rollup/pulse pipeline
|
|
6
|
+
* 2. readCodexRateLimits() — real subscription rate-limit data for limits.ts
|
|
7
|
+
*
|
|
8
|
+
* DOUBLE-COUNTING STRATEGY: We emit ONE UsageEvent per session using the FINAL
|
|
9
|
+
* token_count event's `total_token_usage` (cumulative across all turns). This
|
|
10
|
+
* means we never accumulate per-turn last_token_usage across multiple events —
|
|
11
|
+
* the last total_token_usage IS the session total.
|
|
12
|
+
*
|
|
13
|
+
* PRIVACY: only token counts, model id ('codex'), timestamp, and project basename
|
|
14
|
+
* (from session_meta.cwd) are retained. Never reads message content.
|
|
15
|
+
*
|
|
16
|
+
* PERFORMANCE: skips files with mtime < sinceMs; streams line-by-line; bounded
|
|
17
|
+
* at 256 MiB per file; never throws.
|
|
18
|
+
*/
|
|
19
|
+
import * as fs from 'fs';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
import * as os from 'os';
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Constants
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/** Provider key used by rollup.ts / limits.ts for Codex. */
|
|
26
|
+
export const CODEX_PROVIDER_KEY = 'codex';
|
|
27
|
+
/** Model string stored on each UsageEvent. */
|
|
28
|
+
const CODEX_MODEL = 'codex';
|
|
29
|
+
/** Root of Codex session files. Overridable via CODEX_SESSIONS_DIR for tests. */
|
|
30
|
+
function codexSessionsRoot() {
|
|
31
|
+
return path.join(os.homedir(), '.codex', 'sessions');
|
|
32
|
+
}
|
|
33
|
+
const READ_CHUNK = 64 * 1024;
|
|
34
|
+
const MAX_BYTES_PER_FILE = 256 * 1024 * 1024;
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Line-streaming helper (mirrors usage-source.ts pattern exactly)
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
function eachLine(filePath, cb) {
|
|
39
|
+
let fd;
|
|
40
|
+
try {
|
|
41
|
+
fd = fs.openSync(filePath, 'r');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const chunk = Buffer.allocUnsafe(READ_CHUNK);
|
|
48
|
+
let pending = '';
|
|
49
|
+
let bytesRead = 0;
|
|
50
|
+
for (;;) {
|
|
51
|
+
let n;
|
|
52
|
+
try {
|
|
53
|
+
n = fs.readSync(fd, chunk, 0, READ_CHUNK, null);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
if (n <= 0)
|
|
59
|
+
break;
|
|
60
|
+
bytesRead += n;
|
|
61
|
+
pending += chunk.toString('utf8', 0, n);
|
|
62
|
+
let nl;
|
|
63
|
+
while ((nl = pending.indexOf('\n')) !== -1) {
|
|
64
|
+
const line = pending.slice(0, nl).trim();
|
|
65
|
+
pending = pending.slice(nl + 1);
|
|
66
|
+
if (line.length > 0)
|
|
67
|
+
cb(line);
|
|
68
|
+
}
|
|
69
|
+
if (bytesRead >= MAX_BYTES_PER_FILE)
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
const last = pending.trim();
|
|
73
|
+
if (last.length > 0)
|
|
74
|
+
cb(last);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
try {
|
|
78
|
+
fs.closeSync(fd);
|
|
79
|
+
}
|
|
80
|
+
catch { /* ignore */ }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function parseRateLimits(rl) {
|
|
84
|
+
const result = {};
|
|
85
|
+
const primary = rl['primary'];
|
|
86
|
+
if (typeof primary === 'object' && primary !== null) {
|
|
87
|
+
const p = primary;
|
|
88
|
+
if (typeof p['used_percent'] === 'number' &&
|
|
89
|
+
typeof p['window_minutes'] === 'number' &&
|
|
90
|
+
typeof p['resets_at'] === 'number') {
|
|
91
|
+
result.primary = {
|
|
92
|
+
usedPercent: p['used_percent'],
|
|
93
|
+
windowMinutes: p['window_minutes'],
|
|
94
|
+
resetsAt: p['resets_at'],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const secondary = rl['secondary'];
|
|
99
|
+
if (typeof secondary === 'object' && secondary !== null) {
|
|
100
|
+
const s = secondary;
|
|
101
|
+
if (typeof s['used_percent'] === 'number' &&
|
|
102
|
+
typeof s['window_minutes'] === 'number' &&
|
|
103
|
+
typeof s['resets_at'] === 'number') {
|
|
104
|
+
result.secondary = {
|
|
105
|
+
usedPercent: s['used_percent'],
|
|
106
|
+
windowMinutes: s['window_minutes'],
|
|
107
|
+
resetsAt: s['resets_at'],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (typeof rl['plan_type'] === 'string') {
|
|
112
|
+
result.planType = rl['plan_type'];
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
function processLine(line, state) {
|
|
117
|
+
let obj;
|
|
118
|
+
try {
|
|
119
|
+
obj = JSON.parse(line);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return; // malformed — skip silently
|
|
123
|
+
}
|
|
124
|
+
if (typeof obj !== 'object' || obj === null)
|
|
125
|
+
return;
|
|
126
|
+
const row = obj;
|
|
127
|
+
const type = row['type'];
|
|
128
|
+
// ── session_meta: grab cwd and timestamp ───────────────────────────────
|
|
129
|
+
if (type === 'session_meta') {
|
|
130
|
+
const payload = row['payload'];
|
|
131
|
+
if (typeof payload === 'object' && payload !== null) {
|
|
132
|
+
const p = payload;
|
|
133
|
+
if (typeof p['cwd'] === 'string')
|
|
134
|
+
state.cwd = p['cwd'];
|
|
135
|
+
if (typeof p['timestamp'] === 'string')
|
|
136
|
+
state.ts = p['timestamp'];
|
|
137
|
+
}
|
|
138
|
+
// Also accept top-level timestamp as fallback
|
|
139
|
+
if (!state.ts && typeof row['timestamp'] === 'string') {
|
|
140
|
+
state.ts = row['timestamp'];
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// ── event_msg with type:token_count ────────────────────────────────────
|
|
145
|
+
if (type === 'event_msg') {
|
|
146
|
+
const payload = row['payload'];
|
|
147
|
+
if (typeof payload !== 'object' || payload === null)
|
|
148
|
+
return;
|
|
149
|
+
const p = payload;
|
|
150
|
+
if (p['type'] !== 'token_count')
|
|
151
|
+
return;
|
|
152
|
+
// Update timestamp from event if not yet set
|
|
153
|
+
if (!state.ts && typeof row['timestamp'] === 'string') {
|
|
154
|
+
state.ts = row['timestamp'];
|
|
155
|
+
}
|
|
156
|
+
const info = p['info'];
|
|
157
|
+
if (typeof info === 'object' && info !== null) {
|
|
158
|
+
const i = info;
|
|
159
|
+
const total = i['total_token_usage'];
|
|
160
|
+
if (typeof total === 'object' && total !== null) {
|
|
161
|
+
const t = total;
|
|
162
|
+
state.lastTotal = {
|
|
163
|
+
input_tokens: typeof t['input_tokens'] === 'number' ? t['input_tokens'] : 0,
|
|
164
|
+
output_tokens: typeof t['output_tokens'] === 'number' ? t['output_tokens'] : 0,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const rl = p['rate_limits'];
|
|
169
|
+
if (typeof rl === 'object' && rl !== null) {
|
|
170
|
+
state.lastRateLimits = parseRateLimits(rl);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Directory walker
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
/**
|
|
178
|
+
* Walk ~/.codex/sessions/YYYY/MM/DD/ tree, yield .jsonl file paths whose
|
|
179
|
+
* mtime >= sinceMs. Silently skips unreadable entries.
|
|
180
|
+
*/
|
|
181
|
+
function* walkCodexSessions(sinceMs) {
|
|
182
|
+
const root = codexSessionsRoot();
|
|
183
|
+
let yearDirs;
|
|
184
|
+
try {
|
|
185
|
+
yearDirs = fs.readdirSync(root);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return; // ~/.codex/sessions missing
|
|
189
|
+
}
|
|
190
|
+
for (const year of yearDirs) {
|
|
191
|
+
const yearPath = path.join(root, year);
|
|
192
|
+
let monthDirs;
|
|
193
|
+
try {
|
|
194
|
+
monthDirs = fs.readdirSync(yearPath);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
for (const month of monthDirs) {
|
|
200
|
+
const monthPath = path.join(yearPath, month);
|
|
201
|
+
let dayDirs;
|
|
202
|
+
try {
|
|
203
|
+
dayDirs = fs.readdirSync(monthPath);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
for (const day of dayDirs) {
|
|
209
|
+
const dayPath = path.join(monthPath, day);
|
|
210
|
+
let files;
|
|
211
|
+
try {
|
|
212
|
+
files = fs.readdirSync(dayPath);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
for (const name of files) {
|
|
218
|
+
if (!name.endsWith('.jsonl'))
|
|
219
|
+
continue;
|
|
220
|
+
const filePath = path.join(dayPath, name);
|
|
221
|
+
try {
|
|
222
|
+
const stat = fs.statSync(filePath);
|
|
223
|
+
if (stat.mtimeMs < sinceMs)
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
yield filePath;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
// Public API
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
/**
|
|
239
|
+
* Collect UsageEvents from Codex session files with ts >= sinceMs.
|
|
240
|
+
*
|
|
241
|
+
* ONE event per session: uses the FINAL token_count's total_token_usage to
|
|
242
|
+
* avoid double-counting per-turn activity. Project = cwd basename.
|
|
243
|
+
*
|
|
244
|
+
* Never throws.
|
|
245
|
+
*/
|
|
246
|
+
export function collectCodexEvents(sinceMs) {
|
|
247
|
+
const events = [];
|
|
248
|
+
try {
|
|
249
|
+
for (const filePath of walkCodexSessions(sinceMs)) {
|
|
250
|
+
const state = {
|
|
251
|
+
cwd: null,
|
|
252
|
+
ts: null,
|
|
253
|
+
lastTotal: null,
|
|
254
|
+
lastRateLimits: null,
|
|
255
|
+
};
|
|
256
|
+
eachLine(filePath, (line) => processLine(line, state));
|
|
257
|
+
// Skip sessions with no token data
|
|
258
|
+
if (!state.lastTotal)
|
|
259
|
+
continue;
|
|
260
|
+
if (state.lastTotal.input_tokens === 0 && state.lastTotal.output_tokens === 0)
|
|
261
|
+
continue;
|
|
262
|
+
// Use session timestamp, falling back to a synthesized ISO from file path
|
|
263
|
+
const ts = state.ts ?? new Date().toISOString();
|
|
264
|
+
// Apply sinceMs filter on the session timestamp
|
|
265
|
+
try {
|
|
266
|
+
if (new Date(ts).getTime() < sinceMs)
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
// Malformed ts — include it anyway (mtime already passed)
|
|
271
|
+
}
|
|
272
|
+
const project = state.cwd ? path.basename(state.cwd) : null;
|
|
273
|
+
events.push({
|
|
274
|
+
ts,
|
|
275
|
+
project,
|
|
276
|
+
model: CODEX_MODEL,
|
|
277
|
+
source: 'run',
|
|
278
|
+
tokensIn: state.lastTotal.input_tokens,
|
|
279
|
+
tokensOut: state.lastTotal.output_tokens,
|
|
280
|
+
cacheRead: 0,
|
|
281
|
+
cacheWrite: 0,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
// Belt-and-suspenders: top-level guard
|
|
287
|
+
}
|
|
288
|
+
return events;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Read rate-limit data from the most recent Codex session file.
|
|
292
|
+
*
|
|
293
|
+
* Returns the primary/secondary/planType from the LAST token_count event in
|
|
294
|
+
* the most recently modified session file. Returns null when no data is
|
|
295
|
+
* available (no sessions, no token_count lines, malformed file, etc.).
|
|
296
|
+
*
|
|
297
|
+
* Never throws.
|
|
298
|
+
*/
|
|
299
|
+
export function readCodexRateLimits() {
|
|
300
|
+
try {
|
|
301
|
+
const root = codexSessionsRoot();
|
|
302
|
+
// Find all session files, pick the most recently modified one
|
|
303
|
+
const allFiles = [];
|
|
304
|
+
let yearDirs;
|
|
305
|
+
try {
|
|
306
|
+
yearDirs = fs.readdirSync(root);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
for (const year of yearDirs) {
|
|
312
|
+
const yearPath = path.join(root, year);
|
|
313
|
+
let monthDirs;
|
|
314
|
+
try {
|
|
315
|
+
monthDirs = fs.readdirSync(yearPath);
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
for (const month of monthDirs) {
|
|
321
|
+
const monthPath = path.join(yearPath, month);
|
|
322
|
+
let dayDirs;
|
|
323
|
+
try {
|
|
324
|
+
dayDirs = fs.readdirSync(monthPath);
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
for (const day of dayDirs) {
|
|
330
|
+
const dayPath = path.join(monthPath, day);
|
|
331
|
+
let files;
|
|
332
|
+
try {
|
|
333
|
+
files = fs.readdirSync(dayPath);
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
for (const name of files) {
|
|
339
|
+
if (!name.endsWith('.jsonl'))
|
|
340
|
+
continue;
|
|
341
|
+
const filePath = path.join(dayPath, name);
|
|
342
|
+
try {
|
|
343
|
+
const stat = fs.statSync(filePath);
|
|
344
|
+
allFiles.push({ path: filePath, mtime: stat.mtimeMs });
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
if (allFiles.length === 0)
|
|
354
|
+
return null;
|
|
355
|
+
// Most recently modified file
|
|
356
|
+
allFiles.sort((a, b) => b.mtime - a.mtime);
|
|
357
|
+
const newest = allFiles[0];
|
|
358
|
+
// Extract LAST token_count rate_limits from that file
|
|
359
|
+
let lastRateLimits = null;
|
|
360
|
+
eachLine(newest.path, (line) => {
|
|
361
|
+
let obj;
|
|
362
|
+
try {
|
|
363
|
+
obj = JSON.parse(line);
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (typeof obj !== 'object' || obj === null)
|
|
369
|
+
return;
|
|
370
|
+
const row = obj;
|
|
371
|
+
if (row['type'] !== 'event_msg')
|
|
372
|
+
return;
|
|
373
|
+
const payload = row['payload'];
|
|
374
|
+
if (typeof payload !== 'object' || payload === null)
|
|
375
|
+
return;
|
|
376
|
+
const p = payload;
|
|
377
|
+
if (p['type'] !== 'token_count')
|
|
378
|
+
return;
|
|
379
|
+
const rl = p['rate_limits'];
|
|
380
|
+
if (typeof rl === 'object' && rl !== null) {
|
|
381
|
+
lastRateLimits = parseRateLimits(rl);
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
return lastRateLimits;
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
return null;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=codex-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-source.js","sourceRoot":"","sources":["../../../src/core/observability/codex-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAazB,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,8CAA8C;AAC9C,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,iFAAiF;AACjF,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7B,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,QAAgB,EAAE,EAA0B;IAC5D,IAAI,EAAU,CAAC;IACf,IAAI,CAAC;QACH,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,SAAS,CAAC;YACR,IAAI,CAAS,CAAC;YACd,IAAI,CAAC;gBACH,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM;YACR,CAAC;YACD,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM;YAClB,SAAS,IAAI,CAAC,CAAC;YAEf,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAExC,IAAI,EAAU,CAAC;YACf,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAChC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,SAAS,IAAI,kBAAkB;gBAAE,MAAM;QAC7C,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAiBD,SAAS,eAAe,CAAC,EAA2B;IAClD,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,OAAkC,CAAC;QAC7C,IACE,OAAO,CAAC,CAAC,cAAc,CAAC,KAAK,QAAQ;YACrC,OAAO,CAAC,CAAC,gBAAgB,CAAC,KAAK,QAAQ;YACvC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,EAClC,CAAC;YACD,MAAM,CAAC,OAAO,GAAG;gBACf,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC;gBAC9B,aAAa,EAAE,CAAC,CAAC,gBAAgB,CAAC;gBAClC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;aACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;IAClC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,SAAoC,CAAC;QAC/C,IACE,OAAO,CAAC,CAAC,cAAc,CAAC,KAAK,QAAQ;YACrC,OAAO,CAAC,CAAC,gBAAgB,CAAC,KAAK,QAAQ;YACvC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,EAClC,CAAC;YACD,MAAM,CAAC,SAAS,GAAG;gBACjB,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC;gBAC9B,aAAa,EAAE,CAAC,CAAC,gBAAgB,CAAC;gBAClC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;aACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAmB;IACpD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,4BAA4B;IACtC,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IACpD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAEzB,0EAA0E;IAC1E,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,OAAkC,CAAC;YAC7C,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ;gBAAE,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ;gBAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;QACpE,CAAC;QACD,8CAA8C;QAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtD,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO;IACT,CAAC;IAED,0EAA0E;IAC1E,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC5D,MAAM,CAAC,GAAG,OAAkC,CAAC;QAC7C,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,aAAa;YAAE,OAAO;QAExC,6CAA6C;QAC7C,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtD,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,IAA+B,CAAC;YAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,MAAM,CAAC,GAAG,KAAgC,CAAC;gBAC3C,KAAK,CAAC,SAAS,GAAG;oBAChB,YAAY,EAAG,OAAO,CAAC,CAAC,cAAc,CAAC,KAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAE,CAAC,CAAC,CAAC;oBAC9E,aAAa,EAAE,OAAO,CAAC,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;QAC5B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAC1C,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC,EAA6B,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;GAGG;AACH,QAAQ,CAAC,CAAC,iBAAiB,CAAC,OAAe;IACzC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IAEjC,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,4BAA4B;IACtC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,SAAmB,CAAC;QACxB,IAAI,CAAC;YACH,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAErB,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,OAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;YAErB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC1C,IAAI,KAAe,CAAC;gBACpB,IAAI,CAAC;oBACH,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;gBAAC,MAAM,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC1C,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACnC,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO;4BAAE,SAAS;oBACvC,CAAC;oBAAC,MAAM,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACrB,MAAM,QAAQ,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAiB;gBAC1B,GAAG,EAAE,IAAI;gBACT,EAAE,EAAE,IAAI;gBACR,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,IAAI;aACrB,CAAC;YAEF,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAEvD,mCAAmC;YACnC,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,SAAS;YAC/B,IAAI,KAAK,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,aAAa,KAAK,CAAC;gBAAE,SAAS;YAExF,0EAA0E;YAC1E,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAEhD,gDAAgD;YAChD,IAAI,CAAC;gBACH,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,OAAO;oBAAE,SAAS;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE5D,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE;gBACF,OAAO;gBACP,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAI,KAAK,CAAC,SAAS,CAAC,YAAY;gBACxC,SAAS,EAAG,KAAK,CAAC,SAAS,CAAC,aAAa;gBACzC,SAAS,EAAG,CAAC;gBACb,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;QAEjC,8DAA8D;QAC9D,MAAM,QAAQ,GAAsC,EAAE,CAAC;QAEvD,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,IAAI,SAAmB,CAAC;YACxB,IAAI,CAAC;gBAAC,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEjE,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC7C,IAAI,OAAiB,CAAC;gBACtB,IAAI,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAEhE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC1C,IAAI,KAAe,CAAC;oBACpB,IAAI,CAAC;wBAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBAE5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;4BAAE,SAAS;wBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBAC1C,IAAI,CAAC;4BACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;4BACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;wBACzD,CAAC;wBAAC,MAAM,CAAC;4BAAC,SAAS;wBAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvC,8BAA8B;QAC9B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QAE5B,sDAAsD;QACtD,IAAI,cAAc,GAA2B,IAAI,CAAC;QAElD,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7B,IAAI,GAAY,CAAC;YACjB,IAAI,CAAC;gBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO;YAAC,CAAC;YACjD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO;YACpD,MAAM,GAAG,GAAG,GAA8B,CAAC;YAC3C,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,WAAW;gBAAE,OAAO;YACxC,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO;YAC5D,MAAM,CAAC,GAAG,OAAkC,CAAC;YAC7C,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,aAAa;gBAAE,OAAO;YACxC,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;YAC5B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC1C,cAAc,GAAG,eAAe,CAAC,EAA6B,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -23,5 +23,17 @@ export declare function estimateSwarm(goal: string, opts: {
|
|
|
23
23
|
maxTokens?: number;
|
|
24
24
|
allowCloud?: boolean;
|
|
25
25
|
}, _cfg: AshlrConfig): Promise<RunEstimate>;
|
|
26
|
+
/**
|
|
27
|
+
* M53: Extract the p50 (median) estimated cost from a RunEstimate.
|
|
28
|
+
* Returns 0 when the estimate has no history (sampleSize 0).
|
|
29
|
+
* PURE, never throws.
|
|
30
|
+
*/
|
|
31
|
+
export declare function p50CostFromEstimate(estimate: RunEstimate): number;
|
|
32
|
+
/**
|
|
33
|
+
* M53: Compute the anomaly ratio: actualCostUsd / p50.
|
|
34
|
+
* Returns Infinity when p50 is 0 and actualCost > 0 (conservatively treated
|
|
35
|
+
* as anomalous by callers). Returns 0 when actualCost <= 0. Never throws.
|
|
36
|
+
*/
|
|
37
|
+
export declare function anomalyRatioFromEstimate(actualCostUsd: number, estimate: RunEstimate): number;
|
|
26
38
|
/** Render an estimate as a compact human block (shared by run/swarm CLIs). */
|
|
27
39
|
export declare function renderEstimate(e: RunEstimate): string;
|
|
@@ -164,6 +164,32 @@ export async function estimateSwarm(goal, opts, _cfg) {
|
|
|
164
164
|
}
|
|
165
165
|
return buildEstimate('swarm', goal, samples, opts);
|
|
166
166
|
}
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
// M53 additive extensions — p50 accessor + anomaly ratio helper.
|
|
169
|
+
// These are pure helpers that expose existing estimate data; they do NOT change
|
|
170
|
+
// the behavior of estimateRun/estimateSwarm or any existing export.
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
/**
|
|
173
|
+
* M53: Extract the p50 (median) estimated cost from a RunEstimate.
|
|
174
|
+
* Returns 0 when the estimate has no history (sampleSize 0).
|
|
175
|
+
* PURE, never throws.
|
|
176
|
+
*/
|
|
177
|
+
export function p50CostFromEstimate(estimate) {
|
|
178
|
+
return estimate.estCostUsd.median;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* M53: Compute the anomaly ratio: actualCostUsd / p50.
|
|
182
|
+
* Returns Infinity when p50 is 0 and actualCost > 0 (conservatively treated
|
|
183
|
+
* as anomalous by callers). Returns 0 when actualCost <= 0. Never throws.
|
|
184
|
+
*/
|
|
185
|
+
export function anomalyRatioFromEstimate(actualCostUsd, estimate) {
|
|
186
|
+
if (actualCostUsd <= 0)
|
|
187
|
+
return 0;
|
|
188
|
+
const p50 = p50CostFromEstimate(estimate);
|
|
189
|
+
if (p50 <= 0)
|
|
190
|
+
return Infinity;
|
|
191
|
+
return actualCostUsd / p50;
|
|
192
|
+
}
|
|
167
193
|
/** Render an estimate as a compact human block (shared by run/swarm CLIs). */
|
|
168
194
|
export function renderEstimate(e) {
|
|
169
195
|
const fmtTok = (n) => n >= 1000 ? `${(n / 1000).toFixed(1)}k` : String(Math.round(n));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../../src/core/observability/estimate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../../src/core/observability/estimate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* limits.ts — M63: real usage-window ingestion for Mission Control.
|
|
3
|
+
*
|
|
4
|
+
* `resolveUsageWindows(cfg)` replaces the "not wired" stub with:
|
|
5
|
+
*
|
|
6
|
+
* (a) REAL rolling-window token/cost summaries from local transcripts
|
|
7
|
+
* (5 h — Claude Code's effective session window, and 24 h).
|
|
8
|
+
*
|
|
9
|
+
* (b) Per-provider subscription/key status:
|
|
10
|
+
* - API-key providers (ANTHROPIC_API_KEY, OPENAI_API_KEY): attempt the
|
|
11
|
+
* real billing/usage endpoint with a short timeout; degrade gracefully.
|
|
12
|
+
* - Subscription plans (no key): honest note — caps are NOT API-exposed.
|
|
13
|
+
*
|
|
14
|
+
* Never throws. Never fabricates a limit number.
|
|
15
|
+
*/
|
|
16
|
+
import type { AshlrConfig } from '../types.js';
|
|
17
|
+
export interface UsageWindow {
|
|
18
|
+
provider: string;
|
|
19
|
+
window: '5h' | '24h';
|
|
20
|
+
tokens: number;
|
|
21
|
+
costUsd: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ProviderLimitEntry {
|
|
24
|
+
provider: string;
|
|
25
|
+
kind: 'subscription' | 'api-key';
|
|
26
|
+
detail: string;
|
|
27
|
+
/** Only present when knowable from the API (never fabricated). */
|
|
28
|
+
limit?: number;
|
|
29
|
+
/** Only present when knowable from the API (never fabricated). */
|
|
30
|
+
used?: number;
|
|
31
|
+
/** Only present when the API returns a reset timestamp. */
|
|
32
|
+
resetAt?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface UsageWindowsResult {
|
|
35
|
+
connected: boolean;
|
|
36
|
+
windows: UsageWindow[];
|
|
37
|
+
providers: ProviderLimitEntry[];
|
|
38
|
+
note: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve usage windows and provider limit/subscription information.
|
|
42
|
+
*
|
|
43
|
+
* - `windows`: REAL rolling-window token+cost sums from local transcripts.
|
|
44
|
+
* Sourced from collectUsageEvents() — METADATA only, no content.
|
|
45
|
+
* - `providers`: API-key providers get a best-effort live call (degrades
|
|
46
|
+
* gracefully). Subscription plans get an honest note; `limit` is never
|
|
47
|
+
* fabricated.
|
|
48
|
+
* - `note`: one-line honest summary.
|
|
49
|
+
*
|
|
50
|
+
* Never throws.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveUsageWindows(_cfg: AshlrConfig): Promise<UsageWindowsResult>;
|