@indigoai-us/hq-cli 5.105.2 → 5.106.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/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.106.0] — 2026-09-02
6
+
7
+ ### Fixed
8
+
9
+ - `hq integrations inspect` now accepts a pasted endpoint URL. Passing
10
+ `https://mcp.example.com/mcp` used to be treated as free-text search and
11
+ answered "No integrations.sh results found" for an app listed under exactly
12
+ that host; it is now looked up by host.
13
+
14
+ ### Changed
15
+
16
+ - The Connect-an-app catalog now says when a listed app's availability could
17
+ not be re-confirmed on the last sweep. Such apps are tagged
18
+ `not recently verified` so a stale entry reads as unconfirmed rather than as
19
+ freshly checked. The apps are still listed and still connectable.
20
+
5
21
  ## [5.105.2] — 2026-09-02
6
22
 
7
23
  ### Fixed
@@ -22,6 +22,17 @@ export interface CatalogEntry {
22
22
  */
23
23
  source?: "hq-discovered" | "integrations.sh" | "hq-recommended";
24
24
  authClass?: "none" | "key" | "oauth";
25
+ /**
26
+ * Present when the app is listed on a CARRIED-FORWARD verdict: the latest
27
+ * catalog generation's probe answered HTTP 403, which establishes nothing,
28
+ * so the previous run's classification was kept rather than dropping the app
29
+ * on ambiguous evidence.
30
+ *
31
+ * The app is still offered — this qualifies the listing, it does not retract
32
+ * it. Absent (never `false`) on a freshly verified entry, so "no claim" and
33
+ * "claim is false" stay distinguishable.
34
+ */
35
+ verificationCarriedForward?: true;
25
36
  /** Opaque server-owned id; prefer it over echoing connection details back. */
26
37
  entryId?: string;
27
38
  }
@@ -84,6 +84,27 @@ const BRING_YOUR_OWN_CLIENT_CODES = new Set([
84
84
  function looksLikeDomain(value) {
85
85
  return /^[a-z0-9][a-z0-9.-]*\.[a-z]{2,}$/i.test(value) && !value.includes(" ");
86
86
  }
87
+ /**
88
+ * The host inside an endpoint URL, or the value unchanged when it is not one.
89
+ *
90
+ * `hq integrations inspect` is the "what does this expose before I connect it"
91
+ * command, so the natural thing to paste is the endpoint URL itself. Without
92
+ * this, `https://vyg.app/mcp` failed `looksLikeDomain` and went out as a free
93
+ * text SEARCH, which answered "No integrations.sh results found" for an app
94
+ * that is in the catalog under exactly that host. hq-pro accepts a URL-shaped
95
+ * domain, so the only thing missing was sending it as one.
96
+ */
97
+ function hostFromEndpointUrl(value) {
98
+ const trimmed = value.trim();
99
+ if (!/^https?:\/\//i.test(trimmed))
100
+ return trimmed;
101
+ try {
102
+ return new URL(trimmed).hostname;
103
+ }
104
+ catch {
105
+ return trimmed;
106
+ }
107
+ }
87
108
  /**
88
109
  * True when this shell is almost certainly on a different machine from the
89
110
  * person's browser. Not a security boundary — just the signal that a loopback
@@ -828,6 +849,11 @@ export function registerConnectCommands(integrations) {
828
849
  entry.source === "hq-recommended" ? "recommended" : null,
829
850
  entry.source === "hq-discovered" ? "community" : null,
830
851
  entry.mcpReady ? null : "not one-click",
852
+ // The listing is a claim about connectability, and for these apps HQ
853
+ // could not re-confirm it: the last probe was inconclusive and the
854
+ // previous verdict was carried forward. Say so on the row rather
855
+ // than let it read the same as an app checked this morning.
856
+ entry.verificationCarriedForward ? "not recently verified" : null,
831
857
  ]
832
858
  .filter(Boolean)
833
859
  .join(" · ");
@@ -845,7 +871,10 @@ export function registerConnectCommands(integrations) {
845
871
  .action(async (app, opts) => {
846
872
  const token = await ensureCognitoIdToken();
847
873
  const companyUid = await getCompanyUid(token, opts.company);
848
- const blueprint = await pullBlueprint(token, companyUid, looksLikeDomain(app) ? { domain: app } : { query: app });
874
+ // A pasted endpoint URL names one host; look that host up rather than
875
+ // searching the catalog for the URL as free text.
876
+ const host = hostFromEndpointUrl(app);
877
+ const blueprint = await pullBlueprint(token, companyUid, looksLikeDomain(host) ? { domain: host } : { query: app });
849
878
  if (opts.json) {
850
879
  printJson(blueprint);
851
880
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cli",
3
- "version": "5.105.2",
3
+ "version": "5.106.0",
4
4
  "description": "HQ by Indigo management CLI — modules and cloud sync",
5
5
  "main": "dist/index.js",
6
6
  "bin": {