@thinkingai/ae-cli 6.1.11 → 6.1.13

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 (150) hide show
  1. package/README.md +0 -2
  2. package/README.zh.md +0 -2
  3. package/dist/{auth-NN55553T.js → auth-GBMV6TEJ.js} +2 -2
  4. package/dist/{auth-GDV3H5I4.js → auth-NDSXE54J.js} +4 -4
  5. package/dist/{capability-TPORIKRQ.js → capability-TAMDRZYV.js} +23 -10
  6. package/dist/{capability-VQNC5CF7.js → capability-U7TDEEEG.js} +23 -10
  7. package/dist/{chunk-GJJA4CQZ.js → chunk-3FY3RJ26.js} +0 -4
  8. package/dist/{chunk-GS2P7LFD.js → chunk-5XUSIK27.js} +2 -2
  9. package/dist/{chunk-7KQWSBSL.js → chunk-753BUTNZ.js} +3 -3
  10. package/dist/{chunk-VTXHDCBW.js → chunk-AFXA7BRK.js} +2 -2
  11. package/dist/chunk-IBH3LDAH.js +556 -0
  12. package/dist/{chunk-RBNKI5ZW.js → chunk-JUW4AJXN.js} +2 -2
  13. package/dist/{chunk-TS6BUGUY.js → chunk-QATA32VR.js} +3 -3
  14. package/dist/{chunk-Z3OXWCIA.js → chunk-S5NTSDBS.js} +2 -2
  15. package/dist/chunk-UIHQJK5E.js +556 -0
  16. package/dist/{chunk-VKD5WQKN.js → chunk-VLWOLBGZ.js} +142 -24
  17. package/dist/{chunk-YTG6Q75E.js → chunk-WZRX4KOH.js} +25 -3
  18. package/dist/{chunk-YV52FB5G.js → chunk-ZQKDZXDO.js} +1 -1
  19. package/dist/{cli-token-GL5MS5FK.js → cli-token-4UPER74P.js} +3 -3
  20. package/dist/{chunk-6A2FUCIS.js → client-L2YDMHQ6.js} +5 -6
  21. package/dist/{config-4VZNLBKF.js → config-OL2LWGBV.js} +4 -33
  22. package/dist/index.js +25 -38
  23. package/dist/{memory-RWJW4XFO.js → memory-MUP7PPL7.js} +4 -4
  24. package/dist/{memory-VO2ZJCRT.js → memory-U4O5PMXH.js} +4 -4
  25. package/dist/{metadata-YGTHR2XJ.js → metadata-UORZTW3T.js} +21 -11
  26. package/dist/{metadata-ZRN2GHPN.js → metadata-VVQ3AQT5.js} +21 -11
  27. package/dist/{model-CLUIK3K5.js → model-JTUEO5M4.js} +2 -2
  28. package/dist/{sync-3REDHGY6.js → sync-MOSFNBVR.js} +5 -5
  29. package/dist/{te-agent-XNPELAKX.js → te-agent-IFKZDHZI.js} +25 -18
  30. package/dist/{te-analysis-GJI5FZUL.js → te-analysis-KOKHJJPE.js} +1225 -450
  31. package/dist/{te-analysis-N2BRDJZ5.js → te-analysis-LLOCCBJ4.js} +1225 -450
  32. package/dist/{te-community-SQXKE5OO.js → te-community-HNKVTERD.js} +207 -12
  33. package/dist/{te-community-TYSNU3NQ.js → te-community-IWE5B7W6.js} +208 -12
  34. package/dist/{te-dataops-OWIADNSM.js → te-dataops-KQPYNAE3.js} +262 -145
  35. package/dist/{te-dataops-5TM7WZDI.js → te-dataops-KXCEB4CS.js} +262 -145
  36. package/dist/{te-engage-F7V55KVW.js → te-engage-BRLSRVQT.js} +960 -41
  37. package/dist/{te-engage-FMYAYCNV.js → te-engage-HE4OPZIT.js} +960 -41
  38. package/dist/{te-experiment-JWXOYJ3W.js → te-experiment-K5US7RMG.js} +115 -9
  39. package/dist/{te-experiment-UPDMHCAJ.js → te-experiment-WA7TFMEL.js} +115 -9
  40. package/dist/{te-kb-VRMEY3D4.js → te-kb-OIH3T6CS.js} +4 -4
  41. package/dist/{te-system-XGS5EQIQ.js → te-system-AZ3URMUO.js} +515 -11
  42. package/dist/{te-team-BZRDV2CM.js → te-team-GZPU6UWA.js} +5 -5
  43. package/dist/{update-HEDXGOJH.js → update-TOBFXF2V.js} +4 -4
  44. package/package.json +6 -6
  45. package/skills/ae-agent/SKILL.md +3 -3
  46. package/skills/ae-agent/references/list-skill-references.md +4 -4
  47. package/skills/ae-agent/references/read-skill-reference.md +10 -7
  48. package/skills/ae-agent/references/upload-skill-reference.md +11 -9
  49. package/skills/ae-analysis/SKILL.md +15 -12
  50. package/skills/ae-analysis/metadata_resolution.md +150 -0
  51. package/skills/ae-analysis/references/adhoc_export.md +17 -2
  52. package/skills/ae-analysis/references/adhoc_run.md +12 -8
  53. package/skills/ae-analysis/references/ai_models.md +31 -5
  54. package/skills/ae-analysis/references/analysis_data_retrieval.md +104 -16
  55. package/skills/ae-analysis/references/analysis_drilldown_contract.md +4 -4
  56. package/skills/ae-analysis/references/analysis_gateway_assets.md +12 -10
  57. package/skills/ae-analysis/references/artifact_download.md +4 -3
  58. package/skills/ae-analysis/references/asset_abnormal_list.md +5 -3
  59. package/skills/ae-analysis/references/asset_authentication_list.md +5 -3
  60. package/skills/ae-analysis/references/asset_search.md +5 -3
  61. package/skills/ae-analysis/references/bi_panel_page_data_export.md +1 -1
  62. package/skills/ae-analysis/references/bi_panel_page_data_run.md +4 -4
  63. package/skills/ae-analysis/references/catalog_export.md +28 -0
  64. package/skills/ae-analysis/references/catalog_list.md +44 -0
  65. package/skills/ae-analysis/references/command_index.md +72 -63
  66. package/skills/ae-analysis/references/dashboard_report_data_run.md +11 -4
  67. package/skills/ae-analysis/references/datatable_version_list.md +5 -3
  68. package/skills/ae-analysis/references/drilldown_entities_run.md +4 -4
  69. package/skills/ae-analysis/references/drilldown_events_run.md +2 -2
  70. package/skills/ae-analysis/references/drilldown_user_events_export.md +1 -1
  71. package/skills/ae-analysis/references/drilldown_user_events_run.md +2 -2
  72. package/skills/ae-analysis/references/entity_detail_run.md +4 -4
  73. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  74. package/skills/ae-analysis/references/event_detail_run.md +4 -4
  75. package/skills/ae-analysis/references/event_export.md +21 -0
  76. package/skills/ae-analysis/references/event_list.md +7 -6
  77. package/skills/ae-analysis/references/exchange_rule_list.md +5 -3
  78. package/skills/ae-analysis/references/history_tag_data_drilldown_export.md +4 -2
  79. package/skills/ae-analysis/references/history_tag_data_drilldown_run.md +2 -2
  80. package/skills/ae-analysis/references/history_tag_data_run.md +2 -2
  81. package/skills/ae-analysis/references/metric_export.md +21 -0
  82. package/skills/ae-analysis/references/metric_list.md +8 -7
  83. package/skills/ae-analysis/references/property_export.md +21 -0
  84. package/skills/ae-analysis/references/property_list.md +9 -8
  85. package/skills/ae-analysis/references/query_context_get.md +20 -0
  86. package/skills/ae-analysis/references/query_create_result_cluster.md +1 -1
  87. package/skills/ae-analysis/references/report_change_log_list.md +1 -1
  88. package/skills/ae-analysis/references/report_create.md +3 -3
  89. package/skills/ae-analysis/references/report_data_run.md +8 -8
  90. package/skills/ae-analysis/references/report_update.md +3 -3
  91. package/skills/ae-analysis/references/report_version_rollback.md +1 -1
  92. package/skills/ae-analysis/references/rule_list.md +6 -4
  93. package/skills/ae-analysis/references/run_inspect.md +8 -5
  94. package/skills/ae-analysis/references/run_wait.md +37 -0
  95. package/skills/ae-analysis/references/user_cluster_export.md +13 -0
  96. package/skills/ae-analysis/references/user_cluster_list.md +6 -2
  97. package/skills/ae-analysis/references/user_cluster_member_export.md +5 -3
  98. package/skills/ae-analysis/references/user_cluster_member_list.md +4 -4
  99. package/skills/ae-analysis/references/user_tag_export.md +13 -0
  100. package/skills/ae-analysis/references/user_tag_list.md +6 -2
  101. package/skills/ae-analysis/references/user_tag_member_export.md +5 -3
  102. package/skills/ae-analysis/references/user_tag_member_list.md +4 -4
  103. package/skills/ae-analysis/references/virtual_property_create.md +2 -2
  104. package/skills/ae-community/SKILL.md +2 -2
  105. package/skills/ae-dataops/SKILL.md +4 -3
  106. package/skills/ae-dataops/references/dataops-flow-create.md +47 -3
  107. package/skills/ae-engage/SKILL.md +57 -7
  108. package/skills/ae-engage/references/activity-data-detail.md +61 -0
  109. package/skills/ae-engage/references/build-task-save-guide.md +37 -1
  110. package/skills/ae-engage/references/cancel-query-run.md +31 -0
  111. package/skills/ae-engage/references/common-metric.md +45 -0
  112. package/skills/ae-engage/references/config-item-analysis-report.md +14 -1
  113. package/skills/ae-engage/references/config-item-strategy-comparison.md +11 -1
  114. package/skills/ae-engage/references/config-item-trigger-report.md +15 -1
  115. package/skills/ae-engage/references/flow-metric-detail-report.md +134 -0
  116. package/skills/ae-engage/references/flow-metric-update.md +77 -0
  117. package/skills/ae-engage/references/flow-metric-user.md +118 -0
  118. package/skills/ae-engage/references/flow-node-metric-user.md +122 -0
  119. package/skills/ae-engage/references/flow-node-user.md +122 -0
  120. package/skills/ae-engage/references/preset-event.md +2 -0
  121. package/skills/ae-engage/references/push-record-query.md +32 -1
  122. package/skills/ae-engage/references/save-flow.md +14 -0
  123. package/skills/ae-engage/references/save-task.md +44 -0
  124. package/skills/ae-engage/references/scene-strategy-audience.md +12 -7
  125. package/skills/ae-engage/references/task-data-detail.md +9 -2
  126. package/skills/ae-engage/references/task-metric-detail.md +9 -2
  127. package/skills/ae-engage/references/task-submit-approval.md +3 -0
  128. package/skills/ae-experiment/SKILL.md +17 -4
  129. package/skills/ae-experiment/references/delete_metric.md +2 -0
  130. package/skills/ae-experiment/references/query_experiment_metric_trend.md +5 -5
  131. package/skills/ae-experiment/references/query_experiment_report_summary.md +4 -3
  132. package/skills/ae-experiment/references/query_experiment_sample_size_report.md +6 -5
  133. package/skills/ae-experiment/references/save_build_guide.md +39 -0
  134. package/skills/ae-experiment/references/save_experiment.md +11 -0
  135. package/skills/ae-experiment/references/save_metric.md +5 -1
  136. package/skills/ae-experiment/references/save_validate.md +33 -0
  137. package/skills/ae-experiment-design/SKILL.md +1 -1
  138. package/skills/ae-experiment-design/references/platform-operations.md +10 -4
  139. package/skills/ae-experiment-insight/references/platform-operations.md +10 -4
  140. package/skills/ae-metadata/SKILL.md +2 -1
  141. package/skills/ae-metadata/references/metadata_data_table_download.md +10 -2
  142. package/skills/ae-metadata/references/metadata_data_table_list.md +5 -2
  143. package/skills/ae-system/SKILL.md +66 -3
  144. package/dist/chunk-DT6Y3TD7.js +0 -232
  145. package/dist/chunk-MVDZ7DBQ.js +0 -231
  146. package/dist/chunk-NBPKWKRA.js +0 -51
  147. package/dist/client-DAIPF7XN.js +0 -23
  148. package/dist/raw-52B4UKO4.js +0 -71
  149. package/dist/te-meta-53BVXPFI.js +0 -95
  150. package/dist/te-meta-TOCBPBXI.js +0 -95
