@ouro.bot/cli 0.1.0-alpha.681 → 0.1.0-alpha.682
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,12 @@
|
|
|
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.682",
|
|
6
|
+
"changes": [
|
|
7
|
+
"Buffer private-runtime IPC messages during credential bootstrap so external event wakes are not lost, with coverage for filters and child-process-only disconnect behavior."
|
|
8
|
+
]
|
|
9
|
+
},
|
|
4
10
|
{
|
|
5
11
|
"version": "0.1.0-alpha.681",
|
|
6
12
|
"changes": [
|
|
@@ -45,6 +45,51 @@ if (!agentName) {
|
|
|
45
45
|
const cli_logging_1 = require("../nerves/cli-logging");
|
|
46
46
|
const runtime_1 = require("../nerves/runtime");
|
|
47
47
|
(0, cli_logging_1.configureCliRuntimeLogger)("self");
|
|
48
|
+
const ipcStateKey = Symbol.for("ouro.agentEntry.ipcState");
|
|
49
|
+
const ipcState = (globalThis[ipcStateKey] ??= {
|
|
50
|
+
bufferedMessages: [],
|
|
51
|
+
installed: false,
|
|
52
|
+
workerMessageHandler: null,
|
|
53
|
+
});
|
|
54
|
+
ipcState.bufferedMessages = [];
|
|
55
|
+
ipcState.workerMessageHandler = null;
|
|
56
|
+
function isRuntimeCredentialBootstrapMessage(message) {
|
|
57
|
+
return !!message
|
|
58
|
+
&& typeof message === "object"
|
|
59
|
+
&& !Array.isArray(message)
|
|
60
|
+
&& message.type === "ouro.runtimeCredentialBootstrap";
|
|
61
|
+
}
|
|
62
|
+
function isPrivateRuntimeWorkMessage(message) {
|
|
63
|
+
if (!message || typeof message !== "object" || Array.isArray(message))
|
|
64
|
+
return false;
|
|
65
|
+
const type = message.type;
|
|
66
|
+
return type === "heartbeat"
|
|
67
|
+
|| type === "habit"
|
|
68
|
+
|| type === "await"
|
|
69
|
+
|| type === "shutdown"
|
|
70
|
+
|| type === "poke"
|
|
71
|
+
|| type === "chat"
|
|
72
|
+
|| type === "message";
|
|
73
|
+
}
|
|
74
|
+
function forwardOrBufferRuntimeMessage(message) {
|
|
75
|
+
if (isRuntimeCredentialBootstrapMessage(message))
|
|
76
|
+
return;
|
|
77
|
+
if (!isPrivateRuntimeWorkMessage(message))
|
|
78
|
+
return;
|
|
79
|
+
if (ipcState.workerMessageHandler) {
|
|
80
|
+
ipcState.workerMessageHandler(message);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
ipcState.bufferedMessages.push(message);
|
|
84
|
+
}
|
|
85
|
+
if (!ipcState.installed) {
|
|
86
|
+
process.on("message", forwardOrBufferRuntimeMessage);
|
|
87
|
+
/* v8 ignore next 3 -- child-process disconnect exits the live worker; default worker listener covers this behavior in process-listener tests @preserve */
|
|
88
|
+
process.on("disconnect", () => {
|
|
89
|
+
process.exit(0);
|
|
90
|
+
});
|
|
91
|
+
ipcState.installed = true;
|
|
92
|
+
}
|
|
48
93
|
(0, runtime_1.emitNervesEvent)({
|
|
49
94
|
component: "senses",
|
|
50
95
|
event: "senses.entry_boot",
|
|
@@ -67,7 +112,18 @@ Promise.resolve().then(() => __importStar(require("./runtime-credentials"))).the
|
|
|
67
112
|
.catch(() => undefined);
|
|
68
113
|
}
|
|
69
114
|
const { startPrivateRuntimeWorker } = await Promise.resolve().then(() => __importStar(require("../senses/private-runtime-worker")));
|
|
70
|
-
|
|
115
|
+
const bufferedMessages = ipcState.bufferedMessages.splice(0);
|
|
116
|
+
const worker = await startPrivateRuntimeWorker({
|
|
117
|
+
attachProcessListeners: false,
|
|
118
|
+
bufferedMessages,
|
|
119
|
+
});
|
|
120
|
+
ipcState.workerMessageHandler = (message) => {
|
|
121
|
+
void worker.handleMessage(message);
|
|
122
|
+
};
|
|
123
|
+
const messagesBufferedDuringStart = ipcState.bufferedMessages.splice(0);
|
|
124
|
+
for (const message of messagesBufferedDuringStart) {
|
|
125
|
+
ipcState.workerMessageHandler(message);
|
|
126
|
+
}
|
|
71
127
|
})
|
|
72
128
|
.catch((error) => {
|
|
73
129
|
(0, runtime_1.emitNervesEvent)({
|
|
@@ -567,12 +567,18 @@ function createPrivateRuntimeWorker(runTurn = (options) => (0, private_runtime_1
|
|
|
567
567
|
}
|
|
568
568
|
return { run, handleMessage };
|
|
569
569
|
}
|
|
570
|
-
async function startPrivateRuntimeWorker() {
|
|
570
|
+
async function startPrivateRuntimeWorker(options = {}) {
|
|
571
571
|
const worker = createPrivateRuntimeWorker();
|
|
572
|
-
|
|
572
|
+
if (options.attachProcessListeners ?? true) {
|
|
573
|
+
process.on("message", (message) => {
|
|
574
|
+
void worker.handleMessage(message);
|
|
575
|
+
});
|
|
576
|
+
process.on("disconnect", () => {
|
|
577
|
+
process.exit(0);
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
for (const message of options.bufferedMessages ?? []) {
|
|
573
581
|
void worker.handleMessage(message);
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
process.exit(0);
|
|
577
|
-
});
|
|
582
|
+
}
|
|
583
|
+
return worker;
|
|
578
584
|
}
|