@thinkingai/ae-cli 6.0.18 → 6.0.22

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 (110) hide show
  1. package/README.md +8 -10
  2. package/README.zh.md +9 -11
  3. package/dist/{auth-DYC2BGLM.js → auth-I2G7OAU2.js} +2 -4
  4. package/dist/{auth-GHBMJ5ZR.js → auth-RDN6D5HU.js} +32 -104
  5. package/dist/{chunk-5OC7CYCG.js → chunk-2W7HULUD.js} +14 -14
  6. package/dist/chunk-4EUZRJPO.js +163 -0
  7. package/dist/{chunk-DMMEPCST.js → chunk-5FBLRSMU.js} +25 -115
  8. package/dist/{chunk-BJX3GXWC.js → chunk-E34XH4GW.js} +2 -2
  9. package/dist/chunk-FPE5LGVU.js +105 -0
  10. package/dist/{chunk-I5CRVM2S.js → chunk-H52CSLJW.js} +44 -17
  11. package/dist/{chunk-RSHMZ3LG.js → chunk-U6QPKCN3.js} +6 -20
  12. package/dist/{chunk-6W4QOZAL.js → chunk-WPXHCP4A.js} +23 -13
  13. package/dist/{chunk-PN3OS34E.js → chunk-XE2PI5DS.js} +1 -1
  14. package/dist/{chunk-2DUEAXV3.js → chunk-YACCPUNQ.js} +1 -1
  15. package/dist/cli-token-6AGEDJF4.js +14 -0
  16. package/dist/{client-2UJ63MVQ.js → client-VTJMUZ4O.js} +3 -3
  17. package/dist/{config-NCUGK6NS.js → config-2SDTLGOC.js} +3 -3
  18. package/dist/index.js +314 -197
  19. package/dist/metadata-JZ2OTWBK.js +420 -0
  20. package/dist/{model-SJSOZTRS.js → model-ZYMRN4VS.js} +2 -2
  21. package/dist/{raw-7NVWSVJP.js → raw-NGYHAL3F.js} +4 -4
  22. package/dist/{sync-GRVO4K3U.js → sync-JVLX6TGW.js} +3 -3
  23. package/dist/{te-agent-KZRIEN4N.js → te-agent-QPZTLHPH.js} +545 -21
  24. package/dist/{te-analysis-VAR4KUOK.js → te-analysis-WWX3Z6RP.js} +352 -52
  25. package/dist/te-audience-UXGHUVBB.js +599 -0
  26. package/dist/{te-common-WNCZB7R7.js → te-common-7XXH73MF.js} +5 -4
  27. package/dist/{te-community-JEEFXPB3.js → te-community-QKE67HR2.js} +5 -4
  28. package/dist/te-dataops-6W7NNYST.js +1841 -0
  29. package/dist/{te-engage-4XHCTS6I.js → te-engage-NCFAQFX3.js} +5 -4
  30. package/dist/{te-kb-B62KFP2A.js → te-kb-K5BQYUCM.js} +50 -26
  31. package/dist/{te-meta-EPZGQN56.js → te-meta-LJZBOSMO.js} +48 -24
  32. package/dist/{te-team-YY24VORI.js → te-team-DHK5R7MV.js} +5 -6
  33. package/package.json +3 -2
  34. package/skills/ae-agent/SKILL.md +103 -4
  35. package/skills/ae-analysis/SKILL.md +75 -21
  36. package/skills/ae-analysis/references/build_attribution_analysis_qp.md +62 -0
  37. package/skills/ae-analysis/references/build_cluster_definition.md +62 -0
  38. package/skills/ae-analysis/references/build_distribution_analysis_qp.md +67 -0
  39. package/skills/ae-analysis/references/build_event_analysis_qp.md +2 -0
  40. package/skills/ae-analysis/references/build_funnel_analysis_qp.md +2 -0
  41. package/skills/ae-analysis/references/build_heat_map_analysis_qp.md +54 -0
  42. package/skills/ae-analysis/references/build_interval_analysis_qp.md +60 -0
  43. package/skills/ae-analysis/references/build_path_analysis_qp.md +53 -0
  44. package/skills/ae-analysis/references/build_prop_analysis_qp.md +2 -0
  45. package/skills/ae-analysis/references/build_rank_list_analysis_qp.md +63 -0
  46. package/skills/ae-analysis/references/build_retention_analysis_qp.md +2 -0
  47. package/skills/ae-analysis/references/build_tag_definition.md +65 -0
  48. package/skills/ae-analysis/references/cancel_query.md +2 -3
  49. package/skills/ae-analysis/references/copy_dashboard.md +33 -0
  50. package/skills/ae-analysis/references/create_id_cluster.md +40 -0
  51. package/skills/ae-analysis/references/create_id_tag.md +39 -0
  52. package/skills/ae-analysis/references/delete_alert.md +27 -0
  53. package/skills/ae-analysis/references/delete_cluster.md +27 -0
  54. package/skills/ae-analysis/references/delete_dashboard.md +30 -0
  55. package/skills/ae-analysis/references/delete_metric.md +27 -0
  56. package/skills/ae-analysis/references/delete_report.md +27 -0
  57. package/skills/ae-analysis/references/delete_tag.md +27 -0
  58. package/skills/ae-analysis/references/drilldown_user_events.md +4 -4
  59. package/skills/ae-analysis/references/drilldown_users.md +3 -3
  60. package/skills/ae-analysis/references/freeze_dashboards.md +29 -0
  61. package/skills/ae-analysis/references/get_table_columns.md +11 -12
  62. package/skills/ae-analysis/references/list_cluster_members.md +4 -4
  63. package/skills/ae-analysis/references/list_clusters.md +5 -3
  64. package/skills/ae-analysis/references/list_dashboards.md +3 -3
  65. package/skills/ae-analysis/references/list_entities.md +1 -1
  66. package/skills/ae-analysis/references/list_events.md +7 -4
  67. package/skills/ae-analysis/references/list_metrics.md +5 -3
  68. package/skills/ae-analysis/references/list_properties.md +6 -4
  69. package/skills/ae-analysis/references/list_reports.md +3 -3
  70. package/skills/ae-analysis/references/list_spaces.md +27 -0
  71. package/skills/ae-analysis/references/list_tag_members.md +4 -4
  72. package/skills/ae-analysis/references/list_tags.md +4 -2
  73. package/skills/ae-analysis/references/move_dashboard.md +33 -0
  74. package/skills/ae-analysis/references/query_adhoc.md +2 -2
  75. package/skills/ae-analysis/references/query_bi_panel_data.md +2 -2
  76. package/skills/ae-analysis/references/query_dashboard_report_data.md +4 -4
  77. package/skills/ae-analysis/references/query_entity_details.md +4 -4
  78. package/skills/ae-analysis/references/query_event_details.md +3 -3
  79. package/skills/ae-analysis/references/query_report_data.md +37 -3
  80. package/skills/ae-analysis/references/update_id_cluster.md +36 -0
  81. package/skills/ae-analysis/references/update_id_tag.md +37 -0
  82. package/skills/ae-analysis/references/update_report.md +35 -0
  83. package/skills/ae-analysis-intent/SKILL.md +1 -1
  84. package/skills/ae-dataops/SKILL.md +54 -522
  85. package/skills/ae-dataops/references/dataops-flow-create.md +78 -75
  86. package/skills/ae-dataops/references/dataops-flow-monitor.md +58 -51
  87. package/skills/ae-dataops/references/dataops-integration.md +80 -41
  88. package/skills/ae-dataops/references/dataops-query.md +54 -53
  89. package/skills/ae-dataops/references/dataops-table.md +28 -59
  90. package/skills/ae-generate-tracking-code/SKILL.md +68 -31
  91. package/skills/ae-generate-tracking-code/references/snippet-delivery.md +26 -1
  92. package/skills/ae-generate-tracking-code/references/te-api.md +47 -164
  93. package/skills/ae-generate-tracking-plan/SKILL.md +109 -32
  94. package/skills/ae-generate-tracking-plan/references/te-api.md +57 -27
  95. package/skills/ae-metadata/SKILL.md +90 -0
  96. package/skills/ae-metadata/references/metadata_data_table_csv_delete.md +15 -0
  97. package/skills/ae-metadata/references/metadata_data_table_csv_write.md +29 -0
  98. package/skills/ae-metadata/references/metadata_data_table_download.md +17 -0
  99. package/skills/ae-metadata/references/metadata_data_table_get.md +24 -0
  100. package/skills/ae-metadata/references/metadata_data_table_list.md +27 -0
  101. package/skills/ae-metadata/references/metadata_data_table_property_bindings_update.md +17 -0
  102. package/skills/ae-metadata/references/metadata_data_table_sql_delete.md +15 -0
  103. package/skills/ae-metadata/references/metadata_data_table_sql_write.md +31 -0
  104. package/skills/ae-metadata/references/metadata_event_get.md +52 -0
  105. package/skills/ae-metadata/references/metadata_input_file_upload.md +29 -0
  106. package/skills/ae-metadata/references/metadata_property_dimension_table_bind_existing.md +27 -0
  107. package/skills/ae-metadata/references/metadata_property_dimension_table_create_and_bind_csv.md +30 -0
  108. package/skills/ae-metadata/references/metadata_property_get.md +54 -0
  109. package/dist/te-audience-KMKYI2YJ.js +0 -400
  110. package/dist/te-dataops-GD3XBYCS.js +0 -1830
