@thinkingai/ae-cli 6.0.41 → 6.0.42
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/dist/index.js +3 -3
- package/dist/{metadata-UKZDNLLQ.js → metadata-BD6BXAYE.js} +12 -9
- package/dist/{metadata-XXMJFN2M.js → metadata-HXOFACDE.js} +12 -9
- package/dist/{te-analysis-YSK2DBVL.js → te-analysis-PXNF7ZJT.js} +48 -48
- package/dist/{te-analysis-3QLLS35K.js → te-analysis-T7C7WSAH.js} +48 -48
- package/dist/{te-engage-IRMHTSQK.js → te-engage-BVB7RGEO.js} +389 -4
- package/dist/{te-engage-6RNGK5GH.js → te-engage-LCEGC7G4.js} +389 -4
- package/package.json +1 -1
- package/skills/ae-analysis/references/ai_models.md +4 -1
- package/skills/ae-analysis/references/alert_list.md +2 -3
- package/skills/ae-analysis/references/analysis_gateway_assets.md +5 -5
- package/skills/ae-analysis/references/bi_panel_list.md +2 -2
- package/skills/ae-analysis/references/command_index.md +14 -14
- package/skills/ae-analysis/references/dashboard_list.md +2 -2
- package/skills/ae-analysis/references/favorite_add.md +2 -2
- package/skills/ae-analysis/references/favorite_remove.md +2 -2
- package/skills/ae-analysis/references/metric_create.md +7 -8
- package/skills/ae-analysis/references/project_space_list.md +2 -2
- package/skills/ae-analysis/references/public_link_list.md +2 -2
- package/skills/ae-analysis/references/report_list.md +3 -3
- package/skills/ae-analysis/references/report_list_export.md +2 -2
- package/skills/ae-analysis/references/sql_table_list.md +3 -2
- package/skills/ae-analysis/references/user_cluster_update.md +4 -2
- package/skills/ae-analysis/references/user_tag_update.md +4 -2
- package/skills/ae-analysis/references/virtual_property_sql_rule_update.md +3 -3
- package/skills/ae-engage/SKILL.md +10 -2
- package/skills/ae-engage/references/flow-metric-user.md +2 -1
- package/skills/ae-engage/references/flow-node-metric-user.md +2 -1
- package/skills/ae-engage/references/flow-node-user.md +2 -1
- package/skills/ae-engage/references/task-indicator-user.md +104 -0
- package/skills/ae-engage/references/task-user-detail-export.md +31 -0
- package/skills/ae-metadata/references/metadata_property_dimension_table_bind_existing.md +1 -1
|
@@ -3918,6 +3918,319 @@ var groupUpdate = createEngageTaskCapabilityCommand({
|
|
|
3918
3918
|
})
|
|
3919
3919
|
});
|
|
3920
3920
|
|
|
3921
|
+
// src/commands/te-engage/engage-task/indicator-user/shared.ts
|
|
3922
|
+
var ISO_DATE3 = /^\d{4}-\d{2}-\d{2}$/;
|
|
3923
|
+
var DECIMAL_TIME_ZONE = /^[+-]?\d{1,2}(?:\.\d+)?$/;
|
|
3924
|
+
var taskIndicatorUserIndicators = [
|
|
3925
|
+
"original_trigger",
|
|
3926
|
+
"plan",
|
|
3927
|
+
"actual_trigger",
|
|
3928
|
+
"trigger_success",
|
|
3929
|
+
"view",
|
|
3930
|
+
"click",
|
|
3931
|
+
"main",
|
|
3932
|
+
"secondary",
|
|
3933
|
+
"metric",
|
|
3934
|
+
"click_activate",
|
|
3935
|
+
"main_activate",
|
|
3936
|
+
"secondary_activate"
|
|
3937
|
+
];
|
|
3938
|
+
var indicatorSet = new Set(taskIndicatorUserIndicators);
|
|
3939
|
+
var groupBySet = /* @__PURE__ */ new Set(["batch", "date", "trigger", "experiment"]);
|
|
3940
|
+
var retentionTypeSet = /* @__PURE__ */ new Set(["retention", "lost"]);
|
|
3941
|
+
var sourceSet = /* @__PURE__ */ new Set(["task", "experiment", "metric"]);
|
|
3942
|
+
var pushLanguageCodeSet = /* @__PURE__ */ new Set([
|
|
3943
|
+
"all",
|
|
3944
|
+
"default",
|
|
3945
|
+
"ar",
|
|
3946
|
+
"az",
|
|
3947
|
+
"bs",
|
|
3948
|
+
"ca",
|
|
3949
|
+
"zh-Hans",
|
|
3950
|
+
"zh-Hant",
|
|
3951
|
+
"hr",
|
|
3952
|
+
"cs",
|
|
3953
|
+
"da",
|
|
3954
|
+
"nl",
|
|
3955
|
+
"en",
|
|
3956
|
+
"et",
|
|
3957
|
+
"fi",
|
|
3958
|
+
"fr",
|
|
3959
|
+
"ka",
|
|
3960
|
+
"bg",
|
|
3961
|
+
"de",
|
|
3962
|
+
"el",
|
|
3963
|
+
"hi",
|
|
3964
|
+
"he",
|
|
3965
|
+
"hu",
|
|
3966
|
+
"id",
|
|
3967
|
+
"it",
|
|
3968
|
+
"ja",
|
|
3969
|
+
"ko",
|
|
3970
|
+
"lv",
|
|
3971
|
+
"lt",
|
|
3972
|
+
"ms",
|
|
3973
|
+
"nb",
|
|
3974
|
+
"fa",
|
|
3975
|
+
"pl",
|
|
3976
|
+
"pt",
|
|
3977
|
+
"pa",
|
|
3978
|
+
"ro",
|
|
3979
|
+
"ru",
|
|
3980
|
+
"sr",
|
|
3981
|
+
"sk",
|
|
3982
|
+
"es",
|
|
3983
|
+
"sv",
|
|
3984
|
+
"th",
|
|
3985
|
+
"tr",
|
|
3986
|
+
"uk",
|
|
3987
|
+
"vi"
|
|
3988
|
+
]);
|
|
3989
|
+
var lostUnsupportedIndicatorSet = /* @__PURE__ */ new Set([
|
|
3990
|
+
"original_trigger",
|
|
3991
|
+
"metric",
|
|
3992
|
+
"click_activate",
|
|
3993
|
+
"main_activate",
|
|
3994
|
+
"secondary_activate"
|
|
3995
|
+
]);
|
|
3996
|
+
var taskIndicatorUserFlags = [
|
|
3997
|
+
{ name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
|
|
3998
|
+
{ name: "task-id", type: "string", required: true, desc: "Engagement task ID." },
|
|
3999
|
+
{
|
|
4000
|
+
name: "indicator",
|
|
4001
|
+
type: "string",
|
|
4002
|
+
required: true,
|
|
4003
|
+
desc: `Indicator segment. Values: ${taskIndicatorUserIndicators.join(", ")}.`
|
|
4004
|
+
},
|
|
4005
|
+
{ name: "start-time", type: "string", required: true, desc: "Segment start date in yyyy-MM-dd format." },
|
|
4006
|
+
{ name: "end-time", type: "string", required: true, desc: "Segment end date in yyyy-MM-dd format." },
|
|
4007
|
+
{
|
|
4008
|
+
name: "group-by",
|
|
4009
|
+
type: "string",
|
|
4010
|
+
required: false,
|
|
4011
|
+
desc: "Grouping context: batch, date, trigger, or experiment. Activate indicators require and default to experiment; others default to date."
|
|
4012
|
+
},
|
|
4013
|
+
{ name: "is-summary", type: "boolean", required: false, desc: "Whether to query a summary segment. Defaults to true." },
|
|
4014
|
+
{
|
|
4015
|
+
name: "retention-type",
|
|
4016
|
+
type: "string",
|
|
4017
|
+
required: false,
|
|
4018
|
+
desc: "Segment mode: retention or lost. Defaults to retention."
|
|
4019
|
+
},
|
|
4020
|
+
{
|
|
4021
|
+
name: "source",
|
|
4022
|
+
type: "string",
|
|
4023
|
+
required: false,
|
|
4024
|
+
desc: "Report source: task, experiment, or metric. Defaults to metric for metric indicators, experiment for activate indicators or experiment grouping, and task otherwise."
|
|
4025
|
+
},
|
|
4026
|
+
{ name: "secondary-index", type: "number", required: false, desc: "Secondary indicator index from 1 to 10." },
|
|
4027
|
+
{ name: "metric-id", type: "string", required: false, desc: "Metric setting ID; required when --indicator=metric." },
|
|
4028
|
+
{ name: "task-instance-id", type: "string", required: false, desc: "Optional non-triggered task instance ID." },
|
|
4029
|
+
{ name: "exp-group-id", type: "string", required: false, desc: "Optional experiment group ID." },
|
|
4030
|
+
{ name: "push-language-code", type: "string", required: false, desc: "Push language filter, such as all, default, en, zh-Hans, or zh-Hant." },
|
|
4031
|
+
{ name: "user-time-zone", type: "string", required: false, desc: "User timezone filter: all or a decimal offset available on the task." },
|
|
4032
|
+
{ name: "show-time-zone", type: "string", required: false, desc: "Display timezone offset from -12 to 14. Omitted or 99 uses the backend default." }
|
|
4033
|
+
];
|
|
4034
|
+
var taskIndicatorUserRequestFlag = {
|
|
4035
|
+
name: "request-id",
|
|
4036
|
+
type: "string",
|
|
4037
|
+
required: false,
|
|
4038
|
+
desc: "Query correlation ID. Generated when omitted."
|
|
4039
|
+
};
|
|
4040
|
+
var taskIndicatorUserLimitFlag = {
|
|
4041
|
+
name: "limit",
|
|
4042
|
+
type: "number",
|
|
4043
|
+
required: false,
|
|
4044
|
+
desc: "Maximum number of rows returned inline. Defaults to backend policy."
|
|
4045
|
+
};
|
|
4046
|
+
var taskIndicatorUserTimeoutFlag = {
|
|
4047
|
+
name: "timeout-seconds",
|
|
4048
|
+
type: "number",
|
|
4049
|
+
required: false,
|
|
4050
|
+
desc: "Query or export timeout in seconds. Defaults to backend policy."
|
|
4051
|
+
};
|
|
4052
|
+
var taskIndicatorUserFormatFlag = {
|
|
4053
|
+
name: "artifact-format",
|
|
4054
|
+
type: "string",
|
|
4055
|
+
required: false,
|
|
4056
|
+
desc: "Export artifact format: csv or jsonl. Defaults to jsonl."
|
|
4057
|
+
};
|
|
4058
|
+
function validateTaskIndicatorUserInput(ctx) {
|
|
4059
|
+
const indicator = ctx.str("indicator");
|
|
4060
|
+
if (!indicatorSet.has(indicator)) {
|
|
4061
|
+
fail2(`--indicator must be one of: ${taskIndicatorUserIndicators.join(", ")}`);
|
|
4062
|
+
}
|
|
4063
|
+
validateDate3(ctx.str("start-time"), "--start-time");
|
|
4064
|
+
validateDate3(ctx.str("end-time"), "--end-time");
|
|
4065
|
+
if (ctx.str("start-time") > ctx.str("end-time")) {
|
|
4066
|
+
fail2("--start-time must be earlier than or equal to --end-time");
|
|
4067
|
+
}
|
|
4068
|
+
validateOptionalSet(ctx.str("group-by"), "--group-by", groupBySet);
|
|
4069
|
+
validateOptionalSet(ctx.str("retention-type"), "--retention-type", retentionTypeSet);
|
|
4070
|
+
validateOptionalSet(ctx.str("source"), "--source", sourceSet);
|
|
4071
|
+
validateOptionalSet(ctx.str("push-language-code"), "--push-language-code", pushLanguageCodeSet);
|
|
4072
|
+
validateShowTimeZone(ctx.str("show-time-zone"));
|
|
4073
|
+
validateUserTimeZone(ctx.str("user-time-zone"));
|
|
4074
|
+
const secondary = indicator === "secondary" || indicator === "secondary_activate";
|
|
4075
|
+
const secondaryIndex = ctx.optionalNum("secondary-index");
|
|
4076
|
+
if (secondary && (secondaryIndex === void 0 || !Number.isInteger(secondaryIndex) || secondaryIndex < 1 || secondaryIndex > 10)) {
|
|
4077
|
+
fail2("--secondary-index must be an integer from 1 to 10 for secondary indicators");
|
|
4078
|
+
}
|
|
4079
|
+
if (!secondary && secondaryIndex !== void 0) {
|
|
4080
|
+
fail2("--secondary-index is only accepted for secondary indicators");
|
|
4081
|
+
}
|
|
4082
|
+
if (indicator === "metric" && !ctx.str("metric-id")) {
|
|
4083
|
+
fail2("--metric-id is required when --indicator=metric");
|
|
4084
|
+
}
|
|
4085
|
+
if (indicator !== "metric" && ctx.str("metric-id")) {
|
|
4086
|
+
fail2("--metric-id is only accepted when --indicator=metric");
|
|
4087
|
+
}
|
|
4088
|
+
const source = ctx.str("source");
|
|
4089
|
+
const metric = indicator === "metric";
|
|
4090
|
+
if (metric && source && source !== "metric") {
|
|
4091
|
+
fail2("--source must be metric when --indicator=metric");
|
|
4092
|
+
}
|
|
4093
|
+
if (!metric && source === "metric") {
|
|
4094
|
+
fail2("--source=metric requires --indicator=metric");
|
|
4095
|
+
}
|
|
4096
|
+
const activate = indicator === "click_activate" || indicator === "main_activate" || indicator === "secondary_activate";
|
|
4097
|
+
const groupBy = ctx.str("group-by");
|
|
4098
|
+
if (activate && source && source !== "experiment") {
|
|
4099
|
+
fail2("--source must be experiment for activate indicators");
|
|
4100
|
+
}
|
|
4101
|
+
if (activate && groupBy && groupBy !== "experiment") {
|
|
4102
|
+
fail2("--group-by must be experiment for activate indicators");
|
|
4103
|
+
}
|
|
4104
|
+
if (ctx.str("retention-type") === "lost" && lostUnsupportedIndicatorSet.has(indicator)) {
|
|
4105
|
+
fail2(`--retention-type=lost is not supported for --indicator=${indicator}`);
|
|
4106
|
+
}
|
|
4107
|
+
const isSummary = readOptionalBoolean(ctx, "is-summary");
|
|
4108
|
+
const effectiveGroupBy = groupBy || (activate ? "experiment" : "date");
|
|
4109
|
+
if (indicator === "plan" && ctx.str("exp-group-id")) {
|
|
4110
|
+
fail2("--exp-group-id is not supported when --indicator=plan");
|
|
4111
|
+
}
|
|
4112
|
+
if (indicator === "plan" && effectiveGroupBy === "experiment" && isSummary === false) {
|
|
4113
|
+
fail2("--is-summary=false is not supported for plan indicators grouped by experiment");
|
|
4114
|
+
}
|
|
4115
|
+
if (effectiveGroupBy === "experiment" && !metric && source && source !== "experiment") {
|
|
4116
|
+
fail2("--source must be experiment when --group-by=experiment");
|
|
4117
|
+
}
|
|
4118
|
+
if (effectiveGroupBy === "batch" && isSummary === false && !ctx.str("task-instance-id")) {
|
|
4119
|
+
fail2("--task-instance-id is required for a non-summary batch segment");
|
|
4120
|
+
}
|
|
4121
|
+
if (effectiveGroupBy === "experiment" && isSummary === false && !ctx.str("exp-group-id")) {
|
|
4122
|
+
fail2("--exp-group-id is required for a non-summary experiment segment");
|
|
4123
|
+
}
|
|
4124
|
+
}
|
|
4125
|
+
function buildTaskIndicatorUserInput(ctx) {
|
|
4126
|
+
return {
|
|
4127
|
+
project_id: ctx.num("project-id"),
|
|
4128
|
+
task_id: ctx.str("task-id"),
|
|
4129
|
+
indicator: ctx.str("indicator"),
|
|
4130
|
+
start_time: ctx.str("start-time"),
|
|
4131
|
+
end_time: ctx.str("end-time"),
|
|
4132
|
+
group_by: ctx.str("group-by") || void 0,
|
|
4133
|
+
is_summary: readOptionalBoolean(ctx, "is-summary"),
|
|
4134
|
+
retention_type: ctx.str("retention-type") || void 0,
|
|
4135
|
+
source: ctx.str("source") || void 0,
|
|
4136
|
+
secondary_index: ctx.optionalNum("secondary-index"),
|
|
4137
|
+
metric_id: ctx.str("metric-id") || void 0,
|
|
4138
|
+
task_instance_id: ctx.str("task-instance-id") || void 0,
|
|
4139
|
+
exp_group_id: ctx.str("exp-group-id") || void 0,
|
|
4140
|
+
push_language_code: ctx.str("push-language-code") || void 0,
|
|
4141
|
+
user_time_zone: ctx.str("user-time-zone") || void 0,
|
|
4142
|
+
show_time_zone: ctx.str("show-time-zone") || void 0,
|
|
4143
|
+
request_id: ctx.str("request-id") || void 0,
|
|
4144
|
+
limit: ctx.optionalNum("limit"),
|
|
4145
|
+
format: ctx.str("artifact-format") || void 0,
|
|
4146
|
+
timeout_seconds: ctx.optionalNum("timeout-seconds")
|
|
4147
|
+
};
|
|
4148
|
+
}
|
|
4149
|
+
function validateDate3(value, flag) {
|
|
4150
|
+
if (!ISO_DATE3.test(value)) {
|
|
4151
|
+
fail2(`${flag} must be in yyyy-MM-dd format`);
|
|
4152
|
+
}
|
|
4153
|
+
}
|
|
4154
|
+
function validateOptionalSet(value, flag, allowed) {
|
|
4155
|
+
if (value && !allowed.has(value)) {
|
|
4156
|
+
fail2(`${flag} must be one of: ${[...allowed].join(", ")}`);
|
|
4157
|
+
}
|
|
4158
|
+
}
|
|
4159
|
+
function validateShowTimeZone(value) {
|
|
4160
|
+
if (!value) {
|
|
4161
|
+
return;
|
|
4162
|
+
}
|
|
4163
|
+
if (!DECIMAL_TIME_ZONE.test(value)) {
|
|
4164
|
+
fail2("--show-time-zone must use decimal hour-offset format like 8.0 or -5.0");
|
|
4165
|
+
}
|
|
4166
|
+
const offset = Number(value);
|
|
4167
|
+
if ((offset < -12 || offset > 14) && offset !== 99) {
|
|
4168
|
+
fail2("--show-time-zone must be between -12 and 14, or 99");
|
|
4169
|
+
}
|
|
4170
|
+
}
|
|
4171
|
+
function validateUserTimeZone(value) {
|
|
4172
|
+
if (!value || value === "all") {
|
|
4173
|
+
return;
|
|
4174
|
+
}
|
|
4175
|
+
if (!DECIMAL_TIME_ZONE.test(value)) {
|
|
4176
|
+
fail2("--user-time-zone must be all or a decimal hour offset like 8.0 or -5.0");
|
|
4177
|
+
}
|
|
4178
|
+
const offset = Number(value);
|
|
4179
|
+
if (offset < -12 || offset > 14) {
|
|
4180
|
+
fail2("--user-time-zone must be between -12 and 14, or all");
|
|
4181
|
+
}
|
|
4182
|
+
}
|
|
4183
|
+
function fail2(message) {
|
|
4184
|
+
printError("validation", message);
|
|
4185
|
+
process.exit(1);
|
|
4186
|
+
}
|
|
4187
|
+
|
|
4188
|
+
// src/commands/te-engage/engage-task/indicator-user/export.ts
|
|
4189
|
+
var taskIndicatorUserExport = createEngageTaskCapabilityCommand({
|
|
4190
|
+
resource: "indicator-user",
|
|
4191
|
+
command: "export",
|
|
4192
|
+
capabilityId: "engage-task.indicator-user.export",
|
|
4193
|
+
description: "Export users behind an engagement-task indicator segment.",
|
|
4194
|
+
flags: [
|
|
4195
|
+
...taskIndicatorUserFlags,
|
|
4196
|
+
taskIndicatorUserRequestFlag,
|
|
4197
|
+
taskIndicatorUserFormatFlag,
|
|
4198
|
+
taskIndicatorUserTimeoutFlag
|
|
4199
|
+
],
|
|
4200
|
+
risk: "read",
|
|
4201
|
+
validate: validateTaskIndicatorUserInput,
|
|
4202
|
+
buildInput: buildTaskIndicatorUserInput
|
|
4203
|
+
});
|
|
4204
|
+
|
|
4205
|
+
// src/commands/te-engage/engage-task/indicator-user/run.ts
|
|
4206
|
+
var taskIndicatorUserRun = createEngageTaskCapabilityCommand({
|
|
4207
|
+
resource: "indicator-user",
|
|
4208
|
+
command: "run",
|
|
4209
|
+
capabilityId: "engage-task.indicator-user.run",
|
|
4210
|
+
description: "Query users behind an engagement-task indicator segment inline.",
|
|
4211
|
+
flags: [
|
|
4212
|
+
...taskIndicatorUserFlags,
|
|
4213
|
+
taskIndicatorUserRequestFlag,
|
|
4214
|
+
taskIndicatorUserLimitFlag,
|
|
4215
|
+
taskIndicatorUserTimeoutFlag
|
|
4216
|
+
],
|
|
4217
|
+
risk: "read",
|
|
4218
|
+
validate: validateTaskIndicatorUserInput,
|
|
4219
|
+
buildInput: buildTaskIndicatorUserInput
|
|
4220
|
+
});
|
|
4221
|
+
|
|
4222
|
+
// src/commands/te-engage/engage-task/indicator-user/sql.ts
|
|
4223
|
+
var taskIndicatorUserSql = createEngageTaskCapabilityCommand({
|
|
4224
|
+
resource: "indicator-user",
|
|
4225
|
+
command: "sql",
|
|
4226
|
+
capabilityId: "engage-task.indicator-user.sql",
|
|
4227
|
+
description: "Build validated user-detail SQL for an engagement-task indicator segment.",
|
|
4228
|
+
flags: taskIndicatorUserFlags,
|
|
4229
|
+
risk: "read",
|
|
4230
|
+
validate: validateTaskIndicatorUserInput,
|
|
4231
|
+
buildInput: buildTaskIndicatorUserInput
|
|
4232
|
+
});
|
|
4233
|
+
|
|
3921
4234
|
// src/commands/te-engage/engage-task/metric/list.ts
|
|
3922
4235
|
var metricList = createEngageTaskCapabilityCommand({
|
|
3923
4236
|
resource: "metric",
|
|
@@ -3974,7 +4287,7 @@ var operationLogQuery2 = createEngageTaskCapabilityCommand({
|
|
|
3974
4287
|
});
|
|
3975
4288
|
|
|
3976
4289
|
// src/commands/te-engage/engage-task/push-record/query.ts
|
|
3977
|
-
var
|
|
4290
|
+
var ISO_DATE4 = /^\d{4}-\d{2}-\d{2}$/;
|
|
3978
4291
|
var pushRecordQuery = createEngageTaskCapabilityCommand({
|
|
3979
4292
|
resource: "push-record",
|
|
3980
4293
|
command: "query",
|
|
@@ -4002,11 +4315,11 @@ var pushRecordQuery = createEngageTaskCapabilityCommand({
|
|
|
4002
4315
|
validate: (ctx) => {
|
|
4003
4316
|
const startDate = ctx.str("start-date");
|
|
4004
4317
|
const endDate = ctx.str("end-date");
|
|
4005
|
-
if (startDate && !
|
|
4318
|
+
if (startDate && !ISO_DATE4.test(startDate)) {
|
|
4006
4319
|
printError("validation", "--start-date must be in yyyy-MM-dd format");
|
|
4007
4320
|
process.exit(1);
|
|
4008
4321
|
}
|
|
4009
|
-
if (endDate && !
|
|
4322
|
+
if (endDate && !ISO_DATE4.test(endDate)) {
|
|
4010
4323
|
printError("validation", "--end-date must be in yyyy-MM-dd format");
|
|
4011
4324
|
process.exit(1);
|
|
4012
4325
|
}
|
|
@@ -4317,6 +4630,74 @@ var taskStats = createEngageTaskCapabilityCommand({
|
|
|
4317
4630
|
buildInput: (ctx) => ({ project_id: ctx.num("project-id"), req: readRequiredJsonObject(ctx, "req") })
|
|
4318
4631
|
});
|
|
4319
4632
|
|
|
4633
|
+
// src/commands/te-engage/engage-task/user-detail/export.ts
|
|
4634
|
+
var taskUserDetailStatuses = [
|
|
4635
|
+
"frequency_control",
|
|
4636
|
+
"fatigue_control",
|
|
4637
|
+
"fail",
|
|
4638
|
+
"success",
|
|
4639
|
+
"sample",
|
|
4640
|
+
"exp_skip_push",
|
|
4641
|
+
"deduplicate",
|
|
4642
|
+
"push_plan",
|
|
4643
|
+
"push_actual"
|
|
4644
|
+
];
|
|
4645
|
+
var statusSet = new Set(taskUserDetailStatuses);
|
|
4646
|
+
var taskUserDetailExport = createEngageTaskCapabilityCommand({
|
|
4647
|
+
resource: "user-detail",
|
|
4648
|
+
command: "export",
|
|
4649
|
+
capabilityId: "engage-task.user-detail.export",
|
|
4650
|
+
description: "Export user details for one non-triggered task instance and user status.",
|
|
4651
|
+
flags: [
|
|
4652
|
+
{ name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
|
|
4653
|
+
{ name: "task-id", type: "string", required: true, desc: "Engagement task ID." },
|
|
4654
|
+
{ name: "task-instance-id", type: "string", required: true, desc: "Non-triggered task instance ID." },
|
|
4655
|
+
{
|
|
4656
|
+
name: "task-exec-detail-id",
|
|
4657
|
+
type: "string",
|
|
4658
|
+
required: false,
|
|
4659
|
+
desc: "Optional execution detail ID used to narrow the task instance export."
|
|
4660
|
+
},
|
|
4661
|
+
{
|
|
4662
|
+
name: "user-status",
|
|
4663
|
+
type: "string",
|
|
4664
|
+
required: false,
|
|
4665
|
+
desc: `English user status. Defaults to fail. Values: ${taskUserDetailStatuses.join(", ")}.`
|
|
4666
|
+
},
|
|
4667
|
+
{ name: "request-id", type: "string", required: false, desc: "Export correlation ID. Generated when omitted." },
|
|
4668
|
+
{
|
|
4669
|
+
name: "artifact-format",
|
|
4670
|
+
type: "string",
|
|
4671
|
+
required: false,
|
|
4672
|
+
desc: "Export artifact format: csv or jsonl. Defaults to jsonl."
|
|
4673
|
+
},
|
|
4674
|
+
{
|
|
4675
|
+
name: "timeout-seconds",
|
|
4676
|
+
type: "number",
|
|
4677
|
+
required: false,
|
|
4678
|
+
desc: "Export timeout in seconds. Defaults to backend policy and cannot exceed 21600."
|
|
4679
|
+
}
|
|
4680
|
+
],
|
|
4681
|
+
risk: "read",
|
|
4682
|
+
validate: (ctx) => {
|
|
4683
|
+
const status = ctx.str("user-status") || "fail";
|
|
4684
|
+
if (!statusSet.has(status)) {
|
|
4685
|
+
printError("validation", `--user-status must be one of: ${taskUserDetailStatuses.join(", ")}`);
|
|
4686
|
+
process.exit(1);
|
|
4687
|
+
}
|
|
4688
|
+
},
|
|
4689
|
+
buildInput: (ctx) => ({
|
|
4690
|
+
project_id: ctx.num("project-id"),
|
|
4691
|
+
task_id: ctx.str("task-id"),
|
|
4692
|
+
task_instance_id: ctx.str("task-instance-id"),
|
|
4693
|
+
task_exec_detail_id: ctx.str("task-exec-detail-id") || void 0,
|
|
4694
|
+
user_status: ctx.str("user-status") || "fail",
|
|
4695
|
+
request_id: ctx.str("request-id") || void 0,
|
|
4696
|
+
format: ctx.str("artifact-format") || void 0,
|
|
4697
|
+
timeout_seconds: ctx.optionalNum("timeout-seconds")
|
|
4698
|
+
})
|
|
4699
|
+
});
|
|
4700
|
+
|
|
4320
4701
|
// src/commands/te-engage/engage-task/index.ts
|
|
4321
4702
|
var commands6 = [
|
|
4322
4703
|
taskList,
|
|
@@ -4332,6 +4713,9 @@ var commands6 = [
|
|
|
4332
4713
|
groupDelete,
|
|
4333
4714
|
groupList,
|
|
4334
4715
|
groupUpdate,
|
|
4716
|
+
taskIndicatorUserSql,
|
|
4717
|
+
taskIndicatorUserRun,
|
|
4718
|
+
taskIndicatorUserExport,
|
|
4335
4719
|
metricList,
|
|
4336
4720
|
metricUpdate,
|
|
4337
4721
|
operationLogQuery2,
|
|
@@ -4343,7 +4727,8 @@ var commands6 = [
|
|
|
4343
4727
|
segmentListSetVisibility,
|
|
4344
4728
|
taskDelete,
|
|
4345
4729
|
taskModifyGroup,
|
|
4346
|
-
taskSubmitApproval
|
|
4730
|
+
taskSubmitApproval,
|
|
4731
|
+
taskUserDetailExport
|
|
4347
4732
|
];
|
|
4348
4733
|
var engage_task_default = commands6;
|
|
4349
4734
|
|
package/package.json
CHANGED
|
@@ -124,11 +124,13 @@ Property aggregation example:
|
|
|
124
124
|
{
|
|
125
125
|
"time_range": {"mode": "previous", "unit": "day", "value": 7},
|
|
126
126
|
"metrics": [
|
|
127
|
-
{"event": "purchase", "aggregation": "sum", "property": "amount"}
|
|
127
|
+
{"event": "purchase", "display_name": "Purchase revenue", "aggregation": "sum", "property": "amount"}
|
|
128
128
|
]
|
|
129
129
|
}
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
+
Set optional `display_name` on an event metric when the report should show a business-facing metric name. It applies to regular event metrics, saved metrics, and formula metrics. Omit it to use the event name or the default formula-metric label.
|
|
133
|
+
|
|
132
134
|
Formula metric example:
|
|
133
135
|
|
|
134
136
|
```json
|
|
@@ -136,6 +138,7 @@ Formula metric example:
|
|
|
136
138
|
"time_range": {"mode": "previous", "unit": "day", "value": 7},
|
|
137
139
|
"metrics": [
|
|
138
140
|
{
|
|
141
|
+
"display_name": "Revenue per user",
|
|
139
142
|
"formula": "revenue / users",
|
|
140
143
|
"dependencies": [
|
|
141
144
|
{"alias": "revenue", "event": "purchase", "aggregation": "sum", "property": "amount"},
|
|
@@ -12,7 +12,7 @@ ae-cli analysis alert list [options]
|
|
|
12
12
|
|
|
13
13
|
Capability id: `analysis.alert.list`
|
|
14
14
|
|
|
15
|
-
Input sends `project_id`, optional `
|
|
15
|
+
Input sends `project_id`, optional `queries`, `limit`, and `offset`. `queries` accepts 1 to 20 non-empty strings with OR semantics; matching rows include `matched_queries` and `matched_fields`. Do not send singular `query` or camelCase aliases.
|
|
16
16
|
|
|
17
17
|
Output is the capability gateway envelope: success is `ok=true,data,meta`; failure is `ok=false,error`. Export commands return lifecycle data such as `run_id` and `artifact_id` for inspect/download.
|
|
18
18
|
|
|
@@ -21,7 +21,6 @@ Parameters:
|
|
|
21
21
|
| Parameter | Description | Required |
|
|
22
22
|
| --- | --- | --- |
|
|
23
23
|
| `--project-id` | See command help | Yes |
|
|
24
|
-
| `--
|
|
24
|
+
| `--queries` | JSON array of 1 to 20 keyword filters | No |
|
|
25
25
|
| `--limit` | See command help | No |
|
|
26
26
|
| `--offset` | See command help | No |
|
|
27
|
-
|
|
@@ -81,7 +81,7 @@ Prefer the run/artifact commands over hand-written HTTP, Python, or curl. Analys
|
|
|
81
81
|
| `drilldown-entities run/export` | `analysis.query.drilldown_entities` / `analysis.query.drilldown_entities_export` | Preview/export users or custom entities for an advertised entity cell | `--project-id`, `--query-context-id`, optional `--source`, `--coordinate` | Subject plus entity rows/artifact |
|
|
82
82
|
| `query drilldown-user-events` | `analysis.query.drilldown_user_events` | Query one drilldown user's event sequence | `--project-id`, `--drilldown-context-id`, `--user-id` | Event sequence rows |
|
|
83
83
|
| `query create-result-cluster` | `analysis.query.create_result_cluster` | Save the advertised user/custom-entity cell population as its result cluster | `--project-id`, `--query-context-id`, optional `--source`, `--coordinate`, `--cluster-name` | Result cluster creation result |
|
|
84
|
-
| `report list` | `analysis.report.list` | Find accessible reports | `--project-id`, optional `--
|
|
84
|
+
| `report list` | `analysis.report.list` | Find accessible reports | `--project-id`, optional `--queries`, `--fields`, `--limit`, `--offset` | Paginated report summaries |
|
|
85
85
|
| `report list-export` | `analysis.report.list_export` | Export report catalog | same as list, plus optional `--artifact-format`, `--request-id` | Async artifact descriptor |
|
|
86
86
|
| `report get` | `analysis.report.get` | Inspect current report definition as AI QP | `--project-id`, `--report-id` | Report metadata plus `model_type` and `definition` |
|
|
87
87
|
| `report create` | `analysis.report.create` | Create a report from AI QP definition | `--report-name`, `--model-type`, `--definition` | Created report ID and normalized definition |
|
|
@@ -95,7 +95,7 @@ Prefer the run/artifact commands over hand-written HTTP, Python, or curl. Analys
|
|
|
95
95
|
| `report-version rollback` | `analysis.report_version.rollback` | Rollback a report version | `--report-id`, `--target-version` | Rollback result |
|
|
96
96
|
| `report-abnormal get` | `analysis.report_abnormal.get` | Inspect report abnormal dependencies | `--report-id` | Abnormal info |
|
|
97
97
|
| `dashboard-report add` | `analysis.dashboard_report.add` | Add reports to a dashboard | `--dashboard-id`, `--report-ids` | Add result |
|
|
98
|
-
| `dashboard list` | `analysis.dashboard.list` | Find accessible dashboards | `--project-id`, optional `--
|
|
98
|
+
| `dashboard list` | `analysis.dashboard.list` | Find accessible dashboards | `--project-id`, optional `--queries`, `--fields`, `--limit`, `--offset` | Paginated dashboard summaries |
|
|
99
99
|
| `dashboard create` | `analysis.dashboard.create` | Create a dashboard | `--project-id`, `--dashboard-name`, optional `--space-id`, `--folder-id` | Created dashboard |
|
|
100
100
|
| `dashboard get` | `analysis.dashboard.get` | Inspect one dashboard definition/share/report structure, including creator and creation/update time | `--project-id`, `--dashboard-id` | Dashboard detail |
|
|
101
101
|
| `dashboard update` | `analysis.dashboard.update` | Update settings or upsert a note | `--operation settings|note-upsert`, IDs, optional `--payload` | Update result |
|
|
@@ -131,7 +131,7 @@ Prefer the run/artifact commands over hand-written HTTP, Python, or curl. Analys
|
|
|
131
131
|
| `bi-panel-page-data export` | `analysis.bi_panel_page_data.export` | Large/long BI page data | same as run, optional `--artifact-format jsonl` | Async artifact descriptor |
|
|
132
132
|
| `project-space list` | `analysis.project_space.list` | Find accessible project spaces | `--project-id`, optional list filters | Paginated project spaces |
|
|
133
133
|
| `project-space get` | `analysis.project_space.get` | Inspect one project space | `--project-id`, `--space-id` | Project space detail |
|
|
134
|
-
| `favorite add` | `analysis.favorite.add` | Favorite dashboard/BI/folder | `--asset-id`, `--asset-type
|
|
134
|
+
| `favorite add` | `analysis.favorite.add` | Favorite dashboard/BI/folder | required `--asset-id`, `--asset-type`; optional `--space-id` | Favorite result |
|
|
135
135
|
| `favorite remove` | `analysis.favorite.remove` | Remove favorite | same as add | Remove result |
|
|
136
136
|
| `public-link create` | `analysis.public_link.create` | Generate public link | `--resource-type`, `--resource-id`, `--effective-at`, `--expires-at` | Link result |
|
|
137
137
|
| `public-link list` | `analysis.public_link.list` | List public links | `--project-id`, optional list filters | Paginated links |
|
|
@@ -213,10 +213,10 @@ Output is the gateway envelope; `data` contains members.
|
|
|
213
213
|
## Examples
|
|
214
214
|
|
|
215
215
|
```bash
|
|
216
|
-
ae-cli analysis dashboard list --project-id 1 --
|
|
216
|
+
ae-cli analysis dashboard list --project-id 1 --queries '["retention","留存"]' --limit 50
|
|
217
217
|
ae-cli analysis adhoc run --project-id 1 --model-type sql --definition '{"sql":"select * from events limit 20"}'
|
|
218
218
|
ae-cli analysis adhoc export --project-id 1 --model-type sql --definition '{"sql":"select * from events where country ${Text:country}","params":[{"name":"country","type":"text","value":"US"}]}' --artifact-format jsonl
|
|
219
|
-
ae-cli analysis report list --project-id 1 --
|
|
219
|
+
ae-cli analysis report list --project-id 1 --queries '["revenue","收入"]' --limit 50
|
|
220
220
|
ae-cli analysis report-data run --project-id 1 --report-ids '[1001]' --preview-rows 50
|
|
221
221
|
ae-cli analysis report-data run --project-id 1 --report-ids '[1001]' --filters '{"relation":"and","items":[{"field":{"name":"country","type":"user_property"},"operator":"eq","values":["US"]}]}' --group-by '[{"field":{"name":"country","type":"user_property"}}]' --sql-params '[{"name":"platform","value":"ios"}]' --preview-rows 50
|
|
222
222
|
ae-cli analysis drilldown-entities run --query-context-id ctx_0123456789abcdef0123456789abcdef --source '{"report_id":1001}' --coordinate '{"cohort_date":"2026-07-01","group_values":[],"period_index":1,"population":"retained"}'
|
|
@@ -7,10 +7,10 @@ Do not use for dashboard assets. Use `dashboard list`.
|
|
|
7
7
|
Command:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
ae-cli analysis bi-panel list --project-id <project_id> [--
|
|
10
|
+
ae-cli analysis bi-panel list --project-id <project_id> [--queries '["growth","retention"]'] [--limit 50] [--offset 0]
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
Input sends `project_id` and optional `
|
|
13
|
+
Input sends `project_id` and optional `queries`, `fields`, `limit`, `offset`. `queries` accepts 1 to 20 non-empty strings with OR semantics; matching rows include `matched_queries` and `matched_fields`, and singular `query` is not accepted. Prefer the default projection for discovery. Do not request generic `id`; BI panel summaries use fields such as `panel_id` and `name` when projected.
|
|
14
14
|
|
|
15
15
|
When `has_more=true`, continue only with the returned `next_offset`; do not calculate the next page locally.
|
|
16
16
|
|