@ours.network/install 1.2.1-nightly.4 → 1.2.1-nightly.41

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 (58) hide show
  1. package/GATEWAY_SETUP.md +178 -0
  2. package/README.md +471 -9
  3. package/ROOTLESS_PODMAN_VALIDATION.md +210 -0
  4. package/assets/Dockerfile +14 -12
  5. package/assets/Dockerfile.gateway +5 -0
  6. package/assets/docker-compose.yaml +8 -1
  7. package/assets/fleet-settings.example.json +48 -0
  8. package/assets/gateway-entrypoint.sh +37 -0
  9. package/assets/release-lock.json +1177 -4508
  10. package/assets/release.json +37 -19
  11. package/assets/scripts/build/build-common.mjs +2 -1
  12. package/assets/scripts/build/build-sdk.mjs +6 -1
  13. package/assets/scripts/maintenance/build-context.mjs +1 -1
  14. package/assets/scripts/maintenance/daemon-owner.mjs +15 -0
  15. package/assets/scripts/maintenance/docker-layout-conversion.mjs +7 -3
  16. package/assets/scripts/maintenance/recover-notifications.mjs +26 -0
  17. package/assets/scripts/maintenance/release-graph.mjs +18 -1
  18. package/assets/scripts/maintenance/state-operation.mjs +62 -5
  19. package/assets/scripts/runtime/README.md +7 -0
  20. package/assets/scripts/runtime/client-setup.mjs +80 -6
  21. package/assets/scripts/runtime/dependency-ready.mjs +13 -0
  22. package/assets/scripts/runtime/diagnostics.mjs +72 -0
  23. package/assets/scripts/runtime/entrypoint.sh +5 -1
  24. package/assets/scripts/runtime/health-messenger.mjs +7 -6
  25. package/assets/scripts/runtime/notifications-gateway.mjs +90 -0
  26. package/assets/scripts/runtime/recover.mjs +165 -0
  27. package/assets/scripts/runtime/start-cowork.sh +5 -0
  28. package/assets/scripts/runtime/start-messenger.sh +29 -4
  29. package/assets/scripts/runtime/start-telegram.sh +5 -0
  30. package/assets/scripts/runtime/supervise.mjs +35 -0
  31. package/assets/sources.json +54 -28
  32. package/install.mjs +7 -2
  33. package/lib/boot-readiness.mjs +43 -0
  34. package/lib/build-transition.mjs +16 -0
  35. package/lib/client-cli.mjs +127 -0
  36. package/lib/container-engine.mjs +127 -0
  37. package/lib/diagnostics.mjs +1 -0
  38. package/lib/docker-conversion-runtime.mjs +3 -2
  39. package/lib/docker-layout-installation.mjs +2 -1
  40. package/lib/docker-recovery.mjs +55 -0
  41. package/lib/docker-runtime-repair.mjs +160 -0
  42. package/lib/effects.mjs +357 -133
  43. package/lib/gateway-transition.mjs +87 -0
  44. package/lib/gateway.mjs +158 -0
  45. package/lib/legacy-migration.mjs +13 -2
  46. package/lib/orchestrate-uninstall.mjs +18 -6
  47. package/lib/orchestrate.mjs +193 -43
  48. package/lib/plan.mjs +27 -11
  49. package/lib/podman-preflight.mjs +40 -0
  50. package/lib/server-onboarding.mjs +164 -16
  51. package/lib/server-ports.mjs +17 -0
  52. package/lib/setup-options.mjs +99 -28
  53. package/lib/setup.mjs +35 -17
  54. package/lib/target.mjs +24 -8
  55. package/lib/uninstall.mjs +2 -2
  56. package/lib/usage.mjs +21 -7
  57. package/lib/workspace-setup.mjs +83 -0
  58. package/package.json +4 -2
@@ -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.