@thinkingai/ae-cli 6.1.10 → 6.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/README.md +25 -3
  2. package/README.zh.md +25 -3
  3. package/dist/{auth-56Z45UVR.js → auth-GDV3H5I4.js} +18 -8
  4. package/dist/{auth-ENM3FE6L.js → auth-NN55553T.js} +3 -3
  5. package/dist/{capability-2H6PAOA3.js → capability-TPORIKRQ.js} +19 -15
  6. package/dist/{capability-YPOQX6PL.js → capability-VQNC5CF7.js} +19 -15
  7. package/dist/chunk-4NN5IWVN.js +26 -0
  8. package/dist/{chunk-DB4Q3ANU.js → chunk-6A2FUCIS.js} +3 -3
  9. package/dist/{chunk-PVBYJWC2.js → chunk-7KQWSBSL.js} +4 -4
  10. package/dist/{chunk-24BAVOX3.js → chunk-AXDXJTPC.js} +3 -1
  11. package/dist/{chunk-CPVTECJ3.js → chunk-DT6Y3TD7.js} +5 -5
  12. package/dist/{chunk-EGEIXA2Z.js → chunk-DWO43OIB.js} +0 -248
  13. package/dist/{chunk-V6FR6WTW.js → chunk-GJJA4CQZ.js} +34 -2
  14. package/dist/{chunk-RGXCNC4N.js → chunk-GS2P7LFD.js} +50 -17
  15. package/dist/{chunk-LYVNONC4.js → chunk-JHENBQ5B.js} +35 -0
  16. package/dist/{chunk-3P3562ZX.js → chunk-MVDZ7DBQ.js} +5 -5
  17. package/dist/{chunk-LCXU3AAT.js → chunk-NBPKWKRA.js} +2 -2
  18. package/dist/{chunk-HQ2A7ITL.js → chunk-RBNKI5ZW.js} +50 -17
  19. package/dist/{chunk-LHVM35J4.js → chunk-TS6BUGUY.js} +4 -4
  20. package/dist/chunk-TUKQZTMI.js +250 -0
  21. package/dist/{chunk-J7MZHDHQ.js → chunk-VKD5WQKN.js} +5 -5
  22. package/dist/{chunk-3KI3RRXX.js → chunk-VTXHDCBW.js} +3 -3
  23. package/dist/{chunk-KTYR3U6D.js → chunk-YTG6Q75E.js} +10 -6
  24. package/dist/{chunk-IR4ZLVPW.js → chunk-YV52FB5G.js} +25 -3
  25. package/dist/{chunk-E7UXXHO3.js → chunk-Z3OXWCIA.js} +3 -3
  26. package/dist/{cli-token-4SBMXAUK.js → cli-token-GL5MS5FK.js} +4 -4
  27. package/dist/{client-PP5FETMW.js → client-DAIPF7XN.js} +4 -4
  28. package/dist/{community-report-client-KK2QBANO.js → community-report-client-M2RW4MXD.js} +2 -2
  29. package/dist/config-4VZNLBKF.js +489 -0
  30. package/dist/index.js +94 -35
  31. package/dist/memory-RWJW4XFO.js +892 -0
  32. package/dist/memory-VO2ZJCRT.js +892 -0
  33. package/dist/{metadata-JIQ77HFY.js → metadata-YGTHR2XJ.js} +8 -8
  34. package/dist/{metadata-AN3YFZEV.js → metadata-ZRN2GHPN.js} +8 -8
  35. package/dist/{model-JASQVOFD.js → model-CLUIK3K5.js} +7 -5
  36. package/dist/{raw-XJCAT3HX.js → raw-52B4UKO4.js} +8 -7
  37. package/dist/sync-3REDHGY6.js +10259 -0
  38. package/dist/{te-agent-JHUG6DVV.js → te-agent-XNPELAKX.js} +580 -84
  39. package/dist/{te-analysis-ITKTO6JS.js → te-analysis-GJI5FZUL.js} +1152 -13
  40. package/dist/{te-analysis-RAC67YYD.js → te-analysis-N2BRDJZ5.js} +1152 -13
  41. package/dist/{te-community-QOYIYEJI.js → te-community-SQXKE5OO.js} +7 -7
  42. package/dist/{te-community-UFKI6ONP.js → te-community-TYSNU3NQ.js} +7 -7
  43. package/dist/{te-dataops-PZQ5NQLY.js → te-dataops-5TM7WZDI.js} +370 -189
  44. package/dist/{te-dataops-XTWVTJCA.js → te-dataops-OWIADNSM.js} +370 -189
  45. package/dist/{te-engage-NLZUPSBK.js → te-engage-F7V55KVW.js} +333 -105
  46. package/dist/{te-engage-E7F4HTXU.js → te-engage-FMYAYCNV.js} +333 -105
  47. package/dist/{te-experiment-N63WF7XA.js → te-experiment-JWXOYJ3W.js} +83 -10
  48. package/dist/{te-experiment-D32TB6ZB.js → te-experiment-UPDMHCAJ.js} +83 -10
  49. package/dist/{te-kb-E7NSCBRB.js → te-kb-VRMEY3D4.js} +6 -6
  50. package/dist/{te-meta-GBDTMPEL.js → te-meta-53BVXPFI.js} +7 -7
  51. package/dist/{te-meta-ZTLTSHXC.js → te-meta-TOCBPBXI.js} +7 -7
  52. package/dist/{te-system-AH7DMCAQ.js → te-system-XGS5EQIQ.js} +4 -4
  53. package/dist/{te-team-BQ3SKSZV.js → te-team-BZRDV2CM.js} +7 -7
  54. package/dist/{update-DKG6UXEM.js → update-HEDXGOJH.js} +8 -6
  55. package/package.json +4 -1
  56. package/skills/ae-agent/SKILL.md +178 -16
  57. package/skills/ae-agent/references/add-skill.md +22 -10
  58. package/skills/ae-agent/references/edit-skill.md +24 -14
  59. package/skills/ae-agent/references/find-archived-conversations.md +82 -0
  60. package/skills/ae-agent/references/restore-conversation.md +54 -0
  61. package/skills/ae-agent/references/upload-skill.md +24 -14
  62. package/skills/ae-analysis/SKILL.md +1 -1
  63. package/skills/ae-analysis/references/command_index.md +104 -42
  64. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  65. package/skills/ae-analysis/references/project_access_detail_get.md +3 -3
  66. package/skills/ae-analysis/references/project_data_power_delete.md +3 -3
  67. package/skills/ae-analysis/references/project_data_power_get.md +3 -3
  68. package/skills/ae-analysis/references/project_data_power_list.md +3 -3
  69. package/skills/ae-analysis/references/project_data_power_upsert.md +3 -3
  70. package/skills/ae-analysis/references/project_entity_create.md +3 -3
  71. package/skills/ae-analysis/references/project_entity_delete.md +3 -3
  72. package/skills/ae-analysis/references/project_entity_event_list.md +3 -3
  73. package/skills/ae-analysis/references/project_entity_get.md +3 -3
  74. package/skills/ae-analysis/references/project_entity_list.md +3 -3
  75. package/skills/ae-analysis/references/project_entity_update.md +3 -3
  76. package/skills/ae-analysis/references/project_function_list.md +3 -3
  77. package/skills/ae-analysis/references/project_info_create.md +25 -0
  78. package/skills/ae-analysis/references/project_info_delete.md +24 -0
  79. package/skills/ae-analysis/references/project_info_get.md +3 -3
  80. package/skills/ae-analysis/references/project_info_list.md +3 -3
  81. package/skills/ae-analysis/references/project_info_update.md +3 -3
  82. package/skills/ae-analysis/references/project_mark_time_create.md +3 -3
  83. package/skills/ae-analysis/references/project_mark_time_delete.md +3 -3
  84. package/skills/ae-analysis/references/project_mark_time_list.md +3 -3
  85. package/skills/ae-analysis/references/project_mark_time_update.md +3 -3
  86. package/skills/ae-analysis/references/project_member_add.md +3 -3
  87. package/skills/ae-analysis/references/project_member_batch_update.md +3 -3
  88. package/skills/ae-analysis/references/project_member_candidate_list.md +3 -3
  89. package/skills/ae-analysis/references/project_member_handover_export.md +3 -3
  90. package/skills/ae-analysis/references/project_member_handover_run.md +3 -3
  91. package/skills/ae-analysis/references/project_member_import.md +3 -3
  92. package/skills/ae-analysis/references/project_member_list.md +3 -3
  93. package/skills/ae-analysis/references/project_member_receiver_list.md +3 -3
  94. package/skills/ae-analysis/references/project_member_remove.md +3 -3
  95. package/skills/ae-analysis/references/project_member_update.md +3 -3
  96. package/skills/ae-analysis/references/project_owner_update.md +3 -3
  97. package/skills/ae-analysis/references/project_permission_binding_list.md +3 -3
  98. package/skills/ae-analysis/references/project_receive_status_update.md +3 -3
  99. package/skills/ae-analysis/references/project_role_delete.md +3 -3
  100. package/skills/ae-analysis/references/project_role_function_list.md +3 -3
  101. package/skills/ae-analysis/references/project_role_get.md +3 -3
  102. package/skills/ae-analysis/references/project_role_list.md +3 -3
  103. package/skills/ae-analysis/references/project_role_upsert.md +3 -3
  104. package/skills/ae-analysis/references/project_role_user_list.md +3 -3
  105. package/skills/ae-analysis/references/project_space_list.md +1 -1
  106. package/skills/ae-analysis/references/project_timezone_get.md +3 -3
  107. package/skills/ae-analysis/references/project_timezone_overview.md +3 -3
  108. package/skills/ae-analysis/references/project_timezone_update.md +3 -3
  109. package/skills/ae-analysis/references/project_user_id_items_update.md +3 -3
  110. package/skills/ae-analysis/references/system_admin_function_list.md +22 -0
  111. package/skills/ae-analysis/references/system_admin_function_update.md +26 -0
  112. package/skills/ae-analysis/references/system_admin_list.md +21 -0
  113. package/skills/ae-analysis/references/system_admin_remove.md +25 -0
  114. package/skills/ae-analysis/references/system_admin_upsert.md +25 -0
  115. package/skills/ae-analysis/references/system_function_list.md +21 -0
  116. package/skills/ae-analysis/references/system_member_add.md +25 -0
  117. package/skills/ae-analysis/references/system_member_candidate_list.md +22 -0
  118. package/skills/ae-analysis/references/system_member_delete.md +25 -0
  119. package/skills/ae-analysis/references/system_member_list.md +24 -0
  120. package/skills/ae-analysis/references/system_member_mfa_unbind.md +25 -0
  121. package/skills/ae-analysis/references/system_member_password_reset.md +32 -0
  122. package/skills/ae-analysis/references/system_member_project_batch_update.md +27 -0
  123. package/skills/ae-analysis/references/system_member_status_update.md +26 -0
  124. package/skills/ae-analysis/references/system_member_update.md +23 -0
  125. package/skills/ae-analysis/references/system_mfa_get.md +21 -0
  126. package/skills/ae-analysis/references/system_mfa_update.md +25 -0
  127. package/skills/ae-analysis/references/system_node_monitor_list.md +24 -0
  128. package/skills/ae-analysis/references/system_oauth2_update.md +22 -0
  129. package/skills/ae-analysis/references/system_ops_alert_contact_delete.md +25 -0
  130. package/skills/ae-analysis/references/system_ops_alert_contact_list.md +23 -0
  131. package/skills/ae-analysis/references/system_ops_alert_contact_test.md +29 -0
  132. package/skills/ae-analysis/references/system_ops_alert_contact_upsert.md +39 -0
  133. package/skills/ae-analysis/references/system_preference_get.md +21 -0
  134. package/skills/ae-analysis/references/system_preference_update.md +22 -0
  135. package/skills/ae-analysis/references/system_project_usage_list.md +28 -0
  136. package/skills/ae-analysis/references/system_query_alert_rule_list.md +21 -0
  137. package/skills/ae-analysis/references/system_query_alert_rule_update.md +26 -0
  138. package/skills/ae-analysis/references/system_query_monitor_overview.md +26 -0
  139. package/skills/ae-analysis/references/system_query_task_cancel.md +25 -0
  140. package/skills/ae-analysis/references/system_query_task_export.md +49 -0
  141. package/skills/ae-analysis/references/system_query_task_get.md +23 -0
  142. package/skills/ae-analysis/references/system_query_task_list.md +35 -0
  143. package/skills/ae-analysis/references/system_query_task_options.md +27 -0
  144. package/skills/ae-analysis/references/system_receiver_address_delete.md +26 -0
  145. package/skills/ae-analysis/references/system_receiver_address_overview.md +21 -0
  146. package/skills/ae-analysis/references/system_receiver_address_project_list.md +21 -0
  147. package/skills/ae-analysis/references/system_receiver_address_promote.md +24 -0
  148. package/skills/ae-analysis/references/system_receiver_address_upsert.md +27 -0
  149. package/skills/ae-analysis/references/system_receiver_detection_get.md +22 -0
  150. package/skills/ae-analysis/references/system_receiver_detection_run.md +22 -0
  151. package/skills/ae-analysis/references/system_receiver_detection_update.md +25 -0
  152. package/skills/ae-analysis/references/system_role_delete.md +26 -0
  153. package/skills/ae-analysis/references/system_role_function_list.md +22 -0
  154. package/skills/ae-analysis/references/system_role_get.md +22 -0
  155. package/skills/ae-analysis/references/system_role_list.md +24 -0
  156. package/skills/ae-analysis/references/system_role_upsert.md +27 -0
  157. package/skills/ae-analysis/references/system_role_user_list.md +22 -0
  158. package/skills/ae-analysis/references/system_seat_list.md +25 -0
  159. package/skills/ae-analysis/references/system_seat_update.md +26 -0
  160. package/skills/ae-analysis/references/system_smtp_delete.md +24 -0
  161. package/skills/ae-analysis/references/system_smtp_get.md +21 -0
  162. package/skills/ae-analysis/references/system_smtp_test.md +22 -0
  163. package/skills/ae-analysis/references/system_smtp_upsert.md +31 -0
  164. package/skills/ae-analysis/references/system_third_party_login_disable.md +25 -0
  165. package/skills/ae-analysis/references/system_third_party_login_list.md +21 -0
  166. package/skills/ae-analysis/references/system_third_party_login_upsert.md +33 -0
  167. package/skills/ae-analysis/references/system_usage_overview.md +21 -0
  168. package/skills/ae-analysis/references/system_usage_trend_export.md +44 -0
  169. package/skills/ae-analysis/references/system_usage_trend_query.md +28 -0
  170. package/skills/ae-dataops/SKILL.md +1 -1
  171. package/skills/ae-dataops/references/dataops-flow-create.md +51 -16
  172. package/skills/ae-engage/SKILL.md +56 -26
  173. package/skills/ae-engage/references/activity-activity.md +3 -0
  174. package/skills/ae-engage/references/activity-approval.md +12 -4
  175. package/skills/ae-engage/references/activity-task.md +21 -6
  176. package/skills/ae-engage/references/activity-topic.md +31 -13
  177. package/skills/ae-engage/references/add-channel.md +170 -41
  178. package/skills/ae-engage/references/build-task-save-guide.md +40 -27
  179. package/skills/ae-engage/references/channel-update-config.md +3 -2
  180. package/skills/ae-engage/references/common-metric.md +48 -120
  181. package/skills/ae-engage/references/flow-detail.md +13 -0
  182. package/skills/ae-engage/references/preset-event.md +12 -32
  183. package/skills/ae-engage/references/save-flow.md +127 -64
  184. package/skills/ae-engage/references/save-task.md +197 -59
  185. package/skills/ae-engage/references/scene-config-metric.md +3 -0
  186. package/skills/ae-engage/references/scene-preset-metric.md +8 -37
  187. package/skills/ae-engage/references/scene-strategy-audience.md +51 -643
  188. package/skills/ae-engage/references/scene-strategy.md +6 -6
  189. package/skills/ae-engage/references/task-detail.md +10 -0
  190. package/skills/ae-engage/references/task-submit-approval.md +45 -0
  191. package/skills/ae-engage/references/validate-flow-node-config.md +1 -1
  192. package/skills/ae-experiment/SKILL.md +21 -1
  193. package/skills/ae-experiment/references/check_experiment_ready.md +2 -0
  194. package/skills/ae-experiment/references/query_experiment_detail.md +6 -0
  195. package/skills/ae-experiment/references/query_experiment_list.md +4 -0
  196. package/skills/ae-experiment/references/query_experiment_list_archived.md +3 -0
  197. package/skills/ae-experiment/references/query_metric_detail.md +5 -0
  198. package/skills/ae-experiment/references/query_metric_list.md +3 -0
  199. package/skills/ae-experiment/references/save_experiment.md +46 -3
  200. package/skills/ae-experiment/references/save_metric.md +62 -0
  201. package/skills/ae-experiment/references/save_submit_experiment.md +3 -0
  202. package/skills/ae-experiment-design/SKILL.md +149 -0
  203. package/skills/ae-experiment-design/agents/openai.yaml +4 -0
  204. package/skills/ae-experiment-design/references/client-experiment-sdk.md +147 -0
  205. package/skills/ae-experiment-design/references/experiment-creation.md +108 -0
  206. package/skills/ae-experiment-design/references/experiment-sdk-contract.md +100 -0
  207. package/skills/ae-experiment-design/references/exposure-contract.md +91 -0
  208. package/skills/ae-experiment-design/references/hybrid-experiment-sdk.md +74 -0
  209. package/skills/ae-experiment-design/references/metric-readiness.md +143 -0
  210. package/skills/ae-experiment-design/references/platform-operations.md +99 -0
  211. package/skills/ae-experiment-design/references/sdk-index.md +76 -0
  212. package/skills/ae-experiment-design/references/sdk-integration.md +114 -0
  213. package/skills/ae-experiment-design/references/sdk-troubleshooting.md +139 -0
  214. package/skills/ae-experiment-design/references/server-experiment-sdk.md +78 -0
  215. package/skills/ae-experiment-design/scripts/calculate_experiment_plan.py +450 -0
  216. package/skills/ae-experiment-insight/SKILL.md +149 -0
  217. package/skills/ae-experiment-insight/agents/openai.yaml +4 -0
  218. package/skills/ae-experiment-insight/references/decision-framework.md +69 -0
  219. package/skills/ae-experiment-insight/references/diagnostic-playbook.md +225 -0
  220. package/skills/ae-experiment-insight/references/platform-operations.md +76 -0
  221. package/skills/ae-experiment-insight/scripts/analyze_experiment.py +478 -0
  222. package/skills/ae-generate-tracking-code/SKILL.md +2 -2
  223. package/skills/ae-metadata/SKILL.md +1 -1
  224. package/dist/config-BSSALXEN.js +0 -128
  225. package/dist/sync-QFP4XFN3.js +0 -485
