@maestro-js/agent-skills 1.0.0-alpha.2 → 1.0.0-alpha.20

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 (691) hide show
  1. package/dist/bin.js +19 -0
  2. package/package.json +8 -7
  3. package/{dist → skills}/choosing-an-npm-package/SKILL.md +5 -4
  4. package/skills/iconify/SKILL.md +82 -0
  5. package/skills/iconify/scripts/iconify.js +111 -0
  6. package/skills/iso-fns/SKILL.md +137 -0
  7. package/skills/iso-fns/references/api_reference.md +435 -0
  8. package/skills/maestro-architecture/SKILL.md +552 -0
  9. package/skills/maestro-examples/SKILL.md +140 -0
  10. package/skills/maestro-examples/references/cadence/cadence-web/.auth/user.json +15 -0
  11. package/skills/maestro-examples/references/cadence/cadence-web/app/app.css +112 -0
  12. package/skills/maestro-examples/references/cadence/cadence-web/app/components/auth-layout.tsx +39 -0
  13. package/skills/maestro-examples/references/cadence/cadence-web/app/components/back-link.tsx +24 -0
  14. package/skills/maestro-examples/references/cadence/cadence-web/app/components/button-group.tsx +78 -0
  15. package/skills/maestro-examples/references/cadence/cadence-web/app/components/button-link.tsx +77 -0
  16. package/skills/maestro-examples/references/cadence/cadence-web/app/components/button.tsx +139 -0
  17. package/skills/maestro-examples/references/cadence/cadence-web/app/components/checkbox.tsx +210 -0
  18. package/skills/maestro-examples/references/cadence/cadence-web/app/components/chip.tsx +161 -0
  19. package/skills/maestro-examples/references/cadence/cadence-web/app/components/container.tsx +85 -0
  20. package/skills/maestro-examples/references/cadence/cadence-web/app/components/date-range.tsx +141 -0
  21. package/skills/maestro-examples/references/cadence/cadence-web/app/components/date-time-picker.tsx +199 -0
  22. package/skills/maestro-examples/references/cadence/cadence-web/app/components/empty-state.tsx +19 -0
  23. package/skills/maestro-examples/references/cadence/cadence-web/app/components/form-page.tsx +41 -0
  24. package/skills/maestro-examples/references/cadence/cadence-web/app/components/form.tsx +106 -0
  25. package/skills/maestro-examples/references/cadence/cadence-web/app/components/helpers/animated-popover.tsx +27 -0
  26. package/skills/maestro-examples/references/cadence/cadence-web/app/components/helpers/button-context.ts +13 -0
  27. package/skills/maestro-examples/references/cadence/cadence-web/app/components/helpers/calendar-month-year-picker.tsx +283 -0
  28. package/skills/maestro-examples/references/cadence/cadence-web/app/components/helpers/form-field.tsx +231 -0
  29. package/skills/maestro-examples/references/cadence/cadence-web/app/components/helpers/get-button-classes.ts +141 -0
  30. package/skills/maestro-examples/references/cadence/cadence-web/app/components/helpers/headless-button.tsx +39 -0
  31. package/skills/maestro-examples/references/cadence/cadence-web/app/components/icon.tsx +29 -0
  32. package/skills/maestro-examples/references/cadence/cadence-web/app/components/inline-alert.tsx +57 -0
  33. package/skills/maestro-examples/references/cadence/cadence-web/app/components/interaction-form.tsx +87 -0
  34. package/skills/maestro-examples/references/cadence/cadence-web/app/components/menu.tsx +189 -0
  35. package/skills/maestro-examples/references/cadence/cadence-web/app/components/optional-link.tsx +18 -0
  36. package/skills/maestro-examples/references/cadence/cadence-web/app/components/page-header.tsx +19 -0
  37. package/skills/maestro-examples/references/cadence/cadence-web/app/components/rich-text-editor.tsx +352 -0
  38. package/skills/maestro-examples/references/cadence/cadence-web/app/components/select.tsx +219 -0
  39. package/skills/maestro-examples/references/cadence/cadence-web/app/components/spinner.tsx +19 -0
  40. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/headless-templated-row-table.ts +553 -0
  41. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/index.tsx +44 -0
  42. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/server-table.ts +146 -0
  43. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-actions.tsx +79 -0
  44. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-container.tsx +176 -0
  45. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-container.type-test.ts +158 -0
  46. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-filters/date-range-filter.tsx +230 -0
  47. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-filters/select-filter.tsx +214 -0
  48. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-filters/sort.tsx +88 -0
  49. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-primitives.tsx +229 -0
  50. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-toolbar.tsx +303 -0
  51. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/table-types.ts +64 -0
  52. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/use-client-table.ts +160 -0
  53. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/use-client-table.type-test.ts +220 -0
  54. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/use-server-table.ts +195 -0
  55. package/skills/maestro-examples/references/cadence/cadence-web/app/components/table/use-server-table.type-test.ts +177 -0
  56. package/skills/maestro-examples/references/cadence/cadence-web/app/components/tag-editor.tsx +53 -0
  57. package/skills/maestro-examples/references/cadence/cadence-web/app/components/tag-field.tsx +253 -0
  58. package/skills/maestro-examples/references/cadence/cadence-web/app/components/text-field.tsx +147 -0
  59. package/skills/maestro-examples/references/cadence/cadence-web/app/components/toast.tsx +182 -0
  60. package/skills/maestro-examples/references/cadence/cadence-web/app/components/top-nav.tsx +175 -0
  61. package/skills/maestro-examples/references/cadence/cadence-web/app/entry.client.tsx +21 -0
  62. package/skills/maestro-examples/references/cadence/cadence-web/app/entry.server.tsx +13 -0
  63. package/skills/maestro-examples/references/cadence/cadence-web/app/features/csrf-middleware.server.ts +17 -0
  64. package/skills/maestro-examples/references/cadence/cadence-web/app/features/custom-error-status-code-middleware.server.ts +31 -0
  65. package/skills/maestro-examples/references/cadence/cadence-web/app/features/rate-limiting-middleware.server.ts +36 -0
  66. package/skills/maestro-examples/references/cadence/cadence-web/app/features/redirect-with-toast.server.ts +14 -0
  67. package/skills/maestro-examples/references/cadence/cadence-web/app/features/request-context.server.ts +40 -0
  68. package/skills/maestro-examples/references/cadence/cadence-web/app/features/security-headers-middleware.server.ts +10 -0
  69. package/skills/maestro-examples/references/cadence/cadence-web/app/icons/types.ts +36 -0
  70. package/skills/maestro-examples/references/cadence/cadence-web/app/root.tsx +208 -0
  71. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/_index.tsx +5 -0
  72. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/activity.tsx +124 -0
  73. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/archive.tsx +187 -0
  74. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.forgot-password.tsx +108 -0
  75. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.login.tsx +132 -0
  76. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.logout.tsx +17 -0
  77. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.register.tsx +172 -0
  78. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.reset-password.tsx +137 -0
  79. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/contacts.$id.edit.tsx +89 -0
  80. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/contacts.$id.tsx +521 -0
  81. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/contacts.new.tsx +56 -0
  82. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/contacts.tsx +183 -0
  83. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/settings.tsx +158 -0
  84. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/users.tsx +263 -0
  85. package/skills/maestro-examples/references/cadence/cadence-web/app/routes.ts +4 -0
  86. package/skills/maestro-examples/references/cadence/cadence-web/app/services.server.ts +1 -0
  87. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/colors.ts +47 -0
  88. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/compose-event-handlers.ts +13 -0
  89. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/compose-refs.ts +35 -0
  90. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/format-date.ts +10 -0
  91. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/overridable-component-helper.ts +31 -0
  92. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/sanitize-html.ts +16 -0
  93. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/tw.ts +16 -0
  94. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/use-hydrated.ts +12 -0
  95. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/use-prevent-default.ts +30 -0
  96. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/use-query-state.ts +629 -0
  97. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/use-render-props.ts +42 -0
  98. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/use-spin-delay.ts +27 -0
  99. package/skills/maestro-examples/references/cadence/cadence-web/app/utils/use-stable-accessor.ts +14 -0
  100. package/skills/maestro-examples/references/cadence/cadence-web/instrument.server.mjs +29 -0
  101. package/skills/maestro-examples/references/cadence/cadence-web/package.json +60 -0
  102. package/skills/maestro-examples/references/cadence/cadence-web/playwright.config.ts +39 -0
  103. package/skills/maestro-examples/references/cadence/cadence-web/react-router.config.ts +12 -0
  104. package/skills/maestro-examples/references/cadence/cadence-web/tailwind.config.ts +7 -0
  105. package/skills/maestro-examples/references/cadence/cadence-web/tests/activity/filter-activity.spec.ts +93 -0
  106. package/skills/maestro-examples/references/cadence/cadence-web/tests/activity/recent-activity.spec.ts +70 -0
  107. package/skills/maestro-examples/references/cadence/cadence-web/tests/archive/archive-view.spec.ts +62 -0
  108. package/skills/maestro-examples/references/cadence/cadence-web/tests/auth/login-invalid.spec.ts +68 -0
  109. package/skills/maestro-examples/references/cadence/cadence-web/tests/auth/login-valid.spec.ts +45 -0
  110. package/skills/maestro-examples/references/cadence/cadence-web/tests/auth/logout.spec.ts +46 -0
  111. package/skills/maestro-examples/references/cadence/cadence-web/tests/auth/password-reset.spec.ts +105 -0
  112. package/skills/maestro-examples/references/cadence/cadence-web/tests/auth/register.spec.ts +39 -0
  113. package/skills/maestro-examples/references/cadence/cadence-web/tests/auth.setup.ts +48 -0
  114. package/skills/maestro-examples/references/cadence/cadence-web/tests/authorization/member-ownership.spec.ts +104 -0
  115. package/skills/maestro-examples/references/cadence/cadence-web/tests/authorization/viewer-read-only.spec.ts +103 -0
  116. package/skills/maestro-examples/references/cadence/cadence-web/tests/constants.ts +11 -0
  117. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/archive-restore.spec.ts +77 -0
  118. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/create-contact.spec.ts +56 -0
  119. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/delete-contact.spec.ts +53 -0
  120. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/edit-contact.spec.ts +60 -0
  121. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/filter-by-last-contacted.spec.ts +85 -0
  122. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/filter-by-tag.spec.ts +68 -0
  123. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/global-search.spec.ts +57 -0
  124. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/sort-contacts.spec.ts +60 -0
  125. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/tags.spec.ts +85 -0
  126. package/skills/maestro-examples/references/cadence/cadence-web/tests/contacts/view-detail.spec.ts +58 -0
  127. package/skills/maestro-examples/references/cadence/cadence-web/tests/interactions/delete-interaction.spec.ts +59 -0
  128. package/skills/maestro-examples/references/cadence/cadence-web/tests/interactions/edit-interaction.spec.ts +68 -0
  129. package/skills/maestro-examples/references/cadence/cadence-web/tests/interactions/log-email.spec.ts +57 -0
  130. package/skills/maestro-examples/references/cadence/cadence-web/tests/interactions/log-note.spec.ts +56 -0
  131. package/skills/maestro-examples/references/cadence/cadence-web/tests/interactions/rich-text-formatting.spec.ts +97 -0
  132. package/skills/maestro-examples/references/cadence/cadence-web/tests/organization/delete.spec.ts +70 -0
  133. package/skills/maestro-examples/references/cadence/cadence-web/tests/organization/edit-name.spec.ts +51 -0
  134. package/skills/maestro-examples/references/cadence/cadence-web/tests/users/change-role.spec.ts +62 -0
  135. package/skills/maestro-examples/references/cadence/cadence-web/tests/users/invite-user.spec.ts +56 -0
  136. package/skills/maestro-examples/references/cadence/cadence-web/tests/users/remove-user.spec.ts +58 -0
  137. package/skills/maestro-examples/references/cadence/cadence-web/tsconfig.json +22 -0
  138. package/skills/maestro-examples/references/cadence/cadence-web/vite.config.ts +37 -0
  139. package/skills/maestro-examples/references/cadence/config/agent-container.ts +4 -0
  140. package/skills/maestro-examples/references/cadence/config/cadence-web.ts +12 -0
  141. package/skills/maestro-examples/references/cadence/config/db-migrate.ts +9 -0
  142. package/skills/maestro-examples/references/cadence/config/queue-processor.ts +11 -0
  143. package/skills/maestro-examples/references/cadence/config/services.ts +16 -0
  144. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/20260404000001_organizations-and-users.ts +16 -0
  145. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/20260404000002_contacts.ts +16 -0
  146. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/20260404000003_interactions.ts +16 -0
  147. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/20260404000004_remember-me-tokens.ts +16 -0
  148. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/20260404000005_password-reset-tokens.ts +16 -0
  149. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/20260404000006_queue-and-recurring-jobs.ts +16 -0
  150. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000001_organizations-and-users-down.sql +2 -0
  151. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000001_organizations-and-users-up.sql +24 -0
  152. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000002_contacts-down.sql +1 -0
  153. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000002_contacts-up.sql +16 -0
  154. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000003_interactions-down.sql +1 -0
  155. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000003_interactions-up.sql +15 -0
  156. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000004_remember-me-tokens-down.sql +1 -0
  157. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000004_remember-me-tokens-up.sql +12 -0
  158. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000005_password-reset-tokens-down.sql +1 -0
  159. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000005_password-reset-tokens-up.sql +11 -0
  160. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000006_queue-and-recurring-jobs-down.sql +2 -0
  161. package/skills/maestro-examples/references/cadence/infrastructure/db-migrations/sqls/20260404000006_queue-and-recurring-jobs-up.sql +21 -0
  162. package/skills/maestro-examples/references/cadence/package.json +17 -0
  163. package/skills/maestro-examples/references/cadence/packages/schemas/package.json +17 -0
  164. package/skills/maestro-examples/references/cadence/packages/schemas/src/contact/index.ts +57 -0
  165. package/skills/maestro-examples/references/cadence/packages/schemas/src/index.ts +4 -0
  166. package/skills/maestro-examples/references/cadence/packages/schemas/src/interaction/index.ts +45 -0
  167. package/skills/maestro-examples/references/cadence/packages/schemas/src/organization/index.ts +32 -0
  168. package/skills/maestro-examples/references/cadence/packages/schemas/src/user/index.ts +69 -0
  169. package/skills/maestro-examples/references/cadence/packages/schemas/tsconfig.json +9 -0
  170. package/skills/maestro-examples/references/cadence/packages/services/package.json +43 -0
  171. package/skills/maestro-examples/references/cadence/packages/services/run-tests.ts +59 -0
  172. package/skills/maestro-examples/references/cadence/packages/services/src/auth/auth-db-provider.ts +202 -0
  173. package/skills/maestro-examples/references/cadence/packages/services/src/auth/auth-use-cases.ts +155 -0
  174. package/skills/maestro-examples/references/cadence/packages/services/src/auth/index.ts +17 -0
  175. package/skills/maestro-examples/references/cadence/packages/services/src/auth/profile-db-provider.ts +17 -0
  176. package/skills/maestro-examples/references/cadence/packages/services/src/contact/contact-db-provider.test.ts +120 -0
  177. package/skills/maestro-examples/references/cadence/packages/services/src/contact/contact-db-provider.ts +145 -0
  178. package/skills/maestro-examples/references/cadence/packages/services/src/contact/contact-use-cases.ts +196 -0
  179. package/skills/maestro-examples/references/cadence/packages/services/src/contact/index.ts +29 -0
  180. package/skills/maestro-examples/references/cadence/packages/services/src/index.ts +23 -0
  181. package/skills/maestro-examples/references/cadence/packages/services/src/interaction/index.ts +25 -0
  182. package/skills/maestro-examples/references/cadence/packages/services/src/interaction/interaction-db-provider.test.ts +128 -0
  183. package/skills/maestro-examples/references/cadence/packages/services/src/interaction/interaction-db-provider.ts +98 -0
  184. package/skills/maestro-examples/references/cadence/packages/services/src/interaction/interaction-use-cases.ts +171 -0
  185. package/skills/maestro-examples/references/cadence/packages/services/src/maestro.ts +218 -0
  186. package/skills/maestro-examples/references/cadence/packages/services/src/organization/index.ts +8 -0
  187. package/skills/maestro-examples/references/cadence/packages/services/src/organization/organization-db-provider.test.ts +53 -0
  188. package/skills/maestro-examples/references/cadence/packages/services/src/organization/organization-db-provider.ts +60 -0
  189. package/skills/maestro-examples/references/cadence/packages/services/src/organization/organization-use-cases.ts +88 -0
  190. package/skills/maestro-examples/references/cadence/packages/services/src/permissions.ts +28 -0
  191. package/skills/maestro-examples/references/cadence/packages/services/src/testing/contact-seed.ts +30 -0
  192. package/skills/maestro-examples/references/cadence/packages/services/src/testing/index.ts +13 -0
  193. package/skills/maestro-examples/references/cadence/packages/services/src/testing/interaction-seed.ts +29 -0
  194. package/skills/maestro-examples/references/cadence/packages/services/src/testing/organization-seed.ts +25 -0
  195. package/skills/maestro-examples/references/cadence/packages/services/src/testing/seed-pipe.ts +38 -0
  196. package/skills/maestro-examples/references/cadence/packages/services/src/testing/user-seed.ts +27 -0
  197. package/skills/maestro-examples/references/cadence/packages/services/src/user/index.ts +27 -0
  198. package/skills/maestro-examples/references/cadence/packages/services/src/user/user-db-provider.test.ts +100 -0
  199. package/skills/maestro-examples/references/cadence/packages/services/src/user/user-db-provider.ts +69 -0
  200. package/skills/maestro-examples/references/cadence/packages/services/src/user/user-use-cases.ts +162 -0
  201. package/skills/maestro-examples/references/cadence/packages/services/tsconfig.json +9 -0
  202. package/skills/maestro-examples/references/cadence/scripts/foreign-key-delete-behavior.ts +106 -0
  203. package/skills/maestro-examples/references/cadence/specs/app.md +72 -0
  204. package/skills/maestro-examples/references/cadence/specs/data-models.md +80 -0
  205. package/skills/maestro-examples/references/cadence/specs/multi-tenant-security.md +239 -0
  206. package/skills/maestro-examples/references/cadence/specs/rich-text-editor.md +108 -0
  207. package/skills/maestro-examples/references/cadence/specs/table.md +151 -0
  208. package/skills/maestro-examples/references/cadence/specs/use-cases.md +62 -0
  209. package/skills/maestro-examples/references/cadence/tsconfig.json +29 -0
  210. package/skills/maestro-examples/references/chorus/chorus-web/app/app.css +152 -0
  211. package/skills/maestro-examples/references/chorus/chorus-web/app/components/alert-dialog.tsx +153 -0
  212. package/skills/maestro-examples/references/chorus/chorus-web/app/components/avatar.tsx +57 -0
  213. package/skills/maestro-examples/references/chorus/chorus-web/app/components/button-group.tsx +78 -0
  214. package/skills/maestro-examples/references/chorus/chorus-web/app/components/button-link.tsx +77 -0
  215. package/skills/maestro-examples/references/chorus/chorus-web/app/components/button.tsx +139 -0
  216. package/skills/maestro-examples/references/chorus/chorus-web/app/components/channel-card.tsx +40 -0
  217. package/skills/maestro-examples/references/chorus/chorus-web/app/components/checkbox-group.tsx +175 -0
  218. package/skills/maestro-examples/references/chorus/chorus-web/app/components/checkbox.tsx +210 -0
  219. package/skills/maestro-examples/references/chorus/chorus-web/app/components/chip.tsx +161 -0
  220. package/skills/maestro-examples/references/chorus/chorus-web/app/components/container.tsx +85 -0
  221. package/skills/maestro-examples/references/chorus/chorus-web/app/components/date-picker.tsx +214 -0
  222. package/skills/maestro-examples/references/chorus/chorus-web/app/components/date-time-picker.tsx +199 -0
  223. package/skills/maestro-examples/references/chorus/chorus-web/app/components/dialog.tsx +114 -0
  224. package/skills/maestro-examples/references/chorus/chorus-web/app/components/enum-chip.tsx +33 -0
  225. package/skills/maestro-examples/references/chorus/chorus-web/app/components/file-input.tsx +248 -0
  226. package/skills/maestro-examples/references/chorus/chorus-web/app/components/form.tsx +106 -0
  227. package/skills/maestro-examples/references/chorus/chorus-web/app/components/headless-file-input.tsx +365 -0
  228. package/skills/maestro-examples/references/chorus/chorus-web/app/components/helpers/animated-popover.tsx +27 -0
  229. package/skills/maestro-examples/references/chorus/chorus-web/app/components/helpers/button-context.ts +13 -0
  230. package/skills/maestro-examples/references/chorus/chorus-web/app/components/helpers/calendar-month-year-picker.tsx +283 -0
  231. package/skills/maestro-examples/references/chorus/chorus-web/app/components/helpers/form-field.tsx +231 -0
  232. package/skills/maestro-examples/references/chorus/chorus-web/app/components/helpers/get-button-classes.ts +141 -0
  233. package/skills/maestro-examples/references/chorus/chorus-web/app/components/helpers/headless-button.tsx +39 -0
  234. package/skills/maestro-examples/references/chorus/chorus-web/app/components/helpers/pdf-dist.client.ts +9 -0
  235. package/skills/maestro-examples/references/chorus/chorus-web/app/components/icon.tsx +29 -0
  236. package/skills/maestro-examples/references/chorus/chorus-web/app/components/image-grid.tsx +96 -0
  237. package/skills/maestro-examples/references/chorus/chorus-web/app/components/image-input.tsx +268 -0
  238. package/skills/maestro-examples/references/chorus/chorus-web/app/components/inline-alert.tsx +57 -0
  239. package/skills/maestro-examples/references/chorus/chorus-web/app/components/like-button.tsx +48 -0
  240. package/skills/maestro-examples/references/chorus/chorus-web/app/components/menu.tsx +189 -0
  241. package/skills/maestro-examples/references/chorus/chorus-web/app/components/pdf-input.tsx +252 -0
  242. package/skills/maestro-examples/references/chorus/chorus-web/app/components/pdf.tsx +89 -0
  243. package/skills/maestro-examples/references/chorus/chorus-web/app/components/post-card.tsx +147 -0
  244. package/skills/maestro-examples/references/chorus/chorus-web/app/components/post-composer.tsx +166 -0
  245. package/skills/maestro-examples/references/chorus/chorus-web/app/components/radio-group.tsx +115 -0
  246. package/skills/maestro-examples/references/chorus/chorus-web/app/components/select.tsx +219 -0
  247. package/skills/maestro-examples/references/chorus/chorus-web/app/components/spinner.tsx +19 -0
  248. package/skills/maestro-examples/references/chorus/chorus-web/app/components/tag-field.tsx +253 -0
  249. package/skills/maestro-examples/references/chorus/chorus-web/app/components/text-area.tsx +151 -0
  250. package/skills/maestro-examples/references/chorus/chorus-web/app/components/text-field.tsx +147 -0
  251. package/skills/maestro-examples/references/chorus/chorus-web/app/components/toast.tsx +179 -0
  252. package/skills/maestro-examples/references/chorus/chorus-web/app/entry.client.tsx +21 -0
  253. package/skills/maestro-examples/references/chorus/chorus-web/app/entry.server.tsx +12 -0
  254. package/skills/maestro-examples/references/chorus/chorus-web/app/features/csrf-hidden-input.tsx +6 -0
  255. package/skills/maestro-examples/references/chorus/chorus-web/app/features/csrf-middleware.server.ts +17 -0
  256. package/skills/maestro-examples/references/chorus/chorus-web/app/features/custom-error-status-code-middleware.server.ts +18 -0
  257. package/skills/maestro-examples/references/chorus/chorus-web/app/features/rate-limiting-middleware.server.ts +36 -0
  258. package/skills/maestro-examples/references/chorus/chorus-web/app/features/redirect-with-toast.server.ts +14 -0
  259. package/skills/maestro-examples/references/chorus/chorus-web/app/features/request-context.server.ts +40 -0
  260. package/skills/maestro-examples/references/chorus/chorus-web/app/features/security-headers-middleware.server.ts +10 -0
  261. package/skills/maestro-examples/references/chorus/chorus-web/app/icons/types.ts +26 -0
  262. package/skills/maestro-examples/references/chorus/chorus-web/app/root.tsx +164 -0
  263. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_auth/forgot-password.tsx +90 -0
  264. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_auth/login.tsx +104 -0
  265. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_auth/logout.tsx +44 -0
  266. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_auth/reset-password.tsx +130 -0
  267. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_auth/signup.tsx +91 -0
  268. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_browse/_layout.tsx +36 -0
  269. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_browse/c.new.tsx +47 -0
  270. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/_browse/index.tsx +3 -0
  271. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/api/hide-post.$postId.tsx +30 -0
  272. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/api/like.$postId.tsx +22 -0
  273. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/c.$slug/_layout.tsx +108 -0
  274. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/c.$slug/post.new.tsx +59 -0
  275. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/c.$slug.edit.tsx +53 -0
  276. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/c.$slug.manage/_layout.tsx +123 -0
  277. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/c.$slug.manage/add-moderator.tsx +48 -0
  278. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/c.$slug.manage/transfer-ownership.tsx +71 -0
  279. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/c.$slug.post.$postId.tsx +119 -0
  280. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/files.$.tsx +22 -0
  281. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/health.tsx +3 -0
  282. package/skills/maestro-examples/references/chorus/chorus-web/app/routes/settings.tsx +128 -0
  283. package/skills/maestro-examples/references/chorus/chorus-web/app/routes.ts +4 -0
  284. package/skills/maestro-examples/references/chorus/chorus-web/app/services.server.ts +1 -0
  285. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/colors.ts +47 -0
  286. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/compose-refs.ts +35 -0
  287. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/enum-colors.ts +4 -0
  288. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/file-input.ts +52 -0
  289. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/tw.ts +16 -0
  290. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-element-size.ts +35 -0
  291. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-number-input.ts +143 -0
  292. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-pagination.ts +41 -0
  293. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-prevent-default.ts +30 -0
  294. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-profile.ts +7 -0
  295. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-render-props.ts +42 -0
  296. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-spin-delay.ts +27 -0
  297. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-stable-accessor.ts +14 -0
  298. package/skills/maestro-examples/references/chorus/chorus-web/app/utils/use-tab-indicator.ts +107 -0
  299. package/skills/maestro-examples/references/chorus/chorus-web/environment.d.ts +15 -0
  300. package/skills/maestro-examples/references/chorus/chorus-web/instrument.server.mjs +29 -0
  301. package/skills/maestro-examples/references/chorus/chorus-web/package.json +54 -0
  302. package/skills/maestro-examples/references/chorus/chorus-web/playwright.config.ts +39 -0
  303. package/skills/maestro-examples/references/chorus/chorus-web/react-router.config.ts +12 -0
  304. package/skills/maestro-examples/references/chorus/chorus-web/tests/auth-landing.test.ts +8 -0
  305. package/skills/maestro-examples/references/chorus/chorus-web/tests/auth-login.test.ts +40 -0
  306. package/skills/maestro-examples/references/chorus/chorus-web/tests/auth-logout.test.ts +8 -0
  307. package/skills/maestro-examples/references/chorus/chorus-web/tests/auth-signup.test.ts +15 -0
  308. package/skills/maestro-examples/references/chorus/chorus-web/tests/auth.setup.ts +42 -0
  309. package/skills/maestro-examples/references/chorus/chorus-web/tests/channel-browse.test.ts +43 -0
  310. package/skills/maestro-examples/references/chorus/chorus-web/tests/channel-create.test.ts +34 -0
  311. package/skills/maestro-examples/references/chorus/chorus-web/tests/channel-edit.test.ts +33 -0
  312. package/skills/maestro-examples/references/chorus/chorus-web/tests/channel-manage-moderators.test.ts +59 -0
  313. package/skills/maestro-examples/references/chorus/chorus-web/tests/channel-manage-permissions.test.ts +55 -0
  314. package/skills/maestro-examples/references/chorus/chorus-web/tests/channel-transfer.test.ts +47 -0
  315. package/skills/maestro-examples/references/chorus/chorus-web/tests/constants.ts +7 -0
  316. package/skills/maestro-examples/references/chorus/chorus-web/tests/forgot-password.test.ts +33 -0
  317. package/skills/maestro-examples/references/chorus/chorus-web/tests/hide-post-author.test.ts +62 -0
  318. package/skills/maestro-examples/references/chorus/chorus-web/tests/hide-post-nonauthor.test.ts +36 -0
  319. package/skills/maestro-examples/references/chorus/chorus-web/tests/like-toggle.test.ts +60 -0
  320. package/skills/maestro-examples/references/chorus/chorus-web/tests/like-unauth.test.ts +37 -0
  321. package/skills/maestro-examples/references/chorus/chorus-web/tests/post-create.test.ts +30 -0
  322. package/skills/maestro-examples/references/chorus/chorus-web/tests/post-listing.test.ts +33 -0
  323. package/skills/maestro-examples/references/chorus/chorus-web/tests/post-reply.test.ts +48 -0
  324. package/skills/maestro-examples/references/chorus/chorus-web/tests/post-view-unauth.test.ts +37 -0
  325. package/skills/maestro-examples/references/chorus/chorus-web/tests/settings-duplicate.test.ts +28 -0
  326. package/skills/maestro-examples/references/chorus/chorus-web/tests/settings-update.test.ts +34 -0
  327. package/skills/maestro-examples/references/chorus/chorus-web/tests/settings-view.test.ts +17 -0
  328. package/skills/maestro-examples/references/chorus/chorus-web/tests/signup-validation.test.ts +51 -0
  329. package/skills/maestro-examples/references/chorus/chorus-web/tsconfig.json +14 -0
  330. package/skills/maestro-examples/references/chorus/chorus-web/vite.config.ts +38 -0
  331. package/skills/maestro-examples/references/chorus/config/app-a.ts +7 -0
  332. package/skills/maestro-examples/references/chorus/config/chorus-web.ts +7 -0
  333. package/skills/maestro-examples/references/chorus/config/db-migrate.ts +9 -0
  334. package/skills/maestro-examples/references/chorus/config/queue-processor.ts +7 -0
  335. package/skills/maestro-examples/references/chorus/config/services.ts +15 -0
  336. package/skills/maestro-examples/references/chorus/infrastructure/cdk/index.ts +60 -0
  337. package/skills/maestro-examples/references/chorus/infrastructure/cdk.context.json +5 -0
  338. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/20260303005902_init_authentication.ts +16 -0
  339. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/20260308234835_add-maestro-queue-table.ts +16 -0
  340. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/20260315051819_channels.ts +16 -0
  341. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/20260315052202_channel-moderators.ts +16 -0
  342. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/20260315052539_posts.ts +16 -0
  343. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/20260315052734_post-images.ts +16 -0
  344. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/20260315053110_likes.ts +16 -0
  345. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260303005902_init_authentication-down.sql +3 -0
  346. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260303005902_init_authentication-up.sql +40 -0
  347. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260308234835_add-maestro-queue-table-down.sql +3 -0
  348. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260308234835_add-maestro-queue-table-up.sql +23 -0
  349. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315051819_channels-down.sql +1 -0
  350. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315051819_channels-up.sql +11 -0
  351. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315052202_channel-moderators-down.sql +1 -0
  352. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315052202_channel-moderators-up.sql +7 -0
  353. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315052539_posts-down.sql +1 -0
  354. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315052539_posts-up.sql +14 -0
  355. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315052734_post-images-down.sql +1 -0
  356. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315052734_post-images-up.sql +7 -0
  357. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315053110_likes-down.sql +1 -0
  358. package/skills/maestro-examples/references/chorus/infrastructure/db-migrations/sqls/20260315053110_likes-up.sql +8 -0
  359. package/skills/maestro-examples/references/chorus/infrastructure/package.json +20 -0
  360. package/skills/maestro-examples/references/chorus/infrastructure/tsconfig.json +8 -0
  361. package/skills/maestro-examples/references/chorus/package.json +17 -0
  362. package/skills/maestro-examples/references/chorus/packages/email-templates/other/generate-email-modules.ts +22 -0
  363. package/skills/maestro-examples/references/chorus/packages/email-templates/other/generate-email-previews.ts +18 -0
  364. package/skills/maestro-examples/references/chorus/packages/email-templates/package.json +27 -0
  365. package/skills/maestro-examples/references/chorus/packages/email-templates/src/components/button.tsx +19 -0
  366. package/skills/maestro-examples/references/chorus/packages/email-templates/src/components/root-container.tsx +29 -0
  367. package/skills/maestro-examples/references/chorus/packages/email-templates/src/components/tailwind-wrapper.tsx +113 -0
  368. package/skills/maestro-examples/references/chorus/packages/email-templates/src/email-modules.ts +9 -0
  369. package/skills/maestro-examples/references/chorus/packages/email-templates/src/emails/password-reset.tsx +41 -0
  370. package/skills/maestro-examples/references/chorus/packages/email-templates/src/index.ts +3 -0
  371. package/skills/maestro-examples/references/chorus/packages/email-templates/src/render-email-template.ts +24 -0
  372. package/skills/maestro-examples/references/chorus/packages/email-templates/src/utils/tw.ts +5 -0
  373. package/skills/maestro-examples/references/chorus/packages/email-templates/tsconfig.json +11 -0
  374. package/skills/maestro-examples/references/chorus/packages/schemas/package.json +17 -0
  375. package/skills/maestro-examples/references/chorus/packages/schemas/src/channel/index.ts +41 -0
  376. package/skills/maestro-examples/references/chorus/packages/schemas/src/index.ts +4 -0
  377. package/skills/maestro-examples/references/chorus/packages/schemas/src/like/index.ts +16 -0
  378. package/skills/maestro-examples/references/chorus/packages/schemas/src/post/index.ts +44 -0
  379. package/skills/maestro-examples/references/chorus/packages/schemas/src/profile/index.ts +80 -0
  380. package/skills/maestro-examples/references/chorus/packages/schemas/tsconfig.json +9 -0
  381. package/skills/maestro-examples/references/chorus/packages/services/environment.d.ts +7 -0
  382. package/skills/maestro-examples/references/chorus/packages/services/package.json +47 -0
  383. package/skills/maestro-examples/references/chorus/packages/services/run-tests.ts +59 -0
  384. package/skills/maestro-examples/references/chorus/packages/services/src/auth/auth-use-cases.ts +178 -0
  385. package/skills/maestro-examples/references/chorus/packages/services/src/auth/authenticatable-db-provider.ts +59 -0
  386. package/skills/maestro-examples/references/chorus/packages/services/src/auth/index.ts +29 -0
  387. package/skills/maestro-examples/references/chorus/packages/services/src/auth/password-reset-token-db-provider.ts +58 -0
  388. package/skills/maestro-examples/references/chorus/packages/services/src/auth/remember-me-token-db-provider.ts +82 -0
  389. package/skills/maestro-examples/references/chorus/packages/services/src/channel/channel-db-provider.test.ts +85 -0
  390. package/skills/maestro-examples/references/chorus/packages/services/src/channel/channel-db-provider.ts +158 -0
  391. package/skills/maestro-examples/references/chorus/packages/services/src/channel/channel-use-cases.ts +303 -0
  392. package/skills/maestro-examples/references/chorus/packages/services/src/channel/index.ts +29 -0
  393. package/skills/maestro-examples/references/chorus/packages/services/src/index.ts +21 -0
  394. package/skills/maestro-examples/references/chorus/packages/services/src/like/index.ts +6 -0
  395. package/skills/maestro-examples/references/chorus/packages/services/src/like/like-db-provider.test.ts +47 -0
  396. package/skills/maestro-examples/references/chorus/packages/services/src/like/like-db-provider.ts +53 -0
  397. package/skills/maestro-examples/references/chorus/packages/services/src/like/like-use-cases.ts +31 -0
  398. package/skills/maestro-examples/references/chorus/packages/services/src/maestro.ts +215 -0
  399. package/skills/maestro-examples/references/chorus/packages/services/src/permissions.ts +16 -0
  400. package/skills/maestro-examples/references/chorus/packages/services/src/post/index.ts +25 -0
  401. package/skills/maestro-examples/references/chorus/packages/services/src/post/post-db-provider.test.ts +68 -0
  402. package/skills/maestro-examples/references/chorus/packages/services/src/post/post-db-provider.ts +219 -0
  403. package/skills/maestro-examples/references/chorus/packages/services/src/post/post-use-cases.ts +184 -0
  404. package/skills/maestro-examples/references/chorus/packages/services/src/post/redact-hidden-post.ts +4 -0
  405. package/skills/maestro-examples/references/chorus/packages/services/src/profile/index.ts +17 -0
  406. package/skills/maestro-examples/references/chorus/packages/services/src/profile/profile-db-provider.test.ts +57 -0
  407. package/skills/maestro-examples/references/chorus/packages/services/src/profile/profile-db-provider.ts +75 -0
  408. package/skills/maestro-examples/references/chorus/packages/services/src/profile/profile-use-cases.ts +61 -0
  409. package/skills/maestro-examples/references/chorus/packages/services/src/testing/channel-seed.ts +27 -0
  410. package/skills/maestro-examples/references/chorus/packages/services/src/testing/index.ts +13 -0
  411. package/skills/maestro-examples/references/chorus/packages/services/src/testing/like-seed.ts +21 -0
  412. package/skills/maestro-examples/references/chorus/packages/services/src/testing/post-seed.ts +27 -0
  413. package/skills/maestro-examples/references/chorus/packages/services/src/testing/profile-seed.ts +28 -0
  414. package/skills/maestro-examples/references/chorus/packages/services/src/testing/seed-pipe.ts +38 -0
  415. package/skills/maestro-examples/references/chorus/packages/services/tsconfig.json +9 -0
  416. package/skills/maestro-examples/references/chorus/scripts/foreign-key-delete-behavior.ts +111 -0
  417. package/skills/maestro-examples/references/chorus/specs/app.md +73 -0
  418. package/skills/maestro-examples/references/chorus/specs/data-models.md +48 -0
  419. package/skills/maestro-examples/references/chorus/specs/database-schema.md +59 -0
  420. package/skills/maestro-examples/references/chorus/specs/use-cases.md +33 -0
  421. package/skills/maestro-examples/references/chorus/tsconfig.json +29 -0
  422. package/skills/maestro-examples/references/setlist/IMPLEMENTATION_PLAN.md +88 -0
  423. package/skills/maestro-examples/references/setlist/config/db-migrate.ts +9 -0
  424. package/skills/maestro-examples/references/setlist/config/queue-processor.ts +11 -0
  425. package/skills/maestro-examples/references/setlist/config/services.ts +16 -0
  426. package/skills/maestro-examples/references/setlist/config/setlist-web.ts +12 -0
  427. package/skills/maestro-examples/references/setlist/infrastructure/cdk/index.ts +56 -0
  428. package/skills/maestro-examples/references/setlist/infrastructure/cdk.context.json +5 -0
  429. package/skills/maestro-examples/references/setlist/infrastructure/db-migrations/20260316000000_init.ts +16 -0
  430. package/skills/maestro-examples/references/setlist/infrastructure/db-migrations/20260317000000_add-queue-and-recurring-job-tables.ts +22 -0
  431. package/skills/maestro-examples/references/setlist/infrastructure/db-migrations/sqls/20260316000000_init-down.sql +5 -0
  432. package/skills/maestro-examples/references/setlist/infrastructure/db-migrations/sqls/20260316000000_init-up.sql +68 -0
  433. package/skills/maestro-examples/references/setlist/infrastructure/db-migrations/sqls/20260317000000_add-queue-and-recurring-job-tables-down.sql +2 -0
  434. package/skills/maestro-examples/references/setlist/infrastructure/db-migrations/sqls/20260317000000_add-queue-and-recurring-job-tables-up.sql +21 -0
  435. package/skills/maestro-examples/references/setlist/infrastructure/package.json +20 -0
  436. package/skills/maestro-examples/references/setlist/infrastructure/tsconfig.json +8 -0
  437. package/skills/maestro-examples/references/setlist/package.json +19 -0
  438. package/skills/maestro-examples/references/setlist/packages/email-templates/other/generate-email-modules.ts +22 -0
  439. package/skills/maestro-examples/references/setlist/packages/email-templates/other/generate-email-previews.ts +18 -0
  440. package/skills/maestro-examples/references/setlist/packages/email-templates/package.json +27 -0
  441. package/skills/maestro-examples/references/setlist/packages/email-templates/src/components/button.tsx +19 -0
  442. package/skills/maestro-examples/references/setlist/packages/email-templates/src/components/root-container.tsx +29 -0
  443. package/skills/maestro-examples/references/setlist/packages/email-templates/src/components/tailwind-wrapper.tsx +113 -0
  444. package/skills/maestro-examples/references/setlist/packages/email-templates/src/email-modules.ts +9 -0
  445. package/skills/maestro-examples/references/setlist/packages/email-templates/src/emails/magic-link-login.tsx +49 -0
  446. package/skills/maestro-examples/references/setlist/packages/email-templates/src/index.ts +3 -0
  447. package/skills/maestro-examples/references/setlist/packages/email-templates/src/render-email-template.ts +24 -0
  448. package/skills/maestro-examples/references/setlist/packages/email-templates/src/utils/tw.ts +5 -0
  449. package/skills/maestro-examples/references/setlist/packages/email-templates/tsconfig.json +11 -0
  450. package/skills/maestro-examples/references/setlist/packages/email-templates/tsup.config.ts +10 -0
  451. package/skills/maestro-examples/references/setlist/packages/schemas/package.json +21 -0
  452. package/skills/maestro-examples/references/setlist/packages/schemas/src/area/index.ts +28 -0
  453. package/skills/maestro-examples/references/setlist/packages/schemas/src/index.ts +6 -0
  454. package/skills/maestro-examples/references/setlist/packages/schemas/src/magic-link/index.ts +20 -0
  455. package/skills/maestro-examples/references/setlist/packages/schemas/src/position.ts +137 -0
  456. package/skills/maestro-examples/references/setlist/packages/schemas/src/project/index.ts +44 -0
  457. package/skills/maestro-examples/references/setlist/packages/schemas/src/task/index.ts +41 -0
  458. package/skills/maestro-examples/references/setlist/packages/schemas/src/user/index.ts +28 -0
  459. package/skills/maestro-examples/references/setlist/packages/schemas/tests/position.test.ts +106 -0
  460. package/skills/maestro-examples/references/setlist/packages/schemas/tsconfig.json +9 -0
  461. package/skills/maestro-examples/references/setlist/packages/services/package.json +40 -0
  462. package/skills/maestro-examples/references/setlist/packages/services/run-tests.ts +59 -0
  463. package/skills/maestro-examples/references/setlist/packages/services/src/area/area-db-provider.test.ts +29 -0
  464. package/skills/maestro-examples/references/setlist/packages/services/src/area/area-db-provider.ts +81 -0
  465. package/skills/maestro-examples/references/setlist/packages/services/src/area/area-use-cases.ts +130 -0
  466. package/skills/maestro-examples/references/setlist/packages/services/src/area/index.ts +27 -0
  467. package/skills/maestro-examples/references/setlist/packages/services/src/auth/auth-db-provider.test.ts +34 -0
  468. package/skills/maestro-examples/references/setlist/packages/services/src/auth/auth-db-provider.ts +24 -0
  469. package/skills/maestro-examples/references/setlist/packages/services/src/auth/auth-use-cases.ts +110 -0
  470. package/skills/maestro-examples/references/setlist/packages/services/src/auth/index.ts +18 -0
  471. package/skills/maestro-examples/references/setlist/packages/services/src/auth/magic-link-db-provider.test.ts +52 -0
  472. package/skills/maestro-examples/references/setlist/packages/services/src/auth/magic-link-db-provider.ts +59 -0
  473. package/skills/maestro-examples/references/setlist/packages/services/src/auth/user-db-provider.test.ts +33 -0
  474. package/skills/maestro-examples/references/setlist/packages/services/src/auth/user-db-provider.ts +55 -0
  475. package/skills/maestro-examples/references/setlist/packages/services/src/auth/verify-magic-link-credentials.ts +39 -0
  476. package/skills/maestro-examples/references/setlist/packages/services/src/index.ts +20 -0
  477. package/skills/maestro-examples/references/setlist/packages/services/src/maestro.ts +175 -0
  478. package/skills/maestro-examples/references/setlist/packages/services/src/project/index.ts +29 -0
  479. package/skills/maestro-examples/references/setlist/packages/services/src/project/project-db-provider.test.ts +46 -0
  480. package/skills/maestro-examples/references/setlist/packages/services/src/project/project-db-provider.ts +114 -0
  481. package/skills/maestro-examples/references/setlist/packages/services/src/project/project-use-cases.ts +183 -0
  482. package/skills/maestro-examples/references/setlist/packages/services/src/task/index.ts +39 -0
  483. package/skills/maestro-examples/references/setlist/packages/services/src/task/task-db-provider.test.ts +53 -0
  484. package/skills/maestro-examples/references/setlist/packages/services/src/task/task-db-provider.ts +219 -0
  485. package/skills/maestro-examples/references/setlist/packages/services/src/task/task-use-cases.ts +303 -0
  486. package/skills/maestro-examples/references/setlist/packages/services/src/testing/area-seed.ts +25 -0
  487. package/skills/maestro-examples/references/setlist/packages/services/src/testing/index.ts +13 -0
  488. package/skills/maestro-examples/references/setlist/packages/services/src/testing/project-seed.ts +29 -0
  489. package/skills/maestro-examples/references/setlist/packages/services/src/testing/seed-pipe.ts +38 -0
  490. package/skills/maestro-examples/references/setlist/packages/services/src/testing/task-seed.ts +31 -0
  491. package/skills/maestro-examples/references/setlist/packages/services/src/testing/user-seed.ts +24 -0
  492. package/skills/maestro-examples/references/setlist/packages/services/tsconfig.json +9 -0
  493. package/skills/maestro-examples/references/setlist/queue-processor/package.json +17 -0
  494. package/skills/maestro-examples/references/setlist/queue-processor/src/index.ts +29 -0
  495. package/skills/maestro-examples/references/setlist/queue-processor/src/recurring-jobs.ts +13 -0
  496. package/skills/maestro-examples/references/setlist/queue-processor/tsconfig.json +4 -0
  497. package/skills/maestro-examples/references/setlist/scripts/foreign-key-delete-behavior.ts +107 -0
  498. package/skills/maestro-examples/references/setlist/setlist-web/app/app.css +158 -0
  499. package/skills/maestro-examples/references/setlist/setlist-web/app/components/alert-dialog.tsx +153 -0
  500. package/skills/maestro-examples/references/setlist/setlist-web/app/components/app-dnd-provider.tsx +180 -0
  501. package/skills/maestro-examples/references/setlist/setlist-web/app/components/area-form.tsx +113 -0
  502. package/skills/maestro-examples/references/setlist/setlist-web/app/components/button-group.tsx +78 -0
  503. package/skills/maestro-examples/references/setlist/setlist-web/app/components/button.tsx +139 -0
  504. package/skills/maestro-examples/references/setlist/setlist-web/app/components/checkbox.tsx +210 -0
  505. package/skills/maestro-examples/references/setlist/setlist-web/app/components/context-menu.tsx +78 -0
  506. package/skills/maestro-examples/references/setlist/setlist-web/app/components/date-picker.tsx +214 -0
  507. package/skills/maestro-examples/references/setlist/setlist-web/app/components/dnd-collision-detection.ts +28 -0
  508. package/skills/maestro-examples/references/setlist/setlist-web/app/components/dnd-utils.ts +11 -0
  509. package/skills/maestro-examples/references/setlist/setlist-web/app/components/drag-ghost.tsx +24 -0
  510. package/skills/maestro-examples/references/setlist/setlist-web/app/components/form.tsx +107 -0
  511. package/skills/maestro-examples/references/setlist/setlist-web/app/components/helpers/animated-popover.tsx +27 -0
  512. package/skills/maestro-examples/references/setlist/setlist-web/app/components/helpers/button-context.ts +13 -0
  513. package/skills/maestro-examples/references/setlist/setlist-web/app/components/helpers/calendar-month-year-picker.tsx +283 -0
  514. package/skills/maestro-examples/references/setlist/setlist-web/app/components/helpers/form-field.tsx +231 -0
  515. package/skills/maestro-examples/references/setlist/setlist-web/app/components/helpers/get-button-classes.ts +141 -0
  516. package/skills/maestro-examples/references/setlist/setlist-web/app/components/helpers/headless-button.tsx +39 -0
  517. package/skills/maestro-examples/references/setlist/setlist-web/app/components/icon.tsx +29 -0
  518. package/skills/maestro-examples/references/setlist/setlist-web/app/components/inline-alert.tsx +57 -0
  519. package/skills/maestro-examples/references/setlist/setlist-web/app/components/project-form.tsx +153 -0
  520. package/skills/maestro-examples/references/setlist/setlist-web/app/components/select.tsx +219 -0
  521. package/skills/maestro-examples/references/setlist/setlist-web/app/components/sidebar/helpers.ts +73 -0
  522. package/skills/maestro-examples/references/setlist/setlist-web/app/components/sidebar/index.ts +6 -0
  523. package/skills/maestro-examples/references/setlist/setlist-web/app/components/sidebar/inline-inputs.tsx +128 -0
  524. package/skills/maestro-examples/references/setlist/setlist-web/app/components/sidebar/sidebar.tsx +333 -0
  525. package/skills/maestro-examples/references/setlist/setlist-web/app/components/sidebar/sortable-rows.tsx +256 -0
  526. package/skills/maestro-examples/references/setlist/setlist-web/app/components/sidebar/use-sidebar-dnd.ts +261 -0
  527. package/skills/maestro-examples/references/setlist/setlist-web/app/components/spinner.tsx +19 -0
  528. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-inline-create.tsx +51 -0
  529. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/index.ts +3 -0
  530. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/task-date-helpers.ts +16 -0
  531. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/task-expanded-detail.tsx +273 -0
  532. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/task-keyboard-helpers.ts +5 -0
  533. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/task-list.tsx +134 -0
  534. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/task-row.tsx +100 -0
  535. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/types.ts +49 -0
  536. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/use-expanded-cache.ts +22 -0
  537. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/use-sticky-task.ts +24 -0
  538. package/skills/maestro-examples/references/setlist/setlist-web/app/components/task-list/use-task-reorder.ts +140 -0
  539. package/skills/maestro-examples/references/setlist/setlist-web/app/components/text-area.tsx +151 -0
  540. package/skills/maestro-examples/references/setlist/setlist-web/app/components/text-field.tsx +147 -0
  541. package/skills/maestro-examples/references/setlist/setlist-web/app/components/toast.tsx +179 -0
  542. package/skills/maestro-examples/references/setlist/setlist-web/app/entry.client.tsx +21 -0
  543. package/skills/maestro-examples/references/setlist/setlist-web/app/entry.server.tsx +13 -0
  544. package/skills/maestro-examples/references/setlist/setlist-web/app/features/csrf-middleware.server.ts +17 -0
  545. package/skills/maestro-examples/references/setlist/setlist-web/app/features/custom-error-status-code-middleware.server.ts +31 -0
  546. package/skills/maestro-examples/references/setlist/setlist-web/app/features/rate-limiting-middleware.server.ts +36 -0
  547. package/skills/maestro-examples/references/setlist/setlist-web/app/features/redirect-with-toast.server.ts +14 -0
  548. package/skills/maestro-examples/references/setlist/setlist-web/app/features/request-context.server.ts +52 -0
  549. package/skills/maestro-examples/references/setlist/setlist-web/app/features/security-headers-middleware.server.ts +10 -0
  550. package/skills/maestro-examples/references/setlist/setlist-web/app/hooks/use-area-actions.ts +44 -0
  551. package/skills/maestro-examples/references/setlist/setlist-web/app/hooks/use-csrf-token.ts +6 -0
  552. package/skills/maestro-examples/references/setlist/setlist-web/app/hooks/use-project-actions.ts +80 -0
  553. package/skills/maestro-examples/references/setlist/setlist-web/app/hooks/use-task-actions.ts +65 -0
  554. package/skills/maestro-examples/references/setlist/setlist-web/app/root.tsx +218 -0
  555. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/areas.$id.delete.tsx +19 -0
  556. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/areas.$id.edit.tsx +27 -0
  557. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/areas.$id.reorder.tsx +30 -0
  558. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/areas.tsx +23 -0
  559. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/projects.$id.complete.tsx +19 -0
  560. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/projects.$id.delete.tsx +19 -0
  561. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/projects.$id.edit.tsx +32 -0
  562. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/projects.$id.move.tsx +23 -0
  563. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/projects.$id.reorder.tsx +30 -0
  564. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/projects.$id.uncomplete.tsx +19 -0
  565. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/projects.tsx +23 -0
  566. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/tasks.$id.complete.tsx +19 -0
  567. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/tasks.$id.delete.tsx +19 -0
  568. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/tasks.$id.edit.tsx +27 -0
  569. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/tasks.$id.move.tsx +30 -0
  570. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/tasks.$id.reorder.tsx +32 -0
  571. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/tasks.$id.uncomplete.tsx +19 -0
  572. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/api/tasks.tsx +23 -0
  573. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/areas.$id.tsx +155 -0
  574. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/auth.login.tsx +98 -0
  575. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/auth.logout.tsx +17 -0
  576. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/auth.verify.tsx +154 -0
  577. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/completed.tsx +121 -0
  578. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/inbox.tsx +68 -0
  579. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/projects.$id.tsx +217 -0
  580. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/today.tsx +86 -0
  581. package/skills/maestro-examples/references/setlist/setlist-web/app/routes/upcoming.tsx +83 -0
  582. package/skills/maestro-examples/references/setlist/setlist-web/app/routes.ts +4 -0
  583. package/skills/maestro-examples/references/setlist/setlist-web/app/services.server.ts +1 -0
  584. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/colors.ts +47 -0
  585. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/compose-refs.ts +35 -0
  586. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/tw.ts +16 -0
  587. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/use-dismiss.ts +27 -0
  588. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/use-fetcher-complete.ts +17 -0
  589. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/use-prevent-default.ts +30 -0
  590. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/use-render-props.ts +42 -0
  591. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/use-spin-delay.ts +27 -0
  592. package/skills/maestro-examples/references/setlist/setlist-web/app/utils/use-stable-accessor.ts +14 -0
  593. package/skills/maestro-examples/references/setlist/setlist-web/environment.d.ts +8 -0
  594. package/skills/maestro-examples/references/setlist/setlist-web/instrument.server.mjs +29 -0
  595. package/skills/maestro-examples/references/setlist/setlist-web/knip.json +3 -0
  596. package/skills/maestro-examples/references/setlist/setlist-web/package.json +52 -0
  597. package/skills/maestro-examples/references/setlist/setlist-web/playwright.config.ts +39 -0
  598. package/skills/maestro-examples/references/setlist/setlist-web/react-router.config.ts +12 -0
  599. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-create.test.ts +37 -0
  600. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-delete.test.ts +45 -0
  601. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-deleted-not-in-sidebar.test.ts +44 -0
  602. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-detail-view.test.ts +46 -0
  603. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-edit-title.test.ts +48 -0
  604. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-expand-collapse.test.ts +50 -0
  605. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-list-in-sidebar.test.ts +37 -0
  606. package/skills/maestro-examples/references/setlist/setlist-web/tests/areas-reorder-dnd.test.ts +82 -0
  607. package/skills/maestro-examples/references/setlist/setlist-web/tests/auth-logout.test.ts +18 -0
  608. package/skills/maestro-examples/references/setlist/setlist-web/tests/auth-reject-invalid-token.test.ts +35 -0
  609. package/skills/maestro-examples/references/setlist/setlist-web/tests/auth-reject-used-token.test.ts +104 -0
  610. package/skills/maestro-examples/references/setlist/setlist-web/tests/auth-request-magic-link.test.ts +29 -0
  611. package/skills/maestro-examples/references/setlist/setlist-web/tests/auth-verify-via-pasted-token.test.ts +52 -0
  612. package/skills/maestro-examples/references/setlist/setlist-web/tests/auth-verify-via-url.test.ts +48 -0
  613. package/skills/maestro-examples/references/setlist/setlist-web/tests/auth.setup.ts +55 -0
  614. package/skills/maestro-examples/references/setlist/setlist-web/tests/constants.ts +13 -0
  615. package/skills/maestro-examples/references/setlist/setlist-web/tests/dnd-inbox-to-area.test.ts +74 -0
  616. package/skills/maestro-examples/references/setlist/setlist-web/tests/dnd-inbox-to-project.test.ts +73 -0
  617. package/skills/maestro-examples/references/setlist/setlist-web/tests/dnd-move-to-inbox.test.ts +51 -0
  618. package/skills/maestro-examples/references/setlist/setlist-web/tests/dnd-project-to-area.test.ts +76 -0
  619. package/skills/maestro-examples/references/setlist/setlist-web/tests/dnd-project-to-project.test.ts +75 -0
  620. package/skills/maestro-examples/references/setlist/setlist-web/tests/home.test.ts +27 -0
  621. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-complete.test.ts +53 -0
  622. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-completed-not-in-sidebar.test.ts +46 -0
  623. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-create-in-area.test.ts +55 -0
  624. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-create-top-level.test.ts +37 -0
  625. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-delete.test.ts +55 -0
  626. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-edit-notes-date.test.ts +69 -0
  627. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-edit-title.test.ts +48 -0
  628. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-move-into-area.test.ts +72 -0
  629. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-move-out-of-area.test.ts +76 -0
  630. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-reorder-top-level.test.ts +82 -0
  631. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-reorder-within-area.test.ts +91 -0
  632. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-uncomplete.test.ts +39 -0
  633. package/skills/maestro-examples/references/setlist/setlist-web/tests/projects-view-tasks.test.ts +48 -0
  634. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-complete-removes-from-active-views.test.ts +52 -0
  635. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-complete.test.ts +46 -0
  636. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-create-in-inbox.test.ts +19 -0
  637. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-create-in-project.test.ts +44 -0
  638. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-delete.test.ts +52 -0
  639. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-edit.test.ts +73 -0
  640. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-reorder-in-project.test.ts +81 -0
  641. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-reorder-inbox.test.ts +80 -0
  642. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-reorder-today.test.ts +103 -0
  643. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-uncomplete.test.ts +51 -0
  644. package/skills/maestro-examples/references/setlist/setlist-web/tests/tasks-view-details.test.ts +51 -0
  645. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-active-sidebar-highlight.test.ts +38 -0
  646. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-inbox-unassigned-only.test.ts +43 -0
  647. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-navigate-to-completed.test.ts +59 -0
  648. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-navigate-to-inbox.test.ts +21 -0
  649. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-navigate-to-today.test.ts +42 -0
  650. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-navigate-to-upcoming.test.ts +59 -0
  651. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-sidebar-built-in-views.test.ts +23 -0
  652. package/skills/maestro-examples/references/setlist/setlist-web/tests/views-today-shows-overdue.test.ts +48 -0
  653. package/skills/maestro-examples/references/setlist/setlist-web/tsconfig.json +22 -0
  654. package/skills/maestro-examples/references/setlist/setlist-web/vite.config.ts +37 -0
  655. package/skills/maestro-examples/references/setlist/specs/app.md +69 -0
  656. package/skills/maestro-examples/references/setlist/specs/data-models.md +92 -0
  657. package/skills/maestro-examples/references/setlist/specs/database-schema.md +76 -0
  658. package/skills/maestro-examples/references/setlist/specs/drag-and-drop.md +89 -0
  659. package/skills/maestro-examples/references/setlist/specs/magic-link-login.md +300 -0
  660. package/skills/maestro-examples/references/setlist/specs/position-ordering.md +329 -0
  661. package/skills/maestro-examples/references/setlist/specs/sidebar.md +65 -0
  662. package/skills/maestro-examples/references/setlist/specs/use-cases.md +55 -0
  663. package/skills/maestro-examples/references/setlist/tsconfig.json +28 -0
  664. package/{dist → skills}/maestro-packages/SKILL.md +3 -3
  665. package/skills/maestro-packages/permissions.md +215 -0
  666. package/skills/maestro-packages/queue.md +442 -0
  667. package/skills/maestro-packages/recurring-jobs.md +238 -0
  668. package/skills/react-use-effect/SKILL.md +65 -0
  669. package/skills/react-use-effect/references/patterns.md +283 -0
  670. package/dist/maestro-packages/queue.md +0 -284
  671. package/dist/maestro-packages/recurring-jobs.md +0 -353
  672. package/dist/maestro-packages/tracing.md +0 -240
  673. /package/{dist → skills}/maestro-cli/SKILL.md +0 -0
  674. /package/{dist → skills}/maestro-packages/broadcast.md +0 -0
  675. /package/{dist → skills}/maestro-packages/cache-control.md +0 -0
  676. /package/{dist → skills}/maestro-packages/cache.md +0 -0
  677. /package/{dist → skills}/maestro-packages/config.md +0 -0
  678. /package/{dist → skills}/maestro-packages/context.md +0 -0
  679. /package/{dist → skills}/maestro-packages/crypt.md +0 -0
  680. /package/{dist → skills}/maestro-packages/db.md +0 -0
  681. /package/{dist → skills}/maestro-packages/events.md +0 -0
  682. /package/{dist → skills}/maestro-packages/exceptions.md +0 -0
  683. /package/{dist → skills}/maestro-packages/form.md +0 -0
  684. /package/{dist → skills}/maestro-packages/hash.md +0 -0
  685. /package/{dist → skills}/maestro-packages/helpers.md +0 -0
  686. /package/{dist → skills}/maestro-packages/log.md +0 -0
  687. /package/{dist → skills}/maestro-packages/mail.md +0 -0
  688. /package/{dist → skills}/maestro-packages/metrics.md +0 -0
  689. /package/{dist → skills}/maestro-packages/rate-limiting.md +0 -0
  690. /package/{dist → skills}/maestro-packages/react-router-file-routes.md +0 -0
  691. /package/{dist → skills}/maestro-packages/sql.md +0 -0
