@thinkingai/ae-cli 1.0.3 → 1.0.18

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 (198) hide show
  1. package/README.md +42 -72
  2. package/README.zh.md +202 -0
  3. package/dist/auth-2UTBG5U3.js +144 -0
  4. package/dist/{auth-BQC5DBE7.js → auth-ECD46NBA.js} +6 -4
  5. package/dist/{chunk-3CDLNXTD.js → chunk-4KQ7H7DY.js} +15 -3
  6. package/dist/{chunk-53FNNCZW.js → chunk-7QBNU44L.js} +101 -3
  7. package/dist/{chunk-ZYXIGPG7.js → chunk-LAAS6ITR.js} +3 -3
  8. package/dist/{chunk-EBFUVWIZ.js → chunk-MR57UIKC.js} +42 -0
  9. package/dist/{client-5QSQBBDB.js → client-O56G2SNJ.js} +3 -3
  10. package/dist/{config-Q7J3Z7Z2.js → config-BU5FHGGE.js} +23 -8
  11. package/dist/index.js +15 -15
  12. package/dist/{raw-G3GKHAPZ.js → raw-A3VN2B6I.js} +4 -4
  13. package/dist/{te-analysis-CHFTDN55.js → te-analysis-UGKESPBE.js} +62 -24
  14. package/dist/{te-audience-M6LQY6M7.js → te-audience-THZNVHYB.js} +61 -21
  15. package/dist/{te-common-BLQ7DVGC.js → te-common-QZOUME3S.js} +6 -33
  16. package/dist/{community-FVDAWGS4.js → te-community-AZVW3NFX.js} +59 -59
  17. package/dist/{te-dataops-V4OTKY35.js → te-dataops-OE5PX2K6.js} +3 -28
  18. package/dist/{te-engage-DXE4R5EW.js → te-engage-RYGEQTYK.js} +4 -22
  19. package/dist/{te-meta-FMM7KCVI.js → te-meta-MGO5BCMG.js} +88 -18
  20. package/package.json +3 -3
  21. package/skills/ae-analysis/SKILL.md +287 -0
  22. package/skills/{te-meta/references/batch-create-metadata.md → ae-analysis/references/batch_create_metadata.md} +3 -3
  23. package/skills/{te-meta/references/batch-edit-metadata.md → ae-analysis/references/batch_edit_metadata.md} +2 -2
  24. package/skills/{te-analysis/references/build-entity-details-sql.md → ae-analysis/references/build_entity_details_sql.md} +9 -9
  25. package/skills/{te-analysis/references/build-event-details-sql.md → ae-analysis/references/build_event_details_sql.md} +9 -9
  26. package/skills/{te-analysis/references/create-alert.md → ae-analysis/references/create_alert.md} +4 -4
  27. package/skills/{te-audience/references/create-cluster.md → ae-analysis/references/create_cluster.md} +23 -19
  28. package/skills/{te-analysis/references/create-dashboard.md → ae-analysis/references/create_dashboard.md} +4 -4
  29. package/skills/{te-meta/references/create-metric.md → ae-analysis/references/create_metric.md} +10 -10
  30. package/skills/{te-analysis/references/create-or-update-dashboard-note.md → ae-analysis/references/create_or_update_dashboard_note.md} +3 -3
  31. package/skills/{te-meta/references/create-project-mark-time.md → ae-analysis/references/create_project_mark_time.md} +3 -3
  32. package/skills/{te-analysis/references/create-public-access-link.md → ae-analysis/references/create_public_access_link.md} +3 -3
  33. package/skills/{te-analysis/references/create-report.md → ae-analysis/references/create_report.md} +9 -9
  34. package/skills/{te-analysis/references/create-result-cluster.md → ae-analysis/references/create_result_cluster.md} +6 -6
  35. package/skills/{te-audience/references/create-tag.md → ae-analysis/references/create_tag.md} +16 -15
  36. package/skills/{te-meta/references/create-virtual-event.md → ae-analysis/references/create_virtual_event.md} +9 -9
  37. package/skills/{te-meta/references/create-virtual-property.md → ae-analysis/references/create_virtual_property.md} +7 -7
  38. package/skills/{te-meta/references/delete-project-mark-times.md → ae-analysis/references/delete_project_mark_times.md} +2 -2
  39. package/skills/{te-meta/references/delete-track-items.md → ae-analysis/references/delete_track_items.md} +2 -2
  40. package/skills/{te-analysis/references/drilldown-user-events.md → ae-analysis/references/drilldown_user_events.md} +8 -8
  41. package/skills/{te-analysis/references/drilldown-users.md → ae-analysis/references/drilldown_users.md} +10 -7
  42. package/skills/ae-analysis/references/generate_track_program.md +51 -0
  43. package/skills/ae-analysis/references/generate_track_sdk_sample.md +43 -0
  44. package/skills/{te-analysis/references/get-alert.md → ae-analysis/references/get_alert.md} +2 -2
  45. package/skills/{te-analysis/references/get-alert-definition-schema.md → ae-analysis/references/get_alert_definition_schema.md} +1 -1
  46. package/skills/ae-analysis/references/get_analysis_query_schema.md +61 -0
  47. package/skills/ae-analysis/references/get_cluster_definition_schema.md +53 -0
  48. package/skills/ae-analysis/references/get_clusters_by_name.md +69 -0
  49. package/skills/{te-analysis/references/get-filter-schema.md → ae-analysis/references/get_filter_schema.md} +1 -1
  50. package/skills/{te-analysis/references/get-groupby-schema.md → ae-analysis/references/get_groupby_schema.md} +1 -1
  51. package/skills/{te-meta/references/get-metric.md → ae-analysis/references/get_metric.md} +2 -2
  52. package/skills/{te-meta/references/get-project-config.md → ae-analysis/references/get_project_config.md} +2 -2
  53. package/skills/{te-analysis/references/get-report-definition.md → ae-analysis/references/get_report_definition.md} +2 -2
  54. package/skills/{te-common/references/get-resource-url.md → ae-analysis/references/get_resource_url.md} +4 -4
  55. package/skills/{te-analysis/references/get-table-columns.md → ae-analysis/references/get_table_columns.md} +2 -2
  56. package/skills/ae-analysis/references/get_tag_definition_schema.md +49 -0
  57. package/skills/ae-analysis/references/get_tags_by_name.md +69 -0
  58. package/skills/{te-meta/references/get-track-program.md → ae-analysis/references/get_track_program.md} +2 -2
  59. package/skills/{te-analysis/references/list-alerts.md → ae-analysis/references/list_alerts.md} +10 -3
  60. package/skills/{te-audience/references/list-cluster-members.md → ae-analysis/references/list_cluster_members.md} +11 -4
  61. package/skills/{te-audience/references/list-clusters.md → ae-analysis/references/list_clusters.md} +14 -4
  62. package/skills/{te-analysis/references/list-dashboards.md → ae-analysis/references/list_dashboards.md} +12 -4
  63. package/skills/{te-meta/references/list-entities.md → ae-analysis/references/list_entities.md} +10 -3
  64. package/skills/{te-meta/references/list-events.md → ae-analysis/references/list_events.md} +12 -5
  65. package/skills/ae-analysis/references/list_metrics.md +45 -0
  66. package/skills/ae-analysis/references/list_project_mark_times.md +42 -0
  67. package/skills/{te-meta/references/list-project-users.md → ae-analysis/references/list_project_users.md} +2 -2
  68. package/skills/{te-common/references/list-projects.md → ae-analysis/references/list_projects.md} +6 -4
  69. package/skills/{te-meta/references/list-properties.md → ae-analysis/references/list_properties.md} +9 -4
  70. package/skills/ae-analysis/references/list_public_access_links.md +41 -0
  71. package/skills/{te-analysis/references/list-reports.md → ae-analysis/references/list_reports.md} +12 -4
  72. package/skills/{te-audience/references/list-tag-members.md → ae-analysis/references/list_tag_members.md} +11 -4
  73. package/skills/{te-audience/references/list-tags.md → ae-analysis/references/list_tags.md} +14 -4
  74. package/skills/{te-analysis/references/load-filters.md → ae-analysis/references/load_filters.md} +3 -3
  75. package/skills/{te-analysis/references/query-adhoc.md → ae-analysis/references/query_adhoc.md} +24 -9
  76. package/skills/{te-analysis/references/query-dashboard-detail.md → ae-analysis/references/query_dashboard_detail.md} +2 -2
  77. package/skills/{te-analysis/references/query-dashboard-report-data.md → ae-analysis/references/query_dashboard_report_data.md} +9 -9
  78. package/skills/{te-analysis/references/query-entity-details.md → ae-analysis/references/query_entity_details.md} +10 -10
  79. package/skills/{te-analysis/references/query-event-details.md → ae-analysis/references/query_event_details.md} +12 -12
  80. package/skills/{te-analysis/references/query-report-data.md → ae-analysis/references/query_report_data.md} +11 -11
  81. package/skills/{te-audience/references/refresh-cluster.md → ae-analysis/references/refresh_cluster.md} +2 -2
  82. package/skills/{te-audience/references/refresh-tag.md → ae-analysis/references/refresh_tag.md} +2 -2
  83. package/skills/{te-meta/references/save-track-items.md → ae-analysis/references/save_track_items.md} +2 -2
  84. package/skills/{te-analysis/references/update-alert.md → ae-analysis/references/update_alert.md} +4 -4
  85. package/skills/{te-audience/references/update-cluster.md → ae-analysis/references/update_cluster.md} +15 -13
  86. package/skills/{te-analysis/references/update-dashboard.md → ae-analysis/references/update_dashboard.md} +3 -3
  87. package/skills/{te-meta/references/update-metric.md → ae-analysis/references/update_metric.md} +9 -9
  88. package/skills/{te-meta/references/update-project-mark-time.md → ae-analysis/references/update_project_mark_time.md} +3 -3
  89. package/skills/{te-analysis/references/update-public-access-link.md → ae-analysis/references/update_public_access_link.md} +3 -3
  90. package/skills/{te-audience/references/update-tag.md → ae-analysis/references/update_tag.md} +15 -14
  91. package/skills/ae-community/SKILL.md +305 -0
  92. package/skills/{te-community → ae-community}/references/community-activity-analysis.md +6 -7
  93. package/skills/{te-community → ae-community}/references/community-analyzing-official-content.md +3 -4
  94. package/skills/{te-community → ae-community}/references/community-analyzing-theme-comment.md +5 -6
  95. package/skills/{te-community → ae-community}/references/community-character-analysis.md +5 -6
  96. package/skills/{te-community → ae-community}/references/community-daily-report.md +7 -8
  97. package/skills/{te-community → ae-community}/references/community-hottopic-insight.md +4 -5
  98. package/skills/{te-community → ae-community}/references/community-weekly-report.md +7 -8
  99. package/skills/{te-community → ae-community}/references/get_channel_info.md +4 -5
  100. package/skills/{te-community → ae-community}/references/get_comment_tag_analysis.md +3 -4
  101. package/skills/{te-community → ae-community}/references/get_comments_summary.md +4 -5
  102. package/skills/{te-community → ae-community}/references/get_corpus_tags.md +3 -4
  103. package/skills/{te-community → ae-community}/references/get_daily_summary.md +3 -4
  104. package/skills/{te-community → ae-community}/references/get_hot_topics.md +3 -4
  105. package/skills/{te-community → ae-community}/references/get_livestream_analysis.md +3 -4
  106. package/skills/{te-community → ae-community}/references/get_livestream_detail.md +4 -5
  107. package/skills/{te-community → ae-community}/references/get_livestream_list.md +3 -4
  108. package/skills/{te-community → ae-community}/references/get_livestream_overview.md +3 -4
  109. package/skills/{te-community → ae-community}/references/get_livestream_room_metrics.md +3 -4
  110. package/skills/{te-community → ae-community}/references/get_livestream_rooms.md +3 -4
  111. package/skills/{te-community → ae-community}/references/get_overview_metrics.md +3 -4
  112. package/skills/{te-community → ae-community}/references/get_post_detail.md +4 -5
  113. package/skills/{te-community → ae-community}/references/get_risk_content.md +5 -6
  114. package/skills/{te-community → ae-community}/references/get_sentiment_overview.md +4 -5
  115. package/skills/{te-community → ae-community}/references/get_tag_trends.md +3 -4
  116. package/skills/{te-community → ae-community}/references/get_topic_detail.md +3 -4
  117. package/skills/{te-community → ae-community}/references/search_posts.md +5 -6
  118. package/skills/{te-dataops → ae-dataops}/SKILL.md +73 -10
  119. package/skills/{te-dataops → ae-dataops}/references/dataops-flow-create.md +1 -1
  120. package/skills/{te-dataops → ae-dataops}/references/dataops-flow-monitor.md +1 -1
  121. package/skills/{te-dataops → ae-dataops}/references/dataops-integration.md +1 -1
  122. package/skills/{te-dataops → ae-dataops}/references/dataops-query.md +1 -1
  123. package/skills/{te-dataops → ae-dataops}/references/dataops-table.md +1 -1
  124. package/skills/{te-engage → ae-engage}/SKILL.md +106 -6
  125. package/skills/{te-engage → ae-engage}/references/add-approver.md +2 -2
  126. package/skills/{te-engage → ae-engage}/references/add-channel.md +2 -2
  127. package/skills/{te-engage → ae-engage}/references/approver-list.md +2 -2
  128. package/skills/{te-engage → ae-engage}/references/cancel-query-by-request-id.md +2 -2
  129. package/skills/{te-engage → ae-engage}/references/channel-detail.md +2 -2
  130. package/skills/{te-engage → ae-engage}/references/channel-list.md +2 -2
  131. package/skills/{te-engage → ae-engage}/references/config-channel-detail.md +2 -2
  132. package/skills/{te-engage → ae-engage}/references/config-channel-list.md +2 -2
  133. package/skills/{te-engage → ae-engage}/references/config-item-analysis-report.md +2 -2
  134. package/skills/{te-engage → ae-engage}/references/config-item-detail.md +2 -2
  135. package/skills/{te-engage → ae-engage}/references/config-item-list.md +2 -2
  136. package/skills/{te-engage → ae-engage}/references/config-item-strategy-comparison.md +2 -2
  137. package/skills/{te-engage → ae-engage}/references/config-item-trigger-report.md +2 -2
  138. package/skills/{te-engage → ae-engage}/references/copy-config-template.md +2 -2
  139. package/skills/{te-engage → ae-engage}/references/delete-channel.md +2 -2
  140. package/skills/{te-engage → ae-engage}/references/delete-config-channel.md +2 -2
  141. package/skills/{te-engage → ae-engage}/references/delete-config-item.md +2 -2
  142. package/skills/{te-engage → ae-engage}/references/delete-flow.md +2 -2
  143. package/skills/{te-engage → ae-engage}/references/flow-ab-split-node-report.md +2 -2
  144. package/skills/{te-engage → ae-engage}/references/flow-detail.md +2 -2
  145. package/skills/{te-engage → ae-engage}/references/flow-list.md +2 -2
  146. package/skills/{te-engage → ae-engage}/references/flow-node-config-schema.md +2 -2
  147. package/skills/{te-engage → ae-engage}/references/flow-node-detail-report.md +2 -2
  148. package/skills/{te-engage → ae-engage}/references/flow-node-overview-report.md +2 -2
  149. package/skills/{te-engage → ae-engage}/references/flow-process-report.md +2 -2
  150. package/skills/{te-engage → ae-engage}/references/manage-flow.md +2 -2
  151. package/skills/{te-engage → ae-engage}/references/manage-strategy.md +2 -2
  152. package/skills/{te-engage → ae-engage}/references/manage-task.md +2 -2
  153. package/skills/{te-engage → ae-engage}/references/modify-flow-base-info.md +2 -2
  154. package/skills/{te-engage → ae-engage}/references/save-flow.md +3 -3
  155. package/skills/{te-engage → ae-engage}/references/strategy-detail.md +2 -2
  156. package/skills/{te-engage → ae-engage}/references/strategy-list.md +2 -2
  157. package/skills/{te-engage → ae-engage}/references/task-data-detail.md +3 -10
  158. package/skills/{te-engage → ae-engage}/references/task-data-overview.md +3 -9
  159. package/skills/{te-engage → ae-engage}/references/task-detail.md +2 -2
  160. package/skills/{te-engage → ae-engage}/references/task-experiment-report.md +3 -9
  161. package/skills/{te-engage → ae-engage}/references/task-list.md +2 -2
  162. package/skills/{te-engage → ae-engage}/references/task-metric-detail.md +3 -9
  163. package/skills/{te-engage → ae-engage}/references/task-stats.md +2 -2
  164. package/skills/{te-engage → ae-engage}/references/update-channel-status.md +2 -2
  165. package/skills/{te-engage → ae-engage}/references/update-config-channel-status.md +2 -2
  166. package/skills/{te-engage → ae-engage}/references/validate-flow-node-config.md +2 -2
  167. package/skills/{te-engage → ae-engage}/references/whitelist-list.md +2 -2
  168. package/dist/auth-DXKYLMO7.js +0 -81
  169. package/dist/auth-JXELJNDS.js +0 -19
  170. package/dist/auth-L3G3A74I.js +0 -67
  171. package/dist/chunk-3GM5LJZR.js +0 -145
  172. package/dist/chunk-JD5DXMKL.js +0 -172
  173. package/dist/chunk-OVQOK35G.js +0 -108
  174. package/dist/chunk-RJNLN3KQ.js +0 -217
  175. package/dist/client-T4VODLA6.js +0 -16
  176. package/dist/community-GMALVSRF.js +0 -684
  177. package/dist/config-V7AXKDMB.js +0 -242
  178. package/dist/raw-ZNVURYMR.js +0 -59
  179. package/dist/te-analysis-7NN3SY3I.js +0 -871
  180. package/dist/te-audience-P43BWMHM.js +0 -350
  181. package/dist/te-common-H3IPTI2I.js +0 -144
  182. package/dist/te-dataops-WCGDBJLF.js +0 -1853
  183. package/dist/te-engage-UTRVNTGU.js +0 -1470
  184. package/dist/te-meta-HGYNXVGF.js +0 -479
  185. package/skills/te-analysis/SKILL.md +0 -107
  186. package/skills/te-analysis/references/get-analysis-query-schema.md +0 -36
  187. package/skills/te-analysis/references/list-public-access-links.md +0 -31
  188. package/skills/te-audience/SKILL.md +0 -63
  189. package/skills/te-audience/references/get-cluster-definition-schema.md +0 -37
  190. package/skills/te-audience/references/get-clusters-by-name.md +0 -32
  191. package/skills/te-audience/references/get-tag-definition-schema.md +0 -32
  192. package/skills/te-audience/references/get-tags-by-name.md +0 -32
  193. package/skills/te-common/SKILL.md +0 -135
  194. package/skills/te-community/SKILL.md +0 -125
  195. package/skills/te-meta/SKILL.md +0 -71
  196. package/skills/te-meta/references/list-metrics.md +0 -33
  197. package/skills/te-meta/references/list-project-mark-times.md +0 -33
  198. package/skills/te-shared/SKILL.md +0 -115
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getToken
3
- } from "./chunk-3CDLNXTD.js";
3
+ } from "./chunk-4KQ7H7DY.js";
4
4
  import {
5
5
  getActiveHost,
6
6
  getConfigDir,
7
7
  safeJsonParse,
8
8
  safeReadJsonFile
9
- } from "./chunk-EBFUVWIZ.js";
9
+ } from "./chunk-MR57UIKC.js";
10
10
 
