@thinkingai/ae-cli 1.0.24 → 1.0.28
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.
- package/README.md +17 -2
- package/README.zh.md +18 -2
- package/dist/auth-5NSDQFQB.js +454 -0
- package/dist/{auth-4OPL4YWG.js → auth-H2376DEF.js} +2 -2
- package/dist/chunk-AD5V3ZPJ.js +217 -0
- package/dist/chunk-CAQYQA4R.js +399 -0
- package/dist/{chunk-JJCRURTR.js → chunk-CLJF7MQA.js} +1 -1
- package/dist/chunk-GSJGPNKK.js +49 -0
- package/dist/chunk-IMBKVXKY.js +478 -0
- package/dist/chunk-KAEZTSXN.js +99 -0
- package/dist/{chunk-MZW6NOVS.js → chunk-LU7SXK4Q.js} +27 -8
- package/dist/chunk-OJDNO5QY.js +63 -0
- package/dist/{chunk-DC66L5AM.js → chunk-SRJIAOBN.js} +76 -91
- package/dist/{chunk-OVHL4JAC.js → chunk-WCHI7725.js} +44 -47
- package/dist/{client-TDH6MUWM.js → client-FCMK3XEK.js} +5 -3
- package/dist/config-64G36TJL.js +130 -0
- package/dist/index.js +50 -17
- package/dist/model-EZ6K7FXI.js +134 -0
- package/dist/{raw-EM7AP3RT.js → raw-VEF3D6UD.js} +11 -6
- package/dist/sync-NRODEVNH.js +385 -0
- package/dist/te-agent-7U7JLJKU.js +524 -0
- package/dist/{te-analysis-3KFSNUCJ.js → te-analysis-A2OSGHQ4.js} +136 -20
- package/dist/{te-audience-GMYJFCSC.js → te-audience-LI67PPGO.js} +5 -4
- package/dist/{te-common-YLERCMQI.js → te-common-35WVU3C5.js} +19 -8
- package/dist/{te-community-PYDN5A6B.js → te-community-LEAP6PWT.js} +4 -3
- package/dist/{te-dataops-ETWS5O3X.js → te-dataops-N2LGZBOX.js} +4 -3
- package/dist/{te-engage-ROJVZHDA.js → te-engage-H7C72Z46.js} +105 -49
- package/dist/{te-kb-VUNS2CC7.js → te-kb-I2OKTBAI.js} +225 -29
- package/dist/{te-meta-3EFWLM3A.js → te-meta-HBTIEDRO.js} +4 -3
- package/dist/te-team-EM5OWRQL.js +529 -0
- package/package.json +10 -2
- package/skills/ae-agent/SKILL.md +134 -0
- package/skills/ae-analysis/SKILL.md +1 -1
- package/skills/ae-analysis/references/drilldown_user_events.md +1 -1
- package/skills/ae-analysis/references/drilldown_users.md +2 -2
- package/skills/ae-analysis/references/list_clusters.md +4 -2
- package/skills/ae-analysis/references/query_adhoc.md +3 -2
- package/skills/ae-analysis/references/query_entity_details.md +1 -1
- package/skills/ae-analysis-global/SKILL.md +51 -0
- package/skills/ae-analysis-global/references/list_query_clusters.md +67 -0
- package/skills/ae-community/SKILL.md +2 -3
- package/skills/ae-dataops/SKILL.md +1 -2
- package/skills/ae-engage/SKILL.md +26 -2
- package/skills/ae-engage/references/add-approver.md +0 -1
- package/skills/ae-engage/references/add-channel.md +0 -1
- package/skills/ae-engage/references/approver-list.md +0 -1
- package/skills/ae-engage/references/build-task-save-guide.md +283 -0
- package/skills/ae-engage/references/cancel-query-by-request-id.md +0 -1
- package/skills/ae-engage/references/channel-detail.md +0 -1
- package/skills/ae-engage/references/channel-list.md +0 -1
- package/skills/ae-engage/references/config-channel-detail.md +0 -1
- package/skills/ae-engage/references/config-channel-list.md +0 -1
- package/skills/ae-engage/references/config-item-analysis-report.md +0 -1
- package/skills/ae-engage/references/config-item-detail.md +0 -1
- package/skills/ae-engage/references/config-item-list.md +0 -1
- package/skills/ae-engage/references/config-item-strategy-comparison.md +0 -1
- package/skills/ae-engage/references/config-item-trigger-report.md +0 -1
- package/skills/ae-engage/references/copy-config-template.md +0 -1
- package/skills/ae-engage/references/delete-channel.md +0 -1
- package/skills/ae-engage/references/delete-config-channel.md +0 -1
- package/skills/ae-engage/references/delete-config-item.md +0 -1
- package/skills/ae-engage/references/delete-flow.md +0 -1
- package/skills/ae-engage/references/flow-ab-split-node-report.md +0 -1
- package/skills/ae-engage/references/flow-detail.md +0 -1
- package/skills/ae-engage/references/flow-list.md +0 -1
- package/skills/ae-engage/references/flow-node-config-schema.md +0 -1
- package/skills/ae-engage/references/flow-node-detail-report.md +0 -1
- package/skills/ae-engage/references/flow-node-overview-report.md +0 -1
- package/skills/ae-engage/references/flow-process-report.md +0 -1
- package/skills/ae-engage/references/manage-flow.md +0 -1
- package/skills/ae-engage/references/manage-strategy.md +0 -1
- package/skills/ae-engage/references/manage-task.md +0 -1
- package/skills/ae-engage/references/modify-flow-base-info.md +0 -1
- package/skills/ae-engage/references/save-task.md +304 -0
- package/skills/ae-engage/references/strategy-detail.md +0 -1
- package/skills/ae-engage/references/strategy-list.md +0 -1
- package/skills/ae-engage/references/task-data-detail.md +0 -1
- package/skills/ae-engage/references/task-data-overview.md +0 -1
- package/skills/ae-engage/references/task-detail.md +0 -1
- package/skills/ae-engage/references/task-experiment-report.md +0 -1
- package/skills/ae-engage/references/task-list.md +0 -1
- package/skills/ae-engage/references/task-metric-detail.md +0 -1
- package/skills/ae-engage/references/task-stats.md +0 -1
- package/skills/ae-engage/references/update-channel-status.md +0 -1
- package/skills/ae-engage/references/update-config-channel-status.md +0 -1
- package/skills/ae-engage/references/validate-flow-node-config.md +0 -1
- package/skills/ae-engage/references/whitelist-list.md +0 -1
- package/skills/ae-kb/SKILL.md +284 -0
- package/skills/ae-team/SKILL.md +164 -0
- package/skills/ae-team/references/ai-generate.md +39 -0
- package/skills/ae-team/references/create.md +94 -0
- package/skills/ae-team/references/delete.md +39 -0
- package/skills/ae-team/references/list-projects.md +45 -0
- package/skills/ae-team/references/list-templates.md +38 -0
- package/skills/ae-team/references/list.md +39 -0
- package/skills/ae-team/references/run-artifacts.md +51 -0
- package/skills/ae-team/references/run-cancel.md +38 -0
- package/skills/ae-team/references/run-chat.md +57 -0
- package/skills/ae-team/references/run-reply.md +41 -0
- package/skills/ae-team/references/run-result.md +75 -0
- package/skills/ae-team/references/run-start.md +73 -0
- package/skills/ae-team/references/run-watch.md +82 -0
- package/skills/ae-team/references/update.md +47 -0
- package/dist/auth-PBPAZQWP.js +0 -168
- package/dist/chunk-47MTN54I.js +0 -285
- package/dist/config-5ELRYAIH.js +0 -257
|
@@ -6,7 +6,6 @@ description: "AE/TE/ThinkingEngine/ThinkingAI ae-cli manual for analysis-side ta
|
|
|
6
6
|
|
|
7
7
|
# ae-analysis
|
|
8
8
|
|
|
9
|
-
> **CRITICAL - This skill is self-contained.** Use the Global AE CLI Rules below; do not require a separate shared skill for analysis-side tasks.
|
|
10
9
|
> **CRITICAL - For all commands that require `project_id`, you MUST satisfy `PROJECT_ID_GATE` first (no guessing): verify the project by ID/name with `analysis_common +list_projects` only when there is no valid project context yet, when the user switches project/host/environment, or when the supplied project is ambiguous. Reuse a project already verified in the same continuous conversation and same host/environment.**
|
|
11
10
|
> **CRITICAL - For write operations in this skill, you MUST complete the post-write link loop when applicable:** after success and extractable `resource_id`, call `analysis_common +get_resource_url` and return the main result + resource link (or explicit link-failure reason).
|
|
12
11
|
> **CRITICAL - Before running any `+<tool_name>` command, you MUST first read the corresponding `references/<tool_name>.md`.** The reference filename always equals the command name without the leading `+`, for example `+query_adhoc` -> `references/query_adhoc.md`.
|
|
@@ -21,6 +20,7 @@ Global parameters:
|
|
|
21
20
|
|---|---|
|
|
22
21
|
| `--format <json\|table>` | Output format. Default is JSON. |
|
|
23
22
|
| `--jq <expr>` | jq filter expression for JSON output. |
|
|
23
|
+
| `--host <url>` | Override the active AE host. Available on every command and may be placed after the subcommand, e.g. `ae-cli analysis +list_dashboards --host <url>`. |
|
|
24
24
|
|
|
25
25
|
Output and errors:
|
|
26
26
|
- Successful commands return machine-readable JSON by default.
|
|
@@ -55,7 +55,7 @@ ae-cli analysis +drilldown_user_events --dry-run
|
|
|
55
55
|
| `--entity_value` | No | Optional entity value for multi-entity scenarios |
|
|
56
56
|
| `--use_cache` | No | Whether to use cache. Default: true |
|
|
57
57
|
| `--page_num` | No | Start page number, default 1 |
|
|
58
|
-
| `--page_size` | No | Page size
|
|
58
|
+
| `--page_size` | No | Page size. Default: 1000, maximum: 100000 |
|
|
59
59
|
| `--timeout_minutes` | No | Query timeout in minutes |
|
|
60
60
|
|
|
61
61
|
## Decision Rules
|
|
@@ -55,14 +55,14 @@ ae-cli analysis +drilldown_users --dry-run
|
|
|
55
55
|
| `--include_total` | No | Whether to query users from the total row. Default: false |
|
|
56
56
|
| `--relation_val` | No | Relation value used in relation analysis scenarios |
|
|
57
57
|
| `--use_cache` | No | Whether to use cache. Default: true |
|
|
58
|
-
| `--limit` | No | Optional limit. Default:
|
|
58
|
+
| `--limit` | No | Optional limit. Default: 1000, maximum: 100000. |
|
|
59
59
|
| `--offset` | No | Optional offset. Default: 0. |
|
|
60
60
|
| `--timeout_minutes` | No | Query timeout in minutes. If the query exceeds this time, it will be cancelled automatically. |
|
|
61
61
|
|
|
62
62
|
## Decision Rules
|
|
63
63
|
- Drilldown positioning parameters must come from upstream analysis results and must not be fabricated.
|
|
64
64
|
- `qp` must not be rewritten or "simplified"; it should remain consistent with the source analysis.
|
|
65
|
-
- For pagination, use `--limit` and `--offset` together. Default limit is
|
|
65
|
+
- For pagination, use `--limit` and `--offset` together. Default limit is 1000, maximum 100000.
|
|
66
66
|
- 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
67
|
- Wrap JSON parameters in single quotes (for example `--qp '{}'`, `--drilldown_groups '{}'`) to avoid shell escaping issues.
|
|
68
68
|
- When dates/time ranges are involved, validate with a short range first and then expand gradually.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# analysis_audience +list_clusters (Cluster Search)
|
|
1
|
+
# analysis_audience +list_clusters (Audience/User Segment Cluster Search)
|
|
2
2
|
|
|
3
3
|
> **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
|
|
4
4
|
|
|
@@ -8,8 +8,10 @@ Domain: **Cluster Management**
|
|
|
8
8
|
|
|
9
9
|
**Fuzzy Search Fallback:** If `--query` returns no results, retry with broader keywords (max 3 attempts), then fall back to full list. See [SKILL.md § C. FUZZY_SEARCH_FALLBACK](../SKILL.md#c-fuzzy_search_fallback).
|
|
10
10
|
|
|
11
|
+
**Term boundary:** This command lists audience/user segment clusters only. It is not a server, region, or deployment inventory tool.
|
|
12
|
+
|
|
11
13
|
## Use Cases
|
|
12
|
-
- List cluster metadata accessible to the current user in the project.
|
|
14
|
+
- List audience/user segment cluster metadata accessible to the current user in the project.
|
|
13
15
|
- Supports payload governance parameters: `query`, `fields`, `limit`, `offset`.
|
|
14
16
|
- Returns a paginated envelope (items + total + limit + offset + hasMore), not cluster members.
|
|
15
17
|
|
|
@@ -95,7 +95,7 @@ ae-cli analysis +query_adhoc --project_id <project_id> --model_type <model_type>
|
|
|
95
95
|
| `--is_sort_by_columns` | No | Whether to sort query results by columns. Default: false |
|
|
96
96
|
| `--resolve_recent_day` | No | Whether to resolve relative time expressions such as "last 7 days". If omitted, service auto-resolves when `qp.eventView.recentDay` exists and `startTime`/`endTime` is incomplete; otherwise defaults to false. |
|
|
97
97
|
| `--fields` | No | Optional fields to return. Must match column names in result. Invalid fields cause INVALID_FIELDS error. |
|
|
98
|
-
| `--limit` | No | Optional limit. Default:
|
|
98
|
+
| `--limit` | No | Optional limit. Default: 1000, maximum: 100000. |
|
|
99
99
|
| `--offset` | No | Optional offset. Default: 0. |
|
|
100
100
|
| `--timeout_minutes` | No | Query timeout in minutes. If the query exceeds this time, it will be cancelled automatically. |
|
|
101
101
|
|
|
@@ -103,7 +103,8 @@ ae-cli analysis +query_adhoc --project_id <project_id> --model_type <model_type>
|
|
|
103
103
|
- On the first run, start with only the required parameters (`--project_id`,`--model_type`,`--qp`), and add optional parameters after confirming the path works.
|
|
104
104
|
- Do not call this command with placeholder QP such as `{}`. For builder-supported models, wait for builder `status=generated`; for non-builder models, build QP from verified schema/metadata first.
|
|
105
105
|
- For builder-supported models, do not run metadata/schema lookup to "help" the builder. The builder is the metadata resolver.
|
|
106
|
-
- For pagination, use `--limit` and `--offset` together. Default limit is
|
|
106
|
+
- For pagination, use `--limit` and `--offset` together. Default limit is 1000, maximum 100000.
|
|
107
|
+
- For `model_type=sql`, use exactly one row limit: either put `LIMIT` in the SQL, or use `--limit`. If both are present they must be equal — `query_adhoc` rejects mismatched values to avoid silently sampled or duplicated results. When the SQL already has a trailing `LIMIT`, you may omit `--limit` and the SQL governs.
|
|
107
108
|
- Use `--fields` to select specific columns for lighter response payloads.
|
|
108
109
|
- `event`, `retention`, `funnel`, and `prop_analysis` must not manually craft QP with schema-first flow; call the builder and use the returned `qp`.
|
|
109
110
|
- For non-builder models, `qp` must satisfy both schema structure and project metadata constraints.
|
|
@@ -39,7 +39,7 @@ ae-cli analysis +query_entity_details --dry-run
|
|
|
39
39
|
| `--properties` | No | Optional display properties JSON, for example `[{"columnName":"#user_id","tableType":"0"},{"columnName":"device_id","tableType":"0"}]`. If provided, property names should come from `analysis_meta +list_properties` in the same `project_id`. |
|
|
40
40
|
| `--sort_by` | No | Optional sort field |
|
|
41
41
|
| `--sort_order` | No | Optional sort order. Supported values: asc and desc |
|
|
42
|
-
| `--limit` | No | Optional result limit. Default:
|
|
42
|
+
| `--limit` | No | Optional result limit. Default: 1000, maximum: 100000 |
|
|
43
43
|
| `--zone_offset` | No | Time zone offset. For example, UTC+8 is 8 |
|
|
44
44
|
| `--use_cache` | No | Whether to use cache. Default: true |
|
|
45
45
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ae-analysis-global
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Overlay rules for AE/TE analysis global multi-cluster mode. Use only when ae-cli config cluster-mode status reports sw_cfg_enable_global_query=true. This skill supplements ae-analysis; it does not replace it."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ae-analysis-global
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
This is an overlay for `ae-analysis`. First use the normal `ae-analysis` rules and matching command references. Apply the rules below only when local multi-cluster mode is enabled (`ae-cli config cluster-mode status`):
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
ae-cli config cluster-mode status
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The result must contain:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{"sw_cfg_enable_global_query": true}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If the mode is not enabled, do not use this overlay.
|
|
23
|
+
|
|
24
|
+
For commands added only by this overlay, read this skill's matching reference file before composing commands. Example: `+list_query_clusters` -> `references/list_query_clusters.md`.
|
|
25
|
+
|
|
26
|
+
Every command accepts `--host <url>` to override the active AE host, and it may be placed after the subcommand (e.g. `ae-cli analysis +list_query_clusters --project_id <id> --host <url>`). Host selection is independent of `--cluster_query_scope`: `--host` chooses which AE instance to call, while `--cluster_query_scope` / `--slave_cluster_id` choose which cluster within global mode.
|
|
27
|
+
|
|
28
|
+
## Routing Rules
|
|
29
|
+
|
|
30
|
+
- In this overlay, **query cluster / service cluster / deployment cluster** means multi-cluster routing for analysis queries. **audience/user segment cluster** means audience membership assets under `analysis_audience`.
|
|
31
|
+
- If the user asks for cluster inventory or cluster info, call `ae-cli analysis +list_query_clusters --project_id <project_id>`. Localized examples include "集群信息" and "有哪些集群".
|
|
32
|
+
- Do not answer query-cluster inventory questions with `ae-cli analysis_audience +list_clusters` unless the user explicitly asks for audience clusters, cohorts, segments, user membership, or cluster definitions.
|
|
33
|
+
- If the user mentions country, region, server, shard, site, market, or deployment area semantics, call `ae-cli analysis +list_query_clusters --project_id <project_id>` before choosing query scope.
|
|
34
|
+
- Match slave cluster intent only against `slaveClusters[].clusterId`, `slaveClusters[].clusterName`, and `slaveClusters[].clusterDesc` returned by `+list_query_clusters`.
|
|
35
|
+
- If a matching accessible slave cluster exists, pass `--cluster_query_scope SLAVE --slave_cluster_id <clusterId>` to `+query_report_data`, `+query_dashboard_report_data`, or `+query_adhoc`.
|
|
36
|
+
- Use `--cluster_query_scope GLOBAL` only when the user clearly asks for global, all clusters, all servers, or cross-cluster aggregated data, and `permissions.canQueryGlobal=true`.
|
|
37
|
+
- If the user does not express global or slave-cluster intent, omit `--cluster_query_scope`.
|
|
38
|
+
- If requested global/slave scope is not allowed, explain `permissions.allowedClusterQueryParams` instead of guessing forbidden parameters.
|
|
39
|
+
- For `+query_adhoc --model_type sql`, never pass `--cluster_query_scope`; SQL model analysis only supports the current self cluster.
|
|
40
|
+
|
|
41
|
+
## Response Wording
|
|
42
|
+
|
|
43
|
+
- For `+list_query_clusters`, call the result "query clusters" and summarize `currentCluster`, `slaveClusters`, and `permissions.allowedClusterQueryParams`.
|
|
44
|
+
- For `analysis_audience +list_clusters`, call the result "audience clusters" or "user segments"; do not call those results query clusters.
|
|
45
|
+
|
|
46
|
+
## Commands Added By Multi-Cluster Mode
|
|
47
|
+
|
|
48
|
+
- `ae-cli analysis +list_query_clusters --project_id <project_id>`
|
|
49
|
+
- `ae-cli analysis +query_report_data ... --cluster_query_scope <GLOBAL|SLAVE> [--slave_cluster_id <id>]`
|
|
50
|
+
- `ae-cli analysis +query_dashboard_report_data ... --cluster_query_scope <GLOBAL|SLAVE> [--slave_cluster_id <id>]`
|
|
51
|
+
- `ae-cli analysis +query_adhoc ... --cluster_query_scope <GLOBAL|SLAVE> [--slave_cluster_id <id>]`
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# analysis +list_query_clusters (Query Cluster Options)
|
|
2
|
+
|
|
3
|
+
> **Prerequisite:** Use this reference only after `ae-analysis-global` confirms local multi-cluster mode is enabled. This command is added by the global overlay, not by the base `ae-analysis` skill.
|
|
4
|
+
|
|
5
|
+
Domain: **Multi-Cluster Query Routing**
|
|
6
|
+
|
|
7
|
+
## Use Cases
|
|
8
|
+
|
|
9
|
+
- List the query cluster options accessible to the current account in the project.
|
|
10
|
+
- Answer user questions such as "cluster info", "available query clusters", or "current cluster". Localized examples include "集群信息" and "有哪些集群".
|
|
11
|
+
- Decide whether a later report/dashboard/ad-hoc query should use the current self cluster, global aggregated data, or one specific slave cluster.
|
|
12
|
+
- Resolve country, region, game server, service shard, site, market, or deployment area wording to an accessible slave cluster before passing `cluster_query_scope=SLAVE`.
|
|
13
|
+
|
|
14
|
+
This command is not for audience/user segment clusters. For cohort, audience, or segment assets, use `analysis_audience +list_clusters`.
|
|
15
|
+
|
|
16
|
+
## Commands
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
ae-cli analysis +list_query_clusters --project_id <project_id>
|
|
20
|
+
ae-cli analysis +list_query_clusters --dry-run
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Parameters
|
|
24
|
+
|
|
25
|
+
| Parameter | Required | Description |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| `--project_id` / `-p` | Yes | Project ID used to resolve the current account's cluster query permissions. |
|
|
28
|
+
|
|
29
|
+
## Output Shape
|
|
30
|
+
|
|
31
|
+
The result data follows the server DTO used by `list_query_clusters`:
|
|
32
|
+
|
|
33
|
+
| Field | Description |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `globalQueryEnabled` | Whether global query is enabled by server config. |
|
|
36
|
+
| `currentCluster` | The current self query cluster. Fields: `clusterId`, `clusterName`, `clusterDesc`. |
|
|
37
|
+
| `slaveClusters` | Accessible slave query clusters for this account and project. Each item has `clusterId`, `clusterName`, `clusterDesc`. |
|
|
38
|
+
| `permissions` | Permission summary for choosing query scope. |
|
|
39
|
+
| `permissions.canQueryCurrent` | Whether the user can query the current self cluster. Usually true. |
|
|
40
|
+
| `permissions.canQueryGlobal` | Whether `cluster_query_scope=GLOBAL` is allowed. |
|
|
41
|
+
| `permissions.canQueryAllSlaveClusters` | Whether any enabled slave cluster may be queried. |
|
|
42
|
+
| `permissions.allowedSlaveClusterIds` | Slave cluster IDs this account may use. |
|
|
43
|
+
| `permissions.allowedClusterQueryParams` | Human-readable allowed query parameter combinations, e.g. `omit clusterQueryScope`, `clusterQueryScope=GLOBAL`, or `clusterQueryScope=SLAVE, slaveClusterId in [...]`. |
|
|
44
|
+
|
|
45
|
+
## Decision Rules
|
|
46
|
+
|
|
47
|
+
- For query-cluster inventory or cluster-info questions, call this command and answer with "query clusters", not "audience clusters".
|
|
48
|
+
- Default query behavior is to omit `cluster_query_scope`, which queries the current self cluster or follows the tool-specific default.
|
|
49
|
+
- Pass `--cluster_query_scope GLOBAL` only when the user clearly asks for global, all clusters, all servers, cross-cluster aggregation, or equivalent aggregate wording, and `permissions.canQueryGlobal=true`.
|
|
50
|
+
- Pass `--cluster_query_scope SLAVE --slave_cluster_id <clusterId>` only after this command confirms a requested country, region, server, site, market, or deployment maps to an accessible `slaveClusters[]` item.
|
|
51
|
+
- Match slave intent only against `slaveClusters[].clusterId`, `slaveClusters[].clusterName`, and `slaveClusters[].clusterDesc`.
|
|
52
|
+
- If the requested scope is not allowed, do not guess forbidden parameters. Explain `permissions.allowedClusterQueryParams`.
|
|
53
|
+
- For `+query_adhoc --model_type sql`, never pass `cluster_query_scope`; SQL model analysis only supports the current self cluster.
|
|
54
|
+
|
|
55
|
+
## Recommended Chains
|
|
56
|
+
|
|
57
|
+
- Cluster inventory / cluster info -> `analysis +list_query_clusters`
|
|
58
|
+
- Query DAU for Japan server -> `analysis +list_query_clusters` -> match JP/Japan slave cluster -> query report/dashboard/ad-hoc with `--cluster_query_scope SLAVE --slave_cluster_id <clusterId>`
|
|
59
|
+
- Query all-cluster aggregated DAU -> `analysis +list_query_clusters` -> if `permissions.canQueryGlobal=true`, query with `--cluster_query_scope GLOBAL`
|
|
60
|
+
- View audience cohorts or user segments -> `analysis_audience +list_clusters` instead
|
|
61
|
+
|
|
62
|
+
## Response Wording
|
|
63
|
+
|
|
64
|
+
- Use "current query cluster" for `currentCluster`.
|
|
65
|
+
- Use "accessible slave query clusters" for `slaveClusters`.
|
|
66
|
+
- Use "allowed query-scope parameters" for `permissions.allowedClusterQueryParams`.
|
|
67
|
+
- Do not call `analysis_audience +list_clusters` results query clusters; those are audience clusters or user segments.
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ae-community
|
|
3
3
|
version: 2.0.0
|
|
4
|
-
description: "AE community analysis: post search, comment sentiment, topic trends, risky content, livestream data.
|
|
4
|
+
description: "AE community analysis: post search, comment sentiment, topic trends, risky content, livestream data."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# ae-community
|
|
8
8
|
|
|
9
|
-
> **CRITICAL - This skill is self-contained.** Use the Global AE CLI Rules below; do not require a separate shared skill for community-side tasks.
|
|
10
|
-
|
|
11
9
|
The AE Community domain provides social data analysis: post/video search, comment analytics, sentiment and topics, risk monitoring, and livestream metrics. Commands run as **`ae-cli community +<subcommand>`** — every community subcommand uses the **`+` prefix**.
|
|
12
10
|
|
|
13
11
|
| Route (MCP) | CLI service | Responsibility |
|
|
@@ -28,6 +26,7 @@ Global parameters:
|
|
|
28
26
|
|---|---|
|
|
29
27
|
| `--format <json\|table>` | Output format. Default is JSON. |
|
|
30
28
|
| `--jq <expr>` | jq filter expression for JSON output. |
|
|
29
|
+
| `--host <url>` | Override the active AE host. Available on every command and may be placed after the subcommand, e.g. `ae-cli community +<command> --host <url>`. |
|
|
31
30
|
|
|
32
31
|
Output and errors:
|
|
33
32
|
- Successful commands return machine-readable JSON by default.
|
|
@@ -6,8 +6,6 @@ description: "AE Data Development and Operations: Data warehouse management, flo
|
|
|
6
6
|
|
|
7
7
|
# ae-dataops
|
|
8
8
|
|
|
9
|
-
> **CRITICAL - This skill is self-contained.** Use the Global AE CLI Rules below; do not require a separate shared skill for DataOps-side tasks.
|
|
10
|
-
|
|
11
9
|
The AE Data Development and Operations domain provides capabilities for data warehouse management, flow orchestration, IDE SQL queries, data integration, operations and backfill management, including the following subcommands:
|
|
12
10
|
|
|
13
11
|
| Subcommand | Responsibility | Corresponding Scenario Skill |
|
|
@@ -33,6 +31,7 @@ Global parameters:
|
|
|
33
31
|
|---|---|
|
|
34
32
|
| `--format <json\|table>` | Output format. Default is JSON. |
|
|
35
33
|
| `--jq <expr>` | jq filter expression for JSON output. |
|
|
34
|
+
| `--host <url>` | Override the active AE host. Available on every command and may be placed after the subcommand, e.g. `ae-cli dataops_ide +<command> --host <url>`. |
|
|
36
35
|
|
|
37
36
|
Output and errors:
|
|
38
37
|
- Successful commands return machine-readable JSON by default.
|
|
@@ -18,6 +18,7 @@ Global parameters:
|
|
|
18
18
|
|---|---|
|
|
19
19
|
| `--format <json\|table>` | Output format. Default is JSON. |
|
|
20
20
|
| `--jq <expr>` | jq filter expression for JSON output. |
|
|
21
|
+
| `--host <url>` | Override the active AE host. Available on every command and may be placed after the subcommand, e.g. `ae-cli engage +<command> --host <url>`. |
|
|
21
22
|
|
|
22
23
|
Output and errors:
|
|
23
24
|
- Successful commands return machine-readable JSON by default.
|
|
@@ -79,6 +80,12 @@ ae-cli engage +config_channel_list --project_id 1
|
|
|
79
80
|
# Query the task list
|
|
80
81
|
ae-cli engage +task_list --project_id 1 --req '{"pageNum":1,"pageSize":20}'
|
|
81
82
|
|
|
83
|
+
# Build a save_task guide before composing the final req
|
|
84
|
+
ae-cli engage +build_task_save_guide --project_id 1 --req '{"context":{"triggerType":2,"channelId":"channel_123"}}'
|
|
85
|
+
|
|
86
|
+
# Save a task draft (create when req.taskId is omitted)
|
|
87
|
+
ae-cli engage +save_task --project_id 1 --req '{"baseInfo":{"taskName":"Demo Task"},"channelConfig":{"channelType":1,"channelId":"channel_123","groupContentList":[{"contentList":[{"pushLanguageCode":"default","content":"[]"}]}]},"targetConfig":{"targetClusterType":3},"triggerConfig":{"triggerType":2},"controlConfig":{"completionIndicatorDef":{"completionIndicators":[]}}}'
|
|
88
|
+
|
|
82
89
|
# Query task details
|
|
83
90
|
ae-cli engage +task_detail --project_id 1 --task_id task_123
|
|
84
91
|
|
|
@@ -182,6 +189,8 @@ For more detailed generation rules, consult these references first:
|
|
|
182
189
|
```bash
|
|
183
190
|
ae-cli --dry-run engage +channel_list --project_id 1
|
|
184
191
|
ae-cli --dry-run engage +task_list --project_id 1 --req '{"pageNum":1,"pageSize":20}'
|
|
192
|
+
ae-cli --dry-run engage +build_task_save_guide --project_id 1 --req '{}'
|
|
193
|
+
ae-cli --dry-run engage +save_task --project_id 1 --req '{"baseInfo":{"taskName":"Demo Task"},"channelConfig":{"channelType":1,"channelId":"channel_123","groupContentList":[{"contentList":[{"pushLanguageCode":"default","content":"[]"}]}]},"targetConfig":{"targetClusterType":3},"triggerConfig":{"triggerType":2},"controlConfig":{"completionIndicatorDef":{"completionIndicators":[]}}}'
|
|
185
194
|
ae-cli --dry-run engage +flow_list --project_id 1
|
|
186
195
|
```
|
|
187
196
|
|
|
@@ -190,6 +199,8 @@ ae-cli --dry-run engage +flow_list --project_id 1
|
|
|
190
199
|
More detailed single-command guidance is available in the business-oriented `references/` directory:
|
|
191
200
|
|
|
192
201
|
- `references/channel-list.md`
|
|
202
|
+
- `references/build-task-save-guide.md`
|
|
203
|
+
- `references/save-task.md`
|
|
193
204
|
- `references/task-list.md`
|
|
194
205
|
- `references/config-item-list.md`
|
|
195
206
|
- `references/flow-list.md`
|
|
@@ -204,7 +215,7 @@ This split documentation structure is easier to extend later, because commands w
|
|
|
204
215
|
|
|
205
216
|
### task
|
|
206
217
|
|
|
207
|
-
`+task_data_overview`, `+task_data_detail`, `+task_metric_detail`, `+task_experiment_report`, `+task_detail`, `+task_list`, `+task_stats`, `+manage_task`
|
|
218
|
+
`+task_data_overview`, `+task_data_detail`, `+task_metric_detail`, `+task_experiment_report`, `+task_detail`, `+task_list`, `+task_stats`, `+build_task_save_guide`, `+save_task`, `+manage_task`
|
|
208
219
|
|
|
209
220
|
### config
|
|
210
221
|
|
|
@@ -225,4 +236,17 @@ The following commands are write operations. Confirm that the user intent is exp
|
|
|
225
236
|
- Channels and config channels: `+add_channel`, `+delete_channel`, `+update_channel_status`, `+delete_config_channel`, `+update_config_channel_status`
|
|
226
237
|
- Strategies and config items: `+delete_config_item`, `+copy_config_template`, `+manage_strategy`
|
|
227
238
|
- Flows: `+save_flow`, `+modify_flow_base_info`, `+manage_flow`, `+delete_flow`
|
|
228
|
-
- Tasks: `+manage_task`
|
|
239
|
+
- Tasks: `+save_task`, `+manage_task`
|
|
240
|
+
|
|
241
|
+
For task draft creation or update, use this workflow:
|
|
242
|
+
|
|
243
|
+
1. `ae-cli engage +channel_list --project_id <projectId>`
|
|
244
|
+
2. `ae-cli engage +build_task_save_guide --project_id <projectId> --req '{...}'`
|
|
245
|
+
3. If the guide says QP-derived fields are needed, call `ae-cli analysis_audience +get_cluster_definition_schema --cluster_type condition`
|
|
246
|
+
4. `ae-cli engage +save_task --project_id <projectId> --req '{...}'`
|
|
247
|
+
|
|
248
|
+
`+build_task_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`.
|
|
249
|
+
|
|
250
|
+
`+save_task` only saves a draft. 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. Update mode only supports draft tasks, and omitted fields can inherit from the existing draft before validation.
|
|
251
|
+
|
|
252
|
+
The audience schema query `ae-cli analysis_audience +get_cluster_definition_schema --cluster_type condition` is not a fixed preflight step. Call it only when the guide indicates that you must construct `targetConfig.qp`, `triggerConfig.triggerRule`, `clientConfig.clientQp`, or `completionIndicatorDef.event`.
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# ae-engage `+build_task_save_guide`
|
|
2
|
+
|
|
3
|
+
Build a scenario-specific guide for constructing `save_task.req`.
|
|
4
|
+
|
|
5
|
+
Mapped command: `ae-cli engage +build_task_save_guide`
|
|
6
|
+
|
|
7
|
+
This is a read-only helper. It does not save tasks, submit approvals, or trigger execution. Its job is to tell you how to build a valid `save_task` request for the current scenario.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Recommended Workflow
|
|
12
|
+
|
|
13
|
+
Use this sequence when creating or updating a task draft:
|
|
14
|
+
|
|
15
|
+
1. Query channels with `ae-cli engage +channel_list --project_id <projectId>`.
|
|
16
|
+
2. Call `ae-cli engage +build_task_save_guide --project_id <projectId> --req '{...}'`.
|
|
17
|
+
3. If the guide says QP-derived fields are required, call:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
ae-cli analysis_audience +get_cluster_definition_schema --cluster_type condition
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
4. Build the final grouped `save_task.req`.
|
|
24
|
+
5. Submit with `ae-cli engage +save_task --project_id <projectId> --req '{...}'`.
|
|
25
|
+
|
|
26
|
+
Important:
|
|
27
|
+
|
|
28
|
+
- Do not treat the audience schema query as a fixed preflight step.
|
|
29
|
+
- Call it only when the guide indicates that you need to construct:
|
|
30
|
+
- `targetConfig.qp`
|
|
31
|
+
- `triggerConfig.triggerRule`
|
|
32
|
+
- `clientConfig.clientQp`
|
|
33
|
+
- `completionIndicatorDef.event`
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 2. CLI Shape
|
|
38
|
+
|
|
39
|
+
The CLI call shape is:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
ae-cli engage +build_task_save_guide --project_id <projectId> --req '<req-json>'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This CLI requires `--req`, but `{}` is valid when you want a generic guide without scenario context.
|
|
46
|
+
|
|
47
|
+
Common request patterns:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
ae-cli engage +build_task_save_guide --project_id 1 --req '{}'
|
|
51
|
+
ae-cli engage +build_task_save_guide --project_id 1 --req '{"context":{"triggerType":2,"channelId":"channel_123"}}'
|
|
52
|
+
ae-cli engage +build_task_save_guide --project_id 1 --req '{"draft":{"baseInfo":{"taskName":"Demo Task"}}}'
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Supported request fields:
|
|
56
|
+
|
|
57
|
+
- `context`
|
|
58
|
+
- a lightweight scenario selector
|
|
59
|
+
- use it when you know key dimensions such as trigger type, audience type, channel, or experiment mode
|
|
60
|
+
- `draft`
|
|
61
|
+
- a partial `save_task` request
|
|
62
|
+
- use it when you already have part of the final payload and want missing fields, examples, or corrections
|
|
63
|
+
- `reqDraft`
|
|
64
|
+
- alias of `draft`
|
|
65
|
+
- `detailLevel`
|
|
66
|
+
- `brief`: core requirements only
|
|
67
|
+
- `full`: includes enums, unsupported cases, examples, and self-check information
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 3. `context` and `draft`
|
|
72
|
+
|
|
73
|
+
### 3.1 `context`
|
|
74
|
+
|
|
75
|
+
Use `context` when you want scenario-specific guidance without writing a partial `save_task.req`.
|
|
76
|
+
|
|
77
|
+
Typical fields:
|
|
78
|
+
|
|
79
|
+
- `triggerType`
|
|
80
|
+
- `targetClusterType`
|
|
81
|
+
- `channelType`
|
|
82
|
+
- `channelId`
|
|
83
|
+
- `channelTemplateId`
|
|
84
|
+
- `enableExp`
|
|
85
|
+
- `expIndicatorBizType`
|
|
86
|
+
|
|
87
|
+
Example:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"context": {
|
|
92
|
+
"triggerType": 2,
|
|
93
|
+
"targetClusterType": 2,
|
|
94
|
+
"channelId": "channel_123"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 3.2 `draft`
|
|
100
|
+
|
|
101
|
+
Use `draft` when you already have a partial `save_task.req` and want the guide to tell you:
|
|
102
|
+
|
|
103
|
+
- what is still missing
|
|
104
|
+
- what is invalid
|
|
105
|
+
- whether the payload is already close to submit-ready
|
|
106
|
+
- what template or schema to use to finish it
|
|
107
|
+
|
|
108
|
+
Example:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"draft": {
|
|
113
|
+
"baseInfo": {
|
|
114
|
+
"taskName": "Demo Task"
|
|
115
|
+
},
|
|
116
|
+
"triggerConfig": {
|
|
117
|
+
"triggerType": 2
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 4. Output Structure
|
|
126
|
+
|
|
127
|
+
The guide returns structured metadata rather than free-form prose. The top-level sections are:
|
|
128
|
+
|
|
129
|
+
- `valid`
|
|
130
|
+
- `errors`
|
|
131
|
+
- `warnings`
|
|
132
|
+
- `missingInputs`
|
|
133
|
+
- `saveTaskContract`
|
|
134
|
+
- `scenario`
|
|
135
|
+
- `requiredInput`
|
|
136
|
+
- `fieldRules`
|
|
137
|
+
- `handoff`
|
|
138
|
+
|
|
139
|
+
### 4.1 `valid`
|
|
140
|
+
|
|
141
|
+
- `true` means the current scenario or draft has no structural blocking errors
|
|
142
|
+
- `false` means you should inspect `errors`, `missingInputs`, and `handoff.blockingPlaceholders`
|
|
143
|
+
|
|
144
|
+
### 4.2 `errors`
|
|
145
|
+
|
|
146
|
+
Use `errors` for hard blockers such as:
|
|
147
|
+
|
|
148
|
+
- invalid enum values
|
|
149
|
+
- unsupported combinations
|
|
150
|
+
- unsupported trigger types
|
|
151
|
+
|
|
152
|
+
The guide may expose invalid values separately so you can correct them instead of silently dropping them.
|
|
153
|
+
|
|
154
|
+
### 4.3 `warnings`
|
|
155
|
+
|
|
156
|
+
Use `warnings` for non-fatal guidance, for example:
|
|
157
|
+
|
|
158
|
+
- channel content schema is unavailable because no `channelId` was provided
|
|
159
|
+
- click-rate experiment setup still needs a channel context
|
|
160
|
+
|
|
161
|
+
### 4.4 `missingInputs`
|
|
162
|
+
|
|
163
|
+
Use `missingInputs` as the to-do list for fields you still need before you can submit `save_task`.
|
|
164
|
+
|
|
165
|
+
Typical examples:
|
|
166
|
+
|
|
167
|
+
- missing `baseInfo.taskName`
|
|
168
|
+
- missing `channelConfig.channelId`
|
|
169
|
+
- missing `channelConfig.groupContentList`
|
|
170
|
+
- missing `triggerConfig.triggerTime` for scheduled single tasks
|
|
171
|
+
|
|
172
|
+
### 4.5 `saveTaskContract`
|
|
173
|
+
|
|
174
|
+
This section describes the high-level contract:
|
|
175
|
+
|
|
176
|
+
- final tool is `save_task`
|
|
177
|
+
- required preflight is `query_channel_list -> build_task_save_guide`
|
|
178
|
+
- QP-derived fields may require `ae-cli analysis_audience +get_cluster_definition_schema --cluster_type condition`
|
|
179
|
+
- `save_task.req` must be a grouped JSON object
|
|
180
|
+
|
|
181
|
+
### 4.6 `scenario`
|
|
182
|
+
|
|
183
|
+
This section shows the resolved scenario, such as:
|
|
184
|
+
|
|
185
|
+
- create vs update draft
|
|
186
|
+
- trigger type
|
|
187
|
+
- audience type
|
|
188
|
+
- channel type / channel id
|
|
189
|
+
- whether the scenario is unsupported
|
|
190
|
+
|
|
191
|
+
### 4.7 `requiredInput`
|
|
192
|
+
|
|
193
|
+
This section tells you which grouped blocks and fields are required in the current scenario.
|
|
194
|
+
|
|
195
|
+
Use it to understand what must appear in:
|
|
196
|
+
|
|
197
|
+
- `baseInfo`
|
|
198
|
+
- `channelConfig`
|
|
199
|
+
- `targetConfig`
|
|
200
|
+
- `triggerConfig`
|
|
201
|
+
- `controlConfig`
|
|
202
|
+
- `expConfig` when experiment mode is enabled
|
|
203
|
+
|
|
204
|
+
### 4.8 `fieldRules`
|
|
205
|
+
|
|
206
|
+
This is the most important construction section.
|
|
207
|
+
|
|
208
|
+
It includes:
|
|
209
|
+
|
|
210
|
+
- grouped block rules
|
|
211
|
+
- structured conditional rules
|
|
212
|
+
- related-parameter rules
|
|
213
|
+
- unsupported fields / values / combinations
|
|
214
|
+
- `channelContentSchema`
|
|
215
|
+
- enum values and wrong examples when `detailLevel=full`
|
|
216
|
+
|
|
217
|
+
#### `fieldRules.channelContentSchema`
|
|
218
|
+
|
|
219
|
+
Treat this as the source of truth for channel content construction.
|
|
220
|
+
|
|
221
|
+
Use it to get:
|
|
222
|
+
|
|
223
|
+
- valid keys
|
|
224
|
+
- expected item shape
|
|
225
|
+
- channel-specific examples
|
|
226
|
+
- params that must be copied exactly, such as `paramType`
|
|
227
|
+
|
|
228
|
+
Do not invent free-form content items such as:
|
|
229
|
+
|
|
230
|
+
```json
|
|
231
|
+
[{"text":"hello"}]
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Instead, use the valid item structure and put message text into `value`.
|
|
235
|
+
|
|
236
|
+
### 4.9 `handoff`
|
|
237
|
+
|
|
238
|
+
This is the final section before `save_task`.
|
|
239
|
+
|
|
240
|
+
Important fields:
|
|
241
|
+
|
|
242
|
+
- `reqTemplate`
|
|
243
|
+
- a scenario-aware grouped request template
|
|
244
|
+
- use it as a starting point, not as unquestioned final truth
|
|
245
|
+
- `readyToSubmit`
|
|
246
|
+
- `true` means the current scenario or draft has no blocking placeholders
|
|
247
|
+
- `blockingPlaceholders`
|
|
248
|
+
- unresolved placeholders that still block submission
|
|
249
|
+
- `selfCheckList`
|
|
250
|
+
- a final checklist before calling `save_task`
|
|
251
|
+
- `successUrlRule`
|
|
252
|
+
- after `save_task` succeeds, build the task detail URL from current page origin plus the relative hash
|
|
253
|
+
- do not hardcode host, IP, or port
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 5. How to Use the Guide in Practice
|
|
258
|
+
|
|
259
|
+
Recommended usage pattern:
|
|
260
|
+
|
|
261
|
+
1. resolve a real `channelId` with `+channel_list`
|
|
262
|
+
2. call `+build_task_save_guide`
|
|
263
|
+
3. read `fieldRules.channelContentSchema`
|
|
264
|
+
4. read `handoff.reqTemplate`
|
|
265
|
+
5. fix everything in `blockingPlaceholders`
|
|
266
|
+
6. if the guide points to QP-derived fields, call:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
ae-cli analysis_audience +get_cluster_definition_schema --cluster_type condition
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
7. fill those fields using the real condition schema
|
|
273
|
+
8. call `+save_task`
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 6. Safety Notes
|
|
278
|
+
|
|
279
|
+
- `+build_task_save_guide` is read-only; it does not save a draft
|
|
280
|
+
- do not skip the guide and build `save_task.req` from memory alone
|
|
281
|
+
- do not treat the audience schema query as mandatory for every task
|
|
282
|
+
- do not invent `channelId`, `clusterKey`, content keys, or QP structures
|
|
283
|
+
- if the guide exposes an unsupported scenario, correct it before calling `save_task`
|