@ouro.bot/cli 0.1.0-alpha.316 → 0.1.0-alpha.318
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 +196 -181
- package/dist/heart/daemon/daemon-entry.js +9 -3
- package/dist/heart/session-events.js +41 -0
- package/dist/mind/context.js +1 -1
- package/dist/mind/prompt.js +14 -2
- package/package.json +1 -1
|
@@ -130,9 +130,15 @@ const router = new message_router_1.FileMessageRouter();
|
|
|
130
130
|
const senseManager = new sense_manager_1.DaemonSenseManager({
|
|
131
131
|
agents: [...managedAgents],
|
|
132
132
|
});
|
|
133
|
-
/* v8 ignore next
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
/* v8 ignore next 5 -- entry-point wiring: probe factory and HealthMonitor both have full unit tests @preserve */
|
|
134
|
+
let bbPort = 18790;
|
|
135
|
+
try {
|
|
136
|
+
bbPort = (0, config_1.getBlueBubblesChannelConfig)().port;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Daemon runs without --agent; agent-scoped config may not be available.
|
|
140
|
+
}
|
|
141
|
+
const bbProbe = (0, http_health_probe_1.createHttpHealthProbe)("bluebubbles", bbPort);
|
|
136
142
|
const healthMonitor = new health_monitor_1.HealthMonitor({
|
|
137
143
|
processManager,
|
|
138
144
|
scheduler,
|
|
@@ -39,6 +39,7 @@ exports.repairSessionMessages = repairSessionMessages;
|
|
|
39
39
|
exports.migrateToolNames = migrateToolNames;
|
|
40
40
|
exports.sanitizeProviderMessages = sanitizeProviderMessages;
|
|
41
41
|
exports.projectProviderMessages = projectProviderMessages;
|
|
42
|
+
exports.annotateMessageTimestamps = annotateMessageTimestamps;
|
|
42
43
|
exports.bestEventTimestamp = bestEventTimestamp;
|
|
43
44
|
exports.formatSessionEventTimestamp = formatSessionEventTimestamp;
|
|
44
45
|
exports.extractEventText = extractEventText;
|
|
@@ -430,6 +431,46 @@ function projectProviderMessages(envelope) {
|
|
|
430
431
|
hadToolCallsField: event.toolCalls.length > 0,
|
|
431
432
|
}));
|
|
432
433
|
}
|
|
434
|
+
/**
|
|
435
|
+
* Annotate user and assistant messages with a relative time offset tag.
|
|
436
|
+
* System and tool messages are untouched.
|
|
437
|
+
*/
|
|
438
|
+
function annotateMessageTimestamps(envelope, messages, nowMs = Date.now()) {
|
|
439
|
+
const eventIds = envelope.projection.eventIds.length > 0
|
|
440
|
+
? envelope.projection.eventIds
|
|
441
|
+
: envelope.events.map((event) => event.id);
|
|
442
|
+
const byId = new Map(envelope.events.map((event) => [event.id, event]));
|
|
443
|
+
const events = eventIds
|
|
444
|
+
.map((id) => byId.get(id))
|
|
445
|
+
.filter((event) => Boolean(event));
|
|
446
|
+
return messages.map((msg, i) => {
|
|
447
|
+
const event = events[i];
|
|
448
|
+
if (!event)
|
|
449
|
+
return msg;
|
|
450
|
+
if (event.role !== "user" && event.role !== "assistant")
|
|
451
|
+
return msg;
|
|
452
|
+
const ts = bestEventTimestamp(event);
|
|
453
|
+
const elapsed = nowMs - Date.parse(ts);
|
|
454
|
+
if (elapsed < 0)
|
|
455
|
+
return msg;
|
|
456
|
+
const tag = elapsed < 60000 ? "[just now]" : `[-${formatElapsedCompact(elapsed)}]`;
|
|
457
|
+
if (typeof msg.content === "string" && msg.content.length > 0) {
|
|
458
|
+
return { ...msg, content: `${tag} ${msg.content}` };
|
|
459
|
+
}
|
|
460
|
+
return msg;
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
/** Compact elapsed format for message annotations: "3m", "2h", "1d". */
|
|
464
|
+
function formatElapsedCompact(ms) {
|
|
465
|
+
const minutes = Math.max(1, Math.floor(ms / 60000));
|
|
466
|
+
if (minutes < 60)
|
|
467
|
+
return `${minutes}m`;
|
|
468
|
+
const hours = Math.floor(minutes / 60);
|
|
469
|
+
if (hours < 24)
|
|
470
|
+
return `${hours}h`;
|
|
471
|
+
const days = Math.floor(hours / 24);
|
|
472
|
+
return `${days}d`;
|
|
473
|
+
}
|
|
433
474
|
function bestEventTimestamp(event) {
|
|
434
475
|
return event.time.authoredAt ?? event.time.observedAt ?? event.time.recordedAt;
|
|
435
476
|
}
|
package/dist/mind/context.js
CHANGED
|
@@ -237,7 +237,7 @@ function loadSession(filePath) {
|
|
|
237
237
|
if (!envelope)
|
|
238
238
|
return null;
|
|
239
239
|
return {
|
|
240
|
-
messages: (0, session_events_1.projectProviderMessages)(envelope),
|
|
240
|
+
messages: (0, session_events_1.annotateMessageTimestamps)(envelope, (0, session_events_1.projectProviderMessages)(envelope)),
|
|
241
241
|
events: envelope.events,
|
|
242
242
|
lastUsage: envelope.lastUsage ?? undefined,
|
|
243
243
|
state: denormalizeContinuityState(envelope.state),
|
package/dist/mind/prompt.js
CHANGED
|
@@ -453,8 +453,20 @@ function providerSection(channel) {
|
|
|
453
453
|
return `## my provider\n${(0, core_1.getProviderDisplayLabel)((0, channel_1.channelToFacing)(channel))}`;
|
|
454
454
|
}
|
|
455
455
|
function dateSection() {
|
|
456
|
-
const
|
|
457
|
-
|
|
456
|
+
const now = new Date();
|
|
457
|
+
const fmt = new Intl.DateTimeFormat("en-US", {
|
|
458
|
+
year: "numeric",
|
|
459
|
+
month: "2-digit",
|
|
460
|
+
day: "2-digit",
|
|
461
|
+
hour: "2-digit",
|
|
462
|
+
minute: "2-digit",
|
|
463
|
+
hour12: false,
|
|
464
|
+
timeZoneName: "short",
|
|
465
|
+
});
|
|
466
|
+
const parts = Object.fromEntries(fmt.formatToParts(now).map((p) => [p.type, p.value]));
|
|
467
|
+
/* v8 ignore next -- Intl hour-24 bug only triggers at midnight @preserve */
|
|
468
|
+
const hour = parts.hour === "24" ? "00" : parts.hour;
|
|
469
|
+
return `current date and time: ${parts.year}-${parts.month}-${parts.day} ${hour}:${parts.minute} ${parts.timeZoneName}`;
|
|
458
470
|
}
|
|
459
471
|
function toolsSection(channel, options, context) {
|
|
460
472
|
const channelTools = (0, tools_1.getToolsForChannel)((0, channel_1.getChannelCapabilities)(channel), undefined, context, options?.providerCapabilities, undefined, options?.chatModel);
|