mcp-researchpowerpack 6.0.12 → 6.0.14

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/README.md CHANGED
@@ -14,7 +14,7 @@ Built on [mcp-use](https://github.com/nicepkg/mcp-use). No stdio, HTTP only.
14
14
  | `web-search` | parallel Google search, up to 50 queries per call, parallel-callable across turns. `scope: "web" \| "reddit" \| "both"` — reddit mode filters to post permalinks. Returns tiered markdown (HIGHLY_RELEVANT / MAYBE_RELEVANT / OTHER) + grounded synthesis + gaps + refine suggestions. | `SERPER_API_KEY` |
15
15
  | `scrape-links` | fetch URLs in parallel with per-URL LLM extraction. Auto-detects `reddit.com/r/.../comments/` permalinks and routes them through the Reddit API (threaded post + comments); PDF / DOCX / PPTX / XLSX URLs route through Jina Reader; non-reddit, non-document web URLs flow through Scrape.do. Parallel-callable. | `SCRAPEDO_API_KEY` for web URLs (+ `REDDIT_CLIENT_ID` / `REDDIT_CLIENT_SECRET` for reddit URLs; optional `JINA_API_KEY` for higher document limits) |
16
16
 
17
- Also exposes `/health`, `health://status`, and two optional MCP prompts: `deep-research` and `reddit-sentiment`.
17
+ Also exposes `/health` and `health://status`.
18
18
 
19
19
  ## workflow
20
20
 
@@ -130,9 +130,8 @@ index.ts server startup, cors, health, shutdown
130
130
  src/
131
131
  config/ env parsing, capability detection, lazy proxy config
132
132
  clients/ provider API clients (serper, reddit, scrapedo, jina)
133
- prompts/ optional MCP prompts for deep-research and reddit-sentiment
134
133
  tools/
135
- registry.ts registerAllTools() — wires 3 tools + 2 prompts
134
+ registry.ts registerAllTools() — wires 3 tools
136
135
  start-research.ts goal-tailored brief + static playbook
137
136
  search.ts web-search handler (with CTR-weighted URL aggregation + LLM classification)
138
137
  scrape.ts scrape-links handler (reddit + web + document branches in parallel)
package/dist/mcp-use.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "includeInspector": false,
3
- "buildTime": "2026-04-30T14:37:44.640Z",
4
- "buildId": "3a668f138fddb479",
3
+ "buildTime": "2026-04-30T14:54:12.440Z",
4
+ "buildId": "339e3b03d0a912e0",
5
5
  "entryPoint": "dist/index.js",
6
6
  "widgets": {}
7
7
  }
@@ -1,5 +1,3 @@
1
- import { registerDeepResearchPrompt } from "../prompts/deep-research.js";
2
- import { registerRedditSentimentPrompt } from "../prompts/reddit-sentiment.js";
3
1
  import { registerScrapeLinksTool } from "./scrape.js";
4
2
  import { registerWebSearchTool } from "./search.js";
5
3
  import { registerStartResearchTool } from "./start-research.js";
@@ -7,8 +5,6 @@ function registerAllTools(server) {
7
5
  registerStartResearchTool(server);
8
6
  registerWebSearchTool(server);
9
7
  registerScrapeLinksTool(server);
10
- registerDeepResearchPrompt(server);
11
- registerRedditSentimentPrompt(server);
12
8
  }
