sisyphi 1.1.37 → 1.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -67,7 +67,13 @@ write_files:
67
67
  runcmd:
68
68
  # 1. Base packages.
69
69
  - apt-get update
70
- - DEBIAN_FRONTEND=noninteractive apt-get install -y curl git tmux fzf neovim build-essential ufw mosh ca-certificates gnupg
70
+ - DEBIAN_FRONTEND=noninteractive apt-get install -y curl git tmux fzf neovim build-essential ufw mosh ca-certificates gnupg pipx
71
+
72
+ # 1b. termrender — TUI markdown rendering. Without it the dashboard falls
73
+ # back to plain text. Install system-wide via pipx so the binary lands in
74
+ # /usr/local/bin and resolves on PATH for both interactive shells and
75
+ # systemd user services (same convention as the pbcopy/pbpaste shims).
76
+ - PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install termrender
71
77
 
72
78
  # 2. Node 22 via NodeSource. /usr/bin/node, /usr/bin/npm.
73
79
  - curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
package/dist/cli.js CHANGED
@@ -11744,7 +11744,7 @@ function cloudStatus(provider, repo) {
11744
11744
 
11745
11745
  // src/cli/cloud/handoff.ts
11746
11746
  import { spawn as spawn5 } from "child_process";
11747
- import { existsSync as existsSync32, readFileSync as readFileSync34 } from "fs";
11747
+ import { existsSync as existsSync32, readFileSync as readFileSync34, writeFileSync as writeFileSync18 } from "fs";
11748
11748
  init_exec();
11749
11749
  init_paths();
11750
11750
  init_shell();
@@ -11877,7 +11877,7 @@ async function cloudReclaim(sessionId, opts) {
11877
11877
  console.log(`\u2192 rsync session state down`);
11878
11878
  await rsyncDown(target, `${remoteSessionDir}/`, `${sessionDir(cwd, sessionId)}/`, { withDelete: true });
11879
11879
  console.log(`\u2192 rsync working tree down`);
11880
- await rsyncDown(target, `${remoteRepoDir}/`, `${cwd}/`, { withDelete: false });
11880
+ await rsyncDown(target, `${remoteRepoDir}/`, `${cwd}/`, { withDelete: false, excludeSisyphus: true, update: true });
11881
11881
  for (const name of ["config.json", "orchestrator.md", "orchestrator-settings.json"]) {
11882
11882
  const remotePath = `${remoteRepoDir}/.sisyphus/${name}`;
11883
11883
  const localPath = join31(projectDir(cwd), name);
@@ -11885,6 +11885,11 @@ async function cloudReclaim(sessionId, opts) {
11885
11885
  if (probe.stdout.trim() !== "y") continue;
11886
11886
  await rsyncDown(target, remotePath, localPath, { withDelete: false });
11887
11887
  }
11888
+ const localStatePath = statePath(cwd, sessionId);
11889
+ const merged = JSON.parse(readFileSync34(localStatePath, "utf-8"));
11890
+ merged.cwd = cwd;
11891
+ merged.handoff = local.handoff;
11892
+ writeFileSync18(localStatePath, JSON.stringify(merged, null, 2));
11888
11893
  const reclaimMessage = `Session reclaimed from cloud (${provider}:${repo}). Resuming locally.`;
11889
11894
  console.log(`\u2192 local sis resume`);
11890
11895
  const resumeResp = await sendRequest({
@@ -11941,6 +11946,8 @@ function rsyncDown(target, remotePath, localPath, opts) {
11941
11946
  return new Promise((resolve12, reject) => {
11942
11947
  const args2 = ["-avz"];
11943
11948
  if (opts.withDelete) args2.push("--delete");
11949
+ if (opts.update) args2.push("--update");
11950
+ if (opts.excludeSisyphus) args2.push("--exclude=.sisyphus/");
11944
11951
  args2.push("--exclude=.terraform/", "--exclude=node_modules/", "--exclude=dist/", "--exclude=.next/", "--exclude=.turbo/", "--exclude=coverage/", "--exclude=tmp/", "--exclude=.git/lfs/", "--exclude=.DS_Store");
11945
11952
  args2.push("-e", "ssh", `${target}:${remotePath}`, localPath);
11946
11953
  const child = spawn5("rsync", args2, { stdio: "inherit", env: EXEC_ENV });