quiver-cli 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -239
- package/dist/cli.js +3163 -2040
- package/package.json +10 -11
- package/template/.agents/AGENTS.md +0 -26
- package/template/.agents/commands/cp.md +0 -108
- package/template/.agents/commands/next-setup.md +0 -1064
- package/template/.agents/commands/review.md +0 -68
- package/template/.agents/commands/terraform-readme.md +0 -38
- package/template/.agents/config.json +0 -80
- package/template/.agents/plugins/opencode/rtk.ts +0 -34
- package/template/.agents/skills/agent-browser/SKILL.md +0 -51
- package/template/.agents/skills/apps/skybridge/SKILL.md +0 -50
- package/template/.agents/skills/code/cleanup/SKILL.md +0 -26
- package/template/.agents/skills/code/improve/SKILL.md +0 -122
- package/template/.agents/skills/code/improve/references/audit-playbook.md +0 -130
- package/template/.agents/skills/code/improve/references/closing-the-loop.md +0 -96
- package/template/.agents/skills/code/improve/references/plan-template.md +0 -197
- package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +0 -3810
- package/template/.agents/skills/code/vercel-react-best-practices/README.md +0 -123
- package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +0 -149
- package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +0 -15
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +0 -46
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +0 -38
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +0 -51
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +0 -50
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +0 -50
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +0 -37
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +0 -26
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +0 -44
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +0 -76
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +0 -38
- package/template/.agents/skills/data/prisma-cli/SKILL.md +0 -247
- package/template/.agents/skills/data/prisma-cli/references/db-execute.md +0 -78
- package/template/.agents/skills/data/prisma-cli/references/db-pull.md +0 -185
- package/template/.agents/skills/data/prisma-cli/references/db-push.md +0 -148
- package/template/.agents/skills/data/prisma-cli/references/db-seed.md +0 -188
- package/template/.agents/skills/data/prisma-cli/references/debug.md +0 -46
- package/template/.agents/skills/data/prisma-cli/references/dev.md +0 -157
- package/template/.agents/skills/data/prisma-cli/references/format.md +0 -48
- package/template/.agents/skills/data/prisma-cli/references/generate.md +0 -173
- package/template/.agents/skills/data/prisma-cli/references/init.md +0 -136
- package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -38
- package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +0 -127
- package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +0 -145
- package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +0 -89
- package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +0 -78
- package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +0 -57
- package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +0 -65
- package/template/.agents/skills/data/prisma-cli/references/studio.md +0 -137
- package/template/.agents/skills/data/prisma-cli/references/validate.md +0 -53
- package/template/.agents/skills/data/prisma-client-api/SKILL.md +0 -216
- package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +0 -223
- package/template/.agents/skills/data/prisma-client-api/references/constructor.md +0 -208
- package/template/.agents/skills/data/prisma-client-api/references/filters.md +0 -256
- package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +0 -281
- package/template/.agents/skills/data/prisma-client-api/references/query-options.md +0 -276
- package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +0 -194
- package/template/.agents/skills/data/prisma-client-api/references/relations.md +0 -308
- package/template/.agents/skills/data/prisma-client-api/references/transactions.md +0 -184
- package/template/.agents/skills/design/impeccable/SKILL.md +0 -84
- package/template/.agents/skills/design/impeccable/reference/adapt.md +0 -312
- package/template/.agents/skills/design/impeccable/reference/adapt.native.md +0 -58
- package/template/.agents/skills/design/impeccable/reference/android.md +0 -40
- package/template/.agents/skills/design/impeccable/reference/animate.md +0 -86
- package/template/.agents/skills/design/impeccable/reference/audit.md +0 -136
- package/template/.agents/skills/design/impeccable/reference/audit.native.md +0 -139
- package/template/.agents/skills/design/impeccable/reference/bolder.md +0 -31
- package/template/.agents/skills/design/impeccable/reference/clarify.md +0 -94
- package/template/.agents/skills/design/impeccable/reference/colorize.md +0 -86
- package/template/.agents/skills/design/impeccable/reference/craft-floor.md +0 -42
- package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
- package/template/.agents/skills/design/impeccable/reference/critique.md +0 -788
- package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -90
- package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
- package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -37
- package/template/.agents/skills/design/impeccable/reference/degraded/manual-edit-applier.md +0 -92
- package/template/.agents/skills/design/impeccable/reference/delight.md +0 -70
- package/template/.agents/skills/design/impeccable/reference/distill.md +0 -111
- package/template/.agents/skills/design/impeccable/reference/doctor.md +0 -53
- package/template/.agents/skills/design/impeccable/reference/document.md +0 -416
- package/template/.agents/skills/design/impeccable/reference/extract.md +0 -69
- package/template/.agents/skills/design/impeccable/reference/harden.md +0 -336
- package/template/.agents/skills/design/impeccable/reference/hooks.md +0 -105
- package/template/.agents/skills/design/impeccable/reference/init.md +0 -125
- package/template/.agents/skills/design/impeccable/reference/ios.md +0 -45
- package/template/.agents/skills/design/impeccable/reference/layout.md +0 -84
- package/template/.agents/skills/design/impeccable/reference/live-setup.md +0 -102
- package/template/.agents/skills/design/impeccable/reference/live.md +0 -323
- package/template/.agents/skills/design/impeccable/reference/new-work.md +0 -105
- package/template/.agents/skills/design/impeccable/reference/onboard.md +0 -234
- package/template/.agents/skills/design/impeccable/reference/operate.md +0 -61
- package/template/.agents/skills/design/impeccable/reference/optimize.md +0 -258
- package/template/.agents/skills/design/impeccable/reference/overdrive.md +0 -127
- package/template/.agents/skills/design/impeccable/reference/polish.md +0 -97
- package/template/.agents/skills/design/impeccable/reference/quieter.md +0 -99
- package/template/.agents/skills/design/impeccable/reference/routing.md +0 -18
- package/template/.agents/skills/design/impeccable/reference/shape.md +0 -59
- package/template/.agents/skills/design/impeccable/reference/typeset.md +0 -80
- package/template/.agents/skills/design/impeccable/reference/visualize.md +0 -47
- package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
- package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -558
- package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -334
- package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1450
- package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -213
- package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
- package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -21
- package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2023
- package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -438
- package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -983
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -8283
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -50
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -372
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -768
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1186
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -264
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -189
- package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +0 -18
- package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +0 -212
- package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +0 -166
- package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +0 -617
- package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5580
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -124
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -112
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/fonts.mjs +0 -30
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/inline-ignores.mjs +0 -148
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +0 -7
- package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +0 -336
- package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -133
- package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -240
- package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -741
- package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -516
- package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2100
- package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -78
- package/template/.agents/skills/design/impeccable/scripts/lib/artifact-schema.mjs +0 -93
- package/template/.agents/skills/design/impeccable/scripts/lib/composition-catalog.mjs +0 -200
- package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +0 -357
- package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -842
- package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -658
- package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-paths.mjs +0 -137
- package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +0 -69
- package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
- package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -362
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -457
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -457
- package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -151
- package/template/.agents/skills/design/impeccable/scripts/lib/target-args.mjs +0 -42
- package/template/.agents/skills/design/impeccable/scripts/lib/target-slug.mjs +0 -33
- package/template/.agents/skills/design/impeccable/scripts/lib/template-extensions.mjs +0 -146
- package/template/.agents/skills/design/impeccable/scripts/live/accept-css.mjs +0 -617
- package/template/.agents/skills/design/impeccable/scripts/live/accept-verify.mjs +0 -60
- package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +0 -55
- package/template/.agents/skills/design/impeccable/scripts/live/completion.mjs +0 -28
- package/template/.agents/skills/design/impeccable/scripts/live/event-validation.mjs +0 -199
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/astro.mjs +0 -47
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/detect-utils.mjs +0 -73
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/index.mjs +0 -143
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/journal.mjs +0 -197
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nextjs.mjs +0 -49
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nuxt.mjs +0 -161
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/script-src.mjs +0 -17
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/static-html.mjs +0 -26
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/sveltekit.mjs +0 -71
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tag-strategy.mjs +0 -247
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tanstack-start.mjs +0 -70
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/vite-generic.mjs +0 -42
- package/template/.agents/skills/design/impeccable/scripts/live/generation-preflight.mjs +0 -149
- package/template/.agents/skills/design/impeccable/scripts/live/insert-ui.mjs +0 -458
- package/template/.agents/skills/design/impeccable/scripts/live/instructions.mjs +0 -142
- package/template/.agents/skills/design/impeccable/scripts/live/manual-apply.mjs +0 -939
- package/template/.agents/skills/design/impeccable/scripts/live/manual-edit-routes.mjs +0 -357
- package/template/.agents/skills/design/impeccable/scripts/live/manual-edits-buffer.mjs +0 -152
- package/template/.agents/skills/design/impeccable/scripts/live/poll-lanes.mjs +0 -14
- package/template/.agents/skills/design/impeccable/scripts/live/roots.mjs +0 -508
- package/template/.agents/skills/design/impeccable/scripts/live/session-store.mjs +0 -563
- package/template/.agents/skills/design/impeccable/scripts/live/source-lock.mjs +0 -105
- package/template/.agents/skills/design/impeccable/scripts/live/source-search.mjs +0 -105
- package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +0 -961
- package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1342
- package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -316
- package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -280
- package/template/.agents/skills/design/impeccable/scripts/live/ui-core.mjs +0 -180
- package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
- package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -954
- package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
- package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
- package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12512
- package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1244
- package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +0 -107
- package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +0 -683
- package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +0 -51
- package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +0 -503
- package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +0 -292
- package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +0 -368
- package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +0 -429
- package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
- package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1661
- package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +0 -71
- package/template/.agents/skills/design/impeccable/scripts/live-target.mjs +0 -30
- package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +0 -927
- package/template/.agents/skills/design/impeccable/scripts/live.mjs +0 -359
- package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +0 -14
- package/template/.agents/skills/design/impeccable/scripts/palette.mjs +0 -628
- package/template/.agents/skills/design/impeccable/scripts/pin.mjs +0 -221
- package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -932
- package/template/.agents/skills/design/impeccable/scripts/surface-brief.mjs +0 -74
- package/template/.agents/skills/design/shadcn/SKILL.md +0 -277
- package/template/.agents/skills/design/shadcn/agents/openai.yml +0 -5
- package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
- package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
- package/template/.agents/skills/design/shadcn/cli.md +0 -290
- package/template/.agents/skills/design/shadcn/customization.md +0 -209
- package/template/.agents/skills/design/shadcn/evals/evals.json +0 -77
- package/template/.agents/skills/design/shadcn/mcp.md +0 -105
- package/template/.agents/skills/design/shadcn/registry.md +0 -277
- package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +0 -306
- package/template/.agents/skills/design/shadcn/rules/chat.md +0 -224
- package/template/.agents/skills/design/shadcn/rules/composition.md +0 -213
- package/template/.agents/skills/design/shadcn/rules/forms.md +0 -192
- package/template/.agents/skills/design/shadcn/rules/icons.md +0 -101
- package/template/.agents/skills/design/shadcn/rules/styling.md +0 -185
- package/template/.agents/skills/find-skills/SKILL.md +0 -141
- package/template/.agents/skills/hono/SKILL.md +0 -579
- package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -146
- package/template/.agents/skills/integrations/langfuse/references/ci-cd.md +0 -41
- package/template/.agents/skills/integrations/langfuse/references/cli.md +0 -60
- package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -88
- package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
- package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -291
- package/template/.agents/skills/integrations/langfuse/references/prompt-engineering.md +0 -35
- package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +0 -79
- package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -55
- package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
- package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -92
- package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -73
- package/template/.agents/skills/integrations/posthog/SKILL.md +0 -102
- package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +0 -63
- package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +0 -77
- package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +0 -57
- package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +0 -140
- package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +0 -490
- package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +0 -45
- package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +0 -139
- package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +0 -302
- package/template/.agents/skills/integrations/posthog/references/identify-users.md +0 -202
- package/template/.agents/skills/integrations/posthog/references/integration-example.md +0 -706
- package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +0 -385
- package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +0 -43
- package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +0 -37
- package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +0 -22
- package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +0 -38
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +0 -200
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +0 -62
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +0 -197
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +0 -397
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +0 -98
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +0 -120
- package/template/.agents/skills/repo/repo-ci/SKILL.md +0 -265
- package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +0 -129
- package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +0 -800
- package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +0 -47
- package/template/.agents/skills/repo/repo-init-node/SKILL.md +0 -196
- package/template/.agents/skills/skill-creator/LICENSE.txt +0 -202
- package/template/.agents/skills/skill-creator/SKILL.md +0 -485
- package/template/.agents/skills/skill-creator/agents/analyzer.md +0 -274
- package/template/.agents/skills/skill-creator/agents/comparator.md +0 -202
- package/template/.agents/skills/skill-creator/agents/grader.md +0 -223
- package/template/.agents/skills/skill-creator/assets/eval_review.html +0 -146
- package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
- package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
- package/template/.agents/skills/skill-creator/references/schemas.md +0 -430
- package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
- package/template/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
- package/template/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
- package/template/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
- package/template/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
- package/template/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
- package/template/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
- package/template/.agents/skills/skill-creator/scripts/utils.py +0 -47
- package/template/.agents/skills/supabase/CHANGELOG.md +0 -71
- package/template/.agents/skills/supabase/SKILL.md +0 -145
- package/template/.agents/skills/supabase/assets/feedback-issue-template.md +0 -17
- package/template/.agents/skills/supabase/references/skill-feedback.md +0 -17
- package/template/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
- package/template/.agents/skills/supabase-postgres-best-practices/SKILL.md +0 -64
- package/template/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
- package/template/.agents/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
- package/template/.agents/skills/supabase-postgres-best-practices/references/_template.md +0 -34
- package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
- package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
- package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
- package/template/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
- package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
- package/template/.agents/skills/writing/humanizer/SKILL.md +0 -621
- package/template/.agents/upstreams.json +0 -116
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: find-skills
|
|
3
|
-
description: Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Find Skills
|
|
7
|
-
|
|
8
|
-
This skill helps you discover and install skills from the open agent skills ecosystem.
|
|
9
|
-
|
|
10
|
-
## When to Use This Skill
|
|
11
|
-
|
|
12
|
-
Use this skill when the user:
|
|
13
|
-
|
|
14
|
-
- Asks "how do I do X" where X might be a common task with an existing skill
|
|
15
|
-
- Says "find a skill for X" or "is there a skill for X"
|
|
16
|
-
- Asks "can you do X" where X is a specialized capability
|
|
17
|
-
- Expresses interest in extending agent capabilities
|
|
18
|
-
- Wants to search for tools, templates, or workflows
|
|
19
|
-
- Mentions they wish they had help with a specific domain (design, testing, deployment, etc.)
|
|
20
|
-
|
|
21
|
-
## What is the Skills CLI?
|
|
22
|
-
|
|
23
|
-
The Skills CLI (`npx skills`) is the package manager for the open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools.
|
|
24
|
-
|
|
25
|
-
**Key commands:**
|
|
26
|
-
|
|
27
|
-
- `npx skills find [query] [--owner <owner>]` - Search for skills interactively or by keyword, optionally scoped to a GitHub owner
|
|
28
|
-
- `npx skills add <package>` - Install a skill from GitHub or other sources
|
|
29
|
-
- `npx skills update` - Update all installed skills
|
|
30
|
-
|
|
31
|
-
**Browse skills at:** https://skills.sh/
|
|
32
|
-
|
|
33
|
-
## How to Help Users Find Skills
|
|
34
|
-
|
|
35
|
-
### Step 1: Understand What They Need
|
|
36
|
-
|
|
37
|
-
When a user asks for help with something, identify:
|
|
38
|
-
|
|
39
|
-
1. The domain (e.g., React, testing, design, deployment)
|
|
40
|
-
2. The specific task (e.g., writing tests, creating animations, reviewing PRs)
|
|
41
|
-
3. Whether this is a common enough task that a skill likely exists
|
|
42
|
-
|
|
43
|
-
### Step 2: Check the Leaderboard First
|
|
44
|
-
|
|
45
|
-
Before running a CLI search, check the [skills.sh leaderboard](https://skills.sh/) to see if a well-known skill already exists for the domain. The leaderboard ranks skills by total installs, surfacing the most popular and battle-tested options.
|
|
46
|
-
|
|
47
|
-
For example, top skills for web development include:
|
|
48
|
-
- `vercel-labs/agent-skills` — React, Next.js, web design (100K+ installs each)
|
|
49
|
-
- `anthropics/skills` — Frontend design, document processing (100K+ installs)
|
|
50
|
-
|
|
51
|
-
### Step 3: Search for Skills
|
|
52
|
-
|
|
53
|
-
If the leaderboard doesn't cover the user's need, run the find command:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
npx skills find [query] [--owner <owner>]
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
For example:
|
|
60
|
-
|
|
61
|
-
- User asks "how do I make my React app faster?" → `npx skills find react performance`
|
|
62
|
-
- User asks "can you help me with PR reviews?" → `npx skills find pr review`
|
|
63
|
-
- User asks "I need to create a changelog" → `npx skills find changelog`
|
|
64
|
-
|
|
65
|
-
### Step 4: Verify Quality Before Recommending
|
|
66
|
-
|
|
67
|
-
**Do not recommend a skill based solely on search results.** Always verify:
|
|
68
|
-
|
|
69
|
-
1. **Install count** — Prefer skills with 1K+ installs. Be cautious with anything under 100.
|
|
70
|
-
2. **Source reputation** — Official sources (`vercel-labs`, `anthropics`, `microsoft`) are more trustworthy than unknown authors.
|
|
71
|
-
3. **GitHub stars** — Check the source repository. A skill from a repo with <100 stars should be treated with skepticism.
|
|
72
|
-
|
|
73
|
-
### Step 5: Present Options to the User
|
|
74
|
-
|
|
75
|
-
When you find relevant skills, present them to the user with:
|
|
76
|
-
|
|
77
|
-
1. The skill name and what it does
|
|
78
|
-
2. The install count and source
|
|
79
|
-
3. The install command they can run
|
|
80
|
-
4. A link to learn more at skills.sh
|
|
81
|
-
|
|
82
|
-
Example response:
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
I found a skill that might help! The "react-best-practices" skill provides
|
|
86
|
-
React and Next.js performance optimization guidelines from Vercel Engineering.
|
|
87
|
-
(185K installs)
|
|
88
|
-
|
|
89
|
-
To install it:
|
|
90
|
-
npx skills add vercel-labs/agent-skills@react-best-practices
|
|
91
|
-
|
|
92
|
-
Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### Step 6: Offer to Install
|
|
96
|
-
|
|
97
|
-
If the user wants to proceed, you can install the skill for them:
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
npx skills add <owner/repo@skill> -g -y
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
The `-g` flag installs globally (user-level) and `-y` skips confirmation prompts.
|
|
104
|
-
|
|
105
|
-
## Common Skill Categories
|
|
106
|
-
|
|
107
|
-
When searching, consider these common categories:
|
|
108
|
-
|
|
109
|
-
| Category | Example Queries |
|
|
110
|
-
| --------------- | ---------------------------------------- |
|
|
111
|
-
| Web Development | react, nextjs, typescript, css, tailwind |
|
|
112
|
-
| Testing | testing, jest, playwright, e2e |
|
|
113
|
-
| DevOps | deploy, docker, kubernetes, ci-cd |
|
|
114
|
-
| Documentation | docs, readme, changelog, api-docs |
|
|
115
|
-
| Code Quality | review, lint, refactor, best-practices |
|
|
116
|
-
| Design | ui, ux, design-system, accessibility |
|
|
117
|
-
| Productivity | workflow, automation, git |
|
|
118
|
-
|
|
119
|
-
## Tips for Effective Searches
|
|
120
|
-
|
|
121
|
-
1. **Use specific keywords**: "react testing" is better than just "testing"
|
|
122
|
-
2. **Try alternative terms**: If "deploy" doesn't work, try "deployment" or "ci-cd"
|
|
123
|
-
3. **Check popular sources**: Many skills come from `vercel-labs/agent-skills` or `ComposioHQ/awesome-claude-skills`
|
|
124
|
-
|
|
125
|
-
## When No Skills Are Found
|
|
126
|
-
|
|
127
|
-
If no relevant skills exist:
|
|
128
|
-
|
|
129
|
-
1. Acknowledge that no existing skill was found
|
|
130
|
-
2. Offer to help with the task directly using your general capabilities
|
|
131
|
-
3. Suggest the user could create their own skill with `npx skills init`
|
|
132
|
-
|
|
133
|
-
Example:
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
I searched for skills related to "xyz" but didn't find any matches.
|
|
137
|
-
I can still help you with this task directly! Would you like me to proceed?
|
|
138
|
-
|
|
139
|
-
If this is something you do often, you could create your own skill:
|
|
140
|
-
npx skills init my-xyz-skill
|
|
141
|
-
```
|
|
@@ -1,579 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: hono
|
|
3
|
-
description: Use when building Hono web applications or when the user asks about Hono APIs, routing, middleware, JSX, validation, testing, or streaming. TRIGGER when code imports from 'hono' or 'hono/*', or user mentions Hono. Use `npx hono request` to test endpoints.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Hono Skill
|
|
7
|
-
|
|
8
|
-
Build Hono web applications. This skill provides inline API knowledge for AI. Use `npx hono request` to test endpoints. If the `hono-docs` MCP server is configured, prefer its tools for the latest documentation over the inline reference.
|
|
9
|
-
|
|
10
|
-
## Hono CLI Usage
|
|
11
|
-
|
|
12
|
-
### Request Testing
|
|
13
|
-
|
|
14
|
-
Test endpoints without starting an HTTP server. Uses `app.request()` internally.
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
# GET request
|
|
18
|
-
npx hono request [file] -P /path
|
|
19
|
-
|
|
20
|
-
# POST request with JSON body
|
|
21
|
-
npx hono request [file] -X POST -P /api/users -d '{"name": "test"}'
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
**Note:** Do not pass credentials directly in CLI arguments. Use environment variables for sensitive values. `hono request` does not support Cloudflare Workers bindings (KV, D1, R2, etc.). When bindings are required, use `workers-fetch` instead:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
npx workers-fetch /path
|
|
28
|
-
npx workers-fetch -X POST -H "Content-Type:application/json" -d '{"name":"test"}' /api/users
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Hono API Reference
|
|
34
|
-
|
|
35
|
-
### App Constructor
|
|
36
|
-
|
|
37
|
-
```ts
|
|
38
|
-
import { Hono } from 'hono'
|
|
39
|
-
|
|
40
|
-
const app = new Hono()
|
|
41
|
-
|
|
42
|
-
// With TypeScript generics
|
|
43
|
-
type Env = {
|
|
44
|
-
Bindings: { DATABASE: D1Database; KV: KVNamespace }
|
|
45
|
-
Variables: { user: User }
|
|
46
|
-
}
|
|
47
|
-
const app = new Hono<Env>()
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Routing Methods
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
app.get('/path', handler)
|
|
54
|
-
app.post('/path', handler)
|
|
55
|
-
app.put('/path', handler)
|
|
56
|
-
app.delete('/path', handler)
|
|
57
|
-
app.patch('/path', handler)
|
|
58
|
-
app.options('/path', handler)
|
|
59
|
-
app.all('/path', handler) // all HTTP methods
|
|
60
|
-
app.on('PURGE', '/path', handler) // custom method
|
|
61
|
-
app.on(['PUT', 'DELETE'], '/path', handler) // multiple methods
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Routing Patterns
|
|
65
|
-
|
|
66
|
-
```ts
|
|
67
|
-
// Path parameters
|
|
68
|
-
app.get('/user/:name', (c) => {
|
|
69
|
-
const name = c.req.param('name')
|
|
70
|
-
return c.json({ name })
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
// Multiple params
|
|
74
|
-
app.get('/posts/:id/comments/:commentId', (c) => {
|
|
75
|
-
const { id, commentId } = c.req.param()
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
// Optional parameters
|
|
79
|
-
app.get('/api/animal/:type?', (c) => c.text('Animal!'))
|
|
80
|
-
|
|
81
|
-
// Wildcards
|
|
82
|
-
app.get('/wild/*/card', (c) => c.text('Wildcard'))
|
|
83
|
-
|
|
84
|
-
// Regexp constraints
|
|
85
|
-
app.get('/post/:date{[0-9]+}/:title{[a-z]+}', (c) => {
|
|
86
|
-
const { date, title } = c.req.param()
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
// Chained routes
|
|
90
|
-
app
|
|
91
|
-
.get('/endpoint', (c) => c.text('GET'))
|
|
92
|
-
.post((c) => c.text('POST'))
|
|
93
|
-
.delete((c) => c.text('DELETE'))
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### Route Grouping
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
// Using route()
|
|
100
|
-
const api = new Hono()
|
|
101
|
-
api.get('/users', (c) => c.json([]))
|
|
102
|
-
|
|
103
|
-
const app = new Hono()
|
|
104
|
-
app.route('/api', api) // mounts at /api/users
|
|
105
|
-
|
|
106
|
-
// Using basePath()
|
|
107
|
-
const app = new Hono().basePath('/api')
|
|
108
|
-
app.get('/users', (c) => c.json([])) // GET /api/users
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### Error Handling
|
|
112
|
-
|
|
113
|
-
```ts
|
|
114
|
-
app.notFound((c) => c.json({ message: 'Not Found' }, 404))
|
|
115
|
-
|
|
116
|
-
app.onError((err, c) => {
|
|
117
|
-
console.error(err)
|
|
118
|
-
return c.json({ message: 'Internal Server Error' }, 500)
|
|
119
|
-
})
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## Context (c)
|
|
125
|
-
|
|
126
|
-
### Response Methods
|
|
127
|
-
|
|
128
|
-
```ts
|
|
129
|
-
c.text('Hello') // text/plain
|
|
130
|
-
c.json({ message: 'Hello' }) // application/json
|
|
131
|
-
c.html('<h1>Hello</h1>') // text/html
|
|
132
|
-
c.redirect('/new-path') // 302 redirect
|
|
133
|
-
c.redirect('/new-path', 301) // 301 redirect
|
|
134
|
-
c.body('raw body', 200, headers) // raw response
|
|
135
|
-
c.notFound() // 404 response
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### Headers & Status
|
|
139
|
-
|
|
140
|
-
```ts
|
|
141
|
-
c.status(201)
|
|
142
|
-
c.header('X-Custom', 'value')
|
|
143
|
-
c.header('Cache-Control', 'no-store')
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### Variables (request-scoped data)
|
|
147
|
-
|
|
148
|
-
```ts
|
|
149
|
-
// In middleware
|
|
150
|
-
c.set('user', { id: 1, name: 'Alice' })
|
|
151
|
-
|
|
152
|
-
// In handler
|
|
153
|
-
const user = c.get('user')
|
|
154
|
-
// or
|
|
155
|
-
const user = c.var.user
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Environment (Cloudflare Workers)
|
|
159
|
-
|
|
160
|
-
```ts
|
|
161
|
-
const value = await c.env.KV.get('key')
|
|
162
|
-
const db = c.env.DATABASE
|
|
163
|
-
c.executionCtx.waitUntil(promise)
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Renderer
|
|
167
|
-
|
|
168
|
-
```ts
|
|
169
|
-
app.use(async (c, next) => {
|
|
170
|
-
c.setRenderer((content) =>
|
|
171
|
-
c.html(
|
|
172
|
-
<html><body>{content}</body></html>
|
|
173
|
-
)
|
|
174
|
-
)
|
|
175
|
-
await next()
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
app.get('/', (c) => c.render(<h1>Hello</h1>))
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## HonoRequest (c.req)
|
|
184
|
-
|
|
185
|
-
```ts
|
|
186
|
-
c.req.param('id') // path parameter
|
|
187
|
-
c.req.param() // all path params as object
|
|
188
|
-
c.req.query('page') // query string parameter
|
|
189
|
-
c.req.query() // all query params as object
|
|
190
|
-
c.req.queries('tags') // multiple values: ?tags=A&tags=B → ['A', 'B']
|
|
191
|
-
c.req.header('Authorization') // request header
|
|
192
|
-
c.req.header() // all headers (keys are lowercase)
|
|
193
|
-
|
|
194
|
-
// Body parsing
|
|
195
|
-
await c.req.json() // parse JSON body
|
|
196
|
-
await c.req.text() // parse text body
|
|
197
|
-
await c.req.formData() // parse as FormData
|
|
198
|
-
await c.req.parseBody() // parse multipart/form-data or urlencoded
|
|
199
|
-
await c.req.arrayBuffer() // parse as ArrayBuffer
|
|
200
|
-
await c.req.blob() // parse as Blob
|
|
201
|
-
|
|
202
|
-
// Validated data (used with validator middleware)
|
|
203
|
-
c.req.valid('json')
|
|
204
|
-
c.req.valid('query')
|
|
205
|
-
c.req.valid('form')
|
|
206
|
-
c.req.valid('param')
|
|
207
|
-
|
|
208
|
-
// Properties
|
|
209
|
-
c.req.url // full URL string
|
|
210
|
-
c.req.path // pathname
|
|
211
|
-
c.req.method // HTTP method
|
|
212
|
-
c.req.raw // underlying Request object
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Middleware
|
|
218
|
-
|
|
219
|
-
### Using Built-in Middleware
|
|
220
|
-
|
|
221
|
-
```ts
|
|
222
|
-
import { cors } from 'hono/cors'
|
|
223
|
-
import { logger } from 'hono/logger'
|
|
224
|
-
import { basicAuth } from 'hono/basic-auth'
|
|
225
|
-
import { prettyJSON } from 'hono/pretty-json'
|
|
226
|
-
import { secureHeaders } from 'hono/secure-headers'
|
|
227
|
-
import { etag } from 'hono/etag'
|
|
228
|
-
import { compress } from 'hono/compress'
|
|
229
|
-
import { poweredBy } from 'hono/powered-by'
|
|
230
|
-
import { timing } from 'hono/timing'
|
|
231
|
-
import { cache } from 'hono/cache'
|
|
232
|
-
import { bearerAuth } from 'hono/bearer-auth'
|
|
233
|
-
import { jwt } from 'hono/jwt'
|
|
234
|
-
import { csrf } from 'hono/csrf'
|
|
235
|
-
import { ipRestriction } from 'hono/ip-restriction'
|
|
236
|
-
import { bodyLimit } from 'hono/body-limit'
|
|
237
|
-
import { requestId } from 'hono/request-id'
|
|
238
|
-
import { methodOverride } from 'hono/method-override'
|
|
239
|
-
import { trailingSlash, trimTrailingSlash } from 'hono/trailing-slash'
|
|
240
|
-
|
|
241
|
-
// Registration
|
|
242
|
-
app.use(logger()) // all routes
|
|
243
|
-
app.use('/api/*', cors()) // specific path
|
|
244
|
-
app.post('/api/*', basicAuth({ username: 'admin', password: 'secret' }))
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Custom Middleware
|
|
248
|
-
|
|
249
|
-
```ts
|
|
250
|
-
// Inline
|
|
251
|
-
app.use(async (c, next) => {
|
|
252
|
-
const start = Date.now()
|
|
253
|
-
await next()
|
|
254
|
-
const elapsed = Date.now() - start
|
|
255
|
-
c.res.headers.set('X-Response-Time', `${elapsed}ms`)
|
|
256
|
-
})
|
|
257
|
-
|
|
258
|
-
// Reusable with createMiddleware
|
|
259
|
-
import { createMiddleware } from 'hono/factory'
|
|
260
|
-
|
|
261
|
-
const auth = createMiddleware(async (c, next) => {
|
|
262
|
-
const token = c.req.header('Authorization')
|
|
263
|
-
if (!token) return c.json({ error: 'Unauthorized' }, 401)
|
|
264
|
-
await next()
|
|
265
|
-
})
|
|
266
|
-
|
|
267
|
-
app.use('/api/*', auth)
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### Middleware Execution Order
|
|
271
|
-
|
|
272
|
-
Middleware executes in registration order. `await next()` calls the next middleware/handler, and code after `next()` runs on the way back:
|
|
273
|
-
|
|
274
|
-
```
|
|
275
|
-
Request → mw1 before → mw2 before → handler → mw2 after → mw1 after → Response
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
```ts
|
|
279
|
-
app.use(async (c, next) => {
|
|
280
|
-
// before handler
|
|
281
|
-
await next()
|
|
282
|
-
// after handler
|
|
283
|
-
})
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
---
|
|
287
|
-
|
|
288
|
-
## Validation
|
|
289
|
-
|
|
290
|
-
Validation targets: `json`, `form`, `query`, `header`, `param`, `cookie`.
|
|
291
|
-
|
|
292
|
-
### Zod Validator
|
|
293
|
-
|
|
294
|
-
```ts
|
|
295
|
-
import { zValidator } from '@hono/zod-validator'
|
|
296
|
-
import { z } from 'zod'
|
|
297
|
-
|
|
298
|
-
const schema = z.object({
|
|
299
|
-
title: z.string().min(1),
|
|
300
|
-
body: z.string()
|
|
301
|
-
})
|
|
302
|
-
|
|
303
|
-
app.post('/posts', zValidator('json', schema), (c) => {
|
|
304
|
-
const data = c.req.valid('json') // fully typed
|
|
305
|
-
return c.json(data, 201)
|
|
306
|
-
})
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### Valibot / Standard Schema Validator
|
|
310
|
-
|
|
311
|
-
```ts
|
|
312
|
-
import { sValidator } from '@hono/standard-validator'
|
|
313
|
-
import * as v from 'valibot'
|
|
314
|
-
|
|
315
|
-
const schema = v.object({ name: v.string(), age: v.number() })
|
|
316
|
-
|
|
317
|
-
app.post('/users', sValidator('json', schema), (c) => {
|
|
318
|
-
const data = c.req.valid('json')
|
|
319
|
-
return c.json(data, 201)
|
|
320
|
-
})
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
## JSX
|
|
326
|
-
|
|
327
|
-
### Setup
|
|
328
|
-
|
|
329
|
-
In `tsconfig.json`:
|
|
330
|
-
|
|
331
|
-
```json
|
|
332
|
-
{
|
|
333
|
-
"compilerOptions": {
|
|
334
|
-
"jsx": "react-jsx",
|
|
335
|
-
"jsxImportSource": "hono/jsx"
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Or use pragma: `/** @jsxImportSource hono/jsx */`
|
|
341
|
-
|
|
342
|
-
**Important:** Files using JSX must have a `.tsx` extension. Rename `.ts` to `.tsx` or the compiler will fail.
|
|
343
|
-
|
|
344
|
-
### Components
|
|
345
|
-
|
|
346
|
-
```tsx
|
|
347
|
-
import type { PropsWithChildren } from 'hono/jsx'
|
|
348
|
-
|
|
349
|
-
const Layout = (props: PropsWithChildren) => (
|
|
350
|
-
<html>
|
|
351
|
-
<head>
|
|
352
|
-
<title>My App</title>
|
|
353
|
-
</head>
|
|
354
|
-
<body>{props.children}</body>
|
|
355
|
-
</html>
|
|
356
|
-
)
|
|
357
|
-
|
|
358
|
-
const UserCard = ({ name }: { name: string }) => (
|
|
359
|
-
<div class="card">
|
|
360
|
-
<h2>{name}</h2>
|
|
361
|
-
</div>
|
|
362
|
-
)
|
|
363
|
-
|
|
364
|
-
app.get('/', (c) => {
|
|
365
|
-
return c.html(
|
|
366
|
-
<Layout>
|
|
367
|
-
<UserCard name="Alice" />
|
|
368
|
-
</Layout>
|
|
369
|
-
)
|
|
370
|
-
})
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
### jsxRenderer Middleware
|
|
374
|
-
|
|
375
|
-
Use `jsxRenderer` middleware for layouts. See `npx hono docs /docs/middleware/builtin/jsx-renderer` for details.
|
|
376
|
-
|
|
377
|
-
### Async Components
|
|
378
|
-
|
|
379
|
-
```tsx
|
|
380
|
-
const UserList = async () => {
|
|
381
|
-
const users = await fetchUsers()
|
|
382
|
-
return (
|
|
383
|
-
<ul>
|
|
384
|
-
{users.map((u) => (
|
|
385
|
-
<li>{u.name}</li>
|
|
386
|
-
))}
|
|
387
|
-
</ul>
|
|
388
|
-
)
|
|
389
|
-
}
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
### Fragments
|
|
393
|
-
|
|
394
|
-
```tsx
|
|
395
|
-
const Items = () => (
|
|
396
|
-
<>
|
|
397
|
-
<li>Item 1</li>
|
|
398
|
-
<li>Item 2</li>
|
|
399
|
-
</>
|
|
400
|
-
)
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
---
|
|
404
|
-
|
|
405
|
-
## Streaming
|
|
406
|
-
|
|
407
|
-
```ts
|
|
408
|
-
import { stream, streamText, streamSSE } from 'hono/streaming'
|
|
409
|
-
|
|
410
|
-
// Basic stream
|
|
411
|
-
app.get('/stream', (c) => {
|
|
412
|
-
return stream(c, async (stream) => {
|
|
413
|
-
stream.onAbort(() => console.log('Aborted'))
|
|
414
|
-
await stream.write(new Uint8Array([0x48, 0x65]))
|
|
415
|
-
await stream.pipe(readableStream)
|
|
416
|
-
})
|
|
417
|
-
})
|
|
418
|
-
|
|
419
|
-
// Text stream
|
|
420
|
-
app.get('/stream-text', (c) => {
|
|
421
|
-
return streamText(c, async (stream) => {
|
|
422
|
-
await stream.writeln('Hello')
|
|
423
|
-
await stream.sleep(1000)
|
|
424
|
-
await stream.write('World')
|
|
425
|
-
})
|
|
426
|
-
})
|
|
427
|
-
|
|
428
|
-
// Server-Sent Events
|
|
429
|
-
app.get('/sse', (c) => {
|
|
430
|
-
return streamSSE(c, async (stream) => {
|
|
431
|
-
let id = 0
|
|
432
|
-
while (true) {
|
|
433
|
-
await stream.writeSSE({
|
|
434
|
-
data: JSON.stringify({ time: new Date().toISOString() }),
|
|
435
|
-
event: 'time-update',
|
|
436
|
-
id: String(id++)
|
|
437
|
-
})
|
|
438
|
-
await stream.sleep(1000)
|
|
439
|
-
}
|
|
440
|
-
})
|
|
441
|
-
})
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
---
|
|
445
|
-
|
|
446
|
-
## Testing with app.request()
|
|
447
|
-
|
|
448
|
-
Test endpoints without starting an HTTP server:
|
|
449
|
-
|
|
450
|
-
```ts
|
|
451
|
-
// GET
|
|
452
|
-
const res = await app.request('/posts')
|
|
453
|
-
expect(res.status).toBe(200)
|
|
454
|
-
expect(await res.json()).toEqual({ posts: [] })
|
|
455
|
-
|
|
456
|
-
// POST with JSON
|
|
457
|
-
const res = await app.request('/posts', {
|
|
458
|
-
method: 'POST',
|
|
459
|
-
body: JSON.stringify({ title: 'Hello' }),
|
|
460
|
-
headers: { 'Content-Type': 'application/json' }
|
|
461
|
-
})
|
|
462
|
-
|
|
463
|
-
// POST with FormData
|
|
464
|
-
const formData = new FormData()
|
|
465
|
-
formData.append('name', 'Alice')
|
|
466
|
-
const res = await app.request('/users', { method: 'POST', body: formData })
|
|
467
|
-
|
|
468
|
-
// With mock env (Cloudflare Workers bindings)
|
|
469
|
-
const res = await app.request('/api/data', {}, { KV: mockKV, DATABASE: mockDB })
|
|
470
|
-
|
|
471
|
-
// Using Request object
|
|
472
|
-
const req = new Request('http://localhost/api', { method: 'DELETE' })
|
|
473
|
-
const res = await app.request(req)
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
---
|
|
477
|
-
|
|
478
|
-
## Hono Client (RPC)
|
|
479
|
-
|
|
480
|
-
Type-safe API client using shared types between server and client.
|
|
481
|
-
|
|
482
|
-
**IMPORTANT: Routes MUST be chained for type inference to work. Without chaining, the client cannot infer route types.**
|
|
483
|
-
|
|
484
|
-
```ts
|
|
485
|
-
// Server: routes MUST be chained to preserve types
|
|
486
|
-
const route = app
|
|
487
|
-
.post('/posts', zValidator('json', schema), (c) => {
|
|
488
|
-
return c.json({ ok: true }, 201)
|
|
489
|
-
})
|
|
490
|
-
.get('/posts', (c) => {
|
|
491
|
-
return c.json({ posts: [] })
|
|
492
|
-
})
|
|
493
|
-
export type AppType = typeof route
|
|
494
|
-
|
|
495
|
-
// Client: use hc() with the exported type
|
|
496
|
-
import { hc } from 'hono/client'
|
|
497
|
-
import type { AppType } from './server'
|
|
498
|
-
|
|
499
|
-
const client = hc<AppType>('http://localhost:8787/')
|
|
500
|
-
const res = await client.posts.$post({ json: { title: 'Hello' } })
|
|
501
|
-
const data = await res.json() // fully typed
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
Type utilities:
|
|
505
|
-
|
|
506
|
-
```ts
|
|
507
|
-
import type { InferRequestType, InferResponseType } from 'hono/client'
|
|
508
|
-
|
|
509
|
-
type ReqType = InferRequestType<typeof client.posts.$post>
|
|
510
|
-
type ResType = InferResponseType<typeof client.posts.$post, 200>
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
---
|
|
514
|
-
|
|
515
|
-
## Helpers
|
|
516
|
-
|
|
517
|
-
Helpers are utility functions imported from `hono/<helper-name>`:
|
|
518
|
-
|
|
519
|
-
```ts
|
|
520
|
-
import { getConnInfo } from 'hono/conninfo'
|
|
521
|
-
import { getCookie, setCookie, deleteCookie } from 'hono/cookie'
|
|
522
|
-
import { css, Style } from 'hono/css'
|
|
523
|
-
import { createFactory } from 'hono/factory'
|
|
524
|
-
import { html, raw } from 'hono/html'
|
|
525
|
-
import { stream, streamText, streamSSE } from 'hono/streaming'
|
|
526
|
-
import { testClient } from 'hono/testing'
|
|
527
|
-
import { upgradeWebSocket } from 'hono/cloudflare-workers' // or other adapter
|
|
528
|
-
```
|
|
529
|
-
|
|
530
|
-
Available helpers: Accepts, Adapter, ConnInfo, Cookie, css, Dev, Factory, html, JWT, Proxy, Route, SSG, Streaming, Testing, WebSocket.
|
|
531
|
-
|
|
532
|
-
For details, use `npx hono docs /docs/helpers/<helper-name>`.
|
|
533
|
-
|
|
534
|
-
### Factory
|
|
535
|
-
|
|
536
|
-
Use `createFactory` to define `Env` once and share it across app, middleware, and handlers:
|
|
537
|
-
|
|
538
|
-
```ts
|
|
539
|
-
import { createFactory } from 'hono/factory'
|
|
540
|
-
|
|
541
|
-
const factory = createFactory<Env>()
|
|
542
|
-
|
|
543
|
-
// Create app (Env type is inherited)
|
|
544
|
-
const app = factory.createApp()
|
|
545
|
-
|
|
546
|
-
// Create middleware (Env type is inherited, no need to pass generics)
|
|
547
|
-
const mw = factory.createMiddleware(async (c, next) => {
|
|
548
|
-
await next()
|
|
549
|
-
})
|
|
550
|
-
|
|
551
|
-
// Create handlers separately (preserves type inference)
|
|
552
|
-
const handlers = factory.createHandlers(logger(), (c) => c.json({ message: 'Hello' }))
|
|
553
|
-
app.get('/api', ...handlers)
|
|
554
|
-
```
|
|
555
|
-
|
|
556
|
-
---
|
|
557
|
-
|
|
558
|
-
## Best Practices
|
|
559
|
-
|
|
560
|
-
- Write handlers inline in route definitions for proper type inference of path params.
|
|
561
|
-
- Use `app.route()` to organize large apps by feature, not Rails-style controllers.
|
|
562
|
-
- Use `createFactory()` to share Env type across app, middleware, and handlers.
|
|
563
|
-
- Use `c.set()`/`c.get()` to pass data between middleware and handlers.
|
|
564
|
-
- Chain validators for multiple request parts (param + query + json).
|
|
565
|
-
- Export app type for RPC: `export type AppType = typeof routes`
|
|
566
|
-
- Use `app.request()` for testing — no server startup needed.
|
|
567
|
-
|
|
568
|
-
## Adapters
|
|
569
|
-
|
|
570
|
-
Hono runs on multiple runtimes. The default export works for Cloudflare Workers, Deno, and Bun. For Node.js, use the Node adapter:
|
|
571
|
-
|
|
572
|
-
```ts
|
|
573
|
-
// Cloudflare Workers / Deno / Bun
|
|
574
|
-
export default app
|
|
575
|
-
|
|
576
|
-
// Node.js
|
|
577
|
-
import { serve } from '@hono/node-server'
|
|
578
|
-
serve(app)
|
|
579
|
-
```
|