@thinkingai/ae-cli 6.0.38 → 6.0.39

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.
Files changed (193) hide show
  1. package/README.md +25 -3
  2. package/README.zh.md +25 -3
  3. package/dist/{auth-56Z45UVR.js → auth-GDV3H5I4.js} +18 -8
  4. package/dist/{auth-ENM3FE6L.js → auth-NN55553T.js} +3 -3
  5. package/dist/{capability-2H6PAOA3.js → capability-TPORIKRQ.js} +19 -15
  6. package/dist/{capability-YPOQX6PL.js → capability-VQNC5CF7.js} +19 -15
  7. package/dist/chunk-4NN5IWVN.js +26 -0
  8. package/dist/{chunk-DB4Q3ANU.js → chunk-6A2FUCIS.js} +3 -3
  9. package/dist/{chunk-PVBYJWC2.js → chunk-7KQWSBSL.js} +4 -4
  10. package/dist/{chunk-24BAVOX3.js → chunk-AXDXJTPC.js} +3 -1
  11. package/dist/{chunk-CPVTECJ3.js → chunk-DT6Y3TD7.js} +5 -5
  12. package/dist/{chunk-EGEIXA2Z.js → chunk-DWO43OIB.js} +0 -248
  13. package/dist/{chunk-V6FR6WTW.js → chunk-GJJA4CQZ.js} +34 -2
  14. package/dist/{chunk-RGXCNC4N.js → chunk-GS2P7LFD.js} +50 -17
  15. package/dist/{chunk-LYVNONC4.js → chunk-JHENBQ5B.js} +35 -0
  16. package/dist/{chunk-3P3562ZX.js → chunk-MVDZ7DBQ.js} +5 -5
  17. package/dist/{chunk-LCXU3AAT.js → chunk-NBPKWKRA.js} +2 -2
  18. package/dist/{chunk-HQ2A7ITL.js → chunk-RBNKI5ZW.js} +50 -17
  19. package/dist/{chunk-LHVM35J4.js → chunk-TS6BUGUY.js} +4 -4
  20. package/dist/chunk-TUKQZTMI.js +250 -0
  21. package/dist/{chunk-J7MZHDHQ.js → chunk-VKD5WQKN.js} +5 -5
  22. package/dist/{chunk-3KI3RRXX.js → chunk-VTXHDCBW.js} +3 -3
  23. package/dist/{chunk-KTYR3U6D.js → chunk-YTG6Q75E.js} +10 -6
  24. package/dist/{chunk-IR4ZLVPW.js → chunk-YV52FB5G.js} +25 -3
  25. package/dist/{chunk-E7UXXHO3.js → chunk-Z3OXWCIA.js} +3 -3
  26. package/dist/{cli-token-4SBMXAUK.js → cli-token-GL5MS5FK.js} +4 -4
  27. package/dist/{client-PP5FETMW.js → client-DAIPF7XN.js} +4 -4
  28. package/dist/{community-report-client-KK2QBANO.js → community-report-client-M2RW4MXD.js} +2 -2
  29. package/dist/config-4VZNLBKF.js +489 -0
  30. package/dist/index.js +96 -37
  31. package/dist/memory-RWJW4XFO.js +892 -0
  32. package/dist/memory-VO2ZJCRT.js +892 -0
  33. package/dist/{metadata-JIQ77HFY.js → metadata-YGTHR2XJ.js} +8 -8
  34. package/dist/{metadata-AN3YFZEV.js → metadata-ZRN2GHPN.js} +8 -8
  35. package/dist/{model-JASQVOFD.js → model-CLUIK3K5.js} +7 -5
  36. package/dist/{raw-XJCAT3HX.js → raw-52B4UKO4.js} +8 -7
  37. package/dist/sync-3REDHGY6.js +10259 -0
  38. package/dist/{te-agent-JHUG6DVV.js → te-agent-XNPELAKX.js} +580 -84
  39. package/dist/{te-analysis-ITKTO6JS.js → te-analysis-GJI5FZUL.js} +1152 -13
  40. package/dist/{te-analysis-RAC67YYD.js → te-analysis-N2BRDJZ5.js} +1152 -13
  41. package/dist/{te-community-QOYIYEJI.js → te-community-SQXKE5OO.js} +7 -7
  42. package/dist/{te-community-UFKI6ONP.js → te-community-TYSNU3NQ.js} +7 -7
  43. package/dist/{te-dataops-PZQ5NQLY.js → te-dataops-5TM7WZDI.js} +370 -189
  44. package/dist/{te-dataops-XTWVTJCA.js → te-dataops-OWIADNSM.js} +370 -189
  45. package/dist/{te-engage-NLZUPSBK.js → te-engage-F7V55KVW.js} +333 -105
  46. package/dist/{te-engage-E7F4HTXU.js → te-engage-FMYAYCNV.js} +333 -105
  47. package/dist/{te-kb-E7NSCBRB.js → te-kb-VRMEY3D4.js} +6 -6
  48. package/dist/{te-meta-GBDTMPEL.js → te-meta-53BVXPFI.js} +7 -7
  49. package/dist/{te-meta-ZTLTSHXC.js → te-meta-TOCBPBXI.js} +7 -7
  50. package/dist/{te-system-AH7DMCAQ.js → te-system-XGS5EQIQ.js} +4 -4
  51. package/dist/{te-team-BQ3SKSZV.js → te-team-BZRDV2CM.js} +7 -7
  52. package/dist/{update-DKG6UXEM.js → update-HEDXGOJH.js} +8 -6
  53. package/package.json +4 -1
  54. package/skills/ae-agent/SKILL.md +178 -16
  55. package/skills/ae-agent/references/add-skill.md +22 -10
  56. package/skills/ae-agent/references/edit-skill.md +24 -14
  57. package/skills/ae-agent/references/find-archived-conversations.md +82 -0
  58. package/skills/ae-agent/references/restore-conversation.md +54 -0
  59. package/skills/ae-agent/references/upload-skill.md +24 -14
  60. package/skills/ae-analysis/SKILL.md +1 -1
  61. package/skills/ae-analysis/references/command_index.md +104 -42
  62. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  63. package/skills/ae-analysis/references/project_access_detail_get.md +3 -3
  64. package/skills/ae-analysis/references/project_data_power_delete.md +3 -3
  65. package/skills/ae-analysis/references/project_data_power_get.md +3 -3
  66. package/skills/ae-analysis/references/project_data_power_list.md +3 -3
  67. package/skills/ae-analysis/references/project_data_power_upsert.md +3 -3
  68. package/skills/ae-analysis/references/project_entity_create.md +3 -3
  69. package/skills/ae-analysis/references/project_entity_delete.md +3 -3
  70. package/skills/ae-analysis/references/project_entity_event_list.md +3 -3
  71. package/skills/ae-analysis/references/project_entity_get.md +3 -3
  72. package/skills/ae-analysis/references/project_entity_list.md +3 -3
  73. package/skills/ae-analysis/references/project_entity_update.md +3 -3
  74. package/skills/ae-analysis/references/project_function_list.md +3 -3
  75. package/skills/ae-analysis/references/project_info_create.md +25 -0
  76. package/skills/ae-analysis/references/project_info_delete.md +24 -0
  77. package/skills/ae-analysis/references/project_info_get.md +3 -3
  78. package/skills/ae-analysis/references/project_info_list.md +3 -3
  79. package/skills/ae-analysis/references/project_info_update.md +3 -3
  80. package/skills/ae-analysis/references/project_mark_time_create.md +3 -3
  81. package/skills/ae-analysis/references/project_mark_time_delete.md +3 -3
  82. package/skills/ae-analysis/references/project_mark_time_list.md +3 -3
  83. package/skills/ae-analysis/references/project_mark_time_update.md +3 -3
  84. package/skills/ae-analysis/references/project_member_add.md +3 -3
  85. package/skills/ae-analysis/references/project_member_batch_update.md +3 -3
  86. package/skills/ae-analysis/references/project_member_candidate_list.md +3 -3
  87. package/skills/ae-analysis/references/project_member_handover_export.md +3 -3
  88. package/skills/ae-analysis/references/project_member_handover_run.md +3 -3
  89. package/skills/ae-analysis/references/project_member_import.md +3 -3
  90. package/skills/ae-analysis/references/project_member_list.md +3 -3
  91. package/skills/ae-analysis/references/project_member_receiver_list.md +3 -3
  92. package/skills/ae-analysis/references/project_member_remove.md +3 -3
  93. package/skills/ae-analysis/references/project_member_update.md +3 -3
  94. package/skills/ae-analysis/references/project_owner_update.md +3 -3
  95. package/skills/ae-analysis/references/project_permission_binding_list.md +3 -3
  96. package/skills/ae-analysis/references/project_receive_status_update.md +3 -3
  97. package/skills/ae-analysis/references/project_role_delete.md +3 -3
  98. package/skills/ae-analysis/references/project_role_function_list.md +3 -3
  99. package/skills/ae-analysis/references/project_role_get.md +3 -3
  100. package/skills/ae-analysis/references/project_role_list.md +3 -3
  101. package/skills/ae-analysis/references/project_role_upsert.md +3 -3
  102. package/skills/ae-analysis/references/project_role_user_list.md +3 -3
  103. package/skills/ae-analysis/references/project_space_list.md +1 -1
  104. package/skills/ae-analysis/references/project_timezone_get.md +3 -3
  105. package/skills/ae-analysis/references/project_timezone_overview.md +3 -3
  106. package/skills/ae-analysis/references/project_timezone_update.md +3 -3
  107. package/skills/ae-analysis/references/project_user_id_items_update.md +3 -3
  108. package/skills/ae-analysis/references/system_admin_function_list.md +22 -0
  109. package/skills/ae-analysis/references/system_admin_function_update.md +26 -0
  110. package/skills/ae-analysis/references/system_admin_list.md +21 -0
  111. package/skills/ae-analysis/references/system_admin_remove.md +25 -0
  112. package/skills/ae-analysis/references/system_admin_upsert.md +25 -0
  113. package/skills/ae-analysis/references/system_function_list.md +21 -0
  114. package/skills/ae-analysis/references/system_member_add.md +25 -0
  115. package/skills/ae-analysis/references/system_member_candidate_list.md +22 -0
  116. package/skills/ae-analysis/references/system_member_delete.md +25 -0
  117. package/skills/ae-analysis/references/system_member_list.md +24 -0
  118. package/skills/ae-analysis/references/system_member_mfa_unbind.md +25 -0
  119. package/skills/ae-analysis/references/system_member_password_reset.md +32 -0
  120. package/skills/ae-analysis/references/system_member_project_batch_update.md +27 -0
  121. package/skills/ae-analysis/references/system_member_status_update.md +26 -0
  122. package/skills/ae-analysis/references/system_member_update.md +23 -0
  123. package/skills/ae-analysis/references/system_mfa_get.md +21 -0
  124. package/skills/ae-analysis/references/system_mfa_update.md +25 -0
  125. package/skills/ae-analysis/references/system_node_monitor_list.md +24 -0
  126. package/skills/ae-analysis/references/system_oauth2_update.md +22 -0
  127. package/skills/ae-analysis/references/system_ops_alert_contact_delete.md +25 -0
  128. package/skills/ae-analysis/references/system_ops_alert_contact_list.md +23 -0
  129. package/skills/ae-analysis/references/system_ops_alert_contact_test.md +29 -0
  130. package/skills/ae-analysis/references/system_ops_alert_contact_upsert.md +39 -0
  131. package/skills/ae-analysis/references/system_preference_get.md +21 -0
  132. package/skills/ae-analysis/references/system_preference_update.md +22 -0
  133. package/skills/ae-analysis/references/system_project_usage_list.md +28 -0
  134. package/skills/ae-analysis/references/system_query_alert_rule_list.md +21 -0
  135. package/skills/ae-analysis/references/system_query_alert_rule_update.md +26 -0
  136. package/skills/ae-analysis/references/system_query_monitor_overview.md +26 -0
  137. package/skills/ae-analysis/references/system_query_task_cancel.md +25 -0
  138. package/skills/ae-analysis/references/system_query_task_export.md +49 -0
  139. package/skills/ae-analysis/references/system_query_task_get.md +23 -0
  140. package/skills/ae-analysis/references/system_query_task_list.md +35 -0
  141. package/skills/ae-analysis/references/system_query_task_options.md +27 -0
  142. package/skills/ae-analysis/references/system_receiver_address_delete.md +26 -0
  143. package/skills/ae-analysis/references/system_receiver_address_overview.md +21 -0
  144. package/skills/ae-analysis/references/system_receiver_address_project_list.md +21 -0
  145. package/skills/ae-analysis/references/system_receiver_address_promote.md +24 -0
  146. package/skills/ae-analysis/references/system_receiver_address_upsert.md +27 -0
  147. package/skills/ae-analysis/references/system_receiver_detection_get.md +22 -0
  148. package/skills/ae-analysis/references/system_receiver_detection_run.md +22 -0
  149. package/skills/ae-analysis/references/system_receiver_detection_update.md +25 -0
  150. package/skills/ae-analysis/references/system_role_delete.md +26 -0
  151. package/skills/ae-analysis/references/system_role_function_list.md +22 -0
  152. package/skills/ae-analysis/references/system_role_get.md +22 -0
  153. package/skills/ae-analysis/references/system_role_list.md +24 -0
  154. package/skills/ae-analysis/references/system_role_upsert.md +27 -0
  155. package/skills/ae-analysis/references/system_role_user_list.md +22 -0
  156. package/skills/ae-analysis/references/system_seat_list.md +25 -0
  157. package/skills/ae-analysis/references/system_seat_update.md +26 -0
  158. package/skills/ae-analysis/references/system_smtp_delete.md +24 -0
  159. package/skills/ae-analysis/references/system_smtp_get.md +21 -0
  160. package/skills/ae-analysis/references/system_smtp_test.md +22 -0
  161. package/skills/ae-analysis/references/system_smtp_upsert.md +31 -0
  162. package/skills/ae-analysis/references/system_third_party_login_disable.md +25 -0
  163. package/skills/ae-analysis/references/system_third_party_login_list.md +21 -0
  164. package/skills/ae-analysis/references/system_third_party_login_upsert.md +33 -0
  165. package/skills/ae-analysis/references/system_usage_overview.md +21 -0
  166. package/skills/ae-analysis/references/system_usage_trend_export.md +44 -0
  167. package/skills/ae-analysis/references/system_usage_trend_query.md +28 -0
  168. package/skills/ae-dataops/SKILL.md +1 -1
  169. package/skills/ae-dataops/references/dataops-flow-create.md +51 -16
  170. package/skills/ae-engage/SKILL.md +56 -26
  171. package/skills/ae-engage/references/activity-activity.md +3 -0
  172. package/skills/ae-engage/references/activity-approval.md +12 -4
  173. package/skills/ae-engage/references/activity-task.md +21 -6
  174. package/skills/ae-engage/references/activity-topic.md +31 -13
  175. package/skills/ae-engage/references/add-channel.md +170 -41
  176. package/skills/ae-engage/references/build-task-save-guide.md +40 -27
  177. package/skills/ae-engage/references/channel-update-config.md +3 -2
  178. package/skills/ae-engage/references/common-metric.md +48 -120
  179. package/skills/ae-engage/references/flow-detail.md +13 -0
  180. package/skills/ae-engage/references/preset-event.md +12 -32
  181. package/skills/ae-engage/references/save-flow.md +127 -64
  182. package/skills/ae-engage/references/save-task.md +197 -59
  183. package/skills/ae-engage/references/scene-config-metric.md +3 -0
  184. package/skills/ae-engage/references/scene-preset-metric.md +8 -37
  185. package/skills/ae-engage/references/scene-strategy-audience.md +51 -643
  186. package/skills/ae-engage/references/scene-strategy.md +6 -6
  187. package/skills/ae-engage/references/task-detail.md +10 -0
  188. package/skills/ae-engage/references/task-submit-approval.md +45 -0
  189. package/skills/ae-engage/references/validate-flow-node-config.md +1 -1
  190. package/skills/ae-generate-tracking-code/SKILL.md +2 -2
  191. package/skills/ae-metadata/SKILL.md +1 -1
  192. package/dist/config-BSSALXEN.js +0 -128
  193. package/dist/sync-QFP4XFN3.js +0 -485
