reflex-agent 0.4.0 → 0.4.1

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 (133) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +72 -72
  3. package/.next/app-path-routes-manifest.json +4 -4
  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 +2 -2
  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 +2 -2
  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_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/utilities/[scope]/[id]/iframe/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/utilities/[scope]/[id]/style.css/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/audit/page.js +1 -1
  35. package/.next/server/app/audit/page.js.nft.json +1 -1
  36. package/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/onboarding/page.js +3 -3
  38. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/page.js +2 -2
  40. package/.next/server/app/page.js.nft.json +1 -1
  41. package/.next/server/app/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/roots/[id]/chat/[topicId]/page.js +2 -2
  43. package/.next/server/app/roots/[id]/chat/[topicId]/page.js.nft.json +1 -1
  44. package/.next/server/app/roots/[id]/chat/[topicId]/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/roots/[id]/kb/[...slug]/page.js +2 -2
  46. package/.next/server/app/roots/[id]/kb/[...slug]/page.js.nft.json +1 -1
  47. package/.next/server/app/roots/[id]/kb/[...slug]/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/roots/[id]/page.js +3 -3
  49. package/.next/server/app/roots/[id]/page.js.nft.json +1 -1
  50. package/.next/server/app/roots/[id]/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/roots/[id]/workflows/[wfId]/page.js +2 -2
  52. package/.next/server/app/roots/[id]/workflows/[wfId]/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/roots/[id]/workflows/page.js +1 -1
  54. package/.next/server/app/roots/[id]/workflows/page.js.nft.json +1 -1
  55. package/.next/server/app/roots/[id]/workflows/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/roots/new/page.js +4 -4
  57. package/.next/server/app/roots/new/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/settings/page.js +5 -5
  59. package/.next/server/app/settings/page.js.nft.json +1 -1
  60. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  61. package/.next/server/app/share/[id]/file/page.js +2 -2
  62. package/.next/server/app/share/[id]/file/page_client-reference-manifest.js +1 -1
  63. package/.next/server/app/share/[id]/page.js +2 -2
  64. package/.next/server/app/share/[id]/page.js.nft.json +1 -1
  65. package/.next/server/app/share/[id]/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/utilities/[scope]/[id]/page.js +2 -2
  67. package/.next/server/app/utilities/[scope]/[id]/page.js.nft.json +1 -1
  68. package/.next/server/app/utilities/[scope]/[id]/page_client-reference-manifest.js +1 -1
  69. package/.next/server/app/utilities/page.js +2 -2
  70. package/.next/server/app/utilities/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app-paths-manifest.json +4 -4
  72. package/.next/server/chunks/1373.js +1 -0
  73. package/.next/server/chunks/{3662.js → 1669.js} +1 -1
  74. package/.next/server/chunks/2035.js +1 -1
  75. package/.next/server/chunks/285.js +3 -3
  76. package/.next/server/chunks/2995.js +1 -1
  77. package/.next/server/chunks/3004.js +1 -0
  78. package/.next/server/chunks/3332.js +1 -1
  79. package/.next/server/chunks/3795.js +3 -0
  80. package/.next/server/chunks/4812.js +1 -1
  81. package/.next/server/chunks/{7264.js → 8312.js} +2 -2
  82. package/.next/server/chunks/9098.js +1 -1
  83. package/.next/server/chunks/9883.js +1 -0
  84. package/.next/server/functions-config-manifest.json +1 -1
  85. package/.next/server/middleware-build-manifest.js +1 -1
  86. package/.next/server/middleware-manifest.json +5 -5
  87. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  88. package/.next/server/pages/500.html +1 -1
  89. package/.next/server/server-reference-manifest.js +1 -1
  90. package/.next/server/server-reference-manifest.json +1 -1
  91. package/.next/static/chunks/1477-a74db494f91aeafc.js +1 -0
  92. package/.next/static/chunks/3496-59013c5bb64c51a9.js +1 -0
  93. package/.next/static/chunks/4108.71716ca4d2bdad01.js +1 -0
  94. package/.next/static/chunks/6132-51c867b4544ebefc.js +1 -0
  95. package/.next/static/chunks/7887-6a5dd2999717777f.js +1 -0
  96. package/.next/static/chunks/{8982-137b26d526f24a8b.js → 8151-41c02ad988318d11.js} +1 -1
  97. package/.next/static/chunks/app/layout-8e0de66d47e2d411.js +1 -0
  98. package/.next/static/chunks/app/onboarding/page-1ec2ec3dadef91b8.js +1 -0
  99. package/.next/static/chunks/app/page-e9b67e9e2ee870ac.js +1 -0
  100. package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-438c36466499e15f.js +1 -0
  101. package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-21d327eaa0619f9e.js +1 -0
  102. package/.next/static/chunks/app/roots/[id]/page-cb8185fedf0f5f4d.js +1 -0
  103. package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-40899d4270be9549.js +1 -0
  104. package/.next/static/chunks/app/roots/new/page-2379e2c4c2a63ce2.js +1 -0
  105. package/.next/static/chunks/app/settings/page-e3a46803ee1a5992.js +1 -0
  106. package/.next/static/chunks/app/share/[id]/page-c3b61aff7aa5d75e.js +1 -0
  107. package/.next/static/chunks/app/utilities/[scope]/[id]/{page-b5c5ca2c72af92a4.js → page-e378fbede449f071.js} +1 -1
  108. package/.next/static/chunks/app/utilities/page-60d7c81fe67376d2.js +1 -0
  109. package/.next/static/chunks/{webpack-4f6b598d96af4ca7.js → webpack-6c7ed0da8ba98645.js} +1 -1
  110. package/.next/trace +47 -47
  111. package/package.json +1 -1
  112. package/.next/server/chunks/4347.js +0 -3
  113. package/.next/server/chunks/4836.js +0 -1
  114. package/.next/server/chunks/8823.js +0 -1
  115. package/.next/server/chunks/9402.js +0 -1
  116. package/.next/static/chunks/3873-924fc0f386eb1005.js +0 -1
  117. package/.next/static/chunks/4108.e2aef54ba9b68f73.js +0 -1
  118. package/.next/static/chunks/4690-3065e11cc18ad056.js +0 -1
  119. package/.next/static/chunks/5779-bf4e7d8930f04f49.js +0 -1
  120. package/.next/static/chunks/6886-4b169c08d9745ce0.js +0 -1
  121. package/.next/static/chunks/app/layout-f939333a791cb267.js +0 -1
  122. package/.next/static/chunks/app/onboarding/page-4291d58b0c6b16e1.js +0 -1
  123. package/.next/static/chunks/app/page-c84defded9ae76c3.js +0 -1
  124. package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-9de733628c6de625.js +0 -1
  125. package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-f7772a63468ff75d.js +0 -1
  126. package/.next/static/chunks/app/roots/[id]/page-db94c337847a0543.js +0 -1
  127. package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-cc556969ba89dab1.js +0 -1
  128. package/.next/static/chunks/app/roots/new/page-70df040d98ddfcb9.js +0 -1
  129. package/.next/static/chunks/app/settings/page-0451927b1906fdf0.js +0 -1
  130. package/.next/static/chunks/app/share/[id]/page-04701cd3e2f42faf.js +0 -1
  131. package/.next/static/chunks/app/utilities/page-d66b3d654623ac67.js +0 -1
  132. /package/.next/static/{qL2ylFt2IFmDVVrLaCl4u → q-lgiDq7RjplLNgYcdvi2}/_buildManifest.js +0 -0
  133. /package/.next/static/{qL2ylFt2IFmDVVrLaCl4u → q-lgiDq7RjplLNgYcdvi2}/_ssgManifest.js +0 -0
@@ -68,8 +68,8 @@ Procedure:
68
68
  Constraints:
69
69
  - Don't ask more than 3 questions in step 4. Two-line max per question.
70
70
  - Don't speculate about feelings the user didn't state. Inferred mood is best-guess, not therapy.
