totopo 3.7.0 → 3.8.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.
- package/README.md +4 -4
- package/dist/lib/dockerfile-builder.js +1 -0
- package/package.json +1 -1
- package/templates/Dockerfile +14 -14
- package/templates/pnpm-config.yaml +9 -0
package/README.md
CHANGED
|
@@ -70,11 +70,11 @@ A few key concepts:
|
|
|
70
70
|
|
|
71
71
|
### `totopo.yaml`
|
|
72
72
|
|
|
73
|
-
The config is minimal —
|
|
73
|
+
The config is minimal — only `workspace_id` is required; the rest are optional:
|
|
74
74
|
|
|
75
|
-
- **`workspace_id`** — unique slug for container naming and cache directory
|
|
76
|
-
- **`profiles`** — Dockerfile image variants (see [Profiles](#profiles))
|
|
77
|
-
- **`shadow_paths`** — gitignore-style patterns hidden from agents (see [Shadow Paths](#shadow-paths))
|
|
75
|
+
- **`workspace_id`** *(required)* — unique slug for container naming and cache directory
|
|
76
|
+
- **`profiles`** *(optional)* — Dockerfile image variants (see [Profiles](#profiles))
|
|
77
|
+
- **`shadow_paths`** *(optional)* — gitignore-style patterns hidden from agents (see [Shadow Paths](#shadow-paths))
|
|
78
78
|
- **`env_file`** *(optional)* — path to env file injected at runtime (see [Environment Variables](#environment-variables))
|
|
79
79
|
|
|
80
80
|
On every run, totopo shows the workspace menu:
|
package/package.json
CHANGED
package/templates/Dockerfile
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# dockerfile_hook in totopo.yaml profiles.
|
|
9
9
|
# =============================================================================
|
|
10
10
|
|
|
11
|
-
FROM debian:
|
|
11
|
+
FROM debian:trixie-slim
|
|
12
12
|
LABEL totopo.managed=true
|
|
13
13
|
|
|
14
14
|
# Enable 24-bit color support for AI CLIs (suppresses color upgrade prompts)
|
|
@@ -24,8 +24,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
24
24
|
build-essential pkg-config libssl-dev \
|
|
25
25
|
# Utilities
|
|
26
26
|
jq unzip zip tree htop procps lsb-release gnupg ca-certificates sox file bubblewrap \
|
|
27
|
-
# Modern search/navigation tools
|
|
28
|
-
ripgrep fzf \
|
|
27
|
+
# Modern search/navigation tools (fd-find installs the binary as 'fdfind'; symlinked to 'fd' below)
|
|
28
|
+
ripgrep fzf fd-find \
|
|
29
29
|
# Database clients
|
|
30
30
|
sqlite3 postgresql-client default-mysql-client redis-tools \
|
|
31
31
|
# Python (needed for build scripts and as a light default)
|
|
@@ -33,13 +33,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
33
33
|
&& rm -rf /var/lib/apt/lists/*
|
|
34
34
|
|
|
35
35
|
# ---------------------------------------------------------------------------
|
|
36
|
-
# Layer 2 — fd (
|
|
36
|
+
# Layer 2 — fd (from apt fd-find; Debian names the binary 'fdfind')
|
|
37
|
+
# Symlink to 'fd' so the tool is callable by its upstream name.
|
|
37
38
|
# ---------------------------------------------------------------------------
|
|
38
|
-
RUN
|
|
39
|
-
FD_VERSION=$(curl -fsSL https://api.github.com/repos/sharkdp/fd/releases/latest \
|
|
40
|
-
| python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'][1:])") && \
|
|
41
|
-
curl -fsSL "https://github.com/sharkdp/fd/releases/download/v${FD_VERSION}/fd_${FD_VERSION}_${ARCH}.deb" \
|
|
42
|
-
-o /tmp/fd.deb && dpkg -i /tmp/fd.deb && rm /tmp/fd.deb
|
|
39
|
+
RUN ln -sf "$(command -v fdfind)" /usr/local/bin/fd
|
|
43
40
|
|
|
44
41
|
# ---------------------------------------------------------------------------
|
|
45
42
|
# Layer 3 — yq (GitHub release)
|
|
@@ -59,9 +56,10 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
|
|
|
59
56
|
apt-get update && apt-get install -y gh && rm -rf /var/lib/apt/lists/*
|
|
60
57
|
|
|
61
58
|
# ---------------------------------------------------------------------------
|
|
62
|
-
# Layer 5 — Node.js LTS (via NodeSource)
|
|
59
|
+
# Layer 5 — Node.js 24 LTS (via NodeSource)
|
|
60
|
+
# Trixie's apt nodejs is 20.x; NodeSource is pinned to the current Active LTS (24.x).
|
|
63
61
|
# ---------------------------------------------------------------------------
|
|
64
|
-
RUN curl -fsSL https://deb.nodesource.com/
|
|
62
|
+
RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - && \
|
|
65
63
|
apt-get install -y nodejs && rm -rf /var/lib/apt/lists/*
|
|
66
64
|
|
|
67
65
|
# ---------------------------------------------------------------------------
|
|
@@ -85,18 +83,20 @@ RUN npm install -g \
|
|
|
85
83
|
# ---------------------------------------------------------------------------
|
|
86
84
|
RUN groupadd --gid 1001 devuser && \
|
|
87
85
|
useradd --uid 1001 --gid devuser --shell /bin/bash --create-home devuser && \
|
|
88
|
-
mkdir -p /home/devuser/.local/state /home/devuser/.local/share /home/devuser/.local/share/pnpm /home/devuser/.local/bin && \
|
|
86
|
+
mkdir -p /home/devuser/.local/state /home/devuser/.local/share /home/devuser/.local/share/pnpm /home/devuser/.local/bin /home/devuser/.config/pnpm && \
|
|
89
87
|
date -u +"%Y-%m-%dT%H:%M:%S.000Z" > /home/devuser/.ai-cli-updated && \
|
|
90
88
|
chown -R devuser:devuser /home/devuser
|
|
91
89
|
|
|
92
90
|
# ---------------------------------------------------------------------------
|
|
93
|
-
# Layer 9 — Bake startup script + git mode helper + shared constants into image
|
|
91
|
+
# Layer 9 — Bake startup script + git mode helper + shared constants + pnpm config into image
|
|
92
|
+
# pnpm 11+ reads settings from ~/.config/pnpm/config.yaml; ~/.npmrc covers anyone pinning pnpm <= 10.
|
|
94
93
|
# ---------------------------------------------------------------------------
|
|
95
94
|
COPY npmrc /home/devuser/.npmrc
|
|
95
|
+
COPY pnpm-config.yaml /home/devuser/.config/pnpm/config.yaml
|
|
96
96
|
COPY startup.mjs /home/devuser/startup.mjs
|
|
97
97
|
COPY startup-git-mode.mjs /home/devuser/startup-git-mode.mjs
|
|
98
98
|
COPY runtime-constants.mjs /home/devuser/runtime-constants.mjs
|
|
99
|
-
RUN chown devuser:devuser /home/devuser/.npmrc /home/devuser/startup.mjs /home/devuser/startup-git-mode.mjs /home/devuser/runtime-constants.mjs
|
|
99
|
+
RUN chown devuser:devuser /home/devuser/.npmrc /home/devuser/.config/pnpm/config.yaml /home/devuser/startup.mjs /home/devuser/startup-git-mode.mjs /home/devuser/runtime-constants.mjs
|
|
100
100
|
|
|
101
101
|
# ---------------------------------------------------------------------------
|
|
102
102
|
# Layer 10 — Bake git read-only wrapper into image
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# pnpm global config. pnpm 11+ reads its settings from here (~/.config/pnpm/config.yaml),
|
|
2
|
+
# no longer from ~/.npmrc. Keys are camelCase, unlike the kebab-case equivalents in .npmrc.
|
|
3
|
+
#
|
|
4
|
+
# storeDir pins the global store onto a bind-mounted, same-device cache so pnpm never falls back
|
|
5
|
+
# to creating a .pnpm-store inside the mounted /workspace. packageImportMethod=copy avoids
|
|
6
|
+
# cross-filesystem hardlink failures. The matching ~/.npmrc keeps this working for anyone who
|
|
7
|
+
# pins an older pnpm via packageManager (pnpm <= 10 still reads .npmrc).
|
|
8
|
+
storeDir: /home/devuser/.local/share/pnpm/store
|
|
9
|
+
packageImportMethod: copy
|