@@ -1,8 +1,10 @@
1
1
  # ae-engage engage-setting channel create
2
2
 
3
- > Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel create`
3
+ > Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel create` · Capability id: `engage-setting.channel.create`
4
4
 
5
- Create a new Engage push channel.
5
+ Create a new Engage **运营设置** push channel (not config-center channels; those use `engage-scene config-channel`).
6
+
7
+ **First decide channel kind:** Webhook (`channelType=1`) and Client (`channelType=3`) share the same CLI command and outer `--req` fields, but **`config` / `pushIdType` / custom-param prefixes differ**. Do not reuse a webhook payload for client (or the reverse).
6
8
 
7
9
  ## Flags
8
10
 
@@ -11,67 +13,194 @@ Create a new Engage push channel.
11
13
  | `--project-id` / `-p` | number | Yes | Project ID |
12
14
  | `--req` | json | Yes | Channel creation request JSON object |
13
15
 
14
- ## `--req` Object Fields
16
+ ## `--req` Object Fields (common)
15
17
 
16
18
  | Field | Type | Required | Description |
17
19
  |------|------|------|------|
18
- | `channelType` | number | Yes | channel type |
19
- | `channelSubBizType` | string | Yes | channel subtype, for example `webhook`、`fcm`、`aurora` |
20
+ | `channelType` | number | Yes | `1` webhook · `3` client (see below) |
21
+ | `channelSubBizType` | string | Yes | must match type: `webhook` or `client` |
20
22
  | `channelName` | string | Yes | channel name |
