reasonix 0.30.0 → 0.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dashboard/dist/app.js +18 -6
- package/dashboard/dist/app.js.map +1 -1
- package/dist/cli/{chunk-RPP24CUB.js → chunk-COFBA5FV.js} +1 -7
- package/dist/cli/{chunk-RPP24CUB.js.map → chunk-COFBA5FV.js.map} +1 -1
- package/dist/cli/index.js +896 -3137
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{prompt-5GLHSLO2.js → prompt-VF7B6BWR.js} +2 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- /package/dist/cli/{prompt-5GLHSLO2.js.map → prompt-VF7B6BWR.js.map} +0 -0
package/README.md
CHANGED
|
@@ -41,6 +41,9 @@
|
|
|
41
41
|
> [!TIP]
|
|
42
42
|
> **Cache stability isn't a feature you turn on; it's an invariant the loop is designed around.** That's the whole reason Reasonix is DeepSeek-only — every layer is tuned to the byte-stable prefix-cache mechanic.
|
|
43
43
|
|
|
44
|
+
> [!NOTE]
|
|
45
|
+
> **Real user, single day (2026-05-01):** 435M input tokens, **99.82% cache hit**, ~$12 instead of the ~$61 the same workload would cost with no cache on `v4-flash` — see the [case study](./benchmarks/real-world-cache/README.md). DeepSeek provides the cacheable bytes; the four mechanisms in [Pillar 1](./docs/ARCHITECTURE.md#pillar-1--cache-first-loop) are how Reasonix keeps them cacheable across long sessions.
|
|
46
|
+
|
|
44
47
|
<br/>
|
|
45
48
|
|
|
46
49
|
## Install
|
package/dashboard/dist/app.js
CHANGED
|
@@ -22514,6 +22514,16 @@ function fmtUsd(n3) {
|
|
|
22514
22514
|
if (n3 === 0) return "$0";
|
|
22515
22515
|
return `$${n3.toFixed(n3 < 0.01 ? 6 : 4)}`;
|
|
22516
22516
|
}
|
|
22517
|
+
var USD_TO_CNY = 7.2;
|
|
22518
|
+
function fmtCost(usd, currency, fractionDigits) {
|
|
22519
|
+
if (usd === null || usd === void 0) return "\u2014";
|
|
22520
|
+
const cur = currency ?? "CNY";
|
|
22521
|
+
const amount = cur === "CNY" ? usd * USD_TO_CNY : usd;
|
|
22522
|
+
if (amount === 0) return cur === "CNY" ? "\xA50" : "$0";
|
|
22523
|
+
const sym = cur === "CNY" ? "\xA5" : cur === "USD" ? "$" : `${cur} `;
|
|
22524
|
+
const digits = fractionDigits ?? (Math.abs(amount) < 0.01 ? 6 : 4);
|
|
22525
|
+
return `${sym}${amount.toFixed(digits)}`;
|
|
22526
|
+
}
|
|
22517
22527
|
function fmtPct(n3) {
|
|
22518
22528
|
if (n3 === null || n3 === void 0) return "\u2014";
|
|
22519
22529
|
return `${(n3 * 100).toFixed(1)}%`;
|
|
@@ -23137,6 +23147,7 @@ function SideRail({ stats, budgetUsd, activePlan }) {
|
|
|
23137
23147
|
const showBudget = stats != null && typeof budgetUsd === "number" && budgetUsd > 0;
|
|
23138
23148
|
const budgetPct = showBudget ? Math.min(120, stats.totalCostUsd / budgetUsd * 100) : 0;
|
|
23139
23149
|
const budgetTone = budgetPct >= 100 ? "err" : budgetPct >= 80 ? "warn" : "";
|
|
23150
|
+
const walletCurrency = stats?.balance?.[0]?.currency;
|
|
23140
23151
|
return html4`
|
|
23141
23152
|
<aside class="chat-rail">
|
|
23142
23153
|
${activePlan ? html4`<${ActivePlanCard} plan=${activePlan} />` : null}
|
|
@@ -23145,7 +23156,7 @@ function SideRail({ stats, budgetUsd, activePlan }) {
|
|
|
23145
23156
|
<div class="rh">${t4("chat.railSession")}</div>
|
|
23146
23157
|
<div class="rail-kv"><span class="k">${t4("chat.railTurns")}</span><span class="v">${stats.turns.toLocaleString()}</span></div>
|
|
23147
23158
|
<div class="rail-kv"><span class="k">${t4("chat.railPromptTok")}</span><span class="v">${stats.lastPromptTokens.toLocaleString()}</span></div>
|
|
23148
|
-
<div class="rail-kv"><span class="k">${t4("chat.railCost")}</span><span class="v">${
|
|
23159
|
+
<div class="rail-kv"><span class="k">${t4("chat.railCost")}</span><span class="v">${fmtCost(stats.totalCostUsd, walletCurrency)}</span></div>
|
|
23149
23160
|
<div class="progress-row" style="margin-top:8px">
|
|
23150
23161
|
<span class="lbl">${t4("chat.railCacheHit")}</span>
|
|
23151
23162
|
<div class=${`progress ${cacheTone}`}><div class="progress-fill" style=${`width:${cachePct}%`}></div></div>
|
|
@@ -23159,7 +23170,7 @@ function SideRail({ stats, budgetUsd, activePlan }) {
|
|
|
23159
23170
|
<div class="progress-row">
|
|
23160
23171
|
<span class="lbl">${t4("chat.railSpend")}</span>
|
|
23161
23172
|
<div class=${`progress ${budgetTone}`}><div class="progress-fill" style=${`width:${Math.min(100, budgetPct)}%`}></div></div>
|
|
23162
|
-
<span class="v" style=${budgetTone === "err" ? "color:var(--c-err)" : budgetTone === "warn" ? "color:var(--c-warn)" : ""}>${
|
|
23173
|
+
<span class="v" style=${budgetTone === "err" ? "color:var(--c-err)" : budgetTone === "warn" ? "color:var(--c-warn)" : ""}>${fmtCost(stats.totalCostUsd, walletCurrency)} / ${fmtCost(budgetUsd, walletCurrency)}</span>
|
|
23163
23174
|
</div>
|
|
23164
23175
|
</div>
|
|
23165
23176
|
` : null}
|
|
@@ -23283,11 +23294,11 @@ function ChatStatusBar({ stats, model }) {
|
|
|
23283
23294
|
</span>
|
|
23284
23295
|
<span class="status-item">
|
|
23285
23296
|
<span class="status-label">${t4("chat.statusTurn")}</span>
|
|
23286
|
-
<code>${
|
|
23297
|
+
<code>${fmtCost(stats.lastTurnCostUsd, balance?.currency)}</code>
|
|
23287
23298
|
</span>
|
|
23288
23299
|
<span class="status-item">
|
|
23289
23300
|
<span class="status-label">${t4("chat.statusSession")}</span>
|
|
23290
|
-
<code>${
|
|
23301
|
+
<code>${fmtCost(stats.totalCostUsd, balance?.currency)}</code>
|
|
23291
23302
|
<span class="muted" style="font-size: 10px;">
|
|
23292
23303
|
${t4("chat.statusTurns", { count: stats.turns, s: stats.turns === 1 ? "" : "s" })}
|
|
23293
23304
|
</span>
|
|
@@ -24204,6 +24215,7 @@ function currentSessionBlock(c3) {
|
|
|
24204
24215
|
`;
|
|
24205
24216
|
}
|
|
24206
24217
|
const s3 = c3.currentSession;
|
|
24218
|
+
const currency = c3.balance?.currency;
|
|
24207
24219
|
return html4`
|
|
24208
24220
|
<div class="cock-list cock-w-2">
|
|
24209
24221
|
<div class="ch"><span class="ttl">${t4("overview.currentSession")}</span></div>
|
|
@@ -24213,7 +24225,7 @@ function currentSessionBlock(c3) {
|
|
|
24213
24225
|
<div style="display:grid;grid-template-columns:repeat(3, 1fr);gap:8px;font-family:var(--font-mono);font-size:11px">
|
|
24214
24226
|
<div><span style="color:var(--fg-3)">${t4("overview.promptTok")}</span><div style="color:var(--fg-0);font-size:13px;font-weight:600">${fmtNum(s3.lastPromptTokens)}</div></div>
|
|
24215
24227
|
<div><span style="color:var(--fg-3)">${t4("overview.completionTok")}</span><div style="color:var(--fg-0);font-size:13px;font-weight:600">${fmtNum(s3.completionTokens)}</div></div>
|
|
24216
|
-
<div><span style="color:var(--fg-3)">${t4("overview.cost")}</span><div style="color:var(--fg-0);font-size:13px;font-weight:600">${
|
|
24228
|
+
<div><span style="color:var(--fg-3)">${t4("overview.cost")}</span><div style="color:var(--fg-0);font-size:13px;font-weight:600">${fmtCost(s3.totalCostUsd, currency)}</div></div>
|
|
24217
24229
|
</div>
|
|
24218
24230
|
</div>
|
|
24219
24231
|
`;
|
|
@@ -24242,7 +24254,7 @@ function costTrendSpark(c3) {
|
|
|
24242
24254
|
return html4`
|
|
24243
24255
|
<div class="chart cock-w-2">
|
|
24244
24256
|
<div class="chart-h"><span class="title">${t4("overview.costTrend")}</span></div>
|
|
24245
|
-
<div class="chart-v">${
|
|
24257
|
+
<div class="chart-v">${fmtCost(avg, c3.balance?.currency)}<span class="unit">${t4("overview.dayAvg")}</span></div>
|
|
24246
24258
|
<div class="chart-spark">
|
|
24247
24259
|
<svg viewBox=${`0 0 ${w3} ${h3}`} preserveAspectRatio="none">
|
|
24248
24260
|
<polyline fill="none" stroke="var(--c-brand)" stroke-width="1.5" points=${points2} />
|