@@ -0,0 +1,60 @@
1
+ # analysis +build_interval_analysis_qp (Build Interval Analysis QP)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Model Analysis**
6
+
7
+ ## Use Cases
8
+ - Build a validated interval-analysis QP from structured interval intent.
9
+ - Interval analysis measures the time elapsed between an initial event and a return event per user.
10
+ - Use in the mandatory builder flow before `+query_adhoc --model_type interval`.
11
+ - This command builds QP only and does not execute the analysis query.
12
+
13
+ ## JSON Rules
14
+ - CLI flags use snake_case, but JSON object keys use camelCase.
15
+ - `--interval` is a JSON object. Required fields: `initialEvent`, `returnEvent`, `window` (`{value, unit}`).
16
+ - `window.unit`: second / minute / hour / day / week / month.
17
+ - Wrap JSON in single quotes in shell commands.
18
+ - Do not call `list_events` or `list_properties` before this builder for normal ad-hoc analysis.
19
+
20
+ ## Command Syntax
21
+ ```bash
22
+ ae-cli analysis +build_interval_analysis_qp --project_id <project_id> --time_range '<time_range_json>' --interval '<interval_json>'
23
+ ae-cli analysis +build_interval_analysis_qp --project_id <project_id> --time_range '<time_range_json>' --interval '<interval_json>' --relation and --time_particle_size day
24
+ ```
25
+
26
+ ## Parameters
27
+ | Parameter | Required | Description |
28
+ |---|---|---|
29
+ | `--project_id` / `-p` | Yes | Project ID |
30
+ | `--authenticated_only` | No | Resolve only authenticated assets while building the QP. Do not pass this flag to `+query_adhoc`. |
31
+ | `--time_range` | Yes | Time range JSON |
32
+ | `--interval` | Yes | Interval intent JSON |
33
+ | `--relation` | No | Filter relation for top-level filters. Values: and, or. Default: and. |
34
+ | `--time_particle_size` | No | Time granularity. Allowed values: day, week, month. Defaults to day. |
35
+
36
+ ## JSON Shape
37
+ `--interval` object:
38
+ ```json
39
+ {"initialEvent":"login","returnEvent":"purchase","window":{"value":7,"unit":"day"}}
40
+ ```
41
+
42
+ Optional fields in `--interval`:
43
+ - `relationEventPropertyName`: shared relation property for both events
44
+ - `groups`: group-by dimensions array
45
+ - `filters`: global filters array
46
+ - `initialFilters` / `returnFilters`: event-level filters (event properties only)
47
+ - `initialFilterRelation` / `returnFilterRelation`: and / or
48
+
49
+ ## Examples
50
+ ```bash
51
+ ae-cli analysis +build_interval_analysis_qp --project_id 3137 --time_range '{"mode":"previous","unit":"day","value":7}' --interval '{"initialEvent":"login","returnEvent":"purchase","window":{"value":7,"unit":"day"}}'
52
+ ```
53
+
54
+ ## Decision Rules
55
+ - Use `--authenticated_only true` only when the user explicitly wants authenticated assets; do not add this flag to `+query_adhoc`.
56
+ - After successful build (`status=generated`), call `+query_adhoc --model_type interval --qp '<response.qp>'`.
57
+ - If non-generated status, stop and ask user to clarify.
58
+
59
+ ## Recommended Chain
60
+ - `+build_interval_analysis_qp` -> if `status=generated` -> `+query_adhoc --model_type interval --qp '<response.qp>'`
@@ -0,0 +1,53 @@
1
+ # analysis +build_path_analysis_qp (Build Path Analysis QP)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Model Analysis**
6
+
7
+ ## Use Cases
8
+ - Build a validated path-analysis QP from structured path intent.
9
+ - Path analysis visualizes user navigation flows between events within a session.
10
+ - Use in the mandatory builder flow before `+query_adhoc --model_type path`.
11
+ - This command builds QP only and does not execute the analysis query.
12
+
13
+ ## JSON Rules
14
+ - CLI flags use snake_case, but JSON object keys use camelCase.
15
+ - `--path` is a JSON object. Required fields: `sourceEvent`, `eventNames` (array), `sessionInterval`, `sessionUnit`.
16
+ - `sessionUnit`: second / minute / hour.
17
+ - `sourceType`: 0=forward path (after source event, default), 1=backward path (before source event).
18
+ - Wrap JSON in single quotes in shell commands.
19
+
20
+ ## Command Syntax
21
+ ```bash
22
+ ae-cli analysis +build_path_analysis_qp --project_id <project_id> --time_range '<time_range_json>' --path '<path_json>'
23
+ ```
24
+
25
+ ## Parameters
26
+ | Parameter | Required | Description |
27
+ |---|---|---|
28
+ | `--project_id` / `-p` | Yes | Project ID |
29
+ | `--authenticated_only` | No | Resolve only authenticated assets while building the QP. Do not pass this flag to `+query_adhoc`. |
30
+ | `--time_range` | Yes | Time range JSON |
31
+ | `--path` | Yes | Path intent JSON |
32
+
33
+ ## JSON Shape
34
+ `--path` object:
35
+ ```json
36
+ {"sourceEvent":"login","eventNames":["login","view_product","purchase"],"sessionInterval":30,"sessionUnit":"minute"}
37
+ ```
38
+
39
+ Optional fields in `--path`:
40
+ - `sourceType`: 0=forward (default), 1=backward
41
+
42
+ ## Examples
43
+ ```bash
44
+ ae-cli analysis +build_path_analysis_qp --project_id 3137 --time_range '{"mode":"previous","unit":"day","value":7}' --path '{"sourceEvent":"login","eventNames":["login","view_product","purchase"],"sessionInterval":30,"sessionUnit":"minute"}'
45
+ ```
46
+
47
+ ## Decision Rules
48
+ - Use `--authenticated_only true` only when the user explicitly wants authenticated assets; do not add this flag to `+query_adhoc`.
49
+ - After successful build (`status=generated`), call `+query_adhoc --model_type path --qp '<response.qp>'`.
50
+ - If non-generated status, stop and ask user to clarify.
51
+
52
+ ## Recommended Chain
53
+ - `+build_path_analysis_qp` -> if `status=generated` -> `+query_adhoc --model_type path --qp '<response.qp>'`
@@ -32,6 +32,7 @@ ae-cli analysis +build_prop_analysis_qp --project_id <project_id> --prop_analysi
32
32
  | Parameter | Required | Description |
