@liaozhi/dsh-post-gen 0.1.0
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/LICENSE +21 -0
- package/README.md +50 -0
- package/assets/skills/poster-1960s-advertising/SKILL.md +20 -0
- package/assets/skills/poster-1960s-advertising/previews/1.jpg +0 -0
- package/assets/skills/poster-1960s-advertising/previews/2.jpg +0 -0
- package/assets/skills/poster-3d-cartoon-character/SKILL.md +20 -0
- package/assets/skills/poster-3d-cartoon-character/previews/1.jpg +0 -0
- package/assets/skills/poster-3d-cartoon-character/previews/2.jpg +0 -0
- package/assets/skills/poster-3d-cartoon-character/previews/3.jpg +0 -0
- package/assets/skills/poster-3d-cartoon-character/previews/4.jpg +0 -0
- package/assets/skills/poster-3d-fridge-magnets/SKILL.md +18 -0
- package/assets/skills/poster-3d-fridge-magnets/previews/1.jpg +0 -0
- package/assets/skills/poster-3d-fridge-magnets/previews/2.jpg +0 -0
- package/assets/skills/poster-3d-fridge-magnets/previews/3.jpg +0 -0
- package/assets/skills/poster-3d-fridge-magnets/previews/4.jpg +0 -0
- package/assets/skills/poster-3d-typographic-sculpture/SKILL.md +28 -0
- package/assets/skills/poster-3d-typographic-sculpture/previews/1.jpg +0 -0
- package/assets/skills/poster-3d-typographic-sculpture/previews/2.jpg +0 -0
- package/assets/skills/poster-3d-typographic-sculpture/previews/3.jpg +0 -0
- package/assets/skills/poster-3d-typographic-sculpture/previews/4.jpg +0 -0
- package/assets/skills/poster-aerial-minimal-solitude/SKILL.md +20 -0
- package/assets/skills/poster-aerial-minimal-solitude/previews/1.jpg +0 -0
- package/assets/skills/poster-aerial-minimal-solitude/previews/2.jpg +0 -0
- package/assets/skills/poster-anime-logo/SKILL.md +20 -0
- package/assets/skills/poster-anime-logo/previews/1.jpg +0 -0
- package/assets/skills/poster-anime-logo/previews/2.jpg +0 -0
- package/assets/skills/poster-ar-hologram-retail/SKILL.md +22 -0
- package/assets/skills/poster-ar-hologram-retail/previews/1.jpg +0 -0
- package/assets/skills/poster-ar-hologram-retail/previews/2.jpg +0 -0
- package/assets/skills/poster-ar-hologram-retail/previews/3.jpg +0 -0
- package/assets/skills/poster-ar-hologram-retail/previews/4.jpg +0 -0
- package/assets/skills/poster-beverage-splash/SKILL.md +20 -0
- package/assets/skills/poster-beverage-splash/previews/1.jpg +0 -0
- package/assets/skills/poster-beverage-splash/previews/2.jpg +0 -0
- package/assets/skills/poster-beverage-splash/previews/3.jpg +0 -0
- package/assets/skills/poster-beverage-splash/previews/4.jpg +0 -0
- package/assets/skills/poster-birdseye-hatch-print/SKILL.md +24 -0
- package/assets/skills/poster-birdseye-hatch-print/previews/1.jpg +0 -0
- package/assets/skills/poster-birdseye-hatch-print/previews/2.jpg +0 -0
- package/assets/skills/poster-blind-emboss-minimal/SKILL.md +22 -0
- package/assets/skills/poster-blind-emboss-minimal/previews/1.jpg +0 -0
- package/assets/skills/poster-blind-emboss-minimal/previews/2.jpg +0 -0
- package/assets/skills/poster-blueprint-diorama-workshop/SKILL.md +24 -0
- package/assets/skills/poster-blueprint-diorama-workshop/previews/1.jpg +0 -0
- package/assets/skills/poster-blueprint-diorama-workshop/previews/2.jpg +0 -0
- package/assets/skills/poster-blueprint-infographic/SKILL.md +20 -0
- package/assets/skills/poster-blueprint-infographic/previews/1.jpg +0 -0
- package/assets/skills/poster-blueprint-infographic/previews/2.jpg +0 -0
- package/assets/skills/poster-blueprint-infographic/previews/3.jpg +0 -0
- package/assets/skills/poster-boardingpass-portal/SKILL.md +22 -0
- package/assets/skills/poster-boardingpass-portal/previews/1.jpg +0 -0
- package/assets/skills/poster-boardingpass-portal/previews/2.jpg +0 -0
- package/assets/skills/poster-boardingpass-portal/previews/3.jpg +0 -0
- package/assets/skills/poster-boardingpass-portal/previews/4.jpg +0 -0
- package/assets/skills/poster-botanical-papercollage/SKILL.md +34 -0
- package/assets/skills/poster-botanical-papercollage/previews/1.jpg +0 -0
- package/assets/skills/poster-botanical-papercollage/previews/2.jpg +0 -0
- package/assets/skills/poster-botanical-papercollage/previews/3.jpg +0 -0
- package/assets/skills/poster-botanical-papercollage/previews/4.jpg +0 -0
- package/assets/skills/poster-brand-guideline-board/SKILL.md +38 -0
- package/assets/skills/poster-brand-guideline-board/previews/1.jpg +0 -0
- package/assets/skills/poster-brand-guideline-board/previews/2.jpg +0 -0
- package/assets/skills/poster-children-illustration/SKILL.md +20 -0
- package/assets/skills/poster-children-illustration/previews/1.jpg +0 -0
- package/assets/skills/poster-children-illustration/previews/2.jpg +0 -0
- package/assets/skills/poster-children-illustration/previews/3.jpg +0 -0
- package/assets/skills/poster-children-illustration/previews/4.jpg +0 -0
- package/assets/skills/poster-cinematic-letter-panels/SKILL.md +26 -0
- package/assets/skills/poster-cinematic-letter-panels/previews/1.jpg +0 -0
- package/assets/skills/poster-cinematic-letter-panels/previews/2.jpg +0 -0
- package/assets/skills/poster-cinematic-letter-panels/previews/3.jpg +0 -0
- package/assets/skills/poster-cinematic-letter-panels/previews/4.jpg +0 -0
- package/assets/skills/poster-cinematic-travel/SKILL.md +24 -0
- package/assets/skills/poster-cinematic-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-cinematic-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-cinematic-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-cinematic-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-city-aerial-night/SKILL.md +22 -0
- package/assets/skills/poster-city-aerial-night/previews/1.jpg +0 -0
- package/assets/skills/poster-city-aerial-night/previews/2.jpg +0 -0
- package/assets/skills/poster-city-aerial-night/previews/3.jpg +0 -0
- package/assets/skills/poster-city-aerial-night/previews/4.jpg +0 -0
- package/assets/skills/poster-city-discovery-infographic/SKILL.md +28 -0
- package/assets/skills/poster-city-discovery-infographic/previews/1.jpg +0 -0
- package/assets/skills/poster-city-discovery-infographic/previews/2.jpg +0 -0
- package/assets/skills/poster-city-discovery-infographic/previews/3.jpg +0 -0
- package/assets/skills/poster-city-discovery-infographic/previews/4.jpg +0 -0
- package/assets/skills/poster-city-infographic-editorial/SKILL.md +26 -0
- package/assets/skills/poster-city-infographic-editorial/previews/1.jpg +0 -0
- package/assets/skills/poster-city-infographic-editorial/previews/2.jpg +0 -0
- package/assets/skills/poster-city-infographic-editorial/previews/3.jpg +0 -0
- package/assets/skills/poster-city-infographic-editorial/previews/4.jpg +0 -0
- package/assets/skills/poster-city-window/SKILL.md +22 -0
- package/assets/skills/poster-city-window/previews/1.jpg +0 -0
- package/assets/skills/poster-city-window/previews/2.jpg +0 -0
- package/assets/skills/poster-city-window/previews/3.jpg +0 -0
- package/assets/skills/poster-city-window/previews/4.jpg +0 -0
- package/assets/skills/poster-collectible-toy/SKILL.md +20 -0
- package/assets/skills/poster-collectible-toy/previews/1.jpg +0 -0
- package/assets/skills/poster-collectible-toy/previews/2.jpg +0 -0
- package/assets/skills/poster-collectible-toy/previews/3.jpg +0 -0
- package/assets/skills/poster-collectible-toy/previews/4.jpg +0 -0
- package/assets/skills/poster-comic-portal/SKILL.md +20 -0
- package/assets/skills/poster-comic-portal/previews/1.jpg +0 -0
- package/assets/skills/poster-comic-portal/previews/2.jpg +0 -0
- package/assets/skills/poster-comic-portal/previews/3.jpg +0 -0
- package/assets/skills/poster-comic-portal/previews/4.jpg +0 -0
- package/assets/skills/poster-comic-style-page/SKILL.md +22 -0
- package/assets/skills/poster-comic-style-page/previews/1.jpg +0 -0
- package/assets/skills/poster-comic-style-page/previews/2.jpg +0 -0
- package/assets/skills/poster-commemorative-coin/SKILL.md +20 -0
- package/assets/skills/poster-commemorative-coin/previews/1.jpg +0 -0
- package/assets/skills/poster-corkboard-moodboard/SKILL.md +22 -0
- package/assets/skills/poster-corkboard-moodboard/previews/1.jpg +0 -0
- package/assets/skills/poster-corkboard-moodboard/previews/2.jpg +0 -0
- package/assets/skills/poster-country-cuisine/SKILL.md +22 -0
- package/assets/skills/poster-country-cuisine/previews/1.jpg +0 -0
- package/assets/skills/poster-country-cuisine/previews/2.jpg +0 -0
- package/assets/skills/poster-country-cuisine/previews/3.jpg +0 -0
- package/assets/skills/poster-country-cuisine/previews/4.jpg +0 -0
- package/assets/skills/poster-country-identity/SKILL.md +22 -0
- package/assets/skills/poster-country-identity/previews/1.jpg +0 -0
- package/assets/skills/poster-country-identity/previews/2.jpg +0 -0
- package/assets/skills/poster-country-identity/previews/3.jpg +0 -0
- package/assets/skills/poster-country-identity/previews/4.jpg +0 -0
- package/assets/skills/poster-crayon-kids/SKILL.md +22 -0
- package/assets/skills/poster-crayon-kids/previews/1.jpg +0 -0
- package/assets/skills/poster-crayon-kids/previews/2.jpg +0 -0
- package/assets/skills/poster-cup-surreal-world/SKILL.md +22 -0
- package/assets/skills/poster-cup-surreal-world/previews/1.jpg +0 -0
- package/assets/skills/poster-cup-surreal-world/previews/2.jpg +0 -0
- package/assets/skills/poster-cup-surreal-world/previews/3.jpg +0 -0
- package/assets/skills/poster-cup-surreal-world/previews/4.jpg +0 -0
- package/assets/skills/poster-dessert-food/SKILL.md +22 -0
- package/assets/skills/poster-dessert-food/previews/1.jpg +0 -0
- package/assets/skills/poster-dessert-food/previews/2.jpg +0 -0
- package/assets/skills/poster-dessert-food/previews/3.jpg +0 -0
- package/assets/skills/poster-diecut-sticker-collage/SKILL.md +24 -0
- package/assets/skills/poster-diecut-sticker-collage/previews/1.jpg +0 -0
- package/assets/skills/poster-diecut-sticker-collage/previews/2.jpg +0 -0
- package/assets/skills/poster-digicam-nostalgia/SKILL.md +20 -0
- package/assets/skills/poster-digicam-nostalgia/previews/1.jpg +0 -0
- package/assets/skills/poster-digicam-nostalgia/previews/2.jpg +0 -0
- package/assets/skills/poster-doodle-product-speech-bubble/SKILL.md +22 -0
- package/assets/skills/poster-doodle-product-speech-bubble/previews/1.jpg +0 -0
- package/assets/skills/poster-doodle-product-speech-bubble/previews/2.jpg +0 -0
- package/assets/skills/poster-doodle-product-speech-bubble/previews/3.jpg +0 -0
- package/assets/skills/poster-doodle-product-speech-bubble/previews/4.jpg +0 -0
- package/assets/skills/poster-doodle-product-world/SKILL.md +22 -0
- package/assets/skills/poster-doodle-product-world/previews/1.jpg +0 -0
- package/assets/skills/poster-doodle-product-world/previews/2.jpg +0 -0
- package/assets/skills/poster-doodle-product-world/previews/3.jpg +0 -0
- package/assets/skills/poster-doodle-product-world/previews/4.jpg +0 -0
- package/assets/skills/poster-doodle-reinterpretation/SKILL.md +22 -0
- package/assets/skills/poster-doodle-reinterpretation/previews/1.jpg +0 -0
- package/assets/skills/poster-double-exposure/SKILL.md +22 -0
- package/assets/skills/poster-double-exposure/previews/1.jpg +0 -0
- package/assets/skills/poster-double-exposure/previews/2.jpg +0 -0
- package/assets/skills/poster-dual-half-travel/SKILL.md +18 -0
- package/assets/skills/poster-dual-half-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-dual-half-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-dual-world-watercolor/SKILL.md +22 -0
- package/assets/skills/poster-dual-world-watercolor/previews/1.jpg +0 -0
- package/assets/skills/poster-dual-world-watercolor/previews/2.jpg +0 -0
- package/assets/skills/poster-editorial-travel-illustration/SKILL.md +20 -0
- package/assets/skills/poster-editorial-travel-illustration/previews/1.jpg +0 -0
- package/assets/skills/poster-editorial-travel-illustration/previews/2.jpg +0 -0
- package/assets/skills/poster-editorial-travel-illustration/previews/3.jpg +0 -0
- package/assets/skills/poster-enamel-magnet/SKILL.md +22 -0
- package/assets/skills/poster-enamel-magnet/previews/1.jpg +0 -0
- package/assets/skills/poster-enamel-magnet/previews/2.jpg +0 -0
- package/assets/skills/poster-engraved-contour-ink/SKILL.md +22 -0
- package/assets/skills/poster-engraved-contour-ink/previews/1.jpg +0 -0
- package/assets/skills/poster-engraved-contour-ink/previews/2.jpg +0 -0
- package/assets/skills/poster-fashion-tech-sheet/SKILL.md +22 -0
- package/assets/skills/poster-fashion-tech-sheet/previews/1.jpg +0 -0
- package/assets/skills/poster-felt-diorama/SKILL.md +26 -0
- package/assets/skills/poster-felt-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-felt-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-filmstrip-traveler/SKILL.md +24 -0
- package/assets/skills/poster-filmstrip-traveler/previews/1.jpg +0 -0
- package/assets/skills/poster-filmstrip-traveler/previews/2.jpg +0 -0
- package/assets/skills/poster-fireworks-typography/SKILL.md +22 -0
- package/assets/skills/poster-fireworks-typography/previews/1.jpg +0 -0
- package/assets/skills/poster-fireworks-typography/previews/2.jpg +0 -0
- package/assets/skills/poster-fireworks-typography/previews/3.jpg +0 -0
- package/assets/skills/poster-fireworks-typography/previews/4.jpg +0 -0
- package/assets/skills/poster-flat-minimal-travel/SKILL.md +20 -0
- package/assets/skills/poster-flat-minimal-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-flat-minimal-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-flat-minimal-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-flat-minimal-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-floating-island/SKILL.md +20 -0
- package/assets/skills/poster-floating-island/previews/1.jpg +0 -0
- package/assets/skills/poster-floating-island/previews/2.jpg +0 -0
- package/assets/skills/poster-floating-island/previews/3.jpg +0 -0
- package/assets/skills/poster-floating-island/previews/4.jpg +0 -0
- package/assets/skills/poster-folk-flat-illustration/SKILL.md +24 -0
- package/assets/skills/poster-folk-flat-illustration/previews/1.jpg +0 -0
- package/assets/skills/poster-folk-flat-illustration/previews/2.jpg +0 -0
- package/assets/skills/poster-folk-flat-illustration/previews/3.jpg +0 -0
- package/assets/skills/poster-folk-flat-illustration/previews/4.jpg +0 -0
- package/assets/skills/poster-food-flatlay-doodle/SKILL.md +20 -0
- package/assets/skills/poster-food-flatlay-doodle/previews/1.jpg +0 -0
- package/assets/skills/poster-food-flatlay-doodle/previews/2.jpg +0 -0
- package/assets/skills/poster-food-flatlay-doodle/previews/3.jpg +0 -0
- package/assets/skills/poster-food-flatlay-doodle/previews/4.jpg +0 -0
- package/assets/skills/poster-food-hero-splash/SKILL.md +24 -0
- package/assets/skills/poster-food-hero-splash/previews/1.jpg +0 -0
- package/assets/skills/poster-food-hero-splash/previews/2.jpg +0 -0
- package/assets/skills/poster-food-hero-splash/previews/3.jpg +0 -0
- package/assets/skills/poster-food-id-badge/SKILL.md +20 -0
- package/assets/skills/poster-food-id-badge/previews/1.jpg +0 -0
- package/assets/skills/poster-food-id-badge/previews/2.jpg +0 -0
- package/assets/skills/poster-food-id-badge/previews/3.jpg +0 -0
- package/assets/skills/poster-food-id-badge/previews/4.jpg +0 -0
- package/assets/skills/poster-food-infographic/SKILL.md +20 -0
- package/assets/skills/poster-food-infographic/previews/1.jpg +0 -0
- package/assets/skills/poster-food-infographic/previews/2.jpg +0 -0
- package/assets/skills/poster-food-infographic/previews/3.jpg +0 -0
- package/assets/skills/poster-food-infographic/previews/4.jpg +0 -0
- package/assets/skills/poster-food-papercollage/SKILL.md +26 -0
- package/assets/skills/poster-food-papercollage/previews/1.jpg +0 -0
- package/assets/skills/poster-food-papercollage/previews/2.jpg +0 -0
- package/assets/skills/poster-food-papercollage/previews/3.jpg +0 -0
- package/assets/skills/poster-food-papercollage/previews/4.jpg +0 -0
- package/assets/skills/poster-food-postcard-scene/SKILL.md +20 -0
- package/assets/skills/poster-food-postcard-scene/previews/1.jpg +0 -0
- package/assets/skills/poster-food-postcard-scene/previews/2.jpg +0 -0
- package/assets/skills/poster-food-postcard-scene/previews/3.jpg +0 -0
- package/assets/skills/poster-food-postcard-scene/previews/4.jpg +0 -0
- package/assets/skills/poster-forest-fantasy-product/SKILL.md +20 -0
- package/assets/skills/poster-forest-fantasy-product/previews/1.jpg +0 -0
- package/assets/skills/poster-forest-fantasy-product/previews/2.jpg +0 -0
- package/assets/skills/poster-fresh-beverage-ad/SKILL.md +18 -0
- package/assets/skills/poster-fresh-beverage-ad/previews/1.jpg +0 -0
- package/assets/skills/poster-fresh-beverage-ad/previews/2.jpg +0 -0
- package/assets/skills/poster-futuristic-luxury-brand/SKILL.md +24 -0
- package/assets/skills/poster-futuristic-luxury-brand/previews/1.jpg +0 -0
- package/assets/skills/poster-futuristic-luxury-brand/previews/2.jpg +0 -0
- package/assets/skills/poster-futuristic-luxury-brand/previews/3.jpg +0 -0
- package/assets/skills/poster-futuristic-luxury-brand/previews/4.jpg +0 -0
- package/assets/skills/poster-geometric-travel/SKILL.md +20 -0
- package/assets/skills/poster-geometric-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-geometric-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-giant-product-snow/SKILL.md +22 -0
- package/assets/skills/poster-giant-product-snow/previews/1.jpg +0 -0
- package/assets/skills/poster-giant-stamp-diorama/SKILL.md +20 -0
- package/assets/skills/poster-giant-stamp-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-giant-stamp-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-giant-stamp-diorama/previews/3.jpg +0 -0
- package/assets/skills/poster-giant-stamp-diorama/previews/4.jpg +0 -0
- package/assets/skills/poster-gouache-travel/SKILL.md +22 -0
- package/assets/skills/poster-gouache-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-gouache-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-gouache-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-gouache-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-handdrawn-doodle/SKILL.md +18 -0
- package/assets/skills/poster-handdrawn-doodle/previews/1.jpg +0 -0
- package/assets/skills/poster-handdrawn-doodle/previews/2.jpg +0 -0
- package/assets/skills/poster-handdrawn-doodle/previews/3.jpg +0 -0
- package/assets/skills/poster-handdrawn-doodle/previews/4.jpg +0 -0
- package/assets/skills/poster-hobby-activity-collage/SKILL.md +22 -0
- package/assets/skills/poster-hobby-activity-collage/previews/1.jpg +0 -0
- package/assets/skills/poster-ice-popsicle/SKILL.md +22 -0
- package/assets/skills/poster-ice-popsicle/previews/1.jpg +0 -0
- package/assets/skills/poster-ice-popsicle/previews/2.jpg +0 -0
- package/assets/skills/poster-ice-popsicle/previews/3.jpg +0 -0
- package/assets/skills/poster-ice-popsicle/previews/4.jpg +0 -0
- package/assets/skills/poster-impasto-painting/SKILL.md +26 -0
- package/assets/skills/poster-impasto-painting/previews/1.jpg +0 -0
- package/assets/skills/poster-impasto-painting/previews/62c9be8a-bcae-4ebf-8ff0-ce1c7809fe00.jpg +0 -0
- package/assets/skills/poster-ink-watercolor-sketch/SKILL.md +26 -0
- package/assets/skills/poster-ink-watercolor-sketch/previews/1.jpg +0 -0
- package/assets/skills/poster-ink-watercolor-sketch/previews/2.jpg +0 -0
- package/assets/skills/poster-instant-photo-collage/SKILL.md +20 -0
- package/assets/skills/poster-instant-photo-collage/previews/1.jpg +0 -0
- package/assets/skills/poster-instant-photo-collage/previews/2.jpg +0 -0
- package/assets/skills/poster-island-map-diorama/SKILL.md +20 -0
- package/assets/skills/poster-island-map-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-island-map-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-isometric-floating-world/SKILL.md +22 -0
- package/assets/skills/poster-isometric-floating-world/previews/1.jpg +0 -0
- package/assets/skills/poster-isometric-floating-world/previews/2.jpg +0 -0
- package/assets/skills/poster-isometric-floating-world/previews/3.jpg +0 -0
- package/assets/skills/poster-isometric-floating-world/previews/4.jpg +0 -0
- package/assets/skills/poster-isometric-teardown/SKILL.md +22 -0
- package/assets/skills/poster-isometric-teardown/previews/1.jpg +0 -0
- package/assets/skills/poster-isometric-teardown/previews/2.jpg +0 -0
- package/assets/skills/poster-kraft-sketch/SKILL.md +20 -0
- package/assets/skills/poster-kraft-sketch/previews/1.jpg +0 -0
- package/assets/skills/poster-kraft-sketch/previews/2.jpg +0 -0
- package/assets/skills/poster-kraft-sketch/previews/3.jpg +0 -0
- package/assets/skills/poster-kraft-sketch/previews/4.jpg +0 -0
- package/assets/skills/poster-landmark-collage/SKILL.md +24 -0
- package/assets/skills/poster-landmark-collage/previews/1.jpg +0 -0
- package/assets/skills/poster-landmark-collage/previews/2.jpg +0 -0
- package/assets/skills/poster-landmark-collage/previews/3.jpg +0 -0
- package/assets/skills/poster-layered-papercut-diorama/SKILL.md +27 -0
- package/assets/skills/poster-layered-papercut-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-layered-papercut-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-layered-papercut-diorama/previews/3.jpg +0 -0
- package/assets/skills/poster-layered-papercut-diorama/previews/4.jpg +0 -0
- package/assets/skills/poster-logo-glitch-digital/SKILL.md +24 -0
- package/assets/skills/poster-logo-glitch-digital/previews/1.jpg +0 -0
- package/assets/skills/poster-logo-glitch-digital/previews/2.jpg +0 -0
- package/assets/skills/poster-logo-in-sand/SKILL.md +20 -0
- package/assets/skills/poster-logo-in-sand/previews/1.jpg +0 -0
- package/assets/skills/poster-logo-in-sand/previews/2.jpg +0 -0
- package/assets/skills/poster-luxe-postage-stamp/SKILL.md +24 -0
- package/assets/skills/poster-luxe-postage-stamp/previews/1.jpg +0 -0
- package/assets/skills/poster-luxe-postage-stamp/previews/2.jpg +0 -0
- package/assets/skills/poster-luxury-editorial/SKILL.md +22 -0
- package/assets/skills/poster-luxury-editorial/previews/1.jpg +0 -0
- package/assets/skills/poster-luxury-grid-campaign/SKILL.md +22 -0
- package/assets/skills/poster-luxury-grid-campaign/previews/1.jpg +0 -0
- package/assets/skills/poster-luxury-packaging-reveal/SKILL.md +24 -0
- package/assets/skills/poster-luxury-packaging-reveal/previews/1.jpg +0 -0
- package/assets/skills/poster-luxury-packaging-reveal/previews/2.jpg +0 -0
- package/assets/skills/poster-luxury-silhouette-emblem/SKILL.md +20 -0
- package/assets/skills/poster-luxury-silhouette-emblem/previews/1.jpg +0 -0
- package/assets/skills/poster-luxury-silhouette-emblem/previews/2.jpg +0 -0
- package/assets/skills/poster-luxury-silhouette-emblem/previews/3.jpg +0 -0
- package/assets/skills/poster-luxury-silhouette-emblem/previews/4.jpg +0 -0
- package/assets/skills/poster-magazine-handwrite/SKILL.md +30 -0
- package/assets/skills/poster-magazine-handwrite/previews/1.jpg +0 -0
- package/assets/skills/poster-magazine-handwrite/previews/2.jpg +0 -0
- package/assets/skills/poster-magnetic-filings/SKILL.md +26 -0
- package/assets/skills/poster-magnetic-filings/previews/1.jpg +0 -0
- package/assets/skills/poster-magnetic-filings/previews/2.jpg +0 -0
- package/assets/skills/poster-marker-doodle/SKILL.md +20 -0
- package/assets/skills/poster-marker-doodle/previews/1.jpg +0 -0
- package/assets/skills/poster-marker-doodle/previews/2.jpg +0 -0
- package/assets/skills/poster-marker-sketch-chibi/SKILL.md +20 -0
- package/assets/skills/poster-marker-sketch-chibi/previews/1.jpg +0 -0
- package/assets/skills/poster-marker-sketch-chibi/previews/2.jpg +0 -0
- package/assets/skills/poster-marker-travel/SKILL.md +22 -0
- package/assets/skills/poster-marker-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-marker-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-marker-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-marker-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-merch-capsule-collection/SKILL.md +20 -0
- package/assets/skills/poster-merch-capsule-collection/previews/1.jpg +0 -0
- package/assets/skills/poster-merch-capsule-collection/previews/2.jpg +0 -0
- package/assets/skills/poster-merch-capsule-collection/previews/3.jpg +0 -0
- package/assets/skills/poster-midcentury-editorial/SKILL.md +24 -0
- package/assets/skills/poster-midcentury-editorial/previews/1.jpg +0 -0
- package/assets/skills/poster-midcentury-editorial/previews/2.jpg +0 -0
- package/assets/skills/poster-midcentury-editorial/previews/3.jpg +0 -0
- package/assets/skills/poster-midcentury-editorial/previews/4.jpg +0 -0
- package/assets/skills/poster-midcentury-minimal/SKILL.md +20 -0
- package/assets/skills/poster-midcentury-minimal/previews/1.jpg +0 -0
- package/assets/skills/poster-midcentury-minimal/previews/2.jpg +0 -0
- package/assets/skills/poster-midcentury-minimal/previews/3.jpg +0 -0
- package/assets/skills/poster-miniature-city/SKILL.md +20 -0
- package/assets/skills/poster-miniature-city/previews/1.jpg +0 -0
- package/assets/skills/poster-miniature-city/previews/2.jpg +0 -0
- package/assets/skills/poster-miniature-diorama/SKILL.md +24 -0
- package/assets/skills/poster-miniature-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-miniature-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-miniature-diorama/previews/73d1f002-877c-4796-8077-a728285a5a17.jpg +0 -0
- package/assets/skills/poster-miniature-palm-showroom/SKILL.md +20 -0
- package/assets/skills/poster-miniature-palm-showroom/previews/1.jpg +0 -0
- package/assets/skills/poster-miniature-palm-showroom/previews/2.jpg +0 -0
- package/assets/skills/poster-miniature-palm-showroom/previews/3.jpg +0 -0
- package/assets/skills/poster-miniature-palm-showroom/previews/4.jpg +0 -0
- package/assets/skills/poster-minimal-doodle/SKILL.md +20 -0
- package/assets/skills/poster-minimal-doodle/previews/1.jpg +0 -0
- package/assets/skills/poster-minimal-monument/SKILL.md +20 -0
- package/assets/skills/poster-minimal-monument/previews/1.jpg +0 -0
- package/assets/skills/poster-minimal-monument/previews/2.jpg +0 -0
- package/assets/skills/poster-minimal-monument/previews/3.jpg +0 -0
- package/assets/skills/poster-minimal-monument/previews/4.jpg +0 -0
- package/assets/skills/poster-minimal-wellness/SKILL.md +20 -0
- package/assets/skills/poster-minimal-wellness/previews/1.jpg +0 -0
- package/assets/skills/poster-minimal-wellness/previews/2.jpg +0 -0
- package/assets/skills/poster-minimal-wellness/previews/3.jpg +0 -0
- package/assets/skills/poster-monoline-travel/SKILL.md +22 -0
- package/assets/skills/poster-monoline-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-monoline-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-monoline-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-monoline-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-neon-ribbon-city/SKILL.md +24 -0
- package/assets/skills/poster-neon-ribbon-city/previews/1.jpg +0 -0
- package/assets/skills/poster-neon-ribbon-city/previews/2.jpg +0 -0
- package/assets/skills/poster-neon-ribbon-city/previews/3.jpg +0 -0
- package/assets/skills/poster-neon-ribbon-city/previews/4.jpg +0 -0
- package/assets/skills/poster-neon-sign/SKILL.md +22 -0
- package/assets/skills/poster-neon-sign/previews/1.jpg +0 -0
- package/assets/skills/poster-neon-sign/previews/2.jpg +0 -0
- package/assets/skills/poster-noir-black-gold/SKILL.md +20 -0
- package/assets/skills/poster-noir-black-gold/previews/1.jpg +0 -0
- package/assets/skills/poster-noir-black-gold/previews/2.jpg +0 -0
- package/assets/skills/poster-noir-black-gold/previews/3.jpg +0 -0
- package/assets/skills/poster-noir-black-gold/previews/4.jpg +0 -0
- package/assets/skills/poster-paintbrush-cityscape/SKILL.md +20 -0
- package/assets/skills/poster-paintbrush-cityscape/previews/1.jpg +0 -0
- package/assets/skills/poster-paintbrush-cityscape/previews/2.jpg +0 -0
- package/assets/skills/poster-paintbrush-cityscape/previews/3.jpg +0 -0
- package/assets/skills/poster-paintbrush-cityscape/previews/4.jpg +0 -0
- package/assets/skills/poster-paper-quilling-travel/SKILL.md +22 -0
- package/assets/skills/poster-paper-quilling-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-paper-quilling-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-paper-quilling-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-paper-quilling-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-papercraft-bookmark/SKILL.md +22 -0
- package/assets/skills/poster-papercraft-bookmark/previews/1.jpg +0 -0
- package/assets/skills/poster-papercraft-bookmark/previews/2.jpg +0 -0
- package/assets/skills/poster-papercraft-bookmark/previews/3.jpg +0 -0
- package/assets/skills/poster-papercraft-bookmark/previews/4.jpg +0 -0
- package/assets/skills/poster-papercraft-diorama-travel/SKILL.md +22 -0
- package/assets/skills/poster-papercraft-diorama-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-papercraft-diorama-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-papercraft-grid-diorama/SKILL.md +24 -0
- package/assets/skills/poster-papercraft-grid-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-papercraft-grid-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-papercraft-layered-papercut/SKILL.md +24 -0
- package/assets/skills/poster-papercraft-layered-papercut/previews/1.jpg +0 -0
- package/assets/skills/poster-papercraft-layered-papercut/previews/2.jpg +0 -0
- package/assets/skills/poster-papercraft-strip/SKILL.md +22 -0
- package/assets/skills/poster-papercraft-strip/previews/1.jpg +0 -0
- package/assets/skills/poster-papercraft-strip/previews/2.jpg +0 -0
- package/assets/skills/poster-papercraft-strip/previews/3.jpg +0 -0
- package/assets/skills/poster-papercraft-strip/previews/4.jpg +0 -0
- package/assets/skills/poster-papercraft-suitcase/SKILL.md +24 -0
- package/assets/skills/poster-papercraft-suitcase/previews/1.jpg +0 -0
- package/assets/skills/poster-papercraft-suitcase/previews/2.jpg +0 -0
- package/assets/skills/poster-papercraft-suitcase/previews/3.jpg +0 -0
- package/assets/skills/poster-papercut-collage/SKILL.md +22 -0
- package/assets/skills/poster-papercut-collage/previews/1.jpg +0 -0
- package/assets/skills/poster-papercut-collage/previews/2.jpg +0 -0
- package/assets/skills/poster-papercut-collage/previews/3.jpg +0 -0
- package/assets/skills/poster-papercut-collage/previews/4.jpg +0 -0
- package/assets/skills/poster-passport-diorama/SKILL.md +20 -0
- package/assets/skills/poster-passport-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-passport-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-passport-diorama/previews/3.jpg +0 -0
- package/assets/skills/poster-passport-diorama/previews/4.jpg +0 -0
- package/assets/skills/poster-passport-portal-city/SKILL.md +22 -0
- package/assets/skills/poster-passport-portal-city/previews/1.jpg +0 -0
- package/assets/skills/poster-passport-portal-city/previews/2.jpg +0 -0
- package/assets/skills/poster-passport-portal-city/previews/3.jpg +0 -0
- package/assets/skills/poster-passport-portal-city/previews/4.jpg +0 -0
- package/assets/skills/poster-pastel-gouache/SKILL.md +22 -0
- package/assets/skills/poster-pastel-gouache/previews/1.jpg +0 -0
- package/assets/skills/poster-pastel-gouache/previews/2.jpg +0 -0
- package/assets/skills/poster-pastel-gouache/previews/3.jpg +0 -0
- package/assets/skills/poster-pastel-papercollage-scene/SKILL.md +28 -0
- package/assets/skills/poster-pastel-papercollage-scene/previews/1.jpg +0 -0
- package/assets/skills/poster-pastel-papercollage-scene/previews/2.jpg +0 -0
- package/assets/skills/poster-pastel-papercollage-scene/previews/3.jpg +0 -0
- package/assets/skills/poster-pastel-papercollage-scene/previews/4.jpg +0 -0
- package/assets/skills/poster-patchwork-amigurumi/SKILL.md +24 -0
- package/assets/skills/poster-patchwork-amigurumi/previews/1.jpg +0 -0
- package/assets/skills/poster-patchwork-amigurumi/previews/2.jpg +0 -0
- package/assets/skills/poster-playful-doodle-respond/SKILL.md +22 -0
- package/assets/skills/poster-playful-doodle-respond/previews/1.jpg +0 -0
- package/assets/skills/poster-playful-doodle-respond/previews/2.jpg +0 -0
- package/assets/skills/poster-pocketwatch-city/SKILL.md +20 -0
- package/assets/skills/poster-pocketwatch-city/previews/1.jpg +0 -0
- package/assets/skills/poster-pocketwatch-city/previews/2.jpg +0 -0
- package/assets/skills/poster-pocketwatch-city/previews/3.jpg +0 -0
- package/assets/skills/poster-pocketwatch-city/previews/4.jpg +0 -0
- package/assets/skills/poster-pop-art-vehicle/SKILL.md +20 -0
- package/assets/skills/poster-pop-art-vehicle/previews/1.jpg +0 -0
- package/assets/skills/poster-pop-art-vehicle/previews/2.jpg +0 -0
- package/assets/skills/poster-pop-art-vehicle/previews/3.jpg +0 -0
- package/assets/skills/poster-pop-art-vehicle/previews/4.jpg +0 -0
- package/assets/skills/poster-popup-storybook/SKILL.md +22 -0
- package/assets/skills/poster-popup-storybook/previews/1.jpg +0 -0
- package/assets/skills/poster-popup-storybook/previews/2.jpg +0 -0
- package/assets/skills/poster-popup-storybook/previews/3.jpg +0 -0
- package/assets/skills/poster-popup-storybook/previews/4.jpg +0 -0
- package/assets/skills/poster-postcard-diorama/SKILL.md +20 -0
- package/assets/skills/poster-postcard-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-postcard-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-premium-food-advert/SKILL.md +24 -0
- package/assets/skills/poster-premium-food-advert/previews/1.jpg +0 -0
- package/assets/skills/poster-premium-food-advert/previews/2.jpg +0 -0
- package/assets/skills/poster-pressed-flower-logo/SKILL.md +22 -0
- package/assets/skills/poster-pressed-flower-logo/previews/1.jpg +0 -0
- package/assets/skills/poster-pressed-flower-logo/previews/2.jpg +0 -0
- package/assets/skills/poster-product-doodle-mixed/SKILL.md +20 -0
- package/assets/skills/poster-product-doodle-mixed/previews/1.jpg +0 -0
- package/assets/skills/poster-product-doodle-mixed/previews/2.jpg +0 -0
- package/assets/skills/poster-product-explode-splash/SKILL.md +24 -0
- package/assets/skills/poster-product-explode-splash/previews/1.jpg +0 -0
- package/assets/skills/poster-product-explode-splash/previews/2.jpg +0 -0
- package/assets/skills/poster-product-explode-splash/previews/3.jpg +0 -0
- package/assets/skills/poster-product-explode-splash/previews/4.jpg +0 -0
- package/assets/skills/poster-product-exploded-view/SKILL.md +24 -0
- package/assets/skills/poster-product-exploded-view/previews/1.jpg +0 -0
- package/assets/skills/poster-product-exploded-view/previews/2.jpg +0 -0
- package/assets/skills/poster-product-grid-campaign/SKILL.md +22 -0
- package/assets/skills/poster-product-grid-campaign/previews/1.jpg +0 -0
- package/assets/skills/poster-product-grid-campaign/previews/2.jpg +0 -0
- package/assets/skills/poster-recipe-infographic/SKILL.md +24 -0
- package/assets/skills/poster-recipe-infographic/previews/1.jpg +0 -0
- package/assets/skills/poster-recipe-infographic/previews/2.jpg +0 -0
- package/assets/skills/poster-retro-album-art/SKILL.md +22 -0
- package/assets/skills/poster-retro-album-art/previews/1.jpg +0 -0
- package/assets/skills/poster-retro-album-art/previews/2.jpg +0 -0
- package/assets/skills/poster-risograph-print/SKILL.md +24 -0
- package/assets/skills/poster-risograph-print/previews/1.jpg +0 -0
- package/assets/skills/poster-risograph-print/previews/2.jpg +0 -0
- package/assets/skills/poster-risograph-print/previews/3.jpg +0 -0
- package/assets/skills/poster-risograph-print/previews/4.jpg +0 -0
- package/assets/skills/poster-risography-travel/SKILL.md +22 -0
- package/assets/skills/poster-risography-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-risography-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-risography-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-risography-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-route-map-infographic/SKILL.md +28 -0
- package/assets/skills/poster-route-map-infographic/previews/1.jpg +0 -0
- package/assets/skills/poster-route-map-infographic/previews/2.jpg +0 -0
- package/assets/skills/poster-scandi-monoline/SKILL.md +26 -0
- package/assets/skills/poster-scandi-monoline/previews/1.jpg +0 -0
- package/assets/skills/poster-scandi-monoline/previews/2.jpg +0 -0
- package/assets/skills/poster-scandi-monoline/previews/3.jpg +0 -0
- package/assets/skills/poster-scrapbook-travel/SKILL.md +24 -0
- package/assets/skills/poster-scrapbook-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-scrapbook-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-scrapbook-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-scrapbook-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-screenprint-linocut/SKILL.md +22 -0
- package/assets/skills/poster-screenprint-linocut/previews/1.jpg +0 -0
- package/assets/skills/poster-screenprint-linocut/previews/2.jpg +0 -0
- package/assets/skills/poster-screenprint-linocut/previews/3.jpg +0 -0
- package/assets/skills/poster-screenprint-linocut/previews/4.jpg +0 -0
- package/assets/skills/poster-shrinkwrapped-logo/SKILL.md +20 -0
- package/assets/skills/poster-shrinkwrapped-logo/previews/1.jpg +0 -0
- package/assets/skills/poster-shrinkwrapped-logo/previews/2.jpg +0 -0
- package/assets/skills/poster-silhouette-miniature/SKILL.md +26 -0
- package/assets/skills/poster-silhouette-miniature/previews/1.jpg +0 -0
- package/assets/skills/poster-silhouette-miniature/previews/2.jpg +0 -0
- package/assets/skills/poster-silhouette-miniature/previews/3b8bea15-43b1-4d7b-aad7-b2f5d986cde5.png +0 -0
- package/assets/skills/poster-silk-ribbon-city/SKILL.md +22 -0
- package/assets/skills/poster-silk-ribbon-city/previews/1.jpg +0 -0
- package/assets/skills/poster-silk-ribbon-city/previews/2.jpg +0 -0
- package/assets/skills/poster-silk-ribbon-city/previews/3.jpg +0 -0
- package/assets/skills/poster-silk-ribbon-city/previews/4.jpg +0 -0
- package/assets/skills/poster-sleek-product-hero/SKILL.md +24 -0
- package/assets/skills/poster-sleek-product-hero/previews/1.jpg +0 -0
- package/assets/skills/poster-sleek-product-hero/previews/2.jpg +0 -0
- package/assets/skills/poster-soft-beauty-doodle/SKILL.md +22 -0
- package/assets/skills/poster-soft-beauty-doodle/previews/1.jpg +0 -0
- package/assets/skills/poster-soft-beauty-doodle/previews/2.jpg +0 -0
- package/assets/skills/poster-souvenir-badge/SKILL.md +22 -0
- package/assets/skills/poster-souvenir-badge/previews/1.jpg +0 -0
- package/assets/skills/poster-souvenir-badge/previews/2.jpg +0 -0
- package/assets/skills/poster-souvenir-magnet-poster/SKILL.md +20 -0
- package/assets/skills/poster-souvenir-magnet-poster/previews/1.jpg +0 -0
- package/assets/skills/poster-souvenir-magnet-poster/previews/2.jpg +0 -0
- package/assets/skills/poster-sports-champion-3d/SKILL.md +26 -0
- package/assets/skills/poster-sports-champion-3d/previews/1.jpg +0 -0
- package/assets/skills/poster-sports-maximalist/SKILL.md +20 -0
- package/assets/skills/poster-sports-maximalist/previews/1.jpg +0 -0
- package/assets/skills/poster-sports-maximalist/previews/2.jpg +0 -0
- package/assets/skills/poster-sports-passport-diorama/SKILL.md +22 -0
- package/assets/skills/poster-sports-passport-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-sports-passport-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-stone-water-product/SKILL.md +20 -0
- package/assets/skills/poster-stone-water-product/previews/1.jpg +0 -0
- package/assets/skills/poster-storyboard-character/SKILL.md +22 -0
- package/assets/skills/poster-storyboard-character/previews/1.jpg +0 -0
- package/assets/skills/poster-storybook-paper-collage-travel/SKILL.md +26 -0
- package/assets/skills/poster-storybook-paper-collage-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-storybook-paper-collage-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-storybook-vintage/SKILL.md +22 -0
- package/assets/skills/poster-storybook-vintage/previews/1.jpg +0 -0
- package/assets/skills/poster-storybook-vintage/previews/2.jpg +0 -0
- package/assets/skills/poster-storybook-vintage/previews/3.jpg +0 -0
- package/assets/skills/poster-street-art-mural/SKILL.md +22 -0
- package/assets/skills/poster-street-art-mural/previews/1.jpg +0 -0
- package/assets/skills/poster-surreal-postcard/SKILL.md +24 -0
- package/assets/skills/poster-surreal-postcard/previews/1.jpg +0 -0
- package/assets/skills/poster-surreal-postcard/previews/2.jpg +0 -0
- package/assets/skills/poster-surreal-postcard/previews/3.jpg +0 -0
- package/assets/skills/poster-surreal-postcard/previews/4.jpg +0 -0
- package/assets/skills/poster-swiss-letter-editorial/SKILL.md +24 -0
- package/assets/skills/poster-swiss-letter-editorial/previews/1.jpg +0 -0
- package/assets/skills/poster-swiss-letter-editorial/previews/2.jpg +0 -0
- package/assets/skills/poster-swiss-letter-editorial/previews/3.jpg +0 -0
- package/assets/skills/poster-tablet-papercraft-diorama/SKILL.md +24 -0
- package/assets/skills/poster-tablet-papercraft-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-tablet-papercraft-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-tablet-papercraft-diorama/previews/3.jpg +0 -0
- package/assets/skills/poster-tablet-papercraft-diorama/previews/4.jpg +0 -0
- package/assets/skills/poster-tabletop-miniature-diorama/SKILL.md +20 -0
- package/assets/skills/poster-tabletop-miniature-diorama/previews/1.jpg +0 -0
- package/assets/skills/poster-tabletop-miniature-diorama/previews/2.jpg +0 -0
- package/assets/skills/poster-tabletop-miniature-diorama/previews/3.jpg +0 -0
- package/assets/skills/poster-tabletop-miniature-diorama/previews/4.jpg +0 -0
- package/assets/skills/poster-tabletop-travel-planning/SKILL.md +22 -0
- package/assets/skills/poster-tabletop-travel-planning/previews/1.jpg +0 -0
- package/assets/skills/poster-tabletop-travel-planning/previews/2.jpg +0 -0
- package/assets/skills/poster-ticket-portal-city/SKILL.md +26 -0
- package/assets/skills/poster-ticket-portal-city/previews/1.jpg +0 -0
- package/assets/skills/poster-ticket-portal-city/previews/2.jpg +0 -0
- package/assets/skills/poster-time-travel-split/SKILL.md +22 -0
- package/assets/skills/poster-time-travel-split/previews/1.jpg +0 -0
- package/assets/skills/poster-tiny-planet-city/SKILL.md +24 -0
- package/assets/skills/poster-tiny-planet-city/previews/1.jpg +0 -0
- package/assets/skills/poster-tiny-planet-city/previews/2.jpg +0 -0
- package/assets/skills/poster-transparent-product/SKILL.md +20 -0
- package/assets/skills/poster-transparent-product/previews/1.jpg +0 -0
- package/assets/skills/poster-transparent-product/previews/2.jpg +0 -0
- package/assets/skills/poster-travel-collage/SKILL.md +22 -0
- package/assets/skills/poster-travel-collage/previews/1.jpg +0 -0
- package/assets/skills/poster-travel-collage/previews/2.jpg +0 -0
- package/assets/skills/poster-travel-food-spiral/SKILL.md +22 -0
- package/assets/skills/poster-travel-food-spiral/previews/1.jpg +0 -0
- package/assets/skills/poster-travel-food-spiral/previews/2.jpg +0 -0
- package/assets/skills/poster-travel-guide-comic/SKILL.md +24 -0
- package/assets/skills/poster-travel-guide-comic/previews/1.jpg +0 -0
- package/assets/skills/poster-travel-guide-comic/previews/2.jpg +0 -0
- package/assets/skills/poster-travel-infographic/SKILL.md +22 -0
- package/assets/skills/poster-travel-infographic/previews/1.jpg +0 -0
- package/assets/skills/poster-travel-infographic/previews/2.jpg +0 -0
- package/assets/skills/poster-typographic-city-fashion/SKILL.md +22 -0
- package/assets/skills/poster-typographic-city-fashion/previews/1.jpg +0 -0
- package/assets/skills/poster-typographic-city-fashion/previews/2.jpg +0 -0
- package/assets/skills/poster-typographic-city-fashion/previews/3.jpg +0 -0
- package/assets/skills/poster-typographic-letters-travel/SKILL.md +22 -0
- package/assets/skills/poster-typographic-letters-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-typographic-letters-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-typographic-letters-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-vibrant-papercut-collage/SKILL.md +26 -0
- package/assets/skills/poster-vibrant-papercut-collage/previews/1.jpg +0 -0
- package/assets/skills/poster-vibrant-papercut-collage/previews/2.jpg +0 -0
- package/assets/skills/poster-vibrant-papercut-collage/previews/3.jpg +0 -0
- package/assets/skills/poster-vibrant-papercut-collage/previews/4.jpg +0 -0
- package/assets/skills/poster-vintage-airmail-stamp/SKILL.md +28 -0
- package/assets/skills/poster-vintage-airmail-stamp/previews/1.jpg +0 -0
- package/assets/skills/poster-vintage-airmail-stamp/previews/2.jpg +0 -0
- package/assets/skills/poster-vintage-encyclopedia/SKILL.md +26 -0
- package/assets/skills/poster-vintage-encyclopedia/previews/1.jpg +0 -0
- package/assets/skills/poster-vintage-encyclopedia/previews/2.jpg +0 -0
- package/assets/skills/poster-vintage-handpainted-ad/SKILL.md +26 -0
- package/assets/skills/poster-vintage-handpainted-ad/previews/1.jpg +0 -0
- package/assets/skills/poster-vintage-handpainted-ad/previews/2.jpg +0 -0
- package/assets/skills/poster-vintage-handpainted-ad/previews/3.jpg +0 -0
- package/assets/skills/poster-vintage-handpainted-ad/previews/4.jpg +0 -0
- package/assets/skills/poster-vintage-newspaper/SKILL.md +22 -0
- package/assets/skills/poster-vintage-newspaper/previews/1.jpg +0 -0
- package/assets/skills/poster-vintage-newspaper/previews/2.jpg +0 -0
- package/assets/skills/poster-vintage-newspaper/previews/3.jpg +0 -0
- package/assets/skills/poster-vintage-newspaper/previews/4.jpg +0 -0
- package/assets/skills/poster-vintage-romantic-typography/SKILL.md +24 -0
- package/assets/skills/poster-vintage-romantic-typography/previews/1.jpg +0 -0
- package/assets/skills/poster-vintage-romantic-typography/previews/2.jpg +0 -0
- package/assets/skills/poster-vintage-romantic-typography/previews/3.jpg +0 -0
- package/assets/skills/poster-vintage-romantic-typography/previews/4.jpg +0 -0
- package/assets/skills/poster-vintage-travel-journal/SKILL.md +22 -0
- package/assets/skills/poster-vintage-travel-journal/previews/1.jpg +0 -0
- package/assets/skills/poster-vintage-travel-journal/previews/2.jpg +0 -0
- package/assets/skills/poster-vintage-travel-magazine/SKILL.md +24 -0
- package/assets/skills/poster-vintage-travel-magazine/previews/1.jpg +0 -0
- package/assets/skills/poster-vintage-travel-magazine/previews/2.jpg +0 -0
- package/assets/skills/poster-watercolor-arch-travel/SKILL.md +20 -0
- package/assets/skills/poster-watercolor-arch-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-watercolor-arch-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-watercolor-arch-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-watercolor-arch-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-watercolor-travel/SKILL.md +26 -0
- package/assets/skills/poster-watercolor-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-watercolor-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-watercolor-travel-journal/SKILL.md +22 -0
- package/assets/skills/poster-watercolor-travel-journal/previews/1.jpg +0 -0
- package/assets/skills/poster-watercolor-travel-journal/previews/2.jpg +0 -0
- package/assets/skills/poster-window-frame-travel/SKILL.md +22 -0
- package/assets/skills/poster-window-frame-travel/previews/1.jpg +0 -0
- package/assets/skills/poster-window-frame-travel/previews/2.jpg +0 -0
- package/assets/skills/poster-window-frame-travel/previews/3.jpg +0 -0
- package/assets/skills/poster-window-frame-travel/previews/4.jpg +0 -0
- package/assets/skills/poster-winter-storybook/SKILL.md +20 -0
- package/assets/skills/poster-winter-storybook/previews/1.jpg +0 -0
- package/assets/skills/poster-winter-storybook/previews/2.jpg +0 -0
- package/assets/skills/poster-winter-storybook/previews/3.jpg +0 -0
- package/assets/skills/poster-woodcut-propaganda/SKILL.md +22 -0
- package/assets/skills/poster-woodcut-propaganda/previews/1.jpg +0 -0
- package/assets/skills/poster-woodcut-propaganda/previews/2.jpg +0 -0
- package/assets/skills/poster-woodcut-propaganda/previews/3.jpg +0 -0
- package/assets/skills/poster-woodcut-propaganda/previews/4.jpg +0 -0
- package/cordis.patch.yml +8 -0
- package/lib/client.js +1538 -0
- package/lib/client.js.map +1 -0
- package/lib/gate.js +115 -0
- package/lib/index.js +133 -0
- package/lib/invariant.js +18 -0
- package/lib/poster-service.js +128 -0
- package/lib/previews-route.js +72 -0
- package/lib/shared/disabled-flag.js +14 -0
- package/lib/shared/poster-contract.js +26 -0
- package/lib/shared/poster-trace.js +109 -0
- package/lib/shared/skill-format.js +69 -0
- package/lib/skills/store.js +456 -0
- package/lib/spec.js +16 -0
- package/lib/tools/get-all-skills.js +84 -0
- package/lib/tools/pick-skill.js +154 -0
- package/lib/trace-hub.js +63 -0
- package/lib/typert.js +18 -0
- package/lib/version-gate.js +149 -0
- package/package.json +104 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { SKILL_ZIP_LIMITS, skillPreviewUrl } from './shared/skill-format.js';
|
|
2
|
+
import { SkillInstallError } from './skills/store.js';
|
|
3
|
+
/** 海报业务后端服务(RPC 面)。 */
|
|
4
|
+
export class PosterBackend {
|
|
5
|
+
settings;
|
|
6
|
+
store;
|
|
7
|
+
hub;
|
|
8
|
+
/** Gateway 分发要用的结构化绑定(纯数据,跨模块实例安全)。 */
|
|
9
|
+
typertRemote = Object.freeze({
|
|
10
|
+
service: this,
|
|
11
|
+
serviceKey: 'poster',
|
|
12
|
+
namespace: 'poster',
|
|
13
|
+
});
|
|
14
|
+
constructor(settings, store, hub) {
|
|
15
|
+
this.settings = settings;
|
|
16
|
+
this.store = store;
|
|
17
|
+
this.hub = hub;
|
|
18
|
+
}
|
|
19
|
+
// -----------------------------------------------------------------------
|
|
20
|
+
// RPC 端点:配置读写。
|
|
21
|
+
// -----------------------------------------------------------------------
|
|
22
|
+
/** 读取当前配置。 */
|
|
23
|
+
async getConfig() {
|
|
24
|
+
return { ok: true, config: { enabled: this.settings.get().enabled } };
|
|
25
|
+
}
|
|
26
|
+
/** 保存配置(补丁式合并)。 */
|
|
27
|
+
async saveConfig(request) {
|
|
28
|
+
const patch = {};
|
|
29
|
+
if (typeof request?.enabled === 'boolean')
|
|
30
|
+
patch.enabled = request.enabled;
|
|
31
|
+
if (Object.keys(patch).length > 0)
|
|
32
|
+
await this.settings.update(patch);
|
|
33
|
+
return { ok: true };
|
|
34
|
+
}
|
|
35
|
+
// -----------------------------------------------------------------------
|
|
36
|
+
// RPC 端点:skill 库。
|
|
37
|
+
// -----------------------------------------------------------------------
|
|
38
|
+
/** 列出 skill 库(已安装 skill + 校验失败的文件夹)。 */
|
|
39
|
+
async listSkills() {
|
|
40
|
+
try {
|
|
41
|
+
const { skills, invalid } = await this.store.scan();
|
|
42
|
+
return { ok: true, skills: skills.map((skill) => this.toSummary(skill)), invalid };
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return { ok: false, error: { code: 'store-unavailable', message: error instanceof Error ? error.message : String(error) } };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** 上传 zip 安装/更新一个海报 skill。 */
|
|
49
|
+
async installSkill(request) {
|
|
50
|
+
const base64 = typeof request?.dataBase64 === 'string' ? request.dataBase64 : '';
|
|
51
|
+
if (base64 === '') {
|
|
52
|
+
return { ok: false, error: { code: 'bad-zip', message: '请求里没有 zip 数据' } };
|
|
53
|
+
}
|
|
54
|
+
// base64 体积 ≈ 原始 × 4/3:先按编码长度挡掉超限包,避免无谓解码。
|
|
55
|
+
if (base64.length > Math.ceil(SKILL_ZIP_LIMITS.maxZipBytes * (4 / 3)) + 8) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
error: { code: 'too-large', message: `压缩包超过 ${Math.round(SKILL_ZIP_LIMITS.maxZipBytes / 1024 / 1024)}MB 上限` },
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
let bytes;
|
|
62
|
+
try {
|
|
63
|
+
bytes = new Uint8Array(Buffer.from(base64, 'base64'));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return { ok: false, error: { code: 'bad-zip', message: 'zip 数据不是合法 base64' } };
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const { skill, updated } = await this.store.installZip(bytes);
|
|
70
|
+
return { ok: true, skill: this.toSummary(skill), updated };
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error instanceof SkillInstallError) {
|
|
74
|
+
return { ok: false, error: { code: error.code, message: error.message } };
|
|
75
|
+
}
|
|
76
|
+
return { ok: false, error: { code: 'io-failed', message: error instanceof Error ? error.message : String(error) } };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** 卸载(删除)一个海报 skill 文件夹。 */
|
|
80
|
+
async uninstallSkill(request) {
|
|
81
|
+
const name = typeof request?.name === 'string' ? request.name : '';
|
|
82
|
+
try {
|
|
83
|
+
const outcome = await this.store.uninstall(name);
|
|
84
|
+
if (outcome === 'bad-name')
|
|
85
|
+
return { ok: false, error: { code: 'bad-name', message: `不合法的名字 "${name}"` } };
|
|
86
|
+
if (outcome === 'not-found')
|
|
87
|
+
return { ok: false, error: { code: 'not-found', message: `skill "${name}" 不存在` } };
|
|
88
|
+
if (outcome === 'bundled')
|
|
89
|
+
return { ok: false, error: { code: 'bundled', message: `内置 skill "${name}" 不可删除` } };
|
|
90
|
+
return { ok: true };
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return { ok: false, error: { code: 'io-failed', message: error instanceof Error ? error.message : String(error) } };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// -----------------------------------------------------------------------
|
|
97
|
+
// RPC 端点:渲染节点(trace 轮询 + 候选点选)。
|
|
98
|
+
// -----------------------------------------------------------------------
|
|
99
|
+
/** 读某次工具调用的实时步骤 trace(渲染节点轮询用;settle 后事实在 meta)。 */
|
|
100
|
+
async getCallTrace(request) {
|
|
101
|
+
const callId = typeof request?.callId === 'string' ? request.callId : '';
|
|
102
|
+
return { ok: true, trace: callId === '' ? null : this.hub.get(callId) };
|
|
103
|
+
}
|
|
104
|
+
/** 提交候选卡片上的用户选择;未知/过期 callId → not-found。 */
|
|
105
|
+
async answerSkill(request) {
|
|
106
|
+
const callId = typeof request?.callId === 'string' ? request.callId : '';
|
|
107
|
+
const skill = typeof request?.skill === 'string' ? request.skill : '';
|
|
108
|
+
const custom = typeof request?.custom === 'string' ? request.custom : undefined;
|
|
109
|
+
if (callId === '' || skill === '')
|
|
110
|
+
return { ok: false, error: { code: 'bad-request' } };
|
|
111
|
+
if (!this.hub.answer(callId, skill, custom)) {
|
|
112
|
+
return { ok: false, error: { code: 'not-found', message: '该选择已过期(调用已结束或中断)' } };
|
|
113
|
+
}
|
|
114
|
+
return { ok: true };
|
|
115
|
+
}
|
|
116
|
+
/** 已安装 skill → 面板摘要(预览图相对路径 → 可渲染 URL)。 */
|
|
117
|
+
toSummary(skill) {
|
|
118
|
+
return {
|
|
119
|
+
name: skill.name,
|
|
120
|
+
title: skill.title,
|
|
121
|
+
description: skill.description,
|
|
122
|
+
...(skill.whenToUse !== undefined ? { whenToUse: skill.whenToUse } : {}),
|
|
123
|
+
styleTags: [...skill.styleTags],
|
|
124
|
+
previews: skill.previews.map((rel) => skillPreviewUrl(skill.name, rel)),
|
|
125
|
+
bundled: skill.bundled,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* skill 预览图的静态 HTTP 路由(常驻注册,不受门控影响——静态文件本身
|
|
3
|
+
* 不进模型上下文;skill 库面板直接 <img src> 引用这些 URL)。
|
|
4
|
+
*
|
|
5
|
+
* 路由:`GET /plugins/dsh-post-gen/skill-previews/<skill>/<path...>`
|
|
6
|
+
* → `<store 根目录>/<skill>/<path...>`。
|
|
7
|
+
* 安全:skill 段必须是合法 skill 名;相对路径必须无穿越;只放行白名单
|
|
8
|
+
* 图片后缀;最终落点必须仍在该 skill 文件夹内。
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
11
|
+
import { resolve, sep } from 'node:path';
|
|
12
|
+
import { isSkillName } from '@deepseek-ai/dsh-skill';
|
|
13
|
+
import { PREVIEW_CONTENT_TYPES, PREVIEW_ROUTE_PREFIX } from './shared/skill-format.js';
|
|
14
|
+
/**
|
|
15
|
+
* 注册预览图前缀路由;宿主没有 webServer 服务(非 web 部署)时只告警。
|
|
16
|
+
*
|
|
17
|
+
* 路由注册必须挂到调用方 fiber(ctx.effect):webServer.register 只返回
|
|
18
|
+
* disposer、不会随 fiber 卸载自动清理。若丢弃 disposer,HMR 重载时旧路由
|
|
19
|
+
* 残留 → 新 apply 撞 "duplicate prefix route" 抛错 → 整个插件重载失败
|
|
20
|
+
* (已注册的 typert 端点随新 fiber 回滚撤下且无人重注册,网关永久
|
|
21
|
+
* "strict definition was withdrawn")。
|
|
22
|
+
*/
|
|
23
|
+
export function registerPreviewRoute(ctx, storeRoot) {
|
|
24
|
+
const webServer = ctx.get('webServer');
|
|
25
|
+
if (webServer === undefined) {
|
|
26
|
+
console.warn('[dsh-post-gen] webServer service unavailable; skill preview images will not be served');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
ctx.effect(() => ctx.webServer.register({
|
|
30
|
+
kind: 'prefix',
|
|
31
|
+
path: PREVIEW_ROUTE_PREFIX,
|
|
32
|
+
handler: async (req, res) => {
|
|
33
|
+
const pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://localhost').pathname);
|
|
34
|
+
const rest = pathname.slice(PREVIEW_ROUTE_PREFIX.length).replace(/^\/+/, '');
|
|
35
|
+
const segments = rest.split('/').filter((segment) => segment !== '');
|
|
36
|
+
const skill = segments[0] ?? '';
|
|
37
|
+
const relParts = segments.slice(1);
|
|
38
|
+
const ext = (segments[segments.length - 1] ?? '').split('.').pop()?.toLowerCase() ?? '';
|
|
39
|
+
const mediaType = PREVIEW_CONTENT_TYPES[ext];
|
|
40
|
+
// skill 名合法 + 至少一段文件名 + 白名单后缀 + 无路径穿越。
|
|
41
|
+
const valid = isSkillName(skill) &&
|
|
42
|
+
relParts.length > 0 &&
|
|
43
|
+
mediaType !== undefined &&
|
|
44
|
+
relParts.every((segment) => segment !== '.' && segment !== '..' && !segment.includes('\\'));
|
|
45
|
+
if (!valid) {
|
|
46
|
+
res.statusCode = 404;
|
|
47
|
+
res.end();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const skillDir = resolve(storeRoot, skill);
|
|
51
|
+
const target = resolve(skillDir, ...relParts);
|
|
52
|
+
if (target !== skillDir && !target.startsWith(skillDir + sep)) {
|
|
53
|
+
res.statusCode = 404;
|
|
54
|
+
res.end();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
if (!(await stat(target)).isFile())
|
|
59
|
+
throw new Error('not a file');
|
|
60
|
+
const data = await readFile(target);
|
|
61
|
+
res.statusCode = 200;
|
|
62
|
+
res.setHeader('Content-Type', mediaType);
|
|
63
|
+
res.setHeader('Cache-Control', 'public, max-age=60');
|
|
64
|
+
res.end(data);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
res.statusCode = 404;
|
|
68
|
+
res.end();
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
}), 'dsh-post-gen: skill preview route');
|
|
72
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* host 半版本门禁软禁用时的跨进程标记(host → client)。
|
|
3
|
+
*
|
|
4
|
+
* host 半(index.ts)软禁用时不注册任何业务能力,只经
|
|
5
|
+
* `webserver/index-inject` 向 index.html 注入一个全局变量(harness 渲染时
|
|
6
|
+
* `<` 已转义,值纯 JSON);client 半(client/index.ts)加载时读取该变量,
|
|
7
|
+
* 存在即改挂"已停用"说明面板,不存在则走正常注册路径。
|
|
8
|
+
*
|
|
9
|
+
* 版本判断逻辑只在 host 半(version-gate.ts)有一份,client 不复制——
|
|
10
|
+
* 此文件只是两侧共享的常量与载荷形状,不得引入任何 Node 依赖(client
|
|
11
|
+
* bundle 会内联本文件)。
|
|
12
|
+
*/
|
|
13
|
+
/** 注入 index.html 的全局标记名(`globalThis[DISABLED_GLOBAL]`)。 */
|
|
14
|
+
export const DISABLED_GLOBAL = '__DSH_POST_GEN_DISABLED__';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* host 与 client 共享的海报业务 RPC 契约。
|
|
3
|
+
* 浏览器端经 `ctx.connection.rpc.call('/api', <endpoint>, { args })` 调用
|
|
4
|
+
* host 半的 `poster` 服务(见 src/index.ts)。
|
|
5
|
+
* 本模块两端共用:只允许类型与不依赖平台的常量/纯函数。
|
|
6
|
+
*
|
|
7
|
+
* 自 v0.2 起仅保留海报工作流自身的端点(风格库 + 配置 + trace/点选);
|
|
8
|
+
* 千问 API 调用端点已移交 dsh-qw-tool 插件(其服务 wire namespace 为 qwen)。
|
|
9
|
+
*/
|
|
10
|
+
/** RPC 端点(`<namespace>/<method>`)。 */
|
|
11
|
+
export const POSTER_ENDPOINT = {
|
|
12
|
+
/** 读取服务端保存的海报设计配置(启用开关)。 */
|
|
13
|
+
getConfig: 'poster/getConfig',
|
|
14
|
+
/** 保存海报设计配置(补丁式部分字段)。 */
|
|
15
|
+
saveConfig: 'poster/saveConfig',
|
|
16
|
+
/** 列出 skill 库(已安装 skill + 校验失败的文件夹)。 */
|
|
17
|
+
listSkills: 'poster/listSkills',
|
|
18
|
+
/** 上传 zip 安装/更新一个海报 skill。 */
|
|
19
|
+
installSkill: 'poster/installSkill',
|
|
20
|
+
/** 卸载(删除)一个海报 skill 文件夹。 */
|
|
21
|
+
uninstallSkill: 'poster/uninstallSkill',
|
|
22
|
+
/** 读某次工具调用的实时步骤 trace(运行中加速器;settle 后用 meta)。 */
|
|
23
|
+
getCallTrace: 'poster/getCallTrace',
|
|
24
|
+
/** 提交 poster_gen_pick_poster_skill 候选卡片上的用户选择。 */
|
|
25
|
+
answerSkill: 'poster/answerSkill',
|
|
26
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// 宽容解析(client 渲染 meta / RPC 快照用;结构不符降级为 undefined)。
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
function str(value) {
|
|
5
|
+
return typeof value === 'string' && value !== '' ? value : undefined;
|
|
6
|
+
}
|
|
7
|
+
function num(value) {
|
|
8
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
/** 宽容解析 skill 库扫描 trace。 */
|
|
11
|
+
export function parseSkillsTrace(meta) {
|
|
12
|
+
if (!meta || typeof meta !== 'object')
|
|
13
|
+
return undefined;
|
|
14
|
+
const t = meta;
|
|
15
|
+
if (t.kind !== 'poster-skills')
|
|
16
|
+
return undefined;
|
|
17
|
+
const trace = { kind: 'poster-skills' };
|
|
18
|
+
if (t.scanned && typeof t.scanned === 'object') {
|
|
19
|
+
const s = t.scanned;
|
|
20
|
+
const count = num(s.count);
|
|
21
|
+
if (count !== undefined) {
|
|
22
|
+
trace.scanned = {
|
|
23
|
+
count,
|
|
24
|
+
invalid: num(s.invalid) ?? 0,
|
|
25
|
+
...(num(s.durationMs) !== undefined ? { durationMs: num(s.durationMs) } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(t.catalog)) {
|
|
30
|
+
trace.catalog = t.catalog
|
|
31
|
+
.map((entry) => {
|
|
32
|
+
if (!entry || typeof entry !== 'object')
|
|
33
|
+
return undefined;
|
|
34
|
+
const e = entry;
|
|
35
|
+
const name = str(e.name);
|
|
36
|
+
if (name === undefined)
|
|
37
|
+
return undefined;
|
|
38
|
+
return {
|
|
39
|
+
name,
|
|
40
|
+
title: str(e.title) ?? name,
|
|
41
|
+
styleTags: Array.isArray(e.styleTags) ? e.styleTags.filter((tag) => typeof tag === 'string') : [],
|
|
42
|
+
};
|
|
43
|
+
})
|
|
44
|
+
.filter((entry) => entry !== undefined);
|
|
45
|
+
}
|
|
46
|
+
return trace;
|
|
47
|
+
}
|
|
48
|
+
/** 宽容解析候选点选 trace。 */
|
|
49
|
+
export function parsePickTrace(meta) {
|
|
50
|
+
if (!meta || typeof meta !== 'object')
|
|
51
|
+
return undefined;
|
|
52
|
+
const t = meta;
|
|
53
|
+
if (t.kind !== 'poster-pick')
|
|
54
|
+
return undefined;
|
|
55
|
+
const params = (t.params ?? {});
|
|
56
|
+
const candidates = Array.isArray(params.candidates)
|
|
57
|
+
? params.candidates
|
|
58
|
+
.map((entry) => {
|
|
59
|
+
if (!entry || typeof entry !== 'object')
|
|
60
|
+
return undefined;
|
|
61
|
+
const e = entry;
|
|
62
|
+
const name = str(e.name);
|
|
63
|
+
if (name === undefined)
|
|
64
|
+
return undefined;
|
|
65
|
+
return { name, reason: str(e.reason) ?? '', ...(str(e.title) !== undefined ? { title: str(e.title) } : {}) };
|
|
66
|
+
})
|
|
67
|
+
.filter((entry) => entry !== undefined)
|
|
68
|
+
: [];
|
|
69
|
+
const trace = {
|
|
70
|
+
kind: 'poster-pick',
|
|
71
|
+
params: {
|
|
72
|
+
candidates,
|
|
73
|
+
...(str(params.question) !== undefined ? { question: str(params.question) } : {}),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
if (Array.isArray(t.options)) {
|
|
77
|
+
trace.options = t.options
|
|
78
|
+
.map((entry) => {
|
|
79
|
+
if (!entry || typeof entry !== 'object')
|
|
80
|
+
return undefined;
|
|
81
|
+
const e = entry;
|
|
82
|
+
const name = str(e.name);
|
|
83
|
+
const title = str(e.title);
|
|
84
|
+
if (name === undefined || title === undefined)
|
|
85
|
+
return undefined;
|
|
86
|
+
return {
|
|
87
|
+
name,
|
|
88
|
+
title,
|
|
89
|
+
reason: str(e.reason) ?? '',
|
|
90
|
+
previews: Array.isArray(e.previews) ? e.previews.filter((p) => typeof p === 'string') : [],
|
|
91
|
+
...(str(e.prompt) !== undefined ? { prompt: str(e.prompt) } : {}),
|
|
92
|
+
};
|
|
93
|
+
})
|
|
94
|
+
.filter((entry) => entry !== undefined);
|
|
95
|
+
}
|
|
96
|
+
if (t.answer && typeof t.answer === 'object') {
|
|
97
|
+
const a = t.answer;
|
|
98
|
+
const chosenSkill = str(a.chosenSkill);
|
|
99
|
+
const chosenTitle = str(a.chosenTitle);
|
|
100
|
+
if (chosenSkill !== undefined && chosenTitle !== undefined) {
|
|
101
|
+
trace.answer = {
|
|
102
|
+
chosenSkill,
|
|
103
|
+
chosenTitle,
|
|
104
|
+
...(str(a.custom) !== undefined ? { custom: str(a.custom) } : {}),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return trace;
|
|
109
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 海报 skill 的文件夹格式约定(host 与 client 共用的纯数据模块)。
|
|
3
|
+
*
|
|
4
|
+
* 一个海报 skill = 一个文件夹(可打成 zip 在设置面板上传安装):
|
|
5
|
+
*
|
|
6
|
+
* ```
|
|
7
|
+
* poster-example-skill/ # 文件夹名随意(canonical 名以 SKILL.md 为准)
|
|
8
|
+
* ├── SKILL.md # 必需。YAML frontmatter + 生图提示词模板(正文)
|
|
9
|
+
* └── previews/ # 可选但强烈建议。预览图,skill 库里直观展示
|
|
10
|
+
* ├── 1.png
|
|
11
|
+
* └── 2.png
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* SKILL.md frontmatter:
|
|
15
|
+
* ```yaml
|
|
16
|
+
* ---
|
|
17
|
+
* name: poster-example-skill # 必需,kebab-case,全库唯一
|
|
18
|
+
* title: 节日促销海报 # 可选,展示名(缺省用 name)
|
|
19
|
+
* description: 一句话说明 # 必需(推荐筛选 + skill 库展示;目录不返回
|
|
20
|
+
* # 正文,description 要写准该 skill 生成海报
|
|
21
|
+
* # 的视觉效果——这是模型路由的主要信号)
|
|
22
|
+
* whenToUse: 适用场景 # 可选(模型路由提示)
|
|
23
|
+
* styleTags: [促销, 节日] # 可选(推荐筛选信号)
|
|
24
|
+
* previews: [previews/1.png] # 可选;缺省自动扫描 previews/ 目录
|
|
25
|
+
* ---
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* frontmatter 之后的正文 = 该 skill 的**生图提示词模板**:占位符
|
|
29
|
+
* `{{styleBrief}}`(用户描述 + 补充 + 选择理由汇总成的风格简报)、
|
|
30
|
+
* `{{requirements}}`(用户的其他约束),生成时替换后提交给生图模型。目录
|
|
31
|
+
* 原语只返回 frontmatter 元数据,正文(模板)在点选原语选中该 skill 后才返回。
|
|
32
|
+
*
|
|
33
|
+
* zip 要求:文件可以直接位于压缩包根,或统一包在一层顶层文件夹里;
|
|
34
|
+
* 校验规则与安全上限见下面的常量。完整说明见 docs/poster-skill-format.md。
|
|
35
|
+
*/
|
|
36
|
+
/** skill 预览图的 HTTP 路由前缀(host 半常驻注册,见 src/previews-route.ts)。 */
|
|
37
|
+
export const PREVIEW_ROUTE_PREFIX = '/plugins/dsh-post-gen/skill-previews';
|
|
38
|
+
/** skill 文件夹内的预览图相对路径 → 可渲染的 URL(面板与候选卡片共用)。 */
|
|
39
|
+
export function skillPreviewUrl(skillName, rel) {
|
|
40
|
+
return `${PREVIEW_ROUTE_PREFIX}/${skillName}/${rel.split('/').map(encodeURIComponent).join('/')}`;
|
|
41
|
+
}
|
|
42
|
+
/** 允许作为预览图/随包图片的扩展名。 */
|
|
43
|
+
export const PREVIEW_EXTENSIONS = ['png', 'jpg', 'jpeg', 'webp', 'svg', 'gif'];
|
|
44
|
+
/** 预览图扩展名 → Content-Type。 */
|
|
45
|
+
export const PREVIEW_CONTENT_TYPES = {
|
|
46
|
+
png: 'image/png',
|
|
47
|
+
jpg: 'image/jpeg',
|
|
48
|
+
jpeg: 'image/jpeg',
|
|
49
|
+
webp: 'image/webp',
|
|
50
|
+
svg: 'image/svg+xml',
|
|
51
|
+
gif: 'image/gif',
|
|
52
|
+
};
|
|
53
|
+
/** 预览图的自动扫描目录(skill 文件夹内)。 */
|
|
54
|
+
export const PREVIEWS_DIR_NAME = 'previews';
|
|
55
|
+
/** 生图提示词模板(SKILL.md 正文)的占位符。 */
|
|
56
|
+
export const CONTENT_PLACEHOLDERS = ['{{styleBrief}}', '{{requirements}}'];
|
|
57
|
+
/** zip 安装的安全上限。 */
|
|
58
|
+
export const SKILL_ZIP_LIMITS = {
|
|
59
|
+
/** 压缩包体积上限(字节)。 */
|
|
60
|
+
maxZipBytes: 20 * 1024 * 1024,
|
|
61
|
+
/** 解压后总体积上限(字节,防 zip bomb)。 */
|
|
62
|
+
maxTotalBytes: 80 * 1024 * 1024,
|
|
63
|
+
/** 单文件体积上限。 */
|
|
64
|
+
maxFileBytes: 20 * 1024 * 1024,
|
|
65
|
+
/** 条目数上限。 */
|
|
66
|
+
maxEntries: 200,
|
|
67
|
+
/** 单个 skill 的预览图数量上限。 */
|
|
68
|
+
maxPreviews: 8,
|
|
69
|
+
};
|