@ours.network/install 1.2.1-nightly.25 → 1.2.1-nightly.26

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
@@ -591,4 +591,4 @@ Existing installation records keep their ports and identities. A listener acquir
591
591
  by another process after preflight still causes startup to fail safely; no foreign
592
592
  process is stopped and no retained installation is silently moved.
593
593
 
594
- Workspace setup pins Fleet `1.2.0-nightly.32` with its recorded registry integrity. This release includes the packaged `/fleet` browser entry, separate `ours-fleet setup-tunnel` and `ours-fleet link-device` commands, and persists the available Fleet loopback port used by the workspace tunnel. Existing installation identities and configured ports remain retained; a retained-port collision fails safely.
594
+ Workspace setup pins Fleet `1.2.0-nightly.33` with its recorded registry integrity. This release includes the packaged `/fleet` browser entry, separate `ours-fleet setup-tunnel` and `ours-fleet link-device` commands, host prerequisite checks before the one-time workspace proof (`setup-tunnel --check`), `setup-tunnel --resume` to finish a setup that stopped after the host saved its private pending setup record (not when the proof's answer was lost, or after the setup window expired with an unconfirmed non-default port), and persists the available Fleet loopback port used by the workspace tunnel. Existing installation identities and configured ports remain retained; a retained-port collision fails safely.
@@ -13,7 +13,7 @@
13
13
  "@ours.network/codex": "1.2.0-nightly.10",
14
14
  "@ours.network/cowork": "1.3.3-nightly.20261001.6d49d3a",
15
15
  "@ours.network/daemon": "3.8.1-nightly.7",
16
- "@ours.network/fleet": "1.2.0-nightly.32",
16
+ "@ours.network/fleet": "1.2.0-nightly.33",
17
17
  "@ours.network/mcp": "1.2.0-nightly.10",
18
18
  "@ours.network/messenger-server": "1.0.31-nightly.13",
19
19
  "@ours.network/sdk": "3.8.1-nightly.15",
@@ -440,9 +440,9 @@
440
440
  }
441
441
  },
442
442
  "node_modules/@agentclientprotocol/sdk": {
443
- "version": "1.6.0",
444
- "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.6.0.tgz",
445
- "integrity": "sha512-XxXrmX7aZkDgOB0Rg9cu+ZFyiUUc5lF2n9seO3Gc4OR+MTdfZOwIqF6m3LvsmmM8K3qgPmXkDH8/IFM2u9vdcQ==",
443
+ "version": "1.6.1",
444
+ "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.6.1.tgz",
445
+ "integrity": "sha512-ziLAZzqrAyW3bkK24c2DSTzLw48fUSKtgG3MTe2pqZgmsvepxXZFlUh9y8UZ2eYOnQ3qBgdcl879YrdWiTu6HQ==",
446
446
  "license": "Apache-2.0",
447
447
  "peerDependencies": {
448
448
  "zod": "^3.25.0 || ^4.0.0"
@@ -1085,9 +1085,9 @@
1085
1085
  }
1086
1086
  },
