@thinkingai/ae-cli 6.1.10 → 6.1.12

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 (232) 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-DRLGDVS4.js} +24 -17
  6. package/dist/{capability-YPOQX6PL.js → capability-P6GK3AQH.js} +24 -17
  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 +94 -35
  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-L72HWRGO.js} +716 -118
  46. package/dist/{te-engage-E7F4HTXU.js → te-engage-QWM4GFS7.js} +716 -118
  47. package/dist/{te-experiment-N63WF7XA.js → te-experiment-2T2HEZML.js} +189 -10
  48. package/dist/{te-experiment-D32TB6ZB.js → te-experiment-PVEY7AEZ.js} +189 -10
  49. package/dist/{te-kb-E7NSCBRB.js → te-kb-VRMEY3D4.js} +6 -6
  50. package/dist/{te-meta-GBDTMPEL.js → te-meta-53BVXPFI.js} +7 -7
  51. package/dist/{te-meta-ZTLTSHXC.js → te-meta-TOCBPBXI.js} +7 -7
  52. package/dist/{te-system-AH7DMCAQ.js → te-system-XGS5EQIQ.js} +4 -4
  53. package/dist/{te-team-BQ3SKSZV.js → te-team-BZRDV2CM.js} +7 -7
  54. package/dist/{update-DKG6UXEM.js → update-HEDXGOJH.js} +8 -6
  55. package/package.json +5 -2
  56. package/skills/ae-agent/SKILL.md +178 -16
  57. package/skills/ae-agent/references/add-skill.md +22 -10
  58. package/skills/ae-agent/references/edit-skill.md +24 -14
  59. package/skills/ae-agent/references/find-archived-conversations.md +82 -0
  60. package/skills/ae-agent/references/restore-conversation.md +54 -0
  61. package/skills/ae-agent/references/upload-skill.md +24 -14
  62. package/skills/ae-analysis/SKILL.md +1 -1
  63. package/skills/ae-analysis/references/command_index.md +104 -42
  64. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  65. package/skills/ae-analysis/references/project_access_detail_get.md +3 -3
  66. package/skills/ae-analysis/references/project_data_power_delete.md +3 -3
  67. package/skills/ae-analysis/references/project_data_power_get.md +3 -3
  68. package/skills/ae-analysis/references/project_data_power_list.md +3 -3
  69. package/skills/ae-analysis/references/project_data_power_upsert.md +3 -3
  70. package/skills/ae-analysis/references/project_entity_create.md +3 -3
  71. package/skills/ae-analysis/references/project_entity_delete.md +3 -3
  72. package/skills/ae-analysis/references/project_entity_event_list.md +3 -3
  73. package/skills/ae-analysis/references/project_entity_get.md +3 -3
  74. package/skills/ae-analysis/references/project_entity_list.md +3 -3
  75. package/skills/ae-analysis/references/project_entity_update.md +3 -3
  76. package/skills/ae-analysis/references/project_function_list.md +3 -3
  77. package/skills/ae-analysis/references/project_info_create.md +25 -0
  78. package/skills/ae-analysis/references/project_info_delete.md +24 -0
  79. package/skills/ae-analysis/references/project_info_get.md +3 -3
  80. package/skills/ae-analysis/references/project_info_list.md +3 -3
  81. package/skills/ae-analysis/references/project_info_update.md +3 -3
  82. package/skills/ae-analysis/references/project_mark_time_create.md +3 -3
  83. package/skills/ae-analysis/references/project_mark_time_delete.md +3 -3
  84. package/skills/ae-analysis/references/project_mark_time_list.md +3 -3
  85. package/skills/ae-analysis/references/project_mark_time_update.md +3 -3
  86. package/skills/ae-analysis/references/project_member_add.md +3 -3
  87. package/skills/ae-analysis/references/project_member_batch_update.md +3 -3
  88. package/skills/ae-analysis/references/project_member_candidate_list.md +3 -3
  89. package/skills/ae-analysis/references/project_member_handover_export.md +3 -3
  90. package/skills/ae-analysis/references/project_member_handover_run.md +3 -3
  91. package/skills/ae-analysis/references/project_member_import.md +3 -3
  92. package/skills/ae-analysis/references/project_member_list.md +3 -3
  93. package/skills/ae-analysis/references/project_member_receiver_list.md +3 -3
  94. package/skills/ae-analysis/references/project_member_remove.md +3 -3
  95. package/skills/ae-analysis/references/project_member_update.md +3 -3
  96. package/skills/ae-analysis/references/project_owner_update.md +3 -3
  97. package/skills/ae-analysis/references/project_permission_binding_list.md +3 -3
  98. package/skills/ae-analysis/references/project_receive_status_update.md +3 -3
  99. package/skills/ae-analysis/references/project_role_delete.md +3 -3
  100. package/skills/ae-analysis/references/project_role_function_list.md +3 -3
  101. package/skills/ae-analysis/references/project_role_get.md +3 -3
  102. package/skills/ae-analysis/references/project_role_list.md +3 -3
  103. package/skills/ae-analysis/references/project_role_upsert.md +3 -3
  104. package/skills/ae-analysis/references/project_role_user_list.md +3 -3
  105. package/skills/ae-analysis/references/project_space_list.md +1 -1
  106. package/skills/ae-analysis/references/project_timezone_get.md +3 -3
  107. package/skills/ae-analysis/references/project_timezone_overview.md +3 -3
  108. package/skills/ae-analysis/references/project_timezone_update.md +3 -3
  109. package/skills/ae-analysis/references/project_user_id_items_update.md +3 -3
  110. package/skills/ae-analysis/references/system_admin_function_list.md +22 -0
  111. package/skills/ae-analysis/references/system_admin_function_update.md +26 -0
  112. package/skills/ae-analysis/references/system_admin_list.md +21 -0
  113. package/skills/ae-analysis/references/system_admin_remove.md +25 -0
  114. package/skills/ae-analysis/references/system_admin_upsert.md +25 -0
  115. package/skills/ae-analysis/references/system_function_list.md +21 -0
  116. package/skills/ae-analysis/references/system_member_add.md +25 -0
  117. package/skills/ae-analysis/references/system_member_candidate_list.md +22 -0
  118. package/skills/ae-analysis/references/system_member_delete.md +25 -0
  119. package/skills/ae-analysis/references/system_member_list.md +24 -0
  120. package/skills/ae-analysis/references/system_member_mfa_unbind.md +25 -0
  121. package/skills/ae-analysis/references/system_member_password_reset.md +32 -0
  122. package/skills/ae-analysis/references/system_member_project_batch_update.md +27 -0
  123. package/skills/ae-analysis/references/system_member_status_update.md +26 -0
  124. package/skills/ae-analysis/references/system_member_update.md +23 -0
  125. package/skills/ae-analysis/references/system_mfa_get.md +21 -0
  126. package/skills/ae-analysis/references/system_mfa_update.md +25 -0
  127. package/skills/ae-analysis/references/system_node_monitor_list.md +24 -0
  128. package/skills/ae-analysis/references/system_oauth2_update.md +22 -0
  129. package/skills/ae-analysis/references/system_ops_alert_contact_delete.md +25 -0
  130. package/skills/ae-analysis/references/system_ops_alert_contact_list.md +23 -0
  131. package/skills/ae-analysis/references/system_ops_alert_contact_test.md +29 -0
  132. package/skills/ae-analysis/references/system_ops_alert_contact_upsert.md +39 -0
  133. package/skills/ae-analysis/references/system_preference_get.md +21 -0
  134. package/skills/ae-analysis/references/system_preference_update.md +22 -0
  135. package/skills/ae-analysis/references/system_project_usage_list.md +28 -0
  136. package/skills/ae-analysis/references/system_query_alert_rule_list.md +21 -0
  137. package/skills/ae-analysis/references/system_query_alert_rule_update.md +26 -0
  138. package/skills/ae-analysis/references/system_query_monitor_overview.md +26 -0
  139. package/skills/ae-analysis/references/system_query_task_cancel.md +25 -0
  140. package/skills/ae-analysis/references/system_query_task_export.md +49 -0
  141. package/skills/ae-analysis/references/system_query_task_get.md +23 -0
  142. package/skills/ae-analysis/references/system_query_task_list.md +35 -0
  143. package/skills/ae-analysis/references/system_query_task_options.md +27 -0
  144. package/skills/ae-analysis/references/system_receiver_address_delete.md +26 -0
  145. package/skills/ae-analysis/references/system_receiver_address_overview.md +21 -0
  146. package/skills/ae-analysis/references/system_receiver_address_project_list.md +21 -0
  147. package/skills/ae-analysis/references/system_receiver_address_promote.md +24 -0
  148. package/skills/ae-analysis/references/system_receiver_address_upsert.md +27 -0
  149. package/skills/ae-analysis/references/system_receiver_detection_get.md +22 -0
  150. package/skills/ae-analysis/references/system_receiver_detection_run.md +22 -0
  151. package/skills/ae-analysis/references/system_receiver_detection_update.md +25 -0
  152. package/skills/ae-analysis/references/system_role_delete.md +26 -0
  153. package/skills/ae-analysis/references/system_role_function_list.md +22 -0
  154. package/skills/ae-analysis/references/system_role_get.md +22 -0
  155. package/skills/ae-analysis/references/system_role_list.md +24 -0
  156. package/skills/ae-analysis/references/system_role_upsert.md +27 -0
  157. package/skills/ae-analysis/references/system_role_user_list.md +22 -0
  158. package/skills/ae-analysis/references/system_seat_list.md +25 -0
  159. package/skills/ae-analysis/references/system_seat_update.md +26 -0
  160. package/skills/ae-analysis/references/system_smtp_delete.md +24 -0
  161. package/skills/ae-analysis/references/system_smtp_get.md +21 -0
  162. package/skills/ae-analysis/references/system_smtp_test.md +22 -0
  163. package/skills/ae-analysis/references/system_smtp_upsert.md +31 -0
  164. package/skills/ae-analysis/references/system_third_party_login_disable.md +25 -0
  165. package/skills/ae-analysis/references/system_third_party_login_list.md +21 -0
  166. package/skills/ae-analysis/references/system_third_party_login_upsert.md +33 -0
  167. package/skills/ae-analysis/references/system_usage_overview.md +21 -0
  168. package/skills/ae-analysis/references/system_usage_trend_export.md +44 -0
  169. package/skills/ae-analysis/references/system_usage_trend_query.md +28 -0
  170. package/skills/ae-dataops/SKILL.md +1 -1
  171. package/skills/ae-dataops/references/dataops-flow-create.md +51 -16
  172. package/skills/ae-engage/SKILL.md +67 -27
  173. package/skills/ae-engage/references/activity-activity.md +3 -0
  174. package/skills/ae-engage/references/activity-approval.md +12 -4
  175. package/skills/ae-engage/references/activity-data-detail.md +61 -0
  176. package/skills/ae-engage/references/activity-task.md +21 -6
  177. package/skills/ae-engage/references/activity-topic.md +31 -13
  178. package/skills/ae-engage/references/add-channel.md +170 -41
  179. package/skills/ae-engage/references/build-task-save-guide.md +66 -29
  180. package/skills/ae-engage/references/channel-update-config.md +3 -2
  181. package/skills/ae-engage/references/common-metric.md +88 -115
  182. package/skills/ae-engage/references/flow-detail.md +13 -0
  183. package/skills/ae-engage/references/preset-event.md +14 -32
  184. package/skills/ae-engage/references/save-flow.md +141 -64
  185. package/skills/ae-engage/references/save-task.md +231 -58
  186. package/skills/ae-engage/references/scene-config-metric.md +3 -0
  187. package/skills/ae-engage/references/scene-preset-metric.md +8 -37
  188. package/skills/ae-engage/references/scene-strategy-audience.md +56 -643
  189. package/skills/ae-engage/references/scene-strategy.md +6 -6
  190. package/skills/ae-engage/references/task-detail.md +10 -0
  191. package/skills/ae-engage/references/task-submit-approval.md +45 -0
  192. package/skills/ae-engage/references/validate-flow-node-config.md +1 -1
  193. package/skills/ae-experiment/SKILL.md +38 -5
  194. package/skills/ae-experiment/references/check_experiment_ready.md +2 -0
  195. package/skills/ae-experiment/references/delete_metric.md +2 -0
  196. package/skills/ae-experiment/references/query_experiment_detail.md +6 -0
  197. package/skills/ae-experiment/references/query_experiment_list.md +4 -0
  198. package/skills/ae-experiment/references/query_experiment_list_archived.md +3 -0
  199. package/skills/ae-experiment/references/query_experiment_metric_trend.md +5 -5
  200. package/skills/ae-experiment/references/query_experiment_report_summary.md +4 -3
  201. package/skills/ae-experiment/references/query_experiment_sample_size_report.md +6 -5
  202. package/skills/ae-experiment/references/query_metric_detail.md +5 -0
  203. package/skills/ae-experiment/references/query_metric_list.md +3 -0
  204. package/skills/ae-experiment/references/save_build_guide.md +39 -0
  205. package/skills/ae-experiment/references/save_experiment.md +53 -3
  206. package/skills/ae-experiment/references/save_metric.md +67 -1
  207. package/skills/ae-experiment/references/save_submit_experiment.md +3 -0
  208. package/skills/ae-experiment/references/save_validate.md +33 -0
  209. package/skills/ae-experiment-design/SKILL.md +149 -0
  210. package/skills/ae-experiment-design/agents/openai.yaml +4 -0
  211. package/skills/ae-experiment-design/references/client-experiment-sdk.md +147 -0
  212. package/skills/ae-experiment-design/references/experiment-creation.md +108 -0
  213. package/skills/ae-experiment-design/references/experiment-sdk-contract.md +100 -0
  214. package/skills/ae-experiment-design/references/exposure-contract.md +91 -0
  215. package/skills/ae-experiment-design/references/hybrid-experiment-sdk.md +74 -0
  216. package/skills/ae-experiment-design/references/metric-readiness.md +143 -0
  217. package/skills/ae-experiment-design/references/platform-operations.md +105 -0
  218. package/skills/ae-experiment-design/references/sdk-index.md +76 -0
  219. package/skills/ae-experiment-design/references/sdk-integration.md +114 -0
  220. package/skills/ae-experiment-design/references/sdk-troubleshooting.md +139 -0
  221. package/skills/ae-experiment-design/references/server-experiment-sdk.md +78 -0
  222. package/skills/ae-experiment-design/scripts/calculate_experiment_plan.py +450 -0
  223. package/skills/ae-experiment-insight/SKILL.md +149 -0
  224. package/skills/ae-experiment-insight/agents/openai.yaml +4 -0
  225. package/skills/ae-experiment-insight/references/decision-framework.md +69 -0
  226. package/skills/ae-experiment-insight/references/diagnostic-playbook.md +225 -0
  227. package/skills/ae-experiment-insight/references/platform-operations.md +82 -0
  228. package/skills/ae-experiment-insight/scripts/analyze_experiment.py +478 -0
  229. package/skills/ae-generate-tracking-code/SKILL.md +2 -2
  230. package/skills/ae-metadata/SKILL.md +1 -1
  231. package/dist/config-BSSALXEN.js +0 -128
  232. package/dist/sync-QFP4XFN3.js +0 -485
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ae-engage
3
3
  version: 1.0.0
