@wwkit/harness 1.0.25 → 1.0.27

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.
@@ -1,74 +0,0 @@
1
- # list_from_html 提取流程
2
-
3
- 从列表页 HTML 中提取结构化信息(混合方案:本地提取 + 规则 + LLM 规范)。
4
-
5
- ## 输入
6
-
7
- - `source`:完整网页 HTML 源码
8
- - `url`:页面 URL(可选,相对路径转绝对)
9
-
10
- ## 输出
11
-
12
- 符合 `list.schema.json5` 的 JSON 数组:
13
-
14
- ```json
15
- [
16
- {
17
- "title": "标题",
18
- "author": "作者",
19
- "date": "2026-06-12",
20
- "url": "https://example.com/article/123",
21
- "thumb": "https://example.com/thumb.jpg"
22
- }
23
- ]
24
- ```
25
-
26
- 字段:`title`(必填,空则跳过本条)、`author` / `date` / `url` / `thumb`(可选,无则留空)。
27
-
28
- ## 步骤
29
-
30
- ### Step 1 — 样本截取(本地)
31
-
32
- 用 `write` 工具将完整 HTML 写入临时文件(如 `extract_list.html`),再用 `write` 工具将 `{"html": "<HTML内容>", "keep_items": 3}` 写入 JSON 输入文件,stdin 重定向交给 Node.js 清洗并截取前 3 条:
33
-
34
- ```bash
35
- node '<技能目录>/references/extract-sample.js' < <临时 JSON 输入文件>
36
- ```
37
-
38
- 输出仅含前 3 条(或更少)的干净 HTML 样本。
39
-
40
- ### Step 2 — 规则生成(LLM)
41
-
42
- 先用 `read` 读取 `references/list-rule-gen.md`(HTML 正则生成指导,含编写规则与示例),按其中指导分析 Step 1 输出的样本 HTML,生成提取规则:
43
-
44
- - 字段集固定为 `{"title": "新闻标题", "author": "作者名", "date": "发布日期", "url": "文章链接", "thumb": "缩略图地址"}`
45
- - 输出 `{container_regex, fields: {title, author, date, url, thumb}}` 格式的 JSON 规则,**不写入文件**,直接在后续步骤内联使用
46
-
47
- `container_regex` 用于定义每条记录的外层容器边界(如 `<li>...</li>`),Node.js 先用它切分 HTML 为单条容器,再对每条容器内部应用字段正则——避免跨边界匹配。字段正则若有捕获组,提取值取 `group(1)`;建议每个字段正则只含 1 个捕获组。
48
-
49
- ### Step 3 — 批量提取(本地)
50
-
51
- 对完整 HTML 用相同清洗逻辑处理后再提取(与 Step 1 清洗口径一致)。用 `write` 工具将输入 JSON 写入临时文件,再 stdin 重定向交给 Node.js:
52
-
53
- ```bash
54
- node '<技能目录>/references/extract-regex.js' < <临时输入文件>
55
- ```
56
- ```
57
-
58
- 输入 JSON:`{"html": "<完整HTML>", "rules": <step2 规则>}`
59
-
60
- 输出:JSON 数组,每项含 `url`, `date`, `author`, `thumb`, `title` 五个字段(title 为空的条目已移除)。
61
-
62
- ### Step 4 — LLM 数据规范
63
-
64
- 将 Step 3 输出的数组交给 LLM 进行数据规范:
65
-
66
- - URL 相对路径 → 基于 `{{ url }}` 转为绝对地址
67
- - 日期统一格式 `yyyy-mm-dd`
68
- - 作者清洗(去多余空白、特殊字符)
69
- - **保持条目数量和顺序不变**
70
- - 输出必须是 JSON 数组(不是对象包裹)
71
-
72
- ### Step 5 — 验证
73
-
74
- 检查每项 title 非空,输出规范后的 JSON 数组(供 extract 技能阶段 4 校验)。
@@ -1,52 +0,0 @@
1
- # list_from_json 提取流程
2
-
3
- 将结构化 JSON 数据(text/href/src)规范化为统一列表格式。
4
-
5
- ## 输入
6
-
7
- - `source`:JSON 数组字符串或文件路径,每项含 `{text, href, src}` 三个字段:
8
- - `text`:容器内纯文本(已去标签,末尾可能带时间如 `09:44` 或日期如 `29日`)
9
- - `href`:第一个 `<a href>` 链接地址
10
- - `src`:第一个 `<img src>` 图片地址
11
- - `url`:页面 URL(可选,相对路径转绝对)
12
-
13
- ## 输出
14
-
15
- 符合 `list.schema.json5` 的 JSON 数组:
16
-
17
- ```json
18
- [
19
- {
20
- "title": "标题",
21
- "author": "作者",
22
- "date": "2026-06-12",
23
- "url": "https://example.com/article/123",
24
- "thumb": "https://example.com/thumb.jpg"
25
- }
26
- ]
27
- ```
28
-
29
- 字段:`title`(必填,空则跳过本条)、`author` / `date` / `url` / `thumb`(可选)。
30
-
31
- ## 步骤
32
-
33
- ### Step 1 — 理解输入
34
-
35
- 输入 JSON 数组每项含三个字段:
36
- - `text`:容器内纯文本(末尾可能带时间如 `09:44` 或日期如 `29日`)
37
- - `href`:第一个 `<a href>` 链接地址
38
- - `src`:第一个 `<img src>` 图片地址
39
-
40
- ### Step 2 — LLM 规范化
41
-
42
- 1. 从 `text` 末尾提取时间/日期(`HH:MM` → 当天,`NN日` → 当月,跨月则月份-1),从 text 中移除
43
- 2. 剩余 text 作为 `title`
44
- 3. `href` 作为 `url` 字段(相对路径基于 `{{ url }}` 转为绝对)
45
- 4. `src` 作为 `thumb` 字段(同上)
46
- 5. **去重:基于 `url` 去重,重复的只保留第一条,移除后续相同 url 的条目**
47
- 6. 保持条目相对顺序不变(去重后)
48
- 7. 输出必须是 JSON 数组
49
-
50
- ### Step 3 — 验证
51
-
52
- 检查每项 title 非空(空时输出 Warning),输出规范后的 JSON 数组(供 extract 技能阶段 4 校验)。
@@ -1,60 +0,0 @@
1
- # list_from_text 提取流程
2
-
3
- 从**纯文本**(无 HTML 标签)的重复结构中提取结构化信息,完全由 LLM 完成,不调用任何本地脚本。
4
-
5
- ## 输入
6
-
7
- - `source`:纯文本内容(如列表页去除标签后的文本,每条的字段以固定行序或空行分隔)
8
- - `url`:页面 URL(可选,相对路径转绝对)
9
-
10
- ## 输出
11
-
12
- 符合 `list.schema.json5` 的 JSON 数组:
13
-
14
- ```json
15
- [
16
- {
17
- "title": "标题",
18
- "author": "作者",
19
- "date": "2026-06-12",
20
- "url": "https://example.com/article/123",
21
- "thumb": "https://example.com/thumb.jpg"
22
- }
23
- ]
24
- ```
25
-
26
- 字段:`title`(必填,空则跳过本条)、`author` / `date` / `url` / `thumb`(可选,无则留空)。
27
-
28
- ## 步骤
29
-
30
- ### Step 1 — 识别重复单元并切块
31
-
32
- 分析源文本,找出重复出现的条目结构。常见形态:
33
-
34
- - 每条记录由固定行序构成(如 标题/摘要/作者/日期/阅读量,各占一行,条目间以空行或紧邻分隔)
35
- - 每条记录由空行分隔的多行块构成
36
-
37
- 按识别出的边界把源文本切分为若干候选条目块,末尾的导航/分页类文本(如「加载更多」)不属于任何条目,丢弃。
38
-
39
- ### Step 2 — 字段映射
40
-
41
- 对每个块,依据语义把内容映射到字段:
42
-
43
- - `title`:条目标题(必须非空;找不到则跳过该条)
44
- - `author`:作者(无则留空)
45
- - `date`:发布时间(无则留空)
46
- - `thumb`:图片/缩略图地址(无则留空)
47
- - `url`:链接地址(无则留空)
48
-
49
- 无法确定归属的行(如摘要、阅读量等不在 schema 内的信息)直接丢弃,不进入输出。
50
-
51
- ### Step 3 — 规范化
52
-
53
- - 日期统一格式 `yyyy-mm-dd`(如「今天」→ 当天、「昨天」→ 前一天、`HH:MM` → 当天)
54
- - `url` / `thumb` 若为相对路径,基于 `{{ url }}` 转为绝对地址
55
- - **保持条目数量和顺序不变**
56
- - 输出必须是 JSON 数组(不是对象包裹)
57
-
58
- ### Step 4 — 验证
59
-
60
- 检查每项 `title` 非空,输出规范后的 JSON 数组(供 extract 技能阶段 4 校验)。