@modootoday/datalab-extension-mcp 1.9.3 → 1.10.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/README.en.md CHANGED
@@ -61,7 +61,7 @@ One command finds **every** AI app on your computer and connects them automatica
61
61
  2. **Paste this command and press Enter.** The saved command names an exact bootstrap version. At startup and while idle, the connector checks the canonical release and promotes itself to the current secure, compatible version. Diagnostic environments can opt out with `--no-self-update`.
62
62
 
63
63
  ```
64
- npx -y @modootoday/datalab-extension-mcp@1.9.3 install
64
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 install
65
65
  ```
66
66
 
67
67
  Lines of English scrolling by is normal. This only downloads and runs the connector — it touches nothing else.
@@ -151,10 +151,10 @@ diagnosis, Place reputation, Pumasi, photo/video production, and automatic tool
151
151
  discovery. Press Enter to keep the recommended set.
152
152
 
153
153
  ```
154
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills list
155
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills status
156
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills attach <name>
157
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills detach <name>
154
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills list
155
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills status
156
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills attach <name>
157
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills detach <name>
158
158
  ```
159
159
 
160
160
  - `list` shows everything in this version, name and description.
@@ -240,7 +240,7 @@ _(The DataLab Tools panel is closed in Chrome. Open Chrome, keep the panel open,
240
240
 
241
241
  Exactly what it says. Open Chrome, keep the DataLab Tools side panel open, and it works immediately.
242
242
 
243
- ### I only see 11 tools
243
+ ### I only see 9 tools
244
244
 
245
245
  That's expected — **it's deliberate.**
246
246
 
@@ -254,7 +254,7 @@ Nothing is out of reach because of it. Ask for something that isn't in the list
254
254
  Local fuzzy matching covers spacing, inflection, and minor typos. The only cost is
255
255
  that extra step: **the first call to a given tool can be a second or two slower.**
256
256
 
257
- If the AI says a feature doesn't exist, tell it: **"check your tool catalog and
257
+ If the AI says a feature doesn't exist, tell it: **"search the hidden tools and
258
258
  answer again."**
259
259
 
260
260
  ### The card is green but your AI app can't find the tools
@@ -273,7 +273,7 @@ Start it again after a full quit and it picks the tools up. If they still aren't
273
273
  - **When the connection disappears** — run the very command you used at the start once more; it safely re-registers. (Some AI apps clean up their settings file and drop the connection.)
274
274
 
275
275
  ```
276
- npx -y @modootoday/datalab-extension-mcp@1.9.3 install
276
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 install
277
277
  ```
278
278
 
279
279
  - **`'npx' is not recognized...`** — Node.js isn't installed. The "No Node.js?" one-liner in Step 2 is the simplest fix.
@@ -303,7 +303,7 @@ Start it again after a full quit and it picks the tools up. If they still aren't
303
303
  1. Run this in a terminal (it removes the entries registered in your AI apps).
304
304
 
305
305
  ```
306
- npx -y @modootoday/datalab-extension-mcp@1.9.3 uninstall
306
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 uninstall
307
307
  ```
308
308
 
309
309
  2. Turn **MCP 연결** off in the extension settings. The panel is the bridge, so with it off a leftover config line can look nothing up.
package/README.md CHANGED
@@ -55,7 +55,7 @@ Claude 같은 AI 앱을 데이터랩툴즈에 연결해 주는 작은 무료 프
55
55
  2. **아래 명령을 붙여넣고 Enter를 눌러요.** 저장되는 명령은 정확한 시작 버전을 적습니다. 연결 프로그램은 시작할 때와 유휴 상태에서 정본 릴리스를 확인해 현재의 안전하고 호환되는 버전으로 승격합니다. 진단 환경에서는 `--no-self-update`로 승격을 끌 수 있어요.
56
56
 
57
57
  ```
58
- npx -y @modootoday/datalab-extension-mcp@1.9.3 install
58
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 install
59
59
  ```
60
60
 
61
61
  영어 글자가 여러 줄 올라오는 건 정상이에요. 이 명령은 연결 프로그램을 다운로드해 실행할 뿐, 다른 건 건드리지 않아요.
@@ -137,10 +137,10 @@ Claude 같은 AI 앱을 데이터랩툴즈에 연결해 주는 작은 무료 프
137
137
  도움말을 번호로 여러 개 고를 수 있어요. Enter를 누르면 추천 구성만 설치됩니다.
138
138
 
139
139
  ```
140
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills list
141
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills status
142
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills attach <이름>
143
- npx -y @modootoday/datalab-extension-mcp@1.9.3 skills detach <이름>
140
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills list
141
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills status
142
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills attach <이름>
143
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 skills detach <이름>
144
144
  ```
145
145
 
146
146
  - `list` 는 이 버전에 들어 있는 전부를 이름과 설명으로 보여 줘요.
@@ -210,7 +210,7 @@ MCP 를 켜 두었지만 **네이버 페이지가 한 곳도 열려 있지 않
210
210
 
211
211
  말 그대로예요. Chrome을 열고 데이터랩툴즈 사이드 패널을 열어 두면 바로 동작해요.
212
212
 
213
- ### 도구가 11개밖에 안 보여요
213
+ ### 도구가 9개밖에 안 보여요
214
214
 
215
215
  정상이에요. **일부러 그렇게 보냅니다.**
216
216
 
@@ -222,7 +222,7 @@ MCP 를 켜 두었지만 **네이버 페이지가 한 곳도 열려 있지 않
222
222
  보내 후보와 인자 형식을 받은 뒤 실행합니다. 조사 변화·띄어쓰기·가벼운 오타도 로컬 유사도
223
223
  검색으로 보완합니다. 처음 부르는 도구는 이 조회 때문에 답이 1~2초 늦을 수 있어요.
224
224
 
225
- AI가 "그런 기능은 없다" 고 답하면, **"도구 목록을 확인해 보고 다시 답해줘"** 라고 한 번
225
+ AI가 "그런 기능은 없다" 고 답하면, **"숨은 도구를 찾아보고 다시 답해줘"** 라고 한 번
226
226
  말해 주세요.
227
227
 
228
228
  ### 카드는 초록색인데 AI 앱이 도구를 못 찾을 때
@@ -241,7 +241,7 @@ AI가 "그런 기능은 없다" 고 답하면, **"도구 목록을 확인해 보
241
241
  - **연결이 사라졌을 때** — 처음 실행했던 그 명령을 한 번 더 실행하면 안전하게 다시 등록돼요. (일부 AI 앱이 설정 파일을 정리하며 연결을 지우기도 해요.)
242
242
 
243
243
  ```
244
- npx -y @modootoday/datalab-extension-mcp@1.9.3 install
244
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 install
245
245
  ```
246
246
 
247
247
  - **`'npx'을(는) 내부 또는 외부 명령...`** — Node.js가 없는 거예요. 위 2단계의 "Node.js가 없다면" 한 줄 설치가 가장 간단해요.
@@ -271,7 +271,7 @@ AI가 "그런 기능은 없다" 고 답하면, **"도구 목록을 확인해 보
271
271
  1. 터미널에서 아래 명령을 실행해요(AI 앱에 등록된 설정을 지워 줘요).
272
272
 
273
273
  ```
274
- npx -y @modootoday/datalab-extension-mcp@1.9.3 uninstall
274
+ npx -y @modootoday/datalab-extension-mcp@1.10.1 uninstall
275
275
  ```
276
276
 
277
277
  2. 확장 설정에서 **MCP 연결을 꺼요.** 패널이 브릿지라, 꺼 두면 어딘가 설정 줄이 남아 있어도 AI 앱이 아무것도 조회할 수 없어요.
@@ -2,7 +2,7 @@ import {
2
2
  __export
3
3
  } from "./chunk-MLKGABMK.js";
4
4
 
5
- // ../mcp-server/dist/chunk-TL23JBYI.js
5
+ // ../mcp-server/dist/chunk-QN4NC2NW.js
6
6
  import { createHash } from "crypto";
7
7
  import { createHash as createHash2, randomUUID } from "crypto";
8
8
  import { mkdir, readFile, readdir, rm, writeFile } from "fs/promises";
@@ -1357,7 +1357,7 @@ function defineBound(proto, key, fn) {
1357
1357
  Object.defineProperty(proto, key, {
1358
1358
  configurable: true,
1359
1359
  get() {
1360
- return own(this, key, fn.bind(this));
1360
+ return this == null ? fn : own(this, key, fn.bind(this));
1361
1361
  },
1362
1362
  set(value) {
1363
1363
  own(this, key, value);
@@ -2633,7 +2633,7 @@ ${content.join("\n")}
2633
2633
  var version = {
2634
2634
  major: 4,
2635
2635
  minor: 5,
2636
- patch: 1
2636
+ patch: 2
2637
2637
  };
2638
2638
  var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
2639
2639
  var _a32;
@@ -16494,7 +16494,7 @@ var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
16494
16494
  },
16495
16495
  // `spa` is an alias: same function object as `safeParseAsync`, as before.
16496
16496
  get spa() {
16497
- return this.safeParseAsync;
16497
+ return this?.safeParseAsync;
16498
16498
  },
16499
16499
  set spa(value) {
16500
16500
  util_exports.own(this, "spa", value);
@@ -16523,11 +16523,8 @@ var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
16523
16523
  async safeDecodeAsync(data, params) {
16524
16524
  return safeDecodeAsync2(this, data, params);
16525
16525
  },
16526
- get toJSONSchema() {
16527
- return util_exports.own(this, "toJSONSchema", createToJSONSchemaMethod(this, {}));
16528
- },
16529
- set toJSONSchema(value) {
16530
- util_exports.own(this, "toJSONSchema", value);
16526
+ toJSONSchema(params) {
16527
+ return createToJSONSchemaMethod(this, {})(params);
16531
16528
  },
16532
16529
  // Reads through to the registry on every access, so it must not cache.
16533
16530
  get description() {
@@ -19247,6 +19244,7 @@ var REASON_POLICY = Object.freeze({
19247
19244
  browser_required: Object.freeze({ retryable: false }),
19248
19245
  tool_closed: Object.freeze({ retryable: false }),
19249
19246
  missing_in_build: Object.freeze({ retryable: false }),
19247
+ upstream_not_found: Object.freeze({ retryable: false }),
19250
19248
  // --- A human must act; re-calling only nags them ---
19251
19249
  needs_consent: Object.freeze({ retryable: false }),
19252
19250
  not_confirmed: Object.freeze({ retryable: false }),
@@ -19322,312 +19320,7 @@ function projectTools(descriptors) {
19322
19320
  }
19323
19321
  return { tools, rejected };
19324
19322
  }
19325
- var BLOG_BRIEF = [
19326
- "my_daily_brief",
19327
- "my_blog_summary",
19328
- "my_realtime",
19329
- "my_traffic_series",
19330
- "my_top_content",
19331
- "my_soaring",
19332
- "my_publish_calendar",
19333
- "daily_trend",
19334
- "my_moments"
19335
- ];
19336
- var BLOG_INSIGHTS = [
19337
- "my_content_audience",
19338
- "my_inflow",
19339
- "my_audience",
19340
- "my_inflow_domain",
19341
- "my_country",
19342
- "my_device",
19343
- "my_dwell",
19344
- "my_followers",
19345
- "my_revisit",
19346
- "my_revenue",
19347
- "my_impression_click",
19348
- "my_impression_ranks",
19349
- "my_channels",
19350
- "my_revenue_ranks",
19351
- "my_revenue_efficiency",
19352
- "my_content_info",
19353
- "my_content_read",
19354
- "my_content_detail",
19355
- "my_content_inflow"
19356
- ];
19357
- var RESEARCH = [
19358
- // Caught by serp-watch's "search_" prefix, but this group's own steps open
19359
- // by calling it. A step naming a tool the group does not contain sends the
19360
- // caller to a catalog page it is not on.
19361
- "search_keywords",
19362
- "local_regions",
19363
- "local_job_categories",
19364
- "local_region_trend",
19365
- "local_area_category_rank",
19366
- "content_volume",
19367
- "autocomplete_keywords",
19368
- "qra_keywords",
19369
- "kin_question_demand",
19370
- "web_read",
19371
- "run_research",
19372
- // Planning tools: they need a model but call none here, returning prompt
19373
- // material instead. Grouped by job — all three design a post not yet written.
19374
- "outline_suggest",
19375
- "seo_aeo_geo_spec",
19376
- "content_calendar",
19377
- // The last step of that job: turn the design into an actual draft.
19378
- "write_draft",
19379
- // Names which of the above comes next given what the caller just measured —
19380
- // the part of the job that cannot be written down ahead of time.
19381
- "write_pipeline_step"
19382
- ];
19383
- var EDITOR_CONTROL = [
19384
- // The tool that opens a tab belongs in the group that requires one: a
19385
- // model choosing this group was just told it needs a tab, and the way out
19386
- // has to be visible at the wall, not in some other group.
19387
- "editor_open_window",
19388
- "editor_reduce_windows",
19389
- "editor_read",
19390
- "editor_read_structure",
19391
- "editor_undo",
19392
- "editor_replace",
19393
- "editor_insert_draft",
19394
- // Lands a draft from any window state without ever overwriting — refuses and
19395
- // names the tool to use instead when the body is occupied.
19396
- "editor_place_draft",
19397
- "editor_set_title",
19398
- // The whole plan in one call, for a run nobody is watching. Same group as the
19399
- // steps it contains — a model that reached for those should see this too.
19400
- "editor_apply_manifest",
19401
- // Both act on the open draft: title_optimize proposes titles for it, and
19402
- // internal_links reads it.
19403
- "title_optimize",
19404
- "internal_links",
19405
- "editor_insert_image",
19406
- "seo_scorecard"
19407
- ];
19408
- var BY_PREFIX = [
19409
- { slug: "serp-watch", prefixes: ["search_", "serp_"] },
19410
- { slug: "benchmark", prefixes: ["blog_", "cafe_", "influencer_"] },
19411
- { slug: "place", prefixes: ["place_"] },
19412
- { slug: "shopping", prefixes: ["shopping_"] },
19413
- { slug: "ad-bidding", prefixes: ["ad_"] },
19414
- { slug: "store-settlement", prefixes: ["commerce_"] },
19415
- { slug: "comment-stats", prefixes: ["comment_"] },
19416
- { slug: "photo-editor", prefixes: ["photo_"] },
19417
- { slug: "video-editor", prefixes: ["video_"] },
19418
- { slug: "keyword-research", prefixes: ["keyword_"] },
19419
- { slug: "pumasi", prefixes: ["pumasi_"] },
19420
- { slug: "browser-tabs", prefixes: ["tab_"] }
19421
- ];
19422
- var GALLERY = ["gallery_image_add"];
19423
- var EXPLICIT = [
19424
- { slug: "connection", tools: ["datalab_browsers"] },
19425
- { slug: "gallery", tools: GALLERY },
19426
- { slug: "blog-brief", tools: BLOG_BRIEF },
19427
- { slug: "blog-insights", tools: BLOG_INSIGHTS },
19428
- { slug: "keyword-research", tools: RESEARCH },
19429
- { slug: "editor-control", tools: EDITOR_CONTROL },
19430
- // Named like the group but caught by none of its prefixes, so it is listed
19431
- // explicitly — a similar name is not a membership rule.
19432
- { slug: "benchmark", tools: ["benchmark_gap"] }
19433
- ];
19434
- var META = [
19435
- {
19436
- slug: "connection",
19437
- label: "\uC5F0\uACB0 \uBE0C\uB77C\uC6B0\uC800",
19438
- summary: "\uC5EC\uB7EC \uBE0C\uB77C\uC6B0\uC800\xB7\uD504\uB85C\uD544 \uC911 \uB3C4\uAD6C\uB97C \uC2E4\uD589\uD560 \uACF3\uC744 \uACE0\uB978\uB2E4",
19439
- aliases: ["\uBE0C\uB77C\uC6B0\uC800 \uC120\uD0DD", "\uD504\uB85C\uD544 \uC120\uD0DD", "\uD06C\uB86C \uC5F0\uACB0", "\uC6E8\uC77C \uC5F0\uACB0"],
19440
- dataScope: "local"
19441
- },
19442
- {
19443
- slug: "blog-brief",
19444
- label: "\uC624\uB298\uC758 \uBE14\uB85C\uADF8 \uBE0C\uB9AC\uD551",
19445
- summary: "\uB0B4 \uBE14\uB85C\uADF8\uAC00 \uC9C0\uAE08 \uC5B4\uB5A4\uC9C0 \u2014 \uBC29\uBB38\xB7\uC870\uD68C\xB7\uC778\uAE30\uAE00\xB7\uC2E4\uC2DC\uAC04",
19446
- aliases: ["\uB0B4 \uBE14\uB85C\uADF8 \uC131\uACFC", "\uBC29\uBB38\uC790", "\uC870\uD68C\uC218", "\uC778\uAE30\uAE00", "\uC2E4\uC2DC\uAC04 \uD1B5\uACC4"],
19447
- dataScope: "own"
19448
- },
19449
- {
19450
- slug: "blog-insights",
19451
- label: "\uBE14\uB85C\uADF8 \uC2EC\uCE35 \uBD84\uC11D",
19452
- summary: "\uC65C \uADF8\uB7F0\uC9C0 \u2014 \uC720\uC785 \uACBD\uB85C\xB7\uC131\uBCC4\uC5F0\uB839\xB7\uCCB4\uB958\xB7\uC218\uC775\xB7\uAE00\uBCC4 \uC0C1\uC138",
19453
- aliases: ["\uBE14\uB85C\uADF8 \uC720\uC785", "\uB3C5\uC790 \uBD84\uC11D", "\uCCB4\uB958\uC2DC\uAC04", "\uC7AC\uBC29\uBB38", "\uBE14\uB85C\uADF8 \uC218\uC775"],
19454
- dataScope: "own"
19455
- },
19456
- {
19457
- slug: "keyword-research",
19458
- label: "\uD0A4\uC6CC\uB4DC\xB7\uAE00\uAC10 \uB9AC\uC11C\uCE58",
19459
- summary: "\uBB34\uC5C7\uC744 \uC4F8\uC9C0 \u2014 \uD0A4\uC6CC\uB4DC \uC218\uC694\xB7\uC5F0\uAD00\uC5B4\xB7\uC790\uB3D9\uC644\uC131\xB7\uBC1C\uD589\uB7C9\xB7\uC9C0\uC2DDiN \uC9C8\uBB38\xB7\uC9C0\uC5ED \uD2B8\uB80C\uB4DC",
19460
- aliases: ["\uD0A4\uC6CC\uB4DC \uC870\uC0AC", "\uAC80\uC0C9\uB7C9", "\uC5F0\uAD00\uC5B4", "\uAE00\uAC10", "\uCF58\uD150\uCE20 \uC544\uC774\uB514\uC5B4"],
19461
- dataScope: "mixed",
19462
- steps: [
19463
- "search_keywords \uB85C \uC218\uC694\uB97C \uBCF8\uB2E4",
19464
- "content_volume \uC73C\uB85C \uC774\uBBF8 \uC5BC\uB9C8\uB098 \uC4F0\uC600\uB294\uC9C0 \uBCF8\uB2E4 \u2014 \uC218\uC694\uB9CC \uBCF4\uACE0 \uACE0\uB974\uBA74 \uD3EC\uD654\uB41C \uD0A4\uC6CC\uB4DC\uB97C \uACE0\uB978\uB2E4",
19465
- "keyword_opportunity \uB85C \uB458\uC744 \uACAC\uC918 \uBE48\uD2C8\uC744 \uCC3E\uB294\uB2E4"
19466
- ]
19467
- },
19468
- {
19469
- slug: "serp-watch",
19470
- label: "\uB124\uC774\uBC84 \uAC80\uC0C9\uACB0\uACFC \uD655\uC778",
19471
- summary: "\uC774 \uAC80\uC0C9\uC5B4\uC5D0 \uC9C0\uAE08 \uB124\uC774\uBC84\uAC00 \uBB34\uC5C7\uC744 \uB744\uC6B0\uB294\uC9C0",
19472
- aliases: ["\uB124\uC774\uBC84 \uAC80\uC0C9\uACB0\uACFC", "\uC0C1\uC704 \uB178\uCD9C", "\uAC80\uC0C9 \uC21C\uC704", "SERP"],
19473
- dataScope: "public"
19474
- },
19475
- {
19476
- // The summary says whose page it is, because this is the one group whose
19477
- // tools act somewhere the member does not own.
19478
- slug: "pumasi",
19479
- label: "\uD488\uC557\uC774 \u2014 \uB2E4\uB978 \uC0AC\uB78C\uC758 \uAE00",
19480
- summary: "\uB2E4\uB978 \uC0AC\uB78C\uC758 \uBE14\uB85C\uADF8\uC5D0\uC11C \uB313\uAE00\uCE78\xB7\uC774\uC6C3\uCD94\uAC00 \uCC3D\uC744 \uC5F4\uACE0 \uB0B4 \uACF5\uAC10 \uC0C1\uD0DC\uB97C \uC77D\uB294\uB2E4",
19481
- aliases: ["\uD488\uC557\uC774", "\uACF5\uAC10 \uC0C1\uD0DC", "\uB313\uAE00 \uC791\uC131", "\uC774\uC6C3 \uC2E0\uCCAD", "\uC11C\uB85C\uC774\uC6C3"],
19482
- dataScope: "mixed"
19483
- },
19484
- {
19485
- // Not a subject and not somebody's page: the member's own browser. Here so
19486
- // a caller that needs to point another tool at a particular tab can find
19487
- // the way to do it, rather than opening a second tab of the same page.
19488
- slug: "browser-tabs",
19489
- label: "\uB0B4 \uBE0C\uB77C\uC6B0\uC800 \uD0ED",
19490
- summary: "\uC9C0\uAE08 \uC5F4\uB824 \uC788\uB294 \uD0ED\uC744 \uBCF4\uACE0, \uC5F4\uACE0, \uC55E\uC73C\uB85C \uAC00\uC838\uC624\uACE0, \uB2EB\uB294\uB2E4",
19491
- aliases: ["\uBE0C\uB77C\uC6B0\uC800 \uD0ED", "\uD0ED \uC5F4\uAE30", "\uD0ED \uB2EB\uAE30", "\uD0ED \uC804\uD658"],
19492
- dataScope: "local",
19493
- // The two named here are how this group's surface is created and reduced,
19494
- // and a guard holds them equal to the surface policy - one place would go
19495
- // stale on its own otherwise.
19496
- openerTool: "tab_open",
19497
- reducerTool: "tab_close"
19498
- },
19499
- {
19500
- slug: "benchmark",
19501
- label: "\uACBD\uC7C1\uC790 \uBCA4\uCE58\uB9C8\uD0B9",
19502
- summary: "\uB2E4\uB978 \uBE14\uB85C\uADF8\xB7\uCE74\uD398\xB7\uC778\uD50C\uB8E8\uC5B8\uC11C\uAC00 \uBB34\uC5C7\uC744 \uD558\uB294\uC9C0",
19503
- aliases: ["\uACBD\uC7C1 \uBE14\uB85C\uADF8", "\uACBD\uC7C1\uC790 \uBD84\uC11D", "\uBCA4\uCE58\uB9C8\uD0B9", "\uC778\uD50C\uB8E8\uC5B8\uC11C \uBD84\uC11D"],
19504
- dataScope: "public"
19505
- },
19506
- {
19507
- slug: "place",
19508
- label: "\uB124\uC774\uBC84 \uD50C\uB808\uC774\uC2A4 \uAD00\uB9AC",
19509
- summary: "\uB0B4 \uB9E4\uC7A5 \uC815\uBCF4\xB7\uB9AC\uBDF0\xB7\uC608\uC57D\xB7\uCFE0\uD3F0\xB7\uB300\uAE30",
19510
- aliases: ["\uC6B0\uB9AC \uB9E4\uC7A5", "\uD50C\uB808\uC774\uC2A4 \uB9AC\uBDF0", "\uC608\uC57D", "\uCFE0\uD3F0", "\uB9E4\uC7A5 \uD3C9\uD310"],
19511
- dataScope: "own"
19512
- },
19513
- {
19514
- slug: "shopping",
19515
- label: "\uC1FC\uD551 \uC778\uC0AC\uC774\uD2B8",
19516
- summary: "\uC774 \uC0C1\uD488\uC774 \uC5B8\uC81C \uB204\uAD6C\uC5D0\uAC8C \uD314\uB9AC\uB294\uC9C0",
19517
- aliases: ["\uC1FC\uD551 \uD2B8\uB80C\uB4DC", "\uC0C1\uD488 \uC218\uC694", "\uCE74\uD14C\uACE0\uB9AC \uD310\uB9E4", "\uAD6C\uB9E4 \uC5F0\uB839"],
19518
- dataScope: "public"
19519
- },
19520
- {
19521
- slug: "ad-bidding",
19522
- label: "\uAC80\uC0C9\uAD11\uACE0 \uC785\uCC30",
19523
- // The calls themselves cost nothing, hence the read tier, but they return
19524
- // data only when the user's search-ad account credentials are present.
19525
- summary: "\uC785\uCC30\uAC00\uC640 \uC608\uC0C1 \uC131\uACFC \u2014 \uBB34\uB8CC, \uAC80\uC0C9\uAD11\uACE0 \uACC4\uC815 \uC790\uACA9\uC99D\uBA85 \uD544\uC694",
19526
- aliases: ["\uAC80\uC0C9\uAD11\uACE0", "\uAD11\uACE0 \uC785\uCC30", "\uC785\uCC30\uAC00", "\uAD11\uACE0 \uC131\uACFC", "\uAD11\uACE0\uBE44"],
19527
- dataScope: "own"
19528
- },
19529
- {
19530
- slug: "store-settlement",
19531
- label: "\uC2A4\uD1A0\uC5B4 \uC815\uC0B0\xB7\uB9E4\uCD9C",
19532
- // The seller's own money. Nothing here writes, and the payout account the
19533
- // settlement response carries is dropped before it reaches a host.
19534
- summary: "\uC815\uC0B0 \uC608\uC815\uC77C\uACFC \uAE08\uC561, \uC77C\uBCC4 \uB9E4\uCD9C \u2014 \uCEE4\uBA38\uC2A4API \uC790\uACA9\uC99D\uBA85 \uD544\uC694",
19535
- aliases: ["\uC2A4\uD1A0\uC5B4 \uC815\uC0B0", "\uC815\uC0B0 \uC608\uC815", "\uB9E4\uCD9C", "\uCEE4\uBA38\uC2A4 \uC8FC\uBB38"],
19536
- dataScope: "own"
19537
- },
19538
- {
19539
- slug: "comment-stats",
19540
- label: "\uB313\uAE00 \uBC18\uC751 \uD1B5\uACC4",
19541
- summary: "\uB274\uC2A4 \uB313\uAE00\uC774 \uC5B8\uC81C \uB204\uAD6C\uC5D0\uAC8C \uB2EC\uB9AC\uB294\uC9C0",
19542
- aliases: ["\uB274\uC2A4 \uB313\uAE00", "\uB313\uAE00 \uBC18\uC751", "\uB313\uAE00 \uC131\uBCC4", "\uB313\uAE00 \uC2DC\uAC04\uB300"],
19543
- dataScope: "public"
19544
- },
19545
- {
19546
- slug: "editor-control",
19547
- label: "\uAE00\uC4F0\uAE30 \uCC3D \uC81C\uC5B4",
19548
- summary: "\uC5F4\uB824 \uC788\uB294 \uB124\uC774\uBC84 \uAE00\uC4F0\uAE30 \uCC3D\uC758 \uC6D0\uACE0\uB97C \uC77D\uACE0 \uACE0\uCE5C\uB2E4",
19549
- aliases: ["\uBE14\uB85C\uADF8 \uAE00\uC4F0\uAE30", "\uC5F4\uB9B0 \uC6D0\uACE0", "\uCD08\uC548 \uC218\uC815", "\uC81C\uBAA9 \uC218\uC815"],
19550
- dataScope: "local",
19551
- needsTab: true,
19552
- openerTool: "editor_open_window",
19553
- reducerTool: "editor_reduce_windows",
19554
- steps: [
19555
- "editor_read \uB85C \uC9C0\uAE08 \uAE00\uC5D0 \uBB34\uC5C7\uC774 \uC788\uB294\uC9C0 \uBA3C\uC800 \uD655\uC778\uD55C\uB2E4 \u2014 \uBE48 \uC904 \uC54C\uACE0 \uB36E\uC5B4\uC4F0\uB294 \uAC83\uC774 \uAC00\uC7A5 \uD754\uD55C \uC0AC\uACE0\uB2E4",
19556
- "\uACE0\uCE60 \uB0B4\uC6A9\uC744 \uB9CC\uB4E0\uB2E4",
19557
- "editor_place_draft \uB85C \uB123\uB294\uB2E4. \uC774\uBBF8 \uB0B4\uC6A9\uC774 \uC788\uC73C\uBA74 \uC9C0\uC6B0\uC9C0 \uC54A\uACE0 \uAC70\uC808\uD558\uBA70 \uB2E4\uC74C \uB3C4\uAD6C\uB97C \uC54C\uB824 \uC900\uB2E4",
19558
- "\uC804\uCCB4\uB97C \uAC08\uC544\uC5CE\uC5B4\uC57C \uD560 \uB54C\uB9CC, \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3C\uC5B4\uBCF8 \uB4A4 editor_replace \uB97C \uC4F4\uB2E4"
19559
- ]
19560
- },
19561
- {
19562
- slug: "photo-editor",
19563
- label: "\uC0AC\uC9C4 \uD3B8\uC9D1\uAE30 \uC870\uC791",
19564
- summary: "\uC0AC\uC9C4 \uD3B8\uC9D1\uAE30 \uCE94\uBC84\uC2A4\uC5D0 \uD14D\uC2A4\uD2B8\xB7\uB3C4\uD615\xB7\uC774\uBBF8\uC9C0\uB97C \uB123\uB294\uB2E4",
19565
- aliases: ["\uC0AC\uC9C4 \uD3B8\uC9D1\uAE30", "\uCE74\uB4DC\uB274\uC2A4", "\uCE94\uBC84\uC2A4", "\uC2AC\uB77C\uC774\uB4DC \uB514\uC790\uC778"],
19566
- dataScope: "local",
19567
- needsTab: true,
19568
- openerTool: "photo_project_new",
19569
- reducerTool: "editor_reduce_windows"
19570
- },
19571
- {
19572
- slug: "video-editor",
19573
- label: "\uC601\uC0C1 \uD3B8\uC9D1\uAE30 \uC870\uC791",
19574
- summary: "\uC601\uC0C1 \uD3B8\uC9D1\uAE30\uC758 \uC7A5\uBA74\xB7\uC790\uB9C9\xB7\uBAA9\uC18C\uB9AC\uB97C \uB9CC\uB4E0\uB2E4",
19575
- aliases: ["\uC601\uC0C1 \uD3B8\uC9D1\uAE30", "\uC20F\uD3FC", "\uB9B4\uC2A4", "\uC7A5\uBA74", "\uC790\uB9C9", "AI \uBAA9\uC18C\uB9AC"],
19576
- dataScope: "local",
19577
- needsTab: true,
19578
- openerTool: "video_project_new",
19579
- reducerTool: "editor_reduce_windows"
19580
- },
19581
- {
19582
- slug: "gallery",
19583
- label: "\uC774\uBBF8\uC9C0 \uAC24\uB7EC\uB9AC",
19584
- summary: "\uB0B4\uAC00 \uB9CC\uB4E0 \uC0AC\uC9C4 \uD30C\uC77C\uC744 \uAC24\uB7EC\uB9AC\uC5D0 \uB123\uC5B4 \uB450 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC4F4\uB2E4 \u2014 \uD3B8\uC9D1\uAE30 \uCC3D\uC774 \uC5C6\uC5B4\uB3C4 \uB41C\uB2E4",
19585
- aliases: ["\uC774\uBBF8\uC9C0 \uAC24\uB7EC\uB9AC", "\uC0AC\uC9C4 \uAC00\uC838\uC624\uAE30", "\uC774\uBBF8\uC9C0 \uBCF4\uAD00"],
19586
- dataScope: "local",
19587
- steps: [
19588
- "gallery_image_add \uB85C \uAC24\uB7EC\uB9AC\uC5D0 \uBA3C\uC800 \uB123\uB294\uB2E4",
19589
- "\uD3B8\uC9D1\uAE30 \uCABD \uB3C4\uAD6C\uB85C \uADF8 ref \uB97C \uAC00\uC838\uB2E4 \uC4F4\uB2E4 \u2014 \uAC24\uB7EC\uB9AC\uB97C \uAC70\uCE58\uBA74 \uD3B8\uC9D1\uAE30 \uCC3D\uC774 \uC5C6\uC5B4\uB3C4 \uBBF8\uB9AC \uC900\uBE44\uD560 \uC218 \uC788\uB2E4"
19590
- ]
19591
- }
19592
- ];
19593
- var FALLBACK_SLUG = "other";
19594
- function slugFor(name) {
19595
- for (const e of EXPLICIT) {
19596
- if (e.tools.includes(name)) return e.slug;
19597
- }
19598
- for (const p of BY_PREFIX) {
19599
- if (p.prefixes.some((x) => name.startsWith(x))) return p.slug;
19600
- }
19601
- return FALLBACK_SLUG;
19602
- }
19603
- function buildToolsets(names) {
19604
- const byslug = /* @__PURE__ */ new Map();
19605
- for (const n of names) {
19606
- const s = slugFor(n);
19607
- (byslug.get(s) ?? byslug.set(s, []).get(s)).push(n);
19608
- }
19609
- const out = [];
19610
- for (const m of META) {
19611
- const tools = byslug.get(m.slug) ?? [];
19612
- if (tools.length > 0) out.push({ ...m, tools });
19613
- byslug.delete(m.slug);
19614
- }
19615
- const leftover = byslug.get(FALLBACK_SLUG) ?? [];
19616
- if (leftover.length > 0) {
19617
- out.push({
19618
- slug: FALLBACK_SLUG,
19619
- label: "\uADF8 \uBC16\uC758 \uB3C4\uAD6C",
19620
- summary: "\uC544\uC9C1 \uBB36\uC74C\uC774 \uC815\uD574\uC9C0\uC9C0 \uC54A\uC740 \uB3C4\uAD6C",
19621
- aliases: ["\uAE30\uD0C0"],
19622
- dataScope: "mixed",
19623
- tools: leftover
19624
- });
19625
- }
19626
- return out;
19627
- }
19628
- var CATALOG_TOOL = "datalab_catalog";
19629
19323
  var FIND_TOOLS_TOOL = "datalab_find_tools";
19630
- var DESCRIBE_TOOL = "datalab_describe";
19631
19324
  var CALL_TOOL = "datalab_call";
19632
19325
  var CONFIRM_STATUS_TOOL = "datalab_confirm_status";
19633
19326
  var SESSION_STATE_TOOL = "datalab_session_state";
@@ -19638,10 +19331,7 @@ function browserProperty() {
19638
19331
  description: `${BROWSERS_TOOL} \uAC00 \uB3CC\uB824\uC900 \uC2E4\uD589 \uB300\uC0C1 \uBE0C\uB77C\uC6B0\uC800 id`
19639
19332
  };
19640
19333
  }
19641
- var DESCRIBE_PAGE_SIZE = 10;
19642
- function discoveryDescriptors(entries) {
19643
- const sets = buildToolsets(entries.map((e) => e.name));
19644
- const names = sets.map((s) => s.slug).join(", ");
19334
+ function discoveryDescriptors() {
19645
19335
  return [
19646
19336
  {
19647
19337
  name: FIND_TOOLS_TOOL,
@@ -19661,53 +19351,9 @@ function discoveryDescriptors(entries) {
19661
19351
  additionalProperties: false
19662
19352
  }
19663
19353
  },
19664
- {
19665
- name: CATALOG_TOOL,
19666
- description: `\uB370\uC774\uD130\uB7A9\uD234\uC988\uAC00 \uD560 \uC218 \uC788\uB294 \uC77C\uC758 \uBAA9\uB85D\uC744 \uB3CC\uB824\uC900\uB2E4. \uB124\uC774\uBC84 \uBE14\uB85C\uADF8\xB7\uD0A4\uC6CC\uB4DC\xB7\uAC80\uC0C9\uACB0\uACFC\xB7\uD50C\uB808\uC774\uC2A4\xB7\uC1FC\uD551\xB7\uAD11\uACE0 \uD1B5\uACC4\uC640 \uAE00\uC4F0\uAE30/\uC0AC\uC9C4/\uC601\uC0C1 \uD3B8\uC9D1\uAE30 \uC81C\uC5B4\uAE4C\uC9C0 ${entries.length}\uAC1C \uB3C4\uAD6C\uAC00 \uC788\uACE0, \uC5EC\uAE30 \uC815\uC758\uB85C \uBCF4\uC774\uB294 \uAC83\uC740 \uADF8\uC911 \uC77C\uBD80\uB2E4. **\uC0AC\uC6A9\uC790\uAC00 \uBB34\uC5C7\uC744 \uBD80\uD0C1\uD558\uB4E0, \uC9C0\uAE08 \uBCF4\uC774\uB294 \uB3C4\uAD6C\uB85C \uC548 \uB418\uBA74 \uBA3C\uC800 \uC774\uAC83\uC744 \uBD88\uB7EC\uB77C** \u2014 \uC5C6\uB2E4\uACE0 \uB2F5\uD558\uAE30 \uC804\uC5D0 \uD655\uC778\uD55C\uB2E4. toolset \uC5C6\uC774 \uBD80\uB974\uBA74 \uBB36\uC74C \uBAA9\uB85D, \uC8FC\uBA74 \uADF8 \uBB36\uC74C\uC758 \uB3C4\uAD6C \uC774\uB984\uACFC \uC124\uBA85. \uBB36\uC74C: ${names}.`,
19667
- annotations: LOOKUP_ANNOTATIONS,
19668
- inputSchema: {
19669
- type: "object",
19670
- properties: {
19671
- toolset: {
19672
- type: "string",
19673
- enum: sets.map((s) => s.slug),
19674
- description: "\uC774 \uBB36\uC74C\uC758 \uB3C4\uAD6C \uBAA9\uB85D\uC744 \uBCF8\uB2E4. \uC0DD\uB7B5\uD558\uBA74 \uBB36\uC74C \uBAA9\uB85D\uB9CC"
19675
- },
19676
- query: {
19677
- type: "string",
19678
- description: "\uCC3E\uB294 \uB9D0(\uC608: '\uBC29\uBB38\uC790', '\uACBD\uC7C1'). \uC774\uB984\uACFC \uC124\uBA85\uC5D0\uC11C \uCC3E\uACE0, \uBB36\uC74C \uC774\uB984\uC774 \uB9DE\uC73C\uBA74 \uADF8 \uBB36\uC74C\uB3C4 \uD568\uAED8 \uB3CC\uB824\uC900\uB2E4"
19679
- },
19680
- withSchemas: {
19681
- type: "boolean",
19682
- description: `\uC778\uC790 \uC2A4\uD0A4\uB9C8\uAE4C\uC9C0 \uD568\uAED8 \uBC1B\uB294\uB2E4 \u2014 \uADF8\uB7EC\uBA74 ${DESCRIBE_TOOL} \uC5C6\uC774 \uBC14\uB85C \uC2E4\uD589\uD560 \uC218 \uC788\uB2E4. toolset \uC774\uB098 query \uC640 \uAC19\uC774 \uC904 \uB54C\uB9CC \uC4F4\uB2E4`
19683
- },
19684
- browser: browserProperty()
19685
- },
19686
- additionalProperties: false
19687
- }
19688
- },
19689
- {
19690
- name: DESCRIBE_TOOL,
19691
- description: `\uB3C4\uAD6C\uC758 \uC778\uC790 \uC2A4\uD0A4\uB9C8\uB97C \uB3CC\uB824\uC900\uB2E4. **${CALL_TOOL} \uB85C \uBD80\uB974\uAE30 \uC804\uC5D0 \uADF8 \uB3C4\uAD6C\uC5D0 \uB300\uD574 \uCD5C\uC18C \uD55C \uBC88\uC740 \uC774\uAC83\uC744 \uD638\uCD9C\uD574\uB77C** \u2014 \uC778\uC790 \uC774\uB984\uACFC \uD544\uC218 \uC5EC\uBD80\uB97C \uC9C0\uC5B4\uB0B4\uBA74 \uAC70\uC808\uB418\uACE0, \uC655\uBCF5\uC774 \uD55C \uBC88 \uB354 \uB4E0\uB2E4. \uC774\uBBF8 \uC2A4\uD0A4\uB9C8\uB97C \uBC1B\uC544 \uB454 \uB3C4\uAD6C\uB294 \uB2E4\uC2DC \uBD80\uB97C \uD544\uC694 \uC5C6\uB2E4.`,
19692
- annotations: LOOKUP_ANNOTATIONS,
19693
- inputSchema: {
19694
- type: "object",
19695
- properties: {
19696
- tools: {
19697
- type: "array",
19698
- items: { type: "string" },
19699
- maxItems: DESCRIBE_PAGE_SIZE,
19700
- description: `\uC2A4\uD0A4\uB9C8\uB97C \uBCFC \uB3C4\uAD6C \uC774\uB984 (\uD55C \uBC88\uC5D0 ${DESCRIBE_PAGE_SIZE}\uAC1C\uAE4C\uC9C0)`
19701
- },
19702
- browser: browserProperty()
19703
- },
19704
- required: ["tools"],
19705
- additionalProperties: false
19706
- }
19707
- },
19708
19354
  {
19709
19355
  name: CALL_TOOL,
19710
- description: `${FIND_TOOLS_TOOL} \uB610\uB294 ${CATALOG_TOOL} \uB85C \uCC3E\uC740 \uB3C4\uAD6C\uB97C \uC2E4\uD589\uD55C\uB2E4. args \uB294 \uAC80\uC0C9 \uACB0\uACFC\uB098 ${DESCRIBE_TOOL} \uAC00 \uC900 \uC2A4\uD0A4\uB9C8\uB97C \uADF8\uB300\uB85C \uB530\uB978\uB2E4 \u2014 \uB9DE\uC9C0 \uC54A\uC73C\uBA74 \uC2E4\uD589\uD558\uC9C0 \uC54A\uACE0 \uBB34\uC5C7\uC774 \uD2C0\uB838\uB294\uC9C0 \uB3CC\uB824\uC900\uB2E4. \uBB38\uC11C\uB97C \uACE0\uCE58\uAC70\uB098 \uC694\uAE08\uC774 \uB4DC\uB294 \uB3C4\uAD6C\uB294 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uC744 \uBC1B\uC740 \uB4A4\uC5D0 \uC2E4\uD589\uB41C\uB2E4.`,
19356
+ description: `${FIND_TOOLS_TOOL} \uB85C \uCC3E\uC740 \uB3C4\uAD6C\uB97C \uC2E4\uD589\uD55C\uB2E4. args \uB294 \uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC900 \uC2A4\uD0A4\uB9C8\uB97C \uADF8\uB300\uB85C \uB530\uB978\uB2E4 \u2014 \uB9DE\uC9C0 \uC54A\uC73C\uBA74 \uC2E4\uD589\uD558\uC9C0 \uC54A\uACE0 \uBB34\uC5C7\uC774 \uD2C0\uB838\uB294\uC9C0 \uB3CC\uB824\uC900\uB2E4. \uBB38\uC11C\uB97C \uACE0\uCE58\uAC70\uB098 \uC694\uAE08\uC774 \uB4DC\uB294 \uB3C4\uAD6C\uB294 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uC744 \uBC1B\uC740 \uB4A4\uC5D0 \uC2E4\uD589\uB41C\uB2E4.`,
19711
19357
  // Deliberately unannotated: this tool's effect is the delegated tool's
19712
19358
  // effect, so any fixed hint would be half false. Tier is judged at run time.
19713
19359
  inputSchema: {
@@ -19716,7 +19362,7 @@ function discoveryDescriptors(entries) {
19716
19362
  tool: { type: "string", description: "\uC2E4\uD589\uD560 \uB3C4\uAD6C \uC774\uB984" },
19717
19363
  args: {
19718
19364
  type: "object",
19719
- description: `\uADF8 \uB3C4\uAD6C\uC758 \uC778\uC790. ${DESCRIBE_TOOL} \uC758 \uC2A4\uD0A4\uB9C8\uB97C \uB530\uB978\uB2E4`
19365
+ description: `\uADF8 \uB3C4\uAD6C\uC758 \uC778\uC790. ${FIND_TOOLS_TOOL} \uAC00 \uBC18\uD658\uD55C \uC2A4\uD0A4\uB9C8\uB97C \uB530\uB978\uB2E4`
19720
19366
  },
19721
19367
  browser: browserProperty()
19722
19368
  },
@@ -19767,15 +19413,9 @@ function browsersDescriptor() {
19767
19413
  annotations: LOOKUP_ANNOTATIONS
19768
19414
  };
19769
19415
  }
19770
- function allowlistNames() {
19771
- return [.../* @__PURE__ */ new Set([...READ_ONLY_TOOLS, ...Object.keys(TOOL_TIERS)])];
19772
- }
19773
19416
  function staticDiscoveryCatalog() {
19774
- const entries = allowlistNames().map(
19775
- (name) => name === BROWSERS_TOOL ? browsersDescriptor() : { name, description: "", inputSchema: {} }
19776
- );
19777
19417
  return [
19778
- ...discoveryDescriptors(entries),
19418
+ ...discoveryDescriptors(),
19779
19419
  sessionStateDescriptor(),
19780
19420
  browsersDescriptor()
19781
19421
  ].map(
@@ -20980,8 +20620,6 @@ function timingMeta(timing) {
20980
20620
  };
20981
20621
  }
20982
20622
  var ROUTED_FACADES = /* @__PURE__ */ new Set([
20983
- CATALOG_TOOL,
20984
- DESCRIBE_TOOL,
20985
20623
  CALL_TOOL,
20986
20624
  CONFIRM_STATUS_TOOL,
20987
20625
  SESSION_STATE_TOOL
@@ -23490,7 +23128,7 @@ function defineBound2(proto, key, fn) {
23490
23128
  Object.defineProperty(proto, key, {
23491
23129
  configurable: true,
23492
23130
  get() {
23493
- return own2(this, key, fn.bind(this));
23131
+ return this == null ? fn : own2(this, key, fn.bind(this));
23494
23132
  },
23495
23133
  set(value) {
23496
23134
  own2(this, key, value);
@@ -24780,7 +24418,7 @@ ${content.join("\n")}
24780
24418
  var version2 = {
24781
24419
  major: 4,
24782
24420
  minor: 5,
24783
- patch: 1
24421
+ patch: 2
24784
24422
  };
24785
24423
 
24786
24424
  // ../node_modules/zod/v4/core/schemas.js
@@ -38795,7 +38433,7 @@ var ZodType2 = /* @__PURE__ */ $constructor2("ZodType", (inst, def) => {
38795
38433
  },
38796
38434
  // `spa` is an alias: same function object as `safeParseAsync`, as before.
38797
38435
  get spa() {
38798
- return this.safeParseAsync;
38436
+ return this?.safeParseAsync;
38799
38437
  },
38800
38438
  set spa(value) {
38801
38439
  util_exports2.own(this, "spa", value);
@@ -38824,11 +38462,8 @@ var ZodType2 = /* @__PURE__ */ $constructor2("ZodType", (inst, def) => {
38824
38462
  async safeDecodeAsync(data, params) {
38825
38463
  return safeDecodeAsync4(this, data, params);
38826
38464
  },
38827
- get toJSONSchema() {
38828
- return util_exports2.own(this, "toJSONSchema", createToJSONSchemaMethod2(this, {}));
38829
- },
38830
- set toJSONSchema(value) {
38831
- util_exports2.own(this, "toJSONSchema", value);
38465
+ toJSONSchema(params) {
38466
+ return createToJSONSchemaMethod2(this, {})(params);
38832
38467
  },
38833
38468
  // Reads through to the registry on every access, so it must not cache.
38834
38469
  get description() {
@@ -41442,6 +41077,7 @@ var REASON_POLICY2 = Object.freeze({
41442
41077
  browser_required: Object.freeze({ retryable: false }),
41443
41078
  tool_closed: Object.freeze({ retryable: false }),
41444
41079
  missing_in_build: Object.freeze({ retryable: false }),
41080
+ upstream_not_found: Object.freeze({ retryable: false }),
41445
41081
  // --- A human must act; re-calling only nags them ---
41446
41082
  needs_consent: Object.freeze({ retryable: false }),
41447
41083
  not_confirmed: Object.freeze({ retryable: false }),
@@ -41462,312 +41098,7 @@ var REASON_POLICY2 = Object.freeze({
41462
41098
  capacity_unavailable: Object.freeze({ retryable: true }),
41463
41099
  uploads_unproven: Object.freeze({ retryable: true })
41464
41100
  });
41465
- var BLOG_BRIEF2 = [
41466
- "my_daily_brief",
41467
- "my_blog_summary",
41468
- "my_realtime",
41469
- "my_traffic_series",
41470
- "my_top_content",
41471
- "my_soaring",
41472
- "my_publish_calendar",
41473
- "daily_trend",
41474
- "my_moments"
41475
- ];
41476
- var BLOG_INSIGHTS2 = [
41477
- "my_content_audience",
41478
- "my_inflow",
41479
- "my_audience",
41480
- "my_inflow_domain",
41481
- "my_country",
41482
- "my_device",
41483
- "my_dwell",
41484
- "my_followers",
41485
- "my_revisit",
41486
- "my_revenue",
41487
- "my_impression_click",
41488
- "my_impression_ranks",
41489
- "my_channels",
41490
- "my_revenue_ranks",
41491
- "my_revenue_efficiency",
41492
- "my_content_info",
41493
- "my_content_read",
41494
- "my_content_detail",
41495
- "my_content_inflow"
41496
- ];
41497
- var RESEARCH2 = [
41498
- // Caught by serp-watch's "search_" prefix, but this group's own steps open
41499
- // by calling it. A step naming a tool the group does not contain sends the
41500
- // caller to a catalog page it is not on.
41501
- "search_keywords",
41502
- "local_regions",
41503
- "local_job_categories",
41504
- "local_region_trend",
41505
- "local_area_category_rank",
41506
- "content_volume",
41507
- "autocomplete_keywords",
41508
- "qra_keywords",
41509
- "kin_question_demand",
41510
- "web_read",
41511
- "run_research",
41512
- // Planning tools: they need a model but call none here, returning prompt
41513
- // material instead. Grouped by job — all three design a post not yet written.
41514
- "outline_suggest",
41515
- "seo_aeo_geo_spec",
41516
- "content_calendar",
41517
- // The last step of that job: turn the design into an actual draft.
41518
- "write_draft",
41519
- // Names which of the above comes next given what the caller just measured —
41520
- // the part of the job that cannot be written down ahead of time.
41521
- "write_pipeline_step"
41522
- ];
41523
- var EDITOR_CONTROL2 = [
41524
- // The tool that opens a tab belongs in the group that requires one: a
41525
- // model choosing this group was just told it needs a tab, and the way out
41526
- // has to be visible at the wall, not in some other group.
41527
- "editor_open_window",
41528
- "editor_reduce_windows",
41529
- "editor_read",
41530
- "editor_read_structure",
41531
- "editor_undo",
41532
- "editor_replace",
41533
- "editor_insert_draft",
41534
- // Lands a draft from any window state without ever overwriting — refuses and
41535
- // names the tool to use instead when the body is occupied.
41536
- "editor_place_draft",
41537
- "editor_set_title",
41538
- // The whole plan in one call, for a run nobody is watching. Same group as the
41539
- // steps it contains — a model that reached for those should see this too.
41540
- "editor_apply_manifest",
41541
- // Both act on the open draft: title_optimize proposes titles for it, and
41542
- // internal_links reads it.
41543
- "title_optimize",
41544
- "internal_links",
41545
- "editor_insert_image",
41546
- "seo_scorecard"
41547
- ];
41548
- var BY_PREFIX2 = [
41549
- { slug: "serp-watch", prefixes: ["search_", "serp_"] },
41550
- { slug: "benchmark", prefixes: ["blog_", "cafe_", "influencer_"] },
41551
- { slug: "place", prefixes: ["place_"] },
41552
- { slug: "shopping", prefixes: ["shopping_"] },
41553
- { slug: "ad-bidding", prefixes: ["ad_"] },
41554
- { slug: "store-settlement", prefixes: ["commerce_"] },
41555
- { slug: "comment-stats", prefixes: ["comment_"] },
41556
- { slug: "photo-editor", prefixes: ["photo_"] },
41557
- { slug: "video-editor", prefixes: ["video_"] },
41558
- { slug: "keyword-research", prefixes: ["keyword_"] },
41559
- { slug: "pumasi", prefixes: ["pumasi_"] },
41560
- { slug: "browser-tabs", prefixes: ["tab_"] }
41561
- ];
41562
- var GALLERY2 = ["gallery_image_add"];
41563
- var EXPLICIT2 = [
41564
- { slug: "connection", tools: ["datalab_browsers"] },
41565
- { slug: "gallery", tools: GALLERY2 },
41566
- { slug: "blog-brief", tools: BLOG_BRIEF2 },
41567
- { slug: "blog-insights", tools: BLOG_INSIGHTS2 },
41568
- { slug: "keyword-research", tools: RESEARCH2 },
41569
- { slug: "editor-control", tools: EDITOR_CONTROL2 },
41570
- // Named like the group but caught by none of its prefixes, so it is listed
41571
- // explicitly — a similar name is not a membership rule.
41572
- { slug: "benchmark", tools: ["benchmark_gap"] }
41573
- ];
41574
- var META2 = [
41575
- {
41576
- slug: "connection",
41577
- label: "\uC5F0\uACB0 \uBE0C\uB77C\uC6B0\uC800",
41578
- summary: "\uC5EC\uB7EC \uBE0C\uB77C\uC6B0\uC800\xB7\uD504\uB85C\uD544 \uC911 \uB3C4\uAD6C\uB97C \uC2E4\uD589\uD560 \uACF3\uC744 \uACE0\uB978\uB2E4",
41579
- aliases: ["\uBE0C\uB77C\uC6B0\uC800 \uC120\uD0DD", "\uD504\uB85C\uD544 \uC120\uD0DD", "\uD06C\uB86C \uC5F0\uACB0", "\uC6E8\uC77C \uC5F0\uACB0"],
41580
- dataScope: "local"
41581
- },
41582
- {
41583
- slug: "blog-brief",
41584
- label: "\uC624\uB298\uC758 \uBE14\uB85C\uADF8 \uBE0C\uB9AC\uD551",
41585
- summary: "\uB0B4 \uBE14\uB85C\uADF8\uAC00 \uC9C0\uAE08 \uC5B4\uB5A4\uC9C0 \u2014 \uBC29\uBB38\xB7\uC870\uD68C\xB7\uC778\uAE30\uAE00\xB7\uC2E4\uC2DC\uAC04",
41586
- aliases: ["\uB0B4 \uBE14\uB85C\uADF8 \uC131\uACFC", "\uBC29\uBB38\uC790", "\uC870\uD68C\uC218", "\uC778\uAE30\uAE00", "\uC2E4\uC2DC\uAC04 \uD1B5\uACC4"],
41587
- dataScope: "own"
41588
- },
41589
- {
41590
- slug: "blog-insights",
41591
- label: "\uBE14\uB85C\uADF8 \uC2EC\uCE35 \uBD84\uC11D",
41592
- summary: "\uC65C \uADF8\uB7F0\uC9C0 \u2014 \uC720\uC785 \uACBD\uB85C\xB7\uC131\uBCC4\uC5F0\uB839\xB7\uCCB4\uB958\xB7\uC218\uC775\xB7\uAE00\uBCC4 \uC0C1\uC138",
41593
- aliases: ["\uBE14\uB85C\uADF8 \uC720\uC785", "\uB3C5\uC790 \uBD84\uC11D", "\uCCB4\uB958\uC2DC\uAC04", "\uC7AC\uBC29\uBB38", "\uBE14\uB85C\uADF8 \uC218\uC775"],
41594
- dataScope: "own"
41595
- },
41596
- {
41597
- slug: "keyword-research",
41598
- label: "\uD0A4\uC6CC\uB4DC\xB7\uAE00\uAC10 \uB9AC\uC11C\uCE58",
41599
- summary: "\uBB34\uC5C7\uC744 \uC4F8\uC9C0 \u2014 \uD0A4\uC6CC\uB4DC \uC218\uC694\xB7\uC5F0\uAD00\uC5B4\xB7\uC790\uB3D9\uC644\uC131\xB7\uBC1C\uD589\uB7C9\xB7\uC9C0\uC2DDiN \uC9C8\uBB38\xB7\uC9C0\uC5ED \uD2B8\uB80C\uB4DC",
41600
- aliases: ["\uD0A4\uC6CC\uB4DC \uC870\uC0AC", "\uAC80\uC0C9\uB7C9", "\uC5F0\uAD00\uC5B4", "\uAE00\uAC10", "\uCF58\uD150\uCE20 \uC544\uC774\uB514\uC5B4"],
41601
- dataScope: "mixed",
41602
- steps: [
41603
- "search_keywords \uB85C \uC218\uC694\uB97C \uBCF8\uB2E4",
41604
- "content_volume \uC73C\uB85C \uC774\uBBF8 \uC5BC\uB9C8\uB098 \uC4F0\uC600\uB294\uC9C0 \uBCF8\uB2E4 \u2014 \uC218\uC694\uB9CC \uBCF4\uACE0 \uACE0\uB974\uBA74 \uD3EC\uD654\uB41C \uD0A4\uC6CC\uB4DC\uB97C \uACE0\uB978\uB2E4",
41605
- "keyword_opportunity \uB85C \uB458\uC744 \uACAC\uC918 \uBE48\uD2C8\uC744 \uCC3E\uB294\uB2E4"
41606
- ]
41607
- },
41608
- {
41609
- slug: "serp-watch",
41610
- label: "\uB124\uC774\uBC84 \uAC80\uC0C9\uACB0\uACFC \uD655\uC778",
41611
- summary: "\uC774 \uAC80\uC0C9\uC5B4\uC5D0 \uC9C0\uAE08 \uB124\uC774\uBC84\uAC00 \uBB34\uC5C7\uC744 \uB744\uC6B0\uB294\uC9C0",
41612
- aliases: ["\uB124\uC774\uBC84 \uAC80\uC0C9\uACB0\uACFC", "\uC0C1\uC704 \uB178\uCD9C", "\uAC80\uC0C9 \uC21C\uC704", "SERP"],
41613
- dataScope: "public"
41614
- },
41615
- {
41616
- // The summary says whose page it is, because this is the one group whose
41617
- // tools act somewhere the member does not own.
41618
- slug: "pumasi",
41619
- label: "\uD488\uC557\uC774 \u2014 \uB2E4\uB978 \uC0AC\uB78C\uC758 \uAE00",
41620
- summary: "\uB2E4\uB978 \uC0AC\uB78C\uC758 \uBE14\uB85C\uADF8\uC5D0\uC11C \uB313\uAE00\uCE78\xB7\uC774\uC6C3\uCD94\uAC00 \uCC3D\uC744 \uC5F4\uACE0 \uB0B4 \uACF5\uAC10 \uC0C1\uD0DC\uB97C \uC77D\uB294\uB2E4",
41621
- aliases: ["\uD488\uC557\uC774", "\uACF5\uAC10 \uC0C1\uD0DC", "\uB313\uAE00 \uC791\uC131", "\uC774\uC6C3 \uC2E0\uCCAD", "\uC11C\uB85C\uC774\uC6C3"],
41622
- dataScope: "mixed"
41623
- },
41624
- {
41625
- // Not a subject and not somebody's page: the member's own browser. Here so
41626
- // a caller that needs to point another tool at a particular tab can find
41627
- // the way to do it, rather than opening a second tab of the same page.
41628
- slug: "browser-tabs",
41629
- label: "\uB0B4 \uBE0C\uB77C\uC6B0\uC800 \uD0ED",
41630
- summary: "\uC9C0\uAE08 \uC5F4\uB824 \uC788\uB294 \uD0ED\uC744 \uBCF4\uACE0, \uC5F4\uACE0, \uC55E\uC73C\uB85C \uAC00\uC838\uC624\uACE0, \uB2EB\uB294\uB2E4",
41631
- aliases: ["\uBE0C\uB77C\uC6B0\uC800 \uD0ED", "\uD0ED \uC5F4\uAE30", "\uD0ED \uB2EB\uAE30", "\uD0ED \uC804\uD658"],
41632
- dataScope: "local",
41633
- // The two named here are how this group's surface is created and reduced,
41634
- // and a guard holds them equal to the surface policy - one place would go
41635
- // stale on its own otherwise.
41636
- openerTool: "tab_open",
41637
- reducerTool: "tab_close"
41638
- },
41639
- {
41640
- slug: "benchmark",
41641
- label: "\uACBD\uC7C1\uC790 \uBCA4\uCE58\uB9C8\uD0B9",
41642
- summary: "\uB2E4\uB978 \uBE14\uB85C\uADF8\xB7\uCE74\uD398\xB7\uC778\uD50C\uB8E8\uC5B8\uC11C\uAC00 \uBB34\uC5C7\uC744 \uD558\uB294\uC9C0",
41643
- aliases: ["\uACBD\uC7C1 \uBE14\uB85C\uADF8", "\uACBD\uC7C1\uC790 \uBD84\uC11D", "\uBCA4\uCE58\uB9C8\uD0B9", "\uC778\uD50C\uB8E8\uC5B8\uC11C \uBD84\uC11D"],
41644
- dataScope: "public"
41645
- },
41646
- {
41647
- slug: "place",
41648
- label: "\uB124\uC774\uBC84 \uD50C\uB808\uC774\uC2A4 \uAD00\uB9AC",
41649
- summary: "\uB0B4 \uB9E4\uC7A5 \uC815\uBCF4\xB7\uB9AC\uBDF0\xB7\uC608\uC57D\xB7\uCFE0\uD3F0\xB7\uB300\uAE30",
41650
- aliases: ["\uC6B0\uB9AC \uB9E4\uC7A5", "\uD50C\uB808\uC774\uC2A4 \uB9AC\uBDF0", "\uC608\uC57D", "\uCFE0\uD3F0", "\uB9E4\uC7A5 \uD3C9\uD310"],
41651
- dataScope: "own"
41652
- },
41653
- {
41654
- slug: "shopping",
41655
- label: "\uC1FC\uD551 \uC778\uC0AC\uC774\uD2B8",
41656
- summary: "\uC774 \uC0C1\uD488\uC774 \uC5B8\uC81C \uB204\uAD6C\uC5D0\uAC8C \uD314\uB9AC\uB294\uC9C0",
41657
- aliases: ["\uC1FC\uD551 \uD2B8\uB80C\uB4DC", "\uC0C1\uD488 \uC218\uC694", "\uCE74\uD14C\uACE0\uB9AC \uD310\uB9E4", "\uAD6C\uB9E4 \uC5F0\uB839"],
41658
- dataScope: "public"
41659
- },
41660
- {
41661
- slug: "ad-bidding",
41662
- label: "\uAC80\uC0C9\uAD11\uACE0 \uC785\uCC30",
41663
- // The calls themselves cost nothing, hence the read tier, but they return
41664
- // data only when the user's search-ad account credentials are present.
41665
- summary: "\uC785\uCC30\uAC00\uC640 \uC608\uC0C1 \uC131\uACFC \u2014 \uBB34\uB8CC, \uAC80\uC0C9\uAD11\uACE0 \uACC4\uC815 \uC790\uACA9\uC99D\uBA85 \uD544\uC694",
41666
- aliases: ["\uAC80\uC0C9\uAD11\uACE0", "\uAD11\uACE0 \uC785\uCC30", "\uC785\uCC30\uAC00", "\uAD11\uACE0 \uC131\uACFC", "\uAD11\uACE0\uBE44"],
41667
- dataScope: "own"
41668
- },
41669
- {
41670
- slug: "store-settlement",
41671
- label: "\uC2A4\uD1A0\uC5B4 \uC815\uC0B0\xB7\uB9E4\uCD9C",
41672
- // The seller's own money. Nothing here writes, and the payout account the
41673
- // settlement response carries is dropped before it reaches a host.
41674
- summary: "\uC815\uC0B0 \uC608\uC815\uC77C\uACFC \uAE08\uC561, \uC77C\uBCC4 \uB9E4\uCD9C \u2014 \uCEE4\uBA38\uC2A4API \uC790\uACA9\uC99D\uBA85 \uD544\uC694",
41675
- aliases: ["\uC2A4\uD1A0\uC5B4 \uC815\uC0B0", "\uC815\uC0B0 \uC608\uC815", "\uB9E4\uCD9C", "\uCEE4\uBA38\uC2A4 \uC8FC\uBB38"],
41676
- dataScope: "own"
41677
- },
41678
- {
41679
- slug: "comment-stats",
41680
- label: "\uB313\uAE00 \uBC18\uC751 \uD1B5\uACC4",
41681
- summary: "\uB274\uC2A4 \uB313\uAE00\uC774 \uC5B8\uC81C \uB204\uAD6C\uC5D0\uAC8C \uB2EC\uB9AC\uB294\uC9C0",
41682
- aliases: ["\uB274\uC2A4 \uB313\uAE00", "\uB313\uAE00 \uBC18\uC751", "\uB313\uAE00 \uC131\uBCC4", "\uB313\uAE00 \uC2DC\uAC04\uB300"],
41683
- dataScope: "public"
41684
- },
41685
- {
41686
- slug: "editor-control",
41687
- label: "\uAE00\uC4F0\uAE30 \uCC3D \uC81C\uC5B4",
41688
- summary: "\uC5F4\uB824 \uC788\uB294 \uB124\uC774\uBC84 \uAE00\uC4F0\uAE30 \uCC3D\uC758 \uC6D0\uACE0\uB97C \uC77D\uACE0 \uACE0\uCE5C\uB2E4",
41689
- aliases: ["\uBE14\uB85C\uADF8 \uAE00\uC4F0\uAE30", "\uC5F4\uB9B0 \uC6D0\uACE0", "\uCD08\uC548 \uC218\uC815", "\uC81C\uBAA9 \uC218\uC815"],
41690
- dataScope: "local",
41691
- needsTab: true,
41692
- openerTool: "editor_open_window",
41693
- reducerTool: "editor_reduce_windows",
41694
- steps: [
41695
- "editor_read \uB85C \uC9C0\uAE08 \uAE00\uC5D0 \uBB34\uC5C7\uC774 \uC788\uB294\uC9C0 \uBA3C\uC800 \uD655\uC778\uD55C\uB2E4 \u2014 \uBE48 \uC904 \uC54C\uACE0 \uB36E\uC5B4\uC4F0\uB294 \uAC83\uC774 \uAC00\uC7A5 \uD754\uD55C \uC0AC\uACE0\uB2E4",
41696
- "\uACE0\uCE60 \uB0B4\uC6A9\uC744 \uB9CC\uB4E0\uB2E4",
41697
- "editor_place_draft \uB85C \uB123\uB294\uB2E4. \uC774\uBBF8 \uB0B4\uC6A9\uC774 \uC788\uC73C\uBA74 \uC9C0\uC6B0\uC9C0 \uC54A\uACE0 \uAC70\uC808\uD558\uBA70 \uB2E4\uC74C \uB3C4\uAD6C\uB97C \uC54C\uB824 \uC900\uB2E4",
41698
- "\uC804\uCCB4\uB97C \uAC08\uC544\uC5CE\uC5B4\uC57C \uD560 \uB54C\uB9CC, \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3C\uC5B4\uBCF8 \uB4A4 editor_replace \uB97C \uC4F4\uB2E4"
41699
- ]
41700
- },
41701
- {
41702
- slug: "photo-editor",
41703
- label: "\uC0AC\uC9C4 \uD3B8\uC9D1\uAE30 \uC870\uC791",
41704
- summary: "\uC0AC\uC9C4 \uD3B8\uC9D1\uAE30 \uCE94\uBC84\uC2A4\uC5D0 \uD14D\uC2A4\uD2B8\xB7\uB3C4\uD615\xB7\uC774\uBBF8\uC9C0\uB97C \uB123\uB294\uB2E4",
41705
- aliases: ["\uC0AC\uC9C4 \uD3B8\uC9D1\uAE30", "\uCE74\uB4DC\uB274\uC2A4", "\uCE94\uBC84\uC2A4", "\uC2AC\uB77C\uC774\uB4DC \uB514\uC790\uC778"],
41706
- dataScope: "local",
41707
- needsTab: true,
41708
- openerTool: "photo_project_new",
41709
- reducerTool: "editor_reduce_windows"
41710
- },
41711
- {
41712
- slug: "video-editor",
41713
- label: "\uC601\uC0C1 \uD3B8\uC9D1\uAE30 \uC870\uC791",
41714
- summary: "\uC601\uC0C1 \uD3B8\uC9D1\uAE30\uC758 \uC7A5\uBA74\xB7\uC790\uB9C9\xB7\uBAA9\uC18C\uB9AC\uB97C \uB9CC\uB4E0\uB2E4",
41715
- aliases: ["\uC601\uC0C1 \uD3B8\uC9D1\uAE30", "\uC20F\uD3FC", "\uB9B4\uC2A4", "\uC7A5\uBA74", "\uC790\uB9C9", "AI \uBAA9\uC18C\uB9AC"],
41716
- dataScope: "local",
41717
- needsTab: true,
41718
- openerTool: "video_project_new",
41719
- reducerTool: "editor_reduce_windows"
41720
- },
41721
- {
41722
- slug: "gallery",
41723
- label: "\uC774\uBBF8\uC9C0 \uAC24\uB7EC\uB9AC",
41724
- summary: "\uB0B4\uAC00 \uB9CC\uB4E0 \uC0AC\uC9C4 \uD30C\uC77C\uC744 \uAC24\uB7EC\uB9AC\uC5D0 \uB123\uC5B4 \uB450 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC4F4\uB2E4 \u2014 \uD3B8\uC9D1\uAE30 \uCC3D\uC774 \uC5C6\uC5B4\uB3C4 \uB41C\uB2E4",
41725
- aliases: ["\uC774\uBBF8\uC9C0 \uAC24\uB7EC\uB9AC", "\uC0AC\uC9C4 \uAC00\uC838\uC624\uAE30", "\uC774\uBBF8\uC9C0 \uBCF4\uAD00"],
41726
- dataScope: "local",
41727
- steps: [
41728
- "gallery_image_add \uB85C \uAC24\uB7EC\uB9AC\uC5D0 \uBA3C\uC800 \uB123\uB294\uB2E4",
41729
- "\uD3B8\uC9D1\uAE30 \uCABD \uB3C4\uAD6C\uB85C \uADF8 ref \uB97C \uAC00\uC838\uB2E4 \uC4F4\uB2E4 \u2014 \uAC24\uB7EC\uB9AC\uB97C \uAC70\uCE58\uBA74 \uD3B8\uC9D1\uAE30 \uCC3D\uC774 \uC5C6\uC5B4\uB3C4 \uBBF8\uB9AC \uC900\uBE44\uD560 \uC218 \uC788\uB2E4"
41730
- ]
41731
- }
41732
- ];
41733
- var FALLBACK_SLUG2 = "other";
41734
- function slugFor2(name) {
41735
- for (const e of EXPLICIT2) {
41736
- if (e.tools.includes(name)) return e.slug;
41737
- }
41738
- for (const p of BY_PREFIX2) {
41739
- if (p.prefixes.some((x) => name.startsWith(x))) return p.slug;
41740
- }
41741
- return FALLBACK_SLUG2;
41742
- }
41743
- function buildToolsets2(names) {
41744
- const byslug = /* @__PURE__ */ new Map();
41745
- for (const n of names) {
41746
- const s = slugFor2(n);
41747
- (byslug.get(s) ?? byslug.set(s, []).get(s)).push(n);
41748
- }
41749
- const out = [];
41750
- for (const m of META2) {
41751
- const tools = byslug.get(m.slug) ?? [];
41752
- if (tools.length > 0) out.push({ ...m, tools });
41753
- byslug.delete(m.slug);
41754
- }
41755
- const leftover = byslug.get(FALLBACK_SLUG2) ?? [];
41756
- if (leftover.length > 0) {
41757
- out.push({
41758
- slug: FALLBACK_SLUG2,
41759
- label: "\uADF8 \uBC16\uC758 \uB3C4\uAD6C",
41760
- summary: "\uC544\uC9C1 \uBB36\uC74C\uC774 \uC815\uD574\uC9C0\uC9C0 \uC54A\uC740 \uB3C4\uAD6C",
41761
- aliases: ["\uAE30\uD0C0"],
41762
- dataScope: "mixed",
41763
- tools: leftover
41764
- });
41765
- }
41766
- return out;
41767
- }
41768
- var CATALOG_TOOL2 = "datalab_catalog";
41769
41101
  var FIND_TOOLS_TOOL2 = "datalab_find_tools";
41770
- var DESCRIBE_TOOL2 = "datalab_describe";
41771
41102
  var CALL_TOOL2 = "datalab_call";
41772
41103
  var CONFIRM_STATUS_TOOL2 = "datalab_confirm_status";
41773
41104
  var SESSION_STATE_TOOL2 = "datalab_session_state";
@@ -41778,10 +41109,7 @@ function browserProperty2() {
41778
41109
  description: `${BROWSERS_TOOL2} \uAC00 \uB3CC\uB824\uC900 \uC2E4\uD589 \uB300\uC0C1 \uBE0C\uB77C\uC6B0\uC800 id`
41779
41110
  };
41780
41111
  }
41781
- var DESCRIBE_PAGE_SIZE2 = 10;
41782
- function discoveryDescriptors2(entries) {
41783
- const sets = buildToolsets2(entries.map((e) => e.name));
41784
- const names = sets.map((s) => s.slug).join(", ");
41112
+ function discoveryDescriptors2() {
41785
41113
  return [
41786
41114
  {
41787
41115
  name: FIND_TOOLS_TOOL2,
@@ -41801,53 +41129,9 @@ function discoveryDescriptors2(entries) {
41801
41129
  additionalProperties: false
41802
41130
  }
41803
41131
  },
41804
- {
41805
- name: CATALOG_TOOL2,
41806
- description: `\uB370\uC774\uD130\uB7A9\uD234\uC988\uAC00 \uD560 \uC218 \uC788\uB294 \uC77C\uC758 \uBAA9\uB85D\uC744 \uB3CC\uB824\uC900\uB2E4. \uB124\uC774\uBC84 \uBE14\uB85C\uADF8\xB7\uD0A4\uC6CC\uB4DC\xB7\uAC80\uC0C9\uACB0\uACFC\xB7\uD50C\uB808\uC774\uC2A4\xB7\uC1FC\uD551\xB7\uAD11\uACE0 \uD1B5\uACC4\uC640 \uAE00\uC4F0\uAE30/\uC0AC\uC9C4/\uC601\uC0C1 \uD3B8\uC9D1\uAE30 \uC81C\uC5B4\uAE4C\uC9C0 ${entries.length}\uAC1C \uB3C4\uAD6C\uAC00 \uC788\uACE0, \uC5EC\uAE30 \uC815\uC758\uB85C \uBCF4\uC774\uB294 \uAC83\uC740 \uADF8\uC911 \uC77C\uBD80\uB2E4. **\uC0AC\uC6A9\uC790\uAC00 \uBB34\uC5C7\uC744 \uBD80\uD0C1\uD558\uB4E0, \uC9C0\uAE08 \uBCF4\uC774\uB294 \uB3C4\uAD6C\uB85C \uC548 \uB418\uBA74 \uBA3C\uC800 \uC774\uAC83\uC744 \uBD88\uB7EC\uB77C** \u2014 \uC5C6\uB2E4\uACE0 \uB2F5\uD558\uAE30 \uC804\uC5D0 \uD655\uC778\uD55C\uB2E4. toolset \uC5C6\uC774 \uBD80\uB974\uBA74 \uBB36\uC74C \uBAA9\uB85D, \uC8FC\uBA74 \uADF8 \uBB36\uC74C\uC758 \uB3C4\uAD6C \uC774\uB984\uACFC \uC124\uBA85. \uBB36\uC74C: ${names}.`,
41807
- annotations: LOOKUP_ANNOTATIONS2,
41808
- inputSchema: {
41809
- type: "object",
41810
- properties: {
41811
- toolset: {
41812
- type: "string",
41813
- enum: sets.map((s) => s.slug),
41814
- description: "\uC774 \uBB36\uC74C\uC758 \uB3C4\uAD6C \uBAA9\uB85D\uC744 \uBCF8\uB2E4. \uC0DD\uB7B5\uD558\uBA74 \uBB36\uC74C \uBAA9\uB85D\uB9CC"
41815
- },
41816
- query: {
41817
- type: "string",
41818
- description: "\uCC3E\uB294 \uB9D0(\uC608: '\uBC29\uBB38\uC790', '\uACBD\uC7C1'). \uC774\uB984\uACFC \uC124\uBA85\uC5D0\uC11C \uCC3E\uACE0, \uBB36\uC74C \uC774\uB984\uC774 \uB9DE\uC73C\uBA74 \uADF8 \uBB36\uC74C\uB3C4 \uD568\uAED8 \uB3CC\uB824\uC900\uB2E4"
41819
- },
41820
- withSchemas: {
41821
- type: "boolean",
41822
- description: `\uC778\uC790 \uC2A4\uD0A4\uB9C8\uAE4C\uC9C0 \uD568\uAED8 \uBC1B\uB294\uB2E4 \u2014 \uADF8\uB7EC\uBA74 ${DESCRIBE_TOOL2} \uC5C6\uC774 \uBC14\uB85C \uC2E4\uD589\uD560 \uC218 \uC788\uB2E4. toolset \uC774\uB098 query \uC640 \uAC19\uC774 \uC904 \uB54C\uB9CC \uC4F4\uB2E4`
41823
- },
41824
- browser: browserProperty2()
41825
- },
41826
- additionalProperties: false
41827
- }
41828
- },
41829
- {
41830
- name: DESCRIBE_TOOL2,
41831
- description: `\uB3C4\uAD6C\uC758 \uC778\uC790 \uC2A4\uD0A4\uB9C8\uB97C \uB3CC\uB824\uC900\uB2E4. **${CALL_TOOL2} \uB85C \uBD80\uB974\uAE30 \uC804\uC5D0 \uADF8 \uB3C4\uAD6C\uC5D0 \uB300\uD574 \uCD5C\uC18C \uD55C \uBC88\uC740 \uC774\uAC83\uC744 \uD638\uCD9C\uD574\uB77C** \u2014 \uC778\uC790 \uC774\uB984\uACFC \uD544\uC218 \uC5EC\uBD80\uB97C \uC9C0\uC5B4\uB0B4\uBA74 \uAC70\uC808\uB418\uACE0, \uC655\uBCF5\uC774 \uD55C \uBC88 \uB354 \uB4E0\uB2E4. \uC774\uBBF8 \uC2A4\uD0A4\uB9C8\uB97C \uBC1B\uC544 \uB454 \uB3C4\uAD6C\uB294 \uB2E4\uC2DC \uBD80\uB97C \uD544\uC694 \uC5C6\uB2E4.`,
41832
- annotations: LOOKUP_ANNOTATIONS2,
41833
- inputSchema: {
41834
- type: "object",
41835
- properties: {
41836
- tools: {
41837
- type: "array",
41838
- items: { type: "string" },
41839
- maxItems: DESCRIBE_PAGE_SIZE2,
41840
- description: `\uC2A4\uD0A4\uB9C8\uB97C \uBCFC \uB3C4\uAD6C \uC774\uB984 (\uD55C \uBC88\uC5D0 ${DESCRIBE_PAGE_SIZE2}\uAC1C\uAE4C\uC9C0)`
41841
- },
41842
- browser: browserProperty2()
41843
- },
41844
- required: ["tools"],
41845
- additionalProperties: false
41846
- }
41847
- },
41848
41132
  {
41849
41133
  name: CALL_TOOL2,
41850
- description: `${FIND_TOOLS_TOOL2} \uB610\uB294 ${CATALOG_TOOL2} \uB85C \uCC3E\uC740 \uB3C4\uAD6C\uB97C \uC2E4\uD589\uD55C\uB2E4. args \uB294 \uAC80\uC0C9 \uACB0\uACFC\uB098 ${DESCRIBE_TOOL2} \uAC00 \uC900 \uC2A4\uD0A4\uB9C8\uB97C \uADF8\uB300\uB85C \uB530\uB978\uB2E4 \u2014 \uB9DE\uC9C0 \uC54A\uC73C\uBA74 \uC2E4\uD589\uD558\uC9C0 \uC54A\uACE0 \uBB34\uC5C7\uC774 \uD2C0\uB838\uB294\uC9C0 \uB3CC\uB824\uC900\uB2E4. \uBB38\uC11C\uB97C \uACE0\uCE58\uAC70\uB098 \uC694\uAE08\uC774 \uB4DC\uB294 \uB3C4\uAD6C\uB294 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uC744 \uBC1B\uC740 \uB4A4\uC5D0 \uC2E4\uD589\uB41C\uB2E4.`,
41134
+ description: `${FIND_TOOLS_TOOL2} \uB85C \uCC3E\uC740 \uB3C4\uAD6C\uB97C \uC2E4\uD589\uD55C\uB2E4. args \uB294 \uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC900 \uC2A4\uD0A4\uB9C8\uB97C \uADF8\uB300\uB85C \uB530\uB978\uB2E4 \u2014 \uB9DE\uC9C0 \uC54A\uC73C\uBA74 \uC2E4\uD589\uD558\uC9C0 \uC54A\uACE0 \uBB34\uC5C7\uC774 \uD2C0\uB838\uB294\uC9C0 \uB3CC\uB824\uC900\uB2E4. \uBB38\uC11C\uB97C \uACE0\uCE58\uAC70\uB098 \uC694\uAE08\uC774 \uB4DC\uB294 \uB3C4\uAD6C\uB294 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uC744 \uBC1B\uC740 \uB4A4\uC5D0 \uC2E4\uD589\uB41C\uB2E4.`,
41851
41135
  // Deliberately unannotated: this tool's effect is the delegated tool's
41852
41136
  // effect, so any fixed hint would be half false. Tier is judged at run time.
41853
41137
  inputSchema: {
@@ -41856,7 +41140,7 @@ function discoveryDescriptors2(entries) {
41856
41140
  tool: { type: "string", description: "\uC2E4\uD589\uD560 \uB3C4\uAD6C \uC774\uB984" },
41857
41141
  args: {
41858
41142
  type: "object",
41859
- description: `\uADF8 \uB3C4\uAD6C\uC758 \uC778\uC790. ${DESCRIBE_TOOL2} \uC758 \uC2A4\uD0A4\uB9C8\uB97C \uB530\uB978\uB2E4`
41143
+ description: `\uADF8 \uB3C4\uAD6C\uC758 \uC778\uC790. ${FIND_TOOLS_TOOL2} \uAC00 \uBC18\uD658\uD55C \uC2A4\uD0A4\uB9C8\uB97C \uB530\uB978\uB2E4`
41860
41144
  },
41861
41145
  browser: browserProperty2()
41862
41146
  },
@@ -41907,15 +41191,9 @@ function browsersDescriptor2() {
41907
41191
  annotations: LOOKUP_ANNOTATIONS2
41908
41192
  };
41909
41193
  }
41910
- function allowlistNames2() {
41911
- return [.../* @__PURE__ */ new Set([...READ_ONLY_TOOLS2, ...Object.keys(TOOL_TIERS2)])];
41912
- }
41913
41194
  function staticDiscoveryCatalog2() {
41914
- const entries = allowlistNames2().map(
41915
- (name) => name === BROWSERS_TOOL2 ? browsersDescriptor2() : { name, description: "", inputSchema: {} }
41916
- );
41917
41195
  return [
41918
- ...discoveryDescriptors2(entries),
41196
+ ...discoveryDescriptors2(),
41919
41197
  sessionStateDescriptor2(),
41920
41198
  browsersDescriptor2()
41921
41199
  ].map(
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  dispatchCli,
4
4
  runAdapter,
5
5
  runDaemon
6
- } from "./chunk-Q3IODS5D.js";
6
+ } from "./chunk-ISDPAXDZ.js";
7
7
  import "./chunk-MLKGABMK.js";
8
8
 
9
9
  // src/cli.ts
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  dispatchCli,
4
4
  ensureDaemonRunning,
5
5
  runAdapter
6
- } from "./chunk-Q3IODS5D.js";
6
+ } from "./chunk-ISDPAXDZ.js";
7
7
  import "./chunk-MLKGABMK.js";
8
8
  export {
9
9
  createAdapterServer,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modootoday/datalab-extension-mcp",
3
- "version": "1.9.3",
3
+ "version": "1.10.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",