package/dist/bin.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/bin.ts
4
+ import path from "path";
5
+ import { spawnSync } from "child_process";
6
+ import { parseArgs } from "util";
7
+ var { values } = parseArgs({
8
+ options: {
9
+ interactive: { type: "boolean", default: false },
10
+ copy: { type: "boolean", default: false }
11
+ },
12
+ strict: false
13
+ });
14
+ var skillsPath = path.resolve(import.meta.dirname, "..");
15
+ var args = ["skills", "add", skillsPath, "-a", "claude-code"];
16
+ if (!values.interactive) args.push("-s", "*", "-y");
17
+ if (values.copy) args.push("--copy");
18
+ var result = spawnSync("npx", args, { stdio: "inherit" });
19
+ if (result.status !== 0) process.exit(1);
package/package.json CHANGED
@@ -2,21 +2,22 @@
2
2
  "name": "@maestro-js/agent-skills",
3
3
  "description": "Agent skills for the @maestro-js framework.",
4
4
  "type": "module",
5
+ "bin": {
6
+ "maestro-skills": "./dist/bin.js"
7
+ },
5
8
  "exports": {
6
- ".": {
7
- "types": "./dist/index.d.ts",
8
- "default": "./dist/index.js"
9
- }
9
+ "./package.json": "./package.json"
10
10
  },
