@oyolincc/create 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (682) hide show
  1. package/package.json +2 -2
  2. package/templates/{monorepo/.agents/skills/grilling → hono-fullstack/.agents/skills/ask-grilling}/SKILL.md +1 -1
  3. package/templates/hono-fullstack/.agents/skills/build-api-and-interface-design/SKILL.md +369 -0
  4. package/templates/hono-fullstack/.agents/skills/build-context-engineering/SKILL.md +353 -0
  5. package/templates/hono-fullstack/.agents/skills/build-incremental-implementation/SKILL.md +249 -0
  6. package/templates/hono-fullstack/.agents/skills/build-observability-and-instrumentation/SKILL.md +239 -0
  7. package/templates/hono-fullstack/.agents/skills/plan-planning-and-task-breakdown/SKILL.md +257 -0
  8. package/templates/{monorepo/.agents/skills/prototype → hono-fullstack/.agents/skills/plan-prototype}/LOGIC.md +1 -1
  9. package/templates/{monorepo/.agents/skills/prototype → hono-fullstack/.agents/skills/plan-prototype}/SKILL.md +2 -2
  10. package/templates/hono-fullstack/.agents/skills/{prototype → plan-prototype}/UI.md +2 -2
  11. package/templates/{monorepo/.agents/skills/research → hono-fullstack/.agents/skills/plan-research}/SKILL.md +2 -2
  12. package/templates/hono-fullstack/.agents/skills/plan-using-agent-skills/SKILL.md +185 -0
  13. package/templates/{monorepo/.agents/skills/wayfinder → hono-fullstack/.agents/skills/plan-wayfinder}/SKILL.md +43 -29
  14. package/templates/hono-fullstack/.agents/skills/review-code-review-and-quality/SKILL.md +400 -0
  15. package/templates/hono-fullstack/.agents/skills/review-doubt-driven-development/SKILL.md +244 -0
  16. package/templates/hono-fullstack/.agents/skills/review-security-and-hardening/SKILL.md +216 -0
  17. package/templates/hono-fullstack/.agents/skills/review-security-and-hardening/references/hardening-patterns.md +331 -0
  18. package/templates/hono-fullstack/.agents/skills/ship-ci-cd-and-automation/SKILL.md +393 -0
  19. package/templates/hono-fullstack/.agents/skills/ship-deprecation-and-migration/SKILL.md +252 -0
  20. package/templates/hono-fullstack/.agents/skills/ship-documentation-and-adrs/SKILL.md +298 -0
  21. package/templates/hono-fullstack/.agents/skills/ship-git-workflow-and-versioning/SKILL.md +355 -0
  22. package/templates/hono-fullstack/.agents/skills/ship-shipping-and-launch/SKILL.md +336 -0
  23. package/templates/hono-fullstack/.agents/skills/simplify-code-simplification/SKILL.md +332 -0
  24. package/templates/hono-fullstack/.agents/skills/simplify-performance-optimization/SKILL.md +268 -0
  25. package/templates/hono-fullstack/.agents/skills/simplify-performance-optimization/references/optimization-patterns.md +250 -0
  26. package/templates/hono-fullstack/.agents/skills/spec-constraint-driven-development/SKILL.md +318 -0
  27. package/templates/hono-fullstack/.agents/skills/spec-constraint-driven-development/references/floor-guard.md +182 -0
  28. package/templates/hono-fullstack/.agents/skills/spec-constraint-driven-development/scripts/quality-gate.mjs +45 -0
  29. package/templates/hono-fullstack/.agents/skills/spec-driven-development/SKILL.md +261 -0
  30. package/templates/hono-fullstack/.agents/skills/test-browser-testing-with-devtools/SKILL.md +319 -0
  31. package/templates/hono-fullstack/.agents/skills/test-debugging-and-error-recovery/SKILL.md +300 -0
  32. package/templates/hono-fullstack/.agents/skills/test-driven-development/SKILL.md +400 -0
  33. package/templates/hono-fullstack/.codegraph/.gitignore +5 -0
  34. package/templates/hono-fullstack/AGENTS.md +9 -20
  35. package/templates/hono-fullstack/README.md +22 -1
  36. package/templates/hono-fullstack/_gitignore +1 -0
  37. package/templates/hono-fullstack/apps/server/package.json +7 -2
  38. package/templates/hono-fullstack/apps/server/src/adapters/cloudflare/entry.ts +4 -30
  39. package/templates/hono-fullstack/apps/server/src/adapters/nodejs/bootstrap.ts +20 -12
  40. package/templates/hono-fullstack/apps/server/src/adapters/nodejs/entry.ts +7 -57
  41. package/templates/hono-fullstack/apps/server/src/app.ts +37 -21
  42. package/templates/hono-fullstack/apps/server/src/config.ts +1 -1
  43. package/templates/hono-fullstack/apps/server/src/di-container.ts +51 -0
  44. package/templates/hono-fullstack/apps/server/src/infra/logger/getter.ts +1 -1
  45. package/templates/hono-fullstack/apps/server/src/infra/logger/pino.ts +21 -34
  46. package/templates/hono-fullstack/apps/server/src/infra/work-runner/errors.ts +22 -0
  47. package/templates/hono-fullstack/apps/server/src/infra/work-runner/pass-through/runner.ts +28 -22
  48. package/templates/hono-fullstack/apps/server/src/infra/work-runner/piscina/runner.ts +11 -34
  49. package/templates/{hono-server/apps/server/src/infra/work-runner/example → hono-fullstack/apps/server/src/infra/work-runner/piscina}/worker-entry.ts +6 -2
  50. package/templates/hono-fullstack/apps/server/src/infra/work-runner/types.ts +2 -16
  51. package/templates/hono-fullstack/apps/server/src/infra/work-runner/utils/business-error.ts +10 -5
  52. package/templates/hono-fullstack/apps/server/src/infra/work-runner/utils/message.ts +5 -17
  53. package/templates/hono-fullstack/apps/server/src/middlewares/cors.ts +16 -22
  54. package/templates/hono-fullstack/apps/server/src/middlewares/logger.ts +34 -0
  55. package/templates/hono-fullstack/apps/server/src/modules/example/module.ts +8 -0
  56. package/templates/hono-fullstack/apps/server/src/modules/example/queries.ts +8 -0
  57. package/templates/hono-fullstack/apps/server/src/modules/example/routes.ts +74 -68
  58. package/templates/hono-fullstack/apps/server/src/modules/example/service.test.ts +53 -0
  59. package/templates/hono-fullstack/apps/server/src/modules/example/service.ts +54 -0
  60. package/templates/hono-fullstack/apps/server/src/modules/example/types.ts +12 -0
  61. package/templates/hono-fullstack/apps/server/src/modules/example/work-task/tasks.test.ts +9 -35
  62. package/templates/hono-fullstack/apps/server/src/modules/example/work-task/tasks.ts +15 -46
  63. package/templates/hono-fullstack/apps/server/src/shared/errors/defs/index.ts +6 -1
  64. package/templates/hono-fullstack/apps/server/src/shared/errors/handler.ts +1 -1
  65. package/templates/hono-fullstack/apps/server/src/shared/network/openapi/index.ts +1 -1
  66. package/templates/hono-fullstack/apps/server/src/shared/types/app.ts +51 -0
  67. package/templates/hono-fullstack/apps/server/src/shared/types/db.ts +126 -0
  68. package/templates/hono-fullstack/apps/server/src/shared/utils/data-access/check.ts +19 -0
  69. package/templates/hono-fullstack/apps/server/src/shared/utils/data-access/model.ts +47 -0
  70. package/templates/hono-fullstack/apps/server/src/shared/utils/data-access/params.ts +105 -0
  71. package/templates/hono-fullstack/apps/server/src/shared/utils/data-access/query.test.ts +139 -0
  72. package/templates/hono-fullstack/apps/server/src/shared/utils/data-access/query.ts +236 -0
  73. package/templates/hono-fullstack/apps/server/vite.config.ts +2 -2
  74. package/templates/hono-fullstack/apps/server/wrangler.jsonc +1 -1
  75. package/templates/hono-fullstack/apps/stack/frontend/assets/styles.css +6 -0
  76. package/templates/hono-fullstack/apps/stack/frontend/components/general/ErrorMessage.tsx +3 -1
  77. package/templates/hono-fullstack/apps/stack/frontend/components/layouts/AppLayout.tsx +2 -1
  78. package/templates/hono-fullstack/apps/stack/frontend/components/layouts/Header.tsx +14 -2
  79. package/templates/hono-fullstack/apps/stack/frontend/components/layouts/Page.tsx +2 -1
  80. package/templates/hono-fullstack/apps/stack/frontend/components/layouts/PageContainer.tsx +4 -1
  81. package/templates/hono-fullstack/apps/stack/frontend/modules/example/api.ts +16 -9
  82. package/templates/hono-fullstack/apps/stack/frontend/modules/example/components/ExampleForm.tsx +25 -12
  83. package/templates/hono-fullstack/apps/stack/frontend/modules/example/components/ExampleList.tsx +13 -4
  84. package/templates/hono-fullstack/apps/stack/frontend/modules/example/hooks/api-hooks.ts +3 -3
  85. package/templates/hono-fullstack/apps/stack/frontend/routes/__root.tsx +1 -1
  86. package/templates/hono-fullstack/apps/stack/frontend/routes/index.tsx +16 -4
  87. package/templates/hono-fullstack/apps/stack/package.json +9 -4
  88. package/templates/hono-fullstack/apps/stack/panda.config.ts +31 -0
  89. package/templates/hono-fullstack/apps/stack/tsconfig.json +1 -0
  90. package/templates/hono-fullstack/apps/stack/turbo.json +20 -0
  91. package/templates/hono-fullstack/apps/stack/vite.config.ts +48 -12
  92. package/templates/hono-fullstack/apps/stack/wrangler.jsonc +1 -1
  93. package/templates/hono-fullstack/envs/.env.example.sqlite-d1 +1 -0
  94. package/templates/hono-fullstack/libs/db/drizzle-kit/sqlite-d1.config.ts +29 -10
  95. package/templates/hono-fullstack/libs/db/package.json +1 -0
  96. package/templates/hono-fullstack/libs/db/src/dialects/sqlite/schema/columns.ts +1 -1
  97. package/templates/hono-fullstack/libs/db/src/dialects/sqlite/schema/modules/examples/examples.ts +6 -3
  98. package/templates/hono-fullstack/libs/db/src/dialects/sqlite/schema/vo.ts +7 -1
  99. package/templates/hono-fullstack/libs/definition/README.md +81 -0
  100. package/templates/hono-fullstack/libs/definition/package.json +3 -1
  101. package/templates/hono-fullstack/libs/definition/src/constants/index.ts +1 -0
  102. package/templates/hono-fullstack/libs/definition/src/constants/pagination.ts +3 -0
  103. package/templates/hono-fullstack/libs/definition/src/modules/common-contracts.ts +24 -0
  104. package/templates/hono-fullstack/libs/definition/src/modules/example/contracts.ts +34 -0
  105. package/templates/hono-fullstack/libs/definition/src/modules/example/index.ts +1 -16
  106. package/templates/hono-fullstack/libs/definition/src/modules/index.ts +2 -0
  107. package/templates/hono-fullstack/libs/definition/src/modules/vo-generated-types.ts +12 -0
  108. package/templates/hono-fullstack/libs/ui/.storybook/main.ts +32 -0
  109. package/templates/hono-fullstack/libs/ui/.storybook/panda.config.ts +22 -0
  110. package/templates/hono-fullstack/libs/ui/.storybook/preview.tsx +79 -0
  111. package/templates/hono-fullstack/libs/ui/.storybook/styles.css +1 -0
  112. package/templates/hono-fullstack/libs/ui/.storybook/vite.config.ts +37 -0
  113. package/templates/hono-fullstack/libs/ui/components.json +15 -0
  114. package/templates/hono-fullstack/libs/ui/package.json +114 -0
  115. package/templates/hono-fullstack/libs/ui/panda.config.ts +41 -0
  116. package/templates/hono-fullstack/libs/ui/src/Tooltip.tsx +47 -0
  117. package/templates/hono-fullstack/libs/ui/src/components/atoms/buttons/Button.tsx +80 -0
  118. package/templates/hono-fullstack/libs/ui/src/components/atoms/buttons/CloseButton.tsx +15 -0
  119. package/templates/hono-fullstack/libs/ui/src/components/atoms/buttons/IconButton.tsx +10 -0
  120. package/templates/hono-fullstack/libs/ui/src/components/atoms/collections/Combobox.tsx +91 -0
  121. package/templates/hono-fullstack/libs/ui/src/components/atoms/collections/Select.tsx +88 -0
  122. package/templates/hono-fullstack/libs/ui/src/components/atoms/collections/TreeView.tsx +142 -0
  123. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Avatar.tsx +64 -0
  124. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Badge.tsx +7 -0
  125. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Card.tsx +23 -0
  126. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Clipboard.tsx +77 -0
  127. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Icon.tsx +9 -0
  128. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Table.tsx +51 -0
  129. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Tag.tsx +23 -0
  130. package/templates/hono-fullstack/libs/ui/src/components/atoms/data-display/Timeline.tsx +33 -0
  131. package/templates/hono-fullstack/libs/ui/src/components/atoms/date-and-time/DatePicker.tsx +255 -0
  132. package/templates/hono-fullstack/libs/ui/src/components/atoms/disclosure/Accordion.tsx +48 -0
  133. package/templates/hono-fullstack/libs/ui/src/components/atoms/disclosure/Breadcrumb.tsx +50 -0
  134. package/templates/hono-fullstack/libs/ui/src/components/atoms/disclosure/Collapsible.tsx +34 -0
  135. package/templates/hono-fullstack/libs/ui/src/components/atoms/disclosure/Pagination.tsx +74 -0
  136. package/templates/hono-fullstack/libs/ui/src/components/atoms/disclosure/Steps.tsx +91 -0
  137. package/templates/hono-fullstack/libs/ui/src/components/atoms/disclosure/Tabs.tsx +37 -0
  138. package/templates/hono-fullstack/libs/ui/src/components/atoms/feedback/Alert.tsx +52 -0
  139. package/templates/hono-fullstack/libs/ui/src/components/atoms/feedback/Progress.tsx +41 -0
  140. package/templates/hono-fullstack/libs/ui/src/components/atoms/feedback/ProgressCircle.tsx +40 -0
  141. package/templates/hono-fullstack/libs/ui/src/components/atoms/feedback/Skeleton.tsx +37 -0
  142. package/templates/hono-fullstack/libs/ui/src/components/atoms/feedback/Spinner.tsx +7 -0
  143. package/templates/hono-fullstack/libs/ui/src/components/atoms/feedback/Toast.tsx +99 -0
  144. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Checkbox.tsx +95 -0
  145. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/ColorPicker.tsx +148 -0
  146. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Editable.tsx +44 -0
  147. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Field.tsx +36 -0
  148. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Fieldset.tsx +34 -0
  149. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/FileUpload.tsx +143 -0
  150. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Input.tsx +7 -0
  151. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/InputAddon.tsx +7 -0
  152. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/InputGroup.tsx +61 -0
  153. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/NativeSelect.tsx +81 -0
  154. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/NumberInput.tsx +63 -0
  155. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/PasswordInput.tsx +76 -0
  156. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/PinInput.tsx +36 -0
  157. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/RadioCard.tsx +96 -0
  158. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/RadioGroup.tsx +61 -0
  159. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/RatingGroup.tsx +106 -0
  160. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/SegmentGroup.tsx +68 -0
  161. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Slider.tsx +87 -0
  162. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Switch.tsx +74 -0
  163. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/TagsInput.tsx +77 -0
  164. package/templates/hono-fullstack/libs/ui/src/components/atoms/forms/Textarea.tsx +7 -0
  165. package/templates/hono-fullstack/libs/ui/src/components/atoms/index.ts +98 -0
  166. package/templates/hono-fullstack/libs/ui/src/components/atoms/internal/AbsoluteCenter.tsx +7 -0
  167. package/templates/hono-fullstack/libs/ui/src/components/atoms/internal/Loader.tsx +69 -0
  168. package/templates/hono-fullstack/libs/ui/src/components/atoms/internal/Span.tsx +5 -0
  169. package/templates/hono-fullstack/libs/ui/src/components/atoms/internal/create-layout.ts +18 -0
  170. package/templates/hono-fullstack/libs/ui/src/components/atoms/layout/Float.tsx +7 -0
  171. package/templates/hono-fullstack/libs/ui/src/components/atoms/layout/Grid.tsx +17 -0
  172. package/templates/hono-fullstack/libs/ui/src/components/atoms/layout/Group.tsx +7 -0
  173. package/templates/hono-fullstack/libs/ui/src/components/atoms/layout/ScrollArea.tsx +46 -0
  174. package/templates/hono-fullstack/libs/ui/src/components/atoms/layout/Separator.tsx +26 -0
  175. package/templates/hono-fullstack/libs/ui/src/components/atoms/layout/Stack.tsx +54 -0
  176. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/Dialog.tsx +69 -0
  177. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/Drawer.tsx +49 -0
  178. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/HoverCard.tsx +37 -0
  179. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/Menu.tsx +74 -0
  180. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/OverlayManager.test.ts +124 -0
  181. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/OverlayManager.tsx +189 -0
  182. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/Popover.tsx +57 -0
  183. package/templates/hono-fullstack/libs/ui/src/components/atoms/overlays/Tooltip.tsx +37 -0
  184. package/templates/hono-fullstack/libs/ui/src/components/atoms/typography/Heading.tsx +6 -0
  185. package/templates/hono-fullstack/libs/ui/src/components/atoms/typography/Link.tsx +7 -0
  186. package/templates/hono-fullstack/libs/ui/src/components/atoms/typography/LinkOverlay.tsx +21 -0
  187. package/templates/hono-fullstack/libs/ui/src/components/atoms/typography/Text.tsx +6 -0
  188. package/templates/hono-fullstack/libs/ui/src/components/atoms/utilities/VisuallyHidden.tsx +13 -0
  189. package/templates/hono-fullstack/libs/ui/src/hooks.ts +242 -0
  190. package/templates/hono-fullstack/libs/ui/src/index.ts +19 -0
  191. package/templates/hono-fullstack/libs/ui/src/theme/animation-styles.ts +50 -0
  192. package/templates/hono-fullstack/libs/ui/src/theme/breakpoints.ts +7 -0
  193. package/templates/hono-fullstack/libs/ui/src/theme/conditions.ts +12 -0
  194. package/templates/hono-fullstack/libs/ui/src/theme/containers.ts +16 -0
  195. package/templates/hono-fullstack/libs/ui/src/theme/global-css.ts +12 -0
  196. package/templates/hono-fullstack/libs/ui/src/theme/keyframes.ts +157 -0
  197. package/templates/hono-fullstack/libs/ui/src/theme/layer-styles.ts +11 -0
  198. package/templates/hono-fullstack/libs/ui/src/theme/patterns/grid.ts +51 -0
  199. package/templates/hono-fullstack/libs/ui/src/theme/patterns/index.ts +60 -0
  200. package/templates/hono-fullstack/libs/ui/src/theme/patterns/stack.ts +46 -0
  201. package/templates/hono-fullstack/libs/ui/src/theme/recipes/absolute-center.ts +38 -0
  202. package/templates/hono-fullstack/libs/ui/src/theme/recipes/accordion.ts +68 -0
  203. package/templates/hono-fullstack/libs/ui/src/theme/recipes/alert.ts +83 -0
  204. package/templates/hono-fullstack/libs/ui/src/theme/recipes/avatar.ts +155 -0
  205. package/templates/hono-fullstack/libs/ui/src/theme/recipes/badge.ts +67 -0
  206. package/templates/hono-fullstack/libs/ui/src/theme/recipes/breadcrumb.ts +69 -0
  207. package/templates/hono-fullstack/libs/ui/src/theme/recipes/button.ts +149 -0
  208. package/templates/hono-fullstack/libs/ui/src/theme/recipes/card.ts +36 -0
  209. package/templates/hono-fullstack/libs/ui/src/theme/recipes/checkbox.ts +120 -0
  210. package/templates/hono-fullstack/libs/ui/src/theme/recipes/clipboard.ts +22 -0
  211. package/templates/hono-fullstack/libs/ui/src/theme/recipes/collapsible.ts +26 -0
  212. package/templates/hono-fullstack/libs/ui/src/theme/recipes/color-picker.ts +299 -0
  213. package/templates/hono-fullstack/libs/ui/src/theme/recipes/combobox.ts +141 -0
  214. package/templates/hono-fullstack/libs/ui/src/theme/recipes/date-picker.ts +302 -0
  215. package/templates/hono-fullstack/libs/ui/src/theme/recipes/dialog.ts +191 -0
  216. package/templates/hono-fullstack/libs/ui/src/theme/recipes/drawer.ts +170 -0
  217. package/templates/hono-fullstack/libs/ui/src/theme/recipes/editable.ts +64 -0
  218. package/templates/hono-fullstack/libs/ui/src/theme/recipes/field.ts +41 -0
  219. package/templates/hono-fullstack/libs/ui/src/theme/recipes/fieldset.ts +47 -0
  220. package/templates/hono-fullstack/libs/ui/src/theme/recipes/file-upload.ts +86 -0
  221. package/templates/hono-fullstack/libs/ui/src/theme/recipes/group.ts +78 -0
  222. package/templates/hono-fullstack/libs/ui/src/theme/recipes/heading.ts +24 -0
  223. package/templates/hono-fullstack/libs/ui/src/theme/recipes/hover-card.ts +47 -0
  224. package/templates/hono-fullstack/libs/ui/src/theme/recipes/icon.ts +25 -0
  225. package/templates/hono-fullstack/libs/ui/src/theme/recipes/index.ts +120 -0
  226. package/templates/hono-fullstack/libs/ui/src/theme/recipes/input-addon.ts +51 -0
  227. package/templates/hono-fullstack/libs/ui/src/theme/recipes/input-group.ts +77 -0
  228. package/templates/hono-fullstack/libs/ui/src/theme/recipes/input.ts +99 -0
  229. package/templates/hono-fullstack/libs/ui/src/theme/recipes/link.ts +36 -0
  230. package/templates/hono-fullstack/libs/ui/src/theme/recipes/menu.ts +114 -0
  231. package/templates/hono-fullstack/libs/ui/src/theme/recipes/native-select.ts +92 -0
  232. package/templates/hono-fullstack/libs/ui/src/theme/recipes/number-input.ts +91 -0
  233. package/templates/hono-fullstack/libs/ui/src/theme/recipes/pagination.ts +9 -0
  234. package/templates/hono-fullstack/libs/ui/src/theme/recipes/pin-input.ts +33 -0
  235. package/templates/hono-fullstack/libs/ui/src/theme/recipes/popover.ts +78 -0
  236. package/templates/hono-fullstack/libs/ui/src/theme/recipes/progress-circle.ts +50 -0
  237. package/templates/hono-fullstack/libs/ui/src/theme/recipes/progress.ts +112 -0
  238. package/templates/hono-fullstack/libs/ui/src/theme/recipes/radio-card.ts +223 -0
  239. package/templates/hono-fullstack/libs/ui/src/theme/recipes/radio-group.ts +78 -0
  240. package/templates/hono-fullstack/libs/ui/src/theme/recipes/rating-group.ts +98 -0
  241. package/templates/hono-fullstack/libs/ui/src/theme/recipes/scroll-area.ts +119 -0
  242. package/templates/hono-fullstack/libs/ui/src/theme/recipes/segment-group.ts +162 -0
  243. package/templates/hono-fullstack/libs/ui/src/theme/recipes/select.ts +157 -0
  244. package/templates/hono-fullstack/libs/ui/src/theme/recipes/separator.ts +25 -0
  245. package/templates/hono-fullstack/libs/ui/src/theme/recipes/skeleton.ts +65 -0
  246. package/templates/hono-fullstack/libs/ui/src/theme/recipes/slider.ts +164 -0
  247. package/templates/hono-fullstack/libs/ui/src/theme/recipes/spinner.ts +34 -0
  248. package/templates/hono-fullstack/libs/ui/src/theme/recipes/steps.ts +162 -0
  249. package/templates/hono-fullstack/libs/ui/src/theme/recipes/switch.ts +150 -0
  250. package/templates/hono-fullstack/libs/ui/src/theme/recipes/table.ts +150 -0
  251. package/templates/hono-fullstack/libs/ui/src/theme/recipes/tabs.ts +128 -0
  252. package/templates/hono-fullstack/libs/ui/src/theme/recipes/tag.ts +114 -0
  253. package/templates/hono-fullstack/libs/ui/src/theme/recipes/tags-input.ts +201 -0
  254. package/templates/hono-fullstack/libs/ui/src/theme/recipes/text.ts +7 -0
  255. package/templates/hono-fullstack/libs/ui/src/theme/recipes/textarea.ts +90 -0
  256. package/templates/hono-fullstack/libs/ui/src/theme/recipes/timeline.ts +137 -0
  257. package/templates/hono-fullstack/libs/ui/src/theme/recipes/toast.ts +52 -0
  258. package/templates/hono-fullstack/libs/ui/src/theme/recipes/tooltip.ts +44 -0
  259. package/templates/hono-fullstack/libs/ui/src/theme/recipes/tree-view.ts +200 -0
  260. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/colors/amber.ts +91 -0
  261. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/colors/gray.ts +103 -0
  262. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/colors/green.ts +88 -0
  263. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/colors/index.ts +14 -0
  264. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/colors/lime.ts +91 -0
  265. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/colors/red.ts +88 -0
  266. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/index.ts +8 -0
  267. package/templates/hono-fullstack/libs/ui/src/theme/semanticTokens/shadows.ts +46 -0
  268. package/templates/hono-fullstack/libs/ui/src/theme/text-styles.ts +82 -0
  269. package/templates/hono-fullstack/libs/ui/src/theme/tokens/animations.ts +8 -0
  270. package/templates/hono-fullstack/libs/ui/src/theme/tokens/aspect-ratio.ts +6 -0
  271. package/templates/hono-fullstack/libs/ui/src/theme/tokens/borders.ts +5 -0
  272. package/templates/hono-fullstack/libs/ui/src/theme/tokens/colors.ts +35 -0
  273. package/templates/hono-fullstack/libs/ui/src/theme/tokens/durations.ts +11 -0
  274. package/templates/hono-fullstack/libs/ui/src/theme/tokens/easings.ts +9 -0
  275. package/templates/hono-fullstack/libs/ui/src/theme/tokens/index.ts +42 -0
  276. package/templates/hono-fullstack/libs/ui/src/theme/tokens/radii.ts +13 -0
  277. package/templates/hono-fullstack/libs/ui/src/theme/tokens/sizes.ts +27 -0
  278. package/templates/hono-fullstack/libs/ui/src/theme/tokens/spacing.ts +41 -0
  279. package/templates/hono-fullstack/libs/ui/src/theme/tokens/typography.ts +86 -0
  280. package/templates/hono-fullstack/libs/ui/src/theme/tokens/z-index.ts +43 -0
  281. package/templates/hono-fullstack/libs/ui/stories/README.md +107 -0
  282. package/templates/hono-fullstack/libs/ui/stories/actions/Button.stories.tsx +260 -0
  283. package/templates/hono-fullstack/libs/ui/stories/actions/Clipboard.stories.tsx +87 -0
  284. package/templates/hono-fullstack/libs/ui/stories/actions/IconButton.stories.tsx +33 -0
  285. package/templates/hono-fullstack/libs/ui/stories/collections/Combobox.stories.tsx +334 -0
  286. package/templates/hono-fullstack/libs/ui/stories/collections/Select.stories.tsx +342 -0
  287. package/templates/hono-fullstack/libs/ui/stories/collections/TreeView.stories.tsx +252 -0
  288. package/templates/hono-fullstack/libs/ui/stories/color/ColorPicker.stories.tsx +217 -0
  289. package/templates/hono-fullstack/libs/ui/stories/date/DatePicker.stories.tsx +302 -0
  290. package/templates/hono-fullstack/libs/ui/stories/disclosure/Accordion.stories.tsx +105 -0
  291. package/templates/hono-fullstack/libs/ui/stories/disclosure/Collapsible.stories.tsx +55 -0
  292. package/templates/hono-fullstack/libs/ui/stories/disclosure/Steps.stories.tsx +208 -0
  293. package/templates/hono-fullstack/libs/ui/stories/disclosure/Tabs.stories.tsx +176 -0
  294. package/templates/hono-fullstack/libs/ui/stories/display/Avatar.stories.tsx +108 -0
  295. package/templates/hono-fullstack/libs/ui/stories/display/Badge.stories.tsx +90 -0
  296. package/templates/hono-fullstack/libs/ui/stories/display/Card.stories.tsx +121 -0
  297. package/templates/hono-fullstack/libs/ui/stories/display/Heading.stories.tsx +62 -0
  298. package/templates/hono-fullstack/libs/ui/stories/display/Icon.stories.tsx +51 -0
  299. package/templates/hono-fullstack/libs/ui/stories/display/Table.stories.tsx +222 -0
  300. package/templates/hono-fullstack/libs/ui/stories/display/Tag.stories.tsx +168 -0
  301. package/templates/hono-fullstack/libs/ui/stories/display/Text.stories.tsx +32 -0
  302. package/templates/hono-fullstack/libs/ui/stories/display/Timeline.stories.tsx +241 -0
  303. package/templates/hono-fullstack/libs/ui/stories/feedback/Alert.stories.tsx +122 -0
  304. package/templates/hono-fullstack/libs/ui/stories/feedback/Progress.stories.tsx +163 -0
  305. package/templates/hono-fullstack/libs/ui/stories/feedback/ProgressCircle.stories.tsx +176 -0
  306. package/templates/hono-fullstack/libs/ui/stories/feedback/Skeleton.stories.tsx +75 -0
  307. package/templates/hono-fullstack/libs/ui/stories/feedback/Spinner.stories.tsx +49 -0
  308. package/templates/hono-fullstack/libs/ui/stories/feedback/Toast.stories.tsx +145 -0
  309. package/templates/hono-fullstack/libs/ui/stories/forms/Checkbox.stories.tsx +281 -0
  310. package/templates/hono-fullstack/libs/ui/stories/forms/Editable.stories.tsx +94 -0
  311. package/templates/hono-fullstack/libs/ui/stories/forms/Field.stories.tsx +72 -0
  312. package/templates/hono-fullstack/libs/ui/stories/forms/Fieldset.stories.tsx +109 -0
  313. package/templates/hono-fullstack/libs/ui/stories/forms/FileUpload.stories.tsx +115 -0
  314. package/templates/hono-fullstack/libs/ui/stories/forms/Form.stories.tsx +120 -0
  315. package/templates/hono-fullstack/libs/ui/stories/forms/Input.stories.tsx +155 -0
  316. package/templates/hono-fullstack/libs/ui/stories/forms/InputGroup.stories.tsx +79 -0
  317. package/templates/hono-fullstack/libs/ui/stories/forms/NativeSelect.stories.tsx +160 -0
  318. package/templates/hono-fullstack/libs/ui/stories/forms/NumberInput.stories.tsx +149 -0
  319. package/templates/hono-fullstack/libs/ui/stories/forms/PasswordInput.stories.tsx +141 -0
  320. package/templates/hono-fullstack/libs/ui/stories/forms/PinInput.stories.tsx +155 -0
  321. package/templates/hono-fullstack/libs/ui/stories/forms/RadioCard.stories.tsx +265 -0
  322. package/templates/hono-fullstack/libs/ui/stories/forms/RadioGroup.stories.tsx +109 -0
  323. package/templates/hono-fullstack/libs/ui/stories/forms/RatingGroup.stories.tsx +123 -0
  324. package/templates/hono-fullstack/libs/ui/stories/forms/SegmentGroup.stories.tsx +130 -0
  325. package/templates/hono-fullstack/libs/ui/stories/forms/Slider.stories.tsx +190 -0
  326. package/templates/hono-fullstack/libs/ui/stories/forms/Switch.stories.tsx +124 -0
  327. package/templates/hono-fullstack/libs/ui/stories/forms/TagsInput.stories.tsx +154 -0
  328. package/templates/hono-fullstack/libs/ui/stories/forms/Textarea.stories.tsx +148 -0
  329. package/templates/hono-fullstack/libs/ui/stories/layout/Grid.stories.tsx +60 -0
  330. package/templates/hono-fullstack/libs/ui/stories/layout/Positioning.stories.tsx +90 -0
  331. package/templates/hono-fullstack/libs/ui/stories/layout/ScrollArea.stories.tsx +68 -0
  332. package/templates/hono-fullstack/libs/ui/stories/layout/Stack.stories.tsx +87 -0
  333. package/templates/hono-fullstack/libs/ui/stories/navigation/Breadcrumb.stories.tsx +104 -0
  334. package/templates/hono-fullstack/libs/ui/stories/navigation/Link.stories.tsx +62 -0
  335. package/templates/hono-fullstack/libs/ui/stories/navigation/LinkBox.stories.tsx +45 -0
  336. package/templates/hono-fullstack/libs/ui/stories/navigation/Pagination.stories.tsx +74 -0
  337. package/templates/hono-fullstack/libs/ui/stories/overlays/Dialog.stories.tsx +255 -0
  338. package/templates/hono-fullstack/libs/ui/stories/overlays/Drawer.stories.tsx +114 -0
  339. package/templates/hono-fullstack/libs/ui/stories/overlays/HoverCard.stories.tsx +47 -0
  340. package/templates/hono-fullstack/libs/ui/stories/overlays/Menu.stories.tsx +133 -0
  341. package/templates/hono-fullstack/libs/ui/stories/overlays/OverlayManager.stories.tsx +206 -0
  342. package/templates/hono-fullstack/libs/ui/stories/overlays/Popover.stories.tsx +73 -0
  343. package/templates/hono-fullstack/libs/ui/stories/overlays/Tooltip.stories.tsx +114 -0
  344. package/templates/hono-fullstack/libs/ui/stories/tsconfig.json +14 -0
  345. package/templates/hono-fullstack/libs/ui/tsconfig.build.json +5 -0
  346. package/templates/hono-fullstack/libs/ui/tsconfig.json +13 -0
  347. package/templates/hono-fullstack/libs/ui/turbo.json +28 -0
  348. package/templates/hono-fullstack/libs/ui/vite.config.ts +33 -0
  349. package/templates/hono-fullstack/oyo.config.json +30 -4
  350. package/templates/hono-fullstack/package.json +1 -0
  351. package/templates/hono-fullstack/pnpm-workspace.yaml +20 -10
  352. package/templates/hono-fullstack/turbo.json +10 -0
  353. package/templates/hono-server/.agents/skills/{grilling → ask-grilling}/SKILL.md +1 -1
  354. package/templates/hono-server/.agents/skills/build-api-and-interface-design/SKILL.md +369 -0
  355. package/templates/hono-server/.agents/skills/build-context-engineering/SKILL.md +353 -0
  356. package/templates/hono-server/.agents/skills/build-incremental-implementation/SKILL.md +249 -0
  357. package/templates/hono-server/.agents/skills/build-observability-and-instrumentation/SKILL.md +239 -0
  358. package/templates/hono-server/.agents/skills/plan-planning-and-task-breakdown/SKILL.md +257 -0
  359. package/templates/hono-server/.agents/skills/{prototype → plan-prototype}/LOGIC.md +1 -1
  360. package/templates/hono-server/.agents/skills/{prototype → plan-prototype}/SKILL.md +2 -2
  361. package/templates/{monorepo/.agents/skills/prototype → hono-server/.agents/skills/plan-prototype}/UI.md +2 -2
  362. package/templates/{hono-fullstack/.agents/skills/research → hono-server/.agents/skills/plan-research}/SKILL.md +2 -2
  363. package/templates/hono-server/.agents/skills/plan-using-agent-skills/SKILL.md +185 -0
  364. package/templates/{hono-fullstack/.agents/skills/wayfinder → hono-server/.agents/skills/plan-wayfinder}/SKILL.md +43 -29
  365. package/templates/hono-server/.agents/skills/review-code-review-and-quality/SKILL.md +400 -0
  366. package/templates/hono-server/.agents/skills/review-doubt-driven-development/SKILL.md +244 -0
  367. package/templates/hono-server/.agents/skills/review-security-and-hardening/SKILL.md +216 -0
  368. package/templates/hono-server/.agents/skills/review-security-and-hardening/references/hardening-patterns.md +331 -0
  369. package/templates/hono-server/.agents/skills/ship-ci-cd-and-automation/SKILL.md +393 -0
  370. package/templates/hono-server/.agents/skills/ship-deprecation-and-migration/SKILL.md +252 -0
  371. package/templates/hono-server/.agents/skills/ship-documentation-and-adrs/SKILL.md +298 -0
  372. package/templates/hono-server/.agents/skills/ship-git-workflow-and-versioning/SKILL.md +355 -0
  373. package/templates/hono-server/.agents/skills/ship-shipping-and-launch/SKILL.md +336 -0
  374. package/templates/hono-server/.agents/skills/simplify-code-simplification/SKILL.md +332 -0
  375. package/templates/hono-server/.agents/skills/simplify-performance-optimization/SKILL.md +268 -0
  376. package/templates/hono-server/.agents/skills/simplify-performance-optimization/references/optimization-patterns.md +250 -0
  377. package/templates/hono-server/.agents/skills/spec-constraint-driven-development/SKILL.md +318 -0
  378. package/templates/hono-server/.agents/skills/spec-constraint-driven-development/references/floor-guard.md +182 -0
  379. package/templates/hono-server/.agents/skills/spec-constraint-driven-development/scripts/quality-gate.mjs +45 -0
  380. package/templates/hono-server/.agents/skills/spec-driven-development/SKILL.md +261 -0
  381. package/templates/hono-server/.agents/skills/test-browser-testing-with-devtools/SKILL.md +319 -0
  382. package/templates/hono-server/.agents/skills/test-debugging-and-error-recovery/SKILL.md +300 -0
  383. package/templates/hono-server/.agents/skills/test-driven-development/SKILL.md +400 -0
  384. package/templates/hono-server/.codegraph/.gitignore +5 -0
  385. package/templates/hono-server/AGENTS.md +9 -20
  386. package/templates/hono-server/README.md +9 -1
  387. package/templates/hono-server/_gitignore +1 -0
  388. package/templates/hono-server/apps/server/package.json +7 -2
  389. package/templates/hono-server/apps/server/src/adapters/cloudflare/entry.ts +4 -30
  390. package/templates/hono-server/apps/server/src/adapters/nodejs/bootstrap.ts +20 -12
  391. package/templates/hono-server/apps/server/src/adapters/nodejs/entry.ts +7 -57
  392. package/templates/hono-server/apps/server/src/app.ts +37 -21
  393. package/templates/hono-server/apps/server/src/config.ts +1 -1
  394. package/templates/hono-server/apps/server/src/di-container.ts +51 -0
  395. package/templates/hono-server/apps/server/src/infra/logger/getter.ts +1 -1
  396. package/templates/hono-server/apps/server/src/infra/logger/pino.ts +21 -34
  397. package/templates/hono-server/apps/server/src/infra/work-runner/errors.ts +22 -0
  398. package/templates/hono-server/apps/server/src/infra/work-runner/pass-through/runner.ts +28 -22
  399. package/templates/hono-server/apps/server/src/infra/work-runner/piscina/runner.ts +11 -34
  400. package/templates/{hono-fullstack/apps/server/src/infra/work-runner/example → hono-server/apps/server/src/infra/work-runner/piscina}/worker-entry.ts +6 -2
  401. package/templates/hono-server/apps/server/src/infra/work-runner/types.ts +2 -16
  402. package/templates/hono-server/apps/server/src/infra/work-runner/utils/business-error.ts +10 -5
  403. package/templates/hono-server/apps/server/src/infra/work-runner/utils/message.ts +5 -17
  404. package/templates/hono-server/apps/server/src/middlewares/cors.ts +16 -22
  405. package/templates/hono-server/apps/server/src/middlewares/logger.ts +34 -0
  406. package/templates/hono-server/apps/server/src/modules/example/module.ts +8 -0
  407. package/templates/hono-server/apps/server/src/modules/example/queries.ts +8 -0
  408. package/templates/hono-server/apps/server/src/modules/example/routes.ts +74 -68
  409. package/templates/hono-server/apps/server/src/modules/example/service.test.ts +53 -0
  410. package/templates/hono-server/apps/server/src/modules/example/service.ts +54 -0
  411. package/templates/hono-server/apps/server/src/modules/example/types.ts +12 -0
  412. package/templates/hono-server/apps/server/src/modules/example/work-task/tasks.test.ts +9 -35
  413. package/templates/hono-server/apps/server/src/modules/example/work-task/tasks.ts +15 -46
  414. package/templates/hono-server/apps/server/src/shared/errors/defs/index.ts +6 -1
  415. package/templates/hono-server/apps/server/src/shared/errors/handler.ts +1 -1
  416. package/templates/hono-server/apps/server/src/shared/network/openapi/index.ts +1 -1
  417. package/templates/hono-server/apps/server/src/shared/types/app.ts +51 -0
  418. package/templates/hono-server/apps/server/src/shared/types/db.ts +126 -0
  419. package/templates/hono-server/apps/server/src/shared/utils/data-access/check.ts +19 -0
  420. package/templates/hono-server/apps/server/src/shared/utils/data-access/model.ts +47 -0
  421. package/templates/hono-server/apps/server/src/shared/utils/data-access/params.ts +105 -0
  422. package/templates/hono-server/apps/server/src/shared/utils/data-access/query.test.ts +139 -0
  423. package/templates/hono-server/apps/server/src/shared/utils/data-access/query.ts +236 -0
  424. package/templates/hono-server/apps/server/vite.config.ts +2 -2
  425. package/templates/hono-server/apps/server/wrangler.jsonc +1 -1
  426. package/templates/hono-server/docker/README.md +1 -1
  427. package/templates/hono-server/envs/.env.example.sqlite-d1 +1 -0
  428. package/templates/hono-server/libs/db/drizzle-kit/sqlite-d1.config.ts +29 -10
  429. package/templates/hono-server/libs/db/package.json +1 -0
  430. package/templates/hono-server/libs/db/src/dialects/sqlite/schema/columns.ts +1 -1
  431. package/templates/hono-server/libs/db/src/dialects/sqlite/schema/modules/examples/examples.ts +6 -3
  432. package/templates/hono-server/libs/db/src/dialects/sqlite/schema/vo.ts +7 -1
  433. package/templates/hono-server/libs/definition/README.md +81 -0
  434. package/templates/hono-server/libs/definition/package.json +3 -1
  435. package/templates/hono-server/libs/definition/src/constants/index.ts +1 -0
  436. package/templates/hono-server/libs/definition/src/constants/pagination.ts +3 -0
  437. package/templates/hono-server/libs/definition/src/modules/common-contracts.ts +24 -0
  438. package/templates/hono-server/libs/definition/src/modules/example/contracts.ts +34 -0
  439. package/templates/hono-server/libs/definition/src/modules/example/index.ts +1 -16
  440. package/templates/hono-server/libs/definition/src/modules/index.ts +2 -0
  441. package/templates/hono-server/libs/definition/src/modules/vo-generated-types.ts +12 -0
  442. package/templates/hono-server/oyo.config.json +30 -4
  443. package/templates/hono-server/package.json +1 -0
  444. package/templates/hono-server/pnpm-workspace.yaml +9 -7
  445. package/templates/hono-server/turbo.json +10 -0
  446. package/templates/{hono-fullstack/.agents/skills/grilling → monorepo/.agents/skills/ask-grilling}/SKILL.md +1 -1
  447. package/templates/monorepo/.agents/skills/build-api-and-interface-design/SKILL.md +369 -0
  448. package/templates/monorepo/.agents/skills/build-context-engineering/SKILL.md +353 -0
  449. package/templates/monorepo/.agents/skills/build-incremental-implementation/SKILL.md +249 -0
  450. package/templates/monorepo/.agents/skills/build-observability-and-instrumentation/SKILL.md +239 -0
  451. package/templates/monorepo/.agents/skills/plan-planning-and-task-breakdown/SKILL.md +257 -0
  452. package/templates/{hono-fullstack/.agents/skills/prototype → monorepo/.agents/skills/plan-prototype}/LOGIC.md +1 -1
  453. package/templates/{hono-fullstack/.agents/skills/prototype → monorepo/.agents/skills/plan-prototype}/SKILL.md +2 -2
  454. package/templates/{hono-server/.agents/skills/prototype → monorepo/.agents/skills/plan-prototype}/UI.md +2 -2
  455. package/templates/{hono-server/.agents/skills/research → monorepo/.agents/skills/plan-research}/SKILL.md +2 -2
  456. package/templates/monorepo/.agents/skills/plan-using-agent-skills/SKILL.md +185 -0
  457. package/templates/{hono-server/.agents/skills/wayfinder → monorepo/.agents/skills/plan-wayfinder}/SKILL.md +43 -29
  458. package/templates/monorepo/.agents/skills/review-code-review-and-quality/SKILL.md +400 -0
  459. package/templates/monorepo/.agents/skills/review-doubt-driven-development/SKILL.md +244 -0
  460. package/templates/monorepo/.agents/skills/review-security-and-hardening/SKILL.md +216 -0
  461. package/templates/monorepo/.agents/skills/review-security-and-hardening/references/hardening-patterns.md +331 -0
  462. package/templates/monorepo/.agents/skills/ship-ci-cd-and-automation/SKILL.md +393 -0
  463. package/templates/monorepo/.agents/skills/ship-deprecation-and-migration/SKILL.md +252 -0
  464. package/templates/monorepo/.agents/skills/ship-documentation-and-adrs/SKILL.md +298 -0
  465. package/templates/monorepo/.agents/skills/ship-git-workflow-and-versioning/SKILL.md +355 -0
  466. package/templates/monorepo/.agents/skills/ship-shipping-and-launch/SKILL.md +336 -0
  467. package/templates/monorepo/.agents/skills/simplify-code-simplification/SKILL.md +332 -0
  468. package/templates/monorepo/.agents/skills/simplify-performance-optimization/SKILL.md +268 -0
  469. package/templates/monorepo/.agents/skills/simplify-performance-optimization/references/optimization-patterns.md +250 -0
  470. package/templates/monorepo/.agents/skills/spec-constraint-driven-development/SKILL.md +318 -0
  471. package/templates/monorepo/.agents/skills/spec-constraint-driven-development/references/floor-guard.md +182 -0
  472. package/templates/monorepo/.agents/skills/spec-constraint-driven-development/scripts/quality-gate.mjs +45 -0
  473. package/templates/monorepo/.agents/skills/spec-driven-development/SKILL.md +261 -0
  474. package/templates/monorepo/.agents/skills/test-browser-testing-with-devtools/SKILL.md +319 -0
  475. package/templates/monorepo/.agents/skills/test-debugging-and-error-recovery/SKILL.md +300 -0
  476. package/templates/monorepo/.agents/skills/test-driven-development/SKILL.md +400 -0
  477. package/templates/monorepo/.codegraph/.gitignore +5 -0
  478. package/templates/monorepo/AGENTS.md +9 -20
  479. package/templates/monorepo/_gitignore +1 -0
  480. package/templates/monorepo/oyo.config.json +6 -4
  481. package/templates/monorepo/pnpm-workspace.yaml +4 -4
  482. package/templates/monorepo/turbo.json +10 -0
  483. package/templates/hono-fullstack/.agents/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
  484. package/templates/hono-fullstack/.agents/skills/ask-matt/SKILL.md +0 -90
  485. package/templates/hono-fullstack/.agents/skills/ask-matt/agents/openai.yaml +0 -5
  486. package/templates/hono-fullstack/.agents/skills/code-review/SKILL.md +0 -87
  487. package/templates/hono-fullstack/.agents/skills/code-review/agents/openai.yaml +0 -3
  488. package/templates/hono-fullstack/.agents/skills/codebase-design/DEEPENING.md +0 -37
  489. package/templates/hono-fullstack/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  490. package/templates/hono-fullstack/.agents/skills/codebase-design/SKILL.md +0 -114
  491. package/templates/hono-fullstack/.agents/skills/codebase-design/agents/openai.yaml +0 -3
  492. package/templates/hono-fullstack/.agents/skills/confirm-requirements/SKILL.md +0 -25
  493. package/templates/hono-fullstack/.agents/skills/diagnosing-bugs/SKILL.md +0 -140
  494. package/templates/hono-fullstack/.agents/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  495. package/templates/hono-fullstack/.agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -44
  496. package/templates/hono-fullstack/.agents/skills/domain-modeling/ADR-FORMAT.md +0 -47
  497. package/templates/hono-fullstack/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  498. package/templates/hono-fullstack/.agents/skills/domain-modeling/SKILL.md +0 -74
  499. package/templates/hono-fullstack/.agents/skills/domain-modeling/agents/openai.yaml +0 -3
  500. package/templates/hono-fullstack/.agents/skills/grill-me/SKILL.md +0 -7
  501. package/templates/hono-fullstack/.agents/skills/grill-me/agents/openai.yaml +0 -5
  502. package/templates/hono-fullstack/.agents/skills/implement/SKILL.md +0 -15
  503. package/templates/hono-fullstack/.agents/skills/implement/agents/openai.yaml +0 -5
  504. package/templates/hono-fullstack/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
  505. package/templates/hono-fullstack/.agents/skills/improve-codebase-architecture/SKILL.md +0 -71
  506. package/templates/hono-fullstack/.agents/skills/improve-codebase-architecture/agents/openai.yaml +0 -5
  507. package/templates/hono-fullstack/.agents/skills/resolving-merge-conflicts/SKILL.md +0 -14
  508. package/templates/hono-fullstack/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +0 -3
  509. package/templates/hono-fullstack/.agents/skills/scoped-code-review/SKILL.md +0 -113
  510. package/templates/hono-fullstack/.agents/skills/setup-matt-pocock-skills/SKILL.md +0 -116
  511. package/templates/hono-fullstack/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +0 -5
  512. package/templates/hono-fullstack/.agents/skills/setup-matt-pocock-skills/domain.md +0 -51
  513. package/templates/hono-fullstack/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
  514. package/templates/hono-fullstack/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
  515. package/templates/hono-fullstack/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -30
  516. package/templates/hono-fullstack/.agents/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
  517. package/templates/hono-fullstack/.agents/skills/tdd/SKILL.md +0 -38
  518. package/templates/hono-fullstack/.agents/skills/tdd/agents/openai.yaml +0 -3
  519. package/templates/hono-fullstack/.agents/skills/tdd/mocking.md +0 -59
  520. package/templates/hono-fullstack/.agents/skills/tdd/tests.md +0 -77
  521. package/templates/hono-fullstack/.agents/skills/teach/GLOSSARY-FORMAT.md +0 -35
  522. package/templates/hono-fullstack/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
  523. package/templates/hono-fullstack/.agents/skills/teach/MISSION-FORMAT.md +0 -31
  524. package/templates/hono-fullstack/.agents/skills/teach/RESOURCES-FORMAT.md +0 -32
  525. package/templates/hono-fullstack/.agents/skills/teach/SKILL.md +0 -140
  526. package/templates/hono-fullstack/.agents/skills/teach/agents/openai.yaml +0 -5
  527. package/templates/hono-fullstack/.agents/skills/to-questionnaire/SKILL.md +0 -53
  528. package/templates/hono-fullstack/.agents/skills/to-questionnaire/agents/openai.yaml +0 -5
  529. package/templates/hono-fullstack/.agents/skills/triage/AGENT-BRIEF.md +0 -207
  530. package/templates/hono-fullstack/.agents/skills/triage/OUT-OF-SCOPE.md +0 -105
  531. package/templates/hono-fullstack/.agents/skills/triage/SKILL.md +0 -112
  532. package/templates/hono-fullstack/.agents/skills/triage/agents/openai.yaml +0 -5
  533. package/templates/hono-fullstack/.agents/skills/wait-what/SKILL.md +0 -7
  534. package/templates/hono-fullstack/.agents/skills/wait-what/agents/openai.yaml +0 -5
  535. package/templates/hono-fullstack/.agents/skills/wizard/SKILL.md +0 -44
  536. package/templates/hono-fullstack/.agents/skills/wizard/agents/openai.yaml +0 -3
  537. package/templates/hono-fullstack/.agents/skills/wizard/template.sh +0 -204
  538. package/templates/hono-fullstack/.agents/skills/writing-for-agents/SKILL-MECHANICS.md +0 -22
  539. package/templates/hono-fullstack/.agents/skills/writing-for-agents/SKILL.md +0 -81
  540. package/templates/hono-fullstack/.agents/skills/writing-for-agents/agents/openai.yaml +0 -3
  541. package/templates/hono-fullstack/apps/server/src/modules/example/contracts.ts +0 -9
  542. package/templates/hono-fullstack/apps/server/src/shared/app/types.ts +0 -44
  543. package/templates/hono-fullstack/apps/stack/frontend/styles.css +0 -23
  544. package/templates/hono-fullstack/docs/agents/domain.md +0 -41
  545. package/templates/hono-fullstack/docs/agents/issue-tracker.md +0 -30
  546. package/templates/hono-fullstack/docs/agents/triage-labels.md +0 -15
  547. package/templates/hono-server/.agents/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
  548. package/templates/hono-server/.agents/skills/ask-matt/SKILL.md +0 -90
  549. package/templates/hono-server/.agents/skills/ask-matt/agents/openai.yaml +0 -5
  550. package/templates/hono-server/.agents/skills/code-review/SKILL.md +0 -87
  551. package/templates/hono-server/.agents/skills/code-review/agents/openai.yaml +0 -3
  552. package/templates/hono-server/.agents/skills/codebase-design/DEEPENING.md +0 -37
  553. package/templates/hono-server/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  554. package/templates/hono-server/.agents/skills/codebase-design/SKILL.md +0 -114
  555. package/templates/hono-server/.agents/skills/codebase-design/agents/openai.yaml +0 -3
  556. package/templates/hono-server/.agents/skills/confirm-requirements/SKILL.md +0 -25
  557. package/templates/hono-server/.agents/skills/diagnosing-bugs/SKILL.md +0 -140
  558. package/templates/hono-server/.agents/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  559. package/templates/hono-server/.agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -44
  560. package/templates/hono-server/.agents/skills/domain-modeling/ADR-FORMAT.md +0 -47
  561. package/templates/hono-server/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  562. package/templates/hono-server/.agents/skills/domain-modeling/SKILL.md +0 -74
  563. package/templates/hono-server/.agents/skills/domain-modeling/agents/openai.yaml +0 -3
  564. package/templates/hono-server/.agents/skills/grill-me/SKILL.md +0 -7
  565. package/templates/hono-server/.agents/skills/grill-me/agents/openai.yaml +0 -5
  566. package/templates/hono-server/.agents/skills/implement/SKILL.md +0 -15
  567. package/templates/hono-server/.agents/skills/implement/agents/openai.yaml +0 -5
  568. package/templates/hono-server/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
  569. package/templates/hono-server/.agents/skills/improve-codebase-architecture/SKILL.md +0 -71
  570. package/templates/hono-server/.agents/skills/improve-codebase-architecture/agents/openai.yaml +0 -5
  571. package/templates/hono-server/.agents/skills/resolving-merge-conflicts/SKILL.md +0 -14
  572. package/templates/hono-server/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +0 -3
  573. package/templates/hono-server/.agents/skills/scoped-code-review/SKILL.md +0 -113
  574. package/templates/hono-server/.agents/skills/setup-matt-pocock-skills/SKILL.md +0 -116
  575. package/templates/hono-server/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +0 -5
  576. package/templates/hono-server/.agents/skills/setup-matt-pocock-skills/domain.md +0 -51
  577. package/templates/hono-server/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
  578. package/templates/hono-server/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
  579. package/templates/hono-server/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -30
  580. package/templates/hono-server/.agents/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
  581. package/templates/hono-server/.agents/skills/tdd/SKILL.md +0 -38
  582. package/templates/hono-server/.agents/skills/tdd/agents/openai.yaml +0 -3
  583. package/templates/hono-server/.agents/skills/tdd/mocking.md +0 -59
  584. package/templates/hono-server/.agents/skills/tdd/tests.md +0 -77
  585. package/templates/hono-server/.agents/skills/teach/GLOSSARY-FORMAT.md +0 -35
  586. package/templates/hono-server/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
  587. package/templates/hono-server/.agents/skills/teach/MISSION-FORMAT.md +0 -31
  588. package/templates/hono-server/.agents/skills/teach/RESOURCES-FORMAT.md +0 -32
  589. package/templates/hono-server/.agents/skills/teach/SKILL.md +0 -140
  590. package/templates/hono-server/.agents/skills/teach/agents/openai.yaml +0 -5
  591. package/templates/hono-server/.agents/skills/to-questionnaire/SKILL.md +0 -53
  592. package/templates/hono-server/.agents/skills/to-questionnaire/agents/openai.yaml +0 -5
  593. package/templates/hono-server/.agents/skills/triage/AGENT-BRIEF.md +0 -207
  594. package/templates/hono-server/.agents/skills/triage/OUT-OF-SCOPE.md +0 -105
  595. package/templates/hono-server/.agents/skills/triage/SKILL.md +0 -112
  596. package/templates/hono-server/.agents/skills/triage/agents/openai.yaml +0 -5
  597. package/templates/hono-server/.agents/skills/wait-what/SKILL.md +0 -7
  598. package/templates/hono-server/.agents/skills/wait-what/agents/openai.yaml +0 -5
  599. package/templates/hono-server/.agents/skills/wizard/SKILL.md +0 -44
  600. package/templates/hono-server/.agents/skills/wizard/agents/openai.yaml +0 -3
  601. package/templates/hono-server/.agents/skills/wizard/template.sh +0 -204
  602. package/templates/hono-server/.agents/skills/writing-for-agents/SKILL-MECHANICS.md +0 -22
  603. package/templates/hono-server/.agents/skills/writing-for-agents/SKILL.md +0 -81
  604. package/templates/hono-server/.agents/skills/writing-for-agents/agents/openai.yaml +0 -3
  605. package/templates/hono-server/apps/server/src/modules/example/contracts.ts +0 -9
  606. package/templates/hono-server/apps/server/src/shared/app/types.ts +0 -44
  607. package/templates/hono-server/docs/agents/domain.md +0 -41
  608. package/templates/hono-server/docs/agents/issue-tracker.md +0 -30
  609. package/templates/hono-server/docs/agents/triage-labels.md +0 -15
  610. package/templates/monorepo/.agents/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
  611. package/templates/monorepo/.agents/skills/ask-matt/SKILL.md +0 -90
  612. package/templates/monorepo/.agents/skills/ask-matt/agents/openai.yaml +0 -5
  613. package/templates/monorepo/.agents/skills/code-review/SKILL.md +0 -87
  614. package/templates/monorepo/.agents/skills/code-review/agents/openai.yaml +0 -3
  615. package/templates/monorepo/.agents/skills/codebase-design/DEEPENING.md +0 -37
  616. package/templates/monorepo/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  617. package/templates/monorepo/.agents/skills/codebase-design/SKILL.md +0 -114
  618. package/templates/monorepo/.agents/skills/codebase-design/agents/openai.yaml +0 -3
  619. package/templates/monorepo/.agents/skills/confirm-requirements/SKILL.md +0 -25
  620. package/templates/monorepo/.agents/skills/diagnosing-bugs/SKILL.md +0 -140
  621. package/templates/monorepo/.agents/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  622. package/templates/monorepo/.agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -44
  623. package/templates/monorepo/.agents/skills/domain-modeling/ADR-FORMAT.md +0 -47
  624. package/templates/monorepo/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  625. package/templates/monorepo/.agents/skills/domain-modeling/SKILL.md +0 -74
  626. package/templates/monorepo/.agents/skills/domain-modeling/agents/openai.yaml +0 -3
  627. package/templates/monorepo/.agents/skills/grill-me/SKILL.md +0 -7
  628. package/templates/monorepo/.agents/skills/grill-me/agents/openai.yaml +0 -5
  629. package/templates/monorepo/.agents/skills/implement/SKILL.md +0 -15
  630. package/templates/monorepo/.agents/skills/implement/agents/openai.yaml +0 -5
  631. package/templates/monorepo/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
  632. package/templates/monorepo/.agents/skills/improve-codebase-architecture/SKILL.md +0 -71
  633. package/templates/monorepo/.agents/skills/improve-codebase-architecture/agents/openai.yaml +0 -5
  634. package/templates/monorepo/.agents/skills/resolving-merge-conflicts/SKILL.md +0 -14
  635. package/templates/monorepo/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +0 -3
  636. package/templates/monorepo/.agents/skills/scoped-code-review/SKILL.md +0 -113
  637. package/templates/monorepo/.agents/skills/setup-matt-pocock-skills/SKILL.md +0 -116
  638. package/templates/monorepo/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +0 -5
  639. package/templates/monorepo/.agents/skills/setup-matt-pocock-skills/domain.md +0 -51
  640. package/templates/monorepo/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
  641. package/templates/monorepo/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
  642. package/templates/monorepo/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -30
  643. package/templates/monorepo/.agents/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
  644. package/templates/monorepo/.agents/skills/tdd/SKILL.md +0 -38
  645. package/templates/monorepo/.agents/skills/tdd/agents/openai.yaml +0 -3
  646. package/templates/monorepo/.agents/skills/tdd/mocking.md +0 -59
  647. package/templates/monorepo/.agents/skills/tdd/tests.md +0 -77
  648. package/templates/monorepo/.agents/skills/teach/GLOSSARY-FORMAT.md +0 -35
  649. package/templates/monorepo/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
  650. package/templates/monorepo/.agents/skills/teach/MISSION-FORMAT.md +0 -31
  651. package/templates/monorepo/.agents/skills/teach/RESOURCES-FORMAT.md +0 -32
  652. package/templates/monorepo/.agents/skills/teach/SKILL.md +0 -140
  653. package/templates/monorepo/.agents/skills/teach/agents/openai.yaml +0 -5
  654. package/templates/monorepo/.agents/skills/to-questionnaire/SKILL.md +0 -53
  655. package/templates/monorepo/.agents/skills/to-questionnaire/agents/openai.yaml +0 -5
  656. package/templates/monorepo/.agents/skills/triage/AGENT-BRIEF.md +0 -207
  657. package/templates/monorepo/.agents/skills/triage/OUT-OF-SCOPE.md +0 -105
  658. package/templates/monorepo/.agents/skills/triage/SKILL.md +0 -112
  659. package/templates/monorepo/.agents/skills/triage/agents/openai.yaml +0 -5
  660. package/templates/monorepo/.agents/skills/wait-what/SKILL.md +0 -7
  661. package/templates/monorepo/.agents/skills/wait-what/agents/openai.yaml +0 -5
  662. package/templates/monorepo/.agents/skills/wizard/SKILL.md +0 -44
  663. package/templates/monorepo/.agents/skills/wizard/agents/openai.yaml +0 -3
  664. package/templates/monorepo/.agents/skills/wizard/template.sh +0 -204
  665. package/templates/monorepo/.agents/skills/writing-for-agents/SKILL-MECHANICS.md +0 -22
  666. package/templates/monorepo/.agents/skills/writing-for-agents/SKILL.md +0 -81
  667. package/templates/monorepo/.agents/skills/writing-for-agents/agents/openai.yaml +0 -3
  668. package/templates/monorepo/docs/agents/domain.md +0 -41
  669. package/templates/monorepo/docs/agents/issue-tracker.md +0 -30
  670. package/templates/monorepo/docs/agents/triage-labels.md +0 -15
  671. /package/templates/hono-fullstack/.agents/skills/{grilling → ask-grilling}/agents/openai.yaml +0 -0
  672. /package/templates/hono-fullstack/.agents/skills/{prototype → plan-prototype}/agents/openai.yaml +0 -0
  673. /package/templates/hono-fullstack/.agents/skills/{research → plan-research}/agents/openai.yaml +0 -0
  674. /package/templates/hono-fullstack/.agents/skills/{wayfinder → plan-wayfinder}/agents/openai.yaml +0 -0
  675. /package/templates/hono-server/.agents/skills/{grilling → ask-grilling}/agents/openai.yaml +0 -0
  676. /package/templates/hono-server/.agents/skills/{prototype → plan-prototype}/agents/openai.yaml +0 -0
  677. /package/templates/hono-server/.agents/skills/{research → plan-research}/agents/openai.yaml +0 -0
  678. /package/templates/hono-server/.agents/skills/{wayfinder → plan-wayfinder}/agents/openai.yaml +0 -0
  679. /package/templates/monorepo/.agents/skills/{grilling → ask-grilling}/agents/openai.yaml +0 -0
  680. /package/templates/monorepo/.agents/skills/{prototype → plan-prototype}/agents/openai.yaml +0 -0
  681. /package/templates/monorepo/.agents/skills/{research → plan-research}/agents/openai.yaml +0 -0
  682. /package/templates/monorepo/.agents/skills/{wayfinder → plan-wayfinder}/agents/openai.yaml +0 -0
