@koda-sl/baker-cli 0.13.0 → 0.15.0

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
@@ -470,6 +470,80 @@ baker research advertisers "crm software" --location uk --limit 10
470
470
 
471
471
  ---
472
472
 
473
+ ### `baker research autocomplete "seed keyword"`
474
+
475
+ Get Google Autocomplete suggestions for keyword expansion.
476
+
477
+ ```bash
478
+ baker research autocomplete "running shoes"
479
+ baker research autocomplete "crm" --location uk --limit 5
480
+ ```
481
+
482
+ **Response:**
483
+
484
+ ```json
485
+ {
486
+ "ok": true,
487
+ "data": [
488
+ { "suggestion": "running shoes for men" },
489
+ { "suggestion": "running shoes near me" }
490
+ ],
491
+ "fields": {
492
+ "suggestion": "Autocomplete suggestion from Google"
493
+ }
494
+ }
495
+ ```
496
+
497
+ **Flags:**
498
+
499
+ | Flag | Description |
500
+ |--------------|--------------------------------------|
501
+ | `--location` | Country code (us, uk, es, de...). **Defaults to us** |
502
+ | `--language` | Language code or name. **Defaults to en** |
503
+ | `--limit` | Max suggestions (default: 10, max: 20) |
504
+ | `--no-cache` | Skip cache (24h TTL) |
505
+ | `--output` | Format: json\|csv\|md\|jsonl |
506
+
507
+ ---
508
+
509
+ ### `baker research relevant-pages "domain.com"`
510
+
511
+ Get the top pages of a competitor domain with organic traffic data.
512
+
513
+ ```bash
514
+ baker research relevant-pages "competitor.com"
515
+ baker research relevant-pages "competitor.com" --location es --limit 10
516
+ ```
517
+
518
+ **Response:**
519
+
520
+ ```json
521
+ {
522
+ "ok": true,
523
+ "data": [
524
+ { "page": "https://competitor.com/best-product", "etv": 12500, "keywords": 340, "top_10": 85 }
525
+ ],
526
+ "fields": {
527
+ "page": "Page URL",
528
+ "etv": "Estimated monthly organic traffic",
529
+ "keywords": "Total organic keywords the page ranks for",
530
+ "top_10": "Keywords in positions 1-10"
531
+ }
532
+ }
533
+ ```
534
+
535
+ **Flags:**
536
+
537
+ | Flag | Description |
538
+ |--------------|--------------------------------------|
539
+ | `--location` | Country code (us, uk, es, de...). **Defaults to us** |
540
+ | `--language` | Language code or name. **Defaults to en** |
541
+ | `--limit` | Max results (default: 20, max: 1000) |
542
+ | `--no-cache` | Skip cache (6h TTL) |
543
+ | `--output` | Format: json\|csv\|md\|jsonl |
544
+
545
+ ---
546
+
473
547
  ### `baker research intent "kw1,kw2,kw3"`
474
548
 
475
549
  Classify Google Search intent for keywords.
@@ -702,9 +776,11 @@ Research data is cached server-side (shared across all callers). No local cache
702
776
  | Command | TTL | Reason |
703
777
  |-------------------|---------|-------------------------------------|
704
778
  | advertisers | 6 hours | SERP landscape changes slowly |
779
+ | autocomplete | 24 hours| Suggestions change daily at most |
705
780
  | intent | 7 days | Intent classification is very stable |
706
781
  | keywords-for-site | 6 hours | Keyword targeting changes weekly |
707
782
  | keyword-gap | 6 hours | Same |
783
+ | relevant-pages | 6 hours | Traffic data updates weekly |
708
784
  | lighthouse | 24 hours| Page performance stable day-to-day |
709
785
 
710
786
  ---
