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 = { 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 { 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}`, ]; }