@@ -0,0 +1,5 @@
1
+ # CodeGraph data files — local to each machine, not for committing.
2
+ # Ignore everything in .codegraph/ except this file itself, so transient
3
+ # files (the database, daemon.pid, sockets, logs) never show up in git.
4
+ *
5
+ !.gitignore
@@ -19,32 +19,21 @@ release. Add a tool name to select part of the graph. For example, run
19
19
 
20
20
  ## Review Checklist
21
21
 
22
- - [ ] Run `vp install` after pulling remote changes and before getting started.
23
22
  - [ ] Run `vp check` and `vp test` to format, lint, type check and test changes.
24
23
  - [ ] Check if there are `vite.config.ts` tasks or `package.json` scripts necessary for validation, run via `vp run <script>`.
25
24
  - [ ] If setup, runtime, or package-manager behavior looks wrong, run `vp env doctor` and include its output when asking for help.
26
25
 
27
26
  <!--VITE PLUS END-->
28
27
 
29
- ## Agent skills
30
-
31
- ### Issue tracker
32
-
33
- Issues are tracked as local Markdown files under `.scratch/<feature>/`. See
34
- `docs/agents/issue-tracker.md`.
35
-
36
- ### Triage labels
37
-
38
- Triage uses the five canonical label strings without overrides. See `docs/agents/triage-labels.md`.
39
-
40
- ### Domain docs
41
-
42
- Domain documentation uses a multi-context layout. See `docs/agents/domain.md`.
43
-
44
28
  ## General
