jfl 0.4.3 → 0.5.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 (428) hide show
  1. package/README.md +15 -5
  2. package/dist/commands/context-hub.d.ts.map +1 -1
  3. package/dist/commands/context-hub.js +818 -39
  4. package/dist/commands/context-hub.js.map +1 -1
  5. package/dist/commands/eval.d.ts +1 -1
  6. package/dist/commands/eval.d.ts.map +1 -1
  7. package/dist/commands/eval.js +192 -1
  8. package/dist/commands/eval.js.map +1 -1
  9. package/dist/commands/findings.d.ts +6 -0
  10. package/dist/commands/findings.d.ts.map +1 -0
  11. package/dist/commands/findings.js +203 -0
  12. package/dist/commands/findings.js.map +1 -0
  13. package/dist/commands/hud.d.ts.map +1 -1
  14. package/dist/commands/hud.js +47 -9
  15. package/dist/commands/hud.js.map +1 -1
  16. package/dist/commands/ide.d.ts +27 -0
  17. package/dist/commands/ide.d.ts.map +1 -0
  18. package/dist/commands/ide.js +546 -0
  19. package/dist/commands/ide.js.map +1 -0
  20. package/dist/commands/onboard.d.ts.map +1 -1
  21. package/dist/commands/onboard.js +212 -2
  22. package/dist/commands/onboard.js.map +1 -1
  23. package/dist/commands/openclaw.d.ts +3 -0
  24. package/dist/commands/openclaw.d.ts.map +1 -1
  25. package/dist/commands/openclaw.js +76 -2
  26. package/dist/commands/openclaw.js.map +1 -1
  27. package/dist/commands/peter.d.ts +3 -0
  28. package/dist/commands/peter.d.ts.map +1 -1
  29. package/dist/commands/peter.js +1218 -2
  30. package/dist/commands/peter.js.map +1 -1
  31. package/dist/commands/pi-fleet.d.ts +18 -0
  32. package/dist/commands/pi-fleet.d.ts.map +1 -0
  33. package/dist/commands/pi-fleet.js +382 -0
  34. package/dist/commands/pi-fleet.js.map +1 -0
  35. package/dist/commands/pi.d.ts.map +1 -1
  36. package/dist/commands/pi.js +18 -3
  37. package/dist/commands/pi.js.map +1 -1
  38. package/dist/commands/scope.d.ts.map +1 -1
  39. package/dist/commands/scope.js +90 -1
  40. package/dist/commands/scope.js.map +1 -1
  41. package/dist/commands/services.d.ts.map +1 -1
  42. package/dist/commands/services.js +18 -0
  43. package/dist/commands/services.js.map +1 -1
  44. package/dist/commands/status.d.ts.map +1 -1
  45. package/dist/commands/status.js +22 -4
  46. package/dist/commands/status.js.map +1 -1
  47. package/dist/commands/viz.d.ts.map +1 -1
  48. package/dist/commands/viz.js +417 -0
  49. package/dist/commands/viz.js.map +1 -1
  50. package/dist/dashboard-static/assets/index-B6b867Pv.js +121 -0
  51. package/dist/dashboard-static/assets/index-Y4BrqxV-.css +1 -0
  52. package/dist/dashboard-static/index.html +2 -2
  53. package/dist/index.js +228 -62
  54. package/dist/index.js.map +1 -1
  55. package/dist/lib/agent-config.d.ts +52 -0
  56. package/dist/lib/agent-config.d.ts.map +1 -0
  57. package/dist/lib/agent-config.js +231 -0
  58. package/dist/lib/agent-config.js.map +1 -0
  59. package/dist/lib/agent-generator.d.ts +10 -0
  60. package/dist/lib/agent-generator.d.ts.map +1 -1
  61. package/dist/lib/agent-generator.js +64 -10
  62. package/dist/lib/agent-generator.js.map +1 -1
  63. package/dist/lib/agent-session.d.ts +104 -0
  64. package/dist/lib/agent-session.d.ts.map +1 -0
  65. package/dist/lib/agent-session.js +627 -0
  66. package/dist/lib/agent-session.js.map +1 -0
  67. package/dist/lib/eval-snapshot.d.ts +47 -0
  68. package/dist/lib/eval-snapshot.d.ts.map +1 -0
  69. package/dist/lib/eval-snapshot.js +315 -0
  70. package/dist/lib/eval-snapshot.js.map +1 -0
  71. package/dist/lib/eval-store.d.ts +5 -0
  72. package/dist/lib/eval-store.d.ts.map +1 -1
  73. package/dist/lib/eval-store.js +33 -3
  74. package/dist/lib/eval-store.js.map +1 -1
  75. package/dist/lib/findings-engine.d.ts +51 -0
  76. package/dist/lib/findings-engine.d.ts.map +1 -0
  77. package/dist/lib/findings-engine.js +338 -0
  78. package/dist/lib/findings-engine.js.map +1 -0
  79. package/dist/lib/flow-engine.d.ts +8 -0
  80. package/dist/lib/flow-engine.d.ts.map +1 -1
  81. package/dist/lib/flow-engine.js +84 -2
  82. package/dist/lib/flow-engine.js.map +1 -1
  83. package/dist/lib/hub-client.d.ts +1 -0
  84. package/dist/lib/hub-client.d.ts.map +1 -1
  85. package/dist/lib/hub-client.js +33 -6
  86. package/dist/lib/hub-client.js.map +1 -1
  87. package/dist/lib/ide-panes.d.ts +58 -0
  88. package/dist/lib/ide-panes.d.ts.map +1 -0
  89. package/dist/lib/ide-panes.js +508 -0
  90. package/dist/lib/ide-panes.js.map +1 -0
  91. package/dist/lib/memory-db.js +4 -4
  92. package/dist/lib/memory-db.js.map +1 -1
  93. package/dist/lib/memory-indexer.d.ts.map +1 -1
  94. package/dist/lib/memory-indexer.js +3 -0
  95. package/dist/lib/memory-indexer.js.map +1 -1
  96. package/dist/lib/memory-search.d.ts +148 -4
  97. package/dist/lib/memory-search.d.ts.map +1 -1
  98. package/dist/lib/memory-search.js +496 -58
  99. package/dist/lib/memory-search.js.map +1 -1
  100. package/dist/lib/meta-orchestrator.d.ts +104 -0
  101. package/dist/lib/meta-orchestrator.d.ts.map +1 -0
  102. package/dist/lib/meta-orchestrator.js +373 -0
  103. package/dist/lib/meta-orchestrator.js.map +1 -0
  104. package/dist/lib/peer-agent-generator.d.ts.map +1 -1
  105. package/dist/lib/peer-agent-generator.js +43 -19
  106. package/dist/lib/peer-agent-generator.js.map +1 -1
  107. package/dist/lib/policy-head.d.ts +25 -0
  108. package/dist/lib/policy-head.d.ts.map +1 -0
  109. package/dist/lib/policy-head.js +136 -0
  110. package/dist/lib/policy-head.js.map +1 -0
  111. package/dist/lib/replay-buffer.d.ts +93 -0
  112. package/dist/lib/replay-buffer.d.ts.map +1 -0
  113. package/dist/lib/replay-buffer.js +302 -0
  114. package/dist/lib/replay-buffer.js.map +1 -0
  115. package/dist/lib/sentinel-rl.d.ts +97 -0
  116. package/dist/lib/sentinel-rl.d.ts.map +1 -0
  117. package/dist/lib/sentinel-rl.js +430 -0
  118. package/dist/lib/sentinel-rl.js.map +1 -0
  119. package/dist/lib/session-lock.d.ts +61 -0
  120. package/dist/lib/session-lock.d.ts.map +1 -0
  121. package/dist/lib/session-lock.js +438 -0
  122. package/dist/lib/session-lock.js.map +1 -0
  123. package/dist/lib/stratus-client.d.ts +1 -0
  124. package/dist/lib/stratus-client.d.ts.map +1 -1
  125. package/dist/lib/stratus-client.js +24 -2
  126. package/dist/lib/stratus-client.js.map +1 -1
  127. package/dist/lib/telemetry-agent-v2.d.ts +128 -0
  128. package/dist/lib/telemetry-agent-v2.d.ts.map +1 -0
  129. package/dist/lib/telemetry-agent-v2.js +1042 -0
  130. package/dist/lib/telemetry-agent-v2.js.map +1 -0
  131. package/dist/lib/telemetry-agent.d.ts.map +1 -1
  132. package/dist/lib/telemetry-agent.js +27 -6
  133. package/dist/lib/telemetry-agent.js.map +1 -1
  134. package/dist/lib/telemetry-digest.d.ts.map +1 -1
  135. package/dist/lib/telemetry-digest.js +27 -5
  136. package/dist/lib/telemetry-digest.js.map +1 -1
  137. package/dist/lib/telemetry.d.ts.map +1 -1
  138. package/dist/lib/telemetry.js +29 -4
  139. package/dist/lib/telemetry.js.map +1 -1
  140. package/dist/lib/text-preprocessing.d.ts +83 -0
  141. package/dist/lib/text-preprocessing.d.ts.map +1 -0
  142. package/dist/lib/text-preprocessing.js +261 -0
  143. package/dist/lib/text-preprocessing.js.map +1 -0
  144. package/dist/lib/training-buffer.d.ts +86 -0
  145. package/dist/lib/training-buffer.d.ts.map +1 -0
  146. package/dist/lib/training-buffer.js +139 -0
  147. package/dist/lib/training-buffer.js.map +1 -0
  148. package/dist/lib/tuple-miner.d.ts +30 -0
  149. package/dist/lib/tuple-miner.d.ts.map +1 -0
  150. package/dist/lib/tuple-miner.js +427 -0
  151. package/dist/lib/tuple-miner.js.map +1 -0
  152. package/dist/lib/vm-backend.d.ts +72 -0
  153. package/dist/lib/vm-backend.d.ts.map +1 -0
  154. package/dist/lib/vm-backend.js +175 -0
  155. package/dist/lib/vm-backend.js.map +1 -0
  156. package/dist/lib/workspace/backend.d.ts +53 -0
  157. package/dist/lib/workspace/backend.d.ts.map +1 -0
  158. package/dist/lib/workspace/backend.js +37 -0
  159. package/dist/lib/workspace/backend.js.map +1 -0
  160. package/dist/lib/workspace/cmux-adapter.d.ts +46 -0
  161. package/dist/lib/workspace/cmux-adapter.d.ts.map +1 -0
  162. package/dist/lib/workspace/cmux-adapter.js +261 -0
  163. package/dist/lib/workspace/cmux-adapter.js.map +1 -0
  164. package/dist/lib/workspace/data-pipeline.d.ts +35 -0
  165. package/dist/lib/workspace/data-pipeline.d.ts.map +1 -0
  166. package/dist/lib/workspace/data-pipeline.js +463 -0
  167. package/dist/lib/workspace/data-pipeline.js.map +1 -0
  168. package/dist/lib/workspace/engine.d.ts +64 -0
  169. package/dist/lib/workspace/engine.d.ts.map +1 -0
  170. package/dist/lib/workspace/engine.js +397 -0
  171. package/dist/lib/workspace/engine.js.map +1 -0
  172. package/dist/lib/workspace/notifications.d.ts +14 -0
  173. package/dist/lib/workspace/notifications.d.ts.map +1 -0
  174. package/dist/lib/workspace/notifications.js +41 -0
  175. package/dist/lib/workspace/notifications.js.map +1 -0
  176. package/dist/lib/workspace/surface-registry.d.ts +49 -0
  177. package/dist/lib/workspace/surface-registry.d.ts.map +1 -0
  178. package/dist/lib/workspace/surface-registry.js +217 -0
  179. package/dist/lib/workspace/surface-registry.js.map +1 -0
  180. package/dist/lib/workspace/surface-type.d.ts +153 -0
  181. package/dist/lib/workspace/surface-type.d.ts.map +1 -0
  182. package/dist/lib/workspace/surface-type.js +9 -0
  183. package/dist/lib/workspace/surface-type.js.map +1 -0
  184. package/dist/lib/workspace/surfaces/agent-overview.d.ts +16 -0
  185. package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -0
  186. package/dist/lib/workspace/surfaces/agent-overview.js +116 -0
  187. package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -0
  188. package/dist/lib/workspace/surfaces/agent.d.ts +16 -0
  189. package/dist/lib/workspace/surfaces/agent.d.ts.map +1 -0
  190. package/dist/lib/workspace/surfaces/agent.js +112 -0
  191. package/dist/lib/workspace/surfaces/agent.js.map +1 -0
  192. package/dist/lib/workspace/surfaces/claude.d.ts +15 -0
  193. package/dist/lib/workspace/surfaces/claude.d.ts.map +1 -0
  194. package/dist/lib/workspace/surfaces/claude.js +23 -0
  195. package/dist/lib/workspace/surfaces/claude.js.map +1 -0
  196. package/dist/lib/workspace/surfaces/dashboard.d.ts +21 -0
  197. package/dist/lib/workspace/surfaces/dashboard.d.ts.map +1 -0
  198. package/dist/lib/workspace/surfaces/dashboard.js +32 -0
  199. package/dist/lib/workspace/surfaces/dashboard.js.map +1 -0
  200. package/dist/lib/workspace/surfaces/eval.d.ts +15 -0
  201. package/dist/lib/workspace/surfaces/eval.d.ts.map +1 -0
  202. package/dist/lib/workspace/surfaces/eval.js +42 -0
  203. package/dist/lib/workspace/surfaces/eval.js.map +1 -0
  204. package/dist/lib/workspace/surfaces/event-stream.d.ts +16 -0
  205. package/dist/lib/workspace/surfaces/event-stream.d.ts.map +1 -0
  206. package/dist/lib/workspace/surfaces/event-stream.js +40 -0
  207. package/dist/lib/workspace/surfaces/event-stream.js.map +1 -0
  208. package/dist/lib/workspace/surfaces/flow.d.ts +16 -0
  209. package/dist/lib/workspace/surfaces/flow.d.ts.map +1 -0
  210. package/dist/lib/workspace/surfaces/flow.js +49 -0
  211. package/dist/lib/workspace/surfaces/flow.js.map +1 -0
  212. package/dist/lib/workspace/surfaces/index.d.ts +16 -0
  213. package/dist/lib/workspace/surfaces/index.d.ts.map +1 -0
  214. package/dist/lib/workspace/surfaces/index.js +16 -0
  215. package/dist/lib/workspace/surfaces/index.js.map +1 -0
  216. package/dist/lib/workspace/surfaces/portfolio.d.ts +16 -0
  217. package/dist/lib/workspace/surfaces/portfolio.d.ts.map +1 -0
  218. package/dist/lib/workspace/surfaces/portfolio.js +102 -0
  219. package/dist/lib/workspace/surfaces/portfolio.js.map +1 -0
  220. package/dist/lib/workspace/surfaces/service.d.ts +16 -0
  221. package/dist/lib/workspace/surfaces/service.d.ts.map +1 -0
  222. package/dist/lib/workspace/surfaces/service.js +45 -0
  223. package/dist/lib/workspace/surfaces/service.js.map +1 -0
  224. package/dist/lib/workspace/surfaces/shell.d.ts +15 -0
  225. package/dist/lib/workspace/surfaces/shell.d.ts.map +1 -0
  226. package/dist/lib/workspace/surfaces/shell.js +19 -0
  227. package/dist/lib/workspace/surfaces/shell.js.map +1 -0
  228. package/dist/lib/workspace/surfaces/telemetry.d.ts +16 -0
  229. package/dist/lib/workspace/surfaces/telemetry.d.ts.map +1 -0
  230. package/dist/lib/workspace/surfaces/telemetry.js +48 -0
  231. package/dist/lib/workspace/surfaces/telemetry.js.map +1 -0
  232. package/dist/lib/workspace/surfaces/topology.d.ts +15 -0
  233. package/dist/lib/workspace/surfaces/topology.d.ts.map +1 -0
  234. package/dist/lib/workspace/surfaces/topology.js +19 -0
  235. package/dist/lib/workspace/surfaces/topology.js.map +1 -0
  236. package/dist/lib/workspace/surfaces/training.d.ts +16 -0
  237. package/dist/lib/workspace/surfaces/training.d.ts.map +1 -0
  238. package/dist/lib/workspace/surfaces/training.js +22 -0
  239. package/dist/lib/workspace/surfaces/training.js.map +1 -0
  240. package/dist/lib/workspace/tmux-adapter.d.ts +27 -0
  241. package/dist/lib/workspace/tmux-adapter.d.ts.map +1 -0
  242. package/dist/lib/workspace/tmux-adapter.js +106 -0
  243. package/dist/lib/workspace/tmux-adapter.js.map +1 -0
  244. package/dist/mcp/context-hub-mcp.js +7 -24
  245. package/dist/mcp/context-hub-mcp.js.map +1 -1
  246. package/dist/types/flows.d.ts +2 -0
  247. package/dist/types/flows.d.ts.map +1 -1
  248. package/dist/types/ide.d.ts +49 -0
  249. package/dist/types/ide.d.ts.map +1 -0
  250. package/dist/types/ide.js +5 -0
  251. package/dist/types/ide.js.map +1 -0
  252. package/dist/types/platform-digest.d.ts +228 -0
  253. package/dist/types/platform-digest.d.ts.map +1 -0
  254. package/dist/types/platform-digest.js +5 -0
  255. package/dist/types/platform-digest.js.map +1 -0
  256. package/dist/types/telemetry-digest.d.ts +2 -0
  257. package/dist/types/telemetry-digest.d.ts.map +1 -1
  258. package/dist/utils/ensure-project.d.ts +1 -0
  259. package/dist/utils/ensure-project.d.ts.map +1 -1
  260. package/dist/utils/ensure-project.js +19 -7
  261. package/dist/utils/ensure-project.js.map +1 -1
  262. package/dist/utils/jfl-config.d.ts +1 -0
  263. package/dist/utils/jfl-config.d.ts.map +1 -1
  264. package/dist/utils/jfl-config.js +19 -1
  265. package/dist/utils/jfl-config.js.map +1 -1
  266. package/dist/utils/jfl-paths.d.ts +5 -0
  267. package/dist/utils/jfl-paths.d.ts.map +1 -1
  268. package/dist/utils/jfl-paths.js +25 -3
  269. package/dist/utils/jfl-paths.js.map +1 -1
  270. package/package.json +3 -2
  271. package/packages/pi/AGENTS.md +112 -0
  272. package/packages/pi/extensions/agent-grid.ts +191 -0
  273. package/packages/pi/extensions/agent-names.ts +178 -0
  274. package/packages/pi/extensions/autoresearch.ts +427 -0
  275. package/packages/pi/extensions/bookmarks.ts +85 -0
  276. package/packages/pi/extensions/context.ts +151 -0
  277. package/packages/pi/extensions/crm-tool.ts +61 -0
  278. package/packages/pi/extensions/eval-tool.ts +224 -0
  279. package/packages/pi/extensions/eval.ts +60 -0
  280. package/packages/pi/extensions/footer.ts +239 -0
  281. package/packages/pi/extensions/hud-tool.ts +145 -0
  282. package/packages/pi/extensions/index.ts +392 -0
  283. package/packages/pi/extensions/journal.ts +224 -0
  284. package/packages/pi/extensions/map-bridge.ts +178 -0
  285. package/packages/pi/extensions/memory-tool.ts +68 -0
  286. package/packages/pi/extensions/notifications.ts +73 -0
  287. package/packages/pi/extensions/peter-parker.ts +202 -0
  288. package/packages/pi/extensions/policy-head-tool.ts +276 -0
  289. package/packages/pi/extensions/portfolio-bridge.ts +90 -0
  290. package/packages/pi/extensions/session.ts +90 -0
  291. package/packages/pi/extensions/shortcuts.ts +259 -0
  292. package/packages/pi/extensions/stratus-bridge.ts +115 -0
  293. package/packages/pi/extensions/synopsis-tool.ts +83 -0
  294. package/packages/pi/extensions/tool-renderers.ts +352 -0
  295. package/packages/pi/extensions/training-buffer-tool.ts +368 -0
  296. package/packages/pi/extensions/types.ts +163 -0
  297. package/packages/pi/package-lock.json +346 -0
  298. package/packages/pi/package.json +44 -0
  299. package/packages/pi/skills/agent-browser/SKILL.md +116 -0
  300. package/packages/pi/skills/brand-architect/SKILL.md +240 -0
  301. package/packages/pi/skills/brand-architect/config.yaml +137 -0
  302. package/packages/pi/skills/campaign-hud/config.yaml +112 -0
  303. package/packages/pi/skills/content-creator/SKILL.md +294 -0
  304. package/packages/pi/skills/context/SKILL.md +65 -0
  305. package/packages/pi/skills/debug/MULTI_AGENT.md +360 -0
  306. package/packages/pi/skills/debug/SKILL.md +554 -0
  307. package/packages/pi/skills/end/SKILL.md +1782 -0
  308. package/packages/pi/skills/eval/SKILL.md +75 -0
  309. package/packages/pi/skills/fly-deploy/SKILL.md +676 -0
  310. package/packages/pi/skills/founder-video/SKILL.md +467 -0
  311. package/packages/pi/skills/hud/SKILL.md +160 -0
  312. package/packages/pi/skills/orchestrate/SKILL.md +74 -0
  313. package/packages/pi/skills/pi-agents/SKILL.md +78 -0
  314. package/packages/pi/skills/react-best-practices/AGENTS.md +2249 -0
  315. package/packages/pi/skills/react-best-practices/README.md +123 -0
  316. package/packages/pi/skills/react-best-practices/SKILL.md +125 -0
  317. package/packages/pi/skills/react-best-practices/metadata.json +15 -0
  318. package/packages/pi/skills/react-best-practices/rules/_sections.md +46 -0
  319. package/packages/pi/skills/react-best-practices/rules/_template.md +28 -0
  320. package/packages/pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  321. package/packages/pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  322. package/packages/pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
  323. package/packages/pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
  324. package/packages/pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
  325. package/packages/pi/skills/react-best-practices/rules/async-parallel.md +28 -0
  326. package/packages/pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  327. package/packages/pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  328. package/packages/pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  329. package/packages/pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  330. package/packages/pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  331. package/packages/pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
  332. package/packages/pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  333. package/packages/pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  334. package/packages/pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  335. package/packages/pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  336. package/packages/pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  337. package/packages/pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  338. package/packages/pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  339. package/packages/pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
  340. package/packages/pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  341. package/packages/pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
  342. package/packages/pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  343. package/packages/pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  344. package/packages/pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  345. package/packages/pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  346. package/packages/pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
  347. package/packages/pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  348. package/packages/pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  349. package/packages/pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  350. package/packages/pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  351. package/packages/pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  352. package/packages/pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  353. package/packages/pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  354. package/packages/pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  355. package/packages/pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  356. package/packages/pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  357. package/packages/pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  358. package/packages/pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
  359. package/packages/pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  360. package/packages/pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  361. package/packages/pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  362. package/packages/pi/skills/react-best-practices/rules/server-cache-react.md +26 -0
  363. package/packages/pi/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  364. package/packages/pi/skills/react-best-practices/rules/server-serialization.md +38 -0
  365. package/packages/pi/skills/remotion-best-practices/SKILL.md +43 -0
  366. package/packages/pi/skills/remotion-best-practices/rules/3d.md +86 -0
  367. package/packages/pi/skills/remotion-best-practices/rules/animations.md +29 -0
  368. package/packages/pi/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  369. package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  370. package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  371. package/packages/pi/skills/remotion-best-practices/rules/assets.md +78 -0
  372. package/packages/pi/skills/remotion-best-practices/rules/audio.md +172 -0
  373. package/packages/pi/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  374. package/packages/pi/skills/remotion-best-practices/rules/can-decode.md +75 -0
  375. package/packages/pi/skills/remotion-best-practices/rules/charts.md +58 -0
  376. package/packages/pi/skills/remotion-best-practices/rules/compositions.md +146 -0
  377. package/packages/pi/skills/remotion-best-practices/rules/display-captions.md +126 -0
  378. package/packages/pi/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  379. package/packages/pi/skills/remotion-best-practices/rules/fonts.md +152 -0
  380. package/packages/pi/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  381. package/packages/pi/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  382. package/packages/pi/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  383. package/packages/pi/skills/remotion-best-practices/rules/gifs.md +138 -0
  384. package/packages/pi/skills/remotion-best-practices/rules/images.md +130 -0
  385. package/packages/pi/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  386. package/packages/pi/skills/remotion-best-practices/rules/lottie.md +68 -0
  387. package/packages/pi/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  388. package/packages/pi/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  389. package/packages/pi/skills/remotion-best-practices/rules/sequencing.md +106 -0
  390. package/packages/pi/skills/remotion-best-practices/rules/tailwind.md +11 -0
  391. package/packages/pi/skills/remotion-best-practices/rules/text-animations.md +20 -0
  392. package/packages/pi/skills/remotion-best-practices/rules/timing.md +179 -0
  393. package/packages/pi/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  394. package/packages/pi/skills/remotion-best-practices/rules/transitions.md +122 -0
  395. package/packages/pi/skills/remotion-best-practices/rules/trimming.md +53 -0
  396. package/packages/pi/skills/remotion-best-practices/rules/videos.md +171 -0
  397. package/packages/pi/skills/search/SKILL.md +220 -0
  398. package/packages/pi/skills/spec/SKILL.md +377 -0
  399. package/packages/pi/skills/startup/SKILL.md +315 -0
  400. package/packages/pi/skills/web-architect/SKILL.md +309 -0
  401. package/packages/pi/skills/x-algorithm/SKILL.md +305 -0
  402. package/packages/pi/teams/dev-team.yaml +63 -0
  403. package/packages/pi/teams/gtm-team.yaml +79 -0
  404. package/packages/pi/themes/jfl.theme.json +76 -0
  405. package/packages/pi/tsconfig.json +21 -0
  406. package/scripts/collect-tuples.sh +124 -0
  407. package/scripts/destroy-fleet.sh +37 -0
  408. package/scripts/jfl-ide.sh +48 -0
  409. package/scripts/session/session-cleanup.sh +4 -11
  410. package/scripts/session/session-init.sh +6 -0
  411. package/scripts/session/session-sync.sh +25 -0
  412. package/scripts/setup-branch-protection.sh +106 -0
  413. package/scripts/spawn-fleet.sh +144 -0
  414. package/scripts/train-policy-head.py +434 -0
  415. package/scripts/vm-swarm/README.md +301 -0
  416. package/scripts/vm-swarm/collect-tuples.sh +331 -0
  417. package/scripts/vm-swarm/create-base-template.sh +339 -0
  418. package/scripts/vm-swarm/kill-fleet.sh +204 -0
  419. package/scripts/vm-swarm/monitor-fleet.sh +346 -0
  420. package/scripts/vm-swarm/spawn-fleet.sh +304 -0
  421. package/template/.github/workflows/jfl-eval.yml +105 -8
  422. package/template/.github/workflows/jfl-review.yml +4 -0
  423. package/template/scripts/session/session-end.sh +69 -6
  424. package/template/scripts/session/session-init.sh +55 -30
  425. package/template/scripts/session/session-lock.sh +464 -0
  426. package/template/templates/service-agent/workflows/jfl-eval.yml +19 -0
  427. package/dist/dashboard-static/assets/index-B6kRK9Rq.js +0 -116
  428. package/dist/dashboard-static/assets/index-BpdKJPLu.css +0 -1
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ # JFL Agent IDE Launcher
3
+ # Usage: jfl ide [layout]
4
+ # jfl ide → default dev layout
5
+ # jfl ide dev → developer layout
6
+ # jfl ide lead → engineering lead layout
7
+ # jfl ide portfolio → portfolio owner layout
8
+ # jfl ide onboard → onboarding layout
9
+
10
+ set -e
11
+
12
+ LAYOUT="${1:-dev}"
13
+ PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
14
+ LAYOUTS_DIR="$PROJECT_ROOT/.jfl/layouts"
15
+
16
+ # Check tmux-ide is installed
17
+ if ! command -v tmux-ide &>/dev/null; then
18
+ echo "tmux-ide not found. Installing..."
19
+ npm install -g tmux-ide
20
+ fi
21
+
22
+ # Check layout exists
23
+ if [ "$LAYOUT" = "default" ] || [ -f "$PROJECT_ROOT/ide.yml" ] && [ "$LAYOUT" = "dev" ] && [ ! -f "$LAYOUTS_DIR/$LAYOUT.yml" ]; then
24
+ echo "🚀 Launching JFL IDE (default layout)"
25
+ cd "$PROJECT_ROOT"
26
+ tmux-ide
27
+ exit 0
28
+ fi
29
+
30
+ LAYOUT_FILE="$LAYOUTS_DIR/$LAYOUT.yml"
31
+ if [ ! -f "$LAYOUT_FILE" ]; then
32
+ echo "❌ Layout not found: $LAYOUT"
33
+ echo ""
34
+ echo "Available layouts:"
35
+ for f in "$LAYOUTS_DIR"/*.yml; do
36
+ name=$(basename "$f" .yml)
37
+ echo " - $name"
38
+ done
39
+ exit 1
40
+ fi
41
+
42
+ echo "🚀 Launching JFL IDE ($LAYOUT layout)"
43
+
44
+ # Copy layout to project root as ide.yml (tmux-ide expects it there)
45
+ cp "$LAYOUT_FILE" "$PROJECT_ROOT/ide.yml"
46
+
47
+ cd "$PROJECT_ROOT"
48
+ tmux-ide
@@ -48,17 +48,10 @@ if [ -f ".auto-merge.pid" ]; then
48
48
  rm -f ".auto-merge.pid"
49
49
  fi
50
50
 
51
- # Stop context-hub if running (already handled by Stop hook, but be defensive)
52
- if [ -f ".jfl/context-hub.pid" ]; then
53
- PID=$(cat ".jfl/context-hub.pid")
54
- if kill -0 "$PID" 2>/dev/null; then
55
- echo " Stopping context-hub (PID: $PID)..."
56
- kill -TERM "$PID" 2>/dev/null || true
57
- sleep 1
58
- kill -0 "$PID" 2>/dev/null && kill -9 "$PID" 2>/dev/null || true
59
- fi
60
- rm -f ".jfl/context-hub.pid"
61
- fi
51
+ # Context Hub is a DAEMON persists across sessions. Do NOT kill it here.
52
+ # Killing it before Stop hooks fire causes ECONNREFUSED on all HTTP hooks.
53
+ # The hub has 5-layer resilience (launchd, MCP auto-recovery, SessionStart ensure,
54
+ # self-healing on crash, startup grace period). Only stop via: jfl context-hub stop
62
55
 
63
56
  # Get current session info
64
57
  BRANCH=$(git branch --show-current 2>/dev/null || echo "")
@@ -12,6 +12,12 @@
12
12
 
13
13
  set -e
14
14
 
15
+ # Skip session init when running as autoresearch (peter.ts sets this)
16
+ if [ "${JFL_AUTORESEARCH:-}" = "1" ]; then
17
+ echo "Skipping session init (autoresearch mode)"
18
+ exit 0
19
+ fi
20
+
15
21
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
22
  REPO_DIR="${JFL_REPO_DIR:-$(pwd)}"
17
23
  WORKTREES_DIR="$REPO_DIR/worktrees"
@@ -154,6 +154,31 @@ echo "--- Syncing submodules ---"
154
154
  cd "$GTM_ROOT"
155
155
  git submodule update --init --recursive 2>/dev/null || true
156
156
 
157
+ # Sync registered services (cross-repo safety net)
158
+ # Edits to services from a GTM session aren't auto-committed — this catches them
159
+ if [ -f ".jfl/config.json" ]; then
160
+ SERVICE_COUNT=$(jq -r '.registered_services | length // 0' .jfl/config.json 2>/dev/null)
161
+ if [ "$SERVICE_COUNT" -gt 0 ]; then
162
+ echo ""
163
+ echo "--- Syncing registered services ---"
164
+ for i in $(seq 0 $((SERVICE_COUNT - 1))); do
165
+ SVC_NAME=$(jq -r ".registered_services[$i].name" .jfl/config.json)
166
+ SVC_PATH=$(jq -r ".registered_services[$i].path" .jfl/config.json)
167
+ SVC_STATUS=$(jq -r ".registered_services[$i].status // \"active\"" .jfl/config.json)
168
+
169
+ if [ "$SVC_STATUS" != "active" ]; then
170
+ continue
171
+ fi
172
+
173
+ if [ -d "$SVC_PATH" ] && [ -d "$SVC_PATH/.git" ]; then
174
+ sync_repo "$SVC_PATH" "$SVC_NAME"
175
+ else
176
+ echo -e "${YELLOW}WARNING: Service $SVC_NAME not found at $SVC_PATH${NC}"
177
+ fi
178
+ done
179
+ fi
180
+ fi
181
+
157
182
  # Final status
158
183
  echo ""
159
184
  echo "========================================"
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Setup branch protection for 402goose/jfl-cli
5
+ # Requires: admin access to the repo
6
+ # Usage: ./scripts/setup-branch-protection.sh
7
+
8
+ REPO="402goose/jfl-cli"
9
+ BRANCH="main"
10
+
11
+ echo "Setting up branch protection for $REPO ($BRANCH)..."
12
+ echo ""
13
+
14
+ # Method 1: Repository rulesets (preferred — newer API, more flexible)
15
+ echo "Attempting rulesets API..."
16
+ if gh api "repos/$REPO/rulesets" \
17
+ --method POST \
18
+ --input - <<'EOF' 2>/dev/null; then
19
+ {
20
+ "name": "Require CI + Sentinel before merge",
21
+ "target": "branch",
22
+ "enforcement": "active",
23
+ "conditions": {
24
+ "ref_name": {
25
+ "include": ["refs/heads/main"],
26
+ "exclude": []
27
+ }
28
+ },
29
+ "rules": [
30
+ {
31
+ "type": "required_status_checks",
32
+ "parameters": {
33
+ "strict_required_status_checks_policy": true,
34
+ "required_status_checks": [
35
+ {
36
+ "context": "build-and-test",
37
+ "integration_id": null
38
+ },
39
+ {
40
+ "context": "PR Sentinel",
41
+ "integration_id": null
42
+ }
43
+ ]
44
+ }
45
+ },
46
+ {
47
+ "type": "pull_request",
48
+ "parameters": {
49
+ "required_approving_review_count": 0,
50
+ "dismiss_stale_reviews_on_push": false,
51
+ "require_code_owner_review": false,
52
+ "require_last_push_approval": false,
53
+ "required_review_thread_resolution": false
54
+ }
55
+ }
56
+ ]
57
+ }
58
+ EOF
59
+ echo "✅ Ruleset created successfully"
60
+ exit 0
61
+ fi
62
+
63
+ echo "Rulesets API failed, trying branch protection API..."
64
+
65
+ # Method 2: Classic branch protection (fallback)
66
+ if gh api "repos/$REPO/branches/$BRANCH/protection" \
67
+ --method PUT \
68
+ --input - <<'EOF' 2>/dev/null; then
69
+ {
70
+ "required_status_checks": {
71
+ "strict": true,
72
+ "contexts": [
73
+ "build-and-test",
74
+ "PR Sentinel"
75
+ ]
76
+ },
77
+ "enforce_admins": false,
78
+ "required_pull_request_reviews": null,
79
+ "restrictions": null,
80
+ "required_linear_history": false,
81
+ "allow_force_pushes": false,
82
+ "allow_deletions": false
83
+ }
84
+ EOF
85
+ echo "✅ Branch protection configured successfully"
86
+ exit 0
87
+ fi
88
+
89
+ echo ""
90
+ echo "❌ Both APIs returned 404. You need admin access to $REPO."
91
+ echo ""
92
+ echo "Manual setup (GitHub UI):"
93
+ echo " 1. Go to: https://github.com/$REPO/settings/rules"
94
+ echo " 2. Click 'New ruleset'"
95
+ echo " 3. Name: 'Require CI + Sentinel before merge'"
96
+ echo " 4. Enforcement: Active"
97
+ echo " 5. Target branches: Add 'main'"
98
+ echo " 6. Add rule: 'Require status checks to pass'"
99
+ echo " - Check 'Require branches to be up to date'"
100
+ echo " - Add checks: 'build-and-test', 'PR Sentinel'"
101
+ echo " 7. Add rule: 'Require a pull request before merging'"
102
+ echo " - Required approvals: 0"
103
+ echo " 8. Save"
104
+ echo ""
105
+ echo "This prevents merging PRs until both CI and Sentinel have run."
106
+ exit 1
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env bash
2
+ # spawn-fleet.sh — Spin up N agent VMs from template for parallel autoresearch
3
+ #
4
+ # Usage:
5
+ # ./scripts/spawn-fleet.sh [FLEET_SIZE] [TARGET_REPO]
6
+ #
7
+ # Prerequisites:
8
+ # - Parallels Desktop Pro (prlctl)
9
+ # - Base VM "pi-base" with snapshot "clean-install"
10
+ # - hv_apple_isa_vm_quota=255 boot arg (for >2 VMs)
11
+ #
12
+ # Each VM gets:
13
+ # - Latest policy weights from .jfl/policy-weights.json
14
+ # - Agent identity config
15
+ # - Runs jfl peter autoresearch --rounds 5 autonomously
16
+
17
+ set -euo pipefail
18
+
19
+ FLEET_SIZE=${1:-5}
20
+ TARGET_REPO=${2:-$(git remote get-url origin 2>/dev/null || echo "")}
21
+ WAVE_ID=$(date +%s)
22
+ WEIGHTS_PATH=".jfl/policy-weights.json"
23
+ BASE_VM="pi-base"
24
+ SNAPSHOT="clean-install"
25
+
26
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
27
+ echo " JFL Agent Fleet — Wave ${WAVE_ID}"
28
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
29
+ echo " Fleet size: ${FLEET_SIZE}"
30
+ echo " Target repo: ${TARGET_REPO}"
31
+ echo " Base VM: ${BASE_VM}"
32
+ echo ""
33
+
34
+ # Verify prlctl
35
+ if ! command -v prlctl &>/dev/null; then
36
+ echo "ERROR: prlctl not found. Install Parallels Desktop Pro."
37
+ exit 1
38
+ fi
39
+
40
+ # Verify base VM exists
41
+ if ! prlctl list -a 2>/dev/null | grep -q "${BASE_VM}"; then
42
+ echo "ERROR: Base VM '${BASE_VM}' not found."
43
+ echo ""
44
+ echo "Create it:"
45
+ echo " prlctl create '${BASE_VM}' --ostype macos --dist macos-tahoe"
46
+ echo " prlctl set '${BASE_VM}' --memsize 2048 --cpus 2"
47
+ echo " prlctl start '${BASE_VM}'"
48
+ echo " # Install: brew, node, git, jfl, ralph-tui"
49
+ echo " prlctl stop '${BASE_VM}'"
50
+ echo " prlctl snapshot '${BASE_VM}' --name '${SNAPSHOT}'"
51
+ exit 1
52
+ fi
53
+
54
+ # Create shared directories
55
+ SHARED_DIR="/tmp/jfl-fleet-${WAVE_ID}"
56
+ mkdir -p "${SHARED_DIR}/tuples" "${SHARED_DIR}/config"
57
+
58
+ # Copy policy weights if they exist
59
+ if [ -f "${WEIGHTS_PATH}" ]; then
60
+ cp "${WEIGHTS_PATH}" "${SHARED_DIR}/config/policy-weights.json"
61
+ TRAINED_ON=$(python3 -c "import json; print(json.load(open('${WEIGHTS_PATH}'))['trained_on'])" 2>/dev/null || echo "?")
62
+ echo " Policy weights: trained on ${TRAINED_ON} tuples"
63
+ else
64
+ echo " No policy weights — agents will use heuristic selection"
65
+ fi
66
+
67
+ echo ""
68
+
69
+ # Spawn VMs
70
+ STARTED=0
71
+ for i in $(seq 1 "${FLEET_SIZE}"); do
72
+ AGENT_NAME="agent-${WAVE_ID}-${i}"
73
+
74
+ echo -n " [${i}/${FLEET_SIZE}] Spawning ${AGENT_NAME}..."
75
+
76
+ # Clone from template (linked clone = fast, CoW)
77
+ if ! prlctl clone "${BASE_VM}" --name "${AGENT_NAME}" --linked --snapshot "${SNAPSHOT}" 2>/dev/null; then
78
+ echo " FAILED (clone)"
79
+ continue
80
+ fi
81
+
82
+ # Configure VM
83
+ prlctl set "${AGENT_NAME}" --memsize 2048 --cpus 2 2>/dev/null
84
+
85
+ # Start VM
86
+ if ! prlctl start "${AGENT_NAME}" 2>/dev/null; then
87
+ echo " FAILED (start)"
88
+ prlctl delete "${AGENT_NAME}" 2>/dev/null || true
89
+ continue
90
+ fi
91
+
92
+ # Wait for VM to boot
93
+ sleep 5
94
+
95
+ # Inject agent config
96
+ prlctl exec "${AGENT_NAME}" -- bash -c "
97
+ mkdir -p /tmp/agent-config
98
+ cat > /tmp/agent-config/identity.json << EOF
99
+ {
100
+ \"agent_id\": \"${AGENT_NAME}\",
101
+ \"wave_id\": \"${WAVE_ID}\",
102
+ \"fleet_index\": ${i},
103
+ \"fleet_size\": ${FLEET_SIZE},
104
+ \"target_repo\": \"${TARGET_REPO}\"
105
+ }
106
+ EOF
107
+ " 2>/dev/null
108
+
109
+ # Copy policy weights if available
110
+ if [ -f "${SHARED_DIR}/config/policy-weights.json" ]; then
111
+ prlctl copy-to "${AGENT_NAME}" \
112
+ "${SHARED_DIR}/config/policy-weights.json" \
113
+ /tmp/agent-config/policy-weights.json 2>/dev/null || true
114
+ fi
115
+
116
+ # Launch autoresearch inside VM
117
+ prlctl exec "${AGENT_NAME}" -- bash -c "
118
+ cd /tmp && git clone '${TARGET_REPO}' workspace 2>/dev/null
119
+ cd /tmp/workspace
120
+
121
+ # Load policy weights
122
+ mkdir -p .jfl
123
+ cp /tmp/agent-config/policy-weights.json .jfl/policy-weights.json 2>/dev/null || true
124
+ cp /tmp/agent-config/identity.json .jfl/agent-identity.json
125
+
126
+ # Run autoresearch (detached so exec returns)
127
+ nohup jfl peter autoresearch --rounds 5 > /tmp/autoresearch.log 2>&1 &
128
+ echo \$! > /tmp/autoresearch.pid
129
+ " 2>/dev/null &
130
+
131
+ STARTED=$((STARTED + 1))
132
+ echo " OK"
133
+ done
134
+
135
+ echo ""
136
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
137
+ echo " Fleet started: ${STARTED}/${FLEET_SIZE} agents"
138
+ echo " Wave ID: ${WAVE_ID}"
139
+ echo " Shared dir: ${SHARED_DIR}"
140
+ echo ""
141
+ echo " Collect tuples: ./scripts/collect-tuples.sh ${WAVE_ID}"
142
+ echo " Monitor: prlctl list -a | grep agent-${WAVE_ID}"
143
+ echo " Destroy fleet: ./scripts/destroy-fleet.sh ${WAVE_ID}"
144
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"