openskynet / src /skynet /nucleus.ts
Darochin's picture
Mirror OpenSkyNet workspace snapshot from Git HEAD
fc93158 verified
import fs from "node:fs/promises";
import path from "node:path";
import type { OmegaOperationalTurnMemoryEntry } from "../omega/operational-memory.js";
import type { OmegaStudyFocus } from "../omega/study-supervisor.js";
export type SkynetNucleusMode = "stabilize" | "explore" | "exploit" | "reframe";
export type SkynetExecutiveLobe = {
macroGoal: string;
activeQuestion: string;
commitment: number;
};
export type SkynetMetabolism = {
budget: number;
strain: number;
curiosity: number;
conservationBias: number;
};
export type SkynetPatternField = {
coherence: number;
plasticity: number;
localityBias: number;
};
export type SkynetNucleusState = {
sessionKey: string;
updatedAt: number;
name: string;
mode: SkynetNucleusMode;
executive: SkynetExecutiveLobe;
metabolism: SkynetMetabolism;
patternField: SkynetPatternField;
supportingStudyTrack: OmegaStudyFocus["key"];
supportingAgendaClassKeys: string[];
learnedConstraints: string[];
};
function sanitizeSessionKey(sessionKey: string): string {
return (sessionKey.trim() || "main").replace(/[^a-zA-Z0-9._-]+/g, "_").slice(0, 64) || "main";
}
function resolveSkynetNucleusFile(params: { workspaceRoot: string; sessionKey: string }) {
return path.join(
params.workspaceRoot,
".openskynet",
"skynet-nucleus",
`${sanitizeSessionKey(params.sessionKey)}.json`,
);
}
function clamp01(value: number): number {
return Math.max(0, Math.min(1, value));
}
function averageLatencyMs(entries: OmegaOperationalTurnMemoryEntry[]): number {
if (entries.length === 0) return 0;
return (
entries.reduce((sum, entry) => sum + (entry.latencyBreakdown.totalMs || 0), 0) / entries.length
);
}
function deriveMode(params: {
studyFocus: OmegaStudyFocus;
operationalSignals: OmegaOperationalTurnMemoryEntry[];
}): SkynetNucleusMode {
const stalledTurns = params.operationalSignals.filter(
(entry) => entry.turnHealth === "stalled",
).length;
const progressingTurns = params.operationalSignals.filter(
(entry) => entry.turnHealth === "progressing" || entry.turnHealth === "resolved",
).length;
if (params.studyFocus.key === "decision_bifurcation" || stalledTurns >= 2) {
return "reframe";
}
if (params.studyFocus.key === "cognitive_metabolism") {
return "stabilize";
}
if (params.studyFocus.key === "endogenous_science_agenda") {
return "explore";
}
if (progressingTurns > stalledTurns) {
return "exploit";
}
return "explore";
}
function buildExecutive(params: {
projectName: string;
studyFocus: OmegaStudyFocus;
mode: SkynetNucleusMode;
}): SkynetExecutiveLobe {
const activeQuestionByTrack: Record<OmegaStudyFocus["key"], string> = {
memory_selective_rewrite: `How can ${params.projectName} change local structure without destroying coherent global state?`,
decision_bifurcation: "What stabilizes a real commitment instead of another local score bump?",
cognitive_metabolism: `What should ${params.projectName} stop doing so cognition has real cost and real pressure?`,
bicameral_core: `How should ${params.projectName} split executive logic from dynamic pattern processing?`,
endogenous_science_agenda: `What study line should ${params.projectName} carry across cycles without external prompting?`,
};
const commitmentBase =
params.mode === "reframe" ? 0.68 : params.mode === "stabilize" ? 0.72 : 0.62;
return {
macroGoal: `Advance ${params.studyFocus.title} as the next concrete ${params.projectName} line.`,
activeQuestion: activeQuestionByTrack[params.studyFocus.key],
commitment: clamp01(commitmentBase + params.studyFocus.priority * 0.2),
};
}
function buildMetabolism(params: {
mode: SkynetNucleusMode;
operationalSignals: OmegaOperationalTurnMemoryEntry[];
}): SkynetMetabolism {
const avgLatency = averageLatencyMs(params.operationalSignals);
const stalledTurns = params.operationalSignals.filter(
(entry) => entry.turnHealth === "stalled",
).length;
const strain = clamp01((avgLatency / 20_000) * 0.6 + stalledTurns * 0.12);
const curiosityBase = params.mode === "explore" ? 0.72 : params.mode === "reframe" ? 0.64 : 0.4;
return {
budget: clamp01(1 - strain * 0.55),
strain,
curiosity: clamp01(curiosityBase + (params.operationalSignals.length === 0 ? 0.08 : 0)),
conservationBias: clamp01(params.mode === "stabilize" ? 0.8 : 0.45 + strain * 0.3),
};
}
function buildPatternField(params: {
mode: SkynetNucleusMode;
operationalSignals: OmegaOperationalTurnMemoryEntry[];
learnedConstraints: string[];
}): SkynetPatternField {
const progressed = params.operationalSignals.some((entry) => entry.progressObserved);
const coherence = clamp01(
0.42 + (progressed ? 0.16 : 0) + params.learnedConstraints.length * 0.04,
);
const plasticityBase =
params.mode === "explore"
? 0.78
: params.mode === "reframe"
? 0.74
: params.mode === "exploit"
? 0.48
: 0.34;
const localityBias =
params.learnedConstraints.includes("touch_required_targets") ||
params.learnedConstraints.includes("touch_every_required_target")
? 0.78
: 0.52;
return {
coherence,
plasticity: clamp01(plasticityBase),
localityBias: clamp01(localityBias),
};
}
function formatUnique(values: string[]): string[] {
return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean))).slice(0, 8);
}
export function deriveSkynetNucleusState(params: {
sessionKey: string;
projectName?: string;
studyFocus: OmegaStudyFocus;
operationalSignals: OmegaOperationalTurnMemoryEntry[];
learnedConstraints?: string[];
}): SkynetNucleusState {
const projectName = params.projectName?.trim() || "Skynet";
const learnedConstraints = formatUnique(params.learnedConstraints ?? []);
const mode = deriveMode({
studyFocus: params.studyFocus,
operationalSignals: params.operationalSignals,
});
return {
sessionKey: params.sessionKey,
updatedAt: Date.now(),
name: projectName,
mode,
executive: buildExecutive({
projectName,
studyFocus: params.studyFocus,
mode,
}),
metabolism: buildMetabolism({
mode,
operationalSignals: params.operationalSignals,
}),
patternField: buildPatternField({
mode,
operationalSignals: params.operationalSignals,
learnedConstraints,
}),
supportingStudyTrack: params.studyFocus.key,
supportingAgendaClassKeys: params.studyFocus.supportingAgendaClassKeys,
learnedConstraints,
};
}
export async function syncSkynetNucleus(params: {
workspaceRoot: string;
sessionKey: string;
projectName?: string;
studyFocus: OmegaStudyFocus;
operationalSignals: OmegaOperationalTurnMemoryEntry[];
learnedConstraints?: string[];
}): Promise<SkynetNucleusState> {
const state = deriveSkynetNucleusState({
sessionKey: params.sessionKey,
projectName: params.projectName,
studyFocus: params.studyFocus,
operationalSignals: params.operationalSignals,
learnedConstraints: params.learnedConstraints,
});
const filePath = resolveSkynetNucleusFile({
workspaceRoot: params.workspaceRoot,
sessionKey: params.sessionKey,
});
await fs.mkdir(path.dirname(filePath), { recursive: true });
await fs.writeFile(filePath, JSON.stringify(state, null, 2) + "\n", "utf-8");
return state;
}
export function formatSkynetNucleusBlock(state: SkynetNucleusState): string[] {
return [
`[${state.name} Nucleus]`,
`Mode: ${state.mode}`,
`Macro goal: ${state.executive.macroGoal}`,
`Active question: ${state.executive.activeQuestion}`,
`Commitment: ${state.executive.commitment.toFixed(2)}`,
`Metabolism: budget=${state.metabolism.budget.toFixed(2)} strain=${state.metabolism.strain.toFixed(2)} curiosity=${state.metabolism.curiosity.toFixed(2)}`,
`Pattern field: coherence=${state.patternField.coherence.toFixed(2)} plasticity=${state.patternField.plasticity.toFixed(2)} locality=${state.patternField.localityBias.toFixed(2)}`,
`Study track: ${state.supportingStudyTrack}`,
];
}