mirror of https://github.com/garrytan/gstack.git
feat: add vendoring deprecation detection to skill preamble
Detects vendored gstack in CWD (.claude/skills/gstack/ that's not a symlink and has VERSION or .git). Outputs VENDORED_GSTACK: yes/no. Adds generateVendoringDeprecation() section that offers one-time migration to team mode via AskUserQuestion. Part of team-install-mode feature (credit: Jared Friedman). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e4c75bae60
commit
e60bbc0911
|
|
@ -89,6 +89,14 @@ fi
|
||||||
_ROUTING_DECLINED=$(${ctx.paths.binDir}/gstack-config get routing_declined 2>/dev/null || echo "false")
|
_ROUTING_DECLINED=$(${ctx.paths.binDir}/gstack-config get routing_declined 2>/dev/null || echo "false")
|
||||||
echo "HAS_ROUTING: $_HAS_ROUTING"
|
echo "HAS_ROUTING: $_HAS_ROUTING"
|
||||||
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
||||||
|
# Vendoring deprecation: detect if CWD has a vendored gstack copy
|
||||||
|
_VENDORED="no"
|
||||||
|
if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then
|
||||||
|
if [ -f ".claude/skills/gstack/VERSION" ] || [ -d ".claude/skills/gstack/.git" ]; then
|
||||||
|
_VENDORED="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "VENDORED_GSTACK: $_VENDORED"
|
||||||
\`\`\``;
|
\`\`\``;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -226,6 +234,40 @@ Say "No problem. You can add routing rules later by running \`gstack-config set
|
||||||
This only happens once per project. If \`HAS_ROUTING\` is \`yes\` or \`ROUTING_DECLINED\` is \`true\`, skip this entirely.`;
|
This only happens once per project. If \`HAS_ROUTING\` is \`yes\` or \`ROUTING_DECLINED\` is \`true\`, skip this entirely.`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function generateVendoringDeprecation(ctx: TemplateContext): string {
|
||||||
|
return `If \`VENDORED_GSTACK\` is \`yes\`: This project has a vendored copy of gstack at
|
||||||
|
\`.claude/skills/gstack/\`. Vendoring is deprecated. We will not keep vendored copies
|
||||||
|
up to date, so this project's gstack will fall behind.
|
||||||
|
|
||||||
|
Use AskUserQuestion (one-time per project, check for \`~/.gstack/.vendoring-warned-$SLUG\` marker):
|
||||||
|
|
||||||
|
> This project has gstack vendored in \`.claude/skills/gstack/\`. Vendoring is deprecated.
|
||||||
|
> We won't keep this copy up to date, so you'll fall behind on new features and fixes.
|
||||||
|
>
|
||||||
|
> Want to migrate to team mode? It takes about 30 seconds.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- A) Yes, migrate to team mode now
|
||||||
|
- B) No, I'll handle it myself
|
||||||
|
|
||||||
|
If A:
|
||||||
|
1. Run \`git rm -r .claude/skills/gstack/\`
|
||||||
|
2. Run \`echo '.claude/skills/gstack/' >> .gitignore\`
|
||||||
|
3. Run \`${ctx.paths.binDir}/gstack-team-init required\` (or \`optional\`)
|
||||||
|
4. Run \`git add .claude/ .gitignore CLAUDE.md && git commit -m "chore: migrate gstack from vendored to team mode"\`
|
||||||
|
5. Tell the user: "Done. Each developer now runs: \`cd ~/.claude/skills/gstack && ./setup --team\`"
|
||||||
|
|
||||||
|
If B: say "OK, you're on your own to keep the vendored copy up to date."
|
||||||
|
|
||||||
|
Always run (regardless of choice):
|
||||||
|
\`\`\`bash
|
||||||
|
eval "$(${ctx.paths.binDir}/gstack-slug 2>/dev/null)" 2>/dev/null || true
|
||||||
|
touch ~/.gstack/.vendoring-warned-\${SLUG:-unknown}
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
This only happens once per project. If the marker file exists, skip entirely.`;
|
||||||
|
}
|
||||||
|
|
||||||
function generateAskUserFormat(_ctx: TemplateContext): string {
|
function generateAskUserFormat(_ctx: TemplateContext): string {
|
||||||
return `## AskUserQuestion Format
|
return `## AskUserQuestion Format
|
||||||
|
|
||||||
|
|
@ -675,6 +717,7 @@ export function generatePreamble(ctx: TemplateContext): string {
|
||||||
generateTelemetryPrompt(ctx),
|
generateTelemetryPrompt(ctx),
|
||||||
generateProactivePrompt(ctx),
|
generateProactivePrompt(ctx),
|
||||||
generateRoutingInjection(ctx),
|
generateRoutingInjection(ctx),
|
||||||
|
generateVendoringDeprecation(ctx),
|
||||||
generateVoiceDirective(tier),
|
generateVoiceDirective(tier),
|
||||||
...(tier >= 2 ? [generateContextRecovery(ctx), generateAskUserFormat(ctx), generateCompletenessSection()] : []),
|
...(tier >= 2 ? [generateContextRecovery(ctx), generateAskUserFormat(ctx), generateCompletenessSection()] : []),
|
||||||
...(tier >= 3 ? [generateRepoModeSection(), generateSearchBeforeBuildingSection(ctx)] : []),
|
...(tier >= 3 ? [generateRepoModeSection(), generateSearchBeforeBuildingSection(ctx)] : []),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue