@huyooo/ai-chat-core 0.2.45 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/adapter/index.d.ts +11 -0
  2. package/dist/adapter/index.d.ts.map +1 -0
  3. package/dist/adapter/model-adapter.d.ts +25 -0
  4. package/dist/adapter/model-adapter.d.ts.map +1 -0
  5. package/dist/adapter/model-options.d.ts +53 -0
  6. package/dist/adapter/model-options.d.ts.map +1 -0
  7. package/dist/adapter/types.d.ts +28 -0
  8. package/dist/adapter/types.d.ts.map +1 -0
  9. package/dist/chat-runtime.d.ts +96 -0
  10. package/dist/chat-runtime.d.ts.map +1 -0
  11. package/dist/constants.d.ts +12 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/events.d.ts +605 -1
  14. package/dist/events.d.ts.map +1 -0
  15. package/dist/events.js +1 -1
  16. package/dist/extension/index.d.ts +9 -0
  17. package/dist/extension/index.d.ts.map +1 -0
  18. package/dist/extension/types.d.ts +46 -0
  19. package/dist/extension/types.d.ts.map +1 -0
  20. package/dist/families/index.d.ts +11 -0
  21. package/dist/families/index.d.ts.map +1 -0
  22. package/dist/families/presets.d.ts +31 -0
  23. package/dist/families/presets.d.ts.map +1 -0
  24. package/dist/families/resolver.d.ts +11 -0
  25. package/dist/families/resolver.d.ts.map +1 -0
  26. package/dist/families/types.d.ts +29 -0
  27. package/dist/families/types.d.ts.map +1 -0
  28. package/dist/governance/command-safety.d.ts +34 -0
  29. package/dist/governance/command-safety.d.ts.map +1 -0
  30. package/dist/governance/governance.d.ts +19 -0
  31. package/dist/governance/governance.d.ts.map +1 -0
  32. package/dist/governance/index.d.ts +12 -0
  33. package/dist/governance/index.d.ts.map +1 -0
  34. package/dist/governance/types.d.ts +29 -0
  35. package/dist/governance/types.d.ts.map +1 -0
  36. package/dist/index.d.ts +72 -804
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +51 -1
  39. package/dist/internal/management-args.d.ts +13 -0
  40. package/dist/internal/management-args.d.ts.map +1 -0
  41. package/dist/internal/management-results.d.ts +21 -0
  42. package/dist/internal/management-results.d.ts.map +1 -0
  43. package/dist/llm-config.d.ts +108 -0
  44. package/dist/llm-config.d.ts.map +1 -0
  45. package/dist/logger/core.d.ts +31 -0
  46. package/dist/logger/core.d.ts.map +1 -0
  47. package/dist/logger/index.d.ts +9 -0
  48. package/dist/logger/index.d.ts.map +1 -0
  49. package/dist/orchestrator/compression-handler.d.ts +29 -0
  50. package/dist/orchestrator/compression-handler.d.ts.map +1 -0
  51. package/dist/orchestrator/context-compressor.d.ts +51 -0
  52. package/dist/orchestrator/context-compressor.d.ts.map +1 -0
  53. package/dist/orchestrator/context-summarizer.d.ts +41 -0
  54. package/dist/orchestrator/context-summarizer.d.ts.map +1 -0
  55. package/dist/orchestrator/index.d.ts +12 -0
  56. package/dist/orchestrator/index.d.ts.map +1 -0
  57. package/dist/orchestrator/orchestrator.d.ts +46 -0
  58. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  59. package/dist/orchestrator/types.d.ts +58 -0
  60. package/dist/orchestrator/types.d.ts.map +1 -0
  61. package/dist/parts/index.d.ts +13 -0
  62. package/dist/parts/index.d.ts.map +1 -0
  63. package/dist/parts/registry.d.ts +11 -0
  64. package/dist/parts/registry.d.ts.map +1 -0
  65. package/dist/parts/summaries.d.ts +9 -0
  66. package/dist/parts/summaries.d.ts.map +1 -0
  67. package/dist/parts/types.d.ts +61 -0
  68. package/dist/parts/types.d.ts.map +1 -0
  69. package/dist/platform.d.ts +17 -0
  70. package/dist/platform.d.ts.map +1 -0
  71. package/dist/platform.js +1 -0
  72. package/dist/protocols/anthropic.d.ts +20 -0
  73. package/dist/protocols/anthropic.d.ts.map +1 -0
  74. package/dist/protocols/ark.d.ts +36 -0
  75. package/dist/protocols/ark.d.ts.map +1 -0
  76. package/dist/protocols/deepseek.d.ts +24 -0
  77. package/dist/protocols/deepseek.d.ts.map +1 -0
  78. package/dist/protocols/error-utils.d.ts +14 -0
  79. package/dist/protocols/error-utils.d.ts.map +1 -0
  80. package/dist/protocols/gemini.d.ts +24 -0
  81. package/dist/protocols/gemini.d.ts.map +1 -0
  82. package/dist/protocols/glm.d.ts +20 -0
  83. package/dist/protocols/glm.d.ts.map +1 -0
  84. package/dist/protocols/grok.d.ts +20 -0
  85. package/dist/protocols/grok.d.ts.map +1 -0
  86. package/dist/protocols/index.d.ts +31 -0
  87. package/dist/protocols/index.d.ts.map +1 -0
  88. package/dist/protocols/minimax.d.ts +38 -0
  89. package/dist/protocols/minimax.d.ts.map +1 -0
  90. package/dist/protocols/moonshot.d.ts +20 -0
  91. package/dist/protocols/moonshot.d.ts.map +1 -0
  92. package/dist/protocols/openai-sse.d.ts +33 -0
  93. package/dist/protocols/openai-sse.d.ts.map +1 -0
  94. package/dist/protocols/openai.d.ts +19 -0
  95. package/dist/protocols/openai.d.ts.map +1 -0
  96. package/dist/protocols/qwen.d.ts +26 -0
  97. package/dist/protocols/qwen.d.ts.map +1 -0
  98. package/dist/protocols/responses-sse.d.ts +30 -0
  99. package/dist/protocols/responses-sse.d.ts.map +1 -0
  100. package/dist/protocols/sse-reader.d.ts +23 -0
  101. package/dist/protocols/sse-reader.d.ts.map +1 -0
  102. package/dist/protocols/tool-arguments.d.ts +8 -0
  103. package/dist/protocols/tool-arguments.d.ts.map +1 -0
  104. package/dist/protocols/types.d.ts +148 -0
  105. package/dist/protocols/types.d.ts.map +1 -0
  106. package/dist/protocols/vercel-gateway.d.ts +15 -0
  107. package/dist/protocols/vercel-gateway.d.ts.map +1 -0
  108. package/dist/runtime.d.ts +151 -0
  109. package/dist/runtime.d.ts.map +1 -0
  110. package/dist/runtime.js +1 -0
  111. package/dist/skills/index.d.ts +14 -0
  112. package/dist/skills/index.d.ts.map +1 -0
  113. package/dist/skills/management/admin.d.ts +10 -0
  114. package/dist/skills/management/admin.d.ts.map +1 -0
  115. package/dist/skills/management/index.d.ts +11 -0
  116. package/dist/skills/management/index.d.ts.map +1 -0
  117. package/dist/skills/management/inputs.d.ts +44 -0
  118. package/dist/skills/management/inputs.d.ts.map +1 -0
  119. package/dist/skills/management/operations.d.ts +78 -0
  120. package/dist/skills/management/operations.d.ts.map +1 -0
  121. package/dist/skills/management/types.d.ts +70 -0
  122. package/dist/skills/management/types.d.ts.map +1 -0
  123. package/dist/skills/registry.d.ts +37 -0
  124. package/dist/skills/registry.d.ts.map +1 -0
  125. package/dist/skills/summaries.d.ts +9 -0
  126. package/dist/skills/summaries.d.ts.map +1 -0
  127. package/dist/skills/types.d.ts +61 -0
  128. package/dist/skills/types.d.ts.map +1 -0
  129. package/dist/test-utils/mock-sse.d.ts +13 -0
  130. package/dist/test-utils/mock-sse.d.ts.map +1 -0
  131. package/dist/tool-manager/define-tool.d.ts +35 -0
  132. package/dist/tool-manager/define-tool.d.ts.map +1 -0
  133. package/dist/tool-manager/formats.d.ts +46 -0
  134. package/dist/tool-manager/formats.d.ts.map +1 -0
  135. package/dist/tool-manager/identity.d.ts +18 -0
  136. package/dist/tool-manager/identity.d.ts.map +1 -0
  137. package/dist/tool-manager/in-process-provider.d.ts +15 -0
  138. package/dist/tool-manager/in-process-provider.d.ts.map +1 -0
  139. package/dist/tool-manager/index.d.ts +18 -0
  140. package/dist/tool-manager/index.d.ts.map +1 -0
  141. package/dist/tool-manager/manager.d.ts +18 -0
  142. package/dist/tool-manager/manager.d.ts.map +1 -0
  143. package/dist/tool-manager/mcp-provider.d.ts +21 -0
  144. package/dist/tool-manager/mcp-provider.d.ts.map +1 -0
  145. package/dist/tool-manager/summaries.d.ts +39 -0
  146. package/dist/tool-manager/summaries.d.ts.map +1 -0
  147. package/dist/tool-manager/types.d.ts +314 -0
  148. package/dist/tool-manager/types.d.ts.map +1 -0
  149. package/dist/types.d.ts +663 -0
  150. package/dist/types.d.ts.map +1 -0
  151. package/package.json +26 -15
  152. package/src/adapter/index.ts +25 -0
  153. package/src/adapter/model-adapter.ts +196 -0
  154. package/src/adapter/model-options.ts +143 -0
  155. package/src/adapter/types.ts +41 -0
  156. package/src/chat-runtime.ts +515 -0
  157. package/src/constants.ts +9 -102
  158. package/src/events.ts +364 -150
  159. package/src/extension/index.ts +24 -0
  160. package/src/extension/types.ts +49 -0
  161. package/src/families/index.ts +28 -0
  162. package/src/families/presets.ts +124 -0
  163. package/src/families/resolver.ts +22 -0
  164. package/src/families/types.ts +55 -0
  165. package/src/governance/command-safety.ts +224 -0
  166. package/src/governance/governance.ts +125 -0
  167. package/src/governance/index.ts +38 -0
  168. package/src/governance/types.ts +44 -0
  169. package/src/index.ts +250 -145
  170. package/src/internal/management-args.ts +39 -0
  171. package/src/internal/management-results.ts +60 -0
  172. package/src/llm-config.ts +137 -0
  173. package/src/logger/core.ts +96 -0
  174. package/src/logger/index.ts +8 -0
  175. package/src/orchestrator/compression-handler.ts +137 -0
  176. package/src/{providers → orchestrator}/context-compressor.ts +79 -47
  177. package/src/orchestrator/context-summarizer.ts +123 -0
  178. package/src/orchestrator/index.ts +20 -0
  179. package/src/orchestrator/orchestrator.ts +1002 -0
  180. package/src/orchestrator/types.ts +70 -0
  181. package/src/parts/index.ts +20 -0
  182. package/src/parts/registry.ts +95 -0
  183. package/src/parts/summaries.ts +40 -0
  184. package/src/parts/types.ts +63 -0
  185. package/src/platform.ts +73 -0
  186. package/src/protocols/anthropic.ts +377 -0
  187. package/src/protocols/ark.ts +300 -0
  188. package/src/protocols/deepseek.ts +192 -0
  189. package/src/{providers/protocols → protocols}/error-utils.ts +17 -20
  190. package/src/protocols/gemini.ts +352 -0
  191. package/src/protocols/glm.ts +212 -0
  192. package/src/protocols/grok.ts +98 -0
  193. package/src/protocols/index.ts +48 -0
  194. package/src/protocols/minimax.ts +308 -0
  195. package/src/protocols/moonshot.ts +186 -0
  196. package/src/protocols/openai-sse.ts +156 -0
  197. package/src/protocols/openai.ts +97 -0
  198. package/src/protocols/qwen.ts +358 -0
  199. package/src/protocols/responses-sse.ts +224 -0
  200. package/src/protocols/sse-reader.ts +54 -0
  201. package/src/protocols/tool-arguments.ts +32 -0
  202. package/src/{providers/protocols → protocols}/types.ts +46 -37
  203. package/src/protocols/vercel-gateway.ts +391 -0
  204. package/src/runtime.ts +167 -0
  205. package/src/skills/index.ts +29 -0
  206. package/src/skills/management/admin.ts +170 -0
  207. package/src/skills/management/index.ts +27 -0
  208. package/src/skills/management/inputs.ts +79 -0
  209. package/src/skills/management/operations.ts +256 -0
  210. package/src/skills/management/types.ts +57 -0
  211. package/src/skills/registry.ts +120 -0
  212. package/src/skills/summaries.ts +48 -0
  213. package/src/skills/types.ts +65 -0
  214. package/src/test-utils/mock-sse.ts +3 -3
  215. package/src/tool-manager/define-tool.ts +201 -0
  216. package/src/tool-manager/formats.ts +146 -0
  217. package/src/tool-manager/identity.ts +80 -0
  218. package/src/tool-manager/in-process-provider.ts +164 -0
  219. package/src/tool-manager/index.ts +63 -0
  220. package/src/tool-manager/manager.ts +562 -0
  221. package/src/tool-manager/mcp-provider.ts +509 -0
  222. package/src/tool-manager/summaries.ts +136 -0
  223. package/src/tool-manager/types.ts +389 -0
  224. package/src/types.ts +750 -191
  225. package/dist/events-CU5D5ray.d.ts +0 -1128
  226. package/src/agent.ts +0 -409
  227. package/src/internal/update-plan.ts +0 -2
  228. package/src/internal/web-search.ts +0 -77
  229. package/src/mcp/client-manager.ts +0 -302
  230. package/src/mcp/index.ts +0 -2
  231. package/src/mcp/types.ts +0 -43
  232. package/src/providers/context-summarizer.ts +0 -70
  233. package/src/providers/index.ts +0 -125
  234. package/src/providers/model-registry.ts +0 -466
  235. package/src/providers/orchestrator.ts +0 -839
  236. package/src/providers/protocols/anthropic.ts +0 -406
  237. package/src/providers/protocols/ark.ts +0 -362
  238. package/src/providers/protocols/deepseek.ts +0 -344
  239. package/src/providers/protocols/gemini.ts +0 -350
  240. package/src/providers/protocols/index.ts +0 -36
  241. package/src/providers/protocols/openai.ts +0 -420
  242. package/src/providers/protocols/qwen.ts +0 -315
  243. package/src/providers/types.ts +0 -264
  244. package/src/providers/unified-adapter.ts +0 -367
  245. package/src/router.ts +0 -72
  246. package/src/tools.ts +0 -162
  247. package/src/utils.ts +0 -86
