@thinkingai/ae-cli 6.0.32 → 6.0.34

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 (201) hide show
  1. package/README.md +3 -2
  2. package/README.zh.md +3 -2
  3. package/dist/{auth-MEJ642P4.js → auth-ENM3FE6L.js} +3 -2
  4. package/dist/{auth-7H3HAAJ3.js → auth-UPGUOKTW.js} +13 -6
  5. package/dist/{capability-QW4AVJHI.js → capability-AJC5CBRT.js} +49 -17
  6. package/dist/{capability-SCRFGODD.js → capability-TQ5KU5Q6.js} +49 -17
  7. package/dist/chunk-24BAVOX3.js +51 -0
  8. package/dist/{chunk-MDJGDI6K.js → chunk-3KI3RRXX.js} +5 -5
  9. package/dist/{chunk-PKRD2IEM.js → chunk-3P3562ZX.js} +9 -7
  10. package/dist/{chunk-R77JT7XD.js → chunk-4Q5TNP4Q.js} +4 -4
  11. package/dist/{chunk-7OLGDQQ2.js → chunk-6CHYBI64.js} +2 -2
  12. package/dist/{chunk-6LEYLOV3.js → chunk-CPVTECJ3.js} +9 -7
  13. package/dist/{chunk-KCA6BA5D.js → chunk-DB4Q3ANU.js} +5 -3
  14. package/dist/{chunk-2NDGFQHW.js → chunk-E7UXXHO3.js} +11 -3
  15. package/dist/{chunk-I4A62X3N.js → chunk-HQ2A7ITL.js} +23 -14
  16. package/dist/chunk-IMMGMU54.js +674 -0
  17. package/dist/{chunk-AJTH7LT3.js → chunk-IR4ZLVPW.js} +4 -2
  18. package/dist/{chunk-TBHBYKXZ.js → chunk-ISY6HMHM.js} +2 -2
  19. package/dist/{chunk-KGJQCYVC.js → chunk-LCXU3AAT.js} +4 -2
  20. package/dist/chunk-LYVNONC4.js +86 -0
  21. package/dist/{chunk-DYOS6YY7.js → chunk-RGXCNC4N.js} +23 -14
  22. package/dist/{chunk-YCLVYFK7.js → chunk-V6FR6WTW.js} +45 -87
  23. package/dist/chunk-VTWMIC5L.js +27 -0
  24. package/dist/{cli-token-TVQRSE46.js → cli-token-4SBMXAUK.js} +6 -3
  25. package/dist/{client-2643Z5AG.js → client-PP5FETMW.js} +4 -3
  26. package/dist/community-report-client-KK2QBANO.js +145 -0
  27. package/dist/{config-7UZWDE74.js → config-RCCGHHYA.js} +6 -3
  28. package/dist/index.js +505 -220
  29. package/dist/{metadata-BFDL6RUK.js → metadata-3M5F2AED.js} +14 -13
  30. package/dist/{metadata-FCLDBXX2.js → metadata-W2MEOI4Z.js} +14 -13
  31. package/dist/{model-T3KZJWLW.js → model-OYQLXCQY.js} +3 -2
  32. package/dist/{raw-CN542NGT.js → raw-TPB7KSZO.js} +6 -4
  33. package/dist/{sync-ERNHDPB5.js → sync-EFJKFZK2.js} +6 -3
  34. package/dist/{te-agent-FCCWUDTJ.js → te-agent-K2OWMZXT.js} +3 -2
  35. package/dist/{te-analysis-PUVF5IF4.js → te-analysis-I73ZS4NK.js} +903 -33
  36. package/dist/{te-analysis-UJDOKPAN.js → te-analysis-Q7AZCDU4.js} +903 -33
  37. package/dist/{te-common-XLAGWNIV.js → te-common-ST3QPSXJ.js} +7 -6
  38. package/dist/{te-common-VUX3VOXZ.js → te-common-WSLIKKPC.js} +7 -6
  39. package/dist/te-community-WXGB6IOX.js +1659 -0
  40. package/dist/te-community-X2AHXGCA.js +1659 -0
  41. package/dist/{te-dataops-ZNJBQ6VT.js → te-dataops-MJV54MNY.js} +10 -8
  42. package/dist/{te-dataops-F36T656A.js → te-dataops-OA7I6HBG.js} +10 -8
  43. package/dist/{te-engage-QBCCME22.js → te-engage-2FSDUOIZ.js} +973 -1585
  44. package/dist/{te-engage-K4AEUPK5.js → te-engage-BMJ6UOUU.js} +973 -1585
  45. package/dist/{te-kb-AYCODNU6.js → te-kb-E7NSCBRB.js} +74 -12
  46. package/dist/{te-meta-UUROEODR.js → te-meta-Q4L6EE3Q.js} +7 -6
  47. package/dist/{te-meta-ARDIW3YI.js → te-meta-VHCN4Q62.js} +7 -6
  48. package/dist/{te-team-OKCOX7OE.js → te-team-PDKKW7Q5.js} +7 -6
  49. package/dist/tracking/i18n/resources/cli/en.json +4 -3
  50. package/dist/tracking/i18n/resources/cli/ja.json +4 -3
  51. package/dist/tracking/i18n/resources/cli/ko.json +4 -3
  52. package/dist/tracking/i18n/resources/cli/zh.json +4 -3
  53. package/package.json +6 -2
  54. package/skills/ae-agent/SKILL.md +2 -1
  55. package/skills/ae-analysis/SKILL.md +12 -1
  56. package/skills/ae-analysis/references/adhoc_export.md +2 -0
  57. package/skills/ae-analysis/references/adhoc_run.md +2 -0
  58. package/skills/ae-analysis/references/alert_create.md +25 -0
  59. package/skills/ae-analysis/references/alert_definition_schema_get.md +24 -0
  60. package/skills/ae-analysis/references/alert_delete.md +26 -0
  61. package/skills/ae-analysis/references/alert_detail_list.md +27 -0
  62. package/skills/ae-analysis/references/alert_get.md +25 -0
  63. package/skills/ae-analysis/references/alert_job_list.md +24 -0
  64. package/skills/ae-analysis/references/alert_list.md +27 -0
  65. package/skills/ae-analysis/references/alert_notice_config_list.md +24 -0
  66. package/skills/ae-analysis/references/alert_start.md +25 -0
  67. package/skills/ae-analysis/references/alert_stop.md +25 -0
  68. package/skills/ae-analysis/references/alert_update.md +26 -0
  69. package/skills/ae-analysis/references/bi_panel_create.md +3 -3
  70. package/skills/ae-analysis/references/check_delete.md +27 -0
  71. package/skills/ae-analysis/references/check_export.md +27 -0
  72. package/skills/ae-analysis/references/check_get.md +27 -0
  73. package/skills/ae-analysis/references/check_list.md +24 -0
  74. package/skills/ae-analysis/references/check_retry.md +27 -0
  75. package/skills/ae-analysis/references/check_run.md +25 -0
  76. package/skills/ae-analysis/references/command_index.md +61 -27
  77. package/skills/ae-analysis/references/dashboard_create.md +3 -3
  78. package/skills/ae-analysis/references/dashboard_daily_report_send.md +1 -0
  79. package/skills/ae-analysis/references/dashboard_daily_report_update.md +2 -0
  80. package/skills/ae-analysis/references/dashboard_report_data_export.md +3 -3
  81. package/skills/ae-analysis/references/dashboard_report_data_run.md +3 -3
  82. package/skills/ae-analysis/references/event_blacklist_add.md +25 -0
  83. package/skills/ae-analysis/references/event_blacklist_list.md +24 -0
  84. package/skills/ae-analysis/references/event_blacklist_update.md +26 -0
  85. package/skills/ae-analysis/references/ingest_error_list.md +27 -0
  86. package/skills/ae-analysis/references/ingest_summary.md +26 -0
  87. package/skills/ae-analysis/references/live_data_export.md +27 -0
  88. package/skills/ae-analysis/references/live_data_list.md +27 -0
  89. package/skills/ae-analysis/references/plan_change_log_export.md +27 -0
  90. package/skills/ae-analysis/references/plan_change_log_list.md +24 -0
  91. package/skills/ae-analysis/references/plan_delete_items.md +30 -0
  92. package/skills/ae-analysis/references/plan_export.md +26 -0
  93. package/skills/ae-analysis/references/plan_generate.md +27 -0
  94. package/skills/ae-analysis/references/plan_get.md +24 -0
  95. package/skills/ae-analysis/references/plan_import_excel.md +26 -0
  96. package/skills/ae-analysis/references/plan_save_items.md +27 -0
  97. package/skills/ae-analysis/references/plan_sync_from_meta.md +24 -0
  98. package/skills/ae-analysis/references/project_role_delete.md +4 -3
  99. package/skills/ae-analysis/references/project_role_get.md +4 -3
  100. package/skills/ae-analysis/references/project_role_user_list.md +4 -3
  101. package/skills/ae-analysis/references/query_create_result_cluster.md +2 -1
  102. package/skills/ae-analysis/references/report_data_export.md +3 -1
  103. package/skills/ae-analysis/references/report_data_run.md +12 -2
  104. package/skills/ae-analysis/references/sdk_sample_generate.md +24 -0
  105. package/skills/ae-analysis/references/user_cluster_create.md +2 -0
  106. package/skills/ae-analysis/references/user_cluster_create_id.md +2 -0
  107. package/skills/ae-analysis/references/user_cluster_update.md +2 -0
  108. package/skills/ae-analysis/references/user_cluster_update_id.md +2 -0
  109. package/skills/ae-analysis/references/user_tag_create.md +2 -0
  110. package/skills/ae-analysis/references/user_tag_create_id.md +2 -0
  111. package/skills/ae-analysis/references/user_tag_update.md +2 -0
  112. package/skills/ae-analysis/references/user_tag_update_id.md +2 -0
  113. package/skills/ae-analysis-global/SKILL.md +2 -0
  114. package/skills/ae-capability/SKILL.md +7 -5
  115. package/skills/ae-community/SKILL.md +72 -8
  116. package/skills/ae-community/references/community-chat-analysis.md +341 -0
  117. package/skills/ae-community/references/community-data-report.md +301 -0
  118. package/skills/ae-dataops/SKILL.md +2 -1
  119. package/skills/ae-engage/SKILL.md +129 -105
  120. package/skills/ae-engage/references/activity-activity-type.md +1 -1
  121. package/skills/ae-engage/references/activity-activity.md +1 -1
  122. package/skills/ae-engage/references/activity-approval.md +5 -7
  123. package/skills/ae-engage/references/activity-task.md +12 -18
  124. package/skills/ae-engage/references/activity-topic.md +39 -22
  125. package/skills/ae-engage/references/add-approver.md +4 -4
  126. package/skills/ae-engage/references/add-channel.md +10 -5
  127. package/skills/ae-engage/references/approval-approver-delete.md +1 -1
  128. package/skills/ae-engage/references/approver-list.md +4 -4
  129. package/skills/ae-engage/references/build-task-save-guide.md +13 -13
  130. package/skills/ae-engage/references/cancel-query-by-request-id.md +7 -6
  131. package/skills/ae-engage/references/channel-detail.md +14 -9
  132. package/skills/ae-engage/references/channel-list.md +15 -10
  133. package/skills/ae-engage/references/channel-mgmt.md +109 -0
  134. package/skills/ae-engage/references/channel-test-send.md +1 -1
  135. package/skills/ae-engage/references/channel-update-config.md +1 -1
  136. package/skills/ae-engage/references/channel_touch_limits_list.md +1 -1
  137. package/skills/ae-engage/references/client-param.md +34 -16
  138. package/skills/ae-engage/references/common-metric.md +85 -18
  139. package/skills/ae-engage/references/config-item-analysis-report.md +8 -27
  140. package/skills/ae-engage/references/config-item-strategy-comparison.md +7 -18
  141. package/skills/ae-engage/references/config-item-trigger-report.md +8 -35
  142. package/skills/ae-engage/references/delete-channel.md +5 -5
  143. package/skills/ae-engage/references/delete-flow.md +5 -5
  144. package/skills/ae-engage/references/flow-ab-split-node-report.md +11 -45
  145. package/skills/ae-engage/references/flow-detail.md +15 -10
  146. package/skills/ae-engage/references/flow-list.md +9 -4
  147. package/skills/ae-engage/references/flow-node-config-schema.md +9 -8
  148. package/skills/ae-engage/references/flow-node-detail-report.md +11 -46
  149. package/skills/ae-engage/references/flow-node-overview-report.md +11 -43
  150. package/skills/ae-engage/references/flow-process-report.md +12 -50
  151. package/skills/ae-engage/references/flow-update-remark.md +19 -0
  152. package/skills/ae-engage/references/manage-flow.md +19 -19
  153. package/skills/ae-engage/references/manage-task.md +5 -5
  154. package/skills/ae-engage/references/modify-flow-base-info.md +8 -8
  155. package/skills/ae-engage/references/preset-event.md +1 -1
  156. package/skills/ae-engage/references/push-language.md +1 -1
  157. package/skills/ae-engage/references/save-flow.md +54 -52
  158. package/skills/ae-engage/references/save-task.md +23 -17
  159. package/skills/ae-engage/references/scene-config-channel.md +90 -10
  160. package/skills/ae-engage/references/scene-config-group.md +1 -1
  161. package/skills/ae-engage/references/scene-config-item.md +27 -4
  162. package/skills/ae-engage/references/scene-config-metric.md +1 -1
  163. package/skills/ae-engage/references/scene-config-param.md +2 -2
  164. package/skills/ae-engage/references/scene-preset-metric.md +1 -1
  165. package/skills/ae-engage/references/scene-strategy.md +19 -3
  166. package/skills/ae-engage/references/scene-template.md +10 -4
  167. package/skills/ae-engage/references/task-data-detail.md +5 -67
  168. package/skills/ae-engage/references/task-data-overview.md +5 -35
  169. package/skills/ae-engage/references/task-detail.md +5 -5
  170. package/skills/ae-engage/references/task-experiment-report.md +5 -38
  171. package/skills/ae-engage/references/task-list.md +4 -4
  172. package/skills/ae-engage/references/task-metric-detail.md +5 -43
  173. package/skills/ae-engage/references/task-stats.md +5 -5
  174. package/skills/ae-engage/references/update-channel-status.md +6 -6
  175. package/skills/ae-engage/references/validate-flow-node-config.md +12 -11
  176. package/skills/ae-engage/references/whitelist-list.md +4 -4
  177. package/skills/ae-engage/references/whitelist.md +1 -1
  178. package/skills/ae-engage/references/workbench-workbench.md +1 -1
  179. package/skills/ae-generate-tracking-code/SKILL.md +4 -4
  180. package/skills/ae-generate-tracking-plan/SKILL.md +132 -11
  181. package/skills/ae-generate-tracking-plan/references/business-dimension-mapping.md +98 -33
  182. package/skills/ae-generate-tracking-plan/references/xlsx-schema.md +16 -14
  183. package/skills/ae-kb/SKILL.md +11 -6
  184. package/skills/ae-metadata/SKILL.md +2 -1
  185. package/skills/ae-team/SKILL.md +2 -1
  186. package/dist/chunk-NOO24N7W.js +0 -11
  187. package/dist/chunk-TNW2CI4W.js +0 -129
  188. package/dist/te-community-PEZ2VEF7.js +0 -687
  189. package/dist/te-community-TSKJ652U.js +0 -687
  190. package/skills/ae-engage/references/config-channel-detail.md +0 -31
  191. package/skills/ae-engage/references/config-channel-list.md +0 -26
  192. package/skills/ae-engage/references/config-item-detail.md +0 -29
  193. package/skills/ae-engage/references/config-item-list.md +0 -18
  194. package/skills/ae-engage/references/copy-config-template.md +0 -28
  195. package/skills/ae-engage/references/delete-config-channel.md +0 -23
  196. package/skills/ae-engage/references/delete-config-item.md +0 -24
  197. package/skills/ae-engage/references/engage-scene-config-item.md +0 -69
  198. package/skills/ae-engage/references/manage-strategy.md +0 -73
  199. package/skills/ae-engage/references/strategy-detail.md +0 -72
  200. package/skills/ae-engage/references/strategy-list.md +0 -20
  201. package/skills/ae-engage/references/update-config-channel-status.md +0 -31
