@ainyc/canonry 4.92.0 → 4.93.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.
Files changed (25) hide show
  1. package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +6 -0
  2. package/assets/assets/{BacklinksPage-D3JpcWtH.js → BacklinksPage-nkgAbbjk.js} +1 -1
  3. package/assets/assets/{ChartPrimitives-DdwqEX5v.js → ChartPrimitives-kdfylr1f.js} +1 -1
  4. package/assets/assets/ProjectPage-BQYmq7FP.js +6 -0
  5. package/assets/assets/{RunRow-c_2jd8iz.js → RunRow-P-n5OkiY.js} +1 -1
  6. package/assets/assets/{RunsPage-D6eM_5tB.js → RunsPage-DfBb4WCS.js} +1 -1
  7. package/assets/assets/{SettingsPage-DaMc8nxK.js → SettingsPage-CRGuFgeK.js} +1 -1
  8. package/assets/assets/{TrafficPage-Dw16dcSc.js → TrafficPage-CMqP0AGZ.js} +1 -1
  9. package/assets/assets/{TrafficSourceDetailPage-Dy9D80dz.js → TrafficSourceDetailPage-XRGzkKWk.js} +1 -1
  10. package/assets/assets/{arrow-left-D8UaBG9a.js → arrow-left-BCR55g4n.js} +1 -1
  11. package/assets/assets/{extract-error-message-CfxCIMNJ.js → extract-error-message-BG1AlucT.js} +1 -1
  12. package/assets/assets/{index-BA-lh2pG.js → index-BPjIZIDO.js} +73 -73
  13. package/assets/assets/{index-fLUYE9Z5.css → index-DiykVUPr.css} +1 -1
  14. package/assets/assets/{trash-2-j1tX1-Kq.js → trash-2-Cme1gNjU.js} +1 -1
  15. package/assets/index.html +2 -2
  16. package/dist/{chunk-QYC2N23P.js → chunk-ADTLQHJY.js} +69 -5
  17. package/dist/{chunk-VJPVFCZW.js → chunk-AUQNKEHV.js} +18 -0
  18. package/dist/{chunk-IFUHXONX.js → chunk-KBDQ5OE4.js} +166 -56
  19. package/dist/{chunk-HW4GVIQD.js → chunk-PK46TKGM.js} +33 -1
  20. package/dist/cli.js +36 -4
  21. package/dist/index.js +4 -4
  22. package/dist/{intelligence-service-24HCX4SJ.js → intelligence-service-4ATCJITP.js} +2 -2
  23. package/dist/mcp.js +2 -2
  24. package/package.json +9 -9
  25. package/assets/assets/ProjectPage-BPLf4U3A.js +0 -6
@@ -23,7 +23,7 @@ import {
23
23
  trafficConnectVercelRequestSchema,
24
24
  trafficConnectWordpressRequestSchema,
25
25
  trafficEventKindSchema
26
- } from "./chunk-VJPVFCZW.js";
26
+ } from "./chunk-AUQNKEHV.js";
27
27
 
28
28
  // src/config.ts
29
29
  import fs from "fs";
@@ -2194,6 +2194,18 @@ var getApiV1ProjectsByNameGbpLodging = (options) => {
2194
2194
  ...options
2195
2195
  });
2196
2196
  };
