@lumenkey/cli 0.1.8 → 0.2.0
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 +27 -5
- package/dist/cli/copied.d.ts.map +1 -1
- package/dist/cli/copied.js +75 -57
- package/dist/cli/copied.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +10 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/core/client.d.ts +1 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +100 -15
- package/dist/core/client.js.map +1 -1
- package/dist/core/config-dir.d.ts +3 -0
- package/dist/core/config-dir.d.ts.map +1 -0
- package/dist/core/config-dir.js +22 -0
- package/dist/core/config-dir.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +16 -10
- package/dist/core/config.js.map +1 -1
- package/dist/core/job-display.d.ts +4 -0
- package/dist/core/job-display.d.ts.map +1 -0
- package/dist/core/job-display.js +19 -0
- package/dist/core/job-display.js.map +1 -0
- package/dist/core/locale.d.ts +3 -1
- package/dist/core/locale.d.ts.map +1 -1
- package/dist/core/locale.js +58 -7
- package/dist/core/locale.js.map +1 -1
- package/dist/core/origin.d.ts.map +1 -1
- package/dist/core/origin.js +1 -0
- package/dist/core/origin.js.map +1 -1
- package/dist/core/poller.d.ts.map +1 -1
- package/dist/core/poller.js +9 -15
- package/dist/core/poller.js.map +1 -1
- package/dist/core/profiles.d.ts +3 -0
- package/dist/core/profiles.d.ts.map +1 -1
- package/dist/core/profiles.js +12 -3
- package/dist/core/profiles.js.map +1 -1
- package/dist/core/wait.d.ts.map +1 -1
- package/dist/core/wait.js +19 -2
- package/dist/core/wait.js.map +1 -1
- package/dist/mcp/server.js +14 -14
- package/dist/mcp/server.js.map +1 -1
- package/package.json +1 -1
package/dist/core/locale.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare function hasErrorSentence(code: string): boolean;
|
|
|
6
6
|
export declare function errorSentence(code: string, lang?: Lang): string;
|
|
7
7
|
export declare function transportFailureDetail(baseUrl: string, lang?: Lang): string;
|
|
8
8
|
export declare function proxyTransportDetail(baseUrl: string, lang?: Lang): string;
|
|
9
|
-
/** Blank means no visible character remains
|
|
9
|
+
/** Blank means no visible character remains. Fillers are listed; real letters, including Hangul, stay. */
|
|
10
10
|
export declare function isBlankPrompt(value: unknown): boolean;
|
|
11
11
|
export declare function textCatalogMissDetail(model: string, lang?: Lang): string;
|
|
12
12
|
export declare function missingModelSentence(name: string, lang?: Lang): string;
|
|
@@ -17,6 +17,8 @@ export declare function idempotencyKeyMessages(lang?: Lang): {
|
|
|
17
17
|
breaks: string;
|
|
18
18
|
};
|
|
19
19
|
export declare function ui(en: string, zh: string, lang?: Lang): string;
|
|
20
|
+
export declare function waitTimeoutDetail(jobId: string, timeoutMs: number, lang?: Lang): string;
|
|
21
|
+
export declare function jobStatusText(status: string, lang?: Lang): string;
|
|
20
22
|
export declare function blankPromptSentence(kind: 'flag' | 'field' | 'user', lang?: Lang): string;
|
|
21
23
|
export declare function spendingCapSentence(label: string, lang?: Lang): string;
|
|
22
24
|
export declare function quoteCapSentence(label: string, lang?: Lang): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../src/core/locale.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../src/core/locale.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAsJ/B,wBAAgB,QAAQ,CAAC,IAAI,GAAE,SAAS,MAAM,EAAiB,GAAG,MAAM,GAAG,SAAS,CASnF;AAUD,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,IAAI,GAAE,SAAS,MAAM,EAAiB,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,IAAI,CAQ9G;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAG9E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAI1F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAIxF;AAID,0GAA0G;AAC1G,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAKvF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAIrF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAW5I;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,IAAoB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQpH;AAED,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAE7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAOtG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAOhF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CASvG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAIrF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAoB,GAAG,MAAM,CAIlF;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D"}
|
package/dist/core/locale.js
CHANGED
|
@@ -5,6 +5,9 @@ const EN = {
|
|
|
5
5
|
MODEL_NOT_IN_CATALOG: 'This model ID is not in your available catalog. Use models to find an exact ID.',
|
|
6
6
|
BASE_URL_INVALID: 'The gateway address must be an HTTP(S) origin without credentials, query or fragment.',
|
|
7
7
|
TRANSPORT_FAILED: 'Network connection to the gateway failed.',
|
|
8
|
+
PROXY_URL_INVALID: 'The configured proxy address is not usable. Check the proxy environment variables.',
|
|
9
|
+
PROXY_PROTOCOL_UNSUPPORTED: 'Only HTTP(S) proxies are supported. The configured proxy was not bypassed.',
|
|
10
|
+
CLI_ARGUMENTS_INVALID: 'Unexpected positional arguments. Check this command with --help.',
|
|
8
11
|
HTTP_ERROR: 'The gateway could not complete this request.',
|
|
9
12
|
API_REQUEST_FAILED: 'The gateway could not complete this request.',
|
|
10
13
|
JOB_ID_INVALID: 'A non-empty task ID in UUID format is required.',
|
|
@@ -12,6 +15,7 @@ const EN = {
|
|
|
12
15
|
CHAT_CREDIT_LIMIT_INVALID: 'The chat spending cap must be a non-negative safe integer.',
|
|
13
16
|
CHAT_CREDIT_LIMIT_EXCEEDED: 'The required chat reservation exceeds your spending cap. No chat was started or credits reserved.',
|
|
14
17
|
STREAM_SETTLEMENT_PENDING: 'Chat failed, but settlement has not been confirmed. Credits may still be reserved; do not assume they have been released.',
|
|
18
|
+
STREAM_INPUT_SETTLEMENT_PENDING: 'An earlier request has pending settlement. Credits may still be reserved; do not assume they have been released. No automatic retry was made.',
|
|
15
19
|
STREAM_ALREADY_CONSUMED: 'This idempotency key already completed the same request. This attempt was not charged again.',
|
|
16
20
|
IDEMPOTENCY_CONFLICT: 'This idempotency key was already used for a different request. This attempt was not charged again.',
|
|
17
21
|
IDEMPOTENCY_RESULT_EXPIRED: 'The earlier result for this idempotency key is no longer replayable.',
|
|
@@ -53,6 +57,19 @@ const EN = {
|
|
|
53
57
|
CANCELLED: 'The request was cancelled.',
|
|
54
58
|
ACCOUNT_NOT_ELIGIBLE: 'This account cannot use the requested model.',
|
|
55
59
|
CHAT_UPSTREAM_ERROR: 'The model returned an internal error instead of an answer.',
|
|
60
|
+
UNAUTHORIZED: 'The key was rejected. Check LUMENKEY_API_KEY or run lumenkey login.',
|
|
61
|
+
FORBIDDEN: 'This key cannot perform that action.',
|
|
62
|
+
INSUFFICIENT_CREDITS: 'Not enough credits for this request.',
|
|
63
|
+
NOT_FOUND: 'The gateway has no such resource.',
|
|
64
|
+
RATE_LIMITED: 'Too many requests. Wait and try again.',
|
|
65
|
+
GATEWAY_REDIRECTED: 'The gateway returned a redirect, and this client did not follow it.',
|
|
66
|
+
JOB_CANCELLED: 'The task was cancelled.',
|
|
67
|
+
JOB_EXPIRED: 'The task expired before it finished.',
|
|
68
|
+
JOB_OUTPUT_MISSING: 'The task finished without a result address.',
|
|
69
|
+
JOB_TERMINAL_FAILURE: 'The task ended without a result.',
|
|
70
|
+
DOWNLOAD_URL_INVALID: 'The result address cannot be downloaded.',
|
|
71
|
+
DOWNLOAD_TOO_LARGE: 'The result is larger than 128 MiB and was not saved.',
|
|
72
|
+
CLI_COMMAND_FAILED: 'The command failed before it could finish.',
|
|
56
73
|
};
|
|
57
74
|
const ZH = {
|
|
58
75
|
API_KEY_NOT_CONFIGURED: '尚未配置密钥。请设置 LUMENKEY_API_KEY,或运行 lumenkey login。',
|
|
@@ -61,6 +78,9 @@ const ZH = {
|
|
|
61
78
|
MODEL_NOT_IN_CATALOG: '该模型 ID 不在你的可用目录中。运行 lumenkey models 查看准确 ID。',
|
|
62
79
|
BASE_URL_INVALID: '网关地址必须是 HTTP(S) 源地址,且不能包含账号密码、查询参数或片段。',
|
|
63
80
|
TRANSPORT_FAILED: '无法连接网关,请检查网络与网关地址。',
|
|
81
|
+
PROXY_URL_INVALID: '代理地址无效,请检查代理环境变量。',
|
|
82
|
+
PROXY_PROTOCOL_UNSUPPORTED: '仅支持 HTTP(S) 代理;未绕过已配置的代理直连。',
|
|
83
|
+
CLI_ARGUMENTS_INVALID: '命令包含多余的位置参数,请用 --help 检查用法。',
|
|
64
84
|
HTTP_ERROR: '网关无法完成本次请求。',
|
|
65
85
|
API_REQUEST_FAILED: '网关无法完成本次请求。',
|
|
66
86
|
JOB_ID_INVALID: '任务 ID 不能为空,且必须是 UUID 格式。',
|
|
@@ -68,6 +88,7 @@ const ZH = {
|
|
|
68
88
|
CHAT_CREDIT_LIMIT_INVALID: '对话花费上限必须是非负整数。',
|
|
69
89
|
CHAT_CREDIT_LIMIT_EXCEEDED: '本次对话所需预授权超过你的花费上限,已阻止。未发起对话,也未冻结算力点。',
|
|
70
90
|
STREAM_SETTLEMENT_PENDING: '对话失败,但结算尚未确认。算力点可能仍处于冻结状态,请不要认为已自动归还。',
|
|
91
|
+
STREAM_INPUT_SETTLEMENT_PENDING: '先前请求的结算尚未确认,算力点可能仍处于冻结状态。请不要认为已自动归还;客户端没有自动重试。',
|
|
71
92
|
STREAM_ALREADY_CONSUMED: '该幂等键已成功完成过同一请求,本次未重复扣费。',
|
|
72
93
|
IDEMPOTENCY_CONFLICT: '该幂等键已用于另一个不同的请求,本次未重复扣费。',
|
|
73
94
|
IDEMPOTENCY_RESULT_EXPIRED: '该幂等键上一次保存的结果已经不能再回放。',
|
|
@@ -109,6 +130,19 @@ const ZH = {
|
|
|
109
130
|
CANCELLED: '请求已取消。',
|
|
110
131
|
ACCOUNT_NOT_ELIGIBLE: '此账号不能使用所请求的模型。',
|
|
111
132
|
CHAT_UPSTREAM_ERROR: '模型返回了内部错误,而不是回答。',
|
|
133
|
+
UNAUTHORIZED: '密钥未被接受。请检查 LUMENKEY_API_KEY,或运行 lumenkey login。',
|
|
134
|
+
FORBIDDEN: '这把密钥不能执行该操作。',
|
|
135
|
+
INSUFFICIENT_CREDITS: '算力点不足,无法完成本次请求。',
|
|
136
|
+
NOT_FOUND: '网关没有这个资源。',
|
|
137
|
+
RATE_LIMITED: '请求过于频繁,请稍后再试。',
|
|
138
|
+
GATEWAY_REDIRECTED: '网关返回了重定向,客户端没有跟随。',
|
|
139
|
+
JOB_CANCELLED: '任务已取消。',
|
|
140
|
+
JOB_EXPIRED: '任务在完成前已过期。',
|
|
141
|
+
JOB_OUTPUT_MISSING: '任务已结束,但没有结果地址。',
|
|
142
|
+
JOB_TERMINAL_FAILURE: '任务已结束,没有可用结果。',
|
|
143
|
+
DOWNLOAD_URL_INVALID: '结果地址无法下载。',
|
|
144
|
+
DOWNLOAD_TOO_LARGE: '结果超过 128 MiB,没有保存。',
|
|
145
|
+
CLI_COMMAND_FAILED: '命令未能完成。',
|
|
112
146
|
};
|
|
113
147
|
export function langFlag(argv = process.argv) {
|
|
114
148
|
const args = argv.slice(2);
|
|
@@ -123,18 +157,22 @@ export function langFlag(argv = process.argv) {
|
|
|
123
157
|
}
|
|
124
158
|
return undefined;
|
|
125
159
|
}
|
|
160
|
+
function primarySubtag(raw) {
|
|
161
|
+
return (raw.trim().replace(/-/g, '_').split(/[._@]/)[0] ?? '').toLowerCase();
|
|
162
|
+
}
|
|
126
163
|
function localeLang(env) {
|
|
127
|
-
|
|
128
|
-
return primary === 'en' ? 'en' : 'zh';
|
|
164
|
+
return primarySubtag(env.LC_ALL || env.LANG || '') === 'en' ? 'en' : 'zh';
|
|
129
165
|
}
|
|
130
166
|
/** --lang zh|en, then LUMENKEY_LANG, then LC_ALL / LANG, then zh. Invalid values are ignored here. */
|
|
131
167
|
export function resolveLang(argv = process.argv, env = process.env) {
|
|
132
168
|
const flag = langFlag(argv);
|
|
133
169
|
if (flag === 'zh' || flag === 'en')
|
|
134
170
|
return flag;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
171
|
+
if (typeof env.LUMENKEY_LANG === 'string' && env.LUMENKEY_LANG.trim()) {
|
|
172
|
+
const primary = primarySubtag(env.LUMENKEY_LANG);
|
|
173
|
+
if (primary === 'zh' || primary === 'en')
|
|
174
|
+
return primary;
|
|
175
|
+
}
|
|
138
176
|
return localeLang(env);
|
|
139
177
|
}
|
|
140
178
|
export function hasErrorSentence(code) {
|
|
@@ -154,9 +192,10 @@ export function proxyTransportDetail(baseUrl, lang = resolveLang()) {
|
|
|
154
192
|
? `通过 HTTP(S)_PROXY 或 ALL_PROXY 连接网关 ${baseUrl} 失败。请检查代理,不要把代理地址当成网关故障。`
|
|
155
193
|
: `The request to ${baseUrl} failed through HTTP(S)_PROXY or ALL_PROXY. Check that proxy; this is not a gateway-address failure.`;
|
|
156
194
|
}
|
|
157
|
-
|
|
195
|
+
const INVISIBLE_PROMPT = /[\p{Cf}\p{Mn}\p{Me}\p{Zs}\p{Zl}\p{Zp}\u115F\u1160\u2800\u3164\uFFA0]/gu;
|
|
196
|
+
/** Blank means no visible character remains. Fillers are listed; real letters, including Hangul, stay. */
|
|
158
197
|
export function isBlankPrompt(value) {
|
|
159
|
-
return typeof value !== 'string' || value.replace(
|
|
198
|
+
return typeof value !== 'string' || value.replace(INVISIBLE_PROMPT, '').trim().length === 0;
|
|
160
199
|
}
|
|
161
200
|
export function textCatalogMissDetail(model, lang = resolveLang()) {
|
|
162
201
|
const shown = JSON.stringify(model);
|
|
@@ -199,6 +238,18 @@ export function idempotencyKeyMessages(lang = resolveLang()) {
|
|
|
199
238
|
export function ui(en, zh, lang = resolveLang()) {
|
|
200
239
|
return lang === 'zh' ? zh : en;
|
|
201
240
|
}
|
|
241
|
+
export function waitTimeoutDetail(jobId, timeoutMs, lang = resolveLang()) {
|
|
242
|
+
const seconds = timeoutMs / 1000;
|
|
243
|
+
return ui(`Timed out waiting after ${seconds} seconds. The task may still be running; it was not cancelled. Resume with: lumenkey status ${jobId}`, `等待任务 ${seconds} 秒后超时。任务可能仍在运行,未执行取消。可继续查询:lumenkey status ${jobId}`, lang);
|
|
244
|
+
}
|
|
245
|
+
export function jobStatusText(status, lang = resolveLang()) {
|
|
246
|
+
const names = {
|
|
247
|
+
accepted: '已受理', policy_checking: '策略检查中', queued: '排队中', submitting: '提交中',
|
|
248
|
+
provider_running: '生成中', output_checking: '结果检查中', succeeded: '已完成',
|
|
249
|
+
rejected: '已拒绝', failed: '失败', cancelled: '已取消', expired: '已过期',
|
|
250
|
+
};
|
|
251
|
+
return lang === 'zh' && names[status] ? `${names[status]} (${status})` : status;
|
|
252
|
+
}
|
|
202
253
|
export function blankPromptSentence(kind, lang = resolveLang()) {
|
|
203
254
|
if (lang === 'zh') {
|
|
204
255
|
if (kind === 'flag')
|
package/dist/core/locale.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../../src/core/locale.ts"],"names":[],"mappings":"AAEA,MAAM,EAAE,GAA2B;IACjC,sBAAsB,EAAE,kEAAkE;IAC1F,eAAe,EAAE,sEAAsE;IACvF,cAAc,EAAE,mCAAmC;IACnD,oBAAoB,EAAE,iFAAiF;IACvG,gBAAgB,EAAE,uFAAuF;IACzG,gBAAgB,EAAE,2CAA2C;IAC7D,UAAU,EAAE,8CAA8C;IAC1D,kBAAkB,EAAE,8CAA8C;IAClE,cAAc,EAAE,iDAAiD;IACjE,aAAa,EAAE,4DAA4D;IAC3E,yBAAyB,EAAE,4DAA4D;IACvF,0BAA0B,EAAE,mGAAmG;IAC/H,yBAAyB,EAAE,2HAA2H;IACtJ,uBAAuB,EAAE,8FAA8F;IACvH,oBAAoB,EAAE,oGAAoG;IAC1H,0BAA0B,EAAE,sEAAsE;IAClG,wBAAwB,EAAE,iCAAiC;IAC3D,uBAAuB,EAAE,mDAAmD;IAC5E,wBAAwB,EAAE,gDAAgD;IAC1E,0BAA0B,EAAE,yGAAyG;IACrI,YAAY,EAAE,4BAA4B;IAC1C,wBAAwB,EAAE,yDAAyD;IACnF,wBAAwB,EAAE,wDAAwD;IAClF,oBAAoB,EAAE,yDAAyD;IAC/E,mBAAmB,EAAE,uCAAuC;IAC5D,eAAe,EAAE,+DAA+D;IAChF,oBAAoB,EAAE,qDAAqD;IAC3E,0BAA0B,EAAE,wCAAwC;IACpE,aAAa,EAAE,8CAA8C;IAC7D,sBAAsB,EAAE,sDAAsD;IAC9E,kBAAkB,EAAE,+CAA+C;IACnE,eAAe,EAAE,wDAAwD;IACzE,qBAAqB,EAAE,0CAA0C;IACjE,kBAAkB,EAAE,sDAAsD;IAC1E,eAAe,EAAE,8CAA8C;IAC/D,sBAAsB,EAAE,iDAAiD;IACzE,oBAAoB,EAAE,8CAA8C;IACpE,YAAY,EAAE,gEAAgE;IAC9E,oBAAoB,EAAE,kDAAkD;IACxE,gBAAgB,EAAE,iCAAiC;IACnD,yBAAyB,EAAE,sEAAsE;IACjG,aAAa,EAAE,gDAAgD;IAC/D,0BAA0B,EAAE,iDAAiD;IAC7E,0BAA0B,EAAE,8CAA8C;IAC1E,mBAAmB,EAAE,8BAA8B;IACnD,gBAAgB,EAAE,2BAA2B;IAC7C,mBAAmB,EAAE,gDAAgD;IACrE,yBAAyB,EAAE,2DAA2D;IACtF,cAAc,EAAE,sCAAsC;IACtD,iBAAiB,EAAE,qDAAqD;IACxE,oBAAoB,EAAE,gCAAgC;IACtD,SAAS,EAAE,4BAA4B;IACvC,oBAAoB,EAAE,8CAA8C;IACpE,mBAAmB,EAAE,4DAA4D;
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../../src/core/locale.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../src/core/origin.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAC5H,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../src/core/origin.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAC5H,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAY1D"}
|
package/dist/core/origin.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Collapse repeated path slashes, then remove one trailing /v1 and leftover slashes. The scheme separator stays intact. */
|
|
2
2
|
export function normalizeGatewayOrigin(raw) {
|
|
3
|
+
raw = raw.trim();
|
|
3
4
|
const scheme = /^([A-Za-z][A-Za-z0-9+.-]*:\/\/)/.exec(raw);
|
|
4
5
|
if (!scheme)
|
|
5
6
|
return stripGatewayPath(raw);
|
package/dist/core/origin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../../src/core/origin.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAC5H,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,MAAM,GAAG,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnG,CAAC"}
|
|
1
|
+
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../../src/core/origin.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAC5H,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../src/core/poller.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../src/core/poller.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACpD;AAID,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAQ5C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,aAAa,UAAQ,GAAG,IAAI,CAUxF;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAwC9B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BtG"}
|
package/dist/core/poller.js
CHANGED
|
@@ -4,23 +4,17 @@ import { pipeline } from 'node:stream/promises';
|
|
|
4
4
|
import { Readable } from 'node:stream';
|
|
5
5
|
import { Transform } from 'node:stream';
|
|
6
6
|
import crypto from 'node:crypto';
|
|
7
|
-
import { LumenKeyError } from './client.js';
|
|
7
|
+
import { LumenKeyError, redactPublicDetail } from './client.js';
|
|
8
|
+
import { hasErrorSentence, waitTimeoutDetail } from './locale.js';
|
|
8
9
|
const TERMINAL_STATES = new Set(['succeeded', 'rejected', 'failed', 'cancelled', 'expired']);
|
|
9
10
|
export class JobFailureError extends LumenKeyError {
|
|
10
11
|
constructor(code, message) {
|
|
11
12
|
super(code);
|
|
12
13
|
this.name = 'JobFailureError';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
.replace(/[\u0000-\u001f\u007f-\u009f]/g, ' ')
|
|
18
|
-
.replace(/\b(?:https?|postgres(?:ql)?|redis):\/\/\S+/gi, '[redacted]')
|
|
19
|
-
.replace(/\bBearer\s+\S+/gi, 'Bearer [redacted]')
|
|
20
|
-
.replace(/\b(?:api[_-]?key|token|secret|password|authorization|dsn)\s*[:=]\s*\S+/gi, '[redacted]')
|
|
21
|
-
.replace(/\b(?:sk-|lk_live_|lk_test_)[A-Za-z0-9_-]+/g, '[redacted]')
|
|
22
|
-
.replace(/\s+/g, ' ').trim().slice(0, 200) : '';
|
|
23
|
-
this.message = `${code}${short ? `: ${short}` : ''}`;
|
|
14
|
+
if (!hasErrorSentence(code)) {
|
|
15
|
+
const short = redactPublicDetail(message);
|
|
16
|
+
this.message = `${code}${short ? `: ${short}` : ''}`;
|
|
17
|
+
}
|
|
24
18
|
}
|
|
25
19
|
}
|
|
26
20
|
export function assertJobResult(detail, requireOutput = false) {
|
|
@@ -41,7 +35,7 @@ export async function pollJob(client, jobId, options = {}) {
|
|
|
41
35
|
const startTime = Date.now();
|
|
42
36
|
while (true) {
|
|
43
37
|
if (Date.now() - startTime > timeoutMs) {
|
|
44
|
-
throw new
|
|
38
|
+
throw new LumenKeyError('WAIT_TIMEOUT', undefined, undefined, waitTimeoutDetail(jobId, timeoutMs));
|
|
45
39
|
}
|
|
46
40
|
let detail;
|
|
47
41
|
try {
|
|
@@ -83,7 +77,7 @@ export async function downloadFile(url, outputPath, overwrite = false) {
|
|
|
83
77
|
}
|
|
84
78
|
const target = new URL(url);
|
|
85
79
|
if (target.username || target.password || !['https:', 'http:'].includes(target.protocol))
|
|
86
|
-
throw new
|
|
80
|
+
throw new LumenKeyError('DOWNLOAD_URL_INVALID');
|
|
87
81
|
const response = await fetch(url, { redirect: 'error', signal: AbortSignal.timeout(120000) });
|
|
88
82
|
if (!response.ok || !response.body) {
|
|
89
83
|
throw new Error(`DOWNLOAD_HTTP_ERROR_${response.status}`);
|
|
@@ -92,7 +86,7 @@ export async function downloadFile(url, outputPath, overwrite = false) {
|
|
|
92
86
|
const limit = 128 * 1024 * 1024;
|
|
93
87
|
let bytes = 0;
|
|
94
88
|
try {
|
|
95
|
-
await pipeline(Readable.fromWeb(response.body), new Transform({ transform(chunk, _encoding, callback) { bytes += chunk.length; callback(bytes > limit ? new
|
|
89
|
+
await pipeline(Readable.fromWeb(response.body), new Transform({ transform(chunk, _encoding, callback) { bytes += chunk.length; callback(bytes > limit ? new LumenKeyError('DOWNLOAD_TOO_LARGE') : null, chunk); } }), fs.createWriteStream(temporary, { flags: 'wx', mode: 0o600 }));
|
|
96
90
|
if (overwrite)
|
|
97
91
|
await fs.promises.rename(temporary, resolvedPath);
|
|
98
92
|
else {
|
package/dist/core/poller.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../src/core/poller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../src/core/poller.ts"],"names":[],"mappings":"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"}
|
package/dist/core/profiles.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAMA,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,IAAI,EAAE,MAAM;CAIzB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,wBAAgB,cAAc,CAAC,IAAI,SAAe,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,CAI7F;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAe,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;CAAE,CAUhJ;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKxF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAe,EAAE,QAAQ,UAAO,GAAG,SAAS,GAAG,QAAQ,CAOtG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAe,GAAG,IAAI,CAKlE;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAe,GAAG,IAAI,CAItD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAe,GAAG,OAAO,CAOxE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,SAAe,GAAG,IAAI,CAKpG;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,SAAe,GAAG,MAAM,CAOnF"}
|
package/dist/core/profiles.js
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
+
import { ui } from './locale.js';
|
|
5
|
+
import { assertConfigDirReadable } from './config-dir.js';
|
|
6
|
+
export class ProfileMissingError extends Error {
|
|
7
|
+
constructor(name) {
|
|
8
|
+
super(ui(`Profile ${name} does not exist.`, `档案 ${name} 不存在。`));
|
|
9
|
+
this.name = 'ProfileMissingError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
4
12
|
function filePath(home = os.homedir()) {
|
|
5
13
|
return path.join(home, '.lumenkey', 'profiles.json');
|
|
6
14
|
}
|
|
7
15
|
function read(home = os.homedir()) {
|
|
8
16
|
const target = filePath(home);
|
|
17
|
+
assertConfigDirReadable(target);
|
|
9
18
|
if (!fs.existsSync(target))
|
|
10
19
|
return { profiles: {} };
|
|
11
20
|
try {
|
|
@@ -58,7 +67,7 @@ export function createProfile(name, home = os.homedir(), activate = true) {
|
|
|
58
67
|
export function setProfile(name, home = os.homedir()) {
|
|
59
68
|
const data = read(home);
|
|
60
69
|
if (!data.profiles[name])
|
|
61
|
-
throw new
|
|
70
|
+
throw new ProfileMissingError(name);
|
|
62
71
|
data.current = name;
|
|
63
72
|
write(data, home);
|
|
64
73
|
}
|
|
@@ -80,7 +89,7 @@ export function deleteProfile(name, home = os.homedir()) {
|
|
|
80
89
|
export function setNamedProfileFields(name, fields, home = os.homedir()) {
|
|
81
90
|
const data = read(home);
|
|
82
91
|
if (!data.profiles[name])
|
|
83
|
-
throw new
|
|
92
|
+
throw new ProfileMissingError(name);
|
|
84
93
|
data.profiles[name] = { ...data.profiles[name], ...fields };
|
|
85
94
|
write(data, home);
|
|
86
95
|
}
|
|
@@ -88,7 +97,7 @@ export function setProfileFields(fields, home = os.homedir()) {
|
|
|
88
97
|
const data = read(home);
|
|
89
98
|
const name = data.current;
|
|
90
99
|
if (!name || !data.profiles[name])
|
|
91
|
-
throw new Error('No key set for profile. Use profile create first.');
|
|
100
|
+
throw new Error(ui('No key set for profile. Use profile create first.', '当前没有档案。请先运行 profile create。'));
|
|
92
101
|
data.profiles[name] = { ...data.profiles[name], ...fields };
|
|
93
102
|
write(data, home);
|
|
94
103
|
return name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/core/wait.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/core/wait.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/core/wait.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKtD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,mBAAmB,CAAC,CAyB9B"}
|
package/dist/core/wait.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LumenKeyError } from './client.js';
|
|
2
|
+
import { assertJobResult } from './poller.js';
|
|
2
3
|
const TERMINAL = new Set(['succeeded', 'failed', 'rejected', 'cancelled', 'expired']);
|
|
3
4
|
const MAX_TIMER_MS = 2_147_483_647;
|
|
4
5
|
export async function waitForJob(client, jobId, options = {}) {
|
|
@@ -7,10 +8,26 @@ export async function waitForJob(client, jobId, options = {}) {
|
|
|
7
8
|
if (!Number.isFinite(intervalMs) || intervalMs < 0 || intervalMs > MAX_TIMER_MS || !Number.isFinite(timeoutMs) || timeoutMs < 0)
|
|
8
9
|
throw new LumenKeyError('WAIT_OPTIONS_INVALID');
|
|
9
10
|
const deadline = Date.now() + timeoutMs;
|
|
11
|
+
let delay = intervalMs;
|
|
10
12
|
for (;;) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
let detail;
|
|
14
|
+
try {
|
|
15
|
+
detail = await client.getJob(jobId);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (!(error instanceof LumenKeyError) || !(error.status === 429 || error.status === 502 || error.status === 503 || error.status === 504))
|
|
19
|
+
throw error;
|
|
20
|
+
const remaining = deadline - Date.now();
|
|
21
|
+
if (remaining <= 0)
|
|
22
|
+
throw error;
|
|
23
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(remaining, Math.max(delay, error.retryAfterMs ?? 0))));
|
|
24
|
+
delay = Math.min(delay * 1.5, Math.max(intervalMs, 10_000));
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (TERMINAL.has(detail.status)) {
|
|
28
|
+
assertJobResult(detail, detail.status === 'succeeded');
|
|
13
29
|
return detail;
|
|
30
|
+
}
|
|
14
31
|
if (Date.now() >= deadline)
|
|
15
32
|
throw new LumenKeyError('WAIT_TIMEOUT');
|
|
16
33
|
await new Promise((resolve) => setTimeout(resolve, Math.max(0, intervalMs)));
|
package/dist/core/wait.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/core/wait.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/core/wait.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AACtF,MAAM,YAAY,GAAG,aAAa,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAsB,EACtB,KAAa,EACb,UAAuD,EAAE;IAEzD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACjL,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,SAAS,CAAC;QACR,IAAI,MAA2B,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;gBAAE,MAAM,KAAK,CAAC;YACtJ,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxC,IAAI,SAAS,IAAI,CAAC;gBAAE,MAAM,KAAK,CAAC;YAChC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnH,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;YACvD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;QACpE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -43,7 +43,7 @@ export function createMcpServer() {
|
|
|
43
43
|
assertSupportedLang();
|
|
44
44
|
const server = new McpServer({
|
|
45
45
|
name: 'lumenkey-mcp-server',
|
|
46
|
-
version: '0.
|
|
46
|
+
version: '0.2.0',
|
|
47
47
|
});
|
|
48
48
|
const config = loadConfig();
|
|
49
49
|
const client = new LumenKeyClient(config);
|
|
@@ -53,7 +53,7 @@ export function createMcpServer() {
|
|
|
53
53
|
/**
|
|
54
54
|
* Tool: List available models
|
|
55
55
|
*/
|
|
56
|
-
tool('lumenkey_list_models', 'List all available AI models (video, image, text, audio) from LumenKey catalog with schemas and pricing', {
|
|
56
|
+
tool('lumenkey_list_models', ui('List all available AI models (video, image, text, audio) from LumenKey catalog with schemas and pricing', '读取光钥模型目录,包含视频、图片、文本、音频的参数结构与价格。'), {
|
|
57
57
|
type: z.enum(['video', 'image', 'text', 'audio']).optional().describe('Filter models by type'),
|
|
58
58
|
}, async ({ type }) => {
|
|
59
59
|
try {
|
|
@@ -80,7 +80,7 @@ export function createMcpServer() {
|
|
|
80
80
|
/**
|
|
81
81
|
* Tool: Generate Video (Seedance 2.0, Wan 3.0, etc.)
|
|
82
82
|
*/
|
|
83
|
-
tool('lumenkey_generate_video', 'Quote a LumenKey video. Nothing is submitted until confirm is true.', {
|
|
83
|
+
tool('lumenkey_generate_video', ui('Quote a LumenKey video. Nothing is submitted until confirm is true.', '获取光钥视频报价;只有 confirm 为 true 时才提交计费生成。'), {
|
|
84
84
|
modelId: z.string().describe('Model ID (e.g. doubao-seedance-2.0, wan3.0-video)'),
|
|
85
85
|
prompt: requiredPrompt('Text description of the video to generate'),
|
|
86
86
|
imageUrl: z.string().optional().describe('Optional source image URL for image-to-video'),
|
|
@@ -162,7 +162,7 @@ export function createMcpServer() {
|
|
|
162
162
|
/**
|
|
163
163
|
* Tool: Generate Image
|
|
164
164
|
*/
|
|
165
|
-
tool('lumenkey_generate_image', 'Quote a LumenKey image. Nothing is submitted until confirm is true.', {
|
|
165
|
+
tool('lumenkey_generate_image', ui('Quote a LumenKey image. Nothing is submitted until confirm is true.', '获取光钥图片报价;只有 confirm 为 true 时才提交计费生成。'), {
|
|
166
166
|
modelId: z.string().describe('Model ID (e.g. flux-2-pro)'),
|
|
167
167
|
prompt: requiredPrompt('Prompt for image generation'),
|
|
168
168
|
imageUrl: z.string().optional().describe('Reference image URL, only when declared in the model inputSchema'),
|
|
@@ -229,12 +229,12 @@ export function createMcpServer() {
|
|
|
229
229
|
/**
|
|
230
230
|
* Tool: Query Job Status
|
|
231
231
|
*/
|
|
232
|
-
tool('lumenkey_query_job', 'Query the status of an asynchronous generation task by its jobId', {
|
|
232
|
+
tool('lumenkey_query_job', ui('Query the status of an asynchronous generation task by its jobId', '按任务 ID 查询已有异步生成任务的状态。'), {
|
|
233
233
|
jobId: z.string().describe('The task ID to query'),
|
|
234
234
|
}, async ({ jobId }) => {
|
|
235
235
|
try {
|
|
236
236
|
const detail = await client.getJob(jobId);
|
|
237
|
-
assertJobResult(detail,
|
|
237
|
+
assertJobResult(detail, detail.status === 'succeeded');
|
|
238
238
|
return {
|
|
239
239
|
content: [
|
|
240
240
|
{
|
|
@@ -254,7 +254,7 @@ export function createMcpServer() {
|
|
|
254
254
|
/**
|
|
255
255
|
* Tool: Check Account Balance
|
|
256
256
|
*/
|
|
257
|
-
tool('lumenkey_check_balance', 'Query current LumenKey account credits balance (available credits, reserved credits, and updatedAt timestamp)', {}, async () => {
|
|
257
|
+
tool('lumenkey_check_balance', ui('Query current LumenKey account credits balance (available credits, reserved credits, and updatedAt timestamp)', '查询光钥账户的可用算力点、冻结算力点和更新时间。'), {}, async () => {
|
|
258
258
|
try {
|
|
259
259
|
const balance = await client.getBalance();
|
|
260
260
|
return {
|
|
@@ -276,7 +276,7 @@ export function createMcpServer() {
|
|
|
276
276
|
/**
|
|
277
277
|
* Tool: Chat Completion & Reasoning
|
|
278
278
|
*/
|
|
279
|
-
tool('lumenkey_chat', 'Run billable LLM inference. Every successful call may incur credits; reuse idempotencyKey only for an identical request.', {
|
|
279
|
+
tool('lumenkey_chat', ui('Run billable LLM inference. Every successful call may incur credits; reuse idempotencyKey only for an identical request.', '发起计费文本推理;成功调用可能消耗算力点,仅为同一次相同请求复用幂等键。'), {
|
|
280
280
|
modelId: z.string().default('qwen3.7-flash').describe('Model ID (e.g. qwen3.7-flash, qwen3.8-max, grok-4.6)'),
|
|
281
281
|
prompt: requiredPrompt('User message/prompt to send to the model'),
|
|
282
282
|
systemPrompt: z.string().optional().describe('Optional system instruction'),
|
|
@@ -316,7 +316,7 @@ export function createMcpServer() {
|
|
|
316
316
|
};
|
|
317
317
|
}
|
|
318
318
|
});
|
|
319
|
-
tool('lumenkey_explain_model', 'Explain one model: its parameters, which are required, and which values are allowed.', {
|
|
319
|
+
tool('lumenkey_explain_model', ui('Explain one model: its parameters, which are required, and which values are allowed.', '说明指定模型的参数、必填字段与允许的值。'), {
|
|
320
320
|
modelId: z.string(),
|
|
321
321
|
}, async ({ modelId }) => {
|
|
322
322
|
try {
|
|
@@ -329,19 +329,19 @@ export function createMcpServer() {
|
|
|
329
329
|
return { isError: true, content: [{ type: 'text', text: errorText(err) }] };
|
|
330
330
|
}
|
|
331
331
|
});
|
|
332
|
-
tool('lumenkey_tasks_progress', 'Read one existing generation job', {
|
|
332
|
+
tool('lumenkey_tasks_progress', ui('Read one existing generation job', '读取一条已有生成任务的进度。'), {
|
|
333
333
|
jobId: z.string(),
|
|
334
334
|
}, async ({ jobId }) => {
|
|
335
335
|
try {
|
|
336
336
|
const detail = await client.getJob(jobId);
|
|
337
|
-
assertJobResult(detail,
|
|
337
|
+
assertJobResult(detail, detail.status === 'succeeded');
|
|
338
338
|
return { content: [{ type: 'text', text: JSON.stringify(detail) }] };
|
|
339
339
|
}
|
|
340
340
|
catch (err) {
|
|
341
341
|
return { isError: true, content: [{ type: 'text', text: errorText(err) }] };
|
|
342
342
|
}
|
|
343
343
|
});
|
|
344
|
-
tool('lumenkey_tasks_wait', 'Wait for an existing job without creating one', {
|
|
344
|
+
tool('lumenkey_tasks_wait', ui('Wait for an existing job without creating one', '等待已有生成任务,不创建新任务。'), {
|
|
345
345
|
jobId: z.string(),
|
|
346
346
|
intervalMs: z.number().nonnegative().finite().max(2_147_483_647).optional(),
|
|
347
347
|
timeoutMs: z.number().nonnegative().finite().optional(),
|
|
@@ -355,9 +355,9 @@ export function createMcpServer() {
|
|
|
355
355
|
return { isError: true, content: [{ type: 'text', text: errorText(err) }] };
|
|
356
356
|
}
|
|
357
357
|
});
|
|
358
|
-
tool('lumenkey_tasks_cancel', 'Request cancellation with yes: true. Cancellation is not a refund; held credits are released or charged only when gateway settlement completes.', {
|
|
358
|
+
tool('lumenkey_tasks_cancel', ui('Request cancellation with yes: true. Cancellation is not a refund; held credits are released or charged only when gateway settlement completes.', '取消已有任务必须传 yes: true。取消不等于退款;冻结算力点是否释放或扣除由网关最终结算决定。'), {
|
|
359
359
|
jobId: z.string(),
|
|
360
|
-
yes: z.boolean(),
|
|
360
|
+
yes: z.boolean({ required_error: ui('Cancellation requires yes: true.', '取消任务必须传入 yes: true。'), invalid_type_error: ui('Cancellation requires yes: true.', '取消任务必须传入 yes: true。') }),
|
|
361
361
|
}, async ({ jobId, yes }) => {
|
|
362
362
|
try {
|
|
363
363
|
if (yes !== true)
|