@aalis/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +21 -0
  2. package/dist/app.d.ts +166 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +348 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/config.d.ts +174 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +377 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/constants.d.ts +31 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +36 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/context.d.ts +328 -0
  15. package/dist/context.d.ts.map +1 -0
  16. package/dist/context.js +521 -0
  17. package/dist/context.js.map +1 -0
  18. package/dist/disposable-chain.d.ts +31 -0
  19. package/dist/disposable-chain.d.ts.map +1 -0
  20. package/dist/disposable-chain.js +66 -0
  21. package/dist/disposable-chain.js.map +1 -0
  22. package/dist/events.d.ts +64 -0
  23. package/dist/events.d.ts.map +1 -0
  24. package/dist/events.js +145 -0
  25. package/dist/events.js.map +1 -0
  26. package/dist/hooks.d.ts +49 -0
  27. package/dist/hooks.d.ts.map +1 -0
  28. package/dist/hooks.js +102 -0
  29. package/dist/hooks.js.map +1 -0
  30. package/dist/i18n.d.ts +6 -0
  31. package/dist/i18n.d.ts.map +1 -0
  32. package/dist/i18n.js +26 -0
  33. package/dist/i18n.js.map +1 -0
  34. package/dist/identity.d.ts +26 -0
  35. package/dist/identity.d.ts.map +1 -0
  36. package/dist/identity.js +36 -0
  37. package/dist/identity.js.map +1 -0
  38. package/dist/index.d.ts +17 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +29 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/init.d.ts +20 -0
  43. package/dist/init.d.ts.map +1 -0
  44. package/dist/init.js +455 -0
  45. package/dist/init.js.map +1 -0
  46. package/dist/llm-router.d.ts.map +1 -0
  47. package/dist/llm-router.js +123 -0
  48. package/dist/llm-router.js.map +1 -0
  49. package/dist/logger.d.ts +76 -0
  50. package/dist/logger.d.ts.map +1 -0
  51. package/dist/logger.js +187 -0
  52. package/dist/logger.js.map +1 -0
  53. package/dist/marketplace-bootstrap.d.ts +54 -0
  54. package/dist/marketplace-bootstrap.d.ts.map +1 -0
  55. package/dist/marketplace-bootstrap.js +132 -0
  56. package/dist/marketplace-bootstrap.js.map +1 -0
  57. package/dist/mixin-registry.d.ts +34 -0
  58. package/dist/mixin-registry.d.ts.map +1 -0
  59. package/dist/mixin-registry.js +60 -0
  60. package/dist/mixin-registry.js.map +1 -0
  61. package/dist/model-ref.d.ts +22 -0
  62. package/dist/model-ref.d.ts.map +1 -0
  63. package/dist/model-ref.js +46 -0
  64. package/dist/model-ref.js.map +1 -0
  65. package/dist/pending-buffer.d.ts +46 -0
  66. package/dist/pending-buffer.d.ts.map +1 -0
  67. package/dist/pending-buffer.js +131 -0
  68. package/dist/pending-buffer.js.map +1 -0
  69. package/dist/platform-registry.d.ts +40 -0
  70. package/dist/platform-registry.d.ts.map +1 -0
  71. package/dist/platform-registry.js +64 -0
  72. package/dist/platform-registry.js.map +1 -0
  73. package/dist/plugin-activation.d.ts +43 -0
  74. package/dist/plugin-activation.d.ts.map +1 -0
  75. package/dist/plugin-activation.js +172 -0
  76. package/dist/plugin-activation.js.map +1 -0
  77. package/dist/plugin-topology.d.ts +40 -0
  78. package/dist/plugin-topology.d.ts.map +1 -0
  79. package/dist/plugin-topology.js +126 -0
  80. package/dist/plugin-topology.js.map +1 -0
  81. package/dist/plugin.d.ts +184 -0
  82. package/dist/plugin.d.ts.map +1 -0
  83. package/dist/plugin.js +549 -0
  84. package/dist/plugin.js.map +1 -0
  85. package/dist/providers.d.ts +85 -0
  86. package/dist/providers.d.ts.map +1 -0
  87. package/dist/providers.js +2 -0
  88. package/dist/providers.js.map +1 -0
  89. package/dist/semver-mini.d.ts +20 -0
  90. package/dist/semver-mini.d.ts.map +1 -0
  91. package/dist/semver-mini.js +94 -0
  92. package/dist/semver-mini.js.map +1 -0
  93. package/dist/service-helpers.d.ts +34 -0
  94. package/dist/service-helpers.d.ts.map +1 -0
  95. package/dist/service-helpers.js +68 -0
  96. package/dist/service-helpers.js.map +1 -0
  97. package/dist/service.d.ts +145 -0
  98. package/dist/service.d.ts.map +1 -0
  99. package/dist/service.js +279 -0
  100. package/dist/service.js.map +1 -0
  101. package/dist/types/agent.d.ts +51 -0
  102. package/dist/types/agent.d.ts.map +1 -0
  103. package/dist/types/agent.js +3 -0
  104. package/dist/types/agent.js.map +1 -0
  105. package/dist/types/app.d.ts +74 -0
  106. package/dist/types/app.d.ts.map +1 -0
  107. package/dist/types/app.js +3 -0
  108. package/dist/types/app.js.map +1 -0
  109. package/dist/types/archive.d.ts +59 -0
  110. package/dist/types/archive.d.ts.map +1 -0
  111. package/dist/types/archive.js +16 -0
  112. package/dist/types/archive.js.map +1 -0
  113. package/dist/types/authority.d.ts +63 -0
  114. package/dist/types/authority.d.ts.map +1 -0
  115. package/dist/types/authority.js +3 -0
  116. package/dist/types/authority.js.map +1 -0
  117. package/dist/types/capabilities.d.ts +53 -0
  118. package/dist/types/capabilities.d.ts.map +1 -0
  119. package/dist/types/capabilities.js +87 -0
  120. package/dist/types/capabilities.js.map +1 -0
  121. package/dist/types/cli.d.ts +14 -0
  122. package/dist/types/cli.d.ts.map +1 -0
  123. package/dist/types/cli.js +3 -0
  124. package/dist/types/cli.js.map +1 -0
  125. package/dist/types/commands.d.ts +98 -0
  126. package/dist/types/commands.d.ts.map +1 -0
  127. package/dist/types/commands.js +3 -0
  128. package/dist/types/commands.js.map +1 -0
  129. package/dist/types/core.d.ts +117 -0
  130. package/dist/types/core.d.ts.map +1 -0
  131. package/dist/types/core.js +6 -0
  132. package/dist/types/core.js.map +1 -0
  133. package/dist/types/disposable-service.d.ts +31 -0
  134. package/dist/types/disposable-service.d.ts.map +1 -0
  135. package/dist/types/disposable-service.js +3 -0
  136. package/dist/types/disposable-service.js.map +1 -0
  137. package/dist/types/embedding.d.ts +7 -0
  138. package/dist/types/embedding.d.ts.map +1 -0
  139. package/dist/types/embedding.js +3 -0
  140. package/dist/types/embedding.js.map +1 -0
  141. package/dist/types/flow-control.d.ts +51 -0
  142. package/dist/types/flow-control.d.ts.map +1 -0
  143. package/dist/types/flow-control.js +12 -0
  144. package/dist/types/flow-control.js.map +1 -0
  145. package/dist/types/gateway.d.ts +24 -0
  146. package/dist/types/gateway.d.ts.map +1 -0
  147. package/dist/types/gateway.js +15 -0
  148. package/dist/types/gateway.js.map +1 -0
  149. package/dist/types/hooks.d.ts +3 -0
  150. package/dist/types/hooks.d.ts.map +1 -0
  151. package/dist/types/hooks.js +18 -0
  152. package/dist/types/hooks.js.map +1 -0
  153. package/dist/types/image-recognition.d.ts +123 -0
  154. package/dist/types/image-recognition.d.ts.map +1 -0
  155. package/dist/types/image-recognition.js +31 -0
  156. package/dist/types/image-recognition.js.map +1 -0
  157. package/dist/types/index.d.ts +8 -0
  158. package/dist/types/index.d.ts.map +1 -0
  159. package/dist/types/index.js +17 -0
  160. package/dist/types/index.js.map +1 -0
  161. package/dist/types/llm.d.ts +146 -0
  162. package/dist/types/llm.d.ts.map +1 -0
  163. package/dist/types/llm.js +27 -0
  164. package/dist/types/llm.js.map +1 -0
  165. package/dist/types/memory.d.ts +62 -0
  166. package/dist/types/memory.d.ts.map +1 -0
  167. package/dist/types/memory.js +22 -0
  168. package/dist/types/memory.js.map +1 -0
  169. package/dist/types/persona.d.ts +45 -0
  170. package/dist/types/persona.d.ts.map +1 -0
  171. package/dist/types/persona.js +3 -0
  172. package/dist/types/persona.js.map +1 -0
  173. package/dist/types/platform.d.ts +126 -0
  174. package/dist/types/platform.d.ts.map +1 -0
  175. package/dist/types/platform.js +5 -0
  176. package/dist/types/platform.js.map +1 -0
  177. package/dist/types/plugin.d.ts +84 -0
  178. package/dist/types/plugin.d.ts.map +1 -0
  179. package/dist/types/plugin.js +24 -0
  180. package/dist/types/plugin.js.map +1 -0
  181. package/dist/types/service.d.ts +43 -0
  182. package/dist/types/service.d.ts.map +1 -0
  183. package/dist/types/service.js +38 -0
  184. package/dist/types/service.js.map +1 -0
  185. package/dist/types/services.d.ts +17 -0
  186. package/dist/types/services.d.ts.map +1 -0
  187. package/dist/types/services.js +41 -0
  188. package/dist/types/services.js.map +1 -0
  189. package/dist/types/session.d.ts +153 -0
  190. package/dist/types/session.d.ts.map +1 -0
  191. package/dist/types/session.js +19 -0
  192. package/dist/types/session.js.map +1 -0
  193. package/dist/types/storage.d.ts +100 -0
  194. package/dist/types/storage.d.ts.map +1 -0
  195. package/dist/types/storage.js +29 -0
  196. package/dist/types/storage.js.map +1 -0
  197. package/dist/types/tools.d.ts +39 -0
  198. package/dist/types/tools.d.ts.map +1 -0
  199. package/dist/types/tools.js +3 -0
  200. package/dist/types/tools.js.map +1 -0
  201. package/dist/types/trigger-policy.d.ts +16 -0
  202. package/dist/types/trigger-policy.d.ts.map +1 -0
  203. package/dist/types/trigger-policy.js +6 -0
  204. package/dist/types/trigger-policy.js.map +1 -0
  205. package/dist/types/vectorstore.d.ts +23 -0
  206. package/dist/types/vectorstore.d.ts.map +1 -0
  207. package/dist/types/vectorstore.js +3 -0
  208. package/dist/types/vectorstore.js.map +1 -0
  209. package/dist/types/web-search.d.ts +88 -0
  210. package/dist/types/web-search.d.ts.map +1 -0
  211. package/dist/types/web-search.js +23 -0
  212. package/dist/types/web-search.js.map +1 -0
  213. package/dist/types/webui.d.ts +137 -0
  214. package/dist/types/webui.d.ts.map +1 -0
  215. package/dist/types/webui.js +3 -0
  216. package/dist/types/webui.js.map +1 -0
  217. package/package.json +22 -0
