44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
// token_watch.js —— Token 用量监控(对外的薄包装层)。
|
|
// 注入脚本由 voice_cdp.js 在连接 Codex 时自动注入(与语音脚本同 session)。
|
|
// 本模块暴露 status / reset 给 IPC handler 和前端面板。
|
|
"use strict";
|
|
const voice = require("./voice_cdp");
|
|
const tokenUsage = require("./token_usage");
|
|
|
|
function status() {
|
|
const snap = voice.status();
|
|
return {
|
|
phase: snap.phase,
|
|
date: "",
|
|
total: 0,
|
|
};
|
|
}
|
|
|
|
async function tokenStatus() {
|
|
try {
|
|
const snap = voice.status();
|
|
const page = await voice.tokenStatus();
|
|
const local = await tokenUsage.readDaily();
|
|
if (local && local.available) {
|
|
await voice.tokenSet(local);
|
|
return { ok: true, phase: snap.phase, connected: snap.phase === "connected", ...local, network: page.network };
|
|
}
|
|
return { ok: true, phase: snap.phase, connected: snap.phase === "connected", ...page };
|
|
} catch {
|
|
return { ok: false, error: "无法读取 token 用量(Codex 可能未连接)" };
|
|
}
|
|
}
|
|
|
|
async function tokenReset() {
|
|
try {
|
|
const local = await tokenUsage.reset();
|
|
const ok = await voice.tokenSet(local);
|
|
await voice.tokenReset();
|
|
return { ok: ok || true };
|
|
} catch {
|
|
return { ok: false, error: "无法重置" };
|
|
}
|
|
}
|
|
|
|
module.exports = { status, tokenStatus, tokenReset };
|