4
- description: "AE Engage capability gateway: config center, flows, push/config channels, strategies, templates, and task management. Trigger words: config center, scene config, push channel, config channel, operation strategy, operation task, template, config item, Engage, Hermes, engage-scene, engage-setting, engage-flow, engage-task."
4
+ description: "AE Engage capability gateway: config center, flows, push/config channels, strategies, templates, task management, and operation activities. Trigger words: config center, scene config, push channel, config channel, operation strategy, operation task, operation activity, template, config item, Engage, Hermes, engage-scene, engage-setting, engage-flow, engage-task, engage-activity."
5
5
  ---
6
6
 
7
7
  # ae-engage
@@ -52,10 +52,11 @@ When the user mentions a product term below (including common Chinese UI labels)
52
52
  | **Config center** | Engage scene management / config center overview | `engage-scene` | `references/scene-config-item.md` | `scene-config-param.md`, `scene-config-group.md`, `scene-preset-metric.md`, `scene-config-metric.md`, `scene-config-channel.md`, `channel-mgmt.md`, `scene-strategy.md`, `scene-template.md`; L3 reports: `config-item-trigger-report.md`, `config-item-analysis-report.md`, `config-item-strategy-comparison.md` |
53
53
  | **Scene config** | Same as config center; params, groups, metrics, channels, strategies, and templates under a config item | `engage-scene` | `references/scene-config-item.md` | Same as above; params/groups/metrics: `scene-config-param.md`, `scene-config-group.md`, `scene-preset-metric.md`, `scene-config-metric.md` |
54
54
  | **Config item** | A single config item in the config center | `engage-scene` | `references/scene-config-item.md` | `scene-config-param.md`, `scene-preset-metric.md`, `scene-config-metric.md`, `scene-strategy.md`, `scene-template.md` |