45
29
 
46
- 1. Never execute git add or git commit unless explicitly requested.
30
+ 1. Never execute `git add`, `git commit`, `install` or `build` unless explicitly requested.
47
31
  2. Never delete comments without confirmation.
48
- 3. If infeasible, stop and confirm with me before proceeding.
49
- 4. Prefer || over ?? for defaults, unless falsy values (e.g., 0, "", false) are valid data.
50
- 5. SILENT REFACTOR PASS: Inline single-use helpers, purge pass-through wrappers, reserve encapsulation for multi-use logic. Output final high-cohesion code only.
32
+ 3. Import test APIs from `vite-plus/test`, not `vitest`.
33
+ 4. Extend existing abstractions before introducing parallel ones.
34
+ 5. If infeasible, stop and confirm with me before proceeding.
35
+ 6. Prefer || over ?? for defaults, unless falsy values (e.g., 0, "", false) are valid data.
36
+ 7. SILENT REFACTOR PASS: Inline single-use helpers, purge pass-through wrappers, reserve encapsulation for multi-use logic. Output final high-cohesion code only.
37
+ 8. Prefer in-place changes when replacing an implementation; preserve existing responsibility-based organization and names unless the responsibility itself changes.
38
+ 9. Add a new file only when it owns a distinct responsibility; keep related logic together in existing files otherwise.
39
+ 10. Encapsulation must hide meaningful complexity behind a simpler interface; callers should not need to understand the implementation to use it correctly.
@@ -9,6 +9,7 @@ TanStack Start and Nitro serve the frontend while mounting the independently bui
9
9
  - `apps/server`: independently buildable and startable Hono server and worker runtime.
