@canonry/canonry 7.47.0 → 7.48.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/assets/{AuditHistoryPanel-BTlvVW6p.js → AuditHistoryPanel-CX61JUTX.js} +1 -1
- package/assets/assets/{BacklinksPage-DQu_3poO.js → BacklinksPage-DqnhCPLf.js} +1 -1
- package/assets/assets/{HistoryPage-D_3qu4SQ.js → HistoryPage-rRFCtFL5.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-FKmEMw_G.js → MeasurementPropertyPage-CfIZVKgg.js} +1 -1
- package/assets/assets/{ProjectPage-H7nsLkhG.js → ProjectPage-DU88Joxp.js} +1 -1
- package/assets/assets/{RunsPage-CE5wFNdP.js → RunsPage-B3NIVoWb.js} +1 -1
- package/assets/assets/{SettingsPage-D2zKpqOv.js → SettingsPage-098-3JC1.js} +1 -1
- package/assets/assets/{SiteHealthSection-ClZRxJ-A.js → SiteHealthSection-CfcQYuwU.js} +3 -3
- package/assets/assets/{TrafficPage-BDH4Dzk0.js → TrafficPage-Bl6INnLT.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-DaVUcHXu.js → TrafficSourceDetailPage-Bu_0hPCZ.js} +1 -1
- package/assets/assets/{extract-error-message-YXzyZAEc.js → extract-error-message-Dp43pOCs.js} +1 -1
- package/assets/assets/{index-Zj8hd7aE.js → index-je69pgAK.js} +20 -20
- package/assets/assets/{react-sigma_core.esm.min-9j5NHFWR.js → react-sigma_core.esm.min-DFuzq2Lx.js} +1 -1
- package/assets/assets/{v2-overview-adapter-BsKpkQvx.js → v2-overview-adapter-CjEkLZwJ.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-XHRJYIJQ.js → chunk-5KCJQO4I.js} +1 -1
- package/dist/{chunk-DGKSQ5QD.js → chunk-AKDSQTHE.js} +1 -1
- package/dist/{chunk-RUAQAQ7X.js → chunk-BNZ3N6UX.js} +69 -19
- package/dist/{chunk-CIYCCA2I.js → chunk-CS4POCLI.js} +2 -2
- package/dist/{chunk-3F4KBEMY.js → chunk-JPFZ4CXQ.js} +2 -2
- package/dist/{chunk-HQS2Y7HO.js → chunk-NPYNNEFP.js} +3 -3
- package/dist/{chunk-QS262E4F.js → chunk-NVKQVQ3C.js} +17 -0
- package/dist/{chunk-66K6U5H5.js → chunk-P6KH6N4Z.js} +3 -3
- package/dist/{chunk-XLKWD5WO.js → chunk-PTDX75HP.js} +9 -9
- package/dist/{chunk-KCSU2OSL.js → chunk-U2GU6MAC.js} +59 -30
- package/dist/{cli-catalog-MRYQK7LI.js → cli-catalog-NJPHC55G.js} +3 -3
- package/dist/cli-commands-MVIT7XNN.js +15 -0
- package/dist/cli.js +10 -10
- package/dist/{demo-server-ASCEFIVC.js → demo-server-CX2FZGR5.js} +4 -4
- package/dist/index.d.ts +29 -0
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-VRWJUHNM.js → intelligence-service-6INMSEAQ.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +14 -14
- package/dist/cli-commands-RJF4TCEZ.js +0 -15
|
@@ -765,6 +765,7 @@ import {
|
|
|
765
765
|
resultsClearRequestSchema,
|
|
766
766
|
resultsClearResponseSchema,
|
|
767
767
|
resultsExportDtoSchema,
|
|
768
|
+
retrievedSourceSchema,
|
|
768
769
|
retryAfterDelayMs,
|
|
769
770
|
roundRatio,
|
|
770
771
|
runAdmissionDtoSchema,
|
|
@@ -915,7 +916,7 @@ import {
|
|
|
915
916
|
wordpressSchemaDeployResultDtoSchema,
|
|
916
917
|
wordpressSchemaStatusResultDtoSchema,
|
|
917
918
|
wordpressStatusDtoSchema
|
|
918
|
-
} from "./chunk-
|
|
919
|
+
} from "./chunk-NVKQVQ3C.js";
|
|
919
920
|
|
|
920
921
|
// src/intelligence-service.ts
|
|
921
922
|
import { eq as eq99, desc as desc45, asc as asc20, and as and82, ne as ne17, or as or24, inArray as inArray40, gte as gte26, lte as lte23, isNull as isNull19, sql as sql37, exists as exists2 } from "drizzle-orm";
|
|
@@ -3402,6 +3403,7 @@ var researchRunQueries = sqliteTable("research_run_queries", {
|
|
|
3402
3403
|
groundingSources: text("grounding_sources", { mode: "json" }).$type().notNull().default([]),
|
|
3403
3404
|
citedDomains: text("cited_domains", { mode: "json" }).$type().notNull().default([]),
|
|
3404
3405
|
searchQueries: text("search_queries", { mode: "json" }).$type().notNull().default([]),
|
|
3406
|
+
retrievedSources: text("retrieved_sources", { mode: "json" }).$type(),
|
|
3405
3407
|
namedCompetitors: text("named_competitors", { mode: "json" }).$type().notNull().default([]),
|
|
3406
3408
|
citedCompetitorDomains: text("cited_competitor_domains", { mode: "json" }).$type().notNull().default([]),
|
|
3407
3409
|
answerMentioned: integer("answer_mentioned", { mode: "boolean" }),
|
|
@@ -8682,6 +8684,15 @@ var MIGRATION_VERSIONS = [
|
|
|
8682
8684
|
`ALTER TABLE doctor_health_state ADD COLUMN urgent_receipts TEXT`,
|
|
8683
8685
|
`ALTER TABLE site_liveness_state ADD COLUMN urgent_receipts TEXT`
|
|
8684
8686
|
]
|
|
8687
|
+
},
|
|
8688
|
+
{
|
|
8689
|
+
// Pages an engine's searches listed or opened for a Research answer. NULL
|
|
8690
|
+
// on every existing row and for engines that do not report retrievals.
|
|
8691
|
+
version: 184,
|
|
8692
|
+
name: "research-retrieved-sources",
|
|
8693
|
+
statements: [
|
|
8694
|
+
`ALTER TABLE research_run_queries ADD COLUMN retrieved_sources TEXT`
|
|
8695
|
+
]
|
|
8685
8696
|
}
|
|
8686
8697
|
];
|
|
8687
8698
|
var AERO_LEDGER_REBUILDS = [
|
|
@@ -22569,6 +22580,7 @@ async function competitorSuggestionRoutes(app) {
|
|
|
22569
22580
|
// ../api-routes/src/runs.ts
|
|
22570
22581
|
import crypto16 from "crypto";
|
|
22571
22582
|
import { and as and22, eq as eq30, ne as ne7, asc as asc4, desc as desc11, inArray as inArray15, notInArray, or as or7, sql as sql11 } from "drizzle-orm";
|
|
22583
|
+
import { z as z3 } from "zod";
|
|
22572
22584
|
import { gte as gte4 } from "drizzle-orm";
|
|
22573
22585
|
|
|
22574
22586
|
// ../api-routes/src/run-fill.ts
|
|
@@ -23386,9 +23398,12 @@ function formatRun(row) {
|
|
|
23386
23398
|
}
|
|
23387
23399
|
function parseSnapshotRawResponse(raw) {
|
|
23388
23400
|
const parsed = parseJsonColumn(raw, {});
|
|
23401
|
+
const retrieved = z3.array(retrievedSourceSchema).safeParse(parsed.retrievedSources);
|
|
23389
23402
|
return {
|
|
23390
23403
|
groundingSources: parsed.groundingSources ?? [],
|
|
23391
23404
|
searchQueries: parsed.searchQueries ?? [],
|
|
23405
|
+
// Absent on engines that do not report retrievals and on older rows.
|
|
23406
|
+
retrievedSources: retrieved.success ? retrieved.data : null,
|
|
23392
23407
|
model: parsed.model ?? null
|
|
23393
23408
|
};
|
|
23394
23409
|
}
|
|
@@ -23480,6 +23495,7 @@ function loadRunDetail(app, run) {
|
|
|
23480
23495
|
usage: s.usage,
|
|
23481
23496
|
groundingSources: rawParsed.groundingSources,
|
|
23482
23497
|
searchQueries: rawParsed.searchQueries,
|
|
23498
|
+
retrievedSources: rawParsed.retrievedSources,
|
|
23483
23499
|
createdAt: s.createdAt
|
|
23484
23500
|
};
|
|
23485
23501
|
});
|
|
@@ -40255,7 +40271,7 @@ function winnabilityClassRank(winnabilityClass) {
|
|
|
40255
40271
|
}
|
|
40256
40272
|
|
|
40257
40273
|
// ../api-routes/src/openapi-schemas.ts
|
|
40258
|
-
import { z as
|
|
40274
|
+
import { z as z4 } from "zod";
|
|
40259
40275
|
var SCHEMA_TABLE = {
|
|
40260
40276
|
SentimentSummary: sentimentSummarySchema,
|
|
40261
40277
|
SentimentSettings: sentimentSettingsSchema,
|
|
@@ -40541,7 +40557,7 @@ var SCHEMA_TABLE = {
|
|
|
40541
40557
|
SnapshotListResponse: snapshotListResponseSchema,
|
|
40542
40558
|
SnapshotReportDto: snapshotReportSchema,
|
|
40543
40559
|
// The API accepts legacy phrases, but the public contract advertises queries.
|
|
40544
|
-
SnapshotRequest:
|
|
40560
|
+
SnapshotRequest: z4.object(snapshotRequestInputSchema.shape).omit({ phrases: true }),
|
|
40545
40561
|
SourceBreakdownDto: sourceBreakdownDtoSchema,
|
|
40546
40562
|
TelemetryEventAcceptedDto: telemetryEventAcceptedDtoSchema,
|
|
40547
40563
|
FeedbackSubmission: feedbackSubmissionSchema,
|
|
@@ -40581,11 +40597,11 @@ var SCHEMA_TABLE = {
|
|
|
40581
40597
|
// the API never returns this from a typed handler — it's emitted by the
|
|
40582
40598
|
// global error handler. Codegen consumers reference it through the
|
|
40583
40599
|
// ErrorEnvelope ref so error shape is part of the public contract.
|
|
40584
|
-
ErrorEnvelope:
|
|
40585
|
-
error:
|
|
40586
|
-
code:
|
|
40587
|
-
message:
|
|
40588
|
-
details:
|
|
40600
|
+
ErrorEnvelope: z4.object({
|
|
40601
|
+
error: z4.object({
|
|
40602
|
+
code: z4.string(),
|
|
40603
|
+
message: z4.string(),
|
|
40604
|
+
details: z4.unknown().optional()
|
|
40589
40605
|
})
|
|
40590
40606
|
})
|
|
40591
40607
|
};
|
|
@@ -40610,7 +40626,7 @@ function buildComponentSchemas() {
|
|
|
40610
40626
|
const out = {};
|
|
40611
40627
|
for (const [name, schema] of Object.entries(SCHEMA_TABLE)) {
|
|
40612
40628
|
const io = INPUT_FORM_SCHEMAS.has(name) ? "input" : "output";
|
|
40613
|
-
const json =
|
|
40629
|
+
const json = z4.toJSONSchema(schema, { target: "openapi-3.0", io });
|
|
40614
40630
|
addNullToNullableEnums(json);
|
|
40615
40631
|
out[name] = json;
|
|
40616
40632
|
}
|
|
@@ -53339,18 +53355,18 @@ function parseReviewLimit(value) {
|
|
|
53339
53355
|
// ../api-routes/src/google-marketing.ts
|
|
53340
53356
|
import crypto37 from "crypto";
|
|
53341
53357
|
import { and as and51, desc as desc30, eq as eq63, isNull as isNull11, lt as lt9, ne as ne12, or as or15, sql as sql24 } from "drizzle-orm";
|
|
53342
|
-
import { z as
|
|
53343
|
-
var snapshotPageQuerySchema =
|
|
53344
|
-
limit:
|
|
53345
|
-
cursor:
|
|
53358
|
+
import { z as z5 } from "zod";
|
|
53359
|
+
var snapshotPageQuerySchema = z5.object({
|
|
53360
|
+
limit: z5.coerce.number().int().min(1).max(GOOGLE_MARKETING_STORED_SNAPSHOT_PAGE_MAX).optional(),
|
|
53361
|
+
cursor: z5.string().min(1).optional()
|
|
53346
53362
|
}).strict();
|
|
53347
|
-
var oauthStateSchema =
|
|
53348
|
-
projectId:
|
|
53349
|
-
projectName:
|
|
53363
|
+
var oauthStateSchema = z5.object({
|
|
53364
|
+
projectId: z5.string().min(1),
|
|
53365
|
+
projectName: z5.string().min(1),
|
|
53350
53366
|
provider: googleMarketingProviderSchema,
|
|
53351
|
-
redirectUri:
|
|
53352
|
-
nonce:
|
|
53353
|
-
issuedAt:
|
|
53367
|
+
redirectUri: z5.string().url(),
|
|
53368
|
+
nonce: z5.string().regex(/^[\w-]{43}$/),
|
|
53369
|
+
issuedAt: z5.number()
|
|
53354
53370
|
}).strict();
|
|
53355
53371
|
var GOOGLE_MARKETING_OAUTH_PENDING_FLOW_MAX = 256;
|
|
53356
53372
|
var GOOGLE_MARKETING_OAUTH_COOKIE_PREFIX = "canonry_google_marketing_oauth_";
|
|
@@ -53494,7 +53510,7 @@ function decodeSnapshotCursor(value) {
|
|
|
53494
53510
|
try {
|
|
53495
53511
|
const decoded = Buffer.from(value, "base64url");
|
|
53496
53512
|
if (decoded.toString("base64url") !== value) throw new Error("Non-canonical cursor");
|
|
53497
|
-
const parsed =
|
|
53513
|
+
const parsed = z5.object({ capturedAt: z5.string().min(1), id: z5.string().min(1) }).strict().parse(JSON.parse(decoded.toString()));
|
|
53498
53514
|
return parsed;
|
|
53499
53515
|
} catch {
|
|
53500
53516
|
throw validationError("Invalid Google Marketing snapshot cursor.");
|
|
@@ -53793,7 +53809,7 @@ function latestGtmSnapshot(app, projectId) {
|
|
|
53793
53809
|
if (!snapshot || snapshot.metadata.id !== connection.lastSnapshotId || snapshot.metadata.connectionId !== connection.id || snapshot.metadata.accountId !== connection.selectedAccountId || snapshot.metadata.containerId !== connection.selectedContainerId || snapshot.metadata.workspaceId !== connection.selectedWorkspaceId || snapshot.metadata.capturedAt !== connection.lastSnapshotAt || snapshot.payload.kind !== GtmSnapshotKinds.container) return null;
|
|
53794
53810
|
return snapshot;
|
|
53795
53811
|
}
|
|
53796
|
-
var googleAdsPerformanceQuerySchema =
|
|
53812
|
+
var googleAdsPerformanceQuerySchema = z5.object({
|
|
53797
53813
|
window: googleAdsMetricsWindowSchema.optional()
|
|
53798
53814
|
}).strict();
|
|
53799
53815
|
var GOOGLE_ADS_PERFORMANCE_WINDOW_DAYS = {
|
|
@@ -87496,7 +87512,8 @@ var SPECS = [
|
|
|
87496
87512
|
kind: RunKinds["gtm-sync"],
|
|
87497
87513
|
connection: googleMarketingConnection("gtm"),
|
|
87498
87514
|
syncCommand: (name) => `canonry gtm sync ${name}`,
|
|
87499
|
-
causeCheckIds: ["gtm.auth.connection", "gtm.auth.scopes", "gtm.container.context", "gtm.api.reachable"]
|
|
87515
|
+
causeCheckIds: ["gtm.auth.connection", "gtm.auth.scopes", "gtm.container.context", "gtm.api.reachable"],
|
|
87516
|
+
notFoundRemediation: (name) => `The selected account or container no longer exists, or this login can no longer see it. List what it can see with \`canonry gtm accounts ${name}\`, then choose again with \`canonry gtm select ${name} --account <id> --container <id>\`.`
|
|
87500
87517
|
},
|
|
87501
87518
|
{
|
|
87502
87519
|
prefix: "gbp",
|
|
@@ -87592,12 +87609,13 @@ function gradeSyncFailures(ctx, spec) {
|
|
|
87592
87609
|
const errorText = state.latestError ?? "no error was recorded";
|
|
87593
87610
|
const shownError = errorText.length > SUMMARY_ERROR_LIMIT ? `${truncateUtf16(errorText, SUMMARY_ERROR_LIMIT)}...` : errorText;
|
|
87594
87611
|
const lastSuccessText = state.lastSuccessAt ?? (connection.since ? `none since connecting at ${connection.since}` : "never");
|
|
87612
|
+
const notFound2 = spec.notFoundRemediation && /\bwas not found\b/i.test(errorText);
|
|
87595
87613
|
return {
|
|
87596
87614
|
status: CheckStatuses.fail,
|
|
87597
87615
|
code: code("repeated-failures"),
|
|
87598
87616
|
urgent: true,
|
|
87599
87617
|
summary: `The last ${state.consecutiveFailures} ${spec.label} syncs failed (last success: ${lastSuccessText}). Latest error: ${shownError}`,
|
|
87600
|
-
remediation: `Fix the cause the latest error names (DNS or network filtering of the API host, credentials, or account access), then run \`${spec.syncCommand(project.name)}\`.`,
|
|
87618
|
+
remediation: notFound2 ? spec.notFoundRemediation(project.name) : `Fix the cause the latest error names (DNS or network filtering of the API host, credentials, or account access), then run \`${spec.syncCommand(project.name)}\`.`,
|
|
87601
87619
|
details
|
|
87602
87620
|
};
|
|
87603
87621
|
}
|
|
@@ -88822,12 +88840,23 @@ var sourceConnectedCheck = {
|
|
|
88822
88840
|
}
|
|
88823
88841
|
const errored = activeSources.filter((s) => s.status === "error");
|
|
88824
88842
|
if (errored.length > 0 && errored.length === activeSources.length) {
|
|
88843
|
+
const streaks = errored.map((s) => readSyncRunState(ctx.db, ctx.project.id, RunKinds["traffic-sync"], { sourceId: s.id }));
|
|
88844
|
+
const recovering = streaks.every((state) => state.latestStatus === RunStatuses.failed && !state.repeatedFailure);
|
|
88845
|
+
const lastDataAt = errored.map((s) => s.lastSyncedAt).filter((at) => !!at).sort().at(-1) ?? null;
|
|
88846
|
+
const failuresInARow = Math.min(...streaks.map((state) => state.consecutiveFailures));
|
|
88847
|
+
const sinceText = lastDataAt ? `No new data since ${lastDataAt}.` : "No data has arrived yet.";
|
|
88825
88848
|
return {
|
|
88826
|
-
status: CheckStatuses.fail,
|
|
88827
|
-
code: "traffic.source.all-errored",
|
|
88828
|
-
summary: `All ${activeSources.length} active traffic source(s) are in error state.
|
|
88849
|
+
status: recovering ? CheckStatuses.warn : CheckStatuses.fail,
|
|
88850
|
+
code: recovering ? "traffic.source.all-errored-recently" : "traffic.source.all-errored",
|
|
88851
|
+
summary: recovering ? `The latest sync failed for all ${activeSources.length} active traffic source(s) (${failuresInARow} in a row; this fails at ${SYNC_FAILURE_WINDOW}). ${sinceText}` : `All ${activeSources.length} active traffic source(s) are in error state. ${sinceText}`,
|
|
88829
88852
|
remediation: errored[0].lastError ? `Latest error: "${errored[0].lastError}". Re-connect the source or run \`canonry traffic sync <project> --source <id>\` to retry.` : "Run `canonry traffic sources <project>` to inspect the failing source(s) and re-connect.",
|
|
88830
|
-
details: {
|
|
88853
|
+
details: {
|
|
88854
|
+
sourceCount: activeSources.length,
|
|
88855
|
+
pausedCount: sources.length - activeSources.length,
|
|
88856
|
+
erroredIds: errored.map((s) => s.id),
|
|
88857
|
+
failuresInARow,
|
|
88858
|
+
lastSyncedAt: lastDataAt
|
|
88859
|
+
}
|
|
88831
88860
|
};
|
|
88832
88861
|
}
|
|
88833
88862
|
if (errored.length > 0) {
|
|
@@ -93403,7 +93432,7 @@ async function technicalAeoRoutes(app, opts) {
|
|
|
93403
93432
|
|
|
93404
93433
|
// ../api-routes/src/research.ts
|
|
93405
93434
|
import crypto55 from "crypto";
|
|
93406
|
-
import { z as
|
|
93435
|
+
import { z as z6 } from "zod";
|
|
93407
93436
|
import { and as and79, count as count8, desc as desc44, eq as eq96, gte as gte25, lt as lt14, or as or23, sql as sql36 } from "drizzle-orm";
|
|
93408
93437
|
var sameLocation = (a, b) => a.label === b.label && a.city === b.city && a.region === b.region && a.country === b.country && a.timezone === b.timezone;
|
|
93409
93438
|
var BATCH_RECEIPT_PREFIX = "__canonry_research_batch__:";
|
|
@@ -93625,7 +93654,7 @@ function assertSameDirectResearchRequest(existing, input, hash2) {
|
|
|
93625
93654
|
};
|
|
93626
93655
|
if (crypto55.createHash("sha256").update(JSON.stringify(normalized)).digest("hex") !== existing.requestHash) throw alreadyExists("Research idempotency key", input.idempotencyKey);
|
|
93627
93656
|
}
|
|
93628
|
-
var researchCursorSchema =
|
|
93657
|
+
var researchCursorSchema = z6.object({ projectId: z6.string().min(1), createdAt: z6.string().datetime({ offset: true }), id: z6.string().min(1).max(256) }).strict();
|
|
93629
93658
|
function parseResearchCursor(value, projectId) {
|
|
93630
93659
|
try {
|
|
93631
93660
|
if (value.length > 2048 || !/^[\w-]+$/.test(value)) throw new Error("Invalid encoding");
|
|
@@ -93734,7 +93763,7 @@ function serializeRun(row) {
|
|
|
93734
93763
|
return { id: row.id, projectId: row.projectId, status: row.status, provider: row.provider, requestedModel: row.requestedModel, resolvedModel: row.resolvedModel, location: row.location ?? null, scope: row.scope ?? null, template: row.template ?? null, totalQueries: row.totalQueries, completedQueries: row.completedQueries, failedQueries: row.failedQueries, error: row.error, initiatedBy: row.initiatedBy ?? null, startedAt: row.startedAt, finishedAt: row.finishedAt, createdAt: row.createdAt };
|
|
93735
93764
|
}
|
|
93736
93765
|
function serializeQuery(row) {
|
|
93737
|
-
return { id: row.id, position: row.position, query: row.queryText, queryClass: row.queryClass ?? null, status: row.status, requestedModel: row.requestedModel, resolvedModel: row.resolvedModel, servedModel: row.servedModel, answerText: row.answerText, groundingSources: row.groundingSources, citedDomains: row.citedDomains, searchQueries: row.searchQueries, namedCompetitors: row.namedCompetitors, citedCompetitorDomains: row.citedCompetitorDomains, answerMentioned: row.answerMentioned, citationState: row.citationState, error: row.error, startedAt: row.startedAt, finishedAt: row.finishedAt, createdAt: row.createdAt };
|
|
93766
|
+
return { id: row.id, position: row.position, query: row.queryText, queryClass: row.queryClass ?? null, status: row.status, requestedModel: row.requestedModel, resolvedModel: row.resolvedModel, servedModel: row.servedModel, answerText: row.answerText, groundingSources: row.groundingSources, citedDomains: row.citedDomains, searchQueries: row.searchQueries, retrievedSources: row.retrievedSources ?? null, namedCompetitors: row.namedCompetitors, citedCompetitorDomains: row.citedCompetitorDomains, answerMentioned: row.answerMentioned, citationState: row.citationState, error: row.error, startedAt: row.startedAt, finishedAt: row.finishedAt, createdAt: row.createdAt };
|
|
93738
93767
|
}
|
|
93739
93768
|
function researchPrincipal(request) {
|
|
93740
93769
|
const principal = request.principal;
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
buildCliCatalog,
|
|
4
4
|
printCliCatalog,
|
|
5
5
|
renderTopLevelHelp
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-P6KH6N4Z.js";
|
|
7
|
+
import "./chunk-AKDSQTHE.js";
|
|
8
8
|
import "./chunk-HGMYEDAQ.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-NVKQVQ3C.js";
|
|
10
10
|
export {
|
|
11
11
|
CLI_ROOT_SUMMARIES,
|
|
12
12
|
buildCliCatalog,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
REGISTERED_CLI_COMMANDS
|
|
3
|
+
} from "./chunk-PTDX75HP.js";
|
|
4
|
+
import "./chunk-BNZ3N6UX.js";
|
|
5
|
+
import "./chunk-CS4POCLI.js";
|
|
6
|
+
import "./chunk-AKDSQTHE.js";
|
|
7
|
+
import "./chunk-RB2F4D3Z.js";
|
|
8
|
+
import "./chunk-JPFZ4CXQ.js";
|
|
9
|
+
import "./chunk-5KCJQO4I.js";
|
|
10
|
+
import "./chunk-HGMYEDAQ.js";
|
|
11
|
+
import "./chunk-U2GU6MAC.js";
|
|
12
|
+
import "./chunk-NVKQVQ3C.js";
|
|
13
|
+
export {
|
|
14
|
+
REGISTERED_CLI_COMMANDS
|
|
15
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import {
|
|
3
3
|
autoSyncSkills,
|
|
4
4
|
formatAutoSyncNotice
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NPYNNEFP.js";
|
|
6
6
|
import {
|
|
7
7
|
accessFilterFromArgs,
|
|
8
8
|
dispatchRegisteredCommand,
|
|
9
9
|
printCliCatalog
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-P6KH6N4Z.js";
|
|
11
11
|
import {
|
|
12
12
|
REGISTERED_CLI_COMMANDS,
|
|
13
13
|
buildSetupState,
|
|
14
14
|
consumePendingServeHandoff,
|
|
15
15
|
serveCommand
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-PTDX75HP.js";
|
|
17
17
|
import {
|
|
18
18
|
checkLatestVersionForCli,
|
|
19
19
|
cliRuntimeContext,
|
|
@@ -27,14 +27,14 @@ import {
|
|
|
27
27
|
showFirstRunNotice,
|
|
28
28
|
trackCliCommandFinished,
|
|
29
29
|
trackEvent
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-BNZ3N6UX.js";
|
|
31
|
+
import "./chunk-CS4POCLI.js";
|
|
32
32
|
import {
|
|
33
33
|
resolveCliAccess
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-AKDSQTHE.js";
|
|
35
35
|
import "./chunk-RB2F4D3Z.js";
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-JPFZ4CXQ.js";
|
|
37
|
+
import "./chunk-5KCJQO4I.js";
|
|
38
38
|
import {
|
|
39
39
|
CliError,
|
|
40
40
|
EXIT_SYSTEM_ERROR,
|
|
@@ -42,10 +42,10 @@ import {
|
|
|
42
42
|
printCliError,
|
|
43
43
|
usageError
|
|
44
44
|
} from "./chunk-HGMYEDAQ.js";
|
|
45
|
-
import "./chunk-
|
|
45
|
+
import "./chunk-U2GU6MAC.js";
|
|
46
46
|
import {
|
|
47
47
|
OperationAccesses
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-NVKQVQ3C.js";
|
|
49
49
|
|
|
50
50
|
// src/cli.ts
|
|
51
51
|
import { pathToFileURL } from "url";
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
computeFactorAverages,
|
|
6
6
|
layoutSiteCrawlGraphInput,
|
|
7
7
|
persistSiteCrawlGraphLayout
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-JPFZ4CXQ.js";
|
|
9
9
|
import {
|
|
10
10
|
PACKAGE_VERSION,
|
|
11
11
|
canonryMcpTools
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-5KCJQO4I.js";
|
|
13
13
|
import "./chunk-HGMYEDAQ.js";
|
|
14
14
|
import {
|
|
15
15
|
HISTORY_WINDOW_RUNS,
|
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
siteCrawlPages,
|
|
87
87
|
siteCrawlSnapshots,
|
|
88
88
|
trafficSources
|
|
89
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-U2GU6MAC.js";
|
|
90
90
|
import {
|
|
91
91
|
RunKinds,
|
|
92
92
|
SiteCrawlFetchStates,
|
|
@@ -116,7 +116,7 @@ import {
|
|
|
116
116
|
roundPreservingTotal,
|
|
117
117
|
siteAuditPageFactorSchema,
|
|
118
118
|
wilsonInterval
|
|
119
|
-
} from "./chunk-
|
|
119
|
+
} from "./chunk-NVKQVQ3C.js";
|
|
120
120
|
|
|
121
121
|
// src/demo-server.ts
|
|
122
122
|
import { dirname, join as join2 } from "path";
|
package/dist/index.d.ts
CHANGED
|
@@ -22863,6 +22863,35 @@ declare const researchRunQueries: drizzle_orm_sqlite_core.SQLiteTableWithColumns
|
|
|
22863
22863
|
}, {}, {
|
|
22864
22864
|
$type: string[];
|
|
22865
22865
|
}>;
|
|
22866
|
+
retrievedSources: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
22867
|
+
name: "retrieved_sources";
|
|
22868
|
+
tableName: "research_run_queries";
|
|
22869
|
+
dataType: "json";
|
|
22870
|
+
columnType: "SQLiteTextJson";
|
|
22871
|
+
data: {
|
|
22872
|
+
uri: string;
|
|
22873
|
+
title: string;
|
|
22874
|
+
kind: "search-result" | "page-read";
|
|
22875
|
+
query: string | null;
|
|
22876
|
+
}[];
|
|
22877
|
+
driverParam: string;
|
|
22878
|
+
notNull: false;
|
|
22879
|
+
hasDefault: false;
|
|
22880
|
+
isPrimaryKey: false;
|
|
22881
|
+
isAutoincrement: false;
|
|
22882
|
+
hasRuntimeDefault: false;
|
|
22883
|
+
enumValues: undefined;
|
|
22884
|
+
baseColumn: never;
|
|
22885
|
+
identity: undefined;
|
|
22886
|
+
generated: undefined;
|
|
22887
|
+
}, {}, {
|
|
22888
|
+
$type: {
|
|
22889
|
+
uri: string;
|
|
22890
|
+
title: string;
|
|
22891
|
+
kind: "search-result" | "page-read";
|
|
22892
|
+
query: string | null;
|
|
22893
|
+
}[];
|
|
22894
|
+
}>;
|
|
22866
22895
|
namedCompetitors: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
22867
22896
|
name: "named_competitors";
|
|
22868
22897
|
tableName: "research_run_queries";
|
package/dist/index.js
CHANGED
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
createGoogleMarketingCredentialStore,
|
|
4
4
|
createGoogleMarketingRuntime,
|
|
5
5
|
createServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-BNZ3N6UX.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-CS4POCLI.js";
|
|
10
|
+
import "./chunk-JPFZ4CXQ.js";
|
|
11
|
+
import "./chunk-5KCJQO4I.js";
|
|
12
12
|
import "./chunk-HGMYEDAQ.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-U2GU6MAC.js";
|
|
14
|
+
import "./chunk-NVKQVQ3C.js";
|
|
15
15
|
export {
|
|
16
16
|
GoogleMarketingRuntimeError,
|
|
17
17
|
createGoogleMarketingCredentialStore,
|
package/dist/mcp.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoSyncSkills
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NPYNNEFP.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-CS4POCLI.js";
|
|
8
|
+
import "./chunk-5KCJQO4I.js";
|
|
9
9
|
import "./chunk-HGMYEDAQ.js";
|
|
10
10
|
import {
|
|
11
11
|
isReadOnlyKey,
|
|
12
12
|
updateCheckEnvOptOut
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-NVKQVQ3C.js";
|
|
14
14
|
|
|
15
15
|
// src/mcp/cli.ts
|
|
16
16
|
import { randomUUID } from "crypto";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonry/canonry",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.48.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": [
|
|
@@ -85,34 +85,34 @@
|
|
|
85
85
|
"@types/node-cron": "^3.0.11",
|
|
86
86
|
"tsup": "^8.5.1",
|
|
87
87
|
"tsx": "^4.19.0",
|
|
88
|
-
"@canonry/canonry-web": "0.0.0",
|
|
89
|
-
"@canonry/canonry-api-routes": "0.0.0",
|
|
90
|
-
"@canonry/canonry-contracts": "0.0.0",
|
|
91
|
-
"@canonry/canonry-config": "0.0.0",
|
|
92
88
|
"@canonry/canonry-api-client": "0.0.0",
|
|
89
|
+
"@canonry/canonry-config": "0.0.0",
|
|
90
|
+
"@canonry/canonry-web": "0.0.0",
|
|
93
91
|
"@canonry/canonry-db": "0.0.0",
|
|
92
|
+
"@canonry/canonry-contracts": "0.0.0",
|
|
93
|
+
"@canonry/canonry-api-routes": "0.0.0",
|
|
94
94
|
"@canonry/canonry-integration-bing": "0.0.0",
|
|
95
95
|
"@canonry/canonry-integration-cloud-run": "0.0.0",
|
|
96
96
|
"@canonry/canonry-integration-cloudflare-worker": "0.0.0",
|
|
97
97
|
"@canonry/canonry-integration-cloudflare-queue": "0.0.0",
|
|
98
|
-
"@canonry/canonry-integration-commoncrawl": "0.0.0",
|
|
99
|
-
"@canonry/canonry-integration-google": "0.0.0",
|
|
100
98
|
"@canonry/canonry-integration-google-ads": "0.0.0",
|
|
101
|
-
"@canonry/canonry-integration-
|
|
99
|
+
"@canonry/canonry-integration-commoncrawl": "0.0.0",
|
|
102
100
|
"@canonry/canonry-integration-google-business-profile": "0.0.0",
|
|
103
|
-
"@canonry/canonry-integration-
|
|
104
|
-
"@canonry/canonry-integration-
|
|
101
|
+
"@canonry/canonry-integration-google-places": "0.0.0",
|
|
102
|
+
"@canonry/canonry-integration-google": "0.0.0",
|
|
105
103
|
"@canonry/canonry-integration-openai-ads": "0.0.0",
|
|
104
|
+
"@canonry/canonry-integration-google-tag-manager": "0.0.0",
|
|
105
|
+
"@canonry/canonry-integration-wordpress": "0.0.0",
|
|
106
|
+
"@canonry/canonry-integration-traffic": "0.0.0",
|
|
106
107
|
"@canonry/canonry-provider-cdp": "0.0.0",
|
|
107
|
-
"@canonry/canonry-
|
|
108
|
+
"@canonry/canonry-provider-claude": "0.0.0",
|
|
108
109
|
"@canonry/canonry-provider-gemini": "0.0.0",
|
|
110
|
+
"@canonry/canonry-intelligence": "0.0.0",
|
|
109
111
|
"@canonry/canonry-provider-local": "0.0.0",
|
|
110
|
-
"@canonry/canonry-provider-claude": "0.0.0",
|
|
111
112
|
"@canonry/canonry-provider-muse": "0.0.0",
|
|
112
113
|
"@canonry/canonry-provider-openai": "0.0.0",
|
|
113
|
-
"@canonry/canonry-integration-typesafe": "0.0.0",
|
|
114
114
|
"@canonry/canonry-provider-perplexity": "0.0.0",
|
|
115
|
-
"@canonry/canonry-integration-
|
|
115
|
+
"@canonry/canonry-integration-typesafe": "0.0.0"
|
|
116
116
|
},
|
|
117
117
|
"scripts": {
|
|
118
118
|
"build": "pnpm run build:cli && pnpm run build:web",
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
REGISTERED_CLI_COMMANDS
|
|
3
|
-
} from "./chunk-XLKWD5WO.js";
|
|
4
|
-
import "./chunk-RUAQAQ7X.js";
|
|
5
|
-
import "./chunk-CIYCCA2I.js";
|
|
6
|
-
import "./chunk-DGKSQ5QD.js";
|
|
7
|
-
import "./chunk-RB2F4D3Z.js";
|
|
8
|
-
import "./chunk-3F4KBEMY.js";
|
|
9
|
-
import "./chunk-XHRJYIJQ.js";
|
|
10
|
-
import "./chunk-HGMYEDAQ.js";
|
|
11
|
-
import "./chunk-KCSU2OSL.js";
|
|
12
|
-
import "./chunk-QS262E4F.js";
|
|
13
|
-
export {
|
|
14
|
-
REGISTERED_CLI_COMMANDS
|
|
15
|
-
};
|