55
- | **Push channel** | Project-level message push channels (Webhook, FCM, APNS, etc.) | `engage-setting` | `references/channel-list.md` | `channel-detail.md`, `add-channel.md`, `update-channel-status.md`, `delete-channel.md`, `channel-update-config.md`, `channel-test-send.md`, `channel_touch_limits_list.md` |
55
+ | **Push channel** | Project-level message push channels (Webhook, FCM, APNS, etc.) | `engage-setting` | `references/channel-list.md` | `channel-detail.md`, `add-channel.md` (**Webhook vs Client differ**: `url` = HTTP vs scene key; custom params `user:` vs `user:`/`client:`), `update-channel-status.md`, `delete-channel.md`, `channel-update-config.md`, `channel-test-send.md`, `channel_touch_limits_list.md` |
56
56
  | **Config channel** | Config-center Webhook/client config channels (not the same as push channels) | `engage-scene` | `references/scene-config-channel.md` | `channel-mgmt.md` (create/enable-disable/copy/delete workflows). User params in `config.customsParamList` require `columnName` with `user:` prefix (e.g. `user:#account_id`); preflight names with ae-analysis `analysis-meta property list/get`. |
57
- | **Operation strategy** | Ops/delivery strategies under a config item | `engage-scene` | `references/scene-strategy.md` | Custom audience QP: [`scene-strategy-audience.md`](references/scene-strategy-audience.md) — **用户满足** `filts[0]` + **用户行为** `filts[1]` two-block mix QP; preflight props (stop + list if missing); examples A/B/C; template: `scene-template.md` |
57
+ | **Operation strategy** | Ops/delivery strategies under a config item | `engage-scene` | `references/scene-strategy.md` | Custom audience: [`scene-strategy-audience.md`](references/scene-strategy-audience.md) — semantic `definitionRequest` (Analysis condition shape); do not pass `targetClusterQp`/`qp`; preflight props (stop + list if missing); template: `scene-template.md` |
58
58
  | **Operation task** | Hermes push/engagement tasks (list, save, lifecycle, reports) | `engage-task` | `references/task-list.md` | `task-detail.md` (get), `save-task.md`, `build-task-save-guide.md`, `task-stats.md`, `task-delete.md`, `push-record-query.md`, `task-data-overview.md`, `task-data-detail.md`, `task-metric-detail.md`, `task-experiment-report.md` |
59
+ | **Operation activity** | Campaign activity management and delivery trends by activity, topic, or standalone task | `engage-activity` | `references/activity-activity.md` | `activity-data-detail.md`, `activity-topic.md`, `activity-task.md`, `activity-approval.md` |
59
60
  | **Template** | Strategy templates under a config item | `engage-scene` | `references/scene-template.md` | `scene-config-param.md` (template fields reference `paramId`); enable via `template update` then `template update-status` before strategy create |
60
61
 
61
62
  **Easy to confuse:**
@@ -75,6 +76,7 @@ Naming boundary:
75
76
 
76
77
  - CLI flags use kebab-case; outer Capability input and all Capability response keys use snake_case.
77
78
  - Nested business DTOs passed through `--req` or `--payload` keep their documented native camelCase fields. Do not mechanically convert those nested DTO keys to snake_case.
79
+ - Semantic audience, event, trigger, completion, and metric definitions are closed contracts. The CLI rejects malformed or unknown semantic fields locally; `--validate` applies the same precise Hermes capability schema without writing.
78
80
  - Successful migrated commands return their business payload under `data`; read the matching reference's Response shape before selecting fields.
79
81
 
80
82
  ## JSON Parameter Format
@@ -145,13 +147,13 @@ ae-cli engage-setting config-table delete --project-id <project_id> --info-id <i
145
147
 
146
148
  # Preset event list / update
147
149
  ae-cli engage-setting preset-event list --project-id <project_id>
148
- ae-cli engage-setting preset-event update --project-id <project_id> --add-event-desc <qp>
150
+ ae-cli engage-setting preset-event update --project-id <project_id> --add-event-definition '<semantic_event_json>'
149
151
 
150
152
  # Common metric list / get / create / update / delete
151
153
  ae-cli engage-setting common-metric list --project-id <project_id>
152
154
  ae-cli engage-setting common-metric get --project-id <project_id> --metric-name <name>
153
- ae-cli engage-setting common-metric create --project-id <project_id> --metric-type 1 --metric-name <name> --metric-qp '<qp_json>' --metric-window-num 1 --metric-window-time-unit day --display-name <display>
154
- ae-cli engage-setting common-metric update --project-id <project_id> --metric-type 1 --metric-name <name> --metric-qp '<qp_json>' --metric-window-num 1 --metric-window-time-unit day --display-name <display>
155
+ ae-cli engage-setting common-metric create --project-id <project_id> --metric-type 1 --metric-name <name> --metric-definition '<semantic_metric_json>' --metric-window-num 1 --metric-window-time-unit day --display-name <display>
156
+ ae-cli engage-setting common-metric update --project-id <project_id> --metric-type 1 --metric-name <name> --metric-definition '<semantic_metric_json>' --metric-window-num 1 --metric-window-time-unit day --display-name <display>
155
157
  ae-cli engage-setting common-metric delete --project-id <project_id> --metric-name <name> --yes
156
158
  ```
157
159
 
@@ -170,6 +172,9 @@ ae-cli engage-task task save --project-id 1 --req '{"baseInfo":{"taskName":"Demo
170
172
  # Query task details
171
173
  ae-cli engage-task task get --project-id 1 --task-id task_123
172
174
 
175
+ # Submit a saved draft task for approval
176
+ ae-cli engage-task task submit-approval --project-id 1 --task-id task_123
177
+
173
178
  ```
174
179
 
175
180
  For L3 task reports, read `references/task-data-overview.md`, `references/task-data-detail.md`,
@@ -210,6 +215,7 @@ ae-cli engage-task group list --project-id 1
210
215
  ae-cli engage-task metric list --project-id 1 --task-id task_id_123
211
216
  ae-cli engage-task channel-ref stats --project-id 1 --channel-id channel_123
212
217
  ae-cli engage-task task delete --project-id 1 --task-id task_id_123 --yes
218
+ ae-cli engage-task task submit-approval --project-id 1 --task-id task_id_123
213
219
 
214
220
  # Query the node schema
215
221
  ae-cli engage-flow node-config schema --project-id 1 --node-type message_push
@@ -241,7 +247,7 @@ ae-cli engage-scene config-group batch-delete --project-id <project_id> --group-
241
247
 
242
248
  # Preset metric get / set
243
249
  ae-cli engage-scene preset-metric get --project-id <project_id> --config-id <config_id>
244
- ae-cli engage-scene preset-metric set --project-id <project_id> --config-id <config_id> --impression-event-qp '<qp>'
250
+ ae-cli engage-scene preset-metric set --project-id <project_id> --config-id <config_id> --impression-event-definition '<semantic_event_json>'
245
251
 
246
252
  # Config metric list / get / batch-add / update-rule / batch-delete
247
253
  ae-cli engage-scene config-metric list --project-id <project_id> --config-id <config_id>
@@ -252,7 +258,7 @@ ae-cli engage-scene config-metric batch-delete --project-id <project_id> --confi
252
258
 
253
259
  # Config channel list / get / create / update / update-status / delete / query-log
254
260
  # User params: verify each customsParamList columnName via ae-analysis property list/get first; then use user:<prop_name>
255
- # Strategy custom audience: scene-strategy-audience.md — mix QP filts[0]=用户满足, filts[1]=用户行为; strategy predict for 预估人数
261
+ # Strategy custom audience: scene-strategy-audience.md — semantic definitionRequest; strategy predict for 预估人数
256
262
  # Workflows: references/channel-mgmt.md · schema: references/scene-config-channel.md
257
263
  ae-cli engage-scene config-channel list --project-id <project_id> [--channel-type 0|1]
258
264
  ae-cli engage-scene config-channel get --project-id <project_id> --channel-id <channel_id>
@@ -266,7 +272,7 @@ ae-cli engage-scene config-channel query-log --project-id <project_id> --channel
266
272
  ae-cli engage-scene strategy create --project-id <project_id> --payload '{"configId":"cfg-1","templateId":"tpl-1","strategyName":"s1"}'
267
273
  ae-cli engage-scene strategy update --project-id <project_id> --payload '{"strategyUuid":"uuid-1"}'
268
274
  ae-cli engage-scene strategy log --project-id <project_id> --strategy-uuid <uuid>
