@zooique/memora 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 (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/dist/agent/agent.d.ts +343 -0
  4. package/dist/agent/agent.d.ts.map +1 -0
  5. package/dist/agent/agent.js +893 -0
  6. package/dist/agent/agent.js.map +1 -0
  7. package/dist/agent/assembler.d.ts +77 -0
  8. package/dist/agent/assembler.d.ts.map +1 -0
  9. package/dist/agent/assembler.js +115 -0
  10. package/dist/agent/assembler.js.map +1 -0
  11. package/dist/agent/builtinToolHandlers.d.ts +96 -0
  12. package/dist/agent/builtinToolHandlers.d.ts.map +1 -0
  13. package/dist/agent/builtinToolHandlers.js +388 -0
  14. package/dist/agent/builtinToolHandlers.js.map +1 -0
  15. package/dist/agent/builtinTools.d.ts +35 -0
  16. package/dist/agent/builtinTools.d.ts.map +1 -0
  17. package/dist/agent/builtinTools.js +75 -0
  18. package/dist/agent/builtinTools.js.map +1 -0
  19. package/dist/agent/constants.d.ts +67 -0
  20. package/dist/agent/constants.d.ts.map +1 -0
  21. package/dist/agent/constants.js +67 -0
  22. package/dist/agent/constants.js.map +1 -0
  23. package/dist/agent/contextManager.d.ts +130 -0
  24. package/dist/agent/contextManager.d.ts.map +1 -0
  25. package/dist/agent/contextManager.js +287 -0
  26. package/dist/agent/contextManager.js.map +1 -0
  27. package/dist/agent/loop.d.ts +288 -0
  28. package/dist/agent/loop.d.ts.map +1 -0
  29. package/dist/agent/loop.js +756 -0
  30. package/dist/agent/loop.js.map +1 -0
  31. package/dist/agent/managers/autoConfigRefiner.d.ts +39 -0
  32. package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -0
  33. package/dist/agent/managers/autoConfigRefiner.js +150 -0
  34. package/dist/agent/managers/autoConfigRefiner.js.map +1 -0
  35. package/dist/agent/managers/configManager.d.ts +114 -0
  36. package/dist/agent/managers/configManager.d.ts.map +1 -0
  37. package/dist/agent/managers/configManager.js +186 -0
  38. package/dist/agent/managers/configManager.js.map +1 -0
  39. package/dist/agent/managers/insightExtractor.d.ts +141 -0
  40. package/dist/agent/managers/insightExtractor.d.ts.map +1 -0
  41. package/dist/agent/managers/insightExtractor.js +420 -0
  42. package/dist/agent/managers/insightExtractor.js.map +1 -0
  43. package/dist/agent/managers/memoryAdvisor.d.ts +96 -0
  44. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -0
  45. package/dist/agent/managers/memoryAdvisor.js +198 -0
  46. package/dist/agent/managers/memoryAdvisor.js.map +1 -0
  47. package/dist/agent/managers/memoryInspector.d.ts +231 -0
  48. package/dist/agent/managers/memoryInspector.d.ts.map +1 -0
  49. package/dist/agent/managers/memoryInspector.js +327 -0
  50. package/dist/agent/managers/memoryInspector.js.map +1 -0
  51. package/dist/agent/managers/sessionManager.d.ts +89 -0
  52. package/dist/agent/managers/sessionManager.d.ts.map +1 -0
  53. package/dist/agent/managers/sessionManager.js +178 -0
  54. package/dist/agent/managers/sessionManager.js.map +1 -0
  55. package/dist/agent/managers/userFactExtractor.d.ts +25 -0
  56. package/dist/agent/managers/userFactExtractor.d.ts.map +1 -0
  57. package/dist/agent/managers/userFactExtractor.js +81 -0
  58. package/dist/agent/managers/userFactExtractor.js.map +1 -0
  59. package/dist/agent/managers/workProjection.d.ts +117 -0
  60. package/dist/agent/managers/workProjection.d.ts.map +1 -0
  61. package/dist/agent/managers/workProjection.js +290 -0
  62. package/dist/agent/managers/workProjection.js.map +1 -0
  63. package/dist/agent/messageHistory.d.ts +157 -0
  64. package/dist/agent/messageHistory.d.ts.map +1 -0
  65. package/dist/agent/messageHistory.js +288 -0
  66. package/dist/agent/messageHistory.js.map +1 -0
  67. package/dist/agent/toolExecutor.d.ts +137 -0
  68. package/dist/agent/toolExecutor.d.ts.map +1 -0
  69. package/dist/agent/toolExecutor.js +209 -0
  70. package/dist/agent/toolExecutor.js.map +1 -0
  71. package/dist/agent/tracer.d.ts +122 -0
  72. package/dist/agent/tracer.d.ts.map +1 -0
  73. package/dist/agent/tracer.js +64 -0
  74. package/dist/agent/tracer.js.map +1 -0
  75. package/dist/agent/types.d.ts +98 -0
  76. package/dist/agent/types.d.ts.map +1 -0
  77. package/dist/agent/types.js +19 -0
  78. package/dist/agent/types.js.map +1 -0
  79. package/dist/config/loader.d.ts +229 -0
  80. package/dist/config/loader.d.ts.map +1 -0
  81. package/dist/config/loader.js +194 -0
  82. package/dist/config/loader.js.map +1 -0
  83. package/dist/eval/evalTypes.d.ts +118 -0
  84. package/dist/eval/evalTypes.d.ts.map +1 -0
  85. package/dist/eval/evalTypes.js +102 -0
  86. package/dist/eval/evalTypes.js.map +1 -0
  87. package/dist/index.d.ts +61 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +44 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/llm/embedding.d.ts +62 -0
  92. package/dist/llm/embedding.d.ts.map +1 -0
  93. package/dist/llm/embedding.js +162 -0
  94. package/dist/llm/embedding.js.map +1 -0
  95. package/dist/llm/factory.d.ts +39 -0
  96. package/dist/llm/factory.d.ts.map +1 -0
  97. package/dist/llm/factory.js +108 -0
  98. package/dist/llm/factory.js.map +1 -0
  99. package/dist/llm/openaiCompatible.d.ts +63 -0
  100. package/dist/llm/openaiCompatible.d.ts.map +1 -0
  101. package/dist/llm/openaiCompatible.js +340 -0
  102. package/dist/llm/openaiCompatible.js.map +1 -0
  103. package/dist/llm/provider.d.ts +91 -0
  104. package/dist/llm/provider.d.ts.map +1 -0
  105. package/dist/llm/provider.js +14 -0
  106. package/dist/llm/provider.js.map +1 -0
  107. package/dist/llm/types.d.ts +25 -0
  108. package/dist/llm/types.d.ts.map +1 -0
  109. package/dist/llm/types.js +7 -0
  110. package/dist/llm/types.js.map +1 -0
  111. package/dist/logging/logger.d.ts +39 -0
  112. package/dist/logging/logger.d.ts.map +1 -0
  113. package/dist/logging/logger.js +279 -0
  114. package/dist/logging/logger.js.map +1 -0
  115. package/dist/logging/loggerInterface.d.ts +33 -0
  116. package/dist/logging/loggerInterface.d.ts.map +1 -0
  117. package/dist/logging/loggerInterface.js +2 -0
  118. package/dist/logging/loggerInterface.js.map +1 -0
  119. package/dist/memory/inMemoryRelationStore.d.ts +51 -0
  120. package/dist/memory/inMemoryRelationStore.d.ts.map +1 -0
  121. package/dist/memory/inMemoryRelationStore.js +65 -0
  122. package/dist/memory/inMemoryRelationStore.js.map +1 -0
  123. package/dist/memory/inMemoryStorage.d.ts +97 -0
  124. package/dist/memory/inMemoryStorage.d.ts.map +1 -0
  125. package/dist/memory/inMemoryStorage.js +177 -0
  126. package/dist/memory/inMemoryStorage.js.map +1 -0
  127. package/dist/memory/loader.d.ts +49 -0
  128. package/dist/memory/loader.d.ts.map +1 -0
  129. package/dist/memory/loader.js +93 -0
  130. package/dist/memory/loader.js.map +1 -0
  131. package/dist/memory/projectManager.d.ts +182 -0
  132. package/dist/memory/projectManager.d.ts.map +1 -0
  133. package/dist/memory/projectManager.js +441 -0
  134. package/dist/memory/projectManager.js.map +1 -0
  135. package/dist/memory/recall.d.ts +77 -0
  136. package/dist/memory/recall.d.ts.map +1 -0
  137. package/dist/memory/recall.js +147 -0
  138. package/dist/memory/recall.js.map +1 -0
  139. package/dist/memory/relationStore.d.ts +78 -0
  140. package/dist/memory/relationStore.d.ts.map +1 -0
  141. package/dist/memory/relationStore.js +2 -0
  142. package/dist/memory/relationStore.js.map +1 -0
  143. package/dist/memory/sessionStore.d.ts +84 -0
  144. package/dist/memory/sessionStore.d.ts.map +1 -0
  145. package/dist/memory/sessionStore.js +2 -0
  146. package/dist/memory/sessionStore.js.map +1 -0
  147. package/dist/memory/storageInterface.d.ts +107 -0
  148. package/dist/memory/storageInterface.d.ts.map +1 -0
  149. package/dist/memory/storageInterface.js +2 -0
  150. package/dist/memory/storageInterface.js.map +1 -0
  151. package/dist/memory/store.d.ts +50 -0
  152. package/dist/memory/store.d.ts.map +1 -0
  153. package/dist/memory/store.js +160 -0
  154. package/dist/memory/store.js.map +1 -0
  155. package/dist/memory/types.d.ts +189 -0
  156. package/dist/memory/types.d.ts.map +1 -0
  157. package/dist/memory/types.js +230 -0
  158. package/dist/memory/types.js.map +1 -0
  159. package/dist/memory/userProfile.d.ts +156 -0
  160. package/dist/memory/userProfile.d.ts.map +1 -0
  161. package/dist/memory/userProfile.js +315 -0
  162. package/dist/memory/userProfile.js.map +1 -0
  163. package/dist/memory/vectorStore.d.ts +75 -0
  164. package/dist/memory/vectorStore.d.ts.map +1 -0
  165. package/dist/memory/vectorStore.js +144 -0
  166. package/dist/memory/vectorStore.js.map +1 -0
  167. package/dist/persona/personaManager.d.ts +121 -0
  168. package/dist/persona/personaManager.d.ts.map +1 -0
  169. package/dist/persona/personaManager.js +349 -0
  170. package/dist/persona/personaManager.js.map +1 -0
  171. package/dist/persona/types.d.ts +32 -0
  172. package/dist/persona/types.d.ts.map +1 -0
  173. package/dist/persona/types.js +5 -0
  174. package/dist/persona/types.js.map +1 -0
  175. package/dist/security/pathGuard.d.ts +121 -0
  176. package/dist/security/pathGuard.d.ts.map +1 -0
  177. package/dist/security/pathGuard.js +276 -0
  178. package/dist/security/pathGuard.js.map +1 -0
  179. package/dist/skill/skillManager.d.ts +82 -0
  180. package/dist/skill/skillManager.d.ts.map +1 -0
  181. package/dist/skill/skillManager.js +198 -0
  182. package/dist/skill/skillManager.js.map +1 -0
  183. package/dist/skill/types.d.ts +28 -0
  184. package/dist/skill/types.d.ts.map +1 -0
  185. package/dist/skill/types.js +5 -0
  186. package/dist/skill/types.js.map +1 -0
  187. package/dist/utils/errors.d.ts +86 -0
  188. package/dist/utils/errors.d.ts.map +1 -0
  189. package/dist/utils/errors.js +143 -0
  190. package/dist/utils/errors.js.map +1 -0
  191. package/dist/utils/eventEmitter.d.ts +87 -0
  192. package/dist/utils/eventEmitter.d.ts.map +1 -0
  193. package/dist/utils/eventEmitter.js +79 -0
  194. package/dist/utils/eventEmitter.js.map +1 -0
  195. package/dist/utils/frontmatter.d.ts +24 -0
  196. package/dist/utils/frontmatter.d.ts.map +1 -0
  197. package/dist/utils/frontmatter.js +44 -0
  198. package/dist/utils/frontmatter.js.map +1 -0
  199. package/dist/utils/json.d.ts +20 -0
  200. package/dist/utils/json.d.ts.map +1 -0
  201. package/dist/utils/json.js +65 -0
  202. package/dist/utils/json.js.map +1 -0
  203. package/dist/utils/loggerHolder.d.ts +37 -0
  204. package/dist/utils/loggerHolder.d.ts.map +1 -0
  205. package/dist/utils/loggerHolder.js +49 -0
  206. package/dist/utils/loggerHolder.js.map +1 -0
  207. package/dist/utils/math.d.ts +5 -0
  208. package/dist/utils/math.d.ts.map +1 -0
  209. package/dist/utils/math.js +19 -0
  210. package/dist/utils/math.js.map +1 -0
  211. package/dist/utils/path.d.ts +28 -0
  212. package/dist/utils/path.d.ts.map +1 -0
  213. package/dist/utils/path.js +33 -0
  214. package/dist/utils/path.js.map +1 -0
  215. package/dist/utils/safeTimer.d.ts +26 -0
  216. package/dist/utils/safeTimer.d.ts.map +1 -0
  217. package/dist/utils/safeTimer.js +49 -0
  218. package/dist/utils/safeTimer.js.map +1 -0
  219. package/dist/utils/scanner.d.ts +54 -0
  220. package/dist/utils/scanner.d.ts.map +1 -0
  221. package/dist/utils/scanner.js +115 -0
  222. package/dist/utils/scanner.js.map +1 -0
  223. package/dist/utils/segmenter.d.ts +30 -0
  224. package/dist/utils/segmenter.d.ts.map +1 -0
  225. package/dist/utils/segmenter.js +80 -0
  226. package/dist/utils/segmenter.js.map +1 -0
  227. package/dist/utils/strings.d.ts +18 -0
  228. package/dist/utils/strings.d.ts.map +1 -0
  229. package/dist/utils/strings.js +25 -0
  230. package/dist/utils/strings.js.map +1 -0
  231. package/dist/utils/time.d.ts +23 -0
  232. package/dist/utils/time.d.ts.map +1 -0
  233. package/dist/utils/time.js +31 -0
  234. package/dist/utils/time.js.map +1 -0
  235. package/dist/utils/toError.d.ts +13 -0
  236. package/dist/utils/toError.d.ts.map +1 -0
  237. package/dist/utils/toError.js +22 -0
  238. package/dist/utils/toError.js.map +1 -0
  239. package/package.json +73 -0
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Agent Loop — Agent 的核心执行引擎
3
+ *
4
+ * 模型自主决定何时推理、何时调用工具,循环直到输出纯文本
5
+ *
6
+ * 上下文组装公式:
7
+ * 上下文 = 用户主动输入 + Agent 记忆召回结果 + Agent Loop 工作记忆
8
+ * 其中"Agent 记忆召回结果"由 Agent 层通过 processUserInput 的
9
+ * recalledMemories 参数注入。
10
+ */
11
+ import type { LlmProvider, Message } from '../llm/provider.js';
12
+ import type { Memory } from '../memory/types.js';
13
+ import type { ToolDefinition } from '../agent/toolExecutor.js';
14
+ import type { AgentChunk, UIMessages } from '../agent/types.js';
15
+ import type { ITracer, AgentMetrics } from '../agent/tracer.js';
16
+ export interface AgentLoopOptions {
17
+ provider: LlmProvider;
18
+ bootstrapMemories: Memory[];
19
+ toolExecutor: (name: string, args: string) => Promise<string>;
20
+ maxIterations?: number;
21
+ /** 系统 prompt 前缀(角色 + 用户画像 + 技能),注入到 bootstrap 记忆之前 */
22
+ systemPromptPrefix?: string;
23
+ /**
24
+ * 情感基调前缀(Phase 2.1:AffectController 注入)
25
+ *
26
+ * 在 systemPromptPrefix 和 bootstrapMemories 之间插入。
27
+ * 由 Agent.injectAffect() 设置,角色切换时保留。
28
+ */
29
+ affectPrefix?: string;
30
+ /** v4.0:工具定义列表(内置 + 自定义),用于 system prompt 追加工具描述 */
31
+ toolDefinitions?: ToolDefinition[];
32
+ /**
33
+ * 上下文窗口 token 上限(默认 8000)
34
+ *
35
+ * 桌面精灵等长运行场景下,messages 数组随对话轮次无限增长会爆 LLM 上下文窗口。
36
+ * 当估算 token 数超过此阈值时,保留 system prompt + 最近 N 条消息,
37
+ * 裁剪中间段,确保 LLM 请求不因上下文溢出而失败。
38
+ *
39
+ * 保守默认值 8000 token 对多数模型安全(DeepSeek 128K / GPT-4o 128K / 豆包 8K),
40
+ * 宿主可通过 AgentLoopOptions 覆盖。
41
+ */
42
+ maxContextTokens?: number;
43
+ /** 可观测性 Tracer(宿主注入,默认 NOOP_TRACER 静默丢弃所有 span) */
44
+ tracer?: ITracer;
45
+ /**
46
+ * 内容护栏规则(启动时从 configDir 加载的 guardrail 记忆)
47
+ *
48
+ * 每条规则包含 pattern(正则字符串)和 action(block/warn)。
49
+ * 在对话输入和输出阶段分别检查,命中 block 时阻断对话。
50
+ * 护栏自身异常时降级为"放行 + 记日志",不阻断用户对话。
51
+ */
52
+ guardrailRules?: readonly Memory[];
53
+ /**
54
+ * Reflection(反思/自修正)最大重试次数(默认 2)
55
+ *
56
+ * 当工具执行失败且错误码标记为 retryable 时,
57
+ * AgentLoop 会将错误上下文回传给 LLM 重新尝试,
58
+ * 而非立即结束当前迭代。超过此上限后放弃反思。
59
+ */
60
+ maxReflectionRetries?: number;
61
+ /** 宿主可覆盖的 UI 消息文本(默认英文) */
62
+ messages?: UIMessages;
63
+ /**
64
+ * 上下文超限时是否自动生成摘要(默认 false)
65
+ *
66
+ * 开启后,当消息历史超过 maxContextTokens 时,
67
+ * 会对被裁剪的消息调用 provider 生成一段摘要注入到系统提示中,
68
+ * 避免关键信息永久丢失。(首次触发时增加 ~1-2s 延迟)
69
+ */
70
+ enableContextSummary?: boolean;
71
+ }
72
+ export declare class AgentLoop {
73
+ private readonly opts;
74
+ private messages;
75
+ private readonly maxIterations;
76
+ /** 上下文窗口 token 上限(默认 8000,约 32K 中文字符) */
77
+ private readonly maxContextTokens;
78
+ /** 可观测性 Tracer(默认 NOOP_TRACER 零开销) */
79
+ private readonly tracer;
80
+ /** 内容护栏规则(启动时加载,运行时不可变) */
81
+ private readonly guardrailRules;
82
+ /** Reflection 最大重试次数(默认 2) */
83
+ private readonly maxReflectionRetries;
84
+ /** 宿主可覆盖的 UI 消息文本(已填充默认值) */
85
+ private readonly ui;
86
+ /** 上下文超限时是否自动生成摘要 */
87
+ private readonly enableContextSummary;
88
+ /** 上下文管理器(QC-R2-08:从 loop 提取的 token 估算 + 截断 + 摘要职责) */
89
+ private readonly contextManager;
90
+ /** LLM 调用总次数(含重试,每次 provider.chat 调用 +1) */
91
+ private metricLlmCallCount;
92
+ /** 累计输入 token 数(基于 estimateTokens 粗略估算) */
93
+ private metricTotalInputTokens;
94
+ /** 累计输出 token 数(基于 estimateTokens 粗略估算) */
95
+ private metricTotalOutputTokens;
96
+ /** 记忆召回总次数(每轮 processUserInput +1) */
97
+ private metricRecallTotalCount;
98
+ /** 记忆召回命中次数(召回结果非空 +1) */
99
+ private metricRecallHitCount;
100
+ /** 工具调用总次数 */
101
+ private metricToolCallCount;
102
+ /** 工具调用失败次数(结果以 [ERR 开头) */
103
+ private metricToolFailureCount;
104
+ constructor(opts: AgentLoopOptions);
105
+ /**
106
+ * 处理一轮用户输入
107
+ *
108
+ * @param userInput - 用户原始输入
109
+ * @param recalledMemories - 记忆召回结果(Agent.memory.search() 产出),
110
+ * 可选。传入时自动注入到上下文,实现"Agent 记忆召回结果"层
111
+ * @param signal - 可选的 AbortSignal,用于取消正在进行的对话(V-105)
112
+ * 泊文等宿主 UI 传入 AbortController.signal,用户点击"取消"时触发 abort
113
+ */
114
+ processUserInput(userInput: string, recalledMemories?: readonly Memory[], signal?: AbortSignal): AsyncGenerator<AgentChunk, void, unknown>;
115
+ /**
116
+ * 调用 LLM(带指数退避重试)
117
+ *
118
+ * 仅在流式输出前失败时重试(streamStarted = false),
119
+ * 流式已开始则直接向上抛出(用户已看到部分结果)。
120
+ *
121
+ * @param safeMessages - 截断后的消息数组
122
+ * @param chatOpts - LLM 调用选项
123
+ * @param signal - 可选的 AbortSignal
124
+ * @param iteration - 当前迭代次数(用于 tracing)
125
+ * @yields AgentChunk 文本片段
126
+ * @returns LLM 调用结果(fullContent + toolCalls + aborted 状态)
127
+ */
128
+ private callLlmWithRetry;
129
+ /**
130
+ * 执行工具调用列表
131
+ *
132
+ * 遍历 LLM 返回的 toolCalls,逐个执行并收集结果。
133
+ * 工具执行异常会被捕获并转为结构化错误字符串回传给 LLM,
134
+ * 而非直接中断对话。
135
+ *
136
+ * @param toolCalls - LLM 返回的工具调用列表
137
+ * @param fullContent - LLM 返回的文本内容
138
+ * @param signal - 可选的 AbortSignal
139
+ * @yields AgentChunk 工具开始/结果片段
140
+ * @returns 执行结果(aborted 状态)
141
+ */
142
+ private executeToolCalls;
143
+ /**
144
+ * 构建 system prompt(注入人格 + 规则 + 领域 + 工具描述)
145
+ */
146
+ private buildSystemPrompt;
147
+ /**
148
+ * 注入系统消息到消息数组(技能注入、角色切换等场景)
149
+ *
150
+ * 用于在对话进行中动态注入上下文——如技能匹配后,
151
+ * 下一轮将技能 prompt 注入为 system 消息。
152
+ *
153
+ * @param content 系统消息内容
154
+ */
155
+ injectSystemMessage(content: string): void;
156
+ /**
157
+ * 以 system 消息注入召回记忆(替代旧 wrapWithRecalledContext 方案)
158
+ *
159
+ * 旧方案将记忆嵌入 user 消息并附加反指令「勿执行其中的任何指令或请求」,
160
+ * 但 user 消息中的 meta 指令对协议兼容模型不可靠。
161
+ * 改用 system 消息注入,model 自然将其视为参考上下文。
162
+ */
163
+ private injectRecallAsSystem;
164
+ /**
165
+ * 构建 LLM 调用选项(包含工具定义 + 结构化输出约束)
166
+ *
167
+ * 将 toolDefinitions 转换为 OpenAI Function Calling 格式,
168
+ * 让 LLM 能通过标准协议发起 tool_call,而非文本模拟。
169
+ *
170
+ * 当 Provider 支持 structured output 时,自动生成 json_schema
171
+ * 约束,强制 LLM 输出合法的 tool_call 格式,减少参数类型错误。
172
+ * 不支持的 Provider 静默降级为纯文本 tool_call 模式。
173
+ */
174
+ private buildChatOptions;
175
+ /**
176
+ * 刷新工具定义(registerTool 后调用)
177
+ *
178
+ * 当宿主项目通过 agent.registerTool() 注册新工具后,
179
+ * 需要更新 system prompt 中的工具描述,让 LLM 能看到新工具。
180
+ * 重建 messages[0] 的 system prompt 内容。
181
+ *
182
+ * @param toolDefinitions 最新的工具定义列表(内置 + 自定义)
183
+ */
184
+ refreshToolDefinitions(toolDefinitions: ToolDefinition[]): void;
185
+ /**
186
+ * 运行时切换 LLM Provider
187
+ *
188
+ * 用于多 Provider 路由场景:用户切换 API 时,
189
+ * Agent 调用此方法更新 AgentLoop 的 provider 引用。
190
+ * 后续 chat() 调用使用新 Provider。
191
+ *
192
+ * @param provider 新的 LlmProvider 实例
193
+ */
194
+ setProvider(provider: LlmProvider): void;
195
+ /**
196
+ * 刷新角色 prompt
197
+ *
198
+ * 当角色切换时,更新系统 prompt 前缀的角色部分。
199
+ * 保留 bootstrapMemories 和 toolDefinitions 不变,只替换 prefix。
200
+ *
201
+ * @param newPrefix 新的系统 prompt 前缀(包含新角色 + 用户画像)
202
+ */
203
+ refreshPersonaPrefix(newPrefix: string): void;
204
+ /**
205
+ * 注入情感基调到 system prompt(Phase 2.1:AffectController)
206
+ *
207
+ * 在角色前缀和 bootstrap 记忆之间插入情感描述文本。
208
+ * 与 refreshPersonaPrefix 独立——角色切换不会清除情感注入。
209
+ *
210
+ * 注入位置:systemPromptPrefix + affectPrefix + bootstrapMemories + toolDefinitions
211
+ *
212
+ * @param affectString 情感描述文本(如"当前对话基调:温暖、直接"),传空字符串清除注入
213
+ */
214
+ injectAffect(affectString: string): void;
215
+ /**
216
+ * 重建 messages[0] 的 system prompt
217
+ */
218
+ private rebuildSystemMessage;
219
+ /**
220
+ * 获取消息历史(用于持久化)
221
+ */
222
+ getMessages(): readonly Message[];
223
+ /**
224
+ * 获取 AgentLoop 运行时指标快照(R-103 可观测性增强)
225
+ *
226
+ * 返回 LLM 调用、记忆召回、工具调用、上下文管理四个维度的累计指标。
227
+ * 衰减指标(decay)由 Agent 层填充,此处返回 null。
228
+ *
229
+ * 纯只读、同步、零副作用——适合宿主项目定期轮询构建监控面板。
230
+ *
231
+ * @returns AgentMetrics 快照(decay 字段为 null,由 Agent 层填充)
232
+ */
233
+ getMetrics(): AgentMetrics;
234
+ /**
235
+ * 获取最近 N 轮对话(Layer 5: 最近对话注入)
236
+ *
237
+ * 从 messages 数组中提取最近 N 轮 user + assistant 消息,
238
+ * 用于注入 system prompt,让 LLM 在用户输入无信息量时仍能看到上下文。
239
+ *
240
+ * @param rounds - 要获取的轮次数(默认 3)
241
+ * @returns 最近 N 轮的 user + assistant 消息数组
242
+ */
243
+ getRecentHistory(rounds?: number): Array<{
244
+ role: 'user' | 'assistant';
245
+ content: string;
246
+ }>;
247
+ /**
248
+ * 恢复历史消息(用于重启后恢复对话)
249
+ * 会跳过 system 消息,只恢复 user/assistant/tool 消息
250
+ *
251
+ * @param historyMessages - 要恢复的历史消息列表
252
+ */
253
+ restoreHistory(historyMessages: readonly Message[]): void;
254
+ /**
255
+ * 清理上一轮对话注入的临时 system 消息
256
+ *
257
+ * 每轮 chat() 前调用,仅保留 messages[0](永久 system prompt)和
258
+ * 所有 user/assistant/tool 消息(对话历史)。
259
+ * 防止 recallAndInject() / injectActiveSkill() / truncateMessages()
260
+ * 累积的临时 system 消息堆叠,避免 LLM 收到大量冗余指令。
261
+ */
262
+ cleanTemporarySystemMessages(): void;
263
+ /**
264
+ * 输入护栏检查
265
+ *
266
+ * 在用户输入注入上下文之前运行,遍历所有 guardrail 规则,
267
+ * 用正则匹配用户输入。命中 block action 时返回 blocked=true。
268
+ *
269
+ * 护栏自身异常(正则编译失败等)降级为"放行 + 记日志",
270
+ * 永远不阻断用户对话(降级优先原则)。
271
+ */
272
+ private runInputGuardrails;
273
+ /**
274
+ * 输出护栏检查
275
+ *
276
+ * 在 LLM 响应返回给用户之前运行,防止敏感信息泄露。
277
+ * 输入/输出共享同一护栏规则集。
278
+ */
279
+ private runOutputGuardrails;
280
+ /**
281
+ * 判断工具错误结果是否可重试(Reflection 用)
282
+ *
283
+ * 解析工具结果中的 [ERR:TOOL:code] 前缀,
284
+ * 调用 isRetryableErrorCode 判断。
285
+ */
286
+ private isRetryableToolError;
287
+ }
288
+ //# sourceMappingURL=loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}