gestalt-mobile 0.10.0 → 0.12.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 +64 -14
- package/dist/client/assets/index-B7KwEjTE.js +19 -0
- package/dist/client/assets/index-CMs5ZzxJ.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/server/server/app.js +58 -3
- package/dist/server/server/cli.js +6 -0
- package/dist/server/server/composition.js +221 -150
- package/dist/server/server/config.js +64 -2
- package/dist/server/server/features/auth/application/ports.js +8 -0
- package/dist/server/server/features/auth/devices/application.js +26 -0
- package/dist/server/server/features/auth/devices/list/endpoint.js +12 -0
- package/dist/server/server/features/auth/devices/rename/endpoint.js +37 -0
- package/dist/server/server/features/auth/devices/revoke/endpoint.js +48 -0
- package/dist/server/server/features/auth/domain/authorization.js +101 -0
- package/dist/server/server/features/auth/domain/device-nickname.js +13 -0
- package/dist/server/server/features/auth/domain/errors.js +7 -0
- package/dist/server/server/features/auth/domain/identifiers.js +45 -0
- package/dist/server/server/features/auth/enrollment-tickets/cancel/endpoint.js +14 -0
- package/dist/server/server/features/auth/enrollment-tickets/endpoint.js +17 -0
- package/dist/server/server/features/auth/enrollment-tickets/status/endpoint.js +13 -0
- package/dist/server/server/features/auth/login/options/endpoint.js +44 -0
- package/dist/server/server/features/auth/login/verify/endpoint.js +88 -0
- package/dist/server/server/features/auth/logout/endpoint.js +16 -0
- package/dist/server/server/features/auth/register/options/endpoint.js +34 -0
- package/dist/server/server/features/auth/register/verify/endpoint.js +56 -0
- package/dist/server/server/features/auth/status/endpoint.js +24 -0
- package/dist/server/server/features/plans/application/native-plan-alignment.js +39 -0
- package/dist/server/server/features/plans/domain/workspace-plan-catalog.js +6 -0
- package/dist/server/server/features/plans/get-workspace-plan/endpoint.js +23 -0
- package/dist/server/server/features/plans/list-workspace-plans/endpoint.js +18 -0
- package/dist/server/server/features/sessions/session-events/endpoint.js +7 -2
- package/dist/server/server/platform/auth/simple-webauthn-adapter.js +75 -0
- package/dist/server/server/platform/auth/sqlite-authorization-store.js +478 -0
- package/dist/server/server/platform/codex/session-runtime.js +28 -0
- package/dist/server/server/platform/codex/thread-plan-name.js +23 -0
- package/dist/server/server/platform/events/websocket-heartbeat.js +5 -1
- package/dist/server/server/platform/http/authorization-boundary.js +60 -0
- package/dist/server/server/platform/plans/filesystem-plan-status-source.js +29 -8
- package/dist/server/server/platform/plans/filesystem-workspace-plan-catalog.js +113 -0
- package/package.json +7 -2
- package/dist/client/assets/index-Cjxvsp9k.js +0 -12
- package/dist/client/assets/index-DrULMr7l.css +0 -1
package/README.md
CHANGED
|
@@ -54,16 +54,18 @@ configuration or skill files.
|
|
|
54
54
|
|
|
55
55
|
## Command-line options
|
|
56
56
|
|
|
57
|
-
| Option
|
|
58
|
-
|
|
|
59
|
-
| `--cwd <path>`
|
|
60
|
-
| `--host <address>`
|
|
61
|
-
| `--port <number>`
|
|
62
|
-
| `--
|
|
63
|
-
| `--
|
|
64
|
-
| `--
|
|
65
|
-
| `--
|
|
66
|
-
| `--
|
|
57
|
+
| Option | Default | Purpose |
|
|
58
|
+
| -------------------------- | -------------------- | ----------------------------------------------------------------- |
|
|
59
|
+
| `--cwd <path>` | Current directory | Root containing selectable workspaces |
|
|
60
|
+
| `--host <address>` | `127.0.0.1` | HTTP listen address |
|
|
61
|
+
| `--port <number>` | `3000` | HTTP listen port, from 1 through 65535 |
|
|
62
|
+
| `--public-origin <origin>` | Loopback Vite origin | Exact browser origin for passkeys; required for non-loopback hosts |
|
|
63
|
+
| `--disable-passkey-auth` | Off | Disable passkey access control and serve every client directly |
|
|
64
|
+
| `--data-dir <path>` | XDG state directory | Directory containing `relay.sqlite` |
|
|
65
|
+
| `--skills <profile>` | | Apply a saved global profile to every session |
|
|
66
|
+
| `--skills list` | | List global profiles without starting the server |
|
|
67
|
+
| `--help` | | Print usage without starting the application |
|
|
68
|
+
| `--version` | | Print the installed package version |
|
|
67
69
|
|
|
68
70
|
`--cwd` may be relative to the directory where the command is invoked. The
|
|
69
71
|
resolved directory is the selectable root of a recursive workspace tree. Dot
|
|
@@ -73,10 +75,36 @@ included only when their real target stays under the resolved root; repeated
|
|
|
73
75
|
real targets and cycles are omitted. Browser requests select nodes by opaque ID,
|
|
74
76
|
while real filesystem paths remain server-side.
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
## Passkey deployment and operating limits
|
|
79
|
+
|
|
80
|
+
Gestalt Mobile has built-in passkey authentication, but does **not** terminate
|
|
81
|
+
TLS. `--public-origin` must be the exact origin the browser uses, including its
|
|
82
|
+
external HTTPS scheme and port. `http://localhost` is the development-only
|
|
83
|
+
exception; every other browser origin must be HTTPS. For example, a local
|
|
84
|
+
developer may use `--public-origin http://localhost:3000`, while a deployed
|
|
85
|
+
relay may listen locally on `127.0.0.1:3000` behind
|
|
86
|
+
`https://relay.example.org` with `--public-origin https://relay.example.org`.
|
|
87
|
+
|
|
88
|
+
For mobile or network use, put a trusted HTTPS reverse proxy or tunnel in front
|
|
89
|
+
of the relay. It must preserve the external host and origin, cookies, and
|
|
90
|
+
WebSocket upgrade; do not mount the relay below a rewritten path prefix. Same
|
|
91
|
+
hostname processes may use different ports and share authorization (for example,
|
|
92
|
+
two local relay processes behind `https://relay.example.org`), but an RP-ID/
|
|
93
|
+
hostname change is refused once credentials exist because it would strand those
|
|
94
|
+
credentials. Do not expose `--host 0.0.0.0` before that boundary is in place.
|
|
95
|
+
|
|
96
|
+
An empty authorization store is deliberately bootstrap-open: the first verified passkey becomes the owner. Register a device before exposing the service. The
|
|
97
|
+
final authorized device cannot be deleted; synced passkeys can represent more
|
|
98
|
+
than one physical device, and an enrollment QR/link is neither recovery nor
|
|
99
|
+
proof of physical proximity.
|
|
100
|
+
|
|
101
|
+
`--disable-passkey-auth` restores the unprotected serving behavior from before
|
|
102
|
+
passkey authentication was added. It does not create or consult passkey state,
|
|
103
|
+
and `--public-origin` is not required even for a non-loopback listener. This is
|
|
104
|
+
an explicit unsafe mode: anyone who can reach the HTTP or WebSocket listener has
|
|
105
|
+
full access to workspaces, Codex sessions, and Git operations. Use it only on a
|
|
106
|
+
trusted, access-controlled local environment; never expose that mode directly
|
|
107
|
+
to a shared or public network. Startup prints a warning whenever it is active.
|
|
80
108
|
|
|
81
109
|
## Persistent state
|
|
82
110
|
|
|
@@ -87,6 +115,28 @@ stored below `$XDG_STATE_HOME/gestalt-mobile/<workspace-hash>/relay.sqlite`, or
|
|
|
87
115
|
`XDG_STATE_HOME` is unset. A matching legacy `codex-relay` database is reused
|
|
88
116
|
when present.
|
|
89
117
|
|
|
118
|
+
Authorization is separate shared state at
|
|
119
|
+
`~/.codex-gestalt/gestalt-mobile/auth.sqlite` (under the selected home). Its
|
|
120
|
+
directory is created owner-only (`0700`); treat the database as sensitive and
|
|
121
|
+
keep it accessible only to the local relay user. Back up `auth.sqlite`
|
|
122
|
+
with `auth.sqlite-wal` and `auth.sqlite-shm` only after **all** instances are
|
|
123
|
+
stopped, or use SQLite backup tooling.
|
|
124
|
+
|
|
125
|
+
Recovery after losing every passkey is deliberately local and manual: stop every
|
|
126
|
+
instance, make a backup, remove only `auth.sqlite` and its `-wal`/`-shm`
|
|
127
|
+
sidecars, restart into visibly open bootstrap mode, and immediately enroll a new
|
|
128
|
+
device before exposing the service. This discards authorization, device, and
|
|
129
|
+
session state only—not workspace relay databases or history—and is dangerous
|
|
130
|
+
while the service is exposed. There is intentionally no hosted service,
|
|
131
|
+
federation, remote administrator, recovery code, credential export,
|
|
132
|
+
authentication audit analytics, attestation trust policy, or automatic reset.
|
|
133
|
+
|
|
134
|
+
For the protocol requirements behind these limits, see the official
|
|
135
|
+
[SimpleWebAuthn server guide](https://simplewebauthn.dev/docs/packages/server),
|
|
136
|
+
[SimpleWebAuthn passkey guidance](https://simplewebauthn.dev/docs/advanced/passkeys/),
|
|
137
|
+
[MDN passkey guide](https://developer.mozilla.org/en-US/docs/Web/Security/Authentication/Passkeys),
|
|
138
|
+
and [W3C WebAuthn RP ID, origin, and challenge requirements](https://www.w3.org/TR/webauthn-3/).
|
|
139
|
+
|
|
90
140
|
## Sessions
|
|
91
141
|
|
|
92
142
|
The Sessions tab uses the recursive filesystem tree to choose the base directory
|