269
- ae-cli engage-scene strategy predict --project-id <project_id> --qp '<mix QP string>' --zone-offset 8 [--strategy-uuid <uuid>]
275
+ ae-cli engage-scene strategy predict --project-id <project_id> --definition-request '{"type":"condition","conditions":{...}}' --zone-offset 8 [--strategy-uuid <uuid>]
270
276
  ae-cli engage-scene strategy batch-copy --project-id <project_id> --config-id <config_id> --strategy-ids '["s1"]'
271
277
 
272
278
  # Template list / get / create / update / update-status / delete
@@ -282,6 +288,18 @@ ae-cli engage-scene template delete --project-id <project_id> --config-id <confi
282
288
 
283
289
  New capability-gateway command group `engage-activity` covers campaign activities: activities, approval workflow, topics, activity types, and standalone tasks. Complex DTOs are passed with `--payload` (native camelCase JSON).
284
290
 
291
+ ### Activity payload guardrails
292
+
293
+ Before generating any activity topic or standalone-task payload, enforce the same subset exposed by the Hermes activity UI:
294
+
295
+ - `triggerType` must be `0` (schedule single) or `1` (schedule repeat). Activity tasks do not support manual (`2`) or triggered (`3`-`6`) task types.
296
+ - Do not configure A/B or horse-race experiments. Omit `expConfig` or use only `{"enableExp":false}`, and provide exactly one non-experiment `groupContentList` group.
297
+ - Standalone activity tasks must use `triggerTimeStrategy: "fixed_time_zone"` and the parent activity `tzOffset`. Schedule times must remain inside the activity period.
298
+ - A topic root supports audience types `1` (custom) and `2` (existing cluster), not `3` (all users). A standalone activity task may use `1`, `2`, or `3`.
299
+ - Topic tasks inherit schedule, timezone, channel, frequency limits, channel touch limits, whitelist, and experiment settings from the topic. They may only add an inclusion-only custom `definitionRequest`; never generate task-level `clusterKey`, trigger rules, or shared-setting overrides. `topic get` may return the canonical task marker `targetClusterType=1`; preserve it for update if present, but never use another task-level value.
300
+ - Resolve the parent activity first and confirm it is editable (`mappingStatus` `0`, `2`, or `5`). Limits for topics, tasks, and languages are project configuration values; do not hardcode defaults.
301
+ - `approval submit` and `approval approve` validate every persisted activity task. Approval does not normalize unsupported task data. On `ACTIVITY_TASK_COMPATIBILITY_VIOLATION`, cancel/withdraw approval as needed, correct or recreate each reported task, and submit again.
302
+
285
303
  ```bash
286
304
  # Activity create / update / delete / list / get / pause / end / stats / info-list
287
305
  ae-cli engage-activity activity create --project-id <project_id> --payload '{"activityName":"a1","activityType":"other_type","tzOffset":8,"periodType":0}'
@@ -294,8 +312,8 @@ ae-cli engage-activity activity end --project-id <project_id> --activity-id <act
294
312
  ae-cli engage-activity activity stats --project-id <project_id>
295
313
  ae-cli engage-activity activity info-list --project-id <project_id> --activity-id <activity_id>
296
314
 
297
- # Approval approve / reject / cancel
298
- # Note: engage-activity.approval.submit is temporarily disabled (testing issues); do not call it.
315
+ # Approval submit / approve / reject / cancel
316
+ ae-cli engage-activity approval submit --project-id <project_id> --activity-id <activity_id> [--reason <reason>]
299
317
  ae-cli engage-activity approval approve --project-id <project_id> --activity-id <activity_id>
300
318
  ae-cli engage-activity approval reject --project-id <project_id> --activity-id <activity_id> --reason <reason>
301
319
  ae-cli engage-activity approval cancel --project-id <project_id> --activity-id <activity_id>
@@ -346,12 +364,9 @@ When the user wants to "create a flow / generate a flow canvas / save a flow", d
346
364
  - The touchpoint or delivery method
347
365
  - Whether branching is needed, and the branching conditions
348
366
  2. Do not jump directly from natural language to `--req`. You must first organize a stable intermediate intent structure, then map it to the final `req`.
349
- 3. Before building condition-related nodes, create the reusable audience directly from its semantic definition, then read back the server-authored definition only if the Engage schema explicitly needs QP-derived fields:
350
-
351
- ```bash
352
- ae-cli analysis user-cluster create --project-id <projectId> --cluster-name <condition_cluster_name> --display-name <display_name> --definition-request '<semantic-definition-json>'
353
- ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<condition_cluster_name>"]'
354
- ```
367
+ 3. Build condition-related nodes with semantic `targetDefinitionRequest` and
368
+ `triggerDefinition` objects. Resolve real event and property names through Analysis metadata;
369
+ do not create an intermediate cluster merely to obtain persisted QP.
355
370
 
356
371
  4. Before building touchpoint nodes such as `message_push`, `wechat_push`, or `webhook_push`, you must call:
357
372
 
@@ -361,7 +376,10 @@ ae-cli engage-setting channel list --project-id <projectId>
361
376
 
362
377
  5. `engage-flow flow save` is **operation-based** (protocol v2). The `--req` object must carry an `operation` of `build`, `preview`, or `commit`. Do **not** use the old `nodeList` / `edgeList` field names — use `nodes` / `edges` with `operation=build`. A legacy `nodeList`/`edgeList` payload (or a missing `operation`) is rejected with `Unsupported save_flow operation: null`.
363
378
  6. Run the lifecycle: `build` (returns `data.result.status = ready_to_preview` or `need_input`) → resolve any `data.result.next_slot` → `preview` (re-issues response fields `data.result.draft_version` + `data.result.confirm_token`) → `commit` (maps those values to request fields `draftVersion` + `confirmToken`) → reads the final ID from `data.result.result.flow_uuid`.
364
- 7. `nodes[].config` / `edges[].config` may be a JSON object or a JSON string. If `targetClusterQp` appears inside a node `config`, its value is usually a `JSON.stringify`'d string, not a raw object.
379
+ 7. `nodes[].config` / `edges[].config` may be a JSON object or a JSON string. Custom audience nodes and branches use semantic `targetDefinitionRequest`; Hermes compiles it to the node's stored execution format.
380
+ Never send `targetClusterQp`. Each audience `event` and `behavior_sequence` must include
381
+ its own `time_range`; Flow entry dates do not replace that range. Use only properties that
382
+ resolve through the Flow editor's current project, timezone, and user-entity metadata scope.
365
383
  8. You must self-check before previewing/committing:
366
384
  - There is exactly one entry node
367
385
  - There is at least one `exit_flow`
@@ -437,13 +455,14 @@ More detailed single-command guidance is available in the business-oriented `ref
437
455
  - `references/scene-config-channel.md` (`engage-scene.config-channel.{list,get,create,update,update-status,delete,query-log}`)
438
456
  - `references/channel-mgmt.md` (config channel management workflows)
439
457
  - `references/scene-strategy.md` (`engage-scene.strategy.{list,get,create,update,log,predict,batch-copy,manage}`)
440
- - `references/scene-strategy-audience.md` (custom audience mix QP: 用户满足/用户行为 two-block layout, preflight, worked examples A/B/C)
458
+ - `references/scene-strategy-audience.md` (custom audience semantic `definitionRequest`, preflight, predict)
441
459
  - `references/scene-template.md` (`engage-scene.template.{list,get,copy,create,update,update-status,delete}`)
442
460
  - `references/config-item-trigger-report.md` (`engage-scene.report.config-item-trigger`, L3)
443
461
  - `references/config-item-analysis-report.md` (`engage-scene.report.config-item-analysis`, L3)
444
462
  - `references/config-item-strategy-comparison.md` (`engage-scene.report.strategy-comparison`, L3)
445
463
  - `references/activity-activity.md` (`engage-activity.activity.{create,update,delete,list,get,pause,end,stats,info-list}`)
446
- - `references/activity-approval.md` (`engage-activity.approval.{approve,reject,cancel}`; `submit` temporarily disabled)
464
+ - `references/activity-data-detail.md` (`engage-activity.activity-data.detail`, L3)
465
+ - `references/activity-approval.md` (`engage-activity.approval.{submit,approve,reject,cancel}`)
447
466
  - `references/activity-topic.md` (`engage-activity.topic.{create,update,remove-task,delete,get,copy}`)
448
467
  - `references/activity-activity-type.md` (`engage-activity.activity-type.{list,batch-add,update,batch-delete}`)
449
468
  - `references/activity-task.md` (`engage-activity.task.{get,create,update,copy}`)