1087
1087
  "node_modules/@ours.network/fleet": {
1088
- "version": "1.2.0-nightly.32",
1089
- "resolved": "https://registry.npmjs.org/@ours.network/fleet/-/fleet-1.2.0-nightly.32.tgz",
1090
- "integrity": "sha512-FZRE+G25dc2qgDYbM3Dx76lw1Sws5OTF5KHPaMGTL5oun2SgYcNMhVKvwULZWSOlyrpggdMc3IFmp4eZSZTahg==",
1088
+ "version": "1.2.0-nightly.33",
1089
+ "resolved": "https://registry.npmjs.org/@ours.network/fleet/-/fleet-1.2.0-nightly.33.tgz",
1090
+ "integrity": "sha512-2z1Q01LeLRnq1HOcBeYJ67WnH5hI/tC/YdTkA4/K2LFdFtbff0j7M2l4SZDpKQaL8zgLjL8NREMSlOufdULJaA==",
1091
1091
  "license": "FSL-1.1-Apache-2.0",
1092
1092
  "dependencies": {
1093
1093
  "@agentclientprotocol/sdk": "^1.3.0",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": 1,
3
3
  "channel": "nightly",
4
- "installerVersion": "1.2.1-nightly.25",
4
+ "installerVersion": "1.2.1-nightly.26",
5
5
  "packages": {
6
6
  "@ours.network/sdk": {
7
7
  "version": "3.8.1-nightly.15",
@@ -24,8 +24,8 @@
24
24
  "integrity": "sha512-hDosXHgQ+vyzPdSxqTz6vCaOCn0LMTmOL4TJiWplkJhzyw2c586RckXJbqNJsTa0mmodvLxW0ewZyQ/xJVIeXA=="
25
25
  },
26
26
  "@ours.network/fleet": {
27
- "version": "1.2.0-nightly.32",
28
- "integrity": "sha512-FZRE+G25dc2qgDYbM3Dx76lw1Sws5OTF5KHPaMGTL5oun2SgYcNMhVKvwULZWSOlyrpggdMc3IFmp4eZSZTahg=="
27
+ "version": "1.2.0-nightly.33",
28
+ "integrity": "sha512-2z1Q01LeLRnq1HOcBeYJ67WnH5hI/tC/YdTkA4/K2LFdFtbff0j7M2l4SZDpKQaL8zgLjL8NREMSlOufdULJaA=="
29
29
  },
30
30
  "@ours.network/mcp": {
31
31
  "version": "1.2.0-nightly.10",
@@ -2,7 +2,7 @@
2
2
  "release": {
3
3
  "schema": 1,
4
4
  "channel": "nightly",
5
- "installerVersion": "1.2.1-nightly.25",
5
+ "installerVersion": "1.2.1-nightly.26",
6
6
  "packages": {
7
7
  "@ours.network/sdk": {
8
8
  "version": "3.8.1-nightly.15",
@@ -25,8 +25,8 @@
25
25
  "integrity": "sha512-hDosXHgQ+vyzPdSxqTz6vCaOCn0LMTmOL4TJiWplkJhzyw2c586RckXJbqNJsTa0mmodvLxW0ewZyQ/xJVIeXA=="
26
26
  },
27
27
  "@ours.network/fleet": {
28
- "version": "1.2.0-nightly.32",
29
- "integrity": "sha512-FZRE+G25dc2qgDYbM3Dx76lw1Sws5OTF5KHPaMGTL5oun2SgYcNMhVKvwULZWSOlyrpggdMc3IFmp4eZSZTahg=="
28
+ "version": "1.2.0-nightly.33",
29
+ "integrity": "sha512-2z1Q01LeLRnq1HOcBeYJ67WnH5hI/tC/YdTkA4/K2LFdFtbff0j7M2l4SZDpKQaL8zgLjL8NREMSlOufdULJaA=="
30
30
  },
31
31
  "@ours.network/mcp": {
32
32
  "version": "1.2.0-nightly.10",
@@ -79,7 +79,7 @@
79
79
  },
80
80
  "@ours.network/fleet": {
81
81
  "type": "npm",
82
- "version": "1.2.0-nightly.32"
82
+ "version": "1.2.0-nightly.33"
83
83
  },
84
84
  "@ours.network/mcp": {
85
85
  "type": "npm",
@@ -88,7 +88,7 @@ export async function publishClientCli(effects, packagePath, { policy = {}, isol
88
88
  if (sdk.name !== '@ours.network/sdk' || sdk.version !== policy.release.packages['@ours.network/sdk'].version) throw new Error('Private CLI SDK differs from selection');
89
89
  mkdirSync(dirname(entry), { recursive: true });
90
90
  const binDir = lstatSync(dirname(entry));
91
- if (!binDir.isDirectory() || binDir.uid !== process.getuid() || (binDir.mode & 0o022)) throw new Error('CLI bin directory must be owned and not writable by others');
91
+ if (!binDir.isDirectory() || binDir.uid !== process.getuid() || (binDir.mode & 0o022)) throw new Error(`CLI bin directory ${dirname(entry)} must be owned by you and not writable by group or others; run chmod go-w on it, or point npm's global prefix at a directory you own`);
92
92
  const current = stat(entry);
93
93
  if (before ? !current || current.dev !== before.dev || current.ino !== before.ino : current) throw new Error('CLI entry changed during publication');
94
94
  const staged = entry + '.' + randomUUID();
@@ -136,7 +136,8 @@ else { await request('identity/profile', selection.human); process.stdout.write(
136
136
  `;
137
137
  const docker = record.mode === 'docker';
138
138
  const selection = { base: `http://127.0.0.1:${docker ? 8420 : record.messengerPort}`,
139
- origin: `http://127.0.0.1:${record.messengerPort}`,
139
+ // Behind the gateway Messenger accepts mutations only from the gateway origin.
140
+ origin: record.gateway ? gatewayAddress(record).origin : `http://127.0.0.1:${record.messengerPort}`,
140
141
  credentialPath: docker ? '/credentials/messenger/daemon-token' : installationPaths(record).credentials.messenger,
141
142
  human: { name: human.name, surname: human.surname } };
142
143
  const args = ['--input-type=module', '-e', script, JSON.stringify(selection)];
@@ -219,9 +219,17 @@ export async function collectSetupOptions(effects, presets = {}) {
219
219
  }
220
220
  if (options.scope !== 'client') {
221
221
  const recommendation = recommendedMode({ ...effects.platform, arch: effects.platform?.arch ?? process.arch });
222
- effects.out(`${recommendation.reason} Native runs directly on this computer; Docker runs in containers and needs Docker installed and running. An existing installation must keep its current mode.`);
222
+ // Native runs the server only: local clients need the container gateway. A retained
223
+ // native installation keeps its mode, so a full setup of it cannot finish.
224
+ // (An unfinished migration is resumed in its recorded mode and is validated with the plan.)
225
+ if (options.scope === 'all' && existing?.mode === 'packages' && !options.migrateFrom)
226
+ throw new Error('This installation runs natively, which supports the server only. Choose the server-only setup to maintain it (ours-install server); local clients need an installation that runs in Docker or Podman. Nothing was changed.');
227
+ const nativeOffered = options.scope === 'server' || existing?.mode === 'packages';
228
+ effects.out(nativeOffered
229
+ ? `${recommendation.reason} Native runs directly on this computer; Docker runs in containers and needs Docker installed and running. An existing installation must keep its current mode.`
230
+ : 'The server runs in containers. Docker and Podman both work; the one you choose must be installed and running. An existing installation must keep its current mode.');
223
231
  const runtime = options.mode ?? await effects.select('How should the server run?', [
224
- { value: 'packages', label: 'Native packages' }, { value: 'docker', label: 'Docker' }, { value: 'podman', label: 'Podman' },
232
+ ...(nativeOffered ? [{ value: 'packages', label: 'Native packages' }] : []), { value: 'docker', label: 'Docker' }, { value: 'podman', label: 'Podman' },
225
233
  ], existing?.mode === 'docker' && existing?.containerEngine === 'podman' ? 'podman' : existing?.mode ?? recommendation.mode);
226
234
  options.mode = runtime === 'podman' ? 'docker' : runtime;
227
235
  if (runtime === 'podman') options.containerEngine = 'podman';
package/lib/usage.mjs CHANGED
@@ -4,7 +4,8 @@ export const USAGE = `ours-install — interactive setup with optional CLI prese
4
4
  ours-install
5
5
  Opens the console form. Choose all (server + clients), server, or client;
6
6
  runtime, installation directory, identity, integrations and Fleet settings.
7
- Docker provides the full-stack gateway; native mode is server-only. Windows uses WSL.
7
+ Full setup runs the server in Docker or Podman, which provide the gateway local clients need.
8
+ Native mode is offered for server-only setup. Windows uses WSL.
8
9
 
9
10
  Install now, configure Fleet agents in the App after linking:
10
11
  ours-install --username alex --name Alex --surname Taylor --disable-fleet-agents-setup
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ours.network/install",
3
- "version": "1.2.1-nightly.25",
3
+ "version": "1.2.1-nightly.26",
4
4
  "private": false,
5
5
  "description": "The all-in-one ours.network installer: one shared daemon, MCP, cowork, Telegram, Fleet initialization, harness plugins, Human identity, progress UI, and guided next steps.",
6
6
  "type": "module",