@@ -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, operation activities, and query lifecycle. Trigger words: config center, scene config, push channel, config channel, operation strategy, operation task, operation activity, query lifecycle, template, config item, Engage, Hermes, engage-scene, engage-setting, engage-flow, engage-task, engage-activity, engage-query."
5
5
  ---
6
6
 
7
7
  # ae-engage
@@ -33,7 +33,7 @@ Safety constraints:
33
33
 
34
34
  ## Overview
35
35
 
36
- The `ae-engage` package provides Hermes Engage capabilities across config items, flows, channel settings, and task data. Use capability-gateway commands through `ae-cli engage-flow|engage-task|engage-setting|engage-scene <resource> <action>`; low-frequency reports use the L3 references below.
36
+ The `ae-engage` package provides Hermes Engage capabilities across config items, flows, channel settings, task data, and query lifecycle. Use capability-gateway commands through `ae-cli engage-flow|engage-task|engage-setting|engage-scene|engage-query <resource> <action>`; low-frequency reports use the L3 references below.
37
37
 
38
38
  Typical use cases include:
39
39
 
@@ -56,6 +56,7 @@ When the user mentions a product term below (including common Chinese UI labels)
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
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
@@ -173,6 +175,10 @@ ae-cli engage-task task get --project-id 1 --task-id task_123
173
175
  # Submit a saved draft task for approval
