@kaminari-ad/mcp 0.9.1 → 0.11.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/CHANGELOG.md CHANGED
@@ -7,6 +7,105 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.11.0] - 2026-07-28
11
+
12
+ ### Added
13
+
14
+ - **Combo-rule match scope.** `create_custom_rule`, `update_custom_rule`, and
15
+ `test_custom_rule` now document the rule-level `config.match_scope` key used
16
+ by `rule_type='combo'`: `"scan"` (the default, and the behaviour when the key
17
+ is absent) counts conditions across the union of all tags on the scan, while
18
+ `"url"` requires every condition to be satisfied by tags on the same link and
19
+ assigns the output tag to that link. The description warns about the traps a
20
+ per-link rule falls into: a combo built only from link-less tags (AI verdicts,
21
+ crawler behaviour) has no link to attach to and never matches, AI verdicts and
22
+ per-link detections are not evaluated together today, and a per-link rule needs
23
+ at least one positive condition. Any other `match_scope` value is rejected
24
+ before the request is sent, so a misspelled scope surfaces as a tool-input
25
+ error instead of a round trip; the API validates `match_scope` on create,
26
+ update, and the rule-test preview as well, so this is early feedback rather
27
+ than the durable guarantee. The rest of a combo config is still validated only
28
+ for admin-authored system rules, which is why the per-link traps are documented
29
+ rather than enforced. `get_custom_rule` and `list_custom_rules` now flag that
30
+ the returned `config` may carry `match_scope` and that it must be resent
31
+ verbatim, since `update_custom_rule` replaces `config` wholesale.
32
+ - **`referrer` on scan and campaign creation.** `create_scan`,
33
+ `create_bulk_scans`, `create_campaign`, and `update_campaign` accept an
34
+ optional http(s) page URL the check is performed from. With `ad_tag` or
35
+ `vast_tag` it is the publisher page the tag is embedded in: the browser
36
+ commits the page document on that URL without fetching the publisher, so the
37
+ creative renders as if embedded there. With `url` or `ad_discovery` it is
38
+ where the visitor came from, sent as the `Referer` of the page request.
39
+ `update_campaign` also accepts `referrer: null` to clear a stored one.
40
+ Scan and campaign responses surface `referrer` too, so an agent can confirm
41
+ what a scan actually ran with.
42
+
43
+ **Release ordering — this depends on an unreleased API.** The snapshots were
44
+ generated from api `feat/scan-referrer`
45
+ ([api!341](https://gitlab.sdev.pw/adverif/api/-/merge_requests/341)). API
46
+ request DTOs are `extra="ignore"`, so an API without the field drops
47
+ `referrer` silently: no 422, the scan runs with no referrer, and the response
48
+ carries no `referrer` key — the agent gets a green result for a check it
49
+ believes ran from a publisher page. **Do not cut the npm tag or the
50
+ `kaminariad-mcp` image until api!341 is merged and deployed to
51
+ `kaminariadprod1`.** Nothing automated enforces this.
52
+
53
+ ### Changed
54
+
55
+ - Regenerated the OpenAPI type + zod-schema snapshots so the `/api/v1` surface
56
+ they describe carries `referrer`. That field is their only delta versus the
57
+ 0.10.0 snapshots.
58
+
59
+ ## [0.10.0] - 2026-07-28
60
+
61
+ ### Added
62
+
63
+ - **Repeats and retries.** `create_scan`, `create_bulk_scans`,
64
+ `create_campaign`, and `update_campaign` accept `repeat_count` (1-20),
65
+ `repeat_mode` (`isolated` | `shared`), and `retry_max_attempts` (0-5).
66
+ `repeat_count` multiplies the scans created — and billed — per
67
+ `url x country x device` combination; `shared` runs a combination's repeats
68
+ in one browser behind one IP with cookies carried over (rejected with 422
69
+ together with ad discovery); `retry_max_attempts` re-crawls the same scan
70
+ after a transient failure without billing twice.
71
+ - **Repeat / retry fields on the read side.** Scan detail surfaces
72
+ `repeat_index`, `repeat_total`, `repeat_session_id`, `repeat_scan_ids`,
73
+ `retry_attempt`, and `retry_max_attempts`; the scan-list brief carries all of
74
+ those except `repeat_scan_ids`; campaign responses echo `repeat_count`,
75
+ `repeat_mode`, and `retry_max_attempts`.
76
+
77
+ ### Fixed
78
+
79
+ - **`list_balance_history` can filter on `card_top_up`.** The API has emitted
80
+ that transaction type for a while — an unfiltered call already returned the
81
+ rows — but the tool's own enum stopped at `crypto_top_up`, so
82
+ `type: ["card_top_up"]` was rejected locally and never reached the API. The
83
+ filter's length cap was one short for the same reason.
84
+ `BalanceTransactionType` is now aliased off the generated schema instead of
85
+ hand-mirrored, so the next regen turns a new value into a compile error.
86
+
87
+ ### Changed
88
+
89
+ - Regenerated the OpenAPI type + zod-schema snapshots against `/api/v1`
90
+ v1.27.0. Besides the repeat / retry fields this picks up the
91
+ `creative-html` / `creative-video` / `vast-xml` artifact endpoints,
92
+ `video.click_through`, `creative_kind` as an enum, `tag_visibility` on custom
93
+ rules, the `card_top_up` balance-transaction type, and the `tag_match` scan
94
+ filter.
95
+ - `creative_kind` is surfaced as an open string rather than the regenerated
96
+ `banner | video` enum, following the same forward-compat policy as
97
+ `block_reason`. A creative kind added on the API side now degrades that one
98
+ field instead of failing the entire `get_scan` / `create_scan` /
99
+ `create_bulk_scans` response until an MCP release ships.
100
+ - `get_scan_screenshot` and `get_scan_landing_screenshot` warn that a resized
101
+ capture is top-cropped past 2.5x its width, and to omit `width` when the
102
+ whole page matters. `get_scan_creative_screenshot` never crops and is
103
+ unchanged.
104
+ - `get_campaign` and `list_campaigns` describe the repeat / retry settings they
105
+ echo, `list_scan_children` explains why those fields are always neutral on a
106
+ discovered-ad child, and `get_scan` documents the creative's `click_through`
107
+ destination.
108
+
10
109
  ## [0.8.0] - 2026-07-10
11
110
 
12
111
  ### Added
package/dist/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { NAME, VERSION, err, ok } from './chunk-JEGBPX3R.js';
2
+ import { NAME, VERSION, err, ok } from './chunk-XSI6SZTX.js';
3
3
  import process from 'process';
4
4
  import { z } from 'zod';
5
5
 
@@ -160,10 +160,10 @@ async function main() {
160
160
  }
161
161
  const config = configResult.value;
162
162
  if (config.transport === "stdio") {
163
- const { bootstrapStdio } = await import('./stdio-bootstrap-YQFKQP2G.js');
163
+ const { bootstrapStdio } = await import('./stdio-bootstrap-QK4ENRPP.js');
164
164
  return bootstrapStdio(config);
165
165
  }
166
- const { bootstrapHttp } = await import('./http-bootstrap-JS2O6I22.js');
166
+ const { bootstrapHttp } = await import('./http-bootstrap-XJNTLL2C.js');
167
167
  return bootstrapHttp(config);
168
168
  }
169
169
  main().then(