adapty 0.9.5 → 0.10.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.
@@ -1,73 +1,12 @@
1
1
  {
2
2
  "commands": {
3
- "access-levels:create": {
3
+ "feedback": {
4
4
  "aliases": [],
5
5
  "args": {},
6
- "description": "Create a custom access level",
7
- "examples": [
8
- "<%= config.bin %> access-levels create --app 550e8400-... --sdk-id vip --title \"VIP Access\""
9
- ],
10
- "flags": {
11
- "json": {
12
- "description": "Format output as json.",
13
- "helpGroup": "GLOBAL",
14
- "name": "json",
15
- "allowNo": false,
16
- "type": "boolean"
17
- },
18
- "app": {
19
- "description": "App ID (UUID)",
20
- "name": "app",
21
- "required": true,
22
- "hasDynamicHelp": false,
23
- "multiple": false,
24
- "type": "option"
25
- },
26
- "sdk-id": {
27
- "description": "Access level SDK identifier",
28
- "name": "sdk-id",
29
- "required": true,
30
- "hasDynamicHelp": false,
31
- "multiple": false,
32
- "type": "option"
33
- },
34
- "title": {
35
- "description": "Access level title",
36
- "name": "title",
37
- "required": true,
38
- "hasDynamicHelp": false,
39
- "multiple": false,
40
- "type": "option"
41
- }
42
- },
43
- "hasDynamicHelp": false,
44
- "hiddenAliases": [],
45
- "id": "access-levels:create",
46
- "pluginAlias": "adapty",
47
- "pluginName": "adapty",
48
- "pluginType": "core",
49
- "strict": true,
50
- "enableJsonFlag": true,
51
- "isESM": true,
52
- "relativePath": [
53
- "dist",
54
- "commands",
55
- "access-levels",
56
- "create.js"
57
- ]
58
- },
59
- "access-levels:get": {
60
- "aliases": [],
61
- "args": {
62
- "access_level_id": {
63
- "description": "Access Level ID (UUID)",
64
- "name": "access_level_id",
65
- "required": true
66
- }
67
- },
68
- "description": "Get access level details",
6
+ "description": "Send a short report on how a task with the Adapty CLI or an Adapty skill went.\nMeant for AI agents: say what worked, what failed or confused you. Put app, flow and other ids into the message if they matter.\nLeave out secrets and personal data.",
69
7
  "examples": [
70
- "<%= config.bin %> access-levels get --app UUID 550e8400-e29b-41d4-a716-446655440000"
8
+ "<%= config.bin %> feedback --sentiment negative --feature flow-generator --message \"flows config update rejected a valid button component twice\"",
9
+ "<%= config.bin %> feedback --sentiment positive --message \"Imported the paywall from Canva in one pass\" --context \"Building an onboarding flow from a Canva file\""
71
10
  ],
72
11
  "flags": {
73
12
  "json": {
@@ -77,120 +16,37 @@
77
16
  "allowNo": false,
78
17
  "type": "boolean"
79
18
  },
80
- "app": {
81
- "description": "App ID (UUID)",
82
- "name": "app",
19
+ "sentiment": {
20
+ "description": "How the task went",
21
+ "name": "sentiment",
83
22
  "required": true,
84
23
  "hasDynamicHelp": false,
85
24
  "multiple": false,
25
+ "options": [
26
+ "positive",
27
+ "neutral",
28
+ "negative"
29
+ ],
86
30
  "type": "option"
87
- }
88
- },
89
- "hasDynamicHelp": false,
90
- "hiddenAliases": [],
91
- "id": "access-levels:get",
92
- "pluginAlias": "adapty",
93
- "pluginName": "adapty",
94
- "pluginType": "core",
95
- "strict": true,
96
- "enableJsonFlag": true,
97
- "isESM": true,
98
- "relativePath": [
99
- "dist",
100
- "commands",
101
- "access-levels",
102
- "get.js"
103
- ]
104
- },
105
- "access-levels:list": {
106
- "aliases": [],
107
- "args": {},
108
- "description": "List access levels for an app",
109
- "examples": [
110
- "<%= config.bin %> access-levels list --app 550e8400-e29b-41d4-a716-446655440000"
111
- ],
112
- "flags": {
113
- "json": {
114
- "description": "Format output as json.",
115
- "helpGroup": "GLOBAL",
116
- "name": "json",
117
- "allowNo": false,
118
- "type": "boolean"
119
31
  },
120
- "app": {
121
- "description": "App ID (UUID)",
122
- "name": "app",
32
+ "message": {
33
+ "description": "The report: a few sentences on what happened",
34
+ "name": "message",
123
35
  "required": true,
124
36
  "hasDynamicHelp": false,
125
37
  "multiple": false,
126
38
  "type": "option"
127
39
  },
128
- "page": {
129
- "description": "Page number",
130
- "name": "page",
131
- "default": 1,
132
- "hasDynamicHelp": false,
133
- "multiple": false,
134
- "type": "option"
135
- },
136
- "page-size": {
137
- "description": "Items per page (max 100)",
138
- "name": "page-size",
139
- "default": 20,
140
- "hasDynamicHelp": false,
141
- "multiple": false,
142
- "type": "option"
143
- }
144
- },
145
- "hasDynamicHelp": false,
146
- "hiddenAliases": [],
147
- "id": "access-levels:list",
148
- "pluginAlias": "adapty",
149
- "pluginName": "adapty",
150
- "pluginType": "core",
151
- "strict": true,
152
- "enableJsonFlag": true,
153
- "isESM": true,
154
- "relativePath": [
155
- "dist",
156
- "commands",
157
- "access-levels",
158
- "list.js"
159
- ]
160
- },
161
- "access-levels:update": {
162
- "aliases": [],
163
- "args": {
164
- "access_level_id": {
165
- "description": "Access Level ID (UUID)",
166
- "name": "access_level_id",
167
- "required": true
168
- }
169
- },
170
- "description": "Update an access level",
171
- "examples": [
172
- "<%= config.bin %> access-levels update --app UUID 550e8400-... --title \"VIP Access\""
173
- ],
174
- "flags": {
175
- "json": {
176
- "description": "Format output as json.",
177
- "helpGroup": "GLOBAL",
178
- "name": "json",
179
- "allowNo": false,
180
- "type": "boolean"
181
- },
182
- "app": {
183
- "description": "App ID (UUID)",
184
- "name": "app",
185
- "required": true,
40
+ "feature": {
41
+ "description": "Feature or skill the report comes from; Adapty records \"unknown\" when omitted",
42
+ "name": "feature",
186
43
  "hasDynamicHelp": false,
187
44
  "multiple": false,
188
45
  "type": "option"
189
46
  },
190
- "title": {
191
- "description": "Access level title",
192
- "name": "title",
193
- "required": true,
47
+ "context": {
48
+ "description": "What you were doing at that moment",
49
+ "name": "context",
194
50
  "hasDynamicHelp": false,
195
51
  "multiple": false,
196
52
  "type": "option"
@@ -198,18 +54,16 @@
198
54
  },
199
55
  "hasDynamicHelp": false,
200
56
  "hiddenAliases": [],
201
- "id": "access-levels:update",
57
+ "id": "feedback",
202
58
  "pluginAlias": "adapty",
203
59
  "pluginName": "adapty",
204
60
  "pluginType": "core",
205
61
  "strict": true,
206
- "enableJsonFlag": true,
207
62
  "isESM": true,
208
63
  "relativePath": [
209
64
  "dist",
210
65
  "commands",
211
- "access-levels",
212
- "update.js"
66
+ "feedback.js"
213
67
  ]
214
68
  },
215
69
  "apps:create": {
@@ -421,13 +275,12 @@
421
275
  "update.js"
422
276
  ]
423
277
  },
424
- "asa:connect": {
278
+ "access-levels:create": {
425
279
  "aliases": [],
426
280
  "args": {},
427
- "description": "Connect an Apple Search Ads account to this company",
281
+ "description": "Create a custom access level",
428
282
  "examples": [
429
- "<%= config.bin %> asa connect",
430
- "<%= config.bin %> asa connect --no-wait"
283
+ "<%= config.bin %> access-levels create --app 550e8400-... --sdk-id vip --title \"VIP Access\""
431
284
  ],
432
285
  "flags": {
433
286
  "json": {
@@ -437,24 +290,34 @@
437
290
  "allowNo": false,
438
291
  "type": "boolean"
439
292
  },
440
- "timeout": {
441
- "description": "Seconds to wait for the browser step",
442
- "name": "timeout",
443
- "default": 300,
293
+ "app": {
294
+ "description": "App ID (UUID)",
295
+ "name": "app",
296
+ "required": true,
444
297
  "hasDynamicHelp": false,
445
298
  "multiple": false,
446
299
  "type": "option"
447
300
  },
448
- "wait": {
449
- "description": "Wait until Apple Ads reports as connected",
450
- "name": "wait",
451
- "allowNo": true,
452
- "type": "boolean"
301
+ "sdk-id": {
302
+ "description": "Access level SDK identifier",
303
+ "name": "sdk-id",
304
+ "required": true,
305
+ "hasDynamicHelp": false,
306
+ "multiple": false,
307
+ "type": "option"
308
+ },
309
+ "title": {
310
+ "description": "Access level title",
311
+ "name": "title",
312
+ "required": true,
313
+ "hasDynamicHelp": false,
314
+ "multiple": false,
315
+ "type": "option"
453
316
  }
454
317
  },
455
318
  "hasDynamicHelp": false,
456
319
  "hiddenAliases": [],
457
- "id": "asa:connect",
320
+ "id": "access-levels:create",
458
321
  "pluginAlias": "adapty",
459
322
  "pluginName": "adapty",
460
323
  "pluginType": "core",
@@ -464,16 +327,22 @@
464
327
  "relativePath": [
465
328
  "dist",
466
329
  "commands",
467
- "asa",
468
- "connect.js"
330
+ "access-levels",
331
+ "create.js"
469
332
  ]
470
333
  },
471
- "asa:whoami": {
334
+ "access-levels:get": {
472
335
  "aliases": [],
473
- "args": {},
474
- "description": "Show which company the token unlocks, whether Apple Ads is connected, and the request budgets it gets\n\nLimits are raised per company, so read them here rather than assuming the defaults: metrics_limit_per_minute\nand metrics_burst_limit govern asa metrics, keywords_read_limit_per_minute the keyword lists,\nmetrics_inflight_limit how many analytics calls may overlap, and max_breakdown_rows_per_page the size a\ngrouped page may project to before it is refused.",
336
+ "args": {
337
+ "access_level_id": {
338
+ "description": "Access Level ID (UUID)",
339
+ "name": "access_level_id",
340
+ "required": true
341
+ }
342
+ },
343
+ "description": "Get access level details",
475
344
  "examples": [
476
- "<%= config.bin %> asa whoami"
345
+ "<%= config.bin %> access-levels get --app UUID 550e8400-e29b-41d4-a716-446655440000"
477
346
  ],
478
347
  "flags": {
479
348
  "json": {
@@ -482,11 +351,19 @@
482
351
  "name": "json",
483
352
  "allowNo": false,
484
353
  "type": "boolean"
354
+ },
355
+ "app": {
356
+ "description": "App ID (UUID)",
357
+ "name": "app",
358
+ "required": true,
359
+ "hasDynamicHelp": false,
360
+ "multiple": false,
361
+ "type": "option"
485
362
  }
486
363
  },
487
364
  "hasDynamicHelp": false,
488
365
  "hiddenAliases": [],
489
- "id": "asa:whoami",
366
+ "id": "access-levels:get",
490
367
  "pluginAlias": "adapty",
491
368
  "pluginName": "adapty",
492
369
  "pluginType": "core",
@@ -496,17 +373,16 @@
496
373
  "relativePath": [
497
374
  "dist",
498
375
  "commands",
499
- "asa",
500
- "whoami.js"
376
+ "access-levels",
377
+ "get.js"
501
378
  ]
502
379
  },
503
- "attribution:dimensions": {
380
+ "access-levels:list": {
504
381
  "aliases": [],
505
382
  "args": {},
506
- "description": "List the dimensions an attribution report can group or filter by (not scoped to an app)",
383
+ "description": "List access levels for an app",
507
384
  "examples": [
508
- "<%= config.bin %> attribution dimensions",
509
- "<%= config.bin %> attribution dimensions --json"
385
+ "<%= config.bin %> access-levels list --app 550e8400-e29b-41d4-a716-446655440000"
510
386
  ],
511
387
  "flags": {
512
388
  "json": {
@@ -515,15 +391,205 @@
515
391
  "name": "json",
516
392
  "allowNo": false,
517
393
  "type": "boolean"
518
- }
519
- },
520
- "hasDynamicHelp": false,
521
- "hiddenAliases": [],
522
- "id": "attribution:dimensions",
523
- "pluginAlias": "adapty",
524
- "pluginName": "adapty",
525
- "pluginType": "core",
526
- "strict": true,
394
+ },
395
+ "app": {
396
+ "description": "App ID (UUID)",
397
+ "name": "app",
398
+ "required": true,
399
+ "hasDynamicHelp": false,
400
+ "multiple": false,
401
+ "type": "option"
402
+ },
403
+ "page": {
404
+ "description": "Page number",
405
+ "name": "page",
406
+ "default": 1,
407
+ "hasDynamicHelp": false,
408
+ "multiple": false,
409
+ "type": "option"
410
+ },
411
+ "page-size": {
412
+ "description": "Items per page (max 100)",
413
+ "name": "page-size",
414
+ "default": 20,
415
+ "hasDynamicHelp": false,
416
+ "multiple": false,
417
+ "type": "option"
418
+ }
419
+ },
420
+ "hasDynamicHelp": false,
421
+ "hiddenAliases": [],
422
+ "id": "access-levels:list",
423
+ "pluginAlias": "adapty",
424
+ "pluginName": "adapty",
425
+ "pluginType": "core",
426
+ "strict": true,
427
+ "enableJsonFlag": true,
428
+ "isESM": true,
429
+ "relativePath": [
430
+ "dist",
431
+ "commands",
432
+ "access-levels",
433
+ "list.js"
434
+ ]
435
+ },
436
+ "access-levels:update": {
437
+ "aliases": [],
438
+ "args": {
439
+ "access_level_id": {
440
+ "description": "Access Level ID (UUID)",
441
+ "name": "access_level_id",
442
+ "required": true
443
+ }
444
+ },
445
+ "description": "Update an access level",
446
+ "examples": [
447
+ "<%= config.bin %> access-levels update --app UUID 550e8400-... --title \"VIP Access\""
448
+ ],
449
+ "flags": {
450
+ "json": {
451
+ "description": "Format output as json.",
452
+ "helpGroup": "GLOBAL",
453
+ "name": "json",
454
+ "allowNo": false,
455
+ "type": "boolean"
456
+ },
457
+ "app": {
458
+ "description": "App ID (UUID)",
459
+ "name": "app",
460
+ "required": true,
461
+ "hasDynamicHelp": false,
462
+ "multiple": false,
463
+ "type": "option"
464
+ },
465
+ "title": {
466
+ "description": "Access level title",
467
+ "name": "title",
468
+ "required": true,
469
+ "hasDynamicHelp": false,
470
+ "multiple": false,
471
+ "type": "option"
472
+ }
473
+ },
474
+ "hasDynamicHelp": false,
475
+ "hiddenAliases": [],
476
+ "id": "access-levels:update",
477
+ "pluginAlias": "adapty",
478
+ "pluginName": "adapty",
479
+ "pluginType": "core",
480
+ "strict": true,
481
+ "enableJsonFlag": true,
482
+ "isESM": true,
483
+ "relativePath": [
484
+ "dist",
485
+ "commands",
486
+ "access-levels",
487
+ "update.js"
488
+ ]
489
+ },
490
+ "asa:connect": {
491
+ "aliases": [],
492
+ "args": {},
493
+ "description": "Connect an Apple Search Ads account to this company",
494
+ "examples": [
495
+ "<%= config.bin %> asa connect",
496
+ "<%= config.bin %> asa connect --no-wait"
497
+ ],
498
+ "flags": {
499
+ "json": {
500
+ "description": "Format output as json.",
501
+ "helpGroup": "GLOBAL",
502
+ "name": "json",
503
+ "allowNo": false,
504
+ "type": "boolean"
505
+ },
506
+ "timeout": {
507
+ "description": "Seconds to wait for the browser step",
508
+ "name": "timeout",
509
+ "default": 300,
510
+ "hasDynamicHelp": false,
511
+ "multiple": false,
512
+ "type": "option"
513
+ },
514
+ "wait": {
515
+ "description": "Wait until Apple Ads reports as connected",
516
+ "name": "wait",
517
+ "allowNo": true,
518
+ "type": "boolean"
519
+ }
520
+ },
521
+ "hasDynamicHelp": false,
522
+ "hiddenAliases": [],
523
+ "id": "asa:connect",
524
+ "pluginAlias": "adapty",
525
+ "pluginName": "adapty",
526
+ "pluginType": "core",
527
+ "strict": true,
528
+ "enableJsonFlag": true,
529
+ "isESM": true,
530
+ "relativePath": [
531
+ "dist",
532
+ "commands",
533
+ "asa",
534
+ "connect.js"
535
+ ]
536
+ },
537
+ "asa:whoami": {
538
+ "aliases": [],
539
+ "args": {},
540
+ "description": "Show which company the token unlocks, whether Apple Ads is connected, and the request budgets it gets\n\nLimits are raised per company, so read them here rather than assuming the defaults: metrics_limit_per_minute\nand metrics_burst_limit govern asa metrics, keywords_read_limit_per_minute the keyword lists,\nmetrics_inflight_limit how many analytics calls may overlap, and max_breakdown_rows_per_page the size a\ngrouped page may project to before it is refused.",
541
+ "examples": [
542
+ "<%= config.bin %> asa whoami"
543
+ ],
544
+ "flags": {
545
+ "json": {
546
+ "description": "Format output as json.",
547
+ "helpGroup": "GLOBAL",
548
+ "name": "json",
549
+ "allowNo": false,
550
+ "type": "boolean"
551
+ }
552
+ },
553
+ "hasDynamicHelp": false,
554
+ "hiddenAliases": [],
555
+ "id": "asa:whoami",
556
+ "pluginAlias": "adapty",
557
+ "pluginName": "adapty",
558
+ "pluginType": "core",
559
+ "strict": true,
560
+ "enableJsonFlag": true,
561
+ "isESM": true,
562
+ "relativePath": [
563
+ "dist",
564
+ "commands",
565
+ "asa",
566
+ "whoami.js"
567
+ ]
568
+ },
569
+ "attribution:dimensions": {
570
+ "aliases": [],
571
+ "args": {},
572
+ "description": "List the dimensions an attribution report can group or filter by (not scoped to an app)",
573
+ "examples": [
574
+ "<%= config.bin %> attribution dimensions",
575
+ "<%= config.bin %> attribution dimensions --json"
576
+ ],
577
+ "flags": {
578
+ "json": {
579
+ "description": "Format output as json.",
580
+ "helpGroup": "GLOBAL",
581
+ "name": "json",
582
+ "allowNo": false,
583
+ "type": "boolean"
584
+ }
585
+ },
586
+ "hasDynamicHelp": false,
587
+ "hiddenAliases": [],
588
+ "id": "attribution:dimensions",
589
+ "pluginAlias": "adapty",
590
+ "pluginName": "adapty",
591
+ "pluginType": "core",
592
+ "strict": true,
527
593
  "enableJsonFlag": true,
528
594
  "isESM": true,
529
595
  "relativePath": [
@@ -2053,13 +2119,14 @@
2053
2119
  "update.js"
2054
2120
  ]
2055
2121
  },
2056
- "segments:create": {
2122
+ "placements:create": {
2057
2123
  "aliases": [],
2058
2124
  "args": {},
2059
- "description": "Create a segment from filters over profile fields\n\nFilters are written as field:OPERATOR:value[,value...] and validated by the server. Apple Search Ads\nattribution uses campaign, ad_group and creative (a keyword) with Apple ids as values; build those from\nASA entities with `asa segments create` instead of copying ids by hand.",
2125
+ "description": "Create a placement with a paywall",
2060
2126
  "examples": [
2061
- "<%= config.bin %> segments create --app UUID --title \"[ASA] Campaign: Brand\" --filter campaign:IN:2144520245",
2062
- "<%= config.bin %> segments create --app UUID --title \"US installs\" --filter ip_country:IN:US --filter install_date:>=:2026-01-01"
2127
+ "<%= config.bin %> placements create --app UUID --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"paywall\",\"segment_ids\":[],\"paywall_id\":\"PAYWALL_UUID\",\"priority\":0}]'",
2128
+ "<%= config.bin %> placements create --app UUID --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"flow\",\"segment_ids\":[],\"flow_id\":\"FLOW_UUID\",\"priority\":0}]'",
2129
+ "<%= config.bin %> placements create --app UUID --title \"Default\" --developer-id default --paywall-id PAYWALL_UUID"
2063
2130
  ],
2064
2131
  "flags": {
2065
2132
  "json": {
@@ -2077,23 +2144,30 @@
2077
2144
  "multiple": false,
2078
2145
  "type": "option"
2079
2146
  },
2080
- "description": {
2081
- "description": "Segment description",
2082
- "name": "description",
2147
+ "audiences": {
2148
+ "description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
2149
+ "name": "audiences",
2083
2150
  "hasDynamicHelp": false,
2084
2151
  "multiple": false,
2085
2152
  "type": "option"
2086
2153
  },
2087
- "filter": {
2088
- "description": "Filter as field:OPERATOR:value[,value...] (e.g. campaign:IN:2144520245), field:IS NULL, or a JSON object {\"field_name\",\"operator\",\"value_list\"}; repeatable",
2089
- "name": "filter",
2154
+ "developer-id": {
2155
+ "description": "Developer ID for the placement",
2156
+ "name": "developer-id",
2090
2157
  "required": true,
2091
2158
  "hasDynamicHelp": false,
2092
- "multiple": true,
2159
+ "multiple": false,
2160
+ "type": "option"
2161
+ },
2162
+ "paywall-id": {
2163
+ "description": "Paywall ID (UUID). DEPRECATED: use --audiences.",
2164
+ "name": "paywall-id",
2165
+ "hasDynamicHelp": false,
2166
+ "multiple": false,
2093
2167
  "type": "option"
2094
2168
  },
2095
2169
  "title": {
2096
- "description": "Segment title",
2170
+ "description": "Placement title",
2097
2171
  "name": "title",
2098
2172
  "required": true,
2099
2173
  "hasDynamicHelp": false,
@@ -2103,7 +2177,7 @@
2103
2177
  },
2104
2178
  "hasDynamicHelp": false,
2105
2179
  "hiddenAliases": [],
2106
- "id": "segments:create",
2180
+ "id": "placements:create",
2107
2181
  "pluginAlias": "adapty",
2108
2182
  "pluginName": "adapty",
2109
2183
  "pluginType": "core",
@@ -2113,22 +2187,22 @@
2113
2187
  "relativePath": [
2114
2188
  "dist",
2115
2189
  "commands",
2116
- "segments",
2190
+ "placements",
2117
2191
  "create.js"
2118
2192
  ]
2119
2193
  },
2120
- "segments:get": {
2194
+ "placements:get": {
2121
2195
  "aliases": [],
2122
2196
  "args": {
2123
- "segment_id": {
2124
- "description": "Segment ID (UUID)",
2125
- "name": "segment_id",
2197
+ "placement_id": {
2198
+ "description": "Placement ID (UUID)",
2199
+ "name": "placement_id",
2126
2200
  "required": true
2127
2201
  }
2128
2202
  },
2129
- "description": "Get segment details",
2203
+ "description": "Get placement details",
2130
2204
  "examples": [
2131
- "<%= config.bin %> segments get --app UUID 550e8400-e29b-41d4-a716-446655440000"
2205
+ "<%= config.bin %> placements get --app UUID 550e8400-e29b-41d4-a716-446655440000"
2132
2206
  ],
2133
2207
  "flags": {
2134
2208
  "json": {
@@ -2149,7 +2223,7 @@
2149
2223
  },
2150
2224
  "hasDynamicHelp": false,
2151
2225
  "hiddenAliases": [],
2152
- "id": "segments:get",
2226
+ "id": "placements:get",
2153
2227
  "pluginAlias": "adapty",
2154
2228
  "pluginName": "adapty",
2155
2229
  "pluginType": "core",
@@ -2159,16 +2233,16 @@
2159
2233
  "relativePath": [
2160
2234
  "dist",
2161
2235
  "commands",
2162
- "segments",
2236
+ "placements",
2163
2237
  "get.js"
2164
2238
  ]
2165
2239
  },
2166
- "segments:list": {
2240
+ "placements:list": {
2167
2241
  "aliases": [],
2168
2242
  "args": {},
2169
- "description": "List segments for an app",
2243
+ "description": "List placements for an app",
2170
2244
  "examples": [
2171
- "<%= config.bin %> segments list --app 550e8400-..."
2245
+ "<%= config.bin %> placements list --app 550e8400-..."
2172
2246
  ],
2173
2247
  "flags": {
2174
2248
  "json": {
@@ -2205,7 +2279,7 @@
2205
2279
  },
2206
2280
  "hasDynamicHelp": false,
2207
2281
  "hiddenAliases": [],
2208
- "id": "segments:list",
2282
+ "id": "placements:list",
2209
2283
  "pluginAlias": "adapty",
2210
2284
  "pluginName": "adapty",
2211
2285
  "pluginType": "core",
@@ -2215,22 +2289,24 @@
2215
2289
  "relativePath": [
2216
2290
  "dist",
2217
2291
  "commands",
2218
- "segments",
2292
+ "placements",
2219
2293
  "list.js"
2220
2294
  ]
2221
2295
  },
2222
- "segments:update": {
2296
+ "placements:update": {
2223
2297
  "aliases": [],
2224
2298
  "args": {
2225
- "segment_id": {
2226
- "description": "Segment ID (UUID)",
2227
- "name": "segment_id",
2299
+ "placement_id": {
2300
+ "description": "Placement ID (UUID)",
2301
+ "name": "placement_id",
2228
2302
  "required": true
2229
2303
  }
2230
2304
  },
2231
- "description": "Replace a segment's title, description and filters\n\nThe server takes the whole segment, as the dashboard sends it: pass every filter you want to keep, not only\nthe changed one. Read the current ones with `segments get`.",
2305
+ "description": "Update a placement",
2232
2306
  "examples": [
2233
- "<%= config.bin %> segments update --app UUID 550e8400-e29b-41d4-a716-446655440000 --title \"[ASA] Campaign: Brand\" --filter campaign:IN:2144520245"
2307
+ "<%= config.bin %> placements update --app UUID 550e8400-... --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"paywall\",\"segment_ids\":[],\"paywall_id\":\"PAYWALL_UUID\",\"priority\":0}]'",
2308
+ "<%= config.bin %> placements update --app UUID 550e8400-... --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"flow\",\"segment_ids\":[],\"flow_id\":\"FLOW_UUID\",\"priority\":0}]'",
2309
+ "<%= config.bin %> placements update --app UUID 550e8400-... --title \"Default\" --developer-id default --paywall-id PAYWALL_UUID"
2234
2310
  ],
2235
2311
  "flags": {
2236
2312
  "json": {
@@ -2248,23 +2324,30 @@
2248
2324
  "multiple": false,
2249
2325
  "type": "option"
2250
2326
  },
2251
- "description": {
2252
- "description": "Segment description",
2253
- "name": "description",
2327
+ "audiences": {
2328
+ "description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
2329
+ "name": "audiences",
2254
2330
  "hasDynamicHelp": false,
2255
2331
  "multiple": false,
2256
2332
  "type": "option"
2257
2333
  },
2258
- "filter": {
2259
- "description": "Filter as field:OPERATOR:value[,value...] (e.g. campaign:IN:2144520245), field:IS NULL, or a JSON object {\"field_name\",\"operator\",\"value_list\"}; repeatable",
2260
- "name": "filter",
2334
+ "developer-id": {
2335
+ "description": "Developer ID for the placement",
2336
+ "name": "developer-id",
2261
2337
  "required": true,
2262
2338
  "hasDynamicHelp": false,
2263
- "multiple": true,
2339
+ "multiple": false,
2340
+ "type": "option"
2341
+ },
2342
+ "paywall-id": {
2343
+ "description": "Paywall ID (UUID). DEPRECATED: use --audiences.",
2344
+ "name": "paywall-id",
2345
+ "hasDynamicHelp": false,
2346
+ "multiple": false,
2264
2347
  "type": "option"
2265
2348
  },
2266
2349
  "title": {
2267
- "description": "Segment title",
2350
+ "description": "Placement title",
2268
2351
  "name": "title",
2269
2352
  "required": true,
2270
2353
  "hasDynamicHelp": false,
@@ -2274,7 +2357,7 @@
2274
2357
  },
2275
2358
  "hasDynamicHelp": false,
2276
2359
  "hiddenAliases": [],
2277
- "id": "segments:update",
2360
+ "id": "placements:update",
2278
2361
  "pluginAlias": "adapty",
2279
2362
  "pluginName": "adapty",
2280
2363
  "pluginType": "core",
@@ -2284,18 +2367,16 @@
2284
2367
  "relativePath": [
2285
2368
  "dist",
2286
2369
  "commands",
2287
- "segments",
2370
+ "placements",
2288
2371
  "update.js"
2289
2372
  ]
2290
2373
  },
2291
- "placements:create": {
2374
+ "products:create": {
2292
2375
  "aliases": [],
2293
2376
  "args": {},
2294
- "description": "Create a placement with a paywall",
2377
+ "description": "Create a product with vendor products per platform",
2295
2378
  "examples": [
2296
- "<%= config.bin %> placements create --app UUID --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"paywall\",\"segment_ids\":[],\"paywall_id\":\"PAYWALL_UUID\",\"priority\":0}]'",
2297
- "<%= config.bin %> placements create --app UUID --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"flow\",\"segment_ids\":[],\"flow_id\":\"FLOW_UUID\",\"priority\":0}]'",
2298
- "<%= config.bin %> placements create --app UUID --title \"Default\" --developer-id default --paywall-id PAYWALL_UUID"
2379
+ "<%= config.bin %> products create --app UUID --title \"Monthly\" --access-level-id UUID --period monthly --ios-product-id com.example.monthly"
2299
2380
  ],
2300
2381
  "flags": {
2301
2382
  "json": {
@@ -2313,30 +2394,80 @@
2313
2394
  "multiple": false,
2314
2395
  "type": "option"
2315
2396
  },
2316
- "audiences": {
2317
- "description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
2318
- "name": "audiences",
2397
+ "access-level-id": {
2398
+ "description": "Access level ID (UUID)",
2399
+ "name": "access-level-id",
2400
+ "required": true,
2319
2401
  "hasDynamicHelp": false,
2320
2402
  "multiple": false,
2321
2403
  "type": "option"
2322
2404
  },
2323
- "developer-id": {
2324
- "description": "Developer ID for the placement",
2325
- "name": "developer-id",
2405
+ "android-base-plan-id": {
2406
+ "description": "Android base plan ID",
2407
+ "helpGroup": "STORE BINDINGS",
2408
+ "name": "android-base-plan-id",
2409
+ "hasDynamicHelp": false,
2410
+ "multiple": false,
2411
+ "type": "option"
2412
+ },
2413
+ "android-product-id": {
2414
+ "description": "Android product ID",
2415
+ "helpGroup": "STORE BINDINGS",
2416
+ "name": "android-product-id",
2417
+ "hasDynamicHelp": false,
2418
+ "multiple": false,
2419
+ "type": "option"
2420
+ },
2421
+ "ios-product-id": {
2422
+ "description": "iOS product ID",
2423
+ "helpGroup": "STORE BINDINGS",
2424
+ "name": "ios-product-id",
2425
+ "hasDynamicHelp": false,
2426
+ "multiple": false,
2427
+ "type": "option"
2428
+ },
2429
+ "paddle-price-id": {
2430
+ "description": "Paddle price ID (requires --paddle-product-id)",
2431
+ "helpGroup": "STORE BINDINGS",
2432
+ "name": "paddle-price-id",
2433
+ "hasDynamicHelp": false,
2434
+ "multiple": false,
2435
+ "type": "option"
2436
+ },
2437
+ "paddle-product-id": {
2438
+ "description": "Paddle product ID (requires --paddle-price-id)",
2439
+ "helpGroup": "STORE BINDINGS",
2440
+ "name": "paddle-product-id",
2441
+ "hasDynamicHelp": false,
2442
+ "multiple": false,
2443
+ "type": "option"
2444
+ },
2445
+ "period": {
2446
+ "description": "Subscription period (weekly, monthly, two_months, trimonthly, semiannual, annual, lifetime)",
2447
+ "name": "period",
2326
2448
  "required": true,
2327
2449
  "hasDynamicHelp": false,
2328
2450
  "multiple": false,
2329
2451
  "type": "option"
2330
2452
  },
2331
- "paywall-id": {
2332
- "description": "Paywall ID (UUID). DEPRECATED: use --audiences.",
2333
- "name": "paywall-id",
2453
+ "stripe-price-id": {
2454
+ "description": "Stripe price ID (requires --stripe-product-id)",
2455
+ "helpGroup": "STORE BINDINGS",
2456
+ "name": "stripe-price-id",
2457
+ "hasDynamicHelp": false,
2458
+ "multiple": false,
2459
+ "type": "option"
2460
+ },
2461
+ "stripe-product-id": {
2462
+ "description": "Stripe product ID (requires --stripe-price-id)",
2463
+ "helpGroup": "STORE BINDINGS",
2464
+ "name": "stripe-product-id",
2334
2465
  "hasDynamicHelp": false,
2335
2466
  "multiple": false,
2336
2467
  "type": "option"
2337
2468
  },
2338
2469
  "title": {
2339
- "description": "Placement title",
2470
+ "description": "Product title",
2340
2471
  "name": "title",
2341
2472
  "required": true,
2342
2473
  "hasDynamicHelp": false,
@@ -2346,7 +2477,7 @@
2346
2477
  },
2347
2478
  "hasDynamicHelp": false,
2348
2479
  "hiddenAliases": [],
2349
- "id": "placements:create",
2480
+ "id": "products:create",
2350
2481
  "pluginAlias": "adapty",
2351
2482
  "pluginName": "adapty",
2352
2483
  "pluginType": "core",
@@ -2356,22 +2487,22 @@
2356
2487
  "relativePath": [
2357
2488
  "dist",
2358
2489
  "commands",
2359
- "placements",
2490
+ "products",
2360
2491
  "create.js"
2361
2492
  ]
2362
2493
  },
2363
- "placements:get": {
2494
+ "products:get": {
2364
2495
  "aliases": [],
2365
2496
  "args": {
2366
- "placement_id": {
2367
- "description": "Placement ID (UUID)",
2368
- "name": "placement_id",
2497
+ "product_id": {
2498
+ "description": "Product ID (UUID)",
2499
+ "name": "product_id",
2369
2500
  "required": true
2370
2501
  }
2371
2502
  },
2372
- "description": "Get placement details",
2503
+ "description": "Get product details",
2373
2504
  "examples": [
2374
- "<%= config.bin %> placements get --app UUID 550e8400-e29b-41d4-a716-446655440000"
2505
+ "<%= config.bin %> products get --app UUID 550e8400-e29b-41d4-a716-446655440000"
2375
2506
  ],
2376
2507
  "flags": {
2377
2508
  "json": {
@@ -2392,7 +2523,7 @@
2392
2523
  },
2393
2524
  "hasDynamicHelp": false,
2394
2525
  "hiddenAliases": [],
2395
- "id": "placements:get",
2526
+ "id": "products:get",
2396
2527
  "pluginAlias": "adapty",
2397
2528
  "pluginName": "adapty",
2398
2529
  "pluginType": "core",
@@ -2402,16 +2533,16 @@
2402
2533
  "relativePath": [
2403
2534
  "dist",
2404
2535
  "commands",
2405
- "placements",
2536
+ "products",
2406
2537
  "get.js"
2407
2538
  ]
2408
2539
  },
2409
- "placements:list": {
2540
+ "products:list": {
2410
2541
  "aliases": [],
2411
2542
  "args": {},
2412
- "description": "List placements for an app",
2543
+ "description": "List products for an app",
2413
2544
  "examples": [
2414
- "<%= config.bin %> placements list --app 550e8400-..."
2545
+ "<%= config.bin %> products list --app 550e8400-..."
2415
2546
  ],
2416
2547
  "flags": {
2417
2548
  "json": {
@@ -2448,7 +2579,7 @@
2448
2579
  },
2449
2580
  "hasDynamicHelp": false,
2450
2581
  "hiddenAliases": [],
2451
- "id": "placements:list",
2582
+ "id": "products:list",
2452
2583
  "pluginAlias": "adapty",
2453
2584
  "pluginName": "adapty",
2454
2585
  "pluginType": "core",
@@ -2458,24 +2589,22 @@
2458
2589
  "relativePath": [
2459
2590
  "dist",
2460
2591
  "commands",
2461
- "placements",
2592
+ "products",
2462
2593
  "list.js"
2463
2594
  ]
2464
2595
  },
2465
- "placements:update": {
2596
+ "products:update": {
2466
2597
  "aliases": [],
2467
2598
  "args": {
2468
- "placement_id": {
2469
- "description": "Placement ID (UUID)",
2470
- "name": "placement_id",
2599
+ "product_id": {
2600
+ "description": "Product ID (UUID)",
2601
+ "name": "product_id",
2471
2602
  "required": true
2472
2603
  }
2473
2604
  },
2474
- "description": "Update a placement",
2605
+ "description": "Update a product (title and access level only)",
2475
2606
  "examples": [
2476
- "<%= config.bin %> placements update --app UUID 550e8400-... --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"paywall\",\"segment_ids\":[],\"paywall_id\":\"PAYWALL_UUID\",\"priority\":0}]'",
2477
- "<%= config.bin %> placements update --app UUID 550e8400-... --title \"Default\" --developer-id default --audiences '[{\"content_type\":\"flow\",\"segment_ids\":[],\"flow_id\":\"FLOW_UUID\",\"priority\":0}]'",
2478
- "<%= config.bin %> placements update --app UUID 550e8400-... --title \"Default\" --developer-id default --paywall-id PAYWALL_UUID"
2607
+ "<%= config.bin %> products update --app UUID 550e8400-... --title \"Monthly\" --access-level-id UUID"
2479
2608
  ],
2480
2609
  "flags": {
2481
2610
  "json": {
@@ -2493,30 +2622,16 @@
2493
2622
  "multiple": false,
2494
2623
  "type": "option"
2495
2624
  },
2496
- "audiences": {
2497
- "description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
2498
- "name": "audiences",
2499
- "hasDynamicHelp": false,
2500
- "multiple": false,
2501
- "type": "option"
2502
- },
2503
- "developer-id": {
2504
- "description": "Developer ID for the placement",
2505
- "name": "developer-id",
2625
+ "access-level-id": {
2626
+ "description": "Access level ID (UUID)",
2627
+ "name": "access-level-id",
2506
2628
  "required": true,
2507
2629
  "hasDynamicHelp": false,
2508
2630
  "multiple": false,
2509
2631
  "type": "option"
2510
2632
  },
2511
- "paywall-id": {
2512
- "description": "Paywall ID (UUID). DEPRECATED: use --audiences.",
2513
- "name": "paywall-id",
2514
- "hasDynamicHelp": false,
2515
- "multiple": false,
2516
- "type": "option"
2517
- },
2518
2633
  "title": {
2519
- "description": "Placement title",
2634
+ "description": "Product title",
2520
2635
  "name": "title",
2521
2636
  "required": true,
2522
2637
  "hasDynamicHelp": false,
@@ -2526,7 +2641,7 @@
2526
2641
  },
2527
2642
  "hasDynamicHelp": false,
2528
2643
  "hiddenAliases": [],
2529
- "id": "placements:update",
2644
+ "id": "products:update",
2530
2645
  "pluginAlias": "adapty",
2531
2646
  "pluginName": "adapty",
2532
2647
  "pluginType": "core",
@@ -2536,69 +2651,17 @@
2536
2651
  "relativePath": [
2537
2652
  "dist",
2538
2653
  "commands",
2539
- "placements",
2654
+ "products",
2540
2655
  "update.js"
2541
2656
  ]
2542
2657
  },
2543
- "skills:install": {
2544
- "aliases": [],
2545
- "args": {},
2546
- "description": "Install the Adapty skills into the coding agents on this machine",
2547
- "examples": [
2548
- "<%= config.bin %> skills install",
2549
- "<%= config.bin %> skills install --agent claude-code",
2550
- "<%= config.bin %> skills install --yes"
2551
- ],
2552
- "flags": {
2553
- "json": {
2554
- "description": "Format output as json.",
2555
- "helpGroup": "GLOBAL",
2556
- "name": "json",
2557
- "allowNo": false,
2558
- "type": "boolean"
2559
- },
2560
- "agent": {
2561
- "description": "Install into this agent only. Repeat for several.",
2562
- "name": "agent",
2563
- "hasDynamicHelp": false,
2564
- "multiple": true,
2565
- "options": [
2566
- "claude-code",
2567
- "codex",
2568
- "gemini-cli"
2569
- ],
2570
- "type": "option"
2571
- },
2572
- "yes": {
2573
- "char": "y",
2574
- "description": "Install into every agent found without asking; required when several are found and no one can answer. Never runs the npx fallback, which is always asked for",
2575
- "name": "yes",
2576
- "allowNo": false,
2577
- "type": "boolean"
2578
- }
2579
- },
2580
- "hasDynamicHelp": false,
2581
- "hiddenAliases": [],
2582
- "id": "skills:install",
2583
- "pluginAlias": "adapty",
2584
- "pluginName": "adapty",
2585
- "pluginType": "core",
2586
- "strict": true,
2587
- "enableJsonFlag": true,
2588
- "isESM": true,
2589
- "relativePath": [
2590
- "dist",
2591
- "commands",
2592
- "skills",
2593
- "install.js"
2594
- ]
2595
- },
2596
- "products:create": {
2658
+ "segments:create": {
2597
2659
  "aliases": [],
2598
2660
  "args": {},
2599
- "description": "Create a product with vendor products per platform",
2661
+ "description": "Create a segment from filters over profile fields\n\nFilters are written as field:OPERATOR:value[,value...] and validated by the server. Apple Search Ads\nattribution uses campaign, ad_group and creative (a keyword) with Apple ids as values; build those from\nASA entities with `asa segments create` instead of copying ids by hand.",
2600
2662
  "examples": [
2601
- "<%= config.bin %> products create --app UUID --title \"Monthly\" --access-level-id UUID --period monthly --ios-product-id com.example.monthly"
2663
+ "<%= config.bin %> segments create --app UUID --title \"[ASA] Campaign: Brand\" --filter campaign:IN:2144520245",
2664
+ "<%= config.bin %> segments create --app UUID --title \"US installs\" --filter ip_country:IN:US --filter install_date:>=:2026-01-01"
2602
2665
  ],
2603
2666
  "flags": {
2604
2667
  "json": {
@@ -2616,80 +2679,23 @@
2616
2679
  "multiple": false,
2617
2680
  "type": "option"
2618
2681
  },
2619
- "access-level-id": {
2620
- "description": "Access level ID (UUID)",
2621
- "name": "access-level-id",
2622
- "required": true,
2623
- "hasDynamicHelp": false,
2624
- "multiple": false,
2625
- "type": "option"
2626
- },
2627
- "android-base-plan-id": {
2628
- "description": "Android base plan ID",
2629
- "helpGroup": "STORE BINDINGS",
2630
- "name": "android-base-plan-id",
2631
- "hasDynamicHelp": false,
2632
- "multiple": false,
2633
- "type": "option"
2634
- },
2635
- "android-product-id": {
2636
- "description": "Android product ID",
2637
- "helpGroup": "STORE BINDINGS",
2638
- "name": "android-product-id",
2639
- "hasDynamicHelp": false,
2640
- "multiple": false,
2641
- "type": "option"
2642
- },
2643
- "ios-product-id": {
2644
- "description": "iOS product ID",
2645
- "helpGroup": "STORE BINDINGS",
2646
- "name": "ios-product-id",
2647
- "hasDynamicHelp": false,
2648
- "multiple": false,
2649
- "type": "option"
2650
- },
2651
- "paddle-price-id": {
2652
- "description": "Paddle price ID (requires --paddle-product-id)",
2653
- "helpGroup": "STORE BINDINGS",
2654
- "name": "paddle-price-id",
2655
- "hasDynamicHelp": false,
2656
- "multiple": false,
2657
- "type": "option"
2658
- },
2659
- "paddle-product-id": {
2660
- "description": "Paddle product ID (requires --paddle-price-id)",
2661
- "helpGroup": "STORE BINDINGS",
2662
- "name": "paddle-product-id",
2682
+ "description": {
2683
+ "description": "Segment description",
2684
+ "name": "description",
2663
2685
  "hasDynamicHelp": false,
2664
2686
  "multiple": false,
2665
2687
  "type": "option"
2666
2688
  },
2667
- "period": {
2668
- "description": "Subscription period (weekly, monthly, two_months, trimonthly, semiannual, annual, lifetime)",
2669
- "name": "period",
2689
+ "filter": {
2690
+ "description": "Filter as field:OPERATOR:value[,value...] (e.g. campaign:IN:2144520245), field:IS NULL, or a JSON object {\"field_name\",\"operator\",\"value_list\"}; repeatable",
2691
+ "name": "filter",
2670
2692
  "required": true,
2671
2693
  "hasDynamicHelp": false,
2672
- "multiple": false,
2673
- "type": "option"
2674
- },
2675
- "stripe-price-id": {
2676
- "description": "Stripe price ID (requires --stripe-product-id)",
2677
- "helpGroup": "STORE BINDINGS",
2678
- "name": "stripe-price-id",
2679
- "hasDynamicHelp": false,
2680
- "multiple": false,
2681
- "type": "option"
2682
- },
2683
- "stripe-product-id": {
2684
- "description": "Stripe product ID (requires --stripe-price-id)",
2685
- "helpGroup": "STORE BINDINGS",
2686
- "name": "stripe-product-id",
2687
- "hasDynamicHelp": false,
2688
- "multiple": false,
2694
+ "multiple": true,
2689
2695
  "type": "option"
2690
2696
  },
2691
2697
  "title": {
2692
- "description": "Product title",
2698
+ "description": "Segment title",
2693
2699
  "name": "title",
2694
2700
  "required": true,
2695
2701
  "hasDynamicHelp": false,
@@ -2699,7 +2705,7 @@
2699
2705
  },
2700
2706
  "hasDynamicHelp": false,
2701
2707
  "hiddenAliases": [],
2702
- "id": "products:create",
2708
+ "id": "segments:create",
2703
2709
  "pluginAlias": "adapty",
2704
2710
  "pluginName": "adapty",
2705
2711
  "pluginType": "core",
@@ -2709,22 +2715,22 @@
2709
2715
  "relativePath": [
2710
2716
  "dist",
2711
2717
  "commands",
2712
- "products",
2718
+ "segments",
2713
2719
  "create.js"
2714
2720
  ]
2715
2721
  },
2716
- "products:get": {
2722
+ "segments:get": {
2717
2723
  "aliases": [],
2718
2724
  "args": {
2719
- "product_id": {
2720
- "description": "Product ID (UUID)",
2721
- "name": "product_id",
2725
+ "segment_id": {
2726
+ "description": "Segment ID (UUID)",
2727
+ "name": "segment_id",
2722
2728
  "required": true
2723
2729
  }
2724
2730
  },
2725
- "description": "Get product details",
2731
+ "description": "Get segment details",
2726
2732
  "examples": [
2727
- "<%= config.bin %> products get --app UUID 550e8400-e29b-41d4-a716-446655440000"
2733
+ "<%= config.bin %> segments get --app UUID 550e8400-e29b-41d4-a716-446655440000"
2728
2734
  ],
2729
2735
  "flags": {
2730
2736
  "json": {
@@ -2745,7 +2751,7 @@
2745
2751
  },
2746
2752
  "hasDynamicHelp": false,
2747
2753
  "hiddenAliases": [],
2748
- "id": "products:get",
2754
+ "id": "segments:get",
2749
2755
  "pluginAlias": "adapty",
2750
2756
  "pluginName": "adapty",
2751
2757
  "pluginType": "core",
@@ -2755,16 +2761,16 @@
2755
2761
  "relativePath": [
2756
2762
  "dist",
2757
2763
  "commands",
2758
- "products",
2764
+ "segments",
2759
2765
  "get.js"
2760
2766
  ]
2761
2767
  },
2762
- "products:list": {
2768
+ "segments:list": {
2763
2769
  "aliases": [],
2764
2770
  "args": {},
2765
- "description": "List products for an app",
2771
+ "description": "List segments for an app",
2766
2772
  "examples": [
2767
- "<%= config.bin %> products list --app 550e8400-..."
2773
+ "<%= config.bin %> segments list --app 550e8400-..."
2768
2774
  ],
2769
2775
  "flags": {
2770
2776
  "json": {
@@ -2801,7 +2807,7 @@
2801
2807
  },
2802
2808
  "hasDynamicHelp": false,
2803
2809
  "hiddenAliases": [],
2804
- "id": "products:list",
2810
+ "id": "segments:list",
2805
2811
  "pluginAlias": "adapty",
2806
2812
  "pluginName": "adapty",
2807
2813
  "pluginType": "core",
@@ -2811,22 +2817,22 @@
2811
2817
  "relativePath": [
2812
2818
  "dist",
2813
2819
  "commands",
2814
- "products",
2820
+ "segments",
2815
2821
  "list.js"
2816
2822
  ]
2817
2823
  },
2818
- "products:update": {
2824
+ "segments:update": {
2819
2825
  "aliases": [],
2820
2826
  "args": {
2821
- "product_id": {
2822
- "description": "Product ID (UUID)",
2823
- "name": "product_id",
2827
+ "segment_id": {
2828
+ "description": "Segment ID (UUID)",
2829
+ "name": "segment_id",
2824
2830
  "required": true
2825
2831
  }
2826
2832
  },
2827
- "description": "Update a product (title and access level only)",
2833
+ "description": "Replace a segment's title, description and filters\n\nThe server takes the whole segment, as the dashboard sends it: pass every filter you want to keep, not only\nthe changed one. Read the current ones with `segments get`.",
2828
2834
  "examples": [
2829
- "<%= config.bin %> products update --app UUID 550e8400-... --title \"Monthly\" --access-level-id UUID"
2835
+ "<%= config.bin %> segments update --app UUID 550e8400-e29b-41d4-a716-446655440000 --title \"[ASA] Campaign: Brand\" --filter campaign:IN:2144520245"
2830
2836
  ],
2831
2837
  "flags": {
2832
2838
  "json": {
@@ -2844,16 +2850,23 @@
2844
2850
  "multiple": false,
2845
2851
  "type": "option"
2846
2852
  },
2847
- "access-level-id": {
2848
- "description": "Access level ID (UUID)",
2849
- "name": "access-level-id",
2850
- "required": true,
2853
+ "description": {
2854
+ "description": "Segment description",
2855
+ "name": "description",
2851
2856
  "hasDynamicHelp": false,
2852
2857
  "multiple": false,
2853
2858
  "type": "option"
2854
2859
  },
2860
+ "filter": {
2861
+ "description": "Filter as field:OPERATOR:value[,value...] (e.g. campaign:IN:2144520245), field:IS NULL, or a JSON object {\"field_name\",\"operator\",\"value_list\"}; repeatable",
2862
+ "name": "filter",
2863
+ "required": true,
2864
+ "hasDynamicHelp": false,
2865
+ "multiple": true,
2866
+ "type": "option"
2867
+ },
2855
2868
  "title": {
2856
- "description": "Product title",
2869
+ "description": "Segment title",
2857
2870
  "name": "title",
2858
2871
  "required": true,
2859
2872
  "hasDynamicHelp": false,
@@ -2863,7 +2876,7 @@
2863
2876
  },
2864
2877
  "hasDynamicHelp": false,
2865
2878
  "hiddenAliases": [],
2866
- "id": "products:update",
2879
+ "id": "segments:update",
2867
2880
  "pluginAlias": "adapty",
2868
2881
  "pluginName": "adapty",
2869
2882
  "pluginType": "core",
@@ -2873,10 +2886,63 @@
2873
2886
  "relativePath": [
2874
2887
  "dist",
2875
2888
  "commands",
2876
- "products",
2889
+ "segments",
2877
2890
  "update.js"
2878
2891
  ]
2879
2892
  },
2893
+ "skills:install": {
2894
+ "aliases": [],
2895
+ "args": {},
2896
+ "description": "Install the Adapty skills into the coding agents on this machine",
2897
+ "examples": [
2898
+ "<%= config.bin %> skills install",
2899
+ "<%= config.bin %> skills install --agent claude-code",
2900
+ "<%= config.bin %> skills install --yes"
2901
+ ],
2902
+ "flags": {
2903
+ "json": {
2904
+ "description": "Format output as json.",
2905
+ "helpGroup": "GLOBAL",
2906
+ "name": "json",
2907
+ "allowNo": false,
2908
+ "type": "boolean"
2909
+ },
2910
+ "agent": {
2911
+ "description": "Install into this agent only. Repeat for several.",
2912
+ "name": "agent",
2913
+ "hasDynamicHelp": false,
2914
+ "multiple": true,
2915
+ "options": [
2916
+ "claude-code",
2917
+ "codex",
2918
+ "gemini-cli"
2919
+ ],
2920
+ "type": "option"
2921
+ },
2922
+ "yes": {
2923
+ "char": "y",
2924
+ "description": "Install into every agent found without asking; required when several are found and no one can answer. Never runs the npx fallback, which is always asked for",
2925
+ "name": "yes",
2926
+ "allowNo": false,
2927
+ "type": "boolean"
2928
+ }
2929
+ },
2930
+ "hasDynamicHelp": false,
2931
+ "hiddenAliases": [],
2932
+ "id": "skills:install",
2933
+ "pluginAlias": "adapty",
2934
+ "pluginName": "adapty",
2935
+ "pluginType": "core",
2936
+ "strict": true,
2937
+ "enableJsonFlag": true,
2938
+ "isESM": true,
2939
+ "relativePath": [
2940
+ "dist",
2941
+ "commands",
2942
+ "skills",
2943
+ "install.js"
2944
+ ]
2945
+ },
2880
2946
  "asa:ad-groups:create": {
2881
2947
  "aliases": [],
2882
2948
  "args": {},
@@ -6724,5 +6790,5 @@
6724
6790
  ]
6725
6791
  }
6726
6792
  },
6727
- "version": "0.9.5"
6793
+ "version": "0.10.0"
6728
6794
  }