@ouro.bot/cli 0.1.0-alpha.221 → 0.1.0-alpha.223
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.223",
|
|
6
|
+
"changes": [
|
|
7
|
+
"debug: file-based trace in send_message handler to verify execution path"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"version": "0.1.0-alpha.222",
|
|
12
|
+
"changes": [
|
|
13
|
+
"debug: add diagnostic nerves events to proactive BB delivery — name resolution in both tools-session.ts and sendProactiveBlueBubblesMessageToSession now emit events showing friend count, names, resolution success/failure, and errors. Temporary diagnostics to identify why name→UUID resolution isn't working in production."
|
|
14
|
+
]
|
|
15
|
+
},
|
|
4
16
|
{
|
|
5
17
|
"version": "0.1.0-alpha.221",
|
|
6
18
|
"changes": [
|
|
@@ -441,14 +441,22 @@ exports.sessionToolDefinitions = [
|
|
|
441
441
|
const content = args.content;
|
|
442
442
|
const now = Date.now();
|
|
443
443
|
const agentName = (0, identity_1.getAgentName)();
|
|
444
|
+
/* v8 ignore start -- temporary debug trace @preserve */
|
|
445
|
+
try {
|
|
446
|
+
fs.appendFileSync("/tmp/send-message-debug.log", JSON.stringify({ ts: new Date().toISOString(), friendId, channel, key, handler: "tools-session" }) + "\n");
|
|
447
|
+
}
|
|
448
|
+
catch { }
|
|
449
|
+
/* v8 ignore stop */
|
|
444
450
|
// Resolve friend name → UUID if needed
|
|
445
451
|
/* v8 ignore start -- name resolution: reads real filesystem, tested via live integration @preserve */
|
|
446
452
|
if (friendId !== "self") {
|
|
453
|
+
const originalFriendId = friendId;
|
|
447
454
|
try {
|
|
448
455
|
const agentRoot = (0, identity_1.getAgentRoot)();
|
|
449
456
|
const sessionsDir = path.join(agentRoot, "state", "sessions");
|
|
450
457
|
const friendsDir = path.join(agentRoot, "friends");
|
|
451
|
-
|
|
458
|
+
const sessionDirExists = fs.existsSync(path.join(sessionsDir, friendId));
|
|
459
|
+
if (!sessionDirExists) {
|
|
452
460
|
const friendFiles = fs.readdirSync(friendsDir).filter((f) => f.endsWith(".json"));
|
|
453
461
|
for (const file of friendFiles) {
|
|
454
462
|
const raw = fs.readFileSync(path.join(friendsDir, file), "utf-8");
|
|
@@ -458,9 +466,23 @@ exports.sessionToolDefinitions = [
|
|
|
458
466
|
break;
|
|
459
467
|
}
|
|
460
468
|
}
|
|
469
|
+
(0, runtime_1.emitNervesEvent)({
|
|
470
|
+
component: "repertoire",
|
|
471
|
+
event: "repertoire.send_message_name_resolve",
|
|
472
|
+
message: friendId !== originalFriendId ? "resolved friend name to UUID" : "friend name resolution failed",
|
|
473
|
+
meta: { original: originalFriendId, resolved: friendId, friendsDir, fileCount: friendFiles.length },
|
|
474
|
+
});
|
|
461
475
|
}
|
|
462
476
|
}
|
|
463
|
-
catch {
|
|
477
|
+
catch (err) {
|
|
478
|
+
(0, runtime_1.emitNervesEvent)({
|
|
479
|
+
level: "warn",
|
|
480
|
+
component: "repertoire",
|
|
481
|
+
event: "repertoire.send_message_name_resolve_error",
|
|
482
|
+
message: "friend name resolution threw",
|
|
483
|
+
meta: { friendId: originalFriendId, error: err instanceof Error ? err.message : String(err) },
|
|
484
|
+
});
|
|
485
|
+
}
|
|
464
486
|
}
|
|
465
487
|
/* v8 ignore stop */
|
|
466
488
|
// Self-routing: messages to "self" always go to inner dialog pending dir,
|
|
@@ -1068,16 +1068,43 @@ async function sendProactiveBlueBubblesMessageToSession(params, deps = {}) {
|
|
|
1068
1068
|
friend = null;
|
|
1069
1069
|
}
|
|
1070
1070
|
// Fallback: if friendId is a name (not UUID), resolve via listAll
|
|
1071
|
-
/* v8 ignore start -- name resolution fallback
|
|
1071
|
+
/* v8 ignore start -- name resolution fallback + diagnostics @preserve */
|
|
1072
1072
|
if (!friend && store.listAll) {
|
|
1073
1073
|
try {
|
|
1074
1074
|
const all = await store.listAll();
|
|
1075
|
+
(0, runtime_1.emitNervesEvent)({
|
|
1076
|
+
component: "senses",
|
|
1077
|
+
event: "senses.bluebubbles_proactive_name_resolve",
|
|
1078
|
+
message: "attempting name-based friend resolution",
|
|
1079
|
+
meta: {
|
|
1080
|
+
friendId: params.friendId,
|
|
1081
|
+
storeHasListAll: true,
|
|
1082
|
+
friendCount: all.length,
|
|
1083
|
+
friendNames: all.map((f) => f.name ?? "<no name>"),
|
|
1084
|
+
},
|
|
1085
|
+
});
|
|
1075
1086
|
friend = all.find((f) => f.name?.toLowerCase() === params.friendId.toLowerCase()) ?? null;
|
|
1076
1087
|
}
|
|
1077
|
-
catch {
|
|
1088
|
+
catch (err) {
|
|
1089
|
+
(0, runtime_1.emitNervesEvent)({
|
|
1090
|
+
level: "warn",
|
|
1091
|
+
component: "senses",
|
|
1092
|
+
event: "senses.bluebubbles_proactive_name_resolve_error",
|
|
1093
|
+
message: "name resolution fallback failed",
|
|
1094
|
+
meta: { friendId: params.friendId, error: err instanceof Error ? err.message : String(err) },
|
|
1095
|
+
});
|
|
1078
1096
|
friend = null;
|
|
1079
1097
|
}
|
|
1080
1098
|
}
|
|
1099
|
+
else if (!friend) {
|
|
1100
|
+
(0, runtime_1.emitNervesEvent)({
|
|
1101
|
+
level: "warn",
|
|
1102
|
+
component: "senses",
|
|
1103
|
+
event: "senses.bluebubbles_proactive_name_resolve_skip",
|
|
1104
|
+
message: "name resolution skipped: store.listAll not available",
|
|
1105
|
+
meta: { friendId: params.friendId, hasListAll: typeof store.listAll },
|
|
1106
|
+
});
|
|
1107
|
+
}
|
|
1081
1108
|
/* v8 ignore stop */
|
|
1082
1109
|
if (!friend) {
|
|
1083
1110
|
(0, runtime_1.emitNervesEvent)({
|