@canonry/canonry 5.29.1 → 5.30.1
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/canonry/references/aeo-analysis.md +12 -0
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +47 -0
- package/assets/assets/{AuditHistoryPanel-B_H7nIp7.js → AuditHistoryPanel-8GPJdEWL.js} +1 -1
- package/assets/assets/{BacklinksPage-rhms6z2S.js → BacklinksPage-8-KPXFtA.js} +1 -1
- package/assets/assets/{HistoryPage-CWPETgrG.js → HistoryPage-CKgF71m5.js} +1 -1
- package/assets/assets/MeasurementPropertyPage-nfGYHl6C.js +1 -0
- package/assets/assets/ProjectPage-BPtdO-Gp.js +8 -0
- package/assets/assets/{RunRow-DQPW7FIF.js → RunRow-C3CRRfb4.js} +1 -1
- package/assets/assets/{RunsPage-BOM_RkNi.js → RunsPage-BvCCjtqM.js} +1 -1
- package/assets/assets/{SettingsPage-BDnT6wtM.js → SettingsPage-B1QuP6Cv.js} +1 -1
- package/assets/assets/{SiteHealthSection-lcZA1XpM.js → SiteHealthSection-DgM3aTd-.js} +3 -3
- package/assets/assets/{TrafficPage-D4nGSfXx.js → TrafficPage-DEUDhBXG.js} +2 -2
- package/assets/assets/{TrafficSourceDetailPage-CvZcCbic.js → TrafficSourceDetailPage-gpgLsGA1.js} +1 -1
- package/assets/assets/{extract-error-message-BJ3f0StM.js → extract-error-message-CH4G5kw6.js} +1 -1
- package/assets/assets/index-B2qeAPfR.js +86 -0
- package/assets/assets/index-D0bY1wpI.css +1 -0
- package/assets/assets/{react-sigma_core.esm.min-c7qzyLLe.js → react-sigma_core.esm.min-CG4hSMQ3.js} +1 -1
- package/assets/assets/{v2-overview-adapter-Dsd6dWtE.js → v2-overview-adapter-QNwqt0UG.js} +1 -1
- package/assets/index.html +2 -2
- package/dist/{chunk-WL2SHCPU.js → chunk-DFIK6IPP.js} +177 -1
- package/dist/{chunk-N2SVFXOB.js → chunk-LLVE7B3V.js} +1143 -615
- package/dist/{chunk-ASYPQYVV.js → chunk-NEP2PJ2T.js} +3 -3
- package/dist/{chunk-FKL5EGOW.js → chunk-RCX6I3DX.js} +2147 -1697
- package/dist/{chunk-RHZKOXDZ.js → chunk-TPJ4MMZ6.js} +4377 -2551
- package/dist/{chunk-PTTVDWMN.js → chunk-TWYIUHJU.js} +2 -2
- package/dist/{chunk-XWBQWAVE.js → chunk-WZL73LY3.js} +269 -83
- package/dist/cli.js +1787 -1528
- package/dist/{demo-server-VGUIDC5T.js → demo-server-EU5DGFB3.js} +4 -4
- package/dist/index.d.ts +7 -0
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-IQA4U3RA.js → intelligence-service-SUFG6ICC.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +12 -11
- package/assets/assets/MeasurementPropertyPage-D9-54Je9.js +0 -1
- package/assets/assets/ProjectPage-eNVzxsZW.js +0 -8
- package/assets/assets/index-Cncchurw.js +0 -86
- package/assets/assets/index-DfhmHULl.css +0 -1
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
siteCrawlGraphNodes,
|
|
6
6
|
siteCrawlPages,
|
|
7
7
|
siteCrawlSnapshots
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TPJ4MMZ6.js";
|
|
9
9
|
import {
|
|
10
10
|
SITE_CRAWL_GRAPH_MAX_EDGES,
|
|
11
11
|
SITE_CRAWL_GRAPH_MAX_NODES,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
TEMPLATE_LINK_RATIO_THRESHOLD,
|
|
14
14
|
factorStatusFromScore,
|
|
15
15
|
roundPreservingTotal
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-RCX6I3DX.js";
|
|
17
17
|
|
|
18
18
|
// src/site-audit-factors.ts
|
|
19
19
|
function recordedSharePct(factor) {
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
PACKAGE_VERSION,
|
|
6
6
|
canonryMcpTools,
|
|
7
7
|
isMachineFormat
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DFIK6IPP.js";
|
|
9
9
|
import {
|
|
10
10
|
AGENT_PROVIDER_IDS,
|
|
11
11
|
CANONRY_NPM_PACKAGE_URL,
|
|
@@ -39,10 +39,17 @@ import {
|
|
|
39
39
|
resolveProviderModel,
|
|
40
40
|
restrictedWriteScopes,
|
|
41
41
|
schedulableRunKindSchema,
|
|
42
|
+
sentimentBackfillPreviewReadSchema,
|
|
43
|
+
sentimentComparisonReadSchema,
|
|
44
|
+
sentimentEvidencePageReadSchema,
|
|
45
|
+
sentimentJobReadSchema,
|
|
46
|
+
sentimentJobsReadSchema,
|
|
47
|
+
sentimentSettingsReadSchema,
|
|
48
|
+
sentimentSummaryReadSchema,
|
|
42
49
|
skillsClientSchema,
|
|
43
50
|
upgradeCaveatFor,
|
|
44
51
|
upgradeCommandFor
|
|
45
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-RCX6I3DX.js";
|
|
46
53
|
|
|
47
54
|
// src/config.ts
|
|
48
55
|
import fs from "fs";
|
|
@@ -52,97 +59,124 @@ import crypto from "crypto";
|
|
|
52
59
|
import { parse, stringify } from "yaml";
|
|
53
60
|
|
|
54
61
|
// ../config/src/index.ts
|
|
62
|
+
import { z as z2 } from "zod";
|
|
63
|
+
|
|
64
|
+
// ../config/src/sentiment.ts
|
|
55
65
|
import { z } from "zod";
|
|
56
|
-
var
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
var sentimentInstallConfigSchema = z.object({
|
|
67
|
+
enabled: z.boolean().default(false),
|
|
68
|
+
apiKey: z.string().trim().min(1).optional(),
|
|
69
|
+
model: z.string().trim().min(1).default("jev-1.13.0"),
|
|
70
|
+
maxConcurrency: z.number().int().min(1).max(8).default(2),
|
|
71
|
+
maxRequestsPerMinute: z.number().int().min(1).max(1e4).default(60),
|
|
72
|
+
maxInputTokensPerMinute: z.number().int().min(1).max(1e7).default(1e5),
|
|
73
|
+
maxAttempts: z.number().int().min(1).max(5).default(3)
|
|
74
|
+
}).strict();
|
|
75
|
+
function resolveSentimentInstallConfig(env, value) {
|
|
76
|
+
const enabled = env.CANONRY_SENTIMENT_ENABLED?.trim().toLowerCase();
|
|
77
|
+
return sentimentInstallConfigSchema.parse({
|
|
78
|
+
...value,
|
|
79
|
+
...enabled ? { enabled: enabled === "1" || enabled === "true" } : {},
|
|
80
|
+
...env.TYPESAFE_API_KEY !== void 0 ? { apiKey: env.TYPESAFE_API_KEY.trim() || void 0 } : {},
|
|
81
|
+
...env.TYPESAFE_MODEL !== void 0 ? { model: env.TYPESAFE_MODEL } : {}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function sentimentInstallReadiness(config) {
|
|
85
|
+
const reason = config.invalid ? "invalid-config" : !config.enabled ? "install-disabled" : config.model !== "jev-1.13.0" ? "unsupported-model" : !config.apiKey ? "missing-credentials" : null;
|
|
86
|
+
return { enabled: config.enabled, ready: reason === null, reason };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ../config/src/index.ts
|
|
90
|
+
var dashboardManagedSweepsSchema = z2.boolean().nullish();
|
|
91
|
+
var researchAllowViewersSchema = z2.boolean().nullish();
|
|
92
|
+
var agentAllowViewersSchema = z2.boolean().nullish();
|
|
93
|
+
var researchViewerDailyRunLimitSchema = z2.number().int().positive().nullish();
|
|
94
|
+
var dashboardManagedRunKindsSchema = z2.array(schedulableRunKindSchema).nullish();
|
|
61
95
|
var agentProviderSchema = agentProviderIdSchema.nullish();
|
|
62
|
-
var agentModelSchema =
|
|
96
|
+
var agentModelSchema = z2.string().trim().min(1).nullish();
|
|
63
97
|
function resolveOperatorApiKeyIds(source) {
|
|
64
98
|
const raw = source.CANONRY_OPERATOR_KEY_IDS?.trim();
|
|
65
99
|
if (!raw) return [];
|
|
66
|
-
const parsed =
|
|
100
|
+
const parsed = z2.array(z2.string().regex(/^[\w-]{1,256}$/)).max(100).safeParse(raw.split(",").map((id) => id.trim()));
|
|
67
101
|
if (!parsed.success) throw new Error("CANONRY_OPERATOR_KEY_IDS must contain at most 100 comma-separated API key IDs (letters, digits, underscores, hyphens; no wildcards).");
|
|
68
102
|
return [...new Set(parsed.data)];
|
|
69
103
|
}
|
|
70
|
-
var envSchema =
|
|
71
|
-
DATABASE_URL:
|
|
72
|
-
API_PORT:
|
|
73
|
-
WORKER_PORT:
|
|
74
|
-
WEB_PORT:
|
|
75
|
-
BOOTSTRAP_SECRET:
|
|
76
|
-
CANONRY_BASE_PATH:
|
|
104
|
+
var envSchema = z2.object({
|
|
105
|
+
DATABASE_URL: z2.string().default("postgresql://aeo:aeo@postgres:5432/aeo_platform"),
|
|
106
|
+
API_PORT: z2.coerce.number().int().positive().default(3e3),
|
|
107
|
+
WORKER_PORT: z2.coerce.number().int().positive().default(3001),
|
|
108
|
+
WEB_PORT: z2.coerce.number().int().positive().default(4173),
|
|
109
|
+
BOOTSTRAP_SECRET: z2.string().default("change-me"),
|
|
110
|
+
CANONRY_BASE_PATH: z2.string().default("/"),
|
|
77
111
|
// Gemini
|
|
78
|
-
GEMINI_API_KEY:
|
|
79
|
-
GEMINI_MODEL:
|
|
80
|
-
GEMINI_BASE_URL:
|
|
81
|
-
GEMINI_MAX_CONCURRENCY:
|
|
82
|
-
GEMINI_MAX_REQUESTS_PER_MINUTE:
|
|
83
|
-
GEMINI_MAX_REQUESTS_PER_DAY:
|
|
112
|
+
GEMINI_API_KEY: z2.string().optional(),
|
|
113
|
+
GEMINI_MODEL: z2.string().optional(),
|
|
114
|
+
GEMINI_BASE_URL: z2.string().optional(),
|
|
115
|
+
GEMINI_MAX_CONCURRENCY: z2.coerce.number().int().positive().default(2),
|
|
116
|
+
GEMINI_MAX_REQUESTS_PER_MINUTE: z2.coerce.number().int().positive().default(10),
|
|
117
|
+
GEMINI_MAX_REQUESTS_PER_DAY: z2.coerce.number().int().positive().default(1e3),
|
|
84
118
|
// Gemini Vertex AI (alternative to API key auth)
|
|
85
|
-
GEMINI_VERTEX_PROJECT:
|
|
86
|
-
GEMINI_VERTEX_REGION:
|
|
87
|
-
GEMINI_VERTEX_CREDENTIALS:
|
|
119
|
+
GEMINI_VERTEX_PROJECT: z2.string().optional(),
|
|
120
|
+
GEMINI_VERTEX_REGION: z2.string().optional(),
|
|
121
|
+
GEMINI_VERTEX_CREDENTIALS: z2.string().optional(),
|
|
88
122
|
// OpenAI
|
|
89
|
-
OPENAI_API_KEY:
|
|
90
|
-
OPENAI_MODEL:
|
|
91
|
-
OPENAI_BASE_URL:
|
|
92
|
-
OPENAI_MAX_CONCURRENCY:
|
|
93
|
-
OPENAI_MAX_REQUESTS_PER_MINUTE:
|
|
94
|
-
OPENAI_MAX_REQUESTS_PER_DAY:
|
|
123
|
+
OPENAI_API_KEY: z2.string().optional(),
|
|
124
|
+
OPENAI_MODEL: z2.string().optional(),
|
|
125
|
+
OPENAI_BASE_URL: z2.string().optional(),
|
|
126
|
+
OPENAI_MAX_CONCURRENCY: z2.coerce.number().int().positive().default(2),
|
|
127
|
+
OPENAI_MAX_REQUESTS_PER_MINUTE: z2.coerce.number().int().positive().default(10),
|
|
128
|
+
OPENAI_MAX_REQUESTS_PER_DAY: z2.coerce.number().int().positive().default(1e3),
|
|
95
129
|
// Anthropic / Claude
|
|
96
|
-
ANTHROPIC_API_KEY:
|
|
97
|
-
ANTHROPIC_MODEL:
|
|
98
|
-
ANTHROPIC_MAX_CONCURRENCY:
|
|
99
|
-
ANTHROPIC_MAX_REQUESTS_PER_MINUTE:
|
|
100
|
-
ANTHROPIC_MAX_REQUESTS_PER_DAY:
|
|
130
|
+
ANTHROPIC_API_KEY: z2.string().optional(),
|
|
131
|
+
ANTHROPIC_MODEL: z2.string().optional(),
|
|
132
|
+
ANTHROPIC_MAX_CONCURRENCY: z2.coerce.number().int().positive().default(2),
|
|
133
|
+
ANTHROPIC_MAX_REQUESTS_PER_MINUTE: z2.coerce.number().int().positive().default(10),
|
|
134
|
+
ANTHROPIC_MAX_REQUESTS_PER_DAY: z2.coerce.number().int().positive().default(1e3),
|
|
101
135
|
// Perplexity
|
|
102
|
-
PERPLEXITY_API_KEY:
|
|
103
|
-
PERPLEXITY_MODEL:
|
|
104
|
-
PERPLEXITY_MAX_CONCURRENCY:
|
|
105
|
-
PERPLEXITY_MAX_REQUESTS_PER_MINUTE:
|
|
106
|
-
PERPLEXITY_MAX_REQUESTS_PER_DAY:
|
|
136
|
+
PERPLEXITY_API_KEY: z2.string().optional(),
|
|
137
|
+
PERPLEXITY_MODEL: z2.string().optional(),
|
|
138
|
+
PERPLEXITY_MAX_CONCURRENCY: z2.coerce.number().int().positive().default(2),
|
|
139
|
+
PERPLEXITY_MAX_REQUESTS_PER_MINUTE: z2.coerce.number().int().positive().default(10),
|
|
140
|
+
PERPLEXITY_MAX_REQUESTS_PER_DAY: z2.coerce.number().int().positive().default(1e3),
|
|
107
141
|
// Meta Muse
|
|
108
|
-
MUSE_API_KEY:
|
|
109
|
-
MUSE_MODEL:
|
|
110
|
-
MUSE_BASE_URL:
|
|
111
|
-
MUSE_MAX_CONCURRENCY:
|
|
112
|
-
MUSE_MAX_REQUESTS_PER_MINUTE:
|
|
113
|
-
MUSE_MAX_REQUESTS_PER_DAY:
|
|
142
|
+
MUSE_API_KEY: z2.string().optional(),
|
|
143
|
+
MUSE_MODEL: z2.string().optional(),
|
|
144
|
+
MUSE_BASE_URL: z2.string().optional(),
|
|
145
|
+
MUSE_MAX_CONCURRENCY: z2.coerce.number().int().positive().default(2),
|
|
146
|
+
MUSE_MAX_REQUESTS_PER_MINUTE: z2.coerce.number().int().positive().default(10),
|
|
147
|
+
MUSE_MAX_REQUESTS_PER_DAY: z2.coerce.number().int().positive().default(1e3),
|
|
114
148
|
// Secret for HMAC-signing Google OAuth state parameters. Required for
|
|
115
149
|
// cloud deployments that mount googleRoutes; the plugin refuses to register
|
|
116
150
|
// without it (see packages/api-routes/src/google.ts).
|
|
117
|
-
GOOGLE_STATE_SECRET:
|
|
118
|
-
CANONRY_RESEARCH_ALLOW_VIEWERS:
|
|
119
|
-
CANONRY_RESEARCH_VIEWER_DAILY_RUN_LIMIT:
|
|
151
|
+
GOOGLE_STATE_SECRET: z2.string().optional(),
|
|
152
|
+
CANONRY_RESEARCH_ALLOW_VIEWERS: z2.string().optional(),
|
|
153
|
+
CANONRY_RESEARCH_VIEWER_DAILY_RUN_LIMIT: z2.coerce.number().int().positive().default(DEFAULT_VIEWER_RESEARCH_DAILY_RUN_LIMIT)
|
|
120
154
|
});
|
|
121
|
-
var bootstrapEnvSchema =
|
|
122
|
-
CANONRY_API_KEY:
|
|
123
|
-
CANONRY_API_URL:
|
|
124
|
-
CANONRY_DATABASE_PATH:
|
|
125
|
-
GEMINI_API_KEY:
|
|
126
|
-
GEMINI_MODEL:
|
|
127
|
-
GEMINI_BASE_URL:
|
|
128
|
-
GEMINI_VERTEX_PROJECT:
|
|
129
|
-
GEMINI_VERTEX_REGION:
|
|
130
|
-
GEMINI_VERTEX_CREDENTIALS:
|
|
131
|
-
OPENAI_API_KEY:
|
|
132
|
-
OPENAI_MODEL:
|
|
133
|
-
OPENAI_BASE_URL:
|
|
134
|
-
ANTHROPIC_API_KEY:
|
|
135
|
-
ANTHROPIC_MODEL:
|
|
136
|
-
PERPLEXITY_API_KEY:
|
|
137
|
-
PERPLEXITY_MODEL:
|
|
138
|
-
MUSE_API_KEY:
|
|
139
|
-
MUSE_MODEL:
|
|
140
|
-
MUSE_BASE_URL:
|
|
141
|
-
LOCAL_BASE_URL:
|
|
142
|
-
LOCAL_API_KEY:
|
|
143
|
-
LOCAL_MODEL:
|
|
144
|
-
GOOGLE_CLIENT_ID:
|
|
145
|
-
GOOGLE_CLIENT_SECRET:
|
|
155
|
+
var bootstrapEnvSchema = z2.object({
|
|
156
|
+
CANONRY_API_KEY: z2.string().optional(),
|
|
157
|
+
CANONRY_API_URL: z2.string().optional(),
|
|
158
|
+
CANONRY_DATABASE_PATH: z2.string().optional(),
|
|
159
|
+
GEMINI_API_KEY: z2.string().optional(),
|
|
160
|
+
GEMINI_MODEL: z2.string().optional(),
|
|
161
|
+
GEMINI_BASE_URL: z2.string().optional(),
|
|
162
|
+
GEMINI_VERTEX_PROJECT: z2.string().optional(),
|
|
163
|
+
GEMINI_VERTEX_REGION: z2.string().optional(),
|
|
164
|
+
GEMINI_VERTEX_CREDENTIALS: z2.string().optional(),
|
|
165
|
+
OPENAI_API_KEY: z2.string().optional(),
|
|
166
|
+
OPENAI_MODEL: z2.string().optional(),
|
|
167
|
+
OPENAI_BASE_URL: z2.string().optional(),
|
|
168
|
+
ANTHROPIC_API_KEY: z2.string().optional(),
|
|
169
|
+
ANTHROPIC_MODEL: z2.string().optional(),
|
|
170
|
+
PERPLEXITY_API_KEY: z2.string().optional(),
|
|
171
|
+
PERPLEXITY_MODEL: z2.string().optional(),
|
|
172
|
+
MUSE_API_KEY: z2.string().optional(),
|
|
173
|
+
MUSE_MODEL: z2.string().optional(),
|
|
174
|
+
MUSE_BASE_URL: z2.string().optional(),
|
|
175
|
+
LOCAL_BASE_URL: z2.string().optional(),
|
|
176
|
+
LOCAL_API_KEY: z2.string().optional(),
|
|
177
|
+
LOCAL_MODEL: z2.string().optional(),
|
|
178
|
+
GOOGLE_CLIENT_ID: z2.string().optional(),
|
|
179
|
+
GOOGLE_CLIENT_SECRET: z2.string().optional()
|
|
146
180
|
});
|
|
147
181
|
function getBootstrapEnv(source, overrides) {
|
|
148
182
|
const filtered = overrides ? Object.fromEntries(Object.entries(overrides).filter(([, v]) => v != null)) : {};
|
|
@@ -570,6 +604,8 @@ function saveConfigPatch(patch) {
|
|
|
570
604
|
if (base.apiKey) merged.apiKey = base.apiKey;
|
|
571
605
|
if (base.anonymousId) merged.anonymousId = base.anonymousId;
|
|
572
606
|
if (base.dashboardPasswordHash) merged.dashboardPasswordHash = base.dashboardPasswordHash;
|
|
607
|
+
if (base.sentiment === void 0) delete merged.sentiment;
|
|
608
|
+
else merged.sentiment = base.sentiment;
|
|
573
609
|
if (base.providers && patch.providers) {
|
|
574
610
|
merged.providers = { ...base.providers };
|
|
575
611
|
for (const [key, patchEntry] of Object.entries(patch.providers)) {
|
|
@@ -2069,6 +2105,122 @@ var getApiV1ProjectsByNameMeasurementOverview = (options) => {
|
|
|
2069
2105
|
...options
|
|
2070
2106
|
});
|
|
2071
2107
|
};
|
|
2108
|
+
var getApiV1ProjectsByNameSentimentSettings = (options) => {
|
|
2109
|
+
return (options.client ?? client).get({
|
|
2110
|
+
security: [
|
|
2111
|
+
{
|
|
2112
|
+
scheme: "bearer",
|
|
2113
|
+
type: "http"
|
|
2114
|
+
}
|
|
2115
|
+
],
|
|
2116
|
+
url: "/api/v1/projects/{name}/sentiment/settings",
|
|
2117
|
+
...options
|
|
2118
|
+
});
|
|
2119
|
+
};
|
|
2120
|
+
var putApiV1ProjectsByNameSentimentSettings = (options) => {
|
|
2121
|
+
return (options.client ?? client).put({
|
|
2122
|
+
security: [
|
|
2123
|
+
{
|
|
2124
|
+
scheme: "bearer",
|
|
2125
|
+
type: "http"
|
|
2126
|
+
}
|
|
2127
|
+
],
|
|
2128
|
+
url: "/api/v1/projects/{name}/sentiment/settings",
|
|
2129
|
+
...options,
|
|
2130
|
+
headers: {
|
|
2131
|
+
"Content-Type": "application/json",
|
|
2132
|
+
...options.headers
|
|
2133
|
+
}
|
|
2134
|
+
});
|
|
2135
|
+
};
|
|
2136
|
+
var getApiV1ProjectsByNameSentiment = (options) => {
|
|
2137
|
+
return (options.client ?? client).get({
|
|
2138
|
+
security: [
|
|
2139
|
+
{
|
|
2140
|
+
scheme: "bearer",
|
|
2141
|
+
type: "http"
|
|
2142
|
+
}
|
|
2143
|
+
],
|
|
2144
|
+
url: "/api/v1/projects/{name}/sentiment",
|
|
2145
|
+
...options
|
|
2146
|
+
});
|
|
2147
|
+
};
|
|
2148
|
+
var getApiV1ProjectsByNameSentimentEvidence = (options) => {
|
|
2149
|
+
return (options.client ?? client).get({
|
|
2150
|
+
security: [
|
|
2151
|
+
{
|
|
2152
|
+
scheme: "bearer",
|
|
2153
|
+
type: "http"
|
|
2154
|
+
}
|
|
2155
|
+
],
|
|
2156
|
+
url: "/api/v1/projects/{name}/sentiment/evidence",
|
|
2157
|
+
...options
|
|
2158
|
+
});
|
|
2159
|
+
};
|
|
2160
|
+
var getApiV1ProjectsByNameSentimentCompare = (options) => {
|
|
2161
|
+
return (options.client ?? client).get({
|
|
2162
|
+
security: [
|
|
2163
|
+
{
|
|
2164
|
+
scheme: "bearer",
|
|
2165
|
+
type: "http"
|
|
2166
|
+
}
|
|
2167
|
+
],
|
|
2168
|
+
url: "/api/v1/projects/{name}/sentiment/compare",
|
|
2169
|
+
...options
|
|
2170
|
+
});
|
|
2171
|
+
};
|
|
2172
|
+
var getApiV1ProjectsByNameSentimentBackfillPreview = (options) => {
|
|
2173
|
+
return (options.client ?? client).get({
|
|
2174
|
+
security: [
|
|
2175
|
+
{
|
|
2176
|
+
scheme: "bearer",
|
|
2177
|
+
type: "http"
|
|
2178
|
+
}
|
|
2179
|
+
],
|
|
2180
|
+
url: "/api/v1/projects/{name}/sentiment/backfill-preview",
|
|
2181
|
+
...options
|
|
2182
|
+
});
|
|
2183
|
+
};
|
|
2184
|
+
var postApiV1ProjectsByNameSentimentBackfills = (options) => {
|
|
2185
|
+
return (options.client ?? client).post({
|
|
2186
|
+
security: [
|
|
2187
|
+
{
|
|
2188
|
+
scheme: "bearer",
|
|
2189
|
+
type: "http"
|
|
2190
|
+
}
|
|
2191
|
+
],
|
|
2192
|
+
url: "/api/v1/projects/{name}/sentiment/backfills",
|
|
2193
|
+
...options,
|
|
2194
|
+
headers: {
|
|
2195
|
+
"Content-Type": "application/json",
|
|
2196
|
+
...options.headers
|
|
2197
|
+
}
|
|
2198
|
+
});
|
|
2199
|
+
};
|
|
2200
|
+
var getApiV1ProjectsByNameSentimentJobs = (options) => {
|
|
2201
|
+
return (options.client ?? client).get({
|
|
2202
|
+
security: [
|
|
2203
|
+
{
|
|
2204
|
+
scheme: "bearer",
|
|
2205
|
+
type: "http"
|
|
2206
|
+
}
|
|
2207
|
+
],
|
|
2208
|
+
url: "/api/v1/projects/{name}/sentiment/jobs",
|
|
2209
|
+
...options
|
|
2210
|
+
});
|
|
2211
|
+
};
|
|
2212
|
+
var getApiV1ProjectsByNameSentimentJobsByJobId = (options) => {
|
|
2213
|
+
return (options.client ?? client).get({
|
|
2214
|
+
security: [
|
|
2215
|
+
{
|
|
2216
|
+
scheme: "bearer",
|
|
2217
|
+
type: "http"
|
|
2218
|
+
}
|
|
2219
|
+
],
|
|
2220
|
+
url: "/api/v1/projects/{name}/sentiment/jobs/{jobId}",
|
|
2221
|
+
...options
|
|
2222
|
+
});
|
|
2223
|
+
};
|
|
2072
2224
|
var getApiV1ProjectsByNameVisibilityReport = (options) => {
|
|
2073
2225
|
return (options.client ?? client).get({
|
|
2074
2226
|
security: [
|
|
@@ -6151,6 +6303,38 @@ function createApiClient(opts = {}) {
|
|
|
6151
6303
|
return new ApiClient(config.apiUrl, config.apiKey, { ...opts, skipProbe: basePathResolved || opts.skipProbe });
|
|
6152
6304
|
}
|
|
6153
6305
|
var ApiClient = class {
|
|
6306
|
+
// Sentiment responses are read with the tolerant readers from contracts, so
|
|
6307
|
+
// a field, state or outcome added by a newer server is dropped or read
|
|
6308
|
+
// through instead of rejecting the response (see `sentiment-read.ts`).
|
|
6309
|
+
/** One page of query rows; follow `queryPage.nextCursor` as `queryCursor`. */
|
|
6310
|
+
async getSentiment(name, query = {}) {
|
|
6311
|
+
return sentimentSummaryReadSchema.parse(await this.invoke(() => getApiV1ProjectsByNameSentiment({ client: this.heyClient, path: { name }, query })));
|
|
6312
|
+
}
|
|
6313
|
+
async getSentimentSettings(name) {
|
|
6314
|
+
return sentimentSettingsReadSchema.parse(await this.invoke(() => getApiV1ProjectsByNameSentimentSettings({ client: this.heyClient, path: { name } })));
|
|
6315
|
+
}
|
|
6316
|
+
async configureSentiment(name, body) {
|
|
6317
|
+
return sentimentSettingsReadSchema.parse(await this.invoke(() => putApiV1ProjectsByNameSentimentSettings({ client: this.heyClient, path: { name }, body })));
|
|
6318
|
+
}
|
|
6319
|
+
async getSentimentEvidence(name, query = {}) {
|
|
6320
|
+
return sentimentEvidencePageReadSchema.parse(await this.invoke(() => getApiV1ProjectsByNameSentimentEvidence({ client: this.heyClient, path: { name }, query })));
|
|
6321
|
+
}
|
|
6322
|
+
async compareSentiment(name, query) {
|
|
6323
|
+
return sentimentComparisonReadSchema.parse(await this.invoke(() => getApiV1ProjectsByNameSentimentCompare({ client: this.heyClient, path: { name }, query })));
|
|
6324
|
+
}
|
|
6325
|
+
async previewSentimentBackfill(name, query) {
|
|
6326
|
+
return sentimentBackfillPreviewReadSchema.parse(await this.invoke(() => getApiV1ProjectsByNameSentimentBackfillPreview({ client: this.heyClient, path: { name }, query })));
|
|
6327
|
+
}
|
|
6328
|
+
async submitSentimentBackfill(name, body) {
|
|
6329
|
+
return sentimentJobReadSchema.parse(await this.invoke(() => postApiV1ProjectsByNameSentimentBackfills({ client: this.heyClient, path: { name }, body })));
|
|
6330
|
+
}
|
|
6331
|
+
async listSentimentJobs(name) {
|
|
6332
|
+
return sentimentJobsReadSchema.parse(await this.invoke(() => getApiV1ProjectsByNameSentimentJobs({ client: this.heyClient, path: { name } })));
|
|
6333
|
+
}
|
|
6334
|
+
/** One page of attempt receipts, newest first; follow `nextAttemptCursor` as `attemptCursor`. */
|
|
6335
|
+
async getSentimentJob(name, jobId, query = {}) {
|
|
6336
|
+
return sentimentJobReadSchema.parse(await this.invoke(() => getApiV1ProjectsByNameSentimentJobsByJobId({ client: this.heyClient, path: { name, jobId }, query })));
|
|
6337
|
+
}
|
|
6154
6338
|
originUrl;
|
|
6155
6339
|
apiKey;
|
|
6156
6340
|
probePromise = null;
|
|
@@ -9154,7 +9338,7 @@ var ApiClient = class {
|
|
|
9154
9338
|
// src/mcp/server.ts
|
|
9155
9339
|
import { randomUUID } from "crypto";
|
|
9156
9340
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9157
|
-
import { z as
|
|
9341
|
+
import { z as z3 } from "zod";
|
|
9158
9342
|
|
|
9159
9343
|
// src/mcp/results.ts
|
|
9160
9344
|
import { ZodError } from "zod";
|
|
@@ -9290,8 +9474,8 @@ var CANONRY_MCP_TOOLKITS = [
|
|
|
9290
9474
|
{
|
|
9291
9475
|
name: "monitoring",
|
|
9292
9476
|
title: "Measurement, runs, insights, health",
|
|
9293
|
-
description: "Inspect portfolio and Property measurement, question results, run history, intelligence insights, health timelines, and bounded Site Health reads (overview, page audit evidence, focused subgraphs, paths, and scan changes).",
|
|
9294
|
-
whenToLoad: "Load when finding weak Properties, reviewing answers and competitors, checking data quality, tying a Site Health page score to concrete findings, investigating site architecture, comparing scans, or diagnosing regressions."
|
|
9477
|
+
description: "Inspect portfolio and Property measurement, question results, experimental branded and non-brand sentiment and evidence, run history, intelligence insights, health timelines, and bounded Site Health reads (overview, page audit evidence, focused subgraphs, paths, and scan changes).",
|
|
9478
|
+
whenToLoad: "Load when finding weak Properties, reviewing answers, sentiment and competitors, checking data quality, tying a Site Health page score to concrete findings, investigating site architecture, comparing scans, or diagnosing regressions."
|
|
9295
9479
|
},
|
|
9296
9480
|
{
|
|
9297
9481
|
name: "setup",
|
|
@@ -9694,12 +9878,12 @@ ${updateNoticeInstructions(update)}` : SERVER_INSTRUCTIONS
|
|
|
9694
9878
|
}, async (uri) => ({ contents: [{ uri: uri.href, mimeType: "text/markdown", text: OPERATIONS_GUIDE.markdown }] }));
|
|
9695
9879
|
return { server, catalog };
|
|
9696
9880
|
}
|
|
9697
|
-
var loadToolkitInputSchema =
|
|
9698
|
-
name:
|
|
9881
|
+
var loadToolkitInputSchema = z3.object({
|
|
9882
|
+
name: z3.enum(CANONRY_MCP_TOOLKIT_NAMES).describe("Toolkit name. List options with canonry_help.")
|
|
9699
9883
|
});
|
|
9700
|
-
var helpInputSchema =
|
|
9701
|
-
intent:
|
|
9702
|
-
includeCatalog:
|
|
9884
|
+
var helpInputSchema = z3.object({
|
|
9885
|
+
intent: z3.string().max(200).optional().describe("Workflow (status, diagnose, prospecting, measurement, integrations, reports) or a short task description."),
|
|
9886
|
+
includeCatalog: z3.boolean().optional().describe("Include full toolkit details. Omit for a compact, actionable route.")
|
|
9703
9887
|
});
|
|
9704
9888
|
function registerMetaTools(server, catalog, opts) {
|
|
9705
9889
|
server.registerTool(
|
|
@@ -10143,6 +10327,8 @@ function parseSkillsClient(value) {
|
|
|
10143
10327
|
}
|
|
10144
10328
|
|
|
10145
10329
|
export {
|
|
10330
|
+
resolveSentimentInstallConfig,
|
|
10331
|
+
sentimentInstallReadiness,
|
|
10146
10332
|
dashboardManagedRunKindsSchema,
|
|
10147
10333
|
resolveOperatorApiKeyIds,
|
|
10148
10334
|
getBootstrapEnv,
|