10
10
  - `libs/definition`: backend/frontend contracts and environment definitions.
11
11
  - `libs/db`: SQLite/Drizzle and D1 clients, schema, relations, and manual migration commands.
12
+ - `libs/ui`: shared React components, Panda design system, and Storybook previews.
12
13
 
13
14
  ## Setup
14
15
 
@@ -31,7 +32,7 @@ Cloudflare runtime and binding types are generated from each runnable Worker's W
31
32
 
32
33
  Before deploying, replace the placeholder D1 `database_id` and `database_name` in both Wrangler configs. Keep production variables in the Cloudflare dashboard rather than committing them.
33
34
 
34
- Example tasks run in-process through `PassThroughWorkRunner` by default. The complete Piscina implementation remains available: enable `PiscinaWorkRunner` in the Node.js adapter and the adjacent worker pack entry in `apps/server/vite.config.ts` to use worker threads.
35
+ Example tasks run in-process through `PassThroughRunner` by default. The complete Piscina implementation remains available: enable `PiscinaWorkRunner` in apps/server/src/di-container.ts and the adjacent worker pack entry in `apps/server/vite.config.ts` to use worker threads.
35
36
 
36
37
  ## Commands
37
38
 
@@ -45,7 +46,27 @@ Example tasks run in-process through `PassThroughWorkRunner` by default. The com
45
46
  - `pnpm --filter @repo/server dev`: start Hono independently on Node.js.