@@ -460,6 +479,7 @@ More detailed single-command guidance is available in the business-oriented `ref
460
479
  - `references/segment-list-query.md` (`engage-task.segment-list.query`)
461
480
  - `references/group-list.md` (`engage-task.group.list`)
462
481
  - `references/task-delete.md` (`engage-task.task.delete`)
482
+ - `references/task-submit-approval.md` (`engage-task.task.submit-approval`)
463
483
 
464
484
  This split documentation structure is easier to extend later, because commands with more complex object inputs can stay centralized in the `references/` root directory.
465
485
 
@@ -471,7 +491,7 @@ This split documentation structure is easier to extend later, because commands w
471
491
 
472
492
  ### task
473
493
 
474
- `operation-log query` / `push-record query` / `segment-list *` / `ops *` / `metric *` / `race release` / `channel-ref stats` / `group *` / `task delete` / `task modify-group` / `task get` / `task list` / `task stats` / `task build-save-guide` / `task save` / `task manage` (via `engage-task`), plus L3 capabilities `engage-task.task-data.{overview,detail,metric-detail,experiment-report}`
494
+ `operation-log query` / `push-record query` / `segment-list *` / `ops *` / `metric *` / `race release` / `channel-ref stats` / `group *` / `task delete` / `task modify-group` / `task submit-approval` / `task get` / `task list` / `task stats` / `task build-save-guide` / `task save` / `task manage` (via `engage-task`), plus L3 capabilities `engage-task.task-data.{overview,detail,metric-detail,experiment-report}`
475
495
 
476
496
  ### config
477
497
 
@@ -483,7 +503,7 @@ Legacy config MCP commands are migrated into the `scene` L2 group and the three
483
503
 
484
504
  ### activity
485
505
 
486
- `activity create` / `activity update` / `activity delete` / `activity list` / `activity get` / `activity pause` / `activity end` / `activity stats` / `activity info-list` / `approval approve` / `approval reject` / `approval cancel` / `topic create` / `topic update` / `topic remove-task` / `topic delete` / `topic get` / `topic copy` / `activity-type list` / `activity-type batch-add` / `activity-type update` / `activity-type batch-delete` / `task get` / `task create` / `task update` / `task copy` (via `engage-activity`), capability ids `engage-activity.activity.{create,update,delete,list,get,pause,end,stats,info-list}`, `engage-activity.approval.{approve,reject,cancel}`, `engage-activity.topic.{create,update,remove-task,delete,get,copy}`, `engage-activity.activity-type.{list,batch-add,update,batch-delete}`, `engage-activity.task.{get,create,update,copy}`
506
+ `activity create` / `activity update` / `activity delete` / `activity list` / `activity get` / `activity pause` / `activity end` / `activity stats` / `activity info-list` / `approval submit` / `approval approve` / `approval reject` / `approval cancel` / `topic create` / `topic update` / `topic remove-task` / `topic delete` / `topic get` / `topic copy` / `activity-type list` / `activity-type batch-add` / `activity-type update` / `activity-type batch-delete` / `task get` / `task create` / `task update` / `task copy` (via `engage-activity`), capability ids `engage-activity.activity.{create,update,delete,list,get,pause,end,stats,info-list}`, `engage-activity.approval.{submit,approve,reject,cancel}`, `engage-activity.topic.{create,update,remove-task,delete,get,copy}`, `engage-activity.activity-type.{list,batch-add,update,batch-delete}`, `engage-activity.task.{get,create,update,copy}`
487
507
 
488
508
  ### workbench
489
509
 
@@ -505,19 +525,39 @@ High-risk delete commands (`risk: high-risk-write`) require explicit user author
505
525
  - Config channels (config center channel management): `engage-scene config-channel create|update|update-status` (write), `engage-scene config-channel delete` (high-risk-write)
506
526
  - Strategies and config items: `engage-scene config-item delete` (high-risk-write), `engage-scene template copy` and `engage-scene strategy manage` (write)
507
527
  - Flows: `engage-flow flow update-remark` (write), `engage-flow flow save` (write), `engage-flow flow modify-base-info` (write), `engage-flow flow manage` (write), `engage-flow flow delete` (high-risk-write)
508
- - Tasks: `engage-task task save` (write), `engage-task task manage` (write)
528
+ - Tasks: `engage-task task save` (write), `engage-task task submit-approval` (write), `engage-task task manage` (write)
509
529
 
510
530
  For task draft creation or update, use this workflow:
511
531
 
512
532
  1. `ae-cli engage-setting channel list --project-id <projectId>`
513
533
  2. `ae-cli engage-task task build-save-guide --project-id <projectId> --req '{...}'`
514
- 3. If the guide says QP-derived fields are needed (`targetConfig.qp`, `triggerConfig.triggerRule`, `clientConfig.clientQp`, or `completionIndicatorDef.event`), call:
515
- `ae-cli engage-setting query cluster-qp-skill --project-id <projectId>`
516
- Use the returned skill text to build those fields. For existing-cluster audiences (`targetClusterType=2`), use `analysis user-cluster get` instead of hand-writing QP.
534
+ 3. For a custom audience, pass the Analysis semantic contract as
535
+ `targetConfig.definitionRequest`. Use semantic `triggerConfig.triggerDefinition` and
536
+ `completionIndicatorDef.completionIndicators[].eventDefinition`. Build shapes from
537
+ `ae-analysis` user-cluster / audience models. For existing-cluster audiences
538
+ (`targetClusterType=2`), use `analysis user-cluster get`. For event-triggered tasks, pass
539
+ `channelType`, `triggerType`, and `eventTriggerType` to `build-save-guide`, then use its
540
+ type-specific semantic event shape. Accumulated events are aggregate conditions, continuous
541
+ events use count/eq with a value of at least 2, ordered events use sequence-step envelopes,
542
+ and every-completion events use count/eq/1. Completion target and experiment main-goal event
543
+ filters must not use properties whose metadata `select_type` is `datetime`. Never construct
544
+ persisted QP fields.
517
545
  4. `ae-cli engage-task task save --project-id <projectId> --req '{...}'`
546
+ 5. `ae-cli engage-task task submit-approval --project-id <projectId> --task-id <taskId>`
518
547
 
519
548
  `engage-task task build-save-guide` is a read-only helper. It returns scenario-specific required fields, channel content schema, unsupported combinations, examples, and a handoff template for `save_task`.
520
549
 
521
550
  `engage-task task save` creates or updates a task configuration. It does not submit approval, does not start sending, and does not trigger task execution. If `req.taskId` is omitted it creates a new draft; if `req.taskId` is present it updates an existing **draft or paused** task. Update mode rejects running/ended tasks with `invalid_status`. Omitted fields inherit from the existing task before validation (partial rename/update is supported).
522
551
 
523
- Audience creation is not a fixed preflight step. When the guide requires QP-derived fields (`targetConfig.qp`, `triggerConfig.triggerRule`, `clientConfig.clientQp`, `completionIndicatorDef.event`), call `ae-cli engage-setting query cluster-qp-skill --project-id <projectId>` first and follow the returned skill definition; do not assemble raw QP manually. For existing-cluster audiences, use `analysis user-cluster get` to copy server-authored definitions when appropriate.
552
+ `engage-task task submit-approval --task-id` is the recommended approval path after `task save`.
553
+ It submits the persisted draft without requiring the Agent to reconstruct internal `trigger_rule`.
554
+ The legacy `--request` mode remains available for compatibility; provide exactly one of
555
+ `--task-id` or `--request`.
556
+
557
+ Audience creation is not a fixed preflight step. For custom task audiences, use semantic
558
+ `targetConfig.definitionRequest`; `task get` returns the same contract as
559
+ `definition_request`. `clientConfig.clientQp` is server-authored and must be omitted from
560
+ Capability requests; partial updates preserve existing server state. Do not assemble raw QP
561
+ manually.
562
+ For a `behavior_sequence`, omit second-step `relative_to_first` or set it to `false`; reserve
563
+ `true` for step 3 or later when the window is measured from step 1.
@@ -56,6 +56,9 @@ ae-cli engage-activity activity info-list --project-id <project_id> --activity-i
56
56
  - `get`: `data.activity`.
57
57
  - `stats`: `data.status_count`.
58
58
  - `info-list`: `data.info` with `taskList` (standalone tasks) and `topicList` (topics under the activity).
59
+ This summary intentionally omits stored QP-bearing detail fields such as `qp`,
60
+ `triggerRule`, `completionIndicatorDef`, and `clientQp`. Use the corresponding task
61
+ or topic detail command to obtain the semantic definitions before editing.
59
62
  - `delete` / `pause` / `end`: `data.success`.
60
63
 
61
64
  ## Timezone (`tzOffset`)
@@ -1,14 +1,15 @@
1
1
  # engage-activity approval
2
2
 
3
- > Capability ids: `engage-activity.approval.{approve,reject,cancel}` · Domain: `engage`.
4
- >
5
- > **Temporarily disabled:** `engage-activity.approval.submit` — do not call until re-enabled.
3
+ > Capability ids: `engage-activity.approval.{submit,approve,reject,cancel}` · Domain: `engage`.
6
4
 
7
5
  Campaign activities — activity approval workflow. Current actions target an activity (`ApprovalActivityIdDealDTO`: `projectId` + `activityId` + `reason`); each is a state-changing `write` and does not support dry-run. `reject` requires `reason`; other actions treat `reason` as optional.
8
6
 
9
7
  ## Commands
10
8
 
11
9
  ```bash
