Files
Cyrene_v2/frontend/web/src/lib/api.ts
T
AskaEth eddf921229 feat(memory): 记忆整理调优面板读写(三态 + 热生效 + 面板表单)
主人 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 通过。
2026-10-13 21:59:18 +08:00

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";