rexdeck 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,7 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .ruff_cache/
7
+ dist/
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 — prepared, unpublished
4
+
5
+ - Add manual-only selected dependency validation: setup/status never install; enable reuses qualified preinstalled Yazi/lazygit (and requires Git for Git integration), or returns actionable nonzero manual-install/version-check/rerun guidance without registration. RexDeck never runs Homebrew or installs, upgrades, removes or supervises upstream package transactions. Preserve qualified executable metadata identity, frozen-target checks, siblings and upstream settings; owner-run Homebrew is optional only when its selected version qualifies and the owner accepts its effects, otherwise use the qualified upstream release.
6
+ - Accept both upstream and Homebrew's multiline Yazi version reports. Ignore empty/relative executable-search paths during qualification and lifecycle binding. Restrict the source distribution to product source, tests, metadata, and public documentation; globally ignored local evidence is not packaged.
7
+ - Prepare Python 3.12+ metadata, packaged MIT license and project URLs. Document macOS arm64/Rex API 10 baseline, upstream unbundled licenses, installed-package checks and private-versus-owner visual proof limits.
8
+ - Retain exact CI-built 0.1.0 wheel/sdist for owner-reviewed release. Manual Trusted Publishing requires owner-only protected environment approval bound to exact commit, immutable artifact ID, file hashes and evidence; no push/PR/tag publication or release-time rebuild. Publication and public-index native-use proof remain gated, not claimed complete.
9
+
10
+ - Add independently selectable local Git through unmodified lazygit, preserving the invoking repository/worktree and exact return origin. Reject inherited Git repository/discovery overrides rather than silently redirecting work. Reuse native hosting and lifecycle ownership for Files/Git; serialize shared configuration and data-root changes, preserve siblings/open panes, and restore exact config bytes in either disable order without changing existing settings or Files receipt schemas.
11
+ - Resolve Git validation through absolute PATH directories and preserve discovery errors. Retain healthy integration status when a sibling receipt is invalid; validate only deployment/sibling artifacts needed by the selected operation. Clarify cleanup of applied-but-disabled integrations before package removal.
12
+ - Pin applied Lua/Python launch behavior together with isolated Python imports; avoid DNS for local cwd URIs, report symlink loops, and retain acknowledgement on interrupted focus restoration. Freeze socket/config selection without lexical symlink retargeting, verify the running server's config before writes, preserve saved approval across default-server changes, reject redirected app roots and oversized planned writes before mutation, preserve later installations on repeated disable, and recover owned changes on SIGTERM/SIGHUP while collecting rollback conflicts.
13
+
14
+ - Deploy Files' generated Lua module under the setup-frozen `$XDG_DATA_HOME/rexdeck/plugins/files` app data root, leaving only the tracked-require loader in Rex config. Keep package, preferences, and receipt/lock roles separate; use settings v2 and receipt v3, refusing old/foreign formats without automatic adoption. Preserve exact native source identity for relative or absolute paths, serialize shared-root mutations across workspaces, and refuse modules appearing during ownership checks.
15
+ - Package the native Files Lua action and Python launcher so installed RexDeck works outside a checkout. Replace manual workspace flags and shell wrappers with one-time `setup`, `enable files`, `status`, and `disable files`; persist the explicitly approved Rex target and derive Files state paths automatically.
16
+ - Remove unused internal stop lifecycle code and stale lifecycle documentation; public Files usage remains setup/enable/status/disable. Require verified ownership and rollback safety before explicitly migrating existing state or removing obsolete owned artifacts; no automatic migration command is added.
17
+ - Replace the custom Files browser with a native **RexDeck Files** action launching unmodified Yazi in the invoking terminal's captured working directory, preserving its normal UI, configuration, navigation, previews, and file operations.
18
+ - Remove Files' LazyRex hub/SDK dependency, renderer/navigation patches, Go runtime preparation, lock/build receipts, and obsolete browser/preview commands and tests. Yazi remains write-capable; the launch directory is not a root jail.
19
+ - Return Yazi quit to the exact captured terminal through the explicit Rex endpoint, with visible launch/exit/focus errors and no replacement-pane adoption. Independent Yazi panes survive disable.
20
+ - Preserve tracked native registration, source integrity, conservative conflicts, atomic rollback, config symlink/mode preservation, and cancellation diagnostics. Package location is update provenance rather than ownership identity, so re-enabling refreshes an unchanged owned integration after reinstall. Refuse legacy receipts; old LazyRex installations require explicit prior-code cleanup.
21
+ - Make LazyRex optional for future integrations that actually need an existing capability; defer the broader collection. No hooks, fonts, autostart, automatic Rex/manager installation, or live migration command is included.
rexdeck-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tom Mathews
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.
rexdeck-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,127 @@
1
+ Metadata-Version: 2.5
2
+ Name: rexdeck
3
+ Version: 0.1.0
4
+ Summary: Native Rex integrations for independently selectable existing tools
5
+ Project-URL: Homepage, https://github.com/Mathews-Tom/RexDeck
6
+ Project-URL: Repository, https://github.com/Mathews-Tom/RexDeck
7
+ Project-URL: Issues, https://github.com/Mathews-Tom/RexDeck/issues
8
+ Project-URL: Changelog, https://github.com/Mathews-Tom/RexDeck/blob/main/CHANGELOG.md
9
+ Author: Tom Mathews
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: lazygit,rex,terminal,yazi
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Operating System :: MacOS :: MacOS X
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Requires-Python: >=3.12
20
+ Description-Content-Type: text/markdown
21
+
22
+ # RexDeck
23
+
24
+ A collection of independently selectable plugins and extensions that bring existing tools into your own Rex application.
25
+
26
+ Files and local Git bring unmodified Yazi and lazygit into native Rex terminals. GitHub workflows, rich viewers, agent/subagent views, and task-provider integrations remain planned. Select the tools you need without installing an unrelated default suite.
27
+
28
+ ## Plugins and extensions
29
+
30
+ | Integration | Purpose | Status |
31
+ | --- | --- | --- |
32
+ | [Files](plugins/files/README.md) | Browse, preview, and manage files using unmodified Yazi in a native Rex terminal | Available |
33
+ | [Git](plugins/git/README.md) | Inspect, stage, and commit in the invoking repository/worktree using unmodified lazygit | Available |
34
+ | GitHub | Pull-request/issue workflows with explicit repository/host/account | Planned |
35
+ | Rich viewers | Rendered Markdown, PDF, and image viewing | Planned |
36
+ | Agents and subagents | Attention, observed state, and navigation to agent work | Planned |
37
+ | Tasks | Independently selectable Linear and ClickUp workflows | Planned |
38
+
39
+ Planned integrations are not implemented or installable yet. RexDeck is not published on PyPI; install the current source package as described below.
40
+
41
+ ## Getting started
42
+
43
+ The qualified platform is **macOS arm64, Rex API revision 10 baseline, and Python 3.12+**. Revision 10 is not an exact-version compatibility gate. Rex must already be installed and running; RexDeck does not bootstrap Rex, Homebrew, Python, or uv. Other platforms, remote hosts, and multi-device operation are not qualified.
44
+
45
+ Until the approved PyPI release is published, install the pinned public source baseline (Files and Git; before S1 dependency onboarding):
46
+
47
+ ```sh
48
+ uv tool install 'git+https://github.com/Mathews-Tom/RexDeck.git@d7f934e31d2becf53bc435ac931fa6e1b984bbd0'
49
+ ```
50
+
51
+ For the S1 candidate, use its reviewed checkout and record the exact commit:
52
+
53
+ ```sh
54
+ uv tool install .
55
+ rexdeck setup
56
+ rexdeck enable files
57
+ rexdeck status
58
+ ```
59
+
60
+ The installed command works from any directory; the package includes the shared native action and Python launcher for Files and Git. No shell wrapper, `RD_*` variables, or developer checkout is needed at runtime. Ensure the tool executable directory reported by `uv` is on `PATH`.
61
+
62
+ `setup` remembers the selected Rex configuration and running server without changing Rex configuration. Interactive setup asks for approval before saving a personal-server target. Use `enable files` or `enable git` independently, `status [files|git]` to inspect ownership/registration, and `disable <id>` to remove only that integration. Unqualified `status` reports both integrations, retaining healthy results alongside an integration-specific fault if its sibling cannot be inspected. See the plugin READMEs for prerequisites, capabilities, updates, and removal.
63
+
64
+ The uv-managed package remains the runtime source. Setup freezes the app data root from `$XDG_DATA_HOME/rexdeck` (default `~/.local/share/rexdeck`); each integration deploys `plugins/<id>/rexdeck_<id>.lua` there with an independently owned tracked loader in Rex's `init.lua`. Approved preferences remain in `$XDG_CONFIG_HOME/rexdeck/config.json`. Files receipt/lock paths remain in the saved `$XDG_STATE_HOME/rexdeck/files` workspace; Git uses its `git/` subdirectory. Later `XDG_DATA_HOME` changes do not retarget the saved installation. Run `disable` for every applied integration before uninstalling RexDeck or deliberately resetting a saved target, including integrations reported as disabled after a failed enable.
65
+
66
+ ### Selected dependencies
67
+
68
+ `setup` and `status` never install packages. `enable files` validates preinstalled Yazi; `enable git` validates preinstalled Git/lazygit. Qualified versions are **Yazi 26.9.1, lazygit 0.66.2 or 0.66.3**. Missing or unqualified selected tools produce actionable nonzero manual-install/version-check/rerun guidance without registration or installation prompts. RexDeck never installs, upgrades, downloads, cancels package transactions, or removes upstream tools, and never probes or executes Homebrew.
69
+
70
+ Executable discovery ignores empty and relative `PATH` entries. Absolute entries, including checkout directories and symlinks to them, remain eligible for version probes and lifecycle lookup. Put only trusted tools in absolute `PATH` directories. RexDeck captures followed-target device/inode/mode/size/nanosecond timestamps/owner before the version probe and rechecks that identity afterward and under its operation locks immediately before applying or enabling an integration. Replacement or modification requires rerunning enable. This is metadata-based detection, not pinned execution or protection against an executable changed after the final check.
71
+
72
+ Install dependencies yourself using qualified upstream releases: [Yazi 26.9.1](https://github.com/sxyazi/yazi/releases/tag/v26.9.1), [lazygit 0.66.2](https://github.com/jesseduffield/lazygit/releases/tag/v0.66.2) or [0.66.3](https://github.com/jesseduffield/lazygit/releases/tag/v0.66.3). Follow [Yazi installation](https://yazi-rs.github.io/docs/installation/) or [lazygit installation](https://github.com/jesseduffield/lazygit#installation); Git must also already be installed for Git integration.
73
+
74
+ If you choose Homebrew, first run `brew info yazi` or `brew info lazygit` yourself and inspect the selected version and dependency/source-build/upgrade effects. **Skip Homebrew if its selected version is not qualified**; use the qualified upstream release instead. Only if the version qualifies and you accept the package effects, run the selected `brew install yazi` or `brew install lazygit` yourself. RexDeck does not qualify a Homebrew version, prefix or transaction; all package effects remain owner-controlled.
75
+
76
+ Check `yazi --version` or `lazygit --version` (and `git --version` for Git), then rerun `rexdeck enable files` or `rexdeck enable git`. The pinned pre-S1 source baseline above requires manual dependency provisioning too, but does not contain S1's selected-tool qualification/guidance behavior.
77
+
78
+ Rex, Yazi, lazygit, Git, Homebrew, Python and uv remain externally managed prerequisites. No install-all, sudo, silent upgrade, tool configuration change, or upstream package removal is performed. `disable` and Python package uninstall leave upstream tools installed.
79
+
80
+ ## Design principles
81
+
82
+ - **Reuse tools, do not rebuild them.** Preserve their normal interfaces, configuration, authentication, and capabilities.
83
+ - **Prefer native Rex integration.** Use native actions and panes where sufficient. LazyRex is optional only where a particular integration needs an existing capability; it is not a collection-wide dependency.
84
+ - **Keep features independently selectable.** Install only the dependencies needed by the chosen integration; no implicit default suite, hooks, or autostart.
85
+ - **Preserve user context and ownership.** Pass explicit launch context and structured arguments, keep unrelated work intact, and make removal reversible.
86
+ - **Disclose capabilities accurately.** External tools run as your OS account and can be write-capable; they are not sandboxed or automatically read-only.
87
+
88
+ ## Development
89
+
90
+ Install LuaJIT before running the suite: native Lua behavior tests require `lua` or `luajit` and otherwise skip. On macOS:
91
+
92
+ ```sh
93
+ brew install luajit
94
+ uv sync --locked
95
+ uv run ruff check .
96
+ uv run ruff format --check .
97
+ uv run mypy --strict
98
+ uv run pytest
99
+ ```
100
+
101
+ Plugin-specific syntax checks and real interaction verification belong in each plugin's README. Keep plugin documentation under `plugins/<name>/README.md` and packaged runtime assets under `src/rexdeck/plugins/<name>/`. Link available integrations from the table above. Do not create empty plugin folders for planned features.
102
+
103
+ ## Release preparation and owner gate
104
+
105
+ Version **0.1.0 is prepared, not evidence of publication**. Do not use a PyPI install command until the release's public registry files and hashes have been verified. A PyPI name lookup returning 404 does not establish ownership, name eligibility, or publishing access.
106
+
107
+ The manual [`publish.yml`](.github/workflows/publish.yml) workflow supports [PyPI Trusted Publishing](https://docs.pypi.org/trusted-publishers/) using [uv](https://docs.astral.sh/uv/guides/package/#publishing-your-package). No ordinary push, PR, or tag publishes anything; no release-time rebuild occurs.
108
+
109
+ Before dispatch, the owner must configure a PyPI project or pending publisher for `rexdeck`: GitHub owner `Mathews-Tom`, repository `RexDeck`, workflow `publish.yml`, environment `pypi`. Configure that GitHub environment with `Mathews-Tom` as its **sole required reviewer** and restrict deployment to `main`; GitHub permits any listed reviewer to approve, so additional reviewers do not enforce owner approval. Leave self-review prevention disabled for owner-dispatched runs so the sole owner can approve an assistant-dispatched run under the owner's GitHub identity. These account/environment changes require owner participation and are not performed by setup or this repository. Missing protection or publisher access holds publication.
110
+
111
+ The S1 publication boundary assumes this remains a personal-account repository with Mathews-Tom as its sole administrator. Owner-controlled bypass/configuration is trusted; transfer to an organization requires re-evaluating that gate.
112
+
113
+ 1. Merge only the reviewed candidate. A successful **push on main** `checks.yml` run builds wheel/sdist once and retains the exact pair as `rexdeck-0.1.0`; download and inspect them, record both SHA-256 hashes, immutable artifact ID, full commit SHA, run URL, and runtime/security/review evidence. Artifacts expire; a rebuild requires fresh hashes and approval.
114
+ 2. Obtain explicit owner approval naming that exact commit, artifact ID, both filenames/hashes, and reviewed evidence. Any changed input requires renewed approval. After this approval only, create/verify the annotated `v0.1.0` tag and GitHub Release at that commit, attaching the same files; never rebuild for a tag.
115
+ 3. Dispatch `publish.yml` **from main at that approved commit**, entering the exact SHA, artifact ID, hashes and approval-evidence URL. The protected-environment reviewer must compare the dispatch inputs/run summary against the approval before approving the deployment. The workflow verifies repository/run provenance, tag target and hashes, then publishes only `approved/rexdeck-0.1.0.tar.gz` and `approved/rexdeck-0.1.0-py3-none-any.whl` with `uv publish --trusted-publishing always` (no token secret or broad `dist/*` upload).
116
+ 4. Verify [PyPI JSON](https://pypi.org/pypi/rexdeck/0.1.0/json) exposes both approved hashes. Then run an isolated no-cache public-index install, allowing index propagation, and repeat actual private Rex use/quit/refresh/disable. Only then document `uv tool install 'rexdeck==0.1.0'` as available:
117
+
118
+ ```sh
119
+ uv --no-cache run --isolated --no-project --index https://pypi.org/simple \
120
+ --with rexdeck==0.1.0 rexdeck --help
121
+ ```
122
+
123
+ CI and private endpoint/TUI captures do not prove owner-app palette, glyph, or desktop visual approval. Successful package installation does not prove native interaction; successful local builds do not prove registry publication. Keep those evidence claims separate.
124
+
125
+ ## License
126
+
127
+ RexDeck is [MIT licensed](LICENSE), included in wheel/sdist metadata. External executables are **not bundled**: [Yazi is MIT](https://github.com/sxyazi/yazi/blob/main/LICENSE) and [lazygit is MIT](https://github.com/jesseduffield/lazygit/blob/master/LICENSE), retaining upstream notices and terms. Git retains its own upstream license. Rex is an externally installed, separately licensed application prerequisite; RexDeck's MIT license does not grant rights to Rex or redistribute it.
@@ -0,0 +1,106 @@
1
+ # RexDeck
2
+
3
+ A collection of independently selectable plugins and extensions that bring existing tools into your own Rex application.
4
+
5
+ Files and local Git bring unmodified Yazi and lazygit into native Rex terminals. GitHub workflows, rich viewers, agent/subagent views, and task-provider integrations remain planned. Select the tools you need without installing an unrelated default suite.
6
+
7
+ ## Plugins and extensions
8
+
9
+ | Integration | Purpose | Status |
10
+ | --- | --- | --- |
11
+ | [Files](plugins/files/README.md) | Browse, preview, and manage files using unmodified Yazi in a native Rex terminal | Available |
12
+ | [Git](plugins/git/README.md) | Inspect, stage, and commit in the invoking repository/worktree using unmodified lazygit | Available |
13
+ | GitHub | Pull-request/issue workflows with explicit repository/host/account | Planned |
14
+ | Rich viewers | Rendered Markdown, PDF, and image viewing | Planned |
15
+ | Agents and subagents | Attention, observed state, and navigation to agent work | Planned |
16
+ | Tasks | Independently selectable Linear and ClickUp workflows | Planned |
17
+
18
+ Planned integrations are not implemented or installable yet. RexDeck is not published on PyPI; install the current source package as described below.
19
+
20
+ ## Getting started
21
+
22
+ The qualified platform is **macOS arm64, Rex API revision 10 baseline, and Python 3.12+**. Revision 10 is not an exact-version compatibility gate. Rex must already be installed and running; RexDeck does not bootstrap Rex, Homebrew, Python, or uv. Other platforms, remote hosts, and multi-device operation are not qualified.
23
+
24
+ Until the approved PyPI release is published, install the pinned public source baseline (Files and Git; before S1 dependency onboarding):
25
+
26
+ ```sh
27
+ uv tool install 'git+https://github.com/Mathews-Tom/RexDeck.git@d7f934e31d2becf53bc435ac931fa6e1b984bbd0'
28
+ ```
29
+
30
+ For the S1 candidate, use its reviewed checkout and record the exact commit:
31
+
32
+ ```sh
33
+ uv tool install .
34
+ rexdeck setup
35
+ rexdeck enable files
36
+ rexdeck status
37
+ ```
38
+
39
+ The installed command works from any directory; the package includes the shared native action and Python launcher for Files and Git. No shell wrapper, `RD_*` variables, or developer checkout is needed at runtime. Ensure the tool executable directory reported by `uv` is on `PATH`.
40
+
41
+ `setup` remembers the selected Rex configuration and running server without changing Rex configuration. Interactive setup asks for approval before saving a personal-server target. Use `enable files` or `enable git` independently, `status [files|git]` to inspect ownership/registration, and `disable <id>` to remove only that integration. Unqualified `status` reports both integrations, retaining healthy results alongside an integration-specific fault if its sibling cannot be inspected. See the plugin READMEs for prerequisites, capabilities, updates, and removal.
42
+
43
+ The uv-managed package remains the runtime source. Setup freezes the app data root from `$XDG_DATA_HOME/rexdeck` (default `~/.local/share/rexdeck`); each integration deploys `plugins/<id>/rexdeck_<id>.lua` there with an independently owned tracked loader in Rex's `init.lua`. Approved preferences remain in `$XDG_CONFIG_HOME/rexdeck/config.json`. Files receipt/lock paths remain in the saved `$XDG_STATE_HOME/rexdeck/files` workspace; Git uses its `git/` subdirectory. Later `XDG_DATA_HOME` changes do not retarget the saved installation. Run `disable` for every applied integration before uninstalling RexDeck or deliberately resetting a saved target, including integrations reported as disabled after a failed enable.
44
+
45
+ ### Selected dependencies
46
+
47
+ `setup` and `status` never install packages. `enable files` validates preinstalled Yazi; `enable git` validates preinstalled Git/lazygit. Qualified versions are **Yazi 26.9.1, lazygit 0.66.2 or 0.66.3**. Missing or unqualified selected tools produce actionable nonzero manual-install/version-check/rerun guidance without registration or installation prompts. RexDeck never installs, upgrades, downloads, cancels package transactions, or removes upstream tools, and never probes or executes Homebrew.
48
+
49
+ Executable discovery ignores empty and relative `PATH` entries. Absolute entries, including checkout directories and symlinks to them, remain eligible for version probes and lifecycle lookup. Put only trusted tools in absolute `PATH` directories. RexDeck captures followed-target device/inode/mode/size/nanosecond timestamps/owner before the version probe and rechecks that identity afterward and under its operation locks immediately before applying or enabling an integration. Replacement or modification requires rerunning enable. This is metadata-based detection, not pinned execution or protection against an executable changed after the final check.
50
+
51
+ Install dependencies yourself using qualified upstream releases: [Yazi 26.9.1](https://github.com/sxyazi/yazi/releases/tag/v26.9.1), [lazygit 0.66.2](https://github.com/jesseduffield/lazygit/releases/tag/v0.66.2) or [0.66.3](https://github.com/jesseduffield/lazygit/releases/tag/v0.66.3). Follow [Yazi installation](https://yazi-rs.github.io/docs/installation/) or [lazygit installation](https://github.com/jesseduffield/lazygit#installation); Git must also already be installed for Git integration.
52
+
53
+ If you choose Homebrew, first run `brew info yazi` or `brew info lazygit` yourself and inspect the selected version and dependency/source-build/upgrade effects. **Skip Homebrew if its selected version is not qualified**; use the qualified upstream release instead. Only if the version qualifies and you accept the package effects, run the selected `brew install yazi` or `brew install lazygit` yourself. RexDeck does not qualify a Homebrew version, prefix or transaction; all package effects remain owner-controlled.
54
+
55
+ Check `yazi --version` or `lazygit --version` (and `git --version` for Git), then rerun `rexdeck enable files` or `rexdeck enable git`. The pinned pre-S1 source baseline above requires manual dependency provisioning too, but does not contain S1's selected-tool qualification/guidance behavior.
56
+
57
+ Rex, Yazi, lazygit, Git, Homebrew, Python and uv remain externally managed prerequisites. No install-all, sudo, silent upgrade, tool configuration change, or upstream package removal is performed. `disable` and Python package uninstall leave upstream tools installed.
58
+
59
+ ## Design principles
60
+
61
+ - **Reuse tools, do not rebuild them.** Preserve their normal interfaces, configuration, authentication, and capabilities.
62
+ - **Prefer native Rex integration.** Use native actions and panes where sufficient. LazyRex is optional only where a particular integration needs an existing capability; it is not a collection-wide dependency.
63
+ - **Keep features independently selectable.** Install only the dependencies needed by the chosen integration; no implicit default suite, hooks, or autostart.
64
+ - **Preserve user context and ownership.** Pass explicit launch context and structured arguments, keep unrelated work intact, and make removal reversible.
65
+ - **Disclose capabilities accurately.** External tools run as your OS account and can be write-capable; they are not sandboxed or automatically read-only.
66
+
67
+ ## Development
68
+
69
+ Install LuaJIT before running the suite: native Lua behavior tests require `lua` or `luajit` and otherwise skip. On macOS:
70
+
71
+ ```sh
72
+ brew install luajit
73
+ uv sync --locked
74
+ uv run ruff check .
75
+ uv run ruff format --check .
76
+ uv run mypy --strict
77
+ uv run pytest
78
+ ```
79
+
80
+ Plugin-specific syntax checks and real interaction verification belong in each plugin's README. Keep plugin documentation under `plugins/<name>/README.md` and packaged runtime assets under `src/rexdeck/plugins/<name>/`. Link available integrations from the table above. Do not create empty plugin folders for planned features.
81
+
82
+ ## Release preparation and owner gate
83
+
84
+ Version **0.1.0 is prepared, not evidence of publication**. Do not use a PyPI install command until the release's public registry files and hashes have been verified. A PyPI name lookup returning 404 does not establish ownership, name eligibility, or publishing access.
85
+
86
+ The manual [`publish.yml`](.github/workflows/publish.yml) workflow supports [PyPI Trusted Publishing](https://docs.pypi.org/trusted-publishers/) using [uv](https://docs.astral.sh/uv/guides/package/#publishing-your-package). No ordinary push, PR, or tag publishes anything; no release-time rebuild occurs.
87
+
88
+ Before dispatch, the owner must configure a PyPI project or pending publisher for `rexdeck`: GitHub owner `Mathews-Tom`, repository `RexDeck`, workflow `publish.yml`, environment `pypi`. Configure that GitHub environment with `Mathews-Tom` as its **sole required reviewer** and restrict deployment to `main`; GitHub permits any listed reviewer to approve, so additional reviewers do not enforce owner approval. Leave self-review prevention disabled for owner-dispatched runs so the sole owner can approve an assistant-dispatched run under the owner's GitHub identity. These account/environment changes require owner participation and are not performed by setup or this repository. Missing protection or publisher access holds publication.
89
+
90
+ The S1 publication boundary assumes this remains a personal-account repository with Mathews-Tom as its sole administrator. Owner-controlled bypass/configuration is trusted; transfer to an organization requires re-evaluating that gate.
91
+
92
+ 1. Merge only the reviewed candidate. A successful **push on main** `checks.yml` run builds wheel/sdist once and retains the exact pair as `rexdeck-0.1.0`; download and inspect them, record both SHA-256 hashes, immutable artifact ID, full commit SHA, run URL, and runtime/security/review evidence. Artifacts expire; a rebuild requires fresh hashes and approval.
93
+ 2. Obtain explicit owner approval naming that exact commit, artifact ID, both filenames/hashes, and reviewed evidence. Any changed input requires renewed approval. After this approval only, create/verify the annotated `v0.1.0` tag and GitHub Release at that commit, attaching the same files; never rebuild for a tag.
94
+ 3. Dispatch `publish.yml` **from main at that approved commit**, entering the exact SHA, artifact ID, hashes and approval-evidence URL. The protected-environment reviewer must compare the dispatch inputs/run summary against the approval before approving the deployment. The workflow verifies repository/run provenance, tag target and hashes, then publishes only `approved/rexdeck-0.1.0.tar.gz` and `approved/rexdeck-0.1.0-py3-none-any.whl` with `uv publish --trusted-publishing always` (no token secret or broad `dist/*` upload).
95
+ 4. Verify [PyPI JSON](https://pypi.org/pypi/rexdeck/0.1.0/json) exposes both approved hashes. Then run an isolated no-cache public-index install, allowing index propagation, and repeat actual private Rex use/quit/refresh/disable. Only then document `uv tool install 'rexdeck==0.1.0'` as available:
96
+
97
+ ```sh
98
+ uv --no-cache run --isolated --no-project --index https://pypi.org/simple \
99
+ --with rexdeck==0.1.0 rexdeck --help
100
+ ```
101
+
102
+ CI and private endpoint/TUI captures do not prove owner-app palette, glyph, or desktop visual approval. Successful package installation does not prove native interaction; successful local builds do not prove registry publication. Keep those evidence claims separate.
103
+
104
+ ## License
105
+
106
+ RexDeck is [MIT licensed](LICENSE), included in wheel/sdist metadata. External executables are **not bundled**: [Yazi is MIT](https://github.com/sxyazi/yazi/blob/main/LICENSE) and [lazygit is MIT](https://github.com/jesseduffield/lazygit/blob/master/LICENSE), retaining upstream notices and terms. Git retains its own upstream license. Rex is an externally installed, separately licensed application prerequisite; RexDeck's MIT license does not grant rights to Rex or redistribute it.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tom Mathews
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,113 @@
1
+ # Files
2
+
3
+ Launch unmodified [Yazi](https://yazi-rs.github.io/) from Rex's native palette in the invoking terminal's working directory. Files requires no LazyRex hub, SDK, renderer patch, Go build, or background service.
4
+
5
+ [Back to RexDeck](../../README.md)
6
+
7
+ ## Requirements
8
+
9
+ - macOS arm64 and an existing Rex CLI/server; API revision 10 is the established baseline, not an exact-version compatibility gate.
10
+ - Python 3.12+, `uv`, and Yazi on `PATH` at qualified version **26.9.1**. Other installed versions require manual resolution, not an implicit upgrade.
11
+ - Terminal/font support required by your Yazi configuration. RexDeck does not install fonts or change tool settings.
12
+
13
+ Other platforms, remote hosts, and multi-device use are not qualified. RexDeck is not published on PyPI; install from the source checkout.
14
+
15
+ ## Install and set up once
16
+
17
+ From the RexDeck checkout:
18
+
19
+ ```sh
20
+ uv tool install .
21
+ ```
22
+
23
+ Ensure the tool executable directory reported by `uv` is on `PATH`. The installed package includes the Files action and launcher; subsequent commands work from any directory and do not require the checkout.
24
+
25
+ With your Rex application already running:
26
+
27
+ ```sh
28
+ rexdeck setup
29
+ rexdeck enable files
30
+ rexdeck status
31
+ ```
32
+
33
+ `setup` discovers the current Rex endpoint and uses `REX_CONFIG`, or the standard `$XDG_CONFIG_HOME/rex/init.lua` / `~/.config/rex/init.lua` configuration. It displays the target and requests approval before remembering a personal-server selection. It does not install an action, change Rex configuration, or start a missing server. `enable files` performs the owned installation and enables the native action; no separate apply/start commands or shell wrapper are needed.
34
+
35
+ Setup/status never install tools. `enable files` validates preinstalled Yazi **26.9.1**, reuses its qualified executable and revalidates metadata identity and the saved target before registration. Missing or unqualified Yazi returns actionable nonzero manual-install/version-check/rerun guidance without a prompt or partial registration. RexDeck never installs, upgrades or removes Yazi, or probes/executes Homebrew.
36
+
37
+ Install [Yazi 26.9.1](https://github.com/sxyazi/yazi/releases/tag/v26.9.1) yourself following [upstream installation](https://yazi-rs.github.io/docs/installation/). If choosing Homebrew, inspect `brew info yazi` yourself first; skip Homebrew if its selected version is not 26.9.1 and use that upstream release instead. Only run `brew install yazi` yourself if the selected version qualifies and you accept its dependency/source-build/upgrade effects. Check `yazi --version`, then rerun `rexdeck enable files`. RexDeck qualifies neither Homebrew's version nor its prefix and never owns package transactions. Rex, Homebrew, Python and uv also remain externally managed; disable/uninstall leaves Yazi and its settings intact.
38
+
39
+ For a custom target or noninteractive setup, select and approve it explicitly once:
40
+
41
+ ```sh
42
+ rexdeck setup \
43
+ --config "$HOME/.config/rex/init.lua" \
44
+ --server "unix://$HOME/Library/Application%20Support/rex/server.sock" \
45
+ --real-server
46
+ rexdeck enable files
47
+ ```
48
+
49
+ The `--real-server` flag authorizes the personal target for subsequent explicit enable/disable commands. For an isolated server, pass its existing config and Unix socket with `--config` and `--server`, omit `--real-server`, and isolate RexDeck's XDG directories. Isolated sockets must resolve under `/tmp` or `/private/tmp`; they are not interchangeable with your application's endpoint.
50
+
51
+ Settings are stored in `$XDG_CONFIG_HOME/rexdeck/config.json` (default `~/.config/rexdeck/config.json`). Files ownership records use `$XDG_STATE_HOME/rexdeck/files` (default `~/.local/state/rexdeck/files`), remembered at setup time. Git uses a separate `git/` subdirectory of that saved workspace. There is no required `-native` suffix. Later commands use the saved target, not ambient `REX_SERVER` or changing shell variables. Malformed settings, changed config symlink targets, and replacing an existing saved target are refused rather than silently adopted. To select a different target, disable every integration first, deliberately remove the saved RexDeck `config.json`, then run setup for the new target with a fresh ownership location. Keep old receipts until removal and rollback safety are verified; never reuse them for another target. XDG settings here do not relocate `uv` or Rex's own configuration.
52
+
53
+ The generated module is `$XDG_DATA_HOME/rexdeck/plugins/files/rexdeck_files.lua` (default `~/.local/share/rexdeck/plugins/files/rexdeck_files.lua`). Setup resolves, validates, and saves the app data root (`…/rexdeck`) once; later commands reuse it even if ambient `XDG_DATA_HOME` changes. The uv-managed package remains the action/launcher source. Only the owned tracked `require` loader is added to the canonical Rex config target, including when the selected config is a symlink; it restores module search path/cache state and lets Rex detect action changes. The module data directory—not the config parent—cannot contain `;` or `?`, which have special module-search meanings. Symlinked or redirecting deployment subdirectories, conflicting files, and changed owned bytes are refused rather than overwritten or silently redirected to config-adjacent storage.
54
+
55
+ Setup freezes the resolved Unix socket as well as the config target; redirecting an input socket alias cannot retarget later commands. The generated module embeds the applied Lua action and Python launcher together. Updating package files does not change an already applied launcher; `rexdeck enable files` explicitly refreshes both.
56
+
57
+ The selected config must resolve to the running server's startup config, as reported by its read-only `client.keymap` API. Setting the CLI's `REX_CONFIG` alone cannot change what that server reloads. Setup and later lifecycle commands reject a mismatch or missing server config identity before owned writes; restart the intended server with the correct config before selecting it.
58
+
59
+ ### Existing native Files setup
60
+
61
+ Current settings schema **2** and Files receipt schema **3** remain compatible when adding Git. Retain the saved target and explicitly run `rexdeck enable files` after reinstalling to refresh packaged source/interpreter paths; no disable/reset is required for this upgrade. Git enable/disable preserves Files and open Yazi panes. Unqualified `status` reports both integrations; `status files` reports Files alone.
62
+
63
+ Old/unknown schemas, foreign receipts, config-adjacent deployments, and previous LazyRex installations are not automatically adopted. For those older layouts only, retain the old package and ownership evidence, use that implementation's disable against its verified target, and deliberately establish a fresh supported setup after removal. Do not blindly delete, rename, or reuse applied ownership.
64
+
65
+ ### Previous LazyRex-based Files
66
+
67
+ Do not reuse its workspace with native Files. Close the identified old Files/previews and use the **previous implementation's** disable command or approved frozen cleanup helper with its original target and required approval. If cleanup already returned `"state": "disabled"` with `"conflicts": []`, do not repeat it. Keep ownership evidence until disabled state and rollback safety are verified; obsolete owned workspace/runtime artifacts may then be removed under explicit cleanup authority. Continue with a fresh native setup, not an adopted legacy receipt.
68
+
69
+ The native CLI refuses legacy receipts; it does not stop or adopt an old hub automatically.
70
+
71
+ ## Use Files
72
+
73
+ From a project terminal, open Rex's native palette and choose **RexDeck Files**. A native terminal split opens Yazi in that terminal's reported working directory. Missing or invalid context fails explicitly; the installer directory, home, and later focus are never substitutes.
74
+
75
+ Use Yazi's normal navigation, previews, opening, configuration, and file operations. Up/Down already wrap from first to last entry and back in the verified upstream version. RexDeck does not replace Yazi's UI, keys, theme, plugins, previewers, or configuration. The initial directory is not a jail, and Yazi is **write-capable**, not read-only.
76
+
77
+ Quit Yazi with its normal `q` binding to return focus to the exact captured project terminal. Each deliberate launch has its own origin; no replacement-pane registry or process sweeper is involved. A missing origin, failed launch, nonzero Yazi exit, or focus failure stays visible for acknowledgement instead of silently selecting another pane. User-defined Yazi bindings retain their own behavior.
78
+
79
+ Tools run as your OS account, not in a sandbox. Tool-native opening/previewing can invoke programs configured by the user. RexDeck supplies structured argv and cwd, not a shell-interpolated command.
80
+
81
+ ## Disable and update
82
+
83
+ ```sh
84
+ rexdeck disable files
85
+ ```
86
+
87
+ Disable removes only unchanged owned loader/module state and reloads the selected config. It preserves config symlinks/modes, unrelated edits, user tool configuration, existing Yazi panes, and data. Changed artifacts produce conflicts for judgment. Failed operations recover owned state without overwriting concurrent edits. Disable never enables the historical Files POC or touches unrelated LazyRex instances. Saved target settings remain available for the next `rexdeck enable files`.
88
+
89
+ Ctrl-C, SIGTERM, and SIGHUP during a lifecycle mutation run the same rollback path; further cancellation is deferred until recovery finishes. SIGKILL, power loss, and OS crashes cannot run Python recovery, and there is no durable crash-recovery journal. Retain ownership records and inspect artifacts before manual recovery after an uncatchable interruption.
90
+
91
+ After updating the source checkout, reinstall and refresh the integration before launching Files again:
92
+
93
+ ```sh
94
+ uv tool install --reinstall .
95
+ rexdeck enable files
96
+ rexdeck status
97
+ ```
98
+
99
+ This refresh sequence applies to the current schemas. For a pre-cutover installation, follow **Existing native Files setup** before replacing the old package.
100
+
101
+ Re-enabling verifies recorded ownership before refreshing the packaged action, launcher, and interpreter paths. Before `uv tool uninstall rexdeck`, run `disable` for every applied integration (`rexdeck disable files` and, when selected, `rexdeck disable git`), including integrations reported as disabled after a failed enable. A disabled action can still have an applied loader and module. Uninstalling the Python tool alone does not remove Rex configuration.
102
+
103
+ ## Development verification
104
+
105
+ Run the shared checks from the [root README](../../README.md#development), plus this plugin's Lua syntax screen:
106
+
107
+ ```sh
108
+ luajit -b src/rexdeck/plugins/files/main.lua /tmp/rexdeck-files-syntax.out
109
+ ```
110
+
111
+ Lua compilation is not runtime proof. Build and install the wheel outside the checkout, then exercise setup/enable/status, native action/Yazi navigation and quit focus, reinstall/refresh, and disable on a private Rex server. Owner-app palette, glyphs, and visual behavior require owner-led checking rather than a CLI-only GUI claim.
112
+
113
+ Yazi is an unbundled [MIT-licensed upstream tool](https://github.com/sxyazi/yazi/blob/main/LICENSE); Rex remains an external, separately licensed prerequisite. See the root [release owner gate](../../README.md#release-preparation-and-owner-gate) for pinned source installation and publication/evidence limits.
@@ -0,0 +1,63 @@
1
+ # Git
2
+
3
+ Launch unmodified [lazygit](https://github.com/jesseduffield/lazygit) in a native Rex terminal, using the invoking terminal's repository/worktree and returning to its captured origin.
4
+
5
+ [Back to RexDeck](../../README.md)
6
+
7
+ ## Requirements and capabilities
8
+
9
+ - macOS arm64, existing Rex CLI/server (API revision 10 baseline, not an exact-version gate), Python 3.12+, and `uv`.
10
+ - `git` and `lazygit` on `PATH`. Lazygit **0.66.2 and 0.66.3** are qualified versions; other installed versions require manual resolution, never implicit upgrade. Private runtime qualification used Git 2.56.0; other platforms are not qualified.
11
+ - An invoking terminal that reports its current local directory to Rex. A normal repository subdirectory or linked worktree is supported; a bare repository, missing directory, or unavailable cwd is rejected.
12
+
13
+ Lazygit is **write-capable**, runs as your OS account, and retains its normal keys, settings, editor, custom commands, authentication, and network operations. RexDeck neither sandboxes it nor makes it read-only. Upstream Git hooks and configured commands retain their effects. Enable does not fetch, stage, commit, push, log in, or change Git settings. The initial directory is not a filesystem jail.
14
+
15
+ ## Enable and use
16
+
17
+ Install RexDeck as described in the root README, then select one target once:
18
+
19
+ ```sh
20
+ rexdeck setup
21
+ rexdeck enable git
22
+ rexdeck status git
23
+ ```
24
+
25
+ Setup/status never install packages. `enable git` validates preinstalled Git and qualified lazygit **0.66.2 or 0.66.3**, reusing the qualified executable and revalidating metadata identity plus the saved target before registration. Missing or unqualified selected tools return actionable nonzero manual-install/version-check/rerun guidance without prompts or partial registration. RexDeck never installs, upgrades or removes Git/lazygit, or probes/executes Homebrew.
26
+
27
+ Install [lazygit 0.66.2](https://github.com/jesseduffield/lazygit/releases/tag/v0.66.2) or [0.66.3](https://github.com/jesseduffield/lazygit/releases/tag/v0.66.3) yourself using [upstream instructions](https://github.com/jesseduffield/lazygit#installation); provision Git separately. If choosing Homebrew, inspect `brew info lazygit` yourself first; skip Homebrew if its selected version is not qualified and use a qualified upstream release instead. Only run `brew install lazygit` yourself when its version qualifies and you accept its dependency/source-build/upgrade effects. Check `lazygit --version` and `git --version`, then rerun `rexdeck enable git`. RexDeck qualifies neither Homebrew's version nor its prefix; the owner controls all package effects. Disable/uninstall leaves Git/lazygit and their configuration intact.
28
+
29
+ From the intended repository terminal, choose **RexDeck Git** in Rex's native palette. The terminal split runs lazygit with structured argv and the validated invoking cwd. Git performs its normal repository discovery; RexDeck does not manufacture a `.git` directory or collapse linked worktrees to their common repository.
30
+
31
+ Use upstream lazygit controls to inspect diffs, stage, commit, and perform other Git operations. Normal `q` returns to the exact captured terminal. Each deliberate launch is independent. If the origin has closed, focus restoration fails visibly for acknowledgement instead of selecting a replacement pane. Launch failures and nonzero tool exits are also visible.
32
+
33
+ Inherited repository/config-injection/discovery variables such as `GIT_DIR`, `GIT_WORK_TREE`, `GIT_COMMON_DIR`, `GIT_INDEX_FILE`, `GIT_OBJECT_DIRECTORY`, `GIT_ALTERNATE_OBJECT_DIRECTORIES`, `GIT_NAMESPACE`, `GIT_CONFIG`, `GIT_CONFIG_COUNT`, `GIT_CONFIG_PARAMETERS`, `GIT_CONFIG_KEY_*`, `GIT_CONFIG_VALUE_*`, `GIT_CEILING_DIRECTORIES`, and `GIT_DISCOVERY_ACROSS_FILESYSTEM` are rejected, including empty values. Resolve the ambiguous environment before launching; RexDeck does not unset it silently or change your configuration. Normal upstream settings homes and supported authentication stores remain unchanged.
34
+
35
+ Git validation searches only absolute `PATH` directories and invokes the resolved executable explicitly; relative and empty entries cannot select a Git binary from the invoking repository. Git discovery failures retain upstream diagnostics, including ownership recovery guidance; RexDeck does not change `safe.directory`.
36
+
37
+ ## Independent ownership, update, and removal
38
+
39
+ `enable files` and `enable git` share one saved target but own separate actions, modules, loaders, and receipts. `status` reports both; `status files` and `status git` inspect one. Ready means owned configuration/action registration matches the current package, not that a tool process is running.
40
+
41
+ Git deploys `plugins/git/rexdeck_git.lua` under the saved RexDeck data root. Its receipt/lock directory is `git/` beneath the saved Files-compatible ownership workspace. Files' existing settings schema 2, receipt schema 3, paths, and loader identity remain valid. Shared config/data-root locks prevent overlapping lifecycle mutations; a competing operation fails explicitly and can be retried after the other finishes.
42
+
43
+ After reinstalling the updated package, explicitly refresh every integration you use:
44
+
45
+ ```sh
46
+ rexdeck enable git
47
+ rexdeck enable files
48
+ rexdeck status
49
+ ```
50
+
51
+ Only unchanged owned artifacts are refreshed. Disable is independent and preserves siblings, existing tool panes, unrelated config edits, symlinks/modes, Git settings, repositories, and credentials:
52
+
53
+ ```sh
54
+ rexdeck disable git
55
+ ```
56
+
57
+ Run `disable` for **every applied** integration before uninstalling RexDeck or deliberately replacing its saved target, including integrations reported as disabled after a failed enable. A disabled action can still have an applied loader and module; Python package removal alone does not remove Rex loaders. Changed artifacts produce an ownership conflict for manual judgment; they are not silently deleted. Cancellation recovery has the same limits as Files: SIGKILL/power loss cannot run rollback.
58
+
59
+ ## Verification
60
+
61
+ Run the root Ruff/format/strict-mypy/full-pytest chain and compile the shared packaged `src/rexdeck/plugins/files/main.lua` asset. Build/install the wheel outside the checkout and use a private native Rex endpoint with disposable repositories. Exercise actual diff/stage/commit, normal subdirectory and linked-worktree origins, independent quits after focus changes, closed-origin failure, missing tools, both sibling enable/disable orders, and open-pane survival. Native terminal captures prove the private TUI interaction; they do not claim owner-app palette/font/desktop visual approval.
62
+
63
+ Lazygit is an unbundled [MIT-licensed upstream tool](https://github.com/jesseduffield/lazygit/blob/master/LICENSE). Rex is external and separately licensed. Publication is held until the root [release owner gate](../../README.md#release-preparation-and-owner-gate) is satisfied; source install remains supported while unpublished.
@@ -0,0 +1,60 @@
1
+ [build-system]
2
+ requires = ["hatchling>=1.27,<2"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "rexdeck"
7
+ version = "0.1.0"
8
+ description = "Native Rex integrations for independently selectable existing tools"
9
+ readme = "README.md"
10
+ requires-python = ">=3.12"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ authors = [{ name = "Tom Mathews" }]
14
+ keywords = ["rex", "terminal", "yazi", "lazygit"]
15
+ classifiers = [
16
+ "Development Status :: 4 - Beta",
17
+ "Environment :: Console",
18
+ "Operating System :: MacOS :: MacOS X",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3 :: Only",
21
+ "Programming Language :: Python :: 3.12",
22
+ ]
23
+ dependencies = []
24
+
25
+ [project.urls]
26
+ Homepage = "https://github.com/Mathews-Tom/RexDeck"
27
+ Repository = "https://github.com/Mathews-Tom/RexDeck"
28
+ Issues = "https://github.com/Mathews-Tom/RexDeck/issues"
29
+ Changelog = "https://github.com/Mathews-Tom/RexDeck/blob/main/CHANGELOG.md"
30
+
31
+ [project.scripts]
32
+ rexdeck = "rexdeck.cli:main"
33
+
34
+ [dependency-groups]
35
+ dev = ["mypy>=1.15,<2", "pytest>=8,<10", "ruff>=0.11,<1"]
36
+
37
+ [tool.hatch.build.targets.wheel]
38
+ packages = ["src/rexdeck"]
39
+
40
+ [tool.hatch.build.targets.sdist]
41
+ only-include = [
42
+ "src/rexdeck", "tests", "plugins", "README.md", "CHANGELOG.md",
43
+ "LICENSE", "pyproject.toml", "uv.lock",
44
+ ]
45
+
46
+ [tool.pytest.ini_options]
47
+ testpaths = ["tests"]
48
+ pythonpath = ["src"]
49
+
50
+ [tool.mypy]
51
+ strict = true
52
+ files = ["src", "tests"]
53
+ mypy_path = ["src"]
54
+
55
+ [tool.ruff]
56
+ target-version = "py312"
57
+ line-length = 88
58
+
59
+ [tool.ruff.lint]
60
+ select = ["E4", "E7", "E9", "F", "I", "UP"]
@@ -0,0 +1 @@
1
+ """RexDeck's explicit repository-local setup tools."""