Initial import from garrytan/gstack@026751e (main snapshot via local relay)
Some checks failed
Workflow Lint / actionlint (push) Has been cancelled
Build CI Image / build (push) Has been cancelled
Skill Docs Freshness / check-freshness (push) Has been cancelled
Periodic Evals / build-image (push) Has been cancelled
Periodic Evals / evals (map[file:test/codex-e2e.test.ts name:e2e-codex]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/gemini-e2e.test.ts name:e2e-gemini]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-design.test.ts name:e2e-design]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-plan.test.ts name:e2e-plan]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-bugs.test.ts name:e2e-qa-bugs]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-workflow.test.ts name:e2e-qa-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-review.test.ts name:e2e-review]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-workflow.test.ts name:e2e-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-routing-e2e.test.ts name:e2e-routing]) (push) Has been cancelled
Some checks failed
Workflow Lint / actionlint (push) Has been cancelled
Build CI Image / build (push) Has been cancelled
Skill Docs Freshness / check-freshness (push) Has been cancelled
Periodic Evals / build-image (push) Has been cancelled
Periodic Evals / evals (map[file:test/codex-e2e.test.ts name:e2e-codex]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/gemini-e2e.test.ts name:e2e-gemini]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-design.test.ts name:e2e-design]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-plan.test.ts name:e2e-plan]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-bugs.test.ts name:e2e-qa-bugs]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-workflow.test.ts name:e2e-qa-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-review.test.ts name:e2e-review]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-workflow.test.ts name:e2e-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-routing-e2e.test.ts name:e2e-routing]) (push) Has been cancelled
Source: https://github.com/garrytan/gstack/commit/026751e
This commit is contained in:
48
scripts/resolvers/composition.ts
Normal file
48
scripts/resolvers/composition.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import type { TemplateContext } from './types';
|
||||
|
||||
/**
|
||||
* {{INVOKE_SKILL:skill-name}} — emits prose instructing Claude to read
|
||||
* another skill's SKILL.md and follow it, skipping preamble sections.
|
||||
*
|
||||
* Supports optional skip= parameter for additional sections to skip:
|
||||
* {{INVOKE_SKILL:plan-ceo-review:skip=Outside Voice,Design Outside Voices}}
|
||||
*/
|
||||
export function generateInvokeSkill(ctx: TemplateContext, args?: string[]): string {
|
||||
const skillName = args?.[0];
|
||||
if (!skillName || skillName === '') {
|
||||
throw new Error('{{INVOKE_SKILL}} requires a skill name, e.g. {{INVOKE_SKILL:plan-ceo-review}}');
|
||||
}
|
||||
|
||||
// Parse optional skip= parameter from args[1+]
|
||||
const extraSkips = (args?.slice(1) || [])
|
||||
.filter(a => a.startsWith('skip='))
|
||||
.flatMap(a => a.slice(5).split(','))
|
||||
.map(s => s.trim())
|
||||
.filter(Boolean);
|
||||
|
||||
const DEFAULT_SKIPS = [
|
||||
'Preamble (run first)',
|
||||
'AskUserQuestion Format',
|
||||
'Completeness Principle — Boil the Lake',
|
||||
'Search Before Building',
|
||||
'Contributor Mode',
|
||||
'Completion Status Protocol',
|
||||
'Telemetry (run last)',
|
||||
'Step 0: Detect platform and base branch',
|
||||
'Review Readiness Dashboard',
|
||||
'Plan File Review Report',
|
||||
'Prerequisite Skill Offer',
|
||||
'Plan Status Footer',
|
||||
];
|
||||
|
||||
const allSkips = [...DEFAULT_SKIPS, ...extraSkips];
|
||||
|
||||
return `Read the \`/${skillName}\` skill file at \`${ctx.paths.skillRoot}/${skillName}/SKILL.md\` using the Read tool.
|
||||
|
||||
**If unreadable:** Skip with "Could not load /${skillName} — skipping." and continue.
|
||||
|
||||
Follow its instructions from top to bottom, **skipping these sections** (already handled by the parent skill):
|
||||
${allSkips.map(s => `- ${s}`).join('\n')}
|
||||
|
||||
Execute every other section at full depth. When the loaded skill's instructions are complete, continue with the next step below.`;
|
||||
}
|
||||
Reference in New Issue
Block a user