proof-artifacts 0.1.0-preview.0 → 0.1.0-preview.1

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.
package/README.md CHANGED
@@ -26,6 +26,7 @@ proof-artifacts stop --name demo
26
26
  ```
27
27
 
28
28
  The noVNC desktop is bound to `127.0.0.1` with a Docker-assigned port by default. The CLI prints the exact URL and writes it to the session manifest.
29
+ The default desktop runtime image is pulled from `ghcr.io/notkainoa/proof-artifacts-desktop:0.1.0-preview.0`; if pulling fails, the CLI can still build the local runtime image as a fallback.
29
30
  If your app is running on the VPS host at `localhost`, pass the URL when starting and the CLI will infer host networking:
30
31
 
31
32
  ```sh
@@ -83,7 +84,7 @@ The agent should then:
83
84
 
84
85
  ## Still Planned
85
86
 
86
- - Publishing a public prebuilt runtime image from CI.
87
+ - Automating public runtime image publishing from CI.
87
88
  - More project-type detectors and runtime images for common Linux desktop dependencies.
88
89
  - An MCP server that wraps the stable CLI lifecycle.
89
90
 
@@ -17,7 +17,8 @@ import { fileURLToPath } from "node:url";
17
17
 
18
18
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
19
19
  const rootDir = path.resolve(__dirname, "..");
20
- const defaultImage = "proof-artifacts/desktop:0.1.0";
20
+ const defaultImage = "ghcr.io/notkainoa/proof-artifacts-desktop:0.1.0-preview.0";
21
+ const localBuildImage = "proof-artifacts/desktop:0.1.0-preview.0";
21
22
  const defaultName = "default";
22
23
  const defaultWidth = "1280";
23
24
  const defaultHeight = "800";
