import { Hono } from 'hono'; import type { Bindings } from '../types'; import { authStoreStatus } from '../lib/portal-auth-store'; export const healthRouter = new Hono<{ Bindings: Bindings }>(); // t162(leo 07-31 實撞:「小幫手一直顯示知識庫需要更新…重新更新後並不會消失」): // daemon cloudVersionStale() 讀 /health 的 `bundle_version` 判斷是否過舊—— // 但本端點過去只回 {ok:true},**從沒吐這個欄位** ⇒ daemon 恆讀到空字串 // ⇒ 恆判 stale ⇒ 假警報永遠不消失(安裝器其實一直有注入 ARCRUN_BUNDLE_VERSION var, // 只是沒有人把它吐出來)。修=誠實回報本實例的 bundle 版本。 // 未注入(本地 dev/很舊的實例)就省略該欄——daemon 對空字串仍判 stale, // 那是**正確的**(真的是老實例,該更新)。 // D61(ADR D61 / Leo/arcrun-rag#55):多吐一個 `auth_store`——「認證住哪、寫不寫得進去」 // 要在實例自己這一側就看得出來,不是等用戶登不進去才發現(#10「寧可明顯失敗」)。 // 只回統計不回內容(帳號數/有沒有 console 帳密/分片數),不洩漏任何 email 或雜湊。 // bundle_version 的既有行為不動(未注入就省略該欄——daemon 對空字串判 stale 是正確的)。 healthRouter.get('/health', (c) => { const bundleVersion = c.env.ARCRUN_BUNDLE_VERSION; return c.json({ ok: true, ...(bundleVersion ? { bundle_version: bundleVersion } : {}), auth_store: authStoreStatus(c.env), // arcrun-rag#38/#69/#25(2026-08-11):安裝器判斷「要不要重推」只比 bundle_version—— // 但這次要修的洞是「installer 從沒注入過 PORTAL_MAIL_RELAY_BASE」,跟 bundle 內容 // 版本無關(同一個 cypher 版本,有的實例有這個 var、有的沒有)。純比版本號的話, // 已經在最新版的實例(如 leo 自己那台)永遠不會因為「按更新」而重推,這個 var // 就永遠補不進去。只回布林(有沒有設,不回值本身)——不洩漏郵差網址。 mail_relay_configured: Boolean(String(c.env.PORTAL_MAIL_RELAY_BASE ?? '').trim()), }); }); healthRouter.get('/', (c) => c.json({ service: 'arcrun-cypher-executor', version: '1.0.0', status: 'ok', }) );