@codions/portta 0.0.0-develop.155.sha-e6e3870 → 0.0.0-develop.159.sha-0da77d5

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/dist/host.js CHANGED
@@ -72223,7 +72223,7 @@ function createDaemonTaskflowHost(context) {
72223
72223
  port: hostListen(env2).port,
72224
72224
  workflowBuiltinsDir: taskflowAssets(env2).workflowBuiltinsDir,
72225
72225
  version: env2.PORTTA_VERSION || "0.0.0-local",
72226
- buildDate: true ? "2026-09-16T16:54:30Z" : (/* @__PURE__ */ new Date()).toISOString(),
72226
+ buildDate: true ? "2026-09-17T17:01:02Z" : (/* @__PURE__ */ new Date()).toISOString(),
72227
72227
  environmentStore: createEnvironmentStore(paths.database),
72228
72228
  hostEnvironmentProvider: new HostEnvironmentProvider(),
72229
72229
  devContainerProvider: new DevContainerProvider(),
@@ -161,23 +161,28 @@ PORTTA_WEB_PORT=8081
161
161
  # entrypoint. Requires PORTTA_AUTH_MODE=required; the panel
162
162
  # authenticates requests itself.
163
163
  # vpn routed by Traefik at PORTTA_WEB_HOST.<domain>, which is
164
- # meaningful only on the remote-private profile. Requires a
165
- # credential, and is refused on remote-public.
164
+ # meaningful only on the remote-private profile. Refused on
165
+ # remote-public. Accepts PORTTA_AUTH_MODE=disabled, and
166
+ # `portta web up --expose vpn` makes the panel read-only unless
167
+ # --writable is given.
168
+ # domain routed by Traefik on one hostname of the gateway's own domain,
169
+ # PORTTA_PANEL_ADVERTISED_HOST. Requires PORTTA_AUTH_MODE=required.
166
170
  #
167
- # portta config set panel.access public|tailscale|local
171
+ # portta config set panel.access local|tailscale|vpn|public|domain
168
172
  #
169
173
  # switches between them on an installed host without reinstalling.
170
174
  PORTTA_WEB_EXPOSE=local
171
175
  PORTTA_WEB_HOST=portta-web
172
176
 
173
177
  # The address the panel is advertised at in `public` mode, where the published
174
- # port belongs to Traefik and 0.0.0.0 is not something anybody types. The
175
- # installer fills this with the detected public IP or hostname; it is cosmetic
176
- # and changes no binding.
178
+ # port belongs to Traefik and 0.0.0.0 is not something anybody types, and the
179
+ # hostname Traefik routes in `domain` mode. In `public` mode it changes no
180
+ # binding.
177
181
  PORTTA_PANEL_ADVERTISED_HOST=
178
182
 
179
- # Refuse every mutating endpoint. Useful when an agent is driving the panel,
180
- # and the default whenever the panel is routed beyond loopback.
183
+ # Refuse every mutating endpoint. Useful when an agent is driving the panel.
184
+ # `portta web up --expose vpn` sets it unless --writable is given; no other
185
+ # access mode turns it on by itself.
181
186
  PORTTA_WEB_READ_ONLY=false
182
187
 
183
188
  # The panel's own front door, which is now the panel's own business.
@@ -275,7 +280,7 @@ PORTTA_AUTH_USER=
275
280
  # PORTTA_AUTH_USER=1000:1000
276
281
 
277
282
  # ----------------------------------------------------------------------------
278
- # Applying settings from the panel: optional, off by default
283
+ # Applying settings from the panel: enabled in this template
279
284
  # ----------------------------------------------------------------------------
280
285
  # Traefik reads its static configuration from the environment its container was
281
286
  # created with, so a setting the panel saves takes effect only once the gateway
@@ -291,7 +296,8 @@ PORTTA_AUTH_USER=
291
296
  # Be clear about what this grants: anyone who can write through the panel can
292
297
  # run `portta up` on this host. It is refused in read-only mode, the applier
293
298
  # takes no input, and the panel never gains `exec`. Leave it false on a host
294
- # where the panel is reachable by anyone you would not hand a shell.
299
+ # where the panel is reachable by anyone you would not hand a shell. The panel
300
+ # cannot change this value; only an edit of this file on the host does.
295
301
  #
296
302
  # On a repository checkout -- PORTTA_WEB_BUILD or PORTTA_WEB_DEV -- the apply
297
303
  # rebuilds the local images first. The build runs on the host daemon, not inside
@@ -302,18 +308,25 @@ PORTTA_AUTH_USER=
302
308
  PORTTA_APPLY=true
303
309
 
304
310
  # Prepare the project runner the panel may start to drive Compose for one
305
- # project (up, stop, restart, build, down). Off by default, and deliberately
306
- # absent from the Settings catalogue — turning it on is an edit on the host.
311
+ # project (up, stop, restart, build, down). Enabled in this template, and
312
+ # deliberately absent from the Settings catalogue — changing it is an edit on
313
+ # the host. The runner holds the Docker socket and a view of the host
314
+ # filesystem; set it to false where the panel is reachable by anyone you would
315
+ # not hand a shell.
307
316
  # See docs/development/adr/0030-the-panel-and-a-project-lifecycle.md.
308
317
  PORTTA_RUNNER=true
309
318
 
310
319
  # ----------------------------------------------------------------------------
311
- # Task Flow and the host daemon: off by default
320
+ # The host daemon, and the Task Flow module (off by default)
312
321
  # ----------------------------------------------------------------------------
313
- # Task Flow's work needs the host (git worktrees, tmux, agent CLIs), so it runs
314
- # in `portta host serve`, a daemon on the host, and the panel reaches it through
315
- # an authorised proxy. Turning this on gives the panel a name for the host and
316
- # the daemon's token (state/host/token), read-only; nothing else.
322
+ # Work that needs the host -- issues through `gh` and Linear, and Task Flow's
323
+ # git worktrees, tmux and agent CLIs -- runs in `portta host serve`, a daemon on
324
+ # the host. Whenever the panel is on, it gets a name for the host and the
325
+ # daemon's token (state/host/token), read-only, and reaches the daemon through
326
+ # an authorised proxy.
327
+ #
328
+ # PORTTA_TASKFLOW only switches the Task Flow module on in the CLI, the daemon
329
+ # and the panel; the panel's route to the daemon does not depend on it.
317
330
  #
318
331
  # The daemon binds loopback by default, which a panel container reaches on
319
332
  # Docker Desktop. On Linux, bind it to the Docker bridge gateway instead, for
@@ -1 +1 @@
1
- 0.0.0-develop.155.sha-e6e3870
1
+ 0.0.0-develop.159.sha-0da77d5
@@ -1,10 +1,8 @@
1
1
  # ============================================================================
2
2
  # Portta: the panel on a public address, behind Portta ForwardAuth
3
3
  # ============================================================================
4
- # Applied when PORTTA_WEB_EXPOSE=public. This is the mode the installer offers
5
- # first, because it is the shortest path to a usable development VPS.
6
- #
7
- # Two properties make it safe enough to be the default, and both are load
4
+ # Applied when PORTTA_WEB_EXPOSE=public, the shortest path to a panel on a
5
+ # development VPS. Two properties make it safe enough, and both are load
8
6
  # bearing:
9
7
  #
10
8
  # 1. The panel gets its OWN Traefik entrypoint (`panel`, :8090 inside the
@@ -15,16 +13,16 @@
15
13
  #
16
14
  # 2. The panel signs people in itself. There is no middleware on this
17
15
  # router: `PORTTA_AUTH_MODE=required` is what stands in front of it, the
18
- # panel's own process refuses to start in `disabled` mode on anything but
19
- # loopback, and `portta web up --expose public` refuses before that.
20
- # See docs/development/adr/0035-authentication-lives-in-the-panel.md.
16
+ # panel's own process refuses to start with `public` access in `disabled`
17
+ # mode, and `portta web up --expose public` refuses before that.
18
+ # See docs/development/adr/0051-authentication-is-optional-inside-a-trusted-network.md.
21
19
  #
22
20
  # The panel container itself publishes no host port here (web-bind.yaml is not
23
21
  # applied), so the only way in is through this entrypoint.
24
22
  #
25
23
  # HTTP, not HTTPS, when the address is a bare IP: there is no certificate a
26
24
  # public CA will issue for one. The password is checked by the panel but the
27
- # connection is not encrypted, and the installer says so in as many words.
25
+ # connection is not encrypted.
28
26
  # `--expose domain` is the mode that gets a real certificate.
29
27
  # ============================================================================
30
28
 
@@ -178,9 +178,12 @@ services:
178
178
  #
179
179
  # `required` makes it sign people in: accounts, roles, sessions and
180
180
  # tokens, all in its database. `disabled` makes every request the local
181
- # operator, and the process refuses to start that way on anything but
182
- # loopback. The secret signs sessions and is shared with the ForwardAuth
183
- # service, which is the only other thing here that signs anything.
181
+ # operator. It is accepted with panel access `local`, `tailscale` and
182
+ # `vpn`, and the process refuses to start that way with `public` or
183
+ # `domain`. `local` bound to anything but loopback also needs
184
+ # PORTTA_AUTH_ALLOW_LAN=true. The secret signs sessions and is shared with
185
+ # the ForwardAuth service, which is the only other thing here that signs
186
+ # anything.
184
187
  #
185
188
  # PORTTA_PANEL_URL is where a browser reaches it, and three things come
186
189
  # from it: whether the session cookie may be `Secure`, which origins a
@@ -188,6 +191,7 @@ services:
188
191
  # loopback on the published port.
189
192
  PORTTA_AUTH_MODE: ${PORTTA_AUTH_MODE:-disabled}
190
193
  PORTTA_AUTH_SECRET: ${PORTTA_AUTH_SECRET:-}
194
+ PORTTA_AUTH_ALLOW_LAN: ${PORTTA_AUTH_ALLOW_LAN:-false}
191
195
  PORTTA_PANEL_URL: ${PORTTA_PANEL_URL:-}
192
196
  PORTTA_PANEL_TRUSTED_ORIGINS: ${PORTTA_PANEL_TRUSTED_ORIGINS:-}
193
197
  PORTTA_RUNTIME_DYNAMIC_DIR: /app/state/traefik-dynamic
@@ -222,7 +226,7 @@ services:
222
226
  # state/auth credentials the panel manages, never served directly
223
227
  # state/ssh SSH credentials the panel manages, never served directly
224
228
  # traefik/dynamic read-write, and the ONE place the panel configures
225
- # Traefik. It may write four generated filenames there
229
+ # Traefik. It may write three generated filenames there
226
230
  # and refuses every other path in its own process.
227
231
  # See docs/development/adr/0011-bounded-traefik-write-surface.md.
228
232
  - ./.env:/app/state/.env
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codions/portta",
3
- "version": "0.0.0-develop.155.sha-e6e3870",
3
+ "version": "0.0.0-develop.159.sha-0da77d5",
4
4
  "description": "Machine-first CLI for a shared Docker development gateway",
5
5
  "license": "MIT",
6
6
  "type": "module",