@canonry/canonry 4.117.2 → 4.123.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 +9 -0
- package/assets/agent-workspace/skills/canonry/SKILL.md +3 -0
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +161 -2
- package/assets/assets/AuditHistoryPanel-BVQMDIhQ.js +1 -0
- package/assets/assets/{BacklinksPage-CschVQxC.js → BacklinksPage-nrHT9VMG.js} +1 -1
- package/assets/assets/ChartPrimitives-_8qLsQzI.js +1 -0
- package/assets/assets/HistoryPage-DqsKKdyy.js +1 -0
- package/assets/assets/ProjectPage-GyKoQUv_.js +7 -0
- package/assets/assets/{RunRow-ggNGlwdN.js → RunRow-BRZZcSjQ.js} +1 -1
- package/assets/assets/RunsPage-24aI8DKF.js +1 -0
- package/assets/assets/{SettingsPage-Cy9SlBJX.js → SettingsPage-BaNeTG1i.js} +1 -1
- package/assets/assets/{TrafficPage-1S2PzSHB.js → TrafficPage-ByvcLSjv.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-CqXCoaod.js → TrafficSourceDetailPage-B-siTXVg.js} +1 -1
- package/assets/assets/{arrow-left-kCK5M8Bp.js → arrow-left-CBh1cZNH.js} +1 -1
- package/assets/assets/{extract-error-message-C82LAW6q.js → extract-error-message-DJZCPudR.js} +1 -1
- package/assets/assets/index-jymsMBpZ.css +1 -0
- package/assets/assets/index-mzLganDP.js +210 -0
- package/assets/assets/{trash-2-8Pe4v1T0.js → trash-2-Bh-Yvkgc.js} +1 -1
- package/assets/assets/vendor-recharts-DSxTZhaH.js +36 -0
- package/assets/index.html +3 -3
- package/dist/{chunk-BMPIV35C.js → chunk-4AZ7VES6.js} +5726 -697
- package/dist/{chunk-4PMMEFME.js → chunk-HJIIJI7K.js} +816 -18
- package/dist/{chunk-F2SRZJMY.js → chunk-JYBNBK25.js} +627 -22
- package/dist/{chunk-EZME2J2G.js → chunk-MMFSI3OG.js} +3315 -2191
- package/dist/cli.js +861 -109
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-GNOE4J35.js → intelligence-service-K35EN43I.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +12 -12
- package/assets/assets/ChartPrimitives-D4782Ifx.js +0 -1
- package/assets/assets/ProjectPage-BSGTpBUJ.js +0 -7
- package/assets/assets/RunsPage-Bfp0K6Ry.js +0 -1
- package/assets/assets/index-DrDNyUhv.css +0 -1
- package/assets/assets/index-i-t64RXw.js +0 -210
- package/assets/assets/vendor-recharts-C9EZkgbP.js +0 -36
|
@@ -3,6 +3,18 @@ import {
|
|
|
3
3
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
4
4
|
DISCOVERY_MAX_PROBES_CAP,
|
|
5
5
|
DISCOVERY_PROBE_CONCURRENCY_CAP,
|
|
6
|
+
adsActivateTreeRequestSchema,
|
|
7
|
+
adsAdCreateRequestSchema,
|
|
8
|
+
adsAdGroupCreateRequestSchema,
|
|
9
|
+
adsAdGroupUpdateRequestSchema,
|
|
10
|
+
adsAdUpdateRequestSchema,
|
|
11
|
+
adsCampaignCreateRequestSchema,
|
|
12
|
+
adsCampaignUpdateRequestSchema,
|
|
13
|
+
adsGeoSearchQuerySchema,
|
|
14
|
+
adsImageUploadRequestSchema,
|
|
15
|
+
adsOperationReconcileRequestSchema,
|
|
16
|
+
adsPauseRequestSchema,
|
|
17
|
+
adsUnresolvedOperationListQuerySchema,
|
|
6
18
|
backlinkSourceSchema,
|
|
7
19
|
competitorBatchRequestSchema,
|
|
8
20
|
discoveryBucketSchema,
|
|
@@ -25,7 +37,7 @@ import {
|
|
|
25
37
|
trafficConnectVercelRequestSchema,
|
|
26
38
|
trafficConnectWordpressRequestSchema,
|
|
27
39
|
trafficEventKindSchema
|
|
28
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-MMFSI3OG.js";
|
|
29
41
|
|
|
30
42
|
// src/config.ts
|
|
31
43
|
import fs from "fs";
|
|
@@ -1506,6 +1518,18 @@ var getApiV1ProjectsByNameHistory = (options) => {
|
|
|
1506
1518
|
...options
|
|
1507
1519
|
});
|
|
1508
1520
|
};
|
|
1521
|
+
var getApiV1History = (options) => {
|
|
1522
|
+
return (options?.client ?? client).get({
|
|
1523
|
+
security: [
|
|
1524
|
+
{
|
|
1525
|
+
scheme: "bearer",
|
|
1526
|
+
type: "http"
|
|
1527
|
+
}
|
|
1528
|
+
],
|
|
1529
|
+
url: "/api/v1/history",
|
|
1530
|
+
...options
|
|
1531
|
+
});
|
|
1532
|
+
};
|
|
1509
1533
|
var getApiV1ProjectsByNameSnapshots = (options) => {
|
|
1510
1534
|
return (options.client ?? client).get({
|
|
1511
1535
|
security: [
|
|
@@ -2310,7 +2334,79 @@ var getApiV1ProjectsByNameAdsStatus = (options) => {
|
|
|
2310
2334
|
...options
|
|
2311
2335
|
});
|
|
2312
2336
|
};
|
|
2313
|
-
var
|
|
2337
|
+
var getApiV1ProjectsByNameAdsAccount = (options) => {
|
|
2338
|
+
return (options.client ?? client).get({
|
|
2339
|
+
security: [
|
|
2340
|
+
{
|
|
2341
|
+
scheme: "bearer",
|
|
2342
|
+
type: "http"
|
|
2343
|
+
}
|
|
2344
|
+
],
|
|
2345
|
+
url: "/api/v1/projects/{name}/ads/account",
|
|
2346
|
+
...options
|
|
2347
|
+
});
|
|
2348
|
+
};
|
|
2349
|
+
var getApiV1ProjectsByNameAdsGeoSearch = (options) => {
|
|
2350
|
+
return (options.client ?? client).get({
|
|
2351
|
+
security: [
|
|
2352
|
+
{
|
|
2353
|
+
scheme: "bearer",
|
|
2354
|
+
type: "http"
|
|
2355
|
+
}
|
|
2356
|
+
],
|
|
2357
|
+
url: "/api/v1/projects/{name}/ads/geo/search",
|
|
2358
|
+
...options
|
|
2359
|
+
});
|
|
2360
|
+
};
|
|
2361
|
+
var getApiV1ProjectsByNameAdsConversionsPixels = (options) => {
|
|
2362
|
+
return (options.client ?? client).get({
|
|
2363
|
+
security: [
|
|
2364
|
+
{
|
|
2365
|
+
scheme: "bearer",
|
|
2366
|
+
type: "http"
|
|
2367
|
+
}
|
|
2368
|
+
],
|
|
2369
|
+
url: "/api/v1/projects/{name}/ads/conversions/pixels",
|
|
2370
|
+
...options
|
|
2371
|
+
});
|
|
2372
|
+
};
|
|
2373
|
+
var getApiV1ProjectsByNameAdsConversionsEventSettings = (options) => {
|
|
2374
|
+
return (options.client ?? client).get({
|
|
2375
|
+
security: [
|
|
2376
|
+
{
|
|
2377
|
+
scheme: "bearer",
|
|
2378
|
+
type: "http"
|
|
2379
|
+
}
|
|
2380
|
+
],
|
|
2381
|
+
url: "/api/v1/projects/{name}/ads/conversions/event-settings",
|
|
2382
|
+
...options
|
|
2383
|
+
});
|
|
2384
|
+
};
|
|
2385
|
+
var getApiV1ProjectsByNameAdsOperations = (options) => {
|
|
2386
|
+
return (options.client ?? client).get({
|
|
2387
|
+
security: [
|
|
2388
|
+
{
|
|
2389
|
+
scheme: "bearer",
|
|
2390
|
+
type: "http"
|
|
2391
|
+
}
|
|
2392
|
+
],
|
|
2393
|
+
url: "/api/v1/projects/{name}/ads/operations",
|
|
2394
|
+
...options
|
|
2395
|
+
});
|
|
2396
|
+
};
|
|
2397
|
+
var getApiV1ProjectsByNameAdsOperationsByOperationKey = (options) => {
|
|
2398
|
+
return (options.client ?? client).get({
|
|
2399
|
+
security: [
|
|
2400
|
+
{
|
|
2401
|
+
scheme: "bearer",
|
|
2402
|
+
type: "http"
|
|
2403
|
+
}
|
|
2404
|
+
],
|
|
2405
|
+
url: "/api/v1/projects/{name}/ads/operations/{operationKey}",
|
|
2406
|
+
...options
|
|
2407
|
+
});
|
|
2408
|
+
};
|
|
2409
|
+
var postApiV1ProjectsByNameAdsOperationsByOperationKeyReconcile = (options) => {
|
|
2314
2410
|
return (options.client ?? client).post({
|
|
2315
2411
|
security: [
|
|
2316
2412
|
{
|
|
@@ -2318,19 +2414,247 @@ var postApiV1ProjectsByNameAdsSync = (options) => {
|
|
|
2318
2414
|
type: "http"
|
|
2319
2415
|
}
|
|
2320
2416
|
],
|
|
2321
|
-
url: "/api/v1/projects/{name}/ads/
|
|
2417
|
+
url: "/api/v1/projects/{name}/ads/operations/{operationKey}/reconcile",
|
|
2418
|
+
...options
|
|
2419
|
+
});
|
|
2420
|
+
};
|
|
2421
|
+
var postApiV1ProjectsByNameAdsOperationsByOperationKeyResumeActivation = (options) => {
|
|
2422
|
+
return (options.client ?? client).post({
|
|
2423
|
+
security: [
|
|
2424
|
+
{
|
|
2425
|
+
scheme: "bearer",
|
|
2426
|
+
type: "http"
|
|
2427
|
+
}
|
|
2428
|
+
],
|
|
2429
|
+
url: "/api/v1/projects/{name}/ads/operations/{operationKey}/resume-activation",
|
|
2430
|
+
...options
|
|
2431
|
+
});
|
|
2432
|
+
};
|
|
2433
|
+
var postApiV1ProjectsByNameAdsActivationGrants = (options) => {
|
|
2434
|
+
return (options.client ?? client).post({
|
|
2435
|
+
security: [
|
|
2436
|
+
{
|
|
2437
|
+
scheme: "bearer",
|
|
2438
|
+
type: "http"
|
|
2439
|
+
}
|
|
2440
|
+
],
|
|
2441
|
+
url: "/api/v1/projects/{name}/ads/activation-grants",
|
|
2442
|
+
...options,
|
|
2443
|
+
headers: {
|
|
2444
|
+
"Content-Type": "application/json",
|
|
2445
|
+
...options.headers
|
|
2446
|
+
}
|
|
2447
|
+
});
|
|
2448
|
+
};
|
|
2449
|
+
var postApiV1ProjectsByNameAdsActivationGrantsByGrantIdRevoke = (options) => {
|
|
2450
|
+
return (options.client ?? client).post({
|
|
2451
|
+
security: [
|
|
2452
|
+
{
|
|
2453
|
+
scheme: "bearer",
|
|
2454
|
+
type: "http"
|
|
2455
|
+
}
|
|
2456
|
+
],
|
|
2457
|
+
url: "/api/v1/projects/{name}/ads/activation-grants/{grantId}/revoke",
|
|
2458
|
+
...options
|
|
2459
|
+
});
|
|
2460
|
+
};
|
|
2461
|
+
var postApiV1ProjectsByNameAdsCampaignsByIdActivateTree = (options) => {
|
|
2462
|
+
return (options.client ?? client).post({
|
|
2463
|
+
security: [
|
|
2464
|
+
{
|
|
2465
|
+
scheme: "bearer",
|
|
2466
|
+
type: "http"
|
|
2467
|
+
}
|
|
2468
|
+
],
|
|
2469
|
+
url: "/api/v1/projects/{name}/ads/campaigns/{id}/activate-tree",
|
|
2470
|
+
...options,
|
|
2471
|
+
headers: {
|
|
2472
|
+
"Content-Type": "application/json",
|
|
2473
|
+
...options.headers
|
|
2474
|
+
}
|
|
2475
|
+
});
|
|
2476
|
+
};
|
|
2477
|
+
var postApiV1ProjectsByNameAdsFiles = (options) => {
|
|
2478
|
+
return (options.client ?? client).post({
|
|
2479
|
+
security: [
|
|
2480
|
+
{
|
|
2481
|
+
scheme: "bearer",
|
|
2482
|
+
type: "http"
|
|
2483
|
+
}
|
|
2484
|
+
],
|
|
2485
|
+
url: "/api/v1/projects/{name}/ads/files",
|
|
2486
|
+
...options,
|
|
2487
|
+
headers: {
|
|
2488
|
+
"Content-Type": "application/json",
|
|
2489
|
+
...options.headers
|
|
2490
|
+
}
|
|
2491
|
+
});
|
|
2492
|
+
};
|
|
2493
|
+
var getApiV1ProjectsByNameAdsCampaigns = (options) => {
|
|
2494
|
+
return (options.client ?? client).get({
|
|
2495
|
+
security: [
|
|
2496
|
+
{
|
|
2497
|
+
scheme: "bearer",
|
|
2498
|
+
type: "http"
|
|
2499
|
+
}
|
|
2500
|
+
],
|
|
2501
|
+
url: "/api/v1/projects/{name}/ads/campaigns",
|
|
2322
2502
|
...options
|
|
2323
2503
|
});
|
|
2324
2504
|
};
|
|
2325
|
-
var
|
|
2326
|
-
return (options.client ?? client).
|
|
2505
|
+
var postApiV1ProjectsByNameAdsCampaigns = (options) => {
|
|
2506
|
+
return (options.client ?? client).post({
|
|
2507
|
+
security: [
|
|
2508
|
+
{
|
|
2509
|
+
scheme: "bearer",
|
|
2510
|
+
type: "http"
|
|
2511
|
+
}
|
|
2512
|
+
],
|
|
2513
|
+
url: "/api/v1/projects/{name}/ads/campaigns",
|
|
2514
|
+
...options,
|
|
2515
|
+
headers: {
|
|
2516
|
+
"Content-Type": "application/json",
|
|
2517
|
+
...options.headers
|
|
2518
|
+
}
|
|
2519
|
+
});
|
|
2520
|
+
};
|
|
2521
|
+
var postApiV1ProjectsByNameAdsAdGroups = (options) => {
|
|
2522
|
+
return (options.client ?? client).post({
|
|
2523
|
+
security: [
|
|
2524
|
+
{
|
|
2525
|
+
scheme: "bearer",
|
|
2526
|
+
type: "http"
|
|
2527
|
+
}
|
|
2528
|
+
],
|
|
2529
|
+
url: "/api/v1/projects/{name}/ads/ad-groups",
|
|
2530
|
+
...options,
|
|
2531
|
+
headers: {
|
|
2532
|
+
"Content-Type": "application/json",
|
|
2533
|
+
...options.headers
|
|
2534
|
+
}
|
|
2535
|
+
});
|
|
2536
|
+
};
|
|
2537
|
+
var postApiV1ProjectsByNameAdsAds = (options) => {
|
|
2538
|
+
return (options.client ?? client).post({
|
|
2539
|
+
security: [
|
|
2540
|
+
{
|
|
2541
|
+
scheme: "bearer",
|
|
2542
|
+
type: "http"
|
|
2543
|
+
}
|
|
2544
|
+
],
|
|
2545
|
+
url: "/api/v1/projects/{name}/ads/ads",
|
|
2546
|
+
...options,
|
|
2547
|
+
headers: {
|
|
2548
|
+
"Content-Type": "application/json",
|
|
2549
|
+
...options.headers
|
|
2550
|
+
}
|
|
2551
|
+
});
|
|
2552
|
+
};
|
|
2553
|
+
var postApiV1ProjectsByNameAdsCampaignsById = (options) => {
|
|
2554
|
+
return (options.client ?? client).post({
|
|
2555
|
+
security: [
|
|
2556
|
+
{
|
|
2557
|
+
scheme: "bearer",
|
|
2558
|
+
type: "http"
|
|
2559
|
+
}
|
|
2560
|
+
],
|
|
2561
|
+
url: "/api/v1/projects/{name}/ads/campaigns/{id}",
|
|
2562
|
+
...options,
|
|
2563
|
+
headers: {
|
|
2564
|
+
"Content-Type": "application/json",
|
|
2565
|
+
...options.headers
|
|
2566
|
+
}
|
|
2567
|
+
});
|
|
2568
|
+
};
|
|
2569
|
+
var postApiV1ProjectsByNameAdsAdGroupsById = (options) => {
|
|
2570
|
+
return (options.client ?? client).post({
|
|
2571
|
+
security: [
|
|
2572
|
+
{
|
|
2573
|
+
scheme: "bearer",
|
|
2574
|
+
type: "http"
|
|
2575
|
+
}
|
|
2576
|
+
],
|
|
2577
|
+
url: "/api/v1/projects/{name}/ads/ad-groups/{id}",
|
|
2578
|
+
...options,
|
|
2579
|
+
headers: {
|
|
2580
|
+
"Content-Type": "application/json",
|
|
2581
|
+
...options.headers
|
|
2582
|
+
}
|
|
2583
|
+
});
|
|
2584
|
+
};
|
|
2585
|
+
var postApiV1ProjectsByNameAdsAdsById = (options) => {
|
|
2586
|
+
return (options.client ?? client).post({
|
|
2587
|
+
security: [
|
|
2588
|
+
{
|
|
2589
|
+
scheme: "bearer",
|
|
2590
|
+
type: "http"
|
|
2591
|
+
}
|
|
2592
|
+
],
|
|
2593
|
+
url: "/api/v1/projects/{name}/ads/ads/{id}",
|
|
2594
|
+
...options,
|
|
2595
|
+
headers: {
|
|
2596
|
+
"Content-Type": "application/json",
|
|
2597
|
+
...options.headers
|
|
2598
|
+
}
|
|
2599
|
+
});
|
|
2600
|
+
};
|
|
2601
|
+
var postApiV1ProjectsByNameAdsCampaignsByIdPause = (options) => {
|
|
2602
|
+
return (options.client ?? client).post({
|
|
2603
|
+
security: [
|
|
2604
|
+
{
|
|
2605
|
+
scheme: "bearer",
|
|
2606
|
+
type: "http"
|
|
2607
|
+
}
|
|
2608
|
+
],
|
|
2609
|
+
url: "/api/v1/projects/{name}/ads/campaigns/{id}/pause",
|
|
2610
|
+
...options,
|
|
2611
|
+
headers: {
|
|
2612
|
+
"Content-Type": "application/json",
|
|
2613
|
+
...options.headers
|
|
2614
|
+
}
|
|
2615
|
+
});
|
|
2616
|
+
};
|
|
2617
|
+
var postApiV1ProjectsByNameAdsAdGroupsByIdPause = (options) => {
|
|
2618
|
+
return (options.client ?? client).post({
|
|
2619
|
+
security: [
|
|
2620
|
+
{
|
|
2621
|
+
scheme: "bearer",
|
|
2622
|
+
type: "http"
|
|
2623
|
+
}
|
|
2624
|
+
],
|
|
2625
|
+
url: "/api/v1/projects/{name}/ads/ad-groups/{id}/pause",
|
|
2626
|
+
...options,
|
|
2627
|
+
headers: {
|
|
2628
|
+
"Content-Type": "application/json",
|
|
2629
|
+
...options.headers
|
|
2630
|
+
}
|
|
2631
|
+
});
|
|
2632
|
+
};
|
|
2633
|
+
var postApiV1ProjectsByNameAdsAdsByIdPause = (options) => {
|
|
2634
|
+
return (options.client ?? client).post({
|
|
2635
|
+
security: [
|
|
2636
|
+
{
|
|
2637
|
+
scheme: "bearer",
|
|
2638
|
+
type: "http"
|
|
2639
|
+
}
|
|
2640
|
+
],
|
|
2641
|
+
url: "/api/v1/projects/{name}/ads/ads/{id}/pause",
|
|
2642
|
+
...options,
|
|
2643
|
+
headers: {
|
|
2644
|
+
"Content-Type": "application/json",
|
|
2645
|
+
...options.headers
|
|
2646
|
+
}
|
|
2647
|
+
});
|
|
2648
|
+
};
|
|
2649
|
+
var postApiV1ProjectsByNameAdsSync = (options) => {
|
|
2650
|
+
return (options.client ?? client).post({
|
|
2327
2651
|
security: [
|
|
2328
2652
|
{
|
|
2329
2653
|
scheme: "bearer",
|
|
2330
2654
|
type: "http"
|
|
2331
2655
|
}
|
|
2332
2656
|
],
|
|
2333
|
-
url: "/api/v1/projects/{name}/ads/
|
|
2657
|
+
url: "/api/v1/projects/{name}/ads/sync",
|
|
2334
2658
|
...options
|
|
2335
2659
|
});
|
|
2336
2660
|
};
|
|
@@ -4124,14 +4448,19 @@ var ApiClient = class {
|
|
|
4124
4448
|
async cancelRun(id) {
|
|
4125
4449
|
return this.invoke(() => postApiV1RunsByIdCancel({ client: this.heyClient, path: { id } }));
|
|
4126
4450
|
}
|
|
4127
|
-
async getTimeline(project, location) {
|
|
4451
|
+
async getTimeline(project, location, limit) {
|
|
4452
|
+
return this.invoke(
|
|
4453
|
+
() => getApiV1ProjectsByNameTimeline({ client: this.heyClient, path: { name: project }, query: { location, limit } })
|
|
4454
|
+
);
|
|
4455
|
+
}
|
|
4456
|
+
async getHistory(project, opts) {
|
|
4128
4457
|
return this.invoke(
|
|
4129
|
-
() =>
|
|
4458
|
+
() => getApiV1ProjectsByNameHistory({ client: this.heyClient, path: { name: project }, query: opts })
|
|
4130
4459
|
);
|
|
4131
4460
|
}
|
|
4132
|
-
async
|
|
4461
|
+
async getGlobalHistory(opts) {
|
|
4133
4462
|
return this.invoke(
|
|
4134
|
-
() =>
|
|
4463
|
+
() => getApiV1History({ client: this.heyClient, query: opts })
|
|
4135
4464
|
);
|
|
4136
4465
|
}
|
|
4137
4466
|
async getSnapshots(project, opts) {
|
|
@@ -4407,6 +4736,26 @@ var ApiClient = class {
|
|
|
4407
4736
|
() => getApiV1ProjectsByNameAdsStatus({ client: this.heyClient, path: { name: project } })
|
|
4408
4737
|
);
|
|
4409
4738
|
}
|
|
4739
|
+
async getAdsAccount(project) {
|
|
4740
|
+
return this.invoke(
|
|
4741
|
+
() => getApiV1ProjectsByNameAdsAccount({ client: this.heyClient, path: { name: project } })
|
|
4742
|
+
);
|
|
4743
|
+
}
|
|
4744
|
+
async searchAdsGeo(project, query) {
|
|
4745
|
+
return this.invoke(
|
|
4746
|
+
() => getApiV1ProjectsByNameAdsGeoSearch({ client: this.heyClient, path: { name: project }, query })
|
|
4747
|
+
);
|
|
4748
|
+
}
|
|
4749
|
+
async getAdsConversionPixels(project) {
|
|
4750
|
+
return this.invoke(
|
|
4751
|
+
() => getApiV1ProjectsByNameAdsConversionsPixels({ client: this.heyClient, path: { name: project } })
|
|
4752
|
+
);
|
|
4753
|
+
}
|
|
4754
|
+
async getAdsConversionEventSettings(project) {
|
|
4755
|
+
return this.invoke(
|
|
4756
|
+
() => getApiV1ProjectsByNameAdsConversionsEventSettings({ client: this.heyClient, path: { name: project } })
|
|
4757
|
+
);
|
|
4758
|
+
}
|
|
4410
4759
|
async triggerAdsSync(project) {
|
|
4411
4760
|
return this.invoke(
|
|
4412
4761
|
() => postApiV1ProjectsByNameAdsSync({ client: this.heyClient, path: { name: project } })
|
|
@@ -4427,6 +4776,143 @@ var ApiClient = class {
|
|
|
4427
4776
|
() => getApiV1ProjectsByNameAdsSummary({ client: this.heyClient, path: { name: project } })
|
|
4428
4777
|
);
|
|
4429
4778
|
}
|
|
4779
|
+
async getAdsOperation(project, operationKey) {
|
|
4780
|
+
return this.invoke(
|
|
4781
|
+
() => getApiV1ProjectsByNameAdsOperationsByOperationKey({
|
|
4782
|
+
client: this.heyClient,
|
|
4783
|
+
path: { name: project, operationKey }
|
|
4784
|
+
})
|
|
4785
|
+
);
|
|
4786
|
+
}
|
|
4787
|
+
async getUnresolvedAdsOperations(project, query) {
|
|
4788
|
+
return this.invoke(
|
|
4789
|
+
() => getApiV1ProjectsByNameAdsOperations({
|
|
4790
|
+
client: this.heyClient,
|
|
4791
|
+
path: { name: project },
|
|
4792
|
+
query: query ? {
|
|
4793
|
+
state: query.state?.join(","),
|
|
4794
|
+
limit: query.limit,
|
|
4795
|
+
cursor: query.cursor
|
|
4796
|
+
} : void 0
|
|
4797
|
+
})
|
|
4798
|
+
);
|
|
4799
|
+
}
|
|
4800
|
+
async reconcileAdsOperation(project, operationKey) {
|
|
4801
|
+
return this.invoke(
|
|
4802
|
+
() => postApiV1ProjectsByNameAdsOperationsByOperationKeyReconcile({
|
|
4803
|
+
client: this.heyClient,
|
|
4804
|
+
path: { name: project, operationKey }
|
|
4805
|
+
})
|
|
4806
|
+
);
|
|
4807
|
+
}
|
|
4808
|
+
async resumeAdsActivation(project, operationKey) {
|
|
4809
|
+
return this.invoke(
|
|
4810
|
+
() => postApiV1ProjectsByNameAdsOperationsByOperationKeyResumeActivation({
|
|
4811
|
+
client: this.heyClient,
|
|
4812
|
+
path: { name: project, operationKey }
|
|
4813
|
+
})
|
|
4814
|
+
);
|
|
4815
|
+
}
|
|
4816
|
+
async createAdsActivationGrant(project, body) {
|
|
4817
|
+
return this.invoke(
|
|
4818
|
+
() => postApiV1ProjectsByNameAdsActivationGrants({
|
|
4819
|
+
client: this.heyClient,
|
|
4820
|
+
path: { name: project },
|
|
4821
|
+
body
|
|
4822
|
+
})
|
|
4823
|
+
);
|
|
4824
|
+
}
|
|
4825
|
+
async revokeAdsActivationGrant(project, grantId) {
|
|
4826
|
+
return this.invoke(
|
|
4827
|
+
() => postApiV1ProjectsByNameAdsActivationGrantsByGrantIdRevoke({
|
|
4828
|
+
client: this.heyClient,
|
|
4829
|
+
path: { name: project, grantId }
|
|
4830
|
+
})
|
|
4831
|
+
);
|
|
4832
|
+
}
|
|
4833
|
+
async uploadAdsImage(project, body) {
|
|
4834
|
+
return this.invoke(
|
|
4835
|
+
() => postApiV1ProjectsByNameAdsFiles({ client: this.heyClient, path: { name: project }, body })
|
|
4836
|
+
);
|
|
4837
|
+
}
|
|
4838
|
+
async createAdsCampaign(project, body) {
|
|
4839
|
+
return this.invoke(
|
|
4840
|
+
() => postApiV1ProjectsByNameAdsCampaigns({ client: this.heyClient, path: { name: project }, body })
|
|
4841
|
+
);
|
|
4842
|
+
}
|
|
4843
|
+
async updateAdsCampaign(project, campaignId, body) {
|
|
4844
|
+
return this.invoke(
|
|
4845
|
+
() => postApiV1ProjectsByNameAdsCampaignsById({
|
|
4846
|
+
client: this.heyClient,
|
|
4847
|
+
path: { name: project, id: campaignId },
|
|
4848
|
+
body
|
|
4849
|
+
})
|
|
4850
|
+
);
|
|
4851
|
+
}
|
|
4852
|
+
async pauseAdsCampaign(project, campaignId, body) {
|
|
4853
|
+
return this.invoke(
|
|
4854
|
+
() => postApiV1ProjectsByNameAdsCampaignsByIdPause({
|
|
4855
|
+
client: this.heyClient,
|
|
4856
|
+
path: { name: project, id: campaignId },
|
|
4857
|
+
body
|
|
4858
|
+
})
|
|
4859
|
+
);
|
|
4860
|
+
}
|
|
4861
|
+
async activateAdsCampaignTree(project, campaignId, body) {
|
|
4862
|
+
return this.invoke(
|
|
4863
|
+
() => postApiV1ProjectsByNameAdsCampaignsByIdActivateTree({
|
|
4864
|
+
client: this.heyClient,
|
|
4865
|
+
path: { name: project, id: campaignId },
|
|
4866
|
+
body
|
|
4867
|
+
})
|
|
4868
|
+
);
|
|
4869
|
+
}
|
|
4870
|
+
async createAdsAdGroup(project, body) {
|
|
4871
|
+
return this.invoke(
|
|
4872
|
+
() => postApiV1ProjectsByNameAdsAdGroups({ client: this.heyClient, path: { name: project }, body })
|
|
4873
|
+
);
|
|
4874
|
+
}
|
|
4875
|
+
async updateAdsAdGroup(project, adGroupId, body) {
|
|
4876
|
+
return this.invoke(
|
|
4877
|
+
() => postApiV1ProjectsByNameAdsAdGroupsById({
|
|
4878
|
+
client: this.heyClient,
|
|
4879
|
+
path: { name: project, id: adGroupId },
|
|
4880
|
+
body
|
|
4881
|
+
})
|
|
4882
|
+
);
|
|
4883
|
+
}
|
|
4884
|
+
async pauseAdsAdGroup(project, adGroupId, body) {
|
|
4885
|
+
return this.invoke(
|
|
4886
|
+
() => postApiV1ProjectsByNameAdsAdGroupsByIdPause({
|
|
4887
|
+
client: this.heyClient,
|
|
4888
|
+
path: { name: project, id: adGroupId },
|
|
4889
|
+
body
|
|
4890
|
+
})
|
|
4891
|
+
);
|
|
4892
|
+
}
|
|
4893
|
+
async createAdsAd(project, body) {
|
|
4894
|
+
return this.invoke(
|
|
4895
|
+
() => postApiV1ProjectsByNameAdsAds({ client: this.heyClient, path: { name: project }, body })
|
|
4896
|
+
);
|
|
4897
|
+
}
|
|
4898
|
+
async updateAdsAd(project, adId, body) {
|
|
4899
|
+
return this.invoke(
|
|
4900
|
+
() => postApiV1ProjectsByNameAdsAdsById({
|
|
4901
|
+
client: this.heyClient,
|
|
4902
|
+
path: { name: project, id: adId },
|
|
4903
|
+
body
|
|
4904
|
+
})
|
|
4905
|
+
);
|
|
4906
|
+
}
|
|
4907
|
+
async pauseAdsAd(project, adId, body) {
|
|
4908
|
+
return this.invoke(
|
|
4909
|
+
() => postApiV1ProjectsByNameAdsAdsByIdPause({
|
|
4910
|
+
client: this.heyClient,
|
|
4911
|
+
path: { name: project, id: adId },
|
|
4912
|
+
body
|
|
4913
|
+
})
|
|
4914
|
+
);
|
|
4915
|
+
}
|
|
4430
4916
|
async listGbpMetrics(project, opts) {
|
|
4431
4917
|
return this.invoke(
|
|
4432
4918
|
() => getApiV1ProjectsByNameGbpMetrics({
|
|
@@ -4912,9 +5398,9 @@ var ApiClient = class {
|
|
|
4912
5398
|
);
|
|
4913
5399
|
}
|
|
4914
5400
|
// ── Technical AEO (site-audit) ──────────────────────────────────────────
|
|
4915
|
-
async getTechnicalAeoScore(project) {
|
|
5401
|
+
async getTechnicalAeoScore(project, opts) {
|
|
4916
5402
|
return this.invoke(
|
|
4917
|
-
() => getApiV1ProjectsByNameTechnicalAeo({ client: this.heyClient, path: { name: project } })
|
|
5403
|
+
() => getApiV1ProjectsByNameTechnicalAeo({ client: this.heyClient, path: { name: project }, query: { runId: opts?.runId } })
|
|
4918
5404
|
);
|
|
4919
5405
|
}
|
|
4920
5406
|
async getTechnicalAeoPages(project, opts) {
|
|
@@ -4923,6 +5409,7 @@ var ApiClient = class {
|
|
|
4923
5409
|
client: this.heyClient,
|
|
4924
5410
|
path: { name: project },
|
|
4925
5411
|
query: {
|
|
5412
|
+
runId: opts?.runId,
|
|
4926
5413
|
status: opts?.status,
|
|
4927
5414
|
sort: opts?.sort,
|
|
4928
5415
|
limit: opts?.limit !== void 0 ? String(opts.limit) : void 0,
|
|
@@ -5420,8 +5907,19 @@ var runGetInputSchema = z2.object({
|
|
|
5420
5907
|
});
|
|
5421
5908
|
var timelineInputSchema = z2.object({
|
|
5422
5909
|
project: projectNameSchema,
|
|
5423
|
-
location: z2.string().optional().describe("Location label. Use an empty string for locationless results.")
|
|
5910
|
+
location: z2.string().optional().describe("Location label. Use an empty string for locationless results."),
|
|
5911
|
+
limit: z2.number().int().positive().max(100).optional().describe("Restrict history to the most recent N project runs.")
|
|
5424
5912
|
});
|
|
5913
|
+
var historyFilterShape = {
|
|
5914
|
+
limit: z2.number().int().positive().max(500).optional(),
|
|
5915
|
+
offset: z2.number().int().nonnegative().optional(),
|
|
5916
|
+
since: z2.string().optional().describe("ISO 8601 lower bound."),
|
|
5917
|
+
action: z2.string().optional().describe("Exact audit action filter."),
|
|
5918
|
+
actor: z2.string().optional().describe("Exact actor filter."),
|
|
5919
|
+
entityType: z2.string().optional().describe("Exact entity type filter.")
|
|
5920
|
+
};
|
|
5921
|
+
var projectHistoryInputSchema = z2.object({ project: projectNameSchema, ...historyFilterShape });
|
|
5922
|
+
var globalHistoryInputSchema = z2.object(historyFilterShape);
|
|
5425
5923
|
var snapshotsListInputSchema = z2.object({
|
|
5426
5924
|
project: projectNameSchema,
|
|
5427
5925
|
limit: z2.number().int().positive().max(500).optional(),
|
|
@@ -5525,6 +6023,72 @@ var adsInsightsInputSchema = z2.object({
|
|
|
5525
6023
|
from: z2.string().optional(),
|
|
5526
6024
|
to: z2.string().optional()
|
|
5527
6025
|
});
|
|
6026
|
+
var adsGeoSearchInputSchema = adsGeoSearchQuerySchema.extend({
|
|
6027
|
+
project: projectNameSchema
|
|
6028
|
+
});
|
|
6029
|
+
var adsOperationInputSchema = z2.object({
|
|
6030
|
+
project: projectNameSchema,
|
|
6031
|
+
operationKey: z2.string().min(8).max(128)
|
|
6032
|
+
});
|
|
6033
|
+
var adsOperationResumeActivationInputSchema = adsOperationInputSchema.strict();
|
|
6034
|
+
var adsUnresolvedOperationsInputSchema = adsUnresolvedOperationListQuerySchema.extend({
|
|
6035
|
+
project: projectNameSchema
|
|
6036
|
+
});
|
|
6037
|
+
var adsOperationReconcileInputSchema = adsOperationReconcileRequestSchema.extend({
|
|
6038
|
+
project: projectNameSchema,
|
|
6039
|
+
operationKey: z2.string().min(8).max(128)
|
|
6040
|
+
});
|
|
6041
|
+
var adsImageUploadInputSchema = z2.object({
|
|
6042
|
+
project: projectNameSchema,
|
|
6043
|
+
request: adsImageUploadRequestSchema
|
|
6044
|
+
});
|
|
6045
|
+
var adsCampaignCreateInputSchema = z2.object({
|
|
6046
|
+
project: projectNameSchema,
|
|
6047
|
+
request: adsCampaignCreateRequestSchema
|
|
6048
|
+
});
|
|
6049
|
+
var adsCampaignUpdateInputSchema = z2.object({
|
|
6050
|
+
project: projectNameSchema,
|
|
6051
|
+
campaignId: z2.string().min(1),
|
|
6052
|
+
request: adsCampaignUpdateRequestSchema
|
|
6053
|
+
});
|
|
6054
|
+
var adsCampaignActivateTreeInputSchema = z2.object({
|
|
6055
|
+
project: projectNameSchema,
|
|
6056
|
+
campaignId: z2.string().min(1),
|
|
6057
|
+
request: adsActivateTreeRequestSchema
|
|
6058
|
+
});
|
|
6059
|
+
var adsCampaignPauseInputSchema = z2.object({
|
|
6060
|
+
project: projectNameSchema,
|
|
6061
|
+
campaignId: z2.string().min(1),
|
|
6062
|
+
request: adsPauseRequestSchema
|
|
6063
|
+
});
|
|
6064
|
+
var adsAdGroupCreateInputSchema = z2.object({
|
|
6065
|
+
project: projectNameSchema,
|
|
6066
|
+
request: adsAdGroupCreateRequestSchema
|
|
6067
|
+
});
|
|
6068
|
+
var adsAdGroupUpdateInputSchema = z2.object({
|
|
6069
|
+
project: projectNameSchema,
|
|
6070
|
+
adGroupId: z2.string().min(1),
|
|
6071
|
+
request: adsAdGroupUpdateRequestSchema
|
|
6072
|
+
});
|
|
6073
|
+
var adsAdGroupPauseInputSchema = z2.object({
|
|
6074
|
+
project: projectNameSchema,
|
|
6075
|
+
adGroupId: z2.string().min(1),
|
|
6076
|
+
request: adsPauseRequestSchema
|
|
6077
|
+
});
|
|
6078
|
+
var adsAdCreateInputSchema = z2.object({
|
|
6079
|
+
project: projectNameSchema,
|
|
6080
|
+
request: adsAdCreateRequestSchema
|
|
6081
|
+
});
|
|
6082
|
+
var adsAdUpdateInputSchema = z2.object({
|
|
6083
|
+
project: projectNameSchema,
|
|
6084
|
+
adId: z2.string().min(1),
|
|
6085
|
+
request: adsAdUpdateRequestSchema
|
|
6086
|
+
});
|
|
6087
|
+
var adsAdPauseInputSchema = z2.object({
|
|
6088
|
+
project: projectNameSchema,
|
|
6089
|
+
adId: z2.string().min(1),
|
|
6090
|
+
request: adsPauseRequestSchema
|
|
6091
|
+
});
|
|
5528
6092
|
var keywordsInputSchema = z2.object({
|
|
5529
6093
|
project: projectNameSchema,
|
|
5530
6094
|
request: keywordBatchRequestSchema
|
|
@@ -5672,10 +6236,12 @@ var discoveryPromoteInputSchema = z2.object({
|
|
|
5672
6236
|
}).optional()
|
|
5673
6237
|
});
|
|
5674
6238
|
var technicalAeoScoreInputSchema = z2.object({
|
|
5675
|
-
project: projectNameSchema
|
|
6239
|
+
project: projectNameSchema,
|
|
6240
|
+
runId: runIdSchema.optional().describe("Historical site-audit run ID. Omit for the latest audit.")
|
|
5676
6241
|
});
|
|
5677
6242
|
var technicalAeoPagesInputSchema = z2.object({
|
|
5678
6243
|
project: projectNameSchema,
|
|
6244
|
+
runId: runIdSchema.optional().describe("Historical site-audit run ID. Omit for the latest audit."),
|
|
5679
6245
|
status: z2.enum(["success", "error"]).optional().describe("Filter to successfully-audited or errored pages."),
|
|
5680
6246
|
sort: z2.enum(["score-asc", "score-desc", "url"]).optional().describe("Sort order. Defaults to score-asc (worst pages first)."),
|
|
5681
6247
|
limit: z2.number().int().positive().max(500).optional(),
|
|
@@ -5834,10 +6400,28 @@ var canonryMcpTools = [
|
|
|
5834
6400
|
description: "Get audit history for a Canonry project.",
|
|
5835
6401
|
access: "read",
|
|
5836
6402
|
tier: "monitoring",
|
|
5837
|
-
inputSchema:
|
|
6403
|
+
inputSchema: projectHistoryInputSchema,
|
|
5838
6404
|
annotations: readAnnotations(),
|
|
5839
6405
|
openApiOperations: ["GET /api/v1/projects/{name}/history"],
|
|
5840
|
-
handler: (client2, input) => client2.getHistory(input.project
|
|
6406
|
+
handler: (client2, input) => client2.getHistory(input.project, {
|
|
6407
|
+
limit: input.limit,
|
|
6408
|
+
offset: input.offset,
|
|
6409
|
+
since: input.since,
|
|
6410
|
+
action: input.action,
|
|
6411
|
+
actor: input.actor,
|
|
6412
|
+
entityType: input.entityType
|
|
6413
|
+
})
|
|
6414
|
+
}),
|
|
6415
|
+
defineTool({
|
|
6416
|
+
name: "canonry_history_global",
|
|
6417
|
+
title: "Get instance history",
|
|
6418
|
+
description: "Get the instance-wide audit trail, including retained entries whose project was deleted. Full-instance keys only; project-scoped keys remain limited to their project.",
|
|
6419
|
+
access: "read",
|
|
6420
|
+
tier: "monitoring",
|
|
6421
|
+
inputSchema: globalHistoryInputSchema,
|
|
6422
|
+
annotations: readAnnotations(),
|
|
6423
|
+
openApiOperations: ["GET /api/v1/history"],
|
|
6424
|
+
handler: (client2, input) => client2.getGlobalHistory(input)
|
|
5841
6425
|
}),
|
|
5842
6426
|
defineTool({
|
|
5843
6427
|
name: "canonry_runs_list",
|
|
@@ -5881,7 +6465,7 @@ var canonryMcpTools = [
|
|
|
5881
6465
|
inputSchema: timelineInputSchema,
|
|
5882
6466
|
annotations: readAnnotations(),
|
|
5883
6467
|
openApiOperations: ["GET /api/v1/projects/{name}/timeline"],
|
|
5884
|
-
handler: (client2, input) => client2.getTimeline(input.project, input.location)
|
|
6468
|
+
handler: (client2, input) => client2.getTimeline(input.project, input.location, input.limit)
|
|
5885
6469
|
}),
|
|
5886
6470
|
defineTool({
|
|
5887
6471
|
name: "canonry_snapshots_list",
|
|
@@ -6994,7 +7578,7 @@ var canonryMcpTools = [
|
|
|
6994
7578
|
inputSchema: technicalAeoScoreInputSchema,
|
|
6995
7579
|
annotations: readAnnotations(),
|
|
6996
7580
|
openApiOperations: ["GET /api/v1/projects/{name}/technical-aeo"],
|
|
6997
|
-
handler: (client2, input) => client2.getTechnicalAeoScore(input.project)
|
|
7581
|
+
handler: (client2, input) => client2.getTechnicalAeoScore(input.project, { runId: input.runId })
|
|
6998
7582
|
}),
|
|
6999
7583
|
defineTool({
|
|
7000
7584
|
name: "canonry_technical_aeo_pages",
|
|
@@ -7006,6 +7590,7 @@ var canonryMcpTools = [
|
|
|
7006
7590
|
annotations: readAnnotations(),
|
|
7007
7591
|
openApiOperations: ["GET /api/v1/projects/{name}/technical-aeo/pages"],
|
|
7008
7592
|
handler: (client2, input) => client2.getTechnicalAeoPages(input.project, {
|
|
7593
|
+
runId: input.runId,
|
|
7009
7594
|
status: input.status,
|
|
7010
7595
|
sort: input.sort,
|
|
7011
7596
|
limit: input.limit,
|
|
@@ -7049,6 +7634,50 @@ var canonryMcpTools = [
|
|
|
7049
7634
|
openApiOperations: ["GET /api/v1/projects/{name}/ads/status"],
|
|
7050
7635
|
handler: (client2, input) => client2.getAdsStatus(input.project)
|
|
7051
7636
|
}),
|
|
7637
|
+
defineTool({
|
|
7638
|
+
name: "canonry_ads_account",
|
|
7639
|
+
title: "Read the live OpenAI ads account",
|
|
7640
|
+
description: "Read live OpenAI Ads account metadata, currency, timezone, status, and account-integrity review state. Use before planning or launch to confirm the connected advertiser account is the intended one and is eligible to serve.",
|
|
7641
|
+
access: "read",
|
|
7642
|
+
tier: "ads",
|
|
7643
|
+
inputSchema: projectInputSchema,
|
|
7644
|
+
annotations: readAnnotations(true),
|
|
7645
|
+
openApiOperations: ["GET /api/v1/projects/{name}/ads/account"],
|
|
7646
|
+
handler: (client2, input) => client2.getAdsAccount(input.project)
|
|
7647
|
+
}),
|
|
7648
|
+
defineTool({
|
|
7649
|
+
name: "canonry_ads_geo_search",
|
|
7650
|
+
title: "Search OpenAI ads locations",
|
|
7651
|
+
description: "Search the live OpenAI Ads geo catalog by place name. Returns provider location IDs and canonical labels; use those IDs in campaign locationIds instead of inventing or guessing targeting identifiers.",
|
|
7652
|
+
access: "read",
|
|
7653
|
+
tier: "ads",
|
|
7654
|
+
inputSchema: adsGeoSearchInputSchema,
|
|
7655
|
+
annotations: readAnnotations(true),
|
|
7656
|
+
openApiOperations: ["GET /api/v1/projects/{name}/ads/geo/search"],
|
|
7657
|
+
handler: (client2, input) => client2.searchAdsGeo(input.project, { q: input.q, limit: input.limit })
|
|
7658
|
+
}),
|
|
7659
|
+
defineTool({
|
|
7660
|
+
name: "canonry_ads_conversion_pixels",
|
|
7661
|
+
title: "List OpenAI ads conversion pixels",
|
|
7662
|
+
description: "List conversion pixels from the live OpenAI ad account. Use with conversion event settings to verify that measurable conversion infrastructure exists before recommending activation or budget changes.",
|
|
7663
|
+
access: "read",
|
|
7664
|
+
tier: "ads",
|
|
7665
|
+
inputSchema: projectInputSchema,
|
|
7666
|
+
annotations: readAnnotations(true),
|
|
7667
|
+
openApiOperations: ["GET /api/v1/projects/{name}/ads/conversions/pixels"],
|
|
7668
|
+
handler: (client2, input) => client2.getAdsConversionPixels(input.project)
|
|
7669
|
+
}),
|
|
7670
|
+
defineTool({
|
|
7671
|
+
name: "canonry_ads_conversion_event_settings",
|
|
7672
|
+
title: "List OpenAI ads conversion event settings",
|
|
7673
|
+
description: "List live OpenAI Ads conversion event settings, attribution windows, and attached pixel or CAPI sources. Use to select and verify the conversion goal before launch.",
|
|
7674
|
+
access: "read",
|
|
7675
|
+
tier: "ads",
|
|
7676
|
+
inputSchema: projectInputSchema,
|
|
7677
|
+
annotations: readAnnotations(true),
|
|
7678
|
+
openApiOperations: ["GET /api/v1/projects/{name}/ads/conversions/event-settings"],
|
|
7679
|
+
handler: (client2, input) => client2.getAdsConversionEventSettings(input.project)
|
|
7680
|
+
}),
|
|
7052
7681
|
defineTool({
|
|
7053
7682
|
name: "canonry_ads_campaigns",
|
|
7054
7683
|
title: "List synced ad campaigns",
|
|
@@ -7082,6 +7711,175 @@ var canonryMcpTools = [
|
|
|
7082
7711
|
openApiOperations: ["GET /api/v1/projects/{name}/ads/summary"],
|
|
7083
7712
|
handler: (client2, input) => client2.getAdsSummary(input.project)
|
|
7084
7713
|
}),
|
|
7714
|
+
defineTool({
|
|
7715
|
+
name: "canonry_ads_operations_unresolved",
|
|
7716
|
+
title: "List unresolved ads mutation receipts",
|
|
7717
|
+
description: "List pending, unknown, or actively reconciling OpenAI Ads mutation receipts that need recovery. Pass nextCursor back as cursor to advance past permanent rows. Use this before new lifecycle work so an ambiguous earlier outcome is settled instead of retried under another key. Route campaign_tree_activate receipts to canonry_ads_operation_resume_activation; use generic reconciliation only for other supported receipt kinds.",
|
|
7718
|
+
access: "read",
|
|
7719
|
+
tier: "ads",
|
|
7720
|
+
inputSchema: adsUnresolvedOperationsInputSchema,
|
|
7721
|
+
annotations: readAnnotations(),
|
|
7722
|
+
openApiOperations: ["GET /api/v1/projects/{name}/ads/operations"],
|
|
7723
|
+
handler: (client2, input) => client2.getUnresolvedAdsOperations(input.project, {
|
|
7724
|
+
state: input.state,
|
|
7725
|
+
limit: input.limit,
|
|
7726
|
+
cursor: input.cursor
|
|
7727
|
+
})
|
|
7728
|
+
}),
|
|
7729
|
+
defineTool({
|
|
7730
|
+
name: "canonry_ads_operation_get",
|
|
7731
|
+
title: "Get an ads mutation receipt",
|
|
7732
|
+
description: "Read the durable receipt for an OpenAI Ads mutation by its caller-supplied operation key. Never retry a pending or unknown receipt with a new key because the upstream request may already have succeeded. Resume campaign_tree_activate receipts through canonry_ads_operation_resume_activation; send other supported receipt kinds to generic reconciliation.",
|
|
7733
|
+
access: "read",
|
|
7734
|
+
tier: "ads",
|
|
7735
|
+
inputSchema: adsOperationInputSchema,
|
|
7736
|
+
annotations: readAnnotations(),
|
|
7737
|
+
openApiOperations: ["GET /api/v1/projects/{name}/ads/operations/{operationKey}"],
|
|
7738
|
+
handler: (client2, input) => client2.getAdsOperation(input.project, input.operationKey)
|
|
7739
|
+
}),
|
|
7740
|
+
defineTool({
|
|
7741
|
+
name: "canonry_ads_operation_reconcile",
|
|
7742
|
+
title: "Reconcile an ads mutation receipt",
|
|
7743
|
+
description: "Verify a checkpointed provider entity against the receipt-bound OpenAI ad account without retrying the original mutation. Uncheckpointed creates remain unresolved because mutable-field matching cannot prove provenance. This generic tool rejects campaign_tree_activate receipts; use canonry_ads_operation_resume_activation for those.",
|
|
7744
|
+
access: "write",
|
|
7745
|
+
tier: "ads",
|
|
7746
|
+
inputSchema: adsOperationReconcileInputSchema,
|
|
7747
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7748
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/operations/{operationKey}/reconcile"],
|
|
7749
|
+
handler: (client2, input) => client2.reconcileAdsOperation(input.project, input.operationKey)
|
|
7750
|
+
}),
|
|
7751
|
+
defineTool({
|
|
7752
|
+
name: "canonry_ads_operation_resume_activation",
|
|
7753
|
+
title: "Resume an ads activation receipt",
|
|
7754
|
+
description: "Resume recovery for an existing campaign_tree_activate receipt using its durable approval grant and ordered step ledger. The request is bodyless, requires ads.activate on the exact executor key already bound to the grant, and cannot replace the operation, grant, manifest, campaign, or account. Canonry inspects provider state and never blindly resends an ambiguous activation mutation.",
|
|
7755
|
+
access: "write",
|
|
7756
|
+
tier: "ads",
|
|
7757
|
+
inputSchema: adsOperationResumeActivationInputSchema,
|
|
7758
|
+
annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true, openWorldHint: true }),
|
|
7759
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/operations/{operationKey}/resume-activation"],
|
|
7760
|
+
handler: (client2, input) => client2.resumeAdsActivation(input.project, input.operationKey)
|
|
7761
|
+
}),
|
|
7762
|
+
defineTool({
|
|
7763
|
+
name: "canonry_ads_image_upload",
|
|
7764
|
+
title: "Upload an ads image from URL",
|
|
7765
|
+
description: "Upload a public HTTPS image URL to the connected OpenAI ad account. The operation key makes a repeated identical request replay its receipt without another upstream upload. Save the returned file entityId for chat-card creation.",
|
|
7766
|
+
access: "write",
|
|
7767
|
+
tier: "ads",
|
|
7768
|
+
inputSchema: adsImageUploadInputSchema,
|
|
7769
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7770
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/files"],
|
|
7771
|
+
handler: (client2, input) => client2.uploadAdsImage(input.project, input.request)
|
|
7772
|
+
}),
|
|
7773
|
+
defineTool({
|
|
7774
|
+
name: "canonry_ads_campaign_create",
|
|
7775
|
+
title: "Create a paused ads campaign",
|
|
7776
|
+
description: "Create an OpenAI Ads campaign PAUSED with an explicit lifetime spend limit and location allowlist. Set biddingType=clicks with one or more provider-issued conversionEventSettingIds for conversion-optimized delivery; omit both for legacy impressions bidding. The server ignores any status concept and always sends paused. Inspect the receipt, then create matching paused ad groups and ads. A human must separately approve the exact tree before this operator can activate it.",
|
|
7777
|
+
access: "write",
|
|
7778
|
+
tier: "ads",
|
|
7779
|
+
inputSchema: adsCampaignCreateInputSchema,
|
|
7780
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7781
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/campaigns"],
|
|
7782
|
+
handler: (client2, input) => client2.createAdsCampaign(input.project, input.request)
|
|
7783
|
+
}),
|
|
7784
|
+
defineTool({
|
|
7785
|
+
name: "canonry_ads_campaign_update",
|
|
7786
|
+
title: "Update an ads campaign",
|
|
7787
|
+
description: "Update a PAUSED campaign copy, dates, lifetime spend limit, or locations without changing status. Active campaigns fail closed: pause first, sync, and use the refreshed upstreamUpdatedAt. A human must approve the exact updated tree before this operator can reactivate it. Uses a durable operation key.",
|
|
7788
|
+
access: "write",
|
|
7789
|
+
tier: "ads",
|
|
7790
|
+
inputSchema: adsCampaignUpdateInputSchema,
|
|
7791
|
+
annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true, openWorldHint: true }),
|
|
7792
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/campaigns/{id}"],
|
|
7793
|
+
handler: (client2, input) => client2.updateAdsCampaign(input.project, input.campaignId, input.request)
|
|
7794
|
+
}),
|
|
7795
|
+
defineTool({
|
|
7796
|
+
name: "canonry_ads_campaign_activate_tree",
|
|
7797
|
+
title: "Activate an approved ads campaign tree",
|
|
7798
|
+
description: "Execute one short-lived human approval grant for the exact paused campaign, ad groups, and reviewed ads named by its manifest. The grant is bound to this executor key and manifest hash. Canonry checkpoints every step, activates ads before parents, verifies active state, and rolls back parent-first on failure. This tool cannot create or widen an approval.",
|
|
7799
|
+
access: "write",
|
|
7800
|
+
tier: "ads",
|
|
7801
|
+
inputSchema: adsCampaignActivateTreeInputSchema,
|
|
7802
|
+
annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true, openWorldHint: true }),
|
|
7803
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/campaigns/{id}/activate-tree"],
|
|
7804
|
+
handler: (client2, input) => client2.activateAdsCampaignTree(input.project, input.campaignId, input.request)
|
|
7805
|
+
}),
|
|
7806
|
+
defineTool({
|
|
7807
|
+
name: "canonry_ads_campaign_pause",
|
|
7808
|
+
title: "Pause an ads campaign",
|
|
7809
|
+
description: "Pause a campaign immediately. Use this first when spend, conversion tracking, landing-page behavior, or policy status is unsafe. The operation is idempotent through its durable operation key.",
|
|
7810
|
+
access: "write",
|
|
7811
|
+
tier: "ads",
|
|
7812
|
+
inputSchema: adsCampaignPauseInputSchema,
|
|
7813
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7814
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/campaigns/{id}/pause"],
|
|
7815
|
+
handler: (client2, input) => client2.pauseAdsCampaign(input.project, input.campaignId, input.request)
|
|
7816
|
+
}),
|
|
7817
|
+
defineTool({
|
|
7818
|
+
name: "canonry_ads_ad_group_create",
|
|
7819
|
+
title: "Create a paused ads ad group",
|
|
7820
|
+
description: "Create a PAUSED ad group under a reviewed campaign. Context hints describe when the audit offer is useful. Set billingEventType=click under a clicks campaign; omit it for the legacy impression mode. Canonry reads the live parent and rejects a billing/bidding mismatch before mutation.",
|
|
7821
|
+
access: "write",
|
|
7822
|
+
tier: "ads",
|
|
7823
|
+
inputSchema: adsAdGroupCreateInputSchema,
|
|
7824
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7825
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/ad-groups"],
|
|
7826
|
+
handler: (client2, input) => client2.createAdsAdGroup(input.project, input.request)
|
|
7827
|
+
}),
|
|
7828
|
+
defineTool({
|
|
7829
|
+
name: "canonry_ads_ad_group_update",
|
|
7830
|
+
title: "Update an ads ad group",
|
|
7831
|
+
description: "Update a PAUSED ad group name, description, context hints, or max bid without changing its billing event or status. Active ad groups fail closed: pause first, sync, and use the refreshed upstreamUpdatedAt. A human must reactivate after review. Uses a durable operation key.",
|
|
7832
|
+
access: "write",
|
|
7833
|
+
tier: "ads",
|
|
7834
|
+
inputSchema: adsAdGroupUpdateInputSchema,
|
|
7835
|
+
annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true, openWorldHint: true }),
|
|
7836
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/ad-groups/{id}"],
|
|
7837
|
+
handler: (client2, input) => client2.updateAdsAdGroup(input.project, input.adGroupId, input.request)
|
|
7838
|
+
}),
|
|
7839
|
+
defineTool({
|
|
7840
|
+
name: "canonry_ads_ad_group_pause",
|
|
7841
|
+
title: "Pause an ads ad group",
|
|
7842
|
+
description: "Pause an ad group through a durable idempotent operation receipt.",
|
|
7843
|
+
access: "write",
|
|
7844
|
+
tier: "ads",
|
|
7845
|
+
inputSchema: adsAdGroupPauseInputSchema,
|
|
7846
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7847
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/ad-groups/{id}/pause"],
|
|
7848
|
+
handler: (client2, input) => client2.pauseAdsAdGroup(input.project, input.adGroupId, input.request)
|
|
7849
|
+
}),
|
|
7850
|
+
defineTool({
|
|
7851
|
+
name: "canonry_ads_ad_create",
|
|
7852
|
+
title: "Create a paused chat-card ad",
|
|
7853
|
+
description: "Create a PAUSED ChatGPT chat-card ad using a previously uploaded file entityId and an HTTPS destination. Title is 3-50 characters and body is at most 100. Activation is deliberately human-only for the beta.",
|
|
7854
|
+
access: "write",
|
|
7855
|
+
tier: "ads",
|
|
7856
|
+
inputSchema: adsAdCreateInputSchema,
|
|
7857
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7858
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/ads"],
|
|
7859
|
+
handler: (client2, input) => client2.createAdsAd(input.project, input.request)
|
|
7860
|
+
}),
|
|
7861
|
+
defineTool({
|
|
7862
|
+
name: "canonry_ads_ad_update",
|
|
7863
|
+
title: "Update a chat-card ad",
|
|
7864
|
+
description: "Update a PAUSED ad name or full chat-card creative without changing status. Active ads fail closed: pause first, sync, and use the refreshed upstreamUpdatedAt. A human must reactivate after review. Uses a durable operation key.",
|
|
7865
|
+
access: "write",
|
|
7866
|
+
tier: "ads",
|
|
7867
|
+
inputSchema: adsAdUpdateInputSchema,
|
|
7868
|
+
annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true, openWorldHint: true }),
|
|
7869
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/ads/{id}"],
|
|
7870
|
+
handler: (client2, input) => client2.updateAdsAd(input.project, input.adId, input.request)
|
|
7871
|
+
}),
|
|
7872
|
+
defineTool({
|
|
7873
|
+
name: "canonry_ads_ad_pause",
|
|
7874
|
+
title: "Pause a chat-card ad",
|
|
7875
|
+
description: "Pause an individual ad through a durable idempotent operation receipt.",
|
|
7876
|
+
access: "write",
|
|
7877
|
+
tier: "ads",
|
|
7878
|
+
inputSchema: adsAdPauseInputSchema,
|
|
7879
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
7880
|
+
openApiOperations: ["POST /api/v1/projects/{name}/ads/ads/{id}/pause"],
|
|
7881
|
+
handler: (client2, input) => client2.pauseAdsAd(input.project, input.adId, input.request)
|
|
7882
|
+
}),
|
|
7085
7883
|
defineTool({
|
|
7086
7884
|
name: "canonry_ads_sync",
|
|
7087
7885
|
title: "Trigger ads sync",
|