@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.
- package/README.md +42 -72
- package/README.zh.md +202 -0
- package/dist/auth-2UTBG5U3.js +144 -0
- package/dist/{auth-BQC5DBE7.js → auth-ECD46NBA.js} +6 -4
- package/dist/{chunk-3CDLNXTD.js → chunk-4KQ7H7DY.js} +15 -3
- package/dist/{chunk-53FNNCZW.js → chunk-7QBNU44L.js} +101 -3
- package/dist/{chunk-ZYXIGPG7.js → chunk-LAAS6ITR.js} +3 -3
- package/dist/{chunk-EBFUVWIZ.js → chunk-MR57UIKC.js} +42 -0
- package/dist/{client-5QSQBBDB.js → client-O56G2SNJ.js} +3 -3
- package/dist/{config-Q7J3Z7Z2.js → config-BU5FHGGE.js} +23 -8
- package/dist/index.js +15 -15
- package/dist/{raw-G3GKHAPZ.js → raw-A3VN2B6I.js} +4 -4
- package/dist/{te-analysis-CHFTDN55.js → te-analysis-UGKESPBE.js} +62 -24
- package/dist/{te-audience-M6LQY6M7.js → te-audience-THZNVHYB.js} +61 -21
- package/dist/{te-common-BLQ7DVGC.js → te-common-QZOUME3S.js} +6 -33
- package/dist/{community-FVDAWGS4.js → te-community-AZVW3NFX.js} +59 -59
- package/dist/{te-dataops-V4OTKY35.js → te-dataops-OE5PX2K6.js} +3 -28
- package/dist/{te-engage-DXE4R5EW.js → te-engage-RYGEQTYK.js} +4 -22
- package/dist/{te-meta-FMM7KCVI.js → te-meta-MGO5BCMG.js} +88 -18
- package/package.json +3 -3
- package/skills/ae-analysis/SKILL.md +287 -0
- package/skills/{te-meta/references/batch-create-metadata.md → ae-analysis/references/batch_create_metadata.md} +3 -3
- package/skills/{te-meta/references/batch-edit-metadata.md → ae-analysis/references/batch_edit_metadata.md} +2 -2
- package/skills/{te-analysis/references/build-entity-details-sql.md → ae-analysis/references/build_entity_details_sql.md} +9 -9
- package/skills/{te-analysis/references/build-event-details-sql.md → ae-analysis/references/build_event_details_sql.md} +9 -9
- package/skills/{te-analysis/references/create-alert.md → ae-analysis/references/create_alert.md} +4 -4
- package/skills/{te-audience/references/create-cluster.md → ae-analysis/references/create_cluster.md} +23 -19
- package/skills/{te-analysis/references/create-dashboard.md → ae-analysis/references/create_dashboard.md} +4 -4
- package/skills/{te-meta/references/create-metric.md → ae-analysis/references/create_metric.md} +10 -10
- package/skills/{te-analysis/references/create-or-update-dashboard-note.md → ae-analysis/references/create_or_update_dashboard_note.md} +3 -3
- package/skills/{te-meta/references/create-project-mark-time.md → ae-analysis/references/create_project_mark_time.md} +3 -3
- package/skills/{te-analysis/references/create-public-access-link.md → ae-analysis/references/create_public_access_link.md} +3 -3
- package/skills/{te-analysis/references/create-report.md → ae-analysis/references/create_report.md} +9 -9
- package/skills/{te-analysis/references/create-result-cluster.md → ae-analysis/references/create_result_cluster.md} +6 -6
- package/skills/{te-audience/references/create-tag.md → ae-analysis/references/create_tag.md} +16 -15
- package/skills/{te-meta/references/create-virtual-event.md → ae-analysis/references/create_virtual_event.md} +9 -9
- package/skills/{te-meta/references/create-virtual-property.md → ae-analysis/references/create_virtual_property.md} +7 -7
- package/skills/{te-meta/references/delete-project-mark-times.md → ae-analysis/references/delete_project_mark_times.md} +2 -2
- package/skills/{te-meta/references/delete-track-items.md → ae-analysis/references/delete_track_items.md} +2 -2
- package/skills/{te-analysis/references/drilldown-user-events.md → ae-analysis/references/drilldown_user_events.md} +8 -8
- package/skills/{te-analysis/references/drilldown-users.md → ae-analysis/references/drilldown_users.md} +10 -7
- package/skills/ae-analysis/references/generate_track_program.md +51 -0
- package/skills/ae-analysis/references/generate_track_sdk_sample.md +43 -0
- package/skills/{te-analysis/references/get-alert.md → ae-analysis/references/get_alert.md} +2 -2
- package/skills/{te-analysis/references/get-alert-definition-schema.md → ae-analysis/references/get_alert_definition_schema.md} +1 -1
- package/skills/ae-analysis/references/get_analysis_query_schema.md +61 -0
- package/skills/ae-analysis/references/get_cluster_definition_schema.md +53 -0
- package/skills/ae-analysis/references/get_clusters_by_name.md +69 -0
- package/skills/{te-analysis/references/get-filter-schema.md → ae-analysis/references/get_filter_schema.md} +1 -1
- package/skills/{te-analysis/references/get-groupby-schema.md → ae-analysis/references/get_groupby_schema.md} +1 -1
- package/skills/{te-meta/references/get-metric.md → ae-analysis/references/get_metric.md} +2 -2
- package/skills/{te-meta/references/get-project-config.md → ae-analysis/references/get_project_config.md} +2 -2
- package/skills/{te-analysis/references/get-report-definition.md → ae-analysis/references/get_report_definition.md} +2 -2
- package/skills/{te-common/references/get-resource-url.md → ae-analysis/references/get_resource_url.md} +4 -4
- package/skills/{te-analysis/references/get-table-columns.md → ae-analysis/references/get_table_columns.md} +2 -2
- package/skills/ae-analysis/references/get_tag_definition_schema.md +49 -0
- package/skills/ae-analysis/references/get_tags_by_name.md +69 -0
- package/skills/{te-meta/references/get-track-program.md → ae-analysis/references/get_track_program.md} +2 -2
- package/skills/{te-analysis/references/list-alerts.md → ae-analysis/references/list_alerts.md} +10 -3
- package/skills/{te-audience/references/list-cluster-members.md → ae-analysis/references/list_cluster_members.md} +11 -4
- package/skills/{te-audience/references/list-clusters.md → ae-analysis/references/list_clusters.md} +14 -4
- package/skills/{te-analysis/references/list-dashboards.md → ae-analysis/references/list_dashboards.md} +12 -4
- package/skills/{te-meta/references/list-entities.md → ae-analysis/references/list_entities.md} +10 -3
- package/skills/{te-meta/references/list-events.md → ae-analysis/references/list_events.md} +12 -5
- package/skills/ae-analysis/references/list_metrics.md +45 -0
- package/skills/ae-analysis/references/list_project_mark_times.md +42 -0
- package/skills/{te-meta/references/list-project-users.md → ae-analysis/references/list_project_users.md} +2 -2
- package/skills/{te-common/references/list-projects.md → ae-analysis/references/list_projects.md} +6 -4
- package/skills/{te-meta/references/list-properties.md → ae-analysis/references/list_properties.md} +9 -4
- package/skills/ae-analysis/references/list_public_access_links.md +41 -0
- package/skills/{te-analysis/references/list-reports.md → ae-analysis/references/list_reports.md} +12 -4
- package/skills/{te-audience/references/list-tag-members.md → ae-analysis/references/list_tag_members.md} +11 -4
- package/skills/{te-audience/references/list-tags.md → ae-analysis/references/list_tags.md} +14 -4
- package/skills/{te-analysis/references/load-filters.md → ae-analysis/references/load_filters.md} +3 -3
- package/skills/{te-analysis/references/query-adhoc.md → ae-analysis/references/query_adhoc.md} +24 -9
- package/skills/{te-analysis/references/query-dashboard-detail.md → ae-analysis/references/query_dashboard_detail.md} +2 -2
- package/skills/{te-analysis/references/query-dashboard-report-data.md → ae-analysis/references/query_dashboard_report_data.md} +9 -9
- package/skills/{te-analysis/references/query-entity-details.md → ae-analysis/references/query_entity_details.md} +10 -10
- package/skills/{te-analysis/references/query-event-details.md → ae-analysis/references/query_event_details.md} +12 -12
- package/skills/{te-analysis/references/query-report-data.md → ae-analysis/references/query_report_data.md} +11 -11
- package/skills/{te-audience/references/refresh-cluster.md → ae-analysis/references/refresh_cluster.md} +2 -2
- package/skills/{te-audience/references/refresh-tag.md → ae-analysis/references/refresh_tag.md} +2 -2
- package/skills/{te-meta/references/save-track-items.md → ae-analysis/references/save_track_items.md} +2 -2
- package/skills/{te-analysis/references/update-alert.md → ae-analysis/references/update_alert.md} +4 -4
- package/skills/{te-audience/references/update-cluster.md → ae-analysis/references/update_cluster.md} +15 -13
- package/skills/{te-analysis/references/update-dashboard.md → ae-analysis/references/update_dashboard.md} +3 -3
- package/skills/{te-meta/references/update-metric.md → ae-analysis/references/update_metric.md} +9 -9
- package/skills/{te-meta/references/update-project-mark-time.md → ae-analysis/references/update_project_mark_time.md} +3 -3
- package/skills/{te-analysis/references/update-public-access-link.md → ae-analysis/references/update_public_access_link.md} +3 -3
- package/skills/{te-audience/references/update-tag.md → ae-analysis/references/update_tag.md} +15 -14
- package/skills/ae-community/SKILL.md +305 -0
- package/skills/{te-community → ae-community}/references/community-activity-analysis.md +6 -7
- package/skills/{te-community → ae-community}/references/community-analyzing-official-content.md +3 -4
- package/skills/{te-community → ae-community}/references/community-analyzing-theme-comment.md +5 -6
- package/skills/{te-community → ae-community}/references/community-character-analysis.md +5 -6
- package/skills/{te-community → ae-community}/references/community-daily-report.md +7 -8
- package/skills/{te-community → ae-community}/references/community-hottopic-insight.md +4 -5
- package/skills/{te-community → ae-community}/references/community-weekly-report.md +7 -8
- package/skills/{te-community → ae-community}/references/get_channel_info.md +4 -5
- package/skills/{te-community → ae-community}/references/get_comment_tag_analysis.md +3 -4
- package/skills/{te-community → ae-community}/references/get_comments_summary.md +4 -5
- package/skills/{te-community → ae-community}/references/get_corpus_tags.md +3 -4
- package/skills/{te-community → ae-community}/references/get_daily_summary.md +3 -4
- package/skills/{te-community → ae-community}/references/get_hot_topics.md +3 -4
- package/skills/{te-community → ae-community}/references/get_livestream_analysis.md +3 -4
- package/skills/{te-community → ae-community}/references/get_livestream_detail.md +4 -5
- package/skills/{te-community → ae-community}/references/get_livestream_list.md +3 -4
- package/skills/{te-community → ae-community}/references/get_livestream_overview.md +3 -4
- package/skills/{te-community → ae-community}/references/get_livestream_room_metrics.md +3 -4
- package/skills/{te-community → ae-community}/references/get_livestream_rooms.md +3 -4
- package/skills/{te-community → ae-community}/references/get_overview_metrics.md +3 -4
- package/skills/{te-community → ae-community}/references/get_post_detail.md +4 -5
- package/skills/{te-community → ae-community}/references/get_risk_content.md +5 -6
- package/skills/{te-community → ae-community}/references/get_sentiment_overview.md +4 -5
- package/skills/{te-community → ae-community}/references/get_tag_trends.md +3 -4
- package/skills/{te-community → ae-community}/references/get_topic_detail.md +3 -4
- package/skills/{te-community → ae-community}/references/search_posts.md +5 -6
- package/skills/{te-dataops → ae-dataops}/SKILL.md +73 -10
- package/skills/{te-dataops → ae-dataops}/references/dataops-flow-create.md +1 -1
- package/skills/{te-dataops → ae-dataops}/references/dataops-flow-monitor.md +1 -1
- package/skills/{te-dataops → ae-dataops}/references/dataops-integration.md +1 -1
- package/skills/{te-dataops → ae-dataops}/references/dataops-query.md +1 -1
- package/skills/{te-dataops → ae-dataops}/references/dataops-table.md +1 -1
- package/skills/{te-engage → ae-engage}/SKILL.md +106 -6
- package/skills/{te-engage → ae-engage}/references/add-approver.md +2 -2
- package/skills/{te-engage → ae-engage}/references/add-channel.md +2 -2
- package/skills/{te-engage → ae-engage}/references/approver-list.md +2 -2
- package/skills/{te-engage → ae-engage}/references/cancel-query-by-request-id.md +2 -2
- package/skills/{te-engage → ae-engage}/references/channel-detail.md +2 -2
- package/skills/{te-engage → ae-engage}/references/channel-list.md +2 -2
- package/skills/{te-engage → ae-engage}/references/config-channel-detail.md +2 -2
- package/skills/{te-engage → ae-engage}/references/config-channel-list.md +2 -2
- package/skills/{te-engage → ae-engage}/references/config-item-analysis-report.md +2 -2
- package/skills/{te-engage → ae-engage}/references/config-item-detail.md +2 -2
- package/skills/{te-engage → ae-engage}/references/config-item-list.md +2 -2
- package/skills/{te-engage → ae-engage}/references/config-item-strategy-comparison.md +2 -2
- package/skills/{te-engage → ae-engage}/references/config-item-trigger-report.md +2 -2
- package/skills/{te-engage → ae-engage}/references/copy-config-template.md +2 -2
- package/skills/{te-engage → ae-engage}/references/delete-channel.md +2 -2
- package/skills/{te-engage → ae-engage}/references/delete-config-channel.md +2 -2
- package/skills/{te-engage → ae-engage}/references/delete-config-item.md +2 -2
- package/skills/{te-engage → ae-engage}/references/delete-flow.md +2 -2
- package/skills/{te-engage → ae-engage}/references/flow-ab-split-node-report.md +2 -2
- package/skills/{te-engage → ae-engage}/references/flow-detail.md +2 -2
- package/skills/{te-engage → ae-engage}/references/flow-list.md +2 -2
- package/skills/{te-engage → ae-engage}/references/flow-node-config-schema.md +2 -2
- package/skills/{te-engage → ae-engage}/references/flow-node-detail-report.md +2 -2
- package/skills/{te-engage → ae-engage}/references/flow-node-overview-report.md +2 -2
- package/skills/{te-engage → ae-engage}/references/flow-process-report.md +2 -2
- package/skills/{te-engage → ae-engage}/references/manage-flow.md +2 -2
- package/skills/{te-engage → ae-engage}/references/manage-strategy.md +2 -2
- package/skills/{te-engage → ae-engage}/references/manage-task.md +2 -2
- package/skills/{te-engage → ae-engage}/references/modify-flow-base-info.md +2 -2
- package/skills/{te-engage → ae-engage}/references/save-flow.md +3 -3
- package/skills/{te-engage → ae-engage}/references/strategy-detail.md +2 -2
- package/skills/{te-engage → ae-engage}/references/strategy-list.md +2 -2
- package/skills/{te-engage → ae-engage}/references/task-data-detail.md +3 -10
- package/skills/{te-engage → ae-engage}/references/task-data-overview.md +3 -9
- package/skills/{te-engage → ae-engage}/references/task-detail.md +2 -2
- package/skills/{te-engage → ae-engage}/references/task-experiment-report.md +3 -9
- package/skills/{te-engage → ae-engage}/references/task-list.md +2 -2
- package/skills/{te-engage → ae-engage}/references/task-metric-detail.md +3 -9
- package/skills/{te-engage → ae-engage}/references/task-stats.md +2 -2
- package/skills/{te-engage → ae-engage}/references/update-channel-status.md +2 -2
- package/skills/{te-engage → ae-engage}/references/update-config-channel-status.md +2 -2
- package/skills/{te-engage → ae-engage}/references/validate-flow-node-config.md +2 -2
- package/skills/{te-engage → ae-engage}/references/whitelist-list.md +2 -2
- package/dist/auth-DXKYLMO7.js +0 -81
- package/dist/auth-JXELJNDS.js +0 -19
- package/dist/auth-L3G3A74I.js +0 -67
- package/dist/chunk-3GM5LJZR.js +0 -145
- package/dist/chunk-JD5DXMKL.js +0 -172
- package/dist/chunk-OVQOK35G.js +0 -108
- package/dist/chunk-RJNLN3KQ.js +0 -217
- package/dist/client-T4VODLA6.js +0 -16
- package/dist/community-GMALVSRF.js +0 -684
- package/dist/config-V7AXKDMB.js +0 -242
- package/dist/raw-ZNVURYMR.js +0 -59
- package/dist/te-analysis-7NN3SY3I.js +0 -871
- package/dist/te-audience-P43BWMHM.js +0 -350
- package/dist/te-common-H3IPTI2I.js +0 -144
- package/dist/te-dataops-WCGDBJLF.js +0 -1853
- package/dist/te-engage-UTRVNTGU.js +0 -1470
- package/dist/te-meta-HGYNXVGF.js +0 -479
- package/skills/te-analysis/SKILL.md +0 -107
- package/skills/te-analysis/references/get-analysis-query-schema.md +0 -36
- package/skills/te-analysis/references/list-public-access-links.md +0 -31
- package/skills/te-audience/SKILL.md +0 -63
- package/skills/te-audience/references/get-cluster-definition-schema.md +0 -37
- package/skills/te-audience/references/get-clusters-by-name.md +0 -32
- package/skills/te-audience/references/get-tag-definition-schema.md +0 -32
- package/skills/te-audience/references/get-tags-by-name.md +0 -32
- package/skills/te-common/SKILL.md +0 -135
- package/skills/te-community/SKILL.md +0 -125
- package/skills/te-meta/SKILL.md +0 -71
- package/skills/te-meta/references/list-metrics.md +0 -33
- package/skills/te-meta/references/list-project-mark-times.md +0 -33
- package/skills/te-shared/SKILL.md +0 -115
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getToken
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4KQ7H7DY.js";
|
|
4
4
|
import {
|
|
5
5
|
getActiveHost,
|
|
6
6
|
getConfigDir,
|
|
7
7
|
safeJsonParse,
|
|
8
8
|
safeReadJsonFile
|
|
9
|
-
} from "./chunk-
|
|
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
|
|
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-
|
|
5
|
+
} from "./chunk-4KQ7H7DY.js";
|
|
6
6
|
import {
|
|
7
7
|
safeJsonParse
|
|
8
|
-
} from "./chunk-
|
|
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(`
|
|
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-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
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
|
-
|
|
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-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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("
|
|
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-
|
|
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("
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
8
|
+
} from "./chunk-LAAS6ITR.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveHost
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-4KQ7H7DY.js";
|
|
12
12
|
import {
|
|
13
13
|
safeJsonParse
|
|
14
|
-
} from "./chunk-
|
|
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
|
|
24
|
+
printError("config", "No AE host configured.", "Run: ae-cli config set-host");
|
|
25
25
|
process.exit(1);
|
|
26
26
|
}
|
|
27
27
|
try {
|