cc-plugin-to-codex 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,40 @@
1
+ # Python
2
+ .venv/
3
+ venv/
4
+ __pycache__/
5
+ *.pyc
6
+ *.pyo
7
+ *.pyd
8
+ .coverage
9
+ htmlcov/
10
+ *.egg-info/
11
+ dist/
12
+ build/
13
+ wheels/
14
+
15
+ # Testing
16
+ .pytest_cache/
17
+ .tox/
18
+ .nox/
19
+
20
+ # Type checking
21
+ .mypy_cache/
22
+ .pyre/
23
+ .pytype/
24
+
25
+ # IDE
26
+ .vscode/
27
+ .idea/
28
+ *.swp
29
+ *.swo
30
+
31
+ # OS
32
+ .DS_Store
33
+ Thumbs.db
34
+
35
+ # Environments
36
+ .env
37
+ .envrc
38
+
39
+ # Local planning artifacts (specs, plans from brainstorming sessions)
40
+ docs/superpowers/
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2026-04-16
11
+
12
+ ### Added
13
+
14
+ - Initial release.
15
+ - `plugin-browse`: list plugins exposed by a Claude Code marketplace (Git URL or local checkout).
16
+ - `plugin-sync`: install a bridge plugin into Codex with atomic stage + rename semantics.
17
+ - `plugin-list`: show installed bridges across `global` / `project` scopes.
18
+ - `plugin-update`: re-sync a bridge from the source recorded in its `x-cc-bridge` marker.
19
+ - `plugin-uninstall`: remove bridge plugin directory, associated agent TOMLs, and registry entry.
20
+ - Automatic CC agent (`.md` with YAML frontmatter) → Codex agent (`.toml`) conversion.
21
+ - Stale agent cleanup on re-sync.
22
+ - Dual mode: interactive (`questionary`) + strict (AI/CI friendly, all flags required).
23
+ - `--json` output for all commands.
24
+ - Conflict protection via `x-cc-bridge` marker — user-authored files never overwritten unless `--force`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 fangzzzjjj
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,226 @@
1
+ Metadata-Version: 2.4
2
+ Name: cc-plugin-to-codex
3
+ Version: 0.1.0
4
+ Summary: Bridge Claude Code marketplace plugins into Codex (skills + subagents)
5
+ Project-URL: Homepage, https://github.com/ProAlexUSC/cc-plugin-to-codex
6
+ Project-URL: Repository, https://github.com/ProAlexUSC/cc-plugin-to-codex
7
+ Project-URL: Issues, https://github.com/ProAlexUSC/cc-plugin-to-codex/issues
8
+ Project-URL: Changelog, https://github.com/ProAlexUSC/cc-plugin-to-codex/blob/main/CHANGELOG.md
9
+ Author-email: fangzzzjjj <fangzzzjjj@gmail.com>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: bridge,claude-code,cli,codex,marketplace,plugin
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Software Development :: Build Tools
23
+ Requires-Python: >=3.11
24
+ Requires-Dist: pyyaml<7.0,>=6.0
25
+ Requires-Dist: questionary<3.0,>=2.0
26
+ Requires-Dist: rich<16.0,>=13.0
27
+ Requires-Dist: tomli-w<2.0,>=1.0
28
+ Requires-Dist: typer<1.0,>=0.12
29
+ Provides-Extra: dev
30
+ Requires-Dist: mypy<2.0,>=1.10; extra == 'dev'
31
+ Requires-Dist: pre-commit<5.0,>=3.7; extra == 'dev'
32
+ Requires-Dist: pytest-cov<8.0,>=5.0; extra == 'dev'
33
+ Requires-Dist: pytest<10.0,>=8.0; extra == 'dev'
34
+ Requires-Dist: ruff<1.0,>=0.6; extra == 'dev'
35
+ Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
36
+ Description-Content-Type: text/markdown
37
+
38
+ # cc-plugin-to-codex
39
+
40
+ [![CI](https://github.com/ProAlexUSC/cc-plugin-to-codex/actions/workflows/ci.yml/badge.svg)](https://github.com/ProAlexUSC/cc-plugin-to-codex/actions/workflows/ci.yml)
41
+ [![codecov](https://codecov.io/gh/ProAlexUSC/cc-plugin-to-codex/branch/main/graph/badge.svg)](https://codecov.io/gh/ProAlexUSC/cc-plugin-to-codex)
42
+ [![PyPI](https://img.shields.io/pypi/v/cc-plugin-to-codex.svg)](https://pypi.org/project/cc-plugin-to-codex/)
43
+ [![Python](https://img.shields.io/pypi/pyversions/cc-plugin-to-codex.svg)](https://pypi.org/project/cc-plugin-to-codex/)
44
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
45
+
46
+ Bridge [Claude Code](https://docs.claude.com/en/docs/claude-code) marketplace
47
+ plugins into [Codex](https://developers.openai.com/codex). Every source plugin
48
+ becomes a `cc-<name>` Codex bridge, CC agent Markdown files are converted into
49
+ Codex TOML agents, and everything is marked with an `x-cc-bridge` tag so `list`,
50
+ `update`, and `uninstall` can cleanly manage them later.
51
+
52
+ ## Features
53
+
54
+ - **Multi-source**: accept a Git URL or a local marketplace checkout; interactive
55
+ mode can also scan `~/.claude/plugins/marketplaces/` for every local market.
56
+ - **Dual scope**: install either globally (`~/.codex/`, `~/.agents/`) or per
57
+ project (`$PWD/.codex/`, `$PWD/.agents/`).
58
+ - **Atomic swap**: each plugin is staged in a sibling temp directory and swapped
59
+ in with a POSIX rename, so a crash mid-sync leaves no half-written state.
60
+ - **Dual-mode CLI**:
61
+ - TTY: `questionary`-driven selectors for source, plugins, scope, bridges.
62
+ - Non-TTY / `--yes` / `--json` / `--non-interactive`: strict mode — missing
63
+ required flags fail loudly instead of hanging.
64
+ - **Safe re-sync**: stale agents removed automatically; switching source on the
65
+ same bridge is refused unless `--force`.
66
+ - **Hands-off marker**: user-authored plugins / agents without `x-cc-bridge` are
67
+ never touched.
68
+
69
+ ## Installation
70
+
71
+ ### `uvx` (recommended, zero install)
72
+
73
+ [`uv`](https://docs.astral.sh/uv/) ships with a one-shot runner:
74
+
75
+ ```bash
76
+ uvx --from cc-plugin-to-codex cc2codex --help
77
+ ```
78
+
79
+ Every invocation grabs the latest released version from PyPI. Add a shell alias
80
+ if you use it often:
81
+
82
+ ```bash
83
+ alias cc2codex='uvx --from cc-plugin-to-codex cc2codex'
84
+ ```
85
+
86
+ ### `uv tool install` (persistent)
87
+
88
+ ```bash
89
+ uv tool install cc-plugin-to-codex
90
+ cc2codex --help
91
+ ```
92
+
93
+ Upgrade later with:
94
+
95
+ ```bash
96
+ uv tool upgrade cc-plugin-to-codex
97
+ ```
98
+
99
+ ### Plain pip
100
+
101
+ ```bash
102
+ pip install cc-plugin-to-codex
103
+ cc2codex --help
104
+ ```
105
+
106
+ ## Commands
107
+
108
+ | Command | Purpose |
109
+ |---|---|
110
+ | `cc2codex plugin-browse` | List plugins exposed by a source marketplace. Read-only. |
111
+ | `cc2codex plugin-sync` | Install bridge plugins (skills + subagents) into Codex. |
112
+ | `cc2codex plugin-list` | Show installed bridges and their scope paths. |
113
+ | `cc2codex plugin-update` | Re-sync a bridge from the source recorded in its marker. |
114
+ | `cc2codex plugin-uninstall` | Remove bridge plugins by `x-cc-bridge` marker. |
115
+
116
+ Each command supports `--help` for the full flag reference.
117
+
118
+ ## Asking an AI to drive `cc2codex`
119
+
120
+ A ready-made, agent-optimized skill file lives at
121
+ [`skills/cc2codex/SKILL.md`](https://github.com/ProAlexUSC/cc-plugin-to-codex/blob/main/skills/cc2codex/SKILL.md).
122
+ It is written in the format Claude / Codex agents consume (frontmatter
123
+ trigger + full flag / schema reference / strict-mode rules / pitfalls).
124
+
125
+ If you want an AI assistant — inside Claude Code, Codex, or any chat
126
+ tool that can read a URL — to operate cc2codex for you, paste the raw
127
+ URL above into the conversation and tell it "read this before you
128
+ run any cc2codex command". The assistant will then know which flags
129
+ are mandatory in non-interactive mode, how the `x-cc-bridge` marker
130
+ semantics work, and the post-install Codex restart step users
131
+ frequently forget.
132
+
133
+ ## Quick start
134
+
135
+ Browse a marketplace:
136
+
137
+ ```bash
138
+ cc2codex plugin-browse --source https://github.com/your-org/your-cc-marketplace.git
139
+ ```
140
+
141
+ Sync specific plugins to the global Codex scope:
142
+
143
+ ```bash
144
+ cc2codex plugin-sync \
145
+ --source https://github.com/your-org/your-cc-marketplace.git \
146
+ --plugin ios-dev --plugin base \
147
+ --scope global \
148
+ --yes
149
+ ```
150
+
151
+ Sync every plugin to the current project:
152
+
153
+ ```bash
154
+ cc2codex plugin-sync \
155
+ --source /path/to/local/cc-marketplace \
156
+ --all-plugins --scope project \
157
+ --yes
158
+ ```
159
+
160
+ AI / scripting flow — full JSON output, no prompts:
161
+
162
+ ```bash
163
+ cc2codex plugin-sync \
164
+ --source <url> --all-plugins --scope global \
165
+ --non-interactive --json
166
+ ```
167
+
168
+ List, update, remove:
169
+
170
+ ```bash
171
+ cc2codex plugin-list
172
+ cc2codex plugin-update --all --scope global --yes
173
+ cc2codex plugin-uninstall cc-ios-dev --scope global --yes
174
+ ```
175
+
176
+ > **Codex needs one manual step after `plugin-sync`**
177
+ >
178
+ > Codex does not hot-reload `~/.agents/plugins/marketplace.json`. After the
179
+ > first `plugin-sync`, restart Codex (or open a new session) and run
180
+ > `/plugins` to install the bridge from the "CC Bridged Plugins" marketplace.
181
+ > Until then Codex will not load the skills and agents.
182
+
183
+ ## How it works
184
+
185
+ For each selected plugin, `plugin-sync`:
186
+
187
+ 1. Resolves the source (Git clone into `/tmp`, or reads the local path).
188
+ 2. Copies the plugin directory to `cc-<name>/`, blacklisting CC-only mechanisms
189
+ (`hooks/`, `commands/`, `agents/`, `.claude-plugin/`) and VCS/build noise
190
+ (`__pycache__`, `.git`, `.DS_Store`, …). Skills, scripts, assets, and docs
191
+ survive.
192
+ 3. Writes `.codex-plugin/plugin.json` with the `x-cc-bridge` marker (source URL,
193
+ ref, commit SHA, synced timestamp, agent list, …).
194
+ 4. Converts every `agents/*.md` to a `cc_<plugin>_<agent>.toml` under
195
+ `~/.codex/agents/`, prefixing each file with a `# x-cc-bridge: {…}` comment
196
+ so later runs recognise them as tool-generated.
197
+ 5. Upserts the entry into `marketplace.json` with
198
+ `policy.installation = INSTALLED_BY_DEFAULT`.
199
+
200
+ Re-syncing the same source compares the old marker's `agents` list with the new
201
+ one and unlinks stale bridge agents; hand-authored TOMLs never match the marker
202
+ and are kept.
203
+
204
+ ## Development
205
+
206
+ ```bash
207
+ git clone https://github.com/ProAlexUSC/cc-plugin-to-codex
208
+ cd cc-plugin-to-codex
209
+ uv sync --extra dev
210
+ uv run pytest -v
211
+ ```
212
+
213
+ CI runs the same `pytest` across Python 3.11 / 3.12 / 3.13 on Ubuntu and macOS.
214
+
215
+ ## Releasing
216
+
217
+ 1. Bump `version` in `pyproject.toml` and update `CHANGELOG.md`.
218
+ 2. Commit and tag: `git tag v0.X.Y && git push origin v0.X.Y`.
219
+ 3. The `Publish to PyPI` workflow builds the wheel + sdist and uploads them via
220
+ [PyPI Trusted Publishing](https://docs.pypi.org/trusted-publishers/).
221
+ Configure the trusted publisher once on PyPI with `workflow = publish.yml`
222
+ and `environment = pypi`.
223
+
224
+ ## License
225
+
226
+ [MIT](LICENSE).
@@ -0,0 +1,189 @@
1
+ # cc-plugin-to-codex
2
+
3
+ [![CI](https://github.com/ProAlexUSC/cc-plugin-to-codex/actions/workflows/ci.yml/badge.svg)](https://github.com/ProAlexUSC/cc-plugin-to-codex/actions/workflows/ci.yml)
4
+ [![codecov](https://codecov.io/gh/ProAlexUSC/cc-plugin-to-codex/branch/main/graph/badge.svg)](https://codecov.io/gh/ProAlexUSC/cc-plugin-to-codex)
5
+ [![PyPI](https://img.shields.io/pypi/v/cc-plugin-to-codex.svg)](https://pypi.org/project/cc-plugin-to-codex/)
6
+ [![Python](https://img.shields.io/pypi/pyversions/cc-plugin-to-codex.svg)](https://pypi.org/project/cc-plugin-to-codex/)
7
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
8
+
9
+ Bridge [Claude Code](https://docs.claude.com/en/docs/claude-code) marketplace
10
+ plugins into [Codex](https://developers.openai.com/codex). Every source plugin
11
+ becomes a `cc-<name>` Codex bridge, CC agent Markdown files are converted into
12
+ Codex TOML agents, and everything is marked with an `x-cc-bridge` tag so `list`,
13
+ `update`, and `uninstall` can cleanly manage them later.
14
+
15
+ ## Features
16
+
17
+ - **Multi-source**: accept a Git URL or a local marketplace checkout; interactive
18
+ mode can also scan `~/.claude/plugins/marketplaces/` for every local market.
19
+ - **Dual scope**: install either globally (`~/.codex/`, `~/.agents/`) or per
20
+ project (`$PWD/.codex/`, `$PWD/.agents/`).
21
+ - **Atomic swap**: each plugin is staged in a sibling temp directory and swapped
22
+ in with a POSIX rename, so a crash mid-sync leaves no half-written state.
23
+ - **Dual-mode CLI**:
24
+ - TTY: `questionary`-driven selectors for source, plugins, scope, bridges.
25
+ - Non-TTY / `--yes` / `--json` / `--non-interactive`: strict mode — missing
26
+ required flags fail loudly instead of hanging.
27
+ - **Safe re-sync**: stale agents removed automatically; switching source on the
28
+ same bridge is refused unless `--force`.
29
+ - **Hands-off marker**: user-authored plugins / agents without `x-cc-bridge` are
30
+ never touched.
31
+
32
+ ## Installation
33
+
34
+ ### `uvx` (recommended, zero install)
35
+
36
+ [`uv`](https://docs.astral.sh/uv/) ships with a one-shot runner:
37
+
38
+ ```bash
39
+ uvx --from cc-plugin-to-codex cc2codex --help
40
+ ```
41
+
42
+ Every invocation grabs the latest released version from PyPI. Add a shell alias
43
+ if you use it often:
44
+
45
+ ```bash
46
+ alias cc2codex='uvx --from cc-plugin-to-codex cc2codex'
47
+ ```
48
+
49
+ ### `uv tool install` (persistent)
50
+
51
+ ```bash
52
+ uv tool install cc-plugin-to-codex
53
+ cc2codex --help
54
+ ```
55
+
56
+ Upgrade later with:
57
+
58
+ ```bash
59
+ uv tool upgrade cc-plugin-to-codex
60
+ ```
61
+
62
+ ### Plain pip
63
+
64
+ ```bash
65
+ pip install cc-plugin-to-codex
66
+ cc2codex --help
67
+ ```
68
+
69
+ ## Commands
70
+
71
+ | Command | Purpose |
72
+ |---|---|
73
+ | `cc2codex plugin-browse` | List plugins exposed by a source marketplace. Read-only. |
74
+ | `cc2codex plugin-sync` | Install bridge plugins (skills + subagents) into Codex. |
75
+ | `cc2codex plugin-list` | Show installed bridges and their scope paths. |
76
+ | `cc2codex plugin-update` | Re-sync a bridge from the source recorded in its marker. |
77
+ | `cc2codex plugin-uninstall` | Remove bridge plugins by `x-cc-bridge` marker. |
78
+
79
+ Each command supports `--help` for the full flag reference.
80
+
81
+ ## Asking an AI to drive `cc2codex`
82
+
83
+ A ready-made, agent-optimized skill file lives at
84
+ [`skills/cc2codex/SKILL.md`](https://github.com/ProAlexUSC/cc-plugin-to-codex/blob/main/skills/cc2codex/SKILL.md).
85
+ It is written in the format Claude / Codex agents consume (frontmatter
86
+ trigger + full flag / schema reference / strict-mode rules / pitfalls).
87
+
88
+ If you want an AI assistant — inside Claude Code, Codex, or any chat
89
+ tool that can read a URL — to operate cc2codex for you, paste the raw
90
+ URL above into the conversation and tell it "read this before you
91
+ run any cc2codex command". The assistant will then know which flags
92
+ are mandatory in non-interactive mode, how the `x-cc-bridge` marker
93
+ semantics work, and the post-install Codex restart step users
94
+ frequently forget.
95
+
96
+ ## Quick start
97
+
98
+ Browse a marketplace:
99
+
100
+ ```bash
101
+ cc2codex plugin-browse --source https://github.com/your-org/your-cc-marketplace.git
102
+ ```
103
+
104
+ Sync specific plugins to the global Codex scope:
105
+
106
+ ```bash
107
+ cc2codex plugin-sync \
108
+ --source https://github.com/your-org/your-cc-marketplace.git \
109
+ --plugin ios-dev --plugin base \
110
+ --scope global \
111
+ --yes
112
+ ```
113
+
114
+ Sync every plugin to the current project:
115
+
116
+ ```bash
117
+ cc2codex plugin-sync \
118
+ --source /path/to/local/cc-marketplace \
119
+ --all-plugins --scope project \
120
+ --yes
121
+ ```
122
+
123
+ AI / scripting flow — full JSON output, no prompts:
124
+
125
+ ```bash
126
+ cc2codex plugin-sync \
127
+ --source <url> --all-plugins --scope global \
128
+ --non-interactive --json
129
+ ```
130
+
131
+ List, update, remove:
132
+
133
+ ```bash
134
+ cc2codex plugin-list
135
+ cc2codex plugin-update --all --scope global --yes
136
+ cc2codex plugin-uninstall cc-ios-dev --scope global --yes
137
+ ```
138
+
139
+ > **Codex needs one manual step after `plugin-sync`**
140
+ >
141
+ > Codex does not hot-reload `~/.agents/plugins/marketplace.json`. After the
142
+ > first `plugin-sync`, restart Codex (or open a new session) and run
143
+ > `/plugins` to install the bridge from the "CC Bridged Plugins" marketplace.
144
+ > Until then Codex will not load the skills and agents.
145
+
146
+ ## How it works
147
+
148
+ For each selected plugin, `plugin-sync`:
149
+
150
+ 1. Resolves the source (Git clone into `/tmp`, or reads the local path).
151
+ 2. Copies the plugin directory to `cc-<name>/`, blacklisting CC-only mechanisms
152
+ (`hooks/`, `commands/`, `agents/`, `.claude-plugin/`) and VCS/build noise
153
+ (`__pycache__`, `.git`, `.DS_Store`, …). Skills, scripts, assets, and docs
154
+ survive.
155
+ 3. Writes `.codex-plugin/plugin.json` with the `x-cc-bridge` marker (source URL,
156
+ ref, commit SHA, synced timestamp, agent list, …).
157
+ 4. Converts every `agents/*.md` to a `cc_<plugin>_<agent>.toml` under
158
+ `~/.codex/agents/`, prefixing each file with a `# x-cc-bridge: {…}` comment
159
+ so later runs recognise them as tool-generated.
160
+ 5. Upserts the entry into `marketplace.json` with
161
+ `policy.installation = INSTALLED_BY_DEFAULT`.
162
+
163
+ Re-syncing the same source compares the old marker's `agents` list with the new
164
+ one and unlinks stale bridge agents; hand-authored TOMLs never match the marker
165
+ and are kept.
166
+
167
+ ## Development
168
+
169
+ ```bash
170
+ git clone https://github.com/ProAlexUSC/cc-plugin-to-codex
171
+ cd cc-plugin-to-codex
172
+ uv sync --extra dev
173
+ uv run pytest -v
174
+ ```
175
+
176
+ CI runs the same `pytest` across Python 3.11 / 3.12 / 3.13 on Ubuntu and macOS.
177
+
178
+ ## Releasing
179
+
180
+ 1. Bump `version` in `pyproject.toml` and update `CHANGELOG.md`.
181
+ 2. Commit and tag: `git tag v0.X.Y && git push origin v0.X.Y`.
182
+ 3. The `Publish to PyPI` workflow builds the wheel + sdist and uploads them via
183
+ [PyPI Trusted Publishing](https://docs.pypi.org/trusted-publishers/).
184
+ Configure the trusted publisher once on PyPI with `workflow = publish.yml`
185
+ and `environment = pypi`.
186
+
187
+ ## License
188
+
189
+ [MIT](LICENSE).
@@ -0,0 +1,99 @@
1
+ [project]
2
+ name = "cc-plugin-to-codex"
3
+ version = "0.1.0"
4
+ description = "Bridge Claude Code marketplace plugins into Codex (skills + subagents)"
5
+ readme = "README.md"
6
+ requires-python = ">=3.11"
7
+ license = {text = "MIT"}
8
+ authors = [{name = "fangzzzjjj", email = "fangzzzjjj@gmail.com"}]
9
+ keywords = ["codex", "claude-code", "plugin", "cli", "bridge", "marketplace"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Environment :: Console",
13
+ "Intended Audience :: Developers",
14
+ "License :: OSI Approved :: MIT License",
15
+ "Operating System :: OS Independent",
16
+ "Programming Language :: Python :: 3",
17
+ "Programming Language :: Python :: 3.11",
18
+ "Programming Language :: Python :: 3.12",
19
+ "Programming Language :: Python :: 3.13",
20
+ "Topic :: Software Development :: Build Tools",
21
+ ]
22
+ dependencies = [
23
+ "typer>=0.12,<1.0",
24
+ "questionary>=2.0,<3.0",
25
+ "pyyaml>=6.0,<7.0",
26
+ "tomli-w>=1.0,<2.0",
27
+ "rich>=13.0,<16.0",
28
+ ]
29
+
30
+ [project.optional-dependencies]
31
+ dev = [
32
+ "pytest>=8.0,<10.0",
33
+ "pytest-cov>=5.0,<8.0",
34
+ "ruff>=0.6,<1.0",
35
+ "mypy>=1.10,<2.0",
36
+ "types-PyYAML>=6.0",
37
+ "pre-commit>=3.7,<5.0",
38
+ ]
39
+
40
+ [project.urls]
41
+ Homepage = "https://github.com/ProAlexUSC/cc-plugin-to-codex"
42
+ Repository = "https://github.com/ProAlexUSC/cc-plugin-to-codex"
43
+ Issues = "https://github.com/ProAlexUSC/cc-plugin-to-codex/issues"
44
+ Changelog = "https://github.com/ProAlexUSC/cc-plugin-to-codex/blob/main/CHANGELOG.md"
45
+
46
+ [project.scripts]
47
+ cc2codex = "cc_plugin_to_codex.cli:app"
48
+
49
+ [build-system]
50
+ requires = ["hatchling"]
51
+ build-backend = "hatchling.build"
52
+
53
+ [tool.hatch.build.targets.wheel]
54
+ packages = ["src/cc_plugin_to_codex"]
55
+
56
+ [tool.hatch.build.targets.sdist]
57
+ include = ["src/cc_plugin_to_codex", "README.md", "LICENSE", "CHANGELOG.md", "pyproject.toml"]
58
+
59
+ [tool.pytest.ini_options]
60
+ testpaths = ["tests"]
61
+
62
+ # Pin the index to public PyPI so `uv lock` produces a lockfile that
63
+ # CI and external contributors can resolve. Without this, a developer's
64
+ # local user config pointing at an internal mirror would bake unreachable
65
+ # URLs into uv.lock.
66
+ [[tool.uv.index]]
67
+ url = "https://pypi.org/simple"
68
+ default = true
69
+
70
+ [tool.ruff]
71
+ line-length = 100
72
+ target-version = "py311"
73
+ src = ["src", "tests"]
74
+
75
+ [tool.ruff.lint]
76
+ select = ["E", "F", "I", "UP", "B", "SIM", "RUF", "PTH"]
77
+ ignore = [
78
+ "E501", # line length is enforced by formatter, not linter
79
+ "RUF001", # ambiguous char in string (× used intentionally in CLI output)
80
+ "RUF002", # ambiguous char in docstring
81
+ "RUF003", # ambiguous char in comment (en-dash used in comments/docstrings)
82
+ ]
83
+
84
+ [tool.ruff.lint.per-file-ignores]
85
+ "tests/*" = ["B", "SIM"] # tests can use looser style
86
+ "tests/fixtures/build_bare_marketplace.py" = ["PTH"] # subprocess args want str paths
87
+
88
+ [tool.ruff.format]
89
+ quote-style = "double"
90
+ indent-style = "space"
91
+
92
+ [tool.mypy]
93
+ python_version = "3.11"
94
+ files = ["src/cc_plugin_to_codex"]
95
+ disallow_untyped_defs = true
96
+ warn_unused_ignores = true
97
+ strict_equality = true
98
+ warn_redundant_casts = true
99
+ ignore_missing_imports = true
@@ -0,0 +1,7 @@
1
+ from importlib.metadata import PackageNotFoundError, version
2
+
3
+ try:
4
+ __version__ = version("cc-plugin-to-codex")
5
+ except PackageNotFoundError:
6
+ # Package not installed (e.g. running from source without `pip install -e .`).
7
+ __version__ = "0.0.0+unknown"
@@ -0,0 +1,4 @@
1
+ from cc_plugin_to_codex.cli import app
2
+
3
+ if __name__ == "__main__":
4
+ app()