@ainyc/canonry 4.190.0 → 4.191.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/README.md +1 -1
- package/assets/agent-workspace/skills/canonry/SKILL.md +124 -216
- package/assets/assets/{AuditHistoryPanel-wWLs088f.js → AuditHistoryPanel-C2dvjYNh.js} +1 -1
- package/assets/assets/{BacklinksPage-DJEO5o9c.js → BacklinksPage-D1yPQtfF.js} +1 -1
- package/assets/assets/{HistoryPage-CV5bTBU6.js → HistoryPage-DOEa7naA.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-C7KLIAad.js → MeasurementPropertyPage-D-O8vnMS.js} +1 -1
- package/assets/assets/ProjectPage-DqTCcimz.js +8 -0
- package/assets/assets/{RunRow-C3Ryj_9u.js → RunRow-BO7lyC1C.js} +1 -1
- package/assets/assets/{RunsPage-BxoEkZu3.js → RunsPage-DHSWfTav.js} +1 -1
- package/assets/assets/{SettingsPage-D_mB1JUZ.js → SettingsPage-oiJdhiq0.js} +1 -1
- package/assets/assets/SiteHealthSection-gVdylFY-.js +4 -0
- package/assets/assets/{TrafficPage-DgsWuDtv.js → TrafficPage-YIdwRpQh.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-BLWlQ8aT.js → TrafficSourceDetailPage-B4Cop6ox.js} +1 -1
- package/assets/assets/{extract-error-message-DHIHApUf.js → extract-error-message-XavUZNf3.js} +1 -1
- package/assets/assets/{index-BjjM151x.css → index-BtTEcbcB.css} +1 -1
- package/assets/assets/{index-nb8QHq99.js → index-njfYnO22.js} +25 -25
- package/assets/assets/{react-sigma_core.esm.min-DzTADS1A.js → react-sigma_core.esm.min-V7giUpEn.js} +1 -1
- package/assets/index.html +2 -2
- package/dist/{chunk-32QBVRMN.js → chunk-2A7E5TDU.js} +209 -29
- package/dist/{chunk-ROPJUNQN.js → chunk-KBUV3HGS.js} +55 -9
- package/dist/{chunk-2II4ZMMH.js → chunk-WSD5J6O4.js} +2 -2
- package/dist/{chunk-4NIQ3GMO.js → chunk-XI6FN52S.js} +33 -13
- package/dist/{chunk-6POEZ7GT.js → chunk-ZK4FJDCH.js} +291 -114
- package/dist/cli.js +56 -5
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-WNASQFN4.js → intelligence-service-EVRWZHDG.js} +2 -2
- package/dist/mcp.js +13 -8
- package/package.json +11 -11
- package/assets/assets/ProjectPage-DIW1h05b.js +0 -8
- package/assets/assets/SiteHealthSection-Dgqtz9J2.js +0 -4
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
loadConfig,
|
|
15
15
|
loadConfigRaw,
|
|
16
16
|
saveConfigPatch
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-2A7E5TDU.js";
|
|
18
18
|
import {
|
|
19
19
|
CC_CACHE_DIR,
|
|
20
20
|
DUCKDB_SPEC,
|
|
@@ -162,7 +162,7 @@ import {
|
|
|
162
162
|
siteCrawlSnapshots,
|
|
163
163
|
toAlertView,
|
|
164
164
|
usageCounters
|
|
165
|
-
} from "./chunk-
|
|
165
|
+
} from "./chunk-ZK4FJDCH.js";
|
|
166
166
|
import {
|
|
167
167
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
168
168
|
AGENT_PROVIDER_IDS,
|
|
@@ -305,7 +305,7 @@ import {
|
|
|
305
305
|
validationError,
|
|
306
306
|
winnabilityClassLabel,
|
|
307
307
|
withRetry
|
|
308
|
-
} from "./chunk-
|
|
308
|
+
} from "./chunk-KBUV3HGS.js";
|
|
309
309
|
|
|
310
310
|
// src/telemetry.ts
|
|
311
311
|
import crypto from "crypto";
|
|
@@ -12041,7 +12041,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
12041
12041
|
return result;
|
|
12042
12042
|
}
|
|
12043
12043
|
async function backfillInsightsCommand(project, opts) {
|
|
12044
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
12044
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-EVRWZHDG.js");
|
|
12045
12045
|
const config = loadConfig();
|
|
12046
12046
|
const db = createClient(config.database);
|
|
12047
12047
|
migrate(db);
|
|
@@ -12623,7 +12623,7 @@ var RETRY_MS = 60 * 1e3;
|
|
|
12623
12623
|
var TIMEOUT_MS2 = 3e3;
|
|
12624
12624
|
function createProviderModelCatalog(registry) {
|
|
12625
12625
|
const cache = /* @__PURE__ */ new Map();
|
|
12626
|
-
|
|
12626
|
+
const read = async (name) => {
|
|
12627
12627
|
const provider = registry.get(name);
|
|
12628
12628
|
if (!provider) {
|
|
12629
12629
|
cache.delete(name);
|
|
@@ -12666,6 +12666,14 @@ function createProviderModelCatalog(registry) {
|
|
|
12666
12666
|
});
|
|
12667
12667
|
return current.pending;
|
|
12668
12668
|
};
|
|
12669
|
+
const cached = (name) => {
|
|
12670
|
+
const provider = registry.get(name);
|
|
12671
|
+
if (!provider) return [];
|
|
12672
|
+
const entry = cache.get(name);
|
|
12673
|
+
const identity = createHash("sha256").update(JSON.stringify(provider.config)).digest("hex");
|
|
12674
|
+
return (entry?.identity === identity ? entry.models : void 0) ?? provider.adapter.modelRegistry.knownModels;
|
|
12675
|
+
};
|
|
12676
|
+
return Object.assign(read, { cached });
|
|
12669
12677
|
}
|
|
12670
12678
|
|
|
12671
12679
|
// src/scheduler.ts
|
|
@@ -15714,6 +15722,7 @@ function mintSessionKey(db, scopes, userId) {
|
|
|
15714
15722
|
keyHash: hashApiKey(raw),
|
|
15715
15723
|
keyPrefix: raw.slice(0, 9),
|
|
15716
15724
|
scopes: [...scopes],
|
|
15725
|
+
delegatedUserId: userId,
|
|
15717
15726
|
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
15718
15727
|
}).run();
|
|
15719
15728
|
return { id, raw };
|
|
@@ -15777,7 +15786,7 @@ function registerMcpHttpRoutes(scope, opts) {
|
|
|
15777
15786
|
if (trimmed.slice(0, prefix.length).toLowerCase() !== prefix) return null;
|
|
15778
15787
|
return trimmed.slice(prefix.length).trim() || null;
|
|
15779
15788
|
}
|
|
15780
|
-
async function openSession(request,
|
|
15789
|
+
async function openSession(request, authorizationId, segment) {
|
|
15781
15790
|
const bearer = callerBearer(request);
|
|
15782
15791
|
if (!bearer) return null;
|
|
15783
15792
|
const scopes = request.principal?.scopes ?? request.apiKey?.scopes ?? [];
|
|
@@ -15788,13 +15797,14 @@ function registerMcpHttpRoutes(scope, opts) {
|
|
|
15788
15797
|
const client = new ApiClient(opts.selfApiUrl, sessionKey?.raw ?? bearer, { skipProbe: true });
|
|
15789
15798
|
const server = createCanonryMcpServer({
|
|
15790
15799
|
scope: segment.readOnly || isReadOnlyKey(scopes) ? "read-only" : "all",
|
|
15800
|
+
credentialScopes: scopes,
|
|
15791
15801
|
tiers: segment.tiers,
|
|
15792
15802
|
clientFactory: () => client
|
|
15793
15803
|
});
|
|
15794
15804
|
const transport = new StreamableHTTPServerTransport({
|
|
15795
15805
|
sessionIdGenerator: () => crypto26.randomUUID(),
|
|
15796
15806
|
onsessioninitialized: (id) => {
|
|
15797
|
-
sessions.set(id, { transport, close,
|
|
15807
|
+
sessions.set(id, { transport, close, authorizationId, segmentId: segment.id, lastSeenAt: now() });
|
|
15798
15808
|
}
|
|
15799
15809
|
});
|
|
15800
15810
|
async function close() {
|
|
@@ -15808,18 +15818,26 @@ function registerMcpHttpRoutes(scope, opts) {
|
|
|
15808
15818
|
if (sessionKey) revokeSessionKey(opts.db, sessionKey.id);
|
|
15809
15819
|
};
|
|
15810
15820
|
await server.connect(transport);
|
|
15811
|
-
return { transport, close,
|
|
15821
|
+
return { transport, close, authorizationId, segmentId: segment.id, lastSeenAt: now() };
|
|
15812
15822
|
}
|
|
15813
15823
|
async function handle(request, reply, segment) {
|
|
15814
|
-
const
|
|
15815
|
-
|
|
15824
|
+
const principal = request.principal ?? request.apiKey;
|
|
15825
|
+
const bearer = callerBearer(request);
|
|
15826
|
+
if (!principal || !bearer) {
|
|
15816
15827
|
await reply.status(401).send({ error: { code: "AUTH_REQUIRED", message: "Authentication required." } });
|
|
15817
15828
|
return;
|
|
15818
15829
|
}
|
|
15830
|
+
const authorizationId = hashApiKey(JSON.stringify({
|
|
15831
|
+
bearerHash: hashApiKey(bearer),
|
|
15832
|
+
kind: request.principal?.kind ?? "api-key",
|
|
15833
|
+
id: principal.id,
|
|
15834
|
+
scopes: [...new Set(principal.scopes)].sort(),
|
|
15835
|
+
projectId: principal.projectId ?? null
|
|
15836
|
+
}));
|
|
15819
15837
|
const sessionId = request.headers["mcp-session-id"];
|
|
15820
15838
|
const existing = typeof sessionId === "string" ? sessions.get(sessionId) : void 0;
|
|
15821
15839
|
if (existing) {
|
|
15822
|
-
if (existing.
|
|
15840
|
+
if (existing.authorizationId !== authorizationId || existing.segmentId !== segment.id) {
|
|
15823
15841
|
await reply.status(404).send({ error: { code: "NOT_FOUND", message: "Unknown MCP session." } });
|
|
15824
15842
|
return;
|
|
15825
15843
|
}
|
|
@@ -15831,7 +15849,7 @@ function registerMcpHttpRoutes(scope, opts) {
|
|
|
15831
15849
|
await reply.status(404).send({ error: { code: "NOT_FOUND", message: "Unknown MCP session." } });
|
|
15832
15850
|
return;
|
|
15833
15851
|
}
|
|
15834
|
-
const opened = await openSession(request,
|
|
15852
|
+
const opened = await openSession(request, authorizationId, segment);
|
|
15835
15853
|
if (!opened) {
|
|
15836
15854
|
await reply.status(401).send({ error: { code: "AUTH_REQUIRED", message: "Authentication required." } });
|
|
15837
15855
|
return;
|
|
@@ -18657,6 +18675,7 @@ async function createServer(opts) {
|
|
|
18657
18675
|
app.log.error({ runId, err }, "Research run failed");
|
|
18658
18676
|
});
|
|
18659
18677
|
};
|
|
18678
|
+
const providerModelCatalog = createProviderModelCatalog(registry);
|
|
18660
18679
|
await app.register(apiRoutes, {
|
|
18661
18680
|
db: opts.db,
|
|
18662
18681
|
routePrefix: apiPrefix,
|
|
@@ -18974,7 +18993,8 @@ async function createServer(opts) {
|
|
|
18974
18993
|
includeCanonryLocal: true
|
|
18975
18994
|
},
|
|
18976
18995
|
providerSummary,
|
|
18977
|
-
getProviderModels:
|
|
18996
|
+
getProviderModels: providerModelCatalog,
|
|
18997
|
+
getCachedProviderModels: providerModelCatalog.cached,
|
|
18978
18998
|
providerAdapters: [...API_ADAPTERS, ...BROWSER_ADAPTERS].map((a) => ({
|
|
18979
18999
|
name: a.name,
|
|
18980
19000
|
displayName: a.displayName,
|