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,486 @@
1
+ /**
2
+ * JFL GTM Clawdbot Skill
3
+ *
4
+ * Provides full JFL CLI access from Telegram/Slack with proper session isolation.
5
+ * Uses `jfl session create` and `jfl session exec` for worktree isolation, auto-commit, and journaling.
6
+ * Session state persisted to ~/.clawd/memory/jfl-sessions.json
7
+ */
8
+
9
+ import { exec } from "child_process"
10
+ import { promisify } from "util"
11
+ import { existsSync, readFileSync } from "fs"
12
+ import { join } from "path"
13
+ import { homedir } from "os"
14
+
15
+ const execAsync = promisify(exec)
16
+
17
+ interface Context {
18
+ threadId: string
19
+ platform: "telegram" | "slack" | "discord"
20
+ userId: string
21
+ }
22
+
23
+ interface GTM {
24
+ name: string
25
+ path: string
26
+ }
27
+
28
+ /**
29
+ * Boot sequence - runs when skill first activates
30
+ */
31
+ export async function onBoot(ctx: Context) {
32
+ // Check if JFL CLI is installed
33
+ const hasJFL = await checkJFLInstalled()
34
+
35
+ if (!hasJFL) {
36
+ return {
37
+ text: "⚠️ JFL CLI not found\n\n" +
38
+ "Install: npm install -g jfl\n\n" +
39
+ "Then run /jfl again",
40
+ buttons: []
41
+ }
42
+ }
43
+
44
+ // Find available GTMs
45
+ const gtms = await findGTMs()
46
+
47
+ if (gtms.length === 0) {
48
+ return {
49
+ text: "🚀 JFL - Just Fucking Launch\n\n" +
50
+ "No GTMs found.\n\n" +
51
+ "Create one: jfl init\n" +
52
+ "Then run /jfl again"
53
+ }
54
+ }
55
+
56
+ // Show GTM picker (like screenshot)
57
+ const buttons = gtms.map(g => ({
58
+ text: `📂 ${g.name}`,
59
+ callbackData: `select:${g.path}`
60
+ }))
61
+
62
+ return {
63
+ text: "🚀 JFL - Just Fucking Launch\n\n" +
64
+ "Your team's context layer. Any AI. Any task.\n\n" +
65
+ "Open a project:",
66
+ buttons
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Handle button clicks
72
+ */
73
+ export async function onCallback(data: string, ctx: Context) {
74
+ const [action, value] = data.split(":")
75
+
76
+ if (action === "select") {
77
+ return await handleSelectGTM(value, ctx)
78
+ }
79
+
80
+ if (action === "cmd") {
81
+ return await handleCommand(value, ctx)
82
+ }
83
+
84
+ return { text: "Unknown action" }
85
+ }
86
+
87
+ /**
88
+ * Handle slash commands
89
+ */
90
+ export async function onCommand(cmd: string, args: string[], ctx: Context) {
91
+ const session = getSession(ctx.threadId)
92
+
93
+ if (!session && cmd !== "gtm") {
94
+ return {
95
+ text: "⚠️ No GTM selected.\n\nRun /jfl to select a project."
96
+ }
97
+ }
98
+
99
+ switch (cmd) {
100
+ case "gtm":
101
+ return await onBoot(ctx)
102
+
103
+ case "hud":
104
+ return await runJFLCommand(session!, "hud")
105
+
106
+ case "crm":
107
+ if (args.length === 0) {
108
+ return showCRMMenu()
109
+ }
110
+ return await runCRMCommand(session!, args)
111
+
112
+ case "brand":
113
+ return showBrandMenu()
114
+
115
+ case "content":
116
+ if (args.length === 0) {
117
+ return showContentMenu()
118
+ }
119
+ return await runJFLCommand(session!, `content ${args.join(" ")}`)
120
+
121
+ default:
122
+ return { text: `Unknown command: /${cmd}` }
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Check if JFL CLI is installed
128
+ */
129
+ async function checkJFLInstalled(): Promise<boolean> {
130
+ try {
131
+ await execAsync("jfl --version")
132
+ return true
133
+ } catch {
134
+ return false
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Find GTMs on this machine
140
+ *
141
+ * A GTM has: .jfl/ + knowledge/ + CLAUDE.md
142
+ * Product repos (jfl-cli, jfl-platform) have .jfl/ but aren't GTMs
143
+ */
144
+ async function findGTMs(): Promise<GTM[]> {
145
+ const gtms: GTM[] = []
146
+
147
+ // Check common locations
148
+ const searchPaths = [
149
+ join(homedir(), "CascadeProjects"),
150
+ join(homedir(), "Projects"),
151
+ join(homedir(), "code"),
152
+ ]
153
+
154
+ for (const basePath of searchPaths) {
155
+ if (!existsSync(basePath)) continue
156
+
157
+ try {
158
+ const { stdout } = await execAsync(`find ${basePath} -maxdepth 2 -name .jfl -type d`)
159
+ const dirs = stdout.trim().split("\n").filter(Boolean)
160
+
161
+ for (const dir of dirs) {
162
+ const gtmPath = dir.replace("/.jfl", "")
163
+
164
+ // Filter: Must have knowledge/ and CLAUDE.md to be a GTM
165
+ const hasKnowledge = existsSync(join(gtmPath, "knowledge"))
166
+ const hasClaude = existsSync(join(gtmPath, "CLAUDE.md"))
167
+
168
+ if (!hasKnowledge || !hasClaude) {
169
+ continue // Skip product repos
170
+ }
171
+
172
+ const name = gtmPath.split("/").pop() || "unknown"
173
+ gtms.push({ name, path: gtmPath })
174
+ }
175
+ } catch {
176
+ // Skip if find fails
177
+ }
178
+ }
179
+
180
+ return gtms
181
+ }
182
+
183
+ /**
184
+ * Session storage (persisted to disk)
185
+ */
186
+ const SESSIONS_FILE = join(homedir(), ".clawd", "memory", "jfl-sessions.json")
187
+
188
+ interface SessionData {
189
+ gtmPath: string
190
+ gtmName: string
191
+ sessionId: string
192
+ platform: string
193
+ }
194
+
195
+ function loadSessions(): Map<string, SessionData> {
196
+ try {
197
+ if (existsSync(SESSIONS_FILE)) {
198
+ const data = JSON.parse(readFileSync(SESSIONS_FILE, "utf-8"))
199
+ return new Map(Object.entries(data))
200
+ }
201
+ } catch {
202
+ // Ignore parse errors
203
+ }
204
+ return new Map()
205
+ }
206
+
207
+ function saveSessions(sessions: Map<string, SessionData>) {
208
+ try {
209
+ const data = Object.fromEntries(sessions)
210
+ const fs = require("fs")
211
+ fs.mkdirSync(join(homedir(), ".clawd", "memory"), { recursive: true })
212
+ fs.writeFileSync(SESSIONS_FILE, JSON.stringify(data, null, 2))
213
+ } catch (error) {
214
+ console.error("Failed to save sessions:", error)
215
+ }
216
+ }
217
+
218
+ const sessions = loadSessions()
219
+
220
+ function getSession(threadId: string) {
221
+ return sessions.get(threadId)
222
+ }
223
+
224
+ function setSession(threadId: string, data: SessionData) {
225
+ sessions.set(threadId, data)
226
+ saveSessions(sessions)
227
+ }
228
+
229
+ /**
230
+ * Handle GTM selection
231
+ */
232
+ async function handleSelectGTM(gtmPath: string, ctx: Context) {
233
+ const gtmName = gtmPath.split("/").pop() || "unknown"
234
+
235
+ try {
236
+ // Create or get session with proper worktree isolation
237
+ const { stdout } = await execAsync(
238
+ `cd ${gtmPath} && jfl session create --platform ${ctx.platform} --thread ${ctx.threadId}`
239
+ )
240
+ const sessionId = stdout.trim()
241
+
242
+ // Store session with ID
243
+ setSession(ctx.threadId, {
244
+ gtmPath,
245
+ gtmName,
246
+ sessionId,
247
+ platform: ctx.platform
248
+ })
249
+
250
+ // Show command menu
251
+ const commands = [
252
+ [
253
+ { text: "📊 Dashboard", callbackData: "cmd:hud" },
254
+ { text: "👥 CRM", callbackData: "cmd:crm" }
255
+ ],
256
+ [
257
+ { text: "🎨 Brand", callbackData: "cmd:brand" },
258
+ { text: "✍️ Content", callbackData: "cmd:content" }
259
+ ],
260
+ [
261
+ { text: "🔄 Sync", callbackData: "cmd:sync" },
262
+ { text: "📝 Status", callbackData: "cmd:status" }
263
+ ]
264
+ ]
265
+
266
+ return {
267
+ text: `✓ Session created: ${gtmName}\n\n` +
268
+ `Session ID: ${sessionId}\n` +
269
+ `Isolated worktree with auto-commit enabled.\n\n` +
270
+ `What do you want to do?`,
271
+ buttons: commands
272
+ }
273
+ } catch (error: any) {
274
+ return {
275
+ text: `❌ Failed to create session\n\n${error.message}\n\n` +
276
+ `Make sure you're in a JFL GTM directory.`
277
+ }
278
+ }
279
+ }
280
+
281
+ /**
282
+ * Handle command button
283
+ */
284
+ async function handleCommand(cmd: string, ctx: Context) {
285
+ const session = getSession(ctx.threadId)
286
+
287
+ if (!session) {
288
+ return { text: "⚠️ Session expired. Run /jfl to select a GTM." }
289
+ }
290
+
291
+ switch (cmd) {
292
+ case "hud":
293
+ return await runJFLCommand(session, "hud")
294
+
295
+ case "crm":
296
+ return showCRMMenu()
297
+
298
+ case "brand":
299
+ return showBrandMenu()
300
+
301
+ case "content":
302
+ return showContentMenu()
303
+
304
+ case "sync":
305
+ return await runGitSync(session)
306
+
307
+ case "status":
308
+ return await runGitStatus(session)
309
+
310
+ default:
311
+ return { text: "Unknown command" }
312
+ }
313
+ }
314
+
315
+ /**
316
+ * Run JFL command (uses session exec for isolation)
317
+ */
318
+ async function runJFLCommand(session: SessionData, command: string) {
319
+ try {
320
+ // Use jfl session exec to run command in isolated worktree
321
+ const { stdout, stderr } = await execAsync(
322
+ `cd ${session.gtmPath} && jfl session exec "${session.sessionId}" "${command}"`,
323
+ {
324
+ env: { ...process.env, JFL_PLATFORM: session.platform }
325
+ }
326
+ )
327
+
328
+ const output = stdout || stderr
329
+ const formatted = formatForTelegram(output)
330
+
331
+ return {
332
+ text: formatted,
333
+ parseMode: "Markdown"
334
+ }
335
+ } catch (error: any) {
336
+ return {
337
+ text: `❌ Error running jfl ${command}\n\n${error.message}`
338
+ }
339
+ }
340
+ }
341
+
342
+ /**
343
+ * Run CRM command (uses session exec for isolation)
344
+ */
345
+ async function runCRMCommand(session: SessionData, args: string[]) {
346
+ try {
347
+ // Use session exec to run CRM in isolated worktree
348
+ const { stdout } = await execAsync(
349
+ `cd ${session.gtmPath} && jfl session exec "${session.sessionId}" "./crm ${args.join(" ")}"`
350
+ )
351
+ const formatted = formatForTelegram(stdout)
352
+
353
+ return {
354
+ text: formatted,
355
+ parseMode: "Markdown"
356
+ }
357
+ } catch (error: any) {
358
+ return {
359
+ text: `❌ Error running crm\n\n${error.message}`
360
+ }
361
+ }
362
+ }
363
+
364
+ /**
365
+ * Show CRM menu
366
+ */
367
+ function showCRMMenu() {
368
+ return {
369
+ text: "👥 CRM\n\nWhat do you want to do?",
370
+ buttons: [
371
+ [
372
+ { text: "📋 List Pipeline", callbackData: "crm:list" },
373
+ { text: "⏰ Stale Deals", callbackData: "crm:stale" }
374
+ ],
375
+ [
376
+ { text: "📞 Prep Call", callbackData: "crm:prep" },
377
+ { text: "✏️ Log Touch", callbackData: "crm:touch" }
378
+ ]
379
+ ]
380
+ }
381
+ }
382
+
383
+ /**
384
+ * Show brand menu
385
+ */
386
+ function showBrandMenu() {
387
+ return {
388
+ text: "🎨 Brand Architect\n\nWhat do you want to create?",
389
+ buttons: [
390
+ [
391
+ { text: "Logo Marks", callbackData: "brand:marks" },
392
+ { text: "Color Palette", callbackData: "brand:colors" }
393
+ ],
394
+ [
395
+ { text: "Typography", callbackData: "brand:typography" },
396
+ { text: "Full System", callbackData: "brand:full" }
397
+ ]
398
+ ]
399
+ }
400
+ }
401
+
402
+ /**
403
+ * Show content menu
404
+ */
405
+ function showContentMenu() {
406
+ return {
407
+ text: "✍️ Content Creator\n\nWhat do you want to create?",
408
+ buttons: [
409
+ [
410
+ { text: "Twitter Thread", callbackData: "content:thread" },
411
+ { text: "Single Post", callbackData: "content:post" }
412
+ ],
413
+ [
414
+ { text: "Article", callbackData: "content:article" },
415
+ { text: "One-Pager", callbackData: "content:onepager" }
416
+ ]
417
+ ]
418
+ }
419
+ }
420
+
421
+ /**
422
+ * Git sync (runs in session worktree)
423
+ */
424
+ async function runGitSync(session: SessionData) {
425
+ try {
426
+ // Session exec automatically runs session-sync.sh before command
427
+ const { stdout } = await execAsync(
428
+ `cd ${session.gtmPath} && jfl session exec "${session.sessionId}" "git status --short"`
429
+ )
430
+
431
+ return {
432
+ text: `✓ Synced ${session.gtmName}\n\nSession-sync runs automatically before each command.\n\n${stdout || "Working tree clean"}`
433
+ }
434
+ } catch (error: any) {
435
+ return {
436
+ text: `❌ Sync failed\n\n${error.message}`
437
+ }
438
+ }
439
+ }
440
+
441
+ /**
442
+ * Git status (runs in session worktree)
443
+ */
444
+ async function runGitStatus(session: SessionData) {
445
+ try {
446
+ // Use session exec to check status in isolated worktree
447
+ const { stdout } = await execAsync(
448
+ `cd ${session.gtmPath} && jfl session exec "${session.sessionId}" "git status --short && echo '---' && git log --oneline -5"`
449
+ )
450
+
451
+ return {
452
+ text: `📊 Status: ${session.gtmName}\nSession: ${session.sessionId}\n\n\`\`\`\n${stdout}\n\`\`\``,
453
+ parseMode: "Markdown"
454
+ }
455
+ } catch (error: any) {
456
+ return {
457
+ text: `❌ Status failed\n\n${error.message}`
458
+ }
459
+ }
460
+ }
461
+
462
+ /**
463
+ * Format CLI output for Telegram
464
+ * Optimized for mobile viewing
465
+ */
466
+ function formatForTelegram(output: string): string {
467
+ return output
468
+ // Strip ANSI color codes
469
+ .replace(/\x1b\[[0-9;]*m/g, "")
470
+ // Convert long separator lines to short ones (mobile-friendly)
471
+ .replace(/[━─]{20,}/g, "━━━━━━━━━")
472
+ // Keep single box-drawing characters as-is (they render fine)
473
+ .replace(/[┌┐└┘├┤┬┴┼]/g, "")
474
+ // Convert vertical bars
475
+ .replace(/[│┃]/g, "")
476
+ // Add spacing around emoji headers for readability
477
+ .replace(/^(📊|👥|🎨|✍️|🔄|📝)/gm, "\n$1")
478
+ // Preserve emoji and structure
479
+ .trim()
480
+ }
481
+
482
+ export default {
483
+ onBoot,
484
+ onCallback,
485
+ onCommand
486
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "jfl-gtm-clawdbot-skill",
3
+ "version": "0.1.0",
4
+ "description": "Clawdbot skill for JFL GTM - access your GTMs from Telegram/Slack",
5
+ "main": "index.ts",
6
+ "type": "module",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "test": "node test.js",
10
+ "link": "ln -sf $(pwd) ~/.clawdbot/skills/jfl-gtm"
11
+ },
12
+ "keywords": [
13
+ "jfl",
14
+ "gtm",
15
+ "clawdbot",
16
+ "telegram",
17
+ "slack"
18
+ ],
19
+ "author": "402goose",
20
+ "license": "MIT",
21
+ "peerDependencies": {
22
+ "@clawdbot/sdk": "^1.0.0"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^20.0.0",
26
+ "typescript": "^5.0.0"
27
+ }
28
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "jfl-gtm",
3
+ "version": "0.1.0-local",
4
+ "displayName": "JFL - Just Fucking Launch",
5
+ "description": "Your team's context layer. Any AI. Any task.",
6
+ "emoji": "🚀",
7
+ "author": "402goose",
8
+ "repository": "local-dev",
9
+ "category": "productivity",
10
+ "bootSequence": true,
11
+ "requirements": {
12
+ "cli": {
13
+ "name": "jfl",
14
+ "check": "jfl --version",
15
+ "minVersion": "0.1.0",
16
+ "install": {
17
+ "npm": "jfl"
18
+ }
19
+ }
20
+ },
21
+ "commands": {
22
+ "/gtm": "GTM operations (list, select, status)",
23
+ "/hud": "Show GTM dashboard",
24
+ "/crm": "CRM operations (list, touch, prep)",
25
+ "/brand": "Brand architect workflow",
26
+ "/content": "Create content (thread, post, article)"
27
+ }
28
+ }
@@ -0,0 +1,5 @@
1
+ export declare function agentsCommand(action?: string, options?: {
2
+ name?: string;
3
+ task?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAmBA,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBAyD9F"}