@canonry/canonry 7.12.0 → 7.14.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/agent-workspace/skills/canonry/references/canonry-cli.md +14 -7
- package/assets/assets/AuditHistoryPanel-gAkqWz9z.js +1 -0
- package/assets/assets/{BacklinksPage-CbRIZhu5.js → BacklinksPage-C67DtHo8.js} +1 -1
- package/assets/assets/{HistoryPage-Dfq1vK9k.js → HistoryPage-BQuW6Z6m.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-DcH0zYNN.js → MeasurementPropertyPage-B1XS6DR0.js} +1 -1
- package/assets/assets/ProjectPage-CV_7bOA7.js +8 -0
- package/assets/assets/{RunsPage-aOeJ60pX.js → RunsPage-CJYihZYC.js} +1 -1
- package/assets/assets/SettingsPage-Dd3J2DQE.js +1 -0
- package/assets/assets/{SiteHealthSection-CUOt7jeo.js → SiteHealthSection-iktyuzt2.js} +3 -3
- package/assets/assets/{TrafficPage-C0fVYizx.js → TrafficPage-CWjK7F3j.js} +2 -2
- package/assets/assets/{TrafficSourceDetailPage-LMhXbFlA.js → TrafficSourceDetailPage-D4_AXQNE.js} +1 -1
- package/assets/assets/{extract-error-message-5aHy0fsK.js → extract-error-message-Cxefvthz.js} +1 -1
- package/assets/assets/{index-BJh8cX5E.js → index-BbmiGIM_.js} +27 -27
- package/assets/assets/index-aBS1f2Bj.css +1 -0
- package/assets/assets/{react-sigma_core.esm.min-ldX35rMq.js → react-sigma_core.esm.min-DDEPa7AV.js} +1 -1
- package/assets/assets/{v2-overview-adapter-CaO9vY-l.js → v2-overview-adapter-CLxlMdb2.js} +1 -1
- package/assets/index.html +2 -2
- package/dist/{chunk-BTHEFJCI.js → chunk-4LQ4HKVK.js} +5 -5
- package/dist/{chunk-AU7OUDWR.js → chunk-A25FO3Z5.js} +64 -13
- package/dist/{chunk-GQMSJEMZ.js → chunk-EZRBFH77.js} +233 -54
- package/dist/{chunk-DXI2FTSW.js → chunk-KXHPQMBP.js} +93 -31
- package/dist/{chunk-EPSHIH63.js → chunk-LUQ5G5OO.js} +3 -3
- package/dist/{chunk-7I64KEGM.js → chunk-WHVEDCHY.js} +2 -2
- package/dist/{chunk-SM6ZZAPK.js → chunk-ZHXOR2LJ.js} +2 -2
- package/dist/cli.js +1300 -1244
- package/dist/{demo-server-WJUA4EIG.js → demo-server-SIATTXXS.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-DJRH4Z3D.js → intelligence-service-UEEVETII.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +13 -13
- package/assets/assets/AuditHistoryPanel-Bpkuj-iF.js +0 -1
- package/assets/assets/ProjectPage-enF4twWt.js +0 -8
- package/assets/assets/SettingsPage-nA0_ImoQ.js +0 -1
- package/assets/assets/index-BNeiohKS.css +0 -1
|
@@ -20,20 +20,20 @@ import {
|
|
|
20
20
|
saveConfig,
|
|
21
21
|
saveConfigPatch,
|
|
22
22
|
sentimentInstallReadiness
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-ZHXOR2LJ.js";
|
|
24
24
|
import {
|
|
25
25
|
computeFactorAverages,
|
|
26
26
|
deleteSiteCrawlGraphLayout,
|
|
27
27
|
persistSiteCrawlGraphLayout,
|
|
28
28
|
prepareSiteCrawlGraphLayout,
|
|
29
29
|
recordedSharePct
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-WHVEDCHY.js";
|
|
31
31
|
import {
|
|
32
32
|
CanonryMcpToolNames,
|
|
33
33
|
CliError,
|
|
34
34
|
PACKAGE_VERSION,
|
|
35
35
|
canonryMcpTools
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-4LQ4HKVK.js";
|
|
37
37
|
import {
|
|
38
38
|
CC_CACHE_DIR,
|
|
39
39
|
DUCKDB_SPEC,
|
|
@@ -217,7 +217,7 @@ import {
|
|
|
217
217
|
siteLivenessState,
|
|
218
218
|
toAlertView,
|
|
219
219
|
usageCounters
|
|
220
|
-
} from "./chunk-
|
|
220
|
+
} from "./chunk-EZRBFH77.js";
|
|
221
221
|
import {
|
|
222
222
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
223
223
|
AGENT_NONE,
|
|
@@ -309,7 +309,6 @@ import {
|
|
|
309
309
|
canonicalizeGtmContainerId,
|
|
310
310
|
canonicalizeGtmResourceSelection,
|
|
311
311
|
classifyProviderErrorMessage,
|
|
312
|
-
classifyProviderErrorMessages,
|
|
313
312
|
classifyTemplateLinkEdge,
|
|
314
313
|
cloudflareQueueNameSchema,
|
|
315
314
|
compareSemver,
|
|
@@ -378,6 +377,7 @@ import {
|
|
|
378
377
|
maskTelemetryAnonymousId,
|
|
379
378
|
matcherMatchesText,
|
|
380
379
|
missingDependency,
|
|
380
|
+
mostActionableProviderErrorCode,
|
|
381
381
|
nextScheduleUpdatedAt,
|
|
382
382
|
normalizeAgentSlug,
|
|
383
383
|
normalizeIdTokens,
|
|
@@ -428,8 +428,9 @@ import {
|
|
|
428
428
|
validationError,
|
|
429
429
|
visibilityReportRequestSchema,
|
|
430
430
|
winnabilityClassLabel,
|
|
431
|
-
withRetry
|
|
432
|
-
|
|
431
|
+
withRetry,
|
|
432
|
+
withSkippedProviders
|
|
433
|
+
} from "./chunk-A25FO3Z5.js";
|
|
433
434
|
|
|
434
435
|
// src/runtime-context.ts
|
|
435
436
|
function cliRuntimeContext(env = process.env, stdio = process) {
|
|
@@ -8041,7 +8042,7 @@ function nonBlank(value) {
|
|
|
8041
8042
|
return trimmed ? trimmed : void 0;
|
|
8042
8043
|
}
|
|
8043
8044
|
function resolveBuildCommit(env = process.env) {
|
|
8044
|
-
const embedded = true ? "
|
|
8045
|
+
const embedded = true ? "8eb9720cf39e4787ffa530b4083372db8c39ae8f" : void 0;
|
|
8045
8046
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
8046
8047
|
}
|
|
8047
8048
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -8123,12 +8124,17 @@ function buildSiteAuditCompletedProps(input) {
|
|
|
8123
8124
|
return props;
|
|
8124
8125
|
}
|
|
8125
8126
|
var MAX_NESTED_KEYS = 12;
|
|
8126
|
-
function buildProviderOutcomeProps(providers, providerErrors) {
|
|
8127
|
-
if (providerErrors.size === 0) return {};
|
|
8128
|
-
const
|
|
8127
|
+
function buildProviderOutcomeProps(providers, providerErrors, skippedProviders = []) {
|
|
8128
|
+
if (providerErrors.size === 0 && skippedProviders.length === 0) return {};
|
|
8129
|
+
const skipped = new Set(skippedProviders);
|
|
8130
|
+
const names = [.../* @__PURE__ */ new Set([...providers, ...providerErrors.keys(), ...skipped])].slice(0, MAX_NESTED_KEYS);
|
|
8129
8131
|
const providerOutcomes = {};
|
|
8130
8132
|
const providerHttpStatus = {};
|
|
8131
8133
|
for (const name of names) {
|
|
8134
|
+
if (skipped.has(name)) {
|
|
8135
|
+
providerOutcomes[name] = "skipped";
|
|
8136
|
+
continue;
|
|
8137
|
+
}
|
|
8132
8138
|
const message = providerErrors.get(name);
|
|
8133
8139
|
if (message === void 0) {
|
|
8134
8140
|
providerOutcomes[name] = "ok";
|
|
@@ -8140,6 +8146,20 @@ function buildProviderOutcomeProps(providers, providerErrors) {
|
|
|
8140
8146
|
}
|
|
8141
8147
|
return Object.keys(providerHttpStatus).length > 0 ? { providerOutcomes, providerHttpStatus } : { providerOutcomes };
|
|
8142
8148
|
}
|
|
8149
|
+
function buildRunRefusedProps(input) {
|
|
8150
|
+
const outcomes = Object.entries(input.providers).slice(0, MAX_NESTED_KEYS);
|
|
8151
|
+
const props = {
|
|
8152
|
+
reason: "providers_failing",
|
|
8153
|
+
providerCount: Object.keys(input.providers).length,
|
|
8154
|
+
providers: Object.keys(input.providers),
|
|
8155
|
+
providerOutcomes: Object.fromEntries(outcomes),
|
|
8156
|
+
trigger: input.trigger
|
|
8157
|
+
};
|
|
8158
|
+
const domainHash = hashDomain(input.canonicalDomain ?? null);
|
|
8159
|
+
if (domainHash) props.domainHash = domainHash;
|
|
8160
|
+
if (input.location) props.location = input.location;
|
|
8161
|
+
return props;
|
|
8162
|
+
}
|
|
8143
8163
|
function runFailureSite(providerCallStart, providerCallEnd) {
|
|
8144
8164
|
if (providerCallStart === void 0) return "setup";
|
|
8145
8165
|
return providerCallEnd === void 0 ? "provider_call" : "finalize";
|
|
@@ -8455,12 +8475,16 @@ function chunkBatchLines(lines, maxRequests, maxBytes) {
|
|
|
8455
8475
|
if (current.length > 0) chunks.push(current);
|
|
8456
8476
|
return { chunks, oversized };
|
|
8457
8477
|
}
|
|
8458
|
-
function
|
|
8459
|
-
|
|
8478
|
+
function calledProviderErrors(providerErrors, skipped) {
|
|
8479
|
+
return new Map([...providerErrors].filter(([provider]) => !(provider in skipped)));
|
|
8480
|
+
}
|
|
8481
|
+
function runOutcome(inserted, providerErrors, planShortfall, skipped) {
|
|
8482
|
+
const errors = calledProviderErrors(providerErrors, skipped);
|
|
8483
|
+
const someFailed = errors.size > 0 || planShortfall > 0 || Object.keys(skipped).length > 0;
|
|
8460
8484
|
const allFailed = inserted === 0 && someFailed;
|
|
8461
8485
|
return {
|
|
8462
8486
|
status: allFailed ? RunStatuses.failed : someFailed ? RunStatuses.partial : RunStatuses.completed,
|
|
8463
|
-
error: someFailed ? serializeRunError(buildProviderRunError(
|
|
8487
|
+
error: someFailed ? serializeRunError(withSkippedProviders(buildProviderRunError(errors), skipped)) : null
|
|
8464
8488
|
};
|
|
8465
8489
|
}
|
|
8466
8490
|
function runRecordingContext(db, input) {
|
|
@@ -8518,8 +8542,12 @@ function classifyRunAbortReason(message) {
|
|
|
8518
8542
|
return void 0;
|
|
8519
8543
|
}
|
|
8520
8544
|
var FAILURE_STREAK_LOOKBACK = 50;
|
|
8521
|
-
function classifyProviderErrors(errors) {
|
|
8522
|
-
|
|
8545
|
+
function classifyProviderErrors(errors, skipped) {
|
|
8546
|
+
const codes = [
|
|
8547
|
+
...[...errors.values()].map(classifyProviderErrorMessage),
|
|
8548
|
+
...Object.values(skipped).map((streak) => streak.code)
|
|
8549
|
+
];
|
|
8550
|
+
return codes.length > 0 ? mostActionableProviderErrorCode(codes) : void 0;
|
|
8523
8551
|
}
|
|
8524
8552
|
var JobRunner = class {
|
|
8525
8553
|
/**
|
|
@@ -8739,7 +8767,14 @@ var JobRunner = class {
|
|
|
8739
8767
|
if (activeProviders.length === 0) {
|
|
8740
8768
|
throw new Error("No providers configured. Add at least one provider API key.");
|
|
8741
8769
|
}
|
|
8742
|
-
|
|
8770
|
+
const skipped = existingRun.skippedProviders ?? {};
|
|
8771
|
+
const calledProviders = activeProviders.filter((provider) => !(provider.adapter.name in skipped));
|
|
8772
|
+
log2.info("run.dispatch", {
|
|
8773
|
+
runId,
|
|
8774
|
+
providerCount: calledProviders.length,
|
|
8775
|
+
providers: calledProviders.map((p) => p.adapter.name),
|
|
8776
|
+
...Object.keys(skipped).length > 0 ? { skippedProviders: Object.keys(skipped) } : {}
|
|
8777
|
+
});
|
|
8743
8778
|
const projectCompetitors = this.db.select().from(competitors).where(eq3(competitors.projectId, projectId)).orderBy(competitors.domain).all();
|
|
8744
8779
|
const competitorDomains = projectCompetitors.map((c) => c.domain);
|
|
8745
8780
|
recording = runRecordingContext(this.db, {
|
|
@@ -8761,7 +8796,7 @@ var JobRunner = class {
|
|
|
8761
8796
|
};
|
|
8762
8797
|
const queriesPerProvider = planExecution?.maxUnitsPerProvider ?? projectQueries.length;
|
|
8763
8798
|
const todayPeriod = getCurrentUsageDay();
|
|
8764
|
-
for (const p of
|
|
8799
|
+
for (const p of calledProviders) {
|
|
8765
8800
|
const providerScope = `${projectId}:${p.adapter.name}`;
|
|
8766
8801
|
const limit = p.config.quotaPolicy.maxRequestsPerDay;
|
|
8767
8802
|
const quota = reserveDailyQueryQuota(this.db, { scope: providerScope, period: todayPeriod, count: queriesPerProvider, limit });
|
|
@@ -8773,7 +8808,7 @@ var JobRunner = class {
|
|
|
8773
8808
|
providerReservations.set(p.adapter.name, { scope: providerScope, period: todayPeriod, reserved: queriesPerProvider });
|
|
8774
8809
|
}
|
|
8775
8810
|
const executionGates = /* @__PURE__ */ new Map();
|
|
8776
|
-
for (const provider of
|
|
8811
|
+
for (const provider of calledProviders) {
|
|
8777
8812
|
executionGates.set(
|
|
8778
8813
|
provider.adapter.name,
|
|
8779
8814
|
getSharedProviderExecutionGate(
|
|
@@ -8785,8 +8820,8 @@ var JobRunner = class {
|
|
|
8785
8820
|
}
|
|
8786
8821
|
const providerErrors = /* @__PURE__ */ new Map();
|
|
8787
8822
|
let totalSnapshotsInserted = 0;
|
|
8788
|
-
const apiProviders =
|
|
8789
|
-
const browserProviders =
|
|
8823
|
+
const apiProviders = calledProviders.filter((p) => !isBrowserProvider(p.adapter.name));
|
|
8824
|
+
const browserProviders = calledProviders.filter((p) => isBrowserProvider(p.adapter.name));
|
|
8790
8825
|
const processQueryForProvider = async (registeredProvider, q) => {
|
|
8791
8826
|
const { adapter, config } = registeredProvider;
|
|
8792
8827
|
const providerName = adapter.name;
|
|
@@ -9052,7 +9087,7 @@ var JobRunner = class {
|
|
|
9052
9087
|
for (const [provider, units] of planExecution.unitsByProvider) {
|
|
9053
9088
|
const providerName = provider;
|
|
9054
9089
|
const dispatched = providerDispatchCounts.get(providerName) ?? 0;
|
|
9055
|
-
if (dispatched >= units.length || providerErrors.has(providerName)) continue;
|
|
9090
|
+
if (dispatched >= units.length || providerErrors.has(providerName) || providerName in skipped) continue;
|
|
9056
9091
|
providerErrors.set(
|
|
9057
9092
|
providerName,
|
|
9058
9093
|
`No ${provider} provider was available to this worker, so ${units.length - dispatched} expected measurement(s) did not run.`
|
|
@@ -9077,6 +9112,7 @@ var JobRunner = class {
|
|
|
9077
9112
|
inserted: totalSnapshotsInserted,
|
|
9078
9113
|
providerErrors,
|
|
9079
9114
|
planShortfall,
|
|
9115
|
+
skippedProviders: skipped,
|
|
9080
9116
|
executionContext,
|
|
9081
9117
|
startTime,
|
|
9082
9118
|
phases: buildPhases({ startTime, providerCallStart, providerCallEnd }),
|
|
@@ -9181,7 +9217,7 @@ var JobRunner = class {
|
|
|
9181
9217
|
*/
|
|
9182
9218
|
finalizeRun(input) {
|
|
9183
9219
|
const { runId, providerErrors } = input;
|
|
9184
|
-
const outcome = runOutcome(input.inserted, providerErrors, input.planShortfall);
|
|
9220
|
+
const outcome = runOutcome(input.inserted, providerErrors, input.planShortfall, input.skippedProviders ?? {});
|
|
9185
9221
|
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
9186
9222
|
const won = this.db.transaction((tx) => {
|
|
9187
9223
|
const changed = tx.update(runs).set({
|
|
@@ -9207,8 +9243,10 @@ var JobRunner = class {
|
|
|
9207
9243
|
* post-run pipeline.
|
|
9208
9244
|
*/
|
|
9209
9245
|
reportFinalizedRun(input, finalStatus) {
|
|
9210
|
-
const { runId, projectId,
|
|
9211
|
-
const
|
|
9246
|
+
const { runId, projectId, executionContext } = input;
|
|
9247
|
+
const skippedProviders = input.skippedProviders ?? {};
|
|
9248
|
+
const providerErrors = calledProviderErrors(input.providerErrors, skippedProviders);
|
|
9249
|
+
const failureCode = classifyProviderErrors(providerErrors, skippedProviders);
|
|
9212
9250
|
const sampling = failureStreakSampling(finalStatus, this.priorFailureStreak(projectId, runId), runId);
|
|
9213
9251
|
if (sampling.report) {
|
|
9214
9252
|
trackEvent(
|
|
@@ -9225,7 +9263,7 @@ var JobRunner = class {
|
|
|
9225
9263
|
phases: input.phases,
|
|
9226
9264
|
location: executionContext.location
|
|
9227
9265
|
}),
|
|
9228
|
-
...buildProviderOutcomeProps(executionContext.providers, providerErrors),
|
|
9266
|
+
...buildProviderOutcomeProps(executionContext.providers, providerErrors, Object.keys(skippedProviders)),
|
|
9229
9267
|
...sampling.props
|
|
9230
9268
|
},
|
|
9231
9269
|
failureCode ? { errorCode: failureCode } : void 0
|
|
@@ -9295,15 +9333,21 @@ var JobRunner = class {
|
|
|
9295
9333
|
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
9296
9334
|
const decided = this.db.transaction((tx) => {
|
|
9297
9335
|
const txDb = tx;
|
|
9298
|
-
const run = txDb.select({
|
|
9336
|
+
const run = txDb.select({
|
|
9337
|
+
kind: runs.kind,
|
|
9338
|
+
status: runs.status,
|
|
9339
|
+
pendingProviderErrors: runs.pendingProviderErrors,
|
|
9340
|
+
skippedProviders: runs.skippedProviders
|
|
9341
|
+
}).from(runs).where(and3(eq3(runs.id, runId), eq3(runs.projectId, projectId))).get();
|
|
9299
9342
|
if (!run || run.status !== RunStatuses.running || run.pendingProviderErrors === null) return null;
|
|
9300
9343
|
const holding = txDb.select({ id: providerBatches.id }).from(providerBatches).where(and3(eq3(providerBatches.runId, runId), inArray(providerBatches.status, RUN_HOLDING_BATCH_STATUSES))).limit(1).get();
|
|
9301
9344
|
if (holding) return null;
|
|
9302
9345
|
const state = measurementRunSlotState(txDb, runId);
|
|
9303
9346
|
const inserted = txDb.select({ value: count() }).from(querySnapshots).where(eq3(querySnapshots.runId, runId)).get()?.value ?? 0;
|
|
9304
9347
|
const providerErrors = this.batchRunProviderErrors(txDb, runId, run.pendingProviderErrors, state.missing);
|
|
9348
|
+
const skippedProviders = run.skippedProviders ?? {};
|
|
9305
9349
|
const shortfall = state.missing.length + (state.readable ? 0 : 1);
|
|
9306
|
-
const outcome = runOutcome(inserted, providerErrors, shortfall);
|
|
9350
|
+
const outcome = runOutcome(inserted, providerErrors, shortfall, skippedProviders);
|
|
9307
9351
|
const won = txDb.update(runs).set({
|
|
9308
9352
|
status: outcome.status,
|
|
9309
9353
|
finishedAt,
|
|
@@ -9312,7 +9356,7 @@ var JobRunner = class {
|
|
|
9312
9356
|
}).where(and3(eq3(runs.id, runId), eq3(runs.status, RunStatuses.running), isNotNull(runs.pendingProviderErrors))).run().changes === 1;
|
|
9313
9357
|
if (!won) return null;
|
|
9314
9358
|
recordSentimentCompletion(tx, { projectId, runId, completionKey: "initial", completedAt: finishedAt });
|
|
9315
|
-
return { kind: run.kind, inserted, providerErrors, status: outcome.status };
|
|
9359
|
+
return { kind: run.kind, inserted, providerErrors, skippedProviders, status: outcome.status };
|
|
9316
9360
|
});
|
|
9317
9361
|
if (!decided) return false;
|
|
9318
9362
|
const telemetry = this.batchRunTelemetry(runId, projectId);
|
|
@@ -9323,6 +9367,7 @@ var JobRunner = class {
|
|
|
9323
9367
|
kind: decided.kind,
|
|
9324
9368
|
inserted: decided.inserted,
|
|
9325
9369
|
providerErrors: decided.providerErrors,
|
|
9370
|
+
skippedProviders: decided.skippedProviders,
|
|
9326
9371
|
executionContext: telemetry.executionContext,
|
|
9327
9372
|
startTime: telemetry.startTime,
|
|
9328
9373
|
// The sweep's phase split does not survive the wait (or a restart);
|
|
@@ -10373,7 +10418,8 @@ var JobRunner = class {
|
|
|
10373
10418
|
measurementPlanVersionId: runs.measurementPlanVersionId,
|
|
10374
10419
|
measurementManifest: runs.measurementManifest,
|
|
10375
10420
|
providerDispatchModes: runs.providerDispatchModes,
|
|
10376
|
-
pendingProviderErrors: runs.pendingProviderErrors
|
|
10421
|
+
pendingProviderErrors: runs.pendingProviderErrors,
|
|
10422
|
+
skippedProviders: runs.skippedProviders
|
|
10377
10423
|
}).from(runs).where(eq3(runs.id, runId)).get();
|
|
10378
10424
|
}
|
|
10379
10425
|
isRunCancelled(runId) {
|
|
@@ -15120,6 +15166,9 @@ var Scheduler = class {
|
|
|
15120
15166
|
runnableProviders: this.callbacks.getRunnableProviderNames?.(),
|
|
15121
15167
|
providerModels: this.callbacks.getEffectiveProviderModels?.(),
|
|
15122
15168
|
batchEligibleProviders: this.callbacks.getBatchEligibleProviderNames?.() ?? null,
|
|
15169
|
+
// A skipped slot is otherwise invisible: no run row, nothing in the
|
|
15170
|
+
// dashboard. One audit row per refusal keeps it in the history.
|
|
15171
|
+
auditRefusal: { actor: "scheduler", entityType: "schedule", entityId: currentSchedule.id },
|
|
15123
15172
|
...claimedOccurrence && recurrence && currentSchedule.nextRunAt === claimedOccurrence ? {
|
|
15124
15173
|
scheduleClaim: {
|
|
15125
15174
|
scheduleId: currentSchedule.id,
|
|
@@ -15149,6 +15198,14 @@ var Scheduler = class {
|
|
|
15149
15198
|
scheduleId: currentSchedule.id,
|
|
15150
15199
|
...queueResult.refused
|
|
15151
15200
|
});
|
|
15201
|
+
if (queueResult.refusalRecorded) {
|
|
15202
|
+
trackEvent("run.aborted", buildRunRefusedProps({
|
|
15203
|
+
providers: queueResult.refused.providers,
|
|
15204
|
+
trigger: RunTriggers.scheduled,
|
|
15205
|
+
canonicalDomain: project.canonicalDomain,
|
|
15206
|
+
location: locationLabel
|
|
15207
|
+
}), { errorCode: "PROVIDERS_FAILING" });
|
|
15208
|
+
}
|
|
15152
15209
|
if (!claimedOccurrence) this.updateScheduleTiming(currentSchedule.id, { nextRunAt });
|
|
15153
15210
|
return;
|
|
15154
15211
|
}
|
|
@@ -15169,7 +15226,12 @@ var Scheduler = class {
|
|
|
15169
15226
|
lastRunAt: now,
|
|
15170
15227
|
nextRunAt
|
|
15171
15228
|
});
|
|
15172
|
-
log16.info("run.triggered", {
|
|
15229
|
+
log16.info("run.triggered", {
|
|
15230
|
+
runId,
|
|
15231
|
+
projectName: project.name,
|
|
15232
|
+
providers: providers ?? "all",
|
|
15233
|
+
...Object.keys(queueResult.skippedProviders).length > 0 ? { skippedProviders: queueResult.skippedProviders } : {}
|
|
15234
|
+
});
|
|
15173
15235
|
this.callbacks.onRunCreated(runId, projectId, providers, resolvedLocation);
|
|
15174
15236
|
} catch (err) {
|
|
15175
15237
|
log16.error("trigger.error", { scheduleId, projectId, kind, error: describeError(err) });
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
installSkills,
|
|
5
5
|
loadConfigRaw,
|
|
6
6
|
saveConfigPatch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZHXOR2LJ.js";
|
|
8
8
|
import {
|
|
9
9
|
PACKAGE_VERSION
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4LQ4HKVK.js";
|
|
11
11
|
import {
|
|
12
12
|
SKILL_MANIFEST_FILENAME,
|
|
13
13
|
SkillsClients
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-A25FO3Z5.js";
|
|
15
15
|
|
|
16
16
|
// src/skills-autosync.ts
|
|
17
17
|
import fs from "fs";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
siteCrawlGraphNodes,
|
|
6
6
|
siteCrawlPages,
|
|
7
7
|
siteCrawlSnapshots
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-EZRBFH77.js";
|
|
9
9
|
import {
|
|
10
10
|
SITE_CRAWL_GRAPH_MAX_EDGES,
|
|
11
11
|
SITE_CRAWL_GRAPH_MAX_NODES,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
factorStatusFromDistribution,
|
|
15
15
|
factorStatusFromScore,
|
|
16
16
|
roundPreservingTotal
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-A25FO3Z5.js";
|
|
18
18
|
|
|
19
19
|
// src/site-audit-factors.ts
|
|
20
20
|
function recordedSharePct(factor) {
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
PACKAGE_VERSION,
|
|
6
6
|
canonryMcpTools,
|
|
7
7
|
isMachineFormat
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4LQ4HKVK.js";
|
|
9
9
|
import {
|
|
10
10
|
AGENT_PROVIDER_IDS,
|
|
11
11
|
CANONRY_NPM_PACKAGE_URL,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
skillsClientSchema,
|
|
51
51
|
upgradeCaveatFor,
|
|
52
52
|
upgradeCommandFor
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-A25FO3Z5.js";
|
|
54
54
|
|
|
55
55
|
// src/config.ts
|
|
56
56
|
import fs from "fs";
|