174
176
  ae-cli engage-task task submit-approval --project-id 1 --task-id task_123
175
177
 
178
+ # Query task reports through the Hermes inline task-data capabilities
179
+ ae-cli engage-task effect query --project-id 1 --task-id task_123 --start-time 2026-04-01 --end-time 2026-04-07 --metric-id-list '["metric_1"]'
180
+ ae-cli engage-task data-detail query --project-id 1 --task-id task_123 --detail-type time --start-time 2026-04-01 --end-time 2026-04-07
181
+
176
182
  ```
177
183
 
178
184
  For L3 task reports, read `references/task-data-overview.md`, `references/task-data-detail.md`,
@@ -217,8 +223,29 @@ ae-cli engage-task task submit-approval --project-id 1 --task-id task_id_123
217
223
 
218
224
  # Query the node schema
219
225
  ae-cli engage-flow node-config schema --project-id 1 --node-type message_push
226
+ ae-cli engage-flow metric update --project-id 1 --flow-id flow_id_123 --metric-map '<metric_map_json>'
227
+
228
+ # Query or export newly exposed flow report surfaces
229
+ ae-cli engage-flow report metric-detail run --project-id 1 --flow-id flow_id_123 --node-uuid node_uuid_123 --start-time 2026-04-01 --end-time 2026-04-07 --limit 100 --timeout-seconds 120
230
+ ae-cli engage-flow report metric-detail export --project-id 1 --flow-id flow_id_123 --node-uuid node_uuid_123 --start-time 2026-04-01 --end-time 2026-04-07 --artifact-format csv --timeout-seconds 21600
231
+ ae-cli engage-flow metric-user run --project-id 1 --flow-id flow_id_123 --indicator-name entry --start-time 2026-04-01 --end-time 2026-04-07 --limit 100 --timeout-seconds 120
232
+ ae-cli engage-flow metric-user export --project-id 1 --flow-id flow_id_123 --indicator-name entry --start-time 2026-04-01 --end-time 2026-04-07 --artifact-format csv --timeout-seconds 21600
233
+ ae-cli engage-flow node-user run --project-id 1 --flow-id flow_id_123 --node-uuid node_uuid_123 --indicator-name entry --start-time 2026-04-01 --end-time 2026-04-07 --limit 100 --timeout-seconds 120
234
+ ae-cli engage-flow node-user export --project-id 1 --flow-id flow_id_123 --node-uuid node_uuid_123 --indicator-name entry --start-time 2026-04-01 --end-time 2026-04-07 --artifact-format csv --timeout-seconds 21600
235
+ ae-cli engage-flow node-metric-user run --project-id 1 --flow-id flow_id_123 --node-uuid node_uuid_123 --indicator-name metric_setting_id_123 --start-time 2026-04-01 --end-time 2026-04-07 --limit 100 --timeout-seconds 120
236
+ ae-cli engage-flow node-metric-user export --project-id 1 --flow-id flow_id_123 --node-uuid node_uuid_123 --indicator-name metric_setting_id_123 --start-time 2026-04-01 --end-time 2026-04-07 --artifact-format csv --timeout-seconds 21600
220
237
  ```
