@ouro.bot/cli 0.1.0-alpha.533 → 0.1.0-alpha.535

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
@@ -6,7 +6,7 @@ Ouroboros is a TypeScript harness for daemon-managed agents that live in externa
6
6
 
7
7
  ## What The Runtime Looks Like
8
8
 
9
- - `npx ouro.bot@latest` is the supported bootstrap path.
9
+ - `npx ouro.bot@alpha` is the supported bootstrap path while the runtime is in prerelease.
10
10
  - `ouro` is the installed day-to-day command.
11
11
  - `ouro up` starts the daemon from the installed production version, syncs the launcher, installs workflow helpers, and reconciles stale runtime state.
12
12
  - `ouro dev` starts the daemon from a local repo build. It auto-builds from source, disables launchd auto-restart (so the installed daemon doesn't respawn underneath you), persists the repo path in `~/.ouro-cli/dev-config.json` for next time, and force-restarts the daemon. If you run `ouro dev` from inside the repo, it detects the CWD automatically. Run `ouro up` to return to production mode (this also cleans up `dev-config.json`).
@@ -144,15 +144,15 @@ For a clean smoke test, run from outside the repo:
144
144
 
145
145
  ```bash
146
146
  cd ~
147
- npx ouro.bot@latest -v
148
- npx ouro.bot@latest up
147
+ npx ouro.bot@alpha -v
148
+ npx ouro.bot@alpha up
149
149
  ouro -v
150
150
  ouro status
151
151
  ```
152
152
 
153
153
  Expected shape:
154
154
 
155
- - `npx ouro.bot@latest` and `ouro` report the same version.
155
+ - `npx ouro.bot@alpha` and `ouro` report the same version.
156
156
  - `ouro status` shows the daemon overview plus discovered agents, senses, and workers.
157
157
 
158
158
  ### Work On The Harness
@@ -216,7 +216,7 @@ The generic secret primitive is a vault item / credential in the owning agent va
216
216
 
217
217
  ## Setting Up On Another Machine
218
218
 
219
- To clone an existing agent onto a new machine (macOS, Linux, or Windows via WSL2), see **[docs/cross-machine-setup.md](docs/cross-machine-setup.md)**. The short version is bundle plus vault: `npx ouro.bot@latest`, open the home deck, choose clone, enter the bundle's git remote URL, unlock the agent vault, refresh/verify credentials, and start with `ouro up`.
219
+ To clone an existing agent onto a new machine (macOS, Linux, or Windows via WSL2), see **[docs/cross-machine-setup.md](docs/cross-machine-setup.md)**. The short version is bundle plus vault: `npx ouro.bot@alpha`, open the home deck, choose clone, enter the bundle's git remote URL, unlock the agent vault, refresh/verify credentials, and start with `ouro up`.
220
220
 
221
221
  ## The Agent's Inner Life
222
222
 
package/changelog.json CHANGED
@@ -1,6 +1,21 @@
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.535",
6
+ "changes": [
7
+ "Daemon orphan cleanup now recognizes managed mail sense workers, so stale `senses/mail-entry.js --agent <name>` processes from old runtimes are terminated on production daemon startup instead of lingering across restarts.",
8
+ "Adds regression coverage for the full daemon-managed entrypoint set used by orphan cleanup, including inner-dialog, daemon, BlueBubbles, Teams, and mail workers."
9
+ ]
10
+ },
11
+ {
12
+ "version": "0.1.0-alpha.534",
13
+ "changes": [
14
+ "`ouro up` now syncs the global `ouro.bot` wrapper to the exact running runtime version and repairs stale wrapper-owned binaries instead of trusting whatever package currently owns the executable.",
15
+ "Foreground and daemon update checks now read the `alpha` prerelease dist-tag instead of stale `latest`, so machines already on older prereleases can discover the fixed runtime.",
16
+ "Runtime bootstrap hints, smoke docs, cross-machine setup, and the Teams startup script now use the supported `alpha` prerelease channel so prerelease installs no longer drift behind a stale `latest` tag."
17
+ ]
18
+ },
4
19
  {
5
20
  "version": "0.1.0-alpha.533",
6
21
  "changes": [
@@ -583,7 +583,7 @@ function createDefaultOuroCliDeps(socketPath = socket_client_1.DEFAULT_DAEMON_SO
583
583
  const { checkForUpdate } = await Promise.resolve().then(() => __importStar(require("../versioning/update-checker")));
584
584
  return checkForUpdate((0, bundle_manifest_1.getPackageVersion)(), {
585
585
  fetchRegistryJson: () => defaultFetchCliRegistryJson(update_checker_1.CLI_UPDATE_CHECK_TIMEOUT_MS),
586
- distTag: "latest",
586
+ distTag: update_checker_1.CLI_UPDATE_DIST_TAG,
587
587
  });
588
588
  },
589
589
  installCliVersion: async (version) => { (0, ouro_version_manager_1.installVersion)(version, {}); },
@@ -5702,7 +5702,7 @@ async function runOuroCli(args, deps = (0, cli_defaults_1.createDefaultOuroCliDe
5702
5702
  /* v8 ignore next 2 -- unreachable after exec replaces process @preserve */
5703
5703
  return "";
5704
5704
  }
5705
- const message = "no installed version found. run: npx ouro.bot@latest";
5705
+ const message = "no installed version found. run: npx ouro.bot@alpha";
5706
5706
  deps.writeStdout(message);
5707
5707
  return message;
5708
5708
  }
@@ -6269,15 +6269,15 @@ async function runOuroCli(args, deps = (0, cli_defaults_1.createDefaultOuroCliDe
6269
6269
  try {
6270
6270
  const { result: updateResult, timedOut } = await runCliUpdateCheckWithTimeout(deps.checkForCliUpdate, deps.updateCheckTimeoutMs ?? update_checker_1.CLI_UPDATE_CHECK_TIMEOUT_MS);
6271
6271
  if (updateResult.latestVersion) {
6272
- sections.push(`published latest: ${updateResult.latestVersion} (${updateResult.available ? "update available" : "up to date"})`);
6272
+ sections.push(`published alpha: ${updateResult.latestVersion} (${updateResult.available ? "update available" : "up to date"})`);
6273
6273
  }
6274
6274
  else if (updateResult.error) {
6275
- sections.push(`published latest: unavailable (${summarizeCliUpdateCheckStatus(updateResult.error, timedOut)})`);
6275
+ sections.push(`published alpha: unavailable (${summarizeCliUpdateCheckStatus(updateResult.error, timedOut)})`);
6276
6276
  }
6277
6277
  }
6278
6278
  catch (err) {
6279
6279
  const reason = summarizeCliUpdateCheckStatus(err instanceof Error ? err.message : String(err));
6280
- sections.push(`published latest: unavailable (${reason})`);
6280
+ sections.push(`published alpha: unavailable (${reason})`);
6281
6281
  }
6282
6282
  }
6283
6283
  const message = ttyBoardEnabled(deps)
@@ -6291,8 +6291,8 @@ async function runOuroCli(args, deps = (0, cli_defaults_1.createDefaultOuroCliDe
6291
6291
  lines: localSection.split("\n"),
6292
6292
  },
6293
6293
  {
6294
- title: "Published latest",
6295
- lines: sections.slice(1).length > 0 ? sections.slice(1) : ["published latest: unavailable"],
6294
+ title: "Published alpha",
6295
+ lines: sections.slice(1).length > 0 ? sections.slice(1) : ["published alpha: unavailable"],
6296
6296
  },
6297
6297
  ],
6298
6298
  })
@@ -105,6 +105,7 @@ function parseOrphanPidsFromPs(psOutput, selfPid) {
105
105
  if (!line.includes("agent-entry.js")
106
106
  && !line.includes("daemon-entry.js")
107
107
  && !line.includes("bluebubbles/entry.js")
108
+ && !line.includes("mail-entry.js")
108
109
  && !line.includes("teams-entry.js"))
109
110
  continue;
110
111
  // Parse `<pid> <ppid> <command...>`. ps pads these with leading spaces.
@@ -582,7 +583,7 @@ class OuroDaemon {
582
583
  (0, update_checker_1.startUpdateChecker)({
583
584
  currentVersion,
584
585
  deps: {
585
- distTag: "latest",
586
+ distTag: update_checker_1.CLI_UPDATE_DIST_TAG,
586
587
  fetchRegistryJson: /* v8 ignore next -- integration: real HTTP fetch @preserve */ async () => {
587
588
  const res = await fetch("https://registry.npmjs.org/@ouro.bot/cli");
588
589
  return res.json();
@@ -98,12 +98,13 @@ function syncGlobalOuroBotWrapper(deps = {}) {
98
98
  const globalRoot = resolveGlobalRoot(execFileSyncImpl);
99
99
  const installedVersion = readInstalledWrapperVersion(globalRoot, existsSyncImpl, readFileSyncImpl);
100
100
  const executableOwner = resolveExecutableOwner(globalPrefix, platform, existsSyncImpl, realpathSyncImpl);
101
- if (executableOwner === "wrapper") {
101
+ const installTarget = `ouro.bot@${runtimeVersion}`;
102
+ if (executableOwner === "wrapper" && installedVersion === runtimeVersion) {
102
103
  (0, runtime_1.emitNervesEvent)({
103
104
  component: "daemon",
104
105
  event: "daemon.ouro_bot_global_sync_end",
105
106
  message: "global ouro.bot wrapper already current",
106
- meta: { version: runtimeVersion, installedVersion, executableOwner, installed: false },
107
+ meta: { version: runtimeVersion, installedVersion, executableOwner, installed: false, installTarget },
107
108
  });
108
109
  return {
109
110
  installed: false,
@@ -112,12 +113,12 @@ function syncGlobalOuroBotWrapper(deps = {}) {
112
113
  executableOwner,
113
114
  };
114
115
  }
115
- execFileSyncImpl("npm", ["install", "-g", "--force", "ouro.bot@latest"], { stdio: "pipe", encoding: "utf-8" });
116
+ execFileSyncImpl("npm", ["install", "-g", "--force", installTarget], { stdio: "pipe", encoding: "utf-8" });
116
117
  (0, runtime_1.emitNervesEvent)({
117
118
  component: "daemon",
118
119
  event: "daemon.ouro_bot_global_sync_end",
119
120
  message: "global ouro.bot wrapper synced",
120
- meta: { version: runtimeVersion, installedVersion, executableOwner, installed: true },
121
+ meta: { version: runtimeVersion, installedVersion, executableOwner, installed: true, installTarget },
121
122
  });
122
123
  return {
123
124
  installed: true,
@@ -53,7 +53,7 @@ fi
53
53
  # Fall back to installed version
54
54
  ENTRY="$HOME/.ouro-cli/CurrentVersion/node_modules/@ouro.bot/cli/dist/heart/daemon/ouro-entry.js"
55
55
  if [ ! -e "$ENTRY" ]; then
56
- echo "ouro not installed. Run: npx ouro.bot@latest" >&2
56
+ echo "ouro not installed. Run: npx ouro.bot@alpha" >&2
57
57
  exit 1
58
58
  fi
59
59
  exec node "$ENTRY" "$@"
@@ -114,6 +114,7 @@ function isOwnedOuroLauncherPath(resolvedPath) {
114
114
  function isOwnedOuroLauncherContent(content) {
115
115
  return (content.includes("@ouro.bot/cli") ||
116
116
  content.includes("ouro.bot@latest") ||
117
+ content.includes("ouro.bot@alpha") ||
117
118
  content.includes('exec npx --yes ouro.bot "$@"') ||
118
119
  content.includes("CurrentVersion/node_modules/@ouro.bot/cli"));
119
120
  }
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.CLI_UPDATE_CHECK_TIMEOUT_MS = void 0;
36
+ exports.CLI_UPDATE_DIST_TAG = exports.CLI_UPDATE_CHECK_TIMEOUT_MS = void 0;
37
37
  exports.checkForUpdate = checkForUpdate;
38
38
  exports.startUpdateChecker = startUpdateChecker;
39
39
  exports.stopUpdateChecker = stopUpdateChecker;
@@ -41,6 +41,7 @@ const semver = __importStar(require("semver"));
41
41
  const runtime_1 = require("../../nerves/runtime");
42
42
  const DEFAULT_INTERVAL_MS = 30 * 60 * 1000; // 30 minutes
43
43
  exports.CLI_UPDATE_CHECK_TIMEOUT_MS = 3_000;
44
+ exports.CLI_UPDATE_DIST_TAG = "alpha";
44
45
  async function checkForUpdate(currentVersion, deps) {
45
46
  (0, runtime_1.emitNervesEvent)({
46
47
  component: "daemon",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.533",
3
+ "version": "0.1.0-alpha.535",
4
4
  "main": "dist/heart/daemon/ouro-entry.js",
5
5
  "bin": {
6
6
  "cli": "dist/heart/daemon/ouro-bot-entry.js",