11
11
  "devDependencies": {
12
12
  "@types/node": "^22.19.11"
13
13
  },
14
- "version": "1.0.0-alpha.2",
14
+ "version": "1.0.0-alpha.20",
15
15
  "publishConfig": {
16
16
  "access": "restricted"
17
17
  },
18
18
  "files": [
19
- "dist"
19
+ "dist",
20
+ "skills"
20
21
  ],
21
22
  "license": "UNLICENSED",
22
23
  "engines": {
@@ -27,7 +28,7 @@
27
28
  "generate-skills": "node scripts/generate-package-skills.ts",
28
29
  "generate-choosing-npm-package-skill": "node scripts/generate-choosing-npm-package-skill.ts",
29
30
  "generate-maestro-cli-skill": "node scripts/generate-maestro-cli-skill.ts",
30
- "build": "node scripts/generate-package-skills.ts && node scripts/generate-choosing-npm-package-skill.ts && node scripts/generate-maestro-cli-skill.ts",
31
+ "build": "node scripts/build.ts && tsup",
31
32
  "typecheck": "tsc --noEmit"
32
33
  }
33
34
  }
@@ -46,19 +46,20 @@ Before installing any dependency, check this list for the user's preferred packa
46
46
  - **@maestro-js/form** — Headless React form primitives with client and server validation, hidden inputs for custom components, controlled/uncontrolled state management, and Standard Schema (Zod) FormData parsing with automatic type coercion. Use when building custom form components that need native constraint validation, server error integration, file upload handling, or type-safe FormData parsing. Provides HeadlessForm root component, useValidation/useWarningState/useControlledState/useReset hooks, HiddenInput/HiddenFileInput/HiddenSelect components, parseFormData/parseFormDataClientSide utilities, and composeValidators.
