reflex-agent 0.2.1 → 0.2.3
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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +101 -101
- package/.next/app-path-routes-manifest.json +11 -11
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -51
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/agents/[agentId]/page.js +1 -1
- package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/[agentId]/respond/route.js +1 -1
- package/.next/server/app/api/agents/[agentId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/images/[rootId]/[file]/route.js +1 -1
- package/.next/server/app/api/images/[rootId]/[file]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route.js +2 -2
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/start/route.js +1 -1
- package/.next/server/app/api/oauth/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/attachments/route.js +0 -0
- package/.next/server/app/api/roots/[id]/attachments/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route.js +2 -2
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/dashboard/route.js +1 -1
- package/.next/server/app/api/roots/[id]/dashboard/route.js.nft.json +1 -1
- package/.next/server/app/api/roots/[id]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/suggestions/route.js +1 -1
- package/.next/server/app/api/roots/[id]/suggestions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/bundle.js/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host/route.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host-api.mjs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host-ui.mjs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/iframe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/style.css/route_client-reference-manifest.js +1 -1
- package/.next/server/app/audit/page.js +2 -2
- package/.next/server/app/audit/page.js.nft.json +1 -1
- package/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/onboarding/page.js +3 -3
- package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/chat/[topicId]/page.js +3 -3
- package/.next/server/app/roots/[id]/chat/[topicId]/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/chat/[topicId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/kb/[...slug]/page.js +3 -3
- package/.next/server/app/roots/[id]/kb/[...slug]/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/kb/[...slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/page.js +3 -3
- package/.next/server/app/roots/[id]/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/workflows/[wfId]/page.js +2 -2
- package/.next/server/app/roots/[id]/workflows/[wfId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/workflows/page.js +1 -1
- package/.next/server/app/roots/[id]/workflows/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/workflows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/new/page.js +2 -2
- package/.next/server/app/roots/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +5 -5
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/share/[id]/file/page.js +2 -2
- package/.next/server/app/share/[id]/file/page_client-reference-manifest.js +1 -1
- package/.next/server/app/share/[id]/page.js +2 -2
- package/.next/server/app/share/[id]/page.js.nft.json +1 -1
- package/.next/server/app/share/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/utilities/[scope]/[id]/page.js +2 -2
- package/.next/server/app/utilities/[scope]/[id]/page.js.nft.json +1 -1
- package/.next/server/app/utilities/[scope]/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/utilities/page.js +4 -4
- package/.next/server/app/utilities/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +11 -11
- package/.next/server/chunks/1105.js +1 -1
- package/.next/server/chunks/1223.js +1 -1
- package/.next/server/chunks/133.js +7 -7
- package/.next/server/chunks/1888.js +1 -1
- package/.next/server/chunks/1960.js +1 -1
- package/.next/server/chunks/1986.js +1 -1
- package/.next/server/chunks/2433.js +1 -1
- package/.next/server/chunks/2485.js +1 -1
- package/.next/server/chunks/2503.js +1 -1
- package/.next/server/chunks/2528.js +4 -0
- package/.next/server/chunks/3332.js +1 -1
- package/.next/server/chunks/4031.js +1 -1
- package/.next/server/chunks/4065.js +1 -0
- package/.next/server/chunks/4925.js +1 -1
- package/.next/server/chunks/5243.js +1 -1
- package/.next/server/chunks/6730.js +1 -1
- package/.next/server/chunks/6909.js +5 -5
- package/.next/server/chunks/6981.js +1 -0
- package/.next/server/chunks/7017.js +3 -0
- package/.next/server/chunks/{5401.js → 7800.js} +1 -1
- package/.next/server/chunks/8494.js +1 -0
- package/.next/server/chunks/8514.js +1 -1
- package/.next/server/chunks/9098.js +1 -1
- package/.next/server/chunks/9293.js +1 -1
- package/.next/server/chunks/9328.js +2 -2
- package/.next/server/chunks/9423.js +3 -0
- package/.next/server/chunks/9455.js +1 -0
- package/.next/server/chunks/9579.js +1 -1
- package/.next/server/functions-config-manifest.json +2 -2
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/_error.js +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1384-d28fb6c6c058876f.js +1 -0
- package/.next/static/chunks/2718-78fee2c0de782178.js +1 -0
- package/.next/static/chunks/4108.1ef6b5e7679b56ac.js +1 -0
- package/.next/static/chunks/7238-11701befb3ca3e41.js +1 -0
- package/.next/static/chunks/7951-590bf2004d7935b5.js +1 -0
- package/.next/static/chunks/8423-ffded33a21b27360.js +1 -0
- package/.next/static/chunks/app/{layout-c7a35075cfbfa3e3.js → layout-4fbf9f91ad45e221.js} +1 -1
- package/.next/static/chunks/app/onboarding/page-532b193d1c4b0dee.js +1 -0
- package/.next/static/chunks/app/page-e3ec0990b78ce7c7.js +1 -0
- package/.next/static/chunks/app/roots/[id]/chat/[topicId]/{page-1b55f68984817d29.js → page-11aad9a40def2e0d.js} +1 -1
- package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-d8757a85e873dfa1.js +1 -0
- package/.next/static/chunks/app/roots/[id]/page-76216026efb90ae0.js +1 -0
- package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/{page-738e8e4128baa722.js → page-c4b6e3825f8626f5.js} +1 -1
- package/.next/static/chunks/app/roots/new/page-53ea8d2787e79425.js +1 -0
- package/.next/static/chunks/app/settings/page-7ebaf2b62f256538.js +1 -0
- package/.next/static/chunks/app/share/[id]/{page-5bbc8503cb9a9eeb.js → page-d5bbbb7e454d1375.js} +1 -1
- package/.next/static/chunks/app/utilities/[scope]/[id]/page-e2f928a37483d113.js +1 -0
- package/.next/static/chunks/app/utilities/page-839262ff726a52a2.js +1 -0
- package/.next/static/chunks/{webpack-2e8cca5826414cc6.js → webpack-87b4bb79fdc48563.js} +1 -1
- package/.next/trace +46 -46
- package/README.md +12 -1
- package/dist/bin/cli.js +1 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/preload.js +22 -0
- package/dist/bin/preload.js.map +1 -0
- package/dist/lib/reflex/commands/start.js +35 -0
- package/dist/lib/reflex/commands/start.js.map +1 -1
- package/dist/lib/reflex/home.js +18 -0
- package/dist/lib/reflex/home.js.map +1 -0
- package/dist/lib/reflex/prompts/store.js +2 -2
- package/dist/lib/reflex/prompts/store.js.map +1 -1
- package/lib/server/utilities/worker-bootstrap.js +87 -0
- package/package.json +2 -1
- package/.next/server/app/roots/new.html +0 -1
- package/.next/server/app/roots/new.meta +0 -7
- package/.next/server/app/roots/new.rsc +0 -21
- package/.next/server/app/settings.html +0 -1
- package/.next/server/app/settings.meta +0 -7
- package/.next/server/app/settings.rsc +0 -22
- package/.next/server/chunks/5152.js +0 -1
- package/.next/server/chunks/5373.js +0 -1
- package/.next/server/chunks/5436.js +0 -1
- package/.next/server/chunks/5986.js +0 -3
- package/.next/server/chunks/613.js +0 -1
- package/.next/server/chunks/6536.js +0 -3
- package/.next/server/chunks/6602.js +0 -4
- package/.next/static/chunks/4108.d6ed46bc2fcab462.js +0 -1
- package/.next/static/chunks/4895-712004156efeccf2.js +0 -1
- package/.next/static/chunks/6489-ecde2d94e57eb8a9.js +0 -1
- package/.next/static/chunks/6727-d38536774bdb32d5.js +0 -1
- package/.next/static/chunks/6734-9d524ec49e4ba49c.js +0 -1
- package/.next/static/chunks/6744-dbfe3cc4ce461613.js +0 -1
- package/.next/static/chunks/app/onboarding/page-cde5b92b13b03c63.js +0 -1
- package/.next/static/chunks/app/page-ddaeffdc9a15f597.js +0 -1
- package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-d4358cb6042740c4.js +0 -1
- package/.next/static/chunks/app/roots/[id]/page-703d96bf8208af2f.js +0 -1
- package/.next/static/chunks/app/roots/new/page-534769dce46d0d29.js +0 -1
- package/.next/static/chunks/app/settings/page-86ee3d07ea1acbc7.js +0 -1
- package/.next/static/chunks/app/utilities/[scope]/[id]/page-72546d245b840091.js +0 -1
- package/.next/static/chunks/app/utilities/page-9f949d831421d314.js +0 -1
- /package/.next/static/{p8t15rbWhT5Rrs5fOXWZ6 → vTfQfQnAWV_hFVZjWEYvZ}/_buildManifest.js +0 -0
- /package/.next/static/{p8t15rbWhT5Rrs5fOXWZ6 → vTfQfQnAWV_hFVZjWEYvZ}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=5401,exports.ids=[5401],exports.modules={30515:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},34639:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Aq:()=>o,KV:()=>u,Mh:()=>s,cl:()=>v,hL:()=>p,mm:()=>t,ru:()=>r,tT:()=>q});var e=c(73745);c(66493);var f=c(65326),g=c(53905),h=c(69509),i=c(1405),j=c(93554),k=c(51021),l=c(63781),m=a([j,k]);async function n(a,b){let c=await (0,h.listWidgets)(a),d=await (0,h.readLayout)(a),e=b(d),f=(0,h.reconcileLayout)(e,c.map(a=>a.id),i.SYSTEM_WIDGET_IDS);return await (0,h.writeLayout)(a,f),{ok:!0,layout:f}}async function o(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({...a,order:b.filter(b=>!a.hidden.includes(b))}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({order:a.order.filter(a=>a!==b),hidden:[...new Set([b,...a.hidden])]}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function q(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({order:[b,...a.order.filter(a=>a!==b)],hidden:a.hidden.filter(a=>a!==b)}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a,b,c,d){try{let e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};let i=await (0,h.readWidget)(e.path,b);if(!i)return{ok:!1,error:"Widget not found"};if(!c||"object"!=typeof c)return{ok:!1,error:"newData must be an object"};let j={...i,data:c,updatedAt:new Date().toISOString(),...void 0!==d?{memory:d}:{}};return await (0,h.writeWidget)(e.path,j),(0,f.revalidatePath)(`/roots/${a}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function s(a,b,c){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await n(d.path,a=>({...a,sizes:{...a.sizes??{},[b]:c}}));return(0,f.revalidatePath)(`/roots/${a}`),e}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a,b,c){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await (0,h.readWidget)(d.path,b);if(!e)return{ok:!1,error:"Widget not found"};let i={...e,refresh:c};return await (0,h.writeWidget)(d.path,i),(0,f.revalidatePath)(`/roots/${a}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function u(a,b){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await (0,h.readWidget)(d.path,b);if(!e)return{ok:!1,error:"Widget not found"};if(!e.sourceTopicId)return{ok:!1,error:"У виджета нет исходного топика — обнови его сначала из любого чата."};if(j.z.isActive(e.sourceTopicId))return{ok:!1,error:"Исходный топик уже занят агентом — дождись завершения текущего turn'а."};let f={...e,lastRefreshAt:new Date().toISOString()};await (0,h.writeWidget)(d.path,f);let{buildRefreshPromptForWidget:i}=await c.e(4553).then(c.bind(c,94553)),l=await i(d.path,f),m=await (0,k.W)({rootId:a,topicId:e.sourceTopicId,message:l,attachments:[]});if("error"in m)return{ok:!1,error:m.error};return{ok:!0,agentId:m.agentId}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function v(a,b){try{if(i.SYSTEM_WIDGET_IDS.includes(b))return{ok:!1,error:"Системный виджет нельзя удалить — только скрыть."};let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};await (0,h.uv)(c.path,b);let d=await n(c.path,a=>({order:a.order.filter(a=>a!==b),hidden:a.hidden.filter(a=>a!==b)}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[j,k]=m.then?(await m)():m,(0,l.D)([o,p,q,r,s,t,u,v]),(0,e.A)(o,"601416b46e44c32dc6e5913c62701bf0d9d67742a1",null),(0,e.A)(p,"6089e22ba21be26c6d186cdb8f2237063d666de476",null),(0,e.A)(q,"60a0478d75d9269f26816b1b7beebc90eff3d9187b",null),(0,e.A)(r,"782a7dfb5b54b4761aa052da8284dbf61f02dad08e",null),(0,e.A)(s,"70759bd5828aad5e5a097e0b7a13a4257fbb5df304",null),(0,e.A)(t,"70827672b8385d236902ff2598f2baf1309b6c0ae4",null),(0,e.A)(u,"603add300a64fcf53368bd0436933775b8d692408e",null),(0,e.A)(v,"604d76399e0ab34d93ef5452642a0913388d570aa9",null),d()}catch(a){d(a)}})},48272:(a,b,c)=>{c.d(b,{w:()=>f});var d=c(73745);c(66493);var e=c(36017);async function f(){return{ok:!0,enabled:(await (0,e.M)()).mapServices.enabled}}(0,c(63781).D)([f]),(0,d.A)(f,"00d2b360658c2bc95d18d02f65eb5cc6256ec86ed6",null)},53888:(a,b,c)=>{c.d(b,{t:()=>e});var d=c(3265);let e=(0,d.createServerReference)("60a0478d75d9269f26816b1b7beebc90eff3d9187b",d.callServer,void 0,d.findSourceMapURL,"restoreWidgetAction")},54874:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]])},62481:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]])},72676:(a,b,c)=>{c.d(b,{v:()=>M});var d=c(64173),e=c(93387),f=c(17240),g=c(42557);let h=(0,g.A)("Newspaper",[["path",{d:"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2",key:"7pis2x"}],["path",{d:"M18 14h-8",key:"sponae"}],["path",{d:"M15 18h-5",key:"95g1m2"}],["path",{d:"M10 6h8v4h-8V6Z",key:"smlsk5"}]]);var i=c(65177),j=c(12619),k=c(66979);let l=(0,g.A)("Link",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);var m=c(97338);let n=(0,g.A)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]),o=(0,g.A)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);var p=c(62481),q=c(25436),r=c(30515),s=c(62261),t=c(20583),u=c(47071);let v=(0,g.A)("Quote",[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"rib7q0"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"1ymkrd"}]]);var w=c(1056),x=c.n(w),y=c(68669);let z=(0,g.A)("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);var A=c(65943);let B=(0,g.A)("Route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]),C=(0,g.A)("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);var D=c(28082),E=c(44052),F=c(85548);function G({service:a,size:b=18,className:c}){return(0,d.jsx)("span",{className:"inline-flex items-center justify-center rounded-[5px] font-bold leading-none text-white shrink-0 "+(c??""),style:{background:a.brand,width:b,height:b,fontSize:Math.max(8,Math.floor(.55*b)),letterSpacing:a.glyph.length>1?"-0.05em":"0"},"aria-hidden":!0,children:a.glyph})}var H=c(3265);function I({point:a,services:b,interactive:c,onRemove:e}){return(0,d.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[b.slice(0,4).map(b=>(0,d.jsx)("a",{href:b.urlFor(a.lat,a.lng),target:"_blank",rel:"noopener noreferrer",className:"rounded p-0.5 hover:ring-1 hover:ring-offset-1 hover:ring-violet-300",title:`Маршрут в ${b.label}`,children:(0,d.jsx)(G,{service:b,size:18})},b.id)),(0,d.jsx)("button",{type:"button",onClick:()=>{navigator.clipboard.writeText(`${a.lat}, ${a.lng}`).then(()=>E.oR.success("Координаты скопированы")).catch(()=>E.oR.error("Буфер недоступен"))},className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground",title:"Скопировать координаты",children:(0,d.jsx)(D.A,{className:"h-3 w-3"})}),c&&(0,d.jsx)("button",{type:"button",onClick:e,className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-destructive",title:"Удалить точку",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]})}function J({service:a,stops:b}){let c=a.routeUrlFor(b),e=b=>{b.preventDefault(),b.stopPropagation(),navigator.clipboard.writeText(c).then(()=>E.oR.success(`Ссылка ${a.label} скопирована`)).catch(()=>E.oR.error("Буфер недоступен"))};return(0,d.jsxs)("a",{href:c,target:"_blank",rel:"noopener noreferrer",onContextMenu:e,className:"inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[11px] hover:bg-accent",title:`${a.label} — клик: открыть, правый клик: скопировать ссылку`,children:[(0,d.jsx)(G,{service:a,size:16}),(0,d.jsx)("span",{className:"truncate max-w-[80px]",children:a.label}),(0,d.jsx)("button",{type:"button",onClick:e,className:"text-muted-foreground hover:text-foreground",title:"Скопировать ссылку",children:(0,d.jsx)(D.A,{className:"h-2.5 w-2.5"})})]})}H.callServer,H.findSourceMapURL;var K=c(69552);let L={markdown:function({data:a}){return(0,d.jsx)("div",{className:"text-sm",children:(0,d.jsx)(e.p,{source:a.body??""})})},"news-list":function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,l]=(0,f.useState)(e),[m,n]=(0,f.useTransition)();(0,f.useRef)("");let o=a=>{l(a),c&&n(async()=>{try{await c({items:a})}catch{}})};return 0===g.length?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Список новостей пустой."}):(0,d.jsx)("ul",{className:"space-y-2",children:g.map((a,c)=>(0,d.jsxs)("li",{className:`group/row relative border-l-2 pl-2.5 py-0.5 transition ${a.read?"border-muted-foreground/30 opacity-60":"border-violet-200"}`,children:[(0,d.jsxs)("div",{className:"flex items-start gap-1.5",children:[(0,d.jsx)(h,{className:`h-3 w-3 mt-1 shrink-0 ${a.read?"text-muted-foreground":"text-violet-600"}`}),(0,d.jsxs)("div",{className:"min-w-0 flex-1 pr-12",children:[a.url?(0,d.jsxs)("a",{href:a.url,target:"_blank",rel:"noopener noreferrer",className:"text-sm font-medium hover:underline inline-flex items-center gap-1",children:[a.title,(0,d.jsx)(i.A,{className:"h-3 w-3 opacity-50"})]}):(0,d.jsx)("span",{className:"text-sm font-medium",children:a.title}),a.summary&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5 leading-relaxed",children:a.summary}),(a.source||a.date)&&(0,d.jsxs)("div",{className:"text-[10px] text-muted-foreground mt-0.5 flex gap-1.5",children:[a.source&&(0,d.jsx)("span",{children:a.source}),a.source&&a.date&&(0,d.jsx)("span",{children:"\xb7"}),a.date&&(0,d.jsx)("span",{className:"font-mono",children:a.date})]})]})]}),!b&&(0,d.jsxs)("div",{className:"absolute top-0 right-0 flex items-center gap-0.5 opacity-0 group-hover/row:opacity-100 transition-opacity",children:[(0,d.jsx)("button",{type:"button",onClick:()=>{!b&&o(g.map((a,b)=>b===c?{...a,read:!a.read}:a))},disabled:m,"aria-label":a.read?"Отметить непрочитанным":"Отметить прочитанным",title:a.read?"Отметить непрочитанным":"Прочитано",className:"p-1 rounded hover:bg-emerald-100 dark:hover:bg-emerald-950/40 text-muted-foreground hover:text-emerald-600 disabled:opacity-30",children:(0,d.jsx)(j.A,{className:"h-3 w-3"})}),(0,d.jsx)("button",{type:"button",onClick:()=>{!b&&o(g.filter((a,b)=>b!==c))},disabled:m,"aria-label":"Убрать новость",title:"Убрать",className:"p-1 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]})]},c))})},"link-list":function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,h]=(0,f.useState)(e),[j,k]=(0,f.useTransition)();return((0,f.useRef)(""),0===g.length)?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет ссылок."}):(0,d.jsx)("ul",{className:"space-y-0.5",children:g.map((a,e)=>(0,d.jsxs)("li",{className:"group/row relative",children:[(0,d.jsxs)("a",{href:a.url,target:"_blank",rel:"noopener noreferrer",className:"flex items-start gap-1.5 rounded-md px-2 py-1.5 hover:bg-accent/40 transition",children:[(0,d.jsx)(l,{className:"h-3 w-3 mt-1 shrink-0 text-sky-600"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("div",{className:"text-sm font-medium hover:underline inline-flex items-center gap-1",children:[a.title,(0,d.jsx)(i.A,{className:"h-3 w-3 opacity-50"})]}),a.hint&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5 leading-relaxed",children:a.hint}),(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground truncate font-mono mt-0.5",children:a.url})]})]}),!b&&(0,d.jsx)("button",{type:"button",onClick:()=>(a=>{if(!b){var d;h(d=g.filter((b,c)=>c!==a)),c&&k(async()=>{try{await c({items:d})}catch{}})}})(e),disabled:j,"aria-label":"Удалить ссылку",className:"absolute top-1.5 right-1.5 opacity-0 group-hover/row:opacity-100 transition-opacity p-1 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(m.A,{className:"h-3 w-3"})})]},e))})},kpi:function({data:a}){let b=a.items??[];if(0===b.length)return(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет показателей."});let c=Math.min(b.length,3);return(0,d.jsx)("div",{className:"grid gap-2",style:{gridTemplateColumns:`repeat(${c}, minmax(0,1fr))`},children:b.map((a,b)=>(0,d.jsxs)("div",{className:"rounded-md border bg-card px-3 py-2 flex flex-col gap-0.5",children:[(0,d.jsx)("div",{className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:a.label}),(0,d.jsxs)("div",{className:"flex items-baseline gap-1",children:[(0,d.jsx)("span",{className:"text-lg font-semibold tabular-nums",children:a.value}),"up"===a.delta&&(0,d.jsx)(n,{className:"h-3.5 w-3.5 text-emerald-600"}),"down"===a.delta&&(0,d.jsx)(o,{className:"h-3.5 w-3.5 text-rose-600"}),"flat"===a.delta&&(0,d.jsx)(p.A,{className:"h-3.5 w-3.5 text-muted-foreground"})]}),a.hint&&(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground leading-snug",children:a.hint})]},b))})},checklist:function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,h]=(0,f.useState)(e),[i,k]=(0,f.useTransition)(),[l,n]=(0,f.useState)("");(0,f.useRef)("");let o=a=>{h(a),c&&k(async()=>{try{await c({items:a})}catch{}})},p=a=>{b||o(g.map((b,c)=>c===a?{...b,done:!b.done}:b))};return 0===g.length&&b?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Список пустой."}):(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)("ul",{className:"space-y-0.5",children:g.map((a,c)=>(0,d.jsxs)("li",{className:`group/row flex items-start gap-2 text-sm py-0.5 rounded hover:bg-accent/30 px-1 -mx-1 ${a.done?"text-muted-foreground":""}`,children:[(0,d.jsx)("button",{type:"button",onClick:()=>p(c),disabled:b||i,"aria-label":a.done?"Снять отметку":"Отметить выполненным",className:"shrink-0 mt-0.5 disabled:opacity-50",children:a.done?(0,d.jsx)(j.A,{className:"h-3.5 w-3.5 text-emerald-600"}):(0,d.jsx)(q.A,{className:"h-3.5 w-3.5 text-muted-foreground/60 hover:text-foreground"})}),(0,d.jsx)("span",{className:`flex-1 min-w-0 break-words ${a.done?"line-through":""}`,onClick:()=>p(c),style:b?{}:{cursor:"pointer"},children:a.text}),!b&&(0,d.jsx)("button",{type:"button",onClick:()=>{!b&&o(g.filter((a,b)=>b!==c))},disabled:i,"aria-label":"Удалить пункт",className:"opacity-0 group-hover/row:opacity-100 transition-opacity shrink-0 p-0.5 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(m.A,{className:"h-3 w-3"})})]},c))}),!b&&(0,d.jsxs)("form",{className:"flex items-center gap-1 pt-1",onSubmit:a=>{a.preventDefault(),(()=>{if(b)return;let a=l.trim();a&&(o([...g,{text:a,done:!1}]),n(""))})()},children:[(0,d.jsx)(r.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)(u.p,{value:l,onChange:a=>n(a.target.value),placeholder:"Новый пункт…",className:"h-7 text-xs flex-1 border-0 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 px-1",disabled:i}),l.trim()&&(0,d.jsx)(t.$,{type:"submit",size:"sm",variant:"ghost",className:"h-6 text-[10px] px-1.5",disabled:i,children:i?(0,d.jsx)(s.A,{className:"h-3 w-3 animate-spin"}):"Добавить"})]})]})},quote:function({data:a}){return a?.text?(0,d.jsxs)("figure",{className:"relative pl-6",children:[(0,d.jsx)(v,{className:"h-5 w-5 absolute left-0 top-0 text-violet-300"}),(0,d.jsx)("blockquote",{className:"text-sm italic leading-relaxed",children:a.text}),a.attribution&&(0,d.jsxs)("figcaption",{className:"text-xs text-muted-foreground mt-1.5",children:["— ",a.attribution]})]}):(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Цитата не задана."})},"kb-pinned":function({rootId:a,data:b,readonly:c,onPatch:e}){let g=b.items??[],[h,i]=(0,f.useState)(g),[j,l]=(0,f.useTransition)();return((0,f.useRef)(""),0===h.length)?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет закреплённых файлов."}):(0,d.jsx)("ul",{className:"space-y-1",children:h.map((b,f)=>{let g=b.rel.split("/").map(encodeURIComponent).join("/");return(0,d.jsxs)("li",{className:"group/row relative",children:[(0,d.jsxs)(x(),{href:`/roots/${a}/kb/${g}`,className:"flex items-start gap-2 rounded-md px-2 py-1.5 hover:bg-accent/40 transition pr-7",children:[(0,d.jsx)(y.A,{className:"h-3 w-3 mt-0.5 shrink-0 text-emerald-700"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"text-sm font-medium truncate",children:b.title??b.rel}),b.snippet&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground line-clamp-2 leading-relaxed mt-0.5",children:b.snippet}),(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground font-mono mt-0.5 truncate",children:b.rel})]})]}),!c&&(0,d.jsx)("button",{type:"button",onClick:()=>(a=>{if(!c){var b;i(b=h.filter((b,c)=>c!==a)),e&&l(async()=>{try{await e({items:b})}catch{}})}})(f),disabled:j,"aria-label":"Открепить",title:"Открепить",className:"absolute top-1.5 right-1.5 opacity-0 group-hover/row:opacity-100 transition-opacity p-1 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]},f)})})},progress:function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,h]=(0,f.useState)(e),[i,j]=(0,f.useTransition)();(0,f.useRef)("");let k=(a,d)=>{if(!b){var e;h(e=g.map((b,c)=>c===a?{...b,current:Math.max(0,b.current+d)}:b)),c&&j(async()=>{try{await c({items:e})}catch{}})}};return 0===g.length?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет целей."}):(0,d.jsx)("ul",{className:"space-y-2.5",children:g.map((a,c)=>{let e=a.target>0?Math.max(0,Math.min(100,a.current/a.target*100)):0;return(0,d.jsxs)("li",{className:"space-y-1 group/row",children:[(0,d.jsxs)("div",{className:"flex items-baseline justify-between gap-2 text-sm",children:[(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:a.label}),!b&&(0,d.jsxs)("div",{className:"flex items-center gap-0.5 opacity-0 group-hover/row:opacity-100 transition-opacity shrink-0",children:[(0,d.jsx)("button",{type:"button",onClick:()=>k(c,-1),disabled:i||a.current<=0,"aria-label":"−1",className:"p-0.5 rounded hover:bg-accent text-muted-foreground hover:text-foreground disabled:opacity-30",children:(0,d.jsx)(z,{className:"h-3 w-3"})}),(0,d.jsx)("button",{type:"button",onClick:()=>k(c,1),disabled:i,"aria-label":"+1",className:"p-0.5 rounded hover:bg-accent text-muted-foreground hover:text-foreground disabled:opacity-30",children:(0,d.jsx)(r.A,{className:"h-3 w-3"})})]}),(0,d.jsxs)("span",{className:"text-xs text-muted-foreground tabular-nums shrink-0",children:[a.current," / ",a.target,a.unit?` ${a.unit}`:""]})]}),(0,d.jsx)("div",{className:"h-1.5 rounded-full bg-muted overflow-hidden",children:(0,d.jsx)("div",{className:"h-full bg-violet-600 transition-all",style:{width:`${e}%`}})})]},c)})})},image:function({data:a}){return a?.url?(0,d.jsxs)("figure",{className:"space-y-1",children:[(0,d.jsx)("img",{src:a.url,alt:a.alt??"",className:"rounded-md w-full h-auto border",loading:"lazy"}),a.caption&&(0,d.jsx)("figcaption",{className:"text-xs text-muted-foreground text-center",children:a.caption})]}):(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Картинка не задана."})},"stat-table":function({data:a}){let b=a.rows??[];return 0===b.length?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Таблица пустая."}):(0,d.jsx)("div",{className:"overflow-x-auto -mx-1",children:(0,d.jsxs)("table",{className:"w-full text-sm",children:[a.columns&&a.columns.length>0&&(0,d.jsx)("thead",{children:(0,d.jsx)("tr",{className:"border-b",children:a.columns.map((a,b)=>(0,d.jsx)("th",{className:"text-left text-[10px] uppercase tracking-wider text-muted-foreground font-medium px-1.5 py-1.5",children:a},b))})}),(0,d.jsx)("tbody",{children:b.map((a,b)=>(0,d.jsx)("tr",{className:"border-b border-dashed last:border-b-0 hover:bg-accent/30",children:a.map((a,b)=>(0,d.jsx)("td",{className:"px-1.5 py-1.5 align-top",children:a},b))},b))})]})})},map:function({data:a,readonly:b,onPatch:c}){let e=(0,f.useRef)(null),g=(0,f.useRef)(null),[h,i]=(0,f.useState)(!1),[j,l]=(0,f.useState)(F.JY),[n,o]=(0,f.useState)(""),[p,q]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)([]),z=a.points??[],D=a.route?.stops??[],G=v?x:D,H=(0,f.useMemo)(()=>G.map(a=>z[a]).filter(a=>!!a).map(a=>({lat:a.lat,lng:a.lng})),[G,z]),K=(0,f.useMemo)(()=>F.yp.filter(a=>j.includes(a.id)),[j]);(0,f.useEffect)(()=>{if(!h||!e.current)return;let b=window.L;if(!b||(g.current&&(g.current.remove(),g.current=null),0===z.length))return;let c=b.map(e.current,{scrollWheelZoom:!1,zoomControl:!0});g.current=c,b.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',maxZoom:19}).addTo(c);let d=z.map((a,d)=>{let e=G.includes(d),f=function(a,b){let c=a=>a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),d=b.map(b=>{let d=b.urlFor(a.lat,a.lng);return`<a href="${c(d)}" target="_blank" rel="noopener noreferrer" title="${c(b.label)}" style="display:inline-flex;align-items:center;gap:4px;margin:2px 4px 2px 0;padding:2px 6px;border-radius:5px;border:1px solid #e5e7eb;text-decoration:none;font-size:11px;color:#111;background:#fff;"><span style="display:inline-block;width:14px;height:14px;border-radius:3px;background:${b.brand};color:#fff;font-size:9px;font-weight:700;line-height:14px;text-align:center;letter-spacing:${b.glyph.length>1?"-0.05em":"0"}">${c(b.glyph)}</span><span>${c(b.label)}</span></a>`}).join("");return['<div style="font-family:inherit;min-width:200px">',`<div style="font-weight:600;font-size:13px;margin-bottom:2px">${c(a.title)}</div>`,a.description?`<div style="font-size:12px;color:#666;margin-bottom:6px">${c(a.description)}</div>`:"",`<div style="font-family:monospace;font-size:10px;color:#888;margin-bottom:6px">${a.lat.toFixed(5)}, ${a.lng.toFixed(5)}</div>`,b.length>0?`<div style="font-size:10px;color:#888;text-transform:uppercase;letter-spacing:0.5px;margin-bottom:2px">Открыть в</div>${d}`:"",`<div style="margin-top:6px"><button type="button" data-reflex-copy="${a.lat}, ${a.lng}" style="font-size:11px;padding:2px 8px;border:1px solid #ddd;border-radius:4px;background:#fff;cursor:pointer">📋 Скопировать координаты</button></div>`,"</div>"].filter(Boolean).join("")}(a,K),g=b.marker([a.lat,a.lng],{opacity:v&&!e?.55:1}).addTo(c);return g.bindPopup(f,{maxWidth:280}),g.on("click",()=>{v&&y(a=>a.includes(d)?a.filter(a=>a!==d):[...a,d])}),g});H.length>=2&&b.polyline(H.map(a=>[a.lat,a.lng]),{color:a.route?.color??"#7c3aed",weight:4,opacity:.85,dashArray:v?"6,6":void 0}).addTo(c);let f=a=>{let b=a.target.closest("[data-reflex-copy]");if(b){let c=b.getAttribute("data-reflex-copy");c&&navigator.clipboard.writeText(c).then(()=>E.oR.success("Скопировано")).catch(()=>E.oR.error("Буфер недоступен")),a.preventDefault()}};if(e.current.addEventListener("click",f),a.center&&"number"==typeof a.zoom)c.setView([a.center.lat,a.center.lng],a.zoom);else if(1===z.length)c.setView([z[0].lat,z[0].lng],a.zoom??12);else{let a=b.featureGroup(d);c.fitBounds(a.getBounds().pad(.2))}return()=>{e.current?.removeEventListener("click",f),c.remove(),g.current=null}},[h,a,j.join("|"),v,x.join(",")]);let L=!b&&!!c,M=async()=>{let a=n.trim();if(a){q(!0),u([]);try{let b=`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(a)}&format=json&limit=6`,c=await fetch(b,{headers:{Accept:"application/json"}});if(!c.ok)throw Error(`status ${c.status}`);let d=await c.json();u(d),0===d.length&&E.oR.message("Ничего не найдено")}catch(a){E.oR.error("Поиск не работает: "+(a instanceof Error?a.message:String(a)))}finally{q(!1)}}},N=async b=>{if(!L)return;let d=Number(b.lat),e=Number(b.lon);if(!Number.isFinite(d)||!Number.isFinite(e))return void E.oR.error("Неверные координаты в результате");let f=b.display_name.split(",")[0]?.trim()||b.display_name.slice(0,60),g={...a,points:[...z,{lat:d,lng:e,title:f,description:b.display_name}]};u([]),o(""),await c?.(g)},O=async b=>{if(!L)return;let d=z.filter((a,c)=>c!==b),e=a.route;if(a.route?.stops?.length){let c=a.route.stops.filter(a=>a!==b).map(a=>a>b?a-1:a);e=c.length>=2?{...a.route,stops:c}:void 0}let f={...a,points:d,...e?{route:e}:{route:void 0}};await c?.(f)},P=async()=>{if(!L)return;let b={...a,route:void 0};await c?.(b),w(!1),y([])},Q=async()=>{if(!L)return;if(x.length<2)return void E.oR.error("В маршруте нужно минимум 2 точки");let b={...a,route:{...a.route??{},stops:x}};await c?.(b),w(!1)};return 0!==z.length||L?(0,d.jsxs)("div",{className:"space-y-2",children:[L&&(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,d.jsxs)("div",{className:"relative flex-1",children:[(0,d.jsx)(A.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:"search",value:n,onChange:a=>o(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M())},placeholder:"Найти место (адрес, POI)…",className:"w-full rounded border bg-background pl-7 pr-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-violet-400"})]}),(0,d.jsxs)("button",{type:"button",onClick:()=>void M(),disabled:p||!n.trim(),className:"rounded border px-2 py-1 text-xs hover:bg-accent disabled:opacity-50 inline-flex items-center gap-1",children:[p?(0,d.jsx)(s.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(A.A,{className:"h-3 w-3"}),"Поиск"]}),v?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("button",{type:"button",onClick:()=>void Q(),className:"rounded px-2 py-1 text-xs bg-violet-600 text-white hover:bg-violet-700 inline-flex items-center gap-1",title:"Сохранить маршрут",children:[(0,d.jsx)(B,{className:"h-3 w-3"})," Сохранить"]}),(0,d.jsx)("button",{type:"button",onClick:()=>{w(!1),y([])},className:"rounded border px-2 py-1 text-xs hover:bg-accent inline-flex items-center gap-1",title:"Отменить",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]}):(0,d.jsxs)("button",{type:"button",onClick:()=>{y(D),w(!0)},disabled:z.length<2,className:"rounded border px-2 py-1 text-xs hover:bg-accent disabled:opacity-50 inline-flex items-center gap-1",title:"Собрать маршрут по точкам",children:[(0,d.jsx)(B,{className:"h-3 w-3"}),(D.length,"Маршрут")]})]}),t.length>0&&(0,d.jsx)("ul",{className:"rounded border bg-card divide-y text-xs max-h-44 overflow-y-auto",children:t.map((a,b)=>(0,d.jsx)("li",{children:(0,d.jsxs)("button",{type:"button",onClick:()=>void N(a),className:"w-full text-left flex items-start gap-2 px-2 py-1.5 hover:bg-accent",children:[(0,d.jsx)(r.A,{className:"h-3 w-3 mt-0.5 text-emerald-700 shrink-0"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsx)("span",{className:"block font-medium truncate",children:a.display_name.split(",")[0]}),(0,d.jsx)("span",{className:"block text-[10px] text-muted-foreground truncate",children:a.display_name})]})]})},b))}),v&&(0,d.jsxs)("div",{className:"rounded border border-violet-200 bg-violet-50 dark:bg-violet-950/30 dark:border-violet-900/50 px-2 py-1.5 text-[11px] text-violet-900 dark:text-violet-200",children:["Тыкай точки на карте или в списке ниже — добавятся в маршрут (",(0,d.jsx)("strong",{children:x.length})," уже). Повторный клик — убрать."]})]}),(0,d.jsx)("div",{ref:e,className:"rounded-md border overflow-hidden bg-muted/30",style:{height:280}}),!v&&H.length>=2&&K.length>0&&(0,d.jsx)("div",{className:"rounded border bg-card px-2 py-1.5",children:(0,d.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 text-[11px] font-medium",children:[(0,d.jsx)(B,{className:"h-3 w-3 text-violet-600"}),"Маршрут (",H.length," точки):"]}),K.map(a=>(0,d.jsx)(J,{service:a,stops:H},a.id)),L&&(0,d.jsxs)("button",{type:"button",onClick:()=>void P(),className:"ml-auto text-[10px] text-muted-foreground hover:text-destructive inline-flex items-center gap-0.5",title:"Удалить маршрут",children:[(0,d.jsx)(m.A,{className:"h-3 w-3"}),"Удалить"]})]})}),(0,d.jsx)("ul",{className:"space-y-1",children:z.map((a,b)=>{let c=G.indexOf(b);return(0,d.jsxs)("li",{className:"flex items-start gap-2 rounded-md border bg-card px-2 py-1.5 text-xs "+(v&&c>=0?"ring-1 ring-violet-400 border-violet-300":""),children:[v?(0,d.jsx)("button",{type:"button",onClick:()=>y(a=>a.includes(b)?a.filter(a=>a!==b):[...a,b]),className:"h-5 w-5 mt-0.5 shrink-0 rounded-full border text-[10px] font-mono inline-flex items-center justify-center "+(c>=0?"bg-violet-600 text-white border-violet-600":"bg-card text-muted-foreground"),title:c>=0?"Убрать из маршрута":"Добавить в маршрут",children:c>=0?c+1:"+"}):(0,d.jsx)(C,{className:"h-3 w-3 mt-1 shrink-0 "+(D.includes(b)?"text-violet-600":"text-emerald-700")}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"font-medium truncate",children:a.title}),a.description&&(0,d.jsx)("p",{className:"text-muted-foreground leading-snug mt-0.5 line-clamp-2",children:a.description}),(0,d.jsxs)("div",{className:"text-[10px] text-muted-foreground/80 font-mono mt-0.5",children:[a.lat.toFixed(5),", ",a.lng.toFixed(5)]})]}),(0,d.jsx)(I,{point:a,services:K,interactive:L,onRemove:()=>void O(b)})]},b)})})]}):(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Точек нет — попроси агента добавить через widget-update."})},"utility-card":function({rootId:a,data:b,readonly:c}){let e="project"===b.utilityScope?`/utilities/project/${b.utilityId}?rootId=${encodeURIComponent(a)}`:`/utilities/global/${b.utilityId}`;return(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-muted-foreground",children:[(0,d.jsx)(K.A,{className:"h-3 w-3 text-violet-600"}),(0,d.jsx)("span",{children:"Мини-приложение"}),(0,d.jsx)("span",{className:"font-mono normal-case tracking-normal text-muted-foreground/80",children:b.utilityId}),(0,d.jsxs)(x(),{href:e,className:"ml-auto inline-flex items-center gap-0.5 text-[10px] text-violet-700 hover:underline normal-case tracking-normal",title:"Открыть полную версию",children:["Открыть",(0,d.jsx)(i.A,{className:"h-2.5 w-2.5"})]})]}),b.inner.title&&(0,d.jsx)("h4",{className:"text-sm font-medium",children:b.inner.title}),b.inner.description&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground -mt-1",children:b.inner.description}),(0,d.jsx)("div",{children:M(a,b.inner.kind,b.inner.data,{readonly:!0})})]})}};function M(a,b,c,e){let f=L[b];return f?(0,d.jsx)(f,{rootId:a,data:c,readonly:e?.readonly??!1,onPatch:e?.onPatch}):(0,d.jsxs)("p",{className:"text-xs text-destructive",children:["Неизвестный вид виджета: ",(0,d.jsx)("code",{className:"font-mono",children:b})]})}},85548:(a,b,c)=>{function d(a){return`${a.lat},${a.lng}`}function e(a){return`${a.lng},${a.lat}`}c.d(b,{JY:()=>g,yp:()=>f});let f=[{id:"google",label:"Google Maps",description:"Глобальный, navigation+street view. Работает везде кроме РФ-блокировок.",brand:"#4285F4",glyph:"G",urlFor:(a,b)=>`https://www.google.com/maps/dir/?api=1&destination=${a},${b}`,routeUrlFor:a=>{if(a.length<2)return"";let b=d(a[0]),c=d(a[a.length-1]),e=a.slice(1,-1).map(d).join("|"),f=e?`&waypoints=${encodeURIComponent(e)}`:"";return`https://www.google.com/maps/dir/?api=1&origin=${b}&destination=${c}${f}`}},{id:"yandex",label:"Яндекс.Карты",description:"СНГ, лучшая детализация по РФ и пробки в реальном времени.",brand:"#FFCC00",glyph:"Я",urlFor:(a,b)=>`https://yandex.ru/maps/?rtext=~${a},${b}&rtt=auto`,routeUrlFor:a=>`https://yandex.ru/maps/?rtext=${a.map(d).join("~")}&rtt=auto`},{id:"2gis",label:"2ГИС",description:"СНГ, точные адреса и POI. Уникальная свойственность РФ-городов.",brand:"#1BA049",glyph:"2",urlFor:(a,b)=>`https://2gis.ru/routeSearch/to/${b},${a}`,routeUrlFor:a=>{let b=e(a[0]),c=e(a[a.length-1]),d=a.slice(1,-1).map(a=>`/via/${e(a)}`).join("");return`https://2gis.ru/routeSearch/rsType/car/from/${b}${d}/to/${c}`}},{id:"apple",label:"Apple Maps",description:"Откроется в нативном приложении на iOS/macOS, иначе на сайте.",brand:"#1d1d1f",glyph:"A",urlFor:(a,b)=>`https://maps.apple.com/?daddr=${a},${b}`,routeUrlFor:a=>{let b=d(a[0]),c=a.slice(1).map(a=>`+to:${d(a)}`).join("");return`https://maps.apple.com/?saddr=${b}&daddr=${b}${c}`}},{id:"osm",label:"OpenStreetMap",description:"Открытые данные, без аккаунта. Базовая навигация.",brand:"#7EB73F",glyph:"OSM",urlFor:(a,b)=>`https://www.openstreetmap.org/directions?to=${a},${b}`,routeUrlFor:a=>{let b=a.map(d).join(";");return`https://www.openstreetmap.org/directions?route=${encodeURIComponent(b)}`}},{id:"waze",label:"Waze",description:"Авто-навигация с краудсорсингом пробок и предупреждений.",brand:"#33CCFF",glyph:"W",urlFor:(a,b)=>`https://waze.com/ul?ll=${a},${b}&navigate=yes`,routeUrlFor:a=>{let b=a[a.length-1];return`https://waze.com/ul?ll=${b.lat},${b.lng}&navigate=yes`}},{id:"organic",label:"Organic Maps",description:"Офлайн-карты с открытыми данными. Открывается в приложении.",brand:"#006C35",glyph:"OM",urlFor:(a,b)=>`om://map?ll=${a},${b}`,routeUrlFor:a=>{let b=a[0],c=a[a.length-1];return`om://route?sll=${b.lat},${b.lng}&saddr=&dll=${c.lat},${c.lng}&daddr=&type=vehicle`}}],g=["google","yandex","apple","osm"]}};
|
|
1
|
+
"use strict";exports.id=7800,exports.ids=[7800],exports.modules={30515:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},34639:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Aq:()=>o,KV:()=>u,Mh:()=>s,cl:()=>v,hL:()=>p,mm:()=>t,ru:()=>r,tT:()=>q});var e=c(73745);c(66493);var f=c(65326),g=c(53905),h=c(69509),i=c(1405),j=c(93554),k=c(51021),l=c(63781),m=a([j,k]);async function n(a,b){let c=await (0,h.listWidgets)(a),d=await (0,h.readLayout)(a),e=b(d),f=(0,h.reconcileLayout)(e,c.map(a=>a.id),i.SYSTEM_WIDGET_IDS);return await (0,h.writeLayout)(a,f),{ok:!0,layout:f}}async function o(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({...a,order:b.filter(b=>!a.hidden.includes(b))}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({order:a.order.filter(a=>a!==b),hidden:[...new Set([b,...a.hidden])]}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function q(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await n(c.path,a=>({order:[b,...a.order.filter(a=>a!==b)],hidden:a.hidden.filter(a=>a!==b)}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a,b,c,d){try{let e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};let i=await (0,h.readWidget)(e.path,b);if(!i)return{ok:!1,error:"Widget not found"};if(!c||"object"!=typeof c)return{ok:!1,error:"newData must be an object"};let j={...i,data:c,updatedAt:new Date().toISOString(),...void 0!==d?{memory:d}:{}};return await (0,h.writeWidget)(e.path,j),(0,f.revalidatePath)(`/roots/${a}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function s(a,b,c){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await n(d.path,a=>({...a,sizes:{...a.sizes??{},[b]:c}}));return(0,f.revalidatePath)(`/roots/${a}`),e}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a,b,c){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await (0,h.readWidget)(d.path,b);if(!e)return{ok:!1,error:"Widget not found"};let i={...e,refresh:c};return await (0,h.writeWidget)(d.path,i),(0,f.revalidatePath)(`/roots/${a}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function u(a,b){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await (0,h.readWidget)(d.path,b);if(!e)return{ok:!1,error:"Widget not found"};if(!e.sourceTopicId)return{ok:!1,error:"У виджета нет исходного топика — обнови его сначала из любого чата."};if(j.z.isActive(e.sourceTopicId))return{ok:!1,error:"Исходный топик уже занят агентом — дождись завершения текущего turn'а."};let f={...e,lastRefreshAt:new Date().toISOString()};await (0,h.writeWidget)(d.path,f);let{buildRefreshPromptForWidget:i}=await c.e(4553).then(c.bind(c,94553)),l=await i(d.path,f),m=await (0,k.W)({rootId:a,topicId:e.sourceTopicId,message:l,attachments:[]});if("error"in m)return{ok:!1,error:m.error};return{ok:!0,agentId:m.agentId}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function v(a,b){try{if(i.SYSTEM_WIDGET_IDS.includes(b))return{ok:!1,error:"Системный виджет нельзя удалить — только скрыть."};let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};await (0,h.uv)(c.path,b);let d=await n(c.path,a=>({order:a.order.filter(a=>a!==b),hidden:a.hidden.filter(a=>a!==b)}));return(0,f.revalidatePath)(`/roots/${a}`),d}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[j,k]=m.then?(await m)():m,(0,l.D)([o,p,q,r,s,t,u,v]),(0,e.A)(o,"60afbe9218598a025910716350b7da3d1f25dc8551",null),(0,e.A)(p,"605362b2e26a2d673b1e77eeecd985018e93c84767",null),(0,e.A)(q,"6047726bd627d0fc6fb489e75daf9ce9bae073740c",null),(0,e.A)(r,"7865232a93a5724d9735c8c8d82014d823148c1f13",null),(0,e.A)(s,"7007940b2ad4a7d018bd4fe10ab92fe11356b5c6ab",null),(0,e.A)(t,"7034bda2b43709756a11264aaeafd27c401249a315",null),(0,e.A)(u,"60686b42d43e51bc24e3a97d81e12606a7988f52ef",null),(0,e.A)(v,"60bb023fd42492be923e052af2ff941201b645d49c",null),d()}catch(a){d(a)}})},38731:(a,b,c)=>{c.d(b,{t:()=>e});var d=c(3265);let e=(0,d.createServerReference)("6047726bd627d0fc6fb489e75daf9ce9bae073740c",d.callServer,void 0,d.findSourceMapURL,"restoreWidgetAction")},48272:(a,b,c)=>{c.d(b,{w:()=>f});var d=c(73745);c(66493);var e=c(36017);async function f(){return{ok:!0,enabled:(await (0,e.M)()).mapServices.enabled}}(0,c(63781).D)([f]),(0,d.A)(f,"0099f3760ed967496e564a962f00e8d36f76ebeb17",null)},54874:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]])},62481:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(42557).A)("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]])},67922:(a,b,c)=>{c.d(b,{v:()=>M});var d=c(64173),e=c(56077),f=c(17240),g=c(42557);let h=(0,g.A)("Newspaper",[["path",{d:"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2",key:"7pis2x"}],["path",{d:"M18 14h-8",key:"sponae"}],["path",{d:"M15 18h-5",key:"95g1m2"}],["path",{d:"M10 6h8v4h-8V6Z",key:"smlsk5"}]]);var i=c(65177),j=c(12619),k=c(66979);let l=(0,g.A)("Link",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);var m=c(97338);let n=(0,g.A)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]),o=(0,g.A)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);var p=c(62481),q=c(25436),r=c(30515),s=c(62261),t=c(20583),u=c(47071);let v=(0,g.A)("Quote",[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"rib7q0"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"1ymkrd"}]]);var w=c(1056),x=c.n(w),y=c(68669);let z=(0,g.A)("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);var A=c(65943);let B=(0,g.A)("Route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]),C=(0,g.A)("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);var D=c(28082),E=c(44052),F=c(85548);function G({service:a,size:b=18,className:c}){return(0,d.jsx)("span",{className:"inline-flex items-center justify-center rounded-[5px] font-bold leading-none text-white shrink-0 "+(c??""),style:{background:a.brand,width:b,height:b,fontSize:Math.max(8,Math.floor(.55*b)),letterSpacing:a.glyph.length>1?"-0.05em":"0"},"aria-hidden":!0,children:a.glyph})}var H=c(3265);function I({point:a,services:b,interactive:c,onRemove:e}){return(0,d.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[b.slice(0,4).map(b=>(0,d.jsx)("a",{href:b.urlFor(a.lat,a.lng),target:"_blank",rel:"noopener noreferrer",className:"rounded p-0.5 hover:ring-1 hover:ring-offset-1 hover:ring-violet-300",title:`Маршрут в ${b.label}`,children:(0,d.jsx)(G,{service:b,size:18})},b.id)),(0,d.jsx)("button",{type:"button",onClick:()=>{navigator.clipboard.writeText(`${a.lat}, ${a.lng}`).then(()=>E.oR.success("Координаты скопированы")).catch(()=>E.oR.error("Буфер недоступен"))},className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground",title:"Скопировать координаты",children:(0,d.jsx)(D.A,{className:"h-3 w-3"})}),c&&(0,d.jsx)("button",{type:"button",onClick:e,className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-destructive",title:"Удалить точку",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]})}function J({service:a,stops:b}){let c=a.routeUrlFor(b),e=b=>{b.preventDefault(),b.stopPropagation(),navigator.clipboard.writeText(c).then(()=>E.oR.success(`Ссылка ${a.label} скопирована`)).catch(()=>E.oR.error("Буфер недоступен"))};return(0,d.jsxs)("a",{href:c,target:"_blank",rel:"noopener noreferrer",onContextMenu:e,className:"inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[11px] hover:bg-accent",title:`${a.label} — клик: открыть, правый клик: скопировать ссылку`,children:[(0,d.jsx)(G,{service:a,size:16}),(0,d.jsx)("span",{className:"truncate max-w-[80px]",children:a.label}),(0,d.jsx)("button",{type:"button",onClick:e,className:"text-muted-foreground hover:text-foreground",title:"Скопировать ссылку",children:(0,d.jsx)(D.A,{className:"h-2.5 w-2.5"})})]})}H.callServer,H.findSourceMapURL;var K=c(69552);let L={markdown:function({data:a}){return(0,d.jsx)("div",{className:"text-sm",children:(0,d.jsx)(e.p,{source:a.body??""})})},"news-list":function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,l]=(0,f.useState)(e),[m,n]=(0,f.useTransition)();(0,f.useRef)("");let o=a=>{l(a),c&&n(async()=>{try{await c({items:a})}catch{}})};return 0===g.length?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Список новостей пустой."}):(0,d.jsx)("ul",{className:"space-y-2",children:g.map((a,c)=>(0,d.jsxs)("li",{className:`group/row relative border-l-2 pl-2.5 py-0.5 transition ${a.read?"border-muted-foreground/30 opacity-60":"border-violet-200"}`,children:[(0,d.jsxs)("div",{className:"flex items-start gap-1.5",children:[(0,d.jsx)(h,{className:`h-3 w-3 mt-1 shrink-0 ${a.read?"text-muted-foreground":"text-violet-600"}`}),(0,d.jsxs)("div",{className:"min-w-0 flex-1 pr-12",children:[a.url?(0,d.jsxs)("a",{href:a.url,target:"_blank",rel:"noopener noreferrer",className:"text-sm font-medium hover:underline inline-flex items-center gap-1",children:[a.title,(0,d.jsx)(i.A,{className:"h-3 w-3 opacity-50"})]}):(0,d.jsx)("span",{className:"text-sm font-medium",children:a.title}),a.summary&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5 leading-relaxed",children:a.summary}),(a.source||a.date)&&(0,d.jsxs)("div",{className:"text-[10px] text-muted-foreground mt-0.5 flex gap-1.5",children:[a.source&&(0,d.jsx)("span",{children:a.source}),a.source&&a.date&&(0,d.jsx)("span",{children:"\xb7"}),a.date&&(0,d.jsx)("span",{className:"font-mono",children:a.date})]})]})]}),!b&&(0,d.jsxs)("div",{className:"absolute top-0 right-0 flex items-center gap-0.5 opacity-0 group-hover/row:opacity-100 transition-opacity",children:[(0,d.jsx)("button",{type:"button",onClick:()=>{!b&&o(g.map((a,b)=>b===c?{...a,read:!a.read}:a))},disabled:m,"aria-label":a.read?"Отметить непрочитанным":"Отметить прочитанным",title:a.read?"Отметить непрочитанным":"Прочитано",className:"p-1 rounded hover:bg-emerald-100 dark:hover:bg-emerald-950/40 text-muted-foreground hover:text-emerald-600 disabled:opacity-30",children:(0,d.jsx)(j.A,{className:"h-3 w-3"})}),(0,d.jsx)("button",{type:"button",onClick:()=>{!b&&o(g.filter((a,b)=>b!==c))},disabled:m,"aria-label":"Убрать новость",title:"Убрать",className:"p-1 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]})]},c))})},"link-list":function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,h]=(0,f.useState)(e),[j,k]=(0,f.useTransition)();return((0,f.useRef)(""),0===g.length)?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет ссылок."}):(0,d.jsx)("ul",{className:"space-y-0.5",children:g.map((a,e)=>(0,d.jsxs)("li",{className:"group/row relative",children:[(0,d.jsxs)("a",{href:a.url,target:"_blank",rel:"noopener noreferrer",className:"flex items-start gap-1.5 rounded-md px-2 py-1.5 hover:bg-accent/40 transition",children:[(0,d.jsx)(l,{className:"h-3 w-3 mt-1 shrink-0 text-sky-600"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("div",{className:"text-sm font-medium hover:underline inline-flex items-center gap-1",children:[a.title,(0,d.jsx)(i.A,{className:"h-3 w-3 opacity-50"})]}),a.hint&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5 leading-relaxed",children:a.hint}),(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground truncate font-mono mt-0.5",children:a.url})]})]}),!b&&(0,d.jsx)("button",{type:"button",onClick:()=>(a=>{if(!b){var d;h(d=g.filter((b,c)=>c!==a)),c&&k(async()=>{try{await c({items:d})}catch{}})}})(e),disabled:j,"aria-label":"Удалить ссылку",className:"absolute top-1.5 right-1.5 opacity-0 group-hover/row:opacity-100 transition-opacity p-1 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(m.A,{className:"h-3 w-3"})})]},e))})},kpi:function({data:a}){let b=a.items??[];if(0===b.length)return(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет показателей."});let c=Math.min(b.length,3);return(0,d.jsx)("div",{className:"grid gap-2",style:{gridTemplateColumns:`repeat(${c}, minmax(0,1fr))`},children:b.map((a,b)=>(0,d.jsxs)("div",{className:"rounded-md border bg-card px-3 py-2 flex flex-col gap-0.5",children:[(0,d.jsx)("div",{className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:a.label}),(0,d.jsxs)("div",{className:"flex items-baseline gap-1",children:[(0,d.jsx)("span",{className:"text-lg font-semibold tabular-nums",children:a.value}),"up"===a.delta&&(0,d.jsx)(n,{className:"h-3.5 w-3.5 text-emerald-600"}),"down"===a.delta&&(0,d.jsx)(o,{className:"h-3.5 w-3.5 text-rose-600"}),"flat"===a.delta&&(0,d.jsx)(p.A,{className:"h-3.5 w-3.5 text-muted-foreground"})]}),a.hint&&(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground leading-snug",children:a.hint})]},b))})},checklist:function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,h]=(0,f.useState)(e),[i,k]=(0,f.useTransition)(),[l,n]=(0,f.useState)("");(0,f.useRef)("");let o=a=>{h(a),c&&k(async()=>{try{await c({items:a})}catch{}})},p=a=>{b||o(g.map((b,c)=>c===a?{...b,done:!b.done}:b))};return 0===g.length&&b?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Список пустой."}):(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)("ul",{className:"space-y-0.5",children:g.map((a,c)=>(0,d.jsxs)("li",{className:`group/row flex items-start gap-2 text-sm py-0.5 rounded hover:bg-accent/30 px-1 -mx-1 ${a.done?"text-muted-foreground":""}`,children:[(0,d.jsx)("button",{type:"button",onClick:()=>p(c),disabled:b||i,"aria-label":a.done?"Снять отметку":"Отметить выполненным",className:"shrink-0 mt-0.5 disabled:opacity-50",children:a.done?(0,d.jsx)(j.A,{className:"h-3.5 w-3.5 text-emerald-600"}):(0,d.jsx)(q.A,{className:"h-3.5 w-3.5 text-muted-foreground/60 hover:text-foreground"})}),(0,d.jsx)("span",{className:`flex-1 min-w-0 break-words ${a.done?"line-through":""}`,onClick:()=>p(c),style:b?{}:{cursor:"pointer"},children:a.text}),!b&&(0,d.jsx)("button",{type:"button",onClick:()=>{!b&&o(g.filter((a,b)=>b!==c))},disabled:i,"aria-label":"Удалить пункт",className:"opacity-0 group-hover/row:opacity-100 transition-opacity shrink-0 p-0.5 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(m.A,{className:"h-3 w-3"})})]},c))}),!b&&(0,d.jsxs)("form",{className:"flex items-center gap-1 pt-1",onSubmit:a=>{a.preventDefault(),(()=>{if(b)return;let a=l.trim();a&&(o([...g,{text:a,done:!1}]),n(""))})()},children:[(0,d.jsx)(r.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)(u.p,{value:l,onChange:a=>n(a.target.value),placeholder:"Новый пункт…",className:"h-7 text-xs flex-1 border-0 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 px-1",disabled:i}),l.trim()&&(0,d.jsx)(t.$,{type:"submit",size:"sm",variant:"ghost",className:"h-6 text-[10px] px-1.5",disabled:i,children:i?(0,d.jsx)(s.A,{className:"h-3 w-3 animate-spin"}):"Добавить"})]})]})},quote:function({data:a}){return a?.text?(0,d.jsxs)("figure",{className:"relative pl-6",children:[(0,d.jsx)(v,{className:"h-5 w-5 absolute left-0 top-0 text-violet-300"}),(0,d.jsx)("blockquote",{className:"text-sm italic leading-relaxed",children:a.text}),a.attribution&&(0,d.jsxs)("figcaption",{className:"text-xs text-muted-foreground mt-1.5",children:["— ",a.attribution]})]}):(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Цитата не задана."})},"kb-pinned":function({rootId:a,data:b,readonly:c,onPatch:e}){let g=b.items??[],[h,i]=(0,f.useState)(g),[j,l]=(0,f.useTransition)();return((0,f.useRef)(""),0===h.length)?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет закреплённых файлов."}):(0,d.jsx)("ul",{className:"space-y-1",children:h.map((b,f)=>{let g=b.rel.split("/").map(encodeURIComponent).join("/");return(0,d.jsxs)("li",{className:"group/row relative",children:[(0,d.jsxs)(x(),{href:`/roots/${a}/kb/${g}`,className:"flex items-start gap-2 rounded-md px-2 py-1.5 hover:bg-accent/40 transition pr-7",children:[(0,d.jsx)(y.A,{className:"h-3 w-3 mt-0.5 shrink-0 text-emerald-700"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"text-sm font-medium truncate",children:b.title??b.rel}),b.snippet&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground line-clamp-2 leading-relaxed mt-0.5",children:b.snippet}),(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground font-mono mt-0.5 truncate",children:b.rel})]})]}),!c&&(0,d.jsx)("button",{type:"button",onClick:()=>(a=>{if(!c){var b;i(b=h.filter((b,c)=>c!==a)),e&&l(async()=>{try{await e({items:b})}catch{}})}})(f),disabled:j,"aria-label":"Открепить",title:"Открепить",className:"absolute top-1.5 right-1.5 opacity-0 group-hover/row:opacity-100 transition-opacity p-1 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive disabled:opacity-30",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]},f)})})},progress:function({data:a,readonly:b,onPatch:c}){let e=a.items??[],[g,h]=(0,f.useState)(e),[i,j]=(0,f.useTransition)();(0,f.useRef)("");let k=(a,d)=>{if(!b){var e;h(e=g.map((b,c)=>c===a?{...b,current:Math.max(0,b.current+d)}:b)),c&&j(async()=>{try{await c({items:e})}catch{}})}};return 0===g.length?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Нет целей."}):(0,d.jsx)("ul",{className:"space-y-2.5",children:g.map((a,c)=>{let e=a.target>0?Math.max(0,Math.min(100,a.current/a.target*100)):0;return(0,d.jsxs)("li",{className:"space-y-1 group/row",children:[(0,d.jsxs)("div",{className:"flex items-baseline justify-between gap-2 text-sm",children:[(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:a.label}),!b&&(0,d.jsxs)("div",{className:"flex items-center gap-0.5 opacity-0 group-hover/row:opacity-100 transition-opacity shrink-0",children:[(0,d.jsx)("button",{type:"button",onClick:()=>k(c,-1),disabled:i||a.current<=0,"aria-label":"−1",className:"p-0.5 rounded hover:bg-accent text-muted-foreground hover:text-foreground disabled:opacity-30",children:(0,d.jsx)(z,{className:"h-3 w-3"})}),(0,d.jsx)("button",{type:"button",onClick:()=>k(c,1),disabled:i,"aria-label":"+1",className:"p-0.5 rounded hover:bg-accent text-muted-foreground hover:text-foreground disabled:opacity-30",children:(0,d.jsx)(r.A,{className:"h-3 w-3"})})]}),(0,d.jsxs)("span",{className:"text-xs text-muted-foreground tabular-nums shrink-0",children:[a.current," / ",a.target,a.unit?` ${a.unit}`:""]})]}),(0,d.jsx)("div",{className:"h-1.5 rounded-full bg-muted overflow-hidden",children:(0,d.jsx)("div",{className:"h-full bg-violet-600 transition-all",style:{width:`${e}%`}})})]},c)})})},image:function({data:a}){return a?.url?(0,d.jsxs)("figure",{className:"space-y-1",children:[(0,d.jsx)("img",{src:a.url,alt:a.alt??"",className:"rounded-md w-full h-auto border",loading:"lazy"}),a.caption&&(0,d.jsx)("figcaption",{className:"text-xs text-muted-foreground text-center",children:a.caption})]}):(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Картинка не задана."})},"stat-table":function({data:a}){let b=a.rows??[];return 0===b.length?(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Таблица пустая."}):(0,d.jsx)("div",{className:"overflow-x-auto -mx-1",children:(0,d.jsxs)("table",{className:"w-full text-sm",children:[a.columns&&a.columns.length>0&&(0,d.jsx)("thead",{children:(0,d.jsx)("tr",{className:"border-b",children:a.columns.map((a,b)=>(0,d.jsx)("th",{className:"text-left text-[10px] uppercase tracking-wider text-muted-foreground font-medium px-1.5 py-1.5",children:a},b))})}),(0,d.jsx)("tbody",{children:b.map((a,b)=>(0,d.jsx)("tr",{className:"border-b border-dashed last:border-b-0 hover:bg-accent/30",children:a.map((a,b)=>(0,d.jsx)("td",{className:"px-1.5 py-1.5 align-top",children:a},b))},b))})]})})},map:function({data:a,readonly:b,onPatch:c}){let e=(0,f.useRef)(null),g=(0,f.useRef)(null),[h,i]=(0,f.useState)(!1),[j,l]=(0,f.useState)(F.JY),[n,o]=(0,f.useState)(""),[p,q]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)([]),z=a.points??[],D=a.route?.stops??[],G=v?x:D,H=(0,f.useMemo)(()=>G.map(a=>z[a]).filter(a=>!!a).map(a=>({lat:a.lat,lng:a.lng})),[G,z]),K=(0,f.useMemo)(()=>F.yp.filter(a=>j.includes(a.id)),[j]);(0,f.useEffect)(()=>{if(!h||!e.current)return;let b=window.L;if(!b||(g.current&&(g.current.remove(),g.current=null),0===z.length))return;let c=b.map(e.current,{scrollWheelZoom:!1,zoomControl:!0});g.current=c,b.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',maxZoom:19}).addTo(c);let d=z.map((a,d)=>{let e=G.includes(d),f=function(a,b){let c=a=>a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),d=b.map(b=>{let d=b.urlFor(a.lat,a.lng);return`<a href="${c(d)}" target="_blank" rel="noopener noreferrer" title="${c(b.label)}" style="display:inline-flex;align-items:center;gap:4px;margin:2px 4px 2px 0;padding:2px 6px;border-radius:5px;border:1px solid #e5e7eb;text-decoration:none;font-size:11px;color:#111;background:#fff;"><span style="display:inline-block;width:14px;height:14px;border-radius:3px;background:${b.brand};color:#fff;font-size:9px;font-weight:700;line-height:14px;text-align:center;letter-spacing:${b.glyph.length>1?"-0.05em":"0"}">${c(b.glyph)}</span><span>${c(b.label)}</span></a>`}).join("");return['<div style="font-family:inherit;min-width:200px">',`<div style="font-weight:600;font-size:13px;margin-bottom:2px">${c(a.title)}</div>`,a.description?`<div style="font-size:12px;color:#666;margin-bottom:6px">${c(a.description)}</div>`:"",`<div style="font-family:monospace;font-size:10px;color:#888;margin-bottom:6px">${a.lat.toFixed(5)}, ${a.lng.toFixed(5)}</div>`,b.length>0?`<div style="font-size:10px;color:#888;text-transform:uppercase;letter-spacing:0.5px;margin-bottom:2px">Открыть в</div>${d}`:"",`<div style="margin-top:6px"><button type="button" data-reflex-copy="${a.lat}, ${a.lng}" style="font-size:11px;padding:2px 8px;border:1px solid #ddd;border-radius:4px;background:#fff;cursor:pointer">📋 Скопировать координаты</button></div>`,"</div>"].filter(Boolean).join("")}(a,K),g=b.marker([a.lat,a.lng],{opacity:v&&!e?.55:1}).addTo(c);return g.bindPopup(f,{maxWidth:280}),g.on("click",()=>{v&&y(a=>a.includes(d)?a.filter(a=>a!==d):[...a,d])}),g});H.length>=2&&b.polyline(H.map(a=>[a.lat,a.lng]),{color:a.route?.color??"#7c3aed",weight:4,opacity:.85,dashArray:v?"6,6":void 0}).addTo(c);let f=a=>{let b=a.target.closest("[data-reflex-copy]");if(b){let c=b.getAttribute("data-reflex-copy");c&&navigator.clipboard.writeText(c).then(()=>E.oR.success("Скопировано")).catch(()=>E.oR.error("Буфер недоступен")),a.preventDefault()}};if(e.current.addEventListener("click",f),a.center&&"number"==typeof a.zoom)c.setView([a.center.lat,a.center.lng],a.zoom);else if(1===z.length)c.setView([z[0].lat,z[0].lng],a.zoom??12);else{let a=b.featureGroup(d);c.fitBounds(a.getBounds().pad(.2))}return()=>{e.current?.removeEventListener("click",f),c.remove(),g.current=null}},[h,a,j.join("|"),v,x.join(",")]);let L=!b&&!!c,M=async()=>{let a=n.trim();if(a){q(!0),u([]);try{let b=`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(a)}&format=json&limit=6`,c=await fetch(b,{headers:{Accept:"application/json"}});if(!c.ok)throw Error(`status ${c.status}`);let d=await c.json();u(d),0===d.length&&E.oR.message("Ничего не найдено")}catch(a){E.oR.error("Поиск не работает: "+(a instanceof Error?a.message:String(a)))}finally{q(!1)}}},N=async b=>{if(!L)return;let d=Number(b.lat),e=Number(b.lon);if(!Number.isFinite(d)||!Number.isFinite(e))return void E.oR.error("Неверные координаты в результате");let f=b.display_name.split(",")[0]?.trim()||b.display_name.slice(0,60),g={...a,points:[...z,{lat:d,lng:e,title:f,description:b.display_name}]};u([]),o(""),await c?.(g)},O=async b=>{if(!L)return;let d=z.filter((a,c)=>c!==b),e=a.route;if(a.route?.stops?.length){let c=a.route.stops.filter(a=>a!==b).map(a=>a>b?a-1:a);e=c.length>=2?{...a.route,stops:c}:void 0}let f={...a,points:d,...e?{route:e}:{route:void 0}};await c?.(f)},P=async()=>{if(!L)return;let b={...a,route:void 0};await c?.(b),w(!1),y([])},Q=async()=>{if(!L)return;if(x.length<2)return void E.oR.error("В маршруте нужно минимум 2 точки");let b={...a,route:{...a.route??{},stops:x}};await c?.(b),w(!1)};return 0!==z.length||L?(0,d.jsxs)("div",{className:"space-y-2",children:[L&&(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,d.jsxs)("div",{className:"relative flex-1",children:[(0,d.jsx)(A.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:"search",value:n,onChange:a=>o(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M())},placeholder:"Найти место (адрес, POI)…",className:"w-full rounded border bg-background pl-7 pr-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-violet-400"})]}),(0,d.jsxs)("button",{type:"button",onClick:()=>void M(),disabled:p||!n.trim(),className:"rounded border px-2 py-1 text-xs hover:bg-accent disabled:opacity-50 inline-flex items-center gap-1",children:[p?(0,d.jsx)(s.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(A.A,{className:"h-3 w-3"}),"Поиск"]}),v?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("button",{type:"button",onClick:()=>void Q(),className:"rounded px-2 py-1 text-xs bg-violet-600 text-white hover:bg-violet-700 inline-flex items-center gap-1",title:"Сохранить маршрут",children:[(0,d.jsx)(B,{className:"h-3 w-3"})," Сохранить"]}),(0,d.jsx)("button",{type:"button",onClick:()=>{w(!1),y([])},className:"rounded border px-2 py-1 text-xs hover:bg-accent inline-flex items-center gap-1",title:"Отменить",children:(0,d.jsx)(k.A,{className:"h-3 w-3"})})]}):(0,d.jsxs)("button",{type:"button",onClick:()=>{y(D),w(!0)},disabled:z.length<2,className:"rounded border px-2 py-1 text-xs hover:bg-accent disabled:opacity-50 inline-flex items-center gap-1",title:"Собрать маршрут по точкам",children:[(0,d.jsx)(B,{className:"h-3 w-3"}),(D.length,"Маршрут")]})]}),t.length>0&&(0,d.jsx)("ul",{className:"rounded border bg-card divide-y text-xs max-h-44 overflow-y-auto",children:t.map((a,b)=>(0,d.jsx)("li",{children:(0,d.jsxs)("button",{type:"button",onClick:()=>void N(a),className:"w-full text-left flex items-start gap-2 px-2 py-1.5 hover:bg-accent",children:[(0,d.jsx)(r.A,{className:"h-3 w-3 mt-0.5 text-emerald-700 shrink-0"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsx)("span",{className:"block font-medium truncate",children:a.display_name.split(",")[0]}),(0,d.jsx)("span",{className:"block text-[10px] text-muted-foreground truncate",children:a.display_name})]})]})},b))}),v&&(0,d.jsxs)("div",{className:"rounded border border-violet-200 bg-violet-50 dark:bg-violet-950/30 dark:border-violet-900/50 px-2 py-1.5 text-[11px] text-violet-900 dark:text-violet-200",children:["Тыкай точки на карте или в списке ниже — добавятся в маршрут (",(0,d.jsx)("strong",{children:x.length})," уже). Повторный клик — убрать."]})]}),(0,d.jsx)("div",{ref:e,className:"rounded-md border overflow-hidden bg-muted/30",style:{height:280}}),!v&&H.length>=2&&K.length>0&&(0,d.jsx)("div",{className:"rounded border bg-card px-2 py-1.5",children:(0,d.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 text-[11px] font-medium",children:[(0,d.jsx)(B,{className:"h-3 w-3 text-violet-600"}),"Маршрут (",H.length," точки):"]}),K.map(a=>(0,d.jsx)(J,{service:a,stops:H},a.id)),L&&(0,d.jsxs)("button",{type:"button",onClick:()=>void P(),className:"ml-auto text-[10px] text-muted-foreground hover:text-destructive inline-flex items-center gap-0.5",title:"Удалить маршрут",children:[(0,d.jsx)(m.A,{className:"h-3 w-3"}),"Удалить"]})]})}),(0,d.jsx)("ul",{className:"space-y-1",children:z.map((a,b)=>{let c=G.indexOf(b);return(0,d.jsxs)("li",{className:"flex items-start gap-2 rounded-md border bg-card px-2 py-1.5 text-xs "+(v&&c>=0?"ring-1 ring-violet-400 border-violet-300":""),children:[v?(0,d.jsx)("button",{type:"button",onClick:()=>y(a=>a.includes(b)?a.filter(a=>a!==b):[...a,b]),className:"h-5 w-5 mt-0.5 shrink-0 rounded-full border text-[10px] font-mono inline-flex items-center justify-center "+(c>=0?"bg-violet-600 text-white border-violet-600":"bg-card text-muted-foreground"),title:c>=0?"Убрать из маршрута":"Добавить в маршрут",children:c>=0?c+1:"+"}):(0,d.jsx)(C,{className:"h-3 w-3 mt-1 shrink-0 "+(D.includes(b)?"text-violet-600":"text-emerald-700")}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"font-medium truncate",children:a.title}),a.description&&(0,d.jsx)("p",{className:"text-muted-foreground leading-snug mt-0.5 line-clamp-2",children:a.description}),(0,d.jsxs)("div",{className:"text-[10px] text-muted-foreground/80 font-mono mt-0.5",children:[a.lat.toFixed(5),", ",a.lng.toFixed(5)]})]}),(0,d.jsx)(I,{point:a,services:K,interactive:L,onRemove:()=>void O(b)})]},b)})})]}):(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:"Точек нет — попроси агента добавить через widget-update."})},"utility-card":function({rootId:a,data:b,readonly:c}){let e="project"===b.utilityScope?`/utilities/project/${b.utilityId}?rootId=${encodeURIComponent(a)}`:`/utilities/global/${b.utilityId}`;return(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-muted-foreground",children:[(0,d.jsx)(K.A,{className:"h-3 w-3 text-violet-600"}),(0,d.jsx)("span",{children:"Мини-приложение"}),(0,d.jsx)("span",{className:"font-mono normal-case tracking-normal text-muted-foreground/80",children:b.utilityId}),(0,d.jsxs)(x(),{href:e,className:"ml-auto inline-flex items-center gap-0.5 text-[10px] text-violet-700 hover:underline normal-case tracking-normal",title:"Открыть полную версию",children:["Открыть",(0,d.jsx)(i.A,{className:"h-2.5 w-2.5"})]})]}),b.inner.title&&(0,d.jsx)("h4",{className:"text-sm font-medium",children:b.inner.title}),b.inner.description&&(0,d.jsx)("p",{className:"text-xs text-muted-foreground -mt-1",children:b.inner.description}),(0,d.jsx)("div",{children:M(a,b.inner.kind,b.inner.data,{readonly:!0})})]})}};function M(a,b,c,e){let f=L[b];return f?(0,d.jsx)(f,{rootId:a,data:c,readonly:e?.readonly??!1,onPatch:e?.onPatch}):(0,d.jsxs)("p",{className:"text-xs text-destructive",children:["Неизвестный вид виджета: ",(0,d.jsx)("code",{className:"font-mono",children:b})]})}},85548:(a,b,c)=>{function d(a){return`${a.lat},${a.lng}`}function e(a){return`${a.lng},${a.lat}`}c.d(b,{JY:()=>g,yp:()=>f});let f=[{id:"google",label:"Google Maps",description:"Глобальный, navigation+street view. Работает везде кроме РФ-блокировок.",brand:"#4285F4",glyph:"G",urlFor:(a,b)=>`https://www.google.com/maps/dir/?api=1&destination=${a},${b}`,routeUrlFor:a=>{if(a.length<2)return"";let b=d(a[0]),c=d(a[a.length-1]),e=a.slice(1,-1).map(d).join("|"),f=e?`&waypoints=${encodeURIComponent(e)}`:"";return`https://www.google.com/maps/dir/?api=1&origin=${b}&destination=${c}${f}`}},{id:"yandex",label:"Яндекс.Карты",description:"СНГ, лучшая детализация по РФ и пробки в реальном времени.",brand:"#FFCC00",glyph:"Я",urlFor:(a,b)=>`https://yandex.ru/maps/?rtext=~${a},${b}&rtt=auto`,routeUrlFor:a=>`https://yandex.ru/maps/?rtext=${a.map(d).join("~")}&rtt=auto`},{id:"2gis",label:"2ГИС",description:"СНГ, точные адреса и POI. Уникальная свойственность РФ-городов.",brand:"#1BA049",glyph:"2",urlFor:(a,b)=>`https://2gis.ru/routeSearch/to/${b},${a}`,routeUrlFor:a=>{let b=e(a[0]),c=e(a[a.length-1]),d=a.slice(1,-1).map(a=>`/via/${e(a)}`).join("");return`https://2gis.ru/routeSearch/rsType/car/from/${b}${d}/to/${c}`}},{id:"apple",label:"Apple Maps",description:"Откроется в нативном приложении на iOS/macOS, иначе на сайте.",brand:"#1d1d1f",glyph:"A",urlFor:(a,b)=>`https://maps.apple.com/?daddr=${a},${b}`,routeUrlFor:a=>{let b=d(a[0]),c=a.slice(1).map(a=>`+to:${d(a)}`).join("");return`https://maps.apple.com/?saddr=${b}&daddr=${b}${c}`}},{id:"osm",label:"OpenStreetMap",description:"Открытые данные, без аккаунта. Базовая навигация.",brand:"#7EB73F",glyph:"OSM",urlFor:(a,b)=>`https://www.openstreetmap.org/directions?to=${a},${b}`,routeUrlFor:a=>{let b=a.map(d).join(";");return`https://www.openstreetmap.org/directions?route=${encodeURIComponent(b)}`}},{id:"waze",label:"Waze",description:"Авто-навигация с краудсорсингом пробок и предупреждений.",brand:"#33CCFF",glyph:"W",urlFor:(a,b)=>`https://waze.com/ul?ll=${a},${b}&navigate=yes`,routeUrlFor:a=>{let b=a[a.length-1];return`https://waze.com/ul?ll=${b.lat},${b.lng}&navigate=yes`}},{id:"organic",label:"Organic Maps",description:"Офлайн-карты с открытыми данными. Открывается в приложении.",brand:"#006C35",glyph:"OM",urlFor:(a,b)=>`om://map?ll=${a},${b}`,routeUrlFor:a=>{let b=a[0],c=a[a.length-1];return`om://route?sll=${b.lat},${b.lng}&saddr=&dll=${c.lat},${c.lng}&daddr=&type=vehicle`}}],g=["google","yandex","apple","osm"]}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=8494,exports.ids=[8494],exports.modules={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"}]])},78494:(a,b,c)=>{c.d(b,{UtilityIframe:()=>r});var d=c(64173),e=c(17240),f=c(53186),g=c(65177),h=c(66979),i=c(69552),j=c(62261),k=c(73569),l=c(1056),m=c.n(l),n=c(44052),o=c(3265);function p({scope:a,utilityId:b,utilityName:c,rootId:l,requestSnapshot:o,onClose:p}){let[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)([]),[v,w]=(0,e.useState)(""),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useTransition)(),[B,C]=(0,e.useState)(!1),D=(0,e.useRef)(null);(0,e.useRef)(null),(0,e.useRef)("");let[E,F]=(0,e.useState)(""),G=()=>{let a=v.trim();a&&l&&r&&(w(""),u(b=>[...b,{role:"user",text:a,ts:new Date().toISOString()}]),A(async()=>{let b;try{b=await Promise.race([o(),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]"),["[Контекст мини-приложения]",c,"[/контекст]\n",a].join("\n")}(a,b):a;try{let a=await fetch(`/api/roots/${l}/chat/${r}/send`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:c})});if(!a.ok){let b=await a.json().catch(()=>({}));n.oR.error(b.error??`HTTP ${a.status}`)}}catch(a){n.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:"Помощник"}),(0,d.jsx)("span",{className:"text-[10px] text-muted-foreground ml-1",children:"знает контекст этого приложения"}),l&&r&&(0,d.jsx)(m(),{href:`/roots/${l}/chat/${r}`,className:"ml-auto p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground",title:"Открыть в полном чате",children:(0,d.jsx)(g.A,{className:"h-3.5 w-3.5"})}),p&&(0,d.jsx)("button",{type:"button",onClick:p,className:"p-1 rounded hover:bg-accent "+(l&&r?"":"ml-auto"),title:"Скрыть",children:(0,d.jsx)(h.A,{className:"h-3.5 w-3.5"})})]}),(0,d.jsxs)("div",{ref:D,className:"flex-1 overflow-y-auto px-3 py-2 space-y-2 text-sm",children:[x&&(0,d.jsx)("p",{className:"text-xs text-red-600",children:x}),!x&&0===t.length&&!E&&(0,d.jsxs)("div",{className:"text-xs text-muted-foreground flex items-start gap-2",children:[(0,d.jsx)(i.A,{className:"h-3 w-3 mt-0.5 text-violet-600 shrink-0"}),(0,d.jsx)("span",{children:"Спроси что-нибудь про данные этого мини-приложения. Диалог сохраняется как обычный разговор — можно открыть полностью по иконке в углу."})]}),t.map((a,b)=>(0,d.jsx)(q,{role:a.role,text:a.text},b)),B&&E&&(0,d.jsx)(q,{role:"assistant",text:E,streaming:!0}),z&&!B&&(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)(j.A,{className:"h-3 w-3 animate-spin"}),"Reflex думает…"]})]}),(0,d.jsxs)("div",{className:"border-t px-3 py-2 flex items-end gap-1.5",children:[(0,d.jsx)("textarea",{value:v,onChange:a=>w(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.metaKey||a.ctrlKey)&&(a.preventDefault(),G())},rows:1,placeholder:"Спроси (⌘↵)…",disabled:z||!!x||!r,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:G,disabled:z||!v.trim()||!!x||!r,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:z?(0,d.jsx)(j.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(k.A,{className:"h-3 w-3"})})]})]})}function q({role:a,text:b,streaming:c}){let e=b;return("user"===a&&(e=e.replace(/^\s*\[Контекст мини-приложения\][\s\S]*?\[\/контекст\]\s*/,"").trim()),e.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:["user"===a?"Ты":"assistant"===a?"Reflex":"Система",c&&(0,d.jsx)("span",{className:"ml-1 text-violet-600",children:"●"})]}),e]}):null}function r({scope:a,id:b,rootId:c,className:g,title:h,agentChat:i,utilityName:j}){let k=(0,e.useRef)(null),l=(0,e.useRef)(null),[m,n]=(0,e.useState)(!0),o=c?`?rootId=${encodeURIComponent(c)}`:"",q=`/api/utilities/${a}/${b}/iframe${o}`,r=(0,d.jsx)("iframe",{ref:k,src:q,sandbox:"allow-scripts allow-forms allow-same-origin",className:g??"h-full w-full border-0 bg-white",title:h??`utility-${b}`});return i?(0,d.jsxs)("div",{className:"flex h-full w-full",children:[(0,d.jsxs)("div",{className:"flex-1 min-w-0 relative",children:[r,!m&&(0,d.jsxs)("button",{type:"button",onClick:()=>n(!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:"Открыть помощника",children:[(0,d.jsx)(f.A,{className:"h-3.5 w-3.5"}),"Помощник"]})]}),m&&(0,d.jsx)("div",{className:"w-80 shrink-0",children:(0,d.jsx)(p,{scope:a,utilityId:b,...j?{utilityName:j}:{},...c?{rootId:c}:{},requestSnapshot:()=>{let a=k.current?.contentWindow;return a?(l.current&&(clearTimeout(l.current.timer),l.current.resolve(void 0),l.current=null),new Promise(b=>{let c=setTimeout(()=>{l.current?.resolve===b&&(l.current=null,b(void 0))},500);l.current={resolve:b,timer:c};try{a.postMessage({type:"request-snapshot"},"*")}catch{clearTimeout(c),l.current=null,b(void 0)}})):Promise.resolve(void 0)},onClose:()=>n(!1)})})]}):r}o.callServer,o.findSourceMapURL,o.callServer,o.findSourceMapURL}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=8514,exports.ids=[8514],exports.modules={28514:(a,b,c)=>{c.d(b,{J8:()=>
|
|
1
|
+
"use strict";exports.id=8514,exports.ids=[8514],exports.modules={28514:(a,b,c)=>{c.d(b,{J8:()=>q,Pq:()=>n,e3:()=>o,getSecret:()=>m,listSecretKeys:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c(73652);let i=f().join((0,h._)(),"secrets");function j(a,b,c){return f().join(i,a,function(a,b){if("global"===a)return"_";if(!b)throw Error("project-scope secrets require rootId");return/^[a-f0-9]{8,64}$/.test(b)?b:(0,g.createHash)("sha1").update(b).digest("hex").slice(0,16)}(a,c),`${b}.json`)}async function k(a){try{let b=await d.promises.readFile(a,"utf8"),c=JSON.parse(b);if(1!==c.version||!c.values||"object"!=typeof c.values)return{version:1,values:{}};return{version:1,values:c.values}}catch{return{version:1,values:{}}}}async function l(a,b){await d.promises.mkdir(f().dirname(a),{recursive:!0}),await d.promises.writeFile(a,JSON.stringify(b,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(a,384)}catch{}}async function m(a,b,c,d){let e=await k(j(a,b,d));return Object.prototype.hasOwnProperty.call(e.values,c)?e.values[c]:null}async function n(a,b,c,d,e){let f=j(a,b,e),g=await k(f);g.values[c]=d,await l(f,g)}async function o(a,b,c,d){let e=j(a,b,d),f=await k(e);c in f.values&&(delete f.values[c],await l(e,f))}async function p(a,b,c){return Object.keys((await k(j(a,b,c))).values).sort()}async function q(a,b,c){let e=j(a,b,c);try{await d.promises.unlink(e)}catch{}}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=9098,exports.ids=[9098],exports.modules={39098:(a,b,c)=>{c.d(b,{O1:()=>p,Gh:()=>q,AZ:()=>o,rD:()=>r,summarizeYoutubeAction:()=>n});var d=c(73745);c(66493);var e=c(70333);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(36017);async function n(a){var b;let c=await (0,e.CG)("gemini");if(!c)return{ok:!1,needsKey:!0,error:"Gemini API key не сохранён — введи его, чтобы суммаризировать видео."};let d=(await (0,m.M)()).language??"russian",f=a.prompt?.trim()||(b=d,/russ/i.test(b)||/рус/i.test(b)?"Сделай структурированную выжимку этого YouTube-видео:\n\n1. Один абзац — о чём видео целиком и для кого.\n2. Главные тезисы списком с тайм-кодами вида `[mm:ss]`.\n3. Ключевые цитаты (если есть запоминающиеся фразы) — с тайм-кодами.\n4. Если показаны диаграммы / схемы / код — кратко опиши что в них.\n5. Вывод 1-3 предложения: главное, что стоит унести.\n\nПиши на русском, лаконично. Без воды.":"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 вернул пустой ответ — возможно видео недоступно или приватное."};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(63781).D)([n,o,p,q,r]),(0,d.A)(n,"
|
|
1
|
+
"use strict";exports.id=9098,exports.ids=[9098],exports.modules={39098:(a,b,c)=>{c.d(b,{O1:()=>p,Gh:()=>q,AZ:()=>o,rD:()=>r,summarizeYoutubeAction:()=>n});var d=c(73745);c(66493);var e=c(70333);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(36017);async function n(a){var b;let c=await (0,e.CG)("gemini");if(!c)return{ok:!1,needsKey:!0,error:"Gemini API key не сохранён — введи его, чтобы суммаризировать видео."};let d=(await (0,m.M)()).language??"russian",f=a.prompt?.trim()||(b=d,/russ/i.test(b)||/рус/i.test(b)?"Сделай структурированную выжимку этого YouTube-видео:\n\n1. Один абзац — о чём видео целиком и для кого.\n2. Главные тезисы списком с тайм-кодами вида `[mm:ss]`.\n3. Ключевые цитаты (если есть запоминающиеся фразы) — с тайм-кодами.\n4. Если показаны диаграммы / схемы / код — кратко опиши что в них.\n5. Вывод 1-3 предложения: главное, что стоит унести.\n\nПиши на русском, лаконично. Без воды.":"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 вернул пустой ответ — возможно видео недоступно или приватное."};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(63781).D)([n,o,p,q,r]),(0,d.A)(n,"40bdf5387ecda8d30ee1ae616c85733f882df67754",null),(0,d.A)(o,"40edcdfb0c67ebf35498a6aff6d1926081f669f235",null),(0,d.A)(p,"40bfac1a21882e9becc8d3d3f679a0e378b921251d",null),(0,d.A)(q,"40ae168c85160b1fbef7c1573a6aed3055a2c56793",null),(0,d.A)(r,"40c38f628b5ec89e9c9abedc73cf8d081dc1f86a8c",null)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=9293,exports.ids=[9293],exports.modules={59293:(a,b,c)=>{c.d(b,{getSecret:()=>
|
|
1
|
+
"use strict";exports.id=9293,exports.ids=[9293],exports.modules={59293:(a,b,c)=>{c.d(b,{getSecret:()=>l,listSecretKeys:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c(29163);let i=f().join((0,h._)(),"secrets");function j(a,b,c){return f().join(i,a,function(a,b){if("global"===a)return"_";if(!b)throw Error("project-scope secrets require rootId");return/^[a-f0-9]{8,64}$/.test(b)?b:(0,g.createHash)("sha1").update(b).digest("hex").slice(0,16)}(a,c),`${b}.json`)}async function k(a){try{let b=await d.promises.readFile(a,"utf8"),c=JSON.parse(b);if(1!==c.version||!c.values||"object"!=typeof c.values)return{version:1,values:{}};return{version:1,values:c.values}}catch{return{version:1,values:{}}}}async function l(a,b,c,d){let e=await k(j(a,b,d));return Object.prototype.hasOwnProperty.call(e.values,c)?e.values[c]:null}async function m(a,b,c){return Object.keys((await k(j(a,b,c))).values).sort()}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=9328,exports.ids=[8514,9328],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:`Обновление откатано — старая версия восстановлена. Ошибка: ${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 Доработай Reflex-утилиту "${a.name}" (id: ${a.id}).`,"",`Текущая директория утилиты на диске: \`${b}\`.`,`Scope: ${a.source?.type??"agent"} → manifest.id=${a.id}.`,"\n## Что просит пользователь",d.trim(),"\n## Текущие файлы утилиты",e||"(нет читаемых файлов)",'\n## Что от тебя требуется\n1. Прочитай файлы выше и пойми текущее поведение.\n2. Внеси изменения по запросу пользователя.\n3. Эмить обновлённую утилиту через маркер `<<reflex:utility>>` с тем же `id` и (увеличенной) `version`. Reflex переустановит её поверх существующей и сразу перебилдит bundle.\n4. Проверь, что новый бандл собирается без ошибок и UI отражает запрошенное изменение.\n5. По завершении эмить `<<reflex:kb>>{"kind":"goal-completion",...}` и фразу `GOAL ACHIEVED` на отдельной строке.\n\nНе выдумывай новых импортов вне whitelist (`react`, `react-dom/client`, `react/jsx-runtime`, `@host/api`, `@host/ui`). Если запрос требует чего-то невозможного — спроси через `<<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,"40e190efd19937a6de23f0cc4efd2cb8ca6ef4b305",null),(0,e.A)(y,"400f4906db059227810bcf2c1768a77a6b34085c03",null),(0,e.A)(z,"40d4d9589e0215dda459fcdb925582cfb60cc8c23a",null),(0,e.A)(A,"00e0e47a8d18329615142bb067bec3f0f8a2ff16cb",null),(0,e.A)(B,"40fb59f02e358b555e430fc3390876e456117b1abb",null),(0,e.A)(C,"4040554654d5edea1128bcf68d7626bb8bd051088a",null),(0,e.A)(E,"400f8c81914f27c5d8546cd057d9f36ff0bcae8739",null),(0,e.A)(F,"7023eb83f74367f0a71df3d12450747b3299db5304",null),(0,e.A)(G,"702d15b9ace2262ece44db6727e46c6cad833f4ecb",null),(0,e.A)(H,"70ac02314e6ca01a568db94b9a3ccf46ade9038e8d",null),(0,e.A)(I,"4070ed88f38de095d26addcd3ff2c0159378d1a1da",null),(0,e.A)(J,"4015e0bffd95ecf3c74df7cc8b369a0651e58661c4",null),(0,e.A)(K,"409c8effbefaed45aa73def7d435b9330167f9d049",null),(0,e.A)(L,"40c162a66a03d4a646079dd6e77a1e93f7c2022e01",null),(0,e.A)(O,"400db4e15da3acc3df3f48815dc7cdf9edb50d99d9",null),(0,e.A)(P,"403f57c294212361496c5a9ea50e46ee54acd13000",null),(0,e.A)(Q,"4032ab42fd454a3006bd38a108f93ce6dd32c65a1e",null),(0,e.A)(R,"700c5aa6aa889cefeab553f8e413ed7ef102ed924a",null),d()}catch(a){d(a)}})},12140:(a,b,c)=>{c.d(b,{Md:()=>q,u0:()=>n,y4:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(48161),h=c.n(g),i=c(77598),j=c.n(i);let k=f().join(h().homedir(),".reflex","audit");function l(a){return f().join(k,`${a}.jsonl`)}function m(a=new Date){return a.toISOString().slice(0,10)}async function n(a){let b={ts:a.ts??new Date().toISOString(),...a};await d.promises.mkdir(k,{recursive:!0});let c=l(m());await d.promises.appendFile(c,JSON.stringify(b)+"\n","utf8")}async function o(a={}){let b,c=await p(),e=a.date??c[0]??m(),f=a.limit??500,g=l(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 p(){let a;try{a=await d.promises.readdir(k)}catch{return[]}return a.filter(a=>/^\d{4}-\d{2}-\d{2}\.jsonl$/.test(a)).map(a=>a.replace(/\.jsonl$/,"")).sort().reverse()}async function q(a,b){let c=j().randomUUID().replace(/-/g,"").slice(0,16),d=Date.now();await n({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:r(a.args)});try{let e=await b(c);return await n({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:r(e)}),e}catch(e){let b=e instanceof Error?e.message:String(e);throw await n({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 r(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=>r(a,b+1));let c={},d=0;for(let[e,f]of Object.entries(a)){if(d++>=50){c["…"]="truncated";break}c[e]=r(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=9328,exports.ids=[8514,9328],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:`Обновление откатано — старая версия восстановлена. Ошибка: ${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 Доработай Reflex-утилиту "${a.name}" (id: ${a.id}).`,"",`Текущая директория утилиты на диске: \`${b}\`.`,`Scope: ${a.source?.type??"agent"} → manifest.id=${a.id}.`,"\n## Что просит пользователь",d.trim(),"\n## Текущие файлы утилиты",e||"(нет читаемых файлов)",'\n## Что от тебя требуется\n1. Прочитай файлы выше и пойми текущее поведение.\n2. Внеси изменения по запросу пользователя.\n3. Эмить обновлённую утилиту через маркер `<<reflex:utility>>` с тем же `id` и (увеличенной) `version`. Reflex переустановит её поверх существующей и сразу перебилдит bundle.\n4. Проверь, что новый бандл собирается без ошибок и UI отражает запрошенное изменение.\n5. По завершении эмить `<<reflex:kb>>{"kind":"goal-completion",...}` и фразу `GOAL ACHIEVED` на отдельной строке.\n\nНе выдумывай новых импортов вне whitelist (`react`, `react-dom/client`, `react/jsx-runtime`, `@host/api`, `@host/ui`). Если запрос требует чего-то невозможного — спроси через `<<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,"403e544867c4eb4010f252cdd6d10f05623a235ba5",null),(0,e.A)(y,"40aaca5d204489fedee039384e4ed43aaa20e6b5d9",null),(0,e.A)(z,"40a5a12e6ca00dfff1489b490e0433195211863e9f",null),(0,e.A)(A,"0013f92e98a6be32b43c42ddfcff6fd11255934a84",null),(0,e.A)(B,"40adb597bf039141d38b7b4d3bf37e6a1a127b35b3",null),(0,e.A)(C,"401016b95440d8ae14e7e617782a46f907759413b9",null),(0,e.A)(E,"40e0f560dd1bd5c4d1f3d6a8c4cb77aa85112a7684",null),(0,e.A)(F,"70d05ab73c507cbb9c111f9268044697412f0469a9",null),(0,e.A)(G,"7051744d8f33e647afb9a87fb986235526b645480e",null),(0,e.A)(H,"70f94d1e74b37269ee948a9621dc9da9d677549e83",null),(0,e.A)(I,"40fad5cc74e73a70ded2905c6bdc942da0c9fe3438",null),(0,e.A)(J,"40ff9a1e8aca30d565b0164018552a1218a2ad822a",null),(0,e.A)(K,"40a1108d6dfa0da9c8e64b4511131281acdc0a53b4",null),(0,e.A)(L,"40ab7584ead98ef4c79139af27ccc140274a4528e4",null),(0,e.A)(O,"403fd7de65569456a0846af361f497885ad1064f9f",null),(0,e.A)(P,"40c13d933a5d314c5d49838e7db7f6fbda899e6046",null),(0,e.A)(Q,"406fcbccca2a3c9ac85348aa294968bc0e5c3a9109",null),(0,e.A)(R,"706c186184e557c159cc474f2ac19c4955b9a339fc",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,
|
|
@@ -176,4 +176,4 @@ function coerceValue(raw: string, prop?: JsonSchemaProperty): unknown {
|
|
|
176
176
|
}
|
|
177
177
|
return raw;
|
|
178
178
|
}
|
|
179
|
-
`}(a),"README.md":(b=a,[`# ${b.name}`,"",`Reflex-обёртка над MCP-сервером. Tools (${b.tools.length}):`,"",...b.tools.map(a=>`- **${a.name}**${a.description?` — ${a.description}`:""}`),"","Конфиг сервера — в `mcp.json` рядом с этим файлом.",""].join("\n"))}}}function e(a){return a.replace(/[\\"`]/g,"\\$&").replace(/\n/g," ")}c.d(b,{U:()=>d})},28514:(a,b,c)=>{c.d(b,{J8:()=>
|
|
179
|
+
`}(a),"README.md":(b=a,[`# ${b.name}`,"",`Reflex-обёртка над MCP-сервером. Tools (${b.tools.length}):`,"",...b.tools.map(a=>`- **${a.name}**${a.description?` — ${a.description}`:""}`),"","Конфиг сервера — в `mcp.json` рядом с этим файлом.",""].join("\n"))}}}function e(a){return a.replace(/[\\"`]/g,"\\$&").replace(/\n/g," ")}c.d(b,{U:()=>d})},28514:(a,b,c)=>{c.d(b,{J8:()=>q,Pq:()=>n,e3:()=>o,getSecret:()=>m,listSecretKeys:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c(73652);let i=f().join((0,h._)(),"secrets");function j(a,b,c){return f().join(i,a,function(a,b){if("global"===a)return"_";if(!b)throw Error("project-scope secrets require rootId");return/^[a-f0-9]{8,64}$/.test(b)?b:(0,g.createHash)("sha1").update(b).digest("hex").slice(0,16)}(a,c),`${b}.json`)}async function k(a){try{let b=await d.promises.readFile(a,"utf8"),c=JSON.parse(b);if(1!==c.version||!c.values||"object"!=typeof c.values)return{version:1,values:{}};return{version:1,values:c.values}}catch{return{version:1,values:{}}}}async function l(a,b){await d.promises.mkdir(f().dirname(a),{recursive:!0}),await d.promises.writeFile(a,JSON.stringify(b,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(a,384)}catch{}}async function m(a,b,c,d){let e=await k(j(a,b,d));return Object.prototype.hasOwnProperty.call(e.values,c)?e.values[c]:null}async function n(a,b,c,d,e){let f=j(a,b,e),g=await k(f);g.values[c]=d,await l(f,g)}async function o(a,b,c,d){let e=j(a,b,d),f=await k(e);c in f.values&&(delete f.values[c],await l(e,f))}async function p(a,b,c){return Object.keys((await k(j(a,b,c))).values).sort()}async function q(a,b,c){let e=j(a,b,c);try{await d.promises.unlink(e)}catch{}}},45730:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{checkGithubUpdate:()=>l,installFromGithubConfirmed:()=>k,w:()=>j});var e=c(56149),f=c(20050),g=c(8118),h=c(99861),i=a([h]);async function j(a){let b;try{b=function(a){let b,c,d="HEAD",e=/^github:([^/]+)\/([^@]+)(?:@(.+))?$/.exec(a.trim());if(e)b=e[1],c=e[2],e[3]&&(d=e[3]);else{let e;try{e=new URL(a)}catch{throw Error("not a valid URL")}if("github.com"!==e.hostname)throw Error("only github.com URLs are supported");let f=e.pathname.split("/").filter(Boolean);if(f.length<2)throw Error("URL must include owner/repo");b=f[0],c=f[1].replace(/\.git$/,""),"tree"===f[2]&&f[3]&&(d=f.slice(3).join("/"))}return{owner:b,repo:c,ref:d}}(a)}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}try{let a=await m(b),c={...b,sha:a},{manifest:d,files:e,sizes:f}=await o(c);return{ok:!0,preview:{source:c,manifest:d,files:e,sizes:f}}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function k(a){let b=`github:${a.preview.source.owner}/${a.preview.source.repo}@${a.preview.source.sha}`,c=await (0,g.gd)({scope:a.scope,...a.rootId?{rootId:a.rootId}:{},manifest:a.preview.manifest,files:a.preview.files,source:{type:"github",origin:b,fetchedAt:new Date().toISOString(),installedBy:"github-installer"}});return await (0,h.buildUtility)(c),{scope:c.scope,id:c.manifest.id,origin:b}}async function l(a,b,c){let d=await (0,g.getUtility)(a,b,c);if(!d)throw Error("utility not found");let e=d.manifest.source?.origin;if(!e||!e.startsWith("github:"))throw Error("utility was not installed from github");let f=/^github:([^/]+)\/([^@]+)@(.+)$/.exec(e);if(!f)throw Error(`unrecognized github origin: ${e}`);let h={owner:f[1],repo:f[2],ref:"HEAD",sha:f[3]},i=await m(h);if(i===h.sha)return{upToDate:!0,currentSha:h.sha,latestSha:i};let j={...h,sha:i},{manifest:k,files:l,sizes:n}=await o(j);return{upToDate:!1,currentSha:h.sha,latestSha:i,preview:{source:j,manifest:k,files:l,sizes:n}}}async function m(a){let b=await fetch(`https://api.github.com/repos/${a.owner}/${a.repo}/commits/${encodeURIComponent(a.ref)}`,{headers:{Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(8e3)});if(!b.ok)throw Error(`github: ${b.status} resolving ${a.owner}/${a.repo}@${a.ref}`);let c=await b.json();if(!c.sha)throw Error("github returned no sha");return c.sha}async function n(a,b,c=!1){let d=`https://raw.githubusercontent.com/${a.owner}/${a.repo}/${a.sha}/${b}`,e=await fetch(d,{signal:AbortSignal.timeout(1e4)});if(!e.ok){if(c&&404===e.status)return null;throw Error(`github raw: ${e.status} for ${b}`)}let f=await e.text();if(f.length>262144)throw Error(`file ${b} exceeds 262144 bytes`);return f}h=(i.then?(await i)():i)[0];let p=e.g1(e.Yj(),e.Yj());async function o(a){let b=await n(a,"manifest.json");if(!b)throw Error("manifest.json missing");let c=f.pL.parse(JSON.parse(b)),d={},e={},g=await n(a,c.ui);if(!g)throw Error(`${c.ui} missing`);d[c.ui]=g,e[c.ui]=Buffer.byteLength(g,"utf8");let h=await n(a,"README.md",!0);for(let b of(h&&(d["README.md"]=h,e["README.md"]=Buffer.byteLength(h,"utf8")),c.serverActions)){let c=await n(a,b.entry);if(!c)throw Error(`server action entry ${b.entry} missing`);d[b.entry]=c,e[b.entry]=Buffer.byteLength(c,"utf8")}let i=`https://raw.githubusercontent.com/${a.owner}/${a.repo}/${a.sha}/icon.png`,j=await fetch(i,{signal:AbortSignal.timeout(5e3)});if(j.ok){let a=Buffer.from(await j.arrayBuffer());a.length<=32768&&(d["icon.png"]=a.toString("base64"),e["icon.png"]=a.length)}return p.parse(d),{manifest:c,files:d,sizes:e}}d()}catch(a){d(a)}})}};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";exports.id=9423,exports.ids=[9423],exports.modules={879:(a,b,c)=>{c.d(b,{G:()=>k});var d=c(73024),e=c(76760),f=c.n(e),g=c(55136),h=c.n(g),i=c(54287);class j{constructor(a,b){this.root=a,this.layers=b}static async create(a){return new j(a,[]).enter(a)}async enter(a){let b,c=f().join(a,i.KZ);try{b=await d.promises.readFile(c,"utf8")}catch{return this}let e=h()().add(b);return new j(this.root,[...this.layers,{dir:a,ig:e}])}ignores(a){let b=f().basename(a);if(i.Lj.has(b))return!0;for(let{dir:b,ig:c}of this.layers){let d=f().relative(b,a);if(!(!d||d.startsWith(".."))&&c.ignores(d))return!0}return!1}}async function*k(a,b={}){let{maxDepth:c=1/0,followSymlinks:d=!1}=b,e=f().resolve(a),g=await j.create(e);yield{abs:e,rel:".",isDir:!0},yield*l(e,e,g,0,c,d)}async function*l(a,b,c,e,g,h){let i;if(!(e>=g)){try{i=await d.promises.readdir(b,{withFileTypes:!0})}catch{return}for(let d of(i.sort((a,b)=>a.name.localeCompare(b.name)),i)){var j,k;let i=f().join(b,d.name);if(c.ignores(i))continue;let n=d.isSymbolicLink();if(n&&!h)continue;let o=d.isDirectory()||n&&await m(i),p=(j=a,k=i,f().relative(j,k).split(f().sep).join("/"));if(yield{abs:i,rel:p,isDir:o},o){let b=await c.enter(i);yield*l(a,i,b,e+1,g,h)}}}}async function m(a){try{return(await d.promises.stat(a)).isDirectory()}catch{return!1}}},4168:(a,b,c)=>{c.d(b,{S:()=>j});var d=c(73745);c(66493);var e=c(76760),f=c.n(e),g=c(53905),h=c(54287),i=c(879);async function j(a,b){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=(b??"").toLowerCase().trim(),j=[];try{let{listUtilities:b}=await Promise.resolve().then(c.bind(c,8118));for(let c of(await b({rootId:a})))j.push({kind:"utility",relPath:`util:${c.scope}/${c.manifest.id}`,absPath:"",label:`${c.manifest.name} (${c.scope})`,parent:"utilities"})}catch{}for await(let a of(0,i.G)((0,h.FF)(d.path))){if(a.isDir||!a.rel.toLowerCase().endsWith(".md")||a.rel.startsWith("topics/")||a.rel.startsWith("attachments/"))continue;let b=`${h.fW}/${a.rel}`;j.push({kind:"kb",relPath:b,absPath:a.abs,label:a.rel,parent:"."===f().dirname(a.rel)?h.fW:`${h.fW}/${f().dirname(a.rel)}`})}for await(let a of(0,i.G)(d.path))a.isDir||j.push({kind:"file",relPath:a.rel,absPath:a.abs,label:a.rel,parent:"."===f().dirname(a.rel)?"":f().dirname(a.rel)});let k=e?j.filter(a=>{let b=a.relPath.toLowerCase();return f().basename(a.relPath).toLowerCase().includes(e)||b.includes(e)}):j,l={utility:0,kb:1,file:2};return k.sort((a,b)=>{if(a.kind!==b.kind)return l[a.kind]-l[b.kind];if(e){let c=f().basename(a.label).toLowerCase(),d=f().basename(b.label).toLowerCase(),g=+!c.startsWith(e),h=+!d.startsWith(e);if(g!==h)return g-h}return a.relPath.localeCompare(b.relPath)}),{ok:!0,items:k.slice(0,30)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(63781).D)([j]),(0,d.A)(j,"6014fc87394c914288b07a6c9475f3df313b5e9d2b",null)},8836:(a,b,c)=>{c.d(b,{E:()=>f});var d=c(64173),e=c(69552);function f({label:a="Спроси Reflex",headerRight:b,children:c}){return(0,d.jsx)("div",{className:"border-t bg-background",children:(0,d.jsx)("div",{className:"mx-auto max-w-3xl px-6 py-5",children:(0,d.jsx)("div",{className:"reflex-gradient rounded-2xl p-[2px] shadow-[0_8px_40px_-12px_oklch(0.55_0.2_290/0.45)]",children:(0,d.jsxs)("div",{className:"rounded-[14px] bg-background/85 backdrop-blur-xl px-5 py-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,d.jsx)("span",{className:"reflex-gradient inline-flex h-6 w-6 items-center justify-center rounded-full text-white shadow-sm",children:(0,d.jsx)(e.A,{className:"h-3.5 w-3.5"})}),(0,d.jsx)("span",{className:"text-[11px] uppercase tracking-[0.18em] text-muted-foreground",children:a}),b&&(0,d.jsx)("span",{className:"ml-auto flex items-center gap-1",children:b})]}),c]})})})})}},19676:(a,b,c)=>{c.d(b,{L:()=>M});var d=c(64173),e=c(17240),f=c(54249),g=c(75430),h=c(34719),i=c(56189),j=c(41856),k=c(33120),l=c(69552),m=c(97338),n=c(25299),o=c(63387),p=c(53834),q=c(97162),r=c(62261),s=c(77311),t=c(25436),u=c(24555),v=c(68669),w=c(79145),x=c(66979),y=c(87671),z=c(44052),A=c(20583),B=c(45477),C=c(91344),D=c(3265);let E=(0,D.createServerReference)("6014fc87394c914288b07a6c9475f3df313b5e9d2b",D.callServer,void 0,D.findSourceMapURL,"searchMentionsAction"),F=[{id:"plan",trigger:"plan",label:"/plan",description:"Сначала покажи план — Reflex распишет шаги и подождёт одобрения.",kind:"agent-mode",usage:"/plan <задача>",icon:"ListChecks"},{id:"goal",trigger:"goal",label:"/goal",description:"Поставь цель — Reflex будет двигаться к ней сам, без напоминаний.",kind:"agent-mode",usage:"/goal <чего достичь>",icon:"Target"},{id:"research",trigger:"research",label:"/research",description:"Глубокое исследование темы — поиск в интернете + сводка с источниками.",kind:"agent-mode",usage:"/research <тема>",icon:"Telescope"},{id:"widget",trigger:"widget",label:"/widget",description:"Создать карточку на дашборде пространства.",kind:"agent-mode",usage:"/widget <что показать>",icon:"LayoutGrid"},{id:"workflow",trigger:"workflow",label:"/workflow",description:"Собрать рецепт — линейная автоматизация из шагов под задачу.",kind:"agent-mode",usage:"/workflow <что автоматизировать>",icon:"Workflow"},{id:"remember",trigger:"remember",label:"/remember",description:"Запомнить заметку — сразу в память, без обращения к AI.",kind:"direct",usage:"/remember <что запомнить>",icon:"BookmarkPlus"},{id:"mcp",trigger:"mcp",label:"/mcp",description:"Подключить внешний сервис (мастер настройки откроется в чате).",kind:"agent-mode",usage:"/mcp <что нужно>",icon:"PackagePlus"},{id:"skill",trigger:"skill",label:"/skill",description:"Подключить роль — готовый набор инструкций на этот разговор.",kind:"agent-mode",usage:"/skill <id-роли> [запрос]",icon:"Sparkles"},{id:"delete-topic",trigger:"delete-topic",label:"/delete-topic",description:"Удалить этот разговор (с подтверждением).",kind:"direct",usage:"/delete-topic",requiresConfirm:!0,allowEmpty:!0,icon:"Trash2"},{id:"clear-project",trigger:"clear-project",label:"/clear-project",description:"ОПАСНО: очистить пространство — все разговоры, карточки, память. Двойное подтверждение.",kind:"direct",usage:"/clear-project",requiresConfirm:!0,allowEmpty:!0,icon:"AlertOctagon"},{id:"util",trigger:"util",label:"/util",description:"Открыть мини-приложение (по части названия или из списка).",kind:"direct",usage:"/util <часть названия или id>",allowEmpty:!0,icon:"Boxes"},{id:"help",trigger:"help",label:"/help",description:"Список доступных команд.",kind:"direct",usage:"/help",allowEmpty:!0,icon:"HelpCircle"}],G=(0,D.createServerReference)("6051a3cb9c1489e94b9741fe9a142b1b58858be740",D.callServer,void 0,D.findSourceMapURL,"rememberAction"),H=(0,D.createServerReference)("6011efcd5f9a67e7dec53f5da330864861c247d019",D.callServer,void 0,D.findSourceMapURL,"deleteCurrentTopicCommand"),I=(0,D.createServerReference)("6003a02fded522bf2a29121816901cb241f523cc45",D.callServer,void 0,D.findSourceMapURL,"openUtilityAction"),J=(0,D.createServerReference)("40a4640774333424c5449a44e98de64128d4152bf2",D.callServer,void 0,D.findSourceMapURL,"clearProjectAction");var K=c(88724);let L={ListChecks:f.A,Target:g.A,Telescope:h.A,LayoutGrid:i.A,BookmarkPlus:j.A,PackagePlus:k.A,Sparkles:l.A,Trash2:m.A,AlertOctagon:n.A,HelpCircle:o.A,Workflow:p.A,Boxes:q.A};function M({rootId:a,topicId:b,placeholder:c,submitLabel:f,pendingLabel:g,SubmitIcon:h,disabled:i,onSubmit:j,active:k,onStop:l,clarifyLabel:m="Уточнить",stopLabel:n="Стоп"}){let o=(0,y.useRouter)(),[p,q]=(0,e.useState)(""),[u,v]=(0,e.useState)([]),[w,x]=(0,e.useState)(!1),[D,G]=(0,e.useState)(!1),[H,I]=(0,e.useState)(!1),J=(0,e.useRef)(null),K=(0,e.useRef)(null),[L,M]=(0,e.useState)(null),[R,S]=(0,e.useState)([]),[T,U]=(0,e.useState)(0),[V,W]=(0,e.useState)(!1),X=(0,e.useRef)(0),[Y,Z]=(0,e.useState)(null);(0,e.useCallback)(()=>{let a=J.current;a&&(a.style.height="auto",a.style.height=Math.min(a.scrollHeight,240)+"px")},[]);let $=(0,e.useCallback)((b,c)=>{let d=c;for(;d>0;){let a=b[d-1];if("@"===a){d-=1;break}if(/\s/.test(a)){d=-1;break}d-=1}if(d<0||"@"!==b[d]||d>0&&!/\s/.test(b[d-1])){M(null),S([]);return}let e=b.slice(d+1,c);M({start:d,end:c}),U(0),W(!0);let f=++X.current;(async()=>{let b=await E(a,e);X.current===f&&(W(!1),S(b.ok?b.items:[]))})()},[a]),_=(0,e.useCallback)(()=>{M(null),S([]),X.current++},[]),aa=(0,e.useCallback)(a=>{if(!a.startsWith("/")||a.indexOf(" ")>=0)return void Z(null);let b=a.slice(1).toLowerCase(),c=F.filter(a=>a.trigger.startsWith(b)||a.label.toLowerCase().includes(b)||a.description.toLowerCase().includes(b));if(0===c.length)return void Z(null);Z({items:c,index:0})},[]),ab=(0,e.useCallback)(()=>Z(null),[]),ac=(0,e.useCallback)(a=>{let b=J.current,c=`/${a.trigger}${a.allowEmpty&&"direct"===a.kind?"":" "}`;q(c),Z(null),requestAnimationFrame(()=>{b&&(b.focus(),b.setSelectionRange(c.length,c.length))})},[]),ad=(0,e.useCallback)(a=>{let b=J.current;if(!b||!L)return;let c=p.slice(0,L.start),d=p.slice(L.end),e=`@${a.relPath} `;q(c+e+d),_();let f=c.length+e.length;requestAnimationFrame(()=>{b.focus(),b.setSelectionRange(f,f)})},[p,L,_]),ae=(0,e.useCallback)(async b=>{if(0!==b.length){x(!0);try{let c=new FormData;for(let a of b)c.append("files",a);let d=await fetch(`/api/roots/${a}/attachments`,{method:"POST",body:c});if(!d.ok){let a=await d.json().catch(()=>({}));z.oR.error(a.error??`Не удалось загрузить (${d.status})`);return}let e=await d.json();v(a=>[...a,...e.files])}catch(a){z.oR.error(a instanceof Error?a.message:String(a))}finally{x(!1)}}},[a]),af=p.trim().length>0||u.length>0,ag=k&&l?af?"clarify":"stop":"send",ah=(0,e.useCallback)(async()=>{if(D)return;if("stop"===ag){if(!l)return;G(!0);try{await l()}finally{G(!1)}return}let c=p.trim();if(!c&&0===u.length||i&&"send"===ag)return;let d=function(a){var b;let c=a.trim();if(!c.startsWith("/"))return null;let d=/^\/([a-z][a-z0-9-]*)(?:\s+([\s\S]*))?$/.exec(c);if(!d)return null;let e=(b=d[1],F.find(a=>a.trigger===b)??null);return e?{def:e,payload:(d[2]??"").trim()}:null}(c);if(d&&"direct"===d.def.kind){G(!0);try{await N({cmd:d.def,payload:d.payload,rootId:a,topicId:b,router:o}),q("")}finally{G(!1)}return}G(!0);try{"clarify"===ag&&l&&await l(),await j({message:c,attachments:u})&&(q(""),v([]))}finally{G(!1)}},[p,u,D,i,ag,l,j,a,b,o]),ai=!D&&!w&&("stop"===ag||af&&(!i||"clarify"===ag));return(0,d.jsxs)("form",{onSubmit:a=>{a.preventDefault(),ah()},onDragEnter:a=>{Array.from(a.dataTransfer.types).includes("Files")&&(a.preventDefault(),I(!0))},onDragOver:a=>{Array.from(a.dataTransfer.types).includes("Files")&&(a.preventDefault(),I(!0))},onDragLeave:a=>{a.currentTarget.contains(a.relatedTarget)||I(!1)},onDrop:a=>{a.preventDefault(),I(!1);let b=Array.from(a.dataTransfer.files);b.length>0&&ae(b)},className:(0,C.cn)("space-y-2 rounded-md transition-colors",H&&"ring-2 ring-ring/60 bg-accent/40"),children:[u.length>0&&(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5",children:u.map((a,b)=>(0,d.jsx)(Q,{attachment:a,onRemove:()=>v(b=>b.filter(b=>b!==a))},a.absPath+b))}),(0,d.jsxs)("div",{className:"flex items-end gap-2",children:[(0,d.jsxs)("div",{className:"relative flex-1",children:[(0,d.jsx)(B.T,{ref:J,value:p,onChange:a=>{q(a.target.value),$(a.target.value,a.target.selectionStart),aa(a.target.value)},onKeyUp:a=>{let b=a.currentTarget;$(b.value,b.selectionStart),aa(b.value)},onClick:a=>{let b=a.currentTarget;$(b.value,b.selectionStart),aa(b.value)},onBlur:()=>{setTimeout(()=>{_(),ab()},150)},onKeyDown:a=>{if(Y){if("ArrowDown"===a.key){a.preventDefault(),Z(a=>a?{...a,index:Math.min(a.items.length-1,a.index+1)}:null);return}if("ArrowUp"===a.key){a.preventDefault(),Z(a=>a?{...a,index:Math.max(0,a.index-1)}:null);return}if("Tab"===a.key){a.preventDefault();let b=Y.items[Y.index];b&&ac(b);return}if("Escape"===a.key){a.preventDefault(),ab();return}}if(L&&R.length>0){if("ArrowDown"===a.key){a.preventDefault(),U(a=>Math.min(R.length-1,a+1));return}if("ArrowUp"===a.key){a.preventDefault(),U(a=>Math.max(0,a-1));return}if("Enter"===a.key||"Tab"===a.key){a.preventDefault();let b=R[T];b&&ad(b);return}if("Escape"===a.key){a.preventDefault(),_();return}}"Enter"!==a.key||a.shiftKey||a.nativeEvent.isComposing||(a.preventDefault(),ah())},onPaste:a=>{let b=Array.from(a.clipboardData.files);b.length>0&&(a.preventDefault(),ae(b))},placeholder:c,rows:1,disabled:i||D,className:"resize-none min-h-[44px] max-h-60 text-base bg-background/70 border-transparent focus-visible:border-ring py-2.5 w-full"}),L&&(0,d.jsx)(P,{items:R,index:T,loading:V,onPick:ad,onHover:a=>U(a)}),Y&&!L&&(0,d.jsx)(O,{items:Y.items,index:Y.index,onPick:ac,onHover:a=>Z(b=>b?{...b,index:a}:null),topicAvailable:!!b})]}),(0,d.jsx)("input",{ref:K,type:"file",multiple:!0,className:"hidden",onChange:a=>{let b=Array.from(a.target.files??[]);b.length>0&&ae(b),a.target.value=""}}),(0,d.jsx)(A.$,{type:"button",size:"icon",variant:"ghost",onClick:()=>K.current?.click(),disabled:w||D||i,title:"Прикрепить файлы (можно drag&drop или Cmd+V)",className:"h-11 w-11 shrink-0",children:w?(0,d.jsx)(r.A,{className:"h-4 w-4 animate-spin"}):(0,d.jsx)(s.A,{className:"h-4 w-4"})}),(0,d.jsx)(A.$,{type:"submit",size:"lg",disabled:!ai,variant:"stop"===ag?"destructive":"default",className:"h-11 px-6 shadow-md shrink-0",children:D?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(r.A,{className:"mr-2 h-4 w-4 animate-spin"}),g]}):"stop"===ag?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{className:"mr-2 h-4 w-4",fill:"currentColor"}),n]}):"clarify"===ag?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(h,{className:"mr-2 h-4 w-4"}),m]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(h,{className:"mr-2 h-4 w-4"}),f]})})]}),(0,d.jsx)("div",{className:"text-[10px] text-muted-foreground",children:"Enter — отправить \xb7 Shift+Enter — новая строка \xb7 @ — упомянуть файл/заметку \xb7 `/` — команды \xb7 можно перетащить файлы или вставить из буфера"})]})}async function N({cmd:a,payload:b,rootId:c,topicId:d,router:e}){if("help"===a.id){let a=F.map(a=>`• ${a.label} — ${a.description}`);z.oR.info(`Доступные команды:
|
|
2
|
+
${a.join("\n")}`,{duration:12e3});return}if("remember"===a.id){if(!b)return void z.oR.error("Пусто — нечего запоминать. Использование: /remember <текст>");let a=await G(c,b);return void(a.ok?(z.oR.success(a.message??"Сохранено в KB"),(0,K.$d)(K.Zi.kbChanged(c))):z.oR.error(a.error))}if("delete-topic"===a.id){if(!d)return void z.oR.error("Команда работает только внутри топика.");if(!confirm("Удалить этот топик? Это необратимо."))return;let a=await H(c,d);return void(a.ok?(z.oR.success(a.message??"Удалено"),(0,K.$d)(K.Zi.topicsChanged(c)),a.redirectTo&&e.push(a.redirectTo)):z.oR.error(a.error))}if("util"===a.id){let a=await I(c,b);if(!a.ok)return void z.oR.error(a.error);if("redirect"===a.kind)return void e.push(a.url);let d=a.items.slice(0,8).map(a=>`• ${a.name} (${a.scope}/${a.id})`).join("\n");return void z.oR.message(`Несколько подходит — уточни запрос:
|
|
3
|
+
${d}`,{duration:12e3})}if("clear-project"===a.id){if(!confirm("ВНИМАНИЕ: будут удалены ВСЕ топики, виджеты и KB-файлы этого проекта. Это необратимо. Продолжить?"))return;let a=prompt("Введи фразу \xabочистить\xbb (без кавычек), чтобы подтвердить:");if(a?.trim().toLowerCase()!=="очистить")return void z.oR.message("Подтверждение не прошло — отмена.");let b=await J(c);return void(b.ok?(z.oR.success(b.message??"Проект очищен"),(0,K.$d)(K.Zi.topicsChanged(c)),(0,K.$d)(K.Zi.kbChanged(c)),b.redirectTo&&e.push(b.redirectTo)):z.oR.error(b.error))}z.oR.error(`Неизвестная команда: ${a.label}`)}function O({items:a,index:b,onPick:c,onHover:e,topicAvailable:f}){return(0,d.jsxs)("div",{className:"absolute bottom-full left-0 right-0 mb-2 z-50 max-h-80 overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-lg",children:[(0,d.jsx)("div",{className:"px-3 py-1.5 text-[10px] uppercase tracking-wider text-muted-foreground border-b",children:"Команды \xb7 Tab — вставить \xb7 ↑↓ — выбор \xb7 Esc — закрыть"}),(0,d.jsx)("ul",{children:a.map((a,g)=>{let h=L[a.icon]??l.A,i="delete-topic"===a.id&&!f;return(0,d.jsx)("li",{children:(0,d.jsxs)("button",{type:"button",onMouseDown:b=>{b.preventDefault(),i||c(a)},onMouseEnter:()=>e(g),disabled:i,className:(0,C.cn)("w-full flex items-start gap-2 px-3 py-2 text-left",g===b?"bg-accent":"hover:bg-accent/60",i&&"opacity-40 cursor-not-allowed"),children:[(0,d.jsx)(h,{className:(0,C.cn)("h-3.5 w-3.5 mt-0.5 shrink-0","direct"===a.kind?"text-amber-600":"text-violet-600")}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("div",{className:"flex items-baseline gap-2 flex-wrap",children:[(0,d.jsx)("span",{className:"font-mono text-xs font-medium",children:a.label}),"direct"===a.kind&&(0,d.jsx)("span",{className:"text-[9px] uppercase tracking-wider text-amber-700",children:"прямое действие"}),a.requiresConfirm&&(0,d.jsx)("span",{className:"text-[9px] uppercase tracking-wider text-destructive",children:"с подтверждением"})]}),(0,d.jsx)("p",{className:"text-[11px] text-muted-foreground leading-snug mt-0.5",children:a.description}),(0,d.jsx)("p",{className:"text-[10px] text-muted-foreground/80 font-mono mt-0.5",children:a.usage})]})]})},a.id)})})]})}function P({items:a,index:b,loading:c,onPick:e,onHover:f}){return(0,d.jsx)("div",{className:"absolute bottom-full left-0 right-0 mb-2 z-50 max-h-72 overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-lg",children:c&&0===a.length?(0,d.jsxs)("div",{className:"px-3 py-2 text-xs text-muted-foreground flex items-center gap-2",children:[(0,d.jsx)(r.A,{className:"h-3 w-3 animate-spin"})," поиск…"]}):0===a.length?(0,d.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground italic",children:"ничего не найдено"}):(0,d.jsx)("ul",{children:a.map((a,c)=>{let g="kb"===a.kind?u.A:v.A;return(0,d.jsx)("li",{children:(0,d.jsxs)("button",{type:"button",onMouseDown:b=>{b.preventDefault(),e(a)},onMouseEnter:()=>f(c),className:(0,C.cn)("w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left",c===b?"bg-accent":"hover:bg-accent/60"),children:[(0,d.jsx)(g,{className:(0,C.cn)("h-3.5 w-3.5 shrink-0","kb"===a.kind?"text-primary":"text-muted-foreground")}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"truncate font-mono text-xs",children:a.relPath}),a.parent&&(0,d.jsx)("div",{className:"truncate text-[10px] text-muted-foreground",children:a.parent})]}),(0,d.jsx)("span",{className:(0,C.cn)("text-[10px] uppercase tracking-wider shrink-0","kb"===a.kind?"text-primary":"text-muted-foreground"),children:a.kind})]})},a.absPath)})})})}function Q({attachment:a,onRemove:b}){var c;let e=a.mime.startsWith("image/")?w.A:v.A;return(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-1 text-[11px] max-w-[18rem]",children:[(0,d.jsx)(e,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate",title:a.name,children:a.name}),(0,d.jsx)("span",{className:"text-muted-foreground",children:(c=a.size)<1024?`${c} B`:c<1048576?`${(c/1024).toFixed(1)} KB`:`${(c/1048576).toFixed(1)} MB`}),(0,d.jsx)("button",{type:"button",onClick:b,className:"ml-0.5 text-muted-foreground hover:text-foreground",children:(0,d.jsx)(x.A,{className:"h-3 w-3"})})]})}},26290:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(83243),e=c(86103);function f(...a){return(0,e.QP)((0,d.$)(a))}},45477:(a,b,c)=>{c.d(b,{T:()=>f});var d=c(64173);c(17240);var e=c(91344);function f({className:a,...b}){return(0,d.jsx)("textarea",{"data-slot":"textarea",className:(0,e.cn)("flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground 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 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40",a),...b})}},67248:(a,b,c)=>{c.d(b,{E:()=>i});var d=c(63003);c(34750);var e=c(86209),f=c(65715),g=c(26290);let h=(0,e.F)("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",{variants:{variant:{default:"bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",destructive:"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",outline:"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",ghost:"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",link:"text-primary underline-offset-4 [a&]:hover:underline"}},defaultVariants:{variant:"default"}});function i({className:a,variant:b="default",asChild:c=!1,...e}){let i=c?f.bL:"span";return(0,d.jsx)(i,{"data-slot":"badge","data-variant":b,className:(0,g.cn)(h({variant:b}),a),...e})}},72901:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{LL:()=>v,ZC:()=>z,b2:()=>u,qO:()=>t,wd:()=>y});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(54287),l=c(56942),m=c(5492),n=c(13415),o=c(93554),p=c(49410),q=c(96921),r=c(63781),s=a([n,o]);async function t(a,b){try{let c=b.trim();if(!c)return{ok:!1,error:"Пусто — нечего запоминать."};let d=await (0,j.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=c.split(/\r?\n/,1)[0].trim(),f=e.length>80?e.slice(0,77).trimEnd()+"…":e,g=await (0,l.j)({rootPath:d.path,directive:{kind:"note",title:f,body:c}});return(0,i.revalidatePath)(`/roots/${a}`),{ok:!0,message:`Сохранено в ${g.relPath}`}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function u(a,b){let c=await (0,n.L4)(a,b);return c.ok?{ok:!0,redirectTo:`/roots/${a}`,message:"Топик удалён"}:{ok:!1,error:c.error??"Failed"}}async function v(a){try{let b=await (0,j.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=(0,k.FF)(b.path);for(let a of(await (0,m.hk)(b.path)))await o.z.stopTopic(a.meta.id).catch(()=>void 0);return await w(h().join(c,"widgets")),await w(h().join(c,"dashboard-layout.json")),await w(h().join(c,"topics")),await x(c),(0,i.revalidatePath)(`/roots/${a}`),{ok:!0,redirectTo:`/roots/${a}`,message:"Проект очищен. Поехали с нуля."}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function w(a){try{await f.promises.rm(a,{recursive:!0,force:!0})}catch{}}async function x(a){let b;try{b=await f.promises.readdir(a,{withFileTypes:!0})}catch{return}for(let c of b){let b=h().join(a,c.name);if(c.isDirectory()){await x(b);try{let a=await f.promises.readdir(b);0===a.length&&await f.promises.rmdir(b)}catch{}continue}c.name.toLowerCase().endsWith(".md")&&await f.promises.unlink(b).catch(()=>void 0)}}async function y(){let a=await (0,p.b)();return{ok:!0,commands:q.Lo,skills:a}}async function z(a,b){let{listUtilities:d}=await Promise.resolve().then(c.bind(c,8118)),e=await d({rootId:a}),f=b.trim().toLowerCase(),g=e.map(a=>({id:a.manifest.id,name:a.manifest.name,scope:a.scope,rootId:a.rootId})),h=a=>{let b=a.rootId?`?rootId=${encodeURIComponent(a.rootId)}`:"";return`/utilities/${a.scope}/${a.id}${b}`};if(!f)return 0===g.length?{ok:!1,error:"Пока ни одного мини-приложения не установлено."}:{ok:!0,kind:"choices",items:g.map(a=>({url:h(a),id:a.id,name:a.name,scope:a.scope}))};let i=g.find(a=>a.id.toLowerCase()===f);if(i)return{ok:!0,kind:"redirect",url:h(i)};let j=g.filter(a=>a.id.toLowerCase().includes(f)||a.name.toLowerCase().includes(f));return 1===j.length?{ok:!0,kind:"redirect",url:h(j[0])}:0===j.length?{ok:!1,error:`Ничего не нашлось по \xab${b}\xbb. Установлено: ${g.length}.`}:{ok:!0,kind:"choices",items:j.map(a=>({url:h(a),id:a.id,name:a.name,scope:a.scope}))}}[n,o]=s.then?(await s)():s,(0,r.D)([t,u,v,y,z]),(0,e.A)(t,"6051a3cb9c1489e94b9741fe9a142b1b58858be740",null),(0,e.A)(u,"6011efcd5f9a67e7dec53f5da330864861c247d019",null),(0,e.A)(v,"40a4640774333424c5449a44e98de64128d4152bf2",null),(0,e.A)(y,"0080937ee67870c581bc0d2cdd15e6f2d732d1f79d",null),(0,e.A)(z,"6003a02fded522bf2a29121816901cb241f523cc45",null),d()}catch(a){d(a)}})},84913:(a,b,c)=>{c.d(b,{$:()=>i});var d=c(63003);c(34750);var e=c(86209),f=c(65715),g=c(26290);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})}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports.id=9455,exports.ids=[9455],exports.modules={4867:(a,b,c)=>{"use strict";c.d(b,{A:()=>e});var d=c(3265);let e=(0,d.createServerReference)("40edcdfb0c67ebf35498a6aff6d1926081f669f235",d.callServer,void 0,d.findSourceMapURL,"saveGeminiKeyAction")},6993:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(63003),e=c(9310),f=c(24576);async function g({children:a,params:b}){let{id:c}=await b;return await (0,f.Zn)(c)||(0,e.notFound)(),(0,d.jsx)("div",{className:"flex-1 flex flex-col min-h-0",children:a})}},56077:(a,b,c)=>{"use strict";c.d(b,{p:()=>w});var d=c(64173),e=c(17240),f=c(90775),g=c(56992),h=c(39755),i=c(66979),j=c(14878),k=c(62261),l=c(69552),m=c(96705),n=c(13530),o=c(12619),p=c(73569),q=c(44052),r=c(20583),s=c(47071),t=c(3265);let u=(0,t.createServerReference)("40bdf5387ecda8d30ee1ae616c85733f882df67754",t.callServer,void 0,t.findSourceMapURL,"summarizeYoutubeAction");var v=c(4867);function w({source:a,onSendToChat:b,autoSummarizeYoutube:c}){let[i,j]=(0,e.useState)(null);return(0,d.jsxs)("div",{className:"prose prose-neutral dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:rounded-md [&_pre]:p-4 [&_pre]:overflow-x-auto [&_pre]:text-sm [&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-foreground [&_:not(pre)>code]:bg-muted [&_:not(pre)>code]:px-1.5 [&_:not(pre)>code]:py-0.5 [&_:not(pre)>code]:rounded [&_:not(pre)>code]:text-[0.9em] [&_code]:font-mono [&_table]:text-sm",children:[(0,d.jsx)(f.oz,{remarkPlugins:[g.A],rehypePlugins:[[h.A,{detect:!0,ignoreMissing:!0}]],components:{a:({href:a,children:e,...f})=>{let g=a?function(a){try{let b=new URL(a),c=b.hostname.replace(/^www\./,"");if("youtu.be"===c){let a=b.pathname.slice(1).split("/")[0];return a&&/^[A-Za-z0-9_-]{6,}$/.test(a)?a:null}if("youtube.com"===c||"m.youtube.com"===c||"youtube-nocookie.com"===c){if("/watch"===b.pathname){let a=b.searchParams.get("v");return a&&/^[A-Za-z0-9_-]{6,}$/.test(a)?a:null}let a=/^\/(shorts|embed|live|v)\/([^/?#]+)/.exec(b.pathname);if(a&&/^[A-Za-z0-9_-]{6,}$/.test(a[2]))return a[2]}}catch{}return null}(a):null;return g&&a?(0,d.jsx)(z,{url:a,videoId:g,autoSummarize:c??!1,...b?{onSendToChat:b}:{}}):(0,d.jsx)("a",{href:a,...f,children:e})},img:({src:a,alt:b,title:c})=>"string"!=typeof a||0===a.length?null:(0,d.jsx)(x,{src:a,alt:"string"==typeof b?b:"",title:"string"==typeof c?c:void 0,onZoom:a=>j(a)})},children:a}),i&&(0,d.jsx)(y,{src:i.src,alt:i.alt,onClose:()=>j(null)})]})}function x({src:a,alt:b,title:c,onZoom:e}){return(0,d.jsx)("img",{src:a,alt:b,title:c??b??"Открыть на весь экран",onClick:()=>e({src:a,alt:b}),className:"cursor-zoom-in rounded-md border bg-muted/40 transition hover:opacity-90",loading:"lazy"})}function y({src:a,alt:b,onClose:c}){return(0,e.useCallback)(a=>{"Escape"===a.key&&c()},[c]),(0,d.jsxs)("div",{className:"fixed inset-0 z-[80] flex items-center justify-center p-6 bg-background/85 backdrop-blur-sm cursor-zoom-out",onClick:c,role:"dialog","aria-label":b||"Просмотр изображения",children:[(0,d.jsx)(r.$,{type:"button",size:"icon",variant:"ghost",className:"absolute top-4 right-4 h-9 w-9 bg-card/80 hover:bg-card",onClick:a=>{a.stopPropagation(),c()},"aria-label":"Закрыть",children:(0,d.jsx)(i.A,{className:"h-5 w-5"})}),(0,d.jsx)("img",{src:a,alt:b,className:"max-h-full max-w-full object-contain rounded-lg shadow-2xl",onClick:a=>a.stopPropagation()}),b&&(0,d.jsx)("div",{className:"absolute bottom-6 inset-x-0 mx-auto max-w-3xl px-6 text-center text-sm text-foreground/80 pointer-events-none",children:b})]})}function z({url:a,videoId:b,onSendToChat:c,autoSummarize:f}){let[g,h]=(0,e.useTransition)(),[t,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(""),[B,C]=(0,e.useState)(!1);(0,e.useRef)(!1);let D=()=>{w(null),h(async()=>{let b=await u({url:a});if(b.ok){w(b.text),y(!1);return}if(b.needsKey)return void y(!0);q.oR.error(b.error)})},E=async()=>{if(!z.trim())return void q.oR.error("Введи ключ");C(!0);try{let a=await (0,v.A)(z.trim());if(!a.ok)return void q.oR.error(a.error);q.oR.success("Gemini key сохранён"),A(""),y(!1),D()}finally{C(!1)}};return(0,d.jsxs)("span",{className:"not-prose my-4 block rounded-lg border bg-card overflow-hidden",children:[(0,d.jsx)("span",{className:"relative block w-full",style:{paddingTop:"56.25%"},children:(0,d.jsx)("iframe",{src:`https://www.youtube-nocookie.com/embed/${b}`,className:"absolute inset-0 h-full w-full",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerPolicy:"strict-origin-when-cross-origin",allowFullScreen:!0,title:"YouTube video"})}),(0,d.jsxs)("span",{className:"flex items-center gap-2 p-2 border-t bg-muted/30",children:[(0,d.jsx)(j.A,{className:"h-4 w-4 text-red-600 shrink-0"}),(0,d.jsx)("a",{href:a,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-muted-foreground hover:underline truncate flex-1 min-w-0",children:a}),(0,d.jsxs)(r.$,{type:"button",size:"sm",variant:"outline",onClick:D,disabled:g,className:"gap-1 shrink-0 h-7",children:[g?(0,d.jsx)(k.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(l.A,{className:"h-3 w-3"}),"Суммаризировать"]})]}),x&&(0,d.jsxs)("span",{className:"block border-t bg-amber-50/60 p-3 space-y-2",children:[(0,d.jsxs)("span",{className:"flex items-center gap-2 text-xs text-amber-900",children:[(0,d.jsx)(m.A,{className:"h-3.5 w-3.5"}),(0,d.jsx)("span",{className:"font-medium",children:"Нужен Gemini API key"})]}),(0,d.jsxs)("span",{className:"block text-[11px] text-amber-900/80",children:["Возьми ключ в"," ",(0,d.jsx)("a",{href:"https://aistudio.google.com/apikey",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"aistudio.google.com/apikey"})," ","— бесплатный tier (15 RPM / 1500 RPD). Сохранится в"," ",(0,d.jsx)("code",{className:"font-mono",children:"~/.reflex/api-keys/gemini.json"})," ","(0600), агентам не передаётся. Модель подтянется автоматически из"," ",(0,d.jsx)("code",{className:"font-mono",children:"models.list"})," (по умолчанию — самая быстрая flash); сменить можно в Settings → Gemini."]}),(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)(s.p,{type:"password",value:z,onChange:a=>A(a.target.value),placeholder:"AIza…",className:"font-mono text-xs h-8 flex-1",disabled:B}),(0,d.jsxs)(r.$,{type:"button",size:"sm",onClick:()=>void E(),disabled:B||!z.trim(),className:"h-8 gap-1",children:[B?(0,d.jsx)(k.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(n.A,{className:"h-3 w-3"}),"Сохранить и продолжить"]}),(0,d.jsx)(r.$,{type:"button",size:"icon",variant:"ghost",onClick:()=>y(!1),className:"h-8 w-8",children:(0,d.jsx)(i.A,{className:"h-3.5 w-3.5"})})]})]}),t&&(0,d.jsxs)("span",{className:"block border-t p-3 space-y-2",children:[(0,d.jsxs)("span",{className:"flex items-center gap-2 text-[11px] uppercase tracking-wider text-muted-foreground",children:[(0,d.jsx)(o.A,{className:"h-3 w-3 text-emerald-600"}),"Gemini summary",(0,d.jsxs)(r.$,{type:"button",size:"sm",variant:"ghost",onClick:D,className:"ml-auto h-6 text-[10px] gap-1",disabled:g,children:[g?(0,d.jsx)(k.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(l.A,{className:"h-3 w-3"}),"Переделать"]}),c&&(0,d.jsxs)(r.$,{type:"button",size:"sm",variant:"outline",onClick:()=>c(t,a),className:"h-6 text-[10px] gap-1",children:[(0,d.jsx)(p.A,{className:"h-3 w-3"}),"В чат"]})]}),(0,d.jsx)("span",{className:"block",children:(0,d.jsx)("span",{className:"block text-sm whitespace-pre-wrap leading-relaxed",children:t})})]})]})}},80432:()=>{},90160:()=>{}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
exports.id=9579,exports.ids=[1960,9579],exports.modules={29579:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{runServerAction:()=>m});var e=c(75919),f=c(76760),g=c.n(f),h=c(73136),i=c(47300),j=c(62485),k=c(25475),l=a([i,j]);async function m(a){let b=(0,i.actionBundlePath)(a.utility.dir,a.action.name),c=(0,h.pathToFileURL)(b).toString(),d=function(){let a=
|
|
1
|
+
exports.id=9579,exports.ids=[1960,9579],exports.modules={29579:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{runServerAction:()=>m});var e=c(75919),f=c(76760),g=c.n(f),h=c(73136),i=c(47300),j=c(62485),k=c(25475),l=a([i,j]);async function m(a){let b=(0,i.actionBundlePath)(a.utility.dir,a.action.name),c=(0,h.pathToFileURL)(b).toString(),d=function(){let a="lib/server/utilities/worker-bootstrap.js",b=process.env.REFLEX_PKG_ROOT;if(b)return g().resolve(b,a);let c=null;try{c=95679}catch{}return"string"==typeof c&&g().isAbsolute(c)?c:g().resolve(process.cwd(),a)}();return new Promise((b,f)=>{let g=new e.Worker(d,{workerData:{bundleUrl:c,actionName:a.action.name,utilityId:a.utility.manifest.id,scope:a.utility.scope},env:{},eval:!1,resourceLimits:{maxOldGenerationSizeMb:256,maxYoungGenerationSizeMb:64}}),h=!1,i=(c,d,e)=>{h||(h=!0,clearTimeout(l),g.removeAllListeners(),g.terminate().catch(()=>{}),c?((0,k.u0)({ts:new Date().toISOString(),utilityId:a.utility.manifest.id,scope:a.utility.scope,channel:"worker",method:`action:${a.action.name}`,phase:"end",correlationId:a.parentCorrelationId??"(detached)",error:e??c.message}),f(c)):b(d))},l=setTimeout(()=>{i(Error("server action timed out"),void 0,"timeout")},a.action.timeoutMs);g.on("error",a=>i(a)),g.on("exit",a=>{0!==a&&i(Error(`worker exited with code ${a}`))}),g.on("message",async b=>{if(b&&"object"==typeof b){if("host-rpc"===b.type){let c=b.id,d=b.method,e=b.args;try{let b=await (0,j.p)({utility:a.utility,channel:"worker",...a.parentCorrelationId?{parentCorrelationId:a.parentCorrelationId}:{}},d,e);g.postMessage({type:"host-rpc-result",id:c,ok:!0,result:b})}catch(a){g.postMessage({type:"host-rpc-result",id:c,ok:!1,error:a instanceof Error?a.message:String(a)})}return}"invoke-result"===b.type&&(b.ok?i(null,b.result):i(Error(b.error||"server action failed")))}}),g.postMessage({type:"invoke",args:a.args})})}[i,j]=l.then?(await l)():l,d()}catch(a){d(a)}})},46735:a=>{function b(a){return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b})}b.keys=()=>[],b.resolve=b,b.id=46735,a.exports=b},95679:(a,b,c)=>{"use strict";var d=c(75919);if(!d.parentPort)throw Error("worker-bootstrap.js must be loaded as a worker_threads child");let e=new Map,f=1,g=new Proxy({},{get(a,b){if("string"==typeof b)return new Proxy({},{get(a,c){if("string"==typeof c)return a=>new Promise((g,h)=>{let i=f++;e.set(i,{resolve:g,reject:h}),d.parentPort.postMessage({type:"host-rpc",id:i,method:`${b}.${c}`,args:a})})}})}});globalThis.__reflexHost=g,d.parentPort.on("message",async a=>{if(a&&"host-rpc-result"===a.type){let b=e.get(a.id);if(!b)return;e.delete(a.id),a.ok?b.resolve(a.result):b.reject(Error(a.error||"rpc failed"));return}if(a&&"invoke"===a.type)try{let b=await c(46735)(d.workerData.bundleUrl),e=b[d.workerData.actionName]??b.default;if("function"!=typeof e)throw Error(`action "${d.workerData.actionName}" must export a function (named export or default)`);let f=await e(a.args,g);d.parentPort.postMessage({type:"invoke-result",ok:!0,result:f})}catch(a){d.parentPort.postMessage({type:"invoke-result",ok:!1,error:a&&a.message?a.message:String(a)})}})}};
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"functions": {
|
|
4
4
|
"/api/images/[rootId]/[file]": {},
|
|
5
|
-
"/api/agents/[agentId]/respond": {},
|
|
6
5
|
"/api/oauth/callback": {},
|
|
6
|
+
"/api/agents/[agentId]/respond": {},
|
|
7
7
|
"/api/oauth/start": {},
|
|
8
8
|
"/api/roots/[id]/attachments": {},
|
|
9
|
-
"/api/roots/[id]/chat/[topicId]/stop": {},
|
|
10
9
|
"/api/roots/[id]/chat/[topicId]/send": {},
|
|
10
|
+
"/api/roots/[id]/chat/[topicId]/stop": {},
|
|
11
11
|
"/api/roots/[id]/chat/[topicId]/stream": {},
|
|
12
12
|
"/api/roots/[id]/dashboard": {},
|
|
13
13
|
"/api/roots/[id]/suggestions": {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-87b4bb79fdc48563.js","static/chunks/6fe292aa-7126ff9d6732e864.js","static/chunks/146-ccee3b26755b68c8.js","static/chunks/main-app-ebe67847147d19aa.js"],rootMainFilesTree:{},pages:{"/_app":["static/chunks/webpack-87b4bb79fdc48563.js","static/chunks/framework-aaa7c1a953276299.js","static/chunks/main-bfb98fc1d6aa1d45.js","static/chunks/pages/_app-bf8bc157ace53d59.js"],"/_error":["static/chunks/webpack-87b4bb79fdc48563.js","static/chunks/framework-aaa7c1a953276299.js","static/chunks/main-bfb98fc1d6aa1d45.js","static/chunks/pages/_error-da89ab2956f0cf38.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"wasm": [],
|
|
18
18
|
"assets": [],
|
|
19
19
|
"env": {
|
|
20
|
-
"__NEXT_BUILD_ID": "
|
|
21
|
-
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "
|
|
22
|
-
"__NEXT_PREVIEW_MODE_ID": "
|
|
23
|
-
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "
|
|
24
|
-
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "
|
|
20
|
+
"__NEXT_BUILD_ID": "vTfQfQnAWV_hFVZjWEYvZ",
|
|
21
|
+
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "7XEzYJZ8//+b6sm3itIR0baYkMa2rkEpIdgfHhBwp2s=",
|
|
22
|
+
"__NEXT_PREVIEW_MODE_ID": "1ffe520e66fb40c4cf4834adc6c691c0",
|
|
23
|
+
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "f5aa5dc8e75acb66d3d18008e5e327cc0a0833ae96370bec1cf621e138c35af3",
|
|
24
|
+
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "94dfddd8aa6af6ebece63d522baff3ec190fc97e6d9e48d50389ea0d73f957ca"
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__REACT_LOADABLE_MANIFEST='{"app/roots/[id]/chat/[topicId]/_components/interaction-cards.tsx -> @/lib/server/oauth-actions":{"id":94108,"files":["static/chunks/4108.
|
|
1
|
+
self.__REACT_LOADABLE_MANIFEST='{"app/roots/[id]/chat/[topicId]/_components/interaction-cards.tsx -> @/lib/server/oauth-actions":{"id":94108,"files":["static/chunks/4108.1ef6b5e7679b56ac.js"]}}';
|