@cicctencent/agent-core 0.1.18 → 0.1.20

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 (252) hide show
  1. package/README.md +70 -1
  2. package/dist/cjs/agent/engine.d.ts +23 -0
  3. package/dist/cjs/agent/engine.d.ts.map +1 -1
  4. package/dist/cjs/agent/engine.js +88 -9
  5. package/dist/cjs/agent/engine.js.map +1 -1
  6. package/dist/cjs/agent/history-manager.d.ts +66 -1
  7. package/dist/cjs/agent/history-manager.d.ts.map +1 -1
  8. package/dist/cjs/agent/history-manager.js +232 -0
  9. package/dist/cjs/agent/history-manager.js.map +1 -1
  10. package/dist/cjs/agent/llm-caller.d.ts +4 -1
  11. package/dist/cjs/agent/llm-caller.d.ts.map +1 -1
  12. package/dist/cjs/agent/llm-caller.js +25 -19
  13. package/dist/cjs/agent/llm-caller.js.map +1 -1
  14. package/dist/cjs/agent/profile-loader.d.ts +56 -0
  15. package/dist/cjs/agent/profile-loader.d.ts.map +1 -0
  16. package/dist/cjs/agent/profile-loader.js +145 -0
  17. package/dist/cjs/agent/profile-loader.js.map +1 -0
  18. package/dist/cjs/agent/types.d.ts +32 -3
  19. package/dist/cjs/agent/types.d.ts.map +1 -1
  20. package/dist/cjs/agent/types.js.map +1 -1
  21. package/dist/cjs/calendar/types.d.ts +41 -0
  22. package/dist/cjs/calendar/types.d.ts.map +1 -0
  23. package/dist/cjs/calendar/types.js +6 -0
  24. package/dist/cjs/calendar/types.js.map +1 -0
  25. package/dist/cjs/context/types.d.ts +3 -3
  26. package/dist/cjs/context/types.d.ts.map +1 -1
  27. package/dist/cjs/email/types.d.ts +46 -0
  28. package/dist/cjs/email/types.d.ts.map +1 -0
  29. package/dist/cjs/email/types.js +6 -0
  30. package/dist/cjs/email/types.js.map +1 -0
  31. package/dist/cjs/index.d.ts +28 -3
  32. package/dist/cjs/index.d.ts.map +1 -1
  33. package/dist/cjs/index.js +42 -11
  34. package/dist/cjs/index.js.map +1 -1
  35. package/dist/cjs/kb/in-memory-kb.d.ts +29 -0
  36. package/dist/cjs/kb/in-memory-kb.d.ts.map +1 -0
  37. package/dist/cjs/kb/in-memory-kb.js +210 -0
  38. package/dist/cjs/kb/in-memory-kb.js.map +1 -0
  39. package/dist/cjs/kb/rag-middleware.d.ts +31 -0
  40. package/dist/cjs/kb/rag-middleware.d.ts.map +1 -0
  41. package/dist/cjs/kb/rag-middleware.js +94 -0
  42. package/dist/cjs/kb/rag-middleware.js.map +1 -0
  43. package/dist/cjs/kb/types.d.ts +63 -0
  44. package/dist/cjs/kb/types.d.ts.map +1 -0
  45. package/dist/cjs/kb/types.js +6 -0
  46. package/dist/cjs/kb/types.js.map +1 -0
  47. package/dist/cjs/llm/anthropic-provider.d.ts +7 -0
  48. package/dist/cjs/llm/anthropic-provider.d.ts.map +1 -1
  49. package/dist/cjs/llm/anthropic-provider.js +84 -9
  50. package/dist/cjs/llm/anthropic-provider.js.map +1 -1
  51. package/dist/cjs/llm/ollama-provider.d.ts +18 -0
  52. package/dist/cjs/llm/ollama-provider.d.ts.map +1 -1
  53. package/dist/cjs/llm/ollama-provider.js +41 -0
  54. package/dist/cjs/llm/ollama-provider.js.map +1 -1
  55. package/dist/cjs/llm/openai-provider.d.ts +39 -2
  56. package/dist/cjs/llm/openai-provider.d.ts.map +1 -1
  57. package/dist/cjs/llm/openai-provider.js +302 -1
  58. package/dist/cjs/llm/openai-provider.js.map +1 -1
  59. package/dist/cjs/llm/pricing.d.ts +26 -0
  60. package/dist/cjs/llm/pricing.d.ts.map +1 -0
  61. package/dist/cjs/llm/pricing.js +86 -0
  62. package/dist/cjs/llm/pricing.js.map +1 -0
  63. package/dist/cjs/llm/provider.d.ts +2 -1
  64. package/dist/cjs/llm/provider.d.ts.map +1 -1
  65. package/dist/cjs/llm/provider.js +6 -1
  66. package/dist/cjs/llm/provider.js.map +1 -1
  67. package/dist/cjs/llm/types.d.ts +139 -0
  68. package/dist/cjs/llm/types.d.ts.map +1 -1
  69. package/dist/cjs/llm/types.js +74 -0
  70. package/dist/cjs/llm/types.js.map +1 -1
  71. package/dist/cjs/llm/usage-tracker.d.ts +119 -0
  72. package/dist/cjs/llm/usage-tracker.d.ts.map +1 -0
  73. package/dist/cjs/llm/usage-tracker.js +105 -0
  74. package/dist/cjs/llm/usage-tracker.js.map +1 -0
  75. package/dist/cjs/memory/extractor.js +1 -1
  76. package/dist/cjs/memory/extractor.js.map +1 -1
  77. package/dist/cjs/memory/persona.js +1 -1
  78. package/dist/cjs/memory/persona.js.map +1 -1
  79. package/dist/cjs/memory/scene.js +1 -1
  80. package/dist/cjs/memory/scene.js.map +1 -1
  81. package/dist/cjs/middleware/types.d.ts +2 -4
  82. package/dist/cjs/middleware/types.d.ts.map +1 -1
  83. package/dist/cjs/middleware/workspace-notes.d.ts +36 -0
  84. package/dist/cjs/middleware/workspace-notes.d.ts.map +1 -0
  85. package/dist/cjs/middleware/workspace-notes.js +53 -0
  86. package/dist/cjs/middleware/workspace-notes.js.map +1 -0
  87. package/dist/cjs/observability/logger.d.ts +1 -0
  88. package/dist/cjs/observability/logger.d.ts.map +1 -1
  89. package/dist/cjs/observability/logger.js.map +1 -1
  90. package/dist/cjs/observability/trace.d.ts +45 -0
  91. package/dist/cjs/observability/trace.d.ts.map +1 -0
  92. package/dist/cjs/observability/trace.js +59 -0
  93. package/dist/cjs/observability/trace.js.map +1 -0
  94. package/dist/cjs/runtime/run-registry-interface.d.ts +42 -0
  95. package/dist/cjs/runtime/run-registry-interface.d.ts.map +1 -0
  96. package/dist/cjs/runtime/run-registry-interface.js +7 -0
  97. package/dist/cjs/runtime/run-registry-interface.js.map +1 -0
  98. package/dist/cjs/runtime/run-registry.d.ts +15 -2
  99. package/dist/cjs/runtime/run-registry.d.ts.map +1 -1
  100. package/dist/cjs/runtime/run-registry.js +43 -1
  101. package/dist/cjs/runtime/run-registry.js.map +1 -1
  102. package/dist/cjs/sandbox/code-sandbox.d.ts +42 -0
  103. package/dist/cjs/sandbox/code-sandbox.d.ts.map +1 -0
  104. package/dist/cjs/sandbox/code-sandbox.js +59 -0
  105. package/dist/cjs/sandbox/code-sandbox.js.map +1 -0
  106. package/dist/cjs/skill/router.d.ts +20 -1
  107. package/dist/cjs/skill/router.d.ts.map +1 -1
  108. package/dist/cjs/skill/router.js +39 -1
  109. package/dist/cjs/skill/router.js.map +1 -1
  110. package/dist/cjs/skill/types.d.ts +1 -1
  111. package/dist/cjs/skill/types.d.ts.map +1 -1
  112. package/dist/cjs/skill/vector-index.d.ts +50 -0
  113. package/dist/cjs/skill/vector-index.d.ts.map +1 -0
  114. package/dist/cjs/skill/vector-index.js +57 -0
  115. package/dist/cjs/skill/vector-index.js.map +1 -0
  116. package/dist/cjs/store/history-persistence.d.ts +36 -0
  117. package/dist/cjs/store/history-persistence.d.ts.map +1 -0
  118. package/dist/cjs/store/history-persistence.js +142 -0
  119. package/dist/cjs/store/history-persistence.js.map +1 -0
  120. package/dist/cjs/types.d.ts +40 -1
  121. package/dist/cjs/types.d.ts.map +1 -1
  122. package/dist/cjs/types.js +34 -0
  123. package/dist/cjs/types.js.map +1 -1
  124. package/dist/cjs/utils/token-counter.d.ts.map +1 -1
  125. package/dist/cjs/utils/token-counter.js +33 -1
  126. package/dist/cjs/utils/token-counter.js.map +1 -1
  127. package/dist/esm/agent/engine.d.ts +23 -0
  128. package/dist/esm/agent/engine.d.ts.map +1 -1
  129. package/dist/esm/agent/engine.js +88 -9
  130. package/dist/esm/agent/engine.js.map +1 -1
  131. package/dist/esm/agent/history-manager.d.ts +66 -1
  132. package/dist/esm/agent/history-manager.d.ts.map +1 -1
  133. package/dist/esm/agent/history-manager.js +232 -0
  134. package/dist/esm/agent/history-manager.js.map +1 -1
  135. package/dist/esm/agent/llm-caller.d.ts +4 -1
  136. package/dist/esm/agent/llm-caller.d.ts.map +1 -1
  137. package/dist/esm/agent/llm-caller.js +25 -19
  138. package/dist/esm/agent/llm-caller.js.map +1 -1
  139. package/dist/esm/agent/profile-loader.d.ts +56 -0
  140. package/dist/esm/agent/profile-loader.d.ts.map +1 -0
  141. package/dist/esm/agent/profile-loader.js +108 -0
  142. package/dist/esm/agent/profile-loader.js.map +1 -0
  143. package/dist/esm/agent/types.d.ts +32 -3
  144. package/dist/esm/agent/types.d.ts.map +1 -1
  145. package/dist/esm/agent/types.js.map +1 -1
  146. package/dist/esm/calendar/types.d.ts +41 -0
  147. package/dist/esm/calendar/types.d.ts.map +1 -0
  148. package/dist/esm/calendar/types.js +5 -0
  149. package/dist/esm/calendar/types.js.map +1 -0
  150. package/dist/esm/context/types.d.ts +3 -3
  151. package/dist/esm/context/types.d.ts.map +1 -1
  152. package/dist/esm/email/types.d.ts +46 -0
  153. package/dist/esm/email/types.d.ts.map +1 -0
  154. package/dist/esm/email/types.js +5 -0
  155. package/dist/esm/email/types.js.map +1 -0
  156. package/dist/esm/index.d.ts +28 -3
  157. package/dist/esm/index.d.ts.map +1 -1
  158. package/dist/esm/index.js +12 -0
  159. package/dist/esm/index.js.map +1 -1
  160. package/dist/esm/kb/in-memory-kb.d.ts +29 -0
  161. package/dist/esm/kb/in-memory-kb.d.ts.map +1 -0
  162. package/dist/esm/kb/in-memory-kb.js +206 -0
  163. package/dist/esm/kb/in-memory-kb.js.map +1 -0
  164. package/dist/esm/kb/rag-middleware.d.ts +31 -0
  165. package/dist/esm/kb/rag-middleware.d.ts.map +1 -0
  166. package/dist/esm/kb/rag-middleware.js +91 -0
  167. package/dist/esm/kb/rag-middleware.js.map +1 -0
  168. package/dist/esm/kb/types.d.ts +63 -0
  169. package/dist/esm/kb/types.d.ts.map +1 -0
  170. package/dist/esm/kb/types.js +5 -0
  171. package/dist/esm/kb/types.js.map +1 -0
  172. package/dist/esm/llm/anthropic-provider.d.ts +7 -0
  173. package/dist/esm/llm/anthropic-provider.d.ts.map +1 -1
  174. package/dist/esm/llm/anthropic-provider.js +84 -9
  175. package/dist/esm/llm/anthropic-provider.js.map +1 -1
  176. package/dist/esm/llm/ollama-provider.d.ts +18 -0
  177. package/dist/esm/llm/ollama-provider.d.ts.map +1 -1
  178. package/dist/esm/llm/ollama-provider.js +41 -0
  179. package/dist/esm/llm/ollama-provider.js.map +1 -1
  180. package/dist/esm/llm/openai-provider.d.ts +39 -2
  181. package/dist/esm/llm/openai-provider.d.ts.map +1 -1
  182. package/dist/esm/llm/openai-provider.js +302 -1
  183. package/dist/esm/llm/openai-provider.js.map +1 -1
  184. package/dist/esm/llm/pricing.d.ts +26 -0
  185. package/dist/esm/llm/pricing.d.ts.map +1 -0
  186. package/dist/esm/llm/pricing.js +81 -0
  187. package/dist/esm/llm/pricing.js.map +1 -0
  188. package/dist/esm/llm/provider.d.ts +2 -1
  189. package/dist/esm/llm/provider.d.ts.map +1 -1
  190. package/dist/esm/llm/provider.js +1 -0
  191. package/dist/esm/llm/provider.js.map +1 -1
  192. package/dist/esm/llm/types.d.ts +139 -0
  193. package/dist/esm/llm/types.d.ts.map +1 -1
  194. package/dist/esm/llm/types.js +70 -1
  195. package/dist/esm/llm/types.js.map +1 -1
  196. package/dist/esm/llm/usage-tracker.d.ts +119 -0
  197. package/dist/esm/llm/usage-tracker.d.ts.map +1 -0
  198. package/dist/esm/llm/usage-tracker.js +101 -0
  199. package/dist/esm/llm/usage-tracker.js.map +1 -0
  200. package/dist/esm/memory/extractor.js +1 -1
  201. package/dist/esm/memory/extractor.js.map +1 -1
  202. package/dist/esm/memory/persona.js +1 -1
  203. package/dist/esm/memory/persona.js.map +1 -1
  204. package/dist/esm/memory/scene.js +1 -1
  205. package/dist/esm/memory/scene.js.map +1 -1
  206. package/dist/esm/middleware/types.d.ts +2 -4
  207. package/dist/esm/middleware/types.d.ts.map +1 -1
  208. package/dist/esm/middleware/workspace-notes.d.ts +36 -0
  209. package/dist/esm/middleware/workspace-notes.d.ts.map +1 -0
  210. package/dist/esm/middleware/workspace-notes.js +49 -0
  211. package/dist/esm/middleware/workspace-notes.js.map +1 -0
  212. package/dist/esm/observability/logger.d.ts +1 -0
  213. package/dist/esm/observability/logger.d.ts.map +1 -1
  214. package/dist/esm/observability/logger.js.map +1 -1
  215. package/dist/esm/observability/trace.d.ts +45 -0
  216. package/dist/esm/observability/trace.d.ts.map +1 -0
  217. package/dist/esm/observability/trace.js +55 -0
  218. package/dist/esm/observability/trace.js.map +1 -0
  219. package/dist/esm/runtime/run-registry-interface.d.ts +42 -0
  220. package/dist/esm/runtime/run-registry-interface.d.ts.map +1 -0
  221. package/dist/esm/runtime/run-registry-interface.js +6 -0
  222. package/dist/esm/runtime/run-registry-interface.js.map +1 -0
  223. package/dist/esm/runtime/run-registry.d.ts +15 -2
  224. package/dist/esm/runtime/run-registry.d.ts.map +1 -1
  225. package/dist/esm/runtime/run-registry.js +43 -1
  226. package/dist/esm/runtime/run-registry.js.map +1 -1
  227. package/dist/esm/sandbox/code-sandbox.d.ts +42 -0
  228. package/dist/esm/sandbox/code-sandbox.d.ts.map +1 -0
  229. package/dist/esm/sandbox/code-sandbox.js +56 -0
  230. package/dist/esm/sandbox/code-sandbox.js.map +1 -0
  231. package/dist/esm/skill/router.d.ts +20 -1
  232. package/dist/esm/skill/router.d.ts.map +1 -1
  233. package/dist/esm/skill/router.js +37 -0
  234. package/dist/esm/skill/router.js.map +1 -1
  235. package/dist/esm/skill/types.d.ts +1 -1
  236. package/dist/esm/skill/types.d.ts.map +1 -1
  237. package/dist/esm/skill/vector-index.d.ts +50 -0
  238. package/dist/esm/skill/vector-index.d.ts.map +1 -0
  239. package/dist/esm/skill/vector-index.js +53 -0
  240. package/dist/esm/skill/vector-index.js.map +1 -0
  241. package/dist/esm/store/history-persistence.d.ts +36 -0
  242. package/dist/esm/store/history-persistence.d.ts.map +1 -0
  243. package/dist/esm/store/history-persistence.js +105 -0
  244. package/dist/esm/store/history-persistence.js.map +1 -0
  245. package/dist/esm/types.d.ts +40 -1
  246. package/dist/esm/types.d.ts.map +1 -1
  247. package/dist/esm/types.js +32 -1
  248. package/dist/esm/types.js.map +1 -1
  249. package/dist/esm/utils/token-counter.d.ts.map +1 -1
  250. package/dist/esm/utils/token-counter.js +33 -1
  251. package/dist/esm/utils/token-counter.js.map +1 -1
  252. package/package.json +1 -1
