From 743780726daff5970b73efe221d2f5d2aa9bc7ed Mon Sep 17 00:00:00 2001 From: ScriptedAlchemy Date: Mon, 7 Sep 2026 04:20:53 +0000 Subject: [PATCH 1/7] refactor(audiobook-curator): ship the CLI as .cli.ts projections of the curator tools (#725) --- .../725-audiobook-curator-cli-projections.md | 5 + examples/audiobook-curator/README.md | 103 ++++--- .../audiobook-curator/agent-bundle.config.ts | 9 +- examples/audiobook-curator/src/cli-command.ts | 8 +- .../src/cli/acoustic-identify.ts | 28 -- .../src/cli/acoustic-verify.ts | 29 -- .../src/cli/apply-chapters.ts | 23 -- .../src/cli/apply-metadata.ts | 29 -- .../src/cli/audible-cache.ts | 32 -- .../src/cli/audible-search.tsx | 51 ---- .../src/cli/audible-select.ts | 23 -- examples/audiobook-curator/src/cli/audit.tsx | 37 --- .../audiobook-curator/src/cli/convert.tsx | 51 ---- examples/audiobook-curator/src/cli/inspect.ts | 24 -- .../audiobook-curator/src/cli/inventory.tsx | 35 --- .../src/cli/library-audit.tsx | 63 ---- examples/audiobook-curator/src/cli/prepare.ts | 32 -- examples/audiobook-curator/src/cli/select.tsx | 32 -- examples/audiobook-curator/src/cli/shelf.tsx | 41 --- .../src/cli/whisper-verify.ts | 31 -- .../src/components/headlines.ts | 3 - .../tools/apply_audiobook_chapters.cli.ts | 9 + .../tools/apply_audiobook_chapters.tsx | 10 +- .../tools/apply_audiobook_metadata.cli.ts | 9 + .../tools/apply_audiobook_metadata.tsx | 16 +- .../mcp/curator/tools/audit_audiobook.cli.ts | 9 + .../src/mcp/curator/tools/audit_audiobook.tsx | 10 +- .../mcp/curator/tools/audit_library.cli.ts | 10 + .../src/mcp/curator/tools/audit_library.tsx | 10 +- .../tools/cache_audible_edition.cli.ts | 10 + .../curator/tools/cache_audible_edition.tsx | 11 +- .../curator/tools/convert_audiobook.cli.ts | 9 + .../mcp/curator/tools/convert_audiobook.tsx | 23 +- .../tools/identify_audible_sample.cli.ts | 9 + .../curator/tools/identify_audible_sample.tsx | 14 +- .../mcp/curator/tools/inspect_sources.cli.ts | 9 + .../src/mcp/curator/tools/inspect_sources.tsx | 8 +- .../curator/tools/inventory_sources.cli.ts | 10 + .../curator/tools/prepare_audiobook.cli.ts | 14 + .../mcp/curator/tools/prepare_audiobook.tsx | 10 +- .../tools/review_curation_shelf.cli.ts | 8 + .../mcp/curator/tools/search_audible.cli.ts | 23 ++ .../src/mcp/curator/tools/search_audible.tsx | 14 +- .../tools/select_audible_edition.cli.ts | 9 + .../curator/tools/select_audible_edition.tsx | 10 +- .../mcp/curator/tools/select_sources.cli.ts | 9 + .../src/mcp/curator/tools/select_sources.tsx | 8 +- .../tools/verify_audible_sample.cli.ts | 9 + .../curator/tools/verify_audible_sample.tsx | 15 +- .../curator/tools/verify_with_whisper.cli.ts | 9 + .../mcp/curator/tools/verify_with_whisper.tsx | 17 +- .../tests/application.test.ts | 20 +- examples/audiobook-curator/tests/cli.test.ts | 118 +++----- ...endered.test.ts => audit-rendered.test.ts} | 26 +- .../tests/route-unit/cli-dispatch.test.ts | 281 +++++++++++------- .../tests/route-unit/routes.test.ts | 33 -- .../src/mcp/harness/tools/submit.cli.tsx | 14 +- .../src/mcp/harness/tools/submit.tsx | 3 + packages/agent-bundle/src/cli-entry.ts | 21 +- .../tests/examples-contract.test.ts | 14 +- .../cli-dispatch-projection.test.ts | 22 ++ .../tests/workbench-surface.test.ts | 53 ++-- .../workbench/tests/examples-real.e2e.test.ts | 25 +- .../docs/en/examples/audiobook-curator.mdx | 56 ++-- .../en/guide/authoring/package-entries.mdx | 7 +- .../docs/zh/examples/audiobook-curator.mdx | 42 +-- .../zh/guide/authoring/package-entries.mdx | 6 +- 67 files changed, 770 insertions(+), 1001 deletions(-) create mode 100644 .changeset/725-audiobook-curator-cli-projections.md delete mode 100644 examples/audiobook-curator/src/cli/acoustic-identify.ts delete mode 100644 examples/audiobook-curator/src/cli/acoustic-verify.ts delete mode 100644 examples/audiobook-curator/src/cli/apply-chapters.ts delete mode 100644 examples/audiobook-curator/src/cli/apply-metadata.ts delete mode 100644 examples/audiobook-curator/src/cli/audible-cache.ts delete mode 100644 examples/audiobook-curator/src/cli/audible-search.tsx delete mode 100644 examples/audiobook-curator/src/cli/audible-select.ts delete mode 100644 examples/audiobook-curator/src/cli/audit.tsx delete mode 100644 examples/audiobook-curator/src/cli/convert.tsx delete mode 100644 examples/audiobook-curator/src/cli/inspect.ts delete mode 100644 examples/audiobook-curator/src/cli/inventory.tsx delete mode 100644 examples/audiobook-curator/src/cli/library-audit.tsx delete mode 100644 examples/audiobook-curator/src/cli/prepare.ts delete mode 100644 examples/audiobook-curator/src/cli/select.tsx delete mode 100644 examples/audiobook-curator/src/cli/shelf.tsx delete mode 100644 examples/audiobook-curator/src/cli/whisper-verify.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/apply_audiobook_chapters.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/apply_audiobook_metadata.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/audit_audiobook.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/audit_library.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/cache_audible_edition.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/convert_audiobook.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/identify_audible_sample.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/inspect_sources.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/inventory_sources.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/prepare_audiobook.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/review_curation_shelf.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/search_audible.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/select_audible_edition.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/select_sources.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/verify_audible_sample.cli.ts create mode 100644 examples/audiobook-curator/src/mcp/curator/tools/verify_with_whisper.cli.ts rename examples/audiobook-curator/tests/route-unit/{cli-rendered.test.ts => audit-rendered.test.ts} (66%) diff --git a/.changeset/725-audiobook-curator-cli-projections.md b/.changeset/725-audiobook-curator-cli-projections.md new file mode 100644 index 000000000..8e30e8ce8 --- /dev/null +++ b/.changeset/725-audiobook-curator-cli-projections.md @@ -0,0 +1,5 @@ +--- +"agent-bundle": patch +--- + +Judge a projected command's `z.enum` choices with the canonical schema after `mapInput` runs when the `.cli.ts` projection exports `mapInput`, so a mapper can split a comma-separated enum list (`--regions us,uk`); a value outside the enum still exits 2 as `Invalid value for --