@@ -0,0 +1,38 @@
1
+ // ----- 服务容器类型与纯辅助函数 -----
2
+ //
3
+ // 与运行时实现 (ServiceContainer) 分离,避免下游消费者只为类型而拉入 class。
4
+ // 实现详见 ../service.ts。
5
+ /**
6
+ * 服务优先级约定(数字越大越优先)
7
+ *
8
+ * 用于 `ctx.provide(name, instance, { priority })`。
9
+ * 同优先级时,先注册的胜出(稳定降序排序)。
10
+ *
11
+ * 设计目的:把『谁是默认胜者』变成静态、可预测的契约,
12
+ * 替代旧版 preferService 那种「需要用户手动激活」的运行时偏好。
13
+ *
14
+ * 推荐用法:
15
+ * - `Backend = 0`:普通后端实现(如 plugin-openai / plugin-deepseek)。
16
+ * - `Override = 50`:用户级覆盖;同名服务希望默认胜过普通后端时使用。
17
+ * - `System = 200`:保留给核心系统级覆盖。
18
+ *
19
+ * 注:feat/service-granularity 之后已不再有 router/facade 层级——LLM / storage / platform
20
+ * 均改为按 model / root / sessionId 直接注册多 entry,跨 entry 的聚合与路由由各自
21
+ * `*-api` 的 helper 函数承担(`createStorageGateway` / `resolvePlatformBySession` / ...),
22
+ * 没有同名 facade entry,因此曾经的 `Router = 100` 槽位整体废弃。
23
+ */
24
+ export const ServicePriority = {
25
+ Backend: 0,
26
+ Override: 50,
27
+ System: 200,
28
+ };
29
+ /**
30
+ * 将 string | ServiceDependency 统一为 NormalizedDependency
31
+ */
32
+ export function normalizeDependency(dep) {
33
+ if (typeof dep === 'string') {
34
+ return { service: dep, capabilities: [] };
35
+ }
36
+ return { service: dep.service, capabilities: dep.capabilities ?? [] };
37
+ }
38
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/types/service.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,EAAE;AACF,qDAAqD;AACrD,sBAAsB;AAItB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,GAAG;CACH,CAAC;AAiBX;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAA0B;IAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;AACxE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 全局服务类型注册表
3
+ *
4
+ * **不要在 core 内部为任何服务名登记条目**——所有内置服务都由其 api 包就近
5
+ * 通过 declaration merging 注入。这样保持 core 与具体服务实现解耦。
6
+ */
7
+ export interface ServiceTypeMap {
8
+ }
9
+ /**
10
+ * 根据服务名解析其实例类型。
11
+ * - 已登记的服务名(在 ServiceTypeMap 中)→ 对应接口
12
+ * - 未登记的服务名 → `unknown`(强制使用方主动 narrow,避免 footgun)
13
+ *
14
+ * 用户便利类型;core 自己用 `ServiceTypeMap[TName]` 直接索引。
15
+ */
16
+ export type ServiceOf<TName extends string> = TName extends keyof ServiceTypeMap ? ServiceTypeMap[TName] : unknown;
17
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/types/services.ts"],"names":[],"mappings":"AAwCA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;CAAG;AAElC;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC"}
@@ -0,0 +1,41 @@
1
+ // ----- 服务类型注册表(service name → service interface) -----
2
+ //
3
+ // 与 `ServiceCapabilityMap`(capabilities.ts)对称:那里登记服务名 → 能力字面量
4
+ // union,这里登记服务名 → 服务实例接口本身。`Context.provide` / `getService`
5
+ // 在编译期同时受这两层约束。
6
+ //
7
+ // ## 用法
8
+ //
9
+ // 每个 service api 包通过 declaration merging 反向注入自己一条:
10
+ //
11
+ // ```ts
12
+ // // packages/plugin-memory-api/src/index.ts
13
+ // declare module '@aalis/core' {
14
+ // interface ServiceTypeMap {
15
+ // memory: MemoryService;
16
+ // }
17
+ // }
18
+ // ```
19
+ //
20
+ // 之后使用方:
21
+ //
22
+ // ```ts
23
+ // const m = ctx.getService('memory'); // 自动推断为 MemoryService | undefined
24
+ // const m2 = ctx.getService('memory'); // 旧式手动写法仍然可用
25
+ // ```
26
+ //
27
+ // ## escape hatch
28
+ //
29
+ // `Context.getService` 提供两个重载:
30
+ // 1. `<TName extends keyof ServiceTypeMap>(name: TName, ...)` —— 字面量自动强类型
31
+ // 2. `<T = unknown>(name: string, ...)` —— 字符串变量退回 `unknown`,
32
+ // 用于 router 类插件(plugin-llm-router / plugin-storage-router)按运行时
33
+ // 变量寻址 service 的场景。
34
+ //
35
+ // ## 边界
36
+ //
37
+ // - 第三方插件未 declare:使用方就走 unknown 重载(依旧能用,但失去自动推断)。
38
+ // - 同名服务多个实现(如 'memory' 同时被 sqlite/inmemory/mongodb provide):
39
+ // 类型契约相同,落到同一条目即可,运行时按 priority + preference 选择。
40
+ export {};
41
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/types/services.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,8DAA8D;AAC9D,4DAA4D;AAC5D,gBAAgB;AAChB,EAAE;AACF,QAAQ;AACR,EAAE;AACF,mDAAmD;AACnD,EAAE;AACF,QAAQ;AACR,6CAA6C;AAC7C,iCAAiC;AACjC,+BAA+B;AAC/B,6BAA6B;AAC7B,MAAM;AACN,IAAI;AACJ,MAAM;AACN,EAAE;AACF,SAAS;AACT,EAAE;AACF,QAAQ;AACR,gFAAgF;AAChF,qDAAqD;AACrD,MAAM;AACN,EAAE;AACF,kBAAkB;AAClB,EAAE;AACF,+BAA+B;AAC/B,4EAA4E;AAC5E,gEAAgE;AAChE,oEAAoE;AACpE,yBAAyB;AACzB,EAAE;AACF,QAAQ;AACR,EAAE;AACF,mDAAmD;AACnD,8DAA8D;AAC9D,mDAAmD"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * 会话级配置覆盖
3
+ *
4
+ * 每个会话可以独立配置 LLM 提供者、模型、工具集、人设等。
5
+ * Agent 处理消息时通过 session-manager 的 resolveConfig() 获取最终生效配置。
6
+ *
7
+ * 配置解析优先级(从高到低):
8
+ * 1. 会话自身 config(手工覆盖 / /model 指令设置)
9
+ * 2. 父会话默认配置(sessionDefaults,供子会话继承)
10
+ * 3. 平台默认配置(platformProfiles[platform])
11
+ * 4. 全局默认(各插件的 defaultConfig)
12
+ */
13
+ export interface SessionConfig {
14
+ /** LLM 提供者 contextId(指定使用哪个 LLM 插件实例) */
15
+ llmProvider?: string;
16
+ /** 模型 ID(如 'gpt-4o', 'deepseek-chat') */
17
+ model?: string;
18
+ /** 启用的工具分组列表(为空时使用全局默认) */
19
+ enabledToolGroups?: string[];
20
+ /** 人格文件名(不含后缀,如 'aalis', 'aalis-webui', 'default') */
21
+ persona?: string;
22
+ /** 额外系统提示(追加到人格提示之后) */
23
+ systemPromptExtra?: string;
24
+ /** 最大工具迭代次数覆盖 */
25
+ maxToolIterations?: number;
26
+ /** 禁用结构化输出格式(该会话回复纯文本) */
27
+ disableOutputFormat?: boolean;
28
+ /** JSON 内容由客户端渲染,服务端不提取回复字段 */
29
+ clientSideJsonRendering?: boolean;
30
+ /** 子会话默认配置(创建子会话时自动继承,子会话可进一步覆盖) */
31
+ sessionDefaults?: Omit<SessionConfig, 'sessionDefaults'>;
32
+ }
33
+ /**
34
+ * 平台配置模板
35
+ *
36
+ * 为每个平台设定默认的 SessionConfig。
37
+ * 新建会话时,根据消息来源的平台自动应用对应模板。
38
+ * 在 session-manager 的 configSchema 中通过 WebUI 配置。
39
+ */
40
+ export type PlatformProfile = SessionConfig;
41
+ /**
42
+ * 会话信息
43
+ *
44
+ * 代表一个独立的对话会话,可拥有独立配置和树形层级关系。
45
+ * 树形结构为未来 agent 任务拆分和协作奠定基础。
46
+ */
47
+ export interface SessionInfo {
48
+ /** 会话唯一标识 */
49
+ id: string;
50
+ /** 会话显示名称 */
51
+ name: string;
52
+ /** 自动生成的会话标题(AI 总结,或父会话指定) */
53
+ title?: string;
54
+ /** 父会话 ID(根会话为 undefined) */
55
+ parentId?: string;
56
+ /** 子会话 ID 列表 */
57
+ children: string[];
58
+ /** 会话状态 */
59
+ status: 'active' | 'waiting' | 'completed' | 'error' | 'archived';
60
+ /** 会话级配置覆盖 */
61
+ config: SessionConfig;
62
+ /** 创建时间戳 */
63
+ createdAt: number;
64
+ /** 最后更新时间戳 */
65
+ updatedAt: number;
66
+ /** 创建者类型 */
67
+ createdBy?: 'user' | 'agent' | 'scheduler' | 'system';
68
+ /** 父会话传入的指令/上下文(创建子会话时由父会话填写) */
69
+ inputContext?: string;
70
+ /** 完成结果摘要(子会话完成后填充,用于向父会话汇报) */
71
+ result?: string;
72
+ /** 扩展元数据(供插件自由使用) */
73
+ metadata?: Record<string, unknown>;
74
+ }
75
+ /**
76
+ * 会话树节点(递归结构)
77
+ *
78
+ * 用于前端展示会话树和 agent 任务树状图。
79
+ */
80
+ export interface SessionTreeNode {
81
+ session: SessionInfo;
82
+ children: SessionTreeNode[];
83
+ }
84
+ /**
85
+ * 会话管理服务
86
+ *
87
+ * 负责会话的创建、查询、配置和树形管理。
88
+ * 由 plugin-session-manager 实现并注册为 'session-manager' 服务。
89
+ *
90
+ * 设计要点:
91
+ * - 每个会话拥有独立的 SessionConfig,Agent 处理消息时查询并应用
92
+ * - 树形结构通过 parentId/children 维护,支持未来的任务拆分场景
93
+ * - 会话生命周期事件通过 EventBus 广播
94
+ */
95
+ export interface SessionManagerService {
96
+ /** 创建新会话,返回完整的 SessionInfo */
97
+ createSession(opts?: Partial<Omit<SessionInfo, 'id' | 'children' | 'createdAt' | 'updatedAt'>>): Promise<SessionInfo>;
98
+ /** 获取指定会话(不存在返回 undefined) */
99
+ getSession(id: string): SessionInfo | undefined;
100
+ /** 列出会话(可按 parentId 和 status 过滤) */
101
+ listSessions(filter?: {
102
+ parentId?: string | null;
103
+ status?: SessionInfo['status'];
104
+ }): SessionInfo[];
105
+ /** 更新会话属性 */
106
+ updateSession(id: string, updates: Partial<Pick<SessionInfo, 'name' | 'config' | 'status' | 'metadata'>>): Promise<SessionInfo>;
107
+ /** 删除会话(同时清理其消息历史) */
108
+ deleteSession(id: string): Promise<void>;
109
+ /** 获取当前活跃会话 ID */
110
+ getActiveSessionId(): string;
111
+ /** 切换活跃会话 */
112
+ setActiveSessionId(id: string): void;
113
+ /** 创建子会话 */
114
+ createChildSession(parentId: string, opts?: Partial<Omit<SessionInfo, 'id' | 'parentId' | 'children' | 'createdAt' | 'updatedAt'>>): Promise<SessionInfo>;
115
+ /** 获取直接子会话列表 */
116
+ getChildren(parentId: string): SessionInfo[];
117
+ /** 获取会话树(传入 rootId 则只返回该子树,否则返回所有根会话的树) */
118
+ getTree(rootId?: string): SessionTreeNode[];
119
+ /** 标记会话完成(触发 session:completed 事件,通知父会话) */
120
+ completeSession(id: string, result?: string): Promise<void>;
121
+ /**
122
+ * 解析指定会话的最终生效配置
123
+ *
124
+ * 合并优先级:会话 config > 父会话 sessionDefaults > 平台 profile > 全局默认
125
+ * 返回合并后的完整 SessionConfig(不含 sessionDefaults 字段)
126
+ */
127
+ resolveConfig(sessionId: string, platform?: string): Omit<SessionConfig, 'sessionDefaults'>;
128
+ /** 获取已配置的平台 profile 列表 */
129
+ getPlatformProfiles(): Record<string, PlatformProfile>;
130
+ /** 设置指定平台的 profile */
131
+ setPlatformProfile(platform: string, profile: PlatformProfile): void;
132
+ /** 自动生成会话标题(调用 LLM 总结),返回生成的标题或 undefined。可传入 userMessage 避免依赖历史记录。 */
133
+ generateTitle(sessionId: string, userMessage?: string): Promise<string | undefined>;
134
+ /** 手动更新会话标题 */
135
+ updateSessionTitle(sessionId: string, title: string): Promise<void>;
136
+ }
137
+ export interface SessionManagerCapabilityRegistry {
138
+ /** 基础 CRUD(create/get/update/delete) */
139
+ SessionCrud: 'session-crud';
140
+ /** 支持树形会话(createChildSession/getTree) */
141
+ SessionTree: 'session-tree';
142
+ }
143
+ export type SessionManagerCapability = SessionManagerCapabilityRegistry[keyof SessionManagerCapabilityRegistry];
144
+ export declare const SessionManagerCapabilities: {
145
+ readonly SessionCrud: "session-crud";
146
+ readonly SessionTree: "session-tree";
147
+ };
148
+ declare module './capabilities.js' {
149
+ interface ServiceCapabilityMap {
150
+ 'session-manager': SessionManagerCapability;
151
+ }
152
+ }
153
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ // ----- 会话管理服务接口 -----
2
+ export const SessionManagerCapabilities = {
3
+ SessionCrud: 'session-crud',
4
+ SessionTree: 'session-tree',
5
+ };
6
+ import { registerCapabilityProbe } from './capabilities.js';
7
+ registerCapabilityProbe('session-manager', SessionManagerCapabilities.SessionCrud, inst => {
8
+ const i = inst;
9
+ return typeof i.createSession === 'function' && typeof i.getSession === 'function' && typeof i.deleteSession === 'function'
10
+ ? true
11
+ : 'SessionManagerService.createSession()/getSession()/deleteSession() are required for capability "session-crud"';
12
+ });
13
+ registerCapabilityProbe('session-manager', SessionManagerCapabilities.SessionTree, inst => {
14
+ const i = inst;
15
+ return typeof i.getTree === 'function' && typeof i.getChildren === 'function'
16
+ ? true
17
+ : 'SessionManagerService.getTree()/getChildren() are required for capability "session-tree"';
18
+ });
19
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":"AAAA,uBAAuB;AA0KvB,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,cAAc;CACwB,CAAC;AAQtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,uBAAuB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;IACxF,MAAM,CAAC,GAAG,IAAkF,CAAC;IAC7F,OAAO,OAAO,CAAC,CAAC,aAAa,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,UAAU;QACzH,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,+GAA+G,CAAC;AACtH,CAAC,CAAC,CAAC;AAEH,uBAAuB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;IACxF,MAAM,CAAC,GAAG,IAAoD,CAAC;IAC/D,OAAO,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,UAAU;QAC3E,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,0FAA0F,CAAC;AACjG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,100 @@
1
+ import type { Readable } from 'node:stream';
2
+ export type StorageRootKind = 'workspace' | 'data' | 'tmp' | 'pluginData' | 'logs' | string;
3
+ export interface StorageRootInfo {
4
+ /** 根 ID,如 workspace、data、tmp */
5
+ name: string;
6
+ /** 展示名称 */
7
+ label?: string;
8
+ /** 语义类型,用于权限 UI 和策略判断 */
9
+ kind: StorageRootKind;
10
+ /** 是否允许通过通用文件浏览 UI 展示 */
11
+ browsable: boolean;
12
+ /** 默认是否允许读 */
13
+ readable: boolean;
14
+ /** 默认是否允许写 */
15
+ writable: boolean;
16
+ /** 默认是否允许删除 */
17
+ deletable: boolean;
18
+ }
19
+ export interface StorageEntry {
20
+ name: string;
21
+ path: string;
22
+ uri: string;
23
+ isDirectory: boolean;
24
+ size: number;
25
+ mtime: string;
26
+ ext: string;
27
+ }
28
+ export interface StorageStat {
29
+ name: string;
30
+ path: string;
31
+ uri: string;
32
+ isDirectory: boolean;
33
+ size: number;
34
+ mtime: string;
35
+ birthtime: string;
36
+ ext: string;
37
+ }
38
+ export interface StorageListResult {
39
+ root: StorageRootInfo;
40
+ path: string;
41
+ entries: StorageEntry[];
42
+ }
43
+ export interface StorageReadStreamResult {
44
+ stream: Readable;
45
+ stat: StorageStat;
46
+ }
47
+ /**
48
+ * StorageService 的职责定位:
49
+ *
50
+ * 1) **命名根**:把项目里的几个目录起一个稳定名字(workspace / data / tmp /
51
+ * pluginData / logs,以及用户自定义根),让上层用 URI(`name:/path`)表示文件,
52
+ * 而不是把绝对路径硬编码到配置或工具调用里。
53
+ * 2) **路径解析**:对 storage URI 做规范化、根内 `..` 穿越保护、symlink realpath 校验。
54
+ * 这是为防止上层代码意外越界(防 bug),不是用来对抗恶意子进程。
55
+ * 3) **审计点**:所有读/写/删都经过 logger,便于事后排查。
56
+ *
57
+ * 它**不是**沙箱:`resolveLocalPath` 一旦把绝对路径交给 `run_python`、shell 等子进程,
58
+ * 子进程可以访问当前 OS 用户能访问的任何文件。真正的隔离应该靠 OS 用户权限或容器,
59
+ * 不应该指望这一层。
60
+ */
61
+ export interface StorageService {
62
+ listRoots(): StorageRootInfo[];
63
+ list(uri: string): Promise<StorageListResult>;
64
+ stat(uri: string): Promise<StorageStat>;
65
+ readFile(uri: string, encoding?: BufferEncoding): Promise<string | Buffer>;
66
+ createReadStream(uri: string): Promise<StorageReadStreamResult>;
67
+ writeFile(uri: string, data: string | Buffer): Promise<void>;
68
+ rename(uri: string, newName: string): Promise<string>;
69
+ delete(uri: string): Promise<void>;
70
+ /**
71
+ * 把 storage URI 解析为本机绝对路径,给必须使用本地路径的子进程(shell、code-runner)用。
72
+ *
73
+ * 注意:解析过程会校验目标位于声明的根内,但**不会限制后续子进程的访问范围**。
74
+ * 调用方必须自觉只把这条路径用作"工作目录/起点",不要把它当成沙箱边界。
75
+ */
76
+ resolveLocalPath?(uri: string, access?: 'read' | 'write' | 'delete'): Promise<string>;
77
+ }
78
+ export interface StorageCapabilityRegistry {
79
+ List: 'list';
80
+ Read: 'read';
81
+ Write: 'write';
82
+ Delete: 'delete';
83
+ LocalPath: 'local-path';
84
+ Router: 'router';
85
+ }
86
+ export type StorageCapability = StorageCapabilityRegistry[keyof StorageCapabilityRegistry];
87
+ export declare const StorageCapabilities: {
88
+ readonly List: "list";
89
+ readonly Read: "read";
90
+ readonly Write: "write";
91
+ readonly Delete: "delete";
92
+ readonly LocalPath: "local-path";
93
+ readonly Router: "router";
94
+ };
95
+ declare module './capabilities.js' {
96
+ interface ServiceCapabilityMap {
97
+ storage: StorageCapability;
98
+ }
99
+ }
100
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ // ----- 存储服务接口 -----
2
+ export const StorageCapabilities = {
3
+ List: 'list',
4
+ Read: 'read',
5
+ Write: 'write',
6
+ Delete: 'delete',
7
+ LocalPath: 'local-path',
8
+ Router: 'router',
9
+ };
10
+ import { registerCapabilityProbe } from './capabilities.js';
11
+ registerCapabilityProbe('storage', StorageCapabilities.List, inst => typeof inst.list === 'function'
12
+ && typeof inst.listRoots === 'function'
13
+ ? true
14
+ : 'StorageService.listRoots()/list() are required for capability "list"');
15
+ registerCapabilityProbe('storage', StorageCapabilities.Read, inst => typeof inst.readFile === 'function'
16
+ && typeof inst.createReadStream === 'function'
17
+ ? true
18
+ : 'StorageService.readFile()/createReadStream() are required for capability "read"');
19
+ registerCapabilityProbe('storage', StorageCapabilities.Write, inst => typeof inst.writeFile === 'function'
20
+ && typeof inst.rename === 'function'
21
+ ? true
22
+ : 'StorageService.writeFile()/rename() are required for capability "write"');
23
+ registerCapabilityProbe('storage', StorageCapabilities.Delete, inst => typeof inst.delete === 'function'
24
+ ? true
25
+ : 'StorageService.delete() is required for capability "delete"');
26
+ registerCapabilityProbe('storage', StorageCapabilities.LocalPath, inst => typeof inst.resolveLocalPath === 'function'
27
+ ? true
28
+ : 'StorageService.resolveLocalPath() is required for capability "local-path"');
29
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"AAAA,qBAAqB;AAoGrB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,QAAQ;CAC4B,CAAC;AAQ/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAClE,OAAQ,IAA2B,CAAC,IAAI,KAAK,UAAU;OAClD,OAAQ,IAAgC,CAAC,SAAS,KAAK,UAAU;IACpE,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,sEAAsE,CAAC,CAAC;AAE9E,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAClE,OAAQ,IAA+B,CAAC,QAAQ,KAAK,UAAU;OAC1D,OAAQ,IAAuC,CAAC,gBAAgB,KAAK,UAAU;IAClF,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,iFAAiF,CAAC,CAAC;AAEzF,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CACnE,OAAQ,IAAgC,CAAC,SAAS,KAAK,UAAU;OAC5D,OAAQ,IAA6B,CAAC,MAAM,KAAK,UAAU;IAC9D,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,yEAAyE,CAAC,CAAC;AAEjF,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CACpE,OAAQ,IAA6B,CAAC,MAAM,KAAK,UAAU;IACzD,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,6DAA6D,CAAC,CAAC;AAErE,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CACvE,OAAQ,IAAuC,CAAC,gBAAgB,KAAK,UAAU;IAC7E,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,2EAA2E,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { RegisteredTool, ToolDefinition, ToolCallContext, ToolSummary, ToolGroupInfo } from './core.js';
2
+ /**
3
+ * 工具服务接口
4
+ *
5
+ * 管理 AI 可调用的工具的注册、查询、执行。
6
+ * 由 plugin-agent-tools 创建 ToolRegistry 并注册为服务。
7
+ */
8
+ export interface ToolService {
9
+ register(tool: Omit<RegisteredTool, 'pluginName'>, pluginName: string): () => void;
10
+ /**
11
+ * 获取工具定义列表
12
+ * @param filter 可选过滤条件
13
+ * - groups: 仅返回属于指定分组的工具(无 groups 的工具始终包含)
14
+ */
15
+ getDefinitions(filter?: {
16
+ groups?: string[];
17
+ }): ToolDefinition[];
18
+ getSummaries(filter?: {
19
+ groups?: string[];
20
+ }): ToolSummary[];
21
+ getAll(): Array<{
22
+ name: string;
23
+ description: string;
24
+ pluginName: string;
25
+ authority?: number;
26
+ safety?: import('./core.js').SafetyLevel;
27
+ permissions?: string[];
28
+ groups?: string[];
29
+ }>;
30
+ execute(toolName: string, args: Record<string, unknown>, callCtx: ToolCallContext): Promise<string>;
31
+ /** 注入执行守卫,用于权限等级与 dangerous 二次确认 */
32
+ setExecutionGuard(guard: import('./core.js').ExecutionGuard): void;
33
+ unregisterByPlugin(pluginName: string): void;
34
+ /** 注册工具分组 */
35
+ registerGroup(group: Omit<ToolGroupInfo, 'pluginName'>, pluginName: string): () => void;
36
+ /** 获取所有已注册的工具分组 */
37
+ getGroups(): ToolGroupInfo[];
38
+ }
39
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CACN,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,EACxC,UAAU,EAAE,MAAM,GACjB,MAAM,IAAI,CAAC;IAEd;;;;OAIG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,cAAc,EAAE,CAAC;IAEjE,YAAY,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,WAAW,EAAE,CAAC;IAE5D,MAAM,IAAI,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,WAAW,EAAE,WAAW,CAAC;QACzC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;IAEH,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,oCAAoC;IACpC,iBAAiB,CAAC,KAAK,EAAE,OAAO,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IAEnE,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7C,aAAa;IACb,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACxF,mBAAmB;IACnB,SAAS,IAAI,aAAa,EAAE,CAAC;CAC9B"}
@@ -0,0 +1,3 @@
1
+ // ===== 工具服务接口 =====
2
+ export {};
3
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"AAAA,qBAAqB"}
@@ -0,0 +1,16 @@
1
+ import type { IncomingMessage } from './core.js';
2
+ export type TriggerKind = 'immediate' | 'interval' | 'swallow' | 'direct';
3
+ export interface TriggerDecision {
4
+ kind: TriggerKind;
5
+ /** 调试/日志用 */
6
+ reason: string;
7
+ }
8
+ export interface TriggerPolicyService {
9
+ /** 综合决策(含 @/名字检测、间隔/评分判定、私聊直放等) */
10
+ decide(message: IncomingMessage): TriggerDecision;
11
+ /** 当前生效的 bot 名称别名列表(含 persona) */
12
+ getBotNames(): string[];
13
+ /** 检查内容是否含 mute 关键词 */
14
+ detectMuteKeyword(content: string): boolean;
15
+ }
16
+ //# sourceMappingURL=trigger-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-policy.d.ts","sourceRoot":"","sources":["../../src/types/trigger-policy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAAC;IAClD,kCAAkC;IAClC,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,uBAAuB;IACvB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7C"}
@@ -0,0 +1,6 @@
1
+ // ----- Trigger Policy 服务接口 -----
2
+ //
3
+ // TriggerPolicyService 决定一条入站消息是否应当触发 agent。
4
+ // 决策只读:实际状态变更(计数器重置、冷却记录)由 FlowControlService 完成。
5
+ export {};
6
+ //# sourceMappingURL=trigger-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-policy.js","sourceRoot":"","sources":["../../src/types/trigger-policy.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,EAAE;AACF,6CAA6C;AAC7C,kDAAkD"}
@@ -0,0 +1,23 @@
1
+ /** 向量搜索结果条目 */
2
+ export interface VectorSearchResult {
3
+ /** 余弦相似度分数 */
4
+ score: number;
5
+ /** 存储时附带的元数据 */
6
+ metadata: Record<string, unknown>;
7
+ }
8
+ /** 向量数据库服务——由 vectorstore 插件提供 */
9
+ export interface VectorStoreService {
10
+ /** 添加一条向量及其元数据 */
11
+ add(vector: number[], metadata: Record<string, unknown>): Promise<void>;
12
+ /** 搜索最近邻,返回 [分数, 元数据][] */
13
+ search(queryVector: number[], topK: number): Promise<VectorSearchResult[]>;
14
+ /** 当前存储的向量总数 */
15
+ size(): Promise<number>;
16
+ /** 清空所有向量数据 */
17
+ clear(): Promise<void>;
18
+ /** 按 metadata 字段过滤删除(如 { sessionId: 'xxx' }) */
19
+ deleteByFilter?(filter: Record<string, unknown>): Promise<number>;
20
+ /** 持久化(由调用方或 dispose 触发) */
21
+ save(): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=vectorstore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorstore.d.ts","sourceRoot":"","sources":["../../src/types/vectorstore.ts"],"names":[],"mappings":"AAEA,eAAe;AACf,MAAM,WAAW,kBAAkB;IACjC,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,kBAAkB;IAClB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,2BAA2B;IAC3B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC3E,gBAAgB;IAChB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,eAAe;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,gDAAgD;IAChD,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,4BAA4B;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
@@ -0,0 +1,3 @@
1
+ // ----- 向量数据库服务接口 -----
2
+ export {};
3
+ //# sourceMappingURL=vectorstore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorstore.js","sourceRoot":"","sources":["../../src/types/vectorstore.ts"],"names":[],"mappings":"AAAA,wBAAwB"}