47
47
  - **@maestro-js/hash** — Pluggable hashing and verification with driver-based backends for @maestro-js/hash. Use when working with @maestro-js/hash, hashing values, verifying hashes, detecting when a rehash is needed, or rotating signing keys. Built-in drivers: SHA256 (HMAC-SHA256 with key rotation and timing-safe comparison).
48
48
  - **@maestro-js/helpers** — Standalone utility functions for async control flow and file handling in the @maestro-js/helpers package. Use when working with @maestro-js/helpers. Key capabilities: retry with configurable attempts/delay/backoff, sleep, withMaxConcurrency for limiting parallel executions, withRateLimit with fixed or sliding window, raceWithFallback for promise racing with default values, AsyncIterableCollection for lazy async iteration (map, filter, reduce, forEach, toArray), sanitizeFilename for safe cross-platform filenames, and withRetry for wrapping functions with retry behavior.
49
+ - **@maestro-js/init** — Project scaffolding for the Maestro framework. Generates a complete monorepo with config, schemas, services, web app, queue processor, and infrastructure.
50
+ - **@maestro-js/iso-zod** — Zod custom schemas for ISO 8601 temporal types (Instant, DateTime, ZonedDateTime, Date, Time, YearMonth, MonthDay, Duration) backed by iso-fns validation. Use when defining Zod schemas that include ISO temporal fields. Provides isoZ factory functions that return typed Zod schemas and an isoZRegistry for introspecting registered ISO type metadata.
49
51
  - **@maestro-js/log** — Structured logging with pluggable transports and channel-based routing for the Maestro framework. Use when working with @maestro-js/log, adding or modifying log transports, configuring log channels, filtering log messages by level or channel, integrating logging into other packages, or writing tests that capture log output. Key capabilities: create loggers with pluggable transports (console, file, Sentry, stub), route messages through named channels, filter by level and channel, override Node.js console, custom formatters, and the silence transport for suppressing output.
