主人 2026-10-07 两条口径:「.env 只做兜底用,后端自动创建独立的面板配置文件
之后就走面板配置文件,这些键优先从面板配置上取」+「频率必须调,可以调到 1 小时
或者三小时,或者动态分配(白天短、静默期长)」。
此前 $DATA_DIR/config/memory-tidy.json 只有读路径(装配期读一次 + 启动播种):
主人要改频率只能改文件 + 重启后端。本切片补上「读回来 → 改 → 落盘 → 当场生效」。
后端(读写端点,契约待塔登记 v0.92):
- GET /api/v1/admin/memories/tidy/tuning 读盘上 7 键值 + 取值规则 specs +
缺位时 .env 档的进程生效值(与 /admin/config-facts 同源)
- PUT 同路径:三态补丁(键缺位 = 不改动 / 合法值 = 采用 / 非法值 = 400 且盘上一
个字节都不动)+ null 清除哨兵(删键 ⇒ 回到下一档)+ writeAuth + 审计
memory.tidy.tuning;值一个都没变时不落盘,文件解不开时拒绝覆盖(409)
- 落盘走 runtimeconfig.PatchMemoryTidyTuning(原子写 temp+rename,与
SeedMemoryTidy/SaveWebSearch 同族同手法);补丁语义保留下受管的其它键
(t1Judge/t1PerWindow/autoApplyPerRound 原样保留)
- 热生效:保存后按「面板 > .env > 代码默认」重算并叠到运行期对象;整理档会
重排心跳(否则新周期要等旧周期那一觉睡完),审查档当场改 ingestGate/tempTtlSec。
未接线/失败时如实回 hot:false + hotError,绝不把「落盘了」说成「生效了」
前端(Miuix):
- 记忆管理页新增「记忆整理调优」卡:7 键表单(中文标签、单位、留空⇒跟随谁、
env 档当前值、坏值就地报错并拦住保存、保存后回显从磁盘读回的真值)
- 试算卡的 recallMode 按契约 v0.91 如实渲染:embedding / lexical(已降级)/
mixed(部分分区降级)/ ""(无候选可比)——空串不再渲染成空标签;并把
error.code=tidy_recall_unavailable 单列一句(「尝试过但向量源不可用」,与
「没有候选可比」显式区分)
验证:go test ./internal/{services/gateway,runtime/memory,config/runtimeconfig}
全绿;三态/清除/坏文件拒写/同值不重写/热生效接线各有用例,并逐条做过变异自证;
tsc --noEmit + vite build 通过;两个 esbuild 前端测试 39 + 34 + 41 checks 通过。
167 lines
4.2 KiB
TypeScript
167 lines
4.2 KiB
TypeScript
/**
|
|
* Public REST surface for the Cyrene v2 gateway, kept as a single import path
|
|
* (`lib/api`) so call sites never change. The implementation is split by domain
|
|
* under `lib/api/`:
|
|
*
|
|
* core.ts transport (request/ApiError) + token/role/API-key state
|
|
* auth.ts /auth/login, /health
|
|
* chat.ts /chat (sync + streaming)
|
|
* sessions.ts /sessions (list/create/delete, message history)
|
|
* messages.ts /messages/{id} (PATCH edit / DELETE)
|
|
* personas.ts /personas
|
|
* admin.ts /admin/* CRUD (personas, users, llm, rag, iot, automations…)
|
|
* adminChannels.ts /admin/channels/* (adapters, config, platform views, login)
|
|
* adminSystem.ts /admin/observability|notifications|backthink|system/*
|
|
* adminMemoryTidyApply.ts /admin/memories/candidates|tidy/run (整理应用/回滚;TIDY-1)
|
|
*
|
|
* Everything below is a verbatim re-export — behaviour is unchanged.
|
|
*/
|
|
|
|
export {
|
|
ApiError,
|
|
decodeJwtRole,
|
|
getApiKey,
|
|
getAuthToken,
|
|
getStoredRole,
|
|
isNotImplemented,
|
|
isTokenExpired,
|
|
onAuthExpired,
|
|
setApiKey,
|
|
setAuthToken,
|
|
setStoredRole,
|
|
} from "./api/core";
|
|
|
|
export { health, login } from "./api/auth";
|
|
|
|
export { fetchEnums } from "./api/meta";
|
|
export type { MetaEnums } from "./api/meta";
|
|
|
|
export { chatStream, chatSync } from "./api/chat";
|
|
export type { ChatTriggerResult } from "./api/chat";
|
|
|
|
export {
|
|
createSubSession,
|
|
deleteSession,
|
|
fetchMessages,
|
|
fetchSessions,
|
|
markSessionRead,
|
|
patchSession,
|
|
} from "./api/sessions";
|
|
export type { CreateSessionResult, MessageDto, SessionPatch } from "./api/sessions";
|
|
|
|
export { deleteMessage, patchMessage } from "./api/messages";
|
|
|
|
export { fetchPersonas } from "./api/personas";
|
|
|
|
export {
|
|
adminAddLlmProvider,
|
|
adminAddMemory,
|
|
adminCreateAutomation,
|
|
adminCreatePersona,
|
|
adminCreateUser,
|
|
adminDeleteAutomation,
|
|
adminDeleteRag,
|
|
adminExportSession,
|
|
adminGetLlm,
|
|
adminGetLlmCatalog,
|
|
adminGetOwnerProfile,
|
|
adminIndexRag,
|
|
adminIoTControl,
|
|
adminIoTRule,
|
|
adminIoTScenario,
|
|
adminIssueApiKey,
|
|
adminListAutomations,
|
|
adminListChannels,
|
|
adminListInstalledPlugins,
|
|
adminListIoT,
|
|
adminListMemories,
|
|
adminListPersonas,
|
|
adminListPlugins,
|
|
adminListRag,
|
|
adminListSessions,
|
|
adminListUsers,
|
|
adminLlmUsage,
|
|
adminMemorySearch,
|
|
adminPluginInstall,
|
|
adminPluginUninstall,
|
|
adminRevokeApiKey,
|
|
adminResetLlmFromEnv,
|
|
adminRunAutomation,
|
|
adminSaveOwnerProfile,
|
|
adminSearchRag,
|
|
adminSetPluginPolicy,
|
|
adminTestLlm,
|
|
adminUpdatePersona,
|
|
} from "./api/admin";
|
|
|
|
export {
|
|
adminChannelClose,
|
|
adminChannelFriendHandle,
|
|
adminChannelLogOverview,
|
|
adminChannelMessageTest,
|
|
adminChannelMessages,
|
|
adminChannelOpen,
|
|
adminChannelPlatformFriends,
|
|
adminChannelPlatformView,
|
|
adminChannelTest,
|
|
adminDeleteChannelAccount,
|
|
adminDeleteEmptyChannelAccounts,
|
|
adminSaveChannelConfig,
|
|
adminWeixinLoginQR,
|
|
adminWeixinLoginStatus,
|
|
} from "./api/adminChannels";
|
|
export type { ChannelActionResult, ChannelConfigSaveResult } from "./api/adminChannels";
|
|
|
|
export { adminChannelEventCounters, adminChannelEvents } from "./api/adminChannelEvents";
|
|
export type { ChannelEventQuery } from "./api/adminChannelEvents";
|
|
|
|
export {
|
|
adminBackthink,
|
|
adminConfigFacts,
|
|
adminFlowGraph,
|
|
adminFlowTimeline,
|
|
adminListNotifications,
|
|
adminMemoryTidyDryRun,
|
|
adminObservabilityAudit,
|
|
adminObservabilityLogs,
|
|
adminObservabilityMetrics,
|
|
adminObservabilityTrace,
|
|
adminSelfWakeStatus,
|
|
adminSystemBackup,
|
|
adminSystemRestore,
|
|
adminSystemRevokeKeys,
|
|
adminSystemRotateJWT,
|
|
adminSystemStorage,
|
|
} from "./api/adminSystem";
|
|
export type {
|
|
AdminFlowGraphResponse,
|
|
AdminFlowLane,
|
|
AdminFlowTimelineResponse,
|
|
AdminFlowTimelineRound,
|
|
AdminFlowTurn,
|
|
AdminSelfWakeGate,
|
|
AdminSelfWakeStatus,
|
|
} from "./api/adminSystem";
|
|
|
|
export {
|
|
TIDY_APPLY_STATUS_APPLIED,
|
|
TIDY_APPLY_STATUS_FAILED,
|
|
TIDY_APPLY_STATUS_SKIPPED,
|
|
TIDY_STATUS_APPLIED,
|
|
TIDY_STATUS_PENDING,
|
|
adminTidyCandidateApply,
|
|
adminTidyCandidateRevert,
|
|
adminTidyCandidates,
|
|
adminTidyCandidatesApplyBatch,
|
|
adminTidyRun,
|
|
} from "./api/adminMemoryTidyApply";
|
|
export {
|
|
adminMemoryTidyTuning,
|
|
adminMemoryTidyTuningSave,
|
|
} from "./api/adminMemories";
|
|
export type {
|
|
AdminMemoryTidyTuningPatch,
|
|
AdminMemoryTidyTuningSpec,
|
|
AdminMemoryTidyTuningView,
|
|
} from "./api/adminMemories";
|