46
47
  - `pnpm --filter @repo/server dev:cloudflare`: start Hono independently on local workerd and D1.
47
48
  - `pnpm --filter @repo/server test`: run the retained server tests.
49
+ - `pnpm -C apps/stack codegen`: generate the application's Panda helpers.
50
+ - `pnpm --filter @repo/ui storybook`: preview UI components on port 6006 without building the UI package first.
51
+ - `pnpm --filter @repo/ui storybook:check`: generate the preview helpers and type-check Storybook.
52
+ - `pnpm --filter @repo/ui storybook:build`: build the static component previews.
53
+
54
+ ## UI development
55
+
56
+ The stack consumes the built `@repo/ui` design system through Panda's `designSystem` setting. Application styles live in `frontend/assets/styles.css`; document-level reset and global styles belong to the application's `panda.config.ts`. Component recipes retain the `app-` class prefix.
57
+
58
+ Stack chain commands prepare upstream packages through Turbo's `build:dev` tasks. When actively editing the UI library, its three watchers have separate responsibilities: `dev:codegen` updates local Panda helpers, `dev` updates component modules, and `dev:panda` updates the design-system manifest. Run them in separate terminals as needed; `dev` alone does not watch the complete design system.
59
+
60
+ Storybook has its own Vite and Panda configuration and generated helpers under `libs/ui/.storybook/styled-system`. See `libs/ui/stories/README.md` for preview conventions. Generated `styled-system`, `dist`, `.output`, and `storybook-static` contents are not committed.
48
61
 
