jfl 0.4.4 → 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 (427) hide show
  1. package/dist/commands/context-hub.d.ts.map +1 -1
  2. package/dist/commands/context-hub.js +818 -39
  3. package/dist/commands/context-hub.js.map +1 -1
  4. package/dist/commands/eval.d.ts +1 -1
  5. package/dist/commands/eval.d.ts.map +1 -1
  6. package/dist/commands/eval.js +192 -1
  7. package/dist/commands/eval.js.map +1 -1
  8. package/dist/commands/findings.d.ts +6 -0
  9. package/dist/commands/findings.d.ts.map +1 -0
  10. package/dist/commands/findings.js +203 -0
  11. package/dist/commands/findings.js.map +1 -0
  12. package/dist/commands/hud.d.ts.map +1 -1
  13. package/dist/commands/hud.js +47 -9
  14. package/dist/commands/hud.js.map +1 -1
  15. package/dist/commands/ide.d.ts +27 -0
  16. package/dist/commands/ide.d.ts.map +1 -0
  17. package/dist/commands/ide.js +546 -0
  18. package/dist/commands/ide.js.map +1 -0
  19. package/dist/commands/onboard.d.ts.map +1 -1
  20. package/dist/commands/onboard.js +212 -2
  21. package/dist/commands/onboard.js.map +1 -1
  22. package/dist/commands/openclaw.d.ts +3 -0
  23. package/dist/commands/openclaw.d.ts.map +1 -1
  24. package/dist/commands/openclaw.js +76 -2
  25. package/dist/commands/openclaw.js.map +1 -1
  26. package/dist/commands/peter.d.ts +1 -0
  27. package/dist/commands/peter.d.ts.map +1 -1
  28. package/dist/commands/peter.js +935 -15
  29. package/dist/commands/peter.js.map +1 -1
  30. package/dist/commands/pi-fleet.d.ts +18 -0
  31. package/dist/commands/pi-fleet.d.ts.map +1 -0
  32. package/dist/commands/pi-fleet.js +382 -0
  33. package/dist/commands/pi-fleet.js.map +1 -0
  34. package/dist/commands/pi.d.ts.map +1 -1
  35. package/dist/commands/pi.js +18 -3
  36. package/dist/commands/pi.js.map +1 -1
  37. package/dist/commands/scope.d.ts.map +1 -1
  38. package/dist/commands/scope.js +90 -1
  39. package/dist/commands/scope.js.map +1 -1
  40. package/dist/commands/services.d.ts.map +1 -1
  41. package/dist/commands/services.js +18 -0
  42. package/dist/commands/services.js.map +1 -1
  43. package/dist/commands/status.d.ts.map +1 -1
  44. package/dist/commands/status.js +22 -4
  45. package/dist/commands/status.js.map +1 -1
  46. package/dist/commands/viz.d.ts.map +1 -1
  47. package/dist/commands/viz.js +417 -0
  48. package/dist/commands/viz.js.map +1 -1
  49. package/dist/dashboard-static/assets/index-B6b867Pv.js +121 -0
  50. package/dist/dashboard-static/assets/index-Y4BrqxV-.css +1 -0
  51. package/dist/dashboard-static/index.html +2 -2
  52. package/dist/index.js +225 -61
  53. package/dist/index.js.map +1 -1
  54. package/dist/lib/agent-config.d.ts +52 -0
  55. package/dist/lib/agent-config.d.ts.map +1 -0
  56. package/dist/lib/agent-config.js +231 -0
  57. package/dist/lib/agent-config.js.map +1 -0
  58. package/dist/lib/agent-generator.d.ts +10 -0
  59. package/dist/lib/agent-generator.d.ts.map +1 -1
  60. package/dist/lib/agent-generator.js +64 -10
  61. package/dist/lib/agent-generator.js.map +1 -1
  62. package/dist/lib/agent-session.d.ts +104 -0
  63. package/dist/lib/agent-session.d.ts.map +1 -0
  64. package/dist/lib/agent-session.js +627 -0
  65. package/dist/lib/agent-session.js.map +1 -0
  66. package/dist/lib/eval-snapshot.d.ts +47 -0
  67. package/dist/lib/eval-snapshot.d.ts.map +1 -0
  68. package/dist/lib/eval-snapshot.js +315 -0
  69. package/dist/lib/eval-snapshot.js.map +1 -0
  70. package/dist/lib/eval-store.d.ts +5 -0
  71. package/dist/lib/eval-store.d.ts.map +1 -1
  72. package/dist/lib/eval-store.js +33 -3
  73. package/dist/lib/eval-store.js.map +1 -1
  74. package/dist/lib/findings-engine.d.ts +51 -0
  75. package/dist/lib/findings-engine.d.ts.map +1 -0
  76. package/dist/lib/findings-engine.js +338 -0
  77. package/dist/lib/findings-engine.js.map +1 -0
  78. package/dist/lib/flow-engine.d.ts +8 -0
  79. package/dist/lib/flow-engine.d.ts.map +1 -1
  80. package/dist/lib/flow-engine.js +84 -2
  81. package/dist/lib/flow-engine.js.map +1 -1
  82. package/dist/lib/hub-client.d.ts +1 -0
  83. package/dist/lib/hub-client.d.ts.map +1 -1
  84. package/dist/lib/hub-client.js +33 -6
  85. package/dist/lib/hub-client.js.map +1 -1
  86. package/dist/lib/ide-panes.d.ts +58 -0
  87. package/dist/lib/ide-panes.d.ts.map +1 -0
  88. package/dist/lib/ide-panes.js +508 -0
  89. package/dist/lib/ide-panes.js.map +1 -0
  90. package/dist/lib/memory-db.js +4 -4
  91. package/dist/lib/memory-db.js.map +1 -1
  92. package/dist/lib/memory-indexer.d.ts.map +1 -1
  93. package/dist/lib/memory-indexer.js +3 -0
  94. package/dist/lib/memory-indexer.js.map +1 -1
  95. package/dist/lib/memory-search.d.ts +148 -4
  96. package/dist/lib/memory-search.d.ts.map +1 -1
  97. package/dist/lib/memory-search.js +496 -58
  98. package/dist/lib/memory-search.js.map +1 -1
  99. package/dist/lib/meta-orchestrator.d.ts +104 -0
  100. package/dist/lib/meta-orchestrator.d.ts.map +1 -0
  101. package/dist/lib/meta-orchestrator.js +373 -0
  102. package/dist/lib/meta-orchestrator.js.map +1 -0
  103. package/dist/lib/peer-agent-generator.d.ts.map +1 -1
  104. package/dist/lib/peer-agent-generator.js +43 -19
  105. package/dist/lib/peer-agent-generator.js.map +1 -1
  106. package/dist/lib/policy-head.d.ts +25 -0
  107. package/dist/lib/policy-head.d.ts.map +1 -0
  108. package/dist/lib/policy-head.js +136 -0
  109. package/dist/lib/policy-head.js.map +1 -0
  110. package/dist/lib/replay-buffer.d.ts +93 -0
  111. package/dist/lib/replay-buffer.d.ts.map +1 -0
  112. package/dist/lib/replay-buffer.js +302 -0
  113. package/dist/lib/replay-buffer.js.map +1 -0
  114. package/dist/lib/sentinel-rl.d.ts +97 -0
  115. package/dist/lib/sentinel-rl.d.ts.map +1 -0
  116. package/dist/lib/sentinel-rl.js +430 -0
  117. package/dist/lib/sentinel-rl.js.map +1 -0
  118. package/dist/lib/session-lock.d.ts +61 -0
  119. package/dist/lib/session-lock.d.ts.map +1 -0
  120. package/dist/lib/session-lock.js +438 -0
  121. package/dist/lib/session-lock.js.map +1 -0
  122. package/dist/lib/stratus-client.d.ts +1 -0
  123. package/dist/lib/stratus-client.d.ts.map +1 -1
  124. package/dist/lib/stratus-client.js +24 -2
  125. package/dist/lib/stratus-client.js.map +1 -1
  126. package/dist/lib/telemetry-agent-v2.d.ts +128 -0
  127. package/dist/lib/telemetry-agent-v2.d.ts.map +1 -0
  128. package/dist/lib/telemetry-agent-v2.js +1042 -0
  129. package/dist/lib/telemetry-agent-v2.js.map +1 -0
  130. package/dist/lib/telemetry-agent.d.ts.map +1 -1
  131. package/dist/lib/telemetry-agent.js +27 -6
  132. package/dist/lib/telemetry-agent.js.map +1 -1
  133. package/dist/lib/telemetry-digest.d.ts.map +1 -1
  134. package/dist/lib/telemetry-digest.js +27 -5
  135. package/dist/lib/telemetry-digest.js.map +1 -1
  136. package/dist/lib/telemetry.d.ts.map +1 -1
  137. package/dist/lib/telemetry.js +29 -4
  138. package/dist/lib/telemetry.js.map +1 -1
  139. package/dist/lib/text-preprocessing.d.ts +83 -0
  140. package/dist/lib/text-preprocessing.d.ts.map +1 -0
  141. package/dist/lib/text-preprocessing.js +261 -0
  142. package/dist/lib/text-preprocessing.js.map +1 -0
  143. package/dist/lib/training-buffer.d.ts +86 -0
  144. package/dist/lib/training-buffer.d.ts.map +1 -0
  145. package/dist/lib/training-buffer.js +139 -0
  146. package/dist/lib/training-buffer.js.map +1 -0
  147. package/dist/lib/tuple-miner.d.ts +30 -0
  148. package/dist/lib/tuple-miner.d.ts.map +1 -0
  149. package/dist/lib/tuple-miner.js +427 -0
  150. package/dist/lib/tuple-miner.js.map +1 -0
  151. package/dist/lib/vm-backend.d.ts +72 -0
  152. package/dist/lib/vm-backend.d.ts.map +1 -0
  153. package/dist/lib/vm-backend.js +175 -0
  154. package/dist/lib/vm-backend.js.map +1 -0
  155. package/dist/lib/workspace/backend.d.ts +53 -0
  156. package/dist/lib/workspace/backend.d.ts.map +1 -0
  157. package/dist/lib/workspace/backend.js +37 -0
  158. package/dist/lib/workspace/backend.js.map +1 -0
  159. package/dist/lib/workspace/cmux-adapter.d.ts +46 -0
  160. package/dist/lib/workspace/cmux-adapter.d.ts.map +1 -0
  161. package/dist/lib/workspace/cmux-adapter.js +261 -0
  162. package/dist/lib/workspace/cmux-adapter.js.map +1 -0
  163. package/dist/lib/workspace/data-pipeline.d.ts +35 -0
  164. package/dist/lib/workspace/data-pipeline.d.ts.map +1 -0
  165. package/dist/lib/workspace/data-pipeline.js +463 -0
  166. package/dist/lib/workspace/data-pipeline.js.map +1 -0
  167. package/dist/lib/workspace/engine.d.ts +64 -0
  168. package/dist/lib/workspace/engine.d.ts.map +1 -0
  169. package/dist/lib/workspace/engine.js +397 -0
  170. package/dist/lib/workspace/engine.js.map +1 -0
  171. package/dist/lib/workspace/notifications.d.ts +14 -0
  172. package/dist/lib/workspace/notifications.d.ts.map +1 -0
  173. package/dist/lib/workspace/notifications.js +41 -0
  174. package/dist/lib/workspace/notifications.js.map +1 -0
  175. package/dist/lib/workspace/surface-registry.d.ts +49 -0
  176. package/dist/lib/workspace/surface-registry.d.ts.map +1 -0
  177. package/dist/lib/workspace/surface-registry.js +217 -0
  178. package/dist/lib/workspace/surface-registry.js.map +1 -0
  179. package/dist/lib/workspace/surface-type.d.ts +153 -0
  180. package/dist/lib/workspace/surface-type.d.ts.map +1 -0
  181. package/dist/lib/workspace/surface-type.js +9 -0
  182. package/dist/lib/workspace/surface-type.js.map +1 -0
  183. package/dist/lib/workspace/surfaces/agent-overview.d.ts +16 -0
  184. package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -0
  185. package/dist/lib/workspace/surfaces/agent-overview.js +116 -0
  186. package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -0
  187. package/dist/lib/workspace/surfaces/agent.d.ts +16 -0
  188. package/dist/lib/workspace/surfaces/agent.d.ts.map +1 -0
  189. package/dist/lib/workspace/surfaces/agent.js +112 -0
  190. package/dist/lib/workspace/surfaces/agent.js.map +1 -0
  191. package/dist/lib/workspace/surfaces/claude.d.ts +15 -0
  192. package/dist/lib/workspace/surfaces/claude.d.ts.map +1 -0
  193. package/dist/lib/workspace/surfaces/claude.js +23 -0
  194. package/dist/lib/workspace/surfaces/claude.js.map +1 -0
  195. package/dist/lib/workspace/surfaces/dashboard.d.ts +21 -0
  196. package/dist/lib/workspace/surfaces/dashboard.d.ts.map +1 -0
  197. package/dist/lib/workspace/surfaces/dashboard.js +32 -0
  198. package/dist/lib/workspace/surfaces/dashboard.js.map +1 -0
  199. package/dist/lib/workspace/surfaces/eval.d.ts +15 -0
  200. package/dist/lib/workspace/surfaces/eval.d.ts.map +1 -0
  201. package/dist/lib/workspace/surfaces/eval.js +42 -0
  202. package/dist/lib/workspace/surfaces/eval.js.map +1 -0
  203. package/dist/lib/workspace/surfaces/event-stream.d.ts +16 -0
  204. package/dist/lib/workspace/surfaces/event-stream.d.ts.map +1 -0
  205. package/dist/lib/workspace/surfaces/event-stream.js +40 -0
  206. package/dist/lib/workspace/surfaces/event-stream.js.map +1 -0
  207. package/dist/lib/workspace/surfaces/flow.d.ts +16 -0
  208. package/dist/lib/workspace/surfaces/flow.d.ts.map +1 -0
  209. package/dist/lib/workspace/surfaces/flow.js +49 -0
  210. package/dist/lib/workspace/surfaces/flow.js.map +1 -0
  211. package/dist/lib/workspace/surfaces/index.d.ts +16 -0
  212. package/dist/lib/workspace/surfaces/index.d.ts.map +1 -0
  213. package/dist/lib/workspace/surfaces/index.js +16 -0
  214. package/dist/lib/workspace/surfaces/index.js.map +1 -0
  215. package/dist/lib/workspace/surfaces/portfolio.d.ts +16 -0
  216. package/dist/lib/workspace/surfaces/portfolio.d.ts.map +1 -0
  217. package/dist/lib/workspace/surfaces/portfolio.js +102 -0
  218. package/dist/lib/workspace/surfaces/portfolio.js.map +1 -0
  219. package/dist/lib/workspace/surfaces/service.d.ts +16 -0
  220. package/dist/lib/workspace/surfaces/service.d.ts.map +1 -0
  221. package/dist/lib/workspace/surfaces/service.js +45 -0
  222. package/dist/lib/workspace/surfaces/service.js.map +1 -0
  223. package/dist/lib/workspace/surfaces/shell.d.ts +15 -0
  224. package/dist/lib/workspace/surfaces/shell.d.ts.map +1 -0
  225. package/dist/lib/workspace/surfaces/shell.js +19 -0
  226. package/dist/lib/workspace/surfaces/shell.js.map +1 -0
  227. package/dist/lib/workspace/surfaces/telemetry.d.ts +16 -0
  228. package/dist/lib/workspace/surfaces/telemetry.d.ts.map +1 -0
  229. package/dist/lib/workspace/surfaces/telemetry.js +48 -0
  230. package/dist/lib/workspace/surfaces/telemetry.js.map +1 -0
  231. package/dist/lib/workspace/surfaces/topology.d.ts +15 -0
  232. package/dist/lib/workspace/surfaces/topology.d.ts.map +1 -0
  233. package/dist/lib/workspace/surfaces/topology.js +19 -0
  234. package/dist/lib/workspace/surfaces/topology.js.map +1 -0
  235. package/dist/lib/workspace/surfaces/training.d.ts +16 -0
  236. package/dist/lib/workspace/surfaces/training.d.ts.map +1 -0
  237. package/dist/lib/workspace/surfaces/training.js +22 -0
  238. package/dist/lib/workspace/surfaces/training.js.map +1 -0
  239. package/dist/lib/workspace/tmux-adapter.d.ts +27 -0
  240. package/dist/lib/workspace/tmux-adapter.d.ts.map +1 -0
  241. package/dist/lib/workspace/tmux-adapter.js +106 -0
  242. package/dist/lib/workspace/tmux-adapter.js.map +1 -0
  243. package/dist/mcp/context-hub-mcp.js +7 -24
  244. package/dist/mcp/context-hub-mcp.js.map +1 -1
  245. package/dist/types/flows.d.ts +2 -0
  246. package/dist/types/flows.d.ts.map +1 -1
  247. package/dist/types/ide.d.ts +49 -0
  248. package/dist/types/ide.d.ts.map +1 -0
  249. package/dist/types/ide.js +5 -0
  250. package/dist/types/ide.js.map +1 -0
  251. package/dist/types/platform-digest.d.ts +228 -0
  252. package/dist/types/platform-digest.d.ts.map +1 -0
  253. package/dist/types/platform-digest.js +5 -0
  254. package/dist/types/platform-digest.js.map +1 -0
  255. package/dist/types/telemetry-digest.d.ts +2 -0
  256. package/dist/types/telemetry-digest.d.ts.map +1 -1
  257. package/dist/utils/ensure-project.d.ts +1 -0
  258. package/dist/utils/ensure-project.d.ts.map +1 -1
  259. package/dist/utils/ensure-project.js +19 -7
  260. package/dist/utils/ensure-project.js.map +1 -1
  261. package/dist/utils/jfl-config.d.ts +1 -0
  262. package/dist/utils/jfl-config.d.ts.map +1 -1
  263. package/dist/utils/jfl-config.js +19 -1
  264. package/dist/utils/jfl-config.js.map +1 -1
  265. package/dist/utils/jfl-paths.d.ts +5 -0
  266. package/dist/utils/jfl-paths.d.ts.map +1 -1
  267. package/dist/utils/jfl-paths.js +25 -3
  268. package/dist/utils/jfl-paths.js.map +1 -1
  269. package/package.json +3 -2
  270. package/packages/pi/AGENTS.md +112 -0
  271. package/packages/pi/extensions/agent-grid.ts +191 -0
  272. package/packages/pi/extensions/agent-names.ts +178 -0
  273. package/packages/pi/extensions/autoresearch.ts +427 -0
  274. package/packages/pi/extensions/bookmarks.ts +85 -0
  275. package/packages/pi/extensions/context.ts +151 -0
  276. package/packages/pi/extensions/crm-tool.ts +61 -0
  277. package/packages/pi/extensions/eval-tool.ts +224 -0
  278. package/packages/pi/extensions/eval.ts +60 -0
  279. package/packages/pi/extensions/footer.ts +239 -0
  280. package/packages/pi/extensions/hud-tool.ts +145 -0
  281. package/packages/pi/extensions/index.ts +392 -0
  282. package/packages/pi/extensions/journal.ts +224 -0
  283. package/packages/pi/extensions/map-bridge.ts +178 -0
  284. package/packages/pi/extensions/memory-tool.ts +68 -0
  285. package/packages/pi/extensions/notifications.ts +73 -0
  286. package/packages/pi/extensions/peter-parker.ts +202 -0
  287. package/packages/pi/extensions/policy-head-tool.ts +276 -0
  288. package/packages/pi/extensions/portfolio-bridge.ts +90 -0
  289. package/packages/pi/extensions/session.ts +90 -0
  290. package/packages/pi/extensions/shortcuts.ts +259 -0
  291. package/packages/pi/extensions/stratus-bridge.ts +115 -0
  292. package/packages/pi/extensions/synopsis-tool.ts +83 -0
  293. package/packages/pi/extensions/tool-renderers.ts +352 -0
  294. package/packages/pi/extensions/training-buffer-tool.ts +368 -0
  295. package/packages/pi/extensions/types.ts +163 -0
  296. package/packages/pi/package-lock.json +346 -0
  297. package/packages/pi/package.json +44 -0
  298. package/packages/pi/skills/agent-browser/SKILL.md +116 -0
  299. package/packages/pi/skills/brand-architect/SKILL.md +240 -0
  300. package/packages/pi/skills/brand-architect/config.yaml +137 -0
  301. package/packages/pi/skills/campaign-hud/config.yaml +112 -0
  302. package/packages/pi/skills/content-creator/SKILL.md +294 -0
  303. package/packages/pi/skills/context/SKILL.md +65 -0
  304. package/packages/pi/skills/debug/MULTI_AGENT.md +360 -0
  305. package/packages/pi/skills/debug/SKILL.md +554 -0
  306. package/packages/pi/skills/end/SKILL.md +1782 -0
  307. package/packages/pi/skills/eval/SKILL.md +75 -0
  308. package/packages/pi/skills/fly-deploy/SKILL.md +676 -0
  309. package/packages/pi/skills/founder-video/SKILL.md +467 -0
  310. package/packages/pi/skills/hud/SKILL.md +160 -0
  311. package/packages/pi/skills/orchestrate/SKILL.md +74 -0
  312. package/packages/pi/skills/pi-agents/SKILL.md +78 -0
  313. package/packages/pi/skills/react-best-practices/AGENTS.md +2249 -0
  314. package/packages/pi/skills/react-best-practices/README.md +123 -0
  315. package/packages/pi/skills/react-best-practices/SKILL.md +125 -0
  316. package/packages/pi/skills/react-best-practices/metadata.json +15 -0
  317. package/packages/pi/skills/react-best-practices/rules/_sections.md +46 -0
  318. package/packages/pi/skills/react-best-practices/rules/_template.md +28 -0
  319. package/packages/pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  320. package/packages/pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  321. package/packages/pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
  322. package/packages/pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
  323. package/packages/pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
  324. package/packages/pi/skills/react-best-practices/rules/async-parallel.md +28 -0
  325. package/packages/pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  326. package/packages/pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  327. package/packages/pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  328. package/packages/pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  329. package/packages/pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  330. package/packages/pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
  331. package/packages/pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  332. package/packages/pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  333. package/packages/pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  334. package/packages/pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  335. package/packages/pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  336. package/packages/pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  337. package/packages/pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  338. package/packages/pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
  339. package/packages/pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  340. package/packages/pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
  341. package/packages/pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  342. package/packages/pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  343. package/packages/pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  344. package/packages/pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  345. package/packages/pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
  346. package/packages/pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  347. package/packages/pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  348. package/packages/pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  349. package/packages/pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  350. package/packages/pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  351. package/packages/pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  352. package/packages/pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  353. package/packages/pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  354. package/packages/pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  355. package/packages/pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  356. package/packages/pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  357. package/packages/pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
  358. package/packages/pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  359. package/packages/pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  360. package/packages/pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  361. package/packages/pi/skills/react-best-practices/rules/server-cache-react.md +26 -0
  362. package/packages/pi/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  363. package/packages/pi/skills/react-best-practices/rules/server-serialization.md +38 -0
  364. package/packages/pi/skills/remotion-best-practices/SKILL.md +43 -0
  365. package/packages/pi/skills/remotion-best-practices/rules/3d.md +86 -0
  366. package/packages/pi/skills/remotion-best-practices/rules/animations.md +29 -0
  367. package/packages/pi/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  368. package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  369. package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  370. package/packages/pi/skills/remotion-best-practices/rules/assets.md +78 -0
  371. package/packages/pi/skills/remotion-best-practices/rules/audio.md +172 -0
  372. package/packages/pi/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  373. package/packages/pi/skills/remotion-best-practices/rules/can-decode.md +75 -0
  374. package/packages/pi/skills/remotion-best-practices/rules/charts.md +58 -0
  375. package/packages/pi/skills/remotion-best-practices/rules/compositions.md +146 -0
  376. package/packages/pi/skills/remotion-best-practices/rules/display-captions.md +126 -0
  377. package/packages/pi/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  378. package/packages/pi/skills/remotion-best-practices/rules/fonts.md +152 -0
  379. package/packages/pi/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  380. package/packages/pi/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  381. package/packages/pi/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  382. package/packages/pi/skills/remotion-best-practices/rules/gifs.md +138 -0
  383. package/packages/pi/skills/remotion-best-practices/rules/images.md +130 -0
  384. package/packages/pi/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  385. package/packages/pi/skills/remotion-best-practices/rules/lottie.md +68 -0
  386. package/packages/pi/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  387. package/packages/pi/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  388. package/packages/pi/skills/remotion-best-practices/rules/sequencing.md +106 -0
  389. package/packages/pi/skills/remotion-best-practices/rules/tailwind.md +11 -0
  390. package/packages/pi/skills/remotion-best-practices/rules/text-animations.md +20 -0
  391. package/packages/pi/skills/remotion-best-practices/rules/timing.md +179 -0
  392. package/packages/pi/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  393. package/packages/pi/skills/remotion-best-practices/rules/transitions.md +122 -0
  394. package/packages/pi/skills/remotion-best-practices/rules/trimming.md +53 -0
  395. package/packages/pi/skills/remotion-best-practices/rules/videos.md +171 -0
  396. package/packages/pi/skills/search/SKILL.md +220 -0
  397. package/packages/pi/skills/spec/SKILL.md +377 -0
  398. package/packages/pi/skills/startup/SKILL.md +315 -0
  399. package/packages/pi/skills/web-architect/SKILL.md +309 -0
  400. package/packages/pi/skills/x-algorithm/SKILL.md +305 -0
  401. package/packages/pi/teams/dev-team.yaml +63 -0
  402. package/packages/pi/teams/gtm-team.yaml +79 -0
  403. package/packages/pi/themes/jfl.theme.json +76 -0
  404. package/packages/pi/tsconfig.json +21 -0
  405. package/scripts/collect-tuples.sh +124 -0
  406. package/scripts/destroy-fleet.sh +37 -0
  407. package/scripts/jfl-ide.sh +48 -0
  408. package/scripts/session/session-cleanup.sh +4 -11
  409. package/scripts/session/session-init.sh +6 -0
  410. package/scripts/session/session-sync.sh +25 -0
  411. package/scripts/setup-branch-protection.sh +106 -0
  412. package/scripts/spawn-fleet.sh +144 -0
  413. package/scripts/train-policy-head.py +434 -0
  414. package/scripts/vm-swarm/README.md +301 -0
  415. package/scripts/vm-swarm/collect-tuples.sh +331 -0
  416. package/scripts/vm-swarm/create-base-template.sh +339 -0
  417. package/scripts/vm-swarm/kill-fleet.sh +204 -0
  418. package/scripts/vm-swarm/monitor-fleet.sh +346 -0
  419. package/scripts/vm-swarm/spawn-fleet.sh +304 -0
  420. package/template/.github/workflows/jfl-eval.yml +6 -1
  421. package/template/.github/workflows/jfl-review.yml +4 -0
  422. package/template/scripts/session/session-end.sh +69 -6
  423. package/template/scripts/session/session-init.sh +55 -30
  424. package/template/scripts/session/session-lock.sh +464 -0
  425. package/template/templates/service-agent/workflows/jfl-eval.yml +19 -0
  426. package/dist/dashboard-static/assets/index-B6kRK9Rq.js +0 -116
  427. package/dist/dashboard-static/assets/index-BpdKJPLu.css +0 -1
