跳到主要内容
知仓学习社ZHICANG

aws-wechat-article-assets

公众号素材|业务资料库|预设包|.aws 预设包|主题包|品牌包|aiworkskills.cn — 用户业务资料库与预设包管理:业务资料按产品名组织在 `.aws-article/products/{产品名}/`(介绍 .md 直挂产品根 + 配图归 `images/` 子目录含同名说明 .m…

读凭据联网写文件读文件严重 58 · 高危 0aiworkskills/wechat-article-skills

它会碰到什么

扫了多少5 个文本文件,29 KB
它会碰到什么读凭据联网写文件读文件
命中总数71 处
命中统计严重 58 · 高 0 · 中 11 · 低 2
逐条看命中(30 条严重或高危)
  • 严重 references/branches.md:3cred-paths
    SKILL.md 只写主路径:读业务资料 → 入库 → 导入 `.aws`。本文件是**主路径之外才要读的东西**,主路径在对应位置用一行指过来。
  • 严重 references/branches.md:37cred-paths
    **图片路径**:`.aws-article/products/公众号AI运营助手/images/示例.png`
  • 严重 references/branches.md:44cred-paths
    ## 三、`.aws` 的合并语义
  • 严重 references/branches.md:55cred-paths
    | 路径 | 谁在用 | 为什么不由 `.aws` 管 |
  • 严重 references/branches.md:64cred-paths
    - 本地**尚无** `.aws-article/config.yaml` → 从包内**复制**。
  • 严重 references/branches.md:69cred-paths
    与 `config.yaml` 不同,包内有就直接写入 `.aws-article/writing-spec.md`,不做差异比对。
  • 严重 references/branches.md:73cred-paths
    固定 `.aws-article/tmp/`。**每次执行前**若已存在则整目录删除后重建;合并完成后**保留**解压结果便于核对,下次导入再次清空。
  • 严重 references/branches.md:109cred-paths
    - 路径以 `.aws` 结尾
  • 严重 references/branches.md:114cred-paths
    下载缓存落在 `.aws-article/downloads/<原文件名>`(**不在 `tmp/` 内**,不受清空影响,保留供事后核对)。
  • 严重 scripts/import_presets_aws.py:3cred-paths
    导入 `.aws` 预设包(ZIP 格式):解压到 `.aws-article/tmp/`,合并到 `.aws-article/presets/`;
  • 严重 scripts/import_presets_aws.py:3cred-paths
    导入 `.aws` 预设包(ZIP 格式):解压到 `.aws-article/tmp/`,合并到 `.aws-article/presets/`;
  • 严重 scripts/import_presets_aws.py:3cred-paths
    导入 `.aws` 预设包(ZIP 格式):解压到 `.aws-article/tmp/`,合并到 `.aws-article/presets/`;
  • 严重 scripts/import_presets_aws.py:5cred-paths
    - 若本地尚无 `.aws-article/config.yaml`,则从包内复制一份;
  • 严重 scripts/import_presets_aws.py:18cred-paths
    运行前若缺少 `.aws-article` 则创建;若缺少 `.aws-article/tmp` 则创建。每次执行前若 `tmp` 已存在则整目录删除再解压;合并完成后保留解压内容供核对,下次执行会再次清空 `tmp` 再解压。
  • 严重 scripts/import_presets_aws.py:18cred-paths
    运行前若缺少 `.aws-article` 则创建;若缺少 `.aws-article/tmp` 则创建。每次执行前若 `tmp` 已存在则整目录删除再解压;合并完成后保留解压内容供核对,下次执行会再次清空 `tmp` 再解压。
  • 严重 scripts/import_presets_aws.py:21cred-paths
    - 对每个预设子目录,若**包内存在**该子目录,则**先清空本地 `.aws-article/presets/<同名>/`** 再写入包内内容——确保新包移除的旧文件不会残留;
  • 严重 scripts/import_presets_aws.py:25cred-paths
    - 本地 `.aws` 文件路径;
  • 严重 scripts/import_presets_aws.py:26cred-paths
    - 白名单 HTTPS URL:`https://` 开头,host 为 `aiworkskills.cn` 或其子域,路径以 `.aws` 结尾。
  • 严重 scripts/import_presets_aws.py:27cred-paths
    下载缓存到 `.aws-article/downloads/<原文件名>`(不受 tmp 清空影响,供事后核对)。
  • 严重 scripts/import_presets_aws.py:30cred-paths
    python skills/aws-wechat-article-assets/scripts/import_presets_aws.py path/to/bundle.aws
  • 严重 scripts/import_presets_aws.py:31cred-paths
    python skills/aws-wechat-article-assets/scripts/import_presets_aws.py path/to/bundle.aws --dry-run
  • 严重 scripts/import_presets_aws.py:32cred-paths
    python skills/aws-wechat-article-assets/scripts/import_presets_aws.py https://aiworkskills.cn/bundles/brand-a.aws
  • 严重 scripts/import_presets_aws.py:92cred-paths
    if not Path(p.path).name.endswith(".aws"):
  • 严重 scripts/import_presets_aws.py:93cred-paths
    _err("URL 路径须以 .aws 结尾")
  • 严重 scripts/import_presets_aws.py:97cred-paths
    downloads = repo / ".aws-article" / "downloads"
  • 严重 scripts/import_presets_aws.py:99cred-paths
    fname = Path(urlparse(url).path).name or "bundle.aws"
  • 严重 scripts/import_presets_aws.py:140cred-paths
    if (cur / ".aws-article").is_dir() or (cur / ".git").is_dir():
  • 严重 scripts/import_presets_aws.py:143cred-paths
    f"{cur} 不像仓库根(未检测到 .aws-article 或 .git 目录)。\n"
  • 严重 scripts/import_presets_aws.py:149cred-paths
    (repo / ".aws-article").mkdir(parents=True, exist_ok=True)
  • 严重 scripts/product_image_ingest.py:3cred-paths
    将用户上传的图片复制到业务配图库 `.aws-article/products/{产品名}/images/`,

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

用户业务资料库与预设(Assets)

业务资料按产品名分目录.aws-article/products/{产品名}/ 直挂业务介绍 .mdimages/ 存配图(含同名说明 .md)。写涉及用户自身业务的文章/配图前必须先查这里;新生成的业务介绍内容应引导用户保存到这里。预设包合并到 .aws-article/presets/

> 套件说明 · 本 skill 属 aws-wechat-article-* 一条龙套件(共 9 个 slug,入口 aws-wechat-article-main)。跨 skill 的相对引用依赖同一 skills/ 目录,建议一并 clawhub install 全套。源码:<https://github.com/aiworkskills/wechat-article-skills>

能力披露(Capabilities)

本 skill 管理本地业务资料库与预设包,可选从 aiworkskills.cn 域下载 .aws 预设包(ZIP)。

  • 凭证:无(但导入 .aws 会把包内密钥写进仓库根 aws.env,见下)
  • 网络:可选 https://.aiworkskills.cn/*/*.aws 下载预设包。白名单强制:仅 HTTPS + aiworkskills.cn 及其子域,非白名单直接报错退出--allow-any-host 可放宽,调试用
  • 文件读:用户指定的本地图片或 .aws 文件;引导入库前会 ls .aws-article/products/ 看已有产品名
  • 文件写
  • .aws-article/products/{产品名}/*.md(业务介绍,AI 用 Write 工具直接落库)
  • .aws-article/products/{产品名}/images/*(图片 + 同名 .md,由脚本写)
  • .aws-article/presets/<白名单子目录>/.aws-article/downloads/.aws.aws-article/tmp/*
  • 仓库根 aws.env:导入 .aws 时按映射表增量写入密钥(覆盖现有键前自动备份 aws.env.bak.{ts},stderr 只打印键名不打印值)
  • 归档安全:解压 .aws(ZIP)到 .aws-article/tmp/已内置 ZIP slip 防御——逐项校验成员路径,拒绝绝对路径、.. 段、或解析后指向解压目录外的路径,任一违反立即退出且不写入任何文件
  • shell:仅 {python} {baseDir}/scripts/ 下的 product_image_ingest.pyimport_presets_aws.py

aws.env 外,所有写入都限制在仓库根的 .aws-article/ 内。

单独安装可用:两个脚本都不依赖兄弟 skill,只要有 .aws-article/ 目录就能工作。

三件事

| 能力 | 说明 |

|------|------|

| 业务介绍 .md 入库 | 对话中产出的业务介绍 → products/{产品名}/<文件名>.md(Write 工具直接落库,无脚本) |

| 业务图入库 | 用户业务图 → products/{产品名}/images/ + 同名说明 .md(脚本,--product 必填) |

| 预设包 .aws | ZIP(本地文件或 https://aiworkskills.cn/**/*.aws)→ 合并 presets/ 白名单子目录 |