49
62
  The stack exposes health at `/api/health`, OpenAPI YAML at `/api/docs/openapi.yaml`, Swagger at `/api/swagger`, CRUD at `/api/examples`, and worker processing at `/api/examples/process`. The independently started Hono app uses `SERVER_BASE_PATH`.
50
63
 
51
64
  The example vertical slice may be removed after replacing its definition, table, Hono routes, worker task, API hooks, and page together. Docker and CI are intentionally not included in this Fullstack template.
65
+
66
+ ## Contracts and database development
67
+
68
+ Example routes validate shared contracts and call the inferDI-managed ExampleService; queries use the shared data-access layer and explicit id/list VOs. List responses contain results and pagination meta; create responses contain result and write meta. PATCH /examples/:id updates message, DELETE /examples accepts a JSON ids array, and POST /examples/process uses the configured work runner.
69
+
70
+ Run codegen:contracts and codegen:vo in libs/definition only after manually updating the DB package artifacts. These commands use IS_OVERRIDE=1 and can overwrite hand-edited contracts; review the diff and restore custom rules. See libs/definition/README.md.
71
+
72
+ IS_D1_LOCAL=1 selects the shared local metadata.sqlite database for Drizzle D1 commands. First run db:warmup:cloudflare:local in apps/server or apps/stack, then run dev:d1:push in libs/db manually. Remove IS_D1_LOCAL for remote D1 and provide Cloudflare credentials. The switch follows process.env truthiness: even the string 0 enables local mode. No schema push is run automatically.
@@ -11,6 +11,7 @@ node_modules
11
11
  dist
