@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 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">Suite J.Franco · open source (MIT) · autor J.Franco</div></footer>
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.25",
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"))); }