@ouro.bot/cli 0.1.0-alpha.789 → 0.1.0-alpha.790
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.790",
|
|
6
|
+
"changes": [
|
|
7
|
+
"Bind explicit operator CLI private wakes to their queued daemon message payload so private-runtime turns see the text that woke them.",
|
|
8
|
+
"Add non-destructive daemon inbox peeking for receipt-bound wake routing while preserving queue-only background message delivery.",
|
|
9
|
+
"Keep unreceipted or unmatched operator wakes from fabricating private pending work."
|
|
10
|
+
]
|
|
11
|
+
},
|
|
4
12
|
{
|
|
5
13
|
"version": "0.1.0-alpha.789",
|
|
6
14
|
"changes": [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<?xml version="1.0"?>
|
|
2
2
|
<Container version="2">
|
|
3
3
|
<Name>Mendelow Cloud Butler</Name>
|
|
4
|
-
<Repository>ghcr.io/ourostack/ouroboros-butler:0.1.0-alpha.
|
|
4
|
+
<Repository>ghcr.io/ourostack/ouroboros-butler:0.1.0-alpha.790</Repository>
|
|
5
5
|
<Registry>https://github.com/ourostack/ouroboros/pkgs/container/ouroboros-butler</Registry>
|
|
6
6
|
<Network>host</Network>
|
|
7
7
|
<Shell>sh</Shell>
|
|
@@ -1509,6 +1509,27 @@ class OuroDaemon {
|
|
|
1509
1509
|
}
|
|
1510
1510
|
return { type: "message", privateTurnDecision: decision, ...(externalEvent ? { externalEvent } : {}) };
|
|
1511
1511
|
}
|
|
1512
|
+
queueOperatorCliMessageForPrivateRuntime(command) {
|
|
1513
|
+
if (command.kind !== "private.wake" || command.triggerSource !== "operator-cli")
|
|
1514
|
+
return;
|
|
1515
|
+
const receiptId = command.originRefs?.find((ref) => ref.kind === "daemon-receipt")?.id;
|
|
1516
|
+
if (!receiptId)
|
|
1517
|
+
return;
|
|
1518
|
+
const messages = this.router.peekInbox?.(command.agent) ?? [];
|
|
1519
|
+
const routed = messages.find((message) => message.id === receiptId);
|
|
1520
|
+
if (!routed)
|
|
1521
|
+
return;
|
|
1522
|
+
const pendingDir = path.join(this.bundlesRoot, `${command.agent}.ouro`, "state", "pending", pending_1.PRIVATE_RUNTIME_PENDING.friendId, pending_1.PRIVATE_RUNTIME_PENDING.channel, pending_1.PRIVATE_RUNTIME_PENDING.key);
|
|
1523
|
+
const queuedAtMs = Date.parse(routed.queuedAt);
|
|
1524
|
+
(0, pending_1.queuePendingMessageOnce)(pendingDir, {
|
|
1525
|
+
from: routed.from,
|
|
1526
|
+
content: routed.content,
|
|
1527
|
+
timestamp: Number.isFinite(queuedAtMs) ? queuedAtMs : Date.now(),
|
|
1528
|
+
mode: "relay",
|
|
1529
|
+
requestId: routed.id,
|
|
1530
|
+
packetId: `operator-cli:${command.agent}:${routed.id}`,
|
|
1531
|
+
});
|
|
1532
|
+
}
|
|
1512
1533
|
queueExternalEventForPrivateRuntime(record, quiet = false) {
|
|
1513
1534
|
const pendingDir = path.join(this.bundlesRoot, `${record.agent}.ouro`, "state", "pending", pending_1.PRIVATE_RUNTIME_PENDING.friendId, pending_1.PRIVATE_RUNTIME_PENDING.channel, pending_1.PRIVATE_RUNTIME_PENDING.key);
|
|
1514
1535
|
const originKey = `${record.source}:${record.eventId}`;
|
|
@@ -1804,6 +1825,7 @@ class OuroDaemon {
|
|
|
1804
1825
|
data: { decision },
|
|
1805
1826
|
};
|
|
1806
1827
|
}
|
|
1828
|
+
this.queueOperatorCliMessageForPrivateRuntime(command);
|
|
1807
1829
|
await beforeDispatch?.(decision);
|
|
1808
1830
|
await this.processManager.startAgent(command.agent);
|
|
1809
1831
|
const message = this.buildPrivateRuntimeWorkerWakeMessage(command, decision, externalEvent);
|
|
@@ -111,6 +111,26 @@ class FileMessageRouter {
|
|
|
111
111
|
});
|
|
112
112
|
return messages;
|
|
113
113
|
}
|
|
114
|
+
peekInbox(agent) {
|
|
115
|
+
const inboxPath = this.inboxPath(agent);
|
|
116
|
+
if (!fs.existsSync(inboxPath))
|
|
117
|
+
return [];
|
|
118
|
+
const messages = [];
|
|
119
|
+
const raw = fs.readFileSync(inboxPath, "utf-8");
|
|
120
|
+
for (const line of raw.split("\n")) {
|
|
121
|
+
const trimmed = line.trim();
|
|
122
|
+
if (!trimmed)
|
|
123
|
+
continue;
|
|
124
|
+
try {
|
|
125
|
+
messages.push(JSON.parse(trimmed));
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Preserve pollInbox semantics: malformed lines stay untouched and
|
|
129
|
+
// invisible to callers that need valid routed messages.
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return messages;
|
|
133
|
+
}
|
|
114
134
|
inboxPath(agent) {
|
|
115
135
|
return path.join(this.baseDir, `${agent}-inbox.jsonl`);
|
|
116
136
|
}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ouro.bot/cli",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.790",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@ouro.bot/cli",
|
|
9
|
-
"version": "0.1.0-alpha.
|
|
9
|
+
"version": "0.1.0-alpha.790",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
12
12
|
"@azure/identity": "^4.13.0",
|