jfl 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/clawdbot-skill/README.md +328 -0
  4. package/clawdbot-skill/SKILL.md +362 -0
  5. package/clawdbot-skill/index.ts +486 -0
  6. package/clawdbot-skill/package.json +28 -0
  7. package/clawdbot-skill/skill.json +28 -0
  8. package/dist/commands/agents.d.ts +5 -0
  9. package/dist/commands/agents.d.ts.map +1 -0
  10. package/dist/commands/agents.js +399 -0
  11. package/dist/commands/agents.js.map +1 -0
  12. package/dist/commands/context-hub.d.ts +12 -0
  13. package/dist/commands/context-hub.d.ts.map +1 -0
  14. package/dist/commands/context-hub.js +642 -0
  15. package/dist/commands/context-hub.js.map +1 -0
  16. package/dist/commands/deploy.d.ts +5 -0
  17. package/dist/commands/deploy.d.ts.map +1 -0
  18. package/dist/commands/deploy.js +370 -0
  19. package/dist/commands/deploy.js.map +1 -0
  20. package/dist/commands/feedback.d.ts +2 -0
  21. package/dist/commands/feedback.d.ts.map +1 -0
  22. package/dist/commands/feedback.js +178 -0
  23. package/dist/commands/feedback.js.map +1 -0
  24. package/dist/commands/hud.d.ts +4 -0
  25. package/dist/commands/hud.d.ts.map +1 -0
  26. package/dist/commands/hud.js +262 -0
  27. package/dist/commands/hud.js.map +1 -0
  28. package/dist/commands/init.d.ts +4 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +553 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/login.d.ts +23 -0
  33. package/dist/commands/login.d.ts.map +1 -0
  34. package/dist/commands/login.js +818 -0
  35. package/dist/commands/login.js.map +1 -0
  36. package/dist/commands/ralph.d.ts +9 -0
  37. package/dist/commands/ralph.d.ts.map +1 -0
  38. package/dist/commands/ralph.js +67 -0
  39. package/dist/commands/ralph.js.map +1 -0
  40. package/dist/commands/repair.d.ts +7 -0
  41. package/dist/commands/repair.d.ts.map +1 -0
  42. package/dist/commands/repair.js +283 -0
  43. package/dist/commands/repair.js.map +1 -0
  44. package/dist/commands/session-mgmt.d.ts +33 -0
  45. package/dist/commands/session-mgmt.d.ts.map +1 -0
  46. package/dist/commands/session-mgmt.js +404 -0
  47. package/dist/commands/session-mgmt.js.map +1 -0
  48. package/dist/commands/session.d.ts +2 -0
  49. package/dist/commands/session.d.ts.map +1 -0
  50. package/dist/commands/session.js +639 -0
  51. package/dist/commands/session.js.map +1 -0
  52. package/dist/commands/skills.d.ts +31 -0
  53. package/dist/commands/skills.d.ts.map +1 -0
  54. package/dist/commands/skills.js +314 -0
  55. package/dist/commands/skills.js.map +1 -0
  56. package/dist/commands/status.d.ts +2 -0
  57. package/dist/commands/status.d.ts.map +1 -0
  58. package/dist/commands/status.js +127 -0
  59. package/dist/commands/status.js.map +1 -0
  60. package/dist/commands/synopsis.d.ts +10 -0
  61. package/dist/commands/synopsis.d.ts.map +1 -0
  62. package/dist/commands/synopsis.js +277 -0
  63. package/dist/commands/synopsis.js.map +1 -0
  64. package/dist/commands/update.d.ts +10 -0
  65. package/dist/commands/update.d.ts.map +1 -0
  66. package/dist/commands/update.js +165 -0
  67. package/dist/commands/update.js.map +1 -0
  68. package/dist/commands/voice.d.ts +410 -0
  69. package/dist/commands/voice.d.ts.map +1 -0
  70. package/dist/commands/voice.js +4763 -0
  71. package/dist/commands/voice.js.map +1 -0
  72. package/dist/index.d.ts +9 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +512 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/mcp/context-hub-mcp.d.ts +11 -0
  77. package/dist/mcp/context-hub-mcp.d.ts.map +1 -0
  78. package/dist/mcp/context-hub-mcp.js +548 -0
  79. package/dist/mcp/context-hub-mcp.js.map +1 -0
  80. package/dist/telegram/voice.d.ts +146 -0
  81. package/dist/telegram/voice.d.ts.map +1 -0
  82. package/dist/telegram/voice.js +351 -0
  83. package/dist/telegram/voice.js.map +1 -0
  84. package/dist/types/skills.d.ts +44 -0
  85. package/dist/types/skills.d.ts.map +1 -0
  86. package/dist/types/skills.js +5 -0
  87. package/dist/types/skills.js.map +1 -0
  88. package/dist/ui/banner.d.ts +18 -0
  89. package/dist/ui/banner.d.ts.map +1 -0
  90. package/dist/ui/banner.js +323 -0
  91. package/dist/ui/banner.js.map +1 -0
  92. package/dist/ui/index.d.ts +8 -0
  93. package/dist/ui/index.d.ts.map +1 -0
  94. package/dist/ui/index.js +8 -0
  95. package/dist/ui/index.js.map +1 -0
  96. package/dist/ui/prompts.d.ts +52 -0
  97. package/dist/ui/prompts.d.ts.map +1 -0
  98. package/dist/ui/prompts.js +72 -0
  99. package/dist/ui/prompts.js.map +1 -0
  100. package/dist/ui/theme.d.ts +82 -0
  101. package/dist/ui/theme.d.ts.map +1 -0
  102. package/dist/ui/theme.js +142 -0
  103. package/dist/ui/theme.js.map +1 -0
  104. package/dist/utils/auth-guard.d.ts +66 -0
  105. package/dist/utils/auth-guard.d.ts.map +1 -0
  106. package/dist/utils/auth-guard.js +348 -0
  107. package/dist/utils/auth-guard.js.map +1 -0
  108. package/dist/utils/ensure-project.d.ts +11 -0
  109. package/dist/utils/ensure-project.d.ts.map +1 -0
  110. package/dist/utils/ensure-project.js +70 -0
  111. package/dist/utils/ensure-project.js.map +1 -0
  112. package/dist/utils/git.d.ts +73 -0
  113. package/dist/utils/git.d.ts.map +1 -0
  114. package/dist/utils/git.js +219 -0
  115. package/dist/utils/git.js.map +1 -0
  116. package/dist/utils/github-auth.d.ts +54 -0
  117. package/dist/utils/github-auth.d.ts.map +1 -0
  118. package/dist/utils/github-auth.js +375 -0
  119. package/dist/utils/github-auth.js.map +1 -0
  120. package/dist/utils/github-repo.d.ts +30 -0
  121. package/dist/utils/github-repo.d.ts.map +1 -0
  122. package/dist/utils/github-repo.js +219 -0
  123. package/dist/utils/github-repo.js.map +1 -0
  124. package/dist/utils/platform-auth.d.ts +81 -0
  125. package/dist/utils/platform-auth.d.ts.map +1 -0
  126. package/dist/utils/platform-auth.js +191 -0
  127. package/dist/utils/platform-auth.js.map +1 -0
  128. package/dist/utils/project-config.d.ts +43 -0
  129. package/dist/utils/project-config.d.ts.map +1 -0
  130. package/dist/utils/project-config.js +97 -0
  131. package/dist/utils/project-config.js.map +1 -0
  132. package/dist/utils/skill-registry.d.ts +49 -0
  133. package/dist/utils/skill-registry.d.ts.map +1 -0
  134. package/dist/utils/skill-registry.js +192 -0
  135. package/dist/utils/skill-registry.js.map +1 -0
  136. package/dist/utils/wallet.d.ts +62 -0
  137. package/dist/utils/wallet.d.ts.map +1 -0
  138. package/dist/utils/wallet.js +252 -0
  139. package/dist/utils/wallet.js.map +1 -0
  140. package/dist/utils/x402-client.d.ts +86 -0
  141. package/dist/utils/x402-client.d.ts.map +1 -0
  142. package/dist/utils/x402-client.js +265 -0
  143. package/dist/utils/x402-client.js.map +1 -0
  144. package/package.json +76 -0
  145. package/scripts/postinstall.js +116 -0
  146. package/scripts/test-onboarding.sh +121 -0
  147. package/scripts/voice-start.sh +128 -0
  148. package/scripts/voice-stop.sh +33 -0
  149. package/template/.claude/settings.json +92 -0
  150. package/template/.claude/skills/agent-browser/SKILL.md +116 -0
  151. package/template/.claude/skills/brand-architect/SKILL.md +240 -0
  152. package/template/.claude/skills/brand-architect/config.yaml +137 -0
  153. package/template/.claude/skills/campaign-hud/config.yaml +112 -0
  154. package/template/.claude/skills/content-creator/SKILL.md +294 -0
  155. package/template/.claude/skills/debug/MULTI_AGENT.md +360 -0
  156. package/template/.claude/skills/debug/SKILL.md +549 -0
  157. package/template/.claude/skills/fly-deploy/SKILL.md +676 -0
  158. package/template/.claude/skills/founder-video/SKILL.md +467 -0
  159. package/template/.claude/skills/hud/SKILL.md +157 -0
  160. package/template/.claude/skills/ralph-tui/SKILL.md +210 -0
  161. package/template/.claude/skills/react-best-practices/AGENTS.md +2249 -0
  162. package/template/.claude/skills/react-best-practices/README.md +123 -0
  163. package/template/.claude/skills/react-best-practices/SKILL.md +125 -0
  164. package/template/.claude/skills/react-best-practices/metadata.json +15 -0
  165. package/template/.claude/skills/react-best-practices/rules/_sections.md +46 -0
  166. package/template/.claude/skills/react-best-practices/rules/_template.md +28 -0
  167. package/template/.claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  168. package/template/.claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  169. package/template/.claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  170. package/template/.claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  171. package/template/.claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  172. package/template/.claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  173. package/template/.claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  174. package/template/.claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  175. package/template/.claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  176. package/template/.claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  177. package/template/.claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  178. package/template/.claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  179. package/template/.claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  180. package/template/.claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  181. package/template/.claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  182. package/template/.claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  183. package/template/.claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  184. package/template/.claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  185. package/template/.claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  186. package/template/.claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  187. package/template/.claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  188. package/template/.claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  189. package/template/.claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  190. package/template/.claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  191. package/template/.claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  192. package/template/.claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  193. package/template/.claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  194. package/template/.claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  195. package/template/.claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  196. package/template/.claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  197. package/template/.claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  198. package/template/.claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  199. package/template/.claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  200. package/template/.claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  201. package/template/.claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  202. package/template/.claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  203. package/template/.claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  204. package/template/.claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  205. package/template/.claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  206. package/template/.claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  207. package/template/.claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  208. package/template/.claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  209. package/template/.claude/skills/react-best-practices/rules/server-cache-react.md +26 -0
  210. package/template/.claude/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  211. package/template/.claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  212. package/template/.claude/skills/remotion-best-practices/SKILL.md +43 -0
  213. package/template/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
  214. package/template/.claude/skills/remotion-best-practices/rules/animations.md +29 -0
  215. package/template/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  216. package/template/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  217. package/template/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  218. package/template/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
  219. package/template/.claude/skills/remotion-best-practices/rules/audio.md +172 -0
  220. package/template/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  221. package/template/.claude/skills/remotion-best-practices/rules/can-decode.md +75 -0
  222. package/template/.claude/skills/remotion-best-practices/rules/charts.md +58 -0
  223. package/template/.claude/skills/remotion-best-practices/rules/compositions.md +146 -0
  224. package/template/.claude/skills/remotion-best-practices/rules/display-captions.md +126 -0
  225. package/template/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  226. package/template/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
  227. package/template/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  228. package/template/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  229. package/template/.claude/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  230. package/template/.claude/skills/remotion-best-practices/rules/gifs.md +138 -0
  231. package/template/.claude/skills/remotion-best-practices/rules/images.md +130 -0
  232. package/template/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  233. package/template/.claude/skills/remotion-best-practices/rules/lottie.md +68 -0
  234. package/template/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  235. package/template/.claude/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  236. package/template/.claude/skills/remotion-best-practices/rules/sequencing.md +106 -0
  237. package/template/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
  238. package/template/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
  239. package/template/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
  240. package/template/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  241. package/template/.claude/skills/remotion-best-practices/rules/transitions.md +122 -0
  242. package/template/.claude/skills/remotion-best-practices/rules/trimming.md +53 -0
  243. package/template/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
  244. package/template/.claude/skills/search/SKILL.md +220 -0
  245. package/template/.claude/skills/spec/SKILL.md +377 -0
  246. package/template/.claude/skills/startup/SKILL.md +310 -0
  247. package/template/.claude/skills/web-architect/SKILL.md +309 -0
  248. package/template/.claude/skills/x-algorithm/SKILL.md +305 -0
  249. package/template/.jfl/config.json +8 -0
  250. package/template/.mcp.json +11 -0
  251. package/template/CLAUDE.md +960 -0
  252. package/template/content/.gitkeep +0 -0
  253. package/template/context-hub +3 -0
  254. package/template/knowledge/BRAND_BRIEF.md +124 -0
  255. package/template/knowledge/BRAND_DECISIONS.md +168 -0
  256. package/template/knowledge/NARRATIVE.md +114 -0
  257. package/template/knowledge/ROADMAP.md +128 -0
  258. package/template/knowledge/THESIS.md +108 -0
  259. package/template/knowledge/VISION.md +74 -0
  260. package/template/knowledge/VOICE_AND_TONE.md +146 -0
  261. package/template/previews/.gitkeep +0 -0
  262. package/template/scripts/session/auto-commit.sh +245 -0
  263. package/template/scripts/session/auto-merge.sh +325 -0
  264. package/template/scripts/session/jfl-doctor.sh +587 -0
  265. package/template/scripts/session/session-end.sh +194 -0
  266. package/template/scripts/session/session-init.sh +163 -0
  267. package/template/scripts/session/session-sync.sh +167 -0
  268. package/template/scripts/session/test-context-preservation.sh +160 -0
  269. package/template/skills/agent-browser/SKILL.md +116 -0
  270. package/template/skills/brand-architect/SKILL.md +240 -0
  271. package/template/skills/brand-architect/config.yaml +137 -0
  272. package/template/skills/campaign-hud/config.yaml +112 -0
  273. package/template/skills/content-creator/SKILL.md +294 -0
  274. package/template/skills/debug/MULTI_AGENT.md +360 -0
  275. package/template/skills/debug/SKILL.md +549 -0
  276. package/template/skills/fly-deploy/SKILL.md +676 -0
  277. package/template/skills/founder-video/SKILL.md +467 -0
  278. package/template/skills/hud/SKILL.md +204 -0
  279. package/template/skills/ralph-tui/SKILL.md +210 -0
  280. package/template/skills/react-best-practices/AGENTS.md +2249 -0
  281. package/template/skills/react-best-practices/README.md +123 -0
  282. package/template/skills/react-best-practices/SKILL.md +125 -0
  283. package/template/skills/react-best-practices/metadata.json +15 -0
  284. package/template/skills/react-best-practices/rules/_sections.md +46 -0
  285. package/template/skills/react-best-practices/rules/_template.md +28 -0
  286. package/template/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  287. package/template/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  288. package/template/skills/react-best-practices/rules/async-api-routes.md +38 -0
  289. package/template/skills/react-best-practices/rules/async-defer-await.md +80 -0
  290. package/template/skills/react-best-practices/rules/async-dependencies.md +36 -0
  291. package/template/skills/react-best-practices/rules/async-parallel.md +28 -0
  292. package/template/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  293. package/template/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  294. package/template/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  295. package/template/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  296. package/template/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  297. package/template/skills/react-best-practices/rules/bundle-preload.md +50 -0
  298. package/template/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  299. package/template/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  300. package/template/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  301. package/template/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  302. package/template/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  303. package/template/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  304. package/template/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  305. package/template/skills/react-best-practices/rules/js-early-exit.md +50 -0
  306. package/template/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  307. package/template/skills/react-best-practices/rules/js-index-maps.md +37 -0
  308. package/template/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  309. package/template/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  310. package/template/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  311. package/template/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  312. package/template/skills/react-best-practices/rules/rendering-activity.md +26 -0
  313. package/template/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  314. package/template/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  315. package/template/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  316. package/template/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  317. package/template/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  318. package/template/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  319. package/template/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  320. package/template/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  321. package/template/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  322. package/template/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  323. package/template/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  324. package/template/skills/react-best-practices/rules/rerender-memo.md +44 -0
  325. package/template/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  326. package/template/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  327. package/template/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  328. package/template/skills/react-best-practices/rules/server-cache-react.md +26 -0
  329. package/template/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  330. package/template/skills/react-best-practices/rules/server-serialization.md +38 -0
  331. package/template/skills/remotion-best-practices/SKILL.md +43 -0
  332. package/template/skills/remotion-best-practices/rules/3d.md +86 -0
  333. package/template/skills/remotion-best-practices/rules/animations.md +29 -0
  334. package/template/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  335. package/template/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  336. package/template/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  337. package/template/skills/remotion-best-practices/rules/assets.md +78 -0
  338. package/template/skills/remotion-best-practices/rules/audio.md +172 -0
  339. package/template/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  340. package/template/skills/remotion-best-practices/rules/can-decode.md +75 -0
  341. package/template/skills/remotion-best-practices/rules/charts.md +58 -0
  342. package/template/skills/remotion-best-practices/rules/compositions.md +146 -0
  343. package/template/skills/remotion-best-practices/rules/display-captions.md +126 -0
  344. package/template/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  345. package/template/skills/remotion-best-practices/rules/fonts.md +152 -0
  346. package/template/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  347. package/template/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  348. package/template/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  349. package/template/skills/remotion-best-practices/rules/gifs.md +138 -0
  350. package/template/skills/remotion-best-practices/rules/images.md +130 -0
  351. package/template/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  352. package/template/skills/remotion-best-practices/rules/lottie.md +68 -0
  353. package/template/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  354. package/template/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  355. package/template/skills/remotion-best-practices/rules/sequencing.md +106 -0
  356. package/template/skills/remotion-best-practices/rules/tailwind.md +11 -0
  357. package/template/skills/remotion-best-practices/rules/text-animations.md +20 -0
  358. package/template/skills/remotion-best-practices/rules/timing.md +179 -0
  359. package/template/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  360. package/template/skills/remotion-best-practices/rules/transitions.md +122 -0
  361. package/template/skills/remotion-best-practices/rules/trimming.md +53 -0
  362. package/template/skills/remotion-best-practices/rules/videos.md +171 -0
  363. package/template/skills/search/SKILL.md +220 -0
  364. package/template/skills/spec/SKILL.md +377 -0
  365. package/template/skills/startup/SKILL.md +310 -0
  366. package/template/skills/web-architect/SKILL.md +309 -0
  367. package/template/skills/x-algorithm/SKILL.md +305 -0
  368. package/template/suggestions/.gitkeep +0 -0
  369. package/template/templates/QUICKSTART_SKILL_TO_PRODUCT.md +242 -0
  370. package/template/templates/brand/BRAND_BRIEF.md +124 -0
  371. package/template/templates/brand/BRAND_DECISIONS.md +168 -0
  372. package/template/templates/brand/BRAND_GUIDELINES.md +251 -0
  373. package/template/templates/brand/VOICE_AND_TONE.md +146 -0
  374. package/template/templates/brand/global.css +240 -0
  375. package/template/templates/collaboration/CONTRIBUTOR.md +74 -0
  376. package/template/templates/collaboration/CRM.md +97 -0
  377. package/template/templates/collaboration/TASKS.md +83 -0
  378. package/template/templates/strategic/NARRATIVE.md +114 -0
  379. package/template/templates/strategic/ROADMAP.md +128 -0
  380. package/template/templates/strategic/THESIS.md +108 -0
  381. package/template/templates/strategic/VISION.md +74 -0