@@ -1,10 +1,8 @@
1
1
  # engage-activity task
2
2
 
3
- > Capability ids: `engage-activity.task.{get,copy}` · Domain: `engage`.
4
- >
5
- > Temporarily disabled: `task create` / `task update` (command registration + skill guidance).
3
+ > Capability ids: `engage-activity.task.{get,create,update,copy}` · Domain: `engage`.
6
4
 
7
- 运营活动 - 独立任务(活动下不属于主题的任务)。`copy` 读取源任务详情、改名后重新创建(无后端复制 API)。
5
+ Campaign activities — standalone tasks (tasks under an activity that do not belong to a topic). `copy` loads the source task detail, renames it, and re-creates it (no dedicated backend copy API).
8
6
 
9
7
  ## Commands
10
8
 
@@ -12,12 +10,6 @@
12
10
  # Get a standalone task detail
13
11
  ae-cli engage-activity task get --project-id <project_id> --task-id <task_id>
14
12
 
15
- # Copy a standalone task (loads detail, renames, re-creates)
16
- ae-cli engage-activity task copy --project-id <project_id> --task-id <task_id> [--new-name <name>]
17
- ```
18
-
19
- <!-- Temporarily disabled: task create / task update
20
- ```bash
21
13
  # Create a standalone task under an activity (webhook + existing cluster)
