@optima-chat/optima-agent 0.9.10 → 0.9.12

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.
Files changed (94) hide show
  1. package/.claude/skills/.kb-skills-managed.json +9 -9
  2. package/.claude/skills/ads/SKILL.md +244 -244
  3. package/.claude/skills/ads/template/campaign/CREATIVES.md +18 -18
  4. package/.claude/skills/ads/template/campaign/NOTES.md +10 -10
  5. package/.claude/skills/ads/template/campaign/STRATEGY.md +29 -29
  6. package/.claude/skills/ads/template/user/ADS.md +29 -29
  7. package/.claude/skills/ads/template/user/LEARNINGS.md +15 -15
  8. package/.claude/skills/ads/template/user/PROGRESS.md +20 -20
  9. package/.claude/skills/ads/template/user/README.md +25 -25
  10. package/.claude/skills/ads/template/user/assets/.gitignore +2 -2
  11. package/.claude/skills/bi/SKILL.md +131 -131
  12. package/.claude/skills/browser/SKILL.md +201 -201
  13. package/.claude/skills/channels/SKILL.md +188 -188
  14. package/.claude/skills/collection/SKILL.md +88 -88
  15. package/.claude/skills/douyin/SKILL.md +408 -408
  16. package/.claude/skills/ffmpeg/SKILL.md +164 -164
  17. package/.claude/skills/gen/SKILL.md +279 -279
  18. package/.claude/skills/growth/SKILL.md +90 -90
  19. package/.claude/skills/growth/template/ACCOUNTS.md +14 -14
  20. package/.claude/skills/growth/template/CALENDAR.md +7 -7
  21. package/.claude/skills/growth/template/COMMENTS.md +7 -7
  22. package/.claude/skills/growth/template/GROWTH.md +37 -37
  23. package/.claude/skills/growth/template/PROGRESS.md +4 -4
  24. package/.claude/skills/growth/template/README.md +20 -20
  25. package/.claude/skills/growth/template/TOPICS.md +7 -7
  26. package/.claude/skills/homepage/SKILL.md +177 -177
  27. package/.claude/skills/i18n/SKILL.md +517 -517
  28. package/.claude/skills/ingesting-sources/SKILL.md +94 -94
  29. package/.claude/skills/initializing-kb/SKILL.md +117 -117
  30. package/.claude/skills/instagram/SKILL.md +321 -321
  31. package/.claude/skills/inventory/SKILL.md +328 -328
  32. package/.claude/skills/kol-outreach/SKILL.md +232 -232
  33. package/.claude/skills/kol-outreach/template/campaign/CONFIG.md +60 -60
  34. package/.claude/skills/kol-outreach/template/campaign/KOLS.md +6 -6
  35. package/.claude/skills/kol-outreach/template/campaign/PROGRESS.md +3 -3
  36. package/.claude/skills/kol-outreach/template/campaign/TEMPLATES.md +88 -88
  37. package/.claude/skills/kol-outreach/template/merchant/BRAND.md +36 -36
  38. package/.claude/skills/kol-outreach/template/merchant/CAMPAIGNS.md +6 -6
  39. package/.claude/skills/kol-outreach/template/merchant/MERCHANT_LIMITS.md +16 -16
  40. package/.claude/skills/kol-outreach/template/merchant/PROGRESS.md +4 -4
  41. package/.claude/skills/kol-outreach/template/merchant/README.md +20 -20
  42. package/.claude/skills/linting-the-wiki/SKILL.md +68 -68
  43. package/.claude/skills/logistics/SKILL.md +180 -180
  44. package/.claude/skills/markdown-pdf/SKILL.md +72 -72
  45. package/.claude/skills/merchant/SKILL.md +110 -110
  46. package/.claude/skills/multigrid-poster/SKILL.md +192 -192
  47. package/.claude/skills/multigrid-poster/layouts/2x2.json +34 -34
  48. package/.claude/skills/multigrid-poster/layouts/3x3.json +43 -43
  49. package/.claude/skills/multigrid-poster/scripts/compose.py +116 -116
  50. package/.claude/skills/order/SKILL.md +452 -452
  51. package/.claude/skills/product/SKILL.md +379 -379
  52. package/.claude/skills/product-page/SKILL.md +106 -106
  53. package/.claude/skills/querying-the-wiki/SKILL.md +59 -59
  54. package/.claude/skills/reddit/SKILL.md +277 -277
  55. package/.claude/skills/review/SKILL.md +321 -321
  56. package/.claude/skills/scout/SKILL.md +575 -575
  57. package/.claude/skills/sentinel/SKILL.md +281 -281
  58. package/.claude/skills/shein/SKILL.md +246 -246
  59. package/.claude/skills/shipping/SKILL.md +200 -200
  60. package/.claude/skills/shop-content/SKILL.md +101 -101
  61. package/.claude/skills/shopify/SKILL.md +282 -282
  62. package/.claude/skills/skillify/SKILL.md +114 -114
  63. package/.claude/skills/taobao/SKILL.md +238 -238
  64. package/.claude/skills/tiktok/SKILL.md +381 -381
  65. package/.claude/skills/twitter/SKILL.md +302 -302
  66. package/.claude/skills/updating-related-pages/SKILL.md +65 -65
  67. package/.claude/skills/video-edit/SKILL.md +138 -138
  68. package/.claude/skills/video-gen/SKILL.md +630 -548
  69. package/.claude/skills/video-gen/templates/INDEX.md +78 -78
  70. package/.claude/skills/video-gen/templates/before-after-beauty.md +183 -183
  71. package/.claude/skills/video-gen/templates/drama-fmcg.md +183 -183
  72. package/.claude/skills/video-gen/templates/kol-reaction-food.md +193 -193
  73. package/.claude/skills/video-gen/templates/multi-point-apparel.md +185 -185
  74. package/.claude/skills/video-gen/templates/pain-solution-home.md +184 -184
  75. package/.claude/skills/video-gen/templates/pdp-360-showcase.md +189 -189
  76. package/.claude/skills/video-gen/templates/pdp-feature-highlight.md +182 -182
  77. package/.claude/skills/video-gen/templates/scene-digital.md +183 -183
  78. package/.claude/skills/wechat/SKILL.md +174 -174
  79. package/.claude/skills/xhs/SKILL.md +170 -170
  80. package/README.md +276 -276
  81. package/dist/bin/optima.js +26 -26
  82. package/dist/bin/serve.js +23 -23
  83. package/dist/bin/video-edit.d.ts +3 -0
  84. package/dist/bin/video-edit.d.ts.map +1 -0
  85. package/dist/bin/video-edit.js +153 -0
  86. package/dist/bin/video-edit.js.map +1 -0
  87. package/dist/src/agent.d.ts +1 -1
  88. package/dist/src/agent.js +4 -4
  89. package/dist/src/system-prompt.d.ts.map +1 -1
  90. package/dist/src/system-prompt.js +175 -173
  91. package/dist/src/system-prompt.js.map +1 -1
  92. package/dist/src/tools/memory.js +10 -10
  93. package/dist/src/ui/headless.js +7 -7
  94. package/package.json +79 -79
