@rulemetric/cli 0.2.1 → 0.2.2

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 (780) hide show
  1. package/dist/base-command.js +13 -52
  2. package/dist/base-command.js.map +7 -1
  3. package/dist/chunk-2AM54TUK.js +59 -0
  4. package/dist/chunk-2AM54TUK.js.map +7 -0
  5. package/dist/chunk-3TIMQ3O6.js +96 -0
  6. package/dist/chunk-3TIMQ3O6.js.map +7 -0
  7. package/dist/chunk-4BHDHHKL.js +48 -0
  8. package/dist/chunk-4BHDHHKL.js.map +7 -0
  9. package/dist/chunk-4D537GXE.js +99 -0
  10. package/dist/chunk-4D537GXE.js.map +7 -0
  11. package/dist/chunk-4SCZK7AL.js +129 -0
  12. package/dist/chunk-4SCZK7AL.js.map +7 -0
  13. package/dist/chunk-4WFE4PFP.js +61 -0
  14. package/dist/chunk-4WFE4PFP.js.map +7 -0
  15. package/dist/chunk-52WIYRZH.js +73 -0
  16. package/dist/chunk-52WIYRZH.js.map +7 -0
  17. package/dist/chunk-7FAA3YNB.js +1549 -0
  18. package/dist/chunk-7FAA3YNB.js.map +7 -0
  19. package/dist/chunk-7NYKWN7U.js +12 -0
  20. package/dist/chunk-7NYKWN7U.js.map +7 -0
  21. package/dist/chunk-AULP2OWH.js +99 -0
  22. package/dist/chunk-AULP2OWH.js.map +7 -0
  23. package/dist/chunk-B5KNTGMJ.js +1788 -0
  24. package/dist/chunk-B5KNTGMJ.js.map +7 -0
  25. package/dist/chunk-BD7CY42U.js +23 -0
  26. package/dist/chunk-BD7CY42U.js.map +7 -0
  27. package/dist/chunk-BO76WKJR.js +42 -0
  28. package/dist/chunk-BO76WKJR.js.map +7 -0
  29. package/dist/chunk-BRD5RUGM.js +53 -0
  30. package/dist/chunk-BRD5RUGM.js.map +7 -0
  31. package/dist/chunk-BT6Z6545.js +43 -0
  32. package/dist/chunk-BT6Z6545.js.map +7 -0
  33. package/dist/chunk-BZDKEQKU.js +39 -0
  34. package/dist/chunk-BZDKEQKU.js.map +7 -0
  35. package/dist/chunk-CROYS75W.js +161 -0
  36. package/dist/chunk-CROYS75W.js.map +7 -0
  37. package/dist/chunk-DGHWRQXL.js +17 -0
  38. package/dist/chunk-DGHWRQXL.js.map +7 -0
  39. package/dist/chunk-DQ3KELXD.js +74 -0
  40. package/dist/chunk-DQ3KELXD.js.map +7 -0
  41. package/dist/chunk-DTFXCHHI.js +108 -0
  42. package/dist/chunk-DTFXCHHI.js.map +7 -0
  43. package/dist/chunk-DU73QUS3.js +75 -0
  44. package/dist/chunk-DU73QUS3.js.map +7 -0
  45. package/dist/chunk-EHZJ6OXD.js +307 -0
  46. package/dist/chunk-EHZJ6OXD.js.map +7 -0
  47. package/dist/chunk-EJOI2ZGU.js +109 -0
  48. package/dist/chunk-EJOI2ZGU.js.map +7 -0
  49. package/dist/chunk-EKJ2CABV.js +76 -0
  50. package/dist/chunk-EKJ2CABV.js.map +7 -0
  51. package/dist/chunk-EKP32DLN.js +16 -0
  52. package/dist/chunk-EKP32DLN.js.map +7 -0
  53. package/dist/chunk-EOOP6WTC.js +148 -0
  54. package/dist/chunk-EOOP6WTC.js.map +7 -0
  55. package/dist/chunk-ERPMDAO3.js +20 -0
  56. package/dist/chunk-ERPMDAO3.js.map +7 -0
  57. package/dist/chunk-FTJRMUID.js +96 -0
  58. package/dist/chunk-FTJRMUID.js.map +7 -0
  59. package/dist/chunk-FZKLLNDS.js +228 -0
  60. package/dist/chunk-FZKLLNDS.js.map +7 -0
  61. package/dist/chunk-GQCISMAH.js +157 -0
  62. package/dist/chunk-GQCISMAH.js.map +7 -0
  63. package/dist/chunk-IGXX624H.js +55 -0
  64. package/dist/chunk-IGXX624H.js.map +7 -0
  65. package/dist/chunk-IJGF2ETG.js +68 -0
  66. package/dist/chunk-IJGF2ETG.js.map +7 -0
  67. package/dist/chunk-IWYCRLEK.js +220 -0
  68. package/dist/chunk-IWYCRLEK.js.map +7 -0
  69. package/dist/chunk-J7N3DLH6.js +117 -0
  70. package/dist/chunk-J7N3DLH6.js.map +7 -0
  71. package/dist/chunk-JX5UI6RW.js +99 -0
  72. package/dist/chunk-JX5UI6RW.js.map +7 -0
  73. package/dist/chunk-K3BFZ7KG.js +154 -0
  74. package/dist/chunk-K3BFZ7KG.js.map +7 -0
  75. package/dist/chunk-KHJUQFIK.js +51 -0
  76. package/dist/chunk-KHJUQFIK.js.map +7 -0
  77. package/dist/chunk-KRBQLMOP.js +41 -0
  78. package/dist/chunk-KRBQLMOP.js.map +7 -0
  79. package/dist/chunk-KZRFUXGF.js +145 -0
  80. package/dist/chunk-KZRFUXGF.js.map +7 -0
  81. package/dist/chunk-L674RNKQ.js +492 -0
  82. package/dist/chunk-L674RNKQ.js.map +7 -0
  83. package/dist/chunk-N52AHNBH.js +47 -0
  84. package/dist/chunk-N52AHNBH.js.map +7 -0
  85. package/dist/chunk-NIDLJO6F.js +228 -0
  86. package/dist/chunk-NIDLJO6F.js.map +7 -0
  87. package/dist/chunk-NSBPE2FW.js +17 -0
  88. package/dist/chunk-NSBPE2FW.js.map +7 -0
  89. package/dist/chunk-OGVORIFM.js +70 -0
  90. package/dist/chunk-OGVORIFM.js.map +7 -0
  91. package/dist/chunk-OQSQC7VB.js +77 -0
  92. package/dist/chunk-OQSQC7VB.js.map +7 -0
  93. package/dist/chunk-PHLMIZKM.js +153 -0
  94. package/dist/chunk-PHLMIZKM.js.map +7 -0
  95. package/dist/chunk-PQU7GZ7A.js +92 -0
  96. package/dist/chunk-PQU7GZ7A.js.map +7 -0
  97. package/dist/chunk-PXVQLD7S.js +196 -0
  98. package/dist/chunk-PXVQLD7S.js.map +7 -0
  99. package/dist/chunk-QD6X4L4L.js +79 -0
  100. package/dist/chunk-QD6X4L4L.js.map +7 -0
  101. package/dist/chunk-QJQS6TUN.js +44 -0
  102. package/dist/chunk-QJQS6TUN.js.map +7 -0
  103. package/dist/chunk-QJXAULRC.js +191 -0
  104. package/dist/chunk-QJXAULRC.js.map +7 -0
  105. package/dist/chunk-QN34TGD3.js +83 -0
  106. package/dist/chunk-QN34TGD3.js.map +7 -0
  107. package/dist/chunk-R5MFHGHR.js +122 -0
  108. package/dist/chunk-R5MFHGHR.js.map +7 -0
  109. package/dist/chunk-RH7NHVSK.js +16 -0
  110. package/dist/chunk-RH7NHVSK.js.map +7 -0
  111. package/dist/chunk-RJ7BHDLM.js +121 -0
  112. package/dist/chunk-RJ7BHDLM.js.map +7 -0
  113. package/dist/chunk-RQ2TMLKG.js +142 -0
  114. package/dist/chunk-RQ2TMLKG.js.map +7 -0
  115. package/dist/chunk-S56LOTGQ.js +63 -0
  116. package/dist/chunk-S56LOTGQ.js.map +7 -0
  117. package/dist/chunk-UF73WX2J.js +49 -0
  118. package/dist/chunk-UF73WX2J.js.map +7 -0
  119. package/dist/chunk-W53GKIZQ.js +50 -0
  120. package/dist/chunk-W53GKIZQ.js.map +7 -0
  121. package/dist/chunk-WA4MWYRW.js +254 -0
  122. package/dist/chunk-WA4MWYRW.js.map +7 -0
  123. package/dist/chunk-WFULKPEQ.js +269 -0
  124. package/dist/chunk-WFULKPEQ.js.map +7 -0
  125. package/dist/chunk-XC6M4CSW.js +44 -0
  126. package/dist/chunk-XC6M4CSW.js.map +7 -0
  127. package/dist/chunk-XPUEGHXN.js +243 -0
  128. package/dist/chunk-XPUEGHXN.js.map +7 -0
  129. package/dist/chunk-XZXS2W24.js +148 -0
  130. package/dist/chunk-XZXS2W24.js.map +7 -0
  131. package/dist/chunk-YBNW7ARH.js +167 -0
  132. package/dist/chunk-YBNW7ARH.js.map +7 -0
  133. package/dist/chunk-YNIH3KMU.js +121 -0
  134. package/dist/chunk-YNIH3KMU.js.map +7 -0
  135. package/dist/commands/antigravity/backfill.js +135 -0
  136. package/dist/commands/antigravity/backfill.js.map +7 -0
  137. package/dist/commands/auth/create-key.js +48 -33
  138. package/dist/commands/auth/create-key.js.map +7 -1
  139. package/dist/commands/auth/login.js +58 -46
  140. package/dist/commands/auth/login.js.map +7 -1
  141. package/dist/commands/auth/logout.js +28 -13
  142. package/dist/commands/auth/logout.js.map +7 -1
  143. package/dist/commands/auth/revoke-key.js +32 -18
  144. package/dist/commands/auth/revoke-key.js.map +7 -1
  145. package/dist/commands/auth/status.js +40 -22
  146. package/dist/commands/auth/status.js.map +7 -1
  147. package/dist/commands/catalog/index.js +50 -34
  148. package/dist/commands/catalog/index.js.map +7 -1
  149. package/dist/commands/catalog/recommend.js +41 -26
  150. package/dist/commands/catalog/recommend.js.map +7 -1
  151. package/dist/commands/convert.js +72 -54
  152. package/dist/commands/convert.js.map +7 -1
  153. package/dist/commands/converters.js +52 -38
  154. package/dist/commands/converters.js.map +7 -1
  155. package/dist/commands/crons/list.js +50 -24
  156. package/dist/commands/crons/list.js.map +7 -1
  157. package/dist/commands/crons/run.js +72 -47
  158. package/dist/commands/crons/run.js.map +7 -1
  159. package/dist/commands/dashboard.js +45 -24
  160. package/dist/commands/dashboard.js.map +7 -1
  161. package/dist/commands/eval-targets/create.js +51 -39
  162. package/dist/commands/eval-targets/create.js.map +7 -1
  163. package/dist/commands/eval-targets/list.js +52 -35
  164. package/dist/commands/eval-targets/list.js.map +7 -1
  165. package/dist/commands/evals/agent.js +292 -0
  166. package/dist/commands/evals/agent.js.map +7 -0
  167. package/dist/commands/evals/benchmark.js +70 -51
  168. package/dist/commands/evals/benchmark.js.map +7 -1
  169. package/dist/commands/evals/compare.js +90 -78
  170. package/dist/commands/evals/compare.js.map +7 -1
  171. package/dist/commands/evals/create.js +64 -50
  172. package/dist/commands/evals/create.js.map +7 -1
  173. package/dist/commands/evals/optimize-description.js +225 -222
  174. package/dist/commands/evals/optimize-description.js.map +7 -1
  175. package/dist/commands/evals/optimize.js +206 -196
  176. package/dist/commands/evals/optimize.js.map +7 -1
  177. package/dist/commands/evals/run.js +178 -164
  178. package/dist/commands/evals/run.js.map +7 -1
  179. package/dist/commands/gateway/ensure.js +33 -19
  180. package/dist/commands/gateway/ensure.js.map +7 -1
  181. package/dist/commands/hooks/install.js +335 -275
  182. package/dist/commands/hooks/install.js.map +7 -1
  183. package/dist/commands/hooks/run.js +72 -53
  184. package/dist/commands/hooks/run.js.map +7 -1
  185. package/dist/commands/hooks/uninstall.js +117 -94
  186. package/dist/commands/hooks/uninstall.js.map +7 -1
  187. package/dist/commands/import.js +63 -53
  188. package/dist/commands/import.js.map +7 -1
  189. package/dist/commands/instructions/create.js +71 -58
  190. package/dist/commands/instructions/create.js.map +7 -1
  191. package/dist/commands/instructions/delete.js +53 -36
  192. package/dist/commands/instructions/delete.js.map +7 -1
  193. package/dist/commands/instructions/fork.js +33 -19
  194. package/dist/commands/instructions/fork.js.map +7 -1
  195. package/dist/commands/instructions/get.js +66 -49
  196. package/dist/commands/instructions/get.js.map +7 -1
  197. package/dist/commands/instructions/list.js +63 -46
  198. package/dist/commands/instructions/list.js.map +7 -1
  199. package/dist/commands/instructions/promote.js +41 -27
  200. package/dist/commands/instructions/promote.js.map +7 -1
  201. package/dist/commands/instructions/pull.js +37 -21
  202. package/dist/commands/instructions/pull.js.map +7 -1
  203. package/dist/commands/instructions/upstream.js +36 -21
  204. package/dist/commands/instructions/upstream.js.map +7 -1
  205. package/dist/commands/instructions/versions.js +51 -33
  206. package/dist/commands/instructions/versions.js.map +7 -1
  207. package/dist/commands/launcher.js +39 -0
  208. package/dist/commands/launcher.js.map +7 -0
  209. package/dist/commands/org/current.js +74 -68
  210. package/dist/commands/org/current.js.map +7 -1
  211. package/dist/commands/org/list.js +50 -36
  212. package/dist/commands/org/list.js.map +7 -1
  213. package/dist/commands/org/switch.js +69 -51
  214. package/dist/commands/org/switch.js.map +7 -1
  215. package/dist/commands/packs/add-instruction.js +36 -22
  216. package/dist/commands/packs/add-instruction.js.map +7 -1
  217. package/dist/commands/packs/apply.js +38 -24
  218. package/dist/commands/packs/apply.js.map +7 -1
  219. package/dist/commands/packs/create.js +47 -33
  220. package/dist/commands/packs/create.js.map +7 -1
  221. package/dist/commands/packs/fork.js +33 -19
  222. package/dist/commands/packs/fork.js.map +7 -1
  223. package/dist/commands/packs/get.js +54 -35
  224. package/dist/commands/packs/get.js.map +7 -1
  225. package/dist/commands/packs/list.js +64 -47
  226. package/dist/commands/packs/list.js.map +7 -1
  227. package/dist/commands/packs/remove-instruction.js +34 -20
  228. package/dist/commands/packs/remove-instruction.js.map +7 -1
  229. package/dist/commands/proxy/env.js +126 -116
  230. package/dist/commands/proxy/env.js.map +7 -1
  231. package/dist/commands/proxy/logs.js +83 -74
  232. package/dist/commands/proxy/logs.js.map +7 -1
  233. package/dist/commands/proxy/restart.js +34 -36
  234. package/dist/commands/proxy/restart.js.map +7 -1
  235. package/dist/commands/proxy/setup.js +432 -375
  236. package/dist/commands/proxy/setup.js.map +7 -1
  237. package/dist/commands/proxy/start.js +289 -289
  238. package/dist/commands/proxy/start.js.map +7 -1
  239. package/dist/commands/proxy/status.js +74 -64
  240. package/dist/commands/proxy/status.js.map +7 -1
  241. package/dist/commands/proxy/stop.js +81 -75
  242. package/dist/commands/proxy/stop.js.map +7 -1
  243. package/dist/commands/research/backfill.js +58 -0
  244. package/dist/commands/research/backfill.js.map +7 -0
  245. package/dist/commands/research/tail-transcript.js +69 -0
  246. package/dist/commands/research/tail-transcript.js.map +7 -0
  247. package/dist/commands/service/install.js +639 -405
  248. package/dist/commands/service/install.js.map +7 -1
  249. package/dist/commands/service/status.js +178 -111
  250. package/dist/commands/service/status.js.map +7 -1
  251. package/dist/commands/service/uninstall.js +85 -110
  252. package/dist/commands/service/uninstall.js.map +7 -1
  253. package/dist/commands/sessions/analyze.js +46 -25
  254. package/dist/commands/sessions/analyze.js.map +7 -1
  255. package/dist/commands/sessions/end.js +81 -79
  256. package/dist/commands/sessions/end.js.map +7 -1
  257. package/dist/commands/sessions/import.js +44 -27
  258. package/dist/commands/sessions/import.js.map +7 -1
  259. package/dist/commands/sessions/list.js +46 -33
  260. package/dist/commands/sessions/list.js.map +7 -1
  261. package/dist/commands/sessions/start.js +88 -87
  262. package/dist/commands/sessions/start.js.map +7 -1
  263. package/dist/commands/signals/report.js +42 -34
  264. package/dist/commands/signals/report.js.map +7 -1
  265. package/dist/commands/skills/export-approved.js +44 -30
  266. package/dist/commands/skills/export-approved.js.map +7 -1
  267. package/dist/commands/skills/install.js +99 -84
  268. package/dist/commands/skills/install.js.map +7 -1
  269. package/dist/commands/skills/list.js +59 -42
  270. package/dist/commands/skills/list.js.map +7 -1
  271. package/dist/commands/skills/publish.js +95 -78
  272. package/dist/commands/skills/publish.js.map +7 -1
  273. package/dist/commands/skills/search.js +68 -53
  274. package/dist/commands/skills/search.js.map +7 -1
  275. package/dist/commands/skills/update.js +52 -39
  276. package/dist/commands/skills/update.js.map +7 -1
  277. package/dist/commands/suggestions/accept.js +82 -59
  278. package/dist/commands/suggestions/accept.js.map +7 -1
  279. package/dist/commands/suggestions/dismiss.js +44 -26
  280. package/dist/commands/suggestions/dismiss.js.map +7 -1
  281. package/dist/commands/suggestions/list.js +59 -39
  282. package/dist/commands/suggestions/list.js.map +7 -1
  283. package/dist/commands/suggestions/refresh.js +26 -11
  284. package/dist/commands/suggestions/refresh.js.map +7 -1
  285. package/dist/cursor-BGQJ4CWI.js +134 -0
  286. package/dist/cursor-BGQJ4CWI.js.map +7 -0
  287. package/dist/dashboard/Dashboard.js +229 -126
  288. package/dist/dashboard/Dashboard.js.map +7 -1
  289. package/dist/dashboard/data.js +13 -137
  290. package/dist/dashboard/data.js.map +7 -1
  291. package/dist/dashboard/launcher/ActiveJobsList.js +10 -0
  292. package/dist/dashboard/launcher/ActiveJobsList.js.map +7 -0
  293. package/dist/dashboard/launcher/LauncherOverlay.js +14 -0
  294. package/dist/dashboard/launcher/LauncherOverlay.js.map +7 -0
  295. package/dist/dashboard/launcher/NewLaunchForm.js +10 -0
  296. package/dist/dashboard/launcher/NewLaunchForm.js.map +7 -0
  297. package/dist/dashboard/launcher/api.js +14 -0
  298. package/dist/dashboard/launcher/api.js.map +7 -0
  299. package/dist/dashboard/launcher/tool-labels.js +10 -0
  300. package/dist/dashboard/launcher/tool-labels.js.map +7 -0
  301. package/dist/dashboard/launcher/types.js +1 -0
  302. package/dist/dashboard/launcher/types.js.map +7 -0
  303. package/dist/dashboard/launcher/useLaunchJobs.js +9 -0
  304. package/dist/dashboard/launcher/useLaunchJobs.js.map +7 -0
  305. package/dist/dashboard/panels/friction.js +10 -22
  306. package/dist/dashboard/panels/friction.js.map +7 -1
  307. package/dist/dashboard/panels/insights.js +10 -109
  308. package/dist/dashboard/panels/insights.js.map +7 -1
  309. package/dist/dashboard/panels/instructions.js +10 -17
  310. package/dist/dashboard/panels/instructions.js.map +7 -1
  311. package/dist/dashboard/panels/outcomes.js +9 -28
  312. package/dist/dashboard/panels/outcomes.js.map +7 -1
  313. package/dist/dashboard/panels/overview.js +10 -20
  314. package/dist/dashboard/panels/overview.js.map +7 -1
  315. package/dist/dashboard/panels/shared.js +18 -61
  316. package/dist/dashboard/panels/shared.js.map +7 -1
  317. package/dist/dashboard/types.js +23 -26
  318. package/dist/dashboard/types.js.map +7 -1
  319. package/dist/dist-CSUYFYKI.js +52 -0
  320. package/dist/dist-CSUYFYKI.js.map +7 -0
  321. package/dist/index.js +8 -2
  322. package/dist/index.js.map +7 -1
  323. package/dist/lib/active-org-refresh.js +15 -108
  324. package/dist/lib/active-org-refresh.js.map +7 -1
  325. package/dist/lib/active-org.js +15 -95
  326. package/dist/lib/active-org.js.map +7 -1
  327. package/dist/lib/agent-loop.js +44 -0
  328. package/dist/lib/agent-loop.js.map +7 -0
  329. package/dist/lib/antigravity-transcript.js +22 -0
  330. package/dist/lib/antigravity-transcript.js.map +7 -0
  331. package/dist/lib/api-client.js +21 -92
  332. package/dist/lib/api-client.js.map +7 -1
  333. package/dist/lib/auth.js +26 -137
  334. package/dist/lib/auth.js.map +7 -1
  335. package/dist/lib/detect-languages.js +8 -113
  336. package/dist/lib/detect-languages.js.map +7 -1
  337. package/dist/lib/detect-tmux.js +9 -0
  338. package/dist/lib/detect-tmux.js.map +7 -0
  339. package/dist/lib/eval-analyzer.js +9 -89
  340. package/dist/lib/eval-analyzer.js.map +7 -1
  341. package/dist/lib/eval-benchmark.js +12 -92
  342. package/dist/lib/eval-benchmark.js.map +7 -1
  343. package/dist/lib/eval-conversation-handler.js +13 -200
  344. package/dist/lib/eval-conversation-handler.js.map +7 -1
  345. package/dist/lib/eval-executor.js +8 -83
  346. package/dist/lib/eval-executor.js.map +7 -1
  347. package/dist/lib/eval-grader.js +9 -123
  348. package/dist/lib/eval-grader.js.map +7 -1
  349. package/dist/lib/eval-meta-judge.js +9 -116
  350. package/dist/lib/eval-meta-judge.js.map +7 -1
  351. package/dist/lib/eval-trigger-tester.js +11 -96
  352. package/dist/lib/eval-trigger-tester.js.map +7 -1
  353. package/dist/lib/eval-worktree.js +8 -87
  354. package/dist/lib/eval-worktree.js.map +7 -1
  355. package/dist/lib/gateway-entry.js +20 -18
  356. package/dist/lib/gateway-entry.js.map +7 -1
  357. package/dist/lib/gateway-lifecycle.js +22 -97
  358. package/dist/lib/gateway-lifecycle.js.map +7 -1
  359. package/dist/lib/gateway.js +12 -216
  360. package/dist/lib/gateway.js.map +7 -1
  361. package/dist/lib/handlers/cron-close-stale-sessions.js +18 -7
  362. package/dist/lib/handlers/cron-close-stale-sessions.js.map +7 -1
  363. package/dist/lib/handlers/cron-data-integrity-audit.js +21 -15
  364. package/dist/lib/handlers/cron-data-integrity-audit.js.map +7 -1
  365. package/dist/lib/handlers/cron-refresh-skills.js +7 -90
  366. package/dist/lib/handlers/cron-refresh-skills.js.map +7 -1
  367. package/dist/lib/handlers/cron-suggest-instructions.js +14 -158
  368. package/dist/lib/handlers/cron-suggest-instructions.js.map +7 -1
  369. package/dist/lib/handlers/process-announcement.js +11 -0
  370. package/dist/lib/handlers/process-announcement.js.map +7 -0
  371. package/dist/lib/handlers/process-changelog.js +11 -0
  372. package/dist/lib/handlers/process-changelog.js.map +7 -0
  373. package/dist/lib/handlers/process-conversation.js +14 -35
  374. package/dist/lib/handlers/process-conversation.js.map +7 -1
  375. package/dist/lib/handlers/process-eval.js +15 -207
  376. package/dist/lib/handlers/process-eval.js.map +7 -1
  377. package/dist/lib/handlers/process-insights.js +14 -300
  378. package/dist/lib/handlers/process-insights.js.map +7 -1
  379. package/dist/lib/handlers/process-launch.js +16 -41
  380. package/dist/lib/handlers/process-launch.js.map +7 -1
  381. package/dist/lib/handlers/process-run-cleanup.js +13 -0
  382. package/dist/lib/handlers/process-run-cleanup.js.map +7 -0
  383. package/dist/lib/handlers/process-send-message.js +10 -0
  384. package/dist/lib/handlers/process-send-message.js.map +7 -0
  385. package/dist/lib/handlers/process-session-goal.js +11 -74
  386. package/dist/lib/handlers/process-session-goal.js.map +7 -1
  387. package/dist/lib/hooks-config.js +52 -544
  388. package/dist/lib/hooks-config.js.map +7 -1
  389. package/dist/lib/insights-prompts.js +12 -145
  390. package/dist/lib/insights-prompts.js.map +7 -1
  391. package/dist/lib/job-helpers.js +1 -0
  392. package/dist/lib/job-helpers.js.map +7 -0
  393. package/dist/lib/llm-client.js +16 -274
  394. package/dist/lib/llm-client.js.map +7 -1
  395. package/dist/lib/manual-tasks.js +22 -0
  396. package/dist/lib/manual-tasks.js.map +7 -0
  397. package/dist/lib/output.js +12 -36
  398. package/dist/lib/output.js.map +7 -1
  399. package/dist/lib/permanent-job-error.js +10 -23
  400. package/dist/lib/permanent-job-error.js.map +7 -1
  401. package/dist/lib/provider-aggregator.js +57 -55
  402. package/dist/lib/provider-aggregator.js.map +7 -1
  403. package/dist/lib/research-client.js +12 -0
  404. package/dist/lib/research-client.js.map +7 -0
  405. package/dist/lib/skills-loader.js +8 -51
  406. package/dist/lib/skills-loader.js.map +7 -1
  407. package/dist/lib/statusline-shim.js +16 -0
  408. package/dist/lib/statusline-shim.js.map +7 -0
  409. package/dist/lib/terminal-target-heartbeat.js +15 -0
  410. package/dist/lib/terminal-target-heartbeat.js.map +7 -0
  411. package/dist/lib/tmux.js +16 -0
  412. package/dist/lib/tmux.js.map +7 -0
  413. package/dist/lib/transcript-rate-limit-watcher.js +22 -0
  414. package/dist/lib/transcript-rate-limit-watcher.js.map +7 -0
  415. package/dist/lib/types.js +8 -7
  416. package/dist/lib/types.js.map +7 -1
  417. package/dist/lib/version-check.js +10 -106
  418. package/dist/lib/version-check.js.map +7 -1
  419. package/dist/lib/which.js +8 -0
  420. package/dist/lib/which.js.map +7 -0
  421. package/dist/lib/worktree.js +17 -0
  422. package/dist/lib/worktree.js.map +7 -0
  423. package/dist/opencode-IQ7X5YMJ.js +190 -0
  424. package/dist/opencode-IQ7X5YMJ.js.map +7 -0
  425. package/oclif.manifest.json +299 -66
  426. package/package.json +27 -11
  427. package/dist/base-command.d.ts +0 -12
  428. package/dist/base-command.d.ts.map +0 -1
  429. package/dist/commands/auth/create-key.d.ts +0 -11
  430. package/dist/commands/auth/create-key.d.ts.map +0 -1
  431. package/dist/commands/auth/login.d.ts +0 -11
  432. package/dist/commands/auth/login.d.ts.map +0 -1
  433. package/dist/commands/auth/logout.d.ts +0 -7
  434. package/dist/commands/auth/logout.d.ts.map +0 -1
  435. package/dist/commands/auth/revoke-key.d.ts +0 -10
  436. package/dist/commands/auth/revoke-key.d.ts.map +0 -1
  437. package/dist/commands/auth/status.d.ts +0 -7
  438. package/dist/commands/auth/status.d.ts.map +0 -1
  439. package/dist/commands/catalog/index.d.ts +0 -11
  440. package/dist/commands/catalog/index.d.ts.map +0 -1
  441. package/dist/commands/catalog/recommend.d.ts +0 -9
  442. package/dist/commands/catalog/recommend.d.ts.map +0 -1
  443. package/dist/commands/convert.d.ts +0 -15
  444. package/dist/commands/convert.d.ts.map +0 -1
  445. package/dist/commands/converters.d.ts +0 -12
  446. package/dist/commands/converters.d.ts.map +0 -1
  447. package/dist/commands/crons/list.d.ts +0 -7
  448. package/dist/commands/crons/list.d.ts.map +0 -1
  449. package/dist/commands/crons/run.d.ts +0 -13
  450. package/dist/commands/crons/run.d.ts.map +0 -1
  451. package/dist/commands/dashboard.d.ts +0 -10
  452. package/dist/commands/dashboard.d.ts.map +0 -1
  453. package/dist/commands/eval-targets/create.d.ts +0 -14
  454. package/dist/commands/eval-targets/create.d.ts.map +0 -1
  455. package/dist/commands/eval-targets/list.d.ts +0 -10
  456. package/dist/commands/eval-targets/list.d.ts.map +0 -1
  457. package/dist/commands/evals/benchmark.d.ts +0 -13
  458. package/dist/commands/evals/benchmark.d.ts.map +0 -1
  459. package/dist/commands/evals/compare.d.ts +0 -15
  460. package/dist/commands/evals/compare.d.ts.map +0 -1
  461. package/dist/commands/evals/create.d.ts +0 -17
  462. package/dist/commands/evals/create.d.ts.map +0 -1
  463. package/dist/commands/evals/listen.d.ts +0 -37
  464. package/dist/commands/evals/listen.d.ts.map +0 -1
  465. package/dist/commands/evals/listen.js +0 -188
  466. package/dist/commands/evals/listen.js.map +0 -1
  467. package/dist/commands/evals/listen.test.d.ts +0 -2
  468. package/dist/commands/evals/listen.test.d.ts.map +0 -1
  469. package/dist/commands/evals/listen.test.js +0 -48
  470. package/dist/commands/evals/listen.test.js.map +0 -1
  471. package/dist/commands/evals/optimize-description.d.ts +0 -22
  472. package/dist/commands/evals/optimize-description.d.ts.map +0 -1
  473. package/dist/commands/evals/optimize.d.ts +0 -22
  474. package/dist/commands/evals/optimize.d.ts.map +0 -1
  475. package/dist/commands/evals/run.d.ts +0 -21
  476. package/dist/commands/evals/run.d.ts.map +0 -1
  477. package/dist/commands/gateway/ensure.d.ts +0 -7
  478. package/dist/commands/gateway/ensure.d.ts.map +0 -1
  479. package/dist/commands/hooks/install.d.ts +0 -16
  480. package/dist/commands/hooks/install.d.ts.map +0 -1
  481. package/dist/commands/hooks/run.d.ts +0 -11
  482. package/dist/commands/hooks/run.d.ts.map +0 -1
  483. package/dist/commands/hooks/uninstall.d.ts +0 -7
  484. package/dist/commands/hooks/uninstall.d.ts.map +0 -1
  485. package/dist/commands/import.d.ts +0 -17
  486. package/dist/commands/import.d.ts.map +0 -1
  487. package/dist/commands/instructions/create.d.ts +0 -17
  488. package/dist/commands/instructions/create.d.ts.map +0 -1
  489. package/dist/commands/instructions/delete.d.ts +0 -13
  490. package/dist/commands/instructions/delete.d.ts.map +0 -1
  491. package/dist/commands/instructions/fork.d.ts +0 -10
  492. package/dist/commands/instructions/fork.d.ts.map +0 -1
  493. package/dist/commands/instructions/get.d.ts +0 -15
  494. package/dist/commands/instructions/get.d.ts.map +0 -1
  495. package/dist/commands/instructions/list.d.ts +0 -12
  496. package/dist/commands/instructions/list.d.ts.map +0 -1
  497. package/dist/commands/instructions/promote.d.ts +0 -14
  498. package/dist/commands/instructions/promote.d.ts.map +0 -1
  499. package/dist/commands/instructions/pull.d.ts +0 -9
  500. package/dist/commands/instructions/pull.d.ts.map +0 -1
  501. package/dist/commands/instructions/upstream.d.ts +0 -9
  502. package/dist/commands/instructions/upstream.d.ts.map +0 -1
  503. package/dist/commands/instructions/versions.d.ts +0 -12
  504. package/dist/commands/instructions/versions.d.ts.map +0 -1
  505. package/dist/commands/org/current.d.ts +0 -7
  506. package/dist/commands/org/current.d.ts.map +0 -1
  507. package/dist/commands/org/list.d.ts +0 -7
  508. package/dist/commands/org/list.d.ts.map +0 -1
  509. package/dist/commands/org/switch.d.ts +0 -13
  510. package/dist/commands/org/switch.d.ts.map +0 -1
  511. package/dist/commands/packs/add-instruction.d.ts +0 -11
  512. package/dist/commands/packs/add-instruction.d.ts.map +0 -1
  513. package/dist/commands/packs/apply.d.ts +0 -13
  514. package/dist/commands/packs/apply.d.ts.map +0 -1
  515. package/dist/commands/packs/create.d.ts +0 -13
  516. package/dist/commands/packs/create.d.ts.map +0 -1
  517. package/dist/commands/packs/fork.d.ts +0 -10
  518. package/dist/commands/packs/fork.d.ts.map +0 -1
  519. package/dist/commands/packs/get.d.ts +0 -10
  520. package/dist/commands/packs/get.d.ts.map +0 -1
  521. package/dist/commands/packs/list.d.ts +0 -22
  522. package/dist/commands/packs/list.d.ts.map +0 -1
  523. package/dist/commands/packs/remove-instruction.d.ts +0 -11
  524. package/dist/commands/packs/remove-instruction.d.ts.map +0 -1
  525. package/dist/commands/proxy/env.d.ts +0 -14
  526. package/dist/commands/proxy/env.d.ts.map +0 -1
  527. package/dist/commands/proxy/logs.d.ts +0 -11
  528. package/dist/commands/proxy/logs.d.ts.map +0 -1
  529. package/dist/commands/proxy/restart.d.ts +0 -11
  530. package/dist/commands/proxy/restart.d.ts.map +0 -1
  531. package/dist/commands/proxy/setup.d.ts +0 -23
  532. package/dist/commands/proxy/setup.d.ts.map +0 -1
  533. package/dist/commands/proxy/start.d.ts +0 -17
  534. package/dist/commands/proxy/start.d.ts.map +0 -1
  535. package/dist/commands/proxy/status.d.ts +0 -7
  536. package/dist/commands/proxy/status.d.ts.map +0 -1
  537. package/dist/commands/proxy/stop.d.ts +0 -8
  538. package/dist/commands/proxy/stop.d.ts.map +0 -1
  539. package/dist/commands/service/install.d.ts +0 -33
  540. package/dist/commands/service/install.d.ts.map +0 -1
  541. package/dist/commands/service/install.test.d.ts +0 -2
  542. package/dist/commands/service/install.test.d.ts.map +0 -1
  543. package/dist/commands/service/install.test.js +0 -345
  544. package/dist/commands/service/install.test.js.map +0 -1
  545. package/dist/commands/service/status.d.ts +0 -6
  546. package/dist/commands/service/status.d.ts.map +0 -1
  547. package/dist/commands/service/uninstall.d.ts +0 -6
  548. package/dist/commands/service/uninstall.d.ts.map +0 -1
  549. package/dist/commands/sessions/analyze.d.ts +0 -10
  550. package/dist/commands/sessions/analyze.d.ts.map +0 -1
  551. package/dist/commands/sessions/end.d.ts +0 -9
  552. package/dist/commands/sessions/end.d.ts.map +0 -1
  553. package/dist/commands/sessions/import.d.ts +0 -13
  554. package/dist/commands/sessions/import.d.ts.map +0 -1
  555. package/dist/commands/sessions/list.d.ts +0 -11
  556. package/dist/commands/sessions/list.d.ts.map +0 -1
  557. package/dist/commands/sessions/start.d.ts +0 -11
  558. package/dist/commands/sessions/start.d.ts.map +0 -1
  559. package/dist/commands/signals/report.d.ts +0 -10
  560. package/dist/commands/signals/report.d.ts.map +0 -1
  561. package/dist/commands/signals/report.test.d.ts +0 -2
  562. package/dist/commands/signals/report.test.d.ts.map +0 -1
  563. package/dist/commands/signals/report.test.js +0 -65
  564. package/dist/commands/signals/report.test.js.map +0 -1
  565. package/dist/commands/skills/export-approved.d.ts +0 -10
  566. package/dist/commands/skills/export-approved.d.ts.map +0 -1
  567. package/dist/commands/skills/install.d.ts +0 -15
  568. package/dist/commands/skills/install.d.ts.map +0 -1
  569. package/dist/commands/skills/list.d.ts +0 -11
  570. package/dist/commands/skills/list.d.ts.map +0 -1
  571. package/dist/commands/skills/publish.d.ts +0 -17
  572. package/dist/commands/skills/publish.d.ts.map +0 -1
  573. package/dist/commands/skills/search.d.ts +0 -17
  574. package/dist/commands/skills/search.d.ts.map +0 -1
  575. package/dist/commands/skills/update.d.ts +0 -10
  576. package/dist/commands/skills/update.d.ts.map +0 -1
  577. package/dist/commands/suggestions/accept.d.ts +0 -16
  578. package/dist/commands/suggestions/accept.d.ts.map +0 -1
  579. package/dist/commands/suggestions/accept.test.d.ts +0 -2
  580. package/dist/commands/suggestions/accept.test.d.ts.map +0 -1
  581. package/dist/commands/suggestions/accept.test.js +0 -52
  582. package/dist/commands/suggestions/accept.test.js.map +0 -1
  583. package/dist/commands/suggestions/dismiss.d.ts +0 -10
  584. package/dist/commands/suggestions/dismiss.d.ts.map +0 -1
  585. package/dist/commands/suggestions/list.d.ts +0 -10
  586. package/dist/commands/suggestions/list.d.ts.map +0 -1
  587. package/dist/commands/suggestions/refresh.d.ts +0 -7
  588. package/dist/commands/suggestions/refresh.d.ts.map +0 -1
  589. package/dist/dashboard/Dashboard.d.ts +0 -3
  590. package/dist/dashboard/Dashboard.d.ts.map +0 -1
  591. package/dist/dashboard/data.d.ts +0 -11
  592. package/dist/dashboard/data.d.ts.map +0 -1
  593. package/dist/dashboard/panels/friction.d.ts +0 -7
  594. package/dist/dashboard/panels/friction.d.ts.map +0 -1
  595. package/dist/dashboard/panels/insights.d.ts +0 -8
  596. package/dist/dashboard/panels/insights.d.ts.map +0 -1
  597. package/dist/dashboard/panels/instructions.d.ts +0 -9
  598. package/dist/dashboard/panels/instructions.d.ts.map +0 -1
  599. package/dist/dashboard/panels/outcomes.d.ts +0 -7
  600. package/dist/dashboard/panels/outcomes.d.ts.map +0 -1
  601. package/dist/dashboard/panels/overview.d.ts +0 -8
  602. package/dist/dashboard/panels/overview.d.ts.map +0 -1
  603. package/dist/dashboard/panels/shared.d.ts +0 -17
  604. package/dist/dashboard/panels/shared.d.ts.map +0 -1
  605. package/dist/dashboard/types.d.ts +0 -80
  606. package/dist/dashboard/types.d.ts.map +0 -1
  607. package/dist/index.d.ts +0 -2
  608. package/dist/index.d.ts.map +0 -1
  609. package/dist/lib/active-org-refresh.d.ts +0 -22
  610. package/dist/lib/active-org-refresh.d.ts.map +0 -1
  611. package/dist/lib/active-org-refresh.test.d.ts +0 -2
  612. package/dist/lib/active-org-refresh.test.d.ts.map +0 -1
  613. package/dist/lib/active-org-refresh.test.js +0 -190
  614. package/dist/lib/active-org-refresh.test.js.map +0 -1
  615. package/dist/lib/active-org.d.ts +0 -43
  616. package/dist/lib/active-org.d.ts.map +0 -1
  617. package/dist/lib/active-org.test.d.ts +0 -2
  618. package/dist/lib/active-org.test.d.ts.map +0 -1
  619. package/dist/lib/active-org.test.js +0 -147
  620. package/dist/lib/active-org.test.js.map +0 -1
  621. package/dist/lib/api-client.d.ts +0 -17
  622. package/dist/lib/api-client.d.ts.map +0 -1
  623. package/dist/lib/api-client.test.d.ts +0 -2
  624. package/dist/lib/api-client.test.d.ts.map +0 -1
  625. package/dist/lib/api-client.test.js +0 -161
  626. package/dist/lib/api-client.test.js.map +0 -1
  627. package/dist/lib/auth.d.ts +0 -27
  628. package/dist/lib/auth.d.ts.map +0 -1
  629. package/dist/lib/auth.test.d.ts +0 -2
  630. package/dist/lib/auth.test.d.ts.map +0 -1
  631. package/dist/lib/auth.test.js +0 -110
  632. package/dist/lib/auth.test.js.map +0 -1
  633. package/dist/lib/cron-registry.d.ts +0 -47
  634. package/dist/lib/cron-registry.d.ts.map +0 -1
  635. package/dist/lib/cron-registry.js +0 -102
  636. package/dist/lib/cron-registry.js.map +0 -1
  637. package/dist/lib/cron-registry.test.d.ts +0 -2
  638. package/dist/lib/cron-registry.test.d.ts.map +0 -1
  639. package/dist/lib/cron-registry.test.js +0 -136
  640. package/dist/lib/cron-registry.test.js.map +0 -1
  641. package/dist/lib/cron-runner.d.ts +0 -16
  642. package/dist/lib/cron-runner.d.ts.map +0 -1
  643. package/dist/lib/cron-runner.js +0 -68
  644. package/dist/lib/cron-runner.js.map +0 -1
  645. package/dist/lib/detect-languages.d.ts +0 -7
  646. package/dist/lib/detect-languages.d.ts.map +0 -1
  647. package/dist/lib/detect-languages.test.d.ts +0 -2
  648. package/dist/lib/detect-languages.test.d.ts.map +0 -1
  649. package/dist/lib/detect-languages.test.js +0 -29
  650. package/dist/lib/detect-languages.test.js.map +0 -1
  651. package/dist/lib/eval-analyzer.d.ts +0 -23
  652. package/dist/lib/eval-analyzer.d.ts.map +0 -1
  653. package/dist/lib/eval-benchmark.d.ts +0 -17
  654. package/dist/lib/eval-benchmark.d.ts.map +0 -1
  655. package/dist/lib/eval-conversation-handler.d.ts +0 -9
  656. package/dist/lib/eval-conversation-handler.d.ts.map +0 -1
  657. package/dist/lib/eval-executor.d.ts +0 -21
  658. package/dist/lib/eval-executor.d.ts.map +0 -1
  659. package/dist/lib/eval-executor.test.d.ts +0 -2
  660. package/dist/lib/eval-executor.test.d.ts.map +0 -1
  661. package/dist/lib/eval-executor.test.js +0 -8
  662. package/dist/lib/eval-executor.test.js.map +0 -1
  663. package/dist/lib/eval-grader.d.ts +0 -38
  664. package/dist/lib/eval-grader.d.ts.map +0 -1
  665. package/dist/lib/eval-grader.test.d.ts +0 -2
  666. package/dist/lib/eval-grader.test.d.ts.map +0 -1
  667. package/dist/lib/eval-grader.test.js +0 -8
  668. package/dist/lib/eval-grader.test.js.map +0 -1
  669. package/dist/lib/eval-meta-judge.d.ts +0 -28
  670. package/dist/lib/eval-meta-judge.d.ts.map +0 -1
  671. package/dist/lib/eval-trigger-tester.d.ts +0 -19
  672. package/dist/lib/eval-trigger-tester.d.ts.map +0 -1
  673. package/dist/lib/eval-worktree.d.ts +0 -11
  674. package/dist/lib/eval-worktree.d.ts.map +0 -1
  675. package/dist/lib/eval-worktree.test.d.ts +0 -2
  676. package/dist/lib/eval-worktree.test.d.ts.map +0 -1
  677. package/dist/lib/eval-worktree.test.js +0 -68
  678. package/dist/lib/eval-worktree.test.js.map +0 -1
  679. package/dist/lib/gateway-entry.d.ts +0 -3
  680. package/dist/lib/gateway-entry.d.ts.map +0 -1
  681. package/dist/lib/gateway-lifecycle.d.ts +0 -9
  682. package/dist/lib/gateway-lifecycle.d.ts.map +0 -1
  683. package/dist/lib/gateway.d.ts +0 -11
  684. package/dist/lib/gateway.d.ts.map +0 -1
  685. package/dist/lib/graphile-worker-runner.d.ts +0 -124
  686. package/dist/lib/graphile-worker-runner.d.ts.map +0 -1
  687. package/dist/lib/graphile-worker-runner.js +0 -530
  688. package/dist/lib/graphile-worker-runner.js.map +0 -1
  689. package/dist/lib/graphile-worker-runner.test.d.ts +0 -2
  690. package/dist/lib/graphile-worker-runner.test.d.ts.map +0 -1
  691. package/dist/lib/graphile-worker-runner.test.js +0 -153
  692. package/dist/lib/graphile-worker-runner.test.js.map +0 -1
  693. package/dist/lib/handlers/cron-close-stale-sessions.d.ts +0 -3
  694. package/dist/lib/handlers/cron-close-stale-sessions.d.ts.map +0 -1
  695. package/dist/lib/handlers/cron-data-integrity-audit.d.ts +0 -3
  696. package/dist/lib/handlers/cron-data-integrity-audit.d.ts.map +0 -1
  697. package/dist/lib/handlers/cron-refresh-skills.d.ts +0 -3
  698. package/dist/lib/handlers/cron-refresh-skills.d.ts.map +0 -1
  699. package/dist/lib/handlers/cron-refresh-skills.test.d.ts +0 -2
  700. package/dist/lib/handlers/cron-refresh-skills.test.d.ts.map +0 -1
  701. package/dist/lib/handlers/cron-refresh-skills.test.js +0 -114
  702. package/dist/lib/handlers/cron-refresh-skills.test.js.map +0 -1
  703. package/dist/lib/handlers/cron-regenerate-insights.d.ts +0 -3
  704. package/dist/lib/handlers/cron-regenerate-insights.d.ts.map +0 -1
  705. package/dist/lib/handlers/cron-regenerate-insights.js +0 -6
  706. package/dist/lib/handlers/cron-regenerate-insights.js.map +0 -1
  707. package/dist/lib/handlers/cron-suggest-instructions.d.ts +0 -3
  708. package/dist/lib/handlers/cron-suggest-instructions.d.ts.map +0 -1
  709. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts +0 -2
  710. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts.map +0 -1
  711. package/dist/lib/handlers/cron-suggest-instructions.test.js +0 -80
  712. package/dist/lib/handlers/cron-suggest-instructions.test.js.map +0 -1
  713. package/dist/lib/handlers/process-conversation.d.ts +0 -35
  714. package/dist/lib/handlers/process-conversation.d.ts.map +0 -1
  715. package/dist/lib/handlers/process-eval.d.ts +0 -32
  716. package/dist/lib/handlers/process-eval.d.ts.map +0 -1
  717. package/dist/lib/handlers/process-insights.d.ts +0 -39
  718. package/dist/lib/handlers/process-insights.d.ts.map +0 -1
  719. package/dist/lib/handlers/process-launch.d.ts +0 -29
  720. package/dist/lib/handlers/process-launch.d.ts.map +0 -1
  721. package/dist/lib/handlers/process-session-goal.d.ts +0 -29
  722. package/dist/lib/handlers/process-session-goal.d.ts.map +0 -1
  723. package/dist/lib/handlers/process-session-goal.test.d.ts +0 -2
  724. package/dist/lib/handlers/process-session-goal.test.d.ts.map +0 -1
  725. package/dist/lib/handlers/process-session-goal.test.js +0 -134
  726. package/dist/lib/handlers/process-session-goal.test.js.map +0 -1
  727. package/dist/lib/hooks-config.d.ts +0 -119
  728. package/dist/lib/hooks-config.d.ts.map +0 -1
  729. package/dist/lib/hooks-config.test.d.ts +0 -2
  730. package/dist/lib/hooks-config.test.d.ts.map +0 -1
  731. package/dist/lib/hooks-config.test.js +0 -231
  732. package/dist/lib/hooks-config.test.js.map +0 -1
  733. package/dist/lib/insights-prompts.d.ts +0 -13
  734. package/dist/lib/insights-prompts.d.ts.map +0 -1
  735. package/dist/lib/llm-client.d.ts +0 -26
  736. package/dist/lib/llm-client.d.ts.map +0 -1
  737. package/dist/lib/llm-client.test.d.ts +0 -2
  738. package/dist/lib/llm-client.test.d.ts.map +0 -1
  739. package/dist/lib/llm-client.test.js +0 -62
  740. package/dist/lib/llm-client.test.js.map +0 -1
  741. package/dist/lib/mirror-writer-db.d.ts +0 -12
  742. package/dist/lib/mirror-writer-db.d.ts.map +0 -1
  743. package/dist/lib/mirror-writer-db.js +0 -51
  744. package/dist/lib/mirror-writer-db.js.map +0 -1
  745. package/dist/lib/mirror-writer.d.ts +0 -35
  746. package/dist/lib/mirror-writer.d.ts.map +0 -1
  747. package/dist/lib/mirror-writer.js +0 -27
  748. package/dist/lib/mirror-writer.js.map +0 -1
  749. package/dist/lib/mirror-writer.test.d.ts +0 -2
  750. package/dist/lib/mirror-writer.test.d.ts.map +0 -1
  751. package/dist/lib/mirror-writer.test.js +0 -47
  752. package/dist/lib/mirror-writer.test.js.map +0 -1
  753. package/dist/lib/output.d.ts +0 -4
  754. package/dist/lib/output.d.ts.map +0 -1
  755. package/dist/lib/output.test.d.ts +0 -2
  756. package/dist/lib/output.test.d.ts.map +0 -1
  757. package/dist/lib/output.test.js +0 -71
  758. package/dist/lib/output.test.js.map +0 -1
  759. package/dist/lib/permanent-job-error.d.ts +0 -17
  760. package/dist/lib/permanent-job-error.d.ts.map +0 -1
  761. package/dist/lib/permanent-job-error.test.d.ts +0 -2
  762. package/dist/lib/permanent-job-error.test.d.ts.map +0 -1
  763. package/dist/lib/permanent-job-error.test.js +0 -29
  764. package/dist/lib/permanent-job-error.test.js.map +0 -1
  765. package/dist/lib/provider-aggregator.d.ts +0 -24
  766. package/dist/lib/provider-aggregator.d.ts.map +0 -1
  767. package/dist/lib/provider-aggregator.test.d.ts +0 -2
  768. package/dist/lib/provider-aggregator.test.d.ts.map +0 -1
  769. package/dist/lib/provider-aggregator.test.js +0 -103
  770. package/dist/lib/provider-aggregator.test.js.map +0 -1
  771. package/dist/lib/skills-loader.d.ts +0 -6
  772. package/dist/lib/skills-loader.d.ts.map +0 -1
  773. package/dist/lib/types.d.ts +0 -48
  774. package/dist/lib/types.d.ts.map +0 -1
  775. package/dist/lib/version-check.d.ts +0 -11
  776. package/dist/lib/version-check.d.ts.map +0 -1
  777. package/dist/test-helpers.d.ts +0 -58
  778. package/dist/test-helpers.d.ts.map +0 -1
  779. package/dist/test-helpers.js +0 -58
  780. package/dist/test-helpers.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ import {
2
+ executeEval
3
+ } from "./chunk-QN34TGD3.js";
4
+
5
+ // src/lib/eval-meta-judge.ts
6
+ var META_JUDGE_SYSTEM_PROMPT = `You are a meta-judge evaluating the quality of an eval run \u2014 not the code output, but whether the test cases and grading themselves are rigorous and meaningful.
7
+
8
+ You will receive a summary of eval cases, their expectations, and grading results.
9
+
10
+ Analyze for these quality issues:
11
+
12
+ 1. **Weak expectations** \u2014 Expectations that are vague ("should follow conventions") or trivially satisfiable. Good expectations are specific and falsifiable.
13
+
14
+ 2. **Inconsistent grading** \u2014 Cases where similar expectations get different pass/fail results, or where evidence doesn't match the verdict.
15
+
16
+ 3. **Trivial tests** \u2014 Cases where the prompt doesn't actually challenge the rule. E.g., testing "NEVER use mocks" with a prompt that doesn't involve testing at all.
17
+
18
+ 4. **Untestable expectations** \u2014 Expectations that can't be verified from the output alone (e.g., "the developer should feel confident").
19
+
20
+ 5. **Suspicious 100% pass** \u2014 If every expectation passes, consider whether the tests were actually challenging enough.
21
+
22
+ Respond in JSON:
23
+ {
24
+ "quality_score": <1-5>,
25
+ "issues": [
26
+ {
27
+ "type": "weak_expectation | inconsistent_grading | trivial_test | untestable_expectation | all_pass_suspicious",
28
+ "severity": "low | medium | high",
29
+ "description": "<specific issue>",
30
+ "affected_eval": "<eval name if applicable>"
31
+ }
32
+ ],
33
+ "recommendations": ["<specific improvement suggestion>", ...],
34
+ "summary": "<1-2 sentence overall assessment>"
35
+ }
36
+
37
+ Be constructive but honest. A quality_score of 3 means acceptable, 4 means good, 5 means rigorous. Most real-world eval runs score 2-4.`;
38
+ async function judgeEvalQuality(input) {
39
+ const evalSummary = input.evalResults.map((r) => {
40
+ const gradingInfo = r.grading ? {
41
+ pass_rate: r.grading.summary.pass_rate,
42
+ expectations: r.grading.expectations.map((e) => ({
43
+ text: e.text,
44
+ passed: e.passed,
45
+ evidence: e.evidence.slice(0, 200)
46
+ })),
47
+ feedback: r.grading.eval_feedback?.overall ?? ""
48
+ } : null;
49
+ return {
50
+ eval_name: r.evalName,
51
+ prompt: r.prompt.slice(0, 500),
52
+ expectations: r.expectations,
53
+ grading: gradingInfo,
54
+ output_preview: r.output?.slice(0, 300) ?? "(not available)"
55
+ };
56
+ });
57
+ const prompt = `Evaluate the quality of this eval run for target "${input.targetName}":
58
+
59
+ ${JSON.stringify(evalSummary, null, 2)}`;
60
+ const result = await executeEval({
61
+ prompt,
62
+ systemPrompt: META_JUDGE_SYSTEM_PROMPT,
63
+ timeout: input.timeout ?? 6e4,
64
+ model: input.model
65
+ });
66
+ if (result.error || !result.output) {
67
+ return {
68
+ quality_score: 0,
69
+ issues: [{
70
+ type: "inconsistent_grading",
71
+ severity: "high",
72
+ description: `Meta-judge failed: ${result.error ?? "no output"}`
73
+ }],
74
+ recommendations: ["Meta-judge could not complete \u2014 check model availability"],
75
+ summary: "Meta-judge execution failed."
76
+ };
77
+ }
78
+ try {
79
+ const parsed = parseJsonFromOutput(result.output);
80
+ const issues = Array.isArray(parsed.issues) ? parsed.issues : [];
81
+ const recs = Array.isArray(parsed.recommendations) ? parsed.recommendations : [];
82
+ return {
83
+ quality_score: Math.max(1, Math.min(5, Number(parsed.quality_score) || 3)),
84
+ issues: issues.map((i) => ({
85
+ type: i.type ?? "weak_expectation",
86
+ severity: i.severity ?? "medium",
87
+ description: String(i.description ?? ""),
88
+ affected_eval: i.affected_eval ? String(i.affected_eval) : void 0
89
+ })),
90
+ recommendations: recs,
91
+ summary: String(parsed.summary ?? "No summary provided.")
92
+ };
93
+ } catch {
94
+ return {
95
+ quality_score: 3,
96
+ issues: [],
97
+ recommendations: [],
98
+ summary: "Meta-judge returned unparseable output \u2014 defaulting to neutral score."
99
+ };
100
+ }
101
+ }
102
+ function parseJsonFromOutput(output) {
103
+ try {
104
+ return JSON.parse(output);
105
+ } catch {
106
+ const match = output.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
107
+ if (match) {
108
+ return JSON.parse(match[1]);
109
+ }
110
+ throw new Error("No JSON found in output");
111
+ }
112
+ }
113
+
114
+ export {
115
+ judgeEvalQuality
116
+ };
117
+ //# sourceMappingURL=chunk-J7N3DLH6.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lib/eval-meta-judge.ts"],
4
+ "sourcesContent": ["import { executeEval } from './eval-executor.js';\nimport type { GradingResult } from './eval-grader.js';\n\nexport interface MetaJudgement {\n quality_score: number; // 1-5 overall quality of the eval run\n issues: MetaIssue[];\n recommendations: string[];\n summary: string;\n}\n\nexport interface MetaIssue {\n type: 'weak_expectation' | 'inconsistent_grading' | 'trivial_test' | 'untestable_expectation' | 'all_pass_suspicious';\n severity: 'low' | 'medium' | 'high';\n description: string;\n affected_eval?: string;\n}\n\nconst META_JUDGE_SYSTEM_PROMPT = `You are a meta-judge evaluating the quality of an eval run \u2014 not the code output, but whether the test cases and grading themselves are rigorous and meaningful.\n\nYou will receive a summary of eval cases, their expectations, and grading results.\n\nAnalyze for these quality issues:\n\n1. **Weak expectations** \u2014 Expectations that are vague (\"should follow conventions\") or trivially satisfiable. Good expectations are specific and falsifiable.\n\n2. **Inconsistent grading** \u2014 Cases where similar expectations get different pass/fail results, or where evidence doesn't match the verdict.\n\n3. **Trivial tests** \u2014 Cases where the prompt doesn't actually challenge the rule. E.g., testing \"NEVER use mocks\" with a prompt that doesn't involve testing at all.\n\n4. **Untestable expectations** \u2014 Expectations that can't be verified from the output alone (e.g., \"the developer should feel confident\").\n\n5. **Suspicious 100% pass** \u2014 If every expectation passes, consider whether the tests were actually challenging enough.\n\nRespond in JSON:\n{\n \"quality_score\": <1-5>,\n \"issues\": [\n {\n \"type\": \"weak_expectation | inconsistent_grading | trivial_test | untestable_expectation | all_pass_suspicious\",\n \"severity\": \"low | medium | high\",\n \"description\": \"<specific issue>\",\n \"affected_eval\": \"<eval name if applicable>\"\n }\n ],\n \"recommendations\": [\"<specific improvement suggestion>\", ...],\n \"summary\": \"<1-2 sentence overall assessment>\"\n}\n\nBe constructive but honest. A quality_score of 3 means acceptable, 4 means good, 5 means rigorous. Most real-world eval runs score 2-4.`;\n\ninterface MetaJudgeInput {\n targetName: string;\n evalResults: Array<{\n evalName: string;\n prompt: string;\n expectations: string[];\n grading: GradingResult | null;\n output?: string;\n }>;\n model?: string;\n timeout?: number;\n}\n\nexport async function judgeEvalQuality(input: MetaJudgeInput): Promise<MetaJudgement> {\n // Build a summary of the eval run for the meta-judge\n const evalSummary = input.evalResults.map((r) => {\n const gradingInfo = r.grading\n ? {\n pass_rate: r.grading.summary.pass_rate,\n expectations: r.grading.expectations.map((e) => ({\n text: e.text,\n passed: e.passed,\n evidence: e.evidence.slice(0, 200),\n })),\n feedback: r.grading.eval_feedback?.overall ?? '',\n }\n : null;\n\n return {\n eval_name: r.evalName,\n prompt: r.prompt.slice(0, 500),\n expectations: r.expectations,\n grading: gradingInfo,\n output_preview: r.output?.slice(0, 300) ?? '(not available)',\n };\n });\n\n const prompt = `Evaluate the quality of this eval run for target \"${input.targetName}\":\n\n${JSON.stringify(evalSummary, null, 2)}`;\n\n const result = await executeEval({\n prompt,\n systemPrompt: META_JUDGE_SYSTEM_PROMPT,\n timeout: input.timeout ?? 60000,\n model: input.model,\n });\n\n if (result.error || !result.output) {\n return {\n quality_score: 0,\n issues: [{\n type: 'inconsistent_grading',\n severity: 'high',\n description: `Meta-judge failed: ${result.error ?? 'no output'}`,\n }],\n recommendations: ['Meta-judge could not complete \u2014 check model availability'],\n summary: 'Meta-judge execution failed.',\n };\n }\n\n try {\n const parsed = parseJsonFromOutput(result.output);\n const issues = Array.isArray(parsed.issues) ? parsed.issues : [];\n const recs = Array.isArray(parsed.recommendations) ? parsed.recommendations as string[] : [];\n return {\n quality_score: Math.max(1, Math.min(5, Number(parsed.quality_score) || 3)),\n issues: issues.map((i: Record<string, string>) => ({\n type: (i.type ?? 'weak_expectation') as MetaIssue['type'],\n severity: (i.severity ?? 'medium') as MetaIssue['severity'],\n description: String(i.description ?? ''),\n affected_eval: i.affected_eval ? String(i.affected_eval) : undefined,\n })),\n recommendations: recs,\n summary: String(parsed.summary ?? 'No summary provided.'),\n };\n } catch {\n return {\n quality_score: 3,\n issues: [],\n recommendations: [],\n summary: 'Meta-judge returned unparseable output \u2014 defaulting to neutral score.',\n };\n }\n}\n\nfunction parseJsonFromOutput(output: string): Record<string, unknown> {\n // Try direct JSON parse\n try {\n return JSON.parse(output);\n } catch {\n // Try extracting from markdown code block\n const match = output.match(/```(?:json)?\\s*\\n?([\\s\\S]*?)\\n?```/);\n if (match) {\n return JSON.parse(match[1]);\n }\n throw new Error('No JSON found in output');\n }\n}\n"],
5
+ "mappings": ";;;;;AAiBA,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CjC,eAAsB,iBAAiB,OAA+C;AAEpF,QAAM,cAAc,MAAM,YAAY,IAAI,CAAC,MAAM;AAC/C,UAAM,cAAc,EAAE,UAClB;AAAA,MACE,WAAW,EAAE,QAAQ,QAAQ;AAAA,MAC7B,cAAc,EAAE,QAAQ,aAAa,IAAI,CAAC,OAAO;AAAA,QAC/C,MAAM,EAAE;AAAA,QACR,QAAQ,EAAE;AAAA,QACV,UAAU,EAAE,SAAS,MAAM,GAAG,GAAG;AAAA,MACnC,EAAE;AAAA,MACF,UAAU,EAAE,QAAQ,eAAe,WAAW;AAAA,IAChD,IACA;AAEJ,WAAO;AAAA,MACL,WAAW,EAAE;AAAA,MACb,QAAQ,EAAE,OAAO,MAAM,GAAG,GAAG;AAAA,MAC7B,cAAc,EAAE;AAAA,MAChB,SAAS;AAAA,MACT,gBAAgB,EAAE,QAAQ,MAAM,GAAG,GAAG,KAAK;AAAA,IAC7C;AAAA,EACF,CAAC;AAED,QAAM,SAAS,qDAAqD,MAAM,UAAU;AAAA;AAAA,EAEpF,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAEpC,QAAM,SAAS,MAAM,YAAY;AAAA,IAC/B;AAAA,IACA,cAAc;AAAA,IACd,SAAS,MAAM,WAAW;AAAA,IAC1B,OAAO,MAAM;AAAA,EACf,CAAC;AAED,MAAI,OAAO,SAAS,CAAC,OAAO,QAAQ;AAClC,WAAO;AAAA,MACL,eAAe;AAAA,MACf,QAAQ,CAAC;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa,sBAAsB,OAAO,SAAS,WAAW;AAAA,MAChE,CAAC;AAAA,MACD,iBAAiB,CAAC,+DAA0D;AAAA,MAC5E,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI;AACF,UAAM,SAAS,oBAAoB,OAAO,MAAM;AAChD,UAAM,SAAS,MAAM,QAAQ,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC;AAC/D,UAAM,OAAO,MAAM,QAAQ,OAAO,eAAe,IAAI,OAAO,kBAA8B,CAAC;AAC3F,WAAO;AAAA,MACL,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,OAAO,aAAa,KAAK,CAAC,CAAC;AAAA,MACzE,QAAQ,OAAO,IAAI,CAAC,OAA+B;AAAA,QACjD,MAAO,EAAE,QAAQ;AAAA,QACjB,UAAW,EAAE,YAAY;AAAA,QACzB,aAAa,OAAO,EAAE,eAAe,EAAE;AAAA,QACvC,eAAe,EAAE,gBAAgB,OAAO,EAAE,aAAa,IAAI;AAAA,MAC7D,EAAE;AAAA,MACF,iBAAiB;AAAA,MACjB,SAAS,OAAO,OAAO,WAAW,sBAAsB;AAAA,IAC1D;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,MACL,eAAe;AAAA,MACf,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,MAClB,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,QAAyC;AAEpE,MAAI;AACF,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B,QAAQ;AAEN,UAAM,QAAQ,OAAO,MAAM,oCAAoC;AAC/D,QAAI,OAAO;AACT,aAAO,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,IAC5B;AACA,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,99 @@
1
+ import {
2
+ buildTmuxHasSessionArgs,
3
+ runTmux
4
+ } from "./chunk-KRBQLMOP.js";
5
+ import {
6
+ apiGet,
7
+ apiPatch
8
+ } from "./chunk-EJOI2ZGU.js";
9
+
10
+ // src/lib/terminal-target-heartbeat.ts
11
+ var DEFAULT_INTERVAL_MS = 6e4;
12
+ function structuredLog(log, event) {
13
+ try {
14
+ log(JSON.stringify({ ts: (/* @__PURE__ */ new Date()).toISOString(), ...event }));
15
+ } catch {
16
+ log(`[tt-heartbeat] log_error event=${event["event"]}`);
17
+ }
18
+ }
19
+ function abortableSleep(ms, signal) {
20
+ if (signal.aborted) return Promise.resolve(false);
21
+ if (ms <= 0) return Promise.resolve(true);
22
+ return new Promise((resolve) => {
23
+ const timer = setTimeout(() => {
24
+ signal.removeEventListener("abort", onAbort);
25
+ resolve(true);
26
+ }, ms);
27
+ const onAbort = () => {
28
+ clearTimeout(timer);
29
+ signal.removeEventListener("abort", onAbort);
30
+ resolve(false);
31
+ };
32
+ signal.addEventListener("abort", onAbort, { once: true });
33
+ });
34
+ }
35
+ async function probeAndReport(target, log) {
36
+ if (target.kind !== "tmux") return;
37
+ const result = await runTmux(buildTmuxHasSessionArgs(target.target));
38
+ const status = result.code === 0 ? "active" : "missing";
39
+ try {
40
+ await apiPatch(`/api/terminal-targets/${target.id}/status`, {
41
+ status,
42
+ lastSeenAt: (/* @__PURE__ */ new Date()).toISOString()
43
+ });
44
+ structuredLog(log, {
45
+ event: "tt_heartbeat",
46
+ targetId: target.id,
47
+ target: target.target,
48
+ status
49
+ });
50
+ } catch (err) {
51
+ structuredLog(log, {
52
+ event: "tt_heartbeat_error",
53
+ targetId: target.id,
54
+ target: target.target,
55
+ error: err instanceof Error ? err.message : String(err)
56
+ });
57
+ }
58
+ }
59
+ async function runOneHeartbeatCycle(log) {
60
+ let resp;
61
+ try {
62
+ resp = await apiGet("/api/terminal-targets?status=active");
63
+ } catch (err) {
64
+ structuredLog(log, {
65
+ event: "tt_heartbeat_list_error",
66
+ error: err instanceof Error ? err.message : String(err)
67
+ });
68
+ return;
69
+ }
70
+ for (const target of resp.targets ?? []) {
71
+ try {
72
+ await probeAndReport(target, log);
73
+ } catch (err) {
74
+ structuredLog(log, {
75
+ event: "tt_heartbeat_probe_error",
76
+ targetId: target.id,
77
+ error: err instanceof Error ? err.message : String(err)
78
+ });
79
+ }
80
+ }
81
+ }
82
+ async function startTerminalTargetHeartbeat(opts) {
83
+ const log = opts.log ?? (() => void 0);
84
+ const intervalMs = opts.intervalMs ?? DEFAULT_INTERVAL_MS;
85
+ structuredLog(log, { event: "tt_heartbeat_start", intervalMs });
86
+ while (!opts.signal.aborted) {
87
+ await runOneHeartbeatCycle(log);
88
+ const completed = await abortableSleep(intervalMs, opts.signal);
89
+ if (!completed) break;
90
+ }
91
+ structuredLog(log, { event: "tt_heartbeat_stop" });
92
+ }
93
+
94
+ export {
95
+ probeAndReport,
96
+ runOneHeartbeatCycle,
97
+ startTerminalTargetHeartbeat
98
+ };
99
+ //# sourceMappingURL=chunk-JX5UI6RW.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lib/terminal-target-heartbeat.ts"],
4
+ "sourcesContent": ["// Phase 5: periodic liveness probe for tmux targets.\n//\n// Every `intervalMs` (default 60s) the worker fetches its own active terminal\n// targets and runs `tmux has-session -t <target>` on each. Exit 0 \u2192 PATCH\n// status='active', non-zero \u2192 PATCH status='missing'. Non-tmux targets are\n// skipped (we have no way to probe them from here).\n//\n// Errors on individual targets are logged and swallowed \u2014 a transient API\n// failure or a single bad target must not stop the heartbeat for the rest of\n// the fleet. The whole loop stops cleanly when `signal` aborts.\n\nimport { apiGet, apiPatch } from './api-client.js';\nimport { runTmux, buildTmuxHasSessionArgs } from './tmux.js';\n\nexport interface TerminalTarget {\n id: string;\n kind: string;\n target: string;\n status: string;\n}\n\ninterface ListResponse {\n targets: TerminalTarget[];\n}\n\nexport interface StartTerminalTargetHeartbeatOptions {\n signal: AbortSignal;\n log?: (msg: string) => void;\n intervalMs?: number;\n}\n\nconst DEFAULT_INTERVAL_MS = 60_000;\n\nfunction structuredLog(\n log: (msg: string) => void,\n event: Record<string, unknown>,\n): void {\n try {\n log(JSON.stringify({ ts: new Date().toISOString(), ...event }));\n } catch {\n log(`[tt-heartbeat] log_error event=${event['event']}`);\n }\n}\n\nfunction abortableSleep(ms: number, signal: AbortSignal): Promise<boolean> {\n if (signal.aborted) return Promise.resolve(false);\n if (ms <= 0) return Promise.resolve(true);\n return new Promise<boolean>((resolve) => {\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve(true);\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n signal.removeEventListener('abort', onAbort);\n resolve(false);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\nexport async function probeAndReport(\n target: TerminalTarget,\n log: (msg: string) => void,\n): Promise<void> {\n if (target.kind !== 'tmux') return; // Skip non-tmux targets.\n\n const result = await runTmux(buildTmuxHasSessionArgs(target.target));\n const status = result.code === 0 ? 'active' : 'missing';\n\n try {\n await apiPatch(`/api/terminal-targets/${target.id}/status`, {\n status,\n lastSeenAt: new Date().toISOString(),\n });\n structuredLog(log, {\n event: 'tt_heartbeat',\n targetId: target.id,\n target: target.target,\n status,\n });\n } catch (err) {\n structuredLog(log, {\n event: 'tt_heartbeat_error',\n targetId: target.id,\n target: target.target,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\nexport async function runOneHeartbeatCycle(\n log: (msg: string) => void,\n): Promise<void> {\n let resp: ListResponse;\n try {\n resp = await apiGet<ListResponse>('/api/terminal-targets?status=active');\n } catch (err) {\n structuredLog(log, {\n event: 'tt_heartbeat_list_error',\n error: err instanceof Error ? err.message : String(err),\n });\n return;\n }\n\n for (const target of resp.targets ?? []) {\n try {\n await probeAndReport(target, log);\n } catch (err) {\n // Defensive: probeAndReport already catches its own errors, but a\n // sync throw (e.g. in URL construction) shouldn't kill the cycle.\n structuredLog(log, {\n event: 'tt_heartbeat_probe_error',\n targetId: target.id,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n}\n\nexport async function startTerminalTargetHeartbeat(\n opts: StartTerminalTargetHeartbeatOptions,\n): Promise<void> {\n const log = opts.log ?? (() => undefined);\n const intervalMs = opts.intervalMs ?? DEFAULT_INTERVAL_MS;\n structuredLog(log, { event: 'tt_heartbeat_start', intervalMs });\n\n // Initial probe runs immediately so a freshly started worker doesn't wait\n // a full interval before reporting its first set of statuses.\n while (!opts.signal.aborted) {\n await runOneHeartbeatCycle(log);\n const completed = await abortableSleep(intervalMs, opts.signal);\n if (!completed) break;\n }\n\n structuredLog(log, { event: 'tt_heartbeat_stop' });\n}\n"],
5
+ "mappings": ";;;;;;;;;;AA+BA,IAAM,sBAAsB;AAE5B,SAAS,cACP,KACA,OACM;AACN,MAAI;AACF,QAAI,KAAK,UAAU,EAAE,KAAI,oBAAI,KAAK,GAAE,YAAY,GAAG,GAAG,MAAM,CAAC,CAAC;AAAA,EAChE,QAAQ;AACN,QAAI,kCAAkC,MAAM,OAAO,CAAC,EAAE;AAAA,EACxD;AACF;AAEA,SAAS,eAAe,IAAY,QAAuC;AACzE,MAAI,OAAO,QAAS,QAAO,QAAQ,QAAQ,KAAK;AAChD,MAAI,MAAM,EAAG,QAAO,QAAQ,QAAQ,IAAI;AACxC,SAAO,IAAI,QAAiB,CAAC,YAAY;AACvC,UAAM,QAAQ,WAAW,MAAM;AAC7B,aAAO,oBAAoB,SAAS,OAAO;AAC3C,cAAQ,IAAI;AAAA,IACd,GAAG,EAAE;AACL,UAAM,UAAU,MAAM;AACpB,mBAAa,KAAK;AAClB,aAAO,oBAAoB,SAAS,OAAO;AAC3C,cAAQ,KAAK;AAAA,IACf;AACA,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,EAC1D,CAAC;AACH;AAEA,eAAsB,eACpB,QACA,KACe;AACf,MAAI,OAAO,SAAS,OAAQ;AAE5B,QAAM,SAAS,MAAM,QAAQ,wBAAwB,OAAO,MAAM,CAAC;AACnE,QAAM,SAAS,OAAO,SAAS,IAAI,WAAW;AAE9C,MAAI;AACF,UAAM,SAAS,yBAAyB,OAAO,EAAE,WAAW;AAAA,MAC1D;AAAA,MACA,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,IACrC,CAAC;AACD,kBAAc,KAAK;AAAA,MACjB,OAAO;AAAA,MACP,UAAU,OAAO;AAAA,MACjB,QAAQ,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,kBAAc,KAAK;AAAA,MACjB,OAAO;AAAA,MACP,UAAU,OAAO;AAAA,MACjB,QAAQ,OAAO;AAAA,MACf,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACxD,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,qBACpB,KACe;AACf,MAAI;AACJ,MAAI;AACF,WAAO,MAAM,OAAqB,qCAAqC;AAAA,EACzE,SAAS,KAAK;AACZ,kBAAc,KAAK;AAAA,MACjB,OAAO;AAAA,MACP,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACxD,CAAC;AACD;AAAA,EACF;AAEA,aAAW,UAAU,KAAK,WAAW,CAAC,GAAG;AACvC,QAAI;AACF,YAAM,eAAe,QAAQ,GAAG;AAAA,IAClC,SAAS,KAAK;AAGZ,oBAAc,KAAK;AAAA,QACjB,OAAO;AAAA,QACP,UAAU,OAAO;AAAA,QACjB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,eAAsB,6BACpB,MACe;AACf,QAAM,MAAM,KAAK,QAAQ,MAAM;AAC/B,QAAM,aAAa,KAAK,cAAc;AACtC,gBAAc,KAAK,EAAE,OAAO,sBAAsB,WAAW,CAAC;AAI9D,SAAO,CAAC,KAAK,OAAO,SAAS;AAC3B,UAAM,qBAAqB,GAAG;AAC9B,UAAM,YAAY,MAAM,eAAe,YAAY,KAAK,MAAM;AAC9D,QAAI,CAAC,UAAW;AAAA,EAClB;AAEA,gBAAc,KAAK,EAAE,OAAO,oBAAoB,CAAC;AACnD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,154 @@
1
+ // ../../packages/core/dist/llm/recommend.js
2
+ function buildRecommendationPrompt(project, candidates) {
3
+ const candidateList = candidates.map((c) => `- ID: ${c.id}
4
+ Name: ${c.name}
5
+ Description: ${c.description}
6
+ Tags: ${c.tags.join(", ")}
7
+ Preview: ${c.contentPreview}`).join("\n\n");
8
+ return `You are an expert at matching AI coding instructions to software projects.
9
+
10
+ ## Project
11
+ - Name: ${project.name}
12
+ - Description: ${project.description ?? "No description"}
13
+ - Languages: ${project.languages.join(", ") || "Unknown"}
14
+ - Topics: ${project.topics.join(", ") || "None"}
15
+ - Dependencies: ${project.dependencies.join(", ") || "None"}
16
+
17
+ ## Available Instructions
18
+
19
+ ${candidateList}
20
+
21
+ ## Task
22
+
23
+ Analyze the project and recommend which instructions would be most useful. Consider:
24
+ 1. Language and framework alignment
25
+ 2. Project purpose and what standards/practices would help
26
+ 3. Security, testing, and quality needs based on the project type
27
+
28
+ Return your response as JSON in this exact format:
29
+ {
30
+ "recommendations": [
31
+ { "instructionId": "<id>", "score": <0.0-1.0>, "reason": "<one sentence explanation>" }
32
+ ]
33
+ }
34
+
35
+ Only include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`;
36
+ }
37
+
38
+ // ../../packages/core/dist/changelog/parse.js
39
+ var KNOWN_SECTIONS = [
40
+ "Added",
41
+ "Changed",
42
+ "Fixed",
43
+ "Removed",
44
+ "Deprecated",
45
+ "Security"
46
+ ];
47
+ var VERSION_HEADING = /^##\s+\[([^\]]+)\](?:\s*[-–]\s*(\d{4}-\d{2}-\d{2}))?\s*$/;
48
+ var SECTION_HEADING = /^###\s+(.+?)\s*$/;
49
+ var LIST_ITEM = /^[-*]\s+(.*\S)\s*$/;
50
+ var CONTINUATION = /^ {2,}(\S.*)$/;
51
+ function parseChangelog(markdown) {
52
+ const lines = markdown.split(/\r?\n/);
53
+ const entries = [];
54
+ let current = null;
55
+ let currentSection = null;
56
+ let lastItems = null;
57
+ for (const raw of lines) {
58
+ const versionMatch = raw.match(VERSION_HEADING);
59
+ if (versionMatch) {
60
+ if (current)
61
+ entries.push(current);
62
+ const version = versionMatch[1].trim();
63
+ current = {
64
+ version,
65
+ date: versionMatch[2] ?? null,
66
+ unreleased: version.toLowerCase() === "unreleased",
67
+ sections: {}
68
+ };
69
+ currentSection = null;
70
+ lastItems = null;
71
+ continue;
72
+ }
73
+ if (!current)
74
+ continue;
75
+ const sectionMatch = raw.match(SECTION_HEADING);
76
+ if (sectionMatch) {
77
+ const name = sectionMatch[1].trim();
78
+ if (KNOWN_SECTIONS.includes(name)) {
79
+ currentSection = name;
80
+ if (!current.sections[currentSection]) {
81
+ current.sections[currentSection] = [];
82
+ }
83
+ lastItems = current.sections[currentSection];
84
+ } else {
85
+ currentSection = null;
86
+ lastItems = null;
87
+ }
88
+ continue;
89
+ }
90
+ if (!currentSection || !lastItems)
91
+ continue;
92
+ const itemMatch = raw.match(LIST_ITEM);
93
+ if (itemMatch) {
94
+ lastItems.push(itemMatch[1]);
95
+ continue;
96
+ }
97
+ const contMatch = raw.match(CONTINUATION);
98
+ if (contMatch && lastItems.length > 0) {
99
+ lastItems[lastItems.length - 1] += " " + contMatch[1].trim();
100
+ continue;
101
+ }
102
+ }
103
+ if (current)
104
+ entries.push(current);
105
+ return { entries };
106
+ }
107
+ function announceableEntries(parsed) {
108
+ return parsed.entries.filter((e) => {
109
+ if (e.unreleased)
110
+ return false;
111
+ return Object.values(e.sections).some((items) => items && items.length > 0);
112
+ });
113
+ }
114
+
115
+ // ../../packages/core/dist/types/instruction.js
116
+ import { z } from "zod";
117
+ var INSTRUCTION_SCOPES = ["org", "team", "project", "personal"];
118
+ var instructionFrontmatterSchema = z.object({
119
+ name: z.string().min(1),
120
+ description: z.string().min(1),
121
+ type: z.literal("instruction").default("instruction"),
122
+ scope: z.enum(INSTRUCTION_SCOPES),
123
+ version: z.string().min(1),
124
+ tags: z.array(z.string()).optional(),
125
+ compatibility: z.array(z.string()).optional(),
126
+ slots: z.record(z.string(), z.string()).optional(),
127
+ metadata: z.record(z.string(), z.unknown()).optional()
128
+ });
129
+
130
+ // ../../packages/core/dist/types/prompt.js
131
+ import { z as z2 } from "zod";
132
+ var promptFrontmatterSchema = z2.object({
133
+ name: z2.string().min(1),
134
+ description: z2.string().min(1),
135
+ type: z2.literal("prompt"),
136
+ version: z2.string().min(1),
137
+ tags: z2.array(z2.string()).optional(),
138
+ variables: z2.array(z2.string()).optional(),
139
+ metadata: z2.record(z2.string(), z2.unknown()).optional()
140
+ });
141
+
142
+ // ../../packages/core/dist/parser/frontmatter-parser.js
143
+ import matter from "gray-matter";
144
+ import { z as z3 } from "zod";
145
+ var typeDetectorSchema = z3.object({
146
+ type: z3.enum(["instruction", "prompt"])
147
+ });
148
+
149
+ export {
150
+ buildRecommendationPrompt,
151
+ parseChangelog,
152
+ announceableEntries
153
+ };
154
+ //# sourceMappingURL=chunk-K3BFZ7KG.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/core/src/llm/recommend.ts", "../../../packages/core/src/changelog/parse.ts", "../../../packages/core/src/types/instruction.ts", "../../../packages/core/src/types/prompt.ts", "../../../packages/core/src/parser/frontmatter-parser.ts"],
4
+ "sourcesContent": ["import type { ProjectContext, InstructionCandidate, Recommendation } from './types.js';\n\nexport type { ProjectContext, InstructionCandidate, Recommendation };\n\nexport function buildRecommendationPrompt(project: ProjectContext, candidates: InstructionCandidate[]): string {\n const candidateList = candidates\n .map((c) => `- ID: ${c.id}\\n Name: ${c.name}\\n Description: ${c.description}\\n Tags: ${c.tags.join(', ')}\\n Preview: ${c.contentPreview}`)\n .join('\\n\\n');\n\n return `You are an expert at matching AI coding instructions to software projects.\n\n## Project\n- Name: ${project.name}\n- Description: ${project.description ?? 'No description'}\n- Languages: ${project.languages.join(', ') || 'Unknown'}\n- Topics: ${project.topics.join(', ') || 'None'}\n- Dependencies: ${project.dependencies.join(', ') || 'None'}\n\n## Available Instructions\n\n${candidateList}\n\n## Task\n\nAnalyze the project and recommend which instructions would be most useful. Consider:\n1. Language and framework alignment\n2. Project purpose and what standards/practices would help\n3. Security, testing, and quality needs based on the project type\n\nReturn your response as JSON in this exact format:\n{\n \"recommendations\": [\n { \"instructionId\": \"<id>\", \"score\": <0.0-1.0>, \"reason\": \"<one sentence explanation>\" }\n ]\n}\n\nOnly include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`;\n}\n\nexport function parseRecommendationResponse(response: string): Recommendation[] {\n try {\n // Try to extract JSON from the response (handle markdown fences if present)\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) return [];\n\n const parsed = JSON.parse(jsonMatch[0]);\n if (!parsed.recommendations || !Array.isArray(parsed.recommendations)) return [];\n\n return parsed.recommendations.filter(\n (r: Record<string, unknown>) =>\n typeof r.instructionId === 'string' &&\n typeof r.score === 'number' &&\n typeof r.reason === 'string',\n ) as Recommendation[];\n } catch {\n return [];\n }\n}\n", "// Keep-a-Changelog parser. Pure function, no I/O.\n//\n// Grammar (the strict subset we accept):\n//\n// # Changelog\n// (any prose / front-matter before the first `## [` heading is ignored)\n//\n// ## [Unreleased]\n// ### Added\n// - item one\n// - item two\n//\n// ## [2026.06.05] - 2026-06-05\n// ### Added\n// - \u2026\n// ### Fixed\n// - \u2026\n//\n// Rules:\n// - Version headings MUST match `## [<version>]` with optional ` - <date>`.\n// - `[Unreleased]` is parsed but flagged so callers can skip it.\n// - Section headings MUST be `### <Name>` where Name is one of the\n// KNOWN_SECTIONS set. Unknown sections are dropped silently so a stray\n// `### Notes` doesn't end up in a customer email.\n// - List items are `- `-prefixed lines. Multi-line items (continuation\n// lines indented by 2+ spaces) are joined with a single space.\n// - Anything outside a recognized list is discarded.\n\nexport const KNOWN_SECTIONS = [\n 'Added',\n 'Changed',\n 'Fixed',\n 'Removed',\n 'Deprecated',\n 'Security',\n] as const;\n\nexport type SectionName = (typeof KNOWN_SECTIONS)[number];\n\nexport interface ChangelogEntry {\n /** Verbatim version string from the heading, e.g. \"2026.06.05\" or \"Unreleased\". */\n version: string;\n /** ISO date (YYYY-MM-DD) parsed from the heading. Null for Unreleased or when omitted. */\n date: string | null;\n /** True iff version === \"Unreleased\" (case-insensitive). */\n unreleased: boolean;\n /** Section name \u2192 list of items, preserving heading order. */\n sections: Partial<Record<SectionName, string[]>>;\n}\n\nexport interface ParsedChangelog {\n entries: ChangelogEntry[];\n}\n\nconst VERSION_HEADING = /^##\\s+\\[([^\\]]+)\\](?:\\s*[-\u2013]\\s*(\\d{4}-\\d{2}-\\d{2}))?\\s*$/;\nconst SECTION_HEADING = /^###\\s+(.+?)\\s*$/;\nconst LIST_ITEM = /^[-*]\\s+(.*\\S)\\s*$/;\nconst CONTINUATION = /^ {2,}(\\S.*)$/;\n\nexport function parseChangelog(markdown: string): ParsedChangelog {\n const lines = markdown.split(/\\r?\\n/);\n const entries: ChangelogEntry[] = [];\n let current: ChangelogEntry | null = null;\n let currentSection: SectionName | null = null;\n let lastItems: string[] | null = null;\n\n for (const raw of lines) {\n const versionMatch = raw.match(VERSION_HEADING);\n if (versionMatch) {\n if (current) entries.push(current);\n const version = versionMatch[1].trim();\n current = {\n version,\n date: versionMatch[2] ?? null,\n unreleased: version.toLowerCase() === 'unreleased',\n sections: {},\n };\n currentSection = null;\n lastItems = null;\n continue;\n }\n\n if (!current) continue;\n\n const sectionMatch = raw.match(SECTION_HEADING);\n if (sectionMatch) {\n const name = sectionMatch[1].trim();\n if ((KNOWN_SECTIONS as readonly string[]).includes(name)) {\n currentSection = name as SectionName;\n if (!current.sections[currentSection]) {\n current.sections[currentSection] = [];\n }\n lastItems = current.sections[currentSection]!;\n } else {\n currentSection = null;\n lastItems = null;\n }\n continue;\n }\n\n if (!currentSection || !lastItems) continue;\n\n const itemMatch = raw.match(LIST_ITEM);\n if (itemMatch) {\n lastItems.push(itemMatch[1]);\n continue;\n }\n\n const contMatch = raw.match(CONTINUATION);\n if (contMatch && lastItems.length > 0) {\n lastItems[lastItems.length - 1] += ' ' + contMatch[1].trim();\n continue;\n }\n\n // Blank line or unrelated content \u2014 terminates continuation for the\n // previous item but doesn't close the section.\n }\n\n if (current) entries.push(current);\n return { entries };\n}\n\n/**\n * Filter to entries worth announcing: skip `[Unreleased]` and any entry\n * whose sections are all empty. Caller does dedup against the DB.\n */\nexport function announceableEntries(parsed: ParsedChangelog): ChangelogEntry[] {\n return parsed.entries.filter((e) => {\n if (e.unreleased) return false;\n return Object.values(e.sections).some((items) => items && items.length > 0);\n });\n}\n", "import { z } from 'zod';\n\nexport const INSTRUCTION_SCOPES = ['org', 'team', 'project', 'personal'] as const;\nexport type InstructionScope = (typeof INSTRUCTION_SCOPES)[number];\n\nexport const instructionFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n type: z.literal('instruction').default('instruction'),\n scope: z.enum(INSTRUCTION_SCOPES),\n version: z.string().min(1),\n tags: z.array(z.string()).optional(),\n compatibility: z.array(z.string()).optional(),\n slots: z.record(z.string(), z.string()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type InstructionFrontmatter = z.infer<typeof instructionFrontmatterSchema>;\n\nexport interface Instruction {\n id: string;\n name: string;\n description: string;\n type: 'instruction';\n scope: InstructionScope;\n scopeRef: string | null;\n version: string;\n content: string;\n frontmatter: InstructionFrontmatter;\n slots: Record<string, string> | null;\n tags: string[];\n compatibility: string[];\n createdBy: string;\n createdAt: Date;\n updatedAt: Date;\n archived: boolean;\n}\n\nexport interface CreateInstructionInput {\n name: string;\n description: string;\n scope: InstructionScope;\n scopeRef?: string;\n version: string;\n content: string;\n tags?: string[];\n compatibility?: string[];\n}\n", "import { z } from 'zod';\n\nexport const promptFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n type: z.literal('prompt'),\n version: z.string().min(1),\n tags: z.array(z.string()).optional(),\n variables: z.array(z.string()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type PromptFrontmatter = z.infer<typeof promptFrontmatterSchema>;\n\nexport interface Prompt {\n id: string;\n name: string;\n description: string;\n type: 'prompt';\n version: string;\n content: string;\n frontmatter: PromptFrontmatter;\n variables: string[];\n tags: string[];\n createdBy: string;\n createdAt: Date;\n updatedAt: Date;\n}\n", "import matter from 'gray-matter';\nimport { z } from 'zod';\nimport { instructionFrontmatterSchema, type InstructionFrontmatter } from '../types/instruction.js';\nimport { promptFrontmatterSchema, type PromptFrontmatter } from '../types/prompt.js';\n\nexport interface ParsedInstruction {\n frontmatter: InstructionFrontmatter;\n content: string;\n slots: Record<string, string> | null;\n}\n\nexport interface ParsedPrompt {\n frontmatter: PromptFrontmatter;\n content: string;\n}\n\nexport type ParseResult =\n | { type: 'instruction'; data: ParsedInstruction }\n | { type: 'prompt'; data: ParsedPrompt };\n\nconst typeDetectorSchema = z.object({\n type: z.enum(['instruction', 'prompt']),\n});\n\nexport function parseInstruction(raw: string): ParsedInstruction {\n const { data, content } = matter(raw);\n const frontmatter = instructionFrontmatterSchema.parse(data);\n const slots = frontmatter.slots ?? null;\n\n return {\n frontmatter,\n content: content.trim(),\n slots,\n };\n}\n\nexport function parsePrompt(raw: string): ParsedPrompt {\n const { data, content } = matter(raw);\n const frontmatter = promptFrontmatterSchema.parse(data);\n\n return {\n frontmatter,\n content: content.trim(),\n };\n}\n\nexport function parse(raw: string): ParseResult {\n const { data } = matter(raw);\n const { type } = typeDetectorSchema.parse(data);\n\n if (type === 'instruction') {\n return { type: 'instruction', data: parseInstruction(raw) };\n }\n\n return { type: 'prompt', data: parsePrompt(raw) };\n}\n"],
5
+ "mappings": ";AAIM,SAAU,0BAA0B,SAAyB,YAAkC;AACjG,QAAM,gBAAgB,WACjB,IAAI,CAAC,MAAM,SAAS,EAAE,EAAE;UAAa,EAAE,IAAI;iBAAoB,EAAE,WAAW;UAAa,EAAE,KAAK,KAAK,IAAI,CAAC;aAAgB,EAAE,cAAc,EAAE,EAC5I,KAAK,MAAM;AAEhB,SAAO;;;UAGD,QAAQ,IAAI;iBACL,QAAQ,eAAe,gBAAgB;eACzC,QAAQ,UAAU,KAAK,IAAI,KAAK,SAAS;YAC5C,QAAQ,OAAO,KAAK,IAAI,KAAK,MAAM;kBAC7B,QAAQ,aAAa,KAAK,IAAI,KAAK,MAAM;;;;EAIzD,aAAa;;;;;;;;;;;;;;;;;AAiBf;;;ACTO,IAAM,iBAAiB;EAC5B;EACA;EACA;EACA;EACA;EACA;;AAoBF,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,YAAY;AAClB,IAAM,eAAe;AAEf,SAAU,eAAe,UAAgB;AAC7C,QAAM,QAAQ,SAAS,MAAM,OAAO;AACpC,QAAM,UAA4B,CAAA;AAClC,MAAI,UAAiC;AACrC,MAAI,iBAAqC;AACzC,MAAI,YAA6B;AAEjC,aAAW,OAAO,OAAO;AACvB,UAAM,eAAe,IAAI,MAAM,eAAe;AAC9C,QAAI,cAAc;AAChB,UAAI;AAAS,gBAAQ,KAAK,OAAO;AACjC,YAAM,UAAU,aAAa,CAAC,EAAE,KAAI;AACpC,gBAAU;QACR;QACA,MAAM,aAAa,CAAC,KAAK;QACzB,YAAY,QAAQ,YAAW,MAAO;QACtC,UAAU,CAAA;;AAEZ,uBAAiB;AACjB,kBAAY;AACZ;IACF;AAEA,QAAI,CAAC;AAAS;AAEd,UAAM,eAAe,IAAI,MAAM,eAAe;AAC9C,QAAI,cAAc;AAChB,YAAM,OAAO,aAAa,CAAC,EAAE,KAAI;AACjC,UAAK,eAAqC,SAAS,IAAI,GAAG;AACxD,yBAAiB;AACjB,YAAI,CAAC,QAAQ,SAAS,cAAc,GAAG;AACrC,kBAAQ,SAAS,cAAc,IAAI,CAAA;QACrC;AACA,oBAAY,QAAQ,SAAS,cAAc;MAC7C,OAAO;AACL,yBAAiB;AACjB,oBAAY;MACd;AACA;IACF;AAEA,QAAI,CAAC,kBAAkB,CAAC;AAAW;AAEnC,UAAM,YAAY,IAAI,MAAM,SAAS;AACrC,QAAI,WAAW;AACb,gBAAU,KAAK,UAAU,CAAC,CAAC;AAC3B;IACF;AAEA,UAAM,YAAY,IAAI,MAAM,YAAY;AACxC,QAAI,aAAa,UAAU,SAAS,GAAG;AACrC,gBAAU,UAAU,SAAS,CAAC,KAAK,MAAM,UAAU,CAAC,EAAE,KAAI;AAC1D;IACF;EAIF;AAEA,MAAI;AAAS,YAAQ,KAAK,OAAO;AACjC,SAAO,EAAE,QAAO;AAClB;AAMM,SAAU,oBAAoB,QAAuB;AACzD,SAAO,OAAO,QAAQ,OAAO,CAAC,MAAK;AACjC,QAAI,EAAE;AAAY,aAAO;AACzB,WAAO,OAAO,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,SAAS,MAAM,SAAS,CAAC;EAC5E,CAAC;AACH;;;ACnIA,SAAS,SAAS;AAEX,IAAM,qBAAqB,CAAC,OAAO,QAAQ,WAAW,UAAU;AAGhE,IAAM,+BAA+B,EAAE,OAAO;EACnD,MAAM,EAAE,OAAM,EAAG,IAAI,CAAC;EACtB,aAAa,EAAE,OAAM,EAAG,IAAI,CAAC;EAC7B,MAAM,EAAE,QAAQ,aAAa,EAAE,QAAQ,aAAa;EACpD,OAAO,EAAE,KAAK,kBAAkB;EAChC,SAAS,EAAE,OAAM,EAAG,IAAI,CAAC;EACzB,MAAM,EAAE,MAAM,EAAE,OAAM,CAAE,EAAE,SAAQ;EAClC,eAAe,EAAE,MAAM,EAAE,OAAM,CAAE,EAAE,SAAQ;EAC3C,OAAO,EAAE,OAAO,EAAE,OAAM,GAAI,EAAE,OAAM,CAAE,EAAE,SAAQ;EAChD,UAAU,EAAE,OAAO,EAAE,OAAM,GAAI,EAAE,QAAO,CAAE,EAAE,SAAQ;CACrD;;;ACfD,SAAS,KAAAA,UAAS;AAEX,IAAM,0BAA0BA,GAAE,OAAO;EAC9C,MAAMA,GAAE,OAAM,EAAG,IAAI,CAAC;EACtB,aAAaA,GAAE,OAAM,EAAG,IAAI,CAAC;EAC7B,MAAMA,GAAE,QAAQ,QAAQ;EACxB,SAASA,GAAE,OAAM,EAAG,IAAI,CAAC;EACzB,MAAMA,GAAE,MAAMA,GAAE,OAAM,CAAE,EAAE,SAAQ;EAClC,WAAWA,GAAE,MAAMA,GAAE,OAAM,CAAE,EAAE,SAAQ;EACvC,UAAUA,GAAE,OAAOA,GAAE,OAAM,GAAIA,GAAE,QAAO,CAAE,EAAE,SAAQ;CACrD;;;ACVD,OAAO,YAAY;AACnB,SAAS,KAAAC,UAAS;AAmBlB,IAAM,qBAAqBC,GAAE,OAAO;EAClC,MAAMA,GAAE,KAAK,CAAC,eAAe,QAAQ,CAAC;CACvC;",
6
+ "names": ["z", "z", "z"]
7
+ }
@@ -0,0 +1,51 @@
1
+ import {
2
+ fetchLaunchJobs
3
+ } from "./chunk-N52AHNBH.js";
4
+
5
+ // src/dashboard/launcher/useLaunchJobs.ts
6
+ import { useEffect, useState, useCallback, useRef } from "react";
7
+ var POLL_MS = 5e3;
8
+ function useLaunchJobs(limit = 20) {
9
+ const [jobs, setJobs] = useState([]);
10
+ const [error, setError] = useState(null);
11
+ const [loading, setLoading] = useState(true);
12
+ const cancelledRef = useRef(false);
13
+ const timerRef = useRef(null);
14
+ const genRef = useRef(0);
15
+ const poll = useCallback(async () => {
16
+ const gen = ++genRef.current;
17
+ try {
18
+ const data = await fetchLaunchJobs({ limit });
19
+ if (cancelledRef.current || gen !== genRef.current) return;
20
+ setJobs(data);
21
+ setError(null);
22
+ } catch (e) {
23
+ if (cancelledRef.current || gen !== genRef.current) return;
24
+ setError(e instanceof Error ? e.message : String(e));
25
+ } finally {
26
+ if (cancelledRef.current || gen !== genRef.current) return;
27
+ setLoading(false);
28
+ timerRef.current = setTimeout(() => {
29
+ void poll();
30
+ }, POLL_MS);
31
+ }
32
+ }, [limit]);
33
+ const refetch = useCallback(() => {
34
+ if (timerRef.current) clearTimeout(timerRef.current);
35
+ void poll();
36
+ }, [poll]);
37
+ useEffect(() => {
38
+ cancelledRef.current = false;
39
+ void poll();
40
+ return () => {
41
+ cancelledRef.current = true;
42
+ if (timerRef.current) clearTimeout(timerRef.current);
43
+ };
44
+ }, [poll]);
45
+ return { jobs, error, loading, refetch };
46
+ }
47
+
48
+ export {
49
+ useLaunchJobs
50
+ };
51
+ //# sourceMappingURL=chunk-KHJUQFIK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/dashboard/launcher/useLaunchJobs.ts"],
4
+ "sourcesContent": ["import { useEffect, useState, useCallback, useRef } from 'react';\nimport { fetchLaunchJobs } from './api.js';\nimport type { LaunchJob } from './types.js';\n\nconst POLL_MS = 5000;\n\nexport function useLaunchJobs(limit = 20) {\n const [jobs, setJobs] = useState<LaunchJob[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const cancelledRef = useRef(false);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const genRef = useRef(0);\n\n const poll = useCallback(async () => {\n const gen = ++genRef.current;\n try {\n const data = await fetchLaunchJobs({ limit });\n if (cancelledRef.current || gen !== genRef.current) return;\n setJobs(data);\n setError(null);\n } catch (e) {\n if (cancelledRef.current || gen !== genRef.current) return;\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n if (cancelledRef.current || gen !== genRef.current) return;\n setLoading(false);\n timerRef.current = setTimeout(() => {\n void poll();\n }, POLL_MS);\n }\n }, [limit]);\n\n const refetch = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n void poll();\n }, [poll]);\n\n useEffect(() => {\n cancelledRef.current = false;\n void poll();\n return () => {\n cancelledRef.current = true;\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [poll]);\n\n return { jobs, error, loading, refetch };\n}\n"],
5
+ "mappings": ";;;;;AAAA,SAAS,WAAW,UAAU,aAAa,cAAc;AAIzD,IAAM,UAAU;AAET,SAAS,cAAc,QAAQ,IAAI;AACxC,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,CAAC,CAAC;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,QAAM,eAAe,OAAO,KAAK;AACjC,QAAM,WAAW,OAA8B,IAAI;AACnD,QAAM,SAAS,OAAO,CAAC;AAEvB,QAAM,OAAO,YAAY,YAAY;AACnC,UAAM,MAAM,EAAE,OAAO;AACrB,QAAI;AACF,YAAM,OAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC;AAC5C,UAAI,aAAa,WAAW,QAAQ,OAAO,QAAS;AACpD,cAAQ,IAAI;AACZ,eAAS,IAAI;AAAA,IACf,SAAS,GAAG;AACV,UAAI,aAAa,WAAW,QAAQ,OAAO,QAAS;AACpD,eAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,IACrD,UAAE;AACA,UAAI,aAAa,WAAW,QAAQ,OAAO,QAAS;AACpD,iBAAW,KAAK;AAChB,eAAS,UAAU,WAAW,MAAM;AAClC,aAAK,KAAK;AAAA,MACZ,GAAG,OAAO;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,UAAU,YAAY,MAAM;AAChC,QAAI,SAAS,QAAS,cAAa,SAAS,OAAO;AACnD,SAAK,KAAK;AAAA,EACZ,GAAG,CAAC,IAAI,CAAC;AAET,YAAU,MAAM;AACd,iBAAa,UAAU;AACvB,SAAK,KAAK;AACV,WAAO,MAAM;AACX,mBAAa,UAAU;AACvB,UAAI,SAAS,QAAS,cAAa,SAAS,OAAO;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SAAO,EAAE,MAAM,OAAO,SAAS,QAAQ;AACzC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,41 @@
1
+ // src/lib/tmux.ts
2
+ import { spawn } from "node:child_process";
3
+ function tmuxSpawnEnv() {
4
+ const extraDirs = ["/opt/homebrew/bin", "/usr/local/bin"];
5
+ const parts = (process.env.PATH ?? "").split(":").filter(Boolean);
6
+ const missing = extraDirs.filter((d) => !parts.includes(d));
7
+ if (missing.length === 0) return process.env;
8
+ return { ...process.env, PATH: [...parts, ...missing].join(":") };
9
+ }
10
+ function runTmux(args) {
11
+ return new Promise((resolve) => {
12
+ const proc = spawn("tmux", args, {
13
+ stdio: ["ignore", "ignore", "pipe"],
14
+ env: tmuxSpawnEnv()
15
+ });
16
+ let stderr = "";
17
+ proc.stderr.on("data", (d) => {
18
+ stderr += d.toString();
19
+ });
20
+ proc.on("close", (code) => resolve({ code, stderr }));
21
+ proc.on("error", (err) => resolve({ code: null, stderr: err.message }));
22
+ });
23
+ }
24
+ function buildTmuxHasSessionArgs(target) {
25
+ return ["has-session", "-t", target];
26
+ }
27
+ function buildTmuxSendLiteralArgs(target, message) {
28
+ return ["send-keys", "-t", target, "-l", "--", message];
29
+ }
30
+ function buildTmuxSendEnterArgs(target) {
31
+ return ["send-keys", "-t", target, "Enter"];
32
+ }
33
+
34
+ export {
35
+ tmuxSpawnEnv,
36
+ runTmux,
37
+ buildTmuxHasSessionArgs,
38
+ buildTmuxSendLiteralArgs,
39
+ buildTmuxSendEnterArgs
40
+ };
41
+ //# sourceMappingURL=chunk-KRBQLMOP.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lib/tmux.ts"],
4
+ "sourcesContent": ["import { spawn } from 'node:child_process';\n\nexport interface TmuxRunResult {\n code: number | null;\n stderr: string;\n}\n\n// Homebrew installs tmux to /opt/homebrew/bin (Apple Silicon) or\n// /usr/local/bin (Intel). The launchd worker's minimal PATH omits\n// /opt/homebrew/bin, so a bare spawn('tmux') fails with ENOENT under launchd\n// \u2014 which silently flips every terminal target to `missing` and breaks live\n// send. Augment PATH at the spawn boundary. Mirrors the same fix in\n// packages/session terminal tmux (verified 2026-06-09).\nexport function tmuxSpawnEnv(): NodeJS.ProcessEnv {\n const extraDirs = ['/opt/homebrew/bin', '/usr/local/bin'];\n const parts = (process.env.PATH ?? '').split(':').filter(Boolean);\n const missing = extraDirs.filter((d) => !parts.includes(d));\n if (missing.length === 0) return process.env;\n return { ...process.env, PATH: [...parts, ...missing].join(':') };\n}\n\nexport function runTmux(args: string[]): Promise<TmuxRunResult> {\n return new Promise((resolve) => {\n const proc = spawn('tmux', args, {\n stdio: ['ignore', 'ignore', 'pipe'],\n env: tmuxSpawnEnv(),\n });\n let stderr = '';\n proc.stderr.on('data', (d: Buffer) => {\n stderr += d.toString();\n });\n proc.on('close', (code) => resolve({ code, stderr }));\n proc.on('error', (err) => resolve({ code: null, stderr: err.message }));\n });\n}\n\nexport function buildTmuxHasSessionArgs(target: string): string[] {\n return ['has-session', '-t', target];\n}\n\nexport function buildTmuxSendLiteralArgs(target: string, message: string): string[] {\n return ['send-keys', '-t', target, '-l', '--', message];\n}\n\nexport function buildTmuxSendEnterArgs(target: string): string[] {\n return ['send-keys', '-t', target, 'Enter'];\n}\n"],
5
+ "mappings": ";AAAA,SAAS,aAAa;AAaf,SAAS,eAAkC;AAChD,QAAM,YAAY,CAAC,qBAAqB,gBAAgB;AACxD,QAAM,SAAS,QAAQ,IAAI,QAAQ,IAAI,MAAM,GAAG,EAAE,OAAO,OAAO;AAChE,QAAM,UAAU,UAAU,OAAO,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;AAC1D,MAAI,QAAQ,WAAW,EAAG,QAAO,QAAQ;AACzC,SAAO,EAAE,GAAG,QAAQ,KAAK,MAAM,CAAC,GAAG,OAAO,GAAG,OAAO,EAAE,KAAK,GAAG,EAAE;AAClE;AAEO,SAAS,QAAQ,MAAwC;AAC9D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,OAAO,MAAM,QAAQ,MAAM;AAAA,MAC/B,OAAO,CAAC,UAAU,UAAU,MAAM;AAAA,MAClC,KAAK,aAAa;AAAA,IACpB,CAAC;AACD,QAAI,SAAS;AACb,SAAK,OAAO,GAAG,QAAQ,CAAC,MAAc;AACpC,gBAAU,EAAE,SAAS;AAAA,IACvB,CAAC;AACD,SAAK,GAAG,SAAS,CAAC,SAAS,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;AACpD,SAAK,GAAG,SAAS,CAAC,QAAQ,QAAQ,EAAE,MAAM,MAAM,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAAA,EACxE,CAAC;AACH;AAEO,SAAS,wBAAwB,QAA0B;AAChE,SAAO,CAAC,eAAe,MAAM,MAAM;AACrC;AAEO,SAAS,yBAAyB,QAAgB,SAA2B;AAClF,SAAO,CAAC,aAAa,MAAM,QAAQ,MAAM,MAAM,OAAO;AACxD;AAEO,SAAS,uBAAuB,QAA0B;AAC/D,SAAO,CAAC,aAAa,MAAM,QAAQ,OAAO;AAC5C;",
6
+ "names": []
7
+ }