221
238
 
239
+ User-detail `run` commands are for bounded inline rows and accept `--request-id`, `--limit`, and `--timeout-seconds`; metric-detail `run` returns the report object. Export commands accept `--request-id`, `--artifact-format csv|jsonl` (default `jsonl`), and `--timeout-seconds`, then return `run_id` and `artifact_id`; poll with `ae-cli engage-query run inspect --run-id RUN_ID`, then download with `ae-cli engage-query artifact download --run-id RUN_ID --artifact-id ARTIFACT_ID --output ./artifact.jsonl.gz`. Cancel running async work with `ae-cli engage-query query cancel --run-id RUN_ID`.
240
+
241
+ For flow report/user-detail commands, read the matching reference before composing non-trivial input:
242
+
243
+ - Flow canvas custom metric configuration: `references/flow-metric-update.md`
244
+ - Metric-detail report object or flattened report export: `references/flow-metric-detail-report.md`
245
+ - Users behind a process-level metric segment: `references/flow-metric-user.md`
246
+ - Users behind a node-level data segment: `references/flow-node-user.md`
247
+ - Users behind a node-level metric segment: `references/flow-node-metric-user.md`
248
+
222
249
  ### 5. scene (scene management / config center)
223
250
 
224
251
  New capability-gateway command group `engage-scene` covers the config center: config items, params, groups, preset/related metrics, config channels, strategies, and templates. Complex DTOs are passed with `--payload` (native camelCase JSON).
@@ -375,6 +402,9 @@ ae-cli engage-setting channel list --project-id <projectId>
375
402
  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`.
376
403
  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`.
377
404
  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.
405
+ Never send `targetClusterQp`. Each audience `event` and `behavior_sequence` must include
406
+ its own `time_range`; Flow entry dates do not replace that range. Use only properties that
407
+ resolve through the Flow editor's current project, timezone, and user-entity metadata scope.
378
408
  8. You must self-check before previewing/committing:
379
409
  - There is exactly one entry node
380
410
  - There is at least one `exit_flow`
@@ -437,6 +467,7 @@ More detailed single-command guidance is available in the business-oriented `ref
437
467
  - `references/add-approver.md` / `references/approver-list.md` (`engage-setting.approval-approver.{add,list}`)
438
468
  - `references/whitelist-list.md` / `references/whitelist.md` (`engage-setting.whitelist.{list,add,update,delete,verify}`)
439
469
  - `references/cancel-query-by-request-id.md` (`engage-setting.query.cancel`, L3)
470
+ - `references/cancel-query-run.md` (`engage-query.query.cancel`)
440
471
  - `references/push-language.md` (`engage-setting.push-language.{get,set}`)
441
472
  - `references/client-param.md` (`engage-setting.client-param.{create,update,delete,list}`)
442
473
  - `references/config-table.md` (`engage-setting.config-table.{upload,save,list,query-data,update-data,delete}`)
@@ -456,6 +487,7 @@ More detailed single-command guidance is available in the business-oriented `ref
456
487
  - `references/config-item-analysis-report.md` (`engage-scene.report.config-item-analysis`, L3)
457
488
  - `references/config-item-strategy-comparison.md` (`engage-scene.report.strategy-comparison`, L3)
458
489
  - `references/activity-activity.md` (`engage-activity.activity.{create,update,delete,list,get,pause,end,stats,info-list}`)
490
+ - `references/activity-data-detail.md` (`engage-activity.activity-data.detail`, L3)
459
491
  - `references/activity-approval.md` (`engage-activity.approval.{submit,approve,reject,cancel}`)
460
492
  - `references/activity-topic.md` (`engage-activity.topic.{create,update,remove-task,delete,get,copy}`)
461
493
  - `references/activity-activity-type.md` (`engage-activity.activity-type.{list,batch-add,update,batch-delete}`)
