opencodekit 0.15.3 → 0.15.5

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 (321) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/template/.opencode/AGENTS.md +209 -77
  3. package/dist/template/.opencode/agent/plan.md +4 -0
  4. package/dist/template/.opencode/command/cloudflare.md +70 -0
  5. package/dist/template/.opencode/package.json +1 -1
  6. package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
  7. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
  8. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
  9. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  10. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  11. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  12. package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
  13. package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
  14. package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
  15. package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
  16. package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  17. package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
  18. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
  19. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
  20. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  21. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  22. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  23. package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
  24. package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
  25. package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
  26. package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
  27. package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
  28. package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
  29. package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
  30. package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
  31. package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  32. package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
  33. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  34. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  35. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  36. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  37. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  38. package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
  39. package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
  40. package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
  41. package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
  42. package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
  43. package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
  44. package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
  45. package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
  46. package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  47. package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
  48. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
  49. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
  50. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  51. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  52. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  53. package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
  54. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
  55. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
  56. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  57. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  58. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  59. package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
  60. package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
  61. package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
  62. package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
  63. package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
  64. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
  65. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
  66. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  67. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  68. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  69. package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
  70. package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
  71. package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
  72. package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
  73. package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
  74. package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
  75. package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
  76. package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
  77. package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
  78. package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
  79. package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
  80. package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
  81. package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
  82. package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  83. package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
  84. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
  85. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
  86. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  87. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  88. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  89. package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
  90. package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
  91. package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
  92. package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  93. package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
  94. package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
  95. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
  96. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
  97. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  98. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  99. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  100. package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
  101. package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
  102. package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
  103. package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
  104. package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
  105. package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
  106. package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
  107. package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
  108. package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
  109. package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
  110. package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
  111. package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
  112. package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
  113. package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  114. package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
  115. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
  116. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
  117. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  118. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  119. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  120. package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
  121. package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
  122. package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
  123. package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
  124. package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
  125. package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
  126. package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
  127. package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
  128. package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
  129. package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
  130. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
  131. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
  132. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  133. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  134. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  135. package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
  136. package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
  137. package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
  138. package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
  139. package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  140. package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
  141. package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
  142. package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
  143. package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
  144. package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
  145. package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
  146. package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
  147. package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
  148. package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
  149. package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
  150. package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
  151. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  152. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  153. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  154. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  155. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  156. package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
  157. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  158. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  159. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  160. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  161. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  162. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
  163. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
  164. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  165. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  166. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  167. package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
  168. package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
  169. package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
  170. package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  171. package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
  172. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
  173. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
  174. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  175. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  176. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  177. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
  178. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
  179. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  180. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  181. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  182. package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
  183. package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
  184. package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
  185. package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
  186. package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
  187. package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
  188. package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
  189. package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
  190. package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  191. package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
  192. package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
  193. package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
  194. package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
  195. package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  196. package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
  197. package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
  198. package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
  199. package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
  200. package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
  201. package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
  202. package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
  203. package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
  204. package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
  205. package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
  206. package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
  207. package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
  208. package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
  209. package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
  210. package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
  211. package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  212. package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
  213. package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
  214. package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
  215. package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
  216. package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
  217. package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  218. package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
  219. package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
  220. package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
  221. package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
  222. package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
  223. package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
  224. package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
  225. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
  226. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
  227. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  228. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  229. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  230. package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
  231. package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
  232. package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
  233. package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
  234. package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
  235. package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
  236. package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
  237. package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
  238. package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
  239. package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
  240. package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
  241. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  242. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  243. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  244. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  245. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  246. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
  247. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
  248. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  249. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  250. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  251. package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
  252. package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
  253. package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
  254. package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
  255. package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
  256. package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
  257. package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
  258. package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
  259. package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
  260. package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  261. package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
  262. package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
  263. package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
  264. package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
  265. package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
  266. package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
  267. package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
  268. package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
  269. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  270. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  271. package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
  272. package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
  273. package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
  274. package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
  275. package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  276. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  277. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  278. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  279. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  280. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
  281. package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  282. package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  283. package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  284. package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  285. package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  286. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  287. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  288. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  289. package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  290. package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
  291. package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  292. package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
  293. package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  294. package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  295. package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  296. package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  297. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
  298. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  299. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  300. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  301. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  302. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  303. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  304. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  305. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  306. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  307. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  308. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  309. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
  310. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  311. package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  312. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  313. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
  314. package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  315. package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
  316. package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
  317. package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
  318. package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
  319. package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  320. package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
  321. package/package.json +1 -1