设计意图(必读)⛔

.aws-article/products/{产品名}/用户自家业务(卖货 / 卖软件 / 卖服务 / 自媒体 IP)的资料库——既是 AI 写业务相关内容时的底稿来源,也是 AI 与用户协作产出新介绍时的保存目的地

.aws-article/products/{产品名}/
├─ 项目介绍.md                # 业务介绍 .md 直挂产品根(命名按用户行业:服务介绍.md / 品牌介绍.md…)
├─ (其他业务文档.md)
└─ images/
   ├─ 配置首页.png
   └─ 配置首页.md             # 图片说明 .md(同名)

双向触发

| 方向 | 触发条件 | 行为 |

|------|---------|------|

| | 当前任务涉及用户自家业务(对外介绍 / 教程 / 案例 / 自家安利 / 业务配图) | 先 ls .aws-article/products/,识别相关产品,读它根下的 *.md、查 images/ 同名 .md,把已有素材当底稿与配图候选 |

| | AI 刚生成或改写的内容语义属于用户业务介绍 | 走下面「业务介绍 .md 入库」;用户说「保存为产品介绍」等也走这条 |

什么时候不要触发见 [branches.md「一」](references/branches.md)。

一、业务介绍 .md 入库

无需脚本,AI 用 Write 工具直接落库。两种触发:

  • AI 主动识别:刚生成/改写的内容明确属于用户自家业务介绍(产品 / 服务 / 品牌 / 项目 / 团队 / 业务范围)时提示用户:

