mirror of https://github.com/garrytan/gstack.git
52 lines
2.5 KiB
TypeScript
52 lines
2.5 KiB
TypeScript
import type { TemplateContext } from '../types';
|
|
|
|
export function generateContextRecovery(ctx: TemplateContext): string {
|
|
const binDir = ctx.host === 'codex' ? '$GSTACK_BIN' : ctx.paths.binDir;
|
|
|
|
return `## Context Recovery
|
|
|
|
After compaction or at session start, check for recent project artifacts.
|
|
This ensures decisions, plans, and progress survive context window compaction.
|
|
|
|
\`\`\`bash
|
|
eval "$(${binDir}/gstack-slug 2>/dev/null)"
|
|
_PROJ="\${GSTACK_HOME:-$HOME/.gstack}/projects/\${SLUG:-unknown}"
|
|
if [ -d "$_PROJ" ]; then
|
|
echo "--- RECENT ARTIFACTS ---"
|
|
# Last 3 artifacts across ceo-plans/ and checkpoints/
|
|
find "$_PROJ/ceo-plans" "$_PROJ/checkpoints" -type f -name "*.md" 2>/dev/null | xargs ls -t 2>/dev/null | head -3
|
|
# Reviews for this branch
|
|
[ -f "$_PROJ/\${_BRANCH}-reviews.jsonl" ] && echo "REVIEWS: $(wc -l < "$_PROJ/\${_BRANCH}-reviews.jsonl" | tr -d ' ') entries"
|
|
# Timeline summary (last 5 events)
|
|
[ -f "$_PROJ/timeline.jsonl" ] && tail -5 "$_PROJ/timeline.jsonl"
|
|
# Cross-session injection
|
|
if [ -f "$_PROJ/timeline.jsonl" ]; then
|
|
_LAST=$(grep "\\"branch\\":\\"\${_BRANCH}\\"" "$_PROJ/timeline.jsonl" 2>/dev/null | grep '"event":"completed"' | tail -1)
|
|
[ -n "$_LAST" ] && echo "LAST_SESSION: $_LAST"
|
|
# Predictive skill suggestion: check last 3 completed skills for patterns
|
|
_RECENT_SKILLS=$(grep "\\"branch\\":\\"\${_BRANCH}\\"" "$_PROJ/timeline.jsonl" 2>/dev/null | grep '"event":"completed"' | tail -3 | grep -o '"skill":"[^"]*"' | sed 's/"skill":"//;s/"//' | tr '\\n' ',')
|
|
[ -n "$_RECENT_SKILLS" ] && echo "RECENT_PATTERN: $_RECENT_SKILLS"
|
|
fi
|
|
_LATEST_CP=$(find "$_PROJ/checkpoints" -name "*.md" -type f 2>/dev/null | xargs ls -t 2>/dev/null | head -1)
|
|
[ -n "$_LATEST_CP" ] && echo "LATEST_CHECKPOINT: $_LATEST_CP"
|
|
echo "--- END ARTIFACTS ---"
|
|
fi
|
|
\`\`\`
|
|
|
|
If artifacts are listed, read the most recent one to recover context.
|
|
|
|
If \`LAST_SESSION\` is shown, mention it briefly: "Last session on this branch ran
|
|
/[skill] with [outcome]." If \`LATEST_CHECKPOINT\` exists, read it for full context
|
|
on where work left off.
|
|
|
|
If \`RECENT_PATTERN\` is shown, look at the skill sequence. If a pattern repeats
|
|
(e.g., review,ship,review), suggest: "Based on your recent pattern, you probably
|
|
want /[next skill]."
|
|
|
|
**Welcome back message:** If any of LAST_SESSION, LATEST_CHECKPOINT, or RECENT ARTIFACTS
|
|
are shown, synthesize a one-paragraph welcome briefing before proceeding:
|
|
"Welcome back to {branch}. Last session: /{skill} ({outcome}). [Checkpoint summary if
|
|
available]. [Health score if available]." Keep it to 2-3 sentences.`;
|
|
}
|
|
|