21
- | `pushIdType` | string | Yes | push target ID field name |
22
- | `config` | string | Yes | channel config JSON string |
23
- | `enableTouchEvent` | number | Yes | touch event switch |
24
- | `eventClickName` | string | Yes | click event name |
25
- | `eventDeliveryName` | string | Yes | delivery event name |
26
- | `touchEventSource` | string | Yes | touch event source |
23
+ | `pushIdType` | string | Yes | prefixed property code **rules differ by channel kind** |
24
+ | `config` | string | Yes | channel config JSON **string** — **shape differs by channel kind** |
25
+ | `enableTouchEvent` | number | Yes | reach funnel: `0` off · `1` on |
26
+ | `eventClickName` | string | Yes when funnel on | click event (e.g. `ops_click`) |
27
+ | `eventDeliveryName` | string | Yes when funnel on | delivery event (e.g. `ops_view`) |
28
+ | `touchEventSource` | string | Yes | usually `custom` for custom event names |
27
29
 
28
- The outer Capability input uses `project_id` and `req`; fields inside `req` keep the native camelCase DTO shape in this table. The Hermes Capability handler assigns the outer `--project-id` to `req.projectId`, so you do not need to fill it manually and the outer value takes precedence.
30
+ The outer Capability input uses `project_id` and `req`; fields inside `req` keep the native camelCase DTO shape. The Hermes Capability handler assigns the outer `--project-id` to `req.projectId`.
29
31
 