package/dist/cli.js CHANGED
@@ -9,7 +9,7 @@ import { videosCommand } from "./commands/videos/index.js";
9
9
  const main = defineCommand({
10
10
  meta: {
11
11
  name: "baker",
12
- version: "0.13.0",
12
+ version: "0.15.0",
13
13
  description: `AI-agent CLI for finding and managing images, videos, testimonials, and ad platform data in Baker.
14
14
 
15
15
  Auth: Set BAKER_API_KEY (starts with bk_) and BAKER_API_URL environment variables.
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- type ErrorCode = "UNAUTHORIZED" | "NOT_FOUND" | "VALIDATION_ERROR" | "RATE_LIMITED" | "INTERNAL_ERROR" | "NETWORK_ERROR";
1
+ type ErrorCode = "UNAUTHORIZED" | "NOT_FOUND" | "VALIDATION_ERROR" | "RATE_LIMITED" | "INTERNAL_ERROR" | "NETWORK_ERROR" | "TIMEOUT";
2
2
  export declare class ApiError extends Error {
3
3
  code: ErrorCode;
4
4
  constructor(code: ErrorCode, message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GACV,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,CAAC;AAEpB,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,SAAS,CAAC;gBAEJ,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAK7C;AAqBD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIjD;AAsDD,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAwBzF;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAkBxE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GACV,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;AAEd,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,SAAS,CAAC;gBAEJ,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAK7C;AAqBD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIjD;AAsDD,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BzF;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAsBxE"}
package/dist/client.js CHANGED
@@ -96,9 +96,13 @@ export async function apiGet(path, params) {
96
96
  Authorization: `Bearer ${env.BAKER_API_KEY}`,
97
97
  Accept: "application/json",
98
98
  },
99
+ signal: AbortSignal.timeout(60_000),
99
100
  });
100
101
  }
101
102
  catch (err) {
103
+ if (err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError")) {
104
+ throw new ApiError("TIMEOUT", "Request timed out after 60 seconds");
105
+ }
102
106
  throw new ApiError("NETWORK_ERROR", `Request failed: ${err instanceof Error ? err.message : "Unknown error"}`);
103
107
  }
104
108
  return handleResponse(response);
@@ -115,9 +119,13 @@ export async function apiPost(path, body) {
115
119
  Accept: "application/json",
116
120
  },
117
121
  body: JSON.stringify(body),
122
+ signal: AbortSignal.timeout(60_000),
118
123
  });
119
124
  }
120
125
  catch (err) {
126
+ if (err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError")) {
127
+ throw new ApiError("TIMEOUT", "Request timed out after 60 seconds");
128
+ }
121
129
  throw new ApiError("NETWORK_ERROR", `Request failed: ${err instanceof Error ? err.message : "Unknown error"}`);
122
130
  }
123
131
  return handleResponse(response);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export declare const autocompleteCommand: import("citty").CommandDef<{
2
+ readonly keyword: {
3
+ readonly type: "positional";
4
+ readonly description: "Seed keyword";
5
+ readonly required: true;
6
+ };
7
+ readonly location: {
8
+ readonly type: "string";
9
+ readonly description: "Country code or location code (default: us)";
10
+ readonly required: false;
11
+ };
12
+ readonly language: {
13
+ readonly type: "string";
14
+ readonly description: "Language code or name (default: en)";
15
+ readonly required: false;
16
+ };
17
+ readonly limit: {
18
+ readonly type: "string";
19
+ readonly description: "Max suggestions (default: 10, max: 20)";
20
+ readonly required: false;
21
+ };
22
+ readonly output: {
23
+ readonly type: "string";
24
+ readonly description: "Format: json|csv|md|jsonl";
25
+ readonly required: false;
26
+ readonly default: "json";
27
+ };
28
+ readonly "no-cache": {
29
+ readonly type: "boolean";
30
+ readonly description: "Skip server cache, hit API directly";
31
+ readonly required: false;
32
+ };
33
+ }>;
34
+ //# sourceMappingURL=autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../src/commands/research/autocomplete.ts"],"names":[],"mappings":"AAoCA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6C9B,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { defineCommand } from "citty";
2
+ import { apiPost } from "../../client.js";
3
+ import { buildResearchQueryContext, warnDefaults } from "../../geo-context.js";
4
+ import { registerSchema } from "../../schemas.js";
5
+ import { handleResearchError, RESEARCH_DATA_NOTE, writeResearchJson, writeResearchOutput } from "./output.js";
6
+ registerSchema({
7
+ command: "research.autocomplete",
8
+ description: "Get Google Autocomplete suggestions for a seed keyword. Useful for keyword expansion and discovering what people actually search for. IMPORTANT: If --location and --language are omitted, defaults to United States (us) and English (en).",
9
+ args: {
10
+ keyword: { type: "string", description: "Seed keyword (positional)", required: true },
11
+ location: {
12
+ type: "string",
13
+ description: "Country code (us, uk, es, de...) or DataForSEO location code. DEFAULTS TO us (United States) if omitted",
14
+ required: false,
15
+ },
16
+ language: {
17
+ type: "string",
18
+ description: "Language code or name. DEFAULTS TO en (English) if omitted",
19
+ required: false,
20
+ },
21
+ limit: { type: "string", description: "Max suggestions (default: 10, max: 20)", required: false },
22
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false },
23
+ },
24
+ });
25
+ const FIELDS = {
26
+ suggestion: "Autocomplete suggestion from Google",
27
+ };
28
+ export const autocompleteCommand = defineCommand({
29
+ meta: {
30
+ name: "autocomplete",
31
+ description: `Get Google Autocomplete suggestions for keyword expansion.
32
+
33
+ Examples:
34
+ baker research autocomplete "running shoes"
35
+ baker research autocomplete "crm" --location uk --limit 5`,
36
+ },
37
+ args: {
38
+ keyword: { type: "positional", description: "Seed keyword", required: true },
39
+ location: { type: "string", description: "Country code or location code (default: us)", required: false },
40
+ language: { type: "string", description: "Language code or name (default: en)", required: false },
41
+ limit: { type: "string", description: "Max suggestions (default: 10, max: 20)", required: false },
42
+ output: { type: "string", description: "Format: json|csv|md|jsonl", required: false, default: "json" },
43
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false },
44
+ },
45
+ run: async ({ args }) => {
46
+ const keyword = args.keyword;
47
+ const location = args.location || undefined;
48
+ const language = args.language || undefined;
49
+ const limit = args.limit ? Number(args.limit) : undefined;
50
+ const skipCache = args["no-cache"] ? true : undefined;
51
+ const queryContext = buildResearchQueryContext(location, language);
52
+ try {
53
+ const data = await apiPost("/api/research/autocomplete", {
54
+ keyword,
55
+ location,
56
+ language,
57
+ limit,
58
+ skipCache,
59
+ });
60
+ warnDefaults(queryContext);
61
+ const format = args.output || "json";
62
+ if (format !== "json") {
63
+ writeResearchOutput(data, format);
64
+ return;
65
+ }
66
+ writeResearchJson({ ok: true, data, fields: FIELDS, note: RESEARCH_DATA_NOTE, query_context: queryContext });
67
+ }
68
+ catch (err) {
69
+ handleResearchError(err);
70
+ }
71
+ },
72
+ });
73
+ //# sourceMappingURL=autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/commands/research/autocomplete.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/research/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,eAAe,qDA8B1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/research/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,eAAe,qDAoC1B,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import { defineCommand } from "citty";
2
2
  import { advertisersCommand } from "./advertisers.js";
3
+ import { autocompleteCommand } from "./autocomplete.js";
3
4
  import { countriesCommand } from "./countries.js";
4
5
  import { intentCommand } from "./intent.js";
5
6
  import { keywordGapCommand } from "./keyword-gap.js";
6
7
  import { keywordsForSiteCommand } from "./keywords-for-site.js";
7
8
  import { languagesCommand } from "./languages.js";
8
9
  import { lighthouseCommand } from "./lighthouse.js";
10
+ import { relevantPagesCommand } from "./relevant-pages.js";
9
11
  export const researchCommand = defineCommand({
10
12
  meta: {
11
13
  name: "research",
@@ -13,28 +15,34 @@ export const researchCommand = defineCommand({
13
15
 
14
16
  Commands:
15
17
  advertisers — Who's bidding on a keyword?
18
+ autocomplete — Google Autocomplete suggestions
16
19
  intent — Google Search intent classification
17
20
  keywords-for-site — Keywords a domain bids on
18
21
  keyword-gap — Keywords they have that we don't
22
+ relevant-pages — Top pages of a competitor domain
19
23
  lighthouse — Landing page performance audit
20
24
  countries — List supported country codes
21
25
  languages — List supported language codes
22
26
 
23
27
  Examples:
24
28
  baker research advertisers "running shoes"
29
+ baker research autocomplete "running shoes"
25
30
  baker research intent "buy running shoes,best running shoes 2026"
26
31
  baker research keywords-for-site "competitor.com"
27
32
  baker research keyword-gap "them.com" "us.com"
33
+ baker research relevant-pages "competitor.com"
28
34
  baker research lighthouse "https://example.com/landing"`,
29
35
  },
30
36
  subCommands: {
31
37
  advertisers: advertisersCommand,
38
+ autocomplete: autocompleteCommand,
32
39
  countries: countriesCommand,
33
40
  intent: intentCommand,
34
41
  "keywords-for-site": keywordsForSiteCommand,
35
42
  "keyword-gap": keywordGapCommand,
36
43
  languages: languagesCommand,
37
44
  lighthouse: lighthouseCommand,
45
+ "relevant-pages": relevantPagesCommand,
38
46
  },
39
47
  });
