@huyooo/ai-chat-core 0.2.45 → 0.3.3

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
@@ -0,0 +1,108 @@
1
+ /**
2
+ * LLM 配置(Model 中心)
3
+ *
4
+ * LLMConfig.models 是模型的唯一真相源:
5
+ * - key = 模型 ID(自定义字符串)
6
+ * - value = ModelConfig(路由 + 元数据)
7
+ * - 前端只展示这里配置的模型
8
+ * - 每个模型必须显式指定 family,不做任何隐式推导
9
+ */
10
+ import type { ProtocolFactory } from './protocols';
11
+ import type { ModelFamilyConfig, ModelFamilyId } from './families';
12
+ /** 模型定价(每百万 tokens) */
13
+ export interface ModelPricing {
14
+ currency: 'CNY' | 'USD';
15
+ /** 输入价格(每百万 tokens) */
16
+ input: number;
17
+ /** 输出价格,单值或 [最低, 最高] 区间(如思考/非思考差价) */
18
+ output: number | [number, number];
19
+ /** 缓存命中价格(每百万 tokens,部分模型支持) */
20
+ cached?: number;
21
+ }
22
+ /** 单条模型访问路径 */
23
+ export interface ModelRoute {
24
+ /** 基础 URL */
25
+ baseUrl: string;
26
+ /** 访问 key(代理 token 或厂商 key) */
27
+ accessKey: string;
28
+ /** 可选,透传给厂商的 key(BYOK,优先于 accessKey) */
29
+ vendorKey?: string;
30
+ /** 协议类型(内置或自定义 protocolId) */
31
+ protocol: string;
32
+ /** 该供应商 API 要求的 model 名 */
33
+ providerModelId: string;
34
+ /** 协议子路径,直连 '',代理 '/openai' 等 */
35
+ path?: string;
36
+ }
37
+ /** 模型配置(路由 + 元数据) */
38
+ export interface ModelConfig {
39
+ /** 路由链(数组顺序 = 降级优先级) */
40
+ routes: ModelRoute[];
41
+ /** 显示名称(不传则从预设库补全,再 fallback 到 modelId) */
42
+ displayName?: string;
43
+ /**
44
+ * 所属家族(决定 thinking/toolCall 行为)——必填,不做任何隐式推导
45
+ * - 字符串:引用内置 ModelFamilyId 或 LLMConfig.families 中的自定义 familyId
46
+ * - 对象:内联自定义家族配置
47
+ */
48
+ family: ModelFamilyId | ModelFamilyConfig;
49
+ /** 是否在前端模型选择器中显示(默认 true) */
50
+ visible?: boolean;
51
+ /** 是否支持深度思考(必填,不做隐式推导) */
52
+ supportsThinking: boolean;
53
+ /** 是否支持图片理解(必填,不做隐式推导) */
54
+ supportsVision: boolean;
55
+ /** 上下文窗口 token 数(必填,压缩器依赖此值计算预算,前端展示自动推导为 "256K" 格式) */
56
+ contextWindowTokens: number;
57
+ /** 定价信息(结构化,展示时自动格式化) */
58
+ pricing?: ModelPricing;
59
+ /** 最大输出 token(必填,每个模型限制不同,不做隐式推导) */
60
+ maxOutputTokens: number;
61
+ }
62
+ /**
63
+ * 压缩模型配置(可选,不配则用默认值)
64
+ *
65
+ * 历史压缩直接复用当前对话模型,零配置。
66
+ * 仅单条超长消息(如用户粘贴巨量文本)需要长上下文模型。
67
+ */
68
+ export interface CompressionConfig {
69
+ /** 超长内容压缩模型(默认 qwen-long) */
70
+ longModel?: string;
71
+ }
72
+ /** 完整 LLM 配置 */
73
+ export interface LLMConfig {
74
+ /**
75
+ * 模型配置(唯一真相源)
76
+ *
77
+ * key = 模型 ID,value = 路由 + 元数据。
78
+ * 前端模型选择器只展示这里 visible !== false 的模型。
79
+ */
80
+ models: Record<string, ModelConfig>;
81
+ /**
82
+ * 自定义协议工厂(可插拔)
83
+ *
84
+ * key = 自定义 protocolId,value = Protocol 工厂函数。
85
+ * ModelRoute.protocol 引用此处的 key 或内置 protocolId。
86
+ */
87
+ protocols?: Record<string, ProtocolFactory>;
88
+ /**
89
+ * 自定义家族配置(可插拔)
90
+ *
91
+ * key = 自定义 familyId,value = ModelFamilyConfig。
92
+ * ModelConfig.family 引用此处的 key 或内置 familyId。
93
+ */
94
+ families?: Record<string, ModelFamilyConfig>;
95
+ /** 压缩模型配置(可选) */
96
+ compression?: CompressionConfig;
97
+ }
98
+ /** 解析 route 的完整 API URL */
99
+ export declare function resolveRouteUrl(route: ModelRoute): string;
100
+ /**
101
+ * 获取模型的 route 链(按优先级)
102
+ */
103
+ export declare function getRouteChain(config: LLMConfig, modelId: string): ModelRoute[];
104
+ /**
105
+ * 查找第一个支持指定 protocol 的 route
106
+ */
107
+ export declare function findRouteByProtocol(config: LLMConfig, protocolId: string): ModelRoute | undefined;
108
+ //# sourceMappingURL=llm-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-config.d.ts","sourceRoot":"","sources":["../src/llm-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAe;AACf,MAAM,WAAW,UAAU;IACzB,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAqB;AACrB,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAAC;IAC1C,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0BAA0B;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,qCAAqC;IACrC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAE7C,iBAAiB;IACjB,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,GACd,UAAU,EAAE,CAEd;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,SAAS,CAOxB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Pino 日志核心(与 SuperX 架构一致)
3
+ *
4
+ * 使用 pino.multistream + pino.destination,避免 pino.transport(打包后 worker 不可用)。
5
+ * - 开发:pino-pretty 输出到 stdout
6
+ * - 生产:JSON 输出 + 可选文件持久化
7
+ * - 模块:child({ module: 'Name' }) 创建带前缀的 logger
8
+ */
9
+ import { type Logger } from 'pino';
10
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
11
+ export interface LoggerConfig {
12
+ /** 日志级别 */
13
+ level?: LogLevel;
14
+ /** 用户数据目录(用于 logs/ai-chat.log) */
15
+ baseDir?: string;
16
+ /** 是否开发模式(使用 pino-pretty) */
17
+ isDev?: boolean;
18
+ }
19
+ /**
20
+ * 初始化 logger(应在 app.whenReady 后调用)
21
+ */
22
+ export declare function initLogger(config: LoggerConfig): void;
23
+ /**
24
+ * 获取 root logger,未初始化时返回默认 logger
25
+ */
26
+ export declare function getLogger(): Logger;
27
+ /**
28
+ * 创建模块专用 logger(替代原 DebugLogger.module)
29
+ */
30
+ export declare function createModuleLogger(moduleName: string): Logger;
31
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/logger/core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAKzC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAsDD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 日志模块导出(barrel)
3
+ *
4
+ * - 基于 `core` 的 init / get / createModuleLogger
5
+ * - 与 SuperX 一致:开发 pretty、生产 JSON、可选落盘
6
+ */
7
+ export { initLogger, getLogger, createModuleLogger } from './core';
8
+ export type { LogLevel, LoggerConfig } from './core';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACnE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 压缩处理器
3
+ *
4
+ * 从 orchestrator 提取的两个独立压缩逻辑:
5
+ * 1. compactIfNeeded — 历史消息整体压缩
6
+ * 2. compressSingleMessageIfNeeded — 单条超长 user 消息压缩
7
+ */
8
+ import type { ProtocolMessage } from '../protocols';
9
+ import type { CompactStartEvent, CompactEndEvent, ContentCompressStartEvent, ContentCompressEndEvent } from '../events';
10
+ import { type CompactConfig } from './context-compressor';
11
+ import type { CompressionConfig } from '../llm-config';
12
+ import type { SummarizeFn } from './context-summarizer';
13
+ /**
14
+ * 历史消息整体压缩
15
+ *
16
+ * 当消息总 token 超出 context window 预算时,
17
+ * 直接用当前对话模型压缩历史(无需额外配置)。
18
+ *
19
+ * 历史压缩触发点 = context window budget,远小于超长阈值(800K),
20
+ * 所以不会出现需要切长上下文模型的场景。
21
+ */
22
+ export declare function compactIfNeeded(messages: ProtocolMessage[], compactConfig: CompactConfig, summarizeFn?: SummarizeFn, currentModel?: string): AsyncGenerator<CompactStartEvent | CompactEndEvent, ProtocolMessage[]>;
23
+ /**
24
+ * 单条超长 user 消息压缩
25
+ *
26
+ * 检测最后一条 user 消息是否超长,如果超长则用 qwen-long 压缩。
27
+ */
28
+ export declare function compressSingleMessageIfNeeded(messages: ProtocolMessage[], compactConfig: CompactConfig, summarizeFn?: SummarizeFn, compressionConfig?: CompressionConfig): AsyncGenerator<ContentCompressStartEvent | ContentCompressEndEvent, ProtocolMessage[]>;
29
+ //# sourceMappingURL=compression-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression-handler.d.ts","sourceRoot":"","sources":["../../src/orchestrator/compression-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,WAAW,CAAC;AAOnB,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMxD;;;;;;;;GAQG;AACH,wBAAuB,eAAe,CACpC,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,aAAa,EAC5B,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,MAAM,GACpB,cAAc,CAAC,iBAAiB,GAAG,eAAe,EAAE,eAAe,EAAE,CAAC,CAmCxE;AAED;;;;GAIG;AACH,wBAAuB,6BAA6B,CAClD,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,aAAa,EAC5B,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,cAAc,CAAC,yBAAyB,GAAG,uBAAuB,EAAE,eAAe,EAAE,CAAC,CAqCxF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Context 压缩模块
3
+ *
4
+ * 当 prompt token 估算接近模型 context window 时,让当前模型自己总结对话历史,
5
+ * 然后用 summary + 最近几条消息继续对话。
6
+ *
7
+ * 参考 Claude Code / Cursor 的做法:
8
+ * 不机械截断,而是让 AI 生成高质量摘要,保留关键决策和上下文。
9
+ */
10
+ import type { ProtocolMessage } from '../protocols';
11
+ export declare function estimateStringTokens(s: string): number;
12
+ export declare function estimateMessageTokens(msg: ProtocolMessage): number;
13
+ export declare function estimateTotalTokens(messages: ProtocolMessage[]): number;
14
+ export interface CompactConfig {
15
+ contextWindowTokens: number;
16
+ maxOutputTokens: number;
17
+ /** 触发压缩的使用率,默认 0.80 */
18
+ compactThresholdRatio?: number;
19
+ /** 压缩后保留的最近消息数,默认 6 */
20
+ keepRecentMessages?: number;
21
+ }
22
+ /** 计算可用 prompt token 预算 */
23
+ export declare function getPromptBudget(config: CompactConfig): number;
24
+ /** 检测是否需要压缩 */
25
+ export declare function needsCompaction(messages: ProtocolMessage[], config: CompactConfig): boolean;
26
+ /**
27
+ * 构建发给 AI 的总结请求
28
+ *
29
+ * 返回一组消息,发给当前模型让它总结对话历史。
30
+ * 总结完成后调用 applySummary 组装新的消息列表。
31
+ */
32
+ export declare function buildSummarizeRequest(messages: ProtocolMessage[], config: CompactConfig): {
33
+ summarizeMessages: ProtocolMessage[];
34
+ keepMessages: ProtocolMessage[];
35
+ };
36
+ /**
37
+ * 用 AI 返回的摘要组装新的消息列表
38
+ */
39
+ export declare function applySummary(originalMessages: ProtocolMessage[], summary: string, keepMessages: ProtocolMessage[]): ProtocolMessage[];
40
+ /**
41
+ * 检测单条用户消息是否需要压缩
42
+ * 阈值:单条消息 token > contextWindowTokens * 0.8 - maxOutputTokens
43
+ */
44
+ export declare function needsSingleMessageCompression(message: ProtocolMessage, config: CompactConfig): boolean;
45
+ /**
46
+ * 构建单条消息的总结请求
47
+ */
48
+ export declare function buildSingleMessageSummarizeRequest(message: ProtocolMessage): {
49
+ summarizeMessages: ProtocolMessage[];
50
+ };
51
+ //# sourceMappingURL=context-compressor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-compressor.d.ts","sourceRoot":"","sources":["../../src/orchestrator/context-compressor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAUpD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAiBlE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAMvE;AAKD,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAOD,2BAA2B;AAC3B,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAG7D;AAED,eAAe;AACf,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAE3F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,aAAa,GACpB;IAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC;IAAC,YAAY,EAAE,eAAe,EAAE,CAAA;CAAE,CAmC3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,gBAAgB,EAAE,eAAe,EAAE,EACnC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,eAAe,EAAE,GAC9B,eAAe,EAAE,CA4BnB;AAID;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,aAAa,GACpB,OAAO,CAKT;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,eAAe,GACvB;IAAE,iBAAiB,EAAE,eAAe,EAAE,CAAA;CAAE,CAM1C"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Context Summarizer — 专用上下文总结模块
3
+ *
4
+ * 当对话历史超过当前模型的 context window 时,通过外部注入的 summarize 回调执行 AI 总结。
5
+ * 回调由宿主提供(如 SuperX 走 ai-server 的 toolAI),ai-chat-core 不关心具体调用方式。
6
+ */
7
+ import type { ProtocolMessage } from '../protocols';
8
+ import { type CompactConfig } from './context-compressor';
9
+ /** 外部注入的 AI 总结函数,model 由 orchestrator 根据场景传入 */
10
+ export type SummarizeFn = (systemPrompt: string, userPrompt: string, model: string) => Promise<string>;
11
+ export interface SummarizeResult {
12
+ messages: ProtocolMessage[];
13
+ success: boolean;
14
+ /** AI 生成的原始摘要文本,前端持久化时需加 [对话历史摘要] 前缀 */
15
+ summaryContent?: string;
16
+ }
17
+ /**
18
+ * 使用 AI 总结对话历史
19
+ *
20
+ * 1. 用 buildSummarizeRequest 分离「待总结的中间历史」和「保留的最近消息」
21
+ * 2. 调用外部注入的 summarizeFn 执行总结(走 ai-server 等)
22
+ * 3. 用 applySummary 组装压缩后的消息列表
23
+ */
24
+ export declare function summarizeHistory(summarizeFn: SummarizeFn, messages: ProtocolMessage[], config: CompactConfig, model: string): Promise<SummarizeResult>;
25
+ export interface ContentCompressResult {
26
+ /** 压缩后的摘要,替换原消息 content 发给目标模型 */
27
+ summary: string;
28
+ success: boolean;
29
+ /** 原文估算 token 数 */
30
+ originalTokens: number;
31
+ /** 摘要估算 token 数 */
32
+ compressedTokens: number;
33
+ }
34
+ /**
35
+ * 使用 AI 压缩单条超长用户消息
36
+ *
37
+ * 直接调用 qwen-long(10M 窗口)总结用户贴的超长文档,
38
+ * 返回摘要文本,由 orchestrator 替换消息 content 发给目标模型。
39
+ */
40
+ export declare function compressSingleMessage(summarizeFn: SummarizeFn, message: ProtocolMessage, model: string): Promise<ContentCompressResult>;
41
+ //# sourceMappingURL=context-summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-summarizer.d.ts","sourceRoot":"","sources":["../../src/orchestrator/context-summarizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAO9B,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvG,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC,CA4B1B;AAID,MAAM,WAAW,qBAAqB;IACpC,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC,CAwBhC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Orchestrator 模块导出(barrel)
3
+ *
4
+ * - ChatOrchestrator:RawEvent → ChatEvent 循环、工具调用与压缩编排
5
+ * - context-summarizer:超长历史外部总结入口
6
+ * - types:编排配置与钩子类型
7
+ */
8
+ export { ChatOrchestrator, createOrchestrator } from './orchestrator';
9
+ export { summarizeHistory } from './context-summarizer';
10
+ export type { SummarizeFn, SummarizeResult } from './context-summarizer';
11
+ export type { ToolExecutionHooks, OrchestratorToolExecutor, GetAutoRunConfigCallback, OrchestratorConfig, OrchestratorContext, OrchestratorOptions, } from './types';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEzE,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Chat Orchestrator
3
+ *
4
+ * 直接消费 Protocol 层的 RawEvent,统一处理:
5
+ * 1. Thinking 状态机(首段去换行、done 配对、text 前自动闭合)
6
+ * 2. 工具调用循环 (while iterations < MAX)
7
+ * 3. 消息历史维护 (assistant + tool 消息)
8
+ * 4. ChatEvent 发射
9
+ *
10
+ * 只有两套类型:RawEvent(输入)和 ChatEvent(输出)
11
+ */
12
+ import type { ChatEvent } from '../events';
13
+ import type { ProviderAdapter } from '../adapter/types';
14
+ import type { OrchestratorConfig, OrchestratorContext, OrchestratorOptions } from './types';
15
+ /**
16
+ * Chat Orchestrator
17
+ *
18
+ * 核心职责:统一处理工具调用循环,所有 Provider 共享相同的逻辑
19
+ */
20
+ export declare class ChatOrchestrator {
21
+ private config;
22
+ constructor(config: OrchestratorConfig);
23
+ /**
24
+ * 执行聊天
25
+ *
26
+ * @param adapter Provider 适配器
27
+ * @param message 用户消息
28
+ * @param context Orchestrator 上下文
29
+ * @param options 选项
30
+ */
31
+ chat(adapter: ProviderAdapter, message: string, context: OrchestratorContext, options: OrchestratorOptions): AsyncGenerator<ChatEvent>;
32
+ /**
33
+ * 构建标准化消息列表
34
+ */
35
+ private buildMessages;
36
+ /**
37
+ * 执行单个工具:批准检查 → 执行 → 结果处理 → 推送消息到历史
38
+ * 从 chat() 主循环提取,降低嵌套深度
39
+ */
40
+ private executeSingleTool;
41
+ }
42
+ /**
43
+ * 创建 Orchestrator 实例
44
+ */
45
+ export declare function createOrchestrator(config: OrchestratorConfig): ChatOrchestrator;
46
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAU3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAkMjB;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,kBAAkB;IAItC;;;;;;;OAOG;IACI,IAAI,CACT,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,mBAAmB,GAC3B,cAAc,CAAC,SAAS,CAAC;IA0a5B;;OAEG;IACH,OAAO,CAAC,aAAa;IA+CrB;;;OAGG;YACY,iBAAiB;CA2QjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,CAE/E"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Orchestrator 层类型定义
3
+ *
4
+ * 编排器拥有的类型:配置、上下文、选项、工具执行钩子
5
+ */
6
+ import type { ChatMessage, Tool, ToolApprovalCallback, AutoRunConfig, ToolGovernanceSnapshot } from '../types';
7
+ import type { ProtocolToolDefinition } from '../protocols/types';
8
+ import type { LLMConfig, CompressionConfig } from '../llm-config';
9
+ import type { ToolDescriptor } from '../tool-manager/types';
10
+ export interface ToolExecutionHooks {
11
+ toolCallId: string;
12
+ toolName: string;
13
+ allowedToolNames?: readonly string[];
14
+ governance?: ToolGovernanceSnapshot;
15
+ onStdout?: (chunk: string) => void;
16
+ onStderr?: (chunk: string) => void;
17
+ }
18
+ export type OrchestratorToolExecutor = (name: string, args: Record<string, unknown>, signal?: AbortSignal, hooks?: ToolExecutionHooks) => Promise<object>;
19
+ export type { ToolApprovalCallback, AutoRunConfig };
20
+ export type GetAutoRunConfigCallback = () => Promise<AutoRunConfig | undefined>;
21
+ export interface OrchestratorConfig {
22
+ /** 最大模型轮次;默认不限制 */
23
+ maxIterations?: number;
24
+ /** 最大总执行时长(毫秒);默认不限制 */
25
+ maxDurationMs?: number;
26
+ /** 最大工具调用次数;默认不限制 */
27
+ maxToolCalls?: number;
28
+ /** 最大累计 token 数;默认不限制 */
29
+ maxTotalTokens?: number;
30
+ executeTool: OrchestratorToolExecutor;
31
+ tools?: Map<string, Tool>;
32
+ getToolDescriptor?: (name: string) => ToolDescriptor | undefined;
33
+ autoRunConfig?: AutoRunConfig;
34
+ getAutoRunConfig?: GetAutoRunConfigCallback;
35
+ onToolApprovalRequest?: ToolApprovalCallback;
36
+ summarize?: (systemPrompt: string, userPrompt: string, model: string) => Promise<string>;
37
+ compressionConfig?: CompressionConfig;
38
+ llmConfig?: LLMConfig;
39
+ }
40
+ export interface OrchestratorContext {
41
+ systemPrompt: string;
42
+ history: ChatMessage[];
43
+ tools: ProtocolToolDefinition[];
44
+ refreshTools?: () => Promise<ProtocolToolDefinition[]>;
45
+ signal: AbortSignal;
46
+ images?: string[];
47
+ clientToolNames?: Set<string>;
48
+ }
49
+ export interface OrchestratorOptions {
50
+ model: string;
51
+ enableThinking?: boolean;
52
+ autoRunConfig?: AutoRunConfig;
53
+ maxIterations?: number;
54
+ maxDurationMs?: number;
55
+ maxToolCalls?: number;
56
+ maxTotalTokens?: number;
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAC/G,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,kBAAkB,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,CAAC;AAEpD,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,mBAAmB;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,wBAAwB,CAAC;IACtC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;IACjE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;IAC5C,qBAAqB,CAAC,EAAE,oBAAoB,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACvD,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 可管理的「Part 资产」元数据(PartRegistry / PartMeta)
3
+ *
4
+ * 与聊天消息里的 **ContentPart** 不是同一概念:这里只描述 **扩展或本地 Part 工程**
5
+ *(磁盘目录 `parts/<name>/`、构建产物等)在管理面的索引,供宿主(如 SuperX)扩展管理 UI 展示。
6
+ *
7
+ * **市场/用户扩展里的可视化 Part** 由扩展包提供;**不在**本模块里实现具体渲染器。
8
+ * 消息流中的渲染顺序见 `@huyooo/ai-chat-frontend-vue` 的 `PartsRenderer`(`partRenderers` + `loadPartCode`)。
9
+ */
10
+ export type { PartMeta, PartSearchQuery, PartRegistry, ManagedPartSummary, ManagedPartDetail, } from './types';
11
+ export { partRegistry } from './registry';
12
+ export { createManagedPartSummary, createManagedPartDetail } from './summaries';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Part Registry - UI 组件注册表
3
+ *
4
+ * 纯内存索引,存储 PartMeta。
5
+ * 结构与 SkillRegistry 一致:
6
+ * - 有 enabled 状态
7
+ * - 搜索支持 enabledOnly 过滤
8
+ */
9
+ import type { PartRegistry } from './types';
10
+ export declare function partRegistry(): PartRegistry;
11
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/parts/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAA6B,YAAY,EAAE,MAAM,SAAS,CAAC;AAWvE,wBAAgB,YAAY,IAAI,YAAY,CA0E3C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Part 管理摘要 / 详情构造
3
+ *
4
+ * - 从 PartMeta 派生 ManagedPartSummary / Detail,带统一治理字段
5
+ */
6
+ import type { ManagedPartDetail, ManagedPartSummary, PartMeta } from './types';
7
+ export declare function createManagedPartSummary(part: PartMeta, extra?: Partial<ManagedPartSummary>): ManagedPartSummary;
8
+ export declare function createManagedPartDetail(part: PartMeta, extra: Partial<ManagedPartDetail> & Pick<ManagedPartDetail, 'hasProject' | 'hasBuilt'>): ManagedPartDetail;
9
+ //# sourceMappingURL=summaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summaries.d.ts","sourceRoot":"","sources":["../../src/parts/summaries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,KAAK,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACtC,kBAAkB,CAiBpB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,UAAU,CAAC,GACrF,iBAAiB,CAKnB"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Part「资产」类型定义(管理面)
3
+ *
4
+ * 这里的 **Part** 指可注册、可构建的前端 UI **工程元数据**(见 PartMeta),不是协议内置的
5
+ * `text` / `tool_call` 等 **ContentPart** 枚举项。
6
+ *
7
+ * **扩展/market Part**:目录与产物在扩展包内,由宿主 `loadPartCode(name)` 加载 `dist`;
8
+ * **宿主内嵌卡片**:由宿主注册 `partRenderers[type]`,与 PartRegistry 无必然绑定。
9
+ *
10
+ * 与 Tool:Tool 为可执行逻辑;与 Skill:Skill 为提示词资产。
11
+ */
12
+ import type { AssetSource, ManagedAssetSummaryBase } from '../governance/types';
13
+ /** Part 元数据(注册表中存储的索引信息) */
14
+ export interface PartMeta {
15
+ name: string;
16
+ description: string;
17
+ category: string;
18
+ tags: string[];
19
+ source: AssetSource;
20
+ enabled: boolean;
21
+ }
22
+ export interface ManagedPartSummary extends ManagedAssetSummaryBase {
23
+ ref: string;
24
+ name: string;
25
+ description: string;
26
+ category: string;
27
+ tags: string[];
28
+ source: AssetSource;
29
+ enabled: boolean;
30
+ }
31
+ export interface ManagedPartDetail extends ManagedPartSummary {
32
+ hasProject: boolean;
33
+ hasBuilt: boolean;
34
+ sourceCode?: string;
35
+ dependencies?: Record<string, string>;
36
+ }
37
+ /** Part 搜索条件 */
38
+ export interface PartSearchQuery {
39
+ keyword?: string;
40
+ category?: string;
41
+ tags?: string[];
42
+ source?: AssetSource;
43
+ enabledOnly?: boolean;
44
+ }
45
+ /** Part Registry 接口 */
46
+ export interface PartRegistry {
47
+ add(meta: PartMeta): void;
48
+ remove(name: string): void;
49
+ search(query?: PartSearchQuery): PartMeta[];
50
+ get(name: string): PartMeta | undefined;
51
+ setEnabled(name: string, enabled: boolean): void;
52
+ listEnabled(): PartMeta[];
53
+ entries(): PartMeta[];
54
+ has(name: string): boolean;
55
+ readonly size: number;
56
+ categories(): Array<{
57
+ category: string;
58
+ count: number;
59
+ }>;
60
+ }
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parts/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,4BAA4B;AAC5B,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,uBAAuB;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,gBAAgB;AAChB,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,QAAQ,EAAE,CAAC;IAC5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD,WAAW,IAAI,QAAQ,EAAE,CAAC;IAC1B,OAAO,IAAI,QAAQ,EAAE,CAAC;IACtB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,UAAU,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D"}
@@ -0,0 +1,17 @@
1
+ /** userData 目录:Electron → app.getPath('userData'),非 Electron → ~/.superx */
2
+ export declare function getUserDataDir(): string;
3
+ /** 下载目录:Electron → app.getPath('downloads'),非 Electron → ~/Downloads */
4
+ export declare function getDownloadsDir(): string;
5
+ /** assets 根目录:Electron → appPath/assets,非 Electron → cwd/assets */
6
+ export declare function getAssetsDir(): string;
7
+ /**
8
+ * 用户可写二进制目录:
9
+ * - Electron → userData/bin(从 assets/bin 复制而来)
10
+ * - 非 Electron → assets/bin(直接使用)
11
+ */
12
+ export declare function getUserBinDir(): string;
13
+ /** assets/bin 目录(只读,打包资源) */
14
+ export declare function getBundledBinDir(): string;
15
+ /** 获取平台对应的二进制文件名 */
16
+ export declare function getBinaryFilename(name: string): string;
17
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AA6BA,4EAA4E;AAC5E,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wEAAwE;AACxE,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,mEAAmE;AACnE,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAED,6BAA6B;AAC7B,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,oBAAoB;AACpB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAItD"}
@@ -0,0 +1 @@
1
+ import{createRequire as e}from"node:module";import t from"node:fs";import n from"node:os";import r from"node:path";var i=e(import.meta.url);function a(){try{let{app:e}=i(`electron`);return e.getPath(`userData`),e}catch{return null}}function o(){let e=a();return e?e.getPath(`userData`):r.join(n.homedir(),`.superx`)}function s(){let e=a();return e?e.getPath(`downloads`):r.join(n.homedir(),`Downloads`)}function c(){let e=a(),t=e?e.getAppPath():process.cwd();return r.join(t,`assets`)}function l(){let e=a(),n=e?r.join(e.getPath(`userData`),`bin`):r.join(process.cwd(),`assets`,`bin`);return t.existsSync(n)||t.mkdirSync(n,{recursive:!0}),n}function u(){return r.join(c(),`bin`)}function d(e){return process.platform===`win32`?`${e}.exe`:process.platform===`darwin`?`${e}_macos`:`${e}_linux`}export{c as getAssetsDir,d as getBinaryFilename,u as getBundledBinDir,s as getDownloadsDir,l as getUserBinDir,o as getUserDataDir};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Anthropic Protocol(原生 Messages API)
3
+ *
4
+ * 完整实现 Anthropic Messages API(/v1/messages):
5
+ * - SSE 事件流:message_start → content_block_start/delta/stop → message_delta → message_stop
6
+ * - Extended thinking:thinking_delta + signature_delta(signature 用于工具调用循环回传)
7
+ * - 工具调用:tool_use content block + input_json_delta
8
+ * - 支持 AIMLAPI 代理(Bearer auth)和 Anthropic 直连(x-api-key auth)
9
+ */
10
+ import type { Protocol, ProtocolConfig, ProtocolMessage, ProtocolToolDefinition, ProtocolRequestOptions, RawEvent } from './types';
11
+ export declare class AnthropicProtocol implements Protocol {
12
+ readonly name = "anthropic";
13
+ private apiKey;
14
+ private apiUrl;
15
+ private isDirect;
16
+ constructor(config: ProtocolConfig);
17
+ stream(messages: ProtocolMessage[], tools: ProtocolToolDefinition[], options: ProtocolRequestOptions): AsyncGenerator<RawEvent>;
18
+ }
19
+ export declare function createAnthropicProtocol(config: ProtocolConfig): AnthropicProtocol;
20
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/protocols/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,QAAQ,EAGT,MAAM,SAAS,CAAC;AAWjB,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAU;gBAEd,MAAM,EAAE,cAAc;IAM3B,MAAM,CACX,QAAQ,EAAE,eAAe,EAAE,EAC3B,KAAK,EAAE,sBAAsB,EAAE,EAC/B,OAAO,EAAE,sBAAsB,GAC9B,cAAc,CAAC,QAAQ,CAAC;CA8C5B;AAyRD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAEjF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ARK Protocol(火山引擎 Responses API)
3
+ *
4
+ * 只负责:
5
+ * - HTTP 请求发送
6
+ * - SSE 流解析
7
+ * - 原始事件产出
8
+ */
9
+ import type { Protocol, ProtocolConfig, ProtocolMessage, ProtocolToolDefinition, ProtocolRequestOptions, RawEvent } from './types';
10
+ /**
11
+ * ARK Protocol 实现
12
+ */
13
+ export declare class ArkProtocol implements Protocol {
14
+ readonly name = "ark";
15
+ private apiKey;
16
+ private apiUrl;
17
+ constructor(config: ProtocolConfig);
18
+ /**
19
+ * 发送请求并返回原始事件流
20
+ */
21
+ stream(messages: ProtocolMessage[], tools: ProtocolToolDefinition[], options: ProtocolRequestOptions): AsyncGenerator<RawEvent>;
22
+ /**
23
+ * 构建请求体
24
+ */
25
+ private buildRequestBody;
26
+ /**
27
+ * 转换消息格式
28
+ */
29
+ private convertMessages;
30
+ private parseSSE;
31
+ }
32
+ /**
33
+ * 创建 ARK Protocol
34
+ */
35
+ export declare function createArkProtocol(config: ProtocolConfig): ArkProtocol;
36
+ //# sourceMappingURL=ark.d.ts.map