sisyphi 1.0.6 → 1.0.7
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.
- package/dist/daemon.js +77 -21
- package/dist/daemon.js.map +1 -1
- package/dist/templates/agent-plugin/hooks/plan-user-prompt.sh +19 -0
- package/dist/templates/agent-plugin/hooks/spec-user-prompt.sh +22 -0
- package/dist/templates/orchestrator-planning.md +8 -0
- package/dist/tui.js +22 -5
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
- package/templates/agent-plugin/hooks/plan-user-prompt.sh +19 -0
- package/templates/agent-plugin/hooks/spec-user-prompt.sh +22 -0
- package/templates/orchestrator-planning.md +8 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# UserPromptSubmit hook: remind plan agent to delegate for large tasks.
|
|
3
|
+
if [ -z "$SISYPHUS_SESSION_ID" ]; then exit 0; fi
|
|
4
|
+
|
|
5
|
+
python3 -c "
|
|
6
|
+
import json, sys
|
|
7
|
+
print(json.dumps({'additionalContext': sys.stdin.read()}))
|
|
8
|
+
" <<'HINT'
|
|
9
|
+
<planning-reminder>
|
|
10
|
+
For particularly large or multi-domain tasks, delegate sub-plans to specialist agents rather than planning everything solo:
|
|
11
|
+
|
|
12
|
+
- Spawn parallel Plan agents, each focused on a specific domain or layer
|
|
13
|
+
- Each sub-planner investigates deeply and saves their work to context/plan-{topic}-{slice}.md
|
|
14
|
+
- Synthesize their outputs into one cohesive master plan: resolve file ownership conflicts, fill gaps between slices, stress-test cross-cutting edge cases
|
|
15
|
+
- Then spawn review agents to critique the assembled plan before finalizing
|
|
16
|
+
|
|
17
|
+
Default toward delegation when in doubt — a round-trip for synthesis is cheaper than a shallow plan that misses edge cases. The cost of spawning sub-planners is low; the cost of a surface-level plan across too many concerns is high.
|
|
18
|
+
</planning-reminder>
|
|
19
|
+
HINT
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# UserPromptSubmit hook: remind spec agent to iterate with the user.
|
|
3
|
+
if [ -z "$SISYPHUS_SESSION_ID" ]; then exit 0; fi
|
|
4
|
+
|
|
5
|
+
python3 -c "
|
|
6
|
+
import json, sys
|
|
7
|
+
print(json.dumps({'additionalContext': sys.stdin.read()}))
|
|
8
|
+
" <<'HINT'
|
|
9
|
+
<spec-reminder>
|
|
10
|
+
Iterate with the user — include them in the process before writing anything to disk:
|
|
11
|
+
|
|
12
|
+
- Present your findings and a concrete proposal with your reasoning
|
|
13
|
+
- Surface specific, substantive questions that need human input:
|
|
14
|
+
Bad: "What should happen on error?"
|
|
15
|
+
Good: "If the API returns a 429, should we retry with backoff or surface the rate limit to the user?"
|
|
16
|
+
- Share your perspective: what's clear, what's open, what you'd lean toward and why
|
|
17
|
+
- Wait for the user to respond and incorporate their answers before proceeding
|
|
18
|
+
- The spec is only written after user sign-off on the direction
|
|
19
|
+
|
|
20
|
+
Ambiguity can be technical, architectural, or design-related. Don't skip design questions just because they aren't code.
|
|
21
|
+
</spec-reminder>
|
|
22
|
+
HINT
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Planning Phase
|
|
2
2
|
|
|
3
|
+
## Planning Phase Flow
|
|
4
|
+
|
|
5
|
+
The natural sequence: **context → spec → roadmap refinement → detailed planning.** Context documents come first because they feed everything downstream — spec writers, planners, and implementers all benefit from not having to re-explore the codebase. After the spec is aligned, revisit the roadmap — that's when you actually understand scope well enough to flesh out phases honestly.
|
|
6
|
+
|
|
3
7
|
## Exploration
|
|
4
8
|
|
|
5
9
|
Use explore agents to build understanding before making decisions. Each agent should save a focused context document to `.sisyphus/sessions/$SISYPHUS_SESSION_ID/context/` — these artifacts get passed to downstream agents so they don't have to re-explore the codebase themselves.
|
|
@@ -23,6 +27,10 @@ For significant features, spec refinement is iterative:
|
|
|
23
27
|
|
|
24
28
|
Not every stage needs a standalone spec document — a well-defined stage might just be a detailed section in the implementation plan. Use judgment about how much formality each stage warrants.
|
|
25
29
|
|
|
30
|
+
## Roadmap Refinement
|
|
31
|
+
|
|
32
|
+
Once you have context docs and an aligned spec, revisit the roadmap. This is the first point where you understand real scope — adjust phase boundaries, add phases you didn't anticipate, reorder for dependencies. Keep future phases at outline level; just make sure the shape is honest.
|
|
33
|
+
|
|
26
34
|
## Delegating to the Plan Lead
|
|
27
35
|
|
|
28
36
|
Spawn **one plan lead** per feature. Point it at **inputs** (spec, context docs, corrections) — not a pre-made structure. Don't pre-decide staging, ordering, or design decisions. The plan lead has `effort: max` reasoning and handles its own decomposition: it will assess scope, delegate sub-plans to specialist agents if the feature is large enough, run adversarial reviews on the result, and deliver a synthesized master plan.
|
package/dist/tui.js
CHANGED
|
@@ -720,7 +720,7 @@ function buildLines(session, planContent, goalContent, _logsContent, width, pane
|
|
|
720
720
|
lines.push([
|
|
721
721
|
seg(" "),
|
|
722
722
|
seg(" \u2715 DEAD ", { color: "red", bold: true }),
|
|
723
|
-
seg(" tmux window closed \u2014
|
|
723
|
+
seg(" tmux window closed \u2014 [w] reopen [R] resume", { color: "red" })
|
|
724
724
|
]);
|
|
725
725
|
}
|
|
726
726
|
if (conflicts.length > 0) {
|
|
@@ -2576,12 +2576,29 @@ function App({ cwd: cwd2 }) {
|
|
|
2576
2576
|
},
|
|
2577
2577
|
// kill moved to leader menu (space k)
|
|
2578
2578
|
onGoToWindow: () => {
|
|
2579
|
-
if (!session
|
|
2580
|
-
notify("No
|
|
2579
|
+
if (!session || !selectedSessionId) {
|
|
2580
|
+
notify("No session selected");
|
|
2581
|
+
return;
|
|
2582
|
+
}
|
|
2583
|
+
if (paneAlive && session.tmuxWindowId) {
|
|
2584
|
+
if (session.tmuxSessionName) switchToSession(session.tmuxSessionName);
|
|
2585
|
+
selectWindow(session.tmuxWindowId);
|
|
2581
2586
|
return;
|
|
2582
2587
|
}
|
|
2583
|
-
|
|
2584
|
-
|
|
2588
|
+
void (async () => {
|
|
2589
|
+
try {
|
|
2590
|
+
const res = await send({ type: "reopen-window", sessionId: selectedSessionId, cwd: cwd2 });
|
|
2591
|
+
if (!res.ok) {
|
|
2592
|
+
notify(`Error: ${res.error}`);
|
|
2593
|
+
return;
|
|
2594
|
+
}
|
|
2595
|
+
const data = res.data;
|
|
2596
|
+
switchToSession(data.tmuxSessionName);
|
|
2597
|
+
selectWindow(data.tmuxWindowId);
|
|
2598
|
+
} catch (err) {
|
|
2599
|
+
notify(`Error: ${err.message}`);
|
|
2600
|
+
}
|
|
2601
|
+
})();
|
|
2585
2602
|
},
|
|
2586
2603
|
onEditGoal: () => {
|
|
2587
2604
|
if (!selectedSessionId) {
|