@ours.network/install 1.2.0-nightly.2 → 1.2.1-nightly.2

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 CHANGED
@@ -1,152 +1,70 @@
1
- # @ours.network/install — `ours-install`
1
+ # @ours.network/install — one installer for the whole stack
2
2
 
3
- The all-in-one installer for the ours.network stack. One run installs and
4
- configures the shared daemon, MCP adapter, cowork, Telegram connector, Fleet,
5
- and plugins for every safely detected agent harness.
3
+ Requires Node.js 22+ and npm. Install the selected release channel:
6
4
 
7
5
  ```sh
8
- npm install --global @ours.network/install
6
+ npm install -g @ours.network/install@nightly
9
7
  ours-install
10
8
  ```
11
9
 
12
- ### Stable and nightly channels
13
-
14
- Installing `@ours.network/install@latest` selects the stable channel; installing
15
- `@ours.network/install@nightly` selects the nightly channel. Before changing the
16
- machine, the installer resolves `@ours.network/mcp`,
17
- `@ours.network/claude-code`, and `@ours.network/codex`, verifies that their
18
- selected dist-tags expose one exact lockstep version, and fails closed if they
19
- do not. MCP and the Codex launcher are installed by exact version, and local
20
- Claude Code and Codex marketplace manifests pin the corresponding plugin
21
- packages to that same version.
22
-
23
- `OURS_CHANNEL=latest|nightly` (or the legacy `OURS_INSTALL_CHANNEL`) remains an
24
- explicit override. Without an override, the installed package's own version
25
- selects the channel.
26
-
27
- The normal flow uses one daemon at `~/.ours` on port 3050, shows an eight-stage
28
- progress bar, and asks only for information it cannot safely infer (normally the
29
- Human identity's display name). Existing daemon conflicts and moving a Telegram
30
- connector from another daemon still require explicit confirmation.
31
-
32
- ## What the installer does
33
-
34
- - Installs `@ours.network/cli`, `@ours.network/mcp`,
35
- `@ours.network/tg-connector`, `@ours.network/cowork`, and
36
- `@ours.network/fleet` on one release channel.
37
- - Configures, starts, and enables the single shared daemon with a CLI-managed
38
- user systemd service on Linux or LaunchAgent on macOS.
39
- - Creates the daemon's Human identity (historically called the root identity),
40
- or preserves the existing one on a re-run.
41
- - Installs the ours plugin into safely detected Claude Code, Codex, and Hermes
42
- installations.
43
- - Configures and starts cowork as a durable shim over the shared daemon.
44
- - Configures and starts Telegram as a durable shim over the same daemon.
45
- - Runs Fleet's native initialization through prepared settings or its interactive wizard. Fleet owns and
46
- publishes its v2 configuration, including subscriptions, models, roles,
47
- templates, and permissions. The installer does not start Fleet roles.
48
-
49
- The operator CLI owns daemon configuration, lifecycle, and boot persistence.
50
- The MCP package is only the stdio adapter spawned by agent harnesses; the
51
- installer never asks `ours-mcp` to start a daemon.
52
-
53
- Daemon state is temporarily scoped to its package major version. On a same-major
54
- update, the installer refreshes the packages and runs `ours daemon restart`; the
55
- CLI streams structured startup phases until restore is complete instead of
56
- appearing to hang. A different-major update is detected before package
57
- replacement. The installer explains the incompatibility and, only in an
58
- interactive run, offers to stop the CLI-managed daemon, copy the complete state
59
- directory to a timestamped directory under `~/.ours-backups/`, remove the
60
- managed service and old state, then initialize the new major. The default answer is no, and
61
- `OURS_ASSUME_YES` never authorizes this purge.
62
-
63
- ## What remains stopped
64
-
65
- Only Fleet is intentionally not started. Review and activate it when ready:
10
+ With no arguments, the console form collects the installation choices: server
11
+ and clients (default), runtime mode, installation directory, install/update,
12
+ Human identity name, ports, client integrations and Fleet settings. Linux x64
13
+ recommends native mode; macOS and Windows recommend Docker. On Windows run the
14
+ installer inside WSL with Docker Desktop integration. This recommendation concerns
15
+ packaging and isolation, not a guarantee that emulated x64 is faster on ARM Macs.
66
16
 
67
- ```sh
68
- # After completing Fleet's wizard and reviewing ~/fleet.yaml:
69
- ours-fleet doctor
70
- ours-fleet config
71
- ours-fleet up
72
- ours-fleet ls
73
- ```
74
-
75
- The final installer screen repeats these commands and provides a copy-paste
76
- prompt for Claude Code, Codex, or Hermes. The agent should guide local bot-token
77
- entry without asking the user to paste the secret into chat.
78
-
79
- ## Preview and automation
17
+ The same installer accepts complete CLI presets. It reports missing answers before
18
+ changing the machine and never opens hidden prompts when arguments are supplied.
19
+ Both forms show the same preparation, identity, update and readiness progress.
80
20
 
81
21
  ```sh
82
- ours-install --dry-run
83
- OURS_ASSUME_YES=1 ours-install
84
- ours-install --state-dir /absolute/path --port 3070
22
+ # Whole stack, with prepared Fleet settings and no interactive prompts:
23
+ ours-install --mode docker --state-dir "$HOME/ours-docker" \
24
+ --identity-name "Your Name" --integrations codex,fleet \
25
+ --fleet-settings "$HOME/fleet-settings.json"
26
+
27
+ # Native server only; native and packages mean the same mode:
28
+ ours-install server --mode native --state-dir "$HOME/ours-native" \
29
+ --identity-name "Your Name"
30
+
31
+ # Clients connected to an existing server:
32
+ ours-install client --config /private/client/profile.json \
33
+ --integrations codex,fleet --fleet-settings /private/fleet-settings.json
34
+
35
+ # Update a retained complete installation and its clients:
36
+ ours-install all update --mode docker --state-dir "$HOME/ours-docker" \
37
+ --identity-name "Your Name" --integrations codex,fleet \
38
+ --fleet-settings "$HOME/fleet-settings.json" --compatible
85
39
  ```
86
40
 
87
- Dry-run walks the real plan without writing files, installing packages, starting
88
- processes, or changing services. `OURS_ASSUME_YES=1` uses the OS username for a
89
- new Human identity and asks no ordinary setup questions, but it never bypasses
90
- selection conflicts, connector moves, or destructive safeguards.
91
-
92
- A non-default daemon must be selected coherently with a config file or matching
93
- port and state directory. Hermes and the generated Fleet role persist that
94
- selection through `OURS_CONFIG`. Claude Code and Codex plugin registrations
95
- cannot store an environment value; for those harnesses the installer prints the
96
- exact `export OURS_CONFIG=...` line that must be added to the shell profile
97
- before starting the harness. There is no per-application daemon.
98
-
99
- `OURS_CONFIG` may also name a prepared private host profile containing the
100
- complete `endpoint`, `expectedInstanceId`, and absolute `credentialPath` tuple.
101
- The profile and credential must already be regular current-user files with
102
- private permissions. In this mode the installer verifies `/selection` before
103
- sending the credential to `/version`, installs only MCP, detected Claude/Codex
104
- plugins, and Fleet client support, and never creates, starts, stops, or services
105
- a host daemon. Telegram, cowork, messenger, daemon voice, and daemon state stay
106
- Compose-owned. If `OURS_CONFIG` is unset, the same profile is discovered at
107
- `~/.ours/config.json`; a legacy config there keeps the existing local behavior.
108
-
109
- ## Uninstall
110
-
111
- ```sh
112
- ours-uninstall --state-dir "$HOME/.ours"
113
- ours-uninstall --state-dir "$HOME/.ours" --purge
114
- ```
115
-
116
- The uninstaller delegates service and daemon removal to the `ours` CLI. Identity
117
- state is retained by default. Purging requires the existing destructive gates and
118
- targets only the explicit state directory.
119
-
120
- When `OURS_CONFIG` selects a host profile, uninstall removes only selected
121
- client attachments. The operator-owned profile and shared credential are kept
122
- even with `--purge`, and no Compose daemon, service, or state is touched.
123
-
124
- ## Release channel
125
-
126
- `OURS_CHANNEL=nightly` (or `OURS_INSTALL_CHANNEL`) selects the packages' nightly
127
- dist-tags. Without an override, the installer's own version selects the channel.
128
- The operator CLI intentionally has no nightly dist-tag and remains untagged on
129
- both channels.
41
+ `server` and `client` are presets of the same flow, not separate interactive
42
+ installers. `--integrations none` explicitly skips client integrations. Use
43
+ `--dry-run` with a complete preset to preview it, and `--help` for all options.
44
+ Fleet's own wizard is available only in interactive setup; CLI Fleet setup requires
45
+ its JSON settings file. Fleet stays stopped until you review and activate it.
130
46
 
131
- ## Environment
47
+ The server installs the daemon/SDK/CLI, main MCP, Telegram, Cowork and Messenger.
48
+ It starts the daemon, preserves the existing Human identity (or creates it once),
49
+ then starts its applications. Full-stack setup issues a separate local client
50
+ credential and configures the selected Codex, Claude Code and Fleet integrations.
51
+ Existing identity keys and names are retained on update. An update's storage
52
+ compatibility must be reviewed before supplying `--compatible`.
132
53
 
133
- - `OURS_ASSUME_YES=1`: accept safe defaults without prompting.
134
- - `OURS_INSTALL_DRY_RUN=1`: preview without mutation.
135
- - `OURS_NPM`: npm executable.
136
- - `OURS_CONFIG`: explicit legacy daemon config or prepared private host profile.
137
- - `OURS_STATE_DIR`: explicit daemon state directory.
138
- - `OURS_CHANNEL`: `latest` or `nightly`.
54
+ The installer embeds exact component versions and SHA-512 values for its release.
55
+ An existing server's retained release selects matching local clients. Secrets are
56
+ read from protected files, and client setup never copies the daemon API master.
139
57
 
140
58
  ## Selected network installations (2.0)
141
59
 
142
60
  The installed package carries its compatible `assets/sources.json` policy.
143
- `--sources` remains available as an explicit development override. Feature
144
- revisions in the testing delivery remain unpublished; local build evidence does
145
- not prove remote fetchability or compatibility of a replacement source set.
61
+ `--sources` remains available as an explicit development override. Published releases bind that policy to exact component versions and registry
62
+ SHA-512 values. Acquisition validates the ours dependency graph before activation.
63
+ A development override without a release binding is not a qualified product release.
146
64
 
147
65
  ```sh
148
- ours-install server install --mode docker --state-dir /private/ours-install
149
- ours-install server install --mode packages --state-dir /private/ours-install
66
+ ours-install server install --mode docker --state-dir /private/ours-install --identity-name "Your Name"
67
+ ours-install server install --mode packages --state-dir /private/ours-install --identity-name "Your Name"
150
68
  ours-install server status --state-dir /private/ours-install
151
69
  ours-install server stop --state-dir /private/ours-install
152
70
  ours-install server start --state-dir /private/ours-install
@@ -169,6 +87,17 @@ Linux/WSL or a launchd GUI user domain on macOS. Source builds also require Git,
169
87
  Python 3, a C/C++ toolchain, make, and the selected repositories' own prerequisites.
170
88
  Docker mode requires a working Docker engine and Compose 2.35+; its build image
171
89
  contains the source-build prerequisites. No bind or Docker socket mounts are used.
90
+ Docker is recommended for macOS and Windows. Install and start Docker Desktop
91
+ on those hosts; on Linux, install Docker Engine and the Compose plugin. If Docker
92
+ is unavailable, the installer explains how to install/start it or use
93
+ `server install --mode packages --state-dir <new-empty-directory>` instead.
94
+ Native Windows installations require WSL with a working systemd user manager.
95
+ The installer never switches an existing installation's mode automatically.
96
+ Server installation shows each stage before it starts, streams Docker builds and
97
+ native package acquisition, and reports completion only after service readiness.
98
+ If a Docker service fails, the error includes its last 50 log lines (bounded in
99
+ size) and a command to inspect the logs. A failed daemon prevents consumers from
100
+ starting; a failed consumer does not prevent checks of unrelated consumers.
172
101
  Server runtime installation selects SDK/CLI, main MCP, Telegram, Cowork and
173
102
  Messenger. Main MCP is injected into the daemon, not started as a second daemon.
174
103
  The daemon starts first; consumers are checked through their owning readiness
@@ -219,7 +148,7 @@ client-owned installer settings:
219
148
  ```
220
149
 
221
150
  ```sh
222
- ours-install client install --config /private/client/profile.json
151
+ ours-install client install --config /private/client/profile.json --integrations codex,claude-code
223
152
  ```
224
153
 
225
154
  Optional `sourcesPath` and `fleetSettingsPath` values are absolute or resolved
@@ -269,7 +198,7 @@ For a managed server, maintenance runs on the server machine through the install
269
198
  ours-install server backup server snapshot --state-dir /path/to/installation
270
199
  ours-install server restore server snapshot --state-dir /path/to/installation
271
200
  ours-install server rebuild --state-dir /path/to/installation
272
- ours-install server update --state-dir /path/to/installation --compatible
201
+ ours-install server update --mode docker --state-dir /path/to/installation --identity-name "Your Name" --compatible
273
202
  ```
274
203
 
275
204
  Backup and restore support the full server or an individual `daemon`, `telegram`,
package/assets/Dockerfile CHANGED
@@ -5,7 +5,7 @@ FROM toolchain AS build
5
5
  WORKDIR /opt/ours
6
6
  COPY sources.json /opt/ours/sources.json
7
7
  COPY scripts/build/*.mjs /build-scripts/
8
- COPY scripts/maintenance/build-context.mjs scripts/maintenance/provenance-compare.mjs /maintenance/
8
+ COPY scripts/maintenance/build-context.mjs scripts/maintenance/provenance-compare.mjs scripts/maintenance/release-graph.mjs /maintenance/
9
9
  RUN --mount=type=secret,id=github_token --mount=type=cache,id=ours-dist-2-npm,target=/root/.npm,sharing=locked node /build-scripts/build.mjs
10
10
  # Testing delivery: npm resolves transitive versions afresh; repeat builds may differ.
11
11
  # build.mjs creates package.json once from the sources.json selections.
@@ -16,7 +16,7 @@ RUN node /build-scripts/record-build.mjs
16
16
  # must be able to read it. Protected state/host copies retain private ownership.
17
17
  RUN chmod 755 /opt/ours /opt/ours/docker /opt/ours/docker/vendor && chmod 644 package.json package-lock.json dependency-tree.json build-context.json docker/vendor/*.tgz
18
18
  LABEL network.ours.build-context="1"
19
- COPY scripts/maintenance/build-context.mjs scripts/maintenance/provenance-compare.mjs /opt/ours/maintenance/
19
+ COPY scripts/maintenance/build-context.mjs scripts/maintenance/provenance-compare.mjs scripts/maintenance/release-graph.mjs /opt/ours/maintenance/
20
20
  COPY scripts/runtime/runtime-common.mjs /opt/ours/docker/runtime-common.mjs
21
21
  COPY scripts/runtime/check-client.mjs /opt/ours/docker/check-client.mjs
22
22
  COPY scripts/runtime/check-start.mjs /opt/ours/docker/check-start.mjs