2197
+ var getApiV1ProjectsByNameGbpAttributes = (options) => {
2198
+ return (options.client ?? client).get({
2199
+ security: [
2200
+ {
2201
+ scheme: "bearer",
2202
+ type: "http"
2203
+ }
2204
+ ],
2205
+ url: "/api/v1/projects/{name}/gbp/attributes",
2206
+ ...options
2207
+ });
2208
+ };
2197
2209
  var getApiV1ProjectsByNameGbpPlaces = (options) => {
2198
2210
  return (options.client ?? client).get({
2199
2211
  security: [
@@ -4353,6 +4365,15 @@ var ApiClient = class {
4353
4365
  })
4354
4366
  );
4355
4367
  }
4368
+ async listGbpAttributes(project, opts) {
4369
+ return this.invoke(
4370
+ () => getApiV1ProjectsByNameGbpAttributes({
4371
+ client: this.heyClient,
4372
+ path: { name: project },
4373
+ query: opts?.locationName ? { locationName: opts.locationName } : void 0
4374
+ })
4375
+ );
4376
+ }
4356
4377
  async listGbpPlaces(project, opts) {
4357
4378
  return this.invoke(
4358
4379
  () => getApiV1ProjectsByNameGbpPlaces({
@@ -6299,6 +6320,17 @@ var canonryMcpTools = [
6299
6320
  openApiOperations: ["GET /api/v1/projects/{name}/gbp/lodging"],
6300
6321
  handler: (client2, input) => client2.listGbpLodging(input.project, compactStringParams(input, ["locationName"]))
6301
6322
  }),
6323
+ defineTool({
6324
+ name: "canonry_gbp_attributes",
6325
+ title: "Get GBP owner-set attributes",
6326
+ description: "List the latest Google Business Profile owner-set attribute snapshot per location: the generic amenity / service / accessibility / identity / social-URL tags the owner has set (e.g. has_onsite_services, offers_online_estimates, is_owned_by_women, wheelchair accessibility, url_instagram). Works for every business category, unlike canonry_gbp_lodging (hotels only). Returns only attributes the owner has set, so attributeCount is a real, owner-readable completeness signal (not a verify-nudge).",
6327
+ access: "read",
6328
+ tier: "gbp",
6329
+ inputSchema: gbpLocationScopedInputSchema,
6330
+ annotations: readAnnotations(),
6331
+ openApiOperations: ["GET /api/v1/projects/{name}/gbp/attributes"],
6332
+ handler: (client2, input) => client2.listGbpAttributes(input.project, compactStringParams(input, ["locationName"]))
6333
+ }),
6302
6334
  defineTool({
6303
6335
  name: "canonry_gbp_places",
6304
6336
  title: "Get GBP Places rendered-listing data",
package/dist/cli.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  setTelemetrySource,
28
28
  showFirstRunNotice,
29
29
  trackEvent
30
- } from "./chunk-QYC2N23P.js";
30
+ } from "./chunk-ADTLQHJY.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-HW4GVIQD.js";
47
+ } from "./chunk-PK46TKGM.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-IFUHXONX.js";
55
+ } from "./chunk-KBDQ5OE4.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-VJPVFCZW.js";
80
+ } from "./chunk-AUQNKEHV.js";
81
81
 
82
82
  // src/cli.ts
83
83
  import { pathToFileURL } from "url";
@@ -3518,6 +3518,27 @@ async function gbpLodging(project, opts) {
3518
3518
  console.log(` ${l.locationName} ${l.populatedGroupCount} attribute group(s)${note}`);
3519
3519
  }
3520
3520
  }
