@canonry/canonry 4.167.1 → 4.168.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/dist/cli.js CHANGED
@@ -14,44 +14,48 @@ import {
14
14
  coerceAgentProvider,
15
15
  createServer,
16
16
  detectAndTrackUpgrade,
17
- emitInstallSummary,
18
17
  formatAuditFactorScore,
19
18
  getCloudflareTrafficConnectionBySourceId,
20
- getMissingUserSkillsNudge,
21
19
  getOrCreateAnonymousId,
22
- installSkills,
23
20
  isAeroToolProfile,
24
21
  isFirstRun,
25
22
  isTelemetryEnabled,
26
23
  listAgentProviders,
27
- listSkills,
28
- parseSkillsClient,
29
24
  setGoogleAuthConfig,
30
25
  setTelemetrySource,
31
26
  showFirstRunNotice,
32
27
  trackCliCommandFinished,
33
28
  trackEvent
34
- } from "./chunk-NFG2BPQP.js";
29
+ } from "./chunk-R2SZWJDV.js";
30
+ import {
31
+ autoSyncSkills,
32
+ formatAutoSyncNotice
33
+ } from "./chunk-76JMZAFZ.js";
35
34
  import {
36
35
  CliError,
37
36
  EXIT_SYSTEM_ERROR,
38
37
  EXIT_USER_ERROR,
39
38
  configExists,
40
39
  createApiClient,
40
+ emitInstallSummary,
41
41
  getConfigDir,
42
42
  getConfigPath,
43
+ getMissingUserSkillsNudge,
44
+ installSkills,
43
45
  isEndpointMissing,
44
46
  isMachineFormat,
47
+ listSkills,
45
48
  loadConfig,
46
49
  loadConfigRaw,
47
50
  measurementDraftOperationSchema,
51
+ parseSkillsClient,
48
52
  printCliError,
49
53
  runMeasurementDraftAction,
50
54
  saveConfig,
51
55
  saveConfigPatch,
52
56
  systemError,
53
57
  usageError
54
- } from "./chunk-P5LR3NDQ.js";
58
+ } from "./chunk-C4UWZLQX.js";
55
59
  import {
56
60
  CLOUDFLARE_WORKER_BINDINGS,
57
61
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -65,7 +69,7 @@ import {
65
69
  projects,
66
70
  queries,
67
71
  renderReportHtml
68
- } from "./chunk-7M3QVRJD.js";
72
+ } from "./chunk-CDACTPTY.js";
69
73
  import {
70
74
  AdsDeliverySnapshotStatuses,
71
75
  AdsHistoricalCampaignRollupStatuses,
@@ -18147,6 +18151,10 @@ async function runCli(args = process.argv.slice(2)) {
18147
18151
  const resolvedCommand = resolveCommandIdentifier(args, REGISTERED_CLI_COMMANDS);
18148
18152
  const shouldTrackCommand = !isHelpRequest && command !== "telemetry" && isTelemetryEnabled();
18149
18153
  const shouldTrackCommandStart = shouldTrackCommand && command !== "init";
18154
+ void autoSyncSkills().then((result) => {
18155
+ const notice = formatAutoSyncNotice(result);
18156
+ if (notice && process.stderr.isTTY) console.error(notice);
18157
+ });
18150
18158
  if (shouldTrackCommandStart) {
18151
18159
  detectAndTrackUpgrade();
18152
18160
  const setupState = buildSetupState();
package/dist/index.d.ts CHANGED
@@ -299,6 +299,25 @@ interface CanonryConfig {
299
299
  telemetry?: boolean;
300
300
  anonymousId?: string;
301
301
  lastSeenVersion?: string;
302
+ /**
303
+ * The engine version the installed skill trees were last synced against.
304
+ *
305
+ * Deliberately separate from `lastSeenVersion`, which telemetry owns. Both
306
+ * fields answer "have we seen this build before?", but they are consumed by
307
+ * different subsystems and whichever writes first silences the other:
308
+ * `detectAndTrackUpgrade` returns early on `lastSeenVersion === VERSION`, so
309
+ * when auto-sync shared that field it permanently suppressed `cli.upgraded`.
310
+ */
311
+ lastSkillsSyncedVersion?: string;
312
+ /**
313
+ * When the installed skill trees were last verified against the bundled
314
+ * copies. Drives the interval half of the skills auto-sync: a version bump
315
+ * is not the only way an installed copy goes wrong (hand-deleted files, a
316
+ * partial install, a `$HOME` shared across machines), so the check also runs
317
+ * on a timer. The comparison is local hash vs local hash, so it costs no
318
+ * network. See `skills-autosync.ts`.
319
+ */
320
+ lastSkillsVerifiedAt?: string;
302
321
  /** Set once when the first-activation notice has been shown; never unset. */
303
322
  activationNoticeShown?: boolean;
304
323
  updateCheck?: boolean;
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-NFG2BPQP.js";
3
+ } from "./chunk-R2SZWJDV.js";
4
4
  import {
5
5
  loadConfig
6
- } from "./chunk-P5LR3NDQ.js";
7
- import "./chunk-7M3QVRJD.js";
6
+ } from "./chunk-C4UWZLQX.js";
7
+ import "./chunk-CDACTPTY.js";
8
8
  import "./chunk-TP4KXU3E.js";
9
9
  export {
10
10
  createServer,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-7M3QVRJD.js";
3
+ } from "./chunk-CDACTPTY.js";
4
4
  import "./chunk-TP4KXU3E.js";
5
5
  export {
6
6
  IntelligenceService
package/dist/mcp.js CHANGED
@@ -1,9 +1,12 @@
1
+ import {
2
+ autoSyncSkills
3
+ } from "./chunk-76JMZAFZ.js";
1
4
  import {
2
5
  CliError,
3
6
  PACKAGE_VERSION,
4
7
  canonryMcpTools,
5
8
  createApiClient
6
- } from "./chunk-P5LR3NDQ.js";
9
+ } from "./chunk-C4UWZLQX.js";
7
10
  import {
8
11
  isReadOnlyKey
9
12
  } from "./chunk-TP4KXU3E.js";
@@ -266,6 +269,22 @@ var DynamicToolCatalog = class {
266
269
  function createCanonryMcpServer(options = {}) {
267
270
  return createCanonryMcpServerWithCatalog(options).server;
268
271
  }
272
+ var SERVER_INSTRUCTIONS = `Canonry tracks how AI answer engines mention a brand and cite a domain.
273
+
274
+ Load the "canonry" skill before operator work (project setup, integrations, traffic sources, sweeps, diagnosis). It carries the procedures and the failure modes; this text is only a pointer. Use "aero" for analyst work: regression diagnosis, reporting.
275
+
276
+ Two signals, never interchangeable:
277
+ - mentioned = the brand appears in the answer TEXT the model wrote.
278
+ - cited = the domain appears in the SOURCE links behind the answer.
279
+ A model can do either, both or neither. Never compute one from the other, and never report a number for one under the other's name.
280
+
281
+ Sweeps and probes spend provider quota and write rows. Get explicit approval before any run, apply, or other mutation.
282
+
283
+ Most reads are free. Five ads reads are NOT: canonry_ads_account, canonry_ads_geo_search, canonry_ads_live_delivery, canonry_ads_conversion_pixels and canonry_ads_conversion_event_settings call the provider live and spend against the advertiser account. They are marked read, so nothing in the tool list warns you. Get approval for those exactly as for a mutation.
284
+
285
+ A null answerMentioned means NOT CHECKED, not "not mentioned". Never coerce it to false.
286
+
287
+ If no sweep has run, say so. Never state a mention or citation figure that no run produced.`;
269
288
  function createCanonryMcpServerWithCatalog(options = {}) {
270
289
  const clientFactory = options.clientFactory ?? createApiClient;
271
290
  const client = clientFactory();
@@ -273,6 +292,8 @@ function createCanonryMcpServerWithCatalog(options = {}) {
273
292
  const server = new McpServer({
274
293
  name: "canonry",
275
294
  version: PACKAGE_VERSION
295
+ }, {
296
+ instructions: SERVER_INSTRUCTIONS
276
297
  });
277
298
  server.validateToolInput = async (_tool, args) => args;
278
299
  const entries = [];
@@ -365,6 +386,7 @@ async function main(argv = process.argv.slice(2)) {
365
386
  }
366
387
  throw error;
367
388
  }
389
+ void autoSyncSkills();
368
390
  const client = createApiClient();
369
391
  const scope = await resolveEffectiveScope(client, options.scope);
370
392
  const server = createCanonryMcpServer({ scope, eager: options.eager, clientFactory: () => client });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "4.167.1",
3
+ "version": "4.168.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",
@@ -73,25 +73,25 @@
73
73
  "@ainyc/canonry-api-client": "0.0.0",
74
74
  "@ainyc/canonry-api-routes": "0.0.0",
75
75
  "@ainyc/canonry-config": "0.0.0",
76
- "@ainyc/canonry-contracts": "0.0.0",
77
76
  "@ainyc/canonry-db": "0.0.0",
77
+ "@ainyc/canonry-contracts": "0.0.0",
78
78
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
79
79
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
80
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
81
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
82
80
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
83
81
  "@ainyc/canonry-integration-bing": "0.0.0",
82
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
83
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
84
84
  "@ainyc/canonry-integration-google": "0.0.0",
85
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
85
86
  "@ainyc/canonry-integration-google-places": "0.0.0",
86
87
  "@ainyc/canonry-integration-traffic": "0.0.0",
87
88
  "@ainyc/canonry-integration-wordpress": "0.0.0",
88
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
89
- "@ainyc/canonry-intelligence": "0.0.0",
90
89
  "@ainyc/canonry-provider-cdp": "0.0.0",
91
- "@ainyc/canonry-provider-claude": "0.0.0",
92
- "@ainyc/canonry-provider-gemini": "0.0.0",
90
+ "@ainyc/canonry-intelligence": "0.0.0",
93
91
  "@ainyc/canonry-provider-local": "0.0.0",
92
+ "@ainyc/canonry-provider-claude": "0.0.0",
94
93
  "@ainyc/canonry-provider-openai": "0.0.0",
94
+ "@ainyc/canonry-provider-gemini": "0.0.0",
95
95
  "@ainyc/canonry-provider-perplexity": "0.0.0"
96
96
  },
97
97
  "scripts": {