用户业务资料库与预设(Assets) 业务资料按产品名分目录 — 直挂业务介绍 、 存配图(含同名说明 )。 写涉及用户自身业务的文章/配图前必须先查这里;新生成的业务介绍内容应引导用户保存到这里 。预设包合并到 。 套件说明 · 本 skill 属 一条龙套件(共 9 个 slug,入口 )。跨 skill 的相对引用依赖同一 目录,建议一并 全套。源码:<https://github.com/aiworkskills/wechat-article-skills 能力披露(Capabilities) 本 skill 管理本地业务资料库与预设包,可选从 域下载 预设包(ZIP 格式)。 - 凭证 :无 - 网络 :可选 下载预设包。 白名单强制 :仅 HTTPS + 子域,非白名单会 直接报错退出 。调试参数 可放宽但不推荐生产使用 - 文件读 :用户指定的本地图片路径或 文件(脚本边界);AI 在引导业务介绍入库时会先 看已有产品名 - 文件写 :仓库内 (业务介绍,AI 用 Write 工具直接落库)、 (图片 + 同名 ,由脚本写)、 (预设文件)、 (下载缓存)、 (解压临时目录);导入 时 仓库根 会按映射表增量写入密钥字段(覆盖现有键前自动备份为 ,stderr 仅打印键名不打印值) - 归档 :解压 扩展名的 ZIP 到 ,按白名单子目录合并到 。 已内置 ZIP…

