@levr-one/cli 0.9.17 → 0.9.19

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.
@@ -155,12 +155,15 @@ const CLAUDE_CODE_LOCATIONS = [
155
155
  /**
156
156
  * The catalog. Order is presentation order (most common first).
157
157
  *
158
- * `comingSoon` clients (VS Code) are listed but not installable: their config
159
- * format differs enough (VS Code's `servers`/native-http schema) that a
160
- * faithful write is deferred. Their SCOPES are declared as data regardless, so
161
- * the support matrix stays complete and turning them on later is a builder
162
- * change, not a catalog change. Codex left this list in ENG-5264 once the TOML
163
- * adapter existed.
158
+ * Every entry is installable, and there is no deferral flag: the old
159
+ * coming-soon flag was retired in ENG-5558 once its last member left. Codex
160
+ * became installable in ENG-5264 when the TOML adapter existed, and VS Code
161
+ * in ENG-5558 when its file was observed — its `servers` key and native-http
162
+ * entry were already expressible as declared data (`serverPropertyName`,
163
+ * {@link DEFAULT_NATIVE_HTTP_ENTRY}), so enabling it was a catalog change and
164
+ * nothing under `src/node/` moved. A client whose file cannot be written
165
+ * faithfully yet does not belong in this list; add it when its bytes have
166
+ * been observed, born with real provenance.
164
167
  */
165
168
  const HARNESSES = [
166
169
  {
@@ -174,7 +177,6 @@ const HARNESSES = [
174
177
  serverPropertyName: "mcpServers",
175
178
  transport: "mcp-remote",
176
179
  docsUrl: "https://modelcontextprotocol.io/quickstart/user",
177
- comingSoon: false,
178
180
  verifiedVersion: UNVERIFIED_LEGACY,
179
181
  verifiedOn: UNVERIFIED_LEGACY,
180
182
  detectSignals: [
@@ -222,7 +224,6 @@ const HARNESSES = [
222
224
  serverPropertyName: "mcpServers",
223
225
  transport: "native-http",
224
226
  docsUrl: "https://docs.anthropic.com/en/docs/claude-code/mcp",
225
- comingSoon: false,
226
227
  verifiedVersion: UNVERIFIED_LEGACY,
227
228
  verifiedOn: UNVERIFIED_LEGACY,
228
229
  detectSignals: [
@@ -279,7 +280,6 @@ const HARNESSES = [
279
280
  serverPropertyName: "mcpServers",
280
281
  transport: "mcp-remote",
281
282
  docsUrl: "https://cursor.com/docs/mcp",
282
- comingSoon: false,
283
283
  verifiedVersion: UNVERIFIED_LEGACY,
284
284
  verifiedOn: UNVERIFIED_LEGACY,
285
285
  detectSignals: [
@@ -330,7 +330,6 @@ const HARNESSES = [
330
330
  serverPropertyName: "mcpServers",
331
331
  transport: "mcp-remote",
332
332
  docsUrl: "https://docs.windsurf.com/windsurf/mcp",
333
- comingSoon: false,
334
333
  verifiedVersion: UNVERIFIED_LEGACY,
335
334
  verifiedOn: UNVERIFIED_LEGACY,
336
335
  detectSignals: [
@@ -377,7 +376,6 @@ const HARNESSES = [
377
376
  serverPropertyName: "context_servers",
378
377
  transport: "mcp-remote",
379
378
  docsUrl: "https://zed.dev/docs/ai/mcp",
380
- comingSoon: false,
381
379
  verifiedVersion: UNVERIFIED_LEGACY,
382
380
  verifiedOn: UNVERIFIED_LEGACY,
383
381
  detectSignals: [
@@ -428,7 +426,6 @@ const HARNESSES = [
428
426
  serverPropertyName: "mcpServers",
429
427
  transport: "native-http",
430
428
  docsUrl: "https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md",
431
- comingSoon: false,
432
429
  verifiedVersion: "0.35.1",
433
430
  verifiedOn: "2026-09-17",
434
431
  detectSignals: [
@@ -480,7 +477,6 @@ const HARNESSES = [
480
477
  },
481
478
  configFormat: "toml",
482
479
  docsUrl: "https://docs.x.ai/build/overview",
483
- comingSoon: false,
484
480
  verifiedVersion: "1.0.34",
485
481
  verifiedOn: "2026-09-17",
486
482
  detectSignals: [
@@ -531,7 +527,6 @@ const HARNESSES = [
531
527
  constants: { disabled: false }
532
528
  },
533
529
  docsUrl: "https://antigravity.google/docs/mcp",
534
- comingSoon: false,
535
530
  verifiedVersion: "1.2.5",
536
531
  verifiedOn: "2026-09-17",
537
532
  detectSignals: [
@@ -584,10 +579,11 @@ const HARNESSES = [
584
579
  "vs code",
585
580
  "visual studio code"
586
581
  ],
587
- serverPropertyName: "mcpServers",
588
- transport: "mcp-remote",
582
+ serverPropertyName: "servers",
583
+ transport: "native-http",
589
584
  docsUrl: "https://code.visualstudio.com/docs/copilot/chat/mcp-servers",
590
- comingSoon: true,
585
+ verifiedVersion: "1.111.0",
586
+ verifiedOn: "2026-09-21",
591
587
  detectSignals: [
592
588
  {
593
589
  platform: "darwin",
@@ -634,7 +630,6 @@ const HARNESSES = [
634
630
  nativeHttpEntry: { urlKey: "url" },
635
631
  configFormat: "toml",
636
632
  docsUrl: "https://github.com/openai/codex",
637
- comingSoon: false,
638
633
  verifiedVersion: "0.154.0",
639
634
  verifiedOn: "2026-09-17",
640
635
  detectSignals: [
@@ -1453,8 +1448,7 @@ function detectOne(harness, env) {
1453
1448
  scopes,
1454
1449
  alreadyConfigured: fallback?.alreadyConfigured ?? false,
1455
1450
  configPath: fallback?.configPath ?? "",
1456
- available,
1457
- comingSoon: harness.comingSoon
1451
+ available
1458
1452
  };
1459
1453
  }
1460
1454
  /** Synchronous detection over the whole catalog. Exported for tests. */
@@ -1912,7 +1906,7 @@ const DEFAULT_SCOPE = "user";
1912
1906
  * about to install into, not the harness's default one. */
1913
1907
  function autoSelectIds(detected, scope) {
1914
1908
  return detected.filter((d) => {
1915
- if (!d.available || d.comingSoon || !d.installed) return false;
1909
+ if (!d.available || !d.installed) return false;
1916
1910
  const inScope = scope ? d.scopes.find((s) => s.scope === scope) : void 0;
1917
1911
  return !(inScope ? inScope.alreadyConfigured : d.alreadyConfigured);
1918
1912
  }).map((d) => d.id);
@@ -1928,7 +1922,7 @@ function autoSelectIds(detected, scope) {
1928
1922
  */
1929
1923
  function clientChoices(detected, scope) {
1930
1924
  const preselect = new Set(autoSelectIds(detected, scope));
1931
- return detected.filter((d) => d.available && !d.comingSoon).map((d) => {
1925
+ return detected.filter((d) => d.available).map((d) => {
1932
1926
  const inScope = d.scopes.find((s) => s.scope === scope);
1933
1927
  const harness = getHarness(d.id);
1934
1928
  let hint;
@@ -1952,23 +1946,16 @@ function offerableScopes(selectedIds, detected) {
1952
1946
  /** Resolve `--all` / `--client` into concrete, installable harness ids. */
1953
1947
  function resolveRequestedIds(options, detected) {
1954
1948
  if (options.all) return {
1955
- ids: detected.filter((d) => d.available && !d.comingSoon).map((d) => d.id),
1956
- unknown: [],
1957
- comingSoon: []
1949
+ ids: detected.filter((d) => d.available).map((d) => d.id),
1950
+ unknown: []
1958
1951
  };
1959
1952
  const ids = [];
1960
1953
  const unknown = [];
1961
- const comingSoon = [];
1962
- for (const c of options.clients ?? []) {
1963
- const harness = getHarness(c);
1964
- if (!harness) unknown.push(c);
1965
- else if (harness.comingSoon) comingSoon.push(c);
1966
- else ids.push(c);
1967
- }
1954
+ for (const c of options.clients ?? []) if (!getHarness(c)) unknown.push(c);
1955
+ else ids.push(c);
1968
1956
  return {
1969
1957
  ids,
1970
- unknown,
1971
- comingSoon
1958
+ unknown
1972
1959
  };
1973
1960
  }
1974
1961
  /**
@@ -2011,13 +1998,11 @@ function runNonInteractive(options, url, urlSource, deps) {
2011
1998
  const scope = options.scope ?? DEFAULT_SCOPE;
2012
1999
  let ids;
2013
2000
  let unknown = [];
2014
- let comingSoon = [];
2015
2001
  const byName = !options.all && (options.clients?.length ?? 0) > 0;
2016
2002
  if (options.all || byName) {
2017
2003
  const requested = resolveRequestedIds(options, detected);
2018
2004
  ids = requested.ids;
2019
2005
  unknown = requested.unknown;
2020
- comingSoon = requested.comingSoon;
2021
2006
  } else ids = autoSelectIds(detected, scope);
2022
2007
  return {
2023
2008
  url,
@@ -2030,7 +2015,6 @@ function runNonInteractive(options, url, urlSource, deps) {
2030
2015
  namedIds: new Set(byName ? ids : [])
2031
2016
  }, deps.install),
2032
2017
  unknownClients: unknown,
2033
- comingSoonClients: comingSoon,
2034
2018
  dryRun: options.dryRun
2035
2019
  };
2036
2020
  }
@@ -2073,7 +2057,6 @@ function formatReport(report) {
2073
2057
  if (report.outcomes.length === 0) lines.push("No clients selected.");
2074
2058
  else for (const o of report.outcomes) lines.push(outcomeLine(o, report.dryRun));
2075
2059
  if (report.unknownClients.length > 0) lines.push(`Unknown clients (skipped): ${report.unknownClients.join(", ")}`);
2076
- if (report.comingSoonClients.length > 0) lines.push(`Coming soon (skipped): ${report.comingSoonClients.join(", ")}`);
2077
2060
  return lines.join("\n");
2078
2061
  }
2079
2062
  /** Next-steps blurb after a run. */
@@ -2145,7 +2128,7 @@ async function interactive(ctx, dryRun, url, urlSource, requestedScope) {
2145
2128
  p.intro("Levr MCP setup");
2146
2129
  p.note(`${url}\n(${urlSource})`, "MCP endpoint");
2147
2130
  const detected = defaultDeps.detect();
2148
- const installable = detected.filter((d) => d.available && !d.comingSoon);
2131
+ const installable = detected.filter((d) => d.available);
2149
2132
  if (installable.length === 0) {
2150
2133
  p.outro("No supported MCP clients found on this machine.");
2151
2134
  return;
@@ -2204,7 +2187,6 @@ async function interactive(ctx, dryRun, url, urlSource, requestedScope) {
2204
2187
  scope,
2205
2188
  outcomes,
2206
2189
  unknownClients: [],
2207
- comingSoonClients: [],
2208
2190
  dryRun
2209
2191
  };
2210
2192
  p.note(formatReport(report), "Results");
package/dist/cli.js CHANGED
@@ -175,7 +175,7 @@ Examples:
175
175
  aliases: { y: "yes" }
176
176
  },
177
177
  loader: async () => {
178
- const { mcpAddHandler } = await import("./addHandler-BlZQkDtP.js");
178
+ const { mcpAddHandler } = await import("./addHandler-D6OI7Mx7.js");
179
179
  return mcpAddHandler;
180
180
  }
181
181
  });
@@ -213,7 +213,7 @@ Examples:
213
213
  aliases: { d: "device-code" }
214
214
  },
215
215
  loader: async () => {
216
- const { loginHandler } = await import("./loginHandler-CubmtHgD.js");
216
+ const { loginHandler } = await import("./loginHandler-Cde0llsX.js");
217
217
  return loginHandler;
218
218
  }
219
219
  });
@@ -252,7 +252,7 @@ Examples:
252
252
  },
253
253
  parameters: {},
254
254
  loader: async () => {
255
- const { statusHandler } = await import("./statusHandler-tNFnC0fb.js");
255
+ const { statusHandler } = await import("./statusHandler-CNEu-xeW.js");
256
256
  return statusHandler;
257
257
  }
258
258
  });
@@ -364,7 +364,7 @@ Examples:
364
364
  }
365
365
  },
366
366
  loader: async () => {
367
- const { pushHandler } = await import("./pushHandler-C_aoYn2d.js");
367
+ const { pushHandler } = await import("./pushHandler-CwSUNkzr.js");
368
368
  return pushHandler;
369
369
  }
370
370
  });
@@ -484,7 +484,7 @@ Examples:
484
484
  }
485
485
  },
486
486
  loader: async () => {
487
- const { importHandler } = await import("./importHandler-BOeatReV.js");
487
+ const { importHandler } = await import("./importHandler-Cqd0ug3o.js");
488
488
  return importHandler;
489
489
  }
490
490
  });
@@ -505,7 +505,7 @@ Examples:
505
505
  },
506
506
  parameters: {},
507
507
  loader: async () => {
508
- const { listHandler } = await import("./listHandler-BmScgMlI.js");
508
+ const { listHandler } = await import("./listHandler-CC4gJiLA.js");
509
509
  return listHandler;
510
510
  }
511
511
  });
@@ -538,7 +538,7 @@ Examples:
538
538
  flags: {}
539
539
  },
540
540
  loader: async () => {
541
- const { selectHandler } = await import("./selectHandler-Cx7960Rx.js");
541
+ const { selectHandler } = await import("./selectHandler-BX2JYI9w.js");
542
542
  return selectHandler;
543
543
  }
544
544
  });
@@ -562,7 +562,7 @@ Examples:
562
562
 
563
563
  //#endregion
564
564
  //#region package.json
565
- var version = "0.9.17";
565
+ var version = "0.9.19";
566
566
 
567
567
  //#endregion
568
568
  //#region src/app.ts
@@ -1,7 +1,7 @@
1
1
  import { getApiUrl, getTeamId } from "./env-CHeKHu5S.js";
2
- import { authGetProfileV1, configureClient, teamFindAllV1, testCaseImportCommitV1, testCaseImportPreviewV1 } from "./sdk-client-DNDMNs0m.js";
2
+ import { authGetProfileV1, configureClient, teamFindAllV1, testCaseImportCommitV1, testCaseImportPreviewV1 } from "./sdk-client-BnPeQ6JR.js";
3
3
  import "./workspace-store-DDOxnut1.js";
4
- import { resolveWorkspace } from "./resolve-workspace-DLUMQYp4.js";
4
+ import { resolveWorkspace } from "./resolve-workspace-f6w0atef.js";
5
5
  import "./token-refresh-Cu5RpkLJ.js";
6
6
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
7
7
  import chalk from "chalk";
@@ -1,5 +1,5 @@
1
1
  import "./env-CHeKHu5S.js";
2
- import { authGetSitesV1, configureClient } from "./sdk-client-DNDMNs0m.js";
2
+ import { authGetSitesV1, configureClient } from "./sdk-client-BnPeQ6JR.js";
3
3
  import { loadWorkspace } from "./workspace-store-DDOxnut1.js";
4
4
  import "./token-refresh-Cu5RpkLJ.js";
5
5
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
@@ -1,7 +1,7 @@
1
1
  import { CLI_CLIENT_ID, getApiUrl, getAuthUrl, setSessionApiUrl, writeCredentials } from "./env-CHeKHu5S.js";
2
- import { configureClient } from "./sdk-client-DNDMNs0m.js";
2
+ import { configureClient } from "./sdk-client-BnPeQ6JR.js";
3
3
  import "./workspace-store-DDOxnut1.js";
4
- import { autoSelectWorkspace } from "./resolve-workspace-DLUMQYp4.js";
4
+ import { autoSelectWorkspace } from "./resolve-workspace-f6w0atef.js";
5
5
  import chalk from "chalk";
6
6
  import { createHash, randomBytes } from "node:crypto";
7
7
  import { createServer } from "node:http";
@@ -1,7 +1,7 @@
1
1
  import { getApiUrl, getAutomationSourceIdOverride, getSourceOverride, getTeamId } from "./env-CHeKHu5S.js";
2
- import { client, configureClient, uploadAutomationIngest, uploadImport } from "./sdk-client-DNDMNs0m.js";
2
+ import { client, configureClient, uploadAutomationIngest, uploadImport } from "./sdk-client-BnPeQ6JR.js";
3
3
  import "./workspace-store-DDOxnut1.js";
4
- import { resolveWorkspace } from "./resolve-workspace-DLUMQYp4.js";
4
+ import { resolveWorkspace } from "./resolve-workspace-f6w0atef.js";
5
5
  import "./token-refresh-Cu5RpkLJ.js";
6
6
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
7
7
  import { readFileSync, statSync } from "node:fs";
@@ -1,4 +1,4 @@
1
- import { authGetSitesV1 } from "./sdk-client-DNDMNs0m.js";
1
+ import { authGetSitesV1 } from "./sdk-client-BnPeQ6JR.js";
2
2
  import { clearWorkspace, loadWorkspace, saveWorkspace } from "./workspace-store-DDOxnut1.js";
3
3
 
4
4
  //#region src/workspace/resolve-workspace.ts
@@ -12913,14 +12913,15 @@ const zFirstRunStatusDto = z.object({
12913
12913
  label: z.string(),
12914
12914
  installKind: z.enum(["config-file", "cli-command"]),
12915
12915
  snippet: z.string(),
12916
- docsUrl: z.string(),
12917
- comingSoon: z.boolean()
12916
+ docsUrl: z.string()
12918
12917
  }))
12919
12918
  });
12920
12919
  const zFirstRunGetStatusV1Data = z.object({ url: z.literal("/v1/first-run/mcp") });
12921
12920
  const zFirstRunMarkSeenV1Data = z.object({ url: z.literal("/v1/first-run/mcp/seen") });
12922
12921
  const zFirstRunDeclineV1Data = z.object({ url: z.literal("/v1/first-run/mcp/decline") });
12923
12922
  const zFirstRunHideReminderV1Data = z.object({ url: z.literal("/v1/first-run/mcp/hide-reminder") });
12923
+ const zFirstRunHideLearnReminderV1Data = z.object({ url: z.literal("/v1/first-run/mcp/hide-learn-reminder") });
12924
+ const zFirstRunRetireLearnReminderV1Data = z.object({ url: z.literal("/v1/first-run/mcp/retire-learn-reminder") });
12924
12925
  const zFirstRunMarkLandedV1Data = z.object({ url: z.literal("/v1/first-run/mcp/landed") });
12925
12926
 
12926
12927
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import "./env-CHeKHu5S.js";
2
- import { authGetSitesV1, configureClient } from "./sdk-client-DNDMNs0m.js";
2
+ import { authGetSitesV1, configureClient } from "./sdk-client-BnPeQ6JR.js";
3
3
  import { saveWorkspace } from "./workspace-store-DDOxnut1.js";
4
4
  import "./token-refresh-Cu5RpkLJ.js";
5
5
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
@@ -1,5 +1,5 @@
1
1
  import { getApiUrl, getPatToken, readCredentials } from "./env-CHeKHu5S.js";
2
- import { authGetProfileV1, configureClient } from "./sdk-client-DNDMNs0m.js";
2
+ import { authGetProfileV1, configureClient } from "./sdk-client-BnPeQ6JR.js";
3
3
  import { isTokenExpired } from "./token-refresh-Cu5RpkLJ.js";
4
4
  import chalk from "chalk";
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levr-one/cli",
3
- "version": "0.9.17",
3
+ "version": "0.9.19",
4
4
  "description": "The command-line interface for Levr",
5
5
  "type": "module",
6
6
  "license": "MIT",