devlaunch 0.0.9__tar.gz → 0.0.10__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.
@@ -184,3 +184,6 @@ logs/
184
184
 
185
185
  # uv is not this project's package manager (pixi.lock is authoritative)
186
186
  uv.lock
187
+
188
+ # Agent worktrees (local scratch; never committed)
189
+ .claude/worktrees/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devlaunch
3
- Version: 0.0.9
3
+ Version: 0.0.10
4
4
  Summary: DevLaunch - A streamlined CLI for devpod workspaces
5
5
  Project-URL: Source, https://github.com/blooop/devlaunch
6
6
  Project-URL: Home, https://github.com/blooop/devlaunch
@@ -123,6 +123,50 @@ dl user/repo@branch # Create from specific branch
123
123
  dl ./path # Create from local path
124
124
  ```
125
125
 
126
+ ## Workspace IDs
127
+
128
+ `dl user/repo@branch` derives one id that names both the devpod workspace (what you
129
+ see in `dl --ls`) and the clone directory under `~/.cache/devlaunch/repos/`:
130
+
131
+ ```
132
+ <repo-slug>-<branch-slug>-<syllables> at most 38 characters
133
+
134
+ blooop/devlaunch@main -> devlaunch-main-zovomobo
135
+ blooop/devlaunch@feature/auth -> devlaunch-feature-auth-poliseno
136
+ blooop/devlaunch@feature-auth -> devlaunch-feature-auth-nesatabe
137
+ blooop/test_renv@nb4 -> test-renv-nb4-polenita
138
+ kinisi-robotics/kinisi_ros@ags-devcontainer-tooling-support
139
+ -> kinisi-ros-ags-devcontainer-t-lenevere
140
+ blooop/devlaunch@dependabot/github_actions/codecov/codecov-action-6
141
+ -> devlaunch-dependabot-codecov-sifivasa
142
+ ```
143
+
144
+ The eight-character syllable suffix is a hash of the full `(owner, repo, branch)` triple.
145
+ It is what makes the id unique: the readable part is shortened to fit the length limit,
146
+ and shortening it does not affect whether two branches share an id. Long branch names
147
+ drop whole `/`-separated middle segments before losing characters, so the part that
148
+ identifies the branch survives. Note the third and fourth lines above: `feature/auth` and
149
+ `feature-auth` read the same once slugged but are different branches, and they get
150
+ different ids.
151
+
152
+ Owner and repo are matched case-insensitively, the way GitHub treats them, so
153
+ `dl NVIDIA/cuda-samples@main` and `dl nvidia/cuda-samples@main` are the same workspace.
154
+ Branch names are case-sensitive, because git refs are.
155
+
156
+ URL specs (`dl github.com/owner/repo`) get an id in the same shape, with the suffix
157
+ hashed over the URL.
158
+
159
+ The id is also the container hostname, so it stays well inside the 38-character budget
160
+ to leave room for tools that add their own prefixes.
161
+
162
+ Branch names must be safe as both git refs and directory names — a name with a space or
163
+ a leading dash is rejected rather than quietly rewritten.
164
+
165
+ > **Upgrading:** this id format is new. Existing workspaces and clone directories were
166
+ > named by the previous scheme and will get new ids, so `dl user/repo@branch` creates a
167
+ > fresh workspace and leaves the old container behind. Remove stale ones with
168
+ > `dl <old-id> rm`, which still finds and deletes the old clone directory.
169
+
126
170
  ## Workspace Commands
127
171
 
128
172
  | Command | Description |
@@ -199,7 +243,23 @@ stays in place — including one it was given before you set
199
243
  | `dl --prune-worktrees [days]` | Remove unused worktrees (default: 30 days) |
200
244
  | `dl --refresh` | Refresh completion cache |
201
245
  | `dl --help, -h` | Show this help |
202
- | `dl --version` | Show version |
246
+ | `dl --version` | Show version (an editable install also names the tree it runs from) |
247
+
248
+ A released install prints the version and nothing else. An install made in
249
+ editable mode says so and names the checkout it resolves to, so two builds of
250
+ the same version are told apart at a glance:
251
+
252
+ ```bash
253
+ $ dl --version
254
+ dl 0.0.9
255
+
256
+ $ dl-next --version # editable install of a working tree
257
+ dl 0.0.9 (dev, editable from /path/to/your/devlaunch)
258
+ ```
259
+
260
+ `aid --version` reports the same thing under its own name. The provenance comes
261
+ from the installed package's own PEP 610 metadata; an install that records none
262
+ just prints the bare version.
203
263
 
204
264
  ## Examples
205
265
 
@@ -221,6 +281,7 @@ dl blooop/devlaunch stop # Stop workspace
221
281
  - **GitHub Shorthand**: Use `owner/repo` instead of full URLs - automatically expands to `github.com/owner/repo`
222
282
  - **Branch Support**: Specify branches with `owner/repo@branch` syntax
223
283
  - **Fast Autocomplete**: Completion cache for ~3ms response time (vs ~700ms without cache)
284
+ - **One Round-Trip Per Question**: every `devpod` call costs ~0.45s, far more than `dl` itself, so a command reads the workspace list at most once — and `dl <ws> -- <cmd>` skips the extra round-trip that names an interactive prompt, since a one-shot command has none
224
285
 
225
286
  ## Worktree Backend
226
287
 
@@ -256,6 +317,19 @@ After running `dl --install`, you get intelligent tab completion:
256
317
  - File/directory paths when starting with `./`, `/`, or `~`
257
318
  - All global flags (`--ls`, `--install`, etc.) and workspace commands
258
319
 
320
+ ### How the completion cache stays current
321
+
322
+ The data behind completions lives in `~/.cache/devlaunch/completions.json`, and
323
+ building it means a `git ls-remote` per known repo — seconds of work. So it is
324
+ rebuilt in the background at most once an hour (the same interval the worktree
325
+ backend uses for lazy fetches), and at most once per `dl` invocation. Commands
326
+ that change your workspaces (starting, stopping or deleting one) rebuild it as
327
+ soon as they finish, regardless of when it was last built. Commands with no use
328
+ for it — `dl --help`, `dl --version` — do not touch it at all.
329
+
330
+ A branch created on a remote in the last hour may therefore not be offered yet.
331
+ `dl --refresh` rebuilds the cache immediately and ignores the interval.
332
+
259
333
  ## Development
260
334
 
261
335
  This project uses [pixi](https://pixi.sh) for environment management.
@@ -100,6 +100,50 @@ dl user/repo@branch # Create from specific branch
100
100
  dl ./path # Create from local path
101
101
  ```
