@agentdeck/shared 0.2.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/dist/adapter.d.ts +3 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +24 -0
- package/dist/adapter.js.map +1 -1
- package/dist/command-builders.d.ts +7 -2
- package/dist/command-builders.d.ts.map +1 -1
- package/dist/command-builders.js +17 -2
- package/dist/command-builders.js.map +1 -1
- 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 +26 -2
- package/dist/eval-schema.d.ts.map +1 -1
- package/dist/eval-schema.js.map +1 -1
- package/dist/format-utils.d.ts +25 -0
- package/dist/format-utils.d.ts.map +1 -1
- package/dist/format-utils.js +45 -0
- package/dist/format-utils.js.map +1 -1
- package/dist/gateway-protocol.d.ts +1 -1
- package/dist/gateway-protocol.js +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/llm-settings.d.ts +3 -3
- package/dist/llm-settings.d.ts.map +1 -1
- package/dist/llm-settings.js +3 -3
- package/dist/llm-settings.js.map +1 -1
- 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 +175 -5
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +11 -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 +82 -2
- package/dist/session-utils.d.ts.map +1 -1
- package/dist/session-utils.js +205 -10
- package/dist/session-utils.js.map +1 -1
- package/dist/state-colors.d.ts.map +1 -1
- package/dist/state-colors.js +2 -0
- package/dist/state-colors.js.map +1 -1
- package/dist/states.d.ts +1 -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 +17 -5
- package/dist/svg-renderers/agent-logos.d.ts.map +1 -1
- package/dist/svg-renderers/agent-logos.js +177 -39
- package/dist/svg-renderers/agent-logos.js.map +1 -1
- package/dist/svg-renderers/session-slot-renderer.d.ts +59 -6
- package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -1
- package/dist/svg-renderers/session-slot-renderer.js +398 -209
- package/dist/svg-renderers/session-slot-renderer.js.map +1 -1
- package/dist/svg-renderers/text-utils.d.ts +14 -0
- package/dist/svg-renderers/text-utils.d.ts.map +1 -1
- package/dist/svg-renderers/text-utils.js +34 -0
- package/dist/svg-renderers/text-utils.js.map +1 -1
- package/dist/telemetry-envelope.d.ts +1 -1
- package/dist/telemetry-envelope.d.ts.map +1 -1
- 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 +24 -0
- package/dist/timeline-summarizer.d.ts.map +1 -1
- package/dist/timeline-summarizer.js +55 -13
- package/dist/timeline-summarizer.js.map +1 -1
- package/dist/timeline.d.ts +72 -2
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +187 -10
- package/dist/timeline.js.map +1 -1
- package/package.json +1 -1
package/dist/format-utils.js
CHANGED
|
@@ -110,6 +110,51 @@ export function adjustUsagePercent(percent, resetsAt) {
|
|
|
110
110
|
}
|
|
111
111
|
return percent;
|
|
112
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* A Codex rolling-window snapshot is stale once its window has ended: `resetsAt`
|
|
115
|
+
* is in the past beyond a short grace. Codex usage is read passively from the
|
|
116
|
+
* newest local rollout file, so once Codex stops being used the snapshot freezes
|
|
117
|
+
* — `usedPercent` stays at its last value and `resetsAt` slides into the past. At
|
|
118
|
+
* that point a "now" countdown would mislead (the bar still shows the old percent),
|
|
119
|
+
* so consumers should dim the gauge and show a "stale" marker instead.
|
|
120
|
+
*
|
|
121
|
+
* Grace (default 5m) keeps a genuinely-just-reset window briefly showing "now".
|
|
122
|
+
*/
|
|
123
|
+
export function isCodexWindowStale(resetsAt, graceMs = 5 * 60_000) {
|
|
124
|
+
if (!resetsAt)
|
|
125
|
+
return false;
|
|
126
|
+
const t = new Date(resetsAt).getTime();
|
|
127
|
+
if (isNaN(t))
|
|
128
|
+
return false;
|
|
129
|
+
return Date.now() - t > graceMs;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Antigravity plan name → compact "AGY <tier>" chip.
|
|
133
|
+
*
|
|
134
|
+
* "Google AI Pro" → "AGY Pro"
|
|
135
|
+
* "Google AI Ultra" → "AGY Ultra"
|
|
136
|
+
* "" / undefined → undefined (nothing to show)
|
|
137
|
+
*
|
|
138
|
+
* The raw `availableCredits` count is deliberately never surfaced — it's backend
|
|
139
|
+
* metering with no glanceable meaning (see antigravity-local.ts). This is the
|
|
140
|
+
* canonical definition; the native mirrors (ESP32 `util/usage_format.h`
|
|
141
|
+
* `formatAgyPlan`, Android `EinkMonitorScreen.buildAntigravityLimitValue`) must
|
|
142
|
+
* match it. Idempotent: an already-"AGY …" string is returned unchanged.
|
|
143
|
+
*/
|
|
144
|
+
export function formatAntigravityPlanShort(planName) {
|
|
145
|
+
const raw = planName?.trim();
|
|
146
|
+
if (!raw)
|
|
147
|
+
return undefined;
|
|
148
|
+
if (raw === 'AGY' || raw.startsWith('AGY '))
|
|
149
|
+
return raw;
|
|
150
|
+
let tier = raw;
|
|
151
|
+
if (/^Google AI\b/.test(tier))
|
|
152
|
+
tier = tier.slice('Google AI'.length);
|
|
153
|
+
else if (/^Antigravity\b/.test(tier))
|
|
154
|
+
tier = tier.slice('Antigravity'.length);
|
|
155
|
+
tier = tier.trim();
|
|
156
|
+
return tier ? `AGY ${tier}` : 'AGY';
|
|
157
|
+
}
|
|
113
158
|
/** Plain-text gauge bar: "████░░" (no ANSI colors) */
|
|
114
159
|
export function gaugeBar(percent, width = 6) {
|
|
115
160
|
const clamped = Math.max(0, Math.min(100, percent));
|
package/dist/format-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../src/format-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../src/format-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC3D,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,2EAA2E;IAC3E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEpC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,GAAG,OAAO,GAAG,CAAC;QAEvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAEnD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtD,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,SAAS,GAAG,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,IAAI,QAAQ,GAAG,CAAC;IAC5D,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC;IACtD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IAClC,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,aAAa,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,GAAG,aAAa,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IACzD,OAAO,GAAG,KAAK,GAAG,CAAC;AACrB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,GAAG,GAAG,GAAG,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAkC,EAClC,QAAmC;IAEnC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACrC,IAAI,OAAO,GAAG,SAAS;oBAAE,OAAO,OAAO,CAAC;gBACxC,IAAI,OAAO,GAAG,CAAC;oBAAE,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAA4B,EAAE,OAAO,GAAG,CAAC,GAAG,MAAM;IACnF,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAwB;IACjE,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAC;IACxD,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAChE,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACtC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAK,GAAG,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* under `generated/protocol/`, ensuring protocol parity across the three implementations.
|
|
11
11
|
*/
|
|
12
12
|
/** Protocol major version. Bridge rejects mismatched Gateway versions. */
|
|
13
|
-
export declare const GATEWAY_PROTOCOL_VERSION =
|
|
13
|
+
export declare const GATEWAY_PROTOCOL_VERSION = 4;
|
|
14
14
|
/** Default Gateway port (OpenClaw backend). */
|
|
15
15
|
export declare const GATEWAY_DEFAULT_PORT = 18789;
|
|
16
16
|
/** Ed25519 SPKI DER prefix length (bytes before the raw 32-byte key). */
|
package/dist/gateway-protocol.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
// ===== Protocol version =====
|
|
13
13
|
/** Protocol major version. Bridge rejects mismatched Gateway versions. */
|
|
14
|
-
export const GATEWAY_PROTOCOL_VERSION =
|
|
14
|
+
export const GATEWAY_PROTOCOL_VERSION = 4;
|
|
15
15
|
/** Default Gateway port (OpenClaw backend). */
|
|
16
16
|
export const GATEWAY_DEFAULT_PORT = 18789;
|
|
17
17
|
/** Ed25519 SPKI DER prefix length (bytes before the raw 32-byte key). */
|
package/dist/index.d.ts
CHANGED
|
@@ -6,12 +6,20 @@ export * from './adapter.js';
|
|
|
6
6
|
export * from './voice-paths.js';
|
|
7
7
|
export * from './net-utils.js';
|
|
8
8
|
export * from './timeline.js';
|
|
9
|
+
export * from './timeline-icons.js';
|
|
10
|
+
export * from './timeline-label.js';
|
|
11
|
+
export * from './timeline-markdown.js';
|
|
9
12
|
export * from './format-utils.js';
|
|
10
13
|
export * from './timeline-summarizer.js';
|
|
11
14
|
export * from './session-utils.js';
|
|
12
15
|
export * from './state-colors.js';
|
|
16
|
+
export * from './connection-status.js';
|
|
17
|
+
export * from './design-tokens.js';
|
|
13
18
|
export * from './svg-renderers/index.js';
|
|
19
|
+
export * from './d200h-layout.js';
|
|
14
20
|
export * from './llm-settings.js';
|
|
15
21
|
export * from './eval-schema.js';
|
|
22
|
+
export * from './sample.js';
|
|
23
|
+
export * from './pricing.js';
|
|
16
24
|
export * from './telemetry-envelope.js';
|
|
17
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,12 +6,20 @@ export * from './adapter.js';
|
|
|
6
6
|
export * from './voice-paths.js';
|
|
7
7
|
export * from './net-utils.js';
|
|
8
8
|
export * from './timeline.js';
|
|
9
|
+
export * from './timeline-icons.js';
|
|
10
|
+
export * from './timeline-label.js';
|
|
11
|
+
export * from './timeline-markdown.js';
|
|
9
12
|
export * from './format-utils.js';
|
|
10
13
|
export * from './timeline-summarizer.js';
|
|
11
14
|
export * from './session-utils.js';
|
|
12
15
|
export * from './state-colors.js';
|
|
16
|
+
export * from './connection-status.js';
|
|
17
|
+
export * from './design-tokens.js';
|
|
13
18
|
export * from './svg-renderers/index.js';
|
|
19
|
+
export * from './d200h-layout.js';
|
|
14
20
|
export * from './llm-settings.js';
|
|
15
21
|
export * from './eval-schema.js';
|
|
22
|
+
export * from './sample.js';
|
|
23
|
+
export * from './pricing.js';
|
|
16
24
|
export * from './telemetry-envelope.js';
|
|
17
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC"}
|
package/dist/llm-settings.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* (LlmMlxConfig). Keep the two in sync when fields change.
|
|
12
12
|
*/
|
|
13
13
|
/** Final fallback when neither settings nor probe yield a model id. */
|
|
14
|
-
export declare const MLX_FALLBACK_MODEL = "mlx-community/Qwen3.
|
|
14
|
+
export declare const MLX_FALLBACK_MODEL = "mlx-community/Qwen3-1.7B-4bit";
|
|
15
15
|
export interface MlxSettings {
|
|
16
16
|
/** Base URL (no /chat/completions suffix). */
|
|
17
17
|
endpoint: string;
|
|
@@ -35,8 +35,8 @@ export declare function resolveMlxModel(probeFirst?: string | null): string;
|
|
|
35
35
|
*
|
|
36
36
|
* Priority — mirrors the 4-layer policy documented in CLAUDE.md:
|
|
37
37
|
* 1. caller-supplied pin if present in catalog
|
|
38
|
-
* 2. `MLX_FALLBACK_MODEL`
|
|
39
|
-
*
|
|
38
|
+
* 2. `MLX_FALLBACK_MODEL` if present in catalog — keeps the codebase's
|
|
39
|
+
* chosen lightweight default in sync with what the dashboard advertises
|
|
40
40
|
* 3. first catalog entry (preserves the `auto-pick first` behavior added
|
|
41
41
|
* in commit 2b7b38b3 for the many-models case)
|
|
42
42
|
* 4. null — no catalog
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-settings.d.ts","sourceRoot":"","sources":["../src/llm-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"llm-settings.d.ts","sourceRoot":"","sources":["../src/llm-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,kCAAkC,CAAC;AAIlE,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAqBD,wBAAgB,eAAe,IAAI,WAAW,CAqC7C;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKlE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EACpC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAClB,MAAM,GAAG,IAAI,CAKf;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
package/dist/llm-settings.js
CHANGED
|
@@ -15,7 +15,7 @@ import { join } from 'path';
|
|
|
15
15
|
import { homedir } from 'os';
|
|
16
16
|
const DEFAULT_ENDPOINT = 'http://127.0.0.1:8800';
|
|
17
17
|
/** Final fallback when neither settings nor probe yield a model id. */
|
|
18
|
-
export const MLX_FALLBACK_MODEL = 'mlx-community/Qwen3.
|
|
18
|
+
export const MLX_FALLBACK_MODEL = 'mlx-community/Qwen3-1.7B-4bit';
|
|
19
19
|
const PLACEHOLDER_MODEL_IDS = new Set(['', 'default', 'qwen3-30b']);
|
|
20
20
|
let cached = null;
|
|
21
21
|
const CACHE_TTL_MS = 30_000;
|
|
@@ -91,8 +91,8 @@ export function resolveMlxModel(probeFirst) {
|
|
|
91
91
|
*
|
|
92
92
|
* Priority — mirrors the 4-layer policy documented in CLAUDE.md:
|
|
93
93
|
* 1. caller-supplied pin if present in catalog
|
|
94
|
-
* 2. `MLX_FALLBACK_MODEL`
|
|
95
|
-
*
|
|
94
|
+
* 2. `MLX_FALLBACK_MODEL` if present in catalog — keeps the codebase's
|
|
95
|
+
* chosen lightweight default in sync with what the dashboard advertises
|
|
96
96
|
* 3. first catalog entry (preserves the `auto-pick first` behavior added
|
|
97
97
|
* in commit 2b7b38b3 for the many-models case)
|
|
98
98
|
* 4. null — no catalog
|
package/dist/llm-settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-settings.js","sourceRoot":"","sources":["../src/llm-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD,uEAAuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,
|
|
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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"}
|