22
14
  ae-cli engage-activity task create --project-id <project_id> \
23
15
  --payload '{ ... }'
@@ -25,24 +17,25 @@ ae-cli engage-activity task create --project-id <project_id> \
25
17
  # Update a standalone task
26
18
  ae-cli engage-activity task update --project-id <project_id> \
27
19
  --payload '{"taskId":"task-1","taskName":"t1", ...}'
20
+
21
+ # Copy a standalone task (loads detail, renames, re-creates)
22
+ ae-cli engage-activity task copy --project-id <project_id> --task-id <task_id> [--new-name <name>]
28
23
  ```
29
- -->
30
24
 
31
25
  ## Parameters
32
26
 
33
27
  | Command | Required flags | Notes |
34
28
  |---|---|---|
35
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}`. |
36
32
  | copy | `--project-id`, `--task-id` | `--new-name` optional (default source name + `_copy`). |
37
33
 
38
- <!-- Temporarily disabled
39
- | create | `--project-id`, `--payload` | payload = `OperationTaskOpDTO`; set `activityId`, leave `topicId` empty. |
40
- | update | `--project-id`, `--payload` | payload = `OperationTaskOpDTO` including `taskId`. |
41
- -->
42
-
43
34
  ## Output
44
35
 
45
36
  - `get`: `data.task`.