10
+ # Submit an activity for approval
11
+ ae-cli engage-activity approval submit --project-id <project_id> --activity-id <activity_id> [--reason <reason>]
12
+
12
13
  # Approve an activity
13
14
  ae-cli engage-activity approval approve --project-id <project_id> --activity-id <activity_id>
14
15
 
@@ -23,6 +24,7 @@ ae-cli engage-activity approval cancel --project-id <project_id> --activity-id <
23
24
 
24
25
  | Command | Required flags | Notes |
25
26
  |---|---|---|
27
+ | submit | `--project-id`, `--activity-id` | `--reason` optional. Activity must have draft/pending standalone or topic tasks. |
26
28
  | approve | `--project-id`, `--activity-id` | `--reason` optional. |
27
29
  | reject | `--project-id`, `--activity-id`, `--reason` | `--reason` required, max 72 characters. |
28
30
  | cancel | `--project-id`, `--activity-id` | `--reason` optional. |
@@ -35,13 +37,19 @@ ae-cli engage-activity approval cancel --project-id <project_id> --activity-id <
35
37
 
36
38
  - All approval actions are `write` (real state changes) and do not support dry-run; they do not require `--yes` (only `high-risk-write` does).
37
39
  - Approve/reject require the caller to be a valid approver of the activity (enforced server-side).
38
- - Do **not** call `engage-activity.approval.submit`; it is temporarily unavailable.
40
+ - Submit requires at least one standalone or topic task under the activity that can enter approval.
41
+ - Submit and approve load complete task details and scan both standalone tasks and topic tasks before invoking the product approval service.
42
+ - Approval does not repair or normalize unsupported activity task configurations.
43
+ - If preflight returns `ACTIVITY_TASK_COMPATIBILITY_VIOLATION`, inspect `error.meta.violations`, withdraw/cancel approval when necessary, and update or recreate each reported task as scheduled, fixed-timezone, and non-experiment before resubmitting.
39
44
 
40
45
  ## Common Errors
41
46
 
42
47
  | code | when |
43
48
  |---|---|
44
49
  | `ACTIVITY_NOT_FOUND` | activity id missing in project |
50
+ | `ACTIVITY_NO_APPROVAL_TASK` | activity has no standalone/topic tasks to submit |
51
+ | `ACTIVITY_TASK_COMPATIBILITY_VIOLATION` | one or more persisted activity tasks use unsupported trigger, timezone, experiment, or content-group configuration; details are in `error.meta.violations` |
52
+ | `ACTIVITY_TRIGGER_TYPE_REQUIRED` | a persisted activity task is missing its trigger type; reported inside the compatibility violation list |
45
53
  | `ACTIVITY_STATUS_INVALID` | activity not in draft/pending |
46
54
  | `APPROVAL_NOT_PENDING` | no under-approval record |
47
55
  | `NOT_APPROVER` | caller is not a project approver |
