@ouro.bot/cli 0.1.0-alpha.370 → 0.1.0-alpha.372
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.372",
|
|
6
|
+
"changes": [
|
|
7
|
+
"Locked-vault errors now explain that provider credentials are still stored in the agent vault and that this computer is missing usable local unlock material.",
|
|
8
|
+
"The locked-vault guidance now names common machine-local causes, including a new computer, local profile or hostname migration, and removed local unlock entries.",
|
|
9
|
+
"`@ouro.bot/cli` and the `ouro.bot` wrapper are version-synced for the locked-vault bootstrap copy release."
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"version": "0.1.0-alpha.371",
|
|
14
|
+
"changes": [
|
|
15
|
+
"`ouro up` now rechecks selected provider health after a deterministic repair actually runs, so a successful vault unlock or auth repair is followed by either a recovery confirmation or the remaining degraded details.",
|
|
16
|
+
"Post-repair provider checks target the originally repairable degraded agents directly, avoiding false recovery when discovery output is sparse.",
|
|
17
|
+
"`@ouro.bot/cli` and the `ouro.bot` wrapper are version-synced for the post-repair provider check release."
|
|
18
|
+
]
|
|
19
|
+
},
|
|
4
20
|
{
|
|
5
21
|
"version": "0.1.0-alpha.370",
|
|
6
22
|
"changes": [
|
|
@@ -94,11 +94,11 @@ const DEFAULT_DAEMON_STARTUP_POLL_INTERVAL_MS = 500;
|
|
|
94
94
|
const DEFAULT_DAEMON_STARTUP_STABILITY_WINDOW_MS = 1_500;
|
|
95
95
|
const DEFAULT_DAEMON_STARTUP_RETRY_LIMIT = 1;
|
|
96
96
|
const DEFAULT_DAEMON_STARTUP_LOG_LINES = 10;
|
|
97
|
-
async function
|
|
98
|
-
const agents = await Promise.resolve(deps.listDiscoveredAgents ? deps.listDiscoveredAgents() : (0, cli_defaults_1.defaultListDiscoveredAgents)());
|
|
97
|
+
async function checkAgentProviders(deps, agentsOverride) {
|
|
98
|
+
const agents = agentsOverride ?? await Promise.resolve(deps.listDiscoveredAgents ? deps.listDiscoveredAgents() : (0, cli_defaults_1.defaultListDiscoveredAgents)());
|
|
99
99
|
const bundlesRoot = deps.bundlesRoot ?? (0, identity_1.getAgentBundlesRoot)();
|
|
100
100
|
const degraded = [];
|
|
101
|
-
for (const agent of agents) {
|
|
101
|
+
for (const agent of [...new Set(agents)]) {
|
|
102
102
|
try {
|
|
103
103
|
const result = await (0, agent_config_check_1.checkAgentConfigWithProviderHealth)(agent, bundlesRoot);
|
|
104
104
|
if (result.ok)
|
|
@@ -132,6 +132,33 @@ async function checkAlreadyRunningAgentProviders(deps) {
|
|
|
132
132
|
}
|
|
133
133
|
return degraded;
|
|
134
134
|
}
|
|
135
|
+
async function checkAlreadyRunningAgentProviders(deps) {
|
|
136
|
+
return checkAgentProviders(deps);
|
|
137
|
+
}
|
|
138
|
+
async function reportPostRepairProviderHealth(deps, repairedAgents) {
|
|
139
|
+
const remainingDegraded = await checkAgentProviders(deps, repairedAgents);
|
|
140
|
+
(0, runtime_1.emitNervesEvent)({
|
|
141
|
+
level: remainingDegraded.length > 0 ? "warn" : "info",
|
|
142
|
+
component: "daemon",
|
|
143
|
+
event: "daemon.post_repair_provider_check",
|
|
144
|
+
message: remainingDegraded.length > 0
|
|
145
|
+
? "post-repair provider health check still degraded"
|
|
146
|
+
: "post-repair provider health check recovered",
|
|
147
|
+
meta: { degradedCount: remainingDegraded.length, repairedAgents },
|
|
148
|
+
});
|
|
149
|
+
if (remainingDegraded.length === 0) {
|
|
150
|
+
deps.writeStdout("provider checks recovered after repair");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
deps.writeStdout("provider checks still degraded after repair:");
|
|
154
|
+
for (const d of remainingDegraded) {
|
|
155
|
+
deps.writeStdout(` ${d.agent}: ${d.errorReason}`);
|
|
156
|
+
if (d.fixHint) {
|
|
157
|
+
deps.writeStdout(` fix: ${d.fixHint}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
deps.writeStdout("run `ouro up` again after applying the remaining fixes.");
|
|
161
|
+
}
|
|
135
162
|
async function checkProviderHealthBeforeChat(agentName, deps) {
|
|
136
163
|
const bundlesRoot = deps.bundlesRoot ?? (0, identity_1.getAgentBundlesRoot)();
|
|
137
164
|
const result = await (0, agent_config_check_1.checkAgentConfigWithProviderHealth)(agentName, bundlesRoot);
|
|
@@ -1777,7 +1804,7 @@ async function runOuroCli(args, deps = (0, cli_defaults_1.createDefaultOuroCliDe
|
|
|
1777
1804
|
});
|
|
1778
1805
|
}
|
|
1779
1806
|
else {
|
|
1780
|
-
await (0, agentic_repair_1.runAgenticRepair)(daemonResult.stability.degraded, {
|
|
1807
|
+
const repairResult = await (0, agentic_repair_1.runAgenticRepair)(daemonResult.stability.degraded, {
|
|
1781
1808
|
/* v8 ignore start -- production provider discovery wiring @preserve */
|
|
1782
1809
|
discoverWorkingProvider: async (agentName) => {
|
|
1783
1810
|
const { discoverWorkingProvider: discover } = await Promise.resolve().then(() => __importStar(require("./provider-discovery")));
|
|
@@ -1819,6 +1846,12 @@ async function runOuroCli(args, deps = (0, cli_defaults_1.createDefaultOuroCliDe
|
|
|
1819
1846
|
await executeVaultUnlock({ kind: "vault.unlock", agent }, deps);
|
|
1820
1847
|
},
|
|
1821
1848
|
});
|
|
1849
|
+
if (repairResult.repairsAttempted) {
|
|
1850
|
+
const repairedAgents = daemonResult.stability.degraded
|
|
1851
|
+
.filter(interactive_repair_1.hasRunnableInteractiveRepair)
|
|
1852
|
+
.map((entry) => entry.agent);
|
|
1853
|
+
await reportPostRepairProviderHealth(deps, repairedAgents);
|
|
1854
|
+
}
|
|
1822
1855
|
}
|
|
1823
1856
|
}
|
|
1824
1857
|
// Persist boot startup AFTER daemon is running — bootstrap is safe now
|
|
@@ -106,6 +106,10 @@ function lockedMessage(config, store) {
|
|
|
106
106
|
`Vault: ${vaultLabel(config)}`,
|
|
107
107
|
`Local unlock store: ${store.kind} (${store.location})`,
|
|
108
108
|
"",
|
|
109
|
+
"Provider credentials are still stored in the agent vault.",
|
|
110
|
+
"This computer does not currently have usable local unlock material for that vault.",
|
|
111
|
+
"This can happen on a new computer, after a local profile or hostname migration, or if the local unlock entry was removed.",
|
|
112
|
+
"",
|
|
109
113
|
`Run \`${command}\` and enter the vault unlock secret from the operator password manager.`,
|
|
110
114
|
].join("\n");
|
|
111
115
|
}
|