@@ -208,20 +209,22 @@ function buildImage(image) {
208
209
 
209
210
  function ensureRuntimeImage(opts = {}) {
210
211
  const requestedImage = opts.image ?? process.env.PROOF_ARTIFACTS_IMAGE ?? defaultImage;
212
+ const usesDefaultImage = requestedImage === defaultImage;
211
213
  if (isTruthy(opts.rebuild)) {
212
- buildImage(requestedImage);
213
- return { image: requestedImage, requestedImage, imageSource: "rebuilt" };
214
+ const image = usesDefaultImage ? localBuildImage : requestedImage;
215
+ buildImage(image);
216
+ return { image, requestedImage, imageSource: "rebuilt" };
214
217
  }
215
218
 
216
219
  if (imageExists(requestedImage)) {
217
220
  return { image: requestedImage, requestedImage, imageSource: "local" };
218
221
  }
219
222
 
220
- if (requestedImage !== defaultImage && !isTruthy(opts.pull)) {
223
+ if (!usesDefaultImage && !isTruthy(opts.pull)) {
221
224
  throw new Error(`Runtime image ${requestedImage} is not available locally. Build it locally first or pass --pull to pull a remote image explicitly.`);
222
225
  }
223
226
 
224
- const shouldPull = isTruthy(opts.pull);
227
+ const shouldPull = usesDefaultImage || isTruthy(opts.pull);
225
228
  if (shouldPull) {
226
229
  console.log(`Runtime image not found locally. Pulling ${requestedImage}...`);
227
230
  const pull = dockerTry(["pull", requestedImage], { stdio: "inherit" });
@@ -231,18 +234,18 @@ function ensureRuntimeImage(opts = {}) {
231
234
  if (isTruthy(opts["no-build"])) {
232
235
  throw new Error(`Could not pull runtime image ${requestedImage}, and --no-build was set.`);
233
236
  }
234
- console.log(`Pull failed; building local runtime image ${defaultImage} instead.`);
237
+ console.log(`Pull failed; building local runtime image ${localBuildImage} instead.`);
235
238
  }
236
239
 
237
240
  if (isTruthy(opts["no-build"])) {
238
241
  throw new Error(`Runtime image ${requestedImage} is not available locally, and --no-build was set.`);
239
242
  }
240
243
 
241
- buildImage(defaultImage);
244
+ buildImage(localBuildImage);
242
245
  return {
243
- image: defaultImage,
246
+ image: localBuildImage,
244
247
  requestedImage,
245
- imageSource: requestedImage === defaultImage ? "built" : "built-fallback",
248
+ imageSource: "built-fallback",
246
249
  };
247
250
  }
248
251
 
@@ -1175,7 +1178,7 @@ function cmdDoctor(input = []) {
1175
1178
  if (dockerAvailable) {
1176
1179
  const dockerDaemon = spawnSync("docker", ["info"], { encoding: "utf8", stdio: "pipe" });
1177
1180
  addCheck(dockerDaemon.status === 0 ? "pass" : "fail", "Docker daemon", dockerDaemon.status === 0 ? "reachable" : dockerDaemon.stderr.trim());
1178
- addCheck(imageExists(defaultImage) ? "pass" : "warn", "Default runtime image", imageExists(defaultImage) ? defaultImage : "not built yet; first start/smoke can build it");
1181
+ addCheck(imageExists(defaultImage) ? "pass" : "warn", "Default runtime image", imageExists(defaultImage) ? defaultImage : "not available locally; first start/smoke will pull it or build a local fallback");
1179
1182
  }
1180
1183
 
1181
1184
  try {
@@ -29,7 +29,7 @@ Each session is one Docker container:
29
29
  On Unix hosts, the container runs as the invoking UID/GID when available so screenshots, recordings, and reports stay removable by the VPS user.
30
30
  Bridge-mode sessions also add `host.docker.internal` as a Docker host-gateway alias for VPS-host app access when the provider allows bridge-to-host traffic. That path is best-effort: some VPS firewall/Docker setups block bridge-to-host traffic. For localhost dev servers on the VPS host, `start --url http://127.0.0.1:<port>` infers host networking so Chromium can use the same network namespace as the app. Host-network sessions bind noVNC to VPS localhost and auto-probe noVNC/VNC ports when possible.
31
31
 
32
- The CLI can use a configured runtime image with local Docker build fallback. A public prebuilt image still needs CI publishing before the first-run experience is fast.
32
+ The CLI defaults to the preview GHCR runtime image at `ghcr.io/notkainoa/proof-artifacts-desktop:0.1.0-preview.0` and falls back to a local Docker build when pulling fails. CI should publish the image automatically before stable release so the npm package and runtime image stay version-matched.
33
33
 
34
34
  The host keeps artifacts at:
35
35
 
@@ -99,4 +99,4 @@ Linux lets us create virtual displays without OS-private APIs or driver installa
99
99
  - `proof-artifacts list/status` lets agents understand existing sessions before starting, stopping, or replacing anything.
100
100
  - `proof-artifacts install-skill` gives Codex agents the workflow.
101
101
 
102
- Future v0 success criteria should include CI-published prebuilt images, more project/runtime coverage, and an MCP wrapper after CLI semantics settle.
102
+ Future v0 success criteria should include automated CI image publishing, more project/runtime coverage, and an MCP wrapper after CLI semantics settle.
package/docs/VPS.md CHANGED
@@ -16,6 +16,7 @@ proof-artifacts smoke
16
16
 
17
17
  Some providers ship newer Docker packages through their own images. If `docker.io` is old or unavailable, install Docker Engine from Docker's official apt repository instead.
18
18
  After the package is published, replace the local source install with `npm install -g proof-artifacts`.
19
+ The first desktop start pulls `ghcr.io/notkainoa/proof-artifacts-desktop:0.1.0-preview.0` by default. Use `proof-artifacts smoke --rebuild` only when testing local runtime changes or when you intentionally want to bypass the published image.
19
20
 
20
21
  ## Start A Desktop
21
22
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "proof-artifacts",
3
- "version": "0.1.0-preview.0",
3
+ "version": "0.1.0-preview.1",
4
4
  "description": "Proof artifacts for coding agents using isolated Linux desktops.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -36,6 +36,7 @@ proof-artifacts doctor
36
36
  ```
37
37
 
38
38
  If Node/npm is missing, install Node.js 18+ first or tell the user the machine needs Node.js before the skill can continue. If Docker is missing or the user cannot access the Docker daemon, explain that Docker Engine is the required Linux desktop substrate and give the exact next command for the detected distro when it is obvious. On a new VPS, run `proof-artifacts doctor --deep` when you want the CLI to perform a disposable smoke capture.
39
+ The CLI pulls the preview GHCR desktop runtime by default and falls back to a local Docker build if the pull fails. Use `--rebuild` only when testing local runtime changes.
39
40
 
40
41
  ## Workflow
41
42
 
@@ -134,7 +135,7 @@ Do not put secrets in scripts passed over stdin; the CLI does not record stdin c
134
135
 
135
136
  - `proof-artifacts smoke --keep` leaves the test desktop running for inspection.
136
137
  - `proof-artifacts smoke --rebuild` rebuilds the local runtime image before testing local runtime changes.
137
- - `proof-artifacts start --image <image> --pull` tries a configured runtime image before local build fallback.
138
+ - `proof-artifacts start --image <image> --pull` tries a custom runtime image before local build fallback.
138
139
  - `proof-artifacts open <url> --name <task-name> --fullscreen` opens Chromium as a full-display browser window with browser chrome still visible.
139
140
  - `proof-artifacts detect --project <repo-path>` suggests whether the project is web, Linux desktop, or unsupported in the Linux runtime.
140
141
  - `proof-artifacts launch --name <task-name> --window-match <title> -- <command...>` starts a Linux desktop app inside the session.