50
52
  - **@maestro-js/mail** — Driver-based email sending with queued delivery, scheduled sending, and mailable templates for the @maestro-js/mail package. Use when working with @maestro-js/mail. Covers creating mail services with SendGrid/SES/MailTrap/Stub drivers, sending emails immediately or via queue, scheduling future delivery, building reusable mailable templates, processing webhook events, generating ICS calendar attachments, and testing with the stub driver.
51
53
  - **@maestro-js/metrics** — Use when working with @maestro-js/metrics. Unified metrics collection piped through the Log transport system. Covers four metric types (counters, distributions, sets, gauges), provider setup, logger integration, Sentry transport, and custom transport authoring. Trigger on metrics emission, observability instrumentation, Sentry metrics integration, or application telemetry tasks.
52
54
  - **@maestro-js/password** —
53
- - **@maestro-js/queue** — Database-backed job queue for deferring work beyond the current request with scheduled execution, concurrency control, and distributed tracing. Use when working with @maestro-js/queue, including dispatching jobs, processing queues, configuring the db driver, writing queue consumers, handling retries/stuck jobs, integrating with mail or recurring-jobs, and understanding the queue database schema.
54
- - **@maestro-js/queue2** — Database-backed job queue for deferring work beyond the current request with scheduled execution, concurrency control, and distributed tracing. Use when working with @maestro-js/queue, including dispatching jobs, processing queues, configuring the db driver, writing queue consumers, handling retries/stuck jobs, integrating with mail or recurring-jobs, and understanding the queue database schema.
55
+ - **@maestro-js/permissions** — Subject-action authorization with type-safe action maps and profile-based rule resolution. Use when you need role-based access control, permission checks (can/cannot), or authorization gates that throw on denial. Provides a static driver for declarative allow/forbid rule definitions. Built on CASL.
56
+ - **@maestro-js/queue** — Database-backed job queue with middleware, configurable retries, and backoff strategies. Use when dispatching background jobs, processing queues with concurrency control, scheduling delayed work, handling retries and permanent failures, or integrating with mail/recurring-jobs. Provides db (MySQL) and local (in-memory) drivers.
55
57
  - **@maestro-js/rate-limiting** — Per-key rate limiting with configurable decay windows. Use when enforcing attempt limits on login, API endpoints, or any action that needs throttling. Provides increment/check/clear workflow, guarded callback execution via attempt(), and ISO 8601 duration reporting. Requires a cache driver (e.g. from @maestro-js/cache).
