@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
|
-
|
|
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;
|