reflex-agent 0.13.4 → 0.14.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 (182) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +102 -95
  3. package/.next/app-path-routes-manifest.json +8 -7
  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/server/app/_not-found/page.js +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/agents/[agentId]/page.js +1 -1
  10. package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/[agentId]/respond/route.js +1 -1
  12. package/.next/server/app/api/agents/[agentId]/respond/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/images/[rootId]/[file]/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/oauth/start/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/roots/[id]/attachments/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route.js +1 -1
  18. package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route.js +1 -1
  20. package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route.js +1 -1
  22. package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/roots/[id]/dashboard/route.js +1 -1
  24. package/.next/server/app/api/roots/[id]/dashboard/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/roots/[id]/suggestions/route.js +1 -1
  26. package/.next/server/app/api/roots/[id]/suggestions/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/utilities/[scope]/[id]/bundle.js/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/utilities/[scope]/[id]/host/route.js +1 -1
  29. package/.next/server/app/api/utilities/[scope]/[id]/host/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/utilities/[scope]/[id]/host-api.mjs/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/utilities/[scope]/[id]/host-ui.mjs/route.js +53 -1
  32. package/.next/server/app/api/utilities/[scope]/[id]/host-ui.mjs/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/utilities/[scope]/[id]/iframe/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/utilities/[scope]/[id]/style.css/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/utilities/install-archive/route.js +1 -0
  36. package/.next/server/app/api/utilities/install-archive/route.js.nft.json +1 -0
  37. package/.next/server/app/api/utilities/install-archive/route_client-reference-manifest.js +1 -0
  38. package/.next/server/app/audit/page.js +2 -2
  39. package/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/onboarding/page.js +2 -2
  41. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/page.js +2 -2
  43. package/.next/server/app/page.js.nft.json +1 -1
  44. package/.next/server/app/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/roots/[id]/chat/[topicId]/page.js +2 -2
  46. package/.next/server/app/roots/[id]/chat/[topicId]/page.js.nft.json +1 -1
  47. package/.next/server/app/roots/[id]/chat/[topicId]/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/roots/[id]/kb/[...slug]/page.js +2 -2
  49. package/.next/server/app/roots/[id]/kb/[...slug]/page.js.nft.json +1 -1
  50. package/.next/server/app/roots/[id]/kb/[...slug]/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/roots/[id]/memory/page.js +1 -1
  52. package/.next/server/app/roots/[id]/memory/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/roots/[id]/page.js +6 -6
  54. package/.next/server/app/roots/[id]/page.js.nft.json +1 -1
  55. package/.next/server/app/roots/[id]/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/roots/[id]/workflows/[wfId]/page.js +2 -2
  57. package/.next/server/app/roots/[id]/workflows/[wfId]/page.js.nft.json +1 -1
  58. package/.next/server/app/roots/[id]/workflows/[wfId]/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/roots/[id]/workflows/page.js +2 -2
  60. package/.next/server/app/roots/[id]/workflows/page.js.nft.json +1 -1
  61. package/.next/server/app/roots/[id]/workflows/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/roots/new/page.js +4 -4
  63. package/.next/server/app/roots/new/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/settings/page.js +5 -5
  65. package/.next/server/app/settings/page.js.nft.json +1 -1
  66. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/share/[id]/file/page.js +2 -2
  68. package/.next/server/app/share/[id]/file/page_client-reference-manifest.js +1 -1
  69. package/.next/server/app/share/[id]/page.js +2 -2
  70. package/.next/server/app/share/[id]/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/utilities/[scope]/[id]/page.js +2 -2
  72. package/.next/server/app/utilities/[scope]/[id]/page.js.nft.json +1 -1
  73. package/.next/server/app/utilities/[scope]/[id]/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/utilities/page.js +2 -2
  75. package/.next/server/app/utilities/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app-paths-manifest.json +8 -7
  77. package/.next/server/chunks/1105.js +1 -1
  78. package/.next/server/chunks/1358.js +1 -1
  79. package/.next/server/chunks/285.js +9 -6
  80. package/.next/server/chunks/3091.js +1 -0
  81. package/.next/server/chunks/3332.js +1 -1
  82. package/.next/server/chunks/3795.js +3 -0
  83. package/.next/server/chunks/{2688.js → 4299.js} +2 -2
  84. package/.next/server/chunks/4812.js +1 -1
  85. package/.next/server/chunks/4925.js +1 -1
  86. package/.next/server/chunks/{8425.js → 6648.js} +1 -1
  87. package/.next/server/chunks/7300.js +56 -4
  88. package/.next/server/chunks/7358.js +3 -0
  89. package/.next/server/chunks/9098.js +1 -1
  90. package/.next/server/chunks/969.js +1 -0
  91. package/.next/server/chunks/9809.js +1 -1
  92. package/.next/server/chunks/9861.js +57 -5
  93. package/.next/server/functions-config-manifest.json +1 -0
  94. package/.next/server/middleware-build-manifest.js +1 -1
  95. package/.next/server/middleware-manifest.json +5 -5
  96. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  97. package/.next/server/pages/500.html +1 -1
  98. package/.next/server/server-reference-manifest.js +1 -1
  99. package/.next/server/server-reference-manifest.json +1 -1
  100. package/.next/static/1y4wPze4yO8DprxGKwSXQ/_buildManifest.js +1 -0
  101. package/.next/static/chunks/{5596-93b53c14a2d5c59a.js → 2608-755e5d9ca79c19dc.js} +1 -1
  102. package/.next/static/chunks/4108.17cd7704e88bcb32.js +1 -0
  103. package/.next/static/chunks/{9001-6f38a673a3868871.js → 4442-79daa48fe7845771.js} +1 -1
  104. package/.next/static/chunks/6226-819ec17660994a7d.js +1 -0
  105. package/.next/static/chunks/7922-9a16eb68adcc7498.js +1 -0
  106. package/.next/static/chunks/9624-7dc547ab202a1d82.js +1 -0
  107. package/.next/static/chunks/app/api/agents/[agentId]/respond/route-5d0cd3b754198853.js +1 -0
  108. package/.next/static/chunks/app/api/images/[rootId]/[file]/route-5d0cd3b754198853.js +1 -0
  109. package/.next/static/chunks/app/api/oauth/callback/route-5d0cd3b754198853.js +1 -0
  110. package/.next/static/chunks/app/api/oauth/start/route-5d0cd3b754198853.js +1 -0
  111. package/.next/static/chunks/app/api/roots/[id]/attachments/route-5d0cd3b754198853.js +1 -0
  112. package/.next/static/chunks/app/api/roots/[id]/chat/[topicId]/send/route-5d0cd3b754198853.js +1 -0
  113. package/.next/static/chunks/app/api/roots/[id]/chat/[topicId]/stop/route-5d0cd3b754198853.js +1 -0
  114. package/.next/static/chunks/app/api/roots/[id]/chat/[topicId]/stream/route-5d0cd3b754198853.js +1 -0
  115. package/.next/static/chunks/app/api/roots/[id]/dashboard/route-5d0cd3b754198853.js +1 -0
  116. package/.next/static/chunks/app/api/roots/[id]/suggestions/route-5d0cd3b754198853.js +1 -0
  117. package/.next/static/chunks/app/api/utilities/[scope]/[id]/bundle.js/route-5d0cd3b754198853.js +1 -0
  118. package/.next/static/chunks/app/api/utilities/[scope]/[id]/host/route-5d0cd3b754198853.js +1 -0
  119. package/.next/static/chunks/app/api/utilities/[scope]/[id]/host-api.mjs/route-5d0cd3b754198853.js +1 -0
  120. package/.next/static/chunks/app/api/utilities/[scope]/[id]/host-ui.mjs/route-5d0cd3b754198853.js +1 -0
  121. package/.next/static/chunks/app/api/utilities/[scope]/[id]/iframe/route-5d0cd3b754198853.js +1 -0
  122. package/.next/static/chunks/app/api/utilities/[scope]/[id]/style.css/route-5d0cd3b754198853.js +1 -0
  123. package/.next/static/chunks/app/api/utilities/install-archive/route-5d0cd3b754198853.js +1 -0
  124. package/.next/static/chunks/app/layout-5caae9e60f5d6d42.js +1 -0
  125. package/.next/static/chunks/app/onboarding/page-3bb8ad02f9c88fdf.js +1 -0
  126. package/.next/static/chunks/app/{page-0c090eba51732036.js → page-6e32890e646e50aa.js} +1 -1
  127. package/.next/static/chunks/app/roots/[id]/chat/[topicId]/{page-292bc4cdceb6ea1d.js → page-ac00a7a8d6a16da8.js} +1 -1
  128. package/.next/static/chunks/app/roots/[id]/kb/[...slug]/{page-5e4f7b893c02c2bd.js → page-14cb4b8a24e40dc7.js} +1 -1
  129. package/.next/static/chunks/app/roots/[id]/layout-5d0cd3b754198853.js +1 -0
  130. package/.next/static/chunks/app/roots/[id]/memory/page-7bbe675652b7f9e8.js +1 -0
  131. package/.next/static/chunks/app/roots/[id]/page-2080ede443a668d2.js +1 -0
  132. package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-c744450355558209.js +1 -0
  133. package/.next/static/chunks/app/roots/[id]/workflows/page-8175a0fbbc465472.js +1 -0
  134. package/.next/static/chunks/app/roots/new/page-3d83b5dfb0a8f869.js +1 -0
  135. package/.next/static/chunks/app/settings/page-550fab06213d866c.js +1 -0
  136. package/.next/static/chunks/app/share/[id]/page-c290e46d1beba1ff.js +1 -0
  137. package/.next/static/chunks/app/utilities/[scope]/[id]/{page-ea8352712b521f75.js → page-5aaa4731a5ab783d.js} +1 -1
  138. package/.next/static/chunks/app/utilities/page-0e362fd622574297.js +1 -0
  139. package/.next/static/chunks/{webpack-a4eadc02863be5eb.js → webpack-e60c7ddfa84db519.js} +1 -1
  140. package/.next/trace +90 -90
  141. package/.next/types/app/api/utilities/install-archive/route.ts +347 -0
  142. package/.next/types/routes.d.ts +2 -1
  143. package/.next/types/validator.ts +9 -0
  144. package/dist/lib/reflex/prompts/defaults.js +3 -0
  145. package/dist/lib/reflex/prompts/defaults.js.map +1 -1
  146. package/package.json +2 -1
  147. package/.next/server/chunks/2678.js +0 -3
  148. package/.next/server/chunks/491.js +0 -1
  149. package/.next/server/chunks/6238.js +0 -1
  150. package/.next/static/chunks/3717-339a6fc5e3b929f9.js +0 -1
  151. package/.next/static/chunks/4108.58294dcccaecb2f1.js +0 -1
  152. package/.next/static/chunks/4179-847dcd61bef8c59f.js +0 -1
  153. package/.next/static/chunks/4273-0b053f2035ad088d.js +0 -1
  154. package/.next/static/chunks/app/api/agents/[agentId]/respond/route-7e2f82a91b10b7e2.js +0 -1
  155. package/.next/static/chunks/app/api/images/[rootId]/[file]/route-7e2f82a91b10b7e2.js +0 -1
  156. package/.next/static/chunks/app/api/oauth/callback/route-7e2f82a91b10b7e2.js +0 -1
  157. package/.next/static/chunks/app/api/oauth/start/route-7e2f82a91b10b7e2.js +0 -1
  158. package/.next/static/chunks/app/api/roots/[id]/attachments/route-7e2f82a91b10b7e2.js +0 -1
  159. package/.next/static/chunks/app/api/roots/[id]/chat/[topicId]/send/route-7e2f82a91b10b7e2.js +0 -1
  160. package/.next/static/chunks/app/api/roots/[id]/chat/[topicId]/stop/route-7e2f82a91b10b7e2.js +0 -1
  161. package/.next/static/chunks/app/api/roots/[id]/chat/[topicId]/stream/route-7e2f82a91b10b7e2.js +0 -1
  162. package/.next/static/chunks/app/api/roots/[id]/dashboard/route-7e2f82a91b10b7e2.js +0 -1
  163. package/.next/static/chunks/app/api/roots/[id]/suggestions/route-7e2f82a91b10b7e2.js +0 -1
  164. package/.next/static/chunks/app/api/utilities/[scope]/[id]/bundle.js/route-7e2f82a91b10b7e2.js +0 -1
  165. package/.next/static/chunks/app/api/utilities/[scope]/[id]/host/route-7e2f82a91b10b7e2.js +0 -1
  166. package/.next/static/chunks/app/api/utilities/[scope]/[id]/host-api.mjs/route-7e2f82a91b10b7e2.js +0 -1
  167. package/.next/static/chunks/app/api/utilities/[scope]/[id]/host-ui.mjs/route-7e2f82a91b10b7e2.js +0 -1
  168. package/.next/static/chunks/app/api/utilities/[scope]/[id]/iframe/route-7e2f82a91b10b7e2.js +0 -1
  169. package/.next/static/chunks/app/api/utilities/[scope]/[id]/style.css/route-7e2f82a91b10b7e2.js +0 -1
  170. package/.next/static/chunks/app/layout-5e042e4e97dcea31.js +0 -1
  171. package/.next/static/chunks/app/onboarding/page-97aa4ad99276380f.js +0 -1
  172. package/.next/static/chunks/app/roots/[id]/layout-7e2f82a91b10b7e2.js +0 -1
  173. package/.next/static/chunks/app/roots/[id]/memory/page-b1fd919707f00c99.js +0 -1
  174. package/.next/static/chunks/app/roots/[id]/page-da97fb20eef9677c.js +0 -1
  175. package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-932edf8ce73b23bc.js +0 -1
  176. package/.next/static/chunks/app/roots/[id]/workflows/page-7339062dee577728.js +0 -1
  177. package/.next/static/chunks/app/roots/new/page-c96a333c1ef53fba.js +0 -1
  178. package/.next/static/chunks/app/settings/page-75c61dd145bed57e.js +0 -1
  179. package/.next/static/chunks/app/share/[id]/page-e4b74cf795d4e211.js +0 -1
  180. package/.next/static/chunks/app/utilities/page-b5514f6c3291e23f.js +0 -1
  181. package/.next/static/my3C6nd2vY80TaiBNwet5/_buildManifest.js +0 -1
  182. /package/.next/static/{my3C6nd2vY80TaiBNwet5 → 1y4wPze4yO8DprxGKwSXQ}/_ssgManifest.js +0 -0
@@ -70,9 +70,9 @@ Constraints:
70
70
  - Don't speculate about feelings the user didn't state. Inferred mood is best-guess, not therapy.
