@adhdev/daemon-core 0.8.24 → 0.8.27
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/dist/agent-stream/provider-adapter.d.ts +1 -0
- package/dist/boot/daemon-lifecycle.d.ts +2 -0
- package/dist/cli-adapters/pty-transport.d.ts +3 -0
- package/dist/commands/router.d.ts +24 -0
- package/dist/index.js +309 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +309 -19
- package/dist/index.mjs.map +1 -1
- package/dist/providers/cli-provider-instance.d.ts +1 -0
- package/dist/providers/extension-provider-instance.d.ts +7 -0
- package/dist/sessions/reconcile.d.ts +22 -0
- package/dist/status/normalize.js +14 -2
- package/dist/status/normalize.js.map +1 -1
- package/dist/status/normalize.mjs +14 -2
- package/dist/status/normalize.mjs.map +1 -1
- package/dist/status/snapshot.d.ts +0 -2
- package/node_modules/@adhdev/session-host-core/dist/index.d.mts +72 -1
- package/node_modules/@adhdev/session-host-core/dist/index.d.ts +72 -1
- package/node_modules/@adhdev/session-host-core/dist/index.js.map +1 -1
- package/node_modules/@adhdev/session-host-core/package.json +1 -1
- package/package.json +1 -1
- package/src/agent-stream/poller.ts +4 -0
- package/src/agent-stream/provider-adapter.ts +30 -1
- package/src/boot/daemon-lifecycle.ts +3 -0
- package/src/cli-adapters/pty-transport.ts +3 -0
- package/src/cli-adapters/session-host-transport.ts +8 -0
- package/src/commands/chat-commands.ts +2 -2
- package/src/commands/handler.ts +79 -13
- package/src/commands/router.ts +132 -0
- package/src/providers/cli-provider-instance.ts +29 -1
- package/src/providers/extension-provider-instance.ts +24 -1
- package/src/sessions/reconcile.ts +85 -0
- package/src/status/normalize.ts +19 -2
- package/src/status/snapshot.ts +6 -13
package/src/status/normalize.ts
CHANGED
|
@@ -64,6 +64,23 @@ function trimMessageForStatus(message: unknown, stringLimit: number): unknown {
|
|
|
64
64
|
return trimStructuredStrings(message, stringLimit);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Collapse timestamp / createdAt into receivedAt so downstream consumers
|
|
69
|
+
* only ever need to read a single canonical time field.
|
|
70
|
+
*/
|
|
71
|
+
function normalizeMessageTime(message: unknown): unknown {
|
|
72
|
+
if (!message || typeof message !== 'object') return message;
|
|
73
|
+
const msg = message as Record<string, unknown>;
|
|
74
|
+
if (msg.receivedAt == null) {
|
|
75
|
+
const fallback = msg.timestamp ?? msg.createdAt;
|
|
76
|
+
if (fallback != null) {
|
|
77
|
+
const ts = typeof fallback === 'string' ? Date.parse(fallback as string) : Number(fallback);
|
|
78
|
+
if (Number.isFinite(ts) && ts > 0) msg.receivedAt = ts;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return msg;
|
|
82
|
+
}
|
|
83
|
+
|
|
67
84
|
function trimMessagesForStatus(messages: unknown[] | null | undefined): unknown[] {
|
|
68
85
|
if (!Array.isArray(messages) || messages.length === 0) return [];
|
|
69
86
|
|
|
@@ -72,11 +89,11 @@ function trimMessagesForStatus(messages: unknown[] | null | undefined): unknown[
|
|
|
72
89
|
let totalBytes = 0;
|
|
73
90
|
|
|
74
91
|
for (let i = recent.length - 1; i >= 0; i -= 1) {
|
|
75
|
-
let normalized = trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_STRING_LIMIT);
|
|
92
|
+
let normalized = normalizeMessageTime(trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_STRING_LIMIT));
|
|
76
93
|
let size = estimateBytes(normalized);
|
|
77
94
|
|
|
78
95
|
if (size > STATUS_ACTIVE_CHAT_TOTAL_BYTES_LIMIT) {
|
|
79
|
-
normalized = trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_FALLBACK_STRING_LIMIT);
|
|
96
|
+
normalized = normalizeMessageTime(trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_FALLBACK_STRING_LIMIT));
|
|
80
97
|
size = estimateBytes(normalized);
|
|
81
98
|
}
|
|
82
99
|
|
package/src/status/snapshot.ts
CHANGED
|
@@ -95,17 +95,12 @@ function parseMessageTime(value: unknown): number {
|
|
|
95
95
|
|
|
96
96
|
function getSessionMessageUpdatedAt(session: {
|
|
97
97
|
activeChat?: {
|
|
98
|
-
messages?: Array<{
|
|
98
|
+
messages?: Array<{ receivedAt?: number | string }> | null
|
|
99
99
|
} | null
|
|
100
100
|
}) {
|
|
101
101
|
const lastMessage = session.activeChat?.messages?.at?.(-1);
|
|
102
102
|
if (!lastMessage) return 0;
|
|
103
|
-
return (
|
|
104
|
-
parseMessageTime(lastMessage.timestamp)
|
|
105
|
-
|| parseMessageTime(lastMessage.receivedAt)
|
|
106
|
-
|| parseMessageTime(lastMessage.createdAt)
|
|
107
|
-
|| 0
|
|
108
|
-
);
|
|
103
|
+
return parseMessageTime(lastMessage.receivedAt) || 0;
|
|
109
104
|
}
|
|
110
105
|
|
|
111
106
|
export function getSessionCompletionMarker(session: {
|
|
@@ -114,9 +109,7 @@ export function getSessionCompletionMarker(session: {
|
|
|
114
109
|
role?: string;
|
|
115
110
|
id?: string;
|
|
116
111
|
index?: number;
|
|
117
|
-
timestamp?: number | string;
|
|
118
112
|
receivedAt?: number | string;
|
|
119
|
-
createdAt?: number | string;
|
|
120
113
|
_turnKey?: string;
|
|
121
114
|
}> | null
|
|
122
115
|
} | null
|
|
@@ -124,17 +117,17 @@ export function getSessionCompletionMarker(session: {
|
|
|
124
117
|
const lastMessage = session.activeChat?.messages?.at?.(-1) as any;
|
|
125
118
|
if (!lastMessage) return '';
|
|
126
119
|
const role = typeof lastMessage.role === 'string' ? lastMessage.role : '';
|
|
127
|
-
if (role === 'user' || role === 'human') return '';
|
|
120
|
+
if (role === 'user' || role === 'human' || role === 'system') return '';
|
|
128
121
|
if (typeof lastMessage._turnKey === 'string' && lastMessage._turnKey) return `turn:${lastMessage._turnKey}`;
|
|
129
122
|
if (typeof lastMessage.id === 'string' && lastMessage.id) return `id:${lastMessage.id}`;
|
|
130
123
|
if (typeof lastMessage.index === 'number' && Number.isFinite(lastMessage.index)) return `idx:${lastMessage.index}`;
|
|
131
|
-
const timestamp = parseMessageTime(lastMessage.
|
|
124
|
+
const timestamp = parseMessageTime(lastMessage.receivedAt);
|
|
132
125
|
return timestamp > 0 ? `ts:${timestamp}` : '';
|
|
133
126
|
}
|
|
134
127
|
|
|
135
128
|
function getSessionLastUsedAt(session: {
|
|
136
129
|
activeChat?: {
|
|
137
|
-
messages?: Array<{
|
|
130
|
+
messages?: Array<{ receivedAt?: number | string }> | null
|
|
138
131
|
} | null
|
|
139
132
|
lastUpdated?: number
|
|
140
133
|
}) {
|
|
@@ -171,7 +164,7 @@ function getUnreadState(
|
|
|
171
164
|
}
|
|
172
165
|
const unread = completionMarker
|
|
173
166
|
? completionMarker !== seenCompletionMarker
|
|
174
|
-
: hasContentChange && lastUsedAt > lastSeenAt && lastRole !== 'user' && lastRole !== 'human';
|
|
167
|
+
: hasContentChange && lastUsedAt > lastSeenAt && lastRole !== 'user' && lastRole !== 'human' && lastRole !== 'system';
|
|
175
168
|
return { unread, inboxBucket: unread ? 'task_complete' : 'idle' };
|
|
176
169
|
}
|
|
177
170
|
|