@@ -474,6 +506,9 @@ More detailed single-command guidance is available in the business-oriented `ref
474
506
  - `references/group-list.md` (`engage-task.group.list`)
475
507
  - `references/task-delete.md` (`engage-task.task.delete`)
476
508
  - `references/task-submit-approval.md` (`engage-task.task.submit-approval`)
509
+ - `references/task-data-detail.md` (`engage-task data-detail query`; capability `engage-task.task-data.detail`)
510
+ - `references/task-metric-detail.md` (`engage-task effect query`; capability `engage-task.task-data.metric-detail`)
511
+ - `references/flow-metric-update.md` (`engage-flow metric update`; capability `engage-flow.metric.update`)
477
512
 
478
513
  This split documentation structure is easier to extend later, because commands with more complex object inputs can stay centralized in the `references/` root directory.
479
514
 
@@ -485,7 +520,11 @@ This split documentation structure is easier to extend later, because commands w
485
520
 
486
521
  ### task
487
522
 
488
- `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}`
523
+ `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` / `effect query` / `data-detail query` (via `engage-task`), plus L3 capabilities `engage-task.task-data.{overview,detail,metric-detail,experiment-report}`
524
+
525
+ ### query
526
+
527
+ `run inspect` / `artifact download` / `query cancel` (via `engage-query`), capability ID `engage-query.query.cancel`
489
528
 
490
529
  ### config
491
530
 
@@ -505,7 +544,7 @@ Legacy config MCP commands are migrated into the `scene` L2 group and the three
505
544
 
506
545
  ### flow
507
546
 
508
- `operation-log query` / `version list` / `flow update-remark` / `flow save` / `node-config schema` / `flow get` / `flow list` / `flow manage` / `node-config validate` / `flow delete` / `flow modify-base-info` (via `engage-flow`), plus L3 capabilities `engage-flow.report.{node-overview,process,node-detail,ab-split-node}`
547
+ `operation-log query` / `version list` / `flow update-remark` / `flow save` / `node-config schema` / `flow get` / `flow list` / `flow manage` / `node-config validate` / `flow delete` / `flow modify-base-info` / `metric update` / `report metric-detail run` / `report metric-detail export` / `metric-user run` / `metric-user export` / `node-user run` / `node-user export` / `node-metric-user run` / `node-metric-user export` (via `engage-flow`), plus L3 capabilities `engage-flow.report.{node-overview,process,node-detail,ab-split-node}`
509
548
 
510
549
  ## Date Format
511
550
 
@@ -526,18 +565,27 @@ For task draft creation or update, use this workflow:
526
565
  1. `ae-cli engage-setting channel list --project-id <projectId>`
527
566
  2. `ae-cli engage-task task build-save-guide --project-id <projectId> --req '{...}'`
528
567
  3. For a custom audience, pass the Analysis semantic contract as
529
- `targetConfig.definitionRequest`. Use semantic `triggerConfig.triggerDefinition` and
530
- `completionIndicatorDef.completionIndicators[].eventDefinition`. Build shapes from
568
+ `targetConfig.definitionRequest`. For an event-triggered task, use semantic
569
+ `triggerConfig.triggerDefinition` and
570
+ always include `periodTimeSymbol` (`TS01`, `TS02`, `TS03`, or `TS04`) on its primary A rule.
571
+ Use semantic `completionIndicatorDef.completionIndicators[].eventDefinition`. Build shapes from
531
572
  `ae-analysis` user-cluster / audience models. For existing-cluster audiences
532
573
  (`targetClusterType=2`), use `analysis user-cluster get`. For event-triggered tasks, pass
533
574
  `channelType`, `triggerType`, and `eventTriggerType` to `build-save-guide`, then use its
534
575
  type-specific semantic event shape. Accumulated events are aggregate conditions, continuous
535
576
  events use count/eq with a value of at least 2, ordered events use sequence-step envelopes,
536
- and every-completion events use count/eq/1. Never construct persisted QP fields.
577
+ and every-completion events use count/eq/1. Completion target and experiment main-goal event
578
+ filters must not use properties whose metadata `select_type` is `datetime`. Never construct
579
+ persisted QP fields.
537
580
  4. `ae-cli engage-task task save --project-id <projectId> --req '{...}'`
538
581
  5. `ae-cli engage-task task submit-approval --project-id <projectId> --task-id <taskId>`
539
582
 
540
583
  `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`.
584
+ When `enableExp=true`, capability `engage-task.task.build-save-guide` enriches the handoff so
585
+ `groupContentList` association fields
586
+ (`expGroupName`/`expGroupType`/`percentageInExperiment`/`order`) stay aligned with
587
+ `expConfig.expGroupList`; only replace `contentList[].content`. Capability `engage-task.task.save`
588
+ rejects misaligned experiment content with `TASK_EXPERIMENT_GROUP_CONTENT_INVALID`.
541
589
 
542
590
  `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).
543
591
 
@@ -551,3 +599,5 @@ Audience creation is not a fixed preflight step. For custom task audiences, use
551
599
  `definition_request`. `clientConfig.clientQp` is server-authored and must be omitted from
552
600
  Capability requests; partial updates preserve existing server state. Do not assemble raw QP
553
601
  manually.
602
+ For a `behavior_sequence`, omit second-step `relative_to_first` or set it to `false`; reserve
603
+ `true` for step 3 or later when the window is measured from step 1.
@@ -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.
@@ -23,7 +23,18 @@ Use this sequence when creating or updating a task draft:
23
23
  Build event primitives from `ae-analysis` user-cluster / audience models. Hermes wraps those
24
24
  primitives in the task-specific envelope selected by `channelType`, `triggerType`, and
25
25
  `eventTriggerType`, then validates the final persisted QP before save. Never construct persisted
26
- execution QP.
26
+ execution QP. Follow the documented closed semantic shapes: unknown fields are rejected, and a
27
+ property `field` may be a technical-name string or a `{name,type}` reference.
28
+ Every custom-audience `event` and `behavior_sequence` requires its own `time_range`. For
29
+ `recent` and `previous`, use a positive integer `value` and only `unit=day`; `custom` requires
30
+ both `start_time` and `end_time`.
31
+
32
+ Custom audiences support `behavior_sequence` nodes, including sequence/step windows, step
33
+ filters, `completed`, and `relative_to_first`. A task `get` may return top-level `compound`
34
+ nodes when the stored member-group, event-group, and outer relations differ. Preserve those
35
+ compounds when reusing `definition_request`; flattening them changes audience semantics.
36
+ For the second sequence step, omit `relative_to_first` or set it to `false`; use `true` only
37
+ from the third step onward when its window must be measured from step 1.
27
38
 
28
39
  For existing-cluster audiences (`targetClusterType=2`), you may copy server-authored definitions via:
29
40
 
@@ -213,6 +224,12 @@ Use it to understand what must appear in:
213
224
  - `controlConfig`
214
225
  - `expConfig` when experiment mode is enabled
215
226
 
