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,548 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Context Hub MCP Server
4
+ *
5
+ * Provides context tools to Claude Code via MCP protocol.
6
+ * Communicates with the Context Hub daemon via HTTP.
7
+ *
8
+ * @purpose MCP server for Context Hub integration with Claude Code
9
+ */
10
+ import * as readline from "readline";
11
+ import * as fs from "fs";
12
+ import * as path from "path";
13
+ import { execSync } from "child_process";
14
+ const CONTEXT_HUB_URL = process.env.CONTEXT_HUB_URL || "http://localhost:4242";
15
+ const TOKEN_FILE = ".jfl/context-hub.token";
16
+ // ============================================================================
17
+ // Auth
18
+ // ============================================================================
19
+ function getAuthToken() {
20
+ // Try to find token file by walking up from cwd
21
+ let dir = process.cwd();
22
+ const root = path.parse(dir).root;
23
+ while (dir !== root) {
24
+ const tokenPath = path.join(dir, TOKEN_FILE);
25
+ if (fs.existsSync(tokenPath)) {
26
+ return fs.readFileSync(tokenPath, 'utf-8').trim();
27
+ }
28
+ dir = path.dirname(dir);
29
+ }
30
+ return null;
31
+ }
32
+ // ============================================================================
33
+ // MCP Server Implementation
34
+ // ============================================================================
35
+ const TOOLS = [
36
+ {
37
+ name: "context_get",
38
+ description: "Get unified context from journal, knowledge docs, and code. Use at the start of tasks to understand the project.",
39
+ inputSchema: {
40
+ type: "object",
41
+ properties: {
42
+ query: {
43
+ type: "string",
44
+ description: "Optional search query to filter results"
45
+ },
46
+ taskType: {
47
+ type: "string",
48
+ enum: ["code", "spec", "content", "strategy", "general"],
49
+ description: "Type of task for context prioritization"
50
+ },
51
+ maxItems: {
52
+ type: "number",
53
+ description: "Maximum number of context items to return (default: 30)"
54
+ }
55
+ }
56
+ }
57
+ },
58
+ {
59
+ name: "context_search",
60
+ description: "Search across all context sources (journal, knowledge, code) for relevant information.",
61
+ inputSchema: {
62
+ type: "object",
63
+ properties: {
64
+ query: {
65
+ type: "string",
66
+ description: "Search query"
67
+ },
68
+ maxItems: {
69
+ type: "number",
70
+ description: "Maximum results (default: 20)"
71
+ }
72
+ },
73
+ required: ["query"]
74
+ }
75
+ },
76
+ {
77
+ name: "context_status",
78
+ description: "Check Context Hub status and available sources.",
79
+ inputSchema: {
80
+ type: "object",
81
+ properties: {}
82
+ }
83
+ },
84
+ {
85
+ name: "context_sessions",
86
+ description: "See activity from other sessions/worktrees (informational only).",
87
+ inputSchema: {
88
+ type: "object",
89
+ properties: {
90
+ hours: {
91
+ type: "number",
92
+ description: "Hours of history to include (default: 24)"
93
+ }
94
+ }
95
+ }
96
+ }
97
+ ];
98
+ async function callContextHub(endpoint, body) {
99
+ try {
100
+ const url = `${CONTEXT_HUB_URL}${endpoint}`;
101
+ const token = getAuthToken();
102
+ const headers = {
103
+ "Content-Type": "application/json"
104
+ };
105
+ if (token) {
106
+ headers["Authorization"] = `Bearer ${token}`;
107
+ }
108
+ const response = await fetch(url, {
109
+ method: body ? "POST" : "GET",
110
+ headers,
111
+ body: body ? JSON.stringify(body) : undefined
112
+ });
113
+ if (response.status === 401) {
114
+ throw new Error("Unauthorized. Token file may be missing or invalid. Restart Context Hub: jfl context-hub restart");
115
+ }
116
+ if (!response.ok) {
117
+ throw new Error(`Context Hub returned ${response.status}`);
118
+ }
119
+ return await response.json();
120
+ }
121
+ catch (error) {
122
+ if (error.code === "ECONNREFUSED") {
123
+ throw new Error("Context Hub is not running. Start it with: jfl context-hub start");
124
+ }
125
+ throw error;
126
+ }
127
+ }
128
+ function formatContextItems(items) {
129
+ if (items.length === 0) {
130
+ return "No context items found.";
131
+ }
132
+ const grouped = {};
133
+ for (const item of items) {
134
+ if (!grouped[item.source]) {
135
+ grouped[item.source] = [];
136
+ }
137
+ grouped[item.source].push(item);
138
+ }
139
+ const sections = [];
140
+ for (const [source, sourceItems] of Object.entries(grouped)) {
141
+ const header = `## ${source.toUpperCase()}\n`;
142
+ const itemLines = sourceItems.map(item => {
143
+ let line = `- **${item.title}**`;
144
+ if (item.path) {
145
+ line += ` (${item.path})`;
146
+ }
147
+ line += `\n ${item.content.slice(0, 200)}${item.content.length > 200 ? "..." : ""}`;
148
+ return line;
149
+ }).join("\n");
150
+ sections.push(header + itemLines);
151
+ }
152
+ return sections.join("\n\n");
153
+ }
154
+ function findRepoRoot() {
155
+ let dir = process.cwd();
156
+ const root = path.parse(dir).root;
157
+ while (dir !== root) {
158
+ if (fs.existsSync(path.join(dir, '.git')) || fs.existsSync(path.join(dir, '.jfl'))) {
159
+ return dir;
160
+ }
161
+ dir = path.dirname(dir);
162
+ }
163
+ return null;
164
+ }
165
+ function loadPrivacyConfig(repoRoot) {
166
+ const defaultConfig = {
167
+ sessionVisibility: 'public',
168
+ showFileDetails: true,
169
+ showCommitMessages: true
170
+ };
171
+ try {
172
+ const configPath = path.join(repoRoot, '.jfl', 'config.json');
173
+ if (fs.existsSync(configPath)) {
174
+ const content = fs.readFileSync(configPath, 'utf-8');
175
+ const config = JSON.parse(content);
176
+ if (config.privacy) {
177
+ return {
178
+ sessionVisibility: config.privacy.sessionVisibility || defaultConfig.sessionVisibility,
179
+ showFileDetails: config.privacy.showFileDetails ?? defaultConfig.showFileDetails,
180
+ showCommitMessages: config.privacy.showCommitMessages ?? defaultConfig.showCommitMessages
181
+ };
182
+ }
183
+ }
184
+ }
185
+ catch {
186
+ // Config doesn't exist or is invalid, use defaults
187
+ }
188
+ return defaultConfig;
189
+ }
190
+ function formatRelativeTime(timestamp) {
191
+ const now = Date.now();
192
+ const then = new Date(timestamp).getTime();
193
+ const diffMs = now - then;
194
+ const diffMin = Math.floor(diffMs / 60000);
195
+ if (diffMin < 1)
196
+ return 'just now';
197
+ if (diffMin < 60)
198
+ return `${diffMin}m ago`;
199
+ const diffHr = Math.floor(diffMin / 60);
200
+ if (diffHr < 24)
201
+ return `${diffHr}h ago`;
202
+ const diffDay = Math.floor(diffHr / 24);
203
+ return `${diffDay}d ago`;
204
+ }
205
+ function getSessionUser(sessionName) {
206
+ // Extract user from session name: session-username-YYYYMMDD-HHMM-hash
207
+ const parts = sessionName.split('-');
208
+ if (parts.length >= 2 && parts[0] === 'session') {
209
+ return parts[1];
210
+ }
211
+ return sessionName;
212
+ }
213
+ function getSessionsActivity(hours) {
214
+ const repoRoot = findRepoRoot();
215
+ if (!repoRoot) {
216
+ return "Not in a JFL project directory.";
217
+ }
218
+ const privacy = loadPrivacyConfig(repoRoot);
219
+ // If privacy is set to private, don't show any session info
220
+ if (privacy.sessionVisibility === 'private') {
221
+ return "Session visibility is set to private.";
222
+ }
223
+ const currentBranch = execSync('git branch --show-current', { cwd: repoRoot, encoding: 'utf-8' }).trim();
224
+ const sessions = [];
225
+ try {
226
+ // Get all worktrees
227
+ const worktreeOutput = execSync('git worktree list --porcelain', { cwd: repoRoot, encoding: 'utf-8' });
228
+ const worktrees = parseWorktrees(worktreeOutput);
229
+ // Get journal directory (should be in main repo)
230
+ const journalDir = path.join(repoRoot, '.jfl', 'journal');
231
+ for (const wt of worktrees) {
232
+ if (!wt.branch.startsWith('session-'))
233
+ continue;
234
+ const session = {
235
+ name: wt.branch,
236
+ path: wt.path,
237
+ branch: wt.branch,
238
+ isActive: checkIfActive(wt.path),
239
+ recentCommits: getRecentCommits(repoRoot, wt.branch, 3),
240
+ journalSummary: '',
241
+ workingOn: ''
242
+ };
243
+ // Read journal for this session
244
+ const journalFile = path.join(journalDir, `${wt.branch}.jsonl`);
245
+ if (fs.existsSync(journalFile)) {
246
+ const entries = readJournalEntries(journalFile, hours);
247
+ if (entries.length > 0) {
248
+ session.journalSummary = entries.map(e => `- ${e.title}`).join('\n');
249
+ session.workingOn = entries[entries.length - 1].title;
250
+ }
251
+ }
252
+ sessions.push(session);
253
+ }
254
+ }
255
+ catch (error) {
256
+ return `Error reading sessions: ${error.message}`;
257
+ }
258
+ if (sessions.length === 0) {
259
+ return "No other sessions found.";
260
+ }
261
+ // Format output
262
+ const lines = [`Team Activity (last ${hours}h):\n`];
263
+ const activeSessions = sessions.filter(s => s.isActive && s.branch !== currentBranch);
264
+ const staleSessions = sessions.filter(s => !s.isActive && s.branch !== currentBranch);
265
+ if (activeSessions.length > 0) {
266
+ lines.push('## Currently Active\n');
267
+ for (const s of activeSessions) {
268
+ const user = getSessionUser(s.name);
269
+ lines.push(`🟢 **${user}** - active`);
270
+ // Show work details based on privacy settings
271
+ if (privacy.sessionVisibility !== 'limited') {
272
+ if (s.workingOn) {
273
+ lines.push(` Working on: ${s.workingOn}`);
274
+ }
275
+ if (s.recentCommits.length > 0 && privacy.showCommitMessages) {
276
+ lines.push(` Recent commits:`);
277
+ for (const c of s.recentCommits) {
278
+ lines.push(` - ${c}`);
279
+ }
280
+ }
281
+ }
282
+ lines.push('');
283
+ }
284
+ }
285
+ if (staleSessions.length > 0) {
286
+ lines.push('## Recently Active\n');
287
+ for (const s of staleSessions.slice(0, 5)) {
288
+ const user = getSessionUser(s.name);
289
+ lines.push(`🟡 **${user}** - idle`);
290
+ // Show work details based on privacy settings
291
+ if (privacy.sessionVisibility !== 'limited' && s.workingOn) {
292
+ lines.push(` Last worked on: ${s.workingOn}`);
293
+ }
294
+ lines.push('');
295
+ }
296
+ }
297
+ // Check for potential overlap
298
+ const currentJournalFile = path.join(repoRoot, '.jfl', 'journal', `${currentBranch}.jsonl`);
299
+ if (fs.existsSync(currentJournalFile)) {
300
+ const currentEntries = readJournalEntries(currentJournalFile, hours);
301
+ if (currentEntries.length > 0 && activeSessions.length > 0) {
302
+ const currentWork = currentEntries[currentEntries.length - 1].title.toLowerCase();
303
+ for (const s of activeSessions) {
304
+ if (s.workingOn && hasOverlap(currentWork, s.workingOn.toLowerCase())) {
305
+ const user = getSessionUser(s.name);
306
+ lines.push(`\n⚠️ **Potential overlap detected** with ${user}`);
307
+ lines.push(` They're working on: ${s.workingOn}`);
308
+ }
309
+ }
310
+ }
311
+ }
312
+ return lines.join('\n');
313
+ }
314
+ function parseWorktrees(output) {
315
+ const worktrees = [];
316
+ const lines = output.split('\n');
317
+ let currentPath = '';
318
+ for (const line of lines) {
319
+ if (line.startsWith('worktree ')) {
320
+ currentPath = line.substring(9);
321
+ }
322
+ else if (line.startsWith('branch refs/heads/')) {
323
+ const branch = line.substring(18);
324
+ if (currentPath) {
325
+ worktrees.push({ path: currentPath, branch });
326
+ }
327
+ }
328
+ }
329
+ return worktrees;
330
+ }
331
+ function checkIfActive(worktreePath) {
332
+ // Check for auto-commit PID
333
+ const pidFile = path.join(worktreePath, '.jfl', 'auto-commit.pid');
334
+ if (fs.existsSync(pidFile)) {
335
+ try {
336
+ const pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
337
+ if (pid > 0) {
338
+ // Check if process is running
339
+ try {
340
+ process.kill(pid, 0); // Doesn't kill, just checks if it exists
341
+ return true;
342
+ }
343
+ catch {
344
+ // Process not running
345
+ }
346
+ }
347
+ }
348
+ catch {
349
+ // Ignore read errors
350
+ }
351
+ }
352
+ return false;
353
+ }
354
+ function getRecentCommits(repoRoot, branch, count) {
355
+ try {
356
+ const output = execSync(`git log --oneline -${count} "${branch}" 2>/dev/null`, { cwd: repoRoot, encoding: 'utf-8' });
357
+ return output.trim().split('\n').filter(l => l);
358
+ }
359
+ catch {
360
+ return [];
361
+ }
362
+ }
363
+ function readJournalEntries(journalFile, hours) {
364
+ const entries = [];
365
+ const cutoff = Date.now() - (hours * 60 * 60 * 1000);
366
+ try {
367
+ const content = fs.readFileSync(journalFile, 'utf-8');
368
+ for (const line of content.split('\n')) {
369
+ if (!line.trim())
370
+ continue;
371
+ try {
372
+ const entry = JSON.parse(line);
373
+ const entryTime = new Date(entry.ts).getTime();
374
+ if (entryTime >= cutoff) {
375
+ entries.push(entry);
376
+ }
377
+ }
378
+ catch {
379
+ // Skip invalid JSON lines
380
+ }
381
+ }
382
+ }
383
+ catch {
384
+ // File doesn't exist or can't be read
385
+ }
386
+ return entries;
387
+ }
388
+ function hasOverlap(work1, work2) {
389
+ // Simple keyword overlap detection
390
+ const keywords1 = new Set(work1.split(/\s+/).filter(w => w.length > 4));
391
+ const keywords2 = new Set(work2.split(/\s+/).filter(w => w.length > 4));
392
+ let overlap = 0;
393
+ for (const kw of keywords1) {
394
+ if (keywords2.has(kw))
395
+ overlap++;
396
+ }
397
+ return overlap >= 2; // At least 2 significant words in common
398
+ }
399
+ async function handleToolCall(name, args) {
400
+ switch (name) {
401
+ case "context_get": {
402
+ const result = await callContextHub("/api/context", {
403
+ query: args.query,
404
+ taskType: args.taskType,
405
+ maxItems: args.maxItems || 30
406
+ });
407
+ return formatContextItems(result.items);
408
+ }
409
+ case "context_search": {
410
+ if (!args.query) {
411
+ throw new Error("query is required");
412
+ }
413
+ const result = await callContextHub("/api/context/search", {
414
+ query: args.query,
415
+ maxItems: args.maxItems || 20
416
+ });
417
+ return formatContextItems(result.items);
418
+ }
419
+ case "context_status": {
420
+ const result = await callContextHub("/api/context/status");
421
+ const sources = Object.entries(result.sources)
422
+ .filter(([, v]) => v)
423
+ .map(([k]) => k)
424
+ .join(", ");
425
+ return `Context Hub Status:
426
+ - Status: ${result.status}
427
+ - Port: ${result.port}
428
+ - Sources: ${sources || "none"}
429
+ - Items: ${result.itemCount}`;
430
+ }
431
+ case "context_sessions": {
432
+ return getSessionsActivity(args.hours || 24);
433
+ }
434
+ default:
435
+ throw new Error(`Unknown tool: ${name}`);
436
+ }
437
+ }
438
+ function handleRequest(request) {
439
+ const response = {
440
+ jsonrpc: "2.0",
441
+ id: request.id
442
+ };
443
+ try {
444
+ switch (request.method) {
445
+ case "initialize":
446
+ response.result = {
447
+ protocolVersion: "2024-11-05",
448
+ capabilities: {
449
+ tools: {}
450
+ },
451
+ serverInfo: {
452
+ name: "jfl-context-hub",
453
+ version: "1.0.0"
454
+ }
455
+ };
456
+ break;
457
+ case "tools/list":
458
+ response.result = { tools: TOOLS };
459
+ break;
460
+ case "tools/call":
461
+ // Handle async in caller
462
+ throw new Error("ASYNC");
463
+ case "notifications/initialized":
464
+ // Acknowledge initialization
465
+ return response;
466
+ default:
467
+ response.error = {
468
+ code: -32601,
469
+ message: `Method not found: ${request.method}`
470
+ };
471
+ }
472
+ }
473
+ catch (error) {
474
+ if (error.message === "ASYNC")
475
+ throw error;
476
+ response.error = {
477
+ code: -32000,
478
+ message: error.message
479
+ };
480
+ }
481
+ return response;
482
+ }
483
+ async function handleAsyncRequest(request) {
484
+ if (request.method === "tools/call") {
485
+ const { name, arguments: args } = request.params || {};
486
+ try {
487
+ const result = await handleToolCall(name, args || {});
488
+ return {
489
+ jsonrpc: "2.0",
490
+ id: request.id,
491
+ result: {
492
+ content: [{ type: "text", text: result }]
493
+ }
494
+ };
495
+ }
496
+ catch (error) {
497
+ return {
498
+ jsonrpc: "2.0",
499
+ id: request.id,
500
+ error: {
501
+ code: -32000,
502
+ message: error.message
503
+ }
504
+ };
505
+ }
506
+ }
507
+ return handleRequest(request);
508
+ }
509
+ // ============================================================================
510
+ // Main
511
+ // ============================================================================
512
+ async function main() {
513
+ const rl = readline.createInterface({
514
+ input: process.stdin,
515
+ output: process.stdout,
516
+ terminal: false
517
+ });
518
+ rl.on("line", async (line) => {
519
+ try {
520
+ const request = JSON.parse(line);
521
+ let response;
522
+ try {
523
+ response = handleRequest(request);
524
+ }
525
+ catch (error) {
526
+ if (error.message === "ASYNC") {
527
+ response = await handleAsyncRequest(request);
528
+ }
529
+ else {
530
+ throw error;
531
+ }
532
+ }
533
+ // Only send response if it has an id (not a notification)
534
+ if (request.id !== undefined) {
535
+ console.log(JSON.stringify(response));
536
+ }
537
+ }
538
+ catch (error) {
539
+ // Log errors to stderr so they don't corrupt the MCP stream
540
+ console.error(`MCP Error: ${error.message}`);
541
+ }
542
+ });
543
+ rl.on("close", () => {
544
+ process.exit(0);
545
+ });
546
+ }
547
+ main().catch(console.error);
548
+ //# sourceMappingURL=context-hub-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-hub-mcp.js","sourceRoot":"","sources":["../../src/mcp/context-hub-mcp.ts"],"names":[],"mappings":"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"}