@@ -132,4 +132,41 @@ export class SkillRouter {
132
132
  };
133
133
  }
134
134
  }
135
+ export class VectorRouteStrategy {
136
+ name = 'vector';
137
+ index;
138
+ embedFn;
139
+ topK;
140
+ minScore;
141
+ constructor(index, embedFn, options) {
142
+ this.index = index;
143
+ this.embedFn = embedFn;
144
+ this.topK = options?.topK ?? 5;
145
+ this.minScore = options?.minScore ?? 0.5;
146
+ }
147
+ async match(message, skills) {
148
+ if (this.index.size() === 0 || skills.length === 0)
149
+ return null;
150
+ // 将消息转换为向量
151
+ const queryVector = await this.embedFn(message);
152
+ // 向量搜索 top-K 候选
153
+ const results = await this.index.search(queryVector, this.topK);
154
+ if (results.length === 0)
155
+ return null;
156
+ // 取最佳匹配
157
+ const best = results[0];
158
+ if (best.score < this.minScore)
159
+ return null;
160
+ // 在 skills 列表中查找对应的 Skill
161
+ const skill = skills.find((s) => s.id === best.item.id);
162
+ if (!skill)
163
+ return null;
164
+ return {
165
+ skill,
166
+ message,
167
+ matchType: 'vector',
168
+ confidence: best.score,
169
+ };
170
+ }
171
+ }
135
172
  //# sourceMappingURL=router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/skill/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/skill/router.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export interface Skill extends SkillManifest {