33
33
  |---|---|---|
34
34
  | `--project_id` / `-p` | Yes | Project ID |
35
+ | `--authenticated_only` | No | Resolve only authenticated assets while building the QP. Do not pass this flag to `+query_adhoc`. |
35
36
  | `--prop_analysis` | Yes | User property analysis intent JSON |
36
37
 
37
38
  ## JSON Shape
@@ -110,6 +111,7 @@ ae-cli analysis +build_prop_analysis_qp --project_id 3137 --prop_analysis '{"met
110
111
  ```
111
112
 
112
113
  ## Decision Rules
114
+ - Use `--authenticated_only true` only when the user explicitly wants authenticated assets; do not add this flag to `+query_adhoc`.
113
115
  - After successful build, call `+query_adhoc --model_type prop_analysis --qp '<response.qp>'`.
114
116
  - If build returns non-generated status, stop and ask user to clarify; do not call `+query_adhoc`.
115
117
  - Wrap JSON parameters in single quotes to avoid shell escaping issues.
@@ -0,0 +1,63 @@
1
+ # analysis +build_rank_list_analysis_qp (Build Rank List Analysis QP)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Model Analysis**
6
+
7
+ ## Use Cases
8
+ - Build a validated rank-list-analysis QP from structured rank list intent.
9
+ - Rank list analysis ranks entities (users, items, etc.) by a metric value.
10
+ - Use in the mandatory builder flow before `+query_adhoc --model_type rank_list`.
11
+ - This command builds QP only and does not execute the analysis query.
12
+
13
+ ## JSON Rules
14
+ - CLI flags use snake_case, but JSON object keys use camelCase.
15
+ - `--rank_list` is a JSON object. Required fields: `rankDimension` (with `field`), `rankEvent`, `rankAggregation`.
16
+ - `rankType` values: `rank`=standard (1,2,2,4), `dense_rank`=dense (1,2,2,3), `row_rank`=unique (1,2,3,4). Defaults to `row_rank`.
17
+ - `orderBy`: `DESC`=highest first (default), `ASC`=lowest first.
18
+ - Wrap JSON in single quotes in shell commands.
19
+
20
+ ## Command Syntax
21
+ ```bash
22
+ ae-cli analysis +build_rank_list_analysis_qp --project_id <project_id> --time_range '<time_range_json>' --rank_list '<rank_list_json>'
23
+ ```
24
+
25
+ ## Parameters
26
+ | Parameter | Required | Description |
27
+ |---|---|---|
28
+ | `--project_id` / `-p` | Yes | Project ID |
29
+ | `--authenticated_only` | No | Resolve only authenticated assets while building the QP. Do not pass this flag to `+query_adhoc`. |
30
+ | `--time_range` | Yes | Time range JSON |
31
+ | `--rank_list` | Yes | Rank list intent JSON |
32
+
33
+ ## JSON Shape
34
+ `--rank_list` object:
35
+ ```json
36
+ {
37
+ "rankDimension": {"field": {"name": "#account_id", "type": "user_property"}},
38
+ "rankEvent": "purchase",
39
+ "rankAggregation": "A103",
40
+ "rankProperty": "amount",
41
+ "orderBy": "DESC"
42
+ }
43
+ ```
44
+
45
+ Optional fields in `--rank_list`:
46
+ - `rankProperty`: required when rankAggregation is property-based (A103/A104/A106/A107/A108 etc.)
47
+ - `rankType`: rank / dense_rank / row_rank (default)
48
+ - `orderBy`: DESC (default) / ASC
49
+ - `filters`: global filters array
50
+ - `relation`: filter relation (and / or)
51
+
52
+ ## Examples
53
+ ```bash
54
+ ae-cli analysis +build_rank_list_analysis_qp --project_id 3137 --time_range '{"mode":"previous","unit":"day","value":7}' --rank_list '{"rankDimension":{"field":{"name":"#account_id","type":"user_property"}},"rankEvent":"purchase","rankAggregation":"A101","orderBy":"DESC"}'
55
+ ```
56
+
57
+ ## Decision Rules
58
+ - Use `--authenticated_only true` only when the user explicitly wants authenticated assets; do not add this flag to `+query_adhoc`.
59
+ - After successful build (`status=generated`), call `+query_adhoc --model_type rank_list --qp '<response.qp>'`.
60
+ - If non-generated status, stop and ask user to clarify.
61
+
62
+ ## Recommended Chain
63
+ - `+build_rank_list_analysis_qp` -> if `status=generated` -> `+query_adhoc --model_type rank_list --qp '<response.qp>'`
@@ -33,6 +33,7 @@ ae-cli analysis +build_retention_analysis_qp --project_id <project_id> --time_ra
33
33
  | Parameter | Required | Description |
34
34
  |---|---|---|
35
35
  | `--project_id` / `-p` | Yes | Project ID |
36
+ | `--authenticated_only` | No | Resolve only authenticated assets while building the QP. Do not pass this flag to `+query_adhoc`. |
36
37
  | `--time_range` | Yes | Retention analysis time range JSON |
37
38
  | `--retention` | Yes | Retention intent JSON |
38
39
  | `--relation` | No | Top-level retention filter relation. Supported values: and, or. Default: and |
@@ -129,6 +130,7 @@ ae-cli analysis +build_retention_analysis_qp --project_id 3137 --time_range '{"m
129
130
  ```
