@onesclawkolor/onesclaw 0.1.0 → 0.1.1

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 (48) hide show
  1. package/README.md +2 -0
  2. package/dist/agent/loop.d.ts +14 -20
  3. package/dist/agent/loop.js +377 -38
  4. package/dist/agent/loop.js.map +1 -1
  5. package/dist/agent/ones-answer.d.ts +29 -0
  6. package/dist/agent/ones-answer.js +380 -0
  7. package/dist/agent/ones-answer.js.map +1 -0
  8. package/dist/agent/ones-routing.d.ts +10 -0
  9. package/dist/agent/ones-routing.js +160 -0
  10. package/dist/agent/ones-routing.js.map +1 -0
  11. package/dist/cli/logger.js +17 -1
  12. package/dist/cli/logger.js.map +1 -1
  13. package/dist/commands/kb.d.ts +4 -0
  14. package/dist/commands/kb.js +154 -0
  15. package/dist/commands/kb.js.map +1 -0
  16. package/dist/config/manager.d.ts +43 -0
  17. package/dist/config/manager.js +143 -3
  18. package/dist/config/manager.js.map +1 -1
  19. package/dist/config/types.d.ts +2 -0
  20. package/dist/index.js +37 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/knowledge/helper-scripts.d.ts +11 -0
  23. package/dist/knowledge/helper-scripts.js +325 -0
  24. package/dist/knowledge/helper-scripts.js.map +1 -0
  25. package/dist/knowledge/manager.d.ts +28 -0
  26. package/dist/knowledge/manager.js +377 -0
  27. package/dist/knowledge/manager.js.map +1 -0
  28. package/dist/knowledge/preprocess.d.ts +10 -0
  29. package/dist/knowledge/preprocess.js +93 -0
  30. package/dist/knowledge/preprocess.js.map +1 -0
  31. package/dist/knowledge/qmd.d.ts +53 -0
  32. package/dist/knowledge/qmd.js +236 -0
  33. package/dist/knowledge/qmd.js.map +1 -0
  34. package/dist/knowledge/rerank.d.ts +14 -0
  35. package/dist/knowledge/rerank.js +256 -0
  36. package/dist/knowledge/rerank.js.map +1 -0
  37. package/dist/knowledge/tools.d.ts +6 -0
  38. package/dist/knowledge/tools.js +131 -0
  39. package/dist/knowledge/tools.js.map +1 -0
  40. package/dist/knowledge/types.d.ts +96 -0
  41. package/dist/knowledge/types.js +2 -0
  42. package/dist/knowledge/types.js.map +1 -0
  43. package/dist/prompts/system.js +64 -41
  44. package/dist/prompts/system.js.map +1 -1
  45. package/dist/tools/registry.d.ts +2 -2
  46. package/dist/tools/registry.js +12 -3
  47. package/dist/tools/registry.js.map +1 -1
  48. package/package.json +1 -1
package/README.md CHANGED
@@ -37,6 +37,8 @@ onesclaw
37
37
 
38
38
  - 路线图:`phases.md`
39
39
  - 蓝图:`docs/blueprint-v1.md`
40
+ - 面试讲述稿:`docs/interview/onesclaw-sre-interview.md`
41
+ - 标准部署文档:`docs/operations/standard-deployment-guide.md`
40
42
  - 阶段门禁文档:`docs/gates/`
41
43
  - 发布运维 Runbook:`docs/operations/release-runbook.md`
42
44
  - Phase1 冲刺看板:`docs/gates/phase1-sprint-board.md`
@@ -7,12 +7,12 @@ import type { SessionState } from './session.js';
7
7
  * 接收用户输入 → 调用 LLM → 执行工具 → 反馈结果 → 循环直到 LLM 结束
8
8
  */
