Skip to content

Commit 5fa59ce

Browse files
committed
fix(omp): keep skillopt staging durable
1 parent acd2300 commit 5fa59ce

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

modules/agents/omp/default.nix

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,20 @@ let
7272
hash = "sha256-9E9qa+rdFsyUcE1N2QiMeOeG0NpDuqu5SaeabbcScaI=";
7373
};
7474
skilloptSleepPlugin = ../../../packages/pi-packages/omp-skillopt-sleep;
75-
skilloptSleepSource = pkgs.fetchFromGitHub {
75+
skilloptSleepUpstream = pkgs.fetchFromGitHub {
7676
owner = "microsoft";
7777
repo = "SkillOpt";
7878
rev = "e4ea6a6771e797ef820cdd8bfea64c57e0481065";
7979
hash = "sha256-WVvnOO5B0pUvqmp1GNz3KpFoMkm8z/MPKevZz0jMleQ=";
8080
};
81+
skilloptSleepSource = pkgs.runCommand "skillopt-sleep-source-omp-staging" { } ''
82+
cp -R ${skilloptSleepUpstream} "$out"
83+
chmod -R u+w "$out"
84+
substituteInPlace "$out/skillopt_sleep/staging.py" \
85+
--replace-fail \
86+
'return os.path.join(project, ".skillopt-sleep", "staging")' \
87+
'return os.environ.get("SKILLOPT_SLEEP_STAGING_ROOT") or os.path.join(project, ".skillopt-sleep", "staging")'
88+
'';
8189
ompPackage = pkgs.stdenvNoCC.mkDerivation {
8290
name = "${cfg.package.pname or "omp"}-isolated";
8391
dontUnpack = true;
@@ -98,6 +106,8 @@ let
98106
--set PI_CONFIG_DIR ${lib.escapeShellArg ompConfigDir} \
99107
--set PI_CODING_AGENT_DIR ${lib.escapeShellArg ompAgentDir} \
100108
--set PONYTAIL_DEFAULT_MODE full \
109+
--set SKILLOPT_SLEEP_REPO ${lib.escapeShellArg "${skilloptSleepSource}"} \
110+
--set SKILLOPT_SLEEP_STAGING_ROOT ${lib.escapeShellArg "${config.user.home}/.skillopt-sleep/omp/staging"} \
101111
--set PI_PERMISSION_SYSTEM_CONFIG_PATH ${lib.escapeShellArg "${ompAgentDir}/extensions/pi-permission-system/config.json"}${
102112
lib.optionalString (
103113
cfg.smolModel != null
@@ -124,6 +134,7 @@ let
124134
125135
export HOME=${lib.escapeShellArg config.user.home}
126136
export SKILLOPT_SLEEP_REPO=${lib.escapeShellArg "${skilloptSleepSource}"}
137+
export SKILLOPT_SLEEP_STAGING_ROOT=${lib.escapeShellArg "${config.user.home}/.skillopt-sleep/omp/staging"}
127138
128139
cd ${lib.escapeShellArg "${config.user.home}/.config/dotfiles"}
129140
${pkgs.python3}/bin/python3 ${lib.escapeShellArg "${skilloptSleepPlugin}/scripts/skillopt-sleep-omp.py"} ${lib.escapeShellArgs skilloptSleepArgs}
@@ -569,6 +580,7 @@ in
569580
HOME = config.user.home;
570581
PATH = "/etc/profiles/per-user/${config.user.name}/bin:/run/current-system/sw/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin";
571582
SKILLOPT_SLEEP_REPO = "${skilloptSleepSource}";
583+
SKILLOPT_SLEEP_STAGING_ROOT = "${config.user.home}/.skillopt-sleep/omp/staging";
572584
};
573585
};
574586
};

packages/pi-packages/omp-skillopt-sleep/scripts/skillopt-sleep-omp.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,10 @@ def main(argv: list[str] | None = None) -> int:
345345

346346
sessions_dir = Path(known.omp_sessions).expanduser()
347347
mirror_home = Path(known.omp_mirror_home).expanduser()
348+
os.environ.setdefault(
349+
"SKILLOPT_SLEEP_STAGING_ROOT",
350+
str(Path.home() / ".skillopt-sleep" / "omp" / "staging"),
351+
)
348352
if not sessions_dir.is_dir():
349353
print(f"[skillopt-omp] ERROR: OMP sessions dir not found: {sessions_dir}", file=sys.stderr)
350354
return 1

packages/pi-packages/omp-skillopt-sleep/skills/skillopt-sleep/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ runs `python -m skillopt_sleep` with `--source claude --claude-home <mirror>`.
2828

2929
- Source sessions: `~/.omp/agent/sessions/**/*.jsonl`
3030
- Mirror state: `~/.skillopt-sleep/omp/claude-home`
31-
- SkillOpt state/staging: managed by SkillOpt-Sleep, normally under
32-
`~/.skillopt-sleep/`
31+
- SkillOpt state/staging: `~/.skillopt-sleep/omp/.skillopt-sleep/state.json`
32+
and `~/.skillopt-sleep/omp/staging/`
3333
- Live changes: none until `adopt`; every adoption is backed up by the engine
3434

3535
Tool outputs are not mirrored. The wrapper keeps user/assistant text and

0 commit comments

Comments
 (0)