130
131
 
131
132
  ## Decision Rules
133
+ - Use `--authenticated_only true` only when the user explicitly wants authenticated assets; do not add this flag to `+query_adhoc`.
132
134
  - After successful build, call `+query_adhoc --model_type retention --qp '<response.qp>'`.
133
135
  - If build returns non-generated status, stop and ask user to clarify; do not call `+query_adhoc`.
134
136
  - Wrap JSON parameters in single quotes to avoid shell escaping issues.
@@ -0,0 +1,65 @@
1
+ # analysis_audience +build_tag_definition (Build Tag Definition)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Tag Management**
6
+
7
+ ## Use Cases
8
+
9
+ - Build a tag definition JSON from structured intent. Call this before `+create_tag` or `+update_tag` to generate the `definition` field.
10
+ - Supported types: `condition` (multi-value), `metric` (event metric), `first_last` (first/last occurrence), `sql`.
11
+ - For condition/metric/first_last types, event and property names are resolved from project metadata — do not guess.
12
+ - On success, pass the returned definition to `+create_tag` or `+update_tag`.
13
+
14
+ ## Required Prerequisites (MUST)
15
+
16
+ - Before calling this command, you must first read and follow these reference docs:
17
+ - [`./get_tag_definition_schema.md`](./get_tag_definition_schema.md)
18
+ - [`./list_events.md`](./list_events.md)
19
+ - [`./list_properties.md`](./list_properties.md)
20
+ - Do not construct `--condition_values` / `--metric` / `--first_last` until the schema has been read and metadata has been verified for the same `project_id`.
21
+
22
+ ## Commands
23
+
24
+ ```bash
25
+ ae-cli analysis_audience +build_tag_definition --project_id <project_id> --type condition --condition_values '[]'
26
+ ae-cli analysis_audience +build_tag_definition --project_id <project_id> --type metric --metric '{}'
27
+ ae-cli analysis_audience +build_tag_definition --project_id <project_id> --type first_last --first_last '{}'
28
+ ae-cli analysis_audience +build_tag_definition --project_id <project_id> --type sql --sql 'SELECT "#user_id", tag_value FROM ...'
29
+ ae-cli analysis_audience +build_tag_definition --dry-run
30
+ ```
31
+
32
+ ## Parameters
33
+
34
+ | Parameter | Required | Description |
35
+ | --------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
36
+ | `--project_id` / `-p` | Yes | Project ID |
37
+ | `--authenticated_only` | No | Resolve only authenticated assets while building the definition. |
38
+ | `--type` | Yes | Tag type. Supported values: `condition`, `metric`, `first_last`, `sql` |
39
+ | `--condition_values` | No | For type=condition: list of tag value definitions JSON array. Each item defines a segment label and its conditions. See `+get_tag_definition_schema` for the structure. |
40
+ | `--metric` | No | For type=metric: metric definition JSON. Fields: `eventName`, `analysis`, `quota` (property name), `recentDay`/`startTime`/`endTime`. |
41
+ | `--first_last` | No | For type=first_last: first/last occurrence definition JSON. Fields: `eventName`, `firstEvent` (true=first, false=last), `calcPropType`, `property`, `recentDay`/`startTime`/`endTime`. |
42
+ | `--sql` | No | For type=sql: SQL query returning two columns: `#user_id` and the tag value. |
43
+
44
+ ## Decision Rules
45
+ - Use `--authenticated_only true` when the definition should only resolve authenticated events/properties/metrics/clusters/tags.
46
+
47
+ - Determine `--type` first, then pass only the corresponding parameter.
48
+ - For type=condition, `--condition_values` is effectively required.
49
+ - For type=metric, `--metric` is effectively required.
50
+ - For type=first_last, `--first_last` is effectively required.
51
+ - For type=sql, only `--sql` is needed; other type-specific parameters are ignored.
52
+ - Event and property names must come from session-verified metadata (`analysis_meta +list_events` / `+list_properties` for the same `project_id`).
53
+ - Do not guess event or property names — always verify against real metadata first.
54
+ - Wrap JSON parameters in single quotes (e.g. `--condition_values '[]'`) to avoid shell escaping issues.
55
+ - Run `--dry-run` first to inspect the request mapping before making the actual call.
56
+
57
+ ## Next Step on Failure
58
+
59
+ - If required parameters are missing, check that `--project_id` and `--type` are provided.
60
+ - If the returned definition is rejected by `+create_tag` or `+update_tag`, re-read `+get_tag_definition_schema` with `--response_mode examples` and verify metadata names again.
61
+
62
+ ## Recommended Chain
63
+
64
+ - `+get_tag_definition_schema` → (first build/update in session or refresh) `analysis_meta +list_events` → `analysis_meta +list_properties` → `+build_tag_definition` → `+create_tag`
65
+ - `+get_tag_definition_schema` → (first build/update in session or refresh) `analysis_meta +list_events` → `analysis_meta +list_properties` → `+build_tag_definition` → `+update_tag`
@@ -10,7 +10,7 @@ Domain: **Query lifecycle**
10
10
  - Cancel a query by the same `requestId` that was supplied to or returned by a previous query command.
