@thinkingai/ae-cli 6.0.37 → 6.0.39

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 (200) 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 +96 -37
  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-IWQZO423.js → te-analysis-GJI5FZUL.js} +1611 -25
  40. package/dist/{te-analysis-X222IRYR.js → te-analysis-N2BRDJZ5.js} +1611 -25
  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-kb-E7NSCBRB.js → te-kb-VRMEY3D4.js} +6 -6
  48. package/dist/{te-meta-GBDTMPEL.js → te-meta-53BVXPFI.js} +7 -7
  49. package/dist/{te-meta-ZTLTSHXC.js → te-meta-TOCBPBXI.js} +7 -7
  50. package/dist/{te-system-AH7DMCAQ.js → te-system-XGS5EQIQ.js} +4 -4
  51. package/dist/{te-team-BQ3SKSZV.js → te-team-BZRDV2CM.js} +7 -7
  52. package/dist/{update-DKG6UXEM.js → update-HEDXGOJH.js} +8 -6
  53. package/package.json +5 -2
  54. package/skills/ae-agent/SKILL.md +178 -16
  55. package/skills/ae-agent/references/add-skill.md +22 -10
  56. package/skills/ae-agent/references/edit-skill.md +24 -14
  57. package/skills/ae-agent/references/find-archived-conversations.md +82 -0
  58. package/skills/ae-agent/references/restore-conversation.md +54 -0
  59. package/skills/ae-agent/references/upload-skill.md +24 -14
  60. package/skills/ae-analysis/SKILL.md +1 -1
  61. package/skills/ae-analysis/references/command_index.md +109 -42
  62. package/skills/ae-analysis/references/debug_data_list.md +28 -0
  63. package/skills/ae-analysis/references/debug_device_add.md +23 -0
  64. package/skills/ae-analysis/references/debug_device_list.md +19 -0
  65. package/skills/ae-analysis/references/debug_device_select.md +22 -0
  66. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  67. package/skills/ae-analysis/references/plan_sync_display_names.md +28 -0
  68. package/skills/ae-analysis/references/project_access_detail_get.md +3 -3
  69. package/skills/ae-analysis/references/project_data_power_delete.md +3 -3
  70. package/skills/ae-analysis/references/project_data_power_get.md +3 -3
  71. package/skills/ae-analysis/references/project_data_power_list.md +3 -3
  72. package/skills/ae-analysis/references/project_data_power_upsert.md +3 -3
  73. package/skills/ae-analysis/references/project_entity_create.md +3 -3
  74. package/skills/ae-analysis/references/project_entity_delete.md +3 -3
  75. package/skills/ae-analysis/references/project_entity_event_list.md +3 -3
  76. package/skills/ae-analysis/references/project_entity_get.md +3 -3
  77. package/skills/ae-analysis/references/project_entity_list.md +3 -3
  78. package/skills/ae-analysis/references/project_entity_update.md +3 -3
  79. package/skills/ae-analysis/references/project_function_list.md +3 -3
  80. package/skills/ae-analysis/references/project_info_create.md +25 -0
  81. package/skills/ae-analysis/references/project_info_delete.md +24 -0
  82. package/skills/ae-analysis/references/project_info_get.md +3 -3
  83. package/skills/ae-analysis/references/project_info_list.md +3 -3
  84. package/skills/ae-analysis/references/project_info_update.md +3 -3
  85. package/skills/ae-analysis/references/project_mark_time_create.md +3 -3
  86. package/skills/ae-analysis/references/project_mark_time_delete.md +3 -3
  87. package/skills/ae-analysis/references/project_mark_time_list.md +3 -3
  88. package/skills/ae-analysis/references/project_mark_time_update.md +3 -3
  89. package/skills/ae-analysis/references/project_member_add.md +3 -3
  90. package/skills/ae-analysis/references/project_member_batch_update.md +3 -3
  91. package/skills/ae-analysis/references/project_member_candidate_list.md +3 -3
  92. package/skills/ae-analysis/references/project_member_handover_export.md +3 -3
  93. package/skills/ae-analysis/references/project_member_handover_run.md +3 -3
  94. package/skills/ae-analysis/references/project_member_import.md +3 -3
  95. package/skills/ae-analysis/references/project_member_list.md +3 -3
  96. package/skills/ae-analysis/references/project_member_receiver_list.md +3 -3
  97. package/skills/ae-analysis/references/project_member_remove.md +3 -3
  98. package/skills/ae-analysis/references/project_member_update.md +3 -3
  99. package/skills/ae-analysis/references/project_owner_update.md +3 -3
  100. package/skills/ae-analysis/references/project_permission_binding_list.md +3 -3
  101. package/skills/ae-analysis/references/project_receive_status_update.md +3 -3
  102. package/skills/ae-analysis/references/project_role_delete.md +3 -3
  103. package/skills/ae-analysis/references/project_role_function_list.md +3 -3
  104. package/skills/ae-analysis/references/project_role_get.md +3 -3
  105. package/skills/ae-analysis/references/project_role_list.md +3 -3
  106. package/skills/ae-analysis/references/project_role_upsert.md +3 -3
  107. package/skills/ae-analysis/references/project_role_user_list.md +3 -3
  108. package/skills/ae-analysis/references/project_space_list.md +1 -1
  109. package/skills/ae-analysis/references/project_timezone_get.md +3 -3
  110. package/skills/ae-analysis/references/project_timezone_overview.md +3 -3
  111. package/skills/ae-analysis/references/project_timezone_update.md +3 -3
  112. package/skills/ae-analysis/references/project_user_id_items_update.md +3 -3
  113. package/skills/ae-analysis/references/system_admin_function_list.md +22 -0
  114. package/skills/ae-analysis/references/system_admin_function_update.md +26 -0
  115. package/skills/ae-analysis/references/system_admin_list.md +21 -0
  116. package/skills/ae-analysis/references/system_admin_remove.md +25 -0
  117. package/skills/ae-analysis/references/system_admin_upsert.md +25 -0
  118. package/skills/ae-analysis/references/system_function_list.md +21 -0
  119. package/skills/ae-analysis/references/system_member_add.md +25 -0
  120. package/skills/ae-analysis/references/system_member_candidate_list.md +22 -0
  121. package/skills/ae-analysis/references/system_member_delete.md +25 -0
  122. package/skills/ae-analysis/references/system_member_list.md +24 -0
  123. package/skills/ae-analysis/references/system_member_mfa_unbind.md +25 -0
  124. package/skills/ae-analysis/references/system_member_password_reset.md +32 -0
  125. package/skills/ae-analysis/references/system_member_project_batch_update.md +27 -0
  126. package/skills/ae-analysis/references/system_member_status_update.md +26 -0
  127. package/skills/ae-analysis/references/system_member_update.md +23 -0
  128. package/skills/ae-analysis/references/system_mfa_get.md +21 -0
  129. package/skills/ae-analysis/references/system_mfa_update.md +25 -0
  130. package/skills/ae-analysis/references/system_node_monitor_list.md +24 -0
  131. package/skills/ae-analysis/references/system_oauth2_update.md +22 -0
  132. package/skills/ae-analysis/references/system_ops_alert_contact_delete.md +25 -0
  133. package/skills/ae-analysis/references/system_ops_alert_contact_list.md +23 -0
  134. package/skills/ae-analysis/references/system_ops_alert_contact_test.md +29 -0
  135. package/skills/ae-analysis/references/system_ops_alert_contact_upsert.md +39 -0
  136. package/skills/ae-analysis/references/system_preference_get.md +21 -0
  137. package/skills/ae-analysis/references/system_preference_update.md +22 -0
  138. package/skills/ae-analysis/references/system_project_usage_list.md +28 -0
  139. package/skills/ae-analysis/references/system_query_alert_rule_list.md +21 -0
  140. package/skills/ae-analysis/references/system_query_alert_rule_update.md +26 -0
  141. package/skills/ae-analysis/references/system_query_monitor_overview.md +26 -0
  142. package/skills/ae-analysis/references/system_query_task_cancel.md +25 -0
  143. package/skills/ae-analysis/references/system_query_task_export.md +49 -0
  144. package/skills/ae-analysis/references/system_query_task_get.md +23 -0
  145. package/skills/ae-analysis/references/system_query_task_list.md +35 -0
  146. package/skills/ae-analysis/references/system_query_task_options.md +27 -0
  147. package/skills/ae-analysis/references/system_receiver_address_delete.md +26 -0
  148. package/skills/ae-analysis/references/system_receiver_address_overview.md +21 -0
  149. package/skills/ae-analysis/references/system_receiver_address_project_list.md +21 -0
  150. package/skills/ae-analysis/references/system_receiver_address_promote.md +24 -0
  151. package/skills/ae-analysis/references/system_receiver_address_upsert.md +27 -0
  152. package/skills/ae-analysis/references/system_receiver_detection_get.md +22 -0
  153. package/skills/ae-analysis/references/system_receiver_detection_run.md +22 -0
  154. package/skills/ae-analysis/references/system_receiver_detection_update.md +25 -0
  155. package/skills/ae-analysis/references/system_role_delete.md +26 -0
  156. package/skills/ae-analysis/references/system_role_function_list.md +22 -0
  157. package/skills/ae-analysis/references/system_role_get.md +22 -0
  158. package/skills/ae-analysis/references/system_role_list.md +24 -0
  159. package/skills/ae-analysis/references/system_role_upsert.md +27 -0
  160. package/skills/ae-analysis/references/system_role_user_list.md +22 -0
  161. package/skills/ae-analysis/references/system_seat_list.md +25 -0
  162. package/skills/ae-analysis/references/system_seat_update.md +26 -0
  163. package/skills/ae-analysis/references/system_smtp_delete.md +24 -0
  164. package/skills/ae-analysis/references/system_smtp_get.md +21 -0
  165. package/skills/ae-analysis/references/system_smtp_test.md +22 -0
  166. package/skills/ae-analysis/references/system_smtp_upsert.md +31 -0
  167. package/skills/ae-analysis/references/system_third_party_login_disable.md +25 -0
  168. package/skills/ae-analysis/references/system_third_party_login_list.md +21 -0
  169. package/skills/ae-analysis/references/system_third_party_login_upsert.md +33 -0
  170. package/skills/ae-analysis/references/system_usage_overview.md +21 -0
  171. package/skills/ae-analysis/references/system_usage_trend_export.md +44 -0
  172. package/skills/ae-analysis/references/system_usage_trend_query.md +28 -0
  173. package/skills/ae-dataops/SKILL.md +1 -1
  174. package/skills/ae-dataops/references/dataops-flow-create.md +51 -16
  175. package/skills/ae-engage/SKILL.md +56 -26
  176. package/skills/ae-engage/references/activity-activity.md +3 -0
  177. package/skills/ae-engage/references/activity-approval.md +12 -4
  178. package/skills/ae-engage/references/activity-task.md +21 -6
  179. package/skills/ae-engage/references/activity-topic.md +31 -13
  180. package/skills/ae-engage/references/add-channel.md +170 -41
  181. package/skills/ae-engage/references/build-task-save-guide.md +40 -27
  182. package/skills/ae-engage/references/channel-update-config.md +3 -2
  183. package/skills/ae-engage/references/common-metric.md +48 -120
  184. package/skills/ae-engage/references/flow-detail.md +13 -0
  185. package/skills/ae-engage/references/preset-event.md +12 -32
  186. package/skills/ae-engage/references/save-flow.md +127 -64
  187. package/skills/ae-engage/references/save-task.md +197 -59
  188. package/skills/ae-engage/references/scene-config-metric.md +3 -0
  189. package/skills/ae-engage/references/scene-preset-metric.md +8 -37
  190. package/skills/ae-engage/references/scene-strategy-audience.md +51 -643
  191. package/skills/ae-engage/references/scene-strategy.md +6 -6
  192. package/skills/ae-engage/references/task-detail.md +10 -0
  193. package/skills/ae-engage/references/task-submit-approval.md +45 -0
  194. package/skills/ae-engage/references/validate-flow-node-config.md +1 -1
  195. package/skills/ae-generate-tracking-code/SKILL.md +24 -8
  196. package/skills/ae-generate-tracking-code/references/debug-script.md +46 -37
  197. package/skills/ae-generate-tracking-plan/SKILL.md +26 -1
  198. package/skills/ae-metadata/SKILL.md +1 -1
  199. package/dist/config-BSSALXEN.js +0 -128
  200. package/dist/sync-QFP4XFN3.js +0 -485
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  clearCliToken,
3
3
  getCliToken
