@ainyc/canonry 4.57.0 → 4.59.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/SKILL.md +7 -0
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +44 -0
- package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +219 -0
- package/assets/assets/{BacklinksPage-CmeFZ8UJ.js → BacklinksPage-D_mc7c-b.js} +1 -1
- package/assets/assets/{ChartPrimitives-D7C1Cp8w.js → ChartPrimitives-BViWneKX.js} +1 -1
- package/assets/assets/{ProjectPage-Y6uCyjGb.js → ProjectPage-_hpYJAN1.js} +1 -1
- package/assets/assets/{RunRow-BntNdrgM.js → RunRow-DK69_0iD.js} +1 -1
- package/assets/assets/{RunsPage-Btp6qn10.js → RunsPage-DRu1peAA.js} +1 -1
- package/assets/assets/{SettingsPage-DkyNiU2i.js → SettingsPage-BrednApH.js} +1 -1
- package/assets/assets/{TrafficPage-CBl4Mwdc.js → TrafficPage-oFA65ZZc.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-BZzuWCn-.js → TrafficSourceDetailPage-CUzzaYFC.js} +1 -1
- package/assets/assets/{extract-error-message-De8_qAzs.js → extract-error-message-Cv4MXGtB.js} +1 -1
- package/assets/assets/{index-XUKhruAg.js → index-BrCh3uvb.js} +90 -90
- package/assets/assets/{server-traffic-bn9LSZN9.js → server-traffic-rYE-NlE-.js} +1 -1
- package/assets/assets/{trash-2-B5clF2rU.js → trash-2-BgGGPjQf.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-4KWPOVIT.js → chunk-JW6TQFU7.js} +171 -1
- package/dist/{chunk-WFVUZVJD.js → chunk-LPPW7O26.js} +1421 -1190
- package/dist/{chunk-HL6JZUEW.js → chunk-NOQ4ZE3E.js} +2158 -624
- package/dist/{chunk-6X5TF73A.js → chunk-TFBPLY77.js} +414 -1
- package/dist/cli.js +610 -458
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-NY3MAVPB.js → intelligence-service-V4SWVKEQ.js} +2 -2
- package/dist/mcp.js +10 -8
- package/package.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as d,j as a,bI as S,bC as l,bJ as v,aj as m,l as t,bK as y,bD as i,bL as T,bM as h,bN as p,bO as b}from"./index-
|
|
1
|
+
import{c as d,j as a,bI as S,bC as l,bJ as v,aj as m,l as t,bK as y,bD as i,bL as T,bM as h,bN as p,bO as b}from"./index-BrCh3uvb.js";import{u as s,r as C,n as c,o as u}from"./vendor-tanstack-Dq7p98wZ.js";const g=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],B=d("refresh-cw",g);function P(e){switch(e){case i.connected:return"positive";case i.paused:return"caution";case i.error:return"negative";case i.archived:return"neutral"}}function w(e){const r={};return e.kind&&e.kind!=="all"&&(r.kind=e.kind),e.sourceId&&(r.sourceId=e.sourceId),e.sinceMinutes!==void 0&&(r.since=new Date(Date.now()-e.sinceMinutes*6e4).toISOString()),e.limit!==void 0&&(r.limit=String(e.limit)),r}function o(e){e.invalidateQueries({predicate:r=>{const n=r.queryKey[0];return typeof n?._id=="string"&&n._id.startsWith("getApiV1ProjectsByNameTraffic")}})}function k(e){return s({...S({client:t,path:{name:e??""}}),enabled:!!e,staleTime:a})}function F(e){return s({...b({client:t,path:{name:e??""}}),enabled:!!e,staleTime:a})}function V(e,r){return s({...l({client:t,path:{name:e??"",id:r??""}}),enabled:!!(e&&r),staleTime:a})}function A(e,r){const n=C.useMemo(()=>w(r),[r.kind,r.sourceId,r.sinceMinutes,r.limit]);return s({...v({client:t,path:{name:e??""},query:n}),enabled:!!e,staleTime:a})}function E(e){const r=c();return u({mutationFn:n=>{if(!e)throw new Error("Project is required to connect a Cloud Run source");return p(e,n)},onSuccess:()=>{e&&o(r)}})}function I(e){const r=c();return u({mutationFn:n=>{if(!e)throw new Error("Project is required to connect a WordPress source");return T(e,n)},onSuccess:()=>{e&&o(r)}})}function N(e){const r=c();return u({mutationFn:n=>{if(!e)throw new Error("Project is required to connect a Vercel source");return h(e,n)},onSuccess:()=>{e&&o(r)}})}function Q(e,r){const n=c();return u({mutationFn:f=>{if(!e||!r)throw new Error("Project and sourceId are required to sync");return y(e,r,f??void 0)},onSuccess:()=>{e&&(o(n),n.invalidateQueries({queryKey:m({client:t})}))}})}export{B as R,I as a,N as b,E as c,k as d,V as e,A as f,Q as g,P as t,F as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c}from"./index-
|
|
1
|
+
import{c}from"./index-BrCh3uvb.js";const a=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],h=c("circle-check",a);const e=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],n=c("circle-question-mark",e);const o=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],s=c("download",o);const t=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],r=c("trash-2",t);export{h as C,s as D,r as T,n as a};
|
package/assets/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
|
|
13
13
|
<link rel="apple-touch-icon" href="./apple-touch-icon.png" />
|
|
14
14
|
<title>Canonry</title>
|
|
15
|
-
<script type="module" crossorigin src="./assets/index-
|
|
15
|
+
<script type="module" crossorigin src="./assets/index-BrCh3uvb.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-Dq7p98wZ.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="./assets/vendor-radix-B57xfQbP.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="./assets/vendor-recharts-DWvKDyBF.js">
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
effectiveDomains,
|
|
13
13
|
normalizeProjectDomain,
|
|
14
14
|
registrableDomain
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-LPPW7O26.js";
|
|
16
16
|
|
|
17
17
|
// src/intelligence-service.ts
|
|
18
18
|
import { eq, desc, asc, and, ne, or, inArray } from "drizzle-orm";
|
|
@@ -50,6 +50,11 @@ __export(schema_exports, {
|
|
|
50
50
|
gaTrafficSnapshots: () => gaTrafficSnapshots,
|
|
51
51
|
gaTrafficSummaries: () => gaTrafficSummaries,
|
|
52
52
|
gaTrafficWindowSummaries: () => gaTrafficWindowSummaries,
|
|
53
|
+
gbpDailyMetrics: () => gbpDailyMetrics,
|
|
54
|
+
gbpKeywordImpressions: () => gbpKeywordImpressions,
|
|
55
|
+
gbpLocations: () => gbpLocations,
|
|
56
|
+
gbpLodgingSnapshots: () => gbpLodgingSnapshots,
|
|
57
|
+
gbpPlaceActions: () => gbpPlaceActions,
|
|
53
58
|
googleConnections: () => googleConnections,
|
|
54
59
|
gscCoverageSnapshots: () => gscCoverageSnapshots,
|
|
55
60
|
gscSearchData: () => gscSearchData,
|
|
@@ -809,6 +814,81 @@ var migrationsTable = sqliteTable("_migrations", {
|
|
|
809
814
|
name: text("name").notNull(),
|
|
810
815
|
appliedAt: text("applied_at").notNull()
|
|
811
816
|
});
|
|
817
|
+
var gbpLocations = sqliteTable("gbp_locations", {
|
|
818
|
+
id: text("id").primaryKey(),
|
|
819
|
+
projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
|
|
820
|
+
accountName: text("account_name").notNull(),
|
|
821
|
+
locationName: text("location_name").notNull(),
|
|
822
|
+
displayName: text("display_name").notNull(),
|
|
823
|
+
primaryCategoryDisplayName: text("primary_category_display_name"),
|
|
824
|
+
storefrontAddress: text("storefront_address"),
|
|
825
|
+
websiteUri: text("website_uri"),
|
|
826
|
+
selected: integer("selected", { mode: "boolean" }).notNull().default(true),
|
|
827
|
+
syncedAt: text("synced_at"),
|
|
828
|
+
createdAt: text("created_at").notNull(),
|
|
829
|
+
updatedAt: text("updated_at").notNull()
|
|
830
|
+
}, (table) => [
|
|
831
|
+
index("idx_gbp_locations_project").on(table.projectId),
|
|
832
|
+
uniqueIndex("uniq_gbp_locations_project_location").on(table.projectId, table.locationName)
|
|
833
|
+
]);
|
|
834
|
+
var gbpDailyMetrics = sqliteTable("gbp_daily_metrics", {
|
|
835
|
+
id: text("id").primaryKey(),
|
|
836
|
+
projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
|
|
837
|
+
locationName: text("location_name").notNull(),
|
|
838
|
+
date: text("date").notNull(),
|
|
839
|
+
// YYYY-MM-DD
|
|
840
|
+
metric: text("metric").notNull(),
|
|
841
|
+
// BUSINESS_IMPRESSIONS_DESKTOP_MAPS, WEBSITE_CLICKS, …
|
|
842
|
+
value: integer("value").notNull(),
|
|
843
|
+
syncRunId: text("sync_run_id").references(() => runs.id, { onDelete: "set null" })
|
|
844
|
+
}, (table) => [
|
|
845
|
+
index("idx_gbp_daily_metrics_loc").on(table.projectId, table.locationName, table.date),
|
|
846
|
+
uniqueIndex("uniq_gbp_daily_metrics").on(table.projectId, table.locationName, table.date, table.metric)
|
|
847
|
+
]);
|
|
848
|
+
var gbpKeywordImpressions = sqliteTable("gbp_keyword_impressions", {
|
|
849
|
+
id: text("id").primaryKey(),
|
|
850
|
+
projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
|
|
851
|
+
locationName: text("location_name").notNull(),
|
|
852
|
+
periodStart: text("period_start").notNull(),
|
|
853
|
+
// YYYY-MM, inclusive
|
|
854
|
+
periodEnd: text("period_end").notNull(),
|
|
855
|
+
// YYYY-MM, inclusive
|
|
856
|
+
keyword: text("keyword").notNull(),
|
|
857
|
+
valueCount: integer("value_count"),
|
|
858
|
+
// exact impressions, or null when thresholded
|
|
859
|
+
valueThreshold: integer("value_threshold"),
|
|
860
|
+
// privacy floor, or null when exact
|
|
861
|
+
syncRunId: text("sync_run_id").references(() => runs.id, { onDelete: "set null" })
|
|
862
|
+
}, (table) => [
|
|
863
|
+
index("idx_gbp_keyword_impr_loc").on(table.projectId, table.locationName, table.periodEnd),
|
|
864
|
+
uniqueIndex("uniq_gbp_keyword_impr").on(table.projectId, table.locationName, table.periodEnd, table.keyword)
|
|
865
|
+
]);
|
|
866
|
+
var gbpPlaceActions = sqliteTable("gbp_place_actions", {
|
|
867
|
+
id: text("id").primaryKey(),
|
|
868
|
+
projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
|
|
869
|
+
locationName: text("location_name").notNull(),
|
|
870
|
+
placeActionLinkName: text("place_action_link_name").notNull(),
|
|
871
|
+
placeActionType: text("place_action_type").notNull(),
|
|
872
|
+
uri: text("uri"),
|
|
873
|
+
isPreferred: integer("is_preferred", { mode: "boolean" }).notNull().default(false),
|
|
874
|
+
providerType: text("provider_type"),
|
|
875
|
+
syncRunId: text("sync_run_id").references(() => runs.id, { onDelete: "set null" })
|
|
876
|
+
}, (table) => [
|
|
877
|
+
index("idx_gbp_place_actions_loc").on(table.projectId, table.locationName),
|
|
878
|
+
uniqueIndex("uniq_gbp_place_actions").on(table.projectId, table.placeActionLinkName)
|
|
879
|
+
]);
|
|
880
|
+
var gbpLodgingSnapshots = sqliteTable("gbp_lodging_snapshots", {
|
|
881
|
+
id: text("id").primaryKey(),
|
|
882
|
+
projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
|
|
883
|
+
locationName: text("location_name").notNull(),
|
|
884
|
+
contentHash: text("content_hash").notNull(),
|
|
885
|
+
attributes: text("attributes", { mode: "json" }).$type().notNull().default({}),
|
|
886
|
+
populatedGroupCount: integer("populated_group_count").notNull().default(0),
|
|
887
|
+
syncedAt: text("synced_at").notNull(),
|
|
888
|
+
syncRunId: text("sync_run_id").references(() => runs.id, { onDelete: "set null" })
|
|
889
|
+
}, (table) => [
|
|
890
|
+
index("idx_gbp_lodging_loc").on(table.projectId, table.locationName, table.syncedAt)
|
|
891
|
+
]);
|
|
812
892
|
|
|
813
893
|
// ../db/src/client.ts
|
|
814
894
|
function createClient(databasePath) {
|
|
@@ -2236,6 +2316,91 @@ var MIGRATION_VERSIONS = [
|
|
|
2236
2316
|
));
|
|
2237
2317
|
}
|
|
2238
2318
|
}
|
|
2319
|
+
},
|
|
2320
|
+
{
|
|
2321
|
+
version: 67,
|
|
2322
|
+
name: "gbp-locations",
|
|
2323
|
+
statements: [
|
|
2324
|
+
// Google Business Profile integration (Phase 1) — gbp_locations table
|
|
2325
|
+
// holds per-project discovered locations and their selection state.
|
|
2326
|
+
`CREATE TABLE IF NOT EXISTS gbp_locations (
|
|
2327
|
+
id TEXT PRIMARY KEY,
|
|
2328
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
2329
|
+
account_name TEXT NOT NULL,
|
|
2330
|
+
location_name TEXT NOT NULL,
|
|
2331
|
+
display_name TEXT NOT NULL,
|
|
2332
|
+
primary_category_display_name TEXT,
|
|
2333
|
+
storefront_address TEXT,
|
|
2334
|
+
website_uri TEXT,
|
|
2335
|
+
selected INTEGER NOT NULL DEFAULT 1,
|
|
2336
|
+
synced_at TEXT,
|
|
2337
|
+
created_at TEXT NOT NULL,
|
|
2338
|
+
updated_at TEXT NOT NULL
|
|
2339
|
+
)`,
|
|
2340
|
+
`CREATE INDEX IF NOT EXISTS idx_gbp_locations_project ON gbp_locations(project_id)`,
|
|
2341
|
+
`CREATE UNIQUE INDEX IF NOT EXISTS uniq_gbp_locations_project_location ON gbp_locations(project_id, location_name)`
|
|
2342
|
+
]
|
|
2343
|
+
},
|
|
2344
|
+
{
|
|
2345
|
+
version: 68,
|
|
2346
|
+
name: "gbp-performance",
|
|
2347
|
+
statements: [
|
|
2348
|
+
// GBP Phase 2 — daily performance metrics + monthly keyword impressions.
|
|
2349
|
+
`CREATE TABLE IF NOT EXISTS gbp_daily_metrics (
|
|
2350
|
+
id TEXT PRIMARY KEY,
|
|
2351
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
2352
|
+
location_name TEXT NOT NULL,
|
|
2353
|
+
date TEXT NOT NULL,
|
|
2354
|
+
metric TEXT NOT NULL,
|
|
2355
|
+
value INTEGER NOT NULL,
|
|
2356
|
+
sync_run_id TEXT REFERENCES runs(id) ON DELETE SET NULL
|
|
2357
|
+
)`,
|
|
2358
|
+
`CREATE INDEX IF NOT EXISTS idx_gbp_daily_metrics_loc ON gbp_daily_metrics(project_id, location_name, date)`,
|
|
2359
|
+
`CREATE UNIQUE INDEX IF NOT EXISTS uniq_gbp_daily_metrics ON gbp_daily_metrics(project_id, location_name, date, metric)`,
|
|
2360
|
+
`CREATE TABLE IF NOT EXISTS gbp_keyword_impressions (
|
|
2361
|
+
id TEXT PRIMARY KEY,
|
|
2362
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
2363
|
+
location_name TEXT NOT NULL,
|
|
2364
|
+
period_start TEXT NOT NULL,
|
|
2365
|
+
period_end TEXT NOT NULL,
|
|
2366
|
+
keyword TEXT NOT NULL,
|
|
2367
|
+
value_count INTEGER,
|
|
2368
|
+
value_threshold INTEGER,
|
|
2369
|
+
sync_run_id TEXT REFERENCES runs(id) ON DELETE SET NULL
|
|
2370
|
+
)`,
|
|
2371
|
+
`CREATE INDEX IF NOT EXISTS idx_gbp_keyword_impr_loc ON gbp_keyword_impressions(project_id, location_name, period_end)`,
|
|
2372
|
+
`CREATE UNIQUE INDEX IF NOT EXISTS uniq_gbp_keyword_impr ON gbp_keyword_impressions(project_id, location_name, period_end, keyword)`
|
|
2373
|
+
]
|
|
2374
|
+
},
|
|
2375
|
+
{
|
|
2376
|
+
version: 69,
|
|
2377
|
+
name: "gbp-place-actions-and-lodging",
|
|
2378
|
+
statements: [
|
|
2379
|
+
`CREATE TABLE IF NOT EXISTS gbp_place_actions (
|
|
2380
|
+
id TEXT PRIMARY KEY,
|
|
2381
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
2382
|
+
location_name TEXT NOT NULL,
|
|
2383
|
+
place_action_link_name TEXT NOT NULL,
|
|
2384
|
+
place_action_type TEXT NOT NULL,
|
|
2385
|
+
uri TEXT,
|
|
2386
|
+
is_preferred INTEGER NOT NULL DEFAULT 0,
|
|
2387
|
+
provider_type TEXT,
|
|
2388
|
+
sync_run_id TEXT REFERENCES runs(id) ON DELETE SET NULL
|
|
2389
|
+
)`,
|
|
2390
|
+
`CREATE INDEX IF NOT EXISTS idx_gbp_place_actions_loc ON gbp_place_actions(project_id, location_name)`,
|
|
2391
|
+
`CREATE UNIQUE INDEX IF NOT EXISTS uniq_gbp_place_actions ON gbp_place_actions(project_id, place_action_link_name)`,
|
|
2392
|
+
`CREATE TABLE IF NOT EXISTS gbp_lodging_snapshots (
|
|
2393
|
+
id TEXT PRIMARY KEY,
|
|
2394
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
2395
|
+
location_name TEXT NOT NULL,
|
|
2396
|
+
content_hash TEXT NOT NULL,
|
|
2397
|
+
attributes TEXT NOT NULL DEFAULT '{}',
|
|
2398
|
+
populated_group_count INTEGER NOT NULL DEFAULT 0,
|
|
2399
|
+
synced_at TEXT NOT NULL,
|
|
2400
|
+
sync_run_id TEXT REFERENCES runs(id) ON DELETE SET NULL
|
|
2401
|
+
)`,
|
|
2402
|
+
`CREATE INDEX IF NOT EXISTS idx_gbp_lodging_loc ON gbp_lodging_snapshots(project_id, location_name, synced_at)`
|
|
2403
|
+
]
|
|
2239
2404
|
}
|
|
2240
2405
|
];
|
|
2241
2406
|
function isDuplicateColumnError(err) {
|
|
@@ -4796,6 +4961,11 @@ export {
|
|
|
4796
4961
|
discoveryProbes,
|
|
4797
4962
|
contentTargetDismissals,
|
|
4798
4963
|
recommendationExplanations,
|
|
4964
|
+
gbpLocations,
|
|
4965
|
+
gbpDailyMetrics,
|
|
4966
|
+
gbpKeywordImpressions,
|
|
4967
|
+
gbpPlaceActions,
|
|
4968
|
+
gbpLodgingSnapshots,
|
|
4799
4969
|
createClient,
|
|
4800
4970
|
parseJsonColumn,
|
|
4801
4971
|
extractLegacyCredentials,
|