@@ -0,0 +1,61 @@
1
+ # engage-activity.activity-data.detail
2
+
3
+ Query activity delivery trends through the L3 Capability Gateway.
4
+
5
+ Mapped command:
6
+
7
+ ```bash
8
+ ae-cli capability run engage-activity.activity-data.detail --input '<json>'
9
+ ```
10
+
11
+ ## Input
12
+
13
+ Required fields:
14
+
15
+ - `project_id`: project that owns the activity.
16
+ - `activity_id`: activity to query.
17
+ - `start_time`: inclusive start date in `yyyy-MM-dd` format.
18
+ - `end_time`: inclusive end date in `yyyy-MM-dd` format.
19
+
20
+ Optional fields:
21
+
22
+ - `time_particle_size`: `T1` (day), `T2` (week), `T3` (month), or `T5` (total). Defaults to `T1`.
23
+ - `source`: `activity` or `topic_and_task`. Defaults to `activity`.
24
+ - `topic_id_list`: selected topic IDs.
25
+ - `task_id_list`: selected standalone task IDs.
26
+ - `request_id`: cancelable query ID. A UUID is generated when omitted.
27
+
28
+ When `source=topic_and_task` and both ID lists are omitted or empty, the capability selects every topic and standalone task in the activity. When either list is provided, only the explicitly selected resources are queried. Selected resources must belong to the activity and project.
29
+
30
+ ## Recent seven-day topic trend
31
+
32
+ Use an inclusive seven-day range, `T1`, and `topic_and_task`:
33
+
34
+ ```bash
35
+ ae-cli capability run engage-activity.activity-data.detail --input \
36
+ '{"project_id":1,"activity_id":"act-1","start_time":"2026-07-25","end_time":"2026-07-31","time_particle_size":"T1","source":"topic_and_task","request_id":"<uuid>"}'
37
+ ```
38
+
39
+ The report exposes the existing activity-page indicators:
40
+
41
+ - `plan`: planned trigger users.
42
+ - `actualTrigger`: actual push users.
43
+ - `trigger`: successful push users.
44
+
45
+ It does not expose `view` (actual arrival) or `click`. Use the returned header values instead of treating `trigger` as an actual-arrival metric.
46
+
47
+ ## Output
48
+
49
+ Successful output contains:
50
+
51
+ - `data.request_id`: the request ID used by the query.
52
+ - `data.result_generate_time`: ISO-8601 generation time.
53
+ - `data.data.x`: summary/date axis.
54
+ - `data.data.headers`: indicator keys.
55
+ - `data.data.total`: activity totals aligned with `headers`.
56
+ - `data.data.values`: topic or standalone-task rows aligned with `x` and `headers`.
57
+ - `data.data.topic_list`: selected source IDs and names using `topic_id` and `topic_name`.
58
+
59
+ The first `x`/`total` row is the overall summary. For non-total time grains, subsequent rows are the requested date buckets.
60
+
61
+ Use `engage-setting.query.cancel` with the same `request_id` to cancel a running query.
@@ -26,9 +26,9 @@ ae-cli engage-activity task copy --project-id <project_id> --task-id <task_id> [
26
26
 
27
27
  | Command | Required flags | Notes |
28
28
  |---|---|---|
29
- | get | `--project-id`, `--task-id` | read. |
30
- | create | `--project-id`, `--payload` | payload = `OperationTaskOpDTO`; set `activityId`, leave `topicId` empty. Missing `expConfig` is auto-filled as `{"enableExp":false}`. |
31
- | update | `--project-id`, `--payload` | payload = `OperationTaskOpDTO` including `taskId`. Prefer get detail as base. Missing `expConfig` is auto-filled as `{"enableExp":false}`. |
29
+ | get | `--project-id`, `--task-id` | Only standalone tasks with an `activityId`; ordinary tasks use `engage-task task get`. |
30
+ | create | `--project-id`, `--payload` | payload = `OperationTaskOpDTO`; set `activityId`, leave `topicId` empty. Only scheduled `triggerType` `0/1` is supported. |
31
+ | update | `--project-id`, `--payload` | payload = `OperationTaskOpDTO` including `taskId`. Prefer get detail as base. Only scheduled `triggerType` `0/1` is supported. |
32
32
  | copy | `--project-id`, `--task-id` | `--new-name` optional (default source name + `_copy`). |
33
33
 
34
34
  ## Output
@@ -47,20 +47,28 @@ ae-cli engage-activity task copy --project-id <project_id> --task-id <task_id> [
47
47
  - **TEXT (rich text) params** must include both `value` and `config` (Slate.js JSON **string**). If `config` is missing, Hermes copy auto-fills
48
48
  `config = [{"type":"paragraph","children":[{"text":"<value>"}]}]` as a JSON string.
49
49
  - Missing `expConfig` on create/update is auto-filled as `{"enableExp":false}` (same shape as task `get`).
50
+ - A/B and horse-race experiments are not supported. Do not pass experiment fields or multiple content groups.
51
+ - `groupContentList` must contain exactly one non-experiment group. Put language variants in that group's `contentList`.
50
52
 
51
53
  ### Audience (`targetClusterType`)
52
54
 
53
55
  | Value | Required | Notes |
54
56
  |---|---|---|
55
57
  | `2` (existed) | `clusterKey` | From `analysis user-cluster list/get`. |
56
- | `1` (custom) | `qp` | JSON object string. |
57
- | `3` (all) | — | Do not pass `clusterKey` or `qp`. |
58
+ | `1` (custom) | `definitionRequest` | Analysis-compatible semantic condition object. |
59
+ | `3` (all) | — | Do not pass `clusterKey` or `definitionRequest`. |
60
+
61
+ `get` returns `definition_request`, `definition_status`, and optional `definition_unavailable_reason`, while hiding the stored execution QP. Reuse `definition_request` as payload `definitionRequest` for an update. `copy` converts the source internally and does not require an audience field from the caller.
58
62
 
59
63
  ## Decision Rules
60
64
 
65
+ - `triggerType` must be `0` (schedule single) or `1` (schedule repeat). Manual (`2`) and triggered (`3`-`6`) tasks belong under `engage-task`, not `engage-activity`.
66
+ - Set `triggerTimeStrategy` to `fixed_time_zone` and `tzOffset` to the parent activity timezone. User timezone and user active time are not supported.
67
+ - Keep `triggerTime`, or repeat `startDate`/`endDate`, inside the parent activity period.
68
+ - Create/update/copy is limited to editable parent activity states: draft (`0`), paused (`2`), or denied (`5`). Project-configured count and language limits remain authoritative.
61
69
  - Discover a real `task_id` via `get`/activity `info-list` first; never invent IDs.
62
70
  - `copy` duplicates the editable task config (not runtime/trigger state).
63
- - `copy` saves via **draft** add (`draft=true`), so a past schedule-single `triggerTime` is allowed; output may include `trigger_time_stale=true`. Update the time before submitting for approval (`engage-activity.approval.submit` is temporarily unavailable).
71
+ - `copy` saves via **draft** add (`draft=true`), so a past schedule-single `triggerTime` is allowed; output may include `trigger_time_stale=true`. Update the time before submitting for approval.
64
72
  - Standalone tasks must **not** include `topicId`; topic tasks use `engage-activity topic create` / `topic copy`.
65
73
 
66
74
  ## Copy errors
@@ -73,6 +81,13 @@ ae-cli engage-activity task copy --project-id <project_id> --task-id <task_id> [
73
81
  | `TASK_PROJECT_MISMATCH` | task exists but not in `--project-id` |
74
82
  | `TOPIC_TASK_FORBIDDEN` | source has `topicId` (use `topic copy`) |
75
83
  | `ACTIVITY_ID_REQUIRED` | source has no `activityId` (not a standalone activity task) |
84
+ | `ACTIVITY_TRIGGER_TYPE_UNSUPPORTED` | task uses manual or a triggered task type |
85
+ | `ACTIVITY_TRIGGER_TIME_STRATEGY_UNSUPPORTED` | task does not use `fixed_time_zone` |
86
+ | `ACTIVITY_TIMEZONE_REQUIRED` | standalone task omits `tzOffset` |
87
+ | `ACTIVITY_EXPERIMENT_UNSUPPORTED` | task enables or configures an experiment |
88
+ | `ACTIVITY_CONTENT_GROUPS_UNSUPPORTED` | task has more than one experiment-style content group |
89
+ | `ACTIVITY_TIMEZONE_MISMATCH` | task timezone differs from the parent activity |
90
+ | `ACTIVITY_SCHEDULE_OUT_OF_RANGE` | task schedule is outside the activity period |
76
91
  | `TRIGGER_TIME_REQUIRED` | schedule-single missing `triggerTime` |
77
92
  | `CHANNEL_NOT_FOUND` | source channel missing / type mismatch |
78
93
  | `TASK_COUNT_LIMIT` | project task count limit exceeded |
@@ -30,7 +30,7 @@ ae-cli engage-activity topic copy --project-id <project_id> --topic-id <topic_id
30
30
 
31
31
  | Command | Required flags | Notes |
32
32
  |---|---|---|
33
- | create | `--project-id`, `--payload` | payload = `TopicAddDTO` (camelCase). Prefer `triggerType` `0` (schedule single) or `1` (schedule repeat); activity topics do not use manual (`2`). |
33
+ | create | `--project-id`, `--payload` | payload = `TopicAddDTO` (camelCase). `triggerType` must be `0` (schedule single) or `1` (schedule repeat). |
34
34
  | update | `--project-id`, `--payload` | payload = `TopicModifyReq` (`topicId` + fields + task lists). |
35
35
  | remove-task | `--project-id`, `--task-id` | high-risk; requires `--yes`; no dry-run. Only tasks with a non-empty `topicId`. |
36
36
  | delete | `--project-id`, `--topic-id` | high-risk; requires `--yes`; no dry-run. |
@@ -42,19 +42,19 @@ ae-cli engage-activity topic copy --project-id <project_id> --topic-id <topic_id
42
42
  TEXT (rich text) params inside `groupContentList[].contentList[].content` need both `value` and Slate `config` (JSON string). If `config` is omitted, Hermes copy/create auto-fills
43
43
  `[{"type":"paragraph","children":[{"text":"<value>"}]}]`. See `activity-task.md` Channel content.
44
44
 
45
- Topic-level audience uses `topicClusterKey` / `topicQp`; do **not** pass task-level `clusterKey` at topic root.
45
+ Topic-level audience uses `topicClusterKey` / `topicDefinitionRequest`; do **not** pass task-level `clusterKey` at topic root.
46
46
 
47
47
  ### Audience (`targetClusterType`)
48
48
 
49
49
  | Value | Required | Notes |
50
50
  |---|---|---|
51
- | `1` (custom) | `topicQp` | Valid condition JSON object string (not `{}`). Use mix QP with `totalCFilter` (and optional `totalOutCFilter`). |
51
+ | `1` (custom) | `topicDefinitionRequest` | Analysis-compatible semantic condition object. |
52
52
  | `2` (existed) | `topicClusterKey` | From an existing user cluster. |
53
53
  | `3` (all) | — | **Not supported for activity topics** → `TOPIC_TARGET_CLUSTER_TYPE_UNSUPPORTED`. Use standalone `engage-activity task create` for all-users. |
54
54
 
55
- **`triggerMixQpVersion`:** For custom audience (`targetClusterType=1`) with mix QP (`totalCFilter` / `totalInCFilter`), set `"4.4"`. UI theme edit parses conditions only when this is `4.4`; missing/blank values make target-user filters render empty. Capability create/update/copy default blank to `"4.4"` (same as UI and standalone task MCP).
55
+ **`triggerMixQpVersion`:** Capability create/update/copy defaults a blank value to `"4.4"` while compiling the semantic definition.
56
56
 
57
- Task-level extra conditions go in `taskQp` as mix QP under **`totalCFilter` only** (user attrs and/or events). Do not put task-owned conditions in `totalInCFilter` that key is reserved for topic→task merge (topic `totalCFilter` is copied into task cluster `totalInCFilter` on save).
57
+ Task-level extra conditions go in each task's inclusion-only `definitionRequest`. Keep shared conditions in `topicDefinitionRequest`; Hermes performs the topic-to-task merge through the existing domain service. Topic tasks do not have an independent audience mode. `topic get` returns the canonical task marker `targetClusterType=1`; it may be retained when mapping `taskList` into `modifyTaskList`, but no other value is accepted. Do not pass task-level `clusterKey`, all-users selection, or exclusion filters.
58
58
 
59
59
  ### Trigger (`triggerType`)
60
60
 
@@ -62,7 +62,16 @@ Task-level extra conditions go in `taskQp` as mix QP under **`totalCFilter` only
62
62
  |---|---|---|
63
63
  | `0` (schedule single) | `triggerTime` (`yyyy-MM-dd HH:mm`, future) | Preferred for CLI create. |
64
64
  | `1` (schedule repeat) | `startDate`, `endDate`, `triggerCrontab` | |
65
- | `2` (manual) | — | **Not supported for activity topics** (UI only offers 0/1). Using it without `endDate` causes `CAPABILITY_EXECUTION_FAILED`. |
65
+
66
+ Manual (`2`) and every triggered type (`3`-`6`) are rejected with `ACTIVITY_TRIGGER_TYPE_UNSUPPORTED`.
67
+
68
+ ### Shared topic configuration
69
+
70
+ - A/B and horse-race experiments are not supported. Omit `expConfig` and use exactly one content group per topic task.
71
+ - The topic owns schedule, activity timezone, channel, frequency limits, channel touch limits, and whitelist.
72
+ - A topic task only owns its name, optional inclusion-only custom audience refinement, one content group, completion indicators, metrics, and description.
73
+ - Do not put schedule, trigger rules, channel, frequency, whitelist, experiment, or `clusterKey` on a topic task. The only accepted task-level `targetClusterType` is the canonical get response value `1`.
74
+ - Keep the topic schedule inside the parent activity period. Create/update/copy requires parent activity `mappingStatus` `0`, `2`, or `5`.
66
75
 
67
76
  ## Create Topic Orchestration
68
77
 
@@ -72,11 +81,11 @@ Use this workflow when a topic has a shared audience plus one or more task-level
72
81
  2. **Resolve the parent activity.** Use `activity list|get` to verify the exact `activityId`, editable status, activity dates, and timezone. For a repeated topic, keep `startDate` and `endDate` inside the activity period and interpret the cron in the activity timezone.
73
82
  3. **Resolve a real channel.** Query `engage-setting channel list`, then inspect the selected channel before composing content. If several enabled channels match and the user has not specified a provider or an already-confirmed project default, ask which one to use instead of choosing an arbitrary ID.
74
83
  4. **Read the channel content contract.** Call `engage-task task build-save-guide` with the known trigger, audience, channel type, and `channelId`. Build every `groupContentList[].contentList[].content` item from `fieldRules.channelContentSchema`; do not infer App Push keys or parameter types from memory.
75
- 5. **Prepare audience and completion inputs.** Resolve real event/property metadata and categorical values through the applicable Analysis workflow. Put the shared condition in `topicQp` or `topicClusterKey`, and only task-specific conditions in each `taskQp`. For a rolling condition such as "recent N days" that must be evaluated for future repeated sends, prefer a custom QP; use an existing cluster only after confirming that its refresh semantics match the send cadence. Build the completion goal separately in `completionIndicatorDef`.
76
- 6. **Build one native `TopicAddDTO`.** Keep nested payload keys in camelCase. Ensure `tasks` is non-empty, `frequencyLimits` and QP fields are JSON strings where documented, each task has channel content, and Android/iOS or other variants map to the correct task audience and message.
84
+ 5. **Prepare audience and completion inputs.** Resolve real event/property metadata and categorical values through the applicable Analysis workflow. Put the shared condition in `topicDefinitionRequest` or `topicClusterKey`, and only task-specific conditions in each task's `definitionRequest`. For a rolling condition such as "recent N days" that must be evaluated for future repeated sends, prefer a semantic custom definition; use an existing cluster only after confirming that its refresh semantics match the send cadence. Build the completion goal separately in `completionIndicatorDef`.
85
+ 6. **Build one native `TopicAddDTO`.** Keep nested payload keys in camelCase. Ensure `tasks` is non-empty, each semantic definition is a JSON object, each task has channel content, and Android/iOS or other variants map to the correct task audience and message.
77
86
  7. **Validate the complex payload.** Run `topic create ... --validate` while correcting the nested payload. Inspect `normalized_input` and confirm that the schedule, audience boundaries, message variants, and completion window retain the intended semantics. After `valid=true`, execute the same payload directly; do not add a redundant dry-run by default.
78
87
  8. **Create exactly once.** Run `topic create` with the validated payload. A successful response only reports `data.success`; it does not provide enough evidence to declare the whole orchestration complete.
79
- 9. **Resolve IDs and verify the saved topic.** Call `activity info-list` for the parent activity, match the new topic and tasks by their names, then call `topic get` with the returned `topicId`. Verify the channel, dates, cron, topic audience, each task audience, content, completion goal, and draft status. For custom audiences, confirm that the saved task QP keeps task-owned conditions in `totalCFilter` and the shared topic condition appears only through the topic-to-task merge.
88
+ 9. **Resolve IDs and verify the saved topic.** Call `activity info-list` for the parent activity, match the new topic and tasks by their names, then call `topic get` with the returned `topicId`. Verify the channel, dates, cron, semantic topic audience, each semantic task audience, content, completion goal, and draft status.
80
89
  10. **Verify generated audiences before reporting completion.** Read the generated topic/task cluster keys with the applicable cluster query and wait for terminal computation state. Require `refresh_status=success`, `progress=100`, `real_available=1`, and `cluster_valid=1`. A zero-user result may be valid, but reconcile it with the discovered categorical values and business expectation. If computation fails, correct only the verified cause and re-check; do not retry an unchanged request or report the topic as fully ready.
81
90
 
82
91
  Recommended command order:
@@ -95,7 +104,7 @@ activity list/get
95
104
 
96
105
  ## Output
97
106
 
98
- - `get`: `data.topic` (includes `topicClusterKey` for topic audience).
107
+ - `get`: `data.topic` (includes `topicClusterKey` for an existing audience or `topic_definition_request` plus conversion status for a custom audience).
99
108
  - `create` / `update` / `remove-task` / `delete` / `copy`: `data.success`.
100
109
  - `copy` may include `data.trigger_time_stale=true` when source schedule-single time is already past.
101
110
 
@@ -104,7 +113,7 @@ activity list/get
104
113
  - `remove-task` and `delete` are `high-risk-write` — require `--yes`, no dry-run.
105
114
  - `remove-task` only deletes **topic tasks** (`topicId` present). Standalone tasks → use `engage-task task delete`.
106
115
  - `copy` duplicates the editable topic config and its tasks (not runtime/approval state).
107
- - `copy` saves via **draft** add (`isDraft=true`), so a past schedule-single `triggerTime` is allowed; output may include `trigger_time_stale=true`. Update the time before submitting for approval (`engage-activity.approval.submit` is temporarily unavailable).
116
+ - `copy` saves via **draft** add (`isDraft=true`), so a past schedule-single `triggerTime` is allowed; output may include `trigger_time_stale=true`. Update the time before submitting for approval.
108
117
  - Prefer `topic get` as a template when inspecting channel/content fields.
109
118
 
110
119
  ## Create / update audience errors
@@ -113,9 +122,16 @@ activity list/get
113
122
  |---|---|
114
123
  | `TOPIC_TARGET_CLUSTER_TYPE_UNSUPPORTED` | `targetClusterType=3` (all); topics only allow 1/2 |
115
124
  | `TOPIC_CLUSTER_KEY_REQUIRED` | `targetClusterType=2` missing `topicClusterKey`, or topic-root `clusterKey` alias |
116
- | `TOPIC_QP_REQUIRED` | `targetClusterType=1` missing `topicQp` |
117
- | `TOPIC_QP_INVALID` | `topicQp` is not a JSON object string |
125
+ | `TOPIC_DEFINITION_REQUIRED` | `targetClusterType=1` missing `topicDefinitionRequest` |
126
+ | `TOPIC_DEFINITION_INVALID` | `topicDefinitionRequest` is not a semantic condition object |
118
127
  | `TARGET_CLUSTER_TYPE_INVALID` | `targetClusterType` not a known enum value |
128
+ | `ACTIVITY_TRIGGER_TYPE_UNSUPPORTED` | topic uses manual or a triggered task type |
129
+ | `ACTIVITY_EXPERIMENT_UNSUPPORTED` | topic or a topic task configures an experiment |
130
+ | `ACTIVITY_CONTENT_GROUPS_UNSUPPORTED` | a topic task has multiple experiment-style content groups |
131
+ | `TOPIC_TASK_OVERRIDE_UNSUPPORTED` | a topic task overrides shared topic settings or selects an independent cluster |
132
+ | `TOPIC_TASK_AUDIENCE_EXCLUSION_UNSUPPORTED` | a topic task definition contains exclusion filters |
133
+ | `ACTIVITY_STATUS_INVALID` | parent activity is not editable |
134
+ | `ACTIVITY_SCHEDULE_OUT_OF_RANGE` | topic schedule is outside the parent activity period |
119
135
 
120
136
  ## Copy errors
121
137
 
@@ -129,6 +145,8 @@ activity list/get
129
145
  | `ACTIVITY_NOT_FOUND` | parent activity missing / deleted / wrong project |
130
146
  | `TOPIC_TASKS_REQUIRED` | source topic has no tasks |
131
147
  | `ACTIVITY_STATUS_INVALID` | parent activity is approving/working/complete |
148
+ | `ACTIVITY_SCHEDULE_OUT_OF_RANGE` | source topic schedule is outside the parent activity period |
149
+ | `ACTIVITY_CONTENT_GROUPS_UNSUPPORTED` | a source topic task has multiple content groups |
132
150
  | `TOPIC_COUNT_LIMIT` | activity topic count limit exceeded |
133
151
  | `CHANNEL_NOT_FOUND` | source channel missing / type mismatch |
134
152
  | `TASK_COUNT_LIMIT` | project task count limit exceeded |