reflex-agent 0.18.2 → 0.19.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 (313) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +101 -102
  3. package/.next/app-path-routes-manifest.json +9 -9
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +1 -1
  7. package/.next/required-server-files.json +2 -1
  8. package/.next/server/app/_not-found/page.js +1 -1
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/agents/[agentId]/page.js +2 -2
  12. package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
  13. package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/agents/[agentId]/respond/route.js +1 -1
  15. package/.next/server/app/api/agents/[agentId]/respond/route.js.nft.json +1 -1
  16. package/.next/server/app/api/agents/[agentId]/respond/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/images/[rootId]/[file]/route.js +1 -1
  18. package/.next/server/app/api/images/[rootId]/[file]/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/oauth/callback/route.js +2 -2
  20. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/oauth/start/route.js +1 -1
  22. package/.next/server/app/api/oauth/start/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/roots/[id]/attachments/route.js +0 -0
  24. package/.next/server/app/api/roots/[id]/attachments/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route.js +1 -1
  26. package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route.js.nft.json +1 -1
  27. package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route.js +1 -1
  29. package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route.js.nft.json +1 -1
  30. package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route.js +2 -2
  32. package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route.js.nft.json +1 -1
  33. package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/roots/[id]/dashboard/route.js +1 -1
  35. package/.next/server/app/api/roots/[id]/dashboard/route.js.nft.json +1 -1
  36. package/.next/server/app/api/roots/[id]/dashboard/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/roots/[id]/suggestions/route.js +1 -1
  38. package/.next/server/app/api/roots/[id]/suggestions/route.js.nft.json +1 -1
  39. package/.next/server/app/api/roots/[id]/suggestions/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/utilities/[scope]/[id]/bundle.js/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/utilities/[scope]/[id]/host/route.js +1 -1
  42. package/.next/server/app/api/utilities/[scope]/[id]/host/route.js.nft.json +1 -1
  43. package/.next/server/app/api/utilities/[scope]/[id]/host/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/utilities/[scope]/[id]/host-api.mjs/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/utilities/[scope]/[id]/host-ui.mjs/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/utilities/[scope]/[id]/iframe/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/utilities/[scope]/[id]/style.css/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/utilities/install-archive/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/audit/page.js +2 -2
  50. package/.next/server/app/audit/page.js.nft.json +1 -1
  51. package/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app/dispatcher/page.js +2 -2
  53. package/.next/server/app/dispatcher/page.js.nft.json +1 -1
  54. package/.next/server/app/dispatcher/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/onboarding/page.js +3 -3
  56. package/.next/server/app/onboarding/page.js.nft.json +1 -1
  57. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/page.js +2 -2
  59. package/.next/server/app/page.js.nft.json +1 -1
  60. package/.next/server/app/page_client-reference-manifest.js +1 -1
  61. package/.next/server/app/roots/[id]/chat/[topicId]/page.js +2 -2
  62. package/.next/server/app/roots/[id]/chat/[topicId]/page.js.nft.json +1 -1
  63. package/.next/server/app/roots/[id]/chat/[topicId]/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/roots/[id]/kb/[...slug]/page.js +2 -2
  65. package/.next/server/app/roots/[id]/kb/[...slug]/page.js.nft.json +1 -1
  66. package/.next/server/app/roots/[id]/kb/[...slug]/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/roots/[id]/memory/page.js +2 -2
  68. package/.next/server/app/roots/[id]/memory/page.js.nft.json +1 -1
  69. package/.next/server/app/roots/[id]/memory/page_client-reference-manifest.js +1 -1
  70. package/.next/server/app/roots/[id]/page.js +4 -4
  71. package/.next/server/app/roots/[id]/page.js.nft.json +1 -1
  72. package/.next/server/app/roots/[id]/page_client-reference-manifest.js +1 -1
  73. package/.next/server/app/roots/[id]/workflows/[wfId]/page.js +2 -2
  74. package/.next/server/app/roots/[id]/workflows/[wfId]/page.js.nft.json +1 -1
  75. package/.next/server/app/roots/[id]/workflows/[wfId]/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app/roots/[id]/workflows/page.js +2 -2
  77. package/.next/server/app/roots/[id]/workflows/page.js.nft.json +1 -1
  78. package/.next/server/app/roots/[id]/workflows/page_client-reference-manifest.js +1 -1
  79. package/.next/server/app/roots/new/page.js +4 -4
  80. package/.next/server/app/roots/new/page.js.nft.json +1 -1
  81. package/.next/server/app/roots/new/page_client-reference-manifest.js +1 -1
  82. package/.next/server/app/settings/page.js +5 -5
  83. package/.next/server/app/settings/page.js.nft.json +1 -1
  84. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/share/[id]/file/page.js +2 -2
  86. package/.next/server/app/share/[id]/file/page.js.nft.json +1 -1
  87. package/.next/server/app/share/[id]/file/page_client-reference-manifest.js +1 -1
  88. package/.next/server/app/share/[id]/page.js +2 -2
  89. package/.next/server/app/share/[id]/page.js.nft.json +1 -1
  90. package/.next/server/app/share/[id]/page_client-reference-manifest.js +1 -1
  91. package/.next/server/app/utilities/[scope]/[id]/page.js +2 -2
  92. package/.next/server/app/utilities/[scope]/[id]/page.js.nft.json +1 -1
  93. package/.next/server/app/utilities/[scope]/[id]/page_client-reference-manifest.js +1 -1
  94. package/.next/server/app/utilities/page.js +2 -2
  95. package/.next/server/app/utilities/page.js.nft.json +1 -1
  96. package/.next/server/app/utilities/page_client-reference-manifest.js +1 -1
  97. package/.next/server/app-paths-manifest.json +9 -9
  98. package/.next/server/chunks/{6435.js → 1088.js} +1 -1
  99. package/.next/server/chunks/1105.js +1 -1
  100. package/.next/server/chunks/1179.js +1 -0
  101. package/.next/server/chunks/1223.js +1 -1
  102. package/.next/server/chunks/1244.js +1 -1
  103. package/.next/server/chunks/1281.js +80 -0
  104. package/.next/server/chunks/1336.js +252 -0
  105. package/.next/server/chunks/1353.js +51 -0
  106. package/.next/server/chunks/1431.js +1 -0
  107. package/.next/server/chunks/146.js +2 -0
  108. package/.next/server/chunks/1491.js +79 -0
  109. package/.next/server/chunks/1496.js +148 -0
  110. package/.next/server/chunks/{9631.js → 1589.js} +2 -2
  111. package/.next/server/chunks/1623.js +1 -0
  112. package/.next/server/chunks/1862.js +77 -0
  113. package/.next/server/chunks/1888.js +1 -1
  114. package/.next/server/chunks/1908.js +1 -0
  115. package/.next/server/chunks/192.js +1 -0
  116. package/.next/server/chunks/2069.js +1 -0
  117. package/.next/server/chunks/2087.js +24 -0
  118. package/.next/server/chunks/209.js +1 -0
  119. package/.next/server/chunks/2115.js +77 -0
  120. package/.next/server/chunks/2232.js +80 -0
  121. package/.next/server/chunks/{4460.js → 2262.js} +2 -2
  122. package/.next/server/chunks/2280.js +1 -0
  123. package/.next/server/chunks/2433.js +1 -1
  124. package/.next/server/chunks/2485.js +3 -8
  125. package/.next/server/chunks/2503.js +1 -1
  126. package/.next/server/chunks/2539.js +93 -0
  127. package/.next/server/chunks/2764.js +80 -0
  128. package/.next/server/chunks/285.js +24 -75
  129. package/.next/server/chunks/2888.js +7 -0
  130. package/.next/server/chunks/302.js +1 -0
  131. package/.next/server/chunks/3029.js +36 -0
  132. package/.next/server/chunks/3110.js +0 -0
  133. package/.next/server/chunks/3117.js +1 -0
  134. package/.next/server/chunks/3258.js +23 -0
  135. package/.next/server/chunks/331.js +1 -0
  136. package/.next/server/chunks/3332.js +1 -1
  137. package/.next/server/chunks/{4251.js → 3474.js} +24 -25
  138. package/.next/server/chunks/3552.js +43 -0
  139. package/.next/server/chunks/3583.js +104 -0
  140. package/.next/server/chunks/3631.js +1 -0
  141. package/.next/server/chunks/3633.js +1 -0
  142. package/.next/server/chunks/383.js +1 -80
  143. package/.next/server/chunks/3834.js +1 -1
  144. package/.next/server/chunks/3953.js +1 -0
  145. package/.next/server/chunks/3992.js +1 -0
  146. package/.next/server/chunks/4013.js +1 -0
  147. package/.next/server/chunks/4031.js +3 -3
  148. package/.next/server/chunks/4119.js +1 -0
  149. package/.next/server/chunks/4230.js +12 -0
  150. package/.next/server/chunks/4250.js +1 -0
  151. package/.next/server/chunks/4294.js +1 -0
  152. package/.next/server/chunks/4312.js +1 -0
  153. package/.next/server/chunks/4342.js +1 -0
  154. package/.next/server/chunks/4360.js +1 -0
  155. package/.next/server/chunks/449.js +226 -0
  156. package/.next/server/chunks/4578.js +0 -0
  157. package/.next/server/chunks/4585.js +1 -0
  158. package/.next/server/chunks/4611.js +1 -1
  159. package/.next/server/chunks/4639.js +1 -0
  160. package/.next/server/chunks/4682.js +1 -0
  161. package/.next/server/chunks/4788.js +153 -0
  162. package/.next/server/chunks/4812.js +2 -2
  163. package/.next/server/chunks/4925.js +1 -1
  164. package/.next/server/chunks/4952.js +1 -0
  165. package/.next/server/chunks/4969.js +4 -1
  166. package/.next/server/chunks/4989.js +801 -0
  167. package/.next/server/chunks/5211.js +64 -0
  168. package/.next/server/chunks/5243.js +1 -1
  169. package/.next/server/chunks/5308.js +1 -0
  170. package/.next/server/chunks/5461.js +1 -0
  171. package/.next/server/chunks/5549.js +1 -0
  172. package/.next/server/chunks/5719.js +34 -0
  173. package/.next/server/chunks/5810.js +12 -0
  174. package/.next/server/chunks/5922.js +1 -0
  175. package/.next/server/chunks/6142.js +1 -1
  176. package/.next/server/chunks/6216.js +1 -1
  177. package/.next/server/chunks/6318.js +9 -0
  178. package/.next/server/chunks/6483.js +1 -1
  179. package/.next/server/chunks/6509.js +1 -0
  180. package/.next/server/chunks/6571.js +166 -0
  181. package/.next/server/chunks/660.js +1 -0
  182. package/.next/server/chunks/6692.js +1 -0
  183. package/.next/server/chunks/6730.js +1 -1
  184. package/.next/server/chunks/6852.js +1 -0
  185. package/.next/server/chunks/6970.js +1 -0
  186. package/.next/server/chunks/7007.js +1 -0
  187. package/.next/server/chunks/7188.js +1 -1
  188. package/.next/server/chunks/7220.js +1 -1
  189. package/.next/server/chunks/7228.js +1 -0
  190. package/.next/server/chunks/7244.js +1 -0
  191. package/.next/server/chunks/7373.js +90 -0
  192. package/.next/server/chunks/7430.js +1 -1
  193. package/.next/server/chunks/7523.js +1 -0
  194. package/.next/server/chunks/7576.js +1 -0
  195. package/.next/server/chunks/7742.js +7 -0
  196. package/.next/server/chunks/7811.js +215 -0
  197. package/.next/server/chunks/7885.js +1 -0
  198. package/.next/server/chunks/8032.js +3 -0
  199. package/.next/server/chunks/8095.js +24 -0
  200. package/.next/server/chunks/8129.js +5 -0
  201. package/.next/server/chunks/8294.js +1 -0
  202. package/.next/server/chunks/832.js +1 -0
  203. package/.next/server/chunks/8464.js +180 -0
  204. package/.next/server/chunks/8511.js +0 -0
  205. package/.next/server/chunks/8514.js +1 -1
  206. package/.next/server/chunks/8583.js +4 -0
  207. package/.next/server/chunks/8609.js +55 -0
  208. package/.next/server/chunks/8711.js +1 -0
  209. package/.next/server/chunks/8714.js +1 -0
  210. package/.next/server/chunks/8730.js +1 -0
  211. package/.next/server/chunks/8868.js +1 -0
  212. package/.next/server/chunks/9048.js +1 -0
  213. package/.next/server/chunks/9058.js +1 -0
  214. package/.next/server/chunks/9062.js +1 -0
  215. package/.next/server/chunks/9094.js +1 -0
  216. package/.next/server/chunks/9098.js +1 -1
  217. package/.next/server/chunks/9099.js +1 -0
  218. package/.next/server/chunks/9171.js +287 -0
  219. package/.next/server/chunks/9181.js +1 -0
  220. package/.next/server/chunks/9293.js +1 -1
  221. package/.next/server/chunks/9478.js +1 -0
  222. package/.next/server/chunks/9494.js +141 -0
  223. package/.next/server/chunks/952.js +1 -0
  224. package/.next/server/chunks/9600.js +1 -0
  225. package/.next/server/chunks/9607.js +29 -0
  226. package/.next/server/chunks/9653.js +115 -0
  227. package/.next/server/chunks/9784.js +1 -0
  228. package/.next/server/chunks/9798.js +1 -0
  229. package/.next/server/chunks/9990.js +1 -0
  230. package/.next/server/edge-instrumentation.js +2 -0
  231. package/.next/server/edge-instrumentation.js.map +1 -0
  232. package/.next/server/functions-config-manifest.json +3 -3
  233. package/.next/server/instrumentation.js +1 -0
  234. package/.next/server/instrumentation.js.nft.json +1 -0
  235. package/.next/server/middleware-build-manifest.js +1 -1
  236. package/.next/server/middleware-manifest.json +6 -5
  237. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  238. package/.next/server/pages/500.html +1 -1
  239. package/.next/server/pages/_error.js +3 -3
  240. package/.next/server/server-reference-manifest.js +1 -1
  241. package/.next/server/server-reference-manifest.json +1 -1
  242. package/.next/static/chunks/3363-f417b308a8cd156d.js +1 -0
  243. package/.next/static/chunks/3686-0107521d2c14950c.js +1 -0
  244. package/.next/static/chunks/3695-3576767108de7f38.js +1 -0
  245. package/.next/static/chunks/4108.19abaa6d618295ed.js +1 -0
  246. package/.next/static/chunks/5933-4013a6dab4565b5e.js +1 -0
  247. package/.next/static/chunks/7425-9684ea815b4b1731.js +1 -0
  248. package/.next/static/chunks/7552-def8a17828891c8c.js +1 -0
  249. package/.next/static/chunks/8776-2df966dd98c68fd7.js +1 -0
  250. package/.next/static/chunks/app/layout-baad68d32b917b8f.js +1 -0
  251. package/.next/static/chunks/app/onboarding/page-b1b1e6a4467ed781.js +1 -0
  252. package/.next/static/chunks/app/page-556a2139313c3c71.js +1 -0
  253. package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-52223811258d07b2.js +1 -0
  254. package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-0df769f27549cd16.js +1 -0
  255. package/.next/static/chunks/app/roots/[id]/memory/{page-4edc11023d8a13fd.js → page-1f6bc3a624b141a5.js} +1 -1
  256. package/.next/static/chunks/app/roots/[id]/page-17493991b2d391b3.js +1 -0
  257. package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-a21fe3541418a80a.js +1 -0
  258. package/.next/static/chunks/app/roots/[id]/workflows/page-0952e5fb53d53c3e.js +1 -0
  259. package/.next/static/chunks/app/roots/new/{page-98d64261cc2ae2a1.js → page-4f571184c1856103.js} +1 -1
  260. package/.next/static/chunks/app/settings/page-8c0ad1c1856da988.js +1 -0
  261. package/.next/static/chunks/app/share/[id]/page-b27a0bc7b9c6cda9.js +1 -0
  262. package/.next/static/chunks/app/utilities/[scope]/[id]/page-0fe4c377098064d5.js +1 -0
  263. package/.next/static/chunks/app/utilities/page-445933dcd5a500ae.js +1 -0
  264. package/.next/static/chunks/{webpack-dbfe1e5d0f7f7a98.js → webpack-88066a85eb2d605f.js} +1 -1
  265. package/.next/trace +116 -90
  266. package/dist/lib/reflex/ids.js +66 -0
  267. package/dist/lib/reflex/ids.js.map +1 -0
  268. package/dist/lib/reflex/paths.js +26 -0
  269. package/dist/lib/reflex/paths.js.map +1 -1
  270. package/dist/lib/reflex/store/json-store.js +50 -0
  271. package/dist/lib/reflex/store/json-store.js.map +1 -0
  272. package/package.json +10 -6
  273. package/.next/server/chunks/133.js +0 -1
  274. package/.next/server/chunks/1358.js +0 -1
  275. package/.next/server/chunks/2389.js +0 -4
  276. package/.next/server/chunks/2787.js +0 -1
  277. package/.next/server/chunks/3240.js +0 -1
  278. package/.next/server/chunks/3295.js +0 -1
  279. package/.next/server/chunks/4842.js +0 -1
  280. package/.next/server/chunks/5319.js +0 -1
  281. package/.next/server/chunks/5543.js +0 -1
  282. package/.next/server/chunks/569.js +0 -1
  283. package/.next/server/chunks/6356.js +0 -3
  284. package/.next/server/chunks/7229.js +0 -2
  285. package/.next/server/chunks/7607.js +0 -1
  286. package/.next/server/chunks/8040.js +0 -1
  287. package/.next/server/chunks/8124.js +0 -1
  288. package/.next/server/chunks/8576.js +0 -7
  289. package/.next/server/chunks/9809.js +0 -1
  290. package/.next/server/chunks/9835.js +0 -1
  291. package/.next/static/chunks/2885-3b6efe9070ae7699.js +0 -1
  292. package/.next/static/chunks/334-e9ffb96d6720ee5b.js +0 -1
  293. package/.next/static/chunks/4108.a04c1e0b768f6392.js +0 -1
  294. package/.next/static/chunks/5371-f2503fe0dffea57d.js +0 -1
  295. package/.next/static/chunks/5744-eccd279a734c778c.js +0 -1
  296. package/.next/static/chunks/6568-e4d2de23d9f8d347.js +0 -1
  297. package/.next/static/chunks/6642-02be14d0b5ca62b7.js +0 -1
  298. package/.next/static/chunks/8566-5d4c89b722d9cee1.js +0 -1
  299. package/.next/static/chunks/8775-890699c74c28df61.js +0 -1
  300. package/.next/static/chunks/app/layout-48a6fb46c228b814.js +0 -1
  301. package/.next/static/chunks/app/onboarding/page-06103f281ff3f063.js +0 -1
  302. package/.next/static/chunks/app/page-eed31ba1b952cf24.js +0 -1
  303. package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-5fc17c5819406917.js +0 -1
  304. package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-a52b2005a7e538ca.js +0 -1
  305. package/.next/static/chunks/app/roots/[id]/page-0f0d498f4b4bd7bf.js +0 -1
  306. package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-f93d6b1bb29e79f0.js +0 -1
  307. package/.next/static/chunks/app/roots/[id]/workflows/page-562913d54bcd08d5.js +0 -1
  308. package/.next/static/chunks/app/settings/page-7a4d8a407fbe5ed8.js +0 -1
  309. package/.next/static/chunks/app/share/[id]/page-a0540dba09771e84.js +0 -1
  310. package/.next/static/chunks/app/utilities/[scope]/[id]/page-2cee9be029f211c6.js +0 -1
  311. package/.next/static/chunks/app/utilities/page-197156f16167514e.js +0 -1
  312. /package/.next/static/{kKiRbrTiD77WXduAvKNfN → EXoiX_YvMRCB6oNXqJnaz}/_buildManifest.js +0 -0
  313. /package/.next/static/{kKiRbrTiD77WXduAvKNfN → EXoiX_YvMRCB6oNXqJnaz}/_ssgManifest.js +0 -0
