@zhushanwen/pi-evolve-daily 0.1.8 → 0.1.10

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.
@@ -42,7 +42,7 @@ def load_sessions(since_days: int = 1, input_file: str | None = None) -> list[di
42
42
  cutoff = datetime.now() - timedelta(days=since_days)
43
43
  sessions = []
44
44
 
45
- for session_file in sessions_dir.glob("*.jsonl"):
45
+ for session_file in sessions_dir.rglob("*.jsonl"):
46
46
  try:
47
47
  # 从文件名解析日期
48
48
  file_date = datetime.fromisoformat(session_file.stem[:10])
@@ -83,17 +83,31 @@ def _load_from_file(input_file: str) -> list[dict]:
83
83
 
84
84
 
85
85
  def _load_session_file(file_path: Path) -> dict | None:
86
- """加载单个 JSONL session 文件。"""
86
+ """加载单个 JSONL session 文件。
87
+
88
+ Pi 的 JSONL 格式中,工具调用结果嵌套在 message 类型事件里:
89
+ {"type": "message", "message": {"role": "toolResult", ...}}
90
+ extractor 需要直接访问 role/toolName 等字段,
91
+ 所以这里将 message 类型事件的内层 message 展开。
92
+ """
87
93
  try:
88
94
  messages = []
89
95
  with open(file_path, "r", encoding="utf-8") as f:
90
96
  for line in f:
91
97
  line = line.strip()
92
- if line:
93
- try:
94
- messages.append(json.loads(line))
95
- except json.JSONDecodeError:
96
- continue
98
+ if not line:
99
+ continue
100
+ try:
101
+ entry = json.loads(line)
102
+ except json.JSONDecodeError:
103
+ continue
104
+
105
+ # 展开 message 类型:用内层 message 替代外层包装
106
+ # 这样 extractor 的 msg.get("role") 等可以正常工作
107
+ if entry.get("type") == "message" and "message" in entry:
108
+ messages.append(entry["message"])
109
+ else:
110
+ messages.append(entry)
97
111
 
98
112
  if not messages:
99
113
  return None
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@zhushanwen/pi-evolve-daily",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Daily evolution data collector — runs Python analyzer on first session of the day.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "main": "src/index.ts",
8
8
  "pi": {
9
9
  "extensions": [
10
- "./src/index.ts"
10
+ "./index.ts"
11
11
  ],
12
12
  "skills": [
13
13
  "./skills"