11
11
  - For proactive cancellation, pass `requestId` to the query tool before starting it, then call `cancel_query` with the same value if you stop waiting.
12
12
  - If a query returns `fetch failed`, hits an HTTP timeout, or the caller stops waiting, the backend query may still be running; call `+cancel_query --request_id <same value>` with the preset `requestId`.
13
- - auto-generated requestId is not available when the HTTP request fails before a response, so preset `requestId` before any query that may exceed the CLI/MCP HTTP timeout.
13
+ - MCP query tools require caller-supplied `requestId`; generate and pass it before starting any cancelable query, then reuse the same value if cleanup is needed.
14
14
 
15
15
  ## Command
16
16
  ```bash
@@ -30,9 +30,8 @@ ae-cli analysis +cancel_query --request_id mcp_0123456789abcdef0123456789abcdef
30
30
  - The request must belong to the current MCP user. Otherwise the service returns `REQUEST_NOT_FOUND_OR_NOT_OWNED`.
31
31
  - Do not invent a request ID. Use the ID from the query response or the ID explicitly supplied to the original query.
32
32
  - This command cancels by request ID only. It does not cancel by SQL text, report ID, dashboard ID, BI panel ID, run ID, or tool call ID.
33
- - For query commands that expose `--request_id`, prefer supplying a stable ID before execution using `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`, so proactive cancellation does not depend on waiting for the response metadata.
33
+ - For query commands that expose `--request_id`, supplying a stable ID before execution is required. Use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`, so proactive cancellation does not depend on waiting for the response metadata.
34
34
  - For query commands that may exceed the CLI/MCP HTTP timeout, preset `--request_id`; if `fetch failed`, HTTP timeout, or caller timeout happens, immediately call `+cancel_query --request_id <same value> --yes`.
35
- - For commands that do not expose caller-supplied `request_id`, cancel only if the response includes a request ID.
36
35
 
37
36
  ## Next Steps on Failure
38
37
  - If `REQUEST_NOT_FOUND_OR_NOT_OWNED` appears, verify the request ID, user identity, host, and whether the original query already finished.