@@ -1,10 +1,10 @@
1
- "use strict";exports.id=4251,exports.ids=[1244,2787,3295,4251,5243,7188,8124,9835],exports.modules={330:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{f:()=>h});var e=c(18542),f=c(80958),g=a([e]);async function h(a){let b=[],c=await i({scope:"global"},"About the user");if(c&&b.push(c),a?.rootPath){let c=await i({scope:"project",rootPath:a.rootPath},"About this project");c&&b.push(c)}return b.join("\n\n")}async function i(a,b){let c=await (0,e.ab)(a),d=f.cs.filter(a=>1===f.a9[a]&&c[a].content),g=f.cs.filter(a=>2===f.a9[a]&&c[a].content),h=f.cs.filter(a=>3===f.a9[a]&&c[a].content);if(0===d.length&&0===g.length&&0===h.length)return"";let i=[`## ${b}`];if(d.length>0)for(let a of(i.push("### Identity"),d))i.push(j(a,c[a].content));if(g.length>0)for(let a of(i.push("### Current"),g))i.push(j(a,c[a].content));if(h.length>0)for(let a of(i.push("### Last 7 days"),h))i.push(j(a,c[a].content));return i.join("\n")}function j(a,b){return[`**${a}**`,b.trim()].join("\n")}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},911:(a,b,c)=>{c.d(b,{F8:()=>m,Qr:()=>k,pV:()=>l});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);let j=new Set(["topics","attachments","data","audit"]);async function k(a){let b=(0,i.FF)(a),c=new Map;return await n(b,b,c),{files:c}}async function l(a,b){let c=(0,i.FF)(a),d=new Map;await n(c,c,d);let e=[];for(let[a,g]of d){let d=b.files.get(a);if(void 0!==d&&d>=g)continue;let h=f().relative(c,a).split(f().sep).join("/");e.push({abs:a,rel:h,...await o(a)})}return e}async function m(a,b){let c=(0,i.FF)(a),e=new Set;for(let a of b){if("index.md"===f().basename(a.abs).toLowerCase())continue;let b=f().dirname(a.abs),g=f().join(b,"INDEX.md"),h=await p(g),i=f().basename(a.abs),j=a.title??i.replace(/\.md$/,""),k=a.kind?` _(${a.kind})_`:"",l=`- [${j}](./${i})${k}`,m=h?await d.promises.readFile(g,"utf8"):"";if(!function(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return RegExp(`]\\(\\.?/?${c}\\)`).test(a)}(m,i)){if(h)/\n## Files\b/i.test(m)?m.endsWith("\n")||(m+="\n"):m=m.trimEnd()+"\n\n## Files\n\n";else{let a=f().relative(c,b)||".";m=`# ${a}
1
+ "use strict";exports.id=3474,exports.ids=[3474,4342,9048],exports.modules={330:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{f:()=>h});var e=c(18542),f=c(80958),g=a([e]);async function h(a){let b=[],c=await i({scope:"global"},"About the user");if(c&&b.push(c),a?.rootPath){let c=await i({scope:"project",rootPath:a.rootPath},"About this project");c&&b.push(c)}return b.join("\n\n")}async function i(a,b){let c=await (0,e.ab)(a),d=f.cs.filter(a=>1===f.a9[a]&&c[a].content),g=f.cs.filter(a=>2===f.a9[a]&&c[a].content),h=f.cs.filter(a=>3===f.a9[a]&&c[a].content);if(0===d.length&&0===g.length&&0===h.length)return"";let i=[`## ${b}`];if(d.length>0)for(let a of(i.push("### Identity"),d))i.push(j(a,c[a].content));if(g.length>0)for(let a of(i.push("### Current"),g))i.push(j(a,c[a].content));if(h.length>0)for(let a of(i.push("### Last 7 days"),h))i.push(j(a,c[a].content));return i.join("\n")}function j(a,b){return[`**${a}**`,b.trim()].join("\n")}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},911:(a,b,c)=>{c.d(b,{F8:()=>m,Qr:()=>k,pV:()=>l});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);let j=new Set(["topics","attachments","data","audit"]);async function k(a){let b=(0,i.FF)(a),c=new Map;return await n(b,b,c),{files:c}}async function l(a,b){let c=(0,i.FF)(a),d=new Map;await n(c,c,d);let e=[];for(let[a,g]of d){let d=b.files.get(a);if(void 0!==d&&d>=g)continue;let h=f().relative(c,a).split(f().sep).join("/");e.push({abs:a,rel:h,...await o(a)})}return e}async function m(a,b){let c=(0,i.FF)(a),e=new Set;for(let a of b){if("index.md"===f().basename(a.abs).toLowerCase())continue;let b=f().dirname(a.abs),g=f().join(b,"INDEX.md"),h=await p(g),i=f().basename(a.abs),j=a.title??i.replace(/\.md$/,""),k=a.kind?` _(${a.kind})_`:"",l=`- [${j}](./${i})${k}`,m=h?await d.promises.readFile(g,"utf8"):"";if(!function(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return RegExp(`]\\(\\.?/?${c}\\)`).test(a)}(m,i)){if(h)/\n## Files\b/i.test(m)?m.endsWith("\n")||(m+="\n"):m=m.trimEnd()+"\n\n## Files\n\n";else{let a=f().relative(c,b)||".";m=`# ${a}
2
2
 
3
3
  Auto-generated index. Edit freely — Reflex only appends new entries below.
4
4
 
5
5
  ## Files
6
6
 
7
- `}m+=l+"\n",await d.promises.writeFile(g,m,"utf8"),e.add(g)}}return[...e]}async function n(a,b,c){let e;try{e=await d.promises.readdir(b,{withFileTypes:!0})}catch{return}for(let g of e){if(g.isDirectory()){if(b===a&&j.has(g.name)||"utilities"===g.name)continue;await n(a,f().join(b,g.name),c);continue}if(!g.name.toLowerCase().endsWith(".md"))continue;let e=f().join(b,g.name);try{let a=await d.promises.stat(e);c.set(e,a.mtimeMs)}catch{}}}async function o(a){try{let b=await d.promises.readFile(a,"utf8");if(!b.startsWith("---"))return{};let c=h()(b).data,e={};return"string"==typeof c.title&&(e.title=c.title),"string"==typeof c.kind&&(e.kind=c.kind),e}catch{return{}}}async function p(a){try{return await d.promises.access(a),!0}catch{return!1}}},1701:(a,b,c)=>{c.d(b,{GC:()=>l,Mn:()=>m,az:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(29163);let h=f().join((0,g._)(),"pending-mcp-adds.json");async function i(){try{let a=await d.promises.readFile(h,"utf8"),b=JSON.parse(a);if(1!==b.version||!Array.isArray(b.entries))return{version:1,entries:[]};return b}catch{return{version:1,entries:[]}}}async function j(a){await d.promises.mkdir(f().dirname(h),{recursive:!0}),await d.promises.writeFile(h,JSON.stringify(a,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(h,384)}catch{}}function k(a){let b=Date.now()-2592e6;return{version:1,entries:a.entries.filter(a=>{let c=Date.parse(a.createdAt);return Number.isFinite(c)&&c>b})}}async function l(a){let b=k(await i());b.entries=b.entries.filter(b=>b.requestId!==a.requestId),b.entries.push({...a,createdAt:new Date().toISOString()}),await j(b)}async function m(){return k(await i()).entries}async function n(a){let b=k(await i()),c=b.entries.findIndex(b=>b.requestId===a);if(c<0)return null;let d=b.entries[c];return b.entries.splice(c,1),await j(b),d}},2787:(a,b,c)=>{c.d(b,{createTask:()=>o,deleteTask:()=>s,getTask:()=>q,listTasks:()=>p,updateTask:()=>r});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(30192),j=c.n(i),k=c(13474),l=c(11178),m=c(75207);let n="task";async function o(a,b){let c=`t-${h().randomBytes(4).toString("hex")}`,e=b.title.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||c,g=new Date().toISOString().slice(0,10),i=`${g}-${e}.md`,j=f().join((0,k.FF)(a),n);await d.promises.mkdir(j,{recursive:!0});let l=await v(j,i),m={id:c,title:b.title.trim(),type:b.type??"feature",status:b.status??"backlog",priority:b.priority??"normal",labels:b.labels??[],assignee:b.assignee??null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),topicId:null,agentRequested:null,worktree:null,links:b.links??{},parent:b.parent??null,pre:b.pre??[],post:b.post??[],attachments:b.attachments??[],relPath:f().relative((0,k.FF)(a),l).split(f().sep).join("/"),body:(b.body??"").trim()};return await u(l,m),m}async function p(a){let b=await (0,l.dj)(a).catch(()=>[]),c=[];for(let d of b){if(d.meta.kind!==n)continue;let b=await t(d.abs,a).catch(()=>null);b&&c.push(b)}return c.sort((a,b)=>a.updatedAt<b.updatedAt?1:-1),c}async function q(a,b){return(await p(a)).find(a=>a.id===b)??null}async function r(a,b,c){let d=await q(a,b);if(!d)return null;let e=f().join((0,k.FF)(a),d.relPath),g={...d,...c,updatedAt:new Date().toISOString()};return await u(e,g),g}async function s(a,b){let c=await q(a,b);if(!c)return!1;let e=f().join((0,k.FF)(a),c.relPath);return await d.promises.rm(e,{force:!0}),!0}async function t(a,b){var c,e,g;let h=await d.promises.readFile(a,"utf8"),i=j()(h),l=i.data,n="string"==typeof l.id?l.id:null,o="string"==typeof l.title?l.title:null;if(!n||!o)return null;let p=f().relative((0,k.FF)(b),a).split(f().sep).join("/");return{id:n,title:o,type:x(l.type,m.ci,"feature"),status:x(l.status,m.Hi,"backlog"),priority:x(l.priority,m.PN,"normal"),labels:Array.isArray(l.labels)?l.labels.map(String):[],assignee:"string"==typeof l.assignee?l.assignee:null,createdAt:"string"==typeof l.createdAt?l.createdAt:new Date().toISOString(),updatedAt:"string"==typeof l.updatedAt?l.updatedAt:new Date().toISOString(),topicId:"string"==typeof l.topicId?l.topicId:null,agentRequested:"string"==typeof l.agentRequested?l.agentRequested:null,worktree:(c=l.worktree)&&"object"==typeof c&&"string"==typeof c.dir&&"string"==typeof c.branch&&"string"==typeof c.baseRef?{dir:c.dir,branch:c.branch,baseRef:c.baseRef}:null,links:(e=l.links)&&"object"==typeof e?{...Array.isArray(e.blocks)?{blocks:e.blocks.map(String)}:{},...Array.isArray(e.blockedBy)?{blockedBy:e.blockedBy.map(String)}:{},...Array.isArray(e.related)?{related:e.related.map(String)}:{}}:{},parent:"string"==typeof l.parent?l.parent:null,pre:y(l.pre),post:y(l.post),attachments:Array.isArray(g=l.attachments)?g.map(a=>{if(!a||"object"!=typeof a)return null;let b=a.kind;return"image"!==b&&"text"!==b&&"file"!==b||"string"!=typeof a.file?null:{kind:b,file:a.file,..."string"==typeof a.caption?{caption:a.caption}:{}}}).filter(a=>!!a):[],relPath:p,body:i.content.trim()}}async function u(a,b){let c={id:b.id,title:b.title,kind:n,type:b.type,status:b.status,priority:b.priority,labels:b.labels,assignee:b.assignee,createdAt:b.createdAt,updatedAt:b.updatedAt,topicId:b.topicId,agentRequested:b.agentRequested,worktree:b.worktree,links:b.links,parent:b.parent,pre:b.pre,post:b.post,attachments:b.attachments},e=b.body.trim(),g=j().stringify(e?e+"\n":"",c);await d.promises.mkdir(f().dirname(a),{recursive:!0}),await d.promises.writeFile(a,g,"utf8")}async function v(a,b){let c=f().extname(b),d=b.slice(0,b.length-c.length),e=f().join(a,b),g=2;for(;await w(e);)e=f().join(a,`${d}-${g}${c}`),g++;return e}async function w(a){try{return await d.promises.stat(a),!0}catch{return!1}}function x(a,b,c){return"string"==typeof a&&b.includes(a)?a:c}function y(a){return Array.isArray(a)?a.map(a=>a&&"object"==typeof a?"workflow"===a.kind&&"string"==typeof a.id?{kind:"workflow",id:a.id}:"chat"===a.kind&&"string"==typeof a.prompt?{kind:"chat",prompt:a.prompt}:null:null).filter(a=>!!a):[]}},3613:(a,b,c)=>{c.d(b,{hI:()=>p,kA:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(29163);let j=f().join((0,i._)(),"skills");function k(a){return f().join(a,".reflex","skills")}let l=[{id:"deep-research",title:"Deep research",description:"Multi-agent research with citation discipline — facts and synthesis land as cross-linked KB entries.",author:"builtin",scope:"builtin",instructions:`## Skill: deep-research
7
+ `}m+=l+"\n",await d.promises.writeFile(g,m,"utf8"),e.add(g)}}return[...e]}async function n(a,b,c){let e;try{e=await d.promises.readdir(b,{withFileTypes:!0})}catch{return}for(let g of e){if(g.isDirectory()){if(b===a&&j.has(g.name)||"utilities"===g.name)continue;await n(a,f().join(b,g.name),c);continue}if(!g.name.toLowerCase().endsWith(".md"))continue;let e=f().join(b,g.name);try{let a=await d.promises.stat(e);c.set(e,a.mtimeMs)}catch{}}}async function o(a){try{let b=await d.promises.readFile(a,"utf8");if(!b.startsWith("---"))return{};let c=h()(b).data,e={};return"string"==typeof c.title&&(e.title=c.title),"string"==typeof c.kind&&(e.kind=c.kind),e}catch{return{}}}async function p(a){try{return await d.promises.access(a),!0}catch{return!1}}},1701:(a,b,c)=>{c.d(b,{GC:()=>m,Mn:()=>n,az:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(29163),h=c(32068);let i=f().join((0,g._)(),"pending-mcp-adds.json");async function j(){try{let a=await d.promises.readFile(i,"utf8"),b=JSON.parse(a);if(1!==b.version||!Array.isArray(b.entries))return{version:1,entries:[]};return b}catch{return{version:1,entries:[]}}}async function k(a){await (0,h.An)(i,a,{mode:384})}function l(a){let b=Date.now()-2592e6;return{version:1,entries:a.entries.filter(a=>{let c=Date.parse(a.createdAt);return Number.isFinite(c)&&c>b})}}async function m(a){let b=l(await j());b.entries=b.entries.filter(b=>b.requestId!==a.requestId),b.entries.push({...a,createdAt:new Date().toISOString()}),await k(b)}async function n(){return l(await j()).entries}async function o(a){let b=l(await j()),c=b.entries.findIndex(b=>b.requestId===a);if(c<0)return null;let d=b.entries[c];return b.entries.splice(c,1),await k(b),d}},2787:(a,b,c)=>{c.d(b,{createTask:()=>p,deleteTask:()=>t,getTask:()=>r,listTasks:()=>q,updateTask:()=>s});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(30192),j=c.n(i),k=c(13474),l=c(67184),m=c(11178),n=c(75207);let o="task";async function p(a,b){let c=`t-${h().randomBytes(4).toString("hex")}`,e=(0,l.Yv)(b.title)||c,g=new Date().toISOString().slice(0,10),i=`${g}-${e}.md`,j=f().join((0,k.FF)(a),o);await d.promises.mkdir(j,{recursive:!0});let m=await w(j,i),n={id:c,title:b.title.trim(),type:b.type??"feature",status:b.status??"backlog",priority:b.priority??"normal",labels:b.labels??[],assignee:b.assignee??null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),topicId:null,agentRequested:null,worktree:null,links:b.links??{},parent:b.parent??null,pre:b.pre??[],post:b.post??[],attachments:b.attachments??[],relPath:f().relative((0,k.FF)(a),m).split(f().sep).join("/"),body:(b.body??"").trim()};return await v(m,n),n}async function q(a){let b=await (0,m.dj)(a).catch(()=>[]),c=[];for(let d of b){if(d.meta.kind!==o)continue;let b=await u(d.abs,a).catch(()=>null);b&&c.push(b)}return c.sort((a,b)=>a.updatedAt<b.updatedAt?1:-1),c}async function r(a,b){return(await q(a)).find(a=>a.id===b)??null}async function s(a,b,c){let d=await r(a,b);if(!d)return null;let e=f().join((0,k.FF)(a),d.relPath),g={...d,...c,updatedAt:new Date().toISOString()};return await v(e,g),g}async function t(a,b){let c=await r(a,b);if(!c)return!1;let e=f().join((0,k.FF)(a),c.relPath);return await d.promises.rm(e,{force:!0}),!0}async function u(a,b){var c,e,g;let h=await d.promises.readFile(a,"utf8"),i=j()(h),l=i.data,m="string"==typeof l.id?l.id:null,o="string"==typeof l.title?l.title:null;if(!m||!o)return null;let p=f().relative((0,k.FF)(b),a).split(f().sep).join("/");return{id:m,title:o,type:y(l.type,n.ci,"feature"),status:y(l.status,n.Hi,"backlog"),priority:y(l.priority,n.PN,"normal"),labels:Array.isArray(l.labels)?l.labels.map(String):[],assignee:"string"==typeof l.assignee?l.assignee:null,createdAt:"string"==typeof l.createdAt?l.createdAt:new Date().toISOString(),updatedAt:"string"==typeof l.updatedAt?l.updatedAt:new Date().toISOString(),topicId:"string"==typeof l.topicId?l.topicId:null,agentRequested:"string"==typeof l.agentRequested?l.agentRequested:null,worktree:(c=l.worktree)&&"object"==typeof c&&"string"==typeof c.dir&&"string"==typeof c.branch&&"string"==typeof c.baseRef?{dir:c.dir,branch:c.branch,baseRef:c.baseRef}:null,links:(e=l.links)&&"object"==typeof e?{...Array.isArray(e.blocks)?{blocks:e.blocks.map(String)}:{},...Array.isArray(e.blockedBy)?{blockedBy:e.blockedBy.map(String)}:{},...Array.isArray(e.related)?{related:e.related.map(String)}:{}}:{},parent:"string"==typeof l.parent?l.parent:null,pre:z(l.pre),post:z(l.post),attachments:Array.isArray(g=l.attachments)?g.map(a=>{if(!a||"object"!=typeof a)return null;let b=a.kind;return"image"!==b&&"text"!==b&&"file"!==b||"string"!=typeof a.file?null:{kind:b,file:a.file,..."string"==typeof a.caption?{caption:a.caption}:{}}}).filter(a=>!!a):[],relPath:p,body:i.content.trim()}}async function v(a,b){let c={id:b.id,title:b.title,kind:o,type:b.type,status:b.status,priority:b.priority,labels:b.labels,assignee:b.assignee,createdAt:b.createdAt,updatedAt:b.updatedAt,topicId:b.topicId,agentRequested:b.agentRequested,worktree:b.worktree,links:b.links,parent:b.parent,pre:b.pre,post:b.post,attachments:b.attachments},e=b.body.trim(),g=j().stringify(e?e+"\n":"",c);await d.promises.mkdir(f().dirname(a),{recursive:!0}),await d.promises.writeFile(a,g,"utf8")}async function w(a,b){let c=f().extname(b),d=b.slice(0,b.length-c.length),e=f().join(a,b),g=2;for(;await x(e);)e=f().join(a,`${d}-${g}${c}`),g++;return e}async function x(a){try{return await d.promises.stat(a),!0}catch{return!1}}function y(a,b,c){return"string"==typeof a&&b.includes(a)?a:c}function z(a){return Array.isArray(a)?a.map(a=>a&&"object"==typeof a?"workflow"===a.kind&&"string"==typeof a.id?{kind:"workflow",id:a.id}:"chat"===a.kind&&"string"==typeof a.prompt?{kind:"chat",prompt:a.prompt}:null:null).filter(a=>!!a):[]}},3613:(a,b,c)=>{c.d(b,{hI:()=>r,kA:()=>q});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(29163),j=c(13474),k=c(67184);let l=f().join((0,i._)(),"skills");function m(a){return(0,j.u0)(a,"skills")}let n=[{id:"deep-research",title:"Deep research",description:"Multi-agent research with citation discipline — facts and synthesis land as cross-linked KB entries.",author:"builtin",scope:"builtin",instructions:`## Skill: deep-research
8
8
 
9
9
  Run the investigation like a professional analyst. This skill is NOT a chat answer; it produces durable, cited KB artifacts.
10
10
 
@@ -136,11 +136,11 @@ Procedure:
136
136
  Constraints:
137
137
  - Quote the user's own words when illustrating themes — don't paraphrase into something they didn't say.
138
138
  - If fewer than 4 entries exist in the window, say so and skip the reflection (it's not enough signal yet).
139
- - Avoid clinical language. "Notice" not "diagnose".`},{id:"kb-curator",title:"KB curator",description:"Turns raw content into clean KB notes with the right kind and meta.",author:"builtin",scope:"builtin",instructions:"## Skill: kb-curator\n\nYou are the knowledge-base curator. Every input - note, fact, or link - becomes a tidy KB entry:\n 1. Determine the `kind` (fact | task | meeting | product | person | place | event | ...). If ambiguous - ask.\n 2. Title: 4-9 words, no quotes, no trailing period.\n 3. `meta`: put structured fields here (ISO dates, links, tags). Do NOT duplicate them in the body.\n 4. `body`: anything that didn't fit in meta - context, nuance, quotes with sources.\n 5. Emit a `<<reflex:kb>>` marker; do not write via Write - the manager places it in the correct folder.\n 6. If the entry adds to an existing topic - mention sibling files via @-mentions in chat (for context, not for the agent)."}];async function m(a){try{let{collectExtensions:b}=await Promise.resolve().then(c.bind(c,14952));return(await b(a?{rootId:a}:{})).skills.map(a=>({id:a.id,title:a.title,description:a.description,author:"user",scope:"project"===a.utility.scope?"project":"global",...a.workflowId?{workflowId:a.workflowId}:{},instructions:a.instructions}))}catch{return[]}}async function n(a,b){let c;try{c=await d.promises.readdir(a,{withFileTypes:!0})}catch{return[]}let e=[];for(let g of c)if(g.isFile()&&g.name.toLowerCase().endsWith(".md"))try{let c=await d.promises.readFile(f().join(a,g.name),"utf8"),i=h()(c),j=i.data,k="string"==typeof j.id?j.id:null;if(!k)continue;e.push({id:k,title:"string"==typeof j.title?j.title:k,description:"string"==typeof j.description?j.description:"",author:"user",scope:b,..."string"==typeof j.workflowId?{workflowId:j.workflowId}:{},..."string"==typeof j.utilityRef?{utilityRef:j.utilityRef}:{},instructions:i.content.trim()})}catch{}return e}async function o(a,b,c){if(b){let c=(await n(k(b),"project")).find(b=>b.id===a);if(c)return c}let d=(await n(j,"global")).find(b=>b.id===a);if(d)return d;let e=(await m(c)).find(b=>b.id===a);return e||(l.find(b=>b.id===a)??null)}async function p(a){if("project"===a.scope&&!a.rootPath)throw Error("project skill requires rootPath");let b="project"===a.scope?k(a.rootPath):j;await d.promises.mkdir(b,{recursive:!0});let c=a.id.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);if(!c)throw Error("invalid skill id");let e={id:c,title:a.title.trim()||c,description:a.description.trim()};a.workflowId&&(e.workflowId=a.workflowId),a.utilityRef&&(e.utilityRef=a.utilityRef);let g=Object.entries(e).map(([a,b])=>`${a}: ${JSON.stringify(b)}`).join("\n"),h=`---
139
+ - Avoid clinical language. "Notice" not "diagnose".`},{id:"kb-curator",title:"KB curator",description:"Turns raw content into clean KB notes with the right kind and meta.",author:"builtin",scope:"builtin",instructions:"## Skill: kb-curator\n\nYou are the knowledge-base curator. Every input - note, fact, or link - becomes a tidy KB entry:\n 1. Determine the `kind` (fact | task | meeting | product | person | place | event | ...). If ambiguous - ask.\n 2. Title: 4-9 words, no quotes, no trailing period.\n 3. `meta`: put structured fields here (ISO dates, links, tags). Do NOT duplicate them in the body.\n 4. `body`: anything that didn't fit in meta - context, nuance, quotes with sources.\n 5. Emit a `<<reflex:kb>>` marker; do not write via Write - the manager places it in the correct folder.\n 6. If the entry adds to an existing topic - mention sibling files via @-mentions in chat (for context, not for the agent)."}];async function o(a){try{let{collectExtensions:b}=await Promise.resolve().then(c.bind(c,14952));return(await b(a?{rootId:a}:{})).skills.map(a=>({id:a.id,title:a.title,description:a.description,author:"user",scope:"project"===a.utility.scope?"project":"global",...a.workflowId?{workflowId:a.workflowId}:{},instructions:a.instructions}))}catch{return[]}}async function p(a,b){let c;try{c=await d.promises.readdir(a,{withFileTypes:!0})}catch{return[]}let e=[];for(let g of c)if(g.isFile()&&g.name.toLowerCase().endsWith(".md"))try{let c=await d.promises.readFile(f().join(a,g.name),"utf8"),i=h()(c),j=i.data,k="string"==typeof j.id?j.id:null;if(!k)continue;e.push({id:k,title:"string"==typeof j.title?j.title:k,description:"string"==typeof j.description?j.description:"",author:"user",scope:b,..."string"==typeof j.workflowId?{workflowId:j.workflowId}:{},..."string"==typeof j.utilityRef?{utilityRef:j.utilityRef}:{},instructions:i.content.trim()})}catch{}return e}async function q(a,b,c){if(b){let c=(await p(m(b),"project")).find(b=>b.id===a);if(c)return c}let d=(await p(l,"global")).find(b=>b.id===a);if(d)return d;let e=(await o(c)).find(b=>b.id===a);return e||(n.find(b=>b.id===a)??null)}async function r(a){if("project"===a.scope&&!a.rootPath)throw Error("project skill requires rootPath");let b="project"===a.scope?m(a.rootPath):l;await d.promises.mkdir(b,{recursive:!0});let c=(0,k.Iy)(a.id);if(!c)throw Error("invalid skill id");let e={id:c,title:a.title.trim()||c,description:a.description.trim()};a.workflowId&&(e.workflowId=a.workflowId),a.utilityRef&&(e.utilityRef=a.utilityRef);let g=Object.entries(e).map(([a,b])=>`${a}: ${JSON.stringify(b)}`).join("\n"),h=`---
140
140
  ${g}
141
141
  ---
142
142
  ${a.instructions.trim()}
143
- `,i=f().join(b,`${c}.md`);return await d.promises.writeFile(i,h,"utf8"),i}},5243:(a,b,c)=>{c.d(b,{addMcpServer:()=>r,getMcpServer:()=>q,listMcpServers:()=>p,updateMcpServer:()=>s});var d=c(73024),e=c(76760),f=c.n(e),g=c(14126),h=c(88124),i=c(29163);let j=f().join((0,i._)(),"mcp"),k=f().join(j,"servers.json"),l=g.Ik({id:g.Yj().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/,"id must start with a letter; letters, digits, '_' and '-' allowed"),label:g.Yj().min(1).max(120),description:g.Yj().max(2e3).default(""),config:h.McpConfigSchema,addedAt:g.Yj(),lastVerifiedAt:g.Yj().optional()}),m=g.Ik({version:g.eu(1),servers:g.YO(l)});async function n(){try{let a=await d.promises.readFile(k,"utf8"),b=m.safeParse(JSON.parse(a));if(!b.success)return{version:1,servers:[]};return b.data}catch{return{version:1,servers:[]}}}async function o(a){await d.promises.mkdir(j,{recursive:!0}),await d.promises.writeFile(k,JSON.stringify(a,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(k,384)}catch{}}async function p(){return[...(await n()).servers].sort((a,b)=>a.id.localeCompare(b.id))}async function q(a){return(await n()).servers.find(b=>b.id===a)??null}async function r(a){let b=l.parse({id:a.id,label:a.label,description:a.description??"",config:a.config,addedAt:new Date().toISOString()}),c=await n();if(c.servers.some(a=>a.id===b.id))throw Error(`MCP server "${b.id}" already exists`);return c.servers.push(b),await o(c),b}async function s(a,b){let c=await n(),d=c.servers.findIndex(b=>b.id===a);if(d<0)throw Error(`MCP server "${a}" not found`);let e=l.parse({...c.servers[d],...b});return c.servers[d]=e,await o(c),e}},7188:(a,b,c)=>{c.d(b,{buildRecord:()=>w,iq:()=>p,listWidgets:()=>m,readLayout:()=>s,readWidget:()=>n,reconcileLayout:()=>u,writeLayout:()=>t,writeWidget:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(13474),h=c(11244);function i(a){return f().join((0,g.FF)(a),"widgets")}function j(a,b){return f().join(i(a),`${l(b)}.json`)}function k(a){return f().join((0,g.FF)(a),"dashboard-layout.json")}function l(a){return a.replace(/[^A-Za-z0-9_-]/g,"-").slice(0,80)}async function m(a){let b,c=i(a);try{b=await d.promises.readdir(c,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of b)if(a.isFile()&&a.name.toLowerCase().endsWith(".json"))try{let b=await d.promises.readFile(f().join(c,a.name),"utf8"),g=JSON.parse(b);v(g)&&e.push(g)}catch{}return e}async function n(a,b){try{let c=await d.promises.readFile(j(a,b),"utf8"),e=JSON.parse(c);return v(e)?e:null}catch{return null}}async function o(a,b){if(!v(b))throw Error(`Invalid widget record (id=${b.id}, kind=${b.kind})`);await d.promises.mkdir(i(a),{recursive:!0}),await d.promises.writeFile(j(a,b.id),JSON.stringify(b,null,2)+"\n","utf8")}async function p(a,b){try{let c=(0,g.FF)(a),e=f().resolve(c,b),h=f().relative(c,e);if(h.startsWith("..")||f().isAbsolute(h))return null;return await d.promises.readFile(e,"utf8")}catch{return null}}let q={order:["sys:active-goals","sys:pending","sys:recent-kb","sys:ai-suggestions"],hidden:[],sizes:{}},r=new Set(["sm","md","wide"]);async function s(a){try{let b=await d.promises.readFile(k(a),"utf8"),c=JSON.parse(b);if(!Array.isArray(c.order)||!Array.isArray(c.hidden))return q;let e={};if(c.sizes&&"object"==typeof c.sizes)for(let[a,b]of Object.entries(c.sizes))"string"==typeof b&&r.has(b)&&(e[a]=b);return{order:c.order.filter(a=>"string"==typeof a),hidden:c.hidden.filter(a=>"string"==typeof a),sizes:e}}catch{return q}}async function t(a,b){await d.promises.mkdir((0,g.FF)(a),{recursive:!0}),await d.promises.writeFile(k(a),JSON.stringify(b,null,2)+"\n","utf8")}function u(a,b,c){let d=new Set([...b,...c]),e=a.order.filter(a=>d.has(a)),f=a.hidden.filter(a=>d.has(a)),g=new Set([...e,...f]);for(let a of[...c,...b])g.has(a)||e.push(a);let h={};if(a.sizes)for(let[b,c]of Object.entries(a.sizes))d.has(b)&&(h[b]=c);return{order:e,hidden:f,sizes:h}}function v(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id&&"string"==typeof a.title&&"string"==typeof a.kind&&!!h.hU.includes(a.kind)&&!!a.data&&"object"==typeof a.data&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&!0}function w(a){let b=new Date().toISOString(),c=l(a.id);if(!c)throw Error("Widget id is empty after sanitization");if(!h.hU.includes(a.payload.kind))throw Error(`Unknown widget kind: ${a.payload.kind}`);let d=a.refresh??a.existing?.refresh,e=a.memory??a.existing?.memory,f=a.memoryFile??a.existing?.memoryFile,g=a.lastRefreshAt??a.existing?.lastRefreshAt;return{id:c,title:a.title||c,...a.description?{description:a.description}:{},...a.sourceTopicId?{sourceTopicId:a.sourceTopicId}:{},kind:a.payload.kind,data:a.payload.data,createdAt:a.existing?.createdAt??b,updatedAt:b,...a.size?{size:a.size}:a.existing?.size?{size:a.existing.size}:{},...d?{refresh:d}:{},...void 0!==e?{memory:e}:{},...f?{memoryFile:f}:{},...g?{lastRefreshAt:g}:{}}}},8734:(a,b,c)=>{c.d(b,{$4:()=>f,EA:()=>i,FB:()=>g,GX:()=>p,VM:()=>m,YE:()=>l,dA:()=>h,vl:()=>k,wr:()=>e,wt:()=>j,z7:()=>n,zM:()=>o});var d=c(25608);function e(a){let b=(0,d.dr)(a);return b&&("plan"===b.def.id||"goal"===b.def.id)?{kind:b.def.id,text:b.payload}:null}function f(a){return`## /plan — Plan-first mode
143
+ `,i=f().join(b,`${c}.md`);return await d.promises.writeFile(i,h,"utf8"),i}},5243:(a,b,c)=>{c.d(b,{addMcpServer:()=>s,getMcpServer:()=>r,listMcpServers:()=>q,updateMcpServer:()=>t});var d=c(73024),e=c(76760),f=c.n(e),g=c(14126),h=c(88124),i=c(29163),j=c(32068);let k=f().join((0,i._)(),"mcp"),l=f().join(k,"servers.json"),m=g.Ik({id:g.Yj().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/,"id must start with a letter; letters, digits, '_' and '-' allowed"),label:g.Yj().min(1).max(120),description:g.Yj().max(2e3).default(""),config:h.McpConfigSchema,addedAt:g.Yj(),lastVerifiedAt:g.Yj().optional()}),n=g.Ik({version:g.eu(1),servers:g.YO(m)});async function o(){try{let a=await d.promises.readFile(l,"utf8"),b=n.safeParse(JSON.parse(a));if(!b.success)return{version:1,servers:[]};return b.data}catch{return{version:1,servers:[]}}}async function p(a){await (0,j.An)(l,a,{mode:384})}async function q(){return[...(await o()).servers].sort((a,b)=>a.id.localeCompare(b.id))}async function r(a){return(await o()).servers.find(b=>b.id===a)??null}async function s(a){let b=m.parse({id:a.id,label:a.label,description:a.description??"",config:a.config,addedAt:new Date().toISOString()}),c=await o();if(c.servers.some(a=>a.id===b.id))throw Error(`MCP server "${b.id}" already exists`);return c.servers.push(b),await p(c),b}async function t(a,b){let c=await o(),d=c.servers.findIndex(b=>b.id===a);if(d<0)throw Error(`MCP server "${a}" not found`);let e=m.parse({...c.servers[d],...b});return c.servers[d]=e,await p(c),e}},8734:(a,b,c)=>{c.d(b,{$4:()=>f,EA:()=>i,FB:()=>g,GX:()=>p,VM:()=>m,YE:()=>l,dA:()=>h,vl:()=>k,wr:()=>e,wt:()=>j,z7:()=>n,zM:()=>o});var d=c(25608);function e(a){let b=(0,d.dr)(a);return b&&("plan"===b.def.id||"goal"===b.def.id)?{kind:b.def.id,text:b.payload}:null}function f(a){return`## /plan — Plan-first mode
144
144
 
145
145
  Reply in ${a}. **Before doing anything**, lay out a clear, numbered step-by-step plan. Each step should be concrete and verifiable.
146
146
 
@@ -210,7 +210,7 @@ Procedure:
210
210
  Constraints:
211
211
  - Don't ask more than 3 questions in step 4. Two-line max per question.
212
212
  - Don't speculate about feelings the user didn't state. Inferred mood is best-guess, not therapy.
213
- - If the user explicitly asks for a weekly review during this flow, switch to the \`/skill weekly-reflect\` flow.`}let p=15},11244:(a,b,c)=>{c.d(b,{SYSTEM_WIDGET_IDS:()=>e,VQ:()=>d,hU:()=>f});let d={hourly:36e5,daily:864e5,weekly:6048e5},e=["sys:active-goals","sys:pending","sys:recent-kb","sys:ai-suggestions"],f=["markdown","news-list","link-list","kpi","checklist","quote","kb-pinned","progress","image","stat-table","map","action-list","utility-card"]},13295:(a,b,c)=>{c.d(b,{bp:()=>o,listWorkflows:()=>l,lq:()=>q,ni:()=>k,r$:()=>n,readWorkflow:()=>m,v:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(13474);function h(a){return f().join((0,g.FF)(a),"workflows")}function i(a,b){return f().join(h(a),`${k(b)}.json`)}function j(a,b){return f().join(h(a),"runs",k(b))}function k(a){return a.replace(/[^A-Za-z0-9_-]/g,"-").slice(0,80)}async function l(a){let b,c=h(a);try{b=await d.promises.readdir(c,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of b)if(a.isFile()&&a.name.toLowerCase().endsWith(".json"))try{let b=await d.promises.readFile(f().join(c,a.name),"utf8"),g=JSON.parse(b);r(g)&&e.push(g)}catch{}return e.sort((a,b)=>a.updatedAt<b.updatedAt?1:-1),e}async function m(a,b){try{let c=await d.promises.readFile(i(a,b),"utf8"),e=JSON.parse(c);return r(e)?e:null}catch{return null}}async function n(a,b){if(!r(b))throw Error(`Invalid workflow (id=${b.id})`);await d.promises.mkdir(h(a),{recursive:!0}),await d.promises.writeFile(i(a,b.id),JSON.stringify(b,null,2)+"\n","utf8")}async function o(a,b){var c,e;await d.promises.mkdir(j(a,b.workflowId),{recursive:!0}),await d.promises.writeFile((c=b.workflowId,e=b.id,f().join(j(a,c),`${k(e)}.json`)),JSON.stringify(b,null,2)+"\n","utf8")}async function p(a,b,c=20){let e,g=j(a,b);try{e=await d.promises.readdir(g,{withFileTypes:!0})}catch{return[]}let h=(await Promise.all(e.filter(a=>a.isFile()&&a.name.toLowerCase().endsWith(".json")).map(async a=>{let b=f().join(g,a.name);try{let a=await d.promises.stat(b);return{abs:b,mtime:a.mtimeMs}}catch{return null}}))).filter(a=>null!==a).sort((a,b)=>b.mtime-a.mtime).slice(0,c),i=[];for(let a of h)try{let b=await d.promises.readFile(a.abs,"utf8");i.push(JSON.parse(b))}catch{}return i}async function q(a,b){let c,e=j(a,b);try{c=await d.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let a of(await Promise.all(c.filter(a=>a.isFile()&&a.name.toLowerCase().endsWith(".json")).map(async a=>{let b=f().join(e,a.name);try{let a=await d.promises.stat(b);return{abs:b,mtime:a.mtimeMs}}catch{return null}}))).filter(a=>null!==a).sort((a,b)=>b.mtime-a.mtime).slice(50))await d.promises.unlink(a.abs).catch(()=>void 0)}function r(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id&&"string"==typeof a.label&&!!Array.isArray(a.steps)&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt}},14952:(a,b,c)=>{c.d(b,{collectExtensions:()=>e});var d=c(61105);async function e(a){let b=await (0,d.dH)(a.rootId?{rootId:a.rootId}:{}).catch(()=>[]),c=[],e=[],f=[],g=[];for(let a of b){let b=a.manifest.extensions;if(!b)continue;let d={utilityId:a.manifest.id,scope:a.scope};for(let a of b.slashCommands??[])c.push({...a,utility:d});for(let a of b.skills??[])e.push({...a,utility:d});b.systemPromptAddendum&&b.systemPromptAddendum.trim()&&f.push({utility:d,content:b.systemPromptAddendum});let h=new Date().toISOString();for(let a of b.workflows??[])g.push({id:a.id,label:a.label,...a.description?{description:a.description}:{},trigger:a.trigger,steps:a.steps.map(a=>({id:a.id,kind:a.kind,label:a.label,params:a.params})),createdAt:h,updatedAt:h})}return{slashCommands:c,skills:e,promptBlocks:f,workflows:g}}},16909:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z:()=>N});var e=c(78474),f=c(77598),g=c(24576),h=c(74342),i=c(25713),j=c(22830),k=c(47423),l=c(96931),m=c(23956),n=c(18542),o=c(80958),p=c(97604),q=c(3613),r=c(2787),s=c(75207),t=c(59835),u=c(7188),v=c(13295),w=c(24058),x=c(49353),y=c(911),z=c(1701),A=c(35053),B=c(61105),C=c(17640),D=c(56843),E=c(8734),F=c(24776),G=a([i,n,w]);[i,n,w]=G.then?(await G)():G;class L{async ensureAgent(a){let b=this.byTopicRole.get(a.topicId)?.get(a.role);if(b){let a=this.agents.get(b);if(a)return{...a.meta}}return this.createAgent(a)}async createAgent(a){let b=J(),c={id:b,topicId:a.topicId,rootId:a.rootId,role:a.role,task:a.task,harness:a.harness,model:a.model,label:a.label,status:"idle",startedAt:H(),...a.parentId?{parentId:a.parentId}:{}};this.agents.set(b,{meta:c,rootPath:a.rootPath,reflexScope:a.reflexScope});let d=this.byTopicRole.get(a.topicId);return d||(d=new Map,this.byTopicRole.set(a.topicId,d)),d.set(a.role,b),await this.emit({type:"agent-start",meta:c,agentId:b,ts:c.startedAt,seq:0}),c}async invoke(a){let b=this.agents.get(a.agentId);if(!b)throw Error(`Agent not found: ${a.agentId}`);if("running"===b.meta.status)throw Error(`Agent ${a.agentId} is already running`);b.meta.status="running",this.lastInvoke.set(a.agentId,{systemPrompt:a.systemPrompt,rootPath:b.rootPath}),b.lastUserMessage=a.userMessage??a.prompt,this.turnText.set(a.agentId,"");let c=J();a.userMessage&&await this.emit({type:"user-message",text:a.userMessage,agentId:a.agentId,ts:H(),seq:0}),await this.emit({type:"turn-start",turnId:c,agentId:a.agentId,ts:H(),seq:0});let d=null;try{d=await (0,y.Qr)(b.rootPath)}catch{}try{let e={meta:{id:b.meta.id},args:{rootPath:b.rootPath,reflexScope:b.reflexScope,systemPrompt:a.systemPrompt,prompt:a.prompt,model:b.meta.model,allowedTools:a.allowedTools??[]},manager:this};if("claude-code"===b.meta.harness)await (0,i.Z)(e);else if("codex"===b.meta.harness)await (0,j.H)(e);else if("ollama"===b.meta.harness)await (0,k.E)(e);else if("image-gen"===b.meta.harness)await (0,l.R)({meta:e.meta,args:{rootPath:e.args.rootPath,prompt:e.args.prompt},manager:e.manager});else throw Error(`Unsupported harness: ${String(b.meta.harness)}`);await this.applyImageGenDirectives(a.agentId);let f=await this.evaluateGoalContinuation(a.agentId);b.meta.status="idle",await this.emit({type:"turn-end",turnId:c,status:"completed",agentId:a.agentId,ts:H(),seq:0});let{writtenViaKb:g,dispatches:h,youtubeSummaries:m}=await this.detectInteractionDirectives(a.agentId);d&&await this.reindexAfterTurn(a.agentId,d,g),h.length>0&&"orchestrator"===b.meta.role?this.dispatchSubAgents(a.agentId,h).catch(b=>{this.emit({type:"error",message:"sub-agent dispatch failed: "+(b instanceof Error?b.message:String(b)),agentId:a.agentId,ts:H(),seq:0})}):m.length>0&&"orchestrator"===b.meta.role?this.runYoutubeSummaries(a.agentId,m).catch(b=>{this.emit({type:"error",message:"youtube-summary failed: "+(b instanceof Error?b.message:String(b)),agentId:a.agentId,ts:H(),seq:0})}):f&&setTimeout(()=>{this.continueTurn(a.agentId,`[Reflex /goal] Continue execution. Active goal: ${f.goal}. Iteration ${f.iteration}/${E.GX}. If the task is done AND verified, finish with the marker \`GOAL ACHIEVED\` and a kb-entry kind:"goal-completion".`)},50)}catch(e){let d=e instanceof Error?e.message:String(e);b.meta.status="idle",b.meta.error=d,await this.emit({type:"error",message:d,agentId:a.agentId,ts:H(),seq:0}),await this.emit({type:"turn-end",turnId:c,status:"failed",error:d,agentId:a.agentId,ts:H(),seq:0})}finally{this.turnText.delete(a.agentId)}}async respondPermission(a,b){let c,d=this.agents.get(a);if(!d)throw Error("Agent not found");let e="running"===d.meta.status;try{let a=(await (0,h.readEvents)(d.rootPath,d.meta.topicId)).find(a=>"permission-request"===a.type&&a.requestId===b.requestId);c=a?.action}catch{}await this.emit({type:"permission-response",requestId:b.requestId,decision:b.decision,...b.scope?{scope:b.scope}:{},agentId:a,ts:H(),seq:0});let f="";if("tool-policy"===c&&"allow"===b.decision&&b.tool)try{let a=await (0,C.loadSettings)(),c=d.meta.task,e=a.assignments[c];e&&!e.allowedTools.includes(b.tool)&&(e.allowedTools=[...e.allowedTools,b.tool],await (0,C.saveSettings)(a),f=` Tool ${b.tool} added to settings.assignments.${c}.allowedTools.`)}catch(b){await this.emit({type:"error",message:"Failed to save allowed tool: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:H(),seq:0})}let g=`[Reflex] Permission for ${b.tool??"action"} (${b.requestId}): ${b.decision}${b.scope?` (${b.scope})`:""}.${f} Continue.`,i="tool-policy"===c&&"allow"===b.decision&&!!b.tool&&!!f;if(e&&i&&d.killer){try{d.killer()}catch{}delete d.killer,d.meta.status="idle";let b=d.lastUserMessage??`${g} Retry the previous attempt with the now-allowed tool.`;await this.continueTurn(a,b);return}e||await this.continueTurn(a,g)}async respondQuestion(a,b){let c=this.agents.get(a);if(!c)throw Error("Agent not found");let d="running"===c.meta.status;await this.emit({type:"answer",questionId:b.questionId,answer:b.answer,agentId:a,ts:H(),seq:0});let e=`[Reflex] Answer for question ${b.questionId}: ${b.answer}. Continue.`;d||await this.continueTurn(a,e)}async respondMcpAdd(a,b){let d,e=this.agents.get(a),f=!!(e&&"running"===e.meta.status),g=null,i=e?.meta.topicId??null,j=e?.rootPath??null,k=this.pendingMcpAdds.get(b.requestId);if(k&&k.agentId===a)g=k.directive,this.pendingMcpAdds.delete(b.requestId);else{let a=await (0,z.az)(b.requestId);a&&(g=a.directive,i=i??a.topicId,j=j??a.rootPath)}if(!g)throw Error(`Unknown mcp-add request: ${b.requestId}`);let l=async a=>{if(e)return void await this.emit(a);if(i&&j){let b=await (0,h.nextSeq)(j,i);await (0,h.appendEvent)(j,i,{...a,seq:b})}};if("reject"===b.decision){await l({type:"mcp-add-response",requestId:b.requestId,decision:"reject",agentId:a,ts:H(),seq:0}),d=`[Reflex] User rejected adding MCP server "${g.server}". Don't re-propose the same server — either pick a different approach or ask the user what they prefer.`,e&&!f&&await this.continueTurn(a,d);return}try{let e=await I(g.config,g.secrets??[],b.secretValues??{}),{McpConfigSchema:f}=await Promise.resolve().then(c.bind(c,88124)),h=f.parse(e),{addMcpServer:i,updateMcpServer:j,getMcpServer:k}=await Promise.resolve().then(c.bind(c,5243));await k(g.server)?await j(g.server,{label:g.label,...void 0!==g.description?{description:g.description}:{},config:h}):await i({id:g.server,label:g.label,...void 0!==g.description?{description:g.description}:{},config:h}),await l({type:"mcp-add-response",requestId:b.requestId,decision:"approve",server:g.server,agentId:a,ts:H(),seq:0}),d=`[Reflex] MCP server "${g.server}" registered. You can now call its tools via \`mcp__${g.server}__<tool>\` (chat) or \`reflex.mcp.call({server:"${g.server}",tool,args})\` (from a utility that declared it in manifest.mcpServers). Continue.`}catch(e){let c=e instanceof Error?e.message:String(e);await l({type:"error",message:"mcp-add failed: "+c,agentId:a,ts:H(),seq:0}),await l({type:"mcp-add-response",requestId:b.requestId,decision:"reject",agentId:a,ts:H(),seq:0}),d=`[Reflex] Failed to register MCP server "${g.server}": ${c}. Don't retry the exact same config; either fix the issue or ask the user.`}e&&!f&&await this.continueTurn(a,d)}async continueTurn(a,b){let c=this.agents.get(a);if(!c)return;let d=this.lastInvoke.get(a);if(!d)return void await this.emit({type:"error",message:"Cannot continue turn: no cached system prompt. Send another message manually.",agentId:a,ts:H(),seq:0});let e=[];try{let a=await (0,C.loadSettings)();e=a.assignments[c.meta.task]?.allowedTools??[]}catch{}let f=await K(d.rootPath,c.meta.topicId),g=`Prior conversation:
213
+ - If the user explicitly asks for a weekly review during this flow, switch to the \`/skill weekly-reflect\` flow.`}let p=15},11178:(a,b,c)=>{c.d(b,{CA:()=>j,IK:()=>n,RP:()=>k,dj:()=>l,xO:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);async function j(a){let b=(0,i.FF)(a);return o(b,b)}async function k(a){let b=(0,i.FF)(a);try{let a=await o(b,b),c=a.reduce((a,b)=>a+b.size,0);return{exists:!0,fileCount:a.length,totalBytes:c}}catch{return{exists:!1,fileCount:0,totalBytes:0}}}async function l(a){let b=await j(a);return await Promise.all(b.map(async a=>({...a,meta:await p(a.abs)})))}async function m(a){return p(a)}async function n(a,b){let c=(0,i.FF)(a),e=f().resolve(c,b),g=f().relative(c,e);if(g.startsWith("..")||f().isAbsolute(g))throw Error(`Refused to read outside ${i.fW}: ${b}`);return d.promises.readFile(e,"utf8")}async function o(a,b){let c;try{c=await d.promises.readdir(b,{withFileTypes:!0})}catch{return[]}let e=[],g=[];for(let d of c){let c=f().join(b,d.name);if(d.isDirectory()){if(b===a&&"topics"===d.name)continue;e.push(o(a,c));continue}d.isFile()&&d.name.toLowerCase().endsWith(".md")&&g.push({rel:f().relative(a,c).split(f().sep).join("/"),abs:c,size:0,modifiedAt:""})}let h=await Promise.all(g.map(async a=>{try{let b=await d.promises.stat(a.abs);return{...a,size:b.size,modifiedAt:b.mtime.toISOString()}}catch{return a}}));for(let a of(await Promise.all(e)))h.push(...a);return h.sort((a,b)=>a.rel.localeCompare(b.rel)),h}async function p(a){try{let b=await d.promises.readFile(a,"utf8"),c=h()(b).data;return{...void 0!==q(c.title)?{title:q(c.title)}:{},...void 0!==r(c.version)?{version:r(c.version)}:{},...void 0!==q(c.date)?{date:q(c.date)}:{},...void 0!==q(c.kind)?{kind:q(c.kind)}:{},data:c}}catch{return{data:{}}}}function q(a){return"string"==typeof a?a:a instanceof Date?a.toISOString().slice(0,10):void 0}function r(a){if("string"==typeof a||"number"==typeof a)return a}},13295:(a,b,c)=>{c.d(b,{bp:()=>q,listWorkflows:()=>n,lq:()=>s,ni:()=>m,r$:()=>p,readWorkflow:()=>o,v:()=>r});var d=c(73024),e=c(76760),f=c.n(e),g=c(13474),h=c(67184),i=c(32068);function j(a){return f().join((0,g.FF)(a),"workflows")}function k(a,b){return f().join(j(a),`${m(b)}.json`)}function l(a,b){return f().join(j(a),"runs",m(b))}function m(a){return(0,h.Vp)(a)}async function n(a){let b,c=j(a);try{b=await d.promises.readdir(c,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of b)if(a.isFile()&&a.name.toLowerCase().endsWith(".json"))try{let b=await d.promises.readFile(f().join(c,a.name),"utf8"),g=JSON.parse(b);t(g)&&e.push(g)}catch{}return e.sort((a,b)=>a.updatedAt<b.updatedAt?1:-1),e}async function o(a,b){try{let c=await d.promises.readFile(k(a,b),"utf8"),e=JSON.parse(c);return t(e)?e:null}catch{return null}}async function p(a,b){if(!t(b))throw Error(`Invalid workflow (id=${b.id})`);await (0,i.An)(k(a,b.id),b)}async function q(a,b){var c,d;await (0,i.An)((c=b.workflowId,d=b.id,f().join(l(a,c),`${m(d)}.json`)),b)}async function r(a,b,c=20){let e,g=l(a,b);try{e=await d.promises.readdir(g,{withFileTypes:!0})}catch{return[]}let h=(await Promise.all(e.filter(a=>a.isFile()&&a.name.toLowerCase().endsWith(".json")).map(async a=>{let b=f().join(g,a.name);try{let a=await d.promises.stat(b);return{abs:b,mtime:a.mtimeMs}}catch{return null}}))).filter(a=>null!==a).sort((a,b)=>b.mtime-a.mtime).slice(0,c),i=[];for(let a of h)try{let b=await d.promises.readFile(a.abs,"utf8");i.push(JSON.parse(b))}catch{}return i}async function s(a,b){let c,e=l(a,b);try{c=await d.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let a of(await Promise.all(c.filter(a=>a.isFile()&&a.name.toLowerCase().endsWith(".json")).map(async a=>{let b=f().join(e,a.name);try{let a=await d.promises.stat(b);return{abs:b,mtime:a.mtimeMs}}catch{return null}}))).filter(a=>null!==a).sort((a,b)=>b.mtime-a.mtime).slice(50))await d.promises.unlink(a.abs).catch(()=>void 0)}function t(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id&&"string"==typeof a.label&&!!Array.isArray(a.steps)&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt}},14952:(a,b,c)=>{c.d(b,{collectExtensions:()=>e});var d=c(61105);async function e(a){let b=await (0,d.dH)(a.rootId?{rootId:a.rootId}:{}).catch(()=>[]),c=[],e=[],f=[],g=[];for(let a of b){let b=a.manifest.extensions;if(!b)continue;let d={utilityId:a.manifest.id,scope:a.scope};for(let a of b.slashCommands??[])c.push({...a,utility:d});for(let a of b.skills??[])e.push({...a,utility:d});b.systemPromptAddendum&&b.systemPromptAddendum.trim()&&f.push({utility:d,content:b.systemPromptAddendum});let h=new Date().toISOString();for(let a of b.workflows??[])g.push({id:a.id,label:a.label,...a.description?{description:a.description}:{},trigger:a.trigger,steps:a.steps.map(a=>({id:a.id,kind:a.kind,label:a.label,params:a.params})),createdAt:h,updatedAt:h})}return{slashCommands:c,skills:e,promptBlocks:f,workflows:g}}},16909:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z:()=>U});var e=c(78474),f=c(77598),g=c(24576),h=c(74342),i=c(25713),j=c(22830),k=c(47423),l=c(96931),m=c(23956),n=c(18542),o=c(80958),p=c(97604),q=c(3613),r=c(2787),s=c(75207),t=c(59835),u=c(7188),v=c(13295),w=c(24058),x=c(53526),y=c(49353),z=c(911),A=c(1701),B=c(35053),C=c(61105),D=c(17640),E=c(56843),F=c(8734),G=c(24776),H=a([i,n,w]);[i,n,w]=H.then?(await H)():H;class S{async ensureAgent(a){let b=this.byTopicRole.get(a.topicId)?.get(a.role);if(b){let a=this.agents.get(b);if(a)return{...a.meta}}return this.createAgent(a)}async createAgent(a){let b=K(),c={id:b,topicId:a.topicId,rootId:a.rootId,role:a.role,task:a.task,harness:a.harness,model:a.model,label:a.label,status:"idle",startedAt:I(),...a.parentId?{parentId:a.parentId}:{}};this.agents.set(b,{meta:c,rootPath:a.rootPath,reflexScope:a.reflexScope});let d=this.byTopicRole.get(a.topicId);return d||(d=new Map,this.byTopicRole.set(a.topicId,d)),d.set(a.role,b),await this.emit({type:"agent-start",meta:c,agentId:b,ts:c.startedAt,seq:0}),c}async invoke(a){let b=this.agents.get(a.agentId);if(!b)throw Error(`Agent not found: ${a.agentId}`);if("running"===b.meta.status)throw Error(`Agent ${a.agentId} is already running`);b.meta.status="running",this.lastInvoke.set(a.agentId,{systemPrompt:a.systemPrompt,rootPath:b.rootPath}),b.lastUserMessage=a.userMessage??a.prompt,this.turnText.set(a.agentId,"");let c=K();a.userMessage&&await this.emit({type:"user-message",text:a.userMessage,agentId:a.agentId,ts:I(),seq:0}),await this.emit({type:"turn-start",turnId:c,agentId:a.agentId,ts:I(),seq:0});let d=null;try{d=await (0,z.Qr)(b.rootPath)}catch{}try{let e={meta:{id:b.meta.id},args:{rootPath:b.rootPath,reflexScope:b.reflexScope,systemPrompt:a.systemPrompt,prompt:a.prompt,model:b.meta.model,allowedTools:a.allowedTools??[]},manager:this};if("claude-code"===b.meta.harness)await (0,i.Z)(e);else if("codex"===b.meta.harness)await (0,j.H)(e);else if("ollama"===b.meta.harness)await (0,k.E)(e);else if("image-gen"===b.meta.harness)await (0,l.R)({meta:e.meta,args:{rootPath:e.args.rootPath,prompt:e.args.prompt},manager:e.manager});else throw Error(`Unsupported harness: ${String(b.meta.harness)}`);await this.applyImageGenDirectives(a.agentId);let f=await this.evaluateGoalContinuation(a.agentId);b.meta.status="idle",await this.emit({type:"turn-end",turnId:c,status:"completed",agentId:a.agentId,ts:I(),seq:0});let{writtenViaKb:g,dispatches:h,youtubeSummaries:m}=await this.detectInteractionDirectives(a.agentId);d&&await this.reindexAfterTurn(a.agentId,d,g),h.length>0&&"orchestrator"===b.meta.role?this.dispatchSubAgents(a.agentId,h).catch(b=>{this.emit({type:"error",message:"sub-agent dispatch failed: "+(b instanceof Error?b.message:String(b)),agentId:a.agentId,ts:I(),seq:0})}):m.length>0&&"orchestrator"===b.meta.role?this.runYoutubeSummaries(a.agentId,m).catch(b=>{this.emit({type:"error",message:"youtube-summary failed: "+(b instanceof Error?b.message:String(b)),agentId:a.agentId,ts:I(),seq:0})}):f&&setTimeout(()=>{this.continueTurn(a.agentId,`[Reflex /goal] Continue execution. Active goal: ${f.goal}. Iteration ${f.iteration}/${F.GX}. If the task is done AND verified, finish with the marker \`GOAL ACHIEVED\` and a kb-entry kind:"goal-completion".`)},50)}catch(e){let d=e instanceof Error?e.message:String(e);b.meta.status="idle",b.meta.error=d,await this.emit({type:"error",message:d,agentId:a.agentId,ts:I(),seq:0}),await this.emit({type:"turn-end",turnId:c,status:"failed",error:d,agentId:a.agentId,ts:I(),seq:0})}finally{this.turnText.delete(a.agentId)}}async respondPermission(a,b){let c,d=this.agents.get(a);if(!d)throw Error("Agent not found");let e="running"===d.meta.status;try{let a=(await (0,h.readEvents)(d.rootPath,d.meta.topicId)).find(a=>"permission-request"===a.type&&a.requestId===b.requestId);c=a?.action}catch{}await this.emit({type:"permission-response",requestId:b.requestId,decision:b.decision,...b.scope?{scope:b.scope}:{},agentId:a,ts:I(),seq:0});let f="";if("tool-policy"===c&&"allow"===b.decision&&b.tool)try{let a=await (0,D.loadSettings)(),c=d.meta.task,e=a.assignments[c];e&&!e.allowedTools.includes(b.tool)&&(e.allowedTools=[...e.allowedTools,b.tool],await (0,D.saveSettings)(a),f=` Tool ${b.tool} added to settings.assignments.${c}.allowedTools.`)}catch(b){await this.emit({type:"error",message:"Failed to save allowed tool: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:I(),seq:0})}let g=`[Reflex] Permission for ${b.tool??"action"} (${b.requestId}): ${b.decision}${b.scope?` (${b.scope})`:""}.${f} Continue.`,i="tool-policy"===c&&"allow"===b.decision&&!!b.tool&&!!f;if(e&&i&&d.killer){try{d.killer()}catch{}delete d.killer,d.meta.status="idle";let b=d.lastUserMessage??`${g} Retry the previous attempt with the now-allowed tool.`;await this.continueTurn(a,b);return}e||await this.continueTurn(a,g)}async respondQuestion(a,b){let c=this.agents.get(a);if(!c)throw Error("Agent not found");let d="running"===c.meta.status;await this.emit({type:"answer",questionId:b.questionId,answer:b.answer,agentId:a,ts:I(),seq:0});let e=`[Reflex] Answer for question ${b.questionId}: ${b.answer}. Continue.`;d||await this.continueTurn(a,e)}async respondMcpAdd(a,b){let d,e=this.agents.get(a),f=!!(e&&"running"===e.meta.status),g=null,i=e?.meta.topicId??null,j=e?.rootPath??null,k=this.pendingMcpAdds.get(b.requestId);if(k&&k.agentId===a)g=k.directive,this.pendingMcpAdds.delete(b.requestId);else{let a=await (0,A.az)(b.requestId);a&&(g=a.directive,i=i??a.topicId,j=j??a.rootPath)}if(!g)throw Error(`Unknown mcp-add request: ${b.requestId}`);let l=async a=>{if(e)return void await this.emit(a);i&&j&&await (0,h.appendEventSeq)(j,i,a)};if("reject"===b.decision){await l({type:"mcp-add-response",requestId:b.requestId,decision:"reject",agentId:a,ts:I(),seq:0}),d=`[Reflex] User rejected adding MCP server "${g.server}". Don't re-propose the same server — either pick a different approach or ask the user what they prefer.`,e&&!f&&await this.continueTurn(a,d);return}try{let e=await J(g.config,g.secrets??[],b.secretValues??{}),{McpConfigSchema:f}=await Promise.resolve().then(c.bind(c,88124)),h=f.parse(e),{addMcpServer:i,updateMcpServer:j,getMcpServer:k}=await Promise.resolve().then(c.bind(c,5243));await k(g.server)?await j(g.server,{label:g.label,...void 0!==g.description?{description:g.description}:{},config:h}):await i({id:g.server,label:g.label,...void 0!==g.description?{description:g.description}:{},config:h}),await l({type:"mcp-add-response",requestId:b.requestId,decision:"approve",server:g.server,agentId:a,ts:I(),seq:0}),d=`[Reflex] MCP server "${g.server}" registered. You can now call its tools via \`mcp__${g.server}__<tool>\` (chat) or \`reflex.mcp.call({server:"${g.server}",tool,args})\` (from a utility that declared it in manifest.mcpServers). Continue.`}catch(e){let c=e instanceof Error?e.message:String(e);await l({type:"error",message:"mcp-add failed: "+c,agentId:a,ts:I(),seq:0}),await l({type:"mcp-add-response",requestId:b.requestId,decision:"reject",agentId:a,ts:I(),seq:0}),d=`[Reflex] Failed to register MCP server "${g.server}": ${c}. Don't retry the exact same config; either fix the issue or ask the user.`}e&&!f&&await this.continueTurn(a,d)}async continueTurn(a,b){let c=this.agents.get(a);if(!c)return;let d=this.lastInvoke.get(a);if(!d)return void await this.emit({type:"error",message:"Cannot continue turn: no cached system prompt. Send another message manually.",agentId:a,ts:I(),seq:0});let e=[];try{let a=await (0,D.loadSettings)();e=a.assignments[c.meta.task]?.allowedTools??[]}catch{}let f=await L(d.rootPath,c.meta.topicId),g=`Prior conversation:
214
214
 
215
215
  ${f}
216
216
 
@@ -218,30 +218,29 @@ ${f}
218
218
  ${b}
219
219
 
220
220
  ### assistant
221
- (Reply now.)`;this.invoke({agentId:a,systemPrompt:d.systemPrompt,prompt:g,userMessage:b,allowedTools:e}).catch(()=>{})}async evaluateGoalContinuation(a){let b,c=this.agents.get(a);if(!c||"orchestrator"!==c.meta.role)return null;try{b=await (0,D.getTopic)(c.rootPath,c.meta.topicId)}catch{return null}if(!b)return null;let d=b.meta;if(!d.goal||"active"!==d.goalStatus)return null;let e=this.turnText.get(a)??"";if(/(^|\n)\s*GOAL ACHIEVED\s*(\n|$)/i.test(e)||/<<reflex:kb>>[\s\S]*?"kind"\s*:\s*"goal-completion"[\s\S]*?<<\/reflex:kb>>/i.test(e)){try{await (0,D._9)(c.rootPath,c.meta.topicId,"completed")}catch{}return null}if(/<<reflex:(?:question|permission)>>[\s\S]*?<<\/reflex:(?:question|permission)>>/i.test(e))return null;try{let b=await (0,D.o0)(c.rootPath,c.meta.topicId);if(b>E.GX)return await (0,D._9)(c.rootPath,c.meta.topicId,"abandoned"),await this.emit({type:"error",message:`Goal iteration cap reached (${E.GX}). Goal marked as abandoned — clear or restart via /goal to keep trying.`,agentId:a,ts:H(),seq:0}),null;return{goal:d.goal,iteration:b}}catch{return null}}async reindexAfterTurn(a,b,c=new Set){let d=this.agents.get(a);if(d)try{let e=(await (0,y.pV)(d.rootPath,b)).filter(a=>!c.has(a.abs));if(0===e.length)return;for(let b of(await (0,y.F8)(d.rootPath,e),e))await this.emit({type:"kb-write",kind:b.kind??"note",title:b.title??b.rel,relPath:b.rel,absPath:b.abs,agentId:a,ts:H(),seq:0})}catch(b){await this.emit({type:"error",message:"kb auto-index failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:H(),seq:0})}}async dispatchSubAgents(a,b){let c=this.agents.get(a);if(!c)return;let d=await (0,C.loadSettings)(),e=c.meta.harness,f=c.meta.model,g=d.language,h=(await Promise.all(b.map(async b=>{var d;let h=b.role,i=F.pO[h],j=J(),k=b.harness&&(d=b.harness,M.has(d))?b.harness:e,l="string"==typeof b.model&&b.model.length>0?b.model:f,m={id:j,topicId:c.meta.topicId,rootId:c.meta.rootId,role:"subagent",task:c.meta.task,harness:k,model:l,label:i.label,status:"idle",startedAt:H(),parentId:a};this.agents.set(j,{meta:m,rootPath:c.rootPath,reflexScope:c.reflexScope}),await this.emit({type:"agent-start",meta:m,agentId:j,ts:H(),seq:0});let n=i.systemPrompt({language:g,root:c.rootPath,reflexScope:c.reflexScope,brief:b.brief}),o=b.brief,p=`${o}
221
+ (Reply now.)`;this.invoke({agentId:a,systemPrompt:d.systemPrompt,prompt:g,userMessage:b,allowedTools:e}).catch(()=>{})}async evaluateGoalContinuation(a){let b,c=this.agents.get(a);if(!c||"orchestrator"!==c.meta.role)return null;try{b=await (0,E.getTopic)(c.rootPath,c.meta.topicId)}catch{return null}if(!b)return null;let d=b.meta;if(!d.goal||"active"!==d.goalStatus)return null;let e=this.turnText.get(a)??"";if(/(^|\n)\s*GOAL ACHIEVED\s*(\n|$)/i.test(e)||/<<reflex:kb>>[\s\S]*?"kind"\s*:\s*"goal-completion"[\s\S]*?<<\/reflex:kb>>/i.test(e)){try{await (0,E._9)(c.rootPath,c.meta.topicId,"completed")}catch{}return null}if(/<<reflex:(?:question|permission)>>[\s\S]*?<<\/reflex:(?:question|permission)>>/i.test(e))return null;try{let b=await (0,E.o0)(c.rootPath,c.meta.topicId);if(b>F.GX)return await (0,E._9)(c.rootPath,c.meta.topicId,"abandoned"),await this.emit({type:"error",message:`Goal iteration cap reached (${F.GX}). Goal marked as abandoned — clear or restart via /goal to keep trying.`,agentId:a,ts:I(),seq:0}),null;return{goal:d.goal,iteration:b}}catch{return null}}async reindexAfterTurn(a,b,c=new Set){let d=this.agents.get(a);if(d)try{let e=(await (0,z.pV)(d.rootPath,b)).filter(a=>!c.has(a.abs));if(0===e.length)return;for(let b of(await (0,z.F8)(d.rootPath,e),e))await this.emit({type:"kb-write",kind:b.kind??"note",title:b.title??b.rel,relPath:b.rel,absPath:b.abs,agentId:a,ts:I(),seq:0})}catch(b){await this.emit({type:"error",message:"kb auto-index failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:I(),seq:0})}}async dispatchSubAgents(a,b){let c=this.agents.get(a);if(!c)return;let d=await (0,D.loadSettings)(),e=c.meta.harness,f=c.meta.model,g=d.language,h=(await Promise.all(b.map(async b=>{var d;let h=b.role,i=G.pO[h],j=K(),k=b.harness&&(d=b.harness,T.has(d))?b.harness:e,l="string"==typeof b.model&&b.model.length>0?b.model:f,m={id:j,topicId:c.meta.topicId,rootId:c.meta.rootId,role:"subagent",task:c.meta.task,harness:k,model:l,label:i.label,status:"idle",startedAt:I(),parentId:a};this.agents.set(j,{meta:m,rootPath:c.rootPath,reflexScope:c.reflexScope}),await this.emit({type:"agent-start",meta:m,agentId:j,ts:I(),seq:0});let n=i.systemPrompt({language:g,root:c.rootPath,reflexScope:c.reflexScope,brief:b.brief}),o=b.brief,p=`${o}
222
222
 
223
223
  ### assistant
224
- (Reply now.)`;try{await this.invoke({agentId:j,systemPrompt:n,prompt:p,userMessage:o,allowedTools:i.allowedTools})}catch(c){let a=c instanceof Error?c.message:String(c);return await this.emit({type:"error",message:`sub-agent (${h}) failed: ${a}`,agentId:j,ts:H(),seq:0}),await this.destroy(j,"failed"),{role:h,id:b.id??j,brief:b.brief,output:"",error:a}}let q=(this.turnText.get(j)??"").trim();return await this.destroy(j,"completed"),{role:h,id:b.id??j,brief:b.brief,output:q}}))).map(a=>{let b=`### sub-agent: ${a.role}${a.id?` [${a.id}]`:""}`,c=`**Brief:** ${a.brief.replace(/\n+/g," ").trim()}`,d=a.error?`_failed_ — ${a.error}`:a.output.length>0?a.output:"_(no output)_";return[b,c,"",d].join("\n")}),i=["[Reflex] Sub-agent results follow. Use them to compose the user-facing reply. Do NOT re-dispatch the same brief; if a result is empty or insufficient, either solve it yourself or ask the user.","",...h].join("\n\n");await this.continueTurn(a,i)}async detectInteractionDirectives(a){let b=new Set,d=this.turnText.get(a)??"";if(!d)return{writtenViaKb:b,dispatches:[],youtubeSummaries:[]};let e=this.agents.get(a);for(let b of(0,m.gQ)(d))await this.emit({type:"permission-request",requestId:b.id??J(),...b.tool?{tool:b.tool}:{},...b.action?{action:b.action}:{},...void 0!==b.input?{input:b.input}:{},...b.description?{description:b.description}:{},agentId:a,ts:H(),seq:0});for(let b of(0,m.dJ)(d))await this.emit({type:"question",questionId:b.id??J(),prompt:b.prompt,...b.header?{header:b.header}:{},...b.multiSelect?{multiSelect:!0}:{},...b.choices?{choices:b.choices}:{},...b.options?{options:b.options}:{},agentId:a,ts:H(),seq:0});for(let b of(0,m.eD)(d)){let c=b.id??J();this.pendingMcpAdds.set(c,{agentId:a,directive:b}),e&&await (0,z.GC)({requestId:c,agentId:a,topicId:e.meta.topicId,rootPath:e.rootPath,directive:b}),await this.emit({type:"mcp-add-request",requestId:c,server:b.server,label:b.label,...b.description?{description:b.description}:{},config:function(a,b){if(!a||"object"!=typeof a)return a;let c=a.transport,d="stdio"===c?"env":"http"===c||"sse"===c?"headers":null;if(!d)return a;let e=new Set(b.map(a=>a.envKey));if(0===e.size)return a;let f=a[d];if(!f||"object"!=typeof f)return a;let g={};for(let[a,b]of Object.entries(f))g[a]=e.has(a)?"***":String(b);return{...a,[d]:g}}(b.config,b.secrets??[]),...b.secrets&&b.secrets.length>0?{secrets:b.secrets}:{},agentId:a,ts:H(),seq:0})}if(e){for(let c of(0,m.Bc)(d))try{let d=await (0,x.j)({rootPath:e.rootPath,directive:c});b.add(d.absPath),await this.emit({type:"kb-write",kind:d.kind,title:d.title,relPath:d.relPath,absPath:d.absPath,agentId:a,ts:H(),seq:0})}catch(b){await this.emit({type:"error",message:"kb-write failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:H(),seq:0})}for(let b of(await this.processMemoryWrites(d,a,e.rootPath),await this.processSuggestions(d,a,e.rootPath,e.meta.topicId),(0,m.c_)(d)&&await this.emit({type:"onboarding-done",agentId:a,ts:H(),seq:0}),await this.processSkillCreates(d,a,e.rootPath),await this.processTaskMarkers(d,a,e.rootPath),await this.processNotifies(d,a),(0,g.isHomeRoot)(e.meta.rootId)?await this.processRoutes(d,a):await this.processDispatchedReport(d,e.rootPath,e.meta.topicId),(0,m.Oo)(d)))try{let d=b.manifest&&"object"==typeof b.manifest?b.manifest:{},f=d.source&&"object"==typeof d.source?d.source:{},{source:g,...h}=d,i=A.pL.parse(h),j=["agent","github","archive","mcp"],k="string"==typeof f.type&&j.includes(f.type)?f.type:"agent",l=await (0,B.gd)({scope:b.scope,..."project"===b.scope?{rootId:e.meta.rootId}:{},manifest:i,files:b.files,source:{type:k,origin:"string"==typeof f.origin?f.origin:`agent:${e.meta.rootId}:${e.meta.topicId}:${e.meta.id}`,fetchedAt:new Date().toISOString(),installedBy:"agent"}}),m=await c.e(7300).then(c.bind(c,47300));await m.buildUtility(l),await this.emit({type:"utility-installed",utilityId:l.manifest.id,scope:l.scope,name:l.manifest.name,version:l.manifest.version,agentId:a,ts:H(),seq:0})}catch(b){await this.emit({type:"utility-error",message:"utility install failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:H(),seq:0})}}let f=(0,m.Eb)(d).filter(a=>(0,F.Aq)(a.role)),h=(0,m.XZ)(d),i=(0,m.Dq)(d),j=(0,m.Up)(d);e&&(i.length>0||j.length>0)&&await this.applyWidgetDirectives(e.rootPath,e.meta.topicId,a,i,j);let k=(0,m.QN)(d);return e&&k.length>0&&await this.applyWorkflowDirectives(e.rootPath,e.meta.topicId,a,k),{writtenViaKb:b,dispatches:f,youtubeSummaries:h}}async applyImageGenDirectives(a){let b=this.agents.get(a);if(!b)return;let c=this.turnText.get(a)??"";if(!c||!c.includes("reflex:image-gen"))return;let d=(0,m.qk)(c);if(0!==d.length)for(let c of d)try{let d=await (0,t.generateImage)({rootId:b.meta.rootId,prompt:c.prompt,...c.provider?{provider:c.provider}:{},...c.size?{size:c.size}:{},...c.aspectRatio?{aspectRatio:c.aspectRatio}:{},...c.referenceImageUrls?{referenceImageUrls:c.referenceImageUrls}:{}}),e=(c.caption||c.prompt).replace(/[\[\]\n]/g," ").slice(0,200);if(await this.emit({type:"assistant-delta",text:`
224
+ (Reply now.)`;try{await this.invoke({agentId:j,systemPrompt:n,prompt:p,userMessage:o,allowedTools:i.allowedTools})}catch(c){let a=c instanceof Error?c.message:String(c);return await this.emit({type:"error",message:`sub-agent (${h}) failed: ${a}`,agentId:j,ts:I(),seq:0}),await this.destroy(j,"failed"),{role:h,id:b.id??j,brief:b.brief,output:"",error:a}}let q=(this.turnText.get(j)??"").trim();return await this.destroy(j,"completed"),{role:h,id:b.id??j,brief:b.brief,output:q}}))).map(a=>{let b=`### sub-agent: ${a.role}${a.id?` [${a.id}]`:""}`,c=`**Brief:** ${a.brief.replace(/\n+/g," ").trim()}`,d=a.error?`_failed_ — ${a.error}`:a.output.length>0?a.output:"_(no output)_";return[b,c,"",d].join("\n")}),i=["[Reflex] Sub-agent results follow. Use them to compose the user-facing reply. Do NOT re-dispatch the same brief; if a result is empty or insufficient, either solve it yourself or ask the user.","",...h].join("\n\n");await this.continueTurn(a,i)}async ensureInteractiveDirectives(){let{capabilityRegistry:a}=await c.e(7523).then(c.bind(c,47523)),b=a();return this.interactiveRegistered||(this.interactiveRegistered=!0,b.has("permission")||b.register({kind:"interactive",id:"permission",doc:"Request permission to run a tool/action; suspends the turn.",open:async(a,b)=>{let c=a.id??K();return await this.emit({type:"permission-request",requestId:c,...a.tool?{tool:a.tool}:{},...a.action?{action:a.action}:{},...void 0!==a.input?{input:a.input}:{},...a.description?{description:a.description}:{},agentId:b.agentId,ts:I(),seq:0}),{requestId:c}},resolve:async(a,b,c)=>{await this.respondPermission(c.agentId,{requestId:a,decision:b.decision,...b.scope?{scope:b.scope}:{},...b.tool?{tool:b.tool}:{}})}}),b.has("question")||b.register({kind:"interactive",id:"question",doc:"Ask the user a question (choices or open-ended); suspends the turn.",open:async(a,b)=>{let c=a.id??K();return await this.emit({type:"question",questionId:c,prompt:a.prompt,...a.header?{header:a.header}:{},...a.multiSelect?{multiSelect:!0}:{},...a.choices?{choices:a.choices}:{},...a.options?{options:a.options}:{},agentId:b.agentId,ts:I(),seq:0}),{requestId:c}},resolve:async(a,b,c)=>{await this.respondQuestion(c.agentId,{questionId:a,answer:b.answer})}}),b.has("mcp-add")||b.register({kind:"interactive",id:"mcp-add",doc:"Propose adding an MCP server (with optional secrets); suspends the turn.",open:async(a,b)=>{let c=b.agentId,d=a.id??K(),e=this.agents.get(c);return this.pendingMcpAdds.set(d,{agentId:c,directive:a}),e&&await (0,A.GC)({requestId:d,agentId:c,topicId:e.meta.topicId,rootPath:e.rootPath,directive:a}),await this.emit({type:"mcp-add-request",requestId:d,server:a.server,label:a.label,...a.description?{description:a.description}:{},config:function(a,b){if(!a||"object"!=typeof a)return a;let c=a.transport,d="stdio"===c?"env":"http"===c||"sse"===c?"headers":null;if(!d)return a;let e=new Set(b.map(a=>a.envKey));if(0===e.size)return a;let f=a[d];if(!f||"object"!=typeof f)return a;let g={};for(let[a,b]of Object.entries(f))g[a]=e.has(a)?"***":String(b);return{...a,[d]:g}}(a.config,a.secrets??[]),...a.secrets&&a.secrets.length>0?{secrets:a.secrets}:{},agentId:c,ts:I(),seq:0}),{requestId:d}},resolve:async(a,b,c)=>{await this.respondMcpAdd(c.agentId,{requestId:a,decision:b.decision,...b.secretValues?{secretValues:b.secretValues}:{}})}})),b}async resolveInteractive(a,b,c,d){let e=await this.ensureInteractiveDirectives();await e.resolve(a,b,c,{caller:"user",agentId:d})}async detectInteractionDirectives(a){let b=new Set,d=this.turnText.get(a)??"";if(!d)return{writtenViaKb:b,dispatches:[],youtubeSummaries:[]};let e=this.agents.get(a),f=await this.ensureInteractiveDirectives(),h={caller:"agent",agentId:a};for(let a of(0,m.gQ)(d))await f.open("permission",a,h);for(let a of(0,m.dJ)(d))await f.open("question",a,h);for(let a of(0,m.eD)(d))await f.open("mcp-add",a,h);if(e){let f=(0,m.Bc)(d),h=await Q();for(let c of f)try{let d=await h.invoke("kb.write",{rootPath:e.rootPath,directive:c},{caller:"agent",rootPath:e.rootPath});b.add(d.absPath),await this.emit({type:"kb-write",kind:d.kind,title:d.title,relPath:d.relPath,absPath:d.absPath,agentId:a,ts:I(),seq:0})}catch(b){await this.emit({type:"error",message:"kb-write failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:I(),seq:0})}for(let b of(await this.processMemoryWrites(d,a,e.rootPath),await this.processSuggestions(d,a,e.rootPath,e.meta.topicId),(0,m.c_)(d)&&await this.emit({type:"onboarding-done",agentId:a,ts:I(),seq:0}),await this.processSkillCreates(d,a,e.rootPath),await this.processTaskMarkers(d,a,e.rootPath),await this.processNotifies(d,a),(0,g.isHomeRoot)(e.meta.rootId)?await this.processRoutes(d,a):await this.processDispatchedReport(d,e.rootPath,e.meta.topicId),(0,m.Oo)(d)))try{let d=b.manifest&&"object"==typeof b.manifest?b.manifest:{},f=d.source&&"object"==typeof d.source?d.source:{},{source:g,...h}=d,i=B.pL.parse(h),j=["agent","github","archive","mcp"],k="string"==typeof f.type&&j.includes(f.type)?f.type:"agent",l=await (0,C.gd)({scope:b.scope,..."project"===b.scope?{rootId:e.meta.rootId}:{},manifest:i,files:b.files,source:{type:k,origin:"string"==typeof f.origin?f.origin:`agent:${e.meta.rootId}:${e.meta.topicId}:${e.meta.id}`,fetchedAt:new Date().toISOString(),installedBy:"agent"}}),m=await c.e(7300).then(c.bind(c,47300));await m.buildUtility(l),await this.emit({type:"utility-installed",utilityId:l.manifest.id,scope:l.scope,name:l.manifest.name,version:l.manifest.version,agentId:a,ts:I(),seq:0})}catch(b){await this.emit({type:"utility-error",message:"utility install failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:I(),seq:0})}}let i=(0,m.Eb)(d).filter(a=>(0,G.Aq)(a.role)),j=(0,m.XZ)(d),k=(0,m.Dq)(d),l=(0,m.Up)(d);e&&(k.length>0||l.length>0)&&await this.applyWidgetDirectives(e.rootPath,e.meta.topicId,a,k,l);let n=(0,m.QN)(d);return e&&n.length>0&&await this.applyWorkflowDirectives(e.rootPath,e.meta.topicId,a,n),{writtenViaKb:b,dispatches:i,youtubeSummaries:j}}async applyImageGenDirectives(a){let b=this.agents.get(a);if(!b)return;let c=this.turnText.get(a)??"";if(!c||!c.includes("reflex:image-gen"))return;let d=(0,m.qk)(c);if(0!==d.length)for(let c of d)try{let d=await (0,t.generateImage)({rootId:b.meta.rootId,prompt:c.prompt,...c.provider?{provider:c.provider}:{},...c.size?{size:c.size}:{},...c.aspectRatio?{aspectRatio:c.aspectRatio}:{},...c.referenceImageUrls?{referenceImageUrls:c.referenceImageUrls}:{}}),e=(c.caption||c.prompt).replace(/[\[\]\n]/g," ").slice(0,200);if(await this.emit({type:"assistant-delta",text:`
225
225
 
226
226
  ![${e}](${d.urlPath})
227
- `,agentId:a,ts:H(),seq:0}),c.attachToKb)try{let f=await (0,x.j)({rootPath:b.rootPath,directive:{kind:"image",title:c.caption||c.prompt.slice(0,80),body:`![${e}](${d.urlPath})`,meta:{provider:d.provider,prompt:c.prompt,sha:d.sha,...c.aspectRatio?{aspectRatio:c.aspectRatio}:{}}}});await this.emit({type:"kb-write",kind:f.kind,title:f.title,relPath:f.relPath,absPath:f.absPath,agentId:a,ts:H(),seq:0})}catch(b){await this.emit({type:"error",message:"image-gen kb attach failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:H(),seq:0})}}catch(b){await this.emit({type:"assistant-delta",text:`
227
+ `,agentId:a,ts:I(),seq:0}),c.attachToKb)try{let f=await (0,y.j)({rootPath:b.rootPath,directive:{kind:"image",title:c.caption||c.prompt.slice(0,80),body:`![${e}](${d.urlPath})`,meta:{provider:d.provider,prompt:c.prompt,sha:d.sha,...c.aspectRatio?{aspectRatio:c.aspectRatio}:{}}}});await this.emit({type:"kb-write",kind:f.kind,title:f.title,relPath:f.relPath,absPath:f.absPath,agentId:a,ts:I(),seq:0})}catch(b){await this.emit({type:"error",message:"image-gen kb attach failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:I(),seq:0})}}catch(b){await this.emit({type:"assistant-delta",text:`
228
228
 
229
229
  _Failed to generate image: ${b instanceof Error?b.message:String(b)}_
230
- `,agentId:a,ts:H(),seq:0})}}async processMemoryWrites(a,b,c){for(let d of(0,m.tS)(a))try{if(!(0,o.qL)(d.scope)||!(0,o.UV)(d.file)||!(0,o.Tf)(d.op)){await this.emit({type:"error",message:`memory-write: bad marker (scope=${d.scope}, file=${d.file}, op=${d.op})`,agentId:b,ts:H(),seq:0});continue}let a="global"===d.scope?{scope:"global"}:{scope:"project",rootPath:c},e=await (0,n.xP)(a,d.file,d.op,{...void 0!==d.content?{content:d.content}:{},...void 0!==d.match?{match:d.match}:{}});if(!e.ok){await this.emit({type:"error",message:`memory-write rejected (${e.error}) for ${d.scope}/${d.file}`,agentId:b,ts:H(),seq:0});continue}await this.emit({type:"memory-write",scope:d.scope,file:d.file,op:d.op,lines:e.lines,cap:e.cap,agentId:b,ts:H(),seq:0})}catch(a){await this.emit({type:"error",message:"memory-write failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:H(),seq:0})}}async processTaskMarkers(a,b,c){for(let d of(0,m.ay)(a))try{let a=await (0,r.createTask)(c,{title:d.title,body:d.body??"",...d.type&&(0,s.kJ)(d.type)?{type:d.type}:{},...d.status&&(0,s.KT)(d.status)?{status:d.status}:{},...d.priority&&(0,s.ak)(d.priority)?{priority:d.priority}:{},...Array.isArray(d.labels)?{labels:d.labels.map(String)}:{},...d.parent?{parent:d.parent}:{}});await this.emit({type:"task-created",taskId:a.id,title:a.title,taskType:a.type,status:a.status,agentId:b,ts:H(),seq:0})}catch(a){await this.emit({type:"error",message:"task-create failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:H(),seq:0})}for(let d of(0,m.re)(a))try{let a={};"string"==typeof d.patch.title&&(a.title=d.patch.title),"string"==typeof d.patch.body&&(a.body=d.patch.body),d.patch.type&&(0,s.kJ)(d.patch.type)&&(a.type=d.patch.type),d.patch.status&&(0,s.KT)(d.patch.status)&&(a.status=d.patch.status),d.patch.priority&&(0,s.ak)(d.patch.priority)&&(a.priority=d.patch.priority),Array.isArray(d.patch.labels)&&(a.labels=d.patch.labels.map(String)),void 0!==d.patch.assignee&&(a.assignee=d.patch.assignee??null);let e=await (0,r.updateTask)(c,d.id,a);if(!e){await this.emit({type:"error",message:`task-update: task ${d.id} not found`,agentId:b,ts:H(),seq:0});continue}await this.emit({type:"task-updated",taskId:e.id,status:e.status,agentId:b,ts:H(),seq:0})}catch(a){await this.emit({type:"error",message:"task-update failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:H(),seq:0})}}async processSkillCreates(a,b,c){for(let d of(0,m.oT)(a))try{let a=await (0,q.hI)({scope:d.scope,id:d.id,title:d.title,description:d.description??"",instructions:d.instructions,..."project"===d.scope?{rootPath:c}:{},...d.workflowId?{workflowId:d.workflowId}:{},...d.utilityRef?{utilityRef:d.utilityRef}:{}});await this.emit({type:"skill-created",scope:d.scope,skillId:d.id,title:d.title,file:a,agentId:b,ts:H(),seq:0})}catch(a){await this.emit({type:"error",message:"skill-create failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:H(),seq:0})}}async processNotifies(a,b){let d=(0,m.B5)(a);if(0===d.length)return;let{notify:e}=await c.e(3377).then(c.bind(c,3377));for(let a of d)try{await e({body:a.body,...a.title?{title:a.title}:{},...a.link?{link:a.link}:{}})}catch(a){await this.emit({type:"error",message:`notify failed: ${a instanceof Error?a.message:String(a)}`,agentId:b,ts:H(),seq:0})}}async processRoutes(a,b){let d=(0,m.WM)(a);if(0===d.length)return;let{getRoot:e,addRoot:f}=await Promise.resolve().then(c.bind(c,24576));for(let a of d)try{if("space-create"===a.kind){let d=(a.title??"").trim();if(!d)throw Error("space-create: title required");let e=await Promise.resolve().then(c.t.bind(c,48161,23)),g=await Promise.resolve().then(c.t.bind(c,76760,23)),h=d.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"space",i=a.path&&a.path.trim()?a.path.trim():g.join(e.homedir(),"reflex-spaces",h),{promises:j}=await Promise.resolve().then(c.t.bind(c,73024,23));await j.mkdir(i,{recursive:!0});let k=await f(i);await this.emit({type:"system",text:`Created Space "${d}" → ${k.id} (${i})`,agentId:b,ts:H(),seq:0})}else if("task"===a.kind){let d=await e(a.rootId??"");if(!d)throw Error(`task: unknown Space ${a.rootId}`);let{createTask:f}=await Promise.resolve().then(c.bind(c,2787)),g=await f(d.path,{title:(a.title??"").trim()||"Untitled task",...a.body?{body:a.body}:{},...a.taskType?{type:a.taskType}:{}});await this.emit({type:"system",text:`Filed task "${g.title}" in ${a.rootId} (${g.id})`,agentId:b,ts:H(),seq:0})}else if("dispatch"===a.kind){let d=await e(a.rootId??"");if(!d)throw Error(`dispatch: unknown Space ${a.rootId}`);let f=(a.prompt??"").trim();if(!f)throw Error("dispatch: prompt required");let{createTopic:g}=await Promise.resolve().then(c.bind(c,56843)),{startOrchestratorTurn:h}=await Promise.resolve().then(c.bind(c,31900)),i=await g({root:d.path,firstMessage:f,dispatchedFromDispatcher:!0});h({rootId:d.id,topicId:i.meta.id,message:f,attachments:[]}),await this.emit({type:"system",text:`Dispatched an agent in ${a.rootId} → /roots/${a.rootId}/chat/${i.meta.id}`,agentId:b,ts:H(),seq:0})}}catch(c){await this.emit({type:"error",message:`route (${a.kind}) failed: ${c instanceof Error?c.message:String(c)}`,agentId:b,ts:H(),seq:0})}}async processDispatchedReport(a,b,d){let{getTopic:e}=await Promise.resolve().then(c.bind(c,56843)),f=await e(b,d).catch(()=>null);if(!f?.meta.dispatchedFromDispatcher)return;let{relayToDispatcher:g,spaceNameFromPath:h}=await c.e(7430).then(c.bind(c,97430)),i=h(b),j=(0,m.Hz)(a);if(j.length>0){for(let a of j)await g({spaceName:i,body:a.body,...a.status?{status:a.status}:{}});return}let k=a.replace(/<{1,2}reflex:[a-z-]+>{1,2}[\s\S]*?<{1,2}\/reflex:[a-z-]+>{1,2}/g,"").replace(/\n{3,}/g,"\n\n").trim();await g({spaceName:i,body:k?k.slice(0,1500):"Finished.",status:"done"})}async processSuggestions(a,b,c,d){for(let e of(0,m.fU)(a))try{if(!p.vT.includes(e.kind)||!e.title?.trim()||!e.prompt?.trim()){await this.emit({type:"error",message:`suggestion rejected: invalid shape (kind=${e.kind})`,agentId:b,ts:H(),seq:0});continue}let a=await (0,p.Ed)(c,{kind:e.kind,title:e.title,description:e.description??"",prompt:e.prompt,sourceTopicId:d});await this.emit({type:"suggestion-added",suggestionId:a.id,kind:a.kind,title:a.title,agentId:b,ts:H(),seq:0})}catch(a){await this.emit({type:"error",message:"suggestion failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:H(),seq:0})}}async applyWorkflowDirectives(a,b,c,d){for(let e of d)try{let d=(0,v.ni)(e.id);if(!d)throw Error("Workflow id is empty");let f=new Date().toISOString(),g=e.steps.map((a,b)=>({id:(0,v.ni)(a.id??`step-${b+1}`),kind:a.kind,label:a.label,params:a.params??{}})),h={id:d,label:e.label,...e.description?{description:e.description}:{},trigger:e.trigger??"manual",steps:g,createdAt:f,updatedAt:f,sourceTopicId:b},i=(0,w.n)(h);if(i)throw Error(i);await (0,v.r$)(a,h),await this.emit({type:"workflow-event",workflowId:h.id,label:h.label,...h.description?{description:h.description}:{},trigger:h.trigger,stepCount:h.steps.length,sourceTopicId:b,agentId:c,ts:f,seq:0})}catch(a){await this.emit({type:"workflow-error",workflowId:e.id,message:"workflow-create failed: "+(a instanceof Error?a.message:String(a)),agentId:c,ts:H(),seq:0})}}async applyWidgetDirectives(a,b,c,d,e){let f=await (0,u.readLayout)(a),g=[...f.order],h=[...f.hidden];for(let f of[...d,...e]){let d=e.includes(f);try{let e={kind:f.kind,data:f.data},i=d?await (0,u.readWidget)(a,f.id):null,j=(0,u.buildRecord)({id:f.id,title:f.title,...f.description?{description:f.description}:{},sourceTopicId:b,payload:e,existing:i,...f.size?{size:f.size}:{},...f.refresh?{refresh:f.refresh}:{},...void 0!==f.memory?{memory:f.memory}:{},...f.memoryFile?{memoryFile:f.memoryFile}:{}});await (0,u.writeWidget)(a,j),i||h.includes(j.id)||g.includes(j.id)||h.push(j.id),await this.emit({type:"widget-event",op:d&&i?"update":"create",widgetId:j.id,title:j.title,...j.description?{description:j.description}:{},kind:j.kind,data:j.data,sourceTopicId:b,agentId:c,ts:H(),seq:0})}catch(a){await this.emit({type:"widget-error",widgetId:f.id,message:(d?"widget-update":"widget-create")+" failed: "+(a instanceof Error?a.message:String(a)),agentId:c,ts:H(),seq:0})}}await (0,u.writeLayout)(a,{order:g,hidden:h})}async runYoutubeSummaries(a,b){if(!this.agents.get(a))return;await this.emit({type:"system",text:`Starting Gemini YouTube summary (${b.length}):
231
- ${b.map(a=>`• ${a.url}`).join("\n")}`,subtype:"reflex.preflight",agentId:a,ts:H(),seq:0});let{summarizeYoutubeAction:d}=await Promise.resolve().then(c.bind(c,18746)),e=await Promise.all(b.map(async a=>{let b=await d({url:a.url,...a.prompt?{prompt:a.prompt}:{}});return b.ok?{url:a.url,text:b.text,model:b.model}:{url:a.url,error:b.error}})),f=e.map(a=>"text"in a?[`### youtube-summary ${a.url}`,`_(Gemini ${a.model} — use as primary source; do not WebFetch the same URL.)_`,"",a.text].join("\n"):`### youtube-summary ${a.url}
232
- _(Gemini failed: ${a.error}. Notify the user and suggest saving the key in Settings -> Gemini, or answer without the summary.)_`);await this.emit({type:"system",text:e.every(a=>"text"in a)?"Summaries received, passing to the agent.":"Some summaries failed — details are in the context.",subtype:"reflex.preflight",agentId:a,ts:H(),seq:0});let g=`[Reflex] Gemini YouTube summaries you requested:
230
+ `,agentId:a,ts:I(),seq:0})}}async processMemoryWrites(a,b,c){let d=(0,m.tS)(a),e=await N();for(let a of d)try{if(!(0,o.qL)(a.scope)||!(0,o.UV)(a.file)||!(0,o.Tf)(a.op)){await this.emit({type:"error",message:`memory-write: bad marker (scope=${a.scope}, file=${a.file}, op=${a.op})`,agentId:b,ts:I(),seq:0});continue}let d="global"===a.scope?{scope:"global"}:{scope:"project",rootPath:c},f=await e.invoke("memory.write",{ctx:d,file:a.file,op:a.op,...void 0!==a.content?{content:a.content}:{},...void 0!==a.match?{match:a.match}:{}},{caller:"agent",rootPath:c});if(!f.ok){await this.emit({type:"error",message:`memory-write rejected (${f.error}) for ${a.scope}/${a.file}`,agentId:b,ts:I(),seq:0});continue}await this.emit({type:"memory-write",scope:a.scope,file:a.file,op:a.op,lines:f.lines,cap:f.cap,agentId:b,ts:I(),seq:0})}catch(a){await this.emit({type:"error",message:"memory-write failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:I(),seq:0})}}async processTaskMarkers(a,b,c){let d=(0,m.ay)(a),e=await P();for(let a of d)try{let d={title:a.title,body:a.body??"",...a.type&&(0,s.kJ)(a.type)?{type:a.type}:{},...a.status&&(0,s.KT)(a.status)?{status:a.status}:{},...a.priority&&(0,s.ak)(a.priority)?{priority:a.priority}:{},...Array.isArray(a.labels)?{labels:a.labels.map(String)}:{},...a.parent?{parent:a.parent}:{}},f=await e.invoke("task.create",{rootPath:c,data:d},{caller:"agent",rootPath:c});await this.emit({type:"task-created",taskId:f.id,title:f.title,taskType:f.type,status:f.status,agentId:b,ts:I(),seq:0})}catch(a){await this.emit({type:"error",message:"task-create failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:I(),seq:0})}for(let d of(0,m.re)(a))try{let a={};"string"==typeof d.patch.title&&(a.title=d.patch.title),"string"==typeof d.patch.body&&(a.body=d.patch.body),d.patch.type&&(0,s.kJ)(d.patch.type)&&(a.type=d.patch.type),d.patch.status&&(0,s.KT)(d.patch.status)&&(a.status=d.patch.status),d.patch.priority&&(0,s.ak)(d.patch.priority)&&(a.priority=d.patch.priority),Array.isArray(d.patch.labels)&&(a.labels=d.patch.labels.map(String)),void 0!==d.patch.assignee&&(a.assignee=d.patch.assignee??null);let f=await e.invoke("task.update",{rootPath:c,id:d.id,patch:a},{caller:"agent",rootPath:c});if(!f){await this.emit({type:"error",message:`task-update: task ${d.id} not found`,agentId:b,ts:I(),seq:0});continue}await this.emit({type:"task-updated",taskId:f.id,status:f.status,agentId:b,ts:I(),seq:0})}catch(a){await this.emit({type:"error",message:"task-update failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:I(),seq:0})}}async processSkillCreates(a,b,c){for(let d of(0,m.oT)(a))try{let a=await (0,q.hI)({scope:d.scope,id:d.id,title:d.title,description:d.description??"",instructions:d.instructions,..."project"===d.scope?{rootPath:c}:{},...d.workflowId?{workflowId:d.workflowId}:{},...d.utilityRef?{utilityRef:d.utilityRef}:{}});await this.emit({type:"skill-created",scope:d.scope,skillId:d.id,title:d.title,file:a,agentId:b,ts:I(),seq:0})}catch(a){await this.emit({type:"error",message:"skill-create failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:I(),seq:0})}}async processNotifies(a,b){let c=(0,m.B5)(a);if(0===c.length)return;let d=await M();for(let a of c)try{await d.invoke("notify",{body:a.body,...a.title?{title:a.title}:{},...a.link?{link:a.link}:{}},{caller:"agent"})}catch(a){await this.emit({type:"error",message:`notify failed: ${a instanceof Error?a.message:String(a)}`,agentId:b,ts:I(),seq:0})}}async processRoutes(a,b){let d=(0,m.WM)(a);if(0===d.length)return;let{getRoot:e,addRoot:f}=await Promise.resolve().then(c.bind(c,24576));for(let a of d)try{if("space-create"===a.kind){let d=(a.title??"").trim();if(!d)throw Error("space-create: title required");let e=await Promise.resolve().then(c.t.bind(c,48161,23)),g=await Promise.resolve().then(c.t.bind(c,76760,23)),h=d.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"space",i=a.path&&a.path.trim()?a.path.trim():g.join(e.homedir(),"reflex-spaces",h),{promises:j}=await Promise.resolve().then(c.t.bind(c,73024,23));await j.mkdir(i,{recursive:!0});let k=await f(i);await this.emit({type:"system",text:`Created Space "${d}" → ${k.id} (${i})`,agentId:b,ts:I(),seq:0})}else if("task"===a.kind){let d=await e(a.rootId??"");if(!d)throw Error(`task: unknown Space ${a.rootId}`);let{createTask:f}=await Promise.resolve().then(c.bind(c,2787)),g=await f(d.path,{title:(a.title??"").trim()||"Untitled task",...a.body?{body:a.body}:{},...a.taskType?{type:a.taskType}:{}});await this.emit({type:"system",text:`Filed task "${g.title}" in ${a.rootId} (${g.id})`,agentId:b,ts:I(),seq:0})}else if("dispatch"===a.kind){let d=await e(a.rootId??"");if(!d)throw Error(`dispatch: unknown Space ${a.rootId}`);let f=(a.prompt??"").trim();if(!f)throw Error("dispatch: prompt required");let{createTopic:g}=await Promise.resolve().then(c.bind(c,56843)),{startOrchestratorTurn:h}=await Promise.resolve().then(c.bind(c,31900)),i=await g({root:d.path,firstMessage:f,dispatchedFromDispatcher:!0});h({rootId:d.id,topicId:i.meta.id,message:f,attachments:[]}),await this.emit({type:"system",text:`Dispatched an agent in ${a.rootId} → /roots/${a.rootId}/chat/${i.meta.id}`,agentId:b,ts:I(),seq:0})}}catch(c){await this.emit({type:"error",message:`route (${a.kind}) failed: ${c instanceof Error?c.message:String(c)}`,agentId:b,ts:I(),seq:0})}}async processDispatchedReport(a,b,d){let{getTopic:e}=await Promise.resolve().then(c.bind(c,56843)),f=await e(b,d).catch(()=>null);if(!f?.meta.dispatchedFromDispatcher)return;let{relayToDispatcher:g,spaceNameFromPath:h}=await c.e(7430).then(c.bind(c,97430)),i=h(b),j=(0,m.Hz)(a);if(j.length>0){for(let a of j)await g({spaceName:i,body:a.body,...a.status?{status:a.status}:{}});return}let k=a.replace(/<{1,2}reflex:[a-z-]+>{1,2}[\s\S]*?<{1,2}\/reflex:[a-z-]+>{1,2}/g,"").replace(/\n{3,}/g,"\n\n").trim();await g({spaceName:i,body:k?k.slice(0,1500):"Finished.",status:"done"})}async processSuggestions(a,b,c,d){let e=(0,m.fU)(a),f=await O();for(let a of e)try{if(!p.vT.includes(a.kind)||!a.title?.trim()||!a.prompt?.trim()){await this.emit({type:"error",message:`suggestion rejected: invalid shape (kind=${a.kind})`,agentId:b,ts:I(),seq:0});continue}let e=await f.invoke("suggestion.add",{rootPath:c,entry:{kind:a.kind,title:a.title,description:a.description??"",prompt:a.prompt,sourceTopicId:d}},{caller:"agent",rootPath:c,topicId:d});await this.emit({type:"suggestion-added",suggestionId:e.id,kind:e.kind,title:e.title,agentId:b,ts:I(),seq:0})}catch(a){await this.emit({type:"error",message:"suggestion failed: "+(a instanceof Error?a.message:String(a)),agentId:b,ts:I(),seq:0})}}async applyWorkflowDirectives(a,b,c,d){for(let e of d)try{let d=(0,v.ni)(e.id);if(!d)throw Error("Workflow id is empty");let f=new Date().toISOString(),g=e.steps.map((a,b)=>({id:(0,v.ni)(a.id??`step-${b+1}`),kind:a.kind,label:a.label,params:a.params??{}})),h={id:d,label:e.label,...e.description?{description:e.description}:{},trigger:e.trigger??"manual",steps:g,createdAt:f,updatedAt:f,sourceTopicId:b},i=(0,w.n)(h);if(i)throw Error(i);await (0,v.r$)(a,h),await this.emit({type:"workflow-event",workflowId:h.id,label:h.label,...h.description?{description:h.description}:{},trigger:h.trigger,stepCount:h.steps.length,sourceTopicId:b,agentId:c,ts:f,seq:0})}catch(a){await this.emit({type:"workflow-error",workflowId:e.id,message:"workflow-create failed: "+(a instanceof Error?a.message:String(a)),agentId:c,ts:I(),seq:0})}}async applyWidgetDirectives(a,b,c,d,e){let f=await (0,u.readLayout)(a),g=[...f.order],h=[...f.hidden],i=await R();for(let f of[...d,...e]){let d=e.includes(f);try{let e={kind:f.kind,data:f.data},j=d?await (0,u.readWidget)(a,f.id):null,k=(0,u.buildRecord)({id:f.id,title:f.title,...f.description?{description:f.description}:{},sourceTopicId:b,payload:e,existing:j,...f.size?{size:f.size}:{},...f.refresh?{refresh:f.refresh}:{},...void 0!==f.memory?{memory:f.memory}:{},...f.memoryFile?{memoryFile:f.memoryFile}:{}});await i.invoke("widget.upsert",{rootPath:a,record:k},{caller:"agent",rootPath:a,topicId:b}),j||h.includes(k.id)||g.includes(k.id)||h.push(k.id),await this.emit({type:"widget-event",op:d&&j?"update":"create",widgetId:k.id,title:k.title,...k.description?{description:k.description}:{},kind:k.kind,data:k.data,sourceTopicId:b,agentId:c,ts:I(),seq:0})}catch(a){await this.emit({type:"widget-error",widgetId:f.id,message:(d?"widget-update":"widget-create")+" failed: "+(a instanceof Error?a.message:String(a)),agentId:c,ts:I(),seq:0})}}await (0,u.writeLayout)(a,{order:g,hidden:h})}async runYoutubeSummaries(a,b){if(!this.agents.get(a))return;await this.emit({type:"system",text:`Starting Gemini YouTube summary (${b.length}):
231
+ ${b.map(a=>`• ${a.url}`).join("\n")}`,subtype:"reflex.preflight",agentId:a,ts:I(),seq:0});let{summarizeYoutubeAction:d}=await Promise.resolve().then(c.bind(c,18746)),e=await Promise.all(b.map(async a=>{let b=await d({url:a.url,...a.prompt?{prompt:a.prompt}:{}});return b.ok?{url:a.url,text:b.text,model:b.model}:{url:a.url,error:b.error}})),f=e.map(a=>"text"in a?[`### youtube-summary ${a.url}`,`_(Gemini ${a.model} — use as primary source; do not WebFetch the same URL.)_`,"",a.text].join("\n"):`### youtube-summary ${a.url}
232
+ _(Gemini failed: ${a.error}. Notify the user and suggest saving the key in Settings -> Gemini, or answer without the summary.)_`);await this.emit({type:"system",text:e.every(a=>"text"in a)?"Summaries received, passing to the agent.":"Some summaries failed — details are in the context.",subtype:"reflex.preflight",agentId:a,ts:I(),seq:0});let g=`[Reflex] Gemini YouTube summaries you requested:
233
233
 
234
234
  ${f.join("\n\n")}
235
235
 
236
- Now answer the user based on this context. Do not repeat the summaries verbatim — compose a human-readable response.`;await this.continueTurn(a,g)}registerKiller(a,b){let c=this.agents.get(a);c&&(c.killer=b)}clearKiller(a){let b=this.agents.get(a);b&&delete b.killer}async destroy(a,b="completed"){let c=this.agents.get(a);if(!c)return;c.meta.status=b,c.meta.endedAt=H(),await this.emit({type:"agent-end",status:b,agentId:a,ts:c.meta.endedAt,seq:0}),this.agents.delete(a),this.turnText.delete(a),this.lastInvoke.delete(a);let d=this.byTopicRole.get(c.meta.topicId);if(d){for(let[b,c]of d)c===a&&d.delete(b);0===d.size&&this.byTopicRole.delete(c.meta.topicId)}}async emit(a){let b=this.agents.get(a.agentId);if(!b)return;let c=await (0,h.nextSeq)(b.rootPath,b.meta.topicId),d={...a,seq:c};if(await (0,h.appendEvent)(b.rootPath,b.meta.topicId,d),"assistant-delta"===a.type){let b=this.turnText.get(a.agentId)??"";this.turnText.set(a.agentId,b+a.text)}this.emitter.emit(`topic:${b.meta.topicId}`,d),this.emitter.emit(`agent:${a.agentId}`,d)}subscribeTopic(a,b){let c=`topic:${a}`;return this.emitter.on(c,b),()=>this.emitter.off(c,b)}subscribeAgent(a,b){let c=`agent:${a}`;return this.emitter.on(c,b),()=>this.emitter.off(c,b)}list(a){let b=[];for(let c of this.agents.values())(!a?.topicId||c.meta.topicId===a.topicId)&&(a?.rootId&&c.meta.rootId!==a.rootId||b.push({...c.meta}));return b.sort((a,b)=>Date.parse(b.startedAt)-Date.parse(a.startedAt)),b}get(a){let b=this.agents.get(a);return b?{...b.meta}:null}isActive(a){let b=this.byTopicRole.get(a);if(!b)return!1;for(let a of b.values()){let b=this.agents.get(a);if(b?.meta.status==="running")return!0}return!1}listRunningTopicsForRoot(a){let b=new Set;for(let c of this.agents.values())c.meta.rootId===a&&"running"===c.meta.status&&b.add(c.meta.topicId);return[...b]}async stopTopic(a){let b=[];for(let[c,d]of this.agents)d.meta.topicId===a&&b.push(c);let c=0;for(let a of b){let b=this.agents.get(a);b&&"running"===b.meta.status&&(await this.destroy(a,"cancelled"),c+=1)}return{stopped:c}}constructor(){this.agents=new Map,this.byTopicRole=new Map,this.emitter=new e.EventEmitter,this.turnText=new Map,this.lastInvoke=new Map,this.pendingMcpAdds=new Map}}function H(){return new Date().toISOString()}let M=new Set(["claude-code","codex","ollama","image-gen"]);async function I(a,b,d){if(!a||"object"!=typeof a)return a;let e={...a},f=e.transport,g="stdio"===f?"env":"http"===f||"sse"===f?"headers":null;if(!g)return e;let h=e[g]??{},i={};for(let[a,b]of Object.entries(h))i[a]=String(b);for(let a of b){if(a.oauth){let{getOAuthTokens:b}=await c.e(6730).then(c.bind(c,96730)),{isOAuthProviderId:d}=await c.e(3657).then(c.bind(c,63657));if(!d(a.oauth))throw Error(`unknown OAuth provider: ${a.oauth}`);if(!await b(a.oauth))throw Error(`provider "${a.oauth}" not authorized — open Settings → OAuth and Authorize first`);i[a.envKey]=`$oauth:${a.oauth}`;continue}let b=d[a.envKey];if(void 0!==b&&""!==b)i[a.envKey]=b;else if(a.required)throw Error(`secret "${a.envKey}" is required`);else delete i[a.envKey]}return e[g]=i,e}function J(){return(0,f.randomUUID)().replace(/-/g,"").slice(0,12)}async function K(a,b){let c=await (0,h.readEvents)(a,b),d=[],e=null,f=()=>{e&&(d.push(`### ${e.role}
237
- ${e.text.trim()}`),e=null)};for(let a of c)"user-message"===a.type?(f(),e={role:"user",text:a.text},f()):"assistant-delta"===a.type?(e&&"assistant"===e.role||(f(),e={role:"assistant",text:""}),e.text+=a.text):("turn-end"===a.type||"agent-end"===a.type)&&f();return f(),d.join("\n\n")}let N=globalThis.__reflexAgentManager??new L;globalThis.__reflexAgentManager=N,c.e(3240).then(c.bind(c,93240)).then(a=>a.startWidgetScheduler()).catch(a=>{console.error("[widget-scheduler] failed to start:",a)}),d()}catch(a){d(a)}})},18542:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ab:()=>q,xP:()=>s});var e=c(73024),f=c(76760),g=c.n(f),h=c(29163),i=c(17640),j=c(99048),k=c(80958),l=c(57972),m=a([j]);function n(a,b){return g().join(function(a){if("global"===a.scope)return g().join((0,h._)(),"memory");if(!a.rootPath)throw Error("project memory requires rootPath");return g().join(a.rootPath,".reflex","memory")}(a),`${b}.md`)}function o(a){let b=a.trim();return b?b.split("\n").length:0}async function p(a,b){try{let c=(await e.promises.readFile(n(a,b),"utf8")).replace(/\s+$/,"");return{file:b,content:c||null,lines:o(c)}}catch{return{file:b,content:null,lines:0}}}async function q(a){let b=await Promise.all(k.cs.map(b=>p(a,b))),c={};for(let a of b)c[a.file]=a;return c}async function r(a,b){await e.promises.mkdir(g().dirname(a),{recursive:!0}),await e.promises.writeFile(a,b.endsWith("\n")?b:`${b}
238
- `,"utf8")}async function s(a,b,c,d={}){let f=k.h0[b],g=n(a,b),h=await p(a,b);if("replace"===c){let a=(d.content??"").trim();if(!a)return await e.promises.unlink(g).catch(()=>null),{ok:!0,file:b,lines:0,cap:f};let c=(0,l.t)(a,{skipDupCheck:!0});if(!c.ok)return{ok:!1,file:b,lines:h.lines,cap:f,error:`hygiene: ${c.error}`};let i=o(a);return i>f?{ok:!1,file:b,lines:i,cap:f,error:"cap-exceeded"}:(await r(g,a),{ok:!0,file:b,lines:i,cap:f})}if("remove"===c){if(!h.content)return{ok:!0,file:b,lines:0,cap:f};let a=(d.match??"").trim();if(!a)return{ok:!1,file:b,lines:h.lines,cap:f,error:"match-required"};let c=h.content.split("\n").filter(b=>!b.includes(a)).join("\n").trim();return c?(await r(g,c),{ok:!0,file:b,lines:o(c),cap:f}):(await e.promises.unlink(g).catch(()=>null),{ok:!0,file:b,lines:0,cap:f})}let i=(d.content??"").trim();if(!i)return{ok:!1,file:b,lines:h.lines,cap:f,error:"empty-content"};let j=(0,l.t)(i,{existing:h.content});if(!j.ok)return{ok:!1,file:b,lines:h.lines,cap:f,error:`hygiene: ${j.error}`};let m=i.split("\n").length;if(h.lines+m<=f){let a=h.content?`${h.content.trim()}
239
- ${i}`:i;return await r(g,a),{ok:!0,file:b,lines:o(a),cap:f}}let q=await t(b,h.content??"",i);return q?(await r(g,q),{ok:!0,file:b,lines:o(q),cap:f}):{ok:!1,file:b,lines:h.lines,cap:f,error:"compact-failed"}}async function t(a,b,c){let d=k.h0[a];try{let e=(await (0,i.loadSettings)()).assignments.quick,f=[`You compress a Reflex memory file. The file is ${a}.md — ${k.lh[a]}.`,`Hard rule: the OUTPUT MUST BE ≤${d} lines.`,"Merge the new entry into the existing content. Keep every distinct fact. Drop duplicates and obsolete entries. Tighten wording but DO NOT invent facts. One line per fact. Plain text, no markdown headers, no surrounding quotes, no commentary — just the new file contents.\n\n## Existing file",b.trim()||"(empty)","\n## New entry to merge in",c.trim()].join("\n"),g=await (0,j.quickComplete)(e,f,{timeoutMs:45e3}),h=(function(a){let b=/^```(?:\w+)?\n([\s\S]*?)\n```\s*$/.exec(a.trim());return b?b[1]:a})(g).trim();if(!h)return null;return h.split("\n").map(a=>a.trim()).filter(Boolean).slice(0,d).join("\n")}catch{return null}}j=(m.then?(await m)():m)[0],d()}catch(a){d(a)}})},19219:(a,b,c)=>{c.d(b,{YN:()=>p,cC:()=>r,fH:()=>q,tf:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(24576);let j=f().join(".reflex","assets","images"),k={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg","image/avif":"avif"},l={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",svg:"image/svg+xml",avif:"image/avif"};function m(a){return l[a.toLowerCase()]??"application/octet-stream"}async function n(a){let b=await (0,i.getRoot)(a);if(!b)throw Error(`unknown root: ${a}`);return b.path}async function o(a){let b=f().join(await n(a),j);return await d.promises.mkdir(b,{recursive:!0}),b}async function p(a,b,c){let e=Buffer.isBuffer(b)?b:Buffer.from(b),g=h().createHash("sha256").update(e).digest("hex"),i=k[c.toLowerCase()]??"bin",l=await o(a),m=f().join(l,`${g}.${i}`);try{await d.promises.access(m)}catch{await d.promises.writeFile(m,e)}return{sha:g,ext:i,mime:c,absPath:m,relPath:f().posix.join(j.split(f().sep).join("/"),`${g}.${i}`),urlPath:`/api/images/${encodeURIComponent(a)}/${g}.${i}`,size:e.byteLength}}async function q(a,b){let c=await fetch(b,{redirect:"follow",signal:AbortSignal.timeout(3e4)});if(!c.ok)throw Error(`fetch ${b} -> ${c.status} ${c.statusText}`);let d=c.headers.get("content-type")?.split(";")[0]?.trim()??"";if(!d.startsWith("image/"))throw Error(`not an image: content-type=${d||"(none)"}`);let e=Number(c.headers.get("content-length")??"0");if(e>0x1400000)throw Error(`image too large: ${e} bytes (cap 20971520)`);let f=await c.arrayBuffer();if(f.byteLength>0x1400000)throw Error(`image too large after download: ${f.byteLength} bytes (cap 20971520)`);return p(a,Buffer.from(f),d)}async function r(a,b){if(!/^[a-f0-9]{8,64}\.[a-z0-9]{2,5}$/i.test(b))return null;let c=await o(a),e=f().resolve(c,b);if(!e.startsWith(c+f().sep)&&e!==c)return null;try{let a=await d.promises.stat(e);if(!a.isFile())return null;let c=f().extname(b).slice(1);return{absPath:e,mime:m(c),size:a.size}}catch{return null}}},22830:(a,b,c)=>{c.d(b,{H:()=>e});var d=c(61088);async function e(a){let b=(0,d.Tf)().startThread({model:a.args.model,workingDirectory:a.args.rootPath,sandboxMode:"read-only",additionalDirectories:[a.args.reflexScope],approvalPolicy:"never",skipGitRepoCheck:!0}),c=a.args.systemPrompt.trim().length>0?`${a.args.systemPrompt}
236
+ Now answer the user based on this context. Do not repeat the summaries verbatim — compose a human-readable response.`;await this.continueTurn(a,g)}registerKiller(a,b){let c=this.agents.get(a);c&&(c.killer=b)}clearKiller(a){let b=this.agents.get(a);b&&delete b.killer}async destroy(a,b="completed"){let c=this.agents.get(a);if(!c)return;c.meta.status=b,c.meta.endedAt=I(),await this.emit({type:"agent-end",status:b,agentId:a,ts:c.meta.endedAt,seq:0}),this.agents.delete(a),this.turnText.delete(a),this.lastInvoke.delete(a);let d=this.byTopicRole.get(c.meta.topicId);if(d){for(let[b,c]of d)c===a&&d.delete(b);0===d.size&&this.byTopicRole.delete(c.meta.topicId)}}async emit(a){let b=this.agents.get(a.agentId);if(!b)return;let c=await (0,h.appendEventSeq)(b.rootPath,b.meta.topicId,a);if("assistant-delta"===a.type){let b=this.turnText.get(a.agentId)??"";this.turnText.set(a.agentId,b+a.text)}this.emitter.emit(`topic:${b.meta.topicId}`,c),this.emitter.emit(`agent:${a.agentId}`,c)}subscribeTopic(a,b){let c=`topic:${a}`;return this.emitter.on(c,b),()=>this.emitter.off(c,b)}subscribeAgent(a,b){let c=`agent:${a}`;return this.emitter.on(c,b),()=>this.emitter.off(c,b)}list(a){let b=[];for(let c of this.agents.values())(!a?.topicId||c.meta.topicId===a.topicId)&&(a?.rootId&&c.meta.rootId!==a.rootId||b.push({...c.meta}));return b.sort((a,b)=>Date.parse(b.startedAt)-Date.parse(a.startedAt)),b}get(a){let b=this.agents.get(a);return b?{...b.meta}:null}isActive(a){let b=this.byTopicRole.get(a);if(!b)return!1;for(let a of b.values()){let b=this.agents.get(a);if(b?.meta.status==="running")return!0}return!1}listRunningTopicsForRoot(a){let b=new Set;for(let c of this.agents.values())c.meta.rootId===a&&"running"===c.meta.status&&b.add(c.meta.topicId);return[...b]}async stopTopic(a){let b=[];for(let[c,d]of this.agents)d.meta.topicId===a&&b.push(c);let c=0;for(let a of b){let b=this.agents.get(a);b&&"running"===b.meta.status&&(await this.destroy(a,"cancelled"),c+=1)}return{stopped:c}}constructor(){this.agents=new Map,this.byTopicRole=new Map,this.emitter=new e.EventEmitter,this.turnText=new Map,this.lastInvoke=new Map,this.pendingMcpAdds=new Map,this.interactiveRegistered=!1}}function I(){return new Date().toISOString()}let T=new Set(["claude-code","codex","ollama","image-gen"]);async function J(a,b,d){if(!a||"object"!=typeof a)return a;let e={...a},f=e.transport,g="stdio"===f?"env":"http"===f||"sse"===f?"headers":null;if(!g)return e;let h=e[g]??{},i={};for(let[a,b]of Object.entries(h))i[a]=String(b);for(let a of b){if(a.oauth){let{getOAuthTokens:b}=await c.e(6730).then(c.bind(c,96730)),{isOAuthProviderId:d}=await c.e(3657).then(c.bind(c,63657));if(!d(a.oauth))throw Error(`unknown OAuth provider: ${a.oauth}`);if(!await b(a.oauth))throw Error(`provider "${a.oauth}" not authorized — open Settings → OAuth and Authorize first`);i[a.envKey]=`$oauth:${a.oauth}`;continue}let b=d[a.envKey];if(void 0!==b&&""!==b)i[a.envKey]=b;else if(a.required)throw Error(`secret "${a.envKey}" is required`);else delete i[a.envKey]}return e[g]=i,e}function K(){return(0,f.randomUUID)().replace(/-/g,"").slice(0,12)}async function L(a,b){return(0,x.Y)(await (0,h.readEvents)(a,b))}async function M(){let{capabilityRegistry:a}=await c.e(7523).then(c.bind(c,47523)),b=a();if(!b.has("notify")){let{notify:a}=await c.e(3377).then(c.bind(c,3377));b.register({kind:"sync",id:"notify",audit:"always",doc:"Send a notification to the user's channels (Telegram, push).",run:b=>a(b)})}return b}async function N(){let{capabilityRegistry:a}=await c.e(7523).then(c.bind(c,47523)),b=a();return b.has("memory.write")||b.register({kind:"sync",id:"memory.write",audit:"event",doc:"Write to the user's memory taxonomy (global or project scope).",run:a=>(0,n.xP)(a.ctx,a.file,a.op,{...void 0!==a.content?{content:a.content}:{},...void 0!==a.match?{match:a.match}:{}})}),b}async function O(){let{capabilityRegistry:a}=await c.e(7523).then(c.bind(c,47523)),b=a();return b.has("suggestion.add")||b.register({kind:"sync",id:"suggestion.add",audit:"event",doc:"Add a suggestion card to a project's dashboard.",run:a=>(0,p.Ed)(a.rootPath,a.entry)}),b}async function P(){let{capabilityRegistry:a}=await c.e(7523).then(c.bind(c,47523)),b=a();return b.has("task.create")||b.register({kind:"sync",id:"task.create",audit:"event",doc:"Create a task on a project's board.",run:a=>(0,r.createTask)(a.rootPath,a.data)}),b.has("task.update")||b.register({kind:"sync",id:"task.update",audit:"event",doc:"Update a task on a project's board.",run:a=>(0,r.updateTask)(a.rootPath,a.id,a.patch)}),b}async function Q(){let{capabilityRegistry:a}=await c.e(7523).then(c.bind(c,47523)),b=a();return b.has("kb.write")||b.register({kind:"sync",id:"kb.write",audit:"event",doc:"Write a knowledge-base entry from an agent directive.",run:a=>(0,y.j)(a)}),b}async function R(){let{capabilityRegistry:a}=await c.e(7523).then(c.bind(c,47523)),b=a();return b.has("widget.upsert")||b.register({kind:"sync",id:"widget.upsert",audit:"event",doc:"Create or update a dashboard widget record.",run:a=>(0,u.writeWidget)(a.rootPath,a.record)}),b}let U=globalThis.__reflexAgentManager??new S;globalThis.__reflexAgentManager=U,d()}catch(a){d(a)}})},18542:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ab:()=>r,xP:()=>t});var e=c(73024),f=c(76760),g=c.n(f),h=c(29163),i=c(13474),j=c(17640),k=c(99048),l=c(80958),m=c(57972),n=a([k]);function o(a,b){return g().join(function(a){if("global"===a.scope)return g().join((0,h._)(),"memory");if(!a.rootPath)throw Error("project memory requires rootPath");return(0,i.LV)(a.rootPath)}(a),`${b}.md`)}function p(a){let b=a.trim();return b?b.split("\n").length:0}async function q(a,b){try{let c=(await e.promises.readFile(o(a,b),"utf8")).replace(/\s+$/,"");return{file:b,content:c||null,lines:p(c)}}catch{return{file:b,content:null,lines:0}}}async function r(a){let b=await Promise.all(l.cs.map(b=>q(a,b))),c={};for(let a of b)c[a.file]=a;return c}async function s(a,b){await e.promises.mkdir(g().dirname(a),{recursive:!0}),await e.promises.writeFile(a,b.endsWith("\n")?b:`${b}
237
+ `,"utf8")}async function t(a,b,c,d={}){let f=l.h0[b],g=o(a,b),h=await q(a,b);if("replace"===c){let a=(d.content??"").trim();if(!a)return await e.promises.unlink(g).catch(()=>null),{ok:!0,file:b,lines:0,cap:f};let c=(0,m.t)(a,{skipDupCheck:!0});if(!c.ok)return{ok:!1,file:b,lines:h.lines,cap:f,error:`hygiene: ${c.error}`};let i=p(a);return i>f?{ok:!1,file:b,lines:i,cap:f,error:"cap-exceeded"}:(await s(g,a),{ok:!0,file:b,lines:i,cap:f})}if("remove"===c){if(!h.content)return{ok:!0,file:b,lines:0,cap:f};let a=(d.match??"").trim();if(!a)return{ok:!1,file:b,lines:h.lines,cap:f,error:"match-required"};let c=h.content.split("\n").filter(b=>!b.includes(a)).join("\n").trim();return c?(await s(g,c),{ok:!0,file:b,lines:p(c),cap:f}):(await e.promises.unlink(g).catch(()=>null),{ok:!0,file:b,lines:0,cap:f})}let i=(d.content??"").trim();if(!i)return{ok:!1,file:b,lines:h.lines,cap:f,error:"empty-content"};let j=(0,m.t)(i,{existing:h.content});if(!j.ok)return{ok:!1,file:b,lines:h.lines,cap:f,error:`hygiene: ${j.error}`};let k=i.split("\n").length;if(h.lines+k<=f){let a=h.content?`${h.content.trim()}
238
+ ${i}`:i;return await s(g,a),{ok:!0,file:b,lines:p(a),cap:f}}let n=await u(b,h.content??"",i);return n?(await s(g,n),{ok:!0,file:b,lines:p(n),cap:f}):{ok:!1,file:b,lines:h.lines,cap:f,error:"compact-failed"}}async function u(a,b,c){let d=l.h0[a];try{let e=(await (0,j.loadSettings)()).assignments.quick,f=[`You compress a Reflex memory file. The file is ${a}.md — ${l.lh[a]}.`,`Hard rule: the OUTPUT MUST BE ≤${d} lines.`,"Merge the new entry into the existing content. Keep every distinct fact. Drop duplicates and obsolete entries. Tighten wording but DO NOT invent facts. One line per fact. Plain text, no markdown headers, no surrounding quotes, no commentary — just the new file contents.\n\n## Existing file",b.trim()||"(empty)","\n## New entry to merge in",c.trim()].join("\n"),g=await (0,k.quickComplete)(e,f,{timeoutMs:45e3}),h=(function(a){let b=/^```(?:\w+)?\n([\s\S]*?)\n```\s*$/.exec(a.trim());return b?b[1]:a})(g).trim();if(!h)return null;return h.split("\n").map(a=>a.trim()).filter(Boolean).slice(0,d).join("\n")}catch{return null}}k=(n.then?(await n)():n)[0],d()}catch(a){d(a)}})},18746:(a,b,c)=>{c.d(b,{O1:()=>p,Gh:()=>q,AZ:()=>o,rD:()=>r,summarizeYoutubeAction:()=>n});var d=c(31776);c(428);var e=c(43180);let f=globalThis.__reflexGeminiModelsCache??new Map;async function g(a){let b,c=await (0,e.CG)("gemini");if(!c)throw Error("Gemini API key not configured");let d=c.slice(0,16),g=f.get(d);if(!a?.refresh&&g&&Date.now()-g.fetchedAt<36e5)return g.models;let i=[];do{let a=new URL("https://generativelanguage.googleapis.com/v1beta/models");a.searchParams.set("key",c),a.searchParams.set("pageSize","100"),b&&a.searchParams.set("pageToken",b);let d=await fetch(a.toString(),{headers:{Accept:"application/json"}});if(!d.ok){let a=await d.text();throw Error(`models.list HTTP ${d.status}: ${a.slice(0,500)}`)}let e=await d.json();for(let a of e.models??[]){if(!a.name)continue;let b=a.supportedGenerationMethods??[];if(!b.includes("generateContent"))continue;let c=a.name.toLowerCase();!c.includes("embedding")&&(c.includes("aqa")||i.push({name:a.name,id:a.name.replace(/^models\//,""),...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{},supportedGenerationMethods:b}))}b=e.nextPageToken}while(b);return i.sort(h),f.set(d,{fetchedAt:Date.now(),models:i}),i}function h(a,b){let c=i(a.id),d=i(b.id);if(c!==d)return c-d;let e=j(a.id),f=j(b.id);return e!==f?f-e:a.id.localeCompare(b.id)}function i(a){return a.endsWith("flash-latest")?0:a.includes("flash")&&!a.includes("lite")?1:a.includes("flash-lite")?2:a.endsWith("pro-latest")||a.includes("pro")?3:4}function j(a){let b=/gemini-(\d+)\.(\d+)/.exec(a);return b?100*Number(b[1])+Number(b[2]):0}async function k(a="general"){let b=await (0,e.$L)("gemini");if("video"===a&&b?.videoModel)return b.videoModel;if(b?.model)return b.model;try{let a=await g();if(a.length>0)return a[0].id}catch{}return"gemini-flash-latest"}async function l(a){let b=`https://generativelanguage.googleapis.com/v1beta/models/${encodeURIComponent(a.model)}:generateContent?key=${encodeURIComponent(a.apiKey)}`,c=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:a.contents,...a.generationConfig?{generationConfig:a.generationConfig}:{}})}),d=await c.text();if(!c.ok)throw Error(`Gemini HTTP ${c.status}: ${d.slice(0,800)}`);let e=JSON.parse(d);if(e.promptFeedback?.blockReason)throw Error(`Gemini blocked: ${e.promptFeedback.blockReason}`);return{text:(e.candidates??[]).flatMap(a=>a.content?.parts??[]).map(a=>a.text??"").filter(Boolean).join("\n").trim(),raw:e}}globalThis.__reflexGeminiModelsCache=f;var m=c(17640);async function n(a){var b;let c=await (0,e.CG)("gemini");if(!c)return{ok:!1,needsKey:!0,error:"Gemini API key is not saved — enter it to summarize videos."};let d=(await (0,m.loadSettings)()).language??"russian",f=a.prompt?.trim()||(b=d,/russ/i.test(b)||RegExp("рус","i").test(b)?"Produce a structured summary of this YouTube video:\n\n1. One paragraph — what the video is about and who it's for.\n2. Main points as a bulleted list with `[mm:ss]` timestamps.\n3. Notable quotes (any memorable phrases) — with timestamps.\n4. If diagrams / slides / code are shown — briefly describe them.\n5. 1-3 sentence takeaway: the main point worth retaining.\n\nRespond in Russian, concisely. No filler.":"Produce a structured summary of this YouTube video:\n\n1. One paragraph — what the video is about and who it's for.\n2. Main points as a bulleted list with `[mm:ss]` timestamps.\n3. Notable quotes (if any) with timestamps.\n4. If diagrams / slides / code are shown — briefly describe them.\n5. 1-3 sentence takeaway.\n\nBe concise. No filler."),g=a.modelOverride?.trim()||await k("video");try{let{text:b}=await l({model:g,apiKey:c,contents:[{parts:[{file_data:{file_uri:a.url,mime_type:"video/*"}},{text:f}]}]});if(!b)return{ok:!1,error:"Gemini returned an empty response — the video may be unavailable or private."};return{ok:!0,text:b,model:g}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function o(a){try{if(!a.trim())return{ok:!1,error:"API key is empty"};return await (0,e.Pc)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a){return{ok:!0,present:await (0,e.hasApiKey)(a)}}async function q(a=!1){try{let b=await g({refresh:a});return{ok:!0,models:b.map(a=>({id:a.id,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{}})),currentModel:await k("general"),currentVideoModel:await k("video")}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a){try{return await (0,e.ND)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(97364).D)([n,o,p,q,r]),(0,d.A)(n,"40c7c8f3db14fc87a297c6722484a9ea7fb4d4de25",null),(0,d.A)(o,"40a75de97953e58c554ec89e837383a466cd2497a5",null),(0,d.A)(p,"4045dbb1dc0d592ca894deb48bcdde715d9848ce3e",null),(0,d.A)(q,"40a8b2c8d9872b6c6e2520a21fd047041e7894fac6",null),(0,d.A)(r,"400b8bdc0e15c72f478eaa7c197294b22369c8d751",null)},19219:(a,b,c)=>{c.d(b,{YN:()=>p,cC:()=>r,fH:()=>q,tf:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(24576);let j=f().join(".reflex","assets","images"),k={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg","image/avif":"avif"},l={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",svg:"image/svg+xml",avif:"image/avif"};function m(a){return l[a.toLowerCase()]??"application/octet-stream"}async function n(a){let b=await (0,i.getRoot)(a);if(!b)throw Error(`unknown root: ${a}`);return b.path}async function o(a){let b=f().join(await n(a),j);return await d.promises.mkdir(b,{recursive:!0}),b}async function p(a,b,c){let e=Buffer.isBuffer(b)?b:Buffer.from(b),g=h().createHash("sha256").update(e).digest("hex"),i=k[c.toLowerCase()]??"bin",l=await o(a),m=f().join(l,`${g}.${i}`);try{await d.promises.access(m)}catch{await d.promises.writeFile(m,e)}return{sha:g,ext:i,mime:c,absPath:m,relPath:f().posix.join(j.split(f().sep).join("/"),`${g}.${i}`),urlPath:`/api/images/${encodeURIComponent(a)}/${g}.${i}`,size:e.byteLength}}async function q(a,b){let c=await fetch(b,{redirect:"follow",signal:AbortSignal.timeout(3e4)});if(!c.ok)throw Error(`fetch ${b} -> ${c.status} ${c.statusText}`);let d=c.headers.get("content-type")?.split(";")[0]?.trim()??"";if(!d.startsWith("image/"))throw Error(`not an image: content-type=${d||"(none)"}`);let e=Number(c.headers.get("content-length")??"0");if(e>0x1400000)throw Error(`image too large: ${e} bytes (cap 20971520)`);let f=await c.arrayBuffer();if(f.byteLength>0x1400000)throw Error(`image too large after download: ${f.byteLength} bytes (cap 20971520)`);return p(a,Buffer.from(f),d)}async function r(a,b){if(!/^[a-f0-9]{8,64}\.[a-z0-9]{2,5}$/i.test(b))return null;let c=await o(a),e=f().resolve(c,b);if(!e.startsWith(c+f().sep)&&e!==c)return null;try{let a=await d.promises.stat(e);if(!a.isFile())return null;let c=f().extname(b).slice(1);return{absPath:e,mime:m(c),size:a.size}}catch{return null}}},22830:(a,b,c)=>{c.d(b,{H:()=>e});var d=c(61088);async function e(a){let b=(0,d.Tf)().startThread({model:a.args.model,workingDirectory:a.args.rootPath,sandboxMode:"read-only",additionalDirectories:[a.args.reflexScope],approvalPolicy:"never",skipGitRepoCheck:!0}),c=a.args.systemPrompt.trim().length>0?`${a.args.systemPrompt}
240
239
 
241
- ${a.args.prompt}`:a.args.prompt,e=await b.runStreamed(c),f=new Map;try{for await(let b of e.events)if("item.started"!==b.type){if("item.updated"===b.type||"item.completed"===b.type){let c=b.item;if("agent_message"===c.type){let b=f.get(c.id)??"",d=c.text.slice(b.length);d.length>0&&(f.set(c.id,c.text),await a.manager.emit({type:"assistant-delta",text:d,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}));continue}if("command_execution"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"Bash",input:{command:c.command},agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),await a.manager.emit({type:"tool-result",toolUseId:c.id,content:c.aggregated_output??"",...0!==c.exit_code?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("file_change"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"FileChange",input:{changes:c.changes},agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),await a.manager.emit({type:"tool-result",toolUseId:c.id,content:`${c.status}: ${c.changes.map(a=>`${a.kind} ${a.path}`).join(", ")}`,..."failed"===c.status?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("mcp_tool_call"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:`mcp:${c.server}:${c.tool}`,input:c.arguments,agentId:a.meta.id,ts:new Date().toISOString(),seq:0});let b=c.error?c.error.message:JSON.stringify(c.result?.content??[]).slice(0,4e3);await a.manager.emit({type:"tool-result",toolUseId:c.id,content:b,...c.error?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("web_search"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"WebSearch",input:{query:c.query},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}"error"===c.type&&"item.completed"===b.type&&await a.manager.emit({type:"error",message:c.message,agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("turn.failed"===b.type)throw await a.manager.emit({type:"error",message:`codex turn failed: ${b.error.message}`,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),Error(b.error.message);if("error"===b.type)throw await a.manager.emit({type:"error",message:b.message,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),Error(b.message)}}finally{await (0,d.Nb)(b.id)}}},23956:(a,b,c)=>{function d(a){return y(a,"<<reflex:permission>>","<</reflex:permission>>")}function e(a){let b=y(a,"<<reflex:question>>","<</reflex:question>>"),c=[];for(let a of b)if(a&&"object"==typeof a){if("questions"in a&&Array.isArray(a.questions)){for(let b of a.questions)b&&"object"==typeof b&&"string"==typeof b.prompt&&c.push(b);continue}"string"==typeof a.prompt&&c.push(a)}return c}function f(a){return y(a,"<<reflex:kb>>","<</reflex:kb>>").filter(a=>"string"==typeof a?.kind&&"string"==typeof a?.title)}function g(a){return y(a,"<<reflex:memory>>","<</reflex:memory>>").filter(a=>!!a&&"string"==typeof a.scope&&"string"==typeof a.file&&"string"==typeof a.op)}function h(a){return y(a,"<<reflex:notify>>","<</reflex:notify>>").filter(a=>!!a&&"string"==typeof a.body&&!!a.body)}function i(a){return y(a,"<<reflex:route>>","<</reflex:route>>").filter(a=>!!a&&("space-create"===a.kind||"task"===a.kind||"dispatch"===a.kind))}function j(a){return y(a,"<<reflex:report>>","<</reflex:report>>").filter(a=>!!a&&"string"==typeof a.body&&!!a.body)}function k(a){return y(a,"<<reflex:suggestion>>","<</reflex:suggestion>>").filter(a=>!!a&&"string"==typeof a.kind&&"string"==typeof a.title&&"string"==typeof a.description&&"string"==typeof a.prompt)}function l(a){return y(a,"<<reflex:skill-create>>","<</reflex:skill-create>>").filter(a=>!!a&&("global"===a.scope||"project"===a.scope)&&"string"==typeof a.id&&a.id.trim().length>0&&"string"==typeof a.title&&"string"==typeof a.instructions&&a.instructions.trim().length>0)}function m(a){return y(a,"<<reflex:task-create>>","<</reflex:task-create>>").filter(a=>!!a&&"string"==typeof a.title&&a.title.trim().length>0)}function n(a){return y(a,"<<reflex:task-update>>","<</reflex:task-update>>").filter(a=>!!a&&"string"==typeof a.id&&a.id.trim().length>0&&!!a.patch&&"object"==typeof a.patch)}function o(a){return/<{1,2}reflex:onboarding-done>{1,2}[\s\S]*?<{1,2}\/reflex:onboarding-done>{1,2}/i.test(a)}function p(a){return y(a,"<<reflex:mcp-add>>","<</reflex:mcp-add>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.server&&"string"==typeof a.label&&"object"==typeof a.config&&null!==a.config)}function q(a){return y(a,"<<reflex:dispatch>>","<</reflex:dispatch>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.role&&"string"==typeof a.brief&&a.brief.trim().length>0)}function r(a){return y(a,"<<reflex:youtube-summary>>","<</reflex:youtube-summary>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.url)}function s(a){return y(a,"<<reflex:workflow-create>>","<</reflex:workflow-create>>").filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.id&&"string"==typeof a.label&&Array.isArray(a.steps)&&a.steps.length>0)}function t(a){return y(a,"<<reflex:widget-create>>","<</reflex:widget-create>>").filter(v)}function u(a){return y(a,"<<reflex:widget-update>>","<</reflex:widget-update>>").filter(v)}function v(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&a.id.length>0&&"string"==typeof a.title&&"string"==typeof a.kind&&!!a.data&&"object"==typeof a.data}function w(a){return y(a,"<<reflex:image-gen>>","<</reflex:image-gen>>").filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.prompt&&a.prompt.trim().length>0)}function x(a){return y(a,"<<reflex:utility>>","<</reflex:utility>>").filter(a=>null!==a&&"object"==typeof a&&("global"===a.scope||"project"===a.scope)&&"object"==typeof a.files&&null!==a.files)}function y(a,b,c){let d=b.replace(/^<+/,"").replace(/>+$/,""),e=c.replace(/^<+/,"").replace(/>+$/,""),f=RegExp(`<{1,2}${z(d)}>{1,2}`,"g"),g=RegExp(`<{1,2}${z(e)}>{1,2}`,"g"),h=[],i=0;for(;i<a.length;){f.lastIndex=i;let b=f.exec(a);if(!b)break;let c=b.index+b[0].length;g.lastIndex=c;let d=g.exec(a);if(!d)break;let e=a.slice(c,d.index).trim();i=d.index+d[0].length;try{h.push(JSON.parse(e))}catch{}}return h}function z(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}c.d(b,{B5:()=>h,Bc:()=>f,Dq:()=>t,Eb:()=>q,Hz:()=>j,Oo:()=>x,QN:()=>s,Up:()=>u,WM:()=>i,XZ:()=>r,ay:()=>m,c_:()=>o,dJ:()=>e,eD:()=>p,fU:()=>k,gQ:()=>d,oT:()=>l,qk:()=>w,re:()=>n,tS:()=>g})},24058:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{n:()=>n,runWorkflow:()=>m});var e=c(77598),f=c.n(e),g=c(24576),h=c(13295),i=c(64011),j=c(79178),k=c(50059),l=a([k]);async function m(a,b,d){let e=await (0,g.getRoot)(a);if(!e)return{ok:!1,error:"Root not found"};let l=await (0,h.readWorkflow)(e.path,b);if(!l){let{collectExtensions:d}=await Promise.resolve().then(c.bind(c,14952));l=(await d({rootId:a})).workflows.find(a=>a.id===b)??null}if(!l)return{ok:!1,error:"Workflow not found"};let m={id:function(){let a=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),b=f().randomBytes(3).toString("hex");return`${a}-${b}`}(),workflowId:l.id,workflowLabel:l.label,status:"running",startedAt:new Date().toISOString(),steps:l.steps.map(a=>({stepId:a.id,status:"pending"})),...void 0!==d?{initialInput:d}:{}};await (0,h.bp)(e.path,m);let n={},o=d,p={rootId:a,rootPath:e.path,workflow:{id:l.id,label:l.label}};for(let a=0;a<l.steps.length;a++){let b=l.steps[a],c=m.steps[a];c.status="running",c.startedAt=new Date().toISOString(),await (0,h.bp)(e.path,m);try{let a=k.L[b.kind];if(!a)throw Error(`Unknown node kind: ${b.kind}`);let e=(0,j.V)(b.params,{prev:o,steps:n,input:d,workflow:{id:l.id,label:l.label}}),f=(0,i.P)(b.kind,e);c.renderedParams=f;let g=await a(f,p);c.output=g,c.status="completed",c.finishedAt=new Date().toISOString(),n[b.id]={output:g},o=g}catch(a){return c.status="failed",c.error=a instanceof Error?a.message:String(a),c.finishedAt=new Date().toISOString(),m.status="failed",m.finishedAt=new Date().toISOString(),await (0,h.bp)(e.path,m),(0,h.lq)(e.path,l.id),{ok:!0,run:m}}await (0,h.bp)(e.path,m)}return m.status="completed",m.finishedAt=new Date().toISOString(),await (0,h.bp)(e.path,m),(0,h.lq)(e.path,l.id),{ok:!0,run:m}}function n(a){if(!a.id||"string"!=typeof a.id)return"id is required";if(!a.label||"string"!=typeof a.label)return"label is required";if(!Array.isArray(a.steps)||0===a.steps.length)return"steps[] cannot be empty";let b=new Set;for(let c of a.steps){if(!c.id)return"every step must have an id";if(b.has(c.id))return`Duplicate step id: ${c.id}`;if(b.add(c.id),!k.L[c.kind])return`Unknown step kind: ${c.kind}`}return null}k=(l.then?(await l)():l)[0],d()}catch(a){d(a)}})},24776:(a,b,c)=>{c.d(b,{Aq:()=>i,pO:()=>h});let d=["Read","Glob","Grep","WebFetch","WebSearch"],e=[...d,"Write","Edit","MultiEdit"];function f(a,b,c){return[`## Specialist role: ${a}`,"",`Reply in ${b}. You are a focused specialist, not a general assistant. Do exactly the task in the brief — no more.`,"\n## Brief from the orchestrator",c.trim(),""].join("\n")}function g(a){return["\n## Rules",a,"\n- Don't ask clarifying questions to the user — you don't have a chat surface. If the brief is ambiguous, do your best with stated assumptions and note them in your output.\n- Don't emit `<<reflex:kb>>`, `<<reflex:utility>>`, `<<reflex:permission>>`, `<<reflex:question>>`, `<<reflex:dispatch>>` markers — those are for the orchestrator only. Just write your answer as plain text/markdown.\n- End with a tight summary the orchestrator can quote verbatim if the user asks for the result."].join("\n")}let h={researcher:{id:"researcher",label:"Researcher",description:"Deep KB reading / project search / web research. Read-only — never writes files. Use when you need to find or gather facts.",allowedTools:d,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("researcher",a,d),`Project root: \`${b}\``,`Knowledge base scope: \`${c}\``,g("- You are READ-ONLY: never Write/Edit/MultiEdit. Use Read/Glob/Grep to scan the KB and WebFetch/WebSearch for external lookups.\n- Cite sources by rel-path inside the KB (or URL for web).\n- If the brief asks for something that requires a write, explicitly say `cannot complete — write required` instead of doing it.")].join("\n")},coder:{id:"coder",label:"Coder",description:"Writes/edits source code, configs, schemas. Can create a utility. Use when file changes are required.",allowedTools:e,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("coder",a,d),`Project root: \`${b}\``,`Reflex scope (write here for KB files): \`${c}\``,g("- You may Write/Edit/MultiEdit files. Stay inside the project root.\n- Don't run shell or invoke other agents. If the brief implies installing a utility, write the utility files but do NOT emit `<<reflex:utility>>` — that's the orchestrator's job.\n- Report what you changed: list each touched file with a one-line summary.")].join("\n")},summarizer:{id:"summarizer",label:"Summarizer",description:"Compresses a large text / long transcript / file list into a short summary. No tools — only the text in the brief.",allowedTools:[],systemPrompt:({language:a,brief:b})=>[f("summarizer",a,b),g("- You have NO tools — work only from the text in the brief.\n- Compress aggressively: bullet points, ~10x reduction is the target unless the brief says otherwise.\n- Preserve names, numbers, dates, file paths verbatim. Drop filler.")].join("\n")},"kb-writer":{id:"kb-writer",label:"KB Writer",description:"Structured knowledge-base entry (kind/title/body/frontmatter). Use when the orchestrator decides to save something.",allowedTools:d,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("kb-writer",a,d),`KB root: \`${c}\``,`Project: \`${b}\``,g('- You DO NOT write the file yourself. Output a JSON object the orchestrator will pass to <<reflex:kb>>:\n ```json\n {"kind":"<entity-type>","title":"…","body":"…markdown…","meta":{…optional frontmatter fields…}}\n ```\n- Pick a sensible `kind` (fact / task / meeting / product / decision / source / …).\n- `body` is full markdown. Frontmatter `meta` should hold structured fields the user might filter/group on.')].join("\n")},"utility-builder":{id:"utility-builder",label:"Utility Builder",description:"Design a utility: manifest + ui.tsx + (optional) server actions. Use when the user explicitly asks to create a utility.",allowedTools:d,systemPrompt:({language:a,root:b,brief:c})=>[f("utility-builder",a,c),`Project: \`${b}\``,g("- Output the utility files inline in markdown code fences with file paths as headers:\n ### manifest.json\n ```json\n { … }\n ```\n ### ui.tsx\n ```tsx\n … React functional component, default-export …\n ```\n- Follow Reflex utility contract: imports only from `react`, `react-dom/client`, `react/jsx-runtime`, `@host/api`, `@host/ui`. Declare needed permissions and secrets in manifest.\n- Don't emit `<<reflex:utility>>` yourself — the orchestrator wraps your output and emits the marker.")].join("\n")}};function i(a){return a in h}},25608:(a,b,c)=>{c.d(b,{dr:()=>e});let d=[{id:"plan",trigger:"plan",label:"/plan",description:"Show the plan first — Reflex lays out the steps and waits for approval.",kind:"agent-mode",usage:"/plan <task>",icon:"ListChecks"},{id:"goal",trigger:"goal",label:"/goal",description:"Set a goal — Reflex will work toward it on its own, without reminders.",kind:"agent-mode",usage:"/goal <what to achieve>",icon:"Target"},{id:"research",trigger:"research",label:"/research",description:"Deep research on a topic — web search + summary with sources.",kind:"agent-mode",usage:"/research <topic>",icon:"Telescope"},{id:"widget",trigger:"widget",label:"/widget",description:"Create a card on the space dashboard.",kind:"agent-mode",usage:"/widget <what to show>",icon:"LayoutGrid"},{id:"workflow",trigger:"workflow",label:"/workflow",description:"Build a recipe — linear step-based automation for the task.",kind:"agent-mode",usage:"/workflow <what to automate>",icon:"Workflow"},{id:"new-utility",trigger:"new-utility",label:"/new-utility",description:"Build a Reflex mini-app (utility) — TypeScript, runs inside Reflex.",kind:"agent-mode",usage:"/new-utility <name — what it does>",icon:"PackagePlus"},{id:"distill",trigger:"distill",label:"/distill",description:"Pull a URL into the KB — extract key facts, action items, and links to related notes.",kind:"agent-mode",usage:"/distill <url> [focus]",icon:"BookOpenCheck"},{id:"practice",trigger:"practice",label:"/practice",description:"Roleplay a tough conversation — Reflex plays the counterpart and coaches you between turns.",kind:"agent-mode",usage:"/practice <scenario>",icon:"MessagesSquare"},{id:"reflect",trigger:"reflect",label:"/reflect",description:"Daily check-in — three questions adapted to your recent entries, saved as a journal note.",kind:"agent-mode",usage:"/reflect",allowEmpty:!0,icon:"Sunrise"},{id:"remember",trigger:"remember",label:"/remember",description:"Save a note — straight into memory, no AI involved.",kind:"direct",usage:"/remember <what to remember>",icon:"BookmarkPlus"},{id:"mcp",trigger:"mcp",label:"/mcp",description:"Connect an external service (setup wizard opens in chat).",kind:"agent-mode",usage:"/mcp <what you need>",icon:"PackagePlus"},{id:"skill",trigger:"skill",label:"/skill",description:"Attach a role — a ready-made instruction set for this conversation.",kind:"agent-mode",usage:"/skill <role-id> [prompt]",icon:"Sparkles"},{id:"delete-topic",trigger:"delete-topic",label:"/delete-topic",description:"Delete this conversation (with confirmation).",kind:"direct",usage:"/delete-topic",requiresConfirm:!0,allowEmpty:!0,icon:"Trash2"},{id:"clear-project",trigger:"clear-project",label:"/clear-project",description:"DANGER: clear the space — all conversations, cards, memory. Double confirmation.",kind:"direct",usage:"/clear-project",requiresConfirm:!0,allowEmpty:!0,icon:"AlertOctagon"},{id:"util",trigger:"util",label:"/util",description:"Open a mini-app (by partial name or from the list).",kind:"direct",usage:"/util <partial name or id>",allowEmpty:!0,icon:"Boxes"},{id:"help",trigger:"help",label:"/help",description:"List available commands.",kind:"direct",usage:"/help",allowEmpty:!0,icon:"HelpCircle"}];function e(a,b=[]){let c=a.trim();if(!c.startsWith("/"))return null;let f=/^\/([a-z][a-z0-9-]*)(?:\s+([\s\S]*))?$/.exec(c);if(!f)return null;let g=f[1],h=d.find(a=>a.trigger===g)??null??b.find(a=>a.trigger===g);return h?{def:h,payload:(f[2]??"").trim()}:null}},25713:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>j});var e=c(7206),f=c(77598),g=c.n(f),h=c(91147),i=a([e]);e=(i.then?(await i)():i)[0];let l=["Read","LS","Glob","Grep","WebSearch","WebFetch"];async function j(a){let b=await (0,h._)(a.meta.id),c=a.args.allowedTools&&a.args.allowedTools.length>0?a.args.allowedTools:l,d=b?[...c,...b.serverIds.map(a=>`mcp__${a}__*`)]:c,f=["-p",a.args.prompt,"--append-system-prompt",a.args.systemPrompt,"--permission-mode","default","--allowedTools",d.join(","),"--add-dir",a.args.reflexScope,"--output-format","stream-json","--verbose","--model",a.args.model,...b?["--mcp-config",b.path]:[]],i=(0,e.execa)("claude",f,{cwd:a.args.rootPath,buffer:!1,stdin:"ignore"});a.manager.registerKiller?.(a.meta.id,()=>{try{i.kill("SIGTERM"),setTimeout(()=>{try{i.kill("SIGKILL")}catch{}},1500).unref()}catch{}});let j=new Map;try{for await(let b of k(i.stdout)){let c=function(a){try{return JSON.parse(a)}catch{return null}}(b);if(c)for(let b of function(a,b,c){let d=new Date().toISOString();if("system"===a.type)return[{type:"system",text:a.subtype??"system",subtype:a.subtype,agentId:b,ts:d,seq:0}];if("assistant"===a.type){let e=[];for(let f of a.message?.content??[])"text"===f.type?e.push({type:"assistant-delta",text:f.text,agentId:b,ts:d,seq:0}):"tool_use"===f.type&&(c.set(f.id,f.name),e.push({type:"tool-use",toolUseId:f.id,name:f.name,input:f.input??{},agentId:b,ts:d,seq:0}));return e}if("user"===a.type){let h=[];for(let i of a.message?.content??[])if("tool_result"===i.type){var e,f;let a=(e=i.content)?"string"==typeof e?e:e.map(a=>"text"===a.type&&a.text?a.text:"").join(""):"";if(h.push({type:"tool-result",toolUseId:i.tool_use_id,content:a,...i.is_error?{isError:!0}:{},agentId:b,ts:d,seq:0}),i.is_error){let e=c.get(i.tool_use_id)??function(a){let b=/requested permissions to use\s+([A-Za-z_]\w*)/i.exec(a);if(b?.[1])return b[1];if(/requested permissions to write\b/i.test(a))return"Write";if(/requested permissions to edit\b/i.test(a))return"Edit";if(/requested permissions to run\b/i.test(a))return"Bash";if(/requested permissions to read\b/i.test(a))return"Read";let c=/permission .* tool[:\s]+([A-Za-z_]\w*)/i.exec(a);return c?.[1]??null}(a);if(e){let c=function(a){let b=/requested permissions to (?:write to|edit|read)\s+(\S+?)(?:,|\s+but\b|\s*$)/i.exec(a)??/requested permissions to run\s+(.+?)(?:,\s+but\b|\s*$)/i.exec(a);return b?.[1]?.trim()??null}(a);h.push({type:"permission-request",requestId:g().randomUUID().replace(/-/g,"").slice(0,12),tool:e,action:"tool-policy",...c?{input:{target:c}}:{},description:c?`The agent wants to ${f=e,"Write"===f?"write to":"Edit"===f||"MultiEdit"===f?"edit":"Read"===f?"read":"Bash"===f?"run a command":"NotebookEdit"===f?"edit a notebook":"WebFetch"===f?"fetch a URL":"WebSearch"===f?"search the web":"use"} \`${c}\` via "${e}". Allow?`:`The agent tried to call the "${e}" tool, but it is not in the allowed list for this task. Allow?`,agentId:b,ts:d,seq:0})}}}return h}return a.type,[]}(c,a.meta.id,j))await a.manager.emit(b)}try{await i}catch(a){if(i.killed);else throw a}}finally{a.manager.clearKiller?.(a.meta.id),b&&await b.cleanup()}}async function*k(a){if(!a)return;let b="";for await(let c of a){let a;for(b+="string"==typeof c?c:c.toString("utf8");(a=b.indexOf("\n"))>=0;){let c=b.slice(0,a);b=b.slice(a+1),c.trim()&&(yield c)}}b.trim()&&(yield b)}d()}catch(a){d(a)}})},31900:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{startOrchestratorTurn:()=>t});var e=c(76760),f=c.n(e),g=c(13474),h=c(61992),i=c(17640),j=c(24576),k=c(16909),l=c(74342),m=c(8734),n=c(25608),o=c(56843),p=c(3613),q=c(330),r=c(14952),s=a([k,q]);[k,q]=s.then?(await s)():s;let x="рус";async function t(a){var b;let c=await (0,j.getRoot)(a.rootId);if(!c)return{error:"Root not found",status:404};if(k.z.isActive(a.topicId))return{error:"Topic already has a running agent",status:409};let d=await (0,i.loadSettings)(),e=d.assignments.chat,l=a.harness??e.harness,s=a.model??e.model,t=d.language,z=(0,g.FF)(c.path),A=await (0,r.collectExtensions)({rootId:a.rootId}),B=A.slashCommands.map(a=>({id:`${a.utility.utilityId}:${a.id}`,trigger:a.trigger,label:a.label,description:a.description,kind:a.kind,usage:a.usage,allowEmpty:a.allowEmpty,icon:a.icon})),C=(0,m.wr)(a.message),D=(0,n.dr)(a.message,B),E=a.message;C?"goal"===C.kind&&C.text?(await (0,o.PF)(c.path,a.topicId,C.text),E=C.text):"plan"===C.kind&&(E=C.text||a.message):D&&"agent-mode"===D.def.kind&&(E=D.payload||a.message);let F=null;if(D?.def.id==="skill"){let[b,...d]=D.payload.split(/\s+/);if(b){let e=await (0,p.kA)(b,c.path,a.rootId);if(e){let b=e.instructions;if(e.workflowId){let c=await v(a.rootId,e.workflowId);null!==c&&(b=b.includes("{{workflowOutput}}")?b.replace(/\{\{workflowOutput\}\}/g,c):`${b}
240
+ ${a.args.prompt}`:a.args.prompt,e=await b.runStreamed(c),f=new Map;try{for await(let b of e.events)if("item.started"!==b.type){if("item.updated"===b.type||"item.completed"===b.type){let c=b.item;if("agent_message"===c.type){let b=f.get(c.id)??"",d=c.text.slice(b.length);d.length>0&&(f.set(c.id,c.text),await a.manager.emit({type:"assistant-delta",text:d,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}));continue}if("command_execution"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"Bash",input:{command:c.command},agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),await a.manager.emit({type:"tool-result",toolUseId:c.id,content:c.aggregated_output??"",...0!==c.exit_code?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("file_change"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"FileChange",input:{changes:c.changes},agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),await a.manager.emit({type:"tool-result",toolUseId:c.id,content:`${c.status}: ${c.changes.map(a=>`${a.kind} ${a.path}`).join(", ")}`,..."failed"===c.status?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("mcp_tool_call"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:`mcp:${c.server}:${c.tool}`,input:c.arguments,agentId:a.meta.id,ts:new Date().toISOString(),seq:0});let b=c.error?c.error.message:JSON.stringify(c.result?.content??[]).slice(0,4e3);await a.manager.emit({type:"tool-result",toolUseId:c.id,content:b,...c.error?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("web_search"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"WebSearch",input:{query:c.query},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}"error"===c.type&&"item.completed"===b.type&&await a.manager.emit({type:"error",message:c.message,agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("turn.failed"===b.type)throw await a.manager.emit({type:"error",message:`codex turn failed: ${b.error.message}`,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),Error(b.error.message);if("error"===b.type)throw await a.manager.emit({type:"error",message:b.message,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),Error(b.message)}}finally{await (0,d.Nb)(b.id)}}},23956:(a,b,c)=>{function d(a){return y(a,"<<reflex:permission>>","<</reflex:permission>>")}function e(a){let b=y(a,"<<reflex:question>>","<</reflex:question>>"),c=[];for(let a of b)if(a&&"object"==typeof a){if("questions"in a&&Array.isArray(a.questions)){for(let b of a.questions)b&&"object"==typeof b&&"string"==typeof b.prompt&&c.push(b);continue}"string"==typeof a.prompt&&c.push(a)}return c}function f(a){return y(a,"<<reflex:kb>>","<</reflex:kb>>").filter(a=>"string"==typeof a?.kind&&"string"==typeof a?.title)}function g(a){return y(a,"<<reflex:memory>>","<</reflex:memory>>").filter(a=>!!a&&"string"==typeof a.scope&&"string"==typeof a.file&&"string"==typeof a.op)}function h(a){return y(a,"<<reflex:notify>>","<</reflex:notify>>").filter(a=>!!a&&"string"==typeof a.body&&!!a.body)}function i(a){return y(a,"<<reflex:route>>","<</reflex:route>>").filter(a=>!!a&&("space-create"===a.kind||"task"===a.kind||"dispatch"===a.kind))}function j(a){return y(a,"<<reflex:report>>","<</reflex:report>>").filter(a=>!!a&&"string"==typeof a.body&&!!a.body)}function k(a){return y(a,"<<reflex:suggestion>>","<</reflex:suggestion>>").filter(a=>!!a&&"string"==typeof a.kind&&"string"==typeof a.title&&"string"==typeof a.description&&"string"==typeof a.prompt)}function l(a){return y(a,"<<reflex:skill-create>>","<</reflex:skill-create>>").filter(a=>!!a&&("global"===a.scope||"project"===a.scope)&&"string"==typeof a.id&&a.id.trim().length>0&&"string"==typeof a.title&&"string"==typeof a.instructions&&a.instructions.trim().length>0)}function m(a){return y(a,"<<reflex:task-create>>","<</reflex:task-create>>").filter(a=>!!a&&"string"==typeof a.title&&a.title.trim().length>0)}function n(a){return y(a,"<<reflex:task-update>>","<</reflex:task-update>>").filter(a=>!!a&&"string"==typeof a.id&&a.id.trim().length>0&&!!a.patch&&"object"==typeof a.patch)}function o(a){return/<{1,2}reflex:onboarding-done>{1,2}[\s\S]*?<{1,2}\/reflex:onboarding-done>{1,2}/i.test(a)}function p(a){return y(a,"<<reflex:mcp-add>>","<</reflex:mcp-add>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.server&&"string"==typeof a.label&&"object"==typeof a.config&&null!==a.config)}function q(a){return y(a,"<<reflex:dispatch>>","<</reflex:dispatch>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.role&&"string"==typeof a.brief&&a.brief.trim().length>0)}function r(a){return y(a,"<<reflex:youtube-summary>>","<</reflex:youtube-summary>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.url)}function s(a){return y(a,"<<reflex:workflow-create>>","<</reflex:workflow-create>>").filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.id&&"string"==typeof a.label&&Array.isArray(a.steps)&&a.steps.length>0)}function t(a){return y(a,"<<reflex:widget-create>>","<</reflex:widget-create>>").filter(v)}function u(a){return y(a,"<<reflex:widget-update>>","<</reflex:widget-update>>").filter(v)}function v(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&a.id.length>0&&"string"==typeof a.title&&"string"==typeof a.kind&&!!a.data&&"object"==typeof a.data}function w(a){return y(a,"<<reflex:image-gen>>","<</reflex:image-gen>>").filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.prompt&&a.prompt.trim().length>0)}function x(a){return y(a,"<<reflex:utility>>","<</reflex:utility>>").filter(a=>null!==a&&"object"==typeof a&&("global"===a.scope||"project"===a.scope)&&"object"==typeof a.files&&null!==a.files)}function y(a,b,c){let d=b.replace(/^<+/,"").replace(/>+$/,""),e=c.replace(/^<+/,"").replace(/>+$/,""),f=RegExp(`<{1,2}${z(d)}>{1,2}`,"g"),g=RegExp(`<{1,2}${z(e)}>{1,2}`,"g"),h=[],i=0;for(;i<a.length;){f.lastIndex=i;let b=f.exec(a);if(!b)break;let c=b.index+b[0].length;g.lastIndex=c;let d=g.exec(a);if(!d)break;let e=a.slice(c,d.index).trim();i=d.index+d[0].length;try{h.push(JSON.parse(e))}catch{}}return h}function z(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}c.d(b,{B5:()=>h,Bc:()=>f,Dq:()=>t,Eb:()=>q,Hz:()=>j,Oo:()=>x,QN:()=>s,Up:()=>u,WM:()=>i,XZ:()=>r,ay:()=>m,c_:()=>o,dJ:()=>e,eD:()=>p,fU:()=>k,gQ:()=>d,oT:()=>l,qk:()=>w,re:()=>n,tS:()=>g})},24058:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{n:()=>n,runWorkflow:()=>m});var e=c(77598),f=c.n(e),g=c(24576),h=c(13295),i=c(64011),j=c(79178),k=c(72440),l=a([k]);async function m(a,b,d){let e=await (0,g.getRoot)(a);if(!e)return{ok:!1,error:"Root not found"};let l=await (0,h.readWorkflow)(e.path,b);if(!l){let{collectExtensions:d}=await Promise.resolve().then(c.bind(c,14952));l=(await d({rootId:a})).workflows.find(a=>a.id===b)??null}if(!l)return{ok:!1,error:"Workflow not found"};let m={id:function(){let a=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),b=f().randomBytes(3).toString("hex");return`${a}-${b}`}(),workflowId:l.id,workflowLabel:l.label,status:"running",startedAt:new Date().toISOString(),steps:l.steps.map(a=>({stepId:a.id,status:"pending"})),...void 0!==d?{initialInput:d}:{}};await (0,h.bp)(e.path,m);let n={},o=d,p={rootId:a,rootPath:e.path,workflow:{id:l.id,label:l.label}};for(let a=0;a<l.steps.length;a++){let b=l.steps[a],c=m.steps[a];c.status="running",c.startedAt=new Date().toISOString(),await (0,h.bp)(e.path,m);try{let a=k.L[b.kind];if(!a)throw Error(`Unknown node kind: ${b.kind}`);let e=(0,j.V)(b.params,{prev:o,steps:n,input:d,workflow:{id:l.id,label:l.label}}),f=(0,i.P)(b.kind,e);c.renderedParams=f;let g=await a(f,p);c.output=g,c.status="completed",c.finishedAt=new Date().toISOString(),n[b.id]={output:g},o=g}catch(a){return c.status="failed",c.error=a instanceof Error?a.message:String(a),c.finishedAt=new Date().toISOString(),m.status="failed",m.finishedAt=new Date().toISOString(),await (0,h.bp)(e.path,m),(0,h.lq)(e.path,l.id),{ok:!0,run:m}}await (0,h.bp)(e.path,m)}return m.status="completed",m.finishedAt=new Date().toISOString(),await (0,h.bp)(e.path,m),(0,h.lq)(e.path,l.id),{ok:!0,run:m}}function n(a){if(!a.id||"string"!=typeof a.id)return"id is required";if(!a.label||"string"!=typeof a.label)return"label is required";if(!Array.isArray(a.steps)||0===a.steps.length)return"steps[] cannot be empty";let b=new Set;for(let c of a.steps){if(!c.id)return"every step must have an id";if(b.has(c.id))return`Duplicate step id: ${c.id}`;if(b.add(c.id),!k.L[c.kind])return`Unknown step kind: ${c.kind}`}return null}k=(l.then?(await l)():l)[0],d()}catch(a){d(a)}})},24776:(a,b,c)=>{c.d(b,{Aq:()=>i,pO:()=>h});let d=["Read","Glob","Grep","WebFetch","WebSearch"],e=[...d,"Write","Edit","MultiEdit"];function f(a,b,c){return[`## Specialist role: ${a}`,"",`Reply in ${b}. You are a focused specialist, not a general assistant. Do exactly the task in the brief — no more.`,"\n## Brief from the orchestrator",c.trim(),""].join("\n")}function g(a){return["\n## Rules",a,"\n- Don't ask clarifying questions to the user — you don't have a chat surface. If the brief is ambiguous, do your best with stated assumptions and note them in your output.\n- Don't emit `<<reflex:kb>>`, `<<reflex:utility>>`, `<<reflex:permission>>`, `<<reflex:question>>`, `<<reflex:dispatch>>` markers — those are for the orchestrator only. Just write your answer as plain text/markdown.\n- End with a tight summary the orchestrator can quote verbatim if the user asks for the result."].join("\n")}let h={researcher:{id:"researcher",label:"Researcher",description:"Deep KB reading / project search / web research. Read-only — never writes files. Use when you need to find or gather facts.",allowedTools:d,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("researcher",a,d),`Project root: \`${b}\``,`Knowledge base scope: \`${c}\``,g("- You are READ-ONLY: never Write/Edit/MultiEdit. Use Read/Glob/Grep to scan the KB and WebFetch/WebSearch for external lookups.\n- Cite sources by rel-path inside the KB (or URL for web).\n- If the brief asks for something that requires a write, explicitly say `cannot complete — write required` instead of doing it.")].join("\n")},coder:{id:"coder",label:"Coder",description:"Writes/edits source code, configs, schemas. Can create a utility. Use when file changes are required.",allowedTools:e,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("coder",a,d),`Project root: \`${b}\``,`Reflex scope (write here for KB files): \`${c}\``,g("- You may Write/Edit/MultiEdit files. Stay inside the project root.\n- Don't run shell or invoke other agents. If the brief implies installing a utility, write the utility files but do NOT emit `<<reflex:utility>>` — that's the orchestrator's job.\n- Report what you changed: list each touched file with a one-line summary.")].join("\n")},summarizer:{id:"summarizer",label:"Summarizer",description:"Compresses a large text / long transcript / file list into a short summary. No tools — only the text in the brief.",allowedTools:[],systemPrompt:({language:a,brief:b})=>[f("summarizer",a,b),g("- You have NO tools — work only from the text in the brief.\n- Compress aggressively: bullet points, ~10x reduction is the target unless the brief says otherwise.\n- Preserve names, numbers, dates, file paths verbatim. Drop filler.")].join("\n")},"kb-writer":{id:"kb-writer",label:"KB Writer",description:"Structured knowledge-base entry (kind/title/body/frontmatter). Use when the orchestrator decides to save something.",allowedTools:d,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("kb-writer",a,d),`KB root: \`${c}\``,`Project: \`${b}\``,g('- You DO NOT write the file yourself. Output a JSON object the orchestrator will pass to <<reflex:kb>>:\n ```json\n {"kind":"<entity-type>","title":"…","body":"…markdown…","meta":{…optional frontmatter fields…}}\n ```\n- Pick a sensible `kind` (fact / task / meeting / product / decision / source / …).\n- `body` is full markdown. Frontmatter `meta` should hold structured fields the user might filter/group on.')].join("\n")},"utility-builder":{id:"utility-builder",label:"Utility Builder",description:"Design a utility: manifest + ui.tsx + (optional) server actions. Use when the user explicitly asks to create a utility.",allowedTools:d,systemPrompt:({language:a,root:b,brief:c})=>[f("utility-builder",a,c),`Project: \`${b}\``,g("- Output the utility files inline in markdown code fences with file paths as headers:\n ### manifest.json\n ```json\n { … }\n ```\n ### ui.tsx\n ```tsx\n … React functional component, default-export …\n ```\n- Follow Reflex utility contract: imports only from `react`, `react-dom/client`, `react/jsx-runtime`, `@host/api`, `@host/ui`. Declare needed permissions and secrets in manifest.\n- Don't emit `<<reflex:utility>>` yourself — the orchestrator wraps your output and emits the marker.")].join("\n")}};function i(a){return a in h}},25608:(a,b,c)=>{c.d(b,{dr:()=>e});let d=[{id:"plan",trigger:"plan",label:"/plan",description:"Show the plan first — Reflex lays out the steps and waits for approval.",kind:"agent-mode",usage:"/plan <task>",icon:"ListChecks"},{id:"goal",trigger:"goal",label:"/goal",description:"Set a goal — Reflex will work toward it on its own, without reminders.",kind:"agent-mode",usage:"/goal <what to achieve>",icon:"Target"},{id:"research",trigger:"research",label:"/research",description:"Deep research on a topic — web search + summary with sources.",kind:"agent-mode",usage:"/research <topic>",icon:"Telescope"},{id:"widget",trigger:"widget",label:"/widget",description:"Create a card on the space dashboard.",kind:"agent-mode",usage:"/widget <what to show>",icon:"LayoutGrid"},{id:"workflow",trigger:"workflow",label:"/workflow",description:"Build a recipe — linear step-based automation for the task.",kind:"agent-mode",usage:"/workflow <what to automate>",icon:"Workflow"},{id:"new-utility",trigger:"new-utility",label:"/new-utility",description:"Build a Reflex mini-app (utility) — TypeScript, runs inside Reflex.",kind:"agent-mode",usage:"/new-utility <name — what it does>",icon:"PackagePlus"},{id:"distill",trigger:"distill",label:"/distill",description:"Pull a URL into the KB — extract key facts, action items, and links to related notes.",kind:"agent-mode",usage:"/distill <url> [focus]",icon:"BookOpenCheck"},{id:"practice",trigger:"practice",label:"/practice",description:"Roleplay a tough conversation — Reflex plays the counterpart and coaches you between turns.",kind:"agent-mode",usage:"/practice <scenario>",icon:"MessagesSquare"},{id:"reflect",trigger:"reflect",label:"/reflect",description:"Daily check-in — three questions adapted to your recent entries, saved as a journal note.",kind:"agent-mode",usage:"/reflect",allowEmpty:!0,icon:"Sunrise"},{id:"remember",trigger:"remember",label:"/remember",description:"Save a note — straight into memory, no AI involved.",kind:"direct",usage:"/remember <what to remember>",icon:"BookmarkPlus"},{id:"mcp",trigger:"mcp",label:"/mcp",description:"Connect an external service (setup wizard opens in chat).",kind:"agent-mode",usage:"/mcp <what you need>",icon:"PackagePlus"},{id:"skill",trigger:"skill",label:"/skill",description:"Attach a role — a ready-made instruction set for this conversation.",kind:"agent-mode",usage:"/skill <role-id> [prompt]",icon:"Sparkles"},{id:"delete-topic",trigger:"delete-topic",label:"/delete-topic",description:"Delete this conversation (with confirmation).",kind:"direct",usage:"/delete-topic",requiresConfirm:!0,allowEmpty:!0,icon:"Trash2"},{id:"clear-project",trigger:"clear-project",label:"/clear-project",description:"DANGER: clear the space — all conversations, cards, memory. Double confirmation.",kind:"direct",usage:"/clear-project",requiresConfirm:!0,allowEmpty:!0,icon:"AlertOctagon"},{id:"util",trigger:"util",label:"/util",description:"Open a mini-app (by partial name or from the list).",kind:"direct",usage:"/util <partial name or id>",allowEmpty:!0,icon:"Boxes"},{id:"help",trigger:"help",label:"/help",description:"List available commands.",kind:"direct",usage:"/help",allowEmpty:!0,icon:"HelpCircle"}];function e(a,b=[]){let c=a.trim();if(!c.startsWith("/"))return null;let f=/^\/([a-z][a-z0-9-]*)(?:\s+([\s\S]*))?$/.exec(c);if(!f)return null;let g=f[1],h=d.find(a=>a.trigger===g)??null??b.find(a=>a.trigger===g);return h?{def:h,payload:(f[2]??"").trim()}:null}},25713:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>j});var e=c(7206),f=c(77598),g=c.n(f),h=c(91147),i=a([e]);e=(i.then?(await i)():i)[0];let l=["Read","LS","Glob","Grep","WebSearch","WebFetch"];async function j(a){let b=await (0,h._)(a.meta.id),c=a.args.allowedTools&&a.args.allowedTools.length>0?a.args.allowedTools:l,d=b?[...c,...b.serverIds.map(a=>`mcp__${a}__*`)]:c,f=["-p",a.args.prompt,"--append-system-prompt",a.args.systemPrompt,"--permission-mode","default","--allowedTools",d.join(","),"--add-dir",a.args.reflexScope,"--output-format","stream-json","--verbose","--model",a.args.model,...b?["--mcp-config",b.path]:[]],i=(0,e.execa)("claude",f,{cwd:a.args.rootPath,buffer:!1,stdin:"ignore"});a.manager.registerKiller?.(a.meta.id,()=>{try{i.kill("SIGTERM"),setTimeout(()=>{try{i.kill("SIGKILL")}catch{}},1500).unref()}catch{}});let j=new Map;try{for await(let b of k(i.stdout)){let c=function(a){try{return JSON.parse(a)}catch{return null}}(b);if(c)for(let b of function(a,b,c){let d=new Date().toISOString();if("system"===a.type)return[{type:"system",text:a.subtype??"system",subtype:a.subtype,agentId:b,ts:d,seq:0}];if("assistant"===a.type){let e=[];for(let f of a.message?.content??[])"text"===f.type?e.push({type:"assistant-delta",text:f.text,agentId:b,ts:d,seq:0}):"tool_use"===f.type&&(c.set(f.id,f.name),e.push({type:"tool-use",toolUseId:f.id,name:f.name,input:f.input??{},agentId:b,ts:d,seq:0}));return e}if("user"===a.type){let h=[];for(let i of a.message?.content??[])if("tool_result"===i.type){var e,f;let a=(e=i.content)?"string"==typeof e?e:e.map(a=>"text"===a.type&&a.text?a.text:"").join(""):"";if(h.push({type:"tool-result",toolUseId:i.tool_use_id,content:a,...i.is_error?{isError:!0}:{},agentId:b,ts:d,seq:0}),i.is_error){let e=c.get(i.tool_use_id)??function(a){let b=/requested permissions to use\s+([A-Za-z_]\w*)/i.exec(a);if(b?.[1])return b[1];if(/requested permissions to write\b/i.test(a))return"Write";if(/requested permissions to edit\b/i.test(a))return"Edit";if(/requested permissions to run\b/i.test(a))return"Bash";if(/requested permissions to read\b/i.test(a))return"Read";let c=/permission .* tool[:\s]+([A-Za-z_]\w*)/i.exec(a);return c?.[1]??null}(a);if(e){let c=function(a){let b=/requested permissions to (?:write to|edit|read)\s+(\S+?)(?:,|\s+but\b|\s*$)/i.exec(a)??/requested permissions to run\s+(.+?)(?:,\s+but\b|\s*$)/i.exec(a);return b?.[1]?.trim()??null}(a);h.push({type:"permission-request",requestId:g().randomUUID().replace(/-/g,"").slice(0,12),tool:e,action:"tool-policy",...c?{input:{target:c}}:{},description:c?`The agent wants to ${f=e,"Write"===f?"write to":"Edit"===f||"MultiEdit"===f?"edit":"Read"===f?"read":"Bash"===f?"run a command":"NotebookEdit"===f?"edit a notebook":"WebFetch"===f?"fetch a URL":"WebSearch"===f?"search the web":"use"} \`${c}\` via "${e}". Allow?`:`The agent tried to call the "${e}" tool, but it is not in the allowed list for this task. Allow?`,agentId:b,ts:d,seq:0})}}}return h}return a.type,[]}(c,a.meta.id,j))await a.manager.emit(b)}try{await i}catch(a){if(i.killed);else throw a}}finally{a.manager.clearKiller?.(a.meta.id),b&&await b.cleanup()}}async function*k(a){if(!a)return;let b="";for await(let c of a){let a;for(b+="string"==typeof c?c:c.toString("utf8");(a=b.indexOf("\n"))>=0;){let c=b.slice(0,a);b=b.slice(a+1),c.trim()&&(yield c)}}b.trim()&&(yield b)}d()}catch(a){d(a)}})},31900:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{startOrchestratorTurn:()=>u});var e=c(76760),f=c.n(e),g=c(13474),h=c(61992),i=c(17640),j=c(24576),k=c(16909),l=c(74342),m=c(53526),n=c(8734),o=c(25608),p=c(56843),q=c(3613),r=c(330),s=c(14952),t=a([k,r]);[k,r]=t.then?(await t)():t;let y="рус";async function u(a){var b;let c=await (0,j.getRoot)(a.rootId);if(!c)return{error:"Root not found",status:404};if(k.z.isActive(a.topicId))return{error:"Topic already has a running agent",status:409};let d=await (0,i.loadSettings)(),e=d.assignments.chat,l=a.harness??e.harness,m=a.model??e.model,t=d.language,u=(0,g.FF)(c.path),A=await (0,s.collectExtensions)({rootId:a.rootId}),B=A.slashCommands.map(a=>({id:`${a.utility.utilityId}:${a.id}`,trigger:a.trigger,label:a.label,description:a.description,kind:a.kind,usage:a.usage,allowEmpty:a.allowEmpty,icon:a.icon})),C=(0,n.wr)(a.message),D=(0,o.dr)(a.message,B),E=a.message;C?"goal"===C.kind&&C.text?(await (0,p.PF)(c.path,a.topicId,C.text),E=C.text):"plan"===C.kind&&(E=C.text||a.message):D&&"agent-mode"===D.def.kind&&(E=D.payload||a.message);let F=null;if(D?.def.id==="skill"){let[b,...d]=D.payload.split(/\s+/);if(b){let e=await (0,q.kA)(b,c.path,a.rootId);if(e){let b=e.instructions;if(e.workflowId){let c=await w(a.rootId,e.workflowId);null!==c&&(b=b.includes("{{workflowOutput}}")?b.replace(/\{\{workflowOutput\}\}/g,c):`${b}
242
241
 
243
242
  ## Workflow output (from \`${e.workflowId}\`)
244
- ${c}`)}F=b,E=d.join(" ").trim()||E}}}let G=await (0,o.getTopic)(c.path,a.topicId),H=G?.meta.goal&&"active"===G.meta.goalStatus?G.meta.goal:void 0,I=await (0,h.M)({root:c.path,scope:c.path,reflexScope:z,language:t}),J=await (0,q.f)({rootPath:c.path}),K=function(a){let b=[],c=new Set;for(let d of a.matchAll(/https?:\/\/[^\s)>'"]+/g)){let a=d[0];try{let d=new URL(a);if(!y.has(d.hostname.toLowerCase())||c.has(a))continue;c.add(a),b.push(a)}catch{}}return b}(E),L=[I,J,H?(0,m.FB)(H,t):"",C?.kind==="plan"?(0,m.$4)(t):"",D?.def.id==="research"?(0,m.dA)(D.payload,t):"",D?.def.id==="widget"?(0,m.wt)(D.payload,t):"",D?.def.id==="new-utility"?(0,m.EA)(D.payload,t):"",D?.def.id==="mcp"?(0,m.YE)(D.payload,t):"",D?.def.id==="workflow"?(0,m.vl)(D.payload,t):"",D?.def.id==="distill"?(0,m.VM)(D.payload,t):"",D?.def.id==="practice"?(0,m.z7)(D.payload,t):"",D?.def.id==="reflect"?(0,m.zM)(t):"",F??"",a.focusFile?function(a,b,c){let d=f().join(b,a);return/russ/i.test(c)||RegExp(x,"i").test(c)?`## Open document — primary context
243
+ ${c}`)}F=b,E=d.join(" ").trim()||E}}}let G=await (0,p.getTopic)(c.path,a.topicId),H=G?.meta.goal&&"active"===G.meta.goalStatus?G.meta.goal:void 0,I=await (0,h.M)({root:c.path,scope:c.path,reflexScope:u,language:t}),J=await (0,r.f)({rootPath:c.path}),K=function(a){let b=[],c=new Set;for(let d of a.matchAll(/https?:\/\/[^\s)>'"]+/g)){let a=d[0];try{let d=new URL(a);if(!z.has(d.hostname.toLowerCase())||c.has(a))continue;c.add(a),b.push(a)}catch{}}return b}(E),L=[I,J,H?(0,n.FB)(H,t):"",C?.kind==="plan"?(0,n.$4)(t):"",D?.def.id==="research"?(0,n.dA)(D.payload,t):"",D?.def.id==="widget"?(0,n.wt)(D.payload,t):"",D?.def.id==="new-utility"?(0,n.EA)(D.payload,t):"",D?.def.id==="mcp"?(0,n.YE)(D.payload,t):"",D?.def.id==="workflow"?(0,n.vl)(D.payload,t):"",D?.def.id==="distill"?(0,n.VM)(D.payload,t):"",D?.def.id==="practice"?(0,n.z7)(D.payload,t):"",D?.def.id==="reflect"?(0,n.zM)(t):"",F??"",a.focusFile?function(a,b,c){let d=f().join(b,a);return/russ/i.test(c)||RegExp(y,"i").test(c)?`## Open document — primary context
245
244
 
246
245
  The user is currently reading this KB file: \`${a}\`
247
246
  Absolute path: \`${d}\`
@@ -261,7 +260,7 @@ Rules for this turn:
261
260
  2. Base your answer primarily on its contents.
262
261
  3. Only fall back to neighbouring files (same directory, sibling INDEX.md, parent dir) if the open file lacks the needed info.
263
262
  4. Don't guess: if neither the open file nor its neighbours contain the answer, say so explicitly and suggest where to look.
264
- 5. When citing, use rel-paths from the KB root (same convention as the open file).`}(a.focusFile,z,t):"",K.length>0?function(a,b){let c=/russ/i.test(b)||RegExp(x,"i").test(b),d=a.map(a=>`- ${a}`).join("\n");return c?["## YouTube video in the message\n\nThe user's message contains YouTube URL(s):",d,'\n**Decide whether you actually need the video\'s content to answer.**\n\n- If the user wants to know **what the video is about** / **what\'s said in it** / a description / summary / quotes / facts — ask Reflex to run a Gemini summary:\n\n```\n<<reflex:youtube-summary>>{"url":"<URL>"}<</reflex:youtube-summary>>\n```\n\n One marker per video, all in the same turn. After emitting markers **STOP** — do not try to answer in this same turn. Reflex will wait for Gemini and re-invoke you with the summary in context.\n\n- If the request **doesn\'t need** the video\'s content (for example "which player is better", "fix this link", "add another video to this") — answer directly, no directive.\n\n- **Do not use WebFetch** for YouTube URLs — it returns neither captions nor video. Only the directive above.\n\n- If the Gemini summary fails (Reflex will return an error message), apologise and suggest saving a key in Settings -> Gemini. Respond in Russian.'].join("\n"):["## YouTube video in the message\n\nThe user's message contains YouTube URL(s):",d,'\n**Decide whether you actually need the video\'s content to answer.**\n\n- If the user wants to know **what the video is about** / **what\'s said in it** / a description / summary / quotes / facts — ask Reflex to run Gemini-summary:\n\n```\n<<reflex:youtube-summary>>{"url":"<URL>"}<</reflex:youtube-summary>>\n```\n\n One marker per video, all in the same turn. After emitting markers **STOP** — don\'t try to answer in this same turn. Reflex will wait for Gemini and re-invoke you with the summary in context.\n\n- If the request **doesn\'t need** the video\'s content ("which player is best", "fix this URL", "add another video") — answer directly, no directive.\n\n- **Don\'t use WebFetch** for YouTube URLs — it gets neither captions nor video. Only the directive above.\n\n- If the Gemini summary fails (Reflex will return an error message), apologise and suggest saving a key in Settings → Gemini.'].join("\n")}(K,t):"",...A.promptBlocks.map(a=>a.content),function(a,b,c){if(!a||"agent-mode"!==a.def.kind||!a.def.id.includes(":"))return null;let d=b.slashCommands.find(b=>`${b.utility.utilityId}:${b.id}`===a.def.id&&b.trigger===a.def.trigger);return d?.promptBlock?d.promptBlock.replace(/\{payload\}/g,a.payload).replace(/\{language\}/g,c):null}(D,A,t)??"",await u(a.rootId,t),G?.meta.dispatchedFromDispatcher?(b=t,`## You were dispatched here by the dispatcher
263
+ 5. When citing, use rel-paths from the KB root (same convention as the open file).`}(a.focusFile,u,t):"",K.length>0?function(a,b){let c=/russ/i.test(b)||RegExp(y,"i").test(b),d=a.map(a=>`- ${a}`).join("\n");return c?["## YouTube video in the message\n\nThe user's message contains YouTube URL(s):",d,'\n**Decide whether you actually need the video\'s content to answer.**\n\n- If the user wants to know **what the video is about** / **what\'s said in it** / a description / summary / quotes / facts — ask Reflex to run a Gemini summary:\n\n```\n<<reflex:youtube-summary>>{"url":"<URL>"}<</reflex:youtube-summary>>\n```\n\n One marker per video, all in the same turn. After emitting markers **STOP** — do not try to answer in this same turn. Reflex will wait for Gemini and re-invoke you with the summary in context.\n\n- If the request **doesn\'t need** the video\'s content (for example "which player is better", "fix this link", "add another video to this") — answer directly, no directive.\n\n- **Do not use WebFetch** for YouTube URLs — it returns neither captions nor video. Only the directive above.\n\n- If the Gemini summary fails (Reflex will return an error message), apologise and suggest saving a key in Settings -> Gemini. Respond in Russian.'].join("\n"):["## YouTube video in the message\n\nThe user's message contains YouTube URL(s):",d,'\n**Decide whether you actually need the video\'s content to answer.**\n\n- If the user wants to know **what the video is about** / **what\'s said in it** / a description / summary / quotes / facts — ask Reflex to run Gemini-summary:\n\n```\n<<reflex:youtube-summary>>{"url":"<URL>"}<</reflex:youtube-summary>>\n```\n\n One marker per video, all in the same turn. After emitting markers **STOP** — don\'t try to answer in this same turn. Reflex will wait for Gemini and re-invoke you with the summary in context.\n\n- If the request **doesn\'t need** the video\'s content ("which player is best", "fix this URL", "add another video") — answer directly, no directive.\n\n- **Don\'t use WebFetch** for YouTube URLs — it gets neither captions nor video. Only the directive above.\n\n- If the Gemini summary fails (Reflex will return an error message), apologise and suggest saving a key in Settings → Gemini.'].join("\n")}(K,t):"",...A.promptBlocks.map(a=>a.content),function(a,b,c){if(!a||"agent-mode"!==a.def.kind||!a.def.id.includes(":"))return null;let d=b.slashCommands.find(b=>`${b.utility.utilityId}:${b.id}`===a.def.id&&b.trigger===a.def.trigger);return d?.promptBlock?d.promptBlock.replace(/\{payload\}/g,a.payload).replace(/\{language\}/g,c):null}(D,A,t)??"",await v(a.rootId,t),G?.meta.dispatchedFromDispatcher?(b=t,`## You were dispatched here by the dispatcher
265
264
 
266
265
  Reply in ${b}. The user who asked for this is NOT watching this Space — they're in the central dispatcher chat (and Telegram). Keep them in the loop by reporting back:
267
266
 
@@ -273,9 +272,9 @@ Reply in ${b}. The user who asked for this is NOT watching this Space — they'r
273
272
  - ALWAYS emit a \`done\` report when you finish the task — with the outcome, not just "done".
274
273
  - The moment you're blocked or need a decision, emit a \`question\` report instead of stalling.
275
274
  - \`update\` status is fine for a meaningful mid-way checkpoint on a long task. Don't spam.
276
- - Do the actual work in this Space as usual; the report is how the result travels back to the user.`):""].filter(Boolean).join("\n\n"),M=await k.z.ensureAgent({topicId:a.topicId,rootId:a.rootId,rootPath:c.path,reflexScope:z,role:"orchestrator",task:"chat",harness:l,model:s,language:t,label:"Orchestrator"}),N=function(a,b){let c=a.trim();if(!b||0===b.length)return c;let d=b.map(a=>`📎 ${a.name} (${a.absPath})`).join("\n");return c?`${c}
275
+ - Do the actual work in this Space as usual; the report is how the result travels back to the user.`):""].filter(Boolean).join("\n\n"),M=await k.z.ensureAgent({topicId:a.topicId,rootId:a.rootId,rootPath:c.path,reflexScope:u,role:"orchestrator",task:"chat",harness:l,model:m,language:t,label:"Orchestrator"}),N=function(a,b){let c=a.trim();if(!b||0===b.length)return c;let d=b.map(a=>`📎 ${a.name} (${a.absPath})`).join("\n");return c?`${c}
277
276
 
278
- ${d}`:d}(a.message,a.attachments);return await k.z.emit({type:"user-message",text:N,agentId:M.id,ts:new Date().toISOString(),seq:0}),(async()=>{try{let b=await w(c.path,a.topicId,a.rootId),d=function(a,b){let c=["### user",a.trim()||"(no text)"];if(b&&b.length>0)for(let a of(c.push(""),c.push("Attached files (use the Read tool to open them):"),b))c.push(` - ${a.absPath} (${a.mime}, ${a.size} bytes) — original: ${a.name}`);return c.join("\n")}(E,a.attachments),f=b?`Prior conversation:
277
+ ${d}`:d}(a.message,a.attachments);return await k.z.emit({type:"user-message",text:N,agentId:M.id,ts:new Date().toISOString(),seq:0}),(async()=>{try{let b=await x(c.path,a.topicId,a.rootId),d=function(a,b){let c=["### user",a.trim()||"(no text)"];if(b&&b.length>0)for(let a of(c.push(""),c.push("Attached files (use the Read tool to open them):"),b))c.push(` - ${a.absPath} (${a.mime}, ${a.size} bytes) — original: ${a.name}`);return c.join("\n")}(E,a.attachments),f=b?`Prior conversation:
279
278
 
280
279
  ${b}
281
280
 
@@ -285,11 +284,11 @@ ${d}
285
284
  (Reply now.)`:`${d}
286
285
 
287
286
  ### assistant
288
- (Reply now.)`;await k.z.invoke({agentId:M.id,systemPrompt:L,prompt:f,allowedTools:e.allowedTools})}catch(a){await k.z.emit({type:"error",message:a instanceof Error?a.message:String(a),agentId:M.id,ts:new Date().toISOString(),seq:0})}})(),{agentId:M.id}}async function u(a,b){let{isHomeRoot:d,listRoots:e}=await Promise.resolve().then(c.bind(c,24576));if(!d(a))return"";let f=await e().catch(()=>[]),g=f.length>0?f.map(a=>` - ${a.path.split("/").filter(Boolean).pop()} → id: ${a.id}`).join("\n"):" (none yet)";return["## You are the dispatcher\n",`Reply in ${b}. This is the central, always-on thread — the user talks to you here AND from Telegram (same conversation). Two jobs:`,' 1. Collect durable facts about the user/their world into global memory (use `<<reflex:memory>>` with scope:"global").\n 2. Route work into the right Space. You can act ACROSS Spaces with `<<reflex:route>>`:\n\n```\n<<reflex:route>>{"kind":"space-create","title":"Side project X"}<</reflex:route>>',`<<reflex:route>>{"kind":"task","rootId":"<space-id>","title":"…","body":"…","taskType":"feature"}<</reflex:route>>`,`<<reflex:route>>{"kind":"dispatch","rootId":"<space-id>","prompt":"…what the agent should do there…"}<</reflex:route>>`,"```\n\nKnown Spaces (use their id as `rootId`):",g,"\n- `space-create` registers a new Space (folder under ~/reflex-spaces unless you pass `path`).\n- `task` files a card on that Space's board. `dispatch` starts an agent working in that Space immediately.\n- Prefer routing over doing project work here — this thread coordinates; the Spaces do the work. Confirm what you routed in one line."].join("\n")}async function v(a,b){try{let{runWorkflow:d}=await Promise.resolve().then(c.bind(c,24058)),e=await d(a,b);if(!e.ok)return null;let f=[];for(let a of e.run.steps){let b=a.output;null!=b&&f.push("string"==typeof b?b:JSON.stringify(b,null,2))}return f.join("\n\n").trim()||null}catch{return null}}let y=new Set(["youtube.com","www.youtube.com","m.youtube.com","youtu.be","youtube-nocookie.com","www.youtube-nocookie.com"]);async function w(a,b,d){let e=await (0,l.readEvents)(a,b),f="";if(d&&(await Promise.resolve().then(c.bind(c,24576))).isHomeRoot(d)){let{getDispatcherSummary:a}=await c.e(6142).then(c.bind(c,26142)),d=await a(b);d&&d.coveredCount<e.length&&(f=`### context (summary of earlier conversation)
287
+ (Reply now.)`;await k.z.invoke({agentId:M.id,systemPrompt:L,prompt:f,allowedTools:e.allowedTools})}catch(a){await k.z.emit({type:"error",message:a instanceof Error?a.message:String(a),agentId:M.id,ts:new Date().toISOString(),seq:0})}})(),{agentId:M.id}}async function v(a,b){let{isHomeRoot:d,listRoots:e}=await Promise.resolve().then(c.bind(c,24576));if(!d(a))return"";let f=await e().catch(()=>[]),g=f.length>0?f.map(a=>` - ${a.path.split("/").filter(Boolean).pop()} → id: ${a.id}`).join("\n"):" (none yet)";return["## You are the dispatcher\n",`Reply in ${b}. This is the central, always-on thread — the user talks to you here AND from Telegram (same conversation). Two jobs:`,' 1. Collect durable facts about the user/their world into global memory (use `<<reflex:memory>>` with scope:"global").\n 2. Route work into the right Space. You can act ACROSS Spaces with `<<reflex:route>>`:\n\n```\n<<reflex:route>>{"kind":"space-create","title":"Side project X"}<</reflex:route>>',`<<reflex:route>>{"kind":"task","rootId":"<space-id>","title":"…","body":"…","taskType":"feature"}<</reflex:route>>`,`<<reflex:route>>{"kind":"dispatch","rootId":"<space-id>","prompt":"…what the agent should do there…"}<</reflex:route>>`,"```\n\nKnown Spaces (use their id as `rootId`):",g,"\n- `space-create` registers a new Space (folder under ~/reflex-spaces unless you pass `path`).\n- `task` files a card on that Space's board. `dispatch` starts an agent working in that Space immediately.\n- Prefer routing over doing project work here — this thread coordinates; the Spaces do the work. Confirm what you routed in one line."].join("\n")}async function w(a,b){try{let{runWorkflow:d}=await Promise.resolve().then(c.bind(c,24058)),e=await d(a,b);if(!e.ok)return null;let f=[];for(let a of e.run.steps){let b=a.output;null!=b&&f.push("string"==typeof b?b:JSON.stringify(b,null,2))}return f.join("\n\n").trim()||null}catch{return null}}let z=new Set(["youtube.com","www.youtube.com","m.youtube.com","youtu.be","youtube-nocookie.com","www.youtube-nocookie.com"]);async function x(a,b,d){let e=await (0,l.readEvents)(a,b),f="";if(d&&(await Promise.resolve().then(c.bind(c,24576))).isHomeRoot(d)){let{getDispatcherSummary:a}=await c.e(6142).then(c.bind(c,26142)),d=await a(b);d&&d.coveredCount<e.length&&(f=`### context (summary of earlier conversation)
289
288
  ${d.text}
290
289
 
291
- `,e=e.slice(d.coveredCount))}let g=[],h=null,i=()=>{h&&(g.push(`### ${h.role}
292
- ${h.text.trim()}`),h=null)};for(let a of e)"user-message"===a.type?(i(),h={role:"user",text:a.text},i()):"assistant-delta"===a.type?(h&&"assistant"===h.role||(i(),h={role:"assistant",text:""}),h.text+=a.text):("turn-end"===a.type||"agent-end"===a.type)&&i();return i(),f+g.join("\n\n")}d()}catch(a){d(a)}})},47423:(a,b,c)=>{c.d(b,{E:()=>e});var d=c(17640);async function e(a){let b=(await (0,d.loadSettings)()).harnesses.ollama.baseUrl.replace(/\/$/,""),c=await fetch(`${b}/api/generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a.args.model,system:a.args.systemPrompt,prompt:a.args.prompt,stream:!0})});if(!c.ok||!c.body)throw Error(`Ollama /api/generate HTTP ${c.status}`);let e=c.body.getReader(),f=new TextDecoder,g="";for(;;){let b,{done:c,value:d}=await e.read();if(c)break;for(g+=f.decode(d,{stream:!0});(b=g.indexOf("\n"))>=0;){let c=g.slice(0,b).trim();if(g=g.slice(b+1),c)try{let b=JSON.parse(c);if(b.error)throw Error(b.error);b.response&&await a.manager.emit({type:"assistant-delta",text:b.response,agentId:a.meta.id,ts:new Date().toISOString(),seq:0})}catch{}}}}},50059:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{L:()=>j});var e=c(49353),f=c(64163),g=a([f]);f=(g.then?(await g)():g)[0];let j={"text-template":async a=>"string"==typeof a.template?a.template:"","http-request":async a=>{let b=h(a.url,"url"),c=i(a.method,"GET").toUpperCase(),d=function(a,b){if("string"!=typeof a||!a.trim())return b;try{return JSON.parse(a)}catch{return b}}(a.headers,{}),e=i(a.body,""),f={method:c,headers:d};"GET"!==c&&"HEAD"!==c&&e&&(f.body=e);let g=await fetch(b,f),j=await g.text(),k=g.headers.get("content-type")??"",l=j;if(k.includes("application/json"))try{l=JSON.parse(j)}catch{}if(!g.ok)throw Error(`HTTP ${g.status} ${g.statusText}: ${j.slice(0,200)}`);return l},"web-fetch":async a=>{let b=h(a.url,"url"),c=await fetch(b,{headers:{"User-Agent":"Reflex-Workflow/1.0"}});if(!c.ok)throw Error(`HTTP ${c.status} ${c.statusText}`);return await c.text()},"ask-agent":async(a,b)=>{let c=h(a.prompt,"prompt"),{text:d}=await (0,f.runHeadlessAgent)({rootId:b.rootId,prompt:c,label:`[workflow ${b.workflow.id}] ${b.workflow.label}`});return d},"kb-write":async(a,b)=>{let c=i(a.kind,"note"),d=i(a.title,`Workflow ${b.workflow.label}`),f=i(a.body,""),g=await (0,e.j)({rootPath:b.rootPath,directive:{kind:c,title:d,body:f}});return{kind:g.kind,title:g.title,relPath:g.relPath,absPath:g.absPath}},"image-generate":async(a,b)=>{let d=h(a.prompt,"prompt"),e="codex"===a.provider||"gemini"===a.provider?a.provider:void 0,{generateImage:f}=await Promise.resolve().then(c.bind(c,59835)),g=await f({rootId:b.rootId,prompt:d,...e?{provider:e}:{},..."string"==typeof a.size&&a.size?{size:a.size}:{},..."string"==typeof a.aspectRatio&&a.aspectRatio?{aspectRatio:a.aspectRatio}:{}});return{url:g.urlPath,sha:g.sha,size:g.size,mime:g.mime,provider:g.provider}},"image-search":async a=>{let b,d=h(a.query,"query"),e="pexels"===a.provider||"unsplash"===a.provider||"brave"===a.provider?a.provider:void 0;if("number"==typeof a.count)b=a.count;else if("string"==typeof a.count&&a.count.trim()){let c=parseInt(a.count,10);Number.isFinite(c)&&c>0&&(b=c)}let{searchImages:f}=await Promise.resolve().then(c.bind(c,59835));return{results:await f({query:d,...e?{provider:e}:{},...void 0!==b?{count:b}:{}})}},"utility-call":async(a,b)=>{let d=h(a.utilityId,"utilityId"),e=h(a.actionName,"actionName"),f="project"===a.utilityScope?"project":"global",g=a.args??{};if("string"==typeof g)try{g=g.trim()?JSON.parse(g):{}}catch(a){throw Error(`utility-call: args is not valid JSON: ${a instanceof Error?a.message:String(a)}`)}let{getUtility:i}=await Promise.resolve().then(c.bind(c,61105)),j=await i(f,d,"project"===f?b.rootId:void 0);if(!j)throw Error(`utility-call: ${f}/${d} not installed`);let k=j.manifest.serverActions.find(a=>a.name===e);if(!k)throw Error(`utility-call: ${d} has no serverAction "${e}"`);let{runServerAction:l}=await Promise.all([c.e(7300),c.e(2485),c.e(9579)]).then(c.bind(c,29579));return l({utility:j,action:k,args:g,parentCorrelationId:`workflow:${b.workflow.id}`})},notify:async a=>{let b=i(a.body,i(a.text,"")).trim();if(!b)throw Error("notify: body is empty");let{notify:d}=await c.e(3377).then(c.bind(c,3377)),e=await d({body:b,..."string"==typeof a.title&&a.title?{title:a.title}:{},..."string"==typeof a.link&&a.link?{link:a.link}:{}});return{delivered:e.delivered,errors:e.errors}}};function h(a,b){if("string"!=typeof a||!a.trim())throw Error(`Param "${b}" is required (string)`);return a}function i(a,b){return"string"==typeof a?a:b}d()}catch(a){d(a)}})},56843:(a,b,c)=>{c.d(b,{PF:()=>r,_9:()=>t,createTopic:()=>u,do:()=>v,getTopic:()=>p,hk:()=>o,o0:()=>s});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(30192),j=c.n(i),k=c(13474);function l(a){return f().join((0,k.FF)(a),"topics")}function m(a,b){return f().join(l(a),`${n(b)}.md`)}function n(a){return a.replace(/[^A-Za-z0-9_-]/g,"")}async function o(a){let b,c=l(a);try{b=await d.promises.readdir(c,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of b){if(!a.isFile()||!a.name.toLowerCase().endsWith(".md"))continue;let b=f().join(c,a.name);try{let a=await d.promises.readFile(b,"utf8"),c=j()(a),f=c.data;if(!f.id||!f.createdAt)continue;let g=c.content.replace(/^##\s+(user|assistant)\s*$/gim,"").trim().slice(0,160);e.push({meta:{id:f.id,title:f.title??"Untitled",createdAt:f.createdAt,updatedAt:f.updatedAt??f.createdAt,harness:f.harness,model:f.model,language:f.language,...f.goal?{goal:f.goal}:{},...f.goalStatus?{goalStatus:f.goalStatus}:{},..."number"==typeof f.goalIterations?{goalIterations:f.goalIterations}:{},...f.helperFor?{helperFor:f.helperFor}:{},...f.taskId?{taskId:f.taskId}:{}},preview:g,abs:b})}catch{}}return e.sort((a,b)=>Date.parse(b.meta.updatedAt)-Date.parse(a.meta.updatedAt)),e}async function p(a,b){let c,e=m(a,b);try{c=await d.promises.readFile(e,"utf8")}catch{return null}let f=j()(c),g=f.data;return g.id?{meta:{id:g.id,title:g.title??"Untitled",createdAt:g.createdAt??new Date().toISOString(),updatedAt:g.updatedAt??g.createdAt??new Date().toISOString(),harness:g.harness,model:g.model,language:g.language,...g.goal?{goal:g.goal}:{},...g.goalStatus?{goalStatus:g.goalStatus}:{},..."number"==typeof g.goalIterations?{goalIterations:g.goalIterations}:{},...g.helperFor?{helperFor:g.helperFor}:{},...g.taskId?{taskId:g.taskId}:{},...g.dispatchedFromDispatcher?{dispatchedFromDispatcher:!0}:{}},messages:function(a){let b=[],c=a.split(/\r?\n/),d=null;for(let a of c){let c=/^##\s+(user|assistant)\s*$/i.exec(a);if(c){d&&b.push({...d,body:d.body.trimEnd()}),d={role:c[1].toLowerCase(),body:""};continue}d&&(d.body+=a+"\n")}return d&&b.push({...d,body:d.body.trimEnd()}),b}(f.content),abs:e}:null}async function q(a,b,c){let e=m(a,b),f=await d.promises.readFile(e,"utf8"),g=j()(f),h={...g.data,...c,updatedAt:new Date().toISOString()};for(let a of Object.keys(h))void 0===h[a]&&delete h[a];await d.promises.writeFile(e,j().stringify(g.content,h),"utf8")}async function r(a,b,c){await q(a,b,{goal:c,goalStatus:"active",goalIterations:0})}async function s(a,b){let c=m(a,b),e=await d.promises.readFile(c,"utf8"),f=j()(e).data,g=("number"==typeof f.goalIterations?f.goalIterations:0)+1;return await q(a,b,{goalIterations:g}),g}async function t(a,b,c="abandoned"){await q(a,b,{goalStatus:c})}async function u(a){var b;let c=function(){let a=new Date().toISOString().slice(0,10),b=h().randomBytes(4).toString("hex");return`${a}-${b}`}(),e=new Date().toISOString(),f={id:c,title:function(a){let b=a.trim().split(/\r?\n/)[0]??"Untitled";return b.length>80?b.slice(0,77)+"…":b}(a.firstMessage),createdAt:e,updatedAt:e,...a.harness?{harness:a.harness}:{},...a.model?{model:a.model}:{},...a.language?{language:a.language}:{},...a.helperFor?{helperFor:a.helperFor}:{},...a.taskId?{taskId:a.taskId}:{},...a.dispatchedFromDispatcher?{dispatchedFromDispatcher:!0}:{}};return await d.promises.mkdir(l(a.root),{recursive:!0}),await d.promises.writeFile(m(a.root,c),(b=f,j().stringify("",b)),"utf8"),{meta:f,messages:[],abs:m(a.root,c)}}async function v(a,b){let c=n(b);if(!c)throw Error(`Invalid topic id: ${b}`);let d=m(a,c),e=f().join(l(a),`${c}.events.jsonl`);return{removedMd:await w(d),removedEvents:await w(e)}}async function w(a){try{return await d.promises.unlink(a),!0}catch(a){if("object"==typeof a&&null!==a&&"code"in a&&"ENOENT"===a.code)return!1;throw a}}},57972:(a,b,c)=>{c.d(b,{t:()=>g});let d=[{name:"system-tag",re:/<\s*\/?\s*system\b[^>]*>/i},{name:"user-tag",re:/<\s*\/?\s*user\b[^>]*>/i},{name:"assistant-tag",re:/<\s*\/?\s*assistant\b[^>]*>/i},{name:"inst-marker",re:/\[\s*\/?\s*INST\s*\]/i},{name:"im-start",re:/<\|im_(?:start|end)\|>/},{name:"reflex-marker",re:/<<\s*reflex\s*:/i}],e=[{name:"sk-token",re:/\bsk-[A-Za-z0-9_-]{20,}\b/},{name:"github-token",re:/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{30,}\b/},{name:"aws-key",re:/\bAKIA[0-9A-Z]{16}\b/},{name:"jwt",re:/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/},{name:"slack-token",re:/\bxox[abposr]-[A-Za-z0-9-]{10,}\b/},{name:"private-key",re:/-----BEGIN [A-Z ]*PRIVATE KEY-----/}],f=RegExp("[\\u00AD\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF]|[\\u{E0000}-\\u{E007F}]","u");function g(a,b={}){let c=a??"";if(!c.trim())return{ok:!1,error:"empty content"};for(let{name:a,re:b}of d)if(b.test(c))return{ok:!1,error:`looks like a prompt-injection payload (${a}). Strip the wrapper and try again.`};for(let{name:a,re:b}of e)if(b.test(c))return{ok:!1,error:`looks like a credential (${a}). Memory is not a secret store — save the credential through Reflex secrets instead.`};if(f.test(c))return{ok:!1,error:"contains invisible / bidi unicode characters. Paste as plain text and try again."};if(!b.skipDupCheck&&b.existing){let a=new Set(b.existing.split("\n").map(a=>a.trim()).filter(Boolean)),d=c.split("\n").map(a=>a.trim()).filter(Boolean);if(d.length>0&&d.every(b=>a.has(b)))return{ok:!1,error:"every line is already present — nothing to add."}}return{ok:!0}}},59835:(a,b,c)=>{c.d(b,{attachRemote:()=>k,generateImage:()=>h,searchImages:()=>i});var d=c(19219),e=c(43180);async function f(a){let b=await (0,e.CG)("gemini");if(!b)throw Error("Gemini API key is not configured. Open Settings → Gemini.");let c=[{text:a.prompt}];for(let b of a.referenceImageUrls??[]){let a=await g(b);a&&c.push({inlineData:a})}let f={contents:[{role:"user",parts:c}]};a.aspectRatio&&(f.generationConfig={imageConfig:{aspectRatio:a.aspectRatio}});let h=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent?key=${encodeURIComponent(b)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!h.ok){let a=await h.text().catch(()=>"");throw Error(`Gemini image API ${h.status}: ${a.slice(0,400)}`)}let i=await h.json(),j=function(a){for(let b of a.candidates??[])for(let a of b.content?.parts??[]){let b=a.inlineData;if(b?.data&&b.mimeType?.startsWith("image/"))return{data:b.data,mime:b.mimeType}}return null}(i);if(!j){let a=i?.candidates?.[0]?.finishReason??"no image returned",b=i?.candidates?.[0]?.content?.parts?.map(a=>a.text).filter(Boolean).join(" ")?.slice(0,300);throw Error(`Gemini returned a non-image response (${a})${b?": "+b:""}`)}let k=Buffer.from(j.data,"base64");return(0,d.YN)(a.rootId,k,j.mime)}async function g(a){try{let b=await fetch(a,{redirect:"follow"});if(!b.ok)return null;let c=b.headers.get("content-type")?.split(";")[0]?.trim()??"";if(!c.startsWith("image/"))return null;let d=await b.arrayBuffer();return{data:Buffer.from(d).toString("base64"),mimeType:c}}catch{return null}}async function h(a){let b,d=a.provider??"gemini";if("gemini"===d)b=await f({rootId:a.rootId,prompt:a.prompt,...a.aspectRatio?{aspectRatio:a.aspectRatio}:{},...a.referenceImageUrls?{referenceImageUrls:a.referenceImageUrls}:{}});else if("codex"===d){let d=await c.e(6216).then(c.bind(c,76216));b=await d.generateWithCodex({rootId:a.rootId,prompt:a.prompt,...a.size?{size:a.size}:{}})}else throw Error(`unknown image provider: ${d}`);return{urlPath:b.urlPath,sha:b.sha,mime:b.mime,size:b.size,provider:d}}async function i(a){let b=Math.max(1,Math.min(24,a.count??12)),d=a.provider??await j();if("unsplash"===d)return(await c.e(9995).then(c.bind(c,99995))).searchUnsplash({query:a.query,count:b});if("pexels"===d)return(await c.e(9842).then(c.bind(c,39842))).searchPexels({query:a.query,count:b});if("brave"===d)return(await Promise.all([c.e(9631),c.e(2433)]).then(c.bind(c,42433))).searchBrave({query:a.query,count:b});throw Error(`unknown image search provider: ${d}`)}async function j(){let{hasApiKey:a}=await Promise.resolve().then(c.bind(c,43180)),{resolveBraveKey:b}=await Promise.all([c.e(9631),c.e(2433)]).then(c.bind(c,42433));return await b()?"brave":await a("unsplash")?"unsplash":await a("pexels")?"pexels":"brave"}async function k(a){return(0,d.fH)(a.rootId,a.sourceUrl)}},61088:(a,b,c)=>{c.d(b,{He:()=>o,Nb:()=>s,Tf:()=>l,dt:()=>n,listCodexModels:()=>q});var d=c(16435),e=c(73024),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(31421);let k=null;function l(){return k||(k=new d.U),k}let m=null;async function n(){return m||(m=(async()=>{let a=process.env.CODEX_HOME||i().join(g().homedir(),".codex"),b=i().join(a,"skills",".system","imagegen"),c=i().join(b,"SKILL.md");try{await e.promises.access(c);return}catch{}let d=i().join(process.cwd(),"lib","server","codex","skills","imagegen","SKILL.md");try{await e.promises.mkdir(b,{recursive:!0}),await e.promises.copyFile(d,c)}catch(a){console.warn("Failed to install Reflex imagegen skill into $CODEX_HOME:",a instanceof Error?a.message:a)}})())}function o(){let a=process.env.CODEX_HOME||i().join(g().homedir(),".codex");return i().join(a,"generated_images")}let p=null;async function q(a={}){if(!a.force&&p&&Date.now()-p.at<6e4)return p.models;let b=await r();return p={at:Date.now(),models:b},b}async function r(){return new Promise((a,b)=>{let c=(0,j.spawn)("codex",["app-server"],{stdio:["pipe","pipe","pipe"]}),d="",e=!1,f=()=>{try{c.kill("SIGTERM")}catch{}},g=setTimeout(()=>{e||(e=!0,f(),b(Error("codex app-server model/list timed out")))},1e4);c.on("error",a=>{e||(e=!0,clearTimeout(g),b(a))}),c.stdout.on("data",b=>{let c=(d+=b.toString("utf8")).indexOf("\n");for(;c>=0;){let b=d.slice(0,c).trim();if(d=d.slice(c+1),b.length>0)try{let c=JSON.parse(b);if(2===c.id&&c.result&&Array.isArray(c.result.data)){let b=[];for(let a of c.result.data)"string"==typeof a?.id&&b.push({id:a.id,displayName:"string"==typeof a.displayName?a.displayName:a.id,description:"string"==typeof a.description?a.description:"",hidden:!0===a.hidden,isDefault:!0===a.isDefault});if(!e){e=!0,clearTimeout(g),f(),a(b);return}}}catch{}c=d.indexOf("\n")}}),c.stderr.on("data",()=>{}),c.stdin.write(JSON.stringify({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"reflex",title:"Reflex",version:"0.0.0"},capabilities:{}}})+"\n"),c.stdin.write(JSON.stringify({jsonrpc:"2.0",method:"initialized",params:{}})+"\n"),c.stdin.write(JSON.stringify({jsonrpc:"2.0",id:2,method:"model/list",params:{}})+"\n"),c.stdin.end()})}async function s(a){if(!a)return;let b=process.env.CODEX_HOME||i().join(g().homedir(),".codex"),c=i().join(b,"sessions"),d=new Date;for(let b of[-1,0,1]){let f,g=new Date(d);g.setDate(g.getDate()+b);let h=i().join(c,String(g.getFullYear()),String(g.getMonth()+1).padStart(2,"0"),String(g.getDate()).padStart(2,"0"));try{f=await e.promises.readdir(h)}catch{continue}for(let b of f)b.includes(a)&&await e.promises.unlink(i().join(h,b)).catch(()=>{})}}},61992:(a,b,c)=>{c.d(b,{M:()=>k});var d=c(76760),e=c.n(d),f=c(73024),g=c(29163);let h={analyze:`You are populating a local knowledge base (KB) for the directory:
290
+ `,e=e.slice(d.coveredCount))}return(0,m.Y)(e,{summaryPrefix:f})}d()}catch(a){d(a)}})},43180:(a,b,c)=>{c.d(b,{$L:()=>k,CG:()=>l,ND:()=>o,Pc:()=>n,hasApiKey:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(29163),h=c(32068);let i=f().join((0,g._)(),"api-keys");function j(a){return f().join(i,`${a}.json`)}async function k(a){try{let b=await d.promises.readFile(j(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.apiKey||0===c.apiKey.length)return null;return{apiKey:c.apiKey,..."string"==typeof c.model?{model:c.model}:{},..."string"==typeof c.videoModel?{videoModel:c.videoModel}:{},updatedAt:"string"==typeof c.updatedAt?c.updatedAt:new Date().toISOString()}}catch{return null}}async function l(a){let b=await k(a);return b?.apiKey??null}async function m(a,b){await (0,h.An)(j(a),b,{mode:384})}async function n(a,b){let c=await k(a);await m(a,{...c??{},apiKey:b.trim(),updatedAt:new Date().toISOString()})}async function o(a,b){let c=await k(a);if(!c)throw Error(`API key for "${a}" is not saved`);let d={apiKey:c.apiKey,updatedAt:new Date().toISOString()},e=void 0===b.model?c.model:b.model??void 0,f=void 0===b.videoModel?c.videoModel:b.videoModel??void 0;e&&(d.model=e),f&&(d.videoModel=f),await m(a,d)}async function p(a){return await l(a)!==null}},47423:(a,b,c)=>{c.d(b,{E:()=>e});var d=c(17640);async function e(a){let b=(await (0,d.loadSettings)()).harnesses.ollama.baseUrl.replace(/\/$/,""),c=await fetch(`${b}/api/generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a.args.model,system:a.args.systemPrompt,prompt:a.args.prompt,stream:!0})});if(!c.ok||!c.body)throw Error(`Ollama /api/generate HTTP ${c.status}`);let e=c.body.getReader(),f=new TextDecoder,g="";for(;;){let b,{done:c,value:d}=await e.read();if(c)break;for(g+=f.decode(d,{stream:!0});(b=g.indexOf("\n"))>=0;){let c=g.slice(0,b).trim();if(g=g.slice(b+1),c)try{let b=JSON.parse(c);if(b.error)throw Error(b.error);b.response&&await a.manager.emit({type:"assistant-delta",text:b.response,agentId:a.meta.id,ts:new Date().toISOString(),seq:0})}catch{}}}}},49353:(a,b,c)=>{c.d(b,{j:()=>k});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474),j=c(67184);async function k(a){var b;let{rootPath:c,directive:e,provenance:g}=a,k=(0,j.Xe)(e.kind)||"note",m=new Date().toISOString().slice(0,10),n=((b=e.date)&&/^\d{4}-\d{2}-\d{2}$/.test(b)?b:null)??m,o=e.slug&&e.slug.trim()?e.slug:e.title,p=(0,j.Xe)(o)||"entry",q=`${n}-${p}`,r=f().join((0,i.FF)(c),k);await d.promises.mkdir(r,{recursive:!0});let s=await l(r,q,".md"),t={title:e.title,kind:k,date:n,version:1,...e.meta&&"object"==typeof e.meta?e.meta:{}};g&&(t.createdBy=`${g.kind}:${g.id}${g.version?"@"+g.version:""}`);let u=(e.body??"").replace(/\r\n/g,"\n").trimEnd(),v=h().stringify(u?u+"\n":"",t);await d.promises.writeFile(s,v,"utf8");let w=f().relative((0,i.FF)(c),s).split(f().sep).join("/");return{kind:k,title:e.title,relPath:w,absPath:s}}async function l(a,b,c){let d=f().join(a,b+c),e=1;for(;await m(d);){if(e>99){d=f().join(a,`${b}-${Date.now().toString(36)}${c}`);break}d=f().join(a,`${b}-${++e}${c}`)}return d}async function m(a){try{return await d.promises.access(a),!0}catch{return!1}}},53526:(a,b,c)=>{c.d(b,{Y:()=>d});function d(a,b={}){let c=[],e=null,f=()=>{e&&(c.push(`### ${e.role}
291
+ ${e.text.trim()}`),e=null)};for(let b of a)"user-message"===b.type?(f(),e={role:"user",text:b.text},f()):"assistant-delta"===b.type?(e&&"assistant"===e.role||(f(),e={role:"assistant",text:""}),e.text+=b.text):("turn-end"===b.type||"agent-end"===b.type)&&f();return f(),(b.summaryPrefix??"")+c.join("\n\n")}},57972:(a,b,c)=>{c.d(b,{t:()=>g});let d=[{name:"system-tag",re:/<\s*\/?\s*system\b[^>]*>/i},{name:"user-tag",re:/<\s*\/?\s*user\b[^>]*>/i},{name:"assistant-tag",re:/<\s*\/?\s*assistant\b[^>]*>/i},{name:"inst-marker",re:/\[\s*\/?\s*INST\s*\]/i},{name:"im-start",re:/<\|im_(?:start|end)\|>/},{name:"reflex-marker",re:/<<\s*reflex\s*:/i}],e=[{name:"sk-token",re:/\bsk-[A-Za-z0-9_-]{20,}\b/},{name:"github-token",re:/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{30,}\b/},{name:"aws-key",re:/\bAKIA[0-9A-Z]{16}\b/},{name:"jwt",re:/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/},{name:"slack-token",re:/\bxox[abposr]-[A-Za-z0-9-]{10,}\b/},{name:"private-key",re:/-----BEGIN [A-Z ]*PRIVATE KEY-----/}],f=RegExp("[\\u00AD\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF]|[\\u{E0000}-\\u{E007F}]","u");function g(a,b={}){let c=a??"";if(!c.trim())return{ok:!1,error:"empty content"};for(let{name:a,re:b}of d)if(b.test(c))return{ok:!1,error:`looks like a prompt-injection payload (${a}). Strip the wrapper and try again.`};for(let{name:a,re:b}of e)if(b.test(c))return{ok:!1,error:`looks like a credential (${a}). Memory is not a secret store — save the credential through Reflex secrets instead.`};if(f.test(c))return{ok:!1,error:"contains invisible / bidi unicode characters. Paste as plain text and try again."};if(!b.skipDupCheck&&b.existing){let a=new Set(b.existing.split("\n").map(a=>a.trim()).filter(Boolean)),d=c.split("\n").map(a=>a.trim()).filter(Boolean);if(d.length>0&&d.every(b=>a.has(b)))return{ok:!1,error:"every line is already present — nothing to add."}}return{ok:!0}}},59835:(a,b,c)=>{c.d(b,{attachRemote:()=>k,generateImage:()=>h,searchImages:()=>i});var d=c(19219),e=c(43180);async function f(a){let b=await (0,e.CG)("gemini");if(!b)throw Error("Gemini API key is not configured. Open Settings → Gemini.");let c=[{text:a.prompt}];for(let b of a.referenceImageUrls??[]){let a=await g(b);a&&c.push({inlineData:a})}let f={contents:[{role:"user",parts:c}]};a.aspectRatio&&(f.generationConfig={imageConfig:{aspectRatio:a.aspectRatio}});let h=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent?key=${encodeURIComponent(b)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!h.ok){let a=await h.text().catch(()=>"");throw Error(`Gemini image API ${h.status}: ${a.slice(0,400)}`)}let i=await h.json(),j=function(a){for(let b of a.candidates??[])for(let a of b.content?.parts??[]){let b=a.inlineData;if(b?.data&&b.mimeType?.startsWith("image/"))return{data:b.data,mime:b.mimeType}}return null}(i);if(!j){let a=i?.candidates?.[0]?.finishReason??"no image returned",b=i?.candidates?.[0]?.content?.parts?.map(a=>a.text).filter(Boolean).join(" ")?.slice(0,300);throw Error(`Gemini returned a non-image response (${a})${b?": "+b:""}`)}let k=Buffer.from(j.data,"base64");return(0,d.YN)(a.rootId,k,j.mime)}async function g(a){try{let b=await fetch(a,{redirect:"follow"});if(!b.ok)return null;let c=b.headers.get("content-type")?.split(";")[0]?.trim()??"";if(!c.startsWith("image/"))return null;let d=await b.arrayBuffer();return{data:Buffer.from(d).toString("base64"),mimeType:c}}catch{return null}}async function h(a){let b,d=a.provider??"gemini";if("gemini"===d)b=await f({rootId:a.rootId,prompt:a.prompt,...a.aspectRatio?{aspectRatio:a.aspectRatio}:{},...a.referenceImageUrls?{referenceImageUrls:a.referenceImageUrls}:{}});else if("codex"===d){let d=await c.e(6216).then(c.bind(c,76216));b=await d.generateWithCodex({rootId:a.rootId,prompt:a.prompt,...a.size?{size:a.size}:{}})}else throw Error(`unknown image provider: ${d}`);return{urlPath:b.urlPath,sha:b.sha,mime:b.mime,size:b.size,provider:d}}async function i(a){let b=Math.max(1,Math.min(24,a.count??12)),d=a.provider??await j();if("unsplash"===d)return(await c.e(9995).then(c.bind(c,99995))).searchUnsplash({query:a.query,count:b});if("pexels"===d)return(await c.e(9842).then(c.bind(c,39842))).searchPexels({query:a.query,count:b});if("brave"===d)return(await c.e(2433).then(c.bind(c,42433))).searchBrave({query:a.query,count:b});throw Error(`unknown image search provider: ${d}`)}async function j(){let{hasApiKey:a}=await Promise.resolve().then(c.bind(c,43180)),{resolveBraveKey:b}=await c.e(2433).then(c.bind(c,42433));return await b()?"brave":await a("unsplash")?"unsplash":await a("pexels")?"pexels":"brave"}async function k(a){return(0,d.fH)(a.rootId,a.sourceUrl)}},61088:(a,b,c)=>{c.d(b,{He:()=>o,Nb:()=>s,Tf:()=>l,dt:()=>n,listCodexModels:()=>q});var d=c(16435),e=c(73024),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(31421);let k=null;function l(){return k||(k=new d.U),k}let m=null;async function n(){return m||(m=(async()=>{let a=process.env.CODEX_HOME||i().join(g().homedir(),".codex"),b=i().join(a,"skills",".system","imagegen"),c=i().join(b,"SKILL.md");try{await e.promises.access(c);return}catch{}let d=i().join(process.cwd(),"lib","server","codex","skills","imagegen","SKILL.md");try{await e.promises.mkdir(b,{recursive:!0}),await e.promises.copyFile(d,c)}catch(a){console.warn("Failed to install Reflex imagegen skill into $CODEX_HOME:",a instanceof Error?a.message:a)}})())}function o(){let a=process.env.CODEX_HOME||i().join(g().homedir(),".codex");return i().join(a,"generated_images")}let p=null;async function q(a={}){if(!a.force&&p&&Date.now()-p.at<6e4)return p.models;let b=await r();return p={at:Date.now(),models:b},b}async function r(){return new Promise((a,b)=>{let c=(0,j.spawn)("codex",["app-server"],{stdio:["pipe","pipe","pipe"]}),d="",e=!1,f=()=>{try{c.kill("SIGTERM")}catch{}},g=setTimeout(()=>{e||(e=!0,f(),b(Error("codex app-server model/list timed out")))},1e4);c.on("error",a=>{e||(e=!0,clearTimeout(g),b(a))}),c.stdout.on("data",b=>{let c=(d+=b.toString("utf8")).indexOf("\n");for(;c>=0;){let b=d.slice(0,c).trim();if(d=d.slice(c+1),b.length>0)try{let c=JSON.parse(b);if(2===c.id&&c.result&&Array.isArray(c.result.data)){let b=[];for(let a of c.result.data)"string"==typeof a?.id&&b.push({id:a.id,displayName:"string"==typeof a.displayName?a.displayName:a.id,description:"string"==typeof a.description?a.description:"",hidden:!0===a.hidden,isDefault:!0===a.isDefault});if(!e){e=!0,clearTimeout(g),f(),a(b);return}}}catch{}c=d.indexOf("\n")}}),c.stderr.on("data",()=>{}),c.stdin.write(JSON.stringify({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"reflex",title:"Reflex",version:"0.0.0"},capabilities:{}}})+"\n"),c.stdin.write(JSON.stringify({jsonrpc:"2.0",method:"initialized",params:{}})+"\n"),c.stdin.write(JSON.stringify({jsonrpc:"2.0",id:2,method:"model/list",params:{}})+"\n"),c.stdin.end()})}async function s(a){if(!a)return;let b=process.env.CODEX_HOME||i().join(g().homedir(),".codex"),c=i().join(b,"sessions"),d=new Date;for(let b of[-1,0,1]){let f,g=new Date(d);g.setDate(g.getDate()+b);let h=i().join(c,String(g.getFullYear()),String(g.getMonth()+1).padStart(2,"0"),String(g.getDate()).padStart(2,"0"));try{f=await e.promises.readdir(h)}catch{continue}for(let b of f)b.includes(a)&&await e.promises.unlink(i().join(h,b)).catch(()=>{})}}},61992:(a,b,c)=>{c.d(b,{M:()=>k});var d=c(76760),e=c.n(d),f=c(73024),g=c(29163);let h={analyze:`You are populating a local knowledge base (KB) for the directory:
293
292
  {{scope}}
294
293
 
295
294
  Project root: {{root}}
@@ -795,8 +794,8 @@ Rules:
795
794
  - \`type\` defaults to \`feature\`. Match the obvious case: regression → \`bug\`, investigate-before-decide → \`research\`, write-some-words-down → \`idea\`.
796
795
  - Choose \`status: "backlog"\` for newly-captured ideas (default). Use \`ready\` only if the user explicitly said "do this next".
797
796
  - Cite what the user said in \`body\` so it makes sense out of context.
798
- - Don't open more than 5 tasks in a single turn; you're noting, not firehosing.`,'## Building an app / tool / integration — utility first\n\nWhen the user asks to build, make, or release an app, tool, bot, integration, dashboard, form, or service, FIRST decide what KIND of thing it is — before asking about language, framework, or hosting:\n\n- **Reflex utility** (the default for anything that extends Reflex or lives in this ecosystem) — a mini-app that runs INSIDE Reflex: a React/TypeScript `ui.tsx` in an iframe, talking to the world only through the Host API (`reflex.*`) with manifest permissions. There is NO separate backend to host and NO deploy step — installing the utility IS the deploy. Utilities are ALWAYS TypeScript, so never ask "which language?".\n- **Standalone project** — a normal codebase the user will run/host themselves (a server, a CLI, a website). Only here do language/framework/deploy questions make sense.\n\nRouting signals that mean **utility**: the project name starts with `rflx-`/`reflex-`, it lives under a `reflex-*` parent, the user says "utility"/"mini-app"/"плагин"/"виджет", or the thing is meant to surface inside Reflex (a panel, a card, a GitHub/Calendar/etc. integration the user will open in the Mini-apps screen).\n\nIf those signals are present, proceed as a utility — gather the missing essentials (what it does, which data/permissions, any secrets) and emit `<<reflex:utility>>`. Do NOT ask about stack or deployment. If it\'s genuinely unclear which kind it is, ask THAT question first via `<<reflex:question>>` ("Reflex utility that runs inside Reflex, or a standalone app you\'ll host yourself?") — don\'t jump to language selection.','## Reaching the user outside the app\n\nIf a long-running or scheduled task finishes, or something needs the user\'s attention and they likely don\'t have Reflex open, you can push a short message to their configured channels (Telegram, etc.):\n\n```\n<<reflex:notify>>{"title":"Digest ready","body":"3 new items in your morning digest","link":"optional url"}<</reflex:notify>>\n```\n\n- `body` is required; `title` and `link` are optional.\n- Use sparingly — for completions, alerts, and things worth interrupting for. Not for every reply (the user already sees those in chat).\n- No-op if the user hasn\'t set up a channel, so it\'s safe to emit when warranted.'].join("\n\n")}},64011:(a,b,c)=>{c.d(b,{P:()=>m});var d=c(14126);let e=d.Ik({template:d.Yj().default("")}),f=d.Ik({url:d.Yj().url("url must be a valid URL"),method:d.k5(["GET","POST","PUT","PATCH","DELETE"]).default("GET"),headers:d.KC([d.g1(d.Yj(),d.Yj()),d.Yj(),d.Vx()]).optional(),body:d.KC([d.Yj(),d.g1(d.Yj(),d.L5()),d.Vx()]).optional()}),g=d.Ik({url:d.Yj().url("url must be a valid URL")}),h=d.Ik({prompt:d.Yj().min(1,"prompt is required")}),i=d.Ik({kind:d.Yj().min(1).default("note"),title:d.Yj().default(""),body:d.Yj().default("")}),j=d.Ik({utilityId:d.Yj().min(1,"utilityId is required"),utilityScope:d.k5(["global","project"]).default("global"),actionName:d.Yj().min(1,"actionName is required"),args:d.L5().optional()}),k=d.Ik({prompt:d.Yj().min(1,"prompt is required"),provider:d.k5(["gemini","codex"]).optional(),size:d.Yj().optional(),aspectRatio:d.Yj().optional()}),l={"text-template":e,"http-request":f,"web-fetch":g,"ask-agent":h,"kb-write":i,"utility-call":j,"image-generate":k,"image-search":d.Ik({query:d.Yj().min(1,"query is required"),provider:d.k5(["unsplash","pexels","brave"]).optional(),count:d.KC([d.Yj(),d.ai()]).optional()}),notify:d.Ik({body:d.Yj().default(""),text:d.Yj().optional(),title:d.Yj().optional(),link:d.Yj().optional()})};function m(a,b){let c=l[a];return c?c.parse(b):b}},64163:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{runHeadlessAgent:()=>l});var e=c(16909),f=c(31900),g=c(74342),h=c(56843),i=c(17640),j=c(24576),k=a([e,f]);async function l(a){let b=await (0,j.getRoot)(a.rootId);if(!b)throw Error(`runHeadlessAgent: root not found: ${a.rootId}`);let c=await (0,i.loadSettings)(),d=c.assignments.chat,k=await (0,h.createTopic)({root:b.path,firstMessage:a.label??"[headless agent run]",harness:a.harness??d.harness,model:a.model??d.model,language:a.language??c.language}),l=!1;try{let c=await (0,f.startOrchestratorTurn)({rootId:a.rootId,topicId:k.meta.id,message:a.prompt,attachments:a.attachments??[],...a.harness?{harness:a.harness}:{},...a.model?{model:a.model}:{}});if("error"in c)throw Error(c.error);let d=Date.now()+(a.timeoutMs??3e5);for(await m(400);Date.now()<d&&e.z.isActive(k.meta.id);)await m(400);e.z.isActive(k.meta.id)&&(l=!0),await m(400);let h=await (0,g.readEvents)(b.path,k.meta.id),i=h.filter(a=>"assistant-delta"===a.type).map(a=>a.text).join("").trim();if(!i){let b=h.filter(a=>"error"===a.type).map(a=>a.message).filter(Boolean);if(b.length>0)throw Error(`Agent finished with errors: ${b.slice(0,3).join(" \xb7 ")}`);let c=h.filter(a=>"system"===a.type).map(a=>a.text).filter(Boolean);if(c.length>0)return{text:c.join("\n"),topicId:k.meta.id,timedOut:l};if(l)throw Error(`Agent did not respond within ${Math.round((a.timeoutMs??3e5)/1e3)}s (timeout)`);throw Error("Agent finished without producing any text — perhaps no chat engine is configured in Settings.")}return{text:i,topicId:k.meta.id,timedOut:l}}finally{try{await e.z.stopTopic(k.meta.id)}catch{}try{await (0,h.do)(b.path,k.meta.id)}catch{}}}function m(a){return new Promise(b=>setTimeout(b,a))}[e,f]=k.then?(await k)():k,d()}catch(a){d(a)}})},74342:(a,b,c)=>{c.d(b,{R:()=>h,appendEvent:()=>i,nextSeq:()=>k,readEvents:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(13474);function h(a,b){return f().join((0,g.FF)(a),"topics",`${b}.events.jsonl`)}async function i(a,b,c){let e=h(a,b);await d.promises.mkdir(f().dirname(e),{recursive:!0}),await d.promises.appendFile(e,JSON.stringify(c)+"\n","utf8")}async function j(a,b){let c,e=h(a,b);try{c=await d.promises.readFile(e,"utf8")}catch(a){var f;if("object"==typeof(f=a)&&null!==f&&"code"in f&&"ENOENT"===f.code)return[];throw a}let g=[];for(let a of c.split(/\r?\n/))if(a.trim())try{g.push(JSON.parse(a))}catch{}return g}async function k(a,b){let c=await j(a,b);return 0===c.length?0:c[c.length-1].seq+1}},75207:(a,b,c)=>{c.d(b,{Hi:()=>e,KT:()=>i,PN:()=>f,Yj:()=>g,ak:()=>j,ci:()=>d,kJ:()=>h});let d=["feature","bug","refactor","docs","chore","research","review","call","idea"],e=["backlog","ready","in-progress","review","done","blocked"],f=["low","normal","high"],g={feature:{isCode:!0},bug:{isCode:!0,defaultSkill:"deep-research"},refactor:{isCode:!0},docs:{isCode:!0},chore:{isCode:!0},research:{isCode:!1,defaultSkill:"deep-research"},review:{isCode:!0},call:{isCode:!1},idea:{isCode:!1}};function h(a){return d.includes(a)}function i(a){return e.includes(a)}function j(a){return f.includes(a)}},79178:(a,b,c)=>{c.d(b,{V:()=>e});let d=/\{\{\s*([^{}\s][^{}]*?)\s*\}\}/g;function e(a,b){return function a(b,c){if("string"==typeof b)return b.replace(d,(a,b)=>(function(a){if(null==a)return"";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);try{return JSON.stringify(a)}catch{return String(a)}})(function(a,b){if("prev"===a)return b.prev;if(a.startsWith("workflow.")){let c=a.slice(9);return b.workflow[c]}if(a.startsWith("input."))return f(b.input,a.slice(6));if(a.startsWith("input"))return b.input;if(a.startsWith("steps.")){let[c,...d]=a.slice(6).split(".");if(!c)return;let e=b.steps[c];if(!e)return;if(0===d.length||1===d.length&&"output"===d[0])return e.output;if("output"===d[0])return f(e.output,d.slice(1).join("."))}}(b.trim(),c)));if(Array.isArray(b))return b.map(b=>a(b,c));if(b&&"object"==typeof b){let d={};for(let[e,f]of Object.entries(b))d[e]=a(f,c);return d}return b}(a,b)}function f(a,b){if(!b)return a;let c=b.split("."),d=a;for(let a of c){if(null==d||"object"!=typeof d)return;d=d[a]}return d}},80958:(a,b,c)=>{c.d(b,{Tf:()=>j,UV:()=>h,a9:()=>g,cs:()=>d,h0:()=>e,lh:()=>f,qL:()=>i});let d=["PERSONA","VALUES","INTERESTS","GOALS","RELATIONSHIPS","ROUTINES","AVOID","RECENT"],e={PERSONA:20,VALUES:15,INTERESTS:20,GOALS:20,RELATIONSHIPS:20,ROUTINES:15,AVOID:15,RECENT:30},f={PERSONA:"Name, location, role, workplace, family, mother tongue",VALUES:"Operating principles, how the user prefers to be addressed",INTERESTS:"Active topics, hobbies, learning targets",GOALS:"Life and work goals (not per-task /goal)",RELATIONSHIPS:"Key people: name, role, last shared context",ROUTINES:"Daily and weekly rhythms (wake, work, exercise)",AVOID:'Explicit "don\'t suggest" — topics, words, people',RECENT:"Rolling summary of the last ~7 days (auto-generated)"},g={PERSONA:1,VALUES:1,INTERESTS:2,GOALS:2,RELATIONSHIPS:2,ROUTINES:2,AVOID:2,RECENT:3};function h(a){return d.includes(a)}function i(a){return"global"===a||"project"===a}function j(a){return"append"===a||"replace"===a||"remove"===a}},88124:(a,b,c)=>{c.d(b,{Jc:()=>p,McpConfigSchema:()=>l,callTool:()=>r,connectAndListTools:()=>q});var d=c(43444),e=c(37567),f=c(1960),g=c(66133),h=c(14126);let i=h.Ik({transport:h.eu("stdio"),command:h.Yj().min(1),args:h.YO(h.Yj()).default([]),env:h.g1(h.Yj(),h.Yj()).default({}),cwd:h.Yj().optional()}),j=h.Ik({transport:h.eu("http"),url:h.Yj().url(),headers:h.g1(h.Yj(),h.Yj()).default({})}),k=h.Ik({transport:h.eu("sse"),url:h.Yj().url(),headers:h.g1(h.Yj(),h.Yj()).default({})}),l=h.gM("transport",[i,j,k]),m={name:"reflex-utility-bridge",version:"0.1.0"};async function n(a){let b=new d.K(m);if("stdio"===a.transport){let c=await p(a.env),d=new e.oQ({command:a.command,args:a.args,env:{...process.env,...c},cwd:a.cwd});return await b.connect(d),{client:b,close:()=>b.close()}}if("http"===a.transport){let c=await p(a.headers),d=new f.j(new URL(a.url),{requestInit:{headers:c}});return await b.connect(d),{client:b,close:()=>b.close()}}let c=await p(a.headers),h=new g.A(new URL(a.url),{requestInit:{headers:c}});return await b.connect(h),{client:b,close:()=>b.close()}}let o=/\$oauth:([a-z][a-z0-9-]*)/g;async function p(a){let b={};for(let[d,e]of Object.entries(a)){if("string"!=typeof e||!e.includes("$oauth:")){b[d]=e;continue}let a=new Set;e.replace(o,(b,c)=>(a.add(c),""));let f=e,{getAccessToken:g}=await c.e(2503).then(c.bind(c,82503)),{isOAuthProviderId:h}=await c.e(3657).then(c.bind(c,63657));for(let b of a){if(!h(b))throw Error(`unknown OAuth provider in placeholder: ${b}`);let a=await g(b);f=f.replace(RegExp(`\\$oauth:${b}\\b`,"g"),a)}b[d]=f}return b}async function q(a){let{client:b,close:c}=await n(a);try{let a=b.getServerVersion(),{tools:c}=await b.listTools();return{name:a?.name,version:a?.version,tools:c.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema}))}}finally{await c().catch(()=>{})}}async function r(a,b,c){let{client:d,close:e}=await n(a);try{let a=await d.callTool({name:b,arguments:c});return{isError:"boolean"==typeof a.isError?a.isError:void 0,content:a.content}}finally{await e().catch(()=>{})}}},91147:(a,b,c)=>{c.d(b,{_:()=>k});var d=c(73024),e=c(48161),f=c.n(e),g=c(76760),h=c.n(g),i=c(5243),j=c(88124);async function k(a){let b=await (0,i.listMcpServers)();if(0===b.length)return null;let c={};for(let a of b)if("stdio"===a.config.transport){let b=await (0,j.Jc)(a.config.env);c[a.id]={command:a.config.command,args:a.config.args,env:b}}else if("http"===a.config.transport){let b=await (0,j.Jc)(a.config.headers);c[a.id]={type:"http",url:a.config.url,...Object.keys(b).length>0?{headers:b}:{}}}else{let b=await (0,j.Jc)(a.config.headers);c[a.id]={type:"sse",url:a.config.url,...Object.keys(b).length>0?{headers:b}:{}}}let e=await d.promises.mkdtemp(h().join(f().tmpdir(),`reflex-mcp-${a}-`)),g=h().join(e,"mcp.json");return await d.promises.writeFile(g,JSON.stringify({mcpServers:c},null,2),"utf8"),{path:g,serverIds:b.map(a=>a.id),cleanup:async()=>{try{await d.promises.rm(e,{recursive:!0,force:!0})}catch{}}}}},96931:(a,b,c)=>{c.d(b,{R:()=>f});var d=c(59835),e=c(24576);async function f(a){let b=function(a){let b=a.trim();if(b.startsWith("{")&&b.endsWith("}"))try{let a=JSON.parse(b),c={prompt:"string"==typeof a.prompt&&a.prompt.trim().length>0?a.prompt:b};return("gemini"===a.provider||"codex"===a.provider)&&(c.provider=a.provider),"string"==typeof a.size&&(c.size=a.size),"string"==typeof a.aspectRatio&&(c.aspectRatio=a.aspectRatio),"string"==typeof a.alt&&(c.alt=a.alt),c}catch{}return{prompt:b}}(a.args.prompt),c=(0,e.rootId)(a.args.rootPath);try{var f;let e=await (0,d.generateImage)({rootId:c,prompt:b.prompt,...b.provider?{provider:b.provider}:{},...b.size?{size:b.size}:{},...b.aspectRatio?{aspectRatio:b.aspectRatio}:{},...b.alt?{alt:b.alt}:{}}),g=b.alt||b.prompt,h=`![${g.replace(/[\[\]\n]/g," ").slice(0,200)}](${e.urlPath})
797
+ - Don't open more than 5 tasks in a single turn; you're noting, not firehosing.`,'## Building an app / tool / integration — utility first\n\nWhen the user asks to build, make, or release an app, tool, bot, integration, dashboard, form, or service, FIRST decide what KIND of thing it is — before asking about language, framework, or hosting:\n\n- **Reflex utility** (the default for anything that extends Reflex or lives in this ecosystem) — a mini-app that runs INSIDE Reflex: a React/TypeScript `ui.tsx` in an iframe, talking to the world only through the Host API (`reflex.*`) with manifest permissions. There is NO separate backend to host and NO deploy step — installing the utility IS the deploy. Utilities are ALWAYS TypeScript, so never ask "which language?".\n- **Standalone project** — a normal codebase the user will run/host themselves (a server, a CLI, a website). Only here do language/framework/deploy questions make sense.\n\nRouting signals that mean **utility**: the project name starts with `rflx-`/`reflex-`, it lives under a `reflex-*` parent, the user says "utility"/"mini-app"/"плагин"/"виджет", or the thing is meant to surface inside Reflex (a panel, a card, a GitHub/Calendar/etc. integration the user will open in the Mini-apps screen).\n\nIf those signals are present, proceed as a utility — gather the missing essentials (what it does, which data/permissions, any secrets) and emit `<<reflex:utility>>`. Do NOT ask about stack or deployment. If it\'s genuinely unclear which kind it is, ask THAT question first via `<<reflex:question>>` ("Reflex utility that runs inside Reflex, or a standalone app you\'ll host yourself?") — don\'t jump to language selection.','## Reaching the user outside the app\n\nIf a long-running or scheduled task finishes, or something needs the user\'s attention and they likely don\'t have Reflex open, you can push a short message to their configured channels (Telegram, etc.):\n\n```\n<<reflex:notify>>{"title":"Digest ready","body":"3 new items in your morning digest","link":"optional url"}<</reflex:notify>>\n```\n\n- `body` is required; `title` and `link` are optional.\n- Use sparingly — for completions, alerts, and things worth interrupting for. Not for every reply (the user already sees those in chat).\n- No-op if the user hasn\'t set up a channel, so it\'s safe to emit when warranted.'].join("\n\n")}},64011:(a,b,c)=>{c.d(b,{P:()=>m});var d=c(14126);let e=d.Ik({template:d.Yj().default("")}),f=d.Ik({url:d.Yj().url("url must be a valid URL"),method:d.k5(["GET","POST","PUT","PATCH","DELETE"]).default("GET"),headers:d.KC([d.g1(d.Yj(),d.Yj()),d.Yj(),d.Vx()]).optional(),body:d.KC([d.Yj(),d.g1(d.Yj(),d.L5()),d.Vx()]).optional()}),g=d.Ik({url:d.Yj().url("url must be a valid URL")}),h=d.Ik({prompt:d.Yj().min(1,"prompt is required")}),i=d.Ik({kind:d.Yj().min(1).default("note"),title:d.Yj().default(""),body:d.Yj().default("")}),j=d.Ik({utilityId:d.Yj().min(1,"utilityId is required"),utilityScope:d.k5(["global","project"]).default("global"),actionName:d.Yj().min(1,"actionName is required"),args:d.L5().optional()}),k=d.Ik({prompt:d.Yj().min(1,"prompt is required"),provider:d.k5(["gemini","codex"]).optional(),size:d.Yj().optional(),aspectRatio:d.Yj().optional()}),l={"text-template":e,"http-request":f,"web-fetch":g,"ask-agent":h,"kb-write":i,"utility-call":j,"image-generate":k,"image-search":d.Ik({query:d.Yj().min(1,"query is required"),provider:d.k5(["unsplash","pexels","brave"]).optional(),count:d.KC([d.Yj(),d.ai()]).optional()}),notify:d.Ik({body:d.Yj().default(""),text:d.Yj().optional(),title:d.Yj().optional(),link:d.Yj().optional()})};function m(a,b){let c=l[a];return c?c.parse(b):b}},64163:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{runHeadlessAgent:()=>l});var e=c(16909),f=c(31900),g=c(74342),h=c(56843),i=c(17640),j=c(24576),k=a([e,f]);async function l(a){let b=await (0,j.getRoot)(a.rootId);if(!b)throw Error(`runHeadlessAgent: root not found: ${a.rootId}`);let c=await (0,i.loadSettings)(),d=c.assignments.chat,k=await (0,h.createTopic)({root:b.path,firstMessage:a.label??"[headless agent run]",harness:a.harness??d.harness,model:a.model??d.model,language:a.language??c.language}),l=!1;try{let c=await (0,f.startOrchestratorTurn)({rootId:a.rootId,topicId:k.meta.id,message:a.prompt,attachments:a.attachments??[],...a.harness?{harness:a.harness}:{},...a.model?{model:a.model}:{}});if("error"in c)throw Error(c.error);let d=Date.now()+(a.timeoutMs??3e5);if(await m(400),e.z.isActive(k.meta.id)){let a,b=new Promise(a=>{let b=e.z.subscribeTopic(k.meta.id,c=>{("turn-end"===c.type||"agent-end"===c.type)&&(b(),a())});e.z.isActive(k.meta.id)||(b(),a())}),c=new Promise(b=>{a=setTimeout(()=>b("timeout"),Math.max(0,d-Date.now()))}),f=await Promise.race([b.then(()=>"done"),c]);a&&clearTimeout(a),"timeout"===f&&e.z.isActive(k.meta.id)&&(l=!0)}await m(400);let h=await (0,g.readEvents)(b.path,k.meta.id),i=h.filter(a=>"assistant-delta"===a.type).map(a=>a.text).join("").trim();if(!i){let b=h.filter(a=>"error"===a.type).map(a=>a.message).filter(Boolean);if(b.length>0)throw Error(`Agent finished with errors: ${b.slice(0,3).join(" \xb7 ")}`);let c=h.filter(a=>"system"===a.type).map(a=>a.text).filter(Boolean);if(c.length>0)return{text:c.join("\n"),topicId:k.meta.id,timedOut:l};if(l)throw Error(`Agent did not respond within ${Math.round((a.timeoutMs??3e5)/1e3)}s (timeout)`);throw Error("Agent finished without producing any text — perhaps no chat engine is configured in Settings.")}return{text:i,topicId:k.meta.id,timedOut:l}}finally{try{await e.z.stopTopic(k.meta.id)}catch{}try{await (0,h.do)(b.path,k.meta.id)}catch{}}}function m(a){return new Promise(b=>setTimeout(b,a))}[e,f]=k.then?(await k)():k,d()}catch(a){d(a)}})},72440:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{L:()=>j});var e=c(49353),f=c(64163),g=a([f]);f=(g.then?(await g)():g)[0];let j={"text-template":async a=>"string"==typeof a.template?a.template:"","http-request":async a=>{let b=h(a.url,"url"),c=i(a.method,"GET").toUpperCase(),d=function(a,b){if("string"!=typeof a||!a.trim())return b;try{return JSON.parse(a)}catch{return b}}(a.headers,{}),e=i(a.body,""),f={method:c,headers:d};"GET"!==c&&"HEAD"!==c&&e&&(f.body=e);let g=await fetch(b,f),j=await g.text(),k=g.headers.get("content-type")??"",l=j;if(k.includes("application/json"))try{l=JSON.parse(j)}catch{}if(!g.ok)throw Error(`HTTP ${g.status} ${g.statusText}: ${j.slice(0,200)}`);return l},"web-fetch":async a=>{let b=h(a.url,"url"),c=await fetch(b,{headers:{"User-Agent":"Reflex-Workflow/1.0"}});if(!c.ok)throw Error(`HTTP ${c.status} ${c.statusText}`);return await c.text()},"ask-agent":async(a,b)=>{let c=h(a.prompt,"prompt"),{text:d}=await (0,f.runHeadlessAgent)({rootId:b.rootId,prompt:c,label:`[workflow ${b.workflow.id}] ${b.workflow.label}`});return d},"kb-write":async(a,b)=>{let c=i(a.kind,"note"),d=i(a.title,`Workflow ${b.workflow.label}`),f=i(a.body,""),g=await (0,e.j)({rootPath:b.rootPath,directive:{kind:c,title:d,body:f}});return{kind:g.kind,title:g.title,relPath:g.relPath,absPath:g.absPath}},"image-generate":async(a,b)=>{let d=h(a.prompt,"prompt"),e="codex"===a.provider||"gemini"===a.provider?a.provider:void 0,{generateImage:f}=await Promise.resolve().then(c.bind(c,59835)),g=await f({rootId:b.rootId,prompt:d,...e?{provider:e}:{},..."string"==typeof a.size&&a.size?{size:a.size}:{},..."string"==typeof a.aspectRatio&&a.aspectRatio?{aspectRatio:a.aspectRatio}:{}});return{url:g.urlPath,sha:g.sha,size:g.size,mime:g.mime,provider:g.provider}},"image-search":async a=>{let b,d=h(a.query,"query"),e="pexels"===a.provider||"unsplash"===a.provider||"brave"===a.provider?a.provider:void 0;if("number"==typeof a.count)b=a.count;else if("string"==typeof a.count&&a.count.trim()){let c=parseInt(a.count,10);Number.isFinite(c)&&c>0&&(b=c)}let{searchImages:f}=await Promise.resolve().then(c.bind(c,59835));return{results:await f({query:d,...e?{provider:e}:{},...void 0!==b?{count:b}:{}})}},"utility-call":async(a,b)=>{let d=h(a.utilityId,"utilityId"),e=h(a.actionName,"actionName"),f="project"===a.utilityScope?"project":"global",g=a.args??{};if("string"==typeof g)try{g=g.trim()?JSON.parse(g):{}}catch(a){throw Error(`utility-call: args is not valid JSON: ${a instanceof Error?a.message:String(a)}`)}let{getUtility:i}=await Promise.resolve().then(c.bind(c,61105)),j=await i(f,d,"project"===f?b.rootId:void 0);if(!j)throw Error(`utility-call: ${f}/${d} not installed`);let k=j.manifest.serverActions.find(a=>a.name===e);if(!k)throw Error(`utility-call: ${d} has no serverAction "${e}"`);let{runServerAction:l}=await Promise.all([c.e(7300),c.e(2485),c.e(9579)]).then(c.bind(c,29579));return l({utility:j,action:k,args:g,parentCorrelationId:`workflow:${b.workflow.id}`})},notify:async a=>{let b=i(a.body,i(a.text,"")).trim();if(!b)throw Error("notify: body is empty");let{notify:d}=await c.e(3377).then(c.bind(c,3377)),e=await d({body:b,..."string"==typeof a.title&&a.title?{title:a.title}:{},..."string"==typeof a.link&&a.link?{link:a.link}:{}});return{delivered:e.delivered,errors:e.errors}}};function h(a,b){if("string"!=typeof a||!a.trim())throw Error(`Param "${b}" is required (string)`);return a}function i(a,b){return"string"==typeof a?a:b}d()}catch(a){d(a)}})},73474:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Aq:()=>o,KV:()=>u,Mh:()=>s,cl:()=>x,hL:()=>p,invokeCardActionAction:()=>w,kv:()=>v,mm:()=>t,ru:()=>r,tT:()=>q});var e=c(31776);c(428);var f=c(23401),g=c(24576),h=c(7188),i=c(11244),j=c(16909),k=c(31900),l=c(97364),m=a([j,k]);async function n(a,b){let c=await (0,h.listWidgets)(a),d=await (0,h.readLayout)(a),e=b(d),f=(0,h.reconcileLayout)(e,c.map(a=>a.id),i.SYSTEM_WIDGET_IDS);return await (0,h.writeLayout)(a,f),{ok:!0,layout:f}}async function o(a,b){try{let c=await (0,g.getRoot)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({...a,order:b.filter(b=>!a.hidden.includes(b))}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a,b){try{let c=await (0,g.getRoot)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({order:a.order.filter(a=>a!==b),hidden:[...new Set([b,...a.hidden])]}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function q(a,b){try{let c=await (0,g.getRoot)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({order:[b,...a.order.filter(a=>a!==b)],hidden:a.hidden.filter(a=>a!==b)}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a,b,c,d){try{let e=await (0,g.getRoot)(a);if(!e)return{ok:!1,error:"Root not found"};let i=await (0,h.readWidget)(e.path,b);if(!i)return{ok:!1,error:"Widget not found"};if(!c||"object"!=typeof c)return{ok:!1,error:"newData must be an object"};let j={...i,data:c,updatedAt:new Date().toISOString(),...void 0!==d?{memory:d}:{}};return await (0,h.writeWidget)(e.path,j),(0,f.revalidatePath)(`/roots/${a}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function s(a,b,c){try{let d=await (0,g.getRoot)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await n(d.path,a=>({...a,sizes:{...a.sizes??{},[b]:c}}));return(0,f.revalidatePath)(`/roots/${a}`),e}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a,b,c){try{let d=await (0,g.getRoot)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await (0,h.readWidget)(d.path,b);if(!e)return{ok:!1,error:"Widget not found"};let i={...e,refresh:c};return await (0,h.writeWidget)(d.path,i),(0,f.revalidatePath)(`/roots/${a}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function u(a,b){try{let d=await (0,g.getRoot)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await (0,h.readWidget)(d.path,b);if(!e)return{ok:!1,error:"Widget not found"};if(!e.sourceTopicId)return{ok:!1,error:"Widget has no source topic — update it from any chat first."};if(j.z.isActive(e.sourceTopicId))return{ok:!1,error:"The source topic is already occupied by an agent — wait for the current turn to finish."};let f={...e,lastRefreshAt:new Date().toISOString()};await (0,h.writeWidget)(d.path,f);let{buildRefreshPromptForWidget:i}=await c.e(7576).then(c.bind(c,37576)),l=await i(d.path,f),m=await (0,k.startOrchestratorTurn)({rootId:a,topicId:e.sourceTopicId,message:l,attachments:[]});if("error"in m)return{ok:!1,error:m.error};return{ok:!0,agentId:m.agentId}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function v(a,b){let{refreshUtilityCard:d}=await Promise.all([c.e(7300),c.e(2485),c.e(1116)]).then(c.bind(c,71116)),e=await d(a,b);return e.ok?{ok:!0,...void 0!==e.inner?{inner:e.inner}:{},...e.noop?{noop:!0}:{}}:{ok:!1,...e.error?{error:e.error}:{}}}async function w(a,b){try{let{getUtility:d}=await Promise.resolve().then(c.bind(c,61105)),e=await d(b.utilityScope,b.utilityId,"project"===b.utilityScope?a:void 0);if(!e)return{ok:!1,error:"Utility not installed"};if(!e.manifest.permissions.workers?.enabled)return{ok:!1,error:"Utility lacks permissions.workers.enabled"};let g=e.manifest.serverActions.find(a=>a.name===b.actionName);if(!g)return{ok:!1,error:`Unknown server action: ${b.actionName}`};let{runServerAction:h}=await Promise.all([c.e(7300),c.e(2485),c.e(9579)]).then(c.bind(c,29579));await h({utility:e,action:g,args:b.args??{}});let{refreshUtilityCard:i}=await Promise.all([c.e(7300),c.e(2485),c.e(1116)]).then(c.bind(c,71116)),j=await i(a,b.widgetId);return a&&(0,f.revalidatePath)(`/roots/${a}`),{ok:!0,...void 0!==j.inner?{inner:j.inner}:{}}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function x(a,b){try{if(i.SYSTEM_WIDGET_IDS.includes(b))return{ok:!1,error:"System widget cannot be deleted — only hidden."};let c=await (0,g.getRoot)(a);if(!c)return{ok:!1,error:"Root not found"};await (0,h.uv)(c.path,b);let d=await n(c.path,a=>({order:a.order.filter(a=>a!==b),hidden:a.hidden.filter(a=>a!==b)}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[j,k]=m.then?(await m)():m,(0,l.D)([o,p,q,r,s,t,u,v,w,x]),(0,e.A)(o,"60310f733e6623bca6ecef83a1b2760e6e15d1bfc7",null),(0,e.A)(p,"609cde6b194368b9bdbceac978a32ccc7665d9c801",null),(0,e.A)(q,"600091ad741ecc4a0b598b7fe3fb5b6cba904934fe",null),(0,e.A)(r,"785a3fc530b4b9452844c4e9be9729ecd302c625e3",null),(0,e.A)(s,"702e817953319198ac14ef44e03c1bc9d2371c2c66",null),(0,e.A)(t,"702640b0d7a80b2c79de1db2f162cc3b30ef6b46d2",null),(0,e.A)(u,"6097b2d58154635edac7d702c3849af663de069be1",null),(0,e.A)(v,"602ed4e6cf4fe969cf01783e3797f99e2f71db7b1a",null),(0,e.A)(w,"6054d7c1abb963c73ab41744b6d9d6a1b836748cf9",null),(0,e.A)(x,"6050773cb97bcd29eaabe423feb83627267cf5d33d",null),d()}catch(a){d(a)}})},74342:(a,b,c)=>{c.d(b,{Rs:()=>h,appendEventSeq:()=>k,readEvents:()=>l});var d=c(73024),e=c(76760),f=c.n(e),g=c(13474);function h(a,b){return f().join((0,g.FF)(a),"topics",`${b}.events.jsonl`)}async function i(a,b,c){let e=h(a,b);await d.promises.mkdir(f().dirname(e),{recursive:!0}),await d.promises.appendFile(e,JSON.stringify(c)+"\n","utf8")}let j=globalThis.__reflexSeqAuthority??=new Map;async function k(a,b,c){let d=`${a}\0${b}`,e=j.get(d);if(e||(e={next:null,seeding:null,chain:Promise.resolve()},j.set(d,e)),null===e.next){let c=e;c.seeding||(c.seeding=(async()=>{let d=await m(a,b);null===c.next&&(c.next=d)})().finally(()=>{c.seeding=null})),await c.seeding}let f=e.next;e.next=f+1;let g={...c,seq:f},h=e.chain.then(()=>i(a,b,g));return e.chain=h.catch(()=>{}),await h,g}async function l(a,b){let c,e=h(a,b);try{c=await d.promises.readFile(e,"utf8")}catch(a){var f;if("object"==typeof(f=a)&&null!==f&&"code"in f&&"ENOENT"===f.code)return[];throw a}let g=[];for(let a of c.split(/\r?\n/))if(a.trim())try{g.push(JSON.parse(a))}catch{}return g}async function m(a,b){let c=await l(a,b);return 0===c.length?0:c[c.length-1].seq+1}},75207:(a,b,c)=>{c.d(b,{Hi:()=>e,KT:()=>i,PN:()=>f,Yj:()=>g,ak:()=>j,ci:()=>d,kJ:()=>h});let d=["feature","bug","refactor","docs","chore","research","review","call","idea"],e=["backlog","ready","in-progress","review","done","blocked"],f=["low","normal","high"],g={feature:{isCode:!0},bug:{isCode:!0,defaultSkill:"deep-research"},refactor:{isCode:!0},docs:{isCode:!0},chore:{isCode:!0},research:{isCode:!1,defaultSkill:"deep-research"},review:{isCode:!0},call:{isCode:!1},idea:{isCode:!1}};function h(a){return d.includes(a)}function i(a){return e.includes(a)}function j(a){return f.includes(a)}},79178:(a,b,c)=>{c.d(b,{V:()=>e});let d=/\{\{\s*([^{}\s][^{}]*?)\s*\}\}/g;function e(a,b){return function a(b,c){if("string"==typeof b)return b.replace(d,(a,b)=>(function(a){if(null==a)return"";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);try{return JSON.stringify(a)}catch{return String(a)}})(function(a,b){if("prev"===a)return b.prev;if(a.startsWith("workflow.")){let c=a.slice(9);return b.workflow[c]}if(a.startsWith("input."))return f(b.input,a.slice(6));if(a.startsWith("input"))return b.input;if(a.startsWith("steps.")){let[c,...d]=a.slice(6).split(".");if(!c)return;let e=b.steps[c];if(!e)return;if(0===d.length||1===d.length&&"output"===d[0])return e.output;if("output"===d[0])return f(e.output,d.slice(1).join("."))}}(b.trim(),c)));if(Array.isArray(b))return b.map(b=>a(b,c));if(b&&"object"==typeof b){let d={};for(let[e,f]of Object.entries(b))d[e]=a(f,c);return d}return b}(a,b)}function f(a,b){if(!b)return a;let c=b.split("."),d=a;for(let a of c){if(null==d||"object"!=typeof d)return;d=d[a]}return d}},80958:(a,b,c)=>{c.d(b,{Tf:()=>j,UV:()=>h,a9:()=>g,cs:()=>d,h0:()=>e,lh:()=>f,qL:()=>i});let d=["PERSONA","VALUES","INTERESTS","GOALS","RELATIONSHIPS","ROUTINES","AVOID","RECENT"],e={PERSONA:20,VALUES:15,INTERESTS:20,GOALS:20,RELATIONSHIPS:20,ROUTINES:15,AVOID:15,RECENT:30},f={PERSONA:"Name, location, role, workplace, family, mother tongue",VALUES:"Operating principles, how the user prefers to be addressed",INTERESTS:"Active topics, hobbies, learning targets",GOALS:"Life and work goals (not per-task /goal)",RELATIONSHIPS:"Key people: name, role, last shared context",ROUTINES:"Daily and weekly rhythms (wake, work, exercise)",AVOID:'Explicit "don\'t suggest" — topics, words, people',RECENT:"Rolling summary of the last ~7 days (auto-generated)"},g={PERSONA:1,VALUES:1,INTERESTS:2,GOALS:2,RELATIONSHIPS:2,ROUTINES:2,AVOID:2,RECENT:3};function h(a){return d.includes(a)}function i(a){return"global"===a||"project"===a}function j(a){return"append"===a||"replace"===a||"remove"===a}},88124:(a,b,c)=>{c.d(b,{Jc:()=>p,McpConfigSchema:()=>l,callTool:()=>r,connectAndListTools:()=>q});var d=c(43444),e=c(37567),f=c(1960),g=c(66133),h=c(14126);let i=h.Ik({transport:h.eu("stdio"),command:h.Yj().min(1),args:h.YO(h.Yj()).default([]),env:h.g1(h.Yj(),h.Yj()).default({}),cwd:h.Yj().optional()}),j=h.Ik({transport:h.eu("http"),url:h.Yj().url(),headers:h.g1(h.Yj(),h.Yj()).default({})}),k=h.Ik({transport:h.eu("sse"),url:h.Yj().url(),headers:h.g1(h.Yj(),h.Yj()).default({})}),l=h.gM("transport",[i,j,k]),m={name:"reflex-utility-bridge",version:"0.1.0"};async function n(a){let b=new d.K(m);if("stdio"===a.transport){let c=await p(a.env),d=new e.oQ({command:a.command,args:a.args,env:{...process.env,...c},cwd:a.cwd});return await b.connect(d),{client:b,close:()=>b.close()}}if("http"===a.transport){let c=await p(a.headers),d=new f.j(new URL(a.url),{requestInit:{headers:c}});return await b.connect(d),{client:b,close:()=>b.close()}}let c=await p(a.headers),h=new g.A(new URL(a.url),{requestInit:{headers:c}});return await b.connect(h),{client:b,close:()=>b.close()}}let o=/\$oauth:([a-z][a-z0-9-]*)/g;async function p(a){let b={};for(let[d,e]of Object.entries(a)){if("string"!=typeof e||!e.includes("$oauth:")){b[d]=e;continue}let a=new Set;e.replace(o,(b,c)=>(a.add(c),""));let f=e,{getAccessToken:g}=await c.e(2503).then(c.bind(c,82503)),{isOAuthProviderId:h}=await c.e(3657).then(c.bind(c,63657));for(let b of a){if(!h(b))throw Error(`unknown OAuth provider in placeholder: ${b}`);let a=await g(b);f=f.replace(RegExp(`\\$oauth:${b}\\b`,"g"),a)}b[d]=f}return b}async function q(a){let{client:b,close:c}=await n(a);try{let a=b.getServerVersion(),{tools:c}=await b.listTools();return{name:a?.name,version:a?.version,tools:c.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema}))}}finally{await c().catch(()=>{})}}async function r(a,b,c){let{client:d,close:e}=await n(a);try{let a=await d.callTool({name:b,arguments:c});return{isError:"boolean"==typeof a.isError?a.isError:void 0,content:a.content}}finally{await e().catch(()=>{})}}},91147:(a,b,c)=>{c.d(b,{_:()=>k});var d=c(73024),e=c(48161),f=c.n(e),g=c(76760),h=c.n(g),i=c(5243),j=c(88124);async function k(a){let b=await (0,i.listMcpServers)();if(0===b.length)return null;let c={};for(let a of b)if("stdio"===a.config.transport){let b=await (0,j.Jc)(a.config.env);c[a.id]={command:a.config.command,args:a.config.args,env:b}}else if("http"===a.config.transport){let b=await (0,j.Jc)(a.config.headers);c[a.id]={type:"http",url:a.config.url,...Object.keys(b).length>0?{headers:b}:{}}}else{let b=await (0,j.Jc)(a.config.headers);c[a.id]={type:"sse",url:a.config.url,...Object.keys(b).length>0?{headers:b}:{}}}let e=await d.promises.mkdtemp(h().join(f().tmpdir(),`reflex-mcp-${a}-`)),g=h().join(e,"mcp.json");return await d.promises.writeFile(g,JSON.stringify({mcpServers:c},null,2),"utf8"),{path:g,serverIds:b.map(a=>a.id),cleanup:async()=>{try{await d.promises.rm(e,{recursive:!0,force:!0})}catch{}}}}},96931:(a,b,c)=>{c.d(b,{R:()=>f});var d=c(59835),e=c(24576);async function f(a){let b=function(a){let b=a.trim();if(b.startsWith("{")&&b.endsWith("}"))try{let a=JSON.parse(b),c={prompt:"string"==typeof a.prompt&&a.prompt.trim().length>0?a.prompt:b};return("gemini"===a.provider||"codex"===a.provider)&&(c.provider=a.provider),"string"==typeof a.size&&(c.size=a.size),"string"==typeof a.aspectRatio&&(c.aspectRatio=a.aspectRatio),"string"==typeof a.alt&&(c.alt=a.alt),c}catch{}return{prompt:b}}(a.args.prompt),c=(0,e.rootId)(a.args.rootPath);try{var f;let e=await (0,d.generateImage)({rootId:c,prompt:b.prompt,...b.provider?{provider:b.provider}:{},...b.size?{size:b.size}:{},...b.aspectRatio?{aspectRatio:b.aspectRatio}:{},...b.alt?{alt:b.alt}:{}}),g=b.alt||b.prompt,h=`![${g.replace(/[\[\]\n]/g," ").slice(0,200)}](${e.urlPath})
799
798
 
800
799
  _generated: ${e.provider} \xb7 ${(f=e.size)<1024?`${f} B`:f<1048576?`${(f/1024).toFixed(1)} KB`:`${(f/1048576).toFixed(2)} MB`}_
801
800
  `;await a.manager.emit({type:"assistant-delta",text:h,agentId:a.meta.id,ts:new Date().toISOString(),seq:0})}catch(c){let b=c instanceof Error?c.message:String(c);throw await a.manager.emit({type:"assistant-delta",text:`Failed to generate image: ${b}
802
- `,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),c}}},97604:(a,b,c)=>{c.d(b,{Ed:()=>m,vT:()=>i});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g);let i=["utility","research","widget","goal","skill"];function j(a){return f().join(a,".reflex","suggestions.json")}async function k(a){try{let b=await d.promises.readFile(j(a),"utf8"),c=JSON.parse(b);if(1===c.version&&Array.isArray(c.items))return c}catch{}return{version:1,items:[]}}async function l(a,b){let c=j(a);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,JSON.stringify(b,null,2)+"\n","utf8")}async function m(a,b){let c=await k(a),d=b.title.trim().toLowerCase(),e=c.items.find(a=>a.kind===b.kind&&a.title.trim().toLowerCase()===d&&"pending"===a.status);if(e)return e;let f={id:h().randomBytes(6).toString("hex"),kind:b.kind,title:b.title.trim(),description:b.description.trim(),prompt:b.prompt.trim(),...b.sourceTopicId?{sourceTopicId:b.sourceTopicId}:{},createdAt:new Date().toISOString(),status:"pending"};return c.items.push(f),await l(a,c),f}}};
801
+ `,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),c}}},97604:(a,b,c)=>{c.d(b,{Ed:()=>l,vT:()=>i});var d=c(73024),e=c(77598),f=c.n(e),g=c(13474),h=c(32068);let i=["utility","research","widget","goal","skill"];async function j(a){try{let b=await d.promises.readFile((0,g.sl)(a),"utf8"),c=JSON.parse(b);if(1===c.version&&Array.isArray(c.items))return c}catch{}return{version:1,items:[]}}async function k(a,b){await (0,h.An)((0,g.sl)(a),b)}async function l(a,b){let c=await j(a),d=b.title.trim().toLowerCase(),e=c.items.find(a=>a.kind===b.kind&&a.title.trim().toLowerCase()===d&&"pending"===a.status);if(e)return e;let g={id:f().randomBytes(6).toString("hex"),kind:b.kind,title:b.title.trim(),description:b.description.trim(),prompt:b.prompt.trim(),...b.sourceTopicId?{sourceTopicId:b.sourceTopicId}:{},createdAt:new Date().toISOString(),status:"pending"};return c.items.push(g),await k(a,c),g}},99048:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{quickComplete:()=>h});var e=c(7206),f=c(17640),g=a([e]);async function h(a,b,c){let d=c?.timeoutMs??3e4;if("claude-code"===a.harness)return(await (0,e.execa)("claude",["-p",b,"--permission-mode","default","--allowedTools","","--model",a.model],{timeout:d,stdio:["ignore","pipe","pipe"]})).stdout.trim();if("codex"===a.harness)return(await (0,e.execa)("codex",["exec","--sandbox","read-only","--model",a.model,b],{timeout:d,stdio:["ignore","pipe","pipe"]})).stdout.trim();if("ollama"===a.harness){let c=(await (0,f.loadSettings)()).harnesses.ollama.baseUrl.replace(/\/$/,""),e=await fetch(`${c}/api/generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a.model,prompt:b,stream:!1}),signal:AbortSignal.timeout(d)});if(!e.ok)throw Error(`Ollama /api/generate HTTP ${e.status}`);return((await e.json()).response??"").trim()}throw Error(`Unsupported quick harness: ${a.harness}`)}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})}};