@ouro.bot/cli 0.1.0-alpha.163 → 0.1.0-alpha.165

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/changelog.json CHANGED
@@ -1,6 +1,18 @@
1
1
  {
2
2
  "_note": "This changelog is maintained as part of the PR/version-bump workflow. Agent-curated, not auto-generated. Agents read this file directly via read_file to understand what changed between versions.",
3
3
  "versions": [
4
+ {
5
+ "version": "0.1.0-alpha.165",
6
+ "changes": [
7
+ "fix(daemon): dont launchctl bootstrap during ouro up \u2014 write plist only, prevents competing daemon process"
8
+ ]
9
+ },
10
+ {
11
+ "version": "0.1.0-alpha.164",
12
+ "changes": [
13
+ "fix(daemon): keep /dev/null fds open until parent exits \u2014 fixes ouro up daemon crash"
14
+ ]
15
+ },
4
16
  {
5
17
  "version": "0.1.0-alpha.163",
6
18
  "changes": [
@@ -1195,13 +1195,14 @@ function defaultStartDaemonProcess(socketPath) {
1195
1195
  const entry = path.join((0, identity_1.getRepoRoot)(), "dist", "heart", "daemon", "daemon-entry.js");
1196
1196
  // Redirect stdio to /dev/null via file descriptors — using 'ignore' causes EPIPE
1197
1197
  // when the daemon's logging system writes to stderr after the parent exits.
1198
- const devNull = fs.openSync(os.devNull, "w");
1198
+ const outFd = fs.openSync(os.devNull, "w");
1199
+ const errFd = fs.openSync(os.devNull, "w");
1199
1200
  const child = (0, child_process_1.spawn)("node", [entry, "--socket", socketPath], {
1200
1201
  detached: true,
1201
- stdio: ["ignore", devNull, devNull],
1202
+ stdio: ["ignore", outFd, errFd],
1202
1203
  });
1203
1204
  child.unref();
1204
- fs.closeSync(devNull);
1205
+ // Don't close fds — the child process needs them. They'll be cleaned up when the parent exits.
1205
1206
  return Promise.resolve({ pid: child.pid ?? null });
1206
1207
  }
1207
1208
  function defaultWriteStdout(text) {
@@ -117,11 +117,13 @@ function installLaunchAgent(deps, options) {
117
117
  catch { /* best effort */ }
118
118
  }
119
119
  writeLaunchAgentPlist(deps, options);
120
- deps.exec(`launchctl bootstrap ${domain} "${fullPath}"`);
120
+ // Don't bootstrap here — ouro up starts the daemon directly via spawn.
121
+ // The plist is written so launchd will manage the daemon on next login/reboot.
122
+ // Loading it now would start a competing daemon that conflicts with the spawned one.
121
123
  (0, runtime_1.emitNervesEvent)({
122
124
  component: "daemon",
123
125
  event: "daemon.launchd_installed",
124
- message: "launch agent installed",
126
+ message: "launch agent plist written (will activate on next login)",
125
127
  meta: { plistPath: fullPath },
126
128
  });
127
129
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.163",
3
+ "version": "0.1.0-alpha.165",
4
4
  "main": "dist/heart/daemon/ouro-entry.js",
5
5
  "bin": {
6
6
  "cli": "dist/heart/daemon/ouro-bot-entry.js",