generalize continuity plugin engine and generic adapter

This commit is contained in:
Eve
2026-04-24 19:28:20 +08:00
parent ed4fe3ea6c
commit 1fe6474009
13 changed files with 679 additions and 153 deletions

View File

@@ -1,3 +1,7 @@
import {
normalizeContinuityEngineInput,
createContinuityEngineContract,
} from '../continuity/engine.mjs';
import { evaluateContinuity, buildContinuityGateBlock } from '../continuity/evaluator.mjs';
function isNonEmptyString(value) {
@@ -29,7 +33,7 @@ export function buildApprovedPlanContinuityInput(wrapperResult, autoChainPlanRes
const taskBoundaryStop = wrapperResult?.taskBoundaryStop === true || replyClosureState === 'completed';
const highRiskStop = wrapperResult?.highRiskStop === true;
return {
return normalizeContinuityEngineInput({
planId: wrapperResult?.planId ?? 'hook-preflight-approved-plan',
currentTask: wrapperResult?.currentTask ?? wrapperResult?.requiredNextAction ?? 'hook-preflight-task',
taskState: wrapperResult?.taskState ?? (plannerDerivedAction ? 'complete' : null),
@@ -40,7 +44,11 @@ export function buildApprovedPlanContinuityInput(wrapperResult, autoChainPlanRes
sameApprovedPlan,
taskBoundaryStop,
highRiskStop,
};
metadata: {
adapterSource: 'force-recall',
classification: wrapperResult?.classification ?? null,
},
});
}
export function createForceRecallContinuityAdapter(config = {}) {
@@ -50,10 +58,22 @@ export function createForceRecallContinuityAdapter(config = {}) {
return {
evaluate({ wrapperResult, autoChainPlanResult = null }) {
const input = buildApprovedPlanContinuityInput(wrapperResult, autoChainPlanResult);
if (!input) return { input: null, result: null, block: '' };
const result = evaluateContinuity(input, { legalTerminalStates });
const block = buildContinuityGateBlock(result, { legalTerminalStates, label });
return { input, result, block };
if (!input) {
return createContinuityEngineContract({
input: null,
evaluation: null,
block: '',
options: { adapterName: 'force-recall', label },
});
}
const evaluation = evaluateContinuity(input, { legalTerminalStates });
const block = buildContinuityGateBlock(evaluation, { legalTerminalStates, label });
return createContinuityEngineContract({
input,
evaluation,
block,
options: { adapterName: 'force-recall', label },
});
},
};
}