@ainyc/canonry 4.91.0 → 4.92.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/assets/agent-workspace/skills/aero/references/regression-playbook.md +1 -0
- package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +1 -0
- package/assets/assets/{BacklinksPage-DHC1po5Q.js → BacklinksPage-D3JpcWtH.js} +1 -1
- package/assets/assets/{ChartPrimitives-Cu2xEVle.js → ChartPrimitives-DdwqEX5v.js} +1 -1
- package/assets/assets/{ProjectPage-DXYcaMVO.js → ProjectPage-BPLf4U3A.js} +1 -1
- package/assets/assets/{RunRow-BPqbBlXl.js → RunRow-c_2jd8iz.js} +1 -1
- package/assets/assets/{RunsPage-BJx3_Nel.js → RunsPage-D6eM_5tB.js} +1 -1
- package/assets/assets/{SettingsPage-CXTIHdsv.js → SettingsPage-DaMc8nxK.js} +1 -1
- package/assets/assets/{TrafficPage-iibCIBqX.js → TrafficPage-Dw16dcSc.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-WU30E_59.js → TrafficSourceDetailPage-Dy9D80dz.js} +1 -1
- package/assets/assets/{arrow-left-Ds_f14R8.js → arrow-left-D8UaBG9a.js} +1 -1
- package/assets/assets/{extract-error-message-D250utEX.js → extract-error-message-CfxCIMNJ.js} +1 -1
- package/assets/assets/{index-qiysJOcG.js → index-BA-lh2pG.js} +4 -4
- package/assets/assets/{trash-2-CcVWAeec.js → trash-2-j1tX1-Kq.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-6RVUSM4Y.js → chunk-HW4GVIQD.js} +1 -1
- package/dist/{chunk-AFSVCKFI.js → chunk-IFUHXONX.js} +22 -3
- package/dist/{chunk-2SO5ZS4S.js → chunk-QYC2N23P.js} +4 -4
- package/dist/{chunk-WMBOHP7E.js → chunk-VJPVFCZW.js} +2 -0
- package/dist/cli.js +4 -4
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-MHTYZ632.js → intelligence-service-24HCX4SJ.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c}from"./index-
|
|
1
|
+
import{c}from"./index-BA-lh2pG.js";const a=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],h=c("circle-check",a);const e=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],n=c("circle-question-mark",e);const o=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],s=c("download",o);const t=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],r=c("trash-2",t);export{h as C,s as D,r as T,n as a};
|
package/assets/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
|
|
13
13
|
<link rel="apple-touch-icon" href="./apple-touch-icon.png" />
|
|
14
14
|
<title>Canonry</title>
|
|
15
|
-
<script type="module" crossorigin src="./assets/index-
|
|
15
|
+
<script type="module" crossorigin src="./assets/index-BA-lh2pG.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-Dq7p98wZ.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="./assets/vendor-radix-B57xfQbP.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="./assets/vendor-recharts-ClRVR6aX.js">
|
|
@@ -258,7 +258,7 @@ import {
|
|
|
258
258
|
wordpressSchemaDeployResultDtoSchema,
|
|
259
259
|
wordpressSchemaStatusResultDtoSchema,
|
|
260
260
|
wordpressStatusDtoSchema
|
|
261
|
-
} from "./chunk-
|
|
261
|
+
} from "./chunk-VJPVFCZW.js";
|
|
262
262
|
|
|
263
263
|
// src/intelligence-service.ts
|
|
264
264
|
import { eq as eq37, desc as desc18, asc as asc5, and as and27, ne as ne5, or as or5, inArray as inArray14, gte as gte7, lte as lte4 } from "drizzle-orm";
|
|
@@ -5269,6 +5269,18 @@ function analyzeGbp(signals) {
|
|
|
5269
5269
|
});
|
|
5270
5270
|
}
|
|
5271
5271
|
}
|
|
5272
|
+
if (loc.descriptionMissing) {
|
|
5273
|
+
drafts.push({
|
|
5274
|
+
...base,
|
|
5275
|
+
type: "gbp-description-missing",
|
|
5276
|
+
severity: "low",
|
|
5277
|
+
title: `${loc.displayName}: no business description set`,
|
|
5278
|
+
recommendation: {
|
|
5279
|
+
action: "Add a business description (up to 750 characters) in the Google Business Profile.",
|
|
5280
|
+
reason: "The owner description is the cheapest owner-controlled prose an AI answer engine can lift to describe the business, and it seeds the entity attributes (specialties, service area, differentiators) models draw on. It reads straight from the GBP API, so an empty one is a real, easily-closed gap."
|
|
5281
|
+
}
|
|
5282
|
+
});
|
|
5283
|
+
}
|
|
5272
5284
|
if (loc.placeActionCount > 0 && !loc.hasDirectMerchantCta) {
|
|
5273
5285
|
drafts.push({
|
|
5274
5286
|
...base,
|
|
@@ -19774,11 +19786,15 @@ var GBP_LOCATIONS_DEFAULT_READ_MASK = [
|
|
|
19774
19786
|
"title",
|
|
19775
19787
|
"storefrontAddress",
|
|
19776
19788
|
"websiteUri",
|
|
19777
|
-
|
|
19789
|
+
// Request `categories` WHOLE, not a nested sub-path. The Business Information
|
|
19790
|
+
// locations.list readMask rejects a nested path into the REPEATED
|
|
19791
|
+
// `additionalCategories` array ("Invalid field mask provided", HTTP 400 —
|
|
19792
|
+
// verified against the live API), so we ask for the full `categories` object
|
|
19793
|
+
// (it carries primaryCategory + additionalCategories displayNames + serviceTypes).
|
|
19794
|
+
"categories",
|
|
19778
19795
|
// Owner-authored profile content — the entity-anchor and qualifier signals AI
|
|
19779
19796
|
// answer engines weight most. All ride the same Business Information v1
|
|
19780
19797
|
// Location resource canonry already reads (no new auth / API enablement).
|
|
19781
|
-
"categories.additionalCategories.displayName",
|
|
19782
19798
|
"profile.description",
|
|
19783
19799
|
"serviceArea",
|
|
19784
19800
|
"regularHours",
|
|
@@ -34467,6 +34483,8 @@ var IntelligenceService = class {
|
|
|
34467
34483
|
const metricRows = this.db.select({ metric: gbpDailyMetrics.metric, date: gbpDailyMetrics.date, value: gbpDailyMetrics.value }).from(gbpDailyMetrics).where(and27(eq37(gbpDailyMetrics.projectId, projectId), eq37(gbpDailyMetrics.locationName, locationName))).all();
|
|
34468
34484
|
const placeActionRows = this.db.select({ placeActionType: gbpPlaceActions.placeActionType, providerType: gbpPlaceActions.providerType }).from(gbpPlaceActions).where(and27(eq37(gbpPlaceActions.projectId, projectId), eq37(gbpPlaceActions.locationName, locationName))).all();
|
|
34469
34485
|
const lodgingRow = this.db.select({ populatedGroupCount: gbpLodgingSnapshots.populatedGroupCount }).from(gbpLodgingSnapshots).where(and27(eq37(gbpLodgingSnapshots.projectId, projectId), eq37(gbpLodgingSnapshots.locationName, locationName))).orderBy(desc18(gbpLodgingSnapshots.syncedAt)).limit(1).get();
|
|
34486
|
+
const ownerRow = this.db.select({ description: gbpLocations.description }).from(gbpLocations).where(and27(eq37(gbpLocations.projectId, projectId), eq37(gbpLocations.locationName, locationName))).get();
|
|
34487
|
+
const descriptionMissing = !(ownerRow?.description ?? "").trim();
|
|
34470
34488
|
const placeRow = this.db.select({ attributes: gbpPlaceDetails.attributes }).from(gbpPlaceDetails).where(and27(eq37(gbpPlaceDetails.projectId, projectId), eq37(gbpPlaceDetails.locationName, locationName))).orderBy(desc18(gbpPlaceDetails.syncedAt)).limit(1).get();
|
|
34471
34489
|
const placesAmenities = placeRow ? extractPlaceAmenities(placeRow.attributes) : [];
|
|
34472
34490
|
const summary = buildGbpSummary({
|
|
@@ -34491,6 +34509,7 @@ var IntelligenceService = class {
|
|
|
34491
34509
|
metricDeltaPct: summary.performance.deltaPct,
|
|
34492
34510
|
lodgingCapable: summary.lodging.lodgingLocationCount > 0,
|
|
34493
34511
|
lodgingEmpty: summary.lodging.emptyLodgingCount > 0,
|
|
34512
|
+
descriptionMissing,
|
|
34494
34513
|
placesAmenities,
|
|
34495
34514
|
placeActionCount: summary.placeActions.total,
|
|
34496
34515
|
hasDirectMerchantCta: summary.placeActions.hasDirectMerchantCta,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
loadConfig,
|
|
10
10
|
loadConfigRaw,
|
|
11
11
|
saveConfigPatch
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-HW4GVIQD.js";
|
|
13
13
|
import {
|
|
14
14
|
CC_CACHE_DIR,
|
|
15
15
|
DUCKDB_SPEC,
|
|
@@ -104,7 +104,7 @@ import {
|
|
|
104
104
|
siteAuditPages,
|
|
105
105
|
siteAuditSnapshots,
|
|
106
106
|
usageCounters
|
|
107
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-IFUHXONX.js";
|
|
108
108
|
import {
|
|
109
109
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
110
110
|
AGENT_PROVIDER_IDS,
|
|
@@ -164,7 +164,7 @@ import {
|
|
|
164
164
|
validationError,
|
|
165
165
|
winnabilityClassLabel,
|
|
166
166
|
withRetry
|
|
167
|
-
} from "./chunk-
|
|
167
|
+
} from "./chunk-VJPVFCZW.js";
|
|
168
168
|
|
|
169
169
|
// src/telemetry.ts
|
|
170
170
|
import crypto from "crypto";
|
|
@@ -6323,7 +6323,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
6323
6323
|
return result;
|
|
6324
6324
|
}
|
|
6325
6325
|
async function backfillInsightsCommand(project, opts) {
|
|
6326
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
6326
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-24HCX4SJ.js");
|
|
6327
6327
|
const config = loadConfig();
|
|
6328
6328
|
const db = createClient(config.database);
|
|
6329
6329
|
migrate(db);
|
|
@@ -3249,6 +3249,7 @@ var projectOverviewInsightSchema = z24.object({
|
|
|
3249
3249
|
"gbp-lodging-gap",
|
|
3250
3250
|
"gbp-listing-discrepancy",
|
|
3251
3251
|
"gbp-cta-gap",
|
|
3252
|
+
"gbp-description-missing",
|
|
3252
3253
|
"gbp-metric-drop",
|
|
3253
3254
|
"gbp-keyword-drop"
|
|
3254
3255
|
]),
|
|
@@ -3407,6 +3408,7 @@ var projectSearchInsightHitSchema = z24.object({
|
|
|
3407
3408
|
"gbp-lodging-gap",
|
|
3408
3409
|
"gbp-listing-discrepancy",
|
|
3409
3410
|
"gbp-cta-gap",
|
|
3411
|
+
"gbp-description-missing",
|
|
3410
3412
|
"gbp-metric-drop",
|
|
3411
3413
|
"gbp-keyword-drop"
|
|
3412
3414
|
]),
|
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-QYC2N23P.js";
|
|
31
31
|
import {
|
|
32
32
|
CliError,
|
|
33
33
|
EXIT_SYSTEM_ERROR,
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
saveConfig,
|
|
45
45
|
saveConfigPatch,
|
|
46
46
|
usageError
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-HW4GVIQD.js";
|
|
48
48
|
import {
|
|
49
49
|
apiKeys,
|
|
50
50
|
createClient,
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
projects,
|
|
53
53
|
queries,
|
|
54
54
|
renderReportHtml
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-IFUHXONX.js";
|
|
56
56
|
import {
|
|
57
57
|
BacklinkSources,
|
|
58
58
|
CcReleaseSyncStatuses,
|
|
@@ -77,7 +77,7 @@ import {
|
|
|
77
77
|
providerQuotaPolicySchema,
|
|
78
78
|
resolveProviderInput,
|
|
79
79
|
winnabilityClassSchema
|
|
80
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-VJPVFCZW.js";
|
|
81
81
|
|
|
82
82
|
// src/cli.ts
|
|
83
83
|
import { pathToFileURL } from "url";
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QYC2N23P.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-HW4GVIQD.js";
|
|
7
|
+
import "./chunk-IFUHXONX.js";
|
|
8
|
+
import "./chunk-VJPVFCZW.js";
|
|
9
9
|
export {
|
|
10
10
|
createServer,
|
|
11
11
|
loadConfig
|
package/dist/mcp.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
PACKAGE_VERSION,
|
|
4
4
|
canonryMcpTools,
|
|
5
5
|
createApiClient
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HW4GVIQD.js";
|
|
7
7
|
import {
|
|
8
8
|
isReadOnlyKey
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VJPVFCZW.js";
|
|
10
10
|
|
|
11
11
|
// src/mcp/cli.ts
|
|
12
12
|
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.92.0",
|
|
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,27 +62,27 @@
|
|
|
62
62
|
"@types/node-cron": "^3.0.11",
|
|
63
63
|
"tsup": "^8.5.1",
|
|
64
64
|
"tsx": "^4.19.0",
|
|
65
|
-
"@ainyc/canonry-api-routes": "0.0.0",
|
|
66
65
|
"@ainyc/canonry-api-client": "0.0.0",
|
|
66
|
+
"@ainyc/canonry-api-routes": "0.0.0",
|
|
67
67
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
68
68
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
69
|
-
"@ainyc/canonry-db": "0.0.0",
|
|
70
69
|
"@ainyc/canonry-config": "0.0.0",
|
|
71
70
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
71
|
+
"@ainyc/canonry-db": "0.0.0",
|
|
72
72
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
73
|
-
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
74
73
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
75
74
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
75
|
+
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
76
76
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
77
77
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
78
78
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
79
79
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
80
|
+
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
80
81
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
81
|
-
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
82
|
-
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
83
82
|
"@ainyc/canonry-provider-local": "0.0.0",
|
|
84
|
-
"@ainyc/canonry-provider-
|
|
85
|
-
"@ainyc/canonry-
|
|
83
|
+
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
84
|
+
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
85
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
86
86
|
},
|
|
87
87
|
"scripts": {
|
|
88
88
|
"build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
|