56
58
  - **@maestro-js/react-router-file-routes** —
57
- - **@maestro-js/recurring-jobs** — Use when working with @maestro-js/recurring-jobs. Cron-based job scheduling backed by the Queue package. Covers creating recurring jobs, managing schedules, start/stop processing, rescheduling, listing jobs, and inspecting upcoming runs. Follows the Provider pattern with ServiceRegistry. Key capabilities include cron expression parsing, deduplication across process restarts, per-job dedicated queues, structured log events, and paginated execution history.
59
+ - **@maestro-js/recurring-jobs** — Use when working with @maestro-js/recurring-jobs. Cron-based recurring job scheduling with distributed lock-based deduplication. Use for cron scheduling, periodic background tasks, and recurring jobs that must run exactly once across processes. Drivers: Db (MySQL), Cache (Redis via @maestro-js/cache), Local (in-memory). Follows the Provider pattern with ServiceRegistry. Key capabilities include cron expression parsing, 60-second polling loop, per-job distributed locking, optional middleware wrapping, eager cron validation, structured lifecycle log events (jobDue, jobLockAcquired, jobFailed, jobProcessed), and graceful shutdown via abort/stopAllWork.
58
60
  - **@maestro-js/session** —
59
61
  - **@maestro-js/signed-url** — URL signing and verification with pluggable hash drivers for @maestro-js/signed-url. Use when generating tamper-proof signed URLs with expiration (e.g. file download links, email verification) or validating signed URL parameters. Accepts any hash driver compatible with @maestro-js/hash.
