diff --git a/.gitignore b/.gitignore index 796b25dc3..5e0a9d100 100644 --- a/.gitignore +++ b/.gitignore @@ -87,6 +87,7 @@ !/macrocli/ !/sbox/ !/quietshrink/ +!/mailchimp/ # Step 5: Inside each software dir, ignore everything (including dotfiles) /gimp/* @@ -181,6 +182,8 @@ /sbox/.* /quietshrink/* /quietshrink/.* +/mailchimp/* +/mailchimp/.* # Step 6: ...except agent-harness/ !/gimp/agent-harness/ @@ -235,6 +238,7 @@ !/macrocli/agent-harness/ !/sbox/agent-harness/ !/quietshrink/agent-harness/ +!/mailchimp/agent-harness/ # Exclude non-gedit demo macros from macrocli (local only) /macrocli/agent-harness/cli_anything/macrocli/macro_definitions/demo/flameshot* diff --git a/README.md b/README.md index f1fcc035f..d98b16cd8 100644 --- a/README.md +++ b/README.md @@ -866,7 +866,7 @@ Each application received complete, production-ready CLI interfaces — not demo Email Marketing & Automation cli-anything-mailchimp Mailchimp Marketing API v3.0 -✅ 292 cmds +✅ 303 cmds 📚 Zotero @@ -1169,7 +1169,7 @@ cli-anything/ ├── 🎵 audacity/agent-harness/ # Audacity CLI (161 tests) ├── 🌐 browser/agent-harness/ # Browser CLI (DOMShell MCP, new) ├── 📄 libreoffice/agent-harness/ # LibreOffice CLI (158 tests) -├── 📧 mailchimp/agent-harness/ # Mailchimp Marketing API CLI (292 commands, 27 unit tests) +├── 📧 mailchimp/agent-harness/ # Mailchimp Marketing API CLI (303 commands, 36 unit tests) ├── 📚 zotero/agent-harness/ # Zotero CLI (new, write import support) ├── 📝 mubu/agent-harness/ # Mubu CLI (96 tests) ├── 📹 obs-studio/agent-harness/ # OBS Studio CLI (153 tests) diff --git a/mailchimp/agent-harness/MAILCHIMP.md b/mailchimp/agent-harness/MAILCHIMP.md index 7dab2e186..106c61682 100644 --- a/mailchimp/agent-harness/MAILCHIMP.md +++ b/mailchimp/agent-harness/MAILCHIMP.md @@ -4,7 +4,7 @@ `cli-anything-mailchimp` makes the [Mailchimp Marketing API v3.0](https://mailchimp.com/developer/marketing/docs/fundamentals/) fully agent-native. Every endpoint from the official Swagger spec is exposed as a typed Click command, with JSON output and REPL mode. -**292 commands across 30 resource groups**, covering the full Marketing API surface. +**303 commands across 30 resource groups**, covering the full Marketing API surface. --- @@ -114,7 +114,7 @@ Collection commands expose Mailchimp's native `count` and `offset` query paramet ## Design Decisions -1. **Code generation from spec** — 292 commands are auto-generated from Mailchimp's public Swagger 2.0 spec via `_codegen/generate.py`. Generated files are committed so end-users get fast `--help` without downloading the spec. +1. **Code generation from spec** — 303 commands are auto-generated from Mailchimp's public Swagger 2.0 spec via `_codegen/generate.py`. Generated files are committed so end-users get fast `--help` without downloading the spec. 2. **Env-var-only auth** — per CLI-Anything convention, no config files. `MAILCHIMP_API_KEY` is the single source of truth. diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/core/client.py b/mailchimp/agent-harness/cli_anything/mailchimp/core/client.py index bd996698a..47348ae13 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/core/client.py +++ b/mailchimp/agent-harness/cli_anything/mailchimp/core/client.py @@ -50,7 +50,10 @@ class MailchimpClient: "Export it before use: export MAILCHIMP_API_KEY=-" ) self._key = key - self._dc = _server_prefix(key) + try: + self._dc = _server_prefix(key) + except ValueError as e: + raise MailchimpAuthError(str(e)) from e self._base = _BASE.format(dc=self._dc) self._session = requests.Session() self._session.auth = ("anystring", key) diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/skills/SKILL.md b/mailchimp/agent-harness/cli_anything/mailchimp/skills/SKILL.md index d656c1bd8..c730e9f6c 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/skills/SKILL.md +++ b/mailchimp/agent-harness/cli_anything/mailchimp/skills/SKILL.md @@ -1,6 +1,6 @@ --- name: cli-anything-mailchimp -description: CLI harness for the Mailchimp Marketing API v3.0 — 292 commands across 30 resource groups (lists, campaigns, reports, automations, ecommerce, templates, and more). Supports JSON output and interactive REPL mode. +description: CLI harness for the Mailchimp Marketing API v3.0 — 303 commands across 30 resource groups (lists, campaigns, reports, automations, ecommerce, templates, and more). Supports JSON output and interactive REPL mode. --- # cli-anything-mailchimp diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py b/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py index 4623853be..61a1f0b66 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py +++ b/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py @@ -80,6 +80,21 @@ class TestMailchimpClient(unittest.TestCase): if orig: os.environ["MAILCHIMP_API_KEY"] = orig + def test_get_client_exits_cleanly_on_key_without_suffix(self): + from cli_anything.mailchimp.core.client import get_client + import os + + orig = os.environ.get("MAILCHIMP_API_KEY") + os.environ["MAILCHIMP_API_KEY"] = "invalid" + try: + with self.assertRaises(SystemExit): + get_client() + finally: + if orig is None: + os.environ.pop("MAILCHIMP_API_KEY", None) + else: + os.environ["MAILCHIMP_API_KEY"] = orig + @resp_lib.activate def test_get_success(self): from cli_anything.mailchimp.core.client import MailchimpClient diff --git a/skills/cli-anything-mailchimp/SKILL.md b/skills/cli-anything-mailchimp/SKILL.md index d656c1bd8..c730e9f6c 100644 --- a/skills/cli-anything-mailchimp/SKILL.md +++ b/skills/cli-anything-mailchimp/SKILL.md @@ -1,6 +1,6 @@ --- name: cli-anything-mailchimp -description: CLI harness for the Mailchimp Marketing API v3.0 — 292 commands across 30 resource groups (lists, campaigns, reports, automations, ecommerce, templates, and more). Supports JSON output and interactive REPL mode. +description: CLI harness for the Mailchimp Marketing API v3.0 — 303 commands across 30 resource groups (lists, campaigns, reports, automations, ecommerce, templates, and more). Supports JSON output and interactive REPL mode. --- # cli-anything-mailchimp