quiver-cli 0.1.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.
Files changed (281) hide show
  1. package/README.md +188 -0
  2. package/bin/quiver-cli.mjs +2 -0
  3. package/dist/cli.js +3074 -0
  4. package/package.json +55 -0
  5. package/template/.agents/AGENTS.md +25 -0
  6. package/template/.agents/commands/cp.md +116 -0
  7. package/template/.agents/commands/next-setup.md +1064 -0
  8. package/template/.agents/commands/tf-readme.md +38 -0
  9. package/template/.agents/config.json +60 -0
  10. package/template/.agents/skills/agent-browser/SKILL.md +55 -0
  11. package/template/.agents/skills/apps/skybridge/SKILL.md +46 -0
  12. package/template/.agents/skills/apps/skybridge/references/architecture.md +175 -0
  13. package/template/.agents/skills/apps/skybridge/references/copy-template.md +24 -0
  14. package/template/.agents/skills/apps/skybridge/references/csp.md +33 -0
  15. package/template/.agents/skills/apps/skybridge/references/deploy.md +33 -0
  16. package/template/.agents/skills/apps/skybridge/references/discover.md +84 -0
  17. package/template/.agents/skills/apps/skybridge/references/download-file.md +77 -0
  18. package/template/.agents/skills/apps/skybridge/references/fetch-and-render-data.md +151 -0
  19. package/template/.agents/skills/apps/skybridge/references/oauth.md +115 -0
  20. package/template/.agents/skills/apps/skybridge/references/open-external-links.md +71 -0
  21. package/template/.agents/skills/apps/skybridge/references/prompt-llm.md +20 -0
  22. package/template/.agents/skills/apps/skybridge/references/publish.md +19 -0
  23. package/template/.agents/skills/apps/skybridge/references/run-locally.md +51 -0
  24. package/template/.agents/skills/apps/skybridge/references/state-and-context.md +151 -0
  25. package/template/.agents/skills/apps/skybridge/references/ui-guidelines.md +205 -0
  26. package/template/.agents/skills/code/cleanup/SKILL.md +26 -0
  27. package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +3810 -0
  28. package/template/.agents/skills/code/vercel-react-best-practices/README.md +123 -0
  29. package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +149 -0
  30. package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +15 -0
  31. package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +46 -0
  32. package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +28 -0
  33. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  34. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  35. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  36. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  37. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  38. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  39. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  40. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  41. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +28 -0
  42. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  43. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  44. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  45. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  46. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  47. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  48. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  49. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  50. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  51. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  52. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  53. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  54. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  55. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  56. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  57. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  58. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  59. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  60. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  61. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  62. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  63. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  64. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  65. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  66. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  67. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  68. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  69. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  70. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  71. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  72. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  73. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  74. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  75. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  76. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  77. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  78. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  79. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  80. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  81. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  82. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  83. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  84. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  85. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  86. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  87. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  88. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  89. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  90. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  91. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  92. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  93. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  94. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  95. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  96. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  97. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  98. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  99. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  100. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  101. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  102. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +38 -0
  103. package/template/.agents/skills/data/prisma-cli/SKILL.md +247 -0
  104. package/template/.agents/skills/data/prisma-cli/references/db-execute.md +78 -0
  105. package/template/.agents/skills/data/prisma-cli/references/db-pull.md +185 -0
  106. package/template/.agents/skills/data/prisma-cli/references/db-push.md +148 -0
  107. package/template/.agents/skills/data/prisma-cli/references/db-seed.md +188 -0
  108. package/template/.agents/skills/data/prisma-cli/references/debug.md +46 -0
  109. package/template/.agents/skills/data/prisma-cli/references/dev.md +157 -0
  110. package/template/.agents/skills/data/prisma-cli/references/format.md +48 -0
  111. package/template/.agents/skills/data/prisma-cli/references/generate.md +173 -0
  112. package/template/.agents/skills/data/prisma-cli/references/init.md +136 -0
  113. package/template/.agents/skills/data/prisma-cli/references/mcp.md +38 -0
  114. package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +127 -0
  115. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +145 -0
  116. package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +89 -0
  117. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +78 -0
  118. package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +57 -0
  119. package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +65 -0
  120. package/template/.agents/skills/data/prisma-cli/references/studio.md +137 -0
  121. package/template/.agents/skills/data/prisma-cli/references/validate.md +53 -0
  122. package/template/.agents/skills/data/prisma-client-api/SKILL.md +216 -0
  123. package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +223 -0
  124. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +208 -0
  125. package/template/.agents/skills/data/prisma-client-api/references/filters.md +256 -0
  126. package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +281 -0
  127. package/template/.agents/skills/data/prisma-client-api/references/query-options.md +276 -0
  128. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +194 -0
  129. package/template/.agents/skills/data/prisma-client-api/references/relations.md +308 -0
  130. package/template/.agents/skills/data/prisma-client-api/references/transactions.md +184 -0
  131. package/template/.agents/skills/design/impeccable/SKILL.md +176 -0
  132. package/template/.agents/skills/design/impeccable/reference/adapt.md +311 -0
  133. package/template/.agents/skills/design/impeccable/reference/animate.md +201 -0
  134. package/template/.agents/skills/design/impeccable/reference/audit.md +133 -0
  135. package/template/.agents/skills/design/impeccable/reference/bolder.md +113 -0
  136. package/template/.agents/skills/design/impeccable/reference/brand.md +108 -0
  137. package/template/.agents/skills/design/impeccable/reference/clarify.md +288 -0
  138. package/template/.agents/skills/design/impeccable/reference/codex.md +105 -0
  139. package/template/.agents/skills/design/impeccable/reference/colorize.md +257 -0
  140. package/template/.agents/skills/design/impeccable/reference/craft.md +123 -0
  141. package/template/.agents/skills/design/impeccable/reference/critique.md +767 -0
  142. package/template/.agents/skills/design/impeccable/reference/delight.md +302 -0
  143. package/template/.agents/skills/design/impeccable/reference/distill.md +111 -0
  144. package/template/.agents/skills/design/impeccable/reference/document.md +429 -0
  145. package/template/.agents/skills/design/impeccable/reference/extract.md +69 -0
  146. package/template/.agents/skills/design/impeccable/reference/harden.md +347 -0
  147. package/template/.agents/skills/design/impeccable/reference/init.md +172 -0
  148. package/template/.agents/skills/design/impeccable/reference/interaction-design.md +189 -0
  149. package/template/.agents/skills/design/impeccable/reference/layout.md +161 -0
  150. package/template/.agents/skills/design/impeccable/reference/live.md +718 -0
  151. package/template/.agents/skills/design/impeccable/reference/onboard.md +234 -0
  152. package/template/.agents/skills/design/impeccable/reference/optimize.md +258 -0
  153. package/template/.agents/skills/design/impeccable/reference/overdrive.md +130 -0
  154. package/template/.agents/skills/design/impeccable/reference/polish.md +241 -0
  155. package/template/.agents/skills/design/impeccable/reference/product.md +60 -0
  156. package/template/.agents/skills/design/impeccable/reference/quieter.md +99 -0
  157. package/template/.agents/skills/design/impeccable/reference/shape.md +165 -0
  158. package/template/.agents/skills/design/impeccable/reference/typeset.md +279 -0
  159. package/template/.agents/skills/design/impeccable/scripts/cleanup-deprecated.mjs +284 -0
  160. package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +94 -0
  161. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +225 -0
  162. package/template/.agents/skills/design/impeccable/scripts/context.mjs +270 -0
  163. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +242 -0
  164. package/template/.agents/skills/design/impeccable/scripts/design-parser.mjs +835 -0
  165. package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +198 -0
  166. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +21 -0
  167. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +1733 -0
  168. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +244 -0
  169. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +4551 -0
  170. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
  171. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
  172. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
  173. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
  174. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
  175. package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  176. package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +12 -0
  177. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +198 -0
  178. package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  179. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
  180. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +2316 -0
  181. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +124 -0
  182. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +101 -0
  183. package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +7 -0
  184. package/template/.agents/skills/design/impeccable/scripts/impeccable-paths.mjs +126 -0
  185. package/template/.agents/skills/design/impeccable/scripts/is-generated.mjs +69 -0
  186. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +812 -0
  187. package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +123 -0
  188. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +10316 -0
  189. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
  190. package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +75 -0
  191. package/template/.agents/skills/design/impeccable/scripts/live-completion.mjs +19 -0
  192. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
  193. package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
  194. package/template/.agents/skills/design/impeccable/scripts/live-event-validation.mjs +136 -0
  195. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +557 -0
  196. package/template/.agents/skills/design/impeccable/scripts/live-insert-ui.mjs +458 -0
  197. package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +272 -0
  198. package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
  199. package/template/.agents/skills/design/impeccable/scripts/live-manual-edits-buffer.mjs +152 -0
  200. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +379 -0
  201. package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +94 -0
  202. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +2322 -0
  203. package/template/.agents/skills/design/impeccable/scripts/live-session-store.mjs +289 -0
  204. package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +61 -0
  205. package/template/.agents/skills/design/impeccable/scripts/live-svelte-component.mjs +826 -0
  206. package/template/.agents/skills/design/impeccable/scripts/live-sveltekit-adapter.mjs +274 -0
  207. package/template/.agents/skills/design/impeccable/scripts/live-ui-core.mjs +179 -0
  208. package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +894 -0
  209. package/template/.agents/skills/design/impeccable/scripts/live.mjs +246 -0
  210. package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +14 -0
  211. package/template/.agents/skills/design/impeccable/scripts/palette.mjs +633 -0
  212. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +214 -0
  213. package/template/.agents/skills/design/shadcn/SKILL.md +242 -0
  214. package/template/.agents/skills/design/shadcn/agents/openai.yml +5 -0
  215. package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
  216. package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
  217. package/template/.agents/skills/design/shadcn/cli.md +257 -0
  218. package/template/.agents/skills/design/shadcn/customization.md +202 -0
  219. package/template/.agents/skills/design/shadcn/evals/evals.json +47 -0
  220. package/template/.agents/skills/design/shadcn/mcp.md +94 -0
  221. package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +306 -0
  222. package/template/.agents/skills/design/shadcn/rules/composition.md +195 -0
  223. package/template/.agents/skills/design/shadcn/rules/forms.md +192 -0
  224. package/template/.agents/skills/design/shadcn/rules/icons.md +101 -0
  225. package/template/.agents/skills/design/shadcn/rules/styling.md +162 -0
  226. package/template/.agents/skills/find-skills/SKILL.md +142 -0
  227. package/template/.agents/skills/integrations/langfuse/SKILL.md +142 -0
  228. package/template/.agents/skills/integrations/langfuse/references/cli.md +52 -0
  229. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +100 -0
  230. package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +134 -0
  231. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +288 -0
  232. package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +234 -0
  233. package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +175 -0
  234. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +52 -0
  235. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +88 -0
  236. package/template/.agents/skills/integrations/posthog/SKILL.md +102 -0
  237. package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +63 -0
  238. package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +77 -0
  239. package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +57 -0
  240. package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +140 -0
  241. package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +490 -0
  242. package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +45 -0
  243. package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +139 -0
  244. package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +302 -0
  245. package/template/.agents/skills/integrations/posthog/references/identify-users.md +202 -0
  246. package/template/.agents/skills/integrations/posthog/references/integration-example.md +706 -0
  247. package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +385 -0
  248. package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +43 -0
  249. package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +37 -0
  250. package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +22 -0
  251. package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +38 -0
  252. package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +200 -0
  253. package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +62 -0
  254. package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +197 -0
  255. package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +397 -0
  256. package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +98 -0
  257. package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +120 -0
  258. package/template/.agents/skills/repo/repo-ci/SKILL.md +265 -0
  259. package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +129 -0
  260. package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +800 -0
  261. package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +47 -0
  262. package/template/.agents/skills/repo/repo-init-node/SKILL.md +196 -0
  263. package/template/.agents/skills/skill-creator/LICENSE.txt +202 -0
  264. package/template/.agents/skills/skill-creator/SKILL.md +485 -0
  265. package/template/.agents/skills/skill-creator/agents/analyzer.md +274 -0
  266. package/template/.agents/skills/skill-creator/agents/comparator.md +202 -0
  267. package/template/.agents/skills/skill-creator/agents/grader.md +223 -0
  268. package/template/.agents/skills/skill-creator/assets/eval_review.html +146 -0
  269. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  270. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  271. package/template/.agents/skills/skill-creator/references/schemas.md +430 -0
  272. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  273. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  274. package/template/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
  275. package/template/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
  276. package/template/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
  277. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
  278. package/template/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
  279. package/template/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
  280. package/template/.agents/skills/skill-creator/scripts/utils.py +47 -0
  281. package/template/.agents/upstreams.json +80 -0