4
- } from "./chunk-E7UXXHO3.js";
4
+ } from "./chunk-Z3OXWCIA.js";
5
5
  import {
6
6
  safeJsonParse
7
- } from "./chunk-V6FR6WTW.js";
7
+ } from "./chunk-GJJA4CQZ.js";
8
8
  import {
9
9
  PermissionError
10
- } from "./chunk-24BAVOX3.js";
10
+ } from "./chunk-AXDXJTPC.js";
11
11
  import {
12
12
  logger
13
- } from "./chunk-LYVNONC4.js";
13
+ } from "./chunk-JHENBQ5B.js";
14
14
 
15
15
  // src/core/capability-api.ts
16
16
  import { readFile } from "fs/promises";
@@ -52,6 +52,14 @@ async function permissionMessage(resp) {
52
52
  }
53
53
  return "Permission denied for this resource (HTTP 403)";
54
54
  }
55
+ async function permissionError(resp) {
56
+ const codeResponse = resp.clone();
57
+ const message = await permissionMessage(resp);
58
+ const body = safeJsonParse(await codeResponse.text());
59
+ const error = isRecord(body?.error) ? body.error : void 0;
60
+ const code = nonEmptyString(error?.code) ?? nonEmptyString(body?.code);
61
+ return new PermissionError(message, code);
62
+ }
55
63
  function isInvalidCliTokenMessage(message) {
56
64
  return /\byour token is invalid\b/i.test(message) || /\bcli[-_\s]?token\b.*\binvalid\b/i.test(message) || /\binvalid\b.*\bcli[-_\s]?token\b/i.test(message);
57
65
  }
