@ainyc/canonry 4.60.2 → 4.61.1
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/assets/agent-workspace/skills/aero/references/regression-playbook.md +4 -1
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +4 -0
- package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +24 -2
- package/assets/assets/{BacklinksPage-Dj4AVTma.js → BacklinksPage-CsGOAPNN.js} +1 -1
- package/assets/assets/{ChartPrimitives-7SFwUlCh.js → ChartPrimitives-Bjow7aaC.js} +1 -1
- package/assets/assets/{ProjectPage-4tWuU1ZR.js → ProjectPage-BZoMD93_.js} +1 -1
- package/assets/assets/{RunRow-CgPJfmWX.js → RunRow-ve7H_XIu.js} +1 -1
- package/assets/assets/{RunsPage-Cdo4jBn4.js → RunsPage-mYmYevh0.js} +1 -1
- package/assets/assets/{SettingsPage-N5iccPoU.js → SettingsPage-DoRiIJK5.js} +1 -1
- package/assets/assets/{TrafficPage-pSlQPdDg.js → TrafficPage-1LFyX4OT.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-BQx3Evf6.js → TrafficSourceDetailPage-BYDJtQdO.js} +1 -1
- package/assets/assets/{extract-error-message-BOembgFV.js → extract-error-message-Bt6jcL_M.js} +1 -1
- package/assets/assets/{index-DjKFsFsl.js → index-BQxaYi-t.js} +70 -70
- package/assets/assets/{server-traffic-DNgNJ4Ht.js → server-traffic-C5f87b84.js} +1 -1
- package/assets/assets/{trash-2-DOznxxMW.js → trash-2-BFSmyr_7.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-AUR7VMQF.js → chunk-4FLI5VSQ.js} +59 -4
- package/dist/{chunk-CKWHFAVB.js → chunk-PITZUUFV.js} +33 -1
- package/dist/{chunk-3G3GAT3E.js → chunk-QU62IX7K.js} +531 -172
- package/dist/{chunk-DXWUBWBD.js → chunk-URPUUKLC.js} +22 -0
- package/dist/cli.js +32 -4
- package/dist/index.d.ts +16 -0
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-UYVVKQ2K.js → intelligence-service-AZDX2EBS.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +7 -6
|
@@ -851,6 +851,10 @@ var gbpLocationDtoSchema = z7.object({
|
|
|
851
851
|
primaryCategoryDisplayName: z7.string().nullable(),
|
|
852
852
|
storefrontAddress: z7.string().nullable(),
|
|
853
853
|
websiteUri: z7.string().nullable(),
|
|
854
|
+
// Google Maps Place ID + public Maps link (from location metadata; null when
|
|
855
|
+
// the location is not on Maps). `placeId` is the join key to the Places API.
|
|
856
|
+
placeId: z7.string().nullable(),
|
|
857
|
+
mapsUri: z7.string().nullable(),
|
|
854
858
|
selected: z7.boolean(),
|
|
855
859
|
syncedAt: z7.string().nullable(),
|
|
856
860
|
createdAt: z7.string(),
|
|
@@ -944,6 +948,22 @@ var gbpLodgingListResponseSchema = z7.object({
|
|
|
944
948
|
lodging: z7.array(gbpLodgingDtoSchema),
|
|
945
949
|
total: z7.number().int().nonnegative()
|
|
946
950
|
});
|
|
951
|
+
var gbpPlaceDetailsDtoSchema = z7.object({
|
|
952
|
+
locationName: z7.string(),
|
|
953
|
+
placeId: z7.string(),
|
|
954
|
+
/** Field-mask SKU tier the snapshot was fetched at ('atmosphere' | 'pro'). */
|
|
955
|
+
tier: z7.string(),
|
|
956
|
+
/** Amenities the public listing advertises, derived from `place`. */
|
|
957
|
+
amenities: z7.array(z7.string()),
|
|
958
|
+
/** When this listing was last fetched from Places — advances on every fetch, even when the content is unchanged (this is what the refresh-cadence gate reads). */
|
|
959
|
+
syncedAt: z7.string(),
|
|
960
|
+
/** Raw Place Details resource as Google returned it. */
|
|
961
|
+
place: z7.record(z7.string(), z7.unknown())
|
|
962
|
+
});
|
|
963
|
+
var gbpPlaceDetailsListResponseSchema = z7.object({
|
|
964
|
+
places: z7.array(gbpPlaceDetailsDtoSchema),
|
|
965
|
+
total: z7.number().int().nonnegative()
|
|
966
|
+
});
|
|
947
967
|
var gbpSummaryDtoSchema = z7.object({
|
|
948
968
|
scope: z7.object({
|
|
949
969
|
locationName: z7.string().nullable(),
|
|
@@ -2099,6 +2119,7 @@ var projectSearchInsightHitSchema = z18.object({
|
|
|
2099
2119
|
"competitor-lost",
|
|
2100
2120
|
// Google Business Profile (local-AEO) insight types — see InsightType.
|
|
2101
2121
|
"gbp-lodging-gap",
|
|
2122
|
+
"gbp-listing-discrepancy",
|
|
2102
2123
|
"gbp-cta-gap",
|
|
2103
2124
|
"gbp-metric-drop",
|
|
2104
2125
|
"gbp-keyword-drop"
|
|
@@ -3887,6 +3908,7 @@ export {
|
|
|
3887
3908
|
gbpKeywordImpressionListResponseSchema,
|
|
3888
3909
|
gbpPlaceActionListResponseSchema,
|
|
3889
3910
|
gbpLodgingListResponseSchema,
|
|
3911
|
+
gbpPlaceDetailsListResponseSchema,
|
|
3890
3912
|
gbpSummaryDtoSchema,
|
|
3891
3913
|
withRetry,
|
|
3892
3914
|
isRetryableHttpError,
|
package/dist/cli.js
CHANGED
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
setTelemetrySource,
|
|
28
28
|
showFirstRunNotice,
|
|
29
29
|
trackEvent
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-4FLI5VSQ.js";
|
|
31
31
|
import {
|
|
32
32
|
CliError,
|
|
33
33
|
EXIT_SYSTEM_ERROR,
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
saveConfig,
|
|
44
44
|
saveConfigPatch,
|
|
45
45
|
usageError
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-PITZUUFV.js";
|
|
47
47
|
import {
|
|
48
48
|
apiKeys,
|
|
49
49
|
createClient,
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
projects,
|
|
52
52
|
queries,
|
|
53
53
|
renderReportHtml
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-QU62IX7K.js";
|
|
55
55
|
import {
|
|
56
56
|
CcReleaseSyncStatuses,
|
|
57
57
|
CheckScopes,
|
|
@@ -67,7 +67,7 @@ import {
|
|
|
67
67
|
notificationEventSchema,
|
|
68
68
|
providerQuotaPolicySchema,
|
|
69
69
|
resolveProviderInput
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-URPUUKLC.js";
|
|
71
71
|
|
|
72
72
|
// src/cli.ts
|
|
73
73
|
import { pathToFileURL } from "url";
|
|
@@ -3069,6 +3069,23 @@ async function gbpLodging(project, opts) {
|
|
|
3069
3069
|
console.log(` ${l.locationName} ${l.populatedGroupCount} attribute group(s)${note}`);
|
|
3070
3070
|
}
|
|
3071
3071
|
}
|
|
3072
|
+
async function gbpPlaces(project, opts) {
|
|
3073
|
+
const client = getClient6();
|
|
3074
|
+
const response = await client.listGbpPlaces(project, { locationName: opts.location });
|
|
3075
|
+
if (opts.format === "json") {
|
|
3076
|
+
console.log(JSON.stringify(response, null, 2));
|
|
3077
|
+
return;
|
|
3078
|
+
}
|
|
3079
|
+
if (response.places.length === 0) {
|
|
3080
|
+
console.log('No Places data \u2014 set a Places API key (places.apiKey / GOOGLE_PLACES_API_KEY) and run "canonry gbp sync" for lodging locations.');
|
|
3081
|
+
return;
|
|
3082
|
+
}
|
|
3083
|
+
console.log(`${response.total} Places listing snapshot(s) \u2014 the amenities Google's public listing advertises:`);
|
|
3084
|
+
for (const p of response.places) {
|
|
3085
|
+
const amenities = p.amenities.length > 0 ? p.amenities.join(", ") : "(none detected)";
|
|
3086
|
+
console.log(` ${p.locationName} [${p.tier}] ${amenities}`);
|
|
3087
|
+
}
|
|
3088
|
+
}
|
|
3072
3089
|
function fmtDelta(pct2) {
|
|
3073
3090
|
if (pct2 === null) return "n/a";
|
|
3074
3091
|
return `${pct2 >= 0 ? "+" : ""}${pct2}%`;
|
|
@@ -3261,6 +3278,17 @@ var GBP_CLI_COMMANDS = [
|
|
|
3261
3278
|
await gbpLodging(project, { location: getString(input.values, "location"), format: input.format });
|
|
3262
3279
|
}
|
|
3263
3280
|
},
|
|
3281
|
+
{
|
|
3282
|
+
path: ["gbp", "places"],
|
|
3283
|
+
usage: "canonry gbp places <project> [--location <name>] [--format json]",
|
|
3284
|
+
options: {
|
|
3285
|
+
location: stringOption()
|
|
3286
|
+
},
|
|
3287
|
+
run: async (input) => {
|
|
3288
|
+
const project = requireProject(input, "gbp.places", "canonry gbp places <project> [--location <name>] [--format json]");
|
|
3289
|
+
await gbpPlaces(project, { location: getString(input.values, "location"), format: input.format });
|
|
3290
|
+
}
|
|
3291
|
+
},
|
|
3264
3292
|
{
|
|
3265
3293
|
path: ["gbp", "summary"],
|
|
3266
3294
|
usage: "canonry gbp summary <project> [--location <name>] [--format json]",
|
package/dist/index.d.ts
CHANGED
|
@@ -144,6 +144,21 @@ interface AgentConfigEntry {
|
|
|
144
144
|
/** Agent mode. Only 'disabled' is valid until the native loop ships. */
|
|
145
145
|
mode?: 'disabled';
|
|
146
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Google Places API config — supplemental rendered-listing data for GBP
|
|
149
|
+
* lodging locations (#648). The API key authenticates Place Details calls
|
|
150
|
+
* (`X-Goog-Api-Key`); it is NOT OAuth and is unrelated to `google.clientId`.
|
|
151
|
+
* - `tier`: 'atmosphere' (default; amenity booleans for the cross-reference,
|
|
152
|
+
* 1k free calls/month) | 'pro' (cheaper, accessibility-only) | 'off'.
|
|
153
|
+
* - `refreshIntervalDays`: minimum age before a location's Place Details is
|
|
154
|
+
* re-fetched during gbp-sync (default 7) — the cost lever, since amenities
|
|
155
|
+
* change rarely.
|
|
156
|
+
*/
|
|
157
|
+
interface PlacesConfigEntry {
|
|
158
|
+
apiKey?: string;
|
|
159
|
+
tier?: 'atmosphere' | 'pro' | 'off';
|
|
160
|
+
refreshIntervalDays?: number;
|
|
161
|
+
}
|
|
147
162
|
interface CanonryConfig {
|
|
148
163
|
apiUrl: string;
|
|
149
164
|
publicUrl?: string;
|
|
@@ -172,6 +187,7 @@ interface CanonryConfig {
|
|
|
172
187
|
lastUpdateCheckAt?: string;
|
|
173
188
|
lastKnownLatestVersion?: string;
|
|
174
189
|
agent?: AgentConfigEntry;
|
|
190
|
+
places?: PlacesConfigEntry;
|
|
175
191
|
}
|
|
176
192
|
declare function loadConfig(): CanonryConfig;
|
|
177
193
|
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4FLI5VSQ.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-PITZUUFV.js";
|
|
7
|
+
import "./chunk-QU62IX7K.js";
|
|
8
|
+
import "./chunk-URPUUKLC.js";
|
|
9
9
|
export {
|
|
10
10
|
createServer,
|
|
11
11
|
loadConfig
|
package/dist/mcp.js
CHANGED
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
PACKAGE_VERSION,
|
|
4
4
|
canonryMcpTools,
|
|
5
5
|
createApiClient
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-PITZUUFV.js";
|
|
7
|
+
import "./chunk-URPUUKLC.js";
|
|
8
8
|
|
|
9
9
|
// src/mcp/cli.ts
|
|
10
10
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ainyc/canonry",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.61.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent-first open-source AEO operating platform - track how answer engines cite your domain",
|
|
6
6
|
"license": "FSL-1.1-ALv2",
|
|
@@ -62,24 +62,25 @@
|
|
|
62
62
|
"tsup": "^8.5.1",
|
|
63
63
|
"tsx": "^4.19.0",
|
|
64
64
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
65
|
-
"@ainyc/canonry-api-client": "0.0.0",
|
|
66
65
|
"@ainyc/canonry-config": "0.0.0",
|
|
67
66
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
68
67
|
"@ainyc/canonry-db": "0.0.0",
|
|
69
68
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
69
|
+
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
70
|
+
"@ainyc/canonry-api-client": "0.0.0",
|
|
70
71
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
71
72
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
72
|
-
"@ainyc/canonry-integration-
|
|
73
|
+
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
73
74
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
74
75
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
75
|
-
"@ainyc/canonry-intelligence": "0.0.0",
|
|
76
|
-
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
77
76
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
78
77
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
78
|
+
"@ainyc/canonry-intelligence": "0.0.0",
|
|
79
79
|
"@ainyc/canonry-provider-local": "0.0.0",
|
|
80
80
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
81
|
+
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
81
82
|
"@ainyc/canonry-provider-perplexity": "0.0.0",
|
|
82
|
-
"@ainyc/canonry-
|
|
83
|
+
"@ainyc/canonry-integration-google-places": "0.0.0"
|
|
83
84
|
},
|
|
84
85
|
"scripts": {
|
|
85
86
|
"build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
|