create-yss-spec 2.1.8 → 2.1.10
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/README.md +1 -1
- package/package.json +1 -1
- package/src/cli.js +82 -15
- package/template/.agents/skills/ask-matt/SKILL.md +0 -1
- package/template/.agents/skills/code-review/SKILL.md +1 -1
- package/template/.agents/skills/diagnosing-bugs/SKILL.md +2 -4
- package/template/.agents/skills/domain-modeling/SKILL.md +1 -1
- package/template/.agents/skills/grill-me/SKILL.md +1 -1
- package/template/.agents/skills/grill-with-docs/SKILL.md +2 -1
- package/template/.agents/skills/grilling/SKILL.md +7 -1
- package/template/.agents/skills/maintaining-skills/SKILL.md +25 -0
- package/template/.agents/skills/product-design-prototype/SKILL.md +1 -1
- package/template/.agents/skills/to-spec/SKILL.md +1 -1
- package/template/.agents/skills/to-tickets/SKILL.md +1 -1
- package/template/.agents/skills/triage/SKILL.md +2 -2
- package/template/.agents/skills/wait-what/SKILL.md +2 -2
- package/template/.agents/skills/wayfinder/SKILL.md +1 -1
- package/template/.agents/skills/yss-components/SKILL.md +85 -10
- package/template/.agents/skills/yss-design-system/SKILL.md +1 -1
- package/template/.agents/skills/yss-hook/SKILL.md +141 -72
- package/template/.agents/skills/yss-hook/references/frontend-docs.md +3 -2
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +43 -90
- package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +31 -17
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +157 -6
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +7 -6
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +5 -2
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.claude/skills/ask-matt/SKILL.md +0 -1
- package/template/.claude/skills/code-review/SKILL.md +1 -1
- package/template/.claude/skills/diagnosing-bugs/SKILL.md +2 -4
- package/template/.claude/skills/domain-modeling/SKILL.md +1 -1
- package/template/.claude/skills/grill-me/SKILL.md +1 -1
- package/template/.claude/skills/grill-with-docs/SKILL.md +2 -1
- package/template/.claude/skills/grilling/SKILL.md +7 -1
- package/template/.claude/skills/maintaining-skills/SKILL.md +25 -0
- package/template/.claude/skills/product-design-prototype/SKILL.md +1 -1
- package/template/.claude/skills/to-spec/SKILL.md +1 -1
- package/template/.claude/skills/to-tickets/SKILL.md +1 -1
- package/template/.claude/skills/triage/SKILL.md +2 -2
- package/template/.claude/skills/wait-what/SKILL.md +2 -2
- package/template/.claude/skills/wayfinder/SKILL.md +1 -1
- package/template/.claude/skills/yss-components/SKILL.md +85 -10
- package/template/.claude/skills/yss-design-system/SKILL.md +1 -1
- package/template/.claude/skills/yss-hook/SKILL.md +141 -72
- package/template/.claude/skills/yss-hook/references/frontend-docs.md +3 -2
- package/template/.claude/skills/yss-product-lifecycle/SKILL.md +43 -90
- package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +31 -17
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +157 -6
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +7 -6
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +5 -2
- package/template/.claude/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.codex/skills/ask-matt/SKILL.md +0 -1
- package/template/.codex/skills/code-review/SKILL.md +1 -1
- package/template/.codex/skills/diagnosing-bugs/SKILL.md +2 -4
- package/template/.codex/skills/domain-modeling/SKILL.md +1 -1
- package/template/.codex/skills/grill-me/SKILL.md +1 -1
- package/template/.codex/skills/grill-with-docs/SKILL.md +2 -1
- package/template/.codex/skills/grilling/SKILL.md +7 -1
- package/template/.codex/skills/maintaining-skills/SKILL.md +25 -0
- package/template/.codex/skills/product-design-prototype/SKILL.md +1 -1
- package/template/.codex/skills/to-spec/SKILL.md +1 -1
- package/template/.codex/skills/to-tickets/SKILL.md +1 -1
- package/template/.codex/skills/triage/SKILL.md +2 -2
- package/template/.codex/skills/wait-what/SKILL.md +2 -2
- package/template/.codex/skills/wayfinder/SKILL.md +1 -1
- package/template/.codex/skills/yss-components/SKILL.md +85 -10
- package/template/.codex/skills/yss-design-system/SKILL.md +1 -1
- package/template/.codex/skills/yss-hook/SKILL.md +141 -72
- package/template/.codex/skills/yss-hook/references/frontend-docs.md +3 -2
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +43 -90
- package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +31 -17
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +157 -6
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +7 -6
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +5 -2
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.hermes/skills/ask-matt/SKILL.md +0 -1
- package/template/.hermes/skills/code-review/SKILL.md +1 -1
- package/template/.hermes/skills/diagnosing-bugs/SKILL.md +2 -4
- package/template/.hermes/skills/domain-modeling/SKILL.md +1 -1
- package/template/.hermes/skills/grill-me/SKILL.md +1 -1
- package/template/.hermes/skills/grill-with-docs/SKILL.md +2 -1
- package/template/.hermes/skills/grilling/SKILL.md +7 -1
- package/template/.hermes/skills/maintaining-skills/SKILL.md +25 -0
- package/template/.hermes/skills/product-design-prototype/SKILL.md +1 -1
- package/template/.hermes/skills/to-spec/SKILL.md +1 -1
- package/template/.hermes/skills/to-tickets/SKILL.md +1 -1
- package/template/.hermes/skills/triage/SKILL.md +2 -2
- package/template/.hermes/skills/wait-what/SKILL.md +2 -2
- package/template/.hermes/skills/wayfinder/SKILL.md +1 -1
- package/template/.hermes/skills/yss-components/SKILL.md +85 -10
- package/template/.hermes/skills/yss-design-system/SKILL.md +1 -1
- package/template/.hermes/skills/yss-hook/SKILL.md +141 -72
- package/template/.hermes/skills/yss-hook/references/frontend-docs.md +3 -2
- package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +43 -90
- package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +31 -17
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +157 -6
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +7 -6
- package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +5 -2
- package/template/.hermes/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.pi/skills/ask-matt/SKILL.md +0 -1
- package/template/.pi/skills/code-review/SKILL.md +1 -1
- package/template/.pi/skills/diagnosing-bugs/SKILL.md +2 -4
- package/template/.pi/skills/domain-modeling/SKILL.md +1 -1
- package/template/.pi/skills/grill-me/SKILL.md +1 -1
- package/template/.pi/skills/grill-with-docs/SKILL.md +2 -1
- package/template/.pi/skills/grilling/SKILL.md +7 -1
- package/template/.pi/skills/maintaining-skills/SKILL.md +25 -0
- package/template/.pi/skills/product-design-prototype/SKILL.md +1 -1
- package/template/.pi/skills/to-spec/SKILL.md +1 -1
- package/template/.pi/skills/to-tickets/SKILL.md +1 -1
- package/template/.pi/skills/triage/SKILL.md +2 -2
- package/template/.pi/skills/wait-what/SKILL.md +2 -2
- package/template/.pi/skills/wayfinder/SKILL.md +1 -1
- package/template/.pi/skills/yss-components/SKILL.md +85 -10
- package/template/.pi/skills/yss-design-system/SKILL.md +1 -1
- package/template/.pi/skills/yss-hook/SKILL.md +141 -72
- package/template/.pi/skills/yss-hook/references/frontend-docs.md +3 -2
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +43 -90
- package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +31 -17
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +157 -6
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +7 -6
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +5 -2
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.qoder/skills/ask-matt/SKILL.md +0 -1
- package/template/.qoder/skills/code-review/SKILL.md +1 -1
- package/template/.qoder/skills/diagnosing-bugs/SKILL.md +2 -4
- package/template/.qoder/skills/domain-modeling/SKILL.md +1 -1
- package/template/.qoder/skills/grill-me/SKILL.md +1 -1
- package/template/.qoder/skills/grill-with-docs/SKILL.md +2 -1
- package/template/.qoder/skills/grilling/SKILL.md +7 -1
- package/template/.qoder/skills/maintaining-skills/SKILL.md +25 -0
- package/template/.qoder/skills/product-design-prototype/SKILL.md +1 -1
- package/template/.qoder/skills/to-spec/SKILL.md +1 -1
- package/template/.qoder/skills/to-tickets/SKILL.md +1 -1
- package/template/.qoder/skills/triage/SKILL.md +2 -2
- package/template/.qoder/skills/wait-what/SKILL.md +2 -2
- package/template/.qoder/skills/wayfinder/SKILL.md +1 -1
- package/template/.qoder/skills/yss-components/SKILL.md +85 -10
- package/template/.qoder/skills/yss-design-system/SKILL.md +1 -1
- package/template/.qoder/skills/yss-hook/SKILL.md +141 -72
- package/template/.qoder/skills/yss-hook/references/frontend-docs.md +3 -2
- package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +43 -90
- package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +31 -17
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +157 -6
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +7 -6
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +5 -2
- package/template/.qoder/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.trae/skills/ask-matt/SKILL.md +0 -1
- package/template/.trae/skills/code-review/SKILL.md +1 -1
- package/template/.trae/skills/diagnosing-bugs/SKILL.md +2 -4
- package/template/.trae/skills/domain-modeling/SKILL.md +1 -1
- package/template/.trae/skills/grill-me/SKILL.md +1 -1
- package/template/.trae/skills/grill-with-docs/SKILL.md +2 -1
- package/template/.trae/skills/grilling/SKILL.md +7 -1
- package/template/.trae/skills/maintaining-skills/SKILL.md +25 -0
- package/template/.trae/skills/product-design-prototype/SKILL.md +1 -1
- package/template/.trae/skills/to-spec/SKILL.md +1 -1
- package/template/.trae/skills/to-tickets/SKILL.md +1 -1
- package/template/.trae/skills/triage/SKILL.md +2 -2
- package/template/.trae/skills/wait-what/SKILL.md +2 -2
- package/template/.trae/skills/wayfinder/SKILL.md +1 -1
- package/template/.trae/skills/yss-components/SKILL.md +85 -10
- package/template/.trae/skills/yss-design-system/SKILL.md +1 -1
- package/template/.trae/skills/yss-hook/SKILL.md +141 -72
- package/template/.trae/skills/yss-hook/references/frontend-docs.md +3 -2
- package/template/.trae/skills/yss-product-lifecycle/SKILL.md +43 -90
- package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +31 -17
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +157 -6
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +7 -6
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +5 -2
- package/template/.trae/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/AGENTS.md +21 -61
- package/template/CONTEXT.md +7 -1
- package/template/docs/adr/0001-product-design-prototype-entrypoint.md +2 -2
- package/template/docs/adr/0007-lifecycle-native-work-units.md +5 -0
- package/template/docs/agents/skills-maintenance.md +13 -5
- package/template/docs/design/README.md +1 -1
- package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +1 -1
- package/template/docs/process/harness-process-tailoring.md +37 -1
- package/template/docs/process/lifecycle-artifact-map.md +20 -15
- package/template/docs/process/lifecycle-registry-baseline.json +18 -1
- package/template/docs/process/lifecycle-registry.yaml +90 -10
- package/template/docs/process/maintenance-intensity.yaml +25 -0
- package/template/docs/process/schemas/frontend-implementation-evidence.schema.json +39 -0
- package/template/docs/process/schemas/lifecycle-checkpoint.schema.json +56 -0
- package/template/docs/process/schemas/lifecycle-registry.schema.json +2 -2
- package/template/docs/process/templates/frontend-implementation-plan-template.yaml +16 -0
- package/template/docs/process/templates/frontend-implementation-verification-template.yaml +21 -0
- package/template/docs/process/templates/lifecycle-checkpoint-template.yaml +30 -0
- package/template/docs/process/templates/stage-checkpoint-template.md +9 -5
- package/template/docs/user-guide//344/272/247/345/223/201/347/240/224/345/217/221/345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/346/234/200/344/275/263/345/256/236/350/267/265.md +1 -1
- package/template/scripts/lib/lifecycle-registry.mjs +9 -4
- package/template/scripts/lib/maintenance-intensity.mjs +94 -0
- package/template/scripts/lib/scenario-checks.mjs +172 -2
- package/template/scripts/lib/skill-supply-chain.mjs +44 -8
- package/template/scripts/verify-frontend-implementation-evidence +51 -0
- package/template/scripts/verify-lifecycle-checkpoint +37 -0
- package/template/scripts/verify-maintenance-checkpoint +13 -0
- package/template/scripts/verify-maintenance-intensity-scenarios +47 -0
- package/template/scripts/verify-template +6 -2
- package/template/scripts/verify-upstream-skill-source +32 -0
- package/template/skills-lock.json +131 -174
- package/template/wiki/raw/skills-lock.json +99 -222
- package/template/wiki/wiki/Matt/346/212/200/350/203/275/344/275/223/347/263/273.md +1 -1
- package/template/wiki/wiki/YSS/345/267/245/347/250/213/346/212/200/350/203/275/344/275/223/347/263/273.md +1 -1
- package/template/wiki/wiki//345/244/215/347/233/230/344/270/216/346/235/203/345/250/201/350/265/204/344/272/247/344/277/256/350/256/242.md +1 -1
- package/template/wiki/wiki//346/250/241/346/235/277/345/217/221/345/270/203/351/227/250/347/246/201/344/270/216/351/252/214/350/257/201.md +1 -1
- package/template/wiki/wiki//346/250/241/346/235/277/347/273/264/346/212/244/346/265/201/347/250/213.md +1 -1
- package/template.manifest.json +12 -0
- package/template.snapshot.json +4 -4
- package/template/.agents/skills/batch-grill-me/SKILL.md +0 -15
- package/template/.agents/skills/batch-grill-me/agents/openai.yaml +0 -5
- package/template/.agents/skills/claude-handoff/SKILL.md +0 -18
- package/template/.agents/skills/claude-handoff/agents/openai.yaml +0 -5
- package/template/.agents/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/.agents/skills/git-guardrails-claude-code/agents/openai.yaml +0 -3
- package/template/.agents/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/.agents/skills/web-design-engineer/README.md +0 -461
- package/template/.agents/skills/web-design-engineer/README.zh-CN.md +0 -461
- package/template/.agents/skills/web-design-engineer/SKILL.md +0 -493
- package/template/.agents/skills/web-design-engineer/manifest.json +0 -15
- package/template/.agents/skills/web-design-engineer/references/advanced-patterns.md +0 -521
- package/template/.agents/skills/web-design-engineer/references/critique-guide.md +0 -226
- package/template/.agents/skills/web-design-engineer/references/design-directions.md +0 -188
- package/template/.agents/skills/web-design-engineer/references/style-recipes/INDEX.md +0 -145
- package/template/.agents/skills/web-design-engineer/references/style-recipes/active-theory.md +0 -49
- package/template/.agents/skills/web-design-engineer/references/style-recipes/aesop.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/apple-hig.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/are-na.md +0 -55
- package/template/.agents/skills/web-design-engineer/references/style-recipes/balenciaga-post-2017.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/bloomberg-businessweek-turley.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/bloomberg-terminal.md +0 -56
- package/template/.agents/skills/web-design-engineer/references/style-recipes/dieter-rams-braun.md +0 -50
- package/template/.agents/skills/web-design-engineer/references/style-recipes/field-io.md +0 -50
- package/template/.agents/skills/web-design-engineer/references/style-recipes/headspace-meditation.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/linear.md +0 -61
- package/template/.agents/skills/web-design-engineer/references/style-recipes/mailchimp-freddie.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/mid-century-modern.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/monocle-magazine.md +0 -53
- package/template/.agents/skills/web-design-engineer/references/style-recipes/muji-kenya-hara.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/notion-pre-ai.md +0 -53
- package/template/.agents/skills/web-design-engineer/references/style-recipes/nyt-the-daily.md +0 -54
- package/template/.agents/skills/web-design-engineer/references/style-recipes/pentagram.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/raycast.md +0 -54
- package/template/.agents/skills/web-design-engineer/references/style-recipes/resn-storytelling.md +0 -49
- package/template/.agents/skills/web-design-engineer/references/style-recipes/stripe-press.md +0 -54
- package/template/.agents/skills/web-design-engineer/references/style-recipes/tufte-dataink.md +0 -52
- package/template/.agents/skills/web-design-engineer/references/style-recipes/vercel-mesh.md +0 -56
- package/template/.agents/skills/web-design-engineer/references/style-recipes/vignelli-swiss-helvetica.md +0 -50
- package/template/.agents/skills/web-design-engineer/references/style-recipes/y2k-retrofuturism.md +0 -54
- package/template/.agents/skills/web-video-presentation/README.md +0 -322
- package/template/.agents/skills/web-video-presentation/README.zh-CN.md +0 -322
- package/template/.agents/skills/web-video-presentation/SKILL.md +0 -451
- package/template/.agents/skills/web-video-presentation/manifest.json +0 -15
- package/template/.agents/skills/web-video-presentation/references/AUDIO.md +0 -276
- package/template/.agents/skills/web-video-presentation/references/CHAPTER-CRAFT.md +0 -224
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/README.md +0 -107
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/case-tech-review/README.md +0 -56
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/case-tech-review/outline-snippet.md +0 -71
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/hook-chapter/README.md +0 -86
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.css +0 -197
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.tsx +0 -125
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/list-reveal/README.md +0 -91
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.css +0 -137
- package/template/.agents/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.tsx +0 -103
- package/template/.agents/skills/web-video-presentation/references/OUTLINE-FORMAT.md +0 -203
- package/template/.agents/skills/web-video-presentation/references/RECORDING.md +0 -77
- package/template/.agents/skills/web-video-presentation/references/SCRIPT-STYLE.md +0 -409
- package/template/.agents/skills/web-video-presentation/references/THEMES.md +0 -351
- package/template/.agents/skills/web-video-presentation/scripts/scaffold.sh +0 -245
- package/template/.agents/skills/web-video-presentation/templates/index.html +0 -12
- package/template/.agents/skills/web-video-presentation/templates/scripts/extract-narrations.ts +0 -137
- package/template/.agents/skills/web-video-presentation/templates/scripts/synthesize-audio.sh +0 -145
- package/template/.agents/skills/web-video-presentation/templates/scripts/tts-providers/README.md +0 -324
- package/template/.agents/skills/web-video-presentation/templates/scripts/tts-providers/minimax.sh +0 -50
- package/template/.agents/skills/web-video-presentation/templates/scripts/tts-providers/openai.sh +0 -70
- package/template/.agents/skills/web-video-presentation/templates/src/App.tsx +0 -73
- package/template/.agents/skills/web-video-presentation/templates/src/chapters/01-example/Example.css +0 -80
- package/template/.agents/skills/web-video-presentation/templates/src/chapters/01-example/Example.tsx +0 -104
- package/template/.agents/skills/web-video-presentation/templates/src/chapters/01-example/narrations.ts +0 -28
- package/template/.agents/skills/web-video-presentation/templates/src/components/AutoStartGate.css +0 -55
- package/template/.agents/skills/web-video-presentation/templates/src/components/AutoStartGate.tsx +0 -36
- package/template/.agents/skills/web-video-presentation/templates/src/components/AutoToggle.css +0 -53
- package/template/.agents/skills/web-video-presentation/templates/src/components/AutoToggle.tsx +0 -36
- package/template/.agents/skills/web-video-presentation/templates/src/components/MaskReveal.tsx +0 -35
- package/template/.agents/skills/web-video-presentation/templates/src/components/ProgressBar.css +0 -122
- package/template/.agents/skills/web-video-presentation/templates/src/components/ProgressBar.tsx +0 -109
- package/template/.agents/skills/web-video-presentation/templates/src/components/Stage.tsx +0 -48
- package/template/.agents/skills/web-video-presentation/templates/src/hooks/useAudioPlayer.ts +0 -112
- package/template/.agents/skills/web-video-presentation/templates/src/hooks/useAutoMode.ts +0 -66
- package/template/.agents/skills/web-video-presentation/templates/src/hooks/useStageScale.ts +0 -28
- package/template/.agents/skills/web-video-presentation/templates/src/hooks/useStepper.ts +0 -174
- package/template/.agents/skills/web-video-presentation/templates/src/main.tsx +0 -9
- package/template/.agents/skills/web-video-presentation/templates/src/registry/chapters.ts +0 -23
- package/template/.agents/skills/web-video-presentation/templates/src/registry/types.ts +0 -25
- package/template/.agents/skills/web-video-presentation/templates/src/styles/animations.css +0 -63
- package/template/.agents/skills/web-video-presentation/templates/src/styles/base.css +0 -415
- package/template/.agents/skills/web-video-presentation/templates/src/styles/fonts.css +0 -20
- package/template/.agents/skills/web-video-presentation/templates/vite.config.ts +0 -10
- package/template/.agents/skills/web-video-presentation/themes/bauhaus-bold/theme.json +0 -27
- package/template/.agents/skills/web-video-presentation/themes/bauhaus-bold/tokens.css +0 -60
- package/template/.agents/skills/web-video-presentation/themes/blueprint/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/blueprint/tokens.css +0 -65
- package/template/.agents/skills/web-video-presentation/themes/bold-signal/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/bold-signal/tokens.css +0 -71
- package/template/.agents/skills/web-video-presentation/themes/chalk-garden/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/chalk-garden/tokens.css +0 -64
- package/template/.agents/skills/web-video-presentation/themes/creative-voltage/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/creative-voltage/tokens.css +0 -68
- package/template/.agents/skills/web-video-presentation/themes/dark-botanical/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/dark-botanical/tokens.css +0 -68
- package/template/.agents/skills/web-video-presentation/themes/dune/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/dune/tokens.css +0 -62
- package/template/.agents/skills/web-video-presentation/themes/electric-studio/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/electric-studio/tokens.css +0 -68
- package/template/.agents/skills/web-video-presentation/themes/forest-ink/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/forest-ink/tokens.css +0 -68
- package/template/.agents/skills/web-video-presentation/themes/indigo-porcelain/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/indigo-porcelain/tokens.css +0 -62
- package/template/.agents/skills/web-video-presentation/themes/kraft-paper/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/kraft-paper/tokens.css +0 -67
- package/template/.agents/skills/web-video-presentation/themes/midnight-press/theme.json +0 -26
- package/template/.agents/skills/web-video-presentation/themes/midnight-press/tokens.css +0 -56
- package/template/.agents/skills/web-video-presentation/themes/monochrome-print/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/monochrome-print/tokens.css +0 -60
- package/template/.agents/skills/web-video-presentation/themes/neon-cyber/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/neon-cyber/tokens.css +0 -75
- package/template/.agents/skills/web-video-presentation/themes/newsroom/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/newsroom/tokens.css +0 -63
- package/template/.agents/skills/web-video-presentation/themes/paper-press/theme.json +0 -27
- package/template/.agents/skills/web-video-presentation/themes/paper-press/tokens.css +0 -65
- package/template/.agents/skills/web-video-presentation/themes/pastel-dream/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/pastel-dream/tokens.css +0 -67
- package/template/.agents/skills/web-video-presentation/themes/split-canvas/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/split-canvas/tokens.css +0 -70
- package/template/.agents/skills/web-video-presentation/themes/sunset-zine/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/sunset-zine/tokens.css +0 -65
- package/template/.agents/skills/web-video-presentation/themes/swiss-ikb/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/swiss-ikb/tokens.css +0 -77
- package/template/.agents/skills/web-video-presentation/themes/terminal-green/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/terminal-green/tokens.css +0 -73
- package/template/.agents/skills/web-video-presentation/themes/vintage-editorial/theme.json +0 -28
- package/template/.agents/skills/web-video-presentation/themes/vintage-editorial/tokens.css +0 -66
- package/template/.agents/skills/web-video-presentation/themes/warm-keynote/theme.json +0 -27
- package/template/.agents/skills/web-video-presentation/themes/warm-keynote/tokens.css +0 -66
- package/template/.agents/skills/wireframe-prototype/SKILL.md +0 -56
- package/template/.agents/skills/wireframe-prototype/agents/openai.yaml +0 -4
- package/template/.agents/skills/wizard/SKILL.md +0 -44
- package/template/.agents/skills/wizard/agents/openai.yaml +0 -3
- package/template/.agents/skills/wizard/template.sh +0 -204
- package/template/.agents/skills/writing-skills/SKILL.md +0 -689
- package/template/.agents/skills/writing-skills/anthropic-best-practices.md +0 -1150
- package/template/.agents/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/template/.agents/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/template/.agents/skills/writing-skills/persuasion-principles.md +0 -187
- package/template/.agents/skills/writing-skills/render-graphs.js +0 -168
- package/template/.agents/skills/writing-skills/testing-skills-with-subagents.md +0 -384
- package/template/.claude/skills/batch-grill-me/SKILL.md +0 -15
- package/template/.claude/skills/batch-grill-me/agents/openai.yaml +0 -5
- package/template/.claude/skills/claude-handoff/SKILL.md +0 -18
- package/template/.claude/skills/claude-handoff/agents/openai.yaml +0 -5
- package/template/.claude/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/.claude/skills/git-guardrails-claude-code/agents/openai.yaml +0 -3
- package/template/.claude/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/.claude/skills/web-design-engineer/README.md +0 -461
- package/template/.claude/skills/web-design-engineer/README.zh-CN.md +0 -461
- package/template/.claude/skills/web-design-engineer/SKILL.md +0 -493
- package/template/.claude/skills/web-design-engineer/manifest.json +0 -15
- package/template/.claude/skills/web-design-engineer/references/advanced-patterns.md +0 -521
- package/template/.claude/skills/web-design-engineer/references/critique-guide.md +0 -226
- package/template/.claude/skills/web-design-engineer/references/design-directions.md +0 -188
- package/template/.claude/skills/web-design-engineer/references/style-recipes/INDEX.md +0 -145
- package/template/.claude/skills/web-design-engineer/references/style-recipes/active-theory.md +0 -49
- package/template/.claude/skills/web-design-engineer/references/style-recipes/aesop.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/apple-hig.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/are-na.md +0 -55
- package/template/.claude/skills/web-design-engineer/references/style-recipes/balenciaga-post-2017.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/bloomberg-businessweek-turley.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/bloomberg-terminal.md +0 -56
- package/template/.claude/skills/web-design-engineer/references/style-recipes/dieter-rams-braun.md +0 -50
- package/template/.claude/skills/web-design-engineer/references/style-recipes/field-io.md +0 -50
- package/template/.claude/skills/web-design-engineer/references/style-recipes/headspace-meditation.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/linear.md +0 -61
- package/template/.claude/skills/web-design-engineer/references/style-recipes/mailchimp-freddie.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/mid-century-modern.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/monocle-magazine.md +0 -53
- package/template/.claude/skills/web-design-engineer/references/style-recipes/muji-kenya-hara.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/notion-pre-ai.md +0 -53
- package/template/.claude/skills/web-design-engineer/references/style-recipes/nyt-the-daily.md +0 -54
- package/template/.claude/skills/web-design-engineer/references/style-recipes/pentagram.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/raycast.md +0 -54
- package/template/.claude/skills/web-design-engineer/references/style-recipes/resn-storytelling.md +0 -49
- package/template/.claude/skills/web-design-engineer/references/style-recipes/stripe-press.md +0 -54
- package/template/.claude/skills/web-design-engineer/references/style-recipes/tufte-dataink.md +0 -52
- package/template/.claude/skills/web-design-engineer/references/style-recipes/vercel-mesh.md +0 -56
- package/template/.claude/skills/web-design-engineer/references/style-recipes/vignelli-swiss-helvetica.md +0 -50
- package/template/.claude/skills/web-design-engineer/references/style-recipes/y2k-retrofuturism.md +0 -54
- package/template/.claude/skills/web-video-presentation/README.md +0 -322
- package/template/.claude/skills/web-video-presentation/README.zh-CN.md +0 -322
- package/template/.claude/skills/web-video-presentation/SKILL.md +0 -451
- package/template/.claude/skills/web-video-presentation/manifest.json +0 -15
- package/template/.claude/skills/web-video-presentation/references/AUDIO.md +0 -276
- package/template/.claude/skills/web-video-presentation/references/CHAPTER-CRAFT.md +0 -224
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/README.md +0 -107
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/case-tech-review/README.md +0 -56
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/case-tech-review/outline-snippet.md +0 -71
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/hook-chapter/README.md +0 -86
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.css +0 -197
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.tsx +0 -125
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/list-reveal/README.md +0 -91
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.css +0 -137
- package/template/.claude/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.tsx +0 -103
- package/template/.claude/skills/web-video-presentation/references/OUTLINE-FORMAT.md +0 -203
- package/template/.claude/skills/web-video-presentation/references/RECORDING.md +0 -77
- package/template/.claude/skills/web-video-presentation/references/SCRIPT-STYLE.md +0 -409
- package/template/.claude/skills/web-video-presentation/references/THEMES.md +0 -351
- package/template/.claude/skills/web-video-presentation/scripts/scaffold.sh +0 -245
- package/template/.claude/skills/web-video-presentation/templates/index.html +0 -12
- package/template/.claude/skills/web-video-presentation/templates/scripts/extract-narrations.ts +0 -137
- package/template/.claude/skills/web-video-presentation/templates/scripts/synthesize-audio.sh +0 -145
- package/template/.claude/skills/web-video-presentation/templates/scripts/tts-providers/README.md +0 -324
- package/template/.claude/skills/web-video-presentation/templates/scripts/tts-providers/minimax.sh +0 -50
- package/template/.claude/skills/web-video-presentation/templates/scripts/tts-providers/openai.sh +0 -70
- package/template/.claude/skills/web-video-presentation/templates/src/App.tsx +0 -73
- package/template/.claude/skills/web-video-presentation/templates/src/chapters/01-example/Example.css +0 -80
- package/template/.claude/skills/web-video-presentation/templates/src/chapters/01-example/Example.tsx +0 -104
- package/template/.claude/skills/web-video-presentation/templates/src/chapters/01-example/narrations.ts +0 -28
- package/template/.claude/skills/web-video-presentation/templates/src/components/AutoStartGate.css +0 -55
- package/template/.claude/skills/web-video-presentation/templates/src/components/AutoStartGate.tsx +0 -36
- package/template/.claude/skills/web-video-presentation/templates/src/components/AutoToggle.css +0 -53
- package/template/.claude/skills/web-video-presentation/templates/src/components/AutoToggle.tsx +0 -36
- package/template/.claude/skills/web-video-presentation/templates/src/components/MaskReveal.tsx +0 -35
- package/template/.claude/skills/web-video-presentation/templates/src/components/ProgressBar.css +0 -122
- package/template/.claude/skills/web-video-presentation/templates/src/components/ProgressBar.tsx +0 -109
- package/template/.claude/skills/web-video-presentation/templates/src/components/Stage.tsx +0 -48
- package/template/.claude/skills/web-video-presentation/templates/src/hooks/useAudioPlayer.ts +0 -112
- package/template/.claude/skills/web-video-presentation/templates/src/hooks/useAutoMode.ts +0 -66
- package/template/.claude/skills/web-video-presentation/templates/src/hooks/useStageScale.ts +0 -28
- package/template/.claude/skills/web-video-presentation/templates/src/hooks/useStepper.ts +0 -174
- package/template/.claude/skills/web-video-presentation/templates/src/main.tsx +0 -9
- package/template/.claude/skills/web-video-presentation/templates/src/registry/chapters.ts +0 -23
- package/template/.claude/skills/web-video-presentation/templates/src/registry/types.ts +0 -25
- package/template/.claude/skills/web-video-presentation/templates/src/styles/animations.css +0 -63
- package/template/.claude/skills/web-video-presentation/templates/src/styles/base.css +0 -415
- package/template/.claude/skills/web-video-presentation/templates/src/styles/fonts.css +0 -20
- package/template/.claude/skills/web-video-presentation/templates/vite.config.ts +0 -10
- package/template/.claude/skills/web-video-presentation/themes/bauhaus-bold/theme.json +0 -27
- package/template/.claude/skills/web-video-presentation/themes/bauhaus-bold/tokens.css +0 -60
- package/template/.claude/skills/web-video-presentation/themes/blueprint/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/blueprint/tokens.css +0 -65
- package/template/.claude/skills/web-video-presentation/themes/bold-signal/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/bold-signal/tokens.css +0 -71
- package/template/.claude/skills/web-video-presentation/themes/chalk-garden/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/chalk-garden/tokens.css +0 -64
- package/template/.claude/skills/web-video-presentation/themes/creative-voltage/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/creative-voltage/tokens.css +0 -68
- package/template/.claude/skills/web-video-presentation/themes/dark-botanical/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/dark-botanical/tokens.css +0 -68
- package/template/.claude/skills/web-video-presentation/themes/dune/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/dune/tokens.css +0 -62
- package/template/.claude/skills/web-video-presentation/themes/electric-studio/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/electric-studio/tokens.css +0 -68
- package/template/.claude/skills/web-video-presentation/themes/forest-ink/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/forest-ink/tokens.css +0 -68
- package/template/.claude/skills/web-video-presentation/themes/indigo-porcelain/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/indigo-porcelain/tokens.css +0 -62
- package/template/.claude/skills/web-video-presentation/themes/kraft-paper/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/kraft-paper/tokens.css +0 -67
- package/template/.claude/skills/web-video-presentation/themes/midnight-press/theme.json +0 -26
- package/template/.claude/skills/web-video-presentation/themes/midnight-press/tokens.css +0 -56
- package/template/.claude/skills/web-video-presentation/themes/monochrome-print/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/monochrome-print/tokens.css +0 -60
- package/template/.claude/skills/web-video-presentation/themes/neon-cyber/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/neon-cyber/tokens.css +0 -75
- package/template/.claude/skills/web-video-presentation/themes/newsroom/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/newsroom/tokens.css +0 -63
- package/template/.claude/skills/web-video-presentation/themes/paper-press/theme.json +0 -27
- package/template/.claude/skills/web-video-presentation/themes/paper-press/tokens.css +0 -65
- package/template/.claude/skills/web-video-presentation/themes/pastel-dream/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/pastel-dream/tokens.css +0 -67
- package/template/.claude/skills/web-video-presentation/themes/split-canvas/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/split-canvas/tokens.css +0 -70
- package/template/.claude/skills/web-video-presentation/themes/sunset-zine/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/sunset-zine/tokens.css +0 -65
- package/template/.claude/skills/web-video-presentation/themes/swiss-ikb/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/swiss-ikb/tokens.css +0 -77
- package/template/.claude/skills/web-video-presentation/themes/terminal-green/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/terminal-green/tokens.css +0 -73
- package/template/.claude/skills/web-video-presentation/themes/vintage-editorial/theme.json +0 -28
- package/template/.claude/skills/web-video-presentation/themes/vintage-editorial/tokens.css +0 -66
- package/template/.claude/skills/web-video-presentation/themes/warm-keynote/theme.json +0 -27
- package/template/.claude/skills/web-video-presentation/themes/warm-keynote/tokens.css +0 -66
- package/template/.claude/skills/wireframe-prototype/SKILL.md +0 -56
- package/template/.claude/skills/wireframe-prototype/agents/openai.yaml +0 -4
- package/template/.claude/skills/wizard/SKILL.md +0 -44
- package/template/.claude/skills/wizard/agents/openai.yaml +0 -3
- package/template/.claude/skills/wizard/template.sh +0 -204
- package/template/.claude/skills/writing-skills/SKILL.md +0 -689
- package/template/.claude/skills/writing-skills/anthropic-best-practices.md +0 -1150
- package/template/.claude/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/template/.claude/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/template/.claude/skills/writing-skills/persuasion-principles.md +0 -187
- package/template/.claude/skills/writing-skills/render-graphs.js +0 -168
- package/template/.claude/skills/writing-skills/testing-skills-with-subagents.md +0 -384
- package/template/.codex/skills/batch-grill-me/SKILL.md +0 -15
- package/template/.codex/skills/batch-grill-me/agents/openai.yaml +0 -5
- package/template/.codex/skills/claude-handoff/SKILL.md +0 -18
- package/template/.codex/skills/claude-handoff/agents/openai.yaml +0 -5
- package/template/.codex/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/.codex/skills/git-guardrails-claude-code/agents/openai.yaml +0 -3
- package/template/.codex/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/.codex/skills/web-design-engineer/README.md +0 -461
- package/template/.codex/skills/web-design-engineer/README.zh-CN.md +0 -461
- package/template/.codex/skills/web-design-engineer/SKILL.md +0 -493
- package/template/.codex/skills/web-design-engineer/manifest.json +0 -15
- package/template/.codex/skills/web-design-engineer/references/advanced-patterns.md +0 -521
- package/template/.codex/skills/web-design-engineer/references/critique-guide.md +0 -226
- package/template/.codex/skills/web-design-engineer/references/design-directions.md +0 -188
- package/template/.codex/skills/web-design-engineer/references/style-recipes/INDEX.md +0 -145
- package/template/.codex/skills/web-design-engineer/references/style-recipes/active-theory.md +0 -49
- package/template/.codex/skills/web-design-engineer/references/style-recipes/aesop.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/apple-hig.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/are-na.md +0 -55
- package/template/.codex/skills/web-design-engineer/references/style-recipes/balenciaga-post-2017.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/bloomberg-businessweek-turley.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/bloomberg-terminal.md +0 -56
- package/template/.codex/skills/web-design-engineer/references/style-recipes/dieter-rams-braun.md +0 -50
- package/template/.codex/skills/web-design-engineer/references/style-recipes/field-io.md +0 -50
- package/template/.codex/skills/web-design-engineer/references/style-recipes/headspace-meditation.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/linear.md +0 -61
- package/template/.codex/skills/web-design-engineer/references/style-recipes/mailchimp-freddie.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/mid-century-modern.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/monocle-magazine.md +0 -53
- package/template/.codex/skills/web-design-engineer/references/style-recipes/muji-kenya-hara.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/notion-pre-ai.md +0 -53
- package/template/.codex/skills/web-design-engineer/references/style-recipes/nyt-the-daily.md +0 -54
- package/template/.codex/skills/web-design-engineer/references/style-recipes/pentagram.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/raycast.md +0 -54
- package/template/.codex/skills/web-design-engineer/references/style-recipes/resn-storytelling.md +0 -49
- package/template/.codex/skills/web-design-engineer/references/style-recipes/stripe-press.md +0 -54
- package/template/.codex/skills/web-design-engineer/references/style-recipes/tufte-dataink.md +0 -52
- package/template/.codex/skills/web-design-engineer/references/style-recipes/vercel-mesh.md +0 -56
- package/template/.codex/skills/web-design-engineer/references/style-recipes/vignelli-swiss-helvetica.md +0 -50
- package/template/.codex/skills/web-design-engineer/references/style-recipes/y2k-retrofuturism.md +0 -54
- package/template/.codex/skills/web-video-presentation/README.md +0 -322
- package/template/.codex/skills/web-video-presentation/README.zh-CN.md +0 -322
- package/template/.codex/skills/web-video-presentation/SKILL.md +0 -451
- package/template/.codex/skills/web-video-presentation/manifest.json +0 -15
- package/template/.codex/skills/web-video-presentation/references/AUDIO.md +0 -276
- package/template/.codex/skills/web-video-presentation/references/CHAPTER-CRAFT.md +0 -224
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/README.md +0 -107
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/case-tech-review/README.md +0 -56
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/case-tech-review/outline-snippet.md +0 -71
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/hook-chapter/README.md +0 -86
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.css +0 -197
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.tsx +0 -125
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/list-reveal/README.md +0 -91
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.css +0 -137
- package/template/.codex/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.tsx +0 -103
- package/template/.codex/skills/web-video-presentation/references/OUTLINE-FORMAT.md +0 -203
- package/template/.codex/skills/web-video-presentation/references/RECORDING.md +0 -77
- package/template/.codex/skills/web-video-presentation/references/SCRIPT-STYLE.md +0 -409
- package/template/.codex/skills/web-video-presentation/references/THEMES.md +0 -351
- package/template/.codex/skills/web-video-presentation/scripts/scaffold.sh +0 -245
- package/template/.codex/skills/web-video-presentation/templates/index.html +0 -12
- package/template/.codex/skills/web-video-presentation/templates/scripts/extract-narrations.ts +0 -137
- package/template/.codex/skills/web-video-presentation/templates/scripts/synthesize-audio.sh +0 -145
- package/template/.codex/skills/web-video-presentation/templates/scripts/tts-providers/README.md +0 -324
- package/template/.codex/skills/web-video-presentation/templates/scripts/tts-providers/minimax.sh +0 -50
- package/template/.codex/skills/web-video-presentation/templates/scripts/tts-providers/openai.sh +0 -70
- package/template/.codex/skills/web-video-presentation/templates/src/App.tsx +0 -73
- package/template/.codex/skills/web-video-presentation/templates/src/chapters/01-example/Example.css +0 -80
- package/template/.codex/skills/web-video-presentation/templates/src/chapters/01-example/Example.tsx +0 -104
- package/template/.codex/skills/web-video-presentation/templates/src/chapters/01-example/narrations.ts +0 -28
- package/template/.codex/skills/web-video-presentation/templates/src/components/AutoStartGate.css +0 -55
- package/template/.codex/skills/web-video-presentation/templates/src/components/AutoStartGate.tsx +0 -36
- package/template/.codex/skills/web-video-presentation/templates/src/components/AutoToggle.css +0 -53
- package/template/.codex/skills/web-video-presentation/templates/src/components/AutoToggle.tsx +0 -36
- package/template/.codex/skills/web-video-presentation/templates/src/components/MaskReveal.tsx +0 -35
- package/template/.codex/skills/web-video-presentation/templates/src/components/ProgressBar.css +0 -122
- package/template/.codex/skills/web-video-presentation/templates/src/components/ProgressBar.tsx +0 -109
- package/template/.codex/skills/web-video-presentation/templates/src/components/Stage.tsx +0 -48
- package/template/.codex/skills/web-video-presentation/templates/src/hooks/useAudioPlayer.ts +0 -112
- package/template/.codex/skills/web-video-presentation/templates/src/hooks/useAutoMode.ts +0 -66
- package/template/.codex/skills/web-video-presentation/templates/src/hooks/useStageScale.ts +0 -28
- package/template/.codex/skills/web-video-presentation/templates/src/hooks/useStepper.ts +0 -174
- package/template/.codex/skills/web-video-presentation/templates/src/main.tsx +0 -9
- package/template/.codex/skills/web-video-presentation/templates/src/registry/chapters.ts +0 -23
- package/template/.codex/skills/web-video-presentation/templates/src/registry/types.ts +0 -25
- package/template/.codex/skills/web-video-presentation/templates/src/styles/animations.css +0 -63
- package/template/.codex/skills/web-video-presentation/templates/src/styles/base.css +0 -415
- package/template/.codex/skills/web-video-presentation/templates/src/styles/fonts.css +0 -20
- package/template/.codex/skills/web-video-presentation/templates/vite.config.ts +0 -10
- package/template/.codex/skills/web-video-presentation/themes/bauhaus-bold/theme.json +0 -27
- package/template/.codex/skills/web-video-presentation/themes/bauhaus-bold/tokens.css +0 -60
- package/template/.codex/skills/web-video-presentation/themes/blueprint/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/blueprint/tokens.css +0 -65
- package/template/.codex/skills/web-video-presentation/themes/bold-signal/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/bold-signal/tokens.css +0 -71
- package/template/.codex/skills/web-video-presentation/themes/chalk-garden/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/chalk-garden/tokens.css +0 -64
- package/template/.codex/skills/web-video-presentation/themes/creative-voltage/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/creative-voltage/tokens.css +0 -68
- package/template/.codex/skills/web-video-presentation/themes/dark-botanical/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/dark-botanical/tokens.css +0 -68
- package/template/.codex/skills/web-video-presentation/themes/dune/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/dune/tokens.css +0 -62
- package/template/.codex/skills/web-video-presentation/themes/electric-studio/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/electric-studio/tokens.css +0 -68
- package/template/.codex/skills/web-video-presentation/themes/forest-ink/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/forest-ink/tokens.css +0 -68
- package/template/.codex/skills/web-video-presentation/themes/indigo-porcelain/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/indigo-porcelain/tokens.css +0 -62
- package/template/.codex/skills/web-video-presentation/themes/kraft-paper/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/kraft-paper/tokens.css +0 -67
- package/template/.codex/skills/web-video-presentation/themes/midnight-press/theme.json +0 -26
- package/template/.codex/skills/web-video-presentation/themes/midnight-press/tokens.css +0 -56
- package/template/.codex/skills/web-video-presentation/themes/monochrome-print/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/monochrome-print/tokens.css +0 -60
- package/template/.codex/skills/web-video-presentation/themes/neon-cyber/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/neon-cyber/tokens.css +0 -75
- package/template/.codex/skills/web-video-presentation/themes/newsroom/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/newsroom/tokens.css +0 -63
- package/template/.codex/skills/web-video-presentation/themes/paper-press/theme.json +0 -27
- package/template/.codex/skills/web-video-presentation/themes/paper-press/tokens.css +0 -65
- package/template/.codex/skills/web-video-presentation/themes/pastel-dream/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/pastel-dream/tokens.css +0 -67
- package/template/.codex/skills/web-video-presentation/themes/split-canvas/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/split-canvas/tokens.css +0 -70
- package/template/.codex/skills/web-video-presentation/themes/sunset-zine/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/sunset-zine/tokens.css +0 -65
- package/template/.codex/skills/web-video-presentation/themes/swiss-ikb/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/swiss-ikb/tokens.css +0 -77
- package/template/.codex/skills/web-video-presentation/themes/terminal-green/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/terminal-green/tokens.css +0 -73
- package/template/.codex/skills/web-video-presentation/themes/vintage-editorial/theme.json +0 -28
- package/template/.codex/skills/web-video-presentation/themes/vintage-editorial/tokens.css +0 -66
- package/template/.codex/skills/web-video-presentation/themes/warm-keynote/theme.json +0 -27
- package/template/.codex/skills/web-video-presentation/themes/warm-keynote/tokens.css +0 -66
- package/template/.codex/skills/wireframe-prototype/SKILL.md +0 -56
- package/template/.codex/skills/wireframe-prototype/agents/openai.yaml +0 -4
- package/template/.codex/skills/wizard/SKILL.md +0 -44
- package/template/.codex/skills/wizard/agents/openai.yaml +0 -3
- package/template/.codex/skills/wizard/template.sh +0 -204
- package/template/.codex/skills/writing-skills/SKILL.md +0 -689
- package/template/.codex/skills/writing-skills/anthropic-best-practices.md +0 -1150
- package/template/.codex/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/template/.codex/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/template/.codex/skills/writing-skills/persuasion-principles.md +0 -187
- package/template/.codex/skills/writing-skills/render-graphs.js +0 -168
- package/template/.codex/skills/writing-skills/testing-skills-with-subagents.md +0 -384
- package/template/.hermes/skills/batch-grill-me/SKILL.md +0 -15
- package/template/.hermes/skills/batch-grill-me/agents/openai.yaml +0 -5
- package/template/.hermes/skills/claude-handoff/SKILL.md +0 -18
- package/template/.hermes/skills/claude-handoff/agents/openai.yaml +0 -5
- package/template/.hermes/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/.hermes/skills/git-guardrails-claude-code/agents/openai.yaml +0 -3
- package/template/.hermes/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/.hermes/skills/web-design-engineer/README.md +0 -461
- package/template/.hermes/skills/web-design-engineer/README.zh-CN.md +0 -461
- package/template/.hermes/skills/web-design-engineer/SKILL.md +0 -493
- package/template/.hermes/skills/web-design-engineer/manifest.json +0 -15
- package/template/.hermes/skills/web-design-engineer/references/advanced-patterns.md +0 -521
- package/template/.hermes/skills/web-design-engineer/references/critique-guide.md +0 -226
- package/template/.hermes/skills/web-design-engineer/references/design-directions.md +0 -188
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/INDEX.md +0 -145
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/active-theory.md +0 -49
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/aesop.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/apple-hig.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/are-na.md +0 -55
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/balenciaga-post-2017.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/bloomberg-businessweek-turley.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/bloomberg-terminal.md +0 -56
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/dieter-rams-braun.md +0 -50
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/field-io.md +0 -50
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/headspace-meditation.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/linear.md +0 -61
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/mailchimp-freddie.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/mid-century-modern.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/monocle-magazine.md +0 -53
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/muji-kenya-hara.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/notion-pre-ai.md +0 -53
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/nyt-the-daily.md +0 -54
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/pentagram.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/raycast.md +0 -54
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/resn-storytelling.md +0 -49
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/stripe-press.md +0 -54
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/tufte-dataink.md +0 -52
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/vercel-mesh.md +0 -56
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/vignelli-swiss-helvetica.md +0 -50
- package/template/.hermes/skills/web-design-engineer/references/style-recipes/y2k-retrofuturism.md +0 -54
- package/template/.hermes/skills/web-video-presentation/README.md +0 -322
- package/template/.hermes/skills/web-video-presentation/README.zh-CN.md +0 -322
- package/template/.hermes/skills/web-video-presentation/SKILL.md +0 -451
- package/template/.hermes/skills/web-video-presentation/manifest.json +0 -15
- package/template/.hermes/skills/web-video-presentation/references/AUDIO.md +0 -276
- package/template/.hermes/skills/web-video-presentation/references/CHAPTER-CRAFT.md +0 -224
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/README.md +0 -107
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/case-tech-review/README.md +0 -56
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/case-tech-review/outline-snippet.md +0 -71
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/hook-chapter/README.md +0 -86
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.css +0 -197
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.tsx +0 -125
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/list-reveal/README.md +0 -91
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.css +0 -137
- package/template/.hermes/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.tsx +0 -103
- package/template/.hermes/skills/web-video-presentation/references/OUTLINE-FORMAT.md +0 -203
- package/template/.hermes/skills/web-video-presentation/references/RECORDING.md +0 -77
- package/template/.hermes/skills/web-video-presentation/references/SCRIPT-STYLE.md +0 -409
- package/template/.hermes/skills/web-video-presentation/references/THEMES.md +0 -351
- package/template/.hermes/skills/web-video-presentation/scripts/scaffold.sh +0 -245
- package/template/.hermes/skills/web-video-presentation/templates/index.html +0 -12
- package/template/.hermes/skills/web-video-presentation/templates/scripts/extract-narrations.ts +0 -137
- package/template/.hermes/skills/web-video-presentation/templates/scripts/synthesize-audio.sh +0 -145
- package/template/.hermes/skills/web-video-presentation/templates/scripts/tts-providers/README.md +0 -324
- package/template/.hermes/skills/web-video-presentation/templates/scripts/tts-providers/minimax.sh +0 -50
- package/template/.hermes/skills/web-video-presentation/templates/scripts/tts-providers/openai.sh +0 -70
- package/template/.hermes/skills/web-video-presentation/templates/src/App.tsx +0 -73
- package/template/.hermes/skills/web-video-presentation/templates/src/chapters/01-example/Example.css +0 -80
- package/template/.hermes/skills/web-video-presentation/templates/src/chapters/01-example/Example.tsx +0 -104
- package/template/.hermes/skills/web-video-presentation/templates/src/chapters/01-example/narrations.ts +0 -28
- package/template/.hermes/skills/web-video-presentation/templates/src/components/AutoStartGate.css +0 -55
- package/template/.hermes/skills/web-video-presentation/templates/src/components/AutoStartGate.tsx +0 -36
- package/template/.hermes/skills/web-video-presentation/templates/src/components/AutoToggle.css +0 -53
- package/template/.hermes/skills/web-video-presentation/templates/src/components/AutoToggle.tsx +0 -36
- package/template/.hermes/skills/web-video-presentation/templates/src/components/MaskReveal.tsx +0 -35
- package/template/.hermes/skills/web-video-presentation/templates/src/components/ProgressBar.css +0 -122
- package/template/.hermes/skills/web-video-presentation/templates/src/components/ProgressBar.tsx +0 -109
- package/template/.hermes/skills/web-video-presentation/templates/src/components/Stage.tsx +0 -48
- package/template/.hermes/skills/web-video-presentation/templates/src/hooks/useAudioPlayer.ts +0 -112
- package/template/.hermes/skills/web-video-presentation/templates/src/hooks/useAutoMode.ts +0 -66
- package/template/.hermes/skills/web-video-presentation/templates/src/hooks/useStageScale.ts +0 -28
- package/template/.hermes/skills/web-video-presentation/templates/src/hooks/useStepper.ts +0 -174
- package/template/.hermes/skills/web-video-presentation/templates/src/main.tsx +0 -9
- package/template/.hermes/skills/web-video-presentation/templates/src/registry/chapters.ts +0 -23
- package/template/.hermes/skills/web-video-presentation/templates/src/registry/types.ts +0 -25
- package/template/.hermes/skills/web-video-presentation/templates/src/styles/animations.css +0 -63
- package/template/.hermes/skills/web-video-presentation/templates/src/styles/base.css +0 -415
- package/template/.hermes/skills/web-video-presentation/templates/src/styles/fonts.css +0 -20
- package/template/.hermes/skills/web-video-presentation/templates/vite.config.ts +0 -10
- package/template/.hermes/skills/web-video-presentation/themes/bauhaus-bold/theme.json +0 -27
- package/template/.hermes/skills/web-video-presentation/themes/bauhaus-bold/tokens.css +0 -60
- package/template/.hermes/skills/web-video-presentation/themes/blueprint/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/blueprint/tokens.css +0 -65
- package/template/.hermes/skills/web-video-presentation/themes/bold-signal/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/bold-signal/tokens.css +0 -71
- package/template/.hermes/skills/web-video-presentation/themes/chalk-garden/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/chalk-garden/tokens.css +0 -64
- package/template/.hermes/skills/web-video-presentation/themes/creative-voltage/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/creative-voltage/tokens.css +0 -68
- package/template/.hermes/skills/web-video-presentation/themes/dark-botanical/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/dark-botanical/tokens.css +0 -68
- package/template/.hermes/skills/web-video-presentation/themes/dune/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/dune/tokens.css +0 -62
- package/template/.hermes/skills/web-video-presentation/themes/electric-studio/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/electric-studio/tokens.css +0 -68
- package/template/.hermes/skills/web-video-presentation/themes/forest-ink/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/forest-ink/tokens.css +0 -68
- package/template/.hermes/skills/web-video-presentation/themes/indigo-porcelain/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/indigo-porcelain/tokens.css +0 -62
- package/template/.hermes/skills/web-video-presentation/themes/kraft-paper/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/kraft-paper/tokens.css +0 -67
- package/template/.hermes/skills/web-video-presentation/themes/midnight-press/theme.json +0 -26
- package/template/.hermes/skills/web-video-presentation/themes/midnight-press/tokens.css +0 -56
- package/template/.hermes/skills/web-video-presentation/themes/monochrome-print/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/monochrome-print/tokens.css +0 -60
- package/template/.hermes/skills/web-video-presentation/themes/neon-cyber/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/neon-cyber/tokens.css +0 -75
- package/template/.hermes/skills/web-video-presentation/themes/newsroom/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/newsroom/tokens.css +0 -63
- package/template/.hermes/skills/web-video-presentation/themes/paper-press/theme.json +0 -27
- package/template/.hermes/skills/web-video-presentation/themes/paper-press/tokens.css +0 -65
- package/template/.hermes/skills/web-video-presentation/themes/pastel-dream/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/pastel-dream/tokens.css +0 -67
- package/template/.hermes/skills/web-video-presentation/themes/split-canvas/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/split-canvas/tokens.css +0 -70
- package/template/.hermes/skills/web-video-presentation/themes/sunset-zine/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/sunset-zine/tokens.css +0 -65
- package/template/.hermes/skills/web-video-presentation/themes/swiss-ikb/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/swiss-ikb/tokens.css +0 -77
- package/template/.hermes/skills/web-video-presentation/themes/terminal-green/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/terminal-green/tokens.css +0 -73
- package/template/.hermes/skills/web-video-presentation/themes/vintage-editorial/theme.json +0 -28
- package/template/.hermes/skills/web-video-presentation/themes/vintage-editorial/tokens.css +0 -66
- package/template/.hermes/skills/web-video-presentation/themes/warm-keynote/theme.json +0 -27
- package/template/.hermes/skills/web-video-presentation/themes/warm-keynote/tokens.css +0 -66
- package/template/.hermes/skills/wireframe-prototype/SKILL.md +0 -56
- package/template/.hermes/skills/wireframe-prototype/agents/openai.yaml +0 -4
- package/template/.hermes/skills/wizard/SKILL.md +0 -44
- package/template/.hermes/skills/wizard/agents/openai.yaml +0 -3
- package/template/.hermes/skills/wizard/template.sh +0 -204
- package/template/.hermes/skills/writing-skills/SKILL.md +0 -689
- package/template/.hermes/skills/writing-skills/anthropic-best-practices.md +0 -1150
- package/template/.hermes/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/template/.hermes/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/template/.hermes/skills/writing-skills/persuasion-principles.md +0 -187
- package/template/.hermes/skills/writing-skills/render-graphs.js +0 -168
- package/template/.hermes/skills/writing-skills/testing-skills-with-subagents.md +0 -384
- package/template/.pi/skills/batch-grill-me/SKILL.md +0 -15
- package/template/.pi/skills/batch-grill-me/agents/openai.yaml +0 -5
- package/template/.pi/skills/claude-handoff/SKILL.md +0 -18
- package/template/.pi/skills/claude-handoff/agents/openai.yaml +0 -5
- package/template/.pi/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/.pi/skills/git-guardrails-claude-code/agents/openai.yaml +0 -3
- package/template/.pi/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/.pi/skills/web-design-engineer/README.md +0 -461
- package/template/.pi/skills/web-design-engineer/README.zh-CN.md +0 -461
- package/template/.pi/skills/web-design-engineer/SKILL.md +0 -493
- package/template/.pi/skills/web-design-engineer/manifest.json +0 -15
- package/template/.pi/skills/web-design-engineer/references/advanced-patterns.md +0 -521
- package/template/.pi/skills/web-design-engineer/references/critique-guide.md +0 -226
- package/template/.pi/skills/web-design-engineer/references/design-directions.md +0 -188
- package/template/.pi/skills/web-design-engineer/references/style-recipes/INDEX.md +0 -145
- package/template/.pi/skills/web-design-engineer/references/style-recipes/active-theory.md +0 -49
- package/template/.pi/skills/web-design-engineer/references/style-recipes/aesop.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/apple-hig.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/are-na.md +0 -55
- package/template/.pi/skills/web-design-engineer/references/style-recipes/balenciaga-post-2017.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/bloomberg-businessweek-turley.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/bloomberg-terminal.md +0 -56
- package/template/.pi/skills/web-design-engineer/references/style-recipes/dieter-rams-braun.md +0 -50
- package/template/.pi/skills/web-design-engineer/references/style-recipes/field-io.md +0 -50
- package/template/.pi/skills/web-design-engineer/references/style-recipes/headspace-meditation.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/linear.md +0 -61
- package/template/.pi/skills/web-design-engineer/references/style-recipes/mailchimp-freddie.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/mid-century-modern.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/monocle-magazine.md +0 -53
- package/template/.pi/skills/web-design-engineer/references/style-recipes/muji-kenya-hara.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/notion-pre-ai.md +0 -53
- package/template/.pi/skills/web-design-engineer/references/style-recipes/nyt-the-daily.md +0 -54
- package/template/.pi/skills/web-design-engineer/references/style-recipes/pentagram.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/raycast.md +0 -54
- package/template/.pi/skills/web-design-engineer/references/style-recipes/resn-storytelling.md +0 -49
- package/template/.pi/skills/web-design-engineer/references/style-recipes/stripe-press.md +0 -54
- package/template/.pi/skills/web-design-engineer/references/style-recipes/tufte-dataink.md +0 -52
- package/template/.pi/skills/web-design-engineer/references/style-recipes/vercel-mesh.md +0 -56
- package/template/.pi/skills/web-design-engineer/references/style-recipes/vignelli-swiss-helvetica.md +0 -50
- package/template/.pi/skills/web-design-engineer/references/style-recipes/y2k-retrofuturism.md +0 -54
- package/template/.pi/skills/web-video-presentation/README.md +0 -322
- package/template/.pi/skills/web-video-presentation/README.zh-CN.md +0 -322
- package/template/.pi/skills/web-video-presentation/SKILL.md +0 -451
- package/template/.pi/skills/web-video-presentation/manifest.json +0 -15
- package/template/.pi/skills/web-video-presentation/references/AUDIO.md +0 -276
- package/template/.pi/skills/web-video-presentation/references/CHAPTER-CRAFT.md +0 -224
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/README.md +0 -107
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/case-tech-review/README.md +0 -56
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/case-tech-review/outline-snippet.md +0 -71
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/hook-chapter/README.md +0 -86
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.css +0 -197
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.tsx +0 -125
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/list-reveal/README.md +0 -91
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.css +0 -137
- package/template/.pi/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.tsx +0 -103
- package/template/.pi/skills/web-video-presentation/references/OUTLINE-FORMAT.md +0 -203
- package/template/.pi/skills/web-video-presentation/references/RECORDING.md +0 -77
- package/template/.pi/skills/web-video-presentation/references/SCRIPT-STYLE.md +0 -409
- package/template/.pi/skills/web-video-presentation/references/THEMES.md +0 -351
- package/template/.pi/skills/web-video-presentation/scripts/scaffold.sh +0 -245
- package/template/.pi/skills/web-video-presentation/templates/index.html +0 -12
- package/template/.pi/skills/web-video-presentation/templates/scripts/extract-narrations.ts +0 -137
- package/template/.pi/skills/web-video-presentation/templates/scripts/synthesize-audio.sh +0 -145
- package/template/.pi/skills/web-video-presentation/templates/scripts/tts-providers/README.md +0 -324
- package/template/.pi/skills/web-video-presentation/templates/scripts/tts-providers/minimax.sh +0 -50
- package/template/.pi/skills/web-video-presentation/templates/scripts/tts-providers/openai.sh +0 -70
- package/template/.pi/skills/web-video-presentation/templates/src/App.tsx +0 -73
- package/template/.pi/skills/web-video-presentation/templates/src/chapters/01-example/Example.css +0 -80
- package/template/.pi/skills/web-video-presentation/templates/src/chapters/01-example/Example.tsx +0 -104
- package/template/.pi/skills/web-video-presentation/templates/src/chapters/01-example/narrations.ts +0 -28
- package/template/.pi/skills/web-video-presentation/templates/src/components/AutoStartGate.css +0 -55
- package/template/.pi/skills/web-video-presentation/templates/src/components/AutoStartGate.tsx +0 -36
- package/template/.pi/skills/web-video-presentation/templates/src/components/AutoToggle.css +0 -53
- package/template/.pi/skills/web-video-presentation/templates/src/components/AutoToggle.tsx +0 -36
- package/template/.pi/skills/web-video-presentation/templates/src/components/MaskReveal.tsx +0 -35
- package/template/.pi/skills/web-video-presentation/templates/src/components/ProgressBar.css +0 -122
- package/template/.pi/skills/web-video-presentation/templates/src/components/ProgressBar.tsx +0 -109
- package/template/.pi/skills/web-video-presentation/templates/src/components/Stage.tsx +0 -48
- package/template/.pi/skills/web-video-presentation/templates/src/hooks/useAudioPlayer.ts +0 -112
- package/template/.pi/skills/web-video-presentation/templates/src/hooks/useAutoMode.ts +0 -66
- package/template/.pi/skills/web-video-presentation/templates/src/hooks/useStageScale.ts +0 -28
- package/template/.pi/skills/web-video-presentation/templates/src/hooks/useStepper.ts +0 -174
- package/template/.pi/skills/web-video-presentation/templates/src/main.tsx +0 -9
- package/template/.pi/skills/web-video-presentation/templates/src/registry/chapters.ts +0 -23
- package/template/.pi/skills/web-video-presentation/templates/src/registry/types.ts +0 -25
- package/template/.pi/skills/web-video-presentation/templates/src/styles/animations.css +0 -63
- package/template/.pi/skills/web-video-presentation/templates/src/styles/base.css +0 -415
- package/template/.pi/skills/web-video-presentation/templates/src/styles/fonts.css +0 -20
- package/template/.pi/skills/web-video-presentation/templates/vite.config.ts +0 -10
- package/template/.pi/skills/web-video-presentation/themes/bauhaus-bold/theme.json +0 -27
- package/template/.pi/skills/web-video-presentation/themes/bauhaus-bold/tokens.css +0 -60
- package/template/.pi/skills/web-video-presentation/themes/blueprint/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/blueprint/tokens.css +0 -65
- package/template/.pi/skills/web-video-presentation/themes/bold-signal/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/bold-signal/tokens.css +0 -71
- package/template/.pi/skills/web-video-presentation/themes/chalk-garden/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/chalk-garden/tokens.css +0 -64
- package/template/.pi/skills/web-video-presentation/themes/creative-voltage/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/creative-voltage/tokens.css +0 -68
- package/template/.pi/skills/web-video-presentation/themes/dark-botanical/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/dark-botanical/tokens.css +0 -68
- package/template/.pi/skills/web-video-presentation/themes/dune/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/dune/tokens.css +0 -62
- package/template/.pi/skills/web-video-presentation/themes/electric-studio/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/electric-studio/tokens.css +0 -68
- package/template/.pi/skills/web-video-presentation/themes/forest-ink/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/forest-ink/tokens.css +0 -68
- package/template/.pi/skills/web-video-presentation/themes/indigo-porcelain/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/indigo-porcelain/tokens.css +0 -62
- package/template/.pi/skills/web-video-presentation/themes/kraft-paper/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/kraft-paper/tokens.css +0 -67
- package/template/.pi/skills/web-video-presentation/themes/midnight-press/theme.json +0 -26
- package/template/.pi/skills/web-video-presentation/themes/midnight-press/tokens.css +0 -56
- package/template/.pi/skills/web-video-presentation/themes/monochrome-print/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/monochrome-print/tokens.css +0 -60
- package/template/.pi/skills/web-video-presentation/themes/neon-cyber/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/neon-cyber/tokens.css +0 -75
- package/template/.pi/skills/web-video-presentation/themes/newsroom/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/newsroom/tokens.css +0 -63
- package/template/.pi/skills/web-video-presentation/themes/paper-press/theme.json +0 -27
- package/template/.pi/skills/web-video-presentation/themes/paper-press/tokens.css +0 -65
- package/template/.pi/skills/web-video-presentation/themes/pastel-dream/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/pastel-dream/tokens.css +0 -67
- package/template/.pi/skills/web-video-presentation/themes/split-canvas/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/split-canvas/tokens.css +0 -70
- package/template/.pi/skills/web-video-presentation/themes/sunset-zine/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/sunset-zine/tokens.css +0 -65
- package/template/.pi/skills/web-video-presentation/themes/swiss-ikb/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/swiss-ikb/tokens.css +0 -77
- package/template/.pi/skills/web-video-presentation/themes/terminal-green/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/terminal-green/tokens.css +0 -73
- package/template/.pi/skills/web-video-presentation/themes/vintage-editorial/theme.json +0 -28
- package/template/.pi/skills/web-video-presentation/themes/vintage-editorial/tokens.css +0 -66
- package/template/.pi/skills/web-video-presentation/themes/warm-keynote/theme.json +0 -27
- package/template/.pi/skills/web-video-presentation/themes/warm-keynote/tokens.css +0 -66
- package/template/.pi/skills/wireframe-prototype/SKILL.md +0 -56
- package/template/.pi/skills/wireframe-prototype/agents/openai.yaml +0 -4
- package/template/.pi/skills/wizard/SKILL.md +0 -44
- package/template/.pi/skills/wizard/agents/openai.yaml +0 -3
- package/template/.pi/skills/wizard/template.sh +0 -204
- package/template/.pi/skills/writing-skills/SKILL.md +0 -689
- package/template/.pi/skills/writing-skills/anthropic-best-practices.md +0 -1150
- package/template/.pi/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/template/.pi/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/template/.pi/skills/writing-skills/persuasion-principles.md +0 -187
- package/template/.pi/skills/writing-skills/render-graphs.js +0 -168
- package/template/.pi/skills/writing-skills/testing-skills-with-subagents.md +0 -384
- package/template/.qoder/skills/batch-grill-me/SKILL.md +0 -15
- package/template/.qoder/skills/batch-grill-me/agents/openai.yaml +0 -5
- package/template/.qoder/skills/claude-handoff/SKILL.md +0 -18
- package/template/.qoder/skills/claude-handoff/agents/openai.yaml +0 -5
- package/template/.qoder/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/.qoder/skills/git-guardrails-claude-code/agents/openai.yaml +0 -3
- package/template/.qoder/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/.qoder/skills/web-design-engineer/README.md +0 -461
- package/template/.qoder/skills/web-design-engineer/README.zh-CN.md +0 -461
- package/template/.qoder/skills/web-design-engineer/SKILL.md +0 -493
- package/template/.qoder/skills/web-design-engineer/manifest.json +0 -15
- package/template/.qoder/skills/web-design-engineer/references/advanced-patterns.md +0 -521
- package/template/.qoder/skills/web-design-engineer/references/critique-guide.md +0 -226
- package/template/.qoder/skills/web-design-engineer/references/design-directions.md +0 -188
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/INDEX.md +0 -145
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/active-theory.md +0 -49
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/aesop.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/apple-hig.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/are-na.md +0 -55
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/balenciaga-post-2017.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/bloomberg-businessweek-turley.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/bloomberg-terminal.md +0 -56
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/dieter-rams-braun.md +0 -50
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/field-io.md +0 -50
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/headspace-meditation.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/linear.md +0 -61
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/mailchimp-freddie.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/mid-century-modern.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/monocle-magazine.md +0 -53
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/muji-kenya-hara.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/notion-pre-ai.md +0 -53
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/nyt-the-daily.md +0 -54
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/pentagram.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/raycast.md +0 -54
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/resn-storytelling.md +0 -49
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/stripe-press.md +0 -54
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/tufte-dataink.md +0 -52
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/vercel-mesh.md +0 -56
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/vignelli-swiss-helvetica.md +0 -50
- package/template/.qoder/skills/web-design-engineer/references/style-recipes/y2k-retrofuturism.md +0 -54
- package/template/.qoder/skills/web-video-presentation/README.md +0 -322
- package/template/.qoder/skills/web-video-presentation/README.zh-CN.md +0 -322
- package/template/.qoder/skills/web-video-presentation/SKILL.md +0 -451
- package/template/.qoder/skills/web-video-presentation/manifest.json +0 -15
- package/template/.qoder/skills/web-video-presentation/references/AUDIO.md +0 -276
- package/template/.qoder/skills/web-video-presentation/references/CHAPTER-CRAFT.md +0 -224
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/README.md +0 -107
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/case-tech-review/README.md +0 -56
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/case-tech-review/outline-snippet.md +0 -71
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/hook-chapter/README.md +0 -86
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.css +0 -197
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.tsx +0 -125
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/list-reveal/README.md +0 -91
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.css +0 -137
- package/template/.qoder/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.tsx +0 -103
- package/template/.qoder/skills/web-video-presentation/references/OUTLINE-FORMAT.md +0 -203
- package/template/.qoder/skills/web-video-presentation/references/RECORDING.md +0 -77
- package/template/.qoder/skills/web-video-presentation/references/SCRIPT-STYLE.md +0 -409
- package/template/.qoder/skills/web-video-presentation/references/THEMES.md +0 -351
- package/template/.qoder/skills/web-video-presentation/scripts/scaffold.sh +0 -245
- package/template/.qoder/skills/web-video-presentation/templates/index.html +0 -12
- package/template/.qoder/skills/web-video-presentation/templates/scripts/extract-narrations.ts +0 -137
- package/template/.qoder/skills/web-video-presentation/templates/scripts/synthesize-audio.sh +0 -145
- package/template/.qoder/skills/web-video-presentation/templates/scripts/tts-providers/README.md +0 -324
- package/template/.qoder/skills/web-video-presentation/templates/scripts/tts-providers/minimax.sh +0 -50
- package/template/.qoder/skills/web-video-presentation/templates/scripts/tts-providers/openai.sh +0 -70
- package/template/.qoder/skills/web-video-presentation/templates/src/App.tsx +0 -73
- package/template/.qoder/skills/web-video-presentation/templates/src/chapters/01-example/Example.css +0 -80
- package/template/.qoder/skills/web-video-presentation/templates/src/chapters/01-example/Example.tsx +0 -104
- package/template/.qoder/skills/web-video-presentation/templates/src/chapters/01-example/narrations.ts +0 -28
- package/template/.qoder/skills/web-video-presentation/templates/src/components/AutoStartGate.css +0 -55
- package/template/.qoder/skills/web-video-presentation/templates/src/components/AutoStartGate.tsx +0 -36
- package/template/.qoder/skills/web-video-presentation/templates/src/components/AutoToggle.css +0 -53
- package/template/.qoder/skills/web-video-presentation/templates/src/components/AutoToggle.tsx +0 -36
- package/template/.qoder/skills/web-video-presentation/templates/src/components/MaskReveal.tsx +0 -35
- package/template/.qoder/skills/web-video-presentation/templates/src/components/ProgressBar.css +0 -122
- package/template/.qoder/skills/web-video-presentation/templates/src/components/ProgressBar.tsx +0 -109
- package/template/.qoder/skills/web-video-presentation/templates/src/components/Stage.tsx +0 -48
- package/template/.qoder/skills/web-video-presentation/templates/src/hooks/useAudioPlayer.ts +0 -112
- package/template/.qoder/skills/web-video-presentation/templates/src/hooks/useAutoMode.ts +0 -66
- package/template/.qoder/skills/web-video-presentation/templates/src/hooks/useStageScale.ts +0 -28
- package/template/.qoder/skills/web-video-presentation/templates/src/hooks/useStepper.ts +0 -174
- package/template/.qoder/skills/web-video-presentation/templates/src/main.tsx +0 -9
- package/template/.qoder/skills/web-video-presentation/templates/src/registry/chapters.ts +0 -23
- package/template/.qoder/skills/web-video-presentation/templates/src/registry/types.ts +0 -25
- package/template/.qoder/skills/web-video-presentation/templates/src/styles/animations.css +0 -63
- package/template/.qoder/skills/web-video-presentation/templates/src/styles/base.css +0 -415
- package/template/.qoder/skills/web-video-presentation/templates/src/styles/fonts.css +0 -20
- package/template/.qoder/skills/web-video-presentation/templates/vite.config.ts +0 -10
- package/template/.qoder/skills/web-video-presentation/themes/bauhaus-bold/theme.json +0 -27
- package/template/.qoder/skills/web-video-presentation/themes/bauhaus-bold/tokens.css +0 -60
- package/template/.qoder/skills/web-video-presentation/themes/blueprint/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/blueprint/tokens.css +0 -65
- package/template/.qoder/skills/web-video-presentation/themes/bold-signal/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/bold-signal/tokens.css +0 -71
- package/template/.qoder/skills/web-video-presentation/themes/chalk-garden/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/chalk-garden/tokens.css +0 -64
- package/template/.qoder/skills/web-video-presentation/themes/creative-voltage/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/creative-voltage/tokens.css +0 -68
- package/template/.qoder/skills/web-video-presentation/themes/dark-botanical/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/dark-botanical/tokens.css +0 -68
- package/template/.qoder/skills/web-video-presentation/themes/dune/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/dune/tokens.css +0 -62
- package/template/.qoder/skills/web-video-presentation/themes/electric-studio/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/electric-studio/tokens.css +0 -68
- package/template/.qoder/skills/web-video-presentation/themes/forest-ink/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/forest-ink/tokens.css +0 -68
- package/template/.qoder/skills/web-video-presentation/themes/indigo-porcelain/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/indigo-porcelain/tokens.css +0 -62
- package/template/.qoder/skills/web-video-presentation/themes/kraft-paper/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/kraft-paper/tokens.css +0 -67
- package/template/.qoder/skills/web-video-presentation/themes/midnight-press/theme.json +0 -26
- package/template/.qoder/skills/web-video-presentation/themes/midnight-press/tokens.css +0 -56
- package/template/.qoder/skills/web-video-presentation/themes/monochrome-print/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/monochrome-print/tokens.css +0 -60
- package/template/.qoder/skills/web-video-presentation/themes/neon-cyber/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/neon-cyber/tokens.css +0 -75
- package/template/.qoder/skills/web-video-presentation/themes/newsroom/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/newsroom/tokens.css +0 -63
- package/template/.qoder/skills/web-video-presentation/themes/paper-press/theme.json +0 -27
- package/template/.qoder/skills/web-video-presentation/themes/paper-press/tokens.css +0 -65
- package/template/.qoder/skills/web-video-presentation/themes/pastel-dream/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/pastel-dream/tokens.css +0 -67
- package/template/.qoder/skills/web-video-presentation/themes/split-canvas/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/split-canvas/tokens.css +0 -70
- package/template/.qoder/skills/web-video-presentation/themes/sunset-zine/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/sunset-zine/tokens.css +0 -65
- package/template/.qoder/skills/web-video-presentation/themes/swiss-ikb/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/swiss-ikb/tokens.css +0 -77
- package/template/.qoder/skills/web-video-presentation/themes/terminal-green/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/terminal-green/tokens.css +0 -73
- package/template/.qoder/skills/web-video-presentation/themes/vintage-editorial/theme.json +0 -28
- package/template/.qoder/skills/web-video-presentation/themes/vintage-editorial/tokens.css +0 -66
- package/template/.qoder/skills/web-video-presentation/themes/warm-keynote/theme.json +0 -27
- package/template/.qoder/skills/web-video-presentation/themes/warm-keynote/tokens.css +0 -66
- package/template/.qoder/skills/wireframe-prototype/SKILL.md +0 -56
- package/template/.qoder/skills/wireframe-prototype/agents/openai.yaml +0 -4
- package/template/.qoder/skills/wizard/SKILL.md +0 -44
- package/template/.qoder/skills/wizard/agents/openai.yaml +0 -3
- package/template/.qoder/skills/wizard/template.sh +0 -204
- package/template/.qoder/skills/writing-skills/SKILL.md +0 -689
- package/template/.qoder/skills/writing-skills/anthropic-best-practices.md +0 -1150
- package/template/.qoder/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/template/.qoder/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/template/.qoder/skills/writing-skills/persuasion-principles.md +0 -187
- package/template/.qoder/skills/writing-skills/render-graphs.js +0 -168
- package/template/.qoder/skills/writing-skills/testing-skills-with-subagents.md +0 -384
- package/template/.trae/skills/batch-grill-me/SKILL.md +0 -15
- package/template/.trae/skills/batch-grill-me/agents/openai.yaml +0 -5
- package/template/.trae/skills/claude-handoff/SKILL.md +0 -18
- package/template/.trae/skills/claude-handoff/agents/openai.yaml +0 -5
- package/template/.trae/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/.trae/skills/git-guardrails-claude-code/agents/openai.yaml +0 -3
- package/template/.trae/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/.trae/skills/web-design-engineer/README.md +0 -461
- package/template/.trae/skills/web-design-engineer/README.zh-CN.md +0 -461
- package/template/.trae/skills/web-design-engineer/SKILL.md +0 -493
- package/template/.trae/skills/web-design-engineer/manifest.json +0 -15
- package/template/.trae/skills/web-design-engineer/references/advanced-patterns.md +0 -521
- package/template/.trae/skills/web-design-engineer/references/critique-guide.md +0 -226
- package/template/.trae/skills/web-design-engineer/references/design-directions.md +0 -188
- package/template/.trae/skills/web-design-engineer/references/style-recipes/INDEX.md +0 -145
- package/template/.trae/skills/web-design-engineer/references/style-recipes/active-theory.md +0 -49
- package/template/.trae/skills/web-design-engineer/references/style-recipes/aesop.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/apple-hig.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/are-na.md +0 -55
- package/template/.trae/skills/web-design-engineer/references/style-recipes/balenciaga-post-2017.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/bloomberg-businessweek-turley.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/bloomberg-terminal.md +0 -56
- package/template/.trae/skills/web-design-engineer/references/style-recipes/dieter-rams-braun.md +0 -50
- package/template/.trae/skills/web-design-engineer/references/style-recipes/field-io.md +0 -50
- package/template/.trae/skills/web-design-engineer/references/style-recipes/headspace-meditation.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/linear.md +0 -61
- package/template/.trae/skills/web-design-engineer/references/style-recipes/mailchimp-freddie.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/mid-century-modern.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/monocle-magazine.md +0 -53
- package/template/.trae/skills/web-design-engineer/references/style-recipes/muji-kenya-hara.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/notion-pre-ai.md +0 -53
- package/template/.trae/skills/web-design-engineer/references/style-recipes/nyt-the-daily.md +0 -54
- package/template/.trae/skills/web-design-engineer/references/style-recipes/pentagram.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/raycast.md +0 -54
- package/template/.trae/skills/web-design-engineer/references/style-recipes/resn-storytelling.md +0 -49
- package/template/.trae/skills/web-design-engineer/references/style-recipes/stripe-press.md +0 -54
- package/template/.trae/skills/web-design-engineer/references/style-recipes/tufte-dataink.md +0 -52
- package/template/.trae/skills/web-design-engineer/references/style-recipes/vercel-mesh.md +0 -56
- package/template/.trae/skills/web-design-engineer/references/style-recipes/vignelli-swiss-helvetica.md +0 -50
- package/template/.trae/skills/web-design-engineer/references/style-recipes/y2k-retrofuturism.md +0 -54
- package/template/.trae/skills/web-video-presentation/README.md +0 -322
- package/template/.trae/skills/web-video-presentation/README.zh-CN.md +0 -322
- package/template/.trae/skills/web-video-presentation/SKILL.md +0 -451
- package/template/.trae/skills/web-video-presentation/manifest.json +0 -15
- package/template/.trae/skills/web-video-presentation/references/AUDIO.md +0 -276
- package/template/.trae/skills/web-video-presentation/references/CHAPTER-CRAFT.md +0 -224
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/README.md +0 -107
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/case-tech-review/README.md +0 -56
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/case-tech-review/outline-snippet.md +0 -71
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/hook-chapter/README.md +0 -86
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.css +0 -197
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/hook-chapter/chapter.tsx +0 -125
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/list-reveal/README.md +0 -91
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.css +0 -137
- package/template/.trae/skills/web-video-presentation/references/EXAMPLES/list-reveal/chapter.tsx +0 -103
- package/template/.trae/skills/web-video-presentation/references/OUTLINE-FORMAT.md +0 -203
- package/template/.trae/skills/web-video-presentation/references/RECORDING.md +0 -77
- package/template/.trae/skills/web-video-presentation/references/SCRIPT-STYLE.md +0 -409
- package/template/.trae/skills/web-video-presentation/references/THEMES.md +0 -351
- package/template/.trae/skills/web-video-presentation/scripts/scaffold.sh +0 -245
- package/template/.trae/skills/web-video-presentation/templates/index.html +0 -12
- package/template/.trae/skills/web-video-presentation/templates/scripts/extract-narrations.ts +0 -137
- package/template/.trae/skills/web-video-presentation/templates/scripts/synthesize-audio.sh +0 -145
- package/template/.trae/skills/web-video-presentation/templates/scripts/tts-providers/README.md +0 -324
- package/template/.trae/skills/web-video-presentation/templates/scripts/tts-providers/minimax.sh +0 -50
- package/template/.trae/skills/web-video-presentation/templates/scripts/tts-providers/openai.sh +0 -70
- package/template/.trae/skills/web-video-presentation/templates/src/App.tsx +0 -73
- package/template/.trae/skills/web-video-presentation/templates/src/chapters/01-example/Example.css +0 -80
- package/template/.trae/skills/web-video-presentation/templates/src/chapters/01-example/Example.tsx +0 -104
- package/template/.trae/skills/web-video-presentation/templates/src/chapters/01-example/narrations.ts +0 -28
- package/template/.trae/skills/web-video-presentation/templates/src/components/AutoStartGate.css +0 -55
- package/template/.trae/skills/web-video-presentation/templates/src/components/AutoStartGate.tsx +0 -36
- package/template/.trae/skills/web-video-presentation/templates/src/components/AutoToggle.css +0 -53
- package/template/.trae/skills/web-video-presentation/templates/src/components/AutoToggle.tsx +0 -36
- package/template/.trae/skills/web-video-presentation/templates/src/components/MaskReveal.tsx +0 -35
- package/template/.trae/skills/web-video-presentation/templates/src/components/ProgressBar.css +0 -122
- package/template/.trae/skills/web-video-presentation/templates/src/components/ProgressBar.tsx +0 -109
- package/template/.trae/skills/web-video-presentation/templates/src/components/Stage.tsx +0 -48
- package/template/.trae/skills/web-video-presentation/templates/src/hooks/useAudioPlayer.ts +0 -112
- package/template/.trae/skills/web-video-presentation/templates/src/hooks/useAutoMode.ts +0 -66
- package/template/.trae/skills/web-video-presentation/templates/src/hooks/useStageScale.ts +0 -28
- package/template/.trae/skills/web-video-presentation/templates/src/hooks/useStepper.ts +0 -174
- package/template/.trae/skills/web-video-presentation/templates/src/main.tsx +0 -9
- package/template/.trae/skills/web-video-presentation/templates/src/registry/chapters.ts +0 -23
- package/template/.trae/skills/web-video-presentation/templates/src/registry/types.ts +0 -25
- package/template/.trae/skills/web-video-presentation/templates/src/styles/animations.css +0 -63
- package/template/.trae/skills/web-video-presentation/templates/src/styles/base.css +0 -415
- package/template/.trae/skills/web-video-presentation/templates/src/styles/fonts.css +0 -20
- package/template/.trae/skills/web-video-presentation/templates/vite.config.ts +0 -10
- package/template/.trae/skills/web-video-presentation/themes/bauhaus-bold/theme.json +0 -27
- package/template/.trae/skills/web-video-presentation/themes/bauhaus-bold/tokens.css +0 -60
- package/template/.trae/skills/web-video-presentation/themes/blueprint/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/blueprint/tokens.css +0 -65
- package/template/.trae/skills/web-video-presentation/themes/bold-signal/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/bold-signal/tokens.css +0 -71
- package/template/.trae/skills/web-video-presentation/themes/chalk-garden/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/chalk-garden/tokens.css +0 -64
- package/template/.trae/skills/web-video-presentation/themes/creative-voltage/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/creative-voltage/tokens.css +0 -68
- package/template/.trae/skills/web-video-presentation/themes/dark-botanical/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/dark-botanical/tokens.css +0 -68
- package/template/.trae/skills/web-video-presentation/themes/dune/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/dune/tokens.css +0 -62
- package/template/.trae/skills/web-video-presentation/themes/electric-studio/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/electric-studio/tokens.css +0 -68
- package/template/.trae/skills/web-video-presentation/themes/forest-ink/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/forest-ink/tokens.css +0 -68
- package/template/.trae/skills/web-video-presentation/themes/indigo-porcelain/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/indigo-porcelain/tokens.css +0 -62
- package/template/.trae/skills/web-video-presentation/themes/kraft-paper/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/kraft-paper/tokens.css +0 -67
- package/template/.trae/skills/web-video-presentation/themes/midnight-press/theme.json +0 -26
- package/template/.trae/skills/web-video-presentation/themes/midnight-press/tokens.css +0 -56
- package/template/.trae/skills/web-video-presentation/themes/monochrome-print/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/monochrome-print/tokens.css +0 -60
- package/template/.trae/skills/web-video-presentation/themes/neon-cyber/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/neon-cyber/tokens.css +0 -75
- package/template/.trae/skills/web-video-presentation/themes/newsroom/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/newsroom/tokens.css +0 -63
- package/template/.trae/skills/web-video-presentation/themes/paper-press/theme.json +0 -27
- package/template/.trae/skills/web-video-presentation/themes/paper-press/tokens.css +0 -65
- package/template/.trae/skills/web-video-presentation/themes/pastel-dream/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/pastel-dream/tokens.css +0 -67
- package/template/.trae/skills/web-video-presentation/themes/split-canvas/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/split-canvas/tokens.css +0 -70
- package/template/.trae/skills/web-video-presentation/themes/sunset-zine/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/sunset-zine/tokens.css +0 -65
- package/template/.trae/skills/web-video-presentation/themes/swiss-ikb/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/swiss-ikb/tokens.css +0 -77
- package/template/.trae/skills/web-video-presentation/themes/terminal-green/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/terminal-green/tokens.css +0 -73
- package/template/.trae/skills/web-video-presentation/themes/vintage-editorial/theme.json +0 -28
- package/template/.trae/skills/web-video-presentation/themes/vintage-editorial/tokens.css +0 -66
- package/template/.trae/skills/web-video-presentation/themes/warm-keynote/theme.json +0 -27
- package/template/.trae/skills/web-video-presentation/themes/warm-keynote/tokens.css +0 -66
- package/template/.trae/skills/wireframe-prototype/SKILL.md +0 -56
- package/template/.trae/skills/wireframe-prototype/agents/openai.yaml +0 -4
- package/template/.trae/skills/wizard/SKILL.md +0 -44
- package/template/.trae/skills/wizard/agents/openai.yaml +0 -3
- package/template/.trae/skills/wizard/template.sh +0 -204
- package/template/.trae/skills/writing-skills/SKILL.md +0 -689
- package/template/.trae/skills/writing-skills/anthropic-best-practices.md +0 -1150
- package/template/.trae/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/template/.trae/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/template/.trae/skills/writing-skills/persuasion-principles.md +0 -187
- package/template/.trae/skills/writing-skills/render-graphs.js +0 -168
- package/template/.trae/skills/writing-skills/testing-skills-with-subagents.md +0 -384
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { parseDocument } from "../vendor/yaml.mjs";
|
|
5
|
+
|
|
6
|
+
const LEVELS = ["L1", "L2", "L3"];
|
|
7
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
8
|
+
const INTENSITY_POLICY = path.join(root, "docs/process/maintenance-intensity.yaml");
|
|
9
|
+
|
|
10
|
+
const REQUIRED_EVIDENCE = {
|
|
11
|
+
L1: ["relevant-check"],
|
|
12
|
+
L2: ["counterexample", "fresh-verification", "focused-independent-review"],
|
|
13
|
+
L3: ["red", "green", "refactor", "pressure-scenario", "fresh-verification", "formal-independent-review"]
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const REVIEW_MODES = {
|
|
17
|
+
L1: new Set(["self-check", "human-checkpoint"]),
|
|
18
|
+
L2: new Set(["focused-independent"]),
|
|
19
|
+
L3: new Set(["formal-independent"])
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
function ensure(condition, message) {
|
|
23
|
+
if (!condition) throw new TypeError(message);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function loadTriggerLevels() {
|
|
27
|
+
const document = parseDocument(readFileSync(INTENSITY_POLICY, "utf8"), { uniqueKeys: true });
|
|
28
|
+
ensure(document.errors.length === 0, document.errors[0]?.message || "维护强度策略无法解析");
|
|
29
|
+
const policy = document.toJS({ maxAliasCount: 0 });
|
|
30
|
+
ensure(policy?.schema_version === 1 && LEVELS.includes(policy.default_level) && policy.levels && typeof policy.levels === "object", "维护强度策略 schema 无效");
|
|
31
|
+
const pairs = [];
|
|
32
|
+
for (const level of LEVELS) {
|
|
33
|
+
const triggers = policy.levels[level]?.triggers;
|
|
34
|
+
ensure(Array.isArray(triggers) && triggers.length > 0, `维护强度策略缺少 ${level} triggers`);
|
|
35
|
+
for (const trigger of triggers) {
|
|
36
|
+
ensure(typeof trigger === "string" && trigger.trim(), `${level} 包含无效 trigger`);
|
|
37
|
+
pairs.push([trigger, level]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const map = new Map(pairs);
|
|
41
|
+
ensure(map.size === pairs.length, "维护强度策略包含重复 trigger");
|
|
42
|
+
return { defaultLevel: policy.default_level, map };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const triggerLevels = loadTriggerLevels();
|
|
46
|
+
|
|
47
|
+
function levelRank(level) {
|
|
48
|
+
return LEVELS.indexOf(level);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function minimumIntensity(triggers) {
|
|
52
|
+
ensure(Array.isArray(triggers), "triggers 必须是数组");
|
|
53
|
+
if (triggers.length === 0) return triggerLevels.defaultLevel;
|
|
54
|
+
let required = "L1";
|
|
55
|
+
for (const trigger of triggers) {
|
|
56
|
+
ensure(triggerLevels.map.has(trigger), `未知 trigger: ${trigger}`);
|
|
57
|
+
const candidate = triggerLevels.map.get(trigger);
|
|
58
|
+
if (levelRank(candidate) > levelRank(required)) required = candidate;
|
|
59
|
+
}
|
|
60
|
+
return required;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function validateMaintenanceCheckpoint(data) {
|
|
64
|
+
ensure(data && typeof data === "object" && !Array.isArray(data), "checkpoint 必须是对象");
|
|
65
|
+
const exactFields = ["schema_version", "intensity", "classification_reason", "triggers", "changed_assets", "verification_evidence", "review_mode", "escalation"];
|
|
66
|
+
const unknown = Object.keys(data).filter((key) => !exactFields.includes(key));
|
|
67
|
+
ensure(unknown.length === 0, `checkpoint 包含未知字段: ${unknown.join(", ")}`);
|
|
68
|
+
ensure(data.schema_version === 1, "schema_version 必须为 1");
|
|
69
|
+
ensure(LEVELS.includes(data.intensity), "intensity 必须是 L1、L2 或 L3");
|
|
70
|
+
ensure(typeof data.classification_reason === "string" && data.classification_reason.trim(), "classification_reason 不能为空");
|
|
71
|
+
ensure(Array.isArray(data.changed_assets) && data.changed_assets.length > 0 && data.changed_assets.every((item) => typeof item === "string" && item.trim()), "changed_assets 必须包含至少一个路径或资产引用");
|
|
72
|
+
const minimum = minimumIntensity(data.triggers);
|
|
73
|
+
ensure(levelRank(data.intensity) >= levelRank(minimum), `${data.triggers.join(", ") || "默认"} 至少要求 ${minimum},不得声明为 ${data.intensity}`);
|
|
74
|
+
ensure(typeof data.escalation === "string" && data.escalation.trim(), "escalation 必须说明 none 或升级原因");
|
|
75
|
+
ensure(Array.isArray(data.verification_evidence), "verification_evidence 必须是数组");
|
|
76
|
+
const kinds = new Set();
|
|
77
|
+
for (const evidence of data.verification_evidence) {
|
|
78
|
+
ensure(evidence && typeof evidence === "object" && !Array.isArray(evidence), "verification_evidence 条目必须是对象");
|
|
79
|
+
ensure(typeof evidence.kind === "string" && evidence.kind.trim(), "verification_evidence.kind 不能为空");
|
|
80
|
+
ensure(typeof evidence.command === "string" && evidence.command.trim(), "verification_evidence.command 不能为空");
|
|
81
|
+
ensure(evidence.result === "pass", `验证证据必须是本轮实际通过结果: ${evidence.kind ?? "unknown"}`);
|
|
82
|
+
kinds.add(evidence.kind);
|
|
83
|
+
}
|
|
84
|
+
for (const required of REQUIRED_EVIDENCE[data.intensity]) ensure(kinds.has(required), `${data.intensity} 缺少 ${required} 证据`);
|
|
85
|
+
ensure(REVIEW_MODES[data.intensity].has(data.review_mode), `${data.intensity} 不允许 review_mode=${data.review_mode}`);
|
|
86
|
+
return { intensity: data.intensity, minimum_intensity: minimum };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function loadMaintenanceCheckpoint(source) {
|
|
90
|
+
const raw = source === "-" ? readFileSync(0, "utf8") : readFileSync(source, "utf8");
|
|
91
|
+
const document = parseDocument(raw, { uniqueKeys: true });
|
|
92
|
+
ensure(document.errors.length === 0, document.errors[0]?.message || "checkpoint 无法解析");
|
|
93
|
+
return document.toJS({ maxAliasCount: 0 });
|
|
94
|
+
}
|
|
@@ -2,11 +2,103 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { spawnSync } from "node:child_process";
|
|
5
|
+
import { parseDocument } from "../vendor/yaml.mjs";
|
|
5
6
|
|
|
6
7
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
7
8
|
const read = (relative) => readFileSync(path.join(root, relative), "utf8");
|
|
8
9
|
function ensure(condition, message) { if (!condition) throw new TypeError(message); }
|
|
9
10
|
function exists(relative) { return existsSync(path.join(root, relative)); }
|
|
11
|
+
function includesAll(actual, expected) { return Array.isArray(actual) && expected.every((item) => actual.includes(item)); }
|
|
12
|
+
|
|
13
|
+
function validateMattContract(data) {
|
|
14
|
+
const direct = data.entry_routing?.direct_matt_entry;
|
|
15
|
+
ensure(direct?.skill === "ask-matt" && direct?.delegate_to === "yss-product-lifecycle" && direct?.requires_valid_manifest === true && direct?.action === "navigate-only" && direct?.lifecycle_state_mutation === "forbidden" && direct?.lifecycle_artifact_write === "forbidden" && direct?.return_to_orchestrator === "required", "ask-matt 导航入口尚未形成验明身份、只导航、禁止生命周期写入并强制回交主控的完整契约");
|
|
16
|
+
const formal = data.entry_routing?.formal_user_entry;
|
|
17
|
+
ensure(includesAll(formal?.skills, ["setup-matt-pocock-skills", "grill-with-docs", "to-spec", "to-tickets", "implement"]) && formal?.action === "lifecycle-validate-and-accept" && formal?.lifecycle_artifact_write === "conditional-explicit-user-entry" && formal?.return_to_orchestrator === "required", "正式用户入口未区分于 ask-matt 导航入口");
|
|
18
|
+
const setup = data.setup_readiness;
|
|
19
|
+
ensure(setup?.missing_action === "needs-human" && setup?.requested_skill === "setup-matt-pocock-skills" && setup?.resume_route === "setup-readiness" && setup?.lifecycle_may_invoke_setup === false, "setup 缺失时未限制为显式用户入口暂停");
|
|
20
|
+
ensure(includesAll(setup?.preserves, ["lifecycle.status", "gate.status", "ticket.role"]) && setup?.legacy_artifacts_detected?.action === "migration-check" && setup.legacy_artifacts_detected.setup === "forbidden" && setup.legacy_artifacts_detected.write === "paused", "setup 暂停或旧资产迁移暂停契约不完整");
|
|
21
|
+
const grill = data.grill_exit;
|
|
22
|
+
ensure(includesAll(grill?.required, ["frontier_empty", "facts_resolved_or_routed", "decisions_confirmed", "shared_understanding_confirmed", "no_unresolved_runnable_blocker"]) && grill?.user_confirmation_required === true, "grill_exit 缺少 frontier、事实路由、决策、共同理解、用户确认或 runnable blocker 条件");
|
|
23
|
+
ensure(grill?.facts_resolved_or_routed?.technical_fact === "research" && grill.facts_resolved_or_routed.runnable_question === "handoff-prototype-handoff" && grill.facts_resolved_or_routed.external_decision === "external-input-required", "grill_exit 的事实、runnable 问题或外部决策路由不完整");
|
|
24
|
+
const git = data.git_authorization;
|
|
25
|
+
for (const action of ["commit", "push"]) {
|
|
26
|
+
const prefix = action === "commit" ? "commit" : "push";
|
|
27
|
+
const rule = git?.[action];
|
|
28
|
+
ensure(git?.natural_language_intent_is_authorization === false && rule?.requires_explicit_user_authorization === true && rule?.authorized_value === true && rule?.unauthorized_action === "checkpoint-only", `${action} 授权边界不完整`);
|
|
29
|
+
ensure(includesAll(rule?.required, [`${prefix}_authorized`, `${prefix}_scope`, `${prefix}_authorization_ref`]) && includesAll(rule?.non_empty, [`${prefix}_scope`, `${prefix}_authorization_ref`]), `${action} 授权必填字段不完整`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function validateInvocationBoundary(data) {
|
|
34
|
+
const boundary = data.matt_invocation_boundary;
|
|
35
|
+
const expectedUserInvoked = ["ask-matt", "grill-me", "grill-with-docs", "handoff", "implement", "improve-codebase-architecture", "loop-me", "setup-matt-pocock-skills", "setup-ts-deep-modules", "teach", "to-questionnaire", "to-spec", "to-tickets", "triage", "wait-what", "wayfinder", "writing-beats", "writing-fragments", "writing-shape"];
|
|
36
|
+
const expectedModelInvoked = ["code-review", "codebase-design", "diagnosing-bugs", "domain-modeling", "grilling", "migrate-to-shoehorn", "prototype", "research", "resolving-merge-conflicts", "scaffold-exercises", "setup-pre-commit", "tdd", "writing-for-agents"];
|
|
37
|
+
const expectedLifecycleModelInvoked = ["code-review", "codebase-design", "diagnosing-bugs", "domain-modeling", "grilling", "prototype", "research", "tdd"];
|
|
38
|
+
ensure(JSON.stringify(boundary?.user_invoked_skills) === JSON.stringify(expectedUserInvoked), "Matt user-invoked skills 清单不完整或已漂移");
|
|
39
|
+
ensure(JSON.stringify(boundary?.lifecycle_managed_user_entries) === JSON.stringify(["setup-matt-pocock-skills", "grill-with-docs", "to-spec", "to-tickets", "implement"]), "生命周期管理的显式用户入口清单不完整");
|
|
40
|
+
ensure(boundary?.lifecycle_may_invoke_user_invoked === false && boundary?.formal_artifact_owner === "explicit-user-entry", "生命周期仍可能自动调用 user-invoked skill 或产出其正式资产");
|
|
41
|
+
ensure(JSON.stringify(boundary?.model_invoked_skills) === JSON.stringify(expectedModelInvoked) && JSON.stringify(boundary?.lifecycle_allowed_model_invoked_skills) === JSON.stringify(expectedLifecycleModelInvoked) && boundary?.continuous_orchestration === "compatibility-prepare-and-validate-only", "Matt invocation inventory 或生命周期 model-invoked 白名单不完整");
|
|
42
|
+
ensure(JSON.stringify(data.skill_source_contract?.source_revisions_required) === JSON.stringify(["mattpocock/skills"]) && data.skill_source_contract?.adaptation_ref_required_when_effective_diff === true && data.skill_source_contract?.retired_shared_skills?.includes("batch-grill-me"), "上游来源或退役 skill 供应链契约不完整");
|
|
43
|
+
validateInvocationMetadata(boundary, (skill) => read(`.agents/skills/${skill}/SKILL.md`));
|
|
44
|
+
const setup = data.setup_readiness;
|
|
45
|
+
ensure(setup?.missing_action === "needs-human" && setup?.requested_skill === "setup-matt-pocock-skills" && setup?.resume_route === "setup-readiness" && setup?.preserves?.includes("lifecycle.status"), "readiness=missing 未形成显式用户 setup 的结构化暂停");
|
|
46
|
+
const result = data.workflow_execution_result;
|
|
47
|
+
ensure(data.matt_skill_result?.status === "compatibility-read-only" && data.matt_skill_result?.may_influence_routing === false && data.matt_skill_result?.normalize_to === "workflow-execution-result-v1", "旧 Matt Skill Result 未限制为只读兼容 adapter");
|
|
48
|
+
ensure(result?.canonical_output_schema === "workflow-execution-result-v1" && JSON.stringify(result?.accepted_input_schemas) === JSON.stringify(["workflow-execution-result-v1"]) && result?.legacy?.["matt-skill-result-v1"]?.status === "compatibility-read-only" && result.legacy["matt-skill-result-v1"].may_influence_routing === false && result.legacy["matt-skill-result-v1"].normalize_to === "workflow-execution-result-v1", "Workflow Execution Result 未将旧 Matt Skill Result 限制为只读兼容");
|
|
49
|
+
ensure(includesAll(result?.required, ["result_schema", "work_unit", "workflow_reference", "result", "evidence_refs", "changed_artifacts", "new_impacts", "stale_candidates", "next_route", "blocking_signals"]) && includesAll(result?.result_values, ["completed", "blocked", "needs-human", "failed"]) && includesAll(result?.blocking_signals, ["drift", "new_impacts", "violation", "missing_evidence", "stale_candidates"]) && includesAll(result?.completed_requires_empty, ["new_impacts", "stale_candidates"]) && includesAll(result?.completed_requires_non_empty, ["evidence_refs"]) && result?.completed_requires_readable_evidence_refs === true && result?.evidence_ref_validation === "readable-or-resolvable" && result?.completed_requires_no_blocking_signals === true && includesAll(result?.workflow_reference?.required, ["source", "skill", "invocation_mode"]), "Workflow Execution Result 的完成态证据、阻断信号或 workflow_reference 契约不完整");
|
|
50
|
+
const native = data.lifecycle_native_entries;
|
|
51
|
+
ensure(native?.default_entry === "yss-product-lifecycle" && native?.formal_artifact_owner === "yss-product-lifecycle", "生命周期原生入口未持有默认正式资产所有权");
|
|
52
|
+
ensure(JSON.stringify(native?.user_confirmation_required_at) === JSON.stringify(["spec-baseline", "prototype-confirmation", "openapi-freeze", "merge-or-release"]), "生命周期人工门禁集合已漂移");
|
|
53
|
+
const routes = data.work_unit_routes;
|
|
54
|
+
ensure(routes?.["work-unit.discovery-requirements"]?.skills?.includes("grilling") && routes?.["work-unit.discovery-requirements"]?.skills?.includes("domain-modeling"), "需求分析工作单元缺少 grilling/domain-modeling");
|
|
55
|
+
ensure(routes?.["work-unit.discovery-opportunity"]?.route_by?.market_or_competitor_fact === "competitive-intelligence" && routes["work-unit.discovery-opportunity"].route_by.technical_or_standard_fact === "research", "机会调研事实路由不准确");
|
|
56
|
+
ensure(routes?.["work-unit.slice-implementation"]?.skills?.includes("tdd") && routes?.["work-unit.slice-implementation"]?.skills?.includes("yss-ui"), "原生实现工作单元缺少 TDD 或 UI 路由");
|
|
57
|
+
ensure(routes?.["work-unit.frontend-implementation-verification"]?.skills?.includes("code-review") && routes?.["work-unit.frontend-implementation-verification"]?.applies_when === "ui_impact", "前端还原验证未绑定 UI fidelity 审查轴");
|
|
58
|
+
for (const id of ["work-unit.spec-synthesis", "work-unit.ticket-decomposition", "work-unit.slice-implementation"]) {
|
|
59
|
+
ensure(routes?.[id]?.native?.source === "yss-product-lifecycle" && routes[id].compatibility?.source === "mattpocock/skills" && routes[id].compatibility.formal_artifact_owner === "explicit-user-entry", `${id} 未分离原生执行定义与 Matt 兼容输入`);
|
|
60
|
+
}
|
|
61
|
+
for (const route of Object.values(routes ?? {})) {
|
|
62
|
+
for (const skill of route.skills ?? []) ensure(!boundary.user_invoked_skills.includes(skill), `工作单元不能自动调用 user-invoked skill: ${skill}`);
|
|
63
|
+
for (const skill of route.skills ?? []) if (boundary.model_invoked_skills.includes(skill)) ensure(boundary.lifecycle_allowed_model_invoked_skills.includes(skill), `工作单元调用了未进入生命周期白名单的 model-invoked skill: ${skill}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function validateWorkflowExecutionResult(payload, contract, workUnitRoutes) {
|
|
68
|
+
for (const field of contract.required) ensure(Object.hasOwn(payload, field), `Workflow Execution Result 缺少 ${field}`);
|
|
69
|
+
ensure(contract.result_values.includes(payload.result), "Workflow Execution Result result 无效");
|
|
70
|
+
for (const field of contract.workflow_reference.required) ensure(typeof payload.workflow_reference?.[field] === "string" && payload.workflow_reference[field].trim(), `workflow_reference.${field} 无效`);
|
|
71
|
+
const workUnit = workUnitRoutes?.[payload.work_unit];
|
|
72
|
+
ensure(workUnit, `未知 Workflow Execution Result work_unit: ${payload.work_unit}`);
|
|
73
|
+
const accepted = [workUnit.native, workUnit.compatibility].filter(Boolean);
|
|
74
|
+
ensure(contract.workflow_reference.allowed_sources.includes(payload.workflow_reference.source) && accepted.some((route) => route.source === payload.workflow_reference.source && route.skill === payload.workflow_reference.skill && route.invocation_mode === payload.workflow_reference.invocation_mode), "Workflow Execution Result workflow_reference 与 work_unit route 不匹配");
|
|
75
|
+
if (payload.result !== "completed") return;
|
|
76
|
+
for (const field of contract.completed_requires_empty) ensure(Array.isArray(payload[field]) && payload[field].length === 0, `completed 的 ${field} 必须为空`);
|
|
77
|
+
for (const field of contract.completed_requires_non_empty) ensure(Array.isArray(payload[field]) && payload[field].length > 0, `completed 的 ${field} 不能为空`);
|
|
78
|
+
if (contract.completed_requires_readable_evidence_refs) {
|
|
79
|
+
for (const reference of payload.evidence_refs) ensure(typeof reference === "string" && reference.trim() && exists(reference), `completed 证据不可读取: ${reference}`);
|
|
80
|
+
}
|
|
81
|
+
if (contract.completed_requires_no_blocking_signals) ensure(Array.isArray(payload.blocking_signals) && payload.blocking_signals.length === 0, "completed 不得携带 blocking_signals");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function validateInvocationMetadata(boundary, skillContents) {
|
|
85
|
+
for (const skill of boundary.user_invoked_skills) ensure(skillContents(skill).includes("disable-model-invocation: true"), `${skill} 未声明为 user-invoked skill`);
|
|
86
|
+
for (const skill of boundary.lifecycle_managed_user_entries) ensure(skillContents(skill).includes("disable-model-invocation: true"), `${skill} 未声明为生命周期管理的 user-invoked skill`);
|
|
87
|
+
for (const skill of boundary.model_invoked_skills) ensure(!skillContents(skill).includes("disable-model-invocation: true"), `${skill} 不应出现在 model-invoked 白名单`);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function validateMattProse(skill, adapter) {
|
|
91
|
+
ensure(skill.includes("不得写生命周期资产或改变门禁/Ticket 状态") && skill.includes("任何写入前回交本编排器"), "主技能缺少 direct Matt 只导航并回交的说明");
|
|
92
|
+
ensure(adapter.includes("仅发现旧路径资产") && adapter.includes("不得调用 `setup-matt-pocock-skills`"), "适配器缺少 setup 旧资产迁移或显式用户入口条件");
|
|
93
|
+
ensure(adapter.includes("frontier 为空") && adapter.includes("双方共同理解已确认"), "适配器缺少 grill_exit 的 frontier 或共同理解条件");
|
|
94
|
+
ensure(skill.includes("自然语言意向不构成上述结构化 Git 授权") && adapter.includes("本身不是结构化授权"), "主技能或适配器缺少自然语言 Git 意向不是授权的说明");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function validateInvocationProse(skill, adapter, orchestration) {
|
|
98
|
+
ensure(skill.includes("不得自动调用它们或代替其创建正式资产") && skill.includes("Workflow Execution Result"), "主技能未限制 user-invoked 调用或未采用新结果协议");
|
|
99
|
+
ensure(adapter.includes("workflow reference 不表示调用") && adapter.includes("正式 Spec、Ticket 或实现资产仍只能由对应显式用户入口创建"), "适配器未限制 workflow reference 的正式资产所有权");
|
|
100
|
+
ensure(orchestration.includes("只实际调用允许的 model-invoked skill") && orchestration.includes("用户显式启动"), "编排协议未区分 model-invoked 原语和显式用户入口");
|
|
101
|
+
}
|
|
10
102
|
|
|
11
103
|
const profiles = {
|
|
12
104
|
lifecycle: {
|
|
@@ -16,8 +108,8 @@ const profiles = {
|
|
|
16
108
|
},
|
|
17
109
|
matt: {
|
|
18
110
|
message: "Matt/YSS 集成压力场景验证通过",
|
|
19
|
-
files: [".agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md", ".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml"],
|
|
20
|
-
markers: [[".agents/skills/yss-product-lifecycle/SKILL.md", "
|
|
111
|
+
files: [".agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md", ".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml", "docs/process/templates/lifecycle-checkpoint-template.yaml", "docs/process/templates/frontend-implementation-plan-template.yaml", "docs/process/templates/frontend-implementation-verification-template.yaml"],
|
|
112
|
+
markers: [[".agents/skills/yss-product-lifecycle/SKILL.md", "Workflow Execution Result"]]
|
|
21
113
|
},
|
|
22
114
|
prototype: {
|
|
23
115
|
message: "原型到后端脚手架及后续 YSS 代码生成压力场景验证通过",
|
|
@@ -66,6 +158,84 @@ export function runScenario(name) {
|
|
|
66
158
|
if (name === "lifecycle") {
|
|
67
159
|
const result = spawnSync("scripts/verify-lifecycle-registry", [], { cwd: root, encoding: "utf8" });
|
|
68
160
|
ensure(result.status === 0, result.stderr || result.stdout);
|
|
161
|
+
const registry = parseDocument(read("docs/process/lifecycle-registry.yaml"), { uniqueKeys: true }).toJS({ maxAliasCount: 0 });
|
|
162
|
+
const releaseGate = registry.gates.find((gate) => gate.id === "gate.release-ready");
|
|
163
|
+
ensure(releaseGate?.requires_gates?.includes("gate.frontend-implementation-verified"), "发布就绪未依赖前端实现还原门禁");
|
|
164
|
+
const contract = parseDocument(read(".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml"), { uniqueKeys: true }).toJS({ maxAliasCount: 0 });
|
|
165
|
+
ensure(contract.release_readiness?.conditional?.ui_impact?.includes("gate.frontend-implementation-verified") && contract.frontend_implementation_plan?.acceptance?.includes("no_template_placeholders"), "发布公式或前端计划实质校验不完整");
|
|
166
|
+
const templateRejected = spawnSync("scripts/verify-frontend-implementation-evidence", ["docs/process/templates/frontend-implementation-plan-template.yaml"], { cwd: root, encoding: "utf8" });
|
|
167
|
+
ensure(templateRejected.status !== 0 && templateRejected.stderr.includes("template: false"), "前端实现计划占位模板可冒充正式批准证据");
|
|
168
|
+
}
|
|
169
|
+
if (name === "matt") {
|
|
170
|
+
const contract = parseDocument(read(".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml"), { uniqueKeys: true });
|
|
171
|
+
ensure(contract.errors.length === 0, contract.errors[0]?.message || "生命周期编排契约无法解析");
|
|
172
|
+
const data = contract.toJS({ maxAliasCount: 0 });
|
|
173
|
+
validateMattContract(data);
|
|
174
|
+
validateInvocationBoundary(data);
|
|
175
|
+
const validResult = {
|
|
176
|
+
result_schema: "workflow-execution-result-v1",
|
|
177
|
+
work_unit: "work-unit.spec-synthesis",
|
|
178
|
+
workflow_reference: { source: "yss-product-lifecycle", skill: "yss-product-lifecycle", invocation_mode: "model-invoked" },
|
|
179
|
+
result: "completed",
|
|
180
|
+
evidence_refs: ["docs/process/lifecycle-registry.yaml"],
|
|
181
|
+
changed_artifacts: [],
|
|
182
|
+
new_impacts: [],
|
|
183
|
+
stale_candidates: [],
|
|
184
|
+
next_route: "work-unit.ticket-decomposition",
|
|
185
|
+
blocking_signals: []
|
|
186
|
+
};
|
|
187
|
+
validateWorkflowExecutionResult(validResult, data.workflow_execution_result, data.work_unit_routes);
|
|
188
|
+
const compatibleResult = structuredClone(validResult);
|
|
189
|
+
compatibleResult.workflow_reference = { source: "mattpocock/skills", skill: "to-spec", invocation_mode: "reference" };
|
|
190
|
+
validateWorkflowExecutionResult(compatibleResult, data.workflow_execution_result, data.work_unit_routes);
|
|
191
|
+
for (const mutate of [
|
|
192
|
+
(item) => { delete item.workflow_reference; },
|
|
193
|
+
(item) => { item.evidence_refs = []; },
|
|
194
|
+
(item) => { item.evidence_refs = ["docs/process/not-found.md"]; },
|
|
195
|
+
(item) => { item.blocking_signals = ["drift"]; },
|
|
196
|
+
(item) => { item.new_impacts = ["new-api"]; },
|
|
197
|
+
(item) => { item.workflow_reference.source = "untrusted/source"; },
|
|
198
|
+
(item) => { item.workflow_reference.skill = "implement"; },
|
|
199
|
+
(item) => { item.workflow_reference.invocation_mode = "reference"; }
|
|
200
|
+
]) {
|
|
201
|
+
const invalid = structuredClone(validResult); mutate(invalid);
|
|
202
|
+
let rejected = false;
|
|
203
|
+
try { validateWorkflowExecutionResult(invalid, data.workflow_execution_result, data.work_unit_routes); } catch { rejected = true; }
|
|
204
|
+
ensure(rejected, "Workflow Execution Result 完成态变异未被拒绝");
|
|
205
|
+
}
|
|
206
|
+
let metadataRejected = false;
|
|
207
|
+
try {
|
|
208
|
+
validateInvocationMetadata(data.matt_invocation_boundary, (skill) => skill === "grill-with-docs" ? read(`.agents/skills/${skill}/SKILL.md`).replace("disable-model-invocation: true\n", "") : read(`.agents/skills/${skill}/SKILL.md`));
|
|
209
|
+
} catch { metadataRejected = true; }
|
|
210
|
+
ensure(metadataRejected, "user-invoked front matter 变异未被 baseline oracle 拒绝");
|
|
211
|
+
const mutations = [
|
|
212
|
+
(item) => { delete item.entry_routing.direct_matt_entry.return_to_orchestrator; },
|
|
213
|
+
(item) => { item.entry_routing.formal_user_entry.lifecycle_artifact_write = "forbidden"; },
|
|
214
|
+
(item) => { item.matt_invocation_boundary.user_invoked_skills.push("unexpected-user-entry"); },
|
|
215
|
+
(item) => { item.setup_readiness.lifecycle_may_invoke_setup = true; },
|
|
216
|
+
(item) => { item.grill_exit.user_confirmation_required = false; },
|
|
217
|
+
(item) => { delete item.git_authorization.push; }
|
|
218
|
+
];
|
|
219
|
+
for (const mutate of mutations) {
|
|
220
|
+
const candidate = structuredClone(data); mutate(candidate);
|
|
221
|
+
let rejected = false;
|
|
222
|
+
try { validateMattContract(candidate); validateInvocationBoundary(candidate); } catch { rejected = true; }
|
|
223
|
+
ensure(rejected, "Matt/YSS 契约变异未被 baseline oracle 拒绝");
|
|
224
|
+
}
|
|
225
|
+
const skill = read(".agents/skills/yss-product-lifecycle/SKILL.md");
|
|
226
|
+
const adapter = read(".agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md");
|
|
227
|
+
const orchestration = read(".agents/skills/yss-product-lifecycle/references/orchestration.md");
|
|
228
|
+
validateMattProse(skill, adapter);
|
|
229
|
+
validateInvocationProse(skill, adapter, orchestration);
|
|
230
|
+
let proseRejected = false;
|
|
231
|
+
try { validateMattProse(skill.replace("任何写入前回交本编排器", "允许直接写入"), adapter); } catch { proseRejected = true; }
|
|
232
|
+
ensure(proseRejected, "Matt/YSS prose 变异未被 baseline oracle 拒绝");
|
|
233
|
+
let invocationProseRejected = false;
|
|
234
|
+
try { validateInvocationProse(skill.replace("不得自动调用它们或代替其创建正式资产", "可以自动调用并创建正式资产"), adapter, orchestration); } catch { invocationProseRejected = true; }
|
|
235
|
+
ensure(invocationProseRejected, "调用边界 prose 变异未被 baseline oracle 拒绝");
|
|
236
|
+
for (const relative of ["SKILL.md", "references/matt-yss-adapter.md", "references/orchestration-contract.yaml"]) {
|
|
237
|
+
ensure(read(`.agents/skills/yss-product-lifecycle/${relative}`) === read(`.codex/skills/yss-product-lifecycle/${relative}`), `YSS 生命周期投影未同步: ${relative}`);
|
|
238
|
+
}
|
|
69
239
|
}
|
|
70
240
|
if (name === "yssDtoWire") {
|
|
71
241
|
const result = spawnSync("scripts/verify-yss-dto-openapi-profile", [], { cwd: root, encoding: "utf8" });
|
|
@@ -8,7 +8,7 @@ export const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "
|
|
|
8
8
|
const SOURCE_ROOT = path.join(ROOT, ".agents/skills");
|
|
9
9
|
const LOCK_PATH = path.join(ROOT, "skills-lock.json");
|
|
10
10
|
const PROJECTION_ROOTS = [".claude/skills", ".codex/skills", ".hermes/skills", ".pi/skills", ".qoder/skills", ".trae/skills"];
|
|
11
|
-
const OBSOLETE = new Set(["to-" + "prd", "to-" + "issues", "design-an-interface", "qa", "request-refactor-plan", "ubiquitous-language", "edit-article", "obsidian-vault", "writing-great-skills", "code-review-process", "yss-domain-modeling", "yss-dir", "yss-duckdb", "yss-file", "yss-filerunner", "yss-db2mybatis", "yss-mail", "yss-mapper-dynamic", "yss-quality", "yss-sql-condition", "yss-sql-tpl", "yss-valuation", "yss-variable", "yss-openapi"]);
|
|
11
|
+
const OBSOLETE = new Set(["to-" + "prd", "to-" + "issues", "design-an-interface", "qa", "request-refactor-plan", "ubiquitous-language", "edit-article", "obsidian-vault", "writing-great-skills", "code-review-process", "yss-domain-modeling", "yss-dir", "yss-duckdb", "yss-file", "yss-filerunner", "yss-db2mybatis", "yss-mail", "yss-mapper-dynamic", "yss-quality", "yss-sql-condition", "yss-sql-tpl", "yss-valuation", "yss-variable", "yss-openapi", "web-design-engineer", "web-video-presentation", "wireframe-prototype", "wizard", "git-guardrails-claude-code", "claude-handoff", "batch-grill-me"]);
|
|
12
12
|
|
|
13
13
|
function relative(target) { return path.relative(ROOT, target).replaceAll(path.sep, "/"); }
|
|
14
14
|
function entries(directory) { return existsSync(directory) ? readdirSync(directory, { withFileTypes: true }) : []; }
|
|
@@ -42,8 +42,13 @@ function ensureSafeProjection(target) {
|
|
|
42
42
|
const resolved = path.resolve(target);
|
|
43
43
|
if (!resolved.startsWith(`${ROOT}${path.sep}`) || path.basename(resolved) !== "skills") throw new TypeError(`refusing unsafe projection target: ${target}`);
|
|
44
44
|
}
|
|
45
|
+
export function unlockedProjectionEntries(candidates, allowedNames, isTracked) {
|
|
46
|
+
const allowed = new Set(allowedNames);
|
|
47
|
+
return candidates.filter((candidate) => candidate.isDirectory() || candidate.isSymbolicLink()).filter((candidate) => !allowed.has(candidate.name) && isTracked(candidate.name));
|
|
48
|
+
}
|
|
45
49
|
export function syncSkills({ check = false } = {}) {
|
|
46
|
-
const
|
|
50
|
+
const lock = parseLock();
|
|
51
|
+
const shared = sharedFromLock(lock);
|
|
47
52
|
const absent = shared.filter((name) => !lstatSafe(path.join(SOURCE_ROOT, name))?.isDirectory());
|
|
48
53
|
if (absent.length) throw new TypeError(`锁文件声明的共享 skills 缺少权威内容: ${absent.join(", ")}`);
|
|
49
54
|
const obsolete = shared.filter((name) => OBSOLETE.has(name));
|
|
@@ -53,6 +58,12 @@ export function syncSkills({ check = false } = {}) {
|
|
|
53
58
|
const projection = path.join(ROOT, root);
|
|
54
59
|
ensureSafeProjection(projection);
|
|
55
60
|
if (!check) mkdirSync(projection, { recursive: true });
|
|
61
|
+
const allowed = [...shared, ...Object.keys(lock.skills?.platform?.[root] ?? {})];
|
|
62
|
+
for (const entry of unlockedProjectionEntries(entries(projection), allowed, (name) => tracked(relative(path.join(projection, name)))).filter((entry) => !OBSOLETE.has(entry.name))) {
|
|
63
|
+
const target = path.join(projection, entry.name);
|
|
64
|
+
if (!check && entry.isSymbolicLink() && !existsSync(target)) rmSync(target, { force: true });
|
|
65
|
+
else drift.push(`unlocked projection: ${relative(target)}`);
|
|
66
|
+
}
|
|
56
67
|
for (const name of shared) {
|
|
57
68
|
const source = path.join(SOURCE_ROOT, name);
|
|
58
69
|
const target = path.join(projection, name);
|
|
@@ -85,16 +96,41 @@ function priorMetadata(lock) {
|
|
|
85
96
|
if (!["shared", "platform"].some((key) => key in skills)) return skills;
|
|
86
97
|
return { ...skills.shared, ...Object.values(skills.platform ?? {}).reduce((all, group) => ({ ...all, ...group }), {}), ...Object.fromEntries(Object.entries(skills).filter(([key]) => !["shared", "platform"].includes(key))) };
|
|
87
98
|
}
|
|
88
|
-
function
|
|
99
|
+
function option(arguments_, name) {
|
|
100
|
+
const prefix = `--${name}=`;
|
|
101
|
+
const value = arguments_.find((argument) => argument.startsWith(prefix));
|
|
102
|
+
return value?.slice(prefix.length) || null;
|
|
103
|
+
}
|
|
104
|
+
function sourceRevisionMap(oldLock, arguments_) {
|
|
105
|
+
const sources = structuredClone(oldLock?.sources ?? {});
|
|
106
|
+
const revision = option(arguments_, "source-revision");
|
|
107
|
+
if (revision) {
|
|
108
|
+
const separator = revision.lastIndexOf(":");
|
|
109
|
+
if (separator <= 0 || separator === revision.length - 1) throw new TypeError("--source-revision 必须使用 source:revision 格式");
|
|
110
|
+
const source = revision.slice(0, separator);
|
|
111
|
+
sources[source] = { ...(sources[source] ?? {}), revision: revision.slice(separator + 1) };
|
|
112
|
+
}
|
|
113
|
+
return sources;
|
|
114
|
+
}
|
|
115
|
+
function metadata(name, skillPath, directory, previous, canonical = false, sources = {}, upstreamRoot = null) {
|
|
89
116
|
const old = previous[name] ?? {};
|
|
90
117
|
let recordedPath = old.skillPath ?? skillPath;
|
|
91
118
|
if (canonical && /^\.(claude|codex|hermes|pi|qoder|trae)\/skills\//.test(recordedPath)) recordedPath = skillPath;
|
|
92
119
|
const result = { source: old.source ?? "project", sourceType: old.sourceType ?? "local", skillPath: recordedPath, effectiveHash: treeHash(directory) };
|
|
93
|
-
|
|
120
|
+
const sourceInfo = sources[result.source];
|
|
121
|
+
if (sourceInfo?.revision) result.sourceRevision = sourceInfo.revision;
|
|
122
|
+
let upstreamDirectory = null;
|
|
123
|
+
if (upstreamRoot && result.source === "mattpocock/skills") {
|
|
124
|
+
upstreamDirectory = path.join(upstreamRoot, recordedPath).replace(/\/SKILL\.md$/, "");
|
|
125
|
+
if (!existsSync(upstreamDirectory)) throw new TypeError(`${name} 的上游路径不存在: ${recordedPath}`);
|
|
126
|
+
result.upstreamHash = treeHash(upstreamDirectory);
|
|
127
|
+
} else if (old.upstreamHash ?? old.computedHash) result.upstreamHash = old.upstreamHash ?? old.computedHash;
|
|
128
|
+
if (result.source === "mattpocock/skills" && result.upstreamHash && result.effectiveHash !== result.upstreamHash) result.adaptationRef = "docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md";
|
|
94
129
|
return result;
|
|
95
130
|
}
|
|
96
131
|
export function updateSkillLock(arguments_ = process.argv.slice(2)) {
|
|
97
|
-
const oldLock = parseLock(); const previous = priorMetadata(oldLock);
|
|
132
|
+
const oldLock = parseLock(); const previous = priorMetadata(oldLock); const sources = sourceRevisionMap(oldLock, arguments_); const upstreamRoot = option(arguments_, "upstream-root");
|
|
133
|
+
if (upstreamRoot && !existsSync(upstreamRoot)) throw new TypeError(`--upstream-root 不存在: ${upstreamRoot}`);
|
|
98
134
|
const additions = arguments_.filter((arg) => arg.startsWith("--add=")).map((arg) => arg.slice(6));
|
|
99
135
|
const removals = new Set(arguments_.filter((arg) => arg.startsWith("--remove=")).map((arg) => arg.slice(9)));
|
|
100
136
|
const platformAdds = arguments_.filter((arg) => arg.startsWith("--add-platform=")).map((arg) => arg.slice(15).split(":", 2));
|
|
@@ -106,7 +142,7 @@ export function updateSkillLock(arguments_ = process.argv.slice(2)) {
|
|
|
106
142
|
if (unlocked.length) throw new TypeError(`发现未登记到 skills-lock.json 的已跟踪共享 skills: ${unlocked.join(", ")}\n确认新增后运行 scripts/update-skill-lock --add=<skill-name>`);
|
|
107
143
|
const targets = [".agents/skills", ...PROJECTION_ROOTS];
|
|
108
144
|
const shared = Object.fromEntries(sharedNames.map((name) => {
|
|
109
|
-
const item = metadata(name, `.agents/skills/${name}/SKILL.md`, path.join(SOURCE_ROOT, name), previous, true); item.targets = targets; return [name, item];
|
|
145
|
+
const item = metadata(name, `.agents/skills/${name}/SKILL.md`, path.join(SOURCE_ROOT, name), previous, true, sources, upstreamRoot); item.targets = targets; return [name, item];
|
|
110
146
|
}));
|
|
111
147
|
const platform = {};
|
|
112
148
|
for (const root of PROJECTION_ROOTS) {
|
|
@@ -115,9 +151,9 @@ export function updateSkillLock(arguments_ = process.argv.slice(2)) {
|
|
|
115
151
|
if (!names.length) continue;
|
|
116
152
|
const absentPlatform = names.filter((name) => !lstatSafe(path.join(location, name))?.isDirectory());
|
|
117
153
|
if (absentPlatform.length) throw new TypeError(`锁文件声明的平台 skills 缺少内容 (${root}): ${absentPlatform.join(", ")}`);
|
|
118
|
-
platform[root] = Object.fromEntries(names.map((name) => { const item = metadata(name, `${root}/${name}/SKILL.md`, path.join(location, name), previous); item.targets = [root]; return [name, item]; }));
|
|
154
|
+
platform[root] = Object.fromEntries(names.map((name) => { const item = metadata(name, `${root}/${name}/SKILL.md`, path.join(location, name), previous, false, sources, upstreamRoot); item.targets = [root]; return [name, item]; }));
|
|
119
155
|
}
|
|
120
|
-
const manifest = { version: 3, generatedBy: "scripts/update-skill-lock", canonicalRoot: ".agents/skills", projectionRoots: PROJECTION_ROOTS, skills: { shared, platform } };
|
|
156
|
+
const manifest = { version: 3, generatedBy: "scripts/update-skill-lock", canonicalRoot: ".agents/skills", projectionRoots: PROJECTION_ROOTS, sources, skills: { shared, platform } };
|
|
121
157
|
const rendered = `${JSON.stringify(manifest, null, 2)}\n`;
|
|
122
158
|
if (arguments_.includes("--check")) { if (!existsSync(LOCK_PATH) || readFileSync(LOCK_PATH, "utf8") !== rendered) throw new TypeError("skills-lock.json is stale; run scripts/update-skill-lock"); return "skills-lock.json matches distributed skills"; }
|
|
123
159
|
writeFileSync(LOCK_PATH, rendered); return `updated skills-lock.json with ${sharedNames.length} shared skills and ${Object.values(platform).reduce((sum, group) => sum + Object.keys(group).length, 0)} platform skills`;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { parseArgs } from "node:util";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { parseDocument } from "./vendor/yaml.mjs";
|
|
8
|
+
|
|
9
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
10
|
+
const schemaPath = path.join(root, "docs/process/schemas/frontend-implementation-evidence.schema.json");
|
|
11
|
+
const validator = String.raw`
|
|
12
|
+
import json
|
|
13
|
+
import sys
|
|
14
|
+
from jsonschema import Draft202012Validator
|
|
15
|
+
schema = json.load(open(sys.argv[1], encoding="utf-8"))
|
|
16
|
+
value = json.load(sys.stdin)
|
|
17
|
+
errors = sorted(Draft202012Validator(schema).iter_errors(value), key=lambda error: list(error.absolute_path))
|
|
18
|
+
for error in errors:
|
|
19
|
+
location = ".".join(str(part) for part in error.absolute_path) or "<root>"
|
|
20
|
+
print(f"{location}: {error.message}", file=sys.stderr)
|
|
21
|
+
sys.exit(1 if errors else 0)
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const { values, positionals } = parseArgs({ options: { "allow-template": { type: "boolean" } }, allowPositionals: true, strict: true });
|
|
26
|
+
if (positionals.length !== 1) throw new TypeError("用法: scripts/verify-frontend-implementation-evidence [--allow-template] <file.yaml>");
|
|
27
|
+
const document = parseDocument(readFileSync(path.resolve(positionals[0]), "utf8"), { maxAliasCount: 0, uniqueKeys: true });
|
|
28
|
+
if (document.errors.length) throw new TypeError(document.errors[0].message);
|
|
29
|
+
const value = document.toJS({ maxAliasCount: 0 });
|
|
30
|
+
const result = spawnSync("python3", ["-c", validator, schemaPath], { cwd: root, encoding: "utf8", input: JSON.stringify(value) });
|
|
31
|
+
if (result.status !== 0) throw new TypeError(`${result.stdout}${result.stderr}`.trim());
|
|
32
|
+
if (!values["allow-template"] && value.template !== false) throw new TypeError("正式证据必须设置 template: false");
|
|
33
|
+
if (!values["allow-template"] && value.status !== "approved") throw new TypeError("正式证据必须达到 status: approved");
|
|
34
|
+
const serialized = JSON.stringify(value);
|
|
35
|
+
if (!values["allow-template"] && /REPLACE_ME|<[^>]+>|docs\/\.scratch\/example/.test(serialized)) throw new TypeError("正式证据不得保留模板占位值");
|
|
36
|
+
if (!values["allow-template"]) {
|
|
37
|
+
for (const field of ["prototype_ref", "spec_ref"]) {
|
|
38
|
+
const reference = value[field];
|
|
39
|
+
if (!/^https?:\/\//.test(reference) && !existsSync(path.resolve(root, reference))) throw new TypeError(`${field} 不可读取: ${reference}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!values["allow-template"] && value.kind === "verification") {
|
|
43
|
+
if (value.console_warning_check !== "pass") throw new TypeError("前端验证必须通过 console warning 检查");
|
|
44
|
+
if (value.uncovered_differences.length > 0 && !value.difference_owner) throw new TypeError("存在未覆盖差异时必须填写 difference_owner");
|
|
45
|
+
if (value.independent_review?.status !== "approved") throw new TypeError("前端验证必须通过独立 UI fidelity review");
|
|
46
|
+
}
|
|
47
|
+
process.stdout.write(`前端实现还原 ${value.kind} 验证通过\n`);
|
|
48
|
+
} catch (error) {
|
|
49
|
+
process.stderr.write(`前端实现还原证据验证失败: ${error.message}\n`);
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { parseArgs } from "node:util";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { parseDocument } from "./vendor/yaml.mjs";
|
|
8
|
+
|
|
9
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
10
|
+
const schemaPath = path.join(root, "docs/process/schemas/lifecycle-checkpoint.schema.json");
|
|
11
|
+
const validator = String.raw`
|
|
12
|
+
import json
|
|
13
|
+
import sys
|
|
14
|
+
from jsonschema import Draft202012Validator
|
|
15
|
+
schema = json.load(open(sys.argv[1], encoding="utf-8"))
|
|
16
|
+
value = json.load(sys.stdin)
|
|
17
|
+
errors = sorted(Draft202012Validator(schema).iter_errors(value), key=lambda error: list(error.absolute_path))
|
|
18
|
+
for error in errors:
|
|
19
|
+
location = ".".join(str(part) for part in error.absolute_path) or "<root>"
|
|
20
|
+
print(f"{location}: {error.message}", file=sys.stderr)
|
|
21
|
+
sys.exit(1 if errors else 0)
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const { positionals } = parseArgs({ allowPositionals: true, strict: true });
|
|
26
|
+
if (positionals.length !== 1) throw new TypeError("用法: scripts/verify-lifecycle-checkpoint <checkpoint.yaml|checkpoint.json>");
|
|
27
|
+
const sourcePath = path.resolve(positionals[0]);
|
|
28
|
+
const document = parseDocument(readFileSync(sourcePath, "utf8"), { maxAliasCount: 0, uniqueKeys: true });
|
|
29
|
+
if (document.errors.length) throw new TypeError(document.errors[0].message);
|
|
30
|
+
const value = document.toJS({ maxAliasCount: 0 });
|
|
31
|
+
const result = spawnSync("python3", ["-c", validator, schemaPath], { cwd: root, encoding: "utf8", input: JSON.stringify(value) });
|
|
32
|
+
if (result.status !== 0) throw new TypeError(`${result.stdout}${result.stderr}`.trim());
|
|
33
|
+
process.stdout.write("生命周期 checkpoint 验证通过\n");
|
|
34
|
+
} catch (error) {
|
|
35
|
+
process.stderr.write(`生命周期 checkpoint 验证失败: ${error.message}\n`);
|
|
36
|
+
process.exitCode = 1;
|
|
37
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { parseArgs } from "node:util";
|
|
3
|
+
import { loadMaintenanceCheckpoint, validateMaintenanceCheckpoint } from "./lib/maintenance-intensity.mjs";
|
|
4
|
+
|
|
5
|
+
try {
|
|
6
|
+
const { positionals } = parseArgs({ allowPositionals: true, strict: true });
|
|
7
|
+
if (positionals.length > 1) throw new TypeError("用法: scripts/verify-maintenance-checkpoint [checkpoint.yaml|checkpoint.json|-]");
|
|
8
|
+
const result = validateMaintenanceCheckpoint(loadMaintenanceCheckpoint(positionals[0] ?? "-"));
|
|
9
|
+
process.stdout.write(`模板维护 checkpoint 验证通过(${result.intensity},最低 ${result.minimum_intensity})\n`);
|
|
10
|
+
} catch (error) {
|
|
11
|
+
process.stderr.write(`模板维护 checkpoint 验证失败: ${error.message}\n`);
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { validateMaintenanceCheckpoint } from "./lib/maintenance-intensity.mjs";
|
|
4
|
+
|
|
5
|
+
const checkerSource = readFileSync(new URL("./lib/maintenance-intensity.mjs", import.meta.url), "utf8");
|
|
6
|
+
if (checkerSource.includes("LEVEL_BY_TRIGGER = new Map")) {
|
|
7
|
+
throw new TypeError("触发项映射必须由 docs/process/maintenance-intensity.yaml 唯一维护");
|
|
8
|
+
}
|
|
9
|
+
if (!checkerSource.includes("maintenance-intensity.yaml")) {
|
|
10
|
+
throw new TypeError("维护强度校验器必须加载权威触发项映射");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const evidence = (...kinds) => kinds.map((kind) => ({ kind, command: `verify ${kind}`, result: "pass" }));
|
|
14
|
+
const base = {
|
|
15
|
+
schema_version: 1,
|
|
16
|
+
classification_reason: "场景验证",
|
|
17
|
+
changed_assets: ["docs/example.md"],
|
|
18
|
+
escalation: "none"
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const accepted = [
|
|
22
|
+
{ ...base, intensity: "L1", triggers: ["textual-only"], verification_evidence: evidence("relevant-check"), review_mode: "self-check" },
|
|
23
|
+
{ ...base, intensity: "L2", triggers: ["local-rule"], verification_evidence: evidence("counterexample", "fresh-verification", "focused-independent-review"), review_mode: "focused-independent" },
|
|
24
|
+
{ ...base, intensity: "L2", triggers: [], verification_evidence: evidence("counterexample", "fresh-verification", "focused-independent-review"), review_mode: "focused-independent" },
|
|
25
|
+
{ ...base, intensity: "L3", triggers: ["lifecycle-gate"], verification_evidence: evidence("red", "green", "refactor", "pressure-scenario", "fresh-verification", "formal-independent-review"), review_mode: "formal-independent" }
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
for (const checkpoint of accepted) validateMaintenanceCheckpoint(checkpoint);
|
|
29
|
+
|
|
30
|
+
const rejected = [
|
|
31
|
+
{ ...accepted[1], verification_evidence: evidence("fresh-verification") },
|
|
32
|
+
{ ...accepted[1], verification_evidence: evidence("counterexample", "fresh-verification") },
|
|
33
|
+
{ ...accepted[0], triggers: ["release-semantics"] },
|
|
34
|
+
{ ...accepted[0], triggers: ["aggregate-behavior-change"] },
|
|
35
|
+
{ ...accepted[2], verification_evidence: evidence("red", "green", "refactor", "pressure-scenario") },
|
|
36
|
+
{ ...accepted[2], verification_evidence: evidence("red", "green", "refactor", "pressure-scenario", "fresh-verification") },
|
|
37
|
+
{ ...accepted[1], escalation: "发现发布语义影响但仍维持 L2", triggers: ["release-semantics"] },
|
|
38
|
+
{ ...accepted[2], intensity: "L1" }
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
for (const checkpoint of rejected) {
|
|
42
|
+
let failed = false;
|
|
43
|
+
try { validateMaintenanceCheckpoint(checkpoint); } catch { failed = true; }
|
|
44
|
+
if (!failed) throw new TypeError(`错误 checkpoint 未被拒绝: ${JSON.stringify(checkpoint)}`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
process.stdout.write("模板维护 L1/L2/L3 强度场景验证通过\n");
|
|
@@ -5,7 +5,7 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
5
5
|
cd "$ROOT_DIR"
|
|
6
6
|
node -e 'const [major]=process.versions.node.split(".").map(Number); if (major < 22 || major >= 27) { console.error("模板工具需要 Node >=22 <27"); process.exit(1); }'
|
|
7
7
|
|
|
8
|
-
required_files=(yss-project.yaml AGENTS.md CONTEXT.md skills-lock.json docs/process/lifecycle-registry.yaml docs/process/lifecycle-registry-baseline.json scripts/repository-mode scripts/implementation-path-policy scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/export-yss-skills)
|
|
8
|
+
required_files=(yss-project.yaml AGENTS.md CONTEXT.md skills-lock.json docs/process/lifecycle-registry.yaml docs/process/lifecycle-registry-baseline.json docs/process/maintenance-intensity.yaml docs/process/schemas/lifecycle-checkpoint.schema.json docs/process/schemas/frontend-implementation-evidence.schema.json docs/process/templates/lifecycle-checkpoint-template.yaml docs/process/templates/frontend-implementation-plan-template.yaml docs/process/templates/frontend-implementation-verification-template.yaml scripts/repository-mode scripts/implementation-path-policy scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/export-yss-skills)
|
|
9
9
|
for required in "${required_files[@]}"; do test -f "$required" || { echo "缺少模板必需文件: $required" >&2; exit 1; }; done
|
|
10
10
|
|
|
11
11
|
repository_mode="$(scripts/repository-mode)"
|
|
@@ -21,7 +21,11 @@ scripts/update-skill-lock --check
|
|
|
21
21
|
scripts/verify-yss-dto-openapi-profile
|
|
22
22
|
scripts/verify-yss-dto-openapi-scenarios
|
|
23
23
|
scripts/verify-lifecycle-registry
|
|
24
|
+
scripts/verify-lifecycle-checkpoint docs/process/templates/lifecycle-checkpoint-template.yaml
|
|
25
|
+
scripts/verify-frontend-implementation-evidence --allow-template docs/process/templates/frontend-implementation-plan-template.yaml
|
|
26
|
+
scripts/verify-frontend-implementation-evidence --allow-template docs/process/templates/frontend-implementation-verification-template.yaml
|
|
24
27
|
scripts/verify-lifecycle-scenarios
|
|
28
|
+
scripts/verify-maintenance-intensity-scenarios
|
|
25
29
|
scripts/verify-governance-release
|
|
26
30
|
scripts/verify-implementation-path-scenarios
|
|
27
31
|
scripts/verify-scaffold-generator-scenarios
|
|
@@ -32,7 +36,7 @@ scripts/verify-yss-ui-scenarios
|
|
|
32
36
|
scripts/verify-openapi-yaml-first-scenarios
|
|
33
37
|
scripts/verify-openapi-json-handoff-scenarios
|
|
34
38
|
|
|
35
|
-
for entry in scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/verify-lifecycle-scenarios scripts/verify-matt-yss-integration-scenarios scripts/verify-prototype-backend-scaffold-scenarios scripts/verify-yss-router-scenarios scripts/verify-openapi-yaml-first-scenarios scripts/verify-openapi-json-handoff-scenarios scripts/export-yss-skills; do node --check "$entry"; done
|
|
39
|
+
for entry in scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/verify-lifecycle-scenarios scripts/verify-matt-yss-integration-scenarios scripts/verify-prototype-backend-scaffold-scenarios scripts/verify-yss-router-scenarios scripts/verify-openapi-yaml-first-scenarios scripts/verify-openapi-json-handoff-scenarios scripts/export-yss-skills; do node --check "$entry"; done
|
|
36
40
|
|
|
37
41
|
legacy_runtime="ru""by"
|
|
38
42
|
script_roots=(scripts)
|