@gobing-ai/knowledge-kit 0.1.11 → 0.1.13
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.
- package/.claude-plugin/marketplace.json +1 -1
- package/dist/index.js +2372 -1722
- package/package.json +1 -1
- package/plugins/generations/image-gen/README.md +108 -0
- package/plugins/generations/image-gen/assets/sample/cover__clean-webapp-ui.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__cute.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__daily-news.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__editorial.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__fresh.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__minimalist.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__photorealistic.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__sketch.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__technical-diagram.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__vibrant.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__warm.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/cover__xhs-knowledge.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__clean-webapp-ui.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__cute.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__daily-news.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__editorial.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__fresh.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__minimalist.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__photorealistic.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__sketch.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__technical-diagram.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__vibrant.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__warm.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/daily-news-cover__xhs-knowledge.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__clean-webapp-ui.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__cute.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__daily-news.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__editorial.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__fresh.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__minimalist.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__photorealistic.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__sketch.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__technical-diagram.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__vibrant.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__warm.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/free__xhs-knowledge.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__clean-webapp-ui.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__cute.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__daily-news.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__editorial.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__fresh.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__minimalist.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__photorealistic.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__sketch.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__technical-diagram.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__vibrant.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__warm.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/illustration__xhs-knowledge.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__clean-webapp-ui.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__cute.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__daily-news.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__editorial.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__fresh.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__minimalist.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__photorealistic.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__sketch.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__technical-diagram.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__vibrant.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__warm.jpg +0 -0
- package/plugins/generations/image-gen/assets/sample/xhs-card__xhs-knowledge.jpg +0 -0
- package/plugins/generations/image-gen/dist/index.js +102 -58
- package/plugins/generations/image-gen/scripts/compose-e2e-artifact.ts +5 -21
- package/plugins/generations/image-gen/scripts/gen-samples.ts +208 -0
- package/plugins/generations/image-gen/src/compose/chromium.ts +2 -3
- package/plugins/generations/image-gen/src/presets.ts +6 -3
- package/plugins/generations/image-gen/src/providers/errors.ts +16 -1
- package/plugins/generations/image-gen/src/providers/minimax.ts +46 -17
- package/plugins/ingestions/web-search/src/index.ts +1 -1
- package/plugins/kk/README.md +18 -0
- package/plugins/kk/commands/image-extract.md +1 -0
- package/plugins/kk/commands/image-generate.md +1 -0
- package/plugins/kk/commands/tell-me.md +1 -0
- package/plugins/kk/commands/workflow-run.md +7 -1
- package/plugins/kk/decisions/extract/it-topics.yaml +24 -0
- package/plugins/kk/decisions/kk-itc.yaml +6 -4
- package/plugins/kk/plugin.json +1 -1
- package/plugins/kk/publish-presets/daily-ai-voice-migration.json +146 -0
- package/plugins/kk/publish-presets/daily-ai-voice.json +15 -7
- package/plugins/kk/schedules/kk-collect.grok-bot.md.tmpl +69 -0
- package/plugins/kk/schedules/kk-daily-ai-voice3.cron.tmpl +18 -0
- package/plugins/kk/schedules/kk-daily-publish3-cn-peak.cron.tmpl +15 -5
- package/plugins/kk/schedules/kk-daily-publish3-overseas.cron.tmpl +9 -4
- package/plugins/kk/scripts/daily-scheduled-run.ts +91 -41
- package/plugins/kk/scripts/daily-stages.ts +394 -53
- package/plugins/kk/scripts/kk-workflow-stages.ts +190 -0
- package/plugins/kk/scripts/safety-artifact-check.ts +70 -28
- package/plugins/kk/scripts/voice3-publish-window.ts +202 -0
- package/plugins/kk/skills/article-adapt/SKILL.md +1 -0
- package/plugins/kk/skills/audio-authoring/SKILL.md +1 -0
- package/plugins/kk/skills/content-judge/SKILL.md +1 -0
- package/plugins/kk/skills/content-safety/SKILL.md +1 -0
- package/plugins/kk/skills/content-safety/references/platforms/podcast-salty.md +41 -0
- package/plugins/kk/skills/content-safety/references/platforms/surfdash.md +36 -0
- package/plugins/kk/skills/content-safety/references/platforms/xhs.md +39 -0
- package/plugins/kk/skills/explain-things/SKILL.md +1 -0
- package/plugins/kk/skills/image-authoring/SKILL.md +1 -0
- package/plugins/kk/skills/itc-generating/SKILL.md +1 -0
- package/plugins/kk/skills/publish/SKILL.md +1 -0
- package/plugins/kk/skills/smart-seo/SKILL.md +1 -0
- package/plugins/kk/skills/storm-research/SKILL.md +1 -0
- package/plugins/kk/skills/taste-unslop/SKILL.md +1 -0
- package/plugins/kk/skills/topic/SKILL.md +1 -0
- package/plugins/kk/skills/web-automation/SKILL.md +1 -0
- package/plugins/kk/skills/xhs-images/SKILL.md +1 -0
- package/plugins/kk/workflows/kk-collect.yaml +3 -3
- package/plugins/kk/workflows/kk-daily-ai-voice2.yaml +21 -19
- package/plugins/kk/workflows/kk-daily-ai-voice3.yaml +163 -63
- package/plugins/kk/workflows/kk-daily-publish3.yaml +82 -26
- package/plugins/kk/workflows/kk-daily-safety.yaml +39 -31
- package/plugins/kk/workflows/kk-itc-author.yaml +75 -0
- package/plugins/kk/workflows/kk-itc-publish-tail.yaml +25 -3
- package/plugins/kk/workflows/kk-itc.yaml +36 -4
- package/plugins/publishings/linkedin-pub/dist/index.js +21333 -0
- package/plugins/publishings/linkedin-pub/dist/profile-check.js +21005 -0
- package/plugins/publishings/linkedin-pub/package.json +19 -0
- package/plugins/publishings/linkedin-pub/plugin.json +12 -0
- package/plugins/publishings/linkedin-pub/src/index.ts +705 -0
- package/plugins/publishings/linkedin-pub/src/profile-check.ts +17 -0
- package/plugins/publishings/linkedin-pub/tsconfig.json +4 -0
- package/plugins/publishings/surfdash-pub/dist/index.js +53 -24
- package/plugins/publishings/surfdash-pub/src/index.ts +72 -25
- package/plugins/publishings/threads-pub/dist/index.js +7 -0
- package/plugins/publishings/threads-pub/src/index.ts +12 -0
- package/plugins/publishings/wechatmp-pub/dist/index.js +176 -32
- package/plugins/publishings/wechatmp-pub/src/flow.ts +298 -52
- package/plugins/publishings/weibo-pub/dist/index.js +100 -7
- package/plugins/publishings/weibo-pub/src/index.ts +111 -11
- package/plugins/publishings/x-pub/dist/index.js +7 -0
- package/plugins/publishings/x-pub/src/index.ts +11 -0
- package/plugins/publishings/xhs-pub/dist/index.js +164 -12
- package/plugins/publishings/xhs-pub/dist/profile-check.js +11 -1
- package/plugins/publishings/xhs-pub/src/flow.ts +194 -23
- package/plugins/publishings/xhs-pub/src/page.ts +26 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Salty Talk / Surfing (surfdash) — platform reference
|
|
2
|
+
|
|
3
|
+
`surfing.salty.vip` 是本项目自有的静态发布站点(Robin Min 自有域名,栏目「AI 乱炖」,zh/en/ja 三语)。
|
|
4
|
+
这是**自有渠道**,不是第三方分发平台:没有平台审核队列、字级词表或 AI 标注接口可引用。
|
|
5
|
+
本文件存在的意义是把「自有站点没有平台规则」这件事写清楚,避免审核流程把「无三方平台规则」
|
|
6
|
+
误判成证据缺口并默认 BLOCK。
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
|-------|-------|
|
|
10
|
+
| Official source | 自有站点,无第三方协议页;本文件由站点维护者(Robin Min)本人核定 |
|
|
11
|
+
| Scope | `surfing.salty.vip` 文章页(正文、frontmatter 的 title/description/key_points/cover) |
|
|
12
|
+
| Effective date | 本文件创建日即生效(自有平台规则由维护者裁定) |
|
|
13
|
+
| Last verified | 2026-11-05(创建) |
|
|
14
|
+
| Evidence status | 维护者本人口径,非三方引用;无字级禁用词表 |
|
|
15
|
+
|
|
16
|
+
## Evidence distinctions
|
|
17
|
+
|
|
18
|
+
- **维护者裁定(本文件的权威来源)**:站点是自有域名下的小型技术/资讯栏目,采用与本项目其他
|
|
19
|
+
台一致的通用内容纪律;没有平台方提供的可引用条款。
|
|
20
|
+
- **通用纪律(沿用技能默认)**:披露/AI 声明、来源可靠性、隐私/PII、医疗/投资类内容红线全部
|
|
21
|
+
沿用技能 default;本文件不新增平台规则。
|
|
22
|
+
|
|
23
|
+
## Review items
|
|
24
|
+
|
|
25
|
+
| ID | Item | Grade |
|
|
26
|
+
|----|------|-------|
|
|
27
|
+
| SD-01 | 来源诚实性:对外引用(媒体/论文/Blog)须给出真实出处链接;「综述性转述未读原文」是 sourcing gap,按 note 记录并在站点正文保持既有 hedging;**不要**因为转述来自聚合页/未读原文而 block——这与 apple-podcasts 的 AP-06 严格度不同,自有站点由维护者自行判断并复核。 | note |
|
|
28
|
+
| SD-02 | 数字与事实核对:与源链接一致的数字/日期/机构名出现冲突时按技能通用规则处理(correctable → revise;冲突无解 → block)。 | note→judge |
|
|
29
|
+
| SD-03 | 可识别个人信息(听众或第三方的私人信息、联系方式、住址等) | desensitize→block if unfixable |
|
|
30
|
+
| SD-04 | roku/医疗/投资劝诱内容技能默认红线不变(本文件不放开任何默认红线)。 | default |
|
|
31
|
+
|
|
32
|
+
## Open questions / escalation
|
|
33
|
+
|
|
34
|
+
- 自有站点无第三方审核 → 本文件不应产生 `evidenceGap: true` 类 BLOCK;任何「surfdash 无 reference
|
|
35
|
+
文件」的发现都指向本文件缺失,而不是内容风险。
|
|
36
|
+
- 若未来站点引入广告或国家安全审查类规则,本文件需要更新。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 小红书 (Xiaohongshu / xhs) — platform reference
|
|
2
|
+
|
|
3
|
+
Review-item IDs here are **this skill's bookkeeping numbers**, not official platform rule codes.
|
|
4
|
+
与 xiaoyuzhou.md 同一格式约定:这是本技能基于操作者已核验证据的保守立场,不是平台条文。
|
|
5
|
+
|
|
6
|
+
| Field | Value |
|
|
7
|
+
|-------|-------|
|
|
8
|
+
| Official source | <https://www.xiaohongshu.com/community/>(社区公约/创作细则入口,多级页面) |
|
|
9
|
+
| Scope | 笔记(图文/视频长文)、封面图、话题标签、昵称简介 |
|
|
10
|
+
| Effective date | unknown(社区公约页面未标注可引用的版本生效日期) |
|
|
11
|
+
| Last verified | 2026-11-05(写本文件时按操作者已有账号审查经验整理,未逐字读官方更新后全文) |
|
|
12
|
+
| Evidence status | **未获官方逐字条文**;以下审核项是本技能的保守立场,不是平台条文;与小宇宙 0189 事件类似,任何具体下架理由以官方为主,本技能按保守项判断 |
|
|
13
|
+
|
|
14
|
+
## Evidence distinctions
|
|
15
|
+
|
|
16
|
+
- **官方规则(已知存在,未逐字核对)**:小红书有《社区公约》与《创作规范》,对违法违规、医疗
|
|
17
|
+
健康、财产投资、隐私、低质同质化、AI 生成内容有原则性条款;公开文本不提供逐字词表。
|
|
18
|
+
- **操作者经验(保守立场来源)**:账号为个人技术分享(栏目「AI 乱炖」衍生),非新闻机构、无
|
|
19
|
+
医疗/金融资质、不带货;发帖以图文长文/播客预告为主。
|
|
20
|
+
- **编辑建议(本技能)**:以下审核项是本技能基于上述证据的保守立场,不是平台条文。
|
|
21
|
+
|
|
22
|
+
## Review items
|
|
23
|
+
|
|
24
|
+
| ID | Item | Grade |
|
|
25
|
+
|----|------|-------|
|
|
26
|
+
| XH-01 | 资质口径:不得呈现「新闻资讯播报」形态或暗示持有新闻资质(技术/科普类分享不受影响;同 xiaoyuzhou.md XY-01 的操作者裁定 2026-10-10,按 note 记录,不逐集 escalate)。 | note |
|
|
27
|
+
| XH-02 | 医疗健康/药品/诊疗建议:以医疗结论、疗效、用药指导为主线的内容(本栏目主题为 AI 技术/产业资讯,正常不会触发;一旦触发按 block)。 | block |
|
|
28
|
+
| XH-03 | 投资/理财:以个股买卖建议、收益承诺为主线的内容(对 quadrature/Anthropic 等估值表述属于普通事实转述,不是建议;命中后再 judge)。 | block |
|
|
29
|
+
| XH-04 | AI 生成内容标识:平台对 AI 生成内容有标注要求(** 未逐字核对当前接口规则,按公共常见要求保守处理**)。本栏目发布为「AI 辅助创作」的播客预告/图文 —— 操作者已在账号简介披露 AI 辅助;单条内容不再逐条 escalate。 | note |
|
|
30
|
+
| XH-05 | 可识别个人信息(听众或第三方的私人信息、联系方式、住址等) | desensitize→block if unfixable |
|
|
31
|
+
| XH-06 | 时政/公共事务主线:同 xiaoyuzhou.md XY-02(政策管制、军事、公共政策争议为主线的内容按 block)。 | block |
|
|
32
|
+
|
|
33
|
+
## Open questions / escalation
|
|
34
|
+
|
|
35
|
+
- 无官方字级词表 → 任何「词命中即下架」的断言都不成立;同理,无词表不等于安全。
|
|
36
|
+
- AI 标注、内容审核新规变化频繁 → 每次提审前按 XH-04 复核;`RISK` 或证据缺口一律人工复审
|
|
37
|
+
(`escalate: true`),不得静默 PASS。
|
|
38
|
+
- 资质口径、时政主线与个人信息的红线全部沿用技能默认,本文件只 diminute XH-04 的逐条 escalate
|
|
39
|
+
(业务上固定披露已存在)。
|
|
@@ -7,6 +7,7 @@ description: >-
|
|
|
7
7
|
"how does X work", "ELI5", "like I'm 5", or "show me". Normal explanations are
|
|
8
8
|
concise inline views; the ELI5 register is opt-in. This is not for content authoring,
|
|
9
9
|
research, judging, publishing, or package/code review workflows.
|
|
10
|
+
requires: [local-fs]
|
|
10
11
|
---
|
|
11
12
|
|
|
12
13
|
# explain-things
|
|
@@ -7,6 +7,7 @@ description: >-
|
|
|
7
7
|
"list the image formats and styles". Three operations — generate,
|
|
8
8
|
extract-style, list-presets — over named format and style presets, with a
|
|
9
9
|
confirmation gate before any paid generation.
|
|
10
|
+
requires: [cli:kk, cli:spur, local-fs]
|
|
10
11
|
---
|
|
11
12
|
|
|
12
13
|
# image-authoring — image generation agent surface (generate | extract-style | list-presets)
|
|
@@ -7,6 +7,7 @@ description: >-
|
|
|
7
7
|
writing method", "generate an IT technical draft on X", "create a technical
|
|
8
8
|
article for WeChat/English platforms". Orchestrates topic (outline + draft),
|
|
9
9
|
optional storm-research, and optional content-judge without enlarging those skills.
|
|
10
|
+
requires: [cli:kk, local-fs]
|
|
10
11
|
---
|
|
11
12
|
|
|
12
13
|
# itc-generating — IT technical draft generation (method + orchestration)
|
|
@@ -6,6 +6,7 @@ description: >-
|
|
|
6
6
|
`kk executor run` / `kk fanout` for file-cli and script channels; sequences
|
|
7
7
|
agent-default CMS channels as workflow `agent.run` steps. Does not own
|
|
8
8
|
transport.
|
|
9
|
+
requires: [cli:kk, local-fs]
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# publish — leftover channel operator surface
|
|
@@ -6,6 +6,7 @@ description: >-
|
|
|
6
6
|
this saved audit", "explain these SEO findings", or "check GEO readiness". Read-only results: no
|
|
7
7
|
site mutation, no ranking and no citation promises.
|
|
8
8
|
version: 0.1.0
|
|
9
|
+
requires: [cli:kk, cli:spur, local-fs]
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# smart-seo — evidence-grounded SEO/GEO audits
|
|
@@ -8,6 +8,7 @@ description: >-
|
|
|
8
8
|
(prepare → ingest → generate → render) over the 0056 works layout. Research is separate from
|
|
9
9
|
authoring: topic owns init→outline→draft and this skill never merges into topic.
|
|
10
10
|
version: 0.1.0
|
|
11
|
+
requires: [cli:kk, local-fs]
|
|
11
12
|
---
|
|
12
13
|
|
|
13
14
|
# storm-research — STORM daily research (topic sentence XOR markdown file → content.md)
|
|
@@ -5,6 +5,7 @@ description: >-
|
|
|
5
5
|
voice and substance — "make this sound human", "remove the AI tells", "audit this
|
|
6
6
|
copy for canned patterns", "restore my voice after AI editing". Not for code,
|
|
7
7
|
translation-only work, or proofreading that must preserve style.
|
|
8
|
+
requires: [local-fs]
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
# taste-unslop
|
|
@@ -7,6 +7,7 @@ description: >-
|
|
|
7
7
|
Runs the topic-core authoring loop (init → outline → draft) through four
|
|
8
8
|
operations with explicit operator gates and safe resume. knowledge-kit's
|
|
9
9
|
cohesive topic-authoring core, harvested from the WT 7-stage wrappers.
|
|
10
|
+
requires: [cli:kk, cli:spur, local-fs]
|
|
10
11
|
---
|
|
11
12
|
|
|
12
13
|
# topic — topic-core authoring (create | init | outline | draft)
|
|
@@ -9,6 +9,7 @@ description: >-
|
|
|
9
9
|
web-automation skill. Owns method and evidence; transport stays in kk
|
|
10
10
|
plugins; orchestration is a @gobing-ai/ts-dual-workflow-engine
|
|
11
11
|
transition-flow (see docs/design/web-automation-engine.md).
|
|
12
|
+
requires: [cli:spur, local-fs]
|
|
12
13
|
---
|
|
13
14
|
|
|
14
15
|
# web-automation — discover, enhance, automate with a real browser
|
|
@@ -7,6 +7,7 @@ description: >-
|
|
|
7
7
|
closing) grounded in the source, renders them through the image-gen executor
|
|
8
8
|
with the xhs-card/xhs-knowledge presets, packages a publishable Content, and
|
|
9
9
|
hands off to kk:publish channel xhs. Never publishes directly.
|
|
10
|
+
requires: [cli:kk, local-fs]
|
|
10
11
|
---
|
|
11
12
|
|
|
12
13
|
# xhs-images — source-grounded XHS card series (plan → render → package → handoff)
|
|
@@ -48,10 +48,10 @@ states:
|
|
|
48
48
|
onEnter:
|
|
49
49
|
- kind: shell
|
|
50
50
|
options:
|
|
51
|
-
# Reporting only: a ledger failure must never abort a tick before the lock is even taken.
|
|
52
|
-
onError: continue
|
|
53
51
|
command: >-
|
|
54
52
|
kk ledger sync --workflow kk-collect
|
|
53
|
+
# Reporting only: a ledger failure must never abort a tick before the lock is even taken.
|
|
54
|
+
onError: continue
|
|
55
55
|
- kind: shell
|
|
56
56
|
options:
|
|
57
57
|
# stamp: the pinned var, else the UTC minute (R4). work_dir: `.works/kk-collect/<stamp>` (R4),
|
|
@@ -92,13 +92,13 @@ states:
|
|
|
92
92
|
# revocation warns (captured:false) and only disables Board previews.
|
|
93
93
|
# onError: continue keeps the lock-releasing failure path intact instead of a hard abort.
|
|
94
94
|
options:
|
|
95
|
-
onError: continue
|
|
96
95
|
command: >-
|
|
97
96
|
kk board capture --workflow kk-collect --run "${vars.__runId}"
|
|
98
97
|
--work-dir "${vars.work_dir}" --stamp "${vars.stamp}"
|
|
99
98
|
--definition-digest "${vars.__definitionDigest}"
|
|
100
99
|
--setting "limit=${vars.limit}" --setting "horizon_hours=${vars.horizon_hours}"
|
|
101
100
|
> "${vars.work_dir}/board-capture.json"
|
|
101
|
+
onError: continue
|
|
102
102
|
- kind: shell
|
|
103
103
|
# onError: continue on both ingestion actions, with the artifact guard below as the positive
|
|
104
104
|
# success contract: a state-machine aborts the run on a failed action without taking a
|
|
@@ -221,10 +221,10 @@ nodes:
|
|
|
221
221
|
action:
|
|
222
222
|
kind: shell
|
|
223
223
|
options:
|
|
224
|
-
onError: continue
|
|
225
224
|
command: >-
|
|
226
225
|
kk plugin check wechatmp-pub xhs-pub --timeout 60000
|
|
227
226
|
|| echo "session-preflight: a publish channel's saved session was refused — fix it before this run's publish step with: bun plugins/publishings/<channel>-pub/src/profile-check.ts login (wechatmp or xhs)"
|
|
227
|
+
onError: continue
|
|
228
228
|
|
|
229
229
|
- id: extract
|
|
230
230
|
description: >-
|
|
@@ -509,7 +509,7 @@ nodes:
|
|
|
509
509
|
# 0238 R3: reads 21-plan/<date>_03_plan_plan.json, so it must not start before the plan
|
|
510
510
|
# producers settle. `script-style` stays first in the list: a done dependency in the mix keeps
|
|
511
511
|
# this node runnable when the plan-authoring nodes are disabled (all-skipped deps skip a node).
|
|
512
|
-
dependsOn: [script-style, plan-translate, plan-translate-retry]
|
|
512
|
+
dependsOn: [script-style, plan-translate, plan-translate-retry, article]
|
|
513
513
|
condition:
|
|
514
514
|
kind: shell
|
|
515
515
|
options:
|
|
@@ -620,8 +620,8 @@ nodes:
|
|
|
620
620
|
kk store pool-count "${vars.work_dir}/21-plan/${vars.run_date}_04_quality-control-content_candidates.json" --min 1
|
|
621
621
|
action:
|
|
622
622
|
kind: shell
|
|
623
|
+
onError: continue
|
|
623
624
|
options:
|
|
624
|
-
onError: continue
|
|
625
625
|
command: >-
|
|
626
626
|
OMNIVOICE_SPEED=1.06 kk stage daily-generate "${vars.work_dir}" "${vars.run_date}" "${vars.plugins_path}" "${vars.transcode_mp3}" "${vars.vdriver}" "1" "${vars.episode_max_minutes}" "${vars.episode_min_minutes}"
|
|
627
627
|
|
|
@@ -641,8 +641,8 @@ nodes:
|
|
|
641
641
|
&& ! jq -e '(.metadata.generator == "kk:voxcpm-tts" or .metadata.generator == "kk:gemini-tts") and .metadata.qc.passed == true' "${vars.work_dir}/30-audio/${vars.run_date}_11_generate_content.json"
|
|
642
642
|
action:
|
|
643
643
|
kind: shell
|
|
644
|
+
onError: continue
|
|
644
645
|
options:
|
|
645
|
-
onError: continue
|
|
646
646
|
command: >-
|
|
647
647
|
kk stage daily-generate "${vars.work_dir}" "${vars.run_date}" "${vars.plugins_path}" "${vars.transcode_mp3}" "gemini" "1" "${vars.episode_max_minutes}" "${vars.episode_min_minutes}"
|
|
648
648
|
|
|
@@ -689,7 +689,7 @@ nodes:
|
|
|
689
689
|
options:
|
|
690
690
|
command: >-
|
|
691
691
|
kk stage daily-voice-audit "${vars.work_dir}" "${vars.run_date}" "${vars.plugins_path}"
|
|
692
|
-
|
|
692
|
+
onError: continue
|
|
693
693
|
|
|
694
694
|
- id: duration
|
|
695
695
|
description: "Measured duration gate: under episode_min_minutes the run refuses and closes as no-content (refusal artifact + emptied candidates, exit 0 — 0266); above episode_max_minutes it still fails loud. Duration is authoritative."
|
|
@@ -829,7 +829,9 @@ nodes:
|
|
|
829
829
|
|
|
830
830
|
- id: translate
|
|
831
831
|
description: >-
|
|
832
|
-
Agent translates both scaffolded locale drafts
|
|
832
|
+
Agent translates both scaffolded locale drafts into <run_date>_21_translate_<locale>.md under the
|
|
833
|
+
work dir (2026-11-04: both executor sandboxes refuse writes into the Surfdash checkout, and the
|
|
834
|
+
step still exits 0); translate-refine installs them over the drafts. The two draft paths are read from the
|
|
833
835
|
marker files at their fixed paths (no var projection after the fan-out: concurrent setVars is
|
|
834
836
|
last-writer-wins, design §6), and an empty marker means that locale is absent. The local
|
|
835
837
|
validation node gates final Surfdash publish so its strict all-locale CMS policy is met.
|
|
@@ -837,15 +839,6 @@ nodes:
|
|
|
837
839
|
action:
|
|
838
840
|
kind: agent.run
|
|
839
841
|
options:
|
|
840
|
-
# 20261012 hardening: this is the LAST agent step and a translation failure must not abort
|
|
841
|
-
# the overall report/podcast close, yet the step carried no tolerance and no retry sibling — a stochastic
|
|
842
|
-
# executor failure here aborted the DAG *after* surfdash and podcast had published, so
|
|
843
|
-
# publish-classify, mark-published, run-report and ledger never ran for an otherwise complete
|
|
844
|
-
# day. Tolerating the failure is safe because a scaffold is an unpublished draft: the prompt
|
|
845
|
-
# below is what flips `draft: true` → `draft: false`, so an untranslated locale stays off the
|
|
846
|
-
# site, and `daily-publish-completeness` now reads that flag and reports the locale as failed
|
|
847
|
-
# instead of calling a scaffold `done`.
|
|
848
|
-
onError: continue
|
|
849
842
|
role: scribe
|
|
850
843
|
agent: ${vars.agent}
|
|
851
844
|
timeoutMs: 600000
|
|
@@ -856,11 +849,20 @@ nodes:
|
|
|
856
849
|
Translate the en/ja draft posts of the zh article. Read the two marker files at these fixed paths — each holds one draft path, or is empty when that locale was not scaffolded:
|
|
857
850
|
English: ${vars.work_dir}/31-publish/${vars.run_date}_20_translate-localize_en-post-path.txt
|
|
858
851
|
Japanese: ${vars.work_dir}/31-publish/${vars.run_date}_20_translate-localize_ja-post-path.txt
|
|
859
|
-
For each: if the marker is empty or unreadable, skip that locale. Otherwise
|
|
852
|
+
For each: if the marker is empty or unreadable, skip that locale. Otherwise read the named draft but do NOT edit it (it sits in the Surfdash checkout, outside your writable workspace): write the complete translated file — frontmatter and body — to ${vars.work_dir}/31-publish/${vars.run_date}_21_translate_en.md (English) or ${vars.work_dir}/31-publish/${vars.run_date}_21_translate_ja.md (Japanese); a later stage installs it over the draft. Translate the frontmatter title and the whole markdown body to natural English/Japanese respectively. Keep frontmatter keys, dates, URLs, code, and the assets/ image reference untouched. Set draft: false (the translated post publishes to the site) and remove any canonical: frontmatter line pointing at a different locale's URL.
|
|
860
853
|
Also translate these frontmatter values into the target locale, keeping all other keys untouched: description, seo_title, seo_description, and each key_points item. Each stays one coherent standalone sentence that summarizes the same story as the zh source — never splice fragments from different items or stories into one, and key_points must keep exactly the same number of items as the zh post. The 2026-10-23 run failed this: spliced description/key_points had to be hand-repaired before sync.
|
|
861
854
|
Series names are fixed product identity, never invented or freely translated: the en series name is "Daily AI Stew" (show "Salty Talk"); the ja series name is "デイリーAIシチュー" (show "咸話咸説"). Never emit 毎日AIブレンド, ごった煮, "Daily AI Medley", "hodgepodge", "Daily AI Briefing", or the zh name 每日AI乱炖 in en/ja prose or link text (a URL keeps whatever it contains). Openers: en "Your Daily AI Stew from Robin, on Salty Talk."; ja "咸話咸説のデイリーAIシチュー、Robin がお届けします。" Listen links: en "[listen to Daily AI Stew · <date>](<url>)", ja "[デイリーAIシチュー · <date> を聴く](<url>)". In each key_points item keep the "Label — sentence" shape: the label before " — " stays a short phrase of at most 14 characters (ja) / 28 (en), never truncated with "…". The local translate-validate stage rewrites known retired names deterministically and fails the publish gate on leftovers.
|
|
862
855
|
Keep frontmatter valid YAML: double-quote any value containing ': '. Read the surfdash translator glossary if present at the surfdash checkout root under .agents/skills/surfdash-translator/glossary.md and apply its terminology.
|
|
863
|
-
Do not wait for operator confirmation. Each
|
|
856
|
+
Do not wait for operator confirmation. Each written file must end fully in its target language.
|
|
857
|
+
# 20261012 hardening: this is the LAST agent step and a translation failure must not abort
|
|
858
|
+
# the overall report/podcast close, yet the step carried no tolerance and no retry sibling — a stochastic
|
|
859
|
+
# executor failure here aborted the DAG *after* surfdash and podcast had published, so
|
|
860
|
+
# publish-classify, mark-published, run-report and ledger never ran for an otherwise complete
|
|
861
|
+
# day. Tolerating the failure is safe because a scaffold is an unpublished draft: the prompt
|
|
862
|
+
# above is what flips `draft: true` → `draft: false`, so an untranslated locale stays off the
|
|
863
|
+
# site, and `daily-publish-completeness` now reads that flag and reports the locale as failed
|
|
864
|
+
# instead of calling a scaffold `done`.
|
|
865
|
+
onError: continue
|
|
864
866
|
|
|
865
867
|
# 2026-10-24: the locale translation carried `onError: continue` with NO retry sibling, so a
|
|
866
868
|
# failed executor left the en/ja drafts untranslated and the old sync stage could not distinguish
|
|
@@ -874,15 +876,15 @@ nodes:
|
|
|
874
876
|
options:
|
|
875
877
|
command: >-
|
|
876
878
|
test "$(cat "${vars.work_dir}/31-publish/${vars.run_date}_20_translate-localize_zh-post-path.txt" 2>/dev/null)" != ""
|
|
877
|
-
&& { for L in en ja; do M="${vars.work_dir}/31-publish/${vars.run_date}_20_translate-localize_$L-post-path.txt"; P="$(cat "$M" 2>/dev/null)"; [ -z "$P" ] && continue; grep -q '^draft: *false' "$
|
|
879
|
+
&& { for L in en ja; do M="${vars.work_dir}/31-publish/${vars.run_date}_20_translate-localize_$L-post-path.txt"; P="$(cat "$M" 2>/dev/null)"; [ -z "$P" ] && continue; O="${vars.work_dir}/31-publish/${vars.run_date}_21_translate_$L.md"; grep -q '^draft: *false' "$O" || { echo "untranslated: $L ($O)"; exit 0; }; done; exit 1; }
|
|
878
880
|
action:
|
|
879
881
|
kind: agent.run
|
|
880
882
|
options:
|
|
881
|
-
onError: continue
|
|
882
883
|
role: reviewer
|
|
883
884
|
agent: ${vars.agent_retry}
|
|
884
885
|
timeoutMs: 600000
|
|
885
886
|
input: *translate-input
|
|
887
|
+
onError: continue
|
|
886
888
|
|
|
887
889
|
- id: translate-refine
|
|
888
890
|
description: "Run the Surfdash-owned refine pass over zh/en/ja locally before the locale fingerprint is admitted; no CMS, git, or remote side effect"
|