@@ -147,22 +155,26 @@ async function requestMultipartOnce(url, token, form) {
147
155
  body: form
148
156
  });
149
157
  }
150
- async function callGateway(host, domain, pathAfterV1, method, body, queryParams = {}) {
151
- return (await callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams)).data;
158
+ async function callGateway(host, domain, pathAfterV1, method, body, queryParams = {}, options = {}) {
159
+ return (await callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams, options)).data;
152
160
  }
153
- async function callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams = {}) {
154
- const url = buildCapabilityGatewayUrl(host, domain, pathAfterV1, queryParams);
161
+ async function callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams = {}, options = {}) {
162
+ const url = buildCapabilityGatewayUrl(options.apiBaseUrl ?? host, domain, pathAfterV1, queryParams);
155
163
  const token = await getCliToken(host);
156
164
  let resp = await requestOnce(url, method, token, body);
157
165
  let permissionMsg;
158
166
  if (resp.status === 403) {
159
- permissionMsg = await permissionMessage(resp);
167
+ const error = await permissionError(resp);
168
+ permissionMsg = error.message;
160
169
  if (!isInvalidCliTokenMessage(permissionMsg)) {
161
- throw new PermissionError(permissionMsg);
170
+ throw error;
162
171
  }
163
172
  }
164
- if (resp.status === 401 || resp.status === 403 && permissionMsg) {
165
- logger.warn(`Capability gateway request failed (${resp.status === 403 ? permissionMsg : "HTTP 401"}) for ${host}, refreshing CLI token`);
173
+ if (resp.status === 401) {
174
+ if (options.retryOnUnauthorized === false) {
175
+ await throwCapabilityHttpError(resp);
176
+ }
177
+ logger.warn(`Capability gateway request failed (HTTP 401) for ${host}, refreshing CLI token`);
166
178
  clearCliToken(host);
167
179
  const newToken = await getCliToken(host);
168
180
  process.stderr.write(`[ae-cli] CLI token refreshed for ${host}
@@ -174,6 +186,19 @@ async function callGatewayWithEnvelope(host, domain, pathAfterV1, method, body,
174
186
  if (!resp.ok) {
175
187
  await throwCapabilityHttpError(resp);
176
188
  }
189
+ } else if (resp.status === 403 && permissionMsg) {
190
+ logger.warn(`Capability gateway request failed (${permissionMsg}) for ${host}, refreshing CLI token`);
191
+ clearCliToken(host);
192
+ const newToken = await getCliToken(host);
193
+ process.stderr.write(`[ae-cli] CLI token refreshed for ${host}
194
+ `);
195
+ resp = await requestOnce(url, method, newToken, body);
196
+ if (resp.status === 403) {
197
+ throw await permissionError(resp);
198
+ }
199
+ if (!resp.ok) {
200
+ await throwCapabilityHttpError(resp);
201
+ }
177
202
  } else if (!resp.ok) {
178
203
  await throwCapabilityHttpError(resp);
179
204
  }
@@ -184,7 +209,7 @@ async function fetchCapabilityGateway(host, domain, pathAfterV1, method = "GET",
184
209
  const token = await getCliToken(host);
185
210
  let resp = await requestOnce(url, method, token, body, accept);
186
211
  if (resp.status === 403) {
187
- throw new PermissionError(await permissionMessage(resp));
212
+ throw await permissionError(resp);
188
213
  }
189
214
  if (resp.status === 401) {
190
215
  logger.warn(`Capability gateway request failed (HTTP 401) for ${host}, refreshing CLI token`);
@@ -194,7 +219,7 @@ async function fetchCapabilityGateway(host, domain, pathAfterV1, method = "GET",
194
219
  `);
195
220
  resp = await requestOnce(url, method, newToken, body, accept);
196
221
  if (resp.status === 403) {
197
- throw new PermissionError(await permissionMessage(resp));
222
+ throw await permissionError(resp);
198
223
  }
199
224
  if (!resp.ok) {
200
225
  await throwCapabilityHttpError(resp);
@@ -273,7 +298,7 @@ async function uploadInputFileBytes(host, domain, projectId, purpose, bytes, fil
273
298
  const token = await getCliToken(host);
274
299
  let resp = await requestMultipartOnce(url, token, form);
275
300
  if (resp.status === 403) {
276
- throw new PermissionError(await permissionMessage(resp));
301
+ throw await permissionError(resp);
277
302
  }
278
303
  if (resp.status === 401) {
279
304
  logger.warn(`Capability gateway request failed (HTTP 401) for ${host}, refreshing CLI token`);
@@ -283,7 +308,7 @@ async function uploadInputFileBytes(host, domain, projectId, purpose, bytes, fil
283
308
  `);
284
309
  resp = await requestMultipartOnce(url, newToken, form);
285
310
  if (resp.status === 403) {
286
- throw new PermissionError(await permissionMessage(resp));
311
+ throw await permissionError(resp);
287
312
  }
288
313
  if (!resp.ok) {
289
314
  await throwCapabilityHttpError(resp);
@@ -293,6 +318,13 @@ async function uploadInputFileBytes(host, domain, projectId, purpose, bytes, fil
293
318
  }
294
319
  return unwrapCapabilityEnvelope(parseCapabilityResponse(await resp.text()));
295
320
  }
321
+ async function callCapabilityApi(host, domain, action, method = "POST", params = {}, options = {}) {
322
+ const isGet = method === "GET";
323
+ if (isGet) {
324
+ return callGateway(host, domain, action.replace(/^\/+|\/+$/g, ""), "GET", void 0, {}, options);
325
+ }
326
+ return callGateway(host, domain, action.replace(/^\/+|\/+$/g, ""), method, params, {}, options);
327
+ }
296
328
 
297
329
  export {
298
330
  CapabilityGatewayError,
@@ -307,5 +339,6 @@ export {
307
339
  dryRunCapability,
308
340
  validateCapability,
309
341
  uploadInputFile,
310
- uploadInputFileBytes
342
+ uploadInputFileBytes,
343
+ callCapabilityApi
311
344
  };
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  resolveGatewayDomain
3
3
  } from "./chunk-PTE56QPL.js";
4
+ import {
5
+ withOutputMetadata
6
+ } from "./chunk-YTG6Q75E.js";
4
7
  import {
5
8
  dryRunCapability,
6
9
  executeCapabilityWithEnvelope,
7
10
  validateCapability
8
- } from "./chunk-RGXCNC4N.js";
9
- import {
10
- withOutputMetadata
11
- } from "./chunk-KTYR3U6D.js";
11
+ } from "./chunk-GS2P7LFD.js";
12
12
 
13
13
  // src/core/capability-command.ts
14
14
  import { randomBytes } from "crypto";
@@ -0,0 +1,250 @@
1
+ // src/core/multiselect.ts
2
+ var MultiselectCancelled = class extends Error {
3
+ constructor() {
4
+ super("Selection cancelled by user");
5
+ this.name = "MultiselectCancelled";
6
+ }
7
+ };
8
+ function buildRows(items) {
9
+ const rows = [];
10
+ let lastGroup;
11
+ for (let i = 0; i < items.length; i++) {
12
+ const it = items[i];
13
+ if (it.group && it.group !== lastGroup) {
14
+ rows.push({ kind: "header", groupLabel: it.group });
15
+ lastGroup = it.group;
16
+ }
17
+ rows.push({ kind: "item", itemIndex: i, item: it });
18
+ }
19
+ return rows;
20
+ }
21
+ function promptMultiselect(opts) {
22
+ const { title, items } = opts;
23
+ if (items.length === 0) {
24
+ return Promise.resolve([]);
25
+ }
26
+ const stderr = process.stderr;
27
+ const stdin = process.stdin;
28
+ if (!stdin.isTTY) {
29
+ return Promise.reject(
30
+ new Error("ae-cli sync requires a TTY for multi-select; please run in an interactive terminal")
31
+ );
32
+ }
33
+ const rows = buildRows(items);
34
+ const itemRowIndices = [];
35
+ rows.forEach((r, idx) => {
36
+ if (r.kind === "item") itemRowIndices.push(idx);
37
+ });
38
+ const selected = /* @__PURE__ */ new Set();
39
+ items.forEach((it, idx) => {
40
+ if (it.preselected) selected.add(idx);
41
+ });
42
+ let cursorRowIdx = itemRowIndices[0];
43
+ let renderCount = 0;
44
+ function totalLines() {
45
+ return rows.length + 2;
46
+ }
47
+ function render() {
48
+ if (renderCount > 0) {
49
+ stderr.write(`\x1B[${totalLines()}A`);
50
+ }
51
+ stderr.write(`${title} (space: select \xB7 a: select all/none \xB7 enter: confirm \xB7 q: cancel)\x1B[K
52
+ `);
53
+ stderr.write(`\x1B[K
54
+ `);
55
+ rows.forEach((row, ridx) => {
56
+ if (row.kind === "header") {
57
+ stderr.write(` \x1B[90m\u2500\u2500 ${row.groupLabel} \u2500\u2500\x1B[0m\x1B[K
58
+ `);
59
+ return;
60
+ }
61
+ const isCursor = ridx === cursorRowIdx;
62
+ const isSelected = selected.has(row.itemIndex);
63
+ const pointer = isCursor ? "\x1B[36m\u276F\x1B[0m" : " ";
64
+ const checkbox = isSelected ? "\x1B[32m[x]\x1B[0m" : "[ ]";
65
+ const label = row.item.label;
66
+ const hint = row.item.hint ? ` \x1B[90m${row.item.hint}\x1B[0m` : "";
67
+ stderr.write(`${pointer} ${checkbox} ${label}${hint}\x1B[K
68
+ `);
69
+ });
70
+ renderCount++;
71
+ }
72
+ return new Promise((resolve, reject) => {
73
+ stderr.write("\x1B[?25l");
74
+ stdin.setRawMode(true);
75
+ stdin.resume();
76
+ stdin.setEncoding("utf8");
77
+ function cleanup() {
78
+ stdin.setRawMode(false);
79
+ stdin.pause();
80
+ stdin.removeListener("data", onData);
81
+ stderr.write("\x1B[?25h");
82
+ }
83
+ function moveCursor(direction) {
84
+ const cur = itemRowIndices.indexOf(cursorRowIdx);
85
+ const next = (cur + direction + itemRowIndices.length) % itemRowIndices.length;
86
+ cursorRowIdx = itemRowIndices[next];
87
+ render();
88
+ }
89
+ function toggleAll() {
90
+ if (selected.size === items.length) {
91
+ selected.clear();
92
+ } else {
93
+ items.forEach((_, idx) => selected.add(idx));
94
+ }
95
+ render();
96
+ }
97
+ function onData(key) {
98
+ if (key === "\x1B[A" || key === "k") {
99
+ moveCursor(-1);
100
+ } else if (key === "\x1B[B" || key === "j") {
101
+ moveCursor(1);
102
+ } else if (key === " ") {
103
+ const row = rows[cursorRowIdx];
104
+ if (row.kind === "item") {
105
+ const idx = row.itemIndex;
106
+ if (selected.has(idx)) selected.delete(idx);
107
+ else selected.add(idx);
108
+ render();
109
+ }
110
+ } else if (key === "a" || key === "A") {
111
+ toggleAll();
112
+ } else if (key === "\r" || key === "\n") {
113
+ if (selected.size === 0) {
114
+ stderr.write("\x07");
115
+ return;
116
+ }
117
+ cleanup();
118
+ const result = Array.from(selected).map((i) => items[i].value);
119
+ resolve(result);
120
+ } else if (key === "q" || key === "Q" || key === "\x1B" || key === "") {
121
+ cleanup();
122
+ reject(new MultiselectCancelled());
123
+ }
124
+ }
125
+ stdin.on("data", onData);
126
+ render();
127
+ });
128
+ }
129
+ function promptSingleCheckboxSelect(opts) {
130
+ const { title, items } = opts;
131
+ if (items.length === 0) return Promise.reject(new Error("No items to select"));
132
+ const stderr = process.stderr;
133
+ const stdin = process.stdin;
134
+ if (!stdin.isTTY) return Promise.reject(new Error("A TTY is required for single-select"));
135
+ const preselectedIndex = items.findIndex((item) => item.preselected);
136
+ let cursor = preselectedIndex >= 0 ? preselectedIndex : 0;
137
+ let selected = preselectedIndex >= 0 ? preselectedIndex : null;
138
+ let renderCount = 0;
139
+ const lines = items.length + 2;
140
+ function render() {
141
+ if (renderCount > 0) stderr.write(`\x1B[${lines}A`);
142
+ stderr.write(`${title} (space: select \xB7 enter: confirm \xB7 q: cancel)\x1B[K
143
+ `);
144
+ stderr.write(`\x1B[K
145
+ `);
146
+ items.forEach((it, idx) => {
147
+ const pointer = idx === cursor ? "\x1B[36m\u276F\x1B[0m" : " ";
148
+ const checkbox = selected === idx ? "\x1B[32m[x]\x1B[0m" : "[ ]";
149
+ const hint = it.hint ? ` \x1B[90m${it.hint}\x1B[0m` : "";
150
+ stderr.write(`${pointer} ${checkbox} ${it.label}${hint}\x1B[K
151
+ `);
152
+ });
153
+ renderCount++;
154
+ }
155
+ return new Promise((resolve, reject) => {
156
+ stderr.write("\x1B[?25l");
157
+ stdin.setRawMode(true);
158
+ stdin.resume();
159
+ stdin.setEncoding("utf8");
160
+ function cleanup() {
161
+ stdin.setRawMode(false);
162
+ stdin.pause();
163
+ stdin.removeListener("data", onData);
164
+ stderr.write("\x1B[?25h");
165
+ }
166
+ function moveCursor(direction) {
167
+ cursor = (cursor + direction + items.length) % items.length;
168
+ render();
169
+ }
170
+ function onData(key) {
171
+ if (key === "\x1B[A" || key === "k") {
172
+ moveCursor(-1);
173
+ } else if (key === "\x1B[B" || key === "j") {
174
+ moveCursor(1);
175
+ } else if (key === " ") {
176
+ selected = cursor;
177
+ render();
178
+ } else if (key === "\r" || key === "\n") {
179
+ if (selected === null) {
180
+ stderr.write("\x07");
181
+ return;
182
+ }
183
+ cleanup();
184
+ resolve(items[selected].value);
185
+ } else if (key === "q" || key === "Q" || key === "\x1B" || key === "") {
186
+ cleanup();
187
+ reject(new MultiselectCancelled());
188
+ }
189
+ }
190
+ stdin.on("data", onData);
191
+ render();
192
+ });
193
+ }
194
+ function promptSingleSelect(opts) {
195
+ const { title, items } = opts;
196
+ if (items.length === 0) return Promise.reject(new Error("No items to select"));
197
+ const stderr = process.stderr;
198
+ const stdin = process.stdin;
199
+ if (!stdin.isTTY) return Promise.reject(new Error("A TTY is required for single-select"));
200
+ let cursor = 0;
201
+ let renderCount = 0;
202
+ const lines = items.length + 1;
203
+ function render() {
204
+ if (renderCount > 0) stderr.write(`\x1B[${lines}A`);
205
+ stderr.write(`${title}\x1B[K
206
+ `);
207
+ items.forEach((it, idx) => {
208
+ const pointer = idx === cursor ? "\x1B[36m\u276F\x1B[0m" : " ";
209
+ stderr.write(`${pointer} ${it.label}\x1B[K
210
+ `);
211
+ });
212
+ renderCount++;
213
+ }
214
+ return new Promise((resolve, reject) => {
215
+ stderr.write("\x1B[?25l");
216
+ stdin.setRawMode(true);
217
+ stdin.resume();
218
+ stdin.setEncoding("utf8");
219
+ function cleanup() {
220
+ stdin.setRawMode(false);
221
+ stdin.pause();
222
+ stdin.removeListener("data", onData);
223
+ stderr.write("\x1B[?25h");
224
+ }
225
+ function onData(key) {
226
+ if (key === "\x1B[A" || key === "k") {
227
+ cursor = (cursor - 1 + items.length) % items.length;
228
+ render();
229
+ } else if (key === "\x1B[B" || key === "j") {
230
+ cursor = (cursor + 1) % items.length;
231
+ render();
232
+ } else if (key === "\r" || key === "\n") {
233
+ cleanup();
234
+ resolve(items[cursor].value);
235
+ } else if (key === "q" || key === "Q" || key === "\x1B" || key === "") {
236
+ cleanup();
237
+ reject(new MultiselectCancelled());
238
+ }
239
+ }
240
+ stdin.on("data", onData);
241
+ render();
242
+ });
243
+ }
244
+
245
+ export {
246
+ MultiselectCancelled,
247
+ promptMultiselect,
248
+ promptSingleCheckboxSelect,
249
+ promptSingleSelect
250
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getActiveHost,
3
3
  getSandboxRuntimeRoot
4
- } from "./chunk-V6FR6WTW.js";
4
+ } from "./chunk-GJJA4CQZ.js";
5
5
 
6
6
  // src/core/te-agent-credentials.ts
7
7
  import { readFileSync } from "fs";
@@ -147,8 +147,8 @@ async function signRequest(method, path, rawBody, hostOverride) {
147
147
  rawBody
148
148
  };
149
149
  }
150
- const { getToken } = await import("./auth-ENM3FE6L.js");
151
- const { getCliToken } = await import("./cli-token-4SBMXAUK.js");
150
+ const { getToken } = await import("./auth-NN55553T.js");
151
+ const { getCliToken } = await import("./cli-token-GL5MS5FK.js");
152
152
  const baseUrl = hostOverride ? teClaudeBaseFromActiveHost(hostOverride) : sandboxCred?.url || teClaudeBaseFromActiveHost();
153
153
  if (!baseUrl) {
154
154
  throw new TeAgentCredentialsError(
@@ -338,8 +338,8 @@ async function uploadToMainApp(path, formData, hostOverride) {
338
338
  "X-Sandbox-Secret-Key": sandboxCred.sandboxSecretKey
339
339
  };
340
340
  } else {
341
- const { getToken } = await import("./auth-ENM3FE6L.js");
342
- const { getCliToken } = await import("./cli-token-4SBMXAUK.js");
341
+ const { getToken } = await import("./auth-NN55553T.js");
342
+ const { getCliToken } = await import("./cli-token-GL5MS5FK.js");
343
343
  baseUrl = (hostOverride ? teClaudeBaseFromActiveHost(hostOverride) : sandboxCred?.url || teClaudeBaseFromActiveHost())?.replace(/\/$/, "") || "";
344
344
  if (!baseUrl) {
345
345
  throw new TeAgentCredentialsError(
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getCliToken
3
- } from "./chunk-E7UXXHO3.js";
3
+ } from "./chunk-Z3OXWCIA.js";
4
4
  import {
5
5
  safeJsonParse
6
- } from "./chunk-V6FR6WTW.js";
6
+ } from "./chunk-GJJA4CQZ.js";
7
7
  import {
8
8
  PermissionError
9
- } from "./chunk-24BAVOX3.js";
9
+ } from "./chunk-AXDXJTPC.js";
10
10
 
11
11
  // src/core/mcp-access.ts
12
12
  function buildUrl(host, path, params = {}) {
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  peekCliToken
3
- } from "./chunk-E7UXXHO3.js";
3
+ } from "./chunk-Z3OXWCIA.js";
4
4
  import {
5
5
  getToken
6
- } from "./chunk-IR4ZLVPW.js";
6
+ } from "./chunk-YV52FB5G.js";
7
7
  import {
8
8
  getActiveHost,
9
9
  getConfigDir,
10
10
  isAeSandboxRuntime,
11
11
  normalizeUrl
12
- } from "./chunk-V6FR6WTW.js";
12
+ } from "./chunk-GJJA4CQZ.js";
13
13
  import {
14
14
  logger
15
- } from "./chunk-LYVNONC4.js";
15
+ } from "./chunk-JHENBQ5B.js";
16
16
 
17
17
  // src/core/version-sync.ts
18
18
  import { spawnSync } from "child_process";
@@ -23,9 +23,13 @@ import path from "path";
23
23
  function shouldSkipUpdateCheck(argv = process.argv) {
24
24
  if (process.env.AE_CLI_NO_UPDATE_CHECK === "1") return true;
25
25
  if (process.env.CI === "true" || process.env.CI === "1") return true;
26
- return argv.slice(2).some((arg) => {
26
+ return argv.slice(2).some((arg, index, args) => {
27
27
  if (arg === "--no-update-check") return true;
28
- if (arg === "--version" || arg === "-V" || arg === "--help" || arg === "-h") return true;
28
+ if (arg === "--version") {
29
+ const value = args[index + 1];
30
+ return !value || value.startsWith("-");
31
+ }
32
+ if (arg === "-V" || arg === "--help" || arg === "-h") return true;
29
33
  return false;
30
34
  });
31
35
  }
@@ -3,10 +3,10 @@ import {
3
3
  getConfigDir,
4
4
  normalizeUrl,
5
5
  safeJsonParse
6
- } from "./chunk-V6FR6WTW.js";
6
+ } from "./chunk-GJJA4CQZ.js";
7
7
  import {
8
8
  logger
9
- } from "./chunk-LYVNONC4.js";
9
+ } from "./chunk-JHENBQ5B.js";
10
10
 
11
11
  // src/core/secure-store.ts
12
12
  import crypto from "crypto";
@@ -233,6 +233,25 @@ var SecureStoreAuthError = class extends Error {
233
233
  }
234
234
  };
235
235
 
236
+ // src/core/host-guidance.ts
237
+ var AE_TRIAL_URL = "https://thinkingai.cn/request-demo";
238
+ var AE_HOST_SETUP_COMMAND = "ae-cli config set-host <url>";
239
+ function missingAeHostHint(additionalAction) {
240
+ const actions = [
241
+ `If your organization already uses AgenticEngine, ask your administrator for its AE URL, then run: ${AE_HOST_SETUP_COMMAND}.`,
242
+ `If you do not have an AgenticEngine environment, request a trial: ${AE_TRIAL_URL}`
243
+ ];
244
+ if (additionalAction) actions.push(additionalAction);
245
+ return actions.join(" ");
246
+ }
247
+ function missingAeHostGuidance() {
248
+ return {
249
+ configure_host: AE_HOST_SETUP_COMMAND,
250
+ existing_customer: "Ask your AgenticEngine administrator for the AE environment URL.",
251
+ request_trial_url: AE_TRIAL_URL
252
+ };
253
+ }
254
+
236
255
  // src/core/auth.ts
237
256
  function resolveHost(hostOverride) {
238
257
  if (hostOverride) return normalizeUrl(hostOverride);
@@ -262,7 +281,7 @@ async function getToken(hostUrl) {
262
281
  if (!hostUrl) {
263
282
  throw new Error(
264
283
  `No AE host configured.
265
- Run: ae-cli config set-host <url>`
284
+ ` + missingAeHostHint()
266
285
  );
267
286
  }
268
287
  try {
@@ -288,6 +307,9 @@ export {
288
307
  clear,
289
308
  loadCliToken,
290
309
  SecureStoreAuthError,
310
+ AE_TRIAL_URL,
311
+ missingAeHostHint,
312
+ missingAeHostGuidance,
291
313
  resolveHost,
292
314
  validateToken,
293
315
  invalidateAccessTokenForRetry,
@@ -3,7 +3,7 @@ import {
3
3
  load,
4
4
  loadCliToken,
5
5
  save
6
- } from "./chunk-IR4ZLVPW.js";
6
+ } from "./chunk-YV52FB5G.js";
7
7
  import {
8
8
  getActiveHost,
9
9
  getConfigDir,
@@ -12,10 +12,10 @@ import {
12
12
  normalizeUrl,
13
13
  safeJsonParse,
14
14
  safeReadJsonFile
15
- } from "./chunk-V6FR6WTW.js";
15
+ } from "./chunk-GJJA4CQZ.js";
16
16
  import {
17
17
  logger
18
- } from "./chunk-LYVNONC4.js";
18
+ } from "./chunk-JHENBQ5B.js";
19
19
 
20
20
  // src/core/cli-token.ts
21
21
  import fs from "fs";
@@ -6,10 +6,10 @@ import {
6
6
  mintCliToken,
7
7
  peekCliToken,
8
8
  setCliTokenManual
9
- } from "./chunk-E7UXXHO3.js";
10
- import "./chunk-IR4ZLVPW.js";
11
- import "./chunk-V6FR6WTW.js";
12
- import "./chunk-LYVNONC4.js";
9
+ } from "./chunk-Z3OXWCIA.js";
10
+ import "./chunk-YV52FB5G.js";
11
+ import "./chunk-GJJA4CQZ.js";
12
+ import "./chunk-JHENBQ5B.js";
13
13
  export {
14
14
  _resetRenewMemoryForTest,
15
15
  clearCliToken,
@@ -7,10 +7,10 @@ import {
7
7
  queryReportData,
8
8
  querySql,
9
9
  wsQuery
10
- } from "./chunk-DB4Q3ANU.js";
11
- import "./chunk-IR4ZLVPW.js";
12
- import "./chunk-V6FR6WTW.js";
13
- import "./chunk-LYVNONC4.js";
10
+ } from "./chunk-6A2FUCIS.js";
11
+ import "./chunk-YV52FB5G.js";
12
+ import "./chunk-GJJA4CQZ.js";
13
+ import "./chunk-JHENBQ5B.js";
14
14
  export {
15
15
  httpDelete,
16
16
  httpGet,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CommunityReportError
3
- } from "./chunk-24BAVOX3.js";
3
+ } from "./chunk-AXDXJTPC.js";
4
4
  import {
5
5
  logger
6
- } from "./chunk-LYVNONC4.js";
6
+ } from "./chunk-JHENBQ5B.js";
7
7
 
8
8
  // src/core/community-report-client.ts
9
9
  var DEFAULT_TIMEOUT_MS = 3e4;