40
48
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/research/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE;;;;;;;;;;;;;;;;0DAgByC;KACvD;IACD,WAAW,EAAE;QACX,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,aAAa;QACrB,mBAAmB,EAAE,sBAAsB;QAC3C,aAAa,EAAE,iBAAiB;QAChC,SAAS,EAAE,gBAAgB;QAC3B,UAAU,EAAE,iBAAiB;KAC9B;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/research/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;0DAoByC;KACvD;IACD,WAAW,EAAE;QACX,WAAW,EAAE,kBAAkB;QAC/B,YAAY,EAAE,mBAAmB;QACjC,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,aAAa;QACrB,mBAAmB,EAAE,sBAAsB;QAC3C,aAAa,EAAE,iBAAiB;QAChC,SAAS,EAAE,gBAAgB;QAC3B,UAAU,EAAE,iBAAiB;QAC7B,gBAAgB,EAAE,oBAAoB;KACvC;CACF,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ export declare const relevantPagesCommand: import("citty").CommandDef<{
2
+ readonly target: {
3
+ readonly type: "positional";
4
+ readonly description: "Domain to analyze";
5
+ readonly required: true;
6
+ };
7
+ readonly location: {
8
+ readonly type: "string";
9
+ readonly description: "Country code or location code (default: us)";
10
+ readonly required: false;
11
+ };
12
+ readonly language: {
13
+ readonly type: "string";
14
+ readonly description: "Language code or name (default: en)";
15
+ readonly required: false;
16
+ };
17
+ readonly limit: {
18
+ readonly type: "string";
19
+ readonly description: "Max results (default: 20, max: 1000)";
20
+ readonly required: false;
21
+ };
22
+ readonly output: {
23
+ readonly type: "string";
24
+ readonly description: "Format: json|csv|md|jsonl";
25
+ readonly required: false;
26
+ readonly default: "json";
27
+ };
28
+ readonly "no-cache": {
29
+ readonly type: "boolean";
30
+ readonly description: "Skip server cache, hit API directly";
31
+ readonly required: false;
32
+ };
33
+ }>;
34
+ //# sourceMappingURL=relevant-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relevant-pages.d.ts","sourceRoot":"","sources":["../../../src/commands/research/relevant-pages.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6C/B,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { defineCommand } from "citty";
2
+ import { apiPost } from "../../client.js";
3
+ import { buildResearchQueryContext, warnDefaults } from "../../geo-context.js";
4
+ import { registerSchema } from "../../schemas.js";
5
+ import { handleResearchError, RESEARCH_DATA_NOTE, writeResearchJson, writeResearchOutput } from "./output.js";
6
+ registerSchema({
7
+ command: "research.relevant-pages",
8
+ description: "Get the top pages of a competitor domain with organic traffic and ranking data. Shows which pages drive the most traffic. IMPORTANT: If --location and --language are omitted, defaults to United States (us) and English (en).",
9
+ args: {
10
+ target: { type: "string", description: "Domain to analyze (positional, e.g. competitor.com)", required: true },
11
+ location: {
12
+ type: "string",
13
+ description: "Country code (us, uk, es, de...) or DataForSEO location code. DEFAULTS TO us (United States) if omitted",
14
+ required: false,
15
+ },
16
+ language: {
17
+ type: "string",
18
+ description: "Language code or name. DEFAULTS TO en (English) if omitted",
19
+ required: false,
20
+ },
21
+ limit: { type: "string", description: "Max results (default: 20, max: 1000)", required: false },
22
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false },
23
+ },
24
+ });
25
+ const FIELDS = {
26
+ page: "Page URL",
27
+ etv: "Estimated monthly organic traffic",
28
+ keywords: "Total organic keywords the page ranks for",
29
+ top_10: "Keywords in positions 1-10",
30
+ };
31
+ export const relevantPagesCommand = defineCommand({
32
+ meta: {
33
+ name: "relevant-pages",
34
+ description: `Get the top pages of a competitor domain with traffic data.
35
+
36
+ Examples:
37
+ baker research relevant-pages "competitor.com"
38
+ baker research relevant-pages "competitor.com" --location es --limit 10`,
39
+ },
40
+ args: {
41
+ target: { type: "positional", description: "Domain to analyze", required: true },
42
+ location: { type: "string", description: "Country code or location code (default: us)", required: false },
43
+ language: { type: "string", description: "Language code or name (default: en)", required: false },
44
+ limit: { type: "string", description: "Max results (default: 20, max: 1000)", required: false },
45
+ output: { type: "string", description: "Format: json|csv|md|jsonl", required: false, default: "json" },
46
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false },
47
+ },
48
+ run: async ({ args }) => {
49
+ const target = args.target;
50
+ const location = args.location || undefined;
51
+ const language = args.language || undefined;
52
+ const limit = args.limit ? Number(args.limit) : undefined;
53
+ const skipCache = args["no-cache"] ? true : undefined;
54
+ const queryContext = buildResearchQueryContext(location, language);
55
+ try {
56
+ const data = await apiPost("/api/research/relevant-pages", {
57
+ target,
58
+ location,
59
+ language,
60
+ limit,
61
+ skipCache,
62
+ });
63
+ warnDefaults(queryContext);
64
+ const format = args.output || "json";
65
+ if (format !== "json") {
66
+ writeResearchOutput(data, format);
67
+ return;
68
+ }
69
+ writeResearchJson({ ok: true, data, fields: FIELDS, note: RESEARCH_DATA_NOTE, query_context: queryContext });
70
+ }
71
+ catch (err) {
72
+ handleResearchError(err);
73
+ }
74
+ },
75
+ });
76
+ //# sourceMappingURL=relevant-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relevant-pages.js","sourceRoot":"","sources":["../../../src/commands/research/relevant-pages.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-cli",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "AI-agent-first CLI for interacting with Baker",
5
5
  "type": "module",
6
6
  "bin": {