| import fs from "node:fs/promises"; |
| import os from "node:os"; |
| import path from "node:path"; |
| import { afterEach, beforeEach, describe, expect, it } from "vitest"; |
| import { syncSkynetContinuityState } from "./continuity-tracker.js"; |
| import { deriveSkynetNucleusState } from "./nucleus.js"; |
| import { deriveSkynetStudyProgram } from "./study-program.js"; |
|
|
| describe("skynet continuity tracker", () => { |
| let workspaceRoot = ""; |
|
|
| beforeEach(async () => { |
| workspaceRoot = await fs.mkdtemp(path.join(os.tmpdir(), "skynet-continuity-")); |
| }); |
|
|
| afterEach(async () => { |
| await fs.rm(workspaceRoot, { recursive: true, force: true }); |
| }); |
|
|
| it("increases focus streak across stable cycles and persists the score", async () => { |
| const focus = { |
| key: "endogenous_science_agenda" as const, |
| title: "Agenda científica endógena", |
| thesis: "Persist a study agenda across cycles.", |
| whyNow: "No persistent agenda exists yet.", |
| nextExperiment: "Define a persistent study queue.", |
| successCriteria: "A concrete queue is produced.", |
| priority: 0.62, |
| supportingAgendaClassKeys: ["initiative:autonomy_improvement"], |
| }; |
| const supervisor = { |
| sessionKey: "agent:openskynet:main", |
| updatedAt: 1, |
| focus, |
| tracks: [ |
| { |
| ...focus, |
| evidence: ["Agenda still open."], |
| lastUpdatedAt: 1, |
| }, |
| ], |
| }; |
|
|
| const nucleus1 = deriveSkynetNucleusState({ |
| sessionKey: "agent:openskynet:main", |
| studyFocus: focus, |
| operationalSignals: [], |
| learnedConstraints: [], |
| }); |
| const program1 = deriveSkynetStudyProgram({ |
| sessionKey: "agent:openskynet:main", |
| supervisor, |
| nucleus: nucleus1, |
| }); |
| const state1 = await syncSkynetContinuityState({ |
| workspaceRoot, |
| sessionKey: "agent:openskynet:main", |
| nucleus: nucleus1, |
| program: program1, |
| }); |
|
|
| const nucleus2 = deriveSkynetNucleusState({ |
| sessionKey: "agent:openskynet:main", |
| studyFocus: focus, |
| operationalSignals: [], |
| learnedConstraints: [], |
| }); |
| const program2 = deriveSkynetStudyProgram({ |
| sessionKey: "agent:openskynet:main", |
| supervisor, |
| nucleus: nucleus2, |
| }); |
| const state2 = await syncSkynetContinuityState({ |
| workspaceRoot, |
| sessionKey: "agent:openskynet:main", |
| nucleus: nucleus2, |
| program: program2, |
| }); |
|
|
| expect(state1.focusStreak).toBe(1); |
| expect(state2.focusStreak).toBe(2); |
| expect(state2.continuityScore).toBeGreaterThan(state1.continuityScore); |
| expect( |
| JSON.parse( |
| await fs.readFile( |
| path.join( |
| workspaceRoot, |
| ".openskynet", |
| "skynet-continuity", |
| "agent_openskynet_main.json", |
| ), |
| "utf-8", |
| ), |
| ).focusStreak, |
| ).toBe(2); |
| }); |
| }); |
|
|