@@ -0,0 +1,33 @@
1
+ # analysis +copy_dashboard (Copy Dashboard)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Dashboard Management**
6
+
7
+ ## Use Cases
8
+ - Copy a dashboard to a new dashboard, optionally copying its associated reports.
9
+ - To place the copy in a specific space or folder, provide `--to_space_id` or `--to_folder_id`. Use `+list_spaces` to resolve these IDs.
10
+
11
+ ## Commands
12
+ ```bash
13
+ ae-cli analysis_audience +copy_dashboard --project_id <project_id> --dashboard_id <dashboard_id> --dashboard_name "Copy of Dashboard"
14
+ ae-cli analysis_audience +copy_dashboard --project_id <project_id> --dashboard_id <dashboard_id> --dashboard_name "Copy of Dashboard" --report_copy true --to_space_id <space_id>
15
+ ae-cli analysis_audience +copy_dashboard --dry-run
16
+ ```
17
+
18
+ ## Parameters
19
+ | Parameter | Required | Description |
20
+ |---|---|---|
21
+ | `--project_id` / `-p` | Yes | Project ID |
22
+ | `--dashboard_id` | Yes | Source dashboard ID to copy |
23
+ | `--dashboard_name` | Yes | Name for the new copied dashboard |
24
+ | `--report_copy` | No | Whether to also copy associated reports. Defaults to false. |
25
+ | `--to_space_id` | No | Target space ID. Omit to use the default location. |
26
+ | `--to_folder_id` | No | Target folder ID inside the target space. Omit to place at the space root. |
27
+
28
+ ## Decision Rules
29
+ - Call `+list_spaces` first when the user wants to place the copy in a specific space or folder.
30
+ - Returns the new dashboard ID and name on success.
31
+
32
+ ## Recommended Chain
33
+ - `+list_dashboards` -> `+list_spaces` -> `+copy_dashboard` -> `analysis_common +get_resource_url`
@@ -0,0 +1,40 @@
1
+ # analysis_audience +create_id_cluster (Create ID Cluster)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Cluster Management**
6
+
7
+ ## Use Cases
8
+ - Create a new ID cluster by uploading a CSV of user IDs as plain text.
9
+ - The CSV should contain a single column of user IDs (no header row required).
10
+ - The operation is asynchronous — the cluster enters computing state after creation.
11
+
12
+ ## Commands
13
+ ```bash
14
+ ae-cli analysis_audience +create_id_cluster --project_id <project_id> --display_name "My ID Cluster" --file_content "user_001
15
+ user_002
16
+ user_003" --entity_id <entity_id>
17
+ ae-cli analysis_audience +create_id_cluster --project_id <project_id> --display_name "My ID Cluster" --file_content "user_001" --entity_id <entity_id> --cluster_name my_id_cluster --remarks "Created by script"
18
+ ae-cli analysis_audience +create_id_cluster --dry-run
19
+ ```
20
+
21
+ ## Parameters
22
+ | Parameter | Required | Description |
23
+ |---|---|---|
24
+ | `--project_id` / `-p` | Yes | Project ID |
25
+ | `--display_name` | Yes | Cluster display name (1-80 characters) |
26
+ | `--file_content` | Yes | CSV file content as plain text. No header row, UTF-8 encoding. Each row contains one user ID. Max 100MB. |
27
+ | `--entity_id` | Yes | Entity ID to associate the cluster with. Use `analysis_meta +list_entities` to query. |
28
+ | `--cluster_name` | No | Cluster name (lowercase letters, digits, underscores, starts with a letter, max 80 chars). Auto-generated if omitted. |
29
+ | `--remarks` | No | Optional remarks (max 200 characters) |
30
+ | `--main_column_name` | No | Optional main column name for ID matching |
31
+
32
+ ## Return Value
33
+ Returns `clusterId`, `uploadNum` (rows uploaded), `userNum` (matched users), `unmatchedNum` (unmatched rows), and `clusterName`.
34
+
35
+ ## Decision Rules
36
+ - Call `analysis_meta +list_entities` to resolve `entity_id` before creating.
37
+ - If file size exceeds 100MB, inform the user to upload directly via the web interface.
38
+
39
+ ## Recommended Chain
40
+ - `analysis_meta +list_entities` -> `+create_id_cluster` -> `+refresh_cluster`
@@ -0,0 +1,39 @@
1
+ # analysis_audience +create_id_tag (Create ID Tag)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Tag Management**
6
+
7
+ ## Use Cases
8
+ - Create a new ID tag by uploading a CSV of user IDs and tag values as plain text.
9
+ - The CSV should contain two columns: user ID and tag value (tag value is optional).
10
+ - The operation is asynchronous — the tag enters computing state after creation.
11
+
12
+ ## Commands
13
+ ```bash
14
+ ae-cli analysis_audience +create_id_tag --project_id <project_id> --display_name "VIP Tag" --file_content "user_001,gold
15
+ user_002,silver" --entity_id <entity_id>
16
+ ae-cli analysis_audience +create_id_tag --project_id <project_id> --display_name "VIP Tag" --file_content "user_001,gold" --entity_id <entity_id> --tag_name vip_tag --remarks "ID-based tag"
17
+ ae-cli analysis_audience +create_id_tag --dry-run
18
+ ```
19
+
20
+ ## Parameters
21
+ | Parameter | Required | Description |
22
+ |---|---|---|
23
+ | `--project_id` / `-p` | Yes | Project ID |
24
+ | `--display_name` | Yes | Tag display name (1-80 characters) |
25
+ | `--file_content` | Yes | CSV file content as plain text. No header row, UTF-8 encoding. Column 1: user ID. Column 2: tag value (optional). Example: user_001,gold_member. Max 100MB. |
26
+ | `--entity_id` | Yes | Entity ID to associate the tag with. Use `analysis_meta +list_entities` to query. |
27
+ | `--tag_name` | No | Tag name (letters/digits/underscores, starts with a letter, max 80 chars). Auto-generated if omitted. |
28
+ | `--remarks` | No | Optional remarks (max 200 characters) |
29
+ | `--main_column_name` | No | Optional main column name for ID matching |
30
+
31
+ ## Return Value
32
+ Returns `clusterId`, `uploadNum` (rows uploaded), `userNum` (matched users), `unmatchedNum` (unmatched rows), and `clusterName` (tag name).
33
+
34
+ ## Decision Rules
35
+ - Call `analysis_meta +list_entities` to resolve `entity_id` before creating.
36
+ - If file size exceeds 100MB, inform the user to upload directly via the web interface.
37
+
38
+ ## Recommended Chain
39
+ - `analysis_meta +list_entities` -> `+create_id_tag` -> `+refresh_tag`
@@ -0,0 +1,27 @@
1
+ # analysis +delete_alert (Delete Alert)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Alert Management**
6
+
7
+ ## Use Cases
8
+ - Permanently delete an alert by its ID.
9
+
10
+ ## Commands
11
+ ```bash
12
+ ae-cli analysis +delete_alert --project_id <project_id> --alert_id <alert_id>
13
+ ae-cli analysis +delete_alert --dry-run
14
+ ```
15
+
16
+ ## Parameters
17
+ | Parameter | Required | Description |
18
+ |---|---|---|
19
+ | `--project_id` / `-p` | Yes | Project ID |
20
+ | `--alert_id` | Yes | Alert ID to delete |
21
+
22
+ ## Decision Rules
23
+ - Use `+list_alerts` first to confirm the alert ID before deleting.
24
+ - This is a destructive operation; keep the confirmation prompt unless automation is explicitly required.
25
+
26
+ ## Recommended Chain
27
+ - `+list_alerts` -> `+delete_alert`
@@ -0,0 +1,27 @@
1
+ # analysis_audience +delete_cluster (Delete Cluster)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Cluster Management**
6
+
7
+ ## Use Cases
8
+ - Permanently delete a cluster by its name.
9
+
10
+ ## Commands
11
+ ```bash
12
+ ae-cli analysis_audience +delete_cluster --project_id <project_id> --cluster_name my_cluster
13
+ ae-cli analysis_audience +delete_cluster --dry-run
14
+ ```
15
+
16
+ ## Parameters
17
+ | Parameter | Required | Description |
18
+ |---|---|---|
19
+ | `--project_id` / `-p` | Yes | Project ID |
20
+ | `--cluster_name` | Yes | Cluster name to delete |
21
+
22
+ ## Decision Rules
23
+ - Use `+list_clusters` first to confirm the cluster name before deleting.
24
+ - This is a destructive operation; keep the confirmation prompt unless automation is explicitly required.
25
+
26
+ ## Recommended Chain
27
+ - `+list_clusters` -> `+delete_cluster`
@@ -0,0 +1,30 @@
1
+ # analysis +delete_dashboard (Delete Dashboard)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Dashboard Management**
6
+
7
+ ## Use Cases
8
+ - Permanently delete a dashboard by its ID.
9
+
10
+ ## Commands
11
+ ```bash
12
+ ae-cli analysis +delete_dashboard --project_id <project_id> --dashboard_id <dashboard_id>
13
+ ae-cli analysis +delete_dashboard --dry-run
14
+ ```
15
+
16
+ ## Parameters
17
+ | Parameter | Required | Description |
18
+ |---|---|---|
19
+ | `--project_id` / `-p` | Yes | Project ID |
20
+ | `--dashboard_id` | Yes | Dashboard ID to delete |
21
+
22
+ ## Decision Rules
23
+ - Use `+list_dashboards` first to confirm the dashboard ID before deleting.
24
+ - This is a destructive operation; keep the confirmation prompt unless automation is explicitly required.
25
+
26
+ ## Next Step on Failure
27
+ - If the dashboard is not found, use `+list_dashboards` to verify the ID.
28
+
29
+ ## Recommended Chain
30
+ - `+list_dashboards` -> `+delete_dashboard`
@@ -0,0 +1,27 @@
1
+ # analysis_meta +delete_metric (Delete Metric)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Metric Management**
6
+
7
+ ## Use Cases
8
+ - Permanently delete a metric by its ID.
9
+
10
+ ## Commands
11
+ ```bash
12
+ ae-cli analysis_meta +delete_metric --project_id <project_id> --metric_id <metric_id>
13
+ ae-cli analysis_meta +delete_metric --dry-run
14
+ ```
15
+
16
+ ## Parameters
17
+ | Parameter | Required | Description |
18
+ |---|---|---|
19
+ | `--project_id` / `-p` | Yes | Project ID |
20
+ | `--metric_id` | Yes | Metric ID to delete |
21
+
22
+ ## Decision Rules
23
+ - Use `+list_metrics` first to confirm the metric ID before deleting.
24
+ - This is a destructive operation; keep the confirmation prompt unless automation is explicitly required.
25
+
26
+ ## Recommended Chain
27
+ - `+list_metrics` -> `+delete_metric`
@@ -0,0 +1,27 @@
1
+ # analysis +delete_report (Delete Report)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Report Management**
6
+
7
+ ## Use Cases
8
+ - Permanently delete a report by its ID.
9
+
10
+ ## Commands
11
+ ```bash
12
+ ae-cli analysis +delete_report --project_id <project_id> --report_id <report_id>
13
+ ae-cli analysis +delete_report --dry-run
14
+ ```
15
+
16
+ ## Parameters
17
+ | Parameter | Required | Description |
18
+ |---|---|---|
19
+ | `--project_id` / `-p` | Yes | Project ID |
20
+ | `--report_id` | Yes | Report ID to delete |
21
+
22
+ ## Decision Rules
23
+ - Use `+list_reports` first to confirm the report ID before deleting.
24
+ - This is a destructive operation; keep the confirmation prompt unless automation is explicitly required.
25
+
26
+ ## Recommended Chain
27
+ - `+list_reports` -> `+delete_report`
@@ -0,0 +1,27 @@
1
+ # analysis_audience +delete_tag (Delete Tag)
2
+
3
+ > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
+
5
+ Domain: **Tag Management**
6
+
7
+ ## Use Cases
8
+ - Permanently delete a tag by its name.
9
+
10
+ ## Commands
11
+ ```bash
12
+ ae-cli analysis_audience +delete_tag --project_id <project_id> --tag_name my_tag
13
+ ae-cli analysis_audience +delete_tag --dry-run
14
+ ```
15
+
16
+ ## Parameters
17
+ | Parameter | Required | Description |
18
+ |---|---|---|
19
+ | `--project_id` / `-p` | Yes | Project ID |
20
+ | `--tag_name` | Yes | Tag name to delete |
21
+
22
+ ## Decision Rules
23
+ - Use `+list_tags` first to confirm the tag name before deleting.
24
+ - This is a destructive operation; keep the confirmation prompt unless automation is explicitly required.
25
+
26
+ ## Recommended Chain
27
+ - `+list_tags` -> `+delete_tag`
@@ -56,18 +56,18 @@ ae-cli analysis +drilldown_user_events --dry-run
56
56
  | `--use_cache` | No | Whether to use cache. Default: true |
