@javierfrancoleal/dsh-supervisor 1.0.25 → 1.0.26
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/dashboard.html +2 -1
- package/package.json +1 -1
- package/server.js +2 -1
package/dashboard.html
CHANGED
|
@@ -350,7 +350,7 @@ body.wall pre{max-height:40vh}
|
|
|
350
350
|
<div id="toast" class="toast"></div>
|
|
351
351
|
<div id="msg" class="note" style="text-align:center"></div>
|
|
352
352
|
</main>
|
|
353
|
-
<footer class="foot"><div class="langs" id="footLangs"></div><div class="copyr">
|
|
353
|
+
<footer class="foot"><div class="langs" id="footLangs"></div><div class="copyr">Le Veilleux · open source (MIT) · autor J.Franco</div><div class="copyr" id="verBadge" style="opacity:.75;margin-top:2px"></div></footer>
|
|
354
354
|
<script>
|
|
355
355
|
"use strict";
|
|
356
356
|
const LANG={es:"ES",en:"EN",fr:"FR",de:"DE",it:"IT",pt:"PT",zh:"中文",ja:"日本語",ko:"한국어",ar:"العربية"};
|
|
@@ -436,6 +436,7 @@ async function loadRegister(){
|
|
|
436
436
|
renderRegSales(r);
|
|
437
437
|
}
|
|
438
438
|
if(me&&me.role==="employee"){$("regCount").textContent=(r.sales||[]).length+" "+t("salesToday");}
|
|
439
|
+
try{api("/api/health").then(hp=>{if(hp&&hp.version)$("verBadge").textContent="supervisor v"+hp.version+" · app 0.1.0 · dsh "+((hp.workers!==undefined)?"":"")+"runtime";});}catch(e){}
|
|
439
440
|
}
|
|
440
441
|
function renderRegSales(r){
|
|
441
442
|
const q=($("regSearch").value||"").toLowerCase();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@javierfrancoleal/dsh-supervisor",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.26",
|
|
4
4
|
"description": "The Veilleux central control plane of the J.Franco agentic workflow suite: user accounts, the live conversation flow (listen → per-person summary → confirm → orders), telemetry, and the universal sector dashboard with 10 languages. Created by J.Franco.",
|
|
5
5
|
"author": "J.Franco",
|
|
6
6
|
"license": "MIT",
|
package/server.js
CHANGED
|
@@ -44,6 +44,7 @@ const LIVE_FILE = path.join(DATA_DIR, "live.json");
|
|
|
44
44
|
const SECTOR_FILE = path.join(DATA_DIR, "sector.json");
|
|
45
45
|
const REG_FILE = path.join(DATA_DIR, "register.json");
|
|
46
46
|
const PRICE_PER_MILLION = Number(process.env.DSH_PRICE_PER_MILLION || 0.28);
|
|
47
|
+
const VERSION = "1.0.25";
|
|
47
48
|
// Homeostasis: the daily token budget (metabolic limit). The brain rests
|
|
48
49
|
// when the budget is spent — no runaway costs.
|
|
49
50
|
const DAILY_BUDGET_USD = Number(process.env.DSH_DAILY_BUDGET_USD || 0); // 0 = unlimited: consumption is the business
|
|
@@ -384,7 +385,7 @@ async function api(req, res, pathname) {
|
|
|
384
385
|
}
|
|
385
386
|
if (pathname === "/api/health" && req.method === "GET") {
|
|
386
387
|
const m = metrics();
|
|
387
|
-
return send(res, 200, { ok: true, uptime: Math.round(process.uptime()), workers: m.workers, reports: m.reports, budgetUsd: DAILY_BUDGET_USD, spentTodayUsd: todayCostUsd(), budgetPct: DAILY_BUDGET_USD > 0 ? Math.round((todayCostUsd() / DAILY_BUDGET_USD) * 100) : 0 }, true);
|
|
388
|
+
return send(res, 200, { ok: true, version: VERSION, uptime: Math.round(process.uptime()), workers: m.workers, reports: m.reports, budgetUsd: DAILY_BUDGET_USD, spentTodayUsd: todayCostUsd(), budgetPct: DAILY_BUDGET_USD > 0 ? Math.round((todayCostUsd() / DAILY_BUDGET_USD) * 100) : 0 }, true);
|
|
388
389
|
}
|
|
389
390
|
if (pathname === "/api/sector" && req.method === "GET") {
|
|
390
391
|
try { return send(res, 200, JSON.parse(fs.readFileSync(SECTOR_FILE, "utf8"))); }
|