71
71
  - If the user explicitly asks for a weekly review during this flow, switch to the \`/skill weekly-reflect\` flow.`}let p=15},1405:(a,b,c)=>{"use strict";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"]},1947:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{MJ:()=>p,ab:()=>q,xP:()=>s});var e=c(73024),f=c(76760),g=c.n(f),h=c(73652),i=c(36017),j=c(99353),k=c(81483),l=c(14981),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}
72
72
  `,"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()}
73
- ${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.M)()).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.T)(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)}})},3043:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{w:()=>j});var e=c(24576),f=c(13295),g=c(24058),h=c(24570),i=a([g,h]);[g,h]=i.then?(await i)():i;let p={manual:null,hourly:36e5,daily:864e5,weekly:6048e5};function j(){if(globalThis.__reflexWorkflowScheduler)return;let a={running:!1,lastFired:new Map,timer:setInterval(()=>{k(a)},6e4)};setTimeout(()=>void k(a),5e3).unref?.(),a.timer.unref?.(),globalThis.__reflexWorkflowScheduler=a}async function k(a){if(!a.running){a.running=!0;try{for(let b of(await (0,e.qV)().catch(()=>[])))try{await m(a,b)}catch(a){console.error(`[scheduler] root ${b.id} failed: ${a instanceof Error?a.message:String(a)}`)}await l(a)}finally{a.running=!1}}}async function l(a){for(let b of h.p){let c=h.l[b.trigger];if(!c)continue;let d=`__system__::${b.id}`,e=a.lastFired.get(d)??null;if(!(null!==e&&Date.now()-e<c)){a.lastFired.set(d,Date.now());try{let a=await b.run();!a.ok&&a.detail&&console.warn(`[scheduler] ${b.id} returned non-ok: ${a.detail}`)}catch(a){console.error(`[scheduler] ${b.id} failed: ${a instanceof Error?a.message:String(a)}`)}}}}async function m(a,b){let c=await (0,f.listWorkflows)(b.path).catch(()=>[]),d=await o(b.id);for(let f of function(a,b){let c=new Set(a.map(a=>a.id));return[...a,...b.filter(a=>!c.has(a.id))]}(c,d)){var e,h;let c=p[f.trigger];if(!c||!1===f.enabled)continue;let d=(e=b.id,h=f.id,`${e}::${h}`),i=a.lastFired.get(d)??await n(b.path,f.id);if(!(null!==i&&Date.now()-i<c)){a.lastFired.set(d,Date.now());try{await (0,g.runWorkflow)(b.id,f.id)}catch(a){console.error(`[scheduler] ${b.id}/${f.id} failed: ${a instanceof Error?a.message:String(a)}`)}}}}async function n(a,b){let c=await (0,f.v)(a,b,1).catch(()=>[]);if(0===c.length)return null;let d=Date.parse(c[0].startedAt);return Number.isFinite(d)?d:null}async function o(a){try{let{collectExtensions:b}=await Promise.resolve().then(c.bind(c,14952));return(await b({rootId:a})).workflows??[]}catch{return[]}}d()}catch(a){d(a)}})},3724:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{runHeadlessAgent:()=>l});var e=c(93554),f=c(51021),g=c(20243),h=c(5492),i=c(36017),j=c(53905),k=a([e,f]);async function l(a){let b=await (0,j.Zn)(a.rootId);if(!b)throw Error(`runHeadlessAgent: root not found: ${a.rootId}`);let c=await (0,i.M)(),d=c.assignments.chat,k=await (0,h.OY)({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.W)({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.wj)(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)}})},3890:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DW:()=>u,u7:()=>r,uX:()=>v,zm:()=>s});var e=c(73745);c(66493);var f=c(76760),g=c.n(f),h=c(73024),i=c(53905),j=c(19319),k=c(5492),l=c(20243),m=c(8118),n=c(1947),o=c(81483),p=c(63781),q=a([n]);async function r(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,j.dj)(b.path);return{ok:!0,sections:function(a){let b=[],c=new Map;for(let e of a){let a=e.rel.split("/");if(1===a.length){var d;b.push({rel:(d=e).rel,label:d.meta.title??d.rel,isDir:!1,fileRel:d.rel});continue}let f=a[0],g=c.get(f)??[];g.push(e),c.set(f,g)}let e=[];for(let a of(b.sort(w),e.push(...b),[...c.keys()].sort())){let b=(c.get(a)??[]).map(a=>{let b=a.rel.split("/").slice(1).join("/");return{rel:a.rel,label:a.meta.title??g().basename(b),isDir:!1,fileRel:a.rel}}).sort((a,b)=>"INDEX.md"===g().basename(a.rel)?-1:"INDEX.md"===g().basename(b.rel)?1:a.label.localeCompare(b.label)),d=b.find(a=>"INDEX.md"===g().basename(a.rel)),f=d?.label??a;e.push({rel:`${a}/`,label:f,isDir:!0,children:b})}return e}(c)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function s(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,k.hk)(b.path)).filter(a=>!a.meta.helperFor&&!a.meta.taskId),d=await t(b.path,c);return{ok:!0,topics:d.map(a=>({id:a.meta.id,title:a.meta.title,updatedAt:a.meta.updatedAt}))}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a,b){let c=await Promise.all(b.map(async b=>{if(b.preview.trim())return!0;try{return(await h.promises.stat((0,l.Rs)(a,b.meta.id))).size>0}catch{return!1}}));return b.filter((a,b)=>c[b])}async function u(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,m.listUtilities)({rootId:a,scope:"project"}),d=await (0,k.hk)(b.path),e=new Map;for(let a of d){let b=a.meta.helperFor;if(!b)continue;let c=e.get(b)??[];c.push(a),e.set(b,c)}let f=[];for(let a of c){let c=e.get(a.manifest.id)??[],d=await t(b.path,c);f.push({id:a.manifest.id,name:a.manifest.name,scope:a.scope,...a.rootId?{rootId:a.rootId}:{},...a.manifest.icon?{icon:a.manifest.icon}:{},threads:d.map(a=>({id:a.meta.id,title:a.meta.title,updatedAt:a.meta.updatedAt}))})}return f.sort((a,b)=>a.name.localeCompare(b.name)),{ok:!0,utilities:f}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function v(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,n.ab)({scope:"project",rootPath:b.path}),d=o.cs.map(a=>({file:a,description:o.lh[a],lines:c[a].lines,empty:!c[a].content}));return{ok:!0,files:d}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}function w(a,b){let c=g().basename(a.rel),d=g().basename(b.rel);return"INDEX.md"===c?-1:"INDEX.md"===d?1:a.label.localeCompare(b.label)}n=(q.then?(await q)():q)[0],(0,p.D)([r,s,u,v]),(0,e.A)(r,"40a6290b393d4b39181944c39ac703d133344ad93f",null),(0,e.A)(s,"40bd421b75196b2fd21e9d2495681072fe144afe5d",null),(0,e.A)(u,"40db1008123c5f4b2016653826462782ced3438ee4",null),(0,e.A)(v,"40a40c52f89ccee6e6bec688d1246a72c66cfe6b20",null),d()}catch(a){d(a)}})},5053:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,53869,23)),Promise.resolve().then(c.t.bind(c,85684,23)),Promise.resolve().then(c.t.bind(c,89338,23)),Promise.resolve().then(c.t.bind(c,65597,23)),Promise.resolve().then(c.t.bind(c,41833,23)),Promise.resolve().then(c.t.bind(c,63921,23)),Promise.resolve().then(c.t.bind(c,25211,23)),Promise.resolve().then(c.t.bind(c,19908,23)),Promise.resolve().then(c.bind(c,49289))},5492:(a,b,c)=>{"use strict";c.d(b,{OY:()=>u,PF:()=>r,_9:()=>t,dL:()=>v,do:()=>w,eF:()=>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(87841),j=c.n(i),k=c(54287);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}:{}},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){let b=function(){let a=new Date().toISOString().slice(0,10),b=h().randomBytes(4).toString("hex");return`${a}-${b}`}(),c=new Date().toISOString(),e={id:b,title:function(a){let b=a.trim().split(/\r?\n/)[0]??"Untitled";return b.length>80?b.slice(0,77)+"…":b}(a.firstMessage),createdAt:c,updatedAt:c,...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}:{}};return await d.promises.mkdir(l(a.root),{recursive:!0}),await d.promises.writeFile(m(a.root,b),y(e,""),"utf8"),{meta:e,messages:[],abs:m(a.root,b)}}async function v(a,b,c){let e=await p(a,b);if(!e)throw Error(`Topic not found: ${b}`);e.meta.title=c,e.meta.updatedAt=new Date().toISOString();let f=e.messages.map(a=>`## ${a.role}
74
- ${a.body}`).join("\n\n")+"\n";await d.promises.writeFile(m(a,b),y(e.meta,f),"utf8")}async function w(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 x(d),removedEvents:await x(e)}}async function x(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}}function y(a,b){return j().stringify(b,a)}},6240:(a,b,c)=>{Promise.resolve().then(c.bind(c,30849)),Promise.resolve().then(c.bind(c,95422)),Promise.resolve().then(c.bind(c,11935))},8118:(a,b,c)=>{"use strict";c.d(b,{Od:()=>m,gd:()=>s,getUtility:()=>r,jc:()=>u,listUtilities:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(53905),h=c(73652),i=c(54287),j=c(20050);let k=f().join((0,h._)(),"utilities");function l(a){return f().join((0,i.FF)(a),"utilities")}function m(a,b,c){if("global"===a)return f().join(k,b);if(!c)throw Error("project-scoped utility requires rootPath");return f().join(l(c),b)}async function n(a={}){let b=[];if(a.scope&&"global"!==a.scope||b.push(...await o("global",k)),!a.scope||"project"===a.scope)for(let c of a.rootId?await (0,g.Zn)(a.rootId).then(a=>a?[a]:[]).catch(()=>[]):await (0,g.qV)().catch(()=>[])){let a=l(c.path);b.push(...(await o("project",a,c.id)).map(a=>({...a,rootId:c.id})))}return b}async function o(a,b,c){let e;try{e=await d.promises.readdir(b,{withFileTypes:!0})}catch{return[]}let g=[];for(let d of e){if(!d.isDirectory())continue;let e=f().join(b,d.name),h=await p(e);h&&g.push({scope:a,...c?{rootId:c}:{},dir:e,manifest:h,bundleAvailable:await q(f().join(e,"bundle.js"))})}return g}async function p(a){try{let b=await d.promises.readFile(f().join(a,"manifest.json"),"utf8"),c=j.pL.safeParse(JSON.parse(b));return c.success?c.data:null}catch{return null}}async function q(a){try{return await d.promises.access(a),!0}catch{return!1}}async function r(a,b,c){let d,e;if("global"===a)d=k;else{if(!c)return null;let a=await (0,g.Zn)(c).catch(()=>null);if(!a)return null;d=l(a.path),e=a.id}let h=f().join(d,b),i=await p(h);return i?{scope:a,...e?{rootId:e}:{},dir:h,manifest:i,bundleAvailable:await q(f().join(h,"bundle.js"))}:null}async function s(a){let b;if(a.manifest.id!==a.manifest.id.toLowerCase())throw Error("manifest.id must be lowercase kebab-case");if("project"===a.scope){if(!a.rootId)throw Error("project-scoped install requires rootId");let c=await (0,g.Zn)(a.rootId);if(!c)throw Error(`unknown rootId: ${a.rootId}`);b=c.path}let c=m(a.scope,a.manifest.id,b);for(let[e,g]of(await d.promises.mkdir(c,{recursive:!0}),await d.promises.mkdir(f().join(c,"data"),{recursive:!0}),Object.entries(a.files))){if("manifest.json"===e)continue;let c=function(a,b,c,d){let e=m(a,b,d),g=f().resolve(e,c),h=f().relative(e,g);if(h.startsWith("..")||f().isAbsolute(h))throw Error(`refused path outside utility dir: ${c}`);return g}(a.scope,a.manifest.id,e,b);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,g,"utf8")}let e={...a.manifest,source:a.source};if(await d.promises.writeFile(f().join(c,"manifest.json"),JSON.stringify(e,null,2)+"\n","utf8"),"project"===a.scope&&a.rootId&&b&&e.card)try{await t(b,a.scope,e)}catch(a){console.error("[utility install] card seed failed:",a)}return{scope:a.scope,...a.rootId?{rootId:a.rootId}:{},dir:c,manifest:e,bundleAvailable:!1}}async function t(a,b,d){if(!d.card)return;let{buildRecord:e,readLayout:f,reconcileLayout:g,writeLayout:h,writeWidget:i,listWidgets:j}=await Promise.resolve().then(c.bind(c,69509)),{SYSTEM_WIDGET_IDS:k}=await Promise.resolve().then(c.bind(c,1405)),l=`utility:${d.id}`,m=e({id:l,title:d.card.title??d.name,...d.card.description?{description:d.card.description}:{},...d.card.action&&d.card.refresh?{refresh:d.card.refresh}:{},payload:{kind:"utility-card",data:{utilityId:d.id,utilityScope:b,inner:{kind:d.card.kind,data:d.card.data,...d.card.title?{title:d.card.title}:{},...d.card.description?{description:d.card.description}:{}}}}});await i(a,m);let n=await f(a);n.order.includes(l)||n.hidden.includes(l)||(n.hidden=[...n.hidden,l]);let o=g(n,(await j(a)).map(a=>a.id),k);await h(a,o)}async function u(a,b,c){let e;if("project"===a){if(!c)throw Error("project-scoped remove requires rootId");let a=await (0,g.Zn)(c);if(!a)return;e=a.path}let f=m(a,b,e);await d.promises.rm(f,{recursive:!0,force:!0})}},13415:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L4:()=>r,OQ:()=>s,Pd:()=>t,g3:()=>o,h$:()=>q,nY:()=>p});var e=c(73745);c(66493);var f=c(65326),g=c(53905),h=c(5492),i=c(36017),j=c(99353),k=c(51021),l=c(93554),m=c(63781),n=a([j,k,l]);async function o(a,b,c=[],d){try{let e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};if(!b.trim()&&0===c.length)return{ok:!1,error:"Empty prompt"};let j=await (0,i.M)(),l=j.assignments.chat,m=b.trim()||c[0]?.name||"Untitled",n=await (0,h.OY)({root:e.path,firstMessage:m,harness:l.harness,model:l.model,language:j.language}),o=await (0,k.W)({rootId:a,topicId:n.meta.id,message:b.trim(),attachments:c,...d?{focusFile:d}:{}});if("error"in o)return{ok:!1,error:o.error};return(0,f.revalidatePath)(`/roots/${a}`),{ok:!0,topicId:n.meta.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,h.hk)(b.path)).filter(a=>!a.meta.helperFor);return{ok:!0,topics:c}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function q(a,b,c){try{let d,e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};let k=await (0,i.M)(),l=k.assignments.quick,m=k.language,n=["Write a short, descriptive title for the following user question.",`Language: ${m}.`,"Constraints:\n - 3 to 7 words\n - no quotes, no trailing punctuation",` - no leading prefixes like "Title:" — just the title text`,"\nUser question:",c].join("\n"),o=(d=(d=(d=(d=(await (0,j.T)(l,n,{timeoutMs:25e3})).trim()).replace(/^```[a-z]*\s*([\s\S]*?)\s*```$/i,"$1")).replace(/^['"«»“”‘’`]+|['"«»“”‘’`]+$/g,"")).replace(/^\s*title\s*:\s*/i,""),(d=(d=d.split(/\r?\n/)[0]?.trim()??"").replace(/[.!?…]+$/u,"").trim()).length>80&&(d=d.slice(0,77).trimEnd()+"…"),d);if(!o)return{ok:!1,error:"Empty title from model"};return await (0,h.dL)(e.path,b,o),(0,f.revalidatePath)(`/roots/${a}`),(0,f.revalidatePath)(`/roots/${a}/chat/${b}`),{ok:!0,title:o}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};return await l.z.stopTopic(b),await (0,h.do)(c.path,b),(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){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};return await (0,h._9)(c.path,b,"abandoned"),(0,f.revalidatePath)(`/roots/${a}/chat/${b}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a){try{let b=await (0,g.Zn)(a.rootId);if(!b)return{ok:!1,error:"Root not found"};let c=a.question.trim();if(!c)return{ok:!1,error:"Empty question"};let d=await (0,i.M)(),e=d.assignments.chat,f=await (0,h.OY)({root:b.path,firstMessage:c,harness:e.harness,model:e.model,language:d.language,helperFor:a.utilityId}),j=(a.context??"").trim(),l=j?[`[${a.utilityName} context]`,j.length>4e3?j.slice(0,4e3)+"\n…[truncated]":j,"[/context]\n",c].join("\n"):c,m=await (0,k.W)({rootId:a.rootId,topicId:f.meta.id,message:l,attachments:[]});if("error"in m)return{ok:!1,error:m.error};return{ok:!0,topicId:f.meta.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[j,k,l]=n.then?(await n)():n,(0,m.D)([o,p,q,r,s,t]),(0,e.A)(o,"78fea7d2a69cb84ab9cee2bc2cddf3bff9ee7d020f",null),(0,e.A)(p,"40e9bdf6da492d898cb95a3bc3992f54b16926c16b",null),(0,e.A)(q,"70551ae830c556dc328e99be141f12aef0d9777e54",null),(0,e.A)(r,"60f16adfda42bc1297a7276d1dc3c3708f7f5bc4d6",null),(0,e.A)(s,"609d4ced8e13cb529b51ab1cbdcc944883ef6f328f",null),(0,e.A)(t,"4015abc7c1ab5c13b4967fe3247fb7b273e6afe7af",null),d()}catch(a){d(a)}})},14981:(a,b,c)=>{"use strict";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}}},15754:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$z:()=>l,MU:()=>m,Tc:()=>k});var e=c(73745);c(66493);var f=c(53905),g=c(20243),h=c(93554),i=c(63781),j=a([h]);async function k(a,b){try{let c=await (0,f.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await (0,g.wj)(c.path,b);return{ok:!0,events:d,active:h.z.isActive(b)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function l(a){try{return{ok:!0,agents:h.z.list(a)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function m(a){try{let b=h.z.get(a);if(!b)return{ok:!1,error:"Agent not found"};return{ok:!0,agent:b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}h=(j.then?(await j)():j)[0],(0,i.D)([k,l,m]),(0,e.A)(k,"60f065636097082bdca8d7a771954a5b70bc0f54a2",null),(0,e.A)(l,"403b98828ff6031b05b163dcbc096a7d4958ea26d7",null),(0,e.A)(m,"40ecee6f8d7d6fee4b7fdec223f6e24e7e2b02b4a9",null),d()}catch(a){d(a)}})},18809:(a,b,c)=>{"use strict";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}},19319:(a,b,c)=>{"use strict";c.d(b,{IK:()=>l,dj:()=>k});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(54287);async function j(a){let b=(0,i.FF)(a);return m(b,b)}async function k(a){let b=await j(a);return await Promise.all(b.map(async a=>({...a,meta:await n(a.abs)})))}async function l(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 m(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(m(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 n(a){try{let b=await d.promises.readFile(a,"utf8"),c=h()(b).data;return{...void 0!==o(c.title)?{title:o(c.title)}:{},...void 0!==p(c.version)?{version:p(c.version)}:{},...void 0!==o(c.date)?{date:o(c.date)}:{},...void 0!==o(c.kind)?{kind:o(c.kind)}:{},data:c}}catch{return{data:{}}}}function o(a){return"string"==typeof a?a:a instanceof Date?a.toISOString().slice(0,10):void 0}function p(a){if("string"==typeof a||"number"==typeof a)return a}},20050:(a,b,c)=>{"use strict";c.d(b,{pL:()=>j});var d=c(56149);let e=d.Yj().min(1).max(80).regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"id must be kebab-case (e.g. furniture-gen)"),f=d.Ik({llm:d.Ik({tasks:d.YO(d.k5(["chat","quick","rag","embed"])).default([])}).optional(),kb:d.Ik({read:d.zM().optional(),write:d.zM().optional(),kinds:d.YO(d.Yj()).optional()}).optional(),fs:d.Ik({sandbox:d.eu(!0)}).optional(),web:d.Ik({fetch:d.Ik({domains:d.YO(d.Yj()).default([])}).optional(),search:d.zM().optional()}).optional(),audit:d.Ik({write:d.eu(!0).optional()}).optional(),workers:d.Ik({enabled:d.eu(!0),maxConcurrent:d.ai().int().min(1).max(8).default(1).optional()}).optional(),agent:d.Ik({invoke:d.eu(!0)}).optional(),workflow:d.Ik({read:d.zM().optional(),run:d.zM().optional()}).optional(),images:d.Ik({generate:d.zM().optional(),search:d.zM().optional(),attach:d.zM().optional(),domains:d.YO(d.Yj().regex(/^(\*\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i,"must be a bare hostname, optional leading '*.'")).max(20).optional()}).optional(),sessions:d.Ik({search:d.zM().optional()}).optional()}).default({}),g=d.Ik({key:d.Yj().min(1).max(64).regex(/^[A-Z][A-Z0-9_]*$/,"secret key must be UPPER_SNAKE_CASE (e.g. OPENAI_API_KEY)"),label:d.Yj().min(1).max(120),description:d.Yj().max(2e3).default(""),required:d.zM().default(!1)}),h=d.Ik({name:d.Yj().min(1).max(64).regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/,"action name must be a JS identifier"),entry:d.Yj().min(1).regex(/^[A-Za-z0-9_\-./]+\.ts$/,"entry must be a relative .ts path"),timeoutMs:d.ai().int().min(1e3).max(6e5).default(3e4)}),i=d.Ik({type:d.k5(["agent","github","archive","mcp","builtin"]),origin:d.Yj().optional(),fetchedAt:d.Yj(),installedBy:d.Yj().optional()}),j=d.Ik({id:e,name:d.Yj().min(1).max(120),description:d.Yj().max(2e3).default(""),version:d.Yj().regex(/^\d+\.\d+\.\d+(?:[-+][\w.]+)?$/,"version must be semver"),author:d.Yj().max(120).optional(),homepage:d.Yj().url().optional(),icon:d.Yj().max(64e3).regex(/^(?:lucide:[A-Za-z0-9_-]+|data:image\/(?:png|svg\+xml|jpeg);base64,[A-Za-z0-9+/=]+)$/,"icon must be 'lucide:Name' or a base64 data URL").optional(),category:d.Yj().max(64).optional(),ui:d.Yj().min(1).max(120).default("ui.tsx"),serverActions:d.YO(h).default([]),secrets:d.YO(g).default([]),mcpServers:d.YO(d.Yj().min(1).max(64)).default([]),permissions:f,source:i.optional(),card:d.Ik({kind:d.k5(["markdown","news-list","link-list","kpi","checklist","quote","kb-pinned","progress","image","stat-table","map","action-list"]),title:d.Yj().min(1).max(120).optional(),description:d.Yj().max(280).optional(),data:d.g1(d.Yj(),d.L5()).default({}),action:d.Yj().regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/,"action must be a serverActions name").optional(),refresh:d.k5(["manual","hourly","daily","weekly"]).optional()}).optional(),extensions:d.Ik({slashCommands:d.YO(d.Ik({id:d.Yj().min(1).max(64).regex(/^[a-z][a-z0-9-]*$/),trigger:d.Yj().min(1).max(40).regex(/^[a-z][a-z0-9-]*$/),label:d.Yj().min(1).max(60),description:d.Yj().max(280),icon:d.Yj().min(1).max(40),kind:d.k5(["agent-mode","direct"]),usage:d.Yj().max(200).default(""),allowEmpty:d.zM().default(!1),promptBlock:d.Yj().max(2e4).optional(),directAction:d.Yj().max(120).optional()})).default([]),skills:d.YO(d.Ik({id:d.Yj().min(1).max(64).regex(/^[a-z][a-z0-9-]*$/),title:d.Yj().min(1).max(120),description:d.Yj().max(280),instructions:d.Yj().min(1).max(5e4),workflowId:d.Yj().max(120).optional()})).default([]),workflows:d.YO(d.Ik({id:d.Yj().min(1).max(64).regex(/^[a-z][a-z0-9-]*$/),label:d.Yj().min(1).max(120),description:d.Yj().max(280).optional(),trigger:d.k5(["manual","hourly","daily","weekly"]),steps:d.YO(d.Ik({id:d.Yj().min(1).max(64),kind:d.Yj().min(1).max(40),label:d.Yj().min(1).max(120),params:d.g1(d.Yj(),d.L5()).default({})})).min(1).max(20)})).default([]),systemPromptAddendum:d.Yj().max(2e4).optional()}).default({slashCommands:[],skills:[],workflows:[]})}),k=d.g1(d.Yj(),d.Yj()).superRefine((a,b)=>{for(let c of(!("manifest.json"in a||a["manifest.json"]),Object.keys(a)))(c.startsWith("/")||c.includes(".."))&&b.addIssue({code:"custom",message:`Unsafe file path: ${c}`})});d.Ik({scope:d.k5(["global","project"]),rootId:d.Yj().optional(),manifest:j,files:k,source:i})},20243:(a,b,c)=>{"use strict";c.d(b,{Rs:()=>h,Zn:()=>i,v:()=>k,wj:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(54287);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}},20583:(a,b,c)=>{"use strict";c.d(b,{$:()=>i});var d=c(64173);c(17240);var e=c(20483),f=c(91520),g=c(91344);let h=(0,e.F)("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function i({className:a,variant:b="default",size:c="default",asChild:e=!1,...i}){let j=e?f.bL:"button";return(0,d.jsx)(j,{"data-slot":"button","data-variant":b,"data-size":c,className:(0,g.cn)(h({variant:b,size:c,className:a})),...i})}},20938:(a,b,c)=>{"use strict";c.d(b,{GC:()=>l,az:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(73652);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(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}},22421:(a,b,c)=>{"use strict";c.d(b,{Bd:()=>p,Ed:()=>o,eJ:()=>q,vT:()=>i,vd:()=>n});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){return(await k(a)).items}async function n(a){return(await m(a)).filter(a=>"pending"===a.status)}async function o(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}async function p(a,b,c){let d=await k(a),e=d.items.findIndex(a=>a.id===b);return e<0?null:(d.items[e]={...d.items[e],status:"approved",topicId:c},await l(a,d),d.items[e])}async function q(a,b){let c=await k(a),d=c.items.findIndex(a=>a.id===b);return d<0?null:(c.items[d]={...c.items[d],status:"rejected"},await l(a,c),c.items[d])}},24570:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{l:()=>s,p:()=>r});var e=c(73024),f=c(76760),g=c.n(f),h=c(24576),i=c(17640),j=c(99048),k=c(18542),l=c(74853),m=c(13474),n=a([j,k]);[j,k]=n.then?(await n)():n;let r=[{id:"system:memory-rollup",label:"Memory rollup",trigger:"weekly",run:o},{id:"system:sessions-index",label:"Index sessions for search",trigger:"hourly",run:q}],s={hourly:36e5,daily:864e5,weekly:6048e5};async function o(){let a=await (0,h.qV)().catch(()=>[]),b=[];for(let c of a){let a=await p(c).catch(()=>[]);b.push(...a)}if(b.length<4)return{ok:!0,detail:`${b.length} journal entries across all roots — skipping rollup (need ≥4).`};b.sort((a,b)=>a.date<b.date?1:-1);let c=b.slice(0,60),d=["You're summarising the user's last 7 days from their journal entries across every Reflex Space.",`Output STRICT plain text. ≤25 lines. One fact per line, third-person about the user.`,`Cover: recurring themes, mood arc, unresolved threads, notable wins. Quote the user's own phrasing for one or two themes — sparingly. No greetings, no markdown headers, no preamble — straight into the bullets.`,"If the entries don't span 7 days yet, summarise what's there honestly.","","## Journal entries (newest first)",...c.map(a=>{var b,c;return`### ${a.date} \xb7 ${a.rootName} \xb7 ${a.title}
75
- ${b=a.body,c=400,b.length<=400?b:b.slice(0,c)+"…"}`})].join("\n");try{let b=await (0,i.M)(),e=(await (0,j.T)(b.assignments.quick,d,{timeoutMs:9e4})??"").trim();if(!e)return{ok:!1,detail:"empty completion"};let f=e.split("\n").map(a=>a.trim()).filter(Boolean).slice(0,25).join("\n");return await (0,k.xP)({scope:"global"},"RECENT","replace",{content:f}),{ok:!0,detail:`rolled up ${c.length} entries from ${a.length} Spaces`}}catch(a){return{ok:!1,detail:a instanceof Error?a.message:String(a)}}}async function p(a){let b,c=g().join((0,m.FF)(a.path),"journal");try{b=(await e.promises.readdir(c)).filter(a=>a.toLowerCase().endsWith(".md"))}catch{return[]}b.sort().reverse(),b=b.slice(0,14);let d=g().basename(a.path)||a.id,f=[];for(let a of b)try{let b=await e.promises.readFile(g().join(c,a),"utf8"),{title:h,date:i,body:j}=function(a){let b=/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(a);if(!b)return{body:a.trim()};let c=b[1],d=b[2].trim(),e=/^title:\s*(.+)$/m.exec(c)?.[1]?.replace(/^"|"$/g,""),f=/^date:\s*(.+)$/m.exec(c)?.[1]?.replace(/^"|"$/g,"");return{...e?{title:e.trim()}:{},...f?{date:f.trim()}:{},body:d}}(b);f.push({rootName:d,date:i??function(a){let b=/^(\d{4}-\d{2}-\d{2})/.exec(a);return b?b[1]:null}(a)??"",title:h??a,body:j})}catch{}return f}async function q(){try{let a=await (0,l.tH)();return{ok:!0,detail:`scanned ${a.scanned}, upserted ${a.upserted}, removed ${a.removed}`}}catch(a){return{ok:!1,detail:a instanceof Error?a.message:String(a)}}}d()}catch(a){d(a)}})},26380:(a,b,c)=>{"use strict";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(87841),j=c.n(i),k=c(54287),l=c(19319),m=c(51872);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):[]}},27456:(a,b,c)=>{"use strict";c.d(b,{F:()=>g});var d=c(64173);c(17240);var e=c(6912),f=c(91344);function g({className:a,children:b,...c}){return(0,d.jsxs)(e.Root,{"data-slot":"scroll-area",className:(0,f.cn)("relative",a),...c,children:[(0,d.jsx)(e.Viewport,{"data-slot":"scroll-area-viewport",className:"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",children:b}),(0,d.jsx)(h,{}),(0,d.jsx)(e.Corner,{})]})}function h({className:a,orientation:b="vertical",...c}){return(0,d.jsx)(e.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:b,className:(0,f.cn)("flex touch-none p-px transition-colors select-none","vertical"===b&&"h-full w-2.5 border-l border-l-transparent","horizontal"===b&&"h-2.5 flex-col border-t border-t-transparent",a),...c,children:(0,d.jsx)(e.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"relative flex-1 rounded-full bg-border"})})}},28548:(a,b,c)=>{"use strict";c.d(b,{AI:()=>m,PM:()=>l,Qs:()=>o,Y7:()=>k,iP:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(73652),h=c(61495);let i=f().join((0,g._)(),"prompts");function j(a){return f().join(i,`${a}.md`)}function k(a){return j(a)}async function l(a){let b=j(a);try{return await d.promises.readFile(b,"utf8")}catch(a){var c;if(!("object"==typeof(c=a)&&null!==c&&"code"in c&&"ENOENT"===c.code))throw a}return await d.promises.mkdir(i,{recursive:!0}),await d.promises.writeFile(b,h.EE[a],"utf8"),h.EE[a]}async function m(a,b){await d.promises.mkdir(i,{recursive:!0}),await d.promises.writeFile(j(a),b,"utf8")}async function n(a){return await m(a,h.EE[a]),h.EE[a]}function o(a){if(!h._W.includes(a))throw Error(`Unknown template: ${a}`);return a}},30516:(a,b,c)=>{"use strict";c.d(b,{P:()=>l});var d=c(56149);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={"text-template":e,"http-request":f,"web-fetch":g,"ask-agent":h,"kb-write":i,"utility-call":j,"image-generate":d.Ik({prompt:d.Yj().min(1,"prompt is required"),provider:d.k5(["gemini","codex"]).optional(),size:d.Yj().optional(),aspectRatio:d.Yj().optional()}),"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()})};function l(a,b){let c=k[a];return c?c.parse(b):b}},30849:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>d});let d=(0,c(54491).registerClientReference)(function(){throw Error("Attempted to call AppSidebar() from the server but AppSidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/reflex-agent/reflex-agent/app/_components/app-sidebar.tsx","AppSidebar")},35616:(a,b,c)=>{Promise.resolve().then(c.bind(c,76172)),Promise.resolve().then(c.bind(c,99668)),Promise.resolve().then(c.bind(c,54225))},35961:(a,b,c)=>{"use strict";c.d(b,{collectExtensions:()=>e});var d=c(8118);async function e(a){let b=await (0,d.listUtilities)(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}}},36017:(a,b,c)=>{"use strict";c.d(b,{D:()=>k,M:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(78555);let h=(0,c(73652)._)(),i=f().join(h,"settings.json");async function j(){try{let a=await d.promises.readFile(i,"utf8"),b=g.ht.safeParse(JSON.parse(a));if(!b.success)return g.a$;return b.data}catch(b){var a;if("object"==typeof(a=b)&&null!==a&&"code"in a&&"ENOENT"===a.code)return g.a$;throw b}}async function k(a){let b=g.ht.parse(a);await d.promises.mkdir(h,{recursive:!0}),await d.promises.writeFile(i,JSON.stringify(b,null,2)+"\n","utf8")}},36724:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L:()=>j});var e=c(56942),f=c(3724),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,84579)),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,84579));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,8118)),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(9861),c.e(4031)]).then(c.bind(c,49556));return l({utility:j,action:k,args:g,parentCorrelationId:`workflow:${b.workflow.id}`})}};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)}})},44427:()=>{},45925:(a,b,c)=>{"use strict";c.d(b,{L:()=>e});var d=c(3265);let e=(0,d.createServerReference)("60f16adfda42bc1297a7276d1dc3c3708f7f5bc4d6",d.callServer,void 0,d.findSourceMapURL,"deleteTopicAction")},46013:(a,b,c)=>{"use strict";c.d(b,{Separator:()=>g});var d=c(64173);c(17240);var e=c(42572),f=c(91344);function g({className:a,orientation:b="horizontal",decorative:c=!0,...g}){return(0,d.jsx)(e.b,{"data-slot":"separator",decorative:c,orientation:b,className:(0,f.cn)("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",a),...g})}},49410:(a,b,c)=>{"use strict";c.d(b,{bG:()=>m,hI:()=>q,kA:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(73652);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
73
+ ${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.M)()).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.T)(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)}})},3043:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{w:()=>j});var e=c(24576),f=c(13295),g=c(24058),h=c(24570),i=a([g,h]);[g,h]=i.then?(await i)():i;let p={manual:null,hourly:36e5,daily:864e5,weekly:6048e5};function j(){if(globalThis.__reflexWorkflowScheduler)return;let a={running:!1,lastFired:new Map,timer:setInterval(()=>{k(a)},6e4)};setTimeout(()=>void k(a),5e3).unref?.(),a.timer.unref?.(),globalThis.__reflexWorkflowScheduler=a}async function k(a){if(!a.running){a.running=!0;try{for(let b of(await (0,e.qV)().catch(()=>[])))try{await m(a,b)}catch(a){console.error(`[scheduler] root ${b.id} failed: ${a instanceof Error?a.message:String(a)}`)}await l(a)}finally{a.running=!1}}}async function l(a){for(let b of h.p){let c=h.l[b.trigger];if(!c)continue;let d=`__system__::${b.id}`,e=a.lastFired.get(d)??null;if(!(null!==e&&Date.now()-e<c)){a.lastFired.set(d,Date.now());try{let a=await b.run();!a.ok&&a.detail&&console.warn(`[scheduler] ${b.id} returned non-ok: ${a.detail}`)}catch(a){console.error(`[scheduler] ${b.id} failed: ${a instanceof Error?a.message:String(a)}`)}}}}async function m(a,b){let c=await (0,f.listWorkflows)(b.path).catch(()=>[]),d=await o(b.id);for(let f of function(a,b){let c=new Set(a.map(a=>a.id));return[...a,...b.filter(a=>!c.has(a.id))]}(c,d)){var e,h;let c=p[f.trigger];if(!c||!1===f.enabled)continue;let d=(e=b.id,h=f.id,`${e}::${h}`),i=a.lastFired.get(d)??await n(b.path,f.id);if(!(null!==i&&Date.now()-i<c)){a.lastFired.set(d,Date.now());try{await (0,g.runWorkflow)(b.id,f.id)}catch(a){console.error(`[scheduler] ${b.id}/${f.id} failed: ${a instanceof Error?a.message:String(a)}`)}}}}async function n(a,b){let c=await (0,f.v)(a,b,1).catch(()=>[]);if(0===c.length)return null;let d=Date.parse(c[0].startedAt);return Number.isFinite(d)?d:null}async function o(a){try{let{collectExtensions:b}=await Promise.resolve().then(c.bind(c,14952));return(await b({rootId:a})).workflows??[]}catch{return[]}}d()}catch(a){d(a)}})},3724:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{runHeadlessAgent:()=>l});var e=c(93554),f=c(51021),g=c(20243),h=c(5492),i=c(36017),j=c(53905),k=a([e,f]);async function l(a){let b=await (0,j.Zn)(a.rootId);if(!b)throw Error(`runHeadlessAgent: root not found: ${a.rootId}`);let c=await (0,i.M)(),d=c.assignments.chat,k=await (0,h.OY)({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.W)({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.wj)(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)}})},3890:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DW:()=>u,u7:()=>r,uX:()=>v,zm:()=>s});var e=c(73745);c(66493);var f=c(76760),g=c.n(f),h=c(73024),i=c(53905),j=c(19319),k=c(5492),l=c(20243),m=c(8118),n=c(1947),o=c(81483),p=c(63781),q=a([n]);async function r(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,j.dj)(b.path);return{ok:!0,sections:function(a){let b=[],c=new Map;for(let e of a){let a=e.rel.split("/");if(1===a.length){var d;b.push({rel:(d=e).rel,label:d.meta.title??d.rel,isDir:!1,fileRel:d.rel});continue}let f=a[0],g=c.get(f)??[];g.push(e),c.set(f,g)}let e=[];for(let a of(b.sort(w),e.push(...b),[...c.keys()].sort())){let b=(c.get(a)??[]).map(a=>{let b=a.rel.split("/").slice(1).join("/");return{rel:a.rel,label:a.meta.title??g().basename(b),isDir:!1,fileRel:a.rel}}).sort((a,b)=>"INDEX.md"===g().basename(a.rel)?-1:"INDEX.md"===g().basename(b.rel)?1:a.label.localeCompare(b.label)),d=b.find(a=>"INDEX.md"===g().basename(a.rel)),f=d?.label??a;e.push({rel:`${a}/`,label:f,isDir:!0,children:b})}return e}(c)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function s(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,k.hk)(b.path)).filter(a=>!a.meta.helperFor&&!a.meta.taskId),d=await t(b.path,c);return{ok:!0,topics:d.map(a=>({id:a.meta.id,title:a.meta.title,updatedAt:a.meta.updatedAt}))}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a,b){let c=await Promise.all(b.map(async b=>{if(b.preview.trim())return!0;try{return(await h.promises.stat((0,l.Rs)(a,b.meta.id))).size>0}catch{return!1}}));return b.filter((a,b)=>c[b])}async function u(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,m.listUtilities)({rootId:a,scope:"project"}),d=await (0,k.hk)(b.path),e=new Map;for(let a of d){let b=a.meta.helperFor;if(!b)continue;let c=e.get(b)??[];c.push(a),e.set(b,c)}let f=[];for(let a of c){let c=e.get(a.manifest.id)??[],d=await t(b.path,c);f.push({id:a.manifest.id,name:a.manifest.name,scope:a.scope,...a.rootId?{rootId:a.rootId}:{},...a.manifest.icon?{icon:a.manifest.icon}:{},threads:d.map(a=>({id:a.meta.id,title:a.meta.title,updatedAt:a.meta.updatedAt}))})}return f.sort((a,b)=>a.name.localeCompare(b.name)),{ok:!0,utilities:f}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function v(a){try{let b=await (0,i.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,n.ab)({scope:"project",rootPath:b.path}),d=o.cs.map(a=>({file:a,description:o.lh[a],lines:c[a].lines,empty:!c[a].content}));return{ok:!0,files:d}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}function w(a,b){let c=g().basename(a.rel),d=g().basename(b.rel);return"INDEX.md"===c?-1:"INDEX.md"===d?1:a.label.localeCompare(b.label)}n=(q.then?(await q)():q)[0],(0,p.D)([r,s,u,v]),(0,e.A)(r,"405eec77015823504c4d87c03db040d53fa326e6e4",null),(0,e.A)(s,"404d285de9f75afe539d9c23e180e4b21e3e7f6d72",null),(0,e.A)(u,"4015f6e0e4760a82616dc12e15576087d7b6702fe1",null),(0,e.A)(v,"40063ad620375e57329871a0f9124a04c117ad5cc3",null),d()}catch(a){d(a)}})},5053:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,53869,23)),Promise.resolve().then(c.t.bind(c,85684,23)),Promise.resolve().then(c.t.bind(c,89338,23)),Promise.resolve().then(c.t.bind(c,65597,23)),Promise.resolve().then(c.t.bind(c,41833,23)),Promise.resolve().then(c.t.bind(c,63921,23)),Promise.resolve().then(c.t.bind(c,25211,23)),Promise.resolve().then(c.t.bind(c,19908,23)),Promise.resolve().then(c.bind(c,49289))},5492:(a,b,c)=>{"use strict";c.d(b,{OY:()=>u,PF:()=>r,_9:()=>t,dL:()=>v,do:()=>w,eF:()=>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(87841),j=c.n(i),k=c(54287);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}:{}},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){let b=function(){let a=new Date().toISOString().slice(0,10),b=h().randomBytes(4).toString("hex");return`${a}-${b}`}(),c=new Date().toISOString(),e={id:b,title:function(a){let b=a.trim().split(/\r?\n/)[0]??"Untitled";return b.length>80?b.slice(0,77)+"…":b}(a.firstMessage),createdAt:c,updatedAt:c,...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}:{}};return await d.promises.mkdir(l(a.root),{recursive:!0}),await d.promises.writeFile(m(a.root,b),y(e,""),"utf8"),{meta:e,messages:[],abs:m(a.root,b)}}async function v(a,b,c){let e=await p(a,b);if(!e)throw Error(`Topic not found: ${b}`);e.meta.title=c,e.meta.updatedAt=new Date().toISOString();let f=e.messages.map(a=>`## ${a.role}
74
+ ${a.body}`).join("\n\n")+"\n";await d.promises.writeFile(m(a,b),y(e.meta,f),"utf8")}async function w(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 x(d),removedEvents:await x(e)}}async function x(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}}function y(a,b){return j().stringify(b,a)}},6240:(a,b,c)=>{Promise.resolve().then(c.bind(c,30849)),Promise.resolve().then(c.bind(c,95422)),Promise.resolve().then(c.bind(c,11935))},8118:(a,b,c)=>{"use strict";c.d(b,{Od:()=>m,gd:()=>s,getUtility:()=>r,jc:()=>u,listUtilities:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(53905),h=c(73652),i=c(54287),j=c(20050);let k=f().join((0,h._)(),"utilities");function l(a){return f().join((0,i.FF)(a),"utilities")}function m(a,b,c){if("global"===a)return f().join(k,b);if(!c)throw Error("project-scoped utility requires rootPath");return f().join(l(c),b)}async function n(a={}){let b=[];if(a.scope&&"global"!==a.scope||b.push(...await o("global",k)),!a.scope||"project"===a.scope)for(let c of a.rootId?await (0,g.Zn)(a.rootId).then(a=>a?[a]:[]).catch(()=>[]):await (0,g.qV)().catch(()=>[])){let a=l(c.path);b.push(...(await o("project",a,c.id)).map(a=>({...a,rootId:c.id})))}return b}async function o(a,b,c){let e;try{e=await d.promises.readdir(b,{withFileTypes:!0})}catch{return[]}let g=[];for(let d of e){if(!d.isDirectory())continue;let e=f().join(b,d.name),h=await p(e);h&&g.push({scope:a,...c?{rootId:c}:{},dir:e,manifest:h,bundleAvailable:await q(f().join(e,"bundle.js"))})}return g}async function p(a){try{let b=await d.promises.readFile(f().join(a,"manifest.json"),"utf8"),c=j.pL.safeParse(JSON.parse(b));return c.success?c.data:null}catch{return null}}async function q(a){try{return await d.promises.access(a),!0}catch{return!1}}async function r(a,b,c){let d,e;if("global"===a)d=k;else{if(!c)return null;let a=await (0,g.Zn)(c).catch(()=>null);if(!a)return null;d=l(a.path),e=a.id}let h=f().join(d,b),i=await p(h);return i?{scope:a,...e?{rootId:e}:{},dir:h,manifest:i,bundleAvailable:await q(f().join(h,"bundle.js"))}:null}async function s(a){let b;if(a.manifest.id!==a.manifest.id.toLowerCase())throw Error("manifest.id must be lowercase kebab-case");if("project"===a.scope){if(!a.rootId)throw Error("project-scoped install requires rootId");let c=await (0,g.Zn)(a.rootId);if(!c)throw Error(`unknown rootId: ${a.rootId}`);b=c.path}let c=m(a.scope,a.manifest.id,b);for(let[e,g]of(await d.promises.mkdir(c,{recursive:!0}),await d.promises.mkdir(f().join(c,"data"),{recursive:!0}),Object.entries(a.files))){if("manifest.json"===e)continue;let c=function(a,b,c,d){let e=m(a,b,d),g=f().resolve(e,c),h=f().relative(e,g);if(h.startsWith("..")||f().isAbsolute(h))throw Error(`refused path outside utility dir: ${c}`);return g}(a.scope,a.manifest.id,e,b);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,g,"utf8")}let e={...a.manifest,source:a.source,serverActions:function(a,b){let c=new Map(a.map(a=>[a.name,a]));for(let a of b){let b=/^actions\/([^/_][^/]*)\.ts$/.exec(a);if(!b)continue;let d=b[1];/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(d)&&(c.has(d)||c.set(d,{name:d,entry:a,timeoutMs:3e4}))}return[...c.values()]}(a.manifest.serverActions,Object.keys(a.files))};if(await d.promises.writeFile(f().join(c,"manifest.json"),JSON.stringify(e,null,2)+"\n","utf8"),"project"===a.scope&&a.rootId&&b&&e.card)try{await t(b,a.scope,e)}catch(a){console.error("[utility install] card seed failed:",a)}return{scope:a.scope,...a.rootId?{rootId:a.rootId}:{},dir:c,manifest:e,bundleAvailable:!1}}async function t(a,b,d){if(!d.card)return;let{buildRecord:e,readLayout:f,reconcileLayout:g,writeLayout:h,writeWidget:i,listWidgets:j}=await Promise.resolve().then(c.bind(c,69509)),{SYSTEM_WIDGET_IDS:k}=await Promise.resolve().then(c.bind(c,1405)),l=`utility:${d.id}`,m=e({id:l,title:d.card.title??d.name,...d.card.description?{description:d.card.description}:{},...d.card.action&&d.card.refresh?{refresh:d.card.refresh}:{},payload:{kind:"utility-card",data:{utilityId:d.id,utilityScope:b,inner:{kind:d.card.kind,data:d.card.data,...d.card.title?{title:d.card.title}:{},...d.card.description?{description:d.card.description}:{}}}}});await i(a,m);let n=await f(a);n.order.includes(l)||n.hidden.includes(l)||(n.hidden=[...n.hidden,l]);let o=g(n,(await j(a)).map(a=>a.id),k);await h(a,o)}async function u(a,b,c){let e;if("project"===a){if(!c)throw Error("project-scoped remove requires rootId");let a=await (0,g.Zn)(c);if(!a)return;e=a.path}let f=m(a,b,e);await d.promises.rm(f,{recursive:!0,force:!0})}},13415:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L4:()=>r,OQ:()=>s,Pd:()=>t,g3:()=>o,h$:()=>q,nY:()=>p});var e=c(73745);c(66493);var f=c(65326),g=c(53905),h=c(5492),i=c(36017),j=c(99353),k=c(51021),l=c(93554),m=c(63781),n=a([j,k,l]);async function o(a,b,c=[],d){try{let e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};if(!b.trim()&&0===c.length)return{ok:!1,error:"Empty prompt"};let j=await (0,i.M)(),l=j.assignments.chat,m=b.trim()||c[0]?.name||"Untitled",n=await (0,h.OY)({root:e.path,firstMessage:m,harness:l.harness,model:l.model,language:j.language}),o=await (0,k.W)({rootId:a,topicId:n.meta.id,message:b.trim(),attachments:c,...d?{focusFile:d}:{}});if("error"in o)return{ok:!1,error:o.error};return(0,f.revalidatePath)(`/roots/${a}`),{ok:!0,topicId:n.meta.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,h.hk)(b.path)).filter(a=>!a.meta.helperFor);return{ok:!0,topics:c}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function q(a,b,c){try{let d,e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};let k=await (0,i.M)(),l=k.assignments.quick,m=k.language,n=["Write a short, descriptive title for the following user question.",`Language: ${m}.`,"Constraints:\n - 3 to 7 words\n - no quotes, no trailing punctuation",` - no leading prefixes like "Title:" — just the title text`,"\nUser question:",c].join("\n"),o=(d=(d=(d=(d=(await (0,j.T)(l,n,{timeoutMs:25e3})).trim()).replace(/^```[a-z]*\s*([\s\S]*?)\s*```$/i,"$1")).replace(/^['"«»“”‘’`]+|['"«»“”‘’`]+$/g,"")).replace(/^\s*title\s*:\s*/i,""),(d=(d=d.split(/\r?\n/)[0]?.trim()??"").replace(/[.!?…]+$/u,"").trim()).length>80&&(d=d.slice(0,77).trimEnd()+"…"),d);if(!o)return{ok:!1,error:"Empty title from model"};return await (0,h.dL)(e.path,b,o),(0,f.revalidatePath)(`/roots/${a}`),(0,f.revalidatePath)(`/roots/${a}/chat/${b}`),{ok:!0,title:o}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};return await l.z.stopTopic(b),await (0,h.do)(c.path,b),(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){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};return await (0,h._9)(c.path,b,"abandoned"),(0,f.revalidatePath)(`/roots/${a}/chat/${b}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a){try{let b=await (0,g.Zn)(a.rootId);if(!b)return{ok:!1,error:"Root not found"};let c=a.question.trim();if(!c)return{ok:!1,error:"Empty question"};let d=await (0,i.M)(),e=d.assignments.chat,f=await (0,h.OY)({root:b.path,firstMessage:c,harness:e.harness,model:e.model,language:d.language,helperFor:a.utilityId}),j=(a.context??"").trim(),l=j?[`[${a.utilityName} context]`,j.length>4e3?j.slice(0,4e3)+"\n…[truncated]":j,"[/context]\n",c].join("\n"):c,m=await (0,k.W)({rootId:a.rootId,topicId:f.meta.id,message:l,attachments:[]});if("error"in m)return{ok:!1,error:m.error};return{ok:!0,topicId:f.meta.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[j,k,l]=n.then?(await n)():n,(0,m.D)([o,p,q,r,s,t]),(0,e.A)(o,"78c3f2500c42332a8c114501958483c62375d5516b",null),(0,e.A)(p,"405ba248f3b8f498b3cf29d89a836c4582f7963f63",null),(0,e.A)(q,"7044d226c44bc09b7f8a89033c20eab29f5d5002f9",null),(0,e.A)(r,"60aca7b73665ef85604f648bbe1616034cd83463a3",null),(0,e.A)(s,"60fecb3b35cfccc39f4a7fc774f2e9dacb58ff6e92",null),(0,e.A)(t,"408c0a7dd30a0bd18e85787c67a8bc6f8fc6163ba5",null),d()}catch(a){d(a)}})},14981:(a,b,c)=>{"use strict";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}}},15754:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$z:()=>l,MU:()=>m,Tc:()=>k});var e=c(73745);c(66493);var f=c(53905),g=c(20243),h=c(93554),i=c(63781),j=a([h]);async function k(a,b){try{let c=await (0,f.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await (0,g.wj)(c.path,b);return{ok:!0,events:d,active:h.z.isActive(b)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function l(a){try{return{ok:!0,agents:h.z.list(a)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function m(a){try{let b=h.z.get(a);if(!b)return{ok:!1,error:"Agent not found"};return{ok:!0,agent:b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}h=(j.then?(await j)():j)[0],(0,i.D)([k,l,m]),(0,e.A)(k,"60df3de3deb95f983017fdc2bba70bf2726dc3d05a",null),(0,e.A)(l,"40e724d0266b2a3a906045e1cd0703077a4ac6ecbc",null),(0,e.A)(m,"403f7b0d85cf7c88c82a18d0e5ffcbc8402c96524e",null),d()}catch(a){d(a)}})},18809:(a,b,c)=>{"use strict";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}},19319:(a,b,c)=>{"use strict";c.d(b,{IK:()=>l,dj:()=>k});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(54287);async function j(a){let b=(0,i.FF)(a);return m(b,b)}async function k(a){let b=await j(a);return await Promise.all(b.map(async a=>({...a,meta:await n(a.abs)})))}async function l(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 m(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(m(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 n(a){try{let b=await d.promises.readFile(a,"utf8"),c=h()(b).data;return{...void 0!==o(c.title)?{title:o(c.title)}:{},...void 0!==p(c.version)?{version:p(c.version)}:{},...void 0!==o(c.date)?{date:o(c.date)}:{},...void 0!==o(c.kind)?{kind:o(c.kind)}:{},data:c}}catch{return{data:{}}}}function o(a){return"string"==typeof a?a:a instanceof Date?a.toISOString().slice(0,10):void 0}function p(a){if("string"==typeof a||"number"==typeof a)return a}},20050:(a,b,c)=>{"use strict";c.d(b,{pL:()=>j});var d=c(56149);let e=d.Yj().min(1).max(80).regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"id must be kebab-case (e.g. furniture-gen)"),f=d.Ik({llm:d.Ik({tasks:d.YO(d.k5(["chat","quick","rag","embed"])).default([])}).optional(),kb:d.Ik({read:d.zM().optional(),write:d.zM().optional(),kinds:d.YO(d.Yj()).optional()}).optional(),fs:d.Ik({sandbox:d.eu(!0)}).optional(),web:d.Ik({fetch:d.Ik({domains:d.YO(d.Yj()).default([])}).optional(),search:d.zM().optional()}).optional(),audit:d.Ik({write:d.eu(!0).optional()}).optional(),workers:d.Ik({enabled:d.eu(!0),maxConcurrent:d.ai().int().min(1).max(8).default(1).optional()}).optional(),agent:d.Ik({invoke:d.eu(!0)}).optional(),workflow:d.Ik({read:d.zM().optional(),run:d.zM().optional()}).optional(),images:d.Ik({generate:d.zM().optional(),search:d.zM().optional(),attach:d.zM().optional(),domains:d.YO(d.Yj().regex(/^(\*\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i,"must be a bare hostname, optional leading '*.'")).max(20).optional()}).optional(),sessions:d.Ik({search:d.zM().optional()}).optional()}).default({}),g=d.Ik({key:d.Yj().min(1).max(64).regex(/^[A-Z][A-Z0-9_]*$/,"secret key must be UPPER_SNAKE_CASE (e.g. OPENAI_API_KEY)"),label:d.Yj().min(1).max(120),description:d.Yj().max(2e3).default(""),required:d.zM().default(!1)}),h=d.Ik({name:d.Yj().min(1).max(64).regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/,"action name must be a JS identifier"),entry:d.Yj().min(1).regex(/^[A-Za-z0-9_\-./]+\.ts$/,"entry must be a relative .ts path"),timeoutMs:d.ai().int().min(1e3).max(6e5).default(3e4)}),i=d.Ik({type:d.k5(["agent","github","archive","mcp","builtin"]),origin:d.Yj().optional(),fetchedAt:d.Yj(),installedBy:d.Yj().optional()}),j=d.Ik({id:e,name:d.Yj().min(1).max(120),description:d.Yj().max(2e3).default(""),version:d.Yj().regex(/^\d+\.\d+\.\d+(?:[-+][\w.]+)?$/,"version must be semver"),author:d.Yj().max(120).optional(),homepage:d.Yj().url().optional(),icon:d.Yj().max(64e3).regex(/^(?:lucide:[A-Za-z0-9_-]+|data:image\/(?:png|svg\+xml|jpeg);base64,[A-Za-z0-9+/=]+)$/,"icon must be 'lucide:Name' or a base64 data URL").optional(),category:d.Yj().max(64).optional(),ui:d.Yj().min(1).max(120).default("ui.tsx"),serverActions:d.YO(h).default([]),secrets:d.YO(g).default([]),dependencies:d.g1(d.Yj().regex(/^(?:@[a-z0-9][\w.-]*\/)?[a-z0-9][\w.-]*$/i,"must be an npm package name"),d.Yj().min(1).max(64)).refine(a=>Object.keys(a).length<=30,"at most 30 dependencies").default({}),mcpServers:d.YO(d.Yj().min(1).max(64)).default([]),permissions:f,source:i.optional(),card:d.Ik({kind:d.k5(["markdown","news-list","link-list","kpi","checklist","quote","kb-pinned","progress","image","stat-table","map","action-list"]),title:d.Yj().min(1).max(120).optional(),description:d.Yj().max(280).optional(),data:d.g1(d.Yj(),d.L5()).default({}),action:d.Yj().regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/,"action must be a serverActions name").optional(),refresh:d.k5(["manual","hourly","daily","weekly"]).optional()}).optional(),extensions:d.Ik({slashCommands:d.YO(d.Ik({id:d.Yj().min(1).max(64).regex(/^[a-z][a-z0-9-]*$/),trigger:d.Yj().min(1).max(40).regex(/^[a-z][a-z0-9-]*$/),label:d.Yj().min(1).max(60),description:d.Yj().max(280),icon:d.Yj().min(1).max(40),kind:d.k5(["agent-mode","direct"]),usage:d.Yj().max(200).default(""),allowEmpty:d.zM().default(!1),promptBlock:d.Yj().max(2e4).optional(),directAction:d.Yj().max(120).optional()})).default([]),skills:d.YO(d.Ik({id:d.Yj().min(1).max(64).regex(/^[a-z][a-z0-9-]*$/),title:d.Yj().min(1).max(120),description:d.Yj().max(280),instructions:d.Yj().min(1).max(5e4),workflowId:d.Yj().max(120).optional()})).default([]),workflows:d.YO(d.Ik({id:d.Yj().min(1).max(64).regex(/^[a-z][a-z0-9-]*$/),label:d.Yj().min(1).max(120),description:d.Yj().max(280).optional(),trigger:d.k5(["manual","hourly","daily","weekly"]),steps:d.YO(d.Ik({id:d.Yj().min(1).max(64),kind:d.Yj().min(1).max(40),label:d.Yj().min(1).max(120),params:d.g1(d.Yj(),d.L5()).default({})})).min(1).max(20)})).default([]),systemPromptAddendum:d.Yj().max(2e4).optional()}).default({slashCommands:[],skills:[],workflows:[]})}),k=d.g1(d.Yj(),d.Yj()).superRefine((a,b)=>{for(let c of(!("manifest.json"in a||a["manifest.json"]),Object.keys(a)))(c.startsWith("/")||c.includes(".."))&&b.addIssue({code:"custom",message:`Unsafe file path: ${c}`})});d.Ik({scope:d.k5(["global","project"]),rootId:d.Yj().optional(),manifest:j,files:k,source:i})},20243:(a,b,c)=>{"use strict";c.d(b,{Rs:()=>h,Zn:()=>i,v:()=>k,wj:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(54287);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}},20583:(a,b,c)=>{"use strict";c.d(b,{$:()=>i});var d=c(64173);c(17240);var e=c(20483),f=c(91520),g=c(91344);let h=(0,e.F)("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function i({className:a,variant:b="default",size:c="default",asChild:e=!1,...i}){let j=e?f.bL:"button";return(0,d.jsx)(j,{"data-slot":"button","data-variant":b,"data-size":c,className:(0,g.cn)(h({variant:b,size:c,className:a})),...i})}},20938:(a,b,c)=>{"use strict";c.d(b,{GC:()=>l,az:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(73652);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(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}},21535:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>N});var d=c(64173),e=c(17240),f=c(1056),g=c.n(f),h=c(87671),i=c(44052),j=c(71813),k=c(69552),l=c(61636),m=c(15666),n=c(58405),o=c(58507),p=c(98463),q=c(68669),r=c(62261),s=c(53186),t=c(51348),u=c(97338),v=c(61808),w=c(88724),x=c(27456),y=c(46013),z=c(20583),A=c(3265);let B=(0,A.createServerReference)("405eec77015823504c4d87c03db040d53fa326e6e4",A.callServer,void 0,A.findSourceMapURL,"loadKbSectionsAction"),C=(0,A.createServerReference)("404d285de9f75afe539d9c23e180e4b21e3e7f6d72",A.callServer,void 0,A.findSourceMapURL,"loadTopicsAction"),D=(0,A.createServerReference)("40063ad620375e57329871a0f9124a04c117ad5cc3",A.callServer,void 0,A.findSourceMapURL,"loadSidebarMemoryAction"),E=(0,A.createServerReference)("4015f6e0e4760a82616dc12e15576087d7b6702fe1",A.callServer,void 0,A.findSourceMapURL,"loadSidebarUtilitiesAction"),F=(0,A.createServerReference)("00845f96527f3684e6def80bdc0f333ecb2b61ef09",A.callServer,void 0,A.findSourceMapURL,"listRootsAction"),G=(0,A.createServerReference)("40e724d0266b2a3a906045e1cd0703077a4ac6ecbc",A.callServer,void 0,A.findSourceMapURL,"listAgentsAction");var H=c(97162),I=c(29370),J=c(64527),K=c(65266),L=c(10082),M=c(89339);function N({initialRoots:a}){let b=(0,h.usePathname)(),c=(0,j.c)("app"),[f,i]=(0,e.useState)(a),n=(0,e.useCallback)(async()=>{let a=await F();a.ok&&i(a.entries)},[]);return((0,w.S9)(w.Zi.rootsChanged,n),b?.startsWith("/share/")||"/share"===b)?null:(0,d.jsxs)("aside",{className:"w-72 shrink-0 border-r bg-muted/30 flex flex-col",children:[(0,d.jsxs)("div",{className:"px-4 py-4 flex items-center gap-2 border-b",children:[(0,d.jsx)("span",{className:"reflex-gradient inline-flex h-7 w-7 items-center justify-center rounded-lg text-white shadow-sm",children:(0,d.jsx)(k.A,{className:"h-4 w-4"})}),(0,d.jsxs)("div",{className:"leading-tight",children:[(0,d.jsx)(g(),{href:"/",className:"text-sm font-semibold tracking-tight hover:underline",children:"Reflex"}),(0,d.jsx)("div",{className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:"knowledge base"})]})]}),(0,d.jsx)(x.F,{className:"flex-1",children:(0,d.jsxs)("nav",{className:"px-2 pt-3 pb-6",children:[(0,d.jsx)("div",{className:"px-2 mb-1 text-[10px] uppercase tracking-wider text-muted-foreground",children:c("sidebar.spaces")}),0===f.length?(0,d.jsx)("div",{className:"px-2 py-3 text-xs text-muted-foreground",children:c("sidebar.empty")}):(0,d.jsx)("ul",{className:"space-y-0.5",children:f.map(a=>(0,d.jsx)(O,{root:a,active:b?.startsWith(`/roots/${a.id}`)??!1},a.id))}),(0,d.jsx)("div",{className:"mt-2 px-2",children:(0,d.jsx)(z.$,{asChild:!0,variant:"ghost",size:"sm",className:"h-7 w-full justify-start text-xs",children:(0,d.jsxs)(g(),{href:"/roots/new",children:[(0,d.jsx)(l.A,{className:"mr-1 h-3.5 w-3.5"})," ",c("sidebar.addSpace")]})})})]})}),(0,d.jsx)(y.Separator,{}),(0,d.jsxs)("div",{className:"px-2 py-2 space-y-0.5",children:[(0,d.jsx)(z.$,{asChild:!0,variant:"/utilities"===b||b?.startsWith("/utilities/")?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/utilities",children:[(0,d.jsx)(H.A,{className:"mr-2 h-4 w-4"})," ",c("sidebar.utilities")]})}),(0,d.jsx)(z.$,{asChild:!0,variant:"/audit"===b?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/audit",children:[(0,d.jsx)(I.A,{className:"mr-2 h-4 w-4"})," ",c("sidebar.audit")]})}),(0,d.jsx)(z.$,{asChild:!0,variant:"/settings"===b?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/settings",children:[(0,d.jsx)(m.A,{className:"mr-2 h-4 w-4"})," Settings"]})})]})]})}function O({root:a,active:b}){let c=(0,j.c)("app"),[f,i]=(0,e.useState)(b),[k,l]=(0,e.useState)(!1),[m,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(!1),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1),[F,I]=(0,e.useState)(null),[L,M]=(0,e.useState)(null),[N,O]=(0,e.useState)(null),[Q,R]=(0,e.useState)(null),[U,V]=(0,e.useState)(null),[W,Y]=(0,e.useState)(!1),[Z,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(!1),[ad,ae]=(0,e.useState)(!1),[af,ag]=(0,e.useState)(!1),ah=(0,h.usePathname)(),ai=(0,e.useCallback)(async()=>{Y(!0);let b=await B(a.id);Y(!1),b.ok?I(b.sections):I([])},[a.id]),aj=(0,e.useCallback)(async()=>{ac(!0);let b=await C(a.id);ac(!1),b.ok?O(b.topics):O([])},[a.id]),ak=(0,e.useCallback)(async()=>{ag(!0);let b=await G({rootId:a.id});ag(!1),b.ok?V(b.agents):V([])},[a.id]),al=(0,e.useCallback)(async()=>{aa(!0);let b=await D(a.id);aa(!1),b.ok?M(b.files):M([])},[a.id]),am=(0,e.useCallback)(async()=>{ae(!0);let b=await E(a.id);ae(!1),b.ok?R(b.utilities):R([])},[a.id]);(0,w.S9)(w.Zi.kbChanged(a.id),()=>{k?ai():I(null)}),(0,w.S9)(w.Zi.topicsChanged(a.id),()=>{u?aj():O(null),z?ak():V(null),x?am():R(null)});let an=async()=>{let a=!k;l(a),a&&null===F&&!W&&await ai()},ao=async()=>{let a=!m;t(a),a&&null===L&&!Z&&await al()},ap=async()=>{let a=!u;v(a),a&&null===N&&!ab&&await aj()},aq=async()=>{let a=!x;y(a),a&&null===Q&&!ad&&await am()},ar=async()=>{let a=!z;A(a),a&&null===U&&!af&&await ak()},as=function(a){let b=a.split("/").filter(Boolean);return b[b.length-1]??a}(a.path);return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center group",children:[(0,d.jsx)("button",{type:"button",onClick:()=>i(a=>!a),className:"h-6 w-6 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0","aria-label":c(f?"sidebar.collapse":"sidebar.expand"),children:f?(0,d.jsx)(n.A,{className:"h-3.5 w-3.5"}):(0,d.jsx)(o.A,{className:"h-3.5 w-3.5"})}),(0,d.jsxs)(g(),{href:`/roots/${a.id}`,className:`flex-1 min-w-0 flex items-center gap-2 px-2 py-1 rounded-md text-sm hover:bg-accent ${b?"bg-accent":""}`,children:[(0,d.jsx)(p.A,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:as})]})]}),f&&(0,d.jsxs)("ul",{className:"ml-5 mt-0.5 space-y-0.5 border-l pl-1",children:[(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:an,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[k?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(q.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.kb")}),W&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"})]}),k&&null!==F&&(0,d.jsx)(T,{rootId:a.id,sections:F,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:ao,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[m?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(J.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.memory")}),Z&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"})]}),m&&null!==L&&(0,d.jsx)($,{rootId:a.id,memory:L,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:ap,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[u?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(s.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.topics")}),ab&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==N&&(0,d.jsx)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:N.length})]}),u&&null!==N&&(0,d.jsx)(X,{rootId:a.id,topics:N,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:aq,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[x?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(H.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.utilities")}),ad&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==Q&&!ad&&(0,d.jsx)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:Q.length})]}),x&&null!==Q&&(0,d.jsx)(_,{rootId:a.id,utilities:Q,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:ar,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[z?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(K.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.agents")}),af&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==U&&!af&&(0,d.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:[U.filter(a=>S(a.status)).length,"/",U.length]})]}),z&&null!==U&&(0,d.jsx)(P,{agents:U,pathname:ah})]})]})]})}function P({agents:a,pathname:b}){if(0===a.length)return(0,d.jsx)(Q,{});let c=new Map;for(let b of a){let a=b.parentId,d=c.get(a)??[];d.push(b),c.set(a,d)}let e=c.get(void 0)??[];return(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:e.map(a=>(0,d.jsx)(R,{agent:a,byParent:c,pathname:b,depth:0},a.id))})}function Q(){let a=(0,j.c)("app");return(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:a("sidebar.noAgents")})}function R({agent:a,byParent:b,pathname:c,depth:e}){let f=b.get(a.id)??[],h=`/agents/${a.id}`,i=c===h;return(0,d.jsxs)("li",{children:[(0,d.jsxs)(g(),{href:h,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${i?"bg-accent":""}`,style:{paddingLeft:8*e+4},children:[S(a.status)?(0,d.jsx)(L.A,{className:"h-3 w-3 text-emerald-600 shrink-0 animate-pulse"}):(0,d.jsx)(K.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1",children:a.label}),(0,d.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground shrink-0",title:`${a.harness} \xb7 ${a.model}`,children:"claude-code"===a.harness?"claude":"ollama"===a.harness?"ollama":"codex"})]}),f.length>0&&(0,d.jsx)("ul",{className:"space-y-0.5",children:f.map(a=>(0,d.jsx)(R,{agent:a,byParent:b,pathname:c,depth:e+1},a.id))})]})}function S(a){return"starting"===a||"running"===a}function T({rootId:a,sections:b,pathname:c}){return 0===b.length?(0,d.jsx)(U,{}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>b.isDir?(0,d.jsx)(V,{rootId:a,section:b,pathname:c},b.rel):(0,d.jsx)("li",{children:(0,d.jsx)(W,{rootId:a,section:b,pathname:c})},b.rel))})}function U(){let a=(0,j.c)("app");return(0,d.jsx)("div",{className:"px-3 py-1 text-[11px] italic text-muted-foreground",children:a("sidebar.kbEmpty")})}function V({rootId:a,section:b,pathname:c}){let[f,g]=(0,e.useState)(!1);return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsx)("button",{type:"button",onClick:()=>g(a=>!a),className:"h-5 w-5 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0",children:f?(0,d.jsx)(n.A,{className:"h-3 w-3"}):(0,d.jsx)(o.A,{className:"h-3 w-3"})}),(0,d.jsx)(t.A,{className:"h-3 w-3 text-muted-foreground shrink-0 mr-1"}),(0,d.jsx)("span",{className:"text-[12px] flex-1 truncate",children:b.label})]}),f&&b.children&&(0,d.jsx)("ul",{className:"ml-4 space-y-0.5 border-l pl-1",children:b.children.map(b=>(0,d.jsx)("li",{children:(0,d.jsx)(W,{rootId:a,section:b,pathname:c})},b.rel))})]})}function W({rootId:a,section:b,pathname:c}){if(!b.fileRel)return null;let e=b.fileRel.split("/").map(encodeURIComponent).join("/"),f=`/roots/${a}/kb/${e}`,h=c===f;return(0,d.jsxs)(g(),{href:f,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${h?"bg-accent":""}`,children:[(0,d.jsx)(q.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:b.label})]})}function X({rootId:a,topics:b,pathname:c}){return 0===b.length?(0,d.jsx)(Y,{}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>(0,d.jsx)(Z,{rootId:a,topic:b,pathname:c},b.id))})}function Y(){let a=(0,j.c)("app");return(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:a("sidebar.noTopics")})}function Z({rootId:a,topic:b,pathname:c}){let f=(0,j.c)("app"),k=`/roots/${a}/chat/${b.id}`,l=c===k,[m,n]=(0,e.useTransition)(),o=(0,h.useRouter)();return(0,d.jsx)("li",{className:"group/topic",children:(0,d.jsxs)(g(),{href:k,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${l?"bg-accent":""}`,children:[(0,d.jsx)(s.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:b.title}),(0,d.jsx)("button",{type:"button",onClick:c=>{c.preventDefault(),c.stopPropagation(),confirm(f("sidebar.deleteTopicConfirm",{title:b.title}))&&n(async()=>{let c=await (0,v.L)(a,b.id);if(!c.ok)return void i.oR.error(c.error??f("sidebar.deleteFailed"));i.oR.success(f("sidebar.topicDeleted")),(0,w.$d)(w.Zi.topicsChanged(a)),l&&o.push(`/roots/${a}`)})},disabled:m,"aria-label":f("sidebar.deleteTopic"),title:f("sidebar.deleteTopic"),className:"opacity-0 group-hover/topic:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive shrink-0",children:m?(0,d.jsx)(r.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(u.A,{className:"h-3 w-3"})})]})})}function $({rootId:a,memory:b,pathname:c}){let e=(0,j.c)("app"),f=b.filter(a=>!a.empty),h=`/roots/${a}/memory`,i=c===h;return 0===f.length?(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:e("sidebar.memoryEmpty")}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:f.map(a=>(0,d.jsx)("li",{children:(0,d.jsxs)(g(),{href:h,title:a.description,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${i?"bg-accent":""}`,children:[(0,d.jsx)(J.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:a.file}),(0,d.jsx)("span",{className:"text-[10px] text-muted-foreground shrink-0",children:a.lines})]})},a.file))})}function _({rootId:a,utilities:b,pathname:c}){let e=(0,j.c)("app");return 0===b.length?(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:e("sidebar.utilitiesEmpty")}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>(0,d.jsx)(aa,{rootId:a,utility:b,pathname:c},`${b.scope}:${b.id}`))})}function aa({rootId:a,utility:b,pathname:c}){let[f,h]=(0,e.useState)(!1),i=`/utilities/${b.scope}/${encodeURIComponent(b.id)}${b.rootId?`?rootId=${encodeURIComponent(b.rootId)}`:""}`,j=b.threads.length>0;return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsx)("button",{type:"button",onClick:()=>h(a=>!a),disabled:!j,className:"h-5 w-5 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0 disabled:opacity-30",children:j?f?(0,d.jsx)(n.A,{className:"h-3 w-3"}):(0,d.jsx)(o.A,{className:"h-3 w-3"}):(0,d.jsx)("span",{className:"inline-block h-3 w-3"})}),(0,d.jsxs)(g(),{href:i,className:"flex-1 min-w-0 flex items-center gap-1 px-1 py-1 text-[12px] rounded hover:bg-accent",children:[(0,d.jsx)(M.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1",children:b.name}),j&&(0,d.jsx)("span",{className:"text-[10px] text-muted-foreground shrink-0",children:b.threads.length})]})]}),f&&j&&(0,d.jsx)("ul",{className:"ml-4 space-y-0.5 border-l pl-1",children:b.threads.map(b=>{let e=`/roots/${a}/chat/${b.id}`,f=c===e;return(0,d.jsx)("li",{children:(0,d.jsxs)(g(),{href:e,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${f?"bg-accent":""}`,children:[(0,d.jsx)(s.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:b.title})]})},b.id)})})]})}},22421:(a,b,c)=>{"use strict";c.d(b,{Bd:()=>p,Ed:()=>o,eJ:()=>q,vT:()=>i,vd:()=>n});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){return(await k(a)).items}async function n(a){return(await m(a)).filter(a=>"pending"===a.status)}async function o(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}async function p(a,b,c){let d=await k(a),e=d.items.findIndex(a=>a.id===b);return e<0?null:(d.items[e]={...d.items[e],status:"approved",topicId:c},await l(a,d),d.items[e])}async function q(a,b){let c=await k(a),d=c.items.findIndex(a=>a.id===b);return d<0?null:(c.items[d]={...c.items[d],status:"rejected"},await l(a,c),c.items[d])}},24570:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{l:()=>s,p:()=>r});var e=c(73024),f=c(76760),g=c.n(f),h=c(24576),i=c(17640),j=c(99048),k=c(18542),l=c(74853),m=c(13474),n=a([j,k]);[j,k]=n.then?(await n)():n;let r=[{id:"system:memory-rollup",label:"Memory rollup",trigger:"weekly",run:o},{id:"system:sessions-index",label:"Index sessions for search",trigger:"hourly",run:q}],s={hourly:36e5,daily:864e5,weekly:6048e5};async function o(){let a=await (0,h.qV)().catch(()=>[]),b=[];for(let c of a){let a=await p(c).catch(()=>[]);b.push(...a)}if(b.length<4)return{ok:!0,detail:`${b.length} journal entries across all roots — skipping rollup (need ≥4).`};b.sort((a,b)=>a.date<b.date?1:-1);let c=b.slice(0,60),d=["You're summarising the user's last 7 days from their journal entries across every Reflex Space.",`Output STRICT plain text. ≤25 lines. One fact per line, third-person about the user.`,`Cover: recurring themes, mood arc, unresolved threads, notable wins. Quote the user's own phrasing for one or two themes — sparingly. No greetings, no markdown headers, no preamble — straight into the bullets.`,"If the entries don't span 7 days yet, summarise what's there honestly.","","## Journal entries (newest first)",...c.map(a=>{var b,c;return`### ${a.date} \xb7 ${a.rootName} \xb7 ${a.title}
75
+ ${b=a.body,c=400,b.length<=400?b:b.slice(0,c)+"…"}`})].join("\n");try{let b=await (0,i.M)(),e=(await (0,j.T)(b.assignments.quick,d,{timeoutMs:9e4})??"").trim();if(!e)return{ok:!1,detail:"empty completion"};let f=e.split("\n").map(a=>a.trim()).filter(Boolean).slice(0,25).join("\n");return await (0,k.xP)({scope:"global"},"RECENT","replace",{content:f}),{ok:!0,detail:`rolled up ${c.length} entries from ${a.length} Spaces`}}catch(a){return{ok:!1,detail:a instanceof Error?a.message:String(a)}}}async function p(a){let b,c=g().join((0,m.FF)(a.path),"journal");try{b=(await e.promises.readdir(c)).filter(a=>a.toLowerCase().endsWith(".md"))}catch{return[]}b.sort().reverse(),b=b.slice(0,14);let d=g().basename(a.path)||a.id,f=[];for(let a of b)try{let b=await e.promises.readFile(g().join(c,a),"utf8"),{title:h,date:i,body:j}=function(a){let b=/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(a);if(!b)return{body:a.trim()};let c=b[1],d=b[2].trim(),e=/^title:\s*(.+)$/m.exec(c)?.[1]?.replace(/^"|"$/g,""),f=/^date:\s*(.+)$/m.exec(c)?.[1]?.replace(/^"|"$/g,"");return{...e?{title:e.trim()}:{},...f?{date:f.trim()}:{},body:d}}(b);f.push({rootName:d,date:i??function(a){let b=/^(\d{4}-\d{2}-\d{2})/.exec(a);return b?b[1]:null}(a)??"",title:h??a,body:j})}catch{}return f}async function q(){try{let a=await (0,l.tH)();return{ok:!0,detail:`scanned ${a.scanned}, upserted ${a.upserted}, removed ${a.removed}`}}catch(a){return{ok:!1,detail:a instanceof Error?a.message:String(a)}}}d()}catch(a){d(a)}})},26380:(a,b,c)=>{"use strict";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(87841),j=c.n(i),k=c(54287),l=c(19319),m=c(51872);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):[]}},27456:(a,b,c)=>{"use strict";c.d(b,{F:()=>g});var d=c(64173);c(17240);var e=c(6912),f=c(91344);function g({className:a,children:b,...c}){return(0,d.jsxs)(e.Root,{"data-slot":"scroll-area",className:(0,f.cn)("relative",a),...c,children:[(0,d.jsx)(e.Viewport,{"data-slot":"scroll-area-viewport",className:"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",children:b}),(0,d.jsx)(h,{}),(0,d.jsx)(e.Corner,{})]})}function h({className:a,orientation:b="vertical",...c}){return(0,d.jsx)(e.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:b,className:(0,f.cn)("flex touch-none p-px transition-colors select-none","vertical"===b&&"h-full w-2.5 border-l border-l-transparent","horizontal"===b&&"h-2.5 flex-col border-t border-t-transparent",a),...c,children:(0,d.jsx)(e.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"relative flex-1 rounded-full bg-border"})})}},28548:(a,b,c)=>{"use strict";c.d(b,{AI:()=>m,PM:()=>l,Qs:()=>o,Y7:()=>k,iP:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(73652),h=c(61495);let i=f().join((0,g._)(),"prompts");function j(a){return f().join(i,`${a}.md`)}function k(a){return j(a)}async function l(a){let b=j(a);try{return await d.promises.readFile(b,"utf8")}catch(a){var c;if(!("object"==typeof(c=a)&&null!==c&&"code"in c&&"ENOENT"===c.code))throw a}return await d.promises.mkdir(i,{recursive:!0}),await d.promises.writeFile(b,h.EE[a],"utf8"),h.EE[a]}async function m(a,b){await d.promises.mkdir(i,{recursive:!0}),await d.promises.writeFile(j(a),b,"utf8")}async function n(a){return await m(a,h.EE[a]),h.EE[a]}function o(a){if(!h._W.includes(a))throw Error(`Unknown template: ${a}`);return a}},30516:(a,b,c)=>{"use strict";c.d(b,{P:()=>l});var d=c(56149);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={"text-template":e,"http-request":f,"web-fetch":g,"ask-agent":h,"kb-write":i,"utility-call":j,"image-generate":d.Ik({prompt:d.Yj().min(1,"prompt is required"),provider:d.k5(["gemini","codex"]).optional(),size:d.Yj().optional(),aspectRatio:d.Yj().optional()}),"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()})};function l(a,b){let c=k[a];return c?c.parse(b):b}},30849:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>d});let d=(0,c(54491).registerClientReference)(function(){throw Error("Attempted to call AppSidebar() from the server but AppSidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/reflex-agent/reflex-agent/app/_components/app-sidebar.tsx","AppSidebar")},35616:(a,b,c)=>{Promise.resolve().then(c.bind(c,21535)),Promise.resolve().then(c.bind(c,99668)),Promise.resolve().then(c.bind(c,54225))},35961:(a,b,c)=>{"use strict";c.d(b,{collectExtensions:()=>e});var d=c(8118);async function e(a){let b=await (0,d.listUtilities)(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}}},36017:(a,b,c)=>{"use strict";c.d(b,{D:()=>k,M:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(78555);let h=(0,c(73652)._)(),i=f().join(h,"settings.json");async function j(){try{let a=await d.promises.readFile(i,"utf8"),b=g.ht.safeParse(JSON.parse(a));if(!b.success)return g.a$;return b.data}catch(b){var a;if("object"==typeof(a=b)&&null!==a&&"code"in a&&"ENOENT"===a.code)return g.a$;throw b}}async function k(a){let b=g.ht.parse(a);await d.promises.mkdir(h,{recursive:!0}),await d.promises.writeFile(i,JSON.stringify(b,null,2)+"\n","utf8")}},36724:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L:()=>j});var e=c(56942),f=c(3724),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,84579)),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,84579));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,8118)),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(9861),c.e(4031)]).then(c.bind(c,49556));return l({utility:j,action:k,args:g,parentCorrelationId:`workflow:${b.workflow.id}`})}};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)}})},44427:()=>{},46013:(a,b,c)=>{"use strict";c.d(b,{Separator:()=>g});var d=c(64173);c(17240);var e=c(42572),f=c(91344);function g({className:a,orientation:b="horizontal",decorative:c=!0,...g}){return(0,d.jsx)(e.b,{"data-slot":"separator",decorative:c,orientation:b,className:(0,f.cn)("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",a),...g})}},49410:(a,b,c)=>{"use strict";c.d(b,{bG:()=>m,hI:()=>q,kA:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(73652);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
76
76
 
77
77
  Run the investigation like a professional analyst. This skill is NOT a chat answer; it produces durable, cited KB artifacts.
78
78
 
@@ -208,7 +208,7 @@ Constraints:
208
208
  ${g}
209
209
  ---
210
210
  ${a.instructions.trim()}
211
- `,i=f().join(b,`${c}.md`);return await d.promises.writeFile(i,h,"utf8"),i}},50995:(a,b,c)=>{"use strict";c.d(b,{i:()=>f});var d=c(73745);c(66493);var e=c(53905);async function f(){try{let a=await (0,e.qV)();return{ok:!0,entries:a}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(63781).D)([f]),(0,d.A)(f,"00031941fbf2bead503353a10dec82c48ae3374e17",null)},51021:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>t});var e=c(76760),f=c.n(e),g=c(54287),h=c(78744),i=c(36017),j=c(53905),k=c(93554),l=c(20243),m=c(875),n=c(96921),o=c(5492),p=c(49410),q=c(96791),r=c(35961),s=a([k,q]);[k,q]=s.then?(await s)():s;let w="рус";async function t(a){let b=await (0,j.Zn)(a.rootId);if(!b)return{error:"Root not found",status:404};if(k.z.isActive(a.topicId))return{error:"Topic already has a running agent",status:409};let c=await (0,i.M)(),d=c.assignments.chat,e=a.harness??d.harness,l=a.model??d.model,s=c.language,t=(0,g.FF)(b.path),y=await (0,r.collectExtensions)({rootId:a.rootId}),z=y.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})),A=(0,m.wr)(a.message),B=(0,n.dr)(a.message,z),C=a.message;A?"goal"===A.kind&&A.text?(await (0,o.PF)(b.path,a.topicId,A.text),C=A.text):"plan"===A.kind&&(C=A.text||a.message):B&&"agent-mode"===B.def.kind&&(C=B.payload||a.message);let D=null;if(B?.def.id==="skill"){let[c,...d]=B.payload.split(/\s+/);if(c){let e=await (0,p.kA)(c,b.path,a.rootId);if(e){let b=e.instructions;if(e.workflowId){let c=await u(a.rootId,e.workflowId);null!==c&&(b=b.includes("{{workflowOutput}}")?b.replace(/\{\{workflowOutput\}\}/g,c):`${b}
211
+ `,i=f().join(b,`${c}.md`);return await d.promises.writeFile(i,h,"utf8"),i}},50995:(a,b,c)=>{"use strict";c.d(b,{i:()=>f});var d=c(73745);c(66493);var e=c(53905);async function f(){try{let a=await (0,e.qV)();return{ok:!0,entries:a}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(63781).D)([f]),(0,d.A)(f,"00845f96527f3684e6def80bdc0f333ecb2b61ef09",null)},51021:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>t});var e=c(76760),f=c.n(e),g=c(54287),h=c(78744),i=c(36017),j=c(53905),k=c(93554),l=c(20243),m=c(875),n=c(96921),o=c(5492),p=c(49410),q=c(96791),r=c(35961),s=a([k,q]);[k,q]=s.then?(await s)():s;let w="рус";async function t(a){let b=await (0,j.Zn)(a.rootId);if(!b)return{error:"Root not found",status:404};if(k.z.isActive(a.topicId))return{error:"Topic already has a running agent",status:409};let c=await (0,i.M)(),d=c.assignments.chat,e=a.harness??d.harness,l=a.model??d.model,s=c.language,t=(0,g.FF)(b.path),y=await (0,r.collectExtensions)({rootId:a.rootId}),z=y.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})),A=(0,m.wr)(a.message),B=(0,n.dr)(a.message,z),C=a.message;A?"goal"===A.kind&&A.text?(await (0,o.PF)(b.path,a.topicId,A.text),C=A.text):"plan"===A.kind&&(C=A.text||a.message):B&&"agent-mode"===B.def.kind&&(C=B.payload||a.message);let D=null;if(B?.def.id==="skill"){let[c,...d]=B.payload.split(/\s+/);if(c){let e=await (0,p.kA)(c,b.path,a.rootId);if(e){let b=e.instructions;if(e.workflowId){let c=await u(a.rootId,e.workflowId);null!==c&&(b=b.includes("{{workflowOutput}}")?b.replace(/\{\{workflowOutput\}\}/g,c):`${b}
212
212
 
213
213
  ## Workflow output (from \`${e.workflowId}\`)
214
214
  ${c}`)}D=b,C=d.join(" ").trim()||C}}}let E=await (0,o.eF)(b.path,a.topicId),F=E?.meta.goal&&"active"===E.meta.goalStatus?E.meta.goal:void 0,G=await (0,h.M)({root:b.path,scope:b.path,reflexScope:t,language:s}),H=await (0,q.f)({rootPath:b.path}),I=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(!x.has(d.hostname.toLowerCase())||c.has(a))continue;c.add(a),b.push(a)}catch{}}return b}(C),J=[G,H,F?(0,m.FB)(F,s):"",A?.kind==="plan"?(0,m.$4)(s):"",B?.def.id==="research"?(0,m.dA)(B.payload,s):"",B?.def.id==="widget"?(0,m.wt)(B.payload,s):"",B?.def.id==="new-utility"?(0,m.EA)(B.payload,s):"",B?.def.id==="mcp"?(0,m.YE)(B.payload,s):"",B?.def.id==="workflow"?(0,m.vl)(B.payload,s):"",B?.def.id==="distill"?(0,m.VM)(B.payload,s):"",B?.def.id==="practice"?(0,m.z7)(B.payload,s):"",B?.def.id==="reflect"?(0,m.zM)(s):"",D??"",a.focusFile?function(a,b,c){let d=f().join(b,a);return/russ/i.test(c)||RegExp(w,"i").test(c)?`## Open document — primary context
@@ -448,6 +448,9 @@ To create a utility, emit a marker:
448
448
  - \`"@host/ui"\` — gives primitives: Button, Input, Textarea, Label, Card, CardContent, CardHeader, CardTitle, Badge, ScrollArea.
449
449
  - No other packages / node_modules / node:* modules. esbuild rejects any other import.
450
450
  3. **No fetch/XHR/WebSocket/localStorage** inside the utility. Only \`reflex.web.fetch({url})\` with an explicitly whitelisted domain in the manifest. To DISPLAY external images via \`<img src>\`, list their hosts in \`permissions.images.domains\` — the CSP blocks any host not on that list.
451
+ - **Third-party packages**: declare them in \`manifest.dependencies\` (e.g. \`{"dayjs":"1.11.10"}\`) — they're fetched from esm.sh and bundled AT BUILD TIME (nothing loads at runtime). Pin exact versions, pure-JS/ESM only. A bare import not listed (and not react/@host) is a build error.
452
+ - **Server actions**: any top-level \`actions/<name>.ts\` is auto-registered (no need to hand-list in \`serverActions\` unless you want a custom timeout). \`_\`-prefixed files are private helpers.
453
+ - **Multiple views**: import \`{ RouterView, useReflexRoute }\` from \`@host/ui\` for in-iframe navigation instead of hand-rolling view state.
451
454
  4. **State** is persisted via \`reflex.fs.write({path, content})\` (in \`<utility>/data/\`) or \`reflex.kb.add({...})\`.
452
455
  5. **Manifest** must list every required permission — the user sees this list at install time and can refuse.
453
456
 
@@ -586,7 +589,7 @@ After the marker, the system shows a "Utility installed" card with a link; don't
586
589
  - Markers must be valid JSON on a single block (whitespace inside is fine).
587
590
  - You may proceed normally without any marker; only use them when blocked
588
591
  or when there's knowledge worth persisting.
589
- `}},63848:(a,b,c)=>{"use strict";c.d(b,{F8:()=>m,Qr:()=>k,pV:()=>l});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(54287);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}
592
+ `}},61808:(a,b,c)=>{"use strict";c.d(b,{L:()=>e});var d=c(3265);let e=(0,d.createServerReference)("60aca7b73665ef85604f648bbe1616034cd83463a3",d.callServer,void 0,d.findSourceMapURL,"deleteTopicAction")},63848:(a,b,c)=>{"use strict";c.d(b,{F8:()=>m,Qr:()=>k,pV:()=>l});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(54287);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}
590
593
 
591
594
  Auto-generated index. Edit freely — Reflex only appends new entries below.
592
595
 
@@ -641,7 +644,7 @@ Auto-generated index. Edit freely — Reflex only appends new entries below.
641
644
  iso_date = ?, mtime_ms = ?, indexed_at = ?
642
645
  WHERE id = ?`).run(a.source,a.rootId,a.rootPath,a.ref,k,m,d,p,h.id),g.prepare("DELETE FROM documents_fts WHERE rowid = ?").run(h.id),g.prepare("INSERT INTO documents_fts (rowid, title, body) VALUES (?, ?, ?)").run(h.id,k,n);else{let b=Number(g.prepare(`INSERT INTO documents (source, root_id, root_path, ref, file_path,
643
646
  title, iso_date, mtime_ms, indexed_at)
644
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(a.source,a.rootId,a.rootPath,a.ref,a.absPath,k,m,d,p).lastInsertRowid);g.prepare("INSERT INTO documents_fts (rowid, title, body) VALUES (?, ?, ?)").run(b,k,n)}return!0}async function u(a){let b=await l();if(!b)return;let c=b.raw;c.prepare("DELETE FROM documents_fts WHERE rowid = ?").run(a),c.prepare("DELETE FROM documents WHERE id = ?").run(a)}async function v(a){let b=await l();if(!b)return 0;let c=b.raw,d=c.prepare("SELECT id, file_path FROM documents").all(),e=0;for(let b of d)!a.has(b.file_path)&&(c.prepare("DELETE FROM documents_fts WHERE rowid = ?").run(b.id),c.prepare("DELETE FROM documents WHERE id = ?").run(b.id),e++);return e}},76172:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>N});var d=c(64173),e=c(17240),f=c(1056),g=c.n(f),h=c(87671),i=c(44052),j=c(71813),k=c(69552),l=c(61636),m=c(15666),n=c(58405),o=c(58507),p=c(98463),q=c(68669),r=c(62261),s=c(53186),t=c(51348),u=c(97338),v=c(45925),w=c(88724),x=c(27456),y=c(46013),z=c(20583),A=c(3265);let B=(0,A.createServerReference)("40a6290b393d4b39181944c39ac703d133344ad93f",A.callServer,void 0,A.findSourceMapURL,"loadKbSectionsAction"),C=(0,A.createServerReference)("40bd421b75196b2fd21e9d2495681072fe144afe5d",A.callServer,void 0,A.findSourceMapURL,"loadTopicsAction"),D=(0,A.createServerReference)("40a40c52f89ccee6e6bec688d1246a72c66cfe6b20",A.callServer,void 0,A.findSourceMapURL,"loadSidebarMemoryAction"),E=(0,A.createServerReference)("40db1008123c5f4b2016653826462782ced3438ee4",A.callServer,void 0,A.findSourceMapURL,"loadSidebarUtilitiesAction"),F=(0,A.createServerReference)("00031941fbf2bead503353a10dec82c48ae3374e17",A.callServer,void 0,A.findSourceMapURL,"listRootsAction"),G=(0,A.createServerReference)("403b98828ff6031b05b163dcbc096a7d4958ea26d7",A.callServer,void 0,A.findSourceMapURL,"listAgentsAction");var H=c(97162),I=c(29370),J=c(64527),K=c(65266),L=c(10082),M=c(89339);function N({initialRoots:a}){let b=(0,h.usePathname)(),c=(0,j.c)("app"),[f,i]=(0,e.useState)(a),n=(0,e.useCallback)(async()=>{let a=await F();a.ok&&i(a.entries)},[]);return((0,w.S9)(w.Zi.rootsChanged,n),b?.startsWith("/share/")||"/share"===b)?null:(0,d.jsxs)("aside",{className:"w-72 shrink-0 border-r bg-muted/30 flex flex-col",children:[(0,d.jsxs)("div",{className:"px-4 py-4 flex items-center gap-2 border-b",children:[(0,d.jsx)("span",{className:"reflex-gradient inline-flex h-7 w-7 items-center justify-center rounded-lg text-white shadow-sm",children:(0,d.jsx)(k.A,{className:"h-4 w-4"})}),(0,d.jsxs)("div",{className:"leading-tight",children:[(0,d.jsx)(g(),{href:"/",className:"text-sm font-semibold tracking-tight hover:underline",children:"Reflex"}),(0,d.jsx)("div",{className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:"knowledge base"})]})]}),(0,d.jsx)(x.F,{className:"flex-1",children:(0,d.jsxs)("nav",{className:"px-2 pt-3 pb-6",children:[(0,d.jsx)("div",{className:"px-2 mb-1 text-[10px] uppercase tracking-wider text-muted-foreground",children:c("sidebar.spaces")}),0===f.length?(0,d.jsx)("div",{className:"px-2 py-3 text-xs text-muted-foreground",children:c("sidebar.empty")}):(0,d.jsx)("ul",{className:"space-y-0.5",children:f.map(a=>(0,d.jsx)(O,{root:a,active:b?.startsWith(`/roots/${a.id}`)??!1},a.id))}),(0,d.jsx)("div",{className:"mt-2 px-2",children:(0,d.jsx)(z.$,{asChild:!0,variant:"ghost",size:"sm",className:"h-7 w-full justify-start text-xs",children:(0,d.jsxs)(g(),{href:"/roots/new",children:[(0,d.jsx)(l.A,{className:"mr-1 h-3.5 w-3.5"})," ",c("sidebar.addSpace")]})})})]})}),(0,d.jsx)(y.Separator,{}),(0,d.jsxs)("div",{className:"px-2 py-2 space-y-0.5",children:[(0,d.jsx)(z.$,{asChild:!0,variant:"/utilities"===b||b?.startsWith("/utilities/")?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/utilities",children:[(0,d.jsx)(H.A,{className:"mr-2 h-4 w-4"})," ",c("sidebar.utilities")]})}),(0,d.jsx)(z.$,{asChild:!0,variant:"/audit"===b?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/audit",children:[(0,d.jsx)(I.A,{className:"mr-2 h-4 w-4"})," ",c("sidebar.audit")]})}),(0,d.jsx)(z.$,{asChild:!0,variant:"/settings"===b?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/settings",children:[(0,d.jsx)(m.A,{className:"mr-2 h-4 w-4"})," Settings"]})})]})]})}function O({root:a,active:b}){let c=(0,j.c)("app"),[f,i]=(0,e.useState)(b),[k,l]=(0,e.useState)(!1),[m,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(!1),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1),[F,I]=(0,e.useState)(null),[L,M]=(0,e.useState)(null),[N,O]=(0,e.useState)(null),[Q,R]=(0,e.useState)(null),[U,V]=(0,e.useState)(null),[W,Y]=(0,e.useState)(!1),[Z,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(!1),[ad,ae]=(0,e.useState)(!1),[af,ag]=(0,e.useState)(!1),ah=(0,h.usePathname)(),ai=(0,e.useCallback)(async()=>{Y(!0);let b=await B(a.id);Y(!1),b.ok?I(b.sections):I([])},[a.id]),aj=(0,e.useCallback)(async()=>{ac(!0);let b=await C(a.id);ac(!1),b.ok?O(b.topics):O([])},[a.id]),ak=(0,e.useCallback)(async()=>{ag(!0);let b=await G({rootId:a.id});ag(!1),b.ok?V(b.agents):V([])},[a.id]),al=(0,e.useCallback)(async()=>{aa(!0);let b=await D(a.id);aa(!1),b.ok?M(b.files):M([])},[a.id]),am=(0,e.useCallback)(async()=>{ae(!0);let b=await E(a.id);ae(!1),b.ok?R(b.utilities):R([])},[a.id]);(0,w.S9)(w.Zi.kbChanged(a.id),()=>{k?ai():I(null)}),(0,w.S9)(w.Zi.topicsChanged(a.id),()=>{u?aj():O(null),z?ak():V(null),x?am():R(null)});let an=async()=>{let a=!k;l(a),a&&null===F&&!W&&await ai()},ao=async()=>{let a=!m;t(a),a&&null===L&&!Z&&await al()},ap=async()=>{let a=!u;v(a),a&&null===N&&!ab&&await aj()},aq=async()=>{let a=!x;y(a),a&&null===Q&&!ad&&await am()},ar=async()=>{let a=!z;A(a),a&&null===U&&!af&&await ak()},as=function(a){let b=a.split("/").filter(Boolean);return b[b.length-1]??a}(a.path);return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center group",children:[(0,d.jsx)("button",{type:"button",onClick:()=>i(a=>!a),className:"h-6 w-6 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0","aria-label":c(f?"sidebar.collapse":"sidebar.expand"),children:f?(0,d.jsx)(n.A,{className:"h-3.5 w-3.5"}):(0,d.jsx)(o.A,{className:"h-3.5 w-3.5"})}),(0,d.jsxs)(g(),{href:`/roots/${a.id}`,className:`flex-1 min-w-0 flex items-center gap-2 px-2 py-1 rounded-md text-sm hover:bg-accent ${b?"bg-accent":""}`,children:[(0,d.jsx)(p.A,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:as})]})]}),f&&(0,d.jsxs)("ul",{className:"ml-5 mt-0.5 space-y-0.5 border-l pl-1",children:[(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:an,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[k?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(q.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.kb")}),W&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"})]}),k&&null!==F&&(0,d.jsx)(T,{rootId:a.id,sections:F,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:ao,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[m?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(J.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.memory")}),Z&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"})]}),m&&null!==L&&(0,d.jsx)($,{rootId:a.id,memory:L,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:ap,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[u?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(s.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.topics")}),ab&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==N&&(0,d.jsx)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:N.length})]}),u&&null!==N&&(0,d.jsx)(X,{rootId:a.id,topics:N,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:aq,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[x?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(H.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.utilities")}),ad&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==Q&&!ad&&(0,d.jsx)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:Q.length})]}),x&&null!==Q&&(0,d.jsx)(_,{rootId:a.id,utilities:Q,pathname:ah})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:ar,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[z?(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(K.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.agents")}),af&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==U&&!af&&(0,d.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:[U.filter(a=>S(a.status)).length,"/",U.length]})]}),z&&null!==U&&(0,d.jsx)(P,{agents:U,pathname:ah})]})]})]})}function P({agents:a,pathname:b}){if(0===a.length)return(0,d.jsx)(Q,{});let c=new Map;for(let b of a){let a=b.parentId,d=c.get(a)??[];d.push(b),c.set(a,d)}let e=c.get(void 0)??[];return(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:e.map(a=>(0,d.jsx)(R,{agent:a,byParent:c,pathname:b,depth:0},a.id))})}function Q(){let a=(0,j.c)("app");return(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:a("sidebar.noAgents")})}function R({agent:a,byParent:b,pathname:c,depth:e}){let f=b.get(a.id)??[],h=`/agents/${a.id}`,i=c===h;return(0,d.jsxs)("li",{children:[(0,d.jsxs)(g(),{href:h,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${i?"bg-accent":""}`,style:{paddingLeft:8*e+4},children:[S(a.status)?(0,d.jsx)(L.A,{className:"h-3 w-3 text-emerald-600 shrink-0 animate-pulse"}):(0,d.jsx)(K.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1",children:a.label}),(0,d.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground shrink-0",title:`${a.harness} \xb7 ${a.model}`,children:"claude-code"===a.harness?"claude":"ollama"===a.harness?"ollama":"codex"})]}),f.length>0&&(0,d.jsx)("ul",{className:"space-y-0.5",children:f.map(a=>(0,d.jsx)(R,{agent:a,byParent:b,pathname:c,depth:e+1},a.id))})]})}function S(a){return"starting"===a||"running"===a}function T({rootId:a,sections:b,pathname:c}){return 0===b.length?(0,d.jsx)(U,{}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>b.isDir?(0,d.jsx)(V,{rootId:a,section:b,pathname:c},b.rel):(0,d.jsx)("li",{children:(0,d.jsx)(W,{rootId:a,section:b,pathname:c})},b.rel))})}function U(){let a=(0,j.c)("app");return(0,d.jsx)("div",{className:"px-3 py-1 text-[11px] italic text-muted-foreground",children:a("sidebar.kbEmpty")})}function V({rootId:a,section:b,pathname:c}){let[f,g]=(0,e.useState)(!1);return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsx)("button",{type:"button",onClick:()=>g(a=>!a),className:"h-5 w-5 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0",children:f?(0,d.jsx)(n.A,{className:"h-3 w-3"}):(0,d.jsx)(o.A,{className:"h-3 w-3"})}),(0,d.jsx)(t.A,{className:"h-3 w-3 text-muted-foreground shrink-0 mr-1"}),(0,d.jsx)("span",{className:"text-[12px] flex-1 truncate",children:b.label})]}),f&&b.children&&(0,d.jsx)("ul",{className:"ml-4 space-y-0.5 border-l pl-1",children:b.children.map(b=>(0,d.jsx)("li",{children:(0,d.jsx)(W,{rootId:a,section:b,pathname:c})},b.rel))})]})}function W({rootId:a,section:b,pathname:c}){if(!b.fileRel)return null;let e=b.fileRel.split("/").map(encodeURIComponent).join("/"),f=`/roots/${a}/kb/${e}`,h=c===f;return(0,d.jsxs)(g(),{href:f,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${h?"bg-accent":""}`,children:[(0,d.jsx)(q.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:b.label})]})}function X({rootId:a,topics:b,pathname:c}){return 0===b.length?(0,d.jsx)(Y,{}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>(0,d.jsx)(Z,{rootId:a,topic:b,pathname:c},b.id))})}function Y(){let a=(0,j.c)("app");return(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:a("sidebar.noTopics")})}function Z({rootId:a,topic:b,pathname:c}){let f=(0,j.c)("app"),k=`/roots/${a}/chat/${b.id}`,l=c===k,[m,n]=(0,e.useTransition)(),o=(0,h.useRouter)();return(0,d.jsx)("li",{className:"group/topic",children:(0,d.jsxs)(g(),{href:k,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${l?"bg-accent":""}`,children:[(0,d.jsx)(s.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:b.title}),(0,d.jsx)("button",{type:"button",onClick:c=>{c.preventDefault(),c.stopPropagation(),confirm(f("sidebar.deleteTopicConfirm",{title:b.title}))&&n(async()=>{let c=await (0,v.L)(a,b.id);if(!c.ok)return void i.oR.error(c.error??f("sidebar.deleteFailed"));i.oR.success(f("sidebar.topicDeleted")),(0,w.$d)(w.Zi.topicsChanged(a)),l&&o.push(`/roots/${a}`)})},disabled:m,"aria-label":f("sidebar.deleteTopic"),title:f("sidebar.deleteTopic"),className:"opacity-0 group-hover/topic:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive shrink-0",children:m?(0,d.jsx)(r.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(u.A,{className:"h-3 w-3"})})]})})}function $({rootId:a,memory:b,pathname:c}){let e=(0,j.c)("app"),f=b.filter(a=>!a.empty),h=`/roots/${a}/memory`,i=c===h;return 0===f.length?(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:e("sidebar.memoryEmpty")}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:f.map(a=>(0,d.jsx)("li",{children:(0,d.jsxs)(g(),{href:h,title:a.description,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${i?"bg-accent":""}`,children:[(0,d.jsx)(J.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:a.file}),(0,d.jsx)("span",{className:"text-[10px] text-muted-foreground shrink-0",children:a.lines})]})},a.file))})}function _({rootId:a,utilities:b,pathname:c}){let e=(0,j.c)("app");return 0===b.length?(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:e("sidebar.utilitiesEmpty")}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>(0,d.jsx)(aa,{rootId:a,utility:b,pathname:c},`${b.scope}:${b.id}`))})}function aa({rootId:a,utility:b,pathname:c}){let[f,h]=(0,e.useState)(!1),i=`/utilities/${b.scope}/${encodeURIComponent(b.id)}${b.rootId?`?rootId=${encodeURIComponent(b.rootId)}`:""}`,j=b.threads.length>0;return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsx)("button",{type:"button",onClick:()=>h(a=>!a),disabled:!j,className:"h-5 w-5 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0 disabled:opacity-30",children:j?f?(0,d.jsx)(n.A,{className:"h-3 w-3"}):(0,d.jsx)(o.A,{className:"h-3 w-3"}):(0,d.jsx)("span",{className:"inline-block h-3 w-3"})}),(0,d.jsxs)(g(),{href:i,className:"flex-1 min-w-0 flex items-center gap-1 px-1 py-1 text-[12px] rounded hover:bg-accent",children:[(0,d.jsx)(M.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1",children:b.name}),j&&(0,d.jsx)("span",{className:"text-[10px] text-muted-foreground shrink-0",children:b.threads.length})]})]}),f&&j&&(0,d.jsx)("ul",{className:"ml-4 space-y-0.5 border-l pl-1",children:b.threads.map(b=>{let e=`/roots/${a}/chat/${b.id}`,f=c===e;return(0,d.jsx)("li",{children:(0,d.jsxs)(g(),{href:e,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${f?"bg-accent":""}`,children:[(0,d.jsx)(s.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:b.title})]})},b.id)})})]})}},78555:(a,b,c)=>{"use strict";c.d(b,{a$:()=>i,ht:()=>h});var d=c(56149);let e=d.Ik({"claude-code":d.Ik({enabled:d.zM().default(!0)}),codex:d.Ik({enabled:d.zM().default(!0)}),ollama:d.Ik({enabled:d.zM().default(!0),baseUrl:d.Yj().url().default("http://localhost:11434")})}),f=d.Ik({harness:d.k5(["claude-code","codex","ollama"]),model:d.Yj().min(1),allowedTools:d.YO(d.Yj()).default([])}),g=d.Ik({enabled:d.zM().default(!0),maxDimension:d.ai().int().min(256).max(8192).default(2e3),quality:d.ai().int().min(40).max(100).default(85),format:d.k5(["auto","jpeg","webp","original"]).default("auto")}),h=d.Ik({version:d.eu(1).default(1),language:d.Yj().min(1).default("en"),onboardedAt:d.Yj().optional(),userName:d.Yj().default(""),timezone:d.Yj().default(""),uiMode:d.k5(["simple","advanced"]).default("simple"),imageProcessing:g.default({enabled:!0,maxDimension:2e3,quality:85,format:"auto"}),harnesses:e.default({"claude-code":{enabled:!0},codex:{enabled:!0},ollama:{enabled:!0,baseUrl:"http://localhost:11434"}}),assignments:d.Ik({analyze:f,chat:f,rag:f,embed:f,quick:f}).default({analyze:{harness:"claude-code",model:"claude-opus-4-7",allowedTools:["Read","Write","Edit","LS","Glob","Grep","WebSearch","WebFetch"]},chat:{harness:"claude-code",model:"claude-sonnet-4-6",allowedTools:["Read","LS","Glob","Grep","WebSearch","WebFetch"]},rag:{harness:"ollama",model:"llama3.1:8b",allowedTools:[]},embed:{harness:"ollama",model:"nomic-embed-text",allowedTools:[]},quick:{harness:"claude-code",model:"claude-haiku-4-5",allowedTools:[]}}),mapServices:d.Ik({enabled:d.YO(d.Yj()).default(["google","yandex","apple","osm"])}).default({enabled:["google","yandex","apple","osm"]}),ngrok:d.Ik({authtoken:d.Yj().default(""),apiKey:d.Yj().default(""),domain:d.Yj().default(""),port:d.ai().int().min(1).max(65535).default(3210)}).default({authtoken:"",apiKey:"",domain:"",port:3210})}),i=h.parse({})},78744:(a,b,c)=>{"use strict";c.d(b,{p:()=>i,M:()=>j});var d=c(76760),e=c.n(d),f=c(28548);function g(a,b){return a.replace(/\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g,(a,c)=>{let d=b[c];return void 0===d?a:String(d)})}let h="english";async function i(a){let b=await (0,f.PM)("analyze"),c=e().relative(a.root,a.scope)||".",d=a.files.slice(0,400),i=a.files.length>400?`
647
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(a.source,a.rootId,a.rootPath,a.ref,a.absPath,k,m,d,p).lastInsertRowid);g.prepare("INSERT INTO documents_fts (rowid, title, body) VALUES (?, ?, ?)").run(b,k,n)}return!0}async function u(a){let b=await l();if(!b)return;let c=b.raw;c.prepare("DELETE FROM documents_fts WHERE rowid = ?").run(a),c.prepare("DELETE FROM documents WHERE id = ?").run(a)}async function v(a){let b=await l();if(!b)return 0;let c=b.raw,d=c.prepare("SELECT id, file_path FROM documents").all(),e=0;for(let b of d)!a.has(b.file_path)&&(c.prepare("DELETE FROM documents_fts WHERE rowid = ?").run(b.id),c.prepare("DELETE FROM documents WHERE id = ?").run(b.id),e++);return e}},78555:(a,b,c)=>{"use strict";c.d(b,{a$:()=>i,ht:()=>h});var d=c(56149);let e=d.Ik({"claude-code":d.Ik({enabled:d.zM().default(!0)}),codex:d.Ik({enabled:d.zM().default(!0)}),ollama:d.Ik({enabled:d.zM().default(!0),baseUrl:d.Yj().url().default("http://localhost:11434")})}),f=d.Ik({harness:d.k5(["claude-code","codex","ollama"]),model:d.Yj().min(1),allowedTools:d.YO(d.Yj()).default([])}),g=d.Ik({enabled:d.zM().default(!0),maxDimension:d.ai().int().min(256).max(8192).default(2e3),quality:d.ai().int().min(40).max(100).default(85),format:d.k5(["auto","jpeg","webp","original"]).default("auto")}),h=d.Ik({version:d.eu(1).default(1),language:d.Yj().min(1).default("en"),onboardedAt:d.Yj().optional(),userName:d.Yj().default(""),timezone:d.Yj().default(""),uiMode:d.k5(["simple","advanced"]).default("simple"),imageProcessing:g.default({enabled:!0,maxDimension:2e3,quality:85,format:"auto"}),harnesses:e.default({"claude-code":{enabled:!0},codex:{enabled:!0},ollama:{enabled:!0,baseUrl:"http://localhost:11434"}}),assignments:d.Ik({analyze:f,chat:f,rag:f,embed:f,quick:f}).default({analyze:{harness:"claude-code",model:"claude-opus-4-7",allowedTools:["Read","Write","Edit","LS","Glob","Grep","WebSearch","WebFetch"]},chat:{harness:"claude-code",model:"claude-sonnet-4-6",allowedTools:["Read","LS","Glob","Grep","WebSearch","WebFetch"]},rag:{harness:"ollama",model:"llama3.1:8b",allowedTools:[]},embed:{harness:"ollama",model:"nomic-embed-text",allowedTools:[]},quick:{harness:"claude-code",model:"claude-haiku-4-5",allowedTools:[]}}),mapServices:d.Ik({enabled:d.YO(d.Yj()).default(["google","yandex","apple","osm"])}).default({enabled:["google","yandex","apple","osm"]}),ngrok:d.Ik({authtoken:d.Yj().default(""),apiKey:d.Yj().default(""),domain:d.Yj().default(""),port:d.ai().int().min(1).max(65535).default(3210)}).default({authtoken:"",apiKey:"",domain:"",port:3210})}),i=h.parse({})},78744:(a,b,c)=>{"use strict";c.d(b,{p:()=>i,M:()=>j});var d=c(76760),e=c.n(d),f=c(28548);function g(a,b){return a.replace(/\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g,(a,c)=>{let d=b[c];return void 0===d?a:String(d)})}let h="english";async function i(a){let b=await (0,f.PM)("analyze"),c=e().relative(a.root,a.scope)||".",d=a.files.slice(0,400),i=a.files.length>400?`
645
648
  …and ${a.files.length-400} more files (truncated).`:"";return g(b,{language:a.language??h,root:a.root,scope:a.scope,relScope:c,reflexScope:a.reflexScope,files:d.map(a=>` - ${a}`).join("\n"),fileCount:a.files.length,overflow:i})}async function j(a){return[g(await (0,f.PM)("chat"),{language:a.language??h,root:a.root,scope:a.scope,reflexScope:a.reflexScope}),'## Routing: you are an orchestrator, not the worker\n\nFor anything non-trivial (deep KB reading, multi-file research, code writes, utility creation, summarization of large texts) — DELEGATE to a specialist sub-agent instead of doing it yourself. Sub-agents run with a focused system prompt and a constrained toolset.\n\nAvailable roles:\n - **researcher** — read-only KB / web research. Use for "find / gather / quote".\n - **coder** — writes/edits files (Write/Edit + read tools). Use for "do / fix / create a file".\n - **summarizer** — no tools; compresses long text from the brief. Use for "compress / extract the main points" from a large chunk.\n - **kb-writer** — designs a structured KB entry (returns JSON for <<reflex:kb>>). Use when something is worth saving but the shape is non-trivial.\n - **utility-builder** — designs a Reflex utility (manifest + ui.tsx). Use when the user asks to build a new utility.\n\nTo dispatch, emit one or more markers in a single turn and STOP:\n\n <<reflex:dispatch>>{"id":"r1","role":"researcher","brief":"Read INDEX.md and collect a list of topics."}<</reflex:dispatch>>\n\nRules:\n - `brief` must be self-contained — sub-agents do NOT see the chat transcript. Include all rel-paths, expected output shape, constraints.\n - Multiple dispatches in one turn run **concurrently**. Sequentially-dependent tasks → do them across multiple turns.\n - After dispatches Reflex re-invokes you with each sub-agent\'s output quoted. Compose the final user-facing reply from those results.\n - Do simple things yourself (one short answer, citing one file). Don\'t dispatch trivia.\n - Don\'t re-dispatch the same brief if a sub-agent returned empty — either solve it yourself or ask the user.\n\nOptional harness routing:\n - Add `"harness":"codex"` to the dispatch payload to run THAT sub-agent on Codex instead of inheriting yours. Useful when:\n – task is heavy code synthesis / refactor / type-fixing — Codex shines there.\n – task is short text classification / extraction — `"harness":"ollama"` is cheap and fast.\n - Without `harness`, the sub-agent inherits the orchestrator\'s runtime — usually fine. Override only when you have a concrete reason.\n - Example: `<<reflex:dispatch>>{"role":"coder","harness":"codex","brief":"Rewrite X in TypeScript strict mode"}<</reflex:dispatch>>`','## Widgets: putting results on the project dashboard\n\nWhen the user wants you to produce something durable — a news digest, a checklist, a KPI snapshot, a curated link list — DON\'T just answer in chat and forget. Materialize it as a **widget** on the project dashboard so the user sees it on every visit.\n\nEmit a marker on its own block:\n\n```\n<<reflex:widget-create>>{\n "id": "<kebab-case-id>",\n "title": "<short user-visible title>",\n "description": "<one-line subtitle, optional>",\n "kind": "<one of: markdown, news-list, link-list, kpi, checklist, quote, kb-pinned, progress, image, stat-table, map>",\n "data": { ...kind-specific payload... },\n "size": { "mode": "md" }\n}<</reflex:widget-create>>\n```\n\nUse `widget-update` (same shape, same id) when refreshing an existing widget — e.g. user asked for a weekly news digest, you regenerate the items.\n\n### Auto-refresh and memory\n\n- `refresh`: `"manual"` (default) | `"hourly"` | `"daily"` | `"weekly"`. When set to anything other than manual, Reflex\'s scheduler will periodically re-invoke you on the source topic with a synthetic `[Reflex] Refresh widget <id>` user-message — you respond by emitting a fresh `<<reflex:widget-update>>` with the same id.\n- `memory`: agent-managed inline state (markdown, <2KB). Use for **short** state that should persist across refreshes — e.g. "already-shown URLs to dedupe", "last 4 KPI snapshots", "running tally". On every refresh prompt you\'ll see the current `memory` value; emit an updated one inside the widget-update payload.\n- `memoryFile`: rel-path (inside `.reflex/`) for **long** memory — a journal-style markdown file you append to via the regular `<<reflex:kb>>` directive. Use for OKR-history-style widgets where the journal itself is worth keeping in the KB tree. Pick a path like `widgets/<widget-id>.memory.md`.\n- Pick ONE of `memory` or `memoryFile` per widget. Inline for compact structured deduping; file for narrative history.\n- When refreshing, prefer **incremental** updates: dedupe against memory, add new items at the top, drop very old ones — the user wants signal, not a snapshot reset.\n\n### Kinds and `data` shapes\n\n- `markdown` — `{body: string}`. Long-form notes, summaries, instructions.\n- `news-list` — `{items: [{title, url?, summary?, source?, date?}]}`. Headlines + 1-2 line summaries.\n- `link-list` — `{items: [{title, url, hint?}]}`. Curated resources, bookmarks.\n- `kpi` — `{items: [{label, value, hint?, delta?: "up"|"down"|"flat"}]}`. Big-number tiles.\n- `checklist` — `{items: [{text, done?: boolean}]}`. Action items / todo.\n- `quote` — `{text, attribution?}`. One memorable quote.\n- `kb-pinned` — `{items: [{rel, title?, snippet?}]}`. Pinned KB rel-paths.\n- `progress` — `{items: [{label, current, target, unit?}]}`. Goal-tracking bars.\n- `image` — `{url, alt?, caption?}`. Single image card.\n- `stat-table` — `{columns?: [string], rows: [[string, ...]]}`. Compact comparison table.\n- `map` — `{points: [{lat, lng, title, description?}], center?, zoom?, route?: {stops: number[], color?, mode?}}`. Map with points + an optional route (polyline + multi-waypoint deep-links: google/yandex/2gis/apple/osm/waze/organic). `route.stops` — array of indices in `points` in traversal order (minimum 2). Each point gets a popup with branded service buttons. By default the map auto-fits to the points. IMPORTANT: `lat`/`lng` are numbers in decimal degrees (lat=55.7558, lng=37.6173 — Moscow). NOT strings. If you have an address — find coordinates via WebSearch/WebFetch (geocoding); don\'t invent them. The user can search for places (Nominatim) and build a route right in the widget — the "Route" button switches to point-pick-by-click mode.\n\n### Interactivity\n\nDashboard widgets are interactive — the user can, right in the UI:\n - **checklist**: tick checkboxes (toggle done), delete items, add new ones.\n - **link-list**: delete links.\n - **news-list**: mark a news item as read (`read:true`), remove the card.\n - **kb-pinned**: unpin files.\n - **progress**: \xb1 buttons on `current`.\n\nThese changes are written straight to disk, bypassing you. On the next `widget-update` you\'ll see the current state. Strategy:\n - If the user deleted a checklist item — don\'t add it back (that\'s a signal).\n - If the user marked a news item as read — record its URL in `memory` for dedup.\n - If the user reset progress — apparently it\'s a new cycle; respect it.\n\n### Rules\n\n- Pick the SIMPLEST kind that fits — don\'t squeeze a news digest into `markdown` if `news-list` exists.\n- `id` is stable: same id across `widget-create` and `widget-update`. Pick a slug from the topic content (e.g. `tech-news-weekly`, `okrs-q2`).\n- `size.mode`: `"sm"` (3 per row, icons/KPI) | `"md"` (default, 2 per row) | `"wide"` (full row, for long tables/markdown). Match it to the content, but the user can override via the UI — your choice is only a hint.\n- After emitting the marker, briefly tell the user in plain text WHAT widget you assembled. IMPORTANT: a new widget does NOT appear on the dashboard automatically — it sits in the library as a draft. The user sees it right in the chat (preview) and can pin it with the "Pin to dashboard" button or via the library. Don\'t claim the widget is already on the dashboard.\n- Reflex automatically shows a live preview of the widget inside this chat turn — no need to re-render in markdown.',`## Workflows — built-in "n8n for non-techies"
646
649
 
647
650
  When the user wants to automate something recurring (morning digest, page monitor, "fetch → process → save" routine), emit a \`<<reflex:workflow-create>>\` marker — Reflex will save the workflow to disk and show a preview with a link to the editor.