30
32
  ## Response shape
31
33
 
32
- The created channel is under `data.item`; its response keys recursively use snake_case, such as
33
- `channel_id`, `channel_status`, and `channel_type`.
34
+ The created channel is under `data.item`; response keys recursively use snake_case (`channel_id`, `channel_status`, `channel_type`).
34
35
 
35
- ## Enum Notes
36
+ ## Webhook vs Client (read this first)
36
37
 
37
- ### `req.channelType`
38
+ | | **Webhook** | **Client** |
39
+ |--|-------------|------------|
40
+ | `channelType` | `1` | `3` |
41
+ | `channelSubBizType` | `webhook` | `client` |
42
+ | `config.url` | **HTTP(S) callback URL** (server endpoint that receives the push) | **Client config key / scene id** (e.g. `popup`, `abtest`, `difficulty_ratio`) — **not** an `http://` URL |
43
+ | `pushIdType` | Prefer **`user:`** user properties (e.g. `user:#account_id`) | **`user:`** or **`client:`** (e.g. `user:#account_id`, `client:#distinct_id`) |
44
+ | `config.userParamsList[].columnName` | Prefer **`user:`** only (validated against user dispatch props) | **`user:`** and/or **`client:`** (validated against user props + client-param list) |
45
+ | `config.authConfig` | Optional HTTP auth (`enable` / `secretKey` / `secretType`) | Usually omit / unused |
46
+ | `config.paramsList` | Content template — same type enum for both | Same |
47
+ | Reach funnel | Same outer fields | Same |
38
48
 
39
- - `1`: `WEBHOOK`
40
- - `2`: `APP_PUSH`
41
- - `3`: `CLIENT_PUSH`
42
- - `4`: `WECHAT`
43
- - `5`: `DOU_YIN`
49
+ Prefix convention (aligned with 配置中心通道管理):
44
50
 
45
- ### `req.channelSubBizType`
51
+ - User property → `user:<prop_name>` (e.g. `user:#account_id`, `user:city`)
52
+ - Client parameter → `client:<column_name>` (e.g. `client:#os`, `client:#distinct_id`)
53
+ - Never pass bare `#account_id` / `city` for `pushIdType` or `columnName`
46
54
 
47
- Common values are listed below and should usually match `channelType`:
55
+ ## Preflight
48
56
 
49
- - `webhook`: Webhook channel
50
- - `fcm`: App Push, Firebase Cloud Messaging
51
- - `aurora`: App Push, Aurora
52
- - `apns`: App Push, Apple Push Notification Service
53
- - `client`: Client Push
54
- - `wechat_mini_game`: WeChat mini game
55
- - `dou_yin_recommended_game_card`: Douyin recommended game card
57
+ ```bash
58
+ # User properties (both kinds; required for webhook custom params)
59
+ ae-cli analysis-meta property list --project-id <id> --scope user --query <kw> --limit 50
56
60
 
57
- ### `req.enableTouchEvent`
61
+ # Client parameters (client channel pushId / custom params)
62
+ ae-cli engage-setting client-param list --project-id <id>
58
63
 
59
- - `0`: disable touch events
60
- - `1`: enable touch events
64
+ # Optional: copy a real config shape
65
+ ae-cli engage-setting channel list --project-id <id>
66
+ ae-cli engage-setting channel get --project-id <id> --channel-id <id>
67
+ ```
61
68
 
62
- ## Additional Constraints
69
+ If a property / client-param is not found after list/get, stop — do not invent codes.
63
70
 
64
- - `req.config` must be a JSON string, not a JSON object.
65
- - `req.channelSubBizType` should match the actual channel capability; for example, when `channelType=1`, `webhook` is usually used.
66
- - If delivery or click callbacks are required, also check that `eventDeliveryName`, `eventClickName`, and `touchEventSource` are complete.
71
+ ---
67
72
 
68
- ## Safety Constraints
73
+ ## A. Webhook channel
74
+
75
+ ```text
76
+ channelType=1, channelSubBizType=webhook
77
+ ```
78
+
79
+ ### Webhook `config` JSON (stringified into `req.config`)
80
+
81
+ ```json
82
+ {
83
+ "url": "https://example.com/hook",
84
+ "paramsList": [
85
+ { "key": "title", "keyName": "标题", "type": "STRING", "required": 0 },
86
+ { "key": "body", "keyName": "动态正文", "type": "TEXT", "required": 0, "tips": "$[user:city]" }
87
+ ],
88
+ "userParamsList": [
89
+ {
90
+ "key": "uid",
91
+ "columnName": "user:#account_id",
92
+ "defaultValue": "-",
93
+ "columnDesc": "账号 ID"
94
+ }
95
+ ],
96
+ "authConfig": { "enable": false }
97
+ }
98
+ ```
69
99
 
70
- This command is a **write operation** and creates a new channel. Check that the `--req` fields are complete before executing.
100
+ | Field | Required | Notes |
101
+ |-------|----------|-------|
102
+ | `url` | Yes | Real HTTP(S) webhook endpoint |
103
+ | `paramsList` | No | Content template definitions |
104
+ | `userParamsList` | No | Custom params; `columnName` = `user:…`; `defaultValue` must be non-blank |
105
+ | `authConfig` | No | When `enable=true`, `secretKey` required |
71
106
 