9
9
  export declare class AgentLoop {
10
- conversation: any;
11
- toolRegistry: ToolRegistry;
12
- llmProvider: any;
13
- baseSystemPrompt: string;
14
- chatOptions: ChatOptions;
15
- session: SessionState | null;
10
+ private conversation;
11
+ private toolRegistry;
12
+ private llmProvider;
13
+ private baseSystemPrompt;
14
+ private chatOptions;
15
+ private session;
16
16
  constructor(params: {
17
17
  llmProvider: any;
18
18
  toolRegistry: ToolRegistry;
@@ -20,21 +20,15 @@ export declare class AgentLoop {
20
20
  chatOptions?: ChatOptions;
21
21
  session?: SessionState | null;
22
22
  });
23
- /**
24
- * 动态构建 system prompt
25
- * 将 session 上下文追加到基础 prompt 后
26
- */
27
- buildSystemPrompt(): string;
28
- /**
29
- * 运行时热切换 LLM Provider 和模型
30
- */
23
+ buildSystemPrompt(routePrompt?: string): string;
31
24
  updateProvider(provider: any, model: string): void;
32
- /**
33
- * 清空对话历史(/clear 命令使用)
34
- */
35
25
  clearHistory(): void;
36
- /**
37
- * 处理用户输入,返回事件流供 REPL 消费
38
- */
39
26
  run(userInput: string): AsyncGenerator<StreamEvent, void, unknown>;
27
+ private prefetchOnesDocsGrounding;
28
+ private prefetchReferenceDocsGrounding;
29
+ private resolveToolProfile;
30
+ private getToolFilter;
31
+ private prefetchReferenceFallbackGrounding;
32
+ private executeSyntheticTool;
33
+ private observeToolResult;
40
34
  }
@@ -1,6 +1,8 @@
1
1
  import { Conversation } from './conversation.js';
2
2
  import { logger } from '../cli/logger.js';
3
3
  import { LLMError } from '../errors.js';
4
+ import { buildAllowedCommandLines, buildOnesOpsRepairPrompt, composeGroundedOnesOpsAnswer, selectPrimaryKnowledgeResult, shouldRequireCommandBlock, validateOnesOpsAnswer, } from './ones-answer.js';
5
+ import { buildOnesRoutePrompt, detectOnesRoute } from './ones-routing.js';
4
6
  const MAX_ITERATIONS = 20;
5
7
  /**
6
8
  * Agent 核心循环(ReAct 模式)
@@ -22,57 +24,68 @@ export class AgentLoop {
22
24
  this.chatOptions = params.chatOptions || {};
23
25
  this.session = params.session || null;
24
26
  }
25
- /**
26
- * 动态构建 system prompt
27
- * 将 session 上下文追加到基础 prompt 后
28
- */
29
- buildSystemPrompt() {
30
- const sessionSection = this.session?.toPromptSection() || '';
31
- if (!sessionSection)
32
- return this.baseSystemPrompt;
33
- return this.baseSystemPrompt + '\n\n' + sessionSection;
34
- }
35
- /**
36
- * 运行时热切换 LLM Provider 和模型
37
- */
27
+ buildSystemPrompt(routePrompt = '') {
28
+ const sections = [this.baseSystemPrompt, this.session?.toPromptSection() || '', routePrompt].filter(Boolean);
29
+ return sections.join('\n\n');
30
+ }
38
31
  updateProvider(provider, model) {
39
32
  this.llmProvider = provider;
40
33
  this.chatOptions = { ...this.chatOptions, model };
41
34
  }
42
- /**
43
- * 清空对话历史(/clear 命令使用)
44
- */
45
35
  clearHistory() {
46
36
  this.conversation.clear();
47
37
  this.session?.clearConversation();
48
38
  }
49
- /**
50
- * 处理用户输入,返回事件流供 REPL 消费
51
- */
52
39
  async *run(userInput) {
40
+ const turnState = {
41
+ route: detectOnesRoute(userInput),
42
+ routePrompt: '',
43
+ commandBlocksDetected: false,
44
+ answerRetryUsed: false,
45
+ usedKbSearch: false,
46
+ usedLocalKb: false,
47
+ usedContext7: false,
48
+ searchResults: [],
49
+ commandBlocks: [],
50
+ primaryDoc: null,
51
+ primarySource: null,
52
+ toolProfile: 'profile_general',
53
+ toolExecutions: 0,
54
+ referenceFallbackTriggered: false,
55
+ };
56
+ turnState.routePrompt = buildOnesRoutePrompt(turnState.route);
57
+ turnState.toolProfile = this.resolveToolProfile(turnState.route);
53
58
  this.session?.incrementTurn();
54
59
  this.session?.checkUserInput(userInput);
55
60
  this.conversation.addUserMessage(userInput);
61
+ if (turnState.route.kind === 'ones_docs_ops') {
62
+ if (turnState.route.subtype === 'reference') {
63
+ yield* this.prefetchReferenceDocsGrounding(userInput, turnState);
64
+ }
65
+ else {
66
+ yield* this.prefetchOnesDocsGrounding(userInput, turnState);
67
+ }
68
+ }
56
69
  for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
57
- // 通知 REPL:新一轮 LLM 调用开始
58
70
  yield { type: 'turn_start' };
59
- // 累积文本和工具调用,用于重建助手消息
60
71
  let accumulatedText = '';
61
72
  const toolCalls = [];
62
73
  let currentToolId = '';
63
74
  let currentToolName = '';
64
75
  let currentInputJson = '';
65
- // 调用 LLM 并转发流式事件
66
- const stream = this.llmProvider.chat(this.conversation.getMessages(), this.toolRegistry.getToolDefinitions(), {
76
+ const toolFilter = this.getToolFilter(turnState);
77
+ const stream = this.llmProvider.chat(this.conversation.getMessages(), this.toolRegistry.getToolDefinitions(toolFilter), {
67
78
  ...this.chatOptions,
68
- system: this.buildSystemPrompt() || undefined,
79
+ system: this.buildSystemPrompt(turnState.routePrompt) || undefined,
69
80
  });
70
81
  let shouldRetryWithTruncation = false;
71
82
  for await (const event of stream) {
72
83
  switch (event.type) {
73
84
  case 'text_delta':
74
85
  accumulatedText += event.text;
75
- yield event;
86
+ if (turnState.route.kind !== 'ones_docs_ops') {
87
+ yield event;
88
+ }
76
89
  break;
77
90
  case 'tool_use_start':
78
91
  currentToolId = event.id;
@@ -95,7 +108,6 @@ export class AgentLoop {
95
108
  yield event;
96
109
  break;
97
110
  case 'error': {
98
- // Context length exceeded → 截断历史并重试
99
111
  if (event.error instanceof LLMError &&
100
112
  event.error.statusCode === 400 &&
101
113
  (event.error.message.includes('context') ||
@@ -118,11 +130,9 @@ export class AgentLoop {
118
130
  }
119
131
  }
120
132
  }
121
- // 截断后重试:跳到外层 for 循环下一轮
122
133
  if (shouldRetryWithTruncation) {
123
134
  continue;
124
135
  }
125
- // 重建助手消息并保存到对话历史
126
136
  const contentBlocks = [];
127
137
  if (accumulatedText) {
128
138
  contentBlocks.push({ type: 'text', text: accumulatedText });
@@ -133,24 +143,79 @@ export class AgentLoop {
133
143
  input = call.inputJson ? JSON.parse(call.inputJson) : {};
134
144
  }
135
145
  catch {
136
- // 解析失败时用空对象
146
+ input = {};
137
147
  }
138
- const block = {
148
+ contentBlocks.push({
139
149
  type: 'tool_use',
140
150
  id: call.id,
141
151
  name: call.name,
142
152
  input,
153
+ });
154
+ }
155
+ if (toolCalls.length === 0 &&
156
+ turnState.route.kind === 'ones_docs_ops' &&
157
+ turnState.route.subtype === 'actionable') {
158
+ const grounding = {
159
+ question: userInput,
160
+ searchResults: turnState.searchResults,
161
+ commandBlocks: turnState.commandBlocks,
162
+ helperScripts: [],
163
+ usedContext7: turnState.usedContext7,
143
164
  };
144
- contentBlocks.push(block);
165
+ const composeStart = Date.now();
166
+ const groundedText = composeGroundedOnesOpsAnswer(accumulatedText, grounding);
167
+ const validation = validateOnesOpsAnswer(groundedText, {
168
+ requireCodeBlock: shouldRequireCommandBlock(userInput, grounding),
169
+ allowedCommandLines: buildAllowedCommandLines(grounding),
170
+ disallowContext7: turnState.searchResults.length > 0 || turnState.commandBlocks.length > 0,
171
+ });
172
+ if (!validation.valid && !turnState.answerRetryUsed) {
173
+ turnState.answerRetryUsed = true;
174
+ if (contentBlocks.length > 0) {
175
+ this.conversation.addAssistantMessage(contentBlocks);
176
+ }
177
+ this.conversation.addUserMessage(buildOnesOpsRepairPrompt(validation, grounding));
178
+ continue;
179
+ }
180
+ if (contentBlocks.length > 0 && contentBlocks[0].type === 'text') {
181
+ contentBlocks[0].text = groundedText;
182
+ }
183
+ else if (groundedText) {
184
+ contentBlocks.unshift({ type: 'text', text: groundedText });
185
+ }
186
+ accumulatedText = groundedText;
187
+ logger.debug('agent', `ones docs composer completed in ${Date.now() - composeStart}ms`, {
188
+ route_kind: turnState.route.kind,
189
+ route_subtype: turnState.route.subtype,
190
+ primary_source: turnState.primarySource,
191
+ primary_doc: turnState.primaryDoc,
192
+ tool_profile: turnState.toolProfile,
193
+ context7_used: turnState.usedContext7,
194
+ local_kb_used: turnState.usedLocalKb,
195
+ tool_rounds: turnState.toolExecutions,
196
+ reference_fallback_triggered: turnState.referenceFallbackTriggered,
197
+ });
145
198
  }
146
199
  if (contentBlocks.length > 0) {
147
200
  this.conversation.addAssistantMessage(contentBlocks);
148
201
  }
149
- // 无工具调用 → 对话结束
150
202
  if (toolCalls.length === 0) {
203
+ if (turnState.route.kind === 'ones_docs_ops' && accumulatedText) {
204
+ logger.debug('agent', 'ones docs answer completed', {
205
+ route_kind: turnState.route.kind,
206
+ route_subtype: turnState.route.subtype,
207
+ primary_source: turnState.primarySource,
208
+ primary_doc: turnState.primaryDoc,
209
+ tool_profile: turnState.toolProfile,
210
+ context7_used: turnState.usedContext7,
211
+ local_kb_used: turnState.usedLocalKb,
212
+ tool_rounds: turnState.toolExecutions,
213
+ reference_fallback_triggered: turnState.referenceFallbackTriggered,
214
+ });
215
+ yield { type: 'text_delta', text: accumulatedText };
216
+ }
151
217
  return;
152
218
  }
153
- // 执行所有工具并收集结果
154
219
  const toolResults = [];
155
220
  for (const call of toolCalls) {
156
221
  let args = {};
@@ -169,9 +234,10 @@ export class AgentLoop {
169
234
  const toolStart = Date.now();
170
235
  const result = await this.toolRegistry.executeTool(call.name, args);
171
236
  const toolDuration = Date.now() - toolStart;
237
+ turnState.toolExecutions += 1;
172
238
  logger.debug('tool', `${call.name} completed in ${toolDuration}ms`);
173
- // 观察工具执行结果,更新会话状态
174
239
  this.session?.observe(call.name, args, result);
240
+ this.observeToolResult(call.name, result, turnState);
175
241
  const maxResultLen = 500;
176
242
  const resultSummary = result.content.length > maxResultLen
177
243
  ? result.content.slice(0, maxResultLen) + '…'
@@ -187,7 +253,6 @@ export class AgentLoop {
187
253
  content: result.content,
188
254
  isError: result.isError,
189
255
  });
190
- // SSH 执行失败时立即终止当前任务,避免继续执行后续操作
191
256
  if (call.name === 'ssh_execute' && result.isError) {
192
257
  this.conversation.addToolResults(toolResults);
193
258
  yield {
@@ -198,16 +263,290 @@ export class AgentLoop {
198
263
  return;
199
264
  }
200
265
  }
201
- // 工具结果添加到对话历史
202
266
  this.conversation.addToolResults(toolResults);
203
- // 继续循环:带工具结果再次调用 LLM
204
267
  }
205
- // 达到最大循环次数
206
268
  yield {
207
269
  type: 'text_delta',
208
270
  text: '\n[已达到最大工具调用轮次,停止处理]',
209
271
  };
210
272
  yield { type: 'message_end', stop_reason: 'end_turn' };
211
273
  }
274
+ async *prefetchOnesDocsGrounding(userInput, turnState) {
275
+ if (!this.toolRegistry.hasTool('kb_search')) {
276
+ return;
277
+ }
278
+ const searchResult = await this.executeSyntheticTool('prefetch-kb-search-1', 'kb_search', { query: userInput }, turnState);
279
+ yield* searchResult.events;
280
+ if (searchResult.result?.isError || turnState.searchResults.length === 0) {
281
+ return;
282
+ }
283
+ const primary = selectPrimaryKnowledgeResult(userInput, turnState.searchResults, turnState.commandBlocks);
284
+ turnState.primaryDoc = primary?.relative_path ?? null;
285
+ if (!turnState.primaryDoc) {
286
+ return;
287
+ }
288
+ turnState.routePrompt = [
289
+ turnState.routePrompt,
290
+ `- 本轮已预取本地知识库主文档:${turnState.primaryDoc}。`,
291
+ '- 优先基于当前主文档和已有命令块直接回答,除非主文档缺命令或缺正文,不要重复调用 kb_search / kb_extract_commands。',
292
+ ].join('\n');
293
+ if (!this.toolRegistry.hasTool('kb_extract_commands')) {
294
+ return;
295
+ }
296
+ const commandResult = await this.executeSyntheticTool('prefetch-kb-extract-1', 'kb_extract_commands', { path: turnState.primaryDoc }, turnState);
297
+ yield* commandResult.events;
298
+ }
299
+ async *prefetchReferenceDocsGrounding(userInput, turnState) {
300
+ if (!this.toolRegistry.hasTool('context7__query-docs')) {
301
+ yield* this.prefetchReferenceFallbackGrounding(userInput, turnState, 'missing_context7');
302
+ return;
303
+ }
304
+ const libraryId = selectContext7LibraryId(userInput);
305
+ turnState.routePrompt = [
306
+ turnState.routePrompt,
307
+ `- 本轮已预取 Context7 文档库:${libraryId}。`,
308
+ '- 如果当前预取结果已经足够回答,直接输出简洁概览;只有结果不足时才继续调用本地知识库或 ONES Wiki。',
309
+ ].join('\n');
310
+ const referenceResult = await this.executeSyntheticTool('prefetch-context7-query-1', 'context7__query-docs', {
311
+ libraryId,
312
+ query: userInput,
313
+ }, turnState);
314
+ yield* referenceResult.events;
315
+ const sufficiency = assessReferencePrefetch(userInput, referenceResult.result.content, referenceResult.result.isError);
316
+ logger.debug('agent', 'reference prefetch assessed', {
317
+ route_kind: turnState.route.kind,
318
+ route_subtype: turnState.route.subtype,
319
+ tool_profile: turnState.toolProfile,
320
+ primary_source: turnState.primarySource,
321
+ context7_library: libraryId,
322
+ context7_used: turnState.usedContext7,
323
+ local_kb_used: turnState.usedLocalKb,
324
+ sufficient: sufficiency.sufficient,
325
+ reasons: sufficiency.reasons,
326
+ matched_keywords: sufficiency.matchedKeywords,
327
+ reference_fallback_triggered: !sufficiency.sufficient,
328
+ });
329
+ if (sufficiency.sufficient) {
330
+ turnState.routePrompt = [
331
+ turnState.routePrompt,
332
+ '- 当前 Context7 预取结果已足够,直接输出简洁概览,不要继续扩工具。',
333
+ ].join('\n');
334
+ return;
335
+ }
336
+ yield* this.prefetchReferenceFallbackGrounding(userInput, turnState, sufficiency.reasons.join(','));
337
+ }
338
+ resolveToolProfile(route) {
339
+ if (route.kind === 'ones_issue_query') {
340
+ return 'profile_issue_query';
341
+ }
342
+ if (route.kind === 'ones_docs_ops' && route.subtype === 'reference') {
343
+ return 'profile_reference';
344
+ }
345
+ if (route.kind === 'ones_docs_ops') {
346
+ return 'profile_actionable';
347
+ }
348
+ return 'profile_general';
349
+ }
350
+ getToolFilter(turnState) {
351
+ if (turnState.toolProfile === 'profile_general') {
352
+ return undefined;
353
+ }
354
+ const allowed = new Set();
355
+ if (turnState.toolProfile === 'profile_issue_query') {
356
+ return (name) => name.startsWith('ones__');
357
+ }
358
+ if (turnState.toolProfile === 'profile_reference') {
359
+ [
360
+ 'context7__query-docs',
361
+ 'ones__search_for_references_in_wiki',
362
+ 'ones__get_page_details',
363
+ 'kb_search',
364
+ 'kb_get_document',
365
+ ].forEach((name) => allowed.add(name));
366
+ return (name) => allowed.has(name);
367
+ }
368
+ [
369
+ 'kb_search',
370
+ 'kb_extract_commands',
371
+ 'kb_get_document',
372
+ 'ones__search_for_references_in_wiki',
373
+ 'ones__get_page_details',
374
+ ].forEach((name) => allowed.add(name));
375
+ return (name) => allowed.has(name);
376
+ }
377
+ async *prefetchReferenceFallbackGrounding(userInput, turnState, reason) {
378
+ turnState.referenceFallbackTriggered = true;
379
+ turnState.routePrompt = [
380
+ turnState.routePrompt,
381
+ `- Context7 结果不足,已触发 fallback:${reason}。`,
382
+ '- 先参考本地知识库的概览结果;若本地知识库仍不足,再参考 ONES Wiki。',
383
+ '- 本轮是概览问答,不要默认抽命令块,也不要切到重型 docs-only 命令回答。',
384
+ ].join('\n');
385
+ if (this.toolRegistry.hasTool('kb_search')) {
386
+ const kbResult = await this.executeSyntheticTool('prefetch-kb-search-reference-1', 'kb_search', { query: userInput }, turnState);
387
+ yield* kbResult.events;
388
+ if (!kbResult.result?.isError && turnState.searchResults.length > 0) {
389
+ turnState.primaryDoc = turnState.searchResults[0]?.relative_path ?? turnState.primaryDoc;
390
+ turnState.primarySource = 'local_kb';
391
+ return;
392
+ }
393
+ }
394
+ if (this.toolRegistry.hasTool('ones__search_for_references_in_wiki')) {
395
+ const wikiResult = await this.executeSyntheticTool('prefetch-ones-wiki-reference-1', 'ones__search_for_references_in_wiki', { question: userInput }, turnState);
396
+ yield* wikiResult.events;
397
+ if (!wikiResult.result?.isError) {
398
+ turnState.primarySource = 'ones_mcp';
399
+ }
400
+ }
401
+ }
402
+ async executeSyntheticTool(toolUseId, name, args, turnState) {
403
+ const events = [{ type: 'tool_execute_start', name, args }];
404
+ const assistantBlocks = [{ type: 'tool_use', id: toolUseId, name, input: args }];
405
+ this.conversation.addAssistantMessage(assistantBlocks);
406
+ const toolStart = Date.now();
407
+ const result = await this.toolRegistry.executeTool(name, args);
408
+ const toolDuration = Date.now() - toolStart;
409
+ turnState.toolExecutions += 1;
410
+ logger.debug('tool', `${name} completed in ${toolDuration}ms`, { synthetic: true });
411
+ this.session?.observe(name, args, result);
412
+ this.observeToolResult(name, result, turnState);
413
+ const maxResultLen = 500;
414
+ const resultSummary = result.content.length > maxResultLen ? result.content.slice(0, maxResultLen) + '…' : result.content;
415
+ events.push({
416
+ type: 'tool_execute_end',
417
+ name,
418
+ result: resultSummary,
419
+ isError: result.isError,
420
+ });
421
+ this.conversation.addToolResults([
422
+ {
423
+ toolUseId,
424
+ content: result.content,
425
+ isError: result.isError,
426
+ },
427
+ ]);
428
+ return { result, events };
429
+ }
430
+ observeToolResult(name, result, turnState) {
431
+ if (name === 'kb_search' && !result.isError) {
432
+ const parsed = tryParseJsonArray(result.content);
433
+ turnState.usedKbSearch = true;
434
+ turnState.usedLocalKb = true;
435
+ if (!turnState.primarySource || turnState.referenceFallbackTriggered) {
436
+ turnState.primarySource = 'local_kb';
437
+ }
438
+ if (parsed.length > 0) {
439
+ turnState.searchResults = parsed;
440
+ }
441
+ }
442
+ if (name === 'kb_extract_commands' && !result.isError) {
443
+ const parsed = tryParseJsonArray(result.content);
444
+ turnState.usedLocalKb = true;
445
+ if (!turnState.primarySource || turnState.referenceFallbackTriggered) {
446
+ turnState.primarySource = 'local_kb';
447
+ }
448
+ if (parsed.length > 0) {
449
+ turnState.commandBlocksDetected = true;
450
+ turnState.commandBlocks = dedupeCommandBlocks([
451
+ ...turnState.commandBlocks,
452
+ ...parsed,
453
+ ]);
454
+ }
455
+ }
456
+ if (name.startsWith('context7__')) {
457
+ turnState.usedContext7 = true;
458
+ if (!turnState.primarySource && !result.isError) {
459
+ turnState.primarySource = 'context7';
460
+ }
461
+ }
462
+ if (name.startsWith('ones__') && (!turnState.primarySource || turnState.referenceFallbackTriggered) && !result.isError) {
463
+ turnState.primarySource = 'ones_mcp';
464
+ }
465
+ }
466
+ }
467
+ function selectContext7LibraryId(query) {
468
+ if (/(开发者|插件|openapi|api|sdk|脚手架|扩展)/i.test(query)) {
469
+ return '/websites/developer_ones_cn';
470
+ }
471
+ return '/websites/opsdoc_ones_cn';
472
+ }
473
+ function assessReferencePrefetch(question, content, isError) {
474
+ const reasons = [];
475
+ const normalized = normalizeReferenceText(content);
476
+ const matchedKeywords = extractReferenceKeywords(question).filter((keyword) => normalized.includes(keyword));
477
+ if (isError) {
478
+ reasons.push('tool_error');
479
+ }
480
+ if (normalized.length === 0) {
481
+ reasons.push('empty_result');
482
+ }
483
+ if (normalized.length > 0 && normalized.length < 60) {
484
+ reasons.push('too_short');
485
+ }
486
+ const overviewSignals = ['支持', '方式', '单机', '集群', '在线', '离线', 'k3s', 'k8s', '架构', '概览', '介绍', '外置'];
487
+ const matchedOverviewSignals = overviewSignals.filter((signal) => normalized.includes(signal.toLowerCase()));
488
+ if (matchedOverviewSignals.length === 0) {
489
+ reasons.push('missing_overview_signals');
490
+ }
491
+ if (matchedKeywords.length === 0 && extractReferenceKeywords(question).length > 0) {
492
+ reasons.push('missing_question_keywords');
493
+ }
494
+ const codeFenceCount = (content.match(/```/g) || []).length / 2;
495
+ const headingCount = (content.match(/^###\s+/gm) || []).length;
496
+ if (codeFenceCount > 0 && headingCount === 0) {
497
+ reasons.push('command_fragment_only');
498
+ }
499
+ return {
500
+ sufficient: reasons.length === 0,
501
+ reasons,
502
+ matchedKeywords,
503
+ };
504
+ }
505
+ function extractReferenceKeywords(question) {
506
+ const keywords = [
507
+ '部署方式',
508
+ '单机',
509
+ '集群',
510
+ '在线',
511
+ '离线',
512
+ '架构',
513
+ '介绍',
514
+ '原理',
515
+ '插件',
516
+ 'openapi',
517
+ 'sdk',
518
+ ];
519
+ const normalized = question.toLowerCase();
520
+ return keywords.filter((keyword) => normalized.includes(keyword.toLowerCase()));
521
+ }
522
+ function normalizeReferenceText(content) {
523
+ return content
524
+ .replace(/```[\s\S]*?```/g, ' ')
525
+ .replace(/[`#>*_-]/g, ' ')
526
+ .replace(/\s+/g, ' ')
527
+ .trim()
528
+ .toLowerCase();
529
+ }
530
+ function tryParseJsonArray(content) {
531
+ try {
532
+ const parsed = JSON.parse(content);
533
+ return Array.isArray(parsed) ? parsed : [];
534
+ }
535
+ catch {
536
+ return [];
537
+ }
538
+ }
539
+ function dedupeCommandBlocks(blocks) {
540
+ const seen = new Set();
541
+ const deduped = [];
542
+ for (const block of blocks) {
543
+ const key = `${block.relative_path}::${block.section ?? ''}::${block.command}`;
544
+ if (seen.has(key)) {
545
+ continue;
546
+ }
547
+ seen.add(key);
548
+ deduped.push(block);
549
+ }
550
+ return deduped;
212
551
  }
213
552
  //# sourceMappingURL=loop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { KnowledgeCommandBlock, KnowledgeHelperScript, KnowledgeSearchResult } from '../knowledge/types.js';
2
+ export interface OnesDocsGrounding {
3
+ question: string;
4
+ searchResults: KnowledgeSearchResult[];
5
+ commandBlocks: KnowledgeCommandBlock[];
6
+ helperScripts?: KnowledgeHelperScript[];
7
+ usedContext7: boolean;
8
+ }
9
+ export interface OnesAnswerValidationResult {
10
+ valid: boolean;
11
+ missingHeadings: string[];
12
+ missingCodeBlock: boolean;
13
+ invalidCommandLines: string[];
14
+ referencesNotAtEnd: boolean;
15
+ context7Violation: boolean;
16
+ }
17
+ interface OnesAnswerValidationOptions {
18
+ requireCodeBlock: boolean;
19
+ allowedCommandLines?: string[];
20
+ disallowContext7?: boolean;
21
+ }
22
+ export declare function validateOnesOpsAnswer(markdown: string, options: OnesAnswerValidationOptions): OnesAnswerValidationResult;
23
+ export declare function buildOnesOpsRepairPrompt(validation: OnesAnswerValidationResult, grounding: OnesDocsGrounding): string;
24
+ export declare function buildOnesOpsGroundingPrompt(question: string): string;
25
+ export declare function shouldRequireCommandBlock(question: string, grounding: OnesDocsGrounding): boolean;
26
+ export declare function buildAllowedCommandLines(grounding: OnesDocsGrounding): string[];
27
+ export declare function composeGroundedOnesOpsAnswer(draft: string, grounding: OnesDocsGrounding): string;
28
+ export declare function selectPrimaryKnowledgeResult(question: string, searchResults: KnowledgeSearchResult[], commandBlocks?: KnowledgeCommandBlock[]): KnowledgeSearchResult | null;
29
+ export {};