diff --git a/README.md b/README.md index 16b2ec6..4f83240 100644 --- a/README.md +++ b/README.md @@ -426,7 +426,7 @@ codex plugin add yichen-grok-consult@yichen-skills ### B) Enable `yichen-x-article-draft-uploader` -1. Install the pinned `x-article-draft-uploader-v1.0.0` tag by following the fail-safe command in the Skill README +1. Install the pinned `x-article-draft-uploader-v1.0.1` tag by following the fail-safe command in the Skill README 2. Install the exact Python dependencies from the Skill's `requirements.txt`, then run `python3 -m playwright install chromium` 3. Make sure Chrome is already logged in to X; Ailu users can import cookies from Chrome, paste JSON, or choose a JSON file in Settings 4. Say "upload this Markdown article to X Articles draft" or run the script directly diff --git a/README.zh.md b/README.zh.md index 2f99f49..1202953 100644 --- a/README.zh.md +++ b/README.zh.md @@ -425,7 +425,7 @@ codex plugin add yichen-grok-consult@yichen-skills ### B)启用 `yichen-x-article-draft-uploader` -1. 按 Skill README 的防覆盖命令安装固定 tag `x-article-draft-uploader-v1.0.0` +1. 按 Skill README 的防覆盖命令安装固定 tag `x-article-draft-uploader-v1.0.1` 2. 从 Skill 的 `requirements.txt` 安装精确 Python 依赖,再执行 `python3 -m playwright install chromium` 3. 确认 Chrome 已经登录 X;Ailu 用户可在设置页选择从 Chrome 导入、粘贴 JSON 或选择 JSON 4. 直接说“把这篇 Markdown 上传到 X Articles 草稿”,或手动运行脚本 diff --git a/yichen-x-article-draft-uploader/LICENSE b/yichen-x-article-draft-uploader/LICENSE new file mode 100644 index 0000000..46ca533 --- /dev/null +++ b/yichen-x-article-draft-uploader/LICENSE @@ -0,0 +1,43 @@ +X Article Draft Uploader Personal Learning and Non-Commercial Use License + +Copyright (c) 2026 Yichen + +This Skill is source-available for personal learning, research, and +non-commercial personal workflow use only. + +Permission is granted to view, copy, study, and modify this Skill for personal +non-commercial purposes, subject to all of the following conditions: + +1. Commercial use requires prior explicit written authorization from the + copyright holder. Commercial use includes client delivery, paid products or + services, internal company deployment, marketplace packaging, course + bundling, agency work, and any revenue-generating or business-operational + purpose. + + To request commercial authorization, contact the copyright holder on + WeChat at `yichen365ai` and include `Commercial Authorization` in the + verification message. A request or inquiry does not grant permission; + commercial use is allowed only after explicit written authorization is + received. + +2. You may not publicly redistribute, mirror, package, sublicense, or market + this Skill or a derivative as a competing Skill, marketplace item, SaaS + component, course asset, agency deliverable, or company toolkit without + prior written authorization. + +3. Preserve this license and the applicable third-party notices in any + permitted private copy or modification. + +4. Third-party portions remain governed by their original licenses. Nothing in + this license removes rights granted directly by those third-party licenses. + See the repository root `THIRD_PARTY_NOTICES.md` for details. + +5. This license applies only to the `x-article-draft-uploader` Skill. It does + not alter the GNU AGPL-3.0-or-later license of the separately distributed + Ailu project. + +THE SKILL IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, SECURITY, OR FITNESS FOR +A PARTICULAR WORKFLOW. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, +DAMAGE, LOSS, OR OTHER LIABILITY ARISING FROM USE OF THIS SKILL. diff --git a/yichen-x-article-draft-uploader/README.md b/yichen-x-article-draft-uploader/README.md index db51189..752e0ac 100644 --- a/yichen-x-article-draft-uploader/README.md +++ b/yichen-x-article-draft-uploader/README.md @@ -27,8 +27,8 @@ ## 版本与兼容性 -- 当前固定版本:`1.0.0` -- Git tag:`x-article-draft-uploader-v1.0.0` +- 当前固定版本:`1.0.1` +- Git tag:`x-article-draft-uploader-v1.0.1` - 已按 Ailu `0.2.0` 的 `x-article-persistence-v1` 结果契约核对 - 固定版本只创建 X Article 草稿,不包含最终发布动作 @@ -48,7 +48,7 @@ Ailu 能从 `~/.agents/skills/x-article-draft-uploader/` 或 exit 1 fi npx --yes skills@1.5.22 add \ - "https://github.com/mcncarl/yichen-skills/tree/x-article-draft-uploader-v1.0.0/yichen-x-article-draft-uploader" \ + "https://github.com/mcncarl/yichen-skills/tree/x-article-draft-uploader-v1.0.1/yichen-x-article-draft-uploader" \ --skill x-article-draft-uploader --global --agent codex --copy --yes ) ``` @@ -228,6 +228,7 @@ X 会弹出媒体编辑层。必须点击 `应用`,否则编辑器会被 mask x-article-draft-uploader/ ├── SKILL.md ├── README.md +├── LICENSE ├── VERSION ├── requirements.txt ├── agents/ @@ -246,6 +247,14 @@ x-article-draft-uploader/ ## License -Personal Learning and Non-Commercial Use License. See the repository root `LICENSE`. +本 Skill 仅允许个人学习、研究和非商业个人工作流使用。客户交付、付费产品或服务、 +公司内部部署、市场打包、课程打包及其他商业用途,必须事先取得作者明确的书面授权。 + +如需申请商业授权,请添加微信 `yichen365ai`,并在验证信息中备注 `商业授权`。 +仅发送好友申请或咨询不代表已经获得授权;收到明确书面授权后方可商用。 + +完整条款见本目录的 [`LICENSE`](LICENSE)。该限制只适用于 +`x-article-draft-uploader` Skill,不改变 Ailu 核心的 AGPL-3.0-or-later 许可; +第三方材料继续适用各自许可证和仓库根目录的 `THIRD_PARTY_NOTICES.md`。 部分 Markdown 解析流程参考并迁移自 `wshuyi/x-article-publisher-skill`,详见仓库根目录 `THIRD_PARTY_NOTICES.md`。 diff --git a/yichen-x-article-draft-uploader/SKILL.md b/yichen-x-article-draft-uploader/SKILL.md index bb0731b..e2c401c 100644 --- a/yichen-x-article-draft-uploader/SKILL.md +++ b/yichen-x-article-draft-uploader/SKILL.md @@ -5,6 +5,14 @@ description: 将 Obsidian 或本地 Markdown 文章上传到 X/Twitter Articles # X Article Draft Uploader +## 许可与商业授权 + +本 Skill 仅允许个人学习、研究和非商业个人工作流使用。客户交付、付费产品或服务、 +公司内部部署、市场打包、课程打包及其他商业用途,必须事先取得作者明确的书面授权。 +申请商业授权请添加微信 `yichen365ai`,并在验证信息中备注 `商业授权`;收到明确书面 +授权前不得商用。完整条款见同目录 [`LICENSE`](LICENSE)。该限制只适用于本 Skill, +不改变 Ailu 核心的 AGPL-3.0-or-later 许可;第三方材料继续适用各自许可证。 + ## 核心原则 只创建草稿。除非用户明确确认可以公开发布,否则不要点击 X 最终的 `发布` 按钮。 diff --git a/yichen-x-article-draft-uploader/VERSION b/yichen-x-article-draft-uploader/VERSION index 3eefcb9..7dea76e 100644 --- a/yichen-x-article-draft-uploader/VERSION +++ b/yichen-x-article-draft-uploader/VERSION @@ -1 +1 @@ -1.0.0 +1.0.1 diff --git a/yichen-x-article-draft-uploader/tests/test_local_contracts.py b/yichen-x-article-draft-uploader/tests/test_local_contracts.py index 1a9bfdf..b5fd68c 100644 --- a/yichen-x-article-draft-uploader/tests/test_local_contracts.py +++ b/yichen-x-article-draft-uploader/tests/test_local_contracts.py @@ -59,11 +59,18 @@ def test_release_is_versioned_and_docs_pin_the_tag(self): version = (SKILL_ROOT / "VERSION").read_text(encoding="utf-8").strip() readme = (SKILL_ROOT / "README.md").read_text(encoding="utf-8") - self.assertEqual(version, "1.0.0") - self.assertIn("x-article-draft-uploader-v1.0.0", readme) + self.assertEqual(version, "1.0.1") + self.assertIn("x-article-draft-uploader-v1.0.1", readme) self.assertIn("skills@1.5.22", readme) self.assertNotIn("tree/main/yichen-x-article-draft-uploader", readme) + license_text = (SKILL_ROOT / "LICENSE").read_text(encoding="utf-8") + instructions = (SKILL_ROOT / "SKILL.md").read_text(encoding="utf-8") + self.assertIn("Commercial use requires prior explicit written authorization", license_text) + self.assertIn("yichen365ai", license_text) + self.assertIn("商业用途,必须事先取得作者明确的书面授权", instructions) + self.assertIn("不改变 Ailu 核心的 AGPL-3.0-or-later 许可", instructions) + requirements = (SKILL_ROOT / "requirements.txt").read_text(encoding="utf-8").splitlines() self.assertEqual(requirements, ["playwright==1.58.0", "pycryptodome==3.23.0"])