72
- ## Examples
107
+ Do **not** put `client:…` in webhook `userParamsList` unless you have confirmed the environment accepts it — create validation uses **user** dispatch props.
108
+
109
+ ### Webhook example
73
110
 
74
111
  ```bash
75
112
  ae-cli engage-setting channel create --project-id 1 \
76
- --req '{"channelType":1,"channelSubBizType":"webhook","channelName":"demo","pushIdType":"user_id","config":"{}","enableTouchEvent":0,"eventClickName":"","eventDeliveryName":"","touchEventSource":""}'
113
+ --req '{"channelType":1,"channelSubBizType":"webhook","channelName":"demo_webhook","pushIdType":"user:#account_id","config":"{\"url\":\"https://example.com/hook\",\"paramsList\":[{\"key\":\"title\",\"keyName\":\"标题\",\"type\":\"STRING\",\"required\":0}],\"userParamsList\":[{\"key\":\"city\",\"columnName\":\"user:city\",\"defaultValue\":\"-\"}],\"authConfig\":{\"enable\":false}}","enableTouchEvent":1,"eventDeliveryName":"ops_view","eventClickName":"ops_click","touchEventSource":"custom"}'
114
+ ```
115
+
116
+ ---
117
+
118
+ ## B. Client channel
119
+
120
+ ```text
121
+ channelType=3, channelSubBizType=client
77
122
  ```
123
+
124
+ ### Client `config` JSON (stringified into `req.config`)
125
+
126
+ ```json
127
+ {
128
+ "url": "popup",
129
+ "paramsList": [
130
+ { "key": "messageType", "keyName": "消息类型", "type": "NUM", "required": 0 },
131
+ {
132
+ "key": "gifts",
133
+ "keyName": "礼包",
134
+ "type": "OBJ_ARRAY",
135
+ "required": 0,
136
+ "objArray": [
137
+ { "key": "gift_name", "keyName": "道具名", "type": "STRING", "required": 0 },
138
+ { "key": "count", "keyName": "数量", "type": "NUM", "required": 0 }
139
+ ]
140
+ }
141
+ ],
142
+ "userParamsList": [
143
+ {
144
+ "key": "os",
145
+ "columnName": "client:#os",
146
+ "defaultValue": "-",
147
+ "columnDesc": "操作系统"
148
+ },
149
+ {
150
+ "key": "city",
151
+ "columnName": "user:city",
152
+ "defaultValue": "-",
153
+ "columnDesc": "城市"
154
+ }
155
+ ]
156
+ }
157
+ ```
158
+
159
+ | Field | Required | Notes |
160
+ |-------|----------|-------|
161
+ | `url` | Yes | **Client scene / config key** (string id like `popup`, `abtest`) — not an HTTP URL |
162
+ | `paramsList` | No | Content template (same type enum as webhook) |
163
+ | `userParamsList` | No | `columnName` may be `user:…` **or** `client:…`; `defaultValue` non-blank |
164
+ | `authConfig` | No | Usually omit |
165
+
166
+ `pushIdType` examples: `user:#account_id`, `client:#distinct_id` (discover client codes via `client-param list`).
167
+
168
+ ### Client example
169
+
170
+ ```bash
171
+ ae-cli engage-setting channel create --project-id 1 \
172
+ --req '{"channelType":3,"channelSubBizType":"client","channelName":"demo_client","pushIdType":"client:#distinct_id","config":"{\"url\":\"popup\",\"paramsList\":[{\"key\":\"type\",\"keyName\":\"场景\",\"type\":\"STRING\",\"required\":0}],\"userParamsList\":[{\"key\":\"os\",\"columnName\":\"client:#os\",\"defaultValue\":\"-\"}]}","enableTouchEvent":0,"eventClickName":"","eventDeliveryName":"","touchEventSource":"custom"}'
173
+ ```
174
+
175
+ ---
176
+
177
+ ## Content template types (`paramsList[].type`) — both kinds
178
+
179
+ | type | Meaning |
180
+ |------|---------|
181
+ | `STRING` | 文本 |
182
+ | `TEXT` | 动态文本 (`$[user:…]` / `$[client:…]` placeholders) |
183
+ | `NUM` | 数值 |
184
+ | `OBJ_ARRAY` | 对象组 (`objArray` children required) |
185
+ | `DATE` | 日期 |
186
+ | `DATE_TIME` | 时间 |
187
+ | `ARRAY` | 列表 |
188
+ | `SINGLE_SELECT` | 单选下拉 (**requires** existing config-table `tableId`) |
189
+ | `RADIO` | 单选 |
190
+
191
+ `required`: `0` optional · `1` required. `OBJ_ARRAY` children: `STRING` / `NUM` / `DATE` / `DATE_TIME` / `TEXT` / `SINGLE_SELECT` only.
192
+
193
+ ## Other channel types
194
+
195
+ `channelType` also supports `2` APP_PUSH (`fcm` / `aurora` / `apns`), `4` WECHAT, `5` DOU_YIN — each has its own `config` DTO. Discover with `channel get` on an existing channel of that subtype before creating; do not invent FCM/APNs secrets.
196
+
197
+ ## Additional Constraints
198
+
199
+ - `req.config` must be a **JSON string**, not a nested object in the CLI flag.
200
+ - Match `channelSubBizType` to `channelType` (`1`↔`webhook`, `3`↔`client`).
201
+ - When `enableTouchEvent=1`, set `touchEventSource` plus delivery/click event names.
202
+ - For webhook tests, prefer a known mock URL from `channel get` rather than inventing production endpoints.
203
+
204
+ ## Safety Constraints
205
+
206
+ This command is a **write operation**. Verify `--req` completeness and the correct webhook vs client rules before executing.
@@ -14,20 +14,16 @@ Use this sequence when creating or updating a task draft:
14
14
 
15
15
  1. Query channels with `ae-cli engage-setting channel list --project-id <projectId>`.
16
16
  2. Call `ae-cli engage-task task build-save-guide --project-id <projectId> --req '{...}'`.
17
- 3. If the guide says QP-derived fields are required, fetch the skill definition first:
17
+ 3. Use semantic definitions for audience, trigger, and completion fields:
18
18
 
