@eaera-com/cms-sdk 0.1.92 → 0.1.93
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/dist/chunks/chats-F9H8sza4.js +109 -0
- package/dist/chunks/client-B7fm_H2u.js +184 -0
- package/dist/chunks/connection-DGlB8IZD.js +108 -0
- package/dist/chunks/qwenpaw.constant-BwpRhdCV.js +24 -0
- package/dist/common/constants/index.d.ts +1 -0
- package/dist/common/constants/index.d.ts.map +1 -1
- package/dist/common/constants/qwenpaw.constant.d.ts +46 -0
- package/dist/common/constants/qwenpaw.constant.d.ts.map +1 -0
- package/dist/composables/useQwenpawChat.d.ts +240 -0
- package/dist/composables/useQwenpawChat.d.ts.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +390 -4
- package/dist/nuxt.d.ts.map +1 -1
- package/dist/nuxt.js +10 -1
- package/dist/server/ai/qwenpaw/chat/stop.post.js +25 -0
- package/dist/server/ai/qwenpaw/chat.post.js +61 -0
- package/dist/server/ai/qwenpaw/chats-id.delete.js +18 -0
- package/dist/server/ai/qwenpaw/chats.get.js +33 -0
- package/dist/server/ai/qwenpaw/history.get.js +16 -0
- package/dist/server/ai/qwenpaw/session.get.js +14 -0
- package/dist/server/ai/qwenpaw/session.post.js +31 -0
- package/dist/server/ai/qwenpaw/upload.post.js +40 -0
- package/dist/services/qwenpaw/chats.d.ts +25 -0
- package/dist/services/qwenpaw/chats.d.ts.map +1 -0
- package/dist/services/qwenpaw/client.d.ts +42 -0
- package/dist/services/qwenpaw/client.d.ts.map +1 -0
- package/dist/services/qwenpaw/qwenpaw.type.d.ts +236 -0
- package/dist/services/qwenpaw/qwenpaw.type.d.ts.map +1 -0
- package/dist/services/qwenpaw/stream.d.ts +16 -0
- package/dist/services/qwenpaw/stream.d.ts.map +1 -0
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/qwenpawChat.d.ts +219 -0
- package/dist/stores/qwenpawChat.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { $fetch } from 'ofetch';
|
|
1
|
+
import { $fetch, ofetch } from 'ofetch';
|
|
2
2
|
import { H as HTTP_DEFAULTS, a as HTTP_RETRY_STATUS_CODES, b as HTTP_HEADER, R as RESPONSE_CASING_VALUE } from './chunks/http.constant-BzH5tJTG.js';
|
|
3
3
|
export { S as SERIALIZATION_FORMAT } from './chunks/http.constant-BzH5tJTG.js';
|
|
4
4
|
import { A as AUTH_PROXY_PATH, a as AUTH_ENDPOINT } from './chunks/auth.constant-CnGo0q42.js';
|
|
5
5
|
import { A as AUTHZ_PROXY_PATH, a as AUTHZ_ENDPOINT } from './chunks/authz.constant-BqX8Nzw6.js';
|
|
6
6
|
import { C as COOKIE_SAME_SITE, a as COOKIE_DEFAULTS, T as TOKEN_STORAGE_KEY, P as PERSIST_KEY, S as STORE_PERSIST_KEY } from './chunks/storage.constant-CVWam5ls.js';
|
|
7
7
|
export { b as PERSIST_ALLOWED_KEYS, c as PERSIST_MAX_BYTES, d as PERSIST_PREFIX, e as STORAGE_NAME } from './chunks/storage.constant-CVWam5ls.js';
|
|
8
|
-
import { ref, shallowRef, watch, computed } from 'vue';
|
|
8
|
+
import { ref, shallowRef, watch, computed, toRaw } from 'vue';
|
|
9
9
|
import { W as WS_RECONNECT_INITIAL_MS, a as WS_RECONNECT_MAX_MS, b as WS_CONNECTION_STATE, c as WS_PING_INTERVAL_MS, d as WS_MESSAGE_TYPE, e as WS_CLOSE_CODE, f as WS_MAX_RECONNECT_ATTEMPTS, g as WS_AUTH_TIMEOUT_MS, h as WS_RECONNECT_JITTER_MS, i as WS_PING_WATCHDOG_CHECK_MS, j as WS_MAX_SUBSCRIPTIONS, k as WS_PING_WATCHDOG_FACTOR } from './chunks/mt5Retcode-DK9C-4Dv.js';
|
|
10
10
|
export { M as MT5_RETCODE, l as WS_ACTION_ACCEPTED_ERROR_CODE, m as WS_ACTION_ERROR_CODE, n as WS_ACTION_RESULT_ERROR_CODE, o as WS_ACTION_RESULT_TTL_MS, p as WS_AUTH_ERROR_CODE, q as WS_CLOSE_REASON, r as WS_MT5_EVENT_TYPE, s as WS_TOPIC, t as WS_TOPIC_NAMESPACE, u as accountTopic, v as adminTopic, w as mt5Topic, x as streamTopic, y as symbolTopic, z as userTopic, A as viewMt5Retcode } from './chunks/mt5Retcode-DK9C-4Dv.js';
|
|
11
|
-
import { defineStore } from 'pinia';
|
|
11
|
+
import { defineStore, storeToRefs } from 'pinia';
|
|
12
|
+
export { Q as QwenpawConfigError, a as QwenpawUpstreamError, b as buildConsoleChatBody, p as postConsoleChatError } from './chunks/client-B7fm_H2u.js';
|
|
13
|
+
export { d as deleteQwenpawChat, e as extractChatModel, f as fetchChatHistory, g as getQwenpawChatMessages, l as listQwenpawChats, a as listQwenpawGroups, m as messagesToTurns } from './chunks/chats-F9H8sza4.js';
|
|
12
14
|
export { categoryLabel, computeSpread, formatPrice } from './common/helpers/format.js';
|
|
13
15
|
|
|
14
16
|
const MT5_SERVER_NAME = "EAERA MT5 - Live";
|
|
@@ -8977,6 +8979,350 @@ const useWsStore = defineStore(
|
|
|
8977
8979
|
}
|
|
8978
8980
|
);
|
|
8979
8981
|
|
|
8982
|
+
const createQwenpawParseState = () => ({
|
|
8983
|
+
reasoningMsgIds: /* @__PURE__ */ new Set()
|
|
8984
|
+
});
|
|
8985
|
+
const parseQwenpawDataLine = (line) => {
|
|
8986
|
+
if (!line.startsWith("data:")) return null;
|
|
8987
|
+
const payload = line.slice(5).trim();
|
|
8988
|
+
if (!payload || payload === "[DONE]") return null;
|
|
8989
|
+
try {
|
|
8990
|
+
const parsed = JSON.parse(payload);
|
|
8991
|
+
if (parsed && typeof parsed === "object") return parsed;
|
|
8992
|
+
return null;
|
|
8993
|
+
} catch {
|
|
8994
|
+
return null;
|
|
8995
|
+
}
|
|
8996
|
+
};
|
|
8997
|
+
const extractEventText = (event) => {
|
|
8998
|
+
const parts = event.output ?? [];
|
|
8999
|
+
const texts = [];
|
|
9000
|
+
for (const item of parts) {
|
|
9001
|
+
if (item?.type === "reasoning") continue;
|
|
9002
|
+
for (const part of item?.content ?? []) {
|
|
9003
|
+
if (part?.type === "text" && typeof part.text === "string") texts.push(part.text);
|
|
9004
|
+
}
|
|
9005
|
+
}
|
|
9006
|
+
return texts.join("");
|
|
9007
|
+
};
|
|
9008
|
+
const extractEventError = (event) => {
|
|
9009
|
+
const err = event.error;
|
|
9010
|
+
if (typeof err === "string" && err) return err;
|
|
9011
|
+
if (err && typeof err === "object" && typeof err.message === "string") return err.message;
|
|
9012
|
+
return "";
|
|
9013
|
+
};
|
|
9014
|
+
const toStreamChunk = (event, textMode, state) => {
|
|
9015
|
+
const failure = extractEventError(event);
|
|
9016
|
+
if (event.status === "failed" || failure) {
|
|
9017
|
+
throw new Error(failure || "The agent run failed.");
|
|
9018
|
+
}
|
|
9019
|
+
if (event.type === "reasoning") {
|
|
9020
|
+
if (event.id) state.reasoningMsgIds.add(event.id);
|
|
9021
|
+
return null;
|
|
9022
|
+
}
|
|
9023
|
+
if (event.type === "text" && typeof event.text === "string") {
|
|
9024
|
+
if (!event.text) return null;
|
|
9025
|
+
if (event.msg_id && state.reasoningMsgIds.has(event.msg_id)) return null;
|
|
9026
|
+
const action = event.delta === true ? "append" : event.delta === false ? "replace" : textMode;
|
|
9027
|
+
return { action, text: event.text, done: false };
|
|
9028
|
+
}
|
|
9029
|
+
if (event.object === "response" && event.status === "completed") {
|
|
9030
|
+
return { action: "replace", text: extractEventText(event), done: true };
|
|
9031
|
+
}
|
|
9032
|
+
if (event.output) {
|
|
9033
|
+
const text = extractEventText(event);
|
|
9034
|
+
if (text) return { action: "replace", text, done: false };
|
|
9035
|
+
}
|
|
9036
|
+
return null;
|
|
9037
|
+
};
|
|
9038
|
+
const iterateQwenpawEvents = async (body, onChunk, textMode = "replace", onRawEvent) => {
|
|
9039
|
+
const reader = body.getReader();
|
|
9040
|
+
const decoder = new TextDecoder();
|
|
9041
|
+
const state = createQwenpawParseState();
|
|
9042
|
+
let buffer = "";
|
|
9043
|
+
let first = true;
|
|
9044
|
+
const handleLine = (line) => {
|
|
9045
|
+
const event = parseQwenpawDataLine(line);
|
|
9046
|
+
if (!event) return;
|
|
9047
|
+
if (first && onRawEvent) {
|
|
9048
|
+
first = false;
|
|
9049
|
+
onRawEvent(line);
|
|
9050
|
+
}
|
|
9051
|
+
const chunk = toStreamChunk(event, textMode, state);
|
|
9052
|
+
if (chunk) onChunk(chunk);
|
|
9053
|
+
};
|
|
9054
|
+
for (; ; ) {
|
|
9055
|
+
const { done, value } = await reader.read();
|
|
9056
|
+
if (done) break;
|
|
9057
|
+
buffer += decoder.decode(value, { stream: true });
|
|
9058
|
+
let newlineIndex = buffer.indexOf("\n");
|
|
9059
|
+
while (newlineIndex !== -1) {
|
|
9060
|
+
const line = buffer.slice(0, newlineIndex).replace(/\r$/, "");
|
|
9061
|
+
buffer = buffer.slice(newlineIndex + 1);
|
|
9062
|
+
handleLine(line);
|
|
9063
|
+
newlineIndex = buffer.indexOf("\n");
|
|
9064
|
+
}
|
|
9065
|
+
}
|
|
9066
|
+
if (buffer.length) handleLine(buffer.replace(/\r$/, ""));
|
|
9067
|
+
};
|
|
9068
|
+
|
|
9069
|
+
const API_BASE = "/api/cms/ai/qwenpaw";
|
|
9070
|
+
const newSessionId = () => `c-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
9071
|
+
const newTurnId = () => `t-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
9072
|
+
const useQwenpawChatStore = defineStore("qwenpawChat", () => {
|
|
9073
|
+
const chats = ref([]);
|
|
9074
|
+
const groups = ref([]);
|
|
9075
|
+
const agentId = ref("");
|
|
9076
|
+
const model = ref("");
|
|
9077
|
+
const isLoadingChats = ref(false);
|
|
9078
|
+
const activeSession = ref("");
|
|
9079
|
+
const activeChatId = ref("");
|
|
9080
|
+
const activeChatName = ref("");
|
|
9081
|
+
const turns = ref([]);
|
|
9082
|
+
const status = ref("idle");
|
|
9083
|
+
const errorMessage = ref("");
|
|
9084
|
+
const connectState = ref("connecting");
|
|
9085
|
+
const isStreaming = computed(() => status.value === "streaming");
|
|
9086
|
+
let abortController = null;
|
|
9087
|
+
const probeConnection = async () => await ofetch(`${API_BASE}/session`);
|
|
9088
|
+
const connect = async () => {
|
|
9089
|
+
connectState.value = "connecting";
|
|
9090
|
+
try {
|
|
9091
|
+
const result = await ofetch(`${API_BASE}/session`, { method: "POST" });
|
|
9092
|
+
connectState.value = "connected";
|
|
9093
|
+
return result;
|
|
9094
|
+
} catch (error) {
|
|
9095
|
+
connectState.value = aiConnectStateFromError(error);
|
|
9096
|
+
throw error;
|
|
9097
|
+
}
|
|
9098
|
+
};
|
|
9099
|
+
const ensureConnection = async () => {
|
|
9100
|
+
try {
|
|
9101
|
+
const statusResult = await probeConnection();
|
|
9102
|
+
if (statusResult.configured) {
|
|
9103
|
+
connectState.value = "connected";
|
|
9104
|
+
return true;
|
|
9105
|
+
}
|
|
9106
|
+
} catch (error) {
|
|
9107
|
+
console.error("[qwenpaw-chat] status check failed", error);
|
|
9108
|
+
}
|
|
9109
|
+
try {
|
|
9110
|
+
await connect();
|
|
9111
|
+
return true;
|
|
9112
|
+
} catch (error) {
|
|
9113
|
+
console.error("[qwenpaw-chat] connect failed", error);
|
|
9114
|
+
return false;
|
|
9115
|
+
}
|
|
9116
|
+
};
|
|
9117
|
+
const aiConnectStateFromError = (error) => {
|
|
9118
|
+
const status2 = error?.status ?? error?.statusCode ?? 0;
|
|
9119
|
+
if (status2 === 401) return "error";
|
|
9120
|
+
const code = error?.data?.code;
|
|
9121
|
+
return code === "AI_AGENT_NOT_ASSIGNED" ? "no-agent" : "not-configured";
|
|
9122
|
+
};
|
|
9123
|
+
const loadChats = async () => {
|
|
9124
|
+
isLoadingChats.value = true;
|
|
9125
|
+
try {
|
|
9126
|
+
const res = await withFreshSession(
|
|
9127
|
+
() => ofetch(
|
|
9128
|
+
`${API_BASE}/chats`
|
|
9129
|
+
)
|
|
9130
|
+
);
|
|
9131
|
+
chats.value = res.chats;
|
|
9132
|
+
groups.value = res.groups ?? [];
|
|
9133
|
+
if (res.agentId) agentId.value = res.agentId;
|
|
9134
|
+
} catch (error) {
|
|
9135
|
+
console.error("[qwenpaw-chat] list failed", error);
|
|
9136
|
+
} finally {
|
|
9137
|
+
isLoadingChats.value = false;
|
|
9138
|
+
}
|
|
9139
|
+
};
|
|
9140
|
+
const openChat = async (chat) => {
|
|
9141
|
+
if (isStreaming.value) stop();
|
|
9142
|
+
activeSession.value = chat.sessionId;
|
|
9143
|
+
activeChatId.value = chat.id;
|
|
9144
|
+
activeChatName.value = chat.name;
|
|
9145
|
+
turns.value = [];
|
|
9146
|
+
errorMessage.value = "";
|
|
9147
|
+
try {
|
|
9148
|
+
const res = await withFreshSession(
|
|
9149
|
+
() => ofetch(`${API_BASE}/history`, {
|
|
9150
|
+
query: { chatId: chat.id }
|
|
9151
|
+
})
|
|
9152
|
+
);
|
|
9153
|
+
if (activeSession.value === chat.sessionId) {
|
|
9154
|
+
turns.value = res.turns;
|
|
9155
|
+
model.value = res.model ?? "";
|
|
9156
|
+
}
|
|
9157
|
+
} catch (error) {
|
|
9158
|
+
console.error("[qwenpaw-chat] history failed", error);
|
|
9159
|
+
}
|
|
9160
|
+
};
|
|
9161
|
+
const newChat = () => {
|
|
9162
|
+
if (isStreaming.value) stop();
|
|
9163
|
+
activeSession.value = newSessionId();
|
|
9164
|
+
activeChatId.value = "";
|
|
9165
|
+
activeChatName.value = "";
|
|
9166
|
+
turns.value = [];
|
|
9167
|
+
errorMessage.value = "";
|
|
9168
|
+
status.value = "idle";
|
|
9169
|
+
};
|
|
9170
|
+
const stop = () => {
|
|
9171
|
+
const sessionId = activeSession.value;
|
|
9172
|
+
abortController?.abort();
|
|
9173
|
+
abortController = null;
|
|
9174
|
+
const last = turns.value.at(-1);
|
|
9175
|
+
if (last?.role === "assistant") {
|
|
9176
|
+
last.streaming = false;
|
|
9177
|
+
last.error = last.error ?? "Cancelled.";
|
|
9178
|
+
}
|
|
9179
|
+
status.value = "error";
|
|
9180
|
+
if (sessionId) {
|
|
9181
|
+
void ofetch(`${API_BASE}/chat/stop`, {
|
|
9182
|
+
method: "POST",
|
|
9183
|
+
body: { sessionId }
|
|
9184
|
+
}).catch((error) => {
|
|
9185
|
+
console.error("[qwenpaw-chat] stop failed", error);
|
|
9186
|
+
});
|
|
9187
|
+
}
|
|
9188
|
+
};
|
|
9189
|
+
const uploadFile = async (file) => {
|
|
9190
|
+
const form = new FormData();
|
|
9191
|
+
form.append("file", file);
|
|
9192
|
+
const res = await ofetch(
|
|
9193
|
+
`${API_BASE}/upload`,
|
|
9194
|
+
{
|
|
9195
|
+
method: "POST",
|
|
9196
|
+
body: form
|
|
9197
|
+
}
|
|
9198
|
+
);
|
|
9199
|
+
return { url: res.url, name: res.fileName || file.name, size: res.size || file.size };
|
|
9200
|
+
};
|
|
9201
|
+
const withFreshSession = async (action) => {
|
|
9202
|
+
try {
|
|
9203
|
+
return await action();
|
|
9204
|
+
} catch (error) {
|
|
9205
|
+
const status2 = error?.status ?? error?.statusCode ?? 0;
|
|
9206
|
+
if (status2 !== 401 && status2 !== 423) throw error;
|
|
9207
|
+
await connect();
|
|
9208
|
+
return await action();
|
|
9209
|
+
}
|
|
9210
|
+
};
|
|
9211
|
+
const send = async (text, files = []) => {
|
|
9212
|
+
const content = text.trim();
|
|
9213
|
+
if (!content && !files.length || isStreaming.value) return;
|
|
9214
|
+
if (!activeSession.value) activeSession.value = newSessionId();
|
|
9215
|
+
errorMessage.value = "";
|
|
9216
|
+
const displayFiles = files.map((file) => ({ name: file.name, size: file.size }));
|
|
9217
|
+
turns.value.push({
|
|
9218
|
+
id: newTurnId(),
|
|
9219
|
+
role: "user",
|
|
9220
|
+
text: content,
|
|
9221
|
+
...displayFiles.length ? { files: displayFiles } : {},
|
|
9222
|
+
ts: Date.now()
|
|
9223
|
+
});
|
|
9224
|
+
turns.value.push({ id: newTurnId(), role: "assistant", text: "", streaming: true });
|
|
9225
|
+
const assistantTurn = turns.value.at(-1);
|
|
9226
|
+
if (!assistantTurn) return;
|
|
9227
|
+
status.value = "streaming";
|
|
9228
|
+
abortController = new AbortController();
|
|
9229
|
+
const applyChunk = (chunk) => {
|
|
9230
|
+
if (chunk.text) {
|
|
9231
|
+
assistantTurn.text = chunk.action === "append" ? assistantTurn.text + chunk.text : chunk.text;
|
|
9232
|
+
}
|
|
9233
|
+
};
|
|
9234
|
+
try {
|
|
9235
|
+
const refs = [];
|
|
9236
|
+
for (const file of files) {
|
|
9237
|
+
refs.push(await uploadFile(file));
|
|
9238
|
+
}
|
|
9239
|
+
const signal = abortController.signal;
|
|
9240
|
+
const response = await withFreshSession(async () => {
|
|
9241
|
+
const res = await fetch(`${API_BASE}/chat`, {
|
|
9242
|
+
method: "POST",
|
|
9243
|
+
headers: { "content-type": "application/json" },
|
|
9244
|
+
body: JSON.stringify({
|
|
9245
|
+
...content ? { text: content } : {},
|
|
9246
|
+
...refs.length ? { files: refs } : {},
|
|
9247
|
+
sessionId: activeSession.value
|
|
9248
|
+
}),
|
|
9249
|
+
signal
|
|
9250
|
+
});
|
|
9251
|
+
if (res.status === 401 || res.status === 423) {
|
|
9252
|
+
throw Object.assign(new Error("AI session expired."), { status: res.status });
|
|
9253
|
+
}
|
|
9254
|
+
return res;
|
|
9255
|
+
});
|
|
9256
|
+
if (!response.ok || !response.body) {
|
|
9257
|
+
let message = "Chat request failed.";
|
|
9258
|
+
try {
|
|
9259
|
+
const payload = await response.json();
|
|
9260
|
+
message = payload.message || payload.statusMessage || message;
|
|
9261
|
+
} catch {
|
|
9262
|
+
}
|
|
9263
|
+
throw new Error(message);
|
|
9264
|
+
}
|
|
9265
|
+
await iterateQwenpawEvents(response.body, applyChunk);
|
|
9266
|
+
assistantTurn.streaming = false;
|
|
9267
|
+
status.value = "idle";
|
|
9268
|
+
void loadChats();
|
|
9269
|
+
} catch (error) {
|
|
9270
|
+
assistantTurn.streaming = false;
|
|
9271
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
9272
|
+
status.value = "idle";
|
|
9273
|
+
} else {
|
|
9274
|
+
if (!assistantTurn.text) {
|
|
9275
|
+
turns.value = turns.value.filter((turn) => turn.id !== assistantTurn.id);
|
|
9276
|
+
}
|
|
9277
|
+
errorMessage.value = error instanceof Error ? error.message : "Chat request failed.";
|
|
9278
|
+
status.value = "error";
|
|
9279
|
+
}
|
|
9280
|
+
} finally {
|
|
9281
|
+
abortController = null;
|
|
9282
|
+
}
|
|
9283
|
+
};
|
|
9284
|
+
const resendLast = () => {
|
|
9285
|
+
if (isStreaming.value) return;
|
|
9286
|
+
const lastUser = [...turns.value].reverse().find((turn) => turn.role === "user");
|
|
9287
|
+
if (lastUser) void send(lastUser.text);
|
|
9288
|
+
};
|
|
9289
|
+
const clearError = () => {
|
|
9290
|
+
errorMessage.value = "";
|
|
9291
|
+
};
|
|
9292
|
+
const deleteChat = async (chatId) => {
|
|
9293
|
+
await ofetch(`${API_BASE}/chats/${encodeURIComponent(chatId)}`, { method: "DELETE" });
|
|
9294
|
+
chats.value = chats.value.filter((item) => item.id !== chatId);
|
|
9295
|
+
if (activeChatId.value === chatId) newChat();
|
|
9296
|
+
};
|
|
9297
|
+
return {
|
|
9298
|
+
chats,
|
|
9299
|
+
groups,
|
|
9300
|
+
agentId,
|
|
9301
|
+
model,
|
|
9302
|
+
isLoadingChats,
|
|
9303
|
+
activeSession,
|
|
9304
|
+
activeChatId,
|
|
9305
|
+
activeChatName,
|
|
9306
|
+
turns,
|
|
9307
|
+
status,
|
|
9308
|
+
isStreaming,
|
|
9309
|
+
errorMessage,
|
|
9310
|
+
connectState,
|
|
9311
|
+
probeConnection,
|
|
9312
|
+
connect,
|
|
9313
|
+
ensureConnection,
|
|
9314
|
+
aiConnectStateFromError,
|
|
9315
|
+
loadChats,
|
|
9316
|
+
openChat,
|
|
9317
|
+
newChat,
|
|
9318
|
+
send,
|
|
9319
|
+
stop,
|
|
9320
|
+
resendLast,
|
|
9321
|
+
clearError,
|
|
9322
|
+
deleteChat
|
|
9323
|
+
};
|
|
9324
|
+
});
|
|
9325
|
+
|
|
8980
9326
|
function createPersistPlugin(options) {
|
|
8981
9327
|
const { storage, httpEndpoint, ssr = false, debounceMs = 150 } = options;
|
|
8982
9328
|
return (ctx) => {
|
|
@@ -9084,6 +9430,46 @@ function clearCbsStateKey() {
|
|
|
9084
9430
|
if (typeof localStorage !== "undefined") localStorage.removeItem(CBS_STATE_KEY_STORAGE);
|
|
9085
9431
|
}
|
|
9086
9432
|
|
|
9433
|
+
const useQwenpawChat = () => {
|
|
9434
|
+
const store = useQwenpawChatStore();
|
|
9435
|
+
const refs = storeToRefs(store);
|
|
9436
|
+
return {
|
|
9437
|
+
get chats() {
|
|
9438
|
+
return refs.chats.value;
|
|
9439
|
+
},
|
|
9440
|
+
get turns() {
|
|
9441
|
+
return refs.turns.value;
|
|
9442
|
+
},
|
|
9443
|
+
get isLoadingChats() {
|
|
9444
|
+
return refs.isLoadingChats.value;
|
|
9445
|
+
},
|
|
9446
|
+
get isStreaming() {
|
|
9447
|
+
return refs.isStreaming.value;
|
|
9448
|
+
},
|
|
9449
|
+
get errorMessage() {
|
|
9450
|
+
return refs.errorMessage.value;
|
|
9451
|
+
},
|
|
9452
|
+
get connectState() {
|
|
9453
|
+
return refs.connectState.value;
|
|
9454
|
+
},
|
|
9455
|
+
status: () => store.probeConnection(),
|
|
9456
|
+
ensureConnection: () => store.ensureConnection(),
|
|
9457
|
+
connect: async () => {
|
|
9458
|
+
await store.connect();
|
|
9459
|
+
},
|
|
9460
|
+
loadChats: () => store.loadChats(),
|
|
9461
|
+
openChat: (chat) => store.openChat(chat),
|
|
9462
|
+
newChat: () => store.newChat(),
|
|
9463
|
+
send: (text, files = []) => store.send(text, files),
|
|
9464
|
+
stop: () => store.stop(),
|
|
9465
|
+
deleteChat: (chatId) => store.deleteChat(chatId)
|
|
9466
|
+
};
|
|
9467
|
+
};
|
|
9468
|
+
const useQwenpawChatStoreRaw = () => {
|
|
9469
|
+
const store = useQwenpawChatStore();
|
|
9470
|
+
return toRaw(store);
|
|
9471
|
+
};
|
|
9472
|
+
|
|
9087
9473
|
const formatValue = (value) => {
|
|
9088
9474
|
const s = typeof value === "number" ? String(value) : value;
|
|
9089
9475
|
return /\s/.test(s) ? `"${s}"` : s;
|
|
@@ -9106,4 +9492,4 @@ const buildFilter = (conditions) => {
|
|
|
9106
9492
|
return conditions.map((c) => `${c.field}:${c.op}:${formatScalarOrList(c)}`).join(" AND ");
|
|
9107
9493
|
};
|
|
9108
9494
|
|
|
9109
|
-
export { ACTION_KIND, ACTION_KINDS, ACTION_RESULT_FIELDS, AUTHZ_ENDPOINT, AUTHZ_PROXY_PATH, AUTH_ENDPOINT, BARS_DEFAULTS, BARS_ENDPOINT, CBS_STATE_KEY_STORAGE, CHART_INTERVAL, CONDITION_FIELDS, CONDITION_OPERATORS, CONDITION_OPERATOR_LABELS, CONDITION_OPERATOR_SYMBOL_TO_WORD, CONDITION_OPERATOR_VALUE_KINDS, CONDITION_TYPE, CONTENT_DEFAULTS, CONTENT_ENDPOINT, CONTENT_FILTER_OPERATOR, CONTENT_FILTER_SCALAR_OPERATOR, CONTENT_TYPE, CONTENT_TYPES_DEFAULTS, CONTENT_TYPES_ENDPOINT, CONTENT_TYPE_CATEGORY, CONTENT_TYPE_NAMES, COOKIE_SAME_SITE, CRON_PRESETS, CmsError, DEFAULT_CRON_SCHEDULE, DEFAULT_EVENT_CONTENT_TYPE, DEFAULT_LLM_QUERY_TOOLS, EVENT_PAYLOAD_FIELDS, EVENT_TYPE, EVENT_TYPE_OPTIONS, EXECUTIONS_DEFAULTS, EXECUTIONS_ENDPOINT, EXECUTION_STATUS, EXECUTION_STATUSES, EXECUTION_TRANSITION, EXECUTION_TYPE, GOV_ACTION_BY_CT, GOV_ACTION_NAME, GOV_CONTENT_TYPE, GOV_CONTENT_TYPE_NAMES, GOV_COST_GROUP, GOV_DEFAULTS, GOV_ENDPOINT, GOV_USAGE_WINDOW, HISTORY_DEAL_ENTRY, HISTORY_DEFAULTS, HISTORY_ENDPOINT, HISTORY_ORDER_STATUS, HISTORY_SORT_BY, HISTORY_SORT_DIRECTION, HISTORY_TAB, HTTP_DEFAULTS, HTTP_HEADER, HTTP_RETRY_STATUS_CODES, KALSHI_CHART_INTERVAL, KALSHI_ENDPOINT, KALSHI_FUTURE_STATUS, KALSHI_LAST_TICKS_DEFAULTS, KALSHI_LIFECYCLE_STATUS, KALSHI_SERVER_STATUS, KALSHI_SETTLEMENT_RESULT, KALSHI_SYMBOL_TICKS_DEFAULTS, KALSHI_TRENDING_DEFAULTS, LEVERAGE_OPTIONS, LLM_ENDPOINT, LLM_EVAL_BOUNDS, LLM_PROVIDER_TYPE, LLM_QUERY_TOOL, LLM_QUERY_TOOL_OPTIONS, MONITORED_GROUPS_TYPE, MT5_ACCOUNT_STATUS, MT5_ACTION_NAME, MT5_ALL_ACTIONS, MT5_CHART_BAR_SOURCE, MT5_COMMISSION_MODE, MT5_COMMISSION_VOLUME_TYPE, MT5_DEAL_ENTRY, MT5_EXECUTION_MODE, MT5_FINANCIAL_ACTIONS, MT5_INTERVAL, MT5_LOCAL_ACTIONS, MT5_MARKET_STATUS, MT5_OPERATIONAL_ACTIONS, MT5_ORDER_DURATION, MT5_ORDER_KIND, MT5_ORDER_STATE, MT5_ORDER_STATE_NAME, MT5_ORDER_TYPE, MT5_POSITION_TYPE, MT5_SERVER_NAME, MT5_SERVER_STATE, MT5_SYNC_PHASE, MT5_TRADE_MODE, MT5_TRADE_SIDE, MT5_TRADING_ACTIONS, MT5_VIEWER_ACTIONS, NOTIFICATIONS_ENDPOINT, NOTIFICATION_FALLBACK_POLICY, NOTIFICATION_TEMPLATE_STATE, PACKS_AUDIT_ENDPOINT, PACKS_ENDPOINT, PEOPLE_ACTION_BY_CT, PEOPLE_ACTION_NAME, PEOPLE_CONTENT_TYPE, PEOPLE_CONTENT_TYPE_NAMES, PEOPLE_COPILOT_ENDPOINT, PEOPLE_DEFAULTS, PEOPLE_ENDPOINT, PEOPLE_FORK_ACTION, PEOPLE_MIGRATE_ACTION, PEOPLE_PACK_ID, PEOPLE_SUBJECT_KIND, PEOPLE_SYSTEM_ONLY_ACTIONS, PEOPLE_TARGET_TYPE, PERSIST_KEY, PUBLIC_MARKETS_TYPE, REPORT_TEMPLATES_ENDPOINT, RULES_DEFAULTS, RULES_ENDPOINT, SETTINGS_ENDPOINT, SILENT_LOGIN_MESSAGE, SORT_DIRECTION, STORE_PERSIST_KEY, SUM_WITHIN_DAYS, TOKEN_STORAGE_KEY, TRIGGER_MODE, TRIGGER_TYPE, TokenManager, WS_AUTH_TIMEOUT_MS, WS_CLOSE_CODE, WS_CONNECTION_STATE, WS_EVENT_NAME, WS_MAX_SUBSCRIPTIONS, WS_MESSAGE_TYPE, WS_PING_INTERVAL_MS, WS_RECONNECT_INITIAL_MS, WS_RECONNECT_JITTER_MS, WS_RECONNECT_MAX_MS, actionDefByActionName, actionDefByKind, actionsFromExecution, actionsToExecutionParams, buildCronTrigger, buildEventTrigger, buildFilter, buildSignalTrigger, clearCbsStateKey, coerceEventType, cookieStorage, createApi, createAuthService, createAuthzService, createBarsService, createCmsSDK, createContentService, createContentTypesService, createEaeraWebSocket, createExecutionsService, createGovService, createHistoryService, createKalshiService, createLlmService, createNotificationsService, createPeopleHistoryService, createPeopleService, createPersistPlugin, createSettingsService, eventPayloadFieldsFor, isKnownEventType, isSystemOnlyAction, llmEvalOf, localStorageAdapter, memoryStorage, normalizeChartInterval, normalizeConditionOperator, parseActionResponse, promptNameOf, queryToolsOf, readCbsStateKey, resolveStorage, resultOutputOf, scheduleOf, serializeAction, serializeActionParams, signalNameOf, triggerModeOf, useAuthStore, useAuthzStore, useBarsStore, useContentStore, useExecutionsStore, useGovStore, useHistoryStore, useKalshiStore, useLlmProvidersStore, useLlmStore, usePeopleStore, useRulesStore, useSettingsStore, useWsStore };
|
|
9495
|
+
export { ACTION_KIND, ACTION_KINDS, ACTION_RESULT_FIELDS, AUTHZ_ENDPOINT, AUTHZ_PROXY_PATH, AUTH_ENDPOINT, BARS_DEFAULTS, BARS_ENDPOINT, CBS_STATE_KEY_STORAGE, CHART_INTERVAL, CONDITION_FIELDS, CONDITION_OPERATORS, CONDITION_OPERATOR_LABELS, CONDITION_OPERATOR_SYMBOL_TO_WORD, CONDITION_OPERATOR_VALUE_KINDS, CONDITION_TYPE, CONTENT_DEFAULTS, CONTENT_ENDPOINT, CONTENT_FILTER_OPERATOR, CONTENT_FILTER_SCALAR_OPERATOR, CONTENT_TYPE, CONTENT_TYPES_DEFAULTS, CONTENT_TYPES_ENDPOINT, CONTENT_TYPE_CATEGORY, CONTENT_TYPE_NAMES, COOKIE_SAME_SITE, CRON_PRESETS, CmsError, DEFAULT_CRON_SCHEDULE, DEFAULT_EVENT_CONTENT_TYPE, DEFAULT_LLM_QUERY_TOOLS, EVENT_PAYLOAD_FIELDS, EVENT_TYPE, EVENT_TYPE_OPTIONS, EXECUTIONS_DEFAULTS, EXECUTIONS_ENDPOINT, EXECUTION_STATUS, EXECUTION_STATUSES, EXECUTION_TRANSITION, EXECUTION_TYPE, GOV_ACTION_BY_CT, GOV_ACTION_NAME, GOV_CONTENT_TYPE, GOV_CONTENT_TYPE_NAMES, GOV_COST_GROUP, GOV_DEFAULTS, GOV_ENDPOINT, GOV_USAGE_WINDOW, HISTORY_DEAL_ENTRY, HISTORY_DEFAULTS, HISTORY_ENDPOINT, HISTORY_ORDER_STATUS, HISTORY_SORT_BY, HISTORY_SORT_DIRECTION, HISTORY_TAB, HTTP_DEFAULTS, HTTP_HEADER, HTTP_RETRY_STATUS_CODES, KALSHI_CHART_INTERVAL, KALSHI_ENDPOINT, KALSHI_FUTURE_STATUS, KALSHI_LAST_TICKS_DEFAULTS, KALSHI_LIFECYCLE_STATUS, KALSHI_SERVER_STATUS, KALSHI_SETTLEMENT_RESULT, KALSHI_SYMBOL_TICKS_DEFAULTS, KALSHI_TRENDING_DEFAULTS, LEVERAGE_OPTIONS, LLM_ENDPOINT, LLM_EVAL_BOUNDS, LLM_PROVIDER_TYPE, LLM_QUERY_TOOL, LLM_QUERY_TOOL_OPTIONS, MONITORED_GROUPS_TYPE, MT5_ACCOUNT_STATUS, MT5_ACTION_NAME, MT5_ALL_ACTIONS, MT5_CHART_BAR_SOURCE, MT5_COMMISSION_MODE, MT5_COMMISSION_VOLUME_TYPE, MT5_DEAL_ENTRY, MT5_EXECUTION_MODE, MT5_FINANCIAL_ACTIONS, MT5_INTERVAL, MT5_LOCAL_ACTIONS, MT5_MARKET_STATUS, MT5_OPERATIONAL_ACTIONS, MT5_ORDER_DURATION, MT5_ORDER_KIND, MT5_ORDER_STATE, MT5_ORDER_STATE_NAME, MT5_ORDER_TYPE, MT5_POSITION_TYPE, MT5_SERVER_NAME, MT5_SERVER_STATE, MT5_SYNC_PHASE, MT5_TRADE_MODE, MT5_TRADE_SIDE, MT5_TRADING_ACTIONS, MT5_VIEWER_ACTIONS, NOTIFICATIONS_ENDPOINT, NOTIFICATION_FALLBACK_POLICY, NOTIFICATION_TEMPLATE_STATE, PACKS_AUDIT_ENDPOINT, PACKS_ENDPOINT, PEOPLE_ACTION_BY_CT, PEOPLE_ACTION_NAME, PEOPLE_CONTENT_TYPE, PEOPLE_CONTENT_TYPE_NAMES, PEOPLE_COPILOT_ENDPOINT, PEOPLE_DEFAULTS, PEOPLE_ENDPOINT, PEOPLE_FORK_ACTION, PEOPLE_MIGRATE_ACTION, PEOPLE_PACK_ID, PEOPLE_SUBJECT_KIND, PEOPLE_SYSTEM_ONLY_ACTIONS, PEOPLE_TARGET_TYPE, PERSIST_KEY, PUBLIC_MARKETS_TYPE, REPORT_TEMPLATES_ENDPOINT, RULES_DEFAULTS, RULES_ENDPOINT, SETTINGS_ENDPOINT, SILENT_LOGIN_MESSAGE, SORT_DIRECTION, STORE_PERSIST_KEY, SUM_WITHIN_DAYS, TOKEN_STORAGE_KEY, TRIGGER_MODE, TRIGGER_TYPE, TokenManager, WS_AUTH_TIMEOUT_MS, WS_CLOSE_CODE, WS_CONNECTION_STATE, WS_EVENT_NAME, WS_MAX_SUBSCRIPTIONS, WS_MESSAGE_TYPE, WS_PING_INTERVAL_MS, WS_RECONNECT_INITIAL_MS, WS_RECONNECT_JITTER_MS, WS_RECONNECT_MAX_MS, actionDefByActionName, actionDefByKind, actionsFromExecution, actionsToExecutionParams, buildCronTrigger, buildEventTrigger, buildFilter, buildSignalTrigger, clearCbsStateKey, coerceEventType, cookieStorage, createApi, createAuthService, createAuthzService, createBarsService, createCmsSDK, createContentService, createContentTypesService, createEaeraWebSocket, createExecutionsService, createGovService, createHistoryService, createKalshiService, createLlmService, createNotificationsService, createPeopleHistoryService, createPeopleService, createPersistPlugin, createQwenpawParseState, createSettingsService, eventPayloadFieldsFor, extractEventError, extractEventText, isKnownEventType, isSystemOnlyAction, iterateQwenpawEvents, llmEvalOf, localStorageAdapter, memoryStorage, normalizeChartInterval, normalizeConditionOperator, parseActionResponse, parseQwenpawDataLine, promptNameOf, queryToolsOf, readCbsStateKey, resolveStorage, resultOutputOf, scheduleOf, serializeAction, serializeActionParams, signalNameOf, toStreamChunk, triggerModeOf, useAuthStore, useAuthzStore, useBarsStore, useContentStore, useExecutionsStore, useGovStore, useHistoryStore, useKalshiStore, useLlmProvidersStore, useLlmStore, usePeopleStore, useQwenpawChat, useQwenpawChatStore, useQwenpawChatStoreRaw, useRulesStore, useSettingsStore, useWsStore };
|
package/dist/nuxt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../src/nuxt.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kFAAkF;IAClF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../src/nuxt.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kFAAkF;IAClF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA6BD;;;;;;;;;;;;;GAaG;;AACH,wBAoCG"}
|
package/dist/nuxt.js
CHANGED
|
@@ -16,7 +16,15 @@ const SERVER_HANDLERS = [
|
|
|
16
16
|
["/api/cms/idp-link-callback", "server/auth/idp-link-callback.get.js"],
|
|
17
17
|
["/api/cms/idp-me", "server/auth/idp-me.get.js"],
|
|
18
18
|
["/api/cms/portal-access", "server/authz/portal-access.get.js"],
|
|
19
|
-
["/api/cms-sdk/persist", "server/persist.post.js"]
|
|
19
|
+
["/api/cms-sdk/persist", "server/persist.post.js"],
|
|
20
|
+
["/api/cms/ai/qwenpaw/session", "server/ai/qwenpaw/session.get.js"],
|
|
21
|
+
["/api/cms/ai/qwenpaw/session", "server/ai/qwenpaw/session.post.js"],
|
|
22
|
+
["/api/cms/ai/qwenpaw/chats", "server/ai/qwenpaw/chats.get.js"],
|
|
23
|
+
["/api/cms/ai/qwenpaw/chats/:chatId", "server/ai/qwenpaw/chats-id.delete.js"],
|
|
24
|
+
["/api/cms/ai/qwenpaw/history", "server/ai/qwenpaw/history.get.js"],
|
|
25
|
+
["/api/cms/ai/qwenpaw/chat", "server/ai/qwenpaw/chat.post.js"],
|
|
26
|
+
["/api/cms/ai/qwenpaw/chat/stop", "server/ai/qwenpaw/chat/stop.post.js"],
|
|
27
|
+
["/api/cms/ai/qwenpaw/upload", "server/ai/qwenpaw/upload.post.js"]
|
|
20
28
|
];
|
|
21
29
|
const nuxt = defineNuxtModule({
|
|
22
30
|
meta: {
|
|
@@ -40,6 +48,7 @@ const nuxt = defineNuxtModule({
|
|
|
40
48
|
for (const [route, file] of SERVER_HANDLERS) {
|
|
41
49
|
addServerHandler({ route, handler: resolve(file) });
|
|
42
50
|
}
|
|
51
|
+
nuxt.options.runtimeConfig.qwenpaw ??= { baseUrl: "", agentId: "" };
|
|
43
52
|
addPlugin({ src: resolve("runtime/plugin.js") });
|
|
44
53
|
if (options.mock) {
|
|
45
54
|
logger.warn("cms-sdk: mock mode is ON — domain services return fake data.");
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineEventHandler, readBody, createError } from 'h3';
|
|
2
|
+
import { c as qwenpawStop, p as postConsoleChatError } from '../../../../chunks/client-B7fm_H2u.js';
|
|
3
|
+
import { c as QWENPAW_MAX_SESSION_ID_LENGTH } from '../../../../chunks/qwenpaw.constant-BwpRhdCV.js';
|
|
4
|
+
import { r as requireCmsSession, a as resolveQwenpawConnection, b as resolveQwenpawServerConfig } from '../../../../chunks/connection-DGlB8IZD.js';
|
|
5
|
+
|
|
6
|
+
const stop_post = defineEventHandler(async (event) => {
|
|
7
|
+
requireCmsSession(event);
|
|
8
|
+
const body = await readBody(event);
|
|
9
|
+
const sessionId = (body?.sessionId ?? "").trim();
|
|
10
|
+
if (!sessionId || sessionId.length > QWENPAW_MAX_SESSION_ID_LENGTH) {
|
|
11
|
+
throw createError({ statusCode: 400, message: "Conversation session is required." });
|
|
12
|
+
}
|
|
13
|
+
const connection = resolveQwenpawConnection(event);
|
|
14
|
+
try {
|
|
15
|
+
return await qwenpawStop({
|
|
16
|
+
config: resolveQwenpawServerConfig(event),
|
|
17
|
+
target: { baseUrl: connection.baseUrl, agentId: connection.agentId },
|
|
18
|
+
sessionId
|
|
19
|
+
});
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw postConsoleChatError(error);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export { stop_post as default };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import { defineEventHandler, readBody, createError, setResponseStatus, setResponseHeader, sendStream } from 'h3';
|
|
3
|
+
import { q as qwenpawChat, p as postConsoleChatError } from '../../../chunks/client-B7fm_H2u.js';
|
|
4
|
+
import { Q as QWENPAW_MAX_MESSAGE_LENGTH, a as QWENPAW_MAX_FILES, b as QWENPAW_MAX_FILE_NAME_LENGTH, c as QWENPAW_MAX_SESSION_ID_LENGTH } from '../../../chunks/qwenpaw.constant-BwpRhdCV.js';
|
|
5
|
+
import { r as requireCmsSession, a as resolveQwenpawConnection, b as resolveQwenpawServerConfig } from '../../../chunks/connection-DGlB8IZD.js';
|
|
6
|
+
|
|
7
|
+
const chat_post = defineEventHandler(async (event) => {
|
|
8
|
+
requireCmsSession(event);
|
|
9
|
+
const body = await readBody(event);
|
|
10
|
+
const text = (body?.text ?? "").trim();
|
|
11
|
+
if (text.length > QWENPAW_MAX_MESSAGE_LENGTH) {
|
|
12
|
+
throw createError({ statusCode: 413, message: "Message too long." });
|
|
13
|
+
}
|
|
14
|
+
const rawFiles = Array.isArray(body?.files) ? body.files.slice(0, QWENPAW_MAX_FILES) : [];
|
|
15
|
+
const files = rawFiles.map((file) => {
|
|
16
|
+
const url = (file?.url ?? "").trim();
|
|
17
|
+
const name = (file?.name ?? "").trim().slice(0, QWENPAW_MAX_FILE_NAME_LENGTH) || "attachment";
|
|
18
|
+
if (!url.startsWith("/") || url.length > 500 || url.includes("..")) {
|
|
19
|
+
throw createError({ statusCode: 400, message: "Invalid attachment reference." });
|
|
20
|
+
}
|
|
21
|
+
return { url, name, ...typeof file?.size === "number" ? { size: file.size } : {} };
|
|
22
|
+
});
|
|
23
|
+
if (!text && !files.length) {
|
|
24
|
+
throw createError({ statusCode: 400, message: "Message is required." });
|
|
25
|
+
}
|
|
26
|
+
const sessionId = (body?.sessionId ?? "").trim();
|
|
27
|
+
if (!sessionId || sessionId.length > QWENPAW_MAX_SESSION_ID_LENGTH) {
|
|
28
|
+
throw createError({ statusCode: 400, message: "Conversation session is required." });
|
|
29
|
+
}
|
|
30
|
+
const connection = resolveQwenpawConnection(event);
|
|
31
|
+
const upstreamAbort = new AbortController();
|
|
32
|
+
event.node.req.once("close", () => upstreamAbort.abort());
|
|
33
|
+
let upstream;
|
|
34
|
+
try {
|
|
35
|
+
upstream = await qwenpawChat({
|
|
36
|
+
config: resolveQwenpawServerConfig(event),
|
|
37
|
+
target: {
|
|
38
|
+
baseUrl: connection.baseUrl,
|
|
39
|
+
agentId: connection.agentId,
|
|
40
|
+
sessionId,
|
|
41
|
+
userId: "cms-sdk"
|
|
42
|
+
},
|
|
43
|
+
text,
|
|
44
|
+
files,
|
|
45
|
+
signal: upstreamAbort.signal
|
|
46
|
+
});
|
|
47
|
+
} catch (error) {
|
|
48
|
+
throw postConsoleChatError(error);
|
|
49
|
+
}
|
|
50
|
+
setResponseStatus(event, upstream.status);
|
|
51
|
+
setResponseHeader(event, "content-type", "text/event-stream");
|
|
52
|
+
setResponseHeader(event, "cache-control", "no-cache");
|
|
53
|
+
setResponseHeader(event, "connection", "keep-alive");
|
|
54
|
+
setResponseHeader(event, "x-accel-buffering", "no");
|
|
55
|
+
return sendStream(
|
|
56
|
+
event,
|
|
57
|
+
Readable.fromWeb(upstream.body)
|
|
58
|
+
);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export { chat_post as default };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineEventHandler, getRouterParam, createError } from 'h3';
|
|
2
|
+
import { d as deleteQwenpawChat } from '../../../chunks/chats-F9H8sza4.js';
|
|
3
|
+
import { r as requireCmsSession, a as resolveQwenpawConnection } from '../../../chunks/connection-DGlB8IZD.js';
|
|
4
|
+
|
|
5
|
+
const chatsId_delete = defineEventHandler(async (event) => {
|
|
6
|
+
requireCmsSession(event);
|
|
7
|
+
const chatId = getRouterParam(event, "chatId") ?? "";
|
|
8
|
+
if (!chatId) {
|
|
9
|
+
throw createError({ statusCode: 400, message: "Missing chat id." });
|
|
10
|
+
}
|
|
11
|
+
const ok = await deleteQwenpawChat(resolveQwenpawConnection(event), chatId);
|
|
12
|
+
if (!ok) {
|
|
13
|
+
throw createError({ statusCode: 502, message: "Delete failed." });
|
|
14
|
+
}
|
|
15
|
+
return { deleted: true };
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export { chatsId_delete as default };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { defineEventHandler } from 'h3';
|
|
2
|
+
import { l as listQwenpawChats, a as listQwenpawGroups } from '../../../chunks/chats-F9H8sza4.js';
|
|
3
|
+
import { r as requireCmsSession, a as resolveQwenpawConnection, b as resolveQwenpawServerConfig } from '../../../chunks/connection-DGlB8IZD.js';
|
|
4
|
+
|
|
5
|
+
const chats_get = defineEventHandler(async (event) => {
|
|
6
|
+
requireCmsSession(event);
|
|
7
|
+
const connection = resolveQwenpawConnection(event);
|
|
8
|
+
const [chats, groups] = await Promise.all([
|
|
9
|
+
listQwenpawChats(connection),
|
|
10
|
+
listQwenpawGroups(connection)
|
|
11
|
+
]);
|
|
12
|
+
const normalized = chats.sort((a, b) => (b.updated_at ?? "").localeCompare(a.updated_at ?? "")).map((chat) => ({
|
|
13
|
+
id: chat.id,
|
|
14
|
+
name: chat.name || "Conversation",
|
|
15
|
+
sessionId: chat.session_id,
|
|
16
|
+
updatedAt: chat.updated_at,
|
|
17
|
+
status: chat.status,
|
|
18
|
+
...chat.group_id ? { groupId: chat.group_id } : {}
|
|
19
|
+
}));
|
|
20
|
+
const normalizedGroups = groups.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map((group) => ({
|
|
21
|
+
id: group.id,
|
|
22
|
+
name: group.name,
|
|
23
|
+
order: group.order ?? 0,
|
|
24
|
+
kind: group.kind
|
|
25
|
+
}));
|
|
26
|
+
return {
|
|
27
|
+
chats: normalized,
|
|
28
|
+
groups: normalizedGroups,
|
|
29
|
+
agentId: resolveQwenpawServerConfig(event).agentId
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export { chats_get as default };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineEventHandler, getQuery, createError } from 'h3';
|
|
2
|
+
import { f as fetchChatHistory } from '../../../chunks/chats-F9H8sza4.js';
|
|
3
|
+
import { r as requireCmsSession, a as resolveQwenpawConnection } from '../../../chunks/connection-DGlB8IZD.js';
|
|
4
|
+
|
|
5
|
+
const history_get = defineEventHandler(async (event) => {
|
|
6
|
+
requireCmsSession(event);
|
|
7
|
+
const query = getQuery(event);
|
|
8
|
+
const chatId = typeof query.chatId === "string" ? query.chatId.trim() : "";
|
|
9
|
+
if (!chatId) {
|
|
10
|
+
throw createError({ statusCode: 400, message: "Missing chat id." });
|
|
11
|
+
}
|
|
12
|
+
const connection = resolveQwenpawConnection(event);
|
|
13
|
+
return await fetchChatHistory(connection, chatId);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export { history_get as default };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineEventHandler } from 'h3';
|
|
2
|
+
import { r as requireCmsSession, a as resolveQwenpawConnection, h as hasQwenpawConnection } from '../../../chunks/connection-DGlB8IZD.js';
|
|
3
|
+
|
|
4
|
+
const session_get = defineEventHandler((event) => {
|
|
5
|
+
requireCmsSession(event);
|
|
6
|
+
const resolved = resolveQwenpawConnection(event);
|
|
7
|
+
return {
|
|
8
|
+
configured: hasQwenpawConnection(event),
|
|
9
|
+
baseUrl: resolved.baseUrl,
|
|
10
|
+
agentId: resolved.agentId
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export { session_get as default };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { defineEventHandler, createError } from 'h3';
|
|
2
|
+
import { r as requireCmsSession, e as exchangeQwenpawSession, Q as QwenpawExchangeError } from '../../../chunks/connection-DGlB8IZD.js';
|
|
3
|
+
|
|
4
|
+
const exchangeErrorStatus = (error) => {
|
|
5
|
+
if (error.code === "AI_NOT_AUTHENTICATED") return 401;
|
|
6
|
+
if (error.configurationError) return 403;
|
|
7
|
+
if (error.code === "AI_SESSION_EXCHANGE_FAILED") return 423;
|
|
8
|
+
return 502;
|
|
9
|
+
};
|
|
10
|
+
const handleExchangeError = (error) => {
|
|
11
|
+
if (error instanceof QwenpawExchangeError) {
|
|
12
|
+
throw createError({
|
|
13
|
+
statusCode: exchangeErrorStatus(error),
|
|
14
|
+
message: error.message,
|
|
15
|
+
data: { code: error.code }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
console.error("qwenpaw-session", error);
|
|
19
|
+
throw createError({ statusCode: 502, message: "The AI agent is unreachable." });
|
|
20
|
+
};
|
|
21
|
+
const session_post = defineEventHandler(async (event) => {
|
|
22
|
+
requireCmsSession(event);
|
|
23
|
+
try {
|
|
24
|
+
const connection = await exchangeQwenpawSession(event);
|
|
25
|
+
return { ok: true, baseUrl: connection.baseUrl, agentId: connection.agentId };
|
|
26
|
+
} catch (error) {
|
|
27
|
+
handleExchangeError(error);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export { session_post as default, exchangeErrorStatus, handleExchangeError };
|