Improve state v2 parsing and errors
This commit is contained in:
@@ -261,9 +261,23 @@ function popVar(path, value) {
|
||||
* =========================
|
||||
*/
|
||||
const EXT_ID = 'LittleWhiteBox';
|
||||
const ERR_VAR_NAME = 'LWB_STATE_ERRORS';
|
||||
const LOG_KEY = 'stateLogV2';
|
||||
const CKPT_KEY = 'stateCkptV2';
|
||||
|
||||
|
||||
/**
|
||||
* 写入状态错误到本地变量(覆盖写入)
|
||||
*/
|
||||
function writeStateErrorsToLocalVar(lines) {
|
||||
try {
|
||||
const text = Array.isArray(lines) && lines.length
|
||||
? lines.map(s => `- ${String(s)}`).join('\n')
|
||||
: '';
|
||||
setLocalVariable(ERR_VAR_NAME, text);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
function getLwbExtMeta() {
|
||||
const ctx = getContext();
|
||||
const meta = ctx?.chatMetadata || (ctx.chatMetadata = {});
|
||||
@@ -416,6 +430,7 @@ export function applyStateForMessage(messageId, messageContent) {
|
||||
// ✅ 统一:只要没有可执行 blocks,就视为本层 state 被移除
|
||||
if (!signature || blocks.length === 0) {
|
||||
clearStateAppliedFor(messageId);
|
||||
writeStateErrorsToLocalVar([]);
|
||||
// delete WAL record
|
||||
try {
|
||||
const ext = getLwbExtMeta();
|
||||
@@ -470,10 +485,21 @@ export function applyStateForMessage(messageId, messageContent) {
|
||||
|
||||
const guard = validate(op, absPath, op === 'inc' ? delta : value, oldValue);
|
||||
if (!guard.allow) {
|
||||
errors.push(`[${path}] 拒绝: ${guard.reason}`);
|
||||
errors.push(`${path}: ${guard.reason || '\u88ab\u89c4\u5219\u62d2\u7edd'}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 记录修正信息
|
||||
if (guard.note) {
|
||||
if (op === 'inc') {
|
||||
const raw = Number(delta);
|
||||
const rawTxt = Number.isFinite(raw) ? `${raw >= 0 ? '+' : ''}${raw}` : String(delta ?? '');
|
||||
errors.push(`${path}: ${rawTxt} ${guard.note}`);
|
||||
} else {
|
||||
errors.push(`${path}: ${guard.note}`);
|
||||
}
|
||||
}
|
||||
|
||||
let execOk = true;
|
||||
let execReason = '';
|
||||
|
||||
@@ -539,6 +565,9 @@ export function applyStateForMessage(messageId, messageContent) {
|
||||
// ✅ checkpoint:执行完该楼后,可选存一次全量
|
||||
saveCheckpointIfNeeded(messageId);
|
||||
|
||||
// Write error list to local variable
|
||||
writeStateErrorsToLocalVar(errors);
|
||||
|
||||
return { atoms, errors, skipped: false };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user