3521
+ async function gbpAttributes(project, opts) {
3522
+ const client = getClient7();
3523
+ const response = await client.listGbpAttributes(project, { locationName: opts.location });
3524
+ if (isMachineFormat(opts.format)) {
3525
+ console.log(JSON.stringify(response, null, 2));
3526
+ return;
3527
+ }
3528
+ if (response.attributes.length === 0) {
3529
+ console.log('No attributes data. Run "canonry gbp sync" to capture owner-set attributes.');
3530
+ return;
3531
+ }
3532
+ console.log(`${response.total} location(s) with owner-set attributes:`);
3533
+ for (const a of response.attributes) {
3534
+ console.log(` ${a.locationName} ${a.attributeCount} attribute(s)`);
3535
+ for (const attr of a.attributes) {
3536
+ const key = attr.name.replace(/^attributes\//, "");
3537
+ const val = attr.uris.length > 0 ? attr.uris.join(", ") : attr.values.join(", ");
3538
+ console.log(` ${key}: ${val}`);
3539
+ }
3540
+ }
3541
+ }
3521
3542
  async function gbpPlaces(project, opts) {
3522
3543
  const client = getClient7();
3523
3544
  const response = await client.listGbpPlaces(project, { locationName: opts.location });
@@ -3733,6 +3754,17 @@ var GBP_CLI_COMMANDS = [
3733
3754
  await gbpLodging(project, { location: getString(input.values, "location"), format: input.format });
3734
3755
  }
3735
3756
  },
3757
+ {
3758
+ path: ["gbp", "attributes"],
3759
+ usage: "canonry gbp attributes <project> [--location <name>] [--format json]",
3760
+ options: {
3761
+ location: stringOption()
3762
+ },
3763
+ run: async (input) => {
3764
+ const project = requireProject(input, "gbp.attributes", "canonry gbp attributes <project> [--location <name>] [--format json]");
3765
+ await gbpAttributes(project, { location: getString(input.values, "location"), format: input.format });
3766
+ }
3767
+ },
3736
3768
  {
3737
3769
  path: ["gbp", "places"],
3738
3770
  usage: "canonry gbp places <project> [--location <name>] [--format json]",
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-QYC2N23P.js";
3
+ } from "./chunk-ADTLQHJY.js";
4
4
  import {
5
5
  loadConfig
6
- } from "./chunk-HW4GVIQD.js";
7
- import "./chunk-IFUHXONX.js";
8
- import "./chunk-VJPVFCZW.js";
6
+ } from "./chunk-PK46TKGM.js";
7
+ import "./chunk-KBDQ5OE4.js";
8
+ import "./chunk-AUQNKEHV.js";
9
9
  export {
10
10
  createServer,
11
11
  loadConfig
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-IFUHXONX.js";
4
- import "./chunk-VJPVFCZW.js";
3
+ } from "./chunk-KBDQ5OE4.js";
4
+ import "./chunk-AUQNKEHV.js";
5
5
  export {
6
6
  IntelligenceService
7
7
  };
package/dist/mcp.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  PACKAGE_VERSION,
4
4
  canonryMcpTools,
5
5
  createApiClient
6
- } from "./chunk-HW4GVIQD.js";
6
+ } from "./chunk-PK46TKGM.js";
7
7
  import {
8
8
  isReadOnlyKey
9
- } from "./chunk-VJPVFCZW.js";
9
+ } from "./chunk-AUQNKEHV.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.92.0",
3
+ "version": "4.93.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",
@@ -65,23 +65,23 @@
65
65
  "@ainyc/canonry-api-client": "0.0.0",
66
66
  "@ainyc/canonry-api-routes": "0.0.0",
67
67
  "@ainyc/canonry-contracts": "0.0.0",
68
- "@ainyc/canonry-integration-bing": "0.0.0",
69
68
  "@ainyc/canonry-config": "0.0.0",
69
+ "@ainyc/canonry-integration-bing": "0.0.0",
70
70
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
71
- "@ainyc/canonry-db": "0.0.0",
72
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
73
71
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
72
+ "@ainyc/canonry-db": "0.0.0",
74
73
  "@ainyc/canonry-integration-google": "0.0.0",
74
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
75
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
75
76
  "@ainyc/canonry-integration-google-places": "0.0.0",
77
+ "@ainyc/canonry-integration-wordpress": "0.0.0",
76
78
  "@ainyc/canonry-integration-traffic": "0.0.0",
77
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
78
- "@ainyc/canonry-intelligence": "0.0.0",
79
79
  "@ainyc/canonry-provider-cdp": "0.0.0",
80
- "@ainyc/canonry-integration-wordpress": "0.0.0",
81
- "@ainyc/canonry-provider-claude": "0.0.0",
80
+ "@ainyc/canonry-intelligence": "0.0.0",
82
81
  "@ainyc/canonry-provider-local": "0.0.0",
83
- "@ainyc/canonry-provider-openai": "0.0.0",
84
82
  "@ainyc/canonry-provider-gemini": "0.0.0",
83
+ "@ainyc/canonry-provider-openai": "0.0.0",
84
+ "@ainyc/canonry-provider-claude": "0.0.0",
85
85
  "@ainyc/canonry-provider-perplexity": "0.0.0"
86
86
  },
87
87
  "scripts": {