@canonry/canonry 7.9.1 → 7.10.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 (29) hide show
  1. package/assets/assets/{AuditHistoryPanel-D0nukTwD.js → AuditHistoryPanel-BgcvPo6g.js} +1 -1
  2. package/assets/assets/{BacklinksPage-B525ij0g.js → BacklinksPage-DZ4tauAs.js} +1 -1
  3. package/assets/assets/{HistoryPage-DvupqQDM.js → HistoryPage-DWG52dz1.js} +1 -1
  4. package/assets/assets/{MeasurementPropertyPage-CwDbi1XN.js → MeasurementPropertyPage-DTx2iQLV.js} +1 -1
  5. package/assets/assets/{ProjectPage-DmZZ2C7q.js → ProjectPage-CCf70zbI.js} +1 -1
  6. package/assets/assets/{RunsPage-DHTvHcGm.js → RunsPage-B6MhRqxN.js} +1 -1
  7. package/assets/assets/{SettingsPage-BwAFzB7A.js → SettingsPage-Bxv7OSHT.js} +1 -1
  8. package/assets/assets/SiteHealthSection-C5x7oiFL.js +4 -0
  9. package/assets/assets/{TrafficPage-BOcXASAM.js → TrafficPage-C5gyQopi.js} +1 -1
  10. package/assets/assets/{TrafficSourceDetailPage-DTq0cN6g.js → TrafficSourceDetailPage-Dv2ZRNvN.js} +1 -1
  11. package/assets/assets/{extract-error-message-BOTDI6g5.js → extract-error-message-C5pr51ph.js} +1 -1
  12. package/assets/assets/{index-BLJfGYUw.js → index-BhXHm5nG.js} +3 -3
  13. package/assets/assets/{react-sigma_core.esm.min-BEBdJNtD.js → react-sigma_core.esm.min-P5bVaYly.js} +1 -1
  14. package/assets/assets/{v2-overview-adapter-BPZ-H3VY.js → v2-overview-adapter-QtI4xO_4.js} +1 -1
  15. package/assets/index.html +1 -1
  16. package/dist/{chunk-KRFTA4I7.js → chunk-52PHEGHT.js} +89 -50
  17. package/dist/{chunk-T2V2PESH.js → chunk-5ZBN3EEK.js} +2 -2
  18. package/dist/{chunk-DO7XPDG5.js → chunk-66DVP4DN.js} +9 -1
  19. package/dist/{chunk-4BKRZGLC.js → chunk-FVMWUT2R.js} +60 -21
  20. package/dist/{chunk-AAMKTL6B.js → chunk-HL3C6Z7T.js} +3 -3
  21. package/dist/{chunk-LO56QXPO.js → chunk-IKXVLT4M.js} +2 -2
  22. package/dist/{chunk-ZLB7WX5D.js → chunk-VSZJVBVR.js} +1 -1
  23. package/dist/cli.js +9 -9
  24. package/dist/{demo-server-KDMG3APY.js → demo-server-WZIB4JKJ.js} +4 -4
  25. package/dist/index.js +6 -6
  26. package/dist/{intelligence-service-LAXJFE3U.js → intelligence-service-KC62A4X5.js} +2 -2
  27. package/dist/mcp.js +4 -4
  28. package/package.json +11 -11
  29. package/assets/assets/SiteHealthSection-hi54eSIt.js +0 -4
@@ -20,20 +20,20 @@ import {
20
20
  saveConfig,
21
21
  saveConfigPatch,
22
22
  sentimentInstallReadiness
23
- } from "./chunk-LO56QXPO.js";
23
+ } from "./chunk-IKXVLT4M.js";
24
24
  import {
25
25
  computeFactorAverages,
26
26
  deleteSiteCrawlGraphLayout,
27
27
  persistSiteCrawlGraphLayout,
28
28
  prepareSiteCrawlGraphLayout,
29
29
  recordedSharePct
30
- } from "./chunk-T2V2PESH.js";
30
+ } from "./chunk-5ZBN3EEK.js";
31
31
  import {
32
32
  CanonryMcpToolNames,
33
33
  CliError,
34
34
  PACKAGE_VERSION,
35
35
  canonryMcpTools
36
- } from "./chunk-ZLB7WX5D.js";
36
+ } from "./chunk-VSZJVBVR.js";
37
37
  import {
38
38
  CC_CACHE_DIR,
39
39
  DUCKDB_SPEC,
@@ -205,7 +205,7 @@ import {
205
205
  siteLivenessState,
206
206
  toAlertView,
207
207
  usageCounters
208
- } from "./chunk-KRFTA4I7.js";
208
+ } from "./chunk-52PHEGHT.js";
209
209
  import {
210
210
  AGENT_MEMORY_VALUE_MAX_BYTES,
211
211
  AGENT_NONE,
@@ -414,7 +414,7 @@ import {
414
414
  visibilityReportRequestSchema,
415
415
  winnabilityClassLabel,
416
416
  withRetry
417
- } from "./chunk-DO7XPDG5.js";
417
+ } from "./chunk-66DVP4DN.js";
418
418
 
