@acosmi/sdk-ts 2.10.0 → 2.11.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/CHANGELOG.md +15 -0
- package/dist/browser/index.mjs +41 -4
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.mjs +41 -4
- package/dist/index.mjs.map +1 -1
- package/dist/node/adapters/anthropic.cjs.map +1 -1
- package/dist/node/adapters/anthropic.d.cts +1 -1
- package/dist/node/adapters/anthropic.d.ts +1 -1
- package/dist/node/adapters/anthropic.mjs.map +1 -1
- package/dist/node/adapters/openai.cjs.map +1 -1
- package/dist/node/adapters/openai.d.cts +2 -2
- package/dist/node/adapters/openai.d.ts +2 -2
- package/dist/node/adapters/openai.mjs.map +1 -1
- package/dist/node/{index-CsDRFZIj.d.cts → index-RoHp_9g8.d.cts} +14 -1
- package/dist/node/{index-CsDRFZIj.d.ts → index-RoHp_9g8.d.ts} +14 -1
- package/dist/node/index.cjs +42 -3
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +39 -5
- package/dist/node/index.d.ts +39 -5
- package/dist/node/index.mjs +41 -4
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/{openai-BdpEzATI.d.ts → openai-DnFW4Ryl.d.ts} +1 -1
- package/dist/node/{openai-Z2NDbHhT.d.cts → openai-Dpl3GSEJ.d.cts} +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,21 @@ All notable changes to `@acosmi/sdk-ts` will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.11.0] - 2026-07-09 — 窗口限额 (WINDOW_LIMIT_EXCEEDED) 结构化承接
|
|
9
|
+
|
|
10
|
+
后端新增 5 小时 / 7 天滚动窗口 credit 限额:hold 失败返回 429 + 顶层 `errorCode:"WINDOW_LIMIT_EXCEEDED"` + `windowKind` / `windowResetAt`(`/chat` OpenAI 网关扁平形态与 `/anthropic` Anthropic 形态皆有),agent-run SSE error 事件与额度总览同步扩展。SDK 把机器码与窗口字段结构化透传,并顺带修复 `/chat` 网关错误形态 message 一直解析为空的历史缺口。
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`HTTPError.errorCode` / `windowKind` / `windowResetAt`** — 后端业务机器码(响应体顶层 `errorCode`)与窗口限额字段(档位 `'FIVE_HOUR' | 'WEEKLY'`、预计恢复时间 ISO-8601 UTC)结构化上提;`parseHTTPError` 在任一错误形态下透传。构造 options 加性扩展,既有调用零改动。
|
|
15
|
+
- **`isWindowLimitError(err)` / `isWindowLimitStreamError(err)`** — 窗口限额识别:前者是 `HTTPError` type guard(结构化 `errorCode` 优先,message/body 含 `WINDOW_LIMIT_EXCEEDED` 子串防御兜底,覆盖后端部署版本错位期);后者面向流式产物(`StreamError` / `AgentRunStreamError` / 裸 error payload,`code === 'window_limit_exceeded'` 优先 + 同样的子串兜底)。普通 429 rate limit 不误判。
|
|
16
|
+
- **`AgentRunErrorPayload.windowKind` / `windowResetAt`** — agent-run SSE error 事件可选窗口字段,事件解析(`normalizeError` 白名单 pick)透传,camelCase 契约主拼写 + snake_case 兼容兜底。
|
|
17
|
+
- **`QuotaSummary.windowLimits`(`WindowLimitStatus[]`)** — 额度总览新增滚动窗口限额状态:`{ kind: 'FIVE_HOUR' | 'WEEKLY', limitCredits, usedCredits, resetAt?: string | null }`;后端未启用窗口限额时字段整个缺失,向后兼容。
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **`/chat` OpenAI 网关错误形态 message 丢失** — `parseHTTPError` 此前只解析嵌套 `{error:{type,message}}` 形态;网关顶层扁平形态 `{code:429,message:"..."}` 的 message 恒为空、机器码只存活在 body 原串。现补顶层 `message` 解析(该形态无 error.type 来源,`type` 留空),非 JSON body / 空 body 行为逐字节不变。
|
|
22
|
+
|
|
8
23
|
## [2.10.0] - 2026-06-20 — 多模态向量 / 重排序 (qwen3-vl-embedding / qwen3-vl-rerank)
|
|
9
24
|
|
|
10
25
|
向量与重排序端点扩展为**多模态**(text / image / **video**),对接 DashScope `qwen3-vl-embedding`(多模态向量端点)与 `qwen3-vl-rerank`(原生 rerank 端点 + 多模态 content)。面向自建搜索引擎的图文 / 视频检索场景。计费口径不变(`total_tokens` 套 input 费率),上游模型名仍由管理员后台自填,不在 SDK / 网关硬编码。
|
package/dist/browser/index.mjs
CHANGED
|
@@ -91,7 +91,21 @@ var init_types = __esm({
|
|
|
91
91
|
});
|
|
92
92
|
|
|
93
93
|
// src/shared/errors.ts
|
|
94
|
-
|
|
94
|
+
function isWindowLimitError(err) {
|
|
95
|
+
if (!(err instanceof HTTPError)) return false;
|
|
96
|
+
if (err.errorCode === windowLimitErrorCode) return true;
|
|
97
|
+
return err.message.includes(windowLimitErrorCode) || err.body.includes(windowLimitErrorCode);
|
|
98
|
+
}
|
|
99
|
+
function isWindowLimitStreamError(err) {
|
|
100
|
+
if (err == null || typeof err !== "object") return false;
|
|
101
|
+
const e = err;
|
|
102
|
+
if (e.code === windowLimitStreamCode) return true;
|
|
103
|
+
for (const field of [e.message, e.userMessage, e.rawError]) {
|
|
104
|
+
if (typeof field === "string" && field.includes(windowLimitErrorCode)) return true;
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
var RateLimitError, BusinessError, OrderTerminalError, ModelNotFoundError, HTTPError, NetworkError, StreamError, windowLimitErrorCode, windowLimitStreamCode;
|
|
95
109
|
var init_errors = __esm({
|
|
96
110
|
"src/shared/errors.ts"() {
|
|
97
111
|
RateLimitError = class extends Error {
|
|
@@ -138,6 +152,12 @@ var init_errors = __esm({
|
|
|
138
152
|
retryAfter;
|
|
139
153
|
/** 原始响应体 (截断到 maxErrorBodySize) */
|
|
140
154
|
body;
|
|
155
|
+
/** 后端业务机器码 (响应体顶层 errorCode, e.g. "WINDOW_LIMIT_EXCEEDED"); 缺失为 undefined */
|
|
156
|
+
errorCode;
|
|
157
|
+
/** 窗口限额场景: 触发的滚动窗口档位 (FIVE_HOUR = 5 小时 / WEEKLY = 7 天); 缺失为 undefined */
|
|
158
|
+
windowKind;
|
|
159
|
+
/** 窗口限额场景: 预计恢复时间 (ISO-8601 UTC); 缺失为 undefined */
|
|
160
|
+
windowResetAt;
|
|
141
161
|
constructor(statusCode, opts = {}) {
|
|
142
162
|
let msg;
|
|
143
163
|
if (opts.type) {
|
|
@@ -155,6 +175,9 @@ var init_errors = __esm({
|
|
|
155
175
|
this.type = opts.type ?? "";
|
|
156
176
|
this.retryAfter = opts.retryAfter ?? 0;
|
|
157
177
|
this.body = opts.body ?? "";
|
|
178
|
+
this.errorCode = opts.errorCode;
|
|
179
|
+
this.windowKind = opts.windowKind;
|
|
180
|
+
this.windowResetAt = opts.windowResetAt;
|
|
158
181
|
}
|
|
159
182
|
};
|
|
160
183
|
NetworkError = class extends Error {
|
|
@@ -210,6 +233,8 @@ var init_errors = __esm({
|
|
|
210
233
|
this.retryable = retryable;
|
|
211
234
|
}
|
|
212
235
|
};
|
|
236
|
+
windowLimitErrorCode = "WINDOW_LIMIT_EXCEEDED";
|
|
237
|
+
windowLimitStreamCode = "window_limit_exceeded";
|
|
213
238
|
}
|
|
214
239
|
});
|
|
215
240
|
|
|
@@ -1930,19 +1955,28 @@ function parseHTTPErrorWithHeader(statusCode, body, header) {
|
|
|
1930
1955
|
}
|
|
1931
1956
|
let type = "";
|
|
1932
1957
|
let message = "";
|
|
1958
|
+
let errorCode;
|
|
1959
|
+
let windowKind;
|
|
1960
|
+
let windowResetAt;
|
|
1933
1961
|
try {
|
|
1934
1962
|
const obj = JSON.parse(bodyStr);
|
|
1935
1963
|
if (obj && typeof obj === "object") {
|
|
1936
|
-
const
|
|
1964
|
+
const top = obj;
|
|
1965
|
+
const errObj = top.error;
|
|
1937
1966
|
if (errObj && typeof errObj === "object") {
|
|
1938
1967
|
const e = errObj;
|
|
1939
1968
|
if (typeof e.message === "string") message = e.message;
|
|
1940
1969
|
if (typeof e.type === "string") type = e.type;
|
|
1970
|
+
} else if (typeof top.message === "string") {
|
|
1971
|
+
message = top.message;
|
|
1941
1972
|
}
|
|
1973
|
+
if (typeof top.errorCode === "string") errorCode = top.errorCode;
|
|
1974
|
+
if (top.windowKind === "FIVE_HOUR" || top.windowKind === "WEEKLY") windowKind = top.windowKind;
|
|
1975
|
+
if (typeof top.windowResetAt === "string") windowResetAt = top.windowResetAt;
|
|
1942
1976
|
}
|
|
1943
1977
|
} catch {
|
|
1944
1978
|
}
|
|
1945
|
-
return new HTTPError(statusCode, { type, message, retryAfter, body: bodyStr });
|
|
1979
|
+
return new HTTPError(statusCode, { type, message, retryAfter, body: bodyStr, errorCode, windowKind, windowResetAt });
|
|
1946
1980
|
}
|
|
1947
1981
|
function classifyTransport(op, urlStr, err) {
|
|
1948
1982
|
const ne = new NetworkError(op, urlStr, err);
|
|
@@ -5636,6 +5670,9 @@ function normalizeError(value) {
|
|
|
5636
5670
|
message: stringField(value, "message", "error") || "agent run failed",
|
|
5637
5671
|
stage: optionalStringField(value, "stage"),
|
|
5638
5672
|
retryable: typeof value.retryable === "boolean" ? value.retryable : void 0,
|
|
5673
|
+
// 窗口限额扩展 (code="window_limit_exceeded"): 契约 wire 为 camelCase, 蛇形兼容兜底。
|
|
5674
|
+
windowKind: optionalStringField(value, "windowKind", "window_kind"),
|
|
5675
|
+
windowResetAt: optionalStringField(value, "windowResetAt", "window_reset_at"),
|
|
5639
5676
|
raw: value
|
|
5640
5677
|
};
|
|
5641
5678
|
}
|
|
@@ -7553,6 +7590,6 @@ function brandCredential(c) {
|
|
|
7553
7590
|
return c;
|
|
7554
7591
|
}
|
|
7555
7592
|
|
|
7556
|
-
export { AGENT_RUN_META_TITLE, AGENT_RUN_META_WORKSPACE, ALL_INTEGRATION_STATUS, ALL_PLATFORMS, ALL_REGIONS, AgentRunStreamError, AgentRunsClient, AnthropicAdapter, AudienceEnum, BillingModeEnum, BucketClassCommercial, BucketClassGeneric, BusinessError, ChatBridgeClient, Client, ComplianceClient, CompliancePollError, CrabCodeByokClient, DEFAULT_API_TIMEOUT_MS, DEFAULT_GATEWAY_BASE_URL, LocalStorageTokenStore as DefaultBrowserTokenStore, DefaultRetryPolicy, ErrAuthDenied, ErrBillingCallbackCannotCommit, ErrBillingCommitRequiresLocalVerify, ErrBillingS2sForbidden, ErrBrowserOpen, ErrComplianceStepUpRequired, ErrDiscovery, ErrEnvelopeGateClosed, ErrOAuthCORSBlocked, ErrProviderNotConfigured, ErrProviderUnknownNoRetry, ErrRefreshProxyFailed, ErrRegistration, ErrSSLProxy, ErrSealApprovalContractHashMismatch, ErrSealApprovalExpired, ErrSealApprovalLocationMismatch, ErrSealApprovalNonceUsed, ErrSealApprovalNotApproved, ErrSealApprovalSealMismatch, ErrSealApprovalTransactorMismatch, ErrSealUseAlreadyConsumed, ErrStateMismatch, ErrTimeout, ErrTokenExchange, ErrTokenExpired, EventAuthURL, EventComplete, EventError, FileTokenStore, FilterStatusAdminBypass, FilterStatusDisabledByFlag, FilterStatusFallbackMissingUser, FilterStatusFallbackNoBuckets, FilterStatusFallbackTkdistError, FilterStatusFallbackTkdistSkew, FilterStatusInternalBypass, FilterStatusOK, FilterStatusUnknown, HTTPError, IdempotencyKeyHeader, InMemoryTokenStore, LocalStorageTokenStore, ModelNotFoundError, NetworkError, OAuthTokenEndpointError, OpenAIAdapter, OrderTerminalError, ProductFamilyEnum, ProviderFormat, RETRY_ADVICE_REASONS, RateLimitError, RegionScopeEnum, ScopeAI, ScopeAccount, ScopeChatBridge, ScopeChatBridgeRead, ScopeChatBridgeRotate, ScopeChatBridgeWrite, ScopeComplianceContractSigningRead, ScopeComplianceContractSigningWrite, ScopeComplianceContractTemplateRead, ScopeComplianceContractTemplateWrite, ScopeComplianceEvidenceRead, ScopeComplianceEvidenceWrite, ScopeComplianceReportsPublish, ScopeComplianceReportsRead, ScopeComplianceReportsWrite, ScopeComplianceSealApprovalApprove, ScopeComplianceSealApprovalRequest, ScopeComplianceSealManage, ScopeComplianceSealUseExecute, ScopeComplianceTimestampIssue, ScopeComplianceTimestampVerify, ScopeEntitlements, ScopeModels, ScopeModelsChat, ScopeProfile, ScopeRemoteControl, ScopeRemoteControlAgentRun, ScopeRemoteControlPermissionResponse, ScopeRemoteControlSessionControl, ScopeSkillStore, ScopeSkills, ScopeTokenPackages, ScopeTools, ScopeToolsExecute, ScopeWallet, ScopeWalletReadonly, ServerToolTypeWebSearch, StreamError, ThinkingHigh, ThinkingHighMinMaxTokens, ThinkingMax, ThinkingMaxFallbackMaxTokens, ThinkingOff, allScopes, anthropicResponseTextContent, anthropicResponseThinkingContent, anthropicResponseToolUseBlocks, apiResponseBusinessError, apiResponseGetMessage, asCredentialRef, authorize, bucketInfoIsCommercial, bucketRowIsCommercial, buildBetas, chatBridgeScopes, classifyComplianceError, commerceScopes, completeWebAuthorizationRequest, complianceErrorToRetryAdvice, complianceScopes, computeBackoff, createWebAuthorizationRequest, defaultRetryable, defaultSafeToRetry, discover, discoverWebOAuthMetadata, discoverWithProfile, effectivePolicy, exchangeCode, extractAnthropicBlockMeta, fileLockDefaults, findDesktopVisualUnderstandingModel, findFirstModelByInputModality, generateState, getAdapter, getAdapterForModel, isBillingConfirmable, isChannelInboundEvent, isComplianceBusinessError, isComplianceTerminalError, isIntegrationStatus, isInvalidGrantError, isPlatform, isRegion, isSSECommentLine, isSSLError, isTerminalRemoteEvent, isValidTokenSet, maxEndUserIdLength, modelScopes, modelSupportsImageInput, modelSupportsInputModality, newFileTokenStore, newThinkingConfig, newTokenSet, newWebSearchTool, normalizeGatewayBaseURL, normalizeOverrideBaseURL, parseNotificationEvent, parseRemoteControlEvent, parseSettlement, parseSourcesEvent, refreshToken, register, registerWebOAuthClient, remoteControlScopes, retryReasonForComplianceKey, retryReasonForOAuthError, revokeToken, sanitize_exports as sanitize, skillScopes, tokenSetIsExpired, uniqueMerge, validateEndUserId };
|
|
7593
|
+
export { AGENT_RUN_META_TITLE, AGENT_RUN_META_WORKSPACE, ALL_INTEGRATION_STATUS, ALL_PLATFORMS, ALL_REGIONS, AgentRunStreamError, AgentRunsClient, AnthropicAdapter, AudienceEnum, BillingModeEnum, BucketClassCommercial, BucketClassGeneric, BusinessError, ChatBridgeClient, Client, ComplianceClient, CompliancePollError, CrabCodeByokClient, DEFAULT_API_TIMEOUT_MS, DEFAULT_GATEWAY_BASE_URL, LocalStorageTokenStore as DefaultBrowserTokenStore, DefaultRetryPolicy, ErrAuthDenied, ErrBillingCallbackCannotCommit, ErrBillingCommitRequiresLocalVerify, ErrBillingS2sForbidden, ErrBrowserOpen, ErrComplianceStepUpRequired, ErrDiscovery, ErrEnvelopeGateClosed, ErrOAuthCORSBlocked, ErrProviderNotConfigured, ErrProviderUnknownNoRetry, ErrRefreshProxyFailed, ErrRegistration, ErrSSLProxy, ErrSealApprovalContractHashMismatch, ErrSealApprovalExpired, ErrSealApprovalLocationMismatch, ErrSealApprovalNonceUsed, ErrSealApprovalNotApproved, ErrSealApprovalSealMismatch, ErrSealApprovalTransactorMismatch, ErrSealUseAlreadyConsumed, ErrStateMismatch, ErrTimeout, ErrTokenExchange, ErrTokenExpired, EventAuthURL, EventComplete, EventError, FileTokenStore, FilterStatusAdminBypass, FilterStatusDisabledByFlag, FilterStatusFallbackMissingUser, FilterStatusFallbackNoBuckets, FilterStatusFallbackTkdistError, FilterStatusFallbackTkdistSkew, FilterStatusInternalBypass, FilterStatusOK, FilterStatusUnknown, HTTPError, IdempotencyKeyHeader, InMemoryTokenStore, LocalStorageTokenStore, ModelNotFoundError, NetworkError, OAuthTokenEndpointError, OpenAIAdapter, OrderTerminalError, ProductFamilyEnum, ProviderFormat, RETRY_ADVICE_REASONS, RateLimitError, RegionScopeEnum, ScopeAI, ScopeAccount, ScopeChatBridge, ScopeChatBridgeRead, ScopeChatBridgeRotate, ScopeChatBridgeWrite, ScopeComplianceContractSigningRead, ScopeComplianceContractSigningWrite, ScopeComplianceContractTemplateRead, ScopeComplianceContractTemplateWrite, ScopeComplianceEvidenceRead, ScopeComplianceEvidenceWrite, ScopeComplianceReportsPublish, ScopeComplianceReportsRead, ScopeComplianceReportsWrite, ScopeComplianceSealApprovalApprove, ScopeComplianceSealApprovalRequest, ScopeComplianceSealManage, ScopeComplianceSealUseExecute, ScopeComplianceTimestampIssue, ScopeComplianceTimestampVerify, ScopeEntitlements, ScopeModels, ScopeModelsChat, ScopeProfile, ScopeRemoteControl, ScopeRemoteControlAgentRun, ScopeRemoteControlPermissionResponse, ScopeRemoteControlSessionControl, ScopeSkillStore, ScopeSkills, ScopeTokenPackages, ScopeTools, ScopeToolsExecute, ScopeWallet, ScopeWalletReadonly, ServerToolTypeWebSearch, StreamError, ThinkingHigh, ThinkingHighMinMaxTokens, ThinkingMax, ThinkingMaxFallbackMaxTokens, ThinkingOff, allScopes, anthropicResponseTextContent, anthropicResponseThinkingContent, anthropicResponseToolUseBlocks, apiResponseBusinessError, apiResponseGetMessage, asCredentialRef, authorize, bucketInfoIsCommercial, bucketRowIsCommercial, buildBetas, chatBridgeScopes, classifyComplianceError, commerceScopes, completeWebAuthorizationRequest, complianceErrorToRetryAdvice, complianceScopes, computeBackoff, createWebAuthorizationRequest, defaultRetryable, defaultSafeToRetry, discover, discoverWebOAuthMetadata, discoverWithProfile, effectivePolicy, exchangeCode, extractAnthropicBlockMeta, fileLockDefaults, findDesktopVisualUnderstandingModel, findFirstModelByInputModality, generateState, getAdapter, getAdapterForModel, isBillingConfirmable, isChannelInboundEvent, isComplianceBusinessError, isComplianceTerminalError, isIntegrationStatus, isInvalidGrantError, isPlatform, isRegion, isSSECommentLine, isSSLError, isTerminalRemoteEvent, isValidTokenSet, isWindowLimitError, isWindowLimitStreamError, maxEndUserIdLength, modelScopes, modelSupportsImageInput, modelSupportsInputModality, newFileTokenStore, newThinkingConfig, newTokenSet, newWebSearchTool, normalizeGatewayBaseURL, normalizeOverrideBaseURL, parseNotificationEvent, parseRemoteControlEvent, parseSettlement, parseSourcesEvent, refreshToken, register, registerWebOAuthClient, remoteControlScopes, retryReasonForComplianceKey, retryReasonForOAuthError, revokeToken, sanitize_exports as sanitize, skillScopes, tokenSetIsExpired, uniqueMerge, validateEndUserId };
|
|
7557
7594
|
//# sourceMappingURL=index.mjs.map
|
|
7558
7595
|
//# sourceMappingURL=index.mjs.map
|