13
9
  export {
14
10
  registerAllTools
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/tools/registry.ts"],
4
- "sourcesContent": ["import type { MCPServer } from 'mcp-use/server';\n\nimport { registerDeepResearchPrompt } from '../prompts/deep-research.js';\nimport { registerRedditSentimentPrompt } from '../prompts/reddit-sentiment.js';\nimport { registerScrapeLinksTool } from './scrape.js';\nimport { registerWebSearchTool } from './search.js';\nimport { registerStartResearchTool } from './start-research.js';\n\nexport function registerAllTools(server: MCPServer): void {\n // 3 research tools. get-reddit-post was merged into scrape-links (auto-detects\n // reddit.com URLs). search-reddit was replaced by web-search with scope=\"reddit\".\n registerStartResearchTool(server);\n registerWebSearchTool(server);\n registerScrapeLinksTool(server);\n registerDeepResearchPrompt(server);\n registerRedditSentimentPrompt(server);\n}\n"],
5
- "mappings": "AAEA,SAAS,kCAAkC;AAC3C,SAAS,qCAAqC;AAC9C,SAAS,+BAA+B;AACxC,SAAS,6BAA6B;AACtC,SAAS,iCAAiC;AAEnC,SAAS,iBAAiB,QAAyB;AAGxD,4BAA0B,MAAM;AAChC,wBAAsB,MAAM;AAC5B,0BAAwB,MAAM;AAC9B,6BAA2B,MAAM;AACjC,gCAA8B,MAAM;AACtC;",
4
+ "sourcesContent": ["import type { MCPServer } from 'mcp-use/server';\n\nimport { registerScrapeLinksTool } from './scrape.js';\nimport { registerWebSearchTool } from './search.js';\nimport { registerStartResearchTool } from './start-research.js';\n\nexport function registerAllTools(server: MCPServer): void {\n // 3 research tools. get-reddit-post was merged into scrape-links (auto-detects\n // reddit.com URLs). search-reddit was replaced by web-search with scope=\"reddit\".\n registerStartResearchTool(server);\n registerWebSearchTool(server);\n registerScrapeLinksTool(server);\n}\n"],
5
+ "mappings": "AAEA,SAAS,+BAA+B;AACxC,SAAS,6BAA6B;AACtC,SAAS,iCAAiC;AAEnC,SAAS,iBAAiB,QAAyB;AAGxD,4BAA0B,MAAM;AAChC,wBAAsB,MAAM;AAC5B,0BAAwB,MAAM;AAChC;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-researchpowerpack",
3
- "version": "6.0.12",
3
+ "version": "6.0.14",
4
4
  "description": "HTTP-first MCP research server: start-research (goal-tailored brief), web-search (with Reddit scope), scrape-links (auto-detects Reddit URLs) — built on mcp-use.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,45 +0,0 @@
1
- import { text } from "mcp-use/server";
2
- import { z } from "zod";
3
- function registerDeepResearchPrompt(server) {
4
- server.prompt(
5
- {
6
- name: "deep-research",
7
- title: "Deep Research",
8
- description: "Multi-pass research loop on a topic using the research-powerpack tools.",
9
- schema: z.object({
10
- topic: z.string().describe('Topic to research. Be specific about what "done" looks like \u2014 the first tool call will generate a goal-tailored research brief from it.')
11
- })
12
- },
13
- async ({ topic }) => text(
14
- [
15
- "You are a research agent using the research-powerpack MCP tools (3 tools: `start-research`, `web-search`, `scrape-links`). You are running a research LOOP, not answering from memory \u2014 every non-trivial claim in your final answer must be traceable to a `scrape-links` excerpt. Never cite a URL from a `web-search` snippet alone.",
16
- "",
17
- `Research goal: ${topic}`,
18
- "",
19
- "## Workflow",
20
- "",
21
- "1. **Call `start-research` with `goal` = the research goal above.** The server returns a goal-tailored brief: classified goal type, `primary_branch` (reddit / web / both), the exact `first_call_sequence`, 25\u201350 keyword seeds for your first `web-search` call, iteration hints, gaps to watch, and stop criteria.",
22
- "2. **Fire `first_call_sequence` in order.**",
23
- ' - `primary_branch: web` \u2192 one `web-search` (scope: "web") with all keyword seeds in a flat `queries` array, then one `scrape-links` on the HIGHLY_RELEVANT + 2\u20133 best MAYBE_RELEVANT URLs.',
24
- ' - `primary_branch: reddit` \u2192 one `web-search` (scope: "reddit") with the seeds, then one `scrape-links` on the best post permalinks (auto-detected \u2192 Reddit API threaded post + comments).',
25
- ' - `primary_branch: both` \u2192 two parallel `web-search` calls in one turn (scope: "web" + scope: "reddit"), then one merged `scrape-links`.',
26
- ' Set `extract` on `web-search` to a specific description of what "relevant" means for this goal (not just a keyword).',
27
- "3. **Read the classifier output**: `synthesis` (grounded in `[rank]` citations), `gaps` (each with an id), `refine_queries` (follow-ups linked to gap ids). If confidence is `low`, trust the `gaps` list more than the synthesis.",
28
- "4. **Read every scrape extract**. Each page returns `## Source`, `## Matches` (verbatim facts), `## Not found` (admitted gaps), `## Follow-up signals` (new terms + referenced-but-unscraped URLs). Harvest from `## Follow-up signals` \u2014 those terms seed your next `web-search` round.",
29
- "5. **Loop**: build the next `web-search` with the harvested terms + classifier-suggested refines. Scrape HIGHLY_RELEVANT URLs in contextually grouped parallel `scrape-links` calls (docs in one call, reddit threads in another). Stop when every `gaps_to_watch` item is closed AND no new terms appeared, OR after 4 passes \u2014 whichever comes first.",
30
- "",
31
- "## Output discipline",
32
- "",
33
- "- Cite URL (or Reddit permalink) for every non-trivial claim.",
34
- "- Quote verbatim: numbers, versions, API names, prices, error messages, stacktraces, people's words.",
35
- "- Separate documented facts from inferred conclusions explicitly.",
36
- "- Include scrape dates on time-sensitive claims.",
37
- "- If any `stop_criteria` item from the brief is unmet, say so \u2014 do not paper over it."
38
- ].join("\n")
39
- )
40
- );
41
- }
42
- export {
43
- registerDeepResearchPrompt
44
- };
45
- //# sourceMappingURL=deep-research.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/prompts/deep-research.ts"],
4
- "sourcesContent": ["import { text, type MCPServer } from 'mcp-use/server';\nimport { z } from 'zod';\n\nexport function registerDeepResearchPrompt(server: MCPServer): void {\n server.prompt(\n {\n name: 'deep-research',\n title: 'Deep Research',\n description: 'Multi-pass research loop on a topic using the research-powerpack tools.',\n schema: z.object({\n topic: z.string().describe('Topic to research. Be specific about what \"done\" looks like \u2014 the first tool call will generate a goal-tailored research brief from it.'),\n }),\n },\n async ({ topic }) => text(\n [\n 'You are a research agent using the research-powerpack MCP tools (3 tools: `start-research`, `web-search`, `scrape-links`). You are running a research LOOP, not answering from memory \u2014 every non-trivial claim in your final answer must be traceable to a `scrape-links` excerpt. Never cite a URL from a `web-search` snippet alone.',\n '',\n `Research goal: ${topic}`,\n '',\n '## Workflow',\n '',\n '1. **Call `start-research` with `goal` = the research goal above.** The server returns a goal-tailored brief: classified goal type, `primary_branch` (reddit / web / both), the exact `first_call_sequence`, 25\u201350 keyword seeds for your first `web-search` call, iteration hints, gaps to watch, and stop criteria.',\n '2. **Fire `first_call_sequence` in order.**',\n ' - `primary_branch: web` \u2192 one `web-search` (scope: \"web\") with all keyword seeds in a flat `queries` array, then one `scrape-links` on the HIGHLY_RELEVANT + 2\u20133 best MAYBE_RELEVANT URLs.',\n ' - `primary_branch: reddit` \u2192 one `web-search` (scope: \"reddit\") with the seeds, then one `scrape-links` on the best post permalinks (auto-detected \u2192 Reddit API threaded post + comments).',\n ' - `primary_branch: both` \u2192 two parallel `web-search` calls in one turn (scope: \"web\" + scope: \"reddit\"), then one merged `scrape-links`.',\n ' Set `extract` on `web-search` to a specific description of what \"relevant\" means for this goal (not just a keyword).',\n '3. **Read the classifier output**: `synthesis` (grounded in `[rank]` citations), `gaps` (each with an id), `refine_queries` (follow-ups linked to gap ids). If confidence is `low`, trust the `gaps` list more than the synthesis.',\n '4. **Read every scrape extract**. Each page returns `## Source`, `## Matches` (verbatim facts), `## Not found` (admitted gaps), `## Follow-up signals` (new terms + referenced-but-unscraped URLs). Harvest from `## Follow-up signals` \u2014 those terms seed your next `web-search` round.',\n '5. **Loop**: build the next `web-search` with the harvested terms + classifier-suggested refines. Scrape HIGHLY_RELEVANT URLs in contextually grouped parallel `scrape-links` calls (docs in one call, reddit threads in another). Stop when every `gaps_to_watch` item is closed AND no new terms appeared, OR after 4 passes \u2014 whichever comes first.',\n '',\n '## Output discipline',\n '',\n '- Cite URL (or Reddit permalink) for every non-trivial claim.',\n '- Quote verbatim: numbers, versions, API names, prices, error messages, stacktraces, people\\'s words.',\n '- Separate documented facts from inferred conclusions explicitly.',\n '- Include scrape dates on time-sensitive claims.',\n '- If any `stop_criteria` item from the brief is unmet, say so \u2014 do not paper over it.',\n ].join('\\n'),\n ),\n );\n}\n"],
5
- "mappings": "AAAA,SAAS,YAA4B;AACrC,SAAS,SAAS;AAEX,SAAS,2BAA2B,QAAyB;AAClE,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,QAAQ,EAAE,OAAO;AAAA,QACf,OAAO,EAAE,OAAO,EAAE,SAAS,8IAAyI;AAAA,MACtK,CAAC;AAAA,IACH;AAAA,IACA,OAAO,EAAE,MAAM,MAAM;AAAA,MACnB;AAAA,QACE;AAAA,QACA;AAAA,QACA,kBAAkB,KAAK;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,47 +0,0 @@
1
- import { text } from "mcp-use/server";
2
- import { z } from "zod";
3
- function registerRedditSentimentPrompt(server) {
4
- server.prompt(
5
- {
6
- name: "reddit-sentiment",
7
- title: "Reddit Sentiment",
8
- description: "Research Reddit sentiment for a topic using the research-powerpack tools \u2014 lived experience, migration stories, agreement/dissent distribution.",
9
- schema: z.object({
10
- topic: z.string().describe('Topic to evaluate. Phrase it as a sentiment question \u2014 "what developers actually think about X", "why teams moved from X to Y".'),
11
- subreddits: z.string().optional().describe('Optional comma-separated subreddit filters, e.g. "webdev,javascript".')
12
- })
13
- },
14
- async ({ topic, subreddits }) => {
15
- const subredditList = subreddits ? subreddits.split(",").map((value) => value.trim().replace(/^\/?r\//i, "")).filter(Boolean) : [];
16
- const subredditScope = subredditList.length ? ` Scope Reddit searches to ${subredditList.map((s) => `r/${s}`).join(", ")} when possible.` : "";
17
- return text(
18
- [
19
- "You are a research agent using the research-powerpack MCP tools (3 tools: `start-research`, `web-search`, `scrape-links`) to characterize Reddit sentiment. You are running a research LOOP, not answering from memory. Sentiment claims must be traceable to specific Reddit threads you expanded via `scrape-links` \u2014 never cite a thread you have not scraped.",
20
- "",
21
- `Research goal: Reddit sentiment on "${topic}" \u2014 agreement distribution, dissent distribution, representative verbatim quotes with attribution, and the strongest causal explanations.${subredditScope}`,
22
- "",
23
- "## Workflow",
24
- "",
25
- "1. **Call `start-research` with `goal` = the research goal above.** The brief will classify this as `sentiment`, set `primary_branch` to `reddit` (or `both` if official sources also matter), and list 25\u201350 seed queries ready for `web-search`.",
26
- '2. **Fire two parallel `web-search` calls in one turn** \u2014 one with `scope: "reddit"` for post-permalink discovery, one with `scope: "web"` for supporting evidence (post-mortems, blog write-ups, GitHub issues). Set `extract` to describe the shape of the sentiment answer: "agreement reasons | dissent reasons | representative quotes | migration drivers".',
27
- "3. **Shortlist the strongest Reddit threads** \u2014 those with (a) high comment count, (b) visible disagreement in replies, (c) specific stack/environment details from the OP. Avoid single-comment threads.",
28
- "4. **Fetch with `scrape-links`** \u2014 batch 3\u201310 reddit.com post permalinks in one call. `scrape-links` auto-detects `reddit.com/r/.../comments/` URLs and routes them through the Reddit API (threaded post + full comment tree). Read every comment tree end-to-end, not just the top-voted reply.",
29
- '5. **Scrape supporting evidence** with another `scrape-links` call (in parallel, different call from the reddit batch) \u2014 blog post-mortems, GitHub issues, HN discussions referenced in the threads. Use `extract` = "concrete reasons | stack details | version numbers | outcome". The extractor preserves verbatim quotes and surfaces referenced-but-unscraped URLs under `## Follow-up signals`.',
30
- '6. **Loop**: if the classifier flags gaps ("no dissent voices captured", "no migration timeline") or brief `gaps_to_watch` are unmet, build new queries and run another pass. Stop after 4 passes or when sentiment distribution stabilizes across two passes.',
31
- "",
32
- "## Output discipline",
33
- "",
34
- '- Report sentiment as a distribution ("~N of M replies agreed / ~K dissented / rest off-topic"), not a single mood label.',
35
- "- Cite every quote with the Reddit thread permalink plus `u/username` attribution.",
36
- "- Separate OP claims from reply-thread consensus \u2014 they often diverge.",
37
- "- If dissent is present, surface the strongest dissenting quote verbatim, even if the majority view dominates.",
38
- "- Include the scrape date on every time-sensitive claim."
39
- ].join("\n")
40
- );
41
- }
42
- );
43
- }
44
- export {
45
- registerRedditSentimentPrompt
46
- };
47
- //# sourceMappingURL=reddit-sentiment.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/prompts/reddit-sentiment.ts"],
4
- "sourcesContent": ["import { text, type MCPServer } from 'mcp-use/server';\nimport { z } from 'zod';\n\nexport function registerRedditSentimentPrompt(server: MCPServer): void {\n server.prompt(\n {\n name: 'reddit-sentiment',\n title: 'Reddit Sentiment',\n description: 'Research Reddit sentiment for a topic using the research-powerpack tools \u2014 lived experience, migration stories, agreement/dissent distribution.',\n schema: z.object({\n topic: z.string().describe('Topic to evaluate. Phrase it as a sentiment question \u2014 \"what developers actually think about X\", \"why teams moved from X to Y\".'),\n subreddits: z.string().optional().describe('Optional comma-separated subreddit filters, e.g. \"webdev,javascript\".'),\n }),\n },\n async ({ topic, subreddits }) => {\n const subredditList = subreddits\n ? subreddits\n .split(',')\n .map((value) => value.trim().replace(/^\\/?r\\//i, ''))\n .filter(Boolean)\n : [];\n const subredditScope = subredditList.length\n ? ` Scope Reddit searches to ${subredditList.map((s) => `r/${s}`).join(', ')} when possible.`\n : '';\n\n return text(\n [\n 'You are a research agent using the research-powerpack MCP tools (3 tools: `start-research`, `web-search`, `scrape-links`) to characterize Reddit sentiment. You are running a research LOOP, not answering from memory. Sentiment claims must be traceable to specific Reddit threads you expanded via `scrape-links` \u2014 never cite a thread you have not scraped.',\n '',\n `Research goal: Reddit sentiment on \"${topic}\" \u2014 agreement distribution, dissent distribution, representative verbatim quotes with attribution, and the strongest causal explanations.${subredditScope}`,\n '',\n '## Workflow',\n '',\n '1. **Call `start-research` with `goal` = the research goal above.** The brief will classify this as `sentiment`, set `primary_branch` to `reddit` (or `both` if official sources also matter), and list 25\u201350 seed queries ready for `web-search`.',\n '2. **Fire two parallel `web-search` calls in one turn** \u2014 one with `scope: \"reddit\"` for post-permalink discovery, one with `scope: \"web\"` for supporting evidence (post-mortems, blog write-ups, GitHub issues). Set `extract` to describe the shape of the sentiment answer: \"agreement reasons | dissent reasons | representative quotes | migration drivers\".',\n '3. **Shortlist the strongest Reddit threads** \u2014 those with (a) high comment count, (b) visible disagreement in replies, (c) specific stack/environment details from the OP. Avoid single-comment threads.',\n '4. **Fetch with `scrape-links`** \u2014 batch 3\u201310 reddit.com post permalinks in one call. `scrape-links` auto-detects `reddit.com/r/.../comments/` URLs and routes them through the Reddit API (threaded post + full comment tree). Read every comment tree end-to-end, not just the top-voted reply.',\n '5. **Scrape supporting evidence** with another `scrape-links` call (in parallel, different call from the reddit batch) \u2014 blog post-mortems, GitHub issues, HN discussions referenced in the threads. Use `extract` = \"concrete reasons | stack details | version numbers | outcome\". The extractor preserves verbatim quotes and surfaces referenced-but-unscraped URLs under `## Follow-up signals`.',\n '6. **Loop**: if the classifier flags gaps (\"no dissent voices captured\", \"no migration timeline\") or brief `gaps_to_watch` are unmet, build new queries and run another pass. Stop after 4 passes or when sentiment distribution stabilizes across two passes.',\n '',\n '## Output discipline',\n '',\n '- Report sentiment as a distribution (\"~N of M replies agreed / ~K dissented / rest off-topic\"), not a single mood label.',\n '- Cite every quote with the Reddit thread permalink plus `u/username` attribution.',\n '- Separate OP claims from reply-thread consensus \u2014 they often diverge.',\n '- If dissent is present, surface the strongest dissenting quote verbatim, even if the majority view dominates.',\n '- Include the scrape date on every time-sensitive claim.',\n ].join('\\n'),\n );\n },\n );\n}\n"],
5
- "mappings": "AAAA,SAAS,YAA4B;AACrC,SAAS,SAAS;AAEX,SAAS,8BAA8B,QAAyB;AACrE,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,QAAQ,EAAE,OAAO;AAAA,QACf,OAAO,EAAE,OAAO,EAAE,SAAS,sIAAiI;AAAA,QAC5J,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uEAAuE;AAAA,MACpH,CAAC;AAAA,IACH;AAAA,IACA,OAAO,EAAE,OAAO,WAAW,MAAM;AAC/B,YAAM,gBAAgB,aAClB,WACG,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,EAAE,QAAQ,YAAY,EAAE,CAAC,EACnD,OAAO,OAAO,IACjB,CAAC;AACL,YAAM,iBAAiB,cAAc,SACjC,6BAA6B,cAAc,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,oBAC1E;AAEJ,aAAO;AAAA,QACL;AAAA,UACE;AAAA,UACA;AAAA,UACA,uCAAuC,KAAK,iJAA4I,cAAc;AAAA,UACtM;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;",
6
- "names": []
7
- }