@@ -0,0 +1,151 @@
1
+ # Fetch and render data
2
+
3
+ - Fetch structured data and render with custom UI → `view`
4
+ - Fetch textual data or trigger actions → `tool`
5
+ - Tool can be triggered by user interaction within a view UI
6
+
7
+ ## Project Structure
8
+
9
+ ```
10
+ my-app/
11
+ ├── src/
12
+ │ ├── server.ts # McpServer with tool + view registration
13
+ │ ├── helpers.ts # Type-safe hooks via generateHelpers
14
+ │ ├── index.css # Global CSS, must be imported in every view
15
+ │ └── views/ # React components (filename = view component name)
16
+ │ └── search-flights.tsx
17
+ └── package.json
18
+ ```
19
+
20
+ **Naming convention**: View filename must match the `view.component` name using kebab-case.
21
+ `search_flights` → register with `view.component: "search-flights"` → file `views/search-flights.tsx`
22
+
23
+ ## Server Handlers
24
+
25
+ Output:
26
+ - **`structuredContent`**: concise JSON the view uses and the model reads. Include only what the model should see.
27
+ - **`content`** (optional): narration (Markdown or plaintext) shown to LLM
28
+ - **`_meta`** (optional): large or sensitive data exclusively for the view. _meta never reaches the model.
29
+
30
+ Annotations (set `true` when):
31
+ - **`readOnlyHint`**: only reads data, no side effects
32
+ - **`openWorldHint`**: publishes content or reaches outside user's account
33
+ - **`destructiveHint`**: deletes or overwrites user data
34
+
35
+ **Example**:
36
+
37
+ - src/server.ts
38
+ ```typescript
39
+ import { McpServer } from "skybridge/server";
40
+ import { z } from "zod";
41
+
42
+ const server = new McpServer(
43
+ { name: "my-app", version: "0.0.1" },
44
+ { capabilities: {} },
45
+ )
46
+ .registerTool(
47
+ {
48
+ name: "search-flights",
49
+ description: "Search for flights",
50
+ inputSchema: { destination: z.string(), dates: z.string() },
51
+ annotations: { readOnlyHint: true, openWorldHint: false, destructiveHint: false },
52
+ view: {
53
+ component: "search-flights",
54
+ description: "Flight results",
55
+ },
56
+ },
57
+ async ({ destination, dates }) => {
58
+ const flights = await fetchFlights(destination, dates);
59
+ const structuredContent = { flights: [] };
60
+ const _meta = { images: [] }
61
+ for (const { id, departureTime, price, airlineLogo } of flights) {
62
+ structuredContent.flights.push({ id, departureTime, price });
63
+ _meta.images.push(airlineLogo);
64
+ }
65
+ return {
66
+ structuredContent,
67
+ content: [{ type: "text", text: `Found ${flights.length} flights.` }],
68
+ _meta // mind the underscore prefix
69
+ };
70
+ }
71
+ )
72
+ .registerTool(
73
+ {
74
+ name: "book-flight",
75
+ description: "Book a flight",
76
+ inputSchema: { flightId: z.string() },
77
+ annotations: { readOnlyHint: false, openWorldHint: false, destructiveHint: false },
78
+ },
79
+ async ({ flightId }) => {
80
+ const confirmationId = await bookFlight(flightId);
81
+ return {
82
+ structuredContent: { confirmationId },
83
+ content: [{ type: "text", text: `Flight booked. Confirmation: ${confirmationId}` }],
84
+ };
85
+ }
86
+ );
87
+
88
+ server.run();
89
+
90
+ export type AppType = typeof server;
91
+ ```
92
+
93
+ ## UI Components
94
+
95
+ - generate type-safe hooks with `generateHelpers`
96
+ - `useToolInfo`: access view input/output
97
+ - `useCallTool`: trigger tool from UI
98
+
99
+ **Example**:
100
+
101
+ - src/helpers.ts
102
+ ```typescript
103
+ import { generateHelpers } from "skybridge/web";
104
+ import type { AppType } from "./server.js";
105
+
106
+ export const { useToolInfo, useCallTool } = generateHelpers<AppType>();
107
+ ```
108
+
109
+ - src/views/search-flights.tsx
110
+ ```tsx
111
+ import "@/index.css";
112
+ import { useToolInfo, useCallTool } from "../helpers.js";
113
+
114
+ export default function SearchFlights() {
115
+ const { input, output, isPending, responseMetadata } = useToolInfo<"search-flights">();
116
+ const {
117
+ callTool, // returns void, use `data` to get the actual output
118
+ data: bookFlightOutput,
119
+ isPending: isBooking,
120
+ isSuccess: isBooked,
121
+ } = useCallTool("book-flight");
122
+
123
+ if (isPending) {
124
+ return <div>Searching flights to {input?.destination}...</div>;
125
+ }
126
+
127
+ if (isBooked) {
128
+ return <div>Booked! Confirmation: {bookFlightOutput.structuredContent.confirmationId}</div>;
129
+ }
130
+
131
+ return (
132
+ <div>
133
+ <h2>Flights to {input.destination}</h2>
134
+ <ul>
135
+ {output.flights.map((flight, i) => (
136
+ <li key={i}>
137
+ <img src={responseMetadata.images[i]} />
138
+ {flight.departureTime} - ${flight.price}
139
+ <button
140
+ onClick={() => callTool({ flightId: flight.id })}
141
+ disabled={isBooking}
142
+ >
143
+ {isBooking ? "Booking..." : "Book"}
144
+ </button>
145
+ </li>
146
+ ))}
147
+ </ul>
148
+ </div>
149
+ );
150
+ }
151
+ ```
@@ -0,0 +1,115 @@
1
+ # OAuth Authentication
2
+
3
+ Enable user authentication so tools can access user-specific data.
4
+
5
+ ## How it works
6
+
7
+ 1. MCP server exposes OAuth discovery endpoints
8
+ 2. Host reads them, walks the user through OAuth, refreshes tokens
9
+ 3. Host calls `/mcp` with `Authorization: Bearer <token>`
10
+ 4. `requireBearerAuth` middleware verifies the token and rejects with HTTP 401 if invalid — tool handlers never run unauthenticated
11
+ 5. Tool handlers read user identity from `extra.authInfo`
12
+
13
+ ## 1. Discovery endpoints
14
+
15
+ Mount OAuth metadata so MCP clients can discover the authorization server:
16
+
17
+ ```typescript
18
+ // src/server.ts
19
+ import { mcpAuthMetadataRouter } from "@modelcontextprotocol/sdk/server/auth/router.js";
20
+ import { McpServer } from "skybridge/server";
21
+
22
+ const server = new McpServer(
23
+ { name: "my-app", version: "0.0.1" },
24
+ { capabilities: {} },
25
+ ).use(
26
+ mcpAuthMetadataRouter({
27
+ oauthMetadata: {
28
+ issuer: "https://your-oauth-provider.com",
29
+ authorization_endpoint: "https://your-oauth-provider.com/oauth2/authorize",
30
+ token_endpoint: "https://your-oauth-provider.com/oauth2/token",
31
+ response_types_supported: ["code"],
32
+ grant_types_supported: ["authorization_code", "refresh_token"],
33
+ code_challenge_methods_supported: ["S256"],
34
+ },
35
+ // SERVER_URL: this server's public URL (localhost:3000, Alpic tunnel, or prod)
36
+ resourceServerUrl: new URL(process.env.SERVER_URL),
37
+ }),
38
+ );
39
+ ```
40
+
41
+ This serves `/.well-known/oauth-authorization-server` and `/.well-known/oauth-protected-resource`.
42
+
43
+ ## 2. Write a token verifier
44
+
45
+ `requireBearerAuth` takes a `verifier` with `verifyAccessToken(token): Promise<AuthInfo>`. Verify the provider's JWT against its JWKS:
46
+
47
+ ⚠️ Fetch your provider's docs for the exact JWKS URL and issuer.
48
+
49
+ ```typescript
50
+ // src/auth.ts
51
+ import { InvalidTokenError } from "@modelcontextprotocol/sdk/server/auth/errors.js";
52
+ import type { AuthInfo } from "@modelcontextprotocol/sdk/server/auth/types.js";
53
+ import * as jose from "jose";
54
+
55
+ const jwks = jose.createRemoteJWKSet(
56
+ new URL("https://your-oauth-provider.com/oauth2/jwks"),
57
+ );
58
+
59
+ export async function verifyAccessToken(token: string): Promise<AuthInfo> {
60
+ const { payload } = await jose.jwtVerify(token, jwks, {
61
+ issuer: "https://your-oauth-provider.com",
62
+ });
63
+
64
+ if (!payload.sub || typeof payload.sub !== "string") {
65
+ throw new InvalidTokenError("missing sub claim");
66
+ }
67
+
68
+ return {
69
+ token,
70
+ clientId: (payload.client_id ?? payload.azp ?? "") as string,
71
+ scopes: typeof payload.scope === "string" ? payload.scope.split(" ") : [],
72
+ expiresAt: payload.exp,
73
+ extra: { sub: payload.sub },
74
+ };
75
+ }
76
+ ```
77
+
78
+ ## 3. Enforce auth on /mcp
79
+
80
+ ```typescript
81
+ // src/server.ts (continued)
82
+ import { requireBearerAuth } from "@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js";
83
+ import { verifyAccessToken } from "./auth.js";
84
+
85
+ server.use(
86
+ "/mcp",
87
+ requireBearerAuth({
88
+ verifier: { verifyAccessToken },
89
+ requiredScopes: ["openid", "email", "profile"], // optional
90
+ }),
91
+ );
92
+ ```
93
+
94
+ Unauthenticated requests get HTTP 401 before any tool handler runs.
95
+
96
+ ## 4. Read auth in handlers
97
+
98
+ ```typescript
99
+ import type { AuthInfo } from "@modelcontextprotocol/sdk/server/auth/types.js";
100
+
101
+ server.registerTool(
102
+ {
103
+ name: "get-orders",
104
+ description: "Get user orders",
105
+ },
106
+ async (_input, extra) => {
107
+ const auth = extra.authInfo as AuthInfo;
108
+ const orders = await fetchOrders(auth.extra?.sub as string);
109
+ return {
110
+ structuredContent: { orders },
111
+ content: [{ type: "text", text: `Found ${orders.length} orders` }],
112
+ };
113
+ },
114
+ );
115
+ ```
@@ -0,0 +1,71 @@
1
+ # Open external links
2
+
3
+ - "Open in App" button URL → `useSetOpenInAppUrl`
4
+ - External redirect → `useOpenExternal`
5
+
6
+ ## "Open in App" button
7
+
8
+ Top right corner in fullscreen mode. Set programmatically. If the origin matches the view server URL, ChatGPT navigates to the full href (any path). If the origin differs, ChatGPT falls back to the view server URL.
9
+
10
+ **Example**:
11
+ ```tsx
12
+ import { useSetOpenInAppUrl } from "skybridge/web";
13
+ import { useEffect } from "react";
14
+
15
+ function ProductDetail({ productId }: { productId: string }) {
16
+ const setOpenInAppUrl = useSetOpenInAppUrl();
17
+
18
+ useEffect(() => {
19
+ setOpenInAppUrl(`https://example.com/products/${productId}`).catch(console.error);
20
+ }, [productId]);
21
+
22
+ return <div>{/* Product details */}</div>;
23
+ }
24
+ ```
25
+
26
+ ## External redirect
27
+
28
+ **Example**:
29
+ ```tsx
30
+ import { useOpenExternal } from "skybridge/web";
31
+
32
+ function ExternalLink() {
33
+ const openExternal = useOpenExternal();
34
+
35
+ return (
36
+ <button onClick={() => openExternal("https://example.com")}>
37
+ Visit Website
38
+ </button>
39
+ );
40
+ }
41
+ ```
42
+
43
+
44
+ You can control return-path behavior with an optional second argument (ChatGPT only):
45
+
46
+ ```tsx
47
+ openExternal("https://example.com", { redirectUrl: false });
48
+ ```
49
+
50
+ Use `redirectUrl: false` to skip automatic `?redirectUrl=...` appending.
51
+
52
+ Shows confirmation dialog unless domain is whitelisted:
53
+
54
+ ```typescript
55
+ // src/server.ts
56
+ server.registerTool(
57
+ {
58
+ name: "search-flights",
59
+ description: "Search for flights",
60
+ inputSchema: { destination: z.string(), dates: z.string() },
61
+ view: {
62
+ component: "search-flights",
63
+ description: "Flight results",
64
+ csp: {
65
+ redirectDomains: ["https://airline.example.com"],
66
+ },
67
+ },
68
+ },
69
+ async ({ destination, dates }) => { /* ... */ }
70
+ );
71
+ ```
@@ -0,0 +1,20 @@
1
+ # Prompt model
2
+
3
+ Trigger an LLM completion from user interaction with `useSendFollowUpMessage`.
4
+
5
+ **Example:**
6
+ ```tsx
7
+ import { useSendFollowUpMessage } from "skybridge/web";
8
+
9
+ export function FindBestFlightButton() {
10
+ const sendMessage = useSendFollowUpMessage();
11
+
12
+ return (
13
+ <button onClick={() => sendMessage({
14
+ prompt: "Find the best flight option, based on user preferences and agenda."
15
+ })}>
16
+ Find Best Flight
17
+ </button>
18
+ );
19
+ }
20
+ ```
@@ -0,0 +1,19 @@
1
+ # Publish to Directories
2
+
3
+ ## 1. Audit Annotations
4
+
5
+ **Common cause of rejection.** Ensure all tools and views have correct annotations. See [fetch-and-render-data.md](fetch-and-render-data.md).
6
+
7
+ ## 2. Audit CSP
8
+
9
+ Ensure all external domains are declared in the tool's `view.csp`. See [csp.md](csp.md).
10
+
11
+ ## 3. Submit
12
+
13
+ ### ChatGPT
14
+ Guide user to submit the app at [platform.openai.com](https://platform.openai.com) → Apps.
15
+
16
+ OpenAI verifies app ownership via `/.well-known/openai-apps-challenge`. Guide user to Alpic **Distribution** tab → **OpenAI Apps Verification Token** → paste the token from OpenAI.
17
+
18
+ ### Claude
19
+ Guide user to submit the app on the [Anthropic Connectors Directory FAQ](https://support.claude.com/en/articles/11596036-anthropic-connectors-directory-faq).
@@ -0,0 +1,51 @@
1
+ # Running Locally Workflow
2
+
3
+ ## 1. Start Dev Server
4
+
5
+ Install dependencies and start the dev server in the background:
6
+
7
+ ```bash
8
+ {pm} install && {pm} run dev
9
+ ```
10
+
11
+ For Deno projects, use `deno task dev` instead.
12
+
13
+ When started, output the local MCP server and devtools URL.
14
+
15
+ Hot reload enabled (nodemon for server, HMR for views).
16
+
17
+ ## 2. Connect to AI Assistants (Optional)
18
+
19
+ Ask user if they want to test in ChatGPT/Claude or just use local devtools.
20
+
21
+ If yes, expose the local server via Alpic tunnel:
22
+
23
+ ```bash
24
+ alpic tunnel --port 3000
25
+ ```
26
+
27
+ Extract the forwarding URL from Alpic tunnel output (e.g., `https://cool-marmot-fondue-420.alpic.dev`).
28
+
29
+ ### Connect to ChatGPT
30
+ Provide the user with these instructions to create the app in ChatGPT:
31
+ 1. Go to [Apps Settings](https://chatgpt.com/apps#settings/Connectors) → Create App
32
+ 2. Enter a name and description for the app
33
+ 3. Paste this URL: `{tunnel-url}/mcp`
34
+ 4. Set the appropriate Authentication scheme. In doubt, pick "No Authentication"
35
+ 5. Click Create
36
+ 6. Test by typing `@{app-name}` in a ChatGPT chat
37
+
38
+ **Troubleshooting:**
39
+ - 'Create App' button missing: ask user to enable Developer mode in Settings → Apps → Advanced Settings
40
+ - 'Create App' button not working: confirm they have ChatGPT Plus, Pro, Business, or Enterprise/Edu plan
41
+
42
+
43
+ ### Connect to Claude
44
+ Provide the user with these instructions to create the app in Claude:
45
+ 1. Go to [Connector Settings](https://claude.ai/settings/connectors) → Add Custom Connector
46
+ 2. Enter a name and URL: `{tunnel-url}/mcp`
47
+ 3. Click Create
48
+ 4. In Claude chat, click the `+` button and select `@{app-name}`
49
+
50
+ **Troubleshooting:**
51
+ - 'Add Custom Connector' button missing: confirm they have a Claude paid plan
@@ -0,0 +1,151 @@
1
+ # Manage View State and LLM Context
2
+
3
+ - View state (`useViewState`/`createStore`) persists and is visible to LLM as structured data.
4
+ - `data-llm` gives LLM context for referential language ("this one").
5
+ - React `useState` is ephemeral and invisible to LLM.
6
+
7
+ **Decision guide:**
8
+ | Need | Use |
9
+ |------|-----|
10
+ | Persist data, single component | `useViewState` |
11
+ | Persist data, shared across components, complex mutations | `createStore` |
12
+ | Help LLM understand "this one" | `data-llm` |
13
+ | Ephemeral UI only (hover, animation) | `useState` |
14
+
15
+ ## useViewState
16
+
17
+ Single component, simple access patterns.
18
+
19
+ ```tsx
20
+ function SeatPicker({ seats }) {
21
+ const [{ selectedSeat }, setState] = useViewState({ selectedSeat: null });
22
+
23
+ return (
24
+ <div className="seat-grid">
25
+ {seats.map(seat => (
26
+ <button
27
+ key={seat.id}
28
+ onClick={() => setState((prev) => ({ ...prev, selectedSeat: seat.id }))}
29
+ className={selectedSeat === seat.id ? "selected" : ""}
30
+ >
31
+ {seat.id}
32
+ </button>
33
+ ))}
34
+ </div>
35
+ );
36
+ }
37
+ ```
38
+
39
+ **Why useViewState:** Single component reads `selectedSeat` to highlight button. View or LLM reads when booking.
40
+
41
+ ## createStore
42
+
43
+ Shared across components, complex mutations. `createStore` is a thin wrapper around Zustand.
44
+
45
+ ```tsx
46
+ import { createStore } from "skybridge/web";
47
+
48
+ const useCartStore = createStore<CartState>((set) => ({
49
+ cart: [],
50
+ add: (item) => set((s) => ({ cart: [...s.cart, item] })),
51
+ remove: (id) => set((s) => ({ cart: s.cart.filter(i => i.id !== id) })),
52
+ }));
53
+
54
+ // ProductCard.tsx
55
+ function ProductCard({ product }) {
56
+ const add = useCartStore((s) => s.add);
57
+ return <button onClick={() => add(product)}>Add to Cart</button>;
58
+ }
59
+
60
+ // CartSummary.tsx
61
+ function CartSummary() {
62
+ const cart = useCartStore((s) => s.cart);
63
+ return <span>{cart.length} items</span>;
64
+ }
65
+ ```
66
+
67
+ **Why createStore:** Cart accessed by multiple components. View or LLM reads items at checkout.
68
+
69
+ ## data-llm
70
+
71
+ Tell the LLM what user is viewing/doing. One-way—view doesn't read it back. These are annotations—don't put complex objects here.
72
+
73
+ ```tsx
74
+ function ProductDetail({ product }) {
75
+ return (
76
+ <div data-llm={`Viewing: ${product.name}, $${product.price}, ${product.inStock ? "in stock" : "out of stock"}`}>
77
+ <h1>{product.name}</h1>
78
+ <p>${product.price}</p>
79
+ </div>
80
+ );
81
+ }
82
+ ```
83
+
84
+ **Why data-llm:** When user asks "Is this one good?" or "Add this to cart", LLM knows what "this" refers to.
85
+
86
+ ## Common mistakes
87
+
88
+ ```tsx
89
+ // DON'T: useState is not persisted, LLM can't see it
90
+ const [selected, setSelected] = useState(null);
91
+
92
+ // DO: useViewState persists and LLM sees it
93
+ const [{ selected }, setState] = useViewState({ selected: null });
94
+ ```
95
+
96
+ ```tsx
97
+ // DON'T: Complex object in data-llm
98
+ <div data-llm={JSON.stringify(cart)}>
99
+
100
+ // DO: Human-readable summary
101
+ <div data-llm={`Cart: ${cart.length} items, $${total}`}>
102
+ ```
103
+
104
+ ## Combined example
105
+
106
+ Todo list. User checks off tasks, asks "what should I prioritize?"
107
+
108
+ ```tsx
109
+ function TaskList() {
110
+ // PERSIST: All tasks with completed status
111
+ const [{ tasks }, setState] = useViewState({
112
+ tasks: [
113
+ { id: 1, title: "Buy groceries", completed: false },
114
+ { id: 2, title: "Call mom", completed: true },
115
+ ]
116
+ });
117
+
118
+ // EPHEMERAL: Task user is viewing — reset on reopen
119
+ const [viewing, setViewing] = useState(null);
120
+
121
+ return (
122
+ // CONTEXT: What user is looking at — LLM answers "how should I handle this task?"
123
+ <div data-llm={viewing
124
+ ? `Viewing: "${viewing.title}"`
125
+ : `${tasks.filter(t => !t.completed).length} tasks remaining`
126
+ }>
127
+ {tasks.map(t => (
128
+ <Task
129
+ key={t.id}
130
+ task={t}
131
+ onView={() => setViewing(t)}
132
+ onToggle={() => setState((prev) => ({
133
+ ...prev,
134
+ tasks: prev.tasks.map(task =>
135
+ task.id === t.id ? { ...task, completed: !task.completed } : task
136
+ )
137
+ }))}
138
+ />
139
+ ))}
140
+ </div>
141
+ );
142
+ }
143
+ ```
144
+
145
+ **Why each?**
146
+
147
+ | What | API | Why |
148
+ |------|-----|-----|
149
+ | `tasks` | `useViewState` | Persists. Tasks and progress survive reopen. |
150
+ | `viewing` | `useState` | Ephemeral. Current focus resets on reopen. |
151
+ | `"Viewing: Buy groceries"` | `data-llm` | LLM context. Understands "this task" in conversation. |