@ours.network/fleet 0.18.0-nightly.1 → 0.18.0-nightly.3

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.
@@ -1,9 +1,9 @@
1
1
  {
2
- "version": "0.18.0-nightly.1",
3
- "buildId": "880ef60a977f",
4
- "commit": "ece91028c05a5669507c0cdcff3a6f365902fcab",
2
+ "version": "0.18.0-nightly.3",
3
+ "buildId": "3ca1204392e7",
4
+ "commit": "a9c9c81f5d72f81142b905303b895dd2e9849bd7",
5
5
  "dirty": true,
6
- "builtAt": "2026-08-16T13:06:15.416Z",
6
+ "builtAt": "2026-08-18T09:41:48.614Z",
7
7
  "capabilities": [
8
8
  "monitor.interrupt.after_tool"
9
9
  ]
@@ -69,6 +69,33 @@ export function makeSystemdBackend(exec = realExec) {
69
69
  dirname(process.execPath),
70
70
  ...(process.env.PATH ?? '').split(delimiter),
71
71
  ].filter(Boolean))].join(delimiter);
72
+ // Same reason as PATH, for the other thing a lingering unit cannot inherit:
73
+ // WHICH ours daemon this fleet was set up against.
74
+ //
75
+ // ours-fleet resolves its daemon from OURS_CONFIG / OURS_PORT / OURS_STATE_DIR
76
+ // and otherwise falls back to ~/.ours and port 3050 (src/monitor.ts). A host
77
+ // set up against a non-default daemon — the installer's multi-daemon profiles
78
+ // do exactly this — passes that selection to `ours-fleet init` in the
79
+ // environment, and it died there: nothing persisted it, so every runner
80
+ // systemd started at boot resolved the default daemon again, and on a host
81
+ // where only the non-default daemon exists that is a daemon that is not there.
82
+ //
83
+ // ONLY OURS_CONFIG is baked, deliberately. It names which daemon, and leaves
84
+ // that daemon's own config file authoritative for port and state directory, so
85
+ // a later edit to it still wins. Baking OURS_PORT/OURS_STATE_DIR would freeze
86
+ // those into a unit file that outranks the config for ever after — the failure
87
+ // mode @ours.network/cli avoids for the same reason (packages/cli/src/
88
+ // service.ts: "The port is deliberately NOT baked").
89
+ //
90
+ // Absent from init's environment ⇒ no line, and the unit is byte-for-byte what
91
+ // it has always been. This teaches fleet nothing about installer profiles; it
92
+ // persists the selection fleet was initialised with.
93
+ const unitEnv = ['PATH=' + servicePath];
94
+ if (process.env.OURS_CONFIG)
95
+ unitEnv.push('OURS_CONFIG=' + process.env.OURS_CONFIG);
96
+ const environmentLines = unitEnv
97
+ .map(value => `Environment="${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/%/g, '%%')}"`)
98
+ .join('\n');
72
99
  mkdirSync(unitDir, { recursive: true });
73
100
  writeFileSync(join(unitDir, UNIT_TEMPLATE), `[Unit]
74
101
  Description=ours-fleet agent %i
@@ -76,7 +103,7 @@ After=default.target
76
103
 
77
104
  [Service]
78
105
  Type=simple
79
- Environment="PATH=${servicePath.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/%/g, '%%')}"
106
+ ${environmentLines}
80
107
  ExecStart=${unitArg(process.execPath)} ${unitArg(binPath)} _run %i
81
108
  # The RUNNER owns the child-session restart loop, with a counted, backed-off
82
109
  # circuit breaker (3.2). systemd must only recover the runner PROCESS crashing —
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ours.network/fleet",
3
- "version": "0.18.0-nightly.1",
3
+ "version": "0.18.0-nightly.3",
4
4
  "description": "Harness-agnostic fleet of persistent, identity-bound AI agents. Declarative fleet.yaml, tmux or ACP sessions, supervision, and ours.network messaging.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -38,7 +38,7 @@
38
38
  "@agentclientprotocol/sdk": "^1.3.0",
39
39
  "@fastify/static": "^10.1.2",
40
40
  "@fastify/websocket": "^11.2.0",
41
- "@ours.network/sdk": "1.3.1",
41
+ "@ours.network/sdk": "1.5.2",
42
42
  "@xterm/addon-fit": "0.10.0",
43
43
  "@xterm/addon-serialize": "0.13.0",
44
44
  "@xterm/headless": "5.5.0",