@@ -0,0 +1,76 @@
1
+ ---
2
+ title: Per-Request Deduplication with React.cache()
3
+ impact: MEDIUM
4
+ impactDescription: deduplicates within request
5
+ tags: server, cache, react-cache, deduplication
6
+ ---
7
+
8
+ ## Per-Request Deduplication with React.cache()
9
+
10
+ Use `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.
11
+
12
+ **Usage:**
13
+
14
+ ```typescript
15
+ import { cache } from 'react'
16
+
17
+ export const getCurrentUser = cache(async () => {
18
+ const session = await auth()
19
+ if (!session?.user?.id) return null
20
+ return await db.user.findUnique({
21
+ where: { id: session.user.id }
22
+ })
23
+ })
24
+ ```
25
+
26
+ Within a single request, multiple calls to `getCurrentUser()` execute the query only once.
27
+
28
+ **Avoid inline objects as arguments:**
29
+
30
+ `React.cache()` uses shallow equality (`Object.is`) to determine cache hits. Inline objects create new references each call, preventing cache hits.
31
+
32
+ **Incorrect (always cache miss):**
33
+
34
+ ```typescript
35
+ const getUser = cache(async (params: { uid: number }) => {
36
+ return await db.user.findUnique({ where: { id: params.uid } })
37
+ })
38
+
39
+ // Each call creates new object, never hits cache
40
+ getUser({ uid: 1 })
41
+ getUser({ uid: 1 }) // Cache miss, runs query again
42
+ ```
43
+
44
+ **Correct (cache hit):**
45
+
46
+ ```typescript
47
+ const getUser = cache(async (uid: number) => {
48
+ return await db.user.findUnique({ where: { id: uid } })
49
+ })
50
+
51
+ // Primitive args use value equality
52
+ getUser(1)
53
+ getUser(1) // Cache hit, returns cached result
54
+ ```
55
+
56
+ If you must pass objects, pass the same reference:
57
+
58
+ ```typescript
59
+ const params = { uid: 1 }
60
+ getUser(params) // Query runs
61
+ getUser(params) // Cache hit (same reference)
62
+ ```
63
+
64
+ **Next.js-Specific Note:**
65
+
66
+ In Next.js, the `fetch` API is automatically extended with request memoization. Requests with the same URL and options are automatically deduplicated within a single request, so you don't need `React.cache()` for `fetch` calls. However, `React.cache()` is still essential for other async tasks:
67
+
68
+ - Database queries (Prisma, Drizzle, etc.)
69
+ - Heavy computations
70
+ - Authentication checks
71
+ - File system operations
72
+ - Any non-fetch async work
73
+
74
+ Use `React.cache()` to deduplicate these operations across your component tree.
75
+
76
+ Reference: [React.cache documentation](https://react.dev/reference/react/cache)
@@ -0,0 +1,83 @@
1
+ ---
2
+ title: Parallel Data Fetching with Component Composition
3
+ impact: CRITICAL
4
+ impactDescription: eliminates server-side waterfalls
5
+ tags: server, rsc, parallel-fetching, composition
6
+ ---
7
+
8
+ ## Parallel Data Fetching with Component Composition
9
+
10
+ React Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.
11
+
12
+ **Incorrect (Sidebar waits for Page's fetch to complete):**
13
+
14
+ ```tsx
15
+ export default async function Page() {
16
+ const header = await fetchHeader()
17
+ return (
18
+ <div>
19
+ <div>{header}</div>
20
+ <Sidebar />
21
+ </div>
22
+ )
23
+ }
24
+
25
+ async function Sidebar() {
26
+ const items = await fetchSidebarItems()
27
+ return <nav>{items.map(renderItem)}</nav>
28
+ }
29
+ ```
30
+
31
+ **Correct (both fetch simultaneously):**
32
+
33
+ ```tsx
34
+ async function Header() {
35
+ const data = await fetchHeader()
36
+ return <div>{data}</div>
37
+ }
38
+
39
+ async function Sidebar() {
40
+ const items = await fetchSidebarItems()
41
+ return <nav>{items.map(renderItem)}</nav>
42
+ }
43
+
44
+ export default function Page() {
45
+ return (
46
+ <div>
47
+ <Header />
48
+ <Sidebar />
49
+ </div>
50
+ )
51
+ }
52
+ ```
53
+
54
+ **Alternative with children prop:**
55
+
56
+ ```tsx
57
+ async function Header() {
58
+ const data = await fetchHeader()
59
+ return <div>{data}</div>
60
+ }
61
+
62
+ async function Sidebar() {
63
+ const items = await fetchSidebarItems()
64
+ return <nav>{items.map(renderItem)}</nav>
65
+ }
66
+
67
+ function Layout({ children }: { children: ReactNode }) {
68
+ return (
69
+ <div>
70
+ <Header />
71
+ {children}
72
+ </div>
73
+ )
74
+ }
75
+
76
+ export default function Page() {
77
+ return (
78
+ <Layout>
79
+ <Sidebar />
80
+ </Layout>
81
+ )
82
+ }
83
+ ```
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: Minimize Serialization at RSC Boundaries
3
+ impact: HIGH
4
+ impactDescription: reduces data transfer size
5
+ tags: server, rsc, serialization, props
6
+ ---
7
+
8
+ ## Minimize Serialization at RSC Boundaries
9
+
10
+ The React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.
11
+
12
+ **Incorrect (serializes all 50 fields):**
13
+
14
+ ```tsx
15
+ async function Page() {
16
+ const user = await fetchUser() // 50 fields
17
+ return <Profile user={user} />
18
+ }
19
+
20
+ 'use client'
21
+ function Profile({ user }: { user: User }) {
22
+ return <div>{user.name}</div> // uses 1 field
23
+ }
24
+ ```
25
+
26
+ **Correct (serializes only 1 field):**
27
+
28
+ ```tsx
29
+ async function Page() {
30
+ const user = await fetchUser()
31
+ return <Profile name={user.name} />
32
+ }
33
+
34
+ 'use client'
35
+ function Profile({ name }: { name: string }) {
36
+ return <div>{name}</div>
37
+ }
38
+ ```
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: supabase
3
+ description: Comprehensive Supabase platform MCP for database operations, edge functions, development tools, debugging, and project management. Use when working with Supabase projects, databases, or APIs.
4
+ ---
5
+
6
+ # Supabase Platform (MCP)
7
+
8
+ Supabase MCP server for database operations, edge functions, project management, and debugging.
9
+
10
+ ## Available Tools
11
+
12
+ ### Account & Projects
13
+
14
+ - `list_projects` - Lists all Supabase projects
15
+ - `get_project` - Gets details for a specific project
16
+ - `list_organizations` - Lists all organizations
17
+
18
+ ### Database
19
+
20
+ - `list_tables` - Lists all tables in specified schemas
21
+ - `list_extensions` - Lists PostgreSQL extensions
22
+ - `list_migrations` - Lists database migrations
23
+ - `execute_sql` - Executes raw SQL queries
24
+
25
+ ### Development
26
+
27
+ - `get_project_url` - Gets the API URL for a project
28
+ - `get_publishable_keys` - Gets anonymous API keys (client-safe)
29
+ - `generate_typescript_types` - Generates TypeScript types from schema
30
+
31
+ ### Edge Functions
32
+
33
+ - `list_edge_functions` - Lists all Edge Functions
34
+ - `get_edge_function` - Retrieves Edge Function file contents
35
+ - `deploy_edge_function` - Deploys or updates an Edge Function
36
+
37
+ ### Debugging
38
+
39
+ - `get_logs` - Retrieves logs by service type
40
+ - `get_advisors` - Gets security/performance advisory notices
41
+
42
+ ### Documentation
43
+
44
+ - `search_docs` - Searches Supabase documentation
45
+
46
+ ## Workflow
47
+
48
+ ### Quick Start
49
+
50
+ ```
51
+ # List projects
52
+ skill_mcp(skill_name="supabase", tool_name="list_projects")
53
+
54
+ # List tables in database
55
+ skill_mcp(skill_name="supabase", tool_name="list_tables")
56
+
57
+ # Execute SQL query
58
+ skill_mcp(skill_name="supabase", tool_name="execute_sql", arguments='{"query": "SELECT * FROM users LIMIT 10"}')
59
+
60
+ # Generate TypeScript types
61
+ skill_mcp(skill_name="supabase", tool_name="generate_typescript_types")
62
+
63
+ # Search docs
64
+ skill_mcp(skill_name="supabase", tool_name="search_docs", arguments='{"query": "auth custom claims"}')
65
+ ```
66
+
67
+ ### Get Project Credentials
68
+
69
+ ```
70
+ # Get API URL and keys for project
71
+ skill_mcp(skill_name="supabase", tool_name="get_project_url")
72
+ skill_mcp(skill_name="supabase", tool_name="get_publishable_keys")
73
+
74
+ # List Edge Functions
75
+ skill_mcp(skill_name="supabase", tool_name="list_edge_functions")
76
+
77
+ # Deploy Edge Function
78
+ skill_mcp(skill_name="supabase", tool_name="deploy_edge_function", arguments='{"name": "my-function", "import_map": {...}, "entrypoint": "index.ts"}')
79
+ ```
80
+
81
+ ### Debug Issues
82
+
83
+ ```
84
+ # Get logs by service
85
+ skill_mcp(skill_name="supabase", tool_name="get_logs", arguments='{"service": "postgres", "limit": 100}')
86
+
87
+ # Check advisories
88
+ skill_mcp(skill_name="supabase", tool_name="get_advisors")
89
+ ```
90
+
91
+ ## Security Notes
92
+
93
+ - **Read-only mode**: Set `"read_only": true` in mcp.json to disable write operations
94
+ - **Project scoping**: Use `project_ref` to limit access to specific projects
95
+ - **Environment variables**: Set `SUPABASE_ACCESS_TOKEN` for authentication
96
+
97
+ ## Server Options
98
+
99
+ For advanced usage, modify `mcp.json`:
100
+
101
+ ```json
102
+ {
103
+ "supabase": {
104
+ "command": "npx",
105
+ "args": ["-y", "@supabase/mcp@latest"],
106
+ "env": {
107
+ "SUPABASE_ACCESS_TOKEN": "your-token-here"
108
+ },
109
+ "includeTools": ["list_tables", "execute_sql", "..."]
110
+ }
111
+ }
112
+ ```
113
+
114
+ Configuration options:
115
+
116
+ - `project_ref` - Scope to specific project (recommended)
117
+ - `read_only` - Restrict to read-only operations (recommended)
118
+ - `features` - Enable specific tool groups
119
+
120
+ > **Note**: This skill loads 14 essential tools. Excludes experimental (branching) and storage tools that require paid plans.
@@ -0,0 +1,27 @@
1
+ {
2
+ "supabase": {
3
+ "command": "npx",
4
+ "args": ["-y", "@supabase/mcp@latest"],
5
+ "env": {
6
+ "SUPABASE_ACCESS_TOKEN": "${SUPABASE_ACCESS_TOKEN}"
7
+ },
8
+ "includeTools": [
9
+ "list_projects",
10
+ "get_project",
11
+ "list_organizations",
12
+ "list_tables",
13
+ "list_extensions",
14
+ "list_migrations",
15
+ "execute_sql",
16
+ "get_project_url",
17
+ "get_publishable_keys",
18
+ "generate_typescript_types",
19
+ "list_edge_functions",
20
+ "get_edge_function",
21
+ "deploy_edge_function",
22
+ "get_logs",
23
+ "get_advisors",
24
+ "search_docs"
25
+ ]
26
+ }
27
+ }
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: vercel-deploy
3
+ description: Deploy applications and websites to Vercel. Use this skill when the user requests deployment actions such as "Deploy my app", "Deploy this to production", "Create a preview deployment", "Deploy and give me the link", or "Push this live". No authentication required - returns preview URL and claimable deployment link.
4
+ metadata:
5
+ author: vercel
6
+ version: "1.0.0"
7
+ ---
8
+
9
+ # Vercel Deploy
10
+
11
+ Deploy any project to Vercel instantly. No authentication required.
12
+
13
+ ## How It Works
14
+
15
+ 1. Packages your project into a tarball (excludes `node_modules` and `.git`)
16
+ 2. Auto-detects framework from `package.json`
17
+ 3. Uploads to deployment service
18
+ 4. Returns **Preview URL** (live site) and **Claim URL** (transfer to your Vercel account)
19
+
20
+ ## Usage
21
+
22
+ ```bash
23
+ bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh [path]
24
+ ```
25
+
26
+ **Arguments:**
27
+ - `path` - Directory to deploy, or a `.tgz` file (defaults to current directory)
28
+
29
+ **Examples:**
30
+
31
+ ```bash
32
+ # Deploy current directory
33
+ bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh
34
+
35
+ # Deploy specific project
36
+ bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh /path/to/project
37
+
38
+ # Deploy existing tarball
39
+ bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh /path/to/project.tgz
40
+ ```
41
+
42
+ ## Output
43
+
44
+ ```
45
+ Preparing deployment...
46
+ Detected framework: nextjs
47
+ Creating deployment package...
48
+ Deploying...
49
+ ✓ Deployment successful!
50
+
51
+ Preview URL: https://skill-deploy-abc123.vercel.app
52
+ Claim URL: https://vercel.com/claim-deployment?code=...
53
+ ```
54
+
55
+ The script also outputs JSON to stdout for programmatic use:
56
+
57
+ ```json
58
+ {
59
+ "previewUrl": "https://skill-deploy-abc123.vercel.app",
60
+ "claimUrl": "https://vercel.com/claim-deployment?code=...",
61
+ "deploymentId": "dpl_...",
62
+ "projectId": "prj_..."
63
+ }
64
+ ```
65
+
66
+ ## Framework Detection
67
+
68
+ The script auto-detects frameworks from `package.json`. Supported frameworks include:
69
+
70
+ - **React**: Next.js, Gatsby, Create React App, Remix, React Router
71
+ - **Vue**: Nuxt, Vitepress, Vuepress, Gridsome
72
+ - **Svelte**: SvelteKit, Svelte, Sapper
73
+ - **Other Frontend**: Astro, Solid Start, Angular, Ember, Preact, Docusaurus
74
+ - **Backend**: Express, Hono, Fastify, NestJS, Elysia, h3, Nitro
75
+ - **Build Tools**: Vite, Parcel
76
+ - **And more**: Blitz, Hydrogen, RedwoodJS, Storybook, Sanity, etc.
77
+
78
+ For static HTML projects (no `package.json`), framework is set to `null`.
79
+
80
+ ## Static HTML Projects
81
+
82
+ For projects without a `package.json`:
83
+ - If there's a single `.html` file not named `index.html`, it gets renamed automatically
84
+ - This ensures the page is served at the root URL (`/`)
85
+
86
+ ## Present Results to User
87
+
88
+ Always show both URLs:
89
+
90
+ ```
91
+ ✓ Deployment successful!
92
+
93
+ Preview URL: https://skill-deploy-abc123.vercel.app
94
+ Claim URL: https://vercel.com/claim-deployment?code=...
95
+
96
+ View your site at the Preview URL.
97
+ To transfer this deployment to your Vercel account, visit the Claim URL.
98
+ ```
99
+
100
+ ## Troubleshooting
101
+
102
+ ### Network Egress Error
103
+
104
+ If deployment fails due to network restrictions (common on claude.ai), tell the user:
105
+
106
+ ```
107
+ Deployment failed due to network restrictions. To fix this:
108
+
109
+ 1. Go to https://claude.ai/settings/capabilities
110
+ 2. Add *.vercel.com to the allowed domains
111
+ 3. Try deploying again
112
+ ```
@@ -0,0 +1,249 @@
1
+ #!/bin/bash
2
+
3
+ # Vercel Deployment Script (via claimable deploy endpoint)
4
+ # Usage: ./deploy.sh [project-path]
5
+ # Returns: JSON with previewUrl, claimUrl, deploymentId, projectId
6
+
7
+ set -e
8
+
9
+ DEPLOY_ENDPOINT="https://claude-skills-deploy.vercel.com/api/deploy"
10
+
11
+ # Detect framework from package.json
12
+ detect_framework() {
13
+ local pkg_json="$1"
14
+
15
+ if [ ! -f "$pkg_json" ]; then
16
+ echo "null"
17
+ return
18
+ fi
19
+
20
+ local content=$(cat "$pkg_json")
21
+
22
+ # Helper to check if a package exists in dependencies or devDependencies
23
+ has_dep() {
24
+ echo "$content" | grep -q "\"$1\""
25
+ }
26
+
27
+ # Order matters - check more specific frameworks first
28
+
29
+ # Blitz
30
+ if has_dep "blitz"; then echo "blitzjs"; return; fi
31
+
32
+ # Next.js
33
+ if has_dep "next"; then echo "nextjs"; return; fi
34
+
35
+ # Gatsby
36
+ if has_dep "gatsby"; then echo "gatsby"; return; fi
37
+
38
+ # Remix
39
+ if has_dep "@remix-run/"; then echo "remix"; return; fi
40
+
41
+ # React Router (v7 framework mode)
42
+ if has_dep "@react-router/"; then echo "react-router"; return; fi
43
+
44
+ # TanStack Start
45
+ if has_dep "@tanstack/start"; then echo "tanstack-start"; return; fi
46
+
47
+ # Astro
48
+ if has_dep "astro"; then echo "astro"; return; fi
49
+
50
+ # Hydrogen (Shopify)
51
+ if has_dep "@shopify/hydrogen"; then echo "hydrogen"; return; fi
52
+
53
+ # SvelteKit
54
+ if has_dep "@sveltejs/kit"; then echo "sveltekit-1"; return; fi
55
+
56
+ # Svelte (standalone)
57
+ if has_dep "svelte"; then echo "svelte"; return; fi
58
+
59
+ # Nuxt
60
+ if has_dep "nuxt"; then echo "nuxtjs"; return; fi
61
+
62
+ # Vue with Vitepress
63
+ if has_dep "vitepress"; then echo "vitepress"; return; fi
64
+
65
+ # Vue with Vuepress
66
+ if has_dep "vuepress"; then echo "vuepress"; return; fi
67
+
68
+ # Gridsome
69
+ if has_dep "gridsome"; then echo "gridsome"; return; fi
70
+
71
+ # SolidStart
72
+ if has_dep "@solidjs/start"; then echo "solidstart-1"; return; fi
73
+
74
+ # Docusaurus
75
+ if has_dep "@docusaurus/core"; then echo "docusaurus-2"; return; fi
76
+
77
+ # RedwoodJS
78
+ if has_dep "@redwoodjs/"; then echo "redwoodjs"; return; fi
79
+
80
+ # Hexo
81
+ if has_dep "hexo"; then echo "hexo"; return; fi
82
+
83
+ # Eleventy
84
+ if has_dep "@11ty/eleventy"; then echo "eleventy"; return; fi
85
+
86
+ # Angular / Ionic Angular
87
+ if has_dep "@ionic/angular"; then echo "ionic-angular"; return; fi
88
+ if has_dep "@angular/core"; then echo "angular"; return; fi
89
+
90
+ # Ionic React
91
+ if has_dep "@ionic/react"; then echo "ionic-react"; return; fi
92
+
93
+ # Create React App
94
+ if has_dep "react-scripts"; then echo "create-react-app"; return; fi
95
+
96
+ # Ember
97
+ if has_dep "ember-cli" || has_dep "ember-source"; then echo "ember"; return; fi
98
+
99
+ # Dojo
100
+ if has_dep "@dojo/framework"; then echo "dojo"; return; fi
101
+
102
+ # Polymer
103
+ if has_dep "@polymer/"; then echo "polymer"; return; fi
104
+
105
+ # Preact
106
+ if has_dep "preact"; then echo "preact"; return; fi
107
+
108
+ # Stencil
109
+ if has_dep "@stencil/core"; then echo "stencil"; return; fi
110
+
111
+ # UmiJS
112
+ if has_dep "umi"; then echo "umijs"; return; fi
113
+
114
+ # Sapper (legacy Svelte)
115
+ if has_dep "sapper"; then echo "sapper"; return; fi
116
+
117
+ # Saber
118
+ if has_dep "saber"; then echo "saber"; return; fi
119
+
120
+ # Sanity
121
+ if has_dep "sanity"; then echo "sanity-v3"; return; fi
122
+ if has_dep "@sanity/"; then echo "sanity"; return; fi
123
+
124
+ # Storybook
125
+ if has_dep "@storybook/"; then echo "storybook"; return; fi
126
+
127
+ # NestJS
128
+ if has_dep "@nestjs/core"; then echo "nestjs"; return; fi
129
+
130
+ # Elysia
131
+ if has_dep "elysia"; then echo "elysia"; return; fi
132
+
133
+ # Hono
134
+ if has_dep "hono"; then echo "hono"; return; fi
135
+
136
+ # Fastify
137
+ if has_dep "fastify"; then echo "fastify"; return; fi
138
+
139
+ # h3
140
+ if has_dep "h3"; then echo "h3"; return; fi
141
+
142
+ # Nitro
143
+ if has_dep "nitropack"; then echo "nitro"; return; fi
144
+
145
+ # Express
146
+ if has_dep "express"; then echo "express"; return; fi
147
+
148
+ # Vite (generic - check last among JS frameworks)
149
+ if has_dep "vite"; then echo "vite"; return; fi
150
+
151
+ # Parcel
152
+ if has_dep "parcel"; then echo "parcel"; return; fi
153
+
154
+ # No framework detected
155
+ echo "null"
156
+ }
157
+
158
+ # Parse arguments
159
+ INPUT_PATH="${1:-.}"
160
+
161
+ # Create temp directory for packaging
162
+ TEMP_DIR=$(mktemp -d)
163
+ TARBALL="$TEMP_DIR/project.tgz"
164
+ CLEANUP_TEMP=true
165
+
166
+ cleanup() {
167
+ if [ "$CLEANUP_TEMP" = true ]; then
168
+ rm -rf "$TEMP_DIR"
169
+ fi
170
+ }
171
+ trap cleanup EXIT
172
+
173
+ echo "Preparing deployment..." >&2
174
+
175
+ # Check if input is a .tgz file or a directory
176
+ FRAMEWORK="null"
177
+
178
+ if [ -f "$INPUT_PATH" ] && [[ "$INPUT_PATH" == *.tgz ]]; then
179
+ # Input is already a tarball, use it directly
180
+ echo "Using provided tarball..." >&2
181
+ TARBALL="$INPUT_PATH"
182
+ CLEANUP_TEMP=false
183
+ # Can't detect framework from tarball, leave as null
184
+ elif [ -d "$INPUT_PATH" ]; then
185
+ # Input is a directory, need to tar it
186
+ PROJECT_PATH=$(cd "$INPUT_PATH" && pwd)
187
+
188
+ # Detect framework from package.json
189
+ FRAMEWORK=$(detect_framework "$PROJECT_PATH/package.json")
190
+
191
+ # Check if this is a static HTML project (no package.json)
192
+ if [ ! -f "$PROJECT_PATH/package.json" ]; then
193
+ # Find HTML files in root
194
+ HTML_FILES=$(find "$PROJECT_PATH" -maxdepth 1 -name "*.html" -type f)
195
+ HTML_COUNT=$(echo "$HTML_FILES" | grep -c . || echo 0)
196
+
197
+ # If there's exactly one HTML file and it's not index.html, rename it
198
+ if [ "$HTML_COUNT" -eq 1 ]; then
199
+ HTML_FILE=$(echo "$HTML_FILES" | head -1)
200
+ BASENAME=$(basename "$HTML_FILE")
201
+ if [ "$BASENAME" != "index.html" ]; then
202
+ echo "Renaming $BASENAME to index.html..." >&2
203
+ mv "$HTML_FILE" "$PROJECT_PATH/index.html"
204
+ fi
205
+ fi
206
+ fi
207
+
208
+ # Create tarball of the project (excluding node_modules and .git)
209
+ echo "Creating deployment package..." >&2
210
+ tar -czf "$TARBALL" -C "$PROJECT_PATH" --exclude='node_modules' --exclude='.git' .
211
+ else
212
+ echo "Error: Input must be a directory or a .tgz file" >&2
213
+ exit 1
214
+ fi
215
+
216
+ if [ "$FRAMEWORK" != "null" ]; then
217
+ echo "Detected framework: $FRAMEWORK" >&2
218
+ fi
219
+
220
+ # Deploy
221
+ echo "Deploying..." >&2
222
+ RESPONSE=$(curl -s -X POST "$DEPLOY_ENDPOINT" -F "file=@$TARBALL" -F "framework=$FRAMEWORK")
223
+
224
+ # Check for error in response
225
+ if echo "$RESPONSE" | grep -q '"error"'; then
226
+ ERROR_MSG=$(echo "$RESPONSE" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
227
+ echo "Error: $ERROR_MSG" >&2
228
+ exit 1
229
+ fi
230
+
231
+ # Extract URLs from response
232
+ PREVIEW_URL=$(echo "$RESPONSE" | grep -o '"previewUrl":"[^"]*"' | cut -d'"' -f4)
233
+ CLAIM_URL=$(echo "$RESPONSE" | grep -o '"claimUrl":"[^"]*"' | cut -d'"' -f4)
234
+
235
+ if [ -z "$PREVIEW_URL" ]; then
236
+ echo "Error: Could not extract preview URL from response" >&2
237
+ echo "$RESPONSE" >&2
238
+ exit 1
239
+ fi
240
+
241
+ echo "" >&2
242
+ echo "Deployment successful!" >&2
243
+ echo "" >&2
244
+ echo "Preview URL: $PREVIEW_URL" >&2
245
+ echo "Claim URL: $CLAIM_URL" >&2
246
+ echo "" >&2
247
+
248
+ # Output JSON for programmatic use
249
+ echo "$RESPONSE"