@agentdeck/shared 0.1.0 → 0.2.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.
- package/LICENSE +21 -0
- package/dist/adapter.d.ts +18 -3
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +62 -0
- package/dist/adapter.js.map +1 -1
- package/dist/command-builders.d.ts +35 -0
- package/dist/command-builders.d.ts.map +1 -0
- package/dist/command-builders.js +75 -0
- package/dist/command-builders.js.map +1 -0
- package/dist/connection-status.d.ts +42 -0
- package/dist/connection-status.d.ts.map +1 -0
- package/dist/connection-status.js +52 -0
- package/dist/connection-status.js.map +1 -0
- package/dist/d200h-layout.d.ts +131 -0
- package/dist/d200h-layout.d.ts.map +1 -0
- package/dist/d200h-layout.js +627 -0
- package/dist/d200h-layout.js.map +1 -0
- package/dist/design-tokens.d.ts +259 -0
- package/dist/design-tokens.d.ts.map +1 -0
- package/dist/design-tokens.js +156 -0
- package/dist/design-tokens.js.map +1 -0
- package/dist/eval-schema.d.ts +235 -0
- package/dist/eval-schema.d.ts.map +1 -0
- package/dist/eval-schema.js +23 -0
- package/dist/eval-schema.js.map +1 -0
- package/dist/format-utils.d.ts +52 -0
- package/dist/format-utils.d.ts.map +1 -0
- package/dist/format-utils.js +165 -0
- package/dist/format-utils.js.map +1 -0
- package/dist/gateway-protocol.d.ts +391 -0
- package/dist/gateway-protocol.d.ts.map +1 -0
- package/dist/gateway-protocol.js +19 -0
- package/dist/gateway-protocol.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/llm-settings.d.ts +52 -0
- package/dist/llm-settings.d.ts.map +1 -0
- package/dist/llm-settings.js +118 -0
- package/dist/llm-settings.js.map +1 -0
- package/dist/net-utils.d.ts +2 -1
- package/dist/net-utils.d.ts.map +1 -1
- package/dist/net-utils.js +100 -3
- package/dist/net-utils.js.map +1 -1
- package/dist/pricing.d.ts +45 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +93 -0
- package/dist/pricing.js.map +1 -0
- package/dist/protocol.d.ts +496 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +30 -1
- package/dist/protocol.js.map +1 -1
- package/dist/sample.d.ts +152 -0
- package/dist/sample.d.ts.map +1 -0
- package/dist/sample.js +22 -0
- package/dist/sample.js.map +1 -0
- package/dist/session-utils.d.ts +142 -0
- package/dist/session-utils.d.ts.map +1 -0
- package/dist/session-utils.js +304 -0
- package/dist/session-utils.js.map +1 -0
- package/dist/state-colors.d.ts +16 -0
- package/dist/state-colors.d.ts.map +1 -0
- package/dist/state-colors.js +48 -0
- package/dist/state-colors.js.map +1 -0
- package/dist/states.d.ts +2 -0
- package/dist/states.d.ts.map +1 -1
- package/dist/states.js +6 -1
- package/dist/states.js.map +1 -1
- package/dist/svg-renderers/agent-logos.d.ts +45 -0
- package/dist/svg-renderers/agent-logos.d.ts.map +1 -0
- package/dist/svg-renderers/agent-logos.js +238 -0
- package/dist/svg-renderers/agent-logos.js.map +1 -0
- package/dist/svg-renderers/index.d.ts +4 -0
- package/dist/svg-renderers/index.d.ts.map +1 -0
- package/dist/svg-renderers/index.js +4 -0
- package/dist/svg-renderers/index.js.map +1 -0
- package/dist/svg-renderers/session-slot-renderer.d.ts +78 -0
- package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -0
- package/dist/svg-renderers/session-slot-renderer.js +506 -0
- package/dist/svg-renderers/session-slot-renderer.js.map +1 -0
- package/dist/svg-renderers/text-utils.d.ts +29 -0
- package/dist/svg-renderers/text-utils.d.ts.map +1 -0
- package/dist/svg-renderers/text-utils.js +122 -0
- package/dist/svg-renderers/text-utils.js.map +1 -0
- package/dist/telemetry-envelope.d.ts +108 -0
- package/dist/telemetry-envelope.d.ts.map +1 -0
- package/dist/telemetry-envelope.js +34 -0
- package/dist/telemetry-envelope.js.map +1 -0
- package/dist/timeline-icons.d.ts +70 -0
- package/dist/timeline-icons.d.ts.map +1 -0
- package/dist/timeline-icons.js +161 -0
- package/dist/timeline-icons.js.map +1 -0
- package/dist/timeline-label.d.ts +38 -0
- package/dist/timeline-label.d.ts.map +1 -0
- package/dist/timeline-label.js +95 -0
- package/dist/timeline-label.js.map +1 -0
- package/dist/timeline-markdown.d.ts +80 -0
- package/dist/timeline-markdown.d.ts.map +1 -0
- package/dist/timeline-markdown.js +221 -0
- package/dist/timeline-markdown.js.map +1 -0
- package/dist/timeline-summarizer.d.ts +37 -0
- package/dist/timeline-summarizer.d.ts.map +1 -0
- package/dist/timeline-summarizer.js +125 -0
- package/dist/timeline-summarizer.js.map +1 -0
- package/dist/timeline.d.ts +135 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +633 -0
- package/dist/timeline.js.map +1 -0
- package/dist/voice-paths.d.ts +4 -0
- package/dist/voice-paths.d.ts.map +1 -1
- package/dist/voice-paths.js +5 -0
- package/dist/voice-paths.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-settings.js","sourceRoot":"","sources":["../src/llm-settings.ts"],"names":[],"mappings":"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"}
|
package/dist/net-utils.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
/** Return the
|
|
1
|
+
/** Return the default-route IPv4 (preferred), else the first non-internal IPv4
|
|
2
|
+
* LAN address, or '127.0.0.1' as fallback. */
|
|
2
3
|
export declare function getLanIp(): string;
|
|
3
4
|
//# sourceMappingURL=net-utils.d.ts.map
|
package/dist/net-utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"net-utils.d.ts","sourceRoot":"","sources":["../src/net-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"net-utils.d.ts","sourceRoot":"","sources":["../src/net-utils.ts"],"names":[],"mappings":"AAiEA;8CAC8C;AAC9C,wBAAgB,QAAQ,IAAI,MAAM,CAsCjC"}
|
package/dist/net-utils.js
CHANGED
|
@@ -1,11 +1,108 @@
|
|
|
1
1
|
import { networkInterfaces } from 'os';
|
|
2
|
-
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
/**
|
|
4
|
+
* IPv4 of the *default-route* interface — the one the OS actually uses to reach
|
|
5
|
+
* the LAN/internet. On a dual-homed host (e.g. en0 + en1 on the same subnet),
|
|
6
|
+
* the raw interface scan below can return an arbitrary secondary address that a
|
|
7
|
+
* remote device can't reliably reach; the default route is the stable, correct
|
|
8
|
+
* one to advertise (pairing URL / mDNS / TRMNL BYOS URL). Returns null when the
|
|
9
|
+
* platform's routing tool is unavailable (→ caller falls back to the heuristic).
|
|
10
|
+
*/
|
|
11
|
+
let routeCache = null;
|
|
12
|
+
function defaultRouteIp() {
|
|
13
|
+
const now = Date.now();
|
|
14
|
+
// Short cache: cheap enough to re-probe often (keeps mDNS IP-change detection
|
|
15
|
+
// responsive) without spawning `route` on every connect.
|
|
16
|
+
if (routeCache && now - routeCache.at < 3000)
|
|
17
|
+
return routeCache.ip;
|
|
18
|
+
let iface = null;
|
|
19
|
+
let directIp = null;
|
|
20
|
+
try {
|
|
21
|
+
if (process.platform === 'darwin') {
|
|
22
|
+
const out = execFileSync('route', ['-n', 'get', 'default'], { timeout: 1000, encoding: 'utf8' });
|
|
23
|
+
iface = out.match(/interface:\s*(\S+)/)?.[1] ?? null;
|
|
24
|
+
}
|
|
25
|
+
else if (process.platform === 'linux') {
|
|
26
|
+
const out = execFileSync('ip', ['route', 'get', '1.1.1.1'], { timeout: 1000, encoding: 'utf8' });
|
|
27
|
+
iface = out.match(/\bdev\s+(\S+)/)?.[1] ?? null;
|
|
28
|
+
}
|
|
29
|
+
else if (process.platform === 'win32') {
|
|
30
|
+
// Windows interface names are friendly strings ("Wi-Fi", "vEthernet (...)"),
|
|
31
|
+
// so the name-pattern heuristic below can't tell a host-only Hyper-V/WSL
|
|
32
|
+
// virtual switch (172.x, no gateway) from the real LAN adapter — and on a
|
|
33
|
+
// Hyper-V host the real LAN IP itself lives on a "vEthernet (External Switch)".
|
|
34
|
+
// `route print -4 0.0.0.0` resolves this by emitting the *source interface IP*
|
|
35
|
+
// of each default route directly in the Interface column; pick the lowest
|
|
36
|
+
// metric so VPN/host-only adapters lose to the physical route.
|
|
37
|
+
const out = execFileSync('route', ['print', '-4', '0.0.0.0'], { timeout: 1000, encoding: 'utf8' });
|
|
38
|
+
let bestMetric = Infinity;
|
|
39
|
+
for (const line of out.split('\n')) {
|
|
40
|
+
// Network Netmask Gateway Interface Metric
|
|
41
|
+
const m = line.trim().match(/^0\.0\.0\.0\s+0\.0\.0\.0\s+\S+\s+(\d+\.\d+\.\d+\.\d+)\s+(\d+)/);
|
|
42
|
+
if (!m)
|
|
43
|
+
continue;
|
|
44
|
+
const candidate = m[1];
|
|
45
|
+
const metric = parseInt(m[2], 10);
|
|
46
|
+
if (candidate === '0.0.0.0' || candidate.startsWith('169.254.'))
|
|
47
|
+
continue;
|
|
48
|
+
if (metric < bestMetric) {
|
|
49
|
+
bestMetric = metric;
|
|
50
|
+
directIp = candidate;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
/* route tool missing / non-POSIX → null, fall back to the heuristic */
|
|
57
|
+
}
|
|
58
|
+
let ip = directIp;
|
|
59
|
+
if (!ip && iface) {
|
|
60
|
+
for (const net of networkInterfaces()[iface] ?? []) {
|
|
61
|
+
if (net.family === 'IPv4' && !net.internal && !net.address.startsWith('169.254.')) {
|
|
62
|
+
ip = net.address;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
routeCache = { ip, at: now };
|
|
68
|
+
return ip;
|
|
69
|
+
}
|
|
70
|
+
/** Return the default-route IPv4 (preferred), else the first non-internal IPv4
|
|
71
|
+
* LAN address, or '127.0.0.1' as fallback. */
|
|
3
72
|
export function getLanIp() {
|
|
73
|
+
const primary = defaultRouteIp();
|
|
74
|
+
if (primary)
|
|
75
|
+
return primary;
|
|
4
76
|
const nets = networkInterfaces();
|
|
5
|
-
|
|
77
|
+
// Sort interfaces: physical wired (en1, en2...) first, then en0, then other non-virtual, then virtual.
|
|
78
|
+
const sortedNames = Object.keys(nets).sort((a, b) => {
|
|
79
|
+
const isPhysA = /^(en|eth|wlan)\d+/i.test(a);
|
|
80
|
+
const isPhysB = /^(en|eth|wlan)\d+/i.test(b);
|
|
81
|
+
if (isPhysA && !isPhysB)
|
|
82
|
+
return -1;
|
|
83
|
+
if (!isPhysA && isPhysB)
|
|
84
|
+
return 1;
|
|
85
|
+
if (isPhysA && isPhysB) {
|
|
86
|
+
// Prioritize en1, en2... over en0 for wired-first setups
|
|
87
|
+
if (a === 'en0' && b !== 'en0')
|
|
88
|
+
return 1;
|
|
89
|
+
if (b === 'en0' && a !== 'en0')
|
|
90
|
+
return -1;
|
|
91
|
+
return a.localeCompare(b);
|
|
92
|
+
}
|
|
93
|
+
const isVirtA = /^(utun|bridge|vboxnet|docker|lo|gif|stf|awdl|llw|ap)\d*/i.test(a);
|
|
94
|
+
const isVirtB = /^(utun|bridge|vboxnet|docker|lo|gif|stf|awdl|llw|ap)\d*/i.test(b);
|
|
95
|
+
if (!isVirtA && isVirtB)
|
|
96
|
+
return -1;
|
|
97
|
+
if (isVirtA && !isVirtB)
|
|
98
|
+
return 1;
|
|
99
|
+
return a.localeCompare(b);
|
|
100
|
+
});
|
|
101
|
+
for (const name of sortedNames) {
|
|
6
102
|
for (const net of nets[name] ?? []) {
|
|
7
|
-
if (net.family === 'IPv4' && !net.internal)
|
|
103
|
+
if (net.family === 'IPv4' && !net.internal && !net.address.startsWith('169.254.')) {
|
|
8
104
|
return net.address;
|
|
105
|
+
}
|
|
9
106
|
}
|
|
10
107
|
}
|
|
11
108
|
return '127.0.0.1';
|
package/dist/net-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"net-utils.js","sourceRoot":"","sources":["../src/net-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"net-utils.js","sourceRoot":"","sources":["../src/net-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model pricing table for APME cost tracking.
|
|
3
|
+
*
|
|
4
|
+
* Each `ModelEvent` in a SessionSample is priced at ingestion so cost is a
|
|
5
|
+
* first-class, per-unit signal (not a post-hoc estimate). Local models (MLX,
|
|
6
|
+
* on-device Foundation Models) are $0 — that is the whole point of the
|
|
7
|
+
* local-first judge: guilt-free全数 evaluation.
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT — these rates are best-effort public list prices and are the ONE
|
|
10
|
+
* place to correct pricing. They are intentionally overridable at runtime so a
|
|
11
|
+
* code change is never required to fix a rate:
|
|
12
|
+
* - `setPricingOverrides({...})` merges a partial table (e.g. loaded from
|
|
13
|
+
* ~/.agentdeck/settings.json → apme.pricing) over the defaults.
|
|
14
|
+
* - Unknown models fall back to `UNKNOWN_PRICE` ($0) and are flagged via
|
|
15
|
+
* `isPricedModel()` so the dashboard can mark cost as "unpriced" rather
|
|
16
|
+
* than silently showing $0 as if the call were free.
|
|
17
|
+
*
|
|
18
|
+
* Rates are $/million-tokens (USD). Verified model IDs come from the Anthropic
|
|
19
|
+
* `claude-api` reference; dollar figures should be confirmed against
|
|
20
|
+
* https://anthropic.com/pricing before relying on absolute cost numbers.
|
|
21
|
+
*/
|
|
22
|
+
export interface ModelPrice {
|
|
23
|
+
/** USD per 1M input tokens. */
|
|
24
|
+
inPerMtok: number;
|
|
25
|
+
/** USD per 1M output tokens. */
|
|
26
|
+
outPerMtok: number;
|
|
27
|
+
/** Coarse provider tag for scorecard grouping / "subscription vs marginal". */
|
|
28
|
+
provider?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare const UNKNOWN_PRICE: ModelPrice;
|
|
31
|
+
/** Merge a partial pricing table over the defaults (e.g. from user settings). */
|
|
32
|
+
export declare function setPricingOverrides(table: Record<string, ModelPrice> | null | undefined): void;
|
|
33
|
+
/** Normalize a raw model id to its pricing key. Strips provider prefixes and
|
|
34
|
+
* date suffixes so "anthropic/claude-opus-4-8-20260101" → "claude-opus-4-8". */
|
|
35
|
+
export declare function normalizeModelId(model: string): string;
|
|
36
|
+
/** Local models (MLX, Foundation Models, Ollama, any explicit local: prefix). */
|
|
37
|
+
export declare function isLocalModel(model: string): boolean;
|
|
38
|
+
/** Look up the price record for a model (override → default → local → unknown). */
|
|
39
|
+
export declare function priceFor(model: string | null | undefined): ModelPrice;
|
|
40
|
+
/** True when we have a real (non-$0-fallback) rate or a known-free local model. */
|
|
41
|
+
export declare function isPricedModel(model: string | null | undefined): boolean;
|
|
42
|
+
export declare function providerFor(model: string | null | undefined): string;
|
|
43
|
+
/** Compute USD cost for a single model call. Rounds to 6 dp (≈$0.000001). */
|
|
44
|
+
export declare function priceUsd(model: string | null | undefined, inputTokens: number, outputTokens: number): number;
|
|
45
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,EAAE,UAAiE,CAAC;AAyB9F,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAE9F;AAED;iFACiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAKrE;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAKvE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEpE;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAI5G"}
|
package/dist/pricing.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model pricing table for APME cost tracking.
|
|
3
|
+
*
|
|
4
|
+
* Each `ModelEvent` in a SessionSample is priced at ingestion so cost is a
|
|
5
|
+
* first-class, per-unit signal (not a post-hoc estimate). Local models (MLX,
|
|
6
|
+
* on-device Foundation Models) are $0 — that is the whole point of the
|
|
7
|
+
* local-first judge: guilt-free全数 evaluation.
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT — these rates are best-effort public list prices and are the ONE
|
|
10
|
+
* place to correct pricing. They are intentionally overridable at runtime so a
|
|
11
|
+
* code change is never required to fix a rate:
|
|
12
|
+
* - `setPricingOverrides({...})` merges a partial table (e.g. loaded from
|
|
13
|
+
* ~/.agentdeck/settings.json → apme.pricing) over the defaults.
|
|
14
|
+
* - Unknown models fall back to `UNKNOWN_PRICE` ($0) and are flagged via
|
|
15
|
+
* `isPricedModel()` so the dashboard can mark cost as "unpriced" rather
|
|
16
|
+
* than silently showing $0 as if the call were free.
|
|
17
|
+
*
|
|
18
|
+
* Rates are $/million-tokens (USD). Verified model IDs come from the Anthropic
|
|
19
|
+
* `claude-api` reference; dollar figures should be confirmed against
|
|
20
|
+
* https://anthropic.com/pricing before relying on absolute cost numbers.
|
|
21
|
+
*/
|
|
22
|
+
export const UNKNOWN_PRICE = { inPerMtok: 0, outPerMtok: 0, provider: 'unknown' };
|
|
23
|
+
const ZERO_LOCAL = { inPerMtok: 0, outPerMtok: 0, provider: 'local' };
|
|
24
|
+
/**
|
|
25
|
+
* Default rates. Anthropic family rates use the long-standing public tier list
|
|
26
|
+
* prices (Opus $15/$75, Sonnet $3/$15, Haiku $1/$5 per Mtok). Confirm/adjust
|
|
27
|
+
* before treating absolute USD figures as authoritative — see file header.
|
|
28
|
+
*/
|
|
29
|
+
const DEFAULT_PRICING = {
|
|
30
|
+
// ── Anthropic ──
|
|
31
|
+
'claude-fable-5': { inPerMtok: 20, outPerMtok: 100, provider: 'anthropic' },
|
|
32
|
+
'claude-mythos-5': { inPerMtok: 20, outPerMtok: 100, provider: 'anthropic' },
|
|
33
|
+
'claude-opus-4-8': { inPerMtok: 15, outPerMtok: 75, provider: 'anthropic' },
|
|
34
|
+
'claude-opus-4-7': { inPerMtok: 15, outPerMtok: 75, provider: 'anthropic' },
|
|
35
|
+
'claude-opus-4-6': { inPerMtok: 15, outPerMtok: 75, provider: 'anthropic' },
|
|
36
|
+
'claude-sonnet-4-6': { inPerMtok: 3, outPerMtok: 15, provider: 'anthropic' },
|
|
37
|
+
'claude-sonnet-4-5': { inPerMtok: 3, outPerMtok: 15, provider: 'anthropic' },
|
|
38
|
+
'claude-haiku-4-5': { inPerMtok: 1, outPerMtok: 5, provider: 'anthropic' },
|
|
39
|
+
// ── OpenAI (Codex) — confirm before trusting absolute USD ──
|
|
40
|
+
'gpt-5-codex': { inPerMtok: 1.25, outPerMtok: 10, provider: 'openai' },
|
|
41
|
+
'gpt-5': { inPerMtok: 1.25, outPerMtok: 10, provider: 'openai' },
|
|
42
|
+
};
|
|
43
|
+
let overrides = {};
|
|
44
|
+
/** Merge a partial pricing table over the defaults (e.g. from user settings). */
|
|
45
|
+
export function setPricingOverrides(table) {
|
|
46
|
+
overrides = table ? { ...table } : {};
|
|
47
|
+
}
|
|
48
|
+
/** Normalize a raw model id to its pricing key. Strips provider prefixes and
|
|
49
|
+
* date suffixes so "anthropic/claude-opus-4-8-20260101" → "claude-opus-4-8". */
|
|
50
|
+
export function normalizeModelId(model) {
|
|
51
|
+
let m = model.trim().toLowerCase();
|
|
52
|
+
// provider prefix: "anthropic/claude-…", "openai/gpt-…", "openrouter:…"
|
|
53
|
+
const slash = m.lastIndexOf('/');
|
|
54
|
+
if (slash >= 0 && !m.startsWith('mlx:') && !m.startsWith('local:'))
|
|
55
|
+
m = m.slice(slash + 1);
|
|
56
|
+
// date suffix: "-20260101" or "-2026-01-01"
|
|
57
|
+
m = m.replace(/-\d{8}$/, '').replace(/-\d{4}-\d{2}-\d{2}$/, '');
|
|
58
|
+
return m;
|
|
59
|
+
}
|
|
60
|
+
/** Local models (MLX, Foundation Models, Ollama, any explicit local: prefix). */
|
|
61
|
+
export function isLocalModel(model) {
|
|
62
|
+
const m = model.trim().toLowerCase();
|
|
63
|
+
return m.startsWith('mlx:') || m.startsWith('local:') || m.startsWith('ollama:')
|
|
64
|
+
|| m === 'foundationmodels' || m === 'foundation-models' || m === 'apple-fm';
|
|
65
|
+
}
|
|
66
|
+
/** Look up the price record for a model (override → default → local → unknown). */
|
|
67
|
+
export function priceFor(model) {
|
|
68
|
+
if (!model)
|
|
69
|
+
return UNKNOWN_PRICE;
|
|
70
|
+
if (isLocalModel(model))
|
|
71
|
+
return ZERO_LOCAL;
|
|
72
|
+
const key = normalizeModelId(model);
|
|
73
|
+
return overrides[key] ?? overrides[model] ?? DEFAULT_PRICING[key] ?? DEFAULT_PRICING[model] ?? UNKNOWN_PRICE;
|
|
74
|
+
}
|
|
75
|
+
/** True when we have a real (non-$0-fallback) rate or a known-free local model. */
|
|
76
|
+
export function isPricedModel(model) {
|
|
77
|
+
if (!model)
|
|
78
|
+
return false;
|
|
79
|
+
if (isLocalModel(model))
|
|
80
|
+
return true; // known $0, not "missing"
|
|
81
|
+
const key = normalizeModelId(model);
|
|
82
|
+
return Boolean(overrides[key] ?? overrides[model] ?? DEFAULT_PRICING[key] ?? DEFAULT_PRICING[model]);
|
|
83
|
+
}
|
|
84
|
+
export function providerFor(model) {
|
|
85
|
+
return priceFor(model).provider ?? 'unknown';
|
|
86
|
+
}
|
|
87
|
+
/** Compute USD cost for a single model call. Rounds to 6 dp (≈$0.000001). */
|
|
88
|
+
export function priceUsd(model, inputTokens, outputTokens) {
|
|
89
|
+
const p = priceFor(model);
|
|
90
|
+
const usd = (inputTokens / 1_000_000) * p.inPerMtok + (outputTokens / 1_000_000) * p.outPerMtok;
|
|
91
|
+
return Math.round(usd * 1_000_000) / 1_000_000;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|