19
- ```bash
20
- ae-cli engage-setting query cluster-qp-skill --project-id <projectId>
21
- # optional selectors:
22
- ae-cli engage-setting query cluster-qp-skill --project-id <projectId> --response-mode full --condition-subtype all
23
- ```
19
+ - `targetConfig.definitionRequest`
20
+ - `triggerConfig.triggerDefinition` (required for `triggerType=3/4/5`)
21
+ - `completionIndicatorDef.completionIndicators[].eventDefinition`
24
22
 
25
- Use the returned `skill` text to build:
26
-
27
- - `targetConfig.qp`
28
- - `triggerConfig.triggerRule` (required for `triggerType=3/4/5`)
29
- - `clientConfig.clientQp`
30
- - `completionIndicatorDef.event`
23
+ Build event primitives from `ae-analysis` user-cluster / audience models. Hermes wraps those
24
+ primitives in the task-specific envelope selected by `channelType`, `triggerType`, and
25
+ `eventTriggerType`, then validates the final persisted QP before save. Never construct persisted
26
+ execution QP.
31
27
 
32
28
  For existing-cluster audiences (`targetClusterType=2`), you may copy server-authored definitions via:
33
29
 
@@ -41,11 +37,8 @@ ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<cl
41
37
  Important:
42
38
 
43
39
  - Do not treat audience creation as a fixed preflight step.
44
- - Create/read the audience only when the guide indicates that you need to construct:
45
- - `targetConfig.qp`
46
- - `triggerConfig.triggerRule`
47
- - `clientConfig.clientQp`
48
- - `completionIndicatorDef.event`
40
+ - Discover event/property metadata when semantic definitions reference those fields.
41
+ - Omit the server-authored `clientConfig.clientQp`; partial updates preserve it.
49
42
 
50
43
  ---
51
44
 
@@ -64,6 +57,7 @@ Common request patterns:
64
57
  ```bash
65
58
  ae-cli engage-task task build-save-guide --project-id 1 --req '{}'
66
59
  ae-cli engage-task task build-save-guide --project-id 1 --req '{"context":{"triggerType":2,"channelId":"channel_123"}}'
60
+ ae-cli engage-task task build-save-guide --project-id 1 --req '{"context":{"channelType":2,"triggerType":3,"eventTriggerType":2}}'
67
61
  ae-cli engage-task task build-save-guide --project-id 1 --req '{"draft":{"baseInfo":{"taskName":"Demo Task"}}}'
68
62
  ```
69
63
 
@@ -92,6 +86,7 @@ Use `context` when you want scenario-specific guidance without writing a partial
92
86
  Typical fields:
93
87
 
94
88
  - `triggerType`
89
+ - `eventTriggerType`
95
90
  - `targetClusterType`
96
91
  - `channelType`
97
92
  - `channelId`
@@ -104,7 +99,9 @@ Example:
104
99
  ```json
105
100
  {
106
101
  "context": {
107
- "triggerType": 2,
102
+ "channelType": 2,
103
+ "triggerType": 3,
104
+ "eventTriggerType": 2,
108
105
  "targetClusterType": 2,
109
106
  "channelId": "channel_123"
110
107
  }
@@ -190,7 +187,7 @@ This section describes the high-level contract:
190
187
 
191
188
  - final tool is `save_task`
192
189
  - required preflight is `query_channel_list -> build_task_save_guide`
193
- - QP-derived fields require a server-authored audience: direct `analysis user-cluster create`, followed by `analysis user-cluster get`
190
+ - audience, trigger, and completion conditions use semantic definitions
194
191
  - `save_task.req` must be a grouped JSON object
195
192
 
196
193
  ### 4.6 `scenario`
@@ -224,6 +221,8 @@ It includes:
224
221
 
225
222
  - grouped block rules
226
223
  - structured conditional rules
224
+ - the server/client × `triggerType` × `eventTriggerType` combination matrix
225
+ - type-specific aggregate, continuous, ordered, and every-completion event shapes
227
226
  - related-parameter rules
228
227
  - unsupported fields / values / combinations
229
228
  - `channelContentSchema`
@@ -248,6 +247,25 @@ Do not invent free-form content items such as:
248
247
 
249
248
  Instead, use the valid item structure and put message text into `value`.
250
249
 
250
+ #### `fieldRules.blocks.triggerConfig.triggerDefinitionSchema`
251
+
252
+ For event-triggered tasks, read all of these fields before constructing `triggerDefinition`:
253
+
254
+ - `combinationMatrix`
255
+ - `ruleFields`
256
+ - `eventShapes`
257
+ - `examples`
258
+
259
+ The guide treats the A rule as a discriminated envelope:
260
+
261
+ - `eventTriggerType=0`: aggregate events
262
+ - `eventTriggerType=1`: exactly one count/eq event with value at least 2, plus optional blacklist
263
+ - `eventTriggerType=2`: at least two ordered steps with `eventDefinition` and `hasDone`
264
+ - `eventTriggerType=3`: client-side count/eq/1 events with `eventTriggerCaliberType`
265
+
266
+ Do not copy the accumulated example and only change `eventTriggerType`. Hermes rejects a final QP
267
+ whose event structure does not match its envelope.
268
+
251
269
  ### 4.9 `handoff`
252
270
 
253
271
  This is the final section before `save_task`.
@@ -278,14 +296,9 @@ Recommended usage pattern:
278
296
  3. read `fieldRules.channelContentSchema`
279
297
  4. read `handoff.reqTemplate`
280
298
  5. fix everything in `blockingPlaceholders`
281
- 6. if the guide points to an audience or QP-derived fields, call:
282
-
283
- ```bash
284
- ae-cli analysis user-cluster create --project-id <projectId> --cluster-name <condition_cluster_name> --display-name <display_name> --definition-request '<semantic-definition-json>'
285
- ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<condition_cluster_name>"]'
286
- ```
287
-
288
- 7. prefer the created cluster reference; only copy server-authored fields from `user-cluster get` when the guide explicitly requires QP-derived fields
299
+ 6. if the guide points to an audience, trigger, or completion condition, add the semantic
300
+ definition directly
301
+ 7. omit `clientConfig.clientQp`; partial updates preserve the server-authored value
289
302
  8. call `engage-task task save`
290
303
 
291
304
  ---
@@ -19,8 +19,8 @@ ae-cli engage-setting channel update-config \
19
19
  | `--channel-id` | Yes | Channel ID to update. |
20
20
  | `--enable-touch-event` | Yes | Reach funnel toggle: `1` enabled, `0` disabled. |
21
21
  | `--channel-name` | No | New channel name. |
22
- | `--push-id-type` | No | User property used as the push ID. |
23
- | `--config` | No | Channel-specific JSON config string (see ChannelConfigDTO). |
22
+ | `--push-id-type` | No | Prefixed push ID: webhook prefers `user:…`; client allows `user:…` or `client:…` (see `add-channel.md`). |
23
+ | `--config` | No | Channel JSON string. Webhook `url` = HTTP(S); client `url` = scene key. Custom `columnName` prefixes differ — see `add-channel.md`. |
24
24
  | `--touch-event-source` | No | Reach event source. |
25
25
  | `--event-delivery-name` | No | Actual delivery event name. |
26
26
  | `--event-click-name` | No | Click event name. |
@@ -33,4 +33,5 @@ ae-cli engage-setting channel update-config \
33
33
 
34
34
  - Use this command when the user asks to edit/update an existing channel's name, config, push-id type, or reach-funnel settings.
35
35
  - `--config` is the channel-specific JSON config; discover the existing config with `ae-cli engage-setting channel get` first rather than inventing it.
36
+ - Keep webhook vs client rules from `add-channel.md` when editing `url` / `pushIdType` / `userParamsList`.
36
37
  - Risk is `write`; ordinary update, no confirmation gate.
@@ -1,142 +1,70 @@
1
- # engage-setting common-metric
1
+ # Common metric semantic definitions
2
2
 
3
- > Capability ids: `engage-setting.common-metric.{list,get,create,update,delete}` · Domain: `engage`.
4
- > Auth: read uses `opsViewSetting` (list also allows `opsViewOperationTask`); write/delete use `opsEditSetting`.
3
+ > Trigger keywords: common metric, shared metric · Capability ids: `engage-setting.common-metric.{list,get,create,update,delete}` · Permission: `opsEditSetting`.
4
+
5
+ Common metric capabilities expose semantic event/formula definitions. Do not submit or reuse `metric_qp`, `Axxx`, display metadata, formula dependency internals, or property metadata.
5
6
 
6
7
  ## Commands
7
8
 
8
9
  ```bash
