@canonry/canonry 7.62.1 → 7.63.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/canonry-cli.md +2 -1
- package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +16 -3
- package/assets/assets/{AgentSetupPage-DtPnVaeF.js → AgentSetupPage-D6lCJ1G1.js} +1 -1
- package/assets/assets/{AuditHistoryPanel-Ce_oy4OV.js → AuditHistoryPanel-DlgI3o-U.js} +1 -1
- package/assets/assets/{BacklinksPage-CrqPWRd8.js → BacklinksPage-ByiMqbSI.js} +1 -1
- package/assets/assets/{HistoryPage-5v0JM7DN.js → HistoryPage-DclVeuLO.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-Bm5Mrd5a.js → MeasurementPropertyPage-DDHybtHa.js} +1 -1
- package/assets/assets/{ProjectPage-DaWUh6iw.js → ProjectPage-vBu6oWFi.js} +1 -1
- package/assets/assets/{RunsPage-CfdAR2v2.js → RunsPage-CYBJ6pXX.js} +1 -1
- package/assets/assets/{SettingsPage-BFooA7JG.js → SettingsPage-w0GmXir0.js} +1 -1
- package/assets/assets/{SiteHealthSection-CerUQgAp.js → SiteHealthSection-DDTjGZ05.js} +2 -2
- package/assets/assets/ToneBadge-MKA1xeYc.js +60 -0
- package/assets/assets/{TrafficPage-C5fhZGJ2.js → TrafficPage-hUWYv-HT.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-BoqARHYz.js → TrafficSourceDetailPage-CGHgPxs8.js} +1 -1
- package/assets/assets/{account-context-D_CDYrs8.js → account-context-qX-Es0RK.js} +1 -1
- package/assets/assets/{card-C6z0XyOo.js → card-CzROANT5.js} +1 -1
- package/assets/assets/{extract-error-message-By_wcU8g.js → extract-error-message-BY1STLiX.js} +1 -1
- package/assets/assets/{format-helpers-D3Ubm8vk.js → format-helpers-BNQR1HNK.js} +1 -1
- package/assets/assets/{index-DSVFZqv6.js → index-LmB57HOs.js} +4 -4
- package/assets/assets/{query-client-BETh6SO9.js → query-client-Gz37p16p.js} +1 -1
- package/assets/assets/{react-query-DzDr4w41.js → react-query-C6DtBAYQ.js} +1 -1
- package/assets/assets/{react-sigma_core.esm.min-3kgtOWbQ.js → react-sigma_core.esm.min-CgxuyPPF.js} +1 -1
- package/assets/assets/{service-BUaUaize.js → service-DyHZWnMe.js} +1 -1
- package/assets/index.html +7 -7
- package/dist/{ads-7WUY5CVC.js → ads-FOUJNHP4.js} +3 -3
- package/dist/{agent-NOA33LVM.js → agent-UVDVH7LK.js} +7 -7
- package/dist/{agent-ask-PKQDFJ7K.js → agent-ask-UEYN2SQX.js} +3 -3
- package/dist/{agent-conversations-7HVWPSFB.js → agent-conversations-F54376Q2.js} +3 -3
- package/dist/{agent-memory-Y4M2EWKA.js → agent-memory-SOHBTJ4U.js} +3 -3
- package/dist/{agent-providers-P67FWELV.js → agent-providers-MMEK2H6V.js} +3 -3
- package/dist/{agent-transcript-C2BYWPRT.js → agent-transcript-5IJ3VAEV.js} +3 -3
- package/dist/{analytics-XHYWNNW7.js → analytics-LDWO5IW6.js} +3 -3
- package/dist/{apply-6OIWDXQP.js → apply-PSGFDJIC.js} +3 -3
- package/dist/{backfill-KQPXCUUJ.js → backfill-2BVFKQ6J.js} +9 -9
- package/dist/{backlinks-ASYIZFLQ.js → backlinks-X6DXIL2O.js} +3 -3
- package/dist/{bing-ZLKJ3MIL.js → bing-3HMFUEOO.js} +3 -3
- package/dist/{bootstrap-KMVQY5JD.js → bootstrap-ZUSSLXCI.js} +10 -10
- package/dist/{cdp-V2HX4ZLE.js → cdp-FH627HJ6.js} +7 -7
- package/dist/{chunk-2HNTNKFC.js → chunk-22ABGRB7.js} +505 -131
- package/dist/{chunk-GSHHYR24.js → chunk-2LAL5W6J.js} +3 -3
- package/dist/{chunk-LFXKB5FZ.js → chunk-32KNDPD3.js} +351 -333
- package/dist/{chunk-3B2GBWIA.js → chunk-5GMYD7UZ.js} +5 -5
- package/dist/{chunk-X3GWBK7N.js → chunk-5VAC4KQ2.js} +3 -3
- package/dist/{chunk-WKZZILBI.js → chunk-5YC6IU44.js} +2 -2
- package/dist/{chunk-5NYS3ABL.js → chunk-67262NJL.js} +2 -2
- package/dist/{chunk-7EWDQUNH.js → chunk-6ABOEN5D.js} +8 -8
- package/dist/{chunk-2LY4FY4N.js → chunk-A57HYHJ3.js} +1 -1
- package/dist/{chunk-O6VSPM5S.js → chunk-AGSQWIE4.js} +76 -29
- package/dist/{chunk-KLGHY67V.js → chunk-CWMJQ2JV.js} +4 -4
- package/dist/{chunk-U2WPZZPQ.js → chunk-EHTSCLEL.js} +1 -1
- package/dist/{chunk-IVZMXHXE.js → chunk-ERJ54U2I.js} +1 -1
- package/dist/{chunk-IALK4DQJ.js → chunk-GRWZC3GQ.js} +1 -1
- package/dist/{chunk-YQGVA64Q.js → chunk-H22RCHYH.js} +22 -6
- package/dist/{chunk-RGD5SDT3.js → chunk-HNZQVIPS.js} +1 -1
- package/dist/{chunk-UVDBUMYV.js → chunk-IDQZTPRG.js} +2 -2
- package/dist/{chunk-I3CMCTNE.js → chunk-IRRONWF7.js} +4 -4
- package/dist/{chunk-UUGT7UMF.js → chunk-JM6OFCLX.js} +4 -4
- package/dist/{chunk-B5CSCGVD.js → chunk-L2QPAUTQ.js} +2 -1
- package/dist/{chunk-CJC4AQ2M.js → chunk-LBD7YXVD.js} +2 -2
- package/dist/{chunk-SDZKHJ6W.js → chunk-LEG7F3DN.js} +20 -2
- package/dist/{chunk-MMRJUOE2.js → chunk-NOQCIXM6.js} +1 -1
- package/dist/{chunk-Q7PTBHNG.js → chunk-OIHJJHJR.js} +1 -1
- package/dist/{chunk-YBDUZBGU.js → chunk-PH7RTAWW.js} +1 -1
- package/dist/{chunk-LAILXR2F.js → chunk-QNFX7ZCT.js} +1 -1
- package/dist/{chunk-SYQLUOR7.js → chunk-SG2OPR7J.js} +1 -1
- package/dist/{chunk-DAKJBAUN.js → chunk-SN5A767O.js} +1 -1
- package/dist/{chunk-YJAN2ZDV.js → chunk-SQYYAYH6.js} +3 -3
- package/dist/{chunk-U6CNJC2Y.js → chunk-TKLE2Y6H.js} +35 -1
- package/dist/{chunk-KTQVRQDM.js → chunk-UBP3AAKA.js} +1 -1
- package/dist/{chunk-APQ5EAL2.js → chunk-UYPBR3SF.js} +2 -2
- package/dist/{chunk-AO4P75DI.js → chunk-V3QMOGZE.js} +5 -5
- package/dist/{chunk-OJVXKPIN.js → chunk-ZJTU73GW.js} +3 -3
- package/dist/{citations-NOCVQPPU.js → citations-BKWLP5S3.js} +3 -3
- package/dist/{cli-catalog-WOWYZ7Q2.js → cli-catalog-VRJS66GR.js} +3 -3
- package/dist/{cli-commands-VSS42S5I.js → cli-commands-ONFE63OB.js} +7 -7
- package/dist/cli.js +13 -13
- package/dist/{competitor-KQK66W3M.js → competitor-VELMM2TJ.js} +3 -3
- package/dist/{content-OHOQO5LP.js → content-I525MITL.js} +3 -3
- package/dist/{dashboard-W6MII62Z.js → dashboard-BC4NKAO2.js} +6 -6
- package/dist/{demo-23H25IOO.js → demo-ZRFZ5EBH.js} +1 -1
- package/dist/{demo-server-WYYWTH4H.js → demo-server-7R7NGWJA.js} +11 -11
- package/dist/{discover-557WRGEK.js → discover-E2CV5ZP7.js} +3 -3
- package/dist/{discover-eval-GGRZZHHI.js → discover-eval-ESRCWRHP.js} +3 -3
- package/dist/{doctor-D5JNJKVE.js → doctor-BQDVERII.js} +3 -3
- package/dist/{evidence-DHYYVPWW.js → evidence-NUULK5XD.js} +3 -3
- package/dist/{export-cmd-M24S3YBY.js → export-cmd-K324RTN4.js} +3 -3
- package/dist/{ga-XM6WXZNP.js → ga-PQ36UFTK.js} +3 -3
- package/dist/{gbp-M3S5XYPG.js → gbp-KTYA6KHR.js} +3 -3
- package/dist/{google-PULCSUOU.js → google-3D4E7TJX.js} +4 -4
- package/dist/{google-marketing-AA625HA4.js → google-marketing-4FRO4PRN.js} +1 -1
- package/dist/{health-cmd-LVEW6OBD.js → health-cmd-CZJOZUAQ.js} +3 -3
- package/dist/{history-32ZYGZGQ.js → history-JNH34GAM.js} +3 -3
- package/dist/index.d.ts +13 -7
- package/dist/index.js +24 -24
- package/dist/{init-VJDDRCBV.js → init-TU4VSGVU.js} +11 -11
- package/dist/{insights-RK3MJ4UM.js → insights-STYJSZBB.js} +3 -3
- package/dist/intelligence-service-MWTHUE7S.js +15 -0
- package/dist/{journeys-S4CPNZYU.js → journeys-POTSSBOM.js} +3 -3
- package/dist/{keys-WCXE7WXV.js → keys-BPCSPX2O.js} +3 -3
- package/dist/{keyword-HHVLC4HI.js → keyword-6SML434W.js} +3 -3
- package/dist/{logs-VYESWGAN.js → logs-WTKKH4UJ.js} +3 -3
- package/dist/{mcp-4LRFIOLC.js → mcp-HTAHMVRC.js} +2 -2
- package/dist/mcp.js +9 -9
- package/dist/{measurement-plan-AL3EHWRK.js → measurement-plan-LJHKKRZ7.js} +5 -5
- package/dist/{notify-LUDG5PWU.js → notify-EARS4LMG.js} +3 -3
- package/dist/{organic-evidence-CIOHMKLD.js → organic-evidence-W7ZQQKPL.js} +3 -3
- package/dist/{overview-NAZJ6PJG.js → overview-C7KQD4NR.js} +4 -4
- package/dist/{project-N3MU5V6T.js → project-YU2FIL4B.js} +3 -3
- package/dist/{query-XMI2FV6G.js → query-SYFLWHFA.js} +3 -3
- package/dist/{research-MQ6QA5TV.js → research-UOUXMFBV.js} +3 -3
- package/dist/{results-export-OFEZXCJK.js → results-export-VYPG2Z6S.js} +3 -3
- package/dist/{run-YQS3LCFT.js → run-GZD3MQGS.js} +4 -4
- package/dist/{schedule-DF6HCMXN.js → schedule-PAA2NLGF.js} +3 -3
- package/dist/{search-MRDJKVOL.js → search-6RWCUEEY.js} +3 -3
- package/dist/{serve-OCAFOFS2.js → serve-VIEGFGSK.js} +25 -25
- package/dist/{session-5OXLS7NP.js → session-JLH72BF5.js} +12 -12
- package/dist/{settings-NIF34QPH.js → settings-TTA775EJ.js} +3 -3
- package/dist/{skills-JOSNWG7B.js → skills-GA35KKOV.js} +2 -2
- package/dist/{snapshot-32DLVRIJ.js → snapshot-QVQVAMMN.js} +3 -3
- package/dist/{src-F63SHN5T.js → src-CTHVFVLF.js} +2 -2
- package/dist/{status-IERHHP4C.js → status-E7B726S6.js} +4 -4
- package/dist/{technical-aeo-D7CA3CK6.js → technical-aeo-SMPN3QDQ.js} +3 -3
- package/dist/{telemetry-DRURFCCJ.js → telemetry-CTBFPMWD.js} +4 -4
- package/dist/{tools-3IZMSHSY.js → tools-YOV2KHF2.js} +11 -11
- package/dist/{traffic-AME5NDMN.js → traffic-XACOSYYM.js} +36 -7
- package/dist/{users-4CQ6ATAG.js → users-WJC7SGRL.js} +3 -3
- package/dist/{visibility-stats-R5JBISBX.js → visibility-stats-H3ZNFV5M.js} +3 -3
- package/dist/{wordpress-GFK4GR3O.js → wordpress-72YMWF7F.js} +3 -3
- package/package.json +1 -1
- package/assets/assets/ToneBadge-DKvZcONW.js +0 -60
- package/dist/intelligence-service-UNKFCG5N.js +0 -15
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
pickProjectCitedDomain
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EHTSCLEL.js";
|
|
4
4
|
import {
|
|
5
5
|
GBP_INSIGHT_PROVIDER,
|
|
6
6
|
PERSISTENT_GAP_THRESHOLD,
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
mergeGscQueryTotalsWithFallback,
|
|
15
15
|
readGscQueryDailyRows,
|
|
16
16
|
readLatestGscDataDate
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-22ABGRB7.js";
|
|
18
18
|
import {
|
|
19
19
|
getRequestContext
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-QNFX7ZCT.js";
|
|
21
21
|
import {
|
|
22
22
|
competitors,
|
|
23
23
|
gbpDailyMetrics,
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
queries,
|
|
36
36
|
querySnapshots,
|
|
37
37
|
runs
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-HNZQVIPS.js";
|
|
39
39
|
import {
|
|
40
40
|
CitationStates,
|
|
41
41
|
RunKinds,
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
effectiveDomains,
|
|
46
46
|
redactLogString,
|
|
47
47
|
redactLogValue
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
49
49
|
|
|
50
50
|
// src/intelligence-service.ts
|
|
51
51
|
import { eq, desc, asc, and, ne, or, inArray, gte, lte, isNull, sql, exists } from "drizzle-orm";
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
createApiClient,
|
|
8
8
|
runWithUsageTags
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LEG7F3DN.js";
|
|
10
10
|
import {
|
|
11
11
|
canonryMcpTools,
|
|
12
12
|
mcpOutputSchema,
|
|
13
13
|
toolOperationAccess
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-H22RCHYH.js";
|
|
15
15
|
import {
|
|
16
16
|
PACKAGE_VERSION
|
|
17
17
|
} from "./chunk-AOJU5LKX.js";
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
isReadOnlyKey,
|
|
25
25
|
restrictedWriteScopes,
|
|
26
26
|
upgradeCaveatFor
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
28
28
|
|
|
29
29
|
// src/mcp/server.ts
|
|
30
30
|
import { randomUUID } from "crypto";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
siteCrawlGraphNodes,
|
|
6
6
|
siteCrawlPages,
|
|
7
7
|
siteCrawlSnapshots
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HNZQVIPS.js";
|
|
9
9
|
import {
|
|
10
10
|
SITE_CRAWL_GRAPH_MAX_EDGES,
|
|
11
11
|
SITE_CRAWL_GRAPH_MAX_NODES,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
factorStatusFromDistribution,
|
|
16
16
|
factorStatusFromScore,
|
|
17
17
|
roundPreservingTotal
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
19
19
|
|
|
20
20
|
// src/site-audit-factors.ts
|
|
21
21
|
function recordedSharePct(factor) {
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
loadConfig,
|
|
6
6
|
loadConfigRaw,
|
|
7
7
|
saveConfigPatch
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-A57HYHJ3.js";
|
|
9
9
|
import {
|
|
10
10
|
CANONRY_NPM_PACKAGE_URL,
|
|
11
11
|
compareSemver,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
updateCheckEnvOptOut,
|
|
19
19
|
upgradeCaveatFor,
|
|
20
20
|
upgradeCommandFor
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
22
22
|
|
|
23
23
|
// src/runtime-context.ts
|
|
24
24
|
function cliRuntimeContext(env = process.env, stdio = process) {
|
|
@@ -7,27 +7,27 @@ import {
|
|
|
7
7
|
reparseStoredResult4,
|
|
8
8
|
reparseStoredResult5,
|
|
9
9
|
resolveStoredApiResponse
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UYPBR3SF.js";
|
|
11
11
|
import {
|
|
12
12
|
loadConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-A57HYHJ3.js";
|
|
14
14
|
import {
|
|
15
15
|
isMachineFormat
|
|
16
16
|
} from "./chunk-HGMYEDAQ.js";
|
|
17
17
|
import {
|
|
18
18
|
determineCitationState
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-EHTSCLEL.js";
|
|
20
20
|
import {
|
|
21
21
|
backfillProjectAnswerMentions,
|
|
22
22
|
competitorIdentityColumns,
|
|
23
23
|
createRunCompetitorResolver,
|
|
24
24
|
readMarketCompetitorNames,
|
|
25
25
|
refreshSnapshotMentionIdentity
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-22ABGRB7.js";
|
|
27
27
|
import {
|
|
28
28
|
classifyAiUserFetch,
|
|
29
29
|
classifyCrawler
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-SG2OPR7J.js";
|
|
31
31
|
import {
|
|
32
32
|
aiUserFetchEventsHourly,
|
|
33
33
|
auditLog,
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
querySnapshots,
|
|
43
43
|
rawEventSamples,
|
|
44
44
|
runs
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-HNZQVIPS.js";
|
|
46
46
|
import {
|
|
47
47
|
ProviderNames,
|
|
48
48
|
RetrievalContracts,
|
|
@@ -59,7 +59,7 @@ import {
|
|
|
59
59
|
extractRecommendedCompetitors,
|
|
60
60
|
normalizeUrlPath,
|
|
61
61
|
openRouterRouteModel
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
63
63
|
|
|
64
64
|
// src/commands/backfill.ts
|
|
65
65
|
import { setImmediate as yieldToEventLoop } from "timers/promises";
|
|
@@ -437,7 +437,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
|
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
439
|
async function backfillInsightsCommand(project, opts) {
|
|
440
|
-
const { IntelligenceService } = await import("./intelligence-service-
|
|
440
|
+
const { IntelligenceService } = await import("./intelligence-service-MWTHUE7S.js");
|
|
441
441
|
const config = loadConfig();
|
|
442
442
|
const db = createClient(config.database);
|
|
443
443
|
migrate(db);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
answerServiceAdapters,
|
|
3
3
|
answerServiceDescriptors
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OIHJJHJR.js";
|
|
5
5
|
import {
|
|
6
6
|
AeroLlmUsageFeatures,
|
|
7
7
|
aeroTurnStatus,
|
|
@@ -27,14 +27,14 @@ import {
|
|
|
27
27
|
resolveConfiguredAgentProvider,
|
|
28
28
|
resolveSessionProviderAndModel,
|
|
29
29
|
setAeroSystemPrompt
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-V3QMOGZE.js";
|
|
31
31
|
import {
|
|
32
32
|
AeroToolProfiles,
|
|
33
33
|
AeroToolScopes,
|
|
34
34
|
buildAeroStateTools,
|
|
35
35
|
isAeroToolProfile,
|
|
36
36
|
truncateToolResult
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-JM6OFCLX.js";
|
|
38
38
|
import {
|
|
39
39
|
getGoogleAuthConfig,
|
|
40
40
|
getGoogleConnection,
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
removeCloudflareTrafficConnection,
|
|
54
54
|
removeCloudflareTrafficConnectionBySourceId,
|
|
55
55
|
upsertCloudflareTrafficConnection
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-UBP3AAKA.js";
|
|
57
57
|
import {
|
|
58
58
|
claudeAdapter,
|
|
59
59
|
embedQueries,
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
openaiAdapter,
|
|
65
65
|
openrouterAdapter,
|
|
66
66
|
perplexityAdapter
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-UYPBR3SF.js";
|
|
68
68
|
import {
|
|
69
69
|
classifyUsageSurface,
|
|
70
70
|
createApiUsageTelemetry,
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
startOutcomeTimer,
|
|
77
77
|
trackFeatureCompleted,
|
|
78
78
|
trackInstallState
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-CWMJQ2JV.js";
|
|
80
80
|
import {
|
|
81
81
|
isLoopbackBindHost
|
|
82
82
|
} from "./chunk-TSENU4GG.js";
|
|
@@ -84,7 +84,7 @@ import {
|
|
|
84
84
|
isApiProviderRegistrable,
|
|
85
85
|
isCdpProviderRegistrable,
|
|
86
86
|
registeredProviderNames
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-GRWZC3GQ.js";
|
|
88
88
|
import {
|
|
89
89
|
checkLatestVersionForServer,
|
|
90
90
|
getOrCreateAnonymousId,
|
|
@@ -95,17 +95,17 @@ import {
|
|
|
95
95
|
recordDashboardEvent,
|
|
96
96
|
setTelemetryPreference,
|
|
97
97
|
trackEvent
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-67262NJL.js";
|
|
99
99
|
import {
|
|
100
100
|
createCanonryMcpServer
|
|
101
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-5VAC4KQ2.js";
|
|
102
102
|
import {
|
|
103
103
|
CANONRY_MCP_TIERS,
|
|
104
104
|
CANONRY_MCP_TOOLKIT_NAMES
|
|
105
105
|
} from "./chunk-NCIPNVD6.js";
|
|
106
106
|
import {
|
|
107
107
|
ApiClient
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-LEG7F3DN.js";
|
|
109
109
|
import {
|
|
110
110
|
AGENT_PROVIDERS,
|
|
111
111
|
adapterSupportsBatch,
|
|
@@ -136,21 +136,21 @@ import {
|
|
|
136
136
|
saveConfigPatch,
|
|
137
137
|
sentimentInstallReadiness,
|
|
138
138
|
updateSharedProviderExecutionGate
|
|
139
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-A57HYHJ3.js";
|
|
140
140
|
import {
|
|
141
141
|
getBundledSkillSnapshots
|
|
142
|
-
} from "./chunk-
|
|
142
|
+
} from "./chunk-PH7RTAWW.js";
|
|
143
143
|
import {
|
|
144
144
|
computeFactorAverages,
|
|
145
145
|
deleteSiteCrawlGraphLayout,
|
|
146
146
|
persistSiteCrawlGraphLayout,
|
|
147
147
|
prepareSiteCrawlGraphLayout,
|
|
148
148
|
recordedSharePct
|
|
149
|
-
} from "./chunk-
|
|
149
|
+
} from "./chunk-5YC6IU44.js";
|
|
150
150
|
import {
|
|
151
151
|
CanonryMcpToolNames,
|
|
152
152
|
canonryMcpTools
|
|
153
|
-
} from "./chunk-
|
|
153
|
+
} from "./chunk-H22RCHYH.js";
|
|
154
154
|
import {
|
|
155
155
|
PACKAGE_VERSION
|
|
156
156
|
} from "./chunk-AOJU5LKX.js";
|
|
@@ -162,11 +162,11 @@ import {
|
|
|
162
162
|
addLogListener,
|
|
163
163
|
createFastifyLogger,
|
|
164
164
|
createLogger
|
|
165
|
-
} from "./chunk-
|
|
165
|
+
} from "./chunk-5GMYD7UZ.js";
|
|
166
166
|
import {
|
|
167
167
|
computeCitedCompetitorDomains,
|
|
168
168
|
determineCitationState
|
|
169
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-EHTSCLEL.js";
|
|
170
170
|
import {
|
|
171
171
|
BingApiError,
|
|
172
172
|
CC_CACHE_DIR,
|
|
@@ -285,7 +285,7 @@ import {
|
|
|
285
285
|
webhookResponseReason,
|
|
286
286
|
webhookTargetRefusalReason,
|
|
287
287
|
writeAuditLog
|
|
288
|
-
} from "./chunk-
|
|
288
|
+
} from "./chunk-22ABGRB7.js";
|
|
289
289
|
import {
|
|
290
290
|
OperationalLogStore,
|
|
291
291
|
SentimentIdempotencyConflict,
|
|
@@ -371,7 +371,7 @@ import {
|
|
|
371
371
|
siteLivenessState,
|
|
372
372
|
trafficSources,
|
|
373
373
|
usageCounters
|
|
374
|
-
} from "./chunk-
|
|
374
|
+
} from "./chunk-HNZQVIPS.js";
|
|
375
375
|
import {
|
|
376
376
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
377
377
|
AI_ENGINE_DOMAINS,
|
|
@@ -401,6 +401,7 @@ import {
|
|
|
401
401
|
GoogleAdsSnapshotKinds,
|
|
402
402
|
GoogleMarketingProviders,
|
|
403
403
|
GtmSnapshotKinds,
|
|
404
|
+
HEALTH_NO_LONGER_URGENT,
|
|
404
405
|
HostedMcpStatuses,
|
|
405
406
|
HostedMcpUnavailableReasons,
|
|
406
407
|
INTEGRATION_NAMES,
|
|
@@ -616,7 +617,7 @@ import {
|
|
|
616
617
|
winnabilityClassLabel,
|
|
617
618
|
withRetry,
|
|
618
619
|
withSkippedProviders
|
|
619
|
-
} from "./chunk-
|
|
620
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
620
621
|
|
|
621
622
|
// src/google-marketing-runtime.ts
|
|
622
623
|
import crypto2 from "crypto";
|
|
@@ -5657,7 +5658,7 @@ function nonBlank(value) {
|
|
|
5657
5658
|
return trimmed ? trimmed : void 0;
|
|
5658
5659
|
}
|
|
5659
5660
|
function resolveBuildCommit(env = process.env) {
|
|
5660
|
-
const embedded = true ? "
|
|
5661
|
+
const embedded = true ? "bf661eb5ab6eb02b455254b13b5cc8d0d8ca6536" : void 0;
|
|
5661
5662
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
5662
5663
|
}
|
|
5663
5664
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -12995,6 +12996,23 @@ var SLOT_FIRED = { status: OutcomeStatuses.succeeded };
|
|
|
12995
12996
|
var slotSkipped = (reasonCode) => ({ status: OutcomeStatuses.skipped, reasonCode });
|
|
12996
12997
|
var slotFailed = (reasonCode) => ({ status: OutcomeStatuses.failed, reasonCode });
|
|
12997
12998
|
var DEFAULT_HEALTH_CRON = "0 */6 * * *";
|
|
12999
|
+
var SCHEDULE_SPREAD_MS = 12e4;
|
|
13000
|
+
var UNSPREAD_KINDS = /* @__PURE__ */ new Set([SchedulableRunKinds["answer-visibility"]]);
|
|
13001
|
+
function scheduleSpreadMs(projectId, kind, spreadMs = SCHEDULE_SPREAD_MS) {
|
|
13002
|
+
if (spreadMs <= 0) return 0;
|
|
13003
|
+
return crypto20.createHash("sha256").update(`${projectId}:${kind}`).digest().readUInt32BE(0) % spreadMs;
|
|
13004
|
+
}
|
|
13005
|
+
function shortestCronGapMs(cronExpr, timezone, from = /* @__PURE__ */ new Date()) {
|
|
13006
|
+
let previous = nextRunFromCron(cronExpr, timezone, from);
|
|
13007
|
+
let shortest = Number.POSITIVE_INFINITY;
|
|
13008
|
+
for (let i = 0; previous && i < 8; i++) {
|
|
13009
|
+
const next = nextRunFromCron(cronExpr, timezone, new Date(Date.parse(previous) + 1e3));
|
|
13010
|
+
if (!next) break;
|
|
13011
|
+
shortest = Math.min(shortest, Date.parse(next) - Date.parse(previous));
|
|
13012
|
+
previous = next;
|
|
13013
|
+
}
|
|
13014
|
+
return Number.isFinite(shortest) ? shortest : null;
|
|
13015
|
+
}
|
|
12998
13016
|
function ensureDefaultHealthSchedule(db, projectId, now = (/* @__PURE__ */ new Date()).toISOString()) {
|
|
12999
13017
|
const result = db.insert(schedules).values({
|
|
13000
13018
|
id: crypto20.randomUUID(),
|
|
@@ -13023,9 +13041,14 @@ var Scheduler = class {
|
|
|
13023
13041
|
tasks = /* @__PURE__ */ new Map();
|
|
13024
13042
|
/** A cron can fire every minute, so slot outcomes are sampled per status and reason. */
|
|
13025
13043
|
sampleSlot = createOutcomeSampler({ burst: 5, refillMs: 30 * 6e4 });
|
|
13026
|
-
|
|
13044
|
+
/** How far background work may start after its cron minute; 0 starts it on the minute. */
|
|
13045
|
+
spreadMs;
|
|
13046
|
+
/** Spread starts waiting to fire, by task key, so stopping a task cancels its start too. */
|
|
13047
|
+
spreadTimers = /* @__PURE__ */ new Map();
|
|
13048
|
+
constructor(db, callbacks, options = {}) {
|
|
13027
13049
|
this.db = db;
|
|
13028
13050
|
this.callbacks = callbacks;
|
|
13051
|
+
this.spreadMs = options.spreadMs ?? 0;
|
|
13029
13052
|
}
|
|
13030
13053
|
/**
|
|
13031
13054
|
* Give every project a health schedule if it has never had one.
|
|
@@ -13147,6 +13170,11 @@ var Scheduler = class {
|
|
|
13147
13170
|
stopTask(key, task, verb) {
|
|
13148
13171
|
void task.stop();
|
|
13149
13172
|
void task.destroy();
|
|
13173
|
+
const pending = this.spreadTimers.get(key);
|
|
13174
|
+
if (pending) {
|
|
13175
|
+
clearTimeout(pending);
|
|
13176
|
+
this.spreadTimers.delete(key);
|
|
13177
|
+
}
|
|
13150
13178
|
log17.info(`task.${verb.toLowerCase()}`, { key });
|
|
13151
13179
|
}
|
|
13152
13180
|
/** Runtime timing writes must not restore a version already issued to a settings caller. */
|
|
@@ -13176,12 +13204,27 @@ var Scheduler = class {
|
|
|
13176
13204
|
log17.error("cron.invalid", { projectId, kind, cronExpr });
|
|
13177
13205
|
return false;
|
|
13178
13206
|
}
|
|
13207
|
+
const key = taskKey(projectId, kind);
|
|
13208
|
+
const gapMs = this.spreadMs > 0 && !UNSPREAD_KINDS.has(kind) ? shortestCronGapMs(cronExpr, timezone) : null;
|
|
13209
|
+
const spreadMs = gapMs === null ? 0 : scheduleSpreadMs(projectId, kind, Math.min(this.spreadMs, Math.floor(gapMs / 2)));
|
|
13179
13210
|
const task = cron.schedule(cronExpr, () => {
|
|
13180
|
-
|
|
13211
|
+
if (spreadMs === 0) {
|
|
13212
|
+
this.triggerRun(scheduleId, projectId, kind);
|
|
13213
|
+
return;
|
|
13214
|
+
}
|
|
13215
|
+
const overdue = this.spreadTimers.get(key);
|
|
13216
|
+
if (overdue) {
|
|
13217
|
+
clearTimeout(overdue);
|
|
13218
|
+
this.triggerRun(scheduleId, projectId, kind);
|
|
13219
|
+
}
|
|
13220
|
+
this.spreadTimers.set(key, setTimeout(() => {
|
|
13221
|
+
this.spreadTimers.delete(key);
|
|
13222
|
+
this.triggerRun(scheduleId, projectId, kind);
|
|
13223
|
+
}, spreadMs));
|
|
13181
13224
|
}, {
|
|
13182
13225
|
timezone
|
|
13183
13226
|
});
|
|
13184
|
-
this.tasks.set(
|
|
13227
|
+
this.tasks.set(key, task);
|
|
13185
13228
|
if (!options.preserveNextRunAt || !schedule.nextRunAt) {
|
|
13186
13229
|
this.updateScheduleTiming(scheduleId, {
|
|
13187
13230
|
nextRunAt: nextRunFromCron(cronExpr, timezone)
|
|
@@ -14446,7 +14489,7 @@ var Notifier = class {
|
|
|
14446
14489
|
const urgentItems = [];
|
|
14447
14490
|
for (const c of failing) {
|
|
14448
14491
|
if (c.urgent !== true) continue;
|
|
14449
|
-
urgentItems.push({ id: c.id, code: c.code, rank: rank(c.status), status: c.status, summary: c.summary, remediation: c.remediation ?? null });
|
|
14492
|
+
urgentItems.push({ id: c.id, code: c.code, rank: rank(c.status), status: c.status, summary: c.summary, remediation: c.remediation ?? null, ...c.alert ? { alert: c.alert } : {} });
|
|
14450
14493
|
}
|
|
14451
14494
|
for (const c of healthChecks) {
|
|
14452
14495
|
const supersededCode = c.details?.supersededCode;
|
|
@@ -14454,7 +14497,7 @@ var Notifier = class {
|
|
|
14454
14497
|
const causeIds = Array.isArray(c.details?.supersededBy) ? c.details.supersededBy : [];
|
|
14455
14498
|
const cause = failing.find((f) => causeIds.includes(f.id));
|
|
14456
14499
|
const status2 = c.details?.supersededStatus === "warn" ? "warn" : "fail";
|
|
14457
|
-
urgentItems.push({ id: c.id, code: supersededCode, rank: rank(status2), status: status2, summary: cause?.summary ?? c.summary, remediation: cause?.remediation ?? null });
|
|
14500
|
+
urgentItems.push({ id: c.id, code: supersededCode, rank: rank(status2), status: status2, summary: cause?.summary ?? c.summary, remediation: cause?.remediation ?? null, ...cause?.alert ? { alert: cause.alert } : {} });
|
|
14458
14501
|
}
|
|
14459
14502
|
urgentItems.sort((a, b) => b.rank - a.rank);
|
|
14460
14503
|
const urgentById = new Map(urgentItems.map((item) => [item.id, item]));
|
|
@@ -14517,7 +14560,7 @@ var Notifier = class {
|
|
|
14517
14560
|
const previousUrgent = toldRank === 0 ? "ok" : toldRank === 2 ? "fail" : "warn";
|
|
14518
14561
|
const lead = urgentNew[0];
|
|
14519
14562
|
const onlyCleared = urgentCleared.length === 1 ? graded.find((c) => c.id === urgentCleared[0].id) : void 0;
|
|
14520
|
-
const resolvedSummary = onlyCleared ? onlyCleared.status === "ok" ? onlyCleared.summary :
|
|
14563
|
+
const resolvedSummary = onlyCleared ? onlyCleared.status === "ok" ? onlyCleared.summary : `${HEALTH_NO_LONGER_URGENT} ${onlyCleared.summary}` : `${urgentCleared.length} urgent problems are resolved.`;
|
|
14521
14564
|
const urgentHealth = urgentEvent === "health.urgent" && lead ? {
|
|
14522
14565
|
status: lead.status,
|
|
14523
14566
|
code: lead.code,
|
|
@@ -14525,7 +14568,7 @@ var Notifier = class {
|
|
|
14525
14568
|
remediation: lead.remediation,
|
|
14526
14569
|
checkedAt: now,
|
|
14527
14570
|
previousStatus: previousUrgent,
|
|
14528
|
-
failing: urgentItems.map((item) => ({ id: item.id, status: item.status, code: item.code, summary: item.summary })),
|
|
14571
|
+
failing: urgentItems.map((item) => ({ id: item.id, status: item.status, code: item.code, summary: item.summary, remediation: item.remediation, ...item.alert ? { alert: item.alert } : {} })),
|
|
14529
14572
|
added: breachCodes(urgentNew),
|
|
14530
14573
|
...urgentCleared.length > 0 ? { cleared: breachCodes(urgentCleared) } : {}
|
|
14531
14574
|
} : {
|
|
@@ -14583,7 +14626,7 @@ var Notifier = class {
|
|
|
14583
14626
|
remediation: worst?.remediation ?? null,
|
|
14584
14627
|
checkedAt: now,
|
|
14585
14628
|
previousStatus,
|
|
14586
|
-
failing: failing.map((c) => ({ id: c.id, status: c.status, code: c.code, summary: c.summary })),
|
|
14629
|
+
failing: failing.map((c) => ({ id: c.id, status: c.status, code: c.code, summary: c.summary, remediation: c.remediation ?? null, ...c.alert ? { alert: c.alert } : {} })),
|
|
14587
14630
|
...added ? { added } : {},
|
|
14588
14631
|
...cleared ? { cleared } : {}
|
|
14589
14632
|
},
|
|
@@ -19680,6 +19723,10 @@ async function createServer(opts) {
|
|
|
19680
19723
|
schedulerClient.trafficSync(projectName, sourceId).finally(() => {
|
|
19681
19724
|
scheduledSyncClaims.delete(syncRunClaimKey(projectName, RunKinds["traffic-sync"], sourceId));
|
|
19682
19725
|
}).catch((err) => {
|
|
19726
|
+
if (err instanceof CliError && err.code === "OPERATION_IN_PROGRESS") {
|
|
19727
|
+
app.log.info({ projectName, sourceId }, "Scheduled traffic sync skipped: the source is busy");
|
|
19728
|
+
return;
|
|
19729
|
+
}
|
|
19683
19730
|
app.log.error(
|
|
19684
19731
|
{
|
|
19685
19732
|
projectName,
|
|
@@ -19730,7 +19777,7 @@ async function createServer(opts) {
|
|
|
19730
19777
|
onSiteAuditRequested: (runId, projectId, auditOpts) => {
|
|
19731
19778
|
runSiteAudit(runId, projectId, auditOpts);
|
|
19732
19779
|
}
|
|
19733
|
-
});
|
|
19780
|
+
}, { spreadMs: opts.scheduleSpreadMs ?? SCHEDULE_SPREAD_MS });
|
|
19734
19781
|
const providerSummary = providerSummaries(registry, opts.config);
|
|
19735
19782
|
const googleSettingsSummary = {
|
|
19736
19783
|
configured: Boolean(
|
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
bucketCliCommandDuration,
|
|
3
3
|
isTelemetryEnabled,
|
|
4
4
|
trackEvent
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-67262NJL.js";
|
|
6
6
|
import {
|
|
7
7
|
getConfigDir
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-A57HYHJ3.js";
|
|
9
9
|
import {
|
|
10
10
|
currentOutcomeAttribution
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-QNFX7ZCT.js";
|
|
12
12
|
import {
|
|
13
13
|
AGENT_NONE,
|
|
14
14
|
OutcomeSurfaces,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
integrationConnectionPropertiesSchema,
|
|
20
20
|
normalizeAgentSlug,
|
|
21
21
|
usageSurfaceSchema
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
23
23
|
|
|
24
24
|
// src/outcome-telemetry.ts
|
|
25
25
|
import fs from "fs";
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
dedupeGscSitemapUrls,
|
|
3
3
|
resolveDiscoveredGscSitemapUrls,
|
|
4
4
|
submitGscSitemapBatches
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SN5A767O.js";
|
|
6
6
|
import {
|
|
7
7
|
measurementDraftOperationSchema,
|
|
8
8
|
runMeasurementDraftAction
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-NOQCIXM6.js";
|
|
10
10
|
import {
|
|
11
11
|
CliError
|
|
12
12
|
} from "./chunk-HGMYEDAQ.js";
|
|
@@ -173,7 +173,7 @@ import {
|
|
|
173
173
|
trafficSeriesGranularitySchema,
|
|
174
174
|
visibilityCompareSelectionSchema,
|
|
175
175
|
visibilityReportRequestSchema
|
|
176
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
177
177
|
|
|
178
178
|
// src/mcp/tool-registry.ts
|
|
179
179
|
import { z as z2 } from "zod";
|
|
@@ -861,10 +861,15 @@ var trafficBackfillInputSchema = z2.object({
|
|
|
861
861
|
sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
|
|
862
862
|
days: z2.number().int().positive().max(90).optional().describe("Lookback window in days. Default 30, capped by the adapter at 90d. Generic WordPress replace backfill is unavailable because retained coverage is unproven.")
|
|
863
863
|
});
|
|
864
|
+
var trafficDeclareGapInputSchema = z2.object({
|
|
865
|
+
project: projectNameSchema,
|
|
866
|
+
sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
|
|
867
|
+
skippedThroughAt: z2.string().min(1).describe("The source's current skippedThroughAt, exactly as canonry_traffic_sources_list returned it. A newer skip is refused, never cleared.")
|
|
868
|
+
});
|
|
864
869
|
var trafficResetInputSchema = z2.object({
|
|
865
870
|
project: projectNameSchema,
|
|
866
871
|
sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
|
|
867
|
-
advanceToNow: z2.literal(true).describe("Must be `true`. Explicit gate against accidental resets. Advances lastSyncedAt to NOW and clears the source's error state; WordPress also clears its continuation state and records an unrecovered span
|
|
872
|
+
advanceToNow: z2.literal(true).describe("Must be `true`. Explicit gate against accidental resets. Advances lastSyncedAt to NOW and clears the source's error state; WordPress also clears its continuation state and records an unrecovered span; once it cannot be recovered, record it with canonry_traffic_declare_gap.")
|
|
868
873
|
});
|
|
869
874
|
var trafficEventsInputSchema = z2.object({
|
|
870
875
|
project: projectNameSchema,
|
|
@@ -2934,7 +2939,7 @@ var rawCanonryMcpTools = [
|
|
|
2934
2939
|
defineTool({
|
|
2935
2940
|
name: "canonry_traffic_backfill",
|
|
2936
2941
|
title: "Backfill traffic source",
|
|
2937
|
-
description: 'Async one-shot reclassification for Cloud Run or Vercel traffic. It replaces the selected window\u2019s rollups with a fresh bounded pull and current classifier output. WordPress generic replace backfill is unavailable because the endpoint cannot prove retained coverage;
|
|
2942
|
+
description: 'Async one-shot reclassification for Cloud Run or Vercel traffic. It replaces the selected window\u2019s rollups with a fresh bounded pull and current classifier output. WordPress generic replace backfill is unavailable because the endpoint cannot prove retained coverage; record a span that cannot be recovered with canonry_traffic_declare_gap. Returns `{ runId, status: "running" }`; poll canonry_run_get for completion.',
|
|
2938
2943
|
access: "write",
|
|
2939
2944
|
tier: "traffic",
|
|
2940
2945
|
inputSchema: trafficBackfillInputSchema,
|
|
@@ -2945,7 +2950,7 @@ var rawCanonryMcpTools = [
|
|
|
2945
2950
|
defineTool({
|
|
2946
2951
|
name: "canonry_traffic_reset",
|
|
2947
2952
|
title: "Advance traffic source lastSyncedAt to NOW",
|
|
2948
|
-
description: "Operator recovery for a stuck traffic source. Advances `lastSyncedAt` to NOW, sets `status` back to `connected`, and clears `last_error`. A WordPress reset also clears its continuation state and records an unrecovered span so its next bounded drain cannot combine an old cursor with a new window. That stops replay but is not historical repair. Generic WordPress replace-mode backfill is unavailable because retained coverage is unproven;
|
|
2953
|
+
description: "Operator recovery for a stuck traffic source. Advances `lastSyncedAt` to NOW, sets `status` back to `connected`, and clears `last_error`. A WordPress reset also clears its continuation state and records an unrecovered span so its next bounded drain cannot combine an old cursor with a new window. That stops replay but is not historical repair. Generic WordPress replace-mode backfill is unavailable because retained coverage is unproven; once a span cannot be recovered, record it with canonry_traffic_declare_gap. Archived sources are rejected; reconnect them with the appropriate canonry_traffic_connect_* tool.",
|
|
2949
2954
|
access: "write",
|
|
2950
2955
|
tier: "traffic",
|
|
2951
2956
|
inputSchema: trafficResetInputSchema,
|
|
@@ -2953,6 +2958,17 @@ var rawCanonryMcpTools = [
|
|
|
2953
2958
|
openApiOperations: ["POST /api/v1/projects/{name}/traffic/sources/{id}/reset"],
|
|
2954
2959
|
handler: (client, input) => client.trafficReset(input.project, input.sourceId)
|
|
2955
2960
|
}),
|
|
2961
|
+
defineTool({
|
|
2962
|
+
name: "canonry_traffic_declare_gap",
|
|
2963
|
+
title: "Record a traffic gap as unrecoverable",
|
|
2964
|
+
description: "Record a traffic source's unrecovered skip (its skippedThroughAt) as data that cannot be recovered, and clear it so the traffic.sync-lag.unrecovered-skip doctor check passes. Rollups are untouched; an audit entry keeps the span. For WordPress, whose plugin feed cannot prove a historical repair, or any source whose provider no longer retains the span; backfill a recoverable gap instead. This hides a data-loss warning, so declare only after the person running the project agrees.",
|
|
2965
|
+
access: "write",
|
|
2966
|
+
tier: "traffic",
|
|
2967
|
+
inputSchema: trafficDeclareGapInputSchema,
|
|
2968
|
+
annotations: writeAnnotations({ idempotentHint: false, destructiveHint: true }),
|
|
2969
|
+
openApiOperations: ["POST /api/v1/projects/{name}/traffic/sources/{id}/declare-gap"],
|
|
2970
|
+
handler: (client, input) => client.trafficDeclareGap(input.project, input.sourceId, input.skippedThroughAt)
|
|
2971
|
+
}),
|
|
2956
2972
|
defineTool({
|
|
2957
2973
|
name: "canonry_snapshot",
|
|
2958
2974
|
title: "Generate a prospect snapshot",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApiClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LEG7F3DN.js";
|
|
4
4
|
import {
|
|
5
5
|
emitJsonl
|
|
6
6
|
} from "./chunk-Z7IUAJOF.js";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
formatMicros,
|
|
20
20
|
formatRunErrorOneLine,
|
|
21
21
|
resolveProviderInput
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-TKLE2Y6H.js";
|
|
23
23
|
|
|
24
24
|
// src/commands/run.ts
|
|
25
25
|
function getClient() {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registeredProviderNames
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GRWZC3GQ.js";
|
|
4
4
|
import {
|
|
5
5
|
configExists,
|
|
6
6
|
loadConfigRaw
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-A57HYHJ3.js";
|
|
8
8
|
|
|
9
9
|
// src/setup-state.ts
|
|
10
10
|
import fs from "fs";
|
|
@@ -28,7 +28,7 @@ async function buildSetupState() {
|
|
|
28
28
|
}
|
|
29
29
|
if (dbPath && fs.existsSync(dbPath)) {
|
|
30
30
|
try {
|
|
31
|
-
const { createClient, projects, queries: queriesTable } = await import("./src-
|
|
31
|
+
const { createClient, projects, queries: queriesTable } = await import("./src-CTHVFVLF.js");
|
|
32
32
|
const db = createClient(dbPath);
|
|
33
33
|
project_count = db.select({ id: projects.id }).from(projects).all().length;
|
|
34
34
|
const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
|
|
@@ -47,7 +47,7 @@ function queueServeHandoff() {
|
|
|
47
47
|
async function runPendingServeHandoff(format) {
|
|
48
48
|
if (!pendingServeHandoff) return;
|
|
49
49
|
pendingServeHandoff = false;
|
|
50
|
-
const { serveCommand } = await import("./serve-
|
|
50
|
+
const { serveCommand } = await import("./serve-VIEGFGSK.js");
|
|
51
51
|
await serveCommand(format);
|
|
52
52
|
}
|
|
53
53
|
|