11
11
  // src/core/mcp.ts
12
12
  import fs from "fs";
@@ -54,6 +54,7 @@ function genRequestId() {
54
54
  }
55
55
  var MCP_TOKEN_FILE = path.join(getConfigDir(), "mcp-tokens.json");
56
56
  var MCP_TOKEN_GENERATE_PATH = "/v1/ta/mcp/token/generate";
57
+ var FALLBACK_MCP_TOKEN_FILE = "/data/app/te_agent_ta/.ae-config/mcp-token.json";
57
58
  function loadMcpTokenStore() {
58
59
  try {
59
60
  if (fs.existsSync(MCP_TOKEN_FILE)) {
@@ -68,6 +69,23 @@ function saveMcpTokenStore(store) {
68
69
  if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
69
70
  fs.writeFileSync(MCP_TOKEN_FILE, JSON.stringify(store, null, 2));
70
71
  }
72
+ function getFallbackMcpToken(hostUrl) {
73
+ try {
74
+ if (!fs.existsSync(FALLBACK_MCP_TOKEN_FILE)) {
75
+ return null;
76
+ }
77
+ const fallbackData = safeReadJsonFile(FALLBACK_MCP_TOKEN_FILE);
78
+ if (fallbackData && typeof fallbackData === "object" && !Array.isArray(fallbackData)) {
79
+ const url = fallbackData.url;
80
+ const token = fallbackData["mcp-token"];
81
+ if (url === hostUrl && token) {
82
+ return token;
83
+ }
84
+ }
85
+ } catch {
86
+ }
87
+ return null;
88
+ }
71
89
  async function generateMcpToken(hostUrl) {
72
90
  const teToken = await getToken(hostUrl);
73
91
  const base = hostUrl.replace(/\/+$/, "");
@@ -102,8 +120,60 @@ async function getMcpToken(hostOverride) {
102
120
  saveMcpTokenStore(updatedStore);
103
121
  return mcpToken;
104
122
  }
123
+ function clearMcpToken(hostUrl) {
124
+ const store = loadMcpTokenStore();
125
+ if (hostUrl) {
126
+ delete store[hostUrl];
127
+ } else {
128
+ for (const key of Object.keys(store)) {
129
+ delete store[key];
130
+ }
131
+ }
132
+ saveMcpTokenStore(store);
133
+ }
134
+ function setMcpTokenManual(token, hostUrl) {
135
+ const store = loadMcpTokenStore();
136
+ store[hostUrl] = token;
137
+ saveMcpTokenStore(store);
138
+ }
139
+ async function validateMcpToken(token, hostUrl) {
140
+ const mapping = getMcpMapping("analysis");
141
+ const base = hostUrl.replace(/\/+$/, "");
142
+ const url = `${base}/mcp/${mapping.componentName}/http/${mapping.mappingPath}`;
143
+ const requestId = 1;
144
+ const body = {
145
+ jsonrpc: JSONRPC_VERSION,
146
+ id: requestId,
147
+ method: "tools/list",
148
+ params: { _meta: { progressToken: requestId } }
149
+ };
150
+ const headers = {
151
+ "Content-Type": "application/json",
152
+ "Accept": "application/json, text/event-stream",
153
+ "mcp-protocol-version": MCP_PROTOCOL_VERSION,
154
+ "mcp-token": token
155
+ };
156
+ try {
157
+ const resp = await fetch(url, {
158
+ method: "POST",
159
+ headers,
160
+ body: JSON.stringify(body)
161
+ });
162
+ if (!resp.ok) {
163
+ return false;
164
+ }
165
+ const data = safeJsonParse(await resp.text());
166
+ if (data.error) {
167
+ return false;
168
+ }
169
+ return data.result?.tools !== void 0;
170
+ } catch {
171
+ return false;
172
+ }
173
+ }
105
174
  async function mcpRequest(url, method, params = {}, hostOverride) {
106
- const token = await getMcpToken(hostOverride);
175
+ const hostUrl = hostOverride || getActiveHost();
176
+ const token = await getMcpToken(hostUrl);
107
177
  const requestId = genRequestId();
108
178
  const paramsWithMeta = {
109
179
  ...params,
@@ -126,6 +196,31 @@ async function mcpRequest(url, method, params = {}, hostOverride) {
126
196
  headers,
127
197
  body: JSON.stringify(body)
128
198
  });
199
+ if (resp.status === 403) {
200
+ const fallbackToken = getFallbackMcpToken(hostUrl);
201
+ if (fallbackToken) {
202
+ const store = loadMcpTokenStore();
203
+ store[hostUrl] = fallbackToken;
204
+ saveMcpTokenStore(store);
205
+ process.stderr.write(`[ae-cli] MCP token refreshed from fallback for ${hostUrl}
206
+ `);
207
+ headers["mcp-token"] = fallbackToken;
208
+ const retryResp = await fetch(url, {
209
+ method: "POST",
210
+ headers,
211
+ body: JSON.stringify(body)
212
+ });
213
+ if (!retryResp.ok) {
214
+ throw new Error(`MCP HTTP error: ${retryResp.status} ${retryResp.statusText}`);
215
+ }
216
+ const retryData = safeJsonParse(await retryResp.text());
217
+ if (retryData.error) {
218
+ throw new Error(`MCP error: ${retryData.error.message || JSON.stringify(retryData.error)}`);
219
+ }
220
+ return retryData.result;
221
+ }
222
+ throw new Error(`MCP token expired or invalid. Please set a new MCP token: ae-cli auth set-mcp-token <token> --host ${hostUrl}`);
223
+ }
129
224
  if (!resp.ok) {
130
225
  throw new Error(`MCP HTTP error: ${resp.status} ${resp.statusText}`);
131
226
  }
@@ -169,6 +264,9 @@ function parseMcpResult(result) {
169
264
  export {
170
265
  registerMcpMappings,
171
266
  resolveMcpUrl,
267
+ clearMcpToken,
268
+ setMcpTokenManual,
269
+ validateMcpToken,
172
270
  callMcpTool,
173
271
  parseMcpResult
174
272
  };
@@ -2,10 +2,10 @@ import {
2
2
  clearToken,
3
3
  getToken,
4
4
  resolveHost
5
- } from "./chunk-3CDLNXTD.js";
5
+ } from "./chunk-4KQ7H7DY.js";
6
6
  import {
7
7
  safeJsonParse
8
- } from "./chunk-EBFUVWIZ.js";
8
+ } from "./chunk-MR57UIKC.js";
9
9
 
10
10
  // src/core/client.ts
11
11
  import WebSocket from "ws";
@@ -49,7 +49,7 @@ async function request(method, modulePath, params = {}, body = null, retry = tru
49
49
  return request(method, modulePath, params, body, false, resolvedHost);
50
50
  }
51
51
  if (data.return_code !== 0 && data.return_code !== void 0) {
52
- throw new Error(`TE API error: ${data.return_message || "unknown"} (code: ${data.return_code})`);
52
+ throw new Error(`AE API error: ${data.return_message || "unknown"} (code: ${data.return_code})`);
53
53
  }
54
54
  return data.data !== void 0 ? data.data : data;
55
55
  }
@@ -17,11 +17,37 @@ import fs2 from "fs";
17
17
  import path from "path";
18
18
  var CONFIG_DIR = path.join(process.env.HOME || "", ".ae-cli");
19
19
  var CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
20
+ var MCP_TOKENS_FILE = path.join(CONFIG_DIR, "mcp-tokens.json");
21
+ var FALLBACK_MCP_TOKEN_FILE = "/data/app/te_agent_ta/.ae-config/mcp-token.json";
20
22
  function ensureDir() {
21
23
  if (!fs2.existsSync(CONFIG_DIR)) fs2.mkdirSync(CONFIG_DIR, { recursive: true });
22
24
  }
25
+ function migrateFromFallback() {
26
+ if (!fs2.existsSync(FALLBACK_MCP_TOKEN_FILE) || fs2.existsSync(MCP_TOKENS_FILE)) {
27
+ return null;
28
+ }
29
+ try {
30
+ const fallbackData = safeReadJsonFile(FALLBACK_MCP_TOKEN_FILE);
31
+ const tokenStore = {};
32
+ if (fallbackData && typeof fallbackData === "object" && !Array.isArray(fallbackData)) {
33
+ const url = fallbackData.url;
34
+ const token = fallbackData["mcp-token"];
35
+ if (url && token) {
36
+ tokenStore[url] = token;
37
+ }
38
+ }
39
+ if (Object.keys(tokenStore).length > 0) {
40
+ ensureDir();
41
+ fs2.writeFileSync(MCP_TOKENS_FILE, JSON.stringify(tokenStore, null, 2));
42
+ return tokenStore;
43
+ }
44
+ } catch {
45
+ }
46
+ return null;
47
+ }
23
48
  function loadConfig() {
24
49
  try {
50
+ const migratedTokens = migrateFromFallback();
25
51
  if (fs2.existsSync(CONFIG_FILE)) {
26
52
  const raw = safeReadJsonFile(CONFIG_FILE);
27
53
  if (raw.defaultHost && !raw.activeHost) {
@@ -31,6 +57,22 @@ function loadConfig() {
31
57
  }
32
58
  return raw;
33
59
  }
60
+ if (migratedTokens && Object.keys(migratedTokens).length > 0) {
61
+ const hosts = {};
62
+ for (const url of Object.keys(migratedTokens)) {
63
+ hosts[url] = { label: url };
64
+ process.stderr.write(`[ae-cli] Added host: ${url}
65
+ `);
66
+ }
67
+ const activeHost = Object.keys(migratedTokens)[0];
68
+ process.stderr.write(`[ae-cli] Active host set to: ${activeHost}
69
+ `);
70
+ process.stderr.write(`[ae-cli] MCP tokens migrated from ${FALLBACK_MCP_TOKEN_FILE}
71
+ `);
72
+ const config = { activeHost, hosts };
73
+ saveConfig(config);
74
+ return config;
75
+ }
34
76
  } catch (err) {
35
77
  console.error(`Error loading config: ${err.message}`);
36
78
  }
@@ -4,9 +4,9 @@ import {
4
4
  queryReportData,
5
5
  querySql,
6
6
  wsQuery
7
- } from "./chunk-3GM5LJZR.js";
8
- import "./chunk-RJNLN3KQ.js";
9
- import "./chunk-OVQOK35G.js";
7
+ } from "./chunk-LAAS6ITR.js";
8
+ import "./chunk-4KQ7H7DY.js";
9
+ import "./chunk-MR57UIKC.js";
10
10
  export {
11
11
  httpGet,
12
12
  httpPost,
@@ -1,26 +1,29 @@
1
1
  import {
2
+ clearToken,
2
3
  getAuthStatus,
3
- getToken
4
- } from "./chunk-RJNLN3KQ.js";
4
+ getToken,
5
+ loadToken,
6
+ validateToken
7
+ } from "./chunk-4KQ7H7DY.js";
5
8
  import {
6
9
  addHost,
7
10
  listHosts,
8
11
  removeHost,
9
12
  setActiveHost,
10
13
  updateHostLabel
11
- } from "./chunk-OVQOK35G.js";
14
+ } from "./chunk-MR57UIKC.js";
12
15
 
13
16
  // src/commands/config.ts
14
17
  import * as readline from "readline";
15
18
  function registerConfig(program) {
16
- program.command("config").description("Interactive TE host configuration manager").action(async () => {
19
+ program.command("config").description("Interactive AE host configuration manager").action(async () => {
17
20
  await runConfigUI(program);
18
21
  });
19
22
  }
20
23
  async function runConfigUI(program) {
21
24
  const hosts = listHosts();
22
25
  if (hosts.length === 0) {
23
- process.stderr.write("\x1B[1m[ae-cli] No TE hosts configured. Let's add one.\x1B[0m\n\n");
26
+ process.stderr.write("\x1B[1m[ae-cli] No AE hosts configured. Let's add one.\x1B[0m\n\n");
24
27
  const newHost = await promptNewHost();
25
28
  if (!newHost) {
26
29
  process.stderr.write("Cancelled.\n");
@@ -136,9 +139,21 @@ Delete \x1B[1m${label}\x1B[0m (${url})? [y/N]: `, (a) => {
136
139
  async function ensureAuth(hostUrl) {
137
140
  const status = getAuthStatus(hostUrl);
138
141
  if (status.authenticated) {
139
- process.stderr.write(`\x1B[32m\u2713\x1B[0m Token valid for ${hostUrl}
142
+ const cached = loadToken(hostUrl);
143
+ if (cached && cached.token) {
144
+ process.stderr.write(`\x1B[2m[ae-cli] Validating token...\x1B[0m
140
145
  `);
141
- return;
146
+ const isValid = await validateToken(cached.token, hostUrl);
147
+ if (isValid) {
148
+ process.stderr.write(`\x1B[32m\u2713\x1B[0m Token valid for ${hostUrl}
149
+ `);
150
+ return;
151
+ } else {
152
+ clearToken(hostUrl);
153
+ process.stderr.write(`\x1B[33m!\x1B[0m Token expired or invalid. Re-authenticating...
154
+ `);
155
+ }
156
+ }
142
157
  }
143
158
  process.stderr.write(`
144
159
  \x1B[33m!\x1B[0m No valid token for ${hostUrl}. Starting login...
@@ -157,7 +172,7 @@ async function ensureAuth(hostUrl) {
157
172
  async function promptNewHost() {
158
173
  const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
159
174
  const ask = (q) => new Promise((resolve) => rl.question(q, (a) => resolve(a.trim())));
160
- const url = await ask("TE host URL (e.g., https://ta.thinkingdata.cn): ");
175
+ const url = await ask("AE host URL (e.g., https://ta.thinkingdata.cn): ");
161
176
  if (!url) {
162
177
  rl.close();
163
178
  return null;
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  getActiveHost,
7
7
  safeJsonParse
8
- } from "./chunk-EBFUVWIZ.js";
8
+ } from "./chunk-MR57UIKC.js";
9
9
 
10
10
  // src/index.ts
11
11
  import { Command as CommanderCommand } from "commander";
@@ -50,7 +50,7 @@ async function runCommand(cmd, opts, globalOpts) {
50
50
  const message = err.message || String(err);
51
51
  if (message.includes("token") || message.includes("auth") || message.includes("401") || message.includes("403")) {
52
52
  printError("auth", message, "Run: ae-cli auth login");
53
- } else if (message.includes("TE API error")) {
53
+ } else if (message.includes("AE API error")) {
54
54
  printError("api", message);
55
55
  } else {
56
56
  printError("api", message);
@@ -62,7 +62,7 @@ function createRuntimeContext(cmd, opts, globalOpts) {
62
62
  let _clientModule = null;
63
63
  async function getClient() {
64
64
  if (!_clientModule) {
65
- _clientModule = await import("./client-T4VODLA6.js");
65
+ _clientModule = await import("./client-O56G2SNJ.js");
66
66
  }
67
67
  return _clientModule;
68
68
  }
@@ -105,7 +105,7 @@ function createRuntimeContext(cmd, opts, globalOpts) {
105
105
  return client.queryReportData(projectId, reportId, qp, eventModel, options, ctx.host());
106
106
  },
107
107
  async token() {
108
- const { getToken } = await import("./auth-BQC5DBE7.js");
108
+ const { getToken } = await import("./auth-ECD46NBA.js");
109
109
  return getToken(ctx.host());
110
110
  },
111
111
  host() {
@@ -206,41 +206,41 @@ function extractGlobalOptions(program2) {
206
206
  var require2 = createRequire(import.meta.url);
207
207
  var { version } = require2("../package.json");
208
208
  var program = new CommanderCommand();
209
- program.name("ae-cli").version(version).description("CLI tool for ThinkingEngine (TE) analytics platform").option("--host <url>", "Override active TE host URL (e.g., https://ta.thinkingdata.cn)").option("--mcp-url <url>", "Override MCP server URL (e.g., http://localhost/mcp/http/example)").option("--format <format>", "Output format: json | table", "json").option("--jq <expr>", "jq filter expression").option("--dry-run", "Show request details without executing", false).option("--yes", "Skip confirmation for write operations", false);
209
+ program.name("ae-cli").version(version).description("CLI tool for ThinkingAI (AE) analytics platform").option("--host <url>", "Override active AE host URL (e.g., https://ta.thinkingdata.cn)").option("--mcp-url <url>", "Override MCP server URL (e.g., http://localhost/mcp/http/example)").option("--format <format>", "Output format: json | table", "json").option("--jq <expr>", "jq filter expression").option("--dry-run", "Show request details without executing", false).option("--yes", "Skip confirmation for write operations", false);
210
210
  async function loadCommands() {
211
211
  const commands = [];
212
212
  try {
213
- const teAnalysis = await import("./te-analysis-CHFTDN55.js");
213
+ const teAnalysis = await import("./te-analysis-UGKESPBE.js");
214
214
  commands.push(...teAnalysis.default);
215
215
  } catch {
216
216
  }
217
217
  try {
218
- const teAudience = await import("./te-audience-M6LQY6M7.js");
218
+ const teAudience = await import("./te-audience-THZNVHYB.js");
219
219
  commands.push(...teAudience.default);
220
220
  } catch {
221
221
  }
222
222
  try {
223
- const teMeta = await import("./te-meta-FMM7KCVI.js");
223
+ const teMeta = await import("./te-meta-MGO5BCMG.js");
224
224
  commands.push(...teMeta.default);
225
225
  } catch {
226
226
  }
227
227
  try {
228
- const teCommon = await import("./te-common-BLQ7DVGC.js");
228
+ const teCommon = await import("./te-common-QZOUME3S.js");
229
229
  commands.push(...teCommon.default);
230
230
  } catch {
231
231
  }
232
232
  try {
233
- const engage = await import("./te-engage-DXE4R5EW.js");
233
+ const engage = await import("./te-engage-RYGEQTYK.js");
234
234
  commands.push(...engage.default);
235
235
  } catch {
236
236
  }
237
237
  try {
238
- const community = await import("./community-FVDAWGS4.js");
238
+ const community = await import("./te-community-AZVW3NFX.js");
239
239
  commands.push(...community.default);
240
240
  } catch {
241
241
  }
242
242
  try {
243
- const dataops = await import("./te-dataops-V4OTKY35.js");
243
+ const dataops = await import("./te-dataops-OE5PX2K6.js");
244
244
  commands.push(...dataops.default);
245
245
  } catch {
246
246
  }
@@ -248,21 +248,21 @@ async function loadCommands() {
248
248
  }
249
249
  async function registerAuthCommands() {
250
250
  try {
251
- const { registerAuth } = await import("./auth-DXKYLMO7.js");
251
+ const { registerAuth } = await import("./auth-2UTBG5U3.js");
252
252
  registerAuth(program);
253
253
  } catch {
254
254
  }
255
255
  }
256
256
  async function registerConfigCommands() {
257
257
  try {
258
- const { registerConfig } = await import("./config-V7AXKDMB.js");
258
+ const { registerConfig } = await import("./config-BU5FHGGE.js");
259
259
  registerConfig(program);
260
260
  } catch {
261
261
  }
262
262
  }
263
263
  async function registerApiCommand() {
264
264
  try {
265
- const { registerApi } = await import("./raw-G3GKHAPZ.js");
265
+ const { registerApi } = await import("./raw-A3VN2B6I.js");
266
266
  registerApi(program);
267
267
  } catch {
268
268
  }
@@ -5,13 +5,13 @@ import {
5
5
  import {
6
6
  httpGet,
7
7
  httpPost
8
- } from "./chunk-ZYXIGPG7.js";
8
+ } from "./chunk-LAAS6ITR.js";
9
9
  import {
10
10
  resolveHost
11
- } from "./chunk-3CDLNXTD.js";
11
+ } from "./chunk-4KQ7H7DY.js";
12
12
  import {
13
13
  safeJsonParse
14
- } from "./chunk-EBFUVWIZ.js";
14
+ } from "./chunk-MR57UIKC.js";
15
15
 
16
16
  // src/api/raw.ts
17
17
  function registerApi(program) {
@@ -21,7 +21,7 @@ function registerApi(program) {
21
21
  const format = globalOpts.format || "json";
22
22
  const jq = globalOpts.jq;
23
23
  if (!host) {
24
- printError("config", "No TE host configured.", "Run: ae-cli config set-host");
24
+ printError("config", "No AE host configured.", "Run: ae-cli config set-host");
25
25
  process.exit(1);
26
26
  }
27
27
  try {