@xyleapp/cli 0.11.0 → 0.12.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/bin/xyle.mjs CHANGED
@@ -8,7 +8,7 @@ const program = new Command();
8
8
  program
9
9
  .name("xyle")
10
10
  .description("SEO & AEO Intelligence Engine CLI")
11
- .version("0.11.0");
11
+ .version("0.12.0");
12
12
 
13
13
  registerCommands(program);
14
14
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyleapp/cli",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "CLI for the Xyle SEO & AEO Intelligence Engine",
5
5
  "type": "module",
6
6
  "bin": {
package/src/seed.mjs CHANGED
@@ -114,6 +114,21 @@ npx @xyleapp/cli <command> [options]
114
114
 
115
115
  Always use \`--json\` when parsing output programmatically.
116
116
 
117
+ ## Sites Hub & Auto-Discovery (Dashboard)
118
+
119
+ Every account has a per-site hub in the dashboard at \`/dashboard/sites/[siteId]\` with four tabs: Overview, Crawl, Analysis, and Competitors. Use it when the CLI alone can't help.
120
+
121
+ **Why this matters:** \`xyle competitors --query\` needs a query string from Search Console. For freshly onboarded sites (no GSC sync yet), there's no meaningful query to pass. The dashboard fills this gap with **Gemini-grounded auto-discovery**: one click finds the top 5–10 direct competitors for a domain, enriches each with a lightweight crawl, and links them to the site.
122
+
123
+ **When to point the user to the Sites Hub:**
124
+ - **New site, no GSC data** → tell the user to open \`/dashboard/sites/[siteId]\` → Competitors tab → "Discover via Gemini". Come back to the CLI after it finishes to continue the audit.
125
+ - **User asks "who are my competitors?" without naming a query** → Sites Hub, not \`xyle competitors --query\`.
126
+ - **User wants a persistent per-site view** → Sites Hub has all four tabs in one place.
127
+
128
+ **Rate limits:** 10 discoveries/user/day, 1 run/site/6h. If the user hits a 429 there's nothing to fix, just wait.
129
+
130
+ **Not in the CLI (yet):** Auto-discovery is dashboard-only. There is no \`xyle competitors discover\` subcommand. When a user is onboarding a fresh site from the CLI and has no query data, explicitly direct them to the dashboard instead of trying to improvise.
131
+
117
132
  ## Strategic Workflows
118
133
 
119
134
  ### 1. Full-Site Audit (Screaming Frog replacement)
@@ -196,6 +211,8 @@ When the user asks something SEO-related, route to the right workflow:
196
211
  | "What content am I missing?" / "Find gaps" | Content Gap Sprint | Ready to create, need briefs |
197
212
  | "Why is my CTR low?" | Page Optimization (CTR focus) | Likely a title/meta problem |
198
213
  | "Help me rank for [query]" | Page Optimization + Competitor Analysis | Need to see what's working for competitors |
214
+ | "I just onboarded my site, what now?" / "No queries yet" | Sites Hub → Discover via Gemini | Bootstrap competitor context before GSC catches up |
215
+ | "Who are my competitors?" (no query named) | Sites Hub → Discover via Gemini | No GSC query means \`competitors --query\` can't help |
199
216
 
200
217
  **After every analysis, proactively recommend the next step.** Don't just present data — interpret it and suggest action.
201
218
 
@@ -208,6 +225,7 @@ When the user asks something SEO-related, route to the right workflow:
208
225
  - Classify queries by intent before suggesting optimizations
209
226
  - Consider the user's ICP when recommending content topics
210
227
  - Use \`status\` first to verify API connectivity
228
+ - **For fresh sites with no GSC history, point the user to the Sites Hub (\`/dashboard/sites/[id]\`) to run Gemini auto-discovery** — don't try to improvise competitor context with \`competitors --query\` when there's no query to pass
211
229
 
212
230
  **Don't:**
213
231
  - Optimize for zero-impression queries (no audience there)