package/dist/events.d.ts CHANGED
@@ -1 +1,605 @@
1
- export { ax as AbortEvent, bf as AgentPhase, bg as AgentStatusEvent, b5 as CHAT_EVENT_TYPES, a as ChatEvent, aC as ChatEventType, bd as CompactEndEvent, be as CompactEvent, bc as CompactStartEvent, av as DoneEvent, aa as ErrorCategory, ab as ErrorDetails, aw as ErrorEvent, at as PlanStep, au as PlanStepStatus, aj as SearchEndEvent, ak as SearchEvent, a6 as SearchResult, ai as SearchResultEvent, ah as SearchStartEvent, ay as StatusEvent, aA as StepEndEvent, aB as StepEvent, az as StepStartEvent, ar as TextDeltaEvent, as as TextEvent, ae as ThinkingDeltaEvent, af as ThinkingEndEvent, ag as ThinkingEvent, ad as ThinkingStartEvent, a9 as TokenUsage, ao as ToolApprovalRequestEvent, a8 as ToolCallInfo, an as ToolCallOutputEvent, ap as ToolCallRequestEvent, am as ToolCallResultEvent, al as ToolCallStartEvent, a7 as ToolCallStatus, U as ToolErrorShape, aq as ToolEvent, ac as ToolUIShape, aV as createAbort, bh as createAgentStatus, aQ as createApiError, bj as createCompactEnd, bi as createCompactStart, aO as createDone, aP as createError, aU as createParseError, aR as createRateLimitError, aI as createSearchEnd, aH as createSearchResult, aG as createSearchStart, aX as createStepEnd, aW as createStepStart, aN as createTextDelta, aE as createThinkingDelta, aF as createThinkingEnd, aD as createThinkingStart, aT as createTimeoutError, aL as createToolCallOutput, aM as createToolCallRequest, aK as createToolCallResult, aJ as createToolCallStart, aS as createToolError, b2 as isAbortEvent, bk as isCompactEvent, b1 as isErrorEvent, b4 as isRetryableError, aZ as isSearchEvent, b0 as isStatusEvent, b3 as isStepEvent, a$ as isTextEvent, aY as isThinkingEvent, a4 as isThrowableToolError, a_ as isToolEvent } from './events-CU5D5ray.js';
1
+ /**
2
+ * AI Chat 事件系统
3
+ *
4
+ * 模块化的事件类型定义,用于 Agent 与前端之间的通信。
5
+ *
6
+ * - 每种事件类型有明确的数据结构,便于消费端分支处理
7
+ * - 事件分组(工具/文本/状态等)便于扩展与维护
8
+ * - 类型安全,减少 unknown 与随意结构
9
+ * - 统一的时间与耗时字段,便于可观测性
10
+ */
11
+ import type { AssetApprovalPolicy, AssetHostDependency, AssetSideEffectLevel } from './governance/types';
12
+ /** 工具调用状态 */
13
+ export type ToolCallStatus = 'pending' | 'running' | 'success' | 'error';
14
+ /** 工具调用信息(用于前端状态管理) */
15
+ export interface ToolCallInfo {
16
+ id: string;
17
+ name: string;
18
+ args: Record<string, unknown>;
19
+ status: ToolCallStatus;
20
+ result?: string;
21
+ error?: string;
22
+ startedAt?: number;
23
+ duration?: number;
24
+ }
25
+ /** Token 使用统计 */
26
+ export interface TokenUsage {
27
+ promptTokens: number;
28
+ completionTokens: number;
29
+ totalTokens: number;
30
+ /** 思考 token 数(如果有) */
31
+ reasoningTokens?: number;
32
+ /** 缓存命中 token 数(如果有) */
33
+ cachedTokens?: number;
34
+ }
35
+ /** 错误类别 - 参考 AI SDK 设计 */
36
+ export type ErrorCategory = 'api' | 'rate_limit' | 'validation' | 'tool' | 'timeout' | 'abort' | 'parse' | 'unknown';
37
+ import type { ToolError, ToolUI } from './types';
38
+ export type { ToolError, ToolUI };
39
+ export { isToolError } from './types';
40
+ interface ToolGovernanceEventData {
41
+ approvalPolicy?: AssetApprovalPolicy;
42
+ sideEffectLevel?: AssetSideEffectLevel;
43
+ hostDependency?: AssetHostDependency;
44
+ riskSummary?: string;
45
+ riskTags?: string[];
46
+ riskSignals?: string[];
47
+ }
48
+ /** 错误详情 - 结构化错误信息 */
49
+ export interface ErrorDetails {
50
+ /** 错误分类 */
51
+ category: ErrorCategory;
52
+ /** 人类可读的错误信息 */
53
+ message: string;
54
+ /** 错误代码(如 'RATE_LIMIT', 'NETWORK_ERROR') */
55
+ code?: string;
56
+ /** HTTP 状态码(如果适用) */
57
+ statusCode?: number;
58
+ /** HTTP 状态文本 */
59
+ statusText?: string;
60
+ /** 是否可重试 */
61
+ retryable?: boolean;
62
+ /** 重试等待时间(秒) */
63
+ retryAfter?: number;
64
+ /** 原始错误信息(用于调试) */
65
+ cause?: string;
66
+ /** 错误发生的上下文(如模型名、工具名) */
67
+ context?: string;
68
+ }
69
+ /** 思考开始事件 */
70
+ export interface ThinkingStartEvent {
71
+ type: 'thinking_start';
72
+ data: {
73
+ /** 内容块 ID(唯一标识本次 thinking 块) */
74
+ blockId: string;
75
+ /** 开始时间戳(毫秒) */
76
+ startedAt: number;
77
+ };
78
+ }
79
+ /** 思考内容增量事件 */
80
+ export interface ThinkingDeltaEvent {
81
+ type: 'thinking_delta';
82
+ data: {
83
+ /** 内容块 ID */
84
+ blockId: string;
85
+ /** 增量内容 */
86
+ content: string;
87
+ };
88
+ }
89
+ /** 思考结束事件 */
90
+ export interface ThinkingEndEvent {
91
+ type: 'thinking_end';
92
+ data: {
93
+ /** 内容块 ID */
94
+ blockId: string;
95
+ /** 结束时间戳(毫秒) */
96
+ endedAt: number;
97
+ /** 思考耗时(毫秒) */
98
+ duration: number;
99
+ };
100
+ }
101
+ /** 思考相关事件联合类型 */
102
+ export type ThinkingEvent = ThinkingStartEvent | ThinkingDeltaEvent | ThinkingEndEvent;
103
+ /** 工具调用开始事件 */
104
+ export interface ToolCallStartEvent {
105
+ type: 'tool_call_start';
106
+ data: {
107
+ /** 工具调用 ID */
108
+ id: string;
109
+ /** 工具名称 */
110
+ name: string;
111
+ /** scope 内部工具名(若有) */
112
+ toolName?: string;
113
+ /** 工具所属扩展/资产 ID(若有) */
114
+ extensionId?: string;
115
+ /** 对模型暴露的工具别名(若有) */
116
+ alias?: string;
117
+ /** UI 展示名称(若有) */
118
+ displayName?: string;
119
+ /** 工具参数 */
120
+ args: Record<string, unknown>;
121
+ /** 工具 UI 声明(render 型工具前端直接渲染专用组件,不显示通用 ToolCallPart) */
122
+ ui?: ToolUI;
123
+ /** 工具治理字段 */
124
+ approvalPolicy?: AssetApprovalPolicy;
125
+ sideEffectLevel?: AssetSideEffectLevel;
126
+ hostDependency?: AssetHostDependency;
127
+ riskSummary?: string;
128
+ riskTags?: string[];
129
+ riskSignals?: string[];
130
+ /** 开始时间戳(毫秒) */
131
+ startedAt: number;
132
+ };
133
+ }
134
+ /** 工具失败原因(细分错误场景,便于前端差异化展示) */
135
+ export type ToolFailureReason = 'parse_error' | 'denied' | 'timeout' | 'execution_error';
136
+ /** 工具审批原因(便于前端解释为何进入人工审批) */
137
+ export type ToolApprovalReason = 'manual-mode' | 'tool-policy' | 'destructive-only';
138
+ /** 工具调用结果事件 */
139
+ export interface ToolCallResultEvent {
140
+ type: 'tool_call_result';
141
+ data: {
142
+ /** 工具调用 ID */
143
+ id: string;
144
+ /** 工具名称 */
145
+ name: string;
146
+ /** 执行结果(JSON 字符串) */
147
+ result: string;
148
+ /** 是否成功 */
149
+ success: boolean;
150
+ /** 失败原因(细分错误场景) */
151
+ failureReason?: ToolFailureReason;
152
+ /** 错误信息(失败时) */
153
+ error?: ToolError;
154
+ /** 结束时间戳(毫秒) */
155
+ endedAt: number;
156
+ /** 执行耗时(毫秒) */
157
+ duration: number;
158
+ /** 工具 UI 声明(render 型工具在成功/失败时都可携带,便于前端更新或清理对应 Part) */
159
+ ui?: ToolUI;
160
+ /** 工具治理字段 */
161
+ approvalPolicy?: AssetApprovalPolicy;
162
+ sideEffectLevel?: AssetSideEffectLevel;
163
+ hostDependency?: AssetHostDependency;
164
+ riskSummary?: string;
165
+ riskTags?: string[];
166
+ riskSignals?: string[];
167
+ };
168
+ }
169
+ /** 工具输出增量事件(用于 stdout/stderr 流式展示) */
170
+ export interface ToolCallOutputEvent {
171
+ type: 'tool_call_output';
172
+ data: {
173
+ /** 工具调用 ID */
174
+ id: string;
175
+ /** 工具名称 */
176
+ name: string;
177
+ /** 输出流类型 */
178
+ stream: 'stdout' | 'stderr';
179
+ /** 输出增量内容 */
180
+ chunk: string;
181
+ /** 时间戳 */
182
+ at: number;
183
+ };
184
+ }
185
+ /** 工具执行批准请求事件(manual 模式) */
186
+ export interface ToolApprovalRequestEvent {
187
+ type: 'tool_approval_request';
188
+ data: {
189
+ /** 工具调用 ID */
190
+ id: string;
191
+ /** 工具名称 */
192
+ name: string;
193
+ /** 工具参数 */
194
+ args: Record<string, unknown>;
195
+ /** 审批触发原因 */
196
+ reason: ToolApprovalReason;
197
+ /** 工具审批策略(若有) */
198
+ approvalPolicy?: AssetApprovalPolicy;
199
+ /** 工具副作用等级(若有) */
200
+ sideEffectLevel?: AssetSideEffectLevel;
201
+ /** 宿主依赖(若有) */
202
+ hostDependency?: AssetHostDependency;
203
+ /** 风险摘要(若有) */
204
+ riskSummary?: string;
205
+ /** 风险标签(若有) */
206
+ riskTags?: string[];
207
+ /** 风险命中信号(若有) */
208
+ riskSignals?: string[];
209
+ /** 请求时间戳 */
210
+ requestedAt: number;
211
+ };
212
+ }
213
+ /**
214
+ * 客户端工具调用请求事件(透传模式)
215
+ *
216
+ * 用于用户自定义工具:
217
+ * - AI 返回 tool_call
218
+ * - 服务端不执行,透传给客户端
219
+ * - 客户端执行后,发新请求继续对话
220
+ */
221
+ export interface ToolCallRequestEvent {
222
+ type: 'tool_call_request';
223
+ data: {
224
+ /** 工具调用 ID */
225
+ id: string;
226
+ /** 工具名称 */
227
+ name: string;
228
+ /** 工具参数 */
229
+ args: Record<string, unknown>;
230
+ /** 工具 UI 声明(客户端可据此在 start 阶段决定渲染方式) */
231
+ ui?: ToolUI;
232
+ /** 工具治理字段 */
233
+ approvalPolicy?: AssetApprovalPolicy;
234
+ sideEffectLevel?: AssetSideEffectLevel;
235
+ hostDependency?: AssetHostDependency;
236
+ riskSummary?: string;
237
+ riskTags?: string[];
238
+ riskSignals?: string[];
239
+ /** 请求时间戳 */
240
+ requestedAt: number;
241
+ };
242
+ }
243
+ /** 工具相关事件联合类型 */
244
+ export type ToolEvent = ToolCallStartEvent | ToolCallResultEvent | ToolApprovalRequestEvent | ToolCallOutputEvent | ToolCallRequestEvent;
245
+ /** 文本块开始事件(标识一段新的文本块) */
246
+ export interface TextStartEvent {
247
+ type: 'text_start';
248
+ data: {
249
+ /** 内容块 ID */
250
+ blockId: string;
251
+ };
252
+ }
253
+ /** 文本增量事件 */
254
+ export interface TextDeltaEvent {
255
+ type: 'text_delta';
256
+ data: {
257
+ /** 内容块 ID */
258
+ blockId: string;
259
+ /** 增量文本 */
260
+ content: string;
261
+ };
262
+ }
263
+ /** 文本块结束事件 */
264
+ export interface TextEndEvent {
265
+ type: 'text_end';
266
+ data: {
267
+ /** 内容块 ID */
268
+ blockId: string;
269
+ };
270
+ }
271
+ /** 文本相关事件联合类型 */
272
+ export type TextEvent = TextStartEvent | TextDeltaEvent | TextEndEvent;
273
+ /** 计划步骤状态 */
274
+ export type PlanStepStatus = 'pending' | 'in_progress' | 'done' | 'failed';
275
+ /** 计划步骤 */
276
+ export interface PlanStep {
277
+ /** 步骤 ID(模型生成,如 "1", "scan", "move-images") */
278
+ id: string;
279
+ /** 步骤描述 */
280
+ title: string;
281
+ /** 步骤状态 */
282
+ status: PlanStepStatus;
283
+ }
284
+ /** 流结束原因 */
285
+ export type FinishReason = 'stop' | 'length' | 'tool_calls' | 'error' | 'abort' | 'max_iterations' | 'max_duration' | 'max_tool_calls' | 'max_tokens';
286
+ /** 完成事件 */
287
+ export interface DoneEvent {
288
+ type: 'done';
289
+ data: {
290
+ /** 完整的最终文本 */
291
+ text: string;
292
+ /** 结束原因(便于前端区分正常结束、截断、工具调用等) */
293
+ finishReason?: FinishReason;
294
+ /** Token 使用统计 */
295
+ usage?: TokenUsage;
296
+ /** 总耗时(毫秒) */
297
+ duration?: number;
298
+ };
299
+ }
300
+ /** 错误事件 - 结构化错误信息 */
301
+ export interface ErrorEvent {
302
+ type: 'error';
303
+ data: ErrorDetails;
304
+ }
305
+ /** 中止事件 - 用户主动取消 */
306
+ export interface AbortEvent {
307
+ type: 'abort';
308
+ data: {
309
+ /** 中止原因 */
310
+ reason?: string;
311
+ /** 中止时间戳 */
312
+ abortedAt: number;
313
+ };
314
+ }
315
+ /** 状态相关事件联合类型 */
316
+ export type StatusEvent = DoneEvent | ErrorEvent | AbortEvent;
317
+ /**
318
+ * 通用数据事件(协议扩展点)
319
+ *
320
+ * 用于推送不属于内容块的元数据(计费、citation、进度等),
321
+ * 前端按 name 分发处理,未识别的 name 忽略。
322
+ */
323
+ export interface DataEvent {
324
+ type: 'data';
325
+ data: {
326
+ /** 数据类型标识(如 'billing', 'citation', 'progress') */
327
+ name: string;
328
+ /** 数据内容 */
329
+ payload: unknown;
330
+ };
331
+ }
332
+ /** 步骤开始事件 */
333
+ export interface StepStartEvent {
334
+ type: 'step_start';
335
+ data: {
336
+ /** 步骤编号(从 1 开始) */
337
+ stepNumber: number;
338
+ /** 步骤描述(可选) */
339
+ description?: string;
340
+ /** 开始时间戳 */
341
+ startedAt: number;
342
+ };
343
+ }
344
+ /** 步骤结束事件 */
345
+ export interface StepEndEvent {
346
+ type: 'step_end';
347
+ data: {
348
+ /** 步骤编号 */
349
+ stepNumber: number;
350
+ /** 结束时间戳 */
351
+ endedAt: number;
352
+ /** 耗时(毫秒) */
353
+ duration: number;
354
+ };
355
+ }
356
+ /** 步骤相关事件联合类型 */
357
+ export type StepEvent = StepStartEvent | StepEndEvent;
358
+ /** assistant 消息分段原因 */
359
+ export type AssistantSegmentReason = 'step' | 'tool_call';
360
+ /** assistant 新分段开始事件 */
361
+ export interface AssistantSegmentStartEvent {
362
+ type: 'assistant_segment_start';
363
+ data: {
364
+ /** 分段原因 */
365
+ reason: AssistantSegmentReason;
366
+ /** 所属步骤编号(若可用) */
367
+ stepNumber?: number;
368
+ /** 开始时间戳 */
369
+ startedAt: number;
370
+ };
371
+ }
372
+ /** assistant 分段事件联合类型 */
373
+ export type AssistantSegmentEvent = AssistantSegmentStartEvent;
374
+ /** 上下文压缩开始事件 */
375
+ export interface CompactStartEvent {
376
+ type: 'compact_start';
377
+ data: {
378
+ /** 压缩前估算 token 数 */
379
+ estimatedTokens: number;
380
+ /** 可用 prompt token 预算 */
381
+ budget: number;
382
+ /** 开始时间戳 */
383
+ startedAt: number;
384
+ };
385
+ }
386
+ /** 上下文压缩完成事件 */
387
+ export interface CompactEndEvent {
388
+ type: 'compact_end';
389
+ data: {
390
+ /** 是否成功 */
391
+ success: boolean;
392
+ /** AI 生成的原始摘要文本(前端持久化时需加 [对话历史摘要] 前缀,存为 role='system' 消息) */
393
+ summaryContent?: string;
394
+ /** 执行压缩所用的模型 */
395
+ model?: string;
396
+ /** 压缩前估算 token 数 */
397
+ tokensBeforeCompact: number;
398
+ /** 压缩后估算 token 数 */
399
+ compressedTokens: number;
400
+ /** 压缩前消息数 */
401
+ originalMessageCount: number;
402
+ /** 压缩后消息数 */
403
+ compressedMessageCount: number;
404
+ /** 结束时间戳 */
405
+ endedAt: number;
406
+ /** 耗时(毫秒) */
407
+ duration: number;
408
+ };
409
+ }
410
+ /** 上下文压缩相关事件联合类型 */
411
+ export type CompactEvent = CompactStartEvent | CompactEndEvent;
412
+ /** 单条超长消息压缩开始事件 */
413
+ export interface ContentCompressStartEvent {
414
+ type: 'content_compress_start';
415
+ data: {
416
+ /** 原文估算 token 数 */
417
+ originalTokens: number;
418
+ /** 可用 prompt token 预算 */
419
+ budget: number;
420
+ /** 开始时间戳 */
421
+ startedAt: number;
422
+ };
423
+ }
424
+ /** 单条超长消息压缩完成事件 */
425
+ export interface ContentCompressEndEvent {
426
+ type: 'content_compress_end';
427
+ data: {
428
+ /** 是否成功 */
429
+ success: boolean;
430
+ /** AI 生成的摘要(发给目标模型的压缩版) */
431
+ summary?: string;
432
+ /** 执行压缩所用的模型 */
433
+ model?: string;
434
+ /** 原文估算 token 数 */
435
+ originalTokens: number;
436
+ /** 压缩后估算 token 数 */
437
+ compressedTokens: number;
438
+ /** 耗时(毫秒) */
439
+ duration: number;
440
+ };
441
+ }
442
+ /** 单条消息内容压缩事件联合类型 */
443
+ export type ContentCompressEvent = ContentCompressStartEvent | ContentCompressEndEvent;
444
+ /**
445
+ * Agent 当前阶段:前端根据此字段直接渲染 loading 状态,不需要「猜」。
446
+ *
447
+ * - thinking:模型正在思考(初始请求 / 工具执行完后等待下一轮)→ 显示「正在思考...」
448
+ * - null:有可见活动(思考/搜索/工具/文字流),不需要额外 loading
449
+ */
450
+ export type AgentPhase = 'thinking' | null;
451
+ /** Agent 状态事件(前端用于渲染 loading 提示) */
452
+ export interface AgentStatusEvent {
453
+ type: 'agent_status';
454
+ data: {
455
+ /** 当前阶段 */
456
+ phase: AgentPhase;
457
+ };
458
+ }
459
+ /** 创建 agent_status 事件 */
460
+ export declare function createAgentStatus(phase: AgentPhase): AgentStatusEvent;
461
+ /** 所有事件类型 */
462
+ export type ChatEvent = ThinkingEvent | ToolEvent | TextEvent | StatusEvent | DataEvent | StepEvent | AssistantSegmentEvent | CompactEvent | ContentCompressEvent | AgentStatusEvent;
463
+ /** 事件类型字符串 */
464
+ export type ChatEventType = ChatEvent['type'];
465
+ /** 所有合法事件类型(用于契约测试:Orchestrator/适配器产出必须在此集合内) */
466
+ export declare const CHAT_EVENT_TYPES: readonly ChatEventType[];
467
+ /**
468
+ * 创建思考开始事件
469
+ */
470
+ export declare function createThinkingStart(blockId: string): ThinkingStartEvent;
471
+ /**
472
+ * 创建思考增量事件
473
+ */
474
+ export declare function createThinkingDelta(blockId: string, content: string): ThinkingDeltaEvent;
475
+ /**
476
+ * 创建思考结束事件
477
+ */
478
+ export declare function createThinkingEnd(blockId: string, startedAt: number): ThinkingEndEvent;
479
+ /**
480
+ * 创建工具调用开始事件
481
+ */
482
+ export declare function createToolCallStart(id: string, name: string, args: Record<string, unknown>, ui?: ToolUI, governance?: ToolGovernanceEventData): ToolCallStartEvent;
483
+ /**
484
+ * 创建工具调用结果事件
485
+ */
486
+ export declare function createToolCallResult(id: string, name: string, result: string, success: boolean, startedAt: number, error?: ToolError, ui?: ToolUI, failureReason?: ToolFailureReason, governance?: ToolGovernanceEventData): ToolCallResultEvent;
487
+ /**
488
+ * 创建工具输出增量事件
489
+ */
490
+ export declare function createToolCallOutput(id: string, name: string, stream: 'stdout' | 'stderr', chunk: string): ToolCallOutputEvent;
491
+ /**
492
+ * 创建客户端工具调用请求事件(透传模式)
493
+ *
494
+ * 用于用户自定义工具,服务端不执行,透传给客户端
495
+ */
496
+ export declare function createToolCallRequest(id: string, name: string, args: Record<string, unknown>, ui?: ToolUI, governance?: ToolGovernanceEventData): ToolCallRequestEvent;
497
+ /**
498
+ * 创建文本块开始事件
499
+ */
500
+ export declare function createTextStart(blockId: string): TextStartEvent;
501
+ /**
502
+ * 创建文本增量事件
503
+ */
504
+ export declare function createTextDelta(blockId: string, content: string): TextDeltaEvent;
505
+ /**
506
+ * 创建文本块结束事件
507
+ */
508
+ export declare function createTextEnd(blockId: string): TextEndEvent;
509
+ /**
510
+ * 创建完成事件
511
+ */
512
+ export declare function createDone(text: string, finishReason?: FinishReason, usage?: TokenUsage, duration?: number): DoneEvent;
513
+ /**
514
+ * 创建通用数据事件
515
+ */
516
+ export declare function createData(name: string, payload: unknown): DataEvent;
517
+ /**
518
+ * 创建错误事件(完整版)
519
+ */
520
+ export declare function createError(details: ErrorDetails): ErrorEvent;
521
+ /**
522
+ * 创建 API 错误事件
523
+ */
524
+ export declare function createApiError(message: string, options?: {
525
+ code?: string;
526
+ statusCode?: number;
527
+ statusText?: string;
528
+ retryable?: boolean;
529
+ retryAfter?: number;
530
+ cause?: string;
531
+ context?: string;
532
+ }): ErrorEvent;
533
+ /**
534
+ * 创建速率限制错误事件
535
+ */
536
+ export declare function createRateLimitError(message: string, retryAfter?: number, context?: string): ErrorEvent;
537
+ /**
538
+ * 创建工具错误事件
539
+ */
540
+ export declare function createToolError(message: string, toolName: string, cause?: string): ErrorEvent;
541
+ /**
542
+ * 创建超时错误事件
543
+ */
544
+ export declare function createTimeoutError(message: string, context?: string): ErrorEvent;
545
+ /**
546
+ * 创建解析错误事件
547
+ */
548
+ export declare function createParseError(message: string, cause?: string): ErrorEvent;
549
+ /**
550
+ * 创建中止事件
551
+ */
552
+ export declare function createAbort(reason?: string): AbortEvent;
553
+ /**
554
+ * 创建步骤开始事件
555
+ */
556
+ export declare function createStepStart(stepNumber: number, description?: string): StepStartEvent;
557
+ /**
558
+ * 创建步骤结束事件
559
+ */
560
+ export declare function createStepEnd(stepNumber: number, startedAt: number): StepEndEvent;
561
+ /**
562
+ * 创建 assistant 分段开始事件
563
+ */
564
+ export declare function createAssistantSegmentStart(reason: AssistantSegmentReason, stepNumber?: number): AssistantSegmentStartEvent;
565
+ /**
566
+ * 创建上下文压缩开始事件
567
+ */
568
+ export declare function createCompactStart(estimatedTokens: number, budget: number): CompactStartEvent;
569
+ /**
570
+ * 创建上下文压缩完成事件
571
+ */
572
+ export declare function createCompactEnd(success: boolean, tokensBeforeCompact: number, compressedTokens: number, originalMessageCount: number, compressedMessageCount: number, startedAt: number, summaryContent?: string, model?: string): CompactEndEvent;
573
+ /**
574
+ * 创建单条消息内容压缩开始事件
575
+ */
576
+ export declare function createContentCompressStart(originalTokens: number, budget: number): ContentCompressStartEvent;
577
+ /**
578
+ * 创建单条消息内容压缩完成事件
579
+ */
580
+ export declare function createContentCompressEnd(success: boolean, originalTokens: number, compressedTokens: number, startedAt: number, summary?: string, model?: string): ContentCompressEndEvent;
581
+ /** 检查是否为思考事件 */
582
+ export declare function isThinkingEvent(event: ChatEvent): event is ThinkingEvent;
583
+ /** 检查是否为工具事件 */
584
+ export declare function isToolEvent(event: ChatEvent): event is ToolEvent;
585
+ /** 检查是否为文本事件 */
586
+ export declare function isTextEvent(event: ChatEvent): event is TextEvent;
587
+ /** 检查是否为数据事件 */
588
+ export declare function isDataEvent(event: ChatEvent): event is DataEvent;
589
+ /** 检查是否为状态事件 */
590
+ export declare function isStatusEvent(event: ChatEvent): event is StatusEvent;
591
+ /** 检查是否为错误事件 */
592
+ export declare function isErrorEvent(event: ChatEvent): event is ErrorEvent;
593
+ /** 检查是否为中止事件 */
594
+ export declare function isAbortEvent(event: ChatEvent): event is AbortEvent;
595
+ /** 检查是否为步骤事件 */
596
+ export declare function isStepEvent(event: ChatEvent): event is StepEvent;
597
+ /** 检查是否为 assistant 分段事件 */
598
+ export declare function isAssistantSegmentEvent(event: ChatEvent): event is AssistantSegmentEvent;
599
+ /** 检查是否为上下文压缩事件 */
600
+ export declare function isCompactEvent(event: ChatEvent): event is CompactEvent;
601
+ /** 检查是否为单条消息内容压缩事件 */
602
+ export declare function isContentCompressEvent(event: ChatEvent): event is ContentCompressEvent;
603
+ /** 检查错误是否可重试 */
604
+ export declare function isRetryableError(event: ChatEvent): boolean;
605
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}