71
- - If the user explicitly asks for a weekly review during this flow, switch to the \`/skill weekly-reflect\` flow.`}let o=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","utility-card"]},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.readEvents)(b.path,k.meta.id),i=h.filter(a=>"assistant-delta"===a.type).map(a=>a.text).join("").trim();if(!i){let b=h.filter(a=>"error"===a.type).map(a=>a.message).filter(Boolean);if(b.length>0)throw Error(`Agent finished with errors: ${b.slice(0,3).join(" \xb7 ")}`);let c=h.filter(a=>"system"===a.type).map(a=>a.text).filter(Boolean);if(c.length>0)return{text:c.join("\n"),topicId:k.meta.id,timedOut:l};if(l)throw Error(`Agent did not respond within ${Math.round((a.timeoutMs??3e5)/1e3)}s (timeout)`);throw Error("Agent finished without producing any text — perhaps no chat engine is configured in Settings.")}return{text:i,topicId:k.meta.id,timedOut:l}}finally{try{await e.z.stopTopic(k.meta.id)}catch{}try{await (0,h.do)(b.path,k.meta.id)}catch{}}}function m(a){return new Promise(b=>setTimeout(b,a))}[e,f]=k.then?(await k)():k,d()}catch(a){d(a)}})},3890:(a,b,c)=>{"use strict";c.d(b,{u:()=>j,z:()=>k});var d=c(73745);c(66493);var e=c(76760),f=c.n(e),g=c(53905),h=c(19319),i=c(5492);async function j(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,h.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(l),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??f().basename(b),isDir:!1,fileRel:a.rel}}).sort((a,b)=>"INDEX.md"===f().basename(a.rel)?-1:"INDEX.md"===f().basename(b.rel)?1:a.label.localeCompare(b.label)),d=b.find(a=>"INDEX.md"===f().basename(a.rel)),g=d?.label??a;e.push({rel:`${a}/`,label:g,isDir:!0,children:b})}return e}(c)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function k(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,i.hk)(b.path);return{ok:!0,topics:c.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)}}}function l(a,b){let c=f().basename(a.rel),d=f().basename(b.rel);return"INDEX.md"===c?-1:"INDEX.md"===d?1:a.label.localeCompare(b.label)}(0,c(63781).D)([j,k]),(0,d.A)(j,"40eb7ee75c552b591121c227517fdbf24b27a01cc1",null),(0,d.A)(k,"4090ac3c673707e4a3008e6c19afe124b5014a2bc6",null)},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}:{}},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}:{}};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}
72
- ${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}:{},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})}},12354:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>J});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(48151),w=c(88724),x=c(27456),y=c(68394),z=c(20583),A=c(3265);let B=(0,A.createServerReference)("40eb7ee75c552b591121c227517fdbf24b27a01cc1",A.callServer,void 0,A.findSourceMapURL,"loadKbSectionsAction"),C=(0,A.createServerReference)("4090ac3c673707e4a3008e6c19afe124b5014a2bc6",A.callServer,void 0,A.findSourceMapURL,"loadTopicsAction"),D=(0,A.createServerReference)("00321bef261181407c68ca6f78a3c677c0823ea816",A.callServer,void 0,A.findSourceMapURL,"listRootsAction"),E=(0,A.createServerReference)("4056da73616c94311b8d83ffea49004bb90a26db0a",A.callServer,void 0,A.findSourceMapURL,"listAgentsAction");var F=c(97162),G=c(29370),H=c(65266),I=c(10082);function J({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 D();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)(K,{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)(F.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)(G.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 K({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)(null),[z,A]=(0,e.useState)(null),[D,F]=(0,e.useState)(null),[G,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[M,N]=(0,e.useState)(!1),Q=(0,h.usePathname)(),R=(0,e.useCallback)(async()=>{I(!0);let b=await B(a.id);I(!1),b.ok?y(b.sections):y([])},[a.id]),S=(0,e.useCallback)(async()=>{K(!0);let b=await C(a.id);K(!1),b.ok?A(b.topics):A([])},[a.id]),U=(0,e.useCallback)(async()=>{N(!0);let b=await E({rootId:a.id});N(!1),b.ok?F(b.agents):F([])},[a.id]);(0,w.S9)(w.Zi.kbChanged(a.id),()=>{k?R():y(null)}),(0,w.S9)(w.Zi.topicsChanged(a.id),()=>{m?S():A(null),u?U():F(null)});let V=async()=>{let a=!k;l(a),a&&null===x&&!G&&await R()},W=async()=>{let a=!m;t(a),a&&null===z&&!J&&await S()},X=async()=>{let a=!u;v(a),a&&null===D&&!M&&await U()},Y=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:Y})]})]}),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:V,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")}),G&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"})]}),k&&null!==x&&(0,d.jsx)(P,{rootId:a.id,sections:x,pathname:Q})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:W,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)(s.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.topics")}),J&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==z&&(0,d.jsx)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:z.length})]}),m&&null!==z&&(0,d.jsx)(T,{rootId:a.id,topics:z,pathname:Q})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:X,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)(H.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.agents")}),M&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==D&&!M&&(0,d.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:[D.filter(a=>O(a.status)).length,"/",D.length]})]}),u&&null!==D&&(0,d.jsx)(L,{agents:D,pathname:Q})]})]})]})}function L({agents:a,pathname:b}){if(0===a.length)return(0,d.jsx)(M,{});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)(N,{agent:a,byParent:c,pathname:b,depth:0},a.id))})}function M(){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 N({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:[O(a.status)?(0,d.jsx)(I.A,{className:"h-3 w-3 text-emerald-600 shrink-0 animate-pulse"}):(0,d.jsx)(H.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)(N,{agent:a,byParent:b,pathname:c,depth:e+1},a.id))})]})}function O(a){return"starting"===a||"running"===a}function P({rootId:a,sections:b,pathname:c}){return 0===b.length?(0,d.jsx)(Q,{}):(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)(R,{rootId:a,section:b,pathname:c},b.rel):(0,d.jsx)("li",{children:(0,d.jsx)(S,{rootId:a,section:b,pathname:c})},b.rel))})}function Q(){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 R({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)(S,{rootId:a,section:b,pathname:c})},b.rel))})]})}function S({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 T({rootId:a,topics: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=>(0,d.jsx)(V,{rootId:a,topic:b,pathname:c},b.id))})}function U(){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 V({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"})})]})})}},13415:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L4:()=>r,OQ:()=>s,T$:()=>t,g3:()=>o,h$:()=>q,nC:()=>u,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,b){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let{readEvents:e}=await Promise.resolve().then(c.bind(c,20243)),f=await e(d.path,b),h=[],i=null,j=()=>{i&&i.text.trim()&&h.push({role:"assistant",text:(function(a){let b=a;for(let a of["permission","question","kb","utility","dispatch","mcp-add","youtube-summary","widget-create","widget-update","workflow-create","image-gen"])b=b.replace(RegExp(`<{1,2}reflex:${a}>{1,2}[\\s\\S]*?<{1,2}\\/reflex:${a}>{1,2}`,"g"),"");return b})(i.text).trim(),ts:i.ts}),i=null};for(let a of f)"user-message"===a.type?(j(),"string"==typeof a.text&&a.text.trim()&&!a.text.startsWith("[Helper \xb7")&&h.push({role:"user",text:a.text,ts:a.ts})):"assistant-delta"===a.type?(i||(i={text:"",ts:a.ts}),i.text+=a.text):("turn-end"===a.type||"agent-end"===a.type)&&j();return j(),{ok:!0,messages:h}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function u(a){try{let b=await (0,g.Zn)(a.rootId);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,h.hk)(b.path)).find(b=>b.meta.helperFor===a.utilityId);if(c)return{ok:!0,topicId:c.meta.id,created:!1};let d=await (0,i.M)(),e=d.assignments.chat,f=await (0,h.OY)({root:b.path,firstMessage:`[Helper \xb7 ${a.utilityName}]`,harness:e.harness,model:e.model,language:d.language,helperFor:a.utilityId});return{ok:!0,topicId:f.meta.id,created:!0}}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,u]),(0,e.A)(o,"788301b73b1bae8267c9fb1f5d6b88d88e7f820a26",null),(0,e.A)(p,"40cc69b4049be3fd95dacf22998b669186fa2e7d80",null),(0,e.A)(q,"709a1a8b077de0121e477df1e38a94395da1c0efda",null),(0,e.A)(r,"6071bde72db4b56ffa98d7a081cee067597c1083be",null),(0,e.A)(s,"60c6b1dfcc216efabc2a2dccf598695bbfb622eaf3",null),(0,e.A)(t,"60993409089bd3ce6fb2ccb8a980c2bdf6a9936958",null),(0,e.A)(u,"4089be546dcbac5e12874e666df339ac453b1f8d31",null),d()}catch(a){d(a)}})},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.readEvents)(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,"604abf66ba7691b43b74fb8dded7da1a128c116d1d",null),(0,e.A)(l,"4056da73616c94311b8d83ffea49004bb90a26db0a",null),(0,e.A)(m,"40701ac692d7427eab8a07ee82f339eaee348bc30c",null),d()}catch(a){d(a)}})},17640:(a,b,c)=>{"use strict";c.d(b,{M:()=>o,D:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(14126);let h=g.Ik({"claude-code":g.Ik({enabled:g.zM().default(!0)}),codex:g.Ik({enabled:g.zM().default(!0)}),ollama:g.Ik({enabled:g.zM().default(!0),baseUrl:g.Yj().url().default("http://localhost:11434")})}),i=g.Ik({harness:g.k5(["claude-code","codex","ollama"]),model:g.Yj().min(1),allowedTools:g.YO(g.Yj()).default([])}),j=g.Ik({enabled:g.zM().default(!0),maxDimension:g.ai().int().min(256).max(8192).default(2e3),quality:g.ai().int().min(40).max(100).default(85),format:g.k5(["auto","jpeg","webp","original"]).default("auto")}),k=g.Ik({version:g.eu(1).default(1),language:g.Yj().min(1).default("en"),onboardedAt:g.Yj().optional(),userName:g.Yj().default(""),timezone:g.Yj().default(""),uiMode:g.k5(["simple","advanced"]).default("simple"),imageProcessing:j.default({enabled:!0,maxDimension:2e3,quality:85,format:"auto"}),harnesses:h.default({"claude-code":{enabled:!0},codex:{enabled:!0},ollama:{enabled:!0,baseUrl:"http://localhost:11434"}}),assignments:g.Ik({analyze:i,chat:i,rag:i,embed:i,quick:i}).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:g.Ik({enabled:g.YO(g.Yj()).default(["google","yandex","apple","osm"])}).default({enabled:["google","yandex","apple","osm"]}),ngrok:g.Ik({authtoken:g.Yj().default(""),apiKey:g.Yj().default(""),domain:g.Yj().default(""),port:g.ai().int().min(1).max(65535).default(3210)}).default({authtoken:"",apiKey:"",domain:"",port:3210})}),l=k.parse({}),m=(0,c(29163)._)(),n=f().join(m,"settings.json");async function o(){try{let a=await d.promises.readFile(n,"utf8"),b=k.safeParse(JSON.parse(a));if(!b.success)return l;return b.data}catch(b){var a;if("object"==typeof(a=b)&&null!==a&&"code"in a&&"ENOENT"===a.code)return l;throw b}}async function p(a){let b=k.parse(a);await d.promises.mkdir(m,{recursive:!0}),await d.promises.writeFile(n,JSON.stringify(b,null,2)+"\n","utf8")}},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()}).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"]),title:d.Yj().min(1).max(120).optional(),description:d.Yj().max(280).optional(),data:d.g1(d.Yj(),d.L5()).default({})}).optional()}),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,{Zn:()=>i,readEvents:()=>j,v:()=>k});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}},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,12354)),Promise.resolve().then(c.bind(c,99668)),Promise.resolve().then(c.bind(c,54225))},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:()=>{},48151:(a,b,c)=>{"use strict";c.d(b,{L:()=>e});var d=c(3265);let e=(0,d.createServerReference)("6071bde72db4b56ffa98d7a081cee067597c1083be",d.callServer,void 0,d.findSourceMapURL,"deleteTopicAction")},49410:(a,b,c)=>{"use strict";c.d(b,{b:()=>l,k:()=>n});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"),k=[{id:"deep-research",title:"Deep research",description:"Multi-agent research with citation discipline — facts and synthesis land as cross-linked KB entries.",author:"builtin",instructions:`## Skill: deep-research
71
+ - If the user explicitly asks for a weekly review during this flow, switch to the \`/skill weekly-reflect\` flow.`}let o=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","utility-card"]},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.readEvents)(b.path,k.meta.id),i=h.filter(a=>"assistant-delta"===a.type).map(a=>a.text).join("").trim();if(!i){let b=h.filter(a=>"error"===a.type).map(a=>a.message).filter(Boolean);if(b.length>0)throw Error(`Agent finished with errors: ${b.slice(0,3).join(" \xb7 ")}`);let c=h.filter(a=>"system"===a.type).map(a=>a.text).filter(Boolean);if(c.length>0)return{text:c.join("\n"),topicId:k.meta.id,timedOut:l};if(l)throw Error(`Agent did not respond within ${Math.round((a.timeoutMs??3e5)/1e3)}s (timeout)`);throw Error("Agent finished without producing any text — perhaps no chat engine is configured in Settings.")}return{text:i,topicId:k.meta.id,timedOut:l}}finally{try{await e.z.stopTopic(k.meta.id)}catch{}try{await (0,h.do)(b.path,k.meta.id)}catch{}}}function m(a){return new Promise(b=>setTimeout(b,a))}[e,f]=k.then?(await k)():k,d()}catch(a){d(a)}})},3890:(a,b,c)=>{"use strict";c.d(b,{u:()=>j,z:()=>k});var d=c(73745);c(66493);var e=c(76760),f=c.n(e),g=c(53905),h=c(19319),i=c(5492);async function j(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,h.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(l),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??f().basename(b),isDir:!1,fileRel:a.rel}}).sort((a,b)=>"INDEX.md"===f().basename(a.rel)?-1:"INDEX.md"===f().basename(b.rel)?1:a.label.localeCompare(b.label)),d=b.find(a=>"INDEX.md"===f().basename(a.rel)),g=d?.label??a;e.push({rel:`${a}/`,label:g,isDir:!0,children:b})}return e}(c)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function k(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,i.hk)(b.path);return{ok:!0,topics:c.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)}}}function l(a,b){let c=f().basename(a.rel),d=f().basename(b.rel);return"INDEX.md"===c?-1:"INDEX.md"===d?1:a.label.localeCompare(b.label)}(0,c(63781).D)([j,k]),(0,d.A)(j,"407efb5dcf675369a3c3d01a791f392092b0bb1322",null),(0,d.A)(k,"40a2e165bb221194ec1d8a911bd3fddedb52793eed",null)},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}:{}},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}:{}};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}
72
+ ${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}:{},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})}},12837:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>J});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(23574),w=c(88724),x=c(27456),y=c(68394),z=c(20583),A=c(3265);let B=(0,A.createServerReference)("407efb5dcf675369a3c3d01a791f392092b0bb1322",A.callServer,void 0,A.findSourceMapURL,"loadKbSectionsAction"),C=(0,A.createServerReference)("40a2e165bb221194ec1d8a911bd3fddedb52793eed",A.callServer,void 0,A.findSourceMapURL,"loadTopicsAction"),D=(0,A.createServerReference)("00015680fb3186e1a7f1877f44b4f959ede8c6cd28",A.callServer,void 0,A.findSourceMapURL,"listRootsAction"),E=(0,A.createServerReference)("40a0ce3bc5c6d409a21ac60e5629eda54b7cc6780d",A.callServer,void 0,A.findSourceMapURL,"listAgentsAction");var F=c(97162),G=c(29370),H=c(65266),I=c(10082);function J({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 D();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)(K,{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)(F.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)(G.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 K({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)(null),[z,A]=(0,e.useState)(null),[D,F]=(0,e.useState)(null),[G,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[M,N]=(0,e.useState)(!1),Q=(0,h.usePathname)(),R=(0,e.useCallback)(async()=>{I(!0);let b=await B(a.id);I(!1),b.ok?y(b.sections):y([])},[a.id]),S=(0,e.useCallback)(async()=>{K(!0);let b=await C(a.id);K(!1),b.ok?A(b.topics):A([])},[a.id]),U=(0,e.useCallback)(async()=>{N(!0);let b=await E({rootId:a.id});N(!1),b.ok?F(b.agents):F([])},[a.id]);(0,w.S9)(w.Zi.kbChanged(a.id),()=>{k?R():y(null)}),(0,w.S9)(w.Zi.topicsChanged(a.id),()=>{m?S():A(null),u?U():F(null)});let V=async()=>{let a=!k;l(a),a&&null===x&&!G&&await R()},W=async()=>{let a=!m;t(a),a&&null===z&&!J&&await S()},X=async()=>{let a=!u;v(a),a&&null===D&&!M&&await U()},Y=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:Y})]})]}),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:V,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")}),G&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"})]}),k&&null!==x&&(0,d.jsx)(P,{rootId:a.id,sections:x,pathname:Q})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:W,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)(s.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.topics")}),J&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==z&&(0,d.jsx)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:z.length})]}),m&&null!==z&&(0,d.jsx)(T,{rootId:a.id,topics:z,pathname:Q})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:X,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)(H.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:c("sidebar.agents")}),M&&(0,d.jsx)(r.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==D&&!M&&(0,d.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:[D.filter(a=>O(a.status)).length,"/",D.length]})]}),u&&null!==D&&(0,d.jsx)(L,{agents:D,pathname:Q})]})]})]})}function L({agents:a,pathname:b}){if(0===a.length)return(0,d.jsx)(M,{});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)(N,{agent:a,byParent:c,pathname:b,depth:0},a.id))})}function M(){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 N({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:[O(a.status)?(0,d.jsx)(I.A,{className:"h-3 w-3 text-emerald-600 shrink-0 animate-pulse"}):(0,d.jsx)(H.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)(N,{agent:a,byParent:b,pathname:c,depth:e+1},a.id))})]})}function O(a){return"starting"===a||"running"===a}function P({rootId:a,sections:b,pathname:c}){return 0===b.length?(0,d.jsx)(Q,{}):(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)(R,{rootId:a,section:b,pathname:c},b.rel):(0,d.jsx)("li",{children:(0,d.jsx)(S,{rootId:a,section:b,pathname:c})},b.rel))})}function Q(){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 R({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)(S,{rootId:a,section:b,pathname:c})},b.rel))})]})}function S({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 T({rootId:a,topics: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=>(0,d.jsx)(V,{rootId:a,topic:b,pathname:c},b.id))})}function U(){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 V({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"})})]})})}},13415:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L4:()=>r,OQ:()=>s,T$:()=>t,g3:()=>o,h$:()=>q,nC:()=>u,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,b){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let{readEvents:e}=await Promise.resolve().then(c.bind(c,20243)),f=await e(d.path,b),h=[],i=null,j=()=>{i&&i.text.trim()&&h.push({role:"assistant",text:(function(a){let b=a;for(let a of["permission","question","kb","utility","dispatch","mcp-add","youtube-summary","widget-create","widget-update","workflow-create","image-gen"])b=b.replace(RegExp(`<{1,2}reflex:${a}>{1,2}[\\s\\S]*?<{1,2}\\/reflex:${a}>{1,2}`,"g"),"");return b})(i.text).trim(),ts:i.ts}),i=null};for(let a of f)"user-message"===a.type?(j(),"string"==typeof a.text&&a.text.trim()&&!a.text.startsWith("[Helper \xb7")&&h.push({role:"user",text:a.text,ts:a.ts})):"assistant-delta"===a.type?(i||(i={text:"",ts:a.ts}),i.text+=a.text):("turn-end"===a.type||"agent-end"===a.type)&&j();return j(),{ok:!0,messages:h}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function u(a){try{let b=await (0,g.Zn)(a.rootId);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,h.hk)(b.path)).find(b=>b.meta.helperFor===a.utilityId);if(c)return{ok:!0,topicId:c.meta.id,created:!1};let d=await (0,i.M)(),e=d.assignments.chat,f=await (0,h.OY)({root:b.path,firstMessage:`[Helper \xb7 ${a.utilityName}]`,harness:e.harness,model:e.model,language:d.language,helperFor:a.utilityId});return{ok:!0,topicId:f.meta.id,created:!0}}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,u]),(0,e.A)(o,"784d727390552e79042d0bd5105f6dba03480ced69",null),(0,e.A)(p,"40d7cbb0c3d256e7f41f930e3465cffabf02effbfb",null),(0,e.A)(q,"708ac4f0ac9aed65bdfa7148a3596a8140cd82e4a1",null),(0,e.A)(r,"606cc3111b0d1e9c8fe9d5b91834979103543aaef4",null),(0,e.A)(s,"603ceb076af8dc04d50068312dbff693994071b371",null),(0,e.A)(t,"60fbe5530aa47b0bf7232336e5f7572f8b5172a5ef",null),(0,e.A)(u,"40d6e9e07d12c12311aa1d6da666c3d686ba11aa71",null),d()}catch(a){d(a)}})},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.readEvents)(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,"60326d0b2d67c4f36dfffa95798acdb319da4e36d3",null),(0,e.A)(l,"40a0ce3bc5c6d409a21ac60e5629eda54b7cc6780d",null),(0,e.A)(m,"407ce9df8c45ec03ae79f661875f4a2ee9ce9fbae0",null),d()}catch(a){d(a)}})},17640:(a,b,c)=>{"use strict";c.d(b,{M:()=>o,D:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(14126);let h=g.Ik({"claude-code":g.Ik({enabled:g.zM().default(!0)}),codex:g.Ik({enabled:g.zM().default(!0)}),ollama:g.Ik({enabled:g.zM().default(!0),baseUrl:g.Yj().url().default("http://localhost:11434")})}),i=g.Ik({harness:g.k5(["claude-code","codex","ollama"]),model:g.Yj().min(1),allowedTools:g.YO(g.Yj()).default([])}),j=g.Ik({enabled:g.zM().default(!0),maxDimension:g.ai().int().min(256).max(8192).default(2e3),quality:g.ai().int().min(40).max(100).default(85),format:g.k5(["auto","jpeg","webp","original"]).default("auto")}),k=g.Ik({version:g.eu(1).default(1),language:g.Yj().min(1).default("en"),onboardedAt:g.Yj().optional(),userName:g.Yj().default(""),timezone:g.Yj().default(""),uiMode:g.k5(["simple","advanced"]).default("simple"),imageProcessing:j.default({enabled:!0,maxDimension:2e3,quality:85,format:"auto"}),harnesses:h.default({"claude-code":{enabled:!0},codex:{enabled:!0},ollama:{enabled:!0,baseUrl:"http://localhost:11434"}}),assignments:g.Ik({analyze:i,chat:i,rag:i,embed:i,quick:i}).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:g.Ik({enabled:g.YO(g.Yj()).default(["google","yandex","apple","osm"])}).default({enabled:["google","yandex","apple","osm"]}),ngrok:g.Ik({authtoken:g.Yj().default(""),apiKey:g.Yj().default(""),domain:g.Yj().default(""),port:g.ai().int().min(1).max(65535).default(3210)}).default({authtoken:"",apiKey:"",domain:"",port:3210})}),l=k.parse({}),m=(0,c(29163)._)(),n=f().join(m,"settings.json");async function o(){try{let a=await d.promises.readFile(n,"utf8"),b=k.safeParse(JSON.parse(a));if(!b.success)return l;return b.data}catch(b){var a;if("object"==typeof(a=b)&&null!==a&&"code"in a&&"ENOENT"===a.code)return l;throw b}}async function p(a){let b=k.parse(a);await d.promises.mkdir(m,{recursive:!0}),await d.promises.writeFile(n,JSON.stringify(b,null,2)+"\n","utf8")}},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()}).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"]),title:d.Yj().min(1).max(120).optional(),description:d.Yj().max(280).optional(),data:d.g1(d.Yj(),d.L5()).default({})}).optional()}),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,{Zn:()=>i,readEvents:()=>j,v:()=>k});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}},23574:(a,b,c)=>{"use strict";c.d(b,{L:()=>e});var d=c(3265);let e=(0,d.createServerReference)("606cc3111b0d1e9c8fe9d5b91834979103543aaef4",d.callServer,void 0,d.findSourceMapURL,"deleteTopicAction")},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,12837)),Promise.resolve().then(c.bind(c,99668)),Promise.resolve().then(c.bind(c,54225))},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:()=>{},49410:(a,b,c)=>{"use strict";c.d(b,{b:()=>l,k:()=>n});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"),k=[{id:"deep-research",title:"Deep research",description:"Multi-agent research with citation discipline — facts and synthesis land as cross-linked KB entries.",author:"builtin",instructions:`## Skill: deep-research
73
73
 
74
74
  Run the investigation like a professional analyst. This skill is NOT a chat answer; it produces durable, cited KB artifacts.
75
75
 
@@ -133,7 +133,7 @@ Procedure:
133
133
  Constraints:
134
134
  - Quote the user's own words when illustrating themes — don't paraphrase into something they didn't say.
135
135
  - If fewer than 4 entries exist in the window, say so and skip the reflection (it's not enough signal yet).
136
- - Avoid clinical language. "Notice" not "diagnose".`},{id:"kb-curator",title:"KB curator",description:"Turns raw content into clean KB notes with the right kind and meta.",author:"builtin",instructions:"## Skill: kb-curator\n\nYou are the knowledge-base curator. Every input - note, fact, or link - becomes a tidy KB entry:\n 1. Determine the `kind` (fact | task | meeting | product | person | place | event | ...). If ambiguous - ask.\n 2. Title: 4-9 words, no quotes, no trailing period.\n 3. `meta`: put structured fields here (ISO dates, links, tags). Do NOT duplicate them in the body.\n 4. `body`: anything that didn't fit in meta - context, nuance, quotes with sources.\n 5. Emit a `<<reflex:kb>>` marker; do not write via Write - the manager places it in the correct folder.\n 6. If the entry adds to an existing topic - mention sibling files via @-mentions in chat (for context, not for the agent)."}];async function l(){let a=await m(),b=new Set(a.map(a=>a.id)),c=k.filter(a=>!b.has(a.id)).map(({instructions:a,...b})=>b);return[...a.map(({instructions:a,...b})=>b),...c]}async function m(){let a;try{a=await d.promises.readdir(j,{withFileTypes:!0})}catch{return[]}let b=[];for(let c of a)if(c.isFile()&&c.name.toLowerCase().endsWith(".md"))try{let a=await d.promises.readFile(f().join(j,c.name),"utf8"),e=h()(a),g=e.data,i="string"==typeof g.id?g.id:null;if(!i)continue;b.push({id:i,title:"string"==typeof g.title?g.title:i,description:"string"==typeof g.description?g.description:"",author:"user",instructions:e.content.trim()})}catch{}return b}async function n(a){let b=(await m()).find(b=>b.id===a);return b||(k.find(b=>b.id===a)??null)}},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,"00321bef261181407c68ca6f78a3c677c0823ea816",null)},51021:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>r});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=a([k]);k=(q.then?(await q)():q)[0];let t="рус";async function r(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,q=c.language,r=(0,g.FF)(b.path),v=(0,m.wr)(a.message),w=(0,n.dr)(a.message),x=a.message;v?"goal"===v.kind&&v.text?(await (0,o.PF)(b.path,a.topicId,v.text),x=v.text):"plan"===v.kind&&(x=v.text||a.message):w&&"agent-mode"===w.def.kind&&(x=w.payload||a.message);let y=null;if(w?.def.id==="skill"){let[a,...b]=w.payload.split(/\s+/);if(a){let c=await (0,p.k)(a);c&&(y=c.instructions,x=b.join(" ").trim()||x)}}let z=await (0,o.eF)(b.path,a.topicId),A=z?.meta.goal&&"active"===z.meta.goalStatus?z.meta.goal:void 0,B=await (0,h.M)({root:b.path,scope:b.path,reflexScope:r,language:q}),C=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(!u.has(d.hostname.toLowerCase())||c.has(a))continue;c.add(a),b.push(a)}catch{}}return b}(x),D=[B,A?(0,m.FB)(A,q):"",v?.kind==="plan"?(0,m.$4)(q):"",w?.def.id==="research"?(0,m.dA)(w.payload,q):"",w?.def.id==="widget"?(0,m.wt)(w.payload,q):"",w?.def.id==="mcp"?(0,m.YE)(w.payload,q):"",w?.def.id==="workflow"?(0,m.vl)(w.payload,q):"",w?.def.id==="distill"?(0,m.VM)(w.payload,q):"",w?.def.id==="practice"?(0,m.z7)(w.payload,q):"",w?.def.id==="reflect"?(0,m.zM)(q):"",y??"",a.focusFile?function(a,b,c){let d=f().join(b,a);return/russ/i.test(c)||RegExp(t,"i").test(c)?`## Open document — primary context
136
+ - Avoid clinical language. "Notice" not "diagnose".`},{id:"kb-curator",title:"KB curator",description:"Turns raw content into clean KB notes with the right kind and meta.",author:"builtin",instructions:"## Skill: kb-curator\n\nYou are the knowledge-base curator. Every input - note, fact, or link - becomes a tidy KB entry:\n 1. Determine the `kind` (fact | task | meeting | product | person | place | event | ...). If ambiguous - ask.\n 2. Title: 4-9 words, no quotes, no trailing period.\n 3. `meta`: put structured fields here (ISO dates, links, tags). Do NOT duplicate them in the body.\n 4. `body`: anything that didn't fit in meta - context, nuance, quotes with sources.\n 5. Emit a `<<reflex:kb>>` marker; do not write via Write - the manager places it in the correct folder.\n 6. If the entry adds to an existing topic - mention sibling files via @-mentions in chat (for context, not for the agent)."}];async function l(){let a=await m(),b=new Set(a.map(a=>a.id)),c=k.filter(a=>!b.has(a.id)).map(({instructions:a,...b})=>b);return[...a.map(({instructions:a,...b})=>b),...c]}async function m(){let a;try{a=await d.promises.readdir(j,{withFileTypes:!0})}catch{return[]}let b=[];for(let c of a)if(c.isFile()&&c.name.toLowerCase().endsWith(".md"))try{let a=await d.promises.readFile(f().join(j,c.name),"utf8"),e=h()(a),g=e.data,i="string"==typeof g.id?g.id:null;if(!i)continue;b.push({id:i,title:"string"==typeof g.title?g.title:i,description:"string"==typeof g.description?g.description:"",author:"user",instructions:e.content.trim()})}catch{}return b}async function n(a){let b=(await m()).find(b=>b.id===a);return b||(k.find(b=>b.id===a)??null)}},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,"00015680fb3186e1a7f1877f44b4f959ede8c6cd28",null)},51021:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>r});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=a([k]);k=(q.then?(await q)():q)[0];let t="рус";async function r(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,q=c.language,r=(0,g.FF)(b.path),v=(0,m.wr)(a.message),w=(0,n.dr)(a.message),x=a.message;v?"goal"===v.kind&&v.text?(await (0,o.PF)(b.path,a.topicId,v.text),x=v.text):"plan"===v.kind&&(x=v.text||a.message):w&&"agent-mode"===w.def.kind&&(x=w.payload||a.message);let y=null;if(w?.def.id==="skill"){let[a,...b]=w.payload.split(/\s+/);if(a){let c=await (0,p.k)(a);c&&(y=c.instructions,x=b.join(" ").trim()||x)}}let z=await (0,o.eF)(b.path,a.topicId),A=z?.meta.goal&&"active"===z.meta.goalStatus?z.meta.goal:void 0,B=await (0,h.M)({root:b.path,scope:b.path,reflexScope:r,language:q}),C=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(!u.has(d.hostname.toLowerCase())||c.has(a))continue;c.add(a),b.push(a)}catch{}}return b}(x),D=[B,A?(0,m.FB)(A,q):"",v?.kind==="plan"?(0,m.$4)(q):"",w?.def.id==="research"?(0,m.dA)(w.payload,q):"",w?.def.id==="widget"?(0,m.wt)(w.payload,q):"",w?.def.id==="mcp"?(0,m.YE)(w.payload,q):"",w?.def.id==="workflow"?(0,m.vl)(w.payload,q):"",w?.def.id==="distill"?(0,m.VM)(w.payload,q):"",w?.def.id==="practice"?(0,m.z7)(w.payload,q):"",w?.def.id==="reflect"?(0,m.zM)(q):"",y??"",a.focusFile?function(a,b,c){let d=f().join(b,a);return/russ/i.test(c)||RegExp(t,"i").test(c)?`## Open document — primary context
137
137
 
138
138
  The user is currently reading this KB file: \`${a}\`
139
139
  Absolute path: \`${d}\`
@@ -1 +1 @@
1
- "use strict";exports.id=2995,exports.ids=[2995],exports.modules={11178:(a,b,c)=>{c.d(b,{CA:()=>j,IK:()=>n,RP:()=>k,dj:()=>l,xO:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);async function j(a){let b=(0,i.FF)(a);return o(b,b)}async function k(a){let b=(0,i.FF)(a);try{let a=await o(b,b),c=a.reduce((a,b)=>a+b.size,0);return{exists:!0,fileCount:a.length,totalBytes:c}}catch{return{exists:!1,fileCount:0,totalBytes:0}}}async function l(a){let b=await j(a);return await Promise.all(b.map(async a=>({...a,meta:await p(a.abs)})))}async function m(a){return p(a)}async function n(a,b){let c=(0,i.FF)(a),e=f().resolve(c,b),g=f().relative(c,e);if(g.startsWith("..")||f().isAbsolute(g))throw Error(`Refused to read outside ${i.fW}: ${b}`);return d.promises.readFile(e,"utf8")}async function o(a,b){let c;try{c=await d.promises.readdir(b,{withFileTypes:!0})}catch{return[]}let e=[],g=[];for(let d of c){let c=f().join(b,d.name);if(d.isDirectory()){if(b===a&&"topics"===d.name)continue;e.push(o(a,c));continue}d.isFile()&&d.name.toLowerCase().endsWith(".md")&&g.push({rel:f().relative(a,c).split(f().sep).join("/"),abs:c,size:0,modifiedAt:""})}let h=await Promise.all(g.map(async a=>{try{let b=await d.promises.stat(a.abs);return{...a,size:b.size,modifiedAt:b.mtime.toISOString()}}catch{return a}}));for(let a of(await Promise.all(e)))h.push(...a);return h.sort((a,b)=>a.rel.localeCompare(b.rel)),h}async function p(a){try{let b=await d.promises.readFile(a,"utf8"),c=h()(b).data;return{...void 0!==q(c.title)?{title:q(c.title)}:{},...void 0!==r(c.version)?{version:r(c.version)}:{},...void 0!==q(c.date)?{date:q(c.date)}:{},...void 0!==q(c.kind)?{kind:q(c.kind)}:{},data:c}}catch{return{data:{}}}}function q(a){return"string"==typeof a?a:a instanceof Date?a.toISOString().slice(0,10):void 0}function r(a){if("string"==typeof a||"number"==typeof a)return a}},18746:(a,b,c)=>{c.d(b,{O1:()=>p,Gh:()=>q,AZ:()=>o,rD:()=>r,summarizeYoutubeAction:()=>n});var d=c(31776);c(428);var e=c(43180);let f=globalThis.__reflexGeminiModelsCache??new Map;async function g(a){let b,c=await (0,e.CG)("gemini");if(!c)throw Error("Gemini API key not configured");let d=c.slice(0,16),g=f.get(d);if(!a?.refresh&&g&&Date.now()-g.fetchedAt<36e5)return g.models;let i=[];do{let a=new URL("https://generativelanguage.googleapis.com/v1beta/models");a.searchParams.set("key",c),a.searchParams.set("pageSize","100"),b&&a.searchParams.set("pageToken",b);let d=await fetch(a.toString(),{headers:{Accept:"application/json"}});if(!d.ok){let a=await d.text();throw Error(`models.list HTTP ${d.status}: ${a.slice(0,500)}`)}let e=await d.json();for(let a of e.models??[]){if(!a.name)continue;let b=a.supportedGenerationMethods??[];if(!b.includes("generateContent"))continue;let c=a.name.toLowerCase();!c.includes("embedding")&&(c.includes("aqa")||i.push({name:a.name,id:a.name.replace(/^models\//,""),...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{},supportedGenerationMethods:b}))}b=e.nextPageToken}while(b);return i.sort(h),f.set(d,{fetchedAt:Date.now(),models:i}),i}function h(a,b){let c=i(a.id),d=i(b.id);if(c!==d)return c-d;let e=j(a.id),f=j(b.id);return e!==f?f-e:a.id.localeCompare(b.id)}function i(a){return a.endsWith("flash-latest")?0:a.includes("flash")&&!a.includes("lite")?1:a.includes("flash-lite")?2:a.endsWith("pro-latest")||a.includes("pro")?3:4}function j(a){let b=/gemini-(\d+)\.(\d+)/.exec(a);return b?100*Number(b[1])+Number(b[2]):0}async function k(a="general"){let b=await (0,e.$L)("gemini");if("video"===a&&b?.videoModel)return b.videoModel;if(b?.model)return b.model;try{let a=await g();if(a.length>0)return a[0].id}catch{}return"gemini-flash-latest"}async function l(a){let b=`https://generativelanguage.googleapis.com/v1beta/models/${encodeURIComponent(a.model)}:generateContent?key=${encodeURIComponent(a.apiKey)}`,c=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:a.contents,...a.generationConfig?{generationConfig:a.generationConfig}:{}})}),d=await c.text();if(!c.ok)throw Error(`Gemini HTTP ${c.status}: ${d.slice(0,800)}`);let e=JSON.parse(d);if(e.promptFeedback?.blockReason)throw Error(`Gemini blocked: ${e.promptFeedback.blockReason}`);return{text:(e.candidates??[]).flatMap(a=>a.content?.parts??[]).map(a=>a.text??"").filter(Boolean).join("\n").trim(),raw:e}}globalThis.__reflexGeminiModelsCache=f;var m=c(17640);async function n(a){var b;let c=await (0,e.CG)("gemini");if(!c)return{ok:!1,needsKey:!0,error:"Gemini API key is not saved — enter it to summarize videos."};let d=(await (0,m.M)()).language??"russian",f=a.prompt?.trim()||(b=d,/russ/i.test(b)||RegExp("рус","i").test(b)?"Produce a structured summary of this YouTube video:\n\n1. One paragraph — what the video is about and who it's for.\n2. Main points as a bulleted list with `[mm:ss]` timestamps.\n3. Notable quotes (any memorable phrases) — with timestamps.\n4. If diagrams / slides / code are shown — briefly describe them.\n5. 1-3 sentence takeaway: the main point worth retaining.\n\nRespond in Russian, concisely. No filler.":"Produce a structured summary of this YouTube video:\n\n1. One paragraph — what the video is about and who it's for.\n2. Main points as a bulleted list with `[mm:ss]` timestamps.\n3. Notable quotes (if any) with timestamps.\n4. If diagrams / slides / code are shown — briefly describe them.\n5. 1-3 sentence takeaway.\n\nBe concise. No filler."),g=a.modelOverride?.trim()||await k("video");try{let{text:b}=await l({model:g,apiKey:c,contents:[{parts:[{file_data:{file_uri:a.url,mime_type:"video/*"}},{text:f}]}]});if(!b)return{ok:!1,error:"Gemini returned an empty response — the video may be unavailable or private."};return{ok:!0,text:b,model:g}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function o(a){try{if(!a.trim())return{ok:!1,error:"API key is empty"};return await (0,e.Pc)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a){return{ok:!0,present:await (0,e.hasApiKey)(a)}}async function q(a=!1){try{let b=await g({refresh:a});return{ok:!0,models:b.map(a=>({id:a.id,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{}})),currentModel:await k("general"),currentVideoModel:await k("video")}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a){try{return await (0,e.ND)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(97364).D)([n,o,p,q,r]),(0,d.A)(n,"404911b95ce93cd41766578b74740989ed34bea687",null),(0,d.A)(o,"40b4d6f367570699418de4236311b8169545fa7e9e",null),(0,d.A)(p,"401a9b484e6639a1fa393bdf2bd3ed270abc0fdd88",null),(0,d.A)(q,"4022839a1b29da575a6c867dfa153d3887871ae7d8",null),(0,d.A)(r,"401de30f69c6a9957c082df1cace4f601e61d51bcf",null)},24139:(a,b,c)=>{c.d(b,{Z:()=>h});var d=c(73024),e=c(74342);function f(){return globalThis.__reflexPendingCache||(globalThis.__reflexPendingCache=new Map),globalThis.__reflexPendingCache}async function g(a,b){let c,g=(0,e.Rs)(a,b);try{c=await d.promises.stat(g)}catch{return[]}let h=f().get(g);if(h&&h.mtimeMs===c.mtimeMs&&h.size===c.size)return h.result;let i=function(a,b){let c=new Map;for(let d of a)switch(d.type){case"permission-request":c.set(`p:${d.requestId}`,{kind:"permission",topicId:b,requestId:d.requestId,ts:d.ts,summary:d.tool?`Permission: ${d.tool}`:d.action??"Permission request",...d.description?{details:d.description}:{}});break;case"permission-response":c.delete(`p:${d.requestId}`);break;case"question":c.set(`q:${d.questionId}`,{kind:"question",topicId:b,requestId:d.questionId,ts:d.ts,summary:d.prompt.slice(0,200),...d.choices&&d.choices.length?{details:d.choices.join(" / ")}:{}});break;case"answer":c.delete(`q:${d.questionId}`);break;case"mcp-add-request":c.set(`m:${d.requestId}`,{kind:"mcp-add",topicId:b,requestId:d.requestId,ts:d.ts,summary:`MCP add: ${d.label}`,...d.description?{details:d.description}:{}});break;case"mcp-add-response":c.delete(`m:${d.requestId}`)}return[...c.values()]}(await (0,e.wj)(a,b),b);return f().set(g,{mtimeMs:c.mtimeMs,size:c.size,result:i}),i}async function h(a,b){let c=[];return await Promise.all(b.map(async b=>{let d=await g(a,b);c.push(...d)})),c.sort((a,b)=>a.ts<b.ts?1:-1),c}},43180:(a,b,c)=>{c.d(b,{$L:()=>j,CG:()=>k,ND:()=>n,Pc:()=>m,hasApiKey:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(29163);let h=f().join((0,g._)(),"api-keys");function i(a){return f().join(h,`${a}.json`)}async function j(a){try{let b=await d.promises.readFile(i(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.apiKey||0===c.apiKey.length)return null;return{apiKey:c.apiKey,..."string"==typeof c.model?{model:c.model}:{},..."string"==typeof c.videoModel?{videoModel:c.videoModel}:{},updatedAt:"string"==typeof c.updatedAt?c.updatedAt:new Date().toISOString()}}catch{return null}}async function k(a){let b=await j(a);return b?.apiKey??null}async function l(a,b){let c=i(a);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,JSON.stringify(b,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(c,384)}catch{}}async function m(a,b){let c=await j(a);await l(a,{...c??{},apiKey:b.trim(),updatedAt:new Date().toISOString()})}async function n(a,b){let c=await j(a);if(!c)throw Error(`API key for "${a}" is not saved`);let d={apiKey:c.apiKey,updatedAt:new Date().toISOString()},e=void 0===b.model?c.model:b.model??void 0,f=void 0===b.videoModel?c.videoModel:b.videoModel??void 0;e&&(d.model=e),f&&(d.videoModel=f),await l(a,d)}async function o(a){return await k(a)!==null}},49353:(a,b,c)=>{c.d(b,{j:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);async function j(a){var b;let{rootPath:c,directive:e,provenance:g}=a,j=k(e.kind)||"note",m=new Date().toISOString().slice(0,10),n=((b=e.date)&&/^\d{4}-\d{2}-\d{2}$/.test(b)?b:null)??m,o=k(e.slug&&e.slug.trim()?e.slug:e.title)||"entry",p=`${n}-${o}`,q=f().join((0,i.FF)(c),j);await d.promises.mkdir(q,{recursive:!0});let r=await l(q,p,".md"),s={title:e.title,kind:j,date:n,version:1,...e.meta&&"object"==typeof e.meta?e.meta:{}};g&&(s.createdBy=`${g.kind}:${g.id}${g.version?"@"+g.version:""}`);let t=(e.body??"").replace(/\r\n/g,"\n").trimEnd(),u=h().stringify(t?t+"\n":"",s);await d.promises.writeFile(r,u,"utf8");let v=f().relative((0,i.FF)(c),r).split(f().sep).join("/");return{kind:j,title:e.title,relPath:v,absPath:r}}function k(a){return a.normalize("NFKD").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,60)}async function l(a,b,c){let d=f().join(a,b+c),e=1;for(;await m(d);){if(e>99){d=f().join(a,`${b}-${Date.now().toString(36)}${c}`);break}d=f().join(a,`${b}-${++e}${c}`)}return d}async function m(a){try{return await d.promises.access(a),!0}catch{return!1}}}};
1
+ "use strict";exports.id=2995,exports.ids=[2995],exports.modules={11178:(a,b,c)=>{c.d(b,{CA:()=>j,IK:()=>n,RP:()=>k,dj:()=>l,xO:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);async function j(a){let b=(0,i.FF)(a);return o(b,b)}async function k(a){let b=(0,i.FF)(a);try{let a=await o(b,b),c=a.reduce((a,b)=>a+b.size,0);return{exists:!0,fileCount:a.length,totalBytes:c}}catch{return{exists:!1,fileCount:0,totalBytes:0}}}async function l(a){let b=await j(a);return await Promise.all(b.map(async a=>({...a,meta:await p(a.abs)})))}async function m(a){return p(a)}async function n(a,b){let c=(0,i.FF)(a),e=f().resolve(c,b),g=f().relative(c,e);if(g.startsWith("..")||f().isAbsolute(g))throw Error(`Refused to read outside ${i.fW}: ${b}`);return d.promises.readFile(e,"utf8")}async function o(a,b){let c;try{c=await d.promises.readdir(b,{withFileTypes:!0})}catch{return[]}let e=[],g=[];for(let d of c){let c=f().join(b,d.name);if(d.isDirectory()){if(b===a&&"topics"===d.name)continue;e.push(o(a,c));continue}d.isFile()&&d.name.toLowerCase().endsWith(".md")&&g.push({rel:f().relative(a,c).split(f().sep).join("/"),abs:c,size:0,modifiedAt:""})}let h=await Promise.all(g.map(async a=>{try{let b=await d.promises.stat(a.abs);return{...a,size:b.size,modifiedAt:b.mtime.toISOString()}}catch{return a}}));for(let a of(await Promise.all(e)))h.push(...a);return h.sort((a,b)=>a.rel.localeCompare(b.rel)),h}async function p(a){try{let b=await d.promises.readFile(a,"utf8"),c=h()(b).data;return{...void 0!==q(c.title)?{title:q(c.title)}:{},...void 0!==r(c.version)?{version:r(c.version)}:{},...void 0!==q(c.date)?{date:q(c.date)}:{},...void 0!==q(c.kind)?{kind:q(c.kind)}:{},data:c}}catch{return{data:{}}}}function q(a){return"string"==typeof a?a:a instanceof Date?a.toISOString().slice(0,10):void 0}function r(a){if("string"==typeof a||"number"==typeof a)return a}},18746:(a,b,c)=>{c.d(b,{O1:()=>p,Gh:()=>q,AZ:()=>o,rD:()=>r,summarizeYoutubeAction:()=>n});var d=c(31776);c(428);var e=c(43180);let f=globalThis.__reflexGeminiModelsCache??new Map;async function g(a){let b,c=await (0,e.CG)("gemini");if(!c)throw Error("Gemini API key not configured");let d=c.slice(0,16),g=f.get(d);if(!a?.refresh&&g&&Date.now()-g.fetchedAt<36e5)return g.models;let i=[];do{let a=new URL("https://generativelanguage.googleapis.com/v1beta/models");a.searchParams.set("key",c),a.searchParams.set("pageSize","100"),b&&a.searchParams.set("pageToken",b);let d=await fetch(a.toString(),{headers:{Accept:"application/json"}});if(!d.ok){let a=await d.text();throw Error(`models.list HTTP ${d.status}: ${a.slice(0,500)}`)}let e=await d.json();for(let a of e.models??[]){if(!a.name)continue;let b=a.supportedGenerationMethods??[];if(!b.includes("generateContent"))continue;let c=a.name.toLowerCase();!c.includes("embedding")&&(c.includes("aqa")||i.push({name:a.name,id:a.name.replace(/^models\//,""),...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{},supportedGenerationMethods:b}))}b=e.nextPageToken}while(b);return i.sort(h),f.set(d,{fetchedAt:Date.now(),models:i}),i}function h(a,b){let c=i(a.id),d=i(b.id);if(c!==d)return c-d;let e=j(a.id),f=j(b.id);return e!==f?f-e:a.id.localeCompare(b.id)}function i(a){return a.endsWith("flash-latest")?0:a.includes("flash")&&!a.includes("lite")?1:a.includes("flash-lite")?2:a.endsWith("pro-latest")||a.includes("pro")?3:4}function j(a){let b=/gemini-(\d+)\.(\d+)/.exec(a);return b?100*Number(b[1])+Number(b[2]):0}async function k(a="general"){let b=await (0,e.$L)("gemini");if("video"===a&&b?.videoModel)return b.videoModel;if(b?.model)return b.model;try{let a=await g();if(a.length>0)return a[0].id}catch{}return"gemini-flash-latest"}async function l(a){let b=`https://generativelanguage.googleapis.com/v1beta/models/${encodeURIComponent(a.model)}:generateContent?key=${encodeURIComponent(a.apiKey)}`,c=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:a.contents,...a.generationConfig?{generationConfig:a.generationConfig}:{}})}),d=await c.text();if(!c.ok)throw Error(`Gemini HTTP ${c.status}: ${d.slice(0,800)}`);let e=JSON.parse(d);if(e.promptFeedback?.blockReason)throw Error(`Gemini blocked: ${e.promptFeedback.blockReason}`);return{text:(e.candidates??[]).flatMap(a=>a.content?.parts??[]).map(a=>a.text??"").filter(Boolean).join("\n").trim(),raw:e}}globalThis.__reflexGeminiModelsCache=f;var m=c(17640);async function n(a){var b;let c=await (0,e.CG)("gemini");if(!c)return{ok:!1,needsKey:!0,error:"Gemini API key is not saved — enter it to summarize videos."};let d=(await (0,m.M)()).language??"russian",f=a.prompt?.trim()||(b=d,/russ/i.test(b)||RegExp("рус","i").test(b)?"Produce a structured summary of this YouTube video:\n\n1. One paragraph — what the video is about and who it's for.\n2. Main points as a bulleted list with `[mm:ss]` timestamps.\n3. Notable quotes (any memorable phrases) — with timestamps.\n4. If diagrams / slides / code are shown — briefly describe them.\n5. 1-3 sentence takeaway: the main point worth retaining.\n\nRespond in Russian, concisely. No filler.":"Produce a structured summary of this YouTube video:\n\n1. One paragraph — what the video is about and who it's for.\n2. Main points as a bulleted list with `[mm:ss]` timestamps.\n3. Notable quotes (if any) with timestamps.\n4. If diagrams / slides / code are shown — briefly describe them.\n5. 1-3 sentence takeaway.\n\nBe concise. No filler."),g=a.modelOverride?.trim()||await k("video");try{let{text:b}=await l({model:g,apiKey:c,contents:[{parts:[{file_data:{file_uri:a.url,mime_type:"video/*"}},{text:f}]}]});if(!b)return{ok:!1,error:"Gemini returned an empty response — the video may be unavailable or private."};return{ok:!0,text:b,model:g}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function o(a){try{if(!a.trim())return{ok:!1,error:"API key is empty"};return await (0,e.Pc)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a){return{ok:!0,present:await (0,e.hasApiKey)(a)}}async function q(a=!1){try{let b=await g({refresh:a});return{ok:!0,models:b.map(a=>({id:a.id,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{}})),currentModel:await k("general"),currentVideoModel:await k("video")}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a){try{return await (0,e.ND)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(97364).D)([n,o,p,q,r]),(0,d.A)(n,"40e485146dbf2aa2e307412123ebb4dd26436e449d",null),(0,d.A)(o,"4082005216a00cd925235eaa910fea9931e958f60f",null),(0,d.A)(p,"405bd9fe8c1335ddf5a3037af2ca0122ceb3876957",null),(0,d.A)(q,"40d05ba021aaf654eb793b75b1e627feb2172b7acb",null),(0,d.A)(r,"401d9339f291e2b48ade4f033f106e5e6cc4f04c2e",null)},24139:(a,b,c)=>{c.d(b,{Z:()=>h});var d=c(73024),e=c(74342);function f(){return globalThis.__reflexPendingCache||(globalThis.__reflexPendingCache=new Map),globalThis.__reflexPendingCache}async function g(a,b){let c,g=(0,e.Rs)(a,b);try{c=await d.promises.stat(g)}catch{return[]}let h=f().get(g);if(h&&h.mtimeMs===c.mtimeMs&&h.size===c.size)return h.result;let i=function(a,b){let c=new Map;for(let d of a)switch(d.type){case"permission-request":c.set(`p:${d.requestId}`,{kind:"permission",topicId:b,requestId:d.requestId,ts:d.ts,summary:d.tool?`Permission: ${d.tool}`:d.action??"Permission request",...d.description?{details:d.description}:{}});break;case"permission-response":c.delete(`p:${d.requestId}`);break;case"question":c.set(`q:${d.questionId}`,{kind:"question",topicId:b,requestId:d.questionId,ts:d.ts,summary:d.prompt.slice(0,200),...d.choices&&d.choices.length?{details:d.choices.join(" / ")}:{}});break;case"answer":c.delete(`q:${d.questionId}`);break;case"mcp-add-request":c.set(`m:${d.requestId}`,{kind:"mcp-add",topicId:b,requestId:d.requestId,ts:d.ts,summary:`MCP add: ${d.label}`,...d.description?{details:d.description}:{}});break;case"mcp-add-response":c.delete(`m:${d.requestId}`)}return[...c.values()]}(await (0,e.wj)(a,b),b);return f().set(g,{mtimeMs:c.mtimeMs,size:c.size,result:i}),i}async function h(a,b){let c=[];return await Promise.all(b.map(async b=>{let d=await g(a,b);c.push(...d)})),c.sort((a,b)=>a.ts<b.ts?1:-1),c}},43180:(a,b,c)=>{c.d(b,{$L:()=>j,CG:()=>k,ND:()=>n,Pc:()=>m,hasApiKey:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(29163);let h=f().join((0,g._)(),"api-keys");function i(a){return f().join(h,`${a}.json`)}async function j(a){try{let b=await d.promises.readFile(i(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.apiKey||0===c.apiKey.length)return null;return{apiKey:c.apiKey,..."string"==typeof c.model?{model:c.model}:{},..."string"==typeof c.videoModel?{videoModel:c.videoModel}:{},updatedAt:"string"==typeof c.updatedAt?c.updatedAt:new Date().toISOString()}}catch{return null}}async function k(a){let b=await j(a);return b?.apiKey??null}async function l(a,b){let c=i(a);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,JSON.stringify(b,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(c,384)}catch{}}async function m(a,b){let c=await j(a);await l(a,{...c??{},apiKey:b.trim(),updatedAt:new Date().toISOString()})}async function n(a,b){let c=await j(a);if(!c)throw Error(`API key for "${a}" is not saved`);let d={apiKey:c.apiKey,updatedAt:new Date().toISOString()},e=void 0===b.model?c.model:b.model??void 0,f=void 0===b.videoModel?c.videoModel:b.videoModel??void 0;e&&(d.model=e),f&&(d.videoModel=f),await l(a,d)}async function o(a){return await k(a)!==null}},49353:(a,b,c)=>{c.d(b,{j:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);async function j(a){var b;let{rootPath:c,directive:e,provenance:g}=a,j=k(e.kind)||"note",m=new Date().toISOString().slice(0,10),n=((b=e.date)&&/^\d{4}-\d{2}-\d{2}$/.test(b)?b:null)??m,o=k(e.slug&&e.slug.trim()?e.slug:e.title)||"entry",p=`${n}-${o}`,q=f().join((0,i.FF)(c),j);await d.promises.mkdir(q,{recursive:!0});let r=await l(q,p,".md"),s={title:e.title,kind:j,date:n,version:1,...e.meta&&"object"==typeof e.meta?e.meta:{}};g&&(s.createdBy=`${g.kind}:${g.id}${g.version?"@"+g.version:""}`);let t=(e.body??"").replace(/\r\n/g,"\n").trimEnd(),u=h().stringify(t?t+"\n":"",s);await d.promises.writeFile(r,u,"utf8");let v=f().relative((0,i.FF)(c),r).split(f().sep).join("/");return{kind:j,title:e.title,relPath:v,absPath:r}}function k(a){return a.normalize("NFKD").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,60)}async function l(a,b,c){let d=f().join(a,b+c),e=1;for(;await m(d);){if(e>99){d=f().join(a,`${b}-${Date.now().toString(36)}${c}`);break}d=f().join(a,`${b}-${++e}${c}`)}return d}async function m(a){try{return await d.promises.access(a),!0}catch{return!1}}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=3004,exports.ids=[3004],exports.modules={3004:(a,b,c)=>{c.d(b,{UtilityIframe:()=>s});var d=c(64173),e=c(17240),f=c(53186),g=c(71813),h=c(65177),i=c(66979),j=c(69552),k=c(62261),l=c(73569),m=c(1056),n=c.n(m),o=c(44052),p=c(3265);function q({scope:a,utilityId:b,utilityName:c,rootId:m,requestSnapshot:p,onClose:q}){let s=(0,g.c)("app"),[t,u]=(0,e.useState)(null),[v,w]=(0,e.useState)([]),[x,y]=(0,e.useState)(""),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useTransition)(),[D,E]=(0,e.useState)(!1),F=(0,e.useRef)(null);(0,e.useRef)(null),(0,e.useRef)("");let[G,H]=(0,e.useState)(""),I=()=>{let a=x.trim();a&&m&&t&&(y(""),w(b=>[...b,{role:"user",text:a,ts:new Date().toISOString()}]),C(async()=>{let b;try{b=await Promise.race([p(),new Promise(a=>setTimeout(()=>a(void 0),600))])}catch{}let c=void 0!==b?function(a,b){let c;try{c="string"==typeof b?b:JSON.stringify(b,null,2)}catch{c=String(b)}return c.length>4e3&&(c=c.slice(0,4e3)+"\n…[truncated]"),["[Mini-app context]",c,"[/context]\n",a].join("\n")}(a,b):a;try{let a=await fetch(`/api/roots/${m}/chat/${t}/send`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:c})});if(!a.ok){let b=await a.json().catch(()=>({}));o.oR.error(b.error??`HTTP ${a.status}`)}}catch(a){o.oR.error(String(a))}}))};return(0,d.jsxs)("aside",{className:"flex h-full flex-col border-l bg-card",children:[(0,d.jsxs)("header",{className:"border-b px-3 py-2 flex items-center gap-2",children:[(0,d.jsx)(f.A,{className:"h-3.5 w-3.5 text-violet-600"}),(0,d.jsx)("span",{className:"text-sm font-medium",children:s("utilities.helper.title")}),(0,d.jsx)("span",{className:"text-[10px] text-muted-foreground ml-1",children:s("utilities.helper.hint")}),m&&t&&(0,d.jsx)(n(),{href:`/roots/${m}/chat/${t}`,className:"ml-auto p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground",title:s("utilities.helper.openFull"),children:(0,d.jsx)(h.A,{className:"h-3.5 w-3.5"})}),q&&(0,d.jsx)("button",{type:"button",onClick:q,className:"p-1 rounded hover:bg-accent "+(m&&t?"":"ml-auto"),title:s("utilities.helper.hide"),children:(0,d.jsx)(i.A,{className:"h-3.5 w-3.5"})})]}),(0,d.jsxs)("div",{ref:F,className:"flex-1 overflow-y-auto px-3 py-2 space-y-2 text-sm",children:[z&&(0,d.jsx)("p",{className:"text-xs text-red-600",children:z}),!z&&0===v.length&&!G&&(0,d.jsxs)("div",{className:"text-xs text-muted-foreground flex items-start gap-2",children:[(0,d.jsx)(j.A,{className:"h-3 w-3 mt-0.5 text-violet-600 shrink-0"}),(0,d.jsx)("span",{children:s("utilities.helper.welcome")})]}),v.map((a,b)=>(0,d.jsx)(r,{role:a.role,text:a.text},b)),D&&G&&(0,d.jsx)(r,{role:"assistant",text:G,streaming:!0}),B&&!D&&(0,d.jsxs)("div",{className:"mr-6 rounded-md bg-muted/40 px-2 py-1.5 text-xs text-muted-foreground inline-flex items-center gap-2",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 animate-spin"}),s("utilities.helper.thinking")]})]}),(0,d.jsxs)("div",{className:"border-t px-3 py-2 flex items-end gap-1.5",children:[(0,d.jsx)("textarea",{value:x,onChange:a=>y(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.metaKey||a.ctrlKey)&&(a.preventDefault(),I())},rows:1,placeholder:s("utilities.helper.placeholder"),disabled:B||!!z||!t,className:"flex-1 resize-none rounded border bg-background px-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-violet-400 max-h-24"}),(0,d.jsx)("button",{type:"button",onClick:I,disabled:B||!x.trim()||!!z||!t,className:"inline-flex items-center justify-center rounded bg-violet-600 px-2 py-1 text-white hover:bg-violet-700 disabled:opacity-50",children:B?(0,d.jsx)(k.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(l.A,{className:"h-3 w-3"})})]})]})}function r({role:a,text:b,streaming:c}){let e=(0,g.c)("app"),f=b;return("user"===a&&(f=f.replace(/^\s*\[Mini-app context\][\s\S]*?\[\/context\]\s*/,"").trim()),f.trim())?(0,d.jsxs)("div",{className:"user"===a?"ml-6 rounded-md bg-violet-50 dark:bg-violet-950/30 px-2 py-1.5":"mr-6 rounded-md bg-muted/40 px-2 py-1.5 whitespace-pre-wrap",children:[(0,d.jsxs)("div",{className:"text-[10px] uppercase tracking-wider text-muted-foreground mb-0.5",children:[e("user"===a?"utilities.helper.you":"assistant"===a?"utilities.helper.reflex":"utilities.helper.system"),c&&(0,d.jsx)("span",{className:"ml-1 text-violet-600",children:"●"})]}),f]}):null}function s({scope:a,id:b,rootId:c,className:h,title:i,agentChat:j,utilityName:k}){let l=(0,g.c)("app"),m=(0,e.useRef)(null),n=(0,e.useRef)(null),[o,p]=(0,e.useState)(!0),r=c?`?rootId=${encodeURIComponent(c)}`:"",s=`/api/utilities/${a}/${b}/iframe${r}`,t=(0,d.jsx)("iframe",{ref:m,src:s,sandbox:"allow-scripts allow-forms allow-same-origin",className:h??"h-full w-full border-0 bg-white",title:i??`utility-${b}`});return j?(0,d.jsxs)("div",{className:"flex h-full w-full",children:[(0,d.jsxs)("div",{className:"flex-1 min-w-0 relative",children:[t,!o&&(0,d.jsxs)("button",{type:"button",onClick:()=>p(!0),className:"absolute right-3 bottom-3 inline-flex items-center gap-1 rounded-full bg-violet-600 px-3 py-1.5 text-xs text-white shadow-lg hover:bg-violet-700",title:l("utilities.iframe.openHelper"),children:[(0,d.jsx)(f.A,{className:"h-3.5 w-3.5"}),l("utilities.iframe.helper")]})]}),o&&(0,d.jsx)("div",{className:"w-80 shrink-0",children:(0,d.jsx)(q,{scope:a,utilityId:b,...k?{utilityName:k}:{},...c?{rootId:c}:{},requestSnapshot:()=>{let a=m.current?.contentWindow;return a?(n.current&&(clearTimeout(n.current.timer),n.current.resolve(void 0),n.current=null),new Promise(b=>{let c=setTimeout(()=>{n.current?.resolve===b&&(n.current=null,b(void 0))},500);n.current={resolve:b,timer:c};try{a.postMessage({type:"request-snapshot"},"*")}catch{clearTimeout(c),n.current=null,b(void 0)}})):Promise.resolve(void 0)},onClose:()=>p(!1)})})]}):t}p.callServer,p.findSourceMapURL,p.callServer,p.findSourceMapURL},65177:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]])},66979:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},73569:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]])}};
@@ -1 +1 @@
1
- "use strict";exports.id=3332,exports.ids=[3332],exports.modules={5006:(a,b,c)=>{c.d(b,{J:()=>e});var d=c(3265);let e=(0,d.createServerReference)("40054a55e2ef21dc8ac1456a2d8bd64c51ab4532d3",d.callServer,void 0,d.findSourceMapURL,"getOAuthClientAction")},20377:(a,b,c)=>{c.d(b,{S:()=>e});var d=c(3265);let e=(0,d.createServerReference)("40997066ee50fa124cc106d508e9e9c2aadb835ba6",d.callServer,void 0,d.findSourceMapURL,"saveOAuthClientAction")},32035:(a,b,c)=>{c.d(b,{T:()=>e});var d=c(3265);let e=(0,d.createServerReference)("602c1e7e6e27cfe9e13b511710926c2b2edeefbb71",d.callServer,void 0,d.findSourceMapURL,"beginOAuthAction")},33332:(a,b,c)=>{c.d(b,{beginOAuthAction:()=>g.T,getOAuthClientAction:()=>e.J,listOAuthStatusesAction:()=>d.o,saveOAuthClientAction:()=>f.S});var d=c(98508),e=c(5006),f=c(20377),g=c(32035)},98508:(a,b,c)=>{c.d(b,{o:()=>e});var d=c(3265);let e=(0,d.createServerReference)("006191bdf476037508a45f564e8edd795ce484bc25",d.callServer,void 0,d.findSourceMapURL,"listOAuthStatusesAction")}};
1
+ "use strict";exports.id=3332,exports.ids=[3332],exports.modules={12482:(a,b,c)=>{c.d(b,{o:()=>e});var d=c(3265);let e=(0,d.createServerReference)("00066413522d2730eba0cf042e9ffea6740b47d34d",d.callServer,void 0,d.findSourceMapURL,"listOAuthStatusesAction")},33332:(a,b,c)=>{c.d(b,{beginOAuthAction:()=>g.T,getOAuthClientAction:()=>e.J,listOAuthStatusesAction:()=>d.o,saveOAuthClientAction:()=>f.S});var d=c(12482),e=c(48891),f=c(67089),g=c(62883)},48891:(a,b,c)=>{c.d(b,{J:()=>e});var d=c(3265);let e=(0,d.createServerReference)("4011ee55e5a2dd9600d3a8df444f9c2cdf2db92162",d.callServer,void 0,d.findSourceMapURL,"getOAuthClientAction")},62883:(a,b,c)=>{c.d(b,{T:()=>e});var d=c(3265);let e=(0,d.createServerReference)("6060f2842fe0dcb9b6971b9fcc5bc2bd6c482bd31a",d.callServer,void 0,d.findSourceMapURL,"beginOAuthAction")},67089:(a,b,c)=>{c.d(b,{S:()=>e});var d=c(3265);let e=(0,d.createServerReference)("40264a340f4f9df19e8e4ebffe626bd985aaf01147",d.callServer,void 0,d.findSourceMapURL,"saveOAuthClientAction")}};
@@ -0,0 +1,3 @@
1
+ "use strict";exports.id=3795,exports.ids=[3795],exports.modules={12650:(a,b,c)=>{c.d(b,{E:()=>f});var d=c(64173),e=c(91344);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"skeleton",className:(0,e.cn)("animate-pulse rounded-md bg-accent",a),...b})}},14425:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]])},15620:(a,b,c)=>{c.d(b,{CommandBar:()=>o});var d=c(64173),e=c(17240),f=c(87671),g=c(71813),h=c(73569),i=c(44052),j=c(70207),k=c(17618),l=c(8836),m=c(88724),n=c(3484);function o({rootId:a,focusFile:b}){let c=(0,g.c)("roots"),[,o]=(0,e.useTransition)(),p=(0,f.useRouter)();return(0,d.jsx)(l.E,{label:c("commandBar.label"),children:(0,d.jsx)(n.L,{rootId:a,placeholder:c("commandBar.placeholder"),submitLabel:c("commandBar.submit"),pendingLabel:c("commandBar.submitPending"),SubmitIcon:h.A,onSubmit:async({message:d,attachments:e})=>await new Promise(f=>{o(async()=>{let g=await (0,j.g)(a,d,e,b);if(!g.ok){i.oR.error(g.error??c("commandBar.startFailed")),f(!1);return}(0,m.$d)(m.Zi.topicsChanged(a)),d.trim()&&(0,k.h)(a,g.topicId,d).then(b=>{b.ok&&(0,m.$d)(m.Zi.topicsChanged(a))}),p.push(`/roots/${a}/chat/${g.topicId}`),f(!0)})})})})}},16551:(a,b,c)=>{c.d(b,{Xi:()=>k,av:()=>l,j7:()=>j,tU:()=>h});var d=c(64173);c(17240);var e=c(20483),f=c(61193),g=c(91344);function h({className:a,orientation:b="horizontal",...c}){return(0,d.jsx)(f.Root,{"data-slot":"tabs","data-orientation":b,orientation:b,className:(0,g.cn)("group/tabs flex gap-2 data-[orientation=horizontal]:flex-col",a),...c})}let i=(0,e.F)("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function j({className:a,variant:b="default",...c}){return(0,d.jsx)(f.List,{"data-slot":"tabs-list","data-variant":b,className:(0,g.cn)(i({variant:b}),a),...c})}function k({className:a,...b}){return(0,d.jsx)(f.Trigger,{"data-slot":"tabs-trigger",className:(0,g.cn)("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent","data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground","after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100",a),...b})}function l({className:a,...b}){return(0,d.jsx)(f.Content,{"data-slot":"tabs-content",className:(0,g.cn)("flex-1 outline-none",a),...b})}},16805:(a,b,c)=>{c.d(b,{ShareButton:()=>d});let d=(0,c(54491).registerClientReference)(function(){throw Error("Attempted to call ShareButton() from the server but ShareButton 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/share-button.tsx","ShareButton")},17618:(a,b,c)=>{c.d(b,{h:()=>e});var d=c(3265);let e=(0,d.createServerReference)("708ac4f0ac9aed65bdfa7148a3596a8140cd82e4a1",d.callServer,void 0,d.findSourceMapURL,"generateTopicTitleAction")},27129:(a,b,c)=>{c.d(b,{Cz:()=>k,IK:()=>l,hN:()=>j,uA:()=>i});var d=c(73745);c(66493);var e=c(56942),f=c(53905),g=c(84579),h=c(91388);async function i(a){try{let b,c=await (0,g.generateImage)({rootId:a.rootId,prompt:a.prompt,...a.provider?{provider:a.provider}:{},...a.aspectRatio?{aspectRatio:a.aspectRatio}:{},...a.alt?{alt:a.alt}:{}}),d=n(a.alt||a.prompt),e=`![${d}](${c.urlPath})`;return a.attachToKb&&(b=await m(a.rootId,{title:a.alt||a.prompt.slice(0,80),markdown:e,meta:{provider:c.provider,prompt:a.prompt,sha:c.sha,...a.aspectRatio?{aspectRatio:a.aspectRatio}:{}}})),{ok:!0,url:c.urlPath,sha:c.sha,markdown:e,...b?{kbRelPath:b}:{}}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function j(a){try{let b=await (0,g.searchImages)({query:a.query,...a.provider?{provider:a.provider}:{},...a.count?{count:a.count}:{}});return{ok:!0,results:b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function k(a){try{let b,c=await (0,g.attachRemote)({rootId:a.rootId,sourceUrl:a.sourceUrl}),d=n(a.alt||"image"),e=a.attribution?`
2
+
3
+ _Photo: [${a.attribution.name}](${a.attribution.link})_`:"",f=`![${d}](${c.urlPath})${e}`;return a.attachToKb&&(b=await m(a.rootId,{title:a.alt||"Found image",markdown:f,meta:{source:"web",sourceUrl:a.sourceUrl,sha:c.sha,...a.attribution?{author:a.attribution.name,authorUrl:a.attribution.link}:{}}})),{ok:!0,url:c.urlPath,sha:c.sha,markdown:f,...b?{kbRelPath:b}:{}}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function l(a){try{let b,c=Buffer.from(a.base64,"base64");if(0===c.byteLength)return{ok:!1,error:"Empty upload"};if(!a.mime.startsWith("image/"))return{ok:!1,error:`Unsupported mime: ${a.mime}`};let d=await (0,h.YN)(a.rootId,c,a.mime),e=n(a.alt||"image"),f=`![${e}](${d.urlPath})`;return a.attachToKb&&(b=await m(a.rootId,{title:a.alt||"Uploaded image",markdown:f,meta:{source:"upload",sha:d.sha,mime:a.mime}})),{ok:!0,url:d.urlPath,sha:d.sha,markdown:f,...b?{kbRelPath:b}:{}}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function m(a,b){let c=await (0,f.Zn)(a);if(!c)throw Error(`unknown rootId: ${a}`);return(await (0,e.j)({rootPath:c.path,directive:{kind:"image",title:b.title,body:b.markdown,meta:b.meta}})).relPath}function n(a){return a.replace(/[\[\]\n]/g," ").slice(0,200)}(0,c(63781).D)([i,j,k,l]),(0,d.A)(i,"40e424e94b38bf93dbc58fbf3930efa94e90c1b0d5",null),(0,d.A)(j,"409c972e3087a5592c8a8a5495f127f1c5b274a506",null),(0,d.A)(k,"400cde42de0b15a76f2e907a5ee9cff055d857f9cf",null),(0,d.A)(l,"405aca8499a5767140cef32bd7d7f21a9fa200981f",null)},29130:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]])},55308:(a,b,c)=>{c.d(b,{ShareButton:()=>p});var d=c(64173),e=c(17240);let f=(0,c(42557).A)("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);var g=c(12619),h=c(28082),i=c(66979),j=c(42324),k=c(44052),l=c(71813),m=c(3265);let n=(0,m.createServerReference)("409b8850b9493822a1cc66a8b7ef98a94483b4d858",m.callServer,void 0,m.findSourceMapURL,"createShareAction");var o=c(53902);function p(a){let b=(0,l.c)("app"),[c,m]=(0,e.useState)(!1),[p,q]=(0,e.useState)(""),[r,s]=(0,e.useTransition)(),[t,u]=(0,e.useState)(null);return c?t?(0,d.jsxs)("div",{className:"rounded border bg-card p-2 text-xs space-y-1.5 w-full max-w-sm",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-emerald-700",children:[(0,d.jsx)(g.A,{className:"h-3.5 w-3.5"}),(0,d.jsx)("span",{className:"font-medium",children:b("share.button.createdTitle")})]}),(0,d.jsx)("a",{href:t.url,target:"_blank",rel:"noopener noreferrer",className:"block font-mono text-[11px] text-violet-700 hover:underline break-all",children:t.url}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>void navigator.clipboard.writeText(t.url).then(()=>k.oR.success(b("share.button.copied"))),className:"inline-flex items-center gap-1 rounded border px-2 py-0.5 hover:bg-accent",children:[(0,d.jsx)(h.A,{className:"h-3 w-3"}),b("share.button.copy")]}),(0,d.jsx)("button",{type:"button",onClick:()=>{u(null),m(!1),q("")},className:"text-muted-foreground hover:text-foreground",children:b("share.button.done")})]})]}):(0,d.jsxs)("div",{className:"rounded border bg-card p-2 text-xs space-y-1.5 w-full max-w-sm",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,d.jsx)(f,{className:"h-3.5 w-3.5 text-violet-600"}),(0,d.jsx)("span",{className:"font-medium",children:b("share.button.newLink")}),(0,d.jsx)("button",{type:"button",onClick:()=>m(!1),className:"ml-auto text-muted-foreground hover:text-foreground",children:(0,d.jsx)(i.A,{className:"h-3 w-3"})})]}),(0,d.jsx)("label",{className:"block text-[10px] text-muted-foreground",children:b("share.button.passwordLabel")}),(0,d.jsxs)("div",{className:"relative",children:[(0,d.jsx)(j.A,{className:"absolute left-2 top-1/2 -translate-y-1/2 h-3 w-3 text-muted-foreground pointer-events-none"}),(0,d.jsx)("input",{type:"password",value:p,onChange:a=>q(a.target.value),autoFocus:!0,placeholder:b("share.button.passwordPlaceholder"),className:"w-full rounded border bg-background pl-6 pr-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-violet-400"})]}),(0,d.jsx)("button",{type:"button",onClick:()=>{s(async()=>{let c=await (0,o.N)(),d=await n({kind:a.kind,...a.rootId?{rootId:a.rootId}:{},...a.utilityScope?{utilityScope:a.utilityScope}:{},...a.utilityId?{utilityId:a.utilityId}:{},...a.kbRelPath?{kbRelPath:a.kbRelPath}:{},...a.label?{label:a.label}:{},...p.trim()?{password:p.trim()}:{}});if(!d.ok)return void k.oR.error(d.error);let e=c.status.publicUrl??window.location.origin,f=new URL(`/share/${d.share.id}`,e).toString();u({share:d.share,url:f}),navigator.clipboard.writeText(f).catch(()=>null),k.oR.success(c.status.running?b("share.button.created"):b("share.button.createdNoTunnel"))})},disabled:r,className:"w-full rounded bg-violet-600 text-white px-2 py-1 hover:bg-violet-700 disabled:opacity-50 inline-flex items-center justify-center gap-1",children:r?b("share.button.creating"):b("share.button.create")}),(0,d.jsx)("p",{className:"text-[10px] text-muted-foreground",children:b("share.button.footer")})]}):(0,d.jsxs)("button",{type:"button",onClick:()=>m(!0),className:a.iconOnly?"p-1 rounded hover:bg-accent text-muted-foreground hover:text-violet-700":"inline-flex items-center gap-1 rounded border px-2 py-1 text-xs hover:bg-accent",title:b("share.button.title"),children:[(0,d.jsx)(f,{className:"h-3.5 w-3.5"}),!a.iconOnly&&b("share.button.label")]})}},70207:(a,b,c)=>{c.d(b,{g:()=>e});var d=c(3265);let e=(0,d.createServerReference)("784d727390552e79042d0bd5105f6dba03480ced69",d.callServer,void 0,d.findSourceMapURL,"startTopicAction")},71155:(a,b,c)=>{c.d(b,{bq:()=>l,eb:()=>n,gC:()=>m,l6:()=>j,yv:()=>k});var d=c(64173);c(17240);var e=c(58405),f=c(12619),g=c(78724),h=c(13976),i=c(91344);function j({...a}){return(0,d.jsx)(h.Root,{"data-slot":"select",...a})}function k({...a}){return(0,d.jsx)(h.Value,{"data-slot":"select-value",...a})}function l({className:a,size:b="default",children:c,...f}){return(0,d.jsxs)(h.Trigger,{"data-slot":"select-trigger","data-size":b,className:(0,i.cn)("flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",a),...f,children:[c,(0,d.jsx)(h.Icon,{asChild:!0,children:(0,d.jsx)(e.A,{className:"size-4 opacity-50"})})]})}function m({className:a,children:b,position:c="item-aligned",align:e="center",...f}){return(0,d.jsx)(h.Portal,{children:(0,d.jsxs)(h.Content,{"data-slot":"select-content",className:(0,i.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95","popper"===c&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:c,align:e,...f,children:[(0,d.jsx)(o,{}),(0,d.jsx)(h.Viewport,{className:(0,i.cn)("p-1","popper"===c&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:b}),(0,d.jsx)(p,{})]})})}function n({className:a,children:b,...c}){return(0,d.jsxs)(h.Item,{"data-slot":"select-item",className:(0,i.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",a),...c,children:[(0,d.jsx)("span",{"data-slot":"select-item-indicator",className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,d.jsx)(h.ItemIndicator,{children:(0,d.jsx)(f.A,{className:"size-4"})})}),(0,d.jsx)(h.ItemText,{children:b})]})}function o({className:a,...b}){return(0,d.jsx)(h.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(g.A,{className:"size-4"})})}function p({className:a,...b}){return(0,d.jsx)(h.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(e.A,{className:"size-4"})})}},78724:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]])},86673:(a,b,c)=>{c.d(b,{InsertImageButton:()=>d});let d=(0,c(54491).registerClientReference)(function(){throw Error("Attempted to call InsertImageButton() from the server but InsertImageButton 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/kb/insert-image-button.tsx","InsertImageButton")},88842:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(19963).A)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]])},90904:(a,b,c)=>{c.d(b,{InsertImageButton:()=>C});var d=c(64173),e=c(17240),f=c(87671),g=c(29130),h=c(71813),i=c(20583),j=c(66979),k=c(69552),l=c(65943);let m=(0,c(42557).A)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);var n=c(44052),o=c(47071),p=c(45477),q=c(80281),r=c(71155),s=c(16551),t=c(27456),u=c(12650),v=c(3265);let w=(0,v.createServerReference)("40e424e94b38bf93dbc58fbf3930efa94e90c1b0d5",v.callServer,void 0,v.findSourceMapURL,"generateAction"),x=(0,v.createServerReference)("409c972e3087a5592c8a8a5495f127f1c5b274a506",v.callServer,void 0,v.findSourceMapURL,"searchAction"),y=(0,v.createServerReference)("400cde42de0b15a76f2e907a5ee9cff055d857f9cf",v.callServer,void 0,v.findSourceMapURL,"attachAction"),z=(0,v.createServerReference)("405aca8499a5767140cef32bd7d7f21a9fa200981f",v.callServer,void 0,v.findSourceMapURL,"uploadAction"),A=["1:1","16:9","9:16","4:3","3:4","21:9"];function B({rootId:a,open:b,onOpenChange:c,onInsert:f}){let v=(0,h.c)("app"),[B,C]=(0,e.useState)(""),[D,E]=(0,e.useState)("gemini"),[F,G]=(0,e.useState)("1:1"),[H,I]=(0,e.useState)(!0),[J,K]=(0,e.useState)(null),[L,M]=(0,e.useTransition)(),[N,O]=(0,e.useState)(""),[P,Q]=(0,e.useState)("unsplash"),[R,S]=(0,e.useState)([]),[T,U]=(0,e.useTransition)(),[V,W]=(0,e.useState)(null),[X,Y]=(0,e.useState)(!0),[Z,$]=(0,e.useState)(""),[_,aa]=(0,e.useState)(!0),[ab,ac]=(0,e.useTransition)();if(!b)return null;let ad=()=>{N.trim()&&(S([]),U(async()=>{let b=await x({rootId:a,query:N.trim(),provider:P,count:12});if(!b.ok)return void n.oR.error(b.error);S(b.results)}))};return(0,d.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",onClick:a=>{a.target===a.currentTarget&&c(!1)},children:[(0,d.jsx)("div",{"aria-hidden":!0,className:"absolute inset-0 bg-background/80 backdrop-blur-sm",onClick:()=>c(!1)}),(0,d.jsxs)("div",{className:"relative bg-card border rounded-lg shadow-xl w-full max-w-3xl max-h-[85vh] flex flex-col",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 px-4 py-3 border-b",children:[(0,d.jsx)(g.A,{className:"h-4 w-4 text-violet-600"}),(0,d.jsx)("h2",{className:"text-sm font-medium flex-1",children:v("images.titleHeader")}),(0,d.jsx)(i.$,{type:"button",size:"icon",variant:"ghost",className:"h-7 w-7",onClick:()=>c(!1),children:(0,d.jsx)(j.A,{className:"h-4 w-4"})})]}),(0,d.jsxs)(s.tU,{defaultValue:"generate",className:"flex-1 min-h-0 flex flex-col",children:[(0,d.jsxs)(s.j7,{className:"mx-4 mt-3 self-start",children:[(0,d.jsxs)(s.Xi,{value:"generate",children:[(0,d.jsx)(k.A,{className:"mr-1 h-3.5 w-3.5"})," ",v("images.tabGenerate")]}),(0,d.jsxs)(s.Xi,{value:"search",children:[(0,d.jsx)(l.A,{className:"mr-1 h-3.5 w-3.5"})," ",v("images.tabSearch")]}),(0,d.jsxs)(s.Xi,{value:"upload",children:[(0,d.jsx)(m,{className:"mr-1 h-3.5 w-3.5"})," ",v("images.tabUpload")]})]}),(0,d.jsxs)(t.F,{className:"flex-1 min-h-0",children:[(0,d.jsxs)(s.av,{value:"generate",className:"px-4 py-4 space-y-3",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(q.J,{htmlFor:"img-prompt",children:v("images.promptLabel")}),(0,d.jsx)(p.T,{id:"img-prompt",value:B,onChange:a=>C(a.target.value),placeholder:v("images.promptPlaceholder"),rows:4})]}),(0,d.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(q.J,{children:v("images.providerLabel")}),(0,d.jsxs)(r.l6,{value:D,onValueChange:a=>E(a),children:[(0,d.jsx)(r.bq,{children:(0,d.jsx)(r.yv,{})}),(0,d.jsxs)(r.gC,{children:[(0,d.jsx)(r.eb,{value:"gemini",children:"Gemini Nano Banana"}),(0,d.jsx)(r.eb,{value:"codex",children:"Codex $imagegen"})]})]})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(q.J,{children:v("images.aspectLabel")}),(0,d.jsxs)(r.l6,{value:F,onValueChange:G,children:[(0,d.jsx)(r.bq,{children:(0,d.jsx)(r.yv,{})}),(0,d.jsx)(r.gC,{children:A.map(a=>(0,d.jsx)(r.eb,{value:a,children:a},a))})]})]})]}),(0,d.jsxs)("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,d.jsx)("input",{type:"checkbox",checked:H,onChange:a=>I(a.target.checked)}),v("images.saveToKb")]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(i.$,{type:"button",size:"sm",onClick:()=>{B.trim()&&(K(null),M(async()=>{let b=await w({rootId:a,prompt:B.trim(),provider:D,aspectRatio:F,attachToKb:H});if(!b.ok)return void n.oR.error(b.error);K({url:b.url,markdown:b.markdown,...b.kbRelPath?{kbRelPath:b.kbRelPath}:{}})}))},disabled:L||!B.trim(),children:L?v("images.generating"):v("images.generate")}),L&&(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:v("images.takesAMinute")})]}),L?(0,d.jsx)(u.E,{className:"h-64 w-full"}):J?(0,d.jsxs)("div",{className:"space-y-2 border rounded p-3",children:[(0,d.jsx)("img",{src:J.url,alt:B,className:"max-h-80 mx-auto rounded"}),(0,d.jsxs)("div",{className:"flex gap-2 justify-end",children:[(0,d.jsx)(i.$,{type:"button",size:"sm",variant:"outline",onClick:()=>K(null),children:v("images.again")}),(0,d.jsx)(i.$,{type:"button",size:"sm",onClick:()=>{J&&(f?.(J),n.oR.success(J.kbRelPath?v("images.savedToKb",{path:J.kbRelPath}):v("images.ready")),c(!1))},children:v("images.insert")})]})]}):null]}),(0,d.jsxs)(s.av,{value:"search",className:"px-4 py-4 space-y-3",children:[(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(o.p,{value:N,onChange:a=>O(a.target.value),placeholder:v("images.searchPlaceholder"),onKeyDown:a=>{"Enter"===a.key&&ad()}}),(0,d.jsxs)(r.l6,{value:P,onValueChange:a=>Q(a),children:[(0,d.jsx)(r.bq,{className:"w-36",children:(0,d.jsx)(r.yv,{})}),(0,d.jsxs)(r.gC,{children:[(0,d.jsx)(r.eb,{value:"unsplash",children:"Unsplash"}),(0,d.jsx)(r.eb,{value:"pexels",children:"Pexels"}),(0,d.jsx)(r.eb,{value:"brave",children:v("images.braveWeb")})]})]}),(0,d.jsx)(i.$,{type:"button",size:"sm",onClick:ad,disabled:T||!N.trim(),children:v("images.find")})]}),(0,d.jsxs)("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,d.jsx)("input",{type:"checkbox",checked:X,onChange:a=>Y(a.target.checked)}),v("images.saveToKb")]}),T&&0===R.length?(0,d.jsx)("div",{className:"grid grid-cols-3 gap-2",children:Array.from({length:6}).map((a,b)=>(0,d.jsx)(u.E,{className:"h-32 w-full"},b))}):R.length>0?(0,d.jsx)("div",{className:"grid grid-cols-3 gap-2",children:R.map(b=>(0,d.jsxs)("button",{type:"button",disabled:null!==V,onClick:()=>{W(b.url),U(async()=>{let d=await y({rootId:a,sourceUrl:b.url,alt:N.trim()||"image",attribution:b.attribution,attachToKb:X});if(W(null),!d.ok)return void n.oR.error(d.error);f?.({url:d.url,markdown:d.markdown,...d.kbRelPath?{kbRelPath:d.kbRelPath}:{}}),n.oR.success(d.kbRelPath?v("images.savedToKb",{path:d.kbRelPath}):v("images.savedToProject")),c(!1)})},className:"group relative overflow-hidden rounded border hover:border-violet-500 disabled:opacity-50",title:`${b.attribution.name} \xb7 ${b.provider}`,children:[(0,d.jsx)("img",{src:b.thumb,alt:"",className:"h-32 w-full object-cover"}),(0,d.jsx)("div",{className:"absolute bottom-0 inset-x-0 px-1.5 py-0.5 text-[10px] bg-black/60 text-white truncate",children:b.attribution.name}),V===b.url&&(0,d.jsx)("div",{className:"absolute inset-0 bg-black/40 flex items-center justify-center text-xs text-white",children:v("images.saving")})]},b.url))}):(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:v("images.noKeys")})]}),(0,d.jsxs)(s.av,{value:"upload",className:"px-4 py-4 space-y-3",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(q.J,{htmlFor:"img-alt",children:v("images.altLabel")}),(0,d.jsx)(o.p,{id:"img-alt",value:Z,onChange:a=>$(a.target.value),placeholder:v("images.altPlaceholder")})]}),(0,d.jsxs)("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,d.jsx)("input",{type:"checkbox",checked:_,onChange:a=>aa(a.target.checked)}),v("images.saveToKb")]}),(0,d.jsx)(o.p,{type:"file",accept:"image/*",disabled:ab,onChange:b=>{let d=b.target.files?.[0];d&&ac(async()=>{let b=function(a){let b=new Uint8Array(a),c="";for(let a=0;a<b.length;a+=32768){let d=b.subarray(a,a+32768);c+=String.fromCharCode.apply(null,Array.from(d))}return btoa(c)}(await d.arrayBuffer()),e=await z({rootId:a,base64:b,mime:d.type,alt:Z||d.name.replace(/\.[^.]+$/,""),attachToKb:_});if(!e.ok)return void n.oR.error(e.error);f?.({url:e.url,markdown:e.markdown,...e.kbRelPath?{kbRelPath:e.kbRelPath}:{}}),n.oR.success(e.kbRelPath?v("images.savedToKb",{path:e.kbRelPath}):v("images.uploaded")),c(!1)})}}),ab&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:v("images.uploading")})]})]})]})]})]})}function C({rootId:a,redirectToKb:b=!0}){let[c,j]=(0,e.useState)(!1),k=(0,f.useRouter)(),l=(0,h.c)("app");return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(i.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>j(!0),children:[(0,d.jsx)(g.A,{className:"mr-1 h-4 w-4"})," ",l("images.button")]}),(0,d.jsx)(B,{rootId:a,open:c,onOpenChange:j,onInsert:({kbRelPath:c})=>{if(b&&c){let b=c.split("/").map(encodeURIComponent).join("/");k.push(`/roots/${a}/kb/${b}`)}}})]})}}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=4812,exports.ids=[4812,8514],exports.modules={9328:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bp:()=>A,JR:()=>P,Kt:()=>I,L_:()=>z,QI:()=>G,QR:()=>y,RK:()=>K,Yt:()=>Q,Zh:()=>J,b7:()=>L,gn:()=>B,i8:()=>R,jf:()=>F,k_:()=>O,mR:()=>E,nO:()=>C,q_:()=>H,vv:()=>x});var e=c(73745);c(66493);var f=c(73024),g=c(76760),h=c.n(g),i=c(65326),j=c(53905),k=c(5492),l=c(36017),m=c(51021),n=c(99861),o=c(45730),p=c(97453),q=c(16975),r=c(8118),s=c(28514),t=c(12140),u=c(20050),v=c(63781),w=a([m,n,o]);async function x(a){try{let b=await (0,r.listUtilities)(a??{});return{ok:!0,utilities:b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function y(a){let b=await (0,o.w)(a);return b.ok?{ok:!0,preview:b.preview}:{ok:!1,error:b.error}}async function z(a){try{let b=await (0,o.installFromGithubConfirmed)(a);return(0,i.revalidatePath)("/utilities"),{ok:!0,scope:b.scope,id:b.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function A(){let{getCuratedRegistry:a}=await c.e(4925).then(c.bind(c,44925));return{items:await a()}}async function B(a){if(a.github.startsWith("builtin:"))try{let{installFromBuiltin:b}=await c.e(2035).then(c.bind(c,54416)),d=await b({builtin:a.github,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}});return(0,i.revalidatePath)("/utilities"),{ok:!0,scope:d.scope,id:d.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}let b=await (0,o.w)(a.github);if(!b.ok)return{ok:!1,error:b.error};try{let c=await (0,o.installFromGithubConfirmed)({preview:b.preview,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}});return(0,i.revalidatePath)("/utilities"),{ok:!0,scope:c.scope,id:c.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function C(a){try{let b=await (0,r.listUtilities)({...a?.rootId?{rootId:a.rootId}:{}}),d=[];for(let a of b){let b=a.manifest.source?.origin??"";if(b.startsWith("builtin:")){let b=await D(a.manifest.id,a.manifest.version);b&&d.push({scope:a.scope,id:a.manifest.id,name:a.manifest.name,currentVersion:a.manifest.version,latestVersion:b.version,source:"builtin",ref:b.spec})}else if(b.startsWith("github:"))try{let{checkGithubUpdate:b}=await Promise.resolve().then(c.bind(c,45730)),e=await b(a.scope,a.manifest.id,a.rootId);!e.upToDate&&e.preview&&d.push({scope:a.scope,id:a.manifest.id,name:a.manifest.name,currentVersion:a.manifest.version,latestVersion:e.preview.manifest.version,source:"github",ref:`github:${e.preview.source.owner}/${e.preview.source.repo}@${e.latestSha}`})}catch{}}return{ok:!0,updates:d}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function D(a,b){try{let d=await Promise.resolve().then(c.t.bind(c,51455,23)),e=(await Promise.resolve().then(c.t.bind(c,76760,23))).join(process.cwd(),"packages","utilities",a,"manifest.json"),f=await d.readFile(e,"utf8"),g=JSON.parse(f);if(!g.version||g.version===b)return null;return{version:g.version,spec:`builtin:${a}@${g.version}`}}catch{return null}}async function E(a){try{let{withUpdateSnapshot:b}=await c.e(4840).then(c.bind(c,94840)),d=await b(a.scope,a.id,a.rootId,async()=>{if("builtin"===a.source){let{installFromBuiltin:b}=await c.e(2035).then(c.bind(c,54416));return(await b({builtin:a.ref,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}})).origin.split("@")[1]??a.latestVersion}if("github"===a.source){let{checkGithubUpdate:b,installFromGithubConfirmed:d}=await Promise.resolve().then(c.bind(c,45730)),e=await b(a.scope,a.id,a.rootId);return e.upToDate||!e.preview?a.currentVersion:(await d({preview:e.preview,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}}),e.preview.manifest.version)}throw Error(`Unknown update source: ${a.source}`)});return(0,i.revalidatePath)("/utilities"),a.rootId&&(0,i.revalidatePath)(`/roots/${a.rootId}`),{ok:!0,newVersion:d}}catch(c){var b,d;let a=c instanceof Error?c.message:String(c);return{ok:!1,error:`Update rolled back — previous version restored. Error: ${b=a,d=600,b.length<=600?b:b.slice(0,d)+"…"}`}}}async function F(a,b,c){try{return await (0,r.jc)(a,b,c),await (0,s.J8)(a,b,c),(0,i.revalidatePath)("/utilities"),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function G(a,b,c){try{let d=await (0,r.getUtility)(a,b,c);if(!d)return{ok:!1,error:"utility not found"};return await (0,n.buildUtility)(d),(0,i.revalidatePath)(`/utilities/${a}/${b}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function H(a,b,c){try{let d=await (0,o.checkGithubUpdate)(a,b,c);return{ok:!0,...d}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function I(a){return(0,t.y4)(a??{})}async function J(a){let b=p.McpConfigSchema.safeParse(a);if(!b.success)return{ok:!1,error:b.error.message};try{let a=await (0,p.connectAndListTools)(b.data);return{ok:!0,...a.name?{serverName:a.name}:{},...a.version?{serverVersion:a.version}:{},tools:a.tools}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function K(a){try{var b;let c=p.McpConfigSchema.parse(a.config),d=await (0,p.connectAndListTools)(c),e=(0,q.U)({id:a.id,name:a.name,description:a.description??d.name??"",tools:d.tools}),g=u.pL.parse(e.manifest),j=await (0,r.gd)({scope:a.scope,...a.rootId?{rootId:a.rootId}:{},manifest:g,files:e.files,source:{type:"mcp",origin:(b=c,"stdio"===b.transport?`mcp:stdio:${b.command}${b.args.length?" "+b.args.join(" "):""}`:`mcp:${b.transport}:${b.url}`),fetchedAt:new Date().toISOString(),installedBy:"user"}});return await f.promises.writeFile(h().join(j.dir,"mcp.json"),JSON.stringify(c,null,2)+"\n","utf8"),await (0,n.buildUtility)(j),(0,i.revalidatePath)("/utilities"),{ok:!0,scope:j.scope,id:j.manifest.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function L(a){try{let b=await (0,r.getUtility)(a.scope,a.id,a.rootId);if(!b)return{ok:!1,error:"utility not found"};if(!a.instruction.trim())return{ok:!1,error:"instruction is empty"};let c=await M(b,a.rootId);if(!c)return{ok:!1,error:"no project root available — register a root first"};let d=await (0,j.Zn)(c);if(!d)return{ok:!1,error:"root not found"};let e=await N(b.dir),f=function(a,b,c,d){let e=c.map(a=>{var b;return"### "+a.rel+"\n```"+((b=a.rel).endsWith(".tsx")?"tsx":b.endsWith(".ts")?"ts":b.endsWith(".jsx")?"jsx":b.endsWith(".js")?"js":b.endsWith(".json")?"json":b.endsWith(".css")?"css":b.endsWith(".md")?"md":"")+"\n"+a.content+"\n```"}).join("\n\n");return[`/goal Improve the Reflex utility "${a.name}" (id: ${a.id}).`,"",`Current utility directory on disk: \`${b}\`.`,`Scope: ${a.source?.type??"agent"} -> manifest.id=${a.id}.`,"\n## What the user is asking",d.trim(),"\n## Current utility files",e||"(no readable files)",'\n## What is required of you\n1. Read the files above and understand the current behaviour.\n2. Make the changes the user requested.\n3. Emit the updated utility via the `<<reflex:utility>>` marker with the same `id` and an incremented `version`. Reflex will reinstall it on top of the existing one and rebuild the bundle immediately.\n4. Verify the new bundle builds without errors and the UI reflects the requested change.\n5. When done, emit `<<reflex:kb>>{"kind":"goal-completion",...}` and the phrase `GOAL ACHIEVED` on a separate line.\n\nDo not invent imports outside the whitelist (`react`, `react-dom/client`, `react/jsx-runtime`, `@host/api`, `@host/ui`). If the request requires something impossible — ask via `<<reflex:question>>`.'].join("\n")}(b.manifest,b.dir,e,a.instruction),g=await (0,l.M)(),h=g.assignments.chat,n=await (0,k.OY)({root:d.path,firstMessage:`Edit: ${b.manifest.name}`,harness:h.harness,model:h.model,language:g.language}),o=await (0,m.W)({rootId:c,topicId:n.meta.id,message:f});if("error"in o)return{ok:!1,error:o.error};return(0,i.revalidatePath)(`/roots/${c}`),{ok:!0,rootId:c,topicId:n.meta.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function M(a,b){if(a.rootId)return a.rootId;let c=a.manifest.source?.origin;if(c?.startsWith("agent:")){let a=c.split(":");if(a.length>=4){let b=a[1];if(await (0,j.Zn)(b))return b}}if(b&&await (0,j.Zn)(b))return b;let d=await (0,j.qV)();return d[0]?.id}async function N(a){let b=[],c=async(a,d)=>{for(let e of(await f.promises.readdir(a,{withFileTypes:!0}))){if("data"===e.name||"dist"===e.name||"node_modules"===e.name)continue;let g=h().join(a,e.name),i=d?`${d}/${e.name}`:e.name;if(e.isDirectory())await c(g,i);else if(/\.(tsx?|jsx?|md|json|css)$/.test(e.name)&&"bundle.js"!==e.name&&"style.css"!==e.name){let a=await f.promises.readFile(g,"utf8");a.length<32e3&&b.push({rel:i,content:a})}}};return await c(a,""),b}async function O(a){try{let b=await (0,r.getUtility)(a.scope,a.id,a.rootId);if(!b)return{ok:!1,error:"utility not found"};let c=b.manifest.secrets??[],d=new Set(await (0,s.listSecretKeys)(a.scope,a.id,a.rootId));return{ok:!0,secrets:c.map(a=>({key:a.key,label:a.label,description:a.description,required:a.required,set:d.has(a.key)}))}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function P(a){try{let b=await (0,r.getUtility)(a.scope,a.id,a.rootId);if(!b)return{ok:!1,error:"utility not found"};if(!(b.manifest.secrets??[]).find(b=>b.key===a.key))return{ok:!1,error:`secret "${a.key}" is not declared in manifest.secrets`};if(!a.value)return{ok:!1,error:"empty value — use delete instead"};return await (0,s.Pq)(a.scope,a.id,a.key,a.value,a.rootId),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function Q(a){try{return await (0,s.e3)(a.scope,a.id,a.key,a.rootId),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function R(a,b,c){try{let d=await (0,r.getUtility)(a,b,c);if(!d)return{ok:!1,error:"utility not found"};return{ok:!0,manifest:d.manifest}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[m,n,o]=w.then?(await w)():w,(0,v.D)([x,y,z,A,B,C,E,F,G,H,I,J,K,L,O,P,Q,R]),(0,e.A)(x,"4076f26a39b4278a7530b6b051e59fa1e203d3025c",null),(0,e.A)(y,"40a1c57265295bc3f32fdab106195949d23686abab",null),(0,e.A)(z,"40169380cabb5c53092f424191f065e624751fe936",null),(0,e.A)(A,"004990cdb6d30947e2633d7bfb2a235e97e261bff2",null),(0,e.A)(B,"40912a625fc77668111daf92a059fa926afbb074db",null),(0,e.A)(C,"4035e1065140b282471b1711f1163790f97feaa87a",null),(0,e.A)(E,"40c82632599b98d9cfd19e4d3e25e3944ec1fed156",null),(0,e.A)(F,"70152ed642e09c26d0520ef36667a7c5a62c314ac7",null),(0,e.A)(G,"700ea107f3ce84b3f33941d5420b43ce5e2fbdb90f",null),(0,e.A)(H,"70cd126c69c92497406ad40fbe8e7363be74d7e3cd",null),(0,e.A)(I,"40a8307bbe138d8420059b24822e1d8c853e7db15c",null),(0,e.A)(J,"40e38c6399a1349e2fd75cd57587d323cccabc1dab",null),(0,e.A)(K,"4055c7450eb27f572942967546d4c424e12ea0fc30",null),(0,e.A)(L,"4001156eea2c73007b6a0d1d0a0cd86a05e377c5d2",null),(0,e.A)(O,"404d7f7c183190d0b602bae3d3abcf364bed117b12",null),(0,e.A)(P,"40ea9b528b4c4cd1a784f7775d2cbd54acc9529044",null),(0,e.A)(Q,"4034f9603fe6653d2df66e4990e4634c73ef1f8a28",null),(0,e.A)(R,"707e95077fc3cf3eb610b20d2061c8e946dea55939",null),d()}catch(a){d(a)}})},12140:(a,b,c)=>{c.d(b,{Md:()=>p,u0:()=>m,y4:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(73652);let j=f().join((0,i._)(),"audit");function k(a){return f().join(j,`${a}.jsonl`)}function l(a=new Date){return a.toISOString().slice(0,10)}async function m(a){let b={ts:a.ts??new Date().toISOString(),...a};await d.promises.mkdir(j,{recursive:!0});let c=k(l());await d.promises.appendFile(c,JSON.stringify(b)+"\n","utf8")}async function n(a={}){let b,c=await o(),e=a.date??c[0]??l(),f=a.limit??500,g=k(e);try{b=await d.promises.readFile(g,"utf8")}catch{return{date:e,entries:[],availableDates:c}}let h=[],i=b.split(/\r?\n/);for(let b=i.length-1;b>=0&&h.length<f;b--){let c,d=i[b];if(d){try{c=JSON.parse(d)}catch{continue}(function(a,b){if(!b)return!0;if(b.utilityId&&a.utilityId!==b.utilityId||b.method&&a.method!==b.method||b.phase&&a.phase!==b.phase)return!1;if(b.status){let c=!a.error;if("ok"===b.status&&!c||"error"===b.status&&c)return!1}return!0})(c,a.filter)&&h.push(c)}}return{date:e,entries:h,availableDates:c}}async function o(){let a;try{a=await d.promises.readdir(j)}catch{return[]}return a.filter(a=>/^\d{4}-\d{2}-\d{2}\.jsonl$/.test(a)).map(a=>a.replace(/\.jsonl$/,"")).sort().reverse()}async function p(a,b){let c=h().randomUUID().replace(/-/g,"").slice(0,16),d=Date.now();await m({ts:new Date().toISOString(),utilityId:a.utilityId,scope:a.scope,channel:a.channel,method:a.method,phase:"start",correlationId:c,...a.parentCorrelationId?{parentCorrelationId:a.parentCorrelationId}:{},args:q(a.args)});try{let e=await b(c);return await m({ts:new Date().toISOString(),utilityId:a.utilityId,scope:a.scope,channel:a.channel,method:a.method,phase:"end",correlationId:c,durationMs:Date.now()-d,result:q(e)}),e}catch(e){let b=e instanceof Error?e.message:String(e);throw await m({ts:new Date().toISOString(),utilityId:a.utilityId,scope:a.scope,channel:a.channel,method:a.method,phase:"end",correlationId:c,durationMs:Date.now()-d,error:b}),e}}function q(a,b=0){if(null==a)return a;if("string"==typeof a)return a.length>2e3?a.slice(0,2e3)+"…[truncated]":a;if("object"!=typeof a)return a;if(b>3)return"[…]";if(Array.isArray(a))return a.slice(0,50).map(a=>q(a,b+1));let c={},d=0;for(let[e,f]of Object.entries(a)){if(d++>=50){c["…"]="truncated";break}c[e]=q(f,b+1)}return c}},16975:(a,b,c)=>{function d(a){var b;return{manifest:{id:a.id,name:a.name,description:a.description,version:"0.1.0",ui:"ui.tsx",serverActions:[],permissions:{audit:{write:!0}}},files:{"ui.tsx":function(a){let b=JSON.stringify(a.tools,null,2);return`import { useState } from "react";
1
+ "use strict";exports.id=4812,exports.ids=[4812,8514],exports.modules={9328:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bp:()=>A,JR:()=>P,Kt:()=>I,L_:()=>z,QI:()=>G,QR:()=>y,RK:()=>K,Yt:()=>Q,Zh:()=>J,b7:()=>L,gn:()=>B,i8:()=>R,jf:()=>F,k_:()=>O,mR:()=>E,nO:()=>C,q_:()=>H,vv:()=>x});var e=c(73745);c(66493);var f=c(73024),g=c(76760),h=c.n(g),i=c(65326),j=c(53905),k=c(5492),l=c(36017),m=c(51021),n=c(99861),o=c(45730),p=c(97453),q=c(16975),r=c(8118),s=c(28514),t=c(12140),u=c(20050),v=c(63781),w=a([m,n,o]);async function x(a){try{let b=await (0,r.listUtilities)(a??{});return{ok:!0,utilities:b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function y(a){let b=await (0,o.w)(a);return b.ok?{ok:!0,preview:b.preview}:{ok:!1,error:b.error}}async function z(a){try{let b=await (0,o.installFromGithubConfirmed)(a);return(0,i.revalidatePath)("/utilities"),{ok:!0,scope:b.scope,id:b.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function A(){let{getCuratedRegistry:a}=await c.e(4925).then(c.bind(c,44925));return{items:await a()}}async function B(a){if(a.github.startsWith("builtin:"))try{let{installFromBuiltin:b}=await c.e(2035).then(c.bind(c,32035)),d=await b({builtin:a.github,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}});return(0,i.revalidatePath)("/utilities"),{ok:!0,scope:d.scope,id:d.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}let b=await (0,o.w)(a.github);if(!b.ok)return{ok:!1,error:b.error};try{let c=await (0,o.installFromGithubConfirmed)({preview:b.preview,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}});return(0,i.revalidatePath)("/utilities"),{ok:!0,scope:c.scope,id:c.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function C(a){try{let b=await (0,r.listUtilities)({...a?.rootId?{rootId:a.rootId}:{}}),d=[];for(let a of b){let b=a.manifest.source?.origin??"";if(b.startsWith("builtin:")){let b=await D(a.manifest.id,a.manifest.version);b&&d.push({scope:a.scope,id:a.manifest.id,name:a.manifest.name,currentVersion:a.manifest.version,latestVersion:b.version,source:"builtin",ref:b.spec})}else if(b.startsWith("github:"))try{let{checkGithubUpdate:b}=await Promise.resolve().then(c.bind(c,45730)),e=await b(a.scope,a.manifest.id,a.rootId);!e.upToDate&&e.preview&&d.push({scope:a.scope,id:a.manifest.id,name:a.manifest.name,currentVersion:a.manifest.version,latestVersion:e.preview.manifest.version,source:"github",ref:`github:${e.preview.source.owner}/${e.preview.source.repo}@${e.latestSha}`})}catch{}}return{ok:!0,updates:d}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function D(a,b){try{let d=await Promise.resolve().then(c.t.bind(c,51455,23)),e=(await Promise.resolve().then(c.t.bind(c,76760,23))).join(process.cwd(),"packages","utilities",a,"manifest.json"),f=await d.readFile(e,"utf8"),g=JSON.parse(f);if(!g.version||g.version===b)return null;return{version:g.version,spec:`builtin:${a}@${g.version}`}}catch{return null}}async function E(a){try{let{withUpdateSnapshot:b}=await c.e(4840).then(c.bind(c,94840)),d=await b(a.scope,a.id,a.rootId,async()=>{if("builtin"===a.source){let{installFromBuiltin:b}=await c.e(2035).then(c.bind(c,32035));return(await b({builtin:a.ref,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}})).origin.split("@")[1]??a.latestVersion}if("github"===a.source){let{checkGithubUpdate:b,installFromGithubConfirmed:d}=await Promise.resolve().then(c.bind(c,45730)),e=await b(a.scope,a.id,a.rootId);return e.upToDate||!e.preview?a.currentVersion:(await d({preview:e.preview,scope:a.scope,...a.rootId?{rootId:a.rootId}:{}}),e.preview.manifest.version)}throw Error(`Unknown update source: ${a.source}`)});return(0,i.revalidatePath)("/utilities"),a.rootId&&(0,i.revalidatePath)(`/roots/${a.rootId}`),{ok:!0,newVersion:d}}catch(c){var b,d;let a=c instanceof Error?c.message:String(c);return{ok:!1,error:`Update rolled back — previous version restored. Error: ${b=a,d=600,b.length<=600?b:b.slice(0,d)+"…"}`}}}async function F(a,b,c){try{return await (0,r.jc)(a,b,c),await (0,s.J8)(a,b,c),(0,i.revalidatePath)("/utilities"),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function G(a,b,c){try{let d=await (0,r.getUtility)(a,b,c);if(!d)return{ok:!1,error:"utility not found"};return await (0,n.buildUtility)(d),(0,i.revalidatePath)(`/utilities/${a}/${b}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function H(a,b,c){try{let d=await (0,o.checkGithubUpdate)(a,b,c);return{ok:!0,...d}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function I(a){return(0,t.y4)(a??{})}async function J(a){let b=p.McpConfigSchema.safeParse(a);if(!b.success)return{ok:!1,error:b.error.message};try{let a=await (0,p.connectAndListTools)(b.data);return{ok:!0,...a.name?{serverName:a.name}:{},...a.version?{serverVersion:a.version}:{},tools:a.tools}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function K(a){try{var b;let c=p.McpConfigSchema.parse(a.config),d=await (0,p.connectAndListTools)(c),e=(0,q.U)({id:a.id,name:a.name,description:a.description??d.name??"",tools:d.tools}),g=u.pL.parse(e.manifest),j=await (0,r.gd)({scope:a.scope,...a.rootId?{rootId:a.rootId}:{},manifest:g,files:e.files,source:{type:"mcp",origin:(b=c,"stdio"===b.transport?`mcp:stdio:${b.command}${b.args.length?" "+b.args.join(" "):""}`:`mcp:${b.transport}:${b.url}`),fetchedAt:new Date().toISOString(),installedBy:"user"}});return await f.promises.writeFile(h().join(j.dir,"mcp.json"),JSON.stringify(c,null,2)+"\n","utf8"),await (0,n.buildUtility)(j),(0,i.revalidatePath)("/utilities"),{ok:!0,scope:j.scope,id:j.manifest.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function L(a){try{let b=await (0,r.getUtility)(a.scope,a.id,a.rootId);if(!b)return{ok:!1,error:"utility not found"};if(!a.instruction.trim())return{ok:!1,error:"instruction is empty"};let c=await M(b,a.rootId);if(!c)return{ok:!1,error:"no project root available — register a root first"};let d=await (0,j.Zn)(c);if(!d)return{ok:!1,error:"root not found"};let e=await N(b.dir),f=function(a,b,c,d){let e=c.map(a=>{var b;return"### "+a.rel+"\n```"+((b=a.rel).endsWith(".tsx")?"tsx":b.endsWith(".ts")?"ts":b.endsWith(".jsx")?"jsx":b.endsWith(".js")?"js":b.endsWith(".json")?"json":b.endsWith(".css")?"css":b.endsWith(".md")?"md":"")+"\n"+a.content+"\n```"}).join("\n\n");return[`/goal Improve the Reflex utility "${a.name}" (id: ${a.id}).`,"",`Current utility directory on disk: \`${b}\`.`,`Scope: ${a.source?.type??"agent"} -> manifest.id=${a.id}.`,"\n## What the user is asking",d.trim(),"\n## Current utility files",e||"(no readable files)",'\n## What is required of you\n1. Read the files above and understand the current behaviour.\n2. Make the changes the user requested.\n3. Emit the updated utility via the `<<reflex:utility>>` marker with the same `id` and an incremented `version`. Reflex will reinstall it on top of the existing one and rebuild the bundle immediately.\n4. Verify the new bundle builds without errors and the UI reflects the requested change.\n5. When done, emit `<<reflex:kb>>{"kind":"goal-completion",...}` and the phrase `GOAL ACHIEVED` on a separate line.\n\nDo not invent imports outside the whitelist (`react`, `react-dom/client`, `react/jsx-runtime`, `@host/api`, `@host/ui`). If the request requires something impossible — ask via `<<reflex:question>>`.'].join("\n")}(b.manifest,b.dir,e,a.instruction),g=await (0,l.M)(),h=g.assignments.chat,n=await (0,k.OY)({root:d.path,firstMessage:`Edit: ${b.manifest.name}`,harness:h.harness,model:h.model,language:g.language}),o=await (0,m.W)({rootId:c,topicId:n.meta.id,message:f});if("error"in o)return{ok:!1,error:o.error};return(0,i.revalidatePath)(`/roots/${c}`),{ok:!0,rootId:c,topicId:n.meta.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function M(a,b){if(a.rootId)return a.rootId;let c=a.manifest.source?.origin;if(c?.startsWith("agent:")){let a=c.split(":");if(a.length>=4){let b=a[1];if(await (0,j.Zn)(b))return b}}if(b&&await (0,j.Zn)(b))return b;let d=await (0,j.qV)();return d[0]?.id}async function N(a){let b=[],c=async(a,d)=>{for(let e of(await f.promises.readdir(a,{withFileTypes:!0}))){if("data"===e.name||"dist"===e.name||"node_modules"===e.name)continue;let g=h().join(a,e.name),i=d?`${d}/${e.name}`:e.name;if(e.isDirectory())await c(g,i);else if(/\.(tsx?|jsx?|md|json|css)$/.test(e.name)&&"bundle.js"!==e.name&&"style.css"!==e.name){let a=await f.promises.readFile(g,"utf8");a.length<32e3&&b.push({rel:i,content:a})}}};return await c(a,""),b}async function O(a){try{let b=await (0,r.getUtility)(a.scope,a.id,a.rootId);if(!b)return{ok:!1,error:"utility not found"};let c=b.manifest.secrets??[],d=new Set(await (0,s.listSecretKeys)(a.scope,a.id,a.rootId));return{ok:!0,secrets:c.map(a=>({key:a.key,label:a.label,description:a.description,required:a.required,set:d.has(a.key)}))}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function P(a){try{let b=await (0,r.getUtility)(a.scope,a.id,a.rootId);if(!b)return{ok:!1,error:"utility not found"};if(!(b.manifest.secrets??[]).find(b=>b.key===a.key))return{ok:!1,error:`secret "${a.key}" is not declared in manifest.secrets`};if(!a.value)return{ok:!1,error:"empty value — use delete instead"};return await (0,s.Pq)(a.scope,a.id,a.key,a.value,a.rootId),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function Q(a){try{return await (0,s.e3)(a.scope,a.id,a.key,a.rootId),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function R(a,b,c){try{let d=await (0,r.getUtility)(a,b,c);if(!d)return{ok:!1,error:"utility not found"};return{ok:!0,manifest:d.manifest}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[m,n,o]=w.then?(await w)():w,(0,v.D)([x,y,z,A,B,C,E,F,G,H,I,J,K,L,O,P,Q,R]),(0,e.A)(x,"402aa9cf3c07c50d48b5a719e599a4dc4caaa9496d",null),(0,e.A)(y,"4018c904fd18584508b5fad6f8f3fe5607011cd684",null),(0,e.A)(z,"40690cffa03d48e77346b36bac334924de598eac87",null),(0,e.A)(A,"00012957a3716e59a94da3cf8a28db1562ebf3f98f",null),(0,e.A)(B,"40d8a72a99146223e20c1f17ad91e1dc426295c66d",null),(0,e.A)(C,"40944e90e908d3bf1c2fa94d2484bddd470b7588be",null),(0,e.A)(E,"404ceccae9530f40fbbffbf3b1025289e5fa4b3a32",null),(0,e.A)(F,"707541a83e79a561bbff7f82363f2670057469dbf7",null),(0,e.A)(G,"70101c158046e48740b9a816812603c5132b463b14",null),(0,e.A)(H,"708f05ae6f82f5fe16520c47618d6e92997961ed44",null),(0,e.A)(I,"40401b090696a765f6b1bb92ff6d76042b235a97db",null),(0,e.A)(J,"40b479829ee2302aa946566d80f76acd54f40e0204",null),(0,e.A)(K,"4069e003d327155d9eaee338b64a61a0e2acebe779",null),(0,e.A)(L,"4050cedbca141c8aa8878dbe0f585dbf48e359ddee",null),(0,e.A)(O,"401c48b51fbddfbb1d100493e89232296c9e9cdab0",null),(0,e.A)(P,"401e84076aa1610522ec80e8e7720fe1429e68a76b",null),(0,e.A)(Q,"40727228bac0f75577137fdf31023765db44547f67",null),(0,e.A)(R,"70f4a91723e623d898e8acf7e418f56e6ad27b7aaf",null),d()}catch(a){d(a)}})},12140:(a,b,c)=>{c.d(b,{Md:()=>p,u0:()=>m,y4:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(73652);let j=f().join((0,i._)(),"audit");function k(a){return f().join(j,`${a}.jsonl`)}function l(a=new Date){return a.toISOString().slice(0,10)}async function m(a){let b={ts:a.ts??new Date().toISOString(),...a};await d.promises.mkdir(j,{recursive:!0});let c=k(l());await d.promises.appendFile(c,JSON.stringify(b)+"\n","utf8")}async function n(a={}){let b,c=await o(),e=a.date??c[0]??l(),f=a.limit??500,g=k(e);try{b=await d.promises.readFile(g,"utf8")}catch{return{date:e,entries:[],availableDates:c}}let h=[],i=b.split(/\r?\n/);for(let b=i.length-1;b>=0&&h.length<f;b--){let c,d=i[b];if(d){try{c=JSON.parse(d)}catch{continue}(function(a,b){if(!b)return!0;if(b.utilityId&&a.utilityId!==b.utilityId||b.method&&a.method!==b.method||b.phase&&a.phase!==b.phase)return!1;if(b.status){let c=!a.error;if("ok"===b.status&&!c||"error"===b.status&&c)return!1}return!0})(c,a.filter)&&h.push(c)}}return{date:e,entries:h,availableDates:c}}async function o(){let a;try{a=await d.promises.readdir(j)}catch{return[]}return a.filter(a=>/^\d{4}-\d{2}-\d{2}\.jsonl$/.test(a)).map(a=>a.replace(/\.jsonl$/,"")).sort().reverse()}async function p(a,b){let c=h().randomUUID().replace(/-/g,"").slice(0,16),d=Date.now();await m({ts:new Date().toISOString(),utilityId:a.utilityId,scope:a.scope,channel:a.channel,method:a.method,phase:"start",correlationId:c,...a.parentCorrelationId?{parentCorrelationId:a.parentCorrelationId}:{},args:q(a.args)});try{let e=await b(c);return await m({ts:new Date().toISOString(),utilityId:a.utilityId,scope:a.scope,channel:a.channel,method:a.method,phase:"end",correlationId:c,durationMs:Date.now()-d,result:q(e)}),e}catch(e){let b=e instanceof Error?e.message:String(e);throw await m({ts:new Date().toISOString(),utilityId:a.utilityId,scope:a.scope,channel:a.channel,method:a.method,phase:"end",correlationId:c,durationMs:Date.now()-d,error:b}),e}}function q(a,b=0){if(null==a)return a;if("string"==typeof a)return a.length>2e3?a.slice(0,2e3)+"…[truncated]":a;if("object"!=typeof a)return a;if(b>3)return"[…]";if(Array.isArray(a))return a.slice(0,50).map(a=>q(a,b+1));let c={},d=0;for(let[e,f]of Object.entries(a)){if(d++>=50){c["…"]="truncated";break}c[e]=q(f,b+1)}return c}},16975:(a,b,c)=>{function d(a){var b;return{manifest:{id:a.id,name:a.name,description:a.description,version:"0.1.0",ui:"ui.tsx",serverActions:[],permissions:{audit:{write:!0}}},files:{"ui.tsx":function(a){let b=JSON.stringify(a.tools,null,2);return`import { useState } from "react";
2
2
  import { reflex } from "@host/api";
3
3
  import {
4
4
  Button,