> 「这段是 [产品名] 的业务介绍,要不要保存到产品资料库?我可以存到 .aws-article/products/{产品名}/{文件名}.md,下次写涉及业务的文章时会自动用上。」

  • 用户主动指令:「保存为产品介绍 / 业务介绍 / 服务介绍 / 入库到产品 / 存到产品资料库」等。

保存流程

  1. 确认产品名ls .aws-article/products/,已有目录提示复用;新产品向用户拿名字。
  2. 确认文件名:默认 项目介绍.md;可改成贴用户行业的 产品介绍.md / 服务介绍.md / 品牌介绍.md
  3. 建目录mkdir -p .aws-article/products/{产品名}/images/(即便暂时为空也把骨架建齐)。
  4. 写入:Write 工具落到 .aws-article/products/{产品名}/{文件名}.md
  5. 反馈:「已存到 <完整路径>,下次涉及 [产品名] 业务的文章会自动用上」。

二、业务图入库

脚本不会读图——读图定文件名、写画面描述是 Agent 的活,入库命令要带 --content

{python} {baseDir}/scripts/product_image_ingest.py <源图片路径> \
  --product "公众号AI运营助手" --stem "配置首页" \
  --content "客观中文描述,一两句即可"

--product / --stem 必填,产品目录与 images/ 不存在时自动创建。产出 配置首页.png + 配置首页.md

不传 --content 会写占位句(预期行为,不是故障)、.md 的固定格式,见 [branches.md「二」](references/branches.md)。

三、预设包导入(.aws

扩展名 .aws,实质是 ZIP。包根应含与仓库一致的预设文件夹(可以多出别的文件,脚本只处理白名单):

closing-blockscover-stylesformattingimage-stylessticker-stylesstructurestitle-styles

另可有根级 config.yamlwriting-spec.md不在白名单的目录会被跳过并打日志——components/review-rules.yaml 就不由 .aws 管理,原因见 [branches.md「三」](references/branches.md)。

工作流

  1. 准备来源:本地 .aws 文件,或符合白名单的 HTTPS URL。
  2. --dry-run 看将写入哪些路径。
  3. 仓库根执行:
# 本地路径
{python} {baseDir}/scripts/import_presets_aws.py path/to/bundle.aws
{python} {baseDir}/scripts/import_presets_aws.py path/to/bundle.aws --dry-run

# URL(仅 aiworkskills.cn 及子域)
{python} {baseDir}/scripts/import_presets_aws.py https://aiworkskills.cn/bundles/brand-a.aws

三条要先知道的语义 ⛔:

  • 预设目录是替换式:包内有该子目录 → 先清空本地同名目录再写;包内没有 → 本地保持不动。
  • config.yaml 不覆盖:本地已有时只把差异以 JSON 打到 stdout,须问过用户再手改。本地没有才复制。
  • 密钥会进 aws.env:包内 wechat_appid / wechat_appsecret / writing_model.api_key / image_model.api_key 按映射增量写入,覆盖前备份 aws.env.bak.{ts}

完整规则(映射表、写入策略、包根优先级、URL 白名单、tmp 语义)见 [branches.md「三~五」](references/branches.md)。

脚本

| 脚本 | 参数 |

|------|------|

| product_image_ingest.py | source--product(必填)、--stem(必填)、--content--repo |

| import_presets_aws.py | bundle(路径或白名单 URL)、--dry-run--repo--allow-any-host(调试) |

分支与细则

不该入库的情况、业务图入库两步、.aws 合并语义、密钥映射、URL 白名单 → [references/branches.md](references/branches.md)。

过程文件

| 场景 | 产出 |

|------|------|

| 业务介绍 .md 入库 | .aws-article/products/{产品名}/{文件名}.md(同时 mkdir images/) |

| 业务图入库 | .aws-article/products/{产品名}/images/.{png,…} + 同名 .md |

| .aws 导入 | .aws-article/presets/** 更新;config.yaml 首次复制或 stdout 差异 JSON;密钥增量写入 aws.env(覆盖前备份);解压缓存在 .aws-article/tmp/ |

| .aws URL 导入 | 下载缓存 .aws-article/downloads/*.aws;其余同本地导入 |

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。