@acosmi/sdk-ts 2.11.0 → 2.12.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 +14 -0
- package/dist/browser/index.mjs +51 -2
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.mjs +51 -2
- 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-RoHp_9g8.d.cts → index-9IuEE_GY.d.cts} +10 -0
- package/dist/node/{index-RoHp_9g8.d.ts → index-9IuEE_GY.d.ts} +10 -0
- package/dist/node/index.cjs +52 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +54 -5
- package/dist/node/index.d.ts +54 -5
- package/dist/node/index.mjs +51 -2
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/{openai-DnFW4Ryl.d.ts → openai-71wGCPIj.d.ts} +1 -1
- package/dist/node/{openai-Dpl3GSEJ.d.cts → openai-DaLO4XPf.d.cts} +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@ 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.12.0] - 2026-07-11 — 5 小时窗口软限额 (windowOverridable + 继续开关)
|
|
9
|
+
|
|
10
|
+
后端把 5 小时窗口改为**软限额**:默认开启(到达 5h 仅提醒、自动继续消耗周配额),用户可关成严格模式(到达即等待恢复);周窗维持硬限。429 响应体加性新增 `windowOverridable`(5h 严格模式=true,可续跑;周窗/显式禁止/灰度关=false,硬等待),额度总览加 `windowFiveHourContinueEnabled` 与 `WindowLimitStatus.overridable`,并新增设置「继续」开关的客户端方法。全部加性,向后兼容——旧字段/旧调用零改动,老网关不返回新字段时按硬等待处理。
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`HTTPError.windowOverridable`** — 窗口限额 429 可否被用户「继续」开关豁免;`parseHTTPError` 解析顶层 `windowOverridable`。缺失(老网关)为 `undefined`,按硬等待处理。构造 options 加性扩展。
|
|
15
|
+
- **`isContinuableWindowLimitError(err)`** — `HTTPError` type guard:`isWindowLimitError(err) && err.windowOverridable === true`,即 5 小时软限额严格模式(可通过 `setWindowContinuePreference(true)` 后重发放行)。周窗/显式禁止/灰度关/老网关均为 false。
|
|
16
|
+
- **`getWindowLimitStreamDetails(err)`** — 从流式窗口限额产物(`StreamError` / `AgentRunStreamError` / 裸 payload)结构化读取 `{ windowKind, windowResetAt, windowOverridable }`;非窗口限额返回 null。
|
|
17
|
+
- **`AgentRunErrorPayload.windowOverridable`** — agent-run SSE error 事件可选可豁免性字段(`omitempty`,false/缺失=硬等待)。
|
|
18
|
+
- **`QuotaSummary.windowFiveHourContinueEnabled`(`boolean`)** — 用户 5h「继续」开关现值(true=软限额/默认;false=严格模式);仅后端启用窗口限额时下发。
|
|
19
|
+
- **`WindowLimitStatus.overridable`(`boolean`)** — 该窗此刻可否被开关豁免(5h 软限=true,周窗恒 false)。
|
|
20
|
+
- **`Client.setWindowContinuePreference(enabled, { source?, signal? })`** — 设置当前用户 5h 软限额「继续」开关(`POST /entitlements/window-continue-pref`);`userId` 由网关从鉴权态解析,客户端只传 `enabled` + 可选 `source`(web / crabcode-gui / crabcode-tui / dialog 审计用)。用于个人中心开关与 429 严格模式续跑。
|
|
21
|
+
|
|
8
22
|
## [2.11.0] - 2026-07-09 — 窗口限额 (WINDOW_LIMIT_EXCEEDED) 结构化承接
|
|
9
23
|
|
|
10
24
|
后端新增 5 小时 / 7 天滚动窗口 credit 限额:hold 失败返回 429 + 顶层 `errorCode:"WINDOW_LIMIT_EXCEEDED"` + `windowKind` / `windowResetAt`(`/chat` OpenAI 网关扁平形态与 `/anthropic` Anthropic 形态皆有),agent-run SSE error 事件与额度总览同步扩展。SDK 把机器码与窗口字段结构化透传,并顺带修复 `/chat` 网关错误形态 message 一直解析为空的历史缺口。
|
package/dist/browser/index.mjs
CHANGED
|
@@ -105,6 +105,19 @@ function isWindowLimitStreamError(err) {
|
|
|
105
105
|
}
|
|
106
106
|
return false;
|
|
107
107
|
}
|
|
108
|
+
function isContinuableWindowLimitError(err) {
|
|
109
|
+
return isWindowLimitError(err) && err.windowOverridable === true;
|
|
110
|
+
}
|
|
111
|
+
function getWindowLimitStreamDetails(err) {
|
|
112
|
+
if (!isWindowLimitStreamError(err)) return null;
|
|
113
|
+
const e = err ?? {};
|
|
114
|
+
const kind = e.windowKind === "FIVE_HOUR" || e.windowKind === "WEEKLY" ? e.windowKind : void 0;
|
|
115
|
+
return {
|
|
116
|
+
windowKind: kind,
|
|
117
|
+
windowResetAt: typeof e.windowResetAt === "string" ? e.windowResetAt : void 0,
|
|
118
|
+
windowOverridable: typeof e.windowOverridable === "boolean" ? e.windowOverridable : void 0
|
|
119
|
+
};
|
|
120
|
+
}
|
|
108
121
|
var RateLimitError, BusinessError, OrderTerminalError, ModelNotFoundError, HTTPError, NetworkError, StreamError, windowLimitErrorCode, windowLimitStreamCode;
|
|
109
122
|
var init_errors = __esm({
|
|
110
123
|
"src/shared/errors.ts"() {
|
|
@@ -158,6 +171,12 @@ var init_errors = __esm({
|
|
|
158
171
|
windowKind;
|
|
159
172
|
/** 窗口限额场景: 预计恢复时间 (ISO-8601 UTC); 缺失为 undefined */
|
|
160
173
|
windowResetAt;
|
|
174
|
+
/**
|
|
175
|
+
* [W1 2026-07-11 软限额] 窗口限额场景: 该 429 可否被用户「继续」开关豁免 —
|
|
176
|
+
* true = 5 小时软限额严格模式 (客户端可提示「继续任务」以消耗周配额继续);
|
|
177
|
+
* false/缺失 = 周窗/显式禁止/灰度关 (硬等待, 无豁免路径, 老网关不返回时为 undefined)。
|
|
178
|
+
*/
|
|
179
|
+
windowOverridable;
|
|
161
180
|
constructor(statusCode, opts = {}) {
|
|
162
181
|
let msg;
|
|
163
182
|
if (opts.type) {
|
|
@@ -178,6 +197,7 @@ var init_errors = __esm({
|
|
|
178
197
|
this.errorCode = opts.errorCode;
|
|
179
198
|
this.windowKind = opts.windowKind;
|
|
180
199
|
this.windowResetAt = opts.windowResetAt;
|
|
200
|
+
this.windowOverridable = opts.windowOverridable;
|
|
181
201
|
}
|
|
182
202
|
};
|
|
183
203
|
NetworkError = class extends Error {
|
|
@@ -1958,6 +1978,7 @@ function parseHTTPErrorWithHeader(statusCode, body, header) {
|
|
|
1958
1978
|
let errorCode;
|
|
1959
1979
|
let windowKind;
|
|
1960
1980
|
let windowResetAt;
|
|
1981
|
+
let windowOverridable;
|
|
1961
1982
|
try {
|
|
1962
1983
|
const obj = JSON.parse(bodyStr);
|
|
1963
1984
|
if (obj && typeof obj === "object") {
|
|
@@ -1973,10 +1994,20 @@ function parseHTTPErrorWithHeader(statusCode, body, header) {
|
|
|
1973
1994
|
if (typeof top.errorCode === "string") errorCode = top.errorCode;
|
|
1974
1995
|
if (top.windowKind === "FIVE_HOUR" || top.windowKind === "WEEKLY") windowKind = top.windowKind;
|
|
1975
1996
|
if (typeof top.windowResetAt === "string") windowResetAt = top.windowResetAt;
|
|
1997
|
+
if (typeof top.windowOverridable === "boolean") windowOverridable = top.windowOverridable;
|
|
1976
1998
|
}
|
|
1977
1999
|
} catch {
|
|
1978
2000
|
}
|
|
1979
|
-
return new HTTPError(statusCode, {
|
|
2001
|
+
return new HTTPError(statusCode, {
|
|
2002
|
+
type,
|
|
2003
|
+
message,
|
|
2004
|
+
retryAfter,
|
|
2005
|
+
body: bodyStr,
|
|
2006
|
+
errorCode,
|
|
2007
|
+
windowKind,
|
|
2008
|
+
windowResetAt,
|
|
2009
|
+
windowOverridable
|
|
2010
|
+
});
|
|
1980
2011
|
}
|
|
1981
2012
|
function classifyTransport(op, urlStr, err) {
|
|
1982
2013
|
const ne = new NetworkError(op, urlStr, err);
|
|
@@ -2765,6 +2796,24 @@ var Client = class _Client {
|
|
|
2765
2796
|
);
|
|
2766
2797
|
return resp.data;
|
|
2767
2798
|
}
|
|
2799
|
+
/**
|
|
2800
|
+
* [W1 2026-07-11 软限额] 设置当前用户 5 小时窗口软限额「继续」开关 (v2.12+)。
|
|
2801
|
+
*
|
|
2802
|
+
* enabled=true = 软限额 (到达 5h 后继续消耗周配额, 默认); false = 严格模式 (到达即等待逐步恢复)。
|
|
2803
|
+
* userId 由网关从鉴权态解析 (客户端永不传), 故只需 enabled + 可选 source (审计: web /
|
|
2804
|
+
* crabcode-gui / crabcode-tui / dialog)。用于个人中心开关、429 严格模式「重新开启继续」续跑。
|
|
2805
|
+
*
|
|
2806
|
+
* @returns 网关回显的新状态 { enabled }。
|
|
2807
|
+
*/
|
|
2808
|
+
async setWindowContinuePreference(enabled, opts) {
|
|
2809
|
+
const resp = await this.doJSON(
|
|
2810
|
+
"POST",
|
|
2811
|
+
"/entitlements/window-continue-pref",
|
|
2812
|
+
{ enabled, source: opts?.source },
|
|
2813
|
+
opts?.signal
|
|
2814
|
+
);
|
|
2815
|
+
return { enabled: resp.data.enabled };
|
|
2816
|
+
}
|
|
2768
2817
|
/**
|
|
2769
2818
|
* 查询单个模型的能力矩阵
|
|
2770
2819
|
* 优先从 listModels 缓存读取, miss 时调用 listModels 刷新
|
|
@@ -7590,6 +7639,6 @@ function brandCredential(c) {
|
|
|
7590
7639
|
return c;
|
|
7591
7640
|
}
|
|
7592
7641
|
|
|
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 };
|
|
7642
|
+
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, getWindowLimitStreamDetails, isBillingConfirmable, isChannelInboundEvent, isComplianceBusinessError, isComplianceTerminalError, isContinuableWindowLimitError, 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 };
|
|
7594
7643
|
//# sourceMappingURL=index.mjs.map
|
|
7595
7644
|
//# sourceMappingURL=index.mjs.map
|