102
102
 
103
+ ## Workspace IDs
104
+
105
+ `dl user/repo@branch` derives one id that names both the devpod workspace (what you
106
+ see in `dl --ls`) and the clone directory under `~/.cache/devlaunch/repos/`:
107
+
108
+ ```
109
+ <repo-slug>-<branch-slug>-<syllables> at most 38 characters
110
+
111
+ blooop/devlaunch@main -> devlaunch-main-zovomobo
112
+ blooop/devlaunch@feature/auth -> devlaunch-feature-auth-poliseno
113
+ blooop/devlaunch@feature-auth -> devlaunch-feature-auth-nesatabe
114
+ blooop/test_renv@nb4 -> test-renv-nb4-polenita
115
+ kinisi-robotics/kinisi_ros@ags-devcontainer-tooling-support
116
+ -> kinisi-ros-ags-devcontainer-t-lenevere
117
+ blooop/devlaunch@dependabot/github_actions/codecov/codecov-action-6
118
+ -> devlaunch-dependabot-codecov-sifivasa
119
+ ```
120
+
121
+ The eight-character syllable suffix is a hash of the full `(owner, repo, branch)` triple.
122
+ It is what makes the id unique: the readable part is shortened to fit the length limit,
123
+ and shortening it does not affect whether two branches share an id. Long branch names
124
+ drop whole `/`-separated middle segments before losing characters, so the part that
125
+ identifies the branch survives. Note the third and fourth lines above: `feature/auth` and
126
+ `feature-auth` read the same once slugged but are different branches, and they get
127
+ different ids.
128
+
129
+ Owner and repo are matched case-insensitively, the way GitHub treats them, so
130
+ `dl NVIDIA/cuda-samples@main` and `dl nvidia/cuda-samples@main` are the same workspace.
131
+ Branch names are case-sensitive, because git refs are.
132
+
133
+ URL specs (`dl github.com/owner/repo`) get an id in the same shape, with the suffix
134
+ hashed over the URL.
135
+
136
+ The id is also the container hostname, so it stays well inside the 38-character budget
137
+ to leave room for tools that add their own prefixes.
138
+
139
+ Branch names must be safe as both git refs and directory names — a name with a space or
140
+ a leading dash is rejected rather than quietly rewritten.
141
+
142
+ > **Upgrading:** this id format is new. Existing workspaces and clone directories were
143
+ > named by the previous scheme and will get new ids, so `dl user/repo@branch` creates a
144
+ > fresh workspace and leaves the old container behind. Remove stale ones with
145
+ > `dl <old-id> rm`, which still finds and deletes the old clone directory.
146
+
103
147
  ## Workspace Commands