37
+ - `create`: `data.task_id`.
38
+ - `update`: `data.success`.
46
39
  - `copy`: `data.task_id`, optional `data.trigger_time_stale` (true when source schedule-single time is already past).
47
40
 
48
41
  ## Payload notes (for copy / detail shape)
@@ -53,6 +46,7 @@ ae-cli engage-activity task update --project-id <project_id> \
53
46
  - `groupContentList[].contentList[].content` must be a JSON **array string**.
54
47
  - **TEXT (rich text) params** must include both `value` and `config` (Slate.js JSON **string**). If `config` is missing, Hermes copy auto-fills
55
48
  `config = [{"type":"paragraph","children":[{"text":"<value>"}]}]` as a JSON string.
49
+ - Missing `expConfig` on create/update is auto-filled as `{"enableExp":false}` (same shape as task `get`).
56
50
 
57
51
  ### Audience (`targetClusterType`)
58
52
 
@@ -66,8 +60,8 @@ ae-cli engage-activity task update --project-id <project_id> \
66
60
 
67
61
  - Discover a real `task_id` via `get`/activity `info-list` first; never invent IDs.
68
62
  - `copy` duplicates the editable task config (not runtime/trigger state).
69
- - `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 `approval submit`.
70
- - Standalone tasks must **not** include `topicId`; topic tasks use `engage-activity topic copy` (topic create/update are temporarily disabled).
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).
64
+ - Standalone tasks must **not** include `topicId`; topic tasks use `engage-activity topic create` / `topic copy`.
71
65
 
72
66
  ## Copy errors
73
67
 
@@ -1,14 +1,18 @@
1
1
  # engage-activity topic
2
2
 
3
- > Capability ids: `engage-activity.topic.{remove-task,delete,get,copy}` · Domain: `engage`.
4
- >
5
- > Temporarily disabled: `topic create` / `topic update` (command registration + skill guidance).
3
+ > Capability ids: `engage-activity.topic.{create,update,remove-task,delete,get,copy}` · Domain: `engage`.
6
4
 
7
5
  Activity topics and tasks under a topic. `copy` loads the source topic, renames it, and re-creates (no dedicated backend copy API).
8
6
 
9
7
  ## Commands
10
8
 
11
9
  ```bash
10
+ # Create a topic and its tasks under an activity
11
+ ae-cli engage-activity topic create --project-id <project_id> --payload '{ ... }'
12
+
13
+ # Update a topic and its task relations
14
+ ae-cli engage-activity topic update --project-id <project_id> --payload '{"topicId":"topic-1", ...}'
15
+
12
16
  # Remove a task from its topic (high-risk)
13
17
  ae-cli engage-activity topic remove-task --project-id <project_id> --task-id <task_id> --yes
14
18
 
@@ -22,41 +26,44 @@ ae-cli engage-activity topic get --project-id <project_id> --topic-id <topic_id>
22
26
  ae-cli engage-activity topic copy --project-id <project_id> --topic-id <topic_id> [--new-name <name>]
23
27
  ```
24
28
 
25
- <!-- Temporarily disabled: topic create / topic update
26
- ```bash
27
- # Create a topic and its tasks under an activity
28
- ae-cli engage-activity topic create --project-id <project_id> --payload '{ ... }'
29
-
30
- # Update a topic and its task relations
31
- ae-cli engage-activity topic update --project-id <project_id> --payload '{"topicId":"topic-1", ...}'
32
- ```
33
- -->
34
-
35
29
  ## Parameters
36
30
 
37
31
  | Command | Required flags | Notes |
38
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`). |
34
+ | update | `--project-id`, `--payload` | payload = `TopicModifyReq` (`topicId` + fields + task lists). |
39
35
  | remove-task | `--project-id`, `--task-id` | high-risk; requires `--yes`; no dry-run. Only tasks with a non-empty `topicId`. |
40
36
  | delete | `--project-id`, `--topic-id` | high-risk; requires `--yes`; no dry-run. |
41
37
  | get | `--project-id`, `--topic-id` | read. |
42
38
  | copy | `--project-id`, `--topic-id` | `--new-name` optional (default source name + `_copy`). |
43
39
 
44
- <!-- Temporarily disabled
45
- | create | `--project-id`, `--payload` | payload = `TopicAddDTO` (camelCase). |
46
- | update | `--project-id`, `--payload` | payload = `TopicModifyReq` (`topicId` + fields + task lists). |
47
- -->
48
-
49
- ## Notes for get / copy
40
+ ## Notes for get / copy / create
50
41
 
51
- TEXT (rich text) params inside `groupContentList[].contentList[].content` need both `value` and Slate `config` (JSON string). If `config` is omitted, Hermes copy auto-fills
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
52
43
  `[{"type":"paragraph","children":[{"text":"<value>"}]}]`. See `activity-task.md` Channel content.
53
44
 
54
45
  Topic-level audience uses `topicClusterKey` / `topicQp`; do **not** pass task-level `clusterKey` at topic root.
55
46
 