@@ -1,18 +1,20 @@
1
1
  import {
2
2
  createCapabilityCommand
3
- } from "./chunk-LHVM35J4.js";
3
+ } from "./chunk-TS6BUGUY.js";
4
4
  import {
5
5
  registerCapabilityGatewayRoute
6
6
  } from "./chunk-PTE56QPL.js";
7
- import "./chunk-RGXCNC4N.js";
8
7
  import {
9
8
  printError
10
- } from "./chunk-KTYR3U6D.js";
11
- import "./chunk-E7UXXHO3.js";
12
- import "./chunk-IR4ZLVPW.js";
13
- import "./chunk-V6FR6WTW.js";
14
- import "./chunk-24BAVOX3.js";
15
- import "./chunk-LYVNONC4.js";
9
+ } from "./chunk-YTG6Q75E.js";
10
+ import "./chunk-GS2P7LFD.js";
11
+ import "./chunk-Z3OXWCIA.js";
12
+ import "./chunk-YV52FB5G.js";
13
+ import "./chunk-GJJA4CQZ.js";
14
+ import {
15
+ CliValidationError
16
+ } from "./chunk-AXDXJTPC.js";
17
+ import "./chunk-JHENBQ5B.js";
16
18
 
17
19
  // src/commands/te-engage/shared.ts