35
35
  /** Skill 正文内容(懒加载时可能为空,需通过 SkillManager.get() 触发加载) */
36
36
  content: string;
37
37
  }
38
- export type MatchType = 'explicit' | 'keyword' | 'custom';
38
+ export type MatchType = 'explicit' | 'keyword' | 'custom' | 'vector';
39
39
  export interface RouteResult {
40
40
  /** 匹配到的 Skill(null 表示无匹配,使用裸 Agent) */
41
41
  skill: Skill | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/skill/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS;IACT,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,KAAM,SAAQ,aAAa;IAC1C,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACtE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/skill/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS;IACT,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,KAAM,SAAQ,aAAa;IAC1C,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACtE"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 向量索引项
3
+ */
4
+ export interface VectorItem {
5
+ /** 唯一 ID */
6
+ id: string;
7
+ /** 向量数据 */
8
+ vector: number[];
9
+ /** 关联的元数据 */
10
+ metadata?: Record<string, unknown>;
11
+ }
12
+ /**
13
+ * 向量检索结果
14
+ */
15
+ export interface VectorSearchResult {
16
+ /** 匹配项 */
17
+ item: VectorItem;
18
+ /** 相似度分数(0-1,越高越相关) */
19
+ score: number;
20
+ }
21
+ /**
22
+ * 向量索引接口 — Core 定义接口,App 可提供 embedding 增强版
23
+ */
24
+ export interface VectorIndex {
25
+ /** 构建索引(替换已有数据) */
26
+ build(items: VectorItem[]): Promise<void>;
27
+ /** 添加单个项 */
28
+ add(item: VectorItem): Promise<void>;
29
+ /** 搜索最相似的 topK 个项 */
30
+ search(query: number[], topK?: number): Promise<VectorSearchResult[]>;
31
+ /** 清空索引 */
32
+ clear(): void;
33
+ /** 索引大小 */
34
+ size(): number;
35
+ }
36
+ /**
37
+ * 内存向量索引 — 纯 JS 余弦相似度实现,零外部依赖
38
+ *
39
+ * 适合中小规模(<10000 项)场景。
40
+ * 大规模场景应由 App 层替换为基于 embedding 的持久化实现。
41
+ */
42
+ export declare class InMemoryVectorIndex implements VectorIndex {
43
+ private items;
44
+ build(items: VectorItem[]): Promise<void>;
45
+ add(item: VectorItem): Promise<void>;
46
+ search(query: number[], topK?: number): Promise<VectorSearchResult[]>;
47
+ clear(): void;
48
+ size(): number;
49
+ }
50
+ //# sourceMappingURL=vector-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-index.d.ts","sourceRoot":"","sources":["../../../src/skill/vector-index.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU;IACV,IAAI,EAAE,UAAU,CAAC;IACjB,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY;IACZ,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,qBAAqB;IACrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtE,WAAW;IACX,KAAK,IAAI,IAAI,CAAC;IACd,WAAW;IACX,IAAI,IAAI,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,KAAK,CAAoB;IAE3B,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAavE,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,MAAM;CAGf"}
@@ -0,0 +1,53 @@
1
+ // ============================================================
2
+ // VectorIndex — 向量索引接口与内存默认实现
3
+ // ============================================================
4
+ /**
5
+ * 内存向量索引 — 纯 JS 余弦相似度实现,零外部依赖
6
+ *
7
+ * 适合中小规模(<10000 项)场景。
8
+ * 大规模场景应由 App 层替换为基于 embedding 的持久化实现。
9
+ */
10
+ export class InMemoryVectorIndex {
11
+ items = [];
12
+ async build(items) {
13
+ this.items = [...items];
14
+ }
15
+ async add(item) {
16
+ this.items.push(item);
17
+ }
18
+ async search(query, topK = 10) {
19
+ if (this.items.length === 0 || query.length === 0)
20
+ return [];
21
+ const results = [];
22
+ for (const item of this.items) {
23
+ const score = cosineSimilarity(query, item.vector);
24
+ results.push({ item, score });
25
+ }
26
+ results.sort((a, b) => b.score - a.score);
27
+ return results.slice(0, topK);
28
+ }
29
+ clear() {
30
+ this.items = [];
31
+ }
32
+ size() {
33
+ return this.items.length;
34
+ }
35
+ }
36
+ /**
37
+ * 计算两个向量的余弦相似度
38
+ */
39
+ function cosineSimilarity(a, b) {
40
+ if (a.length !== b.length || a.length === 0)
41
+ return 0;
42
+ let dot = 0;
43
+ let magA = 0;
44
+ let magB = 0;
45
+ for (let i = 0; i < a.length; i++) {
46
+ dot += a[i] * b[i];
47
+ magA += a[i] * a[i];
48
+ magB += b[i] * b[i];
49
+ }
50
+ const denom = Math.sqrt(magA) * Math.sqrt(magB);
51
+ return denom === 0 ? 0 : dot / denom;
52
+ }
53
+ //# sourceMappingURL=vector-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-index.js","sourceRoot":"","sources":["../../../src/skill/vector-index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8BAA8B;AAC9B,+DAA+D;AAwC/D;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IACtB,KAAK,GAAiB,EAAE,CAAC;IAEjC,KAAK,CAAC,KAAK,CAAC,KAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAgB;QACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAe,EAAE,IAAI,GAAG,EAAE;QACrC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE7D,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,CAAW,EAAE,CAAW;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;AACvC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { Message } from '../types.js';
2
+ import type { HistoryPersistence } from '../agent/types.js';
3
+ export interface JsonlHistoryPersistenceOptions {
4
+ /** 存储目录(相对于 data 目录),默认 'history' */
5
+ dir?: string;
6
+ /** 使用项目级目录({cwd}/data)而非全局目录(~/.agent/data) */
7
+ projectLocal?: boolean;
8
+ /** 直接使用绝对路径(忽略 projectLocal 和 dir) */
9
+ absoluteDir?: string;
10
+ }
11
+ /**
12
+ * Append-only JSONL 会话历史持久化
13
+ *
14
+ * 文件路径:{dataDir}/{dir}/{sessionId}.jsonl
15
+ *
16
+ * 特点:
17
+ * - Append-only:只追加不修改,保证审计完整性
18
+ * - JSONL 格式:每行一条 JSON,人类可读,可用 jq/grep 查询
19
+ * - 异步写入:不阻塞 Agent Loop
20
+ * - 容错:损坏行跳过,不中断加载
21
+ */
22
+ export declare class JsonlHistoryPersistence implements HistoryPersistence {
23
+ private dir;
24
+ private projectLocal;
25
+ private absoluteDir?;
26
+ constructor(options?: JsonlHistoryPersistenceOptions);
27
+ /** 获取会话历史文件路径 */
28
+ private getFilePath;
29
+ /** 确保目录存在 */
30
+ private ensureDir;
31
+ save(sessionId: string, message: Message): Promise<void>;
32
+ load(sessionId: string): Promise<Message[] | null>;
33
+ delete(sessionId: string): Promise<void>;
34
+ exists(sessionId: string): Promise<boolean>;
35
+ }
36
+ //# sourceMappingURL=history-persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-persistence.d.ts","sourceRoot":"","sources":["../../../src/store/history-persistence.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,MAAM,WAAW,8BAA8B;IAC7C,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAS;gBAEjB,OAAO,GAAE,8BAAmC;IAMxD,iBAAiB;IACjB,OAAO,CAAC,WAAW;IASnB,aAAa;YACC,SAAS;IAOjB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IA+BlD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CASlD"}
@@ -0,0 +1,105 @@
1
+ // ============================================================
2
+ // JsonlHistoryPersistence — Append-only JSONL 会话历史持久化
3
+ // ============================================================
4
+ //
5
+ // 每个 session 一个 .jsonl 文件,每行一条 Message JSON。
6
+ // - save(): 追加一行(append-only,不覆盖已有内容)
7
+ // - load(): 逐行读取重建 Message[]
8
+ // - delete(): 删除文件
9
+ //
10
+ // 设计参考:Claude Code 的 append-only JSONL 转录
11
+ import * as fsp from 'fs/promises';
12
+ import * as path from 'path';
13
+ import { getDataPath } from "../utils/data-dir.js";
14
+ /**
15
+ * Append-only JSONL 会话历史持久化
16
+ *
17
+ * 文件路径:{dataDir}/{dir}/{sessionId}.jsonl
18
+ *
19
+ * 特点:
20
+ * - Append-only:只追加不修改,保证审计完整性
21
+ * - JSONL 格式:每行一条 JSON,人类可读,可用 jq/grep 查询
22
+ * - 异步写入:不阻塞 Agent Loop
23
+ * - 容错:损坏行跳过,不中断加载
24
+ */
25
+ export class JsonlHistoryPersistence {
26
+ dir;
27
+ projectLocal;
28
+ absoluteDir;
29
+ constructor(options = {}) {
30
+ this.dir = options.dir || 'history';
31
+ this.projectLocal = options.projectLocal ?? false;
32
+ this.absoluteDir = options.absoluteDir;
33
+ }
34
+ /** 获取会话历史文件路径 */
35
+ getFilePath(sessionId) {
36
+ // 防止路径遍历:只允许字母数字和 -_
37
+ const safeId = sessionId.replace(/[^a-zA-Z0-9_-]/g, '_');
38
+ if (this.absoluteDir) {
39
+ return path.join(this.absoluteDir, `${safeId}.jsonl`);
40
+ }
41
+ return getDataPath(`${this.dir}/${safeId}.jsonl`);
42
+ }
43
+ /** 确保目录存在 */
44
+ async ensureDir() {
45
+ const dirPath = this.absoluteDir
46
+ ? this.absoluteDir
47
+ : path.dirname(getDataPath(`${this.dir}/.placeholder`));
48
+ await fsp.mkdir(dirPath, { recursive: true });
49
+ }
50
+ async save(sessionId, message) {
51
+ await this.ensureDir();
52
+ const filePath = this.getFilePath(sessionId);
53
+ const line = JSON.stringify(message) + '\n';
54
+ await fsp.appendFile(filePath, line, 'utf-8');
55
+ }
56
+ async load(sessionId) {
57
+ const filePath = this.getFilePath(sessionId);
58
+ try {
59
+ await fsp.access(filePath);
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ try {
65
+ const raw = await fsp.readFile(filePath, 'utf-8');
66
+ const lines = raw.split('\n').filter(line => line.trim());
67
+ const messages = [];
68
+ for (const line of lines) {
69
+ try {
70
+ const msg = JSON.parse(line);
71
+ messages.push(msg);
72
+ }
73
+ catch {
74
+ // 跳过损坏行(如写入中断导致的不完整 JSON)
75
+ console.warn(`[JsonlHistoryPersistence] Skipped malformed line in ${filePath}`);
76
+ }
77
+ }
78
+ return messages;
79
+ }
80
+ catch (e) {
81
+ console.error(`[JsonlHistoryPersistence] load error: ${filePath}`, e);
82
+ return null;
83
+ }
84
+ }
85
+ async delete(sessionId) {
86
+ const filePath = this.getFilePath(sessionId);
87
+ try {
88
+ await fsp.unlink(filePath);
89
+ }
90
+ catch {
91
+ // 文件不存在时静默忽略
92
+ }
93
+ }
94
+ async exists(sessionId) {
95
+ const filePath = this.getFilePath(sessionId);
96
+ try {
97
+ await fsp.access(filePath);
98
+ return true;
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ }
104
+ }
105
+ //# sourceMappingURL=history-persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-persistence.js","sourceRoot":"","sources":["../../../src/store/history-persistence.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,30 @@
1
+ /** 文本内容部分 */
2
+ export interface TextPart {
3
+ type: 'text';
4
+ text: string;
5
+ }
6
+ /** 图片内容部分 */
7
+ export interface ImagePart {
8
+ type: 'image';
9
+ /** 图片来源:URL(http/https)或 base64 data URI(data:image/png;base64,...) */
10
+ source: string;
11
+ /** 图片 MIME 类型(如 image/png, image/jpeg),base64 时可从 data URI 推断 */
12
+ mimeType?: string;
13
+ /** 图片详情级别(OpenAI: low/high/auto),默认 auto */
14
+ detail?: 'low' | 'high' | 'auto';
15
+ }
16
+ /** 文件内容部分(PDF、文档等,由上层解析为文本后注入) */
17
+ export interface FilePart {
18
+ type: 'file';
19
+ /** 文件名 */
20
+ filename: string;
21
+ /** 文件内容(文本形式,已由上层解析提取) */
22
+ content: string;
23
+ /** 文件 MIME 类型 */
24
+ mimeType?: string;
25
+ }
26
+ /** 多模态内容部分(discriminated union) */
27
+ export type ContentPart = TextPart | ImagePart | FilePart;
1
28
  /** 消息角色 */
2
29
  export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
3
30
  /** LLM 发起的工具调用 */
@@ -12,7 +39,8 @@ export interface ToolCall {
12
39
  /** LLM 消息 */
13
40
  export interface Message {
14
41
  role: MessageRole;
15
- content: string | null;
42
+ /** 消息内容:纯文本字符串、多模态内容部分数组、或 null(无内容) */
43
+ content: string | ContentPart[] | null;
16
44
  /** assistant 消息中的工具调用请求 */
17
45
  tool_calls?: ToolCall[];
18
46
  /** tool 消息对应的 tool_call id */
@@ -24,6 +52,17 @@ export interface Message {
24
52
  /** 扩展字段,上层可附加任意元数据 */
25
53
  metadata?: Record<string, unknown>;
26
54
  }
55
+ /**
56
+ * 从 Message.content 中提取纯文本(用于 Skill 路由、去重检测等场景)
57
+ * - string 直接返回
58
+ * - ContentPart[] 拼接所有 TextPart 和 FilePart 的文本
59
+ * - null 返回空字符串
60
+ */
61
+ export declare function extractTextFromContent(content: string | ContentPart[] | null): string;
62
+ /**
63
+ * 判断消息内容是否为多模态(包含非文本部分)
64
+ */
65
+ export declare function isMultimodalContent(content: string | ContentPart[] | null): boolean;
27
66
  /** 所有事件的公共基座 */
28
67
  export interface BaseEvent {
29
68
  /** 事件时间戳(毫秒) */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/dist/esm/types.js CHANGED
@@ -1,5 +1,36 @@
1
1
  // ============================================================
2
2
  // Core 全局共享类型
3
3
  // ============================================================
4
- export {};
4
+ // ---- ContentPart 辅助函数 ----
5
+ /**
6
+ * 从 Message.content 中提取纯文本(用于 Skill 路由、去重检测等场景)
7
+ * - string 直接返回
8
+ * - ContentPart[] 拼接所有 TextPart 和 FilePart 的文本
9
+ * - null 返回空字符串
10
+ */
11
+ export function extractTextFromContent(content) {
12
+ if (content == null)
13
+ return '';
14
+ if (typeof content === 'string')
15
+ return content;
16
+ return content
17
+ .map(part => {
18
+ if (part.type === 'text')
19
+ return part.text;
20
+ if (part.type === 'file')
21
+ return `[file: ${part.filename}]\n${part.content}`;
22
+ if (part.type === 'image')
23
+ return `[image: ${part.source.slice(0, 80)}]`;
24
+ return '';
25
+ })
26
+ .join('\n');
27
+ }
28
+ /**
29
+ * 判断消息内容是否为多模态(包含非文本部分)
30
+ */
31
+ export function isMultimodalContent(content) {
32
+ if (content == null || typeof content === 'string')
33
+ return false;
34
+ return content.some(part => part.type === 'image' || part.type === 'file');
35
+ }
5
36
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,cAAc;AACd,+DAA+D"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,cAAc;AACd,+DAA+D;AAmE/D,6BAA6B;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAsC;IAC3E,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,OAAO;SACX,GAAG,CAAC,IAAI,CAAC,EAAE;QACV,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,UAAU,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAsC;IACxE,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../../../src/utils/token-counter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA6B3C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuBhD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA0B9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD"}
1
+ {"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../../../src/utils/token-counter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AA6BxD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuBhD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAiC9D;AA0BD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD"}
@@ -67,7 +67,15 @@ export function countMessageTokens(messages) {
67
67
  total += countTokens(msg.role || '');
68
68
  // content
69
69
  if (msg.content) {
70
- total += countTokens(typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content));
70
+ if (typeof msg.content === 'string') {
71
+ total += countTokens(msg.content);
72
+ }
73
+ else {
74
+ // ContentPart[]:逐部分计算
75
+ for (const part of msg.content) {
76
+ total += countContentPartTokens(part);
77
+ }
78
+ }
71
79
  }
72
80
  // tool_calls (序列化后的 token 数)
73
81
  if (msg.tool_calls) {
@@ -85,6 +93,30 @@ export function countMessageTokens(messages) {
85
93
  total += 2;
86
94
  return total;
87
95
  }
96
+ /**
97
+ * 计算单个 ContentPart 的 token 估算值
98
+ * - TextPart: 精确计数
99
+ * - ImagePart: 按详情级别估算(参考 OpenAI Vision 定价)
100
+ * - low: ~85 tokens(512x512 固定)
101
+ * - high: ~170 tokens/tile(最多 4 tiles → ~680)
102
+ * - auto: 默认按 low 估算
103
+ * - FilePart: 计数文本内容
104
+ */
105
+ function countContentPartTokens(part) {
106
+ switch (part.type) {
107
+ case 'text':
108
+ return countTokens(part.text);
109
+ case 'image':
110
+ // OpenAI Vision: low=85, high=170*tiles(1-4), auto≈85
111
+ if (part.detail === 'high')
112
+ return 680;
113
+ return 85;
114
+ case 'file':
115
+ return countTokens(part.content) + countTokens(part.filename);
116
+ default:
117
+ return 0;
118
+ }
119
+ }
88
120
  /**
89
121
  * 估算文本 token 数(快速估算,不加载 tiktoken)
90
122
  * 适用于对精度要求不高的场景,约 4 字符 = 1 token
@@ -1 +1 @@
1
- {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../../../src/utils/token-counter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../../../src/utils/token-counter.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uCAAuC;AACvC,+DAA+D;AAE/D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGzD,iDAAiD;AACjD,IAAI,OAAO,GAAoB,IAAI,CAAC;AAEpC;;;GAGG;AACH,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE7C;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC;YACH,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;YAC9B,OAAO,GAAG,IAAI,QAAQ,CACpB,OAAO,CAAC,+BAA+B,CAAC,CACzC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,OAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IAEpB,OAAO;IACP,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,qBAAqB;QACrB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAE/C,cAAc;IACd,IAAI,UAAU,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC;QACvC,2BAA2B;QAC3B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACjD,IAAI,SAAS,KAAK,SAAS;YAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAmB;IACpD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,mCAAmC;QACnC,KAAK,IAAI,CAAC,CAAC;QACX,OAAO;QACP,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACrC,UAAU;QACV,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpC,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,sBAAsB;gBACtB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC/B,KAAK,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QACD,6BAA6B;QAC7B,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAChC,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9C,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,+BAA+B;QAC/B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,2BAA2B;IAC3B,KAAK,IAAI,CAAC,CAAC;IACX,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAAC,IAAiB;IAC/C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,KAAK,OAAO;YACV,sDAAsD;YACtD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,GAAG,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChE;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cicctencent/agent-core",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "description": "Core engine for AI agent — LLM orchestration, tool execution, MCP, skill routing, security, and memory pipeline.",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",