47
+ ### Audience (`targetClusterType`)
48
+
49
+ | Value | Required | Notes |
50
+ |---|---|---|
51
+ | `1` (custom) | `topicQp` | Valid condition JSON object string (not `{}`). |
52
+ | `2` (existed) | `topicClusterKey` | From an existing user cluster. |
53
+ | `3` (all) | — | **Not supported for activity topics** → `TOPIC_TARGET_CLUSTER_TYPE_UNSUPPORTED`. Use standalone `engage-activity task create` for all-users. |
54
+
55
+ ### Trigger (`triggerType`)
56
+
57
+ | Value | Required | Notes |
58
+ |---|---|---|
59
+ | `0` (schedule single) | `triggerTime` (`yyyy-MM-dd HH:mm`, future) | Preferred for CLI create. |
60
+ | `1` (schedule repeat) | `startDate`, `endDate`, `triggerCrontab` | |
61
+ | `2` (manual) | — | **Not supported for activity topics** (UI only offers 0/1). Using it without `endDate` causes `CAPABILITY_EXECUTION_FAILED`. |
62
+
56
63
  ## Output
57
64
 
58
65
  - `get`: `data.topic` (includes `topicClusterKey` for topic audience).
59
- - `remove-task` / `delete` / `copy`: `data.success`.
66
+ - `create` / `update` / `remove-task` / `delete` / `copy`: `data.success`.
60
67
  - `copy` may include `data.trigger_time_stale=true` when source schedule-single time is already past.
61
68
 
62
69
  ## Decision Rules
@@ -64,9 +71,19 @@ Topic-level audience uses `topicClusterKey` / `topicQp`; do **not** pass task-le
64
71
  - `remove-task` and `delete` are `high-risk-write` — require `--yes`, no dry-run.
65
72
  - `remove-task` only deletes **topic tasks** (`topicId` present). Standalone tasks → use `engage-task task delete`.
66
73
  - `copy` duplicates the editable topic config and its tasks (not runtime/approval state).
67
- - `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 `approval submit`.
74
+ - `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).
68
75
  - Prefer `topic get` as a template when inspecting channel/content fields.
69
76
 
77
+ ## Create / update audience errors
78
+
79
+ | code | when |
80
+ |---|---|
81
+ | `TOPIC_TARGET_CLUSTER_TYPE_UNSUPPORTED` | `targetClusterType=3` (all); topics only allow 1/2 |
82
+ | `TOPIC_CLUSTER_KEY_REQUIRED` | `targetClusterType=2` missing `topicClusterKey`, or topic-root `clusterKey` alias |
83
+ | `TOPIC_QP_REQUIRED` | `targetClusterType=1` missing `topicQp` |
84
+ | `TOPIC_QP_INVALID` | `topicQp` is not a JSON object string |
85
+ | `TARGET_CLUSTER_TYPE_INVALID` | `targetClusterType` not a known enum value |
86
+
70
87
  ## Copy errors
71
88
 
72
89
  `copy` = get topic detail → rename → draft `addTopicAndTask` (no dedicated copy API). Prefer actionable codes over `INVALID_CAPABILITY_REQUEST` / mismatched i18n text like "Campaign does not exist.":
@@ -1,15 +1,15 @@
1
- # ae-engage +add_approver
1
+ # ae-engage engage-setting approval-approver add
2
2
 
3
3
 
4
4
  Batch add approvers.
5
5
 
6
- Mapped command: `ae-cli engage +add_approver`
6
+ Mapped command: `ae-cli engage-setting approval-approver add`
7
7
 
8
8
  ## Flags
9
9
 
10
10
  | Flag | Type | Required | Description |
11
11
  |------|------|------|------|
12
- | `--project_id` / `-p` | number | Yes | Project ID |
12
+ | `--project-id` / `-p` | number | Yes | Project ID |
13
13
  | `--approvers` | json | Yes | approver open ID JSON array |
14
14
 
15
15
  ## Safety Constraints
@@ -19,5 +19,5 @@ This command is a **write operation** and and modifies the project approver conf
19
19
  ## Examples
20
20
 
21
21
  ```bash
22
- ae-cli engage +add_approver --project_id 1 --approvers '["ou_xxx","ou_yyy"]'
22
+ ae-cli engage-setting approval-approver add --project-id 1 --approvers '["ou_xxx","ou_yyy"]'
23
23
  ```
@@ -1,15 +1,15 @@
1
- # ae-engage +add_channel
1
+ # ae-engage engage-setting channel create
2
2
 
3
3
 
4
4
  Create a new Engage channel.
5
5
 
6
- Mapped command: `ae-cli engage +add_channel`
6
+ Mapped command: `ae-cli engage-setting channel create`
7
7
 
8
8
  ## Flags
9
9
 
10
10
  | Flag | Type | Required | Description |
11
11
  |------|------|------|------|
12
- | `--project_id` / `-p` | number | Yes | Project ID |
12
+ | `--project-id` / `-p` | number | Yes | Project ID |
13
13
  | `--req` | json | Yes | Channel creation request JSON object |
14
14
 
15
15
  ## `--req` Object Fields
@@ -26,7 +26,12 @@ Mapped command: `ae-cli engage +add_channel`
26
26
  | `eventDeliveryName` | string | Yes | delivery event name |
27
27
  | `touchEventSource` | string | Yes | touch event source |
28
28
 
29
- `projectId` is automatically written into the `--req` object by the CLI, so you do not need to fill it manually. If you provide a field with the same name, the top-level `--project_id` takes precedence.
29
+ 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
+
31
+ ## Response shape
32
+
33
+ The created channel is under `data.item`; its response keys recursively use snake_case, such as
34
+ `channel_id`, `channel_status`, and `channel_type`.
30
35
 
31
36
  ## Enum Notes
32
37
 
@@ -68,6 +73,6 @@ This command is a **write operation** and creates a new channel. Check that the
68
73
  ## Examples
69
74
 
70
75
  ```bash
71
- ae-cli engage +add_channel --project_id 1 \
76
+ ae-cli engage-setting channel create --project-id 1 \
72
77
  --req '{"channelType":1,"channelSubBizType":"webhook","channelName":"demo","pushIdType":"user_id","config":"{}","enableTouchEvent":0,"eventClickName":"","eventDeliveryName":"","touchEventSource":""}'
73
78
  ```