104
148
 
105
149
  | Command | Description |
@@ -176,7 +220,23 @@ stays in place — including one it was given before you set
176
220
  | `dl --prune-worktrees [days]` | Remove unused worktrees (default: 30 days) |
177
221
  | `dl --refresh` | Refresh completion cache |
178
222
  | `dl --help, -h` | Show this help |
179
- | `dl --version` | Show version |
223
+ | `dl --version` | Show version (an editable install also names the tree it runs from) |
224
+
225
+ A released install prints the version and nothing else. An install made in
226
+ editable mode says so and names the checkout it resolves to, so two builds of
227
+ the same version are told apart at a glance:
228
+
229
+ ```bash
230
+ $ dl --version
231
+ dl 0.0.9
232
+
233
+ $ dl-next --version # editable install of a working tree
234
+ dl 0.0.9 (dev, editable from /path/to/your/devlaunch)
235
+ ```
236
+
237
+ `aid --version` reports the same thing under its own name. The provenance comes
238
+ from the installed package's own PEP 610 metadata; an install that records none
239
+ just prints the bare version.
180
240
 
181
241
  ## Examples
182
242
 
@@ -198,6 +258,7 @@ dl blooop/devlaunch stop # Stop workspace
198
258
  - **GitHub Shorthand**: Use `owner/repo` instead of full URLs - automatically expands to `github.com/owner/repo`
199
259
  - **Branch Support**: Specify branches with `owner/repo@branch` syntax
200
260
  - **Fast Autocomplete**: Completion cache for ~3ms response time (vs ~700ms without cache)
261
+ - **One Round-Trip Per Question**: every `devpod` call costs ~0.45s, far more than `dl` itself, so a command reads the workspace list at most once — and `dl <ws> -- <cmd>` skips the extra round-trip that names an interactive prompt, since a one-shot command has none
201
262
 
202
263
  ## Worktree Backend
203
264
 
@@ -233,6 +294,19 @@ After running `dl --install`, you get intelligent tab completion:
233
294
  - File/directory paths when starting with `./`, `/`, or `~`
234
295
  - All global flags (`--ls`, `--install`, etc.) and workspace commands
235
296
 
297
+ ### How the completion cache stays current
298
+
299
+ The data behind completions lives in `~/.cache/devlaunch/completions.json`, and
300
+ building it means a `git ls-remote` per known repo — seconds of work. So it is
301
+ rebuilt in the background at most once an hour (the same interval the worktree
302
+ backend uses for lazy fetches), and at most once per `dl` invocation. Commands
303
+ that change your workspaces (starting, stopping or deleting one) rebuild it as
304
+ soon as they finish, regardless of when it was last built. Commands with no use
305
+ for it — `dl --help`, `dl --version` — do not touch it at all.
306
+
307
+ A branch created on a remote in the last hour may therefore not be offered yet.
308
+ `dl --refresh` rebuilds the cache immediately and ignores the interval.
309
+
236
310
  ## Development
237
311
 
238
312
  This project uses [pixi](https://pixi.sh) for environment management.