@ouro.bot/cli 0.1.0-alpha.441 → 0.1.0-alpha.442

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,14 @@
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.442",
6
+ "changes": [
7
+ "The shared CLI masthead now lands as a clean `OUROBOROS` wordmark instead of the older circle treatment, with compact/plain render paths trimmed down so the banner feels intentional rather than doubled or noisy.",
8
+ "The main human-facing screens now use warmer but more concrete first-run language: `ouro up`, the home screen, status, help, hatch, vault outcomes, and the connections screen now explain what Ouro is actually doing without leaning on unexplained `house` or `bay` metaphors.",
9
+ "Failed live provider checks in the connections screen now stay in the honest `needs attention` bucket instead of being downgraded to `needs credentials`, and hermetic runtime plus packaged-install coverage lock the wording into the shipped CLI."
10
+ ]
11
+ },
4
12
  {
5
13
  "version": "0.1.0-alpha.441",
6
14
  "changes": [
@@ -1211,7 +1211,7 @@ async function executeVaultUnlock(command, deps) {
1211
1211
  {
1212
1212
  title: "Next moves",
1213
1213
  lines: [
1214
- `Run ouro up to let the house retry ${command.agent}.`,
1214
+ `Run ouro up so Ouro can check ${command.agent} again.`,
1215
1215
  `If credentials are still missing, run ouro auth --agent ${command.agent} --provider <provider>.`,
1216
1216
  ],
1217
1217
  },
@@ -1281,7 +1281,7 @@ async function executeVaultCreate(command, deps) {
1281
1281
  ];
1282
1282
  return writeCommandOutcome(deps, {
1283
1283
  title: "Credential vault",
1284
- subtitle: `${command.agent} has a vault home now.`,
1284
+ subtitle: `${command.agent}'s credential vault is ready.`,
1285
1285
  summary: `All raw credentials for ${command.agent} now live in this vault.`,
1286
1286
  sections: [
1287
1287
  {
@@ -1298,7 +1298,7 @@ async function executeVaultCreate(command, deps) {
1298
1298
  title: "Next moves",
1299
1299
  lines: [
1300
1300
  `Authenticate the providers ${command.agent} should use with ouro auth --agent ${command.agent} --provider <provider>.`,
1301
- `Then run ouro up so the house can bring ${command.agent} online.`,
1301
+ `Then run ouro up so Ouro can bring ${command.agent} online.`,
1302
1302
  ],
1303
1303
  },
1304
1304
  ],
@@ -1493,7 +1493,7 @@ async function executeVaultRecover(command, deps) {
1493
1493
  title: "Next moves",
1494
1494
  lines: [
1495
1495
  `Run ouro auth verify --agent ${command.agent} to re-check the stored providers.`,
1496
- `Then run ouro up so the house can retry ${command.agent}.`,
1496
+ `Then run ouro up so Ouro can check ${command.agent} again.`,
1497
1497
  ],
1498
1498
  },
1499
1499
  ],
@@ -1999,7 +1999,7 @@ async function buildConnectMenu(agent, deps, onProgress) {
1999
1999
  {
2000
2000
  option: "1",
2001
2001
  name: "Providers",
2002
- section: "Provider core",
2002
+ section: "Providers",
2003
2003
  status: providerSummary.status,
2004
2004
  detailLines: providerSummary.detailLines,
2005
2005
  laneSummaries: providerSummary.laneSummaries,
@@ -2166,7 +2166,7 @@ async function executeConnectPerplexity(agent, deps) {
2166
2166
  ],
2167
2167
  nextMoves: [
2168
2168
  "Ask the agent to search.",
2169
- `Reopen the connect bay with ouro connect --agent ${agent} whenever you want to review capabilities.`,
2169
+ `Reopen the connections screen with ouro connect --agent ${agent} whenever you want to review capabilities.`,
2170
2170
  ],
2171
2171
  fallbackLines: [
2172
2172
  `Perplexity connected for ${agent}`,
@@ -2247,7 +2247,7 @@ async function executeConnectEmbeddings(agent, deps) {
2247
2247
  ],
2248
2248
  nextMoves: [
2249
2249
  `Rerun ouro connect embeddings --agent ${agent} with a working key.`,
2250
- `Use ouro connect --agent ${agent} to review the rest of the capability bay.`,
2250
+ `Use ouro connect --agent ${agent} to review the rest of the connections screen.`,
2251
2251
  ],
2252
2252
  fallbackLines: [
2253
2253
  `Embeddings key was saved for ${agent}, but the live check failed.`,
@@ -2276,7 +2276,7 @@ async function executeConnectEmbeddings(agent, deps) {
2276
2276
  ],
2277
2277
  nextMoves: [
2278
2278
  "Ask the agent to search notes or memory.",
2279
- `Reopen the connect bay with ouro connect --agent ${agent} whenever you want to review capabilities.`,
2279
+ `Reopen the connections screen with ouro connect --agent ${agent} whenever you want to review capabilities.`,
2280
2280
  ],
2281
2281
  fallbackLines: [
2282
2282
  `Embeddings connected for ${agent}`,
@@ -2371,7 +2371,7 @@ async function executeConnectTeams(agent, deps) {
2371
2371
  ],
2372
2372
  nextMoves: [
2373
2373
  "Run ouro up so the daemon picks up the Teams sense change.",
2374
- `Reopen the connect bay with ouro connect --agent ${agent} whenever you want to review capabilities.`,
2374
+ `Reopen the connections screen with ouro connect --agent ${agent} whenever you want to review capabilities.`,
2375
2375
  ],
2376
2376
  fallbackLines: [
2377
2377
  `Teams connected for ${agent}`,
@@ -5379,7 +5379,7 @@ async function runOuroCli(args, deps = (0, cli_defaults_1.createDefaultOuroCliDe
5379
5379
  if (ttyBoardEnabled(deps)) {
5380
5380
  deps.writeStdout(renderCommandBoard(deps, {
5381
5381
  title: "Hatch an agent",
5382
- subtitle: "Let’s bring a new agent into the house.",
5382
+ subtitle: "Let’s set up a new agent.",
5383
5383
  summary: "Ouro will walk through the essentials, then hand the conversation to the specialist.",
5384
5384
  sections: [
5385
5385
  {
@@ -5430,7 +5430,7 @@ async function runOuroCli(args, deps = (0, cli_defaults_1.createDefaultOuroCliDe
5430
5430
  lines: [
5431
5431
  `Bundle: ${result.bundleRoot}`,
5432
5432
  `Specialist identity: ${result.selectedIdentity}`,
5433
- `House status: ${daemonResult.message}`,
5433
+ `Runtime status: ${daemonResult.message}`,
5434
5434
  ],
5435
5435
  },
5436
5436
  {
@@ -14,7 +14,7 @@ exports.getCommandHelp = getCommandHelp;
14
14
  exports.COMMAND_REGISTRY = {
15
15
  up: {
16
16
  category: "Lifecycle",
17
- description: "Prepare the house: start the background runtime, refresh what this machine needs, and surface anything still asking for care. In a human TTY, bare `ouro` opens the home screen instead; noninteractive shells still route bare `ouro` to `ouro up`.",
17
+ description: "Start and check Ouro: bring up the background runtime, refresh what this machine needs, and show anything that still needs attention. In a human TTY, bare `ouro` opens the home screen instead; noninteractive shells still route bare `ouro` to `ouro up`.",
18
18
  usage: "ouro [up] [--no-repair]",
19
19
  example: "ouro up --no-repair",
20
20
  },
@@ -32,7 +32,7 @@ exports.COMMAND_REGISTRY = {
32
32
  },
33
33
  status: {
34
34
  category: "Lifecycle",
35
- description: "Show the house status",
35
+ description: "Show Ouro status for this machine",
36
36
  usage: "ouro status",
37
37
  example: "ouro status",
38
38
  },
@@ -165,7 +165,7 @@ exports.COMMAND_REGISTRY = {
165
165
  },
166
166
  connect: {
167
167
  category: "Auth",
168
- description: "Connect providers, portable integrations, and local senses from one guided bay",
168
+ description: "Set up providers, portable integrations, and local senses from one guided screen",
169
169
  usage: "ouro connect [providers|perplexity|embeddings|teams|bluebubbles] [--agent <name>]",
170
170
  example: "ouro connect",
171
171
  subcommands: ["providers", "perplexity", "embeddings", "teams", "bluebubbles"],
@@ -278,7 +278,7 @@ const SUBCOMMAND_HELP = {
278
278
  example: "ouro connect perplexity",
279
279
  },
280
280
  "connect providers": {
281
- description: "Open provider auth from the connect bay without remembering the auth command",
281
+ description: "Open provider setup from the connections screen without remembering the auth command",
282
282
  usage: "ouro connect providers [--agent <name>]",
283
283
  example: "ouro connect providers",
284
284
  },
@@ -87,9 +87,8 @@ function resolveProviderHealthStatus(providerHealth) {
87
87
  return "needs setup";
88
88
  if (issue?.kind === "provider-credentials-missing")
89
89
  return "needs credentials";
90
- if (issue?.kind === "provider-live-check-failed") {
91
- return issue.actions[0]?.kind === "provider-auth" ? "needs credentials" : "needs attention";
92
- }
90
+ if (issue?.kind === "provider-live-check-failed")
91
+ return "needs attention";
93
92
  const error = String(providerHealth.error).toLowerCase();
94
93
  const fix = String(providerHealth.fix).toLowerCase();
95
94
  if (error.includes("failed live check"))
@@ -169,8 +168,8 @@ function panel(title, body, width) {
169
168
  return lines;
170
169
  }
171
170
  function renderHeader(agent, width) {
172
- return panel(`${agent} connect bay`, [
173
- tty("Bring one capability online.", BONE, true),
171
+ return panel(`${agent} connections`, [
172
+ tty("Set up or review one capability at a time.", BONE, true),
174
173
  tty("Everything on this screen was checked live just now.", MIST),
175
174
  ], width);
176
175
  }
@@ -266,23 +265,23 @@ function renderTtyBay(entries, options) {
266
265
  const masthead = (0, terminal_ui_1.renderOuroMasthead)({
267
266
  isTTY: true,
268
267
  columns,
269
- subtitle: "Bring one capability online at a time.",
268
+ subtitle: "Set up connections one step at a time.",
270
269
  }).trimEnd();
271
270
  const header = renderHeader(options.agent, fullWidth);
272
271
  const nextEntry = entries.find((entry) => isProblemStatus(entry.status));
273
- const providerEntry = entries.find((entry) => entry.section === "Provider core");
272
+ const providerEntry = entries.find((entry) => entry.section === "Providers");
274
273
  const portableEntries = entries.filter((entry) => entry.section === "Portable");
275
274
  const machineEntries = entries.filter((entry) => entry.section === "This machine");
276
275
  const wide = columns >= 118;
277
276
  const footer = [
278
- tty("Pick a path. Type the number or the name.", MIST),
277
+ tty("Choose a number, or type the capability name.", MIST),
279
278
  options.prompt,
280
279
  ];
281
280
  if (!wide) {
282
281
  const panels = [
283
282
  header,
284
- panel("Next best move", nextMoveBody(nextEntry), fullWidth),
285
- panel("Provider core", renderProviderBody(providerEntry, fullWidth), fullWidth),
283
+ panel("Recommended next step", nextMoveBody(nextEntry), fullWidth),
284
+ panel("Providers", renderProviderBody(providerEntry, fullWidth), fullWidth),
286
285
  panel("Portable", renderCapabilityBody(portableEntries, fullWidth), fullWidth),
287
286
  panel("This machine", renderCapabilityBody(machineEntries, fullWidth), fullWidth),
288
287
  ];
@@ -291,18 +290,18 @@ function renderTtyBay(entries, options) {
291
290
  const gap = 2;
292
291
  const leftWidth = Math.max(52, Math.floor((fullWidth - gap) / 2));
293
292
  const rightWidth = Math.max(40, fullWidth - gap - leftWidth);
294
- const topRow = combineColumns(panel("Next best move", nextMoveBody(nextEntry), leftWidth), panel("This machine", renderCapabilityBody(machineEntries, rightWidth), rightWidth), leftWidth, rightWidth, gap);
295
- const bottomRow = combineColumns(panel("Provider core", renderProviderBody(providerEntry, leftWidth), leftWidth), panel("Portable", renderCapabilityBody(portableEntries, rightWidth), rightWidth), leftWidth, rightWidth, gap);
293
+ const topRow = combineColumns(panel("Recommended next step", nextMoveBody(nextEntry), leftWidth), panel("This machine", renderCapabilityBody(machineEntries, rightWidth), rightWidth), leftWidth, rightWidth, gap);
294
+ const bottomRow = combineColumns(panel("Providers", renderProviderBody(providerEntry, leftWidth), leftWidth), panel("Portable", renderCapabilityBody(portableEntries, rightWidth), rightWidth), leftWidth, rightWidth, gap);
296
295
  return [masthead, "", ...header, "", ...topRow, "", ...bottomRow, "", ...footer].join("\n");
297
296
  }
298
297
  function renderNonTtyBay(entries, options) {
299
298
  const nextEntry = entries.find((entry) => isProblemStatus(entry.status));
300
299
  const lines = [
301
- `${options.agent} connect bay`,
302
- "Bring one capability online. Provider status was checked live just now.",
300
+ `${options.agent} connections`,
301
+ "Set up or review one capability at a time. Provider status was checked live just now.",
303
302
  "",
304
- "Next best move",
305
- "--------------",
303
+ "Recommended next step",
304
+ "---------------------",
306
305
  ];
307
306
  if (!nextEntry) {
308
307
  lines.push("Everything here is ready. Pick what you want to review or refresh.");
@@ -315,7 +314,7 @@ function renderNonTtyBay(entries, options) {
315
314
  lines.push(`run: ${nextEntry.nextAction}`);
316
315
  }
317
316
  lines.push("");
318
- for (const section of ["Provider core", "Portable", "This machine"]) {
317
+ for (const section of ["Providers", "Portable", "This machine"]) {
319
318
  lines.push(section);
320
319
  lines.push("-".repeat(Math.max(6, section.length + 4)));
321
320
  for (const entry of entries.filter((candidate) => candidate.section === section)) {
@@ -338,7 +337,7 @@ function renderNonTtyBay(entries, options) {
338
337
  }
339
338
  lines.push("6. Not now");
340
339
  lines.push("");
341
- lines.push("Pick a path. Type the number or the name.");
340
+ lines.push("Choose a number, or type the capability name.");
342
341
  lines.push(options.prompt);
343
342
  return lines.join("\n");
344
343
  }
@@ -21,7 +21,7 @@ function renderScreenEvent(screen) {
21
21
  function buildOuroHomeActions(agents) {
22
22
  if (agents.length === 0) {
23
23
  return [
24
- { key: "1", label: "Hatch a new agent", kind: "hatch", command: "ouro hatch" },
24
+ { key: "1", label: "Create a new agent", kind: "hatch", command: "ouro hatch" },
25
25
  { key: "2", label: "Clone an existing bundle", kind: "clone", command: "ouro clone <remote>" },
26
26
  { key: "3", label: "Show help", kind: "help", command: "ouro --help" },
27
27
  { key: "4", label: "Exit", kind: "exit", command: "exit" },
@@ -36,9 +36,9 @@ function buildOuroHomeActions(agents) {
36
36
  }));
37
37
  return [
38
38
  ...actions,
39
- { key: String(actions.length + 1), label: "Prepare the house", kind: "up", command: "ouro up" },
40
- { key: String(actions.length + 2), label: "Connect an agent", kind: "connect", command: "ouro connect --agent <agent>" },
41
- { key: String(actions.length + 3), label: "Repair an agent", kind: "repair", command: "ouro repair --agent <agent>" },
39
+ { key: String(actions.length + 1), label: "Start or check Ouro", kind: "up", command: "ouro up" },
40
+ { key: String(actions.length + 2), label: "Set up connections", kind: "connect", command: "ouro connect --agent <agent>" },
41
+ { key: String(actions.length + 3), label: "Fix setup issues", kind: "repair", command: "ouro repair --agent <agent>" },
42
42
  { key: String(actions.length + 4), label: "Show help", kind: "help", command: "ouro --help" },
43
43
  { key: String(actions.length + 5), label: "Exit", kind: "exit", command: "exit" },
44
44
  ];
@@ -60,10 +60,10 @@ function renderOuroHomeScreen(options) {
60
60
  const actions = buildOuroHomeActions(options.agents);
61
61
  const sections = [
62
62
  {
63
- title: options.agents.length === 0 ? "Start here" : "Around the house",
63
+ title: options.agents.length === 0 ? "Start here" : "Available agents",
64
64
  lines: options.agents.length === 0
65
- ? ["No agents are home yet. Hatch someone new or bring an existing bundle aboard."]
66
- : options.agents.map((agent) => `${agent} is home and ready when called.`),
65
+ ? ["No agents are set up on this machine yet."]
66
+ : options.agents.map((agent) => `${agent} is available.`),
67
67
  },
68
68
  ];
69
69
  const actionRows = actions.map((action, index) => ({
@@ -77,13 +77,13 @@ function renderOuroHomeScreen(options) {
77
77
  columns: options.columns,
78
78
  masthead: {
79
79
  subtitle: options.agents.length === 0
80
- ? "No agents are home yet."
81
- : "Welcome home.",
80
+ ? "No agents are set up on this machine yet."
81
+ : "Choose an agent or a setup task.",
82
82
  },
83
83
  title: "Ouro home",
84
84
  summary: options.agents.length === 0
85
- ? "Hatch someone new or bring an existing bundle aboard."
86
- : "Choose who to wake or what to prepare without memorizing commands.",
85
+ ? "Create a new agent or clone an existing bundle to get started."
86
+ : "Choose an agent or a setup task without memorizing commands.",
87
87
  sections,
88
88
  actions: actionRows,
89
89
  prompt: `Choose [1-${actions.length}] or type a name: `,
@@ -159,7 +159,7 @@ function renderHouseStatusScreen(options) {
159
159
  renderScreenEvent("house-status");
160
160
  const sections = [
161
161
  {
162
- title: "House pulse",
162
+ title: "Runtime",
163
163
  lines: [
164
164
  `Daemon: ${options.payload.overview.daemon}`,
165
165
  `Health: ${options.payload.overview.health}`,
@@ -226,9 +226,9 @@ function renderHouseStatusScreen(options) {
226
226
  });
227
227
  }
228
228
  return renderHumanCommandBoard({
229
- title: "House status",
230
- subtitle: "The house is awake enough to answer clearly.",
231
- summary: "What is awake, resting, or asking for care.",
229
+ title: "Ouro status",
230
+ subtitle: "Current runtime status for this machine.",
231
+ summary: "What is running, what is stopped, and what needs attention.",
232
232
  isTTY: options.isTTY,
233
233
  columns: options.columns,
234
234
  sections,
@@ -104,26 +104,17 @@ function mastheadArt(columns) {
104
104
  }
105
105
  return rows.map((row) => row.join(" "));
106
106
  }
107
- return [
108
- " O U R O B O R O S",
109
- " -----------------",
110
- ];
107
+ return [MASTHEAD_WORD];
111
108
  }
112
109
  function renderOuroMasthead(options) {
113
- const lines = mastheadArt(options.columns);
114
- const subtitle = options.subtitle ?? "the house wakes when called";
115
- const branded = [
116
- ...lines,
117
- MASTHEAD_WORD,
118
- subtitle,
119
- ];
110
+ const lines = options.isTTY ? mastheadArt(options.columns) : [MASTHEAD_WORD];
111
+ const branded = options.subtitle ? [...lines, options.subtitle] : lines;
120
112
  if (!options.isTTY) {
121
113
  return `${branded.join("\n")}\n`;
122
114
  }
123
115
  const ttyLines = [
124
116
  ...lines.map((line, index) => color(line, index < 2 ? GLOW : SCALE, true)),
125
- color(MASTHEAD_WORD, BONE, true),
126
- color(subtitle, MIST),
117
+ ...(options.subtitle ? [color(options.subtitle, MIST)] : []),
127
118
  ];
128
119
  return `${ttyLines.join("\n")}\n`;
129
120
  }
@@ -296,10 +296,10 @@ class UpProgress {
296
296
  isTTY: true,
297
297
  columns: this.columns,
298
298
  masthead: {
299
- subtitle: "Preparing the house.",
299
+ subtitle: "Starting the local agent runtime.",
300
300
  },
301
- title: "Preparing the house",
302
- summary: "Ouro is warming the background systems and checking what still needs care before anyone steps in.",
301
+ title: "Starting Ouro",
302
+ summary: "Ouro is starting the background runtime, checking credentials, and surfacing anything that needs attention before chat begins.",
303
303
  currentStep: {
304
304
  label: currentStepLabel,
305
305
  detailLines: currentStepDetails,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.441",
3
+ "version": "0.1.0-alpha.442",
4
4
  "main": "dist/heart/daemon/ouro-entry.js",
5
5
  "bin": {
6
6
  "cli": "dist/heart/daemon/ouro-bot-entry.js",