diff --git a/.run/ASP.run.xml b/.run/ASP.run.xml
new file mode 100644
index 0000000..7822261
--- /dev/null
+++ b/.run/ASP.run.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DATA/Case_Threat_Hunting_Agent/Intent_Human.md b/DATA/Case_Threat_Hunting_Agent/Intent_Human.md
index a8e6aeb..213bc2b 100644
--- a/DATA/Case_Threat_Hunting_Agent/Intent_Human.md
+++ b/DATA/Case_Threat_Hunting_Agent/Intent_Human.md
@@ -1,6 +1,6 @@
以下是本次会话的数据:
-### 案件背景 (Case Context)
+### 案件原始信息 (Case Context)
{case}
diff --git a/DATA/Case_Threat_Hunting_Agent/Intent_System.md b/DATA/Case_Threat_Hunting_Agent/Intent_System.md
index 3d88a6c..5794db6 100644
--- a/DATA/Case_Threat_Hunting_Agent/Intent_System.md
+++ b/DATA/Case_Threat_Hunting_Agent/Intent_System.md
@@ -32,8 +32,7 @@ Objective)。
1. **威胁预判 (Prioritize)**:优先分析`严重`或`高`级别的警报,它们是调查的起点。
2. **确定支点 (Identify Pivot)**:从警报涉及的实体中,选择最可疑、信息最丰富的作为调查的“支点”。通常是具有不良信誉的外部IP、或发生异常行为的关键内部资产。
3. **构建假设 (Formulate Hypothesis)**:基于警报类型,提出一个可被验证的假设性目标,旨在确认威胁的真实性并评估其影响。
- * *示例*:对于“高危警报:检测到PowerShell混淆执行”,您的目标应该是:“确认在主机 `DEV-WEB-03`
- 上检测到PowerShell混淆执行警报后,是否存在成功的代码执行或持久化后门”。
+ * *示例*:对于“高危警报:检测到PowerShell混淆执行”,您的目标应该是:“确认在主机 `DEV-WEB-03`上检测到PowerShell混淆执行警报后,是否存在成功的代码执行或持久化后门”。
# 输出约束
diff --git a/DATA/Case_Threat_Hunting_Agent/Planner_Human.md b/DATA/Case_Threat_Hunting_Agent/Planner_Human.md
index d5002fb..8cad65d 100644
--- a/DATA/Case_Threat_Hunting_Agent/Planner_Human.md
+++ b/DATA/Case_Threat_Hunting_Agent/Planner_Human.md
@@ -2,7 +2,11 @@
请根据以下信息,生成下一步的调查计划。
-### 本轮猎杀的“作战目标”
+### 案件原始信息
+
+{case}
+
+### "作战目标"
{hunting_objective}
@@ -10,7 +14,7 @@
{iteration_count}
-### “调查发现”
+### 历史"调查发现"
以下是迄今为止收集到的所有调查发现、问题及结论:
@@ -20,11 +24,11 @@
**核心任务**:
-综合上述所有信息(“作战目标”、“当前迭代轮次”以及**特别是**“调查发现”),请判断:
+综合上述所有信息("案件原始信息"、"作战目标"、"当前迭代轮次"以及**特别是**"调查发现"),请判断:
-1. 是否需要进行进一步调查来完成“作战目标”?
+1. 是否需要进行进一步调查来实现"作战目标"?
2. 如果需要,下一步最合理、最有效且可并行执行的调查问题是什么?
-如果“作战目标”已达成,或者无法进行进一步调查,请返回一个空计划(`current_plan` 为空列表)。
+如果"作战目标"已达成,或者无法进行进一步调查,请返回一个空计划(`current_plan` 为空列表)。
**请严格遵循系统提示中定义的JSON格式进行输出。**
diff --git a/DATA/Case_Threat_Hunting_Agent/Report_Human.md b/DATA/Case_Threat_Hunting_Agent/Report_Human.md
index cce1b2f..fae97ce 100644
--- a/DATA/Case_Threat_Hunting_Agent/Report_Human.md
+++ b/DATA/Case_Threat_Hunting_Agent/Report_Human.md
@@ -2,15 +2,21 @@
### 1. 猎杀目标
-{hunting_objective}
+
+{hunting_objective}
+
### 2. 调查过程(推理与任务)
-{planning_history}
+
+{planning_history}
+
### 3. 技术发现(收集的证据)
-{findings}
+
+{findings}
+
---
基于上述内容,请撰写最终威胁猎杀报告。
\ No newline at end of file
diff --git a/PLAYBOOKS/Case_Threat_Hunting_Agent.py b/PLAYBOOKS/Case_Threat_Hunting_Agent.py
index 3e7c2c4..42847b4 100644
--- a/PLAYBOOKS/Case_Threat_Hunting_Agent.py
+++ b/PLAYBOOKS/Case_Threat_Hunting_Agent.py
@@ -30,7 +30,7 @@ class PlanningRecord(BaseModel):
# 可以在这里增加 helper 方法,方便转字符串
def to_markdown(self) -> str:
tasks_str = ", ".join(self.plan)
- return (f"### Round {self.iteration}\n"
+ return (f"#### Round {self.iteration}\n"
f"**Reasoning:** {self.rationale}\n"
f"**Tasks Executed:** {tasks_str}\n")
@@ -54,18 +54,18 @@ class Finding(BaseModel):
tool_calls: List = Field(default_factory=list, description="工具调用记录")
def to_markdown(self) -> str:
- return (f"---\n"
+ return (f"\n"
f"**Question:** {self.question}\n"
f"**Reasoning:** {self.reasoning}\n"
f"**Answer:** {self.answer}\n"
- f"---\n"
+ f"\n\n\n"
)
def to_markdown_for_planning(self) -> str:
- return (f"---\n"
+ return (f"\n"
f"**Question:** {self.question}\n"
f"**Answer:** {self.answer}\n"
- f"---\n"
+ f"\n\n\n"
)
@@ -402,7 +402,8 @@ class Playbook(LanggraphPlaybook):
findings_str = "\n".join(history_md_list)
- human_message = self.load_human_prompt_template("Planner_Human", lang=PROMPT_LANG).format(hunting_objective=hunting_objective,
+ human_message = self.load_human_prompt_template("Planner_Human", lang=PROMPT_LANG).format(case=state.case,
+ hunting_objective=hunting_objective,
findings=findings_str,
iteration_count=iteration_count,
)
diff --git a/PLUGINS/SIRP/sirpapi.py b/PLUGINS/SIRP/sirpapi.py
index ed0a706..bdfcc97 100644
--- a/PLUGINS/SIRP/sirpapi.py
+++ b/PLUGINS/SIRP/sirpapi.py
@@ -362,7 +362,7 @@ class Playbook(object):
return row_id
@staticmethod
- def update_status_and_remark(row_id, status: StatusType, remark):
+ def update_status_and_remark(row_id, status: PlaybookStatusType, remark):
fields = [
{"id": "job_status", "value": status},
{"id": "remark", "value": remark},