12
12
  dist-ssr
13
13
  .output
14
+ styled-system
14
15
  *.local
15
16
 
16
17
  # Editor directories and files
@@ -2,7 +2,9 @@
2
2
  "name": "@repo/server",
3
3
  "version": "0.0.0",
4
4
  "private": true,
5
- "files": ["dist"],
5
+ "files": [
6
+ "dist"
7
+ ],
6
8
  "type": "module",
7
9
  "exports": {
8
10
  "./nodejs": "./dist/nodejsEntry.mjs",
@@ -17,6 +19,7 @@
17
19
  "dev:cloudflare-chain": "turbo watch dev:cloudflare --filter=@repo/server",
18
20
  "dev:cloudflare": "wrangler dev --config wrangler.jsonc --persist-to ../../.wrangler/state",
19
21
  "db:migrate:cloudflare:local": "wrangler d1 migrations apply DB --local --config wrangler.jsonc --persist-to ../../.wrangler/state",
22
+ "db:warmup:cloudflare:local": "wrangler d1 execute DB --local --config wrangler.jsonc --persist-to ../../.wrangler/state --command \"SELECT 1\"",
20
23
  "build:node-chain": "turbo build:node --filter=@repo/server",
21
24
  "build:node": "vp pack",
22
25
  "cf:typegen": "wrangler types --config wrangler.jsonc",
@@ -27,7 +30,10 @@
27
30
  "dependencies": {
28
31
  "@hono/node-server": "catalog:server",
29
32
  "@hono/standard-validator": "catalog:server",
33
+ "@hono/structured-logger": "catalog:server",
30
34
  "@hono/swagger-ui": "catalog:server",
35
+ "@inferdi/hono": "catalog:server",
36
+ "@inferdi/inferdi": "catalog:",
31
37
  "@repo/db": "workspace:*",
32
38
  "@repo/definition": "workspace:*",
33
39
  "@valibot/to-json-schema": "catalog:server",
@@ -37,7 +43,6 @@
37
43
  "drizzle-orm": "catalog:db",
38
44
  "hono": "catalog:server",
39
45
  "hono-openapi": "catalog:server",
40
- "hono-pino": "catalog:server",
41
46
  "hono-problem-details": "catalog:server",
42
47
  "ky": "catalog:shared",
43
48
  "pino": "catalog:server",
@@ -1,36 +1,10 @@
1
- import { createD1Client } from '@repo/db/sqlite/d1-client'
2
1
  import { env } from 'cloudflare:workers'
3
- import { getRuntimeKey } from 'hono/adapter'
4
2
  import { createApp } from '@/app'
5
- import { resolveConfig } from '@/config'
6
3
  import { setRootLogger } from '@/infra/logger/getter'
7
- import { createPinoLogger } from '@/infra/logger/pino'
8
- import { PassThroughWorkRunner } from '@/infra/work-runner/pass-through/runner'
9
- import type { AppDependencies, AppLogger } from '@/shared/app/types'
10
4
 
11
- const appConfig = resolveConfig(env as any)
12
- const { runtime, log } = appConfig
13
- const { rootLogger, loggerHandler } = createPinoLogger({
14
- isLocal: runtime.isLocal,
15
- logBase: log.base,
16
- runtime: getRuntimeKey(),
17
- logRoll: log.roll,
18
- logPretty: log.pretty,
5
+ const instance = createApp({
6
+ env: { ...env },
19
7
  })
20
- setRootLogger(rootLogger as unknown as AppLogger)
8
+ setRootLogger(instance.logger)
21
9
 
22
- export const workRunner = new PassThroughWorkRunner()
23
- const d1Client = createD1Client(env.DB)
24
- const dependencies: AppDependencies = {
25
- appConfig,
26
- loggerHandler,
27
- workRunner,
28
- db: d1Client.db,
29
- }
30
-
31
- const app = createApp({
32
- serverBasePath: appConfig.runtime.serverBasePath,
33
- makeDependencies: () => dependencies,
34
- })
35
-
36
- export default app
10
+ export default instance.app
@@ -1,11 +1,11 @@
1
1
  import { serve } from '@hono/node-server'
2
- import app, { closeNodeDependencies } from './entry'
3
2
 
4
- function main() {
3
+ async function main() {
5
4
  const port = Number(process.env.NODE_PORT)
6
5
  if (!port || Number.isNaN(port)) {
7
6
  throw new Error(`Invalid port: ${process.env.NODE_PORT}`)
8
7
  }
8
+ const { default: app, disposeApp, rootLogger } = await import('./entry')
9
9
 
10
10
  const server = serve(
11
11
  {
@@ -18,8 +18,10 @@ function main() {
18
18
  )
19
19
 
20
20
  let isShuttingDown = false
21
+ let shutdownExitCode = 0
21
22
 
22
- const gracefulShutdown = async (signal: string) => {
23
+ const gracefulShutdown = async (signal: string, exitCode = 0) => {
24
+ shutdownExitCode ||= exitCode
23
25
  if (isShuttingDown) return
24
26
  isShuttingDown = true
25
27
 
@@ -38,24 +40,30 @@ function main() {
38
40
  })
39
41
  console.log('✔ HTTP server successfully closed.')
40
42
 
41
- await closeNodeDependencies()
42
- console.log('✔ Node dependencies successfully closed.')
43
+ await disposeApp()
44
+ console.log('✔ App successfully disposed.')
43
45
 
44
46
  console.log('Graceful shutdown completed.')
45
- process.exit(0)
47
+ process.exit(shutdownExitCode)
46
48
  } catch (err) {
47
49
  console.error('Error during shutdown:', err)
48
50
  process.exit(1)
49
51
  }
50
52
  }
51
53
 
52
- process.on('SIGTERM', () => gracefulShutdown('SIGTERM'))
53
- process.on('SIGINT', () => gracefulShutdown('SIGINT'))
54
+ process.on('SIGTERM', () => void gracefulShutdown('SIGTERM'))
55
+ process.on('SIGINT', () => void gracefulShutdown('SIGINT'))
56
+ process.on('unhandledRejection', (reason) => {
57
+ rootLogger.fatal({ err: reason }, 'unhandledRejection')
58
+ void gracefulShutdown('unhandledRejection', 1)
59
+ })
60
+ process.on('uncaughtException', (error) => {
61
+ rootLogger.fatal({ err: error }, 'uncaughtException')
62
+ void gracefulShutdown('uncaughtException', 1)
63
+ })
54
64
  }
55
65
 
56
- try {
57
- main()
58
- } catch (error) {
66
+ void main().catch((error) => {
59
67
  console.error('[server] failed to start', error)
60
68
  process.exit(1)
61
- }
69
+ })
@@ -1,62 +1,12 @@
1
- import { createSqliteClient } from '@repo/db/sqlite/sqlite'
2
- import { sqliteSchemaConfig } from '@repo/definition/backend'
3
1
  import { createApp } from '@/app'
4
- import { resolveConfig } from '@/config'
5
- import { createPinoLogger } from '@/infra/logger/pino'
6
- import { getRuntimeKey } from 'hono/adapter'
7
- import type { AppDependencies, AppLogger } from '@/shared/app/types'
8
- // import { PiscinaWorkRunner } from '@/infra/work-runner/piscina/runner'
9
- import { PassThroughWorkRunner } from '@/infra/work-runner/pass-through/runner'
10
- import { getLogger, setRootLogger } from '@/infra/logger/getter'
2
+ import { setRootLogger } from '@/infra/logger/getter'
11
3
 
12
- function installProcessErrorHandlers(isLocal: boolean) {
13
- process.on('unhandledRejection', (reason) => {
14
- getLogger().error({ err: reason }, 'unhandledRejection')
15
- if (isLocal) process.exit(1)
16
- })
17
- process.on('uncaughtException', (error) => {
18
- getLogger().fatal({ err: error }, 'uncaughtException')
19
- process.exit(1)
20
- })
21
- }
22
-
23
- const appConfig = resolveConfig(process.env)
24
- const sqliteConfig = sqliteSchemaConfig.resolve({
25
- context: process.env,
26
- matchContextKey: 'constantCase',
27
- })
28
- const { runtime, log } = appConfig
29
- const { rootLogger, loggerHandler } = createPinoLogger({
30
- isLocal: runtime.isLocal,
31
- logBase: log.base,
32
- runtime: getRuntimeKey(),
33
- logRoll: log.roll,
34
- logPretty: log.pretty,
35
- })
36
- setRootLogger(rootLogger as unknown as AppLogger)
37
- installProcessErrorHandlers(runtime.isLocal)
38
-
39
- // To enable Piscina, use PiscinaWorkRunner and enable the worker pack entry in vite.config.ts.
40
- // export const workRunner = PiscinaWorkRunner.getInstance(appConfig.worker)
41
- export const workRunner = new PassThroughWorkRunner()
42
- export const sqliteClient = createSqliteClient(sqliteConfig.dbPath)
43
-
44
- let dependencies: AppDependencies | undefined
45
- let closePromise: Promise<void> | undefined
46
- const app = createApp({
47
- serverBasePath: appConfig.runtime.serverBasePath,
48
- makeDependencies: () => {
49
- dependencies ||= { appConfig, loggerHandler, workRunner, db: sqliteClient.db }
50
- return dependencies
51
- },
4
+ const instance = createApp({
5
+ env: process.env,
52
6
  })
7
+ setRootLogger(instance.logger)
53
8
 
54
- export const closeNodeDependencies = (): Promise<void> => {
55
- closePromise ||= (async () => {
56
- await workRunner.shutdown()
57
- sqliteClient.close()
58
- })()
59
- return closePromise
60
- }
9
+ export const rootLogger = instance.logger
10
+ export const disposeApp = instance.dispose
61
11
 
62
- export default app
12
+ export default instance.app
@@ -1,43 +1,59 @@
1
1
  import { Hono } from 'hono'
2
+ import { inferdiHono } from '@inferdi/hono'
2
3
  import { contextStorage } from 'hono/context-storage'
3
4
  import { csrf } from 'hono/csrf'
4
5
  import { secureHeaders } from 'hono/secure-headers'
5
6
  import { requestId } from 'hono/request-id'
7
+ import { describeRoute } from 'hono-openapi'
8
+ import * as v from 'valibot'
6
9
  import { corsMiddleware } from './middlewares/cors'
7
- import { exampleRoutes } from './modules/example/routes'
8
- import type { CreateAppOptions, AppEnv } from './shared/app/types'
10
+ import type { CreateAppOptions, AppEnv, AppInstance } from './shared/types/app'
9
11
  import { E } from './shared/errors/defs'
10
12
  import { globalErrorHandler } from './shared/errors/handler'
11
- import { configureOpenAPI } from './shared/network/openapi'
12
- import { objectEntries } from './shared/utils'
13
+ import { configureOpenAPI, jsonResponse, OpenApiTags } from './shared/network/openapi'
14
+ import { successJson } from './shared/network/utils'
15
+ import { loggerMiddleware } from './middlewares/logger'
16
+ import { createDIContainer } from './di-container'
17
+ import { flushPino } from './infra/logger/pino'
18
+ import { routes as exampleRoutes } from './modules/example/routes'
13
19
 
14
- export const createApp = ({ serverBasePath, makeDependencies }: CreateAppOptions): Hono<AppEnv> => {
15
- const app = new Hono<AppEnv>().basePath(serverBasePath)
20
+ export const createApp = ({ serverBasePath, env }: CreateAppOptions): AppInstance => {
21
+ const diContainer = createDIContainer({ env })
22
+ const rootLogger = diContainer.get('rootLogger')
23
+ const appConfig = diContainer.get('appConfig')
24
+ const app = new Hono<AppEnv>().basePath(serverBasePath ?? appConfig.runtime.serverBasePath)
16
25
 
17
- app.use('*', async (c, next) => {
18
- const deps = await makeDependencies(c)
19
- objectEntries(deps).forEach(([key, value]) => c.set(key, value))
20
- await next()
21
- })
22
26
  app.use(contextStorage())
23
27
  app.use('*', requestId())
24
- app.use('*', async (c, next) => {
25
- const loggerHandler = c.get('loggerHandler')
26
- await loggerHandler(c as never, async () => {
27
- c.get('logger')?.assign({ reqId: c.get('requestId') })
28
- await next()
29
- })
30
- })
28
+ app.use('*', loggerMiddleware(rootLogger))
29
+ app.use('*', inferdiHono({ container: diContainer }))
31
30
  app.use('*', secureHeaders())
32
- app.use('*', corsMiddleware())
31
+ app.use('*', corsMiddleware(appConfig.middleware.cors))
33
32
  app.use('*', csrf())
34
33
 
35
- app.route('/', exampleRoutes)
34
+ app.get(
35
+ '/health',
36
+ describeRoute({
37
+ operationId: 'getHealth',
38
+ tags: [OpenApiTags.System],
39
+ summary: 'Health check',
40
+ responses: { 200: jsonResponse(v.object({ data: v.object({ status: v.string() }) })) },
41
+ }),
42
+ (c) => successJson(c, { status: 'ok' }),
43
+ )
44
+ app.route('/examples', exampleRoutes)
36
45
  configureOpenAPI(app)
37
46
 
38
47
  app.notFound(() => {
39
48
  throw E.NORMAL.NOT_FOUND.create()
40
49
  })
41
50
  app.onError(globalErrorHandler)
42
- return app
51
+ return {
52
+ app,
53
+ logger: rootLogger,
54
+ dispose: async () => {
55
+ await diContainer.dispose()
56
+ await flushPino(rootLogger)
57
+ },
58
+ }
43
59
  }
@@ -9,7 +9,7 @@ import {
9
9
  } from '@repo/definition/backend'
10
10
  import { getRuntimeKey } from 'hono/adapter'
11
11
  import { flatten as flattenValiIssues, isValiError } from 'valibot'
12
- import type { AppConfig } from '@/shared/app/types'
12
+ import type { AppConfig } from '@/shared/types/app'
13
13
 
14
14
  export function resolveConfig(context: Record<string, unknown>): AppConfig {
15
15
  try {
@@ -0,0 +1,51 @@
1
+ import { getRuntimeKey } from 'hono/adapter'
2
+ import { Container } from '@inferdi/inferdi'
3
+ import { resolveConfig } from './config'
4
+ import { createPino } from './infra/logger/pino'
5
+ import { sqliteSchemaConfig } from '@repo/definition/backend'
6
+ import { createD1Client, type D1Binding } from '@repo/db/sqlite/d1-client'
7
+ import { createSqliteClient } from '@repo/db/sqlite/sqlite'
8
+ import type { Database } from './shared/types/db'
9
+ import { exampleModule } from './modules/example/module'
10
+ import { PassThroughRunner } from './infra/work-runner/pass-through/runner'
11
+ // import { PiscinaWorkRunner } from './infra/work-runner/piscina/runner'
12
+ import type { AppWorkRunner } from './infra/work-runner/types'
13
+
14
+ export const createDIContainer = ({ env }: { env: Record<string, unknown> }) => {
15
+ const runtimeKey = getRuntimeKey()
16
+ return new Container()
17
+ .registerValue('appConfig', resolveConfig(env))
18
+ .registerFactory('rootLogger', (c) => {
19
+ const { runtime, log } = c.get('appConfig')
20
+ return createPino({
21
+ isLocal: runtime.isLocal,
22
+ logConfig: log,
23
+ })
24
+ })
25
+ .registerFactory('database', (): Database => {
26
+ if (runtimeKey === 'workerd') return createD1Client(env.DB as D1Binding)
27
+
28
+ const { dbPath } = sqliteSchemaConfig.resolve({
29
+ context: env,
30
+ matchContextKey: 'constantCase',
31
+ })
32
+ const client = createSqliteClient(dbPath)
33
+ return {
34
+ db: client.db,
35
+ [Symbol.dispose]() {
36
+ client.close()
37
+ },
38
+ }
39
+ })
40
+ .registerFactory('workRunner', (_c) => {
41
+ // Enable together with the worker pack entry in vite.config.ts.
42
+ // const runner: AppWorkRunner = PiscinaWorkRunner.getInstance(_c.get('appConfig').worker)
43
+ const runner: AppWorkRunner = new PassThroughRunner()
44
+ return Object.assign(runner, {
45
+ [Symbol.asyncDispose]: () => runner.shutdown(),
46
+ })
47
+ })
48
+ .use(exampleModule)
49
+ }
50
+
51
+ export type DIContainer = ReturnType<typeof createDIContainer>
@@ -1,4 +1,4 @@
1
- import type { AppEnv, AppLogger } from '@/shared/app/types'
1
+ import type { AppEnv, AppLogger } from '@/shared/types/app'
2
2
  import { hasProp } from '@/shared/utils'
3
3
  import { getContext } from 'hono/context-storage'
4
4
 
@@ -1,9 +1,8 @@
1
1
  import { createRequire } from 'node:module'
2
2
  import { isAbsolute, join, resolve } from 'node:path'
3
- import { type Runtime } from 'hono/adapter'
4
- import { pinoLogger } from 'hono-pino'
5
- import pino, { type LoggerOptions } from 'pino'
6
- import type { AppConfig } from '@/shared/app/types'
3
+ import { getRuntimeKey } from 'hono/adapter'
4
+ import pino, { type Logger, type LoggerOptions } from 'pino'
5
+ import type { LogConfig } from '@/shared/types/app'
7
6
  import { serializeErr } from '@/shared/errors/log'
8
7
 
9
8
  // const pinoInstance = pino({
@@ -33,7 +32,7 @@ export const createPinoOptions = ({
33
32
  baseConfig,
34
33
  }: {
35
34
  isLocal: boolean
36
- baseConfig: AppConfig['log']['base']
35
+ baseConfig: LogConfig['base']
37
36
  }) => {
38
37
  const pinoOptions: LoggerOptions = {
39
38
  level: baseConfig.loggerLevel || (isLocal ? 'debug' : 'info'),
@@ -69,38 +68,28 @@ export const createPinoOptions = ({
69
68
  return pinoOptions
70
69
  }
71
70
 
72
- export const createPinoLogger = ({
73
- isLocal,
74
- logBase,
75
- runtime,
76
- logRoll,
77
- logPretty,
78
- }: {
79
- isLocal: boolean
80
- logBase: AppConfig['log']['base']
81
- runtime: Runtime
82
- logRoll?: AppConfig['log']['roll']
83
- logPretty?: AppConfig['log']['pretty']
84
- }) => {
85
- const pinoOptions = createPinoOptions({ isLocal, baseConfig: logBase })
71
+ export const createPino = ({ isLocal, logConfig }: { isLocal: boolean; logConfig: LogConfig }) => {
72
+ const runtime = getRuntimeKey()
73
+ const { base, roll, pretty } = logConfig
74
+ const pinoOptions = createPinoOptions({ isLocal, baseConfig: base })
86
75
  const level = pinoOptions.level
87
76
  if (runtime === 'node' || runtime === 'bun') {
88
- if (isLocal && logPretty) {
77
+ if (isLocal && pretty) {
89
78
  try {
90
79
  createRequire(import.meta.url).resolve('pino-pretty')
91
- pinoOptions.transport = { target: 'pino-pretty', level, options: logPretty }
80
+ pinoOptions.transport = { target: 'pino-pretty', level, options: pretty }
92
81
  } catch {
93
82
  console.warn('[logger] pino-pretty is not installed; falling back to JSON stdout')
94
83
  }
95
- } else if (logRoll) {
96
- const { loggerDir, loggerFileBase } = logRoll
84
+ } else if (roll) {
85
+ const { loggerDir, loggerFileBase } = roll
97
86
  pinoOptions.transport = {
98
87
  targets: [
99
88
  {
100
89
  target: 'pino-roll',
101
90
  level,
102
91
  options: {
103
- ...logRoll,
92
+ ...roll,
104
93
  file: join(
105
94
  isAbsolute(loggerDir) ? loggerDir : resolve(process.cwd(), loggerDir),
106
95
  loggerFileBase,
@@ -112,15 +101,13 @@ export const createPinoLogger = ({
112
101
  }
113
102
  }
114
103
  }
115
- const rootLogger = pino(pinoOptions)
116
- const loggerHandler = pinoLogger({
117
- pino: rootLogger,
118
- // access log 只记请求完成;错误细节由 onError 走 serializers.err。
119
- // 默认在 c.error 时升 error 且 msg=error.message,会打出一条无结构的重复 error。
120
- http: {
121
- onResLevel: () => 'info',
122
- onResMessage: () => 'Request completed',
123
- },
104
+ return pino(pinoOptions)
105
+ }
106
+
107
+ export const flushPino = async (logger: Logger) => {
108
+ const runtime = getRuntimeKey()
109
+ if (runtime !== 'node' && runtime !== 'bun') return
110
+ await new Promise<void>((resolve, reject) => {
111
+ logger.flush((error) => (error ? reject(error) : resolve()))
124
112
  })
125
- return { rootLogger, loggerHandler }
126
113
  }
@@ -1,6 +1,7 @@
1
1
  import { hasProp } from '@/shared/utils'
2
2
  import { WorkerErrorCode } from './constants'
3
3
  import type { RunnerTaskError, RunnerTaskErrorDetails } from './types'
4
+ import { isWorkerTaskBusinessError } from './utils/business-error'
4
5
 
5
6
  const workerErrorCodes = Object.values(WorkerErrorCode)
6
7
 
@@ -38,3 +39,24 @@ export function isWorkerTaskError(error: unknown): error is WorkerTaskError {
38
39
  workerErrorCodes.includes(error.code as WorkerErrorCode))
39
40
  )
40
41
  }
42
+
43
+ export function serializeWorkerTaskError(error: unknown): RunnerTaskError<WorkerErrorCode> {
44
+ if (isWorkerTaskError(error)) return error.serialize()
45
+ if (isWorkerTaskBusinessError(error)) {
46
+ return new WorkerTaskError(
47
+ WorkerErrorCode.TASK_INTERNAL,
48
+ error.message,
49
+ error.cause.details,
50
+ error.cause.cause,
51
+ ).serialize()
52
+ }
53
+ if (error instanceof Error && error.name === 'AbortError') {
54
+ return new WorkerTaskError(WorkerErrorCode.TASK_ABORTED, error.message, undefined).serialize()
55
+ }
56
+ return new WorkerTaskError(
57
+ WorkerErrorCode.UNKNOWN,
58
+ 'Worker task failed unexpectedly',
59
+ undefined,
60
+ error,
61
+ ).serialize()
62
+ }