reflex-agent 0.2.4 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +111 -98
- package/.next/app-path-routes-manifest.json +9 -9
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +4 -54
- 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.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/agents/[agentId]/page.js +3 -3
- package/.next/server/app/agents/[agentId]/page.js.nft.json +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 +2 -2
- package/.next/server/app/api/agents/[agentId]/respond/route.js.nft.json +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route.js +3 -3
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.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 +2 -2
- package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route.js.nft.json +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 +2 -2
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route.js.nft.json +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.js.nft.json +1 -1
- 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.js.nft.json +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 +2 -2
- package/.next/server/app/api/utilities/[scope]/[id]/host/route.js.nft.json +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/onboarding/page.js +4 -4
- package/.next/server/app/onboarding/page.js.nft.json +1 -1
- 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 +2 -6
- 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 +2 -6
- 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.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/workflows/[wfId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/workflows/page.js +2 -2
- 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 +4 -2
- package/.next/server/app/roots/new/page.js.nft.json +1 -1
- package/.next/server/app/roots/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +6 -6
- 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.js.nft.json +1 -1
- 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 +2 -17
- package/.next/server/app/utilities/page.js.nft.json +1 -1
- package/.next/server/app/utilities/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +9 -9
- package/.next/server/chunks/1223.js +1 -1
- package/.next/server/chunks/133.js +1 -490
- package/.next/server/chunks/1888.js +1 -1
- package/.next/server/chunks/{9739.js → 1988.js} +13 -9
- package/.next/server/chunks/2433.js +1 -1
- package/.next/server/chunks/2503.js +1 -1
- package/.next/server/chunks/285.js +471 -0
- package/.next/server/chunks/2959.js +1 -0
- package/.next/server/chunks/2995.js +1 -0
- package/.next/server/chunks/3240.js +1 -1
- package/.next/server/chunks/3332.js +1 -1
- package/.next/server/chunks/3657.js +1 -1
- package/.next/server/chunks/4066.js +1 -1
- package/.next/server/chunks/4438.js +1 -0
- package/.next/server/chunks/4514.js +3 -0
- package/.next/server/chunks/4553.js +1 -1
- package/.next/server/chunks/4812.js +179 -0
- package/.next/server/chunks/4925.js +1 -1
- package/.next/server/chunks/{3953.js → 5068.js} +2 -2
- package/.next/server/chunks/5319.js +1 -1
- package/.next/server/chunks/569.js +1 -1
- package/.next/server/chunks/6730.js +1 -1
- package/.next/server/chunks/6909.js +142 -161
- package/.next/server/chunks/8262.js +1 -1
- package/.next/server/chunks/9098.js +1 -1
- package/.next/server/chunks/94.js +1 -1
- package/.next/server/chunks/9427.js +1 -0
- package/.next/server/chunks/9538.js +1 -0
- package/.next/server/chunks/963.js +1 -0
- package/.next/server/chunks/9835.js +1 -1
- 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/500.html +1 -1
- package/.next/server/pages-manifest.json +1 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2865-134f546f21ca4330.js +1 -0
- package/.next/static/chunks/4108.5abdb7812a13eafd.js +1 -0
- package/.next/static/chunks/5254-4196f25e56270de5.js +1 -0
- package/.next/static/chunks/5521-cbc665104c7e59d3.js +1 -0
- package/.next/static/chunks/6445-99824866a51b582a.js +1 -0
- package/.next/static/chunks/8855-9b941d2b78f398ce.js +1 -0
- package/.next/static/chunks/8871-2948840b33c0863d.js +1 -0
- package/.next/static/chunks/9411-af5f758c57741929.js +3 -0
- package/.next/static/chunks/app/agents/[agentId]/page-5d6f4cb16b42d02b.js +1 -0
- package/.next/static/chunks/app/layout-d4cf24375db6d793.js +1 -0
- package/.next/static/chunks/app/onboarding/page-7303664b62ccc24a.js +1 -0
- package/.next/static/chunks/app/page-97d312db91d569f7.js +1 -0
- package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-123f60a544619a3c.js +1 -0
- package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-e253597edb1b2440.js +1 -0
- package/.next/static/chunks/app/roots/[id]/page-91a8de6a1c79f8a3.js +1 -0
- package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-4300a52e163883df.js +1 -0
- package/.next/static/chunks/app/roots/new/page-6b104aad46a38173.js +1 -0
- package/.next/static/chunks/app/settings/page-afe1b80f7f45c5eb.js +1 -0
- package/.next/static/chunks/app/share/[id]/page-a5fb565bd892d4df.js +1 -0
- package/.next/static/chunks/app/utilities/[scope]/[id]/page-eb713a2b5209942c.js +1 -0
- package/.next/static/chunks/app/utilities/page-b7f30c151c42a27c.js +1 -0
- package/.next/static/chunks/{webpack-5fca180586957874.js → webpack-bddc3babcbc30dd7.js} +1 -1
- package/.next/static/css/60e9b6cdf1283e83.css +1 -0
- package/.next/trace +47 -46
- package/dist/lib/reflex/agents/prompts.js +46 -46
- package/dist/lib/reflex/agents/prompts.js.map +1 -1
- package/dist/lib/reflex/prompts/defaults.js +102 -102
- package/next.config.ts +4 -1
- package/package.json +2 -2
- package/.next/server/app/_not-found.html +0 -1
- package/.next/server/app/_not-found.meta +0 -8
- package/.next/server/app/_not-found.rsc +0 -18
- package/.next/server/app/index.html +0 -1
- package/.next/server/app/index.meta +0 -9
- package/.next/server/app/index.rsc +0 -19
- package/.next/server/chunks/1410.js +0 -1
- package/.next/server/chunks/1986.js +0 -1
- package/.next/server/chunks/2448.js +0 -3
- package/.next/server/chunks/5754.js +0 -3
- package/.next/server/chunks/7097.js +0 -1
- package/.next/server/chunks/7782.js +0 -1
- package/.next/server/chunks/7987.js +0 -1
- package/.next/server/chunks/810.js +0 -1
- package/.next/server/chunks/8843.js +0 -1
- package/.next/server/chunks/9328.js +0 -179
- package/.next/server/pages/404.html +0 -1
- package/.next/static/chunks/2488-c9590facb4b9f184.js +0 -1
- package/.next/static/chunks/2684-257d38989ef53935.js +0 -1
- package/.next/static/chunks/4108.fb9f99a9c899ef54.js +0 -1
- package/.next/static/chunks/6231-d83c1544bbea8424.js +0 -1
- package/.next/static/chunks/9045-731ff0865352dd95.js +0 -1
- package/.next/static/chunks/9496-75ccd3fadb294fba.js +0 -1
- package/.next/static/chunks/992-4e7b7f722c629e21.js +0 -1
- package/.next/static/chunks/app/agents/[agentId]/page-0b5c2838354d0eba.js +0 -1
- package/.next/static/chunks/app/layout-9a59ed07c18cb786.js +0 -1
- package/.next/static/chunks/app/onboarding/page-79f07a813ea2abfe.js +0 -1
- package/.next/static/chunks/app/page-27f4b98b02ac4f79.js +0 -1
- package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-8db2d0b75cd333c8.js +0 -1
- package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-873b131eec3a2f30.js +0 -1
- package/.next/static/chunks/app/roots/[id]/page-270d0d49eb668784.js +0 -1
- package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-7c1f10dbe0bcb9ad.js +0 -1
- package/.next/static/chunks/app/roots/new/page-ac1a9f6379710ca2.js +0 -1
- package/.next/static/chunks/app/settings/page-81cb1393e817dfc3.js +0 -1
- package/.next/static/chunks/app/share/[id]/page-2d123f0a99e1606f.js +0 -1
- package/.next/static/chunks/app/utilities/[scope]/[id]/page-0bbb8d17af80c1da.js +0 -1
- package/.next/static/chunks/app/utilities/page-e6ce673b9357bf1f.js +0 -1
- package/.next/static/css/87e01f779d555d04.css +0 -1
- package/packages/utilities/learn-anything/README.md +0 -41
- package/packages/utilities/learn-anything/actions/_json.ts +0 -191
- package/packages/utilities/learn-anything/actions/_store.ts +0 -248
- package/packages/utilities/learn-anything/actions/buildModule.ts +0 -487
- package/packages/utilities/learn-anything/actions/explainSelection.ts +0 -64
- package/packages/utilities/learn-anything/actions/generateOutline.ts +0 -170
- package/packages/utilities/learn-anything/actions/generateQuiz.ts +0 -72
- package/packages/utilities/learn-anything/actions/generateTrainer.ts +0 -106
- package/packages/utilities/learn-anything/actions/refreshCourseCard.ts +0 -76
- package/packages/utilities/learn-anything/actions/tutorAsk.ts +0 -93
- package/packages/utilities/learn-anything/article-view.tsx +0 -464
- package/packages/utilities/learn-anything/manifest.json +0 -42
- package/packages/utilities/learn-anything/ui.tsx +0 -1589
- /package/.next/static/{og_wC7UPkGtJDiapaTgBr → IGuuMcet1qtGZQCP2MEn4}/_buildManifest.js +0 -0
- /package/.next/static/{og_wC7UPkGtJDiapaTgBr → IGuuMcet1qtGZQCP2MEn4}/_ssgManifest.js +0 -0
|
@@ -1,490 +1 @@
|
|
|
1
|
-
exports.id=133,exports.ids=[133],exports.modules={580:(a,b,c)=>{"use strict";c.d(b,{S:()=>t,addMcpServer:()=>r,getMcpServer:()=>q,listMcpServers:()=>p,updateMcpServer:()=>s});var d=c(73024),e=c(76760),f=c.n(e),g=c(56149),h=c(97453),i=c(73652);let j=f().join((0,i._)(),"mcp"),k=f().join(j,"servers.json"),l=g.Ik({id:g.Yj().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/,"id must start with a letter; letters, digits, '_' and '-' allowed"),label:g.Yj().min(1).max(120),description:g.Yj().max(2e3).default(""),config:h.McpConfigSchema,addedAt:g.Yj(),lastVerifiedAt:g.Yj().optional()}),m=g.Ik({version:g.eu(1),servers:g.YO(l)});async function n(){try{let a=await d.promises.readFile(k,"utf8"),b=m.safeParse(JSON.parse(a));if(!b.success)return{version:1,servers:[]};return b.data}catch{return{version:1,servers:[]}}}async function o(a){await d.promises.mkdir(j,{recursive:!0}),await d.promises.writeFile(k,JSON.stringify(a,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(k,384)}catch{}}async function p(){return[...(await n()).servers].sort((a,b)=>a.id.localeCompare(b.id))}async function q(a){return(await n()).servers.find(b=>b.id===a)??null}async function r(a){let b=l.parse({id:a.id,label:a.label,description:a.description??"",config:a.config,addedAt:new Date().toISOString()}),c=await n();if(c.servers.some(a=>a.id===b.id))throw Error(`MCP server "${b.id}" already exists`);return c.servers.push(b),await o(c),b}async function s(a,b){let c=await n(),d=c.servers.findIndex(b=>b.id===a);if(d<0)throw Error(`MCP server "${a}" not found`);let e=l.parse({...c.servers[d],...b});return c.servers[d]=e,await o(c),e}async function t(a){let b=await n(),c=b.servers.filter(b=>b.id!==a);c.length!==b.servers.length&&(b.servers=c,await o(b))}},875:(a,b,c)=>{"use strict";c.d(b,{$4:()=>f,FB:()=>g,GX:()=>l,YE:()=>k,dA:()=>h,vl:()=>j,wr:()=>e,wt:()=>i});var d=c(96921);function e(a){let b=(0,d.dr)(a);return b&&("plan"===b.def.id||"goal"===b.def.id)?{kind:b.def.id,text:b.payload}:null}function f(a){return`## /plan — Plan-first mode
|
|
2
|
-
|
|
3
|
-
Reply in ${a}. **Before doing anything**, lay out a clear, numbered step-by-step plan. Each step should be concrete and verifiable.
|
|
4
|
-
|
|
5
|
-
Once the plan is ready, emit a question marker requesting approval:
|
|
6
|
-
|
|
7
|
-
<<reflex:question>>{"prompt":"Approve this plan?","choices":["approve","revise"]}<</reflex:question>>
|
|
8
|
-
|
|
9
|
-
Then STOP and wait for the user's reply.
|
|
10
|
-
|
|
11
|
-
On the next turn:
|
|
12
|
-
- If the user approved → execute the plan, narrating progress and tools used.
|
|
13
|
-
- If the user asked to revise/change → update the plan and emit another approval question.
|
|
14
|
-
Iterate until the user explicitly approves. Do not begin execution until then.`}function g(a,b){return`## /goal — Persistent goal mode (do not stop until validated)
|
|
15
|
-
|
|
16
|
-
Active goal: ${a}
|
|
17
|
-
|
|
18
|
-
Reply in ${b}. Reflex will keep re-invoking you turn after turn until the goal is achieved AND validated. Don't write filler — every turn must move the task forward.
|
|
19
|
-
|
|
20
|
-
Workflow each turn:
|
|
21
|
-
1. Take the next concrete action toward the goal (use tools when needed: Read, Glob, Grep, WebSearch, WebFetch, etc.).
|
|
22
|
-
2. Show your work briefly so the user can audit progress.
|
|
23
|
-
3. When you believe the goal is complete, **validate it** (verify with a tool: read the file, fetch the URL, run a search). Don't claim completion without evidence.
|
|
24
|
-
4. After successful validation, emit a KB record:
|
|
25
|
-
|
|
26
|
-
<<reflex:kb>>{"kind":"goal-completion","title":"<short>","body":"<what was done + validation evidence>","meta":{"goal":${JSON.stringify(a)}}}<</reflex:kb>>
|
|
27
|
-
|
|
28
|
-
And END your message with the literal phrase on its own line:
|
|
29
|
-
|
|
30
|
-
GOAL ACHIEVED
|
|
31
|
-
|
|
32
|
-
If you genuinely need user input mid-flight (clarification, permission for a risky action, missing data), pause via <<reflex:question>> or <<reflex:permission>>. Those markers stop auto-continuation; everything else keeps the loop going.`}function h(a,b){return["## /research — Deep research mode (this turn)","",`Reply in ${b}.`,a?`Тема: ${a}`:"","","Подход:"," 1. Делегируй основной поиск sub-агенту с ролью `researcher` через `<<reflex:dispatch>>` (одним маркером — он сам пройдётся по web + KB)."," 2. Если возможно — несколько researcher'ов параллельно с разными углами (например: \xabистория\xbb, \xabтекущее состояние\xbb, \xabкритика\xbb)."," 3. Дождись результатов, **компонуй синтез**: сходства, разногласия, белые пятна. Цитируй источники со ссылками.",' 4. В конце предложи сохранить ключевые факты в KB маркером `<<reflex:kb>>` (kind="research-note") — но дождись подтверждения.'," 5. Если тема глубокая — предложи виджет `news-list` или `link-list` через `<<reflex:widget-create>>`.","","Не отвечай из памяти модели — гони через WebSearch/WebFetch."].filter(Boolean).join("\n")}function i(a,b){return["## /widget — Создание виджета на дашборде","",`Reply in ${b}.`,a?`Запрос пользователя: ${a}`:"","","Правила:"," 1. Выбери подходящий `kind` (см. блок про widgets в системном промпте). Если запрос неоднозначный — спроси через `<<reflex:question>>`."," 2. Подбери стабильный kebab-case `id`, который потом можно будет переиспользовать для widget-update."," 3. Если нужны актуальные данные (новости, цены, статусы) — собери через WebSearch/WebFetch перед эмитом."," 4. Эмить **один** `<<reflex:widget-create>>` маркер в этом ходе, потом коротко расскажи пользователю что появилось на дашборде.",' 5. Если виджет имеет смысл авто-обновлять — поставь `refresh: "hourly"|"daily"|"weekly"` и опиши `memory` для дедупа/истории.'].filter(Boolean).join("\n")}function j(a,b){return["## /workflow — Сборка workflow (n8n-style линейный рецепт)","",`Reply in ${b}.`,a?`Запрос пользователя: ${a}`:"","","Правила:"," 1. Если задача неоднозначная (что входит, куда писать, как часто) — задай 1-3 уточняющих вопроса через `<<reflex:question>>` ОДНИМ блоком. Не угадывай."," 2. Шаги КОРОТКИЕ (3-5). Поддерживаемые типы: `text-template`, `http-request`, `web-fetch`, `ask-agent`, `kb-write`. Если задача шире — разбей на несколько workflows."," 3. `id` каждого шага — стабильный kebab-case (его используют шаблоны: `{{steps.<id>.output}}`)."," 4. Trigger по умолчанию `manual`. `hourly/daily/weekly` ставь, только если пользователь явно попросил периодичность."," 5. Эмить **один** `<<reflex:workflow-create>>` маркер в этом ходе. Не дублируй JSON в текст — карточка превью отрендерится в чате автоматически."," 6. После маркера — короткий план словами: что workflow делает по шагам, как запустить, что появится в результате."].filter(Boolean).join("\n")}function k(a,b){return["## /mcp — Подключение MCP-сервера","",`Reply in ${b}.`,a?`Запрос: ${a}`:"Пользователь хочет подключить MCP-сервер, но не уточнил какой.","","Действуй как MCP-визард:"," 1. Если запрос конкретный (например \xabgithub mcp\xbb, \xabnotion\xbb) — сразу подбери конфиг и предложи через `<<reflex:mcp-add>>`. Не забудь про secrets-слоты с описанием где взять токен."," 2. Если запрос абстрактный — спроси через `<<reflex:question>>` что нужно подключить (Notion / Slack / GitHub / Linear / другое)."," 3. Если речь о существующем сервере — попроси использовать его инструменты, не предлагай add-карточку повторно."].filter(Boolean).join("\n")}let l=15},1405:(a,b,c)=>{"use strict";c.d(b,{SYSTEM_WIDGET_IDS:()=>e,VQ:()=>d,hU:()=>f});let d={hourly:36e5,daily:864e5,weekly:6048e5},e=["sys:active-goals","sys:pending","sys:recent-kb","sys:ai-suggestions"],f=["markdown","news-list","link-list","kpi","checklist","quote","kb-pinned","progress","image","stat-table","map","utility-card"]},3724:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{runHeadlessAgent:()=>l});var e=c(93554),f=c(51021),g=c(20243),h=c(5492),i=c(36017),j=c(53905),k=a([e,f]);async function l(a){let b=await (0,j.Zn)(a.rootId);if(!b)throw Error(`runHeadlessAgent: root not found: ${a.rootId}`);let c=await (0,i.M)(),d=c.assignments.chat,k=await (0,h.OY)({root:b.path,firstMessage:a.label??"[headless agent run]",harness:a.harness??d.harness,model:a.model??d.model,language:a.language??c.language}),l=!1;try{let c=await (0,f.W)({rootId:a.rootId,topicId:k.meta.id,message:a.prompt,attachments:a.attachments??[],...a.harness?{harness:a.harness}:{},...a.model?{model:a.model}:{}});if("error"in c)throw Error(c.error);let d=Date.now()+(a.timeoutMs??3e5);for(await m(400);Date.now()<d&&e.z.isActive(k.meta.id);)await m(400);e.z.isActive(k.meta.id)&&(l=!0),await m(400);let h=await (0,g.readEvents)(b.path,k.meta.id),i=h.filter(a=>"assistant-delta"===a.type).map(a=>a.text).join("").trim();if(!i){let b=h.filter(a=>"error"===a.type).map(a=>a.message).filter(Boolean);if(b.length>0)throw Error(`Агент завершился с ошибкой: ${b.slice(0,3).join(" \xb7 ")}`);let c=h.filter(a=>"system"===a.type).map(a=>a.text).filter(Boolean);if(c.length>0)return{text:c.join("\n"),topicId:k.meta.id,timedOut:l};if(l)throw Error(`Агент не ответил за ${Math.round((a.timeoutMs??3e5)/1e3)}с (timeout)`);throw Error("Агент завершил работу не оставив текстового ответа — возможно, не настроен chat-движок в Settings.")}return{text:i,topicId:k.meta.id,timedOut:l}}finally{try{await e.z.stopTopic(k.meta.id)}catch{}try{await (0,h.do)(b.path,k.meta.id)}catch{}}}function m(a){return new Promise(b=>setTimeout(b,a))}[e,f]=k.then?(await k)():k,d()}catch(a){d(a)}})},3890:(a,b,c)=>{"use strict";c.d(b,{u:()=>j,z:()=>k});var d=c(73745);c(66493);var e=c(76760),f=c.n(e),g=c(53905),h=c(19319),i=c(5492);async function j(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,h.dj)(b.path);return{ok:!0,sections:function(a){let b=[],c=new Map;for(let e of a){let a=e.rel.split("/");if(1===a.length){var d;b.push({rel:(d=e).rel,label:d.meta.title??d.rel,isDir:!1,fileRel:d.rel});continue}let f=a[0],g=c.get(f)??[];g.push(e),c.set(f,g)}let e=[];for(let a of(b.sort(l),e.push(...b),[...c.keys()].sort())){let b=(c.get(a)??[]).map(a=>{let b=a.rel.split("/").slice(1).join("/");return{rel:a.rel,label:a.meta.title??f().basename(b),isDir:!1,fileRel:a.rel}}).sort((a,b)=>"INDEX.md"===f().basename(a.rel)?-1:"INDEX.md"===f().basename(b.rel)?1:a.label.localeCompare(b.label)),d=b.find(a=>"INDEX.md"===f().basename(a.rel)),g=d?.label??a;e.push({rel:`${a}/`,label:g,isDir:!0,children:b})}return e}(c)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function k(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=await (0,i.hk)(b.path);return{ok:!0,topics:c.map(a=>({id:a.meta.id,title:a.meta.title,updatedAt:a.meta.updatedAt}))}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}function l(a,b){let c=f().basename(a.rel),d=f().basename(b.rel);return"INDEX.md"===c?-1:"INDEX.md"===d?1:a.label.localeCompare(b.label)}(0,c(63781).D)([j,k]),(0,d.A)(j,"409f4b5447b4175cc96d5a403d470e05b0b0241e3e",null),(0,d.A)(k,"405f0143d37a718a80ca822d2f14b2c1e4b0fd205e",null)},5053:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,53869,23)),Promise.resolve().then(c.t.bind(c,85684,23)),Promise.resolve().then(c.t.bind(c,89338,23)),Promise.resolve().then(c.t.bind(c,65597,23)),Promise.resolve().then(c.t.bind(c,41833,23)),Promise.resolve().then(c.t.bind(c,63921,23)),Promise.resolve().then(c.t.bind(c,25211,23)),Promise.resolve().then(c.t.bind(c,19908,23)),Promise.resolve().then(c.bind(c,49289))},5492:(a,b,c)=>{"use strict";c.d(b,{OY:()=>u,PF:()=>r,_9:()=>t,dL:()=>v,do:()=>w,eF:()=>p,hk:()=>o,o0:()=>s});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(87841),j=c.n(i),k=c(54287);function l(a){return f().join((0,k.FF)(a),"topics")}function m(a,b){return f().join(l(a),`${n(b)}.md`)}function n(a){return a.replace(/[^A-Za-z0-9_-]/g,"")}async function o(a){let b,c=l(a);try{b=await d.promises.readdir(c,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of b){if(!a.isFile()||!a.name.toLowerCase().endsWith(".md"))continue;let b=f().join(c,a.name);try{let a=await d.promises.readFile(b,"utf8"),c=j()(a),f=c.data;if(!f.id||!f.createdAt)continue;let g=c.content.replace(/^##\s+(user|assistant)\s*$/gim,"").trim().slice(0,160);e.push({meta:{id:f.id,title:f.title??"Untitled",createdAt:f.createdAt,updatedAt:f.updatedAt??f.createdAt,harness:f.harness,model:f.model,language:f.language,...f.goal?{goal:f.goal}:{},...f.goalStatus?{goalStatus:f.goalStatus}:{},..."number"==typeof f.goalIterations?{goalIterations:f.goalIterations}:{}},preview:g,abs:b})}catch{}}return e.sort((a,b)=>Date.parse(b.meta.updatedAt)-Date.parse(a.meta.updatedAt)),e}async function p(a,b){let c,e=m(a,b);try{c=await d.promises.readFile(e,"utf8")}catch{return null}let f=j()(c),g=f.data;return g.id?{meta:{id:g.id,title:g.title??"Untitled",createdAt:g.createdAt??new Date().toISOString(),updatedAt:g.updatedAt??g.createdAt??new Date().toISOString(),harness:g.harness,model:g.model,language:g.language,...g.goal?{goal:g.goal}:{},...g.goalStatus?{goalStatus:g.goalStatus}:{},..."number"==typeof g.goalIterations?{goalIterations:g.goalIterations}:{}},messages:function(a){let b=[],c=a.split(/\r?\n/),d=null;for(let a of c){let c=/^##\s+(user|assistant)\s*$/i.exec(a);if(c){d&&b.push({...d,body:d.body.trimEnd()}),d={role:c[1].toLowerCase(),body:""};continue}d&&(d.body+=a+"\n")}return d&&b.push({...d,body:d.body.trimEnd()}),b}(f.content),abs:e}:null}async function q(a,b,c){let e=m(a,b),f=await d.promises.readFile(e,"utf8"),g=j()(f),h={...g.data,...c,updatedAt:new Date().toISOString()};for(let a of Object.keys(h))void 0===h[a]&&delete h[a];await d.promises.writeFile(e,j().stringify(g.content,h),"utf8")}async function r(a,b,c){await q(a,b,{goal:c,goalStatus:"active",goalIterations:0})}async function s(a,b){let c=m(a,b),e=await d.promises.readFile(c,"utf8"),f=j()(e).data,g=("number"==typeof f.goalIterations?f.goalIterations:0)+1;return await q(a,b,{goalIterations:g}),g}async function t(a,b,c="abandoned"){await q(a,b,{goalStatus:c})}async function u(a){let b=function(){let a=new Date().toISOString().slice(0,10),b=h().randomBytes(4).toString("hex");return`${a}-${b}`}(),c=new Date().toISOString(),e={id:b,title:function(a){let b=a.trim().split(/\r?\n/)[0]??"Untitled";return b.length>80?b.slice(0,77)+"…":b}(a.firstMessage),createdAt:c,updatedAt:c,...a.harness?{harness:a.harness}:{},...a.model?{model:a.model}:{},...a.language?{language:a.language}:{},...a.helperFor?{helperFor:a.helperFor}:{}};return await d.promises.mkdir(l(a.root),{recursive:!0}),await d.promises.writeFile(m(a.root,b),y(e,""),"utf8"),{meta:e,messages:[],abs:m(a.root,b)}}async function v(a,b,c){let e=await p(a,b);if(!e)throw Error(`Topic not found: ${b}`);e.meta.title=c,e.meta.updatedAt=new Date().toISOString();let f=e.messages.map(a=>`## ${a.role}
|
|
33
|
-
${a.body}`).join("\n\n")+"\n";await d.promises.writeFile(m(a,b),y(e.meta,f),"utf8")}async function w(a,b){let c=n(b);if(!c)throw Error(`Invalid topic id: ${b}`);let d=m(a,c),e=f().join(l(a),`${c}.events.jsonl`);return{removedMd:await x(d),removedEvents:await x(e)}}async function x(a){try{return await d.promises.unlink(a),!0}catch(a){if("object"==typeof a&&null!==a&&"code"in a&&"ENOENT"===a.code)return!1;throw a}}function y(a,b){return j().stringify(b,a)}},8118:(a,b,c)=>{"use strict";c.d(b,{Od:()=>m,gd:()=>s,getUtility:()=>r,jc:()=>u,listUtilities:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(53905),h=c(73652),i=c(54287),j=c(20050);let k=f().join((0,h._)(),"utilities");function l(a){return f().join((0,i.FF)(a),"utilities")}function m(a,b,c){if("global"===a)return f().join(k,b);if(!c)throw Error("project-scoped utility requires rootPath");return f().join(l(c),b)}async function n(a={}){let b=[];if(a.scope&&"global"!==a.scope||b.push(...await o("global",k)),!a.scope||"project"===a.scope)for(let c of a.rootId?await (0,g.Zn)(a.rootId).then(a=>a?[a]:[]).catch(()=>[]):await (0,g.qV)().catch(()=>[])){let a=l(c.path);b.push(...(await o("project",a,c.id)).map(a=>({...a,rootId:c.id})))}return b}async function o(a,b,c){let e;try{e=await d.promises.readdir(b,{withFileTypes:!0})}catch{return[]}let g=[];for(let d of e){if(!d.isDirectory())continue;let e=f().join(b,d.name),h=await p(e);h&&g.push({scope:a,...c?{rootId:c}:{},dir:e,manifest:h,bundleAvailable:await q(f().join(e,"bundle.js"))})}return g}async function p(a){try{let b=await d.promises.readFile(f().join(a,"manifest.json"),"utf8"),c=j.pL.safeParse(JSON.parse(b));return c.success?c.data:null}catch{return null}}async function q(a){try{return await d.promises.access(a),!0}catch{return!1}}async function r(a,b,c){let d,e;if("global"===a)d=k;else{if(!c)return null;let a=await (0,g.Zn)(c).catch(()=>null);if(!a)return null;d=l(a.path),e=a.id}let h=f().join(d,b),i=await p(h);return i?{scope:a,...e?{rootId:e}:{},dir:h,manifest:i,bundleAvailable:await q(f().join(h,"bundle.js"))}:null}async function s(a){let b;if(a.manifest.id!==a.manifest.id.toLowerCase())throw Error("manifest.id must be lowercase kebab-case");if("project"===a.scope){if(!a.rootId)throw Error("project-scoped install requires rootId");let c=await (0,g.Zn)(a.rootId);if(!c)throw Error(`unknown rootId: ${a.rootId}`);b=c.path}let c=m(a.scope,a.manifest.id,b);for(let[e,g]of(await d.promises.mkdir(c,{recursive:!0}),await d.promises.mkdir(f().join(c,"data"),{recursive:!0}),Object.entries(a.files))){if("manifest.json"===e)continue;let c=function(a,b,c,d){let e=m(a,b,d),g=f().resolve(e,c),h=f().relative(e,g);if(h.startsWith("..")||f().isAbsolute(h))throw Error(`refused path outside utility dir: ${c}`);return g}(a.scope,a.manifest.id,e,b);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,g,"utf8")}let e={...a.manifest,source:a.source};if(await d.promises.writeFile(f().join(c,"manifest.json"),JSON.stringify(e,null,2)+"\n","utf8"),"project"===a.scope&&a.rootId&&b&&e.card)try{await t(b,a.scope,e)}catch(a){console.error("[utility install] card seed failed:",a)}return{scope:a.scope,...a.rootId?{rootId:a.rootId}:{},dir:c,manifest:e,bundleAvailable:!1}}async function t(a,b,d){if(!d.card)return;let{buildRecord:e,readLayout:f,reconcileLayout:g,writeLayout:h,writeWidget:i,listWidgets:j}=await Promise.resolve().then(c.bind(c,69509)),{SYSTEM_WIDGET_IDS:k}=await Promise.resolve().then(c.bind(c,1405)),l=`utility:${d.id}`,m=e({id:l,title:d.card.title??d.name,...d.card.description?{description:d.card.description}:{},payload:{kind:"utility-card",data:{utilityId:d.id,utilityScope:b,inner:{kind:d.card.kind,data:d.card.data,...d.card.title?{title:d.card.title}:{},...d.card.description?{description:d.card.description}:{}}}}});await i(a,m);let n=await f(a);n.order.includes(l)||n.hidden.includes(l)||(n.hidden=[...n.hidden,l]);let o=g(n,(await j(a)).map(a=>a.id),k);await h(a,o)}async function u(a,b,c){let e;if("project"===a){if(!c)throw Error("project-scoped remove requires rootId");let a=await (0,g.Zn)(c);if(!a)return;e=a.path}let f=m(a,b,e);await d.promises.rm(f,{recursive:!0,force:!0})}},13415:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L4:()=>r,OQ:()=>s,T$:()=>t,g3:()=>o,h$:()=>q,nC:()=>u,nY:()=>p});var e=c(73745);c(66493);var f=c(65326),g=c(53905),h=c(5492),i=c(36017),j=c(99353),k=c(51021),l=c(93554),m=c(63781),n=a([j,k,l]);async function o(a,b,c=[],d){try{let e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};if(!b.trim()&&0===c.length)return{ok:!1,error:"Empty prompt"};let j=await (0,i.M)(),l=j.assignments.chat,m=b.trim()||c[0]?.name||"Untitled",n=await (0,h.OY)({root:e.path,firstMessage:m,harness:l.harness,model:l.model,language:j.language}),o=await (0,k.W)({rootId:a,topicId:n.meta.id,message:b.trim(),attachments:c,...d?{focusFile:d}:{}});if("error"in o)return{ok:!1,error:o.error};return(0,f.revalidatePath)(`/roots/${a}`),{ok:!0,topicId:n.meta.id}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a){try{let b=await (0,g.Zn)(a);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,h.hk)(b.path)).filter(a=>!a.meta.helperFor);return{ok:!0,topics:c}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function q(a,b,c){try{let d,e=await (0,g.Zn)(a);if(!e)return{ok:!1,error:"Root not found"};let k=await (0,i.M)(),l=k.assignments.quick,m=k.language,n=["Write a short, descriptive title for the following user question.",`Language: ${m}.`,"Constraints:\n - 3 to 7 words\n - no quotes, no trailing punctuation",` - no leading prefixes like "Title:" — just the title text`,"\nUser question:",c].join("\n"),o=(d=(d=(d=(d=(await (0,j.T)(l,n,{timeoutMs:25e3})).trim()).replace(/^```[a-z]*\s*([\s\S]*?)\s*```$/i,"$1")).replace(/^['"«»“”‘’`]+|['"«»“”‘’`]+$/g,"")).replace(/^\s*title\s*:\s*/i,""),(d=(d=d.split(/\r?\n/)[0]?.trim()??"").replace(/[.!?…]+$/u,"").trim()).length>80&&(d=d.slice(0,77).trimEnd()+"…"),d);if(!o)return{ok:!1,error:"Empty title from model"};return await (0,h.dL)(e.path,b,o),(0,f.revalidatePath)(`/roots/${a}`),(0,f.revalidatePath)(`/roots/${a}/chat/${b}`),{ok:!0,title:o}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};return await l.z.stopTopic(b),await (0,h.do)(c.path,b),(0,f.revalidatePath)(`/roots/${a}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function s(a,b){try{let c=await (0,g.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};return await (0,h._9)(c.path,b,"abandoned"),(0,f.revalidatePath)(`/roots/${a}/chat/${b}`),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function t(a,b){try{let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let{readEvents:e}=await Promise.resolve().then(c.bind(c,20243)),f=await e(d.path,b),h=[],i=null,j=()=>{i&&i.text.trim()&&h.push({role:"assistant",text:(function(a){let b=a;for(let a of["permission","question","kb","utility","dispatch","mcp-add","youtube-summary","widget-create","widget-update","workflow-create","image-gen"])b=b.replace(RegExp(`<{1,2}reflex:${a}>{1,2}[\\s\\S]*?<{1,2}\\/reflex:${a}>{1,2}`,"g"),"");return b})(i.text).trim(),ts:i.ts}),i=null};for(let a of f)"user-message"===a.type?(j(),"string"==typeof a.text&&a.text.trim()&&!a.text.startsWith("[Помощник \xb7")&&h.push({role:"user",text:a.text,ts:a.ts})):"assistant-delta"===a.type?(i||(i={text:"",ts:a.ts}),i.text+=a.text):("turn-end"===a.type||"agent-end"===a.type)&&j();return j(),{ok:!0,messages:h}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function u(a){try{let b=await (0,g.Zn)(a.rootId);if(!b)return{ok:!1,error:"Root not found"};let c=(await (0,h.hk)(b.path)).find(b=>b.meta.helperFor===a.utilityId);if(c)return{ok:!0,topicId:c.meta.id,created:!1};let d=await (0,i.M)(),e=d.assignments.chat,f=await (0,h.OY)({root:b.path,firstMessage:`[Помощник \xb7 ${a.utilityName}]`,harness:e.harness,model:e.model,language:d.language,helperFor:a.utilityId});return{ok:!0,topicId:f.meta.id,created:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}[j,k,l]=n.then?(await n)():n,(0,m.D)([o,p,q,r,s,t,u]),(0,e.A)(o,"785d105fe4cdea0b27e02ecbec12f88d28a6ef1ecf",null),(0,e.A)(p,"40b3a6f621f4dd0fbeff9986b0838ffb0661f93915",null),(0,e.A)(q,"708dcc45d46350264144b1174a5c785ce551df32be",null),(0,e.A)(r,"60c3bccb449185eaecf50bf553a1712933a9c705bf",null),(0,e.A)(s,"60b4f72bcb952e914e8802506eecd520bde5b45f71",null),(0,e.A)(t,"60ff3df4e3ad497a54503ca5fe7b383589e370223c",null),(0,e.A)(u,"40ad82cda51b6986682b8790170d0d1158ae318a95",null),d()}catch(a){d(a)}})},15754:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$z:()=>l,MU:()=>m,Tc:()=>k});var e=c(73745);c(66493);var f=c(53905),g=c(20243),h=c(93554),i=c(63781),j=a([h]);async function k(a,b){try{let c=await (0,f.Zn)(a);if(!c)return{ok:!1,error:"Root not found"};let d=await (0,g.readEvents)(c.path,b);return{ok:!0,events:d,active:h.z.isActive(b)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function l(a){try{return{ok:!0,agents:h.z.list(a)}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function m(a){try{let b=h.z.get(a);if(!b)return{ok:!1,error:"Agent not found"};return{ok:!0,agent:b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}h=(j.then?(await j)():j)[0],(0,i.D)([k,l,m]),(0,e.A)(k,"60e06c293b9ecc3a0f532d291db1d7eee23b6f58fa",null),(0,e.A)(l,"409ccdac19b10aed97024dc752228dd6e45a7801e7",null),(0,e.A)(m,"401f487f7fef5749035080e30c823f50f1d8a1a59d",null),d()}catch(a){d(a)}})},18809:(a,b,c)=>{"use strict";c.d(b,{Aq:()=>i,pO:()=>h});let d=["Read","Glob","Grep","WebFetch","WebSearch"],e=[...d,"Write","Edit","MultiEdit"];function f(a,b,c){return[`## Specialist role: ${a}`,"",`Reply in ${b}. You are a focused specialist, not a general assistant. Do exactly the task in the brief — no more.`,"\n## Brief from the orchestrator",c.trim(),""].join("\n")}function g(a){return["\n## Rules",a,"\n- Don't ask clarifying questions to the user — you don't have a chat surface. If the brief is ambiguous, do your best with stated assumptions and note them in your output.\n- Don't emit `<<reflex:kb>>`, `<<reflex:utility>>`, `<<reflex:permission>>`, `<<reflex:question>>`, `<<reflex:dispatch>>` markers — those are for the orchestrator only. Just write your answer as plain text/markdown.\n- End with a tight summary the orchestrator can quote verbatim if the user asks for the result."].join("\n")}let h={researcher:{id:"researcher",label:"Researcher",description:"Глубокое чтение KB / поиск по проекту / web research. Read-only — не пишет файлы. Используй когда нужно найти/собрать факты.",allowedTools:d,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("researcher",a,d),`Project root: \`${b}\``,`Knowledge base scope: \`${c}\``,g("- You are READ-ONLY: never Write/Edit/MultiEdit. Use Read/Glob/Grep to scan the KB and WebFetch/WebSearch for external lookups.\n- Cite sources by rel-path inside the KB (or URL for web).\n- If the brief asks for something that requires a write, explicitly say `cannot complete — write required` instead of doing it.")].join("\n")},coder:{id:"coder",label:"Coder",description:"Пишет/редактирует исходный код, конфиги, схемы. Может создать утилиту. Используй когда нужны изменения файлов.",allowedTools:e,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("coder",a,d),`Project root: \`${b}\``,`Reflex scope (write here for KB files): \`${c}\``,g("- You may Write/Edit/MultiEdit files. Stay inside the project root.\n- Don't run shell or invoke other agents. If the brief implies installing a utility, write the utility files but do NOT emit `<<reflex:utility>>` — that's the orchestrator's job.\n- Report what you changed: list each touched file with a one-line summary.")].join("\n")},summarizer:{id:"summarizer",label:"Summarizer",description:"Сжимает большой текст / длинный transcript / список файлов в короткое summary. Без инструментов — только текст в брифе.",allowedTools:[],systemPrompt:({language:a,brief:b})=>[f("summarizer",a,b),g("- You have NO tools — work only from the text in the brief.\n- Compress aggressively: bullet points, ~10x reduction is the target unless the brief says otherwise.\n- Preserve names, numbers, dates, file paths verbatim. Drop filler.")].join("\n")},"kb-writer":{id:"kb-writer",label:"KB Writer",description:"Структурированная запись в базу знаний (kind/title/body/frontmatter). Используй когда orchestrator решил что-то сохранить.",allowedTools:d,systemPrompt:({language:a,root:b,reflexScope:c,brief:d})=>[f("kb-writer",a,d),`KB root: \`${c}\``,`Project: \`${b}\``,g('- You DO NOT write the file yourself. Output a JSON object the orchestrator will pass to <<reflex:kb>>:\n ```json\n {"kind":"<entity-type>","title":"…","body":"…markdown…","meta":{…optional frontmatter fields…}}\n ```\n- Pick a sensible `kind` (fact / task / meeting / product / decision / source / …).\n- `body` is full markdown. Frontmatter `meta` should hold structured fields the user might filter/group on.')].join("\n")},"utility-builder":{id:"utility-builder",label:"Utility Builder",description:"Спроектировать утилиту: manifest + ui.tsx + (опц.) server actions. Используй когда пользователь явно просит создать утилиту.",allowedTools:d,systemPrompt:({language:a,root:b,brief:c})=>[f("utility-builder",a,c),`Project: \`${b}\``,g("- Output the utility files inline in markdown code fences with file paths as headers:\n ### manifest.json\n ```json\n { … }\n ```\n ### ui.tsx\n ```tsx\n … React functional component, default-export …\n ```\n- Follow Reflex utility contract: imports only from `react`, `react-dom/client`, `react/jsx-runtime`, `@host/api`, `@host/ui`. Declare needed permissions and secrets in manifest.\n- Don't emit `<<reflex:utility>>` yourself — the orchestrator wraps your output and emits the marker.")].join("\n")}};function i(a){return a in h}},19319:(a,b,c)=>{"use strict";c.d(b,{IK:()=>l,dj:()=>k});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(54287);async function j(a){let b=(0,i.FF)(a);return m(b,b)}async function k(a){let b=await j(a);return await Promise.all(b.map(async a=>({...a,meta:await n(a.abs)})))}async function l(a,b){let c=(0,i.FF)(a),e=f().resolve(c,b),g=f().relative(c,e);if(g.startsWith("..")||f().isAbsolute(g))throw Error(`Refused to read outside ${i.fW}: ${b}`);return d.promises.readFile(e,"utf8")}async function m(a,b){let c;try{c=await d.promises.readdir(b,{withFileTypes:!0})}catch{return[]}let e=[],g=[];for(let d of c){let c=f().join(b,d.name);if(d.isDirectory()){if(b===a&&"topics"===d.name)continue;e.push(m(a,c));continue}d.isFile()&&d.name.toLowerCase().endsWith(".md")&&g.push({rel:f().relative(a,c).split(f().sep).join("/"),abs:c,size:0,modifiedAt:""})}let h=await Promise.all(g.map(async a=>{try{let b=await d.promises.stat(a.abs);return{...a,size:b.size,modifiedAt:b.mtime.toISOString()}}catch{return a}}));for(let a of(await Promise.all(e)))h.push(...a);return h.sort((a,b)=>a.rel.localeCompare(b.rel)),h}async function n(a){try{let b=await d.promises.readFile(a,"utf8"),c=h()(b).data;return{...void 0!==o(c.title)?{title:o(c.title)}:{},...void 0!==p(c.version)?{version:p(c.version)}:{},...void 0!==o(c.date)?{date:o(c.date)}:{},...void 0!==o(c.kind)?{kind:o(c.kind)}:{},data:c}}catch{return{data:{}}}}function o(a){return"string"==typeof a?a:a instanceof Date?a.toISOString().slice(0,10):void 0}function p(a){if("string"==typeof a||"number"==typeof a)return a}},20050:(a,b,c)=>{"use strict";c.d(b,{pL:()=>j});var d=c(56149);let e=d.Yj().min(1).max(80).regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"id must be kebab-case (e.g. furniture-gen)"),f=d.Ik({llm:d.Ik({tasks:d.YO(d.k5(["chat","quick","rag","embed"])).default([])}).optional(),kb:d.Ik({read:d.zM().optional(),write:d.zM().optional(),kinds:d.YO(d.Yj()).optional()}).optional(),fs:d.Ik({sandbox:d.eu(!0)}).optional(),web:d.Ik({fetch:d.Ik({domains:d.YO(d.Yj()).default([])}).optional(),search:d.zM().optional()}).optional(),audit:d.Ik({write:d.eu(!0).optional()}).optional(),workers:d.Ik({enabled:d.eu(!0),maxConcurrent:d.ai().int().min(1).max(8).default(1).optional()}).optional(),agent:d.Ik({invoke:d.eu(!0)}).optional(),workflow:d.Ik({read:d.zM().optional(),run:d.zM().optional()}).optional(),images:d.Ik({generate:d.zM().optional(),search:d.zM().optional(),attach:d.zM().optional()}).optional()}).default({}),g=d.Ik({key:d.Yj().min(1).max(64).regex(/^[A-Z][A-Z0-9_]*$/,"secret key must be UPPER_SNAKE_CASE (e.g. OPENAI_API_KEY)"),label:d.Yj().min(1).max(120),description:d.Yj().max(2e3).default(""),required:d.zM().default(!1)}),h=d.Ik({name:d.Yj().min(1).max(64).regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/,"action name must be a JS identifier"),entry:d.Yj().min(1).regex(/^[A-Za-z0-9_\-./]+\.ts$/,"entry must be a relative .ts path"),timeoutMs:d.ai().int().min(1e3).max(6e5).default(3e4)}),i=d.Ik({type:d.k5(["agent","github","archive","mcp","builtin"]),origin:d.Yj().optional(),fetchedAt:d.Yj(),installedBy:d.Yj().optional()}),j=d.Ik({id:e,name:d.Yj().min(1).max(120),description:d.Yj().max(2e3).default(""),version:d.Yj().regex(/^\d+\.\d+\.\d+(?:[-+][\w.]+)?$/,"version must be semver"),author:d.Yj().max(120).optional(),homepage:d.Yj().url().optional(),icon:d.Yj().max(64e3).regex(/^(?:lucide:[A-Za-z0-9_-]+|data:image\/(?:png|svg\+xml|jpeg);base64,[A-Za-z0-9+/=]+)$/,"icon must be 'lucide:Name' or a base64 data URL").optional(),category:d.Yj().max(64).optional(),ui:d.Yj().min(1).max(120).default("ui.tsx"),serverActions:d.YO(h).default([]),secrets:d.YO(g).default([]),mcpServers:d.YO(d.Yj().min(1).max(64)).default([]),permissions:f,source:i.optional(),card:d.Ik({kind:d.k5(["markdown","news-list","link-list","kpi","checklist","quote","kb-pinned","progress","image","stat-table","map"]),title:d.Yj().min(1).max(120).optional(),description:d.Yj().max(280).optional(),data:d.g1(d.Yj(),d.L5()).default({})}).optional()}),k=d.g1(d.Yj(),d.Yj()).superRefine((a,b)=>{for(let c of(!("manifest.json"in a||a["manifest.json"]),Object.keys(a)))(c.startsWith("/")||c.includes(".."))&&b.addIssue({code:"custom",message:`Unsafe file path: ${c}`})});d.Ik({scope:d.k5(["global","project"]),rootId:d.Yj().optional(),manifest:j,files:k,source:i})},20243:(a,b,c)=>{"use strict";c.d(b,{Zn:()=>i,readEvents:()=>j,v:()=>k});var d=c(73024),e=c(76760),f=c.n(e),g=c(54287);function h(a,b){return f().join((0,g.FF)(a),"topics",`${b}.events.jsonl`)}async function i(a,b,c){let e=h(a,b);await d.promises.mkdir(f().dirname(e),{recursive:!0}),await d.promises.appendFile(e,JSON.stringify(c)+"\n","utf8")}async function j(a,b){let c,e=h(a,b);try{c=await d.promises.readFile(e,"utf8")}catch(a){var f;if("object"==typeof(f=a)&&null!==f&&"code"in f&&"ENOENT"===f.code)return[];throw a}let g=[];for(let a of c.split(/\r?\n/))if(a.trim())try{g.push(JSON.parse(a))}catch{}return g}async function k(a,b){let c=await j(a,b);return 0===c.length?0:c[c.length-1].seq+1}},20583:(a,b,c)=>{"use strict";c.d(b,{$:()=>i});var d=c(64173);c(17240);var e=c(20483),f=c(91520),g=c(91344);let h=(0,e.F)("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function i({className:a,variant:b="default",size:c="default",asChild:e=!1,...i}){let j=e?f.bL:"button";return(0,d.jsx)(j,{"data-slot":"button","data-variant":b,"data-size":c,className:(0,g.cn)(h({variant:b,size:c,className:a})),...i})}},20938:(a,b,c)=>{"use strict";c.d(b,{GC:()=>l,az:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(73652);let h=f().join((0,g._)(),"pending-mcp-adds.json");async function i(){try{let a=await d.promises.readFile(h,"utf8"),b=JSON.parse(a);if(1!==b.version||!Array.isArray(b.entries))return{version:1,entries:[]};return b}catch{return{version:1,entries:[]}}}async function j(a){await d.promises.mkdir(f().dirname(h),{recursive:!0}),await d.promises.writeFile(h,JSON.stringify(a,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(h,384)}catch{}}function k(a){let b=Date.now()-2592e6;return{version:1,entries:a.entries.filter(a=>{let c=Date.parse(a.createdAt);return Number.isFinite(c)&&c>b})}}async function l(a){let b=k(await i());b.entries=b.entries.filter(b=>b.requestId!==a.requestId),b.entries.push({...a,createdAt:new Date().toISOString()}),await j(b)}async function m(a){let b=k(await i()),c=b.entries.findIndex(b=>b.requestId===a);if(c<0)return null;let d=b.entries[c];return b.entries.splice(c,1),await j(b),d}},27456:(a,b,c)=>{"use strict";c.d(b,{F:()=>g});var d=c(64173);c(17240);var e=c(6912),f=c(91344);function g({className:a,children:b,...c}){return(0,d.jsxs)(e.Root,{"data-slot":"scroll-area",className:(0,f.cn)("relative",a),...c,children:[(0,d.jsx)(e.Viewport,{"data-slot":"scroll-area-viewport",className:"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",children:b}),(0,d.jsx)(h,{}),(0,d.jsx)(e.Corner,{})]})}function h({className:a,orientation:b="vertical",...c}){return(0,d.jsx)(e.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:b,className:(0,f.cn)("flex touch-none p-px transition-colors select-none","vertical"===b&&"h-full w-2.5 border-l border-l-transparent","horizontal"===b&&"h-2.5 flex-col border-t border-t-transparent",a),...c,children:(0,d.jsx)(e.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"relative flex-1 rounded-full bg-border"})})}},28548:(a,b,c)=>{"use strict";c.d(b,{AI:()=>m,PM:()=>l,Qs:()=>o,Y7:()=>k,iP:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(73652),h=c(61495);let i=f().join((0,g._)(),"prompts");function j(a){return f().join(i,`${a}.md`)}function k(a){return j(a)}async function l(a){let b=j(a);try{return await d.promises.readFile(b,"utf8")}catch(a){var c;if(!("object"==typeof(c=a)&&null!==c&&"code"in c&&"ENOENT"===c.code))throw a}return await d.promises.mkdir(i,{recursive:!0}),await d.promises.writeFile(b,h.EE[a],"utf8"),h.EE[a]}async function m(a,b){await d.promises.mkdir(i,{recursive:!0}),await d.promises.writeFile(j(a),b,"utf8")}async function n(a){return await m(a,h.EE[a]),h.EE[a]}function o(a){if(!h._W.includes(a))throw Error(`Unknown template: ${a}`);return a}},30516:(a,b,c)=>{"use strict";c.d(b,{P:()=>l});var d=c(56149);let e=d.Ik({template:d.Yj().default("")}),f=d.Ik({url:d.Yj().url("url must be a valid URL"),method:d.k5(["GET","POST","PUT","PATCH","DELETE"]).default("GET"),headers:d.KC([d.g1(d.Yj(),d.Yj()),d.Yj(),d.Vx()]).optional(),body:d.KC([d.Yj(),d.g1(d.Yj(),d.L5()),d.Vx()]).optional()}),g=d.Ik({url:d.Yj().url("url must be a valid URL")}),h=d.Ik({prompt:d.Yj().min(1,"prompt is required")}),i=d.Ik({kind:d.Yj().min(1).default("note"),title:d.Yj().default(""),body:d.Yj().default("")}),j=d.Ik({utilityId:d.Yj().min(1,"utilityId is required"),utilityScope:d.k5(["global","project"]).default("global"),actionName:d.Yj().min(1,"actionName is required"),args:d.L5().optional()}),k={"text-template":e,"http-request":f,"web-fetch":g,"ask-agent":h,"kb-write":i,"utility-call":j,"image-generate":d.Ik({prompt:d.Yj().min(1,"prompt is required"),provider:d.k5(["gemini","codex"]).optional(),size:d.Yj().optional(),aspectRatio:d.Yj().optional()}),"image-search":d.Ik({query:d.Yj().min(1,"query is required"),provider:d.k5(["unsplash","pexels","brave"]).optional(),count:d.KC([d.Yj(),d.ai()]).optional()})};function l(a,b){let c=k[a];return c?c.parse(b):b}},30849:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>d});let d=(0,c(54491).registerClientReference)(function(){throw Error("Attempted to call AppSidebar() from the server but AppSidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/reflex-agent/reflex-agent/app/_components/app-sidebar.tsx","AppSidebar")},36017:(a,b,c)=>{"use strict";c.d(b,{D:()=>k,M:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(78555);let h=(0,c(73652)._)(),i=f().join(h,"settings.json");async function j(){try{let a=await d.promises.readFile(i,"utf8"),b=g.ht.safeParse(JSON.parse(a));if(!b.success)return g.a$;return b.data}catch(b){var a;if("object"==typeof(a=b)&&null!==a&&"code"in a&&"ENOENT"===a.code)return g.a$;throw b}}async function k(a){let b=g.ht.parse(a);await d.promises.mkdir(h,{recursive:!0}),await d.promises.writeFile(i,JSON.stringify(b,null,2)+"\n","utf8")}},36724:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{L:()=>j});var e=c(56942),f=c(3724),g=a([f]);f=(g.then?(await g)():g)[0];let j={"text-template":async a=>"string"==typeof a.template?a.template:"","http-request":async a=>{let b=h(a.url,"url"),c=i(a.method,"GET").toUpperCase(),d=function(a,b){if("string"!=typeof a||!a.trim())return b;try{return JSON.parse(a)}catch{return b}}(a.headers,{}),e=i(a.body,""),f={method:c,headers:d};"GET"!==c&&"HEAD"!==c&&e&&(f.body=e);let g=await fetch(b,f),j=await g.text(),k=g.headers.get("content-type")??"",l=j;if(k.includes("application/json"))try{l=JSON.parse(j)}catch{}if(!g.ok)throw Error(`HTTP ${g.status} ${g.statusText}: ${j.slice(0,200)}`);return l},"web-fetch":async a=>{let b=h(a.url,"url"),c=await fetch(b,{headers:{"User-Agent":"Reflex-Workflow/1.0"}});if(!c.ok)throw Error(`HTTP ${c.status} ${c.statusText}`);return await c.text()},"ask-agent":async(a,b)=>{let c=h(a.prompt,"prompt"),{text:d}=await (0,f.runHeadlessAgent)({rootId:b.rootId,prompt:c,label:`[workflow ${b.workflow.id}] ${b.workflow.label}`});return d},"kb-write":async(a,b)=>{let c=i(a.kind,"note"),d=i(a.title,`Workflow ${b.workflow.label}`),f=i(a.body,""),g=await (0,e.j)({rootPath:b.rootPath,directive:{kind:c,title:d,body:f}});return{kind:g.kind,title:g.title,relPath:g.relPath,absPath:g.absPath}},"image-generate":async(a,b)=>{let d=h(a.prompt,"prompt"),e="codex"===a.provider||"gemini"===a.provider?a.provider:void 0,{generateImage:f}=await Promise.resolve().then(c.bind(c,84579)),g=await f({rootId:b.rootId,prompt:d,...e?{provider:e}:{},..."string"==typeof a.size&&a.size?{size:a.size}:{},..."string"==typeof a.aspectRatio&&a.aspectRatio?{aspectRatio:a.aspectRatio}:{}});return{url:g.urlPath,sha:g.sha,size:g.size,mime:g.mime,provider:g.provider}},"image-search":async a=>{let b,d=h(a.query,"query"),e="pexels"===a.provider||"unsplash"===a.provider||"brave"===a.provider?a.provider:void 0;if("number"==typeof a.count)b=a.count;else if("string"==typeof a.count&&a.count.trim()){let c=parseInt(a.count,10);Number.isFinite(c)&&c>0&&(b=c)}let{searchImages:f}=await Promise.resolve().then(c.bind(c,84579));return{results:await f({query:d,...e?{provider:e}:{},...void 0!==b?{count:b}:{}})}},"utility-call":async(a,b)=>{let d=h(a.utilityId,"utilityId"),e=h(a.actionName,"actionName"),f="project"===a.utilityScope?"project":"global",g=a.args??{};if("string"==typeof g)try{g=g.trim()?JSON.parse(g):{}}catch(a){throw Error(`utility-call: args is not valid JSON: ${a instanceof Error?a.message:String(a)}`)}let{getUtility:i}=await Promise.resolve().then(c.bind(c,8118)),j=await i(f,d,"project"===f?b.rootId:void 0);if(!j)throw Error(`utility-call: ${f}/${d} not installed`);let k=j.manifest.serverActions.find(a=>a.name===e);if(!k)throw Error(`utility-call: ${d} has no serverAction "${e}"`);let{runServerAction:l}=await Promise.all([c.e(9861),c.e(4031)]).then(c.bind(c,49556));return l({utility:j,action:k,args:g,parentCorrelationId:`workflow:${b.workflow.id}`})}};function h(a,b){if("string"!=typeof a||!a.trim())throw Error(`Param "${b}" обязателен (string)`);return a}function i(a,b){return"string"==typeof a?a:b}d()}catch(a){d(a)}})},44427:()=>{},49191:(a,b,c)=>{"use strict";c.d(b,{L:()=>e});var d=c(3265);let e=(0,d.createServerReference)("60c3bccb449185eaecf50bf553a1712933a9c705bf",d.callServer,void 0,d.findSourceMapURL,"deleteTopicAction")},49410:(a,b,c)=>{"use strict";c.d(b,{b:()=>l,k:()=>n});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(73652);let j=f().join((0,i._)(),"skills"),k=[{id:"deep-research",title:"Deep research",description:"Глубокий ресёрч с цитированием — web + KB, синтез через researcher sub-agents.",author:"builtin",instructions:'## Skill: deep-research\n\nВеди исследование как профессиональный аналитик:\n 1. Сначала составь короткий план поиска: 3-5 ключевых вопросов вокруг темы.\n 2. Для каждого ключевого вопроса диспатчни researcher sub-агента с конкретным брифом и ожидаемой формой вывода.\n 3. Получив результаты, синтезируй: что подтверждено, что противоречит, где пробелы.\n 4. Цитируй источники с URL и датой (если доступна). Не выдумывай ссылки.\n 5. В конце предложи: (а) сохранить ключевые факты в KB (`<<reflex:kb>>` kind="research-note"), (б) собрать виджет news-list/link-list.\n 6. Если данных мало — открыто скажи об этом и предложи следующие шаги.'},{id:"widget-builder",title:"Widget builder",description:"Помощник создания виджетов — подсказывает kind и формат данных.",author:"builtin",instructions:"## Skill: widget-builder\n\nТы помогаешь спроектировать и собрать виджет:\n 1. Уточни через `<<reflex:question>>` цель виджета и аудиторию (для меня одного / для команды / отчёт).\n 2. Подбери оптимальный `kind` — обоснуй выбор вслух (1 строкой).\n 3. Если для виджета нужны данные — собери их через WebFetch/WebSearch/Read до эмита.\n 4. Эмить ровно один `<<reflex:widget-create>>` маркер, с продуманным `id` и `refresh` cadence.\n 5. Подскажи пользователю как редактировать виджет (карандашик → этот же топик)."},{id:"kb-curator",title:"KB curator",description:"Структурирует сырой контент в чистые KB-заметки с правильным kind и meta.",author:"builtin",instructions:"## Skill: kb-curator\n\nТы — куратор базы знаний. Каждый вход — заметка, факт, или ссылка — превращай в аккуратную KB-запись:\n 1. Определи `kind` (fact | task | meeting | product | person | place | event | …). Если неоднозначно — спроси.\n 2. Заголовок: 4-9 слов, без кавычек, без точки в конце.\n 3. `meta`: уложи структурированные поля (даты ISO, ссылки, теги). НЕ дублируй их в body.\n 4. `body`: что не влезло в meta — контекст, нюансы, цитаты с источниками.\n 5. Эмить `<<reflex:kb>>` маркер; не пиши Write — manager сам кладёт в правильную папку.\n 6. Если запись добавляется к существующей теме — упомяни рядом-файлы через @-mentions в чате (для контекста, не для агента)."}];async function l(){let a=await m(),b=new Set(a.map(a=>a.id)),c=k.filter(a=>!b.has(a.id)).map(({instructions:a,...b})=>b);return[...a.map(({instructions:a,...b})=>b),...c]}async function m(){let a;try{a=await d.promises.readdir(j,{withFileTypes:!0})}catch{return[]}let b=[];for(let c of a)if(c.isFile()&&c.name.toLowerCase().endsWith(".md"))try{let a=await d.promises.readFile(f().join(j,c.name),"utf8"),e=h()(a),g=e.data,i="string"==typeof g.id?g.id:null;if(!i)continue;b.push({id:i,title:"string"==typeof g.title?g.title:i,description:"string"==typeof g.description?g.description:"",author:"user",instructions:e.content.trim()})}catch{}return b}async function n(a){let b=(await m()).find(b=>b.id===a);return b||(k.find(b=>b.id===a)??null)}},50995:(a,b,c)=>{"use strict";c.d(b,{i:()=>f});var d=c(73745);c(66493);var e=c(53905);async function f(){try{let a=await (0,e.qV)();return{ok:!0,entries:a}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(63781).D)([f]),(0,d.A)(f,"00f3369b4cf55940a301292a6c9f77f00b837d7dc3",null)},51021:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>r});var e=c(76760),f=c.n(e),g=c(54287),h=c(78744),i=c(36017),j=c(53905),k=c(93554),l=c(20243),m=c(875),n=c(96921),o=c(5492),p=c(49410),q=a([k]);async function r(a){let b=await (0,j.Zn)(a.rootId);if(!b)return{error:"Root not found",status:404};if(k.z.isActive(a.topicId))return{error:"Topic already has a running agent",status:409};let c=await (0,i.M)(),d=c.assignments.chat,e=a.harness??d.harness,l=a.model??d.model,q=c.language,r=(0,g.FF)(b.path),u=(0,m.wr)(a.message),v=(0,n.dr)(a.message),w=a.message;u?"goal"===u.kind&&u.text?(await (0,o.PF)(b.path,a.topicId,u.text),w=u.text):"plan"===u.kind&&(w=u.text||a.message):v&&"agent-mode"===v.def.kind&&(w=v.payload||a.message);let x=null;if(v?.def.id==="skill"){let[a,...b]=v.payload.split(/\s+/);if(a){let c=await (0,p.k)(a);c&&(x=c.instructions,w=b.join(" ").trim()||w)}}let y=await (0,o.eF)(b.path,a.topicId),z=y?.meta.goal&&"active"===y.meta.goalStatus?y.meta.goal:void 0,A=await (0,h.M)({root:b.path,scope:b.path,reflexScope:r,language:q}),B=function(a){let b=[],c=new Set;for(let d of a.matchAll(/https?:\/\/[^\s)>'"]+/g)){let a=d[0];try{let d=new URL(a);if(!t.has(d.hostname.toLowerCase())||c.has(a))continue;c.add(a),b.push(a)}catch{}}return b}(w),C=[A,z?(0,m.FB)(z,q):"",u?.kind==="plan"?(0,m.$4)(q):"",v?.def.id==="research"?(0,m.dA)(v.payload,q):"",v?.def.id==="widget"?(0,m.wt)(v.payload,q):"",v?.def.id==="mcp"?(0,m.YE)(v.payload,q):"",v?.def.id==="workflow"?(0,m.vl)(v.payload,q):"",x??"",a.focusFile?function(a,b,c){let d=f().join(b,a);return/russ/i.test(c)||/рус/i.test(c)?`## Открытый документ — приоритетный контекст
|
|
34
|
-
|
|
35
|
-
Пользователь сейчас читает файл базы знаний: \`${a}\`
|
|
36
|
-
Полный путь: \`${d}\`
|
|
37
|
-
|
|
38
|
-
Правила работы с этим вопросом/заданием:
|
|
39
|
-
1. **Сначала прочитай этот файл целиком через Read** — это первоисточник контекста.
|
|
40
|
-
2. Отвечай в первую очередь на основе содержимого этого файла.
|
|
41
|
-
3. Только если в нём не хватает информации — посмотри соседние файлы (та же директория, INDEX.md рядом, родительская папка).
|
|
42
|
-
4. Не угадывай: если ответа нет ни в открытом файле, ни в соседних — скажи об этом явно и предложи где искать.
|
|
43
|
-
5. При ссылках в ответе используй относительные пути от корня KB (как в открытом файле).`:`## Open document — primary context
|
|
44
|
-
|
|
45
|
-
The user is currently reading this KB file: \`${a}\`
|
|
46
|
-
Absolute path: \`${d}\`
|
|
47
|
-
|
|
48
|
-
Rules for this turn:
|
|
49
|
-
1. **Read this file first via the Read tool** — it is the primary source of context.
|
|
50
|
-
2. Base your answer primarily on its contents.
|
|
51
|
-
3. Only fall back to neighbouring files (same directory, sibling INDEX.md, parent dir) if the open file lacks the needed info.
|
|
52
|
-
4. Don't guess: if neither the open file nor its neighbours contain the answer, say so explicitly and suggest where to look.
|
|
53
|
-
5. When citing, use rel-paths from the KB root (same convention as the open file).`}(a.focusFile,r,q):"",B.length>0?function(a,b){let c=/russ/i.test(b)||/рус/i.test(b),d=a.map(a=>`- ${a}`).join("\n");return c?["## YouTube-видео в сообщении\n\nВ сообщении пользователя есть ссылки на YouTube:",d,'\n**Реши, нужно ли тебе содержимое ролика для ответа.**\n\n- Если пользователь хочет узнать **о чём ролик** / **что в нём говорится** / **описание** / **выжимку** / **цитаты** / **факты из видео** — попроси Reflex запустить Gemini-выжимку:\n\n```\n<<reflex:youtube-summary>>{"url":"<URL>"}<</reflex:youtube-summary>>\n```\n\n По одному маркеру на видео в одном ходе. Сразу после маркеров **STOP** — не пытайся ответить в этом же turn\'e. Reflex дождётся Gemini и перезапустит тебя с готовой выжимкой в контексте.\n\n- Если запрос **не требует** содержимого ролика (например "какой плеер лучше", "почини ссылку", "добавь к этому ещё одно видео") — отвечай напрямую, без директивы.\n\n- **Не используй WebFetch** для YouTube URL\'ов — он не получит ни субтитры, ни видео. Только директива выше.\n\n- Если Gemini-выжимка не получилась (Reflex вернёт сообщение об ошибке), извинись и предложи пользователю сохранить ключ в Settings → Gemini.'].join("\n"):["## YouTube video in the message\n\nThe user's message contains YouTube URL(s):",d,'\n**Decide whether you actually need the video\'s content to answer.**\n\n- If the user wants to know **what the video is about** / **what\'s said in it** / a description / summary / quotes / facts — ask Reflex to run Gemini-summary:\n\n```\n<<reflex:youtube-summary>>{"url":"<URL>"}<</reflex:youtube-summary>>\n```\n\n One marker per video, all in the same turn. After emitting markers **STOP** — don\'t try to answer in this same turn. Reflex will wait for Gemini and re-invoke you with the summary in context.\n\n- If the request **doesn\'t need** the video\'s content ("which player is best", "fix this URL", "add another video") — answer directly, no directive.\n\n- **Don\'t use WebFetch** for YouTube URLs — it gets neither captions nor video. Only the directive above.\n\n- If the Gemini summary fails (Reflex will return an error message), apologise and suggest saving a key in Settings → Gemini.'].join("\n")}(B,q):""].filter(Boolean).join("\n\n"),D=await k.z.ensureAgent({topicId:a.topicId,rootId:a.rootId,rootPath:b.path,reflexScope:r,role:"orchestrator",task:"chat",harness:e,model:l,language:q,label:"Orchestrator"}),E=function(a,b){let c=a.trim();if(!b||0===b.length)return c;let d=b.map(a=>`📎 ${a.name} (${a.absPath})`).join("\n");return c?`${c}
|
|
54
|
-
|
|
55
|
-
${d}`:d}(a.message,a.attachments);return await k.z.emit({type:"user-message",text:E,agentId:D.id,ts:new Date().toISOString(),seq:0}),(async()=>{try{let c=await s(b.path,a.topicId),e=function(a,b){let c=["### user",a.trim()||"(no text)"];if(b&&b.length>0)for(let a of(c.push(""),c.push("Attached files (use the Read tool to open them):"),b))c.push(` - ${a.absPath} (${a.mime}, ${a.size} bytes) — original: ${a.name}`);return c.join("\n")}(w,a.attachments),f=c?`Prior conversation:
|
|
56
|
-
|
|
57
|
-
${c}
|
|
58
|
-
|
|
59
|
-
${e}
|
|
60
|
-
|
|
61
|
-
### assistant
|
|
62
|
-
(Reply now.)`:`${e}
|
|
63
|
-
|
|
64
|
-
### assistant
|
|
65
|
-
(Reply now.)`;await k.z.invoke({agentId:D.id,systemPrompt:C,prompt:f,allowedTools:d.allowedTools})}catch(a){await k.z.emit({type:"error",message:a instanceof Error?a.message:String(a),agentId:D.id,ts:new Date().toISOString(),seq:0})}})(),{agentId:D.id}}k=(q.then?(await q)():q)[0];let t=new Set(["youtube.com","www.youtube.com","m.youtube.com","youtu.be","youtube-nocookie.com","www.youtube-nocookie.com"]);async function s(a,b){let c=await (0,l.readEvents)(a,b),d=[],e=null,f=()=>{e&&(d.push(`### ${e.role}
|
|
66
|
-
${e.text.trim()}`),e=null)};for(let a of c)"user-message"===a.type?(f(),e={role:"user",text:a.text},f()):"assistant-delta"===a.type?(e&&"assistant"===e.role||(f(),e={role:"assistant",text:""}),e.text+=a.text):("turn-end"===a.type||"agent-end"===a.type)&&f();return f(),d.join("\n\n")}d()}catch(a){d(a)}})},52219:(a,b,c)=>{"use strict";c.d(b,{H:()=>e});var d=c(59377);async function e(a){let b=(0,d.Tf)().startThread({model:a.args.model,workingDirectory:a.args.rootPath,sandboxMode:"read-only",additionalDirectories:[a.args.reflexScope],approvalPolicy:"never",skipGitRepoCheck:!0}),c=a.args.systemPrompt.trim().length>0?`${a.args.systemPrompt}
|
|
67
|
-
|
|
68
|
-
${a.args.prompt}`:a.args.prompt,e=await b.runStreamed(c),f=new Map;try{for await(let b of e.events)if("item.started"!==b.type){if("item.updated"===b.type||"item.completed"===b.type){let c=b.item;if("agent_message"===c.type){let b=f.get(c.id)??"",d=c.text.slice(b.length);d.length>0&&(f.set(c.id,c.text),await a.manager.emit({type:"assistant-delta",text:d,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}));continue}if("command_execution"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"Bash",input:{command:c.command},agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),await a.manager.emit({type:"tool-result",toolUseId:c.id,content:c.aggregated_output??"",...0!==c.exit_code?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("file_change"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"FileChange",input:{changes:c.changes},agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),await a.manager.emit({type:"tool-result",toolUseId:c.id,content:`${c.status}: ${c.changes.map(a=>`${a.kind} ${a.path}`).join(", ")}`,..."failed"===c.status?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("mcp_tool_call"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:`mcp:${c.server}:${c.tool}`,input:c.arguments,agentId:a.meta.id,ts:new Date().toISOString(),seq:0});let b=c.error?c.error.message:JSON.stringify(c.result?.content??[]).slice(0,4e3);await a.manager.emit({type:"tool-result",toolUseId:c.id,content:b,...c.error?{isError:!0}:{},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("web_search"===c.type&&"item.completed"===b.type){await a.manager.emit({type:"tool-use",toolUseId:c.id,name:"WebSearch",input:{query:c.query},agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}"error"===c.type&&"item.completed"===b.type&&await a.manager.emit({type:"error",message:c.message,agentId:a.meta.id,ts:new Date().toISOString(),seq:0});continue}if("turn.failed"===b.type)throw await a.manager.emit({type:"error",message:`codex turn failed: ${b.error.message}`,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),Error(b.error.message);if("error"===b.type)throw await a.manager.emit({type:"error",message:b.message,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),Error(b.message)}}finally{await (0,d.Nb)(b.id)}}},53905:(a,b,c)=>{"use strict";c.d(b,{L7:()=>r,Qu:()=>s,Zn:()=>p,_S:()=>q,mM:()=>l,qV:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g);let i=(0,c(73652)._)(),j=f().join(i,"registry.json"),k={version:1,entries:[]};function l(a){return h().createHash("sha1").update(f().resolve(a)).digest("hex").slice(0,16)}async function m(){try{let a=await d.promises.readFile(j,"utf8"),b=JSON.parse(a);if("object"==typeof b&&null!==b&&"entries"in b&&Array.isArray(b.entries))return b;return k}catch(a){if("object"==typeof a&&null!==a&&"code"in a&&"ENOENT"===a.code)return k;throw a}}async function n(a){await d.promises.mkdir(i,{recursive:!0}),await d.promises.writeFile(j,JSON.stringify(a,null,2)+"\n","utf8")}async function o(){return[...(await m()).entries].sort((a,b)=>Date.parse(b.addedAt)-Date.parse(a.addedAt))}async function p(a){return(await m()).entries.find(b=>b.id===a)??null}async function q(a){let b=f().resolve(a),c=l(b),d=await m(),e=d.entries.find(a=>a.id===c);if(e)return e;let g={id:c,path:b,addedAt:new Date().toISOString()};return await n({...d,entries:[...d.entries,g]}),g}async function r(a){let b=await m();await n({...b,entries:b.entries.filter(b=>b.id!==a)})}async function s(a){let b=await m(),c=b.entries.findIndex(b=>b.id===a);if(c<0)return;let d=[...b.entries],e=d[c];d[c]={...e,lastInitAt:new Date().toISOString()},await n({...b,entries:d})}},54287:(a,b,c)=>{"use strict";c.d(b,{FF:()=>k,KZ:()=>g,Lj:()=>h,VU:()=>i,a:()=>j,eQ:()=>l,fW:()=>f,x9:()=>m});var d=c(76760),e=c.n(d);let f=".reflex",g=".reflexignore",h=new Set([".reflex",".git","node_modules",".DS_Store"]),i=18e5,j=1e3;function k(a){return e().join(a,f)}function l(a){return e().join(k(a),"config.json")}function m(a,b){return e().join(k(a),b)}},55143:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{n:()=>n,runWorkflow:()=>m});var e=c(77598),f=c.n(e),g=c(53905),h=c(73928),i=c(30516),j=c(59895),k=c(36724),l=a([k]);async function m(a,b,c){let d=await (0,g.Zn)(a);if(!d)return{ok:!1,error:"Root not found"};let e=await (0,h.readWorkflow)(d.path,b);if(!e)return{ok:!1,error:"Workflow not found"};let l={id:function(){let a=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),b=f().randomBytes(3).toString("hex");return`${a}-${b}`}(),workflowId:e.id,workflowLabel:e.label,status:"running",startedAt:new Date().toISOString(),steps:e.steps.map(a=>({stepId:a.id,status:"pending"})),...void 0!==c?{initialInput:c}:{}};await (0,h.bp)(d.path,l);let m={},n=c,o={rootId:a,rootPath:d.path,workflow:{id:e.id,label:e.label}};for(let a=0;a<e.steps.length;a++){let b=e.steps[a],f=l.steps[a];f.status="running",f.startedAt=new Date().toISOString(),await (0,h.bp)(d.path,l);try{let a=k.L[b.kind];if(!a)throw Error(`Unknown node kind: ${b.kind}`);let d=(0,j.V)(b.params,{prev:n,steps:m,input:c,workflow:{id:e.id,label:e.label}}),g=(0,i.P)(b.kind,d);f.renderedParams=g;let h=await a(g,o);f.output=h,f.status="completed",f.finishedAt=new Date().toISOString(),m[b.id]={output:h},n=h}catch(a){return f.status="failed",f.error=a instanceof Error?a.message:String(a),f.finishedAt=new Date().toISOString(),l.status="failed",l.finishedAt=new Date().toISOString(),await (0,h.bp)(d.path,l),(0,h.lq)(d.path,e.id),{ok:!0,run:l}}await (0,h.bp)(d.path,l)}return l.status="completed",l.finishedAt=new Date().toISOString(),await (0,h.bp)(d.path,l),(0,h.lq)(d.path,e.id),{ok:!0,run:l}}function n(a){if(!a.id||"string"!=typeof a.id)return"id обязателен";if(!a.label||"string"!=typeof a.label)return"label обязателен";if(!Array.isArray(a.steps)||0===a.steps.length)return"steps[] не может быть пустым";let b=new Set;for(let c of a.steps){if(!c.id)return"Каждый step должен иметь id";if(b.has(c.id))return`Дублирующийся step id: ${c.id}`;if(b.add(c.id),!k.L[c.kind])return`Неизвестный тип step'а: ${c.kind}`}return null}k=(l.then?(await l)():l)[0],d()}catch(a){d(a)}})},56942:(a,b,c)=>{"use strict";c.d(b,{j:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(54287);async function j(a){var b;let{rootPath:c,directive:e,provenance:g}=a,j=k(e.kind)||"note",m=new Date().toISOString().slice(0,10),n=((b=e.date)&&/^\d{4}-\d{2}-\d{2}$/.test(b)?b:null)??m,o=k(e.slug&&e.slug.trim()?e.slug:e.title)||"entry",p=`${n}-${o}`,q=f().join((0,i.FF)(c),j);await d.promises.mkdir(q,{recursive:!0});let r=await l(q,p,".md"),s={title:e.title,kind:j,date:n,version:1,...e.meta&&"object"==typeof e.meta?e.meta:{}};g&&(s.createdBy=`${g.kind}:${g.id}${g.version?"@"+g.version:""}`);let t=(e.body??"").replace(/\r\n/g,"\n").trimEnd(),u=h().stringify(t?t+"\n":"",s);await d.promises.writeFile(r,u,"utf8");let v=f().relative((0,i.FF)(c),r).split(f().sep).join("/");return{kind:j,title:e.title,relPath:v,absPath:r}}function k(a){return a.normalize("NFKD").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,60)}async function l(a,b,c){let d=f().join(a,b+c),e=1;for(;await m(d);){if(e>99){d=f().join(a,`${b}-${Date.now().toString(36)}${c}`);break}d=f().join(a,`${b}-${++e}${c}`)}return d}async function m(a){try{return await d.promises.access(a),!0}catch{return!1}}},56944:(a,b,c)=>{Promise.resolve().then(c.bind(c,99804)),Promise.resolve().then(c.bind(c,99668))},59377:(a,b,c)=>{"use strict";c.d(b,{He:()=>o,Nb:()=>s,Tf:()=>l,dt:()=>n,listCodexModels:()=>q});var d=c(93628),e=c(73024),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(31421);let k=null;function l(){return k||(k=new d.U),k}let m=null;async function n(){return m||(m=(async()=>{let a=process.env.CODEX_HOME||i().join(g().homedir(),".codex"),b=i().join(a,"skills",".system","imagegen"),c=i().join(b,"SKILL.md");try{await e.promises.access(c);return}catch{}let d=i().join(process.cwd(),"lib","server","codex","skills","imagegen","SKILL.md");try{await e.promises.mkdir(b,{recursive:!0}),await e.promises.copyFile(d,c)}catch(a){console.warn("Failed to install Reflex imagegen skill into $CODEX_HOME:",a instanceof Error?a.message:a)}})())}function o(){let a=process.env.CODEX_HOME||i().join(g().homedir(),".codex");return i().join(a,"generated_images")}let p=null;async function q(a={}){if(!a.force&&p&&Date.now()-p.at<6e4)return p.models;let b=await r();return p={at:Date.now(),models:b},b}async function r(){return new Promise((a,b)=>{let c=(0,j.spawn)("codex",["app-server"],{stdio:["pipe","pipe","pipe"]}),d="",e=!1,f=()=>{try{c.kill("SIGTERM")}catch{}},g=setTimeout(()=>{e||(e=!0,f(),b(Error("codex app-server model/list timed out")))},1e4);c.on("error",a=>{e||(e=!0,clearTimeout(g),b(a))}),c.stdout.on("data",b=>{let c=(d+=b.toString("utf8")).indexOf("\n");for(;c>=0;){let b=d.slice(0,c).trim();if(d=d.slice(c+1),b.length>0)try{let c=JSON.parse(b);if(2===c.id&&c.result&&Array.isArray(c.result.data)){let b=[];for(let a of c.result.data)"string"==typeof a?.id&&b.push({id:a.id,displayName:"string"==typeof a.displayName?a.displayName:a.id,description:"string"==typeof a.description?a.description:"",hidden:!0===a.hidden,isDefault:!0===a.isDefault});if(!e){e=!0,clearTimeout(g),f(),a(b);return}}}catch{}c=d.indexOf("\n")}}),c.stderr.on("data",()=>{}),c.stdin.write(JSON.stringify({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"reflex",title:"Reflex",version:"0.0.0"},capabilities:{}}})+"\n"),c.stdin.write(JSON.stringify({jsonrpc:"2.0",method:"initialized",params:{}})+"\n"),c.stdin.write(JSON.stringify({jsonrpc:"2.0",id:2,method:"model/list",params:{}})+"\n"),c.stdin.end()})}async function s(a){if(!a)return;let b=process.env.CODEX_HOME||i().join(g().homedir(),".codex"),c=i().join(b,"sessions"),d=new Date;for(let b of[-1,0,1]){let f,g=new Date(d);g.setDate(g.getDate()+b);let h=i().join(c,String(g.getFullYear()),String(g.getMonth()+1).padStart(2,"0"),String(g.getDate()).padStart(2,"0"));try{f=await e.promises.readdir(h)}catch{continue}for(let b of f)b.includes(a)&&await e.promises.unlink(i().join(h,b)).catch(()=>{})}}},59788:(a,b,c)=>{"use strict";c.d(b,{R:()=>f});var d=c(84579),e=c(53905);async function f(a){let b=function(a){let b=a.trim();if(b.startsWith("{")&&b.endsWith("}"))try{let a=JSON.parse(b),c={prompt:"string"==typeof a.prompt&&a.prompt.trim().length>0?a.prompt:b};return("gemini"===a.provider||"codex"===a.provider)&&(c.provider=a.provider),"string"==typeof a.size&&(c.size=a.size),"string"==typeof a.aspectRatio&&(c.aspectRatio=a.aspectRatio),"string"==typeof a.alt&&(c.alt=a.alt),c}catch{}return{prompt:b}}(a.args.prompt),c=(0,e.mM)(a.args.rootPath);try{var f;let e=await (0,d.generateImage)({rootId:c,prompt:b.prompt,...b.provider?{provider:b.provider}:{},...b.size?{size:b.size}:{},...b.aspectRatio?{aspectRatio:b.aspectRatio}:{},...b.alt?{alt:b.alt}:{}}),g=b.alt||b.prompt,h=`![${g.replace(/[\[\]\n]/g," ").slice(0,200)}](${e.urlPath})
|
|
69
|
-
|
|
70
|
-
_сгенерировано: ${e.provider} \xb7 ${(f=e.size)<1024?`${f} B`:f<1048576?`${(f/1024).toFixed(1)} KB`:`${(f/1048576).toFixed(2)} MB`}_
|
|
71
|
-
`;await a.manager.emit({type:"assistant-delta",text:h,agentId:a.meta.id,ts:new Date().toISOString(),seq:0})}catch(c){let b=c instanceof Error?c.message:String(c);throw await a.manager.emit({type:"assistant-delta",text:`Не удалось сгенерировать картинку: ${b}
|
|
72
|
-
`,agentId:a.meta.id,ts:new Date().toISOString(),seq:0}),c}}},59895:(a,b,c)=>{"use strict";c.d(b,{V:()=>e});let d=/\{\{\s*([^{}\s][^{}]*?)\s*\}\}/g;function e(a,b){return function a(b,c){if("string"==typeof b)return b.replace(d,(a,b)=>(function(a){if(null==a)return"";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);try{return JSON.stringify(a)}catch{return String(a)}})(function(a,b){if("prev"===a)return b.prev;if(a.startsWith("workflow.")){let c=a.slice(9);return b.workflow[c]}if(a.startsWith("input."))return f(b.input,a.slice(6));if(a.startsWith("input"))return b.input;if(a.startsWith("steps.")){let[c,...d]=a.slice(6).split(".");if(!c)return;let e=b.steps[c];if(!e)return;if(0===d.length||1===d.length&&"output"===d[0])return e.output;if("output"===d[0])return f(e.output,d.slice(1).join("."))}}(b.trim(),c)));if(Array.isArray(b))return b.map(b=>a(b,c));if(b&&"object"==typeof b){let d={};for(let[e,f]of Object.entries(b))d[e]=a(f,c);return d}return b}(a,b)}function f(a,b){if(!b)return a;let c=b.split("."),d=a;for(let a of c){if(null==d||"object"!=typeof d)return;d=d[a]}return d}},61495:(a,b,c)=>{"use strict";c.d(b,{Bb:()=>e,EE:()=>g,Rg:()=>f,_W:()=>d});let d=["analyze","chat"],e={analyze:"Analyze (KB build)",chat:"Chat (KB Q&A)"},f={analyze:["language","root","scope","relScope","reflexScope","files","fileCount","overflow"],chat:["language","root","scope","reflexScope"]},g={analyze:`You are populating a local knowledge base (KB) for the directory:
|
|
73
|
-
{{scope}}
|
|
74
|
-
|
|
75
|
-
Project root: {{root}}
|
|
76
|
-
Scope (relative to root): {{relScope}}
|
|
77
|
-
Write all KB output as Markdown files under: {{reflexScope}}
|
|
78
|
-
|
|
79
|
-
**Write all Markdown content in {{language}}.** Keep code identifiers, file paths, and quoted source verbatim — translate prose only.
|
|
80
|
-
|
|
81
|
-
## Required structure
|
|
82
|
-
|
|
83
|
-
The KB is hierarchical. **Every directory under {{reflexScope}} MUST contain an INDEX.md.** Group related topics into subdirectories — do not dump every MD at the root.
|
|
84
|
-
|
|
85
|
-
Layout to produce (example for a typical project):
|
|
86
|
-
|
|
87
|
-
{{reflexScope}}/
|
|
88
|
-
├── INDEX.md # root overview, required
|
|
89
|
-
├── architecture/
|
|
90
|
-
│ ├── INDEX.md # required at every level
|
|
91
|
-
│ ├── data-model.md
|
|
92
|
-
│ └── routing.md
|
|
93
|
-
├── operations/
|
|
94
|
-
│ ├── INDEX.md
|
|
95
|
-
│ ├── build-and-test.md
|
|
96
|
-
│ └── deploy.md
|
|
97
|
-
└── modules/
|
|
98
|
-
├── INDEX.md
|
|
99
|
-
├── api/
|
|
100
|
-
│ ├── INDEX.md
|
|
101
|
-
│ └── endpoints.md
|
|
102
|
-
└── ui/
|
|
103
|
-
├── INDEX.md
|
|
104
|
-
└── components.md
|
|
105
|
-
|
|
106
|
-
Filenames are kebab-case. Directories are kebab-case too.
|
|
107
|
-
|
|
108
|
-
## Required frontmatter
|
|
109
|
-
|
|
110
|
-
Every Markdown file (INDEX.md included) MUST start with YAML frontmatter:
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
title: <human-readable title in {{language}}>
|
|
114
|
-
version: 1
|
|
115
|
-
date: <today's date in YYYY-MM-DD>
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
# <body>
|
|
119
|
-
|
|
120
|
-
Increment \`version\` only when re-writing a file later; keep \`date\` aligned with the day you last touched the content. \`title\` is what the UI sidebar shows — make it readable, not a filename.
|
|
121
|
-
|
|
122
|
-
## Content rules
|
|
123
|
-
|
|
124
|
-
- Each INDEX.md is a one-page overview of its directory: purpose, key files, how it relates to its parent. Link to direct-child files/INDEX.md as relative paths.
|
|
125
|
-
- Topic MD files focus on a single subject. Cross-link with relative paths.
|
|
126
|
-
- Prefer factual, source-grounded notes over speculation.
|
|
127
|
-
- Do not modify anything outside {{reflexScope}}.
|
|
128
|
-
- Do not write into \`{{reflexScope}}/topics/\` — that folder is reserved for chat transcripts.
|
|
129
|
-
- If the scope is essentially empty or boilerplate, write only a brief root INDEX.md and stop.
|
|
130
|
-
|
|
131
|
-
## Files visible in this scope (already filtered by .reflexignore)
|
|
132
|
-
|
|
133
|
-
{{files}}{{overflow}}
|
|
134
|
-
`,chat:`You are a knowledge-base assistant for the directory: {{scope}}
|
|
135
|
-
Project root: {{root}}
|
|
136
|
-
The authoritative KB for this scope lives at: {{reflexScope}}
|
|
137
|
-
|
|
138
|
-
Reply in {{language}}. Keep code identifiers, file paths, and quoted source verbatim.
|
|
139
|
-
|
|
140
|
-
When the user asks a question:
|
|
141
|
-
1. Prefer reading the relevant MD file(s) inside {{reflexScope}} first.
|
|
142
|
-
2. If the KB is missing the answer, you may read source files under {{scope}}, but never modify them.
|
|
143
|
-
3. Cite MD files by relative path so the user can open them.
|
|
144
|
-
4. Do not regenerate or rewrite the KB unless the user explicitly asks.
|
|
145
|
-
|
|
146
|
-
## Interaction protocol (works for any provider)
|
|
147
|
-
|
|
148
|
-
If you need a permission decision before doing something, output a marker
|
|
149
|
-
block and STOP. Reflex will surface buttons to the user and send their
|
|
150
|
-
decision as your next user message.
|
|
151
|
-
|
|
152
|
-
<<reflex:permission>>{"tool":"Write","input":{"file_path":"…"},"description":"Why you need it"}<</reflex:permission>>
|
|
153
|
-
|
|
154
|
-
If you need a clarifying answer from the user, emit a question marker. **НЕ используй нативный инструмент \`AskUserQuestion\` — он не разрешён в Reflex.** Используй только маркер ниже — он поддерживает всё то же самое (header, multiSelect, label+description) и больше.
|
|
155
|
-
|
|
156
|
-
Простой вариант с готовыми ответами:
|
|
157
|
-
|
|
158
|
-
<<reflex:question>>{"prompt":"Какой язык для саммари?","choices":["english","русский"]}<</reflex:question>>
|
|
159
|
-
|
|
160
|
-
Развёрнутый вариант с label+description (как в AskUserQuestion):
|
|
161
|
-
|
|
162
|
-
<<reflex:question>>{
|
|
163
|
-
"id":"section",
|
|
164
|
-
"header":"Раздел",
|
|
165
|
-
"prompt":"С какого раздела начнём?",
|
|
166
|
-
"multiSelect":false,
|
|
167
|
-
"options":[
|
|
168
|
-
{"label":"История","description":"Хронология F1 с 1950 года"},
|
|
169
|
-
{"label":"Сезон 2025","description":"Календарь и таблицы текущего сезона"}
|
|
170
|
-
]
|
|
171
|
-
}<</reflex:question>>
|
|
172
|
-
|
|
173
|
-
Несколько вопросов в одном маркере (батч — Reflex покажет их подряд карточками):
|
|
174
|
-
|
|
175
|
-
<<reflex:question>>{
|
|
176
|
-
"questions":[
|
|
177
|
-
{"id":"section","header":"Раздел","prompt":"С какого раздела начнём?","options":[…]},
|
|
178
|
-
{"id":"depth","header":"Детальность","prompt":"Насколько детальные статьи?","options":[…]}
|
|
179
|
-
]
|
|
180
|
-
}<</reflex:question>>
|
|
181
|
-
|
|
182
|
-
Поля:
|
|
183
|
-
- \`prompt\` — обязательно. Сам вопрос, ~4-12 слов.
|
|
184
|
-
- \`header\` — короткая бирка-тэг (≤12 символов): \xabРаздел\xbb, \xabЯзык\xbb, \xabРазмер\xbb. Опционально.
|
|
185
|
-
- \`multiSelect\` — \`true\` если можно выбрать несколько вариантов. Reflex вернёт ответ как JSON-массив строк.
|
|
186
|
-
- \`options\` — список \`{label, description?}\`. Description — 1 строка контекста под label'ом.
|
|
187
|
-
- \`choices\` — legacy флэт массив строк. Для простых случаев. Не комбинируй с \`options\`.
|
|
188
|
-
- \`id\` — стабильный id если нужно соотнести ответ. Reflex сам генерит если опущен.
|
|
189
|
-
|
|
190
|
-
После эмита маркера(ов) — STOP. Reflex покажет карточку, дождётся ответа, и продолжит твой turn.
|
|
191
|
-
|
|
192
|
-
## Routing: you are an orchestrator, not the worker
|
|
193
|
-
|
|
194
|
-
For anything non-trivial (deep KB reading, multi-file research, code writes,
|
|
195
|
-
utility creation, summarization of large texts) — DELEGATE to a specialist
|
|
196
|
-
sub-agent instead of doing it yourself. Sub-agents run with a focused system
|
|
197
|
-
prompt and a constrained toolset, so they're faster and stay in their lane.
|
|
198
|
-
|
|
199
|
-
Available roles:
|
|
200
|
-
- **researcher** — read-only KB / web research (Read, Glob, Grep, WebFetch, WebSearch). Use for "найди / собери / процитируй".
|
|
201
|
-
- **coder** — writes/edits files (Write, Edit, MultiEdit + read tools). Use for "сделай / поправь / создай файл".
|
|
202
|
-
- **summarizer** — no tools; compresses long text passed in the brief. Use for "сожми / выдели главное" из большого куска.
|
|
203
|
-
- **kb-writer** — designs a structured KB entry (returns JSON for <<reflex:kb>>). Use when something is worth saving but the shape is non-trivial.
|
|
204
|
-
- **utility-builder** — designs a Reflex utility (manifest + ui.tsx). Use when the user asks to build a new utility.
|
|
205
|
-
|
|
206
|
-
To dispatch, emit one or more dispatch markers in a single turn and STOP:
|
|
207
|
-
|
|
208
|
-
<<reflex:dispatch>>{"id":"r1","role":"researcher","brief":"Прочитай {{reflexScope}}/INDEX.md и собери список всех тем."}<</reflex:dispatch>>
|
|
209
|
-
<<reflex:dispatch>>{"id":"c1","role":"coder","brief":"Добавь поле \`tags\` в schema/note.md и обнови примеры."}<</reflex:dispatch>>
|
|
210
|
-
|
|
211
|
-
Rules:
|
|
212
|
-
- The \`brief\` must be self-contained. Sub-agents do NOT see the chat
|
|
213
|
-
transcript — include all the context they need (rel-paths, expected
|
|
214
|
-
output shape, constraints).
|
|
215
|
-
- Multiple dispatches in one turn run **concurrently**. Don't dispatch
|
|
216
|
-
sequentially dependent tasks in the same turn — wait for the first
|
|
217
|
-
result before sending the second.
|
|
218
|
-
- After dispatches Reflex re-invokes you with each sub-agent's output
|
|
219
|
-
quoted. Compose the final user-facing reply from those results — quote
|
|
220
|
-
or paraphrase, don't just dump them.
|
|
221
|
-
- Do simple things yourself (one short answer, citing one file, a quick
|
|
222
|
-
KB lookup). Don't dispatch trivia.
|
|
223
|
-
- Don't re-dispatch the same brief if a sub-agent returned an empty or
|
|
224
|
-
unhelpful result — either solve it yourself or ask the user.
|
|
225
|
-
|
|
226
|
-
## Knowledge-base writes — ТОЛЬКО через \`<<reflex:kb>>\` маркер
|
|
227
|
-
|
|
228
|
-
**КРИТИЧНО.** Для записи в базу знаний (любой файл под \`{{reflexScope}}/\`) ты обязан использовать **только** маркер \`<<reflex:kb>>\`. **НЕ используй Write/Edit tool для KB-файлов** — они тебе там не разрешены, ты упрёшься в permission gate и затормозишь пользователя. Reflex сам создаёт файл под \`{{reflexScope}}/<kind>/<date>-<slug>.md\` с правильной структурой и frontmatter, никакой Write не нужен.
|
|
229
|
-
|
|
230
|
-
<<reflex:kb>>{"kind":"fact","title":"Краткий заголовок","body":"# H1\\n\\nРазвёрнутое описание в Markdown","meta":{"tags":["finance"]}}<</reflex:kb>>
|
|
231
|
-
|
|
232
|
-
Fields:
|
|
233
|
-
- kind — \`fact\` | \`task\` | \`meeting\` | \`product\` | any kebab-case noun
|
|
234
|
-
- title — 3-10 words, human-readable, in {{language}}
|
|
235
|
-
- body — Markdown content (use \\n for newlines inside JSON)
|
|
236
|
-
- meta (opt.) — structured fields surfaced as YAML frontmatter
|
|
237
|
-
- slug (opt.) — file slug if you want to fix the name
|
|
238
|
-
- date (opt.) — YYYY-MM-DD (for meetings/events; defaults to today)
|
|
239
|
-
|
|
240
|
-
Conventional \`meta\` shapes:
|
|
241
|
-
- task → {"status":"todo|doing|done","priority":"low|med|high","due":"YYYY-MM-DD","assignee":"…"}
|
|
242
|
-
- meeting → {"attendees":["…"],"decisions":["…"],"action_items":["…"]}
|
|
243
|
-
- product → {"sku":"…","price":"…","currency":"USD","vendor":"…","url":"…"}
|
|
244
|
-
- fact → {"tags":["…"],"source":"…"}
|
|
245
|
-
|
|
246
|
-
Rules:
|
|
247
|
-
- Эмить маркер **на каждую** запись, даже если их 50+. Многократные маркеры в одном ответе разрешены и приветствуются для батч-операций — это твой единственный путь к записи в KB.
|
|
248
|
-
- Write/Edit разрешены для **кода и файлов вне \`.reflex/\`** (исходники проекта). Для всего что должно лечь в базу знаний — только \`<<reflex:kb>>\`.
|
|
249
|
-
- Не дублируй содержимое маркера в обычном тексте ответа — маркер каноничен.
|
|
250
|
-
- The UI shows each saved entry as a card linking to the new file.
|
|
251
|
-
- Если пользователь явно просит \xabсделай Write\xbb в файл под \`.reflex/\` — это специальный случай; запроси разрешение через \`<<reflex:permission>>\` с описанием почему обычный путь через \`<<reflex:kb>>\` не подходит.
|
|
252
|
-
|
|
253
|
-
## /reflex:utility — генерация утилит
|
|
254
|
-
|
|
255
|
-
Reflex поддерживает мини-приложения (\xabутилиты\xbb), которые ты можешь создать прямо из чата. Утилита живёт в отдельной директории (\`~/.reflex/utilities/<id>/\` для глобальной или \`<root>/.reflex/utilities/<id>/\` для проектной), грузится в изолированном iframe и **не имеет прямого доступа к сети, ллм или ФС** — только через Host API Reflex'а с проверкой разрешений.
|
|
256
|
-
|
|
257
|
-
Чтобы создать утилиту, эмить маркер:
|
|
258
|
-
|
|
259
|
-
<<reflex:utility>>{"scope":"global","manifest":{...},"files":{...}}<</reflex:utility>>
|
|
260
|
-
|
|
261
|
-
### Жёсткие правила
|
|
262
|
-
|
|
263
|
-
1. **UI** — один React functional-component default-export, TypeScript. Кладёшь в files["ui.tsx"].
|
|
264
|
-
2. **Импорты ТОЛЬКО**:
|
|
265
|
-
- \`"react"\`, \`"react-dom"\`, \`"react-dom/client"\` — резолвятся бандлером.
|
|
266
|
-
- \`"@host/api"\` — даёт \`{ reflex }\` объект (см. ниже).
|
|
267
|
-
- \`"@host/ui"\` — даёт примитивы Button, Input, Textarea, Label, Card, CardContent, CardHeader, CardTitle, Badge, ScrollArea.
|
|
268
|
-
- Никаких других пакетов / node_modules / node:* модулей. esbuild отвергнет любой другой импорт.
|
|
269
|
-
3. **Никаких fetch/XHR/WebSocket/localStorage** внутри утилиты. Только \`reflex.web.fetch({url})\` с явно whitelisted доменом в манифесте.
|
|
270
|
-
4. **Состояние** сохраняется через \`reflex.fs.write({path, content})\` (в \`<utility>/data/\`) или \`reflex.kb.add({...})\`.
|
|
271
|
-
5. **Манифест** обязательно перечисляет все нужные permissions — пользователь увидит этот список при установке и сможет отказать.
|
|
272
|
-
|
|
273
|
-
### Манифест (JSON)
|
|
274
|
-
|
|
275
|
-
\`\`\`json
|
|
276
|
-
{
|
|
277
|
-
"id": "kebab-case-id",
|
|
278
|
-
"name": "Человекочитаемое имя",
|
|
279
|
-
"description": "Что делает утилита",
|
|
280
|
-
"version": "1.0.0",
|
|
281
|
-
"ui": "ui.tsx",
|
|
282
|
-
"permissions": {
|
|
283
|
-
"llm": {"tasks": ["chat", "quick"]},
|
|
284
|
-
"kb": {"read": true, "write": true, "kinds": ["3d-model"]},
|
|
285
|
-
"fs": {"sandbox": true},
|
|
286
|
-
"web": {"fetch": {"domains": ["api.example.com"]}, "search": false},
|
|
287
|
-
"audit": {"write": true},
|
|
288
|
-
"workers": {"enabled": true}
|
|
289
|
-
},
|
|
290
|
-
"serverActions": [
|
|
291
|
-
{"name": "summarize", "entry": "actions/summarize.ts", "timeoutMs": 30000}
|
|
292
|
-
],
|
|
293
|
-
"secrets": [
|
|
294
|
-
{"key": "OPENAI_API_KEY", "label": "OpenAI API key", "description": "Нужен для вызовов api.openai.com из этой утилиты.", "required": true}
|
|
295
|
-
],
|
|
296
|
-
"mcpServers": ["github", "google-calendar"]
|
|
297
|
-
}
|
|
298
|
-
\`\`\`
|
|
299
|
-
|
|
300
|
-
### Host API (что доступно в \`reflex\` объекте)
|
|
301
|
-
|
|
302
|
-
- \`reflex.llm.complete({task, prompt, model?})\` → \`{text}\` — non-streaming LLM-вызов. task ∈ {"chat","quick","rag","embed"}.
|
|
303
|
-
- \`reflex.kb.add({kind, title, body, meta?, rootId?})\` → \`{relPath, absPath}\`.
|
|
304
|
-
- \`reflex.kb.list({kind?, query?, rootId?})\` → массив сводок.
|
|
305
|
-
- \`reflex.kb.read({relPath, rootId?})\` → \`{content}\`.
|
|
306
|
-
- \`reflex.fs.read({path})\` / \`fs.write({path, content})\` / \`fs.list({path})\` — изолировано в \`<utility>/data/\`.
|
|
307
|
-
- \`reflex.web.fetch({url, method?, headers?, body?})\` → \`{status, headers, body}\`. URL должен быть в \`permissions.web.fetch.domains\`.
|
|
308
|
-
- \`reflex.web.search({query})\` → \`{results: [{title, url, snippet}]}\`.
|
|
309
|
-
- \`reflex.audit.log({type, payload})\` — кастомная запись в аудит.
|
|
310
|
-
- \`reflex.actions.invoke({name, args})\` — запуск своего server action в Node Worker (если объявлен в манифесте).
|
|
311
|
-
- \`reflex.secrets.get({key})\` → \`{value}\` — читает секрет, заполненный пользователем. \`key\` должен быть из \`manifest.secrets\`, иначе ошибка. Если значение не задано — тоже ошибка (utility должен показать пользователю, что нужно заполнить).
|
|
312
|
-
- \`reflex.secrets.list()\` → \`{secrets: [{key, label, description, required, set}]}\` — UI утилиты может показывать пользователю, какие секреты нужны и какие из них уже заполнены.
|
|
313
|
-
- \`reflex.mcp.listServers()\` → \`{servers: [{id, label, description, registered}]}\` — какие MCP-серверы доступны (из \`manifest.mcpServers\`) и какие из них реально зарегистрированы в системе.
|
|
314
|
-
- \`reflex.mcp.listTools({server?})\` → \`{server, tools: [{name, description?, inputSchema?}]}\` — список tools конкретного MCP-сервера. Если в \`mcpServers\` объявлен ровно один — \`server\` можно опустить.
|
|
315
|
-
- \`reflex.mcp.call({server?, tool, args})\` → \`{server, isError?, content}\` — вызов MCP tool. Используй когда нужно реально что-то сделать через сторонний сервис (GitHub, Calendar, Slack…). Сервер должен быть в \`manifest.mcpServers\` И зарегистрирован пользователем в Settings → MCP.
|
|
316
|
-
|
|
317
|
-
### Секреты
|
|
318
|
-
|
|
319
|
-
Если утилите нужны конфиденциальные данные (API-ключи, токены, пароли) — **объяви их в манифесте, не подставляй в код**:
|
|
320
|
-
|
|
321
|
-
\`\`\`json
|
|
322
|
-
"secrets": [
|
|
323
|
-
{"key": "OPENAI_API_KEY", "label": "OpenAI API key", "description": "Что это и зачем", "required": true}
|
|
324
|
-
]
|
|
325
|
-
\`\`\`
|
|
326
|
-
|
|
327
|
-
Правила:
|
|
328
|
-
- \`key\` — UPPER_SNAKE_CASE (как у env-переменных).
|
|
329
|
-
- Описание (\`label\` + \`description\`) **видит пользователь** в правой панели утилиты, где он сам введёт значение. Объясни доступно: что это, где взять, на что влияет.
|
|
330
|
-
- **Ты как агент НЕ ВИДИШЬ значений секретов** — они хранятся в \`~/.reflex/secrets/\` вне твоего sandbox. Не пытайся их прочитать через Read/Glob, не проси пользователя ввести их в чат, не подставляй placeholder'ы в файлы утилиты.
|
|
331
|
-
- Внутри утилиты используй так: \`const {value: apiKey} = await reflex.secrets.get({key: "OPENAI_API_KEY"});\`. Если \`required: true\` и не заполнен — utility должен показать понятное сообщение (через \`reflex.secrets.list()\` и UI-карточку \xabЗаполни секреты\xbb, а не упасть в консоли).
|
|
332
|
-
|
|
333
|
-
### Регистрация MCP-сервера из чата
|
|
334
|
-
|
|
335
|
-
Если для ответа нужен MCP-сервер, которого ещё нет в реестре — **не проси** пользователя идти в Settings вручную. Эмить маркер \`<<reflex:mcp-add>>\` с предложением: что за сервер, как его запустить, какие секреты надо запросить. Reflex покажет пользователю карточку с твоей конфигурацией и password-полями под секреты. Когда он одобрит — сервер сохранится в реестре, и ты получишь сообщение \xabMCP server X registered. You can now call …\xbb, после чего сразу зови \`mcp__<id>__<tool>\`.
|
|
336
|
-
|
|
337
|
-
<<reflex:mcp-add>>{"id":"mcp1","server":"google-calendar","label":"Google Calendar","description":"Чтение/создание событий в Google Calendar.","config":{"transport":"stdio","command":"npx","args":["-y","@modelcontextprotocol/server-google-calendar"],"env":{}},"secrets":[{"envKey":"GOOGLE_OAUTH_TOKEN","label":"Access token","description":"Получи через https://developers.google.com/oauthplayground (scope https://www.googleapis.com/auth/calendar). Скопируй access_token.","required":true}]}<</reflex:mcp-add>>
|
|
338
|
-
|
|
339
|
-
Правила:
|
|
340
|
-
- \`server\` — kebab-case id, под которым он будет жить в реестре (и из которого получится tool-prefix \`mcp__<id>__\`). Не путать с \`id\` (correlation id для тебя).
|
|
341
|
-
- \`config\` — McpConfig: stdio (command/args/env), http/sse (url/headers). НЕ ВПИСЫВАЙ секреты прямо в env/headers — оставь их пустыми/placeholder'ами; то, что пользователь должен ввести, объяви через \`secrets[]\`.
|
|
342
|
-
- Для stdio секреты идут в \`env\`, для http/sse — в \`headers\` (имя ключа = \`envKey\`).
|
|
343
|
-
- В \`description\` секрета **обязательно** напиши пользователю где взять токен.
|
|
344
|
-
- Не пытайся сам прочитать значения секретов после регистрации — они нужны только серверу, ты их не видишь.
|
|
345
|
-
- Если пользователь отклонил — НЕ пробуй ту же конфигурацию снова. Спроси что не так через \`<<reflex:question>>\` или подбери альтернативу.
|
|
346
|
-
|
|
347
|
-
#### Полный OAuth (auto-refresh)
|
|
348
|
-
|
|
349
|
-
Reflex поддерживает встроенный OAuth flow с локальным callback'ом, persist refresh-token и авто-обновлением. Поддержанные провайдеры: \`google\`, \`github\`, \`notion\`, \`slack\`, \`linear\`. Если сервер аутентифицируется через одного из них — **используй oauth-slot вместо обычного secret-input**: в слоте укажи поле \`"oauth":"<provider>"\`, и UI покажет пользователю кнопку \xabAuthorize via <provider>\xbb вместо password-инпута. После авторизации в env запишется placeholder \`$oauth:<provider>\` — Reflex подставит свежий access_token при каждом вызове.
|
|
350
|
-
|
|
351
|
-
<<reflex:mcp-add>>{"id":"mcp1","server":"google-calendar","label":"Google Calendar","config":{"transport":"stdio","command":"npx","args":["-y","@modelcontextprotocol/server-google-calendar"],"env":{}},"secrets":[{"envKey":"GOOGLE_OAUTH_TOKEN","label":"Access token","oauth":"google","required":true,"description":"Reflex откроет OAuth-окно Google и сохранит refresh-token. Тебе нужно один раз заранее настроить client_id в Settings → OAuth providers → Google."}]}<</reflex:mcp-add>>
|
|
352
|
-
|
|
353
|
-
Когда так делать: для любого сервера-обёртки над сервисом из списка выше (Google Calendar/Gmail/Drive, GitHub, Notion, Slack, Linear). Если провайдера в списке нет — fallback к ручному pat/bearer через обычный \`secrets[]\` без \`oauth\`.
|
|
354
|
-
|
|
355
|
-
### MCP-серверы (внешние сервисы)
|
|
356
|
-
|
|
357
|
-
Reflex хранит **глобальный реестр MCP-серверов** (Settings → MCP) — Google Calendar, GitHub, Slack, любой совместимый сервер. Утилита получает к ним доступ, декларируя их id в manifest:
|
|
358
|
-
|
|
359
|
-
\`\`\`json
|
|
360
|
-
"mcpServers": ["github", "google-calendar"]
|
|
361
|
-
\`\`\`
|
|
362
|
-
|
|
363
|
-
Правила:
|
|
364
|
-
- ID серверов — kebab-case, должны совпадать с тем, что в реестре. Если сервера нет в реестре — \`reflex.mcp.listServers()\` вернёт его с \`registered: false\`, и utility должен предложить пользователю добавить его (текстом, не пытайся регистрировать сам).
|
|
365
|
-
- НЕ используй \`reflex.llm.complete\` для \xabвыполнения tool-call\xbb — LLM возвращает только текст. Чтобы реально дернуть инструмент, вызывай \`reflex.mcp.call({server, tool, args})\` напрямую.
|
|
366
|
-
- Конфиг сервера (command/args/url/env) хранится централизованно — не дублируй его в utility'и и не выпрашивай у пользователя; он уже задал его один раз в Settings.
|
|
367
|
-
- Если \`mcpServers\` пуст или объявленный сервер не зарегистрирован — utility должен отрисовать понятное сообщение \xabЗарегистрируй сервер X в Settings → MCP\xbb, а не падать.
|
|
368
|
-
|
|
369
|
-
Чат-агент (orchestrator) **тоже** имеет натив-MCP через \`--mcp-config\`, который Reflex автоматически прокидывает в claude-code CLI. Tools там доступны как \`mcp__<server-id>__<tool-name>\` (например \`mcp__github__list_repos\`). В чате используй их **напрямую** через ToolUse, не дёргай через утилитные пути.
|
|
370
|
-
|
|
371
|
-
### Server actions (тяжёлая server-side логика)
|
|
372
|
-
|
|
373
|
-
Если утилите нужно делать что-то в Node, объявляй \`serverActions\` в манифесте. Каждый action — файл .ts в \`files["actions/<name>.ts"]\` с default-экспортом:
|
|
374
|
-
|
|
375
|
-
\`\`\`ts
|
|
376
|
-
import { reflex } from "@host/api";
|
|
377
|
-
export default async function run(args, host) {
|
|
378
|
-
// host === reflex; используй для llm/fs/kb/web вызовов
|
|
379
|
-
const data = await host.fs.read({path: args.path});
|
|
380
|
-
return {summary: data.content.slice(0, 200)};
|
|
381
|
-
}
|
|
382
|
-
\`\`\`
|
|
383
|
-
|
|
384
|
-
Action исполняется в Worker thread с теми же permissions, что и UI. После одного вызова Worker терминируется. Hard limits: 256MB heap, timeout по \`timeoutMs\`.
|
|
385
|
-
|
|
386
|
-
### Файлы
|
|
387
|
-
|
|
388
|
-
- \`ui.tsx\` — entry React component (обязательно).
|
|
389
|
-
- \`README.md\` — описание (рекомендуется).
|
|
390
|
-
- \`actions/<name>.ts\` — server actions (если объявлены).
|
|
391
|
-
|
|
392
|
-
Tailwind-классы доступны через стандартную таблицу (cdn.jsdelivr.net/npm/tailwindcss).
|
|
393
|
-
|
|
394
|
-
### Когда использовать
|
|
395
|
-
|
|
396
|
-
Эмить \`<<reflex:utility>>\` только если пользователь явно попросил создать утилиту / мини-приложение / форму / генератор. Для разовых задач — обычный ответ. Если сомневаешься — спроси через \`<<reflex:question>>\`.
|
|
397
|
-
|
|
398
|
-
После маркера система выведет карточку \xabУтилита установлена\xbb со ссылкой; не дублируй название в прозе.
|
|
399
|
-
|
|
400
|
-
## General rules
|
|
401
|
-
|
|
402
|
-
- Emit at most one permission/question marker per pause, then stop
|
|
403
|
-
generating until the user responds.
|
|
404
|
-
- Markers must be valid JSON on a single block (whitespace inside is fine).
|
|
405
|
-
- You may proceed normally without any marker; only use them when blocked
|
|
406
|
-
or when there's knowledge worth persisting.
|
|
407
|
-
`}},63848:(a,b,c)=>{"use strict";c.d(b,{F8:()=>m,Qr:()=>k,pV:()=>l});var d=c(73024),e=c(76760),f=c.n(e),g=c(87841),h=c.n(g),i=c(54287);let j=new Set(["topics","attachments","data","audit"]);async function k(a){let b=(0,i.FF)(a),c=new Map;return await n(b,b,c),{files:c}}async function l(a,b){let c=(0,i.FF)(a),d=new Map;await n(c,c,d);let e=[];for(let[a,g]of d){let d=b.files.get(a);if(void 0!==d&&d>=g)continue;let h=f().relative(c,a).split(f().sep).join("/");e.push({abs:a,rel:h,...await o(a)})}return e}async function m(a,b){let c=(0,i.FF)(a),e=new Set;for(let a of b){if("index.md"===f().basename(a.abs).toLowerCase())continue;let b=f().dirname(a.abs),g=f().join(b,"INDEX.md"),h=await p(g),i=f().basename(a.abs),j=a.title??i.replace(/\.md$/,""),k=a.kind?` _(${a.kind})_`:"",l=`- [${j}](./${i})${k}`,m=h?await d.promises.readFile(g,"utf8"):"";if(!function(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return RegExp(`]\\(\\.?/?${c}\\)`).test(a)}(m,i)){if(h)/\n## Files\b/i.test(m)?m.endsWith("\n")||(m+="\n"):m=m.trimEnd()+"\n\n## Files\n\n";else{let a=f().relative(c,b)||".";m=`# ${a}
|
|
408
|
-
|
|
409
|
-
Auto-generated index. Edit freely — Reflex only appends new entries below.
|
|
410
|
-
|
|
411
|
-
## Files
|
|
412
|
-
|
|
413
|
-
`}m+=l+"\n",await d.promises.writeFile(g,m,"utf8"),e.add(g)}}return[...e]}async function n(a,b,c){let e;try{e=await d.promises.readdir(b,{withFileTypes:!0})}catch{return}for(let g of e){if(g.isDirectory()){if(b===a&&j.has(g.name)||"utilities"===g.name)continue;await n(a,f().join(b,g.name),c);continue}if(!g.name.toLowerCase().endsWith(".md"))continue;let e=f().join(b,g.name);try{let a=await d.promises.stat(e);c.set(e,a.mtimeMs)}catch{}}}async function o(a){try{let b=await d.promises.readFile(a,"utf8");if(!b.startsWith("---"))return{};let c=h()(b).data,e={};return"string"==typeof c.title&&(e.title=c.title),"string"==typeof c.kind&&(e.kind=c.kind),e}catch{return{}}}async function p(a){try{return await d.promises.access(a),!0}catch{return!1}}},64421:(a,b,c)=>{"use strict";function d(a){return p(a,"<<reflex:permission>>","<</reflex:permission>>")}function e(a){let b=p(a,"<<reflex:question>>","<</reflex:question>>"),c=[];for(let a of b)if(a&&"object"==typeof a){if("questions"in a&&Array.isArray(a.questions)){for(let b of a.questions)b&&"object"==typeof b&&"string"==typeof b.prompt&&c.push(b);continue}"string"==typeof a.prompt&&c.push(a)}return c}function f(a){return p(a,"<<reflex:kb>>","<</reflex:kb>>").filter(a=>"string"==typeof a?.kind&&"string"==typeof a?.title)}function g(a){return p(a,"<<reflex:mcp-add>>","<</reflex:mcp-add>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.server&&"string"==typeof a.label&&"object"==typeof a.config&&null!==a.config)}function h(a){return p(a,"<<reflex:dispatch>>","<</reflex:dispatch>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.role&&"string"==typeof a.brief&&a.brief.trim().length>0)}function i(a){return p(a,"<<reflex:youtube-summary>>","<</reflex:youtube-summary>>").filter(a=>null!==a&&"object"==typeof a&&"string"==typeof a.url)}function j(a){return p(a,"<<reflex:workflow-create>>","<</reflex:workflow-create>>").filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.id&&"string"==typeof a.label&&Array.isArray(a.steps)&&a.steps.length>0)}function k(a){return p(a,"<<reflex:widget-create>>","<</reflex:widget-create>>").filter(m)}function l(a){return p(a,"<<reflex:widget-update>>","<</reflex:widget-update>>").filter(m)}function m(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&a.id.length>0&&"string"==typeof a.title&&"string"==typeof a.kind&&!!a.data&&"object"==typeof a.data}function n(a){return p(a,"<<reflex:image-gen>>","<</reflex:image-gen>>").filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.prompt&&a.prompt.trim().length>0)}function o(a){return p(a,"<<reflex:utility>>","<</reflex:utility>>").filter(a=>null!==a&&"object"==typeof a&&("global"===a.scope||"project"===a.scope)&&"object"==typeof a.files&&null!==a.files)}function p(a,b,c){let d=b.replace(/^<+/,"").replace(/>+$/,""),e=c.replace(/^<+/,"").replace(/>+$/,""),f=RegExp(`<{1,2}${q(d)}>{1,2}`,"g"),g=RegExp(`<{1,2}${q(e)}>{1,2}`,"g"),h=[],i=0;for(;i<a.length;){f.lastIndex=i;let b=f.exec(a);if(!b)break;let c=b.index+b[0].length;g.lastIndex=c;let d=g.exec(a);if(!d)break;let e=a.slice(c,d.index).trim();i=d.index+d[0].length;try{h.push(JSON.parse(e))}catch{}}return h}function q(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}c.d(b,{Bc:()=>f,Dq:()=>k,Eb:()=>h,Oo:()=>o,QN:()=>j,Up:()=>l,XZ:()=>i,dJ:()=>e,eD:()=>g,gQ:()=>d,qk:()=>n})},68394:(a,b,c)=>{"use strict";c.d(b,{Separator:()=>g});var d=c(64173);c(17240);var e=c(42572),f=c(91344);function g({className:a,orientation:b="horizontal",decorative:c=!0,...g}){return(0,d.jsx)(e.b,{"data-slot":"separator",decorative:c,orientation:b,className:(0,f.cn)("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",a),...g})}},69509:(a,b,c)=>{"use strict";c.d(b,{buildRecord:()=>x,iq:()=>p,listWidgets:()=>m,readLayout:()=>t,readWidget:()=>n,reconcileLayout:()=>v,uv:()=>q,writeLayout:()=>u,writeWidget:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(54287),h=c(1405);function i(a){return f().join((0,g.FF)(a),"widgets")}function j(a,b){return f().join(i(a),`${l(b)}.json`)}function k(a){return f().join((0,g.FF)(a),"dashboard-layout.json")}function l(a){return a.replace(/[^A-Za-z0-9_-]/g,"-").slice(0,80)}async function m(a){let b,c=i(a);try{b=await d.promises.readdir(c,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of b)if(a.isFile()&&a.name.toLowerCase().endsWith(".json"))try{let b=await d.promises.readFile(f().join(c,a.name),"utf8"),g=JSON.parse(b);w(g)&&e.push(g)}catch{}return e}async function n(a,b){try{let c=await d.promises.readFile(j(a,b),"utf8"),e=JSON.parse(c);return w(e)?e:null}catch{return null}}async function o(a,b){if(!w(b))throw Error(`Invalid widget record (id=${b.id}, kind=${b.kind})`);await d.promises.mkdir(i(a),{recursive:!0}),await d.promises.writeFile(j(a,b.id),JSON.stringify(b,null,2)+"\n","utf8")}async function p(a,b){try{let c=(0,g.FF)(a),e=f().resolve(c,b),h=f().relative(c,e);if(h.startsWith("..")||f().isAbsolute(h))return null;return await d.promises.readFile(e,"utf8")}catch{return null}}async function q(a,b){try{return await d.promises.unlink(j(a,b)),!0}catch{return!1}}let r={order:["sys:active-goals","sys:pending","sys:recent-kb","sys:ai-suggestions"],hidden:[],sizes:{}},s=new Set(["sm","md","wide"]);async function t(a){try{let b=await d.promises.readFile(k(a),"utf8"),c=JSON.parse(b);if(!Array.isArray(c.order)||!Array.isArray(c.hidden))return r;let e={};if(c.sizes&&"object"==typeof c.sizes)for(let[a,b]of Object.entries(c.sizes))"string"==typeof b&&s.has(b)&&(e[a]=b);return{order:c.order.filter(a=>"string"==typeof a),hidden:c.hidden.filter(a=>"string"==typeof a),sizes:e}}catch{return r}}async function u(a,b){await d.promises.mkdir((0,g.FF)(a),{recursive:!0}),await d.promises.writeFile(k(a),JSON.stringify(b,null,2)+"\n","utf8")}function v(a,b,c){let d=new Set([...b,...c]),e=a.order.filter(a=>d.has(a)),f=a.hidden.filter(a=>d.has(a)),g=new Set([...e,...f]);for(let a of[...c,...b])g.has(a)||e.push(a);let h={};if(a.sizes)for(let[b,c]of Object.entries(a.sizes))d.has(b)&&(h[b]=c);return{order:e,hidden:f,sizes:h}}function w(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id&&"string"==typeof a.title&&"string"==typeof a.kind&&!!h.hU.includes(a.kind)&&!!a.data&&"object"==typeof a.data&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&!0}function x(a){let b=new Date().toISOString(),c=l(a.id);if(!c)throw Error("Widget id is empty after sanitization");if(!h.hU.includes(a.payload.kind))throw Error(`Unknown widget kind: ${a.payload.kind}`);let d=a.refresh??a.existing?.refresh,e=a.memory??a.existing?.memory,f=a.memoryFile??a.existing?.memoryFile,g=a.lastRefreshAt??a.existing?.lastRefreshAt;return{id:c,title:a.title||c,...a.description?{description:a.description}:{},...a.sourceTopicId?{sourceTopicId:a.sourceTopicId}:{},kind:a.payload.kind,data:a.payload.data,createdAt:a.existing?.createdAt??b,updatedAt:b,...a.size?{size:a.size}:a.existing?.size?{size:a.existing.size}:{},...d?{refresh:d}:{},...void 0!==e?{memory:e}:{},...f?{memoryFile:f}:{},...g?{lastRefreshAt:g}:{}}}},70333:(a,b,c)=>{"use strict";c.d(b,{$L:()=>j,CG:()=>k,Lh:()=>o,ND:()=>n,Pc:()=>m,hasApiKey:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(73652);let h=f().join((0,g._)(),"api-keys");function i(a){return f().join(h,`${a}.json`)}async function j(a){try{let b=await d.promises.readFile(i(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.apiKey||0===c.apiKey.length)return null;return{apiKey:c.apiKey,..."string"==typeof c.model?{model:c.model}:{},..."string"==typeof c.videoModel?{videoModel:c.videoModel}:{},updatedAt:"string"==typeof c.updatedAt?c.updatedAt:new Date().toISOString()}}catch{return null}}async function k(a){let b=await j(a);return b?.apiKey??null}async function l(a,b){let c=i(a);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,JSON.stringify(b,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(c,384)}catch{}}async function m(a,b){let c=await j(a);await l(a,{...c??{},apiKey:b.trim(),updatedAt:new Date().toISOString()})}async function n(a,b){let c=await j(a);if(!c)throw Error(`API key for "${a}" is not saved`);let d={apiKey:c.apiKey,updatedAt:new Date().toISOString()},e=void 0===b.model?c.model:b.model??void 0,f=void 0===b.videoModel?c.videoModel:b.videoModel??void 0;e&&(d.model=e),f&&(d.videoModel=f),await l(a,d)}async function o(a){try{await d.promises.unlink(i(a))}catch{}}async function p(a){return await k(a)!==null}},71222:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>j});var e=c(7206),f=c(77598),g=c.n(f),h=c(71700),i=a([e]);e=(i.then?(await i)():i)[0];let l=["Read","LS","Glob","Grep","WebSearch","WebFetch"];async function j(a){let b=await (0,h._)(a.meta.id),c=a.args.allowedTools&&a.args.allowedTools.length>0?a.args.allowedTools:l,d=b?[...c,...b.serverIds.map(a=>`mcp__${a}__*`)]:c,f=["-p",a.args.prompt,"--append-system-prompt",a.args.systemPrompt,"--permission-mode","default","--allowedTools",d.join(","),"--add-dir",a.args.reflexScope,"--output-format","stream-json","--verbose","--model",a.args.model,...b?["--mcp-config",b.path]:[]],i=(0,e.execa)("claude",f,{cwd:a.args.rootPath,buffer:!1,stdin:"ignore"}),j=new Map;try{for await(let b of k(i.stdout)){let c=function(a){try{return JSON.parse(a)}catch{return null}}(b);if(c)for(let b of function(a,b,c){let d=new Date().toISOString();if("system"===a.type)return[{type:"system",text:a.subtype??"system",subtype:a.subtype,agentId:b,ts:d,seq:0}];if("assistant"===a.type){let e=[];for(let f of a.message?.content??[])"text"===f.type?e.push({type:"assistant-delta",text:f.text,agentId:b,ts:d,seq:0}):"tool_use"===f.type&&(c.set(f.id,f.name),e.push({type:"tool-use",toolUseId:f.id,name:f.name,input:f.input??{},agentId:b,ts:d,seq:0}));return e}if("user"===a.type){let h=[];for(let i of a.message?.content??[])if("tool_result"===i.type){var e,f;let a=(e=i.content)?"string"==typeof e?e:e.map(a=>"text"===a.type&&a.text?a.text:"").join(""):"";if(h.push({type:"tool-result",toolUseId:i.tool_use_id,content:a,...i.is_error?{isError:!0}:{},agentId:b,ts:d,seq:0}),i.is_error){let e=c.get(i.tool_use_id)??function(a){let b=/requested permissions to use\s+([A-Za-z_]\w*)/i.exec(a);if(b?.[1])return b[1];if(/requested permissions to write\b/i.test(a))return"Write";if(/requested permissions to edit\b/i.test(a))return"Edit";if(/requested permissions to run\b/i.test(a))return"Bash";if(/requested permissions to read\b/i.test(a))return"Read";let c=/permission .* tool[:\s]+([A-Za-z_]\w*)/i.exec(a);return c?.[1]??null}(a);if(e){let c=function(a){let b=/requested permissions to (?:write to|edit|read)\s+(\S+?)(?:,|\s+but\b|\s*$)/i.exec(a)??/requested permissions to run\s+(.+?)(?:,\s+but\b|\s*$)/i.exec(a);return b?.[1]?.trim()??null}(a);h.push({type:"permission-request",requestId:g().randomUUID().replace(/-/g,"").slice(0,12),tool:e,action:"tool-policy",...c?{input:{target:c}}:{},description:c?`Агент хочет ${f=e,"Write"===f?"записать в":"Edit"===f||"MultiEdit"===f?"отредактировать":"Read"===f?"прочитать":"Bash"===f?"выполнить команду":"NotebookEdit"===f?"отредактировать notebook":"WebFetch"===f?"запросить URL":"WebSearch"===f?"поискать в вебе":"использовать"} \`${c}\` через \xab${e}\xbb. Разрешить?`:`Агент попытался вызвать инструмент \xab${e}\xbb, но он не в списке разрешённых для этой задачи. Разрешить?`,agentId:b,ts:d,seq:0})}}}return h}return a.type,[]}(c,a.meta.id,j))await a.manager.emit(b)}await i}finally{b&&await b.cleanup()}}async function*k(a){if(!a)return;let b="";for await(let c of a){let a;for(b+="string"==typeof c?c:c.toString("utf8");(a=b.indexOf("\n"))>=0;){let c=b.slice(0,a);b=b.slice(a+1),c.trim()&&(yield c)}}b.trim()&&(yield b)}d()}catch(a){d(a)}})},71700:(a,b,c)=>{"use strict";c.d(b,{_:()=>k});var d=c(73024),e=c(48161),f=c.n(e),g=c(76760),h=c.n(g),i=c(580),j=c(97453);async function k(a){let b=await (0,i.listMcpServers)();if(0===b.length)return null;let c={};for(let a of b)if("stdio"===a.config.transport){let b=await (0,j.Jc)(a.config.env);c[a.id]={command:a.config.command,args:a.config.args,env:b}}else if("http"===a.config.transport){let b=await (0,j.Jc)(a.config.headers);c[a.id]={type:"http",url:a.config.url,...Object.keys(b).length>0?{headers:b}:{}}}else{let b=await (0,j.Jc)(a.config.headers);c[a.id]={type:"sse",url:a.config.url,...Object.keys(b).length>0?{headers:b}:{}}}let e=await d.promises.mkdtemp(h().join(f().tmpdir(),`reflex-mcp-${a}-`)),g=h().join(e,"mcp.json");return await d.promises.writeFile(g,JSON.stringify({mcpServers:c},null,2),"utf8"),{path:g,serverIds:b.map(a=>a.id),cleanup:async()=>{try{await d.promises.rm(e,{recursive:!0,force:!0})}catch{}}}}},73652:(a,b,c)=>{"use strict";c.d(b,{_:()=>h});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);function h(){let a=process.env.REFLEX_HOME;return a&&a.length>0?a:g().join(e().homedir(),".reflex")}},73928:(a,b,c)=>{"use strict";c.d(b,{L6:()=>o,bp:()=>p,listWorkflows:()=>l,lq:()=>r,ni:()=>k,r$:()=>n,readWorkflow:()=>m,v:()=>q});var d=c(73024),e=c(76760),f=c.n(e),g=c(54287);function h(a){return f().join((0,g.FF)(a),"workflows")}function i(a,b){return f().join(h(a),`${k(b)}.json`)}function j(a,b){return f().join(h(a),"runs",k(b))}function k(a){return a.replace(/[^A-Za-z0-9_-]/g,"-").slice(0,80)}async function l(a){let b,c=h(a);try{b=await d.promises.readdir(c,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of b)if(a.isFile()&&a.name.toLowerCase().endsWith(".json"))try{let b=await d.promises.readFile(f().join(c,a.name),"utf8"),g=JSON.parse(b);s(g)&&e.push(g)}catch{}return e.sort((a,b)=>a.updatedAt<b.updatedAt?1:-1),e}async function m(a,b){try{let c=await d.promises.readFile(i(a,b),"utf8"),e=JSON.parse(c);return s(e)?e:null}catch{return null}}async function n(a,b){if(!s(b))throw Error(`Invalid workflow (id=${b.id})`);await d.promises.mkdir(h(a),{recursive:!0}),await d.promises.writeFile(i(a,b.id),JSON.stringify(b,null,2)+"\n","utf8")}async function o(a,b){try{await d.promises.unlink(i(a,b));try{await d.promises.rm(j(a,b),{recursive:!0,force:!0})}catch{}return!0}catch{return!1}}async function p(a,b){var c,e;await d.promises.mkdir(j(a,b.workflowId),{recursive:!0}),await d.promises.writeFile((c=b.workflowId,e=b.id,f().join(j(a,c),`${k(e)}.json`)),JSON.stringify(b,null,2)+"\n","utf8")}async function q(a,b,c=20){let e,g=j(a,b);try{e=await d.promises.readdir(g,{withFileTypes:!0})}catch{return[]}let h=(await Promise.all(e.filter(a=>a.isFile()&&a.name.toLowerCase().endsWith(".json")).map(async a=>{let b=f().join(g,a.name);try{let a=await d.promises.stat(b);return{abs:b,mtime:a.mtimeMs}}catch{return null}}))).filter(a=>null!==a).sort((a,b)=>b.mtime-a.mtime).slice(0,c),i=[];for(let a of h)try{let b=await d.promises.readFile(a.abs,"utf8");i.push(JSON.parse(b))}catch{}return i}async function r(a,b){let c,e=j(a,b);try{c=await d.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let a of(await Promise.all(c.filter(a=>a.isFile()&&a.name.toLowerCase().endsWith(".json")).map(async a=>{let b=f().join(e,a.name);try{let a=await d.promises.stat(b);return{abs:b,mtime:a.mtimeMs}}catch{return null}}))).filter(a=>null!==a).sort((a,b)=>b.mtime-a.mtime).slice(50))await d.promises.unlink(a.abs).catch(()=>void 0)}function s(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id&&"string"==typeof a.label&&!!Array.isArray(a.steps)&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt}},78555:(a,b,c)=>{"use strict";c.d(b,{a$:()=>i,ht:()=>h});var d=c(56149);let e=d.Ik({"claude-code":d.Ik({enabled:d.zM().default(!0)}),codex:d.Ik({enabled:d.zM().default(!0)}),ollama:d.Ik({enabled:d.zM().default(!0),baseUrl:d.Yj().url().default("http://localhost:11434")})}),f=d.Ik({harness:d.k5(["claude-code","codex","ollama"]),model:d.Yj().min(1),allowedTools:d.YO(d.Yj()).default([])}),g=d.Ik({enabled:d.zM().default(!0),maxDimension:d.ai().int().min(256).max(8192).default(2e3),quality:d.ai().int().min(40).max(100).default(85),format:d.k5(["auto","jpeg","webp","original"]).default("auto")}),h=d.Ik({version:d.eu(1).default(1),language:d.Yj().min(1).default("english"),onboardedAt:d.Yj().optional(),userName:d.Yj().default(""),timezone:d.Yj().default(""),uiMode:d.k5(["simple","advanced"]).default("simple"),imageProcessing:g.default({enabled:!0,maxDimension:2e3,quality:85,format:"auto"}),harnesses:e.default({"claude-code":{enabled:!0},codex:{enabled:!0},ollama:{enabled:!0,baseUrl:"http://localhost:11434"}}),assignments:d.Ik({analyze:f,chat:f,rag:f,embed:f,quick:f}).default({analyze:{harness:"claude-code",model:"claude-opus-4-7",allowedTools:["Read","Write","Edit","LS","Glob","Grep","WebSearch","WebFetch"]},chat:{harness:"claude-code",model:"claude-sonnet-4-6",allowedTools:["Read","LS","Glob","Grep","WebSearch","WebFetch"]},rag:{harness:"ollama",model:"llama3.1:8b",allowedTools:[]},embed:{harness:"ollama",model:"nomic-embed-text",allowedTools:[]},quick:{harness:"claude-code",model:"claude-haiku-4-5",allowedTools:[]}}),mapServices:d.Ik({enabled:d.YO(d.Yj()).default(["google","yandex","apple","osm"])}).default({enabled:["google","yandex","apple","osm"]}),ngrok:d.Ik({authtoken:d.Yj().default(""),apiKey:d.Yj().default(""),domain:d.Yj().default(""),port:d.ai().int().min(1).max(65535).default(3210)}).default({authtoken:"",apiKey:"",domain:"",port:3210})}),i=h.parse({})},78744:(a,b,c)=>{"use strict";c.d(b,{p:()=>i,M:()=>j});var d=c(76760),e=c.n(d),f=c(28548);function g(a,b){return a.replace(/\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g,(a,c)=>{let d=b[c];return void 0===d?a:String(d)})}let h="english";async function i(a){let b=await (0,f.PM)("analyze"),c=e().relative(a.root,a.scope)||".",d=a.files.slice(0,400),i=a.files.length>400?`
|
|
414
|
-
…and ${a.files.length-400} more files (truncated).`:"";return g(b,{language:a.language??h,root:a.root,scope:a.scope,relScope:c,reflexScope:a.reflexScope,files:d.map(a=>` - ${a}`).join("\n"),fileCount:a.files.length,overflow:i})}async function j(a){return[g(await (0,f.PM)("chat"),{language:a.language??h,root:a.root,scope:a.scope,reflexScope:a.reflexScope}),'## Routing: you are an orchestrator, not the worker\n\nFor anything non-trivial (deep KB reading, multi-file research, code writes, utility creation, summarization of large texts) — DELEGATE to a specialist sub-agent instead of doing it yourself. Sub-agents run with a focused system prompt and a constrained toolset.\n\nAvailable roles:\n - **researcher** — read-only KB / web research. Use for "найди / собери / процитируй".\n - **coder** — writes/edits files (Write/Edit + read tools). Use for "сделай / поправь / создай файл".\n - **summarizer** — no tools; compresses long text from the brief. Use for "сожми / выдели главное" из большого куска.\n - **kb-writer** — designs a structured KB entry (returns JSON for <<reflex:kb>>). Use when something is worth saving but the shape is non-trivial.\n - **utility-builder** — designs a Reflex utility (manifest + ui.tsx). Use when the user asks to build a new utility.\n\nTo dispatch, emit one or more markers in a single turn and STOP:\n\n <<reflex:dispatch>>{"id":"r1","role":"researcher","brief":"Прочитай INDEX.md и собери список тем."}<</reflex:dispatch>>\n\nRules:\n - `brief` must be self-contained — sub-agents do NOT see the chat transcript. Include all rel-paths, expected output shape, constraints.\n - Multiple dispatches in one turn run **concurrently**. Sequentially-dependent tasks → do them across multiple turns.\n - After dispatches Reflex re-invokes you with each sub-agent\'s output quoted. Compose the final user-facing reply from those results.\n - Do simple things yourself (one short answer, citing one file). Don\'t dispatch trivia.\n - Don\'t re-dispatch the same brief if a sub-agent returned empty — either solve it yourself or ask the user.\n\nOptional harness routing:\n - Add `"harness":"codex"` to the dispatch payload to run THAT sub-agent on Codex instead of inheriting yours. Useful when:\n – task is heavy code synthesis / refactor / type-fixing — Codex shines there.\n – task is short text classification / extraction — `"harness":"ollama"` is cheap and fast.\n - Without `harness`, the sub-agent inherits the orchestrator\'s runtime — usually fine. Override only when you have a concrete reason.\n - Example: `<<reflex:dispatch>>{"role":"coder","harness":"codex","brief":"Перепиши X на TypeScript strict"}<</reflex:dispatch>>`','## Widgets: putting results on the project dashboard\n\nWhen the user wants you to produce something durable — a news digest, a checklist, a KPI snapshot, a curated link list — DON\'T just answer in chat and forget. Materialize it as a **widget** on the project dashboard so the user sees it on every visit.\n\nEmit a marker on its own block:\n\n```\n<<reflex:widget-create>>{\n "id": "<kebab-case-id>",\n "title": "<short user-visible title>",\n "description": "<one-line subtitle, optional>",\n "kind": "<one of: markdown, news-list, link-list, kpi, checklist, quote, kb-pinned, progress, image, stat-table, map>",\n "data": { ...kind-specific payload... },\n "size": { "mode": "md" }\n}<</reflex:widget-create>>\n```\n\nUse `widget-update` (same shape, same id) when refreshing an existing widget — e.g. user asked for a weekly news digest, you regenerate the items.\n\n### Auto-refresh and memory\n\n- `refresh`: `"manual"` (default) | `"hourly"` | `"daily"` | `"weekly"`. When set to anything other than manual, Reflex\'s scheduler will periodically re-invoke you on the source topic with a synthetic `[Reflex] Refresh widget <id>` user-message — you respond by emitting a fresh `<<reflex:widget-update>>` with the same id.\n- `memory`: agent-managed inline state (markdown, <2KB). Use for **short** state that should persist across refreshes — e.g. "already-shown URLs to dedupe", "last 4 KPI snapshots", "running tally". On every refresh prompt you\'ll see the current `memory` value; emit an updated one inside the widget-update payload.\n- `memoryFile`: rel-path (inside `.reflex/`) for **long** memory — a journal-style markdown file you append to via the regular `<<reflex:kb>>` directive. Use for OKR-history-style widgets where the journal itself is worth keeping in the KB tree. Pick a path like `widgets/<widget-id>.memory.md`.\n- Pick ONE of `memory` or `memoryFile` per widget. Inline for compact structured deduping; file for narrative history.\n- When refreshing, prefer **incremental** updates: dedupe against memory, add new items at the top, drop very old ones — the user wants signal, not a snapshot reset.\n\n### Kinds and `data` shapes\n\n- `markdown` — `{body: string}`. Long-form notes, summaries, instructions.\n- `news-list` — `{items: [{title, url?, summary?, source?, date?}]}`. Headlines + 1-2 line summaries.\n- `link-list` — `{items: [{title, url, hint?}]}`. Curated resources, bookmarks.\n- `kpi` — `{items: [{label, value, hint?, delta?: "up"|"down"|"flat"}]}`. Big-number tiles.\n- `checklist` — `{items: [{text, done?: boolean}]}`. Action items / todo.\n- `quote` — `{text, attribution?}`. One memorable quote.\n- `kb-pinned` — `{items: [{rel, title?, snippet?}]}`. Pinned KB rel-paths.\n- `progress` — `{items: [{label, current, target, unit?}]}`. Goal-tracking bars.\n- `image` — `{url, alt?, caption?}`. Single image card.\n- `stat-table` — `{columns?: [string], rows: [[string, ...]]}`. Compact comparison table.\n- `map` — `{points: [{lat, lng, title, description?}], center?, zoom?, route?: {stops: number[], color?, mode?}}`. Карта с точками + опциональный маршрут (полилиния + multi-waypoint deep-links: google/yandex/2gis/apple/osm/waze/organic). `route.stops` — массив индексов в `points` в порядке прохождения (минимум 2). На каждой точке popup с фирменными кнопками сервисов. По умолчанию карта авто-фитит по точкам. ВАЖНО: `lat`/`lng` — числа в десятичных градусах (lat=55.7558, lng=37.6173 — Москва). НЕ строки. Если у тебя адрес — найди координаты через WebSearch/WebFetch (geocoding), не выдумывай. Пользователь может прямо в виджете искать места (Nominatim) и собирать маршрут — кнопка \xabМаршрут\xbb переводит в режим выбора точек по клику.\n\n### Interactivity\n\nВиджеты на дашборде интерактивны — пользователь может прямо в UI:\n - **checklist**: тыкать галочки (toggle done), удалять пункты, добавлять новые.\n - **link-list**: удалять ссылки.\n - **news-list**: помечать новость прочитанной (`read:true`), убирать карточку.\n - **kb-pinned**: откреплять файлы.\n - **progress**: \xb1 кнопки на `current`.\n\nЭти изменения пишутся прямо на диск, минуя тебя. На следующем `widget-update` ты увидишь актуальное состояние. Стратегия:\n - Если пользователь удалил пункт чек-листа — не добавляй его обратно (это сигнал).\n - Если пользователь отметил новость прочитанной — внеси её URL в `memory` для дедупа.\n - Если пользователь обнулил progress — это, видимо, новый цикл; уважай.\n\n### Rules\n\n- Pick the SIMPLEST kind that fits — don\'t squeeze a news digest into `markdown` if `news-list` exists.\n- `id` is stable: same id across `widget-create` and `widget-update`. Pick a slug from the topic content (e.g. `tech-news-weekly`, `okrs-q2`).\n- `size.mode`: `"sm"` (3 в ряд, иконки/KPI) | `"md"` (по умолчанию, 2 в ряд) | `"wide"` (на всю строку, для длинных таблиц/markdown). Подбирай к контенту, но пользователь может переопределить через UI — твой выбор всего лишь hint.\n- After emitting the marker, briefly tell the user in plain text WHAT виджет ты собрал. ВАЖНО: новый виджет НЕ появляется на дашборде автоматически — он лежит в библиотеке как черновик. Пользователь увидит его прямо в чате (превью) и сможет закрепить кнопкой \xabЗакрепить на дашборде\xbb или через библиотеку. Не утверждай, что виджет уже на дашборде.\n- Reflex automatically shows a live preview of the widget inside this chat turn — no need to re-render in markdown.',`## Workflows — встроенный \xabn8n для домохозяек\xbb
|
|
415
|
-
|
|
416
|
-
Когда пользователь хочет автоматизировать что-то регулярное (утренний дайджест, мониторинг страницы, рутина \xabскачай → обработай → запиши\xbb), эмить маркер \`<<reflex:workflow-create>>\` — Reflex сохранит workflow на диск и покажет превью со ссылкой на редактор.
|
|
417
|
-
|
|
418
|
-
\`\`\`
|
|
419
|
-
<<reflex:workflow-create>>{
|
|
420
|
-
"id": "<kebab-case-id>",
|
|
421
|
-
"label": "<short title>",
|
|
422
|
-
"description": "<one line>",
|
|
423
|
-
"trigger": "manual" | "hourly" | "daily" | "weekly",
|
|
424
|
-
"steps": [
|
|
425
|
-
{"id": "fetch", "kind": "web-fetch", "label": "Скачать HN", "params": {"url": "https://news.ycombinator.com/rss"}},
|
|
426
|
-
{"id": "digest", "kind": "ask-agent", "label": "Сжать в дайджест", "params": {"prompt": "Сожми топ-5 заголовков из RSS:\\n{{prev}}"}},
|
|
427
|
-
{"id": "save", "kind": "kb-write", "label": "Записать в KB", "params": {"kind": "digest", "title": "HN дайджест", "body": "{{prev}}"}}
|
|
428
|
-
]
|
|
429
|
-
}<</reflex:workflow-create>>
|
|
430
|
-
\`\`\`
|
|
431
|
-
|
|
432
|
-
### Доступные \`kind\` шагов
|
|
433
|
-
|
|
434
|
-
- \`text-template\` — \`{template: string}\`. Подстановки: \`{{prev}}\`, \`{{steps.<id>.output}}\`, \`{{input.<field>}}\`, \`{{workflow.label}}\`.
|
|
435
|
-
- \`http-request\` — \`{url, method?, headers?: string-JSON, body?}\`. Output: текст или JSON (по content-type).
|
|
436
|
-
- \`web-fetch\` — \`{url}\`. Простой GET, output — текст ответа.
|
|
437
|
-
- \`ask-agent\` — \`{prompt}\`. Запускает headless orchestrator и возвращает текст ответа. Используй для суммаризации, перефразирования, классификации.
|
|
438
|
-
- \`kb-write\` — \`{kind, title, body}\`. Сохраняет в базу знаний как обычный KB-файл.
|
|
439
|
-
|
|
440
|
-
### Правила
|
|
441
|
-
|
|
442
|
-
- Каждый step передаёт output следующему через \`{{prev}}\` или \`{{steps.<id>.output}}\`. Это единственная связь между шагами.
|
|
443
|
-
- \`id\` step'а должен быть стабильный и kebab-case — на него ссылаются templates.
|
|
444
|
-
- Шаги выполняются строго последовательно. Если step упадёт — остальные не запустятся, run отметится failed.
|
|
445
|
-
- Делай workflow КОРОТКИМИ (3-5 шагов). Если задача больше — разбей на несколько workflows или дай агенту через \`ask-agent\` сделать сложную часть.
|
|
446
|
-
- Trigger \`manual\` по умолчанию. \`hourly\`/\`daily\`/\`weekly\` пока работают только через ручной запуск, scheduler в работе.
|
|
447
|
-
- После эмита маркера — короткое сообщение пользователю: что собрал, как запустить, где редактировать.`,`## Generating images inline
|
|
448
|
-
|
|
449
|
-
When the user asks to draw, generate, or illustrate something ("нарисуй кота", "сделай иллюстрацию", "сгенерируй превью"), DON'T describe what you'd draw — emit an image-gen marker and Reflex will render the actual image inside your reply.
|
|
450
|
-
|
|
451
|
-
\`\`\`
|
|
452
|
-
<<reflex:image-gen>>{
|
|
453
|
-
"prompt": "детальный английский или русский промпт описывающий картинку",
|
|
454
|
-
"provider": "gemini",
|
|
455
|
-
"aspectRatio": "16:9",
|
|
456
|
-
"caption": "короткая подпись (опционально)",
|
|
457
|
-
"attachToKb": false
|
|
458
|
-
}<</reflex:image-gen>>
|
|
459
|
-
\`\`\`
|
|
460
|
-
|
|
461
|
-
- \`provider\`: \`"gemini"\` (Nano Banana, дефолт, дёшево и быстро) или \`"codex"\` (через \`$imagegen\` в Codex CLI).
|
|
462
|
-
- \`aspectRatio\`: \`"1:1"\`, \`"16:9"\`, \`"9:16"\`, \`"4:3"\` и т.п. Опционально.
|
|
463
|
-
- \`attachToKb: true\` — также сохранить картинку в KB как \`kind: "image"\` для будущей переподборки.
|
|
464
|
-
- Можно эмитить несколько маркеров за один ответ — будет N картинок подряд.
|
|
465
|
-
- Промпт пиши развёрнутый: стиль (фотореализм / акварель / 3D / иллюстрация), композиция, освещение, настроение. Чем конкретнее — тем лучше результат.
|
|
466
|
-
- НЕ описывай словами \xabвот картинка кота\xbb — просто эмить маркер; Reflex сам вставит изображение в твой ответ.`].join("\n\n")}},79459:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i,metadata:()=>h});var d=c(63003);c(44427);var e=c(95422),f=c(30849),g=c(24576);let h={title:"Reflex",description:"Local-first knowledge base built by an agent."};async function i({children:a}){let b=await (0,g.qV)();return(0,d.jsx)("html",{lang:"en",suppressHydrationWarning:!0,children:(0,d.jsxs)("body",{children:[(0,d.jsxs)("div",{className:"h-screen flex",children:[(0,d.jsx)(f.AppSidebar,{initialRoots:b}),(0,d.jsx)("main",{className:"flex-1 min-w-0 flex flex-col",children:a})]}),(0,d.jsx)(e.Toaster,{richColors:!0,closeButton:!0})]})})}},84579:(a,b,c)=>{"use strict";c.d(b,{attachRemote:()=>k,generateImage:()=>h,searchImages:()=>i});var d=c(91388),e=c(70333);async function f(a){let b=await (0,e.CG)("gemini");if(!b)throw Error("Gemini API key is not configured. Open Settings → Gemini.");let c=[{text:a.prompt}];for(let b of a.referenceImageUrls??[]){let a=await g(b);a&&c.push({inlineData:a})}let f={contents:[{role:"user",parts:c}]};a.aspectRatio&&(f.generationConfig={imageConfig:{aspectRatio:a.aspectRatio}});let h=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent?key=${encodeURIComponent(b)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!h.ok){let a=await h.text().catch(()=>"");throw Error(`Gemini image API ${h.status}: ${a.slice(0,400)}`)}let i=await h.json(),j=function(a){for(let b of a.candidates??[])for(let a of b.content?.parts??[]){let b=a.inlineData;if(b?.data&&b.mimeType?.startsWith("image/"))return{data:b.data,mime:b.mimeType}}return null}(i);if(!j){let a=i?.candidates?.[0]?.finishReason??"no image returned",b=i?.candidates?.[0]?.content?.parts?.map(a=>a.text).filter(Boolean).join(" ")?.slice(0,300);throw Error(`Gemini вернул не-картинку (${a})${b?": "+b:""}`)}let k=Buffer.from(j.data,"base64");return(0,d.YN)(a.rootId,k,j.mime)}async function g(a){try{let b=await fetch(a,{redirect:"follow"});if(!b.ok)return null;let c=b.headers.get("content-type")?.split(";")[0]?.trim()??"";if(!c.startsWith("image/"))return null;let d=await b.arrayBuffer();return{data:Buffer.from(d).toString("base64"),mimeType:c}}catch{return null}}async function h(a){let b,d=a.provider??"gemini";if("gemini"===d)b=await f({rootId:a.rootId,prompt:a.prompt,...a.aspectRatio?{aspectRatio:a.aspectRatio}:{},...a.referenceImageUrls?{referenceImageUrls:a.referenceImageUrls}:{}});else if("codex"===d){let d=await c.e(1961).then(c.bind(c,61961));b=await d.generateWithCodex({rootId:a.rootId,prompt:a.prompt,...a.size?{size:a.size}:{}})}else throw Error(`unknown image provider: ${d}`);return{urlPath:b.urlPath,sha:b.sha,mime:b.mime,size:b.size,provider:d}}async function i(a){let b=Math.max(1,Math.min(24,a.count??12)),d=a.provider??await j();if("unsplash"===d)return(await c.e(7508).then(c.bind(c,57508))).searchUnsplash({query:a.query,count:b});if("pexels"===d)return(await c.e(5087).then(c.bind(c,95087))).searchPexels({query:a.query,count:b});if("brave"===d)return(await c.e(8262).then(c.bind(c,48262))).searchBrave({query:a.query,count:b});throw Error(`unknown image search provider: ${d}`)}async function j(){let{hasApiKey:a}=await Promise.resolve().then(c.bind(c,70333)),{resolveBraveKey:b}=await c.e(8262).then(c.bind(c,48262));return await b()?"brave":await a("unsplash")?"unsplash":await a("pexels")?"pexels":"brave"}async function k(a){return(0,d.fH)(a.rootId,a.sourceUrl)}},88724:(a,b,c)=>{"use strict";c.d(b,{$d:()=>e,S9:()=>f,Zi:()=>d}),c(17240);let d={rootsChanged:"reflex:roots-changed",topicsChanged:a=>`reflex:topics-changed:${a}`,kbChanged:a=>`reflex:kb-changed:${a}`};function e(a,b){}function f(a,b){}},91344:(a,b,c)=>{"use strict";c.d(b,{cn:()=>f});var d=c(53221),e=c(25813);function f(...a){return(0,e.QP)((0,d.$)(a))}},91388:(a,b,c)=>{"use strict";c.d(b,{YN:()=>p,fH:()=>q,tf:()=>m});var d=c(73024),e=c(76760),f=c.n(e),g=c(77598),h=c.n(g),i=c(53905);let j=f().join(".reflex","assets","images"),k={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg","image/avif":"avif"},l={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",svg:"image/svg+xml",avif:"image/avif"};function m(a){return l[a.toLowerCase()]??"application/octet-stream"}async function n(a){let b=await (0,i.Zn)(a);if(!b)throw Error(`unknown root: ${a}`);return b.path}async function o(a){let b=f().join(await n(a),j);return await d.promises.mkdir(b,{recursive:!0}),b}async function p(a,b,c){let e=Buffer.isBuffer(b)?b:Buffer.from(b),g=h().createHash("sha256").update(e).digest("hex"),i=k[c.toLowerCase()]??"bin",l=await o(a),m=f().join(l,`${g}.${i}`);try{await d.promises.access(m)}catch{await d.promises.writeFile(m,e)}return{sha:g,ext:i,mime:c,absPath:m,relPath:f().posix.join(j.split(f().sep).join("/"),`${g}.${i}`),urlPath:`/api/images/${encodeURIComponent(a)}/${g}.${i}`,size:e.byteLength}}async function q(a,b){let c=await fetch(b,{redirect:"follow",signal:AbortSignal.timeout(3e4)});if(!c.ok)throw Error(`fetch ${b} -> ${c.status} ${c.statusText}`);let d=c.headers.get("content-type")?.split(";")[0]?.trim()??"";if(!d.startsWith("image/"))throw Error(`not an image: content-type=${d||"(none)"}`);let e=Number(c.headers.get("content-length")??"0");if(e>0x1400000)throw Error(`image too large: ${e} bytes (cap 20971520)`);let f=await c.arrayBuffer();if(f.byteLength>0x1400000)throw Error(`image too large after download: ${f.byteLength} bytes (cap 20971520)`);return p(a,Buffer.from(f),d)}},93437:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,47319,23)),Promise.resolve().then(c.t.bind(c,97654,23)),Promise.resolve().then(c.t.bind(c,10432,23)),Promise.resolve().then(c.t.bind(c,73671,23)),Promise.resolve().then(c.t.bind(c,78767,23)),Promise.resolve().then(c.t.bind(c,75751,23)),Promise.resolve().then(c.t.bind(c,48609,23)),Promise.resolve().then(c.t.bind(c,59118,23)),Promise.resolve().then(c.t.bind(c,84583,23))},93554:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{z:()=>G});var e=c(78474),f=c(77598),g=c(20243),h=c(71222),i=c(52219),j=c(98360),k=c(59788),l=c(64421),m=c(84579),n=c(69509),o=c(73928),p=c(55143),q=c(56942),r=c(63848),s=c(20938),t=c(20050),u=c(8118),v=c(36017),w=c(5492),x=c(875),y=c(18809),z=a([h,p]);[h,p]=z.then?(await z)():z;class E{async ensureAgent(a){let b=this.byTopicRole.get(a.topicId)?.get(a.role);if(b){let a=this.agents.get(b);if(a)return{...a.meta}}return this.createAgent(a)}async createAgent(a){let b=C(),c={id:b,topicId:a.topicId,rootId:a.rootId,role:a.role,task:a.task,harness:a.harness,model:a.model,label:a.label,status:"idle",startedAt:A(),...a.parentId?{parentId:a.parentId}:{}};this.agents.set(b,{meta:c,rootPath:a.rootPath,reflexScope:a.reflexScope});let d=this.byTopicRole.get(a.topicId);return d||(d=new Map,this.byTopicRole.set(a.topicId,d)),d.set(a.role,b),await this.emit({type:"agent-start",meta:c,agentId:b,ts:c.startedAt,seq:0}),c}async invoke(a){let b=this.agents.get(a.agentId);if(!b)throw Error(`Agent not found: ${a.agentId}`);if("running"===b.meta.status)throw Error(`Agent ${a.agentId} is already running`);b.meta.status="running",this.lastInvoke.set(a.agentId,{systemPrompt:a.systemPrompt,rootPath:b.rootPath}),this.turnText.set(a.agentId,"");let c=C();a.userMessage&&await this.emit({type:"user-message",text:a.userMessage,agentId:a.agentId,ts:A(),seq:0}),await this.emit({type:"turn-start",turnId:c,agentId:a.agentId,ts:A(),seq:0});let d=null;try{d=await (0,r.Qr)(b.rootPath)}catch{}try{let e={meta:{id:b.meta.id},args:{rootPath:b.rootPath,reflexScope:b.reflexScope,systemPrompt:a.systemPrompt,prompt:a.prompt,model:b.meta.model,allowedTools:a.allowedTools??[]},manager:this};if("claude-code"===b.meta.harness)await (0,h.Z)(e);else if("codex"===b.meta.harness)await (0,i.H)(e);else if("ollama"===b.meta.harness)await (0,j.E)(e);else if("image-gen"===b.meta.harness)await (0,k.R)({meta:e.meta,args:{rootPath:e.args.rootPath,prompt:e.args.prompt},manager:e.manager});else throw Error(`Unsupported harness: ${String(b.meta.harness)}`);await this.applyImageGenDirectives(a.agentId);let f=await this.evaluateGoalContinuation(a.agentId);b.meta.status="idle",await this.emit({type:"turn-end",turnId:c,status:"completed",agentId:a.agentId,ts:A(),seq:0});let{writtenViaKb:g,dispatches:l,youtubeSummaries:m}=await this.detectInteractionDirectives(a.agentId);d&&await this.reindexAfterTurn(a.agentId,d,g),l.length>0&&"orchestrator"===b.meta.role?this.dispatchSubAgents(a.agentId,l).catch(b=>{this.emit({type:"error",message:"sub-agent dispatch failed: "+(b instanceof Error?b.message:String(b)),agentId:a.agentId,ts:A(),seq:0})}):m.length>0&&"orchestrator"===b.meta.role?this.runYoutubeSummaries(a.agentId,m).catch(b=>{this.emit({type:"error",message:"youtube-summary failed: "+(b instanceof Error?b.message:String(b)),agentId:a.agentId,ts:A(),seq:0})}):f&&setTimeout(()=>{this.continueTurn(a.agentId,`[Reflex /goal] Продолжай выполнение. Активная цель: ${f.goal}. Итерация ${f.iteration}/${x.GX}. Если задача завершена И проверена — закончи маркером \`GOAL ACHIEVED\` и kb-записью kind:"goal-completion".`)},50)}catch(e){let d=e instanceof Error?e.message:String(e);b.meta.status="idle",b.meta.error=d,await this.emit({type:"error",message:d,agentId:a.agentId,ts:A(),seq:0}),await this.emit({type:"turn-end",turnId:c,status:"failed",error:d,agentId:a.agentId,ts:A(),seq:0})}finally{this.turnText.delete(a.agentId)}}async respondPermission(a,b){let c,d=this.agents.get(a);if(!d)throw Error("Agent not found");let e="running"===d.meta.status;try{let a=(await (0,g.readEvents)(d.rootPath,d.meta.topicId)).find(a=>"permission-request"===a.type&&a.requestId===b.requestId);c=a?.action}catch{}await this.emit({type:"permission-response",requestId:b.requestId,decision:b.decision,...b.scope?{scope:b.scope}:{},agentId:a,ts:A(),seq:0});let f="";if("tool-policy"===c&&"allow"===b.decision&&b.tool)try{let a=await (0,v.M)(),c=d.meta.task,e=a.assignments[c];e&&!e.allowedTools.includes(b.tool)&&(e.allowedTools=[...e.allowedTools,b.tool],await (0,v.D)(a),f=` Инструмент ${b.tool} добавлен в settings.assignments.${c}.allowedTools.`)}catch(b){await this.emit({type:"error",message:"Не удалось сохранить разрешённый инструмент: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:A(),seq:0})}let h=`[Reflex] Permission for ${b.tool??"action"} (${b.requestId}): ${b.decision}${b.scope?` (${b.scope})`:""}.${f} Continue.`;e||await this.continueTurn(a,h)}async respondQuestion(a,b){let c=this.agents.get(a);if(!c)throw Error("Agent not found");let d="running"===c.meta.status;await this.emit({type:"answer",questionId:b.questionId,answer:b.answer,agentId:a,ts:A(),seq:0});let e=`[Reflex] Answer for question ${b.questionId}: ${b.answer}. Continue.`;d||await this.continueTurn(a,e)}async respondMcpAdd(a,b){let d,e=this.agents.get(a),f=!!(e&&"running"===e.meta.status),h=null,i=e?.meta.topicId??null,j=e?.rootPath??null,k=this.pendingMcpAdds.get(b.requestId);if(k&&k.agentId===a)h=k.directive,this.pendingMcpAdds.delete(b.requestId);else{let a=await (0,s.az)(b.requestId);a&&(h=a.directive,i=i??a.topicId,j=j??a.rootPath)}if(!h)throw Error(`Unknown mcp-add request: ${b.requestId}`);let l=async a=>{if(e)return void await this.emit(a);if(i&&j){let b=await (0,g.v)(j,i);await (0,g.Zn)(j,i,{...a,seq:b})}};if("reject"===b.decision){await l({type:"mcp-add-response",requestId:b.requestId,decision:"reject",agentId:a,ts:A(),seq:0}),d=`[Reflex] User rejected adding MCP server "${h.server}". Don't re-propose the same server — either pick a different approach or ask the user what they prefer.`,e&&!f&&await this.continueTurn(a,d);return}try{let e=await B(h.config,h.secrets??[],b.secretValues??{}),{McpConfigSchema:f}=await Promise.resolve().then(c.bind(c,97453)),g=f.parse(e),{addMcpServer:i,updateMcpServer:j,getMcpServer:k}=await Promise.resolve().then(c.bind(c,580));await k(h.server)?await j(h.server,{label:h.label,...void 0!==h.description?{description:h.description}:{},config:g}):await i({id:h.server,label:h.label,...void 0!==h.description?{description:h.description}:{},config:g}),await l({type:"mcp-add-response",requestId:b.requestId,decision:"approve",server:h.server,agentId:a,ts:A(),seq:0}),d=`[Reflex] MCP server "${h.server}" registered. You can now call its tools via \`mcp__${h.server}__<tool>\` (chat) or \`reflex.mcp.call({server:"${h.server}",tool,args})\` (from a utility that declared it in manifest.mcpServers). Continue.`}catch(e){let c=e instanceof Error?e.message:String(e);await l({type:"error",message:"mcp-add failed: "+c,agentId:a,ts:A(),seq:0}),await l({type:"mcp-add-response",requestId:b.requestId,decision:"reject",agentId:a,ts:A(),seq:0}),d=`[Reflex] Failed to register MCP server "${h.server}": ${c}. Don't retry the exact same config; either fix the issue or ask the user.`}e&&!f&&await this.continueTurn(a,d)}async continueTurn(a,b){let c=this.agents.get(a);if(!c)return;let d=this.lastInvoke.get(a);if(!d)return void await this.emit({type:"error",message:"Cannot continue turn: no cached system prompt. Send another message manually.",agentId:a,ts:A(),seq:0});let e=[];try{let a=await (0,v.M)();e=a.assignments[c.meta.task]?.allowedTools??[]}catch{}let f=await D(d.rootPath,c.meta.topicId),g=`Prior conversation:
|
|
467
|
-
|
|
468
|
-
${f}
|
|
469
|
-
|
|
470
|
-
### user
|
|
471
|
-
${b}
|
|
472
|
-
|
|
473
|
-
### assistant
|
|
474
|
-
(Reply now.)`;this.invoke({agentId:a,systemPrompt:d.systemPrompt,prompt:g,userMessage:b,allowedTools:e}).catch(()=>{})}async evaluateGoalContinuation(a){let b,c=this.agents.get(a);if(!c||"orchestrator"!==c.meta.role)return null;try{b=await (0,w.eF)(c.rootPath,c.meta.topicId)}catch{return null}if(!b)return null;let d=b.meta;if(!d.goal||"active"!==d.goalStatus)return null;let e=this.turnText.get(a)??"";if(/(^|\n)\s*GOAL ACHIEVED\s*(\n|$)/i.test(e)||/<<reflex:kb>>[\s\S]*?"kind"\s*:\s*"goal-completion"[\s\S]*?<<\/reflex:kb>>/i.test(e)){try{await (0,w._9)(c.rootPath,c.meta.topicId,"completed")}catch{}return null}if(/<<reflex:(?:question|permission)>>[\s\S]*?<<\/reflex:(?:question|permission)>>/i.test(e))return null;try{let b=await (0,w.o0)(c.rootPath,c.meta.topicId);if(b>x.GX)return await (0,w._9)(c.rootPath,c.meta.topicId,"abandoned"),await this.emit({type:"error",message:`Goal iteration cap reached (${x.GX}). Goal marked as abandoned — clear or restart via /goal to keep trying.`,agentId:a,ts:A(),seq:0}),null;return{goal:d.goal,iteration:b}}catch{return null}}async reindexAfterTurn(a,b,c=new Set){let d=this.agents.get(a);if(d)try{let e=(await (0,r.pV)(d.rootPath,b)).filter(a=>!c.has(a.abs));if(0===e.length)return;for(let b of(await (0,r.F8)(d.rootPath,e),e))await this.emit({type:"kb-write",kind:b.kind??"note",title:b.title??b.rel,relPath:b.rel,absPath:b.abs,agentId:a,ts:A(),seq:0})}catch(b){await this.emit({type:"error",message:"kb auto-index failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:A(),seq:0})}}async dispatchSubAgents(a,b){let c=this.agents.get(a);if(!c)return;let d=await (0,v.M)(),e=c.meta.harness,f=c.meta.model,g=d.language,h=(await Promise.all(b.map(async b=>{var d;let h=b.role,i=y.pO[h],j=C(),k=b.harness&&(d=b.harness,F.has(d))?b.harness:e,l="string"==typeof b.model&&b.model.length>0?b.model:f,m={id:j,topicId:c.meta.topicId,rootId:c.meta.rootId,role:"subagent",task:c.meta.task,harness:k,model:l,label:i.label,status:"idle",startedAt:A(),parentId:a};this.agents.set(j,{meta:m,rootPath:c.rootPath,reflexScope:c.reflexScope}),await this.emit({type:"agent-start",meta:m,agentId:j,ts:A(),seq:0});let n=i.systemPrompt({language:g,root:c.rootPath,reflexScope:c.reflexScope,brief:b.brief}),o=b.brief,p=`${o}
|
|
475
|
-
|
|
476
|
-
### assistant
|
|
477
|
-
(Reply now.)`;try{await this.invoke({agentId:j,systemPrompt:n,prompt:p,userMessage:o,allowedTools:i.allowedTools})}catch(c){let a=c instanceof Error?c.message:String(c);return await this.emit({type:"error",message:`sub-agent (${h}) failed: ${a}`,agentId:j,ts:A(),seq:0}),await this.destroy(j,"failed"),{role:h,id:b.id??j,brief:b.brief,output:"",error:a}}let q=(this.turnText.get(j)??"").trim();return await this.destroy(j,"completed"),{role:h,id:b.id??j,brief:b.brief,output:q}}))).map(a=>{let b=`### sub-agent: ${a.role}${a.id?` [${a.id}]`:""}`,c=`**Brief:** ${a.brief.replace(/\n+/g," ").trim()}`,d=a.error?`_failed_ — ${a.error}`:a.output.length>0?a.output:"_(no output)_";return[b,c,"",d].join("\n")}),i=["[Reflex] Sub-agent results follow. Use them to compose the user-facing reply. Do NOT re-dispatch the same brief; if a result is empty or insufficient, either solve it yourself or ask the user.","",...h].join("\n\n");await this.continueTurn(a,i)}async detectInteractionDirectives(a){let b=new Set,d=this.turnText.get(a)??"";if(!d)return{writtenViaKb:b,dispatches:[],youtubeSummaries:[]};let e=this.agents.get(a);for(let b of(0,l.gQ)(d))await this.emit({type:"permission-request",requestId:b.id??C(),...b.tool?{tool:b.tool}:{},...b.action?{action:b.action}:{},...void 0!==b.input?{input:b.input}:{},...b.description?{description:b.description}:{},agentId:a,ts:A(),seq:0});for(let b of(0,l.dJ)(d))await this.emit({type:"question",questionId:b.id??C(),prompt:b.prompt,...b.header?{header:b.header}:{},...b.multiSelect?{multiSelect:!0}:{},...b.choices?{choices:b.choices}:{},...b.options?{options:b.options}:{},agentId:a,ts:A(),seq:0});for(let b of(0,l.eD)(d)){let c=b.id??C();this.pendingMcpAdds.set(c,{agentId:a,directive:b}),e&&await (0,s.GC)({requestId:c,agentId:a,topicId:e.meta.topicId,rootPath:e.rootPath,directive:b}),await this.emit({type:"mcp-add-request",requestId:c,server:b.server,label:b.label,...b.description?{description:b.description}:{},config:function(a,b){if(!a||"object"!=typeof a)return a;let c=a.transport,d="stdio"===c?"env":"http"===c||"sse"===c?"headers":null;if(!d)return a;let e=new Set(b.map(a=>a.envKey));if(0===e.size)return a;let f=a[d];if(!f||"object"!=typeof f)return a;let g={};for(let[a,b]of Object.entries(f))g[a]=e.has(a)?"***":String(b);return{...a,[d]:g}}(b.config,b.secrets??[]),...b.secrets&&b.secrets.length>0?{secrets:b.secrets}:{},agentId:a,ts:A(),seq:0})}if(e){for(let c of(0,l.Bc)(d))try{let d=await (0,q.j)({rootPath:e.rootPath,directive:c});b.add(d.absPath),await this.emit({type:"kb-write",kind:d.kind,title:d.title,relPath:d.relPath,absPath:d.absPath,agentId:a,ts:A(),seq:0})}catch(b){await this.emit({type:"error",message:"kb-write failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:A(),seq:0})}for(let b of(0,l.Oo)(d))try{let d=b.manifest&&"object"==typeof b.manifest?b.manifest:{},f=d.source&&"object"==typeof d.source?d.source:{},{source:g,...h}=d,i=t.pL.parse(h),j=["agent","github","archive","mcp"],k="string"==typeof f.type&&j.includes(f.type)?f.type:"agent",l=await (0,u.gd)({scope:b.scope,..."project"===b.scope?{rootId:e.meta.rootId}:{},manifest:i,files:b.files,source:{type:k,origin:"string"==typeof f.origin?f.origin:`agent:${e.meta.rootId}:${e.meta.topicId}:${e.meta.id}`,fetchedAt:new Date().toISOString(),installedBy:"agent"}}),m=await c.e(9861).then(c.bind(c,99861));await m.buildUtility(l),await this.emit({type:"utility-installed",utilityId:l.manifest.id,scope:l.scope,name:l.manifest.name,version:l.manifest.version,agentId:a,ts:A(),seq:0})}catch(b){await this.emit({type:"utility-error",message:"utility install failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:A(),seq:0})}}let f=(0,l.Eb)(d).filter(a=>(0,y.Aq)(a.role)),g=(0,l.XZ)(d),h=(0,l.Dq)(d),i=(0,l.Up)(d);e&&(h.length>0||i.length>0)&&await this.applyWidgetDirectives(e.rootPath,e.meta.topicId,a,h,i);let j=(0,l.QN)(d);return e&&j.length>0&&await this.applyWorkflowDirectives(e.rootPath,e.meta.topicId,a,j),{writtenViaKb:b,dispatches:f,youtubeSummaries:g}}async applyImageGenDirectives(a){let b=this.agents.get(a);if(!b)return;let c=this.turnText.get(a)??"";if(!c||!c.includes("reflex:image-gen"))return;let d=(0,l.qk)(c);if(0!==d.length)for(let c of d)try{let d=await (0,m.generateImage)({rootId:b.meta.rootId,prompt:c.prompt,...c.provider?{provider:c.provider}:{},...c.size?{size:c.size}:{},...c.aspectRatio?{aspectRatio:c.aspectRatio}:{},...c.referenceImageUrls?{referenceImageUrls:c.referenceImageUrls}:{}}),e=(c.caption||c.prompt).replace(/[\[\]\n]/g," ").slice(0,200);if(await this.emit({type:"assistant-delta",text:`
|
|
478
|
-
|
|
479
|
-

|
|
480
|
-
`,agentId:a,ts:A(),seq:0}),c.attachToKb)try{let f=await (0,q.j)({rootPath:b.rootPath,directive:{kind:"image",title:c.caption||c.prompt.slice(0,80),body:``,meta:{provider:d.provider,prompt:c.prompt,sha:d.sha,...c.aspectRatio?{aspectRatio:c.aspectRatio}:{}}}});await this.emit({type:"kb-write",kind:f.kind,title:f.title,relPath:f.relPath,absPath:f.absPath,agentId:a,ts:A(),seq:0})}catch(b){await this.emit({type:"error",message:"image-gen kb attach failed: "+(b instanceof Error?b.message:String(b)),agentId:a,ts:A(),seq:0})}}catch(b){await this.emit({type:"assistant-delta",text:`
|
|
481
|
-
|
|
482
|
-
_Не удалось сгенерировать картинку: ${b instanceof Error?b.message:String(b)}_
|
|
483
|
-
`,agentId:a,ts:A(),seq:0})}}async applyWorkflowDirectives(a,b,c,d){for(let e of d)try{let d=(0,o.ni)(e.id);if(!d)throw Error("Workflow id пустой");let f=new Date().toISOString(),g=e.steps.map((a,b)=>({id:(0,o.ni)(a.id??`step-${b+1}`),kind:a.kind,label:a.label,params:a.params??{}})),h={id:d,label:e.label,...e.description?{description:e.description}:{},trigger:e.trigger??"manual",steps:g,createdAt:f,updatedAt:f,sourceTopicId:b},i=(0,p.n)(h);if(i)throw Error(i);await (0,o.r$)(a,h),await this.emit({type:"workflow-event",workflowId:h.id,label:h.label,...h.description?{description:h.description}:{},trigger:h.trigger,stepCount:h.steps.length,sourceTopicId:b,agentId:c,ts:f,seq:0})}catch(a){await this.emit({type:"workflow-error",workflowId:e.id,message:"workflow-create failed: "+(a instanceof Error?a.message:String(a)),agentId:c,ts:A(),seq:0})}}async applyWidgetDirectives(a,b,c,d,e){let f=await (0,n.readLayout)(a),g=[...f.order],h=[...f.hidden];for(let f of[...d,...e]){let d=e.includes(f);try{let e={kind:f.kind,data:f.data},i=d?await (0,n.readWidget)(a,f.id):null,j=(0,n.buildRecord)({id:f.id,title:f.title,...f.description?{description:f.description}:{},sourceTopicId:b,payload:e,existing:i,...f.size?{size:f.size}:{},...f.refresh?{refresh:f.refresh}:{},...void 0!==f.memory?{memory:f.memory}:{},...f.memoryFile?{memoryFile:f.memoryFile}:{}});await (0,n.writeWidget)(a,j),i||h.includes(j.id)||g.includes(j.id)||h.push(j.id),await this.emit({type:"widget-event",op:d&&i?"update":"create",widgetId:j.id,title:j.title,...j.description?{description:j.description}:{},kind:j.kind,data:j.data,sourceTopicId:b,agentId:c,ts:A(),seq:0})}catch(a){await this.emit({type:"widget-error",widgetId:f.id,message:(d?"widget-update":"widget-create")+" failed: "+(a instanceof Error?a.message:String(a)),agentId:c,ts:A(),seq:0})}}await (0,n.writeLayout)(a,{order:g,hidden:h})}async runYoutubeSummaries(a,b){if(!this.agents.get(a))return;await this.emit({type:"system",text:`Запускаю Gemini-выжимку YouTube (${b.length}):
|
|
484
|
-
${b.map(a=>`• ${a.url}`).join("\n")}`,subtype:"reflex.preflight",agentId:a,ts:A(),seq:0});let{summarizeYoutubeAction:d}=await c.e(9098).then(c.bind(c,39098)),e=await Promise.all(b.map(async a=>{let b=await d({url:a.url,...a.prompt?{prompt:a.prompt}:{}});return b.ok?{url:a.url,text:b.text,model:b.model}:{url:a.url,error:b.error}})),f=e.map(a=>"text"in a?[`### youtube-summary ${a.url}`,`_(Gemini ${a.model} — используй как первоисточник; не пытайся WebFetch для того же URL.)_`,"",a.text].join("\n"):`### youtube-summary ${a.url}
|
|
485
|
-
_(Gemini failed: ${a.error}. Сообщи пользователю и предложи сохранить ключ в Settings → Gemini, либо ответь без выжимки.)_`);await this.emit({type:"system",text:e.every(a=>"text"in a)?"Выжимки получены, передаю агенту.":"Часть выжимок не получилась — детали в контексте.",subtype:"reflex.preflight",agentId:a,ts:A(),seq:0});let g=`[Reflex] Gemini-выжимки YouTube, которые ты запросил:
|
|
486
|
-
|
|
487
|
-
${f.join("\n\n")}
|
|
488
|
-
|
|
489
|
-
Теперь ответь пользователю на основе этого контекста. Не повторяй сами выжимки целиком — компонуй человеческий ответ.`;await this.continueTurn(a,g)}async destroy(a,b="completed"){let c=this.agents.get(a);if(!c)return;c.meta.status=b,c.meta.endedAt=A(),await this.emit({type:"agent-end",status:b,agentId:a,ts:c.meta.endedAt,seq:0}),this.agents.delete(a),this.turnText.delete(a),this.lastInvoke.delete(a);let d=this.byTopicRole.get(c.meta.topicId);if(d){for(let[b,c]of d)c===a&&d.delete(b);0===d.size&&this.byTopicRole.delete(c.meta.topicId)}}async emit(a){let b=this.agents.get(a.agentId);if(!b)return;let c=await (0,g.v)(b.rootPath,b.meta.topicId),d={...a,seq:c};if(await (0,g.Zn)(b.rootPath,b.meta.topicId,d),"assistant-delta"===a.type){let b=this.turnText.get(a.agentId)??"";this.turnText.set(a.agentId,b+a.text)}this.emitter.emit(`topic:${b.meta.topicId}`,d),this.emitter.emit(`agent:${a.agentId}`,d)}subscribeTopic(a,b){let c=`topic:${a}`;return this.emitter.on(c,b),()=>this.emitter.off(c,b)}subscribeAgent(a,b){let c=`agent:${a}`;return this.emitter.on(c,b),()=>this.emitter.off(c,b)}list(a){let b=[];for(let c of this.agents.values())(!a?.topicId||c.meta.topicId===a.topicId)&&(a?.rootId&&c.meta.rootId!==a.rootId||b.push({...c.meta}));return b.sort((a,b)=>Date.parse(b.startedAt)-Date.parse(a.startedAt)),b}get(a){let b=this.agents.get(a);return b?{...b.meta}:null}isActive(a){let b=this.byTopicRole.get(a);if(!b)return!1;for(let a of b.values()){let b=this.agents.get(a);if(b?.meta.status==="running")return!0}return!1}listRunningTopicsForRoot(a){let b=new Set;for(let c of this.agents.values())c.meta.rootId===a&&"running"===c.meta.status&&b.add(c.meta.topicId);return[...b]}async stopTopic(a){let b=[];for(let[c,d]of this.agents)d.meta.topicId===a&&b.push(c);let c=0;for(let a of b){let b=this.agents.get(a);b&&"running"===b.meta.status&&(await this.destroy(a,"cancelled"),c+=1)}return{stopped:c}}constructor(){this.agents=new Map,this.byTopicRole=new Map,this.emitter=new e.EventEmitter,this.turnText=new Map,this.lastInvoke=new Map,this.pendingMcpAdds=new Map}}function A(){return new Date().toISOString()}let F=new Set(["claude-code","codex","ollama","image-gen"]);async function B(a,b,d){if(!a||"object"!=typeof a)return a;let e={...a},f=e.transport,g="stdio"===f?"env":"http"===f||"sse"===f?"headers":null;if(!g)return e;let h=e[g]??{},i={};for(let[a,b]of Object.entries(h))i[a]=String(b);for(let a of b){if(a.oauth){let{getOAuthTokens:b}=await c.e(1223).then(c.bind(c,1223)),{isOAuthProviderId:d}=await c.e(94).then(c.bind(c,10094));if(!d(a.oauth))throw Error(`unknown OAuth provider: ${a.oauth}`);if(!await b(a.oauth))throw Error(`provider "${a.oauth}" not authorized — open Settings → OAuth and Authorize first`);i[a.envKey]=`$oauth:${a.oauth}`;continue}let b=d[a.envKey];if(void 0!==b&&""!==b)i[a.envKey]=b;else if(a.required)throw Error(`secret "${a.envKey}" is required`);else delete i[a.envKey]}return e[g]=i,e}function C(){return(0,f.randomUUID)().replace(/-/g,"").slice(0,12)}async function D(a,b){let c=await (0,g.readEvents)(a,b),d=[],e=null,f=()=>{e&&(d.push(`### ${e.role}
|
|
490
|
-
${e.text.trim()}`),e=null)};for(let a of c)"user-message"===a.type?(f(),e={role:"user",text:a.text},f()):"assistant-delta"===a.type?(e&&"assistant"===e.role||(f(),e={role:"assistant",text:""}),e.text+=a.text):("turn-end"===a.type||"agent-end"===a.type)&&f();return f(),d.join("\n\n")}let G=globalThis.__reflexAgentManager??new E;globalThis.__reflexAgentManager=G,c.e(569).then(c.bind(c,10569)).then(a=>a.startWidgetScheduler()).catch(a=>{console.error("[widget-scheduler] failed to start:",a)}),d()}catch(a){d(a)}})},95422:(a,b,c)=>{"use strict";c.d(b,{Toaster:()=>d});let d=(0,c(54491).registerClientReference)(function(){throw Error("Attempted to call Toaster() from the server but Toaster is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/reflex-agent/reflex-agent/components/ui/sonner.tsx","Toaster")},96921:(a,b,c)=>{"use strict";c.d(b,{Lo:()=>d,dr:()=>e});let d=[{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"}];function e(a){var b;let c=a.trim();if(!c.startsWith("/"))return null;let e=/^\/([a-z][a-z0-9-]*)(?:\s+([\s\S]*))?$/.exec(c);if(!e)return null;let f=(b=e[1],d.find(a=>a.trigger===b)??null);return f?{def:f,payload:(e[2]??"").trim()}:null}},97453:(a,b,c)=>{"use strict";c.d(b,{Jc:()=>p,McpConfigSchema:()=>l,callTool:()=>r,connectAndListTools:()=>q});var d=c(1680),e=c(81475),f=c(73444),g=c(43451),h=c(56149);let i=h.Ik({transport:h.eu("stdio"),command:h.Yj().min(1),args:h.YO(h.Yj()).default([]),env:h.g1(h.Yj(),h.Yj()).default({}),cwd:h.Yj().optional()}),j=h.Ik({transport:h.eu("http"),url:h.Yj().url(),headers:h.g1(h.Yj(),h.Yj()).default({})}),k=h.Ik({transport:h.eu("sse"),url:h.Yj().url(),headers:h.g1(h.Yj(),h.Yj()).default({})}),l=h.gM("transport",[i,j,k]),m={name:"reflex-utility-bridge",version:"0.1.0"};async function n(a){let b=new d.K(m);if("stdio"===a.transport){let c=await p(a.env),d=new e.oQ({command:a.command,args:a.args,env:{...process.env,...c},cwd:a.cwd});return await b.connect(d),{client:b,close:()=>b.close()}}if("http"===a.transport){let c=await p(a.headers),d=new f.j(new URL(a.url),{requestInit:{headers:c}});return await b.connect(d),{client:b,close:()=>b.close()}}let c=await p(a.headers),h=new g.A(new URL(a.url),{requestInit:{headers:c}});return await b.connect(h),{client:b,close:()=>b.close()}}let o=/\$oauth:([a-z][a-z0-9-]*)/g;async function p(a){let b={};for(let[d,e]of Object.entries(a)){if("string"!=typeof e||!e.includes("$oauth:")){b[d]=e;continue}let a=new Set;e.replace(o,(b,c)=>(a.add(c),""));let f=e,{getAccessToken:g}=await c.e(1888).then(c.bind(c,61888)),{isOAuthProviderId:h}=await c.e(94).then(c.bind(c,10094));for(let b of a){if(!h(b))throw Error(`unknown OAuth provider in placeholder: ${b}`);let a=await g(b);f=f.replace(RegExp(`\\$oauth:${b}\\b`,"g"),a)}b[d]=f}return b}async function q(a){let{client:b,close:c}=await n(a);try{let a=b.getServerVersion(),{tools:c}=await b.listTools();return{name:a?.name,version:a?.version,tools:c.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema}))}}finally{await c().catch(()=>{})}}async function r(a,b,c){let{client:d,close:e}=await n(a);try{let a=await d.callTool({name:b,arguments:c});return{isError:"boolean"==typeof a.isError?a.isError:void 0,content:a.content}}finally{await e().catch(()=>{})}}},98360:(a,b,c)=>{"use strict";c.d(b,{E:()=>e});var d=c(36017);async function e(a){let b=(await (0,d.M)()).harnesses.ollama.baseUrl.replace(/\/$/,""),c=await fetch(`${b}/api/generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a.args.model,system:a.args.systemPrompt,prompt:a.args.prompt,stream:!0})});if(!c.ok||!c.body)throw Error(`Ollama /api/generate HTTP ${c.status}`);let e=c.body.getReader(),f=new TextDecoder,g="";for(;;){let b,{done:c,value:d}=await e.read();if(c)break;for(g+=f.decode(d,{stream:!0});(b=g.indexOf("\n"))>=0;){let c=g.slice(0,b).trim();if(g=g.slice(b+1),c)try{let b=JSON.parse(c);if(b.error)throw Error(b.error);b.response&&await a.manager.emit({type:"assistant-delta",text:b.response,agentId:a.meta.id,ts:new Date().toISOString(),seq:0})}catch{}}}}},98800:(a,b,c)=>{Promise.resolve().then(c.bind(c,30849)),Promise.resolve().then(c.bind(c,95422))},99353:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{T:()=>h});var e=c(7206),f=c(36017),g=a([e]);async function h(a,b,c){let d=c?.timeoutMs??3e4;if("claude-code"===a.harness)return(await (0,e.execa)("claude",["-p",b,"--permission-mode","default","--allowedTools","","--model",a.model],{timeout:d,stdio:["ignore","pipe","pipe"]})).stdout.trim();if("codex"===a.harness)return(await (0,e.execa)("codex",["exec","--sandbox","read-only","--model",a.model,b],{timeout:d,stdio:["ignore","pipe","pipe"]})).stdout.trim();if("ollama"===a.harness){let c=(await (0,f.M)()).harnesses.ollama.baseUrl.replace(/\/$/,""),e=await fetch(`${c}/api/generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a.model,prompt:b,stream:!1}),signal:AbortSignal.timeout(d)});if(!e.ok)throw Error(`Ollama /api/generate HTTP ${e.status}`);return((await e.json()).response??"").trim()}throw Error(`Unsupported quick harness: ${a.harness}`)}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},99668:(a,b,c)=>{"use strict";c.d(b,{Toaster:()=>l});var d=c(64173),e=c(9338),f=c(48855),g=c(74868),h=c(35089),i=c(62261),j=c(22571),k=c(44052);let l=({...a})=>{let{theme:b="system"}=(0,j.D)();return(0,d.jsx)(k.l$,{theme:b,className:"toaster group",icons:{success:(0,d.jsx)(e.A,{className:"size-4"}),info:(0,d.jsx)(f.A,{className:"size-4"}),warning:(0,d.jsx)(g.A,{className:"size-4"}),error:(0,d.jsx)(h.A,{className:"size-4"}),loading:(0,d.jsx)(i.A,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},...a})}},99804:(a,b,c)=>{"use strict";c.d(b,{AppSidebar:()=>I});var d=c(64173),e=c(17240),f=c(1056),g=c.n(f),h=c(87671),i=c(44052),j=c(69552),k=c(61636),l=c(15666),m=c(58405),n=c(58507),o=c(98463),p=c(68669),q=c(62261),r=c(53186),s=c(51348),t=c(97338),u=c(49191),v=c(88724),w=c(27456),x=c(68394),y=c(20583),z=c(3265);let A=(0,z.createServerReference)("409f4b5447b4175cc96d5a403d470e05b0b0241e3e",z.callServer,void 0,z.findSourceMapURL,"loadKbSectionsAction"),B=(0,z.createServerReference)("405f0143d37a718a80ca822d2f14b2c1e4b0fd205e",z.callServer,void 0,z.findSourceMapURL,"loadTopicsAction"),C=(0,z.createServerReference)("00f3369b4cf55940a301292a6c9f77f00b837d7dc3",z.callServer,void 0,z.findSourceMapURL,"listRootsAction"),D=(0,z.createServerReference)("409ccdac19b10aed97024dc752228dd6e45a7801e7",z.callServer,void 0,z.findSourceMapURL,"listAgentsAction");var E=c(97162),F=c(29370),G=c(65266),H=c(10082);function I({initialRoots:a}){let b=(0,h.usePathname)(),[c,f]=(0,e.useState)(a),i=(0,e.useCallback)(async()=>{let a=await C();a.ok&&f(a.entries)},[]);return((0,v.S9)(v.Zi.rootsChanged,i),b?.startsWith("/share/")||"/share"===b)?null:(0,d.jsxs)("aside",{className:"w-72 shrink-0 border-r bg-muted/30 flex flex-col",children:[(0,d.jsxs)("div",{className:"px-4 py-4 flex items-center gap-2 border-b",children:[(0,d.jsx)("span",{className:"reflex-gradient inline-flex h-7 w-7 items-center justify-center rounded-lg text-white shadow-sm",children:(0,d.jsx)(j.A,{className:"h-4 w-4"})}),(0,d.jsxs)("div",{className:"leading-tight",children:[(0,d.jsx)(g(),{href:"/",className:"text-sm font-semibold tracking-tight hover:underline",children:"Reflex"}),(0,d.jsx)("div",{className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:"knowledge base"})]})]}),(0,d.jsx)(w.F,{className:"flex-1",children:(0,d.jsxs)("nav",{className:"px-2 pt-3 pb-6",children:[(0,d.jsx)("div",{className:"px-2 mb-1 text-[10px] uppercase tracking-wider text-muted-foreground",children:"Пространства"}),0===c.length?(0,d.jsx)("div",{className:"px-2 py-3 text-xs text-muted-foreground",children:"Пока пусто."}):(0,d.jsx)("ul",{className:"space-y-0.5",children:c.map(a=>(0,d.jsx)(J,{root:a,active:b?.startsWith(`/roots/${a.id}`)??!1},a.id))}),(0,d.jsx)("div",{className:"mt-2 px-2",children:(0,d.jsx)(y.$,{asChild:!0,variant:"ghost",size:"sm",className:"h-7 w-full justify-start text-xs",children:(0,d.jsxs)(g(),{href:"/roots/new",children:[(0,d.jsx)(k.A,{className:"mr-1 h-3.5 w-3.5"})," Добавить пространство"]})})})]})}),(0,d.jsx)(x.Separator,{}),(0,d.jsxs)("div",{className:"px-2 py-2 space-y-0.5",children:[(0,d.jsx)(y.$,{asChild:!0,variant:"/utilities"===b||b?.startsWith("/utilities/")?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/utilities",children:[(0,d.jsx)(E.A,{className:"mr-2 h-4 w-4"})," Мини-приложения"]})}),(0,d.jsx)(y.$,{asChild:!0,variant:"/audit"===b?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/audit",children:[(0,d.jsx)(F.A,{className:"mr-2 h-4 w-4"})," Аудит"]})}),(0,d.jsx)(y.$,{asChild:!0,variant:"/settings"===b?"secondary":"ghost",size:"sm",className:"w-full justify-start",children:(0,d.jsxs)(g(),{href:"/settings",children:[(0,d.jsx)(l.A,{className:"mr-2 h-4 w-4"})," Settings"]})})]})]})}function J({root:a,active:b}){let[c,f]=(0,e.useState)(b),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,C]=(0,e.useState)(null),[E,F]=(0,e.useState)(!1),[H,I]=(0,e.useState)(!1),[J,L]=(0,e.useState)(!1),O=(0,h.usePathname)(),P=(0,e.useCallback)(async()=>{F(!0);let b=await A(a.id);F(!1),b.ok?w(b.sections):w([])},[a.id]),R=(0,e.useCallback)(async()=>{I(!0);let b=await B(a.id);I(!1),b.ok?y(b.topics):y([])},[a.id]),S=(0,e.useCallback)(async()=>{L(!0);let b=await D({rootId:a.id});L(!1),b.ok?C(b.agents):C([])},[a.id]);(0,v.S9)(v.Zi.kbChanged(a.id),()=>{i?P():w(null)}),(0,v.S9)(v.Zi.topicsChanged(a.id),()=>{k?R():y(null),s?S():C(null)});let T=async()=>{let a=!i;j(a),a&&null===u&&!E&&await P()},U=async()=>{let a=!k;l(a),a&&null===x&&!H&&await R()},V=async()=>{let a=!s;t(a),a&&null===z&&!J&&await S()},W=function(a){let b=a.split("/").filter(Boolean);return b[b.length-1]??a}(a.path);return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center group",children:[(0,d.jsx)("button",{type:"button",onClick:()=>f(a=>!a),className:"h-6 w-6 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0","aria-label":c?"Свернуть":"Развернуть",children:c?(0,d.jsx)(m.A,{className:"h-3.5 w-3.5"}):(0,d.jsx)(n.A,{className:"h-3.5 w-3.5"})}),(0,d.jsxs)(g(),{href:`/roots/${a.id}`,className:`flex-1 min-w-0 flex items-center gap-2 px-2 py-1 rounded-md text-sm hover:bg-accent ${b?"bg-accent":""}`,children:[(0,d.jsx)(o.A,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:W})]})]}),c&&(0,d.jsxs)("ul",{className:"ml-5 mt-0.5 space-y-0.5 border-l pl-1",children:[(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:T,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[i?(0,d.jsx)(m.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(p.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:"База знаний"}),E&&(0,d.jsx)(q.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"})]}),i&&null!==u&&(0,d.jsx)(N,{rootId:a.id,sections:u,pathname:O})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:U,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[k?(0,d.jsx)(m.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(r.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:"Разговоры"}),H&&(0,d.jsx)(q.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==x&&(0,d.jsx)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:x.length})]}),k&&null!==x&&(0,d.jsx)(Q,{rootId:a.id,topics:x,pathname:O})]}),(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:V,className:"w-full flex items-center gap-1 px-2 py-1 rounded-md text-xs text-muted-foreground hover:bg-accent hover:text-foreground",children:[s?(0,d.jsx)(m.A,{className:"h-3 w-3 shrink-0"}):(0,d.jsx)(n.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)(G.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:"Агенты"}),J&&(0,d.jsx)(q.A,{className:"ml-auto h-3 w-3 animate-spin shrink-0"}),null!==z&&!J&&(0,d.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:[z.filter(a=>M(a.status)).length,"/",z.length]})]}),s&&null!==z&&(0,d.jsx)(K,{agents:z,pathname:O})]})]})]})}function K({agents:a,pathname:b}){if(0===a.length)return(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:"агентов не запускалось"});let c=new Map;for(let b of a){let a=b.parentId,d=c.get(a)??[];d.push(b),c.set(a,d)}let e=c.get(void 0)??[];return(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:e.map(a=>(0,d.jsx)(L,{agent:a,byParent:c,pathname:b,depth:0},a.id))})}function L({agent:a,byParent:b,pathname:c,depth:e}){let f=b.get(a.id)??[],h=`/agents/${a.id}`,i=c===h;return(0,d.jsxs)("li",{children:[(0,d.jsxs)(g(),{href:h,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${i?"bg-accent":""}`,style:{paddingLeft:8*e+4},children:[M(a.status)?(0,d.jsx)(H.A,{className:"h-3 w-3 text-emerald-600 shrink-0 animate-pulse"}):(0,d.jsx)(G.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1",children:a.label}),(0,d.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground shrink-0",title:`${a.harness} \xb7 ${a.model}`,children:"claude-code"===a.harness?"claude":"ollama"===a.harness?"ollama":"codex"})]}),f.length>0&&(0,d.jsx)("ul",{className:"space-y-0.5",children:f.map(a=>(0,d.jsx)(L,{agent:a,byParent:b,pathname:c,depth:e+1},a.id))})]})}function M(a){return"starting"===a||"running"===a}function N({rootId:a,sections:b,pathname:c}){return 0===b.length?(0,d.jsx)("div",{className:"px-3 py-1 text-[11px] italic text-muted-foreground",children:"пусто — запусти Run init"}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>b.isDir?(0,d.jsx)(O,{rootId:a,section:b,pathname:c},b.rel):(0,d.jsx)("li",{children:(0,d.jsx)(P,{rootId:a,section:b,pathname:c})},b.rel))})}function O({rootId:a,section:b,pathname:c}){let[f,g]=(0,e.useState)(!1);return(0,d.jsxs)("li",{children:[(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsx)("button",{type:"button",onClick:()=>g(a=>!a),className:"h-5 w-5 flex items-center justify-center text-muted-foreground hover:text-foreground shrink-0",children:f?(0,d.jsx)(m.A,{className:"h-3 w-3"}):(0,d.jsx)(n.A,{className:"h-3 w-3"})}),(0,d.jsx)(s.A,{className:"h-3 w-3 text-muted-foreground shrink-0 mr-1"}),(0,d.jsx)("span",{className:"text-[12px] flex-1 truncate",children:b.label})]}),f&&b.children&&(0,d.jsx)("ul",{className:"ml-4 space-y-0.5 border-l pl-1",children:b.children.map(b=>(0,d.jsx)("li",{children:(0,d.jsx)(P,{rootId:a,section:b,pathname:c})},b.rel))})]})}function P({rootId:a,section:b,pathname:c}){if(!b.fileRel)return null;let e=b.fileRel.split("/").map(encodeURIComponent).join("/"),f=`/roots/${a}/kb/${e}`,h=c===f;return(0,d.jsxs)(g(),{href:f,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${h?"bg-accent":""}`,children:[(0,d.jsx)(p.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:b.label})]})}function Q({rootId:a,topics:b,pathname:c}){return 0===b.length?(0,d.jsx)("div",{className:"ml-4 px-3 py-1 text-[11px] italic text-muted-foreground",children:"нет диалогов"}):(0,d.jsx)("ul",{className:"ml-4 mt-0.5 space-y-0.5 border-l pl-1",children:b.map(b=>(0,d.jsx)(R,{rootId:a,topic:b,pathname:c},b.id))})}function R({rootId:a,topic:b,pathname:c}){let f=`/roots/${a}/chat/${b.id}`,j=c===f,[k,l]=(0,e.useTransition)(),m=(0,h.useRouter)();return(0,d.jsx)("li",{className:"group/topic",children:(0,d.jsxs)(g(),{href:f,className:`flex items-center gap-1 px-2 py-1 text-[12px] rounded hover:bg-accent ${j?"bg-accent":""}`,children:[(0,d.jsx)(r.A,{className:"h-3 w-3 text-muted-foreground shrink-0"}),(0,d.jsx)("span",{className:"truncate flex-1 min-w-0",children:b.title}),(0,d.jsx)("button",{type:"button",onClick:c=>{c.preventDefault(),c.stopPropagation(),confirm(`Удалить топик \xab${b.title}\xbb? Это действие необратимо — диалог и все его события будут удалены.`)&&l(async()=>{let c=await (0,u.L)(a,b.id);if(!c.ok)return void i.oR.error(c.error??"Не удалось удалить");i.oR.success("Топик удалён"),(0,v.$d)(v.Zi.topicsChanged(a)),j&&m.push(`/roots/${a}`)})},disabled:k,"aria-label":"Удалить топик",title:"Удалить топик",className:"opacity-0 group-hover/topic:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/15 text-muted-foreground hover:text-destructive shrink-0",children:k?(0,d.jsx)(q.A,{className:"h-3 w-3 animate-spin"}):(0,d.jsx)(t.A,{className:"h-3 w-3"})})]})})}}};
|
|
1
|
+
exports.id=133,exports.ids=[133],exports.modules={4953:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=c(24688).unstable_rethrow;("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},9310:(a,b,c)=>{"use strict";var d=c(74830);c.o(d,"notFound")&&c.d(b,{notFound:function(){return d.notFound}}),c.o(d,"redirect")&&c.d(b,{redirect:function(){return d.redirect}})},19963:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(34750);let e=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var f={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let g=(0,d.forwardRef)(({color:a="currentColor",size:b=24,strokeWidth:c=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,d.createElement)("svg",{ref:l,...f,width:b,height:b,stroke:a,strokeWidth:g?24*Number(c)/Number(b):c,className:e("lucide",h),...k},[...j.map(([a,b])=>(0,d.createElement)(a,b)),...Array.isArray(i)?i:[i]])),h=(a,b)=>{let c=(0,d.forwardRef)(({className:c,...f},h)=>(0,d.createElement)(g,{ref:h,iconNode:b,className:e(`lucide-${a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,c),...f}));return c.displayName=`${a}`,c}},20594:(a,b,c)=>{let{createProxy:d}=c(17370);a.exports=d("/home/runner/work/reflex-agent/reflex-agent/node_modules/.pnpm/next@15.5.18_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/next/dist/client/app-dir/link.js")},24069:function(a,b,c){"use strict";var d=(this&&this.__importDefault||function(a){return a&&a.__esModule?a:{default:a}})(c(67494)),e=c(28109);function f(a,b){var c={};return a&&"string"==typeof a&&(0,d.default)(a,function(a,d){a&&d&&(c[(0,e.camelCase)(a,b)]=d)}),c}f.default=f,a.exports=f},24688:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=c(88546),e=c(60703),f=c(61052),g=c(54144),h=c(44113),i=c(43909);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},28109:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.camelCase=void 0;var c=/^--[a-zA-Z0-9_-]+$/,d=/-([a-z])/g,e=/^[^-]+$/,f=/^-(webkit|moz|ms|o|khtml)-/,g=/^-(ms)-/,h=function(a,b){return b.toUpperCase()},i=function(a,b){return"".concat(b,"-")};b.camelCase=function(a,b){var j;return(void 0===b&&(b={}),!(j=a)||e.test(j)||c.test(j))?a:(a=a.toLowerCase(),(a=b.reactCompat?a.replace(g,i):a.replace(f,i)).replace(d,h))}},30717:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unauthorized",{enumerable:!0,get:function(){return d}}),c(75826).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},42343:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"notFound",{enumerable:!0,get:function(){return e}});let d=""+c(75826).HTTP_ERROR_FALLBACK_ERROR_CODE+";404";function e(){let a=Object.defineProperty(Error(d),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw a.digest=d,a}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},43490:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"forbidden",{enumerable:!0,get:function(){return d}}),c(75826).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},50895:(a,b,c)=>{"use strict";c.d(b,{A:()=>i});var d=c(34750),e=c(22708),f=c(1278),g=c(14851),h=(0,d.cache)(function(a,b){return function({_cache:a=(0,f.b)(),_formatters:b=(0,f.c)(a),getMessageFallback:c=g.d,messages:d,namespace:e,onError:h=g.b,...i}){return function({messages:a,namespace:b,...c},d){return a=a["!"],b=(0,g.r)(b,"!"),(0,g.a)({...c,messages:a,namespace:b})}({...i,onError:h,cache:a,formatters:b,getMessageFallback:c,messages:{"!":d},namespace:e?`!.${e}`:"!"},"!")}({...a,namespace:b})}),i=(0,d.cache)(async function(a){let b,c;return"string"==typeof a?b=a:a&&(c=a.locale,b=a.namespace),h(await (0,e.A)(c),b)})},67494:function(a,b,c){"use strict";var d=this&&this.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(b,"__esModule",{value:!0}),b.default=function(a,b){let c=null;if(!a||"string"!=typeof a)return c;let d=(0,e.default)(a),f="function"==typeof b;return d.forEach(a=>{if("declaration"!==a.type)return;let{property:d,value:e}=a;f?b(d,e,a):e&&((c=c||{})[d]=e)}),c};let e=d(c(74651))},69009:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(19963).A)("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]])},71495:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{getRedirectError:function(){return g},getRedirectStatusCodeFromError:function(){return l},getRedirectTypeFromError:function(){return k},getURLFromRedirectError:function(){return j},permanentRedirect:function(){return i},redirect:function(){return h}});let d=c(20498),e=c(52512),f=c(19121).actionAsyncStorage;function g(a,b,c){void 0===c&&(c=d.RedirectStatusCode.TemporaryRedirect);let f=Object.defineProperty(Error(e.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return f.digest=e.REDIRECT_ERROR_CODE+";"+b+";"+a+";"+c+";",f}function h(a,b){var c;throw null!=b||(b=(null==f||null==(c=f.getStore())?void 0:c.isAction)?e.RedirectType.push:e.RedirectType.replace),g(a,b,d.RedirectStatusCode.TemporaryRedirect)}function i(a,b){throw void 0===b&&(b=e.RedirectType.replace),g(a,b,d.RedirectStatusCode.PermanentRedirect)}function j(a){return(0,e.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function k(a){if(!(0,e.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function l(a){if(!(0,e.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},74651:a=>{"use strict";var b=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,c=/\n/g,d=/^\s*/,e=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,f=/^:\s*/,g=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,h=/^[;\s]*/,i=/^\s+|\s+$/g;function j(a){return a?a.replace(i,""):""}a.exports=function(a,i){if("string"!=typeof a)throw TypeError("First argument must be a string");if(!a)return[];i=i||{};var k=1,l=1;function m(a){var b=a.match(c);b&&(k+=b.length);var d=a.lastIndexOf("\n");l=~d?a.length-d:l+a.length}function n(){var a={line:k,column:l};return function(b){return b.position=new o(a),q(d),b}}function o(a){this.start=a,this.end={line:k,column:l},this.source=i.source}function p(b){var c=Error(i.source+":"+k+":"+l+": "+b);if(c.reason=b,c.filename=i.source,c.line=k,c.column=l,c.source=a,i.silent);else throw c}function q(b){var c=b.exec(a);if(c){var d=c[0];return m(d),a=a.slice(d.length),c}}function r(a){var b;for(a=a||[];b=s();)!1!==b&&a.push(b);return a}function s(){var b=n();if("/"==a.charAt(0)&&"*"==a.charAt(1)){for(var c=2;""!=a.charAt(c)&&("*"!=a.charAt(c)||"/"!=a.charAt(c+1));)++c;if(c+=2,""===a.charAt(c-1))return p("End of comment missing");var d=a.slice(2,c-2);return l+=2,m(d),a=a.slice(c),l+=2,b({type:"comment",comment:d})}}o.prototype.content=a,q(d);var t,u=[];for(r(u);t=function(){var a=n(),c=q(e);if(c){if(s(),!q(f))return p("property missing ':'");var d=q(g),i=a({type:"declaration",property:j(c[0].replace(b,"")),value:d?j(d[0].replace(b,"")):""});return q(h),i}}();)!1!==t&&(u.push(t),r(u));return u}},74830:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{ReadonlyURLSearchParams:function(){return k},RedirectType:function(){return e.RedirectType},forbidden:function(){return g.forbidden},notFound:function(){return f.notFound},permanentRedirect:function(){return d.permanentRedirect},redirect:function(){return d.redirect},unauthorized:function(){return h.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return i.unstable_rethrow}});let d=c(71495),e=c(52512),f=c(42343),g=c(43490),h=c(30717),i=c(4953);class j extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class k extends URLSearchParams{append(){throw new j}delete(){throw new j}set(){throw new j}sort(){throw new j}}function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},80210:a=>{"use strict";var b=Object.prototype.hasOwnProperty,c=Object.prototype.toString,d=Object.defineProperty,e=Object.getOwnPropertyDescriptor,f=function(a){return"function"==typeof Array.isArray?Array.isArray(a):"[object Array]"===c.call(a)},g=function(a){if(!a||"[object Object]"!==c.call(a))return!1;var d,e=b.call(a,"constructor"),f=a.constructor&&a.constructor.prototype&&b.call(a.constructor.prototype,"isPrototypeOf");if(a.constructor&&!e&&!f)return!1;for(d in a);return void 0===d||b.call(a,d)},h=function(a,b){d&&"__proto__"===b.name?d(a,b.name,{enumerable:!0,configurable:!0,value:b.newValue,writable:!0}):a[b.name]=b.newValue},i=function(a,c){if("__proto__"===c){if(!b.call(a,c))return;else if(e)return e(a,c).value}return a[c]};a.exports=function a(){var b,c,d,e,j,k,l=arguments[0],m=1,n=arguments.length,o=!1;for("boolean"==typeof l&&(o=l,l=arguments[1]||{},m=2),(null==l||"object"!=typeof l&&"function"!=typeof l)&&(l={});m<n;++m)if(b=arguments[m],null!=b)for(c in b)d=i(l,c),l!==(e=i(b,c))&&(o&&e&&(g(e)||(j=f(e)))?(j?(j=!1,k=d&&f(d)?d:[]):k=d&&g(d)?d:{},h(l,{name:c,newValue:a(o,k,e)})):void 0!==e&&h(l,{name:c,newValue:e}));return l}},82435:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(19963).A)("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]])},95203:(a,b,c)=>{"use strict";c.d(b,{oz:()=>cE});var d={};c.r(d),c.d(d,{boolean:()=>q,booleanish:()=>r,commaOrSpaceSeparated:()=>w,commaSeparated:()=>v,number:()=>t,overloadedBoolean:()=>s,spaceSeparated:()=>u});var e={};c.r(e),c.d(e,{attentionMarkers:()=>bC,contentInitial:()=>bw,disable:()=>bD,document:()=>bv,flow:()=>by,flowInitial:()=>bx,insideSpan:()=>bB,string:()=>bz,text:()=>bA});let f=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,g=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,h={};function i(a,b){return((b||h).jsx?g:f).test(a)}let j=/[ \t\n\f\r]/g;function k(a){return""===a.replace(j,"")}class l{constructor(a,b,c){this.normal=b,this.property=a,c&&(this.space=c)}}function m(a,b){let c={},d={};for(let b of a)Object.assign(c,b.property),Object.assign(d,b.normal);return new l(c,d,b)}function n(a){return a.toLowerCase()}l.prototype.normal={},l.prototype.property={},l.prototype.space=void 0;class o{constructor(a,b){this.attribute=b,this.property=a}}o.prototype.attribute="",o.prototype.booleanish=!1,o.prototype.boolean=!1,o.prototype.commaOrSpaceSeparated=!1,o.prototype.commaSeparated=!1,o.prototype.defined=!1,o.prototype.mustUseProperty=!1,o.prototype.number=!1,o.prototype.overloadedBoolean=!1,o.prototype.property="",o.prototype.spaceSeparated=!1,o.prototype.space=void 0;let p=0,q=x(),r=x(),s=x(),t=x(),u=x(),v=x(),w=x();function x(){return 2**++p}let y=Object.keys(d);class z extends o{constructor(a,b,c,e){let f=-1;if(super(a,b),function(a,b,c){c&&(a[b]=c)}(this,"space",e),"number"==typeof c)for(;++f<y.length;){let a=y[f];!function(a,b,c){c&&(a[b]=c)}(this,y[f],(c&d[a])===d[a])}}}function A(a){let b={},c={};for(let[d,e]of Object.entries(a.properties)){let f=new z(d,a.transform(a.attributes||{},d),e,a.space);a.mustUseProperty&&a.mustUseProperty.includes(d)&&(f.mustUseProperty=!0),b[d]=f,c[n(d)]=d,c[n(f.attribute)]=d}return new l(b,c,a.space)}z.prototype.defined=!0;let B=A({properties:{ariaActiveDescendant:null,ariaAtomic:r,ariaAutoComplete:null,ariaBusy:r,ariaChecked:r,ariaColCount:t,ariaColIndex:t,ariaColSpan:t,ariaControls:u,ariaCurrent:null,ariaDescribedBy:u,ariaDetails:null,ariaDisabled:r,ariaDropEffect:u,ariaErrorMessage:null,ariaExpanded:r,ariaFlowTo:u,ariaGrabbed:r,ariaHasPopup:null,ariaHidden:r,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:u,ariaLevel:t,ariaLive:null,ariaModal:r,ariaMultiLine:r,ariaMultiSelectable:r,ariaOrientation:null,ariaOwns:u,ariaPlaceholder:null,ariaPosInSet:t,ariaPressed:r,ariaReadOnly:r,ariaRelevant:null,ariaRequired:r,ariaRoleDescription:u,ariaRowCount:t,ariaRowIndex:t,ariaRowSpan:t,ariaSelected:r,ariaSetSize:t,ariaSort:null,ariaValueMax:t,ariaValueMin:t,ariaValueNow:t,ariaValueText:null,role:null},transform:(a,b)=>"role"===b?b:"aria-"+b.slice(4).toLowerCase()});function C(a,b){return b in a?a[b]:b}function D(a,b){return C(a,b.toLowerCase())}let E=A({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:v,acceptCharset:u,accessKey:u,action:null,allow:null,allowFullScreen:q,allowPaymentRequest:q,allowUserMedia:q,alt:null,as:null,async:q,autoCapitalize:null,autoComplete:u,autoFocus:q,autoPlay:q,blocking:u,capture:null,charSet:null,checked:q,cite:null,className:u,cols:t,colSpan:null,content:null,contentEditable:r,controls:q,controlsList:u,coords:t|v,crossOrigin:null,data:null,dateTime:null,decoding:null,default:q,defer:q,dir:null,dirName:null,disabled:q,download:s,draggable:r,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:q,formTarget:null,headers:u,height:t,hidden:s,high:t,href:null,hrefLang:null,htmlFor:u,httpEquiv:u,id:null,imageSizes:null,imageSrcSet:null,inert:q,inputMode:null,integrity:null,is:null,isMap:q,itemId:null,itemProp:u,itemRef:u,itemScope:q,itemType:u,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:q,low:t,manifest:null,max:null,maxLength:t,media:null,method:null,min:null,minLength:t,multiple:q,muted:q,name:null,nonce:null,noModule:q,noValidate:q,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:q,optimum:t,pattern:null,ping:u,placeholder:null,playsInline:q,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:q,referrerPolicy:null,rel:u,required:q,reversed:q,rows:t,rowSpan:t,sandbox:u,scope:null,scoped:q,seamless:q,selected:q,shadowRootClonable:q,shadowRootDelegatesFocus:q,shadowRootMode:null,shape:null,size:t,sizes:null,slot:null,span:t,spellCheck:r,src:null,srcDoc:null,srcLang:null,srcSet:null,start:t,step:null,style:null,tabIndex:t,target:null,title:null,translate:null,type:null,typeMustMatch:q,useMap:null,value:r,width:t,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:u,axis:null,background:null,bgColor:null,border:t,borderColor:null,bottomMargin:t,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:q,declare:q,event:null,face:null,frame:null,frameBorder:null,hSpace:t,leftMargin:t,link:null,longDesc:null,lowSrc:null,marginHeight:t,marginWidth:t,noResize:q,noHref:q,noShade:q,noWrap:q,object:null,profile:null,prompt:null,rev:null,rightMargin:t,rules:null,scheme:null,scrolling:r,standby:null,summary:null,text:null,topMargin:t,valueType:null,version:null,vAlign:null,vLink:null,vSpace:t,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:q,disableRemotePlayback:q,prefix:null,property:null,results:t,security:null,unselectable:null},space:"html",transform:D}),F=A({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:w,accentHeight:t,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:t,amplitude:t,arabicForm:null,ascent:t,attributeName:null,attributeType:null,azimuth:t,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:t,by:null,calcMode:null,capHeight:t,className:u,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:t,diffuseConstant:t,direction:null,display:null,dur:null,divisor:t,dominantBaseline:null,download:q,dx:null,dy:null,edgeMode:null,editable:null,elevation:t,enableBackground:null,end:null,event:null,exponent:t,externalResourcesRequired:null,fill:null,fillOpacity:t,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:v,g2:v,glyphName:v,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:t,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:t,horizOriginX:t,horizOriginY:t,id:null,ideographic:t,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:t,k:t,k1:t,k2:t,k3:t,k4:t,kernelMatrix:w,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:t,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:t,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:t,overlineThickness:t,paintOrder:null,panose1:null,path:null,pathLength:t,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:u,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:t,pointsAtY:t,pointsAtZ:t,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:w,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:w,rev:w,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:w,requiredFeatures:w,requiredFonts:w,requiredFormats:w,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:t,specularExponent:t,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:t,strikethroughThickness:t,string:null,stroke:null,strokeDashArray:w,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:t,strokeOpacity:t,strokeWidth:null,style:null,surfaceScale:t,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:w,tabIndex:t,tableValues:null,target:null,targetX:t,targetY:t,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:w,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:t,underlineThickness:t,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:t,values:null,vAlphabetic:t,vMathematical:t,vectorEffect:null,vHanging:t,vIdeographic:t,version:null,vertAdvY:t,vertOriginX:t,vertOriginY:t,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:t,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:C}),G=A({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform:(a,b)=>"xlink:"+b.slice(5).toLowerCase()}),H=A({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:D}),I=A({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform:(a,b)=>"xml:"+b.slice(3).toLowerCase()}),J=m([B,E,G,H,I],"html"),K=m([B,F,G,H,I],"svg"),L=/[A-Z]/g,M=/-[a-z]/g,N=/^data[-\w.:]+$/i;function O(a){return"-"+a.toLowerCase()}function P(a){return a.charAt(1).toUpperCase()}let Q={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"};var R=c(24069);let S=U("end"),T=U("start");function U(a){return function(b){let c=b&&b.position&&b.position[a]||{};if("number"==typeof c.line&&c.line>0&&"number"==typeof c.column&&c.column>0)return{line:c.line,column:c.column,offset:"number"==typeof c.offset&&c.offset>-1?c.offset:void 0}}}function V(a){return a&&"object"==typeof a?"position"in a||"type"in a?X(a.position):"start"in a||"end"in a?X(a):"line"in a||"column"in a?W(a):"":""}function W(a){return Y(a&&a.line)+":"+Y(a&&a.column)}function X(a){return W(a&&a.start)+"-"+W(a&&a.end)}function Y(a){return a&&"number"==typeof a?a:1}class Z extends Error{constructor(a,b,c){super(),"string"==typeof b&&(c=b,b=void 0);let d="",e={},f=!1;if(b&&(e="line"in b&&"column"in b||"start"in b&&"end"in b?{place:b}:"type"in b?{ancestors:[b],place:b.position}:{...b}),"string"==typeof a?d=a:!e.cause&&a&&(f=!0,d=a.message,e.cause=a),!e.ruleId&&!e.source&&"string"==typeof c){let a=c.indexOf(":");-1===a?e.ruleId=c:(e.source=c.slice(0,a),e.ruleId=c.slice(a+1))}if(!e.place&&e.ancestors&&e.ancestors){let a=e.ancestors[e.ancestors.length-1];a&&(e.place=a.position)}let g=e.place&&"start"in e.place?e.place.start:e.place;this.ancestors=e.ancestors||void 0,this.cause=e.cause||void 0,this.column=g?g.column:void 0,this.fatal=void 0,this.file="",this.message=d,this.line=g?g.line:void 0,this.name=V(e.place)||"1:1",this.place=e.place||void 0,this.reason=this.message,this.ruleId=e.ruleId||void 0,this.source=e.source||void 0,this.stack=f&&e.cause&&"string"==typeof e.cause.stack?e.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Z.prototype.file="",Z.prototype.name="",Z.prototype.reason="",Z.prototype.message="",Z.prototype.stack="",Z.prototype.column=void 0,Z.prototype.line=void 0,Z.prototype.ancestors=void 0,Z.prototype.cause=void 0,Z.prototype.fatal=void 0,Z.prototype.place=void 0,Z.prototype.ruleId=void 0,Z.prototype.source=void 0;let $={}.hasOwnProperty,_=new Map,aa=/[A-Z]/g,ab=new Set(["table","tbody","thead","tfoot","tr"]),ac=new Set(["td","th"]),ad="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function ae(a,b,c){return"element"===b.type?function(a,b,c){let d=a.schema;"svg"===b.tagName.toLowerCase()&&"html"===d.space&&(a.schema=K),a.ancestors.push(b);let e=ai(a,b.tagName,!1),f=function(a,b){let c,d,e={};for(d in b.properties)if("children"!==d&&$.call(b.properties,d)){let f=function(a,b,c){let d=function(a,b){let c=n(b),d=b,e=o;if(c in a.normal)return a.property[a.normal[c]];if(c.length>4&&"data"===c.slice(0,4)&&N.test(b)){if("-"===b.charAt(4)){let a=b.slice(5).replace(M,P);d="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{let a=b.slice(4);if(!M.test(a)){let c=a.replace(L,O);"-"!==c.charAt(0)&&(c="-"+c),b="data"+c}}e=z}return new e(d,b)}(a.schema,b);if(!(null==c||"number"==typeof c&&Number.isNaN(c))){if(Array.isArray(c)&&(c=d.commaSeparated?function(a,b){let c={};return(""===a[a.length-1]?[...a,""]:a).join((c.padRight?" ":"")+","+(!1===c.padLeft?"":" ")).trim()}(c):c.join(" ").trim()),"style"===d.property){let b="object"==typeof c?c:function(a,b){try{return R(b,{reactCompat:!0})}catch(c){if(a.ignoreInvalidStyle)return{};let b=new Z("Cannot parse `style` attribute",{ancestors:a.ancestors,cause:c,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw b.file=a.filePath||void 0,b.url=ad+"#cannot-parse-style-attribute",b}}(a,String(c));return"css"===a.stylePropertyNameCase&&(b=function(a){let b,c={};for(b in a)$.call(a,b)&&(c[function(a){let b=a.replace(aa,ak);return"ms-"===b.slice(0,3)&&(b="-"+b),b}(b)]=a[b]);return c}(b)),["style",b]}return["react"===a.elementAttributeNameCase&&d.space?Q[d.property]||d.property:d.attribute,c]}}(a,d,b.properties[d]);if(f){let[d,g]=f;a.tableCellAlignToStyle&&"align"===d&&"string"==typeof g&&ac.has(b.tagName)?c=g:e[d]=g}}return c&&((e.style||(e.style={}))["css"===a.stylePropertyNameCase?"text-align":"textAlign"]=c),e}(a,b),g=ah(a,b);return ab.has(b.tagName)&&(g=g.filter(function(a){return"string"!=typeof a||!("object"==typeof a?"text"===a.type&&k(a.value):k(a))})),af(a,f,e,b),ag(f,g),a.ancestors.pop(),a.schema=d,a.create(b,e,f,c)}(a,b,c):"mdxFlowExpression"===b.type||"mdxTextExpression"===b.type?function(a,b){if(b.data&&b.data.estree&&a.evaluater){let c=b.data.estree.body[0];return c.type,a.evaluater.evaluateExpression(c.expression)}aj(a,b.position)}(a,b):"mdxJsxFlowElement"===b.type||"mdxJsxTextElement"===b.type?function(a,b,c){let d=a.schema;"svg"===b.name&&"html"===d.space&&(a.schema=K),a.ancestors.push(b);let e=null===b.name?a.Fragment:ai(a,b.name,!0),f=function(a,b){let c={};for(let d of b.attributes)if("mdxJsxExpressionAttribute"===d.type)if(d.data&&d.data.estree&&a.evaluater){let b=d.data.estree.body[0];b.type;let e=b.expression;e.type;let f=e.properties[0];f.type,Object.assign(c,a.evaluater.evaluateExpression(f.argument))}else aj(a,b.position);else{let e,f=d.name;if(d.value&&"object"==typeof d.value)if(d.value.data&&d.value.data.estree&&a.evaluater){let b=d.value.data.estree.body[0];b.type,e=a.evaluater.evaluateExpression(b.expression)}else aj(a,b.position);else e=null===d.value||d.value;c[f]=e}return c}(a,b),g=ah(a,b);return af(a,f,e,b),ag(f,g),a.ancestors.pop(),a.schema=d,a.create(b,e,f,c)}(a,b,c):"mdxjsEsm"===b.type?function(a,b){if(b.data&&b.data.estree&&a.evaluater)return a.evaluater.evaluateProgram(b.data.estree);aj(a,b.position)}(a,b):"root"===b.type?function(a,b,c){let d={};return ag(d,ah(a,b)),a.create(b,a.Fragment,d,c)}(a,b,c):"text"===b.type?b.value:void 0}function af(a,b,c,d){"string"!=typeof c&&c!==a.Fragment&&a.passNode&&(b.node=d)}function ag(a,b){if(b.length>0){let c=b.length>1?b:b[0];c&&(a.children=c)}}function ah(a,b){let c=[],d=-1,e=a.passKeys?new Map:_;for(;++d<b.children.length;){let f,g=b.children[d];if(a.passKeys){let a="element"===g.type?g.tagName:"mdxJsxFlowElement"===g.type||"mdxJsxTextElement"===g.type?g.name:void 0;if(a){let b=e.get(a)||0;f=a+"-"+b,e.set(a,b+1)}}let h=ae(a,g,f);void 0!==h&&c.push(h)}return c}function ai(a,b,c){let d;if(c)if(b.includes(".")){let a,c=b.split("."),e=-1;for(;++e<c.length;){let b=i(c[e])?{type:"Identifier",name:c[e]}:{type:"Literal",value:c[e]};a=a?{type:"MemberExpression",object:a,property:b,computed:!!(e&&"Literal"===b.type),optional:!1}:b}d=a}else d=i(b)&&!/^[a-z]/.test(b)?{type:"Identifier",name:b}:{type:"Literal",value:b};else d={type:"Literal",value:b};if("Literal"===d.type){let b=d.value;return $.call(a.components,b)?a.components[b]:b}if(a.evaluater)return a.evaluater.evaluateExpression(d);aj(a)}function aj(a,b){let c=new Z("Cannot handle MDX estrees without `createEvaluater`",{ancestors:a.ancestors,place:b,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw c.file=a.filePath||void 0,c.url=ad+"#cannot-handle-mdx-estrees-without-createevaluater",c}function ak(a){return"-"+a.toLowerCase()}let al={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]};var am=c(63003);c(34750);let an={};function ao(a,b,c){var d;if((d=a)&&"object"==typeof d){if("value"in a)return"html"!==a.type||c?a.value:"";if(b&&"alt"in a&&a.alt)return a.alt;if("children"in a)return ap(a.children,b,c)}return Array.isArray(a)?ap(a,b,c):""}function ap(a,b,c){let d=[],e=-1;for(;++e<a.length;)d[e]=ao(a[e],b,c);return d.join("")}function aq(a,b,c,d){let e,f=a.length,g=0;if(b=b<0?-b>f?0:f+b:b>f?f:b,c=c>0?c:0,d.length<1e4)(e=Array.from(d)).unshift(b,c),a.splice(...e);else for(c&&a.splice(b,c);g<d.length;)(e=d.slice(g,g+1e4)).unshift(b,0),a.splice(...e),g+=1e4,b+=1e4}function ar(a,b){return a.length>0?(aq(a,a.length,0,b),a):b}class as{constructor(a){this.left=a?[...a]:[],this.right=[]}get(a){if(a<0||a>=this.left.length+this.right.length)throw RangeError("Cannot access index `"+a+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return a<this.left.length?this.left[a]:this.right[this.right.length-a+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(a,b){let c=null==b?1/0:b;return c<this.left.length?this.left.slice(a,c):a>this.left.length?this.right.slice(this.right.length-c+this.left.length,this.right.length-a+this.left.length).reverse():this.left.slice(a).concat(this.right.slice(this.right.length-c+this.left.length).reverse())}splice(a,b,c){this.setCursor(Math.trunc(a));let d=this.right.splice(this.right.length-(b||0),1/0);return c&&at(this.left,c),d.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(a){this.setCursor(1/0),this.left.push(a)}pushMany(a){this.setCursor(1/0),at(this.left,a)}unshift(a){this.setCursor(0),this.right.push(a)}unshiftMany(a){this.setCursor(0),at(this.right,a.reverse())}setCursor(a){if(a!==this.left.length&&(!(a>this.left.length)||0!==this.right.length)&&(!(a<0)||0!==this.left.length))if(a<this.left.length){let b=this.left.splice(a,1/0);at(this.right,b.reverse())}else{let b=this.right.splice(this.left.length+this.right.length-a,1/0);at(this.left,b.reverse())}}}function at(a,b){let c=0;if(b.length<1e4)a.push(...b);else for(;c<b.length;)a.push(...b.slice(c,c+1e4)),c+=1e4}function au(a){let b,c,d,e,f,g,h,i={},j=-1,k=new as(a);for(;++j<k.length;){for(;j in i;)j=i[j];if(b=k.get(j),j&&"chunkFlow"===b[1].type&&"listItemPrefix"===k.get(j-1)[1].type&&((d=0)<(g=b[1]._tokenizer.events).length&&"lineEndingBlank"===g[d][1].type&&(d+=2),d<g.length&&"content"===g[d][1].type))for(;++d<g.length&&"content"!==g[d][1].type;)"chunkText"===g[d][1].type&&(g[d][1]._isInFirstContentOfListItem=!0,d++);if("enter"===b[0])b[1].contentType&&(Object.assign(i,function(a,b){let c,d,e=a.get(b)[1],f=a.get(b)[2],g=b-1,h=[],i=e._tokenizer;!i&&(i=f.parser[e.contentType](e.start),e._contentTypeTextTrailing&&(i._contentTypeTextTrailing=!0));let j=i.events,k=[],l={},m=-1,n=e,o=0,p=0,q=[0];for(;n;){for(;a.get(++g)[1]!==n;);h.push(g),!n._tokenizer&&(c=f.sliceStream(n),n.next||c.push(null),d&&i.defineSkip(n.start),n._isInFirstContentOfListItem&&(i._gfmTasklistFirstContentOfListItem=!0),i.write(c),n._isInFirstContentOfListItem&&(i._gfmTasklistFirstContentOfListItem=void 0)),d=n,n=n.next}for(n=e;++m<j.length;)"exit"===j[m][0]&&"enter"===j[m-1][0]&&j[m][1].type===j[m-1][1].type&&j[m][1].start.line!==j[m][1].end.line&&(p=m+1,q.push(p),n._tokenizer=void 0,n.previous=void 0,n=n.next);for(i.events=[],n?(n._tokenizer=void 0,n.previous=void 0):q.pop(),m=q.length;m--;){let b=j.slice(q[m],q[m+1]),c=h.pop();k.push([c,c+b.length-1]),a.splice(c,2,b)}for(k.reverse(),m=-1;++m<k.length;)l[o+k[m][0]]=o+k[m][1],o+=k[m][1]-k[m][0]-1;return l}(k,j)),j=i[j],h=!0);else if(b[1]._container){for(d=j,c=void 0;d--;)if("lineEnding"===(e=k.get(d))[1].type||"lineEndingBlank"===e[1].type)"enter"===e[0]&&(c&&(k.get(c)[1].type="lineEndingBlank"),e[1].type="lineEnding",c=d);else if("linePrefix"===e[1].type||"listItemIndent"===e[1].type);else break;c&&(b[1].end={...k.get(c)[1].start},(f=k.slice(c,j)).unshift(b),k.splice(c,j-c+1,f))}}return aq(a,0,1/0,k.slice(0)),!h}let av={}.hasOwnProperty,aw=aI(/[A-Za-z]/),ax=aI(/[\dA-Za-z]/),ay=aI(/[#-'*+\--9=?A-Z^-~]/);function az(a){return null!==a&&(a<32||127===a)}let aA=aI(/\d/),aB=aI(/[\dA-Fa-f]/),aC=aI(/[!-/:-@[-`{-~]/);function aD(a){return null!==a&&a<-2}function aE(a){return null!==a&&(a<0||32===a)}function aF(a){return -2===a||-1===a||32===a}let aG=aI(/\p{P}|\p{S}/u),aH=aI(/\s/);function aI(a){return function(b){return null!==b&&b>-1&&a.test(String.fromCharCode(b))}}function aJ(a,b,c,d){let e=d?d-1:1/0,f=0;return function(d){return aF(d)?(a.enter(c),function d(g){return aF(g)&&f++<e?(a.consume(g),d):(a.exit(c),b(g))}(d)):b(d)}}let aK={tokenize:function(a){let b,c=a.attempt(this.parser.constructs.contentInitial,function(b){return null===b?void a.consume(b):(a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),aJ(a,c,"linePrefix"))},function(c){return a.enter("paragraph"),function c(d){let e=a.enter("chunkText",{contentType:"text",previous:b});return b&&(b.next=e),b=e,function b(d){if(null===d){a.exit("chunkText"),a.exit("paragraph"),a.consume(d);return}return aD(d)?(a.consume(d),a.exit("chunkText"),c):(a.consume(d),b)}(d)}(c)});return c}},aL={tokenize:function(a){let b,c,d,e=this,f=[],g=0;return h;function h(b){if(g<f.length){let c=f[g];return e.containerState=c[1],a.attempt(c[0].continuation,i,j)(b)}return j(b)}function i(a){if(g++,e.containerState._closeFlow){let c;e.containerState._closeFlow=void 0,b&&r();let d=e.events.length,f=d;for(;f--;)if("exit"===e.events[f][0]&&"chunkFlow"===e.events[f][1].type){c=e.events[f][1].end;break}q(g);let h=d;for(;h<e.events.length;)e.events[h][1].end={...c},h++;return aq(e.events,f+1,0,e.events.slice(d)),e.events.length=h,j(a)}return h(a)}function j(c){if(g===f.length){if(!b)return m(c);if(b.currentConstruct&&b.currentConstruct.concrete)return o(c);e.interrupt=!!(b.currentConstruct&&!b._gfmTableDynamicInterruptHack)}return e.containerState={},a.check(aM,k,l)(c)}function k(a){return b&&r(),q(g),m(a)}function l(a){return e.parser.lazy[e.now().line]=g!==f.length,d=e.now().offset,o(a)}function m(b){return e.containerState={},a.attempt(aM,n,o)(b)}function n(a){return g++,f.push([e.currentConstruct,e.containerState]),m(a)}function o(d){if(null===d){b&&r(),q(0),a.consume(d);return}return b=b||e.parser.flow(e.now()),a.enter("chunkFlow",{_tokenizer:b,contentType:"flow",previous:c}),function b(c){if(null===c){p(a.exit("chunkFlow"),!0),q(0),a.consume(c);return}return aD(c)?(a.consume(c),p(a.exit("chunkFlow")),g=0,e.interrupt=void 0,h):(a.consume(c),b)}(d)}function p(a,f){let h=e.sliceStream(a);if(f&&h.push(null),a.previous=c,c&&(c.next=a),c=a,b.defineSkip(a.start),b.write(h),e.parser.lazy[a.start.line]){let a,c,f=b.events.length;for(;f--;)if(b.events[f][1].start.offset<d&&(!b.events[f][1].end||b.events[f][1].end.offset>d))return;let h=e.events.length,i=h;for(;i--;)if("exit"===e.events[i][0]&&"chunkFlow"===e.events[i][1].type){if(a){c=e.events[i][1].end;break}a=!0}for(q(g),f=h;f<e.events.length;)e.events[f][1].end={...c},f++;aq(e.events,i+1,0,e.events.slice(h)),e.events.length=f}}function q(b){let c=f.length;for(;c-- >b;){let b=f[c];e.containerState=b[1],b[0].exit.call(e,a)}f.length=b}function r(){b.write([null]),c=void 0,b=void 0,e.containerState._closeFlow=void 0}}},aM={tokenize:function(a,b,c){return aJ(a,a.attempt(this.parser.constructs.document,b,c),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}},aN={partial:!0,tokenize:function(a,b,c){return function(b){return aF(b)?aJ(a,d,"linePrefix")(b):d(b)};function d(a){return null===a||aD(a)?b(a):c(a)}}},aO={resolve:function(a){return au(a),a},tokenize:function(a,b){let c;return function(b){return a.enter("content"),c=a.enter("chunkContent",{contentType:"content"}),d(b)};function d(b){return null===b?e(b):aD(b)?a.check(aP,f,e)(b):(a.consume(b),d)}function e(c){return a.exit("chunkContent"),a.exit("content"),b(c)}function f(b){return a.consume(b),a.exit("chunkContent"),c.next=a.enter("chunkContent",{contentType:"content",previous:c}),c=c.next,d}}},aP={partial:!0,tokenize:function(a,b,c){let d=this;return function(b){return a.exit("chunkContent"),a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),aJ(a,e,"linePrefix")};function e(e){if(null===e||aD(e))return c(e);let f=d.events[d.events.length-1];return!d.parser.constructs.disable.null.includes("codeIndented")&&f&&"linePrefix"===f[1].type&&f[2].sliceSerialize(f[1],!0).length>=4?b(e):a.interrupt(d.parser.constructs.flow,c,b)(e)}}},aQ={tokenize:function(a){let b=this,c=a.attempt(aN,function(d){return null===d?void a.consume(d):(a.enter("lineEndingBlank"),a.consume(d),a.exit("lineEndingBlank"),b.currentConstruct=void 0,c)},a.attempt(this.parser.constructs.flowInitial,d,aJ(a,a.attempt(this.parser.constructs.flow,d,a.attempt(aO,d)),"linePrefix")));return c;function d(d){return null===d?void a.consume(d):(a.enter("lineEnding"),a.consume(d),a.exit("lineEnding"),b.currentConstruct=void 0,c)}}},aR={resolveAll:aV()},aS=aU("string"),aT=aU("text");function aU(a){return{resolveAll:aV("text"===a?aW:void 0),tokenize:function(b){let c=this,d=this.parser.constructs[a],e=b.attempt(d,f,g);return f;function f(a){return i(a)?e(a):g(a)}function g(a){return null===a?void b.consume(a):(b.enter("data"),b.consume(a),h)}function h(a){return i(a)?(b.exit("data"),e(a)):(b.consume(a),h)}function i(a){if(null===a)return!0;let b=d[a],e=-1;if(b)for(;++e<b.length;){let a=b[e];if(!a.previous||a.previous.call(c,c.previous))return!0}return!1}}}}function aV(a){return function(b,c){let d,e=-1;for(;++e<=b.length;)void 0===d?b[e]&&"data"===b[e][1].type&&(d=e,e++):b[e]&&"data"===b[e][1].type||(e!==d+2&&(b[d][1].end=b[e-1][1].end,b.splice(d+2,e-d-2),e=d+2),d=void 0);return a?a(b,c):b}}function aW(a,b){let c=0;for(;++c<=a.length;)if((c===a.length||"lineEnding"===a[c][1].type)&&"data"===a[c-1][1].type){let d,e=a[c-1][1],f=b.sliceStream(e),g=f.length,h=-1,i=0;for(;g--;){let a=f[g];if("string"==typeof a){for(h=a.length;32===a.charCodeAt(h-1);)i++,h--;if(h)break;h=-1}else if(-2===a)d=!0,i++;else if(-1===a);else{g++;break}}if(b._contentTypeTextTrailing&&c===a.length&&(i=0),i){let f={type:c===a.length||d||i<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:g?h:e.start._bufferIndex+h,_index:e.start._index+g,line:e.end.line,column:e.end.column-i,offset:e.end.offset-i},end:{...e.end}};e.end={...f.start},e.start.offset===e.end.offset?Object.assign(e,f):(a.splice(c,0,["enter",f,b],["exit",f,b]),c+=2)}c++}return a}let aX={name:"thematicBreak",tokenize:function(a,b,c){let d,e=0;return function(f){var g;return a.enter("thematicBreak"),d=g=f,function f(g){return g===d?(a.enter("thematicBreakSequence"),function b(c){return c===d?(a.consume(c),e++,b):(a.exit("thematicBreakSequence"),aF(c)?aJ(a,f,"whitespace")(c):f(c))}(g)):e>=3&&(null===g||aD(g))?(a.exit("thematicBreak"),b(g)):c(g)}(g)}}},aY={continuation:{tokenize:function(a,b,c){let d=this;return d.containerState._closeFlow=void 0,a.check(aN,function(c){return d.containerState.furtherBlankLines=d.containerState.furtherBlankLines||d.containerState.initialBlankLine,aJ(a,b,"listItemIndent",d.containerState.size+1)(c)},function(c){return d.containerState.furtherBlankLines||!aF(c)?(d.containerState.furtherBlankLines=void 0,d.containerState.initialBlankLine=void 0,e(c)):(d.containerState.furtherBlankLines=void 0,d.containerState.initialBlankLine=void 0,a.attempt(a$,b,e)(c))});function e(e){return d.containerState._closeFlow=!0,d.interrupt=void 0,aJ(a,a.attempt(aY,b,c),"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(e)}}},exit:function(a){a.exit(this.containerState.type)},name:"list",tokenize:function(a,b,c){let d=this,e=d.events[d.events.length-1],f=e&&"linePrefix"===e[1].type?e[2].sliceSerialize(e[1],!0).length:0,g=0;return function(b){let e=d.containerState.type||(42===b||43===b||45===b?"listUnordered":"listOrdered");if("listUnordered"===e?!d.containerState.marker||b===d.containerState.marker:aA(b)){if(d.containerState.type||(d.containerState.type=e,a.enter(e,{_container:!0})),"listUnordered"===e)return a.enter("listItemPrefix"),42===b||45===b?a.check(aX,c,h)(b):h(b);if(!d.interrupt||49===b)return a.enter("listItemPrefix"),a.enter("listItemValue"),function b(e){return aA(e)&&++g<10?(a.consume(e),b):(!d.interrupt||g<2)&&(d.containerState.marker?e===d.containerState.marker:41===e||46===e)?(a.exit("listItemValue"),h(e)):c(e)}(b)}return c(b)};function h(b){return a.enter("listItemMarker"),a.consume(b),a.exit("listItemMarker"),d.containerState.marker=d.containerState.marker||b,a.check(aN,d.interrupt?c:i,a.attempt(aZ,k,j))}function i(a){return d.containerState.initialBlankLine=!0,f++,k(a)}function j(b){return aF(b)?(a.enter("listItemPrefixWhitespace"),a.consume(b),a.exit("listItemPrefixWhitespace"),k):c(b)}function k(c){return d.containerState.size=f+d.sliceSerialize(a.exit("listItemPrefix"),!0).length,b(c)}}},aZ={partial:!0,tokenize:function(a,b,c){let d=this;return aJ(a,function(a){let e=d.events[d.events.length-1];return!aF(a)&&e&&"listItemPrefixWhitespace"===e[1].type?b(a):c(a)},"listItemPrefixWhitespace",d.parser.constructs.disable.null.includes("codeIndented")?void 0:5)}},a$={partial:!0,tokenize:function(a,b,c){let d=this;return aJ(a,function(a){let e=d.events[d.events.length-1];return e&&"listItemIndent"===e[1].type&&e[2].sliceSerialize(e[1],!0).length===d.containerState.size?b(a):c(a)},"listItemIndent",d.containerState.size+1)}},a_={continuation:{tokenize:function(a,b,c){let d=this;return function(b){return aF(b)?aJ(a,e,"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(b):e(b)};function e(d){return a.attempt(a_,b,c)(d)}}},exit:function(a){a.exit("blockQuote")},name:"blockQuote",tokenize:function(a,b,c){let d=this;return function(b){if(62===b){let c=d.containerState;return c.open||(a.enter("blockQuote",{_container:!0}),c.open=!0),a.enter("blockQuotePrefix"),a.enter("blockQuoteMarker"),a.consume(b),a.exit("blockQuoteMarker"),e}return c(b)};function e(c){return aF(c)?(a.enter("blockQuotePrefixWhitespace"),a.consume(c),a.exit("blockQuotePrefixWhitespace"),a.exit("blockQuotePrefix"),b):(a.exit("blockQuotePrefix"),b(c))}}};function a0(a,b,c,d,e,f,g,h,i){let j=i||1/0,k=0;return function(b){return 60===b?(a.enter(d),a.enter(e),a.enter(f),a.consume(b),a.exit(f),l):null===b||32===b||41===b||az(b)?c(b):(a.enter(d),a.enter(g),a.enter(h),a.enter("chunkString",{contentType:"string"}),o(b))};function l(c){return 62===c?(a.enter(f),a.consume(c),a.exit(f),a.exit(e),a.exit(d),b):(a.enter(h),a.enter("chunkString",{contentType:"string"}),m(c))}function m(b){return 62===b?(a.exit("chunkString"),a.exit(h),l(b)):null===b||60===b||aD(b)?c(b):(a.consume(b),92===b?n:m)}function n(b){return 60===b||62===b||92===b?(a.consume(b),m):m(b)}function o(e){return!k&&(null===e||41===e||aE(e))?(a.exit("chunkString"),a.exit(h),a.exit(g),a.exit(d),b(e)):k<j&&40===e?(a.consume(e),k++,o):41===e?(a.consume(e),k--,o):null===e||32===e||40===e||az(e)?c(e):(a.consume(e),92===e?p:o)}function p(b){return 40===b||41===b||92===b?(a.consume(b),o):o(b)}}function a1(a,b,c,d,e,f){let g,h=this,i=0;return function(b){return a.enter(d),a.enter(e),a.consume(b),a.exit(e),a.enter(f),j};function j(l){return i>999||null===l||91===l||93===l&&!g||94===l&&!i&&"_hiddenFootnoteSupport"in h.parser.constructs?c(l):93===l?(a.exit(f),a.enter(e),a.consume(l),a.exit(e),a.exit(d),b):aD(l)?(a.enter("lineEnding"),a.consume(l),a.exit("lineEnding"),j):(a.enter("chunkString",{contentType:"string"}),k(l))}function k(b){return null===b||91===b||93===b||aD(b)||i++>999?(a.exit("chunkString"),j(b)):(a.consume(b),g||(g=!aF(b)),92===b?l:k)}function l(b){return 91===b||92===b||93===b?(a.consume(b),i++,k):k(b)}}function a2(a,b,c,d,e,f){let g;return function(b){return 34===b||39===b||40===b?(a.enter(d),a.enter(e),a.consume(b),a.exit(e),g=40===b?41:b,h):c(b)};function h(c){return c===g?(a.enter(e),a.consume(c),a.exit(e),a.exit(d),b):(a.enter(f),i(c))}function i(b){return b===g?(a.exit(f),h(g)):null===b?c(b):aD(b)?(a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),aJ(a,i,"linePrefix")):(a.enter("chunkString",{contentType:"string"}),j(b))}function j(b){return b===g||null===b||aD(b)?(a.exit("chunkString"),i(b)):(a.consume(b),92===b?k:j)}function k(b){return b===g||92===b?(a.consume(b),j):j(b)}}function a3(a,b){let c;return function d(e){return aD(e)?(a.enter("lineEnding"),a.consume(e),a.exit("lineEnding"),c=!0,d):aF(e)?aJ(a,d,c?"linePrefix":"lineSuffix")(e):b(e)}}function a4(a){return a.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}let a5={partial:!0,tokenize:function(a,b,c){return function(b){return aE(b)?a3(a,d)(b):c(b)};function d(b){return a2(a,e,c,"definitionTitle","definitionTitleMarker","definitionTitleString")(b)}function e(b){return aF(b)?aJ(a,f,"whitespace")(b):f(b)}function f(a){return null===a||aD(a)?b(a):c(a)}}},a6={name:"codeIndented",tokenize:function(a,b,c){let d=this;return function(b){return a.enter("codeIndented"),aJ(a,e,"linePrefix",5)(b)};function e(b){let e=d.events[d.events.length-1];return e&&"linePrefix"===e[1].type&&e[2].sliceSerialize(e[1],!0).length>=4?function b(c){return null===c?f(c):aD(c)?a.attempt(a7,b,f)(c):(a.enter("codeFlowValue"),function c(d){return null===d||aD(d)?(a.exit("codeFlowValue"),b(d)):(a.consume(d),c)}(c))}(b):c(b)}function f(c){return a.exit("codeIndented"),b(c)}}},a7={partial:!0,tokenize:function(a,b,c){let d=this;return e;function e(b){return d.parser.lazy[d.now().line]?c(b):aD(b)?(a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),e):aJ(a,f,"linePrefix",5)(b)}function f(a){let f=d.events[d.events.length-1];return f&&"linePrefix"===f[1].type&&f[2].sliceSerialize(f[1],!0).length>=4?b(a):aD(a)?e(a):c(a)}}},a8={name:"setextUnderline",resolveTo:function(a,b){let c,d,e,f=a.length;for(;f--;)if("enter"===a[f][0]){if("content"===a[f][1].type){c=f;break}"paragraph"===a[f][1].type&&(d=f)}else"content"===a[f][1].type&&a.splice(f,1),e||"definition"!==a[f][1].type||(e=f);let g={type:"setextHeading",start:{...a[c][1].start},end:{...a[a.length-1][1].end}};return a[d][1].type="setextHeadingText",e?(a.splice(d,0,["enter",g,b]),a.splice(e+1,0,["exit",a[c][1],b]),a[c][1].end={...a[e][1].end}):a[c][1]=g,a.push(["exit",g,b]),a},tokenize:function(a,b,c){let d,e=this;return function(b){var g;let h,i=e.events.length;for(;i--;)if("lineEnding"!==e.events[i][1].type&&"linePrefix"!==e.events[i][1].type&&"content"!==e.events[i][1].type){h="paragraph"===e.events[i][1].type;break}return!e.parser.lazy[e.now().line]&&(e.interrupt||h)?(a.enter("setextHeadingLine"),d=b,g=b,a.enter("setextHeadingLineSequence"),function b(c){return c===d?(a.consume(c),b):(a.exit("setextHeadingLineSequence"),aF(c)?aJ(a,f,"lineSuffix")(c):f(c))}(g)):c(b)};function f(d){return null===d||aD(d)?(a.exit("setextHeadingLine"),b(d)):c(d)}}},a9=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],ba=["pre","script","style","textarea"],bb={partial:!0,tokenize:function(a,b,c){return function(d){return a.enter("lineEnding"),a.consume(d),a.exit("lineEnding"),a.attempt(aN,b,c)}}},bc={partial:!0,tokenize:function(a,b,c){let d=this;return function(b){return aD(b)?(a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),e):c(b)};function e(a){return d.parser.lazy[d.now().line]?c(a):b(a)}}},bd={partial:!0,tokenize:function(a,b,c){let d=this;return function(b){return null===b?c(b):(a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),e)};function e(a){return d.parser.lazy[d.now().line]?c(a):b(a)}}},be={concrete:!0,name:"codeFenced",tokenize:function(a,b,c){let d,e=this,f={partial:!0,tokenize:function(a,b,c){let f=0;return function(b){return a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),g};function g(b){return a.enter("codeFencedFence"),aF(b)?aJ(a,i,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(b):i(b)}function i(b){return b===d?(a.enter("codeFencedFenceSequence"),function b(e){return e===d?(f++,a.consume(e),b):f>=h?(a.exit("codeFencedFenceSequence"),aF(e)?aJ(a,j,"whitespace")(e):j(e)):c(e)}(b)):c(b)}function j(d){return null===d||aD(d)?(a.exit("codeFencedFence"),b(d)):c(d)}}},g=0,h=0;return function(b){var f=b;let j=e.events[e.events.length-1];return g=j&&"linePrefix"===j[1].type?j[2].sliceSerialize(j[1],!0).length:0,d=f,a.enter("codeFenced"),a.enter("codeFencedFence"),a.enter("codeFencedFenceSequence"),function b(e){return e===d?(h++,a.consume(e),b):h<3?c(e):(a.exit("codeFencedFenceSequence"),aF(e)?aJ(a,i,"whitespace")(e):i(e))}(f)};function i(f){return null===f||aD(f)?(a.exit("codeFencedFence"),e.interrupt?b(f):a.check(bd,k,o)(f)):(a.enter("codeFencedFenceInfo"),a.enter("chunkString",{contentType:"string"}),function b(e){return null===e||aD(e)?(a.exit("chunkString"),a.exit("codeFencedFenceInfo"),i(e)):aF(e)?(a.exit("chunkString"),a.exit("codeFencedFenceInfo"),aJ(a,j,"whitespace")(e)):96===e&&e===d?c(e):(a.consume(e),b)}(f))}function j(b){return null===b||aD(b)?i(b):(a.enter("codeFencedFenceMeta"),a.enter("chunkString",{contentType:"string"}),function b(e){return null===e||aD(e)?(a.exit("chunkString"),a.exit("codeFencedFenceMeta"),i(e)):96===e&&e===d?c(e):(a.consume(e),b)}(b))}function k(b){return a.attempt(f,o,l)(b)}function l(b){return a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),m}function m(b){return g>0&&aF(b)?aJ(a,n,"linePrefix",g+1)(b):n(b)}function n(b){return null===b||aD(b)?a.check(bd,k,o)(b):(a.enter("codeFlowValue"),function b(c){return null===c||aD(c)?(a.exit("codeFlowValue"),n(c)):(a.consume(c),b)}(b))}function o(c){return a.exit("codeFenced"),b(c)}}},bf={AElig:"\xc6",AMP:"&",Aacute:"\xc1",Abreve:"Ă",Acirc:"\xc2",Acy:"А",Afr:"\uD835\uDD04",Agrave:"\xc0",Alpha:"Α",Amacr:"Ā",And:"⩓",Aogon:"Ą",Aopf:"\uD835\uDD38",ApplyFunction:"",Aring:"\xc5",Ascr:"\uD835\uDC9C",Assign:"≔",Atilde:"\xc3",Auml:"\xc4",Backslash:"∖",Barv:"⫧",Barwed:"⌆",Bcy:"Б",Because:"∵",Bernoullis:"ℬ",Beta:"Β",Bfr:"\uD835\uDD05",Bopf:"\uD835\uDD39",Breve:"˘",Bscr:"ℬ",Bumpeq:"≎",CHcy:"Ч",COPY:"\xa9",Cacute:"Ć",Cap:"⋒",CapitalDifferentialD:"ⅅ",Cayleys:"ℭ",Ccaron:"Č",Ccedil:"\xc7",Ccirc:"Ĉ",Cconint:"∰",Cdot:"Ċ",Cedilla:"\xb8",CenterDot:"\xb7",Cfr:"ℭ",Chi:"Χ",CircleDot:"⊙",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",Colon:"∷",Colone:"⩴",Congruent:"≡",Conint:"∯",ContourIntegral:"∮",Copf:"ℂ",Coproduct:"∐",CounterClockwiseContourIntegral:"∳",Cross:"⨯",Cscr:"\uD835\uDC9E",Cup:"⋓",CupCap:"≍",DD:"ⅅ",DDotrahd:"⤑",DJcy:"Ђ",DScy:"Ѕ",DZcy:"Џ",Dagger:"‡",Darr:"↡",Dashv:"⫤",Dcaron:"Ď",Dcy:"Д",Del:"∇",Delta:"Δ",Dfr:"\uD835\uDD07",DiacriticalAcute:"\xb4",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",Diamond:"⋄",DifferentialD:"ⅆ",Dopf:"\uD835\uDD3B",Dot:"\xa8",DotDot:"⃜",DotEqual:"≐",DoubleContourIntegral:"∯",DoubleDot:"\xa8",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",Downarrow:"⇓",Dscr:"\uD835\uDC9F",Dstrok:"Đ",ENG:"Ŋ",ETH:"\xd0",Eacute:"\xc9",Ecaron:"Ě",Ecirc:"\xca",Ecy:"Э",Edot:"Ė",Efr:"\uD835\uDD08",Egrave:"\xc8",Element:"∈",Emacr:"Ē",EmptySmallSquare:"◻",EmptyVerySmallSquare:"▫",Eogon:"Ę",Eopf:"\uD835\uDD3C",Epsilon:"Ε",Equal:"⩵",EqualTilde:"≂",Equilibrium:"⇌",Escr:"ℰ",Esim:"⩳",Eta:"Η",Euml:"\xcb",Exists:"∃",ExponentialE:"ⅇ",Fcy:"Ф",Ffr:"\uD835\uDD09",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",Fopf:"\uD835\uDD3D",ForAll:"∀",Fouriertrf:"ℱ",Fscr:"ℱ",GJcy:"Ѓ",GT:">",Gamma:"Γ",Gammad:"Ϝ",Gbreve:"Ğ",Gcedil:"Ģ",Gcirc:"Ĝ",Gcy:"Г",Gdot:"Ġ",Gfr:"\uD835\uDD0A",Gg:"⋙",Gopf:"\uD835\uDD3E",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"\uD835\uDCA2",Gt:"≫",HARDcy:"Ъ",Hacek:"ˇ",Hat:"^",Hcirc:"Ĥ",Hfr:"ℌ",HilbertSpace:"ℋ",Hopf:"ℍ",HorizontalLine:"─",Hscr:"ℋ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",IEcy:"Е",IJlig:"IJ",IOcy:"Ё",Iacute:"\xcd",Icirc:"\xce",Icy:"И",Idot:"İ",Ifr:"ℑ",Igrave:"\xcc",Im:"ℑ",Imacr:"Ī",ImaginaryI:"ⅈ",Implies:"⇒",Int:"∬",Integral:"∫",Intersection:"⋂",InvisibleComma:"",InvisibleTimes:"",Iogon:"Į",Iopf:"\uD835\uDD40",Iota:"Ι",Iscr:"ℐ",Itilde:"Ĩ",Iukcy:"І",Iuml:"\xcf",Jcirc:"Ĵ",Jcy:"Й",Jfr:"\uD835\uDD0D",Jopf:"\uD835\uDD41",Jscr:"\uD835\uDCA5",Jsercy:"Ј",Jukcy:"Є",KHcy:"Х",KJcy:"Ќ",Kappa:"Κ",Kcedil:"Ķ",Kcy:"К",Kfr:"\uD835\uDD0E",Kopf:"\uD835\uDD42",Kscr:"\uD835\uDCA6",LJcy:"Љ",LT:"<",Lacute:"Ĺ",Lambda:"Λ",Lang:"⟪",Laplacetrf:"ℒ",Larr:"↞",Lcaron:"Ľ",Lcedil:"Ļ",Lcy:"Л",LeftAngleBracket:"⟨",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",LeftRightArrow:"↔",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",Leftarrow:"⇐",Leftrightarrow:"⇔",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",LessLess:"⪡",LessSlantEqual:"⩽",LessTilde:"≲",Lfr:"\uD835\uDD0F",Ll:"⋘",Lleftarrow:"⇚",Lmidot:"Ŀ",LongLeftArrow:"⟵",LongLeftRightArrow:"⟷",LongRightArrow:"⟶",Longleftarrow:"⟸",Longleftrightarrow:"⟺",Longrightarrow:"⟹",Lopf:"\uD835\uDD43",LowerLeftArrow:"↙",LowerRightArrow:"↘",Lscr:"ℒ",Lsh:"↰",Lstrok:"Ł",Lt:"≪",Map:"⤅",Mcy:"М",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"\uD835\uDD10",MinusPlus:"∓",Mopf:"\uD835\uDD44",Mscr:"ℳ",Mu:"Μ",NJcy:"Њ",Nacute:"Ń",Ncaron:"Ň",Ncedil:"Ņ",Ncy:"Н",NegativeMediumSpace:"",NegativeThickSpace:"",NegativeThinSpace:"",NegativeVeryThinSpace:"",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",Nfr:"\uD835\uDD11",NoBreak:"",NonBreakingSpace:"\xa0",Nopf:"ℕ",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",Nscr:"\uD835\uDCA9",Ntilde:"\xd1",Nu:"Ν",OElig:"Œ",Oacute:"\xd3",Ocirc:"\xd4",Ocy:"О",Odblac:"Ő",Ofr:"\uD835\uDD12",Ograve:"\xd2",Omacr:"Ō",Omega:"Ω",Omicron:"Ο",Oopf:"\uD835\uDD46",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",Or:"⩔",Oscr:"\uD835\uDCAA",Oslash:"\xd8",Otilde:"\xd5",Otimes:"⨷",Ouml:"\xd6",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",PartialD:"∂",Pcy:"П",Pfr:"\uD835\uDD13",Phi:"Φ",Pi:"Π",PlusMinus:"\xb1",Poincareplane:"ℌ",Popf:"ℙ",Pr:"⪻",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",Prime:"″",Product:"∏",Proportion:"∷",Proportional:"∝",Pscr:"\uD835\uDCAB",Psi:"Ψ",QUOT:'"',Qfr:"\uD835\uDD14",Qopf:"ℚ",Qscr:"\uD835\uDCAC",RBarr:"⤐",REG:"\xae",Racute:"Ŕ",Rang:"⟫",Rarr:"↠",Rarrtl:"⤖",Rcaron:"Ř",Rcedil:"Ŗ",Rcy:"Р",Re:"ℜ",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",Rfr:"ℜ",Rho:"Ρ",RightAngleBracket:"⟩",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",Rightarrow:"⇒",Ropf:"ℝ",RoundImplies:"⥰",Rrightarrow:"⇛",Rscr:"ℛ",Rsh:"↱",RuleDelayed:"⧴",SHCHcy:"Щ",SHcy:"Ш",SOFTcy:"Ь",Sacute:"Ś",Sc:"⪼",Scaron:"Š",Scedil:"Ş",Scirc:"Ŝ",Scy:"С",Sfr:"\uD835\uDD16",ShortDownArrow:"↓",ShortLeftArrow:"←",ShortRightArrow:"→",ShortUpArrow:"↑",Sigma:"Σ",SmallCircle:"∘",Sopf:"\uD835\uDD4A",Sqrt:"√",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",Sscr:"\uD835\uDCAE",Star:"⋆",Sub:"⋐",Subset:"⋐",SubsetEqual:"⊆",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",SuchThat:"∋",Sum:"∑",Sup:"⋑",Superset:"⊃",SupersetEqual:"⊇",Supset:"⋑",THORN:"\xde",TRADE:"™",TSHcy:"Ћ",TScy:"Ц",Tab:" ",Tau:"Τ",Tcaron:"Ť",Tcedil:"Ţ",Tcy:"Т",Tfr:"\uD835\uDD17",Therefore:"∴",Theta:"Θ",ThickSpace:" ",ThinSpace:" ",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",Topf:"\uD835\uDD4B",TripleDot:"⃛",Tscr:"\uD835\uDCAF",Tstrok:"Ŧ",Uacute:"\xda",Uarr:"↟",Uarrocir:"⥉",Ubrcy:"Ў",Ubreve:"Ŭ",Ucirc:"\xdb",Ucy:"У",Udblac:"Ű",Ufr:"\uD835\uDD18",Ugrave:"\xd9",Umacr:"Ū",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",Uopf:"\uD835\uDD4C",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",UpEquilibrium:"⥮",UpTee:"⊥",UpTeeArrow:"↥",Uparrow:"⇑",Updownarrow:"⇕",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",Upsilon:"Υ",Uring:"Ů",Uscr:"\uD835\uDCB0",Utilde:"Ũ",Uuml:"\xdc",VDash:"⊫",Vbar:"⫫",Vcy:"В",Vdash:"⊩",Vdashl:"⫦",Vee:"⋁",Verbar:"‖",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"\uD835\uDD19",Vopf:"\uD835\uDD4D",Vscr:"\uD835\uDCB1",Vvdash:"⊪",Wcirc:"Ŵ",Wedge:"⋀",Wfr:"\uD835\uDD1A",Wopf:"\uD835\uDD4E",Wscr:"\uD835\uDCB2",Xfr:"\uD835\uDD1B",Xi:"Ξ",Xopf:"\uD835\uDD4F",Xscr:"\uD835\uDCB3",YAcy:"Я",YIcy:"Ї",YUcy:"Ю",Yacute:"\xdd",Ycirc:"Ŷ",Ycy:"Ы",Yfr:"\uD835\uDD1C",Yopf:"\uD835\uDD50",Yscr:"\uD835\uDCB4",Yuml:"Ÿ",ZHcy:"Ж",Zacute:"Ź",Zcaron:"Ž",Zcy:"З",Zdot:"Ż",ZeroWidthSpace:"",Zeta:"Ζ",Zfr:"ℨ",Zopf:"ℤ",Zscr:"\uD835\uDCB5",aacute:"\xe1",abreve:"ă",ac:"∾",acE:"∾̳",acd:"∿",acirc:"\xe2",acute:"\xb4",acy:"а",aelig:"\xe6",af:"",afr:"\uD835\uDD1E",agrave:"\xe0",alefsym:"ℵ",aleph:"ℵ",alpha:"α",amacr:"ā",amalg:"⨿",amp:"&",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"\xc5",angzarr:"⍼",aogon:"ą",aopf:"\uD835\uDD52",ap:"≈",apE:"⩰",apacir:"⩯",ape:"≊",apid:"≋",apos:"'",approx:"≈",approxeq:"≊",aring:"\xe5",ascr:"\uD835\uDCB6",ast:"*",asymp:"≈",asympeq:"≍",atilde:"\xe3",auml:"\xe4",awconint:"∳",awint:"⨑",bNot:"⫭",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",barvee:"⊽",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",beta:"β",beth:"ℶ",between:"≬",bfr:"\uD835\uDD1F",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bopf:"\uD835\uDD53",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxDL:"╗",boxDR:"╔",boxDl:"╖",boxDr:"╓",boxH:"═",boxHD:"╦",boxHU:"╩",boxHd:"╤",boxHu:"╧",boxUL:"╝",boxUR:"╚",boxUl:"╜",boxUr:"╙",boxV:"║",boxVH:"╬",boxVL:"╣",boxVR:"╠",boxVh:"╫",boxVl:"╢",boxVr:"╟",boxbox:"⧉",boxdL:"╕",boxdR:"╒",boxdl:"┐",boxdr:"┌",boxh:"─",boxhD:"╥",boxhU:"╨",boxhd:"┬",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxuL:"╛",boxuR:"╘",boxul:"┘",boxur:"└",boxv:"│",boxvH:"╪",boxvL:"╡",boxvR:"╞",boxvh:"┼",boxvl:"┤",boxvr:"├",bprime:"‵",breve:"˘",brvbar:"\xa6",bscr:"\uD835\uDCB7",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",bumpeq:"≏",cacute:"ć",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",caps:"∩︀",caret:"⁁",caron:"ˇ",ccaps:"⩍",ccaron:"č",ccedil:"\xe7",ccirc:"ĉ",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",cedil:"\xb8",cemptyv:"⦲",cent:"\xa2",centerdot:"\xb7",cfr:"\uD835\uDD20",chcy:"ч",check:"✓",checkmark:"✓",chi:"χ",cir:"○",cirE:"⧃",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledR:"\xae",circledS:"Ⓢ",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",clubs:"♣",clubsuit:"♣",colon:":",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",conint:"∮",copf:"\uD835\uDD54",coprod:"∐",copy:"\xa9",copysr:"℗",crarr:"↵",cross:"✗",cscr:"\uD835\uDCB8",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",cupbrcap:"⩈",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"\xa4",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dArr:"⇓",dHar:"⥥",dagger:"†",daleth:"ℸ",darr:"↓",dash:"‐",dashv:"⊣",dbkarow:"⤏",dblac:"˝",dcaron:"ď",dcy:"д",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",ddotseq:"⩷",deg:"\xb0",delta:"δ",demptyv:"⦱",dfisht:"⥿",dfr:"\uD835\uDD21",dharl:"⇃",dharr:"⇂",diam:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"\xa8",digamma:"ϝ",disin:"⋲",div:"\xf7",divide:"\xf7",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"\uD835\uDD55",dot:"˙",doteq:"≐",doteqdot:"≑",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",downarrow:"↓",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"\uD835\uDCB9",dscy:"ѕ",dsol:"⧶",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",dzigrarr:"⟿",eDDot:"⩷",eDot:"≑",eacute:"\xe9",easter:"⩮",ecaron:"ě",ecir:"≖",ecirc:"\xea",ecolon:"≕",ecy:"э",edot:"ė",ee:"ⅇ",efDot:"≒",efr:"\uD835\uDD22",eg:"⪚",egrave:"\xe8",egs:"⪖",egsdot:"⪘",el:"⪙",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",empty:"∅",emptyset:"∅",emptyv:"∅",emsp13:" ",emsp14:" ",emsp:" ",eng:"ŋ",ensp:" ",eogon:"ę",eopf:"\uD835\uDD56",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",equals:"=",equest:"≟",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erDot:"≓",erarr:"⥱",escr:"ℯ",esdot:"≐",esim:"≂",eta:"η",eth:"\xf0",euml:"\xeb",euro:"€",excl:"!",exist:"∃",expectation:"ℰ",exponentiale:"ⅇ",fallingdotseq:"≒",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"\uD835\uDD23",filig:"fi",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"\uD835\uDD57",forall:"∀",fork:"⋔",forkv:"⫙",fpartint:"⨍",frac12:"\xbd",frac13:"⅓",frac14:"\xbc",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"\xbe",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"\uD835\uDCBB",gE:"≧",gEl:"⪌",gacute:"ǵ",gamma:"γ",gammad:"ϝ",gap:"⪆",gbreve:"ğ",gcirc:"ĝ",gcy:"г",gdot:"ġ",ge:"≥",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"\uD835\uDD24",gg:"≫",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",gl:"≷",glE:"⪒",gla:"⪥",glj:"⪤",gnE:"≩",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"\uD835\uDD58",grave:"`",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",hArr:"⇔",hairsp:" ",half:"\xbd",hamilt:"ℋ",hardcy:"ъ",harr:"↔",harrcir:"⥈",harrw:"↭",hbar:"ℏ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"\uD835\uDD25",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"\uD835\uDD59",horbar:"―",hscr:"\uD835\uDCBD",hslash:"ℏ",hstrok:"ħ",hybull:"⁃",hyphen:"‐",iacute:"\xed",ic:"",icirc:"\xee",icy:"и",iecy:"е",iexcl:"\xa1",iff:"⇔",ifr:"\uD835\uDD26",igrave:"\xec",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",imacr:"ī",image:"ℑ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",intcal:"⊺",integers:"ℤ",intercal:"⊺",intlarhk:"⨗",intprod:"⨼",iocy:"ё",iogon:"į",iopf:"\uD835\uDD5A",iota:"ι",iprod:"⨼",iquest:"\xbf",iscr:"\uD835\uDCBE",isin:"∈",isinE:"⋹",isindot:"⋵",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"",itilde:"ĩ",iukcy:"і",iuml:"\xef",jcirc:"ĵ",jcy:"й",jfr:"\uD835\uDD27",jmath:"ȷ",jopf:"\uD835\uDD5B",jscr:"\uD835\uDCBF",jsercy:"ј",jukcy:"є",kappa:"κ",kappav:"ϰ",kcedil:"ķ",kcy:"к",kfr:"\uD835\uDD28",kgreen:"ĸ",khcy:"х",kjcy:"ќ",kopf:"\uD835\uDD5C",kscr:"\uD835\uDCC0",lAarr:"⇚",lArr:"⇐",lAtail:"⤛",lBarr:"⤎",lE:"≦",lEg:"⪋",lHar:"⥢",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",laquo:"\xab",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",late:"⪭",lates:"⪭︀",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",lcedil:"ļ",lceil:"⌈",lcub:"{",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",leftarrow:"←",leftarrowtail:"↢",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",leftthreetimes:"⋋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",lessgtr:"≶",lesssim:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"\uD835\uDD29",lg:"≶",lgE:"⪑",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",ll:"≪",llarr:"⇇",llcorner:"⌞",llhard:"⥫",lltri:"◺",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnE:"≨",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",longleftrightarrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"\uD835\uDD5D",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"",lrtri:"⊿",lsaquo:"‹",lscr:"\uD835\uDCC1",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltrPar:"⦖",ltri:"◃",ltrie:"⊴",ltrif:"◂",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",mDDot:"∺",macr:"\xaf",male:"♂",malt:"✠",maltese:"✠",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",mdash:"—",measuredangle:"∡",mfr:"\uD835\uDD2A",mho:"℧",micro:"\xb5",mid:"∣",midast:"*",midcir:"⫰",middot:"\xb7",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"\uD835\uDD5E",mp:"∓",mscr:"\uD835\uDCC2",mstpos:"∾",mu:"μ",multimap:"⊸",mumap:"⊸",nGg:"⋙̸",nGt:"≫⃒",nGtv:"≫̸",nLeftarrow:"⇍",nLeftrightarrow:"⇎",nLl:"⋘̸",nLt:"≪⃒",nLtv:"≪̸",nRightarrow:"⇏",nVDash:"⊯",nVdash:"⊮",nabla:"∇",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:"\xa0",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",ndash:"–",ne:"≠",neArr:"⇗",nearhk:"⤤",nearr:"↗",nearrow:"↗",nedot:"≐̸",nequiv:"≢",nesear:"⤨",nesim:"≂̸",nexist:"∄",nexists:"∄",nfr:"\uD835\uDD2B",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",ngsim:"≵",ngt:"≯",ngtr:"≯",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",nlArr:"⇍",nlE:"≦̸",nlarr:"↚",nldr:"‥",nle:"≰",nleftarrow:"↚",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nlsim:"≴",nlt:"≮",nltri:"⋪",nltrie:"⋬",nmid:"∤",nopf:"\uD835\uDD5F",not:"\xac",notin:"∉",notinE:"⋹̸",notindot:"⋵̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"\uD835\uDCC3",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"\xf1",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",num:"#",numero:"№",numsp:" ",nvDash:"⊭",nvHarr:"⤄",nvap:"≍⃒",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwArr:"⇖",nwarhk:"⤣",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",oS:"Ⓢ",oacute:"\xf3",oast:"⊛",ocir:"⊚",ocirc:"\xf4",ocy:"о",odash:"⊝",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",ofcir:"⦿",ofr:"\uD835\uDD2C",ogon:"˛",ograve:"\xf2",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",omega:"ω",omicron:"ο",omid:"⦶",ominus:"⊖",oopf:"\uD835\uDD60",opar:"⦷",operp:"⦹",oplus:"⊕",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"\xaa",ordm:"\xba",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oscr:"ℴ",oslash:"\xf8",osol:"⊘",otilde:"\xf5",otimes:"⊗",otimesas:"⨶",ouml:"\xf6",ovbar:"⌽",par:"∥",para:"\xb6",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"\uD835\uDD2D",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",plusmn:"\xb1",plussim:"⨦",plustwo:"⨧",pm:"\xb1",pointint:"⨕",popf:"\uD835\uDD61",pound:"\xa3",pr:"≺",prE:"⪳",prap:"⪷",prcue:"≼",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",primes:"ℙ",prnE:"⪵",prnap:"⪹",prnsim:"⋨",prod:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"\uD835\uDCC5",psi:"ψ",puncsp:" ",qfr:"\uD835\uDD2E",qint:"⨌",qopf:"\uD835\uDD62",qprime:"⁗",qscr:"\uD835\uDCC6",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',rAarr:"⇛",rArr:"⇒",rAtail:"⤜",rBarr:"⤏",rHar:"⥤",race:"∽̱",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"\xbb",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",rarrw:"↝",ratail:"⤚",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",rcedil:"ŗ",rceil:"⌉",rcub:"}",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"\xae",rfisht:"⥽",rfloor:"⌋",rfr:"\uD835\uDD2F",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",rhov:"ϱ",rightarrow:"→",rightarrowtail:"↣",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",rightthreetimes:"⋌",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"\uD835\uDD63",roplus:"⨮",rotimes:"⨵",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",rsaquo:"›",rscr:"\uD835\uDCC7",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",ruluhar:"⥨",rx:"℞",sacute:"ś",sbquo:"‚",sc:"≻",scE:"⪴",scap:"⪸",scaron:"š",sccue:"≽",sce:"⪰",scedil:"ş",scirc:"ŝ",scnE:"⪶",scnap:"⪺",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",seArr:"⇘",searhk:"⤥",searr:"↘",searrow:"↘",sect:"\xa7",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"\uD835\uDD30",sfrown:"⌢",sharp:"♯",shchcy:"щ",shcy:"ш",shortmid:"∣",shortparallel:"∥",shy:"\xad",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"\uD835\uDD64",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",squarf:"▪",squf:"▪",srarr:"→",sscr:"\uD835\uDCC8",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"\xaf",sub:"⊂",subE:"⫅",subdot:"⪽",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",sum:"∑",sung:"♪",sup1:"\xb9",sup2:"\xb2",sup3:"\xb3",sup:"⊃",supE:"⫆",supdot:"⪾",supdsub:"⫘",supe:"⊇",supedot:"⫄",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swArr:"⇙",swarhk:"⤦",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"\xdf",target:"⌖",tau:"τ",tbrk:"⎴",tcaron:"ť",tcedil:"ţ",tcy:"т",tdot:"⃛",telrec:"⌕",tfr:"\uD835\uDD31",there4:"∴",therefore:"∴",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",thinsp:" ",thkap:"≈",thksim:"∼",thorn:"\xfe",tilde:"˜",times:"\xd7",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"\uD835\uDD65",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"\uD835\uDCC9",tscy:"ц",tshcy:"ћ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uArr:"⇑",uHar:"⥣",uacute:"\xfa",uarr:"↑",ubrcy:"ў",ubreve:"ŭ",ucirc:"\xfb",ucy:"у",udarr:"⇅",udblac:"ű",udhar:"⥮",ufisht:"⥾",ufr:"\uD835\uDD32",ugrave:"\xf9",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",uml:"\xa8",uogon:"ų",uopf:"\uD835\uDD66",uparrow:"↑",updownarrow:"↕",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",upsi:"υ",upsih:"ϒ",upsilon:"υ",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",urtri:"◹",uscr:"\uD835\uDCCA",utdot:"⋰",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"\xfc",uwangle:"⦧",vArr:"⇕",vBar:"⫨",vBarv:"⫩",vDash:"⊨",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vcy:"в",vdash:"⊢",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",vert:"|",vfr:"\uD835\uDD33",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"\uD835\uDD67",vprop:"∝",vrtri:"⊳",vscr:"\uD835\uDCCB",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",vzigzag:"⦚",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",wedgeq:"≙",weierp:"℘",wfr:"\uD835\uDD34",wopf:"\uD835\uDD68",wp:"℘",wr:"≀",wreath:"≀",wscr:"\uD835\uDCCC",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"\uD835\uDD35",xhArr:"⟺",xharr:"⟷",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"\uD835\uDD69",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",xscr:"\uD835\uDCCD",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"\xfd",yacy:"я",ycirc:"ŷ",ycy:"ы",yen:"\xa5",yfr:"\uD835\uDD36",yicy:"ї",yopf:"\uD835\uDD6A",yscr:"\uD835\uDCCE",yucy:"ю",yuml:"\xff",zacute:"ź",zcaron:"ž",zcy:"з",zdot:"ż",zeetrf:"ℨ",zeta:"ζ",zfr:"\uD835\uDD37",zhcy:"ж",zigrarr:"⇝",zopf:"\uD835\uDD6B",zscr:"\uD835\uDCCF",zwj:"",zwnj:""},bg={}.hasOwnProperty;function bh(a){return!!bg.call(bf,a)&&bf[a]}let bi={name:"characterReference",tokenize:function(a,b,c){let d,e,f=this,g=0;return function(b){return a.enter("characterReference"),a.enter("characterReferenceMarker"),a.consume(b),a.exit("characterReferenceMarker"),h};function h(b){return 35===b?(a.enter("characterReferenceMarkerNumeric"),a.consume(b),a.exit("characterReferenceMarkerNumeric"),i):(a.enter("characterReferenceValue"),d=31,e=ax,j(b))}function i(b){return 88===b||120===b?(a.enter("characterReferenceMarkerHexadecimal"),a.consume(b),a.exit("characterReferenceMarkerHexadecimal"),a.enter("characterReferenceValue"),d=6,e=aB,j):(a.enter("characterReferenceValue"),d=7,e=aA,j(b))}function j(h){if(59===h&&g){let d=a.exit("characterReferenceValue");return e!==ax||bh(f.sliceSerialize(d))?(a.enter("characterReferenceMarker"),a.consume(h),a.exit("characterReferenceMarker"),a.exit("characterReference"),b):c(h)}return e(h)&&g++<d?(a.consume(h),j):c(h)}}},bj={name:"characterEscape",tokenize:function(a,b,c){return function(b){return a.enter("characterEscape"),a.enter("escapeMarker"),a.consume(b),a.exit("escapeMarker"),d};function d(d){return aC(d)?(a.enter("characterEscapeValue"),a.consume(d),a.exit("characterEscapeValue"),a.exit("characterEscape"),b):c(d)}}},bk={name:"lineEnding",tokenize:function(a,b){return function(c){return a.enter("lineEnding"),a.consume(c),a.exit("lineEnding"),aJ(a,b,"linePrefix")}}};function bl(a,b,c){let d=[],e=-1;for(;++e<a.length;){let f=a[e].resolveAll;f&&!d.includes(f)&&(b=f(b,c),d.push(f))}return b}let bm={name:"labelEnd",resolveAll:function(a){let b=-1,c=[];for(;++b<a.length;){let d=a[b][1];if(c.push(a[b]),"labelImage"===d.type||"labelLink"===d.type||"labelEnd"===d.type){let a="labelImage"===d.type?4:2;d.type="data",b+=a}}return a.length!==c.length&&aq(a,0,a.length,c),a},resolveTo:function(a,b){let c,d,e,f,g=a.length,h=0;for(;g--;)if(c=a[g][1],d){if("link"===c.type||"labelLink"===c.type&&c._inactive)break;"enter"===a[g][0]&&"labelLink"===c.type&&(c._inactive=!0)}else if(e){if("enter"===a[g][0]&&("labelImage"===c.type||"labelLink"===c.type)&&!c._balanced&&(d=g,"labelLink"!==c.type)){h=2;break}}else"labelEnd"===c.type&&(e=g);let i={type:"labelLink"===a[d][1].type?"link":"image",start:{...a[d][1].start},end:{...a[a.length-1][1].end}},j={type:"label",start:{...a[d][1].start},end:{...a[e][1].end}},k={type:"labelText",start:{...a[d+h+2][1].end},end:{...a[e-2][1].start}};return f=ar(f=[["enter",i,b],["enter",j,b]],a.slice(d+1,d+h+3)),f=ar(f,[["enter",k,b]]),f=ar(f,bl(b.parser.constructs.insideSpan.null,a.slice(d+h+4,e-3),b)),f=ar(f,[["exit",k,b],a[e-2],a[e-1],["exit",j,b]]),f=ar(f,a.slice(e+1)),f=ar(f,[["exit",i,b]]),aq(a,d,a.length,f),a},tokenize:function(a,b,c){let d,e,f=this,g=f.events.length;for(;g--;)if(("labelImage"===f.events[g][1].type||"labelLink"===f.events[g][1].type)&&!f.events[g][1]._balanced){d=f.events[g][1];break}return function(b){return d?d._inactive?k(b):(e=f.parser.defined.includes(a4(f.sliceSerialize({start:d.end,end:f.now()}))),a.enter("labelEnd"),a.enter("labelMarker"),a.consume(b),a.exit("labelMarker"),a.exit("labelEnd"),h):c(b)};function h(b){return 40===b?a.attempt(bn,j,e?j:k)(b):91===b?a.attempt(bo,j,e?i:k)(b):e?j(b):k(b)}function i(b){return a.attempt(bp,j,k)(b)}function j(a){return b(a)}function k(a){return d._balanced=!0,c(a)}}},bn={tokenize:function(a,b,c){return function(b){return a.enter("resource"),a.enter("resourceMarker"),a.consume(b),a.exit("resourceMarker"),d};function d(b){return aE(b)?a3(a,e)(b):e(b)}function e(b){return 41===b?j(b):a0(a,f,g,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(b)}function f(b){return aE(b)?a3(a,h)(b):j(b)}function g(a){return c(a)}function h(b){return 34===b||39===b||40===b?a2(a,i,c,"resourceTitle","resourceTitleMarker","resourceTitleString")(b):j(b)}function i(b){return aE(b)?a3(a,j)(b):j(b)}function j(d){return 41===d?(a.enter("resourceMarker"),a.consume(d),a.exit("resourceMarker"),a.exit("resource"),b):c(d)}}},bo={tokenize:function(a,b,c){let d=this;return function(b){return a1.call(d,a,e,f,"reference","referenceMarker","referenceString")(b)};function e(a){return d.parser.defined.includes(a4(d.sliceSerialize(d.events[d.events.length-1][1]).slice(1,-1)))?b(a):c(a)}function f(a){return c(a)}}},bp={tokenize:function(a,b,c){return function(b){return a.enter("reference"),a.enter("referenceMarker"),a.consume(b),a.exit("referenceMarker"),d};function d(d){return 93===d?(a.enter("referenceMarker"),a.consume(d),a.exit("referenceMarker"),a.exit("reference"),b):c(d)}}},bq={name:"labelStartImage",resolveAll:bm.resolveAll,tokenize:function(a,b,c){let d=this;return function(b){return a.enter("labelImage"),a.enter("labelImageMarker"),a.consume(b),a.exit("labelImageMarker"),e};function e(b){return 91===b?(a.enter("labelMarker"),a.consume(b),a.exit("labelMarker"),a.exit("labelImage"),f):c(b)}function f(a){return 94===a&&"_hiddenFootnoteSupport"in d.parser.constructs?c(a):b(a)}}};function br(a){return null===a||aE(a)||aH(a)?1:aG(a)?2:void 0}let bs={name:"attention",resolveAll:function(a,b){let c,d,e,f,g,h,i,j,k=-1;for(;++k<a.length;)if("enter"===a[k][0]&&"attentionSequence"===a[k][1].type&&a[k][1]._close){for(c=k;c--;)if("exit"===a[c][0]&&"attentionSequence"===a[c][1].type&&a[c][1]._open&&b.sliceSerialize(a[c][1]).charCodeAt(0)===b.sliceSerialize(a[k][1]).charCodeAt(0)){if((a[c][1]._close||a[k][1]._open)&&(a[k][1].end.offset-a[k][1].start.offset)%3&&!((a[c][1].end.offset-a[c][1].start.offset+a[k][1].end.offset-a[k][1].start.offset)%3))continue;h=a[c][1].end.offset-a[c][1].start.offset>1&&a[k][1].end.offset-a[k][1].start.offset>1?2:1;let l={...a[c][1].end},m={...a[k][1].start};bt(l,-h),bt(m,h),f={type:h>1?"strongSequence":"emphasisSequence",start:l,end:{...a[c][1].end}},g={type:h>1?"strongSequence":"emphasisSequence",start:{...a[k][1].start},end:m},e={type:h>1?"strongText":"emphasisText",start:{...a[c][1].end},end:{...a[k][1].start}},d={type:h>1?"strong":"emphasis",start:{...f.start},end:{...g.end}},a[c][1].end={...f.start},a[k][1].start={...g.end},i=[],a[c][1].end.offset-a[c][1].start.offset&&(i=ar(i,[["enter",a[c][1],b],["exit",a[c][1],b]])),i=ar(i,[["enter",d,b],["enter",f,b],["exit",f,b],["enter",e,b]]),i=ar(i,bl(b.parser.constructs.insideSpan.null,a.slice(c+1,k),b)),i=ar(i,[["exit",e,b],["enter",g,b],["exit",g,b],["exit",d,b]]),a[k][1].end.offset-a[k][1].start.offset?(j=2,i=ar(i,[["enter",a[k][1],b],["exit",a[k][1],b]])):j=0,aq(a,c-1,k-c+3,i),k=c+i.length-j-2;break}}for(k=-1;++k<a.length;)"attentionSequence"===a[k][1].type&&(a[k][1].type="data");return a},tokenize:function(a,b){let c,d=this.parser.constructs.attentionMarkers.null,e=this.previous,f=br(e);return function(g){return c=g,a.enter("attentionSequence"),function g(h){if(h===c)return a.consume(h),g;let i=a.exit("attentionSequence"),j=br(h),k=!j||2===j&&f||d.includes(h),l=!f||2===f&&j||d.includes(e);return i._open=!!(42===c?k:k&&(f||!l)),i._close=!!(42===c?l:l&&(j||!k)),b(h)}(g)}}};function bt(a,b){a.column+=b,a.offset+=b,a._bufferIndex+=b}let bu={name:"labelStartLink",resolveAll:bm.resolveAll,tokenize:function(a,b,c){let d=this;return function(b){return a.enter("labelLink"),a.enter("labelMarker"),a.consume(b),a.exit("labelMarker"),a.exit("labelLink"),e};function e(a){return 94===a&&"_hiddenFootnoteSupport"in d.parser.constructs?c(a):b(a)}}},bv={42:aY,43:aY,45:aY,48:aY,49:aY,50:aY,51:aY,52:aY,53:aY,54:aY,55:aY,56:aY,57:aY,62:a_},bw={91:{name:"definition",tokenize:function(a,b,c){let d,e=this;return function(b){var d;return a.enter("definition"),d=b,a1.call(e,a,f,c,"definitionLabel","definitionLabelMarker","definitionLabelString")(d)};function f(b){return(d=a4(e.sliceSerialize(e.events[e.events.length-1][1]).slice(1,-1)),58===b)?(a.enter("definitionMarker"),a.consume(b),a.exit("definitionMarker"),g):c(b)}function g(b){return aE(b)?a3(a,h)(b):h(b)}function h(b){return a0(a,i,c,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(b)}function i(b){return a.attempt(a5,j,j)(b)}function j(b){return aF(b)?aJ(a,k,"whitespace")(b):k(b)}function k(f){return null===f||aD(f)?(a.exit("definition"),e.parser.defined.push(d),b(f)):c(f)}}}},bx={[-2]:a6,[-1]:a6,32:a6},by={35:{name:"headingAtx",resolve:function(a,b){let c,d,e=a.length-2,f=3;return"whitespace"===a[3][1].type&&(f+=2),e-2>f&&"whitespace"===a[e][1].type&&(e-=2),"atxHeadingSequence"===a[e][1].type&&(f===e-1||e-4>f&&"whitespace"===a[e-2][1].type)&&(e-=f+1===e?2:4),e>f&&(c={type:"atxHeadingText",start:a[f][1].start,end:a[e][1].end},d={type:"chunkText",start:a[f][1].start,end:a[e][1].end,contentType:"text"},aq(a,f,e-f+1,[["enter",c,b],["enter",d,b],["exit",d,b],["exit",c,b]])),a},tokenize:function(a,b,c){let d=0;return function(e){var f;return a.enter("atxHeading"),f=e,a.enter("atxHeadingSequence"),function e(f){return 35===f&&d++<6?(a.consume(f),e):null===f||aE(f)?(a.exit("atxHeadingSequence"),function c(d){return 35===d?(a.enter("atxHeadingSequence"),function b(d){return 35===d?(a.consume(d),b):(a.exit("atxHeadingSequence"),c(d))}(d)):null===d||aD(d)?(a.exit("atxHeading"),b(d)):aF(d)?aJ(a,c,"whitespace")(d):(a.enter("atxHeadingText"),function b(d){return null===d||35===d||aE(d)?(a.exit("atxHeadingText"),c(d)):(a.consume(d),b)}(d))}(f)):c(f)}(f)}}},42:aX,45:[a8,aX],60:{concrete:!0,name:"htmlFlow",resolveTo:function(a){let b=a.length;for(;b--&&("enter"!==a[b][0]||"htmlFlow"!==a[b][1].type););return b>1&&"linePrefix"===a[b-2][1].type&&(a[b][1].start=a[b-2][1].start,a[b+1][1].start=a[b-2][1].start,a.splice(b-2,2)),a},tokenize:function(a,b,c){let d,e,f,g,h,i=this;return function(b){var c;return c=b,a.enter("htmlFlow"),a.enter("htmlFlowData"),a.consume(c),j};function j(g){return 33===g?(a.consume(g),k):47===g?(a.consume(g),e=!0,n):63===g?(a.consume(g),d=3,i.interrupt?b:G):aw(g)?(a.consume(g),f=String.fromCharCode(g),o):c(g)}function k(e){return 45===e?(a.consume(e),d=2,l):91===e?(a.consume(e),d=5,g=0,m):aw(e)?(a.consume(e),d=4,i.interrupt?b:G):c(e)}function l(d){return 45===d?(a.consume(d),i.interrupt?b:G):c(d)}function m(d){let e="CDATA[";return d===e.charCodeAt(g++)?(a.consume(d),g===e.length)?i.interrupt?b:y:m:c(d)}function n(b){return aw(b)?(a.consume(b),f=String.fromCharCode(b),o):c(b)}function o(g){if(null===g||47===g||62===g||aE(g)){let h=47===g,j=f.toLowerCase();return!h&&!e&&ba.includes(j)?(d=1,i.interrupt?b(g):y(g)):a9.includes(f.toLowerCase())?(d=6,h)?(a.consume(g),p):i.interrupt?b(g):y(g):(d=7,i.interrupt&&!i.parser.lazy[i.now().line]?c(g):e?function b(c){return aF(c)?(a.consume(c),b):w(c)}(g):q(g))}return 45===g||ax(g)?(a.consume(g),f+=String.fromCharCode(g),o):c(g)}function p(d){return 62===d?(a.consume(d),i.interrupt?b:y):c(d)}function q(b){return 47===b?(a.consume(b),w):58===b||95===b||aw(b)?(a.consume(b),r):aF(b)?(a.consume(b),q):w(b)}function r(b){return 45===b||46===b||58===b||95===b||ax(b)?(a.consume(b),r):s(b)}function s(b){return 61===b?(a.consume(b),t):aF(b)?(a.consume(b),s):q(b)}function t(b){return null===b||60===b||61===b||62===b||96===b?c(b):34===b||39===b?(a.consume(b),h=b,u):aF(b)?(a.consume(b),t):function b(c){return null===c||34===c||39===c||47===c||60===c||61===c||62===c||96===c||aE(c)?s(c):(a.consume(c),b)}(b)}function u(b){return b===h?(a.consume(b),h=null,v):null===b||aD(b)?c(b):(a.consume(b),u)}function v(a){return 47===a||62===a||aF(a)?q(a):c(a)}function w(b){return 62===b?(a.consume(b),x):c(b)}function x(b){return null===b||aD(b)?y(b):aF(b)?(a.consume(b),x):c(b)}function y(b){return 45===b&&2===d?(a.consume(b),C):60===b&&1===d?(a.consume(b),D):62===b&&4===d?(a.consume(b),H):63===b&&3===d?(a.consume(b),G):93===b&&5===d?(a.consume(b),F):aD(b)&&(6===d||7===d)?(a.exit("htmlFlowData"),a.check(bb,I,z)(b)):null===b||aD(b)?(a.exit("htmlFlowData"),z(b)):(a.consume(b),y)}function z(b){return a.check(bc,A,I)(b)}function A(b){return a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),B}function B(b){return null===b||aD(b)?z(b):(a.enter("htmlFlowData"),y(b))}function C(b){return 45===b?(a.consume(b),G):y(b)}function D(b){return 47===b?(a.consume(b),f="",E):y(b)}function E(b){if(62===b){let c=f.toLowerCase();return ba.includes(c)?(a.consume(b),H):y(b)}return aw(b)&&f.length<8?(a.consume(b),f+=String.fromCharCode(b),E):y(b)}function F(b){return 93===b?(a.consume(b),G):y(b)}function G(b){return 62===b?(a.consume(b),H):45===b&&2===d?(a.consume(b),G):y(b)}function H(b){return null===b||aD(b)?(a.exit("htmlFlowData"),I(b)):(a.consume(b),H)}function I(c){return a.exit("htmlFlow"),b(c)}}},61:a8,95:aX,96:be,126:be},bz={38:bi,92:bj},bA={[-5]:bk,[-4]:bk,[-3]:bk,33:bq,38:bi,42:bs,60:[{name:"autolink",tokenize:function(a,b,c){let d=0;return function(b){return a.enter("autolink"),a.enter("autolinkMarker"),a.consume(b),a.exit("autolinkMarker"),a.enter("autolinkProtocol"),e};function e(b){return aw(b)?(a.consume(b),f):64===b?c(b):h(b)}function f(b){return 43===b||45===b||46===b||ax(b)?(d=1,function b(c){return 58===c?(a.consume(c),d=0,g):(43===c||45===c||46===c||ax(c))&&d++<32?(a.consume(c),b):(d=0,h(c))}(b)):h(b)}function g(d){return 62===d?(a.exit("autolinkProtocol"),a.enter("autolinkMarker"),a.consume(d),a.exit("autolinkMarker"),a.exit("autolink"),b):null===d||32===d||60===d||az(d)?c(d):(a.consume(d),g)}function h(b){return 64===b?(a.consume(b),i):ay(b)?(a.consume(b),h):c(b)}function i(e){return ax(e)?function e(f){return 46===f?(a.consume(f),d=0,i):62===f?(a.exit("autolinkProtocol").type="autolinkEmail",a.enter("autolinkMarker"),a.consume(f),a.exit("autolinkMarker"),a.exit("autolink"),b):function b(f){if((45===f||ax(f))&&d++<63){let c=45===f?b:e;return a.consume(f),c}return c(f)}(f)}(e):c(e)}}},{name:"htmlText",tokenize:function(a,b,c){let d,e,f,g=this;return function(b){return a.enter("htmlText"),a.enter("htmlTextData"),a.consume(b),h};function h(b){return 33===b?(a.consume(b),i):47===b?(a.consume(b),u):63===b?(a.consume(b),s):aw(b)?(a.consume(b),w):c(b)}function i(b){return 45===b?(a.consume(b),j):91===b?(a.consume(b),e=0,n):aw(b)?(a.consume(b),r):c(b)}function j(b){return 45===b?(a.consume(b),m):c(b)}function k(b){return null===b?c(b):45===b?(a.consume(b),l):aD(b)?(f=k,E(b)):(a.consume(b),k)}function l(b){return 45===b?(a.consume(b),m):k(b)}function m(a){return 62===a?D(a):45===a?l(a):k(a)}function n(b){let d="CDATA[";return b===d.charCodeAt(e++)?(a.consume(b),e===d.length?o:n):c(b)}function o(b){return null===b?c(b):93===b?(a.consume(b),p):aD(b)?(f=o,E(b)):(a.consume(b),o)}function p(b){return 93===b?(a.consume(b),q):o(b)}function q(b){return 62===b?D(b):93===b?(a.consume(b),q):o(b)}function r(b){return null===b||62===b?D(b):aD(b)?(f=r,E(b)):(a.consume(b),r)}function s(b){return null===b?c(b):63===b?(a.consume(b),t):aD(b)?(f=s,E(b)):(a.consume(b),s)}function t(a){return 62===a?D(a):s(a)}function u(b){return aw(b)?(a.consume(b),v):c(b)}function v(b){return 45===b||ax(b)?(a.consume(b),v):function b(c){return aD(c)?(f=b,E(c)):aF(c)?(a.consume(c),b):D(c)}(b)}function w(b){return 45===b||ax(b)?(a.consume(b),w):47===b||62===b||aE(b)?x(b):c(b)}function x(b){return 47===b?(a.consume(b),D):58===b||95===b||aw(b)?(a.consume(b),y):aD(b)?(f=x,E(b)):aF(b)?(a.consume(b),x):D(b)}function y(b){return 45===b||46===b||58===b||95===b||ax(b)?(a.consume(b),y):function b(c){return 61===c?(a.consume(c),z):aD(c)?(f=b,E(c)):aF(c)?(a.consume(c),b):x(c)}(b)}function z(b){return null===b||60===b||61===b||62===b||96===b?c(b):34===b||39===b?(a.consume(b),d=b,A):aD(b)?(f=z,E(b)):aF(b)?(a.consume(b),z):(a.consume(b),B)}function A(b){return b===d?(a.consume(b),d=void 0,C):null===b?c(b):aD(b)?(f=A,E(b)):(a.consume(b),A)}function B(b){return null===b||34===b||39===b||60===b||61===b||96===b?c(b):47===b||62===b||aE(b)?x(b):(a.consume(b),B)}function C(a){return 47===a||62===a||aE(a)?x(a):c(a)}function D(d){return 62===d?(a.consume(d),a.exit("htmlTextData"),a.exit("htmlText"),b):c(d)}function E(b){return a.exit("htmlTextData"),a.enter("lineEnding"),a.consume(b),a.exit("lineEnding"),F}function F(b){return aF(b)?aJ(a,G,"linePrefix",g.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(b):G(b)}function G(b){return a.enter("htmlTextData"),f(b)}}}],91:bu,92:[{name:"hardBreakEscape",tokenize:function(a,b,c){return function(b){return a.enter("hardBreakEscape"),a.consume(b),d};function d(d){return aD(d)?(a.exit("hardBreakEscape"),b(d)):c(d)}}},bj],93:bm,95:bs,96:{name:"codeText",previous:function(a){return 96!==a||"characterEscape"===this.events[this.events.length-1][1].type},resolve:function(a){let b,c,d=a.length-4,e=3;if(("lineEnding"===a[3][1].type||"space"===a[e][1].type)&&("lineEnding"===a[d][1].type||"space"===a[d][1].type)){for(b=e;++b<d;)if("codeTextData"===a[b][1].type){a[e][1].type="codeTextPadding",a[d][1].type="codeTextPadding",e+=2,d-=2;break}}for(b=e-1,d++;++b<=d;)void 0===c?b!==d&&"lineEnding"!==a[b][1].type&&(c=b):(b===d||"lineEnding"===a[b][1].type)&&(a[c][1].type="codeTextData",b!==c+2&&(a[c][1].end=a[b-1][1].end,a.splice(c+2,b-c-2),d-=b-c-2,b=c+2),c=void 0);return a},tokenize:function(a,b,c){let d,e,f=0;return function(b){return a.enter("codeText"),a.enter("codeTextSequence"),function b(c){return 96===c?(a.consume(c),f++,b):(a.exit("codeTextSequence"),g(c))}(b)};function g(i){return null===i?c(i):32===i?(a.enter("space"),a.consume(i),a.exit("space"),g):96===i?(e=a.enter("codeTextSequence"),d=0,function c(g){return 96===g?(a.consume(g),d++,c):d===f?(a.exit("codeTextSequence"),a.exit("codeText"),b(g)):(e.type="codeTextData",h(g))}(i)):aD(i)?(a.enter("lineEnding"),a.consume(i),a.exit("lineEnding"),g):(a.enter("codeTextData"),h(i))}function h(b){return null===b||32===b||96===b||aD(b)?(a.exit("codeTextData"),g(b)):(a.consume(b),h)}}}},bB={null:[bs,aR]},bC={null:[42,95]},bD={null:[]},bE=/[\0\t\n\r]/g;function bF(a,b){let c=Number.parseInt(a,b);return c<9||11===c||c>13&&c<32||c>126&&c<160||c>55295&&c<57344||c>64975&&c<65008||(65535&c)==65535||(65535&c)==65534||c>1114111?"�":String.fromCodePoint(c)}let bG=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function bH(a,b,c){if(b)return b;if(35===c.charCodeAt(0)){let a=c.charCodeAt(1),b=120===a||88===a;return bF(c.slice(b?2:1),b?16:10)}return bh(c)||a}let bI={}.hasOwnProperty;function bJ(a){return{line:a.line,column:a.column,offset:a.offset}}function bK(a,b){if(a)throw Error("Cannot close `"+a.type+"` ("+V({start:a.start,end:a.end})+"): a different token (`"+b.type+"`, "+V({start:b.start,end:b.end})+") is open");throw Error("Cannot close document, a token (`"+b.type+"`, "+V({start:b.start,end:b.end})+") is still open")}function bL(a){let b=this;b.parser=function(c){var d,f;let g,h,i,j;return"object"==typeof(d={...b.data("settings"),...a,extensions:b.data("micromarkExtensions")||[],mdastExtensions:b.data("fromMarkdownExtensions")||[]})&&(f=d,d=void 0),(function(a){let b={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:d(r),autolinkProtocol:j,autolinkEmail:j,atxHeading:d(o),blockQuote:d(function(){return{type:"blockquote",children:[]}}),characterEscape:j,characterReference:j,codeFenced:d(n),codeFencedFenceInfo:e,codeFencedFenceMeta:e,codeIndented:d(n,e),codeText:d(function(){return{type:"inlineCode",value:""}},e),codeTextData:j,data:j,codeFlowValue:j,definition:d(function(){return{type:"definition",identifier:"",label:null,title:null,url:""}}),definitionDestinationString:e,definitionLabelString:e,definitionTitleString:e,emphasis:d(function(){return{type:"emphasis",children:[]}}),hardBreakEscape:d(p),hardBreakTrailing:d(p),htmlFlow:d(q,e),htmlFlowData:j,htmlText:d(q,e),htmlTextData:j,image:d(function(){return{type:"image",title:null,url:"",alt:null}}),label:e,link:d(r),listItem:d(function(a){return{type:"listItem",spread:a._spread,checked:null,children:[]}}),listItemValue:function(a){this.data.expectingFirstListItemValue&&(this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(a),10),this.data.expectingFirstListItemValue=void 0)},listOrdered:d(s,function(){this.data.expectingFirstListItemValue=!0}),listUnordered:d(s),paragraph:d(function(){return{type:"paragraph",children:[]}}),reference:function(){this.data.referenceType="collapsed"},referenceString:e,resourceDestinationString:e,resourceTitleString:e,setextHeading:d(o),strong:d(function(){return{type:"strong",children:[]}}),thematicBreak:d(function(){return{type:"thematicBreak"}})},exit:{atxHeading:g(),atxHeadingSequence:function(a){let b=this.stack[this.stack.length-1];b.depth||(b.depth=this.sliceSerialize(a).length)},autolink:g(),autolinkEmail:function(a){k.call(this,a),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(a)},autolinkProtocol:function(a){k.call(this,a),this.stack[this.stack.length-1].url=this.sliceSerialize(a)},blockQuote:g(),characterEscapeValue:k,characterReferenceMarkerHexadecimal:m,characterReferenceMarkerNumeric:m,characterReferenceValue:function(a){let b,c=this.sliceSerialize(a),d=this.data.characterReferenceType;d?(b=bF(c,"characterReferenceMarkerNumeric"===d?10:16),this.data.characterReferenceType=void 0):b=bh(c);let e=this.stack[this.stack.length-1];e.value+=b},characterReference:function(a){this.stack.pop().position.end=bJ(a.end)},codeFenced:g(function(){let a=this.resume();this.stack[this.stack.length-1].value=a.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}),codeFencedFence:function(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)},codeFencedFenceInfo:function(){let a=this.resume();this.stack[this.stack.length-1].lang=a},codeFencedFenceMeta:function(){let a=this.resume();this.stack[this.stack.length-1].meta=a},codeFlowValue:k,codeIndented:g(function(){let a=this.resume();this.stack[this.stack.length-1].value=a.replace(/(\r?\n|\r)$/g,"")}),codeText:g(function(){let a=this.resume();this.stack[this.stack.length-1].value=a}),codeTextData:k,data:k,definition:g(),definitionDestinationString:function(){let a=this.resume();this.stack[this.stack.length-1].url=a},definitionLabelString:function(a){let b=this.resume(),c=this.stack[this.stack.length-1];c.label=b,c.identifier=a4(this.sliceSerialize(a)).toLowerCase()},definitionTitleString:function(){let a=this.resume();this.stack[this.stack.length-1].title=a},emphasis:g(),hardBreakEscape:g(l),hardBreakTrailing:g(l),htmlFlow:g(function(){let a=this.resume();this.stack[this.stack.length-1].value=a}),htmlFlowData:k,htmlText:g(function(){let a=this.resume();this.stack[this.stack.length-1].value=a}),htmlTextData:k,image:g(function(){let a=this.stack[this.stack.length-1];if(this.data.inReference){let b=this.data.referenceType||"shortcut";a.type+="Reference",a.referenceType=b,delete a.url,delete a.title}else delete a.identifier,delete a.label;this.data.referenceType=void 0}),label:function(){let a=this.stack[this.stack.length-1],b=this.resume(),c=this.stack[this.stack.length-1];this.data.inReference=!0,"link"===c.type?c.children=a.children:c.alt=b},labelText:function(a){let b=this.sliceSerialize(a),c=this.stack[this.stack.length-2];c.label=b.replace(bG,bH),c.identifier=a4(b).toLowerCase()},lineEnding:function(a){let c=this.stack[this.stack.length-1];if(this.data.atHardBreak){c.children[c.children.length-1].position.end=bJ(a.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&b.canContainEols.includes(c.type)&&(j.call(this,a),k.call(this,a))},link:g(function(){let a=this.stack[this.stack.length-1];if(this.data.inReference){let b=this.data.referenceType||"shortcut";a.type+="Reference",a.referenceType=b,delete a.url,delete a.title}else delete a.identifier,delete a.label;this.data.referenceType=void 0}),listItem:g(),listOrdered:g(),listUnordered:g(),paragraph:g(),referenceString:function(a){let b=this.resume(),c=this.stack[this.stack.length-1];c.label=b,c.identifier=a4(this.sliceSerialize(a)).toLowerCase(),this.data.referenceType="full"},resourceDestinationString:function(){let a=this.resume();this.stack[this.stack.length-1].url=a},resourceTitleString:function(){let a=this.resume();this.stack[this.stack.length-1].title=a},resource:function(){this.data.inReference=void 0},setextHeading:g(function(){this.data.setextHeadingSlurpLineEnding=void 0}),setextHeadingLineSequence:function(a){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(a).codePointAt(0)?1:2},setextHeadingText:function(){this.data.setextHeadingSlurpLineEnding=!0},strong:g(),thematicBreak:g()}};!function a(b,c){let d=-1;for(;++d<c.length;){let e=c[d];Array.isArray(e)?a(b,e):function(a,b){let c;for(c in b)if(bI.call(b,c))switch(c){case"canContainEols":{let d=b[c];d&&a[c].push(...d);break}case"transforms":{let d=b[c];d&&a[c].push(...d);break}case"enter":case"exit":{let d=b[c];d&&Object.assign(a[c],d)}}}(b,e)}}(b,(a||{}).mdastExtensions||[]);let c={};return function(a){let d={type:"root",children:[]},g={stack:[d],tokenStack:[],config:b,enter:f,exit:h,buffer:e,resume:i,data:c},j=[],k=-1;for(;++k<a.length;)("listOrdered"===a[k][1].type||"listUnordered"===a[k][1].type)&&("enter"===a[k][0]?j.push(k):k=function(a,b,c){let d,e,f,g,h=b-1,i=-1,j=!1;for(;++h<=c;){let b=a[h];switch(b[1].type){case"listUnordered":case"listOrdered":case"blockQuote":"enter"===b[0]?i++:i--,g=void 0;break;case"lineEndingBlank":"enter"===b[0]&&(!d||g||i||f||(f=h),g=void 0);break;case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:g=void 0}if(!i&&"enter"===b[0]&&"listItemPrefix"===b[1].type||-1===i&&"exit"===b[0]&&("listUnordered"===b[1].type||"listOrdered"===b[1].type)){if(d){let g=h;for(e=void 0;g--;){let b=a[g];if("lineEnding"===b[1].type||"lineEndingBlank"===b[1].type){if("exit"===b[0])continue;e&&(a[e][1].type="lineEndingBlank",j=!0),b[1].type="lineEnding",e=g}else if("linePrefix"===b[1].type||"blockQuotePrefix"===b[1].type||"blockQuotePrefixWhitespace"===b[1].type||"blockQuoteMarker"===b[1].type||"listItemIndent"===b[1].type);else break}f&&(!e||f<e)&&(d._spread=!0),d.end=Object.assign({},e?a[e][1].start:b[1].end),a.splice(e||h,0,["exit",d,b[2]]),h++,c++}if("listItemPrefix"===b[1].type){let e={type:"listItem",_spread:!1,start:Object.assign({},b[1].start),end:void 0};d=e,a.splice(h,0,["enter",e,b[2]]),h++,c++,f=void 0,g=!0}}}return a[b][1]._spread=j,c}(a,j.pop(),k));for(k=-1;++k<a.length;){let c=b[a[k][0]];bI.call(c,a[k][1].type)&&c[a[k][1].type].call(Object.assign({sliceSerialize:a[k][2].sliceSerialize},g),a[k][1])}if(g.tokenStack.length>0){let a=g.tokenStack[g.tokenStack.length-1];(a[1]||bK).call(g,void 0,a[0])}for(d.position={start:bJ(a.length>0?a[0][1].start:{line:1,column:1,offset:0}),end:bJ(a.length>0?a[a.length-2][1].end:{line:1,column:1,offset:0})},k=-1;++k<b.transforms.length;)d=b.transforms[k](d)||d;return d};function d(a,b){return function(c){f.call(this,a(c),c),b&&b.call(this,c)}}function e(){this.stack.push({type:"fragment",children:[]})}function f(a,b,c){this.stack[this.stack.length-1].children.push(a),this.stack.push(a),this.tokenStack.push([b,c||void 0]),a.position={start:bJ(b.start),end:void 0}}function g(a){return function(b){a&&a.call(this,b),h.call(this,b)}}function h(a,b){let c=this.stack.pop(),d=this.tokenStack.pop();if(d)d[0].type!==a.type&&(b?b.call(this,a,d[0]):(d[1]||bK).call(this,a,d[0]));else throw Error("Cannot close `"+a.type+"` ("+V({start:a.start,end:a.end})+"): it’s not open");c.position.end=bJ(a.end)}function i(){return ao(this.stack.pop(),"boolean"!=typeof an.includeImageAlt||an.includeImageAlt,"boolean"!=typeof an.includeHtml||an.includeHtml)}function j(a){let b=this.stack[this.stack.length-1].children,c=b[b.length-1];c&&"text"===c.type||((c={type:"text",value:""}).position={start:bJ(a.start),end:void 0},b.push(c)),this.stack.push(c)}function k(a){let b=this.stack.pop();b.value+=this.sliceSerialize(a),b.position.end=bJ(a.end)}function l(){this.data.atHardBreak=!0}function m(a){this.data.characterReferenceType=a.type}function n(){return{type:"code",lang:null,meta:null,value:""}}function o(){return{type:"heading",depth:0,children:[]}}function p(){return{type:"break"}}function q(){return{type:"html",value:""}}function r(){return{type:"link",title:null,url:"",children:[]}}function s(a){return{type:"list",ordered:"listOrdered"===a.type,start:null,spread:a._spread,children:[]}}})(f)(function(a){for(;!au(a););return a}((function(a){let b={constructs:function(a){let b={},c=-1;for(;++c<a.length;)!function(a,b){let c;for(c in b){let d,e=(av.call(a,c)?a[c]:void 0)||(a[c]={}),f=b[c];if(f)for(d in f){av.call(e,d)||(e[d]=[]);let a=f[d];!function(a,b){let c=-1,d=[];for(;++c<b.length;)("after"===b[c].add?a:d).push(b[c]);aq(a,0,0,d)}(e[d],Array.isArray(a)?a:a?[a]:[])}}}(b,a[c]);return b}([e,...(a||{}).extensions||[]]),content:c(aK),defined:[],document:c(aL),flow:c(aQ),lazy:{},string:c(aS),text:c(aT)};return b;function c(a){return function(c){return function(a,b,c){let d={_bufferIndex:-1,_index:0,line:c&&c.line||1,column:c&&c.column||1,offset:c&&c.offset||0},e={},f=[],g=[],h=[],i={attempt:o(function(a,b){p(a,b.from)}),check:o(n),consume:function(a){aD(a)?(d.line++,d.column=1,d.offset+=-3===a?2:1,q()):-1!==a&&(d.column++,d.offset++),d._bufferIndex<0?d._index++:(d._bufferIndex++,d._bufferIndex===g[d._index].length&&(d._bufferIndex=-1,d._index++)),j.previous=a},enter:function(a,b){let c=b||{};return c.type=a,c.start=m(),j.events.push(["enter",c,j]),h.push(c),c},exit:function(a){let b=h.pop();return b.end=m(),j.events.push(["exit",b,j]),b},interrupt:o(n,{interrupt:!0})},j={code:null,containerState:{},defineSkip:function(a){e[a.line]=a.column,q()},events:[],now:m,parser:a,previous:null,sliceSerialize:function(a,b){return function(a,b){let c,d=-1,e=[];for(;++d<a.length;){let f,g=a[d];if("string"==typeof g)f=g;else switch(g){case -5:f="\r";break;case -4:f="\n";break;case -3:f="\r\n";break;case -2:f=b?" ":" ";break;case -1:if(!b&&c)continue;f=" ";break;default:f=String.fromCharCode(g)}c=-2===g,e.push(f)}return e.join("")}(l(a),b)},sliceStream:l,write:function(a){return(g=ar(g,a),function(){let a;for(;d._index<g.length;){let c=g[d._index];if("string"==typeof c)for(a=d._index,d._bufferIndex<0&&(d._bufferIndex=0);d._index===a&&d._bufferIndex<c.length;){var b;b=c.charCodeAt(d._bufferIndex),k=k(b)}else k=k(c)}}(),null!==g[g.length-1])?[]:(p(b,0),j.events=bl(f,j.events,j),j.events)}},k=b.tokenize.call(j,i);return b.resolveAll&&f.push(b),j;function l(a){return function(a,b){let c,d=b.start._index,e=b.start._bufferIndex,f=b.end._index,g=b.end._bufferIndex;if(d===f)c=[a[d].slice(e,g)];else{if(c=a.slice(d,f),e>-1){let a=c[0];"string"==typeof a?c[0]=a.slice(e):c.shift()}g>0&&c.push(a[f].slice(0,g))}return c}(g,a)}function m(){let{_bufferIndex:a,_index:b,line:c,column:e,offset:f}=d;return{_bufferIndex:a,_index:b,line:c,column:e,offset:f}}function n(a,b){b.restore()}function o(a,b){return function(c,e,f){var g;let k,l,n,o;return Array.isArray(c)?p(c):"tokenize"in c?p([c]):(g=c,function(a){let b=null!==a&&g[a],c=null!==a&&g.null;return p([...Array.isArray(b)?b:b?[b]:[],...Array.isArray(c)?c:c?[c]:[]])(a)});function p(a){return(k=a,l=0,0===a.length)?f:r(a[l])}function r(a){return function(c){return(o=function(){let a=m(),b=j.previous,c=j.currentConstruct,e=j.events.length,f=Array.from(h);return{from:e,restore:function(){d=a,j.previous=b,j.currentConstruct=c,j.events.length=e,h=f,q()}}}(),n=a,a.partial||(j.currentConstruct=a),a.name&&j.parser.constructs.disable.null.includes(a.name))?t(c):a.tokenize.call(b?Object.assign(Object.create(j),b):j,i,s,t)(c)}}function s(b){return a(n,o),e}function t(a){return(o.restore(),++l<k.length)?r(k[l]):f}}}function p(a,b){a.resolveAll&&!f.includes(a)&&f.push(a),a.resolve&&aq(j.events,b,j.events.length-b,a.resolve(j.events.slice(b),j)),a.resolveTo&&(j.events=a.resolveTo(j.events,j))}function q(){d.line in e&&d.column<2&&(d.column=e[d.line],d.offset+=e[d.line]-1)}}(b,a,c)}}})(f).document().write((h=1,i="",j=!0,function(a,b,c){let d,e,f,k,l,m=[];for(a=i+("string"==typeof a?a.toString():new TextDecoder(b||void 0).decode(a)),f=0,i="",j&&(65279===a.charCodeAt(0)&&f++,j=void 0);f<a.length;){if(bE.lastIndex=f,k=(d=bE.exec(a))&&void 0!==d.index?d.index:a.length,l=a.charCodeAt(k),!d){i=a.slice(f);break}if(10===l&&f===k&&g)m.push(-3),g=void 0;else switch(g&&(m.push(-5),g=void 0),f<k&&(m.push(a.slice(f,k)),h+=k-f),l){case 0:m.push(65533),h++;break;case 9:for(e=4*Math.ceil(h/4),m.push(-2);h++<e;)m.push(-1);break;case 10:m.push(-4),h=1;break;default:g=!0,h=1}f=k+1}return c&&(g&&m.push(-5),i&&m.push(i),m.push(null)),m})(c,d,!0))))}}let bM="object"==typeof self?self:globalThis,bN=(a,b)=>{switch(a){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw TypeError("unable to deserialize "+a)}return new bM[a](b)},bO=a=>((a,b)=>{let c=(b,c)=>(a.set(c,b),b),d=e=>{if(a.has(e))return a.get(e);let[f,g]=b[e];switch(f){case 0:case -1:return c(g,e);case 1:{let a=c([],e);for(let b of g)a.push(d(b));return a}case 2:{let a=c({},e);for(let[b,c]of g)a[d(b)]=d(c);return a}case 3:return c(new Date(g),e);case 4:{let{source:a,flags:b}=g;return c(new RegExp(a,b),e)}case 5:{let a=c(new Map,e);for(let[b,c]of g)a.set(d(b),d(c));return a}case 6:{let a=c(new Set,e);for(let b of g)a.add(d(b));return a}case 7:{let{name:a,message:b}=g;return c(bN(a,b),e)}case 8:return c(BigInt(g),e);case"BigInt":return c(Object(BigInt(g)),e);case"ArrayBuffer":return c(new Uint8Array(g).buffer,g);case"DataView":{let{buffer:a}=new Uint8Array(g);return c(new DataView(a),g)}}return c(bN(f,g),e)};return d})(new Map,a)(0),{toString:bP}={},{keys:bQ}=Object,bR=a=>{let b=typeof a;if("object"!==b||!a)return[0,b];let c=bP.call(a).slice(8,-1);switch(c){case"Array":return[1,""];case"Object":return[2,""];case"Date":return[3,""];case"RegExp":return[4,""];case"Map":return[5,""];case"Set":return[6,""];case"DataView":return[1,c]}return c.includes("Array")?[1,c]:c.includes("Error")?[7,c]:[2,c]},bS=([a,b])=>0===a&&("function"===b||"symbol"===b),bT=(a,{json:b,lossy:c}={})=>{let d=[];return((a,b,c,d)=>{let e=(a,b)=>{let e=d.push(a)-1;return c.set(b,e),e},f=d=>{if(c.has(d))return c.get(d);let[g,h]=bR(d);switch(g){case 0:{let b=d;switch(h){case"bigint":g=8,b=d.toString();break;case"function":case"symbol":if(a)throw TypeError("unable to serialize "+h);b=null;break;case"undefined":return e([-1],d)}return e([g,b],d)}case 1:{if(h){let a=d;return"DataView"===h?a=new Uint8Array(d.buffer):"ArrayBuffer"===h&&(a=new Uint8Array(d)),e([h,[...a]],d)}let a=[],b=e([g,a],d);for(let b of d)a.push(f(b));return b}case 2:{if(h)switch(h){case"BigInt":return e([h,d.toString()],d);case"Boolean":case"Number":case"String":return e([h,d.valueOf()],d)}if(b&&"toJSON"in d)return f(d.toJSON());let c=[],i=e([g,c],d);for(let b of bQ(d))(a||!bS(bR(d[b])))&&c.push([f(b),f(d[b])]);return i}case 3:return e([g,d.toISOString()],d);case 4:{let{source:a,flags:b}=d;return e([g,{source:a,flags:b}],d)}case 5:{let b=[],c=e([g,b],d);for(let[c,e]of d)(a||!(bS(bR(c))||bS(bR(e))))&&b.push([f(c),f(e)]);return c}case 6:{let b=[],c=e([g,b],d);for(let c of d)(a||!bS(bR(c)))&&b.push(f(c));return c}}let{message:i}=d;return e([g,{name:h,message:i}],d)};return f})(!(b||c),!!b,new Map,d)(a),d},bU="function"==typeof structuredClone?(a,b)=>b&&("json"in b||"lossy"in b)?bO(bT(a,b)):structuredClone(a):(a,b)=>bO(bT(a,b));function bV(a){let b=[],c=-1,d=0,e=0;for(;++c<a.length;){let f=a.charCodeAt(c),g="";if(37===f&&ax(a.charCodeAt(c+1))&&ax(a.charCodeAt(c+2)))e=2;else if(f<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(f))||(g=String.fromCharCode(f));else if(f>55295&&f<57344){let b=a.charCodeAt(c+1);f<56320&&b>56319&&b<57344?(g=String.fromCharCode(f,b),e=1):g="�"}else g=String.fromCharCode(f);g&&(b.push(a.slice(d,c),encodeURIComponent(g)),d=c+e+1,g=""),e&&(c+=e,e=0)}return b.join("")+a.slice(d)}function bW(a,b){let c=[{type:"text",value:"↩"}];return b>1&&c.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(b)}]}),c}function bX(a,b){return"Back to reference "+(a+1)+(b>1?"-"+b:"")}let bY=function(a){var b,c;if(null==a)return b$;if("function"==typeof a)return bZ(a);if("object"==typeof a){return Array.isArray(a)?function(a){let b=[],c=-1;for(;++c<a.length;)b[c]=bY(a[c]);return bZ(function(...a){let c=-1;for(;++c<b.length;)if(b[c].apply(this,a))return!0;return!1})}(a):(b=a,bZ(function(a){let c;for(c in b)if(a[c]!==b[c])return!1;return!0}))}if("string"==typeof a){return c=a,bZ(function(a){return a&&a.type===c})}throw Error("Expected function, string, or object as test")};function bZ(a){return function(b,c,d){return!!(function(a){return null!==a&&"object"==typeof a&&"type"in a}(b)&&a.call(this,b,"number"==typeof c?c:void 0,d||void 0))}}function b$(){return!0}let b_=[];function b0(a,b,c,d){let e,f,g,h;"function"==typeof b&&"function"!=typeof c?(f=void 0,g=b,e=c):(f=b,g=c,e=d);var i=f,j=function(a,b){let c=b[b.length-1],d=c?c.children.indexOf(a):void 0;return g(a,d,c)},k=e;"function"==typeof i&&"function"!=typeof j?(k=j,j=i):h=i;let l=bY(h),m=k?-1:1;(function a(b,c,d){let e=b&&"object"==typeof b?b:{};if("string"==typeof e.type){let a="string"==typeof e.tagName?e.tagName:"string"==typeof e.name?e.name:void 0;Object.defineProperty(f,"name",{value:"node (\x1b[33m"+b.type+(a?"<"+a+">":"")+"\x1b[39m)"})}return f;function f(){var e;let f,g,h,n=b_;if((!i||l(b,c,d[d.length-1]||void 0))&&!1===(n=Array.isArray(e=j(b,d))?e:"number"==typeof e?[!0,e]:null==e?b_:[e])[0])return n;if("children"in b&&b.children&&b.children&&"skip"!==n[0])for(g=(k?b.children.length:-1)+m,h=d.concat(b);g>-1&&g<b.children.length;){if(!1===(f=a(b.children[g],g,h)())[0])return f;g="number"==typeof f[1]?f[1]:g+m}return n}})(a,void 0,[])()}function b1(a,b){let c=b.referenceType,d="]";if("collapsed"===c?d+="[]":"full"===c&&(d+="["+(b.label||b.identifier)+"]"),"imageReference"===b.type)return[{type:"text",value:"!["+b.alt+d}];let e=a.all(b),f=e[0];f&&"text"===f.type?f.value="["+f.value:e.unshift({type:"text",value:"["});let g=e[e.length-1];return g&&"text"===g.type?g.value+=d:e.push({type:"text",value:d}),e}function b2(a){let b=a.spread;return null==b?a.children.length>1:b}function b3(a,b,c){let d=0,e=a.length;if(b){let b=a.codePointAt(d);for(;9===b||32===b;)d++,b=a.codePointAt(d)}if(c){let b=a.codePointAt(e-1);for(;9===b||32===b;)e--,b=a.codePointAt(e-1)}return e>d?a.slice(d,e):""}let b4={blockquote:function(a,b){let c={type:"element",tagName:"blockquote",properties:{},children:a.wrap(a.all(b),!0)};return a.patch(b,c),a.applyData(b,c)},break:function(a,b){let c={type:"element",tagName:"br",properties:{},children:[]};return a.patch(b,c),[a.applyData(b,c),{type:"text",value:"\n"}]},code:function(a,b){let c=b.value?b.value+"\n":"",d={},e=b.lang?b.lang.split(/\s+/):[];e.length>0&&(d.className=["language-"+e[0]]);let f={type:"element",tagName:"code",properties:d,children:[{type:"text",value:c}]};return b.meta&&(f.data={meta:b.meta}),a.patch(b,f),f={type:"element",tagName:"pre",properties:{},children:[f=a.applyData(b,f)]},a.patch(b,f),f},delete:function(a,b){let c={type:"element",tagName:"del",properties:{},children:a.all(b)};return a.patch(b,c),a.applyData(b,c)},emphasis:function(a,b){let c={type:"element",tagName:"em",properties:{},children:a.all(b)};return a.patch(b,c),a.applyData(b,c)},footnoteReference:function(a,b){let c,d="string"==typeof a.options.clobberPrefix?a.options.clobberPrefix:"user-content-",e=String(b.identifier).toUpperCase(),f=bV(e.toLowerCase()),g=a.footnoteOrder.indexOf(e),h=a.footnoteCounts.get(e);void 0===h?(h=0,a.footnoteOrder.push(e),c=a.footnoteOrder.length):c=g+1,h+=1,a.footnoteCounts.set(e,h);let i={type:"element",tagName:"a",properties:{href:"#"+d+"fn-"+f,id:d+"fnref-"+f+(h>1?"-"+h:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(c)}]};a.patch(b,i);let j={type:"element",tagName:"sup",properties:{},children:[i]};return a.patch(b,j),a.applyData(b,j)},heading:function(a,b){let c={type:"element",tagName:"h"+b.depth,properties:{},children:a.all(b)};return a.patch(b,c),a.applyData(b,c)},html:function(a,b){if(a.options.allowDangerousHtml){let c={type:"raw",value:b.value};return a.patch(b,c),a.applyData(b,c)}},imageReference:function(a,b){let c=String(b.identifier).toUpperCase(),d=a.definitionById.get(c);if(!d)return b1(a,b);let e={src:bV(d.url||""),alt:b.alt};null!==d.title&&void 0!==d.title&&(e.title=d.title);let f={type:"element",tagName:"img",properties:e,children:[]};return a.patch(b,f),a.applyData(b,f)},image:function(a,b){let c={src:bV(b.url)};null!==b.alt&&void 0!==b.alt&&(c.alt=b.alt),null!==b.title&&void 0!==b.title&&(c.title=b.title);let d={type:"element",tagName:"img",properties:c,children:[]};return a.patch(b,d),a.applyData(b,d)},inlineCode:function(a,b){let c={type:"text",value:b.value.replace(/\r?\n|\r/g," ")};a.patch(b,c);let d={type:"element",tagName:"code",properties:{},children:[c]};return a.patch(b,d),a.applyData(b,d)},linkReference:function(a,b){let c=String(b.identifier).toUpperCase(),d=a.definitionById.get(c);if(!d)return b1(a,b);let e={href:bV(d.url||"")};null!==d.title&&void 0!==d.title&&(e.title=d.title);let f={type:"element",tagName:"a",properties:e,children:a.all(b)};return a.patch(b,f),a.applyData(b,f)},link:function(a,b){let c={href:bV(b.url)};null!==b.title&&void 0!==b.title&&(c.title=b.title);let d={type:"element",tagName:"a",properties:c,children:a.all(b)};return a.patch(b,d),a.applyData(b,d)},listItem:function(a,b,c){let d=a.all(b),e=c?function(a){let b=!1;if("list"===a.type){b=a.spread||!1;let c=a.children,d=-1;for(;!b&&++d<c.length;)b=b2(c[d])}return b}(c):b2(b),f={},g=[];if("boolean"==typeof b.checked){let a,c=d[0];c&&"element"===c.type&&"p"===c.tagName?a=c:(a={type:"element",tagName:"p",properties:{},children:[]},d.unshift(a)),a.children.length>0&&a.children.unshift({type:"text",value:" "}),a.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:b.checked,disabled:!0},children:[]}),f.className=["task-list-item"]}let h=-1;for(;++h<d.length;){let a=d[h];(e||0!==h||"element"!==a.type||"p"!==a.tagName)&&g.push({type:"text",value:"\n"}),"element"!==a.type||"p"!==a.tagName||e?g.push(a):g.push(...a.children)}let i=d[d.length-1];i&&(e||"element"!==i.type||"p"!==i.tagName)&&g.push({type:"text",value:"\n"});let j={type:"element",tagName:"li",properties:f,children:g};return a.patch(b,j),a.applyData(b,j)},list:function(a,b){let c={},d=a.all(b),e=-1;for("number"==typeof b.start&&1!==b.start&&(c.start=b.start);++e<d.length;){let a=d[e];if("element"===a.type&&"li"===a.tagName&&a.properties&&Array.isArray(a.properties.className)&&a.properties.className.includes("task-list-item")){c.className=["contains-task-list"];break}}let f={type:"element",tagName:b.ordered?"ol":"ul",properties:c,children:a.wrap(d,!0)};return a.patch(b,f),a.applyData(b,f)},paragraph:function(a,b){let c={type:"element",tagName:"p",properties:{},children:a.all(b)};return a.patch(b,c),a.applyData(b,c)},root:function(a,b){let c={type:"root",children:a.wrap(a.all(b))};return a.patch(b,c),a.applyData(b,c)},strong:function(a,b){let c={type:"element",tagName:"strong",properties:{},children:a.all(b)};return a.patch(b,c),a.applyData(b,c)},table:function(a,b){let c=a.all(b),d=c.shift(),e=[];if(d){let c={type:"element",tagName:"thead",properties:{},children:a.wrap([d],!0)};a.patch(b.children[0],c),e.push(c)}if(c.length>0){let d={type:"element",tagName:"tbody",properties:{},children:a.wrap(c,!0)},f=T(b.children[1]),g=S(b.children[b.children.length-1]);f&&g&&(d.position={start:f,end:g}),e.push(d)}let f={type:"element",tagName:"table",properties:{},children:a.wrap(e,!0)};return a.patch(b,f),a.applyData(b,f)},tableCell:function(a,b){let c={type:"element",tagName:"td",properties:{},children:a.all(b)};return a.patch(b,c),a.applyData(b,c)},tableRow:function(a,b,c){let d=c?c.children:void 0,e=0===(d?d.indexOf(b):1)?"th":"td",f=c&&"table"===c.type?c.align:void 0,g=f?f.length:b.children.length,h=-1,i=[];for(;++h<g;){let c=b.children[h],d={},g=f?f[h]:void 0;g&&(d.align=g);let j={type:"element",tagName:e,properties:d,children:[]};c&&(j.children=a.all(c),a.patch(c,j),j=a.applyData(c,j)),i.push(j)}let j={type:"element",tagName:"tr",properties:{},children:a.wrap(i,!0)};return a.patch(b,j),a.applyData(b,j)},text:function(a,b){let c={type:"text",value:function(a){let b=String(a),c=/\r?\n|\r/g,d=c.exec(b),e=0,f=[];for(;d;)f.push(b3(b.slice(e,d.index),e>0,!0),d[0]),e=d.index+d[0].length,d=c.exec(b);return f.push(b3(b.slice(e),e>0,!1)),f.join("")}(String(b.value))};return a.patch(b,c),a.applyData(b,c)},thematicBreak:function(a,b){let c={type:"element",tagName:"hr",properties:{},children:[]};return a.patch(b,c),a.applyData(b,c)},toml:b5,yaml:b5,definition:b5,footnoteDefinition:b5};function b5(){}let b6={}.hasOwnProperty,b7={};function b8(a,b){a.position&&(b.position=function(a){let b=T(a),c=S(a);if(b&&c)return{start:b,end:c}}(a))}function b9(a,b){let c=b;if(a&&a.data){let b=a.data.hName,d=a.data.hChildren,e=a.data.hProperties;"string"==typeof b&&("element"===c.type?c.tagName=b:c={type:"element",tagName:b,properties:{},children:"children"in c?c.children:[c]}),"element"===c.type&&e&&Object.assign(c.properties,bU(e)),"children"in c&&c.children&&null!=d&&(c.children=d)}return c}function ca(a,b){let c=[],d=-1;for(b&&c.push({type:"text",value:"\n"});++d<a.length;)d&&c.push({type:"text",value:"\n"}),c.push(a[d]);return b&&a.length>0&&c.push({type:"text",value:"\n"}),c}function cb(a){let b=0,c=a.charCodeAt(b);for(;9===c||32===c;)b++,c=a.charCodeAt(b);return a.slice(b)}function cc(a,b){let c=function(a,b){let c=b||b7,d=new Map,e=new Map,f={all:function(a){let b=[];if("children"in a){let c=a.children,d=-1;for(;++d<c.length;){let e=f.one(c[d],a);if(e){if(d&&"break"===c[d-1].type&&(Array.isArray(e)||"text"!==e.type||(e.value=cb(e.value)),!Array.isArray(e)&&"element"===e.type)){let a=e.children[0];a&&"text"===a.type&&(a.value=cb(a.value))}Array.isArray(e)?b.push(...e):b.push(e)}}}return b},applyData:b9,definitionById:d,footnoteById:e,footnoteCounts:new Map,footnoteOrder:[],handlers:{...b4,...c.handlers},one:function(a,b){let c=a.type,d=f.handlers[c];if(b6.call(f.handlers,c)&&d)return d(f,a,b);if(f.options.passThrough&&f.options.passThrough.includes(c)){if("children"in a){let{children:b,...c}=a,d=bU(c);return d.children=f.all(a),d}return bU(a)}return(f.options.unknownHandler||function(a,b){let c=b.data||{},d="value"in b&&!(b6.call(c,"hProperties")||b6.call(c,"hChildren"))?{type:"text",value:b.value}:{type:"element",tagName:"div",properties:{},children:a.all(b)};return a.patch(b,d),a.applyData(b,d)})(f,a,b)},options:c,patch:b8,wrap:ca};return b0(a,function(a){if("definition"===a.type||"footnoteDefinition"===a.type){let b="definition"===a.type?d:e,c=String(a.identifier).toUpperCase();b.has(c)||b.set(c,a)}}),f}(a,b),d=c.one(a,void 0),e=function(a){let b="string"==typeof a.options.clobberPrefix?a.options.clobberPrefix:"user-content-",c=a.options.footnoteBackContent||bW,d=a.options.footnoteBackLabel||bX,e=a.options.footnoteLabel||"Footnotes",f=a.options.footnoteLabelTagName||"h2",g=a.options.footnoteLabelProperties||{className:["sr-only"]},h=[],i=-1;for(;++i<a.footnoteOrder.length;){let e=a.footnoteById.get(a.footnoteOrder[i]);if(!e)continue;let f=a.all(e),g=String(e.identifier).toUpperCase(),j=bV(g.toLowerCase()),k=0,l=[],m=a.footnoteCounts.get(g);for(;void 0!==m&&++k<=m;){l.length>0&&l.push({type:"text",value:" "});let a="string"==typeof c?c:c(i,k);"string"==typeof a&&(a={type:"text",value:a}),l.push({type:"element",tagName:"a",properties:{href:"#"+b+"fnref-"+j+(k>1?"-"+k:""),dataFootnoteBackref:"",ariaLabel:"string"==typeof d?d:d(i,k),className:["data-footnote-backref"]},children:Array.isArray(a)?a:[a]})}let n=f[f.length-1];if(n&&"element"===n.type&&"p"===n.tagName){let a=n.children[n.children.length-1];a&&"text"===a.type?a.value+=" ":n.children.push({type:"text",value:" "}),n.children.push(...l)}else f.push(...l);let o={type:"element",tagName:"li",properties:{id:b+"fn-"+j},children:a.wrap(f,!0)};a.patch(e,o),h.push(o)}if(0!==h.length)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:f,properties:{...bU(g),id:"footnote-label"},children:[{type:"text",value:e}]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:a.wrap(h,!0)},{type:"text",value:"\n"}]}}(c),f=Array.isArray(d)?{type:"root",children:d}:d||{type:"root",children:[]};return e&&f.children.push({type:"text",value:"\n"},e),f}function cd(a,b){return a&&"run"in a?async function(c,d){let e=cc(c,{file:d,...b});await a.run(e,d)}:function(c,d){return cc(c,{file:d,...a||b})}}function ce(a){if(a)throw a}var cf=c(80210);function cg(a){if("object"!=typeof a||null===a)return!1;let b=Object.getPrototypeOf(a);return(null===b||b===Object.prototype||null===Object.getPrototypeOf(b))&&!(Symbol.toStringTag in a)&&!(Symbol.iterator in a)}var ch=c(76760),ci=c(1708);function cj(a){return!!(null!==a&&"object"==typeof a&&"href"in a&&a.href&&"protocol"in a&&a.protocol&&void 0===a.auth)}var ck=c(73136);let cl=["history","path","basename","stem","extname","dirname"];class cm{constructor(a){let b,c;b=a?cj(a)?{path:a}:"string"==typeof a||function(a){return!!(a&&"object"==typeof a&&"byteLength"in a&&"byteOffset"in a)}(a)?{value:a}:a:{},this.cwd="cwd"in b?"":ci.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let d=-1;for(;++d<cl.length;){let a=cl[d];a in b&&void 0!==b[a]&&null!==b[a]&&(this[a]="history"===a?[...b[a]]:b[a])}for(c in b)cl.includes(c)||(this[c]=b[c])}get basename(){return"string"==typeof this.path?ch.basename(this.path):void 0}set basename(a){co(a,"basename"),cn(a,"basename"),this.path=ch.join(this.dirname||"",a)}get dirname(){return"string"==typeof this.path?ch.dirname(this.path):void 0}set dirname(a){cp(this.basename,"dirname"),this.path=ch.join(a||"",this.basename)}get extname(){return"string"==typeof this.path?ch.extname(this.path):void 0}set extname(a){if(cn(a,"extname"),cp(this.dirname,"extname"),a){if(46!==a.codePointAt(0))throw Error("`extname` must start with `.`");if(a.includes(".",1))throw Error("`extname` cannot contain multiple dots")}this.path=ch.join(this.dirname,this.stem+(a||""))}get path(){return this.history[this.history.length-1]}set path(a){cj(a)&&(a=(0,ck.fileURLToPath)(a)),co(a,"path"),this.path!==a&&this.history.push(a)}get stem(){return"string"==typeof this.path?ch.basename(this.path,this.extname):void 0}set stem(a){co(a,"stem"),cn(a,"stem"),this.path=ch.join(this.dirname||"",a+(this.extname||""))}fail(a,b,c){let d=this.message(a,b,c);throw d.fatal=!0,d}info(a,b,c){let d=this.message(a,b,c);return d.fatal=void 0,d}message(a,b,c){let d=new Z(a,b,c);return this.path&&(d.name=this.path+":"+d.name,d.file=this.path),d.fatal=!1,this.messages.push(d),d}toString(a){return void 0===this.value?"":"string"==typeof this.value?this.value:new TextDecoder(a||void 0).decode(this.value)}}function cn(a,b){if(a&&a.includes(ch.sep))throw Error("`"+b+"` cannot be a path: did not expect `"+ch.sep+"`")}function co(a,b){if(!a)throw Error("`"+b+"` cannot be empty")}function cp(a,b){if(!a)throw Error("Setting `"+b+"` requires `path` to be set too")}let cq=function(a){let b=this.constructor.prototype,c=b[a],d=function(){return c.apply(d,arguments)};return Object.setPrototypeOf(d,b),d},cr={}.hasOwnProperty;class cs extends cq{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=function(){let a=[],b={run:function(...b){let c=-1,d=b.pop();if("function"!=typeof d)throw TypeError("Expected function as last argument, not "+d);!function e(f,...g){let h=a[++c],i=-1;if(f)return void d(f);for(;++i<b.length;)(null===g[i]||void 0===g[i])&&(g[i]=b[i]);b=g,h?(function(a,b){let c;return function(...b){let f,g=a.length>b.length;g&&b.push(d);try{f=a.apply(this,b)}catch(a){if(g&&c)throw a;return d(a)}g||(f&&f.then&&"function"==typeof f.then?f.then(e,d):f instanceof Error?d(f):e(f))};function d(a,...e){c||(c=!0,b(a,...e))}function e(a){d(null,a)}})(h,e)(...g):d(null,...g)}(null,...b)},use:function(c){if("function"!=typeof c)throw TypeError("Expected `middelware` to be a function, not "+c);return a.push(c),b}};return b}()}copy(){let a=new cs,b=-1;for(;++b<this.attachers.length;){let c=this.attachers[b];a.use(...c)}return a.data(cf(!0,{},this.namespace)),a}data(a,b){return"string"==typeof a?2==arguments.length?(cw("data",this.frozen),this.namespace[a]=b,this):cr.call(this.namespace,a)&&this.namespace[a]||void 0:a?(cw("data",this.frozen),this.namespace=a,this):this.namespace}freeze(){if(this.frozen)return this;for(;++this.freezeIndex<this.attachers.length;){let[a,...b]=this.attachers[this.freezeIndex];if(!1===b[0])continue;!0===b[0]&&(b[0]=void 0);let c=a.call(this,...b);"function"==typeof c&&this.transformers.use(c)}return this.frozen=!0,this.freezeIndex=1/0,this}parse(a){this.freeze();let b=cz(a),c=this.parser||this.Parser;return cu("parse",c),c(String(b),b)}process(a,b){let c=this;return this.freeze(),cu("process",this.parser||this.Parser),cv("process",this.compiler||this.Compiler),b?d(void 0,b):new Promise(d);function d(d,e){let f=cz(a),g=c.parse(f);function h(a,c){a||!c?e(a):d?d(c):b(void 0,c)}c.run(g,f,function(a,b,d){var e,f;if(a||!b||!d)return h(a);let g=c.stringify(b,d);"string"==typeof(e=g)||(f=e)&&"object"==typeof f&&"byteLength"in f&&"byteOffset"in f?d.value=g:d.result=g,h(a,d)})}}processSync(a){let b,c=!1;return this.freeze(),cu("processSync",this.parser||this.Parser),cv("processSync",this.compiler||this.Compiler),this.process(a,function(a,d){c=!0,ce(a),b=d}),cy("processSync","process",c),b}run(a,b,c){cx(a),this.freeze();let d=this.transformers;return c||"function"!=typeof b||(c=b,b=void 0),c?e(void 0,c):new Promise(e);function e(e,f){let g=cz(b);d.run(a,g,function(b,d,g){let h=d||a;b?f(b):e?e(h):c(void 0,h,g)})}}runSync(a,b){let c,d=!1;return this.run(a,b,function(a,b){ce(a),c=b,d=!0}),cy("runSync","run",d),c}stringify(a,b){this.freeze();let c=cz(b),d=this.compiler||this.Compiler;return cv("stringify",d),cx(a),d(a,c)}use(a,...b){let c=this.attachers,d=this.namespace;if(cw("use",this.frozen),null==a);else if("function"==typeof a)g(a,b);else if("object"==typeof a)Array.isArray(a)?f(a):e(a);else throw TypeError("Expected usable value, not `"+a+"`");return this;function e(a){if(!("plugins"in a)&&!("settings"in a))throw Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");f(a.plugins),a.settings&&(d.settings=cf(!0,d.settings,a.settings))}function f(a){let b=-1;if(null==a);else if(Array.isArray(a))for(;++b<a.length;){var c=a[b];if("function"==typeof c)g(c,[]);else if("object"==typeof c)if(Array.isArray(c)){let[a,...b]=c;g(a,b)}else e(c);else throw TypeError("Expected usable value, not `"+c+"`")}else throw TypeError("Expected a list of plugins, not `"+a+"`")}function g(a,b){let d=-1,e=-1;for(;++d<c.length;)if(c[d][0]===a){e=d;break}if(-1===e)c.push([a,...b]);else if(b.length>0){let[d,...f]=b,g=c[e][1];cg(g)&&cg(d)&&(d=cf(!0,g,d)),c[e]=[a,d,...f]}}}}let ct=new cs().freeze();function cu(a,b){if("function"!=typeof b)throw TypeError("Cannot `"+a+"` without `parser`")}function cv(a,b){if("function"!=typeof b)throw TypeError("Cannot `"+a+"` without `compiler`")}function cw(a,b){if(b)throw Error("Cannot call `"+a+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function cx(a){if(!cg(a)||"string"!=typeof a.type)throw TypeError("Expected node, got `"+a+"`")}function cy(a,b,c){if(!c)throw Error("`"+a+"` finished async. Use `"+b+"` instead")}function cz(a){var b;return(b=a)&&"object"==typeof b&&"message"in b&&"messages"in b?a:new cm(a)}let cA=[],cB={allowDangerousHtml:!0},cC=/^(https?|ircs?|mailto|xmpp)$/i,cD=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function cE(a){let b=function(a){let b=a.rehypePlugins||cA,c=a.remarkPlugins||cA,d=a.remarkRehypeOptions?{...a.remarkRehypeOptions,...cB}:cB;return ct().use(bL).use(c).use(cd,d).use(b)}(a),c=function(a){let b=a.children||"",c=new cm;return"string"==typeof b&&(c.value=b),c}(a);return function(a,b){let c=b.allowedElements,d=b.allowElement,e=b.components,f=b.disallowedElements,g=b.skipHtml,h=b.unwrapDisallowed,i=b.urlTransform||cF;for(let a of cD)Object.hasOwn(b,a.from)&&(a.from,a.to&&a.to,a.id);return b.className&&(a={type:"element",tagName:"div",properties:{className:b.className},children:"root"===a.type?a.children:[a]}),b0(a,function(a,b,e){if("raw"===a.type&&e&&"number"==typeof b)return g?e.children.splice(b,1):e.children[b]={type:"text",value:a.value},b;if("element"===a.type){let b;for(b in al)if(Object.hasOwn(al,b)&&Object.hasOwn(a.properties,b)){let c=a.properties[b],d=al[b];(null===d||d.includes(a.tagName))&&(a.properties[b]=i(String(c||""),b,a))}}if("element"===a.type){let g=c?!c.includes(a.tagName):!!f&&f.includes(a.tagName);if(!g&&d&&"number"==typeof b&&(g=!d(a,b,e)),g&&e&&"number"==typeof b)return h&&a.children?e.children.splice(b,1,...a.children):e.children.splice(b,1),b}}),function(a,b){var c,d,e,f;let g;if(!b||void 0===b.Fragment)throw TypeError("Expected `Fragment` in options");let h=b.filePath||void 0;if(b.development){if("function"!=typeof b.jsxDEV)throw TypeError("Expected `jsxDEV` in options when `development: true`");c=h,d=b.jsxDEV,g=function(a,b,e,f){let g=Array.isArray(e.children),h=T(a);return d(b,e,f,g,{columnNumber:h?h.column-1:void 0,fileName:c,lineNumber:h?h.line:void 0},void 0)}}else{if("function"!=typeof b.jsx)throw TypeError("Expected `jsx` in production options");if("function"!=typeof b.jsxs)throw TypeError("Expected `jsxs` in production options");e=b.jsx,f=b.jsxs,g=function(a,b,c,d){let g=Array.isArray(c.children)?f:e;return d?g(b,c,d):g(b,c)}}let i={Fragment:b.Fragment,ancestors:[],components:b.components||{},create:g,elementAttributeNameCase:b.elementAttributeNameCase||"react",evaluater:b.createEvaluater?b.createEvaluater():void 0,filePath:h,ignoreInvalidStyle:b.ignoreInvalidStyle||!1,passKeys:!1!==b.passKeys,passNode:b.passNode||!1,schema:"svg"===b.space?K:J,stylePropertyNameCase:b.stylePropertyNameCase||"dom",tableCellAlignToStyle:!1!==b.tableCellAlignToStyle},j=ae(i,a,void 0);return j&&"string"!=typeof j?j:i.create(a,i.Fragment,{children:j||void 0},void 0)}(a,{Fragment:am.Fragment,components:e,ignoreInvalidStyle:!0,jsx:am.jsx,jsxs:am.jsxs,passKeys:!0,passNode:!0})}(b.runSync(b.parse(c),c),a)}function cF(a){let b=a.indexOf(":"),c=a.indexOf("?"),d=a.indexOf("#"),e=a.indexOf("/");return -1===b||-1!==e&&b>e||-1!==c&&b>c||-1!==d&&b>d||cC.test(a.slice(0,b))?a:""}}};
|