@thinkingai/ae-cli 6.0.18 → 6.0.20
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 +7 -6
- package/README.zh.md +8 -7
- package/dist/index.js +11 -6
- package/dist/{te-agent-KZRIEN4N.js → te-agent-CYZUC4US.js} +543 -19
- package/dist/{te-analysis-VAR4KUOK.js → te-analysis-HJ22TUAA.js} +318 -40
- package/dist/te-audience-MYDE5WEH.js +590 -0
- package/dist/te-dataops-ZTS7XMXM.js +1842 -0
- package/dist/{te-kb-B62KFP2A.js → te-kb-OWM3RQRH.js} +46 -21
- package/dist/{te-meta-EPZGQN56.js → te-meta-JVO4QJBH.js} +28 -11
- package/package.json +1 -1
- package/skills/ae-agent/SKILL.md +103 -4
- package/skills/ae-analysis/SKILL.md +66 -19
- package/skills/ae-analysis/references/build_attribution_analysis_qp.md +60 -0
- package/skills/ae-analysis/references/build_cluster_definition.md +60 -0
- package/skills/ae-analysis/references/build_distribution_analysis_qp.md +65 -0
- package/skills/ae-analysis/references/build_heat_map_analysis_qp.md +52 -0
- package/skills/ae-analysis/references/build_interval_analysis_qp.md +58 -0
- package/skills/ae-analysis/references/build_path_analysis_qp.md +51 -0
- package/skills/ae-analysis/references/build_rank_list_analysis_qp.md +61 -0
- package/skills/ae-analysis/references/build_tag_definition.md +63 -0
- package/skills/ae-analysis/references/cancel_query.md +2 -3
- package/skills/ae-analysis/references/copy_dashboard.md +33 -0
- package/skills/ae-analysis/references/create_id_cluster.md +40 -0
- package/skills/ae-analysis/references/create_id_tag.md +39 -0
- package/skills/ae-analysis/references/delete_alert.md +27 -0
- package/skills/ae-analysis/references/delete_cluster.md +27 -0
- package/skills/ae-analysis/references/delete_dashboard.md +30 -0
- package/skills/ae-analysis/references/delete_metric.md +27 -0
- package/skills/ae-analysis/references/delete_report.md +27 -0
- package/skills/ae-analysis/references/delete_tag.md +27 -0
- package/skills/ae-analysis/references/drilldown_user_events.md +4 -4
- package/skills/ae-analysis/references/drilldown_users.md +3 -3
- package/skills/ae-analysis/references/freeze_dashboards.md +29 -0
- package/skills/ae-analysis/references/get_table_columns.md +11 -12
- package/skills/ae-analysis/references/list_cluster_members.md +4 -4
- package/skills/ae-analysis/references/list_clusters.md +3 -3
- package/skills/ae-analysis/references/list_dashboards.md +3 -3
- package/skills/ae-analysis/references/list_entities.md +1 -1
- package/skills/ae-analysis/references/list_events.md +3 -3
- package/skills/ae-analysis/references/list_metrics.md +2 -2
- package/skills/ae-analysis/references/list_properties.md +3 -3
- package/skills/ae-analysis/references/list_reports.md +3 -3
- package/skills/ae-analysis/references/list_spaces.md +27 -0
- package/skills/ae-analysis/references/list_tag_members.md +4 -4
- package/skills/ae-analysis/references/list_tags.md +2 -2
- package/skills/ae-analysis/references/move_dashboard.md +33 -0
- package/skills/ae-analysis/references/query_adhoc.md +2 -2
- package/skills/ae-analysis/references/query_bi_panel_data.md +2 -2
- package/skills/ae-analysis/references/query_dashboard_report_data.md +4 -4
- package/skills/ae-analysis/references/query_entity_details.md +4 -4
- package/skills/ae-analysis/references/query_event_details.md +3 -3
- package/skills/ae-analysis/references/query_report_data.md +37 -3
- package/skills/ae-analysis/references/update_id_cluster.md +36 -0
- package/skills/ae-analysis/references/update_id_tag.md +37 -0
- package/skills/ae-analysis/references/update_report.md +35 -0
- package/skills/ae-analysis-intent/SKILL.md +1 -1
- package/skills/ae-dataops/SKILL.md +54 -522
- package/skills/ae-dataops/references/dataops-flow-create.md +78 -75
- package/skills/ae-dataops/references/dataops-flow-monitor.md +58 -51
- package/skills/ae-dataops/references/dataops-integration.md +80 -41
- package/skills/ae-dataops/references/dataops-query.md +54 -53
- package/skills/ae-dataops/references/dataops-table.md +28 -59
- package/dist/te-audience-KMKYI2YJ.js +0 -400
- package/dist/te-dataops-GD3XBYCS.js +0 -1830
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
import {
|
|
2
|
+
callMcpTool,
|
|
3
|
+
parseMcpResult,
|
|
4
|
+
resolveMcpUrl
|
|
5
|
+
} from "./chunk-DMMEPCST.js";
|
|
6
|
+
import "./chunk-PN3OS34E.js";
|
|
7
|
+
import "./chunk-NOO24N7W.js";
|
|
8
|
+
import "./chunk-RSHMZ3LG.js";
|
|
9
|
+
import "./chunk-6W4QOZAL.js";
|
|
10
|
+
|
|
11
|
+
// src/commands/te-audience/shared.ts
|
|
12
|
+
function createMcpCommand(config) {
|
|
13
|
+
const toolName = config.command.slice(1);
|
|
14
|
+
const mcpService = config.mcpService || "analysis";
|
|
15
|
+
return {
|
|
16
|
+
service: "analysis_audience",
|
|
17
|
+
command: config.command,
|
|
18
|
+
description: config.description,
|
|
19
|
+
flags: config.flags,
|
|
20
|
+
risk: config.risk,
|
|
21
|
+
dryRun: (ctx) => ({
|
|
22
|
+
method: "tools/call",
|
|
23
|
+
url: resolveMcpUrl(ctx.mcpUrl(), ctx.host(), mcpService),
|
|
24
|
+
body: {
|
|
25
|
+
name: toolName,
|
|
26
|
+
arguments: config.buildArgs(ctx)
|
|
27
|
+
}
|
|
28
|
+
}),
|
|
29
|
+
execute: async (ctx) => {
|
|
30
|
+
const url = resolveMcpUrl(ctx.mcpUrl(), ctx.host(), mcpService);
|
|
31
|
+
const result = await callMcpTool(url, toolName, config.buildArgs(ctx), ctx.host());
|
|
32
|
+
return parseMcpResult(result);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function optionalString(ctx, name) {
|
|
37
|
+
const value = ctx.str(name);
|
|
38
|
+
return value === "" ? void 0 : value;
|
|
39
|
+
}
|
|
40
|
+
function optionalNumber(ctx, name) {
|
|
41
|
+
const value = ctx.str(name);
|
|
42
|
+
return value === "" ? void 0 : Number(value);
|
|
43
|
+
}
|
|
44
|
+
function optionalBoolean(ctx, name) {
|
|
45
|
+
const value = ctx.str(name);
|
|
46
|
+
return value === "" ? void 0 : ctx.bool(name);
|
|
47
|
+
}
|
|
48
|
+
function optionalJson(ctx, name) {
|
|
49
|
+
const value = ctx.str(name);
|
|
50
|
+
return value === "" ? void 0 : ctx.json(name);
|
|
51
|
+
}
|
|
52
|
+
function optionalJsonString(ctx, name) {
|
|
53
|
+
const value = optionalJson(ctx, name);
|
|
54
|
+
return value === void 0 ? void 0 : JSON.stringify(value);
|
|
55
|
+
}
|
|
56
|
+
function requiredJsonString(ctx, name) {
|
|
57
|
+
return JSON.stringify(ctx.json(name));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/commands/te-audience/cluster/list-clusters.ts
|
|
61
|
+
var listClusters = createMcpCommand({
|
|
62
|
+
command: "+list_clusters",
|
|
63
|
+
description: "List user cohort/segment cluster metadata with optional query/fields/limit/offset. Query performs fuzzy matching on clusterName, displayName, and remarks. Default returned fields: id, clusterName, displayName, remarks, clusterType, progress, usersNum.",
|
|
64
|
+
flags: [
|
|
65
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
66
|
+
{ name: "query", type: "string", required: false, desc: "Optional keyword filter. Fuzzy match is applied to clusterName, displayName, and remarks.", alias: "q" },
|
|
67
|
+
{ name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: id, clusterName, displayName, clusterType, progress, usersNum, refreshStatus, remarks. Default fields when omitted: id, clusterName, displayName, remarks, clusterType, progress, usersNum." },
|
|
68
|
+
{ name: "limit", type: "number", required: false, desc: "Optional page size, default 20, max 10000" },
|
|
69
|
+
{ name: "offset", type: "number", required: false, desc: "Optional page offset, default 0" }
|
|
70
|
+
],
|
|
71
|
+
risk: "read",
|
|
72
|
+
buildArgs: (ctx) => ({
|
|
73
|
+
projectId: ctx.num("project_id"),
|
|
74
|
+
query: optionalString(ctx, "query"),
|
|
75
|
+
fields: optionalJson(ctx, "fields"),
|
|
76
|
+
limit: optionalNumber(ctx, "limit"),
|
|
77
|
+
offset: optionalNumber(ctx, "offset")
|
|
78
|
+
})
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// src/commands/te-audience/cluster/get-clusters-by-name.ts
|
|
82
|
+
var getClustersByName = createMcpCommand({
|
|
83
|
+
command: "+get_clusters_by_name",
|
|
84
|
+
description: "Get cluster definition details in batch by cluster names",
|
|
85
|
+
flags: [
|
|
86
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
87
|
+
{ name: "names", type: "json", required: true, desc: 'Cluster name list JSON array, e.g. ["cluster_a","cluster_b"]' }
|
|
88
|
+
],
|
|
89
|
+
risk: "read",
|
|
90
|
+
buildArgs: (ctx) => ({
|
|
91
|
+
projectId: ctx.num("project_id"),
|
|
92
|
+
names: ctx.json("names")
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// src/commands/te-audience/cluster/list-cluster-members.ts
|
|
97
|
+
var listClusterMembers = createMcpCommand({
|
|
98
|
+
command: "+list_cluster_members",
|
|
99
|
+
description: "List members in the specified cluster with optional query/fields/limit/offset. For long-running or cancelable queries, requestId is required and must be provided before starting. For any query that may exceed the CLI or MCP HTTP timeout, generate requestId first so you can call +cancel_query --request_id <same value> if you stop waiting or the request returns fetch failed. If fetch failed, HTTP timeout, or caller timeout happens, the backend query may still be running. requestId must use mcp_<32 lowercase hex UUID>, for example mcp_0123456789abcdef0123456789abcdef. Submitted queries return metadata.requestId; pass that value to cancel_query(requestId) when the query is no longer needed. requestId is not auto-generated for MCP query tools because the caller must know it before the response for proactive cleanup. If requestId is omitted or blank, the backend returns REQUEST_ID_REQUIRED; invalid format returns INVALID_REQUEST_ID.",
|
|
100
|
+
flags: [
|
|
101
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
102
|
+
{ name: "cluster_name", type: "string", required: true, desc: "Cluster name" },
|
|
103
|
+
{ name: "property_names", type: "json", required: false, desc: "Optional user property name list JSON array" },
|
|
104
|
+
{ name: "use_cache", type: "boolean", required: false, desc: "Whether to use cache, default true" },
|
|
105
|
+
{ name: "query", type: "string", required: false, desc: "Optional keyword filter on #user_id and selected properties" },
|
|
106
|
+
{ name: "fields", type: "json", required: false, desc: "Optional return field list JSON array" },
|
|
107
|
+
{ name: "limit", type: "number", required: false, desc: "Optional page size, default 20, max 10000" },
|
|
108
|
+
{ name: "offset", type: "number", required: false, desc: "Optional page offset, default 0" },
|
|
109
|
+
{ name: "request_id", type: "string", required: true, desc: "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." },
|
|
110
|
+
{ name: "timeout_minutes", type: "number", required: false, desc: "Query timeout in minutes. If omitted, 30 minutes is used." }
|
|
111
|
+
],
|
|
112
|
+
risk: "read",
|
|
113
|
+
buildArgs: (ctx) => ({
|
|
114
|
+
projectId: ctx.num("project_id"),
|
|
115
|
+
clusterName: ctx.str("cluster_name"),
|
|
116
|
+
propertyNames: optionalJson(ctx, "property_names"),
|
|
117
|
+
useCache: optionalBoolean(ctx, "use_cache"),
|
|
118
|
+
query: optionalString(ctx, "query"),
|
|
119
|
+
fields: optionalJson(ctx, "fields"),
|
|
120
|
+
limit: optionalNumber(ctx, "limit"),
|
|
121
|
+
offset: optionalNumber(ctx, "offset"),
|
|
122
|
+
requestId: ctx.str("request_id"),
|
|
123
|
+
timeoutMinutes: optionalNumber(ctx, "timeout_minutes")
|
|
124
|
+
})
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// src/commands/te-audience/cluster/build-cluster-definition.ts
|
|
128
|
+
var buildClusterDefinition = createMcpCommand({
|
|
129
|
+
command: "+build_cluster_definition",
|
|
130
|
+
description: "Build a cluster definition JSON from structured intent. Call this before create_cluster or update_cluster to generate the definition field. For type=condition, event and property names are resolved from project metadata \u2014 do not guess. For type=sql, pass the SQL string directly. On success, pass the returned definition to create_cluster or update_cluster.",
|
|
131
|
+
flags: [
|
|
132
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
133
|
+
{ name: "type", type: "string", required: true, desc: "Cluster type: condition or sql" },
|
|
134
|
+
{ name: "conditions", type: "json", required: false, desc: 'For type=condition: main condition group JSON (required). Example: {"filts":[{"conditionType":"event","eventCondition":{...}}],"relation":"and"}' },
|
|
135
|
+
{ name: "include_filter", type: "json", required: false, desc: "For type=condition: global include condition group JSON (cluster-type conditions only)." },
|
|
136
|
+
{ name: "exclude_filter", type: "json", required: false, desc: "For type=condition: global exclude condition group JSON (cluster-type conditions only)." },
|
|
137
|
+
{ name: "sql", type: "string", required: false, desc: "For type=sql: SQL query returning a single column named #user_id." }
|
|
138
|
+
],
|
|
139
|
+
risk: "read",
|
|
140
|
+
buildArgs: (ctx) => ({
|
|
141
|
+
request: {
|
|
142
|
+
projectId: ctx.num("project_id"),
|
|
143
|
+
type: ctx.str("type"),
|
|
144
|
+
conditions: optionalJson(ctx, "conditions"),
|
|
145
|
+
includeFilter: optionalJson(ctx, "include_filter"),
|
|
146
|
+
excludeFilter: optionalJson(ctx, "exclude_filter"),
|
|
147
|
+
sql: optionalString(ctx, "sql")
|
|
148
|
+
}
|
|
149
|
+
})
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// src/commands/te-audience/cluster/create-cluster.ts
|
|
153
|
+
var createCluster = createMcpCommand({
|
|
154
|
+
command: "+create_cluster",
|
|
155
|
+
description: "Create a user cluster definition",
|
|
156
|
+
flags: [
|
|
157
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
158
|
+
{ name: "cluster_name", type: "string", required: true, desc: "Cluster name. Must start with a letter and contain only letters, digits, and underscores. Length: 1-80" },
|
|
159
|
+
{ name: "display_name", type: "string", required: true, desc: "Cluster display name. Length: 1-80" },
|
|
160
|
+
{ name: "type", type: "string", required: false, desc: "Cluster type: condition/sql. Default: condition" },
|
|
161
|
+
{ name: "definition", type: "json", required: true, desc: "Cluster definition JSON. Call +build_cluster_definition first to generate this value." },
|
|
162
|
+
{ name: "zone_offset", type: "number", required: false, desc: "Optional time zone offset, valid range: -12 to 14" },
|
|
163
|
+
{ name: "entity_id", type: "number", required: false, desc: "Optional entity ID. Use analysis_meta +list_entities to query" }
|
|
164
|
+
],
|
|
165
|
+
risk: "write",
|
|
166
|
+
buildArgs: (ctx) => ({
|
|
167
|
+
projectId: ctx.num("project_id"),
|
|
168
|
+
clusterName: ctx.str("cluster_name"),
|
|
169
|
+
displayName: ctx.str("display_name"),
|
|
170
|
+
type: optionalString(ctx, "type"),
|
|
171
|
+
definition: requiredJsonString(ctx, "definition"),
|
|
172
|
+
zoneOffset: optionalNumber(ctx, "zone_offset"),
|
|
173
|
+
entityId: optionalNumber(ctx, "entity_id")
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// src/commands/te-audience/cluster/update-cluster.ts
|
|
178
|
+
var updateCluster = createMcpCommand({
|
|
179
|
+
command: "+update_cluster",
|
|
180
|
+
description: "Update a user cluster definition",
|
|
181
|
+
flags: [
|
|
182
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
183
|
+
{ name: "cluster_name", type: "string", required: true, desc: "Cluster name" },
|
|
184
|
+
{ name: "display_name", type: "string", required: false, desc: "New cluster display name. Length: 1-80" },
|
|
185
|
+
{ name: "remark", type: "string", required: false, desc: "New cluster remark" },
|
|
186
|
+
{ name: "type", type: "string", required: false, desc: "New cluster type: condition/sql. Recommended when updating definition" },
|
|
187
|
+
{ name: "definition", type: "json", required: false, desc: "New cluster definition JSON. Call +build_cluster_definition first to generate this value." },
|
|
188
|
+
{ name: "zone_offset", type: "number", required: false, desc: "Optional time zone offset, valid range: -12 to 14" }
|
|
189
|
+
],
|
|
190
|
+
risk: "write",
|
|
191
|
+
buildArgs: (ctx) => ({
|
|
192
|
+
projectId: ctx.num("project_id"),
|
|
193
|
+
clusterName: ctx.str("cluster_name"),
|
|
194
|
+
displayName: optionalString(ctx, "display_name"),
|
|
195
|
+
remark: optionalString(ctx, "remark"),
|
|
196
|
+
type: optionalString(ctx, "type"),
|
|
197
|
+
definition: optionalJsonString(ctx, "definition"),
|
|
198
|
+
zoneOffset: optionalNumber(ctx, "zone_offset")
|
|
199
|
+
})
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// src/commands/te-audience/cluster/refresh-cluster.ts
|
|
203
|
+
var refreshCluster = createMcpCommand({
|
|
204
|
+
command: "+refresh_cluster",
|
|
205
|
+
description: "Trigger cluster recomputation asynchronously",
|
|
206
|
+
flags: [
|
|
207
|
+
{ name: "project_id", type: "number", required: true, alias: "p", desc: "Project ID" },
|
|
208
|
+
{ name: "cluster_name", type: "string", required: true, desc: "Cluster name" }
|
|
209
|
+
],
|
|
210
|
+
risk: "write",
|
|
211
|
+
mcpService: "te_analysis_extend",
|
|
212
|
+
buildArgs: (ctx) => ({
|
|
213
|
+
projectId: ctx.num("project_id"),
|
|
214
|
+
clusterName: ctx.str("cluster_name")
|
|
215
|
+
})
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// src/commands/te-audience/cluster/create-id-cluster.ts
|
|
219
|
+
var createIdCluster = createMcpCommand({
|
|
220
|
+
command: "+create_id_cluster",
|
|
221
|
+
description: "Create an ID cluster by providing CSV file content as plain text. The CSV should contain a single column of user IDs (no header row required). The operation is asynchronous.",
|
|
222
|
+
flags: [
|
|
223
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
224
|
+
{ name: "display_name", type: "string", required: true, desc: "Cluster display name (1-80 characters)" },
|
|
225
|
+
{ name: "file_content", type: "string", required: true, desc: "CSV file content as plain text. No header row, UTF-8 encoding. Each row contains one user ID. Max 100MB." },
|
|
226
|
+
{ name: "entity_id", type: "number", required: true, desc: "Entity ID to associate the cluster with" },
|
|
227
|
+
{ name: "cluster_name", type: "string", required: false, desc: "Optional cluster name (lowercase letters, digits, underscores, starts with a letter, max 80 chars). Auto-generated if omitted." },
|
|
228
|
+
{ name: "remarks", type: "string", required: false, desc: "Optional remarks (max 200 characters)" },
|
|
229
|
+
{ name: "main_column_name", type: "string", required: false, desc: "Optional main column name for ID matching" }
|
|
230
|
+
],
|
|
231
|
+
risk: "write",
|
|
232
|
+
buildArgs: (ctx) => ({
|
|
233
|
+
projectId: ctx.num("project_id"),
|
|
234
|
+
displayName: ctx.str("display_name"),
|
|
235
|
+
fileContent: ctx.str("file_content"),
|
|
236
|
+
entityId: ctx.num("entity_id"),
|
|
237
|
+
clusterName: optionalString(ctx, "cluster_name"),
|
|
238
|
+
remarks: optionalString(ctx, "remarks"),
|
|
239
|
+
mainColumnName: optionalString(ctx, "main_column_name")
|
|
240
|
+
})
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// src/commands/te-audience/cluster/update-id-cluster.ts
|
|
244
|
+
var updateIdCluster = createMcpCommand({
|
|
245
|
+
command: "+update_id_cluster",
|
|
246
|
+
description: "Update an existing ID cluster by re-uploading CSV file content as plain text. The cluster is identified by cluster_name. The operation is asynchronous.",
|
|
247
|
+
flags: [
|
|
248
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
249
|
+
{ name: "cluster_name", type: "string", required: true, desc: "Cluster name to update" },
|
|
250
|
+
{ name: "file_content", type: "string", required: true, desc: "New CSV file content as plain text. No header row, UTF-8 encoding. Each row contains one user ID. Max 100MB." },
|
|
251
|
+
{ name: "display_name", type: "string", required: false, desc: "Optional new display name" },
|
|
252
|
+
{ name: "remarks", type: "string", required: false, desc: "Optional new remarks (max 200 characters)" },
|
|
253
|
+
{ name: "main_column_name", type: "string", required: false, desc: "Optional new main column name for ID matching" }
|
|
254
|
+
],
|
|
255
|
+
risk: "write",
|
|
256
|
+
buildArgs: (ctx) => ({
|
|
257
|
+
projectId: ctx.num("project_id"),
|
|
258
|
+
clusterName: ctx.str("cluster_name"),
|
|
259
|
+
fileContent: ctx.str("file_content"),
|
|
260
|
+
displayName: optionalString(ctx, "display_name"),
|
|
261
|
+
remarks: optionalString(ctx, "remarks"),
|
|
262
|
+
mainColumnName: optionalString(ctx, "main_column_name")
|
|
263
|
+
})
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// src/commands/te-audience/cluster/delete-cluster.ts
|
|
267
|
+
var deleteCluster = createMcpCommand({
|
|
268
|
+
command: "+delete_cluster",
|
|
269
|
+
description: "Delete a cluster by clusterName. If dependencies exist, shows an influence list and requires --confirmed to proceed.",
|
|
270
|
+
flags: [
|
|
271
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
272
|
+
{ name: "cluster_name", type: "string", required: true, desc: "Cluster name to delete" },
|
|
273
|
+
{ name: "confirmed", type: "boolean", required: false, desc: "Pass after user explicitly confirms deletion despite listed dependencies" }
|
|
274
|
+
],
|
|
275
|
+
risk: "write",
|
|
276
|
+
buildArgs: (ctx) => ({
|
|
277
|
+
projectId: ctx.num("project_id"),
|
|
278
|
+
clusterName: ctx.str("cluster_name"),
|
|
279
|
+
confirmed: optionalBoolean(ctx, "confirmed")
|
|
280
|
+
})
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
// src/commands/te-audience/cluster/index.ts
|
|
284
|
+
var commands = [
|
|
285
|
+
listClusters,
|
|
286
|
+
getClustersByName,
|
|
287
|
+
listClusterMembers,
|
|
288
|
+
buildClusterDefinition,
|
|
289
|
+
createCluster,
|
|
290
|
+
updateCluster,
|
|
291
|
+
refreshCluster,
|
|
292
|
+
createIdCluster,
|
|
293
|
+
updateIdCluster,
|
|
294
|
+
deleteCluster
|
|
295
|
+
];
|
|
296
|
+
var cluster_default = commands;
|
|
297
|
+
|
|
298
|
+
// src/commands/te-audience/tag/list-tags.ts
|
|
299
|
+
var listTags = createMcpCommand({
|
|
300
|
+
command: "+list_tags",
|
|
301
|
+
description: "List tag metadata with optional query/fields/limit/offset. Query performs fuzzy matching on clusterName, displayName, and remarks. Default returned fields: id, clusterName, displayName, remarks, clusterType, subConditionTabType, progress, usersNum.",
|
|
302
|
+
flags: [
|
|
303
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
304
|
+
{ name: "query", type: "string", required: false, desc: "Optional keyword filter. Fuzzy match is applied to clusterName, displayName, and remarks.", alias: "q" },
|
|
305
|
+
{ name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: id, clusterName, displayName, clusterType, subConditionTabType, progress, usersNum, remarks. Default fields when omitted: id, clusterName, displayName, remarks, clusterType, subConditionTabType, progress, usersNum." },
|
|
306
|
+
{ name: "limit", type: "number", required: false, desc: "Optional page size, default 20, max 10000" },
|
|
307
|
+
{ name: "offset", type: "number", required: false, desc: "Optional page offset, default 0" }
|
|
308
|
+
],
|
|
309
|
+
risk: "read",
|
|
310
|
+
buildArgs: (ctx) => ({
|
|
311
|
+
projectId: ctx.num("project_id"),
|
|
312
|
+
query: optionalString(ctx, "query"),
|
|
313
|
+
fields: optionalJson(ctx, "fields"),
|
|
314
|
+
limit: optionalNumber(ctx, "limit"),
|
|
315
|
+
offset: optionalNumber(ctx, "offset")
|
|
316
|
+
})
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
// src/commands/te-audience/tag/get-tags-by-name.ts
|
|
320
|
+
var getTagsByName = createMcpCommand({
|
|
321
|
+
command: "+get_tags_by_name",
|
|
322
|
+
description: "Get tag definition details in batch by tag names",
|
|
323
|
+
flags: [
|
|
324
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
325
|
+
{ name: "names", type: "json", required: true, desc: 'Tag name list JSON array, e.g. ["tag_a","tag_b"]' }
|
|
326
|
+
],
|
|
327
|
+
risk: "read",
|
|
328
|
+
buildArgs: (ctx) => ({
|
|
329
|
+
projectId: ctx.num("project_id"),
|
|
330
|
+
names: ctx.json("names")
|
|
331
|
+
})
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
// src/commands/te-audience/tag/list-tag-members.ts
|
|
335
|
+
var listTagMembers = createMcpCommand({
|
|
336
|
+
command: "+list_tag_members",
|
|
337
|
+
description: "List members in the specified tag with optional query/fields/limit/offset. For long-running or cancelable queries, requestId is required and must be provided before starting. For any query that may exceed the CLI or MCP HTTP timeout, generate requestId first so you can call +cancel_query --request_id <same value> if you stop waiting or the request returns fetch failed. If fetch failed, HTTP timeout, or caller timeout happens, the backend query may still be running. requestId must use mcp_<32 lowercase hex UUID>, for example mcp_0123456789abcdef0123456789abcdef. Submitted queries return metadata.requestId; pass that value to cancel_query(requestId) when the query is no longer needed. requestId is not auto-generated for MCP query tools because the caller must know it before the response for proactive cleanup. If requestId is omitted or blank, the backend returns REQUEST_ID_REQUIRED; invalid format returns INVALID_REQUEST_ID.",
|
|
338
|
+
flags: [
|
|
339
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
340
|
+
{ name: "tag_name", type: "string", required: true, desc: "Tag name" },
|
|
341
|
+
{ name: "snapshot_date", type: "string", required: false, desc: "Optional tag snapshot date, format YYYY-MM-DD" },
|
|
342
|
+
{ name: "property_names", type: "json", required: false, desc: "Optional user property name list JSON array" },
|
|
343
|
+
{ name: "use_cache", type: "boolean", required: false, desc: "Whether to use cache, default true" },
|
|
344
|
+
{ name: "query", type: "string", required: false, desc: "Optional keyword filter on #user_id and selected properties" },
|
|
345
|
+
{ name: "fields", type: "json", required: false, desc: "Optional return field list JSON array" },
|
|
346
|
+
{ name: "limit", type: "number", required: false, desc: "Optional page size, default 20, max 10000" },
|
|
347
|
+
{ name: "offset", type: "number", required: false, desc: "Optional page offset, default 0" },
|
|
348
|
+
{ name: "request_id", type: "string", required: true, desc: "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." },
|
|
349
|
+
{ name: "timeout_minutes", type: "number", required: false, desc: "Query timeout in minutes. If omitted, 30 minutes is used." }
|
|
350
|
+
],
|
|
351
|
+
risk: "read",
|
|
352
|
+
buildArgs: (ctx) => ({
|
|
353
|
+
projectId: ctx.num("project_id"),
|
|
354
|
+
tagName: ctx.str("tag_name"),
|
|
355
|
+
snapshotDate: optionalString(ctx, "snapshot_date"),
|
|
356
|
+
propertyNames: optionalJson(ctx, "property_names"),
|
|
357
|
+
useCache: optionalBoolean(ctx, "use_cache"),
|
|
358
|
+
query: optionalString(ctx, "query"),
|
|
359
|
+
fields: optionalJson(ctx, "fields"),
|
|
360
|
+
limit: optionalNumber(ctx, "limit"),
|
|
361
|
+
offset: optionalNumber(ctx, "offset"),
|
|
362
|
+
requestId: ctx.str("request_id"),
|
|
363
|
+
timeoutMinutes: optionalNumber(ctx, "timeout_minutes")
|
|
364
|
+
})
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
// src/commands/te-audience/tag/build-tag-definition.ts
|
|
368
|
+
var buildTagDefinition = createMcpCommand({
|
|
369
|
+
command: "+build_tag_definition",
|
|
370
|
+
description: "Build a tag definition JSON from structured intent. Call this before create_tag or update_tag to generate the definition field. Supported types: condition (multi-value), metric (event metric), first_last (first/last occurrence), sql. For condition/metric/first_last types, event and property names are resolved from project metadata \u2014 do not guess. On success, pass the returned definition to create_tag or update_tag.",
|
|
371
|
+
flags: [
|
|
372
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
373
|
+
{ name: "type", type: "string", required: true, desc: "Tag type: condition / metric / first_last / sql" },
|
|
374
|
+
{ name: "condition_values", type: "json", required: false, desc: "For type=condition: list of tag value definitions JSON array. Each item defines a segment label and its conditions." },
|
|
375
|
+
{ name: "metric", type: "json", required: false, desc: "For type=metric: metric definition JSON. Fields: eventName, analysis, quota (property name), recentDay/startTime/endTime." },
|
|
376
|
+
{ name: "first_last", type: "json", required: false, desc: "For type=first_last: first/last occurrence definition JSON. Fields: eventName, firstEvent (true=first occurrence, false=last occurrence), calcPropType, property, recentDay/startTime/endTime." },
|
|
377
|
+
{ name: "sql", type: "string", required: false, desc: "For type=sql: SQL query returning two columns: #user_id and the tag value." }
|
|
378
|
+
],
|
|
379
|
+
risk: "read",
|
|
380
|
+
buildArgs: (ctx) => ({
|
|
381
|
+
request: {
|
|
382
|
+
projectId: ctx.num("project_id"),
|
|
383
|
+
type: ctx.str("type"),
|
|
384
|
+
conditionValues: optionalJson(ctx, "condition_values"),
|
|
385
|
+
metric: optionalJson(ctx, "metric"),
|
|
386
|
+
firstLast: optionalJson(ctx, "first_last"),
|
|
387
|
+
sql: optionalString(ctx, "sql")
|
|
388
|
+
}
|
|
389
|
+
})
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
// src/commands/te-audience/tag/create-tag.ts
|
|
393
|
+
var createTag = createMcpCommand({
|
|
394
|
+
command: "+create_tag",
|
|
395
|
+
description: "Create a user tag definition",
|
|
396
|
+
flags: [
|
|
397
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
398
|
+
{ name: "tag_name", type: "string", required: true, desc: "Tag name. Must start with a letter and contain only letters, digits, and underscores. Length: 1-80" },
|
|
399
|
+
{ name: "display_name", type: "string", required: true, desc: "Tag display name. Length: 1-80" },
|
|
400
|
+
{ name: "type", type: "string", required: false, desc: "Tag type: condition/metric/first_last/sql. Default: condition" },
|
|
401
|
+
{ name: "definition", type: "json", required: true, desc: "Tag definition JSON. Call +build_tag_definition first to generate this value." },
|
|
402
|
+
{ name: "zone_offset", type: "number", required: false, desc: "Optional time zone offset, valid range: -12 to 14" },
|
|
403
|
+
{ name: "entity_id", type: "number", required: false, desc: "Optional entity ID. Use analysis_meta +list_entities to query" }
|
|
404
|
+
],
|
|
405
|
+
risk: "write",
|
|
406
|
+
buildArgs: (ctx) => ({
|
|
407
|
+
projectId: ctx.num("project_id"),
|
|
408
|
+
tagName: ctx.str("tag_name"),
|
|
409
|
+
displayName: ctx.str("display_name"),
|
|
410
|
+
type: optionalString(ctx, "type"),
|
|
411
|
+
definition: requiredJsonString(ctx, "definition"),
|
|
412
|
+
zoneOffset: optionalNumber(ctx, "zone_offset"),
|
|
413
|
+
entityId: optionalNumber(ctx, "entity_id")
|
|
414
|
+
})
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
// src/commands/te-audience/tag/update-tag.ts
|
|
418
|
+
var updateTag = createMcpCommand({
|
|
419
|
+
command: "+update_tag",
|
|
420
|
+
description: "Update a user tag definition",
|
|
421
|
+
flags: [
|
|
422
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
423
|
+
{ name: "tag_name", type: "string", required: true, desc: "Tag name" },
|
|
424
|
+
{ name: "display_name", type: "string", required: false, desc: "New tag display name. Length: 1-80" },
|
|
425
|
+
{ name: "remark", type: "string", required: false, desc: "New tag remark" },
|
|
426
|
+
{ name: "type", type: "string", required: false, desc: "New tag type: condition/metric/first_last/sql" },
|
|
427
|
+
{ name: "definition", type: "json", required: false, desc: "New tag definition JSON. Call +build_tag_definition first to generate this value." },
|
|
428
|
+
{ name: "zone_offset", type: "number", required: false, desc: "Optional time zone offset, valid range: -12 to 14" }
|
|
429
|
+
],
|
|
430
|
+
risk: "write",
|
|
431
|
+
buildArgs: (ctx) => ({
|
|
432
|
+
projectId: ctx.num("project_id"),
|
|
433
|
+
tagName: ctx.str("tag_name"),
|
|
434
|
+
displayName: optionalString(ctx, "display_name"),
|
|
435
|
+
remark: optionalString(ctx, "remark"),
|
|
436
|
+
type: optionalString(ctx, "type"),
|
|
437
|
+
definition: optionalJsonString(ctx, "definition"),
|
|
438
|
+
zoneOffset: optionalNumber(ctx, "zone_offset")
|
|
439
|
+
})
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
// src/commands/te-audience/tag/refresh-tag.ts
|
|
443
|
+
var refreshTag = createMcpCommand({
|
|
444
|
+
command: "+refresh_tag",
|
|
445
|
+
description: "Trigger tag recomputation asynchronously",
|
|
446
|
+
flags: [
|
|
447
|
+
{ name: "project_id", type: "number", required: true, alias: "p", desc: "Project ID" },
|
|
448
|
+
{ name: "tag_name", type: "string", required: true, desc: "Tag name" }
|
|
449
|
+
],
|
|
450
|
+
risk: "write",
|
|
451
|
+
mcpService: "te_analysis_extend",
|
|
452
|
+
buildArgs: (ctx) => ({
|
|
453
|
+
projectId: ctx.num("project_id"),
|
|
454
|
+
tagName: ctx.str("tag_name")
|
|
455
|
+
})
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
// src/commands/te-audience/tag/create-id-tag.ts
|
|
459
|
+
var createIdTag = createMcpCommand({
|
|
460
|
+
command: "+create_id_tag",
|
|
461
|
+
description: "Create an ID tag by providing CSV file content as plain text. The CSV should contain two columns: user ID and tag value. The operation is asynchronous.",
|
|
462
|
+
flags: [
|
|
463
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
464
|
+
{ name: "display_name", type: "string", required: true, desc: "Tag display name (1-80 characters)" },
|
|
465
|
+
{ name: "file_content", type: "string", required: true, desc: "CSV file content as plain text. No header row, UTF-8 encoding. Column 1: user ID. Column 2: tag value (optional). Example row: user_001,gold_member. Max 100MB." },
|
|
466
|
+
{ name: "entity_id", type: "number", required: true, desc: "Entity ID to associate the tag with" },
|
|
467
|
+
{ name: "tag_name", type: "string", required: false, desc: "Optional tag name (letters/digits/underscores, starts with a letter, max 80 chars). Auto-generated if omitted." },
|
|
468
|
+
{ name: "remarks", type: "string", required: false, desc: "Optional remarks (max 200 characters)" },
|
|
469
|
+
{ name: "main_column_name", type: "string", required: false, desc: "Optional main column name for ID matching" }
|
|
470
|
+
],
|
|
471
|
+
risk: "write",
|
|
472
|
+
buildArgs: (ctx) => ({
|
|
473
|
+
projectId: ctx.num("project_id"),
|
|
474
|
+
displayName: ctx.str("display_name"),
|
|
475
|
+
fileContent: ctx.str("file_content"),
|
|
476
|
+
entityId: ctx.num("entity_id"),
|
|
477
|
+
tagName: optionalString(ctx, "tag_name"),
|
|
478
|
+
remarks: optionalString(ctx, "remarks"),
|
|
479
|
+
mainColumnName: optionalString(ctx, "main_column_name")
|
|
480
|
+
})
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
// src/commands/te-audience/tag/update-id-tag.ts
|
|
484
|
+
var updateIdTag = createMcpCommand({
|
|
485
|
+
command: "+update_id_tag",
|
|
486
|
+
description: "Update an existing ID tag by re-uploading CSV file content as plain text. The tag is identified by tag_name. The operation is asynchronous.",
|
|
487
|
+
flags: [
|
|
488
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
489
|
+
{ name: "tag_name", type: "string", required: true, desc: "Tag name to update" },
|
|
490
|
+
{ name: "file_content", type: "string", required: true, desc: "New CSV file content as plain text. No header row, UTF-8 encoding. Column 1: user ID. Column 2: tag value (optional). Example row: user_001,gold_member. Max 100MB." },
|
|
491
|
+
{ name: "display_name", type: "string", required: false, desc: "Optional new display name" },
|
|
492
|
+
{ name: "remarks", type: "string", required: false, desc: "Optional new remarks (max 200 characters)" },
|
|
493
|
+
{ name: "entity_id", type: "number", required: false, desc: "Entity ID to associate the tag with" },
|
|
494
|
+
{ name: "main_column_name", type: "string", required: false, desc: "Optional new main column name for ID matching" }
|
|
495
|
+
],
|
|
496
|
+
risk: "write",
|
|
497
|
+
buildArgs: (ctx) => ({
|
|
498
|
+
projectId: ctx.num("project_id"),
|
|
499
|
+
tagName: ctx.str("tag_name"),
|
|
500
|
+
fileContent: ctx.str("file_content"),
|
|
501
|
+
displayName: optionalString(ctx, "display_name"),
|
|
502
|
+
remarks: optionalString(ctx, "remarks"),
|
|
503
|
+
entityId: optionalNumber(ctx, "entity_id"),
|
|
504
|
+
mainColumnName: optionalString(ctx, "main_column_name")
|
|
505
|
+
})
|
|
506
|
+
});
|
|
507
|
+
|
|
508
|
+
// src/commands/te-audience/tag/delete-tag.ts
|
|
509
|
+
var deleteTag = createMcpCommand({
|
|
510
|
+
command: "+delete_tag",
|
|
511
|
+
description: "Delete a tag by tagName. If dependencies exist, shows an influence list and requires --confirmed to proceed.",
|
|
512
|
+
flags: [
|
|
513
|
+
{ name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
|
|
514
|
+
{ name: "tag_name", type: "string", required: true, desc: "Tag name to delete" },
|
|
515
|
+
{ name: "confirmed", type: "boolean", required: false, desc: "Pass after user explicitly confirms deletion despite listed dependencies" }
|
|
516
|
+
],
|
|
517
|
+
risk: "write",
|
|
518
|
+
buildArgs: (ctx) => ({
|
|
519
|
+
projectId: ctx.num("project_id"),
|
|
520
|
+
tagName: ctx.str("tag_name"),
|
|
521
|
+
confirmed: optionalBoolean(ctx, "confirmed")
|
|
522
|
+
})
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
// src/commands/te-audience/tag/index.ts
|
|
526
|
+
var commands2 = [
|
|
527
|
+
listTags,
|
|
528
|
+
getTagsByName,
|
|
529
|
+
listTagMembers,
|
|
530
|
+
buildTagDefinition,
|
|
531
|
+
createTag,
|
|
532
|
+
updateTag,
|
|
533
|
+
refreshTag,
|
|
534
|
+
createIdTag,
|
|
535
|
+
updateIdTag,
|
|
536
|
+
deleteTag
|
|
537
|
+
];
|
|
538
|
+
var tag_default = commands2;
|
|
539
|
+
|
|
540
|
+
// src/commands/te-audience/schema/get-cluster-definition-schema.ts
|
|
541
|
+
var getClusterDefinitionSchema = createMcpCommand({
|
|
542
|
+
command: "+get_cluster_definition_schema",
|
|
543
|
+
description: "Get the cluster definition schema by type and optional response mode",
|
|
544
|
+
flags: [
|
|
545
|
+
{ name: "cluster_type", type: "string", required: true, desc: "Cluster type: condition/sql" },
|
|
546
|
+
{ name: "response_mode", type: "string", required: false, desc: "Optional response mode: base/examples/full" },
|
|
547
|
+
{ name: "condition_subtype", type: "string", required: false, desc: "Optional subtype when cluster_type=condition: core/behavior_seq/all" }
|
|
548
|
+
],
|
|
549
|
+
risk: "read",
|
|
550
|
+
buildArgs: (ctx) => ({
|
|
551
|
+
clusterType: ctx.str("cluster_type"),
|
|
552
|
+
responseMode: optionalString(ctx, "response_mode"),
|
|
553
|
+
conditionSubtype: optionalString(ctx, "condition_subtype")
|
|
554
|
+
})
|
|
555
|
+
});
|
|
556
|
+
|
|
557
|
+
// src/commands/te-audience/schema/get-tag-definition-schema.ts
|
|
558
|
+
var getTagDefinitionSchema = createMcpCommand({
|
|
559
|
+
command: "+get_tag_definition_schema",
|
|
560
|
+
description: "Get the tag definition schema by type and optional response mode",
|
|
561
|
+
flags: [
|
|
562
|
+
{ name: "type", type: "string", required: true, desc: "Tag type: condition/metric/first_last/sql" },
|
|
563
|
+
{ name: "response_mode", type: "string", required: false, desc: "Optional response mode: base/examples/full" },
|
|
564
|
+
{ name: "condition_subtype", type: "string", required: false, desc: "Optional subtype when type=condition: core/behavior_seq/all" }
|
|
565
|
+
],
|
|
566
|
+
risk: "read",
|
|
567
|
+
buildArgs: (ctx) => ({
|
|
568
|
+
type: ctx.str("type"),
|
|
569
|
+
responseMode: optionalString(ctx, "response_mode"),
|
|
570
|
+
conditionSubtype: optionalString(ctx, "condition_subtype")
|
|
571
|
+
})
|
|
572
|
+
});
|
|
573
|
+
|
|
574
|
+
// src/commands/te-audience/schema/index.ts
|
|
575
|
+
var commands3 = [
|
|
576
|
+
getClusterDefinitionSchema,
|
|
577
|
+
getTagDefinitionSchema
|
|
578
|
+
];
|
|
579
|
+
var schema_default = commands3;
|
|
580
|
+
|
|
581
|
+
// src/commands/te-audience/index.ts
|
|
582
|
+
var commands4 = [
|
|
583
|
+
...cluster_default,
|
|
584
|
+
...tag_default,
|
|
585
|
+
...schema_default
|
|
586
|
+
];
|
|
587
|
+
var te_audience_default = commands4;
|
|
588
|
+
export {
|
|
589
|
+
te_audience_default as default
|
|
590
|
+
};
|