57
57
  | `--page_num` | No | Start page number, default 1 |
58
58
  | `--page_size` | No | Page size. Default: 1000, maximum: 10000 |
59
- | `--request_id` | No | Optional unique request ID used for tracking and cancellation. If provided, it must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`. For long-running or cancelable queries, provide this before starting the query so it can be cancelled later with `+cancel_query --request_id <same value>`, even if the caller stops waiting before the tool returns. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running. The auto-generated requestId is not available when the HTTP request fails before a response, so preset `requestId` is required for proactive cleanup. Generated automatically if omitted. The response `metadata.requestId` can also be passed to `cancel_query` when the query is no longer needed. |
59
+ | `--request_id` | Yes | Required unique request ID used for tracking and cancellation. Generate it before starting the query. It must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`. Provide this before starting the query so it can be cancelled later with `+cancel_query --request_id <same value>`, even if the caller stops waiting before the tool returns. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running. `requestId` is not auto-generated for MCP query tools because the caller must know it before the response for proactive cleanup. If omitted or blank, the backend returns `REQUEST_ID_REQUIRED`; invalid format returns `INVALID_REQUEST_ID`. The response `metadata.requestId` echoes the supplied requestId and can also be passed to `cancel_query(requestId)` when the query is no longer needed. |
60
60
  | `--timeout_minutes` | No | Query timeout in minutes |
