@renxqoo/renx-code 0.0.4 → 0.0.5

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.
Files changed (209) hide show
  1. package/bin/renx.cjs +16 -0
  2. package/package.json +2 -45
  3. package/src/agent/runtime/runtime.context-usage.test.ts +4 -5
  4. package/src/agent/runtime/runtime.error-handling.test.ts +4 -5
  5. package/src/agent/runtime/runtime.test.ts +7 -4
  6. package/src/agent/runtime/runtime.ts +3 -9
  7. package/src/agent/runtime/runtime.usage-forwarding.test.ts +4 -5
  8. package/src/agent/runtime/source-modules.test.ts +16 -35
  9. package/src/agent/runtime/source-modules.ts +17 -0
  10. package/vendor/agent-root/src/agent/ENTERPRISE_ACCEPTANCE_CHECKLIST.md +95 -0
  11. package/vendor/agent-root/src/agent/ENTERPRISE_REALTIME.html +1345 -0
  12. package/vendor/agent-root/src/agent/ENTERPRISE_REALTIME.md +1353 -0
  13. package/vendor/agent-root/src/agent/ERROR_CONTRACT.md +60 -0
  14. package/vendor/agent-root/src/agent/TEST_COVERAGE_ANALYSIS.md +278 -0
  15. package/vendor/agent-root/src/agent/__test__/error-contract.test.ts +72 -0
  16. package/vendor/agent-root/src/agent/__test__/types.test.ts +137 -0
  17. package/vendor/agent-root/src/agent/agent/__test__/abort-runtime.test.ts +83 -0
  18. package/vendor/agent-root/src/agent/agent/__test__/callback-safety.test.ts +34 -0
  19. package/vendor/agent-root/src/agent/agent/__test__/compaction.test.ts +323 -0
  20. package/vendor/agent-root/src/agent/agent/__test__/concurrency.test.ts +290 -0
  21. package/vendor/agent-root/src/agent/agent/__test__/error-normalizer.test.ts +377 -0
  22. package/vendor/agent-root/src/agent/agent/__test__/error.test.ts +212 -0
  23. package/vendor/agent-root/src/agent/agent/__test__/fault-injection.test.ts +295 -0
  24. package/vendor/agent-root/src/agent/agent/__test__/index.test.ts +3607 -0
  25. package/vendor/agent-root/src/agent/agent/__test__/logger.test.ts +35 -0
  26. package/vendor/agent-root/src/agent/agent/__test__/message-utils.test.ts +517 -0
  27. package/vendor/agent-root/src/agent/agent/__test__/telemetry.test.ts +97 -0
  28. package/vendor/agent-root/src/agent/agent/__test__/timeout-budget.test.ts +479 -0
  29. package/vendor/agent-root/src/agent/agent/__test__/tool-call-merge.test.ts +80 -0
  30. package/vendor/agent-root/src/agent/agent/__test__/tool-execution-ledger.test.ts +76 -0
  31. package/vendor/agent-root/src/agent/agent/__test__/write-buffer.test.ts +173 -0
  32. package/vendor/agent-root/src/agent/agent/__test__/write-file-session.test.ts +109 -0
  33. package/vendor/agent-root/src/agent/agent/abort-runtime.ts +71 -0
  34. package/vendor/agent-root/src/agent/agent/callback-safety.ts +33 -0
  35. package/vendor/agent-root/src/agent/agent/compaction.ts +291 -0
  36. package/vendor/agent-root/src/agent/agent/concurrency.ts +103 -0
  37. package/vendor/agent-root/src/agent/agent/error-normalizer.ts +190 -0
  38. package/vendor/agent-root/src/agent/agent/error.ts +198 -0
  39. package/vendor/agent-root/src/agent/agent/index.ts +1772 -0
  40. package/vendor/agent-root/src/agent/agent/logger.ts +65 -0
  41. package/vendor/agent-root/src/agent/agent/message-utils.ts +101 -0
  42. package/vendor/agent-root/src/agent/agent/stream-events.ts +61 -0
  43. package/vendor/agent-root/src/agent/agent/telemetry.ts +123 -0
  44. package/vendor/agent-root/src/agent/agent/timeout-budget.ts +227 -0
  45. package/vendor/agent-root/src/agent/agent/tool-call-merge.ts +111 -0
  46. package/vendor/agent-root/src/agent/agent/tool-execution-ledger.ts +164 -0
  47. package/vendor/agent-root/src/agent/agent/write-buffer.ts +188 -0
  48. package/vendor/agent-root/src/agent/agent/write-file-session.ts +238 -0
  49. package/vendor/agent-root/src/agent/app/__test__/agent-app-service.test.ts +1053 -0
  50. package/vendor/agent-root/src/agent/app/__test__/minimal-agent-application.test.ts +158 -0
  51. package/vendor/agent-root/src/agent/app/__test__/sqlite-agent-app-store.test.ts +437 -0
  52. package/vendor/agent-root/src/agent/app/agent-app-service.ts +748 -0
  53. package/vendor/agent-root/src/agent/app/contracts.ts +109 -0
  54. package/vendor/agent-root/src/agent/app/index.ts +5 -0
  55. package/vendor/agent-root/src/agent/app/minimal-agent-application.ts +151 -0
  56. package/vendor/agent-root/src/agent/app/ports.ts +72 -0
  57. package/vendor/agent-root/src/agent/app/sqlite-agent-app-store.ts +1182 -0
  58. package/vendor/agent-root/src/agent/app/sqlite-client.ts +177 -0
  59. package/vendor/agent-root/src/agent/docs/cli-app-layer/00-README.md +36 -0
  60. package/vendor/agent-root/src/agent/docs/cli-app-layer/01-scope-and-goals.md +33 -0
  61. package/vendor/agent-root/src/agent/docs/cli-app-layer/02-architecture-overview.md +40 -0
  62. package/vendor/agent-root/src/agent/docs/cli-app-layer/03-domain-model-and-contracts.md +91 -0
  63. package/vendor/agent-root/src/agent/docs/cli-app-layer/04-ports-and-interfaces.md +116 -0
  64. package/vendor/agent-root/src/agent/docs/cli-app-layer/05-run-orchestration-and-state-machine.md +52 -0
  65. package/vendor/agent-root/src/agent/docs/cli-app-layer/06-cli-commands-and-ux.md +53 -0
  66. package/vendor/agent-root/src/agent/docs/cli-app-layer/07-storage-design-local.md +52 -0
  67. package/vendor/agent-root/src/agent/docs/cli-app-layer/08-error-and-observability.md +40 -0
  68. package/vendor/agent-root/src/agent/docs/cli-app-layer/09-security-and-policy-boundary.md +19 -0
  69. package/vendor/agent-root/src/agent/docs/cli-app-layer/10-test-plan-and-acceptance.md +28 -0
  70. package/vendor/agent-root/src/agent/docs/cli-app-layer/11-implementation-phases.md +26 -0
  71. package/vendor/agent-root/src/agent/docs/cli-app-layer/12-open-questions-and-risks.md +30 -0
  72. package/vendor/agent-root/src/agent/docs/cli-app-layer/13-sqlite-schema-fields-and-rationale.md +567 -0
  73. package/vendor/agent-root/src/agent/docs/cli-app-layer/14-project-flow-mermaid.md +583 -0
  74. package/vendor/agent-root/src/agent/docs/cli-app-layer/15-openclaw-style-project-blueprint.md +972 -0
  75. package/vendor/agent-root/src/agent/error-contract.ts +154 -0
  76. package/vendor/agent-root/src/agent/prompts/system.ts +246 -0
  77. package/vendor/agent-root/src/agent/prompts/system1.ts +208 -0
  78. package/vendor/agent-root/src/agent/storage/__test__/file-history-store.test.ts +98 -0
  79. package/vendor/agent-root/src/agent/storage/file-history-store.ts +313 -0
  80. package/vendor/agent-root/src/agent/storage/file-storage-config.ts +94 -0
  81. package/vendor/agent-root/src/agent/storage/file-system.ts +31 -0
  82. package/vendor/agent-root/src/agent/storage/file-write-service.ts +21 -0
  83. package/vendor/agent-root/src/agent/tool/__test__/base-tool.test.ts +413 -0
  84. package/vendor/agent-root/src/agent/tool/__test__/bash-policy.test.ts +356 -0
  85. package/vendor/agent-root/src/agent/tool/__test__/bash.mocked-coverage.test.ts +375 -0
  86. package/vendor/agent-root/src/agent/tool/__test__/bash.test.ts +372 -0
  87. package/vendor/agent-root/src/agent/tool/__test__/error.test.ts +108 -0
  88. package/vendor/agent-root/src/agent/tool/__test__/file-edit-tool.test.ts +258 -0
  89. package/vendor/agent-root/src/agent/tool/__test__/file-history-tools.test.ts +121 -0
  90. package/vendor/agent-root/src/agent/tool/__test__/file-read-tool.test.ts +210 -0
  91. package/vendor/agent-root/src/agent/tool/__test__/glob.test.ts +139 -0
  92. package/vendor/agent-root/src/agent/tool/__test__/grep.mocked-coverage.test.ts +456 -0
  93. package/vendor/agent-root/src/agent/tool/__test__/grep.test.ts +192 -0
  94. package/vendor/agent-root/src/agent/tool/__test__/lsp.test.ts +300 -0
  95. package/vendor/agent-root/src/agent/tool/__test__/outside-workspace-confirmation.test.ts +214 -0
  96. package/vendor/agent-root/src/agent/tool/__test__/path-security.test.ts +336 -0
  97. package/vendor/agent-root/src/agent/tool/__test__/skill-loader.test.ts +494 -0
  98. package/vendor/agent-root/src/agent/tool/__test__/skill-parser.test.ts +543 -0
  99. package/vendor/agent-root/src/agent/tool/__test__/skill-tool.test.ts +172 -0
  100. package/vendor/agent-root/src/agent/tool/__test__/task-concurrency-and-version.test.ts +116 -0
  101. package/vendor/agent-root/src/agent/tool/__test__/task-create-get-list-update.test.ts +267 -0
  102. package/vendor/agent-root/src/agent/tool/__test__/task-create.test.ts +519 -0
  103. package/vendor/agent-root/src/agent/tool/__test__/task-errors.test.ts +225 -0
  104. package/vendor/agent-root/src/agent/tool/__test__/task-output-blocking.test.ts +223 -0
  105. package/vendor/agent-root/src/agent/tool/__test__/task-output.test.ts +184 -0
  106. package/vendor/agent-root/src/agent/tool/__test__/task-parent-abort.test.ts +287 -0
  107. package/vendor/agent-root/src/agent/tool/__test__/task-real-runner-adapter.test.ts +190 -0
  108. package/vendor/agent-root/src/agent/tool/__test__/task-run-lifecycle.test.ts +352 -0
  109. package/vendor/agent-root/src/agent/tool/__test__/task-store-runner-branches.test.ts +395 -0
  110. package/vendor/agent-root/src/agent/tool/__test__/task-store.test.ts +391 -0
  111. package/vendor/agent-root/src/agent/tool/__test__/task-subagent-config-integration.test.ts +176 -0
  112. package/vendor/agent-root/src/agent/tool/__test__/task-subagent-config.test.ts +68 -0
  113. package/vendor/agent-root/src/agent/tool/__test__/task-tools-core-edges.test.ts +630 -0
  114. package/vendor/agent-root/src/agent/tool/__test__/task-tools-runtime-edges.test.ts +732 -0
  115. package/vendor/agent-root/src/agent/tool/__test__/task-types.test.ts +494 -0
  116. package/vendor/agent-root/src/agent/tool/__test__/task-utils-branches.test.ts +175 -0
  117. package/vendor/agent-root/src/agent/tool/__test__/tool-manager.test.ts +505 -0
  118. package/vendor/agent-root/src/agent/tool/__test__/types.test.ts +55 -0
  119. package/vendor/agent-root/src/agent/tool/__test__/web-fetch.test.ts +244 -0
  120. package/vendor/agent-root/src/agent/tool/__test__/web-search.test.ts +290 -0
  121. package/vendor/agent-root/src/agent/tool/__test__/write-file.test.ts +368 -0
  122. package/vendor/agent-root/src/agent/tool/base-tool.ts +345 -0
  123. package/vendor/agent-root/src/agent/tool/bash-policy.ts +636 -0
  124. package/vendor/agent-root/src/agent/tool/bash.ts +688 -0
  125. package/vendor/agent-root/src/agent/tool/error.ts +131 -0
  126. package/vendor/agent-root/src/agent/tool/file-edit-tool.ts +264 -0
  127. package/vendor/agent-root/src/agent/tool/file-history-list.ts +103 -0
  128. package/vendor/agent-root/src/agent/tool/file-history-restore.ts +149 -0
  129. package/vendor/agent-root/src/agent/tool/file-read-tool.ts +211 -0
  130. package/vendor/agent-root/src/agent/tool/glob.ts +171 -0
  131. package/vendor/agent-root/src/agent/tool/grep.ts +496 -0
  132. package/vendor/agent-root/src/agent/tool/lsp.ts +481 -0
  133. package/vendor/agent-root/src/agent/tool/path-security.ts +117 -0
  134. package/vendor/agent-root/src/agent/tool/search/common.ts +153 -0
  135. package/vendor/agent-root/src/agent/tool/skill/index.ts +13 -0
  136. package/vendor/agent-root/src/agent/tool/skill/loader.ts +229 -0
  137. package/vendor/agent-root/src/agent/tool/skill/parser.ts +124 -0
  138. package/vendor/agent-root/src/agent/tool/skill/types.ts +27 -0
  139. package/vendor/agent-root/src/agent/tool/skill-tool.ts +143 -0
  140. package/vendor/agent-root/src/agent/tool/task-create.ts +186 -0
  141. package/vendor/agent-root/src/agent/tool/task-errors.ts +42 -0
  142. package/vendor/agent-root/src/agent/tool/task-get.ts +116 -0
  143. package/vendor/agent-root/src/agent/tool/task-graph.ts +78 -0
  144. package/vendor/agent-root/src/agent/tool/task-list.ts +141 -0
  145. package/vendor/agent-root/src/agent/tool/task-mock-runner-adapter.ts +232 -0
  146. package/vendor/agent-root/src/agent/tool/task-output.ts +223 -0
  147. package/vendor/agent-root/src/agent/tool/task-parent-abort.ts +115 -0
  148. package/vendor/agent-root/src/agent/tool/task-real-runner-adapter.ts +336 -0
  149. package/vendor/agent-root/src/agent/tool/task-runner-adapter.ts +55 -0
  150. package/vendor/agent-root/src/agent/tool/task-stop.ts +187 -0
  151. package/vendor/agent-root/src/agent/tool/task-store.ts +217 -0
  152. package/vendor/agent-root/src/agent/tool/task-subagent-config.ts +149 -0
  153. package/vendor/agent-root/src/agent/tool/task-types.ts +264 -0
  154. package/vendor/agent-root/src/agent/tool/task-update.ts +315 -0
  155. package/vendor/agent-root/src/agent/tool/task.ts +209 -0
  156. package/vendor/agent-root/src/agent/tool/tool-manager.ts +362 -0
  157. package/vendor/agent-root/src/agent/tool/tool-prompts.ts +242 -0
  158. package/vendor/agent-root/src/agent/tool/types.ts +116 -0
  159. package/vendor/agent-root/src/agent/tool/web-fetch.ts +227 -0
  160. package/vendor/agent-root/src/agent/tool/web-search.ts +208 -0
  161. package/vendor/agent-root/src/agent/tool/write-file.ts +497 -0
  162. package/vendor/agent-root/src/agent/types.ts +232 -0
  163. package/vendor/agent-root/src/agent/utils/__tests__/index.test.ts +18 -0
  164. package/vendor/agent-root/src/agent/utils/__tests__/message-utils.test.ts +610 -0
  165. package/vendor/agent-root/src/agent/utils/__tests__/message.test.ts +223 -0
  166. package/vendor/agent-root/src/agent/utils/__tests__/token.test.ts +42 -0
  167. package/vendor/agent-root/src/agent/utils/index.ts +16 -0
  168. package/vendor/agent-root/src/agent/utils/message.ts +171 -0
  169. package/vendor/agent-root/src/agent/utils/token.ts +28 -0
  170. package/vendor/agent-root/src/config/__tests__/load-config-to-env.test.ts +129 -0
  171. package/vendor/agent-root/src/config/__tests__/loader.test.ts +247 -0
  172. package/vendor/agent-root/src/config/__tests__/runtime.test.ts +88 -0
  173. package/vendor/agent-root/src/config/index.ts +54 -0
  174. package/vendor/agent-root/src/config/loader.ts +431 -0
  175. package/vendor/agent-root/src/config/paths.ts +30 -0
  176. package/vendor/agent-root/src/config/runtime.ts +163 -0
  177. package/vendor/agent-root/src/config/types.ts +70 -0
  178. package/vendor/agent-root/src/logger/index.ts +57 -0
  179. package/vendor/agent-root/src/logger/logger.ts +819 -0
  180. package/vendor/agent-root/src/logger/types.ts +150 -0
  181. package/vendor/agent-root/src/providers/__tests__/errors.test.ts +441 -0
  182. package/vendor/agent-root/src/providers/__tests__/index.test.ts +16 -0
  183. package/vendor/agent-root/src/providers/__tests__/openai-compatible.options.test.ts +318 -0
  184. package/vendor/agent-root/src/providers/__tests__/openai-compatible.test.ts +600 -0
  185. package/vendor/agent-root/src/providers/__tests__/registry.test.ts +449 -0
  186. package/vendor/agent-root/src/providers/__tests__/responses-adapter.test.ts +298 -0
  187. package/vendor/agent-root/src/providers/adapters/__tests__/anthropic.test.ts +354 -0
  188. package/vendor/agent-root/src/providers/adapters/__tests__/kimi.test.ts +58 -0
  189. package/vendor/agent-root/src/providers/adapters/__tests__/standard.test.ts +261 -0
  190. package/vendor/agent-root/src/providers/adapters/anthropic.ts +572 -0
  191. package/vendor/agent-root/src/providers/adapters/base.ts +131 -0
  192. package/vendor/agent-root/src/providers/adapters/kimi.ts +48 -0
  193. package/vendor/agent-root/src/providers/adapters/responses.ts +732 -0
  194. package/vendor/agent-root/src/providers/adapters/standard.ts +120 -0
  195. package/vendor/agent-root/src/providers/http/__tests__/client.timeout.test.ts +313 -0
  196. package/vendor/agent-root/src/providers/http/client.ts +289 -0
  197. package/vendor/agent-root/src/providers/http/stream-parser.ts +109 -0
  198. package/vendor/agent-root/src/providers/index.ts +76 -0
  199. package/vendor/agent-root/src/providers/kimi-headers.ts +177 -0
  200. package/vendor/agent-root/src/providers/openai-compatible.ts +387 -0
  201. package/vendor/agent-root/src/providers/registry/model-config.ts +230 -0
  202. package/vendor/agent-root/src/providers/registry/provider-factory.ts +123 -0
  203. package/vendor/agent-root/src/providers/registry.ts +135 -0
  204. package/vendor/agent-root/src/providers/types/api.ts +284 -0
  205. package/vendor/agent-root/src/providers/types/config.ts +58 -0
  206. package/vendor/agent-root/src/providers/types/errors.ts +323 -0
  207. package/vendor/agent-root/src/providers/types/index.ts +72 -0
  208. package/vendor/agent-root/src/providers/types/provider.ts +45 -0
  209. package/vendor/agent-root/src/providers/types/registry.ts +88 -0
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Provider 错误类型定义
3
+ *
4
+ * 统一的错误类型定义,包括基础错误、可重试错误、永久性错误等
5
+ */
6
+
7
+ // =============================================================================
8
+ // 错误基类
9
+ // =============================================================================
10
+
11
+ export class LLMError extends Error {
12
+ constructor(
13
+ message: string,
14
+ public code?: string
15
+ ) {
16
+ super(message);
17
+ this.name = 'LLMError';
18
+ }
19
+ }
20
+
21
+ // =============================================================================
22
+ // 指数退避配置
23
+ // =============================================================================
24
+
25
+ /**
26
+ * 指数退避配置
27
+ */
28
+ export interface BackoffConfig {
29
+ /** 初始延迟(毫秒) */
30
+ initialDelayMs?: number;
31
+ /** 最大延迟(毫秒) */
32
+ maxDelayMs?: number;
33
+ /** 退避基数(默认 2) */
34
+ base?: number;
35
+ /** 是否启用 jitter(默认 true) */
36
+ jitter?: boolean;
37
+ /** 最大重试次数(用于计算最大退避) */
38
+ maxRetries?: number;
39
+ }
40
+
41
+ /**
42
+ * 默认退避配置
43
+ */
44
+ export const DEFAULT_BACKOFF_CONFIG: Required<BackoffConfig> = {
45
+ initialDelayMs: 1000,
46
+ maxDelayMs: 60000,
47
+ base: 2,
48
+ jitter: true,
49
+ maxRetries: 20,
50
+ };
51
+
52
+ /**
53
+ * 计算带 jitter 的指数退避延迟
54
+ *
55
+ * 算法:min(maxDelay, initialDelay * (base ^ retryCount)) * random(0.5, 1.5)
56
+ * - 优先使用 retryAfter(服务器指定)
57
+ * - 支持指数增长
58
+ * - 添加 jitter 避免雷鸣羊群问题
59
+ */
60
+ export function calculateBackoff(
61
+ retryCount: number,
62
+ retryAfterMs?: number,
63
+ config: BackoffConfig = {}
64
+ ): number {
65
+ const cfg = { ...DEFAULT_BACKOFF_CONFIG, ...config };
66
+
67
+ // 1. 如果服务器指定了 retry-after,优先使用(但不超过最大延迟)
68
+ if (typeof retryAfterMs === 'number' && retryAfterMs > 0) {
69
+ return Math.min(retryAfterMs, cfg.maxDelayMs);
70
+ }
71
+
72
+ // 2. 计算指数退避
73
+ const exponentialDelay = cfg.initialDelayMs * Math.pow(cfg.base, retryCount);
74
+ const cappedDelay = Math.min(exponentialDelay, cfg.maxDelayMs);
75
+
76
+ // 3. 添加 jitter(如果启用)
77
+ if (cfg.jitter) {
78
+ // 随机因子范围: [0.5, 1.5],即 ±50%
79
+ const jitterFactor = 0.5 + Math.random();
80
+ return Math.floor(cappedDelay * jitterFactor);
81
+ }
82
+
83
+ return cappedDelay;
84
+ }
85
+
86
+ // =============================================================================
87
+ // 可重试错误
88
+ // =============================================================================
89
+
90
+ export class LLMRetryableError extends LLMError {
91
+ /**
92
+ * @deprecated 请使用 calculateBackoff() 函数
93
+ */
94
+ getBackoff(retryCount: number): number {
95
+ return calculateBackoff(retryCount, this.retryAfter);
96
+ }
97
+
98
+ constructor(
99
+ message: string,
100
+ public retryAfter?: number,
101
+ code?: string
102
+ ) {
103
+ super(message, code);
104
+ this.name = 'LLMRetryableError';
105
+ }
106
+ }
107
+
108
+ export class LLMRateLimitError extends LLMRetryableError {
109
+ constructor(message: string, retryAfter?: number) {
110
+ super(message, retryAfter, 'RATE_LIMIT');
111
+ this.name = 'LLMRateLimitError';
112
+ }
113
+ }
114
+
115
+ // =============================================================================
116
+ // 永久性错误
117
+ // =============================================================================
118
+
119
+ export class LLMPermanentError extends LLMError {
120
+ constructor(
121
+ message: string,
122
+ public statusCode?: number,
123
+ code?: string
124
+ ) {
125
+ super(message, code);
126
+ this.name = 'LLMPermanentError';
127
+ }
128
+ }
129
+
130
+ export class LLMAuthError extends LLMPermanentError {
131
+ constructor(message: string) {
132
+ super(message, 401, 'AUTH_FAILED');
133
+ this.name = 'LLMAuthError';
134
+ }
135
+ }
136
+
137
+ export class LLMNotFoundError extends LLMPermanentError {
138
+ constructor(
139
+ message: string,
140
+ public resourceType?: 'model' | 'endpoint' | 'resource'
141
+ ) {
142
+ super(message, 404, 'NOT_FOUND');
143
+ this.name = 'LLMNotFoundError';
144
+ }
145
+ }
146
+
147
+ export class LLMBadRequestError extends LLMPermanentError {
148
+ constructor(
149
+ message: string,
150
+ public validationErrors?: Record<string, string>
151
+ ) {
152
+ super(message, 400, 'BAD_REQUEST');
153
+ this.name = 'LLMBadRequestError';
154
+ }
155
+ }
156
+
157
+ // =============================================================================
158
+ // 取消错误
159
+ // =============================================================================
160
+
161
+ export class LLMAbortedError extends LLMError {
162
+ constructor(message: string = 'Request was cancelled') {
163
+ super(message, 'ABORTED');
164
+ this.name = 'LLMAbortedError';
165
+ }
166
+ }
167
+
168
+ // =============================================================================
169
+ // 工具函数
170
+ // =============================================================================
171
+
172
+ export type AbortReasonCategory = 'idle_timeout' | 'timeout' | 'abort' | 'unknown';
173
+
174
+ export const PERMANENT_STREAM_ERROR_CODE_MARKERS = [
175
+ 'invalid_request',
176
+ 'bad_request',
177
+ 'authentication',
178
+ 'permission',
179
+ 'forbidden',
180
+ 'not_found',
181
+ 'unsupported',
182
+ 'context_length',
183
+ 'content_filter',
184
+ 'safety',
185
+ 'invalid_parameter_error',
186
+ ] as const;
187
+
188
+ export const PERMANENT_STREAM_ERROR_MESSAGE_PATTERNS: ReadonlyArray<RegExp> = [
189
+ /\binvalid[\s_-]?request\b/i,
190
+ /\bbad[\s_-]?request\b/i,
191
+ /\bauthentication\b/i,
192
+ /\bunauthorized\b/i,
193
+ /\bpermission\b/i,
194
+ /\bforbidden\b/i,
195
+ /\bnot[\s_-]?found\b/i,
196
+ /\bunsupported\b/i,
197
+ /\bcontext[\s_-]?length\b/i,
198
+ /\bcontent[\s_-]?filter\b/i,
199
+ /\bsafety\b/i,
200
+ /\binvalid[\s_-]?parameter\b/i,
201
+ ];
202
+
203
+ export function abortReasonToText(reason: unknown): string {
204
+ if (reason instanceof Error) {
205
+ return `${reason.name} ${reason.message}`.trim();
206
+ }
207
+ if (typeof reason === 'string') {
208
+ return reason.trim();
209
+ }
210
+ return '';
211
+ }
212
+
213
+ export function isIdleTimeoutReasonText(reasonText: string): boolean {
214
+ const signature = reasonText.toLowerCase();
215
+ return (
216
+ signature.includes('idle timeout') ||
217
+ signature.includes('idletimeout') ||
218
+ signature.includes('idle_timeout')
219
+ );
220
+ }
221
+
222
+ export function isTimeoutReasonText(reasonText: string): boolean {
223
+ const signature = reasonText.toLowerCase();
224
+ return (
225
+ signature.includes('timeout') ||
226
+ signature.includes('timed out') ||
227
+ signature.includes('time out') ||
228
+ signature.includes('signal timed out')
229
+ );
230
+ }
231
+
232
+ export function classifyAbortReason(reason: unknown): AbortReasonCategory {
233
+ const reasonText = abortReasonToText(reason);
234
+ if (!reasonText) {
235
+ return 'unknown';
236
+ }
237
+
238
+ if (isIdleTimeoutReasonText(reasonText)) {
239
+ return 'idle_timeout';
240
+ }
241
+
242
+ if (isTimeoutReasonText(reasonText)) {
243
+ return 'timeout';
244
+ }
245
+
246
+ const signature = reasonText.toLowerCase();
247
+ if (signature.includes('abort') || signature.includes('cancel')) {
248
+ return 'abort';
249
+ }
250
+
251
+ return 'unknown';
252
+ }
253
+
254
+ export function isPermanentStreamChunkError(code?: string, message?: string): boolean {
255
+ const normalizedCode = typeof code === 'string' ? code.toLowerCase() : '';
256
+ if (normalizedCode) {
257
+ const matchedByCode = PERMANENT_STREAM_ERROR_CODE_MARKERS.some((marker) =>
258
+ normalizedCode.includes(marker)
259
+ );
260
+ if (matchedByCode) {
261
+ return true;
262
+ }
263
+ }
264
+
265
+ const normalizedMessage = typeof message === 'string' ? message : '';
266
+ if (!normalizedMessage) {
267
+ return false;
268
+ }
269
+
270
+ return PERMANENT_STREAM_ERROR_MESSAGE_PATTERNS.some((pattern) => pattern.test(normalizedMessage));
271
+ }
272
+
273
+ export function createErrorFromStatus(
274
+ status: number,
275
+ statusText: string,
276
+ errorText: string,
277
+ retryAfterMs?: number
278
+ ): LLMError {
279
+ let details = errorText;
280
+ try {
281
+ const parsed = JSON.parse(errorText);
282
+ details = parsed.error?.message || errorText;
283
+ } catch {
284
+ // 使用原始文本
285
+ }
286
+
287
+ const message = `${status} ${statusText}${details ? ` - ${details}` : ''}`;
288
+
289
+ switch (status) {
290
+ case 401:
291
+ case 403:
292
+ return new LLMAuthError(message);
293
+ case 404:
294
+ return new LLMNotFoundError(message, 'resource');
295
+ case 408:
296
+ return new LLMRetryableError(message, retryAfterMs, 'TIMEOUT');
297
+ case 429:
298
+ return new LLMRateLimitError(message, retryAfterMs);
299
+ case 400:
300
+ return new LLMBadRequestError(message);
301
+ case 501:
302
+ return new LLMPermanentError(message, 501, 'NOT_IMPLEMENTED');
303
+ case 500:
304
+ case 502:
305
+ case 503:
306
+ case 504:
307
+ return new LLMRetryableError(message, retryAfterMs, `SERVER_${status}`);
308
+ default:
309
+ return new LLMError(message, `HTTP_${status}`);
310
+ }
311
+ }
312
+
313
+ export function isRetryableError(error: unknown): error is LLMRetryableError {
314
+ return error instanceof LLMRetryableError;
315
+ }
316
+
317
+ export function isPermanentError(error: unknown): error is LLMPermanentError {
318
+ return error instanceof LLMPermanentError;
319
+ }
320
+
321
+ export function isAbortedError(error: unknown): error is LLMAbortedError {
322
+ return error instanceof LLMAbortedError;
323
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Types 统一导出
3
+ *
4
+ * 统一导出所有类型定义,提供单一的导入入口
5
+ */
6
+
7
+ // API 相关类型
8
+ export type {
9
+ ToolCall,
10
+ Role,
11
+ TextContentPart,
12
+ ImageUrlContentPart,
13
+ InputAudioContentPart,
14
+ InputVideoContentPart,
15
+ FileContentPart,
16
+ InputContentPart,
17
+ MessageContent,
18
+ Usage,
19
+ StreamOptions,
20
+ BaseLLMMessage,
21
+ LLMResponseMessage,
22
+ LLMRequestMessage,
23
+ FinishReason,
24
+ LLMResponse,
25
+ StreamChunkError,
26
+ Chunk,
27
+ StreamCallback,
28
+ Tool,
29
+ LLMGenerateOptions,
30
+ LLMRequest,
31
+ AnthropicStreamEvent,
32
+ } from './api';
33
+
34
+ // 配置相关类型
35
+ export type {
36
+ BaseAPIConfig,
37
+ BaseProviderConfig,
38
+ OpenAICompatibleConfig,
39
+ ProviderLogger,
40
+ } from './config';
41
+
42
+ // Provider 相关类型
43
+ export { LLMProvider } from './provider';
44
+
45
+ // 错误类型
46
+ export {
47
+ PERMANENT_STREAM_ERROR_CODE_MARKERS,
48
+ PERMANENT_STREAM_ERROR_MESSAGE_PATTERNS,
49
+ isPermanentStreamChunkError,
50
+ abortReasonToText,
51
+ isIdleTimeoutReasonText,
52
+ isTimeoutReasonText,
53
+ classifyAbortReason,
54
+ LLMError,
55
+ LLMRetryableError,
56
+ LLMRateLimitError,
57
+ LLMPermanentError,
58
+ LLMAuthError,
59
+ LLMNotFoundError,
60
+ LLMBadRequestError,
61
+ LLMAbortedError,
62
+ createErrorFromStatus,
63
+ isRetryableError,
64
+ isPermanentError,
65
+ isAbortedError,
66
+ calculateBackoff,
67
+ DEFAULT_BACKOFF_CONFIG,
68
+ } from './errors';
69
+ export type { BackoffConfig } from './errors';
70
+
71
+ // Registry 相关类型
72
+ export type { ProviderType, ModelId, ModelConfig } from './registry';
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Provider 接口类型定义
3
+ *
4
+ * Provider 相关的接口和类型定义
5
+ */
6
+
7
+ import { BaseProviderConfig } from './config';
8
+ import { Chunk, LLMGenerateOptions, LLMRequestMessage, LLMResponse } from './api';
9
+
10
+ /**
11
+ * Provider 抽象基类
12
+ */
13
+ export abstract class LLMProvider {
14
+ config: BaseProviderConfig;
15
+
16
+ protected constructor(config: BaseProviderConfig) {
17
+ this.config = config;
18
+ }
19
+
20
+ /**
21
+ * 从提供商生成非流式响应
22
+ * @param messages 对话消息列表
23
+ * @param options 可选参数
24
+ * @returns LLM 响应
25
+ */
26
+ abstract generate(
27
+ messages: LLMRequestMessage[],
28
+ options?: LLMGenerateOptions
29
+ ): Promise<LLMResponse>;
30
+
31
+ /**
32
+ * 从提供商生成流式响应
33
+ * @param messages 对话消息列表
34
+ * @param options 可选参数
35
+ * @returns 流式 chunk 生成器
36
+ */
37
+ abstract generateStream(
38
+ messages: LLMRequestMessage[],
39
+ options?: LLMGenerateOptions
40
+ ): AsyncGenerator<Chunk>;
41
+
42
+ abstract getTimeTimeout(): number;
43
+ abstract getLLMMaxTokens(): number;
44
+ abstract getMaxOutputTokens(): number;
45
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Registry 相关类型定义
3
+ *
4
+ * Provider Registry 相关的类型定义
5
+ */
6
+
7
+ /**
8
+ * Provider 厂商类型
9
+ */
10
+ export type ProviderType =
11
+ | 'anthropic'
12
+ | 'kimi'
13
+ | 'deepseek'
14
+ | 'glm'
15
+ | 'minimax'
16
+ | 'openai'
17
+ | 'openrouter'
18
+ | 'qwen';
19
+
20
+ /**
21
+ * 模型唯一标识
22
+ */
23
+ export type ModelId =
24
+ // Anthropic 系列
25
+ | 'claude-opus-4.6'
26
+ // GLM 系列
27
+ | 'glm-4.7'
28
+ // MiniMax 系列
29
+ | 'minimax-2.5'
30
+ // Kimi 系列
31
+ | 'kimi-k2.5'
32
+ // DeepSeek 系列
33
+ // | 'deepseek-chat'
34
+ // GLM 5.0 系列
35
+ | 'glm-5'
36
+ // Qwen 系列
37
+ | 'qwen3.5-plus'
38
+ | 'qwen-kimi-k2.5'
39
+ | 'qwen-glm-5'
40
+ | 'qwen3.5-max'
41
+ | 'qwen-minimax-2.5'
42
+ | 'deepseek-reasoner'
43
+ | 'gpt-5.3'
44
+ | 'gpt-5.4'
45
+ | 'openrouter/hunter-alpha';
46
+
47
+ /**
48
+ * 模型配置
49
+ */
50
+ export interface ModelConfig {
51
+ /** 模型唯一标识 */
52
+ id: ModelId;
53
+ /** 所属厂商 */
54
+ provider: ProviderType;
55
+ /** 显示名称 */
56
+ name: string;
57
+ /** API 端点路径 */
58
+ endpointPath: string;
59
+ /** API Key 环境变量名 */
60
+ envApiKey: string;
61
+ /** Base URL 环境变量名 */
62
+ envBaseURL: string;
63
+ /** API 基础 URL */
64
+ baseURL: string;
65
+ /** API 模型名称 */
66
+ model: string;
67
+ /** 最大输出 token 数 */
68
+ max_tokens: number;
69
+ /** 最大上下文 token 数 */
70
+ LLMMAX_TOKENS: number;
71
+ /** 支持的特性 */
72
+ features: string[];
73
+ /** 多模态输入能力 */
74
+ modalities?: {
75
+ image?: boolean;
76
+ audio?: boolean;
77
+ video?: boolean;
78
+ };
79
+ /** API 密钥(可选) */
80
+ apiKey?: string;
81
+ /** 温度(可选) */
82
+ temperature?: number;
83
+ /** 默认工具流式输出(可选) */
84
+ tool_stream?: boolean;
85
+ thinking?: boolean;
86
+ timeout?: number;
87
+ model_reasoning_effort?: 'low' | 'medium' | 'high';
88
+ }