9
- # List common metrics
10
10
  ae-cli engage-setting common-metric list --project-id <project_id>
11
-
12
- # Get a common metric detail
13
11
  ae-cli engage-setting common-metric get --project-id <project_id> --metric-name <name>
14
-
15
- # Create a PRESET common metric (metric-type must be 1)
16
- ae-cli engage-setting common-metric create \
17
- --project-id <project_id> --metric-type 1 --metric-name <name> --metric-qp '<qp_json>' \
18
- --metric-window-num 1 --metric-window-time-unit day --display-name <display>
19
-
20
- # Update a common metric
21
- ae-cli engage-setting common-metric update \
22
- --project-id <project_id> --metric-type 1 --metric-name <name> --metric-qp '<qp_json>' \
23
- --metric-window-num <num> --metric-window-time-unit day --display-name <display>
24
-
25
- # Delete a common metric (high-risk)
12
+ ae-cli engage-setting common-metric create --project-id <project_id> --metric-type 1 \
13
+ --metric-name <name> --metric-definition '<json>' \
14
+ --metric-window-num 1 --metric-window-time-unit day --display-name <display_name>
15
+ ae-cli engage-setting common-metric update --project-id <project_id> --metric-type 1 \
16
+ --metric-name <name> --metric-definition '<json>' \
17
+ --metric-window-num 1 --metric-window-time-unit day --display-name <display_name>
26
18
  ae-cli engage-setting common-metric delete --project-id <project_id> --metric-name <name> --yes
27
19
  ```
28
20
 
29
- ## Parameters
30
-
31
- ### list
32
-
33
- | Parameter | Required | Description |
34
- |---|---|---|
35
- | `--project-id` / `-p` | Yes | Numeric project ID. |
36
-
37
- ### get / delete
38
-
39
- | Parameter | Required | Description |
40
- |---|---|---|
41
- | `--project-id` / `-p` | Yes | Numeric project ID. |
42
- | `--metric-name` | Yes | Metric name. |
43
-
44
- ### create / update
45
-
46
- | Parameter | Required | Description |
47
- |---|---|---|
48
- | `--project-id` / `-p` | Yes | Numeric project ID. |
49
- | `--metric-type` | Yes | `1` = PRESET (common metric). **create requires `1`**. Do not use `2` (CUSTOM / task-side). |
50
- | `--metric-name` | Yes | Technical name; prefer `^[a-z][0-9a-z_]{0,79}$`. |
51
- | `--metric-qp` | Yes | Complete metric QP **JSON object string** (`type=0` event or `type=1` formula). |
52
- | `--metric-window-num` | Yes | Window size (integer ≥ 1). |
53
- | `--metric-window-time-unit` | Yes | `minute` / `hour` / `day` (lowercase). |
54
- | `--display-name` | Yes | Display name. |
55
- | `--note` | No | Remark. |
56
- | `--order-id` | No | Sort order (usually omit on setting-page create). |
57
- | `--metric-setting-id` | No | Binding id (task/config metricMap; usually omit on setting-page create). |
58
- | `--metric-params` | No | Params JSON string; for formula metrics often `{"format":"float"}`. |
59
-
60
- ## Output
61
-
62
- - `list`: `data.items` (each with `project_id`, `metric_type`, `metric_name`, `metric_qp`, `metric_window_num`, `metric_window_time_unit`, `note`, `last_editer`, `last_update_time`, `order_id`, `display_name`, `metric_setting_id`, `metric_params`) and `data.total`.
63
- - `get`: `data.metric` — a single metric object with the same fields, or `null`.
64
- - `create` / `update` / `delete`: `data.success`.
65
-
66
- ## Agent workflow (Pattern A: discover → match → assemble QP → write)
67
-
68
- Unlike the Engage console (user picks events in a picker), Agents must discover real project metadata first. Never invent `event_name` / property names / `--metric-qp` placeholders such as `event`.
69
-
70
- ```bash
71
- # 1) Discover candidate events (keyword: payment / recharge / purchase / ...)
72
- ae-cli analysis-meta event list --project-id <project_id> --query <keyword> \
73
- --fields '["event_name","event_desc","authentication_status"]' --limit 20
74
-
75
- # Optional soft hint: project recharge-success event name
76
- ae-cli engage-setting preset-event list --project-id <project_id>
77
- # → data.recharge_event_desc may contain eventName (not a ready metric_qp)
78
-
79
- # 2) If filters are needed, list properties for the matched event
80
- ae-cli analysis-meta property list --project-id <project_id> \
81
- --scope event --event-name <matched_event_name>
82
-
83
- # 3) Assemble a type=0 metric QP object from the matched event, then create
84
- ae-cli engage-setting common-metric create --project-id <project_id> \
85
- --metric-type 1 --metric-name <name> --metric-qp '<qp_json>' \
86
- --metric-window-num 1 --metric-window-time-unit day --display-name <display>
87
- ```
88
-
89
- If multiple events remain plausible after discovery, stop and ask the user which `event_name` to use.
90
-
91
- ## `--metric-qp` example (type=0 event analysis)
92
-
93
- Pass as a single JSON **object string**. Minimal shape aligned with the Engage setting-page event metric:
21
+ ## Event metric
94
22
 
95
23
  ```json
