sisyphi 1.2.0 → 1.2.2

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.
Files changed (25) hide show
  1. package/dist/cli.js +31 -2
  2. package/dist/cli.js.map +1 -1
  3. package/dist/templates/agent-plugin/agents/implementor.md +3 -2
  4. package/dist/templates/agent-plugin/hooks/CLAUDE.md +4 -4
  5. package/dist/templates/agent-plugin/hooks/hooks.json +1 -1
  6. package/dist/templates/agent-plugin/hooks/register-bg-task.sh +10 -7
  7. package/dist/templates/orchestrator-base.md +8 -10
  8. package/dist/templates/orchestrator-impl.md +5 -1
  9. package/dist/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -1
  10. package/package.json +2 -2
  11. package/templates/agent-plugin/agents/implementor.md +3 -2
  12. package/templates/agent-plugin/hooks/CLAUDE.md +4 -4
  13. package/templates/agent-plugin/hooks/hooks.json +1 -1
  14. package/templates/agent-plugin/hooks/register-bg-task.sh +10 -7
  15. package/templates/orchestrator-base.md +8 -10
  16. package/templates/orchestrator-impl.md +5 -1
  17. package/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -1
  18. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/CHANGELOG.md +0 -1277
  19. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/LICENSE +0 -373
  20. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/README.md +0 -202
  21. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/terraform-provider-hcloud_v1.62.0 +0 -0
  22. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/CHANGELOG.md +0 -1277
  23. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/LICENSE +0 -373
  24. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/README.md +0 -202
  25. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/terraform-provider-hcloud_v1.62.0 +0 -0
package/dist/cli.js CHANGED
@@ -2779,6 +2779,7 @@ function readStdin(opts = {}) {
2779
2779
  }
2780
2780
 
2781
2781
  // src/cli/tmux.ts
2782
+ init_shell();
2782
2783
  import { execSync as execSync4 } from "child_process";
2783
2784
  function isTmuxInstalled() {
2784
2785
  try {
@@ -2799,6 +2800,16 @@ function getTmuxSessionInfo() {
2799
2800
  const pipeIdx = out.indexOf("|");
2800
2801
  return { id: out.slice(0, pipeIdx), name: out.slice(pipeIdx + 1) };
2801
2802
  }
2803
+ function getCurrentTmuxSessionHome(sessionId) {
2804
+ try {
2805
+ return execSync4(
2806
+ `tmux show-options -t ${shellQuote(sessionId)} -v @sisyphus_cwd`,
2807
+ { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }
2808
+ ).trim();
2809
+ } catch {
2810
+ return "";
2811
+ }
2812
+ }
2802
2813
 
2803
2814
  // src/cli/commands/start.ts
2804
2815
  init_shell();
@@ -2872,7 +2883,7 @@ function attachToTmuxSession(sessionName) {
2872
2883
  }
2873
2884
  }
2874
2885
  function registerStart(program2) {
2875
- program2.command("start").description("Start a new sisyphus session").argument("[task]", "Task description for the orchestrator (omit when using --stdin)").option("-c, --context <context>", "Background context for the orchestrator").option("-n, --name <name>", "Human-readable name for the session").option("--effort <tier>", "Pipeline effort tier (low|medium|high|xhigh)").option("--no-tmux-check", "Skip the tmux session check").option("--stdin", "Read the task description from stdin (avoids shell escaping for long prompts)").option("--context-stdin", "Read the context from stdin (mutually exclusive with --stdin)").action(async (taskArg, opts) => {
2886
+ program2.command("start").description("Start a new sisyphus session").argument("[task]", "Task description for the orchestrator (omit when using --stdin)").option("-c, --context <context>", "Background context for the orchestrator").option("-n, --name <name>", "Human-readable name for the session").option("--effort <tier>", "Pipeline effort tier (low|medium|high|xhigh)").option("--no-tmux-check", "Skip the tmux session check").option("--stdin", "Read the task description from stdin (avoids shell escaping for long prompts)").option("--context-stdin", "Read the context from stdin (mutually exclusive with --stdin)").option("--force", "Proceed even when invocation cwd differs from the current tmux session's home (linking will be inconsistent)").action(async (taskArg, opts) => {
2876
2887
  const cwd = process.env["SISYPHUS_CWD"] ?? process.cwd();
2877
2888
  if (opts.stdin && opts.contextStdin) {
2878
2889
  console.error("Error: --stdin and --context-stdin cannot be combined; pipe one and pass the other on argv");
@@ -2927,6 +2938,24 @@ function registerStart(program2) {
2927
2938
  console.error(" Install: brew install tmux (macOS) or apt install tmux (Linux)");
2928
2939
  process.exit(1);
2929
2940
  }
2941
+ if (process.env["TMUX"] && opts.force !== true) {
2942
+ const info = getTmuxSessionInfo();
2943
+ const existingHome = getCurrentTmuxSessionHome(info.id);
2944
+ const normalizedCwd = cwd.replace(/\/+$/, "");
2945
+ if (existingHome && existingHome !== normalizedCwd) {
2946
+ console.error("Error: cwd mismatch with current tmux session.");
2947
+ console.error(` Session "${info.name}" is homed at: ${existingHome}`);
2948
+ console.error(` This invocation's cwd: ${normalizedCwd}`);
2949
+ console.error("");
2950
+ console.error("Running `cd <dir> && sis start` from inside a tmux session homed elsewhere");
2951
+ console.error("breaks dashboard/session linking (C-s h, alt+s cycle, scratch resolver).");
2952
+ console.error("Usually you want to operate in the parent project, not the cd'd subdir.");
2953
+ console.error("");
2954
+ console.error(`Verify with the user: start a session for ${existingHome} or ${normalizedCwd}?`);
2955
+ console.error("To proceed anyway: sis start --force ...");
2956
+ process.exit(1);
2957
+ }
2958
+ }
2930
2959
  const effort = opts.effort;
2931
2960
  const request = { type: "start", task, context, cwd, name: opts.name, ...effort !== void 0 ? { effort } : {} };
2932
2961
  const response = await sendRequest(request);
@@ -5287,7 +5316,7 @@ function registerAgentRestart(program2) {
5287
5316
 
5288
5317
  // src/cli/commands/yield.ts
5289
5318
  function registerYield(program2) {
5290
- program2.command("yield").description("Yield control back to daemon (orchestrator only)").option("--prompt <text>", "Short orienting nudge for the next cycle (or pipe via stdin) \u2014 name what just happened; leave tactical decisions to the fresh read of the reports").option("--stdin", "Force-read prompt from stdin (avoids shell escaping for long prompts)").option("--mode <mode>", "System prompt mode for next cycle (discovery, planning, implementation, validation, completion)").option("--session <sessionId>", "Session ID (defaults to SISYPHUS_SESSION_ID env var)").action(async (opts) => {
5319
+ program2.command("yield").description("Yield control back to daemon (orchestrator only)").option("--prompt <text>", "Short orienting nudge for the next cycle (or pipe via stdin) \u2014 name what just happened; leave tactical decisions to the fresh read of the reports").option("--stdin", "Force-read prompt from stdin (avoids shell escaping for long prompts)").requiredOption("--mode <mode>", "System prompt mode for next cycle (discovery, planning, implementation, validation, completion). Required \u2014 pass the current mode to stay in it.").option("--session <sessionId>", "Session ID (defaults to SISYPHUS_SESSION_ID env var)").action(async (opts) => {
5291
5320
  assertTmux();
5292
5321
  const sessionId = opts.session ?? process.env.SISYPHUS_SESSION_ID;
5293
5322
  if (!sessionId) {