@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 +99 -0
- package/dist/bin.js +3 -3
- package/dist/{chunk-R56UDCOA.js → chunk-XCAKB2QW.js} +169 -55
- package/dist/chunk-XCAKB2QW.js.map +1 -0
- package/dist/{chunk-JEGBPX3R.js → chunk-XSI6SZTX.js} +3 -3
- package/dist/{chunk-JEGBPX3R.js.map → chunk-XSI6SZTX.js.map} +1 -1
- package/dist/{http-bootstrap-JS2O6I22.js → http-bootstrap-XJNTLL2C.js} +4 -4
- package/dist/{http-bootstrap-JS2O6I22.js.map → http-bootstrap-XJNTLL2C.js.map} +1 -1
- package/dist/{stdio-bootstrap-YQFKQP2G.js → stdio-bootstrap-QK4ENRPP.js} +4 -4
- package/dist/{stdio-bootstrap-YQFKQP2G.js.map → stdio-bootstrap-QK4ENRPP.js.map} +1 -1
- package/package.json +20 -14
- package/dist/chunk-R56UDCOA.js.map +0 -1
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-
|
|
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-
|
|
163
|
+
const { bootstrapStdio } = await import('./stdio-bootstrap-QK4ENRPP.js');
|
|
164
164
|
return bootstrapStdio(config);
|
|
165
165
|
}
|
|
166
|
-
const { bootstrapHttp } = await import('./http-bootstrap-
|
|
166
|
+
const { bootstrapHttp } = await import('./http-bootstrap-XJNTLL2C.js');
|
|
167
167
|
return bootstrapHttp(config);
|
|
168
168
|
}
|
|
169
169
|
main().then(
|