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
@@ -6,9 +6,15 @@
6
6
  *
7
7
  * @purpose Generate peer service agent references for cross-service collaboration
8
8
  */
9
- import { writeFileSync, mkdirSync, existsSync, readdirSync, unlinkSync } from "fs";
9
+ import { writeFileSync, mkdirSync, existsSync, readdirSync, unlinkSync, readFileSync } from "fs";
10
10
  import { join } from "path";
11
- import { readFileSync } from "fs";
11
+ const ACRONYMS = new Set(["api", "ui", "cli", "db", "ml", "ai", "ci", "cd", "io", "id", "url", "uri", "sdk", "rl", "mcp", "gtm", "crm", "cms", "cdn", "dns", "tcp", "udp", "ssh", "tls", "ssl", "jwt", "aws", "gcp"]);
12
+ function titleCase(str) {
13
+ return str
14
+ .split("-")
15
+ .map(w => ACRONYMS.has(w.toLowerCase()) ? w.toUpperCase() : w.charAt(0).toUpperCase() + w.slice(1))
16
+ .join(" ");
17
+ }
12
18
  /**
13
19
  * Get registered services from GTM config
14
20
  */
@@ -29,8 +35,7 @@ export function getRegisteredServices(gtmPath) {
29
35
  * Generate peer agent definition from service metadata
30
36
  */
31
37
  export function generatePeerAgentDefinition(peerService, currentServicePath, gtmPath) {
32
- const name = `peer-service-${peerService.name}`;
33
- // Generate capability-based triggers
38
+ const name = peerService.name;
34
39
  const capabilities = generatePeerCapabilities(peerService.type);
35
40
  return {
36
41
  name,
@@ -94,16 +99,18 @@ export function writePeerAgentDefinition(agentDef, servicePath) {
94
99
  mkdirSync(agentsDir, { recursive: true });
95
100
  }
96
101
  const agentFile = join(agentsDir, `${agentDef.name}.md`);
102
+ const label = titleCase(agentDef.serviceName);
97
103
  const whenToUse = generateWhenToUse(agentDef.serviceType, agentDef.serviceName);
98
104
  const content = `---
99
105
  name: ${agentDef.name}
106
+ label: ${label}
100
107
  version: 1.0.0
101
108
  color: blue
102
109
  description: ${agentDef.description}
103
110
  type: peer-service
104
111
  ---
105
112
 
106
- # Peer Service: ${agentDef.serviceName}
113
+ # ${label}
107
114
 
108
115
  **Service Type:** ${agentDef.serviceType}
109
116
  **Service Path:** \`${agentDef.servicePath}\`
@@ -174,56 +181,56 @@ When you @-mention this peer:
174
181
  function generateWhenToUse(serviceType, serviceName) {
175
182
  switch (serviceType) {
176
183
  case "api":
177
- return `Use \`@peer-service-${serviceName}\` when you need to:
184
+ return `Use \`@${serviceName}\` when you need to:
178
185
  - Check API endpoint status or health
179
186
  - Understand API routes and handlers
180
187
  - Coordinate API changes that affect your service
181
188
  - Get data from API endpoints
182
189
  - Verify API schema or contracts`;
183
190
  case "web":
184
- return `Use \`@peer-service-${serviceName}\` when you need to:
191
+ return `Use \`@${serviceName}\` when you need to:
185
192
  - Check frontend deployment status
186
193
  - Understand UI components or flows
187
194
  - Coordinate UI changes with backend
188
195
  - Get user-facing content or copy
189
196
  - Verify frontend build status`;
190
197
  case "worker":
191
- return `Use \`@peer-service-${serviceName}\` when you need to:
198
+ return `Use \`@${serviceName}\` when you need to:
192
199
  - Check background job status
193
200
  - Understand job queue state
194
201
  - Coordinate async operations
195
202
  - Trigger or schedule jobs
196
203
  - Verify job processing results`;
197
204
  case "library":
198
- return `Use \`@peer-service-${serviceName}\` when you need to:
205
+ return `Use \`@${serviceName}\` when you need to:
199
206
  - Understand library APIs and interfaces
200
207
  - Work on plugin or package features
201
208
  - Run library tests and builds
202
209
  - Update documentation
203
210
  - Debug integration issues`;
204
211
  case "infrastructure":
205
- return `Use \`@peer-service-${serviceName}\` when you need to:
212
+ return `Use \`@${serviceName}\` when you need to:
206
213
  - Check system health across services
207
214
  - Get aggregated metrics or logs
208
215
  - Coordinate service deployments
209
216
  - Understand infrastructure state
210
217
  - Verify connectivity or resources`;
211
218
  case "container":
212
- return `Use \`@peer-service-${serviceName}\` when you need to:
219
+ return `Use \`@${serviceName}\` when you need to:
213
220
  - Check container status
214
221
  - Understand Docker configuration
215
222
  - Coordinate container operations
216
223
  - Verify container health
217
224
  - Get container logs or metrics`;
218
225
  case "cli":
219
- return `Use \`@peer-service-${serviceName}\` when you need to:
226
+ return `Use \`@${serviceName}\` when you need to:
220
227
  - Execute CLI commands
221
228
  - Automate workflows
222
229
  - Run scripts or tools
223
230
  - Get CLI output or results
224
231
  - Verify CLI functionality`;
225
232
  default:
226
- return `Use \`@peer-service-${serviceName}\` when you need to:
233
+ return `Use \`@${serviceName}\` when you need to:
227
234
  - Check service status
228
235
  - Understand service capabilities
229
236
  - Coordinate with this service
@@ -252,31 +259,48 @@ export function syncPeerAgents(servicePath, gtmPath) {
252
259
  if (!existsSync(agentsDir)) {
253
260
  mkdirSync(agentsDir, { recursive: true });
254
261
  }
255
- // Get existing peer agent files
262
+ // Get existing peer agent files (check both old and new naming conventions)
256
263
  const existingPeerFiles = existsSync(agentsDir)
257
- ? readdirSync(agentsDir).filter((f) => f.startsWith("peer-service-") && f.endsWith(".md"))
264
+ ? readdirSync(agentsDir).filter((f) => f.endsWith(".md") && !f.startsWith("_") && f !== "README.md")
258
265
  : [];
266
+ // Read frontmatter to identify peer agent files (works with old and new naming)
267
+ const peerFileSet = new Set();
268
+ for (const f of existingPeerFiles) {
269
+ try {
270
+ const content = readFileSync(join(agentsDir, f), "utf-8");
271
+ if (content.includes("type: peer-service") || f.startsWith("peer-service-")) {
272
+ peerFileSet.add(f);
273
+ }
274
+ }
275
+ catch { }
276
+ }
259
277
  // Generate/update peer agent files for all registered services
260
278
  const currentPeerFiles = new Set();
261
279
  for (const peerService of peerServices) {
262
280
  const agentDef = generatePeerAgentDefinition(peerService, servicePath, gtmPath);
263
281
  const fileName = `${agentDef.name}.md`;
264
282
  currentPeerFiles.add(fileName);
283
+ // Remove old-style file if it exists (migration)
284
+ const oldFileName = `peer-service-${agentDef.name}.md`;
285
+ const oldFilePath = join(agentsDir, oldFileName);
286
+ if (existsSync(oldFilePath)) {
287
+ unlinkSync(oldFilePath);
288
+ peerFileSet.delete(oldFileName);
289
+ }
265
290
  const filePath = join(agentsDir, fileName);
266
291
  if (existsSync(filePath)) {
267
- // Update existing
268
292
  writePeerAgentDefinition(agentDef, servicePath);
269
293
  stats.updated++;
270
294
  }
271
295
  else {
272
- // Add new
273
296
  writePeerAgentDefinition(agentDef, servicePath);
274
297
  stats.added++;
275
298
  }
276
299
  }
277
300
  // Remove stale peer agent files (services that were unregistered)
278
- for (const existingFile of existingPeerFiles) {
279
- if (!currentPeerFiles.has(existingFile)) {
301
+ for (const existingFile of peerFileSet) {
302
+ const nameWithoutExt = existingFile.replace(/\.md$/, "").replace(/^peer-service-/, "");
303
+ if (!currentPeerFiles.has(existingFile) && !currentPeerFiles.has(`${nameWithoutExt}.md`)) {
280
304
  unlinkSync(join(agentsDir, existingFile));
281
305
  stats.removed++;
282
306
  }
@@ -1 +1 @@
1
- {"version":3,"file":"peer-agent-generator.js","sourceRoot":"","sources":["../../src/lib/peer-agent-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer-agent-generator.js","sourceRoot":"","sources":["../../src/lib/peer-agent-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @purpose Policy head inference — loads trained weights, scores candidate actions for autoresearch
3
+ */
4
+ import type { RLState, RLAction } from "./training-buffer.js";
5
+ export declare class PolicyHeadInference {
6
+ private weights;
7
+ private embedCache;
8
+ constructor(projectRoot?: string);
9
+ get isLoaded(): boolean;
10
+ get stats(): {
11
+ trained_on: number;
12
+ direction_accuracy: number;
13
+ rank_correlation: number;
14
+ } | null;
15
+ embedText(text: string): Promise<number[]>;
16
+ formatStateText(state: RLState): string;
17
+ formatActionText(action: RLAction): string;
18
+ predictReward(state: RLState, action: RLAction): Promise<number>;
19
+ rankActions(state: RLState, actions: RLAction[]): Promise<Array<{
20
+ action: RLAction;
21
+ predictedReward: number;
22
+ rank: number;
23
+ }>>;
24
+ }
25
+ //# sourceMappingURL=policy-head.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-head.d.ts","sourceRoot":"","sources":["../../src/lib/policy-head.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AA+D7D,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAA8B;gBAEpC,WAAW,CAAC,EAAE,MAAM;IAQhC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,KAAK,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAO/F;IAEK,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BhD,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAevC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAUpC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAahE,WAAW,CACf,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,QAAQ,EAAE,GAClB,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAsB/E"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * @purpose Policy head inference — loads trained weights, scores candidate actions for autoresearch
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ import { join } from "path";
6
+ function relu(x) {
7
+ return Math.max(0, x);
8
+ }
9
+ function matVecMul(mat, vec) {
10
+ return mat.map(row => row.reduce((sum, w, j) => sum + w * vec[j], 0));
11
+ }
12
+ function vecAdd(a, b) {
13
+ return a.map((v, i) => v + b[i]);
14
+ }
15
+ function forward(weights, input) {
16
+ const { W1, b1, W2, b2, W3, b3 } = weights.layers;
17
+ // Transpose W1 for (input_dim, hidden_dim) → need input @ W1
18
+ // W1 stored as [input_dim][hidden_dim], so W1[i][j] = weight from input i to hidden j
19
+ const z1 = vecAdd(matVecMulTransposed(W1, input), b1);
20
+ const a1 = z1.map(relu);
21
+ const z2 = vecAdd(matVecMulTransposed(W2, a1), b2);
22
+ const a2 = z2.map(relu);
23
+ const z3 = vecAdd(matVecMulTransposed(W3, a2), b3);
24
+ return z3[0];
25
+ }
26
+ function matVecMulTransposed(mat, vec) {
27
+ // mat is [rows][cols], we want vec @ mat = result[cols]
28
+ // result[j] = sum_i(vec[i] * mat[i][j])
29
+ const cols = mat[0].length;
30
+ const result = new Array(cols).fill(0);
31
+ for (let i = 0; i < vec.length; i++) {
32
+ for (let j = 0; j < cols; j++) {
33
+ result[j] += vec[i] * mat[i][j];
34
+ }
35
+ }
36
+ return result;
37
+ }
38
+ export class PolicyHeadInference {
39
+ weights = null;
40
+ embedCache = new Map();
41
+ constructor(projectRoot) {
42
+ const root = projectRoot || process.cwd();
43
+ const weightsPath = join(root, ".jfl", "policy-weights.json");
44
+ if (existsSync(weightsPath)) {
45
+ this.weights = JSON.parse(readFileSync(weightsPath, "utf-8"));
46
+ }
47
+ }
48
+ get isLoaded() {
49
+ return this.weights !== null;
50
+ }
51
+ get stats() {
52
+ if (!this.weights)
53
+ return null;
54
+ return {
55
+ trained_on: this.weights.trained_on,
56
+ direction_accuracy: this.weights.direction_accuracy,
57
+ rank_correlation: this.weights.rank_correlation,
58
+ };
59
+ }
60
+ async embedText(text) {
61
+ if (this.embedCache.has(text))
62
+ return this.embedCache.get(text);
63
+ const apiKey = process.env.STRATUS_API_KEY;
64
+ if (!apiKey)
65
+ throw new Error("STRATUS_API_KEY not set");
66
+ const url = `${process.env.STRATUS_API_URL || "https://api.stratus.run"}/v1/embeddings`;
67
+ const response = await fetch(url, {
68
+ method: "POST",
69
+ headers: {
70
+ "Authorization": `Bearer ${apiKey}`,
71
+ "Content-Type": "application/json",
72
+ },
73
+ body: JSON.stringify({
74
+ model: "stratus-x1ac-base",
75
+ input: text,
76
+ }),
77
+ });
78
+ if (!response.ok)
79
+ throw new Error(`Embedding failed: ${response.status}`);
80
+ const data = await response.json();
81
+ const embedding = data.data[0].embedding;
82
+ this.embedCache.set(text, embedding);
83
+ return embedding;
84
+ }
85
+ formatStateText(state) {
86
+ const dims = Object.entries(state.dimension_scores)
87
+ .map(([k, v]) => `${k}=${v.toFixed(4)}`).join(", ");
88
+ const deltas = state.recent_deltas
89
+ .map(d => `${d >= 0 ? "+" : ""}${d.toFixed(4)}`).join(", ");
90
+ return [
91
+ `Agent: ${state.agent}`,
92
+ `Composite: ${state.composite_score.toFixed(4)}`,
93
+ `Tests: ${state.tests_passing}/${state.tests_total}`,
94
+ `Trajectory: ${state.trajectory_length}`,
95
+ `Dimensions: ${dims || "none"}`,
96
+ `Recent deltas: ${deltas || "none"}`,
97
+ ].join("\n");
98
+ }
99
+ formatActionText(action) {
100
+ const files = action.files_affected.slice(0, 5).join(", ");
101
+ return [
102
+ `Type: ${action.type}`,
103
+ `Description: ${action.description.slice(0, 150)}`,
104
+ `Scope: ${action.scope}`,
105
+ `Files: ${files || "none"}`,
106
+ ].join("\n");
107
+ }
108
+ async predictReward(state, action) {
109
+ if (!this.weights)
110
+ throw new Error("No policy weights loaded");
111
+ const stateEmb = await this.embedText(this.formatStateText(state));
112
+ const actionEmb = await this.embedText(this.formatActionText(action));
113
+ const input = [...stateEmb, ...actionEmb];
114
+ const rawPred = forward(this.weights, input);
115
+ // Denormalize
116
+ return rawPred * this.weights.target_std + this.weights.target_mean;
117
+ }
118
+ async rankActions(state, actions) {
119
+ if (!this.weights)
120
+ throw new Error("No policy weights loaded");
121
+ const stateText = this.formatStateText(state);
122
+ const stateEmb = await this.embedText(stateText);
123
+ const results = [];
124
+ for (const action of actions) {
125
+ const actionEmb = await this.embedText(this.formatActionText(action));
126
+ const input = [...stateEmb, ...actionEmb];
127
+ const rawPred = forward(this.weights, input);
128
+ const reward = rawPred * this.weights.target_std + this.weights.target_mean;
129
+ results.push({ action, predictedReward: reward, rank: 0 });
130
+ }
131
+ results.sort((a, b) => b.predictedReward - a.predictedReward);
132
+ results.forEach((r, i) => { r.rank = i + 1; });
133
+ return results;
134
+ }
135
+ }
136
+ //# sourceMappingURL=policy-head.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-head.js","sourceRoot":"","sources":["../../src/lib/policy-head.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Shared Replay Buffer
3
+ *
4
+ * Cross-agent learning via append-only JSONL file.
5
+ * Enables agents to learn from each other's experiences.
6
+ * 80% from own agent, 20% from others by default.
7
+ *
8
+ * @purpose Shared replay buffer for cross-agent reinforcement learning
9
+ */
10
+ import type { RLState, RLAction } from "./training-buffer.js";
11
+ export interface ReplayEntry {
12
+ id: string;
13
+ agent: string;
14
+ session_id: string;
15
+ state_hash: string;
16
+ state: RLState;
17
+ action_diff: string;
18
+ action: RLAction;
19
+ hypothesis: string;
20
+ reward: number;
21
+ timestamp: string;
22
+ }
23
+ export interface ReplayStats {
24
+ totalEntries: number;
25
+ perAgent: Record<string, number>;
26
+ avgReward: number;
27
+ positiveRate: number;
28
+ oldestEntry?: string;
29
+ newestEntry?: string;
30
+ }
31
+ export interface SampleOptions {
32
+ batchSize: number;
33
+ crossAgentRatio: number;
34
+ minReward?: number;
35
+ maxAge?: number;
36
+ }
37
+ export declare class ReplayBuffer {
38
+ private bufferPath;
39
+ private projectRoot;
40
+ constructor(projectRoot?: string);
41
+ /**
42
+ * Append a new entry to the replay buffer
43
+ */
44
+ write(entry: Omit<ReplayEntry, "id">): ReplayEntry;
45
+ /**
46
+ * Read all entries from the replay buffer
47
+ */
48
+ readAll(): ReplayEntry[];
49
+ /**
50
+ * Sample entries for training
51
+ * By default: 80% from target agent, 20% from others
52
+ */
53
+ sample(agent: string, options: SampleOptions): ReplayEntry[];
54
+ /**
55
+ * Sample with prioritized experience replay
56
+ * Prioritizes entries with higher absolute reward (more informative)
57
+ */
58
+ samplePrioritized(agent: string, options: SampleOptions): ReplayEntry[];
59
+ private prioritizedSample;
60
+ /**
61
+ * Get statistics about the replay buffer
62
+ */
63
+ stats(): ReplayStats;
64
+ /**
65
+ * Get entries for a specific agent
66
+ */
67
+ getForAgent(agent: string): ReplayEntry[];
68
+ /**
69
+ * Get recent entries
70
+ */
71
+ getRecent(count?: number): ReplayEntry[];
72
+ /**
73
+ * Export for policy head training
74
+ */
75
+ exportForTraining(): Array<{
76
+ state_text: string;
77
+ action_text: string;
78
+ reward: number;
79
+ agent: string;
80
+ ts: string;
81
+ }>;
82
+ private formatStateText;
83
+ private formatActionText;
84
+ private shuffle;
85
+ /**
86
+ * Clear old entries (keep last N or by age)
87
+ */
88
+ prune(options: {
89
+ maxEntries?: number;
90
+ maxAge?: number;
91
+ }): number;
92
+ }
93
+ //# sourceMappingURL=replay-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-buffer.d.ts","sourceRoot":"","sources":["../../src/lib/replay-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAA;AAMvE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,QAAQ,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAwBD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAQ;gBAEf,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,WAAW;IAalD;;OAEG;IACH,OAAO,IAAI,WAAW,EAAE;IAgBxB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,EAAE;IAsC5D;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,EAAE;IAwCvE,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,KAAK,IAAI,WAAW;IAoCpB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;IAIzC;;OAEG;IACH,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,WAAW,EAAE;IAO5C;;OAEG;IACH,iBAAiB,IAAI,KAAK,CAAC;QACzB,UAAU,EAAE,MAAM,CAAA;QAClB,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,EAAE,EAAE,MAAM,CAAA;KACX,CAAC;IAYF,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,OAAO;IASf;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CA+BjE"}