61
61
 
62
62
  ## Decision Rules
63
63
  - `user_id` / `event_names` / `target_dates` must come from the previous step result and must not be constructed out of thin air.
64
- - On the first run, start with only the required parameters (`--project_id`,`--user_id`,`--event_names`,`--target_dates`), and add optional parameters after confirming the path works.
64
+ - On the first run, include all required parameters (`--project_id`,`--user_id`,`--event_names`,`--target_dates`,`--request_id`), and add optional parameters after confirming the path works.
65
65
  - Wrap JSON parameters in single quotes (for example `--event_names '[]'`, `--target_dates '[]'`) to avoid shell escaping issues.
66
- - For long-running or cancelable drilldowns, supply your own `--request_id` before starting so `+cancel_query` can cancel by the same ID if the caller or user stops waiting. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running; call `+cancel_query --request_id <same value>` with the preset ID. The auto-generated requestId is not available when the HTTP request fails before a response. The value must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`.
66
+ - Generate and pass `--request_id` before starting any cancelable query; it is required. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running; call `+cancel_query --request_id <same value>` with the preset ID. The value must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`. Omitted or blank IDs return `REQUEST_ID_REQUIRED`; invalid format returns `INVALID_REQUEST_ID`.
67
67
  - For cross-project troubleshooting, first confirm whether `--project_id` matches the current permissions and target environment.
68
68
 
69
69
  ## Next Steps on Failure
70
- - If required parameters are missing, fall back to the smallest runnable command and fill them in first (focus on `--project_id`, `--user_id`, `--event_names`, `--target_dates`).
70
+ - If required parameters are missing, fall back to the smallest runnable command and fill them in first (focus on `--project_id`, `--user_id`, `--event_names`, `--target_dates`, `--request_id`).
71
71
  - If `Invalid JSON` appears, first verify the array structure, then compare it with the previous drilldown result to confirm the values are complete and valid.
72
72
 
73
73
  ## Recommended chaining
@@ -57,15 +57,15 @@ ae-cli analysis +drilldown_users --dry-run
57
57
  | `--use_cache` | No | Whether to use cache. Default: true |
58
58
  | `--limit` | No | Optional limit. Default: 1000, maximum: 10000. |
59
59
  | `--offset` | No | Optional offset. Default: 0. |
60
- | `--request_id` | No | Optional unique request ID used for tracking and cancellation. If provided, it must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`. For long-running or cancelable queries, provide this before starting the query so it can be cancelled later with `+cancel_query --request_id <same value>`, even if the caller stops waiting before the tool returns. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running. The auto-generated requestId is not available when the HTTP request fails before a response, so preset `requestId` is required for proactive cleanup. Generated automatically if omitted. The response `metadata.requestId` can also be passed to `cancel_query` when the query is no longer needed. |
60
+ | `--request_id` | Yes | Required unique request ID used for tracking and cancellation. Generate it before starting the query. It must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`. Provide this before starting the query so it can be cancelled later with `+cancel_query --request_id <same value>`, even if the caller stops waiting before the tool returns. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running. `requestId` is not auto-generated for MCP query tools because the caller must know it before the response for proactive cleanup. If omitted or blank, the backend returns `REQUEST_ID_REQUIRED`; invalid format returns `INVALID_REQUEST_ID`. The response `metadata.requestId` echoes the supplied requestId and can also be passed to `cancel_query(requestId)` when the query is no longer needed. |
61
61
  | `--timeout_minutes` | No | Query timeout in minutes. If the query exceeds this time, it will be cancelled automatically. |
62
62
 
63
63
  ## Decision Rules
64
64
  - Drilldown positioning parameters must come from upstream analysis results and must not be fabricated.
65
65
  - `qp` must not be rewritten or "simplified"; it should remain consistent with the source analysis.
66
66
  - For pagination, use `--limit` and `--offset` together. Default limit is 1000, maximum 100000.
67
- - For long-running or cancelable drilldowns, supply your own `--request_id` before starting so `+cancel_query` can cancel by the same ID if the caller or user stops waiting. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running; call `+cancel_query --request_id <same value>` with the preset ID. The auto-generated requestId is not available when the HTTP request fails before a response. The value must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`.
68
- - For the first run, it is recommended to pass only the required parameters (`--project_id`, `--model_type`, `--qp`) and add optional parameters after confirming the chain works.
67
+ - Generate and pass `--request_id` before starting any cancelable query; it is required. If `fetch failed`, HTTP timeout, or caller timeout happens, the backend query may still be running; call `+cancel_query --request_id <same value>` with the preset ID. The value must use `mcp_<32 lowercase hex UUID>`, for example `mcp_0123456789abcdef0123456789abcdef`. Omitted or blank IDs return `REQUEST_ID_REQUIRED`; invalid format returns `INVALID_REQUEST_ID`.
68
+ - For the first run, include all required parameters (`--project_id`, `--model_type`, `--qp`, `--request_id`) and add optional parameters after confirming the chain works.
69
69
  - Wrap JSON parameters in single quotes (for example `--qp '{}'`, `--drilldown_groups '{}'`) to avoid shell escaping issues.
70
70
  - When dates/time ranges are involved, validate with a short range first and then expand gradually.
71
71
  - For cross-project troubleshooting, first confirm whether `--project_id` matches the current permissions and target environment.