witty-diagnosis-agent 0.1.0-beta
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/LICENSE +21 -0
- package/README.md +148 -0
- package/dist/auto-update-checker-6YCUJMDH.js +21 -0
- package/dist/chunk-7T4NFQTD.js +35 -0
- package/dist/chunk-JIUFBEQZ.js +1957 -0
- package/dist/chunk-ML545FPN.js +5939 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +3763 -0
- package/dist/index.d.ts +3425 -0
- package/dist/index.js +42244 -0
- package/dist/logger-V4SUMWDN.js +8 -0
- package/dist/oh-my-opencode.schema.json +4724 -0
- package/package.json +74 -0
- package/postinstall.mjs +20 -0
- package/skills/README.md +466 -0
- package/skills/config-manager/SKILL.md +718 -0
- package/skills/config-manager/examples/update-service-config.md +377 -0
- package/skills/config-manager/examples/validate-configuration.md +449 -0
- package/skills/config-manager/tests/test-config-manager.md +674 -0
- package/skills/controlled-repair/SKILL.md +798 -0
- package/skills/controlled-repair/examples/restart-service-safely.md +502 -0
- package/skills/controlled-repair/examples/rollback-configuration.md +727 -0
- package/skills/controlled-repair/tests/test-controlled-repair.md +947 -0
- package/skills/data-collector/SKILL.md +677 -0
- package/skills/data-collector/examples/collect-metrics.md +265 -0
- package/skills/data-collector/examples/collect-system-logs.md +161 -0
- package/skills/data-collector/tests/test-data-collection.md +400 -0
- package/skills/disk-diagnosis-by-log/SKILL.md +266 -0
- package/skills/disk-diagnosis-by-log/references/Inspur_ibmc.md +735 -0
- package/skills/disk-diagnosis-by-log/references/h3c_ibmc.md +1012 -0
- package/skills/disk-diagnosis-by-log/references/huawei_ibmc.md +595 -0
- package/skills/disk-diagnosis-by-log/references/infocollect_guide.md +131 -0
- package/skills/disk-diagnosis-by-log/references/messages.md +341 -0
- package/skills/disk-diagnosis-by-log/scripts/diagnose_ibmc.py +316 -0
- package/skills/disk-diagnosis-by-log/scripts/diagnose_infocollect.py +479 -0
- package/skills/disk-diagnosis-by-log/scripts/diagnose_messages.py +293 -0
- package/skills/disk-diagnosis-by-log/scripts/diagnose_summary.py +165 -0
- package/skills/fault-background-info/SKILL.md +38 -0
- package/skills/fault-background-info/references/disk_fault.md +46 -0
- package/skills/fault-background-info/references/openrca.md +40 -0
- package/skills/fault-background-info/references/super_node.md +75 -0
- package/skills/fault-background-info/scripts/log_fetcher.py +409 -0
- package/skills/fault-delimitation/SKILL.md +249 -0
- package/skills/fault-delimitation/scripts/base.py +41 -0
- package/skills/fault-delimitation/scripts/data_loader.py +866 -0
- package/skills/fault-delimitation/scripts/log_tool.py +409 -0
- package/skills/fault-delimitation/scripts/metric_adapter.py +181 -0
- package/skills/fault-delimitation/scripts/metric_tool.py +1401 -0
- package/skills/fault-delimitation/scripts/schema.py +12 -0
- package/skills/fault-delimitation/scripts/time_utils.py +32 -0
- package/skills/fault-delimitation/scripts/trace_tool.py +700 -0
- package/skills/fault-intelligent-positioning/SKILL.md +56 -0
- package/skills/fault-intelligent-positioning/references/output_report_template.md +51 -0
- package/skills/fault-localization/SKILL.md +570 -0
- package/skills/fault-localization/examples/identify-impact-scope.md +529 -0
- package/skills/fault-localization/examples/locate-service-failure.md +898 -0
- package/skills/intelligent-inspection/SKILL.md +768 -0
- package/skills/intelligent-inspection/examples/daily-system-check.md +585 -0
- package/skills/intelligent-inspection/examples/performance-inspection.md +884 -0
- package/skills/intelligent-inspection/tests/test-intelligent-inspection.md +1128 -0
- package/skills/knowledge-base/SKILL.md +780 -0
- package/skills/knowledge-base/examples/add-failure-pattern.md +489 -0
- package/skills/knowledge-base/examples/search-solutions.md +605 -0
- package/skills/knowledge-base/tests/test-knowledge-base.md +813 -0
- package/skills/linux-oom-analyzer/SKILL.md +385 -0
- package/skills/linux-oom-analyzer/references/cgroup-oom-analysis.md +119 -0
- package/skills/linux-oom-analyzer/references/kernel-oom-analysis.md +267 -0
- package/skills/linux-oom-analyzer/references/kernel-source-analysis.md +260 -0
- package/skills/linux-oom-analyzer/references/process-oom-analysis.md +198 -0
- package/skills/linux-oom-analyzer/references/system-oom-analysis.md +170 -0
- package/skills/linux-oom-analyzer/scripts/cgroup_oom.sh +264 -0
- package/skills/linux-oom-analyzer/scripts/collect_basic_info.sh +556 -0
- package/skills/linux-oom-analyzer/scripts/kernel_oom.sh +298 -0
- package/skills/linux-oom-analyzer/scripts/process_oom.sh +241 -0
- package/skills/linux-oom-analyzer/scripts/system_oom.sh +252 -0
- package/skills/log-analyzer/SKILL.md +912 -0
- package/skills/log-analyzer/examples/analyze-error-logs.md +580 -0
- package/skills/log-analyzer/examples/detect-anomaly-patterns.md +850 -0
- package/skills/log-analyzer/tests/test-log-analyzer.md +904 -0
- package/skills/memory-anomaly-diagnosis/SKILL.md +136 -0
- package/skills/memory-anomaly-diagnosis/scripts/start_gdb_trap.sh +65 -0
- package/skills/memory-anomaly-diagnosis/scripts/start_monitor.sh +41 -0
- package/skills/memory-anomaly-diagnosis/scripts/strace_analyze.sh +52 -0
- package/skills/metric-analyzer/SKILL.md +788 -0
- package/skills/metric-analyzer/examples/analyze-metric-trends.md +530 -0
- package/skills/metric-analyzer/examples/monitor-cpu-usage.md +357 -0
- package/skills/metric-analyzer/tests/test-metric-analyzer.md +833 -0
- package/skills/network-diagnosis/SKILL.md +809 -0
- package/skills/network-diagnosis/references/firewall-guide.md +123 -0
- package/skills/network-diagnosis/scripts/README.md +14 -0
- package/skills/network-diagnosis/scripts/collect_snapshot.sh +379 -0
- package/skills/network-diagnosis/scripts/ip_conflict_check.sh +159 -0
- package/skills/oom_params_and_troubleshooting/SKILL.md +208 -0
- package/skills/oom_params_and_troubleshooting/references/13_oom_/347/233/270/345/205/263/345/217/202/346/225/260/351/205/215/347/275/256/344/270/216/345/216/237/345/233/240/346/216/222/346/237/245.md +104 -0
- package/skills/oom_params_and_troubleshooting/references/index.md +11 -0
- package/skills/oom_params_and_troubleshooting/scripts/README.md +48 -0
- package/skills/oom_params_and_troubleshooting/scripts/collect_oom_diagnostics.sh +90 -0
- package/skills/root-cause-analysis/SKILL.md +816 -0
- package/skills/root-cause-analysis/examples/analyze-performance-issue.md +586 -0
- package/skills/root-cause-analysis/examples/find-root-cause.md +767 -0
- package/skills/root-cause-analysis/tests/test-root-cause-analysis.md +1079 -0
- package/skills/root-cause-localization/SKILL.md +231 -0
- package/skills/root-cause-localization/scripts/base.py +41 -0
- package/skills/root-cause-localization/scripts/data_loader.py +866 -0
- package/skills/root-cause-localization/scripts/log_tool.py +409 -0
- package/skills/root-cause-localization/scripts/schema.py +13 -0
- package/skills/root-cause-localization/scripts/time_utils.py +32 -0
- package/skills/root-cause-localization/scripts/trace_tool.py +700 -0
- package/skills/trace-analyzer/SKILL.md +816 -0
- package/skills/trace-analyzer/examples/identify-bottlenecks.md +537 -0
- package/skills/trace-analyzer/examples/trace-service-calls.md +380 -0
- package/skills/trace-analyzer/tests/test-trace-analyzer.md +687 -0
- package/skills/using-witty-diagnosis-agent/SKILL.md +105 -0
- package/skills/vmcore-analysis/SKILL.md +1098 -0
- package/skills/vmcore-analysis/references/USAGE_EXAMPLES.md +131 -0
- package/skills/vmcore-analysis/references/analysis_patterns.md +506 -0
- package/skills/vmcore-analysis/references/crash_commands.md +385 -0
- package/skills/vmcore-analysis/references/root_cause_analysis.md +739 -0
- package/skills/vmcore-analysis/references/source_code_structure.md +317 -0
- package/skills/vmcore-analysis/references/struct_analysis.md +140 -0
- package/skills/vmcore-analysis/references/troubleshooting.md +531 -0
- package/skills/vmcore-analysis/scripts/analyze_struct.py +156 -0
- package/skills/vmcore-analysis/scripts/check_environment.sh +104 -0
- package/skills/vmcore-analysis/scripts/crash_config.sh +156 -0
- package/skills/vmcore-analysis/scripts/crash_wrapper.sh +73 -0
- package/skills/vmcore-analysis/scripts/evidence_chain.sh +309 -0
- package/skills/vmcore-analysis/scripts/quick_report.sh +97 -0
- package/skills/vmcore-analysis/scripts/rca_wizard.sh +288 -0
- package/skills/void-gateway-sop/SKILL.md +86 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Huawei
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# 项目介绍
|
|
2
|
+
|
|
3
|
+
Witty智能诊断Agent基于「假设-推断」分析范式与多Agent协同架构,实现多路径并行分析,全面覆盖**应用→系统→内核→硬件**全栈故障场景,显著提升故障诊断的效率、全面性与精准度。依托拓扑动态感知、多模态遥测融合与多维关联分析技术,结合内置故障模式库与运维知识库,可在分钟级完成根因定位(无需人工介入),并支持代码行级精准定界。同时,Agent能自动生成结构化根因报告,清晰呈现溯源路径、关键证据与优化建议,高效支撑各类复杂故障的精准诊断。
|
|
4
|
+
|
|
5
|
+
# 架构与功能介绍
|
|
6
|
+
|
|
7
|
+
## 软件架构
|
|
8
|
+
|
|
9
|
+
Witty智能诊断Agent采用分层解耦架构,分为Agent层、Skill层、工具层、知识层四大核心模块,各模块通过标准化接口通信,兼具灵活性与可扩展性,确保系统高效迭代与维护。
|
|
10
|
+
|
|
11
|
+
### 1. Agent层:智能协同的推理引擎与决策中枢
|
|
12
|
+
|
|
13
|
+
采用多智能体协同机制,实现故障根因的全流程自动化诊断:诊断规划Agent(**伏羲 (Fuxi)**)明确故障信息并生成根因假设;编排调度Agent(**大禹 (Dayu)**)匹配诊断Skill,并行分发诊断任务;各验证分析Agent(**夸父 (Kuafu)**)执行具体推理分析;根因融合Agent(**白泽 (Baize)**)汇总多路分析结果,输出包含根因、证据链与修复建议的结构化报告;故障修复Agent依据根因与运维知识,安全可控地执行修复指令,快速恢复业务。
|
|
14
|
+
|
|
15
|
+
### 2. Skill层:专家经验的标准化沉淀与场景化赋能
|
|
16
|
+
|
|
17
|
+
将专家诊断思路、排查流程与最佳实践,封装为可复用的标准化技能,覆盖崩溃、死锁、内存泄漏等高频故障场景。为Agent提供标准化执行策略,实现专家经验的规模化复用,提升诊断结果的一致性与准确性。
|
|
18
|
+
|
|
19
|
+
### 3. 工具层:高效可靠的多源数据处理底座
|
|
20
|
+
|
|
21
|
+
深度集成openEuler原生观测与调试工具,以低底噪方式采集指标、日志、内核状态等多维度数据。通过清洗、去重、结构化处理,为上层诊断流程提供高质量数据输入,保障诊断过程的稳定性与高效性。
|
|
22
|
+
|
|
23
|
+
### 4. 知识层:持续进化与自我完善的知识底座
|
|
24
|
+
|
|
25
|
+
存储openEuler专属故障模式、诊断案例与因果规则,是精准诊断的核心基础。系统可自动沉淀诊断数据与结果,形成可复用案例并反哺Skill层优化,实现诊断能力的自进化迭代,让诊断精度随使用场景持续提升。
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
## 关键能力
|
|
30
|
+
|
|
31
|
+
- **智能日志解析**:基于模板挖掘、向量降维等算法,将海量非结构化日志转化为结构化特征,实现关键日志秒级精准识别,为根因分析提供高质量数据支撑。
|
|
32
|
+
|
|
33
|
+
- **VMCore自动分析**:针对系统宕机等严重故障,自动完成VMCore数据的采集、融合分析与根因定位,将运维人员从复杂的手动调试工作中解放出来,提升故障处置效率。
|
|
34
|
+
|
|
35
|
+
- **超节点拓扑动态感知**:基于eBPF技术实现灵衢超节点拓扑动态感知,将多模遥测数据与拓扑节点协同关联,辅助超节点故障的高效定界与定位。
|
|
36
|
+
|
|
37
|
+
# 快速开始
|
|
38
|
+
|
|
39
|
+
## 环境要求
|
|
40
|
+
|
|
41
|
+
- 运行环境:Bun(推荐)或 Node.js
|
|
42
|
+
|
|
43
|
+
- 依赖工具:已安装[OpenCode](https://opencode.ai/)
|
|
44
|
+
|
|
45
|
+
## 安装
|
|
46
|
+
|
|
47
|
+
```shell
|
|
48
|
+
git clone https://gitcode.com/sparklezfl/witty-diagnosis-agent.git
|
|
49
|
+
cd witty-diagnosis-agent
|
|
50
|
+
bun install
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 构建
|
|
54
|
+
|
|
55
|
+
```shell
|
|
56
|
+
bun run build
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
构建完成后,将在项目根目录生成 `dist/index.js` 等相关文件。
|
|
60
|
+
|
|
61
|
+
## 注册插件
|
|
62
|
+
|
|
63
|
+
配置文件支持两种路径(二选一),优先选择用户级配置:
|
|
64
|
+
|
|
65
|
+
- 用户级(推荐):`~/.config/opencode/opencode.json` 或 `opencode.jsonc`
|
|
66
|
+
|
|
67
|
+
- 项目级:项目根目录下的 `.opencode/opencode.json` 或 `.opencode/opencode.jsonc`
|
|
68
|
+
|
|
69
|
+
在配置文件中新增或修改 `plugin` 数组,指向本仓库的构建入口(请替换为实际项目路径):
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"$schema": "https://opencode.ai/config.json",
|
|
74
|
+
"plugin": [
|
|
75
|
+
"file:///{witty-diagnosis-agent项目绝对路径}/dist/index.js"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
示例(假设项目绝对路径为 `/opt/witty-diagnosis-agent`):
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"$schema": "https://opencode.ai/config.json",
|
|
85
|
+
"plugin": [
|
|
86
|
+
"file:///opt/witty-diagnosis-agent/dist/index.js"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## 配置模型
|
|
92
|
+
|
|
93
|
+
修改项目根目录下的 `.opencode/oh-my-opencode.jsonc` 文件,配置如下:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"agents": {
|
|
98
|
+
"fuxi": { "model": "deepseek/deepseek-chat" },
|
|
99
|
+
"dayu": { "model": "deepseek/deepseek-chat" },
|
|
100
|
+
"kuafu": { "model": "deepseek/deepseek-chat" },
|
|
101
|
+
"baize": { "model": "deepseek/deepseek-chat" }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
# 如何使用
|
|
107
|
+
|
|
108
|
+
1. 启动 **OpenCode **。
|
|
109
|
+
|
|
110
|
+
2. 在终端执行命令:
|
|
111
|
+
|
|
112
|
+
```shell
|
|
113
|
+
auto-diag 故障问题描述
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**说明**:当前支持离线分析,需在故障描述中指定**遥测数据 / 日志存储路径**。
|
|
117
|
+
|
|
118
|
+
示例:
|
|
119
|
+
|
|
120
|
+
```shell
|
|
121
|
+
auto-diag "请诊断2026-03-05 14:31前最近一次硬盘故障,日志路径:/tmp/diskfault/logs"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+

|
|
125
|
+
|
|
126
|
+
3. 系统将自动执行**智能诊断**流程。
|
|
127
|
+
|
|
128
|
+
4. 诊断完成后,根据终端输出的报告路径,查看完整的诊断分析报告。
|
|
129
|
+
|
|
130
|
+

|
|
131
|
+
|
|
132
|
+
# 如何贡献
|
|
133
|
+
|
|
134
|
+
## 社区贡献
|
|
135
|
+
|
|
136
|
+
我们诚挚欢迎新贡献者加入项目,也会为新加入者提供全面的指导与帮助。请注意:贡献代码前,请先签署 [CLA](https://clasign.osinfra.cn/sign/6983225bdcbb19710248ccf0),再参考 [代码贡献指引](https://www.openeuler.org/zh/community/contribution/detail#_4-2-代码类贡献) 提交代码。
|
|
137
|
+
|
|
138
|
+
## 问题讨论
|
|
139
|
+
|
|
140
|
+
若您有任何疑问、建议或讨论需求,可通过以下方式联系我们:
|
|
141
|
+
|
|
142
|
+
- 提交 [issue](https://atomgit.com/openeuler/witty-diagnosis-agent/issues)
|
|
143
|
+
|
|
144
|
+
- 发送邮件至 [intelligence@openeuler.org](mailto:intelligence@openeuler.org)
|
|
145
|
+
|
|
146
|
+
# License
|
|
147
|
+
|
|
148
|
+
本项目采用 **MIT** 开源协议,详情请参阅项目根目录下的 LICENSE 文件。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
checkForUpdate,
|
|
3
|
+
createAutoUpdateCheckerHook,
|
|
4
|
+
extractChannel,
|
|
5
|
+
invalidateCache,
|
|
6
|
+
invalidatePackage,
|
|
7
|
+
isDistTag,
|
|
8
|
+
isPrereleaseOrDistTag,
|
|
9
|
+
isPrereleaseVersion
|
|
10
|
+
} from "./chunk-ML545FPN.js";
|
|
11
|
+
import "./chunk-7T4NFQTD.js";
|
|
12
|
+
export {
|
|
13
|
+
checkForUpdate,
|
|
14
|
+
createAutoUpdateCheckerHook,
|
|
15
|
+
extractChannel,
|
|
16
|
+
invalidateCache,
|
|
17
|
+
invalidatePackage,
|
|
18
|
+
isDistTag,
|
|
19
|
+
isPrereleaseOrDistTag,
|
|
20
|
+
isPrereleaseVersion
|
|
21
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
3
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
4
|
+
}) : x)(function(x) {
|
|
5
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
8
|
+
var __esm = (fn, res) => function __init() {
|
|
9
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// src/shared/logger.ts
|
|
13
|
+
import * as fs from "fs";
|
|
14
|
+
import * as os from "os";
|
|
15
|
+
import * as path from "path";
|
|
16
|
+
var logFile = path.join(os.tmpdir(), "oh-my-opencode.log");
|
|
17
|
+
function log(message, data) {
|
|
18
|
+
try {
|
|
19
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
20
|
+
const logEntry = `[${timestamp}] ${message} ${data ? JSON.stringify(data) : ""}
|
|
21
|
+
`;
|
|
22
|
+
fs.appendFileSync(logFile, logEntry);
|
|
23
|
+
} catch {
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function getLogFilePath() {
|
|
27
|
+
return logFile;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
__require,
|
|
32
|
+
__esm,
|
|
33
|
+
log,
|
|
34
|
+
getLogFilePath
|
|
35
|
+
};
|