@azerogluemin/ai-bootstrap 0.2.1
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/CHANGELOG.md +157 -0
- package/LICENSE +21 -0
- package/README.md +146 -0
- package/bin/init.js +10 -0
- package/dist/applier/agents-installer.d.ts +12 -0
- package/dist/applier/agents-installer.js +75 -0
- package/dist/applier/agents-installer.js.map +1 -0
- package/dist/applier/bundle-definitions.d.ts +7 -0
- package/dist/applier/bundle-definitions.js +98 -0
- package/dist/applier/bundle-definitions.js.map +1 -0
- package/dist/applier/index.d.ts +9 -0
- package/dist/applier/index.js +147 -0
- package/dist/applier/index.js.map +1 -0
- package/dist/applier/mcp-catalog.d.ts +29 -0
- package/dist/applier/mcp-catalog.js +755 -0
- package/dist/applier/mcp-catalog.js.map +1 -0
- package/dist/applier/mcp-config.d.ts +29 -0
- package/dist/applier/mcp-config.js +123 -0
- package/dist/applier/mcp-config.js.map +1 -0
- package/dist/applier/profile-writer.d.ts +2 -0
- package/dist/applier/profile-writer.js +60 -0
- package/dist/applier/profile-writer.js.map +1 -0
- package/dist/applier/projects-writer.d.ts +2 -0
- package/dist/applier/projects-writer.js +108 -0
- package/dist/applier/projects-writer.js.map +1 -0
- package/dist/applier/settings-writer.d.ts +2 -0
- package/dist/applier/settings-writer.js +74 -0
- package/dist/applier/settings-writer.js.map +1 -0
- package/dist/applier/skills-installer.d.ts +12 -0
- package/dist/applier/skills-installer.js +90 -0
- package/dist/applier/skills-installer.js.map +1 -0
- package/dist/commands/backup.d.ts +1 -0
- package/dist/commands/backup.js +269 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +185 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/mcp.d.ts +1 -0
- package/dist/commands/mcp.js +142 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/telemetry.d.ts +1 -0
- package/dist/commands/telemetry.js +85 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.js +62 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/steps/1-profile.d.ts +2 -0
- package/dist/steps/1-profile.js +81 -0
- package/dist/steps/1-profile.js.map +1 -0
- package/dist/steps/2-projects.d.ts +5 -0
- package/dist/steps/2-projects.js +81 -0
- package/dist/steps/2-projects.js.map +1 -0
- package/dist/steps/3-bundles.d.ts +4 -0
- package/dist/steps/3-bundles.js +95 -0
- package/dist/steps/3-bundles.js.map +1 -0
- package/dist/steps/4-mcps.d.ts +3 -0
- package/dist/steps/4-mcps.js +79 -0
- package/dist/steps/4-mcps.js.map +1 -0
- package/dist/steps/5-memory.d.ts +6 -0
- package/dist/steps/5-memory.js +51 -0
- package/dist/steps/5-memory.js.map +1 -0
- package/dist/steps/6-github.d.ts +5 -0
- package/dist/steps/6-github.js +34 -0
- package/dist/steps/6-github.js.map +1 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.js +35 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/permissions.d.ts +15 -0
- package/dist/utils/permissions.js +37 -0
- package/dist/utils/permissions.js.map +1 -0
- package/dist/utils/scanner.d.ts +11 -0
- package/dist/utils/scanner.js +108 -0
- package/dist/utils/scanner.js.map +1 -0
- package/dist/utils/telemetry.d.ts +26 -0
- package/dist/utils/telemetry.js +108 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/dist/wizard.d.ts +2 -0
- package/dist/wizard.js +94 -0
- package/dist/wizard.js.map +1 -0
- package/package.json +77 -0
- package/templates/agents/ai-ml-engineer/AGENT.md +41 -0
- package/templates/agents/analyst-agent/AGENT.md +36 -0
- package/templates/agents/backend-engineer/AGENT.md +85 -0
- package/templates/agents/business-analyst/AGENT.md +47 -0
- package/templates/agents/ceo-agent/AGENT.md +57 -0
- package/templates/agents/cfo-agent/AGENT.md +57 -0
- package/templates/agents/chro-agent/AGENT.md +57 -0
- package/templates/agents/ciso-agent/AGENT.md +57 -0
- package/templates/agents/cmo-agent/AGENT.md +57 -0
- package/templates/agents/code-architect/AGENT.md +69 -0
- package/templates/agents/code-explorer/AGENT.md +67 -0
- package/templates/agents/code-reviewer/AGENT.md +86 -0
- package/templates/agents/competitive-intel/AGENT.md +45 -0
- package/templates/agents/content-calendar-orchestrator/AGENT.md +37 -0
- package/templates/agents/content-marketer/AGENT.md +38 -0
- package/templates/agents/coo-agent/AGENT.md +57 -0
- package/templates/agents/cro-agent/AGENT.md +57 -0
- package/templates/agents/cto-agent/AGENT.md +57 -0
- package/templates/agents/data-engineer/AGENT.md +52 -0
- package/templates/agents/db-migrator/AGENT.md +40 -0
- package/templates/agents/debugger/AGENT.md +64 -0
- package/templates/agents/decision-recorder/AGENT.md +41 -0
- package/templates/agents/designer-agent/AGENT.md +38 -0
- package/templates/agents/devops-engineer/AGENT.md +73 -0
- package/templates/agents/ecommerce-optimizer-agent/AGENT.md +36 -0
- package/templates/agents/education-curriculum/AGENT.md +36 -0
- package/templates/agents/email-marketer/AGENT.md +37 -0
- package/templates/agents/finance-analyst-agent/AGENT.md +36 -0
- package/templates/agents/fintech-compliance/AGENT.md +36 -0
- package/templates/agents/founder-mode-agent/AGENT.md +57 -0
- package/templates/agents/frontend-engineer/AGENT.md +97 -0
- package/templates/agents/gaming-balance-agent/AGENT.md +36 -0
- package/templates/agents/gc-agent/AGENT.md +57 -0
- package/templates/agents/growth-hacker/AGENT.md +37 -0
- package/templates/agents/healthcare-compliance-agent/AGENT.md +36 -0
- package/templates/agents/instagram-orchestrator/AGENT.md +40 -0
- package/templates/agents/launch-orchestrator/AGENT.md +61 -0
- package/templates/agents/legal-researcher-agent/AGENT.md +36 -0
- package/templates/agents/linkedin-orchestrator/AGENT.md +38 -0
- package/templates/agents/market-researcher/AGENT.md +45 -0
- package/templates/agents/performance-profiler/AGENT.md +65 -0
- package/templates/agents/product-manager-agent/AGENT.md +33 -0
- package/templates/agents/product-strategist-agent/AGENT.md +37 -0
- package/templates/agents/publishing-orchestrator/AGENT.md +46 -0
- package/templates/agents/qa-reviewer/AGENT.md +45 -0
- package/templates/agents/real-estate-agent/AGENT.md +36 -0
- package/templates/agents/refactor-planner/AGENT.md +62 -0
- package/templates/agents/research-orchestrator/AGENT.md +37 -0
- package/templates/agents/researcher/AGENT.md +76 -0
- package/templates/agents/security-auditor/AGENT.md +61 -0
- package/templates/agents/seo-aeo/AGENT.md +45 -0
- package/templates/agents/seo-backlinks/AGENT.md +43 -0
- package/templates/agents/seo-brief/AGENT.md +51 -0
- package/templates/agents/seo-competitor/AGENT.md +44 -0
- package/templates/agents/seo-content/AGENT.md +55 -0
- package/templates/agents/seo-drift/AGENT.md +43 -0
- package/templates/agents/seo-ecommerce/AGENT.md +44 -0
- package/templates/agents/seo-google-api/AGENT.md +48 -0
- package/templates/agents/seo-image/AGENT.md +47 -0
- package/templates/agents/seo-international/AGENT.md +43 -0
- package/templates/agents/seo-local/AGENT.md +43 -0
- package/templates/agents/seo-maps/AGENT.md +43 -0
- package/templates/agents/seo-programmatic/AGENT.md +50 -0
- package/templates/agents/seo-schema/AGENT.md +37 -0
- package/templates/agents/seo-semantic/AGENT.md +47 -0
- package/templates/agents/seo-spa/AGENT.md +44 -0
- package/templates/agents/seo-sxo/AGENT.md +43 -0
- package/templates/agents/seo-technical/AGENT.md +56 -0
- package/templates/agents/social-media-manager/AGENT.md +36 -0
- package/templates/agents/sound-designer/AGENT.md +39 -0
- package/templates/agents/stack-tester/AGENT.md +42 -0
- package/templates/agents/storyboard-orchestrator/AGENT.md +36 -0
- package/templates/agents/tiktok-orchestrator/AGENT.md +39 -0
- package/templates/agents/twitter-orchestrator/AGENT.md +38 -0
- package/templates/agents/ux-researcher-agent/AGENT.md +36 -0
- package/templates/agents/video-pipeline/AGENT.md +53 -0
- package/templates/agents/youtube-orchestrator/AGENT.md +40 -0
- package/templates/skills/accessibility-auditor/SKILL.md +129 -0
- package/templates/skills/aeo-specialist/SKILL.md +145 -0
- package/templates/skills/analytics-expert/SKILL.md +128 -0
- package/templates/skills/architect/SKILL.md +258 -0
- package/templates/skills/brand-identity-designer/SKILL.md +156 -0
- package/templates/skills/brand-kit-builder/SKILL.md +182 -0
- package/templates/skills/business-coach/SKILL.md +85 -0
- package/templates/skills/ceo-advisor/SKILL.md +156 -0
- package/templates/skills/cfo-advisor/SKILL.md +146 -0
- package/templates/skills/chaos-engineer/SKILL.md +107 -0
- package/templates/skills/character-designer/SKILL.md +212 -0
- package/templates/skills/character-designer/knowledge/character-anatomy.md +119 -0
- package/templates/skills/character-designer/knowledge/composition.md +94 -0
- package/templates/skills/character-designer/knowledge/consistency-anchors.md +113 -0
- package/templates/skills/character-designer/knowledge/lighting.md +120 -0
- package/templates/skills/chro-advisor/SKILL.md +132 -0
- package/templates/skills/ci-cd-builder/SKILL.md +189 -0
- package/templates/skills/ciso-advisor/SKILL.md +123 -0
- package/templates/skills/cmo-advisor/SKILL.md +192 -0
- package/templates/skills/code-reviewer/SKILL.md +204 -0
- package/templates/skills/color-palette-builder/SKILL.md +143 -0
- package/templates/skills/community-manager/SKILL.md +127 -0
- package/templates/skills/composer/SKILL.md +173 -0
- package/templates/skills/composer/knowledge/arrangement-principles.md +137 -0
- package/templates/skills/composer/knowledge/composition-principles.md +97 -0
- package/templates/skills/composer/knowledge/consistency-anchors.md +149 -0
- package/templates/skills/composer/knowledge/cultural-traditions.md +193 -0
- package/templates/skills/composer/knowledge/dynamics-build-drop.md +148 -0
- package/templates/skills/composer/knowledge/genres/afrobeats.md +73 -0
- package/templates/skills/composer/knowledge/genres/ambient.md +62 -0
- package/templates/skills/composer/knowledge/genres/azerbaijani-mugham.md +90 -0
- package/templates/skills/composer/knowledge/genres/azerbaijani-pop.md +104 -0
- package/templates/skills/composer/knowledge/genres/blues.md +62 -0
- package/templates/skills/composer/knowledge/genres/choral.md +78 -0
- package/templates/skills/composer/knowledge/genres/classical.md +72 -0
- package/templates/skills/composer/knowledge/genres/country.md +64 -0
- package/templates/skills/composer/knowledge/genres/drill.md +71 -0
- package/templates/skills/composer/knowledge/genres/edm.md +75 -0
- package/templates/skills/composer/knowledge/genres/electronic.md +62 -0
- package/templates/skills/composer/knowledge/genres/film-score.md +92 -0
- package/templates/skills/composer/knowledge/genres/folk.md +67 -0
- package/templates/skills/composer/knowledge/genres/hip-hop.md +64 -0
- package/templates/skills/composer/knowledge/genres/house.md +63 -0
- package/templates/skills/composer/knowledge/genres/indie-folk.md +63 -0
- package/templates/skills/composer/knowledge/genres/indie-rock.md +60 -0
- package/templates/skills/composer/knowledge/genres/jazz-fusion.md +60 -0
- package/templates/skills/composer/knowledge/genres/jazz.md +66 -0
- package/templates/skills/composer/knowledge/genres/k-pop.md +81 -0
- package/templates/skills/composer/knowledge/genres/latin.md +88 -0
- package/templates/skills/composer/knowledge/genres/lo-fi.md +64 -0
- package/templates/skills/composer/knowledge/genres/meykhana.md +95 -0
- package/templates/skills/composer/knowledge/genres/orchestral.md +69 -0
- package/templates/skills/composer/knowledge/genres/persian-classical.md +104 -0
- package/templates/skills/composer/knowledge/genres/pop.md +60 -0
- package/templates/skills/composer/knowledge/genres/reggae.md +65 -0
- package/templates/skills/composer/knowledge/genres/rnb.md +62 -0
- package/templates/skills/composer/knowledge/genres/rock.md +61 -0
- package/templates/skills/composer/knowledge/genres/soul.md +63 -0
- package/templates/skills/composer/knowledge/genres/symphonic-mugham.md +92 -0
- package/templates/skills/composer/knowledge/genres/techno.md +63 -0
- package/templates/skills/composer/knowledge/genres/trap.md +61 -0
- package/templates/skills/composer/knowledge/genres/turkish-arabesque.md +87 -0
- package/templates/skills/composer/knowledge/genres/world-music.md +84 -0
- package/templates/skills/composer/knowledge/harmony-basics.md +105 -0
- package/templates/skills/composer/knowledge/instrumentation-guide.md +145 -0
- package/templates/skills/composer/knowledge/instruments/808.md +59 -0
- package/templates/skills/composer/knowledge/instruments/acoustic-guitar.md +46 -0
- package/templates/skills/composer/knowledge/instruments/balaban.md +74 -0
- package/templates/skills/composer/knowledge/instruments/bass.md +50 -0
- package/templates/skills/composer/knowledge/instruments/brass-section.md +60 -0
- package/templates/skills/composer/knowledge/instruments/cello-solo.md +53 -0
- package/templates/skills/composer/knowledge/instruments/choir.md +67 -0
- package/templates/skills/composer/knowledge/instruments/drum-machine.md +49 -0
- package/templates/skills/composer/knowledge/instruments/drums.md +57 -0
- package/templates/skills/composer/knowledge/instruments/electric-guitar.md +57 -0
- package/templates/skills/composer/knowledge/instruments/flute.md +56 -0
- package/templates/skills/composer/knowledge/instruments/kamancha.md +66 -0
- package/templates/skills/composer/knowledge/instruments/nagara.md +68 -0
- package/templates/skills/composer/knowledge/instruments/oud.md +70 -0
- package/templates/skills/composer/knowledge/instruments/piano.md +42 -0
- package/templates/skills/composer/knowledge/instruments/saxophone.md +66 -0
- package/templates/skills/composer/knowledge/instruments/saz.md +75 -0
- package/templates/skills/composer/knowledge/instruments/strings-orchestra.md +68 -0
- package/templates/skills/composer/knowledge/instruments/synth-bass.md +55 -0
- package/templates/skills/composer/knowledge/instruments/synth-lead.md +70 -0
- package/templates/skills/composer/knowledge/instruments/synth-pad.md +61 -0
- package/templates/skills/composer/knowledge/instruments/tar.md +67 -0
- package/templates/skills/composer/knowledge/instruments/trap-hihat.md +50 -0
- package/templates/skills/composer/knowledge/instruments/trumpet.md +63 -0
- package/templates/skills/composer/knowledge/instruments/violin-solo.md +51 -0
- package/templates/skills/composer/knowledge/key-signature-mood.md +128 -0
- package/templates/skills/composer/knowledge/lyrics-by-language.md +79 -0
- package/templates/skills/composer/knowledge/lyrics-craft.md +89 -0
- package/templates/skills/composer/knowledge/melody-craft.md +126 -0
- package/templates/skills/composer/knowledge/moods/aggressive.md +98 -0
- package/templates/skills/composer/knowledge/moods/bittersweet.md +97 -0
- package/templates/skills/composer/knowledge/moods/dreamy.md +98 -0
- package/templates/skills/composer/knowledge/moods/energetic.md +101 -0
- package/templates/skills/composer/knowledge/moods/ethereal.md +99 -0
- package/templates/skills/composer/knowledge/moods/happy.md +93 -0
- package/templates/skills/composer/knowledge/moods/melancholic-hopeful.md +96 -0
- package/templates/skills/composer/knowledge/moods/melancholic.md +99 -0
- package/templates/skills/composer/knowledge/moods/mysterious.md +97 -0
- package/templates/skills/composer/knowledge/moods/nostalgic.md +96 -0
- package/templates/skills/composer/knowledge/moods/peaceful.md +99 -0
- package/templates/skills/composer/knowledge/moods/playful.md +95 -0
- package/templates/skills/composer/knowledge/moods/romantic.md +99 -0
- package/templates/skills/composer/knowledge/moods/tense.md +97 -0
- package/templates/skills/composer/knowledge/moods/triumphant.md +104 -0
- package/templates/skills/composer/knowledge/personas/aygun-kazimova.md +67 -0
- package/templates/skills/composer/knowledge/personas/billie-eilish.md +80 -0
- package/templates/skills/composer/knowledge/personas/bon-iver.md +70 -0
- package/templates/skills/composer/knowledge/personas/daft-punk.md +71 -0
- package/templates/skills/composer/knowledge/personas/hans-zimmer.md +71 -0
- package/templates/skills/composer/knowledge/personas/hildur-gudnadottir.md +72 -0
- package/templates/skills/composer/knowledge/personas/kanye-west.md +75 -0
- package/templates/skills/composer/knowledge/personas/max-martin.md +65 -0
- package/templates/skills/composer/knowledge/personas/neutral-composer.md +66 -0
- package/templates/skills/composer/knowledge/personas/pharrell.md +70 -0
- package/templates/skills/composer/knowledge/personas/rashid-behbudov.md +60 -0
- package/templates/skills/composer/knowledge/personas/sezen-aksu.md +68 -0
- package/templates/skills/composer/knowledge/personas/sufjan-stevens.md +71 -0
- package/templates/skills/composer/knowledge/personas/the-weeknd.md +78 -0
- package/templates/skills/composer/knowledge/production-styles/ambient-textural.md +70 -0
- package/templates/skills/composer/knowledge/production-styles/demo-rough.md +70 -0
- package/templates/skills/composer/knowledge/production-styles/hi-fi.md +69 -0
- package/templates/skills/composer/knowledge/production-styles/live-feel.md +74 -0
- package/templates/skills/composer/knowledge/production-styles/lo-fi.md +55 -0
- package/templates/skills/composer/knowledge/production-styles/maximalist.md +69 -0
- package/templates/skills/composer/knowledge/production-styles/minimal.md +70 -0
- package/templates/skills/composer/knowledge/production-styles/orchestral-cinematic.md +69 -0
- package/templates/skills/composer/knowledge/production-styles/polished-modern.md +56 -0
- package/templates/skills/composer/knowledge/production-styles/vintage-analog.md +67 -0
- package/templates/skills/composer/knowledge/song-structure.md +97 -0
- package/templates/skills/composer/knowledge/tempo-bpm-guide.md +141 -0
- package/templates/skills/composer/knowledge/time-signature.md +124 -0
- package/templates/skills/composer/knowledge/vocal-direction.md +118 -0
- package/templates/skills/composer/knowledge/vocal-styles/duet-male-female.md +71 -0
- package/templates/skills/composer/knowledge/vocal-styles/falsetto-male.md +49 -0
- package/templates/skills/composer/knowledge/vocal-styles/female-alto.md +48 -0
- package/templates/skills/composer/knowledge/vocal-styles/female-mezzo.md +47 -0
- package/templates/skills/composer/knowledge/vocal-styles/female-soprano.md +48 -0
- package/templates/skills/composer/knowledge/vocal-styles/male-baritone.md +44 -0
- package/templates/skills/composer/knowledge/vocal-styles/male-bass.md +45 -0
- package/templates/skills/composer/knowledge/vocal-styles/male-tenor.md +41 -0
- package/templates/skills/composer/knowledge/vocal-styles/mugham-style.md +67 -0
- package/templates/skills/composer/knowledge/vocal-styles/rap-flow.md +75 -0
- package/templates/skills/composer/knowledge/vocal-styles/spoken-word.md +52 -0
- package/templates/skills/composer/knowledge/vocal-styles/whisper.md +55 -0
- package/templates/skills/content-strategist/SKILL.md +106 -0
- package/templates/skills/conversion-optimizer/SKILL.md +98 -0
- package/templates/skills/coo-advisor/SKILL.md +92 -0
- package/templates/skills/copywriter-pro/SKILL.md +151 -0
- package/templates/skills/cro-advisor/SKILL.md +105 -0
- package/templates/skills/cross-platform-strategist/SKILL.md +99 -0
- package/templates/skills/cto-advisor/SKILL.md +166 -0
- package/templates/skills/cultural-translator/SKILL.md +96 -0
- package/templates/skills/decision-maker/SKILL.md +145 -0
- package/templates/skills/director/SKILL.md +236 -0
- package/templates/skills/director/knowledge/camera-movements.md +118 -0
- package/templates/skills/director/knowledge/cameras/cameras.json +234 -0
- package/templates/skills/director/knowledge/cameras/cameras.md +53 -0
- package/templates/skills/director/knowledge/cameras/recommendations.md +75 -0
- package/templates/skills/director/knowledge/cinematography.md +87 -0
- package/templates/skills/director/knowledge/composition.md +94 -0
- package/templates/skills/director/knowledge/lens-selection.md +82 -0
- package/templates/skills/director/knowledge/lenses/lenses.json +292 -0
- package/templates/skills/director/knowledge/lenses/lenses.md +87 -0
- package/templates/skills/director/knowledge/lenses/selection-guide.md +105 -0
- package/templates/skills/director/knowledge/lighting.md +120 -0
- package/templates/skills/director/knowledge/personas/_visual-style-index.md +144 -0
- package/templates/skills/director/knowledge/personas/adam-berg.md +30 -0
- package/templates/skills/director/knowledge/personas/agnes-varda.md +30 -0
- package/templates/skills/director/knowledge/personas/alfonso-cuaron.md +30 -0
- package/templates/skills/director/knowledge/personas/andrea-arnold.md +30 -0
- package/templates/skills/director/knowledge/personas/andrew-stanton.md +33 -0
- package/templates/skills/director/knowledge/personas/apichatpong-weerasethakul.md +30 -0
- package/templates/skills/director/knowledge/personas/ari-aster.md +33 -0
- package/templates/skills/director/knowledge/personas/armando-iannucci.md +30 -0
- package/templates/skills/director/knowledge/personas/asif-kapadia.md +30 -0
- package/templates/skills/director/knowledge/personas/barry-jenkins.md +30 -0
- package/templates/skills/director/knowledge/personas/bob-persichetti.md +33 -0
- package/templates/skills/director/knowledge/personas/bong-joon-ho.md +33 -0
- package/templates/skills/director/knowledge/personas/brad-bird.md +30 -0
- package/templates/skills/director/knowledge/personas/cary-joji-fukunaga.md +30 -0
- package/templates/skills/director/knowledge/personas/chloe-zhao.md +30 -0
- package/templates/skills/director/knowledge/personas/chris-cunningham.md +30 -0
- package/templates/skills/director/knowledge/personas/chris-sanders.md +33 -0
- package/templates/skills/director/knowledge/personas/christopher-mcquarrie.md +30 -0
- package/templates/skills/director/knowledge/personas/coen-brothers.md +30 -0
- package/templates/skills/director/knowledge/personas/dardenne-brothers.md +30 -0
- package/templates/skills/director/knowledge/personas/david-robert-mitchell.md +33 -0
- package/templates/skills/director/knowledge/personas/dean-deblois.md +33 -0
- package/templates/skills/director/knowledge/personas/edgar-wright.md +30 -0
- package/templates/skills/director/knowledge/personas/errol-morris.md +30 -0
- package/templates/skills/director/knowledge/personas/fincher.md +33 -0
- package/templates/skills/director/knowledge/personas/floria-sigismondi.md +30 -0
- package/templates/skills/director/knowledge/personas/frederick-wiseman.md +30 -0
- package/templates/skills/director/knowledge/personas/genndy-tartakovsky.md +33 -0
- package/templates/skills/director/knowledge/personas/george-miller.md +30 -0
- package/templates/skills/director/knowledge/personas/greta-gerwig.md +30 -0
- package/templates/skills/director/knowledge/personas/hayao-miyazaki.md +30 -0
- package/templates/skills/director/knowledge/personas/henry-selick.md +33 -0
- package/templates/skills/director/knowledge/personas/hirokazu-kore-eda.md +30 -0
- package/templates/skills/director/knowledge/personas/hou-hsiao-hsien.md +30 -0
- package/templates/skills/director/knowledge/personas/hype-williams.md +30 -0
- package/templates/skills/director/knowledge/personas/james-cameron.md +33 -0
- package/templates/skills/director/knowledge/personas/jeff-nichols.md +33 -0
- package/templates/skills/director/knowledge/personas/joaquim-dos-santos.md +33 -0
- package/templates/skills/director/knowledge/personas/john-woo.md +30 -0
- package/templates/skills/director/knowledge/personas/jon-favreau.md +33 -0
- package/templates/skills/director/knowledge/personas/jonas-akerlund.md +30 -0
- package/templates/skills/director/knowledge/personas/jonathan-glazer.md +30 -0
- package/templates/skills/director/knowledge/personas/jordan-peele.md +30 -0
- package/templates/skills/director/knowledge/personas/joseph-kosinski.md +33 -0
- package/templates/skills/director/knowledge/personas/kathryn-bigelow.md +30 -0
- package/templates/skills/director/knowledge/personas/kubrick.md +33 -0
- package/templates/skills/director/knowledge/personas/kurosawa.md +33 -0
- package/templates/skills/director/knowledge/personas/lance-acord.md +30 -0
- package/templates/skills/director/knowledge/personas/lanthimos.md +33 -0
- package/templates/skills/director/knowledge/personas/lee-unkrich.md +33 -0
- package/templates/skills/director/knowledge/personas/makoto-shinkai.md +33 -0
- package/templates/skills/director/knowledge/personas/mamoru-hosoda.md +33 -0
- package/templates/skills/director/knowledge/personas/mark-romanek.md +30 -0
- package/templates/skills/director/knowledge/personas/martin-scorsese.md +30 -0
- package/templates/skills/director/knowledge/personas/masaaki-yuasa.md +33 -0
- package/templates/skills/director/knowledge/personas/michael-haneke.md +30 -0
- package/templates/skills/director/knowledge/personas/michel-gondry.md +30 -0
- package/templates/skills/director/knowledge/personas/miguel-sapochnik.md +33 -0
- package/templates/skills/director/knowledge/personas/neutral-director.md +32 -0
- package/templates/skills/director/knowledge/personas/nick-park.md +33 -0
- package/templates/skills/director/knowledge/personas/nicolas-winding-refn.md +33 -0
- package/templates/skills/director/knowledge/personas/nolan.md +33 -0
- package/templates/skills/director/knowledge/personas/nuri-bilge-ceylan.md +33 -0
- package/templates/skills/director/knowledge/personas/park-chan-wook.md +33 -0
- package/templates/skills/director/knowledge/personas/paul-thomas-anderson.md +30 -0
- package/templates/skills/director/knowledge/personas/pawel-pawlikowski.md +33 -0
- package/templates/skills/director/knowledge/personas/pedro-almodovar.md +30 -0
- package/templates/skills/director/knowledge/personas/pendleton-ward.md +33 -0
- package/templates/skills/director/knowledge/personas/pete-docter.md +30 -0
- package/templates/skills/director/knowledge/personas/peter-jackson.md +33 -0
- package/templates/skills/director/knowledge/personas/phil-lord-chris-miller.md +33 -0
- package/templates/skills/director/knowledge/personas/phoebe-waller-bridge.md +30 -0
- package/templates/skills/director/knowledge/personas/pierre-coffin.md +33 -0
- package/templates/skills/director/knowledge/personas/quentin-tarantino.md +30 -0
- package/templates/skills/director/knowledge/personas/rebecca-sugar.md +33 -0
- package/templates/skills/director/knowledge/personas/ridley-scott.md +30 -0
- package/templates/skills/director/knowledge/personas/robert-eggers.md +33 -0
- package/templates/skills/director/knowledge/personas/robert-zemeckis.md +33 -0
- package/templates/skills/director/knowledge/personas/roy-andersson.md +33 -0
- package/templates/skills/director/knowledge/personas/satoshi-kon.md +30 -0
- package/templates/skills/director/knowledge/personas/sean-baker.md +30 -0
- package/templates/skills/director/knowledge/personas/sofia-coppola.md +30 -0
- package/templates/skills/director/knowledge/personas/spike-jonze.md +30 -0
- package/templates/skills/director/knowledge/personas/steven-spielberg.md +30 -0
- package/templates/skills/director/knowledge/personas/taika-waititi.md +30 -0
- package/templates/skills/director/knowledge/personas/terrence-malick.md +30 -0
- package/templates/skills/director/knowledge/personas/tim-burton.md +33 -0
- package/templates/skills/director/knowledge/personas/villeneuve.md +33 -0
- package/templates/skills/director/knowledge/personas/vince-gilligan.md +30 -0
- package/templates/skills/director/knowledge/personas/werner-herzog.md +30 -0
- package/templates/skills/director/knowledge/personas/wes-anderson.md +33 -0
- package/templates/skills/director/knowledge/personas/wong-kar-wai.md +33 -0
- package/templates/skills/director/knowledge/personas/zhang-yimou.md +30 -0
- package/templates/skills/doc-writer/SKILL.md +293 -0
- package/templates/skills/e-commerce-optimizer/SKILL.md +120 -0
- package/templates/skills/elevenlabs/SKILL.md +122 -0
- package/templates/skills/elevenlabs/knowledge/audio-tags.md +52 -0
- package/templates/skills/elevenlabs/knowledge/azerbaijani-voice.md +46 -0
- package/templates/skills/elevenlabs/knowledge/sound-effects.md +131 -0
- package/templates/skills/elevenlabs/knowledge/text-to-speech.md +52 -0
- package/templates/skills/elevenlabs/knowledge/voice-changer.md +39 -0
- package/templates/skills/elevenlabs/knowledge/voice-design.md +100 -0
- package/templates/skills/email-sequence-builder/SKILL.md +174 -0
- package/templates/skills/experiment-designer/SKILL.md +95 -0
- package/templates/skills/finance-analyst/SKILL.md +105 -0
- package/templates/skills/founder-mode/SKILL.md +185 -0
- package/templates/skills/gc-advisor/SKILL.md +146 -0
- package/templates/skills/growth-coach/SKILL.md +95 -0
- package/templates/skills/growth-strategist/SKILL.md +181 -0
- package/templates/skills/healthcare-compliance/SKILL.md +109 -0
- package/templates/skills/image-prompt-engineer/SKILL.md +522 -0
- package/templates/skills/image-prompt-engineer/knowledge/character-anatomy.md +378 -0
- package/templates/skills/image-prompt-engineer/knowledge/cinematography.md +111 -0
- package/templates/skills/image-prompt-engineer/knowledge/color-grading.md +172 -0
- package/templates/skills/image-prompt-engineer/knowledge/composition.md +157 -0
- package/templates/skills/image-prompt-engineer/knowledge/consistency-anchors.md +113 -0
- package/templates/skills/image-prompt-engineer/knowledge/general/aspect-ratios.md +185 -0
- package/templates/skills/image-prompt-engineer/knowledge/general/prompt-budget.md +167 -0
- package/templates/skills/image-prompt-engineer/knowledge/lens-selection.md +82 -0
- package/templates/skills/image-prompt-engineer/knowledge/lighting.md +174 -0
- package/templates/skills/image-prompt-engineer/knowledge/location-design.md +236 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/flux-pro.md +87 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/gpt-image-2.md +120 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/ideogram-v3.md +101 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/imagen-4.md +73 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/midjourney-v7.md +85 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/nano-banana.md +128 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/recraft-v3.md +94 -0
- package/templates/skills/image-prompt-engineer/knowledge/models/sd-3.5.md +90 -0
- package/templates/skills/image-prompt-engineer/knowledge/multi-reference-workflows.md +332 -0
- package/templates/skills/image-prompt-engineer/knowledge/physical-realism.md +604 -0
- package/templates/skills/image-validator/SKILL.md +303 -0
- package/templates/skills/image-validator/knowledge/physical-realism-checks.md +704 -0
- package/templates/skills/image-validator/knowledge/prompt-consistency-checks.md +485 -0
- package/templates/skills/image-validator/knowledge/script-consistency-checks.md +279 -0
- package/templates/skills/image-validator/knowledge/test-learnings.md +1816 -0
- package/templates/skills/image-validator/knowledge/validation-protocol.md +245 -0
- package/templates/skills/inbox-triage/SKILL.md +121 -0
- package/templates/skills/incident-commander/SKILL.md +192 -0
- package/templates/skills/instagram-expert/SKILL.md +159 -0
- package/templates/skills/journal-keeper/SKILL.md +139 -0
- package/templates/skills/knowledge-base-builder/SKILL.md +148 -0
- package/templates/skills/kubernetes-operator/SKILL.md +185 -0
- package/templates/skills/landing-page-builder/SKILL.md +125 -0
- package/templates/skills/learning-keeper/SKILL.md +212 -0
- package/templates/skills/legal-researcher/SKILL.md +112 -0
- package/templates/skills/life-coach/SKILL.md +90 -0
- package/templates/skills/linkedin-expert/SKILL.md +176 -0
- package/templates/skills/location-designer/SKILL.md +227 -0
- package/templates/skills/location-designer/knowledge/color-grading.md +124 -0
- package/templates/skills/location-designer/knowledge/composition.md +94 -0
- package/templates/skills/location-designer/knowledge/lighting.md +120 -0
- package/templates/skills/location-designer/knowledge/location-design.md +236 -0
- package/templates/skills/logo-designer/SKILL.md +113 -0
- package/templates/skills/lyricist/SKILL.md +194 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/ghazal-q/311/231z/311/231l.md +154 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/m/303/274st/311/231zad.md +134 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/m/303/274s/311/231dd/311/231s.md +131 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/m/303/274x/311/231mm/311/231s.md +141 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/q/311/231sid/311/231.md +129 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/rubai.md +104 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/t/311/231rcib/311/231nd.md +151 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/classical-forms/t/311/231rkibb/311/231nd.md +141 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/folk-forms/bayat/304/261.md +198 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/folk-forms/divani.md +171 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/folk-forms/g/311/231rayl/304/261.md +164 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/folk-forms/m/303/274x/311/231mm/311/231s-a/305/237/304/261q.md +195 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/folk-forms/qo/305/237ma.md +171 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/folk-forms/ustadnam/311/231.md +183 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/meter/11-heca-qo/305/237ma.md +128 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/meter/14-heca-divani.md +118 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/meter/7-heca-bayat/304/261-mani.md +133 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/meter/8-heca-g/311/231rayl/304/261.md +128 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/meter/heca-v/311/231zni-overview.md +101 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/meter/modern-s/311/231rb/311/231st.md +166 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/meter//311/231ruz-v/311/231zni-overview.md +145 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/modern-forms/modern-s/311/231rb/311/231st-/305/237eir.md +213 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/modern-forms/pop-mahn/304/261-s/303/266zl/311/231ri.md +240 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/modern-forms/rap-hip-hop-azerbaijani.md +274 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/modern-forms/rock-mahn/304/261-s/303/266zl/311/231ri.md +261 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/anar-na/304/237/304/261lbaz.md +62 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/aq/305/237in-yenisey.md +92 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/a/305/237/304/261q-/311/231l/311/231sg/311/231r.md +84 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/b/311/231xtiyar-vahabzad/311/231.md +85 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/cahangir-cahangirov.md +58 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/f/303/274zuli.md +77 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/host-jamal-ali.md +59 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/host-orxan-zeynall/304/261.md +76 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/host-promete.md +59 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/host-qaraqan.md +62 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/meykhana-style.md +85 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/miri-yusif.md +67 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/modern-pop-lirik.md +85 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/m/303/274/305/237fiq.md +85 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/m/311/231mm/311/231d-araz.md +72 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/neutral-azerbaijani-lyricist.md +102 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/nizami-g/311/231nc/311/231vi.md +66 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/n/311/231simi.md +72 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/qism/311/231t.md +80 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/ramiz-r/303/266v/305/237/311/231n.md +79 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/r/311/231sul-rza.md +86 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/sabir.md +77 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/salam-sarvan.md +79 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/s/311/231m/311/231d-vur/304/237un.md +78 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/tofiq-quliyev.md +58 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/vahid-/311/231ziz.md +68 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/vaqif-bayatl/304/261-od/311/231r.md +60 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/vaqif-s/311/231m/311/231do/304/237lu.md +72 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas/x/311/231tai.md +69 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/personas//305/237/311/231hriyar-del-gerani.md +78 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/techniques/alliterasya.md +221 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/techniques/cinas.md +176 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/techniques/istiar/311/231.md +168 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/techniques/m/303/274raci/311/231t.md +223 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/techniques/t/311/231krir-radif.md +220 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/techniques/t/311/231/305/237beh-metafora.md +161 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/themes/ayr/304/261l/304/261q-h/311/231sr/311/231t.md +227 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/themes/ekzistensial-h/311/231yat.md +213 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/themes/e/305/237q-m/311/231h/311/231bb/311/231t.md +229 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/themes/mistik-irfani.md +197 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/themes/m/303/274asir-h/311/231yat.md +225 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/themes/t/311/231bi/311/231t-f/311/231sill/311/231r.md +200 -0
- package/templates/skills/lyricist/knowledge/azerbaijani/themes/v/311/231t/311/231n-az/311/231rbaycan.md +214 -0
- package/templates/skills/lyricist/knowledge/english/overview.md +104 -0
- package/templates/skills/lyricist/knowledge/english/personas/bob-dylan.md +59 -0
- package/templates/skills/lyricist/knowledge/english/personas/bruce-springsteen.md +62 -0
- package/templates/skills/lyricist/knowledge/english/personas/drake.md +60 -0
- package/templates/skills/lyricist/knowledge/english/personas/frank-ocean.md +62 -0
- package/templates/skills/lyricist/knowledge/english/personas/joni-mitchell.md +60 -0
- package/templates/skills/lyricist/knowledge/english/personas/kendrick-lamar.md +61 -0
- package/templates/skills/lyricist/knowledge/english/personas/leonard-cohen.md +61 -0
- package/templates/skills/lyricist/knowledge/english/personas/neutral-english-lyricist.md +50 -0
- package/templates/skills/lyricist/knowledge/english/personas/phoebe-bridgers.md +61 -0
- package/templates/skills/lyricist/knowledge/english/personas/taylor-swift.md +61 -0
- package/templates/skills/lyricist/knowledge/russian/overview.md +88 -0
- package/templates/skills/lyricist/knowledge/russian/personas/neutral-russian-lyricist.md +47 -0
- package/templates/skills/lyricist/knowledge/russian/personas/okudzhava.md +67 -0
- package/templates/skills/lyricist/knowledge/russian/personas/pushkin.md +65 -0
- package/templates/skills/lyricist/knowledge/russian/personas/viktor-tsoi.md +68 -0
- package/templates/skills/lyricist/knowledge/russian/personas/vysotsky.md +69 -0
- package/templates/skills/lyricist/knowledge/russian/personas/yesenin.md +67 -0
- package/templates/skills/lyricist/knowledge/russian/personas/zemfira.md +69 -0
- package/templates/skills/lyricist/knowledge/turkish/overview.md +89 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/baris-manco.md +66 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/modern-turkish-rap.md +98 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/nazim-hikmet.md +69 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/neutral-turkish-lyricist.md +48 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/orhan-gencebay.md +67 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/sezen-aksu-lyric.md +70 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/tarkan.md +67 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/yunus-emre.md +72 -0
- package/templates/skills/lyricist/knowledge/turkish/personas/zeki-muren.md +65 -0
- package/templates/skills/mcp-server-builder/SKILL.md +226 -0
- package/templates/skills/meeting-notes/SKILL.md +155 -0
- package/templates/skills/migration-architect/SKILL.md +147 -0
- package/templates/skills/multilingual-content/SKILL.md +149 -0
- package/templates/skills/multilingual-copywriter/SKILL.md +206 -0
- package/templates/skills/multilingual-copywriter/knowledge/languages/az.md +179 -0
- package/templates/skills/paid-ads-strategist/SKILL.md +107 -0
- package/templates/skills/process-mapper/SKILL.md +114 -0
- package/templates/skills/product-manager/SKILL.md +98 -0
- package/templates/skills/psychologist/SKILL.md +94 -0
- package/templates/skills/rag-architect/SKILL.md +153 -0
- package/templates/skills/real-estate-analyzer/SKILL.md +131 -0
- package/templates/skills/refactor/SKILL.md +195 -0
- package/templates/skills/screenwriter/SKILL.md +248 -0
- package/templates/skills/screenwriter/knowledge/_visual-style-index.md +76 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/_category.md +172 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/15s-pre-roll.md +137 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/30s-tv-spot.md +171 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/60s-brand-film.md +182 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/6s-bumper.md +110 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/90s-manifesto.md +184 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/comparison-ad.md +207 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/holiday-seasonal.md +223 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/influencer-script.md +191 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/product-demo.md +192 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/retargeting.md +205 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/testimonial.md +198 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/tutorial-ad.md +258 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/ugc-style.md +201 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/formats/unboxing.md +224 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/personas/bernbach.md +101 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/personas/clow.md +107 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/personas/modern-viral.md +137 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/personas/neutral-copywriter.md +146 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/personas/ogilvy.md +97 -0
- package/templates/skills/screenwriter/knowledge/categories/advertising/personas/wieden.md +118 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/_category.md +29 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/andrew-stanton.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/brad-bird.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/dave-callaham.md +30 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/hayao-miyazaki.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/henry-selick.md +30 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/makoto-shinkai.md +33 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/mamoru-hosoda.md +31 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/mamoru-oshii.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/michael-arndt.md +31 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/pete-docter.md +33 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/phil-lord-chris-miller.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/animation/personas/wes-anderson.md +35 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/_category.md +84 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/formats/essay-doc.md +172 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/formats/interview-driven.md +140 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/formats/investigative.md +187 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/formats/personal-doc.md +163 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/formats/verite.md +172 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/asif-kapadia.md +150 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/errol-morris-writer.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/errol-morris.md +143 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/herzog.md +148 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/ken-burns.md +141 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/louis-theroux.md +140 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/neutral-documentarian.md +130 -0
- package/templates/skills/screenwriter/knowledge/categories/documentary/personas/werner-herzog-writer.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/film/_category.md +130 -0
- package/templates/skills/screenwriter/knowledge/categories/film/formats/feature-film.md +241 -0
- package/templates/skills/screenwriter/knowledge/categories/film/formats/short-film-1-5min.md +165 -0
- package/templates/skills/screenwriter/knowledge/categories/film/formats/short-film-5-15min.md +198 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/action.md +218 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/biographical.md +204 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/comedy.md +187 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/crime.md +228 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/drama.md +166 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/experimental.md +210 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/fantasy.md +213 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/horror.md +202 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/magical-realism.md +227 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/mystery.md +224 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/noir.md +237 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/romance.md +215 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/sci-fi.md +200 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/surreal.md +246 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/thriller.md +194 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/war.md +255 -0
- package/templates/skills/screenwriter/knowledge/categories/film/genres/western.md +234 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/alex-garland.md +31 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/bong-joon-ho.md +190 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/coens.md +184 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/coppola-sofia.md +159 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/farhadi.md +208 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/fincher.md +141 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/gerwig.md +148 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/hampton-fancher.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/james-cameron.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/jonze.md +172 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/lanthimos.md +192 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/miyazaki.md +164 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/neutral-screenwriter.md +163 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/nolan.md +103 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/nuri-bilge-ceylan.md +191 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/park-chan-wook.md +174 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/pta.md +180 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/scorsese.md +163 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/tarantino.md +150 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/villeneuve.md +129 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/walsh-boyens.md +32 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/wes-anderson.md +149 -0
- package/templates/skills/screenwriter/knowledge/categories/film/personas/yilmaz-guney.md +202 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/_category.md +71 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/formats/concept-mv.md +146 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/formats/hybrid-mv.md +136 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/formats/lyric-driven.md +169 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/formats/narrative-mv.md +131 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/formats/performance-mv.md +169 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/personas/hype-williams.md +131 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/personas/michel-gondry.md +113 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/personas/neutral-mv-director.md +124 -0
- package/templates/skills/screenwriter/knowledge/categories/music-video/personas/spike-jonze.md +117 -0
- package/templates/skills/screenwriter/knowledge/categories/series/_category.md +156 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/bottle-episode.md +198 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/cold-open.md +195 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/flashback-episode.md +202 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/limited-series-episode.md +196 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/mid-season-episode.md +164 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/mid-season-finale.md +151 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/pilot.md +196 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/season-finale.md +157 -0
- package/templates/skills/screenwriter/knowledge/categories/series/formats/series-finale.md +183 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/david-simon.md +131 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/gilligan.md +124 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/larry-david.md +140 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/lindelof.md +146 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/mike-white.md +172 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/neutral-showrunner.md +150 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/shonda.md +126 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/sorkin.md +169 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/tina-fey.md +151 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/waller-bridge.md +195 -0
- package/templates/skills/screenwriter/knowledge/categories/series/personas/weiner.md +163 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/anthology.md +99 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/documentary-series.md +163 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/kids-animated.md +114 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/prestige-drama.md +76 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/procedural.md +95 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/sitcom-multi-cam.md +100 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/sitcom-single-cam.md +85 -0
- package/templates/skills/screenwriter/knowledge/categories/series/sub-types/soap.md +89 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/_category.md +103 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/before-after.md +134 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/educational-explainer.md +129 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/hook-resolve.md +123 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/mini-vlog.md +118 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/pov-narrative.md +124 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/reel-narrative.md +100 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/tiktok-skit.md +130 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/tiktok-storytime.md +110 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/tiktok-trend.md +126 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/voiceover-listicle.md +147 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/formats/youtube-shorts.md +142 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/personas/atmospheric-cinematic.md +55 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/personas/atmospheric-reel.md +46 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/personas/educational-style.md +111 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/personas/khaby-style.md +109 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/personas/mr-beast-style.md +112 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/personas/neutral-creator.md +123 -0
- package/templates/skills/screenwriter/knowledge/categories/short-form/personas/tiktok-storytime-native.md +118 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/_category.md +81 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/commentary.md +159 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/documentary-style.md +180 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/interview-podcast.md +187 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/personal-story.md +186 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/review.md +176 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/sketch-long.md +164 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/tutorial.md +164 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/video-essay.md +187 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/formats/vlog.md +152 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/personas/casey-neistat.md +128 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/personas/nerdwriter.md +116 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/personas/neutral-youtuber.md +138 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/personas/tom-scott.md +120 -0
- package/templates/skills/screenwriter/knowledge/categories/youtube-long/personas/wendover.md +120 -0
- package/templates/skills/screenwriter/knowledge/core/character-arcs.md +164 -0
- package/templates/skills/screenwriter/knowledge/core/dialogue-craft.md +139 -0
- package/templates/skills/screenwriter/knowledge/core/fountain-format.md +193 -0
- package/templates/skills/screenwriter/knowledge/core/general-storytelling.md +117 -0
- package/templates/skills/screenwriter/knowledge/core/pacing.md +143 -0
- package/templates/skills/screenwriter/knowledge/platforms/cinema-theatrical.md +156 -0
- package/templates/skills/screenwriter/knowledge/platforms/instagram-reel.md +145 -0
- package/templates/skills/screenwriter/knowledge/platforms/streaming-hbo-prestige.md +134 -0
- package/templates/skills/screenwriter/knowledge/platforms/streaming-netflix-style.md +118 -0
- package/templates/skills/screenwriter/knowledge/platforms/tiktok-vertical.md +166 -0
- package/templates/skills/screenwriter/knowledge/platforms/tv-broadcast.md +85 -0
- package/templates/skills/screenwriter/knowledge/platforms/web-banner.md +156 -0
- package/templates/skills/screenwriter/knowledge/platforms/youtube.md +137 -0
- package/templates/skills/security-auditor/SKILL.md +223 -0
- package/templates/skills/seo-optimizer/SKILL.md +130 -0
- package/templates/skills/showrunner/SKILL.md +348 -0
- package/templates/skills/showrunner/knowledge/pipeline.md +164 -0
- package/templates/skills/simplify/SKILL.md +160 -0
- package/templates/skills/social-strategist/SKILL.md +130 -0
- package/templates/skills/storyboard-builder/SKILL.md +367 -0
- package/templates/skills/storyboard-builder/knowledge/composition.md +94 -0
- package/templates/skills/storyboard-builder/knowledge/consistency-anchors.md +113 -0
- package/templates/skills/storyboard-builder/knowledge/continuity-rules.md +152 -0
- package/templates/skills/storyboard-builder/knowledge/temporal-consistency.md +115 -0
- package/templates/skills/suno-prompt-engineer/SKILL.md +330 -0
- package/templates/skills/suno-prompt-engineer/knowledge/aiva.md +93 -0
- package/templates/skills/suno-prompt-engineer/knowledge/mubert.md +104 -0
- package/templates/skills/suno-prompt-engineer/knowledge/prompt-templates-library.md +971 -0
- package/templates/skills/suno-prompt-engineer/knowledge/stable-audio.md +102 -0
- package/templates/skills/suno-prompt-engineer/knowledge/suno-v4.md +125 -0
- package/templates/skills/suno-prompt-engineer/knowledge/suno-v5.md +130 -0
- package/templates/skills/suno-prompt-engineer/knowledge/udio.md +103 -0
- package/templates/skills/suno-prompt-engineer/knowledge/validated-styles-database.md +333 -0
- package/templates/skills/test-writer/SKILL.md +303 -0
- package/templates/skills/tiktok-expert/SKILL.md +147 -0
- package/templates/skills/typography-system-designer/SKILL.md +170 -0
- package/templates/skills/ui-ux-pro-max/SKILL.md +150 -0
- package/templates/skills/ux-researcher/SKILL.md +104 -0
- package/templates/skills/verify/SKILL.md +203 -0
- package/templates/skills/video-prompt-engineer/SKILL.md +331 -0
- package/templates/skills/video-prompt-engineer/knowledge/audio-sync.md +124 -0
- package/templates/skills/video-prompt-engineer/knowledge/camera-movements.md +192 -0
- package/templates/skills/video-prompt-engineer/knowledge/continuity-rules.md +152 -0
- package/templates/skills/video-prompt-engineer/knowledge/duration-pacing.md +130 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/hailuo.md +78 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/kling-2.md +280 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/luma.md +97 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/pika-2.md +76 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/runway-gen-4.md +102 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/seedance-2.md +80 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/sora.md +116 -0
- package/templates/skills/video-prompt-engineer/knowledge/models/veo-3.md +95 -0
- package/templates/skills/video-prompt-engineer/knowledge/motion-vs-static.md +229 -0
- package/templates/skills/video-prompt-engineer/knowledge/physical-realism.md +369 -0
- package/templates/skills/video-prompt-engineer/knowledge/physics-rules.md +147 -0
- package/templates/skills/video-prompt-engineer/knowledge/subject-motion.md +220 -0
- package/templates/skills/video-prompt-engineer/knowledge/temporal-consistency.md +215 -0
- package/templates/skills/youtube-expert/SKILL.md +196 -0
- package/templates/skills/youtube-thumbnail-designer/SKILL.md +631 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/color-strategies.md +180 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/ctr-formulas.md +215 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/host-reference-generation.md +193 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/icon-and-graphic-elements.md +201 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/mobile-legibility.md +189 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/professional-techniques.md +507 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/safe-zones.md +172 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/topic-enrichment-research.md +241 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/typography.md +194 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/variant-differentiation.md +262 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/world-class-design-baseline.md +333 -0
- package/templates/skills/youtube-thumbnail-designer/knowledge/youtube-analysis.md +289 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
// ai-bootstrap backup — push ~/.claude/ to a private git repo
|
|
2
|
+
//
|
|
3
|
+
// Subcommands:
|
|
4
|
+
// init — initialize ~/.claude/.git, set remote, first push
|
|
5
|
+
// sync — commit + push current state
|
|
6
|
+
// pull — pull from remote (for restoring on a new machine)
|
|
7
|
+
// status — show backup config + last sync time
|
|
8
|
+
//
|
|
9
|
+
// Auth: uses the system git config (gh auth login, SSH keys, or credential helper).
|
|
10
|
+
// We don't store tokens — the user's git already knows how to auth to their remote.
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { execa } from 'execa';
|
|
13
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { input, confirm } from '@inquirer/prompts';
|
|
16
|
+
import { CLAUDE_DIR, ensureDir } from '../utils/paths.js';
|
|
17
|
+
const BACKUP_CONFIG = join(CLAUDE_DIR, 'backup.json');
|
|
18
|
+
const GITIGNORE_PATH = join(CLAUDE_DIR, '.gitignore');
|
|
19
|
+
function loadBackupConfig() {
|
|
20
|
+
if (!existsSync(BACKUP_CONFIG))
|
|
21
|
+
return null;
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(readFileSync(BACKUP_CONFIG, 'utf-8'));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function saveBackupConfig(cfg) {
|
|
30
|
+
ensureDir(CLAUDE_DIR);
|
|
31
|
+
writeFileSync(BACKUP_CONFIG, JSON.stringify(cfg, null, 2), 'utf-8');
|
|
32
|
+
}
|
|
33
|
+
async function git(args, cwd = CLAUDE_DIR) {
|
|
34
|
+
const res = await execa('git', args, { cwd, reject: false });
|
|
35
|
+
if (res.exitCode !== 0) {
|
|
36
|
+
throw new Error(`git ${args.join(' ')} failed (exit ${res.exitCode}):\n${res.stderr}`);
|
|
37
|
+
}
|
|
38
|
+
return { stdout: res.stdout, stderr: res.stderr };
|
|
39
|
+
}
|
|
40
|
+
async function isGitRepo() {
|
|
41
|
+
if (!existsSync(join(CLAUDE_DIR, '.git')))
|
|
42
|
+
return false;
|
|
43
|
+
try {
|
|
44
|
+
await git(['rev-parse', '--is-inside-work-tree']);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function ensureGitignore() {
|
|
52
|
+
// Never commit MCP credentials or runtime caches
|
|
53
|
+
const lines = [
|
|
54
|
+
'# ai-bootstrap backup .gitignore',
|
|
55
|
+
'# Never commit:',
|
|
56
|
+
'mcp-tracking.json',
|
|
57
|
+
'ai-bootstrap-state.json',
|
|
58
|
+
'backup.json',
|
|
59
|
+
'.DS_Store',
|
|
60
|
+
'node_modules/',
|
|
61
|
+
'*.log',
|
|
62
|
+
'',
|
|
63
|
+
];
|
|
64
|
+
if (!existsSync(GITIGNORE_PATH)) {
|
|
65
|
+
writeFileSync(GITIGNORE_PATH, lines.join('\n'), 'utf-8');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Append missing entries
|
|
69
|
+
const existing = readFileSync(GITIGNORE_PATH, 'utf-8');
|
|
70
|
+
const missing = lines.filter((l) => l && !existing.includes(l));
|
|
71
|
+
if (missing.length > 0) {
|
|
72
|
+
writeFileSync(GITIGNORE_PATH, existing.trimEnd() + '\n' + missing.join('\n') + '\n', 'utf-8');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function printBackupHelp() {
|
|
76
|
+
console.log(`
|
|
77
|
+
${chalk.bold('ai-bootstrap backup')} — sync ~/.claude/ to a private git repo
|
|
78
|
+
|
|
79
|
+
${chalk.bold('Subcommands:')}
|
|
80
|
+
${chalk.cyan('init')} Initialize git repo + set remote + first push
|
|
81
|
+
${chalk.cyan('sync')} Commit + push current state (run after changes)
|
|
82
|
+
${chalk.cyan('pull')} Pull from remote (use on a new machine to restore)
|
|
83
|
+
${chalk.cyan('status')} Show backup config + last sync time
|
|
84
|
+
|
|
85
|
+
${chalk.bold('Auth:')}
|
|
86
|
+
Backup uses your system git auth — either ${chalk.cyan('gh auth login')},
|
|
87
|
+
SSH keys, or git's credential helper. ai-bootstrap does NOT store tokens.
|
|
88
|
+
|
|
89
|
+
${chalk.bold('Privacy:')}
|
|
90
|
+
Always use a PRIVATE repo. The .gitignore excludes MCP credentials
|
|
91
|
+
(mcp-tracking.json) but ${chalk.yellow('~/.ai-bootstrap.env stays outside ~/.claude/')}
|
|
92
|
+
and is never tracked by this backup.
|
|
93
|
+
`);
|
|
94
|
+
}
|
|
95
|
+
async function initBackup() {
|
|
96
|
+
console.log(chalk.bold('\nai-bootstrap backup init\n'));
|
|
97
|
+
ensureDir(CLAUDE_DIR);
|
|
98
|
+
if (await isGitRepo()) {
|
|
99
|
+
console.log(chalk.yellow('⚠ ~/.claude/ artıq git repo-dur. Yenidən init etmək üçün əvvəlcə .git silin.'));
|
|
100
|
+
const existing = loadBackupConfig();
|
|
101
|
+
if (existing) {
|
|
102
|
+
console.log(chalk.dim(` Cari remote: ${existing.remoteUrl}`));
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const remoteUrl = await input({
|
|
107
|
+
message: 'GitHub repo URL? (SSH: git@github.com:user/claude-config.git, HTTPS: https://github.com/user/claude-config.git)',
|
|
108
|
+
validate: (v) => /^(git@github\.com:|https?:\/\/github\.com\/)[\w.-]+\/[\w.-]+(\.git)?$/.test(v.trim()) ||
|
|
109
|
+
'GitHub SSH yaxud HTTPS URL olmalıdır',
|
|
110
|
+
});
|
|
111
|
+
const isPrivate = await confirm({ message: 'Repo private-dir? (HÖKMƏN private olmalıdır)', default: true });
|
|
112
|
+
if (!isPrivate) {
|
|
113
|
+
console.log(chalk.red('✗ Public repo dayandırıldı — ~/.claude/ şəxsi məlumat içərir.'));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const branch = 'main';
|
|
117
|
+
console.log(chalk.dim('\n Git init...'));
|
|
118
|
+
await git(['init', '--initial-branch', branch]);
|
|
119
|
+
ensureGitignore();
|
|
120
|
+
console.log(chalk.dim(' Adding files...'));
|
|
121
|
+
await git(['add', '.']);
|
|
122
|
+
console.log(chalk.dim(' Initial commit...'));
|
|
123
|
+
try {
|
|
124
|
+
await git(['commit', '-m', 'ai-bootstrap: initial backup']);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.log(chalk.yellow(` ⚠ ${err instanceof Error ? err.message : err}`));
|
|
128
|
+
console.log(chalk.dim(' (commit may have failed if no files staged; continuing)'));
|
|
129
|
+
}
|
|
130
|
+
console.log(chalk.dim(' Adding remote...'));
|
|
131
|
+
await git(['remote', 'add', 'origin', remoteUrl.trim()]);
|
|
132
|
+
console.log(chalk.dim(' Pushing to remote...'));
|
|
133
|
+
try {
|
|
134
|
+
await git(['push', '-u', 'origin', branch]);
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
console.error(chalk.red(`\n✗ Push failed: ${err instanceof Error ? err.message : err}`));
|
|
138
|
+
console.log(chalk.dim('\nƏlavə düzəlişlər:'));
|
|
139
|
+
console.log(chalk.dim(' - gh auth login (GitHub CLI)'));
|
|
140
|
+
console.log(chalk.dim(' - SSH key add: github.com/settings/keys'));
|
|
141
|
+
console.log(chalk.dim(' - PAT: git config --global credential.helper store'));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const { stdout: head } = await git(['rev-parse', 'HEAD']);
|
|
145
|
+
saveBackupConfig({
|
|
146
|
+
version: '1.0',
|
|
147
|
+
remoteUrl: remoteUrl.trim(),
|
|
148
|
+
branch,
|
|
149
|
+
privateRepo: true,
|
|
150
|
+
lastSync: new Date().toISOString(),
|
|
151
|
+
lastSyncCommit: head.trim(),
|
|
152
|
+
});
|
|
153
|
+
console.log(chalk.green('\n✓ Backup initialized + first push complete'));
|
|
154
|
+
console.log(chalk.dim(` Remote: ${remoteUrl}`));
|
|
155
|
+
console.log(chalk.dim(` Branch: ${branch}`));
|
|
156
|
+
console.log(chalk.dim(` Next time: ${chalk.cyan('ai-bootstrap backup sync')}`));
|
|
157
|
+
}
|
|
158
|
+
async function syncBackup() {
|
|
159
|
+
console.log(chalk.bold('\nai-bootstrap backup sync\n'));
|
|
160
|
+
const cfg = loadBackupConfig();
|
|
161
|
+
if (!cfg) {
|
|
162
|
+
console.error(chalk.red('✗ Backup configured deyil. Run: ai-bootstrap backup init'));
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
if (!(await isGitRepo())) {
|
|
166
|
+
console.error(chalk.red('✗ ~/.claude/ git repo deyil. Run: ai-bootstrap backup init'));
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
ensureGitignore();
|
|
170
|
+
console.log(chalk.dim(' Staging changes...'));
|
|
171
|
+
await git(['add', '.']);
|
|
172
|
+
const { stdout: status } = await git(['status', '--porcelain']);
|
|
173
|
+
if (!status.trim()) {
|
|
174
|
+
console.log(chalk.dim(' ⚠ Heç bir dəyişiklik yoxdur. Skipping commit.'));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const lines = status.trim().split('\n');
|
|
178
|
+
const msg = `ai-bootstrap sync: ${lines.length} file${lines.length === 1 ? '' : 's'}`;
|
|
179
|
+
console.log(chalk.dim(` Committing (${lines.length} files)...`));
|
|
180
|
+
await git(['commit', '-m', msg]);
|
|
181
|
+
console.log(chalk.dim(' Pushing...'));
|
|
182
|
+
try {
|
|
183
|
+
await git(['push', 'origin', cfg.branch]);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
console.error(chalk.red(`\n✗ Push failed: ${err instanceof Error ? err.message : err}`));
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
const { stdout: head } = await git(['rev-parse', 'HEAD']);
|
|
190
|
+
saveBackupConfig({
|
|
191
|
+
...cfg,
|
|
192
|
+
lastSync: new Date().toISOString(),
|
|
193
|
+
lastSyncCommit: head.trim(),
|
|
194
|
+
});
|
|
195
|
+
console.log(chalk.green(`\n✓ Synced: ${lines.length} files`));
|
|
196
|
+
console.log(chalk.dim(` Commit: ${head.trim().slice(0, 7)}`));
|
|
197
|
+
}
|
|
198
|
+
async function pullBackup() {
|
|
199
|
+
console.log(chalk.bold('\nai-bootstrap backup pull\n'));
|
|
200
|
+
if (await isGitRepo()) {
|
|
201
|
+
const cfg = loadBackupConfig();
|
|
202
|
+
if (!cfg) {
|
|
203
|
+
console.error(chalk.red('✗ Git repo var amma backup.json yoxdur — manual git pull edin'));
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
console.log(chalk.dim(` Pulling from ${cfg.remoteUrl}...`));
|
|
207
|
+
await git(['pull', 'origin', cfg.branch]);
|
|
208
|
+
console.log(chalk.green('✓ Pulled latest from remote'));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const remoteUrl = await input({
|
|
212
|
+
message: 'GitHub repo URL to restore from?',
|
|
213
|
+
validate: (v) => /^(git@github\.com:|https?:\/\/github\.com\/)[\w.-]+\/[\w.-]+(\.git)?$/.test(v.trim()) ||
|
|
214
|
+
'GitHub SSH yaxud HTTPS URL olmalıdır',
|
|
215
|
+
});
|
|
216
|
+
ensureDir(CLAUDE_DIR);
|
|
217
|
+
// Clone into a temp dir, then move .git into CLAUDE_DIR (preserves any existing files)
|
|
218
|
+
console.log(chalk.dim(' Cloning + merging into ~/.claude/...'));
|
|
219
|
+
const tmpDir = `/tmp/ab-restore-${Date.now()}`;
|
|
220
|
+
mkdirSync(tmpDir, { recursive: true });
|
|
221
|
+
await execa('git', ['clone', remoteUrl.trim(), tmpDir], { reject: true });
|
|
222
|
+
await execa('cp', ['-rn', `${tmpDir}/.git`, CLAUDE_DIR], { reject: true });
|
|
223
|
+
await execa('cp', ['-rn', `${tmpDir}/.`, CLAUDE_DIR], { reject: true });
|
|
224
|
+
await execa('rm', ['-rf', tmpDir], { reject: false });
|
|
225
|
+
saveBackupConfig({
|
|
226
|
+
version: '1.0',
|
|
227
|
+
remoteUrl: remoteUrl.trim(),
|
|
228
|
+
branch: 'main',
|
|
229
|
+
privateRepo: true,
|
|
230
|
+
lastSync: new Date().toISOString(),
|
|
231
|
+
});
|
|
232
|
+
console.log(chalk.green('\n✓ Restored ~/.claude/ from backup'));
|
|
233
|
+
console.log(chalk.dim(' Run: ai-bootstrap doctor — to verify'));
|
|
234
|
+
}
|
|
235
|
+
function statusBackup() {
|
|
236
|
+
const cfg = loadBackupConfig();
|
|
237
|
+
if (!cfg) {
|
|
238
|
+
console.log(chalk.dim('\nBackup configured deyil. Run: ai-bootstrap backup init\n'));
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
console.log(chalk.bold('\nai-bootstrap backup status\n'));
|
|
242
|
+
console.log(` Remote: ${chalk.cyan(cfg.remoteUrl)}`);
|
|
243
|
+
console.log(` Branch: ${cfg.branch}`);
|
|
244
|
+
console.log(` Private: ${cfg.privateRepo ? chalk.green('yes') : chalk.red('NO (risky)')}`);
|
|
245
|
+
console.log(` Last sync: ${cfg.lastSync ?? chalk.dim('never')}`);
|
|
246
|
+
console.log(` Last commit: ${cfg.lastSyncCommit?.slice(0, 7) ?? chalk.dim('—')}`);
|
|
247
|
+
console.log('');
|
|
248
|
+
}
|
|
249
|
+
export async function runBackupCommand(args) {
|
|
250
|
+
const sub = args[0];
|
|
251
|
+
if (!sub || sub === 'help' || sub === '--help' || sub === '-h') {
|
|
252
|
+
printBackupHelp();
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (sub === 'init')
|
|
256
|
+
return initBackup();
|
|
257
|
+
if (sub === 'sync')
|
|
258
|
+
return syncBackup();
|
|
259
|
+
if (sub === 'pull')
|
|
260
|
+
return pullBackup();
|
|
261
|
+
if (sub === 'status') {
|
|
262
|
+
statusBackup();
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
console.error(chalk.red(`Unknown backup subcommand: ${sub}`));
|
|
266
|
+
printBackupHelp();
|
|
267
|
+
process.exit(1);
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runDoctor(): void;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// ai-bootstrap doctor — diagnose install health
|
|
2
|
+
// Checks: CLAUDE.md, knowledge files, skills/agents symlinks, settings.json,
|
|
3
|
+
// MCP config validity, missing credentials, broken symlinks.
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { existsSync, readdirSync, readFileSync, lstatSync, realpathSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { HOME, CLAUDE_DIR, KNOWLEDGE_DIR, SKILLS_DIR, AGENTS_DIR, SETTINGS_FILE } from '../utils/paths.js';
|
|
8
|
+
import { getMcpEntry } from '../applier/mcp-catalog.js';
|
|
9
|
+
function checkExists(path, label) {
|
|
10
|
+
if (existsSync(path))
|
|
11
|
+
return { name: label, status: 'pass', detail: path };
|
|
12
|
+
return { name: label, status: 'fail', detail: `Missing: ${path}` };
|
|
13
|
+
}
|
|
14
|
+
function checkClaudeMd() {
|
|
15
|
+
const checks = [];
|
|
16
|
+
const claudeMd = join(CLAUDE_DIR, 'CLAUDE.md');
|
|
17
|
+
if (!existsSync(claudeMd)) {
|
|
18
|
+
checks.push({ name: 'CLAUDE.md', status: 'fail', detail: 'Missing — run: ai-bootstrap' });
|
|
19
|
+
return checks;
|
|
20
|
+
}
|
|
21
|
+
const content = readFileSync(claudeMd, 'utf-8');
|
|
22
|
+
const hasFoundationRules = content.includes('Foundation Rule') || content.includes('docs-first');
|
|
23
|
+
checks.push({
|
|
24
|
+
name: 'CLAUDE.md',
|
|
25
|
+
status: hasFoundationRules ? 'pass' : 'warn',
|
|
26
|
+
detail: hasFoundationRules ? `${content.length} chars` : 'Found but no foundation rules detected',
|
|
27
|
+
});
|
|
28
|
+
return checks;
|
|
29
|
+
}
|
|
30
|
+
function checkKnowledge() {
|
|
31
|
+
if (!existsSync(KNOWLEDGE_DIR)) {
|
|
32
|
+
return [{ name: 'knowledge/', status: 'fail', detail: 'Missing — run: ai-bootstrap' }];
|
|
33
|
+
}
|
|
34
|
+
const expected = ['user-profile.md', 'mistakes-log.md', 'verified-facts.md', 'user-rules.md'];
|
|
35
|
+
const found = readdirSync(KNOWLEDGE_DIR);
|
|
36
|
+
const missing = expected.filter((f) => !found.includes(f));
|
|
37
|
+
if (missing.length > 0) {
|
|
38
|
+
return [{ name: 'knowledge/', status: 'warn', detail: `Missing files: ${missing.join(', ')}` }];
|
|
39
|
+
}
|
|
40
|
+
return [{ name: 'knowledge/', status: 'pass', detail: `${found.length} files` }];
|
|
41
|
+
}
|
|
42
|
+
function checkSymlinks(dir, label) {
|
|
43
|
+
if (!existsSync(dir))
|
|
44
|
+
return [{ name: label, status: 'fail', detail: 'Directory missing' }];
|
|
45
|
+
const checks = [];
|
|
46
|
+
const entries = readdirSync(dir);
|
|
47
|
+
let broken = 0;
|
|
48
|
+
let realFiles = 0;
|
|
49
|
+
let symlinks = 0;
|
|
50
|
+
for (const e of entries) {
|
|
51
|
+
const full = join(dir, e);
|
|
52
|
+
try {
|
|
53
|
+
const stat = lstatSync(full);
|
|
54
|
+
if (stat.isSymbolicLink()) {
|
|
55
|
+
symlinks++;
|
|
56
|
+
try {
|
|
57
|
+
realpathSync(full);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
broken++;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (stat.isDirectory() || stat.isFile()) {
|
|
64
|
+
realFiles++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
broken++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
checks.push({
|
|
72
|
+
name: label,
|
|
73
|
+
status: broken > 0 ? 'fail' : symlinks > 0 ? 'pass' : realFiles > 0 ? 'warn' : 'warn',
|
|
74
|
+
detail: `${symlinks} symlinks, ${realFiles} files${broken > 0 ? `, ${broken} BROKEN` : ''}`,
|
|
75
|
+
});
|
|
76
|
+
return checks;
|
|
77
|
+
}
|
|
78
|
+
function checkSettings() {
|
|
79
|
+
if (!existsSync(SETTINGS_FILE)) {
|
|
80
|
+
return [{ name: 'settings.json', status: 'fail', detail: 'Missing — run: ai-bootstrap' }];
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const settings = JSON.parse(readFileSync(SETTINGS_FILE, 'utf-8'));
|
|
84
|
+
if (typeof settings.permissions !== 'object') {
|
|
85
|
+
return [{ name: 'settings.json', status: 'warn', detail: 'No permissions block' }];
|
|
86
|
+
}
|
|
87
|
+
return [{ name: 'settings.json', status: 'pass', detail: `model=${settings.model ?? 'default'}` }];
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
return [{ name: 'settings.json', status: 'fail', detail: `Parse error: ${err}` }];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function checkMcps() {
|
|
94
|
+
const checks = [];
|
|
95
|
+
const trackingPath = join(CLAUDE_DIR, 'mcp-tracking.json');
|
|
96
|
+
const claudeJsonPath = join(HOME, '.claude.json');
|
|
97
|
+
const envFile = join(HOME, '.ai-bootstrap.env');
|
|
98
|
+
if (!existsSync(trackingPath)) {
|
|
99
|
+
checks.push({ name: 'MCPs', status: 'warn', detail: 'No MCPs configured (optional)' });
|
|
100
|
+
return checks;
|
|
101
|
+
}
|
|
102
|
+
let tracked;
|
|
103
|
+
try {
|
|
104
|
+
tracked = JSON.parse(readFileSync(trackingPath, 'utf-8'));
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return [{ name: 'MCPs', status: 'fail', detail: 'mcp-tracking.json corrupt' }];
|
|
108
|
+
}
|
|
109
|
+
if (!existsSync(claudeJsonPath)) {
|
|
110
|
+
checks.push({ name: 'MCPs', status: 'fail', detail: '~/.claude.json missing — MCPs not wired to Claude Code' });
|
|
111
|
+
return checks;
|
|
112
|
+
}
|
|
113
|
+
let claudeJson = {};
|
|
114
|
+
try {
|
|
115
|
+
claudeJson = JSON.parse(readFileSync(claudeJsonPath, 'utf-8'));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return [{ name: 'MCPs', status: 'fail', detail: '~/.claude.json parse error' }];
|
|
119
|
+
}
|
|
120
|
+
const mcpServers = claudeJson.mcpServers ?? {};
|
|
121
|
+
const trackedIds = tracked.servers.map((s) => s.id);
|
|
122
|
+
const wired = trackedIds.filter((id) => mcpServers[id]);
|
|
123
|
+
const orphans = trackedIds.filter((id) => !mcpServers[id]);
|
|
124
|
+
checks.push({
|
|
125
|
+
name: 'MCPs wired',
|
|
126
|
+
status: orphans.length === 0 ? 'pass' : 'warn',
|
|
127
|
+
detail: `${wired.length}/${trackedIds.length} in ~/.claude.json${orphans.length > 0 ? ` (orphans: ${orphans.join(', ')})` : ''}`,
|
|
128
|
+
});
|
|
129
|
+
// Credentials check
|
|
130
|
+
const envContent = existsSync(envFile) ? readFileSync(envFile, 'utf-8') : '';
|
|
131
|
+
const needCreds = tracked.servers.filter((s) => s.needs_credential);
|
|
132
|
+
const missingCreds = [];
|
|
133
|
+
for (const s of needCreds) {
|
|
134
|
+
const entry = getMcpEntry(s.id);
|
|
135
|
+
if (!entry)
|
|
136
|
+
continue;
|
|
137
|
+
for (const key of entry.credentialKeys) {
|
|
138
|
+
const re = new RegExp(`^${key}=.+`, 'm');
|
|
139
|
+
if (!re.test(envContent)) {
|
|
140
|
+
missingCreds.push(`${s.id}.${key}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (missingCreds.length > 0) {
|
|
145
|
+
checks.push({
|
|
146
|
+
name: 'MCP credentials',
|
|
147
|
+
status: 'warn',
|
|
148
|
+
detail: `${missingCreds.length} missing — run: ai-bootstrap mcp credentials`,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else if (needCreds.length > 0) {
|
|
152
|
+
checks.push({ name: 'MCP credentials', status: 'pass', detail: `All ${needCreds.length} configured` });
|
|
153
|
+
}
|
|
154
|
+
return checks;
|
|
155
|
+
}
|
|
156
|
+
function printCheck(c) {
|
|
157
|
+
const icon = c.status === 'pass' ? chalk.green('✓') : c.status === 'warn' ? chalk.yellow('⚠') : chalk.red('✗');
|
|
158
|
+
const name = c.name.padEnd(22);
|
|
159
|
+
const detail = c.detail ? chalk.dim(c.detail) : '';
|
|
160
|
+
console.log(` ${icon} ${name} ${detail}`);
|
|
161
|
+
}
|
|
162
|
+
export function runDoctor() {
|
|
163
|
+
console.log(chalk.bold('\nai-bootstrap doctor\n'));
|
|
164
|
+
const allChecks = [
|
|
165
|
+
checkExists(CLAUDE_DIR, '~/.claude/'),
|
|
166
|
+
...checkClaudeMd(),
|
|
167
|
+
...checkKnowledge(),
|
|
168
|
+
...checkSymlinks(SKILLS_DIR, 'skills/'),
|
|
169
|
+
...checkSymlinks(AGENTS_DIR, 'agents/'),
|
|
170
|
+
...checkSettings(),
|
|
171
|
+
...checkMcps(),
|
|
172
|
+
].flat();
|
|
173
|
+
for (const c of allChecks) {
|
|
174
|
+
printCheck(c);
|
|
175
|
+
}
|
|
176
|
+
const passed = allChecks.filter((c) => c.status === 'pass').length;
|
|
177
|
+
const warned = allChecks.filter((c) => c.status === 'warn').length;
|
|
178
|
+
const failed = allChecks.filter((c) => c.status === 'fail').length;
|
|
179
|
+
console.log('');
|
|
180
|
+
console.log(`${chalk.green(`${passed} passed`)} · ${chalk.yellow(`${warned} warnings`)} · ${chalk.red(`${failed} failures`)}\n`);
|
|
181
|
+
if (failed > 0) {
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runMcpCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// ai-bootstrap mcp <subcommand>
|
|
2
|
+
//
|
|
3
|
+
// Subcommands:
|
|
4
|
+
// list — list all available MCPs in the catalog
|
|
5
|
+
// installed — list MCPs already configured via ai-bootstrap
|
|
6
|
+
// credentials — interactively fill credentials into ~/.ai-bootstrap.env
|
|
7
|
+
// help — print help
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { existsSync, readFileSync, writeFileSync, chmodSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { input, password } from '@inquirer/prompts';
|
|
12
|
+
import { HOME } from '../utils/paths.js';
|
|
13
|
+
import { MCP_CATALOG, getMcpEntry } from '../applier/mcp-catalog.js';
|
|
14
|
+
import { listInstalledMcps } from '../applier/mcp-config.js';
|
|
15
|
+
const ENV_FILE = join(HOME, '.ai-bootstrap.env');
|
|
16
|
+
function printMcpHelp() {
|
|
17
|
+
console.log(`
|
|
18
|
+
${chalk.bold('ai-bootstrap mcp')} — MCP server management
|
|
19
|
+
|
|
20
|
+
${chalk.bold('Subcommands:')}
|
|
21
|
+
${chalk.cyan('list')} List all available MCPs in the catalog
|
|
22
|
+
${chalk.cyan('installed')} List MCPs configured via ai-bootstrap
|
|
23
|
+
${chalk.cyan('credentials')} Interactively fill credentials into ~/.ai-bootstrap.env
|
|
24
|
+
`);
|
|
25
|
+
}
|
|
26
|
+
function listAll() {
|
|
27
|
+
const byCategory = new Map();
|
|
28
|
+
for (const entry of Object.values(MCP_CATALOG)) {
|
|
29
|
+
const list = byCategory.get(entry.category) ?? [];
|
|
30
|
+
list.push(entry);
|
|
31
|
+
byCategory.set(entry.category, list);
|
|
32
|
+
}
|
|
33
|
+
console.log(chalk.bold(`\n${Object.keys(MCP_CATALOG).length} MCP servers available\n`));
|
|
34
|
+
for (const [cat, entries] of byCategory) {
|
|
35
|
+
console.log(chalk.bold.cyan(` ${cat.toUpperCase()}`));
|
|
36
|
+
for (const e of entries.sort((a, b) => a.id.localeCompare(b.id))) {
|
|
37
|
+
const credIcon = e.credentialKeys.length > 0 ? chalk.yellow(' 🔑') : '';
|
|
38
|
+
console.log(` ${chalk.green(e.id.padEnd(20))} ${e.description}${credIcon}`);
|
|
39
|
+
}
|
|
40
|
+
console.log('');
|
|
41
|
+
}
|
|
42
|
+
console.log(chalk.dim('🔑 = needs credentials. Run: ai-bootstrap mcp credentials\n'));
|
|
43
|
+
}
|
|
44
|
+
function listInstalled() {
|
|
45
|
+
const installed = listInstalledMcps();
|
|
46
|
+
if (installed.length === 0) {
|
|
47
|
+
console.log(chalk.dim('\nHələ heç bir MCP qurulmayıb. Run: ai-bootstrap\n'));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
console.log(chalk.bold(`\n${installed.length} MCP installed via ai-bootstrap:\n`));
|
|
51
|
+
for (const m of installed) {
|
|
52
|
+
const credIcon = m.needs_credential ? chalk.yellow(' 🔑') : '';
|
|
53
|
+
console.log(` ${chalk.green(m.id.padEnd(20))} ${chalk.dim(m.configured_at)}${credIcon}`);
|
|
54
|
+
}
|
|
55
|
+
console.log('');
|
|
56
|
+
}
|
|
57
|
+
function loadEnvFile() {
|
|
58
|
+
if (!existsSync(ENV_FILE))
|
|
59
|
+
return {};
|
|
60
|
+
const env = {};
|
|
61
|
+
for (const line of readFileSync(ENV_FILE, 'utf-8').split('\n')) {
|
|
62
|
+
const m = line.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);
|
|
63
|
+
if (m)
|
|
64
|
+
env[m[1]] = m[2];
|
|
65
|
+
}
|
|
66
|
+
return env;
|
|
67
|
+
}
|
|
68
|
+
function saveEnvFile(env) {
|
|
69
|
+
const lines = [
|
|
70
|
+
'# ai-bootstrap MCP credentials',
|
|
71
|
+
'# Generated by `ai-bootstrap mcp credentials`',
|
|
72
|
+
'# Source this in your shell: source ~/.ai-bootstrap.env',
|
|
73
|
+
'# Then Claude Code will pick up ${VAR_NAME} substitutions in ~/.claude.json mcpServers',
|
|
74
|
+
'',
|
|
75
|
+
];
|
|
76
|
+
for (const [key, value] of Object.entries(env).sort()) {
|
|
77
|
+
lines.push(`${key}=${value}`);
|
|
78
|
+
}
|
|
79
|
+
writeFileSync(ENV_FILE, lines.join('\n') + '\n', 'utf-8');
|
|
80
|
+
chmodSync(ENV_FILE, 0o600);
|
|
81
|
+
}
|
|
82
|
+
async function collectCredentials() {
|
|
83
|
+
const installed = listInstalledMcps();
|
|
84
|
+
const needCreds = installed.filter((m) => m.needs_credential);
|
|
85
|
+
if (needCreds.length === 0) {
|
|
86
|
+
console.log(chalk.dim('\nHeç bir MCP credential gözləmir.\n'));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
console.log(chalk.bold(`\n${needCreds.length} MCP credential gözləyir.\n`));
|
|
90
|
+
console.log(chalk.dim(`Credentials saxlanılacaq: ${ENV_FILE} (chmod 600)\n`));
|
|
91
|
+
const env = loadEnvFile();
|
|
92
|
+
for (const tracked of needCreds) {
|
|
93
|
+
const catalog = getMcpEntry(tracked.id);
|
|
94
|
+
if (!catalog)
|
|
95
|
+
continue;
|
|
96
|
+
console.log(chalk.bold(`\n${chalk.cyan(catalog.name)} (${catalog.id})`));
|
|
97
|
+
if (catalog.credentialHelp) {
|
|
98
|
+
console.log(chalk.dim(` ${catalog.credentialHelp}`));
|
|
99
|
+
}
|
|
100
|
+
for (const key of catalog.credentialKeys) {
|
|
101
|
+
const current = env[key];
|
|
102
|
+
if (current) {
|
|
103
|
+
console.log(chalk.dim(` ${key} = ${current.slice(0, 6)}*** (already set, skipping)`));
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const isSecret = /TOKEN|KEY|SECRET|PASSWORD/i.test(key);
|
|
107
|
+
const value = isSecret
|
|
108
|
+
? await password({ message: ` ${key}:`, mask: '•' })
|
|
109
|
+
: await input({ message: ` ${key}:` });
|
|
110
|
+
if (value && value.trim().length > 0) {
|
|
111
|
+
env[key] = value.trim();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
saveEnvFile(env);
|
|
116
|
+
console.log(chalk.green(`\n✓ Credentials saxlanıldı: ${ENV_FILE}\n`));
|
|
117
|
+
console.log(chalk.dim('Shell-də yüklə (qoy ~/.zshrc və ya ~/.bashrc-ə):'));
|
|
118
|
+
console.log(chalk.cyan(` set -a; source ${ENV_FILE}; set +a\n`));
|
|
119
|
+
}
|
|
120
|
+
export async function runMcpCommand(args) {
|
|
121
|
+
const sub = args[0];
|
|
122
|
+
if (!sub || sub === 'help' || sub === '--help' || sub === '-h') {
|
|
123
|
+
printMcpHelp();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (sub === 'list') {
|
|
127
|
+
listAll();
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (sub === 'installed') {
|
|
131
|
+
listInstalled();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (sub === 'credentials' || sub === 'creds') {
|
|
135
|
+
await collectCredentials();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
console.error(chalk.red(`Unknown mcp subcommand: ${sub}`));
|
|
139
|
+
printMcpHelp();
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runTelemetryCommand(args: string[]): Promise<void>;
|