@@ -0,0 +1,627 @@
1
+ /**
2
+ * Agent Session
3
+ *
4
+ * Session lifecycle management following Karpathy's autoresearch loop:
5
+ * branch → change → eval → keep|revert → repeat
6
+ *
7
+ * Git as state machine: keep = advance branch, discard = git reset --hard HEAD~1
8
+ * results.tsv is NOT committed (append-only local log)
9
+ *
10
+ * @purpose Manage scoped agent session lifecycle with git-based state tracking
11
+ */
12
+ import { existsSync, mkdirSync, appendFileSync, readFileSync, writeFileSync } from "fs";
13
+ import { join } from "path";
14
+ import { spawnSync, spawn } from "child_process";
15
+ import { createHash } from "crypto";
16
+ import { createEvalSnapshot, freezeEvalSnapshot, runEvalSnapshot } from "./eval-snapshot.js";
17
+ /**
18
+ * Build experiment history markdown for the agent to read.
19
+ * This is the KEY missing piece — agents need memory of past experiments.
20
+ *
21
+ * Following Karpathy's autoresearch pattern: agent sees program.md with
22
+ * instructions + history of past experiments so it knows what to try next.
23
+ */
24
+ export function buildExperimentHistory(session, transitions, currentMetric) {
25
+ const config = session.config;
26
+ const direction = config.direction === "minimize" ? "lower is better" : "higher is better";
27
+ // Get scope_files from constraints if available
28
+ const scopeFiles = config.constraints?.scope_files || config.constraints.files_in_scope || [];
29
+ const lines = [
30
+ `# Experiment History — ${session.agentName}`,
31
+ "",
32
+ `## Goal`,
33
+ `Optimize metric: **${config.metric}** (${direction})`,
34
+ `Current value: **${currentMetric.toFixed(4)}**`,
35
+ `Baseline: ${session.baselineMetric.toFixed(4)}`,
36
+ "",
37
+ `## Files to Modify`,
38
+ `Focus your changes on these specific files:`,
39
+ ...scopeFiles.map((f) => `- ${f}`),
40
+ "",
41
+ `## Constraints`,
42
+ `- Max files per change: ${config.constraints.max_file_changes}`,
43
+ `- Read-only: ${config.constraints.files_readonly.join(", ")}`,
44
+ "",
45
+ `## Past Experiments`,
46
+ ""
47
+ ];
48
+ if (transitions.length === 0) {
49
+ lines.push("No experiments yet. This is round 1.");
50
+ lines.push("");
51
+ lines.push("Make ONE small, focused change to improve the metric.");
52
+ }
53
+ else {
54
+ // Group by kept/rejected
55
+ const kept = transitions.filter(t => t.reward > 0);
56
+ const rejected = transitions.filter(t => t.reward <= 0);
57
+ lines.push(`### Kept (${kept.length} experiments that improved the metric):`);
58
+ if (kept.length === 0) {
59
+ lines.push("None yet.");
60
+ }
61
+ else {
62
+ for (const t of kept.slice(-10)) { // Last 10 kept
63
+ const files = t.action.files_affected.join(", ") || "unknown";
64
+ lines.push(`- R${t.state.trajectory_length}: "${t.action.description.slice(0, 60)}" → +${t.reward.toFixed(4)} (files: ${files})`);
65
+ }
66
+ }
67
+ lines.push("");
68
+ lines.push(`### Rejected (${rejected.length} experiments that did NOT improve):`);
69
+ if (rejected.length === 0) {
70
+ lines.push("None yet.");
71
+ }
72
+ else {
73
+ for (const t of rejected.slice(-10)) { // Last 10 rejected
74
+ lines.push(`- R${t.state.trajectory_length}: "${t.action.description.slice(0, 60)}" → ${t.reward.toFixed(4)}`);
75
+ }
76
+ }
77
+ lines.push("");
78
+ lines.push(`## What to Do`);
79
+ lines.push(`1. DO NOT repeat rejected experiments`);
80
+ lines.push(`2. BUILD on kept experiments — they worked`);
81
+ lines.push(`3. Make ONE small, focused change`);
82
+ lines.push(`4. Prefer modifying existing code over adding new files`);
83
+ }
84
+ return lines.join("\n");
85
+ }
86
+ /**
87
+ * Write experiment history to the worktree as EXPERIMENTS.md.
88
+ * Claude Code will read this file to understand what has been tried.
89
+ */
90
+ export function writeExperimentHistory(session, transitions, currentMetric) {
91
+ const content = buildExperimentHistory(session, transitions, currentMetric);
92
+ const historyPath = join(session.worktreePath, "EXPERIMENTS.md");
93
+ try {
94
+ writeFileSync(historyPath, content);
95
+ }
96
+ catch (err) {
97
+ console.error(` Warning: Could not write experiment history: ${err}`);
98
+ }
99
+ }
100
+ /**
101
+ * Read experiment history from the worktree.
102
+ * Returns empty string if file doesn't exist.
103
+ */
104
+ export function readExperimentHistory(session) {
105
+ const historyPath = join(session.worktreePath, "EXPERIMENTS.md");
106
+ try {
107
+ if (existsSync(historyPath)) {
108
+ return readFileSync(historyPath, "utf-8");
109
+ }
110
+ }
111
+ catch { }
112
+ return "";
113
+ }
114
+ // ============================================================================
115
+ // Git Helpers
116
+ // ============================================================================
117
+ function gitExec(args, cwd) {
118
+ const result = spawnSync("git", args, { cwd, encoding: "utf-8", stdio: "pipe" });
119
+ return { ok: result.status === 0, output: (result.stdout || "").trim() };
120
+ }
121
+ function getCurrentBranch(cwd) {
122
+ const result = gitExec(["branch", "--show-current"], cwd);
123
+ return result.output;
124
+ }
125
+ function hasUncommittedChanges(cwd) {
126
+ const diff = gitExec(["diff", "--quiet", "HEAD"], cwd);
127
+ const untracked = spawnSync("git", ["ls-files", "--others", "--exclude-standard"], {
128
+ cwd, encoding: "utf-8", stdio: "pipe",
129
+ });
130
+ return !diff.ok || (untracked.stdout || "").trim().length > 0;
131
+ }
132
+ function getGitDiff(cwd) {
133
+ const result = gitExec(["diff", "HEAD"], cwd);
134
+ return result.output;
135
+ }
136
+ // ============================================================================
137
+ // Scope Impact Emission
138
+ // ============================================================================
139
+ function emitScopeImpact(session, pattern, delta, summary) {
140
+ // Write scope:impact event to service-events.jsonl for the hub to pick up
141
+ const eventsPath = join(session.projectRoot, ".jfl", "service-events.jsonl");
142
+ const event = {
143
+ type: "scope:impact",
144
+ source: `agent:${session.agentName}`,
145
+ data: {
146
+ agent: session.agentName,
147
+ pattern,
148
+ metric: session.config.metric,
149
+ delta,
150
+ direction: session.config.direction,
151
+ session_id: session.id,
152
+ baseline: summary.baseline,
153
+ final: summary.finalMetric,
154
+ rounds: summary.rounds,
155
+ improved_rounds: summary.improvedRounds,
156
+ pr_url: summary.prUrl,
157
+ branch_url: summary.branchUrl,
158
+ produces: session.config.context_scope.produces,
159
+ consumes: session.config.context_scope.consumes,
160
+ },
161
+ ts: new Date().toISOString(),
162
+ };
163
+ try {
164
+ appendFileSync(eventsPath, JSON.stringify(event) + "\n");
165
+ }
166
+ catch {
167
+ // Non-fatal — hub may not be running
168
+ }
169
+ // Also try to POST to hub if running
170
+ try {
171
+ const tokenPath = join(session.projectRoot, ".jfl", "context-hub.token");
172
+ if (existsSync(tokenPath)) {
173
+ const token = readFileSync(tokenPath, "utf-8").trim();
174
+ const http = require("http");
175
+ const postData = JSON.stringify(event);
176
+ const req = http.request({
177
+ hostname: "localhost",
178
+ port: 4242,
179
+ path: "/api/events",
180
+ method: "POST",
181
+ headers: {
182
+ "Content-Type": "application/json",
183
+ "Authorization": `Bearer ${token}`,
184
+ "Content-Length": Buffer.byteLength(postData),
185
+ },
186
+ });
187
+ req.write(postData);
188
+ req.end();
189
+ }
190
+ }
191
+ catch {
192
+ // Non-fatal
193
+ }
194
+ }
195
+ // ============================================================================
196
+ // Session Management
197
+ // ============================================================================
198
+ export function startSession(config, projectRoot, baseBranch = "main") {
199
+ // Generate unique session ID
200
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
201
+ const hashPart = createHash("sha256")
202
+ .update(`${config.name}-${timestamp}-${Math.random()}`)
203
+ .digest("hex")
204
+ .slice(0, 8);
205
+ const sessionId = `${config.name}-${hashPart}-${Date.now()}`;
206
+ // Create session branch
207
+ const branch = `session/${config.name}-${hashPart}-${timestamp.slice(0, 10)}`;
208
+ // Create isolated worktree in /tmp — never touch the main working directory
209
+ const worktreePath = join("/tmp", `jfl-agent-${config.name}-${hashPart}`);
210
+ // Resolve target repo — agents can target a different service repo than the GTM root
211
+ const repoRoot = config.target_repo
212
+ ? join(projectRoot, config.target_repo)
213
+ : projectRoot;
214
+ // Fetch latest base branch
215
+ gitExec(["fetch", "origin", baseBranch], repoRoot);
216
+ // Create worktree with new branch from origin/baseBranch (in the target repo, not GTM)
217
+ let wt = gitExec(["worktree", "add", worktreePath, "-b", branch, `origin/${baseBranch}`], repoRoot);
218
+ if (!wt.ok) {
219
+ // Fallback: try local baseBranch
220
+ wt = gitExec(["worktree", "add", worktreePath, "-b", branch, baseBranch], repoRoot);
221
+ }
222
+ if (!wt.ok) {
223
+ throw new Error(`Failed to create worktree for ${branch}: ${wt.output}`);
224
+ }
225
+ // Create eval snapshot — eval scripts live in GTM (projectRoot), not the service worktree
226
+ // Copy eval files into the worktree so they're available during agent runs
227
+ const evalSnapshot = createEvalSnapshot(projectRoot, config.eval.script, config.eval.data);
228
+ freezeEvalSnapshot(evalSnapshot);
229
+ // Results persist in main repo (survives worktree cleanup)
230
+ const resultsDir = join(projectRoot, ".jfl", "sessions", sessionId);
231
+ mkdirSync(resultsDir, { recursive: true });
232
+ const resultsPath = join(resultsDir, "results.tsv");
233
+ // Write TSV header
234
+ writeFileSync(resultsPath, "round\ttask\tbaseline\tmetric\tdelta\tkept\tduration_ms\terror\ttimestamp\n");
235
+ // Run baseline eval
236
+ const session = {
237
+ id: sessionId,
238
+ agentName: config.name,
239
+ config,
240
+ projectRoot,
241
+ evalRoot: projectRoot,
242
+ worktreePath,
243
+ branch,
244
+ baseBranch,
245
+ evalSnapshot,
246
+ baselineMetric: 0,
247
+ startedAt: new Date().toISOString(),
248
+ resultsPath,
249
+ round: 0,
250
+ status: "active",
251
+ };
252
+ return session;
253
+ }
254
+ export async function runBaseline(session) {
255
+ // Eval scripts live in GTM (evalRoot), not the service worktree
256
+ const result = await runEvalSnapshot(session.evalSnapshot, session.evalRoot, session.config.time_budget_seconds * 1000);
257
+ if (!result.success) {
258
+ throw new Error(`Baseline eval failed: ${result.error}`);
259
+ }
260
+ session.baselineMetric = result.metric;
261
+ return result.metric;
262
+ }
263
+ export async function runRound(session, round, task, hypothesis, previousTransitions = []) {
264
+ const startTime = Date.now();
265
+ session.round = round;
266
+ // Capture state before changes
267
+ const stateBefore = {
268
+ composite_score: session.baselineMetric,
269
+ dimension_scores: {},
270
+ tests_passing: 0,
271
+ tests_total: 1,
272
+ trajectory_length: round,
273
+ recent_deltas: previousTransitions.slice(-5).map(t => t.reward),
274
+ agent: session.agentName,
275
+ };
276
+ const stateHash = createHash("sha256")
277
+ .update(JSON.stringify(stateBefore))
278
+ .digest("hex")
279
+ .slice(0, 12);
280
+ // Write experiment history BEFORE running Claude Code
281
+ // This is the Karpathy pattern: agent sees history + instructions
282
+ writeExperimentHistory(session, previousTransitions, session.baselineMetric);
283
+ // Run Claude Code with fixed time budget
284
+ await runClaudeCode(session, task);
285
+ // Check if any changes were made (in the worktree)
286
+ const hasChanges = hasUncommittedChanges(session.worktreePath);
287
+ if (!hasChanges) {
288
+ const noChangeResult = {
289
+ round,
290
+ task,
291
+ hypothesis,
292
+ metricBefore: session.baselineMetric,
293
+ metricAfter: session.baselineMetric,
294
+ delta: 0,
295
+ kept: false,
296
+ duration_ms: Date.now() - startTime,
297
+ error: "No changes made",
298
+ };
299
+ const noChangeTransition = {
300
+ agent: session.agentName,
301
+ session_id: session.id,
302
+ state_hash: stateHash,
303
+ state: stateBefore,
304
+ action_diff: "",
305
+ action: {
306
+ type: "experiment",
307
+ description: task,
308
+ files_affected: [],
309
+ scope: "small",
310
+ branch: session.branch,
311
+ },
312
+ hypothesis,
313
+ reward: 0,
314
+ timestamp: new Date().toISOString(),
315
+ };
316
+ logResult(session, noChangeResult);
317
+ return { result: noChangeResult, transition: noChangeTransition };
318
+ }
319
+ // Capture the diff before committing
320
+ const diff = getGitDiff(session.worktreePath);
321
+ // Get changed files
322
+ const changedFilesResult = spawnSync("git", ["diff", "--name-only", "HEAD"], {
323
+ cwd: session.worktreePath,
324
+ encoding: "utf-8",
325
+ stdio: "pipe",
326
+ });
327
+ const changedFiles = (changedFilesResult.stdout || "")
328
+ .trim()
329
+ .split("\n")
330
+ .filter(Boolean);
331
+ // Commit changes in worktree
332
+ gitExec(["add", "-A"], session.worktreePath);
333
+ gitExec(["commit", "-m", `agent(${session.agentName}): round ${round} - ${task.slice(0, 50)}`], session.worktreePath);
334
+ // Run frozen eval — scripts verify against evalRoot (GTM), not the service worktree
335
+ const evalResult = await runEvalSnapshot(session.evalSnapshot, session.evalRoot, session.config.time_budget_seconds * 1000);
336
+ const metricAfter = evalResult.success ? evalResult.metric : 0;
337
+ const delta = metricAfter - session.baselineMetric;
338
+ // Decide: keep or discard
339
+ // For maximize: keep if delta > 0
340
+ // For minimize: keep if delta < 0
341
+ const improved = session.config.direction === "maximize"
342
+ ? delta > 0
343
+ : delta < 0;
344
+ if (improved) {
345
+ // Keep: advance baseline
346
+ session.baselineMetric = metricAfter;
347
+ }
348
+ else {
349
+ // Discard: git reset --hard HEAD~1 (in worktree only)
350
+ gitExec(["reset", "--hard", "HEAD~1"], session.worktreePath);
351
+ }
352
+ const result = {
353
+ round,
354
+ task,
355
+ hypothesis,
356
+ metricBefore: session.baselineMetric,
357
+ metricAfter,
358
+ delta,
359
+ kept: improved,
360
+ duration_ms: Date.now() - startTime,
361
+ error: evalResult.success ? undefined : evalResult.error,
362
+ };
363
+ const action = {
364
+ type: "experiment",
365
+ description: task,
366
+ files_affected: changedFiles,
367
+ scope: changedFiles.length <= 2 ? "small" : changedFiles.length <= 5 ? "medium" : "large",
368
+ branch: session.branch,
369
+ };
370
+ const transition = {
371
+ agent: session.agentName,
372
+ session_id: session.id,
373
+ state_hash: stateHash,
374
+ state: stateBefore,
375
+ action_diff: diff,
376
+ action,
377
+ hypothesis,
378
+ reward: improved ? Math.abs(delta) : -Math.abs(delta), // Positive reward = improvement, regardless of direction
379
+ timestamp: new Date().toISOString(),
380
+ };
381
+ logResult(session, result);
382
+ return { result, transition };
383
+ }
384
+ async function runClaudeCode(session, task) {
385
+ const timeout = session.config.time_budget_seconds * 1000;
386
+ // Build enhanced task with experiment history reference
387
+ // This is the Karpathy pattern: agent sees program.md (EXPERIMENTS.md) with history
388
+ const scopeFiles = session.config.constraints?.scope_files || session.config.constraints.files_in_scope || [];
389
+ const scopeFilesStr = scopeFiles.slice(0, 5).join(", ");
390
+ const enhancedTask = `${task}
391
+
392
+ IMPORTANT: Read EXPERIMENTS.md first — it contains the history of past experiments for this agent.
393
+ - DO NOT repeat experiments that failed (rejected section)
394
+ - BUILD on experiments that worked (kept section)
395
+ - Focus changes on these files: ${scopeFilesStr}
396
+ - Make ONE small, focused change
397
+ - Do not add new files unless absolutely necessary`;
398
+ // Use claude CLI directly — relies on OAuth from macOS keychain
399
+ // Must run from a context with keychain access (terminal/tmux, NOT background daemon)
400
+ return new Promise((resolve) => {
401
+ console.log(" Spawning claude CLI...");
402
+ const child = spawn("claude", [
403
+ "--dangerously-skip-permissions",
404
+ "-p", enhancedTask,
405
+ "--output-format", "text",
406
+ ], {
407
+ cwd: session.worktreePath,
408
+ stdio: "inherit",
409
+ env: {
410
+ ...process.env,
411
+ CLAUDECODE: undefined,
412
+ CLAUDE_CODE: undefined,
413
+ },
414
+ });
415
+ const timeoutId = setTimeout(() => {
416
+ child.kill("SIGTERM");
417
+ setTimeout(() => {
418
+ if (!child.killed)
419
+ child.kill("SIGKILL");
420
+ }, 5000);
421
+ }, timeout);
422
+ child.on("error", (err) => {
423
+ console.error(` Claude CLI error: ${err.message}`);
424
+ clearTimeout(timeoutId);
425
+ resolve();
426
+ });
427
+ child.on("exit", (code, signal) => {
428
+ console.error(` Claude CLI exit: code=${code} signal=${signal}`);
429
+ clearTimeout(timeoutId);
430
+ resolve();
431
+ });
432
+ });
433
+ }
434
+ function logResult(session, result) {
435
+ const line = [
436
+ result.round,
437
+ result.task.replace(/\t/g, " ").slice(0, 100),
438
+ result.metricBefore.toFixed(6),
439
+ result.metricAfter.toFixed(6),
440
+ result.delta.toFixed(6),
441
+ result.kept ? "1" : "0",
442
+ result.duration_ms,
443
+ (result.error || "").replace(/\t/g, " ").slice(0, 100),
444
+ new Date().toISOString(),
445
+ ].join("\t");
446
+ appendFileSync(session.resultsPath, line + "\n");
447
+ // Remove EXPERIMENTS.md from git tracking (it's ephemeral, regenerated each round)
448
+ const experimentsPath = join(session.worktreePath, "EXPERIMENTS.md");
449
+ if (existsSync(experimentsPath)) {
450
+ gitExec(["reset", "HEAD", "EXPERIMENTS.md"], session.worktreePath);
451
+ // Don't delete — keep it for reference, just don't commit
452
+ }
453
+ }
454
+ export async function endSession(session, transitions) {
455
+ session.status = "completed";
456
+ // Calculate summary statistics
457
+ let improvedRounds = 0;
458
+ let bestDelta = 0;
459
+ let totalDelta = 0;
460
+ for (const t of transitions) {
461
+ if (t.reward > 0)
462
+ improvedRounds++;
463
+ if (t.reward > bestDelta)
464
+ bestDelta = t.reward;
465
+ totalDelta += t.reward;
466
+ }
467
+ const summary = {
468
+ session_id: session.id,
469
+ agentName: session.agentName,
470
+ rounds: transitions.length,
471
+ baseline: session.baselineMetric - totalDelta, // Reconstruct original baseline
472
+ finalMetric: session.baselineMetric,
473
+ totalDelta,
474
+ bestDelta,
475
+ improvedRounds,
476
+ transitions,
477
+ };
478
+ // Write transitions to training buffer WITH diffs (for code-policy training)
479
+ try {
480
+ const { TrainingBuffer } = await import("./training-buffer.js");
481
+ const tb = new TrainingBuffer(session.projectRoot);
482
+ for (const t of transitions) {
483
+ tb.append({
484
+ agent: t.agent,
485
+ state: t.state,
486
+ action: {
487
+ ...t.action,
488
+ // Include the actual code diff for code-policy training (AutoHarness pattern)
489
+ code_diff: t.action_diff?.slice(0, 10000) || "", // Cap at 10KB
490
+ },
491
+ reward: {
492
+ composite_delta: t.reward,
493
+ dimension_deltas: {},
494
+ tests_added: 0,
495
+ quality_score: t.reward > 0 ? 1 : 0,
496
+ improved: t.reward > 0,
497
+ },
498
+ metadata: {
499
+ branch: session.branch,
500
+ source: "autoresearch",
501
+ session_id: session.id,
502
+ round: t.state?.trajectory_length || 0,
503
+ hypothesis: t.hypothesis,
504
+ },
505
+ });
506
+ }
507
+ }
508
+ catch { }
509
+ // If we improved, push the branch (but do NOT create a PR or auto-merge)
510
+ // Following Karpathy's autoresearch pattern: branches grow overnight,
511
+ // humans (or their agents) review and merge in the morning
512
+ if (improvedRounds > 0) {
513
+ // Push the branch so it's available for review
514
+ const push = gitExec(["push", "-u", "origin", session.branch], session.worktreePath);
515
+ if (push.ok) {
516
+ summary.branchUrl = `https://github.com/402goose/${session.worktreePath.split('/').pop()}/tree/${session.branch}`;
517
+ }
518
+ // Emit scope:impact events for each produces pattern
519
+ // This triggers downstream agents that consume these patterns
520
+ for (const pattern of session.config.context_scope.produces) {
521
+ emitScopeImpact(session, pattern, totalDelta, summary);
522
+ }
523
+ }
524
+ // Clean up worktree — the branch persists on remote for review
525
+ gitExec(["worktree", "remove", session.worktreePath, "--force"], session.projectRoot);
526
+ gitExec(["worktree", "prune"], session.projectRoot);
527
+ return summary;
528
+ }
529
+ async function createPR(session, summary) {
530
+ // Push branch from worktree
531
+ const push = gitExec(["push", "-u", "origin", session.branch], session.worktreePath);
532
+ if (!push.ok) {
533
+ return undefined;
534
+ }
535
+ // Create PR
536
+ const title = `Agent(${session.agentName}): +${summary.totalDelta.toFixed(4)} ${session.config.metric}`;
537
+ const body = [
538
+ `## Scoped Agent Result`,
539
+ "",
540
+ `**Agent:** ${session.agentName}`,
541
+ `**Metric:** ${session.config.metric}`,
542
+ `**Baseline:** ${summary.baseline.toFixed(4)}`,
543
+ `**Final:** ${summary.finalMetric.toFixed(4)}`,
544
+ `**Delta:** +${summary.totalDelta.toFixed(4)}`,
545
+ "",
546
+ `### Rounds`,
547
+ `- Total: ${summary.rounds}`,
548
+ `- Improved: ${summary.improvedRounds}`,
549
+ `- Best delta: +${summary.bestDelta.toFixed(4)}`,
550
+ "",
551
+ "---",
552
+ "*Generated by JFL scoped agent*",
553
+ ].join("\n");
554
+ const prResult = spawnSync("gh", [
555
+ "pr", "create",
556
+ "--title", title,
557
+ "--body", body,
558
+ "--base", session.baseBranch,
559
+ "--head", session.branch,
560
+ "--label", "agent-generated",
561
+ ], {
562
+ cwd: session.worktreePath,
563
+ encoding: "utf-8",
564
+ stdio: "pipe",
565
+ });
566
+ if (prResult.status === 0) {
567
+ return prResult.stdout.trim();
568
+ }
569
+ // Try without label
570
+ const prRetry = spawnSync("gh", [
571
+ "pr", "create",
572
+ "--title", title,
573
+ "--body", body,
574
+ "--base", session.baseBranch,
575
+ "--head", session.branch,
576
+ ], {
577
+ cwd: session.worktreePath,
578
+ encoding: "utf-8",
579
+ stdio: "pipe",
580
+ });
581
+ return prRetry.status === 0 ? prRetry.stdout.trim() : undefined;
582
+ }
583
+ // ============================================================================
584
+ // Session Recovery
585
+ // ============================================================================
586
+ export function loadSessionState(projectRoot, sessionId) {
587
+ const sessionDir = join(projectRoot, ".jfl", "sessions", sessionId);
588
+ const statePath = join(sessionDir, "state.json");
589
+ if (!existsSync(statePath))
590
+ return null;
591
+ try {
592
+ const state = JSON.parse(readFileSync(statePath, "utf-8"));
593
+ return state;
594
+ }
595
+ catch {
596
+ return null;
597
+ }
598
+ }
599
+ export function saveSessionState(session) {
600
+ const sessionDir = join(session.projectRoot, ".jfl", "sessions", session.id);
601
+ if (!existsSync(sessionDir)) {
602
+ mkdirSync(sessionDir, { recursive: true });
603
+ }
604
+ const statePath = join(sessionDir, "state.json");
605
+ writeFileSync(statePath, JSON.stringify(session, null, 2));
606
+ }
607
+ export function listActiveSessions(projectRoot) {
608
+ const sessionsDir = join(projectRoot, ".jfl", "sessions");
609
+ if (!existsSync(sessionsDir))
610
+ return [];
611
+ const { readdirSync } = require("fs");
612
+ const sessions = [];
613
+ for (const entry of readdirSync(sessionsDir)) {
614
+ const statePath = join(sessionsDir, entry, "state.json");
615
+ if (existsSync(statePath)) {
616
+ try {
617
+ const state = JSON.parse(readFileSync(statePath, "utf-8"));
618
+ if (state.status === "active") {
619
+ sessions.push(entry);
620
+ }
621
+ }
622
+ catch { }
623
+ }
624
+ }
625
+ return sessions;
626
+ }
627
+ //# sourceMappingURL=agent-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/lib/agent-session.ts"],"names":[],"mappings":"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"}