@stacksjs/defaults 0.75.109 → 0.75.110
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/ai/AGENTS.md +36 -1
- package/ai/README.md +39 -1
- package/ai/skills/stacks-actions/SKILL.md +64 -6
- package/ai/skills/stacks-ai/SKILL.md +36 -10
- package/ai/skills/stacks-alias/SKILL.md +40 -85
- package/ai/skills/stacks-analytics/SKILL.md +23 -3
- package/ai/skills/stacks-arrays/SKILL.md +35 -9
- package/ai/skills/stacks-audio/SKILL.md +34 -0
- package/ai/skills/stacks-auth/ACCOUNT-WORKFLOWS.md +113 -0
- package/ai/skills/stacks-auth/SKILL.md +90 -57
- package/ai/skills/stacks-auto-imports/SKILL.md +80 -138
- package/ai/skills/stacks-browser/SKILL.md +82 -138
- package/ai/skills/stacks-browser-extension/SKILL.md +40 -0
- package/ai/skills/stacks-buddy/SKILL.md +2 -0
- package/ai/skills/stacks-build/SKILL.md +42 -23
- package/ai/skills/stacks-cache/SKILL.md +75 -115
- package/ai/skills/stacks-calendar/SKILL.md +61 -97
- package/ai/skills/stacks-charts/SKILL.md +34 -0
- package/ai/skills/stacks-chat/SKILL.md +18 -2
- package/ai/skills/stacks-chief-of-staff/LICENSE +21 -0
- package/ai/skills/stacks-chief-of-staff/NOTICE.md +10 -0
- package/ai/skills/stacks-chief-of-staff/PLAYBOOK.md +42 -0
- package/ai/skills/stacks-chief-of-staff/SKILL.md +28 -0
- package/ai/skills/stacks-cli/SKILL.md +23 -7
- package/ai/skills/stacks-cloud/SKILL.md +37 -20
- package/ai/skills/stacks-cms/PAGES.md +70 -0
- package/ai/skills/stacks-cms/SKILL.md +30 -18
- package/ai/skills/stacks-codebase-design/LICENSE +21 -0
- package/ai/skills/stacks-codebase-design/NOTICE.md +10 -0
- package/ai/skills/stacks-codebase-design/SKILL.md +10 -0
- package/ai/skills/stacks-collections/SKILL.md +25 -8
- package/ai/skills/stacks-commerce/SKILL.md +25 -1
- package/ai/skills/stacks-composables/BROWSER.md +97 -0
- package/ai/skills/stacks-composables/SKILL.md +87 -181
- package/ai/skills/stacks-config/SKILL.md +108 -162
- package/ai/skills/stacks-cron/SKILL.md +27 -13
- package/ai/skills/stacks-crosswind/SKILL.md +62 -167
- package/ai/skills/stacks-dashboard/SKILL.md +8 -0
- package/ai/skills/stacks-database/SKILL.md +98 -68
- package/ai/skills/stacks-datetime/SKILL.md +21 -5
- package/ai/skills/stacks-deploy/SKILL.md +17 -1
- package/ai/skills/stacks-design-brutalist/SKILL.md +1 -1
- package/ai/skills/stacks-design-minimalist/SKILL.md +17 -3
- package/ai/skills/stacks-design-soft/SKILL.md +16 -4
- package/ai/skills/stacks-design-taste/SKILL.md +55 -35
- package/ai/skills/stacks-design-taste-codex/SKILL.md +5 -5
- package/ai/skills/stacks-desktop/SKILL.md +22 -16
- package/ai/skills/stacks-development/SKILL.md +19 -8
- package/ai/skills/stacks-dns/SKILL.md +72 -139
- package/ai/skills/stacks-domain-modeling/ADR-FORMAT.md +47 -0
- package/ai/skills/stacks-domain-modeling/GLOSSARY-FORMAT.md +60 -0
- package/ai/skills/stacks-domain-modeling/LICENSE +21 -0
- package/ai/skills/stacks-domain-modeling/NOTICE.md +10 -0
- package/ai/skills/stacks-domain-modeling/SKILL.md +11 -0
- package/ai/skills/stacks-email/DELIVERY-CONTROLS.md +84 -0
- package/ai/skills/stacks-email/SKILL.md +18 -2
- package/ai/skills/stacks-enums/SKILL.md +28 -81
- package/ai/skills/stacks-env/SKILL.md +23 -15
- package/ai/skills/stacks-error-handling/SKILL.md +68 -121
- package/ai/skills/stacks-events/SKILL.md +83 -264
- package/ai/skills/stacks-faker/SKILL.md +28 -13
- package/ai/skills/stacks-feature-flags/SKILL.md +41 -0
- package/ai/skills/stacks-features/SKILL.md +46 -0
- package/ai/skills/stacks-flow/ENGINEERING.md +84 -0
- package/ai/skills/stacks-flow/LICENSE +21 -0
- package/ai/skills/stacks-flow/NOTICE.md +10 -0
- package/ai/skills/stacks-flow/SKILL.md +32 -0
- package/ai/skills/stacks-flow/upstream-skills.json +726 -0
- package/ai/skills/stacks-forms/SKILL.md +44 -0
- package/ai/skills/stacks-git/LICENSE +21 -0
- package/ai/skills/stacks-git/NOTICE.md +10 -0
- package/ai/skills/stacks-git/SKILL.md +11 -0
- package/ai/skills/stacks-grill-with-docs/LICENSE +21 -0
- package/ai/skills/stacks-grill-with-docs/NOTICE.md +10 -0
- package/ai/skills/stacks-grill-with-docs/PLAYBOOK.md +4 -0
- package/ai/skills/stacks-grill-with-docs/SKILL.md +24 -0
- package/ai/skills/stacks-grilling/LICENSE +21 -0
- package/ai/skills/stacks-grilling/NOTICE.md +17 -0
- package/ai/skills/stacks-grilling/SKILL.md +7 -0
- package/ai/skills/stacks-guard/LICENSE +21 -0
- package/ai/skills/stacks-guard/NOTICE.md +10 -0
- package/ai/skills/stacks-guard/SKILL.md +6 -0
- package/ai/skills/stacks-handoff/LICENSE +21 -0
- package/ai/skills/stacks-handoff/NOTICE.md +17 -0
- package/ai/skills/stacks-handoff/SKILL.md +8 -0
- package/ai/skills/stacks-http/SKILL.md +64 -297
- package/ai/skills/stacks-humanizer/LICENSE +21 -0
- package/ai/skills/stacks-humanizer/NOTICE.md +19 -0
- package/ai/skills/stacks-humanizer/SKILL.md +85 -0
- package/ai/skills/stacks-humanizer/references/patterns.md +350 -0
- package/ai/skills/stacks-i18n/SKILL.md +33 -8
- package/ai/skills/stacks-image/SKILL.md +37 -0
- package/ai/skills/stacks-image-to-code/SKILL.md +11 -6
- package/ai/skills/stacks-implement/LICENSE +21 -0
- package/ai/skills/stacks-implement/NOTICE.md +10 -0
- package/ai/skills/stacks-implement/PLAYBOOK.md +14 -0
- package/ai/skills/stacks-implement/SKILL.md +24 -0
- package/ai/skills/stacks-implement-spec/LICENSE +21 -0
- package/ai/skills/stacks-implement-spec/NOTICE.md +10 -0
- package/ai/skills/stacks-implement-spec/PLAYBOOK.md +37 -0
- package/ai/skills/stacks-implement-spec/SKILL.md +24 -0
- package/ai/skills/stacks-improve-codebase-architecture/HTML-REPORT.md +126 -0
- package/ai/skills/stacks-improve-codebase-architecture/LICENSE +21 -0
- package/ai/skills/stacks-improve-codebase-architecture/NOTICE.md +10 -0
- package/ai/skills/stacks-improve-codebase-architecture/PLAYBOOK.md +68 -0
- package/ai/skills/stacks-improve-codebase-architecture/SKILL.md +24 -0
- package/ai/skills/stacks-investigate/LICENSE +21 -0
- package/ai/skills/stacks-investigate/NOTICE.md +10 -0
- package/ai/skills/stacks-investigate/SKILL.md +6 -0
- package/ai/skills/stacks-jobs/SKILL.md +29 -8
- package/ai/skills/stacks-listeners/SKILL.md +13 -5
- package/ai/skills/stacks-logging/SKILL.md +71 -68
- package/ai/skills/stacks-loop/LICENSE +21 -0
- package/ai/skills/stacks-loop/NOTICE.md +10 -0
- package/ai/skills/stacks-loop/PLAYBOOK.md +28 -0
- package/ai/skills/stacks-loop/SKILL.md +28 -0
- package/ai/skills/stacks-mail/SKILL.md +46 -7
- package/ai/skills/stacks-marketing/CATALOG.md +60 -0
- package/ai/skills/stacks-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing/NOTICE.md +5 -0
- package/ai/skills/stacks-marketing/SKILL.md +27 -0
- package/ai/skills/stacks-marketing/WORKFLOW.md +83 -0
- package/ai/skills/stacks-marketing-ab-testing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ab-testing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ab-testing/PLAYBOOK.md +352 -0
- package/ai/skills/stacks-marketing-ab-testing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ab-testing/evals/evals.json +116 -0
- package/ai/skills/stacks-marketing-ab-testing/references/sample-size-guide.md +263 -0
- package/ai/skills/stacks-marketing-ab-testing/references/test-templates.md +277 -0
- package/ai/skills/stacks-marketing-ad-creative/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ad-creative/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ad-creative/PLAYBOOK.md +434 -0
- package/ai/skills/stacks-marketing-ad-creative/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ad-creative/assets/creative-review-template.html +432 -0
- package/ai/skills/stacks-marketing-ad-creative/evals/evals.json +280 -0
- package/ai/skills/stacks-marketing-ad-creative/references/awareness-headlines.md +54 -0
- package/ai/skills/stacks-marketing-ad-creative/references/creative-review-page.md +109 -0
- package/ai/skills/stacks-marketing-ad-creative/references/creative-roadmap.md +118 -0
- package/ai/skills/stacks-marketing-ad-creative/references/generative-tools.md +613 -0
- package/ai/skills/stacks-marketing-ad-creative/references/hook-system.md +115 -0
- package/ai/skills/stacks-marketing-ad-creative/references/imessage-video-ads.md +197 -0
- package/ai/skills/stacks-marketing-ad-creative/references/meta-creative-formats.md +114 -0
- package/ai/skills/stacks-marketing-ad-creative/references/motion-video-ads.md +126 -0
- package/ai/skills/stacks-marketing-ad-creative/references/platform-specs.md +213 -0
- package/ai/skills/stacks-marketing-ad-creative/references/short-form-video-specs.md +213 -0
- package/ai/skills/stacks-marketing-ad-creative/references/static-ad-templates.md +308 -0
- package/ai/skills/stacks-marketing-ads/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ads/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ads/PLAYBOOK.md +464 -0
- package/ai/skills/stacks-marketing-ads/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ads/evals/evals.json +192 -0
- package/ai/skills/stacks-marketing-ads/references/abm-playbook.md +101 -0
- package/ai/skills/stacks-marketing-ads/references/ad-copy-templates.md +207 -0
- package/ai/skills/stacks-marketing-ads/references/audience-targeting.md +243 -0
- package/ai/skills/stacks-marketing-ads/references/audit-guardrails.md +83 -0
- package/ai/skills/stacks-marketing-ads/references/b2b-paid-playbook.md +115 -0
- package/ai/skills/stacks-marketing-ads/references/conversion-tracking.md +361 -0
- package/ai/skills/stacks-marketing-ads/references/creative-research-automation.md +103 -0
- package/ai/skills/stacks-marketing-ads/references/google-ads-audit-checklist.md +84 -0
- package/ai/skills/stacks-marketing-ads/references/google-search-playbook.md +120 -0
- package/ai/skills/stacks-marketing-ads/references/linkedin-b2b-playbook.md +107 -0
- package/ai/skills/stacks-marketing-ads/references/meta-andromeda-playbook.md +44 -0
- package/ai/skills/stacks-marketing-ads/references/meta-decision-system.md +176 -0
- package/ai/skills/stacks-marketing-ads/references/payback-period.md +73 -0
- package/ai/skills/stacks-marketing-ads/references/platform-setup-checklists.md +277 -0
- package/ai/skills/stacks-marketing-ads/references/reading-google-ads-data.md +121 -0
- package/ai/skills/stacks-marketing-ads/references/rsa-output-spec.md +88 -0
- package/ai/skills/stacks-marketing-ai-seo/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ai-seo/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ai-seo/PLAYBOOK.md +494 -0
- package/ai/skills/stacks-marketing-ai-seo/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ai-seo/evals/evals.json +163 -0
- package/ai/skills/stacks-marketing-ai-seo/references/agent-readiness.md +66 -0
- package/ai/skills/stacks-marketing-ai-seo/references/citations-vs-recommendations.md +89 -0
- package/ai/skills/stacks-marketing-ai-seo/references/content-patterns.md +287 -0
- package/ai/skills/stacks-marketing-ai-seo/references/content-types.md +82 -0
- package/ai/skills/stacks-marketing-ai-seo/references/format-volatility.md +95 -0
- package/ai/skills/stacks-marketing-ai-seo/references/linkedin-ai-citations.md +131 -0
- package/ai/skills/stacks-marketing-ai-seo/references/okf.md +104 -0
- package/ai/skills/stacks-marketing-ai-seo/references/platform-ranking-factors.md +167 -0
- package/ai/skills/stacks-marketing-ai-seo/references/positioning-and-consensus.md +102 -0
- package/ai/skills/stacks-marketing-ai-seo/references/youtube-ai-citations.md +66 -0
- package/ai/skills/stacks-marketing-analytics/LICENSE +21 -0
- package/ai/skills/stacks-marketing-analytics/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-analytics/PLAYBOOK.md +307 -0
- package/ai/skills/stacks-marketing-analytics/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-analytics/evals/evals.json +117 -0
- package/ai/skills/stacks-marketing-analytics/references/event-library.md +260 -0
- package/ai/skills/stacks-marketing-analytics/references/ga4-implementation.md +304 -0
- package/ai/skills/stacks-marketing-analytics/references/gtm-implementation.md +396 -0
- package/ai/skills/stacks-marketing-aso/LICENSE +21 -0
- package/ai/skills/stacks-marketing-aso/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-aso/PLAYBOOK.md +310 -0
- package/ai/skills/stacks-marketing-aso/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-aso/evals/evals.json +104 -0
- package/ai/skills/stacks-marketing-aso/references/apple-specs.md +107 -0
- package/ai/skills/stacks-marketing-aso/references/benchmarks.md +131 -0
- package/ai/skills/stacks-marketing-aso/references/google-play-specs.md +135 -0
- package/ai/skills/stacks-marketing-aso/references/report-template.md +213 -0
- package/ai/skills/stacks-marketing-aso/references/scoring-criteria.md +213 -0
- package/ai/skills/stacks-marketing-attribution/LICENSE +21 -0
- package/ai/skills/stacks-marketing-attribution/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-attribution/PLAYBOOK.md +223 -0
- package/ai/skills/stacks-marketing-attribution/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-attribution/evals/evals.json +128 -0
- package/ai/skills/stacks-marketing-attribution/references/attribution-models.md +74 -0
- package/ai/skills/stacks-marketing-attribution/references/by-business-type.md +54 -0
- package/ai/skills/stacks-marketing-attribution/references/first-party-tracking.md +253 -0
- package/ai/skills/stacks-marketing-attribution/references/measurement-paradigms.md +85 -0
- package/ai/skills/stacks-marketing-churn-prevention/LICENSE +21 -0
- package/ai/skills/stacks-marketing-churn-prevention/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-churn-prevention/PLAYBOOK.md +420 -0
- package/ai/skills/stacks-marketing-churn-prevention/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-churn-prevention/evals/evals.json +107 -0
- package/ai/skills/stacks-marketing-churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/ai/skills/stacks-marketing-churn-prevention/references/dunning-playbook.md +413 -0
- package/ai/skills/stacks-marketing-co-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-co-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-co-marketing/PLAYBOOK.md +306 -0
- package/ai/skills/stacks-marketing-co-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-co-marketing/evals/evals.json +98 -0
- package/ai/skills/stacks-marketing-co-marketing/references/partnership-types.md +100 -0
- package/ai/skills/stacks-marketing-cold-email/LICENSE +21 -0
- package/ai/skills/stacks-marketing-cold-email/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-cold-email/PLAYBOOK.md +210 -0
- package/ai/skills/stacks-marketing-cold-email/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-cold-email/evals/evals.json +137 -0
- package/ai/skills/stacks-marketing-cold-email/references/benchmarks.md +87 -0
- package/ai/skills/stacks-marketing-cold-email/references/deliverability.md +111 -0
- package/ai/skills/stacks-marketing-cold-email/references/follow-up-sequences.md +81 -0
- package/ai/skills/stacks-marketing-cold-email/references/frameworks.md +90 -0
- package/ai/skills/stacks-marketing-cold-email/references/linkedin-outreach.md +91 -0
- package/ai/skills/stacks-marketing-cold-email/references/multichannel-cadence.md +79 -0
- package/ai/skills/stacks-marketing-cold-email/references/outbound-plays.md +88 -0
- package/ai/skills/stacks-marketing-cold-email/references/personalization.md +90 -0
- package/ai/skills/stacks-marketing-cold-email/references/reply-handling.md +65 -0
- package/ai/skills/stacks-marketing-cold-email/references/subject-lines.md +53 -0
- package/ai/skills/stacks-marketing-community-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-community-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-community-marketing/PLAYBOOK.md +171 -0
- package/ai/skills/stacks-marketing-community-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-community-marketing/evals/evals.json +103 -0
- package/ai/skills/stacks-marketing-community-marketing/references/community-models.md +63 -0
- package/ai/skills/stacks-marketing-competitor-profiling/LICENSE +21 -0
- package/ai/skills/stacks-marketing-competitor-profiling/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-competitor-profiling/PLAYBOOK.md +436 -0
- package/ai/skills/stacks-marketing-competitor-profiling/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-competitor-profiling/evals/evals.json +97 -0
- package/ai/skills/stacks-marketing-competitor-profiling/references/templates.md +167 -0
- package/ai/skills/stacks-marketing-competitor-profiling/references/tool-reference.md +314 -0
- package/ai/skills/stacks-marketing-competitors/LICENSE +21 -0
- package/ai/skills/stacks-marketing-competitors/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-competitors/PLAYBOOK.md +283 -0
- package/ai/skills/stacks-marketing-competitors/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-competitors/evals/evals.json +119 -0
- package/ai/skills/stacks-marketing-competitors/references/content-architecture.md +277 -0
- package/ai/skills/stacks-marketing-competitors/references/templates.md +226 -0
- package/ai/skills/stacks-marketing-content-strategy/LICENSE +21 -0
- package/ai/skills/stacks-marketing-content-strategy/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-content-strategy/PLAYBOOK.md +437 -0
- package/ai/skills/stacks-marketing-content-strategy/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-content-strategy/evals/evals.json +116 -0
- package/ai/skills/stacks-marketing-content-strategy/references/content-distribution.md +83 -0
- package/ai/skills/stacks-marketing-content-strategy/references/headless-cms.md +194 -0
- package/ai/skills/stacks-marketing-copy-editing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-copy-editing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-copy-editing/PLAYBOOK.md +485 -0
- package/ai/skills/stacks-marketing-copy-editing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-copy-editing/evals/evals.json +117 -0
- package/ai/skills/stacks-marketing-copy-editing/references/checklist.md +77 -0
- package/ai/skills/stacks-marketing-copy-editing/references/content-refresh.md +71 -0
- package/ai/skills/stacks-marketing-copy-editing/references/plain-english-alternatives.md +394 -0
- package/ai/skills/stacks-marketing-copywriting/LICENSE +21 -0
- package/ai/skills/stacks-marketing-copywriting/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-copywriting/PLAYBOOK.md +282 -0
- package/ai/skills/stacks-marketing-copywriting/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-copywriting/evals/evals.json +140 -0
- package/ai/skills/stacks-marketing-copywriting/references/ai-tells.md +261 -0
- package/ai/skills/stacks-marketing-copywriting/references/copy-frameworks.md +432 -0
- package/ai/skills/stacks-marketing-copywriting/references/natural-transitions.md +256 -0
- package/ai/skills/stacks-marketing-council/LICENSE +21 -0
- package/ai/skills/stacks-marketing-council/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-council/PLAYBOOK.md +157 -0
- package/ai/skills/stacks-marketing-council/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-council/evals/evals.json +70 -0
- package/ai/skills/stacks-marketing-council/references/advisor-template.md +51 -0
- package/ai/skills/stacks-marketing-council/references/advisors/alex-hormozi.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/ann-handley.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/april-dunford.md +41 -0
- package/ai/skills/stacks-marketing-council/references/advisors/byron-sharp.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/claude-hopkins.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/david-ogilvy.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/eugene-schwartz.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/gary-halbert.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/gary-vaynerchuk.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/rory-sutherland.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/russell-brunson.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/seth-godin.md +43 -0
- package/ai/skills/stacks-marketing-cro/LICENSE +21 -0
- package/ai/skills/stacks-marketing-cro/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-cro/PLAYBOOK.md +194 -0
- package/ai/skills/stacks-marketing-cro/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-cro/evals/evals.json +111 -0
- package/ai/skills/stacks-marketing-cro/references/experiments.md +248 -0
- package/ai/skills/stacks-marketing-cro/references/form.md +422 -0
- package/ai/skills/stacks-marketing-customer-research/LICENSE +21 -0
- package/ai/skills/stacks-marketing-customer-research/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-customer-research/PLAYBOOK.md +304 -0
- package/ai/skills/stacks-marketing-customer-research/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-customer-research/evals/evals.json +176 -0
- package/ai/skills/stacks-marketing-customer-research/references/interviews-and-surveys.md +155 -0
- package/ai/skills/stacks-marketing-customer-research/references/source-guides.md +401 -0
- package/ai/skills/stacks-marketing-directory-submissions/LICENSE +21 -0
- package/ai/skills/stacks-marketing-directory-submissions/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-directory-submissions/PLAYBOOK.md +397 -0
- package/ai/skills/stacks-marketing-directory-submissions/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-directory-submissions/evals/evals.json +121 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/directory-list.md +545 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/positioning-variations.md +232 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/submission-tracker-template.csv +272 -0
- package/ai/skills/stacks-marketing-emails/LICENSE +21 -0
- package/ai/skills/stacks-marketing-emails/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-emails/PLAYBOOK.md +336 -0
- package/ai/skills/stacks-marketing-emails/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-emails/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-emails/references/copy-guidelines.md +113 -0
- package/ai/skills/stacks-marketing-emails/references/email-types.md +515 -0
- package/ai/skills/stacks-marketing-emails/references/sequence-templates.md +168 -0
- package/ai/skills/stacks-marketing-events/LICENSE +21 -0
- package/ai/skills/stacks-marketing-events/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-events/PLAYBOOK.md +127 -0
- package/ai/skills/stacks-marketing-events/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-events/evals/evals.json +92 -0
- package/ai/skills/stacks-marketing-events/references/event-portfolio-strategy.md +80 -0
- package/ai/skills/stacks-marketing-events/references/speaking.md +49 -0
- package/ai/skills/stacks-marketing-events/references/sponsorship-roi.md +57 -0
- package/ai/skills/stacks-marketing-events/references/webinar-funnel.md +88 -0
- package/ai/skills/stacks-marketing-free-tools/LICENSE +21 -0
- package/ai/skills/stacks-marketing-free-tools/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-free-tools/PLAYBOOK.md +186 -0
- package/ai/skills/stacks-marketing-free-tools/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-free-tools/evals/evals.json +103 -0
- package/ai/skills/stacks-marketing-free-tools/references/tool-benchmarks.md +35 -0
- package/ai/skills/stacks-marketing-free-tools/references/tool-types.md +217 -0
- package/ai/skills/stacks-marketing-ideas/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ideas/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ideas/PLAYBOOK.md +167 -0
- package/ai/skills/stacks-marketing-ideas/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ideas/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-ideas/references/guerrilla-marketing.md +56 -0
- package/ai/skills/stacks-marketing-ideas/references/ideas-by-category.md +366 -0
- package/ai/skills/stacks-marketing-image/LICENSE +21 -0
- package/ai/skills/stacks-marketing-image/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-image/PLAYBOOK.md +336 -0
- package/ai/skills/stacks-marketing-image/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-image/evals/evals.json +89 -0
- package/ai/skills/stacks-marketing-image/references/ai-image-prompting.md +229 -0
- package/ai/skills/stacks-marketing-influencer-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-influencer-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-influencer-marketing/PLAYBOOK.md +198 -0
- package/ai/skills/stacks-marketing-influencer-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-influencer-marketing/evals/evals.json +89 -0
- package/ai/skills/stacks-marketing-influencer-marketing/references/ugc-creator-program.md +91 -0
- package/ai/skills/stacks-marketing-launch/LICENSE +21 -0
- package/ai/skills/stacks-marketing-launch/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-launch/PLAYBOOK.md +381 -0
- package/ai/skills/stacks-marketing-launch/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-launch/evals/evals.json +135 -0
- package/ai/skills/stacks-marketing-launch/references/shipped-changes.md +84 -0
- package/ai/skills/stacks-marketing-launch/references/site-launch-qa.md +57 -0
- package/ai/skills/stacks-marketing-lead-magnets/LICENSE +21 -0
- package/ai/skills/stacks-marketing-lead-magnets/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-lead-magnets/PLAYBOOK.md +308 -0
- package/ai/skills/stacks-marketing-lead-magnets/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-lead-magnets/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/benchmarks.md +129 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-corpus-design.md +89 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-release.md +71 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill.md +109 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/format-guide.md +196 -0
- package/ai/skills/stacks-marketing-loops/LICENSE +21 -0
- package/ai/skills/stacks-marketing-loops/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-loops/PLAYBOOK.md +111 -0
- package/ai/skills/stacks-marketing-loops/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-loops/evals/evals.json +133 -0
- package/ai/skills/stacks-marketing-loops/references/loop-catalog.md +796 -0
- package/ai/skills/stacks-marketing-loops/references/loop-guardrails.md +73 -0
- package/ai/skills/stacks-marketing-loops/references/loop-orchestration.md +71 -0
- package/ai/skills/stacks-marketing-loops/references/loop-state.md +67 -0
- package/ai/skills/stacks-marketing-loops/references/loop-template.md +79 -0
- package/ai/skills/stacks-marketing-loops/references/outbound-operator.md +86 -0
- package/ai/skills/stacks-marketing-loops/references/seo-operator.md +110 -0
- package/ai/skills/stacks-marketing-offers/LICENSE +21 -0
- package/ai/skills/stacks-marketing-offers/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-offers/PLAYBOOK.md +151 -0
- package/ai/skills/stacks-marketing-offers/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-offers/evals/evals.json +21 -0
- package/ai/skills/stacks-marketing-offers/references/bonus-stacking.md +150 -0
- package/ai/skills/stacks-marketing-offers/references/examples.md +215 -0
- package/ai/skills/stacks-marketing-offers/references/guarantee-design.md +172 -0
- package/ai/skills/stacks-marketing-offers/references/offer-anatomy.md +203 -0
- package/ai/skills/stacks-marketing-offers/references/offer-formats.md +240 -0
- package/ai/skills/stacks-marketing-offers/references/saas-offers.md +116 -0
- package/ai/skills/stacks-marketing-offers/references/scarcity-urgency.md +175 -0
- package/ai/skills/stacks-marketing-offers/references/value-equation.md +134 -0
- package/ai/skills/stacks-marketing-onboarding/LICENSE +21 -0
- package/ai/skills/stacks-marketing-onboarding/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-onboarding/PLAYBOOK.md +257 -0
- package/ai/skills/stacks-marketing-onboarding/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-onboarding/evals/evals.json +108 -0
- package/ai/skills/stacks-marketing-onboarding/references/activation-models.md +57 -0
- package/ai/skills/stacks-marketing-onboarding/references/experiments.md +258 -0
- package/ai/skills/stacks-marketing-onboarding/references/minimum-path-to-value.md +49 -0
- package/ai/skills/stacks-marketing-paywalls/LICENSE +21 -0
- package/ai/skills/stacks-marketing-paywalls/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-paywalls/PLAYBOOK.md +223 -0
- package/ai/skills/stacks-marketing-paywalls/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-paywalls/evals/evals.json +93 -0
- package/ai/skills/stacks-marketing-paywalls/references/experiments.md +164 -0
- package/ai/skills/stacks-marketing-plan/LICENSE +21 -0
- package/ai/skills/stacks-marketing-plan/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-plan/PLAYBOOK.md +300 -0
- package/ai/skills/stacks-marketing-plan/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-plan/evals/evals.json +140 -0
- package/ai/skills/stacks-marketing-plan/references/aarrr-framework.md +180 -0
- package/ai/skills/stacks-marketing-plan/references/budget-planning.md +177 -0
- package/ai/skills/stacks-marketing-plan/references/client-types.md +373 -0
- package/ai/skills/stacks-marketing-plan/references/current-state-rubric.md +255 -0
- package/ai/skills/stacks-marketing-plan/references/example-quietude.md +972 -0
- package/ai/skills/stacks-marketing-plan/references/funding-stage-unlocks.md +230 -0
- package/ai/skills/stacks-marketing-plan/references/growth-patterns.md +190 -0
- package/ai/skills/stacks-marketing-plan/references/idea-cross-reference.md +265 -0
- package/ai/skills/stacks-marketing-plan/references/market-sizing.md +166 -0
- package/ai/skills/stacks-marketing-plan/references/measurement-framework.md +213 -0
- package/ai/skills/stacks-marketing-plan/references/methodology.md +365 -0
- package/ai/skills/stacks-marketing-plan/references/ops-stack-mapping.md +197 -0
- package/ai/skills/stacks-marketing-plan/references/plan-template.md +494 -0
- package/ai/skills/stacks-marketing-plan/references/team-and-agency-model.md +278 -0
- package/ai/skills/stacks-marketing-popups/LICENSE +21 -0
- package/ai/skills/stacks-marketing-popups/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-popups/PLAYBOOK.md +450 -0
- package/ai/skills/stacks-marketing-popups/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-popups/evals/evals.json +94 -0
- package/ai/skills/stacks-marketing-pricing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-pricing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-pricing/PLAYBOOK.md +291 -0
- package/ai/skills/stacks-marketing-pricing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-pricing/evals/evals.json +131 -0
- package/ai/skills/stacks-marketing-pricing/references/pricing-models.md +66 -0
- package/ai/skills/stacks-marketing-pricing/references/pricing-page-teardown.md +87 -0
- package/ai/skills/stacks-marketing-pricing/references/research-methods.md +156 -0
- package/ai/skills/stacks-marketing-pricing/references/tier-structure.md +232 -0
- package/ai/skills/stacks-marketing-product-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-product-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-product-marketing/PLAYBOOK.md +255 -0
- package/ai/skills/stacks-marketing-product-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-product-marketing/evals/evals.json +98 -0
- package/ai/skills/stacks-marketing-programmatic-seo/LICENSE +21 -0
- package/ai/skills/stacks-marketing-programmatic-seo/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-programmatic-seo/PLAYBOOK.md +238 -0
- package/ai/skills/stacks-marketing-programmatic-seo/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-programmatic-seo/evals/evals.json +107 -0
- package/ai/skills/stacks-marketing-programmatic-seo/references/implementation-platforms.md +41 -0
- package/ai/skills/stacks-marketing-programmatic-seo/references/playbooks.md +308 -0
- package/ai/skills/stacks-marketing-prospecting/LICENSE +21 -0
- package/ai/skills/stacks-marketing-prospecting/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-prospecting/PLAYBOOK.md +273 -0
- package/ai/skills/stacks-marketing-prospecting/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-prospecting/evals/evals.json +163 -0
- package/ai/skills/stacks-marketing-prospecting/references/account-research.md +59 -0
- package/ai/skills/stacks-marketing-prospecting/references/b2b-prospecting.md +106 -0
- package/ai/skills/stacks-marketing-prospecting/references/compliance.md +161 -0
- package/ai/skills/stacks-marketing-prospecting/references/data-sources.md +300 -0
- package/ai/skills/stacks-marketing-prospecting/references/demand-signals.md +131 -0
- package/ai/skills/stacks-marketing-prospecting/references/enrichment-playbook.md +61 -0
- package/ai/skills/stacks-marketing-prospecting/references/local-prospecting.md +165 -0
- package/ai/skills/stacks-marketing-prospecting/references/saas-prospecting.md +123 -0
- package/ai/skills/stacks-marketing-prospecting/references/signal-plays.md +99 -0
- package/ai/skills/stacks-marketing-prospecting/references/sourcing-and-enrichment.md +89 -0
- package/ai/skills/stacks-marketing-psychology/LICENSE +21 -0
- package/ai/skills/stacks-marketing-psychology/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-psychology/PLAYBOOK.md +451 -0
- package/ai/skills/stacks-marketing-psychology/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-psychology/evals/evals.json +88 -0
- package/ai/skills/stacks-marketing-public-relations/LICENSE +21 -0
- package/ai/skills/stacks-marketing-public-relations/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-public-relations/PLAYBOOK.md +150 -0
- package/ai/skills/stacks-marketing-public-relations/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-public-relations/evals/evals.json +36 -0
- package/ai/skills/stacks-marketing-public-relations/references/crisis-communications.md +113 -0
- package/ai/skills/stacks-marketing-public-relations/references/journalist-pitching.md +368 -0
- package/ai/skills/stacks-marketing-public-relations/references/media-outlets.md +207 -0
- package/ai/skills/stacks-marketing-public-relations/references/newsjacking.md +220 -0
- package/ai/skills/stacks-marketing-public-relations/references/podcast-guest-prep.md +60 -0
- package/ai/skills/stacks-marketing-public-relations/references/press-platforms.md +188 -0
- package/ai/skills/stacks-marketing-public-relations/references/statement-templates.md +145 -0
- package/ai/skills/stacks-marketing-public-relations/references/story-angles.md +87 -0
- package/ai/skills/stacks-marketing-referrals/LICENSE +21 -0
- package/ai/skills/stacks-marketing-referrals/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-referrals/PLAYBOOK.md +279 -0
- package/ai/skills/stacks-marketing-referrals/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-referrals/evals/evals.json +202 -0
- package/ai/skills/stacks-marketing-referrals/references/affiliate-operations.md +64 -0
- package/ai/skills/stacks-marketing-referrals/references/affiliate-programs.md +167 -0
- package/ai/skills/stacks-marketing-referrals/references/program-examples.md +151 -0
- package/ai/skills/stacks-marketing-referrals/references/review-platform-rules.md +36 -0
- package/ai/skills/stacks-marketing-referrals/references/review-program-operations.md +62 -0
- package/ai/skills/stacks-marketing-referrals/references/review-programs.md +96 -0
- package/ai/skills/stacks-marketing-referrals/references/viral-mechanisms.md +102 -0
- package/ai/skills/stacks-marketing-revops/LICENSE +21 -0
- package/ai/skills/stacks-marketing-revops/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-revops/PLAYBOOK.md +345 -0
- package/ai/skills/stacks-marketing-revops/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-revops/evals/evals.json +104 -0
- package/ai/skills/stacks-marketing-revops/references/automation-playbooks.md +290 -0
- package/ai/skills/stacks-marketing-revops/references/inbound-routing.md +43 -0
- package/ai/skills/stacks-marketing-revops/references/lifecycle-definitions.md +309 -0
- package/ai/skills/stacks-marketing-revops/references/routing-rules.md +203 -0
- package/ai/skills/stacks-marketing-revops/references/scoring-models.md +247 -0
- package/ai/skills/stacks-marketing-sales-enablement/LICENSE +21 -0
- package/ai/skills/stacks-marketing-sales-enablement/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-sales-enablement/PLAYBOOK.md +423 -0
- package/ai/skills/stacks-marketing-sales-enablement/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-sales-enablement/evals/evals.json +153 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/cold-call-scripts.md +68 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/deck-frameworks.md +263 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/demo-scripts.md +355 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/objection-library.md +270 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/one-pager-templates.md +208 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/win-loss-analysis.md +72 -0
- package/ai/skills/stacks-marketing-schema/LICENSE +21 -0
- package/ai/skills/stacks-marketing-schema/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-schema/PLAYBOOK.md +187 -0
- package/ai/skills/stacks-marketing-schema/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-schema/evals/evals.json +127 -0
- package/ai/skills/stacks-marketing-schema/references/schema-examples.md +392 -0
- package/ai/skills/stacks-marketing-seo-audit/LICENSE +21 -0
- package/ai/skills/stacks-marketing-seo-audit/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-seo-audit/PLAYBOOK.md +492 -0
- package/ai/skills/stacks-marketing-seo-audit/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-seo-audit/evals/evals.json +204 -0
- package/ai/skills/stacks-marketing-seo-audit/references/ai-writing-detection.md +200 -0
- package/ai/skills/stacks-marketing-seo-audit/references/international-seo.md +228 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo-pages-and-measurement.md +39 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo-profile-and-citations.md +41 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo.md +86 -0
- package/ai/skills/stacks-marketing-seo-audit/references/rankings-push.md +62 -0
- package/ai/skills/stacks-marketing-seo-audit/references/title-tags.md +89 -0
- package/ai/skills/stacks-marketing-signup/LICENSE +21 -0
- package/ai/skills/stacks-marketing-signup/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-signup/PLAYBOOK.md +359 -0
- package/ai/skills/stacks-marketing-signup/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-signup/evals/evals.json +88 -0
- package/ai/skills/stacks-marketing-site-architecture/LICENSE +21 -0
- package/ai/skills/stacks-marketing-site-architecture/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-site-architecture/PLAYBOOK.md +355 -0
- package/ai/skills/stacks-marketing-site-architecture/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-site-architecture/evals/evals.json +113 -0
- package/ai/skills/stacks-marketing-site-architecture/references/mermaid-templates.md +216 -0
- package/ai/skills/stacks-marketing-site-architecture/references/navigation-patterns.md +305 -0
- package/ai/skills/stacks-marketing-site-architecture/references/platforms-and-migration.md +86 -0
- package/ai/skills/stacks-marketing-site-architecture/references/site-type-templates.md +293 -0
- package/ai/skills/stacks-marketing-sms/LICENSE +21 -0
- package/ai/skills/stacks-marketing-sms/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-sms/PLAYBOOK.md +348 -0
- package/ai/skills/stacks-marketing-sms/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-sms/evals/evals.json +118 -0
- package/ai/skills/stacks-marketing-sms/references/compliance.md +202 -0
- package/ai/skills/stacks-marketing-sms/references/platforms.md +318 -0
- package/ai/skills/stacks-marketing-sms/references/sequence-templates.md +282 -0
- package/ai/skills/stacks-marketing-sms/references/whatsapp.md +260 -0
- package/ai/skills/stacks-marketing-social/LICENSE +21 -0
- package/ai/skills/stacks-marketing-social/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-social/PLAYBOOK.md +452 -0
- package/ai/skills/stacks-marketing-social/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-social/evals/evals.json +150 -0
- package/ai/skills/stacks-marketing-social/references/carousel-frameworks.md +141 -0
- package/ai/skills/stacks-marketing-social/references/listening-sources-template.md +123 -0
- package/ai/skills/stacks-marketing-social/references/listening.md +288 -0
- package/ai/skills/stacks-marketing-social/references/platform-limits.md +110 -0
- package/ai/skills/stacks-marketing-social/references/platforms.md +176 -0
- package/ai/skills/stacks-marketing-social/references/post-templates.md +179 -0
- package/ai/skills/stacks-marketing-social/references/reverse-engineering.md +195 -0
- package/ai/skills/stacks-marketing-social/references/short-form-video.md +237 -0
- package/ai/skills/stacks-marketing-social/references/x-algorithm.md +69 -0
- package/ai/skills/stacks-marketing-video/LICENSE +21 -0
- package/ai/skills/stacks-marketing-video/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-video/PLAYBOOK.md +330 -0
- package/ai/skills/stacks-marketing-video/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-video/evals/evals.json +118 -0
- package/ai/skills/stacks-marketing-video/references/ai-video-prompting.md +175 -0
- package/ai/skills/stacks-marketing-video/references/edit-anatomy.md +86 -0
- package/ai/skills/stacks-marketing-video/references/product-demo-recording.md +176 -0
- package/ai/skills/stacks-middleware/SKILL.md +37 -21
- package/ai/skills/stacks-migrations/SKILL.md +29 -5
- package/ai/skills/stacks-mobile/SKILL.md +25 -4
- package/ai/skills/stacks-models/SKILL.md +35 -15
- package/ai/skills/stacks-models/references/model-capabilities.md +104 -0
- package/ai/skills/stacks-native/CAPABILITIES.md +536 -0
- package/ai/skills/stacks-native/CATALOG.md +930 -0
- package/ai/skills/stacks-native/RECIPES.md +108 -0
- package/ai/skills/stacks-native/SKILL.md +79 -0
- package/ai/skills/stacks-newsletter/SKILL.md +39 -0
- package/ai/skills/stacks-notifications/SKILL.md +118 -203
- package/ai/skills/stacks-objects/SKILL.md +18 -4
- package/ai/skills/stacks-orm/SKILL.md +112 -328
- package/ai/skills/stacks-pagination/SKILL.md +40 -0
- package/ai/skills/stacks-path/SKILL.md +38 -18
- package/ai/skills/stacks-payments/SKILL.md +9 -1
- package/ai/skills/stacks-pr/CREDITS.md +3 -0
- package/ai/skills/stacks-pr/LICENSE +21 -0
- package/ai/skills/stacks-pr/NOTICE.md +10 -0
- package/ai/skills/stacks-pr/PLAYBOOK.md +127 -0
- package/ai/skills/stacks-pr/SKILL.md +23 -0
- package/ai/skills/stacks-prototype/LICENSE +21 -0
- package/ai/skills/stacks-prototype/NOTICE.md +10 -0
- package/ai/skills/stacks-prototype/SKILL.md +6 -0
- package/ai/skills/stacks-push/SKILL.md +20 -0
- package/ai/skills/stacks-query-builder/SKILL.md +21 -5
- package/ai/skills/stacks-queue/DURABLE-WORKFLOWS.md +121 -0
- package/ai/skills/stacks-queue/SKILL.md +37 -6
- package/ai/skills/stacks-realtime/SKILL.md +29 -140
- package/ai/skills/stacks-redesign/SKILL.md +1 -1
- package/ai/skills/stacks-registry/SKILL.md +20 -48
- package/ai/skills/stacks-repl/SKILL.md +31 -7
- package/ai/skills/stacks-research/LICENSE +21 -0
- package/ai/skills/stacks-research/NOTICE.md +10 -0
- package/ai/skills/stacks-research/PLAYBOOK.md +10 -0
- package/ai/skills/stacks-research/SKILL.md +23 -0
- package/ai/skills/stacks-retro/LICENSE +21 -0
- package/ai/skills/stacks-retro/NOTICE.md +10 -0
- package/ai/skills/stacks-retro/SKILL.md +10 -0
- package/ai/skills/stacks-review/LICENSE +21 -0
- package/ai/skills/stacks-review/NOTICE.md +10 -0
- package/ai/skills/stacks-review/SKILL.md +15 -0
- package/ai/skills/stacks-router/SKILL.md +33 -2
- package/ai/skills/stacks-routes/SKILL.md +25 -2
- package/ai/skills/stacks-scaffold-exercises/LICENSE +21 -0
- package/ai/skills/stacks-scaffold-exercises/NOTICE.md +10 -0
- package/ai/skills/stacks-scaffold-exercises/PLAYBOOK.md +106 -0
- package/ai/skills/stacks-scaffold-exercises/SKILL.md +23 -0
- package/ai/skills/stacks-scaffolding/SKILL.md +27 -11
- package/ai/skills/stacks-scheduler/SKILL.md +52 -25
- package/ai/skills/stacks-search-engine/SKILL.md +28 -7
- package/ai/skills/stacks-security/SKILL.md +22 -6
- package/ai/skills/stacks-server/SKILL.md +47 -85
- package/ai/skills/stacks-setup-deep-modules/LICENSE +21 -0
- package/ai/skills/stacks-setup-deep-modules/NOTICE.md +10 -0
- package/ai/skills/stacks-setup-deep-modules/SKILL.md +55 -0
- package/ai/skills/stacks-setup-engineering/LICENSE +21 -0
- package/ai/skills/stacks-setup-engineering/NOTICE.md +10 -0
- package/ai/skills/stacks-setup-engineering/PLAYBOOK.md +115 -0
- package/ai/skills/stacks-setup-engineering/SKILL.md +24 -0
- package/ai/skills/stacks-setup-engineering/domain.md +51 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-github.md +46 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-gitlab.md +46 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-local.md +30 -0
- package/ai/skills/stacks-setup-engineering/triage-labels.md +15 -0
- package/ai/skills/stacks-sites/SKILL.md +44 -0
- package/ai/skills/stacks-skills/SKILL.md +33 -0
- package/ai/skills/stacks-slug/SKILL.md +15 -12
- package/ai/skills/stacks-sms/SKILL.md +33 -6
- package/ai/skills/stacks-socials/SKILL.md +81 -294
- package/ai/skills/stacks-storage/SKILL.md +34 -15
- package/ai/skills/stacks-storage/UPLOADS-AND-DISKS.md +133 -0
- package/ai/skills/stacks-strings/SKILL.md +41 -35
- package/ai/skills/stacks-stx/SKILL.md +63 -58
- package/ai/skills/stacks-tdd/LICENSE +21 -0
- package/ai/skills/stacks-tdd/NOTICE.md +10 -0
- package/ai/skills/stacks-tdd/SKILL.md +10 -0
- package/ai/skills/stacks-tdd/mocking.md +59 -0
- package/ai/skills/stacks-tdd/tests.md +77 -0
- package/ai/skills/stacks-teach/GLOSSARY-FORMAT.md +35 -0
- package/ai/skills/stacks-teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/ai/skills/stacks-teach/LICENSE +21 -0
- package/ai/skills/stacks-teach/MISSION-FORMAT.md +31 -0
- package/ai/skills/stacks-teach/NOTICE.md +10 -0
- package/ai/skills/stacks-teach/PLAYBOOK.md +136 -0
- package/ai/skills/stacks-teach/RESOURCES-FORMAT.md +32 -0
- package/ai/skills/stacks-teach/SKILL.md +24 -0
- package/ai/skills/stacks-technical-diagrams/SKILL.md +2 -2
- package/ai/skills/stacks-technical-diagrams/bin/diagrams +1 -1
- package/ai/skills/stacks-technical-diagrams/renderers/shared/bun-runtime.mjs +1 -1
- package/ai/skills/stacks-test-fixtures/LICENSE +21 -0
- package/ai/skills/stacks-test-fixtures/NOTICE.md +10 -0
- package/ai/skills/stacks-test-fixtures/SKILL.md +38 -0
- package/ai/skills/stacks-testing/SKILL.md +77 -4
- package/ai/skills/stacks-to-questionnaire/LICENSE +21 -0
- package/ai/skills/stacks-to-questionnaire/NOTICE.md +10 -0
- package/ai/skills/stacks-to-questionnaire/PLAYBOOK.md +51 -0
- package/ai/skills/stacks-to-questionnaire/SKILL.md +24 -0
- package/ai/skills/stacks-to-spec/LICENSE +21 -0
- package/ai/skills/stacks-to-spec/NOTICE.md +10 -0
- package/ai/skills/stacks-to-spec/PLAYBOOK.md +72 -0
- package/ai/skills/stacks-to-spec/SKILL.md +24 -0
- package/ai/skills/stacks-to-tickets/LICENSE +21 -0
- package/ai/skills/stacks-to-tickets/NOTICE.md +10 -0
- package/ai/skills/stacks-to-tickets/PLAYBOOK.md +102 -0
- package/ai/skills/stacks-to-tickets/SKILL.md +24 -0
- package/ai/skills/stacks-triage/AGENT-BRIEF.md +207 -0
- package/ai/skills/stacks-triage/LICENSE +21 -0
- package/ai/skills/stacks-triage/NOTICE.md +10 -0
- package/ai/skills/stacks-triage/OUT-OF-SCOPE.md +105 -0
- package/ai/skills/stacks-triage/PLAYBOOK.md +109 -0
- package/ai/skills/stacks-triage/SKILL.md +24 -0
- package/ai/skills/stacks-tunnel/SKILL.md +29 -19
- package/ai/skills/stacks-types/SKILL.md +77 -168
- package/ai/skills/stacks-ui/SKILL.md +66 -228
- package/ai/skills/stacks-unslop/NOTICE.md +25 -0
- package/ai/skills/stacks-unslop/SKILL.md +95 -0
- package/ai/skills/stacks-unslop/references/core-contract.md +88 -0
- package/ai/skills/stacks-unslop/references/patterns.md +110 -0
- package/ai/skills/stacks-unslop/references/presets.md +37 -0
- package/ai/skills/stacks-unslop/references/voice.md +95 -0
- package/ai/skills/stacks-utils/SKILL.md +45 -25
- package/ai/skills/stacks-validation/SKILL.md +67 -4
- package/ai/skills/stacks-video/SKILL.md +33 -0
- package/ai/skills/stacks-wait-what/LICENSE +21 -0
- package/ai/skills/stacks-wait-what/NOTICE.md +10 -0
- package/ai/skills/stacks-wait-what/PLAYBOOK.md +4 -0
- package/ai/skills/stacks-wait-what/SKILL.md +24 -0
- package/ai/skills/stacks-wayfinder/LICENSE +21 -0
- package/ai/skills/stacks-wayfinder/NOTICE.md +10 -0
- package/ai/skills/stacks-wayfinder/PLAYBOOK.md +125 -0
- package/ai/skills/stacks-wayfinder/SKILL.md +24 -0
- package/ai/skills/stacks-whois/SKILL.md +13 -3
- package/ai/skills/stacks-wizard/LICENSE +21 -0
- package/ai/skills/stacks-wizard/NOTICE.md +10 -0
- package/ai/skills/stacks-wizard/SKILL.md +8 -0
- package/ai/skills/stacks-wizard/scripts/template.sh +42 -26
- package/ai/skills/stacks-writing-beats/LICENSE +21 -0
- package/ai/skills/stacks-writing-beats/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-beats/PLAYBOOK.md +64 -0
- package/ai/skills/stacks-writing-beats/SKILL.md +28 -0
- package/ai/skills/stacks-writing-for-agents/LICENSE +21 -0
- package/ai/skills/stacks-writing-for-agents/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-for-agents/SKILL.md +7 -1
- package/ai/skills/stacks-writing-fragments/LICENSE +21 -0
- package/ai/skills/stacks-writing-fragments/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-fragments/PLAYBOOK.md +76 -0
- package/ai/skills/stacks-writing-fragments/SKILL.md +28 -0
- package/ai/skills/stacks-writing-shape/LICENSE +21 -0
- package/ai/skills/stacks-writing-shape/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-shape/PLAYBOOK.md +76 -0
- package/ai/skills/stacks-writing-shape/SKILL.md +28 -0
- package/ide/vscode/package.json +1 -1
- package/package.json +2 -2
- /package/ai/skills/stacks-technical-diagrams/{bunfig.toml → runtime.toml} +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Native account workflows
|
|
2
|
+
|
|
3
|
+
Read this when an account feature needs the native workflow rather than a token
|
|
4
|
+
or TOTP primitive. All source paths below start at
|
|
5
|
+
`storage/framework/core/auth/`. Public exports are in `src/index.ts`.
|
|
6
|
+
|
|
7
|
+
## Passwordless magic links
|
|
8
|
+
|
|
9
|
+
`sendMagicLink(email, options?)` accepts redirectTo, siteId, ttlMinutes and
|
|
10
|
+
createUser. Enable `config.auth.magicLink` and its route bundle before building
|
|
11
|
+
a form around the default actions. The native link flow keeps the bearer hashed
|
|
12
|
+
at rest and uses a POST to consume it; GET is an interstitial because mail
|
|
13
|
+
scanners prefetch links.
|
|
14
|
+
|
|
15
|
+
`consumeMagicLink(raw)` returns a discriminated result with userId/email/redirect
|
|
16
|
+
on success, or invalid/expired/used/no-user. The transactional `withMagicLink`
|
|
17
|
+
helper binds consumption to issuance; read its callback signature before writing
|
|
18
|
+
an alternative action. `pruneMagicLinkTokens(olderThanDays?)` removes old state.
|
|
19
|
+
Redirects must be local paths, and successful consume does not by itself set an
|
|
20
|
+
HTTP cookie. Keep issuance inside the native completed-login flow.
|
|
21
|
+
|
|
22
|
+
Source: `src/magic-link.ts`. Evidence: `tests/magic-link.test.ts`,
|
|
23
|
+
`magic-link-owner.test.ts`, `magic-link-send-atomicity.test.ts` and
|
|
24
|
+
`magic-link-drivers.test.ts`. A database failure or mail failure is not a reason
|
|
25
|
+
to return an unusable credential as successful login.
|
|
26
|
+
|
|
27
|
+
## Two-factor setup and completed login
|
|
28
|
+
|
|
29
|
+
`TwoFactor` and its named functions manage setup, pending secrets, challenges,
|
|
30
|
+
verification and recovery, beyond generating a TOTP code. Native functions
|
|
31
|
+
include generateTwoFactorSetup, stashPendingTwoFactorSecret,
|
|
32
|
+
consumePendingTwoFactorSecret, enableTwoFactor, disableTwoFactor,
|
|
33
|
+
verifyTwoFactorLoginCode, createTwoFactorChallenge, consumeTwoFactorChallenge,
|
|
34
|
+
withTwoFactorChallenge and revokeTwoFactorChallenges.
|
|
35
|
+
|
|
36
|
+
Use the default action flow as the application reference: the password step
|
|
37
|
+
creates a challenge, and completed verification issues the actual browser
|
|
38
|
+
credential. The challenge carries the remembered-lifetime choice. Setup and
|
|
39
|
+
disable actions impose their own proof and reauthentication requirements;
|
|
40
|
+
low-level helper calls do not establish that the caller owns the account.
|
|
41
|
+
|
|
42
|
+
Source: `src/two-factor.ts` and default auth actions. Evidence:
|
|
43
|
+
`tests/two-factor-login-wiring.test.ts`, `two-factor-recovery.test.ts`,
|
|
44
|
+
`two-factor-disable-reauth.test.ts`, `two-factor-challenge-atomicity.test.ts` and
|
|
45
|
+
`two-factor-state-atomicity.test.ts`.
|
|
46
|
+
|
|
47
|
+
## Cookie tokens and database sessions
|
|
48
|
+
|
|
49
|
+
Bearer/token-cookie auth and `SessionAuth` database sessions use different
|
|
50
|
+
credentials. The default Auth middleware tries a parsed bearer, then the
|
|
51
|
+
configured auth token cookie, then `session_id`, and stamps the request user.
|
|
52
|
+
`authCookieName`, authCookie/clearAuthCookie, userFromCookie/cookieCheck and
|
|
53
|
+
logoutCookie are native cookie helpers. Cookie writes need the normal browser
|
|
54
|
+
CSRF flow; a cookie is not a bearer header.
|
|
55
|
+
|
|
56
|
+
`SessionAuth.login` persists a session with an expiry; logout/destroyAll are
|
|
57
|
+
awaitable mutations. user/check/refresh validate owner, deadline and optional
|
|
58
|
+
idle timeout. `config.auth.idleTimeout` is milliseconds; fingerprint enforcement
|
|
59
|
+
is opt-in via `config.auth.session.enforceFingerprint`, true or individual
|
|
60
|
+
ip/userAgent flags. A changing mobile IP can make enforcement inappropriate.
|
|
61
|
+
Reads outside a request lack a client fingerprint. Session refresh accepts a
|
|
62
|
+
positive finite TTL and uses an observed-version update so it cannot resurrect
|
|
63
|
+
an expired/deleted credential.
|
|
64
|
+
|
|
65
|
+
Browser-session policy is separately resolved by resolveBrowserSessionPolicy.
|
|
66
|
+
Read `config/auth.ts`: baseline and remembered defaults currently share
|
|
67
|
+
tokenExpiry, and an app may configure them differently. Dedicated personal
|
|
68
|
+
access token and delegated OAuth issuance do not inherit the browser policy.
|
|
69
|
+
|
|
70
|
+
Source: `src/cookie-auth.ts`, `browser-session.ts`, `request-token.ts`,
|
|
71
|
+
`session-auth.ts`, `page-gate.ts`. Evidence: `tests/session-http-lifecycle.test.ts`,
|
|
72
|
+
`session-idle-timeout.test.ts`, `session-refresh-atomicity.test.ts`,
|
|
73
|
+
`browser-session-policy.test.ts` and `auth-cookie-name.test.ts`.
|
|
74
|
+
|
|
75
|
+
## Roles, permissions and active teams
|
|
76
|
+
|
|
77
|
+
RBAC lazily creates the native bun-query-builder store; a custom RbacStore is
|
|
78
|
+
optional. Apply role/permission/pivot migrations before assigning roles.
|
|
79
|
+
`seedDefaultRoles()` idempotently creates admin/dev/client role packs with their
|
|
80
|
+
declared guards. It does not seed the application's permission taxonomy.
|
|
81
|
+
Guard-scoped sync preserves other guards. Direct SQL changes require explicit
|
|
82
|
+
RBAC cache invalidation. A role name that drives UI visibility is not a substitute
|
|
83
|
+
for action authorization.
|
|
84
|
+
|
|
85
|
+
`resolveTeamContext(request, { allowAnyTeam? })` returns user, current team,
|
|
86
|
+
role, switchable teams and the active preference. Related helpers include
|
|
87
|
+
resolveAuthenticatedMembership, resolveAuthenticatedTeamId,
|
|
88
|
+
resolveAuthenticatedUser, buildActiveTeamCookie and clearActiveTeamCookie.
|
|
89
|
+
An active-team cookie is a preference, not proof of membership; the resolver
|
|
90
|
+
checks the authenticated user's active membership. An operator override is
|
|
91
|
+
application policy and must remain server-owned.
|
|
92
|
+
|
|
93
|
+
Source: `src/rbac.ts`, `rbac-store-bqb.ts`, `rbac-seed.ts` and `team.ts`.
|
|
94
|
+
Evidence: `tests/rbac-default-store.test.ts`, `rbac-guard-sync.test.ts`,
|
|
95
|
+
`rbac-seed.test.ts` and `active-team.test.ts`.
|
|
96
|
+
|
|
97
|
+
## Social identity linking and referrals
|
|
98
|
+
|
|
99
|
+
`resolveSocialSignIn(provider, identity, store?)` resolves durable provider-id
|
|
100
|
+
links first, then applies `config.auth.socials.matching`: link/create/refuse.
|
|
101
|
+
An email match is subject to the identity verification policy; copying an email
|
|
102
|
+
from a provider payload is not sufficient proof to link an existing account.
|
|
103
|
+
Use SocialSignInRefusedError to distinguish configured refusal from infrastructure
|
|
104
|
+
failure. `stacks-socials` owns provider authorization and callback exchange.
|
|
105
|
+
|
|
106
|
+
Referrals expose createReferralCode(ownerId), attributeReferral(newUserId, input),
|
|
107
|
+
qualifyReferral(referredUserId) and referralSummary(ownerId), with optional
|
|
108
|
+
database injection. Normalize/attribute at registration and qualify at the
|
|
109
|
+
application's real conversion milestone. Attribution alone is not a paid reward.
|
|
110
|
+
|
|
111
|
+
Source: `src/socials.ts`, `referrals.ts`. Evidence: `tests/social-linking.test.ts`,
|
|
112
|
+
`referrals.test.ts`. All account features remain subject to model loading,
|
|
113
|
+
selected route bundles, config gates and applied migrations.
|
|
@@ -44,14 +44,14 @@ auth/src/
|
|
|
44
44
|
└── session-auth.ts # Session-based SPA auth
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
## Auth Class (authentication.ts)
|
|
47
|
+
## Auth Class (authentication.ts) - Static Methods
|
|
48
48
|
|
|
49
49
|
### Login & Authentication
|
|
50
|
-
- `Auth.attempt(credentials: AuthCredentials): Promise<boolean>`
|
|
51
|
-
- `Auth.validate(credentials: AuthCredentials): Promise<boolean>`
|
|
52
|
-
- `Auth.login(credentials: AuthCredentials, options?: TokenCreateOptions): Promise<{ user, token } | null>`
|
|
53
|
-
- `Auth.loginUsingId(userId: number, options?: TokenCreateOptions): Promise<{ user, token } | null>`
|
|
54
|
-
- `Auth.logout(): Promise<void>`
|
|
50
|
+
- `Auth.attempt(credentials: AuthCredentials): Promise<boolean>` - validate credentials without creating token
|
|
51
|
+
- `Auth.validate(credentials: AuthCredentials): Promise<boolean>` - checks credentials without setting the request's authenticated user
|
|
52
|
+
- `Auth.login(credentials: AuthCredentials, options?: TokenCreateOptions): Promise<{ user, token } | null>` - login and create token
|
|
53
|
+
- `Auth.loginUsingId(userId: number, options?: TokenCreateOptions): Promise<{ user, token } | null>` - login by user ID
|
|
54
|
+
- `Auth.logout(): Promise<void>` - revoke current token
|
|
55
55
|
|
|
56
56
|
### Personal access tokens (Sanctum-shaped)
|
|
57
57
|
|
|
@@ -59,38 +59,38 @@ auth/src/
|
|
|
59
59
|
name (`users`, `authors`) and `tokenable_id` its id there, so any model
|
|
60
60
|
declaring `useAuth` can hold tokens - not only `User`.
|
|
61
61
|
|
|
62
|
-
- `createToken(id, name, scopes, { tokenableType })`
|
|
62
|
+
- `createToken(id, name, scopes, { tokenableType })` - mint one. Returns the
|
|
63
63
|
plaintext ONCE (`plainTextToken`); the table stores a hash and nothing can
|
|
64
64
|
recover it afterwards. `tokenableType` defaults to `users`.
|
|
65
|
-
- `tokens(id, tokenableType?)`
|
|
66
|
-
- `tokenCan(scope)` / `tokenCanAll` / `tokenCanAny` / `tokenAbilities`
|
|
65
|
+
- `tokens(id, tokenableType?)` - list an owner's live tokens.
|
|
66
|
+
- `tokenCan(scope)` / `tokenCanAll` / `tokenCanAny` / `tokenAbilities` - check
|
|
67
67
|
the current request's token.
|
|
68
68
|
- `revokeToken`, `revokeTokenById`, `revokeAllTokens(id, type?)`,
|
|
69
|
-
`revokeOtherTokens(id, type?)`
|
|
69
|
+
`revokeOtherTokens(id, type?)` - revocation also revokes the paired refresh
|
|
70
70
|
token, which a raw row delete does not.
|
|
71
|
-
- `setTrailActor(id)`
|
|
71
|
+
- `setTrailActor(id)` - attribute writes in a queue job or CLI run that has no
|
|
72
72
|
request to read a user from.
|
|
73
73
|
|
|
74
74
|
The `PersonalAccessToken` model maps the same table, so `owner.with('tokenable')`
|
|
75
75
|
lists exactly what `createToken` minted. It deliberately generates no CRUD
|
|
76
76
|
routes: minting and revoking both carry semantics a generic route does not.
|
|
77
|
-
- `Auth.once(credentials: AuthCredentials): Promise<boolean>`
|
|
77
|
+
- `Auth.once(credentials: AuthCredentials): Promise<boolean>` - one-time auth without token
|
|
78
78
|
- `Auth.requestUserTokenWithClient(credentials, clientId, clientSecret): Promise<{ token } | null>` authenticates both a legacy OAuth client and an end user password, then issues a user token. It is not the client credentials grant.
|
|
79
79
|
- `Auth.requestToken(...)` is the deprecated compatibility alias for that same legacy exchange. New delegated integrations use the authorization-code provider.
|
|
80
80
|
|
|
81
81
|
### User State
|
|
82
|
-
- `Auth.user(): Promise<UserModel | undefined>`
|
|
83
|
-
- `Auth.check(): Promise<boolean>`
|
|
84
|
-
- `Auth.guest(): Promise<boolean>`
|
|
85
|
-
- `Auth.id(): Promise<number | undefined>`
|
|
86
|
-
- `Auth.setUser(user: UserModel): void`
|
|
82
|
+
- `Auth.user(): Promise<UserModel | undefined>` - resolve the current request user through bearer/token-cookie state
|
|
83
|
+
- `Auth.check(): Promise<boolean>` - is user authenticated?
|
|
84
|
+
- `Auth.guest(): Promise<boolean>` - is user a guest?
|
|
85
|
+
- `Auth.id(): Promise<number | undefined>` - get authenticated user ID
|
|
86
|
+
- `Auth.setUser(user: UserModel | undefined): void` - set or clear the current request user
|
|
87
87
|
|
|
88
88
|
### Token Creation
|
|
89
89
|
- `Auth.createTokenForUser(user, options?: TokenCreateOptions): Promise<NewAccessToken>`
|
|
90
90
|
- `Auth.createToken(user, name?, abilities?): Promise<AuthToken>`
|
|
91
91
|
|
|
92
92
|
### Token Validation
|
|
93
|
-
- `Auth.validateToken(token: string): Promise<boolean>`
|
|
93
|
+
- `Auth.validateToken(token: string): Promise<boolean>` - validate bearer token
|
|
94
94
|
- `Auth.getUserFromToken(token: string): Promise<UserModel | undefined>`
|
|
95
95
|
- `Auth.currentAccessToken(): Promise<PersonalAccessToken | undefined>`
|
|
96
96
|
|
|
@@ -113,9 +113,9 @@ routes: minting and revoking both carry semantics a generic route does not.
|
|
|
113
113
|
- `Auth.findToken(tokenId: number): Promise<PersonalAccessToken | null>`
|
|
114
114
|
|
|
115
115
|
### Utility
|
|
116
|
-
- `Auth.guard(name?: string): typeof Auth`
|
|
117
|
-
- `Auth.viaRemember(): boolean`
|
|
118
|
-
- `Auth.clearState(): void`
|
|
116
|
+
- `Auth.guard(name?: string): typeof Auth` - select guard (returns self)
|
|
117
|
+
- `Auth.viaRemember(): boolean` - always false currently
|
|
118
|
+
- `Auth.clearState(): void` - clear cached user/token
|
|
119
119
|
|
|
120
120
|
## Token System (tokens.ts)
|
|
121
121
|
|
|
@@ -215,8 +215,8 @@ authenticated and CSRF protected.
|
|
|
215
215
|
### Gate Functions
|
|
216
216
|
- `define<T>(ability: string, callback: GateCallback<T>): void`
|
|
217
217
|
- `policy(model: string | { name }, policyClass: new () => Policy): void`
|
|
218
|
-
- `before(callback): void`
|
|
219
|
-
- `after(callback): void`
|
|
218
|
+
- `before(callback): void` - run before any gate check
|
|
219
|
+
- `after(callback): void` - run after any gate check
|
|
220
220
|
- `allows(ability, user, ...args): Promise<boolean>`
|
|
221
221
|
- `denies(ability, user, ...args): Promise<boolean>`
|
|
222
222
|
- `can(ability, user, ...args): Promise<boolean>`
|
|
@@ -224,21 +224,21 @@ authenticated and CSRF protected.
|
|
|
224
224
|
- `any(abilities[], user, ...args): Promise<boolean>`
|
|
225
225
|
- `all(abilities[], user, ...args): Promise<boolean>`
|
|
226
226
|
- `none(abilities[], user, ...args): Promise<boolean>`
|
|
227
|
-
- `authorize(ability, user, ...args): Promise<AuthorizationResponse>`
|
|
228
|
-
- `inspect(ability, user, ...args): Promise<AuthorizationResponse>`
|
|
227
|
+
- `authorize(ability, user, ...args): Promise<AuthorizationResponse>` - throws on deny
|
|
228
|
+
- `inspect(ability, user, ...args): Promise<AuthorizationResponse>` - never throws
|
|
229
229
|
- `has(ability): boolean`
|
|
230
230
|
- `hasPolicy(model): boolean`
|
|
231
231
|
- `abilities(): string[]`
|
|
232
232
|
- `getPolicyFor<T>(model: T): Policy<T> | null`
|
|
233
|
-
- `flush(): void`
|
|
233
|
+
- `flush(): void` - clear all gates
|
|
234
234
|
|
|
235
|
-
### Gate Facade
|
|
235
|
+
### Gate Facade - `Gate.define()`, `Gate.can()`, etc
|
|
236
236
|
|
|
237
237
|
### AuthorizationResponse Class
|
|
238
238
|
- `static allow(message?): AuthorizationResponse`
|
|
239
239
|
- `static deny(message?, code?): AuthorizationResponse`
|
|
240
240
|
- `allowed(): boolean`, `denied(): boolean`
|
|
241
|
-
- `authorize(): void`
|
|
241
|
+
- `authorize(): void` - throws AuthorizationException if denied
|
|
242
242
|
|
|
243
243
|
### Policy Interface
|
|
244
244
|
Methods: `before?`, `viewAny?`, `view?`, `create?`, `update?`, `delete?`, `restore?`, `forceDelete?`
|
|
@@ -287,7 +287,7 @@ Protected helpers: `allow(message?)`, `deny(message?, code?)`, `denyIf(condition
|
|
|
287
287
|
- `Rbac.syncRolePermissions(roleName, permissionNames[], guardName?): Promise<void>`
|
|
288
288
|
|
|
289
289
|
### withRbac Mixin
|
|
290
|
-
`withRbac(user)`
|
|
290
|
+
`withRbac(user)` - adds `hasRole()`, `hasPermission()`, `assignRole()`, `givePermission()`, etc. to any user object
|
|
291
291
|
|
|
292
292
|
### RBAC Types
|
|
293
293
|
```typescript
|
|
@@ -299,10 +299,10 @@ interface RbacStore { findRoleByName, createRole, deleteRole, getAllRoles, findP
|
|
|
299
299
|
## Session Auth (session-auth.ts)
|
|
300
300
|
|
|
301
301
|
- `SessionAuth.login(email, password): Promise<{ user, sessionId }>`
|
|
302
|
-
- `SessionAuth.logout(sessionId): void
|
|
302
|
+
- `SessionAuth.logout(sessionId): Promise<void>`
|
|
303
303
|
- `SessionAuth.user(sessionId): Promise<UserModel | undefined>`
|
|
304
|
-
- `SessionAuth.check(sessionId): boolean
|
|
305
|
-
- `SessionAuth.refresh(sessionId, ttlMs?): boolean
|
|
304
|
+
- `SessionAuth.check(sessionId): Promise<boolean>`
|
|
305
|
+
- `SessionAuth.refresh(sessionId, ttlMs?): Promise<boolean>`, rejects non-positive or non-finite TTLs without changing the session
|
|
306
306
|
|
|
307
307
|
Internal: database-backed `sessions` rows with expiry, optional IP/User-Agent fingerprint checks, transactional logout and refresh, and timing-safe password comparison with a dummy bcrypt hash. Sessions survive process restarts and are shared by workers through the configured database.
|
|
308
308
|
|
|
@@ -359,21 +359,27 @@ export const authMiddlewareHandler = {
|
|
|
359
359
|
}
|
|
360
360
|
```
|
|
361
361
|
|
|
362
|
+
|
|
362
363
|
## Rate Limiter (rate-limiter.ts)
|
|
363
364
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
365
|
+
Every check/update is async, including when the backing store is memory:
|
|
366
|
+
|
|
367
|
+
~~~ts
|
|
368
|
+
import { RateLimiter } from '@stacksjs/auth'
|
|
369
|
+
|
|
370
|
+
await RateLimiter.validateAttempt(email)
|
|
371
|
+
await RateLimiter.recordFailedAttempt(email)
|
|
372
|
+
const locked = await RateLimiter.isRateLimited(email)
|
|
373
|
+
await RateLimiter.resetAttempts(email)
|
|
374
|
+
~~~
|
|
375
|
+
|
|
376
|
+
Five failed attempts lock an email for fifteen minutes. The configured store
|
|
377
|
+
selects atomic Redis when the cache config selects Redis, otherwise process-local
|
|
378
|
+
memory. `useSharedStore(options?)` explicitly chooses Redis;
|
|
379
|
+
`useStore(custom)` installs a store with atomic recordFailedAttempt;
|
|
380
|
+
`useMemoryStore()` and `useConfiguredStore()` reset that choice.
|
|
381
|
+
Shared deployments need a shared atomic store. Partial counters expire, and
|
|
382
|
+
cleanup thresholds are not hard capacities that evict live lockouts.
|
|
377
383
|
|
|
378
384
|
## Authorizable Mixin (authorizable.ts)
|
|
379
385
|
|
|
@@ -390,7 +396,8 @@ await authUser.authorize('edit-post', post) // throws if denied
|
|
|
390
396
|
|
|
391
397
|
### config/auth.ts
|
|
392
398
|
```typescript
|
|
393
|
-
|
|
399
|
+
const tokenExpiry = 60 * 60 * 1000
|
|
400
|
+
const authOptions = {
|
|
394
401
|
default: 'api',
|
|
395
402
|
guards: { api: { driver: 'token', provider: 'users' } },
|
|
396
403
|
providers: { users: { driver: 'database', table: 'users' } },
|
|
@@ -399,8 +406,8 @@ await authUser.authorize('edit-post', post) // throws if denied
|
|
|
399
406
|
tokenExpiry: 60 * 60 * 1000, // milliseconds, 1 hour
|
|
400
407
|
refreshTokenExpiry: 30 * 24 * 60 * 60 * 1000, // milliseconds
|
|
401
408
|
browserSession: {
|
|
402
|
-
baselineLifetime:
|
|
403
|
-
rememberedLifetime:
|
|
409
|
+
baselineLifetime: tokenExpiry, // absolute milliseconds, default one hour
|
|
410
|
+
rememberedLifetime: tokenExpiry, // customize explicitly for a longer remembered tier
|
|
404
411
|
withRefreshToken: false, // fixed browser lifetime, no unused refresh token
|
|
405
412
|
logoutRedirect: '/login?logged_out=1', // local path for HTML logout only
|
|
406
413
|
},
|
|
@@ -451,7 +458,7 @@ Retain application-specific onboarding and event hooks.
|
|
|
451
458
|
Auth-relevant aliases: `auth`, `guest`, `verified` (EnsureEmailIsVerified),
|
|
452
459
|
`abilities`, `can`, `role`, `permission`, `team`, `signed`, `throttle`. The
|
|
453
460
|
environment aliases are `env`, `env:local`, `env:development` / `env:dev`,
|
|
454
|
-
`env:staging`, `env:production` / `env:prod`
|
|
461
|
+
`env:staging`, `env:production` / `env:prod` - with a COLON, not a dot; an
|
|
455
462
|
earlier version of this list wrote `env.local` and those never existed. See
|
|
456
463
|
`stacks-middleware` for the full set and for the `!alias` and `alias:params`
|
|
457
464
|
forms.
|
|
@@ -474,7 +481,7 @@ export default defineGates({
|
|
|
474
481
|
```
|
|
475
482
|
|
|
476
483
|
Registered at boot by `initializeAuthorization()`, from
|
|
477
|
-
`injectGlobalAutoImports()`
|
|
484
|
+
`injectGlobalAutoImports()` - the one place every entry point comes through, so
|
|
478
485
|
HTTP, `buddy seed`, a scheduled job and a console command all get the same
|
|
479
486
|
gates.
|
|
480
487
|
|
|
@@ -518,17 +525,17 @@ traits: {
|
|
|
518
525
|
- New personal and delegated access tokens are opaque 40-byte hex bearers hashed at rest. Legacy `jwt:encryptedId` bearers remain readable during migration.
|
|
519
526
|
- Token validation hashes the bearer directly. Do not parse or expose token contents, and never log plaintext bearer values.
|
|
520
527
|
- Bearer tokens come from the `Authorization: Bearer <token>` header
|
|
521
|
-
-
|
|
522
|
-
- RBAC has an internal cache (`userRoles`, `userPermissions`, `rolePermissions`)
|
|
528
|
+
- Auth resolves the parsed bearer first and falls back to the configured token cookie; request user state is scoped rather than shared globally
|
|
529
|
+
- RBAC has an internal cache (`userRoles`, `userPermissions`, `rolePermissions`) - call `Rbac.flushCache()` after direct DB changes
|
|
523
530
|
- `syncRoles()` and `syncPermissions()` are guard-scoped replacements: they preserve assignments belonging to other guards
|
|
524
|
-
- Gate `before` callbacks can short-circuit
|
|
525
|
-
- An ability with no gate and no policy method **denies**. That is the right default, and it means a gate that was never registered is indistinguishable from one that says no
|
|
531
|
+
- Gate `before` callbacks can short-circuit - return `true` to allow, `null` to continue checking
|
|
532
|
+
- An ability with no gate and no policy method **denies**. That is the right default, and it means a gate that was never registered is indistinguishable from one that says no - which is how `initializeAuthorization()` went unnoticed while nothing called it
|
|
526
533
|
- `allows()` and friends take `Ability`, which is open (`GateName | PolicyAbility | (string & {})`). A `/can/:ability` route passes an ability straight through, so narrowing it would reject correct code; the union is for completions
|
|
527
534
|
- `withRbac()` and `withAuthorization()` return new objects with methods mixed in
|
|
528
|
-
-
|
|
535
|
+
- RBAC lazily creates its SQL store. `Rbac.setStore()` is the optional override for a custom store; apply the role/permission model migrations before using it
|
|
529
536
|
- Password reset tokens expire after 60 minutes by default
|
|
530
|
-
- Default token abilities are `['*']`
|
|
531
|
-
- Token expiry defaults to
|
|
537
|
+
- Default token abilities are `['*']` - wildcard access
|
|
538
|
+
- Token expiry defaults to one hour; inspect config/auth.ts and browserSession before choosing a lifetime
|
|
532
539
|
- Session auth uses timing-safe bcrypt comparison even for failed lookups (dummy hash prevents timing attacks)
|
|
533
540
|
|
|
534
541
|
## Build
|
|
@@ -536,3 +543,29 @@ traits: {
|
|
|
536
543
|
```bash
|
|
537
544
|
cd storage/framework/core/auth && bun build.ts
|
|
538
545
|
```
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
## Native account workflows
|
|
549
|
+
|
|
550
|
+
Read [ACCOUNT-WORKFLOWS.md](ACCOUNT-WORKFLOWS.md) when implementing magic links,
|
|
551
|
+
completed two-factor login, active teams, social account linking, role seeding,
|
|
552
|
+
referrals, cookie authentication or session idle/fingerprint policy. These are
|
|
553
|
+
native APIs with complete workflows, beyond the low-level TOTP/passkey helpers.
|
|
554
|
+
|
|
555
|
+
## Provider and entrypoint boundaries
|
|
556
|
+
|
|
557
|
+
Default auth routes require the selected auth route bundle. `feature('auth')`
|
|
558
|
+
controls account-family model loading and does not itself mount login/register.
|
|
559
|
+
Opaque access tokens, OAuth grants, token cookies and database session IDs are
|
|
560
|
+
different credentials with different issuance and expiry rules.
|
|
561
|
+
`Auth.guard()` currently returns Auth rather than providing independent
|
|
562
|
+
guard implementations. `viaRemember()` is a compatibility false result;
|
|
563
|
+
browserSession's remember choice is the actual cookie lifetime policy.
|
|
564
|
+
|
|
565
|
+
Session and token user state are bound to the current request. Entry points
|
|
566
|
+
install that scope; application code must not cache a user globally for later
|
|
567
|
+
requests. Revocation-sensitive reads use the primary DB path. Retained evidence:
|
|
568
|
+
`auth/tests/auth-middleware-entrypoints.test.ts`,
|
|
569
|
+
`request-token.test.ts`, `session-read-routing.test.ts`,
|
|
570
|
+
`rbac-default-store.test.ts` and `browser-session-policy.test.ts` under
|
|
571
|
+
`storage/framework/core/`.
|
|
@@ -1,145 +1,87 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacks-auto-imports
|
|
3
|
-
description: Use when
|
|
3
|
+
description: Use when checking browser/server binding delivery, model globals, registry generation, or the difference between ambient declarations and runtime imports. Covers Stacks auto-imports, stx client delivery, server boot and generated registries (107 models).
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
6
|
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Every
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Adding Custom Auto-Imports
|
|
92
|
-
|
|
93
|
-
1. Create function in `resources/functions/`:
|
|
94
|
-
```typescript
|
|
95
|
-
// resources/functions/myUtils.ts
|
|
96
|
-
export function myHelper() { return 'hello' }
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
2. Export from `storage/framework/auto-imports/functions.ts`:
|
|
100
|
-
```typescript
|
|
101
|
-
export { myHelper } from '../../resources/functions/myUtils'
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
3. Declare types in `storage/framework/auto-imports/globals.d.ts`:
|
|
105
|
-
```typescript
|
|
106
|
-
declare function myHelper(): string
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
4. Inject at runtime in `storage/framework/auto-imports/globals.ts`:
|
|
110
|
-
```typescript
|
|
111
|
-
globalThis.myHelper = myHelper
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Generation Commands
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
buddy generate # regenerate all auto-imports
|
|
118
|
-
buddy generate --types # regenerate type declarations
|
|
119
|
-
buddy generate --ide-helpers # regenerate IDE helpers
|
|
120
|
-
buddy generate:component-meta # regenerate component metadata
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
The `build:reset` script also regenerates auto-imports.
|
|
124
|
-
|
|
125
|
-
## Server Auto-Import Initialization
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
import { initiateImports, generateAutoImportFiles, injectGlobalAutoImports } from '@stacksjs/server'
|
|
129
|
-
|
|
130
|
-
initiateImports() // initialize auto-import plugin
|
|
131
|
-
generateAutoImportFiles() // generate runtime auto-import files
|
|
132
|
-
injectGlobalAutoImports() // inject models/functions globally
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Gotchas
|
|
136
|
-
- Browser auto-imports are resolved at BUILD TIME by bun-plugin-stx — not runtime
|
|
137
|
-
- Imported browser modules must declare their own imports; STX entry auto-imports do not leak into module scope
|
|
138
|
-
- Server auto-imports are injected into globalThis at RUNTIME
|
|
139
|
-
- The browser-auto-imports.d.ts file is ~80KB — it's auto-generated, don't edit manually
|
|
140
|
-
- Custom functions must be exported from both the function file AND the auto-imports barrel
|
|
141
|
-
- Type declarations must match the runtime globals for IDE support
|
|
142
|
-
- All 60+ ORM models are auto-imported on the server — available as `User.find(1)` etc.
|
|
143
|
-
- Request models (e.g., `UserRequest`) are also auto-imported for validated request access
|
|
144
|
-
- Auto-imports are regenerated during `buddy generate` and `build:reset`
|
|
145
|
-
- The discovered-packages.json file at `storage/framework/discovered-packages.json` is part of this system
|
|
9
|
+
# Auto-imports and runtime delivery
|
|
10
|
+
|
|
11
|
+
A declaration, a delivered client binding, and an initialized server global are
|
|
12
|
+
three different facts. Inspect the relevant runtime rather than inferring all
|
|
13
|
+
three from an ambient type file.
|
|
14
|
+
|
|
15
|
+
## Browser paths
|
|
16
|
+
|
|
17
|
+
STX client scripts receive eager runtime bindings, compiler-provided bindings,
|
|
18
|
+
and demand-inline composables emitted for supported authored calls. The eager
|
|
19
|
+
bare-window alias list in AGENTS.md and stacks-composables is checked against
|
|
20
|
+
getCachedSignalsRuntime. That list is one delivery path, not the entire API.
|
|
21
|
+
|
|
22
|
+
Current STX also supplies useMediaQuery/usePreferredReducedMotion through
|
|
23
|
+
runtime/compiler bindings, and useForm/useIntersectionObserver/useScroll/
|
|
24
|
+
useMouse/useParallax through demand delivery. Read
|
|
25
|
+
[BROWSER.md](../stacks-composables/BROWSER.md) for exact signatures, supported
|
|
26
|
+
installation versions, signal adapters and cleanup. Imported Stacks composables
|
|
27
|
+
can have different Ref contracts from the same-name bare client helpers.
|
|
28
|
+
|
|
29
|
+
storage/framework/browser-auto-imports.json feeds ambient declarations; it
|
|
30
|
+
is not a complete inventory of executable browser bindings. Utilities,
|
|
31
|
+
provider SDK helpers, stores and custom modules need explicit imports unless
|
|
32
|
+
the installed runtime/compiler/demand implementation actually supplies them.
|
|
33
|
+
|
|
34
|
+
Bindings injected into a script entry do not leak into an imported TypeScript
|
|
35
|
+
module. Every module declares its own functions, stores and type dependencies.
|
|
36
|
+
Component tag discovery is yet another pipeline; use resources/components or
|
|
37
|
+
explicitly opted-in package component roots.
|
|
38
|
+
|
|
39
|
+
## Server paths
|
|
40
|
+
|
|
41
|
+
Server boot resolves model, job, controller and function registries and injects
|
|
42
|
+
eligible values into globalThis. Model definitions exist on disk, but optional
|
|
43
|
+
features and initialization decide the loaded surface. Explicit app-model
|
|
44
|
+
imports preserve inference from the model actually customized by the app.
|
|
45
|
+
|
|
46
|
+
Only runtime model values are globals. ModelRow<typeof Model> and other type
|
|
47
|
+
utilities are imported types; UserRequest/UserRequestModel are not generated
|
|
48
|
+
runtime model variants. Names colliding with built-ins, such as Error/Request,
|
|
49
|
+
need explicit imports and safe local aliases.
|
|
50
|
+
|
|
51
|
+
Import Action, route, response, schema, path, storage, logging and Auth from their
|
|
52
|
+
packages. An ambient helper declaration alone does not establish its global
|
|
53
|
+
runtime initialization. Follow the built-in action's import pattern.
|
|
54
|
+
|
|
55
|
+
## Generation and project overrides
|
|
56
|
+
|
|
57
|
+
The auto-import barrels under storage/framework/auto-imports are generated from
|
|
58
|
+
app definitions, framework defaults and discovered package resources.
|
|
59
|
+
app/ definitions override defaults at the relevant resolver boundary. Models
|
|
60
|
+
also support additive extendModel rather than a complete copied override.
|
|
61
|
+
|
|
62
|
+
Use buddy generate and its documented type-generation variants. Do not hand-
|
|
63
|
+
maintain a second list of Action paths, middleware aliases or runtime model
|
|
64
|
+
names. The registry types derive from resolver maps; stale maps can reject a
|
|
65
|
+
new real file, while a typo in a fresh map is a real missing reference.
|
|
66
|
+
|
|
67
|
+
Application helpers belong in resources/functions and their normal exports.
|
|
68
|
+
Inspect the current generation/discovery pipeline before modifying a generated
|
|
69
|
+
barrel by hand. Components contributed by a package require explicit opt-in;
|
|
70
|
+
views/models/jobs/migrations have their own discovery conventions.
|
|
71
|
+
|
|
72
|
+
## Verification and gotchas
|
|
73
|
+
|
|
74
|
+
- Check client delivery in the installed STX, not only with buddy typecheck.
|
|
75
|
+
- Check server globals after boot or model readiness, not during a cyclic import.
|
|
76
|
+
- Distinguish function values from type-only exports and unavailable feature models.
|
|
77
|
+
- Keep imported browser modules self-contained and clean up observers/timers.
|
|
78
|
+
- Use request snapshots for stx server rendering; an API AsyncLocalStorage scope
|
|
79
|
+
does not automatically span every render callback.
|
|
80
|
+
- Generated declarations and registries are artifacts. Regenerate and inspect
|
|
81
|
+
differences rather than inventing globals to silence an error.
|
|
82
|
+
|
|
83
|
+
Source: core/server/src/imports.ts, core/orm/src/index.ts,
|
|
84
|
+
core/config/src/discovered-resources.ts, generated resolver barrels and installed
|
|
85
|
+
STX client/runtime/demand modules. Retained evidence includes
|
|
86
|
+
core/server/tests/generated-declarations.test.ts, ORM auto-import contracts,
|
|
87
|
+
composables/skill-runtime-globals.test.ts and STX delivery tests.
|