18
20
  function createEngageCapabilityCommand(cliService, config) {
@@ -230,7 +232,12 @@ var flowSave = createEngageFlowCapabilityCommand({
230
232
  description: "Build, preview, or commit an operation-based flow draft.",
231
233
  flags: [
232
234
  { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
233
- { name: "req", type: "json", required: true, desc: "Operation-based flow save request JSON object." }
235
+ {
236
+ name: "req",
237
+ type: "json",
238
+ required: true,
239
+ desc: "Operation-based flow save request. Custom audience node configs and branches use targetDefinitionRequest."
240
+ }
234
241
  ],
235
242
  risk: "write",
236
243
  validate: (ctx) => {
@@ -1030,16 +1037,16 @@ var presetEventUpdate = createEngageSettingCapabilityCommand({
1030
1037
  description: "Update the project's preset metric event config (add/active/recharge event definitions).",
1031
1038
  flags: [
1032
1039
  { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
1033
- { name: "add-event-desc", type: "string", required: false, desc: "Add-event qp definition." },
1034
- { name: "active-event-desc", type: "string", required: false, desc: "Active-event qp definition." },
1035
- { name: "recharge-event-desc", type: "string", required: false, desc: "Recharge-success-event qp definition." }
1040
+ { name: "add-event-definition", type: "json", required: false, desc: "Semantic add-event definition." },
1041
+ { name: "active-event-definition", type: "json", required: false, desc: "Semantic active-event definition." },
1042
+ { name: "recharge-event-definition", type: "json", required: false, desc: "Semantic recharge event definition." }
1036
1043
  ],
1037
1044
  risk: "write",
1038
1045
  buildInput: (ctx) => ({
1039
1046
  project_id: ctx.num("project-id"),
1040
- add_event_desc: ctx.str("add-event-desc") || void 0,
1041
- active_event_desc: ctx.str("active-event-desc") || void 0,
1042
- recharge_event_desc: ctx.str("recharge-event-desc") || void 0
1047
+ add_event_definition: ctx.json("add-event-definition") || void 0,
1048
+ active_event_definition: ctx.json("active-event-definition") || void 0,
1049
+ recharge_event_definition: ctx.json("recharge-event-definition") || void 0
1043
1050
  })
1044
1051
  });
1045
1052
 
@@ -1077,31 +1084,21 @@ var commonMetricGet = createEngageSettingCapabilityCommand({
1077
1084
 
1078
1085
  // src/commands/te-engage/engage-setting/common-metric/metric-qp-validation.ts
1079
1086
  var VALID_WINDOW_TIME_UNITS = /* @__PURE__ */ new Set(["minute", "hour", "day"]);
1080
- function validateMetricQpFlag(metricQp) {
1081
- let parsed;
1082
- try {
1083
- parsed = JSON.parse(metricQp);
1084
- } catch {
1087
+ function validateMetricDefinitionFlag(definition) {
1088
+ if (definition === null || typeof definition !== "object" || Array.isArray(definition)) {
1085
1089
  printError(
1086
1090
  "validation",
1087
- "--metric-qp must be a valid JSON object string.",
1088
- "Discover events via analysis-meta event list, then assemble a type=0/1 metric QP object."
1091
+ "--metric-definition must be a JSON object.",
1092
+ "Pass a semantic event or formula metric definition."
1089
1093
  );
1090
1094
  process.exit(1);
1091
1095
  }
1092
- if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
1096
+ const type = definition.type;
1097
+ if (type !== "event" && type !== "formula") {
1093
1098
  printError(
1094
1099
  "validation",
1095
- "--metric-qp must be a JSON object string.",
1096
- 'Do not pass placeholders like "event"; pass a complete metric QP object.'
1097
- );
1098
- process.exit(1);
1099
- }
1100
- if (Object.keys(parsed).length === 0) {
1101
- printError(
1102
- "validation",
1103
- "--metric-qp cannot be an empty JSON object.",
1104
- "Pass a complete metric QP expression instead of {}."
1100
+ "--metric-definition.type must be event or formula.",
1101
+ "Do not pass legacy type=0/1 metric_qp."
1105
1102
  );
1106
1103
  process.exit(1);
1107
1104
  }
@@ -1135,10 +1132,10 @@ var writeFlags = [
1135
1132
  { name: "metric-type", type: "number", required: true, desc: "Metric type; create requires 1 (PRESET)." },
1136
1133
  { name: "metric-name", type: "string", required: true, desc: "Metric name (^[a-z][0-9a-z_]{0,79}$)." },
1137
1134
  {
1138
- name: "metric-qp",
1139
- type: "string",
1135
+ name: "metric-definition",
1136
+ type: "json",
1140
1137
  required: true,
1141
- desc: "Complete metric QP JSON object string (type=0 event or type=1 formula)."
1138
+ desc: "Semantic event or formula metric definition."
1142
1139
  },
1143
1140
  { name: "metric-window-num", type: "number", required: true, desc: "Metric window number." },
1144
1141
  {
@@ -1157,7 +1154,7 @@ var buildWriteInput = (ctx) => ({
1157
1154
  project_id: ctx.num("project-id"),
1158
1155
  metric_type: ctx.num("metric-type"),
1159
1156
  metric_name: ctx.str("metric-name"),
1160
- metric_qp: ctx.str("metric-qp"),
1157
+ metric_definition: ctx.json("metric-definition"),
1161
1158
  metric_window_num: ctx.num("metric-window-num"),
1162
1159
  metric_window_time_unit: ctx.str("metric-window-time-unit"),
1163
1160
  display_name: ctx.str("display-name"),
@@ -1170,12 +1167,12 @@ var commonMetricCreate = createEngageSettingCapabilityCommand({
1170
1167
  resource: "common-metric",
1171
1168
  command: "create",
1172
1169
  capabilityId: "engage-setting.common-metric.create",
1173
- description: "Create a PRESET common metric with its event/formula QP, time window, and display metadata.",
1170
+ description: "Create a PRESET common metric from a semantic event/formula definition.",
1174
1171
  flags: writeFlags,
1175
1172
  risk: "write",
1176
1173
  validate: (ctx) => {
1177
1174
  validatePresetMetricTypeFlag(ctx.num("metric-type"));
1178
- validateMetricQpFlag(ctx.str("metric-qp"));
1175
+ validateMetricDefinitionFlag(ctx.json("metric-definition"));
1179
1176
  validateMetricWindowTimeUnitFlag(ctx.str("metric-window-time-unit"));
1180
1177
  },
1181
1178
  buildInput: buildWriteInput
@@ -1187,10 +1184,10 @@ var writeFlags2 = [
1187
1184
  { name: "metric-type", type: "number", required: true, desc: "Metric type; use 1 (PRESET) for common metrics." },
1188
1185
  { name: "metric-name", type: "string", required: true, desc: "Metric name (existing PRESET metric)." },
1189
1186
  {
1190
- name: "metric-qp",
1191
- type: "string",
1187
+ name: "metric-definition",
1188
+ type: "json",
1192
1189
  required: true,
1193
- desc: "Complete metric QP JSON object string (type=0 event or type=1 formula)."
1190
+ desc: "Semantic event or formula metric definition."
1194
1191
  },
1195
1192
  { name: "metric-window-num", type: "number", required: true, desc: "Metric window number." },
1196
1193
  {
@@ -1209,7 +1206,7 @@ var buildWriteInput2 = (ctx) => ({
1209
1206
  project_id: ctx.num("project-id"),
1210
1207
  metric_type: ctx.num("metric-type"),
1211
1208
  metric_name: ctx.str("metric-name"),
1212
- metric_qp: ctx.str("metric-qp"),
1209
+ metric_definition: ctx.json("metric-definition"),
1213
1210
  metric_window_num: ctx.num("metric-window-num"),
1214
1211
  metric_window_time_unit: ctx.str("metric-window-time-unit"),
1215
1212
  display_name: ctx.str("display-name"),
@@ -1226,7 +1223,7 @@ var commonMetricUpdate = createEngageSettingCapabilityCommand({
1226
1223
  flags: writeFlags2,
1227
1224
  risk: "write",
1228
1225
  validate: (ctx) => {
1229
- validateMetricQpFlag(ctx.str("metric-qp"));
1226
+ validateMetricDefinitionFlag(ctx.json("metric-definition"));
1230
1227
  validateMetricWindowTimeUnitFlag(ctx.str("metric-window-time-unit"));
1231
1228
  },
1232
1229
  buildInput: buildWriteInput2
@@ -1249,44 +1246,6 @@ var commonMetricDelete = createEngageSettingCapabilityCommand({
1249
1246
  })
1250
1247
  });
1251
1248
 
1252
- // src/commands/te-engage/engage-setting/query/cluster-qp-skill.ts
1253
- var queryClusterQpSkill = createEngageSettingCapabilityCommand({
1254
- resource: "query",
1255
- command: "cluster-qp-skill",
1256
- capabilityId: "engage-setting.query.cluster-qp-skill",
1257
- description: "Query the mix-cluster QP skill definition for audience, trigger, and completion event objects. Returns skill text (not final QP JSON). Use it before save when build-save-guide requires targetConfig.qp, triggerConfig.triggerRule, clientConfig.clientQp, or completionIndicatorDef.event.",
1258
- flags: [
1259
- { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
1260
- {
1261
- name: "response-mode",
1262
- type: "string",
1263
- required: false,
1264
- desc: "Skill content mode: base, examples, or full. Default: full."
1265
- },
1266
- {
1267
- name: "condition-subtype",
1268
- type: "string",
1269
- required: false,
1270
- desc: "Condition subtype selector: core, behavior_seq, or all. Default: all."
1271
- }
1272
- ],
1273
- risk: "read",
1274
- buildInput: (ctx) => {
1275
- const input = {
1276
- project_id: ctx.num("project-id")
1277
- };
1278
- const responseMode = ctx.str("response-mode");
1279
- const conditionSubtype = ctx.str("condition-subtype");
1280
- if (responseMode) {
1281
- input.response_mode = responseMode;
1282
- }
1283
- if (conditionSubtype) {
1284
- input.condition_subtype = conditionSubtype;
1285
- }
1286
- return input;
1287
- }
1288
- });
1289
-
1290
1249
  // src/commands/te-engage/engage-setting/index.ts
1291
1250
  var commands2 = [
1292
1251
  channelTouchLimitsList,
@@ -1326,8 +1285,7 @@ var commands2 = [
1326
1285
  commonMetricGet,
1327
1286
  commonMetricCreate,
1328
1287
  commonMetricUpdate,
1329
- commonMetricDelete,
1330
- queryClusterQpSkill
1288
+ commonMetricDelete
1331
1289
  ];
1332
1290
  var engage_setting_default = commands2;
1333
1291
 
@@ -1620,21 +1578,21 @@ var presetMetricSet = createEngageSceneCapabilityCommand({
1620
1578
  resource: "preset-metric",
1621
1579
  command: "set",
1622
1580
  capabilityId: "engage-scene.preset-metric.set",
1623
- description: "Set preset metric QP config (impression/click/attend) of a config item.",
1581
+ description: "Set semantic impression/click/attend event definitions of a config item.",
1624
1582
  flags: [
1625
1583
  { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
1626
1584
  { name: "config-id", type: "string", required: true, desc: "Config item ID." },
1627
- { name: "impression-event-qp", type: "string", required: false, desc: "Impression event QP JSON." },
1628
- { name: "click-event-qp", type: "string", required: false, desc: "Click event QP JSON." },
1629
- { name: "attend-event-qp", type: "string", required: false, desc: "Attend event QP JSON." }
1585
+ { name: "impression-event-definition", type: "json", required: false, desc: "Semantic impression event definition." },
1586
+ { name: "click-event-definition", type: "json", required: false, desc: "Semantic click event definition." },
1587
+ { name: "attend-event-definition", type: "json", required: false, desc: "Semantic attend event definition." }
1630
1588
  ],
1631
1589
  risk: "write",
1632
1590
  buildInput: (ctx) => ({
1633
1591
  project_id: ctx.num("project-id"),
1634
1592
  config_id: ctx.str("config-id"),
1635
- impression_event_qp: ctx.str("impression-event-qp") || void 0,
1636
- click_event_qp: ctx.str("click-event-qp") || void 0,
1637
- attend_event_qp: ctx.str("attend-event-qp") || void 0
1593
+ impression_event_definition: ctx.json("impression-event-definition") || void 0,
1594
+ click_event_definition: ctx.json("click-event-definition") || void 0,
1595
+ attend_event_definition: ctx.json("attend-event-definition") || void 0
1638
1596
  })
1639
1597
  });
1640
1598
 
@@ -1903,7 +1861,7 @@ var strategyCreate = createEngageSceneCapabilityCommand({
1903
1861
  name: "payload",
1904
1862
  type: "json",
1905
1863
  required: true,
1906
- desc: "ConfigStrategyAddDTO JSON body (configId, templateId, strategyName, templateParamConfig, ...)."
1864
+ desc: "ConfigStrategyAddDTO JSON body. Custom audiences use definitionRequest."
1907
1865
  }
1908
1866
  ],
1909
1867
  risk: "write",
@@ -2002,7 +1960,7 @@ var strategyUpdate = createEngageSceneCapabilityCommand({
2002
1960
  name: "payload",
2003
1961
  type: "json",
2004
1962
  required: true,
2005
- desc: "ConfigStrategyModifyDTO JSON body (strategyUuid + fields to modify)."
1963
+ desc: "ConfigStrategyModifyDTO JSON body including strategyUuid. Custom audiences use definitionRequest."
2006
1964
  }
2007
1965
  ],
2008
1966
  risk: "write",
@@ -2038,10 +1996,10 @@ var strategyPredict = createEngageSceneCapabilityCommand({
2038
1996
  flags: [
2039
1997
  { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
2040
1998
  {
2041
- name: "qp",
2042
- type: "string",
1999
+ name: "definition-request",
2000
+ type: "json",
2043
2001
  required: true,
2044
- desc: "Mix QP JSON string (same as targetClusterQp on the strategy)."
2002
+ desc: "Semantic audience definition request."
2045
2003
  },
2046
2004
  {
2047
2005
  name: "zone-offset",
@@ -2063,9 +2021,12 @@ var strategyPredict = createEngageSceneCapabilityCommand({
2063
2021
  }
2064
2022
  ],
2065
2023
  risk: "read",
2024
+ validate: (ctx) => {
2025
+ readRequiredJsonObject(ctx, "definition-request");
2026
+ },
2066
2027
  buildInput: (ctx) => ({
2067
2028
  project_id: ctx.num("project-id"),
2068
- qp: ctx.str("qp"),
2029
+ definition_request: readRequiredJsonObject(ctx, "definition-request"),
2069
2030
  zone_offset: ctx.num("zone-offset"),
2070
2031
  ...ctx.str("strategy-uuid") ? { strategy_uuid: ctx.str("strategy-uuid") } : {},
2071
2032
  ...ctx.str("request-id") ? { request_id: ctx.str("request-id") } : {}
@@ -2448,6 +2409,25 @@ var activityInfoList = createEngageActivityCapabilityCommand({
2448
2409
  })
2449
2410
  });
2450
2411
 
2412
+ // src/commands/te-engage/engage-activity/approval/submit.ts
2413
+ var approvalSubmit = createEngageActivityCapabilityCommand({
2414
+ resource: "approval",
2415
+ command: "submit",
2416
+ capabilityId: "engage-activity.approval.submit",
2417
+ description: "Submit an activity for approval.",
2418
+ flags: [
2419
+ { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
2420
+ { name: "activity-id", type: "string", required: true, desc: "Activity ID." },
2421
+ { name: "reason", type: "string", required: false, desc: "Optional submit note." }
2422
+ ],
2423
+ risk: "write",
2424
+ buildInput: (ctx) => ({
2425
+ project_id: ctx.num("project-id"),
2426
+ activity_id: ctx.str("activity-id"),
2427
+ reason: ctx.str("reason") || void 0
2428
+ })
2429
+ });
2430
+
2451
2431
  // src/commands/te-engage/engage-activity/approval/approve.ts
2452
2432
  var approvalApprove = createEngageActivityCapabilityCommand({
2453
2433
  resource: "approval",
@@ -2505,6 +2485,197 @@ var approvalCancel = createEngageActivityCapabilityCommand({
2505
2485
  })
2506
2486
  });
2507
2487
 
2488
+ // src/commands/te-engage/engage-activity/payload-validation.ts
2489
+ var TOPIC_TASK_OVERRIDE_FIELDS = [
2490
+ "clusterKey",
2491
+ "triggerDefinition",
2492
+ "triggerRule",
2493
+ "triggerType",
2494
+ "triggerTime",
2495
+ "triggerCrontab",
2496
+ "startDate",
2497
+ "endDate",
2498
+ "triggerTimeStrategy",
2499
+ "tzOffset",
2500
+ "channelType",
2501
+ "channelId",
2502
+ "frequencyLimits",
2503
+ "enableChannelTouchLimits",
2504
+ "channelTouchLimitsRuleDef",
2505
+ "whitelistList",
2506
+ "expConfig"
2507
+ ];
2508
+ var TOPIC_TASK_EXCLUSION_FIELDS = /* @__PURE__ */ new Set([
2509
+ "clusterOutFilters",
2510
+ "totalOutCFilter",
2511
+ "exclude",
2512
+ "excludes"
2513
+ ]);
2514
+ function validateStandaloneActivityPayload(value) {
2515
+ const payload = requireObject(value);
2516
+ validateTriggerType(payload.triggerType, "triggerType");
2517
+ validateScheduleFields(payload);
2518
+ validateExperiment(payload.expConfig, "expConfig");
2519
+ validateSingleContentGroup(payload.groupContentList, "groupContentList");
2520
+ if (payload.triggerTimeStrategy !== "fixed_time_zone") {
2521
+ fail(
2522
+ "Activity tasks must use triggerTimeStrategy=fixed_time_zone.",
2523
+ "ACTIVITY_TRIGGER_TIME_STRATEGY_UNSUPPORTED",
2524
+ "triggerTimeStrategy",
2525
+ "Use the parent activity timezone. User timezone and user active time are not supported."
2526
+ );
2527
+ }
2528
+ if (typeof payload.tzOffset !== "number" || !Number.isFinite(payload.tzOffset)) {
2529
+ fail(
2530
+ "tzOffset is required for a standalone activity task.",
2531
+ "ACTIVITY_TIMEZONE_REQUIRED",
2532
+ "tzOffset",
2533
+ "Read the parent activity and copy its tzOffset exactly."
2534
+ );
2535
+ }
2536
+ }
2537
+ function validateActivityTopicPayload(value) {
2538
+ const payload = requireObject(value);
2539
+ validateTriggerType(payload.triggerType, "triggerType");
2540
+ validateScheduleFields(payload);
2541
+ validateExperiment(payload.expConfig, "expConfig");
2542
+ for (const listField of ["tasks", "modifyTaskList", "addTaskList"]) {
2543
+ const taskList2 = payload[listField];
2544
+ if (!Array.isArray(taskList2)) continue;
2545
+ taskList2.forEach((taskValue, index) => {
2546
+ const task = requireObject(taskValue, `${listField}[${index}]`);
2547
+ if (hasValue(task.targetClusterType) && task.targetClusterType !== 1) {
2548
+ fail(
2549
+ `${listField}[${index}].targetClusterType must be 1 (custom) for a topic task.`,
2550
+ "TOPIC_TASK_OVERRIDE_UNSUPPORTED",
2551
+ `${listField}[${index}].targetClusterType`,
2552
+ "Topic tasks always use the canonical custom audience mode and may only add an inclusion-only definitionRequest."
2553
+ );
2554
+ }
2555
+ for (const field of TOPIC_TASK_OVERRIDE_FIELDS) {
2556
+ if (hasValue(task[field])) {
2557
+ fail(
2558
+ `${listField}[${index}].${field} is not configurable for a topic task.`,
2559
+ "TOPIC_TASK_OVERRIDE_UNSUPPORTED",
2560
+ `${listField}[${index}].${field}`,
2561
+ "Topic tasks inherit schedule, channel, frequency, whitelist, and experiment settings from the topic."
2562
+ );
2563
+ }
2564
+ }
2565
+ if (containsAnyKey(task.definitionRequest, TOPIC_TASK_EXCLUSION_FIELDS)) {
2566
+ fail(
2567
+ `${listField}[${index}].definitionRequest must be an inclusion-only custom audience.`,
2568
+ "TOPIC_TASK_AUDIENCE_EXCLUSION_UNSUPPORTED",
2569
+ `${listField}[${index}].definitionRequest`,
2570
+ "Remove exclusion filters; topic tasks may only refine the shared topic audience with inclusion conditions."
2571
+ );
2572
+ }
2573
+ validateSingleContentGroup(
2574
+ task.groupContentList,
2575
+ `${listField}[${index}].groupContentList`
2576
+ );
2577
+ });
2578
+ }
2579
+ }
2580
+ function validateTriggerType(value, field) {
2581
+ if (value === 0 || value === 1) return;
2582
+ fail(
2583
+ `${field} only supports 0 (schedule single) or 1 (schedule repeat) for activities.`,
2584
+ "ACTIVITY_TRIGGER_TYPE_UNSUPPORTED",
2585
+ field,
2586
+ "Use engage-task for manual, event-triggered, or other triggered tasks."
2587
+ );
2588
+ }
2589
+ function validateScheduleFields(payload) {
2590
+ if (payload.triggerType === 0 && !hasValue(payload.triggerTime)) {
2591
+ fail(
2592
+ "triggerTime is required when triggerType=0.",
2593
+ "TRIGGER_TIME_REQUIRED",
2594
+ "triggerTime",
2595
+ "Use yyyy-MM-dd HH:mm in the parent activity timezone."
2596
+ );
2597
+ }
2598
+ if (payload.triggerType === 1) {
2599
+ for (const field of ["startDate", "endDate", "triggerCrontab"]) {
2600
+ if (!hasValue(payload[field])) {
2601
+ fail(
2602
+ `${field} is required when triggerType=1.`,
2603
+ "REPEAT_SCHEDULE_REQUIRED",
2604
+ field,
2605
+ "Provide the complete repeated schedule inside the parent activity period."
2606
+ );
2607
+ }
2608
+ }
2609
+ }
2610
+ }
2611
+ function validateExperiment(value, field) {
2612
+ if (value === void 0 || value === null) return;
2613
+ if (!isObject(value)) {
2614
+ fail(
2615
+ `${field} must be omitted or set to {"enableExp":false}.`,
2616
+ "ACTIVITY_EXPERIMENT_UNSUPPORTED",
2617
+ field,
2618
+ "A/B and horse-race experiments are not supported for activity tasks."
2619
+ );
2620
+ }
2621
+ for (const [key, item] of Object.entries(value)) {
2622
+ if (key === "enableExp" && item === false) continue;
2623
+ if (hasValue(item)) {
2624
+ fail(
2625
+ `${field} must not enable or configure an experiment.`,
2626
+ "ACTIVITY_EXPERIMENT_UNSUPPORTED",
2627
+ field,
2628
+ "Remove experiment groups and use exactly one non-experiment content group."
2629
+ );
2630
+ }
2631
+ }
2632
+ }
2633
+ function validateSingleContentGroup(value, field) {
2634
+ if (Array.isArray(value) && value.length !== 1) {
2635
+ fail(
2636
+ `${field} must contain exactly one non-experiment content group.`,
2637
+ "ACTIVITY_CONTENT_GROUPS_UNSUPPORTED",
2638
+ field,
2639
+ "Keep language variants inside the single group contentList."
2640
+ );
2641
+ }
2642
+ }
2643
+ function requireObject(value, field = "payload") {
2644
+ if (!isObject(value)) {
2645
+ fail(
2646
+ `${field} must be a JSON object.`,
2647
+ "ACTIVITY_PAYLOAD_INVALID",
2648
+ field,
2649
+ "Pass a native camelCase activity task or topic payload."
2650
+ );
2651
+ }
2652
+ return value;
2653
+ }
2654
+ function containsAnyKey(value, keys) {
2655
+ if (Array.isArray(value)) return value.some((item) => containsAnyKey(item, keys));
2656
+ if (!isObject(value)) return false;
2657
+ return Object.entries(value).some(
2658
+ ([key, item]) => keys.has(key) && hasValue(item) || containsAnyKey(item, keys)
2659
+ );
2660
+ }
2661
+ function hasValue(value) {
2662
+ if (value === void 0 || value === null) return false;
2663
+ if (typeof value === "string") return value.trim().length > 0;
2664
+ if (Array.isArray(value)) return value.length > 0;
2665
+ if (isObject(value)) return Object.keys(value).length > 0;
2666
+ return true;
2667
+ }
2668
+ function isObject(value) {
2669
+ return typeof value === "object" && value !== null && !Array.isArray(value);
2670
+ }
2671
+ function fail(message, code, field, hint) {
2672
+ throw new CliValidationError(message, {
2673
+ code,
2674
+ hint,
2675
+ location: { field }
2676
+ });
2677
+ }
2678
+
2508
2679
  // src/commands/te-engage/engage-activity/topic/create.ts
2509
2680
  var topicCreate = createEngageActivityCapabilityCommand({
2510
2681
  resource: "topic",
@@ -2517,10 +2688,11 @@ var topicCreate = createEngageActivityCapabilityCommand({
2517
2688
  name: "payload",
2518
2689
  type: "json",
2519
2690
  required: true,
2520
- desc: "TopicAddDTO JSON body. Required: activityId, topicName, targetClusterType, channelType, channelId, triggerType, enableChannelTouchLimits, frequencyLimits, tasks. When targetClusterType=2 use topicClusterKey (not clusterKey); when =1 use topicQp. Task items use taskQp/clusterKey."
2691
+ desc: "TopicAddDTO JSON body. Use triggerType 0/1 and no experiment. Topic tasks may only add an inclusion-only definitionRequest and inherit shared settings."
2521
2692
  }
2522
2693
  ],
2523
2694
  risk: "write",
2695
+ validate: (ctx) => validateActivityTopicPayload(ctx.json("payload")),
2524
2696
  buildInput: (ctx) => ({
2525
2697
  project_id: ctx.num("project-id"),
2526
2698
  payload: ctx.json("payload")
@@ -2539,10 +2711,11 @@ var topicUpdate = createEngageActivityCapabilityCommand({
2539
2711
  name: "payload",
2540
2712
  type: "json",
2541
2713
  required: true,
2542
- desc: "TopicModifyReq JSON body (topicId + TopicAddDTO fields + modifyTaskList/addTaskList/delTaskIdList). Same audience rules: topicClusterKey for targetClusterType=2, topicQp for =1."
2714
+ desc: "TopicModifyReq JSON body. Use triggerType 0/1 and no experiment. Topic tasks may retain targetClusterType=1 from get, add an inclusion-only definitionRequest, and otherwise inherit shared settings."
2543
2715
  }
2544
2716
  ],
2545
2717
  risk: "write",
2718
+ validate: (ctx) => validateActivityTopicPayload(ctx.json("payload")),
2546
2719
  buildInput: (ctx) => ({
2547
2720
  project_id: ctx.num("project-id"),
2548
2721
  payload: ctx.json("payload")
@@ -2714,10 +2887,11 @@ var taskCreate = createEngageActivityCapabilityCommand({
2714
2887
  name: "payload",
2715
2888
  type: "json",
2716
2889
  required: true,
2717
- desc: "OperationTaskOpDTO JSON body (taskName, channelType, channelId, groupContentList, targetClusterType, triggerType, completionIndicatorDef, frequencyLimits, groupId, activityId, triggerTimeStrategy, ...). Set activityId; leave topicId empty for a standalone task."
2890
+ desc: "OperationTaskOpDTO JSON body. Use triggerType 0/1, fixed_time_zone, no experiment, and one content group. Custom audiences use definitionRequest. Set activityId and leave topicId empty."
2718
2891
  }
2719
2892
  ],
2720
2893
  risk: "write",
2894
+ validate: (ctx) => validateStandaloneActivityPayload(ctx.json("payload")),
2721
2895
  buildInput: (ctx) => ({
2722
2896
  project_id: ctx.num("project-id"),
2723
2897
  payload: ctx.json("payload")
@@ -2732,9 +2906,15 @@ var taskUpdate = createEngageActivityCapabilityCommand({
2732
2906
  description: "Edit a standalone task from an OperationTaskOpDTO payload (includes taskId).",
2733
2907
  flags: [
2734
2908
  { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
2735
- { name: "payload", type: "json", required: true, desc: "OperationTaskOpDTO JSON body including taskId." }
2909
+ {
2910
+ name: "payload",
2911
+ type: "json",
2912
+ required: true,
2913
+ desc: "OperationTaskOpDTO JSON body including taskId. Use triggerType 0/1, fixed_time_zone, no experiment, and one content group."
2914
+ }
2736
2915
  ],
2737
2916
  risk: "write",
2917
+ validate: (ctx) => validateStandaloneActivityPayload(ctx.json("payload")),
2738
2918
  buildInput: (ctx) => ({
2739
2919
  project_id: ctx.num("project-id"),
2740
2920
  payload: ctx.json("payload")
@@ -2771,7 +2951,7 @@ var commands4 = [
2771
2951
  activityEnd,
2772
2952
  activityStats,
2773
2953
  activityInfoList,
2774
- // approvalSubmit,
2954
+ approvalSubmit,
2775
2955
  approvalApprove,
2776
2956
  approvalReject,
2777
2957
  approvalCancel,
@@ -3213,6 +3393,49 @@ var taskModifyGroup = createEngageTaskCapabilityCommand({
3213
3393
  })
3214
3394
  });
3215
3395
 
3396
+ // src/commands/te-engage/engage-task/task/submit-approval.ts
3397
+ function buildSubmitApprovalInput(ctx) {
3398
+ const taskId = ctx.str("task-id").trim();
3399
+ const request = ctx.json("request");
3400
+ if (taskId === "" === (request === void 0)) {
3401
+ throw new Error("Exactly one of --task-id or --request is required");
3402
+ }
3403
+ if (request !== void 0 && (request === null || typeof request !== "object" || Array.isArray(request))) {
3404
+ throw new Error("Flag --request must be a JSON object");
3405
+ }
3406
+ return {
3407
+ project_id: ctx.num("project-id"),
3408
+ ...taskId !== "" && { task_id: taskId },
3409
+ ...request !== void 0 && { request }
3410
+ };
3411
+ }
3412
+ var taskSubmitApproval = createEngageTaskCapabilityCommand({
3413
+ resource: "task",
3414
+ command: "submit-approval",
3415
+ capabilityId: "engage-task.task.submit-approval",
3416
+ description: "Save a draft task and submit it for approval.",
3417
+ flags: [
3418
+ { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
3419
+ {
3420
+ name: "task-id",
3421
+ type: "string",
3422
+ required: false,
3423
+ desc: "Existing draft task ID. Exactly one of --task-id or --request is required."
3424
+ },
3425
+ {
3426
+ name: "request",
3427
+ type: "json",
3428
+ required: false,
3429
+ desc: "Legacy ApprovalSaveAndSubmitDTO JSON. Exactly one of --task-id or --request is required."
3430
+ }
3431
+ ],
3432
+ risk: "write",
3433
+ validate: (ctx) => {
3434
+ buildSubmitApprovalInput(ctx);
3435
+ },
3436
+ buildInput: buildSubmitApprovalInput
3437
+ });
3438
+
3216
3439
  // src/commands/te-engage/engage-task/task/build-save-guide.ts
3217
3440
  var taskBuildSaveGuide = createEngageTaskCapabilityCommand({
3218
3441
  resource: "task",
@@ -3290,7 +3513,12 @@ var taskSave = createEngageTaskCapabilityCommand({
3290
3513
  description: "Create a task draft, or update an existing draft/paused task.",
3291
3514
  flags: [
3292
3515
  { name: "project-id", type: "number", required: true, alias: "p", desc: "Numeric project ID." },
3293
- { name: "req", type: "json", required: true, desc: "Task save request JSON object." }
3516
+ {
3517
+ name: "req",
3518
+ type: "json",
3519
+ required: true,
3520
+ desc: "Task save JSON; custom audiences use targetConfig.definitionRequest."
3521
+ }
3294
3522
  ],
3295
3523
  risk: "write",
3296
3524
  validate: (ctx) => {
@@ -3339,8 +3567,8 @@ var commands6 = [
3339
3567
  segmentListRename,
3340
3568
  segmentListSetVisibility,
3341
3569
  taskDelete,
3342
- taskModifyGroup
3343
- // taskSubmitApproval,
3570
+ taskModifyGroup,
3571
+ taskSubmitApproval
3344
3572
  ];
3345
3573
  var engage_task_default = commands6;
3346
3574