@visiblebase/client 0.1.0 → 0.1.2
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 +55 -11
- package/bin/admin/index.d.ts +19 -0
- package/bin/admin/index.d.ts.map +1 -0
- package/bin/admin/index.js +47 -0
- package/bin/admin/index.js.map +1 -0
- package/bin/admin/types.d.ts +14 -0
- package/bin/admin/types.d.ts.map +1 -0
- package/bin/admin/types.js +5 -0
- package/bin/admin/types.js.map +1 -0
- package/bin/http.d.ts +31 -35
- package/bin/http.d.ts.map +1 -1
- package/bin/http.js +33 -20
- package/bin/http.js.map +1 -1
- package/bin/index.d.ts +12 -5
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +12 -4
- package/bin/index.js.map +1 -1
- package/bin/invoker/ai/index.d.ts +139 -0
- package/bin/invoker/ai/index.d.ts.map +1 -0
- package/bin/invoker/ai/index.js +247 -0
- package/bin/invoker/ai/index.js.map +1 -0
- package/bin/invoker/ai/stream.d.ts +8 -0
- package/bin/invoker/ai/stream.d.ts.map +1 -0
- package/bin/invoker/ai/stream.js +17 -0
- package/bin/invoker/ai/stream.js.map +1 -0
- package/bin/invoker/ai/types.d.ts +25 -0
- package/bin/invoker/ai/types.d.ts.map +1 -0
- package/bin/invoker/ai/types.js +5 -0
- package/bin/invoker/ai/types.js.map +1 -0
- package/bin/invoker/env/index.d.ts +31 -0
- package/bin/invoker/env/index.d.ts.map +1 -0
- package/bin/invoker/env/index.js +48 -0
- package/bin/invoker/env/index.js.map +1 -0
- package/bin/invoker/env/types.d.ts +15 -0
- package/bin/invoker/env/types.d.ts.map +1 -0
- package/bin/invoker/env/types.js +5 -0
- package/bin/invoker/env/types.js.map +1 -0
- package/bin/invoker/invoker.d.ts +43 -0
- package/bin/invoker/invoker.d.ts.map +1 -0
- package/bin/invoker/invoker.js +67 -0
- package/bin/invoker/invoker.js.map +1 -0
- package/bin/invoker/products/index.d.ts +46 -0
- package/bin/invoker/products/index.d.ts.map +1 -0
- package/bin/invoker/products/index.js +73 -0
- package/bin/invoker/products/index.js.map +1 -0
- package/bin/invoker/products/types.d.ts +28 -0
- package/bin/invoker/products/types.d.ts.map +1 -0
- package/bin/invoker/products/types.js +5 -0
- package/bin/invoker/products/types.js.map +1 -0
- package/bin/user/index.d.ts +25 -0
- package/bin/user/index.d.ts.map +1 -0
- package/bin/user/index.js +93 -0
- package/bin/user/index.js.map +1 -0
- package/bin/user/types.d.ts +25 -0
- package/bin/user/types.d.ts.map +1 -0
- package/bin/user/types.js +5 -0
- package/bin/user/types.js.map +1 -0
- package/package.json +7 -3
- package/bin/AdminClient.d.ts +0 -53
- package/bin/AdminClient.d.ts.map +0 -1
- package/bin/AdminClient.js +0 -134
- package/bin/AdminClient.js.map +0 -1
- package/bin/UserClient.d.ts +0 -26
- package/bin/UserClient.d.ts.map +0 -1
- package/bin/UserClient.js +0 -75
- package/bin/UserClient.js.map +0 -1
- package/bin/types.d.ts +0 -208
- package/bin/types.d.ts.map +0 -1
- package/bin/types.js +0 -7
- package/bin/types.js.map +0 -1
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Service 调用器(对应 core service/ai/ai-service.ts AIService)。
|
|
3
|
+
*
|
|
4
|
+
* 路由:/v1/s/ai/{modality} 和 /v1/s/ai/models。
|
|
5
|
+
*/
|
|
6
|
+
import { parseAIStreamBody } from "./stream.js";
|
|
7
|
+
const PREFIX = "/v1/s/ai";
|
|
8
|
+
/**
|
|
9
|
+
* AI 服务调用器。
|
|
10
|
+
*
|
|
11
|
+
* 通过 UserClient.ai 访问:
|
|
12
|
+
* ```ts
|
|
13
|
+
* await client.ai.text({ prompt: "hello" });
|
|
14
|
+
* const catalog = await client.ai.listModels();
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export class AIInvoker {
|
|
18
|
+
req;
|
|
19
|
+
reqRaw;
|
|
20
|
+
input;
|
|
21
|
+
baseUrl;
|
|
22
|
+
token;
|
|
23
|
+
constructor(opts) {
|
|
24
|
+
this.baseUrl = opts.baseUrl;
|
|
25
|
+
this.token = opts.token;
|
|
26
|
+
this.req = opts.requestJSON;
|
|
27
|
+
this.reqRaw = opts.requestRaw;
|
|
28
|
+
this.input = opts.buildInput;
|
|
29
|
+
}
|
|
30
|
+
/** 文本生成。支持 tools 参数(ai-sdk tool 格式,自动序列化去掉 execute) */
|
|
31
|
+
text(input) {
|
|
32
|
+
return this.req(`${PREFIX}/text`, {
|
|
33
|
+
method: "POST",
|
|
34
|
+
body: JSON.stringify(this.input(this.serializeTools(input))),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** 流式生成。支持 tools 参数(ai-sdk tool 格式,自动序列化去掉 execute) */
|
|
38
|
+
async stream(input) {
|
|
39
|
+
const res = await this.reqRaw(`${PREFIX}/stream`, {
|
|
40
|
+
method: "POST",
|
|
41
|
+
body: JSON.stringify(this.input(this.serializeTools(input))),
|
|
42
|
+
});
|
|
43
|
+
return parseAIStreamBody(res.body);
|
|
44
|
+
}
|
|
45
|
+
/** 图片生成 */
|
|
46
|
+
image(input) {
|
|
47
|
+
return this.post("/image", input);
|
|
48
|
+
}
|
|
49
|
+
/** 视频生成 */
|
|
50
|
+
video(input) {
|
|
51
|
+
return this.post("/video", input);
|
|
52
|
+
}
|
|
53
|
+
/** 语音合成 */
|
|
54
|
+
tts(input) {
|
|
55
|
+
return this.post("/tts", input);
|
|
56
|
+
}
|
|
57
|
+
/** 语音识别 */
|
|
58
|
+
asr(input) {
|
|
59
|
+
return this.post("/asr", input);
|
|
60
|
+
}
|
|
61
|
+
/** 获取模型目录 */
|
|
62
|
+
async listModels() {
|
|
63
|
+
const body = await this.req(`${PREFIX}/models`, { method: "GET" });
|
|
64
|
+
return new ModelCatalog(body.items);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 获取指定模型的操作句柄。
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* const ref = catalog.get("kimi-k2.6");
|
|
71
|
+
* const m = client.ai.model(ref);
|
|
72
|
+
* // 便捷调用
|
|
73
|
+
* const msg = await m.text({ messages: [...] });
|
|
74
|
+
* // 或接入 ai-sdk
|
|
75
|
+
* const model = await m.create();
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
model(ref) {
|
|
79
|
+
if (typeof ref === "string") {
|
|
80
|
+
return new ModelHandle(this, ref, `${this.baseUrl}/v1/s/ai`, this.token);
|
|
81
|
+
}
|
|
82
|
+
return new ModelHandle(this, ref.id, ref.name, `${this.baseUrl}/v1/s/ai`, this.token, ref.meta);
|
|
83
|
+
}
|
|
84
|
+
post(path, input) {
|
|
85
|
+
return this.req(`${PREFIX}${path}`, {
|
|
86
|
+
method: "POST",
|
|
87
|
+
body: JSON.stringify(this.input(input)),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** 将 ai-sdk tool 格式序列化为 OpenAI function 格式(去掉 execute,只保留 schema) */
|
|
91
|
+
serializeTools(input) {
|
|
92
|
+
const { tools, ...rest } = input;
|
|
93
|
+
const body = { ...rest };
|
|
94
|
+
if (tools && typeof tools === "object") {
|
|
95
|
+
body.tools = Object.entries(tools).map(([name, def]) => ({
|
|
96
|
+
type: "function",
|
|
97
|
+
function: {
|
|
98
|
+
name,
|
|
99
|
+
description: def.description,
|
|
100
|
+
parameters: def.parameters,
|
|
101
|
+
},
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
return body;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ===================================================================
|
|
108
|
+
// ModelCatalog
|
|
109
|
+
// ===================================================================
|
|
110
|
+
/**
|
|
111
|
+
* 模型目录(AIInvoker.listModels() 返回值)。
|
|
112
|
+
*
|
|
113
|
+
* 计算规则:
|
|
114
|
+
* - 第一个模型 = 全局默认
|
|
115
|
+
* - 每个 modality 的第一个支持模型 = 该 modality 的默认
|
|
116
|
+
*/
|
|
117
|
+
export class ModelCatalog {
|
|
118
|
+
byId;
|
|
119
|
+
def;
|
|
120
|
+
constructor(items) {
|
|
121
|
+
if (!items?.length) {
|
|
122
|
+
this.byId = new Map();
|
|
123
|
+
this.def = undefined;
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const first = new Map();
|
|
127
|
+
for (const item of items) {
|
|
128
|
+
for (const m of item.modalities) {
|
|
129
|
+
if (!first.has(m))
|
|
130
|
+
first.set(m, item.id);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const enriched = items.map((item, i) => Object.freeze({
|
|
134
|
+
...item,
|
|
135
|
+
is_default: i === 0,
|
|
136
|
+
default_modalities: item.modalities.filter((m) => first.get(m) === item.id) || undefined,
|
|
137
|
+
}));
|
|
138
|
+
this.byId = new Map(enriched.map((item) => [item.id, item]));
|
|
139
|
+
this.def = enriched[0];
|
|
140
|
+
}
|
|
141
|
+
get(id) {
|
|
142
|
+
return this.byId.get(String(id ?? "").trim());
|
|
143
|
+
}
|
|
144
|
+
default() {
|
|
145
|
+
return this.def;
|
|
146
|
+
}
|
|
147
|
+
all() {
|
|
148
|
+
return [...this.byId.values()];
|
|
149
|
+
}
|
|
150
|
+
forModality(modality) {
|
|
151
|
+
const m = String(modality ?? "").trim();
|
|
152
|
+
return [...this.byId.values()].filter((item) => item.modalities.includes(m));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** 将 UserModelInput 转为字符串 */
|
|
156
|
+
export function serializeModel(model) {
|
|
157
|
+
if (!model)
|
|
158
|
+
return undefined;
|
|
159
|
+
return typeof model === "string" ? model : model.id;
|
|
160
|
+
}
|
|
161
|
+
// ===================================================================
|
|
162
|
+
// ModelHandle — 绑定模型 ID 的操作句柄
|
|
163
|
+
// ===================================================================
|
|
164
|
+
/**
|
|
165
|
+
* 模型操作句柄。
|
|
166
|
+
*
|
|
167
|
+
* 三种使用方式:
|
|
168
|
+
* 1. 便捷调用:m.text() / m.stream() — 走 server
|
|
169
|
+
* 2. 接入 ai-sdk:m.create() — 直接作为 LanguageModel
|
|
170
|
+
* 3. 接入其他 SDK:m.url() + m.modelName() + client.token — 自己拼
|
|
171
|
+
*
|
|
172
|
+
* 通过 `client.ai.model(ref)` 获取,ref 来自 `listModels()`。
|
|
173
|
+
*/
|
|
174
|
+
export class ModelHandle {
|
|
175
|
+
ai;
|
|
176
|
+
id;
|
|
177
|
+
name;
|
|
178
|
+
/** 模型元数据(来自 server 的 PublicModel.meta) */
|
|
179
|
+
meta;
|
|
180
|
+
/** Server AI 端点 */
|
|
181
|
+
endpoint;
|
|
182
|
+
/** User auth token */
|
|
183
|
+
token;
|
|
184
|
+
constructor(ai,
|
|
185
|
+
/** 模型 ID */
|
|
186
|
+
id,
|
|
187
|
+
/** 模型展示名称 */
|
|
188
|
+
name = id,
|
|
189
|
+
/** Server AI 端点 */
|
|
190
|
+
endpoint = "",
|
|
191
|
+
/** User auth token */
|
|
192
|
+
token, meta) {
|
|
193
|
+
this.ai = ai;
|
|
194
|
+
this.id = id;
|
|
195
|
+
this.name = name;
|
|
196
|
+
this.endpoint = endpoint;
|
|
197
|
+
this.token = token;
|
|
198
|
+
this.meta = meta ?? {};
|
|
199
|
+
}
|
|
200
|
+
// ======== 便捷调用(走 server) ========
|
|
201
|
+
/** 流式生成 */
|
|
202
|
+
stream(input) {
|
|
203
|
+
return this.ai.stream({ ...input, model: this.id });
|
|
204
|
+
}
|
|
205
|
+
/** 文本生成 */
|
|
206
|
+
text(input) {
|
|
207
|
+
return this.ai.text({ ...input, model: this.id });
|
|
208
|
+
}
|
|
209
|
+
/** 图片生成 */
|
|
210
|
+
image(input) {
|
|
211
|
+
return this.ai.image({ ...input, model: this.id });
|
|
212
|
+
}
|
|
213
|
+
/** 视频生成 */
|
|
214
|
+
video(input) {
|
|
215
|
+
return this.ai.video({ ...input, model: this.id });
|
|
216
|
+
}
|
|
217
|
+
// ======== 接入 AI SDK ========
|
|
218
|
+
/**
|
|
219
|
+
* 创建 ai-sdk 兼容的 LanguageModel。
|
|
220
|
+
*
|
|
221
|
+
* 直接传给 generateText / streamText:
|
|
222
|
+
* ```ts
|
|
223
|
+
* const result = await generateText({
|
|
224
|
+
* model: await handle.create(),
|
|
225
|
+
* messages: [...],
|
|
226
|
+
* tools: { ... },
|
|
227
|
+
* });
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
async create() {
|
|
231
|
+
const { createOpenAI } = await import("@ai-sdk/openai");
|
|
232
|
+
return createOpenAI({
|
|
233
|
+
apiKey: this.token ?? "",
|
|
234
|
+
baseURL: this.endpoint,
|
|
235
|
+
}).chat(this.id);
|
|
236
|
+
}
|
|
237
|
+
// ======== 接入其他 SDK 的零配件 ========
|
|
238
|
+
/** Server AI 端点 URL */
|
|
239
|
+
url() {
|
|
240
|
+
return this.endpoint;
|
|
241
|
+
}
|
|
242
|
+
/** 模型名称(API 调用时的 model 参数值) */
|
|
243
|
+
modelName() {
|
|
244
|
+
return this.id;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/invoker/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAWhD,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,OAAO,SAAS;IACH,GAAG,CAAyD;IAC5D,MAAM,CAAoG;IAC1G,KAAK,CAAuD;IAC5D,OAAO,CAAS;IAChB,KAAK,CAAqB;IAE3C,YAAY,IAMX;QACC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC,KAAuB;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAiB,GAAG,MAAM,OAAO,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,MAAM,CAAC,KAAuB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;SAC7D,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,WAAW;IACX,KAAK,CAAC,KAAuB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAkB,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,WAAW;IACX,KAAK,CAAC,KAAuB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAkB,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,WAAW;IACX,GAAG,CAAc,KAAuB;QACtC,OAAO,IAAI,CAAC,IAAI,CAAI,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,WAAW;IACX,GAAG,CAAc,KAAuB;QACtC,OAAO,IAAI,CAAC,IAAI,CAAI,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,aAAa;IACb,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAA4B,GAAG,MAAM,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9F,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,GAA0B;QAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAClG,CAAC;IAEO,IAAI,CAAI,IAAY,EAAE,KAAuB;QACnD,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IAC7D,cAAc,CAAC,KAAuB;QAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QACjC,MAAM,IAAI,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;QAClD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClF,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI;oBACJ,WAAW,EAAG,GAAgC,CAAC,WAAW;oBAC1D,UAAU,EAAG,GAAgC,CAAC,UAAU;iBACzD;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,sEAAsE;AACtE,eAAe;AACf,sEAAsE;AAEtE;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACN,IAAI,CAA4B;IAChC,GAAG,CAA2B;IAE/C,YAAY,KAAqB;QAC/B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACrC,MAAM,CAAC,MAAM,CAAC;YACZ,GAAG,IAAI;YACP,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,SAAS;SACzF,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;CACF;AAED,6BAA6B;AAC7B,MAAM,UAAU,cAAc,CAAC,KAAsD;IACnF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,sEAAsE;AACtE,8BAA8B;AAC9B,sEAAsE;AAEtE;;;;;;;;;GASG;AACH,MAAM,OAAO,WAAW;IASH;IAER;IAEA;IAZX,0CAA0C;IACjC,IAAI,CAA0B;IACvC,mBAAmB;IACV,QAAQ,CAAS;IAC1B,sBAAsB;IACb,KAAK,CAAqB;IAEnC,YACmB,EAAa;IAC9B,YAAY;IACH,EAAU;IACnB,aAAa;IACJ,OAAe,EAAE;IAC1B,mBAAmB;IACnB,WAAmB,EAAE;IACrB,sBAAsB;IACtB,KAAc,EACd,IAA8B;QATb,OAAE,GAAF,EAAE,CAAW;QAErB,OAAE,GAAF,EAAE,CAAQ;QAEV,SAAI,GAAJ,IAAI,CAAa;QAO1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,mCAAmC;IAEnC,WAAW;IACX,MAAM,CAAC,KAAsC;QAC3C,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,WAAW;IACX,IAAI,CAAC,KAAsC;QACzC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,WAAW;IACX,KAAK,CAAC,KAAsC;QAC1C,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,WAAW;IACX,KAAK,CAAC,KAAsC;QAC1C,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,8BAA8B;IAE9B;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACxD,OAAO,YAAY,CAAC;YAClB,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;YACxB,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAA0C,CAAC;IAC5D,CAAC;IAED,kCAAkC;IAElC,uBAAuB;IACvB,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,+BAA+B;IAC/B,SAAS;QACP,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI SDK UIMessage stream 解析(对应 core AIService stream handler 的输出)。
|
|
3
|
+
*/
|
|
4
|
+
import type { RawStreamBody } from "../../http.js";
|
|
5
|
+
import type { UserStreamResult } from "../../user/types.js";
|
|
6
|
+
/** 解析 AI SDK UIMessage SSE body */
|
|
7
|
+
export declare function parseAIStreamBody(body: RawStreamBody): UserStreamResult;
|
|
8
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/invoker/ai/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,mCAAmC;AACnC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAGvE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI SDK UIMessage stream 解析(对应 core AIService stream handler 的输出)。
|
|
3
|
+
*/
|
|
4
|
+
import { DefaultChatTransport } from "ai";
|
|
5
|
+
/** 解析 AI SDK UIMessage SSE body */
|
|
6
|
+
export function parseAIStreamBody(body) {
|
|
7
|
+
if (!body)
|
|
8
|
+
throw new Error("VisibleBase stream response body is empty");
|
|
9
|
+
return parser.parse(body);
|
|
10
|
+
}
|
|
11
|
+
class Parser extends DefaultChatTransport {
|
|
12
|
+
parse(stream) {
|
|
13
|
+
return this.processResponseStream(stream);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const parser = new Parser();
|
|
17
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/invoker/ai/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAK1C,mCAAmC;AACnC,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,MAAO,SAAQ,oBAA+B;IAClD,KAAK,CAAC,MAAkC;QACtC,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAqD,CAAC,CAAC;IAC3F,CAAC;CACF;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI 模型类型(对应 core service/ai/types.ts PublicModel)。
|
|
3
|
+
*/
|
|
4
|
+
/** 客户端可见的 Model 引用 */
|
|
5
|
+
export interface UserModelRef {
|
|
6
|
+
/** 模型唯一 ID */
|
|
7
|
+
id: string;
|
|
8
|
+
/** 模型展示名称 */
|
|
9
|
+
name: string;
|
|
10
|
+
/** 模型说明 */
|
|
11
|
+
description: string;
|
|
12
|
+
/** 支持的 modality 列表 */
|
|
13
|
+
modalities: string[];
|
|
14
|
+
/** 标签 */
|
|
15
|
+
tags: string[];
|
|
16
|
+
/** 元数据(可包含 provider、baseUrl 等配置) */
|
|
17
|
+
meta: Record<string, unknown>;
|
|
18
|
+
/** 是否为全局默认(ModelCatalog 计算) */
|
|
19
|
+
is_default?: boolean;
|
|
20
|
+
/** 默认支持的 modality 列表(ModelCatalog 计算) */
|
|
21
|
+
default_modalities?: string[];
|
|
22
|
+
}
|
|
23
|
+
/** 模型标识(Ref 或 ID 字符串) */
|
|
24
|
+
export type UserModelInput = UserModelRef | string;
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/invoker/ai/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,EAAE,EAAE,MAAM,CAAC;IACX,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS;IACT,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,yBAAyB;AACzB,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/invoker/ai/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env Service 调用器(对应 core service/env/env-service.ts EnvService)。
|
|
3
|
+
*
|
|
4
|
+
* 管理端操作:list / upsert / remove / import。
|
|
5
|
+
*/
|
|
6
|
+
import type { RequestInitLike } from "../../http.js";
|
|
7
|
+
import type { EnvEntry, EnvUpsertInput } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* 环境变量管理调用器。
|
|
10
|
+
*
|
|
11
|
+
* 通过 AdminClient.env 访问:
|
|
12
|
+
* ```ts
|
|
13
|
+
* await admin.env.list();
|
|
14
|
+
* await admin.env.upsert({ key: "KEY", value: "val" });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare class EnvInvoker {
|
|
18
|
+
private readonly req;
|
|
19
|
+
constructor(opts: {
|
|
20
|
+
requestJSON: <T>(path: string, init: RequestInitLike) => Promise<T>;
|
|
21
|
+
});
|
|
22
|
+
/** 列出环境变量 */
|
|
23
|
+
list(): Promise<EnvEntry[]>;
|
|
24
|
+
/** 写入/更新 */
|
|
25
|
+
upsert(input: EnvUpsertInput): Promise<unknown>;
|
|
26
|
+
/** 删除 */
|
|
27
|
+
remove(key: string): Promise<unknown>;
|
|
28
|
+
/** 批量导入 .env 文本 */
|
|
29
|
+
import(raw: string): Promise<unknown>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/invoker/env/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI3D;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyD;gBAEjE,IAAI,EAAE;QAChB,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;KACrE;IAID,aAAa;IACP,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKjC,YAAY;IACZ,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAO/C,SAAS;IACT,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrC,mBAAmB;IACnB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAMtC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env Service 调用器(对应 core service/env/env-service.ts EnvService)。
|
|
3
|
+
*
|
|
4
|
+
* 管理端操作:list / upsert / remove / import。
|
|
5
|
+
*/
|
|
6
|
+
const PREFIX = "/api/admin/services/env";
|
|
7
|
+
/**
|
|
8
|
+
* 环境变量管理调用器。
|
|
9
|
+
*
|
|
10
|
+
* 通过 AdminClient.env 访问:
|
|
11
|
+
* ```ts
|
|
12
|
+
* await admin.env.list();
|
|
13
|
+
* await admin.env.upsert({ key: "KEY", value: "val" });
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class EnvInvoker {
|
|
17
|
+
req;
|
|
18
|
+
constructor(opts) {
|
|
19
|
+
this.req = opts.requestJSON;
|
|
20
|
+
}
|
|
21
|
+
/** 列出环境变量 */
|
|
22
|
+
async list() {
|
|
23
|
+
const body = await this.req(`${PREFIX}/list`, { method: "GET" });
|
|
24
|
+
return body.items;
|
|
25
|
+
}
|
|
26
|
+
/** 写入/更新 */
|
|
27
|
+
upsert(input) {
|
|
28
|
+
return this.req(`${PREFIX}/upsert`, {
|
|
29
|
+
method: "POST",
|
|
30
|
+
body: JSON.stringify(input),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** 删除 */
|
|
34
|
+
remove(key) {
|
|
35
|
+
return this.req(`${PREFIX}/remove`, {
|
|
36
|
+
method: "POST",
|
|
37
|
+
body: JSON.stringify({ key }),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** 批量导入 .env 文本 */
|
|
41
|
+
import(raw) {
|
|
42
|
+
return this.req(`${PREFIX}/import`, {
|
|
43
|
+
method: "POST",
|
|
44
|
+
body: JSON.stringify({ raw }),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/invoker/env/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,OAAO,UAAU;IACJ,GAAG,CAAyD;IAE7E,YAAY,IAEX;QACC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;IAC9B,CAAC;IAED,aAAa;IACb,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAwB,GAAG,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,YAAY;IACZ,MAAM,CAAC,KAAqB;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,SAAS;IACT,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env 类型(对应 core service/env/types.ts)。
|
|
3
|
+
*/
|
|
4
|
+
/** 环境变量记录 */
|
|
5
|
+
export interface EnvEntry {
|
|
6
|
+
key: string;
|
|
7
|
+
value: string;
|
|
8
|
+
source: "database" | "dotenv";
|
|
9
|
+
}
|
|
10
|
+
/** 写入/更新 env 的输入 */
|
|
11
|
+
export interface EnvUpsertInput {
|
|
12
|
+
key: string;
|
|
13
|
+
value: string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/invoker/env/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,aAAa;AACb,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC/B;AAED,oBAAoB;AACpB,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/invoker/env/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service / Action 调用器。
|
|
3
|
+
*
|
|
4
|
+
* client.service("ai").action("text").invoke({ prompt: "hello" })
|
|
5
|
+
* → POST /v1/s/ai/text
|
|
6
|
+
*
|
|
7
|
+
* 如果设置了 productId,自动注入 product_id 到 POST body。
|
|
8
|
+
*/
|
|
9
|
+
import type { RequestInitLike } from "../http.js";
|
|
10
|
+
type Requester = <T>(path: string, init: RequestInitLike) => Promise<T>;
|
|
11
|
+
/**
|
|
12
|
+
* Action 调用器。
|
|
13
|
+
*/
|
|
14
|
+
export declare class ActionClient {
|
|
15
|
+
private readonly req;
|
|
16
|
+
private readonly url;
|
|
17
|
+
/** 当前 Product ID,自动注入到 POST body */
|
|
18
|
+
private readonly productId?;
|
|
19
|
+
constructor(req: Requester, url: string,
|
|
20
|
+
/** 当前 Product ID,自动注入到 POST body */
|
|
21
|
+
productId?: string | undefined);
|
|
22
|
+
/** POST 执行 Action */
|
|
23
|
+
invoke<T = unknown>(input?: Record<string, unknown>): Promise<T>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Service 调用器。
|
|
27
|
+
*/
|
|
28
|
+
export declare class ServiceClient {
|
|
29
|
+
private readonly req;
|
|
30
|
+
private readonly prefix;
|
|
31
|
+
private readonly serviceId;
|
|
32
|
+
/** 当前 Product ID,透传给 ActionClient */
|
|
33
|
+
private readonly productId?;
|
|
34
|
+
constructor(req: Requester, prefix: string, serviceId: string,
|
|
35
|
+
/** 当前 Product ID,透传给 ActionClient */
|
|
36
|
+
productId?: string | undefined);
|
|
37
|
+
/** 获取 Action 调用器 */
|
|
38
|
+
action(name: string): ActionClient;
|
|
39
|
+
/** GET 调用 Action(用于 method="GET" 的 action) */
|
|
40
|
+
get<T = unknown>(name: string): Promise<T>;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=invoker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoker.d.ts","sourceRoot":"","sources":["../../src/invoker/invoker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAExE;;GAEG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,oCAAoC;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAHV,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM;IAC5B,oCAAoC;IACnB,SAAS,CAAC,EAAE,MAAM,YAAA;IAGrC,qBAAqB;IACrB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAOrE;AAED;;GAEG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAJV,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM;IAClC,qCAAqC;IACpB,SAAS,CAAC,EAAE,MAAM,YAAA;IAGrC,oBAAoB;IACpB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAMlC,8CAA8C;IAC9C,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAK3C"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service / Action 调用器。
|
|
3
|
+
*
|
|
4
|
+
* client.service("ai").action("text").invoke({ prompt: "hello" })
|
|
5
|
+
* → POST /v1/s/ai/text
|
|
6
|
+
*
|
|
7
|
+
* 如果设置了 productId,自动注入 product_id 到 POST body。
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Action 调用器。
|
|
11
|
+
*/
|
|
12
|
+
export class ActionClient {
|
|
13
|
+
req;
|
|
14
|
+
url;
|
|
15
|
+
productId;
|
|
16
|
+
constructor(req, url,
|
|
17
|
+
/** 当前 Product ID,自动注入到 POST body */
|
|
18
|
+
productId) {
|
|
19
|
+
this.req = req;
|
|
20
|
+
this.url = url;
|
|
21
|
+
this.productId = productId;
|
|
22
|
+
}
|
|
23
|
+
/** POST 执行 Action */
|
|
24
|
+
invoke(input = {}) {
|
|
25
|
+
const body = this.productId ? { ...input, product_id: this.productId } : input;
|
|
26
|
+
return this.req(this.url, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
body: JSON.stringify(body),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Service 调用器。
|
|
34
|
+
*/
|
|
35
|
+
export class ServiceClient {
|
|
36
|
+
req;
|
|
37
|
+
prefix;
|
|
38
|
+
serviceId;
|
|
39
|
+
productId;
|
|
40
|
+
constructor(req, prefix, serviceId,
|
|
41
|
+
/** 当前 Product ID,透传给 ActionClient */
|
|
42
|
+
productId) {
|
|
43
|
+
this.req = req;
|
|
44
|
+
this.prefix = prefix;
|
|
45
|
+
this.serviceId = serviceId;
|
|
46
|
+
this.productId = productId;
|
|
47
|
+
}
|
|
48
|
+
/** 获取 Action 调用器 */
|
|
49
|
+
action(name) {
|
|
50
|
+
const id = normalizeName(name);
|
|
51
|
+
const url = `${this.prefix}/${encodeURIComponent(this.serviceId)}/${id}`;
|
|
52
|
+
return new ActionClient(this.req, url, this.productId);
|
|
53
|
+
}
|
|
54
|
+
/** GET 调用 Action(用于 method="GET" 的 action) */
|
|
55
|
+
get(name) {
|
|
56
|
+
const id = normalizeName(name);
|
|
57
|
+
const url = `${this.prefix}/${encodeURIComponent(this.serviceId)}/${id}`;
|
|
58
|
+
return this.req(url, { method: "GET" });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function normalizeName(value) {
|
|
62
|
+
const s = String(value ?? "").trim().replace(/^\/+/, "");
|
|
63
|
+
if (!s)
|
|
64
|
+
throw new TypeError("name is required");
|
|
65
|
+
return s;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=invoker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoker.js","sourceRoot":"","sources":["../../src/invoker/invoker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,OAAO,YAAY;IAEJ;IACA;IAEA;IAJnB,YACmB,GAAc,EACd,GAAW;IAC5B,oCAAoC;IACnB,SAAkB;QAHlB,QAAG,GAAH,GAAG,CAAW;QACd,QAAG,GAAH,GAAG,CAAQ;QAEX,cAAS,GAAT,SAAS,CAAS;IAClC,CAAC;IAEJ,qBAAqB;IACrB,MAAM,CAAc,QAAiC,EAAE;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/E,OAAO,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IAEL;IACA;IACA;IAEA;IALnB,YACmB,GAAc,EACd,MAAc,EACd,SAAiB;IAClC,qCAAqC;IACpB,SAAkB;QAJlB,QAAG,GAAH,GAAG,CAAW;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAQ;QAEjB,cAAS,GAAT,SAAS,CAAS;IAClC,CAAC;IAEJ,oBAAoB;IACpB,MAAM,CAAC,IAAY;QACjB,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACzE,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,8CAA8C;IAC9C,GAAG,CAAc,IAAY;QAC3B,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Products Service 调用器(对应 core service/products/products-service.ts ProductsService)。
|
|
3
|
+
*
|
|
4
|
+
* 管理端操作:Product CRUD + Token 签发。
|
|
5
|
+
*/
|
|
6
|
+
import type { RequestInitLike } from "../../http.js";
|
|
7
|
+
import type { Product, ProductCreateInput, TokenApplyInput, TokenApplyResult } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Product 和 Token 管理调用器。
|
|
10
|
+
*
|
|
11
|
+
* 通过 AdminClient.products 访问:
|
|
12
|
+
* ```ts
|
|
13
|
+
* await admin.products.list();
|
|
14
|
+
* await admin.products.create({ name: "My App" });
|
|
15
|
+
* await admin.products.tokens.apply({ product_id, user_id });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare class ProductsInvoker {
|
|
19
|
+
/** Token 签发 */
|
|
20
|
+
readonly tokens: TokenInvoker;
|
|
21
|
+
private readonly req;
|
|
22
|
+
constructor(opts: {
|
|
23
|
+
requestJSON: <T>(path: string, init: RequestInitLike) => Promise<T>;
|
|
24
|
+
});
|
|
25
|
+
/** 列出 Product */
|
|
26
|
+
list(): Promise<Product[]>;
|
|
27
|
+
/** 创建 */
|
|
28
|
+
create(input: ProductCreateInput): Promise<Product>;
|
|
29
|
+
/** 暂停 */
|
|
30
|
+
pause(product_id: string): Promise<Product>;
|
|
31
|
+
/** 激活 */
|
|
32
|
+
activate(product_id: string): Promise<Product>;
|
|
33
|
+
/** 删除 */
|
|
34
|
+
remove(product_id: string): Promise<unknown>;
|
|
35
|
+
}
|
|
36
|
+
/** Token 签发调用器 */
|
|
37
|
+
declare class TokenInvoker {
|
|
38
|
+
private readonly req;
|
|
39
|
+
constructor(opts: {
|
|
40
|
+
requestJSON: <T>(path: string, init: RequestInitLike) => Promise<T>;
|
|
41
|
+
});
|
|
42
|
+
/** 签发 user_token */
|
|
43
|
+
apply(input: TokenApplyInput): Promise<TokenApplyResult>;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/invoker/products/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIjG;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,eAAe;IACf,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyD;gBAEjE,IAAI,EAAE;QAChB,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;KACrE;IAKD,iBAAiB;IACX,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAKhC,SAAS;IACT,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnD,SAAS;IACT,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3C,SAAS;IACT,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO9C,SAAS;IACT,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAM7C;AAED,kBAAkB;AAClB,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyD;gBAEjE,IAAI,EAAE;QAChB,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;KACrE;IAID,oBAAoB;IACpB,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAMzD"}
|