227
+ When experiment mode is enabled (`context.enableExp=true` or draft `expConfig.enableExp=true`):
228
+
229
+ - capability `engage-task.task.build-save-guide` enriches `handoff.reqTemplate.channelConfig.groupContentList`
230
+ so each entry carries `expGroupName`, `expGroupType`, `percentageInExperiment`, `order`, and `contentList`
231
+ - do not drop those association fields when filling content; they must stay aligned with `expConfig.expGroupList`
232
+
216
233
  ### 4.8 `fieldRules`
217
234
 
218
235
  This is the most important construction section.
@@ -263,9 +280,26 @@ The guide treats the A rule as a discriminated envelope:
263
280
  - `eventTriggerType=2`: at least two ordered steps with `eventDefinition` and `hasDone`
264
281
  - `eventTriggerType=3`: client-side count/eq/1 events with `eventTriggerCaliberType`
265
282
 
283
+ Every event-triggered task A rule must include `periodTimeSymbol`. Use `TS01` for daily,
284
+ `TS02` for the complete configured period, `TS03` for weekly, or `TS04` for monthly.
285
+ Do not omit this field even when `periodStart` and `periodEnd` are present.
286
+
266
287
  Do not copy the accumulated example and only change `eventTriggerType`. Hermes rejects a final QP
267
288
  whose event structure does not match its envelope.
268
289
 
290
+ #### `fieldRules.blocks.controlConfig.completionIndicatorDef.filterPropertySelectTypes`
291
+
292
+ Treat this as the source of truth for completion target and experiment main-goal event-filter
293
+ property types:
294
+
295
+ - `allowed` lists the supported metadata `select_type` values.
296
+ - `excluded` lists values that must not be used.
297
+ - `datetime` is excluded because the task completion-indicator editor cannot display it.
298
+
299
+ Apply this rule only to
300
+ `completionIndicatorDef.completionIndicators[].eventDefinition.filters`. Trigger-event filters have
301
+ their own scenario rules and are not subject to this completion-filter restriction.
302
+
269
303
  ### 4.9 `handoff`
270
304
 
271
305
  This is the final section before `save_task`.
@@ -275,6 +309,8 @@ Important fields:
275
309
  - `reqTemplate`
276
310
  - a scenario-aware grouped request template
277
311
  - use it as a starting point, not as unquestioned final truth
312
+ - for experiment tasks, keep `groupContentList` association fields from the template;
313
+ only replace `contentList[].content` with real channel content
278
314
  - `readyToSubmit`
279
315
  - `true` means the current scenario or draft has no blocking placeholders
280
316
  - `blockingPlaceholders`
@@ -0,0 +1,31 @@
1
+ # Cancel a running Engage query or export
2
+
3
+ Cancel asynchronous Engage work by the Capability Gateway run ID.
4
+
5
+ Mapped command:
6
+
7
+ ```bash
8
+ ae-cli engage-query query cancel --run-id <run_id>
9
+ ```
10
+
11
+ Mapped capability: `engage-query.query.cancel`
12
+
13
+ ## Input
14
+
15
+ | Field | Type | Required | Description |
16
+ |------|------|------|------|
17
+ | `run_id` | string | Yes | Run ID returned by an asynchronous query or export capability |
18
+ | `reason` | string | No | Optional cancellation reason |
19
+
20
+ ## Safety Constraints
21
+
22
+ This command is a **write operation**. Use only the `run_id` returned by the asynchronous
23
+ query/export lifecycle; a report `request_id` is not accepted.
24
+
25
+ ## Example
26
+
27
+ ```bash
28
+ ae-cli engage-query query cancel \
29
+ --run-id run_123 \
30
+ --reason "No longer needed"
31
+ ```
@@ -3,6 +3,13 @@
3
3
  > Trigger keywords: common metric, shared metric · Capability ids: `engage-setting.common-metric.{list,get,create,update,delete}` · Permission: `opsEditSetting`.
4
4
 
5
5
  Common metric capabilities expose semantic event/formula definitions. Do not submit or reuse `metric_qp`, `Axxx`, display metadata, formula dependency internals, or property metadata.
6
+ Metric definitions and formula dependencies reject unknown fields. Event filter `field` accepts
7
+ either a technical-name string or `{"name":"...","type":"event_property"}`.
8
+
9
+ When metadata reports an event property as `array_row`, express it as an `object_group` filter
10
+ with `any_satisfy`, `none_satisfy`, or `all_satisfy`; its nested `conditions.items` may reference
11
+ only child properties of that parent. Flat filters on the `array_row` parent are rejected before
12
+ the metric is saved.
6
13
 
7
14
  ## Commands
8
15
 
@@ -39,8 +46,41 @@ ae-cli engage-setting common-metric delete --project-id <project_id> --metric-na
39
46
  }