@@ -22,5 +22,5 @@ ae-cli engage-setting approval-approver delete --project-id <project_id> --appro
22
22
  ## Decision Rules
23
23
 
24
24
  - Use this command when the user asks to remove/delete an approver from a project.
25
- - Discover the real approver OpenID with `ae-cli engage +approver_list --project_id <project_id>` first; never invent an OpenID.
25
+ - Discover the real approver OpenID with `ae-cli engage-setting approval-approver list --project-id <project_id>` first; never invent an OpenID.
26
26
  - Risk is `high-risk-write`; the CLI confirmation gate requires `--yes` (or interactive confirmation) before executing.
@@ -1,18 +1,18 @@
1
- # ae-engage +approver_list
1
+ # ae-engage engage-setting approval-approver list
2
2
 
3
3
 
4
4
  Query the project approver list.
5
5
 
6
- Mapped command: `ae-cli engage +approver_list`
6
+ Mapped command: `ae-cli engage-setting approval-approver list`
7
7
 
8
8
  ## Flags
9
9
 
10
10
  | Flag | Type | Required | Description |
11
11
  |------|------|------|------|
12
- | `--project_id` / `-p` | number | Yes | Project ID |
12
+ | `--project-id` / `-p` | number | Yes | Project ID |
13
13
 
14
14
  ## Examples
15
15
 
16
16
  ```bash
17
- ae-cli engage +approver_list --project_id 1
17
+ ae-cli engage-setting approval-approver list --project-id 1
18
18
  ```
@@ -1,8 +1,8 @@
1
- # ae-engage `+build_task_save_guide`
1
+ # ae-cli `engage-task task build-save-guide`
2
2
 
3
3
  Build a scenario-specific guide for constructing `save_task.req`.
4
4
 
5
- Mapped command: `ae-cli engage +build_task_save_guide`
5
+ Mapped command: `ae-cli engage-task task build-save-guide`
6
6
 
7
7
  This is a read-only helper. It does not save tasks, submit approvals, or trigger execution. Its job is to tell you how to build a valid `save_task` request for the current scenario.
8
8
 
@@ -12,8 +12,8 @@ This is a read-only helper. It does not save tasks, submit approvals, or trigger
12
12
 
13
13
  Use this sequence when creating or updating a task draft:
14
14
 
15
- 1. Query channels with `ae-cli engage +channel_list --project_id <projectId>`.
16
- 2. Call `ae-cli engage +build_task_save_guide --project_id <projectId> --req '{...}'`.
15
+ 1. Query channels with `ae-cli engage-setting channel list --project-id <projectId>`.
16
+ 2. Call `ae-cli engage-task task build-save-guide --project-id <projectId> --req '{...}'`.
17
17
  3. If the guide says an audience or QP-derived fields are required, create the audience directly and read it back:
18
18
 
19
19
  ```bash
@@ -22,7 +22,7 @@ ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<co
22
22
  ```
23
23
 
24
24
  4. Build the final grouped `save_task.req`.
25
- 5. Submit with `ae-cli engage +save_task --project_id <projectId> --req '{...}'`.
25
+ 5. Submit with `ae-cli engage-task task save --project-id <projectId> --req '{...}'`.
26
26
 
27
27
  Important:
28
28
 
@@ -40,7 +40,7 @@ Important:
40
40
  The CLI call shape is:
41
41
 
42
42
  ```bash
43
- ae-cli engage +build_task_save_guide --project_id <projectId> --req '<req-json>'
43
+ ae-cli engage-task task build-save-guide --project-id <projectId> --req '<req-json>'
44
44
  ```
45
45
 
46
46
  This CLI requires `--req`, but `{}` is valid when you want a generic guide without scenario context.
@@ -48,9 +48,9 @@ This CLI requires `--req`, but `{}` is valid when you want a generic guide witho
48
48
  Common request patterns:
49
49
 
50
50
  ```bash
51
- ae-cli engage +build_task_save_guide --project_id 1 --req '{}'
52
- ae-cli engage +build_task_save_guide --project_id 1 --req '{"context":{"triggerType":2,"channelId":"channel_123"}}'
53
- ae-cli engage +build_task_save_guide --project_id 1 --req '{"draft":{"baseInfo":{"taskName":"Demo Task"}}}'
51
+ ae-cli engage-task task build-save-guide --project-id 1 --req '{}'
52
+ ae-cli engage-task task build-save-guide --project-id 1 --req '{"context":{"triggerType":2,"channelId":"channel_123"}}'
53
+ ae-cli engage-task task build-save-guide --project-id 1 --req '{"draft":{"baseInfo":{"taskName":"Demo Task"}}}'
54
54
  ```
55
55
 
56
56
  Supported request fields:
@@ -259,8 +259,8 @@ Important fields:
259
259
 
260
260
  Recommended usage pattern:
261
261
 
262
- 1. resolve a real `channelId` with `+channel_list`
263
- 2. call `+build_task_save_guide`
262
+ 1. resolve a real `channelId` with `engage-setting channel list`
263
+ 2. call `engage-task task build-save-guide`
264
264
  3. read `fieldRules.channelContentSchema`
265
265
  4. read `handoff.reqTemplate`
266
266
  5. fix everything in `blockingPlaceholders`
@@ -272,13 +272,13 @@ ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<co
272
272
  ```
273
273
 
274
274
  7. prefer the created cluster reference; only copy server-authored fields from `user-cluster get` when the guide explicitly requires QP-derived fields
275
- 8. call `+save_task`
275
+ 8. call `engage-task task save`
276
276
 
277
277
  ---
278
278
 
279
279
  ## 6. Safety Notes
280
280
 
281
- - `+build_task_save_guide` is read-only; it does not save a draft
281
+ - `engage-task task build-save-guide` is read-only; it does not save a draft
282
282
  - do not skip the guide and build `save_task.req` from memory alone
283
283
  - do not treat the semantic cluster definition builder as mandatory for every task
284
284
  - do not invent `channelId`, `clusterKey`, content keys, or QP structures
@@ -1,15 +1,15 @@
1
- # ae-engage +cancel_query_by_request_id
1
+ # Cancel a running Engage report query
2
2
 
3
3
 
4
4
  Cancel a running data query by requestId.
5
5
 
6
- Mapped command: `ae-cli engage +cancel_query_by_request_id`
6
+ Mapped capability: `engage-setting.query.cancel` (L3)
7
7
 
8
- ## Flags
8
+ ## Input
9
9
 
10
- | Flag | Type | Required | Description |
10
+ | Field | Type | Required | Description |
11
11
  |------|------|------|------|
12
- | `--request_id` | string | Yes | Query requestId |
12
+ | `request_id` | string | Yes | Query requestId |
13
13
 
14
14
  ## Safety Constraints
15
15
 
@@ -18,5 +18,6 @@ This command is a **write operation** and cancels an existing query.
18
18
  ## Examples
19
19
 
20
20
  ```bash
