@pipod/cli 0.1.11 → 0.1.12

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.
@@ -23,20 +23,23 @@ from a subdirectory seeds the whole repository and prints the subdirectory so it
23
23
 
24
24
  ## Clone or archive
25
25
 
26
- A clone is chosen only when it reproduces the host checkout exactly. Every check below fails
27
- closed into an archive with a human-readable reason (`pipod --dry-run` prints it):
26
+ A clone is preferred when the pod can fetch the host's exact **committed HEAD**. Local
27
+ staged, unstaged, and untracked changes do not prevent cloning and are **not copied** by a
28
+ successful clone. The local checkout is left untouched. Every check below fails closed into
29
+ an archive with a human-readable reason (`pipod --dry-run` prints it):
28
30
 
29
31
  1. inside a git work tree
30
32
  2. `origin` exists and rewrites to an `https://` URL (`git@host:x/y.git` and `ssh://` are rewritten; local paths cannot be cloned by a pod)
31
33
  3. HEAD is on a branch
32
- 4. no modified, staged, or untracked non-ignored files
33
- 5. the branch has an upstream with no unpushed commits
34
- 6. no initialized submodules, no Git LFS attributes
35
- 7. the pod's egress policy admits the remote host
36
- 8. a live `git ls-remote` shows the remote branch at exactly the local HEAD commit
34
+ 4. the branch has an upstream with no unpushed commits
35
+ 5. no initialized submodules, no Git LFS attributes
36
+ 6. the pod's egress policy admits the remote host
37
+ 7. a live `git ls-remote` shows the remote branch at exactly the local HEAD commit
37
38
 
38
39
  The server clones that exact commit into the empty workdir. If the clone fails for any
39
- reason, the launch automatically falls back to an archive of the local tree.
40
+ reason, the launch automatically falls back to an archive of the local working tree,
41
+ **including uncommitted changes**. The committed-only behavior applies to successful clones,
42
+ not archive or configured-project copy transports.
40
43
 
41
44
  An **archive** is a gzip-compressed POSIX tar stream written to a temporary file and streamed
42
45
  to `PUT /v1/pods/:id/workspace/archive`. It contains tracked and untracked non-ignored files,
@@ -91,10 +94,12 @@ on the sandbox backend:
91
94
  the forwarding prompt; approve; `!git remote -v` inside the pod shows the https URL with no
92
95
  token, and `!cat .git/config` holds no token.
93
96
  3. **Declined forwarding** — answer `n`; expect an archive, and the pod still holds the tree.
94
- 4. **Dirty repository archive** — edit a file, launch; expect `will be archived … (uncommitted
95
- changes would be lost by a clone)` and `!git status` in the pod shows the same edit.
97
+ 4. **Dirty repository clone** — in a pushed, cloneable repository, stage a change, edit it
98
+ again, and add an untracked file. Launch; expect `will clone … (local uncommitted changes
99
+ are not copied)`. Inside the pod, `!git status` is clean, tracked content matches HEAD,
100
+ and the untracked file is absent. The host's staged, unstaged and untracked changes remain.
96
101
  5. **Non-git archive** — a plain directory of files; expect the files without a `.git`.
97
- 6. **100+ MiB streaming archive** — a repository with a large untracked binary; watch the
102
+ 6. **100+ MiB streaming archive** — a repository without `origin`, with a large untracked binary; watch the
98
103
  `upload 25% …` lines; verify the file's checksum in the pod.
99
104
  7. **Interrupted upload** — Ctrl-C during upload; expect the pod deleted and no
100
105
  `pi-pod-seed-*.tar.gz` left in the temp directory.
@@ -1,4 +1,4 @@
1
- .TH "PIPOD\-CONFIG" "5" "October 2026" "0.1.11"
1
+ .TH "PIPOD\-CONFIG" "5" "October 2026" "0.1.12"
2
2
  .SH "NAME"
3
3
  \fBpipod-config\fR \- pi pod configuration files
4
4
  .SH SYNOPSIS
package/man/pipod.1 CHANGED
@@ -1,4 +1,4 @@
1
- .TH "PIPOD" "1" "October 2026" "0.1.11"
1
+ .TH "PIPOD" "1" "October 2026" "0.1.12"
2
2
  .SH "NAME"
3
3
  \fBpipod\fR \- run pi coding\-agent sessions in server\-managed pods
4
4
  .SH SYNOPSIS
@@ -265,10 +265,13 @@ The launch uses the template named by \fB\-\-template\fP, or else the one pinned
265
265
  first launch offers to create a template from the project and pin it\.
266
266
  .P
267
267
  Workspace seeding: launching from a directory with no \.pi\-pod/config\.json seeds the new pod
268
- from that directory (its git repository root when inside one)\. A clean, pushed checkout whose
269
- remote tip matches HEAD is cloned at that exact commit; anything else (dirty trees, unpushed
270
- commits, private remotes without usable credentials, plain directories) is streamed in as a
271
- tar archive, without git\-ignored paths, node_modules, or \.pi\-pod/env\. Private\-remote
268
+ from that directory (its git repository root when inside one)\. A pushed checkout whose
269
+ remote tip matches HEAD is cloned at that exact committed HEAD, even with local uncommitted
270
+ changes\. A successful clone does not copy staged, unstaged, or untracked changes and leaves
271
+ the local checkout untouched\. When cloning is unavailable or fails (unpushed commits, private
272
+ remotes without usable credentials, plain directories), the local working tree, including
273
+ uncommitted changes, is streamed in as a tar archive, without git\-ignored paths, node_modules,
274
+ or \.pi\-pod/env\. Private\-remote
272
275
  credentials are forwarded only after a prompt (\fB\-\-yes\fP approves it) and are never stored\.
273
276
  \fB\-\-dry\-run\fP prints the decision without prompting or creating a pod\. Forks, reused pods,
274
277
  \fB\-\-on\fP co\-location, and \fB\-\-no\-seed\fP never seed\. A project with a \.pi\-pod/config\.json gets its
package/man/pipod.1.md CHANGED
@@ -254,10 +254,13 @@ The launch uses the template named by `--template`, or else the one pinned in th
254
254
  first launch offers to create a template from the project and pin it.
255
255
 
256
256
  Workspace seeding: launching from a directory with no .pi-pod/config.json seeds the new pod
257
- from that directory (its git repository root when inside one). A clean, pushed checkout whose
258
- remote tip matches HEAD is cloned at that exact commit; anything else (dirty trees, unpushed
259
- commits, private remotes without usable credentials, plain directories) is streamed in as a
260
- tar archive, without git-ignored paths, node_modules, or .pi-pod/env. Private-remote
257
+ from that directory (its git repository root when inside one). A pushed checkout whose
258
+ remote tip matches HEAD is cloned at that exact committed HEAD, even with local uncommitted
259
+ changes. A successful clone does not copy staged, unstaged, or untracked changes and leaves
260
+ the local checkout untouched. When cloning is unavailable or fails (unpushed commits, private
261
+ remotes without usable credentials, plain directories), the local working tree, including
262
+ uncommitted changes, is streamed in as a tar archive, without git-ignored paths, node_modules,
263
+ or .pi-pod/env. Private-remote
261
264
  credentials are forwarded only after a prompt (`--yes` approves it) and are never stored.
262
265
  `--dry-run` prints the decision without prompting or creating a pod. Forks, reused pods,
263
266
  `--on` co-location, and `--no-seed` never seed. A project with a .pi-pod/config.json gets its
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipod/cli",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "Run pi coding-agent sessions in server-managed pods",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",