, '\\\\', '\\n', '\\r')):\n escaped = value.replace('\\\\', '\\\\\\\\').replace('\"', '\\\\\"')\n return f'{key}=\"{escaped}\"'\n return f\"{key}={value}\"\n\n\ndef _write_aws_env_incremental(repo: Path, package_config: dict, dry_run: bool) -> None:\n \"\"\"按 SECRET_FIELD_MAP 把包内 config.yaml 的密钥字段增量写入仓库根 aws.env。\n\n 规则:\n - 包内字段为空字符串/None → 跳过(不会动 aws.env 现有键)\n - 现有 aws.env 无该键 → 新增(追加到末尾)\n - 现有值 == 包内值 → 跳过\n - 现有值 != 包内值 → 标记覆盖;写入前备份 aws.env.bak.{ts}\n - 保留原文件顺序、空行、注释;行内只替换需要覆盖的键\n - stderr 仅打印键名清单,不打印密钥值\n \"\"\"\n aws_env_path = repo / \"aws.env\"\n\n candidates: dict[str, str] = {}\n for cfg_path, env_key in SECRET_FIELD_MAP:\n v = _get_dotted(package_config, cfg_path)\n if isinstance(v, str) and v.strip():\n candidates[env_key] = v\n\n if not candidates:\n _info(\"包内未发现可写入 aws.env 的密钥字段,跳过 aws.env 更新\")\n return\n\n if aws_env_path.is_file():\n existing_content = aws_env_path.read_text(encoding=\"utf-8\")\n existing = _parse_dotenv(existing_content)\n else:\n existing_content = \"\"\n existing = {}\n\n added: list[str] = []\n overwritten: list[str] = []\n unchanged: list[str] = []\n for k, new_v in candidates.items():\n if k not in existing:\n added.append(k)\n elif existing[k] == new_v:\n unchanged.append(k)\n else:\n overwritten.append(k)\n\n if not added and not overwritten:\n _info(f\"aws.env 无需更新(包内 {len(candidates)} 项与现有一致)\")\n return\n\n if dry_run:\n bits = []\n if added:\n bits.append(f\"新增 {len(added)} 项 [{', '.join(added)}]\")\n if overwritten:\n bits.append(f\"覆盖 {len(overwritten)} 项 [{', '.join(overwritten)}]\")\n _info(\"[dry-run] aws.env \" + \",\".join(bits))\n return\n\n if overwritten and aws_env_path.is_file():\n ts = datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n backup = aws_env_path.with_name(f\"aws.env.bak.{ts}\")\n shutil.copy2(aws_env_path, backup)\n _ok(f\"备份: {backup.as_posix()}\")\n\n overwrite_set = set(overwritten)\n lines = existing_content.splitlines() if existing_content else []\n new_lines: list[str] = []\n for line in lines:\n stripped = line.strip()\n if not stripped or stripped.startswith(\"#\") or \"=\" not in stripped:\n new_lines.append(line)\n continue\n key = line.partition(\"=\")[0].strip()\n if key in overwrite_set:\n new_lines.append(_serialize_dotenv_line(key, candidates[key]))\n else:\n new_lines.append(line)\n\n for k in added:\n new_lines.append(_serialize_dotenv_line(k, candidates[k]))\n\n final = \"\\n\".join(new_lines)\n if not final.endswith(\"\\n\"):\n final += \"\\n\"\n aws_env_path.write_text(final, encoding=\"utf-8\")\n\n parts = []\n if added:\n parts.append(f\"新增 {len(added)} 项 [{', '.join(added)}]\")\n if overwritten:\n parts.append(f\"覆盖 {len(overwritten)} 项 [{', '.join(overwritten)}]\")\n if unchanged:\n parts.append(f\"未变 {len(unchanged)} 项 [{', '.join(unchanged)}]\")\n _ok(f\"aws.env 写入:{','.join(parts)}\")\n\n\ndef main() -> None:\n parser = argparse.ArgumentParser(\n description=\"导入 .aws 预设包到 .aws-article/presets;config 仅首次复制,已有则 stdout 输出差异 JSON\"\n )\n parser.add_argument(\"bundle\", help=\"路径或 URL:本地 .aws 文件,或 https://aiworkskills.cn/**/*.aws\")\n parser.add_argument(\"--dry-run\", action=\"store_true\", help=\"只打印将执行的操作,不写盘\")\n parser.add_argument(\"--repo\", default=\".\", help=\"仓库根(默认当前目录)\")\n parser.add_argument(\n \"--allow-any-host\",\n action=\"store_true\",\n help=\"调试用,放宽域名白名单(仍强制 https);不建议生产使用\",\n )\n args = parser.parse_args()\n\n repo = _find_repo_root(Path(args.repo))\n _ensure_aws_article_dir(repo)\n\n raw = args.bundle\n if _is_url(raw):\n _validate_url(raw, args.allow_any_host)\n bundle = _download_bundle(raw, repo)\n else:\n bundle = Path(raw).resolve()\n\n if not bundle.is_file():\n _err(f\"文件不存在: {bundle}\")\n if not zipfile.is_zipfile(bundle):\n _err(f\"不是有效的 ZIP 包(.aws 须为 zip): {bundle}\")\n\n presets_root = repo / \".aws-article\" / \"presets\"\n config_dest = repo / \".aws-article\" / \"config.yaml\"\n staging = _staging_dir(repo)\n\n _reset_staging(staging)\n with zipfile.ZipFile(bundle, \"r\") as zf:\n _safe_extractall(zf, staging)\n\n root = _resolve_package_root(staging)\n _info(f\"解压目录: {staging.as_posix()}\")\n _info(f\"包根解析为: {root}\")\n\n has_any = (root / \"config.yaml\").is_file() or any((root / d).is_dir() for d in PRESET_SUBDIRS)\n if not has_any:\n _err(\"包内未找到 config.yaml 或任一预设目录(closing-blocks / formatting / …),请检查 .aws 内容。\")\n\n presets_root.mkdir(parents=True, exist_ok=True)\n\n total_files = 0\n for name in PRESET_SUBDIRS:\n src = root / name\n if not src.is_dir():\n # 部分平台导出的包把预设放在包根下 presets/\u003c子目录>/\n src = root / \"presets\" / name\n if not src.is_dir():\n continue\n dest = presets_root / name\n if args.dry_run:\n if dest.exists():\n _info(f\"替换预设目录(先清空后合并): {name} -> {dest.as_posix()}\")\n else:\n _info(f\"新增预设目录: {name} -> {dest.as_posix()}\")\n else:\n if dest.exists():\n shutil.rmtree(dest)\n _info(f\"已清空本地预设目录: {dest.as_posix()}\")\n dest.mkdir(parents=True, exist_ok=True)\n n = _merge_preset_dir(src, dest, args.dry_run)\n total_files += n\n if n:\n _ok(f\"{name}: {n} 个文件\")\n\n cfg = root / \"config.yaml\"\n if cfg.is_file():\n new_map = _load_yaml_mapping(cfg, \"包内 config.yaml\")\n if not config_dest.is_file():\n if args.dry_run:\n _info(f\"[dry-run] 将复制包内 config 至 {config_dest.as_posix()}(本地尚无 config.yaml)\")\n else:\n shutil.copy2(cfg, config_dest)\n _ok(f\"已复制包内配置(本地原无): {config_dest}\")\n else:\n old_map = _load_yaml_mapping(config_dest, \"本地 config.yaml\")\n diffs = _config_diff(old_map, new_map)\n _print_config_diff_json(diffs)\n _info(\n f\"config 差异 {len(diffs)} 项已输出至 stdout(JSON);未修改 {config_dest.as_posix()},请智能体根据用户确认再更新\"\n )\n _write_aws_env_incremental(repo, new_map, args.dry_run)\n else:\n _info(\"包内无 config.yaml,跳过全局配置与 aws.env 更新\")\n\n if args.dry_run:\n _ok(f\"dry-run 完成(共将写入约 {total_files} 个预设文件 + 如上 config);解压保留在 {staging.as_posix()}\")\n else:\n _ok(f\"导入完成(预设文件合计 {total_files});解压保留在 {staging.as_posix()} 供核对\")\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":18384,"content_sha256":"5d50213cdd0fc58ad015d9b986d496a8723cf1490b2d5f82a2f1c1148ee7eb28"},{"filename":"scripts/product_image_ingest.py","content":"#!/usr/bin/env python3\n\"\"\"\n将用户上传的图片复制到业务配图库 `.aws-article/products/{产品名}/images/`,\n按中文主文件名保存;重名时自动使用 原名2、原名3… 后缀(扩展名前)。\n\n`products/{产品名}/` 是用户业务的资料库根;本脚本仅写入其 `images/` 子目录\n(业务介绍 .md 直挂产品根,由 AI 用 Write 工具落库,不走本脚本)。\n\n运行前若缺少 `.aws-article`(仅含 `.git` 的仓库根也会识别)则创建;\n产品目录与 `images/` 子目录不存在时一并创建。\n\n与图片同主文件名、扩展名为 `.md` 的说明文件一并生成,固定两行标签(全角冒号):\n **图片路径**:`相对仓库根路径`\n **图片描述**:…\n(可用 --content 传入描述正文;路径由脚本写入。)\n\n用法(在仓库根执行):\n python skills/aws-wechat-article-assets/scripts/product_image_ingest.py path/to/a.png \\\n --product 公众号AI运营助手 --stem 配置首页\n python skills/aws-wechat-article-assets/scripts/product_image_ingest.py a.png \\\n --product 公众号AI运营助手 --stem 配置首页 --content \"aiworkskills.cn 配置平台首页。\"\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport re\nimport shutil\nimport sys\nfrom pathlib import Path\n\nINVALID_NAME_CHARS = re.compile(r'[\\\\/:*?\"\u003c>|\\r\\n\\t]+')\nPRODUCTS_BASE_REL = Path(\".aws-article\") / \"products\"\n\n\ndef _err(msg: str) -> None:\n print(f\"[ERROR] {msg}\", file=sys.stderr)\n sys.exit(1)\n\n\ndef _ok(msg: str) -> None:\n print(f\"[OK] {msg}\")\n\n\ndef _find_repo_root(start: Path) -> Path:\n \"\"\"仓库根 = `--repo` 参数指向的目录(默认当前工作目录)。\n\n 不再向上遍历父目录;若传入路径不是预期的仓库根(需要存在 `.aws-article` 或 `.git`),\n 直接报错退出,避免对非预期目录进行读写。\n \"\"\"\n cur = start.resolve()\n if not cur.is_dir():\n _err(f\"指定的仓库根不是目录:{cur}\")\n if (cur / \".aws-article\").is_dir() or (cur / \".git\").is_dir():\n return cur\n _err(\n f\"{cur} 不像仓库根(未检测到 .aws-article 或 .git 目录)。\\n\"\n \"请传入 --repo 指向真正的仓库根,或在仓库根下运行。\"\n )\n\n\ndef _ensure_aws_article_dir(repo: Path) -> None:\n (repo / \".aws-article\").mkdir(parents=True, exist_ok=True)\n\n\ndef _sanitize_name(name: str, fallback: str) -> str:\n s = (name or \"\").strip()\n s = INVALID_NAME_CHARS.sub(\"\", s)\n s = s.strip(\" .\")\n if not s:\n s = fallback\n return s[:120]\n\n\ndef _unique_dest_paths(dest_dir: Path, stem: str, ext: str) -> tuple[Path, str]:\n \"\"\"返回 (图片路径, 实际主文件名不含扩展名)。重名时 配置首页 → 配置首页2 → …\"\"\"\n ext = ext if ext.startswith(\".\") else f\".{ext}\"\n ext = ext.lower()\n base = _sanitize_name(stem, \"未命名素材\")\n names = [base] + [f\"{base}{i}\" for i in range(2, 10001)]\n for name in names:\n img = dest_dir / f\"{name}{ext}\"\n md = dest_dir / f\"{name}.md\"\n if not img.exists() and not md.exists():\n return img, name\n _err(\"无法分配唯一文件名(重试次数过多)。\")\n\n\ndef main() -> None:\n parser = argparse.ArgumentParser(\n description=\"业务图入库:写到 .aws-article/products/{产品名}/images/,含同名 .md(图片描述)\"\n )\n parser.add_argument(\"source\", help=\"源图片路径\")\n parser.add_argument(\n \"--product\",\n required=True,\n help=\"产品名(业务资料库根目录名,如「公众号AI运营助手」);不存在时自动创建\",\n )\n parser.add_argument(\"--stem\", required=True, help=\"中文主文件名(不含扩展名),由分析内容决定\")\n parser.add_argument(\n \"--content\",\n default=\"\",\n help=\"写入同名 .md 的正文(纯中文图片描述);默认写入一行占位提示,由智能体读图后替换\",\n )\n parser.add_argument(\n \"--repo\",\n default=\".\",\n help=\"仓库根目录(默认当前目录)\",\n )\n args = parser.parse_args()\n\n src = Path(args.source).resolve()\n if not src.is_file():\n _err(f\"源文件不存在: {src}\")\n\n suffix = src.suffix.lower()\n if suffix not in {\".png\", \".jpg\", \".jpeg\", \".webp\", \".gif\"}:\n _err(f\"不支持的图片扩展名: {suffix}(允许 png/jpg/jpeg/webp/gif)\")\n\n product = _sanitize_name(args.product, \"\")\n if not product:\n _err(\"--product 不能为空(清洗后为空字符串)\")\n\n repo = _find_repo_root(Path(args.repo))\n _ensure_aws_article_dir(repo)\n dest_dir = repo / PRODUCTS_BASE_REL / product / \"images\"\n dest_dir.mkdir(parents=True, exist_ok=True)\n\n img_path, final_stem = _unique_dest_paths(dest_dir, args.stem, suffix)\n shutil.copy2(src, img_path)\n\n rel_posix = img_path.relative_to(repo).as_posix()\n md_path = dest_dir / f\"{final_stem}.md\"\n path_line = f\"**图片路径**:`{rel_posix}`\\n\\n\"\n if (args.content or \"\").strip():\n body = path_line + \"**图片描述**:\" + (args.content or \"\").strip() + \"\\n\"\n else:\n body = path_line + \"**图片描述**:请根据图片补全(客观描述画面内容即可)。\\n\"\n md_path.write_text(body, encoding=\"utf-8\")\n\n _ok(f\"图片: {img_path}\")\n _ok(f\"图片描述: {md_path}\")\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":5423,"content_sha256":"9d80b6ecc4e1dc8ca27616a89e2f9dce8c4eba2dbcd7f2656951aaa9b058a18b"},{"filename":"skill.json","content":"{\n \"name\": \"aws-wechat-article-assets\",\n \"version\": \"0.2.0\",\n \"author\": \"aiworkskills\",\n \"description\": \"用户业务资料库(按产品名分目录于 .aws-article/products/{产品名}/,介绍 .md 直挂产品根 + images/ 配图含同名 .md)+ 预设包管理;业务图入库 product_image_ingest.py(--product 必填);导入 .aws 预设包合并 presets,config.yaml 仅首次复制、已有则输出差异。\",\n \"license\": \"MIT\",\n \"homepage\": \"https://github.com/aiworkskills/wechat-article-skills\",\n \"tags\": [\"wechat\", \"公众号\", \"assets\", \"products\", \"business-assets\", \"presets\"],\n \"permissions\": [\"filesystem\", \"shell\"],\n \"entryPoint\": {\n \"type\": \"natural\",\n \"path\": \"SKILL.md\"\n },\n \"dependencies\": []\n}\n","content_type":"application/json; charset=utf-8","language":"json","size":745,"content_sha256":"2445a0e2dabae71feae688d9084f95c53588b44b6cb7152952d8e539478626ca"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"用户业务资料库与预设(Assets)","type":"text"}]},{"type":"paragraph","content":[{"text":"业务资料按产品名分目录","type":"text","marks":[{"type":"strong"}]},{"text":" — ","type":"text"},{"text":".aws-article/products/{产品名}/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 直挂业务介绍 ","type":"text"},{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"images/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 存配图(含同名说明 ","type":"text"},{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":")。","type":"text"},{"text":"写涉及用户自身业务的文章/配图前必须先查这里;新生成的业务介绍内容应引导用户保存到这里","type":"text","marks":[{"type":"strong"}]},{"text":"。预设包合并到 ","type":"text"},{"text":".aws-article/presets/","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"套件说明","type":"text","marks":[{"type":"strong"}]},{"text":" · 本 skill 属 ","type":"text"},{"text":"aws-wechat-article-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" 一条龙套件(共 9 个 slug,入口 ","type":"text"},{"text":"aws-wechat-article-main","type":"text","marks":[{"type":"code_inline"}]},{"text":")。跨 skill 的相对引用依赖同一 ","type":"text"},{"text":"skills/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 目录,建议一并 ","type":"text"},{"text":"clawhub install","type":"text","marks":[{"type":"code_inline"}]},{"text":" 全套。源码:","type":"text"},{"text":"https://github.com/aiworkskills/wechat-article-skills","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/aiworkskills/wechat-article-skills","title":null}}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"能力披露(Capabilities)","type":"text"}]},{"type":"paragraph","content":[{"text":"本 skill 管理本地业务资料库与预设包,可选从 ","type":"text"},{"text":"aiworkskills.cn","type":"text","marks":[{"type":"code_inline"}]},{"text":" 域下载 ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 预设包(ZIP 格式)。","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"凭证","type":"text","marks":[{"type":"strong"}]},{"text":":无","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"网络","type":"text","marks":[{"type":"strong"}]},{"text":":可选 ","type":"text"},{"text":"https://*.aiworkskills.cn/**/*.aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 下载预设包。","type":"text"},{"text":"白名单强制","type":"text","marks":[{"type":"strong"}]},{"text":":仅 HTTPS + ","type":"text"},{"text":"aiworkskills.cn","type":"text","marks":[{"type":"code_inline"}]},{"text":" 子域,非白名单会","type":"text"},{"text":"直接报错退出","type":"text","marks":[{"type":"strong"}]},{"text":"。调试参数 ","type":"text"},{"text":"--allow-any-host","type":"text","marks":[{"type":"code_inline"}]},{"text":" 可放宽但不推荐生产使用","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"文件读","type":"text","marks":[{"type":"strong"}]},{"text":":用户指定的本地图片路径或 ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 文件(脚本边界);AI 在引导业务介绍入库时会先 ","type":"text"},{"text":"ls .aws-article/products/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 看已有产品名","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"文件写","type":"text","marks":[{"type":"strong"}]},{"text":":仓库内 ","type":"text"},{"text":".aws-article/products/{产品名}/*.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(业务介绍,AI 用 Write 工具直接落库)、","type":"text"},{"text":".aws-article/products/{产品名}/images/*","type":"text","marks":[{"type":"code_inline"}]},{"text":"(图片 + 同名 ","type":"text"},{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":",由脚本写)、","type":"text"},{"text":".aws-article/presets/\u003c子目录>/*","type":"text","marks":[{"type":"code_inline"}]},{"text":"(预设文件)、","type":"text"},{"text":".aws-article/downloads/*.aws","type":"text","marks":[{"type":"code_inline"}]},{"text":"(下载缓存)、","type":"text"},{"text":".aws-article/tmp/*","type":"text","marks":[{"type":"code_inline"}]},{"text":"(解压临时目录);导入 ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 时","type":"text"},{"text":"仓库根 ","type":"text","marks":[{"type":"strong"}]},{"text":"aws.env","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 会按映射表增量写入密钥字段(覆盖现有键前自动备份为 ","type":"text"},{"text":"aws.env.bak.{ts}","type":"text","marks":[{"type":"code_inline"}]},{"text":",stderr 仅打印键名不打印值)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"归档","type":"text","marks":[{"type":"strong"}]},{"text":":解压 ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 扩展名的 ZIP 到 ","type":"text"},{"text":".aws-article/tmp/","type":"text","marks":[{"type":"code_inline"}]},{"text":",按白名单子目录合并到 ","type":"text"},{"text":".aws-article/presets/","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"},{"text":"已内置 ZIP slip 防御","type":"text","marks":[{"type":"strong"}]},{"text":":逐项校验 ZIP 成员路径,拒绝含绝对路径、","type":"text"},{"text":"..","type":"text","marks":[{"type":"code_inline"}]},{"text":" 段或解析后指向解压目录外的路径,任一违反立即退出不写入任何文件","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"shell","type":"text","marks":[{"type":"strong"}]},{"text":":仅 ","type":"text"},{"text":"python3 {baseDir}/scripts/product_image_ingest.py","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"import_presets_aws.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"所有写入限制在仓库根下的 ","type":"text"},{"text":".aws-article/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 内。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"配套 skill(informational)","type":"text"}]},{"type":"paragraph","content":[{"text":"本 skill 是 ","type":"text"},{"text":"aws-wechat-article-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" 一条龙公众号套件的","type":"text"},{"text":"业务资料库与预设环节","type":"text","marks":[{"type":"strong"}]},{"text":"(入口 ","type":"text"},{"text":"aws-wechat-article-main","type":"text","marks":[{"type":"code_inline"}]},{"text":")。","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"单独安装可用","type":"text","marks":[{"type":"strong"}]},{"text":":业务图入库 / ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 预设导入两个脚本都不依赖兄弟 skill,只要 ","type":"text"},{"text":".aws-article/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 目录就能工作。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"其他 skill 读取 ","type":"text"},{"text":".aws-article/products/{产品名}/","type":"text","marks":[{"type":"code_inline"}]},{"text":"(业务介绍 + ","type":"text"},{"text":"images/","type":"text","marks":[{"type":"code_inline"}]},{"text":")和 ","type":"text"},{"text":".aws-article/presets/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 里由本 skill 管理的资源,属套件协同;需结合写稿/配图/排版等 skill 使用。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"完整 9 slug 清单见 ","type":"text"},{"text":"源码仓库","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/aiworkskills/wechat-article-skills","title":null}}]},{"text":"。","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"能力","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"说明","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"业务介绍 .md 入库","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"AI 与用户对话产出业务介绍内容时,引导/响应保存到 ","type":"text"},{"text":"products/{产品名}/\u003c文件名>.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(用 Write 工具直接落库,无脚本)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"业务图入库","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"用户业务图 → ","type":"text"},{"text":"products/{产品名}/images/","type":"text","marks":[{"type":"code_inline"}]},{"text":"(脚本 ","type":"text"},{"text":"--product","type":"text","marks":[{"type":"code_inline"}]},{"text":" 必填),供其它 skill 引用","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"预设包 ","type":"text","marks":[{"type":"strong"}]},{"text":".aws","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"ZIP 包(本地文件或 ","type":"text"},{"text":"https://aiworkskills.cn/**/*.aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" URL)→ 合并 ","type":"text"},{"text":"presets/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 子目录;","type":"text"},{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":" 见下","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"〇、设计意图(必读)⛔","type":"text"}]},{"type":"paragraph","content":[{"text":".aws-article/products/{产品名}/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 是","type":"text"},{"text":"用户自家业务","type":"text","marks":[{"type":"strong"}]},{"text":"(卖货 / 卖软件 / 卖服务 / 自媒体 IP 等)的","type":"text"},{"text":"资料库","type":"text","marks":[{"type":"strong"}]},{"text":"——既是 AI 写涉及业务的内容时的","type":"text"},{"text":"底稿来源","type":"text","marks":[{"type":"strong"}]},{"text":",也是 AI 与用户协作产出新介绍时的","type":"text"},{"text":"保存目的地","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"目录约定","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":".aws-article/products/{产品名}/\n├─ 项目介绍.md # 业务介绍 .md 直挂产品根(命名按用户行业,如 服务介绍.md / 品牌介绍.md)\n├─ (其他业务文档.md)\n└─ images/\n ├─ 配置首页.png\n └─ 配置首页.md # 图片说明 .md(同名)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"双向触发","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"方向","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"触发条件","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"行为","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"读","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"当前任务涉及用户自家业务(对外介绍 / 教程 / 案例 / 自家业务安利 / 业务相关配图)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"先 ","type":"text"},{"text":"ls .aws-article/products/","type":"text","marks":[{"type":"code_inline"}]},{"text":",识别本篇相关产品,读该产品根下 ","type":"text"},{"text":"*.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"、查 ","type":"text"},{"text":"images/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 同名 ","type":"text"},{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":",把已有素材作为底稿/配图候选","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"写","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"AI 在会话中刚生成或改写的内容","type":"text"},{"text":"语义属于用户业务介绍","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"走 ","type":"text"},{"text":"一、业务介绍 .md 入库","type":"text","marks":[{"type":"link","attrs":{"href":"#%E4%B8%80%E4%B8%9A%E5%8A%A1%E4%BB%8B%E7%BB%8D-md-%E5%85%A5%E5%BA%93product-intro","title":null}}]},{"text":";用户主动说\"保存为产品介绍\"等也走此流程","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"反例(不要触发)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主题是行业资讯 / 通用教程 / 与用户业务无关 → 不读、不写","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户明确表示内容\"还没定型\" → 不主动引导保存","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"AI 不确定是不是用户自家业务时 → 宁可不主动提,也不要乱塞进 ","type":"text"},{"text":"products/","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"一、业务介绍 .md 入库(Product Intro)","type":"text"}]},{"type":"paragraph","content":[{"text":"无需脚本,AI 用 Write 工具直接落库。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"触发模式 A:AI 主动识别 + 引导","type":"text"}]},{"type":"paragraph","content":[{"text":"AI 在任意会话中刚生成或刚改写了一段内容,","type":"text"},{"text":"其语义明确属于用户自家业务介绍","type":"text","marks":[{"type":"strong"}]},{"text":"(产品 / 服务 / 品牌 / 项目 / 团队 / 业务范围介绍)时,主动提示用户:","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"\"这段是 [产品名] 的业务介绍,要不要保存到产品资料库?我可以存到 ","type":"text"},{"text":".aws-article/products/{产品名}/{文件名}.md","type":"text","marks":[{"type":"code_inline"}]},{"text":",下次写涉及业务的文章时会自动用上。\"","type":"text"}]}]},{"type":"paragraph","content":[{"text":"用户确认 → 走「保存流程」。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"触发模式 B:用户主动指令","type":"text"}]},{"type":"paragraph","content":[{"text":"用户说类似 \"保存为产品介绍 / 业务介绍 / 服务介绍 / 自家介绍 / 入库到产品 / 存到产品资料库\" 时,AI 把当前会话中的目标内容(用户指定段落或最近相关产出)走「保存流程」。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"保存流程","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确认产品名","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"ls .aws-article/products/","type":"text","marks":[{"type":"code_inline"}]},{"text":",已有目录则提示复用;新产品则向用户拿名字","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确认文件名","type":"text","marks":[{"type":"strong"}]},{"text":":默认 ","type":"text"},{"text":"项目介绍.md","type":"text","marks":[{"type":"code_inline"}]},{"text":";可改为 ","type":"text"},{"text":"产品介绍.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"服务介绍.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"品牌介绍.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"业务介绍.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 等贴用户行业的命名","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"创建目录","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"mkdir -p .aws-article/products/{产品名}/images/","type":"text","marks":[{"type":"code_inline"}]},{"text":"(即便暂为空,把骨架建齐)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"写入文件","type":"text","marks":[{"type":"strong"}]},{"text":":用 Write 工具落到 ","type":"text"},{"text":".aws-article/products/{产品名}/{文件名}.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"反馈","type":"text","marks":[{"type":"strong"}]},{"text":":「已存到 ","type":"text"},{"text":"\u003c完整路径>","type":"text","marks":[{"type":"code_inline"}]},{"text":",下次涉及 [产品名] 业务的文章会自动用上」","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"二、业务图入库(Product Images)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"目录","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"路径","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"作用","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":".aws-article/products/{产品名}/images/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"入库图片 + 同名 ","type":"text"},{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(固定:","type":"text"},{"text":"图片路径","type":"text","marks":[{"type":"strong"}]},{"text":" / ","type":"text"},{"text":"图片描述","type":"text","marks":[{"type":"strong"}]},{"text":")","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"工作流","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户上传或给出本地图片路径,并指明","type":"text"},{"text":"所属产品","type":"text","marks":[{"type":"strong"}]},{"text":"(与 ","type":"text"},{"text":"products/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 下某个目录对应;新产品则脚本会自动创建)。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Agent 读图","type":"text","marks":[{"type":"strong"}]},{"text":"(多模态能力在本对话侧):确定","type":"text"},{"text":"中文主文件名","type":"text","marks":[{"type":"strong"}]},{"text":"(如 ","type":"text"},{"text":"配置首页","type":"text","marks":[{"type":"code_inline"}]},{"text":"),并写出","type":"text"},{"text":"客观画面描述","type":"text","marks":[{"type":"strong"}]},{"text":"(供 ","type":"text"},{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 与后续配图检索使用)。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"在","type":"text"},{"text":"仓库根","type":"text","marks":[{"type":"strong"}]},{"text":"执行(","type":"text"},{"text":"推荐","type":"text","marks":[{"type":"strong"}]},{"text":"带上 ","type":"text"},{"text":"--content","type":"text","marks":[{"type":"code_inline"}]},{"text":",与第 2 步描述一致):","type":"text"}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python {baseDir}/scripts/product_image_ingest.py \u003c源图片路径> \\\n --product \"公众号AI运营助手\" --stem \"配置首页\" \\\n --content \"客观中文描述,一两句即可\"","type":"text"}]},{"type":"paragraph","content":[{"text":"--product","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"必填","type":"text","marks":[{"type":"strong"}]},{"text":";产品目录与 ","type":"text"},{"text":"images/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 子目录不存在时","type":"text"},{"text":"自动创建","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]},{"type":"ordered_list","attrs":{"order":4,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"生成 ","type":"text"},{"text":"配置首页.png","type":"text","marks":[{"type":"code_inline"}]},{"text":" + ","type":"text"},{"text":"配置首页.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(格式见下)。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"图片描述与占位 ⛔","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"product_image_ingest.py","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 不会读图","type":"text","marks":[{"type":"strong"}]},{"text":":无视觉/多模态,只负责","type":"text"},{"text":"复制图片","type":"text","marks":[{"type":"strong"}]},{"text":"并","type":"text"},{"text":"按模板写 ","type":"text","marks":[{"type":"strong"}]},{"text":".md","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"未传 ","type":"text","marks":[{"type":"strong"}]},{"text":"--content","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"(或为空)","type":"text","marks":[{"type":"strong"}]},{"text":" 时,「","type":"text"},{"text":"图片描述","type":"text","marks":[{"type":"strong"}]},{"text":"」会写入固定占位句:","type":"text"},{"text":"「请根据图片补全(客观描述画面内容即可)。」","type":"text","marks":[{"type":"strong"}]},{"text":"——这是预期行为,不是脚本故障。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"要直接得到可用描述","type":"text","marks":[{"type":"strong"}]},{"text":":入库命令必须带 ","type":"text"},{"text":"--content \"……\"","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"(由 Agent 读图后填写),或入库后","type":"text"},{"text":"手动/由 Agent 编辑","type":"text","marks":[{"type":"strong"}]},{"text":"同名 ","type":"text"},{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 替换占位段。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":".md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 固定格式","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"**图片路径**:`.aws-article/products/公众号AI运营助手/images/示例.png`\n\n**图片描述**:……","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"脚本 ","type":"text"},{"text":"product_image_ingest.py","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"source","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"--product","type":"text","marks":[{"type":"code_inline"}]},{"text":"(","type":"text"},{"text":"必填","type":"text","marks":[{"type":"strong"}]},{"text":")、","type":"text"},{"text":"--stem","type":"text","marks":[{"type":"code_inline"}]},{"text":"(必填)、","type":"text"},{"text":"--content","type":"text","marks":[{"type":"code_inline"}]},{"text":"(可选,","type":"text"},{"text":"强烈建议由 Agent 读图后传入","type":"text","marks":[{"type":"strong"}]},{"text":")、","type":"text"},{"text":"--repo","type":"text","marks":[{"type":"code_inline"}]},{"text":"(可选)","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"三、预设包导入(","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]},{"type":"paragraph","content":[{"text":"扩展名 ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":",实质为 ","type":"text"},{"text":"ZIP","type":"text","marks":[{"type":"strong"}]},{"text":"。解压后根目录应包含与仓库一致的预设文件夹(可多出其它文件,脚本只处理下列目录):","type":"text"}]},{"type":"paragraph","content":[{"text":"closing-blocks","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"cover-styles","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"formatting","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"image-styles","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"sticker-styles","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"structures","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"title-styles","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"paragraph","content":[{"text":"另可有根级 ","type":"text"},{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"、","type":"text"},{"text":"writing-spec.md","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"输入来源(本地 / URL)","type":"text"}]},{"type":"paragraph","content":[{"text":"bundle","type":"text","marks":[{"type":"code_inline"}]},{"text":" 参数同时接受两种形态:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"本地路径","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"./brand-a.aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 或绝对路径","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"HTTPS URL","type":"text","marks":[{"type":"strong"}]},{"text":":仅限 ","type":"text"},{"text":"aiworkskills.cn","type":"text","marks":[{"type":"code_inline"}]},{"text":" 及其子域,必须 ","type":"text"},{"text":"https://","type":"text","marks":[{"type":"code_inline"}]},{"text":" 开头、路径以 ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 结尾","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"示例:","type":"text"},{"text":"https://aiworkskills.cn/bundles/brand-a.aws","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"下载缓存:","type":"text"},{"text":".aws-article/downloads/\u003c原文件名>","type":"text","marks":[{"type":"code_inline"}]},{"text":"(","type":"text"},{"text":"不在 ","type":"text","marks":[{"type":"strong"}]},{"text":"tmp/","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 内","type":"text","marks":[{"type":"strong"}]},{"text":",不受清空影响,保留供事后核对)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"不在白名单、非 https、或下载内容非 ZIP → ","type":"text"},{"text":"直接报错退出","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"调试放宽:","type":"text"},{"text":"--allow-any-host","type":"text","marks":[{"type":"code_inline"}]},{"text":" 可跳过域名白名单(仍强制 https);不建议生产使用","type":"text"}]}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"合并规则","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"每个上述目录采用**「替换式」语义**(以服务端为准,避免旧文件残留):","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"若","type":"text"},{"text":"包内存在","type":"text","marks":[{"type":"strong"}]},{"text":"该子目录 → ","type":"text"},{"text":"先清空本地 ","type":"text","marks":[{"type":"strong"}]},{"text":".aws-article/presets/\u003c同名>/","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 再写入包内内容","type":"text","marks":[{"type":"strong"}]},{"text":"(旧包里有、新包里删掉的文件不会残留);","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"若","type":"text"},{"text":"包内不存在","type":"text","marks":[{"type":"strong"}]},{"text":"该子目录 → 本地对应子目录","type":"text"},{"text":"保持不动","type":"text","marks":[{"type":"strong"}]},{"text":"(不受本次导入影响)。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"包根优先级:若包根下","type":"text"},{"text":"同时","type":"text","marks":[{"type":"strong"}]},{"text":"存在 ","type":"text"},{"text":"presets/\u003c名>/","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 与 ","type":"text"},{"text":"\u003c名>/","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":",脚本","type":"text"},{"text":"优先合并前者","type":"text","marks":[{"type":"strong"}]},{"text":";若目录内仅有一层多余 ","type":"text"},{"text":"\u003c名>/\u003c名>/","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":",脚本会自动以内层为合并根。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":":若包内存在且本地","type":"text"},{"text":"尚无","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":".aws-article/config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":",则从包内","type":"text"},{"text":"复制","type":"text","marks":[{"type":"strong"}]},{"text":";若本地","type":"text"},{"text":"已有","type":"text","marks":[{"type":"strong"}]},{"text":",则","type":"text"},{"text":"不覆盖","type":"text","marks":[{"type":"strong"}]},{"text":",按包内字段与本地","type":"text"},{"text":"同名键","type":"text","marks":[{"type":"strong"}]},{"text":"递归比对,将差异以 ","type":"text"},{"text":"JSON 数组","type":"text","marks":[{"type":"strong"}]},{"text":" 打印到 ","type":"text"},{"text":"stdout","type":"text","marks":[{"type":"strong"}]},{"text":"(","type":"text"},{"text":"{\"key\":\"点分路径\",\"old\":…,\"new\":…}","type":"text","marks":[{"type":"code_inline"}]},{"text":"),供智能体询问用户后再手改配置;说明日志在 stderr。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"writing-spec.md","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":":若包内存在,","type":"text"},{"text":"始终覆盖","type":"text","marks":[{"type":"strong"}]},{"text":"写入 ","type":"text"},{"text":".aws-article/writing-spec.md","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"(与 ","type":"text"},{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":" 不同,不做差异比对)。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"解压目录:","type":"text"},{"text":".aws-article/tmp/","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"(固定路径;运行前若无 ","type":"text"},{"text":".aws-article","type":"text","marks":[{"type":"code_inline"}]},{"text":" 会创建)。","type":"text"},{"text":"每次执行前","type":"text","marks":[{"type":"strong"}]},{"text":"若 ","type":"text"},{"text":"tmp","type":"text","marks":[{"type":"code_inline"}]},{"text":" 已存在则","type":"text"},{"text":"整目录删除后重建","type":"text","marks":[{"type":"strong"}]},{"text":",再解压本次 ","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":";合并到 ","type":"text"},{"text":"presets/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 后","type":"text"},{"text":"保留","type":"text","marks":[{"type":"strong"}]},{"text":"解压结果便于核对,下次导入会再次清空 ","type":"text"},{"text":"tmp","type":"text","marks":[{"type":"code_inline"}]},{"text":" 并覆盖为新包内容。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"密钥与配置","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 中的密钥字段会被增量写入仓库根 ","type":"text","marks":[{"type":"strong"}]},{"text":"aws.env","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"。包内 ","type":"text"},{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":" 顶层 ","type":"text"},{"text":"wechat_appid","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"wechat_appsecret","type":"text","marks":[{"type":"code_inline"}]},{"text":"、嵌套 ","type":"text"},{"text":"writing_model.api_key","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"image_model.api_key","type":"text","marks":[{"type":"code_inline"}]},{"text":" 在导入时按下表映射写入:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":" 字段","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"aws.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" 键","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"wechat_appid","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"WECHAT_1_APPID","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"wechat_appsecret","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"WECHAT_1_APPSECRET","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"writing_model.api_key","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"WRITING_MODEL_API_KEY","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"image_model.api_key","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"IMAGE_MODEL_API_KEY","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"写入策略:包内字段为空 → 不动 ","type":"text"},{"text":"aws.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" 现有键;","type":"text"},{"text":"aws.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" 无该键 → 追加;已有相同值 → 跳过;已有不同值 → 写入前备份 ","type":"text"},{"text":"aws.env.bak.{ts}","type":"text","marks":[{"type":"code_inline"}]},{"text":" 后覆盖。stderr 仅输出键名清单,不打印密钥值;保留原文件顺序、空行与注释。当前前端导出仅支持单微信账号(固定槽位 1),","type":"text"},{"text":"aws.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中的 ","type":"text"},{"text":"WECHAT_2_*","type":"text","marks":[{"type":"code_inline"}]},{"text":" 等其他键不受导入影响。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":"(运营配置):本地无则首次复制;本地有则差异 JSON 输出到 stdout 不覆盖(与原行为一致),由 Agent 询问用户确认后手改。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"工作流","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"准备 ","type":"text"},{"text":"*.aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 来源:","type":"text"},{"text":"(a)","type":"text","marks":[{"type":"strong"}]},{"text":" 本地文件(上传或已有路径),或 ","type":"text"},{"text":"(b)","type":"text","marks":[{"type":"strong"}]},{"text":" 符合白名单的 ","type":"text"},{"text":"HTTPS URL","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"可先 ","type":"text"},{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 查看将写入的路径(URL 模式下仍会实际下载到 ","type":"text"},{"text":"downloads/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 以便校验 ZIP 结构,但不写入 ","type":"text"},{"text":"presets/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 与 ","type":"text"},{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":")。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"在","type":"text"},{"text":"仓库根","type":"text","marks":[{"type":"strong"}]},{"text":"执行:","type":"text"}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# 本地路径\npython {baseDir}/scripts/import_presets_aws.py path/to/bundle.aws\npython {baseDir}/scripts/import_presets_aws.py path/to/bundle.aws --dry-run\n\n# URL(仅 aiworkskills.cn 及子域)\npython {baseDir}/scripts/import_presets_aws.py https://aiworkskills.cn/bundles/brand-a.aws\npython {baseDir}/scripts/import_presets_aws.py https://aiworkskills.cn/x/y.aws --dry-run","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"脚本 ","type":"text"},{"text":"import_presets_aws.py","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"参数:","type":"text"},{"text":"bundle","type":"text","marks":[{"type":"code_inline"}]},{"text":"(","type":"text"},{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 路径 或 ","type":"text"},{"text":"https://*.aiworkskills.cn","type":"text","marks":[{"type":"code_inline"}]},{"text":" URL)、","type":"text"},{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"--repo","type":"text","marks":[{"type":"code_inline"}]},{"text":"、","type":"text"},{"text":"--allow-any-host","type":"text","marks":[{"type":"code_inline"}]},{"text":"(调试)","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"脚本一览","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"脚本","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"路径","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"product_image_ingest.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"{baseDir}/scripts/product_image_ingest.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"import_presets_aws.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"{baseDir}/scripts/import_presets_aws.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"过程文件","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"产出","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"业务介绍 .md 入库","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":".aws-article/products/{产品名}/{文件名}.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(AI 用 Write 工具落库;目录不存在时同时 mkdir 包括 ","type":"text"},{"text":"images/","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"业务图入库","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":".aws-article/products/{产品名}/images/*.{png,...}","type":"text","marks":[{"type":"code_inline"}]},{"text":" + 同名 ","type":"text"},{"text":"*.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" 导入","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"更新 ","type":"text"},{"text":".aws-article/presets/**","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"},{"text":"config.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":" 首次复制或 stdout 差异 JSON;密钥增量写入仓库根 ","type":"text"},{"text":"aws.env","type":"text","marks":[{"type":"code_inline"}]},{"text":"(覆盖前备份 ","type":"text"},{"text":"aws.env.bak.{ts}","type":"text","marks":[{"type":"code_inline"}]},{"text":");解压缓存在 ","type":"text"},{"text":".aws-article/tmp/","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":".aws","type":"text","marks":[{"type":"code_inline"}]},{"text":" URL 导入","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"下载缓存 ","type":"text"},{"text":".aws-article/downloads/*.aws","type":"text","marks":[{"type":"code_inline"}]},{"text":";其余同本地导入","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"url":"https://github.com/aiworkskills/wechat-article-skills","date":"2026-06-05","name":"aws-wechat-article-assets","author":"@skillopedia","source":{"stars":53,"repo_name":"wechat-article-skills","origin_url":"https://github.com/aiworkskills/wechat-article-skills/blob/HEAD/skills/aws-wechat-article-assets/SKILL.md","repo_owner":"aiworkskills","body_sha256":"961f660f50476b3aadd9312bced9c636eec1cbff3f736645b5e9adfb0cd741d1","cluster_key":"ed2d9ce89e0649c5e8b22b156140d8781735f7e9695a3347daa09bf9b9cda50a","clean_bundle":{"format":"clean-skill-bundle-v1","source":"aiworkskills/wechat-article-skills/skills/aws-wechat-article-assets/SKILL.md","attachments":[{"id":"73060c0a-17ea-5721-86ae-f29c9b5a57c5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/73060c0a-17ea-5721-86ae-f29c9b5a57c5/attachment.py","path":"scripts/import_presets_aws.py","size":18384,"sha256":"5d50213cdd0fc58ad015d9b986d496a8723cf1490b2d5f82a2f1c1148ee7eb28","contentType":"text/x-python; charset=utf-8"},{"id":"3517f717-a307-57e0-a704-35b2c2158d5e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3517f717-a307-57e0-a704-35b2c2158d5e/attachment.py","path":"scripts/product_image_ingest.py","size":5423,"sha256":"9d80b6ecc4e1dc8ca27616a89e2f9dce8c4eba2dbcd7f2656951aaa9b058a18b","contentType":"text/x-python; charset=utf-8"},{"id":"e348bbaa-8a7c-5e07-8085-72df835a1ba1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e348bbaa-8a7c-5e07-8085-72df835a1ba1/attachment.json","path":"skill.json","size":745,"sha256":"2445a0e2dabae71feae688d9084f95c53588b44b6cb7152952d8e539478626ca","contentType":"application/json; charset=utf-8"}],"bundle_sha256":"aa72769b4ec751ff02feace4b75c8a084141dee03bfcdc07982409629925d6e0","attachment_count":3,"text_attachments":3,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/aws-wechat-article-assets/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"devops-infrastructure","category_label":"DevOps"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"devops-infrastructure","homepage":"https://aiworkskills.cn","metadata":{"openclaw":{"requires":{"env":[],"bins":["python3"]}}},"import_tag":"clean-skills-v1","description":"公众号素材|业务资料库|预设包|.aws 预设包|主题包|品牌包|aiworkskills.cn — 用户业务资料库与预设包管理:业务资料按产品名组织在 `.aws-article/products/{产品名}/`(介绍 .md 直挂产品根 + 配图归 `images/` 子目录含同名说明 .md),AI 与用户对话产出业务介绍内容时引导用户保存;图片入库走 `product_image_ingest.py --product \u003c产品名> --stem \u003c中文名>`。导入 .aws ZIP 预设包(本地文件或 `https://aiworkskills.cn/**/*.aws` URL)合并主题/配色/字体配置到 `.aws-article/presets/`;`config.yaml` 仅本地不存在时从包内复制,已存在则 stdout 输出差异 JSON 不覆盖。面向内容运营、品牌团队、设计支持岗。触发词:「素材库入库」「stock images」「上传图到素材库」「.aws」「预设包」「导入预设」「主题包」「aiworkskills.cn 链接」「.aws 下载地址」。"}},"renderedAt":1782981047863}

用户业务资料库与预设(Assets) 业务资料按产品名分目录 — 直挂业务介绍 、 存配图(含同名说明 )。 写涉及用户自身业务的文章/配图前必须先查这里;新生成的业务介绍内容应引导用户保存到这里 。预设包合并到 。 套件说明 · 本 skill 属 一条龙套件(共 9 个 slug,入口 )。跨 skill 的相对引用依赖同一 目录,建议一并 全套。源码:<https://github.com/aiworkskills/wechat-article-skills 能力披露(Capabilities) 本 skill 管理本地业务资料库与预设包,可选从 域下载 预设包(ZIP 格式)。 - 凭证 :无 - 网络 :可选 下载预设包。 白名单强制 :仅 HTTPS + 子域,非白名单会 直接报错退出 。调试参数 可放宽但不推荐生产使用 - 文件读 :用户指定的本地图片路径或 文件(脚本边界);AI 在引导业务介绍入库时会先 看已有产品名 - 文件写 :仓库内 (业务介绍,AI 用 Write 工具直接落库)、 (图片 + 同名 ,由脚本写)、 (预设文件)、 (下载缓存)、 (解压临时目录);导入 时 仓库根 会按映射表增量写入密钥字段(覆盖现有键前自动备份为 ,stderr 仅打印键名不打印值) - 归档 :解压 扩展名的 ZIP 到 ,按白名单子目录合并到 。 已内置 ZIP…