21
- ae-cli engage +cancel_query_by_request_id --request_id 00000000-0000-0000-0000-000000000000
21
+ ae-cli capability run engage-setting.query.cancel \
22
+ --input '{"request_id":"00000000-0000-0000-0000-000000000000"}'
22
23
  ```
@@ -1,25 +1,30 @@
1
- # ae-engage +channel_detail
1
+ # ae-engage engage-setting channel get
2
2
 
3
3
 
4
4
  Query the details of a single Engage channel.
5
5
 
6
- Mapped command: `ae-cli engage +channel_detail`
6
+ Mapped command: `ae-cli engage-setting channel get`
7
+
8
+ ## Response shape
9
+
10
+ The channel detail is under `data.item`. Every response key is snake_case, for example
11
+ `data.item.channel_status`, `data.item.channel_type`, and `data.item.config.params_list`.
7
12
 
8
13
  ## Flags
9
14
 
10
15
  | Flag | Type | Required | Description |
11
16
  |------|------|------|------|
12
- | `--project_id` / `-p` | number | Yes | Project ID |
13
- | `--channel_id` | string | Yes | channel ID |
17
+ | `--project-id` / `-p` | number | Yes | Project ID |
18
+ | `--channel-id` | string | Yes | channel ID |
14
19
 
15
20
  ## Common enums in the response
16
21
 
17
- ### `channelStatus`
22
+ ### `data.item.channel_status`
18
23
 
19
24
  - `0`: disabled
20
25
  - `1`: enabled
21
26
 
22
- ### `channelType`
27
+ ### `data.item.channel_type`
23
28
 
24
29
  - `1`: `WEBHOOK`
25
30
  - `2`: `APP_PUSH`
@@ -27,7 +32,7 @@ Mapped command: `ae-cli engage +channel_detail`
27
32
  - `4`: `WECHAT`
28
33
  - `5`: `DOU_YIN`
29
34
 
30
- ### `channelSubBizType`
35
+ ### `data.item.channel_sub_biz_type`
31
36
 
32
37
  Common values include:
33
38
 
@@ -39,7 +44,7 @@ Common values include:
39
44
  - `wechat_mini_game`
40
45
  - `dou_yin_recommended_game_card`
41
46
 
42
- ### `enableTouchEvent`
47
+ ### `data.item.enable_touch_event`
43
48
 
44
49
  - `0`: disable the touch funnel
45
50
  - `1`: enable the touch funnel
@@ -47,5 +52,5 @@ Common values include:
47
52
  ## Examples
48
53
 
49
54
  ```bash
50
- ae-cli engage +channel_detail --project_id 1 --channel_id <channel_id>
55
+ ae-cli engage-setting channel get --project-id 1 --channel-id <channel_id>
51
56
  ```
@@ -1,26 +1,31 @@
1
- # ae-engage +channel_list
1
+ # ae-engage engage-setting channel list
2
2
 
3
3
 
4
4
  Query the list of Engage channels in a project.
5
5
 
6
- Mapped command: `ae-cli engage +channel_list`
6
+ Mapped command: `ae-cli engage-setting channel list`
7
+
8
+ ## Response shape
9
+
10
+ The result is `{ data: { items, total } }`. Channel fields recursively use snake_case, for
11
+ example `data.items[].channel_id`, `data.items[].channel_status`, and `data.items[].channel_type`.
7
12
 
8
13
  ## Flags
9
14
 
10
15
  | Flag | Type | Required | Description |
11
16
  |------|------|------|------|
12
- | `--project_id` / `-p` | number | Yes | Project ID |
13
- | `--provider_list` | json | No | Provider list JSON array |
14
- | `--channel_status` | number | No | Channel status filter |
17
+ | `--project-id` / `-p` | number | Yes | Project ID |
18
+ | `--provider-list` | json | No | Provider list JSON array |
19
+ | `--channel-status` | number | No | Channel status filter |
15
20
 
16
21
  ## Enum Notes
17
22
 
18
- ### `--channel_status`
23
+ ### `--channel-status`
19
24
 
20
- - `0`: disabled
21
25
  - `1`: enabled
26
+ - `2`: disabled
22
27
 
23
- ### `--provider_list`
28
+ ### `--provider-list`
24
29
 
25
30
  Common provider / channelSubBizType values:
26
31
 
@@ -35,6 +40,6 @@ Common provider / channelSubBizType values:
35
40
  ## Examples
36
41
 
37
42
  ```bash