419
419
  // src/runtime-context.ts
420
420
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -7873,7 +7873,7 @@ function nonBlank(value) {
7873
7873
  return trimmed ? trimmed : void 0;
7874
7874
  }
7875
7875
  function resolveBuildCommit(env = process.env) {
7876
- const embedded = true ? "1ef30fafb9a5781918fcb963ade6280231796cc9" : void 0;
7876
+ const embedded = true ? "b8858fd6adad2abea13e838eab395ad7aef15323" : void 0;
7877
7877
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
7878
7878
  }
7879
7879
  function resolveInstanceIdentity(env = process.env) {
@@ -16466,7 +16466,7 @@ function partialLists(root) {
16466
16466
  if (uncounted.length === 1) {
16467
16467
  const index = uncounted[0];
16468
16468
  const key = lists[index][0];
16469
- const paged = cursorForList(object, path9, key, root) || typeof object.truncated === "boolean" || typeof object[`${key}Truncated`] === "boolean" || ["items", "rows", "results"].includes(key);
16469
+ const paged = object === root || cursorForList(object, path9, key, root) || typeof object.truncated === "boolean" || typeof object[`${key}Truncated`] === "boolean" || ["items", "rows", "results"].includes(key);
16470
16470
  if (paged) counts[index] = bareTotal(numbers);
16471
16471
  }
16472
16472
  for (const [index, [key, rows]] of lists.entries()) {
@@ -16747,12 +16747,12 @@ function projectionPath(path9) {
16747
16747
  const digest = createHash5("sha256").update(path9).digest("hex").slice(0, 12);
16748
16748
  return `${truncateUtf16(path9, 48)}...#${digest}${path9.slice(-24)}`;
16749
16749
  }
16750
- function boundedProjection(full) {
16750
+ function boundedProjection(full, partialRows, reserve = 0) {
16751
16751
  const value = JSON.parse(full);
16752
- const summary = {
16752
+ let summary = {
16753
16753
  droppedKeys: [],
16754
16754
  keptItems: {},
16755
- projection: "Only complete array rows and marked partial string prefixes are shown; omitted fields are not evidence. Never follow a cursor from a cut page; re-request the original cursor with a smaller limit."
16755
+ projection: partialRows ? "Array rows are complete unless slicedKeys or droppedKeys name a field inside one; sliced strings are partial prefixes and omitted fields are not evidence. Never follow a cursor from a cut page; re-request the original cursor with a smaller limit." : "Only complete array rows and marked partial string prefixes are shown; omitted fields are not evidence. Never follow a cursor from a cut page; re-request the original cursor with a smaller limit."
16756
16756
  };
16757
16757
  const skippedMetadata = () => {
16758
16758
  summary.moreMetadataEntries = (summary.moreMetadataEntries ?? 0) + 1;
@@ -16778,6 +16778,7 @@ function boundedProjection(full) {
16778
16778
  }
16779
16779
  if (dropped > summary.droppedKeys.length) summary.moreDroppedKeys = dropped - summary.droppedKeys.length;
16780
16780
  };
16781
+ const cutOwners = /* @__PURE__ */ new Set();
16781
16782
  const project = (input, budget, path9, owner, ownerPath = "") => {
16782
16783
  if (Array.isArray(input)) {
16783
16784
  const rows = [];
@@ -16785,11 +16786,26 @@ function boundedProjection(full) {
16785
16786
  for (const row of input) {
16786
16787
  const text = serializeResult(row);
16787
16788
  const cost = text.length + (rows.length > 0 ? 1 : 0);
16788
- if (used2 + cost > budget) break;
16789
- rows.push(text);
16790
- used2 += cost;
16789
+ if (used2 + cost <= budget) {
16790
+ rows.push(text);
16791
+ used2 += cost;
16792
+ continue;
16793
+ }
16794
+ if (partialRows && (rows.length === 0 || text.length > MAX_TOOL_RESULT_CHARS)) {
16795
+ const before = { summary: serializeResult(summary), dropped };
16796
+ const partial = project(row, budget - used2 - (rows.length > 0 ? 1 : 0), `${path9 || "items"}[${rows.length}]`);
16797
+ if (partial !== void 0 && partial !== "{}" && partial !== "[]") {
16798
+ partialRows.set(path9 || "items", rows.length);
16799
+ rows.push(partial);
16800
+ } else {
16801
+ summary = JSON.parse(before.summary);
16802
+ dropped = before.dropped;
16803
+ }
16804
+ }
16805
+ break;
16791
16806
  }
16792
16807
  if (rows.length < input.length) {
16808
+ if (partialRows && owner) cutOwners.add(owner);
16793
16809
  record2(summary.keptItems, path9 || "items", `${rows.length} of ${input.length}`);
16794
16810
  if (rows.length === 0) omit(path9 || "items");
16795
16811
  if (owner) {
@@ -16813,9 +16829,8 @@ function boundedProjection(full) {
16813
16829
  omit(path9 || "(root)");
16814
16830
  return void 0;
16815
16831
  }
16816
- const fields = Object.entries(input).filter(([key]) => !key.startsWith("__"));
16817
- const priority = ([key, child]) => key === "queryPage" && isRecord5(child) ? 0 : typeof child === "string" && child.length > budget ? 2 : Number(typeof child === "object" && child !== null);
16818
- fields.sort((a, b) => priority(a) - priority(b));
16832
+ const priority = ([key, child]) => key === "queryPage" && isRecord5(child) ? 0 : typeof child === "string" && child.length > budget ? 2 : typeof child !== "object" || child === null ? 0 : partialRows && serializeResult(child).length > budget ? 2 : 1;
16833
+ const fields = Object.entries(input).filter(([key]) => !key.startsWith("__")).map((field) => ({ field, rank: priority(field) })).sort((a, b) => a.rank - b.rank).map(({ field }) => field);
16819
16834
  const shown2 = [];
16820
16835
  let used = 2;
16821
16836
  for (const [key, child] of fields) {
@@ -16831,17 +16846,40 @@ function boundedProjection(full) {
16831
16846
  shown2.push(prefix + text);
16832
16847
  used += prefix.length + text.length + (shown2.length > 1 ? 1 : 0);
16833
16848
  }
16849
+ if (path9 && cutOwners.has(input)) shown2.push('"__truncated":true');
16834
16850
  return `{${shown2.join(",")}}`;
16835
16851
  };
16836
- const projected = project(value, MAX_TOOL_RESULT_CHARS - PROJECTION_SUMMARY_CHARS, "");
16852
+ const projected = project(value, MAX_TOOL_RESULT_CHARS - PROJECTION_SUMMARY_CHARS - reserve, "");
16837
16853
  const shown = projected === void 0 ? {} : JSON.parse(projected);
16838
16854
  const output = isRecord5(shown) ? shown : { items: shown };
16839
- return serializeResult({ ...output, __truncated: true, [TRUNCATION_SUMMARY_KEY]: summary });
16840
- }
16841
- function truncateToolResult(details) {
16855
+ const result2 = { ...output, __truncated: true, [TRUNCATION_SUMMARY_KEY]: summary };
16856
+ return serializeResult(partialRows ? withPartialLists(result2) : result2);
16857
+ }
16858
+ function rowsShown(cut, path9) {
16859
+ if (path9.includes("[")) return Infinity;
16860
+ const list = path9.split(".").reduce((owner, key) => isRecord5(owner) ? owner[key] : void 0, cut);
16861
+ return Array.isArray(list) ? list.length : 0;
16862
+ }
16863
+ function withPartialRows(full, whole) {
16864
+ const rescued = /* @__PURE__ */ new Map();
16865
+ let partial = boundedProjection(full, rescued);
16866
+ if (!fitsCap(partial)) {
16867
+ const { [PARTIAL_LISTS_KEY]: lists, __pagination: pagination } = JSON.parse(partial);
16868
+ rescued.clear();
16869
+ partial = boundedProjection(full, rescued, serializeResult({ lists, pagination }).length);
16870
+ }
16871
+ if (!fitsCap(partial)) return whole;
16872
+ const cut = JSON.parse(whole);
16873
+ return [...rescued].some(([path9, index]) => rowsShown(cut, path9) <= index) ? partial : whole;
16874
+ }
16875
+ function truncateToolResult(details, options = {}) {
16842
16876
  const annotated = withPartialLists(details);
16843
16877
  const full = serializeResult(annotated);
16844
16878
  if (full.length <= MAX_TOOL_RESULT_CHARS) return full;
16879
+ const whole = truncateWholeRows(details, full);
16880
+ return options.partialRows ? withPartialRows(full, whole) : whole;
16881
+ }
16882
+ function truncateWholeRows(details, full) {
16845
16883
  if (full.length > MAX_STRUCTURED_TRUNCATION_CHARS) return boundedProjection(full);
16846
16884
  if (Array.isArray(details)) {
16847
16885
  const render2 = (rows) => serializeResult({
@@ -18141,7 +18179,8 @@ function adaptRemoteTool(client, tool) {
18141
18179
  }
18142
18180
  }
18143
18181
  return {
18144
- content: [{ type: "text", text: truncateToolResult(shown) }],
18182
+ // A fetched document can be one row larger than the cap; show it in part rather than not at all.
18183
+ content: [{ type: "text", text: truncateToolResult(shown, { partialRows: true }) }],
18145
18184
  details: result2,
18146
18185
  isError: isRemoteToolError(result2)
18147
18186
  };
@@ -4,14 +4,14 @@ import {
4
4
  installSkills,
5
5
  loadConfigRaw,
6
6
  saveConfigPatch
7
- } from "./chunk-LO56QXPO.js";
7
+ } from "./chunk-IKXVLT4M.js";
8
8
  import {
9
9
  PACKAGE_VERSION
10
- } from "./chunk-ZLB7WX5D.js";
10
+ } from "./chunk-VSZJVBVR.js";
11
11
  import {
12
12
  SKILL_MANIFEST_FILENAME,
13
13
  SkillsClients
14
- } from "./chunk-DO7XPDG5.js";
14
+ } from "./chunk-66DVP4DN.js";
15
15
 
16
16
  // src/skills-autosync.ts
17
17
  import fs from "fs";
@@ -5,7 +5,7 @@ import {
5
5
  PACKAGE_VERSION,
6
6
  canonryMcpTools,
7
7
  isMachineFormat
8
- } from "./chunk-ZLB7WX5D.js";
8
+ } from "./chunk-VSZJVBVR.js";
9
9
  import {
10
10
  AGENT_PROVIDER_IDS,
11
11
  CANONRY_NPM_PACKAGE_URL,
@@ -50,7 +50,7 @@ import {
50
50
  skillsClientSchema,
51
51
  upgradeCaveatFor,
52
52
  upgradeCommandFor
53
- } from "./chunk-DO7XPDG5.js";
53
+ } from "./chunk-66DVP4DN.js";
54
54
 
55
55
  // src/config.ts
56
56
  import fs from "fs";
@@ -138,7 +138,7 @@ import {
138
138
  trafficSeriesGranularitySchema,
139
139
  visibilityCompareSelectionSchema,
140
140
  visibilityReportRequestSchema
141
- } from "./chunk-DO7XPDG5.js";
141
+ } from "./chunk-66DVP4DN.js";
142
142
 
143
143
  // src/cli-error.ts
144
144
  function isMachineFormat(format) {
package/dist/cli.js CHANGED
@@ -32,11 +32,11 @@ import {
32
32
  trackCliCommandFinished,
33
33
  trackEvent,
34
34
  waitForServerRuntimeStartup
35
- } from "./chunk-4BKRZGLC.js";
35
+ } from "./chunk-FVMWUT2R.js";
36
36
  import {
37
37
  autoSyncSkills,
38
38
  formatAutoSyncNotice
39
- } from "./chunk-AAMKTL6B.js";
39
+ } from "./chunk-HL3C6Z7T.js";
40
40
  import {
41
41
  configExists,
42
42
  createApiClient,
@@ -53,13 +53,13 @@ import {
53
53
  saveConfig,
54
54
  saveConfigPatch,
55
55
  shouldPrintServeSkillsNudge
56
- } from "./chunk-LO56QXPO.js";
56
+ } from "./chunk-IKXVLT4M.js";
57
57
  import {
58
58
  DEFAULT_DEMO_TRUSTED_PROXIES,
59
59
  trustedProxiesProblem,
60
60
  trustedProxyProblem
61
61
  } from "./chunk-RB2F4D3Z.js";
62
- import "./chunk-T2V2PESH.js";
62
+ import "./chunk-5ZBN3EEK.js";
63
63
  import {
64
64
  CliError,
65
65
  EXIT_SYSTEM_ERROR,
@@ -71,7 +71,7 @@ import {
71
71
  runMeasurementDraftAction,
72
72
  systemError,
73
73
  usageError
74
- } from "./chunk-ZLB7WX5D.js";
74
+ } from "./chunk-VSZJVBVR.js";
75
75
  import {
76
76
  CLOUDFLARE_WORKER_BINDINGS,
77
77
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -100,7 +100,7 @@ import {
100
100
  querySnapshots,
101
101
  rawEventSamples,
102
102
  runs
103
- } from "./chunk-KRFTA4I7.js";
103
+ } from "./chunk-52PHEGHT.js";
104
104
  import {
105
105
  AdsDeliverySnapshotStatuses,
106
106
  AdsHistoricalCampaignRollupStatuses,
@@ -229,7 +229,7 @@ import {
229
229
  visibilityCompareSelectionSchema,
230
230
  visibilityReportRequestSchema,
231
231
  winnabilityClassSchema
232
- } from "./chunk-DO7XPDG5.js";
232
+ } from "./chunk-66DVP4DN.js";
233
233
 
234
234
  // src/cli.ts
235
235
  import { pathToFileURL } from "url";
@@ -779,7 +779,7 @@ function parseDemoTrustedProxies(values) {
779
779
  async function demoCommand(options) {
780
780
  const { host, port } = parseDemoListenOptions(options);
781
781
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
782
- const { createDemoServer } = await import("./demo-server-KDMG3APY.js");
782
+ const { createDemoServer } = await import("./demo-server-WZIB4JKJ.js");
783
783
  const app = await createDemoServer({ trustProxy });
784
784
  let stopping = false;
785
785
  const stop = () => {
@@ -1193,7 +1193,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
1193
1193
  }
1194
1194
  }
1195
1195
  async function backfillInsightsCommand(project2, opts) {
1196
- const { IntelligenceService } = await import("./intelligence-service-LAXJFE3U.js");
1196
+ const { IntelligenceService } = await import("./intelligence-service-KC62A4X5.js");
1197
1197
  const config = loadConfig();
1198
1198
  const db = createClient(config.database);
1199
1199
  migrate(db);
@@ -5,11 +5,11 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-T2V2PESH.js";
8
+ } from "./chunk-5ZBN3EEK.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-ZLB7WX5D.js";
12
+ } from "./chunk-VSZJVBVR.js";
13
13
  import {
14
14
  HISTORY_WINDOW_RUNS,
15
15
  IntelligenceService,
@@ -83,7 +83,7 @@ import {
83
83
  siteCrawlPages,
84
84
  siteCrawlSnapshots,
85
85
  trafficSources
86
- } from "./chunk-KRFTA4I7.js";
86
+ } from "./chunk-52PHEGHT.js";
87
87
  import {
88
88
  RunKinds,
89
89
  SiteCrawlFetchStates,
@@ -112,7 +112,7 @@ import {
112
112
  roundPreservingTotal,
113
113
  siteAuditPageFactorSchema,
114
114
  wilsonInterval
115
- } from "./chunk-DO7XPDG5.js";
115
+ } from "./chunk-66DVP4DN.js";
116
116
 
117
117
  // src/demo-server.ts
118
118
  import { dirname, join as join2 } from "path";
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-4BKRZGLC.js";
6
+ } from "./chunk-FVMWUT2R.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-LO56QXPO.js";
10
- import "./chunk-T2V2PESH.js";
11
- import "./chunk-ZLB7WX5D.js";
12
- import "./chunk-KRFTA4I7.js";
13
- import "./chunk-DO7XPDG5.js";
9
+ } from "./chunk-IKXVLT4M.js";
10
+ import "./chunk-5ZBN3EEK.js";
11
+ import "./chunk-VSZJVBVR.js";
12
+ import "./chunk-52PHEGHT.js";
13
+ import "./chunk-66DVP4DN.js";
14
14
  export {
15
15
  GoogleMarketingRuntimeError,
16
16
  createGoogleMarketingCredentialStore,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-KRFTA4I7.js";
5
- import "./chunk-DO7XPDG5.js";
4
+ } from "./chunk-52PHEGHT.js";
5
+ import "./chunk-66DVP4DN.js";
6
6
  export {
7
7
  HISTORY_WINDOW_RUNS,
8
8
  IntelligenceService
package/dist/mcp.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-AAMKTL6B.js";
3
+ } from "./chunk-HL3C6Z7T.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-LO56QXPO.js";
8
- import "./chunk-ZLB7WX5D.js";
7
+ } from "./chunk-IKXVLT4M.js";
8
+ import "./chunk-VSZJVBVR.js";
9
9
  import {
10
10
  isReadOnlyKey,
11
11
  updateCheckEnvOptOut
12
- } from "./chunk-DO7XPDG5.js";
12
+ } from "./chunk-66DVP4DN.js";
13
13
 
14
14
  // src/mcp/cli.ts
15
15
  import { randomUUID } from "crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "7.9.1",
3
+ "version": "7.10.0",
4
4
  "type": "module",
5
5
  "description": "Self-hosted AI visibility (AEO) platform: track how ChatGPT, Claude, Gemini, and Perplexity cite your domain, join it with Search Console, GA4, server-side traffic, and paid media, and fix what you find through agent tools (CLI, REST, MCP). Local SQLite.",
6
6
  "keywords": [
@@ -86,32 +86,32 @@
86
86
  "tsup": "^8.5.1",
87
87
  "tsx": "^4.19.0",
88
88
  "@ainyc/canonry-web": "0.0.0",
89
- "@ainyc/canonry-api-routes": "0.0.0",
90
- "@ainyc/canonry-config": "0.0.0",
91
89
  "@ainyc/canonry-api-client": "0.0.0",
92
90
  "@ainyc/canonry-contracts": "0.0.0",
93
91
  "@ainyc/canonry-db": "0.0.0",
92
+ "@ainyc/canonry-config": "0.0.0",
93
+ "@ainyc/canonry-api-routes": "0.0.0",
94
94
  "@ainyc/canonry-integration-bing": "0.0.0",
95
95
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
96
96
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
97
97
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
98
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
99
- "@ainyc/canonry-integration-google": "0.0.0",
100
98
  "@ainyc/canonry-integration-google-ads": "0.0.0",
101
- "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
99
+ "@ainyc/canonry-integration-google": "0.0.0",
100
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
101
+ "@ainyc/canonry-integration-google-places": "0.0.0",
102
102
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
103
- "@ainyc/canonry-integration-openai-ads": "0.0.0",
104
103
  "@ainyc/canonry-integration-traffic": "0.0.0",
105
104
  "@ainyc/canonry-integration-wordpress": "0.0.0",
106
- "@ainyc/canonry-intelligence": "0.0.0",
107
- "@ainyc/canonry-integration-google-places": "0.0.0",
105
+ "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
108
106
  "@ainyc/canonry-provider-cdp": "0.0.0",
107
+ "@ainyc/canonry-intelligence": "0.0.0",
109
108
  "@ainyc/canonry-provider-gemini": "0.0.0",
110
- "@ainyc/canonry-provider-claude": "0.0.0",
111
109
  "@ainyc/canonry-provider-local": "0.0.0",
112
- "@ainyc/canonry-provider-openai": "0.0.0",
110
+ "@ainyc/canonry-provider-claude": "0.0.0",
113
111
  "@ainyc/canonry-provider-muse": "0.0.0",
112
+ "@ainyc/canonry-provider-openai": "0.0.0",
114
113
  "@ainyc/canonry-provider-perplexity": "0.0.0",
114
+ "@ainyc/canonry-integration-openai-ads": "0.0.0",
115
115
  "@ainyc/canonry-integration-typesafe": "0.0.0"
116
116
  },
117
117
  "scripts": {