40
47
  ```
41
48
 
49
+ Object-group filter example:
50
+
51
+ ```json
52
+ {
53
+ "type": "object_group",
54
+ "field": "equipment_list",
55
+ "operator": "any_satisfy",
56
+ "conditions": {
57
+ "relation": "and",
58
+ "items": [
59
+ {
60
+ "field": "equipment_list.item_level",
61
+ "operator": "gte",
62
+ "values": [10]
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ ```
68
+
42
69
  Supported aggregations include `total_count`, `user_count`, `per_user_count`, `sum`, `avg`, `avg_per_user`, `max`, `min`, `distinct_count`, `median`, `percentile`, `variance`, and `stddev`.
43
70
 
71
+ Property aggregations require `property`. `percentile` additionally requires a numeric
72
+ `percentile` greater than `0` and at most `100`:
73
+
74
+ ```json
75
+ {
76
+ "type": "event",
77
+ "event": "purchase",
78
+ "aggregation": "percentile",
79
+ "property": "amount",
80
+ "percentile": 90
81
+ }
82
+ ```
83
+
44
84
  ## Formula metric
45
85
 
46
86
  ```json
@@ -65,6 +105,11 @@ Supported aggregations include `total_count`, `user_count`, `per_user_count`, `s
65
105
  }
66
106
  ```
67
107
 
108
+ Every dependency requires a non-empty, unique `key`, and every key must be used in
109
+ `expression`. Write bare keys only: use `purchases/refunds`, never `purchases.A100/refunds.A100`.
110
+ Aggregation codes are derived from each dependency. Formula dependencies follow the same
111
+ property and percentile requirements as event metrics.
112
+
68
113
  Resolve every event and property through `ae-cli analysis-meta event list` and the corresponding property metadata before writing. `get` and `list` return `metric_definition`, `metric_definition_status`, and an optional unavailable reason. Raw metric QP is hidden.
69
114
 
70
115
  `metric_type=1` remains required for setting-page common metrics. Metric windows remain separate from the semantic definition, and their unit must be `minute` / `hour` / `day`.
@@ -8,7 +8,20 @@ Required input: `project_id`, `config_id`, `start_time`, `end_time`. Optional in
8
8
  `template_id_list`, `strategy_id_list`, `show_time_zone`. `template_id_list` and `strategy_id_list`
9
9
  are mutually exclusive.
10
10
 
11
+ ## Input contract
12
+
13
+ | Field | JSON type | Required | Rules |
14
+ | --- | --- | --- | --- |
15
+ | `project_id` | integer | Yes | Positive project ID. |
16
+ | `config_id` | string | Yes | Config item ID. |
17
+ | `start_time` | string | Yes | Date in `yyyy-MM-dd` format. |
18
+ | `end_time` | string | Yes | Date in `yyyy-MM-dd` format; must not be earlier than `start_time`. |
19
+ | `request_id` | string | No | Request identifier for continuation or cancellation. |
20
+ | `template_id_list` | array of strings | No | Cannot be used together with `strategy_id_list`. |
21
+ | `strategy_id_list` | array of strings | No | Cannot be used together with `template_id_list`. |
22
+ | `show_time_zone` | number | No | Hour offset from `-12.0` through `14.0`; use `8`, not the string `"8"`. |
23
+
11
24
  ```bash
12
25
  ae-cli capability run engage-scene.report.config-item-analysis \
13
- --input '{"project_id":1,"config_id":"cfg_123","start_time":"2026-04-01","end_time":"2026-04-07"}'
26
+ --input '{"project_id":1,"config_id":"cfg_123","start_time":"2026-04-01","end_time":"2026-04-07","show_time_zone":8}'
14
27
  ```
@@ -7,7 +7,17 @@ Mapped command: `ae-cli capability run engage-scene.report.strategy-comparison -
7
7
  Required input: `project_id`, `config_id`, `strategy_id_list` with at least two IDs. Optional input:
8
8
  `request_id`, `show_time_zone`.
9
9
 
10
+ ## Input contract
11
+
12
+ | Field | JSON type | Required | Rules |
13
+ | --- | --- | --- | --- |
14
+ | `project_id` | integer | Yes | Positive project ID. |
15
+ | `config_id` | string | Yes | Config item ID. |
16
+ | `strategy_id_list` | array of strings | Yes | Must contain at least two strategy IDs. |
17
+ | `request_id` | string | No | Request identifier for continuation or cancellation. |
18
+ | `show_time_zone` | number | No | Hour offset from `-12.0` through `14.0`; use `8`, not the string `"8"`. |
19
+
10
20
  ```bash
11
21
  ae-cli capability run engage-scene.report.strategy-comparison \
12
- --input '{"project_id":1,"config_id":"cfg_123","strategy_id_list":["strategy_a","strategy_b"]}'
22
+ --input '{"project_id":1,"config_id":"cfg_123","strategy_id_list":["strategy_a","strategy_b"],"show_time_zone":8}'
13
23
  ```
@@ -8,7 +8,21 @@ Required input: `project_id`, `config_id`, `start_time`, `end_time`. Optional in
8
8
  `template_id_list`, `strategy_id_list`, `show_time_zone`, `analyze_report_internal_query`.
9
9
  `template_id_list` and `strategy_id_list` are mutually exclusive.
10
10
 
11
+ ## Input contract
12
+
13
+ | Field | JSON type | Required | Rules |
14
+ | --- | --- | --- | --- |
15
+ | `project_id` | integer | Yes | Positive project ID. |
16
+ | `config_id` | string | Yes | Config item ID. |
17
+ | `start_time` | string | Yes | Date in `yyyy-MM-dd` format. |
18
+ | `end_time` | string | Yes | Date in `yyyy-MM-dd` format; must not be earlier than `start_time`. |
19
+ | `request_id` | string | No | Request identifier for continuation or cancellation. |
20
+ | `template_id_list` | array of strings | No | Cannot be used together with `strategy_id_list`. |
21
+ | `strategy_id_list` | array of strings | No | Cannot be used together with `template_id_list`. |
22
+ | `show_time_zone` | number | No | Hour offset from `-12.0` through `14.0`; use `8`, not the string `"8"`. |
23
+ | `analyze_report_internal_query` | boolean | No | Use `true` or `false`, not a quoted string. |
24
+
11
25
  ```bash
12
26
  ae-cli capability run engage-scene.report.config-item-trigger \
13
- --input '{"project_id":1,"config_id":"cfg_123","start_time":"2026-04-01","end_time":"2026-04-07"}'
27
+ --input '{"project_id":1,"config_id":"cfg_123","start_time":"2026-04-01","end_time":"2026-04-07","show_time_zone":8}'
14
28
  ```
@@ -0,0 +1,134 @@
1
+ # Flow metric-detail report
2
+
3
+ Use this reference when the user asks for a flow node metric-detail report, or wants to export the detailed metric table behind a node on the flow canvas.
4
+
5
+ Mapped CLI commands:
6
+
7
+ - `ae-cli engage-flow report metric-detail run`
8
+ - `ae-cli engage-flow report metric-detail export`
9
+
10
+ Mapped capabilities:
11
+
12
+ - `engage-flow.report.metric-detail.run`
13
+ - `engage-flow.report.metric-detail.export`
14
+
15
+ ## Choose the command
16
+
17
+ - Use `run` for quick inline inspection. It returns the original Hermes report object under `report`.
18
+ - Use `export` when the user needs a downloadable, flattened artifact.
19
+ - Use `--report-mode node` or omit it for normal nodes.
20
+ - Use `--report-mode ab` for AB split node metric details.
21
+
22
+ Do not use the older generic capability form unless the structured command is unavailable.
23
+
24
+ ## Required input
25
+
26
+ - `--project-id`
27
+ - one of `--flow-id` or `--flow-uuid`
28
+ - `--node-uuid`
29
+ - `--start-time yyyy-MM-dd`
30
+ - `--end-time yyyy-MM-dd`
31
+
32
+ ## Optional input
33
+
34
+ - `--report-mode node|ab` (default: `node`)
35
+ - `--branch-id`
36
+ - `--indicator-name` for normal node metric selection
37
+ - `--indicators-uuid` for AB metric selection
38
+ - `--data-dim-type uv|pv`
39
+ - `--push-language-code`
40
+ - `--show-time-zone`
41
+ - `--request-id`
42
+ - `--timeout-seconds`
43
+ - `run` only: `--limit` is accepted for command consistency, but metric-detail reports are not row-limited by Hermes
44
+ - `export` only: `--artifact-format csv|jsonl` (default: `jsonl`)
45
+
46
+ ## Parameter guidance
47
+
48
+ - Prefer `flow_uuid` when the user is talking about a specific flow version; prefer `flow_id` when they mean the current logical flow.
49
+ - `node_uuid` must be the canvas node UUID, not the node type.
50
+ - Dates are inclusive report dates and must be in `yyyy-MM-dd`.
51
+ - For AB mode, pass the AB node UUID and usually `--indicators-uuid`; `--branch-id` is optional and only use it when the selected report cell is branch-specific.
52
+ - If both `flow-id` and `flow-uuid` are supplied, Hermes checks they match.
53
+
54
+ ## Examples
55
+
56
+ Inline normal node metric detail:
57
+
58
+ ```bash
59
+ ae-cli engage-flow report metric-detail run \
60
+ --project-id 1 \
61
+ --flow-id flow_id_123 \
62
+ --node-uuid node_uuid_123 \
63
+ --start-time 2026-04-01 \
64
+ --end-time 2026-04-07 \
65
+ --timeout-seconds 120
66
+ ```
67
+
68
+ Export normal node metric detail as CSV:
69
+
70
+ ```bash
71
+ ae-cli engage-flow report metric-detail export \
72
+ --project-id 1 \
73
+ --flow-id flow_id_123 \
74
+ --node-uuid node_uuid_123 \
75
+ --start-time 2026-04-01 \
76
+ --end-time 2026-04-07 \
77
+ --artifact-format csv \
78
+ --timeout-seconds 21600
79
+ ```
80
+
81
+ Inline AB node metric detail:
82
+
83
+ ```bash
84
+ ae-cli engage-flow report metric-detail run \
85
+ --project-id 1 \
86
+ --flow-id flow_id_123 \
87
+ --node-uuid ab_node_uuid_123 \
88
+ --report-mode ab \
89
+ --indicators-uuid indicator_uuid_123 \
90
+ --start-time 2026-04-01 \
91
+ --end-time 2026-04-07
92
+ ```
93
+
94
+ ## Export lifecycle
95
+
96
+ `export` returns `run_id` and `artifact_id`. Poll and download with:
97
+
98
+ ```bash
99
+ ae-cli engage-query run inspect --run-id <run_id>
100
+ ae-cli engage-query artifact download \
101
+ --run-id <run_id> \
102
+ --artifact-id <artifact_id> \
103
+ --output ./flow-metric-detail.csv.gz
104
+ ```
105
+
106
+ Downloaded artifacts are gzip-compressed; keep the `.gz` suffix. Cancel running async work with:
107
+
108
+ ```bash
109
+ ae-cli engage-query query cancel --run-id <run_id>
110
+ ```
111
+
112
+ ## Output rows
113
+
114
+ Normal node export rows:
115
+
116
+ - `time`
117
+ - `indicator`
118
+ - `value_index`
119
+ - `value`
120
+
121
+ AB node export rows:
122
+
123
+ - `time`
124
+ - `branch_id`
125
+ - `branch_name`
126
+ - `indicator`
127
+ - `value`
128
+ - `total`
129
+
130
+ ## Common mistakes
131
+
132
+ - Do not pass `report-mode ab` for a normal node; Hermes will call the AB report backend.
133
+ - Do not use `indicator_name` and `indicators_uuid` interchangeably: normal node uses `indicator_name`, AB mode usually uses `indicators_uuid`.
134
+ - Do not save a gzip artifact as `.csv` or `.jsonl`; use `.csv.gz` or `.jsonl.gz`.