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,639 @@
1
+ import chalk from "chalk";
2
+ import inquirer from "inquirer";
3
+ import * as p from "@clack/prompts";
4
+ import { execSync, spawn } from "child_process";
5
+ import { existsSync, readFileSync } from "fs";
6
+ import { join } from "path";
7
+ import Conf from "conf";
8
+ import { ensureDayPass, isTrialMode, showDayPassStatus, markTeammateJoined } from "../utils/auth-guard.js";
9
+ import { authenticateWithGitHub, discoverJflProjects, cloneRepository, } from "../utils/github-auth.js";
10
+ import { renderBanner, showHowItWorksNotice, theme } from "../ui/index.js";
11
+ import { initCommand } from "./init.js";
12
+ const config = new Conf({ projectName: "jfl" });
13
+ // Flags for running in autonomous/yolo mode
14
+ const AUTONOMOUS_FLAGS = {
15
+ claude: "--dangerously-skip-permissions",
16
+ codex: "--full-auto",
17
+ aider: "--yes-always",
18
+ none: undefined,
19
+ };
20
+ // Flag for enabling Chrome/browser capabilities (Claude only)
21
+ const CHROME_FLAG = "--chrome";
22
+ export async function sessionCommand() {
23
+ const cwd = process.cwd();
24
+ // Check if in a JFL project
25
+ const hasJflConfig = existsSync(join(cwd, "CLAUDE.md")) || existsSync(join(cwd, "knowledge"));
26
+ if (!hasJflConfig) {
27
+ await onboardNewUser(cwd);
28
+ return;
29
+ }
30
+ // Check day pass for paid users (trial mode is free)
31
+ if (!isTrialMode()) {
32
+ console.log(chalk.yellow("\n💳 Payment required (teammates detected)\n"));
33
+ const dayPass = await ensureDayPass();
34
+ if (!dayPass) {
35
+ // User cancelled or failed to purchase day pass
36
+ console.log(chalk.red("\n❌ Cannot start session without active Day Pass\n"));
37
+ console.log(chalk.gray("Run: jfl login --x402"));
38
+ console.log();
39
+ return;
40
+ }
41
+ console.log(chalk.green("✓ Day Pass verified\n"));
42
+ }
43
+ else {
44
+ console.log(chalk.green("🎁 Trial Mode") + chalk.gray(" - Free until foundation complete\n"));
45
+ }
46
+ // Track this project
47
+ const projects = config.get("projects") || [];
48
+ if (!projects.includes(cwd)) {
49
+ projects.push(cwd);
50
+ config.set("projects", projects);
51
+ }
52
+ // Check for saved preference
53
+ let preferredCLI = config.get("aiCLI");
54
+ // Detect available CLIs
55
+ const available = detectAICLIs();
56
+ if (available.length === 0) {
57
+ await onboardAICLI();
58
+ return;
59
+ }
60
+ // If preference is set and still available, use it
61
+ if (preferredCLI) {
62
+ const preferred = available.find(cli => cli.command === preferredCLI);
63
+ if (preferred) {
64
+ await launchCLI(preferred, cwd);
65
+ return;
66
+ }
67
+ }
68
+ // If only one option, use it
69
+ if (available.length === 1) {
70
+ config.set("aiCLI", available[0].command);
71
+ await launchCLI(available[0], cwd);
72
+ return;
73
+ }
74
+ // Multiple options - let them choose
75
+ console.log(chalk.bold("\n🤖 JFL - AI Session\n"));
76
+ console.log(chalk.gray("Multiple AI CLIs detected:\n"));
77
+ const { selected } = await inquirer.prompt([
78
+ {
79
+ type: "list",
80
+ name: "selected",
81
+ message: "Which AI do you want to use?",
82
+ choices: available.map(cli => ({
83
+ name: `${cli.name}${cli.version ? ` (${cli.version})` : ""}`,
84
+ value: cli.command,
85
+ })),
86
+ },
87
+ ]);
88
+ const { remember } = await inquirer.prompt([
89
+ {
90
+ type: "confirm",
91
+ name: "remember",
92
+ message: "Remember this choice?",
93
+ default: true,
94
+ },
95
+ ]);
96
+ if (remember) {
97
+ config.set("aiCLI", selected);
98
+ }
99
+ const cli = available.find(c => c.command === selected);
100
+ await launchCLI(cli, cwd);
101
+ }
102
+ function detectAICLIs() {
103
+ const clis = [];
104
+ // Claude Code
105
+ try {
106
+ const version = execSync("claude --version 2>/dev/null", { encoding: "utf-8" }).trim();
107
+ clis.push({
108
+ name: "Claude Code",
109
+ command: "claude",
110
+ provider: "claude",
111
+ version: version.split("\n")[0],
112
+ });
113
+ }
114
+ catch {
115
+ // Not installed
116
+ }
117
+ // OpenAI Codex CLI
118
+ try {
119
+ const version = execSync("codex --version 2>/dev/null", { encoding: "utf-8" }).trim();
120
+ clis.push({
121
+ name: "Codex CLI",
122
+ command: "codex",
123
+ provider: "codex",
124
+ version,
125
+ });
126
+ }
127
+ catch {
128
+ // Not installed
129
+ }
130
+ // Aider
131
+ try {
132
+ const version = execSync("aider --version 2>/dev/null", { encoding: "utf-8" }).trim();
133
+ clis.push({
134
+ name: "Aider",
135
+ command: "aider",
136
+ provider: "aider",
137
+ version,
138
+ });
139
+ }
140
+ catch {
141
+ // Not installed
142
+ }
143
+ return clis;
144
+ }
145
+ async function promptAutonomousMode(cli) {
146
+ const savedPref = config.get(`autonomous_${cli.provider}`);
147
+ // If they've already set a preference, use it
148
+ if (savedPref !== undefined) {
149
+ return savedPref;
150
+ }
151
+ const flag = AUTONOMOUS_FLAGS[cli.provider];
152
+ if (!flag)
153
+ return false;
154
+ console.log();
155
+ const { autonomous } = await inquirer.prompt([
156
+ {
157
+ type: "confirm",
158
+ name: "autonomous",
159
+ message: `Run in autonomous mode? (${flag})`,
160
+ default: false,
161
+ },
162
+ ]);
163
+ if (autonomous) {
164
+ console.log(chalk.yellow("\n⚠️ Autonomous mode: AI can execute without asking permission."));
165
+ }
166
+ const { remember } = await inquirer.prompt([
167
+ {
168
+ type: "confirm",
169
+ name: "remember",
170
+ message: "Remember this choice?",
171
+ default: true,
172
+ },
173
+ ]);
174
+ if (remember) {
175
+ config.set(`autonomous_${cli.provider}`, autonomous);
176
+ }
177
+ return autonomous;
178
+ }
179
+ async function promptChromeMode(cli) {
180
+ // Chrome mode only available for Claude
181
+ if (cli.provider !== "claude")
182
+ return false;
183
+ const savedPref = config.get("chrome_claude");
184
+ // If they've already set a preference, use it
185
+ if (savedPref !== undefined) {
186
+ return savedPref;
187
+ }
188
+ console.log();
189
+ const { chrome } = await inquirer.prompt([
190
+ {
191
+ type: "confirm",
192
+ name: "chrome",
193
+ message: `Enable browser capabilities? (${CHROME_FLAG})`,
194
+ default: false,
195
+ },
196
+ ]);
197
+ if (chrome) {
198
+ console.log(chalk.cyan("\n🌐 Chrome mode: Claude can browse and interact with web pages."));
199
+ }
200
+ const { remember } = await inquirer.prompt([
201
+ {
202
+ type: "confirm",
203
+ name: "remember",
204
+ message: "Remember this choice?",
205
+ default: true,
206
+ },
207
+ ]);
208
+ if (remember) {
209
+ config.set("chrome_claude", chrome);
210
+ }
211
+ return chrome;
212
+ }
213
+ function showBanner() {
214
+ // Get version from package.json
215
+ let version;
216
+ try {
217
+ const pkgPath = new URL("../../package.json", import.meta.url);
218
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
219
+ version = pkg.version;
220
+ }
221
+ catch {
222
+ // Ignore
223
+ }
224
+ console.log(renderBanner({ version }));
225
+ }
226
+ async function launchCLI(cli, cwd, skipAutonomousPrompt = false) {
227
+ // Check for autonomous mode
228
+ let autonomous = false;
229
+ if (!skipAutonomousPrompt) {
230
+ autonomous = await promptAutonomousMode(cli);
231
+ }
232
+ else {
233
+ autonomous = config.get(`autonomous_${cli.provider}`) || false;
234
+ }
235
+ // Check for chrome mode (Claude only)
236
+ let chrome = false;
237
+ if (cli.provider === "claude") {
238
+ if (!skipAutonomousPrompt) {
239
+ chrome = await promptChromeMode(cli);
240
+ }
241
+ else {
242
+ chrome = config.get("chrome_claude") || false;
243
+ }
244
+ }
245
+ // Build args array
246
+ const args = [];
247
+ if (autonomous && AUTONOMOUS_FLAGS[cli.provider]) {
248
+ args.push(AUTONOMOUS_FLAGS[cli.provider]);
249
+ }
250
+ if (chrome) {
251
+ args.push(CHROME_FLAG);
252
+ }
253
+ // Show trial/day pass status (no banner - already shown in onboard)
254
+ if (isTrialMode()) {
255
+ console.log(theme.success("🎁 Trial Mode") + theme.dim(" — Free until foundation complete\n"));
256
+ }
257
+ else {
258
+ showDayPassStatus();
259
+ console.log();
260
+ }
261
+ // Build mode indicators
262
+ const modes = [];
263
+ if (autonomous)
264
+ modes.push("autonomous");
265
+ if (chrome)
266
+ modes.push("chrome");
267
+ const modeStr = modes.length > 0 ? theme.dim(` (${modes.join(", ")})`) : "";
268
+ console.log(theme.accent(`Launching ${cli.name}`) + modeStr);
269
+ console.log(theme.dim("Context loaded from CLAUDE.md + knowledge/\n"));
270
+ console.log(theme.dimmer("─".repeat(50)));
271
+ console.log();
272
+ // Spawn the CLI in the current directory
273
+ const child = spawn(cli.command, args, {
274
+ cwd,
275
+ stdio: "inherit",
276
+ env: {
277
+ ...process.env,
278
+ JFL_PROJECT: cwd,
279
+ },
280
+ });
281
+ child.on("error", (err) => {
282
+ console.error(chalk.red(`\nFailed to launch ${cli.name}:`), err.message);
283
+ });
284
+ child.on("exit", (code) => {
285
+ if (code !== 0 && code !== null) {
286
+ console.log(chalk.yellow(`\n${cli.name} exited with code ${code}`));
287
+ }
288
+ console.log(chalk.gray("\nJFL session ended.\n"));
289
+ });
290
+ }
291
+ async function onboardNewUser(cwd) {
292
+ // Show banner with version
293
+ showBanner();
294
+ // Show "How It Works" notice
295
+ showHowItWorksNotice();
296
+ // Check for known projects first
297
+ const knownProjects = config.get("projects") || [];
298
+ const existingProjects = knownProjects.filter((p) => existsSync(join(p, "CLAUDE.md")) || existsSync(join(p, "knowledge")));
299
+ // Start Clawdbot-style flow
300
+ p.intro(chalk.hex("#FFD700")("┌ JFL onboarding"));
301
+ // If we have known projects, show them upfront
302
+ if (existingProjects.length > 0) {
303
+ const selected = await p.select({
304
+ message: "Open a project or create new?",
305
+ options: [
306
+ ...existingProjects.map((proj) => ({
307
+ label: proj.replace(process.env.HOME || "", "~"),
308
+ value: proj,
309
+ })),
310
+ { label: "Join existing project (I was invited)", value: "join" },
311
+ { label: "Create new project", value: "new" },
312
+ ],
313
+ });
314
+ if (p.isCancel(selected)) {
315
+ p.cancel("Setup cancelled.");
316
+ process.exit(0);
317
+ }
318
+ if (selected === "join") {
319
+ await joinExistingProject();
320
+ return;
321
+ }
322
+ if (selected !== "new") {
323
+ // Update config with cleaned list
324
+ config.set("projects", existingProjects);
325
+ process.chdir(selected);
326
+ p.outro(chalk.hex("#FFA500")(`Opening ${selected.replace(process.env.HOME || "", "~")}`));
327
+ // Launch
328
+ const available = detectAICLIs();
329
+ if (available.length > 0) {
330
+ await launchCLI(available[0], selected);
331
+ }
332
+ else {
333
+ await onboardAICLI();
334
+ }
335
+ return;
336
+ }
337
+ }
338
+ // No known projects or they want to create new
339
+ const action = await p.select({
340
+ message: "What do you want to do?",
341
+ options: [
342
+ { label: "Join existing project (I was invited)", value: "join" },
343
+ { label: "Create a new project", value: "create" },
344
+ ],
345
+ });
346
+ if (p.isCancel(action)) {
347
+ p.cancel("Setup cancelled.");
348
+ process.exit(0);
349
+ }
350
+ if (action === "join") {
351
+ await joinExistingProject();
352
+ return;
353
+ }
354
+ // Redirect to init command for proper project creation
355
+ p.outro(chalk.hex("#FFA500")("Launching project setup..."));
356
+ await initCommand();
357
+ }
358
+ async function joinExistingProject() {
359
+ console.log(chalk.cyan("\n🔗 Join Existing Project\n"));
360
+ // Authenticate with GitHub using Device Flow
361
+ let username;
362
+ try {
363
+ username = await authenticateWithGitHub();
364
+ }
365
+ catch (error) {
366
+ console.error(chalk.red("\nGitHub authentication failed"));
367
+ console.error(chalk.gray(error instanceof Error ? error.message : String(error)));
368
+ return;
369
+ }
370
+ // Discover JFL projects
371
+ let projects;
372
+ try {
373
+ projects = await discoverJflProjects();
374
+ }
375
+ catch (error) {
376
+ console.error(chalk.red("\nFailed to discover projects"));
377
+ console.error(chalk.gray(error instanceof Error ? error.message : String(error)));
378
+ return;
379
+ }
380
+ if (projects.length === 0) {
381
+ console.log(chalk.yellow("\nNo JFL projects found that you have access to.\n"));
382
+ console.log(chalk.gray("Ask the project owner to add you as a collaborator."));
383
+ console.log(chalk.gray("The project needs a CLAUDE.md file or .jfl/ directory.\n"));
384
+ return;
385
+ }
386
+ // Show projects with details
387
+ console.log();
388
+ const { selectedProject } = await inquirer.prompt([
389
+ {
390
+ type: "list",
391
+ name: "selectedProject",
392
+ message: "Which project do you want to join?",
393
+ choices: projects.map((p) => ({
394
+ name: `${p.fullName}${p.hasUserSuggestions ? chalk.green(" (you're invited)") : ""}${p.description ? chalk.gray(` - ${p.description}`) : ""}`,
395
+ value: p,
396
+ })),
397
+ },
398
+ ]);
399
+ // Check if we already have this project locally
400
+ const trackedProjects = config.get("projects") || [];
401
+ const existingLocal = trackedProjects.find((p) => {
402
+ const projectName = p.split("/").pop();
403
+ return projectName === selectedProject.name &&
404
+ (existsSync(join(p, "CLAUDE.md")) || existsSync(join(p, ".jfl")));
405
+ });
406
+ // Also check common locations
407
+ const commonPaths = [
408
+ join(process.env.HOME || "", "Projects", selectedProject.name),
409
+ join(process.env.HOME || "", selectedProject.name),
410
+ join(process.cwd(), selectedProject.name),
411
+ ];
412
+ const existingAtCommonPath = commonPaths.find((p) => existsSync(p) && (existsSync(join(p, "CLAUDE.md")) || existsSync(join(p, ".jfl"))));
413
+ const alreadyCloned = existingLocal || existingAtCommonPath;
414
+ if (alreadyCloned) {
415
+ console.log(chalk.green(`\n✓ Already have ${selectedProject.name} at ${alreadyCloned}\n`));
416
+ const { openExisting } = await inquirer.prompt([
417
+ {
418
+ type: "confirm",
419
+ name: "openExisting",
420
+ message: "Open it?",
421
+ default: true,
422
+ },
423
+ ]);
424
+ if (openExisting) {
425
+ // Track if not already
426
+ if (!trackedProjects.includes(alreadyCloned)) {
427
+ trackedProjects.push(alreadyCloned);
428
+ config.set("projects", trackedProjects);
429
+ }
430
+ process.chdir(alreadyCloned);
431
+ const available = detectAICLIs();
432
+ if (available.length > 0) {
433
+ await launchCLI(available[0], alreadyCloned);
434
+ }
435
+ else {
436
+ await onboardAICLI();
437
+ }
438
+ }
439
+ return;
440
+ }
441
+ // Show project info
442
+ console.log();
443
+ console.log(chalk.bold(`Project: ${selectedProject.fullName}`));
444
+ if (selectedProject.description) {
445
+ console.log(chalk.gray(selectedProject.description));
446
+ }
447
+ if (selectedProject.projectConfig?.wallet) {
448
+ console.log(chalk.gray(`Wallet: ${selectedProject.projectConfig.wallet.slice(0, 10)}...`));
449
+ }
450
+ if (selectedProject.hasUserSuggestions) {
451
+ console.log(chalk.green(`✓ Your suggestions file exists (suggestions/${username}.md)`));
452
+ }
453
+ console.log();
454
+ // Ask where to clone
455
+ const defaultPath = join(process.env.HOME || "", "Projects", selectedProject.name);
456
+ const { clonePath } = await inquirer.prompt([
457
+ {
458
+ type: "input",
459
+ name: "clonePath",
460
+ message: "Where to clone?",
461
+ default: defaultPath,
462
+ },
463
+ ]);
464
+ const expandedPath = clonePath.replace(/^~/, process.env.HOME || "");
465
+ // Clone the repo
466
+ let clonedPath;
467
+ try {
468
+ clonedPath = await cloneRepository(selectedProject, expandedPath);
469
+ }
470
+ catch (error) {
471
+ console.error(chalk.red("\nClone failed"));
472
+ console.error(chalk.gray(error instanceof Error ? error.message : String(error)));
473
+ return;
474
+ }
475
+ // Track this project
476
+ const allProjects = config.get("projects") || [];
477
+ if (!allProjects.includes(clonedPath)) {
478
+ allProjects.push(clonedPath);
479
+ config.set("projects", allProjects);
480
+ }
481
+ config.set("hasOnboarded", true);
482
+ // Mark this teammate as joined (adds <!-- joined: DATE --> marker)
483
+ markTeammateJoined(username);
484
+ console.log(chalk.green(`\n✓ Joined ${selectedProject.name}!\n`));
485
+ // Show project configuration
486
+ if (selectedProject.projectConfig?.wallet) {
487
+ console.log(chalk.gray("Project Configuration:"));
488
+ console.log(chalk.gray(` Owner: ${selectedProject.projectConfig.walletOwner || selectedProject.owner}`));
489
+ console.log(chalk.gray(` Wallet: ${selectedProject.projectConfig.wallet} (configured)`));
490
+ console.log(chalk.gray(` Your role: Contributor`));
491
+ console.log();
492
+ }
493
+ console.log(chalk.gray(`Location: ${clonedPath}`));
494
+ console.log(chalk.cyan(`\nTo start working:\n`));
495
+ console.log(chalk.white(` cd ${clonedPath}`));
496
+ console.log(chalk.white(` jfl\n`));
497
+ // Offer to launch now
498
+ const { launchNow } = await inquirer.prompt([
499
+ {
500
+ type: "confirm",
501
+ name: "launchNow",
502
+ message: "Open project now?",
503
+ default: true,
504
+ },
505
+ ]);
506
+ if (launchNow) {
507
+ process.chdir(clonedPath);
508
+ const available = detectAICLIs();
509
+ if (available.length > 0) {
510
+ await launchCLI(available[0], clonedPath);
511
+ }
512
+ else {
513
+ await onboardAICLI();
514
+ }
515
+ }
516
+ }
517
+ async function onboardAICLI() {
518
+ console.log(chalk.bold("\n🤖 JFL - Setup AI Assistant\n"));
519
+ console.log(chalk.gray("JFL works with your AI of choice. Let's get you set up.\n"));
520
+ const { experience } = await inquirer.prompt([
521
+ {
522
+ type: "list",
523
+ name: "experience",
524
+ message: "How technical are you?",
525
+ choices: [
526
+ { name: "I'm a developer - comfortable with terminal", value: "dev" },
527
+ { name: "Somewhat technical - can follow instructions", value: "some" },
528
+ { name: "Not technical - need the easy path", value: "none" },
529
+ ],
530
+ },
531
+ ]);
532
+ if (experience === "none") {
533
+ // Non-technical path - recommend browser-based or desktop app
534
+ console.log(chalk.cyan("\n📱 Easiest options for you:\n"));
535
+ console.log(chalk.bold("1. Claude.ai (browser)"));
536
+ console.log(chalk.gray(" Go to claude.ai, sign up, and chat directly"));
537
+ console.log(chalk.gray(" You can paste your project files into the chat\n"));
538
+ console.log(chalk.bold("2. Claude Desktop App"));
539
+ console.log(chalk.gray(" Download from claude.ai/download"));
540
+ console.log(chalk.gray(" Works like ChatGPT but with Claude\n"));
541
+ console.log(chalk.bold("3. Cursor (AI-powered code editor)"));
542
+ console.log(chalk.gray(" Download from cursor.com"));
543
+ console.log(chalk.gray(" Like VS Code but with AI built in\n"));
544
+ console.log(chalk.yellow("For the full JFL experience, Claude Code is best."));
545
+ console.log(chalk.gray("But start with what's comfortable.\n"));
546
+ return;
547
+ }
548
+ // Technical path - CLI tools
549
+ console.log(chalk.yellow("\nNo AI CLI detected.\n"));
550
+ const { choice } = await inquirer.prompt([
551
+ {
552
+ type: "list",
553
+ name: "choice",
554
+ message: "Which AI do you want to use?",
555
+ choices: [
556
+ {
557
+ name: "Claude Code (recommended for JFL)",
558
+ value: "claude",
559
+ },
560
+ {
561
+ name: "Codex CLI (OpenAI)",
562
+ value: "codex",
563
+ },
564
+ {
565
+ name: "Aider (works with multiple models)",
566
+ value: "aider",
567
+ },
568
+ {
569
+ name: "I'll set it up myself",
570
+ value: "manual",
571
+ },
572
+ ],
573
+ },
574
+ ]);
575
+ if (choice === "manual") {
576
+ console.log(chalk.gray("\nSupported AI CLIs:"));
577
+ console.log(" • Claude Code: npm install -g @anthropic-ai/claude-code");
578
+ console.log(" • Codex CLI: npm install -g @openai/codex");
579
+ console.log(" • Aider: pip install aider-chat");
580
+ console.log(chalk.gray("\nRun 'jfl' again after installing.\n"));
581
+ return;
582
+ }
583
+ const installCommands = {
584
+ claude: {
585
+ cmd: "npm install -g @anthropic-ai/claude-code",
586
+ name: "Claude Code",
587
+ },
588
+ codex: {
589
+ cmd: "npm install -g @openai/codex",
590
+ name: "Codex CLI",
591
+ },
592
+ aider: {
593
+ cmd: "pip install aider-chat",
594
+ name: "Aider",
595
+ },
596
+ };
597
+ const install = installCommands[choice];
598
+ console.log(chalk.cyan(`\nInstalling ${install.name}...\n`));
599
+ console.log(chalk.gray(`$ ${install.cmd}\n`));
600
+ const { proceed } = await inquirer.prompt([
601
+ {
602
+ type: "confirm",
603
+ name: "proceed",
604
+ message: "Run this command?",
605
+ default: true,
606
+ },
607
+ ]);
608
+ if (!proceed) {
609
+ console.log(chalk.gray(`\nRun manually: ${install.cmd}`));
610
+ console.log(chalk.gray("Then run 'jfl' again.\n"));
611
+ return;
612
+ }
613
+ try {
614
+ execSync(install.cmd, { stdio: "inherit" });
615
+ console.log(chalk.green(`\n✓ ${install.name} installed!\n`));
616
+ // Prompt for API key setup
617
+ if (choice === "claude") {
618
+ console.log(chalk.gray("Set your Anthropic API key:"));
619
+ console.log(chalk.white(" export ANTHROPIC_API_KEY=your-key-here\n"));
620
+ console.log(chalk.gray("Or run 'claude' to authenticate interactively.\n"));
621
+ }
622
+ else if (choice === "codex") {
623
+ console.log(chalk.gray("Set your OpenAI API key:"));
624
+ console.log(chalk.white(" export OPENAI_API_KEY=your-key-here\n"));
625
+ }
626
+ else if (choice === "aider") {
627
+ console.log(chalk.gray("Set your API key (Anthropic or OpenAI):"));
628
+ console.log(chalk.white(" export ANTHROPIC_API_KEY=your-key-here"));
629
+ console.log(chalk.white(" # or"));
630
+ console.log(chalk.white(" export OPENAI_API_KEY=your-key-here\n"));
631
+ }
632
+ console.log(chalk.cyan("Run 'jfl' to start your AI session.\n"));
633
+ }
634
+ catch (error) {
635
+ console.error(chalk.red("\nInstallation failed."));
636
+ console.log(chalk.gray(`\nTry manually: ${install.cmd}\n`));
637
+ }
638
+ }
639
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}