@ouro.bot/cli 0.1.0-alpha.374 → 0.1.0-alpha.376

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,22 @@
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.376",
6
+ "changes": [
7
+ "`ouro up` interactive repair now prints a grouped repair queue before prompting when multiple degraded agents have runnable auth or vault unlock repairs.",
8
+ "The repair queue and the actual prompts share the same computed repair action, so grouped copy cannot drift from the command that will run.",
9
+ "`@ouro.bot/cli` and the `ouro.bot` wrapper are version-synced for the repair queue summary release."
10
+ ]
11
+ },
12
+ {
13
+ "version": "0.1.0-alpha.375",
14
+ "changes": [
15
+ "`ouro up` interactive repair now prints the exact `ouro auth` or `ouro vault unlock` command to run later when the human declines a repair prompt.",
16
+ "Declined repair prompts now share one later-command writer across provider auth and vault unlock flows, keeping skipped setup paths copy-pasteable.",
17
+ "`@ouro.bot/cli` and the `ouro.bot` wrapper are version-synced for the repair decline recap release."
18
+ ]
19
+ },
4
20
  {
5
21
  "version": "0.1.0-alpha.374",
6
22
  "changes": [
@@ -61,6 +61,35 @@ function vaultUnlockCommandFor(degraded) {
61
61
  function isAffirmativeAnswer(answer) {
62
62
  return /^(y|yes)$/i.test(answer.trim());
63
63
  }
64
+ function writeDeclinedRepair(degraded, command, deps) {
65
+ deps.writeStdout(`repair skipped for ${degraded.agent}; run \`${command}\` later.`);
66
+ }
67
+ function runnableRepairActionFor(degraded) {
68
+ if (isVaultUnlockIssue(degraded)) {
69
+ return { kind: "vault-unlock", label: "vault unlock", command: vaultUnlockCommandFor(degraded) };
70
+ }
71
+ if (isCredentialIssue(degraded)) {
72
+ return {
73
+ kind: "provider-auth",
74
+ label: "provider auth",
75
+ command: authCommandFor(degraded),
76
+ provider: extractProviderFromFixHint(degraded.fixHint),
77
+ };
78
+ }
79
+ return undefined;
80
+ }
81
+ function writeRepairQueueSummary(degraded, deps) {
82
+ const repairable = degraded
83
+ .map((entry) => ({ entry, action: runnableRepairActionFor(entry) }))
84
+ .filter((item) => item.action !== undefined);
85
+ if (repairable.length < 2)
86
+ return;
87
+ const lines = [
88
+ "repair queue:",
89
+ ...repairable.map(({ entry, action }) => ` - ${entry.agent}: ${action.label}: \`${action.command}\``),
90
+ ];
91
+ deps.writeStdout(lines.join("\n"));
92
+ }
64
93
  async function runInteractiveRepair(degraded, deps) {
65
94
  (0, runtime_1.emitNervesEvent)({
66
95
  level: "info",
@@ -73,10 +102,11 @@ async function runInteractiveRepair(degraded, deps) {
73
102
  return { repairsAttempted: false };
74
103
  }
75
104
  let repairsAttempted = false;
105
+ writeRepairQueueSummary(degraded, deps);
76
106
  for (const entry of degraded) {
77
- if (isVaultUnlockIssue(entry)) {
78
- const unlockCommand = vaultUnlockCommandFor(entry);
79
- const answer = await deps.promptInput(`run \`${unlockCommand}\` now? [y/n] `);
107
+ const action = runnableRepairActionFor(entry);
108
+ if (action?.kind === "vault-unlock") {
109
+ const answer = await deps.promptInput(`run \`${action.command}\` now? [y/n] `);
80
110
  if (isAffirmativeAnswer(answer)) {
81
111
  try {
82
112
  if (!deps.runVaultUnlock) {
@@ -100,15 +130,16 @@ async function runInteractiveRepair(degraded, deps) {
100
130
  });
101
131
  }
102
132
  }
133
+ else {
134
+ writeDeclinedRepair(entry, action.command, deps);
135
+ }
103
136
  }
104
- else if (isCredentialIssue(entry)) {
105
- const provider = extractProviderFromFixHint(entry.fixHint);
106
- const authCommand = authCommandFor(entry);
107
- const answer = await deps.promptInput(`run \`${authCommand}\` now? [y/n] `);
137
+ else if (action?.kind === "provider-auth") {
138
+ const answer = await deps.promptInput(`run \`${action.command}\` now? [y/n] `);
108
139
  if (isAffirmativeAnswer(answer)) {
109
140
  try {
110
- if (provider) {
111
- await deps.runAuthFlow(entry.agent, provider);
141
+ if (action.provider) {
142
+ await deps.runAuthFlow(entry.agent, action.provider);
112
143
  }
113
144
  else {
114
145
  await deps.runAuthFlow(entry.agent);
@@ -128,6 +159,9 @@ async function runInteractiveRepair(degraded, deps) {
128
159
  });
129
160
  }
130
161
  }
162
+ else {
163
+ writeDeclinedRepair(entry, action.command, deps);
164
+ }
131
165
  }
132
166
  else if (isConfigError(entry)) {
133
167
  deps.writeStdout(`fix hint for ${entry.agent}: ${entry.fixHint}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.374",
3
+ "version": "0.1.0-alpha.376",
4
4
  "main": "dist/heart/daemon/ouro-entry.js",
5
5
  "bin": {
6
6
  "cli": "dist/heart/daemon/ouro-bot-entry.js",