boxdown 1.2.1 → 1.3.0

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.
Files changed (32) hide show
  1. package/README.md +10 -0
  2. package/assets/devcontainer/README.md +12 -1
  3. package/assets/devcontainer/devcontainer.json +1 -1
  4. package/assets/devcontainer/hooks/post-create.sh +12 -1
  5. package/dist/bin/cli.cjs +1 -1
  6. package/dist/bin/cli.mjs +1 -1
  7. package/dist/{main-BDgyf2t5.cjs → main-CT2n9qcb.cjs} +448 -67
  8. package/dist/{main-J4_2Up3o.mjs → main-O__JaiXe.mjs} +431 -68
  9. package/dist/main-O__JaiXe.mjs.map +1 -0
  10. package/dist/main.cjs +4 -1
  11. package/dist/main.d.cts +92 -26
  12. package/dist/main.d.cts.map +1 -1
  13. package/dist/main.d.mts +92 -26
  14. package/dist/main.d.mts.map +1 -1
  15. package/dist/main.mjs +2 -2
  16. package/docs/features/lifecycle.md +13 -0
  17. package/docs/features/setup.md +5 -0
  18. package/docs/features/start-and-shell.md +5 -0
  19. package/docs/superpowers/plans/2026-07-18-architecture-aware-1password-installer.md +163 -0
  20. package/docs/superpowers/plans/2026-07-18-devcontainer-node-image-digest.md +341 -0
  21. package/docs/superpowers/plans/2026-07-19-container-runtime-readiness.md +1536 -0
  22. package/docs/superpowers/specs/2026-07-18-architecture-aware-1password-installer-design.md +63 -0
  23. package/docs/superpowers/specs/2026-07-18-devcontainer-node-image-digest-design.md +108 -0
  24. package/docs/superpowers/specs/2026-07-19-container-runtime-readiness-design.md +353 -0
  25. package/package.json +1 -1
  26. package/src/container-runtime.ts +295 -0
  27. package/src/devcontainer.ts +20 -4
  28. package/src/doctor.ts +48 -22
  29. package/src/main.ts +95 -11
  30. package/src/process.ts +50 -10
  31. package/src/progress.ts +63 -8
  32. package/dist/main-J4_2Up3o.mjs.map +0 -1
package/README.md CHANGED
@@ -169,6 +169,16 @@ no-start bind-mount probe for the workspace and Boxdown-managed mount paths.
169
169
  Run `boxdown doctor` directly for the complete diagnostic report; an unavailable
170
170
  best-effort mount probe is reported as a warning and does not block setup.
171
171
 
172
+ `boxdown start` is standalone: it can create or reuse the devcontainer even if
173
+ `boxdown setup` was skipped or its preflight failed. Setup-only SSH aliases and
174
+ Codex/Claude application integrations are still installed only by `setup`.
175
+
176
+ Before a command creates or starts a container, Boxdown waits up to 60 seconds
177
+ for the Docker daemon and the selected Docker Buildx builder. If Buildx is not
178
+ installed, the bundled Dev Containers CLI uses its supported classic-build
179
+ fallback and Boxdown continues with a warning. Boxdown does not retry an actual
180
+ Dev Containers build failure.
181
+
172
182
  Container bring-up installs Codex and Claude Code by default. The OpenCode and
173
183
  Antigravity commands stay available, but install/update those CLIs only when you
174
184
  launch them. Use `--` to pass arguments to the selected agent:
@@ -28,7 +28,18 @@ Run this project in a **consistent Node.js 24 + TypeScript** environment without
28
28
 
29
29
  ## Base image
30
30
 
31
- Boxdown uses `node:24-trixie-slim` as the base image to keep the shared image smaller than the full Dev Containers TypeScript/Node image. The devcontainer then installs the required operating-system tools through pinned Dev Container features. `common-utils` and `git` run first so later features and lifecycle hooks can rely on shell basics, `sudo`, package metadata, Git, and related utilities.
31
+ Boxdown uses `node:24-trixie-slim` as the base-image update track to keep the
32
+ shared image smaller than the full Dev Containers TypeScript/Node image. The
33
+ template appends the upstream multi-platform OCI index digest, making rebuilds
34
+ immutable while allowing AMD64 and ARM64 hosts to select the matching platform
35
+ manifest from the same pinned release set. Renovate checks the packaged
36
+ template monthly and opens a pull request when that tag's index digest changes,
37
+ so base-image updates remain explicit and auditable.
38
+
39
+ The devcontainer then installs the required operating-system tools through
40
+ pinned Dev Container features. `common-utils` and `git` run first so later
41
+ features and lifecycle hooks can rely on shell basics, `sudo`, package
42
+ metadata, Git, and related utilities.
32
43
 
33
44
  Python is installed during `postCreateCommand` from Debian apt packages (`python3`, `python3-venv`, `python3-pip`, and `pipx`). On Debian trixie this currently provides Python 3.13. Boxdown intentionally avoids the Dev Containers Python feature because it added a large Python runtime/dev-tooling layer, including bundled environments for tools such as mypy, black, pylint, pytest, bandit, pipenv, and flake8.
34
45
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Project Devcontainer",
3
- "image": "node:24-trixie-slim",
3
+ "image": "node:24-trixie-slim@sha256:ae91dcc111a68c9d2d81ff2a17bda61be126426176fde6fe7d08ab13b7f50573",
4
4
  "features": {
5
5
  "ghcr.io/devcontainers/features/common-utils@sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a": {
6
6
  "username": "node"
@@ -111,7 +111,18 @@ install_snyk_cli() {
111
111
 
112
112
  install_1password_cli() {
113
113
  local op_version="2.32.1"
114
- curl -fsSL "https://cache.agilebits.com/dist/1P/op2/pkg/v${op_version}/op_linux_arm64_v${op_version}.zip" -o /tmp/op.zip
114
+ local op_arch
115
+
116
+ case "$(uname -m)" in
117
+ aarch64 | arm64) op_arch="arm64" ;;
118
+ x86_64 | amd64) op_arch="amd64" ;;
119
+ *)
120
+ echo "post-create: skipping 1Password CLI (unsupported arch: $(uname -m))" >&2
121
+ return 0
122
+ ;;
123
+ esac
124
+
125
+ curl -fsSL "https://cache.agilebits.com/dist/1P/op2/pkg/v${op_version}/op_linux_${op_arch}_v${op_version}.zip" -o /tmp/op.zip
115
126
  python3 -c "import zipfile; zipfile.ZipFile('/tmp/op.zip').extract('op', '/tmp')"
116
127
  sudo mv /tmp/op /usr/local/bin/op && chmod +x /usr/local/bin/op && rm /tmp/op.zip
117
128
  }
package/dist/bin/cli.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const require_main = require('../main-BDgyf2t5.cjs');
2
+ const require_main = require('../main-CT2n9qcb.cjs');
3
3
 
4
4
  //#region src/bin/cli.ts
5
5
  require_main.runCli().then((exitCode) => {
package/dist/bin/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { o as runCli } from "../main-J4_2Up3o.mjs";
2
+ import { c as runCli } from "../main-O__JaiXe.mjs";
3
3
 
4
4
  //#region src/bin/cli.ts
5
5
  runCli().then((exitCode) => {