@@ -0,0 +1,265 @@
1
+ /**
2
+ * x402 Payment Client for JFL
3
+ *
4
+ * Handles x402 micropayments for JFL Day Pass ($5/day)
5
+ * Based on httpcat-cli implementation
6
+ */
7
+ import { privateKeyToAccount } from 'viem/accounts';
8
+ import { randomBytes } from 'crypto';
9
+ import Conf from 'conf';
10
+ const config = new Conf({ projectName: 'jfl' });
11
+ // Network configuration
12
+ const USE_TESTNET = process.env.JFL_TESTNET === 'true' || process.env.NODE_ENV !== 'production';
13
+ const NETWORK_CONFIG = {
14
+ testnet: {
15
+ caip2: 'eip155:84532',
16
+ chainId: 84532,
17
+ usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
18
+ usdcName: 'USDC',
19
+ },
20
+ mainnet: {
21
+ caip2: 'eip155:8453',
22
+ chainId: 8453,
23
+ usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
24
+ usdcName: 'USD Coin',
25
+ },
26
+ };
27
+ function getNetwork() {
28
+ return USE_TESTNET ? NETWORK_CONFIG.testnet : NETWORK_CONFIG.mainnet;
29
+ }
30
+ // JFL API endpoints
31
+ const JFL_API_URL = process.env.JFL_API_URL || 'https://api.jfl.run';
32
+ // Day Pass cost: $5 = 5,000,000 (6 decimals)
33
+ const DAY_PASS_COST = BigInt(5_000_000);
34
+ const DAY_PASS_COST_HEX = '0x4c4b40'; // 5,000,000 in hex
35
+ /**
36
+ * Create x402 client with signing capability
37
+ */
38
+ export function createX402Client(privateKey) {
39
+ const signer = privateKeyToAccount(privateKey);
40
+ const network = getNetwork();
41
+ return {
42
+ signer,
43
+ network,
44
+ address: signer.address,
45
+ /**
46
+ * Create EIP-712 payment signature for x402
47
+ */
48
+ async createPaymentSignature(requirements) {
49
+ // Generate unique nonce (critical for each payment)
50
+ const nonceBytes = randomBytes(32);
51
+ const nonce = `0x${nonceBytes.toString('hex').padStart(64, '0')}`;
52
+ // Timing windows
53
+ const validAfter = Math.floor(Date.now() / 1000) - 30; // 30s in past
54
+ const validBefore = validAfter + 330; // 5 minutes total
55
+ // Amount handling
56
+ let valueHex;
57
+ if (requirements.maxAmountRequired.startsWith('0x')) {
58
+ valueHex = requirements.maxAmountRequired;
59
+ }
60
+ else {
61
+ valueHex = `0x${BigInt(requirements.maxAmountRequired).toString(16)}`;
62
+ }
63
+ // EIP-712 domain
64
+ const domain = {
65
+ name: network.usdcName,
66
+ version: '2',
67
+ chainId: network.chainId,
68
+ verifyingContract: network.usdcAddress,
69
+ };
70
+ // EIP-712 types for TransferWithAuthorization (EIP-3009)
71
+ const types = {
72
+ TransferWithAuthorization: [
73
+ { name: 'from', type: 'address' },
74
+ { name: 'to', type: 'address' },
75
+ { name: 'value', type: 'uint256' },
76
+ { name: 'validAfter', type: 'uint256' },
77
+ { name: 'validBefore', type: 'uint256' },
78
+ { name: 'nonce', type: 'bytes32' },
79
+ ],
80
+ };
81
+ // Sign authorization
82
+ const signature = await signer.signTypedData({
83
+ domain,
84
+ types,
85
+ primaryType: 'TransferWithAuthorization',
86
+ message: {
87
+ from: signer.address,
88
+ to: requirements.payTo,
89
+ value: BigInt(valueHex),
90
+ validAfter: BigInt(validAfter),
91
+ validBefore: BigInt(validBefore),
92
+ nonce: nonce,
93
+ },
94
+ });
95
+ // Build x402 V2 payment payload
96
+ const paymentPayload = {
97
+ x402Version: 2,
98
+ scheme: 'exact',
99
+ network: network.caip2,
100
+ payload: {
101
+ signature: signature,
102
+ authorization: {
103
+ from: signer.address,
104
+ to: requirements.payTo,
105
+ value: valueHex,
106
+ validAfter: validAfter.toString(),
107
+ validBefore: validBefore.toString(),
108
+ nonce: nonce,
109
+ },
110
+ },
111
+ };
112
+ // Encode as base64 for header
113
+ return Buffer.from(JSON.stringify(paymentPayload)).toString('base64');
114
+ },
115
+ /**
116
+ * Make x402 request with payment handling
117
+ */
118
+ async request(url, options = {}) {
119
+ // Initial request without payment
120
+ const initialResponse = await fetch(url, {
121
+ ...options,
122
+ headers: {
123
+ 'Content-Type': 'application/json',
124
+ ...options.headers,
125
+ },
126
+ });
127
+ // Check for 402 Payment Required
128
+ if (initialResponse.status === 402) {
129
+ // Parse payment requirements
130
+ const paymentRequiredHeader = initialResponse.headers.get('payment-required') ||
131
+ initialResponse.headers.get('Payment-Required');
132
+ let requirements = null;
133
+ if (paymentRequiredHeader) {
134
+ const decoded = Buffer.from(paymentRequiredHeader, 'base64').toString('utf-8');
135
+ const headerData = JSON.parse(decoded);
136
+ if (headerData.accepts && Array.isArray(headerData.accepts)) {
137
+ requirements = headerData.accepts[0];
138
+ }
139
+ else if (headerData.network && headerData.maxAmountRequired) {
140
+ requirements = headerData;
141
+ }
142
+ }
143
+ if (!requirements) {
144
+ // Try to parse from body
145
+ const responseText = await initialResponse.text();
146
+ const paymentInfo = JSON.parse(responseText);
147
+ requirements = paymentInfo.accepts?.[0];
148
+ }
149
+ if (!requirements) {
150
+ throw new Error('Could not parse payment requirements from 402 response');
151
+ }
152
+ // Create payment signature
153
+ const paymentHeader = await this.createPaymentSignature(requirements);
154
+ // Retry with payment
155
+ await new Promise((resolve) => setTimeout(resolve, 500));
156
+ return fetch(url, {
157
+ ...options,
158
+ headers: {
159
+ 'Content-Type': 'application/json',
160
+ 'PAYMENT-SIGNATURE': paymentHeader,
161
+ ...options.headers,
162
+ },
163
+ });
164
+ }
165
+ return initialResponse;
166
+ },
167
+ };
168
+ }
169
+ /**
170
+ * Check if user has valid day pass
171
+ */
172
+ export function getDayPass() {
173
+ const dayPass = config.get('dayPass');
174
+ if (!dayPass)
175
+ return null;
176
+ // Check if expired (day passes are valid for 24 hours)
177
+ const now = Date.now();
178
+ if (now > dayPass.expiresAt) {
179
+ // Expired, clear it
180
+ config.delete('dayPass');
181
+ return null;
182
+ }
183
+ return dayPass;
184
+ }
185
+ /**
186
+ * Save day pass after successful payment
187
+ */
188
+ export function saveDayPass(leaseId, userAddress) {
189
+ const now = Date.now();
190
+ const dayPass = {
191
+ leaseId,
192
+ userAddress,
193
+ paidAt: now,
194
+ expiresAt: now + 24 * 60 * 60 * 1000, // 24 hours
195
+ };
196
+ config.set('dayPass', dayPass);
197
+ return dayPass;
198
+ }
199
+ /**
200
+ * Check if user needs to pay for today
201
+ */
202
+ export function needsPayment() {
203
+ const dayPass = getDayPass();
204
+ return !dayPass;
205
+ }
206
+ /**
207
+ * Get time remaining on day pass
208
+ */
209
+ export function getDayPassTimeRemaining() {
210
+ const dayPass = getDayPass();
211
+ if (!dayPass)
212
+ return null;
213
+ const remaining = dayPass.expiresAt - Date.now();
214
+ if (remaining <= 0)
215
+ return null;
216
+ const hours = Math.floor(remaining / (60 * 60 * 1000));
217
+ const minutes = Math.floor((remaining % (60 * 60 * 1000)) / (60 * 1000));
218
+ return { hours, minutes };
219
+ }
220
+ /**
221
+ * Purchase day pass via x402
222
+ */
223
+ export async function purchaseDayPass(privateKey) {
224
+ const client = createX402Client(privateKey);
225
+ const network = getNetwork();
226
+ // Call JFL API to purchase day pass
227
+ const response = await client.request(`${JFL_API_URL}/v1/daypass/purchase`, {
228
+ method: 'POST',
229
+ body: JSON.stringify({
230
+ userAddress: client.address,
231
+ network: network.caip2,
232
+ }),
233
+ });
234
+ if (!response.ok) {
235
+ const error = await response.text();
236
+ throw new Error(`Failed to purchase day pass: ${error}`);
237
+ }
238
+ const result = await response.json();
239
+ // Save and return day pass
240
+ return saveDayPass(result.leaseId, client.address);
241
+ }
242
+ /**
243
+ * Verify day pass with JFL API
244
+ */
245
+ export async function verifyDayPass(dayPass) {
246
+ try {
247
+ const response = await fetch(`${JFL_API_URL}/v1/daypass/verify`, {
248
+ method: 'POST',
249
+ headers: { 'Content-Type': 'application/json' },
250
+ body: JSON.stringify({
251
+ leaseId: dayPass.leaseId,
252
+ userAddress: dayPass.userAddress,
253
+ }),
254
+ });
255
+ if (!response.ok)
256
+ return false;
257
+ const result = await response.json();
258
+ return result.valid === true;
259
+ }
260
+ catch {
261
+ // If API is down, trust local day pass if not expired
262
+ return Date.now() < dayPass.expiresAt;
263
+ }
264
+ }
265
+ //# sourceMappingURL=x402-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-client.js","sourceRoot":"","sources":["../../src/utils/x402-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;AAE/C,wBAAwB;AACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAE/F,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE;QACP,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,4CAA4C;QACzD,QAAQ,EAAE,MAAM;KACjB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,4CAA4C;QACzD,QAAQ,EAAE,UAAU;KACrB;CACF,CAAA;AAED,SAAS,UAAU;IACjB,OAAO,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAA;AACtE,CAAC;AAED,oBAAoB;AACpB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,qBAAqB,CAAA;AAEpE,6CAA6C;AAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;AACvC,MAAM,iBAAiB,GAAG,UAAU,CAAA,CAAC,mBAAmB;AAiBxD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAe;IAC9C,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,OAAO;QACL,MAAM;QACN,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO;QAEvB;;WAEG;QACH,KAAK,CAAC,sBAAsB,CAAC,YAAiC;YAC5D,oDAAoD;YACpD,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAmB,CAAA;YAElF,iBAAiB;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,cAAc;YACrE,MAAM,WAAW,GAAG,UAAU,GAAG,GAAG,CAAA,CAAE,kBAAkB;YAExD,kBAAkB;YAClB,IAAI,QAAgB,CAAA;YACpB,IAAI,YAAY,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAA;YAC3C,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,KAAK,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;YACvE,CAAC;YAED,iBAAiB;YACjB,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,iBAAiB,EAAE,OAAO,CAAC,WAA4B;aACxD,CAAA;YAED,yDAAyD;YACzD,MAAM,KAAK,GAAG;gBACZ,yBAAyB,EAAE;oBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;oBACjC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;oBAClC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;oBACvC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;oBACxC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;iBACnC;aACF,CAAA;YAED,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;gBAC3C,MAAM;gBACN,KAAK;gBACL,WAAW,EAAE,2BAA2B;gBACxC,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,OAAO;oBACpB,EAAE,EAAE,YAAY,CAAC,KAAsB;oBACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;oBAC9B,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;oBAChC,KAAK,EAAE,KAAK;iBACb;aACF,CAAC,CAAA;YAEF,gCAAgC;YAChC,MAAM,cAAc,GAAG;gBACrB,WAAW,EAAE,CAAC;gBACd,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,OAAO,CAAC,KAAK;gBACtB,OAAO,EAAE;oBACP,SAAS,EAAE,SAAS;oBACpB,aAAa,EAAE;wBACb,IAAI,EAAE,MAAM,CAAC,OAAO;wBACpB,EAAE,EAAE,YAAY,CAAC,KAAK;wBACtB,KAAK,EAAE,QAAQ;wBACf,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;wBACjC,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;wBACnC,KAAK,EAAE,KAAK;qBACb;iBACF;aACF,CAAA;YAED,8BAA8B;YAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACvE,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,UAAuB,EAAE;YAClD,kCAAkC;YAClC,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBACvC,GAAG,OAAO;gBACV,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,OAAO,CAAC,OAAO;iBACnB;aACF,CAAC,CAAA;YAEF,iCAAiC;YACjC,IAAI,eAAe,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,6BAA6B;gBAC7B,MAAM,qBAAqB,GACzB,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;oBAC/C,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;gBAEjD,IAAI,YAAY,GAA+B,IAAI,CAAA;gBAEnD,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;oBAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;oBAEtC,IAAI,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC5D,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;oBACtC,CAAC;yBAAM,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;wBAC9D,YAAY,GAAG,UAAU,CAAA;oBAC3B,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,yBAAyB;oBACzB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAA;oBACjD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;oBAC5C,YAAY,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzC,CAAC;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;gBAC3E,CAAC;gBAED,2BAA2B;gBAC3B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAA;gBAErE,qBAAqB;gBACrB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBAExD,OAAO,KAAK,CAAC,GAAG,EAAE;oBAChB,GAAG,OAAO;oBACV,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,mBAAmB,EAAE,aAAa;wBAClC,GAAG,OAAO,CAAC,OAAO;qBACnB;iBACF,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,eAAe,CAAA;QACxB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAwB,CAAA;IAC5D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,uDAAuD;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5B,oBAAoB;QACpB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,WAAmB;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,OAAO,GAAY;QACvB,OAAO;QACP,WAAW;QACX,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW;KAClD,CAAA;IACD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAChD,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAExE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAe;IACnD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,oCAAoC;IACpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,sBAAsB,EAAE;QAC1E,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC,OAAO;YAC3B,OAAO,EAAE,OAAO,CAAC,KAAK;SACvB,CAAC;KACH,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACnC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAEpC,2BAA2B;IAC3B,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgB;IAClD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,oBAAoB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,KAAK,CAAA;QAE9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACpC,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;QACtD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAA;IACvC,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "jfl",
3
+ "version": "0.0.0",
4
+ "description": "Just Fucking Launch - CLI for AI-powered GTM and development",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "jfl": "dist/index.js",
9
+ "jfl-context-hub-mcp": "dist/mcp/context-hub-mcp.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "scripts",
14
+ "template",
15
+ "clawdbot-skill",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "dev": "tsx --watch src/index.ts",
22
+ "start": "node dist/index.js",
23
+ "prepublishOnly": "npm run build",
24
+ "postinstall": "node scripts/postinstall.js"
25
+ },
26
+ "keywords": [
27
+ "ai",
28
+ "claude",
29
+ "gtm",
30
+ "go-to-market",
31
+ "launch",
32
+ "cli",
33
+ "productivity",
34
+ "startup",
35
+ "marketing",
36
+ "x402",
37
+ "crypto"
38
+ ],
39
+ "author": "Alec Taggart <402goose@users.noreply.github.com>",
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/402goose/jfl-cli.git"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/402goose/jfl-cli/issues"
47
+ },
48
+ "homepage": "https://jfl.run",
49
+ "engines": {
50
+ "node": ">=18.0.0"
51
+ },
52
+ "dependencies": {
53
+ "@clack/prompts": "^0.11.0",
54
+ "@scure/bip32": "^2.0.1",
55
+ "@scure/bip39": "^2.0.1",
56
+ "@x402/core": "^2.2.0",
57
+ "@x402/evm": "^2.2.0",
58
+ "chalk": "^5.3.0",
59
+ "commander": "^12.0.0",
60
+ "conf": "^12.0.0",
61
+ "httpcat-cli": "^0.3.3",
62
+ "inquirer": "^9.2.14",
63
+ "node-global-key-listener": "^0.3.0",
64
+ "open": "^10.0.0",
65
+ "ora": "^8.0.1",
66
+ "viem": "^2.44.4",
67
+ "ws": "^8.16.0"
68
+ },
69
+ "devDependencies": {
70
+ "@types/inquirer": "^9.0.7",
71
+ "@types/node": "^20.11.0",
72
+ "@types/ws": "^8.18.1",
73
+ "tsx": "^4.7.0",
74
+ "typescript": "^5.3.3"
75
+ }
76
+ }
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * JFL CLI Postinstall Script
4
+ *
5
+ * Installs bundled tools that enhance the JFL experience:
6
+ * - ralph-tui: AI agent loop orchestrator for autonomous task execution
7
+ *
8
+ * These tools require Bun runtime. If Bun is not installed,
9
+ * we'll show instructions but continue (tools are optional).
10
+ */
11
+
12
+ import { execSync, spawnSync } from "child_process";
13
+ import { platform } from "os";
14
+
15
+ const TOOLS = [
16
+ {
17
+ name: "ralph-tui",
18
+ package: "ralph-tui",
19
+ description: "AI agent loop orchestrator",
20
+ requiresBun: true,
21
+ },
22
+ ];
23
+
24
+ function hasBun() {
25
+ try {
26
+ execSync("bun --version", { stdio: "ignore" });
27
+ return true;
28
+ } catch {
29
+ return false;
30
+ }
31
+ }
32
+
33
+ function hasCommand(cmd) {
34
+ try {
35
+ execSync(`which ${cmd}`, { stdio: "ignore" });
36
+ return true;
37
+ } catch {
38
+ return false;
39
+ }
40
+ }
41
+
42
+ function installWithBun(pkg) {
43
+ try {
44
+ console.log(` Installing ${pkg}...`);
45
+ execSync(`bun install -g ${pkg}`, { stdio: "inherit" });
46
+ return true;
47
+ } catch (error) {
48
+ console.error(` Failed to install ${pkg}: ${error.message}`);
49
+ return false;
50
+ }
51
+ }
52
+
53
+ function main() {
54
+ console.log("\n๐Ÿš€ JFL CLI - Setting up bundled tools...\n");
55
+
56
+ const bunInstalled = hasBun();
57
+
58
+ if (!bunInstalled) {
59
+ console.log("โš ๏ธ Bun runtime not found.");
60
+ console.log(" Some JFL tools (like ralph-tui) require Bun.");
61
+ console.log("");
62
+ console.log(" Install Bun:");
63
+ if (platform() === "win32") {
64
+ console.log(' powershell -c "irm bun.sh/install.ps1 | iex"');
65
+ } else {
66
+ console.log(" curl -fsSL https://bun.sh/install | bash");
67
+ }
68
+ console.log("");
69
+ console.log(" Then run: jfl update");
70
+ console.log("");
71
+ return;
72
+ }
73
+
74
+ console.log("โœ… Bun runtime detected\n");
75
+
76
+ for (const tool of TOOLS) {
77
+ if (tool.requiresBun && !bunInstalled) {
78
+ console.log(`โญ๏ธ Skipping ${tool.name} (requires Bun)`);
79
+ continue;
80
+ }
81
+
82
+ // Check if already installed
83
+ if (hasCommand(tool.name)) {
84
+ console.log(`โœ… ${tool.name} already installed`);
85
+ continue;
86
+ }
87
+
88
+ console.log(`๐Ÿ“ฆ Installing ${tool.name} - ${tool.description}`);
89
+ const success = installWithBun(tool.package);
90
+
91
+ if (success) {
92
+ console.log(`โœ… ${tool.name} installed successfully\n`);
93
+ } else {
94
+ console.log(`โš ๏ธ ${tool.name} installation failed (optional)\n`);
95
+ }
96
+ }
97
+
98
+ console.log("๐ŸŽ‰ JFL CLI setup complete!\n");
99
+ console.log("Available tools:");
100
+ console.log(" jfl - Main CLI");
101
+ if (hasCommand("ralph-tui")) {
102
+ console.log(" ralph-tui - AI agent loop orchestrator");
103
+ }
104
+ console.log("");
105
+
106
+ // Check for Clawdbot integration
107
+ if (hasCommand("clawdbot")) {
108
+ console.log("๐Ÿฆž Clawdbot detected!");
109
+ console.log("");
110
+ console.log("Add JFL to Telegram/Slack/Discord:");
111
+ console.log(" jfl clawdbot install");
112
+ console.log("");
113
+ }
114
+ }
115
+
116
+ main();
@@ -0,0 +1,121 @@
1
+ #!/bin/bash
2
+ # Test JFL onboarding flow in isolated environment
3
+
4
+ set -e
5
+
6
+ TEST_DIR="/tmp/jfl-test-$(date +%s)"
7
+ CONFIG_BACKUP="$HOME/.config/jfl.backup-$(date +%s)"
8
+
9
+ echo "๐Ÿงช JFL Test Mode"
10
+ echo ""
11
+ echo "This will:"
12
+ echo " 1. Backup your current JFL config"
13
+ echo " 2. Clear config for fresh onboarding"
14
+ echo " 3. Create test directory: $TEST_DIR"
15
+ echo " 4. Launch JFL"
16
+ echo " 5. Restore your config when done"
17
+ echo ""
18
+ read -p "Continue? (y/n) " -n 1 -r
19
+ echo
20
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
21
+ echo "Cancelled."
22
+ exit 0
23
+ fi
24
+
25
+ # Backup current config
26
+ if [ -d "$HOME/.config/jfl" ]; then
27
+ echo "๐Ÿ“ฆ Backing up config to $CONFIG_BACKUP"
28
+ mv "$HOME/.config/jfl" "$CONFIG_BACKUP"
29
+ fi
30
+
31
+ # Create test directory
32
+ echo "๐Ÿ“ Creating test directory: $TEST_DIR"
33
+ mkdir -p "$TEST_DIR"
34
+ cd "$TEST_DIR"
35
+
36
+ # Cleanup function
37
+ cleanup() {
38
+ echo ""
39
+ echo "๐Ÿงน Cleaning up..."
40
+
41
+ # Check for created GitHub repos in test directory
42
+ CREATED_REPOS=()
43
+ if [ -d "$TEST_DIR" ]; then
44
+ # Find any directories with .git in them (product repos)
45
+ for dir in "$TEST_DIR"/*/product; do
46
+ if [ -d "$dir/.git" ]; then
47
+ # Get repo name from git remote
48
+ cd "$dir" 2>/dev/null || continue
49
+ REPO_URL=$(git remote get-url origin 2>/dev/null || echo "")
50
+ if [[ -n "$REPO_URL" ]]; then
51
+ # Extract owner/repo from URL
52
+ # Handles both SSH (git@github.com:owner/repo.git) and HTTPS (https://github.com/owner/repo.git)
53
+ REPO_FULL=$(echo "$REPO_URL" | sed -E 's#^(https://|git@)github\.com[:/]##' | sed 's/\.git$//')
54
+ CREATED_REPOS+=("$REPO_FULL")
55
+ fi
56
+ fi
57
+ done
58
+ fi
59
+
60
+ # Ask about deleting GitHub repos
61
+ if [ ${#CREATED_REPOS[@]} -gt 0 ]; then
62
+ echo ""
63
+ echo "Found ${#CREATED_REPOS[@]} test repo(s) on GitHub:"
64
+ for repo in "${CREATED_REPOS[@]}"; do
65
+ echo " - $repo"
66
+ done
67
+ echo ""
68
+ read -p "Delete these repos from GitHub? (y/n) " -n 1 -r
69
+ echo
70
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
71
+ for repo in "${CREATED_REPOS[@]}"; do
72
+ echo "Deleting $repo from GitHub..."
73
+ if gh repo delete "$repo" --yes 2>/dev/null; then
74
+ echo " โœ“ Deleted: $repo"
75
+ else
76
+ echo " โš ๏ธ Failed to delete: $repo (may need to delete manually)"
77
+ fi
78
+ done
79
+ else
80
+ echo "Repos kept on GitHub"
81
+ fi
82
+ fi
83
+
84
+ # Remove test config
85
+ rm -rf "$HOME/.config/jfl"
86
+
87
+ # Restore original config
88
+ if [ -d "$CONFIG_BACKUP" ]; then
89
+ echo "๐Ÿ“ฆ Restoring config from $CONFIG_BACKUP"
90
+ mv "$CONFIG_BACKUP" "$HOME/.config/jfl"
91
+ fi
92
+
93
+ # Ask about test directory
94
+ echo ""
95
+ read -p "Delete test directory $TEST_DIR? (y/n) " -n 1 -r
96
+ echo
97
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
98
+ rm -rf "$TEST_DIR"
99
+ echo "โœ“ Test directory deleted"
100
+ else
101
+ echo "Test directory kept at: $TEST_DIR"
102
+ fi
103
+
104
+ echo ""
105
+ echo "โœ“ Restored to normal state"
106
+ }
107
+
108
+ # Set trap to cleanup on exit
109
+ trap cleanup EXIT INT TERM
110
+
111
+ # Show environment
112
+ echo ""
113
+ echo "๐ŸŽฏ Test Environment Ready"
114
+ echo " Config: Fresh (backed up to $CONFIG_BACKUP)"
115
+ echo " Directory: $TEST_DIR"
116
+ echo ""
117
+ echo "Starting JFL..."
118
+ echo ""
119
+
120
+ # Launch JFL
121
+ jfl