@ours.network/install 1.2.1-nightly.4 → 1.2.1-nightly.40
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/GATEWAY_SETUP.md +178 -0
- package/README.md +453 -9
- package/ROOTLESS_PODMAN_VALIDATION.md +210 -0
- package/assets/Dockerfile +14 -12
- package/assets/Dockerfile.gateway +5 -0
- package/assets/docker-compose.yaml +8 -1
- package/assets/fleet-settings.example.json +48 -0
- package/assets/gateway-entrypoint.sh +37 -0
- package/assets/release-lock.json +1139 -4470
- package/assets/release.json +37 -19
- package/assets/scripts/build/build-common.mjs +2 -1
- package/assets/scripts/build/build-sdk.mjs +6 -1
- package/assets/scripts/maintenance/build-context.mjs +1 -1
- package/assets/scripts/maintenance/daemon-owner.mjs +15 -0
- package/assets/scripts/maintenance/docker-layout-conversion.mjs +7 -3
- package/assets/scripts/maintenance/release-graph.mjs +18 -1
- package/assets/scripts/maintenance/state-operation.mjs +12 -2
- package/assets/scripts/runtime/README.md +7 -0
- package/assets/scripts/runtime/client-setup.mjs +80 -6
- package/assets/scripts/runtime/dependency-ready.mjs +13 -0
- package/assets/scripts/runtime/diagnostics.mjs +72 -0
- package/assets/scripts/runtime/entrypoint.sh +5 -1
- package/assets/scripts/runtime/health-messenger.mjs +7 -6
- package/assets/scripts/runtime/notifications-gateway.mjs +90 -0
- package/assets/scripts/runtime/recover.mjs +165 -0
- package/assets/scripts/runtime/start-cowork.sh +5 -0
- package/assets/scripts/runtime/start-messenger.sh +29 -4
- package/assets/scripts/runtime/start-telegram.sh +5 -0
- package/assets/scripts/runtime/supervise.mjs +35 -0
- package/assets/sources.json +54 -28
- package/install.mjs +7 -2
- package/lib/boot-readiness.mjs +43 -0
- package/lib/build-transition.mjs +3 -0
- package/lib/client-cli.mjs +127 -0
- package/lib/container-engine.mjs +127 -0
- package/lib/diagnostics.mjs +1 -0
- package/lib/docker-conversion-runtime.mjs +3 -2
- package/lib/docker-layout-installation.mjs +2 -1
- package/lib/docker-recovery.mjs +55 -0
- package/lib/docker-runtime-repair.mjs +160 -0
- package/lib/effects.mjs +323 -132
- package/lib/gateway-transition.mjs +87 -0
- package/lib/gateway.mjs +158 -0
- package/lib/legacy-migration.mjs +13 -2
- package/lib/orchestrate-uninstall.mjs +18 -6
- package/lib/orchestrate.mjs +193 -43
- package/lib/plan.mjs +27 -11
- package/lib/podman-preflight.mjs +40 -0
- package/lib/server-onboarding.mjs +164 -16
- package/lib/server-ports.mjs +17 -0
- package/lib/setup-options.mjs +99 -28
- package/lib/setup.mjs +35 -17
- package/lib/target.mjs +24 -8
- package/lib/uninstall.mjs +2 -2
- package/lib/usage.mjs +21 -7
- package/lib/workspace-setup.mjs +83 -0
- package/package.json +4 -2
package/GATEWAY_SETUP.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Set up Ours with one client connection
|
|
2
|
+
|
|
3
|
+
Fleet, the `ours` CLI and MCP clients share `~/.ours-client/profile.json`.
|
|
4
|
+
Set the server address once. The address is the HTTP gateway: clients append
|
|
5
|
+
`/daemon`, `/cowork`, `/messenger` or `/tg-connector` as needed. They do not
|
|
6
|
+
connect to server Unix sockets, discover server state directories, or try port
|
|
7
|
+
3050 after a connection failure. Fleet's local supervisor/harness sockets still
|
|
8
|
+
control local processes; they do not carry server management requests.
|
|
9
|
+
|
|
10
|
+
## Release availability
|
|
11
|
+
|
|
12
|
+
The nightly manifest selects one published dependency graph: SDK
|
|
13
|
+
`3.8.1-nightly.14`, CLI `2.8.1-nightly.12`, daemon `3.8.1-nightly.6`,
|
|
14
|
+
Fleet `1.2.0-nightly.17`, MCP/Codex/Claude Code `1.2.0-nightly.9`,
|
|
15
|
+
Telegram `1.0.1-nightly.8`, Messenger `1.0.31-nightly.8`, and Cowork
|
|
16
|
+
`1.3.3-nightly.20260926.ceab465`. Exact archive checksums are retained in
|
|
17
|
+
`releases/nightly.json`; the host CLI uses the same SDK/CLI pair.
|
|
18
|
+
|
|
19
|
+
The coordinated installer release must include these pins before using the
|
|
20
|
+
commands below. Its release gate verifies the actual registry and vendored
|
|
21
|
+
package graphs, client acquisition/retry, and rejection of dependency drift.
|
|
22
|
+
These checks do not deploy or certify an existing server installation.
|
|
23
|
+
|
|
24
|
+
The daemon includes ADAPT SDK/native `0.12.1` and the shutdown socket-reset
|
|
25
|
+
correction from [SDK PR70](https://github.com/adapt-toolkit/ours-sdk/pull/70).
|
|
26
|
+
Client profile commands do not control server processes.
|
|
27
|
+
|
|
28
|
+
## Fresh full-stack setup on localhost:4050
|
|
29
|
+
|
|
30
|
+
For an agent asked to “put the daemon on localhost port 4050”, use **4050 as the
|
|
31
|
+
public gateway port**. The daemon's internal container port stays 3050. Docker
|
|
32
|
+
publishes only the gateway. Run as the user who will run Fleet and the harnesses.
|
|
33
|
+
Use Node.js 22+ and a working Docker Compose installation.
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
npm install -g @ours.network/install@nightly
|
|
37
|
+
ours-install all install --mode docker \
|
|
38
|
+
--state-dir "$HOME/ours-server" --identity-name "Your Name" \
|
|
39
|
+
--port 4050 --integrations codex,claude-code
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The installer starts the server, retains or creates its Human identity, issues a
|
|
43
|
+
separate client credential, and imports the connection into `~/.ours-client`.
|
|
44
|
+
For Fleet, add `fleet` to `--integrations` and provide
|
|
45
|
+
`--fleet-settings /absolute/path/fleet-settings.json`; see the Fleet settings
|
|
46
|
+
example in [assets/fleet-settings.example.json](assets/fleet-settings.example.json).
|
|
47
|
+
The example selects Codex for all three jobs; review its model and subscription
|
|
48
|
+
against the installed Fleet catalog before use. The installer prepares Fleet but leaves it
|
|
49
|
+
stopped for review. Use `--dry-run` first to inspect a complete preset.
|
|
50
|
+
|
|
51
|
+
Do not set `OURS_PORT=4050` in a client shell, Fleet role, or user service. The
|
|
52
|
+
single profile contains `serverUrl: "http://127.0.0.1:4050"`, with daemon requests
|
|
53
|
+
at `http://127.0.0.1:4050/daemon` and Cowork management at
|
|
54
|
+
`http://127.0.0.1:4050/cowork/management/rpc`.
|
|
55
|
+
|
|
56
|
+
## Existing or remote server
|
|
57
|
+
|
|
58
|
+
An older Docker installation needs its gateway enabled on the **server host**:
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
ours-install server gateway-enable --state-dir "$HOME/ours-server"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
This is a server migration that may restart its services; perform it in an
|
|
65
|
+
approved maintenance window. Do not change identities or reinstall a populated
|
|
66
|
+
server to change a client address. `--port` on an existing installation cannot
|
|
67
|
+
silently move the retained public port.
|
|
68
|
+
|
|
69
|
+
For a remote host, expose the gateway through an authenticated HTTPS entrypoint
|
|
70
|
+
and select that URL when installing the server, for example
|
|
71
|
+
`--server-url https://ours.example.net/base`. The reverse proxy must preserve the
|
|
72
|
+
base prefix, streaming responses and WebSocket upgrades. Do not expose the
|
|
73
|
+
individual service ports.
|
|
74
|
+
|
|
75
|
+
Obtain an issued credential using `ours-install server access-issue --state-dir
|
|
76
|
+
/absolute/server/root --output /private/credential` on the server. Transfer it
|
|
77
|
+
privately to the client user. Never print the credential or put it into command
|
|
78
|
+
arguments, source control, chat, or a service unit. Use a private directory
|
|
79
|
+
(mode 0700) and credential/profile files (mode 0600).
|
|
80
|
+
|
|
81
|
+
Prepare a client profile (the UUID must be the selected server's actual instance):
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"serverUrl": "https://ours.example.net/base",
|
|
86
|
+
"endpoint": "https://ours.example.net/base/daemon",
|
|
87
|
+
"expectedInstanceId": "11111111-2222-3333-4444-555555555555",
|
|
88
|
+
"credentialPath": "/absolute/private/credential"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`endpoint` is optional for the client resolver; when present it must exactly match
|
|
93
|
+
`serverUrl + "/daemon"` after trailing-slash normalization. Older endpoint-only
|
|
94
|
+
profiles must be migrated explicitly: supply the actual gateway URL, not a
|
|
95
|
+
guessed address derived from a direct daemon port.
|
|
96
|
+
|
|
97
|
+
```sh
|
|
98
|
+
ours-install client --config /absolute/private/profile.json \
|
|
99
|
+
--integrations codex,claude-code
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
This imports the profile and issued credential into `~/.ours-client`. All new
|
|
103
|
+
clients use that default without an environment export. A conflicting existing
|
|
104
|
+
server instance is refused and retained; do not delete it to bypass that check.
|
|
105
|
+
To change only the gateway address of the same server, prepare a private profile
|
|
106
|
+
with the new `serverUrl` and matching `/daemon` endpoint, keep its actual
|
|
107
|
+
`expectedInstanceId`, and run the same `ours-install client --config ...` command.
|
|
108
|
+
The installer validates authenticated access before importing the new address;
|
|
109
|
+
it preserves imported Fleet settings. New processes use the new address. A
|
|
110
|
+
failed verification leaves the old selection intact. A different server UUID
|
|
111
|
+
requires a separately planned migration, not an address edit.
|
|
112
|
+
|
|
113
|
+
Changing the retained Docker public listening port in place is not currently
|
|
114
|
+
supported. `--port 4050` above is for a fresh server. For an existing server,
|
|
115
|
+
configure an administered reverse proxy to its gateway at the desired address,
|
|
116
|
+
then use the same-instance client address procedure. Do not edit installation
|
|
117
|
+
state or recreate containers with new identities to work around this limitation.
|
|
118
|
+
Native server installations currently need a separately administered gateway;
|
|
119
|
+
the integrated gateway setup above uses Docker (or supported Podman Compose).
|
|
120
|
+
|
|
121
|
+
## Fleet and systemd
|
|
122
|
+
|
|
123
|
+
For a new Fleet setup, save the linked JSON example as an absolute private file
|
|
124
|
+
and run as the same user after importing the client profile:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
ours-fleet init --settings /absolute/path/fleet-settings.json
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
If the installer already imported Fleet settings, reuse them explicitly:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
ours-fleet init --settings "$HOME/.ours-client/fleet-settings.json"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
These commands work without a terminal. A bare `ours-fleet init` is interactive.
|
|
137
|
+
The installer also accepts `--fleet-settings /absolute/path/fleet-settings.json`
|
|
138
|
+
and passes it to this same noninteractive path. Generated systemd and launchd services persist only the common
|
|
139
|
+
profile path, not a service URL, port, or token. Lingering user services therefore
|
|
140
|
+
use the same selection as CLI and MCP after logout/reboot. Detached Fleet task
|
|
141
|
+
workers inherit the common profile and do not inherit legacy service selectors.
|
|
142
|
+
|
|
143
|
+
`OURS_CONFIG` is an explicit override for the **whole client profile**. Use it only
|
|
144
|
+
when all relevant clients intentionally share that same alternate file. It is
|
|
145
|
+
not a per-service address override. For the normal setup, leave it unset.
|
|
146
|
+
|
|
147
|
+
When migrating existing units, inspect `systemctl --user cat 'ours-fleet-agent@.service'`
|
|
148
|
+
and any per-role drop-ins. Remove stale `OURS_PORT`, `OURS_STATE_DIR`,
|
|
149
|
+
`OURS_API_TOKEN`, `OURS_DAEMON_ID` and Cowork-local overrides from their owning
|
|
150
|
+
configuration. Regenerate Fleet units with `ours-fleet init --settings /absolute/path/fleet-settings.json`
|
|
151
|
+
in the intended profile environment, then restart affected client roles only after approval.
|
|
152
|
+
Already-running clients retain their current connection until restarted; editing
|
|
153
|
+
a profile does not rebind running identities. Do not restart the server for a
|
|
154
|
+
client-only profile correction.
|
|
155
|
+
|
|
156
|
+
## Verify and diagnose
|
|
157
|
+
|
|
158
|
+
```sh
|
|
159
|
+
curl --fail http://127.0.0.1:4050/.well-known/ours
|
|
160
|
+
ours config show --json
|
|
161
|
+
ours identity list --json
|
|
162
|
+
ours-fleet doctor
|
|
163
|
+
ours-fleet room list
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Discovery must advertise the gateway and expected instance. `ours config show`
|
|
167
|
+
shows only connection metadata and a credential path, never the token. For a
|
|
168
|
+
remote server use its exact prefix in the discovery URL. Test both daemon
|
|
169
|
+
identity access and Cowork room listing: one succeeding does not prove the other.
|
|
170
|
+
Check `command -v ours-mcp` and `ours-mcp version` as well as the MCP binary launched
|
|
171
|
+
by the harness; Fleet can bundle a different MCP version than the global binary.
|
|
172
|
+
|
|
173
|
+
Missing/unsafe profiles, mismatched instances, rejected credentials, HTTP errors
|
|
174
|
+
and timeouts fail on the selected gateway. Fix that selection or service; do not
|
|
175
|
+
add localhost/socket fallbacks. If a task reports `room_probe_unavailable`, check
|
|
176
|
+
Cowork through the gateway. `control_unavailable` means Fleet could not query its
|
|
177
|
+
local role supervisor after its room checks; inspect the role's supervisor and
|
|
178
|
+
control channel separately. An active room alone does not establish agent readiness.
|