@stacksjs/defaults 0.70.206 → 0.70.208

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.
Files changed (408) hide show
  1. package/TODO.md +21 -0
  2. package/ai/AGENTS.md +79 -0
  3. package/ai/README.md +45 -0
  4. package/ai/claude/launch.json +12 -0
  5. package/ai/skills/stacks-actions/SKILL.md +128 -0
  6. package/ai/skills/stacks-ai/SKILL.md +276 -0
  7. package/ai/skills/stacks-alias/SKILL.md +94 -0
  8. package/ai/skills/stacks-analytics/SKILL.md +91 -0
  9. package/ai/skills/stacks-api/SKILL.md +738 -0
  10. package/ai/skills/stacks-arrays/SKILL.md +277 -0
  11. package/ai/skills/stacks-auth/SKILL.md +422 -0
  12. package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
  13. package/ai/skills/stacks-brandkit/SKILL.md +811 -0
  14. package/ai/skills/stacks-browse/SKILL.md +127 -0
  15. package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
  16. package/ai/skills/stacks-browser/SKILL.md +145 -0
  17. package/ai/skills/stacks-buddy/SKILL.md +676 -0
  18. package/ai/skills/stacks-build/SKILL.md +163 -0
  19. package/ai/skills/stacks-cache/SKILL.md +125 -0
  20. package/ai/skills/stacks-calendar/SKILL.md +113 -0
  21. package/ai/skills/stacks-chat/SKILL.md +371 -0
  22. package/ai/skills/stacks-cli/SKILL.md +112 -0
  23. package/ai/skills/stacks-cloud/SKILL.md +192 -0
  24. package/ai/skills/stacks-cms/SKILL.md +217 -0
  25. package/ai/skills/stacks-collections/SKILL.md +82 -0
  26. package/ai/skills/stacks-commerce/SKILL.md +114 -0
  27. package/ai/skills/stacks-composables/SKILL.md +161 -0
  28. package/ai/skills/stacks-config/SKILL.md +144 -0
  29. package/ai/skills/stacks-configuration/SKILL.md +154 -0
  30. package/ai/skills/stacks-cron/SKILL.md +123 -0
  31. package/ai/skills/stacks-crosswind/SKILL.md +190 -0
  32. package/ai/skills/stacks-dashboard/SKILL.md +173 -0
  33. package/ai/skills/stacks-database/SKILL.md +286 -0
  34. package/ai/skills/stacks-datetime/SKILL.md +269 -0
  35. package/ai/skills/stacks-dependencies/SKILL.md +111 -0
  36. package/ai/skills/stacks-deploy/SKILL.md +102 -0
  37. package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
  38. package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
  39. package/ai/skills/stacks-design-output/SKILL.md +55 -0
  40. package/ai/skills/stacks-design-soft/SKILL.md +156 -0
  41. package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
  42. package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
  43. package/ai/skills/stacks-desktop/SKILL.md +78 -0
  44. package/ai/skills/stacks-development/SKILL.md +298 -0
  45. package/ai/skills/stacks-dns/SKILL.md +149 -0
  46. package/ai/skills/stacks-docs/SKILL.md +109 -0
  47. package/ai/skills/stacks-email/SKILL.md +236 -0
  48. package/ai/skills/stacks-enums/SKILL.md +100 -0
  49. package/ai/skills/stacks-env/SKILL.md +181 -0
  50. package/ai/skills/stacks-error-handling/SKILL.md +137 -0
  51. package/ai/skills/stacks-events/SKILL.md +228 -0
  52. package/ai/skills/stacks-faker/SKILL.md +158 -0
  53. package/ai/skills/stacks-git/SKILL.md +158 -0
  54. package/ai/skills/stacks-guard/SKILL.md +98 -0
  55. package/ai/skills/stacks-health/SKILL.md +75 -0
  56. package/ai/skills/stacks-http/SKILL.md +316 -0
  57. package/ai/skills/stacks-i18n/SKILL.md +198 -0
  58. package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
  59. package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
  60. package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
  61. package/ai/skills/stacks-investigate/SKILL.md +119 -0
  62. package/ai/skills/stacks-jobs/SKILL.md +136 -0
  63. package/ai/skills/stacks-lint/SKILL.md +184 -0
  64. package/ai/skills/stacks-listeners/SKILL.md +99 -0
  65. package/ai/skills/stacks-logging/SKILL.md +78 -0
  66. package/ai/skills/stacks-mail/SKILL.md +120 -0
  67. package/ai/skills/stacks-middleware/SKILL.md +249 -0
  68. package/ai/skills/stacks-migrations/SKILL.md +105 -0
  69. package/ai/skills/stacks-models/SKILL.md +267 -0
  70. package/ai/skills/stacks-new-feature/SKILL.md +206 -0
  71. package/ai/skills/stacks-notifications/SKILL.md +210 -0
  72. package/ai/skills/stacks-objects/SKILL.md +205 -0
  73. package/ai/skills/stacks-office-hours/SKILL.md +134 -0
  74. package/ai/skills/stacks-orm/SKILL.md +342 -0
  75. package/ai/skills/stacks-path/SKILL.md +118 -0
  76. package/ai/skills/stacks-payments/SKILL.md +373 -0
  77. package/ai/skills/stacks-plan-review/SKILL.md +152 -0
  78. package/ai/skills/stacks-plugins/SKILL.md +149 -0
  79. package/ai/skills/stacks-push/SKILL.md +376 -0
  80. package/ai/skills/stacks-query-builder/SKILL.md +128 -0
  81. package/ai/skills/stacks-queue/SKILL.md +559 -0
  82. package/ai/skills/stacks-realtime/SKILL.md +442 -0
  83. package/ai/skills/stacks-redesign/SKILL.md +182 -0
  84. package/ai/skills/stacks-registry/SKILL.md +58 -0
  85. package/ai/skills/stacks-repl/SKILL.md +80 -0
  86. package/ai/skills/stacks-retro/SKILL.md +122 -0
  87. package/ai/skills/stacks-review/SKILL.md +135 -0
  88. package/ai/skills/stacks-router/SKILL.md +231 -0
  89. package/ai/skills/stacks-routes/SKILL.md +105 -0
  90. package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
  91. package/ai/skills/stacks-scheduler/SKILL.md +363 -0
  92. package/ai/skills/stacks-search-engine/SKILL.md +112 -0
  93. package/ai/skills/stacks-security/SKILL.md +129 -0
  94. package/ai/skills/stacks-security-audit/SKILL.md +128 -0
  95. package/ai/skills/stacks-server/SKILL.md +458 -0
  96. package/ai/skills/stacks-shell/SKILL.md +62 -0
  97. package/ai/skills/stacks-slug/SKILL.md +87 -0
  98. package/ai/skills/stacks-sms/SKILL.md +385 -0
  99. package/ai/skills/stacks-socials/SKILL.md +303 -0
  100. package/ai/skills/stacks-storage/SKILL.md +576 -0
  101. package/ai/skills/stacks-strings/SKILL.md +416 -0
  102. package/ai/skills/stacks-stx/SKILL.md +176 -0
  103. package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
  104. package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
  105. package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
  106. package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
  107. package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
  108. package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
  109. package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
  110. package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
  111. package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
  112. package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
  113. package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
  114. package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
  115. package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
  116. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
  117. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
  118. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
  119. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
  120. package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
  121. package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
  122. package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
  123. package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
  124. package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
  125. package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
  126. package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
  127. package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
  128. package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
  129. package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
  130. package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
  131. package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
  132. package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
  133. package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
  134. package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
  135. package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
  136. package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
  137. package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
  138. package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
  139. package/ai/skills/stacks-testing/SKILL.md +129 -0
  140. package/ai/skills/stacks-tunnel/SKILL.md +125 -0
  141. package/ai/skills/stacks-types/SKILL.md +178 -0
  142. package/ai/skills/stacks-ui/SKILL.md +246 -0
  143. package/ai/skills/stacks-utils/SKILL.md +444 -0
  144. package/ai/skills/stacks-validation/SKILL.md +371 -0
  145. package/ai/skills/stacks-whois/SKILL.md +315 -0
  146. package/assets/world-map-data.ts +121 -0
  147. package/bootstrap.ts +114 -0
  148. package/docs/api-examples.md +46 -0
  149. package/docs/index.md +24 -0
  150. package/docs/markdown-examples.md +87 -0
  151. package/functions/analytics.ts +97 -0
  152. package/functions/api.ts +143 -0
  153. package/functions/auth.ts +208 -0
  154. package/functions/billing/payments.ts +149 -0
  155. package/functions/blog.ts +120 -0
  156. package/functions/cms/categorizables.ts +107 -0
  157. package/functions/cms/pages.ts +108 -0
  158. package/functions/cms/posts.ts +100 -0
  159. package/functions/cms/taggables.ts +102 -0
  160. package/functions/commerce/coupons.ts +128 -0
  161. package/functions/commerce/customers.ts +128 -0
  162. package/functions/commerce/gift-cards.ts +119 -0
  163. package/functions/commerce/orders.ts +112 -0
  164. package/functions/commerce/payments.ts +119 -0
  165. package/functions/commerce/products/categories.ts +123 -0
  166. package/functions/commerce/products/manufacturers.ts +123 -0
  167. package/functions/commerce/products/products.ts +123 -0
  168. package/functions/commerce/products/reviews.ts +123 -0
  169. package/functions/commerce/products/units.ts +123 -0
  170. package/functions/commerce/products/variants.ts +123 -0
  171. package/functions/commerce/shippings/delivery-routes.ts +123 -0
  172. package/functions/commerce/shippings/digital-deliveries.ts +119 -0
  173. package/functions/commerce/shippings/drivers.ts +123 -0
  174. package/functions/commerce/shippings/license-keys.ts +123 -0
  175. package/functions/commerce/shippings/shipping-methods.ts +123 -0
  176. package/functions/commerce/shippings/shipping-rates.ts +119 -0
  177. package/functions/commerce/shippings/shipping-zones.ts +119 -0
  178. package/functions/commerce/taxes.ts +119 -0
  179. package/functions/commerce/waitlist/products.ts +123 -0
  180. package/functions/commerce/waitlist/restaurants.ts +123 -0
  181. package/functions/craft.ts +107 -0
  182. package/functions/dashboard.ts +153 -0
  183. package/functions/inbox.ts +95 -0
  184. package/functions/jobs.ts +86 -0
  185. package/functions/monitoring/errors.ts +295 -0
  186. package/functions/queue.ts +111 -0
  187. package/functions/realtime/websockets.ts +96 -0
  188. package/functions/realtime.ts +52 -0
  189. package/functions/releases.ts +49 -0
  190. package/functions/search.ts +126 -0
  191. package/functions/toasts.ts +95 -0
  192. package/functions/uploads.ts +216 -0
  193. package/ide/.gitignore +4 -0
  194. package/ide/cursor/rules/auto-imports.mdc +574 -0
  195. package/ide/cursor/rules/code-style.mdc +12 -0
  196. package/ide/cursor/rules/documentation.mdc +9 -0
  197. package/ide/cursor/rules/error-handling-validation.mdc +11 -0
  198. package/ide/cursor/rules/key-conventions.mdc +11 -0
  199. package/ide/cursor/rules/project-structure.mdc +169 -0
  200. package/ide/cursor/rules/readme.mdc +318 -0
  201. package/ide/cursor/rules/syntax-formatting.mdc +9 -0
  202. package/ide/cursor/rules/testing.mdc +10 -0
  203. package/ide/cursor/rules/typescript.mdc +9 -0
  204. package/ide/cursor/rules/ui-styling.mdc +0 -0
  205. package/ide/dictionary.txt +397 -0
  206. package/ide/jetbrains/.fleet/settings.json +4 -0
  207. package/ide/jetbrains/.idea/.gitignore +5 -0
  208. package/ide/jetbrains/.idea/.name +1 -0
  209. package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
  210. package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
  211. package/ide/jetbrains/.idea/modules.xml +8 -0
  212. package/ide/jetbrains/.idea/stacks.iml +22 -0
  213. package/ide/jetbrains/.idea/vcs.xml +6 -0
  214. package/ide/jetbrains/.idea/webResources.xml +14 -0
  215. package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
  216. package/ide/jetbrains/installed.txt +4 -0
  217. package/ide/jetbrains/options/github-copilot.xml +5 -0
  218. package/ide/jetbrains/options/nodejs.xml +7 -0
  219. package/ide/jetbrains/options/templates.xml +124 -0
  220. package/ide/jetbrains/templates/JavaScript.xml +6 -0
  221. package/ide/jetbrains/templates/Stacks.xml +8 -0
  222. package/ide/vscode/.vscode/README.md +23 -0
  223. package/ide/vscode/.vscode/extensions.json +5 -0
  224. package/ide/vscode/.vscode/settings.json +176 -0
  225. package/ide/vscode/.vscode/stacks.code-snippets +181 -0
  226. package/ide/vscode/LICENSE.md +21 -0
  227. package/ide/vscode/README.md +36 -0
  228. package/ide/vscode/logo.png +0 -0
  229. package/ide/vscode/package.json +79 -0
  230. package/ide/zed/.zed/settings.json +139 -0
  231. package/lang/README.md +28 -0
  232. package/lang/de.yml +14 -0
  233. package/lang/en.yml +15 -0
  234. package/package.json +19 -3
  235. package/project/bootstrap +161 -0
  236. package/project/buddy +175 -0
  237. package/project/storage/framework/tsconfig.app.json +50 -0
  238. package/project/storage/framework/tsconfig.base.json +58 -0
  239. package/routes/core.ts +78 -0
  240. package/routes/dashboard-api.ts +233 -0
  241. package/routes/dashboard.ts +739 -0
  242. package/routes/email.ts +129 -0
  243. package/stores/[name].stx +16 -0
  244. package/stores/git.ts +71 -0
  245. package/stores/payment.ts +474 -0
  246. package/stores/queue.ts +43 -0
  247. package/stores/user.ts +29 -0
  248. package/stx-components-plugin.ts +25 -0
  249. package/styles/design-tokens.css +597 -0
  250. package/types/dashboard.ts +70 -0
  251. package/types/defaults.ts +438 -0
  252. package/vcs/github/CODE_OF_CONDUCT.md +83 -0
  253. package/vcs/github/CONTRIBUTING.md +187 -0
  254. package/vcs/github/EXPLANATIONS.md +41 -0
  255. package/vcs/github/FUNDING.yml +1 -0
  256. package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
  257. package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
  258. package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
  259. package/vcs/github/SECURITY.md +70 -0
  260. package/vcs/github/renovate.json +5 -0
  261. package/vcs/github/stale.yml +14 -0
  262. package/vcs/github/workflows/README.md +16 -0
  263. package/vcs/github/workflows/ci.yml +114 -0
  264. package/vcs/github/workflows/export-size.yml +25 -0
  265. package/vcs/github/workflows/labeler.yml +13 -0
  266. package/vcs/github/workflows/release.yml +219 -0
  267. package/views/[...all].stx +8 -0
  268. package/views/about.md +3 -0
  269. package/views/auth/login.stx +1 -0
  270. package/views/auth/signup.stx +85 -0
  271. package/views/dashboard/.discovered-models.json +542 -0
  272. package/views/dashboard/AUDIT.md +904 -0
  273. package/views/dashboard/[...all].stx +89 -0
  274. package/views/dashboard/access-tokens/index.stx +177 -0
  275. package/views/dashboard/actions/index.stx +129 -0
  276. package/views/dashboard/analytics/blog/index.stx +356 -0
  277. package/views/dashboard/analytics/browsers/index.stx +263 -0
  278. package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
  279. package/views/dashboard/analytics/commerce/web/index.stx +379 -0
  280. package/views/dashboard/analytics/countries/index.stx +289 -0
  281. package/views/dashboard/analytics/devices/index.stx +305 -0
  282. package/views/dashboard/analytics/events/index.stx +536 -0
  283. package/views/dashboard/analytics/index.stx +88 -0
  284. package/views/dashboard/analytics/marketing/index.stx +315 -0
  285. package/views/dashboard/analytics/pages/index.stx +271 -0
  286. package/views/dashboard/analytics/referrers/index.stx +319 -0
  287. package/views/dashboard/analytics/web/index.stx +356 -0
  288. package/views/dashboard/buddy/index.stx +198 -0
  289. package/views/dashboard/ci/index.stx +462 -0
  290. package/views/dashboard/cloud/index.stx +452 -0
  291. package/views/dashboard/commands/index.stx +295 -0
  292. package/views/dashboard/commerce/categories/index.stx +406 -0
  293. package/views/dashboard/commerce/coupons/index.stx +485 -0
  294. package/views/dashboard/commerce/customers/index.stx +410 -0
  295. package/views/dashboard/commerce/dashboard/index.stx +287 -0
  296. package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
  297. package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
  298. package/views/dashboard/commerce/delivery/drivers.stx +397 -0
  299. package/views/dashboard/commerce/delivery/index.stx +18 -0
  300. package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
  301. package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
  302. package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
  303. package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
  304. package/views/dashboard/commerce/delivery/tabs.ts +25 -0
  305. package/views/dashboard/commerce/gift-cards/index.stx +561 -0
  306. package/views/dashboard/commerce/manufacturers/index.stx +308 -0
  307. package/views/dashboard/commerce/orders/index.stx +247 -0
  308. package/views/dashboard/commerce/payments/index.stx +535 -0
  309. package/views/dashboard/commerce/pos/index.stx +653 -0
  310. package/views/dashboard/commerce/printers/devices/index.stx +273 -0
  311. package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
  312. package/views/dashboard/commerce/products/detail.stx +563 -0
  313. package/views/dashboard/commerce/products/index.stx +370 -0
  314. package/views/dashboard/commerce/reviews/index.stx +656 -0
  315. package/views/dashboard/commerce/reviews/index.ts +0 -0
  316. package/views/dashboard/commerce/taxes/index.stx +377 -0
  317. package/views/dashboard/commerce/units/index.stx +317 -0
  318. package/views/dashboard/commerce/variants/index.stx +319 -0
  319. package/views/dashboard/commerce/waitlist/products.stx +942 -0
  320. package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
  321. package/views/dashboard/components/index.stx +330 -0
  322. package/views/dashboard/composables/index.ts +19 -0
  323. package/views/dashboard/composables/useChart.ts +77 -0
  324. package/views/dashboard/composables/useNavigation.ts +99 -0
  325. package/views/dashboard/composables/useRole.ts +58 -0
  326. package/views/dashboard/composables/useTheme.ts +74 -0
  327. package/views/dashboard/content/authors/index.stx +171 -0
  328. package/views/dashboard/content/blog/index.stx +493 -0
  329. package/views/dashboard/content/categories/index.stx +169 -0
  330. package/views/dashboard/content/comments/index.stx +189 -0
  331. package/views/dashboard/content/dashboard.stx +383 -0
  332. package/views/dashboard/content/files/index.stx +706 -0
  333. package/views/dashboard/content/pages/index.stx +174 -0
  334. package/views/dashboard/content/posts/index.stx +269 -0
  335. package/views/dashboard/content/seo/index.stx +240 -0
  336. package/views/dashboard/content/tags/index.stx +167 -0
  337. package/views/dashboard/data/activity/index.stx +261 -0
  338. package/views/dashboard/data/dashboard/index.stx +116 -0
  339. package/views/dashboard/data/subscribers.stx +270 -0
  340. package/views/dashboard/data/teams.stx +275 -0
  341. package/views/dashboard/data/users.stx +279 -0
  342. package/views/dashboard/dependencies/index.stx +178 -0
  343. package/views/dashboard/deployments/[id].stx +234 -0
  344. package/views/dashboard/deployments/index.stx +9 -0
  345. package/views/dashboard/dns/index.stx +163 -0
  346. package/views/dashboard/environment/index.stx +283 -0
  347. package/views/dashboard/errors/index.stx +274 -0
  348. package/views/dashboard/forgot-password.stx +57 -0
  349. package/views/dashboard/functions/index.stx +159 -0
  350. package/views/dashboard/health/index.stx +248 -0
  351. package/views/dashboard/inbox/activity.stx +350 -0
  352. package/views/dashboard/inbox/index.stx +452 -0
  353. package/views/dashboard/inbox/settings.stx +290 -0
  354. package/views/dashboard/index.stx +252 -0
  355. package/views/dashboard/insights/index.stx +529 -0
  356. package/views/dashboard/jobs/[id].stx +430 -0
  357. package/views/dashboard/jobs/history.stx +222 -0
  358. package/views/dashboard/jobs/index.stx +214 -0
  359. package/views/dashboard/kanban/[id].stx +899 -0
  360. package/views/dashboard/kanban/index.stx +260 -0
  361. package/views/dashboard/layouts/default.stx +565 -0
  362. package/views/dashboard/layouts/guest.stx +10 -0
  363. package/views/dashboard/login.stx +48 -0
  364. package/views/dashboard/logs/index.stx +540 -0
  365. package/views/dashboard/mailboxes/index.stx +149 -0
  366. package/views/dashboard/management/permissions/index.stx +490 -0
  367. package/views/dashboard/marketing/campaigns/index.stx +604 -0
  368. package/views/dashboard/marketing/lists/index.stx +514 -0
  369. package/views/dashboard/marketing/reviews/index.stx +475 -0
  370. package/views/dashboard/marketing/social-posts/index.stx +560 -0
  371. package/views/dashboard/models/[model].stx +195 -0
  372. package/views/dashboard/models/index.stx +159 -0
  373. package/views/dashboard/monitoring/errors/index.stx +415 -0
  374. package/views/dashboard/notifications/dashboard.stx +383 -0
  375. package/views/dashboard/notifications/email.stx +336 -0
  376. package/views/dashboard/notifications/history.stx +373 -0
  377. package/views/dashboard/notifications/sms.stx +332 -0
  378. package/views/dashboard/packages/index.stx +195 -0
  379. package/views/dashboard/queries/[id].stx +381 -0
  380. package/views/dashboard/queries/history.stx +227 -0
  381. package/views/dashboard/queries/index.stx +335 -0
  382. package/views/dashboard/queries/slow.stx +318 -0
  383. package/views/dashboard/queue/index.stx +427 -0
  384. package/views/dashboard/realtime/index.stx +429 -0
  385. package/views/dashboard/register.stx +46 -0
  386. package/views/dashboard/releases/index.stx +389 -0
  387. package/views/dashboard/requests/index.stx +462 -0
  388. package/views/dashboard/serverless/index.stx +475 -0
  389. package/views/dashboard/servers/[id].stx +299 -0
  390. package/views/dashboard/servers/index.stx +483 -0
  391. package/views/dashboard/settings/billing.stx +50 -0
  392. package/views/dashboard/settings/index.stx +256 -0
  393. package/views/dashboard/settings/mail.stx +252 -0
  394. package/views/dashboard/stores/auth.ts +123 -0
  395. package/views/dashboard/stores/ci.ts +342 -0
  396. package/views/dashboard/stores/index.ts +129 -0
  397. package/views/dashboard/stores/kanban.ts +723 -0
  398. package/views/dashboard/stores/rbac.ts +350 -0
  399. package/views/dashboard/stx.config.ts +34 -0
  400. package/views/dashboard/teams/[id].stx +170 -0
  401. package/views/forum/category.stx +92 -0
  402. package/views/forum/index.stx +209 -0
  403. package/views/forum/new-topic.stx +113 -0
  404. package/views/forum/profile.stx +1 -0
  405. package/views/forum/topic.stx +143 -0
  406. package/views/hello-world/[name].stx +47 -0
  407. package/views/index.stx +21 -0
  408. package/views/system-tray/index.stx +147 -0
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: stacks-investigate
3
+ description: Use when debugging issues in the Stacks project — four-phase root-cause debugging with hypothesis testing and escalation. Enforces "no fixes without root cause." Invoke with /stacks-investigate.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # /stacks-investigate — Root Cause Debugging
10
+
11
+ You are a systematic debugger for the Stacks framework. Find the **root cause**, not just make symptoms go away. No fixes until the root cause is confirmed.
12
+
13
+ ## Phase 1: Investigate
14
+
15
+ Gather information. Do not form hypotheses yet.
16
+
17
+ 1. **Understand the symptom**: What's happening vs. what should happen?
18
+ 2. **Reproduce mentally**: Read code paths end-to-end. Trace data flow from input to failure point.
19
+ 3. **Collect evidence**:
20
+ - Read error messages, stack traces, and logs (`storage/logs/stacks.log`)
21
+ - Check recent git history: `git log --oneline -20 -- [relevant files]`
22
+ - Check for related test failures: `bun test [relevant test file]`
23
+ - Check config files that affect the failing path (`config/*.ts`)
24
+ 4. **Map blast radius**: What else touches this code? Use `grep` to find all callers.
25
+
26
+ For Stacks-specific issues, also check:
27
+ - ORM model definitions in `storage/framework/defaults/app/Models/`
28
+ - Route definitions in `routes/`
29
+ - Action handlers in `storage/framework/core/actions/src/`
30
+ - Middleware in `storage/framework/defaults/app/Middleware/`
31
+
32
+ ```
33
+ ## Investigation Summary
34
+ **Symptom**: [what's happening]
35
+ **Expected**: [what should happen]
36
+ **Affected code**: [file:line references]
37
+ **Recent changes**: [relevant commits]
38
+ **Blast radius**: [other code/features affected]
39
+ ```
40
+
41
+ ## Phase 2: Pattern Analysis
42
+
43
+ 1. **When does it fail?** Always, or only under certain conditions? Environment-specific?
44
+ 2. **Failure mode?** Crash / wrong result / hang / intermittent
45
+ 3. **Where in the stack?**
46
+ - Framework issue (check `storage/framework/core/`)
47
+ - Application code issue (`app/`, `routes/`, `resources/`)
48
+ - Dependency issue (check `bun.lock` for version changes)
49
+ - Configuration issue (`config/*.ts`)
50
+
51
+ ```
52
+ ## Pattern Analysis
53
+ **Failure type**: [crash / wrong result / hang / intermittent]
54
+ **Consistency**: [always / conditional / intermittent]
55
+ **Layer**: [framework / application / dependency / config]
56
+ **Key observation**: [most important pattern]
57
+ ```
58
+
59
+ ## Phase 3: Hypothesis Testing
60
+
61
+ Form up to 3 hypotheses, ranked by likelihood.
62
+
63
+ ```
64
+ ### Hypothesis 1 (most likely): [title]
65
+ **Claim**: [specific root cause]
66
+ **Prediction**: [observable if true]
67
+ **Test**: [how to verify]
68
+ **Result**: ✅ Confirmed / ❌ Refuted / ⚠️ Inconclusive
69
+ ```
70
+
71
+ ### Escalation Rule
72
+
73
+ If all 3 hypotheses refuted:
74
+ 1. **Stop and reassess.** Don't generate more hypotheses in a loop.
75
+ 2. Present what you've ruled out.
76
+ 3. Ask for additional context.
77
+ 4. If still stuck after second round, recommend:
78
+ - Add targeted logging with `log.debug()` from `@stacksjs/logging`
79
+ - Write a minimal reproduction case
80
+ - Run `buddy doctor` for system diagnostics
81
+
82
+ **Never apply a fix just to "see if it helps."**
83
+
84
+ ## Phase 4: Implementation
85
+
86
+ Only enter when a hypothesis is confirmed.
87
+
88
+ 1. **Explain the root cause** in plain language
89
+ 2. **Show the minimal fix** — change as little as possible
90
+ 3. **Verify**:
91
+ - Run existing tests: `bun test`
92
+ - Check blast radius from Phase 1
93
+ - Run `bunx --bun pickier . --fix` for formatting
94
+ 4. **Suggest a regression test**
95
+
96
+ ```
97
+ ## Root Cause
98
+ [Clear explanation]
99
+
100
+ ## Fix
101
+ [Minimal code change with file:line references]
102
+
103
+ ## Verification
104
+ - [x] Existing tests pass (`bun test`)
105
+ - [x] Blast radius checked
106
+ - [ ] Regression test: [suggested test]
107
+ ```
108
+
109
+ ## Rules
110
+
111
+ - **No fixes without root cause.** If you can't explain WHY, you haven't found the bug.
112
+ - **Read before you grep.** Understand architecture first.
113
+ - **Don't blame the framework first.** Application code is wrong far more often than `storage/framework/core/` code.
114
+ - **Intermittent bugs are timing bugs** until proven otherwise. Look for race conditions, missing `await`, shared mutable state.
115
+ - **If the fix is more than ~20 lines, question the root cause.** Large fixes often mean you're working around the problem.
116
+
117
+ ## Downstream
118
+
119
+ > **Fix applied.** Run `/stacks-review` to verify — it will check against this investigation's root cause.
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: stacks-jobs
3
+ description: Use when creating background job classes in app/Jobs/ — job structure, the handle method, job configuration (queue, tries, backoff, timeout, rate), dispatching patterns (dispatch, dispatchIf, dispatchAfter, dispatchNow), or the Every schedule constants. For the queue system internals (workers, batching, events, drivers, testing), see stacks-queue.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Stacks Jobs
10
+
11
+ Background job classes defined in `app/Jobs/`.
12
+
13
+ ## Key Paths
14
+ - Application jobs: `app/Jobs/`
15
+ - Queue config: `config/queue.ts`
16
+
17
+ ## Creating a Job
18
+
19
+ ```typescript
20
+ // app/Jobs/SendWelcomeEmail.ts
21
+ import { Job } from '@stacksjs/queue'
22
+
23
+ export default new Job({
24
+ name: 'SendWelcomeEmail',
25
+ description: 'Send welcome email to new user',
26
+ queue: 'emails', // queue name (default: 'default')
27
+ tries: 3, // max attempts
28
+ backoff: 10, // seconds between retries
29
+ timeout: 30, // max execution time (seconds)
30
+ enabled: true, // can be disabled
31
+
32
+ async handle(payload: { email: string; name: string }) {
33
+ console.log(`Sending to ${payload.email}`)
34
+ // Do work here
35
+ return { sent: true }
36
+ }
37
+ })
38
+ ```
39
+
40
+ ## Job Configuration Options
41
+
42
+ ```typescript
43
+ {
44
+ name: string // job identifier
45
+ description?: string // human-readable description
46
+ queue?: string // queue name (default: 'default')
47
+ tries?: number // max retry attempts
48
+ backoff?: number // seconds between retries
49
+ backoffConfig?: { // advanced backoff
50
+ strategy: 'fixed' | 'exponential' | 'linear'
51
+ initialDelay: number
52
+ factor: number
53
+ maxDelay: number
54
+ jitter?: { enabled: boolean, factor: number }
55
+ }
56
+ timeout?: number // max seconds per attempt
57
+ rate?: string // cron schedule (e.g., Every.Hour)
58
+ enabled?: boolean // enable/disable job
59
+ handle: (payload?) => any // job logic
60
+ }
61
+ ```
62
+
63
+ ## Dispatching Jobs
64
+
65
+ ```typescript
66
+ // Simple dispatch
67
+ await SendWelcomeEmail.dispatch({ email: 'user@example.com', name: 'John' })
68
+
69
+ // Conditional dispatch
70
+ await SendWelcomeEmail.dispatchIf(isNewUser, { email, name })
71
+ await SendWelcomeEmail.dispatchUnless(isExistingUser, { email, name })
72
+
73
+ // Delayed dispatch (60 second delay)
74
+ await SendWelcomeEmail.dispatchAfter(60, { email, name })
75
+
76
+ // Immediate execution (bypasses queue)
77
+ await SendWelcomeEmail.dispatchNow({ email, name })
78
+ ```
79
+
80
+ ## Fluent Job Builder
81
+
82
+ ```typescript
83
+ import { job } from '@stacksjs/queue'
84
+
85
+ await job('SendWelcomeEmail', { email, name })
86
+ .onQueue('emails')
87
+ .delay(60)
88
+ .tries(5)
89
+ .timeout(30)
90
+ .backoff([10, 30, 60])
91
+ .dispatch()
92
+ ```
93
+
94
+ ## Scheduled Jobs
95
+
96
+ Use the `rate` property for automatic scheduling:
97
+
98
+ ```typescript
99
+ import { Every } from '@stacksjs/enums'
100
+
101
+ export default new Job({
102
+ name: 'CleanupExpiredTokens',
103
+ rate: Every.Hour, // runs every hour
104
+ // rate: Every.Day, // runs daily
105
+ // rate: '*/5 * * * *', // custom cron: every 5 minutes
106
+
107
+ handle() {
108
+ // cleanup logic
109
+ }
110
+ })
111
+ ```
112
+
113
+ Register in `app/Scheduler.ts`:
114
+ ```typescript
115
+ import { schedule } from '@stacksjs/scheduler'
116
+
117
+ export default function() {
118
+ schedule.job('CleanupExpiredTokens').hourly().setTimeZone('America/New_York')
119
+ }
120
+ ```
121
+
122
+ ## CLI Commands
123
+ ```bash
124
+ buddy make:job [name] # scaffold a new job
125
+ buddy queue # queue management
126
+ ```
127
+
128
+ ## Gotchas
129
+ - Jobs must export `default new Job({...})` — not a plain object
130
+ - The `handle()` method receives the payload passed to `dispatch()`
131
+ - `dispatchNow()` runs immediately in the current process — no queue involved
132
+ - Default queue driver is `sync` — jobs run immediately unless changed to `database` or `redis`
133
+ - Jobs with `rate` are auto-discovered by the scheduler
134
+ - Backoff array `[10, 30, 60]` means: retry after 10s, then 30s, then 60s
135
+ - Jobs should be idempotent — safe to retry on failure
136
+ - For queue workers, batching, events, and testing, see the `stacks-queue` skill
@@ -0,0 +1,184 @@
1
+ ---
2
+ name: stacks-lint
3
+ description: Use when linting or formatting code in a Stacks project. CRITICAL - always use pickier, NEVER eslint directly. Run 'bunx --bun pickier .' to lint, 'bunx --bun pickier . --fix' to auto-fix. For unused variables, prefer eslint-disable-next-line comments over underscore prefix. Covers @stacksjs/lint and config/code-style.ts.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Stacks Linting
10
+
11
+ ## CRITICAL RULES
12
+ 1. **ALWAYS** use `bunx --bun pickier .` to lint -- **NEVER** use `eslint` directly
13
+ 2. **Auto-fix**: `bunx --bun pickier . --fix`
14
+ 3. For unused variable warnings: prefer `// eslint-disable-next-line` comments over prefixing with `_`
15
+
16
+ ## Key Paths
17
+ - Lint package: `storage/framework/core/lint/` (package: `@stacksjs/lint`)
18
+ - Configuration: `config/code-style.ts` (auto-loaded via pickier's bunfig alias `code-style`; pickier handles both linting and formatting)
19
+ - Lint command source: `storage/framework/core/buddy/src/commands/lint.ts`
20
+
21
+ ## Package Details
22
+ - Package name: `@stacksjs/lint`
23
+ - Version: tracks framework version (currently 0.70.23)
24
+ - The lint package is a thin wrapper -- the actual linting is done by pickier
25
+ - `storage/framework/core/lint/build.ts` is a no-op (nothing to build)
26
+ - Dev dependencies: `better-dx`, `@stacksjs/gitlint`, `bun-git-hooks`
27
+
28
+ ## Commands
29
+
30
+ ### Via buddy CLI
31
+ The buddy `lint` command internally runs pickier with the project's pickier config:
32
+
33
+ ```bash
34
+ # Lint (runs: bunx --bun pickier run --mode lint --config ./pickier.config.ts)
35
+ buddy lint
36
+
37
+ # Auto-fix (runs: bunx --bun pickier run --mode lint --config ./pickier.config.ts --fix)
38
+ buddy lint --fix
39
+ buddy lint:fix
40
+
41
+ # Format (runs: bunx --bun pickier run --mode format --config ./pickier.config.ts --write)
42
+ buddy format
43
+ buddy format --write # same as above (write is default)
44
+
45
+ # Check formatting without changes
46
+ buddy format --check # runs: pickier run --mode format --config ./pickier.config.ts --check
47
+ buddy format:check
48
+ ```
49
+
50
+ ### Direct pickier usage
51
+ ```bash
52
+ # Lint entire project
53
+ bunx --bun pickier .
54
+
55
+ # Auto-fix
56
+ bunx --bun pickier . --fix
57
+
58
+ # Via npm scripts
59
+ bun run lint
60
+ bun run lint:fix
61
+ bun run format
62
+ bun run format:check
63
+ ```
64
+
65
+ ## config/code-style.ts (PickierOptions)
66
+
67
+ The actual configuration used by the project. This is the source of truth for all lint settings:
68
+
69
+ ```typescript
70
+ import type { PickierOptions } from 'pickier'
71
+
72
+ const config: PickierOptions = {
73
+ format: {
74
+ extensions: ['ts', 'js', 'stx', 'json', 'yaml', 'md'],
75
+ indent: 2,
76
+ quotes: 'single',
77
+ semi: false,
78
+ },
79
+
80
+ rules: {
81
+ // TypeScript rules
82
+ noDebugger: 'off',
83
+ noConsole: 'off',
84
+ },
85
+
86
+ pluginRules: {
87
+ // Regexp rules disabled (false positives on route definitions)
88
+ 'regexp/no-unused-capturing-group': 'off',
89
+ 'regexp/no-super-linear-backtracking': 'off',
90
+ 'regexp/optimal-quantifier-concatenation': 'off',
91
+ // Style rules disabled (conflict with common patterns or generated code)
92
+ 'style/brace-style': 'off',
93
+ 'style/max-statements-per-line': 'off',
94
+ 'style/quotes': 'off',
95
+ 'indent': 'off',
96
+ 'quotes': 'off',
97
+ // TypeScript rules
98
+ 'ts/no-top-level-await': 'off',
99
+ // Console is intentional
100
+ 'no-console': 'off',
101
+ // Markdown rules
102
+ 'markdown/heading-increment': 'off',
103
+ 'markdown/no-empty-links': 'off',
104
+ },
105
+
106
+ ignores: [
107
+ '**/fixtures/**',
108
+ '**/coverage/**',
109
+ '**/temp/**',
110
+ ],
111
+ }
112
+
113
+ export default config
114
+ ```
115
+
116
+ ## Format Settings (enforced)
117
+ - **Indent**: 2 spaces
118
+ - **Quotes**: single quotes
119
+ - **Semicolons**: none (no semicolons)
120
+ - **Extensions**: ts, js, stx, json, yaml, md
121
+
122
+ ## Handling Unused Variables
123
+
124
+ When pickier/eslint reports unused variables, use eslint-disable comments -- do NOT prefix with underscore:
125
+
126
+ ```typescript
127
+ // CORRECT: Use eslint-disable comment
128
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
129
+ const unusedVar = someFunction()
130
+
131
+ // ALSO CORRECT: Use eslint-disable for next line only
132
+ // eslint-disable-next-line no-unused-vars
133
+ function handler(req, res, next) {
134
+ res.send('ok')
135
+ }
136
+
137
+ // INCORRECT: Don't prefix with underscore
138
+ const _unusedVar = someFunction() // DON'T DO THIS
139
+ ```
140
+
141
+ ## Internal Implementation
142
+
143
+ The buddy `lint` command (in `storage/framework/core/buddy/src/commands/lint.ts`) delegates entirely to pickier:
144
+
145
+ ```typescript
146
+ // lint.ts internals
147
+ buddy
148
+ .command('lint', 'Automagically lints your project codebase')
149
+ .option('-f, --fix', 'Automagically fixes all lint errors', { default: false })
150
+ .action(async (options: LintOptions) => {
151
+ if (options.fix)
152
+ await runCommand('bunx --bun pickier run --mode lint --config ./pickier.config.ts --fix', { cwd: path.projectPath() })
153
+ else
154
+ await runCommand('bunx --bun pickier run --mode lint --config ./pickier.config.ts', { cwd: path.projectPath() })
155
+ })
156
+ ```
157
+
158
+ The `format` command uses pickier in format mode:
159
+
160
+ ```typescript
161
+ buddy
162
+ .command('format', 'Format your project codebase')
163
+ .option('-w, --write', 'Write changes to files', { default: false })
164
+ .option('-c, --check', 'Check formatting without making changes', { default: false })
165
+ .action(async (options) => {
166
+ if (options.check)
167
+ await runCommand('bunx --bun pickier run --mode format --config ./pickier.config.ts --check', { cwd: path.projectPath() })
168
+ else
169
+ await runCommand('bunx --bun pickier run --mode format --config ./pickier.config.ts --write', { cwd: path.projectPath() })
170
+ })
171
+ ```
172
+
173
+ ## Gotchas
174
+ - Pickier is the Stacks linting tool -- it wraps eslint with Stacks-specific config
175
+ - **NEVER** run `eslint` directly -- always go through `bunx --bun pickier` or `buddy lint`
176
+ - The `config/code-style.ts` file exports a `PickierOptions` object -- not an eslint config (auto-discovered by pickier via bunfig alias `code-style`)
177
+ - The project intentionally allows `console.*` calls (`noConsole: 'off'`, `'no-console': 'off'`)
178
+ - The project intentionally allows `debugger` statements (`noDebugger: 'off'`)
179
+ - Top-level await is allowed (`'ts/no-top-level-await': 'off'`)
180
+ - Brace style and max-statements-per-line rules are disabled to avoid conflicts with generated code
181
+ - Run `bunx --bun pickier . --fix` after code generation to clean up
182
+ - `buddy lint` exits through the `lint:*` wildcard handler if an invalid sub-command is used
183
+ - `buddy format` defaults to `--write` mode (writes changes) unless `--check` is specified
184
+ - The lint package (`@stacksjs/lint`) itself has no source files to build -- it is a configuration-only package
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: stacks-listeners
3
+ description: Use when creating event listeners in app/Listeners/ — the listener file structure, registering listeners in app/Events.ts, the listener-to-action mapping pattern, CLI event listeners in Console.ts, or debugging listener execution. For the event system API (dispatch, listen, emitter, model events), see stacks-events.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Stacks Event Listeners
10
+
11
+ Application-level event listeners in `app/Listeners/`.
12
+
13
+ ## Key Paths
14
+ - Listeners: `app/Listeners/`
15
+ - Event mapping: `app/Events.ts`
16
+ - Listener setup: `app/Listener.ts`
17
+
18
+ ## Event → Listener Mapping (app/Events.ts)
19
+
20
+ ```typescript
21
+ export default {
22
+ 'user:registered': ['SendWelcomeEmail'], // triggers app/Actions/SendWelcomeEmail.ts
23
+ 'user:created': ['NotifyUser'], // triggers app/Actions/NotifyUser.ts
24
+ 'order:created': ['ProcessPayment', 'SendOrderConfirmation'], // multiple listeners
25
+ } satisfies Events
26
+ ```
27
+
28
+ Keys are event names. Values are arrays of Action names from `app/Actions/`.
29
+
30
+ ## How Listeners Work
31
+
32
+ 1. Events are dispatched: `dispatch('user:registered', { id: 1 })`
33
+ 2. The wildcard handler in `app/Listener.ts` catches ALL events
34
+ 3. Checks if the event has registered listeners in `app/Events.ts`
35
+ 4. For each listener, dynamically imports `app/Actions/{listener}.ts`
36
+ 5. Calls `action.handle(eventData)`
37
+ 6. Action modules are cached after first import
38
+
39
+ ## Creating a Listener Action
40
+
41
+ ```typescript
42
+ // app/Actions/SendWelcomeEmail.ts
43
+ export default {
44
+ name: 'SendWelcomeEmail',
45
+
46
+ async handle(event: { id: number; email: string; name: string }) {
47
+ // event contains the data passed to dispatch()
48
+ await sendWelcomeEmail({ to: event.email, name: event.name })
49
+ return { success: true }
50
+ }
51
+ }
52
+ ```
53
+
54
+ ## CLI Event Listeners (app/Listeners/Console.ts)
55
+
56
+ For CLI-specific events (not HTTP):
57
+
58
+ ```typescript
59
+ export default function(cli: CLI) {
60
+ // Specific command
61
+ cli.on('inspire:three', () => {
62
+ console.log(getThreeQuotes())
63
+ })
64
+
65
+ // Default handler (unknown commands)
66
+ cli.on('inspire:!', () => {
67
+ console.log('Unknown inspire command')
68
+ })
69
+
70
+ // Wildcard (matches inspire:anything)
71
+ cli.on('inspire:*', () => {
72
+ console.log('Some inspire variant')
73
+ })
74
+ }
75
+ ```
76
+
77
+ ## Multiple Listeners Per Event
78
+
79
+ ```typescript
80
+ // app/Events.ts
81
+ {
82
+ 'order:created': [
83
+ 'ProcessPayment', // runs first
84
+ 'SendOrderConfirmation', // runs second
85
+ 'UpdateInventory', // runs third
86
+ 'NotifyWarehouse' // runs fourth
87
+ ]
88
+ }
89
+ ```
90
+
91
+ Listeners execute sequentially (not in parallel) — each awaits completion.
92
+
93
+ ## Gotchas
94
+ - Listeners are Action names, not file paths — `'SendWelcomeEmail'` resolves to `app/Actions/SendWelcomeEmail.ts`
95
+ - The action must have a `handle(event)` method
96
+ - Listeners run sequentially per event — order in the array matters
97
+ - Action modules are cached after first load — no hot-reload for listeners
98
+ - CLI listeners are separate from HTTP event listeners
99
+ - For the event API (dispatch, listen, emitter), see the `stacks-events` skill
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: stacks-logging
3
+ description: Use when implementing logging in Stacks — the log facade (info, error, warn, debug, success), dump/dd debugging, timing functions, file-based logging, or log configuration. Covers @stacksjs/logging and config/logging.ts.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Stacks Logging
10
+
11
+ Uses @stacksjs/clarity Logger with file writing to `storage/logs/stacks.log`.
12
+
13
+ ## Key Paths
14
+ - Core package: `storage/framework/core/logging/src/`
15
+ - Configuration: `config/logging.ts`
16
+ - Log model: `storage/framework/defaults/app/Models/Log.ts`
17
+ - Log file: `storage/logs/stacks.log`
18
+
19
+ ## Log Facade
20
+
21
+ ```typescript
22
+ import { log } from '@stacksjs/logging'
23
+
24
+ await log.info('User created', { userId: 1 })
25
+ await log.success('Deployment complete')
26
+ await log.warn('Rate limit approaching', { remaining: 10 })
27
+ await log.warning('Alias for warn')
28
+ await log.error(new Error('Something failed'), { context: 'handler' })
29
+ await log.debug('Debug info', { query: 'SELECT ...' })
30
+ ```
31
+
32
+ ### Error with Exit
33
+ ```typescript
34
+ await log.error(err, { shouldExit: true }) // logs and exits process
35
+ ```
36
+
37
+ ## Dump & Die
38
+
39
+ ```typescript
40
+ import { dump, dd, echo } from '@stacksjs/logging'
41
+
42
+ await dump(variable1, variable2) // inspect without stopping
43
+ await dd(variable1, variable2) // inspect and exit (never returns)
44
+ await echo('simple output')
45
+ ```
46
+
47
+ ## Timing
48
+
49
+ ```typescript
50
+ const done = log.time('database-query')
51
+ await performQuery()
52
+ await done() // logs elapsed time
53
+ ```
54
+
55
+ ## Logger Instance
56
+
57
+ ```typescript
58
+ import { logger } from '@stacksjs/logging'
59
+
60
+ const l = logger // underlying clarity Logger instance
61
+ ```
62
+
63
+ ## config/logging.ts
64
+ ```typescript
65
+ {
66
+ logsPath: 'storage/logs',
67
+ deploymentsPath: 'storage/logs/deployments'
68
+ }
69
+ ```
70
+
71
+ ## Gotchas
72
+ - All log methods are async — they write to both console and file
73
+ - Log file is at `storage/logs/stacks.log`
74
+ - `dd()` never returns — it exits the process after dumping
75
+ - `dump()` continues execution — use for non-destructive debugging
76
+ - The Log model enables database-backed log storage and querying
77
+ - Error logging can optionally exit the process with `shouldExit: true`
78
+ - Logging is a dependency of many other packages — it's available everywhere