@@ -1,88 +1,88 @@
1
- # Email Templates
2
-
3
- <!-- LLM 只填变量({placeholder}),不写 body 。每个模板有固定的骨架。 -->
4
-
5
- ## first_outreach_v1
6
-
7
- **Subject**: Collaboration opportunity with {brand_name}
8
-
9
- **Body**:
10
- Hi {kol_first_name},
11
-
12
- {opener_line}
13
-
14
- I'm {contact_name} from {brand_name} ({brand_website}). We make
15
- {product_one_liner} and your audience seems to be a great fit because
16
- {fit_reason}.
17
-
18
- We'd love to work with you on a TikTok video featuring our {product_name}.
19
- Here's what we're proposing:
20
-
21
- - Fee: ${first_offer}
22
- - Deliverable: 1 TikTok video, kept on your profile for at least
23
- {min_retention_days} days
24
- - We'll ship you a free sample to get you started
25
-
26
- If this sounds interesting, just reply and we can work out the details.
27
-
28
- Best,
29
- {contact_name}
30
- {brand_name}
31
-
32
- ---
33
-
34
- ## counter_offer_v1
35
-
36
- **Body**:
37
- Hi {kol_first_name},
38
-
39
- Thanks for the quick reply!
40
-
41
- {acknowledge_line}
42
-
43
- We're a bit tighter on budget, but we can go up to **${new_price}** for
44
- the collaboration. {concession_line}
45
-
46
- Would that work for you?
47
-
48
- Best,
49
- {contact_name}
50
-
51
- ---
52
-
53
- ## escalate_fallback_v1
54
-
55
- <!-- 用于 Layer 2/3/4 任一护栏触发时的兜底回复 -->
56
-
57
- **Body**:
58
- Hi {kol_first_name},
59
-
60
- Thanks for your note. This is something I'd like to check with our team
61
- before confirming. I'll get back to you within 1-2 business days.
62
-
63
- Best,
64
- {contact_name}
65
- {brand_name}
66
-
67
- ---
68
-
69
- ## deal_confirmation_v1
70
-
71
- **Body**:
72
- Hi {kol_first_name},
73
-
74
- Great — we have a deal at **${final_price}**. Here's a summary for your
75
- records:
76
-
77
- - Fee: ${final_price}
78
- - Deliverable: 1 TikTok video
79
- - Video retention: at least {min_retention_days} days
80
- - Payment: {payment_schedule}
81
- - We'll ship the sample to {shipping_address_request}
82
-
83
- Please reply with your shipping address and any PayPal/bank info you
84
- prefer for payment. We'll take it from there.
85
-
86
- Thanks for working with us!
87
- {contact_name}
88
- {brand_name}
1
+ # Email Templates
2
+
3
+ <!-- LLM 只填变量({placeholder}),不写 body 。每个模板有固定的骨架。 -->
4
+
5
+ ## first_outreach_v1
6
+
7
+ **Subject**: Collaboration opportunity with {brand_name}
8
+
9
+ **Body**:
10
+ Hi {kol_first_name},
11
+
12
+ {opener_line}
13
+
14
+ I'm {contact_name} from {brand_name} ({brand_website}). We make
15
+ {product_one_liner} and your audience seems to be a great fit because
16
+ {fit_reason}.
17
+
18
+ We'd love to work with you on a TikTok video featuring our {product_name}.
19
+ Here's what we're proposing:
20
+
21
+ - Fee: ${first_offer}
22
+ - Deliverable: 1 TikTok video, kept on your profile for at least
23
+ {min_retention_days} days
24
+ - We'll ship you a free sample to get you started
25
+
26
+ If this sounds interesting, just reply and we can work out the details.
27
+
28
+ Best,
29
+ {contact_name}
30
+ {brand_name}
31
+
32
+ ---
33
+
34
+ ## counter_offer_v1
35
+
36
+ **Body**:
37
+ Hi {kol_first_name},
38
+
39
+ Thanks for the quick reply!
40
+
41
+ {acknowledge_line}
42
+
43
+ We're a bit tighter on budget, but we can go up to **${new_price}** for
44
+ the collaboration. {concession_line}
45
+
46
+ Would that work for you?
47
+
48
+ Best,
49
+ {contact_name}
50
+
51
+ ---
52
+
53
+ ## escalate_fallback_v1
54
+
55
+ <!-- 用于 Layer 2/3/4 任一护栏触发时的兜底回复 -->
56
+
57
+ **Body**:
58
+ Hi {kol_first_name},
59
+
60
+ Thanks for your note. This is something I'd like to check with our team
61
+ before confirming. I'll get back to you within 1-2 business days.
62
+
63
+ Best,
64
+ {contact_name}
65
+ {brand_name}
66
+
67
+ ---
68
+
69
+ ## deal_confirmation_v1
70
+
71
+ **Body**:
72
+ Hi {kol_first_name},
73
+
74
+ Great — we have a deal at **${final_price}**. Here's a summary for your
75
+ records:
76
+
77
+ - Fee: ${final_price}
78
+ - Deliverable: 1 TikTok video
79
+ - Video retention: at least {min_retention_days} days
80
+ - Payment: {payment_schedule}
81
+ - We'll ship the sample to {shipping_address_request}
82
+
83
+ Please reply with your shipping address and any PayPal/bank info you
84
+ prefer for payment. We'll take it from there.
85
+
86
+ Thanks for working with us!
87
+ {contact_name}
88
+ {brand_name}
@@ -1,36 +1,36 @@
1
- # 商家品牌素材
2
-
3
- <!-- 商家首次使用 skill 时 onboarding 一次,之后所有 campaign 复用 -->
4
- <!-- 单个 campaign 需要不同品牌身份时可在该 campaign 的 CONFIG.md 里覆写 -->
5
-
6
- ## 品牌基础
7
- - brand_name:
8
- - brand_slug: <!-- 用作发件邮箱 local part,全局唯一 -->
9
- - brand_website:
10
- - brand_social:
11
- - default_contact_name:
12
- - default_brand_pitch:
13
-
14
- ## 默认兜底话术(非白名单话题的预设回复,可被 campaign 覆写)
15
- - default_commission_request:
16
- - default_contract_request:
17
- - default_invoice_request:
18
- - default_negative_tone:
19
-
20
- ## 默认升级关键词(可被 campaign 覆写,必须中英双语)
21
- - default_escalation_keywords_en:
22
- - contract
23
- - lawyer
24
- - exclusive
25
- - refund
26
- - lawsuit
27
- - NDA
28
- - default_escalation_keywords_zh:
29
- - 合同
30
- - 律师
31
- - 独家
32
- - 退款
33
- - 投诉
34
- - 骗子
35
-
36
- ## 默认禁用词 (default_forbidden_phrases):
1
+ # 商家品牌素材
2
+
3
+ <!-- 商家首次使用 skill 时 onboarding 一次,之后所有 campaign 复用 -->
4
+ <!-- 单个 campaign 需要不同品牌身份时可在该 campaign 的 CONFIG.md 里覆写 -->
5
+
6
+ ## 品牌基础
7
+ - brand_name:
8
+ - brand_slug: <!-- 用作发件邮箱 local part,全局唯一 -->
9
+ - brand_website:
10
+ - brand_social:
11
+ - default_contact_name:
12
+ - default_brand_pitch:
13
+
14
+ ## 默认兜底话术(非白名单话题的预设回复,可被 campaign 覆写)
15
+ - default_commission_request:
16
+ - default_contract_request:
17
+ - default_invoice_request:
18
+ - default_negative_tone:
19
+
20
+ ## 默认升级关键词(可被 campaign 覆写,必须中英双语)
21
+ - default_escalation_keywords_en:
22
+ - contract
23
+ - lawyer
24
+ - exclusive
25
+ - refund
26
+ - lawsuit
27
+ - NDA
28
+ - default_escalation_keywords_zh:
29
+ - 合同
30
+ - 律师
31
+ - 独家
32
+ - 退款
33
+ - 投诉
34
+ - 骗子
35
+
36
+ ## 默认禁用词 (default_forbidden_phrases):
@@ -1,6 +1,6 @@
1
- # Campaigns Index
2
-
3
- <!-- 商家所有 campaign 一览。每次新建 campaign 时 skill 追加一行 -->
4
-
5
- | campaignId | product_title | status | kols_in_flight | deals_reached | budget_used | created_at |
6
- |---|---|---|---|---|---|---|
1
+ # Campaigns Index
2
+
3
+ <!-- 商家所有 campaign 一览。每次新建 campaign 时 skill 追加一行 -->
4
+
5
+ | campaignId | product_title | status | kols_in_flight | deals_reached | budget_used | created_at |
6
+ |---|---|---|---|---|---|---|
@@ -1,16 +1,16 @@
1
- # Merchant-level Rate Limits
2
-
3
- <!-- 所有 campaign 共享的 sending 配额 -->
4
- <!-- skill 在每次发信前读/写这个文件,git commit -->
5
-
6
- ## 配置
7
- - max_daily_sends: 50
8
- - tz: UTC
9
-
10
- ## 今日发信计数
11
- - date_utc:
12
- - sent_today: 0
13
-
14
- ## 最近 10 天统计(滚动,由 skill 自动追加)
15
- | date_utc | sent_count |
16
- |---|---|
1
+ # Merchant-level Rate Limits
2
+
3
+ <!-- 所有 campaign 共享的 sending 配额 -->
4
+ <!-- skill 在每次发信前读/写这个文件,git commit -->
5
+
6
+ ## 配置
7
+ - max_daily_sends: 50
8
+ - tz: UTC
9
+
10
+ ## 今日发信计数
11
+ - date_utc:
12
+ - sent_today: 0
13
+
14
+ ## 最近 10 天统计(滚动,由 skill 自动追加)
15
+ | date_utc | sent_count |
16
+ |---|---|
@@ -1,4 +1,4 @@
1
- # KOL Outreach Merchant Log
2
-
3
- <!-- 跨 campaign 的里程碑日志,最新的在最上面 -->
4
- <!-- 格式:YYYY-MM-DD HH:mm — [campaignId] 事件 -->
1
+ # KOL Outreach Merchant Log
2
+
3
+ <!-- 跨 campaign 的里程碑日志,最新的在最上面 -->
4
+ <!-- 格式:YYYY-MM-DD HH:mm — [campaignId] 事件 -->
@@ -1,20 +1,20 @@
1
- # KOL Outreach Workspace
2
-
3
- This directory is your KOL 建联 workspace. Each file is markdown and git-tracked.
4
-
5
- ## Layout
6
-
7
- - `BRAND.md` — your brand info, shared across all campaigns
8
- - `MERCHANT_LIMITS.md` — cross-campaign sending rate limit
9
- - `CAMPAIGNS.md` — index of all your campaigns
10
- - `PROGRESS.md` — merchant-level log (one line per milestone)
11
- - `campaigns/{campaignId}/` — one directory per campaign
12
-
13
- ## What you can edit by hand
14
-
15
- Any markdown file. The skill will read your edits on the next invocation.
16
-
17
- ## How to add a new campaign
18
-
19
- Say "帮我给 {product} 找 KOL" to the skill — it walks you through onboarding
20
- and creates a new `campaigns/{campaignId}/` directory from the template.
1
+ # KOL Outreach Workspace
2
+
3
+ This directory is your KOL 建联 workspace. Each file is markdown and git-tracked.
4
+
5
+ ## Layout
6
+
7
+ - `BRAND.md` — your brand info, shared across all campaigns
8
+ - `MERCHANT_LIMITS.md` — cross-campaign sending rate limit
9
+ - `CAMPAIGNS.md` — index of all your campaigns
10
+ - `PROGRESS.md` — merchant-level log (one line per milestone)
11
+ - `campaigns/{campaignId}/` — one directory per campaign
12
+
13
+ ## What you can edit by hand
14
+
15
+ Any markdown file. The skill will read your edits on the next invocation.
16
+
17
+ ## How to add a new campaign
18
+
19
+ Say "帮我给 {product} 找 KOL" to the skill — it walks you through onboarding
20
+ and creates a new `campaigns/{campaignId}/` directory from the template.
@@ -1,68 +1,68 @@
1
- ---
2
- name: linting-the-wiki
3
- description: "检查知识库健康度。当用户说'检查知识库'、'知识库有什么问题'时使用。"
4
- ---
5
-
6
- # Linting The Wiki
7
-
8
- 检查 wiki 随时间推移后的完整性和可维护性。
9
-
10
- ## 启动 SOP
11
-
12
- 1. `ls ~/kb/REGISTRY.md`
13
- - 不存在 → 告诉用户"还没有知识库,需要先创建一个",引导使用 initializing-kb
14
- 2. 读 `~/kb/REGISTRY.md` — 获取所有 active 的 KB 列表
15
- 3. 确定目标 KB:
16
- - 用户明确指定了 KB slug 或主题 → 直接用
17
- - 用户说"全部 lint" → 遍历所有 active KB
18
- - 只有一个 active KB → 用它
19
- - 多个 active → 列出让用户选
20
- 4. 读 `~/kb/<slug>/AGENTS.md` 了解该 KB 的契约
21
-
22
- ## Lint 流程
23
-
24
- 1. 先跑 CLI 自动扫描:
25
-
26
- ```bash
27
- kb-skills lint --dir ~/kb/<slug>
28
- ```
29
-
30
- CLI 会检测:断链、index.md 覆盖不足、index entry 格式错误、重复 index entry、孤立页面(无入链)、log.md heading 格式。输出为每行一条 issue,退出码 0 表示无问题。
31
-
32
- 2. 基于 CLI 报告 + 人工阅读,补充 CLI 无法检测的问题(见下方"要检查什么")
33
- 3. 按类型归类所有问题:链接、覆盖度、过时、矛盾、重复、页面规模或索引问题
34
- 4. 除非用户要求更大范围修复,否则只应用小而明确的修补
35
- 5. 清楚报告仍未解决的问题
36
- 6. 追加 `~/kb/PROGRESS.md`
37
- 7. `cd ~/kb && git add -A && git commit -m "[<slug>] lint: <发现N个问题,修复M个>"`
38
-
39
- ## 要检查什么(CLI 之外的人工检查)
40
-
41
- CLI 已覆盖断链、孤立页面、index 覆盖和格式问题。以下需要人工判断:
42
-
43
- - 被反复提及但没有独立页面的实体或概念
44
- - 本应并入 overview 的 analysis 页面,或反过来的情况
45
- - 新来源进入后仍未更新的旧综述
46
- - `index.md` 与实际长期页面之间的漂移
47
- - 为了清晰起见应被拆分的大页面
48
- - 由于缺少来源而无法回答、但明显值得继续调查的问题
49
-
50
- ## 修复边界
51
-
52
- 安全的 lint 修复通常包括:
53
-
54
- - 增加缺失链接
55
- - 更新 `index.md`
56
- - 澄清过时标签
57
- - 就地标出矛盾
58
-
59
- 不要把 lint 变成无边界重写。需要更深层次调整时,明确说出来并停下,除非用户明确要求继续。
60
-
61
- ## 最小交付标准
62
-
63
- 一次成功的 lint 至少应留下:
64
-
65
- - 一份简短但具体的问题清单
66
- - 已经完成的有边界修复
67
- - 已修复问题与剩余债务之间的清晰区分
68
- - 需要通过新来源或 web search 继续补足的空白点
1
+ ---
2
+ name: linting-the-wiki
3
+ description: "检查知识库健康度。当用户说'检查知识库'、'知识库有什么问题'时使用。"
4
+ ---
5
+
6
+ # Linting The Wiki
7
+
8
+ 检查 wiki 随时间推移后的完整性和可维护性。
9
+
10
+ ## 启动 SOP
11
+
12
+ 1. `ls ~/kb/REGISTRY.md`
13
+ - 不存在 → 告诉用户"还没有知识库,需要先创建一个",引导使用 initializing-kb
14
+ 2. 读 `~/kb/REGISTRY.md` — 获取所有 active 的 KB 列表
15
+ 3. 确定目标 KB:
16
+ - 用户明确指定了 KB slug 或主题 → 直接用
17
+ - 用户说"全部 lint" → 遍历所有 active KB
18
+ - 只有一个 active KB → 用它
19
+ - 多个 active → 列出让用户选
20
+ 4. 读 `~/kb/<slug>/AGENTS.md` 了解该 KB 的契约
21
+
22
+ ## Lint 流程
23
+
24
+ 1. 先跑 CLI 自动扫描:
25
+
26
+ ```bash
27
+ kb-skills lint --dir ~/kb/<slug>
28
+ ```
29
+
30
+ CLI 会检测:断链、index.md 覆盖不足、index entry 格式错误、重复 index entry、孤立页面(无入链)、log.md heading 格式。输出为每行一条 issue,退出码 0 表示无问题。
31
+
32
+ 2. 基于 CLI 报告 + 人工阅读,补充 CLI 无法检测的问题(见下方"要检查什么")
33
+ 3. 按类型归类所有问题:链接、覆盖度、过时、矛盾、重复、页面规模或索引问题
34
+ 4. 除非用户要求更大范围修复,否则只应用小而明确的修补
35
+ 5. 清楚报告仍未解决的问题
36
+ 6. 追加 `~/kb/PROGRESS.md`
37
+ 7. `cd ~/kb && git add -A && git commit -m "[<slug>] lint: <发现N个问题,修复M个>"`
38
+
39
+ ## 要检查什么(CLI 之外的人工检查)
40
+
41
+ CLI 已覆盖断链、孤立页面、index 覆盖和格式问题。以下需要人工判断:
42
+
43
+ - 被反复提及但没有独立页面的实体或概念
44
+ - 本应并入 overview 的 analysis 页面,或反过来的情况
45
+ - 新来源进入后仍未更新的旧综述
46
+ - `index.md` 与实际长期页面之间的漂移
47
+ - 为了清晰起见应被拆分的大页面
48
+ - 由于缺少来源而无法回答、但明显值得继续调查的问题
49
+
50
+ ## 修复边界
51
+
52
+ 安全的 lint 修复通常包括:
53
+
54
+ - 增加缺失链接
55
+ - 更新 `index.md`
56
+ - 澄清过时标签
57
+ - 就地标出矛盾
58
+
59
+ 不要把 lint 变成无边界重写。需要更深层次调整时,明确说出来并停下,除非用户明确要求继续。
60
+
61
+ ## 最小交付标准
62
+
63
+ 一次成功的 lint 至少应留下:
64
+
65
+ - 一份简短但具体的问题清单
66
+ - 已经完成的有边界修复
67
+ - 已修复问题与剩余债务之间的清晰区分
68
+ - 需要通过新来源或 web search 继续补足的空白点