60
62
  - **@maestro-js/sql** — Composable SQL query builders for dynamic WHERE clauses and Common Table Expressions (CTEs). Use when working with @maestro-js/sql, building dynamic SQL filters, constructing parameterized WHERE clauses, wrapping Db services with CTEs, or generating safe parameterized SQL fragments. Key capabilities: WhereClauseBuilder for incremental AND/OR conditions with nested sub-groups, CommonTableExpressionBuilder for wrapping a Db service so all queries auto-prepend WITH clauses, cloning builders, recursive CTEs, and dynamic parameter resolution.
61
- - **@maestro-js/tracing** — Distributed tracing package built on OpenTelemetry with pluggable providers (Sentry, Maestro). Use when working with @maestro-js/tracing. Key capabilities: wrap functions for automatic span tracking, create active spans with duration measurement, proxy entire objects for tracing, serialize/deserialize trace context across process boundaries (dehydrate/hydrate), add custom log transports for span events, integrate Sentry as a tracing provider.
62
63
 
63
64
  ## General Guidance
64
65
 
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: iconify
3
+ description: Search the Iconify icon registry and download SVGs to a local directory. Use when the user asks to find an icon, download an icon, get an SVG for something, or says things like "find me a home icon", "I need an arrow SVG", "get me an icon for X", or "download heroicons:name".
4
+ ---
5
+
6
+ # Iconify
7
+
8
+ ## Overview
9
+
10
+ Search Iconify's icon registry and save SVG files locally. Prefers Heroicons v2 first, then other Heroicons variants, then Material Symbols. Uses the Node.js script at `.claude/skills/iconify/scripts/iconify.js` (requires Node 18+).
11
+
12
+ ## Workflow
13
+
14
+ ### 1. Search for icons
15
+
16
+ ```bash
17
+ node .claude/skills/iconify/scripts/iconify.js search "<query>" --limit 10
18
+ ```
19
+
20
+ - The script outputs a JSON array sorted by preference: `heroicons` → `heroicons-outline`/`heroicons-solid` → `material-symbols` → others
21
+ - Each result has: `{ id, prefix, name }`
22
+
23
+ ### 2. Select the best match
24
+
25
+ Pick the top result unless the user specified a different icon or pack. Preference order:
26
+
27
+ 1. `heroicons` — Heroicons v2 (current, preferred)
28
+ 2. `heroicons-outline` / `heroicons-solid` — Heroicons v1
29
+ 3. `material-symbols` — Google Material Symbols
30
+ 4. Others
31
+
32
+ ### 3. Determine the output directory
33
+
34
+ - If the user specified a path, use it
35
+ - Otherwise, infer from context (e.g., `src/assets/icons`, `public/icons`)
36
+ - most typical will be /other/svg-icons .
37
+ - Note the vite svg sprite generator outputs sprites to /app/icons . AVOID this directory!!! Use /other/svg-icons/\* instead
38
+ - If unclear, ask the user
39
+
40
+ ### 4. Download the SVG
41
+
42
+ ```bash
43
+ node .claude/skills/iconify/scripts/iconify.js download <prefix>:<name> <outputDir>
44
+ ```
45
+
46
+ The script prints the resolved file path on success.
47
+
48
+ ### 5. Report back
49
+
50
+ Tell the user the saved file path and which icon was chosen (e.g., `heroicons:home` → `src/assets/icons/home.svg`).
51
+
52
+ ## Examples
53
+
54
+ **User:** "Find me a home icon and save it to src/assets/icons"
55
+
56
+ ```bash
57
+ node .claude/skills/iconify/scripts/iconify.js search "home" --limit 10
58
+ # → picks heroicons:home (rank 0)
59
+ node .claude/skills/iconify/scripts/iconify.js download heroicons:home src/assets/icons
60
+ # → /abs/path/src/assets/icons/home.svg
61
+ ```
62
+
63
+ **User:** "Get me an arrow-left SVG"
64
+
65
+ ```bash
66
+ node .claude/skills/iconify/scripts/iconify.js search "arrow left" --limit 10
67
+ # → picks heroicons:arrow-left
68
+ # Ask user for output dir if not specified, then download
69
+ node .claude/skills/iconify/scripts/iconify.js download heroicons:arrow-left ./src/icons
70
+ ```
71
+
72
+ ## Script Reference
73
+
74
+ **Script:** `.claude/skills/iconify/scripts/iconify.js`
75
+ **Requires:** Node 18+
76
+
77
+ | Subcommand | Signature | Output |
78
+ | ---------- | ------------------------------- | --------------------------------------------------------- |
79
+ | `search` | `search <query> [--limit N]` | JSON array of `{ id, prefix, name }` sorted by preference |
80
+ | `download` | `download <iconId> <outputDir>` | Resolved file path on stdout; errors to stderr + exit 1 |
81
+
82
+ Icon IDs follow `prefix:name` format, e.g. `heroicons:home`, `material-symbols:favorite`.
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ // iconify.js — search and download SVG icons from Iconify API
3
+ // Requires Node 18+ (built-in fetch)
4
+ // Usage:
5
+ // node iconify.js search "arrow left" [--limit N]
6
+ // node iconify.js download heroicons:arrow-left ./output/dir
7
+
8
+ import { writeFile, mkdir } from 'fs/promises'
9
+ import { resolve, join } from 'path'
10
+
11
+ const ICONIFY_API = 'https://api.iconify.design'
12
+ const HEROICONS_PREFIXES = new Set(['heroicons', 'heroicons-outline', 'heroicons-solid'])
13
+ const MATERIAL_PREFIXES = new Set(['material-symbols', 'material-symbols-light', 'material-symbols-rounded'])
14
+
15
+ function rankIcon(prefix) {
16
+ if (prefix === 'heroicons') return 0
17
+ if (HEROICONS_PREFIXES.has(prefix)) return 1
18
+ if (MATERIAL_PREFIXES.has(prefix)) return 2
19
+ return 3
20
+ }
21
+
22
+ async function search(query, limit = 10) {
23
+ const preferredPrefixes = 'heroicons,heroicons-outline,heroicons-solid,material-symbols'
24
+
25
+ const [preferredRes, allRes] = await Promise.all([
26
+ fetch(`${ICONIFY_API}/search?query=${encodeURIComponent(query)}&prefixes=${preferredPrefixes}&limit=${limit}`),
27
+ fetch(`${ICONIFY_API}/search?query=${encodeURIComponent(query)}&limit=${limit}`)
28
+ ])
29
+
30
+ if (!preferredRes.ok) {
31
+ process.stderr.write(`Search failed: ${preferredRes.status} ${preferredRes.statusText}\n`)
32
+ process.exit(1)
33
+ }
34
+
35
+ const preferredData = await preferredRes.json()
36
+ const allData = allRes.ok ? await allRes.json() : { icons: [] }
37
+
38
+ // Merge results, deduplicating by icon id
39
+ const seen = new Set()
40
+ const icons = []
41
+
42
+ for (const id of [...(preferredData.icons ?? []), ...(allData.icons ?? [])]) {
43
+ if (seen.has(id)) continue
44
+ seen.add(id)
45
+ const colonIdx = id.indexOf(':')
46
+ const prefix = colonIdx >= 0 ? id.slice(0, colonIdx) : ''
47
+ const name = colonIdx >= 0 ? id.slice(colonIdx + 1) : id
48
+ icons.push({ id, prefix, name })
49
+ }
50
+
51
+ // Sort by preference rank
52
+ icons.sort((a, b) => rankIcon(a.prefix) - rankIcon(b.prefix))
53
+
54
+ process.stdout.write(JSON.stringify(icons, null, 2) + '\n')
55
+ }
56
+
57
+ async function download(iconId, outputDir) {
58
+ const colonIdx = iconId.indexOf(':')
59
+ if (colonIdx < 0) {
60
+ process.stderr.write(`Invalid icon id "${iconId}" — expected format "prefix:name"\n`)
61
+ process.exit(1)
62
+ }
63
+
64
+ const prefix = iconId.slice(0, colonIdx)
65
+ const name = iconId.slice(colonIdx + 1)
66
+
67
+ const url = `${ICONIFY_API}/${prefix}/${name}.svg`
68
+ const res = await fetch(url)
69
+
70
+ if (!res.ok) {
71
+ process.stderr.write(`Download failed for "${iconId}": ${res.status} ${res.statusText}\n`)
72
+ process.exit(1)
73
+ }
74
+
75
+ const svg = await res.text()
76
+ const dir = resolve(outputDir)
77
+ await mkdir(dir, { recursive: true })
78
+ const filePath = join(dir, `${name}.svg`)
79
+ await writeFile(filePath, svg, 'utf8')
80
+
81
+ process.stdout.write(filePath + '\n')
82
+ }
83
+
84
+ // --- CLI entrypoint ---
85
+
86
+ const [, , subcommand, ...rest] = process.argv
87
+
88
+ if (subcommand === 'search') {
89
+ const limitIdx = rest.indexOf('--limit')
90
+ const limit = limitIdx >= 0 ? parseInt(rest[limitIdx + 1], 10) : 10
91
+ const queryParts = rest.filter((_, i) => i !== limitIdx && i !== limitIdx + 1)
92
+ const query = queryParts.join(' ')
93
+
94
+ if (!query) {
95
+ process.stderr.write('Usage: iconify.js search <query> [--limit N]\n')
96
+ process.exit(1)
97
+ }
98
+
99
+ await search(query, limit)
100
+ } else if (subcommand === 'download') {
101
+ const [iconId, outputDir] = rest
102
+ if (!iconId || !outputDir) {
103
+ process.stderr.write('Usage: iconify.js download <iconId> <outputDir>\n')
104
+ process.exit(1)
105
+ }
106
+
107
+ await download(iconId, outputDir)
108
+ } else {
109
+ process.stderr.write('Usage:\n iconify.js search <query> [--limit N]\n iconify.js download <iconId> <outputDir>\n')
110
+ process.exit(1)
111
+ }
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: iso-fns
3
+ description: String-based date/time library using ISO 8601 strings instead of Date objects. Use when code imports `iso-fns`, uses `Iso.*` types (`Iso.Date`, `Iso.Instant`, `Iso.ZonedDateTime`, etc.), or calls `dateFns`, `timeFns`, `dateTimeFns`, `instantFns`, `zonedDateTimeFns`, `yearMonthFns`, `monthDayFns`, or `durationFns`. Also use when the user asks about iso-fns patterns, date/time handling with ISO strings, or temporal arithmetic.
4
+ ---
5
+
6
+ # iso-fns
7
+
8
+ A functional, immutable date/time library where all temporal values are ISO 8601 strings. No class instances, no hidden state -- just strings in, strings out.
9
+
10
+ ## Quick Reference
11
+
12
+ ```ts
13
+ import {
14
+ dateFns,
15
+ timeFns,
16
+ dateTimeFns,
17
+ instantFns,
18
+ zonedDateTimeFns,
19
+ durationFns,
20
+ yearMonthFns,
21
+ monthDayFns,
22
+ type Iso
23
+ } from 'iso-fns'
24
+ ```
25
+
26
+ **8 types** -- each a branded string:
27
+
28
+ | Type | Example | Use for |
29
+ | ------------------- | ---------------------------------------------- | ------------------------- |
30
+ | `Iso.Date` | `'2024-01-15'` | Calendar dates |
31
+ | `Iso.Time` | `'09:30:00'` | Wall-clock times |
32
+ | `Iso.DateTime` | `'2024-01-15T09:30:00'` | Date + time, no timezone |
33
+ | `Iso.Instant` | `'2024-01-15T15:30:00.000Z'` | Exact point in time (UTC) |
34
+ | `Iso.ZonedDateTime` | `'2024-01-15T09:30:00-06:00[America/Chicago]'` | Timezone-aware date/time |
35
+ | `Iso.YearMonth` | `'2024-01'` | Month precision |
36
+ | `Iso.MonthDay` | `'--01-15'` | Recurring monthly dates |
37
+ | `Iso.Duration` | `'P1Y2M3D'` | Lengths of time |
38
+
39
+ **8 function namespaces** -- one per type, each with a consistent API surface: `now()`, `from()`, `with()`, `add()`, `subtract()`, `until()`, `since()`, `equals()`, `compare()`, `format()`, `chain()`, getters, and type conversions.
40
+
41
+ ## Choosing the Right Type
42
+
43
+ - **Store timestamps / "when did this happen"** -> `Iso.Instant` (exact UTC point)
44
+ - **Display to user in their timezone** -> `Iso.ZonedDateTime`
45
+ - **Date picker value / birthday** -> `Iso.Date`
46
+ - **Alarm / schedule time** -> `Iso.Time`
47
+ - **Form with date + time, no timezone yet** -> `Iso.DateTime`
48
+ - **"3 months from now"** -> `Iso.Duration`
49
+ - **Credit card expiry** -> `Iso.YearMonth`
50
+ - **Annual holiday** -> `Iso.MonthDay`
51
+
52
+ ## Common Patterns
53
+
54
+ ### Get current date/time
55
+
56
+ ```ts
57
+ dateFns.now() // '2024-01-15'
58
+ instantFns.now() // '2024-01-15T15:30:00.000Z'
59
+ zonedDateTimeFns.now('America/Chicago') // '2024-01-15T09:30:00.000-06:00[America/Chicago]'
60
+ ```
61
+
62
+ ### Create from components
63
+
64
+ ```ts
65
+ dateFns.fromNumbers(2024, 1, 15) // '2024-01-15'
66
+ dateTimeFns.fromNumbers(2024, 1, 15, 9, 30) // '2024-01-15T09:30:00.000'
67
+ instantFns.fromEpochMilliseconds(Date.now()) // Iso.Instant from epoch
68
+ ```
69
+
70
+ ### Arithmetic
71
+
72
+ ```ts
73
+ dateFns.add('2024-01-15', { months: 1 }) // '2024-02-15'
74
+ dateFns.subtract('2024-01-15', { days: 20 }) // '2023-12-26'
75
+ dateFns.until('2024-01-01', '2024-03-01', { largestUnit: 'months' }) // 'P2M'
76
+ ```
77
+
78
+ ### Comparison
79
+
80
+ ```ts
81
+ dateFns.isBefore('2024-01-01', '2024-06-01') // true
82
+ dateFns.isAfter('2024-06-01', '2024-01-01') // true
83
+ dateFns.isEqualOrBefore('2024-01-01', '2024-01-01') // true
84
+ instantFns.compare(a, b) // -1, 0, or 1
85
+ ```
86
+
87
+ ### Modify specific fields
88
+
89
+ ```ts
90
+ dateFns.with('2024-01-15', { month: 6 }) // '2024-06-15'
91
+ dateTimeFns.withTime('2024-01-15T09:30:00', '17:00:00') // '2024-01-15T17:00:00'
92
+ zonedDateTimeFns.withTimeZone(zdt, 'Europe/London') // convert timezone
93
+ ```
94
+
95
+ ### Type conversions
96
+
97
+ ```ts
98
+ dateFns.toDateTime('2024-01-15', '09:30:00') // '2024-01-15T09:30:00'
99
+ dateFns.toZonedDateTime('2024-01-15', { timeZone: 'America/Chicago', time: '09:30:00' })
100
+ instantFns.toZonedDateTime(instant, 'America/Chicago')
101
+ zonedDateTimeFns.toDate(zdt) // extract Iso.Date
102
+ zonedDateTimeFns.toInstant(zdt) // extract Iso.Instant
103
+ ```
104
+
105
+ ### Formatting
106
+
107
+ ```ts
108
+ dateFns.format('2024-02-11', 'MM/dd/yyyy') // '02/11/2024'
109
+ dateFns.format('2024-02-11', 'MMMM do, yyyy') // 'February 11th, 2024'
110
+ zonedDateTimeFns.format(zdt, 'PPpp') // 'Feb 11, 2024, 9:30:00 AM'
111
+ ```
112
+
113
+ ### Chaining
114
+
115
+ ```ts
116
+ dateFns.chain('2024-01-15').add({ months: 1 }).with({ day: 1 }).value() // '2024-02-01'
117
+ ```
118
+
119
+ ### Validation
120
+
121
+ ```ts
122
+ dateFns.isValid('2024-01-15') // true (type guard)
123
+ dateFns.assertIsValid(input) // throws if invalid
124
+ ```
125
+
126
+ ### Duration math
127
+
128
+ ```ts
129
+ durationFns.total('P1Y6M', { unit: 'months' }) // 18
130
+ durationFns.add('P1Y', 'P6M') // 'P1Y6M'
131
+ durationFns.negated('P1D') // '-P1D'
132
+ durationFns.abs('-P1D') // 'P1D'
133
+ ```
134
+
135
+ ## Full API Reference
136
+
137
+ See [references/api_reference.md](references/api_reference.md) for complete function signatures for all 8 namespaces.