opencode-swap 0.4.0__tar.gz → 0.4.2__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.
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/PKG-INFO +22 -4
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/README.md +21 -3
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/integrations/opencode-tui-plugin/README.md +11 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/pyproject.toml +1 -1
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/__init__.py +1 -1
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/.gitignore +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/LICENSE +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/architecture.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/opencode-auth.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/provider-research-prompt.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/provider-support.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/releasing.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/roadmap.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/security.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/docs/testing.md +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/integrations/opencode-tui-plugin/LICENSE +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/integrations/opencode-tui-plugin/src/tui.tsx +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/__main__.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/atomic.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/backup.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/cli.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/exceptions.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/locking.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/macos_keychain.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/models.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/oauth_jwt.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/oauth_refresh.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/opencode_auth.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/paths.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/process_detection.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/__init__.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/api.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/base.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/common.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/github_copilot.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/openai.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/poe.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/xai.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/providers/zai.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/sealed.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/store.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/switcher.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/transfer.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/src/opencode_swap/usage.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/__init__.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/helpers.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_atomic.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_backup.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_cli.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_concurrency.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_locking.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_macos_keychain.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_main.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_models.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_multi_provider.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_oauth_jwt.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_oauth_refresh.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_opencode_auth.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_paths.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_providers_multi.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_providers_openai.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_registry.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_store.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_switcher.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_switcher_restore.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_switcher_transfer.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_switcher_use.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_transfer.py +0 -0
- {opencode_swap-0.4.0 → opencode_swap-0.4.2}/tests/test_usage.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: opencode-swap
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: Multi-account switcher for OpenCode
|
|
5
5
|
Project-URL: Homepage, https://github.com/leinardi/opencode-swap
|
|
6
6
|
Project-URL: Repository, https://github.com/leinardi/opencode-swap
|
|
@@ -78,6 +78,12 @@ covers the storage trade-offs each approach makes.
|
|
|
78
78
|
|
|
79
79
|
## Install
|
|
80
80
|
|
|
81
|
+
Two pieces ship from this repo: the CLI, which does all the work, and an
|
|
82
|
+
optional OpenCode TUI plugin that surfaces it inside the TUI. Install the CLI
|
|
83
|
+
first — the plugin shells out to it.
|
|
84
|
+
|
|
85
|
+
### 1. CLI (required)
|
|
86
|
+
|
|
81
87
|
```bash
|
|
82
88
|
uv tool install opencode-swap # or: pipx install opencode-swap
|
|
83
89
|
opencode-swap --help
|
|
@@ -85,6 +91,20 @@ opencode-swap --help
|
|
|
85
91
|
|
|
86
92
|
`uvx opencode-swap --help` works too, without installing anything permanently.
|
|
87
93
|
|
|
94
|
+
### 2. OpenCode TUI plugin (optional)
|
|
95
|
+
|
|
96
|
+
Adds the active account and its usage to the session prompt, plus `/swap`,
|
|
97
|
+
`/swap-next`, and `/swap-refresh` in the command palette:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
opencode plugin @leinardi/opencode-swap --global
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Restart OpenCode afterwards. The plugin invokes `opencode-swap` from your
|
|
104
|
+
`PATH`, so it needs the CLI from step 1 already installed. See
|
|
105
|
+
[OpenCode TUI integration](#opencode-tui-integration) for what it renders and
|
|
106
|
+
when it stays hidden.
|
|
107
|
+
|
|
88
108
|
### From source
|
|
89
109
|
|
|
90
110
|
```bash
|
|
@@ -154,9 +174,7 @@ ids are shown truncated to their last four characters.
|
|
|
154
174
|
|
|
155
175
|
## OpenCode TUI integration
|
|
156
176
|
|
|
157
|
-
|
|
158
|
-
opencode plugin @leinardi/opencode-swap --global
|
|
159
|
-
```
|
|
177
|
+
Install it with [step 2 of Install](#2-opencode-tui-plugin-optional).
|
|
160
178
|
|
|
161
179
|
[`integrations/opencode-tui-plugin`](https://github.com/leinardi/opencode-swap/blob/main/integrations/opencode-tui-plugin)
|
|
162
180
|
uses OpenCode's supported TUI-plugin API to render active account and
|
|
@@ -51,6 +51,12 @@ covers the storage trade-offs each approach makes.
|
|
|
51
51
|
|
|
52
52
|
## Install
|
|
53
53
|
|
|
54
|
+
Two pieces ship from this repo: the CLI, which does all the work, and an
|
|
55
|
+
optional OpenCode TUI plugin that surfaces it inside the TUI. Install the CLI
|
|
56
|
+
first — the plugin shells out to it.
|
|
57
|
+
|
|
58
|
+
### 1. CLI (required)
|
|
59
|
+
|
|
54
60
|
```bash
|
|
55
61
|
uv tool install opencode-swap # or: pipx install opencode-swap
|
|
56
62
|
opencode-swap --help
|
|
@@ -58,6 +64,20 @@ opencode-swap --help
|
|
|
58
64
|
|
|
59
65
|
`uvx opencode-swap --help` works too, without installing anything permanently.
|
|
60
66
|
|
|
67
|
+
### 2. OpenCode TUI plugin (optional)
|
|
68
|
+
|
|
69
|
+
Adds the active account and its usage to the session prompt, plus `/swap`,
|
|
70
|
+
`/swap-next`, and `/swap-refresh` in the command palette:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
opencode plugin @leinardi/opencode-swap --global
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Restart OpenCode afterwards. The plugin invokes `opencode-swap` from your
|
|
77
|
+
`PATH`, so it needs the CLI from step 1 already installed. See
|
|
78
|
+
[OpenCode TUI integration](#opencode-tui-integration) for what it renders and
|
|
79
|
+
when it stays hidden.
|
|
80
|
+
|
|
61
81
|
### From source
|
|
62
82
|
|
|
63
83
|
```bash
|
|
@@ -127,9 +147,7 @@ ids are shown truncated to their last four characters.
|
|
|
127
147
|
|
|
128
148
|
## OpenCode TUI integration
|
|
129
149
|
|
|
130
|
-
|
|
131
|
-
opencode plugin @leinardi/opencode-swap --global
|
|
132
|
-
```
|
|
150
|
+
Install it with [step 2 of Install](#2-opencode-tui-plugin-optional).
|
|
133
151
|
|
|
134
152
|
[`integrations/opencode-tui-plugin`](https://github.com/leinardi/opencode-swap/blob/main/integrations/opencode-tui-plugin)
|
|
135
153
|
uses OpenCode's supported TUI-plugin API to render active account and
|
|
@@ -40,6 +40,17 @@ Add this path to global `~/.config/opencode/tui.json`:
|
|
|
40
40
|
OpenCode installs `@opencode-ai/plugin` for config-scoped local plugins when
|
|
41
41
|
needed. Restart the TUI after editing `tui.json`.
|
|
42
42
|
|
|
43
|
+
## Build
|
|
44
|
+
|
|
45
|
+
The npm payload ships `dist/tui.js`, precompiled with OpenTUI's own Solid
|
|
46
|
+
transform (`bun run build`). This is not an optimization: OpenCode's runtime
|
|
47
|
+
Solid transform deliberately skips anything under `node_modules`, so a
|
|
48
|
+
package that exports raw `.tsx` loads through Bun's generic JSX runtime
|
|
49
|
+
instead — it renders once with no reactivity wired, silently freezing the
|
|
50
|
+
widget while commands keep working. A checkout path is outside
|
|
51
|
+
`node_modules`, so "Install from this checkout" above keeps working from
|
|
52
|
+
`src/tui.tsx` directly.
|
|
53
|
+
|
|
43
54
|
## Typecheck
|
|
44
55
|
|
|
45
56
|
Requires Bun 1.3.14. Root `make verify` installs locked dependencies and runs
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|