@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,154 @@
|
|
|
1
|
+
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
2
|
+
import { GATE_CLOSED_MESSAGE, gateOpen } from '../gate.js';
|
|
3
|
+
import { skillPreviewUrl } from '../shared/skill-format.js';
|
|
4
|
+
export function definePickSkillTool(deps) {
|
|
5
|
+
const traceByArgs = new WeakMap();
|
|
6
|
+
return defineTool({
|
|
7
|
+
name: 'poster_gen_pick_poster_skill',
|
|
8
|
+
description: '把 1~3 个海报风格候选渲染成卡片,让用户在对话里点选一个。候选有两种形态:① 库内候选——name 必须来自 poster_gen_get_all_poster_skills 的目录,卡片自动带预览图,返回的 content 是该 skill 的生图提示词模板(含 { {styleBrief} }/{ {requirements} } 占位符,fromLibrary=true,之后只替换占位符组装提示词,模板其余部分一字不改);② 自定义候选——当目录里没有与用户需求匹配的风格时,由你(模型)自己写 1~3 个完整生图提示词,每个候选传 name(简短标识)+ title(展示名)+ reason + prompt(完整提示词),卡片无预览图,返回的 content 就是你写的该提示词(fromLibrary=false,可直接使用或结合用户补充要求微调)。两种形态可混合。返回 chosenSkill/chosenTitle(可能附用户补充要求 custom)与 content——之后无需重新查库,直接用 content 去生成海报。',
|
|
9
|
+
parameters: {
|
|
10
|
+
candidates: {
|
|
11
|
+
type: 'array',
|
|
12
|
+
required: true,
|
|
13
|
+
items: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
additionalProperties: false,
|
|
16
|
+
properties: {
|
|
17
|
+
name: { type: 'string', required: true, description: '候选标识:库内候选填目录里的 skill 名;自定义候选填一个简短标识(如 custom-xxx)' },
|
|
18
|
+
reason: { type: 'string', required: true, description: '一句推荐理由(用户可见)' },
|
|
19
|
+
title: { type: 'string', description: '自定义候选的展示名(带 prompt 时必填;库内候选省略,自动取 skill 的 title)' },
|
|
20
|
+
prompt: { type: 'string', description: '自定义候选的完整生图提示词:提供即为自定义候选(name 不要求在目录里);省略则为库内候选(name 必须在目录里)' },
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
description: '1~3 个候选风格(库内候选 / 自定义候选可混合)',
|
|
24
|
+
},
|
|
25
|
+
question: { type: 'string', description: '卡片上方展示给用户的提问(可省略)' },
|
|
26
|
+
},
|
|
27
|
+
output: {
|
|
28
|
+
schema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
additionalProperties: false,
|
|
31
|
+
properties: {
|
|
32
|
+
chosenSkill: { type: 'string', required: true, description: '用户选中的候选标识(库内 skill 名或自定义标识)' },
|
|
33
|
+
chosenTitle: { type: 'string', required: true, description: '用户选中的海报风格展示名' },
|
|
34
|
+
custom: { type: 'string', description: '用户选择时补充的要求(可空)' },
|
|
35
|
+
fromLibrary: { type: 'boolean', required: true, description: '选中项是否来自 skill 库(true=库内模板,含占位符;false=你自写的完整提示词)' },
|
|
36
|
+
content: { type: 'string', required: true, description: '选中项的提示词:库内候选为生图提示词模板(含 { {styleBrief} }/{ {requirements} } 占位符);自定义候选为你写的完整提示词' },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
presentationMeta: (args, _value) => (traceByArgs.get(args) ?? {
|
|
40
|
+
kind: 'poster-pick',
|
|
41
|
+
params: { candidates: [] },
|
|
42
|
+
}),
|
|
43
|
+
render: (_args, value) => [
|
|
44
|
+
{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: (value.fromLibrary
|
|
47
|
+
? [
|
|
48
|
+
`用户已选择海报风格「${value.chosenTitle}」(skill: ${value.chosenSkill})。`,
|
|
49
|
+
typeof value.custom === 'string' && value.custom ? `用户补充要求:${value.custom}` : '',
|
|
50
|
+
`生图提示词模板:\n${value.content}`,
|
|
51
|
+
'用上面的模板替换 { {styleBrief} }/{ {requirements} } 占位符组装提示词\n',
|
|
52
|
+
'注意:styleBrief占位符填写的应该是产品跟此海报整体风格的融合方式以及特殊的需要偏离海报整体风格的特殊标注\n',
|
|
53
|
+
'requirements占位符填写的应该是关于此产品海报的一些特殊性约束,例如文字,背景颜色等以及用户特别提到的要求\n',
|
|
54
|
+
'构思好styleBreif和requirements之后,如果发现styleBreif和requirements与模板其它提示词有冲突,允许修改模板提示词冲突的部分,其它部分一律保持原文,一字不改',
|
|
55
|
+
'填写完成之后向用户展示提示词组装后的结果\n',
|
|
56
|
+
'下一步:调 dsh-qw-tool 的 qw_gen_image(或参照产品图时 qw_edit_image)生成海报。',
|
|
57
|
+
]
|
|
58
|
+
: [
|
|
59
|
+
`用户已选择你自定义的提示词「${value.chosenTitle}」(标识: ${value.chosenSkill})。`,
|
|
60
|
+
typeof value.custom === 'string' && value.custom ? `用户补充要求:${value.custom}` : '',
|
|
61
|
+
`完整生图提示词:\n${value.content}`,
|
|
62
|
+
'这是你自己编写的完整提示词,skill 库中没有对应模板:结合用户补充要求(如有)完善后直接使用,无需占位符替换。',
|
|
63
|
+
'向用户展示最终提示词后,下一步:调 dsh-qw-tool 的 qw_gen_image(或参照产品图时 qw_edit_image)生成海报。',
|
|
64
|
+
])
|
|
65
|
+
.filter((line) => line !== '')
|
|
66
|
+
.join('\n'),
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
async execute(args, exec) {
|
|
71
|
+
const settings = deps.scope.get();
|
|
72
|
+
const candidates = Array.isArray(args.candidates) ? args.candidates : [];
|
|
73
|
+
const entries = candidates.map((entry) => ({
|
|
74
|
+
name: String(entry?.name ?? ''),
|
|
75
|
+
reason: String(entry?.reason ?? ''),
|
|
76
|
+
title: typeof entry?.title === 'string' ? entry.title.trim() : '',
|
|
77
|
+
prompt: typeof entry?.prompt === 'string' && entry.prompt.trim() !== '' ? entry.prompt.trim() : undefined,
|
|
78
|
+
}));
|
|
79
|
+
const trace = deps.hub.begin(exec.callId, {
|
|
80
|
+
kind: 'poster-pick',
|
|
81
|
+
params: {
|
|
82
|
+
candidates: entries.map((entry) => ({
|
|
83
|
+
name: entry.name,
|
|
84
|
+
reason: entry.reason,
|
|
85
|
+
...(entry.title !== '' ? { title: entry.title } : {}),
|
|
86
|
+
})),
|
|
87
|
+
...(typeof args.question === 'string' && args.question !== '' ? { question: args.question } : {}),
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
traceByArgs.set(args, trace);
|
|
91
|
+
try {
|
|
92
|
+
const { skills } = await deps.store.scan();
|
|
93
|
+
if (!gateOpen(settings, skills.length))
|
|
94
|
+
throw new Error(GATE_CLOSED_MESSAGE);
|
|
95
|
+
if (entries.length === 0 || entries.length > 3) {
|
|
96
|
+
throw new Error('candidates 需要 1~3 个候选风格。');
|
|
97
|
+
}
|
|
98
|
+
const names = entries.map((entry) => entry.name);
|
|
99
|
+
if (new Set(names).size !== names.length || names.some((name) => name === '')) {
|
|
100
|
+
throw new Error('candidates 的 name 需要非空且互不重复(自定义候选填一个简短标识即可)。');
|
|
101
|
+
}
|
|
102
|
+
// 校验 + 补全卡片数据:无 prompt = 库内候选(name 必须在目录里);
|
|
103
|
+
// 有 prompt = 自定义候选(模型自写完整提示词,title 必填,无预览图)。
|
|
104
|
+
const byName = new Map(skills.map((skill) => [skill.name, skill]));
|
|
105
|
+
const unknown = entries.filter((entry) => entry.prompt === undefined && !byName.has(entry.name));
|
|
106
|
+
if (unknown.length > 0) {
|
|
107
|
+
throw new Error(`候选 skill 不在库里:${unknown.map((entry) => entry.name).join(', ')}。请先用 poster_gen_get_all_poster_skills 获取当前目录;如果目录里没有合适的风格,可以自己写完整生图提示词作为自定义候选(传 title + prompt 字段)。`);
|
|
108
|
+
}
|
|
109
|
+
const noTitle = entries.filter((entry) => entry.prompt !== undefined && entry.title === '');
|
|
110
|
+
if (noTitle.length > 0) {
|
|
111
|
+
throw new Error(`自定义候选缺少 title(展示名):${noTitle.map((entry) => entry.name).join(', ')}。`);
|
|
112
|
+
}
|
|
113
|
+
// 自定义候选的 name 不允许与库内 skill 同名——否则 chosenSkill/trace/
|
|
114
|
+
// 卡片都会表现得像选中了库内风格,后续改版按此名查库会拿到另一个模板。
|
|
115
|
+
const clash = entries.filter((entry) => entry.prompt !== undefined && byName.has(entry.name));
|
|
116
|
+
if (clash.length > 0) {
|
|
117
|
+
throw new Error(`自定义候选的 name 与库内 skill 同名:${clash.map((entry) => entry.name).join(', ')}。请换一个简短标识(如 custom-xxx)。`);
|
|
118
|
+
}
|
|
119
|
+
const options = entries.map((entry) => {
|
|
120
|
+
if (entry.prompt !== undefined) {
|
|
121
|
+
return { name: entry.name, title: entry.title, reason: entry.reason, previews: [], prompt: entry.prompt };
|
|
122
|
+
}
|
|
123
|
+
const def = byName.get(entry.name);
|
|
124
|
+
return {
|
|
125
|
+
name: def.name,
|
|
126
|
+
title: def.title,
|
|
127
|
+
reason: entry.reason,
|
|
128
|
+
previews: def.previews.map((rel) => skillPreviewUrl(def.name, rel)),
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
trace.options = options;
|
|
132
|
+
// 等待用户点选(PosterTraceHub pending 表 + poster/answerSkill RPC)。
|
|
133
|
+
const pick = await deps.hub.waitForAnswer(exec.callId, exec.signal);
|
|
134
|
+
const picked = options.find((option) => option.name === pick.skill) ?? options[0];
|
|
135
|
+
const fromLibrary = picked.prompt === undefined;
|
|
136
|
+
trace.answer = {
|
|
137
|
+
chosenSkill: picked.name,
|
|
138
|
+
chosenTitle: picked.title,
|
|
139
|
+
...(pick.custom !== undefined ? { custom: pick.custom } : {}),
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
chosenSkill: picked.name,
|
|
143
|
+
chosenTitle: picked.title,
|
|
144
|
+
...(pick.custom !== undefined ? { custom: pick.custom } : {}),
|
|
145
|
+
fromLibrary,
|
|
146
|
+
content: fromLibrary ? byName.get(picked.name).content : picked.prompt,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
deps.hub.finish(exec.callId);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
}
|
package/lib/trace-hub.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export class PosterTraceHub {
|
|
2
|
+
traces = new Map();
|
|
3
|
+
pending = new Map();
|
|
4
|
+
/**
|
|
5
|
+
* 开始一次调用的 trace。返回的对象由工具就地填充字段(getCallTrace 每次
|
|
6
|
+
* 调用时才 JSON 序列化,实时反映 mutation)。
|
|
7
|
+
*/
|
|
8
|
+
begin(callId, trace) {
|
|
9
|
+
this.traces.set(callId, trace);
|
|
10
|
+
return trace;
|
|
11
|
+
}
|
|
12
|
+
/** 读取实时 trace(RPC);未知 callId 返回 null。 */
|
|
13
|
+
get(callId) {
|
|
14
|
+
return this.traces.get(callId) ?? null;
|
|
15
|
+
}
|
|
16
|
+
/** 结束一次调用:从内存表移除 trace 与可能残留的 pending。 */
|
|
17
|
+
finish(callId) {
|
|
18
|
+
this.traces.delete(callId);
|
|
19
|
+
const selection = this.pending.get(callId);
|
|
20
|
+
if (selection !== undefined) {
|
|
21
|
+
this.pending.delete(callId);
|
|
22
|
+
selection.release();
|
|
23
|
+
selection.reject(new Error('poster call finished without an answer'));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 等待用户在候选卡片上的选择(recommend 工具 execute 内 await)。
|
|
28
|
+
* signal abort(harness 打断/会话停止)时 reject 并清理。
|
|
29
|
+
*/
|
|
30
|
+
waitForAnswer(callId, signal) {
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
const entry = {
|
|
33
|
+
resolve,
|
|
34
|
+
reject,
|
|
35
|
+
release: () => signal?.removeEventListener('abort', onAbort),
|
|
36
|
+
};
|
|
37
|
+
const onAbort = () => {
|
|
38
|
+
if (this.pending.delete(callId)) {
|
|
39
|
+
entry.release();
|
|
40
|
+
reject(signal?.reason instanceof Error ? signal.reason : new Error('aborted'));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
if (signal?.aborted) {
|
|
44
|
+
onAbort();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.pending.set(callId, entry);
|
|
48
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* RPC:提交用户选择。返回 false = callId 未知/已过期(调用已结束或中断)。
|
|
53
|
+
*/
|
|
54
|
+
answer(callId, skill, custom) {
|
|
55
|
+
const selection = this.pending.get(callId);
|
|
56
|
+
if (selection === undefined)
|
|
57
|
+
return false;
|
|
58
|
+
this.pending.delete(callId);
|
|
59
|
+
selection.release();
|
|
60
|
+
selection.resolve({ skill, ...(custom !== undefined && custom !== '' ? { custom } : {}) });
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
}
|
package/lib/typert.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** `poster/*` 端点的调用描述符(parameters 为位置参数名表)。 */
|
|
2
|
+
export const DESCRIPTORS = [
|
|
3
|
+
['getConfig', []],
|
|
4
|
+
['saveConfig', ['request']],
|
|
5
|
+
['listSkills', []],
|
|
6
|
+
['installSkill', ['request']],
|
|
7
|
+
['uninstallSkill', ['request']],
|
|
8
|
+
['getCallTrace', ['request']],
|
|
9
|
+
['answerSkill', ['request']],
|
|
10
|
+
].map(([method, parameters]) => ({
|
|
11
|
+
id: `dsh-post-gen#poster/${method}`,
|
|
12
|
+
service: 'poster',
|
|
13
|
+
namespace: 'poster',
|
|
14
|
+
method,
|
|
15
|
+
invocation: { kind: 'direct' },
|
|
16
|
+
parameters: parameters.map((name) => ({ name, wire: name, source: 'json', codec: { mode: 'src-json' } })),
|
|
17
|
+
result: { mode: 'src-json' },
|
|
18
|
+
}));
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness 版本门禁。
|
|
3
|
+
*
|
|
4
|
+
* `dsh plugin --profile <name> add …` 只是 pnpm 转发器(harness
|
|
5
|
+
* apps/cli/src/plugin.ts),harness 侧没有插件版本门禁钩子,安装期无法从
|
|
6
|
+
* 插件包内拦截;门禁在插件 apply 时执行(见 index.ts),版本落在
|
|
7
|
+
* [MIN_HARNESS_VERSION, MAX_HARNESS_VERSION] 窗口外默认软禁用:打印醒目
|
|
8
|
+
* 错误日志后插件整体 no-op,不影响 dsh web 启动。
|
|
9
|
+
*
|
|
10
|
+
* 失败语义之所以是软禁用而不是抛错 fail-loud:cordis Loader 与
|
|
11
|
+
* dsh-app-boot 对插件 import/apply 抛错零容忍(boot reject →
|
|
12
|
+
* installFailLoud → exit(1),见 harness packages/boot/app-boot/README.md),
|
|
13
|
+
* 插件抛错会拖垮整个 harness,影响面远超插件自身。设 DSH_POST_GEN_STRICT=1
|
|
14
|
+
* 可恢复抛错(CI / 排查场景)。
|
|
15
|
+
*
|
|
16
|
+
* 版本源:@deepseek-ai/dsh-tools——本插件的 REQUIRED_SERVICES peer 之一,
|
|
17
|
+
* 与 harness 各包同版本发布(monorepo 同步版本),其 exports 导出了
|
|
18
|
+
* ./package.json。
|
|
19
|
+
*
|
|
20
|
+
* 解析锚点:正在运行的 harness CLI 脚本(process.argv[1]),而【不是】
|
|
21
|
+
* 插件自己的 import.meta.url——插件的 devDependencies 为编译钉着一份旧版
|
|
22
|
+
* dsh-tools,以自身为锚点 require.resolve 会优先命中插件 node_modules 里
|
|
23
|
+
* 的开发副本,永远量不到 harness 的真实版本(曾导致门禁静默失效)。解析
|
|
24
|
+
* 结果落在插件包目录内同样视为失败(防退化守卫)。
|
|
25
|
+
*/
|
|
26
|
+
import { readFileSync } from 'node:fs';
|
|
27
|
+
import { createRequire } from 'node:module';
|
|
28
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
29
|
+
import { fileURLToPath } from 'node:url';
|
|
30
|
+
/**
|
|
31
|
+
* 支持下限(含):harness 版本 < 0.1.1-rc.2 时插件拒绝加载。
|
|
32
|
+
* 语义 = 插件代码实际使用的 API 面所要求的最低 harness 版本,
|
|
33
|
+
* 只实测过 0.1.1-rc.2;更低的 0.1.0 线未调研,如需支持另做分析后下调。
|
|
34
|
+
*/
|
|
35
|
+
export const MIN_HARNESS_VERSION = '0.1.1-rc.2';
|
|
36
|
+
/**
|
|
37
|
+
* 支持上限(含):仅当 harness 版本 <= 0.1.1 时插件允许加载。
|
|
38
|
+
* semver 上 0.1.1-rc.x < 0.1.1 < 0.1.2-alpha.1,上限写 0.1.1 正好把
|
|
39
|
+
* 0.1.2 线整体排除(0.1.2 的会话视图拆分删除了 dsh-client-runtime、
|
|
40
|
+
* 移动了 ctx.slots 类型归属并新增 dsh-util-values,本插件按 0.1.1 的
|
|
41
|
+
* API 面编写);追新验证通过后再上调。
|
|
42
|
+
*/
|
|
43
|
+
export const MAX_HARNESS_VERSION = '0.1.1';
|
|
44
|
+
/** 插件包根目录(lib/version-gate.js → ../),用于拒绝解析到自身依赖副本。 */
|
|
45
|
+
const PLUGIN_ROOT = fileURLToPath(new URL('..', import.meta.url)).toLowerCase();
|
|
46
|
+
/** harness CLI 脚本路径(全局安装与源码 `pnpm dsh` 下均为 process.argv[1])。 */
|
|
47
|
+
function harnessEntry() {
|
|
48
|
+
const entry = process.argv[1];
|
|
49
|
+
if (!entry) {
|
|
50
|
+
throw new Error('dsh-post-gen: 无法确定 harness CLI 入口(process.argv[1] 为空)');
|
|
51
|
+
}
|
|
52
|
+
return isAbsolute(entry) ? entry : resolve(process.cwd(), entry);
|
|
53
|
+
}
|
|
54
|
+
/** 解析并读取 @deepseek-ai/dsh-tools 的已安装版本(= harness 版本)。 */
|
|
55
|
+
export function installedHarnessVersion() {
|
|
56
|
+
let manifestPath;
|
|
57
|
+
try {
|
|
58
|
+
manifestPath = createRequire(harnessEntry()).resolve('@deepseek-ai/dsh-tools/package.json');
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new Error('dsh-post-gen: 无法从 harness CLI 入口解析 @deepseek-ai/dsh-tools'
|
|
62
|
+
+ '——请确认插件运行在 dsh 托管的进程里(dsh web / dsh …),而不是独立目录。');
|
|
63
|
+
}
|
|
64
|
+
if (manifestPath.toLowerCase().startsWith(PLUGIN_ROOT)) {
|
|
65
|
+
throw new Error('dsh-post-gen: @deepseek-ai/dsh-tools 解析到了插件自己的依赖副本'
|
|
66
|
+
+ `(${manifestPath}),无法确定 harness 的真实版本。`);
|
|
67
|
+
}
|
|
68
|
+
const manifest = JSON.parse(readFileSync(manifestPath, 'utf8').replace(/^\uFEFF/, ''));
|
|
69
|
+
if (typeof manifest.version !== 'string' || manifest.version === '') {
|
|
70
|
+
throw new Error('dsh-post-gen: 无法确定已安装的 DeepSeek Harness 版本'
|
|
71
|
+
+ `(${manifestPath} 没有 version 字段)。`);
|
|
72
|
+
}
|
|
73
|
+
return manifest.version;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 严格 semver 比较(含预发布标识,忽略 build 元数据)。
|
|
77
|
+
* @returns a<b -> -1,a=b -> 0,a>b -> 1。
|
|
78
|
+
*/
|
|
79
|
+
export function compareVersions(a, b) {
|
|
80
|
+
const parse = (text) => {
|
|
81
|
+
const withoutBuild = text.split('+')[0];
|
|
82
|
+
const [coreText = '', preText = ''] = withoutBuild.split('-');
|
|
83
|
+
const core = coreText.split('.').map((part) => {
|
|
84
|
+
const n = Number(part);
|
|
85
|
+
return Number.isSafeInteger(n) && n >= 0 ? n : Number.NaN;
|
|
86
|
+
});
|
|
87
|
+
const pre = preText === '' ? [] : preText.split('.');
|
|
88
|
+
return { core, pre };
|
|
89
|
+
};
|
|
90
|
+
const aParsed = parse(a);
|
|
91
|
+
const bParsed = parse(b);
|
|
92
|
+
// 主/次/补丁号逐段数值比较,缺段按 0 处理。
|
|
93
|
+
const coreLen = Math.max(aParsed.core.length, bParsed.core.length);
|
|
94
|
+
for (let i = 0; i < coreLen; i += 1) {
|
|
95
|
+
const x = aParsed.core[i] ?? 0;
|
|
96
|
+
const y = bParsed.core[i] ?? 0;
|
|
97
|
+
if (x !== y)
|
|
98
|
+
return x < y ? -1 : 1;
|
|
99
|
+
}
|
|
100
|
+
const preA = aParsed.pre;
|
|
101
|
+
const preB = bParsed.pre;
|
|
102
|
+
if (preA.length === 0 && preB.length === 0)
|
|
103
|
+
return 0;
|
|
104
|
+
// semver 规则:正式版 > 预发布(0.1.1 > 0.1.1-rc.2)。
|
|
105
|
+
if (preA.length === 0)
|
|
106
|
+
return 1;
|
|
107
|
+
if (preB.length === 0)
|
|
108
|
+
return -1;
|
|
109
|
+
const preLen = Math.max(preA.length, preB.length);
|
|
110
|
+
for (let i = 0; i < preLen; i += 1) {
|
|
111
|
+
const x = preA[i];
|
|
112
|
+
const y = preB[i];
|
|
113
|
+
// 前缀相同时,预发布标识更长者更大(rc.2 < rc.2.1)。
|
|
114
|
+
if (x === undefined)
|
|
115
|
+
return -1;
|
|
116
|
+
if (y === undefined)
|
|
117
|
+
return 1;
|
|
118
|
+
if (x === y)
|
|
119
|
+
continue;
|
|
120
|
+
const xNumeric = /^\d+$/.test(x);
|
|
121
|
+
const yNumeric = /^\d+$/.test(y);
|
|
122
|
+
if (xNumeric && yNumeric) {
|
|
123
|
+
const nx = Number(x);
|
|
124
|
+
const ny = Number(y);
|
|
125
|
+
if (nx !== ny)
|
|
126
|
+
return nx < ny ? -1 : 1;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// 数字标识 < 字母标识(semver 规则:2 < alpha)。
|
|
130
|
+
if (xNumeric)
|
|
131
|
+
return -1;
|
|
132
|
+
if (yNumeric)
|
|
133
|
+
return 1;
|
|
134
|
+
return x < y ? -1 : 1;
|
|
135
|
+
}
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
/** 版本门禁:harness 版本落在 [MIN, MAX] 窗口外时抛错(由调用方决定软禁用还是 fail-loud),否则直接返回。 */
|
|
139
|
+
export function assertHarnessSupported() {
|
|
140
|
+
const installed = installedHarnessVersion();
|
|
141
|
+
if (compareVersions(installed, MIN_HARNESS_VERSION) < 0) {
|
|
142
|
+
throw new Error(`dsh-post-gen: 该插件要求 DeepSeek Harness >= ${MIN_HARNESS_VERSION},当前安装的是 ${installed}。`
|
|
143
|
+
+ `请将 harness 升级到 >= ${MIN_HARNESS_VERSION},或改用与旧版 harness 兼容的插件版本。`);
|
|
144
|
+
}
|
|
145
|
+
if (compareVersions(installed, MAX_HARNESS_VERSION) > 0) {
|
|
146
|
+
throw new Error(`dsh-post-gen: 该插件仅支持 DeepSeek Harness <= ${MAX_HARNESS_VERSION},当前安装的是 ${installed}。`
|
|
147
|
+
+ `请将 harness 降级到 <= ${MAX_HARNESS_VERSION},或等待与该 harness 兼容的插件版本。`);
|
|
148
|
+
}
|
|
149
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@liaozhi/dsh-post-gen",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "DeepSeek Harness plugin: 海报设计工作流(风格库 + 点选),生图/编辑/多模态依赖 dsh-qw-tool 插件。",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"dsh",
|
|
7
|
+
"dsh-plugin",
|
|
8
|
+
"deepseek-harness",
|
|
9
|
+
"cordis"
|
|
10
|
+
],
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "./lib/index.js",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": "./lib/index.js",
|
|
19
|
+
"./client": "./lib/client.js",
|
|
20
|
+
"./invariant": "./lib/invariant.js",
|
|
21
|
+
"./package.json": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"lib",
|
|
25
|
+
"assets",
|
|
26
|
+
"cordis.patch.yml"
|
|
27
|
+
],
|
|
28
|
+
"dsh": {
|
|
29
|
+
"bundle": {
|
|
30
|
+
"patch": "./cordis.patch.yml"
|
|
31
|
+
},
|
|
32
|
+
"client": {
|
|
33
|
+
"platform": "web",
|
|
34
|
+
"inject": [
|
|
35
|
+
"@deepseek-ai/dsh-client-connection",
|
|
36
|
+
"@deepseek-ai/dsh-client-locale",
|
|
37
|
+
"@deepseek-ai/dsh-client-ui-settings"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=22"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
46
|
+
"@deepseek-ai/dsh-attachment": "^0.1.1-rc.2",
|
|
47
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2",
|
|
48
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2",
|
|
49
|
+
"@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
|
|
50
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.1-rc.2",
|
|
51
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.2",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.1-rc.2",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-tool": "^0.1.1-rc.2",
|
|
54
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.2",
|
|
55
|
+
"@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
|
|
56
|
+
"@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
|
|
57
|
+
"@deepseek-ai/dsh-settings": "^0.1.1-rc.2",
|
|
58
|
+
"@deepseek-ai/dsh-skill": "^0.1.1-rc.2",
|
|
59
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2",
|
|
60
|
+
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2",
|
|
61
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2",
|
|
62
|
+
"@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.2",
|
|
63
|
+
"@deepseek-ai/dsh-session": "^0.1.1-rc.2",
|
|
64
|
+
"@deepseek-ai/schemastery": "^3.18.1"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
68
|
+
"@deepseek-ai/dsh-attachment": "^0.1.1-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2",
|
|
71
|
+
"@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.1-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.1-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-tool": "^0.1.1-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-settings": "^0.1.1-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-skill": "^0.1.1-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2",
|
|
83
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2",
|
|
84
|
+
"@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.2",
|
|
85
|
+
"@deepseek-ai/dsh-session": "^0.1.1-rc.2",
|
|
86
|
+
"@deepseek-ai/schemastery": "^3.18.1",
|
|
87
|
+
"@types/node": "^22.20.1",
|
|
88
|
+
"@types/react": "^18.3.31",
|
|
89
|
+
"lightningcss": "^1.33.0",
|
|
90
|
+
"react": "^18.2.0",
|
|
91
|
+
"tsdown": "^0.22.14",
|
|
92
|
+
"typescript": "^5.5.2"
|
|
93
|
+
},
|
|
94
|
+
"dependencies": {
|
|
95
|
+
"fflate": "^0.8.3",
|
|
96
|
+
"yaml": "^2.9.0"
|
|
97
|
+
},
|
|
98
|
+
"scripts": {
|
|
99
|
+
"dev": "node scripts/dev.mjs",
|
|
100
|
+
"bump:deps": "node scripts/bump-deps.mjs",
|
|
101
|
+
"build": "tsc -p tsconfig.build.json && tsdown",
|
|
102
|
+
"typecheck": "tsc --noEmit"
|
|
103
|
+
}
|
|
104
|
+
}
|