@wwkit/harness 1.0.26 → 1.0.28

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,29 +1,25 @@
1
- # 社交媒体风格问题创作 Prompt
1
+ # 社交媒体风格问题(question)创作 Sprint
2
2
 
3
- ## 任务
3
+ ## Sprint Goal
4
4
 
5
- 根据原始素材提取并创作一个**适合社交媒体传播的问题(question)**。
5
+ 产出 `{{count}}` 条适合社交媒体传播的问题内容(尖锐标题 + 简洁描述),整体为 JSON 数组。
6
6
 
7
- ## 输入
7
+ ## 创作原则
8
8
 
9
- - `source`:原始素材(文本或 JSON 字符串)
10
- - `count`:生成的问题数量(默认 1,输出为数组)
11
- - 创作格式要求见下方
9
+ 基于原始素材创作,聚焦 format 特有要点:
12
10
 
13
- ## 输出格式
14
-
15
- 输出为 JSON **数组**,每个元素的结构必须严格符合 schema `references/question.schema.json5`(阶段 2 已读取)——字段、类型、必填项、数组数量、title/content 长度均以 schema 为准。
11
+ 1. **标题要尖锐**:有争议性、冲突点,能激发讨论欲和互动
12
+ 2. **描述要简洁**:说明背景,引出矛盾点,不要太长
13
+ 3. **图片按需提取**:从素材中提取图片地址,最多 5 张;素材无图片时为空数组
14
+ 4. **基于素材**:从素材中提取核心矛盾点,不能凭空编造
16
15
 
17
- > 字数计算采用 **cn_length** 规则:中文字符算 1,非中文字符(英文/数字/符号)算 0.5,结果向上取整。
16
+ ## 输出契约
18
17
 
19
- ## 创作要求
18
+ 每个 item 结构严格符合 schema `references/question.schema.json5`:`title`(10-30 cn_length)、`content`(20-500 cn_length)、`images`(string[],≤5)。**整体输出为 JSON 数组,含 `{{count}}` 个 item。**
20
19
 
21
- 1. **标题要尖锐**:有争议性、冲突点,能激发讨论欲和互动
22
- 2. **描述要简洁**:说明背景,引出矛盾点,不要太长
23
- 3. **图片按需提取**:从原始素材中提取图片地址,最多 5 张,元素为图片地址字符串;素材无图片时为空
24
- 4. **基于素材创作**:从素材中提取核心矛盾点,不能凭空编造
20
+ > 字数计算采用 **cn_length** 规则:中文字符算 1,非中文字符(英文/数字/符号)算 0.5,结果向上取整。
25
21
 
26
- ## 输出示例
22
+ 示例:
27
23
 
28
24
  ```json
29
25
  [
@@ -35,7 +31,7 @@
35
31
  ]
36
32
  ```
37
33
 
38
- ## 注意事项
34
+ ## 铁律
39
35
 
40
36
  - 仅输出 JSON 数组,不要包含任何解释、思考过程或额外文本
41
- - 输出始终为数组,包含 count 个 item(默认 1),禁止输出单个对象
37
+ - 输出始终为数组,包含 `{{count}}` 个 item(默认 1),禁止输出单个对象
@@ -1,29 +1,25 @@
1
- # 社交媒体动态创作 Prompt
1
+ # 社交媒体动态(status)创作 Sprint
2
2
 
3
- ## 任务
3
+ ## Sprint Goal
4
4
 
5
- 根据原始素材提取并创作一条**适合社交媒体传播的动态(status)**。
5
+ 产出 `{{count}}` 条适合社交媒体传播的动态内容(短平快正文),整体为 JSON 数组。
6
6
 
7
- ## 输入
7
+ ## 创作原则
8
8
 
9
- - `source`:原始素材(文本或 JSON 字符串)
10
- - `count`:生成的动态数量(默认 1,输出为数组)
11
- - 创作格式要求见下方
9
+ 基于原始素材创作,聚焦 format 特有要点:
12
10
 
13
- ## 输出格式
14
-
15
- 输出为 JSON **数组**,每个元素的结构必须严格符合 schema `references/status.schema.json5`(阶段 2 已读取)——字段、类型、必填项、数组数量、content 长度均以 schema 为准。
11
+ 1. **正文要精炼**:短平快,提炼核心信息,避免大段照抄原文
12
+ 2. **有观点、易互动**:口语化表达,带个人观点或情绪,能引发讨论和转发
13
+ 3. **图片按需提取**:从素材中提取图片地址,最多 5 张;素材无图片时为空数组
14
+ 4. **基于素材**:从素材中提炼要点,不能凭空编造
16
15
 
17
- > 字数计算采用 **cn_length** 规则:中文字符算 1,非中文字符(英文/数字/符号)算 0.5,结果向上取整。
16
+ ## 输出契约
18
17
 
19
- ## 创作要求
18
+ 每个 item 结构严格符合 schema `references/status.schema.json5`:`content`(20-500 cn_length)、`images`(string[],≤5)。**整体输出为 JSON 数组,含 `{{count}}` 个 item。**
20
19
 
21
- 1. **正文要精炼**:短平快,提炼核心信息,避免大段照抄原文
22
- 2. **有观点、易互动**:口语化表达,带个人观点或情绪,能引发讨论和转发
23
- 3. **图片按需提取**:从原始素材中提取图片地址,最多 5 张,元素为图片地址字符串;素材无图片时为空
24
- 4. **基于素材创作**:从素材中提炼要点,不能凭空编造
20
+ > 字数计算采用 **cn_length** 规则:中文字符算 1,非中文字符(英文/数字/符号)算 0.5,结果向上取整。
25
21
 
26
- ## 输出示例
22
+ 示例:
27
23
 
28
24
  ```json
29
25
  [
@@ -34,7 +30,7 @@
34
30
  ]
35
31
  ```
36
32
 
37
- ## 注意事项
33
+ ## 铁律
38
34
 
39
35
  - 仅输出 JSON 数组,不要包含任何解释、思考过程或额外文本
40
- - 输出始终为数组,包含 count 个 item(默认 1),禁止输出单个对象
36
+ - 输出始终为数组,包含 `{{count}}` 个 item(默认 1),禁止输出单个对象
@@ -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 校验)。