96
24
  {
97
- "type": 0,
98
- "eventName": "purchase",
99
- "eventDesc": "Purchase",
100
- "eventType": "event",
101
- "analysis": "A100",
102
- "analysisDesc": "Total count",
103
- "analysisParams": "",
104
- "quota": "",
105
- "quotaDesc": "",
106
- "filts": [],
107
- "relation": 1,
108
- "customEvent": "",
109
- "customFilters": [],
110
- "eventNameDisplay": "Purchase total count",
111
- "subTableType": "",
112
- "taPropQuota": {
113
- "analysis": "A100",
114
- "analysisDesc": "Total count",
115
- "analysisParams": "",
116
- "quota": "",
117
- "quotaDesc": ""
25
+ "type": "event",
26
+ "event": "purchase",
27
+ "aggregation": "sum",
28
+ "property": "amount",
29
+ "filters": {
30
+ "relation": "and",
31
+ "items": [
32
+ {
33
+ "field": "currency",
34
+ "operator": "eq",
35
+ "values": ["USD"]
36
+ }
37
+ ]
118
38
  }
119
39
  }
120
40
  ```
121
41
 
122
- CLI rejects non-JSON, non-object, and `{}` values before the request is sent.
42
+ Supported aggregations include `total_count`, `user_count`, `per_user_count`, `sum`, `avg`, `avg_per_user`, `max`, `min`, `distinct_count`, `median`, `percentile`, `variance`, and `stddev`.
123
43
 
124
- ## Preflight for config-metric batch-add
44
+ ## Formula metric
125
45
 
126
- `engage-scene config-metric batch-add --ta-metric-ids` requires TA common metrics to exist in the project. List them first:
127
-
128
- ```bash
129
- ae-cli engage-setting common-metric list --project-id <project_id>
46
+ ```json
47
+ {
48
+ "type": "formula",
49
+ "expression": "purchases/refunds",
50
+ "format": "percent",
51
+ "dependencies": [
52
+ {
53
+ "type": "event",
54
+ "key": "purchases",
55
+ "event": "purchase",
56
+ "aggregation": "total_count"
57
+ },
58
+ {
59
+ "type": "event",
60
+ "key": "refunds",
61
+ "event": "refund",
62
+ "aggregation": "total_count"
63
+ }
64
+ ]
65
+ }
130
66
  ```
131
67
 
132
- If `items` is empty, create PRESET metrics with `common-metric create` (Pattern A above) or treat the case as environment-blocked.
133
-
134
- ## Decision Rules
68
+ Resolve every event and property through `ae-cli analysis-meta event list` and the corresponding property metadata before writing. `get` and `list` return `metric_definition`, `metric_definition_status`, and an optional unavailable reason. Raw metric QP is hidden.
135
69
 
136
- - Use these commands when the user asks to manage common metrics for the analysis workbench.
137
- - Discover existing metric names with `common-metric list` first; never invent names for `get`/`update`/`delete`.
138
- - For create/update, discover events/properties via `ae-analysis` (`analysis-meta event list` / `property list`) before assembling `--metric-qp`.
139
- - `--metric-type` for setting-page common metrics is always `1` (PRESET). create rejects any other value.
140
- - `--metric-window-time-unit` must be lowercase `minute` / `hour` / `day` (not `DAY`).
141
- - `--metric-qp` must be a complete metric QP JSON object; do not pass `{}` or placeholder strings.
142
- - `delete` is `high-risk-write` and requires `--yes` (or interactive confirmation).
70
+ `metric_type=1` remains required for setting-page common metrics. Metric windows remain separate from the semantic definition, and their unit must be `minute` / `hour` / `day`.
@@ -10,6 +10,19 @@ Mapped command: `ae-cli engage-flow flow get`
10
10
  The flow detail is under `data.flow`. Every response key is snake_case, for example
11
11
  `data.flow.mapping_status`, `data.flow.version_type`, and `data.flow.node_list[].type`.
12
12
 
13
+ For custom-audience nodes, `node_list[].config` remains a JSON string. Parse it and read
14
+ `targetDefinitionRequest`, `definitionStatus`, and optional
15
+ `definitionUnavailableReason`. Branch audiences use the same fields inside
16
+ `branchList[]`. Stored execution QP is hidden. Reuse `targetDefinitionRequest` when
17
+ building the next flow save request.
18
+
19
+ Top-level `completion_indicators` and `current_flow_completion_indicators` are exposed
20
+ as arrays. Each indicator uses semantic `event_definition`; stored `event` execution
21
+ QP is removed. Check `completion_indicators_definition_status` and
22
+ `current_flow_completion_indicators_definition_status` before reusing them. A
23
+ non-`AVAILABLE` status may also include the corresponding
24
+ `*_definition_unavailable_reason`.
25
+
13
26
  ## Flags
14
27
 
15
28
  | Flag | Type | Required | Description |