openskynet / src /skynet /cognitive-kernel /min-kernel.test.ts
Darochin's picture
Mirror OpenSkyNet workspace snapshot from Git HEAD
fc93158 verified
import { describe, expect, it } from "vitest";
import type { SkynetCausalEpisode } from "../causal-valence/episode-ledger.js";
import {
encodeSkynetRuntimeTrajectoryFeatures,
type SkynetRuntimeTrajectorySample,
} from "../runtime-observer/trajectory-builder.js";
import {
createSkynetCognitiveKernelState,
observeSkynetCognitiveKernelSample,
predictSkynetCognitiveKernelLabel,
replaySkynetCognitiveKernelState,
updateSkynetCognitiveKernelState,
} from "./min-kernel.js";
function buildEpisode(params: {
id: string;
label: SkynetCausalEpisode["bootstrapLabel"];
kind: "edit" | "delete" | "create" | "noop";
status?: "ok" | "error" | "timeout";
failureStreak?: number;
}): SkynetCausalEpisode {
return {
id: params.id,
sessionKey: "agent:openskynet:main",
recordedAt: Number(params.id.replace(/\D+/g, "")) || 1,
context: {
continuityFreshness: "fresh",
failureStreak: params.failureStreak ?? 0,
targetCount: 1,
validationIntensity: params.kind === "edit" ? 0.8 : 0.3,
},
transition: {
operations: [{ path: `/tmp/${params.id}.ts`, kind: params.kind, isTarget: true }],
targetPaths: [`/tmp/${params.id}.ts`],
},
outcome: {
status: params.status ?? (params.label === "damage" ? "error" : "ok"),
failureDomain:
params.label === "damage"
? "cognitive"
: params.status === "timeout"
? "environmental"
: "none",
failureClass:
params.label === "damage"
? "validation_error"
: params.status === "timeout"
? "provider_timeout"
: "none",
targetSatisfied: params.label !== "stall" && params.label !== "damage",
validationPassed: params.label !== "damage",
continuityDelta: params.label === "progress" || params.label === "relief" ? 0.7 : 0.05,
recoveryBurden: params.label === "frustration" ? 0.6 : 0.1,
collateralDamage: params.label === "damage" ? 0.8 : 0.05,
},
bootstrapLabel: params.label,
};
}
function buildSample(
id: string,
label: SkynetCausalEpisode["bootstrapLabel"],
kind: "edit" | "delete" | "create" | "noop",
historyLabels: SkynetCausalEpisode["bootstrapLabel"][] = [],
): SkynetRuntimeTrajectorySample {
const historyEpisodes = historyLabels.map((historyLabel, index) =>
buildEpisode({
id: `${id}-history-${index}`,
label: historyLabel,
kind: historyLabel === "damage" ? "delete" : "edit",
failureStreak: historyLabel === "frustration" ? 2 : 0,
}),
);
const currentEpisode = buildEpisode({
id,
label,
kind,
failureStreak: label === "frustration" ? 2 : 0,
});
return {
id,
sessionKey: "agent:openskynet:main",
recordedAt: currentEpisode.recordedAt,
lookbackCount: historyEpisodes.length,
historyEpisodes,
currentEpisode,
targetLabel: label,
};
}
describe("skynet cognitive kernel", () => {
it("learns separable trajectory prototypes online", () => {
const progressSeed = buildSample("10", "progress", "edit", ["progress", "progress"]);
const damageSeed = buildSample("20", "damage", "delete", ["damage", "frustration"]);
const state0 = createSkynetCognitiveKernelState({
featureDimensions: encodeSkynetRuntimeTrajectoryFeatures(progressSeed).length,
});
const state1 = observeSkynetCognitiveKernelSample(state0, progressSeed);
const state2 = observeSkynetCognitiveKernelSample(state1, damageSeed);
const progressPrediction = predictSkynetCognitiveKernelLabel(
state2,
buildSample("30", "progress", "edit", ["progress", "relief"]),
);
const damagePrediction = predictSkynetCognitiveKernelLabel(
state2,
buildSample("40", "damage", "delete", ["damage", "frustration"]),
);
expect(progressPrediction.label).toBe("progress");
expect(damagePrediction.label).toBe("damage");
expect(progressPrediction.surprise).toBeLessThan(0.8);
});
it("can replay state from a sample stream", () => {
const samples = [
buildSample("10", "progress", "edit", ["progress"]),
buildSample("20", "damage", "delete", ["damage"]),
buildSample("30", "progress", "edit", ["progress", "relief"]),
];
const state = replaySkynetCognitiveKernelState({ samples });
expect(state).not.toBeNull();
expect(state?.observedCount).toBe(3);
expect(state?.prototypeCounts.progress).toBe(2);
});
it("updates incrementally without double-counting seen samples", () => {
const samples = [
buildSample("10", "progress", "edit", ["progress"]),
buildSample("20", "damage", "delete", ["damage"]),
];
const state0 = createSkynetCognitiveKernelState({
featureDimensions: encodeSkynetRuntimeTrajectoryFeatures(samples[0]!).length,
});
const first = updateSkynetCognitiveKernelState({ state: state0, samples });
const second = updateSkynetCognitiveKernelState({ state: first.state, samples });
expect(first.ingestedCount).toBe(2);
expect(first.skippedCount).toBe(0);
expect(second.ingestedCount).toBe(0);
expect(second.skippedCount).toBe(2);
expect(second.state.observedCount).toBe(2);
});
});