38
- ae-cli engage +channel_list --project_id 1
39
- ae-cli engage +channel_list --project_id 1 --provider_list '["webhook","fcm"]'
43
+ ae-cli engage-setting channel list --project-id 1
44
+ ae-cli engage-setting channel list --project-id 1 --provider-list '["webhook","fcm"]'
40
45
  ```
@@ -0,0 +1,109 @@
1
+ # Config channel management workflows
2
+
3
+ > Commands: `ae-cli engage-scene config-channel …` · See [`scene-config-channel.md`](scene-config-channel.md) for flags, `config` JSON shape, and capability ids.
4
+
5
+ Use for AE Engage **config center channel management**: Webhook (`channel_type=0`) and client (`channel_type=1`) config channels — list, get, create, update, copy, enable/disable, operation log, and delete.
6
+
7
+ ## Hard rules
8
+
9
+ 1. Use `ae-cli engage-scene config-channel <action>` only.
10
+ 2. Discover real `channel_id` values with `list` first; never invent IDs.
11
+ 3. `channel_type`: **0 = Webhook**, **1 = client** (not the same as engage push `channelType`, where 1 = webhook).
12
+ 4. `channel_status`: **1 = enabled**, **2 = disabled**.
13
+ 5. Writes require explicit user intent; `delete` is high-risk — confirm, then `--yes`.
14
+ 6. Before changing Webhook URL, auth, or parameter definitions on an enabled channel, disable it first.
15
+
16
+ ## Permissions
17
+
18
+ | Operation | Permission |
19
+ |---|---|
20
+ | List / get / query-log | `@opsViewConfigChannel@` |
21
+ | Create / update / copy / delete | `@opsEditConfigChannel@` |
22
+ | Enable / disable | `@opsManageConfigChannel@` |
23
+
24
+ ## Workflows
25
+
26
+ ### 1. List / filter by name
27
+
28
+ ```bash
29
+ ae-cli engage-scene config-channel list --project-id <pid> --channel-type 0
30
+ ae-cli engage-scene config-channel list --project-id <pid> --channel-type 1
31
+ ```
32
+
33
+ To filter by name, substring-match `data.items[].channel_name`.
34
+
35
+ ### 2. Detail
36
+
37
+ ```bash
38
+ ae-cli engage-scene config-channel get --project-id <pid> --channel-id <channel_id>
39
+ ```
40
+
41
+ Parse `data.channel.config` for URL, auth, user params, and env params.
42
+
43
+ ### 3. Create
44
+
45
+ Webhook requires `channel_name` and `config.url`. Optional: `testUrl`, auth, user params, env params.
46
+
47
+ ```bash
48
+ ae-cli engage-scene config-channel create \
49
+ --project-id <pid> \
50
+ --channel-name '<name>' \
51
+ --channel-type 0 \
52
+ --config '{"url":"https://...","testUrl":"","authConfig":{"enable":false},"customsParamList":[{"key":"uid","columnName":"#account_id","defaultValue":"","systemIdParam":false}],"envParamList":[]}'
53
+ ```
54
+
55
+ Returns `data.channel_id`. Created channels start **enabled**.
56
+
57
+ ### 4. Update
58
+
59
+ ```bash
60
+ ae-cli engage-scene config-channel get --project-id <pid> --channel-id <id>
61
+ # If channel_status=1 and changing URL / auth / param definitions:
62
+ ae-cli engage-scene config-channel update-status --project-id <pid> --channel-id <id> --channel-status 2
63
+ ae-cli engage-scene config-channel update \
64
+ --project-id <pid> --channel-id <id> --channel-name '<name>' --config '<json>'
65
+ # Re-enable if needed
66
+ ae-cli engage-scene config-channel update-status --project-id <pid> --channel-id <id> --channel-status 1
67
+ ```
68
+
69
+ Rename-only on an enabled channel: omit `--config`.
70
+
71
+ Before changing the system-integration identity (`systemIdParam`), warn the user about risk, then update.
72
+
73
+ ### 5. Copy
74
+
75
+ ```bash
76
+ ae-cli engage-scene config-channel get --project-id <pid> --channel-id <id>
77
+ ae-cli engage-scene config-channel create \
78
+ --project-id <pid> --channel-name '<name>_copy' --channel-type <0|1> --config '<config from get>'
79
+ ```
80
+
81
+ ### 6. Enable / disable
82
+
83
+ ```bash
84
+ ae-cli engage-scene config-channel update-status --project-id <pid> --channel-id <id> --channel-status 1
85
+ ae-cli engage-scene config-channel update-status --project-id <pid> --channel-id <id> --channel-status 2
86
+ ```
87
+
88
+ If disable fails or the user asks about impact: the channel may still have publishing strategies; suggest checking related config items.
89
+
90
+ ### 7. Operation log
91
+
92
+ ```bash
93
+ ae-cli engage-scene config-channel query-log --project-id <pid> --channel-id <id>
94
+ ```
95
+
96
+ ### 8. Delete
97
+
98
+ Enabled channels cannot be deleted:
99
+
100
+ ```bash
101
+ ae-cli engage-scene config-channel get --project-id <pid> --channel-id <id>
102
+ # If channel_status=1 → update-status 2 first (with user confirmation)
103
+ ae-cli engage-scene config-channel delete --project-id <pid> --channel-id <id> --yes
104
+ ```
105
+
106
+ ## Do not
107
+
108
+ - Treat engage push channels as config-center channels (`channel_type` meanings differ)
109
+ - Run `delete` without explicit user confirmation
@@ -32,6 +32,6 @@ ae-cli engage-setting channel test-send \
32
32
  ## Decision Rules
33
33
 
34
34
  - Use this command when the user asks to send a test message to a channel / verify channel delivery.
35
- - Discover the real channel id with `ae-cli engage +channel_list` first; never invent a channel id.
35
+ - Discover the real channel id with `ae-cli engage-setting channel list` first; never invent a channel id.
36
36
  - `--mock-push` is useful to inspect the request body/headers without actually delivering a message.
37
37
  - Risk is `write`; sending a real test push to a recipient is a write action.
@@ -32,5 +32,5 @@ ae-cli engage-setting channel update-config \
32
32
  ## Decision Rules
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
- - `--config` is the channel-specific JSON config; discover the existing config with `ae-cli engage +channel_detail` first rather than inventing it.
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
36
  - Risk is `write`; ordinary update, no confirmation gate.
@@ -25,5 +25,5 @@ ae-cli engage-setting channel-touch-limits list --project-id <project_id> --dry-
25
25
  ## Decision Rules
26
26
 
27
27
  - Use this command when the user asks for project channel touch-limit, delivery-cap, or fatigue-control rules.
28
- - Use `+channel_list` to list channels and `+channel_detail` to inspect one channel; neither returns the project touch-limit rule list.
28
+ - Use `engage-setting channel list` to list channels and `engage-setting channel get` to inspect one channel; neither returns the project touch-limit rule list.
29
29
  - If `items` is empty, do not invent rule IDs or channel IDs; report that no touch-limit rules were returned for the project.