@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.
- package/README.md +2 -0
- package/dist/agent/loop.d.ts +14 -20
- package/dist/agent/loop.js +377 -38
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/ones-answer.d.ts +29 -0
- package/dist/agent/ones-answer.js +380 -0
- package/dist/agent/ones-answer.js.map +1 -0
- package/dist/agent/ones-routing.d.ts +10 -0
- package/dist/agent/ones-routing.js +160 -0
- package/dist/agent/ones-routing.js.map +1 -0
- package/dist/cli/logger.js +17 -1
- package/dist/cli/logger.js.map +1 -1
- package/dist/commands/kb.d.ts +4 -0
- package/dist/commands/kb.js +154 -0
- package/dist/commands/kb.js.map +1 -0
- package/dist/config/manager.d.ts +43 -0
- package/dist/config/manager.js +143 -3
- package/dist/config/manager.js.map +1 -1
- package/dist/config/types.d.ts +2 -0
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge/helper-scripts.d.ts +11 -0
- package/dist/knowledge/helper-scripts.js +325 -0
- package/dist/knowledge/helper-scripts.js.map +1 -0
- package/dist/knowledge/manager.d.ts +28 -0
- package/dist/knowledge/manager.js +377 -0
- package/dist/knowledge/manager.js.map +1 -0
- package/dist/knowledge/preprocess.d.ts +10 -0
- package/dist/knowledge/preprocess.js +93 -0
- package/dist/knowledge/preprocess.js.map +1 -0
- package/dist/knowledge/qmd.d.ts +53 -0
- package/dist/knowledge/qmd.js +236 -0
- package/dist/knowledge/qmd.js.map +1 -0
- package/dist/knowledge/rerank.d.ts +14 -0
- package/dist/knowledge/rerank.js +256 -0
- package/dist/knowledge/rerank.js.map +1 -0
- package/dist/knowledge/tools.d.ts +6 -0
- package/dist/knowledge/tools.js +131 -0
- package/dist/knowledge/tools.js.map +1 -0
- package/dist/knowledge/types.d.ts +96 -0
- package/dist/knowledge/types.js +2 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/prompts/system.js +64 -41
- package/dist/prompts/system.js.map +1 -1
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/registry.js +12 -3
- package/dist/tools/registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
const REQUIRED_HEADINGS = [
|
|
2
|
+
'问题重述',
|
|
3
|
+
'结论',
|
|
4
|
+
'前提与适用范围',
|
|
5
|
+
'操作步骤',
|
|
6
|
+
'验证命令/检查点',
|
|
7
|
+
'风险与回滚',
|
|
8
|
+
'参考来源',
|
|
9
|
+
];
|
|
10
|
+
const COMMAND_QUESTION_RE = /安装|部署|升级|迁移|备份|恢复|envcheck|环境检测|环境要求|巡检|检查|健康检查/i;
|
|
11
|
+
const HA_RE = /集群|\bha\b|高可用/i;
|
|
12
|
+
const ENV_RE = /环境要求|环境检测|envcheck|资源要求/i;
|
|
13
|
+
const INSPECTION_RE = /巡检|健康检查|检查项|后端健康/i;
|
|
14
|
+
const INSTALL_NEW_RE = /install-upgrade\/k3s\/install-new\.md$/i;
|
|
15
|
+
const INSTALL_HA_RE = /install-upgrade\/k3s\/install-ha\.md$/i;
|
|
16
|
+
const ENVCHECK_RE = /environmental-requirements\/k3s\/envcheck\.md$/i;
|
|
17
|
+
const SERVER_CHECKLIST_RE = /fault\/tricks\/server-checklist\.md$/i;
|
|
18
|
+
export function validateOnesOpsAnswer(markdown, options) {
|
|
19
|
+
const missingHeadings = REQUIRED_HEADINGS.filter((heading) => !hasHeading(markdown, heading));
|
|
20
|
+
const missingCodeBlock = options.requireCodeBlock && !/```[\s\S]*?```/.test(markdown);
|
|
21
|
+
const invalidCommandLines = collectUngroundedCommandLines(markdown, options.allowedCommandLines ?? []);
|
|
22
|
+
const referencesNotAtEnd = hasReferenceSectionNotAtEnd(markdown);
|
|
23
|
+
const context7Violation = Boolean(options.disallowContext7) && /context7|opsdoc_ones_cn|developer_ones_cn/i.test(markdown);
|
|
24
|
+
return {
|
|
25
|
+
valid: missingHeadings.length === 0 &&
|
|
26
|
+
!missingCodeBlock &&
|
|
27
|
+
invalidCommandLines.length === 0 &&
|
|
28
|
+
!referencesNotAtEnd &&
|
|
29
|
+
!context7Violation,
|
|
30
|
+
missingHeadings,
|
|
31
|
+
missingCodeBlock,
|
|
32
|
+
invalidCommandLines,
|
|
33
|
+
referencesNotAtEnd,
|
|
34
|
+
context7Violation,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function buildOnesOpsRepairPrompt(validation, grounding) {
|
|
38
|
+
const lines = [
|
|
39
|
+
'你上一版回答不符合 ONES 文档问答契约。请只输出修正后的最终答案,不要解释。',
|
|
40
|
+
'本轮必须严格以本地 Markdown 文档为准,不要输出文档中不存在的命令名。',
|
|
41
|
+
'如果还没有调用 kb_search / kb_extract_commands,请先调用它们再回答。',
|
|
42
|
+
'最终答案必须固定使用以下 7 个 Markdown 标题:问题重述、结论、前提与适用范围、操作步骤(编号)、验证命令/检查点、风险与回滚、参考来源。',
|
|
43
|
+
'正文不要逐段插来源;只在文末“参考来源”中列出文档路径。',
|
|
44
|
+
'禁止输出以下命令名:ones-cli、install.sh、envcheck.sh。',
|
|
45
|
+
];
|
|
46
|
+
if (grounding.searchResults.length > 0) {
|
|
47
|
+
lines.push('优先参考以下主文档结果:');
|
|
48
|
+
for (const result of grounding.searchResults.slice(0, 3)) {
|
|
49
|
+
lines.push(`- ${result.citation}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (grounding.commandBlocks.length > 0) {
|
|
53
|
+
lines.push('只允许从以下命令块中摘录命令:');
|
|
54
|
+
for (const block of grounding.commandBlocks.slice(0, 4)) {
|
|
55
|
+
lines.push(`- ${block.citation}`);
|
|
56
|
+
lines.push('```bash');
|
|
57
|
+
lines.push(block.command);
|
|
58
|
+
lines.push('```');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (validation.missingHeadings.length > 0) {
|
|
62
|
+
lines.push(`当前缺少标题:${validation.missingHeadings.join('、')}`);
|
|
63
|
+
}
|
|
64
|
+
if (validation.missingCodeBlock) {
|
|
65
|
+
lines.push('当前缺少代码块。命中安装/部署/巡检问题时必须输出文档里的真实 Linux 命令。');
|
|
66
|
+
}
|
|
67
|
+
if (validation.invalidCommandLines.length > 0) {
|
|
68
|
+
lines.push(`以下命令行未被文档 grounding 支持:${validation.invalidCommandLines.join(' | ')}`);
|
|
69
|
+
}
|
|
70
|
+
if (validation.referencesNotAtEnd) {
|
|
71
|
+
lines.push('“参考来源”必须是最后一个标题,之后不要再追加正文。');
|
|
72
|
+
}
|
|
73
|
+
if (validation.context7Violation) {
|
|
74
|
+
lines.push('本轮命中本地文档后不要再引用 Context7。');
|
|
75
|
+
}
|
|
76
|
+
return lines.join('\n');
|
|
77
|
+
}
|
|
78
|
+
export function buildOnesOpsGroundingPrompt(question) {
|
|
79
|
+
return [
|
|
80
|
+
`请先基于本地知识库回答这个 ONES 文档问题:${question}`,
|
|
81
|
+
'必须先调用 kb_search 检索文档。',
|
|
82
|
+
'对主命中文档继续调用 kb_extract_commands,必要时再调用 kb_get_document。',
|
|
83
|
+
'不要直接输出答案,不要使用 Context7,不要编造文档中不存在的命令名。',
|
|
84
|
+
'当前禁止输出:ones-cli、install.sh、envcheck.sh。',
|
|
85
|
+
].join('\n');
|
|
86
|
+
}
|
|
87
|
+
export function shouldRequireCommandBlock(question, grounding) {
|
|
88
|
+
return grounding.commandBlocks.length > 0 || COMMAND_QUESTION_RE.test(question);
|
|
89
|
+
}
|
|
90
|
+
export function buildAllowedCommandLines(grounding) {
|
|
91
|
+
const lines = new Set();
|
|
92
|
+
for (const block of grounding.commandBlocks) {
|
|
93
|
+
for (const line of extractShellLikeLinesFromCode(block.command)) {
|
|
94
|
+
lines.add(normalizeCommandLine(line));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
for (const script of grounding.helperScripts ?? []) {
|
|
98
|
+
lines.add(normalizeCommandLine(script.example_invocation));
|
|
99
|
+
}
|
|
100
|
+
return Array.from(lines);
|
|
101
|
+
}
|
|
102
|
+
export function composeGroundedOnesOpsAnswer(draft, grounding) {
|
|
103
|
+
const sections = splitRequiredSections(draft);
|
|
104
|
+
const primary = selectPrimaryKnowledgeResult(grounding.question, grounding.searchResults, grounding.commandBlocks);
|
|
105
|
+
const primaryBlocks = pickPrimaryCommandBlocks(grounding, primary?.relative_path ?? null);
|
|
106
|
+
const references = buildReferenceLines(grounding, primary?.relative_path ?? null);
|
|
107
|
+
const questionRestate = normalizeSectionText(stripCodeBlocks(sections.get('问题重述') ?? '')) || `你在问:${grounding.question}`;
|
|
108
|
+
const conclusion = normalizeSectionText(stripCodeBlocks(sections.get('结论') ?? '')) ||
|
|
109
|
+
buildConclusion(primary?.relative_path ?? null, primary?.title ?? null);
|
|
110
|
+
const prerequisites = normalizeSectionText(stripCodeBlocks(sections.get('前提与适用范围') ?? '')) ||
|
|
111
|
+
buildPrerequisites(primary?.relative_path ?? null, primaryBlocks);
|
|
112
|
+
const verification = normalizeSectionText(stripCodeBlocks(sections.get('验证命令/检查点') ?? '')) ||
|
|
113
|
+
buildVerification(primary?.relative_path ?? null);
|
|
114
|
+
const risks = normalizeSectionText(stripCodeBlocks(sections.get('风险与回滚') ?? '')) ||
|
|
115
|
+
buildRisks(primary?.relative_path ?? null);
|
|
116
|
+
const parts = [
|
|
117
|
+
'## 问题重述',
|
|
118
|
+
'',
|
|
119
|
+
questionRestate,
|
|
120
|
+
'',
|
|
121
|
+
'## 结论',
|
|
122
|
+
'',
|
|
123
|
+
conclusion,
|
|
124
|
+
'',
|
|
125
|
+
'## 前提与适用范围',
|
|
126
|
+
'',
|
|
127
|
+
prerequisites,
|
|
128
|
+
'',
|
|
129
|
+
'## 操作步骤(编号)',
|
|
130
|
+
'',
|
|
131
|
+
buildSteps(primaryBlocks),
|
|
132
|
+
'',
|
|
133
|
+
'## 验证命令/检查点',
|
|
134
|
+
'',
|
|
135
|
+
verification,
|
|
136
|
+
'',
|
|
137
|
+
'## 风险与回滚',
|
|
138
|
+
'',
|
|
139
|
+
risks,
|
|
140
|
+
'',
|
|
141
|
+
'## 参考来源',
|
|
142
|
+
'',
|
|
143
|
+
references,
|
|
144
|
+
'',
|
|
145
|
+
];
|
|
146
|
+
return parts.join('\n');
|
|
147
|
+
}
|
|
148
|
+
export function selectPrimaryKnowledgeResult(question, searchResults, commandBlocks = []) {
|
|
149
|
+
const results = searchResults.filter((item) => item.relative_path);
|
|
150
|
+
if (results.length === 0) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const findByPattern = (pattern) => results.find((item) => pattern.test(item.relative_path));
|
|
154
|
+
if (INSPECTION_RE.test(question)) {
|
|
155
|
+
return findByPattern(SERVER_CHECKLIST_RE) ?? results[0];
|
|
156
|
+
}
|
|
157
|
+
if (ENV_RE.test(question)) {
|
|
158
|
+
return findByPattern(ENVCHECK_RE) ?? results[0];
|
|
159
|
+
}
|
|
160
|
+
if (HA_RE.test(question)) {
|
|
161
|
+
return (findByPattern(INSTALL_HA_RE) ??
|
|
162
|
+
results.find((item) => commandBlocks.some((block) => block.relative_path === item.relative_path)) ??
|
|
163
|
+
results[0]);
|
|
164
|
+
}
|
|
165
|
+
if (COMMAND_QUESTION_RE.test(question)) {
|
|
166
|
+
return (findByPattern(INSTALL_NEW_RE) ??
|
|
167
|
+
results.find((item) => commandBlocks.some((block) => block.relative_path === item.relative_path)) ??
|
|
168
|
+
results[0]);
|
|
169
|
+
}
|
|
170
|
+
return results[0];
|
|
171
|
+
}
|
|
172
|
+
function splitRequiredSections(markdown) {
|
|
173
|
+
const matches = Array.from(markdown.matchAll(/(^|\n)##\s+([^\n]+)\n/g));
|
|
174
|
+
const sections = new Map();
|
|
175
|
+
for (let index = 0; index < matches.length; index++) {
|
|
176
|
+
const heading = normalizeHeading(matches[index][2]);
|
|
177
|
+
const start = matches[index].index + matches[index][0].length;
|
|
178
|
+
const end = index + 1 < matches.length ? matches[index + 1].index + matches[index + 1][1].length : markdown.length;
|
|
179
|
+
sections.set(heading, markdown.slice(start, end).trim());
|
|
180
|
+
}
|
|
181
|
+
return sections;
|
|
182
|
+
}
|
|
183
|
+
function pickPrimaryCommandBlocks(grounding, relativePath) {
|
|
184
|
+
if (relativePath) {
|
|
185
|
+
const direct = grounding.commandBlocks.filter((block) => block.relative_path === relativePath);
|
|
186
|
+
if (direct.length > 0) {
|
|
187
|
+
return direct;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return grounding.commandBlocks;
|
|
191
|
+
}
|
|
192
|
+
function buildConclusion(relativePath, title) {
|
|
193
|
+
if (!relativePath) {
|
|
194
|
+
return '- 未命中文档,当前无法给出可靠部署步骤。';
|
|
195
|
+
}
|
|
196
|
+
if (INSTALL_NEW_RE.test(relativePath)) {
|
|
197
|
+
return [
|
|
198
|
+
`- 当前主流程以 \`${relativePath}\`(${title ?? 'ONES 单机安装说明(新)'})为准。`,
|
|
199
|
+
'- 单机安装入口先执行 `quickstart.sh`,再进入 `ones-ai-k8s.sh` 执行 `bash script/ones/deploy-ones.sh`。',
|
|
200
|
+
].join('\n');
|
|
201
|
+
}
|
|
202
|
+
if (INSTALL_HA_RE.test(relativePath)) {
|
|
203
|
+
return [
|
|
204
|
+
`- 当前主流程以 \`${relativePath}\`(${title ?? 'ONES 集群安装说明'})为准。`,
|
|
205
|
+
'- 集群安装入口以 `DEPLOY_MODE=ha bash quickstart.sh --offline-file ...` 为准。',
|
|
206
|
+
].join('\n');
|
|
207
|
+
}
|
|
208
|
+
if (ENVCHECK_RE.test(relativePath)) {
|
|
209
|
+
return [
|
|
210
|
+
`- 环境检测以 \`${relativePath}\` 为准。`,
|
|
211
|
+
'- 先下载 `envcheck.tar`,解压后执行 `./envcheck`。',
|
|
212
|
+
].join('\n');
|
|
213
|
+
}
|
|
214
|
+
if (SERVER_CHECKLIST_RE.test(relativePath)) {
|
|
215
|
+
return [
|
|
216
|
+
`- 巡检以 \`${relativePath}\` 为准。`,
|
|
217
|
+
'- 可直接执行后端健康检查脚本,或下载 oinspect 做深入审计。',
|
|
218
|
+
].join('\n');
|
|
219
|
+
}
|
|
220
|
+
return `- 当前主流程以 \`${relativePath}\`${title ? `(${title})` : ''} 为准。`;
|
|
221
|
+
}
|
|
222
|
+
function buildPrerequisites(relativePath, commandBlocks) {
|
|
223
|
+
const lines = ['- 相关命令需 root 或具备 sudo 权限的用户执行。'];
|
|
224
|
+
const allCommands = commandBlocks.map((block) => block.command).join('\n');
|
|
225
|
+
if (allCommands.includes('quickstart.sh --version')) {
|
|
226
|
+
lines.push('- 在线下载离线包前,需要确认可访问 `packages.ones.cn`。');
|
|
227
|
+
}
|
|
228
|
+
if (allCommands.includes('--offline-file')) {
|
|
229
|
+
lines.push('- 离线安装前,需要先准备 `ones_offline_pkg_<version>_<arch>.tar.gz` 并记录实际路径。');
|
|
230
|
+
}
|
|
231
|
+
if (relativePath && ENVCHECK_RE.test(relativePath)) {
|
|
232
|
+
lines.push('- 数据盘需挂载到 `/data/`,索引盘需挂载到 `/data/ones/ones-local-storage/tidb`。');
|
|
233
|
+
}
|
|
234
|
+
if (relativePath && SERVER_CHECKLIST_RE.test(relativePath)) {
|
|
235
|
+
lines.push('- 巡检前需拿到 ONES 访问地址;可通过 `BASEURL=...` 传入健康检查脚本。');
|
|
236
|
+
}
|
|
237
|
+
return lines.join('\n');
|
|
238
|
+
}
|
|
239
|
+
function buildSteps(commandBlocks) {
|
|
240
|
+
if (commandBlocks.length === 0) {
|
|
241
|
+
return '1. 未命中文档命令,请先补充更具体的问题或文档范围。';
|
|
242
|
+
}
|
|
243
|
+
return commandBlocks
|
|
244
|
+
.map((block, index) => {
|
|
245
|
+
const label = block.section ?? block.document_title ?? '执行命令';
|
|
246
|
+
return `${index + 1}. ${label}\n\n\`\`\`${block.language || 'bash'}\n${block.command}\n\`\`\``;
|
|
247
|
+
})
|
|
248
|
+
.join('\n\n');
|
|
249
|
+
}
|
|
250
|
+
function buildVerification(relativePath) {
|
|
251
|
+
if (relativePath && (INSTALL_NEW_RE.test(relativePath) || INSTALL_HA_RE.test(relativePath))) {
|
|
252
|
+
return [
|
|
253
|
+
'- 观察安装器输出是否出现 `Run successfully`。',
|
|
254
|
+
'- 按文档提示访问安装器页面或登录页,确认 ONES 可打开。',
|
|
255
|
+
].join('\n');
|
|
256
|
+
}
|
|
257
|
+
if (relativePath && ENVCHECK_RE.test(relativePath)) {
|
|
258
|
+
return [
|
|
259
|
+
'- 检查输出中是否出现 `some checks failed`。',
|
|
260
|
+
'- 若有失败项,按文档跳转修复指南继续处理。',
|
|
261
|
+
].join('\n');
|
|
262
|
+
}
|
|
263
|
+
if (relativePath && SERVER_CHECKLIST_RE.test(relativePath)) {
|
|
264
|
+
return [
|
|
265
|
+
'- 核心链路(project-api + mysql + redis + rabbitmq)应正常。',
|
|
266
|
+
'- 已启用的扩展链路(wiki/search/audit/performance/plugin)对应组件应为 Running。',
|
|
267
|
+
].join('\n');
|
|
268
|
+
}
|
|
269
|
+
return '- 按文档中的检查项确认服务状态与访问入口是否正常。';
|
|
270
|
+
}
|
|
271
|
+
function buildRisks(relativePath) {
|
|
272
|
+
if (relativePath && (INSTALL_NEW_RE.test(relativePath) || INSTALL_HA_RE.test(relativePath))) {
|
|
273
|
+
return [
|
|
274
|
+
'- 离线场景需提前准备安装包;路径填写错误会直接导致安装入口失败。',
|
|
275
|
+
'- 如需调整 `ONES_DATA_DIR`,必须在执行安装命令前导出环境变量。',
|
|
276
|
+
].join('\n');
|
|
277
|
+
}
|
|
278
|
+
if (relativePath && ENVCHECK_RE.test(relativePath)) {
|
|
279
|
+
return '- 环境检测失败时不要跳过硬件问题,优先按修复指南处理后再重新执行检测。';
|
|
280
|
+
}
|
|
281
|
+
if (relativePath && SERVER_CHECKLIST_RE.test(relativePath)) {
|
|
282
|
+
return '- 巡检脚本仅用于定位问题,不替代正式变更或修复流程。';
|
|
283
|
+
}
|
|
284
|
+
return '- 若文档与现场环境不一致,先停在文档边界内,不要自行扩展命令。';
|
|
285
|
+
}
|
|
286
|
+
function buildReferenceLines(grounding, primaryRelativePath) {
|
|
287
|
+
const lines = [];
|
|
288
|
+
const seen = new Set();
|
|
289
|
+
const add = (citation) => {
|
|
290
|
+
if (!citation || seen.has(citation)) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
seen.add(citation);
|
|
294
|
+
lines.push(`- ${citation}`);
|
|
295
|
+
};
|
|
296
|
+
if (primaryRelativePath) {
|
|
297
|
+
for (const result of grounding.searchResults) {
|
|
298
|
+
if (result.relative_path === primaryRelativePath) {
|
|
299
|
+
add(result.citation);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
for (const block of grounding.commandBlocks) {
|
|
303
|
+
if (block.relative_path === primaryRelativePath) {
|
|
304
|
+
add(block.citation);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
for (const result of grounding.searchResults.slice(0, 3)) {
|
|
309
|
+
add(result.citation);
|
|
310
|
+
}
|
|
311
|
+
if (lines.length === 0) {
|
|
312
|
+
lines.push('- 未命中文档');
|
|
313
|
+
}
|
|
314
|
+
return lines.join('\n');
|
|
315
|
+
}
|
|
316
|
+
function collectUngroundedCommandLines(markdown, allowedCommandLines) {
|
|
317
|
+
const allowed = new Set(allowedCommandLines.map((line) => normalizeCommandLine(line)).filter(Boolean));
|
|
318
|
+
const invalid = new Set();
|
|
319
|
+
for (const line of extractShellLikeLinesFromMarkdown(markdown)) {
|
|
320
|
+
const normalized = normalizeCommandLine(line);
|
|
321
|
+
if (!normalized) {
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
if (!allowed.has(normalized)) {
|
|
325
|
+
invalid.add(line.trim());
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return Array.from(invalid);
|
|
329
|
+
}
|
|
330
|
+
function extractShellLikeLinesFromMarkdown(markdown) {
|
|
331
|
+
const codeBlocks = Array.from(markdown.matchAll(/```[^\n]*\n([\s\S]*?)```/g), (match) => match[1]);
|
|
332
|
+
return codeBlocks.flatMap((block) => extractShellLikeLinesFromCode(block));
|
|
333
|
+
}
|
|
334
|
+
function extractShellLikeLinesFromCode(code) {
|
|
335
|
+
return code
|
|
336
|
+
.split(/\r?\n/)
|
|
337
|
+
.map((line) => line.trim())
|
|
338
|
+
.filter((line) => line.length > 0)
|
|
339
|
+
.filter((line) => !line.startsWith('#'))
|
|
340
|
+
.filter((line) => !/^(或者|说明|示例)[::]?$/.test(line));
|
|
341
|
+
}
|
|
342
|
+
function normalizeCommandLine(line) {
|
|
343
|
+
return line.replace(/\s+/g, ' ').trim();
|
|
344
|
+
}
|
|
345
|
+
function hasReferenceSectionNotAtEnd(markdown) {
|
|
346
|
+
const match = markdown.match(/(^|\n)##\s+参考来源\s*\n/);
|
|
347
|
+
if (!match || match.index === undefined) {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
const tail = markdown.slice(match.index + match[0].length);
|
|
351
|
+
return /(^|\n)##\s+/.test(tail);
|
|
352
|
+
}
|
|
353
|
+
function hasHeading(markdown, heading) {
|
|
354
|
+
const escaped = escapeRegExp(heading);
|
|
355
|
+
const patterns = [
|
|
356
|
+
new RegExp(`(^|\\n)#{1,6}\\s*${escaped}(?:([^\n]+))?\\s*$`, 'm'),
|
|
357
|
+
new RegExp(`(^|\\n)(?:\\d+\\.\\s*)?\\*\\*${escaped}(?:([^\n]+))?\\*\\*\\s*$`, 'm'),
|
|
358
|
+
];
|
|
359
|
+
return patterns.some((pattern) => pattern.test(markdown));
|
|
360
|
+
}
|
|
361
|
+
function normalizeHeading(heading) {
|
|
362
|
+
return heading.replace(/([^)]+)/g, '').trim();
|
|
363
|
+
}
|
|
364
|
+
function normalizeSectionText(input) {
|
|
365
|
+
if (!input) {
|
|
366
|
+
return '';
|
|
367
|
+
}
|
|
368
|
+
return input
|
|
369
|
+
.split(/\r?\n/)
|
|
370
|
+
.map((line) => line.trimEnd())
|
|
371
|
+
.join('\n')
|
|
372
|
+
.trim();
|
|
373
|
+
}
|
|
374
|
+
function stripCodeBlocks(input) {
|
|
375
|
+
return input.replace(/```[\s\S]*?```/g, '').trim();
|
|
376
|
+
}
|
|
377
|
+
function escapeRegExp(input) {
|
|
378
|
+
return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=ones-answer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ones-answer.js","sourceRoot":"","sources":["../../src/agent/ones-answer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type OnesRouteKind = 'general' | 'ones_docs_ops' | 'ones_issue_query';
|
|
2
|
+
export type OnesDocsSubtype = 'reference' | 'actionable' | null;
|
|
3
|
+
export interface OnesRouteDecision {
|
|
4
|
+
kind: OnesRouteKind;
|
|
5
|
+
reason: string;
|
|
6
|
+
issueKeys: string[];
|
|
7
|
+
subtype: OnesDocsSubtype;
|
|
8
|
+
}
|
|
9
|
+
export declare function detectOnesRoute(input: string): OnesRouteDecision;
|
|
10
|
+
export declare function buildOnesRoutePrompt(route: OnesRouteDecision): string;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
const DOC_KEYWORDS = [
|
|
2
|
+
'安装',
|
|
3
|
+
'部署',
|
|
4
|
+
'升级',
|
|
5
|
+
'迁移',
|
|
6
|
+
'备份',
|
|
7
|
+
'恢复',
|
|
8
|
+
'授权',
|
|
9
|
+
'证书',
|
|
10
|
+
'配置',
|
|
11
|
+
'排障',
|
|
12
|
+
'环境要求',
|
|
13
|
+
'envcheck',
|
|
14
|
+
'环境检测',
|
|
15
|
+
'巡检',
|
|
16
|
+
'健康检查',
|
|
17
|
+
'检查',
|
|
18
|
+
'k3s',
|
|
19
|
+
'私有部署',
|
|
20
|
+
];
|
|
21
|
+
const ACTIONABLE_KEYWORDS = [
|
|
22
|
+
'安装',
|
|
23
|
+
'升级',
|
|
24
|
+
'迁移',
|
|
25
|
+
'备份',
|
|
26
|
+
'恢复',
|
|
27
|
+
'授权',
|
|
28
|
+
'证书',
|
|
29
|
+
'配置',
|
|
30
|
+
'排障',
|
|
31
|
+
'环境要求',
|
|
32
|
+
'envcheck',
|
|
33
|
+
'环境检测',
|
|
34
|
+
'巡检',
|
|
35
|
+
'健康检查',
|
|
36
|
+
'检查',
|
|
37
|
+
];
|
|
38
|
+
const REFERENCE_KEYWORDS = [
|
|
39
|
+
'支持什么',
|
|
40
|
+
'支持哪些',
|
|
41
|
+
'区别是什么',
|
|
42
|
+
'原理',
|
|
43
|
+
'架构',
|
|
44
|
+
'介绍',
|
|
45
|
+
'文档概览',
|
|
46
|
+
'概览',
|
|
47
|
+
'有哪些方式',
|
|
48
|
+
'有哪几种',
|
|
49
|
+
'部署方式',
|
|
50
|
+
'对比',
|
|
51
|
+
];
|
|
52
|
+
const ISSUE_PATTERNS = [
|
|
53
|
+
/\b(?:ONES2|FBGL)-\d+\b/gi,
|
|
54
|
+
];
|
|
55
|
+
const ISSUE_QUERY_HINTS = [
|
|
56
|
+
'我负责的未完成工单',
|
|
57
|
+
'我负责的工单',
|
|
58
|
+
'任务状态',
|
|
59
|
+
'项目缺陷',
|
|
60
|
+
'负责人',
|
|
61
|
+
'工单状态',
|
|
62
|
+
'工单详情',
|
|
63
|
+
'bug 状态',
|
|
64
|
+
'缺陷状态',
|
|
65
|
+
];
|
|
66
|
+
const ONES_HINT_RE = /\bones\b|ones\.pro|packages\.ones\.cn|私有部署|onesclaw/i;
|
|
67
|
+
const HOW_TO_RE = /(怎么|如何|怎样|步骤|命令|检查|操作|执行)/i;
|
|
68
|
+
const ACTIONABLE_DOC_RE = /(安装|部署|升级|迁移|备份|恢复|授权|证书|配置|排障|环境要求|envcheck|环境检测|巡检|健康检查)/i;
|
|
69
|
+
const REFERENCE_RE = /(支持什么|支持哪些|区别是什么|原理|架构|介绍|文档概览|概览|有哪些方式|有哪几种|部署方式|对比)/i;
|
|
70
|
+
export function detectOnesRoute(input) {
|
|
71
|
+
const normalized = input.trim();
|
|
72
|
+
const issueKeys = Array.from(normalized.matchAll(/\b(?:ONES2|FBGL)-\d+\b/gi), (match) => match[0]);
|
|
73
|
+
if (issueKeys.length > 0 || ISSUE_QUERY_HINTS.some((hint) => normalized.includes(hint))) {
|
|
74
|
+
return {
|
|
75
|
+
kind: 'ones_issue_query',
|
|
76
|
+
reason: issueKeys.length > 0 ? 'matched_issue_key' : 'matched_issue_query_hint',
|
|
77
|
+
issueKeys,
|
|
78
|
+
subtype: null,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const hasDocKeyword = DOC_KEYWORDS.some((keyword) => normalized.toLowerCase().includes(keyword.toLowerCase()));
|
|
82
|
+
const hasOnesHint = ONES_HINT_RE.test(normalized);
|
|
83
|
+
const actionableByQuestionForm = HOW_TO_RE.test(normalized) && ACTIONABLE_DOC_RE.test(normalized);
|
|
84
|
+
const actionableByKeyword = ACTIONABLE_KEYWORDS.some((keyword) => normalized.toLowerCase().includes(keyword.toLowerCase()));
|
|
85
|
+
const hasReferenceHint = REFERENCE_RE.test(normalized) ||
|
|
86
|
+
REFERENCE_KEYWORDS.some((keyword) => normalized.toLowerCase().includes(keyword.toLowerCase()));
|
|
87
|
+
if ((hasDocKeyword || hasReferenceHint) && hasOnesHint) {
|
|
88
|
+
let subtype = 'actionable';
|
|
89
|
+
let reason = 'matched_ones_ops_keywords';
|
|
90
|
+
if (actionableByQuestionForm || (actionableByKeyword && !hasReferenceHint)) {
|
|
91
|
+
subtype = 'actionable';
|
|
92
|
+
reason = actionableByQuestionForm ? 'matched_actionable_question' : 'matched_actionable_keyword';
|
|
93
|
+
}
|
|
94
|
+
else if (hasReferenceHint) {
|
|
95
|
+
subtype = 'reference';
|
|
96
|
+
reason = 'matched_reference_keyword';
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
kind: 'ones_docs_ops',
|
|
100
|
+
reason,
|
|
101
|
+
issueKeys: [],
|
|
102
|
+
subtype,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
kind: 'general',
|
|
107
|
+
reason: 'no_special_route',
|
|
108
|
+
issueKeys: [],
|
|
109
|
+
subtype: null,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export function buildOnesRoutePrompt(route) {
|
|
113
|
+
if (route.kind === 'ones_docs_ops' && route.subtype === 'actionable') {
|
|
114
|
+
return `## 本轮 ONES 文档问答模式
|
|
115
|
+
|
|
116
|
+
本轮问题属于 ONES 安装/部署/升级/运维文档问答。必须遵循以下规则:
|
|
117
|
+
- 优先使用本地知识库,不要先查 Context7。
|
|
118
|
+
- 默认工具顺序:先 kb_search,基于主命中文档调用 kb_extract_commands,必要时再调用 kb_get_document。
|
|
119
|
+
- 如 kb_search 已命中本地文档,不要默认继续查 Context7;只有第三方组件或明确外部资料需求时才使用 Context7。
|
|
120
|
+
- 安装/部署/升级类问题,优先选择 install-upgrade/ 与 environmental-requirements/ 目录下命令更完整的文档。
|
|
121
|
+
- 若文档中已有命令,优先直接输出文档中的 Linux 命令,不要改写成长段解释。
|
|
122
|
+
- 不允许输出文档中不存在的脚本名或工具名,例如 ones-cli、install.sh、envcheck.sh。
|
|
123
|
+
- 若文档只给了流程说明而没有完整命令,明确写“未命中文档命令”,不要补一个假命令。
|
|
124
|
+
|
|
125
|
+
最终回答必须固定为以下 7 段 Markdown 标题,且只在文末给参考来源:
|
|
126
|
+
1. 问题重述
|
|
127
|
+
2. 结论
|
|
128
|
+
3. 前提与适用范围
|
|
129
|
+
4. 操作步骤(编号)
|
|
130
|
+
5. 验证命令/检查点
|
|
131
|
+
6. 风险与回滚
|
|
132
|
+
7. 参考来源
|
|
133
|
+
|
|
134
|
+
输出风格要求:
|
|
135
|
+
- 命令优先,说明最小化。
|
|
136
|
+
- 首屏优先给步骤和代码块,不要先写长背景。
|
|
137
|
+
- 正文不要逐段插 Source;统一在“参考来源”段列出文档路径或章节。`;
|
|
138
|
+
}
|
|
139
|
+
if (route.kind === 'ones_docs_ops' && route.subtype === 'reference') {
|
|
140
|
+
return `## 本轮 ONES 文档概览问答模式
|
|
141
|
+
|
|
142
|
+
本轮问题属于 ONES 文档概览、解释或比较类问题。必须遵循以下规则:
|
|
143
|
+
- 先查 Context7 固定文档库:运维类用 "/websites/opsdoc_ones_cn",开发类用 "/websites/developer_ones_cn"。
|
|
144
|
+
- 如果 Context7 结果不足,再补本地知识库或 ONES Wiki。
|
|
145
|
+
- 回答尽量短,优先“结论 + 要点 + 参考来源”,不要求代码块。
|
|
146
|
+
- 不要切到重型 docs-only 命令回答;只有用户继续追问步骤/命令时才切换到命令型模式。`;
|
|
147
|
+
}
|
|
148
|
+
if (route.kind === 'ones_issue_query') {
|
|
149
|
+
return `## 本轮 ONES 实时工单查询模式
|
|
150
|
+
|
|
151
|
+
本轮问题属于 ONES 实时工单/任务状态查询。必须遵循以下规则:
|
|
152
|
+
- 优先使用 ONES MCP(ones__ 前缀工具),不要优先查 kb_search。
|
|
153
|
+
- 返回结果必须短、结构化、可复制,不要混入长篇解释。
|
|
154
|
+
- 单工单至少返回:工单号、标题、状态、负责人、优先级、最近更新时间、链接。
|
|
155
|
+
- 列表查询至少返回:工单号、标题、状态、优先级、截止时间、最近更新时间、链接。
|
|
156
|
+
- 查询失败时直接说明失败原因,不要编造状态。`;
|
|
157
|
+
}
|
|
158
|
+
return '';
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=ones-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ones-routing.js","sourceRoot":"","sources":["../../src/agent/ones-routing.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/logger.js
CHANGED
|
@@ -33,7 +33,8 @@ class Logger {
|
|
|
33
33
|
const entry = this.createEntry('debug', category, message, data);
|
|
34
34
|
this.writeToFile(entry);
|
|
35
35
|
if (this.debugMode) {
|
|
36
|
-
|
|
36
|
+
const suffix = formatDebugData(data);
|
|
37
|
+
process.stderr.write(chalk.gray(`[debug:${category}] ${message}${suffix}`) + '\n');
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
/**
|
|
@@ -76,4 +77,19 @@ class Logger {
|
|
|
76
77
|
}
|
|
77
78
|
/** 全局 Logger 单例 */
|
|
78
79
|
export const logger = new Logger();
|
|
80
|
+
function formatDebugData(data) {
|
|
81
|
+
if (!data || typeof data !== 'object') {
|
|
82
|
+
return '';
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const serialized = JSON.stringify(data);
|
|
86
|
+
if (!serialized) {
|
|
87
|
+
return '';
|
|
88
|
+
}
|
|
89
|
+
return serialized.length > 400 ? ` ${serialized.slice(0, 400)}…` : ` ${serialized}`;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return '';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
79
95
|
//# sourceMappingURL=logger.js.map
|
package/dist/cli/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B;;;;;;GAMG;AACH,MAAM,MAAM;IACR,SAAS,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;IACL;QACI,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,YAAY,CAAC,IAAe;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IACD;;OAEG;IACH,YAAY,CAAC,OAAgB;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACH,KAAK,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAc;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,KAAK,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"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"}
|